From f6eacf7744463ad61728b4897f672932f1a0e05e Mon Sep 17 00:00:00 2001 From: "Terry A. Davis" Date: Wed, 11 Jan 2017 00:30:10 +0100 Subject: [PATCH] TempleOSCDV5.00.ISO --- 0000Boot/0000Kernel.BIN.C | Bin 191440 -> 191888 bytes Adam/ABlkDev/FileMgr.HC | 26 +- Adam/ABlkDev/Mount.HC | 47 +- Adam/ABlkDev/PrtDsk.HC | 52 +- Adam/ADefine.HC | 16 +- Adam/AExts.HC | 7 +- Adam/AMath.HC | 12 +- Adam/AMem.HC | 2 +- Adam/{AInputPointer.HC => AMouse.HC} | Bin 986 -> 947 bytes Adam/ARegistry.HC | 120 +- Adam/AutoComplete/ACFill.HC | 4 +- Adam/AutoComplete/ACInit.HC | 4 +- Adam/AutoComplete/ACTask.HC | 8 +- Adam/CPURep.HC | 16 +- Adam/Ctrls/CtrlsA.HC | 6 +- Adam/Ctrls/{CtrlsButton.HC => CtrlsBttn.HC} | 42 +- Adam/Ctrls/CtrlsSlider.HC | 2 +- Adam/Ctrls/MakeCtrls.HC | 2 +- Adam/DevInfo.HC | 45 +- Adam/DolDoc/DocChar.HC | 6 +- Adam/DolDoc/DocCodeTools.HC | 34 +- Adam/DolDoc/DocDblBuf.HC | 2 + Adam/DolDoc/DocEd.HC | 2 +- Adam/DolDoc/DocFile.HC | 3 - Adam/DolDoc/DocGr.HC | 26 +- Adam/DolDoc/DocHighlight.HC | 4 +- Adam/DolDoc/DocMacro.HC | 34 +- Adam/DolDoc/DocPopUp.HC | 14 +- Adam/DolDoc/DocPutKey.HC | 4 +- Adam/DolDoc/DocPutS.HC | 26 +- Adam/DolDoc/DocRecalc.HC | 6 +- Adam/DolDoc/DocRun.HC | 12 +- Adam/DolDoc/DocWidgetWiz.HC | 12 +- Adam/DolDoc/MakeDoc.HC | 1 - Adam/God/GodDoodle.HC | 4 +- Adam/God/GodSong.HC | 37 +- Adam/God/HSNotes.DD | 10 +- Adam/God/HolySpirit.HC | 18 +- Adam/Gr/GrComposites.HC | 32 +- Adam/Gr/GrDC.HC | 18 +- Adam/Gr/GrGlbls.HC | 6 +- Adam/Gr/GrInitB.HC | 2 +- Adam/Gr/GrMath.HC | 18 +- Adam/Gr/GrPalette.HC | 12 +- Adam/Gr/GrPrimatives.HC | 22 +- Adam/Gr/GrScrn.HC | 22 +- Adam/Gr/GrSpritePlot.HC | 14 +- Adam/Gr/GrTextBase.HC | 2 +- Adam/Gr/SpriteBitMap.HC | 135 +- Adam/Gr/SpriteEd.HC | 121 +- Adam/Gr/SpriteMain.HC | 248 +- Adam/Gr/SpriteMesh.HC | 159 +- Adam/Gr/SpriteNew.HC | 18 +- Adam/Host.HC | 70 + Adam/InFile.HC | 28 +- Adam/InsReg.HC | 64 + Adam/MakeAdam.HC | 4 +- Adam/Menu.HC | 12 +- Adam/Opt/Boot/BootDVD.HC | 6 +- Adam/Opt/Boot/BootHD.HC | 6 +- Adam/Opt/Boot/BootMHD.HC | 14 +- Adam/Opt/Boot/BootMHD2.HC | 8 +- Adam/Opt/Boot/BootRAM.HC | 9 +- Adam/Opt/Boot/DskISORedSea.HC | 45 +- .../DocOpt.HC => Opt/Utils/DocUtils.HC} | 49 +- Adam/Opt/Utils/HeapLog.HC | 36 +- Adam/Opt/Utils/MakeUtils.HC | 2 + Adam/Opt/Utils/MemRep.HC | 23 +- Adam/Opt/Utils/Profiler.HC | 12 +- Adam/Opt/Utils/StrUtils.HC | 10 +- Adam/Opt/Utils/TOS.HC | 47 + Adam/Snd/MakeSnd.HC | 2 +- Adam/Snd/SndEffects.HC | 60 +- Adam/Snd/SndFile.HC | 3 +- Adam/Snd/SndMath.HC | 24 +- Adam/Snd/SndMusic.HC | 26 +- Adam/TaskRep.HC | 2 +- Adam/TaskSettings.HC | 4 +- Adam/Training.HC | 22 +- Adam/WallPaper.HC | Bin 4867 -> 4859 bytes Adam/Win.HC | 108 +- Adam/WinMgr.HC | 454 +- Apps/AfterEgypt/AESplash.DD | Bin 377006 -> 0 bytes Apps/AfterEgypt/AfterEgypt.HC | 194 - Apps/AfterEgypt/Battle.HC | Bin 3389 -> 0 bytes Apps/AfterEgypt/Comics.HC | 26 - Apps/AfterEgypt/Comics/Moses01.DD | Bin 537 -> 0 bytes Apps/AfterEgypt/Comics/Moses02.DD | Bin 3535 -> 0 bytes Apps/AfterEgypt/Comics/Moses04.DD | Bin 467 -> 0 bytes Apps/AfterEgypt/Comics/Moses05.DD | Bin 676 -> 0 bytes Apps/AfterEgypt/Comics/Moses06.DD | Bin 667 -> 0 bytes Apps/AfterEgypt/Comics/Moses07.DD | Bin 794 -> 0 bytes Apps/AfterEgypt/Comics/Moses08.DD | Bin 518 -> 0 bytes Apps/AfterEgypt/GodTalking.HC | Bin 17514 -> 0 bytes Apps/AfterEgypt/HorebA.HC | Bin 33450 -> 0 bytes Apps/AfterEgypt/HorebBMP.HC | 97 - Apps/AfterEgypt/HorebBSP.HC | 94 - Apps/AfterEgypt/HorebC.HC | 144 - Apps/AfterEgypt/Load.HC | 24 - Apps/AfterEgypt/Map.HC | 77 - Apps/AfterEgypt/Quail.HC | Bin 3062 -> 0 bytes Apps/AfterEgypt/Run.HC | 3 - Apps/AfterEgypt/WaterRock.HC | Bin 3531 -> 0 bytes Apps/KeepAway/KeepAway.HC | 44 +- Apps/Logic/Logic.HC | 6 +- Apps/Psalmody/Examples/childish.HC | 10 +- Apps/Psalmody/Examples/night.HC | Bin 3393 -> 3403 bytes Apps/Psalmody/Examples/prosper.HC | Bin 5622 -> 5632 bytes Apps/Psalmody/Help.DD | 4 +- Apps/Psalmody/JukeBox.HC | 4 +- Apps/Psalmody/Psalmody.HC | 19 +- Apps/Psalmody/PsalmodyCtrls.HC | 2 +- Apps/Psalmody/PsalmodyDraw.HC | 45 +- Apps/Psalmody/PsalmodyFile.HC | 52 +- Apps/Psalmody/PsalmodyMain.HC | 327 +- Apps/Span/Span.HH | 2 +- Apps/Span/SpanDerive.HC | 4 +- Apps/Span/SpanMain.HC | 106 +- Apps/Strut/Strut.HC | 113 +- Apps/{TimeOut => Titanium}/Load.HC | 2 +- Apps/{TimeOut => Titanium}/Run.HC | 2 +- .../TimeOut.HC => Titanium/Titanium.HC} | 642 ++- Apps/ToTheFront/AIs/Human.HC | 86 +- Apps/ToTheFront/TTFDraw.HC | Bin 5554 -> 5551 bytes Apps/ToTheFront/TTFFire.HC | 22 +- Apps/ToTheFront/TTFMove.HC | 8 +- Apps/ToTheFront/TTFVis.HC | 4 +- Apps/ToTheFront/ToTheFront.HC | 10 +- Apps/Vocabulary/VocabQuiz.HC | 6 +- Apps/X-Caliber/X-Caliber.HC | 243 +- Apps/X-Caliber/XCCtrls.HC | 38 +- Compiler/Asm.HC | 99 +- Compiler/AsmLib.HC | 52 +- Compiler/AsmResolve.HC | 37 +- Compiler/BackA.HC | 332 +- Compiler/BackB.HC | 464 +- Compiler/BackC.HC | 541 +- Compiler/BackFA.HC | 312 +- Compiler/BackFB.HC | 491 +- Compiler/BackLib.HC | 174 +- Compiler/CExcept.HC | 34 +- Compiler/CExts.HC | 2 +- Compiler/CHash.HC | 2 +- Compiler/CMain.HC | 76 +- Compiler/CMisc.HC | 2 +- Compiler/Compiler.BIN | Bin 193807 -> 192834 bytes Compiler/Compiler.MAP | 384 +- Compiler/CompilerB.HH | 6 +- Compiler/Lex.HC | 34 +- Compiler/OptLib.HC | 148 +- Compiler/OptPass012.HC | 140 +- Compiler/OptPass3.HC | 122 +- Compiler/OptPass4.HC | 382 +- Compiler/OptPass5.HC | 64 +- Compiler/OptPass6.HC | 97 +- Compiler/OptPass789A.HC | 682 +-- Compiler/PrsExp.HC | 23 +- Compiler/PrsStmt.HC | 38 +- Compiler/PrsVar.HC | 72 +- Compiler/UAsm.HC | 340 +- Demo/AcctExample/DoOnce.HC | 55 - Demo/AcctExample/HomeKeyPlugIns.HC | 25 +- Demo/AcctExample/HomeLocalize.HC | 12 +- Demo/AcctExample/HomeSys.HC | 2 +- Demo/AcctExample/HomeWrappers.HC | 2 +- Demo/AcctExample/Once.HC | 39 + Demo/AcctExample/PersonalMenu.DD | 683 +-- Demo/AcctExample/PersonalNotes.DD | 51 +- Demo/AcctExample/Registry.HC | 76 +- Demo/AcctExample/TOSBlog.HC | 20 +- Demo/AcctExample/TOSCfg.HC | 34 +- Demo/AcctExample/TOSDistro.HC | 256 +- Demo/AcctExample/TOSHolySpirit.HC | 219 +- Demo/AcctExample/TOSMisc.HC | 113 +- Demo/AcctExample/TOSPolicies.DD | 118 + Demo/AcctExample/TOSToHtml.HC | 12 +- Demo/Asm/AsmAndC1.HC | 32 +- Demo/Asm/AsmAndC2.HC | 24 +- Demo/DolDoc/ClickCallBack.HC | 4 +- Demo/DolDoc/DemoDoc.DD | Bin 4800 -> 4848 bytes Demo/DolDoc/{MenuButton.HC => MenuBttn.HC} | 18 +- Demo/DolDoc/MenuSprite.HC | Bin 1158 -> 1165 bytes Demo/DolDoc/TextDemo.HC | 4 +- Demo/Exceptions.HC | 8 +- Demo/ExtChars.HC | 2 +- Demo/Games/BattleLines.HC | Bin 8347 -> 8279 bytes Demo/Games/BigGuns.HC | Bin 6285 -> 6280 bytes Demo/Games/BlackDiamond.HC | Bin 62079 -> 62052 bytes Demo/Games/BomberGolf.HC | Bin 18600 -> 18571 bytes Demo/Games/CastleFrankenstein.HC | 22 +- Demo/Games/CircleTrace.HC | 50 +- Demo/Games/DunGen.HC | 8 +- Demo/Games/ElephantWalk.HC | Bin 53842 -> 53842 bytes Demo/Games/FlapBat.HC | Bin 7660 -> 7669 bytes Demo/Games/FlatTops.HC | 40 +- Demo/Games/Halogen.HC | 14 +- Demo/Games/MassSpring.HC | 20 +- Demo/Games/Maze.HC | 13 +- Demo/Games/RawHide.HC | 48 +- Demo/Games/Rocket.HC | Bin 4742 -> 80162 bytes Demo/Games/RocketScience.HC | Bin 12911 -> 88328 bytes Demo/Games/Squirt.HC | Bin 9068 -> 84516 bytes Demo/Games/Stadium/Stadium.HC | Bin 3787 -> 3801 bytes Demo/Games/Talons.HC | 240 +- Demo/Games/TheDead.HC | Bin 6963 -> 6984 bytes Demo/Games/TicTacToe.HC | 32 +- Demo/Games/TreeCheckers.HC | 24 +- Demo/Games/Varoom.HC | 14 +- Demo/Games/Wenceslas.HC | 24 +- Demo/Games/Whap.HC | 18 +- Demo/Games/Zing.HC | Bin 4651 -> 4680 bytes Demo/Games/ZoneOut.HC | Bin 111680 -> 111685 bytes Demo/Graphics/3DPoly.HC | 8 +- Demo/Graphics/BSpline.HC | 12 +- Demo/Graphics/Balloon.HC | 2 +- Demo/Graphics/Camp.HC | Bin 23099 -> 0 bytes Demo/Graphics/Collision.HC | Bin 2532 -> 2532 bytes Demo/Graphics/Doodle.HC | 23 +- Demo/Graphics/Elephant.HC | Bin 5123 -> 5136 bytes Demo/Graphics/FontEd.HC | 32 +- Demo/Graphics/Grid.HC | 24 +- Demo/Graphics/Hanoi.HC | 2 +- Demo/Graphics/InputPointer.HC | 11 - Demo/Graphics/Lattice.HC | 32 +- Demo/Graphics/Life.HC | 20 +- Demo/Graphics/Mountain.HC | Bin 83459 -> 0 bytes Demo/Graphics/MouseDemo.HC | 11 + Demo/Graphics/Pick.HC | Bin 2364 -> 2376 bytes Demo/Graphics/Pick3D.HC | Bin 6538 -> 6560 bytes Demo/Graphics/PoleZeros.HC | 41 +- Demo/Graphics/ScrnCapture.HC | 15 +- Demo/Graphics/Shading.HC | 4 +- Demo/Graphics/Shadow.HC | Bin 2307 -> 2296 bytes Demo/Graphics/Slider.HC | 2 +- Demo/Graphics/Speedline.HC | 25 +- Demo/Graphics/Symmetry.HC | 38 +- Demo/Graphics/Transform.HC | Bin 8908 -> 8928 bytes Demo/Graphics/WallPaperCtrl.HC | 2 +- Demo/InFile/INSetIP.HC | 13 - Demo/InFile/{INDir.IN => InDir.IN} | 0 Demo/InFile/{INEd.DD => InEd.DD} | 0 Demo/InFile/{INEd.IN => InEd.IN} | 4 +- Demo/InFile/{INPopUp.HC => InPopUp.HC} | 0 .../InFile/{INPopUpWait.IN => InPopUpWait.IN} | 0 Demo/InFile/{INProfile.IN => InProfile.IN} | 0 Demo/InFile/InSetIP.HC | 13 + Demo/Lectures/MiniGrLib.HC | 4 +- Demo/Lectures/Optimization.HC | 4 +- Demo/Lectures/ScrnMemory.HC | 2 +- Demo/MagicPairs.HC | 2 +- Demo/MemDemo.HC | 24 +- Demo/MsgLoop.HC | 12 +- Demo/MultiCore/Clouds.HC | 205 - Demo/MultiCore/Interrupts.HC | 4 +- Demo/MultiCore/Lock.HC | 4 +- Demo/MultiCore/MPAdd.HC | 2 +- Demo/MultiCore/MPRadix.HC | 32 +- Demo/MultiCore/Palindrome.HC | 2 +- Demo/Progress.HC | 44 +- Demo/PullDownMenu.HC | 20 +- Demo/RegistryDemo.HC | 12 +- Demo/Snd/ASCIIOrgan.HC | Bin 4113 -> 4109 bytes Demo/Snd/MorseCode.HC | 10 +- Demo/Snd/OhGreat.HC | 30 +- Demo/Snd/WaterFowl.HC | Bin 308892 -> 308907 bytes Demo/Templates/Game1.HC | 2 +- Demo/Templates/Registry1.HC | 6 +- Demo/ToHtmlToTXTDemo/DemoInPage.DD | 14 +- Demo/ToHtmlToTXTDemo/ToHtml.HC | 8 +- Demo/WebLogDemo/WebLogRep.HC | 12 +- Doc/Boot.DD | Bin 5357 -> 5402 bytes Doc/ChangeLog.DD | 333 +- Doc/Charter.DD | 6 +- Doc/Credits.DD | 6 +- Doc/Ctrls.DD | 2 +- Doc/Customize.DD | 4 +- Doc/DbgOverview.DD | 6 +- Doc/Demands.DD | 4 +- Doc/DemoIndex.DD | 10 +- Doc/Directives.DD | 2 +- Doc/DolDocOverview.DD | 14 +- Doc/Features.DD | 2 +- Doc/Glossary.DD | 12 +- Doc/GraphicsOverview.DD | Bin 6782 -> 6785 bytes Doc/GuideLines.DD | 4 +- Doc/HelpIndex.DD | Bin 6975 -> 6971 bytes Doc/HolyC.DD | 2 +- Doc/InFile.DD | 2 +- Doc/InputPointer.DD | 16 - Doc/{TaskSrv.DD => Job.DD} | Bin 2247 -> 2199 bytes Doc/KeyAlloc.DD | 6 +- Doc/KeyDev.DD | 8 +- Doc/MemOverview.DD | 46 +- Doc/Menus.DD | 2 +- Doc/Mouse.DD | 16 + Doc/MultiCore.DD | 2 +- Doc/Pags.DD | 1 + Doc/Print.DD | 8 +- Doc/Quirks.DD | 2 +- Doc/RedSea.DD | 4 +- Doc/Requirements.DD | 2 +- Doc/Snd.DD | 1 + Doc/Sprite.DD | 2 +- Doc/Start.DD | 2 +- Doc/StdTempleOSPC.DD | 15 +- Doc/Strategy.DD | 6 +- Doc/Tips.DD | 2 +- HomeKeyPlugIns.HC | 2 +- HomeLocalize.HC | 12 +- HomeSys.HC | 2 +- Kernel/BlkDev/DskATA.HC | 41 +- Kernel/BlkDev/DskATAId.HC | 2 +- Kernel/BlkDev/DskAddDev.HC | 32 +- Kernel/BlkDev/DskBlkDev.HC | 19 +- Kernel/BlkDev/DskCDDVD.HC | 16 +- Kernel/BlkDev/DskCache.HC | 16 +- Kernel/BlkDev/DskDrv.HC | 40 +- Kernel/BlkDev/DskFmt.HC | 6 +- Kernel/BlkDev/DskStrA.HC | 2 +- Kernel/BlkDev/FileSysFAT.HC | 18 +- Kernel/BlkDev/FileSysISO.HC | 2 +- Kernel/BlkDev/FileSysRedSea.HC | 8 +- Kernel/Compress.HC | 2 +- Kernel/Display.HC | 4 +- Kernel/EdLite.HC | 10 +- Kernel/{SrvCmd.HC => Job.HC} | 210 +- Kernel/KCfg.HC | 25 +- Kernel/KDate.HC | 4 +- Kernel/KDbg.HC | 54 +- Kernel/KDefine.HC | 6 +- Kernel/KEnd.HC | 25 +- Kernel/KExcept.HC | 56 +- Kernel/KExts.HC | 32 +- Kernel/KGlbls.HC | 12 +- Kernel/KInts.HC | 10 +- Kernel/KLoad.HC | 6 +- Kernel/KMisc.HC | 109 +- Kernel/KStart16.HC | 73 +- Kernel/KStart32.HC | 34 +- Kernel/KStart64.HC | 6 +- Kernel/KTask.HC | 61 +- Kernel/Kernel.MAP | 4780 +++++++++-------- Kernel/Kernel.PRJ | 2 +- Kernel/KernelA.HH | 498 +- Kernel/KernelB.HH | 21 +- Kernel/KernelC.HH | 216 +- Kernel/KeyDev.HC | 16 +- Kernel/Mem/BlkPool.HC | 29 +- Kernel/Mem/HeapCtrl.HC | 2 +- Kernel/Mem/MAllocFree.HC | 36 +- Kernel/Mem/MakeMem.HC | 2 +- Kernel/Mem/{Mem512.HC => MemPag.HC} | 91 +- Kernel/Mem/MemPhysical.HC | 55 +- Kernel/Mem/PageTables.HC | 225 +- Kernel/MultiProc.HC | 65 +- Kernel/PCIBIOS.HC | 28 +- Kernel/Sched.HC | 16 +- Kernel/SerialDev/InputPointer.HC | 84 - Kernel/SerialDev/Keyboard.HC | 26 +- Kernel/SerialDev/MakeSerialDev.HC | 1 - Kernel/SerialDev/Message.HC | 56 +- Kernel/SerialDev/Mouse.HC | 333 +- Kernel/StrA.HC | 63 +- Kernel/StrPrint.HC | 2 +- Kernel/StrScan.HC | 10 +- Misc/DoDistro.HC | 2 +- Misc/OSInstall.HC | 14 +- Misc/OSTestSuite.HC | 648 ++- Misc/PCIDevices.DD | 2 +- Misc/Tour/Tour.IN | 12 +- Misc/Tour/Tour1.IN | 6 +- DoOnce.HC => Once.HC | 9 +- PersonalMenu.DD | Bin 64500 -> 63243 bytes StartOS.HC | 5 +- 374 files changed, 11078 insertions(+), 11204 deletions(-) rename Adam/{AInputPointer.HC => AMouse.HC} (83%) rename Adam/Ctrls/{CtrlsButton.HC => CtrlsBttn.HC} (60%) create mode 100644 Adam/Host.HC create mode 100644 Adam/InsReg.HC rename Adam/{DolDoc/DocOpt.HC => Opt/Utils/DocUtils.HC} (65%) create mode 100644 Adam/Opt/Utils/TOS.HC delete mode 100644 Apps/AfterEgypt/AESplash.DD delete mode 100644 Apps/AfterEgypt/AfterEgypt.HC delete mode 100644 Apps/AfterEgypt/Battle.HC delete mode 100644 Apps/AfterEgypt/Comics.HC delete mode 100644 Apps/AfterEgypt/Comics/Moses01.DD delete mode 100644 Apps/AfterEgypt/Comics/Moses02.DD delete mode 100644 Apps/AfterEgypt/Comics/Moses04.DD delete mode 100644 Apps/AfterEgypt/Comics/Moses05.DD delete mode 100644 Apps/AfterEgypt/Comics/Moses06.DD delete mode 100644 Apps/AfterEgypt/Comics/Moses07.DD delete mode 100644 Apps/AfterEgypt/Comics/Moses08.DD delete mode 100644 Apps/AfterEgypt/GodTalking.HC delete mode 100644 Apps/AfterEgypt/HorebA.HC delete mode 100644 Apps/AfterEgypt/HorebBMP.HC delete mode 100644 Apps/AfterEgypt/HorebBSP.HC delete mode 100644 Apps/AfterEgypt/HorebC.HC delete mode 100644 Apps/AfterEgypt/Load.HC delete mode 100644 Apps/AfterEgypt/Map.HC delete mode 100644 Apps/AfterEgypt/Quail.HC delete mode 100644 Apps/AfterEgypt/Run.HC delete mode 100644 Apps/AfterEgypt/WaterRock.HC rename Apps/{TimeOut => Titanium}/Load.HC (71%) rename Apps/{TimeOut => Titanium}/Run.HC (76%) rename Apps/{TimeOut/TimeOut.HC => Titanium/Titanium.HC} (54%) delete mode 100644 Demo/AcctExample/DoOnce.HC create mode 100644 Demo/AcctExample/Once.HC create mode 100644 Demo/AcctExample/TOSPolicies.DD rename Demo/DolDoc/{MenuButton.HC => MenuBttn.HC} (86%) delete mode 100644 Demo/Graphics/Camp.HC delete mode 100644 Demo/Graphics/InputPointer.HC delete mode 100644 Demo/Graphics/Mountain.HC create mode 100644 Demo/Graphics/MouseDemo.HC delete mode 100644 Demo/InFile/INSetIP.HC rename Demo/InFile/{INDir.IN => InDir.IN} (100%) rename Demo/InFile/{INEd.DD => InEd.DD} (100%) rename Demo/InFile/{INEd.IN => InEd.IN} (90%) rename Demo/InFile/{INPopUp.HC => InPopUp.HC} (100%) rename Demo/InFile/{INPopUpWait.IN => InPopUpWait.IN} (100%) rename Demo/InFile/{INProfile.IN => InProfile.IN} (100%) create mode 100644 Demo/InFile/InSetIP.HC delete mode 100644 Demo/MultiCore/Clouds.HC delete mode 100644 Doc/InputPointer.DD rename Doc/{TaskSrv.DD => Job.DD} (53%) create mode 100644 Doc/Mouse.DD create mode 100644 Doc/Pags.DD create mode 100644 Doc/Snd.DD rename Kernel/{SrvCmd.HC => Job.HC} (70%) rename Kernel/Mem/{Mem512.HC => MemPag.HC} (58%) delete mode 100644 Kernel/SerialDev/InputPointer.HC rename DoOnce.HC => Once.HC (85%) diff --git a/0000Boot/0000Kernel.BIN.C b/0000Boot/0000Kernel.BIN.C index ffd9f3d147a4e6ad7db542b21d49494688ff36dc..e1b8dc80ae2da067f3c51aa1cff33f511fca3811 100644 GIT binary patch delta 72687 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

o^k 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�)~td^)?_)I|D)Ov;(EC9{k&4 z|9b>`{5MqriLVR*tthJf|DYrjTw{9tH{}6|KMVk?F9}Ad|HJ$L|BK3i|NmcKMF`#p z38sJ)gQ{VV|EA|a0*gTctp`d(J@~f;L9N>dlCTDAKY18bd4l%-hlF|tcn1D~EXp{> z`il4ee@2&YtWo@+Nqx>^tT#Xcuf;vOk9u^nitvGw2P+TX^q+=|@;ovYj0_pd7K{up zp5C9XV#H|9^N{EN{}<+l*Ac}vN>2vP?|MfvV z2TrmvU@?)4h!fgnFs$i(ZwJU z{?!5=J0g%oCqhIM1zziTpeQc|OKe6{o(vT|d6*%!7~FRCXnvyrY785H^XRsXxcl!v zs6E|!pd{L(*YyKv2~i67|Nk!-1E!0cFlsPy=uCGsVH9_Kug$;!T1&(9dZ|bEG4MWb z&?ph8kqe4Jk8aj3kl(FYFLV9>U&rau&059t|Nm=tk8akJT%cCs^o<6LlJ!CC(5?|P zt2+-OH3x$N=!Y+AYF6Wcq-Kztj6e$h`+%BVrXcYbuYEx^=>Z>WR#4EFYQvH&CrF{1 zFC@u=5*;+n{RDYx-}IAKjOsF=C;+9cE8PG8|1afo`Nnz@%;G%8>M@D!!cG* z5S7+wn{eXa{{!<&`8|%ielYmM$>7oL`{5WPV}`yhBSVInEhEE=uebmIe_`qKsXj4HfSIxZHeA7zW-oN73)(V@Grd?oUB`w|LbM#Dv<{>+5TsP)`Tzefo=@Lk%P2m*z=ly; z(gtF-#f!vi&milWUZ}p9zQl%6P314h=;k99$6TK?W+`N)yij@e|No2W&p^wK z|7Rs+rMwV+HvOFqqb%E(r=X)Bz$Pn!RA;1ve3}RHX~wPp|1;Ks3{H8m2c+!#EpYQY z(B&IzDkm&9VnD1CUXSCfhMfQZgO=I8=Jq(ws>1pIKj?fHmv64m|CgF%oC6tq6=WKgZt;fW|9=l{)>shr{e@5W36E~p2Oy3%YaodF{=$>_AgJfqdY~l8 zqnot_B&f~GI$gnzQ7Jcy`Tu{(g;bsqpy3zL$|KK!J2oH@kA7A|kn(O>BM{Xo zyP4zvfAGF!ST^Gb^XN96%klqzMl-0C*iqmH$}Zrs?jJDbi@&e`{rBiJEt|gHj#0dR z9w>i+#$b5Yu!F~7V1pdIF)Yx2ZYOIZJ7}z>8m_bxO{pb9sU28p1YBtvno==@Qfc=8 z|0D0~vclD7gXCmXU@kCS%?x%?bnuJv7yrOJ#v!9ZlOf`s5%+Z!Sim6$**gGQ&e;5q zp_bD_)0BPsJbOmT`nSv=mrrK{mELbS?(qJFX@v|Znc715(ZMemQLIpfh=Z)y1c?+( zD`qnP|NmOTqwybju*Q}tW8T&!|(;3uuPT%Rks3Uru_5c4`MUP$=(>tKT>;&uo|1a)N z|K-4_AhwDXRLE^$^5Ea*d&fihpvT1@9jw!)8#pqG>NY~;1VD24L2?IwuynBIKtvUg zL|Hpn!>1QHGN$u)v;6<>!zkOs0@^2F+dKV*BcpwNDa-%=FTDSNW-&oSgQl)%5&M+^ zp0tEO5eQ1@cTCmMR9#1?`T~jr@Gzq(Cz`6A2vygZ!Glfm>?|PKR&x4UCr0UdanQWr ze^XPY|Nmcfxq=Jyhs^)~zo>(-RYBrGpjoWrtall~BN+_GSi_k9|7VCjyvzsG((4{(Z7SU;}uWL8B$?P*Yj| zF-^bV%qVAZj|tR7;d-%(`~Ux!p#4rR-&g|~A!1wq{r~@RHYoSEek;*-`Np~dtXR?I z8|#YcYA%chE+0Ss|Nr`p%Qx093?MD+FCzZ^|Nq+2&bsXSpy+fd-tOrb7nZGeEs!(5xH0S@R

A(M33|Sm6 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 - GrPrint(dc,ip.pos.x,ip.pos.y,"%s",fm_ip_str); + GrPrint(dc,ms.pos.x,ms.pos.y,"%s",fm_ms_str); } (*fp_old_final_scrn_update)(dc); } @@ -581,7 +581,7 @@ U0 FMFinalScrnUpdate(CDC *dc) public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) {//File manager. Also, used to choose files and dirs. CDirEntry *head=NULL,*tmpde,*tmpde1,*tmpde2; - I64 sc,ch,a1,a2,msg_code; + I64 sc,ch,arg1,arg2,msg_code; CDoc *doc=NULL,*old_put_doc=DocPut,*old_display_doc=DocDisplay; U8 *res=NULL,*st,*st2,*old_cur_dir=CurDir; CDocEntry *doc_ce=NULL,*doc_e; @@ -600,26 +600,26 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) } do { DocUnlock(doc); - do msg_code=GetMsg(&a1,&a2,1<cur_entry; - fm_ip_str=doc_ce->tag; + fm_ms_str=doc_ce->tag; gr.fp_final_scrn_update=&FMFinalScrnUpdate; break; - case MSG_IP_L_UP: + case MSG_MS_L_UP: if (doc_ce) { gr.fp_final_scrn_update=fp_old_final_scrn_update; - if (WinCursorPosSet(Fs,a1+Fs->pix_left+Fs->scroll_x, - a2+Fs->pix_top+Fs->scroll_y,TRUE)) { + if (WinCursorPosSet(Fs,arg1+Fs->pix_left+Fs->scroll_x, + arg2+Fs->pix_top+Fs->scroll_y,TRUE)) { doc_e=doc->cur_entry; if (doc_e!=doc_ce) { st2=NULL; @@ -678,7 +678,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) break; case MSG_KEY_DOWN: doc_ce=NULL; - ch=a1; sc=a2; + ch=arg1; sc=arg2; if (sc.u8[0]==SC_DELETE && !(sc&(SCF_SHIFT|SCF_CTRL))) ch=CH_CTRLY; if (ch && sc&SCF_ALT) goto fm_regular_key; diff --git a/Adam/ABlkDev/Mount.HC b/Adam/ABlkDev/Mount.HC index 01df9ef..4d10b0d 100644 --- a/Adam/ABlkDev/Mount.HC +++ b/Adam/ABlkDev/Mount.HC @@ -1,13 +1,14 @@ #help_index "Install;File/Cmd Line (Typically);Cmd Line (Typically);" -I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) +U8 Mount2(U8 boot_drv_let,CDoc *_doc,Bool _caller_is_prtdsk) {//If _doc, called by $LK,"::/Kernel/KCfg.HC"$ else called by $LK,"Mount",A="MN:Mount"$(). - I64 cnt,res=0,num_hints,drv_let,type,unit; + I64 cnt,total=0,num_hints,drv_let,type,unit,prt_num; U8 blks_buf[STR_LEN],addr_buf[STR_LEN],base0_buf[STR_LEN],base1_buf[STR_LEN], - *filename=NULL,*filename2=NULL; + *filename=NULL,*filename2=NULL,res=0; CATARep *head=NULL,*tmpha; - Bool one_drv,make_free; + Bool whole_drv,make_free; CDoc *doc; - boot_drv_let=ToUpper(boot_drv_let); + if (boot_drv_let) + boot_drv_let=Let2Let(boot_drv_let); do { cnt=0; if (!_doc) @@ -19,10 +20,10 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) "$$GREEN$$Q$$FG$$-$$GREEN$$S$$FG$$ are ISO file write drives.\n" "$$GREEN$$T$$FG$$-$$GREEN$$Z$$FG$$ are ATAPI CD/DVD drives.\n" "\nDrive Letter ($$PURPLE$$$$FG$$ to exit):"; - drv_let=ToUpper(GetChar); + drv_let=Let2Let(GetChar); '\n'; if (type=Let2BlkDevType(drv_let)) { - one_drv=FALSE; + whole_drv=FALSE; if (_doc) { //Called by $LK,"::/Kernel/KCfg.HC"$ doc=_doc; make_free=FALSE; @@ -32,6 +33,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) make_free=TRUE; } unit=0; + prt_num=MIN_I64; switch (type) { case BDT_RAM: "Addr of RAM disk ($$PURPLE$$$$FG$$ to MAlloc):"; @@ -44,6 +46,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) filename=GetStr("File Name:"); break; case BDT_ATA: + prt_num=GetI64("Partition Num (Default=All):",prt_num); case BDT_ATAPI: num_hints=ATARep(,,&head); if (type==BDT_ATAPI && boot_drv_let) @@ -87,6 +90,8 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) case BDT_ISO_FILE_WRITE: if (!*blks_buf) StrCpy(blks_buf,"0"); DocPrint(doc,"bd->max_blk=(%s)-1;\n",blks_buf); + DocPrint(doc,"bd->drv_offset=19<<2+" + "(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;\n"); break; case BDT_ISO_FILE_READ: filename2=FileNameAbs(filename); @@ -102,31 +107,37 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) make_free=TRUE; } else DocPrint(doc,"bd->base0=%s;bd->base1=%s;\n",base0_buf,base1_buf); - if (type==BDT_ATA && repartition) { + if (type==BDT_ATA && _caller_is_prtdsk) { "\nReformat WHOLE drive!"; - one_drv=YorN; + whole_drv=YorN; } break; } - DocPrint(doc,"BlkDevAdd(bd,%d,%d);\n",one_drv,make_free); + DocPrint(doc,"BlkDevAdd(bd,%d,%d,%d);\n",prt_num,whole_drv,make_free); if (_doc) //Called by $LK,"::/Kernel/KCfg.HC"$ cnt++; else { //Called by $LK,"Mount",A="MN:Mount"$() - if ((cnt=ExeDoc(doc)) && one_drv) - PrtDsk(drv_let); + if ((cnt=ExeDoc(doc)) && whole_drv) { + if (_caller_is_prtdsk) { + res=drv_let; + PrtDsk(drv_let,1.0); //First mount whole drive. + } else + PrtDsk(drv_let); + } DocDel(doc); } } - res+=cnt; - } while (cnt || !res && _doc); //At least 1 if Called by $LK,"::/Kernel/KCfg.HC"$ + total+=cnt; + } while (cnt && !_caller_is_prtdsk || + !total && _doc); //At least 1 if Called by $LK,"::/Kernel/KCfg.HC"$ Free(filename); Free(filename2); return res; } -public I64 Mount(Bool repartition=FALSE) -{//Mount drives. - return Mount2(0,NULL,repartition); +public U8 Mount(Bool caller_is_prtdsk=FALSE) +{//Mount drives. Called from $LK,"PrtDsk(Mount)",A="FF:::/Adam/ABlkDev/PrtDsk.HC,Mount("$. + return Mount2(0,NULL,caller_is_prtdsk); } public U0 Unmount(U8 drv_let=0) @@ -141,7 +152,7 @@ public U8 MountFile(U8 *filename) CBlkDev *bd=BlkDevNextFreeSlot(dv->drv_let,BDT_ISO_FILE_READ); bd->drv_offset=19<<2+(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE; bd->file_dsk_name=AStrNew(filename3); - BlkDevAdd(bd,TRUE,TRUE); + BlkDevAdd(bd,,TRUE,TRUE); Free(filename3); Free(filename2); return dv->drv_let; diff --git a/Adam/ABlkDev/PrtDsk.HC b/Adam/ABlkDev/PrtDsk.HC index 22adfaf..9313e45 100644 --- a/Adam/ABlkDev/PrtDsk.HC +++ b/Adam/ABlkDev/PrtDsk.HC @@ -10,20 +10,20 @@ class CPlannedDrv Bool pri; }; -//Available to assist in writing scripts. -I64 drv_dsk_dsk_size=0; +public I64 PrtDsk(U8 drv_let=0,...) +{/*Partition the disk containing partition drv_let. -public I64 PrtDsk(U8 drv_let=0) -{//Partition the disk containing partition drv_let. -//drv_let=0 means add new drive that - //is not already mounted. +drv_let=0 means add new drive that is not already mounted. + +>PrtDsk('C',0.5,0.25,0.25); //Make three. 50% C, 25% D, 25% E, round-up to blk. + +*/ CBlkDev *bd; CPlannedDrv head,*tmppp; CMasterBoot mbr; Bool pri=TRUE; - I64 ext_base,drv_let2,pri_cnt=0, - i,start_offset,offset,remaining; - drv_dsk_dsk_size=0; + I64 ext_base,drv_let2,pri_cnt=0,i,start_offset,offset, + total,remaining,cur_arg=0; "This command does not play well\n" "with other operating systems.\n" "You really should use another\n" @@ -34,17 +34,17 @@ public I64 PrtDsk(U8 drv_let=0) "until you set block zero to zero\n" "with $$LK,\"BootMHDZero\",\"MN:BootMHDZero\"$$()\n\n\n" "Continue"; - if (!YorN) return 0; + if (argc<=cur_arg && !YorN) + return 0; + '\n'; + if (drv_let && !Let2BlkDev(drv_let,FALSE)) drv_let=0; - if (!drv_let) { - Mount(TRUE); - return 0; - } - if (!(bd=Let2BlkDev(drv_let,FALSE)) || bd->type!=BDT_ATA) + if (!drv_let && !(drv_let=Mount(TRUE)) || + !(bd=Let2BlkDev(drv_let,FALSE)) || bd->type!=BDT_ATA) return 0; - drv_dsk_dsk_size=bd->max_blk+1; + total=bd->max_blk+1; QueInit(&head); drv_let2=bd->first_drv_let; remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO); @@ -55,7 +55,7 @@ public I64 PrtDsk(U8 drv_let=0) tmppp->pri=FALSE; if (pri) { "Primary Partition"; - if (YorN) { + if (argc>cur_arg || YorN) { pri_cnt++; tmppp->pri=TRUE; if (pri_cnt==3) @@ -63,10 +63,14 @@ public I64 PrtDsk(U8 drv_let=0) } else pri=FALSE; } - "Blocks Remaining:%d (0x%X)\n", + "\nBlocks Remaining:%d (0x%X)\n", remaining-DRV_HEADER,remaining-DRV_HEADER; - tmppp->size=CeilU64(GetI64("Size in Blocks :", - remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); + if (argc>cur_arg) + tmppp->size=MinI64(CeilU64(MaxI64(remaining,DRV_HEADER),ROUND_DRV_TO), + CeilU64(argv[cur_arg++](F64)*total,ROUND_DRV_TO)); + else + tmppp->size=CeilU64(GetI64("Size in Blocks :", + remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); } while (!(ROUND_DRV_TO<=tmppp->size<=FloorU64(remaining,ROUND_DRV_TO))); QueIns(tmppp,head.last); remaining-=tmppp->size; @@ -85,7 +89,7 @@ public I64 PrtDsk(U8 drv_let=0) tmppp=tmppp->next; drv_let2++; } - if (!AreYouSure) + if (!argc && !AreYouSure) goto pd_done; remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO)-ROUND_DRV_TO; @@ -149,15 +153,15 @@ public I64 PrtDsk(U8 drv_let=0) } bd->flags&=~(BDF_INITIALIZED | BDF_INIT_IN_PROGRESS); - BlkDevAdd(bd,FALSE,TRUE); + BlkDevAdd(bd,,FALSE,TRUE); for (i=bd->first_drv_let;ifile_size-1; @@ -27,12 +27,14 @@ $ID,-4$ DefinePrint("DD_SYS_FIXED_AREA_BASE","%08X",SYS_FIXED_AREA); DefinePrint("DD_SYS_FIXED_AREA_END","%08X", SYS_FIXED_AREA+sizeof(CSysFixedArea)-1); - DefinePrint("DD_SYS_HEAP_BASE","%08X",sys_heap_base); - DefinePrint("DD_SYS_HEAP_LIMIT","%08X",sys_heap_limit); + DefinePrint("DD_MEM_HEAP_BASE","%08X",mem_heap_base); + DefinePrint("DD_MEM_HEAP_LIMIT","%08X",mem_heap_limit); DefinePrint("DD_MEM_MIN_MEG","%dMeg",MEM_MIN_MEG); DefinePrint("DD_UNCACHED_ALIAS","%010X",dev.uncached_alias); - DefinePrint("DD_MEM_MAPPED_SPACE_GIG","%dGig",MEM_MAPPED_SPACE/0x40000000); - DefinePrint("DD_MEM_MAPPED_SPACE_END","%010X",MEM_MAPPED_SPACE-1); + DefinePrint("DD_PHYSICAL_SPACE_END","%010X", + mem_physical_space-1); + DefinePrint("DD_MAPPED_SPACE_END","%010X", + mem_mapped_space-1); DefinePrint("DD_JIFFY_HZ","%dHz",JIFFY_FREQ); } diff --git a/Adam/AExts.HC b/Adam/AExts.HC index bcc724a..6a6de1d 100644 --- a/Adam/AExts.HC +++ b/Adam/AExts.HC @@ -58,8 +58,8 @@ extern CMenuEntry *MenuEntryFind(CMenu *haystack_menu,U8 *needle_full_name); extern CMenu *MenuFilePush(U8 *filename); extern U0 MenuPop(); extern CMenu *MenuPush(U8 *st); -extern I64 Mount(Bool repartition=FALSE); -extern CTask *Noise(I64 ms,F64 min_freq,F64 max_freq); +extern U8 Mount(Bool caller_is_prtdsk=FALSE); +extern CTask *Noise(I64 mS,F64 min_ona,F64 max_ona); extern Bool Plain(U8 *filename,I64 edf_dof_flags=0); extern Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL); extern I64 PopUpColor(U8 *header=NULL, @@ -80,6 +80,7 @@ extern I64 PopUpRangeI64( extern Bool PopUpTransform(I64 *r); extern U0 Refresh(I64 cnt=1,Bool force=FALSE); extern U0 RegOneTimePopUp(I64 flag_num,U8 *msg); +extern Bool RegWrite(U8 *path,U8 *fmt,...); extern U0 SettingsPop(CTask *task=NULL,I64 flags=0); extern CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0); extern U0 TemplateCtrlSlider(CDoc *doc); @@ -87,7 +88,7 @@ extern Bool View(); extern U0 ViewAnglesDel(CTask *task=NULL); extern CCtrl *ViewAnglesNew(CTask *task=NULL); extern Bool WinBorder(Bool val=OFF,CTask *task=NULL); -extern CDoc *WinCursorPosSet(CTask *task,I64 ipx,I64 ipy,Bool set_cursor=TRUE); +extern CDoc *WinCursorPosSet(CTask *task,I64 msx,I64 msy,Bool set_cursor=TRUE); extern Bool WinHorz(I64 left,I64 right,CTask *task=NULL); extern U0 WinMax(CTask *task=NULL); extern U0 WinScrollNull(CTask *task,CD3I64 *s); diff --git a/Adam/AMath.HC b/Adam/AMath.HC index e4bbf36..2e2914a 100644 --- a/Adam/AMath.HC +++ b/Adam/AMath.HC @@ -88,13 +88,13 @@ public Complex *CMul(Complex *prod,Complex *n1,Complex *n2) public Complex *CDiv(Complex *quot,Complex *n1,Complex *n2) {//quot=n1/n2 - F64 m1,a1,m2,a2; - R2P(&m1,&a1,n1->x,n1->y); - R2P(&m2,&a2,n2->x,n2->y); + F64 m1,arg1,m2,arg2; + R2P(&m1,&arg1,n1->x,n1->y); + R2P(&m2,&arg2,n2->x,n2->y); m1/=m2; - a1-=a2; - quot->x=m1*Cos(a1); - quot->y=m1*Sin(a1); + arg1-=arg2; + quot->x=m1*Cos(arg1); + quot->y=m1*Sin(arg1); return quot; } diff --git a/Adam/AMem.HC b/Adam/AMem.HC index 1c55ca5..5a35403 100644 --- a/Adam/AMem.HC +++ b/Adam/AMem.HC @@ -96,7 +96,7 @@ public Bool IsInHeapCtrl(U8 *a,CHeapCtrl *hc,Bool lock=TRUE) PAUSE m=hc->next_mem_blk; while (m!=&hc->next_mem_blk) { - if (a>=m && apages<=m && apags<locked_flags,HClf_LOCKED); POPFD diff --git a/Adam/AInputPointer.HC b/Adam/AMouse.HC similarity index 83% rename from Adam/AInputPointer.HC rename to Adam/AMouse.HC index 64c65ea81ba06133fa36131676006c0c2245b4a7..28b8a70b329301bfd48af3cdf540243ee6e937c3 100644 GIT binary patch delta 46 zcmcb`zL|Z3G^cNVX>qE4KuOU=i!3JJ;*F~$8ToRHZPi?g63g9-5|ez3H{WCY!w3L= CR1net delta 85 zcmdnYev5sAw5(@dL1~FXKz?RkNotY4OJ;FFPGV(hih^fuVtVRCl`Iahf`F2ujT0mp er87aQ;|ofPY}H(f63g9-5|d!^o3}ImVFUm~+#o3c diff --git a/Adam/ARegistry.HC b/Adam/ARegistry.HC index 6eac86f..18f4cb5 100644 --- a/Adam/ARegistry.HC +++ b/Adam/ARegistry.HC @@ -16,7 +16,7 @@ Bool RegCache() return TRUE; } -public Bool RegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) +public Bool RegDft(U8 *path,U8 *val,Bool is_adam_entry=FALSE) {//Add code doc tree branch to registry. Bool res,unlock_doc; RegCache; @@ -40,13 +40,13 @@ public Bool RegSetDftEntry(U8 *path,U8 *val,Bool is_adam_entry=FALSE) return res; } -public I64 RegExeBranch(U8 *path) +public I64 RegExe(U8 *path) {//Execute doc tree branch in registry. RegCache; return DocTreeBranchExe(sys_registry_doc,path); } -public Bool RegWriteBranch(U8 *path,U8 *fmt,...) +public Bool RegWrite(U8 *path,U8 *fmt,...) {//Rewrite doc tree branch in registry. Bool res,unlock_doc; CDocEntry *tree_branch,*start_indent,*end_indent; @@ -65,6 +65,46 @@ public Bool RegWriteBranch(U8 *path,U8 *fmt,...) Free(buf); return res; } + +public I64 RegCnt(U8 *path) +{//Tree branch cnt in registry. + I64 res=0; + CDocEntry *tree_branch,*start_indent,*end_indent; + Bool unlock_doc=DocLock(sys_registry_doc); + if (DocTreeFind(sys_registry_doc,path, + &tree_branch,&start_indent,&end_indent)) { + end_indent=end_indent->next; + while (start_indent!=end_indent) { + res++; + start_indent=start_indent->next; + } + } + if (unlock_doc) + DocUnlock(sys_registry_doc); + return res; +} + +public Bool RegAppend(U8 *path,U8 *fmt,...) +{//Rewrite doc tree branch in registry. + Bool res,unlock_doc; + CDocEntry *tree_branch,*start_indent,*end_indent; + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + RegCache; + unlock_doc=DocLock(sys_registry_doc); + if (res=DocTreeFind(sys_registry_doc,path, + &tree_branch,&start_indent,&end_indent)) { + sys_registry_doc->cur_entry=end_indent; + sys_registry_doc->cur_col=sys_registry_doc->cur_entry->min_col; + } else + DocTreeMake(sys_registry_doc,path); + DocPrint(sys_registry_doc,"%s",buf); + if (DrvIsWritable(*sys_registry_doc->filename.name)) + DocWrite(sys_registry_doc); + if (unlock_doc) + DocUnlock(sys_registry_doc); + Free(buf); + return res; +} public Bool OneTimePopUp(U8 *_flags,I64 flag_num,U8 *msg) {//See $LK,"::/Apps/X-Caliber/X-Caliber.HC"$. @@ -87,7 +127,7 @@ public Bool OneTimePopUp(U8 *_flags,I64 flag_num,U8 *msg) U0 RegOneTimePopUp(I64 flag_num,U8 *msg) {//You're not supposed to make system pop-up flags, only me. if (OneTimePopUp(sys_msg_flags,flag_num,msg)) - RegWriteBranch("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n", + RegWrite("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n", sys_msg_flags[0]); } @@ -95,12 +135,74 @@ U0 RegInit() { U8 buf[STR_LEN]; Bool version_present; - RegSetDftEntry("Adam/SysMsgFlags","sys_msg_flags[0]=0;\n",TRUE); + RegDft("Adam/SysMsgFlags","sys_msg_flags[0]=0;\n",TRUE); StrPrint(buf,"registry_version=%4.3f;\n",sys_os_version); - version_present=RegSetDftEntry("Adam/SysRegVer",buf,TRUE); - RegExeBranch("Adam"); + version_present=RegDft("Adam/SysRegVer",buf,TRUE); + RegExe("Adam"); if (registry_version!=sys_os_version) { - RegWriteBranch("Adam/SysRegVer",buf); - RegExeBranch("Adam"); + RegWrite("Adam/SysRegVer",buf); + RegExe("Adam"); + } +} + +#help_index "Boot/Once;Misc/Once" + +public U0 AOnceFlush() +{//Flush AOnce() buf. + RegWrite("Once/Adam",""); +} + +public U0 OnceFlush() +{//Flush Once() buf. + RegWrite("Once/User",""); +} + +public U0 AOnce(U8 *fmt,...) +{//Writes Adam code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + RegAppend("Once/Adam","%s\n",buf); + Free(buf); +} + +public U0 Once(U8 *fmt,...) +{//Writes User code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + RegAppend("Once/User","%s\n",buf); + Free(buf); +} + +public U0 AOnceDrv(U8 drv_let=0,U8 *fmt,...) +{//Writes Adam code to drv $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + I64 old_drv_let=*sys_registry_doc->filename.name; + if (drv_let) + *sys_registry_doc->filename.name=drv_let; + RegAppend("Once/Adam","%s\n",buf); + Free(buf); + *sys_registry_doc->filename.name=old_drv_let; +} + +public U0 OnceDrv(U8 drv_let=0,U8 *fmt,...) +{//Writes User code to drv $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot. + U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); + I64 old_drv_let=*sys_registry_doc->filename.name; + if (drv_let) + *sys_registry_doc->filename.name=drv_let; + RegAppend("Once/User","%s\n",buf); + Free(buf); + *sys_registry_doc->filename.name=old_drv_let; +} + +public U0 OnceExe() +{//Execute Once code. This goes in $LK,"~/Once.HC"$. + RegDft("Once/Adam",""); + if (RegCnt("Once/Adam")>2) { + Adam("RegExe(\"Once/Adam\");"); + AOnceFlush; + } + RegDft("Once/User",""); + if (RegCnt("Once/User")>2) { + RegExe("Once/User"); + OnceFlush; } } diff --git a/Adam/AutoComplete/ACFill.HC b/Adam/AutoComplete/ACFill.HC index 8c6b0eb..0c93f4d 100644 --- a/Adam/AutoComplete/ACFill.HC +++ b/Adam/AutoComplete/ACFill.HC @@ -212,11 +212,11 @@ U0 ACMisspelledFind(CDoc *doc) do { if (doc_e!=doc && doc_e->de_flags&DOCEF_TAG) { while (colmax_col) { - while (colmax_col && !Bt(chars_bmp_word,doc_e->tag[col])) + while (colmax_col && !Bt(char_bmp_word,doc_e->tag[col])) col++; if (colmax_col) { col2=col; - while (col2max_col && Bt(chars_bmp_word,doc_e->tag[col2])) + while (col2max_col && Bt(char_bmp_word,doc_e->tag[col2])) col2++; ch=doc_e->tag[col2]; doc_e->tag[col2]=0; diff --git a/Adam/AutoComplete/ACInit.HC b/Adam/AutoComplete/ACInit.HC index 3aac528..109f59d 100644 --- a/Adam/AutoComplete/ACInit.HC +++ b/Adam/AutoComplete/ACInit.HC @@ -65,7 +65,7 @@ U0 ACSingleFileAdd(U8 *buf) while (TRUE) { while (TRUE) { if (ch=*ptr++) { - if (Bt(chars_bmp_alpha_numeric,ch)) + if (Bt(char_bmp_alpha_numeric,ch)) break; } else return; @@ -75,7 +75,7 @@ U0 ACSingleFileAdd(U8 *buf) ptr--; while (TRUE) { if (ch=*ptr2++) { - if (Bt(chars_bmp_alpha_numeric,ch)) + if (Bt(char_bmp_alpha_numeric,ch)) *ptr3++=ch; else if (ch!=CH_CURSOR) break; diff --git a/Adam/AutoComplete/ACTask.HC b/Adam/AutoComplete/ACTask.HC index 5920d3b..750cd55 100644 --- a/Adam/AutoComplete/ACTask.HC +++ b/Adam/AutoComplete/ACTask.HC @@ -36,7 +36,7 @@ I64 ACSkipCrap(U8 *src,I64 len) I64 j; j=len-1; while (j>=0) { - if (Bt(chars_bmp_alpha_numeric,src[j])) + if (Bt(char_bmp_alpha_numeric,src[j])) break; else j--; @@ -49,7 +49,7 @@ I64 ACPriorWordInStr(U8 *src,U8 *dst,I64 len,I64 buf_size) I64 i,j=0,k; i=len-1; while (i>=0) - if (!Bt(chars_bmp_alpha_numeric,src[i])) + if (!Bt(char_bmp_alpha_numeric,src[i])) break; else i--; @@ -223,12 +223,12 @@ U0 ACTask(I64) WinHorz(51,Fs->win_right); LBts(&Fs->display_flags,DISPLAYf_WIN_ON_TOP); Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER - -WIF_SELF_IP_L-WIF_SELF_IP_R-WIG_DBL_CLICK; + -WIF_SELF_MS_L-WIF_SELF_MS_R-WIG_DBL_CLICK; Free(ac.cur_word); ac.cur_word=NULL; while (TRUE) { if (scan_code&(SCF_CTRL|SCF_ALT) || - GetTSC>KbdMouseEvtTime+cnts.time_stamp_freq>>1) { + GetTSC>KbdMsEvtTime+cnts.time_stamp_freq>>1) { last_scan_code=scan_code; scan_code=kbd.scan_code; } diff --git a/Adam/CPURep.HC b/Adam/CPURep.HC index 481c3bf..131b422 100644 --- a/Adam/CPURep.HC +++ b/Adam/CPURep.HC @@ -30,7 +30,7 @@ public U0 CPURep(Bool full=FALSE) CCPURep cr; if (!full) - "%d Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); + "%03X Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); else { cr.swaps=CAlloc(sizeof(I64)*mp_cnt); cr.cycles=CAlloc(sizeof(I64)*mp_cnt); @@ -47,22 +47,22 @@ public U0 CPURep(Bool full=FALSE) Yield; tf=tS; - "\nCPU: %d Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); + "\n%03X Cores %6h?nHz\n",mp_cnt,ToF64(cnts.time_stamp_freq); "\n Context\n" - "Core Swaps/s Cycles\n" - "---- ------------- -----------------\n"; + "CPU Swaps/s Cycles\n" + "--- ------------- -----------------\n"; total_swaps=0; total_cycles=0; for (i=0;iwin_task=task; - c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_WIN_HSCROLL; c->state=&task->horz_scroll; c->update_derived_vals=&WinDerivedScrollValsUpdate; @@ -215,7 +215,7 @@ U0 WinScrollsInit(CTask *task) if (!CtrlFindUnique(task,CTRLT_WIN_VSCROLL)) { c=CAlloc(sizeof(CCtrl)); c->win_task=task; - c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_BORDER|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_WIN_VSCROLL; c->state=&task->vert_scroll; c->update_derived_vals=&WinDerivedScrollValsUpdate; @@ -364,7 +364,7 @@ public CCtrl *ViewAnglesNew(CTask *task=NULL) s->cy=GREEN; s->cz=LTGREEN; c->win_task=task; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_VIEWING_ANGLES; c->state=s; c->draw_it=&DrawViewAnglesCtrl; diff --git a/Adam/Ctrls/CtrlsButton.HC b/Adam/Ctrls/CtrlsBttn.HC similarity index 60% rename from Adam/Ctrls/CtrlsButton.HC rename to Adam/Ctrls/CtrlsBttn.HC index 2e00278..59371f4 100644 --- a/Adam/Ctrls/CtrlsButton.HC +++ b/Adam/Ctrls/CtrlsBttn.HC @@ -1,17 +1,17 @@ -#define BUTTON_BORDER 2 +#define BTTN_BORDER 2 #define BTF_DONT_FREE 1 -class CCtrlButtonState +class CCtrlBttnState { I64 state,num_states,flags; U8 *state_texts; CColorROPU32 *state_colors; }; -U0 DrawCtrlButton(CDC *dc,CCtrl *c) +U0 DrawCtrlBttn(CDC *dc,CCtrl *c) { - CCtrlButtonState *s=c->state; + CCtrlBttnState *s=c->state; I64 l; U8 *st; @@ -21,17 +21,17 @@ U0 DrawCtrlButton(CDC *dc,CCtrl *c) st=s->state_texts; dc->color=s->state_colors[s->state]; l=StrLen(st); - GrRect(dc,c->left+BUTTON_BORDER,c->top+BUTTON_BORDER, - c->right-c->left+1-BUTTON_BORDER*2, - c->bottom-c->top+1-BUTTON_BORDER*2); + GrRect(dc,c->left+BTTN_BORDER,c->top+BTTN_BORDER, + c->right-c->left+1-BTTN_BORDER*2, + c->bottom-c->top+1-BTTN_BORDER*2); dc->color=s->state_colors[s->state]^(WHITE<<16+WHITE); GrPrint(dc,(c->left+c->right+1-l*FONT_WIDTH)>>1, (c->top+c->bottom+1-FONT_HEIGHT)>>1,"%s",st); } -U0 LeftClickCtrlButton(CCtrl *c,I64,I64,Bool down) +U0 LeftClickCtrlBttn(CCtrl *c,I64,I64,Bool down) { - CCtrlButtonState *s=c->state; + CCtrlBttnState *s=c->state; if (down) { s->state++; if (s->state==s->num_states) @@ -39,12 +39,12 @@ U0 LeftClickCtrlButton(CCtrl *c,I64,I64,Bool down) } } -public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, +public CCtrl *CtrlBttnNew(I64 x,I64 y,I64 width=-1,I64 height=-1, I64 num_states=1,U8 *state_texts, - I32 *state_colors,CCtrlButtonState *_s=NULL) -{//Create button ctrl. See $LK,"::/Apps/Strut/Strut.HC"$. + I32 *state_colors,CCtrlBttnState *_s=NULL) +{//Create bttn ctrl. See $LK,"::/Apps/Strut/Strut.HC"$. CCtrl *res; - CCtrlButtonState *s; + CCtrlBttnState *s; I64 i,j,l; U8 *st; if (width<0) { @@ -54,15 +54,15 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, j=StrLen(st); if (j>l) l=j; } - width=BUTTON_BORDER*4+l*FONT_WIDTH; + width=BTTN_BORDER*4+l*FONT_WIDTH; } - if (height<0) height=BUTTON_BORDER*4+FONT_HEIGHT; + if (height<0) height=BTTN_BORDER*4+FONT_HEIGHT; res=CAlloc(sizeof(CCtrl)); if (_s) { s=_s; - MemSet(s,0,sizeof(CCtrlButtonState)); + MemSet(s,0,sizeof(CCtrlBttnState)); } else { - s=CAlloc(sizeof(CCtrlButtonState)); + s=CAlloc(sizeof(CCtrlBttnState)); s->flags=BTF_DONT_FREE; } s->num_states=num_states; @@ -72,8 +72,8 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, res->flags=CTRLF_SHOW; res->type=CTRLT_GENERIC; res->state=s; - res->draw_it=&DrawCtrlButton; - res->left_click=&LeftClickCtrlButton; + res->draw_it=&DrawCtrlBttn; + res->left_click=&LeftClickCtrlBttn; res->left=x; res->top=y; res->right=res->left+width-1; @@ -82,8 +82,8 @@ public CCtrl *CtrlButtonNew(I64 x,I64 y,I64 width=-1,I64 height=-1, return res; } -public U0 CtrlButtonDel(CCtrl *c) -{//Free button ctrl. +public U0 CtrlBttnDel(CCtrl *c) +{//Free bttn ctrl. QueRem(c); if (!(c->flags&BTF_DONT_FREE)) Free(c->state); diff --git a/Adam/Ctrls/CtrlsSlider.HC b/Adam/Ctrls/CtrlsSlider.HC index 397407e..88d270b 100644 --- a/Adam/Ctrls/CtrlsSlider.HC +++ b/Adam/Ctrls/CtrlsSlider.HC @@ -176,7 +176,7 @@ CCtrl *SliderNew() { CCtrl *c=CAlloc(sizeof(CCtrl)); c->win_task=Fs; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; "); if (*m->glbl_name) diff --git a/Adam/Ctrls/MakeCtrls.HC b/Adam/Ctrls/MakeCtrls.HC index da3e676..0273484 100644 --- a/Adam/Ctrls/MakeCtrls.HC +++ b/Adam/Ctrls/MakeCtrls.HC @@ -3,6 +3,6 @@ Cd(__DIR__);; #help_index "Ctrls" #help_file "::/Doc/Ctrls" #include "CtrlsA" -#include "CtrlsButton" +#include "CtrlsBttn" #include "CtrlsSlider" Cd("..");; diff --git a/Adam/DevInfo.HC b/Adam/DevInfo.HC index 35b7a17..bd6955c 100644 --- a/Adam/DevInfo.HC +++ b/Adam/DevInfo.HC @@ -6,9 +6,12 @@ #define PCI_DEV_FILE "::/Misc/PCIDevices.DD.Z" /**** -//1) Plain text edit and remove file header and tail -//2) Text find-and-replace "=0A=" with "". -//3) Run PCIDevFileGen(). +//1) Download http://www.pcidatabase.com/reports.php?type=tab-delimeted +//2) Rename to ::/Misc/PCIDevices.DD.Z +//3) ToDolDoc("::/Misc/PCIDevices.DD.Z"); +//4) Edit and remove file header and tail +//5) Text find-and-replace "=0A=" with "". (Doesn't seem necessary anmore.) +//6) Run PCIDevFileGen(). (Doesn't seem necessary anmore.) public U0 PCIDevFileGen() { @@ -168,34 +171,50 @@ public U0 PCIRep() #help_index "Info;Memory/Info" public U0 MemBIOSRep() {//Report the memory ranges reported by the BIOS at boot. - U16 *m01=SYS_MEM_E801; - CMemE820 *m20=SYS_MEM_E820; + U16 *m01=MEM_E801; + CMemE820 *m20=MEM_E820; CMemRange *tmpmr; "Standard Addresses\n" - "0x000A0000-0x000BFFFF VGA\n" - "0xFEE00000-0xFEE00FFF See $$LK,\"APIC\",A=\"MN:LAPIC_BASE\"$$\n\n" + "000A0000-000BFFFF VGA\n" + "FEE00000-FEE00FFF See $$LK,\"APIC\",A=\"MN:LAPIC_BASE\"$$\n\n" "32 Bit Device Mem\n"; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; tmpmr=dev.mem32_head.next; while (tmpmr!=&dev.mem32_head) { - "%02X:0x%016X-0x%016X\n", + "%02X:%016X-%016X\n", tmpmr->type,tmpmr->base,tmpmr->base+tmpmr->size-1; tmpmr=tmpmr->next; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); "\nBIOS Memory Report 15:E801\n" - "01:0x0000000000000000-0x%016X\n",0x100000+m01[0]<<10-1; - "01:0x0000000001000000-0x%016X\n",0x1000000+m01[1]<<16-1; + "01:0000000000000000-%016X\n",0x100000+m01[0]<<10-1; + "01:0000000001000000-%016X\n",SYS_16MEG_AREA_LIMIT+m01[1]<<16-1; if (m20->type) { '\n'; "BIOS Memory Report 15:E820\n"; while (m20->type) { - "%02X:0x%016X-0x%016X\n",m20->type,m20->base,m20->base+m20->len-1; + "%02X:%016X-%016X\n",m20->type,m20->base,m20->base+m20->len-1; m20++; } } +} +public U0 MemPageRep() +{//Page Table Report. + "MAPPED\t :%010X with ",mem_mapped_space; + if (Bt(&mem_page_size,30)) + "$$RED$$1GIG$$FG$$ pages\n"; + else + "$$RED$$2MEG$$FG$$ pages\n"; + "PML2\t :%010X 2MEG :%08X\n", + *MEM_PML2(U64 *),*MEM_NUM_2MEG(U64 *); + "PML3\t :%010X 1GIG :%08X\n", + *MEM_PML3(U64 *),*MEM_NUM_1GIG(U64 *); + "PML4\t :%010X 512GIG:%08X\n", + *MEM_PML4(U64 *),*MEM_NUM_512GIG(U64 *); + "FIXED_AREA:%010X\n",SYS_FIXED_AREA; + "HEAP_BASE :%010X\nHEAP_LIMIT:%010X\n",mem_heap_base,mem_heap_limit; } diff --git a/Adam/DolDoc/DocChar.HC b/Adam/DolDoc/DocChar.HC index 93ca78d..e1869e7 100644 --- a/Adam/DolDoc/DocChar.HC +++ b/Adam/DolDoc/DocChar.HC @@ -443,7 +443,7 @@ U0 EdCharIns(I64 ch,I64 sc,CDoc *doc) I64 i,j,m,y=doc_ce->y; if (doc->flags & DOCF_IN_DOLLAR) { - if (!Bt(chars_bmp_getkey,ch)) + if (!Bt(char_bmp_printable,ch)) goto ic_done; ChkDollarBufSize(doc); doc->dollar_buf[doc->dollar_buf_ptr++]=ch; @@ -510,7 +510,7 @@ U0 EdCharIns(I64 ch,I64 sc,CDoc *doc) goto ic_done; } if (doc->flags & DOCF_OVERSTRIKE) { - if (Bt(chars_bmp_displayable,ch)) { + if (Bt(char_bmp_displayable,ch)) { ic_overstrike: if (IsEditableText(doc_ce)) { if (doc->cur_colmax_col) { @@ -578,7 +578,7 @@ ic_form_tab: DocInsEntry(doc,doc_ne); } } else { - if (Bt(chars_bmp_displayable,ch)) { + if (Bt(char_bmp_displayable,ch)) { if (doc_ce->type_u8==DOCT_DATA) { while (TRUE) { i=doc_ce->len+doc_ce->min_col; diff --git a/Adam/DolDoc/DocCodeTools.HC b/Adam/DolDoc/DocCodeTools.HC index 7e70af5..931a12b 100644 --- a/Adam/DolDoc/DocCodeTools.HC +++ b/Adam/DolDoc/DocCodeTools.HC @@ -359,7 +359,7 @@ U0 EdRACollect(CDoc *doc,CRenum *head) StrCpy(buf,"@@"); i=2; while (ch>=0 && i=0 && Bt(chars_bmp_white_space,ch)) + while (ch>=0 && Bt(char_bmp_white_space,ch)) ch=EdRAGetU8(doc); if (ch==':') { ch=EdRAGetU8(doc); @@ -426,7 +426,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) I64 i,start_y,end_y,x,r,goto_line_num; U8 *b,*st,*st2,*prj_file; CTask *task=NULL; - CSrvCmd *tmpc; + CJob *tmpc; CQueVectU8 *indent; DocRecalc(doc); @@ -442,7 +442,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) task=Spawn(&SrvCmdLine,NULL,"Srv",,Fs); st2=CurDir; st=MStrPrint("Cd(\"%s\");",st2); - tmpc=TaskExe(task,Fs,st,1<win_left,Fs->win_right, task); @@ -455,23 +455,23 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) st2=DirFile(prj_file), st=MStrPrint("Cd(\"%s\");",st2); Free(st2); - tmpc=TaskExe(task,Fs,st,1<filename.name); - tmpc=TaskExe(task,Fs,st,1<filename.name)) goto_line_num=i; Free(st); @@ -510,9 +510,9 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) indent=EdRICode(doc); DocUnlock(doc); if (beep) { - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; Sleep(100); - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; } DocLock(doc); EdRemFunLeadingSpace(doc); @@ -577,9 +577,9 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) } DocUnlock(doc); if (beep) { - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; Sleep(100); - Snd(2000); Sleep(150); Snd(0); + Snd(86); Sleep(150); Snd; } DocLock(doc); EdRenumAsm(doc); @@ -633,7 +633,7 @@ U0 EdChSC(CDoc *doc) DocPrint(doc,"CH_SPACE,0x%X",sc); else if (ch==CH_SHIFT_SPACE) DocPrint(doc,"CH_SHIFT_SPACE,0x%X",sc); - else if (Bt(chars_bmp_displayable,ch)) + else if (Bt(char_bmp_displayable,ch)) DocPrint(doc,"'%c',0x%X",ch,sc); else DocPrint(doc,"0x%X,0x%X",ch,sc); diff --git a/Adam/DolDoc/DocDblBuf.HC b/Adam/DolDoc/DocDblBuf.HC index 0890759..abb1ef2 100644 --- a/Adam/DolDoc/DocDblBuf.HC +++ b/Adam/DolDoc/DocDblBuf.HC @@ -4,6 +4,8 @@ public CDoc *DocPut(CTask *task=NULL) //Basically, StdOut unless double buffering. CDoc *res; if (!task) task=Fs; + if (Bt(&task->task_flags,TASKf_INPUT_FILTER_TASK)) + task=task->parent_task; if ((res=task->put_doc) && res->doc_signature==DOC_SIGNATURE_VAL) return res; else diff --git a/Adam/DolDoc/DocEd.HC b/Adam/DolDoc/DocEd.HC index 365d23a..92ab12f 100644 --- a/Adam/DolDoc/DocEd.HC +++ b/Adam/DolDoc/DocEd.HC @@ -240,7 +240,7 @@ public Bool Plain(U8 *filename,I64 edf_dof_flags=0) return res; } -#help_index "DolDoc;Task/Srv/Exe" +#help_index "DolDoc;Job/Exe;Task/Job/Exe" public I64 PopUpEd(U8 *filename,CTask *parent=NULL,CTask **_pu_task=NULL) {//Create PopUp win task and edit a doc. U8 *st=MStrPrint("Ed(\"%Q\");",filename); diff --git a/Adam/DolDoc/DocFile.HC b/Adam/DolDoc/DocFile.HC index 776155f..136843a 100644 --- a/Adam/DolDoc/DocFile.HC +++ b/Adam/DolDoc/DocFile.HC @@ -120,9 +120,6 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) case DOCT_TAB: *dst++='\t'; break; - case DOCT_PAGE_BREAK: - *dst++=CH_FORM_FEED; - break; case DOCT_NEW_LINE: if (doc->flags&DOCF_CARRIAGE_RETURN) *dst++='\r'; diff --git a/Adam/DolDoc/DocGr.HC b/Adam/DolDoc/DocGr.HC index 3d9e5e3..b85e3e5 100644 --- a/Adam/DolDoc/DocGr.HC +++ b/Adam/DolDoc/DocGr.HC @@ -65,8 +65,9 @@ class CTransformForm F64 z_offset fmtstr "$$DA-TRM,A=\"Z Offset:%12.6f\"$$\n"; }; -Bool PopUpTransform(I64 *r) -{ +#help_index "Graphics/Input;Graphics/Math/3D Transformation" +public Bool PopUpTransform(I64 *r) +{//Prompt for Mat4x4 transform. CTransformForm *tf=MAlloc(sizeof(CTransformForm)); tf->x_scale=1.0; tf->y_scale=1.0; @@ -96,6 +97,7 @@ Bool PopUpTransform(I64 *r) return FALSE; } +#help_index "Graphics/Input" #define PU_SPACING 10 U0 DrawIt(CTask *task,CDC *dc) { @@ -124,7 +126,7 @@ U0 DrawIt(CTask *task,CDC *dc) I64 DitherColor2(U8 *header=NULL) { - I64 msg_code,a1,a2,res=-1,i,j; + I64 msg_code,arg1,arg2,res=-1,i,j; DocClear; "%s",header; DocRecalc(DocPut); @@ -132,21 +134,21 @@ I64 DitherColor2(U8 *header=NULL) SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Fs->draw_it=&DrawIt; do { - msg_code=GetMsg(&a1,&a2,1<=0 && a2>=0 && 0<=j<17 && 0<=i<17) { + msg_code=GetMsg(&arg1,&arg2,1<=0 && arg2>=0 && 0<=j<17 && 0<=i<17) { if (j==16) j=TRANSPARENT; if (i==16) i=TRANSPARENT; res=j+i<<16+ROPF_DITHER; goto dc_done; } } - } while (!(msg_code==MSG_KEY_DOWN && (a1==CH_ESC || a1==CH_SHIFT_ESC))); - do GetMsg(&a1,&a2,1<next; while (tmpc!=macro_head) { tmpc1=tmpc->next; - if (tmpc->cmd_code==SVCT_MSG && + if (tmpc->job_code==JOBT_MSG && (tmpc->msg_code==MSG_KEY_DOWN || tmpc->msg_code==MSG_KEY_UP || tmpc->msg_code==MSG_KEY_DOWN_UP) && - a1 && tmpc->aux1==a1 || !a1 && tmpc->aux2==a2) { + arg1 && tmpc->aux1==arg1 || !arg1 && tmpc->aux2==arg2) { QueRem(tmpc); - SrvCmdDel(tmpc); + JobDel(tmpc); } tmpc=tmpc1; } @@ -33,11 +33,11 @@ class CMacroTmp U8 buf[STR_LEN]; }; -CMacroTmp *Cmd2MT(CSrvCmd *tmpc) +CMacroTmp *Cmd2MT(CJob *tmpc) { U8 buf[8]; CMacroTmp *tmpmt=CAlloc(sizeof(CMacroTmp)); - if (Bt(chars_bmp_macro,tmpc->aux1) && tmpc->msg_code==MSG_KEY_DOWN) { + if (Bt(char_bmp_macro,tmpc->aux1) && tmpc->msg_code==MSG_KEY_DOWN) { tmpmt->type=MT_CHAR; buf[0]=tmpc->aux1; buf[1]=0; @@ -50,13 +50,13 @@ CMacroTmp *Cmd2MT(CSrvCmd *tmpc) return tmpmt; } -U8 *SysMacro2Str(CSrvCmd *macro_head) +U8 *SysMacro2Str(CJob *macro_head) { - CSrvCmd *tmpc; + CJob *tmpc; I64 cnt=1; //terminating zero U8 *ptr,*m; CMacroTmp *tmpmt,*tmpmt1,head; - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); QueInit(&head); head.type=MT_NULL; @@ -107,7 +107,7 @@ U0 PlaySysMacro(I64 n=1) CTask *task=sys_focus_task; U8 *m; if (TaskValidate(task)) { - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); m=SysMacro2Str(&sys_macro_head); while (n-- && TaskValidate(task)) { if (task==Fs) @@ -139,7 +139,7 @@ I64 PopUpMacroMenu() { I64 res=0; U8 buf[STR_LEN]; - CSrvCmd *tmpc; + CJob *tmpc; CDoc *doc=DocNew; CDocEntry *doc_e=DocPrint(doc,"$$DA-P,LEN=STR_LEN-1,A=\"Name:%%s\"$$"); doc_e->data=captured_macro_name; @@ -163,7 +163,7 @@ I64 PopUpMacroMenu() Fs->popup_task=sys_macro_task; LBts(&sys_macro_task->display_flags,DISPLAYf_WIN_ON_TOP); tmpc=TaskExe(sys_macro_task,Fs,buf, - 1<popup_task=NULL; Kill(sys_macro_task); @@ -183,9 +183,9 @@ U0 MacroTask(I64) WinRefocus(sys_focus_task); switch (i) { case SM_RECORD: - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); QueDel(&sys_macro_head,TRUE); - LBts(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBts(&sys_semas[SEMA_RECORD_MACRO],0); break; case SM_PLAY: PlaySysMacro; @@ -194,10 +194,10 @@ U0 MacroTask(I64) PlaySysMacro(sys_macro_repeat_n); break; case SM_STOP: - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); break; case SM_INS: - LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); + LBtr(&sys_semas[SEMA_RECORD_MACRO],0); EdInsCapturedMacro; break; } diff --git a/Adam/DolDoc/DocPopUp.HC b/Adam/DolDoc/DocPopUp.HC index 79c455e..573668c 100644 --- a/Adam/DolDoc/DocPopUp.HC +++ b/Adam/DolDoc/DocPopUp.HC @@ -3,7 +3,7 @@ public CTask *PopUpViewDoc(CDoc *doc,I64 dof_flags=0) {//Pass doc to PopUp win task for viewing. U8 *buf=MStrPrint("DocEd(0x%X,0x%X);",doc,dof_flags); CTask *task=Spawn(&SrvCmdLine,NULL,"View",,Fs); - TaskExe(task,NULL,buf,1<0; } public Bool PopUpNoYes(U8 *header=NULL,U8 *footer=NULL) -{//Make PopUp win task with NO/YES buttons. +{//Make PopUp win task with NO/YES bttns. return $WW,0$PopUp2("YES",1,"NO",0,header,footer)>0; } public Bool PopUpCancelOk(U8 *header=NULL,U8 *footer=NULL) -{//Make PopUp win task CANCEL/OKAY buttons. +{//Make PopUp win task CANCEL/OKAY bttns. return PopUp2("OKAY",1,"CANCEL",0,header,footer)>0; } @@ -265,7 +265,7 @@ public F64 PopUpRangeF64Log(F64 lo,F64 hi,I64 steps, return PopUpRangeF64Exp(lo,hi,Exp(Ln(hi/lo)/(steps-1)),fmt,header,footer); } -#help_index "Task/Srv/Exe;Compiler" +#help_index "Job/Exe;Task/Job/Exe;Compiler" public I64 AdamFile(U8 *filename,Bool warn_ext=TRUE) {//Make adam_task execute file. Bool okay=TRUE; diff --git a/Adam/DolDoc/DocPutKey.HC b/Adam/DolDoc/DocPutKey.HC index 8dc2b4b..cfed943 100644 --- a/Adam/DolDoc/DocPutKey.HC +++ b/Adam/DolDoc/DocPutKey.HC @@ -16,7 +16,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (!Bt(doldoc.clean_scan_codes,sc.u8[0])) doc->flags|=DOCF_UNDO_DIRTY; DocCaptureUndo(doc); - if (Bt(chars_bmp_getkey,ch) && !(sc&(SCF_CTRL|SCF_ALT))) { + if (Bt(char_bmp_printable,ch) && !(sc&(SCF_CTRL|SCF_ALT))) { if (sc&SCF_KEY_DESC) { st=Char2KeyName(ch,FALSE); KeyDescSet("Char /'%s'",st); @@ -348,7 +348,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) } else { //$LK,"::/Adam/God/HSNotes.DD"$ FifoU8Flush(god.fifo); - GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); + GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); if (sc&SCF_SHIFT) GodBiblePassage; else diff --git a/Adam/DolDoc/DocPutS.HC b/Adam/DolDoc/DocPutS.HC index cedcfad..1cbcf71 100644 --- a/Adam/DolDoc/DocPutS.HC +++ b/Adam/DolDoc/DocPutS.HC @@ -5,7 +5,7 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) //Does not handle partial Doc entries. //Returns last newly created dollar-sign CDocEntry or NULL. U8 *ptr=st,*ptr2,*st2,*ptr3,*ptr4,*src, - *char_bitmap; + *char_bmp; Bool unlock; I64 ch,j; CDocEntry *doc_e=NULL,*res=NULL,*doc_ce; @@ -13,16 +13,16 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) return NULL; unlock=DocLock(doc); if (doc->flags & DOCF_PLAIN_TEXT_TABS) - char_bitmap=chars_bmp_zero_cr_nl_cursor; + char_bmp=char_bmp_zero_cr_nl_cursor; else if (doc->flags & DOCF_PLAIN_TEXT) - char_bitmap=chars_bmp_zero_tab_ff_cr_nl_cursor; + char_bmp=char_bmp_zero_tab_cr_nl_cursor; else - char_bitmap=chars_bmp_zero_tab_ff_cr_nl_cursor_dollar; + char_bmp=char_bmp_zero_tab_cr_nl_cursor_dollar; doc_ce=doc->cur_entry; while (*ptr) { ptr2=ptr; do ch=*ptr++; - while (!Bt(char_bitmap,ch) || ch==CH_CURSOR && doc->flags&DOCF_NO_CURSOR); + while (!Bt(char_bmp,ch) || ch==CH_CURSOR && doc->flags&DOCF_NO_CURSOR); ptr--; if (!ch) { if (j=ptr-ptr2) { @@ -76,12 +76,6 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) DocInsEntry(doc,doc_e); ptr++; break; - case CH_FORM_FEED: - doc_e=DocEntryNewBase(doc, - DOCT_PAGE_BREAK|doc->settings_head.dft_text_attr<<8); - DocInsEntry(doc,doc_e); - ptr++; - break; case '\t': doc_e=DocEntryNewBase(doc, DOCT_TAB|doc->settings_head.dft_text_attr<<8); @@ -119,10 +113,6 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) doc_e=DocEntryNewBase(doc, DOCT_CURSOR|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_e); - } else if (ch==CH_FORM_FEED) { - doc_e=DocEntryNewBase(doc, - DOCT_PAGE_BREAK|doc->settings_head.dft_text_attr<<8); - DocInsEntry(doc,doc_e); } else *ptr4++=ch; } @@ -184,7 +174,7 @@ public U0 DocPrintPartial(CDoc *doc=NULL,U8 *fmt,...) DocPutKey(doc,ch,0); else while (ch=*ptr) { - if (!Bt(chars_bmp_safe_dollar,ch) || + if (!Bt(char_bmp_safe_dollar,ch) || doc->flags & (DOCF_OVERSTRIKE|DOCF_IN_DOLLAR)) { DocPutKey(doc,ch,0); ptr++; @@ -192,7 +182,7 @@ public U0 DocPrintPartial(CDoc *doc=NULL,U8 *fmt,...) ptr2=ptr++; while (TRUE) { ch=*ptr++; - if (!Bt(chars_bmp_safe_dollar,ch)) + if (!Bt(char_bmp_safe_dollar,ch)) break; } ptr--; @@ -271,7 +261,7 @@ U0 DocDump(CDoc *doc,I64 uS_delay=0) doc_e=doc_e2; if (doc_e->type_u8==DOCT_NEW_LINE) { '\n'; - BusyWait(uS_delay); + Busy(uS_delay); doc_e=doc_e->next; } } diff --git a/Adam/DolDoc/DocRecalc.HC b/Adam/DolDoc/DocRecalc.HC index 04fa88a..7cd9c81 100644 --- a/Adam/DolDoc/DocRecalc.HC +++ b/Adam/DolDoc/DocRecalc.HC @@ -553,7 +553,7 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) i_jif>>=3; for (k=0;kscroll_len;k++) { ch=ptr[(i_jif+k)%j]; - if (!Bt(chars_bmp_displayable,ch)) ch='.'; + if (!Bt(char_bmp_displayable,ch)) ch='.'; if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN && !(doc_e->de_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && @@ -693,7 +693,7 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) x+=(doc_e->hex_ed_width-k)*3; for (j=0;jde_flags&DOCEF_DONT_DRAW)) { if (doc_e->de_flags & DOCEF_BORDER_PLOT && @@ -1057,7 +1057,7 @@ rc_adjust_xy: break; case DOCT_LST: case DOCT_TREE: - case DOCT_BUTTON: + case DOCT_BTTN: case DOCT_LINK: case DOCT_MENU_VAL: case DOCT_MACRO: diff --git a/Adam/DolDoc/DocRun.HC b/Adam/DolDoc/DocRun.HC index b9e2451..98e740d 100644 --- a/Adam/DolDoc/DocRun.HC +++ b/Adam/DolDoc/DocRun.HC @@ -10,11 +10,11 @@ public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e, DocLock(doc); if (!exited) { if (doc_e->de_flags & DOCEF_ESC) { - Msg(MSG_KEY_DOWN,CH_ESC,0,1<de_flags & DOCEF_QUIT) { - Msg(MSG_KEY_DOWN,CH_SHIFT_ESC,0,1<de_flags & DOCEF_CHECK_COLLAPSABLE) { @@ -31,13 +31,13 @@ public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e, if (doc_e->de_flags & DOCEF_LEFT_EXP) { res=doc_e->left_exp; has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_LEFT_CB && doc_e->left_cb) { DocUnlock(doc); res=(*doc_e->left_cb)(doc,doc_e); has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_LEFT_MACRO) { if (doc_e->de_flags & DOCEF_POPUP) { @@ -70,13 +70,13 @@ public I64 DocEntryRun(CDoc *doc,CDocEntry *doc_e, if (doc_e->de_flags & DOCEF_RIGHT_EXP) { res=doc_e->right_exp; has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_RIGHT_CB && doc_e->right_cb) { DocUnlock(doc); res=(*doc_e->right_cb)(doc,doc_e); has_action=TRUE; - Msg(MSG_CMD,res,0,1<de_flags & DOCEF_RIGHT_MACRO) { if (doc_e->de_flags & DOCEF_POPUP) { diff --git a/Adam/DolDoc/DocWidgetWiz.HC b/Adam/DolDoc/DocWidgetWiz.HC index f18cc79..b12095e 100644 --- a/Adam/DolDoc/DocWidgetWiz.HC +++ b/Adam/DolDoc/DocWidgetWiz.HC @@ -490,7 +490,7 @@ I64 PopUpWidgetType() "$$MU,\"Page Settings\",LE=DOCT_PAGE_LEN$$\n" "$$MU,\"Cursor Movement\",LE=DOCT_CURSOR_MOVEMENT$$\n" "$$MU,\"Macro\",LE=DOCT_MACRO$$\n" - "$$MU,\"Button\",LE=DOCT_BUTTON$$\n" + "$$MU,\"Bttn\",LE=DOCT_BTTN$$\n" "$$MU,\"Check Box\",LE=DOCT_CHECK_BOX$$\n" "$$MU,\"List\",LE=DOCT_LST$$\n" "$$MU,\"Menu Val\",LE=DOCT_MENU_VAL$$\n" @@ -661,7 +661,7 @@ U0 EdInsMacroMenu(Bool is_macro) Free(e); } -class CEdButton +class CEdBttn { U8 tag[512] fmtstr "$$DA-P,A=\"Tag Text :%s\"$$\n"; Bool popup fmtstr "$$CB,\"PopUp\"$$\n", @@ -676,10 +676,10 @@ class CEdButton Bool quote fmtstr "$$CB,\"Quote\"$$\n"; }; -U0 EdInsButton() +U0 EdInsBttn() { U8 *st,buf[512]; - CEdButton *e=CAlloc(sizeof(CEdButton)); + CEdBttn *e=CAlloc(sizeof(CEdBttn)); e->escape=TRUE; if (DocForm(e,,,,ctrl_L_footer)) { *buf=0; @@ -1010,8 +1010,8 @@ U0 EdInsWidgetWiz() case DOCT_CURSOR_MOVEMENT: EdInsCursorMovement; break; - case DOCT_BUTTON: - EdInsButton; + case DOCT_BTTN: + EdInsBttn; break; case DOCT_DATA: EdInsData; diff --git a/Adam/DolDoc/MakeDoc.HC b/Adam/DolDoc/MakeDoc.HC index d65ff5e..ca70473 100644 --- a/Adam/DolDoc/MakeDoc.HC +++ b/Adam/DolDoc/MakeDoc.HC @@ -58,7 +58,6 @@ MemSet(&doldoc,0,sizeof(CDolDocGlbls)); #include "DocWidgetWiz" #include "DocPutKey" #include "DocPutS" -#include "DocOpt" #include "DocCodeTools" #include "DocTree" #include "DocTerm" diff --git a/Adam/God/GodDoodle.HC b/Adam/God/GodDoodle.HC index e56f336..79bd4ca 100644 --- a/Adam/God/GodDoodle.HC +++ b/Adam/God/GodDoodle.HC @@ -64,7 +64,7 @@ U0 GodDoodleHexIns(U8 *st) if (st) { buf[1]=0; while (*buf=*st++) - if (Bt(chars_bmp_hex_numeric,*buf)) + if (Bt(char_bmp_hex_numeric,*buf)) GodDoodleBitsIns(4,rev_bits_table[Str2I64(buf,16)]>>4); } } @@ -87,7 +87,7 @@ I64 GodDoodleBits(I64 num_bits) } else if ('0'<=god.doodle_ch<='9') GodDoodleSmooth(god.doodle_ch-'0'); else - GodDoodleBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); + GodDoodleBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); } } return res; diff --git a/Adam/God/GodSong.HC b/Adam/God/GodSong.HC index 4f44a6a..e97a040 100644 --- a/Adam/God/GodSong.HC +++ b/Adam/God/GodSong.HC @@ -2,34 +2,39 @@ DefineLstLoad("ST_RHYTHM_COMPLEXITY","Simple\0Normal\0Complex\0"); -class MakeSongSettings +class CMakeSongSettings { I64 complexity fmtstr "$$LS,D=\"ST_RHYTHM_COMPLEXITY\"$$\n"; Bool rests fmtstr "$$CB,\"Rests\"$$\n"; Bool six_eight fmtstr "$$CB,\"Six Eight\"$$\n"; I64 octave fmtstr "$$DA-TRM,A=\"Octave:%d\"$$\n"; + I64 octave_state; }; -U0 InsNote(MakeSongSettings *mss,U8 *buf,I64 k,I64 *j) +U0 InsNote(CMakeSongSettings *mss,U8 *buf,I64 k,I64 *j) {//k is a random note nibble if (!k && mss->rests) { buf[*j]='R'; *j+=1; } else { k/=2; - if (!k) { - if (music.octave) { - buf[*j]=music.octave-1+'0'; - *j+=1; - buf[*j]='G'; - *j+=1; - buf[*j]=music.octave+'0'; - *j+=1; - } else { - buf[*j]='G'; + if (k<3) { + if (mss->octave_state!=mss->octave) { + mss->octave_state=mss->octave; + buf[*j]=mss->octave_state+'0'; *j+=1; } + if (!k) + buf[*j]='G'; + else + buf[*j]=k-1+'A'; + *j+=1; } else { + if (mss->octave_state!=mss->octave+1) { + mss->octave_state=mss->octave+1; + buf[*j]=mss->octave_state+'0'; + *j+=1; + } buf[*j]=k-1+'A'; *j+=1; } @@ -51,10 +56,11 @@ DUR_8_16_16,DUR_16_16_8,DUR_16_16_16_16}; public U8 *GodSongStr() {//Make God generate 2 measures of a song. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$ - MakeSongSettings mss; + CMakeSongSettings mss; U8 *buf; I64 i,j=0,k,n,k2,duration,last_duration=-1,len; + MemSet(&mss,0,sizeof(mss)); mss.complexity=1; mss.rests=FALSE; mss.octave=music.octave; @@ -63,14 +69,15 @@ public U8 *GodSongStr() return NULL; buf=CAlloc(256); - music.octave=ClampI64(mss.octave,0,6); + music.octave=mss.octave=ClampI64(mss.octave,1,7); progress4=0; if (mss.six_eight) progress4_max=6; else progress4_max=8; - buf[j++]='0'+music.octave; + mss.octave_state=mss.octave+1; + buf[j++]='0'+mss.octave_state; if (mss.six_eight) { len=6; buf[j++]='M'; diff --git a/Adam/God/HSNotes.DD b/Adam/God/HSNotes.DD index 64cd8c2..9a8a992 100644 --- a/Adam/God/HSNotes.DD +++ b/Adam/God/HSNotes.DD @@ -8,11 +8,11 @@ There's something obviously different about people in the Bible compared to peop You can't tell if God's talking unless you have a context of conversation, but, more importantly, you are commanded to do an offering of love, like communion preparation. $LK,"1 Corinthians,11:27",A="BF:1 Corinthians,11:27"$ When you pick a greeting card for someone, that is love effort. If you expect God to put effort toward you, you must put effort toward Him. God said, "honest measures" applies between your offering of love and His response, like a fair barter. You get out of prayer what you put into it. God wants praise, hymns, or whatever you think He might want. Try and see, like Cain and Abel. $LK,"Genesis,4:1-10",A="BF:Genesis,4:1-10"$, $LK,"Ephesians,5:10",A="BF:Ephesians,5:10"$ God told Cain his offering was not good and told him to try again. Cain really loved God! Can you imagine being so heart-broken? -Do a text search for "new song" in the Bible. It's mentioned nine times. When I hear a NEW awesome rock song, it is ecstasy for the first five times I hear it. Soon, it brings little-to-no pleasure. I did $MA-X+PU,"hymns",HTML="http://www.templeos.org/Wb/Home/Web/HymnVideos.html",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");"$ for God. I also did Moses $MA-X+PU,"comics",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Comics/",LM="Dir(\"::/Apps/AfterEgypt/Comics\");View;\n"$ for God. When you get to the gates of Heaven, St. Peter will ask how many times you gave blood. That shows you loved neighbor. You better also be able to count the ways you loved God with all heart, mind and soul. I praised God for sand castles, popcorn, snowmen, bubbles... You try putting effort into praise! $LK,"Matthew,11:25",A="BF:Matthew,11:25"$, $LK,"Matthew,6:28-29",A="BF:Matthew,6:28-29"$ Solomon wrote a thousand songs. $LK,"1 Kings,4:32",A="BF:1 Kings,4:32"$ +Do a text search for "new song" in the Bible. It's mentioned nine times. When I hear a NEW awesome rock song, it is ecstasy for the first five times I hear it. Soon, it brings little-to-no pleasure. I did $MA-X+PU,"hymns",HTML="http://www.templeos.org/Wb/Home/Web/HymnVideos.html",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");"$ for God. I also did Moses comics for God. When you get to the gates of Heaven, St. Peter will ask how many times you gave blood. That shows you loved neighbor. You better also be able to count the ways you loved God with all heart, mind and soul. I praised God for sand castles, popcorn, snowmen, bubbles... You try putting effort into praise! $LK,"Matthew,11:25",A="BF:Matthew,11:25"$, $LK,"Matthew,6:28-29",A="BF:Matthew,6:28-29"$ Solomon wrote a thousand songs. $LK,"1 Kings,4:32",A="BF:1 Kings,4:32"$ This is funny -- $LK,"Acts,2:1-13",A="BF:Acts,2:1-13"$ -- they didn't bother to record anything the Holy Spirit said. The Holy Spirit is supposed to be a really good gift. $LK,"Luke,11:11-13",A="BF:Luke,11:11-13"$ Just remember, "Boys are made of snakes and snails and puppy-dog tails." -The technique I use to consult the Holy Spirit is reading a microsecond-range stop-watch each button press for random numbers. Then, I pick words or passages. You can use the $MA-X+PU,"AfterEgypt",HTML="http://www.youtube.com/watch?v=P0MsDl39UL0",LM="#include \"::/Apps/AfterEgypt/Run\""$ in God's official temple, $FG,4$$TX,"TempleOS",HTML="http://www.templeos.org"$$FG$. +The technique I use to consult the Holy Spirit is reading a microsecond-range stop-watch each button press for random numbers. Then, I pick words with $FG,2$$FG$ or passages with $FG,2$$FG$. Since seeking the word of the Holy Spirit, I have come to know God much better than I've heard others explain. For example, God said to me in an oracle that war was, "servicemen competing." That sounds more like the immutable God of our planet than what you hear from most religious people. God is not Venus (god of love) and not Mars (god of war), He's our dearly beloved God of Earth. If Mammon is a false god of money, Mars or Venus might be useful words to describe other false gods. I figure the greatest challenge for the Creator is boredom, ours and His. What would teen-age male video games be like if war had never happened? Christ said live by the sword, die by the sword, which is loving neighbor as self. $LK,"Matthew,26:52",A="BF:Matthew,26:52"$ @@ -61,12 +61,12 @@ War? $FG,4$"Servicemen competing"$FG$ (Praise the Creator--what would teenage male video games be like if never war?) Is the World perfectly just? $FG,4$Are you calling me lazy?$FG$ -(Slavery was just. In the movie, Titanic, the rich wore straight jackets. You must bow to authority to get authority. I do $TX,"Moses comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/"$ as offerings. I said, "We're dying of malnutrician on manna." Like Cain and Abel, God didn't like it. Duh! He wants to be the hero. How do I know they died of malnutrician? Screw Hollywood for making slavery worse than it was -- I love God. School is more cruel. Read $LK,"Numbers,11:1-35",A="BF:Numbers,11:1-35"$. All you need is food, clothing and the word of God. Today, you can take Ivy League course videos! There is no excuse except you were born stupid... or ugly. I'm gonna praise God.) +(Slavery was just. In the movie, Titanic, the rich wore straight jackets. You must bow to authority to get authority. I do comics as offerings. I said, "We're dying of malnutrician on manna." Like Cain and Abel, God didn't like it. Duh! He wants to be the hero. How do I know they died of malnutrician? Screw Hollywood for making slavery worse than it was -- I love God. School is more cruel. Read $LK,"Numbers,11:1-35",A="BF:Numbers,11:1-35"$. All you need is food, clothing and the word of God. Today, you can take Ivy League course videos! There is no excuse except you were born stupid... or ugly. I'm gonna praise God.) On using Markov chains? $FG,4$"No weights"$FG$ On doing offerings? $FG,4$"Honest measures"(You get out what you put in.) It's a covenant to do an offering, first. - Offer New Songs, $TX,"Moses Comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics"$, praise, poems, + Offer New Songs, comics, praise, poems, and conversation. See $LK,"Cain and Abel",A="BF:Genesis,4:1"$. "Barter"(God also called offerings bartering.)$FG$ The holocaust? $FG,4$Wanted to "compact" the Jews.$FG$ @@ -177,7 +177,7 @@ You like to hangout in courts?Hospitals?$FG,4$"Prisons"$FG$ Best way for Bill Gates to save lives? $FG,4$Earthquake prediction$FG$ Stem cells? $FG,4$Lower hanging fruit exists (2007)$FG$ Eleventh commandment? $FG,4$Thou shall not litter.$FG$ -Twelfth commandment? $FG,4$$TX,"Don't shoot unarmed men on the shitter.",HTML="http://www.youtube.com/watch?v=8wGiJcq95Ug"$ +Twelfth commandment? $FG,4$$TX,"Don't shoot unarmed men on the crapper.",HTML="http://www.youtube.com/watch?v=8wGiJcq95Ug"$ (I asked God why pointless plagues in Exodus? God wanted guilt to accumulate, first.)$FG$ Thirteenth commandment $FG,4$No gore unless it looks fake.$FG$ diff --git a/Adam/God/HolySpirit.HC b/Adam/God/HolySpirit.HC index 7e52a07..37b7d02 100644 --- a/Adam/God/HolySpirit.HC +++ b/Adam/God/HolySpirit.HC @@ -6,10 +6,10 @@ U8 *TimeStampCB(CDoc *,CDocEntry *,CTask *mem_task) return st; } -U8 *KbdMouseTimeCB(CDoc *,CDocEntry *,CTask *mem_task) +U8 *KbdMsTimeCB(CDoc *,CDocEntry *,CTask *mem_task) { U8 *st=MAlloc(64,mem_task); - StrPrint(st,"%X",KbdMouseEvtTime>>GOD_BAD_BITS); + StrPrint(st,"%X",KbdMsEvtTime>>GOD_BAD_BITS); return st; } @@ -22,7 +22,7 @@ I64 PopUpTimerOk(U8 *header=NULL,U8 *footer=NULL) doc_e=DocPrint(doc,"\nTimer:$$TX+TC,\" \"$$"); doc_e->tag_cb=&TimeStampCB; doc_e=DocPrint(doc,"\nLatch:$$TX+TC,\" \"$$"); - doc_e->tag_cb=&KbdMouseTimeCB; + doc_e->tag_cb=&KbdMsTimeCB; DocPrint(doc,"\n$$CM+CX,0,4$$$$BT,\"OKAY\",LE=1$$\n"); if (footer) DocPrint(doc,"%s",footer); i=PopUpMenu(doc); @@ -36,7 +36,7 @@ I64 GodPick(U8 *msg=NULL) "a random num from a timer.\n",msg); PopUpTimerOk(st,"\n\nThe $LK+PU,"Holy Spirit",A="FI:::/Adam/God/HSNotes.DD"$ can puppet you.\n\n"); Free(st); - return KbdMouseEvtTime>>GOD_BAD_BITS; + return KbdMsEvtTime>>GOD_BAD_BITS; } public U0 GodBitsIns(I64 num_bits,I64 n) @@ -54,7 +54,7 @@ public U0 GodHexIns(U8 *st) if (st) { buf[1]=0; while (*buf=*st++) - if (Bt(chars_bmp_hex_numeric,*buf)) + if (Bt(char_bmp_hex_numeric,*buf)) GodBitsIns(4,rev_bits_table[Str2I64(buf,16)]>>4); } } @@ -92,11 +92,11 @@ public I64 GodInit(U8 *files_find_mask="/Adam/God/Vocab.DD*",U8 *fu_flags=NULL) while (tmpde) { if (buf=ptr=FileRead(tmpde->full_name)) { while (*ptr) { - while (*ptr && !Bt(chars_bmp_word,*ptr)) + while (*ptr && !Bt(char_bmp_word,*ptr)) ptr++; if (*ptr) { ptr2=ptr; - while (*ptr && Bt(chars_bmp_word,*ptr)) + while (*ptr && Bt(char_bmp_word,*ptr)) ptr++; i++; } @@ -115,11 +115,11 @@ public I64 GodInit(U8 *files_find_mask="/Adam/God/Vocab.DD*",U8 *fu_flags=NULL) while (tmpde) { if (buf=ptr=FileRead(tmpde->full_name)) { while (*ptr) { - while (*ptr && !Bt(chars_bmp_word,*ptr)) + while (*ptr && !Bt(char_bmp_word,*ptr)) ptr++; if (*ptr) { ptr2=ptr; - while (*ptr && Bt(chars_bmp_word,*ptr)) + while (*ptr && Bt(char_bmp_word,*ptr)) ptr++; ch=*ptr; *ptr=0; diff --git a/Adam/Gr/GrComposites.HC b/Adam/Gr/GrComposites.HC index a753523..0fb6001 100644 --- a/Adam/Gr/GrComposites.HC +++ b/Adam/Gr/GrComposites.HC @@ -294,19 +294,19 @@ mesh_done: return res; } -#help_index "Graphics/Misc;Input Pointer/Displayed Image" -public U0 DrawStdInputPtr(CDC *dc,I64 x,I64 y) +#help_index "Graphics/Misc;Mouse/Ptr" +public U0 DrawStdMs(CDC *dc,I64 x,I64 y) {//This is a callback. See $LK,"::/Demo/Graphics/Grid.HC"$. -//Called by $LK,"DrawInputPtr",A="MN:DrawInputPtr"$() which is +//Called by $LK,"DrawMs",A="MN:DrawMs"$() which is //called by $LK,"WinFinalUpdate",A="MN:WinFinalUpdate"$(). dc->pen_width=1; dc->flags&=~(DCF_TRANSFORMATION|DCF_SYMMETRY); GrArrow3(dc,x+8,y+8,0,x,y,0); } -gr.fp_draw_input_ptr=&DrawStdInputPtr; +gr.fp_draw_ms=&DrawStdMs; -public U0 DrawWaitInputPtr(CDC *dc,I64 x,I64 y) +public U0 DrawWaitMs(CDC *dc,I64 x,I64 y) {//This is a callback. See $LK,"::/Demo/Graphics/Grid.HC"$. I64 old_pen_width=dc->pen_width; CColorROPU32 old_color=dc->color; @@ -320,3 +320,25 @@ public U0 DrawWaitInputPtr(CDC *dc,I64 x,I64 y) dc->pen_width=old_pen_width; dc->color=old_color; } + +#help_index "Graphics/GR Files;Graphics/Scrn" +public Bool GRScrnCaptureRead(U8 *filename,CDC *dc=gr.dc,I64 x=0,I64 y=0) +{//GrBlot TempleOS GR File to dc,x,y. + CDC *dc2; + if (dc2=GRRead(filename)) { + dc->color=ROP_EQU; + GrBlot(dc,x,y,dc2); + DCDel(dc2); + return TRUE; + } + return FALSE; +} + +public I64 GRScrnCaptureWrite(U8 *filename,Bool include_zoom=TRUE) +{//Capture scrn to a TempleOS GR File. + I64 size; + CDC *dc=DCScrnCapture(include_zoom); + size=GRWrite(filename,dc,DCSF_COMPRESSED|DCSF_PALETTE_GET); + DCDel(dc); + return size; +} diff --git a/Adam/Gr/GrDC.HC b/Adam/Gr/GrDC.HC index e80e096..84d7299 100644 --- a/Adam/Gr/GrDC.HC +++ b/Adam/Gr/GrDC.HC @@ -378,8 +378,8 @@ public CDC *DCLoad(U8 *src,I64 *_size=NULL,CTask *task=NULL) #help_index "Graphics/Device Contexts;Graphics/GR Files" public I64 GRWrite(U8 *filename,CDC *dc,I64 dcsf_flags=DCSF_COMPRESSED) {//TempleOS GR File. - I64 size; - U8 *st=DftExt(filename,"GR.Z"), + I64 size; + U8 *st=DftExt(filename,"GR.Z"), *src=DCSave(dc,&size,dcsf_flags); FileWrite(st,src,size); Free(st); @@ -389,8 +389,8 @@ public I64 GRWrite(U8 *filename,CDC *dc,I64 dcsf_flags=DCSF_COMPRESSED) public CDC *GRRead(U8 *filename,CTask *task=NULL) {//TempleOS GR File. - CDC *dc=NULL; - U8 *st=DftExt(filename,"GR.Z"), + CDC *dc=NULL; + U8 *st=DftExt(filename,"GR.Z"), *src=FileRead(st); if (src) dc=DCLoad(src,,task); @@ -428,13 +428,3 @@ public CDC *DCScrnCapture(Bool include_zoom=TRUE,CTask *task=NULL) dc->body=dst; return dc; } - -#help_index "Graphics/GR Files;Graphics/Scrn" -public I64 GRScrnCapture(U8 *filename,Bool include_zoom=TRUE) -{//Capture scrn to a TempleOS GR File. - I64 size; - CDC *dc=DCScrnCapture(include_zoom); - size=GRWrite(filename,dc,DCSF_COMPRESSED|DCSF_PALETTE_GET); - DCDel(dc); - return size; -} diff --git a/Adam/Gr/GrGlbls.HC b/Adam/Gr/GrGlbls.HC index 19d5dfe..72238bd 100644 --- a/Adam/Gr/GrGlbls.HC +++ b/Adam/Gr/GrGlbls.HC @@ -21,9 +21,9 @@ public class CGrGlbls I64 pan_text_x,pan_text_y; //[-7,7] U0 (*fp_final_scrn_update)(CDC *dc);//Mouse cursor is handled here. U0 (*fp_wall_paper)(CTask *task); - U0 (*fp_draw_input_ptr)(CDC *dc,I64 x,I64 y); - U0 (*fp_draw_grab_input_ptr)(CDC *dc,I64 x,I64 y,Bool closed); - U8 *empty_sprite; //Gets assigned $LK,"gr.empty_sprite",A="FF:::/Adam/AInputPointer.HC,empty_sprite"$ + U0 (*fp_draw_ms)(CDC *dc,I64 x,I64 y); + U0 (*fp_draw_grab_ms)(CDC *dc,I64 x,I64 y,Bool closed); + U8 *empty_sprite; //Gets assigned $LK,"gr.empty_sprite",A="FF:::/Adam/AMouse.HC,empty_sprite"$ #define GR_NUM_PEN_BRUSHES 64 CDC *pen_brushes[GR_NUM_PEN_BRUSHES], diff --git a/Adam/Gr/GrInitB.HC b/Adam/Gr/GrInitB.HC index 0184703..43a4ac7 100644 --- a/Adam/Gr/GrInitB.HC +++ b/Adam/Gr/GrInitB.HC @@ -151,7 +151,7 @@ public U0 WinZBufUpdate() U16 *ptr; CTask *task,*task1; if (gr.win_z_buf) { - LBtr(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0); + LBtr(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0); task1=task=sys_winmgr_task; do { if (!TaskValidate(task)) break; diff --git a/Adam/Gr/GrMath.HC b/Adam/Gr/GrMath.HC index 267884e..f2cff67 100644 --- a/Adam/Gr/GrMath.HC +++ b/Adam/Gr/GrMath.HC @@ -110,7 +110,7 @@ public I64 *Mat4x4New(I64 *src,CTask *mem_task=NULL) return Mat4x4Equ(MAlloc(sizeof(I64)*16,mem_task),src); } -public I64 *Mat4x4RotX(I64 *m1,F64 è) +public I64 *Mat4x4RotX(I64 *m,F64 è) {//Rot matrix about X axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. F64 my_cos=Cos(è)*GR_SCALE,my_sin=Sin(è)*GR_SCALE; I64 r[16],r2[16]; @@ -121,10 +121,10 @@ public I64 *Mat4x4RotX(I64 *m1,F64 r[6]=-my_sin; r[0]=GR_SCALE; r[15]=GR_SCALE; - return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); + return Mat4x4Equ(m,Mat4x4MulMat4x4Equ(r2,r,m)); } -public I64 *Mat4x4RotY(I64 *m1,F64 ê) +public I64 *Mat4x4RotY(I64 *m,F64 ê) {//Rot matrix about Y axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. F64 my_cos=Cos(ê)*GR_SCALE,my_sin=Sin(ê)*GR_SCALE; I64 r[16],r2[16]; @@ -135,10 +135,10 @@ public I64 *Mat4x4RotY(I64 *m1,F64 r[2]=my_sin; r[5]=GR_SCALE; r[15]=GR_SCALE; - return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); + return Mat4x4Equ(m,Mat4x4MulMat4x4Equ(r2,r,m)); } -public I64 *Mat4x4RotZ(I64 *m1,F64 é) +public I64 *Mat4x4RotZ(I64 *m,F64 é) {//Rot matrix about Z axis. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. F64 my_cos=Cos(é)*GR_SCALE,my_sin=Sin(é)*GR_SCALE; I64 r[16],r2[16]; @@ -149,15 +149,15 @@ public I64 *Mat4x4RotZ(I64 *m1,F64 r[1]=-my_sin; r[10]=GR_SCALE; r[15]=GR_SCALE; - return Mat4x4Equ(m1,Mat4x4MulMat4x4Equ(r2,r,m1)); + return Mat4x4Equ(m,Mat4x4MulMat4x4Equ(r2,r,m)); } -public I64 *Mat4x4Scale(I64 *m1,F64 s) +public I64 *Mat4x4Scale(I64 *m,F64 s) {//Scale 4x4 matrix by value. I64 i; for (i=0;i<16;i++) - m1[i]*=s; - return m1; + m[i]*=s; + return m; } public U0 DCPenWidthScale(CDC *dc=gr.dc) diff --git a/Adam/Gr/GrPalette.HC b/Adam/Gr/GrPalette.HC index bb92bd0..99d3179 100644 --- a/Adam/Gr/GrPalette.HC +++ b/Adam/Gr/GrPalette.HC @@ -13,7 +13,7 @@ U0 GrPaletteIndicesSet() if (!Bt(&sys_run_level,RLf_VGA)) return; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_VGA],0)) + while (LBts(&sys_semas[SEMA_VGA],0)) Yield; InU8(VGAP_INPUT_STAT); //Rsts attr index/data for (i=0;i>10); OutU8(VGAP_PALETTE_DATA,bgr48.g>>10); OutU8(VGAP_PALETTE_DATA,bgr48.b>>10); - LBtr(&sys_semas[SYS_SEMA_VGA],0); + LBtr(&sys_semas[SEMA_VGA],0); POPFD } @@ -49,14 +49,14 @@ public CBGR48 GrPaletteColorGet(I64 color_num) if (!Bt(&sys_run_level,RLf_VGA)) return 0; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_VGA],0)) + while (LBts(&sys_semas[SEMA_VGA],0)) Yield; OutU8(VGAP_PALETTE_MASK,0xFF); OutU8(VGAP_REG_READ,color_num); res.r=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; res.g=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; res.b=0xFFFF<<10*InU8(VGAP_PALETTE_DATA)/0xFC00; - LBtr(&sys_semas[SYS_SEMA_VGA],0); + LBtr(&sys_semas[SEMA_VGA],0); POPFD return res; } diff --git a/Adam/Gr/GrPrimatives.HC b/Adam/Gr/GrPrimatives.HC index 5ed9173..23e4a7e 100644 --- a/Adam/Gr/GrPrimatives.HC +++ b/Adam/Gr/GrPrimatives.HC @@ -138,7 +138,7 @@ I64 GrFloodFillRay(CDC *dc,I64 x,I64 y,I64 z,I32 *db) I64 res,j,x1,ray_len,ray_len2; if (UnusedStk<0x80) - Dbg("Stk Overflow",Fs); + Panic("Stk Overflow",Fs); res=ray_len=GrRayLen(dc,&x,y,z,db); y--; @@ -859,7 +859,7 @@ public Bool GrEllipse3(CDC *dc=gr.dc, {//3D. Transformation with pen width. Bool res; I64 x,y,z,xx,yy,zz; - F64 m1,a1,m2,a2,s,c; + F64 m1,arg1,m2,arg2,s,c; if (dc->flags & DCF_TRANSFORMATION) { dc->flags&=~DCF_TRANSFORMATION; (*dc->transform)(dc,&cx,&cy,&cz); @@ -882,7 +882,7 @@ public Bool GrEllipse3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; @@ -891,11 +891,11 @@ public Bool GrEllipse3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); res=Ellipse(dc,cx,cy,cz, - m1/0x10000,m2/0x10000,&GrPlot3,-a1,step,start_radians,len_radians); + m1/0x10000,m2/0x10000,&GrPlot3,-arg1,step,start_radians,len_radians); dc->flags|=DCF_TRANSFORMATION; } else res=Ellipse(dc,cx,cy,cz,x_radius,y_radius,&GrPlot3, @@ -924,7 +924,7 @@ public Bool GrRegPoly3(CDC *dc=gr.dc, {//3D. Clipping and transform and pen width. Bool res; I64 x,y,z,xx,yy,zz; - F64 m1,a1,m2,a2,s,c; + F64 m1,arg1,m2,arg2,s,c; if (dc->flags & DCF_TRANSFORMATION) { dc->flags&=~DCF_TRANSFORMATION; (*dc->transform)(dc,&cx,&cy,&cz); @@ -947,7 +947,7 @@ public Bool GrRegPoly3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; @@ -956,11 +956,11 @@ public Bool GrRegPoly3(CDC *dc=gr.dc, x-=xx; y-=yy; z-=zz; - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); res=RegPoly(dc,cx,cy,cz, - m1/0x10000,m2/0x10000,sides,&GrPlot3,-a1, + m1/0x10000,m2/0x10000,sides,&GrPlot3,-arg1, step,start_radians,len_radians); dc->flags|=DCF_TRANSFORMATION; } else diff --git a/Adam/Gr/GrScrn.HC b/Adam/Gr/GrScrn.HC index fe6da85..e827335 100644 --- a/Adam/Gr/GrScrn.HC +++ b/Adam/Gr/GrScrn.HC @@ -61,7 +61,7 @@ U0 GrUpdateTasks() CTask *task,*task1; try { winmgr.ode_time=0; - if (Bt(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0)) + if (Bt(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0)) WinZBufUpdate; task1=task=sys_winmgr_task; do { //Loop through Core0 tasks. @@ -110,14 +110,14 @@ public U0 GrScaleZoom(F64 scale) gr.scrn_zoom=gr.scrn_zoom*scale; GrFixZoomScale; s/=gr.scrn_zoom; - ip.scale.x*=s; - ip.scale.y*=s; - ip.scale.z*=s; - ip.offset.x=ip.pos.x-(ip.pos.x-ip.offset.x)*s; - ip.offset.y=ip.pos.y-(ip.pos.y-ip.offset.y)*s; - ip.offset.z=ip.pos.z-(ip.pos.z-ip.offset.z)*s; - gr.sx=ip.pos.x-gr.zoomed_dc->width >>1/gr.scrn_zoom; - gr.sy=ip.pos.y-gr.zoomed_dc->height>>1/gr.scrn_zoom; + ms.scale.x*=s; + ms.scale.y*=s; + ms.scale.z*=s; + ms.offset.x=ms.pos.x-(ms.pos.x-ms.offset.x)*s; + ms.offset.y=ms.pos.y-(ms.pos.y-ms.offset.y)*s; + ms.offset.z=ms.pos.z-(ms.pos.z-ms.offset.z)*s; + gr.sx=ms.pos.x-gr.zoomed_dc->width >>1/gr.scrn_zoom; + gr.sy=ms.pos.y-gr.zoomed_dc->height>>1/gr.scrn_zoom; GrFixZoomScale; } @@ -330,7 +330,7 @@ U0 GrUpdateTextModeText() I64 cur_ch,i=TEXT_COLS*TEXT_ROWS; U16 *dst=text.vga_text_alias,*dst2=gr.vga_text_cache; Bool blink_flag=Blink; - if (LBtr(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0)) { + if (LBtr(&sys_semas[SEMA_FLUSH_VGA_IMAGE],0)) { while (i--) { cur_ch=*src++; if (cur_ch & ATTRF_SEL) @@ -374,7 +374,7 @@ U0 GrUpdateVGAGraphics() src=gr.zoomed_dc->body; } dst=gr.scrn_image->body; - if (LBtr(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0)) { + if (LBtr(&sys_semas[SEMA_FLUSH_VGA_IMAGE],0)) { for (plane=1;plane<0x10;plane<<=1) { OutU8(VGAP_IDX,VGAR_MAP_MASK); OutU8(VGAP_DATA,plane); diff --git a/Adam/Gr/GrSpritePlot.HC b/Adam/Gr/GrSpritePlot.HC index 9766bf5..2a98318 100644 --- a/Adam/Gr/GrSpritePlot.HC +++ b/Adam/Gr/GrSpritePlot.HC @@ -253,7 +253,7 @@ public U0 Sprite3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems) dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags; } -public U0 SpriteMat3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) +public U0 Sprite3Mat4x4B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) {//Plot rotated by matrix. I64 r[16],*old_r=dc->r,new_m[16], old_flags=dc->flags&DCF_TRANSFORMATION; @@ -266,28 +266,28 @@ public U0 SpriteMat3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,I64 *m) dc->flags=dc->flags&~DCF_TRANSFORMATION|old_flags; } -public U0 SpriteX3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 è=0) +public U0 Sprite3XB(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 è=0) {//Plot rotated around X axis. I64 r[16]; Mat4x4IdentEqu(r); Mat4x4RotX(r,è); - SpriteMat3B(dc,x,y,z,elems,r); + Sprite3Mat4x4B(dc,x,y,z,elems,r); } -public U0 SpriteY3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 ê=0) +public U0 Sprite3YB(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 ê=0) {//Plot rotated around Y axis. I64 r[16]; Mat4x4IdentEqu(r); Mat4x4RotY(r,ê); - SpriteMat3B(dc,x,y,z,elems,r); + Sprite3Mat4x4B(dc,x,y,z,elems,r); } -public U0 SpriteZ3B(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 é=0) +public U0 Sprite3ZB(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,F64 é=0) {//Plot rotated around Z axis. I64 r[16]; Mat4x4IdentEqu(r); Mat4x4RotZ(r,é); - SpriteMat3B(dc,x,y,z,elems,r); + Sprite3Mat4x4B(dc,x,y,z,elems,r); } public U0 SpriteExtents(U8 *elems,I64 *min_x=NULL,I64 *max_x=NULL, diff --git a/Adam/Gr/GrTextBase.HC b/Adam/Gr/GrTextBase.HC index fa9d5fd..4935ba0 100644 --- a/Adam/Gr/GrTextBase.HC +++ b/Adam/Gr/GrTextBase.HC @@ -329,7 +329,7 @@ public U0 TextPrint(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...) public U0 TextBorder(CTask *task=NULL, I64 l,I64 r,I64 t,I64 b,I64 attr,Bool solid) {//Plot border square. 30fps in Fs->draw_it() callback. -//Draws window borders or DolDoc text button borders. +//Draws window borders or DolDoc text bttn borders. //Set task=sys_winmgr_task for no clipping. I64 i; if (!task) task=Fs; diff --git a/Adam/Gr/SpriteBitMap.HC b/Adam/Gr/SpriteBitMap.HC index eaeffab..76bacd6 100644 --- a/Adam/Gr/SpriteBitMap.HC +++ b/Adam/Gr/SpriteBitMap.HC @@ -201,7 +201,7 @@ U0 GrBitMapEdEtch(CDC *img,I64 width,CColorROPU32 bkcolor) I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1, I64 *_xx2,I64 *_yy2,CDC **_img,CColorROPU32 bkcolor) { - I64 i,j,mode=SPBM_LINE,color=BLACK,width=1,msg_code,a1,a2,x1,y1,x11,y11, + I64 i,j,mode=SPBM_LINE,color=BLACK,width=1,msg_code,arg1,arg2,x1,y1,x11,y11, x22,y22,res,xx1=*_xx1,yy1=*_yy1,xx2=*_xx2,yy2=*_yy2, old_de_flags=doc_e->de_flags; Bool down=FALSE; @@ -222,11 +222,11 @@ I64 SpriteBitMapEd(CDoc *,CDocEntry *doc_e,CDC *dc,I64 *_xx1,I64 *_yy1, dc->pen_width=1; GrBorder(dc,xx1-1,yy1-1,xx2,yy2);//This is done little bit too often. - while (msg_code=ScanMsg(&a1,&a2,1<task_title,"Sprite BitMap Menu"); @@ -353,26 +353,26 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); down=FALSE; break; - case MSG_IP_L_DOWN: + case MSG_MS_L_DOWN: switch (mode) { case SPBM_PT: img->color=color; img->pen_width=width; - GrPlot3(img,a1-xx1,a2-yy1,0); + GrPlot3(img,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; start: if (down) GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - x1=a1; y1=a2; + x1=arg1; y1=arg2; down=TRUE; dc->color=color; dc->pen_width=width; case SPBM_LINE: - GrLine3(dc,x1,y1,0,a1,a2,0); + GrLine3(dc,x1,y1,0,arg1,arg2,0); break; case SPBM_ARROW: - GrArrow3(dc,x1,y1,0,a1,a2,0); + GrArrow3(dc,x1,y1,0,arg1,arg2,0); break; case SPBM_RECT: GrRect(dc,x1,y1,1,1); @@ -394,12 +394,12 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_PASTE) { clipboard->flags|=DCF_NO_TRANSPARENTS; - GrBlot(dc,a1,a2,clipboard); + GrBlot(dc,arg1,arg2,clipboard); clipboard->flags&=~DCF_NO_TRANSPARENTS; } else { dc2=DCCopy(clipboard); DCColorChg(dc2,bkcolor); - GrBlot(dc,a1,a2,dc2); + GrBlot(dc,arg1,arg2,dc2); DCDel(dc2); } } @@ -407,48 +407,48 @@ bm_menu: case SPBM_TEXT: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrPrint(dc,a1,a2,"%s",st); + GrPrint(dc,arg1,arg2,"%s",st); break; case SPBM_TEXT_BOX: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextBox3(dc,a1,a2,0,st); + GrTextBox3(dc,arg1,arg2,0,st); break; case SPBM_TEXT_DIAMOND: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextDiamond3(dc,a1,a2,0,st); + GrTextDiamond3(dc,arg1,arg2,0,st); break; case SPBM_FLOOD_FILL: img->color=color; - GrFloodFill(img,a1-xx1,a2-yy1); + GrFloodFill(img,arg1-xx1,arg2-yy1); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; case SPBM_FLOOD_FILL_NOT: img->color=color; - GrFloodFill(img,a1-xx1,a2-yy1,TRUE); + GrFloodFill(img,arg1-xx1,arg2-yy1,TRUE); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; case SPBM_POLYLINE: if (!down) { - x1=a1; y1=a2; + x1=arg1; y1=arg2; down=TRUE; dc->color=color; dc->pen_width=width; - GrLine3(dc,x1,y1,0,a1,a2,0); + GrLine3(dc,x1,y1,0,arg1,arg2,0); } break; case SPBM_POLYPT: - x1=a1; y1=a2; + x1=arg1; y1=arg2; down=TRUE; img->color=color; img->pen_width=width; - GrLine3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrLine3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; } break; - case MSG_IP_MOVE: + case MSG_MS_MOVE: switch (mode) { case SPBM_LINE: case SPBM_ARROW: @@ -458,26 +458,26 @@ bm_menu: dc->color=color; dc->pen_width=width; if (mode==SPBM_ARROW) - GrArrow3(dc,x1,y1,0,a1,a2,0); + GrArrow3(dc,x1,y1,0,arg1,arg2,0); else - GrLine3(dc,x1,y1,0,a1,a2,0); + GrLine3(dc,x1,y1,0,arg1,arg2,0); } break; case SPBM_RECT: if (down) { GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - if (x1color=color; @@ -488,18 +488,18 @@ bm_menu: case SPBM_DELETE: if (down) { GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - if (x1color=ROPF_DITHER+WHITE<<16+BLACK; @@ -512,7 +512,7 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; dc->pen_width=width; - GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(a1-x1)+SqrI64(a2-y1))); + GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(arg1-x1)+SqrI64(arg2-y1))); } break; case SPBM_PASTE: @@ -521,12 +521,12 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_PASTE) { clipboard->flags|=DCF_NO_TRANSPARENTS; - GrBlot(dc,a1,a2,clipboard); + GrBlot(dc,arg1,arg2,clipboard); clipboard->flags&=~DCF_NO_TRANSPARENTS; } else { dc2=DCCopy(clipboard); DCColorChg(dc2,bkcolor); - GrBlot(dc,a1,a2,dc2); + GrBlot(dc,arg1,arg2,dc2); DCDel(dc2); } } @@ -534,30 +534,30 @@ bm_menu: case SPBM_TEXT: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrPrint(dc,a1,a2,"%s",st); + GrPrint(dc,arg1,arg2,"%s",st); break; case SPBM_TEXT_BOX: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextBox3(dc,a1,a2,0,st); + GrTextBox3(dc,arg1,arg2,0,st); break; case SPBM_TEXT_DIAMOND: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); dc->color=color; - GrTextDiamond3(dc,a1,a2,0,st); + GrTextDiamond3(dc,arg1,arg2,0,st); break; case SPBM_POLYPT: if (down) { img->color=color; img->pen_width=width; - GrLine3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrLine3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); - x1=a1; y1=a2; + x1=arg1; y1=arg2; } break; } break; - case MSG_IP_L_UP: + case MSG_MS_L_UP: switch (mode) { case SPBM_LINE: case SPBM_ARROW: @@ -566,29 +566,29 @@ bm_menu: img->color=color; img->pen_width=width; if (mode==SPBM_ARROW) - GrArrow3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrArrow3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); else - GrLine3(img,x1-xx1,y1-yy1,0,a1-xx1,a2-yy1,0); + GrLine3(img,x1-xx1,y1-yy1,0,arg1-xx1,arg2-yy1,0); GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_POLYLINE) { - x1=a1; y1=a2; + x1=arg1; y1=arg2; } else down=FALSE; break; case SPBM_RECT: img->color=color; - if (x1color=color; img->pen_width=width; - GrCircle3(img,x1-xx1,y1-yy1,0,Sqrt(SqrI64(a1-x1)+SqrI64(a2-y1))); + GrCircle3(img,x1-xx1,y1-yy1,0, + Sqrt(SqrI64(arg1-x1)+SqrI64(arg2-y1))); down=FALSE; GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); break; @@ -632,12 +633,12 @@ bm_menu: GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); if (mode==SPBM_PASTE) { clipboard->flags|=DCF_NO_TRANSPARENTS; - GrBlot(img,a1-xx1,a2-yy1,clipboard); + GrBlot(img,arg1-xx1,arg2-yy1,clipboard); clipboard->flags&=~DCF_NO_TRANSPARENTS; } else { dc2=DCCopy(clipboard); DCColorChg(dc2,bkcolor); - GrBlot(img,a1-xx1,a2-yy1,dc2); + GrBlot(img,arg1-xx1,arg2-yy1,dc2); DCDel(dc2); } GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); @@ -645,15 +646,15 @@ bm_menu: break; case SPBM_TEXT: img->color=color; - GrPrint(img,a1-xx1,a2-yy1,"%s",st); + GrPrint(img,arg1-xx1,arg2-yy1,"%s",st); goto bm_menu; case SPBM_TEXT_BOX: img->color=color; - GrTextBox3(img,a1-xx1,a2-yy1,0,st); + GrTextBox3(img,arg1-xx1,arg2-yy1,0,st); goto bm_menu; case SPBM_TEXT_DIAMOND: img->color=color; - GrTextDiamond3(img,a1-xx1,a2-yy1,0,st); + GrTextDiamond3(img,arg1-xx1,arg2-yy1,0,st); goto bm_menu; } break; diff --git a/Adam/Gr/SpriteEd.HC b/Adam/Gr/SpriteEd.HC index d1a7bfe..9a364b2 100644 --- a/Adam/Gr/SpriteEd.HC +++ b/Adam/Gr/SpriteEd.HC @@ -181,7 +181,7 @@ U0 SpriteSetOrigin(CSprite *head,I64 dx,I64 dy,I64 dz) CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) { I64 x,y,z; - F64 m1,a1,m2,radius=tmpg->pr.radius<<16; + F64 m1,arg1,m2,radius=tmpg->pr.radius<<16; CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(SPT_ELLIPSE)); tmpg1->type=SPT_ELLIPSE; @@ -192,7 +192,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) x=radius; y=0; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=0; y=radius; z=0; Mat4x4MulXYZ(r,&x,&y,&z); @@ -200,7 +200,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) tmpg1->pwha.width =ToI64(m1)/0x10000; tmpg1->pwha.height=ToI64(m2)/0x10000; - tmpg1->pwha.angle=-a1; + tmpg1->pwha.angle=-arg1; tmpg1->type|=tmpg->type&SPF_SEL; return tmpg1; @@ -209,7 +209,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg) CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg) { I64 x,y,z; - F64 m1,a1,m2,a2,s,c,x_radius=tmpg->pwha.width<<16, + F64 m1,arg1,m2,arg2,s,c,x_radius=tmpg->pwha.width<<16, y_radius=tmpg->pwha.height<<16; CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(tmpg->type&SPG_TYPE_MASK)); tmpg1->type=tmpg->type; @@ -228,20 +228,20 @@ CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg) y=x_radius*s; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); tmpg1->pwha.width=ToI64(m1)/0x10000; if (tmpg1->pwha.width<1) tmpg1->pwha.width=1; tmpg1->pwha.height=ToI64(m2)/0x10000; if (tmpg1->pwha.height<1) tmpg1->pwha.height=1; - tmpg1->pwha.angle=-a1; + tmpg1->pwha.angle=-arg1; tmpg1->type|=tmpg->type&SPF_SEL; return tmpg1; @@ -250,7 +250,7 @@ CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg) CSprite *SpriteTransformRect(I64 *r,CSprite *tmpg,F64 é) { I64 x,y,z,w,h; - F64 m1,a1,m2,a2,s,c, + F64 m1,arg1,m2,arg2,s,c, x_radius=(tmpg->pp.x2-tmpg->pp.x1)<<16, y_radius=(tmpg->pp.y2-tmpg->pp.y1)<<16; CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(SPT_ROTATED_RECT)); @@ -268,14 +268,14 @@ CSprite *SpriteTransformRect(I64 *r,CSprite *tmpg,F64 y=x_radius*s; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m1,&a1,x,y); + R2P(&m1,&arg1,x,y); x=-y_radius*s; y=y_radius*c; z=0; Mat4x4MulXYZ(r,&x,&y,&z); - R2P(&m2,&a2,x,y); - m2*=Abs(Sin(a2-a1)); + R2P(&m2,&arg2,x,y); + m2*=Abs(Sin(arg2-arg1)); w=ToI64(m1)/0x10000; if (w<1) w=1; @@ -283,7 +283,7 @@ CSprite *SpriteTransformRect(I64 *r,CSprite *tmpg,F64 if (h<1) h=1; tmpg1->ppa.x2=tmpg1->ppa.x1+w; tmpg1->ppa.y2=tmpg1->ppa.y1+h; - tmpg1->ppa.angle=-a1; + tmpg1->ppa.angle=-arg1; tmpg1->type|=tmpg->type&SPF_SEL; return tmpg1; @@ -371,10 +371,9 @@ CSprite *SpriteTransformBitMap(I64 *r,CSprite *tmpg) return tmpg1; } -U0 SpriteTransform(I64 *r,CSprite *head) +U0 SpriteTransformQue(CSprite *head,I64 *r) { - I64 i,j,k,num, - x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3; + I64 i,j,k,num,x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3; I32 *ptr; CD3I32 *p; CSprite *tmpg=head->next,head2,*tmpg1,*tmpg2,*tmpg3; @@ -960,7 +959,7 @@ U0 SpriteCtrlPtsMove(CEdSprite *head,I64 dx,I64 dy) Bool SpriteSelUnselShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) { - I64 msg_code,a1,a2,xx,yy,xx2,yy2,dd,best_dd,cur_elem_num; + I64 msg_code,arg1,arg2,xx,yy,xx2,yy2,dd,best_dd,cur_elem_num; Bool res=TRUE; CDC *dc=DCAlias; CEdSprite head,*tmpes,*best_es; @@ -970,14 +969,14 @@ Bool SpriteSelUnselShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) if (head.next!=&head) { while (TRUE) { SpriteCtrlPtsDraw(dc,&head); //has Refresh - switch (msg_code=ScanMsg(&a1,&a2, - 1<color=ROPF_DITHER+WHITE<<16+RED; GrBorder(dc,xx,yy,xx2,yy2); - if (msg_code=ScanMsg(&a1,&a2,1<flags&=~SPEDF_SEL; @@ -1085,11 +1087,11 @@ Bool SpriteSelUnselShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) break; case MSG_KEY_DOWN: gs_key: - switch (a1.u8[0]) { + switch (arg1.u8[0]) { case CH_SHIFT_ESC: res=FALSE; case CH_ESC: - GetMsg(&a1,&a2,1<de_flags=old_de_flags; - GetMsg(&a1,&a2,1<de_flags=old_de_flags; - GetMsg(&a1,&a2,1<p.x1=0; tmpg->p.y1=0; QueIns(tmpg,insert_pt->last); - GetMsg(&a1,&a2,1<p.x1=a1-xx; - tmpg->p.y1=a2-yy; + msg_code=GetMsg(&arg1,&arg2, + 1<p.x1=arg1-xx; + tmpg->p.y1=arg2-yy; SpriteEdUpdate(doc,doc_ce,*_head); - } while (msg_code!=MSG_IP_L_UP); + } while (msg_code!=MSG_MS_L_UP); *_cur_elem_num+=1; break; case SPED_INS_CLIPBOARD: @@ -1265,3 +1267,16 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y, case SPED_MAIN_MENU: return SPE_CONT; } } + +#help_index "Graphics/Sprite;Sprites;Graphics/Math/3D Transformation" +public U8 *SpriteTransform(U8 *elems,I64 *r) +{//Rotate Sprite using 4x4 matrix. Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. + U8 *res; + CSprite *head=Sprite2SpriteQue(elems); + SpriteQueSelAll(head); + SpriteTransformQue(head,r); + res=SpriteQue2Sprite(head); + QueDel(head); + Free(head); + return res; +} diff --git a/Adam/Gr/SpriteMain.HC b/Adam/Gr/SpriteMain.HC index f6cafa6..c3ca531 100644 --- a/Adam/Gr/SpriteMain.HC +++ b/Adam/Gr/SpriteMain.HC @@ -128,17 +128,17 @@ U0 SpriteScrnInit(CDC *dc,I64,I64) dc->pen_width=old_pen_width; } -CSprite *SMLine(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMLine(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrLine3(dc,x1,y1,0,x2,y2,0); res=CAlloc(SpriteElemQuedBaseSize(SPT_LINE)); @@ -150,17 +150,17 @@ CSprite *SMLine(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMArrow(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMArrow(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrArrow3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrArrow3(dc,x1,y1,0,x2,y2,0); res=CAlloc(SpriteElemQuedBaseSize(SPT_ARROW)); @@ -172,9 +172,9 @@ CSprite *SMArrow(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 a1,I64 a2) +CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2,old_width,old_flags; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2,old_width,old_flags; CSprite *res; old_width=dc->pen_width; old_flags=dc->flags; @@ -183,10 +183,10 @@ CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 a1,I64 a2) do { dc->color=ROPF_DITHER+WHITE<<16+BLACK; GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<flags=old_flags&DCF_SYMMETRY|dc->flags&~DCF_SYMMETRY; dc->pen_width=old_width; res=CAlloc(SpriteElemQuedBaseSize(SPT_PLANAR_SYMMETRY)); @@ -198,16 +198,17 @@ CSprite *SMPlanarSymmetry(CDC *dc,I64 x,I64 y,I64 a1,I64 a2) return res; } -CSprite *SMRect(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMRect(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2,xx1=a1,yy1=a2,xx2=a1,yy2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2, + xx1=arg1,yy1=arg2,xx2=arg1,yy2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrRect3(dc,xx1,yy1,0,xx2-xx1,yy2-yy1); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrRect3(dc,xx1,yy1,0,xx2-xx1,yy2-yy1); res=CAlloc(SpriteElemQuedBaseSize(SPT_RECT)); @@ -230,10 +231,11 @@ CSprite *SMRect(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2, - CColorROPU32 bm_bkcolor) +CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y, + I64 arg1,I64 arg2,CColorROPU32 bm_bkcolor) { - I64 i,msg_code,x1=a1,y1=a2,x2=a1,y2=a2,xx1=a1,yy1=a2,xx2=a1,yy2=a2,old_width; + I64 i,msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2, + xx1=arg1,yy1=arg2,xx2=arg1,yy2=arg2,old_width; CDC *dc3,*img; CSprite *res; old_width=dc2->pen_width; @@ -242,9 +244,9 @@ CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2, dc2->color=ROPF_DITHER+WHITE<<16+BLACK; GrBorder(dc2,xx1+Fs->pix_left+Fs->scroll_x,yy1+Fs->pix_top+Fs->scroll_y, xx2+Fs->pix_left+Fs->scroll_x,yy2+Fs->pix_top+Fs->scroll_y); - msg_code=GetMsg(&a1,&a2,1<type=SPT_BITMAP; @@ -283,17 +285,17 @@ CSprite *SMScrnBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2, return res; } -CSprite *SMCircle(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMCircle(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(x1-x2)+SqrI64(y1-y2))); - msg_code=GetMsg(&a1,&a2,1<color=color&COLORROP_NO_ROP0_MASK; GrCircle3(dc,x1,y1,0,Sqrt(SqrI64(x1-x2)+SqrI64(y1-y2))); res=CAlloc(SpriteElemQuedBaseSize(SPT_CIRCLE)); @@ -304,18 +306,18 @@ CSprite *SMCircle(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; F64 angle1,angle2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrEllipse3(dc,(x1+x2)>>1,(y1+y2)>>1,0,AbsI64(x1-x2)>>1,AbsI64(y1-y2)>>1); - msg_code=GetMsg(&a1,&a2,1<type=SPT_ELLIPSE; res->pwha.x1=(x1+x2)>>1-x; @@ -334,10 +336,10 @@ CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) dc->color=color&COLORROP_NO_ROP0_MASK; GrEllipse3(dc,res->pwha.x1+x,res->pwha.y1+y,0, res->pwha.width,res->pwha.height,res->pwha.angle); - msg_code=GetMsg(&a1,&a2,1<pwha.x1+x),y2-(res->pwha.y1+y)); if (res->pwha.width>=res->pwha.height) res->pwha.angle=-(angle1-angle2); @@ -349,20 +351,20 @@ CSprite *SMEllipse(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,I64 sides, +CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,I64 sides, CColorROPU32 color) { - I64 msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; F64 angle1,angle2; CSprite *res; do { dc->color=color&COLORROP_NO_ROP0_MASK; GrRegPoly3(dc,(x1+x2)>>1,(y1+y2)>>1,0, AbsI64(x1-x2)>>1,AbsI64(y1-y2)>>1,sides); - msg_code=GetMsg(&a1,&a2,1<type=SPT_POLYGON; res->pwhas.x1=(x1+x2)>>1-x; @@ -383,10 +385,10 @@ CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,I64 sides, GrRegPoly3(dc,res->pwhas.x1+x,res->pwhas.y1+y,0, res->pwhas.width,res->pwhas.height, res->pwhas.sides,res->pwhas.angle); - msg_code=GetMsg(&a1,&a2,1<pwhas.x1+x),y2-(res->pwhas.y1+y)); if (res->pwhas.width>=res->pwhas.height) res->pwhas.angle=-(angle1-angle2); @@ -399,10 +401,10 @@ CSprite *SMPolygon(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,I64 sides, return res; } -CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, +CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2, CColorROPU32 color) { - I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2; + I64 i,num=0,msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2; I32 *ptr; CD3I32 *p; CSprite *res,*tmpg,*tmpg1,head2; @@ -413,14 +415,15 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, dc->color=color&COLORROP_NO_ROP0_MASK; if (num) GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2,1<color=TRANSPARENT; if (num) GrLine3(dc,x1,y1,0,x2,y2,0); - x2=a1; y2=a2; - } while (msg_code!=MSG_IP_L_UP && msg_code!=MSG_IP_R_UP); + x2=arg1; y2=arg2; + } while (msg_code!=MSG_MS_L_UP && msg_code!=MSG_MS_R_UP); dc->color=color&COLORROP_NO_ROP0_MASK; - if (msg_code==MSG_IP_L_UP) { + if (msg_code==MSG_MS_L_UP) { if (num) GrLine3(dc,x1,y1,0,x2,y2,0); res=CAlloc(SpriteElemQuedBaseSize(SPT_PT)); @@ -431,7 +434,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, x1=x2;y1=y2; num++; } - } while (msg_code!=MSG_IP_R_UP); + } while (msg_code!=MSG_MS_R_UP); switch (eletype) { case SPT_POLYLINE: @@ -489,22 +492,22 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, return res; } -CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) +CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 arg1,I64 arg2,CColorROPU32 color) { - I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2,x3,y3; + I64 i,num=0,msg_code,x1=arg1,y1=arg2,x2=arg1,y2=arg2,x3,y3; I32 *ptr; CSprite *res,*tmpg,*tmpg1,head2; QueInit(&head2); - x3=a1-x; y3=a2-y; + x3=arg1-x; y3=arg2-y; dc->color=color&COLORROP_NO_ROP0_MASK; do { - msg_code=GetMsg(&a1,&a2,1<type=eletype; tmpg->ps.x1=x1-x; @@ -580,10 +583,10 @@ U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head,CDC *dc, } I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head, - CDC *dc,I64 xx,I64 yy,I64 a1,I64 a2,CColorROPU32 bm_bkcolor, + CDC *dc,I64 xx,I64 yy,I64 arg1,I64 arg2,CColorROPU32 bm_bkcolor, Bool sel,I64 xx1=0,I64 yy1=0,I64 xx2=0,I64 yy2=0,I64 *_cur_elem_num) { - I64 i,msg_code,x=xx,y=yy,x1=a1,y1=a2,x2=a1,y2=a2,old_width; + I64 i,msg_code,x=xx,y=yy,x1=arg1,y1=arg2,x2=arg1,y2=arg2,old_width; CSprite *tmpg,*tmpg1,*insert_pt; CDC *img; @@ -591,16 +594,16 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head, x+=xx; y+=yy; if (sel) { - xx1=a1; yy1=a2; - xx2=a1; yy2=a2; + xx1=arg1; yy1=arg2; + xx2=arg1; yy2=arg2; old_width=dc->pen_width; dc->pen_width=1; do { dc->color=ROPF_DITHER+WHITE<<16+BLACK; GrBorder(dc,xx1,yy1,xx2,yy2); - msg_code=GetMsg(&a1,&a2,1<pen_width=old_width; } @@ -714,7 +717,7 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,I64 *_cur_elem_num) } U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, - I64 x,I64 y,I64 a1,I64 a2,I64 *_cur_elem_num) + I64 x,I64 y,I64 arg1,I64 arg2,I64 *_cur_elem_num) { CSprite *tmpg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num), *tmpg1=insert_pt; @@ -723,8 +726,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, I32 *mesh,*old_mesh; if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_MESH) { z=0; - x1=-(a1-x); - y1=-(a2-y); + x1=-(arg1-x); + y1=-(arg2-y); z1=z; p=&tmpg1->mu.u; for (i=0;imu.vertex_cnt;i++,p++) { @@ -735,8 +738,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, old_mesh=&tmpg1->mu.vertex_cnt; } else if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) { z=-tmpg1->pmu.z; - x1=tmpg1->pmu.x-(a1-x); - y1=tmpg1->pmu.y-(a2-y); + x1=tmpg1->pmu.x-(arg1-x); + y1=tmpg1->pmu.y-(arg2-y); z1=tmpg1->pmu.z+z; p=&tmpg1->pmu.u; for (i=0;ipmu.vertex_cnt;i++,p++) { @@ -754,8 +757,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, tmpg->type=SPT_SHIFTABLE_MESH; MemCpy(&tmpg->pmu.vertex_cnt,mesh,size); Free(mesh); - tmpg->pmu.x=a1-x; - tmpg->pmu.y=a2-y; + tmpg->pmu.x=arg1-x; + tmpg->pmu.y=arg2-y; tmpg->pmu.z=-z; QueIns(tmpg,insert_pt->last); SpriteEdUpdate(doc,doc_ce,head); @@ -767,8 +770,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, } else *_cur_elem_num+=1; } else if (old_mesh && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) { - x1=tmpg1->pmu.x-(a1-x); - y1=tmpg1->pmu.y-(a2-y); + x1=tmpg1->pmu.x-(arg1-x); + y1=tmpg1->pmu.y-(arg2-y); z1=tmpg1->pmu.z+z; p=&tmpg1->pmu.u; for (i=0;ipmu.vertex_cnt;i++,p++) { @@ -777,8 +780,8 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, p->z-=z1; } } else if (old_mesh && tmpg1->type&SPG_TYPE_MASK==SPT_MESH) { - x1=-(a1-x); - y1=-(a2-y); + x1=-(arg1-x); + y1=-(arg2-y); z1= z; p=&tmpg1->mu.u; for (i=0;imu.vertex_cnt;i++,p++) { @@ -809,7 +812,7 @@ U0 SMTaskTitleSet(I64 eletype) I64 SpriteMainEd(CDoc *doc) { CDocEntry *doc_ce=doc->cur_entry; - I64 res,i,x,y,a1,a2,xx,yy,xx1,yy1,xx2,yy2,width,eletype=SPT_MENU, + I64 res,i,x,y,arg1,arg2,xx,yy,xx1,yy1,xx2,yy2,width,eletype=SPT_MENU, cur_elem_num,old_border_src=Fs->border_src,old_title_src=Fs->title_src, old_de_flags=doc_ce->de_flags; CColorROPU32 bm_bkcolor,color; @@ -914,21 +917,21 @@ I64 SpriteMainEd(CDoc *doc) case SPT_SHIFTABLE_MESH: doc_ce->de_flags|=DOCEF_DONT_DRAW; if (PopUpNoYes("Study the $$LK,\"X-Caliber\"," - "A=\"FF:::/PersonalMenu.DD.Z,X-Caliber\"$$ icon.\n\n" - "It has black rectangle background with stars. The\n" - "mesh is in front and rotates. To keep the background\n" - "rectangle from rotating, " - "$$GREEN$$TRANSFORM OFF$$FG$$ has been used.\n\n" - "The X-Caliber mesh has a different origin for rotation.\n" - "To avoid clipping, it also has also been moved in the\n" - "negative Z direction by editing the sprite as text\n" - "and changing the first vector.\n\n" - "For the mesh you are creating, use same origin as\n" - "the rest of the sprite? If $$GREEN$$YES$$FG$$, you can always\n" - "shift the mesh origin point in the sprite edit menu.\n")) { + "A=\"FF:::/PersonalMenu.DD.Z,X-Caliber\"$$ icon.\n\n" + "It has black rectangle background with stars. The\n" + "mesh is in front and rotates. To keep the background\n" + "rectangle from rotating, " + "$$GREEN$$TRANSFORM OFF$$FG$$ has been used.\n\n" + "The X-Caliber mesh has a different origin for rotation.\n" + "To avoid clipping, it also has also been moved in the\n" + "negative Z direction by editing the sprite as text\n" + "and changing the first vector.\n\n" + "For the mesh you are creating, use same origin as\n" + "the rest of the sprite? If $$GREEN$$YES$$FG$$, you can always\n" + "shift the mesh origin point in the sprite edit menu.\n")) { doc_ce->de_flags=old_de_flags; - a1=x; a2=y; - SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num); + arg1=x; arg2=y; + SMShiftableMesh(doc,doc_ce,head,x,y,arg1,arg2,&cur_elem_num); eletype=SPT_MENU; } else PopUpOk("Select Origin.\n"); @@ -938,7 +941,7 @@ I64 SpriteMainEd(CDoc *doc) doc_ce->de_flags|=DOCEF_DONT_DRAW; PopUpOk("Drag-out a rect for the extents of the\nbitmap.\n"); doc_ce->de_flags=old_de_flags; - Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_IP_L|WIF_FOCUS_TASK_IP_R| + Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_MS_L|WIF_FOCUS_TASK_MS_R| WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; break; case SPT_BITMAP: @@ -956,7 +959,7 @@ I64 SpriteMainEd(CDoc *doc) doc_ce->de_flags=old_de_flags; xx1+=xx; yy1+=yy; xx2+=xx; yy2+=yy; - if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor, + if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,arg1,arg2,bm_bkcolor, FALSE,xx1,yy1,xx2,yy2,&cur_elem_num)==SPE_EXIT) { res=SPE_EXIT; goto ei_done; @@ -976,7 +979,7 @@ I64 SpriteMainEd(CDoc *doc) PopUpOk("Drag-out a rect for the extents of the\nbitmap.\n"); } doc_ce->de_flags=old_de_flags; - Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_IP_L|WIF_FOCUS_TASK_IP_R| + Fs->win_inhibit=WIG_TASK_DFT|WIF_FOCUS_TASK_MS_L|WIF_FOCUS_TASK_MS_R| WIF_FOCUS_TASK_BORDER-WIF_SELF_FOCUS-WIF_SELF_GRAB_SCROLL; break; case SPT_WIDTH: @@ -1016,7 +1019,7 @@ I64 SpriteMainEd(CDoc *doc) case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: - SMTextFamily(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2, + SMTextFamily(eletype,doc,doc_ce,head,dc,xx,yy,arg1,arg2, color,&cur_elem_num,old_de_flags); eletype=SPT_MENU; break; @@ -1034,9 +1037,10 @@ I64 SpriteMainEd(CDoc *doc) res=SPE_ABORT; goto ei_done; } - switch (GetMsg(&a1,&a2,1<type=SPT_COLOR; @@ -1064,7 +1068,7 @@ I64 SpriteMainEd(CDoc *doc) break; } break; - case MSG_IP_R_UP: + case MSG_MS_R_UP: if (eletype==SPT_PLANAR_SYMMETRY) { tmpg=CAlloc(SpriteElemQuedBaseSize(SPT_PLANAR_SYMMETRY)); tmpg->type=SPT_PLANAR_SYMMETRY; @@ -1075,35 +1079,35 @@ I64 SpriteMainEd(CDoc *doc) } else eletype=SPT_MENU; break; - case MSG_IP_L_DOWN: + case MSG_MS_L_DOWN: switch (eletype) { start: case SPT_LINE: - tmpg=SMLine(dc,x,y,a1,a2,color); + tmpg=SMLine(dc,x,y,arg1,arg2,color); break; case SPT_ARROW: - tmpg=SMArrow(dc,x,y,a1,a2,color); + tmpg=SMArrow(dc,x,y,arg1,arg2,color); break; case SPT_PLANAR_SYMMETRY: - tmpg=SMPlanarSymmetry(dc,x,y,a1,a2); + tmpg=SMPlanarSymmetry(dc,x,y,arg1,arg2); eletype=SPT_MENU; break; case SPT_RECT: - tmpg=SMRect(dc,x,y,a1,a2,color); + tmpg=SMRect(dc,x,y,arg1,arg2,color); break; case SPT_INS_SCRN_BITMAP: case SPT_INS_TRANSPARENT_SCRN_BITMAP: - tmpg=SMScrnBitMap(eletype,dc,dc2,x,y,a1,a2,bm_bkcolor); + tmpg=SMScrnBitMap(eletype,dc,dc2,x,y,arg1,arg2,bm_bkcolor); eletype=SPT_MENU; break; case SPT_CIRCLE: - tmpg=SMCircle(dc,x,y,a1,a2,color); + tmpg=SMCircle(dc,x,y,arg1,arg2,color); break; case SPT_ELLIPSE: - tmpg=SMEllipse(dc,x,y,a1,a2,color); + tmpg=SMEllipse(dc,x,y,arg1,arg2,color); break; case SPT_POLYGON: - tmpg=SMPolygon(dc,x,y,a1,a2,i,color); + tmpg=SMPolygon(dc,x,y,arg1,arg2,i,color); eletype=SPT_MENU; break; case SPT_PT: @@ -1111,18 +1115,18 @@ I64 SpriteMainEd(CDoc *doc) case SPT_FLOOD_FILL_NOT: tmpg=CAlloc(SpriteElemQuedBaseSize(eletype)); tmpg->type=eletype; - tmpg->p.x1=a1-x; - tmpg->p.y1=a2-y; + tmpg->p.x1=arg1-x; + tmpg->p.y1=arg2-y; break; case SPT_POLYLINE: case SPT_BSPLINE2: case SPT_BSPLINE3: case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: - tmpg=SMPolyLineFamily(eletype,dc,x,y,a1,a2,color); + tmpg=SMPolyLineFamily(eletype,dc,x,y,arg1,arg2,color); break; case SPT_POLYPT: - tmpg=SMPolyPoint(dc,x,y,a1,a2,color); + tmpg=SMPolyPoint(dc,x,y,arg1,arg2,color); break; end: if (tmpg) { @@ -1132,8 +1136,8 @@ I64 SpriteMainEd(CDoc *doc) } break; case SPT_BITMAP: - if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor, - TRUE,,,,,&cur_elem_num)==SPE_EXIT) { + if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy, + arg1,arg2,bm_bkcolor,TRUE,,,,,&cur_elem_num)==SPE_EXIT) { res=SPE_EXIT; goto ei_done; } @@ -1141,9 +1145,9 @@ I64 SpriteMainEd(CDoc *doc) eletype=SPT_MENU; break; case SPT_SHIFTABLE_MESH: - GetMsg(NULL,NULL,1<de_flags|=DOCEF_DONT_DRAW; - SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num); + SMShiftableMesh(doc,doc_ce,head,x,y,arg1,arg2,&cur_elem_num); doc_ce->de_flags=old_de_flags; eletype=SPT_MENU; break; diff --git a/Adam/Gr/SpriteMesh.HC b/Adam/Gr/SpriteMesh.HC index 24fe31b..3923fa9 100644 --- a/Adam/Gr/SpriteMesh.HC +++ b/Adam/Gr/SpriteMesh.HC @@ -10,7 +10,7 @@ class CMeshEdVertex CMeshEdVertex *next,*last,*copy; U0 start; - CD3I32 p; //World coordinates of the point. + CD3I32 p; //World coordinates of the point. U0 end; CD3I32 p0, pt; //Transformed coordinates. (Scrn) @@ -34,7 +34,7 @@ class CMeshEdTri class CMeshFrame { - I64 ip_z,thickness; //Input pointer (mouse) Z-coordinate + I64 ms_z,thickness; //Mouse Z-coordinate I64 ed_mode,cx,cy; CColorROPU32 cur_color; Bool grid_on,flip_y,sel_rect,vertex_on,closed,pad[3]; @@ -80,7 +80,7 @@ CMeshEdVertex *MeshVertexFindScrPt(CMeshFrame *e,I64 x,I64 y) while (tmpv!=&e->vertex_head) { if (!(tmpv->flags&VF_IGNORE)) { dd=SqrI64(x-tmpv->pt.x)+SqrI64(y-tmpv->pt.y); - dz=AbsI64(e->ip_z-tmpv->p.z); + dz=AbsI64(e->ms_z-tmpv->p.z); if (ddw2s,&x1,&y1,&z1); x2=0; y2=e->cur_snap<<16; z2=0; Mat4x4MulXYZ(e->w2s,&x2,&y2,&z2); - ip_grid.x=Max(1,MaxI64(x1,x2)>>16); - ip_grid.y=Max(1,MaxI64(y1,y2)>>16); - ip_grid.z=Min(ip_grid.x,ip_grid.y); + ms_grid.x=Max(1,MaxI64(x1,x2)>>16); + ms_grid.y=Max(1,MaxI64(y1,y2)>>16); + ms_grid.z=Min(ms_grid.x,ms_grid.y); } } U0 MeshScaleZoom(CMeshFrame *e,F64 scale) { CTask *task=Fs; - I64 x=ip.pos.x-task->pix_left-task->scroll_x-task->pix_width/2, - y=ip.pos.y-task->pix_top-task->scroll_y-task->pix_height/2; + I64 x=ms.pos.x-task->pix_left-task->scroll_x-task->pix_width/2, + y=ms.pos.y-task->pix_top-task->scroll_y-task->pix_height/2; task->horz_scroll.pos*=scale; task->vert_scroll.pos*=scale; task->horz_scroll.pos+=scale*x-x; @@ -561,9 +561,9 @@ I64 *MeshSetW2S(CMeshFrame *e,CTask *task) U0 MeshCursorW(CMeshFrame *e,CTask *task,I64 *_x,I64 *_y,I64 *_z) { I64 x_shadow,y_shadow,z_shadow, - xc=ip.pos.x-task->pix_left-task->scroll_x-e->cx, - yc=ip.pos.y-task->pix_top-task->scroll_y-e->cy,zc=0, - x=0,y=0,z=e->ip_z, + xc=ms.pos.x-task->pix_left-task->scroll_x-e->cx, + yc=ms.pos.y-task->pix_top-task->scroll_y-e->cy,zc=0, + x=0,y=0,z=e->ms_z, i,x2,y2,z2; Mat4x4MulXYZ(e->w2s,&x,&y,&z); //scrn of Z vect @@ -584,7 +584,7 @@ U0 MeshCursorW(CMeshFrame *e,CTask *task,I64 *_x,I64 *_y,I64 *_z) Mat4x4MulXYZ(e->s2w,&x,&y,&z); x=RoundI64(x,e->cur_snap); y=RoundI64(y,e->cur_snap); - z=RoundI64(e->ip_z,e->cur_snap); + z=RoundI64(e->ms_z,e->cur_snap); *_x=x; *_y=y; *_z=z; } @@ -729,7 +729,7 @@ U0 DrawIt(CTask *task,CDC *dc) //GR_Z_ALL is set to half of the Z-range which is an I32. dc->z=GR_Z_ALL; - //Light source set to input pointer (mouse). + //Light source set to mouse. MeshCursorW(e,task,&x,&y,&z); dc->ls.x=x; dc->ls.y=y; @@ -785,7 +785,7 @@ U0 DrawIt(CTask *task,CDC *dc) tmpv=tmpv->next; } - if (CtrlInside(c,ip.presnap.x,ip.presnap.y)||winmgr.show_menu) { + if (CtrlInside(c,ms.presnap.x,ms.presnap.y)||winmgr.show_menu) { GridInit; task->win_inhibit=WIF_SELF_DOC; } else { @@ -828,7 +828,7 @@ U0 MeshInit(CMeshFrame *e,Bool flip_y) e->ed_mode='v'; e->grid_on=TRUE; e->vertex_on=TRUE; - e->ip_z=0; + e->ms_z=0; e->thickness=25; e->closed=TRUE; e->view_scale=1.0; @@ -971,7 +971,7 @@ See $LK,"::/Demo/Graphics/SpritePlot3D.HC"$. $WW,0$*/ CCtrl *c=CtrlFindUnique(Fs,CTRLT_VIEWING_ANGLES); CViewAngles *s,*old_s; - I64 i,msg_code,sel_mode,a1,a2,make_tri_vertex_num=0,x,y,z; + I64 i,msg_code,sel_mode,arg1,arg2,make_tri_vertex_num=0,x,y,z; CD3I32 p0a,p0b; CMeshEdVertex *va[3],*tmpv; Bool adjusting_z=FALSE,moving,save_and_exit; @@ -1077,33 +1077,34 @@ $WW,0$*/ try {//In case of while (TRUE) { MeshUpdateMenu(&e); - msg_code=GetMsg(&a1,&a2,1<pix_left-Fs->scroll_x, - ip.presnap.y-Fs->pix_top-Fs->scroll_y)); + ms.presnap.x-Fs->pix_left-Fs->scroll_x, + ms.presnap.y-Fs->pix_top-Fs->scroll_y)); MeshVertexSelAll(&e,FALSE); MeshTriSelAll(&e,FALSE); make_tri_vertex_num=0; } break; case SC_INS: - if (a2&SCF_CTRL) + if (arg2&SCF_CTRL) goto me_clipboard_copy; - else if (a2&SCF_SHIFT) + else if (arg2&SCF_SHIFT) goto me_clipboard_paste; } break; @@ -1129,7 +1130,7 @@ me_restart: case 'p': e.thickness=PopUpGetI64("Thickness (%d):",e.thickness); case 'n': - if (a1=='n' || a1=='p') + if (arg1=='n' || arg1=='p') e.closed=TRUE; else e.closed=PopUpNoYes("Closed?\n"); @@ -1143,9 +1144,9 @@ me_chain: case 'M': adjusting_z=FALSE; moving=FALSE; - e.ed_mode=a1; + e.ed_mode=arg1; make_tri_vertex_num=0; - Snd(0); + Snd; break; case 'T': MeshTransformSel(&e); @@ -1166,29 +1167,29 @@ me_chain: case 'a': case 'u': case 'o': - if (a1=='a') + if (arg1=='a') sel_mode=SEL_MESH_EQU; - else if (a1=='u') + else if (arg1=='u') sel_mode=SEL_MESH_AND; else sel_mode=SEL_MESH_OR; - if ((msg_code=GetMsg(&a1,&a2,1<pix_left-Fs->scroll_x, - ip.pos.y-Fs->pix_top-Fs->scroll_y)) { - Noise(25,2000,8000); - e.ip_z=RoundI64(tmpv->p.z,e.cur_snap); + ms.pos.x-Fs->pix_left-Fs->scroll_x, + ms.pos.y-Fs->pix_top-Fs->scroll_y)) { + Noise(25,86,110); + e.ms_z=RoundI64(tmpv->p.z,e.cur_snap); } else { Beep; Beep; - e.ip_z=0; + e.ms_z=0; } MeshVertexIgnoreSet(&e,FALSE); if (moving) { @@ -1319,14 +1320,14 @@ me_clipboard_cut: break; } break; - case MSG_IP_L_DOWN: + case MSG_MS_L_DOWN: switch (e.ed_mode) { case 'm': if (!moving) { if (!MeshSelCnt(&e) && - (tmpv=MeshVertexFindScrPt(&e,a1,a2))) { + (tmpv=MeshVertexFindScrPt(&e,arg1,arg2))) { tmpv->flags|=VF_SEL; - e.ip_z=RoundI64(tmpv->p.z,e.cur_snap); + e.ms_z=RoundI64(tmpv->p.z,e.cur_snap); } if (MeshSelCnt(&e)) { MeshCursorW(&e,Fs,&x,&y,&z); @@ -1341,9 +1342,9 @@ me_clipboard_cut: case 'M': if (!adjusting_z && !moving) { if (!MeshSelCnt(&e) && - (tmpv=MeshVertexFindScrPt(&e,a1,a2))) { + (tmpv=MeshVertexFindScrPt(&e,arg1,arg2))) { tmpv->flags|=VF_SEL; - e.ip_z=RoundI64(tmpv->p.z,e.cur_snap); + e.ms_z=RoundI64(tmpv->p.z,e.cur_snap); } if (MeshSelCnt(&e)) { MeshCursorW(&e,Fs,&x,&y,&z); @@ -1353,23 +1354,23 @@ me_clipboard_cut: MeshP0Capture(&e); moving=TRUE; - p0b.x=ip.presnap.x; - p0b.y=ip.presnap.y; - p0b.z=e.ip_z; + p0b.x=ms.presnap.x; + p0b.y=ms.presnap.y; + p0b.z=e.ms_z; adjusting_z=TRUE; - Snd(ClampI64(3*e.ip_z+1500,0,15000)); + Snd(ClampI64(Freq2Ona(3*e.ms_z+1500),0,MAX_I8)); } } break; } break; - case MSG_IP_L_UP: + case MSG_MS_L_UP: switch (e.ed_mode) { case 'n': case 'f': case 'p': case 'v': - Noise(25,2000,8000); + Noise(25,86,110); MeshCursorW(&e,Fs,&x,&y,&z); e.cur_vertex=MeshVertexNew(&e,x,y,z); break; @@ -1377,10 +1378,10 @@ me_clipboard_cut: case 'M': if (moving) { if (adjusting_z) { - e.ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) - *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + e.ms_z=RoundI64(Sign(p0b.y-ms.presnap.y) + *Sqrt(Sqr(p0b.x-ms.presnap.x)+Sqr(p0b.y-ms.presnap.y)) +p0b.z,e.cur_snap); - Snd(0); + Snd; adjusting_z=FALSE; MeshCursorW(&e,Fs,&x,&y,&z); MeshP0Offset(&e,0,0,z-p0a.z); @@ -1394,14 +1395,14 @@ me_clipboard_cut: } break; case 't': - if (tmpv=MeshVertexFindScrPt(&e,a1,a2)) { + if (tmpv=MeshVertexFindScrPt(&e,arg1,arg2)) { for (i=0;iflags|=VF_SEL; if (make_tri_vertex_num==3) { @@ -1415,7 +1416,7 @@ me_clipboard_cut: break; } break; - case MSG_IP_R_DOWN: + case MSG_MS_R_DOWN: if (!adjusting_z && e.ed_mode!='M' && (e.chain_pred==e.vertex_head.last || e.ed_mode!='n' && e.ed_mode!='f' && e.ed_mode!='p')) { @@ -1427,19 +1428,19 @@ me_clipboard_cut: p0a.z=z; MeshP0Capture(&e); } - p0b.x=ip.presnap.x; - p0b.y=ip.presnap.y; - p0b.z=e.ip_z; + p0b.x=ms.presnap.x; + p0b.y=ms.presnap.y; + p0b.z=e.ms_z; adjusting_z=TRUE; - Snd(ClampI64(3*e.ip_z+1500,0,15000)); + Snd(ClampI64(Freq2Ona(3*e.ms_z+1500),0,MAX_I8)); } break; - case MSG_IP_R_UP: + case MSG_MS_R_UP: if (adjusting_z) { - e.ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) - *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + e.ms_z=RoundI64(Sign(p0b.y-ms.presnap.y) + *Sqrt(Sqr(p0b.x-ms.presnap.x)+Sqr(p0b.y-ms.presnap.y)) +p0b.z,e.cur_snap); - Snd(0); + Snd; adjusting_z=FALSE; if (moving) { MeshCursorW(&e,Fs,&x,&y,&z); @@ -1452,26 +1453,26 @@ me_clipboard_cut: } else if (e.ed_mode=='n') { if (e.chain_pred && e.chain_pred!=e.vertex_head.last) MeshPolygon(&e,e.chain_pred->next,e.vertex_head.last,FALSE); - a1=e.ed_mode; + arg1=e.ed_mode; goto me_chain; } else if (e.ed_mode=='f') { if (e.chain_pred && e.chain_pred!=e.vertex_head.last) MeshFence(&e); - a1=e.ed_mode; + arg1=e.ed_mode; goto me_chain; } else if (e.ed_mode=='p') { if (e.chain_pred && e.chain_pred!=e.vertex_head.last) MeshPrism(&e); - a1=e.ed_mode; + arg1=e.ed_mode; goto me_chain; } break; - case MSG_IP_MOVE: + case MSG_MS_MOVE: if (adjusting_z) { - e.ip_z=RoundI64(Sign(p0b.y-ip.presnap.y) - *Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y)) + e.ms_z=RoundI64(Sign(p0b.y-ms.presnap.y) + *Sqrt(Sqr(p0b.x-ms.presnap.x)+Sqr(p0b.y-ms.presnap.y)) +p0b.z,e.cur_snap); - Snd(ClampI64(3*e.ip_z+1500,0,15000)); + Snd(ClampI64(Freq2Ona(3*e.ms_z+1500),0,MAX_I8)); } if (moving) { MeshCursorW(&e,Fs,&x,&y,&z); diff --git a/Adam/Gr/SpriteNew.HC b/Adam/Gr/SpriteNew.HC index c8f08b0..db32053 100644 --- a/Adam/Gr/SpriteNew.HC +++ b/Adam/Gr/SpriteNew.HC @@ -15,20 +15,20 @@ I64 sprite_elem_base_sizes[SPT_NUM_TYPES]={ sizeof(CSpritePt), //SPT_PT sizeof(CSpriteNumPtU8s), //SPT_POLYPT sizeof(CSpritePtPt), //SPT_LINE - sizeof(CSpriteNumU8s), //SPT_POLYLINE + sizeof(CSpriteNumU8s), //SPT_POLYLINE sizeof(CSpritePtPt), //SPT_RECT - sizeof(CSpritePtPtAng), //SPT_ROTATED_RECT + sizeof(CSpritePtPtAng), //SPT_ROTATED_RECT sizeof(CSpritePtRad), //SPT_CIRCLE - sizeof(CSpritePtWHAng), //SPT_ELLIPSE + sizeof(CSpritePtWHAng), //SPT_ELLIPSE sizeof(CSpritePtWHAngSides), //SPT_POLYGON - sizeof(CSpriteNumU8s), //SPT_BSPLINE2 - sizeof(CSpriteNumU8s), //SPT_BSPLINE2_CLOSED - sizeof(CSpriteNumU8s), //SPT_BSPLINE3 - sizeof(CSpriteNumU8s), //SPT_BSPLINE3_CLOSED + sizeof(CSpriteNumU8s), //SPT_BSPLINE2 + sizeof(CSpriteNumU8s), //SPT_BSPLINE2_CLOSED + sizeof(CSpriteNumU8s), //SPT_BSPLINE3 + sizeof(CSpriteNumU8s), //SPT_BSPLINE3_CLOSED sizeof(CSpritePt), //SPT_FLOOD_FILL sizeof(CSpritePt), //SPT_FLOOD_FILL_NOT - sizeof(CSpritePtWHU8s), //SPT_BITMAP - sizeof(CSpriteMeshU8s), //SPT_MESH + sizeof(CSpritePtWHU8s), //SPT_BITMAP + sizeof(CSpriteMeshU8s), //SPT_MESH sizeof(CSpritePtMeshU8s), //SPT_SHIFTABLE_MESH sizeof(CSpritePtPt), //SPT_ARROW sizeof(CSpritePtStr), //SPT_TEXT diff --git a/Adam/Host.HC b/Adam/Host.HC new file mode 100644 index 0000000..7ecce8e --- /dev/null +++ b/Adam/Host.HC @@ -0,0 +1,70 @@ +#help_index "Misc/Host" + +public Bool HostChgDsk(U8 *iso_filename) +{//Help user change CD/DVD or ISO_file. + Bool res=FALSE; + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + try { + AutoComplete; + WinBorder; + WinMax; + DocClear; + "$$PURPLE$$$$TX+CX,\"Change CD/DVD\"$$$$FG$$\n\n\n\n"; + switch (ins_reg.host_vm) { + case VM_VMWARE: + if (IsDotC(iso_filename)) +" +Click CDROM Icon in bottom-right border of VMware window. + +Click \"Settings\". + +Set ISO image to \"%s\"$FG$. +When browsing, change the file mask from \"*.iso\" to \"All Files\". + +",iso_filename; + else +" +Click CDROM Icon in bottom-right border of VMware window. + +Click \"Settings\". + +Set ISO image to \"$FG,2$%s$FG$\"$FG$. + +",iso_filename; + break; + case VM_QEMU: +" +Change to QEMU monitor using $FG,2$$FG$ + +Get the CDROM designation. + + >$FG,2$info block$FG$ + +Use the designation. + + >$FG,2$eject ide1-cd0$FG$ + +Use the designation. + + >$FG,2$change ide1-cd0 %s$FG$ + +Change back to QEMU using $FG,2$$FG$ + +",iso_filename; + break; + default: +" +Place the CDDVD %s in the drive. + +",iso_filename; + } + if (PressAKey!=CH_SHIFT_ESC) { + ">$FG,2$ChgDsk('T');$FG$\n\n"; + ChgDsk('T'); + res=TRUE; + } + } catch + PutExcept; + SettingsPop; + return res; +} diff --git a/Adam/InFile.HC b/Adam/InFile.HC index f6b1686..796affc 100644 --- a/Adam/InFile.HC +++ b/Adam/InFile.HC @@ -23,13 +23,13 @@ public U0 InGetStr(U8 *st) } } -public U0 InPrint(I64 ms=100,U8 *fmt,...) +public U0 InPrint(I64 mS=100,U8 *fmt,...) {//Print message with delay after each char. U8 *buf=StrPrintJoin(NULL,fmt,argc,argv),*st=buf; I64 ch; while (ch=*st++) { '' ch; - Sleep(ms); + Sleep(mS); } Free(buf); } @@ -112,29 +112,29 @@ public Bool InView() return res; } -#help_index "InFile;Help System/Training;Input Pointer" +#help_index "InFile;Help System/Training;Mouse" I64 in_plot_l,in_plot_r; -Bool InSetIPPlot(I64 ms,I64 x,I64 y,I64 z) +Bool InSetMsPlot(I64 mS,I64 x,I64 y,I64 z) { - IPSet(x,y,z,in_plot_l,in_plot_r); - Sleep(ms); + MsSet(x,y,z,in_plot_l,in_plot_r); + Sleep(mS); return TRUE; } -public U0 InSetIP(I64 ms=7,I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64, +public U0 InSetMs(I64 mS=7,I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64, I64 l=MAX_I64,I64 r=MAX_I64) -{//Move input pointer (mouse) to spot at certain speed. +{//Move mouse to spot at certain speed. if (!(0<=xfilename.name; + if (drv_let) + *sys_registry_doc->filename.name=drv_let; + RegWrite("Adam/InsReg", + "#help_index \"Misc/Install Registration\"\n" + "MemSet(&ins_reg,0,sizeof(CInsReg));\n" + "ins_reg.registered=%d;\n" + "ins_reg.host_os=%d;\n" + "ins_reg.host_vm=%d;\n" + "\n#define INS_REG_PERSONAL_INITIALS \"%s\"\n" + "StrCpy(ins_reg.initials,\"%s\");\n" + "HashPublic(\"INS_REG_PERSONAL_INITIALS\",HTT_DEFINE_STR);\n" + "\n#define INS_REG_MACHINE_NUM %d\n" + "ins_reg.machine_num=%d;\n" + "HashPublic(\"INS_REG_MACHINE_NUM\",HTT_DEFINE_STR);\n" + "\n\"InsReg:%%s:%%d\\n\"," + "INS_REG_PERSONAL_INITIALS,INS_REG_MACHINE_NUM;\n" + "\n#help_index \"\"\n" + ,r.registered,r.host_os,r.host_vm, + r.initials,r.initials,r.machine_num,r.machine_num); + *sys_registry_doc->filename.name=old_drv_let; + RegExe("Adam/InsReg"); + } + return res; +} + +public Bool InsRereg(U8 drv_let=0) +{//Reregister this install in local $LK,"Registry.HC",A="FI:~/Registry.HC"$ file. + return InsReg(drv_let,RR_REREGISTER); +} + +public Bool InsUnreg(U8 drv_let=0) +{//Unregister this install in local $LK,"Registry.HC",A="FI:~/Registry.HC"$ file. + return InsReg(drv_let,RR_UNREGISTER); +} diff --git a/Adam/MakeAdam.HC b/Adam/MakeAdam.HC index e13854a..8b5c2f7 100644 --- a/Adam/MakeAdam.HC +++ b/Adam/MakeAdam.HC @@ -18,6 +18,7 @@ LBts(&sys_run_level,RLf_DOC); #include "Ctrls/MakeCtrls" #include "InFile" #include "ARegistry" +#include "InsReg" #include "AutoComplete/MakeAC" #include "God/MakeGod" #include "AHash" @@ -26,5 +27,6 @@ LBts(&sys_run_level,RLf_DOC); #include "DevInfo" #include "ADefine" #include "WallPaper" -#include "AInputPointer" +#include "AMouse" +#include "Host" Cd("..");; diff --git a/Adam/Menu.HC b/Adam/Menu.HC index 5b7965b..e7cae3a 100644 --- a/Adam/Menu.HC +++ b/Adam/Menu.HC @@ -56,11 +56,11 @@ CMenuEntry *MenuNewSub(CCmpCtrl *cc,CTask *task) if (cc->token==',') Lex(cc); if (cc->token!=',' && cc->token!=')') - tmpme->a1=LexExpressionI64(cc); + tmpme->arg1=LexExpressionI64(cc); if (cc->token==',') Lex(cc); if (cc->token!=',' && cc->token!=')') - tmpme->a2=LexExpressionI64(cc); + tmpme->arg2=LexExpressionI64(cc); if (cc->token!=')') LexExcept(cc,"Missing ')' at "); if (Lex(cc)!=';') @@ -177,7 +177,7 @@ U0 DrawMenu(CDC *dc) CMenuEntry *tmpme,*tmpse,*cur_submenu=NULL; U8 *st=NULL; CTask *task=MenuTask; - I64 i,w,x0,y0,x1=ip.pos.x,y1=ip.pos.y; + I64 i,w,x0,y0,x1=ms.pos.x,y1=ms.pos.y; if (!TaskValidate(task) || !(m=task->cur_menu)) { sys_cur_submenu_entry=NULL; return; @@ -206,9 +206,9 @@ U0 DrawMenu(CDC *dc) if (y0<=y1msg_code==MSG_KEY_DOWN|| tmpse->msg_code==MSG_KEY_DOWN_UP) { - if (!tmpse->a2) - tmpse->a2=Char2ScanCode(tmpse->a1); - st=ScanCode2KeyName(tmpse->a2); + if (!tmpse->arg2) + tmpse->arg2=Char2ScanCode(tmpse->arg1); + st=ScanCode2KeyName(tmpse->arg2); } sys_cur_submenu_entry=cur_submenu=tmpse; dc->color=i&15; diff --git a/Adam/Opt/Boot/BootDVD.HC b/Adam/Opt/Boot/BootDVD.HC index 53b2f01..8b2674b 100644 --- a/Adam/Opt/Boot/BootDVD.HC +++ b/Adam/Opt/Boot/BootDVD.HC @@ -19,10 +19,10 @@ BDVD_START:: MOV SP,BOOT_STK_SIZE+DVD_BOOT_LOADER_SIZE STI - CALL BDVD_GET_IP -BDVD_GET_IP: + CALL BDVD_GET_RIP +BDVD_GET_RIP: POP BX - SUB BX,BDVD_GET_IP-BDVD_START + SUB BX,BDVD_GET_RIP-BDVD_START SHR BX,4 //This copies this bootloader's code to 0x$TX,"00096600",D="DD_BOOT_HIGH_LOC_DVD"$ MOV AX,CS diff --git a/Adam/Opt/Boot/BootHD.HC b/Adam/Opt/Boot/BootHD.HC index bdf3575..e9ce683 100644 --- a/Adam/Opt/Boot/BootHD.HC +++ b/Adam/Opt/Boot/BootHD.HC @@ -21,10 +21,10 @@ BHD_CODE:: MOV SP,BOOT_STK_SIZE+MODULE_SIZE STI - CALL BHD_GET_IP -BHD_GET_IP: + CALL BHD_GET_RIP +BHD_GET_RIP: POP BX - SUB BX,BHD_GET_IP-BHD_START + SUB BX,BHD_GET_RIP-BHD_START SHR BX,4 //This copies this bootloader's code to 0x$TX,"00096C00",D="DD_BOOT_HIGH_LOC_HD"$ MOV AX,CS diff --git a/Adam/Opt/Boot/BootMHD.HC b/Adam/Opt/Boot/BootMHD.HC index 7bc6ba3..8e1c4e9 100644 --- a/Adam/Opt/Boot/BootMHD.HC +++ b/Adam/Opt/Boot/BootMHD.HC @@ -30,10 +30,10 @@ BMHD_CODE:: MOV ES,AX - CALL BMHD_GET_IP -BMHD_GET_IP: + CALL BMHD_GET_RIP +BMHD_GET_RIP: POP BX - SUB BX,BMHD_GET_IP-BMHD_START + SUB BX,BMHD_GET_RIP-BMHD_START MOV CX,BX SHR BX,4 //This copies this bootloader's code to 0x$TX,"00096C00",D="DD_BOOT_HIGH_LOC_MHD"$ @@ -41,8 +41,8 @@ BMHD_GET_IP: PUSH AX ADD AX,BX MOV DS,AX - MOV U16 [BMHD_OLD_CS_IP-BMHD_START],CX - POP U16 [BMHD_OLD_CS_IP+2-BMHD_START] + MOV U16 [BMHD_OLD_CS_RIP-BMHD_START],CX + POP U16 [BMHD_OLD_CS_RIP+2-BMHD_START] MOV CX,MODULE_SIZE XOR SI,SI @@ -57,7 +57,7 @@ BMHD_GET_IP: DU16 BMHD_HISTART-BMHD_START,BOOT_HIGH_LOC_MHD; BMHD_BIOS_DRV_NUM: DU8 0; -BMHD_OLD_CS_IP: DU16 0,0; +BMHD_OLD_CS_RIP: DU16 0,0; //Gets patched by $LK,"BootHDIns",A="MN:BootHDIns"$(). BMHD_BLK_CNT:: DU16 0; @@ -97,7 +97,7 @@ BMHD_HISTART: LOOP @@05 MOV DL,U8 [BMHD_BIOS_DRV_NUM-BMHD_START] - MOV EBX,U32 [BMHD_OLD_CS_IP-BMHD_START] + MOV EBX,U32 [BMHD_OLD_CS_RIP-BMHD_START] //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP BOOT_RAM_BASE:0000 DU16 0,BOOT_RAM_BASE/16; diff --git a/Adam/Opt/Boot/BootMHD2.HC b/Adam/Opt/Boot/BootMHD2.HC index 8993bd0..4379cbf 100644 --- a/Adam/Opt/Boot/BootMHD2.HC +++ b/Adam/Opt/Boot/BootMHD2.HC @@ -15,7 +15,7 @@ BMHD2_START:: //This copies this bootloader's code to 0x$TX,"00096A00",D="DD_BOOT_HIGH_LOC_MHD2"$ MOV AX,CS MOV DS,AX - MOV U32 [BMHD2_OLD_CS_IP-BMHD2_START],EBX + MOV U32 [BMHD2_OLD_CS_RIP-BMHD2_START],EBX MOV U8 [BMHD2_BIOS_DRV_NUM-BMHD2_START],DL MOV CX,MODULE_SIZE @@ -93,9 +93,9 @@ BMHD2_HISTART: @@10: MOV U32 [BMHD2_DAP_BLK_LO-BMHD2_START],EBX MOV U32 [BMHD2_DAP_BLK_HI-BMHD2_START],EAX - MOV AX,U16 [BMHD2_OLD_CS_IP-BMHD2_START] + MOV AX,U16 [BMHD2_OLD_CS_RIP-BMHD2_START] SHR AX,4 - ADD AX,U16 [BMHD2_OLD_CS_IP+2-BMHD2_START] + ADD AX,U16 [BMHD2_OLD_CS_RIP+2-BMHD2_START] MOV U16 [BMHD2_DAP_BUF+2-BMHD2_START],AX //ES:0000 MOV SI,BMHD2_DAP-BMHD2_START //DS:SI=DAP MOV DL,U8 [BMHD2_BIOS_DRV_NUM-BMHD2_START] @@ -115,7 +115,7 @@ BMHD2_HISTART: //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP xxxx:yyyy -BMHD2_OLD_CS_IP: +BMHD2_OLD_CS_RIP: DU16 0,0; BMHD2_END:: //Continues here $LK,"::/Adam/Opt/Boot/BootHD.HC",A="FF:::/Adam/Opt/Boot/BootHD.HC,START"$ diff --git a/Adam/Opt/Boot/BootRAM.HC b/Adam/Opt/Boot/BootRAM.HC index b77dfdc..dcb6378 100644 --- a/Adam/Opt/Boot/BootRAM.HC +++ b/Adam/Opt/Boot/BootRAM.HC @@ -30,12 +30,13 @@ _extern _HI_CALL I64 HiCall(U8 *machine_code); _extern _HI_MEMCPY U8 *HiMemCpy(U8 *dst,U8 *src,I64 cnt); #help_index "Boot" -public U0 BootRAM(U8 *filename) -{//Softboot Kernel Bin file. No hardware reset. +public U0 BootRAM(U8 *filename=NULL) +{//Softboot Kernel.BIN file. No hardware reset. I64 size; - CKernel *hi_image,*lo_image=sys_boot_base-sizeof(CBinFile), + CKernel *hi_image,*lo_image=mem_boot_base-sizeof(CBinFile), reg *sys_ram_reboot; - + if (!filename) + filename="::/Kernel/" KERNEL_BIN_C; do if (!(hi_image=FileRead(filename,&size))) return; while (hi_image<0x100000); //If alloc from low 640K, just get another copy. diff --git a/Adam/Opt/Boot/DskISORedSea.HC b/Adam/Opt/Boot/DskISORedSea.HC index 2509eb0..ee71375 100644 --- a/Adam/Opt/Boot/DskISORedSea.HC +++ b/Adam/Opt/Boot/DskISORedSea.HC @@ -25,7 +25,27 @@ class CElTorito U8 zero2[20]; }; -U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let,I64 stage2_blk=0,I64 stage2_size=0) +U0 RedSeaISO9660Stage1(U8 *iso_filename,U8 *stage2_filename) +{ + CDirEntry de; + CFile *out_file=NULL; + U8 *stage1_buf=CAlloc(DVD_BOOT_LOADER_SIZE); + if (FileFind(stage2_filename,&de) && (out_file=FOpen(iso_filename,"wc+"))) { + MemCpy(stage1_buf,BDVD_START,BDVD_END-BDVD_START); + *(BDVD_BLK_LO -BDVD_START+stage1_buf)(U32 *)=de.cluster>>2; + *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)= + (de.size+DVD_BLK_SIZE-1)>>(BLK_SIZE_BITS+2); + *(BDVD_SHIFT_BLKS -BDVD_START+stage1_buf)(U16 *)=de.cluster&3; + if (de.cluster&3) + *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)+=1; + FWBlks(out_file,stage1_buf, + 20<<2+1<<2,DVD_BOOT_LOADER_SIZE/BLK_SIZE); + FClose(out_file); + } + Free(stage1_buf); +} + +U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let) { CDrv *dv=Let2Drv(drv_let); CISO1PriDesc *iso_pri=CAlloc(DVD_BLK_SIZE), @@ -35,8 +55,7 @@ U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let,I64 stage2_blk=0,I64 stage2_size=0) I64 iso_size=0,i,j; U32 *d; CElTorito *et=CAlloc(DVD_BLK_SIZE); - U8 *stage1_buf=CAlloc(DVD_BOOT_LOADER_SIZE), - *zero_buf=CAlloc(DVD_BLK_SIZE); + U8 *zero_buf=CAlloc(DVD_BLK_SIZE); CFile *out_file=NULL; if (out_file=FOpen(iso_filename,"wc+")) { @@ -87,20 +106,9 @@ U0 RedSeaISO9660(U8 *iso_filename,U8 drv_let,I64 stage2_blk=0,I64 stage2_size=0) et->sect_cnt=4; //5 seems like the limit, 4 is safer et->load_rba=20<<2>>2+1; FWBlks(out_file,et,20<<2,4); - - MemCpy(stage1_buf,BDVD_START,BDVD_END-BDVD_START); - *(BDVD_BLK_LO -BDVD_START+stage1_buf)(U32 *)=stage2_blk>>2; - *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)= - (stage2_size+DVD_BLK_SIZE-1)>>(BLK_SIZE_BITS+2); - *(BDVD_SHIFT_BLKS -BDVD_START+stage1_buf)(U16 *)=stage2_blk&3; - if (stage2_blk&3) - *(BDVD_BLK_CNT -BDVD_START+stage1_buf)(U16 *)+=1; - FWBlks(out_file,stage1_buf, - 20<<2+1<<2,DVD_BOOT_LOADER_SIZE/BLK_SIZE); FClose(out_file); } Free(zero_buf); - Free(stage1_buf); Free(et); Free(iso_pri); Free(iso_boot); @@ -129,7 +137,7 @@ public I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir, U8 *_stage2_filename=NULL) {//See $LK,"::/Misc/DoDistro.HC"$. Must be ISO.C I64 i,res,root_cnt,root_dir_blks,bitmap_blks,bitmap_blks1; - CDirEntry *tmpde,de; + CDirEntry *tmpde; U8 buf[STR_LEN],*iso_filename,*src_dir,*stage2_filename; CDrv *dv=DrvMakeFreeSlot(DrvNextFreeLet('Q')); //First $LK,"BDT_ISO_FILE_WRITE",A="MN:BDT_ISO_FILE_WRITE"$ CBlkDev *bd=BlkDevNextFreeSlot(dv->drv_let,BDT_ISO_FILE_WRITE); @@ -162,13 +170,10 @@ public I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir, bd->max_blk--; //Inclusive. bd->file_dsk_name=AStrNew(iso_filename); bd->init_root_dir_blks=root_dir_blks; - BlkDevAdd(bd,TRUE,TRUE); + BlkDevAdd(bd,,TRUE,TRUE); StrPrint(buf,"%C:/",dv->drv_let); CopyTree(src_dir,buf,TRUE); - if (FileFind(stage2_filename,&de)) - RedSeaISO9660(iso_filename,dv->drv_let,de.cluster,de.size); - else - RedSeaISO9660(iso_filename,dv->drv_let); + RedSeaISO9660Stage1(iso_filename,stage2_filename); DrvDel(dv); BlkDevDel(bd); } diff --git a/Adam/DolDoc/DocOpt.HC b/Adam/Opt/Utils/DocUtils.HC similarity index 65% rename from Adam/DolDoc/DocOpt.HC rename to Adam/Opt/Utils/DocUtils.HC index ed10a35..26ad00b 100644 --- a/Adam/DolDoc/DocOpt.HC +++ b/Adam/Opt/Utils/DocUtils.HC @@ -1,4 +1,45 @@ -#help_index "DolDoc" +#help_index "DolDoc/Cmd Line (Typically)" + +U0 CursorRemFile(U8 *filename) +{//Rem ASCII 5 cursor from one file. + CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); + DocWrite(doc); + DocDel(doc); +} +public U0 CursorRem(U8 *files_find_mask="*") +{//Rem ASCII 5 cursor. + I64 fuf_flags=0; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O"); + CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; + while (tmpde) { + CursorRemFile(tmpde->full_name); + Touch(tmpde->full_name,"",,tmpde->datetime); + tmpde=tmpde->next; + } + DirTreeDel(tmpde1); +} + +U0 CollapseFile(U8 *filename,Bool collapse=TRUE) +{//Collapse $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ trees in one file. + CDoc *doc=DocRead(filename,DOCF_NO_CURSOR); + DocCollapse(collapse,doc); + DocWrite(doc); + DocDel(doc); +} +public U0 Collapse(U8 *files_find_mask="*", + Bool collapse=TRUE,U8 *fu_flags=NULL) +{//Collapse $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ trees. + I64 fuf_flags=0; + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+$$+O"); + ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); + CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; + while (tmpde && !Bt(&fuf_flags,FUf_CANCEL)) { + CollapseFile(tmpde->full_name,collapse); + Touch(tmpde->full_name,"",,tmpde->datetime); + tmpde=tmpde->next; + } + DirTreeDel(tmpde1); +} I64 DocOptEntry(CDoc *,CDocEntry *doc_e,I64 fuf_flags) { @@ -48,7 +89,6 @@ I64 DocOptEntry(CDoc *,CDocEntry *doc_e,I64 fuf_flags) } return res; } - I64 DocOptDoc(CDoc *doc,I64 fuf_flags) {//Optimize Doc. Bool unlock=DocLock(doc); @@ -76,9 +116,8 @@ I64 DocOptDoc(CDoc *doc,I64 fuf_flags) DocUnlock(doc); return res; } - I64 DocOptFile(U8 *filename,I64 fuf_flags) -{//Optimize File. +{//Optimize file. I64 res; CDoc *doc=DocRead(filename); if (res=DocOptDoc(doc,fuf_flags)) { @@ -107,7 +146,7 @@ I64 DocOptLst(CDirEntry *tmpde,I64 fuf_flags) return res; } public I64 DocOpt(U8 *files_find_mask="*",U8 *fu_flags=NULL) -{//Optimize $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ Files, eliminating aux_str's and .Z's. +{//Optimize $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ files, eliminating aux_str's and .Z's. //+R flag for aggressively risky. I64 fuf_flags=0; ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+$$"); diff --git a/Adam/Opt/Utils/HeapLog.HC b/Adam/Opt/Utils/HeapLog.HC index e809bef..16b2d3b 100644 --- a/Adam/Opt/Utils/HeapLog.HC +++ b/Adam/Opt/Utils/HeapLog.HC @@ -35,10 +35,10 @@ U0 HeapLogMAlloc(U8 *addr) i=addr>>3 &(HL_HASH_SIZE-1); PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) + while (LBts(&sys_semas[SEMA_HEAPLOG_LOCK],0)) PAUSE QueIns(tmphl,heaplog_head[i].last); - LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); + LBtr(&sys_semas[SEMA_HEAPLOG_LOCK],0); POPFD } } @@ -52,20 +52,20 @@ U0 HeapLogFree(U8 *addr) i=addr>>3 &(HL_HASH_SIZE-1); PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) + while (LBts(&sys_semas[SEMA_HEAPLOG_LOCK],0)) PAUSE tmphl=heaplog_head[i].next; while (tmphl!=&heaplog_head[i]) { if (addr==tmphl->addr) { QueRem(tmphl); - LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); + LBtr(&sys_semas[SEMA_HEAPLOG_LOCK],0); POPFD Free(tmphl); return; } tmphl=tmphl->next; } - LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); + LBtr(&sys_semas[SEMA_HEAPLOG_LOCK],0); POPFD } } @@ -74,7 +74,7 @@ public Bool HeapLog(Bool val=ON,CTask *task=NULL) {//Turn on. Collect data. Call $LK,"HeapLogAddrRep",A="MN:HeapLogAddrRep"$() or $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$(). I64 i; if (val) { - if (Bt(&sys_semas[SYS_SEMA_HEAPLOG_ACTIVE],0)) { + if (Bt(&sys_semas[SEMA_HEAPLOG_ACTIVE],0)) { "HeapLog Already Active\n"; return TRUE; } else { @@ -85,7 +85,7 @@ public Bool HeapLog(Bool val=ON,CTask *task=NULL) heaplog_hc_watched=task;//Actually, not a task, must be a HeapCtrl. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) + while (LBts(&sys_semas[SEMA_HEAPLOG_LOCK],0)) PAUSE heaplog_hc=HeapCtrlInit(,,sys_data_bp); ext[EXT_HEAPLOG_MALLOC]=&HeapLogMAlloc; @@ -93,13 +93,13 @@ public Bool HeapLog(Bool val=ON,CTask *task=NULL) heaplog_head=MAlloc(sizeof(CHeapLogHash)*HL_HASH_SIZE,heaplog_hc); for (i=0;isrv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE tmpc1=&task->srv_ctrl.next_waiting; @@ -56,7 +56,7 @@ I64 TaskQueSize(CTask *task) tmpc=tmpc->next; } - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); POPFD return res; } @@ -101,7 +101,7 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) if (task==Fs) task->rsp=GetRSP; st=MStrUtil(task->task_title,SUF_REM_CTRL_CHARS|SUF_SAFE_DOLLAR); - "$$BLACK$$%-25ts %010X$$FG$$\n$$ID,2$$",st,task; + "$$BLACK$$%-27ts#%08X$$FG$$\n$$ID,2$$",st,task; Free(st); "Heap\t:%010X/%010X\n",TaskMemUsed(task,override_validate), TaskMemAlloced(task,override_validate); @@ -114,6 +114,8 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) "Stk\t\t:$$RED$$$$BK,1$$Overflow$$BK,0$$$$FG$$/%010X\n",j; "HashTable\t:%010X\n",HashTableSize2(task->hash_table); + "FPU\t\t:%010X\n",MSize2(task->fpu_mmx); + "CurDir\t:%010X\n",MSize2(task->cur_dir); if (pdoc=DocPut(task)) "PutDoc\t:%010X\n",DocSize(pdoc); @@ -124,7 +126,7 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) cc=task->next_cc; while (cc!=&task->next_cc) { - "Lex\t\t:%010X\n",CmpCtrlSize(cc); + "CmpCtrl\t:%010X\n",CmpCtrlSize(cc); cc=cc->next; } @@ -136,7 +138,7 @@ Bool MemRepTask(CTask *task,Bool override_validate=FALSE) if (task==sys_winmgr_task) { "gr.pen_brushes\t:%010X\n",PenBrushesSize; - "gr_scrn_zoom_tbles:%010X\n",ScrnZoomTablesSize; + "gr.scrn_zoom_tbles\t:%010X\n",ScrnZoomTablesSize; } else if (task==adam_task) { j=0;k=0;m=0;n=0; for (i=0;ifile_size-1; "$$BLACK$$Low Memory\t:0000100000$$FG$$\n$$ID,2$$"; - "Kernel\t:%010X-%010X\n",sys_boot_base-sizeof(CBinFile),bfh; + "Kernel\t:%010X-%010X\n",mem_boot_base-sizeof(CBinFile),bfh; "VGA\t\t:00000A0000-00000BFFFF\n"; "$$ID,-2$$$$BLACK$$High Memory\t:0000100000-%010X$$FG$$\n", - sys_heap_limit; - "$$ID,2$$Fixed Area for page tables and misc\n\t\t:%010X-%010X\n", + mem_heap_limit; + "$LK,"SYS_FIXED_AREA",A="MN:CSysFixedArea"$\t:%010X-%010X\n", SYS_FIXED_AREA,SYS_FIXED_AREA+sizeof(CSysFixedArea)-1; - "$$ID,-2$$"; if (sys_data_bp) { "$$BLACK$$Code Heap\t:%010X/%010X$$FG$$\n", diff --git a/Adam/Opt/Utils/Profiler.HC b/Adam/Opt/Utils/Profiler.HC index 6617a33..8ce193f 100644 --- a/Adam/Opt/Utils/Profiler.HC +++ b/Adam/Opt/Utils/Profiler.HC @@ -56,7 +56,7 @@ I64 ProfCompare(U8 *i1,U8 *i2) public U0 ProfRep(I64 filter_cnt=1,Bool leave_it=OFF) {//Profiler report. Call $LK,"Prof",A="MN:Prof"$() first and collect data. - I64 i,hits,ip,last_ip=0,routine_total=0; + I64 i,hits,rip,last_rip=0,routine_total=0; F64 total_time; U8 buf[256],buf2[256],last_buf[256]; if (!LBtr(&pf_prof_active,0)) @@ -69,12 +69,12 @@ public U0 ProfRep(I64 filter_cnt=1,Bool leave_it=OFF) QSortI64(pf_array,pf_buf_in_ptr,&ProfCompare); *last_buf=0; for (i=0;i=filter_cnt) @@ -85,8 +85,8 @@ public U0 ProfRep(I64 filter_cnt=1,Bool leave_it=OFF) } routine_total+=hits; if (hits>=filter_cnt) { - "%6.2f %08X:%P\n",100*hits/total_time,hits,ip; - last_ip=ip; + "%6.2f %08X:%P\n",100*hits/total_time,hits,rip; + last_rip=rip; } } if (*last_buf && routine_total>=filter_cnt) diff --git a/Adam/Opt/Utils/StrUtils.HC b/Adam/Opt/Utils/StrUtils.HC index aae2100..41a6737 100644 --- a/Adam/Opt/Utils/StrUtils.HC +++ b/Adam/Opt/Utils/StrUtils.HC @@ -69,7 +69,7 @@ public I64 Sort(U8 *_in_name,U8 *_out_name=NULL, return res; //Num Entries } -I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) +I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *char_bmp) { U8 *ptr,*ptr2; I64 res=0,ch; @@ -79,11 +79,11 @@ I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) if (doc_e->de_flags & DOCEF_TAG) { ptr=doc_e->tag; while (*ptr) { - while (*ptr && !Bt(chars_bmp,*ptr)) + while (*ptr && !Bt(char_bmp,*ptr)) ptr++; ptr2=ptr; - while (*ptr && Bt(chars_bmp,*ptr)) + while (*ptr && Bt(char_bmp,*ptr)) ptr++; ch=*ptr; @@ -100,7 +100,7 @@ I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) DocDel(doc_in); return res; } -public I64 Words(U8 *files_find_mask="*",U32 *chars_bmp=chars_bmp_alpha, +public I64 Words(U8 *files_find_mask="*",U32 *char_bmp=char_bmp_alpha, U8 *fu_flags=NULL) {//Break file into list of not-unique words. I64 fuf_flags=0,res=0; @@ -110,7 +110,7 @@ public I64 Words(U8 *files_find_mask="*",U32 *chars_bmp=chars_bmp_alpha, ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); tmpde=tmpde1=FilesFind(files_find_mask,fuf_flags); while (tmpde) { - res+=DocWordsFile(doc_out,tmpde->full_name,chars_bmp); + res+=DocWordsFile(doc_out,tmpde->full_name,char_bmp); tmpde=tmpde->next; } DirTreeDel(tmpde1); diff --git a/Adam/Opt/Utils/TOS.HC b/Adam/Opt/Utils/TOS.HC new file mode 100644 index 0000000..644e708 --- /dev/null +++ b/Adam/Opt/Utils/TOS.HC @@ -0,0 +1,47 @@ +#help_index "Misc/TOS" + +public U0 TOSStaffIns() +{//Completes TOS install from TempleOSStaff.ISO + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + AutoComplete; + WinBorder; + WinMax; + DocClear; + "$$PURPLE$$$$TX+CX,\"Complete TOS install from TempleOSStaff.ISO\"$$$$FG$$\n\n\n\n"; + InsRereg; + if (HostChgDsk("/home/tad/TAD/Site1/Wb/TempleOSSup1.ISO.C")) + CopyTree("T:/","~/Sup1"); + if (HostChgDsk("/home/tad/TAD/Site1Stale/files/TempleOSBooks1.ISO.C")) + CopyTree("T:/","~/Books1"); + if (HostChgDsk("/home/tad/TAD/Site1Stale/files/TempleOSBooks2.ISO.C")) + CopyTree("T:/","~/Books2"); + SettingsPop; + Once("TOSBootHDIns;\"\n\nRun TOSRegen;\n\n\n\";"); + if (PressAKey!=CH_SHIFT_ESC) + Reboot; +} + +public U0 TOSStdIns() +{//Completes TOS install from TempleOSCD.ISO + SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ + AutoComplete; + WinBorder; + WinMax; + DocClear; + "$$PURPLE$$$$TX+CX,\"Complete TOS install from TempleOSCD.ISO\"$$$$FG$$\n\n\n\n"; + InsRereg; + if (FileFind("/Demo/AcctExample")) + Copy("::/Demo/AcctExample/*","~"); + if (HostChgDsk("/home/tad/Downloads/TempleOSSup1.ISO.C")) + CopyTree("T:/","~/Sup1"); + if (HostChgDsk("/home/tad/Downloads/TempleOSWeb.ISO.C")) + CopyTree("T:/","~/Web"); + if (HostChgDsk("/home/tad/Downloads/TempleOSBooks1.ISO.C")) + CopyTree("T:/","~/Books1"); + if (HostChgDsk("/home/tad/Downloads/TempleOSBooks2.ISO.C")) + CopyTree("T:/","~/Books2"); + SettingsPop; + Once("TOSBootHDIns;\"\n\nRun TOSRegen;\n\n\n\";"); + if (PressAKey!=CH_SHIFT_ESC) + Reboot; +} diff --git a/Adam/Snd/MakeSnd.HC b/Adam/Snd/MakeSnd.HC index 343a9aa..45ac0a8 100644 --- a/Adam/Snd/MakeSnd.HC +++ b/Adam/Snd/MakeSnd.HC @@ -10,7 +10,7 @@ class CSndWaveCtrl public U0 SndTaskEndCB() {//Will turn-off snd when a task gets killed. - Snd(0); + Snd; Exit; } diff --git a/Adam/Snd/SndEffects.HC b/Adam/Snd/SndEffects.HC index dd27a02..c925a69 100644 --- a/Adam/Snd/SndEffects.HC +++ b/Adam/Snd/SndEffects.HC @@ -5,8 +5,9 @@ class CSoundEffectFrame { - I32 type; - F64 duration,freq1,freq2; + I32 type; + I8 ona1,ona2; + F64 duration; }; U0 SoundEffectEndTaskCB() @@ -18,57 +19,60 @@ U0 SoundEffectEndTaskCB() U0 SoundEffectTask(CSoundEffectFrame *ns) { - I64 i; - F64 f,t0=tS,t,timeout=t0+ns->duration; + I64 i,ona; + F64 t0=tS,t,timeout=t0+ns->duration; FramePtrAdd("CSoundEffectFrame",ns); Fs->task_end_cb=&SoundEffectEndTaskCB; switch (ns->type) { case SE_NOISE: - i=MaxI64(ns->freq2-ns->freq1,1); - while (tSfreq1) { - Snd(f); - Sleep(ClampI64(3000/f,1,50)); - } else - break; + i=MaxI64(ns->ona2-ns->ona1,1); + while (tSona1; + Snd(ona); + t=Clamp(3000.0/Ona2Freq(ona),1.0,50.0); + if (t+tS>timeout) + t=timeout-tS; + Sleep(t); + } break; case SE_SWEEP: while (tSduration; - if (f=(1.0-t)*ns->freq1+t*ns->freq2) { - Snd(f); - Sleep(ClampI64(3000/f,1,50)); - } else - break; + ona=(1.0-t)*ns->ona1+t*ns->ona2; + Snd(ona); + t=Clamp(3000.0/Ona2Freq(ona),1.0,50.0); + if (t+tS>timeout) + t=timeout-tS; + Sleep(t); } break; } } -public CTask *Noise(I64 ms,F64 min_freq,F64 max_freq) -{//Make white noise for given number of ms. +public CTask *Noise(I64 mS,F64 min_ona,F64 max_ona) +{//Make white noise for given number of mS. CSoundEffectFrame *ns; - if (ms>0) { + if (mS>0) { ns=MAlloc(sizeof(CSoundEffectFrame)); ns->type=SE_NOISE; - ns->duration=ms/1000.0; - ns->freq1=min_freq; - ns->freq2=max_freq; + ns->duration=mS/1000.0; + ns->ona1=min_ona; + ns->ona2=max_ona; music.mute++; return Spawn(&SoundEffectTask,ns,"Noise",,Fs); } else return NULL; } -public CTask *Sweep(I64 ms,F64 freq1,F64 freq2) -{//Sweep through freq range in given number of ms. +public CTask *Sweep(I64 mS,F64 ona1,F64 ona2) +{//Sweep through freq range in given number of mS. CSoundEffectFrame *ns; - if (ms>0) { + if (mS>0) { ns=MAlloc(sizeof(CSoundEffectFrame)); ns->type=SE_SWEEP; - ns->duration=ms/1000.0; - ns->freq1=freq1; - ns->freq2=freq2; + ns->duration=mS/1000.0; + ns->ona1=ona1; + ns->ona2=ona2; music.mute++; return Spawn(&SoundEffectTask,ns,"Noise",,Fs); } else diff --git a/Adam/Snd/SndFile.HC b/Adam/Snd/SndFile.HC index 92d1c22..287e61d 100644 --- a/Adam/Snd/SndFile.HC +++ b/Adam/Snd/SndFile.HC @@ -67,7 +67,8 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0, d1=d->next; dt=d1->time-d->time; cnt2=dt*SNDFILE_SAMPLE_RATE; - SndWaveAddBuf(swc,&s->body[k],cnt2,d->freq,waveform,normalized_vol); + SndWaveAddBuf(swc,&s->body[k],cnt2, + Ona2Freq(d->ona),waveform,normalized_vol); k+=cnt2; QueRem(d); Free(d); diff --git a/Adam/Snd/SndMath.HC b/Adam/Snd/SndMath.HC index 76375da..1051068 100644 --- a/Adam/Snd/SndMath.HC +++ b/Adam/Snd/SndMath.HC @@ -77,9 +77,27 @@ public F64 FullTri(F64 t,F64 period) } #help_index "Snd/Math" -public F64 Note2Freq(I64 note,I64 octave=3) -{//Note number in octave to freq. - return 440.0*2.0`(octave-3+note/12.0); + +public I8 Note2Ona(I64 note,I64 octave=4) +{//Note to ona. Mid C is ona=51, note=3 and octave=4. + if (note<3) + return (octave+1)*12+note; + else + return octave*12+note; +} + +public I8 Ona2Note(I8 ona) +{//Ona to note in octave. Mid C is ona=51, note=3 and octave=4. + return ona%12; +} + +public I8 Ona2Octave(I8 ona) +{//Ona to octave. Mid C is ona=51, note=3 and octave=4. + I64 note=ona%12,octave=ona/12; + if (note<3) + return octave-1; + else + return octave; } F64 SinPhaseCont(F64 last_y,F64 last_dydt, diff --git a/Adam/Snd/SndMusic.HC b/Adam/Snd/SndMusic.HC index 56a2fc7..1e3d554 100644 --- a/Adam/Snd/SndMusic.HC +++ b/Adam/Snd/SndMusic.HC @@ -16,7 +16,7 @@ public class CMusicGlbls I64 play_note_num; F64 tM_correction,last_Beat,last_tM; -} music={NULL,NULL,3,1.0,{0,2,3,5,7,8,10},FALSE,4,4,2.5,0.9,0,0,0,0}; +} music={NULL,NULL,4,1.0,{0,2,3,5,7,8,10},FALSE,4,4,2.5,0.9,0,0,0,0}; #help_index "Snd/Music;Time/Seconds" public F64 tM() @@ -30,7 +30,7 @@ public F64 Beat() PUSHFD CLI if (mp_cnt>1) - while (LBts(&sys_semas[SYS_SEMA_TMBEAT],0)) + while (LBts(&sys_semas[SEMA_TMBEAT],0)) PAUSE cur_tM=tM; res=music.last_Beat; @@ -38,7 +38,7 @@ public F64 Beat() res+=(cur_tM-music.last_tM)*music.tempo; music.last_tM=cur_tM; music.last_Beat=res; - LBtr(&sys_semas[SYS_SEMA_TMBEAT],0); + LBtr(&sys_semas[SEMA_TMBEAT],0); POPFD return res; } @@ -99,7 +99,7 @@ public U0 Play(U8 *st,U8 *words=NULL) {/* Notes are entered with a capital letter. Octaves are entered with a digit and -stay set until changed. +stay set until changed. Mid C is octave 4. Durations are entered with 'w' whole note @@ -127,9 +127,9 @@ per second. It defaults to 2.5 and gets faster when bigger. */ U8 *word,*last_st; - I64 note,i=0,timeout_val,timeout_val2; + I64 note,i=0,ona,timeout_val,timeout_val2; Bool tie; - F64 f,d,on_jiffies,off_jiffies; + F64 d,on_jiffies,off_jiffies; music.play_note_num=0; while (*st) { timeout_val=cnts.jiffies; @@ -158,9 +158,9 @@ per second. It defaults to note++; st++; } - f=Note2Freq(note,music.octave); + ona=Note2Ona(note,music.octave); } else - f=0; + ona=ONA_REST; if (words && (word=LstSub(i++,words)) && StrCmp(word," ")) "%s",word; d=JIFFY_FREQ*music.note_len/music.tempo; @@ -175,12 +175,12 @@ per second. It defaults to timeout_val2=timeout_val+off_jiffies; if (!music.mute) - Snd(f); + Snd(ona); SleepUntil(timeout_val); music.tM_correction+=on_jiffies-ToI64(on_jiffies); if (!music.mute) - Snd(0); + Snd; SleepUntil(timeout_val2); music.tM_correction+=off_jiffies-ToI64(off_jiffies); @@ -193,7 +193,7 @@ U0 MusicSettingsRst() music.play_note_num=0; music.stacatto_factor=0.9; music.tempo=2.5; - music.octave=3; + music.octave=4; music.note_len=1.0; music.meter_top=4; music.meter_bottom=4; @@ -201,11 +201,11 @@ U0 MusicSettingsRst() PUSHFD CLI if (mp_cnt>1) - while (LBts(&sys_semas[SYS_SEMA_TMBEAT],0)) + while (LBts(&sys_semas[SEMA_TMBEAT],0)) PAUSE music.last_tM=tM; music.last_Beat=0.0; - LBtr(&sys_semas[SYS_SEMA_TMBEAT],0); + LBtr(&sys_semas[SEMA_TMBEAT],0); POPFD } diff --git a/Adam/TaskRep.HC b/Adam/TaskRep.HC index 87db4a1..fa3f23c 100644 --- a/Adam/TaskRep.HC +++ b/Adam/TaskRep.HC @@ -23,7 +23,7 @@ public U0 TaskRep() CLI for (i=0;iseth_task,2); } POPFD diff --git a/Adam/TaskSettings.HC b/Adam/TaskSettings.HC index 80b78ff..4bcee95 100644 --- a/Adam/TaskSettings.HC +++ b/Adam/TaskSettings.HC @@ -18,7 +18,7 @@ public CTaskSettings *SettingsPush(CTask *task=NULL,I64 flags=0) if (!(flags&TSF_SAME_SONG)) { if (tmpse->song_task=task->song_task) { Suspend(task->song_task); - Snd(0); + Snd; } task->song_task=NULL; } @@ -83,7 +83,7 @@ U0 SettingsPop2(CTask *task,CTaskSettings *tmpse) StrCpy(task->task_title,tmpse->task_title); AutoComplete(tmpse->autocomplete); GrPaletteSet(tmpse->palette); - Snd(0); + Snd; } public U0 SettingsPop(CTask *task=NULL,I64 flags=0) diff --git a/Adam/Training.HC b/Adam/Training.HC index a2927ce..1a5fed3 100644 --- a/Adam/Training.HC +++ b/Adam/Training.HC @@ -1,6 +1,6 @@ #help_index "Help System" -U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_handler)(I64 sc), +U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_hndlr)(I64 sc), U8 *desc,CTask *task=NULL) { I64 i=9,k,c; @@ -12,7 +12,7 @@ U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_handler)(I64 sc), if (sc&(SCF_SHIFT|SCF_NO_SHIFT)) i+=6; if (TaskValidate(task)) Fs->hash_table=task->hash_table; - st2=SrcEdLink(fp_handler,256); + st2=SrcEdLink(fp_hndlr,256); Fs->hash_table=old_hash; k=*desc(U32 *); @@ -36,9 +36,9 @@ U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_handler)(I64 sc), return res; } -U0 KeyMapKeyPrint(I64 sc,U0 (*fp_handler)(I64 sc),U8 *desc,CTask *task=NULL) +U0 KeyMapKeyPrint(I64 sc,U0 (*fp_hndlr)(I64 sc),U8 *desc,CTask *task=NULL) { - U8 *st=KeyMapKeyMStrPrint(sc,fp_handler,desc,task); + U8 *st=KeyMapKeyMStrPrint(sc,fp_hndlr,desc,task); "%s",st; Free(st); } @@ -98,22 +98,22 @@ I64 KMCompare(U8 *e1,U8 *e2) U0 KeyMapFamily2(U8 **entries,CTask *task,I64 scf) { - I64 i,a1,a2; + I64 i,arg1,arg2; for (i=0;i<256;i++) { - a2=scf|i|SCF_KEY_DESC; - a1=ScanCode2Char(a2); + arg2=scf|i|SCF_KEY_DESC; + arg1=ScanCode2Char(arg2); *keydev.desc=0; - keydev.handler=NULL; + keydev.hndlr=NULL; if (TaskValidate(task) && !Bt(&task->win_inhibit,WIf_SELF_KEY_DESC)) { if (task==Fs) - PutKey(a1,a2); + PutKey(arg1,arg2); else - PostMsg(task,MSG_KEY_DOWN,a1,a2); + PostMsg(task,MSG_KEY_DOWN,arg1,arg2); Refresh(0,TRUE); Sleep(1); //Open loop because might be no response. TODO: Drops msgs. } if (*keydev.desc && StrNCmp(keydev.desc,"Char /",7)) - entries[i]=KeyMapKeyMStrPrint(a2,keydev.handler,keydev.desc,task); + entries[i]=KeyMapKeyMStrPrint(arg2,keydev.hndlr,keydev.desc,task); } } diff --git a/Adam/WallPaper.HC b/Adam/WallPaper.HC index 381135bbec05d974c4c1ec8b0db5c7bcecf24264..65986366989f3d1345b35cfdae6f434dfdcd75f0 100644 GIT binary patch delta 139 zcmZox`>ncxiFNV=X12{7tl7-00f~8;$&<@C)`~j?`G@=IaB(UqC@3f?D5&ZhT9gzk zC~vmnRA&UK=TLGE2vs#OikMu$bx|nZCAB!YD6^m>Ge0jrK0aPSd2;}_JPT7v$>d`G gOc3>e-vvZz2y6mT_XL!fN=i1f2=*|7xKo7k0W&TtsQ>@~ delta 144 zcmeyZ+N`#LiIvqU$Uod~GdpVzGqX!l`s50ZwUgtSxOo&5loS+Hbq&o*iWN57aH=!% zgB9v1IR}JVsTvriOfKZQ$nTO`oLrPyP?DLS7at$5usMWVo`t2fq$GcGDSsw}@qph2 b!cY^~1Yz6~Py#bH{}bq81hXdh2;~C+7}zeI diff --git a/Adam/Win.HC b/Adam/Win.HC index 0e8f52a..c2b0e8e 100644 --- a/Adam/Win.HC +++ b/Adam/Win.HC @@ -1,9 +1,8 @@ #help_index "Windows" #help_file "::/Doc/Windows" -CIPStateGlbls old_ip={IP_NULL,{-1000,-1000,0},{-1000,-1000,0},{-1000,-1000,0}, - {0,0,0},{1.0,1.0,1.0}, - 0,(MAX_I32+1)>>3,0.0,GetTSC,0.350,0,0, +CMsStateGlbls old_ms={{-1000,-1000,0},{-1000,-1000,0},{-1000,-1000,0}, + {0,0,0},{1.0,1.0,1.0},0.0,GetTSC,0.350,0,0, FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE }; @@ -11,9 +10,22 @@ public CWinMgrGlbls winmgr={0,0,0,WINMGR_FPS,tS,NULL,FALSE,FALSE,FALSE}; winmgr.t=CAlloc(sizeof(CWinMgrTimingGlbls)); winmgr.t->last_calc_idle_time=tS; +U0 ProgressBarsRegTf(U8 *path=NULL) +{ + F64 t,p1,p2,p3,p4; + if (path) { + t=tS; + if (progress1_t0) p1=t-progress1_t0; else p1=0; + if (progress2_t0) p2=t-progress2_t0; else p2=0; + if (progress3_t0) p3=t-progress3_t0; else p3=0; + if (progress4_t0) p4=t-progress4_t0; else p4=0; + RegWrite(path,"progress1_tf=%0.3f;progress2_tf=%0.3f;\n" + "progress3_tf=%0.3f;progress4_tf=%0.3f;\n",p1,p2,p3,p4); + } +} + #define PROGRESS_BAR_HEIGHT 20 #define PROGRESS_BAR_WIDTH (3*GR_WIDTH/4) - U0 DrawProgressBars(CDC *dc) { I64 i,j,k,n,m; @@ -52,20 +64,24 @@ U0 DrawProgressBars(CDC *dc) PROGRESS_BAR_HEIGHT)/2-4); } - dc->color=WHITE; + dc->color=GREEN; if (*sys_progresses[i].desc) st=StrNew(sys_progresses[i].desc); else st=MStrPrint("%d/%d",n,m); if (sys_progresses[i].t0) { - st2=MStrPrint("%s %5.3f",st,tS-sys_progresses[i].t0); + st2=MStrPrint("%s %fs",st,tS-sys_progresses[i].t0); Free(st); } else st2=st; - GrPrint(dc,(GR_WIDTH-FONT_WIDTH*StrLen(st2))/2, - (GR_HEIGHT-FONT_HEIGHT- - (NUM_PROGRESS_BARS*2-2-i*4)*PROGRESS_BAR_HEIGHT)/2,"%s",st2); - Free(st2); + if (sys_progresses[i].tf) { + st=MStrPrint("%s/%fs",st2,sys_progresses[i].tf); + Free(st2); + } else + st=st2; + GrPrint(dc,(GR_WIDTH-FONT_WIDTH*StrLen(st))/2,(GR_HEIGHT-FONT_HEIGHT- + (NUM_PROGRESS_BARS*2-2-i*4)*PROGRESS_BAR_HEIGHT)/2,"%s",st); + Free(st); } } } @@ -75,24 +91,24 @@ U0 DrawWinGrid(CDC *dc) F64 d; dc->color=BLACK; dc->pen_width=1; - for (d=ip_grid.x_offset;dscroll_z=s->z; } -U0 DrawInputPtr(CDC *dc) +U0 DrawMs(CDC *dc) { I64 x,y; PUSHFD CLI - x=ip.pos.x; - y=ip.pos.y; + x=ms.pos.x; + y=ms.pos.y; POPFD - if (ip.show && ip.dev!=IP_NULL) { + if (ms.show && ms_hard.installed) { if (!Bt(&sys_run_level,RLf_VGA)) //if text mode - gr.text_base[ip.pos_text.x+ip.pos_text.y*TEXT_COLS]^=0x7F00; + gr.text_base[ms.pos_text.x+ms.pos_text.y*TEXT_COLS]^=0x7F00; else { - if (gr.fp_draw_input_ptr) { - if (ip.lb) + if (gr.fp_draw_ms) { + if (ms.lb) dc->color=ROP_XOR+LTPURPLE^TRANSPARENT; - else if (ip.rb) + else if (ms.rb) dc->color=ROP_XOR+LTCYAN^TRANSPARENT; else dc->color=ROP_XOR+BLACK^TRANSPARENT; - if (winmgr.grab_scroll && gr.fp_draw_grab_input_ptr) - (*gr.fp_draw_grab_input_ptr)(dc,x,y,winmgr.grab_scroll_closed); + if (winmgr.grab_scroll && gr.fp_draw_grab_ms) + (*gr.fp_draw_grab_ms)(dc,x,y,winmgr.grab_scroll_closed); else - (*gr.fp_draw_input_ptr)(dc,x,y); + (*gr.fp_draw_ms)(dc,x,y); } } } @@ -185,50 +201,48 @@ U0 DrawInputPtr(CDC *dc) U0 WinFinalUpdate(CDC *dc) { - if (ip_grid.show) + if (ms_grid.show) DrawWinGrid(dc); DrawProgressBars(dc); if (winmgr.show_menu) DrawMenu(dc); else sys_cur_submenu_entry=NULL; - DrawInputPtr(dc); + DrawMs(dc); } gr.fp_final_scrn_update=&WinFinalUpdate; -U0 WinIPUpdate() +U0 WinMsUpdate() { I64 dd; Bool set=FALSE; - if (ip.dev==IP_MOUSE) { - ip.has_wheel=mouse.has_wheel; - if (mouse.evt) { - ip.throttle+=ip.throttle_step*SignI64(mouse.pos.z-ip.pos.z); - IPVarsUpdate(mouse.pos.x,mouse.pos.y,mouse.pos.z, - mouse.buttons[0],mouse.buttons[1]); - mouse.evt=FALSE; + if (ms_hard.installed) { + ms.has_wheel=ms_hard.has_wheel; + if (ms_hard.evt) { + MsUpdate(ms_hard.pos.x,ms_hard.pos.y,ms_hard.pos.z, + ms_hard.bttns[0],ms_hard.bttns[1]); + ms_hard.evt=FALSE; set=TRUE; } - } else if (ip.dev==IP_NULL && mouse.installed) - ip.dev=IP_MOUSE; + } if (set) { - if (ip.dev==IP_MOUSE) { - ip.speed=mouse.speed; - ip.timestamp=mouse.timestamp; + if (ms_hard.installed) { + ms.speed=ms_hard.speed; + ms.timestamp=ms_hard.timestamp; } } else - ip.speed*=0.95; + ms.speed*=0.95; if (gr.scrn_zoom!=1) { if (gr.continuous_scroll) GrScaleZoom(1.0); else { - dd=(ip.pos.x-gr.sx)*gr.scrn_zoom; + dd=(ms.pos.x-gr.sx)*gr.scrn_zoom; if (!(8<=ddwake_jiffy=cnts.jiffies; } Yield; @@ -25,7 +25,7 @@ public U0 Refresh(I64 cnt=1,Bool force=FALSE) update_cnt=winmgr.updates+cnt; while (winmgr.updateswake_jiffy=cnts.jiffies; } Sleep(1); @@ -39,153 +39,153 @@ public U0 Refresh(I64 cnt=1,Bool force=FALSE) I64 WinQueIPMsgs(Bool que) { - static CD3I64 single_ip={0,0,0}; + static CD3I64 single_ms={0,0,0}; F64 time=tS; - I64 msg_code=0,a1,a2,single_a1,single_a2; + I64 msg_code=0,arg1,arg2,single_arg1,single_arg2; CTask *task_focus=sys_focus_task; if (task_focus && !winmgr.grab_scroll) { - a1=ip.pos.x-task_focus->pix_left-task_focus->scroll_x; - a2=ip.pos.y-task_focus->pix_top-task_focus->scroll_y; - single_a1=single_ip.x-task_focus->pix_left-task_focus->scroll_x; - single_a2=single_ip.y-task_focus->pix_top-task_focus->scroll_y; - if (old_ip.presnap.x!=ip.presnap.x || old_ip.presnap.y!=ip.presnap.y) { + arg1=ms.pos.x-task_focus->pix_left-task_focus->scroll_x; + arg2=ms.pos.y-task_focus->pix_top-task_focus->scroll_y; + single_arg1=single_ms.x-task_focus->pix_left-task_focus->scroll_x; + single_arg2=single_ms.y-task_focus->pix_top-task_focus->scroll_y; + if (old_ms.presnap.x!=ms.presnap.x || old_ms.presnap.y!=ms.presnap.y) { if (que) TaskMsg(task_focus,0, - MSG_IP_MOVE,a1,a2,0); - msg_code=MSG_IP_MOVE; + MSG_MS_MOVE,arg1,arg2,0); + msg_code=MSG_MS_MOVE; } -//TODO que msg for ip.pos.z? - if (ip.left_dbl_time) { - if (time>ip.left_dbl_time) { - if (ip.left_dbl) { - if (!ip.left_down_sent) { +//TODO que msg for ms.pos.z? + if (ms.left_dbl_time) { + if (time>ms.left_dbl_time) { + if (ms.left_dbl) { + if (!ms.left_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_D_DOWN,a1,a2,0); - ip.left_down_sent=TRUE; - msg_code=MSG_IP_L_D_DOWN; + MSG_MS_L_D_DOWN,arg1,arg2,0); + ms.left_down_sent=TRUE; + msg_code=MSG_MS_L_D_DOWN; } - if (!ip.lb) { + if (!ms.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_D_UP,a1,a2,0); - ip.left_dbl_time=0; - msg_code=MSG_IP_L_D_UP; + MSG_MS_L_D_UP,arg1,arg2,0); + ms.left_dbl_time=0; + msg_code=MSG_MS_L_D_UP; } } else { - if (!ip.left_down_sent) { + if (!ms.left_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_DOWN,single_a1,single_a2,0); - ip.left_down_sent=TRUE; - msg_code=MSG_IP_L_DOWN; + MSG_MS_L_DOWN,single_arg1,single_arg2,0); + ms.left_down_sent=TRUE; + msg_code=MSG_MS_L_DOWN; } - if (!ip.lb) { + if (!ms.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_UP,a1,a2,0); - ip.left_dbl_time=0; - msg_code=MSG_IP_L_UP; + MSG_MS_L_UP,arg1,arg2,0); + ms.left_dbl_time=0; + msg_code=MSG_MS_L_UP; } } } else { - if (ip.lb && !ip_last.lb) { - ip.left_dbl_time=time; - ip.left_dbl=TRUE; + if (ms.lb && !ms_last.lb) { + ms.left_dbl_time=time; + ms.left_dbl=TRUE; } } } else { if (TaskValidate(task_focus) && - Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_L_D)) { - if (ip.lb && !ip_last.lb) { + Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_MS_L_D)) { + if (ms.lb && !ms_last.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_DOWN,a1,a2,0); - msg_code=MSG_IP_L_DOWN; - } else if (!ip.lb && ip_last.lb) { + MSG_MS_L_DOWN,arg1,arg2,0); + msg_code=MSG_MS_L_DOWN; + } else if (!ms.lb && ms_last.lb) { if (que) TaskMsg(task_focus,0, - MSG_IP_L_UP,a1,a2,0); - msg_code=MSG_IP_L_UP; + MSG_MS_L_UP,arg1,arg2,0); + msg_code=MSG_MS_L_UP; } } else { - if (ip.lb && !ip_last.lb) { - ip.left_dbl=FALSE; - ip.left_down_sent=FALSE; - ip.left_dbl_time=time+ip.dbl_time; - single_ip.x=ip.pos.x; - single_ip.y=ip.pos.y; + if (ms.lb && !ms_last.lb) { + ms.left_dbl=FALSE; + ms.left_down_sent=FALSE; + ms.left_dbl_time=time+ms.dbl_time; + single_ms.x=ms.pos.x; + single_ms.y=ms.pos.y; } } } - if (ip.right_dbl_time) { - if (time>ip.right_dbl_time) { - if (ip.right_dbl) { - if (!ip.right_down_sent) { + if (ms.right_dbl_time) { + if (time>ms.right_dbl_time) { + if (ms.right_dbl) { + if (!ms.right_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_D_DOWN,a1,a2,0); - ip.right_down_sent=TRUE; - msg_code=MSG_IP_R_D_DOWN; + MSG_MS_R_D_DOWN,arg1,arg2,0); + ms.right_down_sent=TRUE; + msg_code=MSG_MS_R_D_DOWN; } - if (!ip.rb) { + if (!ms.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_D_UP,a1,a2,0); - ip.right_dbl_time=0; - msg_code=MSG_IP_R_D_UP; + MSG_MS_R_D_UP,arg1,arg2,0); + ms.right_dbl_time=0; + msg_code=MSG_MS_R_D_UP; } } else { - if (!ip.right_down_sent) { + if (!ms.right_down_sent) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_DOWN,single_a1,single_a2,0); - ip.right_down_sent=TRUE; - msg_code=MSG_IP_R_DOWN; + MSG_MS_R_DOWN,single_arg1,single_arg2,0); + ms.right_down_sent=TRUE; + msg_code=MSG_MS_R_DOWN; } - if (!ip.rb) { + if (!ms.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_UP,a1,a2,0); - ip.right_dbl_time=0; - msg_code=MSG_IP_R_UP; + MSG_MS_R_UP,arg1,arg2,0); + ms.right_dbl_time=0; + msg_code=MSG_MS_R_UP; } } } else { - if (ip.rb && !ip_last.rb) { - ip.right_dbl_time=time; - ip.right_dbl=TRUE; + if (ms.rb && !ms_last.rb) { + ms.right_dbl_time=time; + ms.right_dbl=TRUE; } } } else { if (TaskValidate(task_focus) && - Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_IP_R_D)) { - if (ip.rb && !ip_last.rb) { + Bt(&task_focus->win_inhibit,WIf_FOCUS_TASK_MS_R_D)) { + if (ms.rb && !ms_last.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_DOWN,a1,a2,0); - msg_code=MSG_IP_R_DOWN; - } else if (!ip.rb && ip_last.rb) { + MSG_MS_R_DOWN,arg1,arg2,0); + msg_code=MSG_MS_R_DOWN; + } else if (!ms.rb && ms_last.rb) { if (que) TaskMsg(task_focus,0, - MSG_IP_R_UP,a1,a2,0); - msg_code=MSG_IP_R_UP; + MSG_MS_R_UP,arg1,arg2,0); + msg_code=MSG_MS_R_UP; } } else { - if (ip.rb && !ip_last.rb) { - ip.right_dbl=FALSE; - ip.right_down_sent=FALSE; - ip.right_dbl_time=time+ip.dbl_time; - single_ip.x=ip.pos.x; - single_ip.y=ip.pos.y; + if (ms.rb && !ms_last.rb) { + ms.right_dbl=FALSE; + ms.right_down_sent=FALSE; + ms.right_dbl_time=time+ms.dbl_time; + single_ms.x=ms.pos.x; + single_ms.y=ms.pos.y; } } } - MemCpy(&ip_last,&ip,sizeof(CIPStateGlbls)); - MemCpy(&old_ip,&ip,sizeof(CIPStateGlbls)); + MemCpy(&ms_last,&ms,sizeof(CMsStateGlbls)); + MemCpy(&old_ms,&ms,sizeof(CMsStateGlbls)); } return msg_code; } @@ -246,7 +246,7 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS)) { c=sys_focus_task->next_ctrl; while (c!=&sys_focus_task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { que=FALSE; break; } @@ -261,13 +261,13 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) } if (sys_focus_task) LBtr(&sys_focus_task->task_flags,TASKf_HAS_SONG); - WinIPUpdate; + WinMsUpdate; - if (!LBtr(&sys_semas[SYS_SEMA_JUST_PUMP_MSGS],0)) { + if (!LBtr(&sys_semas[SEMA_JUST_PUMP_MSGS],0)) { timeout_val=cnts.jiffies+JIFFY_FREQ/WINMGR_FPS; - LBts(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0); + LBts(&sys_semas[SEMA_REFRESH_IN_PROGRESS],0); GrUpdateScrn; - LBtr(&sys_semas[SYS_SEMA_REFRESH_IN_PROGRESS],0); + LBtr(&sys_semas[SEMA_REFRESH_IN_PROGRESS],0); if (sys_focus_task && !Bt(&sys_focus_task->task_flags,TASKf_HAS_SONG)) { Free(music.cur_song); @@ -281,26 +281,26 @@ I64 WinMgrSleep(Bool flush_msgs=FALSE) music.cur_song_task=NULL; } winmgr.updates++; - if (!mouse.install_attempts) + if (!ms_hard.install_attempts) SleepUntil(timeout_val); //Just for before mouse install attempt at boot. else do { - KbdMouseHandler(FALSE,TRUE); + KbdMsHndlr(FALSE,TRUE); SleepUntil(MinI64(timeout_val,cnts.jiffies+JIFFY_FREQ/500)); } while (cnts.jiffiesflags&DOCF_DONT_SHOW) res=NULL; else if (set_cursor) { @@ -311,8 +311,8 @@ CDoc *WinCursorPosSet(CTask *task,I64 ipx,I64 ipy,Bool set_cursor=TRUE) x0=res->line_start_col; y0=res->top_line_num; DocRecalc(res,RECALCF_HAS_CURSOR); - res->x=(ipx-task->pix_left-task->scroll_x)/FONT_WIDTH +x0; - res->y=(ipy-task->pix_top -task->scroll_y)/FONT_HEIGHT+y0; + res->x=(msx-task->pix_left-task->scroll_x)/FONT_WIDTH +x0; + res->y=(msy-task->pix_top -task->scroll_y)/FONT_HEIGHT+y0; DocRecalc(res,RECALCt_FIND_CURSOR); task->scroll_x=0; task->scroll_y=0; @@ -336,8 +336,8 @@ Bool WinKeyNavMenu() if (Bt(kbd.down_bitmap,SC_GUI) && focus && (m=focus->cur_menu)) { winmgr.show_menu=TRUE; sys_cur_submenu_entry=NULL; - old_pos.x=ip.pos.x; old_pos.y=ip.pos.y; - ip.pos.x=new_pos.x=ip.pos.y=new_pos.y=0; + old_pos.x=ms.pos.x; old_pos.y=ms.pos.y; + ms.pos.x=new_pos.x=ms.pos.y=new_pos.y=0; while (Bt(kbd.down_bitmap,SC_GUI)) { old_key_cnt=kbd.cnt; if (Bt(kbd.down_bitmap,SC_CURSOR_LEFT)) { @@ -382,16 +382,16 @@ Bool WinKeyNavMenu() } new_pos.x=ClampI64(new_pos.x,0,GR_WIDTH-1); new_pos.y=ClampI64(new_pos.y,0,GR_HEIGHT-1); - ip.pos.x=new_pos.x; ip.pos.y=new_pos.y; + ms.pos.x=new_pos.x; ms.pos.y=new_pos.y; WinMgrSleep(TRUE); if (!sys_cur_submenu_entry) - ip.pos.y=new_pos.y=0; + ms.pos.y=new_pos.y=0; } if (sys_cur_submenu_entry) TaskMsg(sys_focus_task,0,sys_cur_submenu_entry->msg_code, - sys_cur_submenu_entry->a1,sys_cur_submenu_entry->a2,0); + sys_cur_submenu_entry->arg1,sys_cur_submenu_entry->arg2,0); winmgr.show_menu=FALSE; - ip.pos.x=old_pos.x; ip.pos.y=old_pos.y; + ms.pos.x=old_pos.x; ms.pos.y=old_pos.y; return TRUE; } return FALSE; @@ -403,7 +403,7 @@ U0 WinMgrTask(I64) CDoc *doc; CDocEntry *doc_e; I64 x,y,z,msg_code, - my_ip_z=0,left,top, + my_ms_z=0,left,top, old_flags=GetRFlags; Bool has_border; CCtrl *c; @@ -445,7 +445,7 @@ wmt_start: SetRFlags(old_flags); goto wmt_start; } - if (WinInside(ip.pos.x,ip.pos.y,task,FONT_WIDTH)) { + if (WinInside(ms.pos.x,ms.pos.y,task,FONT_WIDTH)) { SetRFlags(old_flags); break; } @@ -468,19 +468,19 @@ wmt_start: !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MENU)) { if (WinKeyNavMenu) goto wmt_start; - if (task==Fs && 0<=ip.pos.ymsg_code, - sys_cur_submenu_entry->a1, - sys_cur_submenu_entry->a2,0); + sys_cur_submenu_entry->arg1, + sys_cur_submenu_entry->arg2,0); winmgr.show_menu=FALSE; - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } @@ -494,20 +494,20 @@ wmt_start: winmgr.grab_scroll_closed=FALSE; winmgr.grab_scroll=TRUE; while (kbd.scan_code&SCF_CTRL && TaskValidate(task) && (!ac.task || - !WinInside(ip.pos.x,ip.pos.y,ac.task,FONT_WIDTH))) { - if (ip.lb) { + !WinInside(ms.pos.x,ms.pos.y,ac.task,FONT_WIDTH))) { + if (ms.lb) { winmgr.grab_scroll_closed=TRUE; - x=ip.pos.x-task->scroll_x; - y=ip.pos.y-task->scroll_y; - z=ip.pos.z-task->scroll_z; - while (ip.lb && kbd.scan_code&SCF_CTRL && TaskValidate(task)) { - task->scroll_x=(ip.pos.x-x)&~7; - task->scroll_y=(ip.pos.y-y)&~7; - task->scroll_z=ip.pos.z-z; + x=ms.pos.x-task->scroll_x; + y=ms.pos.y-task->scroll_y; + z=ms.pos.z-task->scroll_z; + while (ms.lb && kbd.scan_code&SCF_CTRL && TaskValidate(task)) { + task->scroll_x=(ms.pos.x-x)&~7; + task->scroll_y=(ms.pos.y-y)&~7; + task->scroll_z=ms.pos.z-z; WinMgrSleep(TRUE); } winmgr.grab_scroll_closed=FALSE; - } else if (ip.rb) { + } else if (ms.rb) { task->scroll_x=0; task->scroll_y=0; task->scroll_z=0; @@ -523,40 +523,40 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_CTRLS) && (!TaskValidate(sys_focus_task)|| !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_CTRLS))) { - if (ip.lb && !old_ip.lb) { + if (ms.lb && !old_ms.lb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { left-=FONT_WIDTH; top -=FONT_HEIGHT; } - if (c->flags&CTRLF_CAPTURE_LEFT_IP) { - while (ip.lb && TaskValidate(task)) { + if (c->flags&CTRLF_CAPTURE_LEFT_MS) { + while (ms.lb && TaskValidate(task)) { if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); WinMgrSleep; } if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.lb=FALSE; + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.lb=FALSE; goto wmt_start; } else { if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); - old_ip.lb=TRUE; + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); + old_ms.lb=TRUE; goto wmt_start; } } c=c->next; } } - if (old_ip.lb && !ip.lb) { + if (old_ms.lb && !ms.lb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { @@ -564,47 +564,47 @@ wmt_start: top -=FONT_HEIGHT; } if (c->left_click) - (*c->left_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.lb=FALSE; + (*c->left_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.lb=FALSE; goto wmt_start; } c=c->next; } } - if (ip.rb && !old_ip.rb) { + if (ms.rb && !old_ms.rb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { left-=FONT_WIDTH; top -=FONT_HEIGHT; } - if (c->flags&CTRLF_CAPTURE_RIGHT_IP) { - while (ip.rb && TaskValidate(task)) { + if (c->flags&CTRLF_CAPTURE_RIGHT_MS) { + while (ms.rb && TaskValidate(task)) { if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); WinMgrSleep; } if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.rb=FALSE; + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.rb=FALSE; goto wmt_start; } else { if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,TRUE); - old_ip.rb=TRUE; + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,TRUE); + old_ms.rb=TRUE; goto wmt_start; } } c=c->next; } } - if (old_ip.rb && !ip.rb) { + if (old_ms.rb && !ms.rb) { c=task->next_ctrl; while (c!=&task->next_ctrl) { - if (CtrlInside(c,ip.pos.x,ip.pos.y)) { + if (CtrlInside(c,ms.pos.x,ms.pos.y)) { left=task->pix_left; top =task->pix_top; if (c->flags&CTRLF_BORDER) { @@ -612,38 +612,38 @@ wmt_start: top -=FONT_HEIGHT; } if (c->right_click) - (*c->right_click)(c,ip.pos.x-left,ip.pos.y-top,FALSE); - old_ip.rb=FALSE; + (*c->right_click)(c,ms.pos.x-left,ms.pos.y-top,FALSE); + old_ms.rb=FALSE; goto wmt_start; } c=c->next; } } - if (ip.has_wheel && my_ip_z!=ip.pos.z) { + if (ms.has_wheel && my_ms_z!=ms.pos.z) { if (task==sys_focus_task) { c=task->next_ctrl; while (c!=&task->next_ctrl) { if (c->wheel_chg) { - (*c->wheel_chg)(c,ip.pos.z-my_ip_z); - my_ip_z=ip.pos.z; + (*c->wheel_chg)(c,ms.pos.z-my_ms_z); + my_ms_z=ms.pos.z; goto wmt_start; } c=c->next; } - my_ip_z=ip.pos.z; + my_ms_z=ms.pos.z; } else if (!sys_focus_task) - my_ip_z=ip.pos.z; + my_ms_z=ms.pos.z; } } if (task==Fs) goto wmt_start; - if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_L)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { - if (!old_ip.lb && ip.lb) { - if (doc=WinCursorPosSet(task,ip.pos.x,ip.pos.y)) { + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_L))) { + if (!old_ms.lb && ms.lb) { + if (doc=WinCursorPosSet(task,ms.pos.x,ms.pos.y)) { DocLock(doc); if (doc->doc_signature==DOC_SIGNATURE_VAL) { doc_e=doc->cur_entry; @@ -653,17 +653,17 @@ wmt_start: } } DocUnlock(doc); - old_ip.lb=TRUE; + old_ms.lb=TRUE; goto wmt_start; } } } - if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_R)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { - if (!old_ip.rb && ip.rb) { - if (WinCursorPosSet(task,ip.pos.x,ip.pos.y)) { - old_ip.rb=TRUE; + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_R))) { + if (!old_ms.rb && ms.rb) { + if (WinCursorPosSet(task,ms.pos.x,ms.pos.y)) { + old_ms.rb=TRUE; goto wmt_start; } } @@ -671,32 +671,32 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_BORDER) && has_border && (!TaskValidate(sys_focus_task)|| !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { - if (old_ip.lb && !ip.lb) { - if (ip.pos_text.y==task->win_top-1) { - if (task->win_left<=ip.pos_text.xwin_left+4) { + if (old_ms.lb && !ms.lb) { + if (ms.pos_text.y==task->win_top-1) { + if (task->win_left<=ms.pos_text.xwin_left+4) { TaskMsg(task,0,MSG_KEY_DOWN,CH_CTRLM,0x43200000432,0); - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; - } else if (task->win_right-2<=ip.pos_text.x<=task->win_right) { + } else if (task->win_right-2<=ms.pos_text.x<=task->win_right) { if (DocPut(task)) TaskMsg(task,0,MSG_KEY_DOWN,CH_SHIFT_ESC,0,0); else Kill(task,FALSE); - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } } } - if (!Bt(&task->win_inhibit,WIf_SELF_IP_L)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_L)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_L))) { - if (old_ip.lb && !ip.lb) { - if (doc=WinCursorPosSet(task,ip.pos.x,ip.pos.y,FALSE)) { + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_L))) { + if (old_ms.lb && !ms.lb) { + if (doc=WinCursorPosSet(task,ms.pos.x,ms.pos.y,FALSE)) { do msg_code=WinMgrSleep; - while (TaskValidate(task) && (ip.lb || ip.left_dbl_time)); + while (TaskValidate(task) && (ms.lb || ms.left_dbl_time)); if (TaskValidate(task)) { - if (msg_code==MSG_IP_L_UP) { + if (msg_code==MSG_MS_L_UP) { if (doc->doc_signature==DOC_SIGNATURE_VAL) { DocLock(doc); if (TaskValidate(task)) { @@ -714,24 +714,24 @@ wmt_start: DocUnlock(doc); } } - } else if (msg_code==MSG_IP_L_D_UP) + } else if (msg_code==MSG_MS_L_D_UP) TaskMsg(task,0,MSG_KEY_DOWN,CH_ESC,0,0); } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } } - if (!Bt(&task->win_inhibit,WIf_SELF_IP_R)&& + if (!Bt(&task->win_inhibit,WIf_SELF_MS_R)&& (!TaskValidate(sys_focus_task)|| - !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_IP_R))) { - if (old_ip.rb && !ip.rb) { - if (doc=WinCursorPosSet(task,ip.pos.x,ip.pos.y,FALSE)) { + !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_MS_R))) { + if (old_ms.rb && !ms.rb) { + if (doc=WinCursorPosSet(task,ms.pos.x,ms.pos.y,FALSE)) { do msg_code=WinMgrSleep; - while (TaskValidate(task) && (ip.rb || ip.right_dbl_time)); + while (TaskValidate(task) && (ms.rb || ms.right_dbl_time)); if (TaskValidate(task)) { - if (msg_code==MSG_IP_R_UP) { + if (msg_code==MSG_MS_R_UP) { if (doc->doc_signature==DOC_SIGNATURE_VAL) { DocLock(doc); if (TaskValidate(task)) { @@ -746,10 +746,10 @@ wmt_start: DocUnlock(doc); } } - } else if (msg_code==MSG_IP_R_D_UP) + } else if (msg_code==MSG_MS_R_D_UP) TaskMsg(task,0,MSG_KEY_DOWN,CH_SHIFT_ESC,0,0); } - old_ip.rb=FALSE; + old_ms.rb=FALSE; goto wmt_start; } } @@ -758,79 +758,79 @@ wmt_start: if (!Bt(&task->win_inhibit,WIf_SELF_BORDER) && has_border && (!TaskValidate(sys_focus_task)|| !Bt(&sys_focus_task->win_inhibit,WIf_FOCUS_TASK_BORDER))) { - if (ip.lb && !old_ip.lb) { - if (task->win_top==ip.pos_text.y+1 && - task->win_left-1<=ip.pos_text.x<=task->win_right+1) { - if (task->win_left<=ip.pos_text.xwin_left+4) { - old_ip.lb=TRUE; + if (ms.lb && !old_ms.lb) { + if (task->win_top==ms.pos_text.y+1 && + task->win_left-1<=ms.pos_text.x<=task->win_right+1) { + if (task->win_left<=ms.pos_text.xwin_left+4) { + old_ms.lb=TRUE; goto wmt_start; } - if (task->win_right-2<=ip.pos_text.x<=task->win_right) { - old_ip.lb=TRUE; + if (task->win_right-2<=ms.pos_text.x<=task->win_right) { + old_ms.lb=TRUE; goto wmt_start; } - x=ip.pos_text.x-task->win_left; - if (ip.lb) { + x=ms.pos_text.x-task->win_left; + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(ip.pos_text.x-x,task->win_width-1+ip.pos_text.x-x,task); - WinVert(ip.pos_text.y+1,task->win_height+ip.pos_text.y,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(ms.pos_text.x-x,task->win_width-1+ms.pos_text.x-x,task); + WinVert(ms.pos_text.y+1,task->win_height+ms.pos_text.y,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_left==ip.pos_text.x+1 && - task->win_top-1<=ip.pos_text.y<=task->win_bottom+1) { - y=ip.pos_text.y-task->win_top; - if (ip.lb) { + if (task->win_left==ms.pos_text.x+1 && + task->win_top-1<=ms.pos_text.y<=task->win_bottom+1) { + y=ms.pos_text.y-task->win_top; + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(ip.pos_text.x+1,task->win_width+ip.pos_text.x,task); - WinVert(ip.pos_text.y-y, - task->win_height-1+ip.pos_text.y-y,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(ms.pos_text.x+1,task->win_width+ms.pos_text.x,task); + WinVert(ms.pos_text.y-y, + task->win_height-1+ms.pos_text.y-y,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_right+1==ip.pos_text.x && - task->win_bottom+1==ip.pos_text.y) { - if (ip.lb) { + if (task->win_right+1==ms.pos_text.x && + task->win_bottom+1==ms.pos_text.y) { + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(task->win_left,ip.pos_text.x-1,task); - WinVert(task->win_top,ip.pos_text.y-1,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(task->win_left,ms.pos_text.x-1,task); + WinVert(task->win_top,ms.pos_text.y-1,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_bottom==ip.pos_text.y-1 && - task->win_left<=ip.pos_text.x<=task->win_right) { - if (ip.lb) { + if (task->win_bottom==ms.pos_text.y-1 && + task->win_left<=ms.pos_text.x<=task->win_right) { + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinVert(task->win_top,ip.pos_text.y-1,task); + while (ms.lb && TaskValidate(task)) { + WinVert(task->win_top,ms.pos_text.y-1,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } - if (task->win_right==ip.pos_text.x-1 && - task->win_top<=ip.pos_text.y<=task->win_bottom) { - if (ip.lb) { + if (task->win_right==ms.pos_text.x-1 && + task->win_top<=ms.pos_text.y<=task->win_bottom) { + if (ms.lb) { WinToTop(task); - while (ip.lb && TaskValidate(task)) { - WinHorz(task->win_left,ip.pos_text.x-1,task); + while (ms.lb && TaskValidate(task)) { + WinHorz(task->win_left,ms.pos_text.x-1,task); WinMgrSleep; } } - old_ip.lb=FALSE; + old_ms.lb=FALSE; goto wmt_start; } } diff --git a/Apps/AfterEgypt/AESplash.DD b/Apps/AfterEgypt/AESplash.DD deleted file mode 100644 index bbf20cfc258dbb0e0ac9ad0e9f776a0962b15f01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377006 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

?` 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 - MusicSettingsRst; - while (TRUE) { - Play("3eGFqGetBEFeBEEFetBDCeCFqF"); - Play("eGFqGetBEFeBEEFetBDCeCFqF"); - Play("AetDAAqBDeBEqEetECDGBG"); - Play("qAetDAAqBDeBEqEetECDGBG"); - } -} - -U0 HoldCourt() -{ - I64 accused,crime,victim; - Bool old_form=LBts(&(DocPut)->flags,DOCf_FORM); - - DocDblBufStart; - '\n'; - accused=RandU32%3; - "%s",LstSub(accused, - "A man \0A woman \0A child \0"); - - crime=RandU32&3; - "%s",LstSub(crime, - "commits murder\0commits adultery\0" - "commits blasphemy\0commits idolatry\0"); - - if (crime<=1) { - '' CH_SPACE; - victim=RandU32%3; - "%s",LstSub(victim,"to a man\0to a woman\0to a child\0to an animal\0"); - } - if (!(RandU32%5)) - ", again!"; - else - '.'; - "\n\n\n\n" - "$$LM,4$$" - "\n\n$$BT,\"Show Mercy\",LE=0$$\n\n" - "\n\n$$BT,\"Punish\",LE=1$$\n\n" - "\n\n$$BT,\"Really Punish\",LE=2$$\n\n" - "$$LM,0$$"; - DocDblBufEnd; - DocMenu(DocPut); - - LBEqu(&(DocPut)->flags,DOCf_FORM,old_form); - DocBottom; -} - -#define T_BREAK_CAMP 0 -#define T_TALK_WITH_GOD 1 -#define T_VIEW_CLOUDS 2 -#define T_HOLD_COURT 3 -#define T_VIEW_MAP 4 -#define T_WATER_ROCK 5 -#define T_BATTLE 6 -#define T_QUAIL 7 -#define T_MOSES_COMICS 8 -#define T_HELP 9 -#define T_QUIT 10 - -Bool TakeTurn() -{ - I64 i; - Bool res,old_form=LBts(&(DocPut)->flags,DOCf_FORM); - num_people*=1.0+0.01*((RandU16%100)-30); - if (num_people>MAX_PEOPLE) - num_people=MAX_PEOPLE; - - if (!Fs->song_task) - Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - Camp(num_people); - Kill(Fs->song_task); - - DocDblBufStart; - "$$LM,4$$" - "\n\n$$BT,\"Break Camp\",LE=T_BREAK_CAMP$$\n\n" - "\n\n$$BT,\"Talk with God\",LE=T_TALK_WITH_GOD$$\n\n" - "\n\n$$BT,\"View Clouds\",LE=T_VIEW_CLOUDS$$\n\n" - "\n\n$$BT,\"Hold Court\",LE=T_HOLD_COURT$$\n\n" - "\n\n$$BT,\"View Map\",LE=T_VIEW_MAP$$\n\n" - "\n\n$$BT,\"Make Water\",LE=T_WATER_ROCK$$\n\n" - "\n\n$$BT,\"Battle\",LE=T_BATTLE$$\n\n" - "\n\n$$BT,\"Beg for Meat\",LE=T_QUAIL$$\n\n" - "\n\n$$BT,\"Moses Comics\",LE=T_MOSES_COMICS$$\n\n" - "\n\n$$BT,\"Help\",LE=T_HELP$$\n\n" - "\n\n$$BT,\"Quit\",LE=T_QUIT$$\n\n" - "$$LM,0$$"; - DocDblBufEnd; - i=DocMenu(DocPut,DOF_DONT_TEXT_ATTR); - - LBEqu(&(DocPut)->flags,DOCf_FORM,old_form); - DocBottom; - - if (!(0<=isong_task=NULL; - return res; -} - -U0 TMsg(CDC *dc,U8 *msg) -{ - F64 t0=tS; - while (tS-t0<1.5) { - if (Blink(5)) - dc->color=BLACK; - else - dc->color=RED; - GrRect(dc,0,GR_HEIGHT-FONT_HEIGHT*3,GR_WIDTH,FONT_HEIGHT*2); - dc->color=BLACK; - GrRect(dc,2,GR_HEIGHT-FONT_HEIGHT*3+2,GR_WIDTH-4,FONT_HEIGHT*2-4); - dc->color=YELLOW; - GrPrint(dc,(GR_WIDTH-StrLen(msg)*FONT_WIDTH)/2, - GR_HEIGHT-5*FONT_HEIGHT/2,"%s",msg); - Refresh; - if (ScanChar) - throw; - } -} - -U0 Trailer() -{ - CDC *dc=DCAlias; - WinBorder; - WinMax; - Cd(Fs->parent_task->cur_dir); - Type("AESplash.DD"); - Sleep(500); - try { - TMsg(dc,"Leaving all behind, they fled."); - TMsg(dc,"Found themselves in a desert."); - TMsg(dc,"God! We're gonna die!"); - TMsg(dc,"\"Trust Me!\""); - } catch - Fs->catch_except=TRUE; - DCFill; - DCDel(dc); -} - -U0 AfterEgypt() -{ - SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - AutoComplete; - WinBorder; - WinMax; - DocClear; - PopUp("Trailer;",Fs); - try //Catch . - while (TakeTurn); - catch - PutExcept; - DocClear; - SettingsPop; -} diff --git a/Apps/AfterEgypt/Battle.HC b/Apps/AfterEgypt/Battle.HC deleted file mode 100644 index 2267a4a6ecabaabdb68667d57af67aab74b2f19a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3389 zcmY#!a@R35QQ?9EPL<#Q9VHt>J0%?_Pg_GI87`=l5k$%eiH&NkI zadKDTax*hgC^68fsL&~i&q*vUvF38h&(BfFNX z8=P3KQ4*{TG6pG{b&%L#=arOb*&10xoP`J>BRvCMNI-&IjxT`V2^ktd@YD-79Vvh+ zDzuX;-~p6esY^JlN|1bEY;3HBs`2@)y2v6ZozmO8ewj|h^ zs}@``KuZNg5s+J)9-o|_lB$!Op;Me}4N8u|sU;KPLii(rBj-iT*M}AI2tRGj!C7lXVPjY=LIc3&A+$h)fKx#M8Umc4A{P`45V}^O zJR>tFRY3!0mLiJv3NW0}}%S10y3dh~oMW1&j;~ z44?l0|IYN761PK{|~}{{{R2~8zcZS`Pu*f|2Y{L z7_NZ?K!!ens=5ji02zAW|Ns9C3=Ahhd@iU;aRvs4^B@5b{bSsGA45 zulX1l7#@N=$q!|KeEk3BLf2{1YmLf>;M1%pr`@KfiNi0K{PlPLBYrcvJS)mB??dgf|Cb`0g6_T9bBMz zzWx9Ie^4Sg0&)<@fW6SD-2xRj_W%EXb_NE9%TPW8NC(K~4;17rlqsazm;feZ)v z?IK78jPd6G|Nn{ELfYfq<7@&X$Nq~wJZ~_FCOCVETfV6-ZPyhe_53&!W5*&#j2FOJq zv$#M(19Ab#6W}NUF+imcD5$`t&FBCB|K9-xI|Bm)SOrJ`lQ1cfUD071BQCjbBd diff --git a/Apps/AfterEgypt/Comics.HC b/Apps/AfterEgypt/Comics.HC deleted file mode 100644 index 9c53398..0000000 --- a/Apps/AfterEgypt/Comics.HC +++ /dev/null @@ -1,26 +0,0 @@ -U0 ViewComics() -{ - I64 i=0; - U8 *st; - CDirEntry *tmpde=FilesFind("Comics/*.DD*"),*tmpde1=tmpde; - CDoc *doc=DocNew; - DocPrint(doc,"$$LTBLUE$$"); - while (tmpde) { - st=StrNew(tmpde->name); - FileExtRem(st); - tmpde->user_data=DocPrint(doc,"$$MU-UL,\"%-10ts\",LE=%d$$ ",st,tmpde); - Free(st); - tmpde=tmpde->next; - if ((i++&3)==3) - DocPrint(doc,"\n"); - } - while (TRUE) { - if ((tmpde=PopUpMenu(doc))>0) - Ed(tmpde->full_name); - else - break; - } - DocDel(doc); - DirTreeDel(tmpde1); -} - diff --git a/Apps/AfterEgypt/Comics/Moses01.DD b/Apps/AfterEgypt/Comics/Moses01.DD deleted file mode 100644 index e4aeeb4ec93b484805f95b75303e9c0d23a6b737..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmY!h57#kN;o{;_zyQwqr8y}ImHDL#>6vAz3Z=ygx%ow@3MGk2IjJSZSTq#pE0m`y zBq!!6WF(fQDkLf-B_?OLmjaPAV*D+D?RL{wQn3-9kP?E1ul938iip5m0 zM!ZBpYJNdZsvZ{zs00V-C@JYUdD?<~#l^tL00Eke3}7}FNPw4tfuWL#fq{>Kfq{{c znTdgcfonC0U|?X_z`(!&7JxBMGcYi4f+S }5o#%`FvbC7u;rHoK5FCmsQa56#- z1qpy$z`@AC@b~}!|6DKzKO+MJ2S_W7AVNS8z?QEGW_AQcws_RWC|aC@x7XD$C4E zS5&|PKn7qDR!~p~$w*ZwD9X>xEKW^P$VtpgQ7F&M$x%p3RmjQAPE~MCNzGFz&n(GM zNX*Gm$W6@4FXF;(kb**fnnFoNW?p(R$aSfSV7K8?tDvC31qLd?0Xj-bI!>OpAa8PU zae1UxD&*wnXDfo;R+Oq<%%za1P@I>TovH}Zfn=gbs(P_PZf0JpBC?x26^awf6*4k& z71A<`iV>~=X@+2gokl7Qj0_Oq&dva4bAh;G3=9nQObiSlnvs#2iGhKEYdQl1!>j-Q z|IcJ#V7T-D|9>tRV>SZ=!yA~ut^fc3&t+g>xBwCWX#pt((O?0PmUB=uPJvXwl!E9R zFaZz)WatBsz*MMV6B!s7K!!82arHAWFr4}S|Nmr|#f=OM43D4!|3I2RG9X4T0|SEq z$nhXk{`~*{e>(#M14x1k#<QUMYGsQ?8Q7f9v*B~t*bGcv)Pym1=zyhGK0%-yH8f++t0T%!%1qpy?uo7lOP1av<0*AO^^#pwtHT zK8OJdxl16=ffyinfK-6Y0y_+3I>;|4Kq_DikZs360w9-y7$6#?l?%jRV_;wanFWd; zc)WlFKoVd95CdceIJ<)wAf+Hbfl?9|hyjWhkY7N_0_=Sd1LQD}1Q*C1AO=V)hz7e9 z!~h9^%mNF57$7siwt&I|ltDpeaDZ|Yi~$NDkOVk9Kr*1X1?6Ba7z3mgEC6GGXmG*> znepTQ|NkHwlq(n+m_enS5FY~r11PCn{{R0!D7k`C{C+4KlpSE~qYMlTJE7v|85kJW zBC+Q~*&sDAHYWoE!(6C10|UcS1amW#$;-gN05csFoT4Web7)v6z8@ z;U-jIKa!Jni%|AX1_lNgdp-jL z11wm;;RK3pP{{-eCtU^x22T)!fq_Alfq}sp$_520C~Bcx25Be*6tjv@_5=n723aV3 z8dN`s3t}6C7z_*y9SjT%)=;(;lKCJu%w9Wa>IEtDVPIf@xlM?Nfq@~4fq?;3e1aqs z7#J8p1r&&#!N9-(Dn>x;3rOrI(1ZXI2eCm>0%BidU|;}w9K;S`U|_HZF&G#a0vH$= zKuH$F1&Jqv7z_*yaSRL$FgC~yFh?oJ1+`^Br5>oo0&dBI7$5;qiy15cVt^XKpcV@Q0ML00<^TWy diff --git a/Apps/AfterEgypt/Comics/Moses04.DD b/Apps/AfterEgypt/Comics/Moses04.DD deleted file mode 100644 index bfdeef72e82478175c425fee8c1a93c5f53f3eed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmY!h57#kN;o{;_zyjR!Qxp{xLNZc|Qq_wU67v)ib28KOa#Qn4uqw~YQz*$uRq#kn zEKAKR*5l;lRB?0HF;Vf)&{3#NP0UbK2+2q+Q7B5y&CE+FR={co7FS>h<)-R!!GKC| zfR2)qj+3XYp$Y>d0|b0yU;wkZK-_=-|NpONVqgH#%uFB|My}Zm3=BX1|Np;`fq~)8 z|NsBFV2rH{3=H2u0x-s91_p+AAORR-H3I{~E0_RC??(m(hF>rNkkZc#3=E$@0vDl5 zK`LH=1YnHs3=9l^KmsrZBO}xuAiW?%e={&JJOZhJF@7>IFx&wNz!>it7#MDV1YnG} N3=9m<{{R2a007D$t&9Kw diff --git a/Apps/AfterEgypt/Comics/Moses05.DD b/Apps/AfterEgypt/Comics/Moses05.DD deleted file mode 100644 index 830ae893b1bbd174889a19bd71482c8b07649f8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmY!h57#kN;o?#t4yd@f>zJr`DwHSYl_+>5<|XE4CMqQ6r6^=%7AqJUDHP}D6)TkF z6Kh;fYGR5)Nk*zdYDGb6N@huBex4o{x2U+et9Ya;WF!_V7(=W8S(&Jil31FaQIcAu zN34AyPhv42B#en6euasLXC#)SmVxZz;^I;X4$x6j(sA;%1%(|K$bA}4nMpaB$%#1% z8Kt@TMOF$bKHfS?h6>IZMfrJ|$vLUTI!2~emP$H~wn|QJR+thhnhcB#5WvpJ0A_Q6 zxFDj8iGcw`GcqzWF)%Q2tzuwc05R4vFfe@k|NlQ1jByU61Ed1R_`txx@B^d*#@NNc z!0-hm@Cm9{iVd+>PCg z+>I4oQcDySo!#6E6&2l6OWcjzje}AZ6JumMA2Hbfj`}s<^r9n5abNmntL{r7GlBDx@WruZy*5}14O@p34j>Fj0_B~K>{!ahz4n40QnFU I4kJ4h0J9M9vH$=8 diff --git a/Apps/AfterEgypt/Comics/Moses08.DD b/Apps/AfterEgypt/Comics/Moses08.DD deleted file mode 100644 index 7bdb830c343ba74a33f767bd06d66ae8c7cafa3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmY!h57#kN;o?$2fRK#LVui}o#3CJqhj1B~rQ+tUW1`}eS`IQbKTRRIC^fY}j|&D=f&+Av zlysatZ4Ffz7#Scyf{_8t<^pj!85kJqnHU&AG$SK369WSSmpTIj12Y2ygFXWT!{`71 z|8v0@kx&UP7^9bgf#EAi1&m?Iz`*bkCIHfVkb!}L9b{-fR0bsQ8>9jx@c#e*|A!eE z7~X;eV2sl+EilG?WECJo&%y*?jEf8m47WjMz!>{s0x-sIm==(skN^Mw52Lw2jMxAF M|3AsVzyP8d0RP*oz5oCK diff --git a/Apps/AfterEgypt/GodTalking.HC b/Apps/AfterEgypt/GodTalking.HC deleted file mode 100644 index 477536032b2fbbfff02929b02fba45e00652445b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17514 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 OaazHuAo_>)3=II(S)y$K diff --git a/Apps/AfterEgypt/HorebA.HC b/Apps/AfterEgypt/HorebA.HC deleted file mode 100644 index 7c2a21248aaf49521567e7f40f453fabc3895630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33450 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 Qo+Xur?Ldtw)Lg*;0Jxe-Q~&?~ diff --git a/Apps/AfterEgypt/HorebBMP.HC b/Apps/AfterEgypt/HorebBMP.HC deleted file mode 100644 index 43586cf..0000000 --- a/Apps/AfterEgypt/HorebBMP.HC +++ /dev/null @@ -1,97 +0,0 @@ -I64 type_weights[OT_NUM_TYPES]={0,30,30,15,30,30,1,1,1}; - -I64 mp_not_done_flags; -U0 MPDrawHoreb(CDC *dc2) -{ - CTask *task=dc2->win_task; - CDC *dc=DCAlias(dc2,task); - I64 i,j,dx,dy,dz,w=task->pix_width,h=task->pix_height,r[16],cx=w>>1; - F64 s,m,a,x1,y1,x2,y2; - Obj *tmpo; - - Mat4x4IdentEqu(r); - Mat4x4RotY(r,-é); - Mat4x4RotX(r,77*ã/180); - for (i=Gs->num;ix1=tmpo->x+vx; tmpo->y1=tmpo->y; tmpo->z1=tmpo->z+vz; - Mat4x4MulXYZ(r,&tmpo->x1,&tmpo->y1,&tmpo->z1); - if (tmpo->type==OT_SHEEP || - tmpo->type==OT_GOAT1 || tmpo->type==OT_GOAT2) { - dx=100*tmpo->dx; dy=100*tmpo->dy; dz=100*tmpo->dz; - Mat4x4MulXYZ(r,&dx,&dy,&dz); - if (dx<0) - tmpo->sym=TRUE; - else - tmpo->sym=FALSE; - } - if (tmpo->z1>=0) { - s=100.0/(AbsI64(tmpo->z1)+50); - if (tmpo->type) { - Mat4x4IdentEqu(dc->r); - Mat4x4Scale(dc->r,s*2); - DCMat4x4Set(dc,dc->r); - dc->flags|=DCF_TRANSFORMATION; - if (tmpo->sym) { - dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - DCSymmetrySet(dc,s*tmpo->x1+cx,s*tmpo->y1+h, - s*tmpo->x1+cx,s*tmpo->y1+h+10); - } - Sprite3B(dc,s*tmpo->x1+cx,s*tmpo->y1+h,tmpo->z1,imgs[tmpo->type]); - } else { - dc->flags&=~DCF_TRANSFORMATION; - dc->color=pebble_colors[tmpo->num&3]; - GrPlot3(dc,s*tmpo->x1+cx,s*tmpo->y1+h,tmpo->z1); - } - dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); - if (tmpo==&objs[O_BURNING_BUSH]) {//draw burning bush - dc->x=s*tmpo->x1+cx; - dc->y=s*tmpo->y1+h; - dc->z=tmpo->z1; - dc->pen_width=1; - dc->color=winmgr.updates&15; - for (j=0;j<45;j++) { - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x1,&y1,m,a); - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x2,&y2,m,a); - GrLine3(dc,20*x1,20*y1-25,0,20*x2,20*y2-25,0); - } - if (SqrI64(s*tmpo->x1)+SqrI64(s*tmpo->y1)<300*300) - horeb_done=TRUE; - } - } - } - dc->depth_buf=NULL; - DCDel(dc); - LBtr(&mp_not_done_flags,Gs->num); -} - -U0 DrawHoreb(CTask *task,CDC *dc) -{ - I64 i,x,y,z,w=task->pix_width,h=task->pix_height,r[16],cx=w>>1,cy=h>>1; - F64 s; - Mat4x4IdentEqu(r); - Mat4x4RotY(r,-é); - Mat4x4RotX(r,77*ã/180); -//Sun - x=vx; y=0; z=1000000+vz; - Mat4x4MulXYZ(r,&x,&y,&z); - s=100.0/(AbsI64(z)+50); - if (y<0) { - dc->color=BROWN; - GrCircle(dc,s*x+cx,15,15); - dc->color=YELLOW; - GrFloodFill(dc,s*x+cx,15); - } - DCDepthBufAlloc(dc); - mp_not_done_flags=1<color=LTRED; - GrPrint(dc,cx-21*FONT_WIDTH/2,cy-FONT_HEIGHT/2,"Find the Burning Bush."); - } -} diff --git a/Apps/AfterEgypt/HorebBSP.HC b/Apps/AfterEgypt/HorebBSP.HC deleted file mode 100644 index 4fcf136..0000000 --- a/Apps/AfterEgypt/HorebBSP.HC +++ /dev/null @@ -1,94 +0,0 @@ -I64 type_weights[OT_NUM_TYPES]={0,30,30,15,30,3,1,1,1}; - -I64 ObjCompare(Obj *o1,Obj *o2) -{ - return o2->z1-o1->z1; -} - -U0 DrawHoreb(CTask *task,CDC *dc) -{ - I64 i,j,x,y,z,dx,dy,dz, - w=task->pix_width, - h=task->pix_height,r[16], - cx=w>>1,cy=h>>1; - F64 s,m,a,x1,y1,x2,y2; - Obj *o_sort[O_NUM_OBJS+O_NUM_PEBBLES],*tmpo; - - Mat4x4IdentEqu(r); - Mat4x4RotY(r,-é); - Mat4x4RotX(r,77*ã/180); - - //Sun - x=vx; y=0; z=1000000+vz; - Mat4x4MulXYZ(r,&x,&y,&z); - s=100.0/(AbsI64(z)+50); - if (y<0) { - dc->color=BROWN; - GrCircle(dc,s*x+cx,15,15); - dc->color=YELLOW; - GrFloodFill(dc,s*x+cx,15); - } - - for (i=0;ix1=tmpo->x+vx; tmpo->y1=tmpo->y; tmpo->z1=tmpo->z+vz; - Mat4x4MulXYZ(r,&tmpo->x1,&tmpo->y1,&tmpo->z1); - if (tmpo->type==OT_SHEEP || - tmpo->type==OT_GOAT1 || tmpo->type==OT_GOAT2) { - dx=100*tmpo->dx; dy=100*tmpo->dy; dz=100*tmpo->dz; - Mat4x4MulXYZ(r,&dx,&dy,&dz); - if (dx<0) - tmpo->sym=TRUE; - else - tmpo->sym=FALSE; - } - } - QSortI64(o_sort,O_NUM_OBJS+O_NUM_PEBBLES,&ObjCompare); - - for (i=0;iz1<0) break; - s=100.0/(AbsI64(tmpo->z1)+50); - if (tmpo->type) { - Mat4x4IdentEqu(dc->r); - Mat4x4Scale(dc->r,s*2); - DCMat4x4Set(dc,dc->r); - dc->flags|=DCF_TRANSFORMATION; - if (tmpo->sym) { - dc->flags|=DCF_SYMMETRY|DCF_JUST_MIRROR; - DCSymmetrySet(dc,s*tmpo->x1+cx,s*tmpo->y1+h, - s*tmpo->x1+cx,s*tmpo->y1+h+10); - } - Sprite3B(dc,s*tmpo->x1+cx,s*tmpo->y1+h,0,imgs[tmpo->type]); - } else { - dc->flags&=~DCF_TRANSFORMATION; - dc->color=pebble_colors[tmpo->num&3]; - GrPlot3(dc,s*tmpo->x1+cx,s*tmpo->y1+h,tmpo->z1); - } - dc->flags&=~(DCF_SYMMETRY|DCF_JUST_MIRROR); - if (o_sort[i]==&objs[O_BURNING_BUSH]) {//draw burning bush - dc->x=s*tmpo->x1+cx; - dc->y=s*tmpo->y1+h; - dc->z=0; - - dc->pen_width=1; - dc->color=winmgr.updates&15; - for (j=0;j<45;j++) { - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x1,&y1,m,a); - m=Sqr(Rand); a=2*ã*Rand; - P2R(&x2,&y2,m,a); - GrLine3(dc,20*x1,20*y1-25,0,20*x2,20*y2-25,0); - } - - if (SqrI64(s*tmpo->x1)+SqrI64(s*tmpo->y1)<300*300) - horeb_done=TRUE; - } - } - - if (Blink) { - dc->color=LTRED; - GrPrint(dc,cx-21*FONT_WIDTH/2,cy-FONT_HEIGHT/2,"Find the Burning Bush."); - } -} diff --git a/Apps/AfterEgypt/HorebC.HC b/Apps/AfterEgypt/HorebC.HC deleted file mode 100644 index f0592dd..0000000 --- a/Apps/AfterEgypt/HorebC.HC +++ /dev/null @@ -1,144 +0,0 @@ -U0 AnimateTask(I64) -{ - I64 i; - F64 t; - Obj *tmpo; - while (TRUE) { - t=tS; - for (i=0;itype==OT_SHEEP || - tmpo->type==OT_GOAT1 || tmpo->type==OT_GOAT2) { - tmpo->x+=tmpo->dx; - tmpo->y+=tmpo->dy; - tmpo->z+=tmpo->dz; - tmpo->dx=5*Cos(0.5*t+tmpo->é); - tmpo->dz=5*Sin(0.5*t+tmpo->é); - } - } - Sleep(20); - } -} - -U0 Init() -{ - Obj *tmpo; - I64 i,j,k,total=0; - - for (i=0;inum=i; - tmpo->x=RandU32&0x1FFF-0x1000; - tmpo->y=0; - tmpo->z=RandU32&0x1FFF-0x1000; - tmpo->é=2*ã*Rand; - tmpo->sym=RandU16&1; - - if (itype=k; - } else - tmpo->type=OT_PEBBLE; - } - objs[O_BURNING_BUSH].type=OT_BUSH1; - - vx=0; vz=0; é=0; - horeb_done=FALSE; -} - -#define ANIMATE_STEPS 5 - -U0 AnimateéTask(F64 a) -{ - I64 i; - for (i=0;itext_attr=YELLOW<<4+BLUE; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS - -WIF_SELF_GRAB_SCROLL-WIF_FOCUS_TASK_MENU; - AutoComplete; - WinBorder; - WinMax; - DocClear; - "$$BG,LTCYAN$$%h6c",'\n'; - "$$BG,YELLOW$$%h30c",'\n'; - BibleVerse(,"Exodus,3:1",21); - Init; - Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); - Fs->draw_it=&DrawHoreb; - while (!horeb_done) - switch (GetKey(&sc)) { - case 0: - switch (sc.u8[0]) { - case SC_CURSOR_LEFT: - Spawn(&AnimateéTask,(-ã/100)(I64),"Animate é",,Fs); - break; - case SC_CURSOR_RIGHT: - Spawn(&AnimateéTask,( ã/100)(I64),"Animate é",,Fs); - break; - case SC_CURSOR_UP: - Spawn(&AnimateVTask,(-40.0 )(I64),"Animate V",,Fs); - break; - case SC_CURSOR_DOWN: - Spawn(&AnimateVTask,( 40.0 )(I64),"Animate V",,Fs); - break; - } - break; - case '\n': - Init; - break; - case CH_SHIFT_ESC: - case CH_ESC: - goto hr_done; - } -hr_done: //Don't goto out of try - } catch - Fs->catch_except=TRUE; - DocClear; - SettingsPop(Fs,TSF_SAME_SONG); - MenuPop; -} diff --git a/Apps/AfterEgypt/Load.HC b/Apps/AfterEgypt/Load.HC deleted file mode 100644 index f0bc9cd..0000000 --- a/Apps/AfterEgypt/Load.HC +++ /dev/null @@ -1,24 +0,0 @@ -#help_index "Games" - -Cd(__DIR__);; -#include "Comics" -#include "/Demo/Graphics/Camp" -#include "/Demo/MultiCore/Clouds" -#include "/Demo/Graphics/Mountain" -#include "Map" -#include "Battle" -#include "WaterRock" -#include "Quail" -#include "HorebA" - -#if mp_cnt>=4 - #include "HorebBMP" -#else - #include "HorebBSP" -#endif - -#include "HorebC" -#include "GodTalking" -#include "AfterEgypt" - -#help_index "" diff --git a/Apps/AfterEgypt/Map.HC b/Apps/AfterEgypt/Map.HC deleted file mode 100644 index 07bc555..0000000 --- a/Apps/AfterEgypt/Map.HC +++ /dev/null @@ -1,77 +0,0 @@ -I64 x=0,y=0; - -U0 DrawMap(CTask *,CDC *dc) -{ - static I64 last_x; - static Bool last_left; - if (xlast_x) - last_left=FALSE; - dc->pen_width=1; - if (last_left) - Sprite3(dc,x,y,0,left_imgs [ToI64(6.0*tS)&3]); - else - Sprite3(dc,x,y,0,right_imgs[ToI64(6.0*tS)&3]); - last_x=x; -} - -#define AE1_MIN 0.02 -#define AE1_MAX 0.05 -#define AE2_MIN 0.15 -#define AE2_MAX 0.30 - -U0 AEMap() -{ - I64 i=0, - cx=Fs->pix_width>>1, - cy=Fs->pix_height>>1, - c_min=MinI64(cx,cy), - *r=NULL, - x1=0,y1=0,z1=0, - x_last=x1,y_last=y1; - F64 a,a1=(AE1_MAX+AE1_MIN)/2,a2=(AE2_MAX+AE2_MIN)/2,a2_total=a2, - x_scale=ToF64(cx)/c_min,y_scale=ToF64(cy)/c_min; - CDC *dc=DCAlias; - - SettingsPush(Fs,TSF_SAME_SONG); //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Fs->text_attr=YELLOW<<4+BLUE; - DocClear; - "$$BG,YELLOW$$%h*c",TEXT_ROWS,'\n'; - BibleVerse(,"Exodus,16:35",3); - Fs->draw_it=&DrawMap; - try { - while (!ScanChar) { - dc->color=BLACK; - a1=Clamp(Wrap(a1+(AE1_MAX+AE1_MIN)/5.0*(Rand-0.5)),-AE1_MAX,AE1_MAX); - a=a1; - if ( 0.0<=a<=AE1_MIN) a=AE1_MIN; - if (-AE1_MIN<=a<=0.0) a=-AE1_MIN; - Free(r); - r=Mat4x4IdentNew; - Mat4x4RotZ(r,a); - Mat4x4MulXYZ(r,&x1,&y1,&z1); - - a2=Clamp(Wrap(a2+(AE2_MAX+AE2_MIN)/5.0*(Rand-0.5)),-AE2_MAX,AE2_MAX); - a=a2; - if ( 0.0<=a<=AE2_MIN) a=AE2_MIN; - if (-AE2_MIN<=a<=0.0) a=-AE2_MIN; - a2_total+=a; - - x1=ClampI64(x1+6.0*Cos(a2_total),-c_min+10,c_min-10); - y1=ClampI64(y1+6.0*Sin(a2_total),-c_min+10,c_min-10); - - x=x_scale*x1+cx; y=y_scale*y1+cy; - if (i++&1) - GrLine(dc,x_last,y_last,x,y); - x_last=x; y_last=y; - Sleep(15); - } - } catch - Fs->catch_except=TRUE; - DocClear; - SettingsPop(Fs,TSF_SAME_SONG); - Free(r); - DCFill(dc); - DCDel(dc); -} diff --git a/Apps/AfterEgypt/Quail.HC b/Apps/AfterEgypt/Quail.HC deleted file mode 100644 index 244f3a13b9f46e749e07edba132b63bbd6dc5df7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3062 zcmY#!a@R35RN>-O2@cRvvN5z%(sA;%HB{l^;)018LBx!Z#f%|h#wuJYPVQg{kOnA* z7-a%cVxr>|V5?+hrSFoOo3HO)lvt3FnOv;zn_rq&l9-vN=i#gur32$BsVL~{2jpkw zm82Fal;kTE7Zhcdq$*_QDX92(>nOpL>3KLS={VXdxp`XQGgwJQAuTf}m5WO`B{eNG zFIB-W)Hgmb)X~$2)6mEQE*k6|8Smlh>FyE2sbQdJrsW<4ZDZYq*Uq@WF!`+T5~BVIOXT(D5Rt&rsxzTrbL^^T65JZ z6h_1CjJ4+C0_iL<&?$+}Nh~h0=Hd!9P;eudxK{1F8Hl{?U#L%`RShvIgBoqt|DPxV4WE}$?gpYI#bW}W@bd+ph zv7w>~Qk|Axq@a;$Yhaye19zWwrna`G0?2;~3MD1BAw`)QC5GCC(V4M&U@z(z>KTAF zD=1{9DQJKtK)!|PQBVL2RcPC4lo;wlyr`)K7E7rBS*oA_RZ^*KYigi{qzWbrH@DIb z;RTTSoM2-rZ4si@ToAF83R|%ML5A0Ifk*`fq_6<%tIz>cmGHoTr(URkY86s*ic_I} zhdPote;|1R>eWhQ&nRjb*g)*IK{#F4$Uqa}sgz1vU9ggrN|>K2u>~RAT$nFGiNO}) zRZmcUDag-BEJ@WUDS^f~JS#)_@N5kAG~RFm84g$HR+O5mfg%Ers0up+1vNDVc!b*- z8fXP2=A~%Dq9-*m#Wo};)D;pcAh&}sBz4%97+Q1Hf^z{R2cRW+La7uSY!$X3`#cTJ zRNaH(!#!O>JRnwqB`d*_p@wFvh~P((PN@JTM38=MLue`jYfGuLH8RlB07>W?=$S$T z0xSj23Sd)_%>nt+&Cw?q>`jmdgHuaNGV{`l14@fCG~9}HLW14mgB^WcHg z^!0;NQz3;KvQluV=IdvLBBlZ=a*B2BN>VFI;uA|sifkiYeSG}GZEQ@moqQlc8=jfx zn+VQjF8RsMIjM<7Am=HmfQomBY84eFkdRYmQch}EYEf~jhK`b7X>L+#QL&Dpp_QSb zl8%K1*rzV}$szd#AjJXs1)&B0*&0g0$wm1&ISMKH<$0iDIW03Uvp7ScC^a!9GcR2) zCQpfrQ%Oa|J;>G7PesKh*u&E;MAtRg*-k~p&0R%Bp*$lsPa!2gFI7(oY(rRPYB|V! zOt<=kI7d4Asi>%CXeBG@gyeggnP?!QPT$SnF9cRN>!`=%se?>G^`&ZtX|fVjj!QwI z#K5*B7^DiC@|?y7ytkN z2ZaXL^Z)<WDH0rhyyYn>;Vu17Dq72UrkG1y}uy-%RQ%=H+W*uMP#{~r{0TrkG7|NsAk`~Z$skhP$& z1=$7*Z;&w{3{nINay~AQ_ZT2)8Dta#m|$RF*n^h9L7@$@2INF=`UNpSz5-#8`@uc~ zF+iaV!r>&2 z$SiP(gA4?P065lQ3{Z%JLIND(Af+H}Alr~b93%#^2;@FSNRWe=Ag6;2W8~oiQ6Tq$ sbbbJ(3Xn5E7J?l74kQ4R0cB6H3Xlwl0a6K80W$K_|Ns9%DnSAa0JymkG5`Po diff --git a/Apps/AfterEgypt/Run.HC b/Apps/AfterEgypt/Run.HC deleted file mode 100644 index 0b9d290..0000000 --- a/Apps/AfterEgypt/Run.HC +++ /dev/null @@ -1,3 +0,0 @@ -Cd(__DIR__);; -#include "Load" -AfterEgypt; diff --git a/Apps/AfterEgypt/WaterRock.HC b/Apps/AfterEgypt/WaterRock.HC deleted file mode 100644 index 39f94c17c2c031f07f280710b6628e0f5d7a05aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3531 zcmY#!a@R35QQ<-coGQTqI!ZQ%c1k)Rl`(D5rs*5nM1hAjs9xB|gY8#Ff*Oi!0PZK`S#iy*L_TY^-gyil-B@KXo8{xWAx$ zxM!ezxEE@zxwzcSOcY8C;#2a=^K?oK;!6vxxt#Lza}+=V@x>)Y`Pr$~TwI|B3NA&7 z<>84XsYOBg$=MptA&JG=3R)$J#o0Q}F3t*CDao2#)m#b+o@OQrnL0%}T%5@jwjgO; zyMoM$`0~t@k_dImx2PwgC)5I#UM7=T_qq^W}1Qq)PEsc^AU4$ZtUWo1@J416#g(6!+ zbC_sKvaVfneolUot&>lvD@@eA$T_npIVV*kC0QrALf6b#C%IDB$Uvt^6Q%;>mLfY_ zBTX(&_ae8P{QMNR%$yuF^-$HdTnY*x4AO%X>M-Y{`Bfk8bckIbT_q)U26~p3mX?~J zkby8kvb74SImM|MVOCn8sSizWAXN~*<1zyr*oJxrx+UPq06WxH1Cj!D4K=kO!k}2Q z4K66kEJ^juD@iRX$j?bEN!376r<;~hk5A4|N!3Zt&?!!~=HgON2u>|2 z$;?YH4k#_o&~Pi(2?=(K4|eo*jSu$sbJw(1(AN)6O;u3w@zzm7R;r}qXshJwXN4lB z!lj_#R;+7Rl3Gy`pIA~-WE<(~&QNyh~2Z3P9Tm^>8~CvP1?6&0J{ z07qw6J22NkMI|N=W(qW~*n;!8tpUVBq~vDn=I9d)P2nK-rxYcY$7hzAerZ%u`2eSOdLy!@h6 zh180YqC|!4)XMnM0)@1q{9J|NlEk7C-O>V(agYGQVm35@I6+xJK>?Cy6%=X}$}=)^ zQWZ2{PF6&5vO-ObLUM*8*oPjTZXxlm!OjY5YA`X^U}tDxK*LW5Ipm-rRjZJkSdyH< z1+p}tw8XU{IkfU`fJUwOkC03=r^xfq{XEfq{XMkr_mB{rUg@KSTyX zazQ8thJXM6|Nrp+|9>tR10-<|BmiTuFfcHD0SUkuYzz=>TrdVm0;C#jC`d0z;21~? z$k03g|NjSB4;BC^JM{nme~`p3n2Hns|NsB-|Ns9BAORTT)Bpef4}b(c_6QXJPopI$c4kV|NsA=19=<90D0{QNB|ZNAPJCP zxnK;CihZcz021l|g#$Av5EvL3hJHA_`v3nwI0@klhiCu){|AK>QhGS`|Ns9bpl|@C zNKjA=Y&d{i0FF9P@<+)RAOVoufBpaeAC#uS85ZPSP$Gw?hb#a8|9|oS|9=n-R{=@} zAb)}dE0nrbZ2MK@~aO*iZI6(gAfY=MA5K#cqfFcjkjja7YNFMA1kYWsZ Yu>bzU",BI=22$,$IB,"<23>",BI=23$},DRIBBLE_T/NUM_STOPPED_DRIBBLING_IMGS}, }; -RegSetDftEntry("TempleOS/KeepAway","I64 best_score0=0,best_score1=9999;\n"); -RegExeBranch("TempleOS/KeepAway"); +RegDft("TempleOS/KeepAway","I64 best_score0=0,best_score1=9999;\n"); +RegExe("TempleOS/KeepAway"); F64 game_t_end,foul_t_end; I64 score0,score1; @@ -283,7 +283,7 @@ U0 DrawObj(CDC *dc,Obj *o,F64 tt) tmps=SpriteInterpolate((tt-o->last_t0)/(o->next_t0-o->last_t0), imgs[o->last_img].img[o->team], imgs[o->next_img].img[o->team]); - SpriteY3B(dc,o->x,(o->y-o->z)/2,GR_Z_ALL-o->y,tmps,o->é); + Sprite3YB(dc,o->x,(o->y-o->z)/2,GR_Z_ALL-o->y,tmps,o->é); Free(tmps); } } @@ -442,8 +442,8 @@ U0 AnimateTask(CTask *parent_task) if (score0-score1>best_score0-best_score1) { best_score0=score0; best_score1=score1; - Snd(2000);Sleep(100); Snd(0);Sleep(100); - Snd(2000);Sleep(100); Snd(0);Sleep(100); + Snd(86);Sleep(100); Snd;Sleep(100); + Snd(86);Sleep(100); Snd;Sleep(100); } } @@ -498,13 +498,13 @@ U0 AnimateTask(CTask *parent_task) score1+=6; else score1+=2; - Noise(250,1000,1000); + Noise(250,74,74); } else { if (t0shooting) { if (o==human) { - dx=(ip.pos.x-parent_task->pix_left-parent_task->scroll_x)-o->x; - dy=(ip.pos.y-parent_task->pix_top-parent_task->scroll_y)*2-o->y; + dx=(ms.pos.x-parent_task->pix_left-parent_task->scroll_x)-o->x; + dy=(ms.pos.y-parent_task->pix_top-parent_task->scroll_y)*2-o->y; } else { if (!someone_has_ball && o->nearest_man_dd>4*MAN_SQR_RADIUS && o->nearest_ball) { @@ -551,7 +551,7 @@ U0 AnimateTask(CTask *parent_task) if (o==human && t0>o->foul_t0+1.0 && dt && d/dt>FOUL_VELOCITY_THRESHOLD && objs[j].team) { - Noise(250,500,500); + Noise(250,62,62); score1+=1; foul_t_end=t0+1.0; } @@ -577,33 +577,33 @@ U0 AnimateTask(CTask *parent_task) o->x=parent_task->pix_width-COURT_BORDER-1-o->radius; o->DxDt=-COLLISION_DAMP*o->DxDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->x-o->radiusx=COURT_BORDER+o->radius; o->DxDt=-COLLISION_DAMP*o->DxDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->y+o->radius*2>=(parent_task->pix_height-COURT_BORDER)*2) { o->y=(parent_task->pix_height-COURT_BORDER)*2-1-o->radius*2; o->DyDt=-COLLISION_DAMP*o->DyDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->y-o->radius*2<2*COURT_BORDER) { o->y=COURT_BORDER*2+o->radius*2; o->DyDt=-COLLISION_DAMP*o->DyDt; if (o==ball) - Noise(10,1000,2000); + Noise(10,74,86); } if (o->z-o->radius*2<0) { o->z=o->radius*2; o->DzDt=-COLLISION_DAMP*o->DzDt; if (o->DzDt>ROLL_VELOCITY_THRESHOLD) - Noise(10,1000,2000); + Noise(10,74,86); if (o!=ball) o->DzDt=0; } else if (o->z-o->radius*2>0) @@ -647,7 +647,7 @@ U0 Init() U0 KeepAway() { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; PopUpOk( "Pass or hand-off to your team to score points.$$FG$$\n\n" @@ -683,19 +683,19 @@ U0 KeepAway() try { while (TRUE) { - msg_code=GetMsg(&a1,&a2, - 1<DzDt=JUMP_VELOCITY; break; case MSG_KEY_DOWN: - switch (a1) { + switch (arg1) { case '\n': Init; break; @@ -715,7 +715,7 @@ ka_done: //Don't goto out of try } catch PutExcept; SettingsPop; - RegWriteBranch("TempleOS/KeepAway","I64 best_score0=%d,best_score1=%d;\n", + RegWrite("TempleOS/KeepAway","I64 best_score0=%d,best_score1=%d;\n", best_score0,best_score1); MenuPop; } diff --git a/Apps/Logic/Logic.HC b/Apps/Logic/Logic.HC index 9b9aebe..d400140 100644 --- a/Apps/Logic/Logic.HC +++ b/Apps/Logic/Logic.HC @@ -114,7 +114,7 @@ U0 Init() "Too large\n"; else if (table_size<1) { "No table specified, aborting.\n"; - ThrowBreak; + throw; } } while (table_size>MAX_TABLE_SIZE); @@ -148,7 +148,7 @@ U0 Init() } if (!num_inputs_entered) { "No inputs specified, aborting.\n"; - ThrowBreak; + throw; } "\nEnter the hex truth table columns values of the outputs.\n"; @@ -174,7 +174,7 @@ U0 Init() if (!num_outputs_entered) { "No output specified, aborting.\n"; - ThrowBreak; + throw; } } diff --git a/Apps/Psalmody/Examples/childish.HC b/Apps/Psalmody/Examples/childish.HC index 1509e68..83938fd 100644 --- a/Apps/Psalmody/Examples/childish.HC +++ b/Apps/Psalmody/Examples/childish.HC @@ -7,18 +7,18 @@ U0 Song() music.stacatto_factor= 0.902; try { while (!ScanKey) { - Play("3qEsCDCDqCDeEGsEBEBeCBsDADA", + Play("5qEsCDCDqCDeEGsE4B5E4B5eC4B5sD4A5D4A", "Be \0like \0 \0a \0 \0child \0 \0 \0 \0" "some \0 \0re\0 \0spect.\n\0 \0 \0 \0 \0 \0"); - Play("qEsCDCDqCDeEGsEBEBeCBsDADA", + Play("5qEsCDCDqCDeEGsE4B5E4B5eC4B5sD4A5D4A", "Ma\0tur\0 \0i\0 \0ty \0 \0 \0 \0don't \0 \0" "ne\0 \0glect.\n\0 \0 \0 \0 \0 \0"); - Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); - Play("eBDqF2sG3A2G3AqAAAetDAAsDBDB"); + Play("4eB5DqF4sGAGAqAAA5etD4AA5sD4B5D4B"); + Play("4eB5DqF4sGAGAqAAA5etD4AA5sD4B5D4B"); } } catch PutExcept; - Snd(0); + Snd; } Song; diff --git a/Apps/Psalmody/Examples/night.HC b/Apps/Psalmody/Examples/night.HC index b712774c9c9e36f2c6d48ebe3c47c37517f5a5f4..e1457da50743b2c2841e8110936461103d41c679 100644 GIT binary patch delta 84 zcmX>oby{k}auzOAw?daf7n4*+)5+^t!qB(^rY?oI?tZiQ}zu7$29lk-`tbx>-I?tZiQ}zu7$3X%UQiKg`78wvYD|1 E0K>Q#bpQYW diff --git a/Apps/Psalmody/Examples/prosper.HC b/Apps/Psalmody/Examples/prosper.HC index 50a8e32eb3f1634994a69403a90bcf30913e74a6..310557bc92b14b8ccdd0e23e6ed1abc9c4bac58d 100644 GIT binary patch delta 81 zcmeyS-Jr8UhndT?(A~t{)WyWfbg~I^AEzmtcY-;T*VHxD-OZ%X$;s5k#Bp*DOOU97 SLO@PprG^rU%;p}JEI|OZ6Bg|N delta 67 zcmZqB`KG-=hnd5;(A~)0*u`nG8FL>SlzEmpl*={M-L25c$;HuVvOY@`w=oJoX!8pe G2|)m$#}jb? diff --git a/Apps/Psalmody/Help.DD b/Apps/Psalmody/Help.DD index 49b517a..1948097 100644 --- a/Apps/Psalmody/Help.DD +++ b/Apps/Psalmody/Help.DD @@ -1,6 +1,6 @@ $WW,1$$FG,5$$TX+CX,"Psalmody Help"$$FG$ -* The keyboard can be used as an organ by typing letter keys or clicking the mouse on the keyboard diagram$FG$. You can "record" notes by pressing the red button and typing letters. They will appear on the musical staff. You can edit and save them. +* The keyboard can be used as an organ by typing letter keys or clicking the mouse on the keyboard diagram$FG$. You can "record" notes by pressing the red bttn and typing letters. They will appear on the musical staff. You can edit and save them. * The clipboard can be used to cut and paste. @@ -8,7 +8,7 @@ $WW,1$$FG,5$$TX+CX,"Psalmody Help"$$FG$ * The first line of the $LK,"HolyC",A="FI:::/Doc/HolyC.DD"$ song files is a comment with a category recognized by $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$(). The categories are $FG,2$"no nothing"$FG$, $FG,2$"has words"$FG$, $FG,2$"has graphics"$FG$, or $FG,2$"special"$FG$. The third character in the song comment is a digit rating number, shown in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$(). You can set the song rating in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$() by pressing $FG,2$0$FG$-$FG,2$9$FG$. You can press $FG,2$$FG$ to delete songs. -* You can take the $LK,"Play",A="MN:Play"$() stmts out of a song file and place them in your programs. You can also add a song to a document with $FG,2$$FG$, but you should do it after pressing $FG,2$$FG$ because the clipboard-insert in $FG,2$$FG$ is screwy. See this $SO,"",A="2qG3ECB2eGG3qCeFDsBGBG2qG3ECB2eGG3qCeFDsBGBGqEeEFqEB2eG3FetCAGqFCEeEFqEB2eG3FetCAGqFC"$ after pressing $FG,2$$FG$, now. +* You can take the $LK,"Play",A="MN:Play"$() stmts out of a song file and place them in your programs. You can also add a song to a document with $FG,2$$FG$, but you should do it after pressing $FG,2$$FG$ because the clipboard-insert in $FG,2$$FG$ is screwy. See this $SO,"",A="4qG5EC4BeGG5qCeFD4sB5G4B5G4qG5EC4BeGG5qCeFD4sB5G4B5GqEeEFqE4BeG5FetC4A5GqFCEeEFqE4BeG5FetC4A5GqFC"$ after pressing $FG,2$$FG$, now. * You can call $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.HC,JukeBox"$("~/Psalmody"); to play your songs. diff --git a/Apps/Psalmody/JukeBox.HC b/Apps/Psalmody/JukeBox.HC index 91719ad..e98795b 100644 --- a/Apps/Psalmody/JukeBox.HC +++ b/Apps/Psalmody/JukeBox.HC @@ -3,10 +3,10 @@ CTask *SingleSong(U8 *msg,U8 *name) CTask *task=Spawn(&SrvCmdLine,NULL,name,,Fs); StrCpy(task->task_title,name); task->title_src=TTS_LOCKED_CONST; - TaskExe(task,Fs,";",1<win_left,task->win_left+50,task); WinVert(2,2+8,task); - TaskExe(task,NULL,msg,1<max_entries=100; return task; } diff --git a/Apps/Psalmody/Psalmody.HC b/Apps/Psalmody/Psalmody.HC index 99ffb2f..591e10e 100644 --- a/Apps/Psalmody/Psalmody.HC +++ b/Apps/Psalmody/Psalmody.HC @@ -5,13 +5,13 @@ This uses four types of ctrls 2) The $LK,"CCtrl",A="MN:CCtrl"$ type for the tempo/stacatto sliders. - 3) The active $LK,"CDoc",A="MN:CDoc"$ sprite buttons with macros for left/record/play/right. + 3) The active $LK,"CDoc",A="MN:CDoc"$ sprite bttns with macros for left/record/play/right. 4) Hand-made ctrls for the kbdgraphic, notes and staff. This uses four types of output - 1) The $LK,"CDoc",A="MN:CDoc"$ for the text and buttons and kbdgraphic. + 1) The $LK,"CDoc",A="MN:CDoc"$ for the text and bttns and kbdgraphic. 2) The Fs->draw_it() for the staff region, drawn every refresh. @@ -22,9 +22,6 @@ This uses four types of output See $LK,"GrUpdateTaskWin",A="MN:GrUpdateTaskWin"$(), $LK,"GrUpdateTasks",A="MN:GrUpdateTasks"$() and $LK,"GrUpdateScrn",A="MN:GrUpdateScrn"$(). $WW,1$$WW,0$*/ -#define NOTE_REST MIN_I64 -#define OCTAVE_REST MIN_I64 - #define PSMT_HEAD 0 #define PSMT_NOTE 1 #define PSMT_METER 2 @@ -41,14 +38,7 @@ class PsmNote I64 x,y; U8 *word; I64 type,flags; - union { - I64 note; - I64 meter_top; - }; - union { - I64 octave; - I64 meter_bottom; - } + I64 ona,meter_top,meter_bottom; I64 duration,width; U8 ascii[32]; }; @@ -62,8 +52,7 @@ class PsmCtrl PsmNote head; PsmNote clipboard; CMenuEntry *incomplete_entry,*record_entry; - I64 scrn_x, - tool; + I64 scrn_x,tool; PsmNote *cur_note; CDC *dc2; Bool playing; diff --git a/Apps/Psalmody/PsalmodyCtrls.HC b/Apps/Psalmody/PsalmodyCtrls.HC index 5f5e3b9..3e9430a 100644 --- a/Apps/Psalmody/PsalmodyCtrls.HC +++ b/Apps/Psalmody/PsalmodyCtrls.HC @@ -69,7 +69,7 @@ CCtrl *TempoNew() { CCtrl *c=CAlloc(sizeof(CCtrl)); c->win_task=Fs; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; c->state=&tempo_state; c->draw_it=&DrawTempoCtrl; diff --git a/Apps/Psalmody/PsalmodyDraw.HC b/Apps/Psalmody/PsalmodyDraw.HC index 438b0f4..48c5685 100644 --- a/Apps/Psalmody/PsalmodyDraw.HC +++ b/Apps/Psalmody/PsalmodyDraw.HC @@ -53,13 +53,10 @@ $ID,-8$ F64 psm_durations[PSM_NUM_DURATIONS+1]={ 2*.25/3,.25,2*.5/3,.5,2.0/3.0,0.5*1.5,1.0,1.5,2.0,3.0,4.0,6.0,1000000.0}; U8 *psm_duration_lst="st\0s\0et\0e\0qt\0e.\0q\0q.\0h\0h.\0w\0w.\0"; -U8 *psm_duration_imgs[PSM_NUM_DURATIONS]={$IB,"<1>",BI=1$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$, - $IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<3>",BI=3$, - $IB,"<4>",BI=4$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<5>",BI=5$}; +U8 *psm_duration_imgs[PSM_NUM_DURATIONS]={ + $IB,"<1>",BI=1$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<5>",BI=5$}; Bool psm_triplet_durations[PSM_NUM_DURATIONS]={TRUE,FALSE,TRUE, - FALSE,TRUE,FALSE,FALSE,FALSE, - FALSE,FALSE,FALSE,FALSE}; - + FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE}; Bool PsmBlink() { @@ -117,7 +114,7 @@ U0 PsmSetOctave(I64 octave) I64 i; U8 buf[STR_LEN]; CMenuEntry *tmpse; - for (i=0;i<=6;i++) { + for (i=1;i<=7;i++) { StrPrint(buf,"Snd/Octave%d",i); if (tmpse=MenuEntryFind(Fs->cur_menu,buf)) { if (i==octave) @@ -149,7 +146,7 @@ U0 PsmRecalcNoteXY() { F64 measure_len=4,measure_left=measure_len; PsmNote *tmpn=psm.head.next; - I64 x=8-psm.scrn_x,note,octave; + I64 x=8-psm.scrn_x,ona,note,octave; while (TRUE) { tmpn->x=x; tmpn->y=50; @@ -157,22 +154,18 @@ U0 PsmRecalcNoteXY() break; else { if (tmpn->type!=PSMT_METER) { - octave=tmpn->octave; - if (octave!=OCTAVE_REST) { - note=tmpn->note; + if (tmpn->ona!=ONA_REST) { + ona=tmpn->ona; if (Bt(&tmpn->flags,PSMf_SHARP)) - note--; + ona--; if (Bt(&tmpn->flags,PSMf_FLAT)) - note++; - if (note<0) { - note=11; - octave--; - } else if (note>11) { - note=0; - octave++; - } + ona++; + octave=Ona2Octave(ona); + note =Ona2Note (ona); note=music.note_map[*LstSub(note,psm_note_lst)-'A']; - tmpn->y=(15+(psm_note_map[note]-7*(octave-2)))*4; + if (note<3) + octave++; + tmpn->y=(15+(psm_note_map[note]-7*(octave-4)))*4; } } x+=tmpn->width; @@ -237,7 +230,7 @@ U0 DrawIt(CTask *task,CDC *dc) } else if (tmpn->flags&PSMF_SEL) dc->color=RED; else { - if (tmpn->note!=NOTE_REST) + if (tmpn->ona!=ONA_REST) dc->color=BLACK; else dc->color=LTGRAY; @@ -314,21 +307,19 @@ U0 DrawPickTools() psm.dc2->color=ROPF_DITHER+WHITE<<16+RED; else psm.dc2->color=ROPF_DITHER+WHITE<<16+BLACK; - GrBorder(psm.dc2,PSM_TOOLS_X,PSM_TOOLS_Y, - PSM_TOOLS_X+10,PSM_TOOLS_Y+10); + GrBorder(psm.dc2,PSM_TOOLS_X,PSM_TOOLS_Y,PSM_TOOLS_X+10,PSM_TOOLS_Y+10); if (psm.tool==PSMTT_PTR_TOOL) psm.dc2->color=RED; else psm.dc2->color=BLACK; - (*gr.fp_draw_input_ptr)(psm.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y); + (*gr.fp_draw_ms)(psm.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y); psm.dc2->color=BLACK; } Bool PsmGetPickToolBox(I64 xx,I64 yy) { - if (PSM_TOOLS_X<=xxflags,PSMf_FLAT); note--; st++; + if (note<0) //Ab + note=11; + else if (note==2) //Cb + *psm_octave-=1; } else if (*st=='#') { Bts(&tmpn->flags,PSMf_SHARP); note++; st++; + if (note>11) //G# + note=0; + else if (note==3) //B# + *psm_octave+=1; } - if (note<0) { - note=11; - *psm_octave-=1; - } else if (note>11) { - note=0; - *psm_octave+=1; - } - tmpn->note=note; - tmpn->octave=*psm_octave; - } else { - tmpn->note=NOTE_REST; - tmpn->octave=OCTAVE_REST; - } + tmpn->ona=Note2Ona(note,*psm_octave); + } else + tmpn->ona=ONA_REST; if (*psm_duration<=2*.25/3) i=0; else if (*psm_duration<=.25) @@ -251,11 +249,11 @@ U8 *PsmCvtSong() { PsmNote *tmpn; U8 *st,*src,*dst; - I64 i,note,octave,last_octave,last_duration; + I64 i,ona,note,octave,last_octave,last_duration; i=0; tmpn=psm.head.next; - last_octave=OCTAVE_REST; + last_octave=MIN_I64; last_duration=-1; while (tmpn!=&psm.head) { dst=&tmpn->ascii; @@ -265,25 +263,19 @@ U8 *PsmCvtSong() *dst++='/'; *dst++=tmpn->meter_bottom+'0'; } else { - octave=tmpn->octave; - note=tmpn->note; - if (note!=NOTE_REST) { + if (tmpn->ona!=ONA_REST) { + ona=tmpn->ona; if (Bt(&tmpn->flags,PSMf_SHARP)) - note--; + ona--; if (Bt(&tmpn->flags,PSMf_FLAT)) - note++; - if (note<0) { - note=11; - octave--; - } else if (note>11) { - note=0; - octave++; - } + ona++; + octave=Ona2Octave(ona); + note =Ona2Note (ona); note=music.note_map[*LstSub(note,psm_note_lst)-'A']; } if (Bt(&tmpn->flags,PSMf_TIE)) *dst++='('; - if (octave!=last_octave && note!=NOTE_REST) { + if (octave!=last_octave && tmpn->ona!=ONA_REST) { *dst++=octave+'0'; last_octave=octave; } @@ -294,7 +286,7 @@ U8 *PsmCvtSong() *dst++=src[1]; last_duration=tmpn->duration; } - if (note!=NOTE_REST) { + if (tmpn->ona!=ONA_REST) { src=LstSub(note,psm_note_lst); *dst++=src[0]; if (src[1]) @@ -419,7 +411,7 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) " }\n" " } catch\n" " PutExcept;\n" - " Snd(0);\n" + " Snd;\n" "}\n" "\n" "Song;\n"); diff --git a/Apps/Psalmody/PsalmodyMain.HC b/Apps/Psalmody/PsalmodyMain.HC index 2c986b8..751964c 100644 --- a/Apps/Psalmody/PsalmodyMain.HC +++ b/Apps/Psalmody/PsalmodyMain.HC @@ -41,43 +41,27 @@ U0 PsmRightClick(I64 x,I64 y) } else { switch (i) { case PSMR_REST: - if (tmpn->type==PSMT_NOTE) { - tmpn->octave=OCTAVE_REST; - tmpn->note=NOTE_REST; - } + if (tmpn->type==PSMT_NOTE) + tmpn->ona=ONA_REST; break; case PSMR_SHARP: - if (tmpn->type==PSMT_NOTE && tmpn->octave!=OCTAVE_REST) { + if (tmpn->type==PSMT_NOTE && tmpn->ona!=ONA_REST) { if (Btr(&tmpn->flags,PSMf_FLAT)) - tmpn->note++; + tmpn->ona++; if (Btc(&tmpn->flags,PSMf_SHARP)) - tmpn->note--; + tmpn->ona--; else - tmpn->note++; - if (tmpn->note<0) { - tmpn->note=11; - tmpn->octave--; - } else if (tmpn->note>11) { - tmpn->note=0; - tmpn->octave++; - } + tmpn->ona++; } break; case PSMR_FLAT: - if (tmpn->type==PSMT_NOTE && tmpn->octave!=OCTAVE_REST) { + if (tmpn->type==PSMT_NOTE && tmpn->ona!=ONA_REST) { if (Btr(&tmpn->flags,PSMf_SHARP)) - tmpn->note--; + tmpn->ona--; if (Btc(&tmpn->flags,PSMf_FLAT)) - tmpn->note++; + tmpn->ona++; else - tmpn->note--; - if (tmpn->note<0) { - tmpn->note=11; - tmpn->octave--; - } else if (tmpn->note>11) { - tmpn->note=0; - tmpn->octave++; - } + tmpn->ona--; } break; case PSMR_TIE: @@ -123,35 +107,35 @@ U0 PsmRightClick(I64 x,I64 y) U0 PsmLeftClickPickNoteBox(I64 duration) { - I64 o,n,msg_code,a1,a2; + I64 o,n,msg_code,arg1,arg2; PsmNote *tmpn,*tmpn1; do { - msg_code=GetMsg(&a1,&a2,1<psm.head.last->x) + } while (msg_code!=MSG_MS_L_UP); + if (arg2<13*FONT_HEIGHT) { + if (arg1>psm.head.last->x) tmpn1=psm.head.last; - else if (a1x) + else if (arg1x) tmpn1=&psm.head; else - tmpn1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); + tmpn1=PsmFindNote(arg1-PSM_NOTE_SPACING/2,arg2); tmpn=CAlloc(sizeof(PsmNote)); tmpn->type=PSMT_NOTE; - a2=a2/4-15; - n=-a2%7; - o=2+a2/-7; - n=-n; + arg2=arg2/4-15; + n=arg2%7; + o=4+arg2/-7; if (n<0) { n+=7; o++; } n=psm_note_inverse_map[n]; - tmpn->note=n; - tmpn->octave=o; + if (n<3) + o--; + tmpn->ona=Note2Ona(n,o); tmpn->duration=duration; PsmSetWidth(tmpn); QueIns(tmpn,tmpn1); @@ -162,22 +146,22 @@ U0 PsmLeftClickPickNoteBox(I64 duration) U0 PsmLeftClickPickMeterBox(I64 top,I64 bottom) { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; PsmNote *tmpn,*tmpn1; do { - msg_code=GetMsg(&a1,&a2,1<=psm.head.x) + } while (msg_code!=MSG_MS_L_UP); + if (arg2<13*FONT_HEIGHT) { + if (arg1>=psm.head.x) tmpn1=psm.head.last; - else if (a1x) + else if (arg1x) tmpn1=&psm.head; else - tmpn1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); + tmpn1=PsmFindNote(arg1-PSM_NOTE_SPACING/2,arg2); tmpn=CAlloc(sizeof(PsmNote)); tmpn->type=PSMT_METER; tmpn->meter_top=top; @@ -192,40 +176,39 @@ U0 PsmLeftClickPickMeterBox(I64 top,I64 bottom) U0 PsmLeftClickStaffPtr(I64 x,I64 y) { PsmNote *tmpn,*tmpn1; - I64 o,n,msg_code,a1,a2,n_original,o_original; + I64 o,n,msg_code,arg1,arg2,n_original,o_original; psm.cur_note=tmpn=PsmFindNote(x,y); if (tmpn!=&psm.head) { if (tmpn->type==PSMT_NOTE) { - n_original=tmpn->note; - o_original=tmpn->octave; + o_original=Ona2Octave(tmpn->ona); + n_original=Ona2Note (tmpn->ona); do { - msg_code=GetMsg(&a1,&a2,1<word); tmpn1->word=tmpn->word; tmpn->word=NULL; - tmpn->note=n_original; - tmpn->octave=o_original; + tmpn->ona=Note2Ona(n_original,o_original); } } else { move_note: - a2=a2/4-15; - n=-a2%7; - o=2+a2/-7; - n=-n; + arg2=arg2/4-15; + n=arg2%7; + o=4+arg2/-7; if (n<0) { n+=7; o++; } n=psm_note_inverse_map[n]; - tmpn->note=n; - tmpn->octave=o; + if (n<3) + o--; + tmpn->ona=Note2Ona(n,o); } - } while (msg_code!=MSG_IP_L_UP); + } while (msg_code!=MSG_MS_L_UP); PsmSetWidth(tmpn); } } @@ -233,17 +216,17 @@ move_note: U0 PsmLeftClickStaffBox(I64 x,I64 y) { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; do { - msg_code=GetMsg(&a1,&a2,1<color=ROPF_DITHER+WHITE<<16+BLACK; - GrBorder(psm.dc2,x,y,a1,a2); - if (msg_code==MSG_IP_L_UP) { - if (x>a1) SwapI64(&x,&a1); - PsmMarkSel(x,a1,TRUE); + GrBorder(psm.dc2,x,y,arg1,arg2); + if (msg_code==MSG_MS_L_UP) { + if (x>arg1) SwapI64(&x,&arg1); + PsmMarkSel(x,arg1,TRUE); } - } while (msg_code!=MSG_IP_L_UP); + } while (msg_code!=MSG_MS_L_UP); DrawDC2; } @@ -366,14 +349,12 @@ U0 PsmPopMode() U0 Psalmody(U8 *dirname="~/Psalmody") { - Bool was_playing; - I64 a1,a2,msg_code=0,col, - note=NOTE_REST,octave=OCTAVE_REST,psm_octave=3,timeout_val,timeout_val2, - old_doc_flags; + Bool was_playing,is_null=TRUE,was_null=TRUE; + I64 arg1,arg2,msg_code=0,col,ona=ONA_REST,last_ona=ONA_REST, + psm_octave=4,timeout_val,timeout_val2,old_doc_flags; U8 *filename=NULL,*st,*st2; PsmNote *tmpn; - F64 f=0,last_f=0,psm_duration=1.0, - d,evt_time=tS,note_down_time=tS; + F64 psm_duration=1.0,d,evt_time=tS,note_down_time=tS; CCtrl *c=TempoNew; if (DocPut) old_doc_flags=DocPut->flags; @@ -421,13 +402,13 @@ U0 Psalmody(U8 *dirname="~/Psalmody") " MarkIncomplete(MSG_CMD,PSMF_INCOMPLETE);" "}" "Snd {" - " Octave0(,'0');" " Octave1(,'1');" " Octave2(,'2');" " Octave3(,'3');" " Octave4(,'4');" " Octave5(,'5');" " Octave6(,'6');" + " Octave7(,'7');" "}" "Help {" " Help(,,SC_F1);" @@ -449,23 +430,23 @@ U0 Psalmody(U8 *dirname="~/Psalmody") while (TRUE) { was_playing=FALSE; mo_start: - if (ip.pos_text.y-Fs->win_top<18) - msg_code=GetMsg(&a1,&a2,1<win_top<18) + msg_code=GetMsg(&arg1,&arg2,1< when the Doc Buttons are clicked. + if (msg_code==MSG_KEY_DOWN && arg1==CH_SPACE && !arg2) { +//The Window Mgr sets the Doc cur_entry to a bttn + //and generates a when the Doc Bttns are clicked. //This is so that kbd and mouse are the same for Doc's. - //We must now pass the onto the Doc handler. - PutKey(a1,a2); + //We must now pass the onto the Doc hndlr. + PutKey(arg1,arg2); goto mo_start; } - if (msg_code!=MSG_IP_MOVE) { + if (msg_code!=MSG_MS_MOVE) { DocBottom; if (was_playing || DocPut->cur_entry->y>=Fs->win_height-2) { PsmMenu(psm_octave); @@ -473,11 +454,12 @@ mo_got_msg: } } - octave=psm_octave; + ona=Note2Ona(3,psm_octave+1); //C + is_null=TRUE; switch (msg_code) { case MSG_CMD: PsmPopMode; - switch (a1) { + switch (arg1) { case PSMF_CD: st2=dirname; if (dirname=PopUpPickDir) { @@ -496,75 +478,71 @@ mo_got_msg: break; case MSG_KEY_DOWN: evt_time=tS; - if ('0'<=a1<='9') { - psm_octave=a1-'0'; + if ('0'<=arg1<='9') { + psm_octave=arg1-'0'; PsmMenu(psm_octave); col=0; } else { - switch (a1) { + switch (arg1) { start: - case 'a': note=7; octave--; break; - case 's': note=8; octave--; break; - case 'e': note=9; octave--; break; - case 'd': note=10; octave--; break; - case 'r': note=11; octave--; break; - case 'f': note=0; break; - case 't': note=1; break; - case 'g': note=2; break; - case 'h': note=3; break; - case 'u': note=4; break; - case 'j': note=5; break; - case 'i': note=6; break; - case 'k': note=7; break; - case 'l': note=8; break; - case 'p': note=9; break; - case ';': note=10; break; - case '[': note=11; break; - case '\'': note=0; octave++; break; - case ']': note=1; octave++; break; + case 'a': ona-=8; break; + case 's': ona-=7; break; + case 'e': ona-=6; break; + case 'd': ona-=5; break; + case 'r': ona-=4; break; + case 'f': ona-=3; break; + case 't': ona-=2; break; + case 'g': ona--; break; + case 'h': break; + case 'u': ona++; break; + case 'j': ona+=2; break; + case 'i': ona+=3; break; + case 'k': ona+=4; break; + case 'l': ona+=5; break; + case 'p': ona+=6; break; + case ';': ona+=7; break; + case '[': ona+=8; break; + case '\'': ona+=9; break; + case ']': ona+=10; break; + case CH_SPACE: ona=ONA_REST; break; end: - f=Note2Freq(note,octave); - break; - case CH_SPACE: - note=NOTE_REST; - octave=OCTAVE_REST; - f=-1; //rest + is_null=FALSE; break; case 0: - switch (a2.u8[0]) { + switch (arg2.u8[0]) { case SC_CURSOR_LEFT: - if (a2&SCF_CTRL) { + if (arg2&SCF_CTRL) { while (psm.cur_note->last!=&psm.head) { psm.cur_note=psm.cur_note->last; if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); } } else { if (psm.cur_note->last!=&psm.head) { psm.cur_note=psm.cur_note->last; if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); } } break; case SC_CURSOR_RIGHT: - if (a2&SCF_CTRL) { + if (arg2&SCF_CTRL) { while (psm.cur_note!=&psm.head) { if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); psm.cur_note=psm.cur_note->next; } } else { if (psm.cur_note!=&psm.head) { if (psm.cur_note!=&psm.head) - LBEqu(&psm.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); + LBEqu(&psm.cur_note->flags,PSMf_SEL,arg2&SCF_SHIFT); psm.cur_note=psm.cur_note->next; } } break; case SC_DELETE: - if (a2&SCF_SHIFT) + if (arg2&SCF_SHIFT) PsmCutToClipboard; else { tmpn=psm.cur_note; @@ -576,9 +554,9 @@ mo_got_msg: } break; case SC_INS: - if (a2&SCF_SHIFT) + if (arg2&SCF_SHIFT) PsmPasteClipboard; - else if (a2&SCF_CTRL) + else if (arg2&SCF_CTRL) PsmCopyToClipboard; break; case SC_F1: @@ -615,7 +593,7 @@ mo_got_msg: if (filename) { psm.scrn_x=0; psm_duration=1.0; - psm_octave=3; + psm_octave=4; PsmSongDel(&psm.head); psm.cur_note=&psm.head; PsmLoadSong(filename,&psm_octave,&psm_duration); @@ -645,7 +623,7 @@ mo_got_msg: Free(filename); filename=NULL; psm_duration=1.0; - psm_octave=3; + psm_octave=4; PsmSongDel(&psm.head); psm.cur_note=&psm.head; psm.scrn_x=0; @@ -664,19 +642,18 @@ mo_got_msg: while (tmpn!=&psm.head) { if (tmpn->type!=PSMT_METER) { timeout_val=cnts.jiffies; - if (ip.pos_text.y-Fs->win_top<18) - msg_code=ScanMsg(&a1,&a2,1<win_top<18) + msg_code=ScanMsg(&arg1,&arg2,1<win_top>=18 && - msg_code==MSG_IP_L_DOWN) + if (ms.pos_text.y-Fs->win_top>=18 && + msg_code==MSG_MS_L_DOWN) goto mo_start; else goto mo_got_msg; @@ -685,16 +662,7 @@ mo_got_msg: psm.scrn_x+=tmpn->x-0.33*GR_WIDTH; if (PsmHasWords(tmpn->word)) "%s",tmpn->word; - note=tmpn->note; - octave=tmpn->octave; - if (note!=NOTE_REST) - f=Note2Freq(note,octave); - else - f=-1; //rest - if (f>0) - Snd(f); - else - Snd(0); + Snd(tmpn->ona); music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; music.stacatto_factor= @@ -709,7 +677,7 @@ mo_got_msg: d*(1.0-music.stacatto_factor); } SleepUntil(timeout_val); - Snd(0); + Snd; SleepUntil(timeout_val2); } tmpn=tmpn->next; @@ -719,8 +687,7 @@ mo_got_msg: psm.playing=FALSE; PsmMenu(psm_octave); col=0; - f=0; - Snd(0); + Snd; break; case CH_BACKSPACE: tmpn=psm.cur_note->last; @@ -739,7 +706,7 @@ mo_got_msg: else { psm.record_entry->checked=TRUE; psm_duration=1.0; - psm_octave=3; + psm_octave=4; psm.scrn_x=0; } PsmMenu(psm_octave); @@ -756,57 +723,55 @@ mo_got_msg: break; case MSG_KEY_UP: evt_time=tS; - f=0; break; - case MSG_IP_MOVE: - if (a2>18*FONT_HEIGHT) + case MSG_MS_MOVE: + if (arg2>18*FONT_HEIGHT) Fs->win_inhibit=WIG_USER_TASK_DFT; else Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER -WIF_FOCUS_TASK_MENU-WIF_SELF_CTRLS; break; - case MSG_IP_L_DOWN: - PsmDownKey(a1,a2); - PsmLeftClick(a1,a2); + case MSG_MS_L_DOWN: + PsmDownKey(arg1,arg2); + PsmLeftClick(arg1,arg2); break; - case MSG_IP_L_UP: - PsmUpKey(a1,a2); + case MSG_MS_L_UP: + PsmUpKey(arg1,arg2); break; default: - PsmRightClick(a1,a2); + PsmRightClick(arg1,arg2); } - if (f!=last_f) { - if (f>0) { - st=LstSub(note,psm_note_lst); - Snd(f); - } else { - if (f<0) - st="R"; - else + if (is_null) + ona=ONA_REST; + if (ona!=last_ona || is_null!=was_null) { + if (ona==ONA_REST) { + if (is_null) st=""; - Snd(0); - } + else + st="R"; + } else + st=LstSub(Ona2Note(ona),psm_note_lst); + Snd(ona); if (psm.record_entry->checked) { - if (last_f) { + if (!was_null) { music.tempo=4.4*tempo_state.tempo/TEMPO_RANGE+0.5; music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; - tmpn->duration=PsmCvtDuration( music.tempo*(evt_time-note_down_time)); PsmSetWidth(tmpn); QueIns(tmpn,psm.cur_note->last); } - if (f) { + if (!is_null) { note_down_time=tS; tmpn=CAlloc(sizeof(PsmNote)); tmpn->type=PSMT_NOTE; - tmpn->note=note; - tmpn->octave=octave; + tmpn->ona=ona; if (st[1]=='#') Bts(&tmpn->flags,PSMf_SHARP); } } - last_f=f; + last_ona=ona; + was_null=is_null; "%s",st; col+=StrLen(st); if (col>=Fs->win_width-1) { diff --git a/Apps/Span/Span.HH b/Apps/Span/Span.HH index abc5693..11f486f 100644 --- a/Apps/Span/Span.HH +++ b/Apps/Span/Span.HH @@ -24,7 +24,7 @@ I32 pen_width; CMathODE *ode=NULL; -CCtrlButtonState run_button,mode_button; +CCtrlBttnState run_bttn,mode_bttn; CColorROPU32 run_colors[2]={RED,GREEN}; diff --git a/Apps/Span/SpanDerive.HC b/Apps/Span/SpanDerive.HC index 77ae4b0..41a010a 100644 --- a/Apps/Span/SpanDerive.HC +++ b/Apps/Span/SpanDerive.HC @@ -36,8 +36,8 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) } if (cursor_mass) { - p2.x=ip.pos.x-task->pix_left-task->scroll_x; - p2.y=ip.pos.y-task->pix_top-task->scroll_y; + p2.x=ms.pos.x-task->pix_left-task->scroll_x; + p2.y=ms.pos.y-task->pix_top-task->scroll_y; p2.z=0; D3Sub(&p,&p2,&cursor_mass->state->x); d=10.0*D3NormSqr(&p); diff --git a/Apps/Span/SpanMain.HC b/Apps/Span/SpanMain.HC index 09632ca..2d30b3b 100644 --- a/Apps/Span/SpanMain.HC +++ b/Apps/Span/SpanMain.HC @@ -1,6 +1,6 @@ F64 SpanTime() { - if (run_button.state) + if (run_bttn.state) return a.elapsed_t+tS-a.start_wall_t; else return a.elapsed_t; @@ -43,8 +43,8 @@ U0 DrawIt(CTask *task,CDC *dc) if (cursor_mass) { dc->color=RED; dc->pen_width=2; - GrLine3(dc,ip.pos.x-task->pix_left-task->scroll_x, - ip.pos.y-task->pix_top-task->scroll_y,0, + GrLine3(dc,ms.pos.x-task->pix_left-task->scroll_x, + ms.pos.y-task->pix_top-task->scroll_y,0, cursor_mass->x,cursor_mass->y,0); } @@ -134,7 +134,7 @@ U0 DelMass(MyMass *tmpm) U0 DrawSpring(CDC *dc,MyMass *tmpm,I64 x,I64 y) { - switch (mode_button.state) { + switch (mode_bttn.state) { case MD_CONCRETE: dc->color=LTGRAY; dc->pen_width=2; @@ -156,7 +156,7 @@ U0 PlaceSpring(MyMass *tmpm1,MyMass *tmpm2) MySpring *tmps=CAlloc(sizeof(MySpring)); tmps->end1=tmpm1; tmps->end2=tmpm2; - switch (mode_button.state) { + switch (mode_bttn.state) { case MD_CONCRETE: tmps->base_const = 3.00*SPRING_SCALE; tmps->base_compression_strength=10.00*STRENGTH_SCALE; @@ -208,8 +208,8 @@ U0 AnimateTask(SpanAnimateStruct *a) } AdjustLoads(ode); Refresh; //CMathODE updated once per refresh. - if (old_run!=run_button.state) { - if (run_button.state) { + if (old_run!=run_bttn.state) { + if (run_bttn.state) { if (!a->elapsed_t || !a->saved_ode) { Free(a->saved_ode); a->saved_ode=SpanSave(ode); @@ -220,7 +220,7 @@ U0 AnimateTask(SpanAnimateStruct *a) ode->flags|=ODEF_PAUSED; a->elapsed_t+=tS-a->start_wall_t; } - old_run=run_button.state; + old_run=run_bttn.state; } } } @@ -230,7 +230,7 @@ U0 Init(SpanAnimateStruct *a) SpanDel(ode); ode=SpanNew; - run_button.state=0; + run_bttn.state=0; Refresh(2); //Allow stop to reg in animate task. if (a->saved_ode) @@ -248,16 +248,16 @@ U0 SongTask(I64) music.tempo= 3.636; music.stacatto_factor= 0.902; while (TRUE) { - Play("3q.EeDqED2G3DhE"); - Play("q.EeDqED2G3DhE"); - Play("q.FeEFEqF2G3EhF"); - Play("q.FeEFEqF2G3EhF"); + Play("5q.EeDqED4G5DhE"); + Play("5q.EeDqED4G5DhE"); + Play("5q.FeEFEqF4G5EhF"); + Play("5q.FeEFEqF4G5EhF"); } } U0 Span() { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; MyMass *tmpm1=NULL,*tmpm2=NULL; MySpring *tmps; CCtrl *bt_run,*bt_mode; @@ -272,10 +272,10 @@ U0 Span() DocCursor; Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - bt_run =CtrlButtonNew(0,0, 80,, - 2,"Stopped\0Running\0",run_colors,&run_button); - bt_mode=CtrlButtonNew(0,3.0*FONT_HEIGHT,80,, - MD_NUM_MODES,Define("ST_SPAN_MODES"),mode_colors,&mode_button); + bt_run =CtrlBttnNew(0,0, 80,, + 2,"Stopped\0Running\0",run_colors,&run_bttn); + bt_mode=CtrlBttnNew(0,3.0*FONT_HEIGHT,80,, + MD_NUM_MODES,Define("ST_SPAN_MODES"),mode_colors,&mode_bttn); a.saved_ode=NULL; Fs->win_inhibit|=WIG_DBL_CLICK; @@ -323,30 +323,30 @@ U0 Span() try { while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<=MD_NUM_MODES) - mode_button.state=0; + case MSG_MS_R_DOWN: + mode_bttn.state++; + if (mode_bttn.state>=MD_NUM_MODES) + mode_bttn.state=0; cursor_mass=tmpm1=tmpm2=NULL; break; case MSG_KEY_DOWN: - switch (a1) { + switch (arg1) { case '\n': if (!SpanTime || !a.saved_ode) { Free(a.saved_ode); @@ -420,25 +420,25 @@ U0 Span() SpanWrite(ode); break; case CH_SPACE: - run_button.state=!run_button.state; + run_bttn.state=!run_bttn.state; break; case 'c': - mode_button.state=MD_CONCRETE; + mode_bttn.state=MD_CONCRETE; break; case 's': - mode_button.state=MD_STEEL; + mode_bttn.state=MD_STEEL; break; case 'w': - mode_button.state=MD_WIRE; + mode_bttn.state=MD_WIRE; break; case 'm': - mode_button.state=MD_MASS; + mode_bttn.state=MD_MASS; break; case 'v': - mode_button.state=MD_MOVE; + mode_bttn.state=MD_MOVE; break; case 'd': - mode_button.state=MD_DELETE; + mode_bttn.state=MD_DELETE; break; case CH_ESC: if (!SpanTime || !a.saved_ode) { @@ -459,8 +459,8 @@ span_done: //Don't goto out of try PutExcept; DocClear; SettingsPop; - CtrlButtonDel(bt_run); - CtrlButtonDel(bt_mode); + CtrlBttnDel(bt_run); + CtrlBttnDel(bt_mode); SpanDel(ode); DCFill(dc); DCDel(dc); diff --git a/Apps/Strut/Strut.HC b/Apps/Strut/Strut.HC index 1c6e964..dc6ef6e 100644 --- a/Apps/Strut/Strut.HC +++ b/Apps/Strut/Strut.HC @@ -28,7 +28,7 @@ class MySpring:CSpring #define MMD_NUM_MODES 2 CColorROPU32 main_mode_colors[MMD_NUM_MODES]={LTRED,LTGREEN}; DefineLstLoad("ST_MAIN_MODES","Edit\0Play\0"); -CCtrlButtonState main_mode_button; +CCtrlBttnState main_mode_bttn; //Edit Modes #define EMD_MASS 0 @@ -39,7 +39,7 @@ CCtrlButtonState main_mode_button; #define EMD_NUM_MODES 5 CColorROPU32 edit_mode_colors[EMD_NUM_MODES]={LTGRAY,LTCYAN,CYAN,YELLOW,LTBLUE}; DefineLstLoad("ST_EDIT_MODES","Mass\0Spring\0Connector\0Thruster\0Move\0"); -CCtrlButtonState edit_mode_button; +CCtrlBttnState edit_mode_bttn; CTask *task; F64 zoom; @@ -64,14 +64,14 @@ U0 W2S(F64 wx,F64 wy,F64 *_sx,F64 *_sy) U0 Zoom(F64 d) { F64 sx,sy,wx,wy; - I64 i,x=ip.pos.x,y=ip.pos.y; + I64 i,x=ms.pos.x,y=ms.pos.y; d=Exp(Ln(d)/ZOOM_STEPS); for (i=0;iscroll_x=ip.pos.x-sx-task->pix_left; - task->scroll_y=ip.pos.y-sy-task->pix_top; + task->scroll_x=ms.pos.x-sx-task->pix_left; + task->scroll_y=ms.pos.y-sy-task->pix_top; Sleep(10); } } @@ -92,7 +92,7 @@ U0 DrawIt(CTask *,CDC *dc) dc->flags|=DCF_TRANSFORMATION; Mat4x4Scale(dc->r,zoom); - switch (main_mode_button.state) { + switch (main_mode_bttn.state) { case MMD_EDIT: task->text_attr=DKGRAY<<4+WHITE; dc->color=BLACK; @@ -105,12 +105,12 @@ U0 DrawIt(CTask *,CDC *dc) break; } - if (main_mode_button.state==MMD_EDIT) { - if (edit_mode_button.state==EMD_CONNECTOR) { + if (main_mode_bttn.state==MMD_EDIT) { + if (edit_mode_bttn.state==EMD_CONNECTOR) { dc->color=CYAN; S2W(FONT_WIDTH*11,FONT_HEIGHT*7,&x1,&y1); GrPutChar3(dc,x1,y1,0,next_action_key); - } else if (edit_mode_button.state==EMD_THRUSTER) { + } else if (edit_mode_bttn.state==EMD_THRUSTER) { dc->color=YELLOW; S2W(FONT_WIDTH*11,FONT_HEIGHT*7,&x1,&y1); GrPutChar3(dc,x1,y1,0,next_action_key); @@ -164,7 +164,7 @@ U0 DrawIt(CTask *,CDC *dc) } dc->flags&=~DCF_SYMMETRY; } - SpriteZ3B(dc,x1,y1,0,$IB,"<3>",BI=3$,é); + Sprite3ZB(dc,x1,y1,0,$IB,"<3>",BI=3$,é); if (zoom>0.5) { dc->color=YELLOW; GrPutChar3(dc,(x1*7+x2)/8,(y1*7+y2)/8,0,tmps->action_key); @@ -210,7 +210,7 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) tmps=ode->next_spring; while (tmps!=&ode->next_spring) { - if (main_mode_button.state==MMD_PLAY && tmps->type==EMD_THRUSTER && + if (main_mode_bttn.state==MMD_PLAY && tmps->type==EMD_THRUSTER && Bt(kbd.down_bitmap,action_scan_codes[tmps->action_key-'0'])) { D3Sub(&p,&tmps->end2->state->x,&tmps->end1->state->x); D3Unit(&p); @@ -320,7 +320,7 @@ U0 CleanUp() U0 PlayShip() { - I64 a1,a2; + I64 arg1,arg2; F64 last_noise=0; Bool okay; ode->flags&=~ODEF_PAUSED; @@ -353,14 +353,14 @@ U0 PlayShip() ); DocClear; try { - while (main_mode_button.state==MMD_PLAY) { + while (main_mode_bttn.state==MMD_PLAY) { BreakConnectors; - switch (ScanMsg(&a1,&a2,1<last_noise+0.25) { - Noise(250,40,200); + Noise(250,18,46); last_noise=tS; } break; @@ -378,8 +378,8 @@ U0 PlayShip() ode->drag_v3=0.0001; break; case CH_SPACE: - if (++main_mode_button.state==MMD_NUM_MODES) - main_mode_button.state=0; + if (++main_mode_bttn.state==MMD_NUM_MODES) + main_mode_bttn.state=0; GetMsg(,,1<drag_v2=0.000002; ode->drag_v3=0.0000001; @@ -411,12 +411,12 @@ ps_done: //Don't goto out of try U0 EditShip() { - I64 a1,a2; + I64 arg1,arg2; F64 wx,wy; Bool okay; MyMass *tmpm1=NULL,*tmpm2=NULL; - CCtrl *bt_edit_mode=CtrlButtonNew(0,5*FONT_HEIGHT+4,80,,EMD_NUM_MODES, - Define("ST_EDIT_MODES"),edit_mode_colors,&edit_mode_button); + CCtrl *bt_edit_mode=CtrlBttnNew(0,5*FONT_HEIGHT+4,80,,EMD_NUM_MODES, + Define("ST_EDIT_MODES"),edit_mode_colors,&edit_mode_bttn); ode->flags|=ODEF_PAUSED; MenuPush( "File {" @@ -453,13 +453,14 @@ U0 EditShip() ); DocClear; try { - while (main_mode_button.state==MMD_EDIT) { - switch (ScanMsg(&a1,&a2,1<next_mass==tmpm1) tmpm1->img=$IB,"<1>",BI=1$; @@ -471,26 +472,26 @@ U0 EditShip() case EMD_CONNECTOR: case EMD_THRUSTER: case EMD_MOVE: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); tmpm1=MassFind(ode,wx,wy); tmpm2=NULL; break; } break; - case MSG_IP_L_UP: - switch (edit_mode_button.state) { + case MSG_MS_L_UP: + switch (edit_mode_bttn.state) { case EMD_MASS: break; case EMD_SPRING: case EMD_CONNECTOR: case EMD_THRUSTER: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); if (tmpm1 && (tmpm2=MassFind(ode,wx,wy)) && tmpm1!=tmpm2) - PlaceSpring(tmpm1,tmpm2,edit_mode_button.state); + PlaceSpring(tmpm1,tmpm2,edit_mode_bttn.state); tmpm1=tmpm2=NULL; break; case EMD_MOVE: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); if (tmpm1) { tmpm1->x=wx; tmpm1->y=wy; @@ -501,10 +502,10 @@ U0 EditShip() break; } break; - case MSG_IP_MOVE: - switch (edit_mode_button.state) { + case MSG_MS_MOVE: + switch (edit_mode_bttn.state) { case EMD_MOVE: - S2W(ip.pos.x,ip.pos.y,&wx,&wy); + S2W(ms.pos.x,ms.pos.y,&wx,&wy); if (tmpm1) { tmpm1->x=wx; tmpm1->y=wy; @@ -514,20 +515,20 @@ U0 EditShip() break; } break; - case MSG_IP_R_DOWN: - if (++edit_mode_button.state==EMD_NUM_MODES) - edit_mode_button.state=0; + case MSG_MS_R_DOWN: + if (++edit_mode_bttn.state==EMD_NUM_MODES) + edit_mode_bttn.state=0; break; - case MSG_IP_R_UP: + case MSG_MS_R_UP: break; case MSG_KEY_DOWN: - switch (a1) { + switch (arg1) { case '\n': CleanUp; Init; break; case '0'...'9': - next_action_key=a1; + next_action_key=arg1; break; case 'c': CenterMasses; @@ -538,19 +539,19 @@ U0 EditShip() ode->drag_v3=0.0001; break; case 'v': - edit_mode_button.state=EMD_MOVE; + edit_mode_bttn.state=EMD_MOVE; break; case 'm': - edit_mode_button.state=EMD_MASS; + edit_mode_bttn.state=EMD_MASS; break; case 'n': - edit_mode_button.state=EMD_CONNECTOR; + edit_mode_bttn.state=EMD_CONNECTOR; break; case 's': - edit_mode_button.state=EMD_SPRING; + edit_mode_bttn.state=EMD_SPRING; break; case 't': - edit_mode_button.state=EMD_THRUSTER; + edit_mode_bttn.state=EMD_THRUSTER; break; case 'z': Spawn(&Zoom,2.0(I64)); @@ -559,8 +560,8 @@ U0 EditShip() Spawn(&Zoom,0.5(I64)); break; case CH_SPACE: - if (++main_mode_button.state==MMD_NUM_MODES) - main_mode_button.state=0; + if (++main_mode_bttn.state==MMD_NUM_MODES) + main_mode_bttn.state=0; GetMsg(,,1<flags|=ODEF_PAUSED; ode->drag_v2=0.000002; @@ -587,7 +588,7 @@ es_done: //Don't goto out of try okay=FALSE; } MenuPop; - CtrlButtonDel(bt_edit_mode); + CtrlBttnDel(bt_edit_mode); if (!okay) throw; } @@ -596,7 +597,7 @@ U0 Strut() { CCtrl *bt_main_mode; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R|WIG_DBL_CLICK; + Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R|WIG_DBL_CLICK; AutoComplete; WinBorder; WinMax; @@ -613,9 +614,9 @@ U0 Strut() "Press $$GREEN$$$$FG$$ or $$GREEN$$$$FG$$ to zoom in/out.\n\n"; PressAKey; - bt_main_mode=CtrlButtonNew( + bt_main_mode=CtrlBttnNew( (GR_WIDTH-4*FONT_WIDTH-16)>>1,1*FONT_HEIGHT+4,80,,MMD_NUM_MODES, - Define("ST_MAIN_MODES"),main_mode_colors,&main_mode_button); + Define("ST_MAIN_MODES"),main_mode_colors,&main_mode_bttn); DocClear; Init; Fs->draw_it=&DrawIt; @@ -629,6 +630,6 @@ U0 Strut() Fs->catch_except=TRUE; } SettingsPop; - CtrlButtonDel(bt_main_mode); + CtrlBttnDel(bt_main_mode); } øÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ùÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Apps/TimeOut/Load.HC b/Apps/Titanium/Load.HC similarity index 71% rename from Apps/TimeOut/Load.HC rename to Apps/Titanium/Load.HC index 28cd615..a86d30c 100644 --- a/Apps/TimeOut/Load.HC +++ b/Apps/Titanium/Load.HC @@ -1,6 +1,6 @@ #help_index "Games" Cd(__DIR__);; -#include "TimeOut" +#include "Titanium" #help_index "" diff --git a/Apps/TimeOut/Run.HC b/Apps/Titanium/Run.HC similarity index 76% rename from Apps/TimeOut/Run.HC rename to Apps/Titanium/Run.HC index fd210c6..aa4c283 100644 --- a/Apps/TimeOut/Run.HC +++ b/Apps/Titanium/Run.HC @@ -1,3 +1,3 @@ Cd(__DIR__);; #include "Load" -TimeOut; \ No newline at end of file +Titanium; \ No newline at end of file diff --git a/Apps/TimeOut/TimeOut.HC b/Apps/Titanium/Titanium.HC similarity index 54% rename from Apps/TimeOut/TimeOut.HC rename to Apps/Titanium/Titanium.HC index 362fa04..56bd10b 100644 --- a/Apps/TimeOut/TimeOut.HC +++ b/Apps/Titanium/Titanium.HC @@ -1,32 +1,45 @@ -RegSetDftEntry("TempleOS/TimeOut","I64 best_score=0;\n"); -RegExeBranch("TempleOS/TimeOut"); +RegDft("TempleOS/Titanium","I64 best_score=0;\n"); +RegExe("TempleOS/Titanium"); #define MAP_HEIGHT 4096 -#define BULLET_LEN 10 -#define BULLET_SPEED 5 -#define MAX_BULLETS 128 +#define B_LEN 10 +#define B_SPEED 5 +#define B_NUM 128 class Bullet { I64 x,y,dx,dy,dx2,dy2; Bool dead,missile,pad[6]; -} b[MAX_BULLETS]; -I64 bullets_fired,missiles_fired; +} b[B_NUM]; +I64 bullets_fired,missile_bmp; I64 x,y,dx,dy,finish_line; F64 é,t0,tf,snd_timeout; #define PHASES_GROUPS 8 -#define MAX_ENEMY (PHASES_GROUPS*64) -#define MAX_FRIENDLY (PHASES_GROUPS*16) -#define MAX_UNIT (MAX_FRIENDLY+MAX_ENEMY) #define HACK_DIST 5 + +#define U_NUM_ENEMY (PHASES_GROUPS*64) +#define U_NUM_FRIENDLY (PHASES_GROUPS*16) +#define U_NUM (U_NUM_FRIENDLY+U_NUM_ENEMY) class Unit { I64 x,y,best_dd; - F64 é,phase,die_time,corpse_timeout; - Bool friendly,dead,tank,missile_strike,pad[4]; -} u[MAX_UNIT]; + F64 é,phase; + Bool friendly,dead,tank,pad[5]; +} u[U_NUM]; + +#define ET_MAN 0 +#define ET_TANK 1 +#define ET_MISSILE 2 +#define ET_BUILDING 3 +#define E_NUM 512 +class Explosion +{ + I64 x,y,num,type; + F64 t0,tf; + Bool dead,pad[7]; +} e[E_NUM]; I64 total_score,friendly_fire,enemy_by_friendly,friendly_left,enemy_left, main_loop_pass; @@ -35,6 +48,7 @@ $BG,14$ + $SP,"<1>",BI=1$ @@ -43,11 +57,11 @@ $BG,14$ $SP,"<2>",BI=2$ - $SP,"<3>",BI=3$ + $SP,"<4>",BI=4$ @@ -56,15 +70,14 @@ $BG,14$ -U8 *friendly_imgs[4]={$IB,"<4>",BI=4$,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$}; - - - - $SP,"<6>",BI=6$ +U8 *friendly_imgs[4]={$IB,"<5>",BI=5$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<6>",BI=6$}; + + + $SP,"<7>",BI=7$ @@ -76,15 +89,16 @@ U8 *friendly_imgs[4]={$IB,"<4>",BI=4$,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$,$IB,"<5>", -U8 *friendly_hacking_imgs[4]={$IB,"<7>",BI=7$,$IB,"<6>",BI=6$,$IB,"<7>",BI=7$,$IB,"<8>",BI=8$}; - - - - $SP,"<9>",BI=9$ + +U8 *friendly_hacking_imgs[4]={$IB,"<7>",BI=7$,$IB,"<8>",BI=8$,$IB,"<7>",BI=7$,$IB,"<9>",BI=9$}; + + + + $SP,"<10>",BI=10$ @@ -93,15 +107,14 @@ U8 *friendly_hacking_imgs[4]={$IB,"<7>",BI=7$,$IB,"<6>",BI=6$,$IB,"<7>",BI=7$,$I -U8 *enemy_imgs[4]={$IB,"<10>",BI=10$,$IB,"<9>",BI=9$,$IB,"<10>",BI=10$,$IB,"<11>",BI=11$}; - - - - $SP,"<12>",BI=12$ +U8 *enemy_imgs[4]={$IB,"<11>",BI=11$,$IB,"<10>",BI=10$,$IB,"<11>",BI=11$,$IB,"<12>",BI=12$}; + + + $SP,"<13>",BI=13$ @@ -113,13 +126,6 @@ U8 *enemy_imgs[4]={$IB,"<10>",BI=10$,$IB,"<9>",BI=9$,$IB,"<10>",BI=10$,$IB,"<11> - - - - - - - $SP,"<15>",BI=15$ @@ -131,119 +137,153 @@ U8 *enemy_imgs[4]={$IB,"<10>",BI=10$,$IB,"<9>",BI=9$,$IB,"<10>",BI=10$,$IB,"<11> -U8 *enemy_hacking_imgs[4]={$IB,"<13>",BI=13$,$IB,"<12>",BI=12$,$IB,"<13>",BI=13$,$IB,"<14>",BI=14$}; - - -#define LANDSCAPE_TYPES 4 - - - - - $SP,"<16>",BI=16$ + + + + + +U8 *enemy_hacking_imgs[4]={$IB,"<14>",BI=14$,$IB,"<13>",BI=13$,$IB,"<14>",BI=14$,$IB,"<15>",BI=15$}; + + + + + + + $SP,"<17>",BI=17$ - - - - $SP,"<18>",BI=18$ + + + $SP,"<19>",BI=19$ + + $SP,"<20>",BI=20$ + + + + $BG$ - -U8 *landscape_imgs[LANDSCAPE_TYPES]= - {$IB,"<16>",BI=16$,$IB,"<17>",BI=17$,$IB,"<18>",BI=18$,$IB,"<19>",BI=19$}; - -#define MAX_LANDSCAPE 128 +#define LS_NUM_APTS 20 +#define LS_NUM_MOUNTAINS 3 +#define LS_NUM 128 class LandScapeItem { I64 x,y; U8 *img; -} ls[MAX_LANDSCAPE]; +} ls[LS_NUM]; -U0 Explosion(CDC *dc,I64 num,I64 y) +#define LS_TYPES 4 +U8 *landscape_imgs[LS_TYPES]= + {$IB,"<17>",BI=17$,$IB,"<18>",BI=18$,$IB,"<19>",BI=19$,$IB,"<20>",BI=20$}; + +U0 ExplosionDraw(CDC *dc,Explosion *tmpe,I64 y) { - Unit *tmpu=&u[num]; I64 i,n1,n2,n3,n4,n5; - F64 t=(tS-tmpu->die_time)/(tmpu->corpse_timeout-tmpu->die_time); - Seed(num+1); - if (tmpu->missile_strike) { - n1=128; n2=30; n3=30; n4=99; n5=99; - } else if (tmpu->tank) { - n1=64; n2=14; n3=12; n4=60; n5=45; - } else { - n1=8; n2=0; n3=0; n4=18; n5=14; + F64 t=(tS-tmpe->t0)/(tmpe->tf-tmpe->t0); + Seed(tmpe->num+1); + + switch (tmpe->type) { + case ET_MAN: n1=8; n2=0; n3=0; n4=18; n5=28; break; + case ET_TANK: n1=64; n2=14; n3=24; n4=60; n5=90; break; + case ET_MISSILE: n1=128; n2=30; n3=60; n4=100; n5=200; break; + case ET_BUILDING: n1=128; n2=80; n3=80; n4=200; n5=300; break; } for (i=0;imissile_strike && i&2) { - if (i&1) { - if (i&4) - dc->color=RED; - else - dc->color=DKGRAY; - } else - dc->color=YELLOW; - } else if (tmpu->tank && i&2) { - if (i&1) { - if (i&4) - dc->color=RED; - else - dc->color=RED; - } else - dc->color=LTRED; - } else if (i&1) + if (i&2) + switch (tmpe->type) { + case ET_MAN: + if (i&1) + dc->color=WHITE; + else + dc->color=LTGRAY; + break; + case ET_MISSILE: + if (i&1) { + if (i&4) + dc->color=RED; + else + dc->color=DKGRAY; + } else + dc->color=YELLOW; + break; + case ET_TANK: + if (i&1) { + if (i&4) + dc->color=RED; + else + dc->color=DKGRAY; + } else + dc->color=LTRED; + break; + case ET_BUILDING: + if (i&1) { + if (i&4) + dc->color=BLACK; + else + dc->color=DKGRAY; + } else + dc->color=LTGRAY; + break; + } + else if (i&1) dc->color=WHITE; else dc->color=LTGRAY; - GrLine(dc,tmpu->x+n2*(Rand-.5),y+n3*Rand, - tmpu->x+n4*t*(Rand-.5),y-n5*t*Rand); + GrLine(dc,tmpe->x+n2*(Rand-.5),y+n3/2*Rand, + tmpe->x+n4*t*(Rand-.5),y-n5/2*t*Rand); } } I64 mp_not_done_flags; -U0 MPDrawMen(CDC *dc2) +U0 MPMenDraw(CDC *dc2) { CTask *task=dc2->win_task; CDC *dc=DCAlias(dc2,task); - I64 i,r[16],lo=Gs->num*MAX_UNIT/mp_cnt,hi=(Gs->num+1)*MAX_UNIT/mp_cnt, + I64 i,r[16],lo=Gs->num*U_NUM/mp_cnt,hi=(Gs->num+1)*U_NUM/mp_cnt, yy,phase,scroll_y=MAP_HEIGHT-100-100*(tS-t0); Unit *tmpu; + Explosion *tmpe; U8 *tmps,**_tmps; F64 tt,ts=tS; + for (i=Gs->num;iy-scroll_y)&(MAP_HEIGHT-1); + if (-32<=yy<=task->pix_bottom+32 && !tmpe->dead) { + ExplosionDraw(dc,tmpe,yy); + if (tS>tmpe->tf) + tmpe->dead=TRUE; + } + } for (i=lo;iy-scroll_y)&(MAP_HEIGHT-1); if (-32<=yy<=task->pix_bottom+32) { - if (tmpu->dead) { - if (tmpu->corpse_timeout) { - Explosion(dc,i,yy); - if (tS>tmpu->corpse_timeout) - tmpu->corpse_timeout=0; - } - } else { + if (!tmpu->dead) { Mat4x4IdentEqu(r); - Mat4x4RotY(r,tmpu->é+ã/2); + Mat4x4RotY(r,tmpu->é); Mat4x4RotX(r,ã/6); Mat4x4Scale(r,0.3); if (tmpu->tank) - SpriteMat3B(dc,tmpu->x,yy,GR_Z_ALL,$IB,"<15>",BI=15$,r); + Sprite3Mat4x4B(dc,tmpu->x,yy,GR_Z_ALL,$IB,"<16>",BI=16$,r); else { if (tmpu->best_dd<(2*HACK_DIST)*(2*HACK_DIST)) {//It's neat so times 2 if (tmpu->friendly) @@ -260,7 +300,7 @@ U0 MPDrawMen(CDC *dc2) } phase=tt; tt%=1.0; tmps=SpriteInterpolate(tt,_tmps[phase&3],_tmps[(phase+1)&3]); - SpriteMat3B(dc,tmpu->x,yy,GR_Z_ALL,tmps,r); + Sprite3Mat4x4B(dc,tmpu->x,yy,GR_Z_ALL,tmps,r); Free(tmps); } } @@ -273,16 +313,27 @@ U0 MPDrawMen(CDC *dc2) Seed; //Return Seth task to timer-based. } +U0 MissilePos(I64 m,F64 é,I64 *_x,I64 *_y) +{ + I64 n; + if (m<2) + n=-1; + else + n=1; + *_x=x+3.0*Cos(é)-(15.0-(m&1)<<3)*Cos(é-n*ã/2); + *_y=y+3.0*Sin(é)-(15.0-(m&1)<<3)*Sin(é-n*ã/2); +} + U0 DrawIt(CTask *task,CDC *dc) { - I64 i,yy,scroll_y=MAP_HEIGHT-100-100*(tS-t0); + I64 i,m,xx,yy,scroll_y=MAP_HEIGHT-100-100*(tS-t0); F64 tt,ts=tS; Bullet *tmpb; dc->color=ROPF_DITHER|BROWN<<16|YELLOW; GrRect3(dc,0,0,0,dc->width,dc->height); - for (i=0;ipix_bottom+32) Sprite3(dc,ls[i].x,yy,0,ls[i].img); @@ -294,26 +345,31 @@ U0 DrawIt(CTask *task,CDC *dc) GR_WIDTH,(finish_line-scroll_y)&(MAP_HEIGHT-1),0); dc->color=LTGRAY; - for (i=0,tmpb=b;idead) { if (tmpb->missile) - SpriteZ3B(dc,tmpb->x>>32,tmpb->y>>32,0,$IB,"<2>",BI=2$,Arg(tmpb->dx,tmpb->dy)); + Sprite3ZB(dc,tmpb->x>>32,tmpb->y>>32,0,$IB,"<2>",BI=2$,ã/2+Arg(tmpb->dx,tmpb->dy)); else GrLine(dc,tmpb->x>>32,tmpb->y>>32, - (tmpb->x+tmpb->dx*BULLET_LEN)>>32, - (tmpb->y+tmpb->dy*BULLET_LEN)>>32); + (tmpb->x+tmpb->dy*B_LEN)>>32, + (tmpb->y+tmpb->dx*B_LEN)>>32); } DCDepthBufAlloc(dc); mp_not_done_flags=1<depth_buf); dc->depth_buf=NULL; - SpriteZ3B(dc,x,y,0,$IB,"<1>",BI=1$,é); + for (m=0;m<4;m++) + if (Bt(&missile_bmp,m)) { + MissilePos(m,é,&xx,&yy); + Sprite3ZB(dc,xx,yy,0,$IB,"<3>",BI=3$,é); + } + Sprite3ZB(dc,x,y,0,$IB,"<1>",BI=1$,é); if (tf) { tt=tf; @@ -327,26 +383,42 @@ U0 DrawIt(CTask *task,CDC *dc) game_over=TRUE; } dc->color=BLACK; - GrPrint(dc,0,0,"Enemy:%d Friends:%d Friendly Fire:%d Time:%6.2f " - "Bullets:%d Missiles:%d",enemy_left,friendly_left,friendly_fire, - tt-t0,bullets_fired,missiles_fired); + GrPrint(dc,0,0,"Enemy:%d Friends:%d Friendly Fire:%d Time:%6.2f Bullets:%d", + enemy_left,friendly_left,friendly_fire,tt-t0,bullets_fired); GrPrint(dc,0,8,"Total Score:%,d High Score:%,d", total_score,best_score); } +Explosion *ExplosionNew(I64 x,I64 y) +{ + I64 i; + for (i=0;idead=TRUE; - tmpu->die_time=tS; if (by_human) { - if (tmpu->missile_strike) - tmpu->corpse_timeout=tS+1.0; - else if (tmpu->tank) - tmpu->corpse_timeout=tS+0.40; - else - tmpu->corpse_timeout=tS+0.20; - } else - tmpu->corpse_timeout=0; + if (tmpe=ExplosionNew(tmpu->x,tmpu->y)) { + tmpe->t0=tS; + if (tmpu->tank) { + tmpe->type=ET_TANK; + tmpe->tf=tmpe->t0+0.40; + } else { + tmpe->type=ET_MAN; + tmpe->tf=tmpe->t0+0.20; + } + } + } if (tmpu->friendly) { friendly_left--; @@ -360,28 +432,59 @@ U0 ManDie(Unit *tmpu,Bool by_human) if (by_human && !snd_timeout) { snd_timeout=tS+0.01; if (tmpu->friendly) - Snd(200); + Snd(46); else - Snd(50); + Snd(22); + } +} + +U0 ExplosionDo(I64 x,I64 y,I64 scroll_y) +{ + I64 i,x2,y2; + Explosion *tmpe; + Unit *tmpu; + if (tmpe=ExplosionNew(x,y+scroll_y)) { + tmpe->t0=tS; + tmpe->type=ET_MISSILE; + tmpe->tf=tmpe->t0+1.0; + } + for (i=0,tmpu=u;idead) { + x2=tmpu->x; + y2=(tmpu->y-scroll_y)&(MAP_HEIGHT-1); + if (SqrI64(x-x2)+SqrI64(y-y2)<100*100) + ManDie(tmpu,TRUE); + } + } + for (i=0;it0=tS; + tmpe->type=ET_BUILDING; + tmpe->tf=tmpe->t0+2.0; + } + } } } U0 CheckCollisions() { - I64 i,i2,x,y,x2,y2,scroll_y=MAP_HEIGHT-100-100*(tS-t0); - Unit *tmpu,*tmpu2; + I64 i,n1,x,y,scroll_y=MAP_HEIGHT-100-100*(tS-t0); + Unit *tmpu; Bullet *tmpb; CDC *dc2=DCNew(GR_WIDTH,GR_HEIGHT); dc2->color=LTRED; - for (i=0,tmpb=b;idead && !tmpb->missile) //Bullets not missiles GrLine(dc2,tmpb->x>>32,tmpb->y>>32, - (tmpb->x+tmpb->dx*BULLET_LEN)>>32, - (tmpb->y+tmpb->dy*BULLET_LEN)>>32); + (tmpb->x+tmpb->dx*B_LEN)>>32, + (tmpb->y+tmpb->dy*B_LEN)>>32); dc2->color =ROP_COLLISION; dc2->bkcolor=BLACK; - for (i=0,tmpu=u;idead) { x=tmpu->x; y=(tmpu->y-scroll_y)&(MAP_HEIGHT-1); @@ -395,26 +498,28 @@ U0 CheckCollisions() } DCDel(dc2); - for (i=0,tmpb=b;idead && tmpb->missile) { //Missiles not bullets x=tmpb->x>>32; y=tmpb->y>>32; - for (i=0,tmpu=u;idead && AbsI64(x-tmpu->x-3)+ - AbsI64(y-(tmpu->y-scroll_y)&(MAP_HEIGHT-1)+2)<7+14*tmpu->tank) { + for (i=0,tmpu=u;itank) + n1=16; + else + n1=6; + if (!tmpu->dead && AbsI64(x-tmpu->x-n1)+ + AbsI64(y-(tmpu->y-scroll_y)&(MAP_HEIGHT-1)+n1)dead=TRUE; - tmpu->missile_strike=TRUE; - ManDie(tmpu,TRUE); - for (i2=0,tmpu2=u;i2dead) { - x2=tmpu2->x; - y2=(tmpu2->y-scroll_y)&(MAP_HEIGHT-1); - if (SqrI64(x-x2)+SqrI64(y-y2)<100*100) - ManDie(tmpu2,TRUE); - } - } + ExplosionDo(x,y,scroll_y); } } + if (!tmpb->dead) + for (i=0;idead=TRUE; + ExplosionDo(x,y,scroll_y); + } } } @@ -424,7 +529,7 @@ U0 Init() Unit *tmpu; snd_timeout=0; - Snd(0); + Snd; total_score=0; game_over=FALSE; @@ -435,23 +540,23 @@ U0 Init() finish_line=scroll_y+y; dx=0; dy=0; - é=0; + é=-ã/2; - for (i=0;ipix_width-100)*RandU32/MAX_U32+50; ls[i].y=(MAP_HEIGHT-100)*RandU32/MAX_U32+50; - ls[i].img=landscape_imgs[RandU16%(LANDSCAPE_TYPES-2)]; + ls[i].img=landscape_imgs[RandU16%(LS_TYPES-2)]; } - for (i=0;i<2;i++) - ls[i].img=landscape_imgs[LANDSCAPE_TYPES-2]; //mountain + for (i=0;ifriendly=TRUE; if (!(i&7)) { xx=(Fs->pix_width-200)*RandU32/MAX_U32; @@ -467,21 +572,23 @@ U0 Init() tmpu->tank=TRUE; } tmpu->dead=FALSE; - tmpu->missile_strike=FALSE; tmpu->x=xx+64*RandI32/MAX_I32+100; tmpu->y=yy+64*RandU32/MAX_I32-64+100; tmpu->best_dd=MAX_I64; - tmpu->é=0; + tmpu->é=ã/2; tmpu->phase=2*ã*Rand; - tmpu->corpse_timeout=0; } - for (i=0;ix=j<<32; - - j=y-28.0*Cos(é); + j=y+28.0*Sin(é); tmpb->y=j<<32; - tmpb->dx2=(BULLET_SPEED*Sin(é)+dx)*0x100000000; - tmpb->dy2=-BULLET_SPEED*Cos(é)*0x100000000; + tmpb->dx2=(B_SPEED*Cos(é)+dx)*0x100000000; + tmpb->dy2= B_SPEED*Sin(é)*0x100000000; a=Arg(tmpb->dx2,tmpb->dy2); - tmpb->dx=Cos(a)*0x100000000; - tmpb->dy=Sin(a)*0x100000000; + tmpb->dx=Sin(a)*0x100000000; + tmpb->dy=Cos(a)*0x100000000; bullets_fired++; tmpb->dead=FALSE; tmpb->missile=FALSE; if (!snd_timeout) { snd_timeout=tS+0.0005; - Snd(1000); + Snd(74); } } -U0 FireMissile(I64 n) +Bool FireMissile(I64 n) { - I64 i,j; + I64 i,m; F64 a; Bullet *tmpb; - for (i=0;ix=j<<32; + m=n; + if (Btr(&missile_bmp,++m) || Btr(&missile_bmp,++m)) + res=TRUE; - j=y+10.0*Cos(é)-20.0*Cos(é+n*ã/2); - tmpb->y=j<<32; + if (res) { + for (i=0;idx2=(BULLET_SPEED*Sin(é)+dx)*0x100000000; - tmpb->dy2=-BULLET_SPEED*Cos(é)*0x100000000; - a=Arg(tmpb->dx2,tmpb->dy2); - tmpb->dx=Cos(a)*0x100000000; - tmpb->dy=Sin(a)*0x100000000; - missiles_fired++; - tmpb->dead=FALSE; - tmpb->missile=TRUE; - if (!snd_timeout) { - snd_timeout=tS+0.0005; - Snd(1000); + MissilePos(m,é,&tmpb->x,&tmpb->y); + tmpb->x<<=32; + tmpb->y<<=32; + + tmpb->dx2=(B_SPEED*Cos(é)+dx)*0x100000000; + tmpb->dy2= B_SPEED*Sin(é)*0x100000000; + a=Arg(tmpb->dx2,tmpb->dy2); + tmpb->dx=Sin(a)*0x100000000; + tmpb->dy=Cos(a)*0x100000000; + tmpb->dead=FALSE; + tmpb->missile=TRUE; + if (!snd_timeout) { + snd_timeout=tS+0.0005; + Snd(74); + } } } U0 MenMove(I64 phase_group) { I64 i,j,dd,best,best_dd; - for (i=phase_group;isnd_timeout) { snd_timeout=0; - Snd(0); + Snd; } SleepUntil(next_update_jiffy); - total_score=3*(MAX_ENEMY-enemy_left)+5*enemy_by_friendly - -100*friendly_fire-10*(tS-t0)-bullets_fired-50*missiles_fired; + total_score=3*(U_NUM_ENEMY-enemy_left)+5*enemy_by_friendly + -100*friendly_fire-10*(tS-t0)-bullets_fired; if (game_over) { tf=tS; Sleep(750); FlushMsgs; - while (!ScanKey(&ch)&&friendly_left) { + while (!ScanKey(&ch)&&friendly_left||tS-tf<1.5) { total_score+=250; - Snd(2000); Sleep(150); - Snd(0); Sleep(50); + Snd(86); Sleep(150); + Snd; Sleep(50); friendly_left--; } total_score+=250*friendly_left; @@ -817,9 +927,9 @@ to_done: PutExcept; SettingsPop; MenuPop; - RegWriteBranch("TempleOS/TimeOut","I64 best_score=%d;\n",best_score); + RegWrite("TempleOS/Titanium","I64 best_score=%d;\n",best_score); } -RóÿÿÿÏÿÿÿ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +RóÿÿÿÏÿÿÿ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @@ -1041,87 +1151,87 @@ to_done: -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒìÿÿÿêÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ ÂÿÿÿÃÿÿÿ{?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿâÿÿÿþÿÿÿãÿÿÿÿÿÿÿèÿÿÿéÿÿÿàÿÿÿáÿÿÿçÿÿÿèÿÿÿéÿÿÿêÿÿÿìÿÿÿíÿÿÿæÿÿÿçÿÿÿêÿÿÿëÿÿÿ ìÿÿÿíÿÿÿ íÿÿÿ îÿÿÿ êÿÿÿëÿÿÿ ìÿÿÿ íÿÿÿ ûÿÿÿáÿÿÿÿÿÿÿúÿÿÿáÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿùÿÿÿíÿÿÿøÿÿÿøÿÿÿíÿÿÿùÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿûÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿíÿÿÿúÿÿÿùÿÿÿðÿÿÿøÿÿÿ÷ÿÿÿðÿÿÿøÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿúÿÿÿùÿÿÿñÿÿÿøÿÿÿ÷ÿÿÿñÿÿÿùÿÿÿîÿÿÿÿÿÿÿïÿÿÿÿÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿðÿÿÿñÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿ÷ÿÿÿúÿÿÿóÿÿÿûÿÿÿôÿÿÿÿÿÿÿøÿÿÿøÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿýÿÿÿùÿÿÿýÿÿÿúÿÿÿþÿÿÿñÿÿÿÿÿÿÿüÿÿÿñÿÿÿÿÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿîÿÿÿüÿÿÿîÿÿÿþÿÿÿóÿÿÿûÿÿÿóÿÿÿþÿÿÿõÿÿÿûÿÿÿõÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿôÿÿÿûÿÿÿôÿÿÿýÿÿÿúÿÿÿûÿÿÿúÿÿÿýÿÿÿþÿÿÿûÿÿÿÿÿÿÿýÿÿÿüÿÿÿ úÿÿÿýÿÿÿ ýÿÿÿûÿÿÿûÿÿÿüÿÿÿýÿÿÿùÿÿÿ úÿÿÿúÿÿÿ   - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿþÿÿÿâÿÿÿþÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿáÿÿÿâÿÿÿèÿÿÿéÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿèÿÿÿéÿÿÿïÿÿÿðÿÿÿïÿÿÿÿÿÿÿðÿÿÿÿÿÿÿ òÿÿÿÿÿÿÿóÿÿÿÿÿÿÿïÿÿÿðÿÿÿ òÿÿÿóÿÿÿûÿÿÿâÿÿÿþÿÿÿúÿÿÿâÿÿÿþÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿùÿÿÿïÿÿÿþÿÿÿøÿÿÿïÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿïÿÿÿÿÿÿÿøÿÿÿïÿÿÿÿÿÿÿùÿÿÿòÿÿÿÿÿÿÿ÷ÿÿÿòÿÿÿÿÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿòÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿðÿÿÿöÿÿÿ÷ÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿýÿÿÿýÿÿÿûÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿúÿÿÿýÿÿÿ  - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿâÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿâÿÿÿãÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿ ðÿÿÿøÿÿÿðÿÿÿøÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿ ðÿÿÿùÿÿÿñÿÿÿùÿÿÿûÿÿÿãÿÿÿþÿÿÿúÿÿÿãÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿíÿÿÿøÿÿÿíÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿùÿÿÿêÿÿÿ øÿÿÿêÿÿÿ ùÿÿÿìÿÿÿøÿÿÿìÿÿÿùÿÿÿîÿÿÿ ÷ÿÿÿîÿÿÿ ùÿÿÿëÿÿÿøÿÿÿëÿÿÿùÿÿÿìÿÿÿ ÷ÿÿÿìÿÿÿ ðÿÿÿþÿÿÿñÿÿÿÿÿÿÿõÿÿÿöÿÿÿîÿÿÿïÿÿÿóÿÿÿôÿÿÿõÿÿÿöÿÿÿüÿÿÿýÿÿÿóÿÿÿôÿÿÿúÿÿÿûÿÿÿþÿÿÿþÿÿÿüÿÿÿ üÿÿÿ üÿÿÿüÿÿÿúÿÿÿ úÿÿÿ þÿÿÿïÿÿÿþÿÿÿüÿÿÿïÿÿÿÿÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿýÿÿÿùÿÿÿõÿÿÿûÿÿÿùÿÿÿöÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿýÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿúÿÿÿøÿÿÿýÿÿÿûÿÿÿóÿÿÿûÿÿÿûÿÿÿóÿÿÿýÿÿÿøÿÿÿúÿÿÿøÿÿÿýÿÿÿøÿÿÿõÿÿÿûÿÿÿøÿÿÿõÿÿÿýÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿúÿÿÿ  - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿâÿÿÿþÿÿÿãÿÿÿÿÿÿÿèÿÿÿéÿÿÿàÿÿÿáÿÿÿçÿÿÿèÿÿÿéÿÿÿêÿÿÿìÿÿÿíÿÿÿæÿÿÿçÿÿÿêÿÿÿëÿÿÿ ìÿÿÿíÿÿÿ íÿÿÿ îÿÿÿ êÿÿÿëÿÿÿ ìÿÿÿ íÿÿÿ ûÿÿÿáÿÿÿÿÿÿÿúÿÿÿáÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿúÿÿÿèÿÿÿûÿÿÿøÿÿÿèÿÿÿüÿÿÿùÿÿÿíÿÿÿøÿÿÿøÿÿÿíÿÿÿùÿÿÿúÿÿÿèÿÿÿýÿÿÿøÿÿÿèÿÿÿþÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿûÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿíÿÿÿúÿÿÿùÿÿÿðÿÿÿøÿÿÿ÷ÿÿÿðÿÿÿøÿÿÿùÿÿÿîÿÿÿúÿÿÿøÿÿÿîÿÿÿúÿÿÿùÿÿÿñÿÿÿøÿÿÿ÷ÿÿÿñÿÿÿùÿÿÿîÿÿÿÿÿÿÿïÿÿÿÿÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿðÿÿÿñÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿóÿÿÿúÿÿÿôÿÿÿúÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿõÿÿÿüÿÿÿöÿÿÿüÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿ÷ÿÿÿúÿÿÿóÿÿÿûÿÿÿôÿÿÿÿÿÿÿøÿÿÿøÿÿÿøÿÿÿõÿÿÿùÿÿÿõÿÿÿýÿÿÿùÿÿÿýÿÿÿúÿÿÿþÿÿÿñÿÿÿÿÿÿÿüÿÿÿñÿÿÿÿÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿîÿÿÿüÿÿÿîÿÿÿþÿÿÿóÿÿÿûÿÿÿóÿÿÿþÿÿÿõÿÿÿûÿÿÿõÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿôÿÿÿûÿÿÿôÿÿÿýÿÿÿúÿÿÿûÿÿÿúÿÿÿýÿÿÿþÿÿÿûÿÿÿÿÿÿÿýÿÿÿüÿÿÿ úÿÿÿýÿÿÿ ýÿÿÿûÿÿÿûÿÿÿüÿÿÿýÿÿÿùÿÿÿ úÿÿÿúÿÿÿ   +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒìÿÿÿêÿÿÿ&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ ÂÿÿÿÃÿÿÿ{?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +Êp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿúÿÿÿÿÿÿÿãÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿàÿÿÿúÿÿÿáÿÿÿüÿÿÿçÿÿÿùÿÿÿèÿÿÿûÿÿÿéÿÿÿùÿÿÿêÿÿÿûÿÿÿìÿÿÿøÿÿÿíÿÿÿùÿÿÿæÿÿÿùÿÿÿçÿÿÿûÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿìÿÿÿøÿÿÿ íÿÿÿùÿÿÿ íÿÿÿ÷ÿÿÿ îÿÿÿùÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿ ìÿÿÿ÷ÿÿÿ íÿÿÿùÿÿÿÿÿÿÿáÿÿÿáÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿâÿÿÿâÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿøÿÿÿíÿÿÿùÿÿÿíÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿúÿÿÿîÿÿÿûÿÿÿîÿÿÿùÿÿÿíÿÿÿúÿÿÿíÿÿÿøÿÿÿðÿÿÿøÿÿÿðÿÿÿ úÿÿÿîÿÿÿúÿÿÿîÿÿÿøÿÿÿñÿÿÿùÿÿÿñÿÿÿ ÿÿÿÿîÿÿÿýÿÿÿÿÿÿÿïÿÿÿÿÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿúÿÿÿûÿÿÿ÷ÿÿÿûÿÿÿþÿÿÿóÿÿÿúÿÿÿûÿÿÿôÿÿÿûÿÿÿþÿÿÿøÿÿÿÿÿÿÿúÿÿÿøÿÿÿýÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿùÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿñÿÿÿöÿÿÿöÿÿÿîÿÿÿîÿÿÿóÿÿÿóÿÿÿõÿÿÿõÿÿÿüÿÿÿüÿÿÿôÿÿÿôÿÿÿúÿÿÿúÿÿÿþÿÿÿÿÿÿÿ üÿÿÿ ýÿÿÿûÿÿÿüÿÿÿ ùÿÿÿ úÿÿÿ       -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok -Êp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿþÿÿÿâÿÿÿþÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿáÿÿÿâÿÿÿèÿÿÿéÿÿÿèÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿèÿÿÿéÿÿÿïÿÿÿðÿÿÿïÿÿÿÿÿÿÿðÿÿÿÿÿÿÿ òÿÿÿÿÿÿÿóÿÿÿÿÿÿÿïÿÿÿðÿÿÿ òÿÿÿóÿÿÿûÿÿÿâÿÿÿþÿÿÿúÿÿÿâÿÿÿþÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿûÿÿÿâÿÿÿúÿÿÿâÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿúÿÿÿéÿÿÿþÿÿÿøÿÿÿéÿÿÿþÿÿÿùÿÿÿïÿÿÿþÿÿÿøÿÿÿïÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿïÿÿÿÿÿÿÿøÿÿÿïÿÿÿÿÿÿÿùÿÿÿòÿÿÿÿÿÿÿ÷ÿÿÿòÿÿÿÿÿÿÿùÿÿÿïÿÿÿøÿÿÿïÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿòÿÿÿïÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿðÿÿÿöÿÿÿ÷ÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿûÿÿÿöÿÿÿþÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿöÿÿÿûÿÿÿöÿÿÿýÿÿÿýÿÿÿûÿÿÿýÿÿÿýÿÿÿÿÿÿÿþÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿýÿÿÿþÿÿÿûÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿúÿÿÿýÿÿÿ  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿáÿÿÿúÿÿÿþÿÿÿâÿÿÿüÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿþÿÿÿïÿÿÿøÿÿÿþÿÿÿðÿÿÿùÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿÿÿÿÿïÿÿÿøÿÿÿÿÿÿÿðÿÿÿùÿÿÿÿÿÿÿòÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿùÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿóÿÿÿùÿÿÿþÿÿÿâÿÿÿþÿÿÿâÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿâÿÿÿâÿÿÿéÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿïÿÿÿéÿÿÿéÿÿÿïÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿòÿÿÿÿÿÿÿòÿÿÿ ïÿÿÿïÿÿÿòÿÿÿòÿÿÿ þÿÿÿïÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿýÿÿÿðÿÿÿÿÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿýÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿûÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿöÿÿÿöÿÿÿýÿÿÿýÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿýÿÿÿ       -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ÝÿÿÿýÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿýÿÿÿýÿÿÿáÿÿÿýÿÿÿÝÿÿÿýÿÿÿÝÿÿÿáÿÿÿýÿÿÿáÿÿÿáÿÿÿýÿÿÿûÿÿÿáÿÿÿýÿÿÿðÿÿÿýÿÿÿûÿÿÿðÿÿÿýÿÿÿáÿÿÿûÿÿÿáÿÿÿðÿÿÿûÿÿÿðÿÿÿáÿÿÿâÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿâÿÿÿãÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿçÿÿÿüÿÿÿèÿÿÿüÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿèÿÿÿýÿÿÿéÿÿÿýÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿíÿÿÿùÿÿÿíÿÿÿùÿÿÿ ðÿÿÿøÿÿÿðÿÿÿøÿÿÿíÿÿÿúÿÿÿîÿÿÿúÿÿÿ ðÿÿÿùÿÿÿñÿÿÿùÿÿÿûÿÿÿãÿÿÿþÿÿÿúÿÿÿãÿÿÿþÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿúÿÿÿéÿÿÿøÿÿÿéÿÿÿùÿÿÿíÿÿÿøÿÿÿíÿÿÿúÿÿÿçÿÿÿøÿÿÿçÿÿÿùÿÿÿêÿÿÿ øÿÿÿêÿÿÿ ùÿÿÿìÿÿÿøÿÿÿìÿÿÿùÿÿÿîÿÿÿ ÷ÿÿÿîÿÿÿ ùÿÿÿëÿÿÿøÿÿÿëÿÿÿùÿÿÿìÿÿÿ ÷ÿÿÿìÿÿÿ ðÿÿÿþÿÿÿñÿÿÿÿÿÿÿõÿÿÿöÿÿÿîÿÿÿïÿÿÿóÿÿÿôÿÿÿõÿÿÿöÿÿÿüÿÿÿýÿÿÿóÿÿÿôÿÿÿúÿÿÿûÿÿÿþÿÿÿþÿÿÿüÿÿÿ üÿÿÿ üÿÿÿüÿÿÿúÿÿÿ úÿÿÿ þÿÿÿïÿÿÿþÿÿÿüÿÿÿïÿÿÿÿÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿþÿÿÿôÿÿÿúÿÿÿûÿÿÿôÿÿÿúÿÿÿýÿÿÿùÿÿÿõÿÿÿûÿÿÿùÿÿÿöÿÿÿþÿÿÿõÿÿÿûÿÿÿûÿÿÿõÿÿÿüÿÿÿýÿÿÿúÿÿÿ÷ÿÿÿûÿÿÿúÿÿÿøÿÿÿýÿÿÿûÿÿÿóÿÿÿûÿÿÿûÿÿÿóÿÿÿýÿÿÿøÿÿÿúÿÿÿøÿÿÿýÿÿÿøÿÿÿõÿÿÿûÿÿÿøÿÿÿõÿÿÿýÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿúÿÿÿ  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok Êp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿâÿÿÿúÿÿÿãÿÿÿüÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿðÿÿÿ÷ÿÿÿøÿÿÿðÿÿÿùÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿðÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿùÿÿÿþÿÿÿãÿÿÿþÿÿÿãÿÿÿéÿÿÿéÿÿÿáÿÿÿáÿÿÿçÿÿÿçÿÿÿéÿÿÿéÿÿÿíÿÿÿíÿÿÿçÿÿÿçÿÿÿ êÿÿÿ êÿÿÿìÿÿÿìÿÿÿ îÿÿÿ îÿÿÿ ëÿÿÿëÿÿÿ ìÿÿÿ ìÿÿÿ þÿÿÿðÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿîÿÿÿýÿÿÿïÿÿÿÿÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿþÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿúÿÿÿûÿÿÿûÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿþÿÿÿ üÿÿÿúÿÿÿ üÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿ úÿÿÿúÿÿÿ úÿÿÿýÿÿÿþÿÿÿïÿÿÿÿÿÿÿïÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿðÿÿÿðÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿõÿÿÿùÿÿÿöÿÿÿùÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿ÷ÿÿÿúÿÿÿøÿÿÿúÿÿÿóÿÿÿûÿÿÿóÿÿÿûÿÿÿøÿÿÿøÿÿÿõÿÿÿøÿÿÿõÿÿÿøÿÿÿúÿÿÿýÿÿÿúÿÿÿýÿÿÿ       -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokæq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿåÿÿÿßÿÿÿþÿÿÿßÿÿÿþÿÿÿæÿÿÿÿÿÿÿæÿÿÿÿÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿÞÿÿÿþÿÿÿÞÿÿÿþÿÿÿ ÜÿÿÿùÿÿÿÜÿÿÿùÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿ Ýÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ ÜÿÿÿøÿÿÿÜÿÿÿøÿÿÿ -ÛÿÿÿöÿÿÿÛÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿøÿÿÿ -ÜÿÿÿõÿÿÿÜÿÿÿõÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿèÿÿÿ  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿåÿÿÿûÿÿÿåÿÿÿüÿÿÿþÿÿÿßÿÿÿùÿÿÿþÿÿÿßÿÿÿûÿÿÿÿÿÿÿæÿÿÿûÿÿÿÿÿÿÿæÿÿÿüÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿþÿÿÿÞÿÿÿùÿÿÿþÿÿÿÞÿÿÿûÿÿÿùÿÿÿÜÿÿÿ÷ÿÿÿùÿÿÿÜÿÿÿùÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿøÿÿÿÜÿÿÿ÷ÿÿÿøÿÿÿÜÿÿÿùÿÿÿöÿÿÿÛÿÿÿöÿÿÿöÿÿÿÛÿÿÿøÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿøÿÿÿÝÿÿÿùÿÿÿõÿÿÿÜÿÿÿöÿÿÿõÿÿÿÜÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿèÿÿÿÒÿÿÿïÿÿÿ  + +   + +  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿÿÿÿÿæÿÿÿûÿÿÿæÿÿÿüÿÿÿäÿÿÿùÿÿÿäÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿþÿÿÿãÿÿÿüÿÿÿáÿÿÿùÿÿÿáÿÿÿûÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ +ßÿÿÿ÷ÿÿÿ ßÿÿÿùÿÿÿâÿÿÿùÿÿÿâÿÿÿûÿÿÿÝÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿ ßÿÿÿ÷ÿÿÿ +ßÿÿÿùÿÿÿ Ýÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿ Ýÿÿÿùÿÿÿ +Ûÿÿÿöÿÿÿ Ûÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿÒÿÿÿïÿÿÿ  + +   + +  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿþÿÿÿåÿÿÿûÿÿÿÿÿÿÿåÿÿÿüÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿÿÿÿÿãÿÿÿüÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿåÿÿÿöÿÿÿåÿÿÿøÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿãÿÿÿöÿÿÿãÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿ#ãÿÿÿïÿÿÿ  + +   + +  +     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"*ØÿÿÿÜÿÿÿEKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*$ÅÿÿÿØÿÿÿwMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒãÿÿÿþÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠíÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿúÿÿÿÿÿÿÿãÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿàÿÿÿúÿÿÿáÿÿÿüÿÿÿçÿÿÿùÿÿÿèÿÿÿûÿÿÿéÿÿÿùÿÿÿêÿÿÿûÿÿÿìÿÿÿøÿÿÿíÿÿÿùÿÿÿæÿÿÿùÿÿÿçÿÿÿûÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿìÿÿÿøÿÿÿ íÿÿÿùÿÿÿ íÿÿÿ÷ÿÿÿ îÿÿÿùÿÿÿêÿÿÿøÿÿÿ ëÿÿÿùÿÿÿ ìÿÿÿ÷ÿÿÿ íÿÿÿùÿÿÿÿÿÿÿáÿÿÿáÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿâÿÿÿâÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿûÿÿÿèÿÿÿüÿÿÿèÿÿÿøÿÿÿíÿÿÿùÿÿÿíÿÿÿýÿÿÿèÿÿÿþÿÿÿèÿÿÿúÿÿÿîÿÿÿûÿÿÿîÿÿÿùÿÿÿíÿÿÿúÿÿÿíÿÿÿøÿÿÿðÿÿÿøÿÿÿðÿÿÿ úÿÿÿîÿÿÿúÿÿÿîÿÿÿøÿÿÿñÿÿÿùÿÿÿñÿÿÿ ÿÿÿÿîÿÿÿýÿÿÿÿÿÿÿïÿÿÿÿÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿúÿÿÿóÿÿÿüÿÿÿúÿÿÿôÿÿÿþÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿüÿÿÿõÿÿÿüÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿúÿÿÿûÿÿÿ÷ÿÿÿûÿÿÿþÿÿÿóÿÿÿúÿÿÿûÿÿÿôÿÿÿûÿÿÿþÿÿÿøÿÿÿÿÿÿÿúÿÿÿøÿÿÿýÿÿÿõÿÿÿøÿÿÿûÿÿÿõÿÿÿùÿÿÿþÿÿÿùÿÿÿýÿÿÿúÿÿÿúÿÿÿýÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿñÿÿÿöÿÿÿöÿÿÿîÿÿÿîÿÿÿóÿÿÿóÿÿÿõÿÿÿõÿÿÿüÿÿÿüÿÿÿôÿÿÿôÿÿÿúÿÿÿúÿÿÿþÿÿÿÿÿÿÿ üÿÿÿ ýÿÿÿûÿÿÿüÿÿÿ ùÿÿÿ úÿÿÿ              -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿæÿÿÿÿÿÿÿæÿÿÿäÿÿÿäÿÿÿãÿÿÿþÿÿÿãÿÿÿþÿÿÿáÿÿÿáÿÿÿãÿÿÿãÿÿÿ ßÿÿÿ -ßÿÿÿ âÿÿÿâÿÿÿ ÝÿÿÿÝÿÿÿ ßÿÿÿ ßÿÿÿ - -Ýÿÿÿ Ýÿÿÿ ÝÿÿÿÝÿÿÿ -Ûÿÿÿ -Ûÿÿÿ üÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿ  +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿáÿÿÿúÿÿÿþÿÿÿâÿÿÿüÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿþÿÿÿèÿÿÿùÿÿÿþÿÿÿéÿÿÿûÿÿÿþÿÿÿïÿÿÿøÿÿÿþÿÿÿðÿÿÿùÿÿÿèÿÿÿùÿÿÿéÿÿÿûÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿÿÿÿÿïÿÿÿøÿÿÿÿÿÿÿðÿÿÿùÿÿÿÿÿÿÿòÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿùÿÿÿïÿÿÿøÿÿÿðÿÿÿùÿÿÿòÿÿÿ÷ÿÿÿóÿÿÿùÿÿÿþÿÿÿâÿÿÿþÿÿÿâÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿâÿÿÿâÿÿÿéÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿéÿÿÿþÿÿÿïÿÿÿþÿÿÿïÿÿÿéÿÿÿéÿÿÿïÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿïÿÿÿÿÿÿÿòÿÿÿÿÿÿÿòÿÿÿ ïÿÿÿïÿÿÿòÿÿÿòÿÿÿ þÿÿÿïÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿïÿÿÿýÿÿÿðÿÿÿÿÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿöÿÿÿüÿÿÿþÿÿÿ÷ÿÿÿþÿÿÿþÿÿÿýÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿúÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿûÿÿÿÿÿÿÿýÿÿÿþÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿþÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿöÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿöÿÿÿöÿÿÿýÿÿÿýÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýÿÿÿþÿÿÿýÿÿÿýÿÿÿýÿÿÿ              -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿþÿÿÿåÿÿÿÿÿÿÿåÿÿÿåÿÿÿãÿÿÿþÿÿÿãÿÿÿÿÿÿÿãÿÿÿãÿÿÿåÿÿÿåÿÿÿ åÿÿÿ åÿÿÿ ãÿÿÿãÿÿÿ ãÿÿÿ ãÿÿÿ åÿÿÿ åÿÿÿ -åÿÿÿåÿÿÿ ãÿÿÿ ãÿÿÿ -ãÿÿÿãÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿãÿÿÿ#  +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokÊp¨ýÿÿÿÝÿÿÿþÿÿÿýÿÿÿÝÿÿÿýÿÿÿáÿÿÿþÿÿÿýÿÿÿáÿÿÿÝÿÿÿþÿÿÿÝÿÿÿáÿÿÿþÿÿÿáÿÿÿýÿÿÿáÿÿÿüÿÿÿýÿÿÿáÿÿÿýÿÿÿðÿÿÿüÿÿÿýÿÿÿðÿÿÿáÿÿÿüÿÿÿáÿÿÿðÿÿÿüÿÿÿðÿÿÿáÿÿÿúÿÿÿâÿÿÿüÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿâÿÿÿúÿÿÿãÿÿÿüÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿüÿÿÿçÿÿÿùÿÿÿüÿÿÿèÿÿÿûÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿýÿÿÿèÿÿÿùÿÿÿýÿÿÿéÿÿÿûÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿíÿÿÿøÿÿÿùÿÿÿíÿÿÿùÿÿÿøÿÿÿðÿÿÿ÷ÿÿÿøÿÿÿðÿÿÿùÿÿÿúÿÿÿíÿÿÿøÿÿÿúÿÿÿîÿÿÿùÿÿÿùÿÿÿðÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿùÿÿÿþÿÿÿãÿÿÿþÿÿÿãÿÿÿéÿÿÿéÿÿÿáÿÿÿáÿÿÿçÿÿÿçÿÿÿéÿÿÿéÿÿÿíÿÿÿíÿÿÿçÿÿÿçÿÿÿ êÿÿÿ êÿÿÿìÿÿÿìÿÿÿ îÿÿÿ îÿÿÿ ëÿÿÿëÿÿÿ ìÿÿÿ ìÿÿÿ þÿÿÿðÿÿÿýÿÿÿÿÿÿÿñÿÿÿÿÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿîÿÿÿýÿÿÿïÿÿÿÿÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿõÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿþÿÿÿóÿÿÿüÿÿÿôÿÿÿþÿÿÿúÿÿÿûÿÿÿûÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿþÿÿÿ üÿÿÿúÿÿÿ üÿÿÿýÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿ úÿÿÿúÿÿÿ úÿÿÿýÿÿÿþÿÿÿïÿÿÿÿÿÿÿïÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿðÿÿÿðÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿúÿÿÿôÿÿÿúÿÿÿôÿÿÿõÿÿÿùÿÿÿöÿÿÿùÿÿÿûÿÿÿõÿÿÿüÿÿÿõÿÿÿ÷ÿÿÿúÿÿÿøÿÿÿúÿÿÿóÿÿÿûÿÿÿóÿÿÿûÿÿÿøÿÿÿøÿÿÿõÿÿÿøÿÿÿõÿÿÿøÿÿÿúÿÿÿýÿÿÿúÿÿÿýÿÿÿ              -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p" æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿåÿÿÿßÿÿÿþÿÿÿßÿÿÿþÿÿÿæÿÿÿÿÿÿÿæÿÿÿÿÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿÞÿÿÿþÿÿÿÞÿÿÿþÿÿÿ ÜÿÿÿùÿÿÿÜÿÿÿùÿÿÿàÿÿÿüÿÿÿàÿÿÿüÿÿÿ Ýÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ ÜÿÿÿøÿÿÿÜÿÿÿøÿÿÿ -ÛÿÿÿöÿÿÿÛÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿøÿÿÿ -ÜÿÿÿõÿÿÿÜÿÿÿõÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿèÿÿÿ  - -   - -  -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p" æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿæÿÿÿÿÿÿÿæÿÿÿäÿÿÿäÿÿÿãÿÿÿþÿÿÿãÿÿÿþÿÿÿáÿÿÿáÿÿÿãÿÿÿãÿÿÿ ßÿÿÿ -ßÿÿÿ âÿÿÿâÿÿÿ ÝÿÿÿÝÿÿÿ ßÿÿÿ ßÿÿÿ - -Ýÿÿÿ Ýÿÿÿ ÝÿÿÿÝÿÿÿ -Ûÿÿÿ -Ûÿÿÿ üÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿÒÿÿÿ  - -   - -  -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©ÞÿÿÿþÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿþÿÿÿþÿÿÿâÿÿÿþÿÿÿÞÿÿÿþÿÿÿÞÿÿÿâÿÿÿþÿÿÿâÿÿÿâÿÿÿþÿÿÿüÿÿÿâÿÿÿþÿÿÿðÿÿÿþÿÿÿüÿÿÿðÿÿÿþÿÿÿâÿÿÿüÿÿÿâÿÿÿðÿÿÿüÿÿÿðÿÿÿåÿÿÿþÿÿÿåÿÿÿÿÿÿÿåÿÿÿåÿÿÿãÿÿÿþÿÿÿãÿÿÿÿÿÿÿãÿÿÿãÿÿÿåÿÿÿåÿÿÿ åÿÿÿ åÿÿÿ ãÿÿÿãÿÿÿ ãÿÿÿ ãÿÿÿ åÿÿÿ åÿÿÿ -åÿÿÿåÿÿÿ ãÿÿÿ ãÿÿÿ -ãÿÿÿãÿÿÿüÿÿÿãÿÿÿÿÿÿÿúÿÿÿãÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿüÿÿÿäÿÿÿúÿÿÿäÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿúÿÿÿéÿÿÿüÿÿÿøÿÿÿéÿÿÿüÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿúÿÿÿêÿÿÿýÿÿÿøÿÿÿêÿÿÿþÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿùÿÿÿîÿÿÿùÿÿÿ÷ÿÿÿîÿÿÿúÿÿÿøÿÿÿñÿÿÿøÿÿÿöÿÿÿñÿÿÿùÿÿÿùÿÿÿïÿÿÿúÿÿÿ÷ÿÿÿïÿÿÿûÿÿÿøÿÿÿòÿÿÿùÿÿÿöÿÿÿòÿÿÿúÿÿÿðÿÿÿþÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿðÿÿÿñÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿöÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿúÿÿÿüÿÿÿúÿÿÿöÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿýÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿúÿÿÿÿÿÿÿûÿÿÿúÿÿÿüÿÿÿúÿÿÿþÿÿÿþÿÿÿþÿÿÿñÿÿÿþÿÿÿüÿÿÿñÿÿÿþÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿðÿÿÿüÿÿÿðÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿ÷ÿÿÿüÿÿÿ÷ÿÿÿþÿÿÿýÿÿÿûÿÿÿýÿÿÿþÿÿÿöÿÿÿüÿÿÿöÿÿÿþÿÿÿüÿÿÿûÿÿÿüÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿþÿÿÿúÿÿÿþÿÿÿþÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿûÿÿÿúÿÿÿüÿÿÿãÿÿÿ#  - -   - -  -     ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"RÜÿÿÿäÿÿÿJDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*$ÌÿÿÿÔÿÿÿwMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²6Réÿÿÿæÿÿÿ-éÿÿÿæÿÿÿÒÿÿÿéÿÿÿÒÿÿÿéÿÿÿ-éÿÿÿóÿÿÿ@éÿÿÿ @éÿÿÿ ¿ÿÿÿéÿÿÿóÿÿÿ¿ÿÿÿßÿÿÿæÿÿÿ-ßÿÿÿæÿÿÿÒÿÿÿßÿÿÿóÿÿÿ¿ÿÿÿßÿÿÿ ¿ÿÿÿßÿÿÿÒÿÿÿßÿÿÿ-ßÿÿÿ @ßÿÿÿóÿÿÿ@éÿÿÿ3éÿÿÿóÿÿÿ3éÿÿÿÒÿÿÿéÿÿÿÒÿÿÿæÿÿÿéÿÿÿóÿÿÿÜÿÿÿéÿÿÿ*æÿÿÿ-æÿÿÿÒÿÿÿÒÿÿÿ- @ ¿ÿÿÿóÿÿÿ¿ÿÿÿ æÿÿÿ- æÿÿÿÒÿÿÿ óÿÿÿ¿ÿÿÿ ¿ÿÿÿ Òÿÿÿ - @ óÿÿÿ@3óÿÿÿ3ÒÿÿÿÒÿÿÿæÿÿÿóÿÿÿÜÿÿÿÜÿÿÿ*éÿÿÿÜÿÿÿóÿÿÿ@ßÿÿÿüÿÿÿßÿÿÿüÿÿÿæÿÿÿæÿÿÿßÿÿÿaüÿÿÿßÿÿÿaüÿÿÿæÿÿÿaæÿÿÿa    +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokæq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿåÿÿÿûÿÿÿåÿÿÿüÿÿÿþÿÿÿßÿÿÿùÿÿÿþÿÿÿßÿÿÿûÿÿÿÿÿÿÿæÿÿÿûÿÿÿÿÿÿÿæÿÿÿüÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿþÿÿÿÞÿÿÿùÿÿÿþÿÿÿÞÿÿÿûÿÿÿùÿÿÿÜÿÿÿ÷ÿÿÿùÿÿÿÜÿÿÿùÿÿÿüÿÿÿàÿÿÿùÿÿÿüÿÿÿàÿÿÿûÿÿÿ÷ÿÿÿÝÿÿÿ÷ÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿøÿÿÿÜÿÿÿ÷ÿÿÿøÿÿÿÜÿÿÿùÿÿÿöÿÿÿÛÿÿÿöÿÿÿöÿÿÿÛÿÿÿøÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿøÿÿÿÝÿÿÿùÿÿÿõÿÿÿÜÿÿÿöÿÿÿõÿÿÿÜÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿèÿÿÿÒÿÿÿïÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿÿÿÿÿæÿÿÿûÿÿÿæÿÿÿüÿÿÿäÿÿÿùÿÿÿäÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿþÿÿÿãÿÿÿüÿÿÿáÿÿÿùÿÿÿáÿÿÿûÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ +ßÿÿÿ÷ÿÿÿ ßÿÿÿùÿÿÿâÿÿÿùÿÿÿâÿÿÿûÿÿÿÝÿÿÿ÷ÿÿÿÝÿÿÿùÿÿÿ ßÿÿÿ÷ÿÿÿ +ßÿÿÿùÿÿÿ Ýÿÿÿöÿÿÿ ÝÿÿÿøÿÿÿÝÿÿÿ÷ÿÿÿ Ýÿÿÿùÿÿÿ +Ûÿÿÿöÿÿÿ Ûÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿÒÿÿÿïÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p" æq©þÿÿÿÞÿÿÿÿÿÿÿþÿÿÿÞÿÿÿþÿÿÿâÿÿÿÿÿÿÿþÿÿÿâÿÿÿÞÿÿÿÿÿÿÿÞÿÿÿâÿÿÿÿÿÿÿâÿÿÿþÿÿÿâÿÿÿýÿÿÿþÿÿÿâÿÿÿþÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿâÿÿÿýÿÿÿâÿÿÿðÿÿÿýÿÿÿðÿÿÿþÿÿÿåÿÿÿûÿÿÿÿÿÿÿåÿÿÿüÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿþÿÿÿãÿÿÿûÿÿÿÿÿÿÿãÿÿÿüÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿåÿÿÿùÿÿÿåÿÿÿûÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿãÿÿÿùÿÿÿãÿÿÿûÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿ åÿÿÿ÷ÿÿÿ åÿÿÿùÿÿÿåÿÿÿöÿÿÿåÿÿÿøÿÿÿ ãÿÿÿ÷ÿÿÿ ãÿÿÿùÿÿÿãÿÿÿöÿÿÿãÿÿÿøÿÿÿÿÿÿÿãÿÿÿãÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿäÿÿÿäÿÿÿýÿÿÿêÿÿÿþÿÿÿêÿÿÿüÿÿÿéÿÿÿüÿÿÿéÿÿÿùÿÿÿîÿÿÿúÿÿÿîÿÿÿ ýÿÿÿêÿÿÿþÿÿÿêÿÿÿúÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿîÿÿÿúÿÿÿîÿÿÿ øÿÿÿñÿÿÿùÿÿÿñÿÿÿ +úÿÿÿïÿÿÿûÿÿÿïÿÿÿ ùÿÿÿòÿÿÿúÿÿÿòÿÿÿ +þÿÿÿðÿÿÿýÿÿÿþÿÿÿðÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿðÿÿÿýÿÿÿñÿÿÿÿÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿüÿÿÿöÿÿÿüÿÿÿüÿÿÿöÿÿÿÿÿÿÿúÿÿÿüÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿÿÿÿÿöÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿýÿÿÿüÿÿÿûÿÿÿýÿÿÿýÿÿÿþÿÿÿùÿÿÿþÿÿÿûÿÿÿúÿÿÿþÿÿÿþÿÿÿÿÿÿÿûÿÿÿýÿÿÿúÿÿÿûÿÿÿûÿÿÿúÿÿÿüÿÿÿþÿÿÿþÿÿÿûÿÿÿþÿÿÿýÿÿÿþÿÿÿñÿÿÿþÿÿÿñÿÿÿ÷ÿÿÿ÷ÿÿÿðÿÿÿðÿÿÿöÿÿÿöÿÿÿ÷ÿÿÿ÷ÿÿÿýÿÿÿýÿÿÿöÿÿÿöÿÿÿüÿÿÿüÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿÿýÿÿÿûÿÿÿüÿÿÿ#ãÿÿÿïÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok&p"²6R-æÿÿÿÒÿÿÿæÿÿÿÒÿÿÿ-@óÿÿÿ@ ¿ÿÿÿ ¿ÿÿÿóÿÿÿ-æÿÿÿ!Òÿÿÿæÿÿÿ!¿ÿÿÿóÿÿÿ!¿ÿÿÿ !Òÿÿÿ!-!@ !@óÿÿÿ!33óÿÿÿÒÿÿÿæÿÿÿÒÿÿÿÜÿÿÿóÿÿÿ*-æÿÿÿêÿÿÿÒÿÿÿæÿÿÿêÿÿÿÒÿÿÿêÿÿÿ-êÿÿÿ@ êÿÿÿ¿ÿÿÿ êÿÿÿ¿ÿÿÿóÿÿÿêÿÿÿ-æÿÿÿàÿÿÿÒÿÿÿæÿÿÿàÿÿÿ¿ÿÿÿóÿÿÿàÿÿÿ¿ÿÿÿ àÿÿÿÒÿÿÿàÿÿÿ-àÿÿÿ@ àÿÿÿ@óÿÿÿàÿÿÿ3êÿÿÿ3óÿÿÿêÿÿÿÒÿÿÿêÿÿÿæÿÿÿÒÿÿÿêÿÿÿÜÿÿÿóÿÿÿêÿÿÿÜÿÿÿêÿÿÿ*êÿÿÿÜÿÿÿ@óÿÿÿêÿÿÿßÿÿÿýÿÿÿßÿÿÿæÿÿÿæÿÿÿýÿÿÿaßÿÿÿýÿÿÿaßÿÿÿaæÿÿÿaæÿÿÿýÿÿÿ              -    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"²éÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file +    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-" \ No newline at end of file diff --git a/Apps/ToTheFront/AIs/Human.HC b/Apps/ToTheFront/AIs/Human.HC index c48f89a..9096d4e 100644 --- a/Apps/ToTheFront/AIs/Human.HC +++ b/Apps/ToTheFront/AIs/Human.HC @@ -1,7 +1,7 @@ U0 PlayerIndirect() { Unit *tmpu=NULL; - I64 i,remaining=0,msg_code,a1,a2; + I64 i,remaining=0,msg_code,arg1,arg2; F64 target_x,target_y; ViewPlayerSet(cur_player); for (i=0;iplayer==enemy_player || tmpu->fired || !tmpu->indirect_fire) @@ -33,10 +33,10 @@ U0 PlayerIndirect() } } break; - case MSG_IP_L_UP: - if (CursorInWin(Fs,a1,a2)) { - a1-=x0; a2-=y0; - CursorUpdate(Fs,a1,a2); + case MSG_MS_L_UP: + if (CursorInWin(Fs,arg1,arg2)) { + arg1-=x0; arg2-=y0; + CursorUpdate(Fs,arg1,arg2); RowCol2XY(&target_x,&target_y,cursor_row,cursor_col); if (!tmpu) Beep; @@ -53,8 +53,8 @@ U0 PlayerIndirect() tmpu=NULL; fire_radius=0; break; - case MSG_IP_R_UP: - if (CursorInWin(Fs,a1,a2)) + case MSG_MS_R_UP: + if (CursorInWin(Fs,arg1,arg2)) throw('PhaseOvr',TRUE); break; } @@ -65,42 +65,42 @@ U0 PlayerIndirect() U0 PlayerMove() { Unit *tmpu=NULL; - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; ViewPlayerSet(cur_player); while (TRUE) { if (!alive_cnt[0] || !alive_cnt[1]) throw('GameOver',TRUE); - msg_code=GetMsg(&a1,&a2,1<player==enemy_player || !tmpu->remaining_movement) tmpu=NULL; } } break; - case MSG_IP_L_UP: - if (CursorInWin(Fs,a1,a2)) { - a1-=x0; a2-=y0; - CursorUpdate(Fs,a1,a2); + case MSG_MS_L_UP: + if (CursorInWin(Fs,arg1,arg2)) { + arg1-=x0; arg2-=y0; + CursorUpdate(Fs,arg1,arg2); if (!tmpu) Beep; else { - UnitMove(tmpu,a1,a2); + UnitMove(tmpu,arg1,arg2); break; } } tmpu=NULL; break; - case MSG_IP_R_UP: - if (CursorInWin(Fs,a1,a2)) + case MSG_MS_R_UP: + if (CursorInWin(Fs,arg1,arg2)) throw('PhaseOvr',TRUE); break; } @@ -110,21 +110,21 @@ U0 PlayerMove() U0 PlayerDirect() { Unit *tmpu=NULL,*target; - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; ViewPlayerSet(cur_player); while (TRUE) { if (!alive_cnt[0] || !alive_cnt[1]) throw('GameOver',TRUE); - msg_code=GetMsg(&a1,&a2,1<player==enemy_player || tmpu->fired || tmpu->indirect_fire) @@ -138,10 +138,10 @@ U0 PlayerDirect() } } break; - case MSG_IP_L_UP: - if (CursorInWin(Fs,a1,a2)) { - a1-=x0; a2-=y0; - CursorUpdate(Fs,a1,a2); + case MSG_MS_L_UP: + if (CursorInWin(Fs,arg1,arg2)) { + arg1-=x0; arg2-=y0; + CursorUpdate(Fs,arg1,arg2); target=UnitFind(cursor_row,cursor_col); if (!tmpu) Beep; @@ -157,8 +157,8 @@ U0 PlayerDirect() tmpu=NULL; fire_radius=0; break; - case MSG_IP_R_UP: - if (CursorInWin(Fs,a1,a2)) + case MSG_MS_R_UP: + if (CursorInWin(Fs,arg1,arg2)) throw('PhaseOvr',TRUE); break; } diff --git a/Apps/ToTheFront/TTFDraw.HC b/Apps/ToTheFront/TTFDraw.HC index 72f9f9b638d6027f28b4806354d026a98de72f5b..bf196692dd0ccd07b5b6718d3771b898d040d094 100644 GIT binary patch delta 41 vcmdm_ylife=0; VisRecalc(VR_FRIENDLY_UNIT_DIED,target); @@ -140,13 +140,13 @@ U0 UnitDirectFire(Unit *tmpu,Unit *target) if (d>=0) { "+%5.2f Hit\n",d; target_hit=TRUE; - Noise(500*animation_delay,100,150); + Noise(500*animation_delay,34,41); Sleep(500*animation_delay); Line(NULL,x1,y1,0,x2,y2,0,&BulletPlot); } else { "-%5.2f Miss\n",-d; target_hit=FALSE; - Noise(1000*animation_delay,750,1000); + Noise(1000*animation_delay,69,74); Sleep(1000*animation_delay); a=ã*2*Rand; d=(0.5-d/100)*HEX_SIDE; @@ -162,7 +162,7 @@ U0 UnitDirectFire(Unit *tmpu,Unit *target) facing=0; DamageDo(target,HitDamage(tmpu,target,facing,range_factor)); } - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; target_unit=NULL; } @@ -177,7 +177,7 @@ Bool HexOccupy(Bool overrun,Unit *tmpu,Unit *target) AttackHeader(tmpu,"OverRun",target); else AttackHeader(tmpu,"CloseAssault",target); - Noise(500*animation_delay,100,150); + Noise(500*animation_delay,34,41); Sleep(500*animation_delay); tmpu->fired=TRUE; target->fired=TRUE; @@ -195,7 +195,7 @@ Bool HexOccupy(Bool overrun,Unit *tmpu,Unit *target) } if (DamageDo(target,Round(damage))) { "$$RED$$Success$$FG$$\n"; - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; return TRUE; } else { @@ -203,7 +203,7 @@ Bool HexOccupy(Bool overrun,Unit *tmpu,Unit *target) VisRecalc(VR_FRIENDLY_UNIT_DIED,tmpu); alive_cnt[tmpu->player]--; "$$RED$$Failure$$FG$$\n"; - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; return FALSE; } @@ -233,11 +233,11 @@ U0 IndirectResolveAll() if (d>=0) { "+%5.2f Hit\n",d; - Noise(500*animation_delay,100,150); + Noise(500*animation_delay,34,41); Sleep(500*animation_delay); } else { "-%5.2f Miss\n",-d; - Noise(1000*animation_delay,750,1000); + Noise(1000*animation_delay,69,74); Sleep(1000*animation_delay); i=RandU16%6; if (tmpi->row&1) @@ -265,9 +265,9 @@ U0 IndirectResolveAll() DamageDo(target,HitDamage(tmpu,target)); } } - Noise(2000*animation_delay,800,1000); + Noise(2000*animation_delay,70,74); Sleep(2000*animation_delay); - while (snd.freq) //see $LK,"Snd",A="MN:Snd"$() + while (snd.ona!=ONA_REST) //see $LK,"Snd",A="MN:Snd"$() Yield; indirect_explosion=FALSE; diff --git a/Apps/ToTheFront/TTFMove.HC b/Apps/ToTheFront/TTFMove.HC index e529ae3..b36a1d5 100644 --- a/Apps/ToTheFront/TTFMove.HC +++ b/Apps/ToTheFront/TTFMove.HC @@ -64,10 +64,10 @@ U0 UnitMoveAnimation(Unit *tmpu,I64 r,I64 c,I64 facing) move_x=x1; move_y=y1; moving=TRUE; if (tmpu->infantry) - Snd(300); + Snd(53); else { move_facing=tmpu->facing*60.0*ã/180.0; - Snd(150); + Snd(41); while (Wrap(f-move_facing,-ã)<=0) { move_facing-=0.03; Sleep(5*animation_delay); @@ -76,12 +76,12 @@ U0 UnitMoveAnimation(Unit *tmpu,I64 r,I64 c,I64 facing) move_facing+=0.03; Sleep(5*animation_delay); } - Snd(100); + Snd(34); } move_facing=f; RowCol2XY(&x2,&y2,r,c); Line(NULL,x1,y1,0,x2,y2,0,&UnitMovePlot); - Snd(0); + Snd; moving_unit=NULL; moving=FALSE; } diff --git a/Apps/ToTheFront/TTFVis.HC b/Apps/ToTheFront/TTFVis.HC index 367c093..1c8fb4b 100644 --- a/Apps/ToTheFront/TTFVis.HC +++ b/Apps/ToTheFront/TTFVis.HC @@ -144,7 +144,7 @@ stk size, so don't get in the habit. $LK,"MAlloc",A="MN:MAlloc"$() would probably be the better choice. */ MPCtrl1 job[mp_cnt]; - CSrvCmd *cmd[mp_cnt]; + CJob *cmd[mp_cnt]; if (mode==VR_FRIENDLY_UNIT_DIED) { MemSet((&vis_unit_bitmap[enemy_player])(U8 *)+ @@ -200,7 +200,7 @@ U0 VisRecalcMap(I64 row,I64 col) { I64 i,hi,k,cnt; MPCtrl2 job[mp_cnt]; - CSrvCmd *cmd[mp_cnt]; + CJob *cmd[mp_cnt]; cnt=mp_cnt; //Cores hi=map_rows; diff --git a/Apps/ToTheFront/ToTheFront.HC b/Apps/ToTheFront/ToTheFront.HC index 81288b8..cea77d7 100644 --- a/Apps/ToTheFront/ToTheFront.HC +++ b/Apps/ToTheFront/ToTheFront.HC @@ -16,7 +16,7 @@ U0 TurnNew() SleepUntil(msg_off_timeout); msg_off_timeout=cnts.jiffies+JIFFY_FREQ*2*animation_delay+1; - Snd(1000); + Snd(74); StrPrint(msg_buf,"Turn %d",++turn); VRSetUp(0); VRSetUp(1); @@ -36,7 +36,7 @@ U0 PhaseNew() SleepUntil(msg_off_timeout); msg_off_timeout=cnts.jiffies+JIFFY_FREQ*2*animation_delay+1; - Snd(1000); + Snd(74); switch (phase) { case PHASE_INDIRECT0: case PHASE_INDIRECT1: @@ -102,7 +102,7 @@ U0 UserChk() U0 TaskEndCB() { - Snd(0); + Snd; progress4=progress4_max=progress1=progress1_max=0; Exit; } @@ -132,7 +132,7 @@ U0 ToTheFront() SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ Cd(__DIR__); - Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R|WIG_DBL_CLICK; + Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R|WIG_DBL_CLICK; MenuPush( "File {" @@ -181,7 +181,7 @@ U0 ToTheFront() while (TRUE) { msg_off_timeout=0; StrCpy(msg_buf,"Game Over"); - Snd(0); + Snd; ch=GetChar(,FALSE); if (ch=='\n') { CleanUp; diff --git a/Apps/Vocabulary/VocabQuiz.HC b/Apps/Vocabulary/VocabQuiz.HC index ac3eb7c..2610d22 100644 --- a/Apps/Vocabulary/VocabQuiz.HC +++ b/Apps/Vocabulary/VocabQuiz.HC @@ -41,13 +41,13 @@ U0 VocabQuiz() '\n'; if (ch-'1'==num) { "$$LTGREEN$$Correct\n$$FG$$"; - Snd(1000); + Snd(74); } else { "$$LTRED$$Incorrect\n$$FG$$"; - Snd(200); + Snd(46); } Sleep(500); - Snd(0); + Snd; ACDPopUpDef(right_word); break; } diff --git a/Apps/X-Caliber/X-Caliber.HC b/Apps/X-Caliber/X-Caliber.HC index 49b6ad8..80cb706 100644 --- a/Apps/X-Caliber/X-Caliber.HC +++ b/Apps/X-Caliber/X-Caliber.HC @@ -1,15 +1,18 @@ -#define XMSGF_ANTISPIN 0 -RegSetDftEntry("TempleOS/XCaliber", +#define XMSGF_ANTISPIN 0 +#define XMSGF_SOLAR_STORM 1 +RegDft("TempleOS/XCaliber", "I64 best_score=0;\n" "I64 msg_flags=0;\n" ); -RegExeBranch("TempleOS/XCaliber"); +RegExe("TempleOS/XCaliber"); #define MT_HUMAN_SHIP 0 #define MT_ENEMY_SHIP 1 -#define MT_SUPER_NAPALM_BALL 2 -#define MT_SUPER_NAPALM_SPLAT 3 -#define MT_MISSILE 4 +#define MT_SOLAR_FLARE 2 +#define MT_ION 3 +#define MT_ANTIMATTER_BALL 4 +#define MT_ANTIMATTER_SPLAT 5 +#define MT_MISSILE 6 class MyMass:CMass { @@ -71,6 +74,9 @@ class Shot MyMass p; } shot_head; +F64 t_solar_storm; +Bool alarm; + #define MAX_THRUST 200.0 #define MAX_ANTISPIN 25.0 #define SPACEWALK_TIME 7.5 @@ -396,8 +402,7 @@ I64 Tweaked() if (human) { D3Sub(&p1,&human->p[0].x,&human->p[1].x); D3Sub(&p2,&human->p[0].x,&human->p[2].x); - D3Add(&p,&p1,&p2); - D3Unit(&p); + D3Unit(D3Add(&p,&p1,&p2)); D3Sub(&p1,&human->p[0].x,&human->p[3].x); D3Sub(&p2,&human->p[0].x,&human->p[4].x); D3Unit(&p1); @@ -471,7 +476,10 @@ U0 DrawIt(CTask *task,CDC *dc) tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { - if (tmpm->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type==MT_ANTIMATTER_SPLAT) { + dc->color=LTGREEN; + GrPlot(dc,tmpm->x,tmpm->y); + } else if (tmpm->type==MT_ION) { dc->color=YELLOW; GrPlot(dc,tmpm->x,tmpm->y); } @@ -502,7 +510,7 @@ U0 DrawIt(CTask *task,CDC *dc) GrCircle(dc,tmpmi->p_front.x,tmpmi->p_front.y,i); } } else - SpriteZ3B(dc,(tmpmi->p_front.x+tmpmi->p_back.x)/2, + Sprite3ZB(dc,(tmpmi->p_front.x+tmpmi->p_back.x)/2, (tmpmi->p_front.y+tmpmi->p_back.y)/2,0,tmpmi->img, Arg(tmpmi->p_front.x-tmpmi->p_back.x, tmpmi->p_front.y-tmpmi->p_back.y)); @@ -547,7 +555,7 @@ U0 DrawIt(CTask *task,CDC *dc) D3AddEqu(D3Mul(&p1,t_left/25,&p),&tmpsp->p[3].x); GrLine(dc,tmpsp->p[1].x,tmpsp->p[1].y,p1.x,p1.y); arg=Arg(p.x,p.y); - SpriteZ3B(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,$IB,"",BI=1$,arg); + Sprite3ZB(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,$IB,"",BI=1$,arg); } if (!(tmpsp->s[5].flags&SSF_INACTIVE)) { @@ -555,7 +563,7 @@ U0 DrawIt(CTask *task,CDC *dc) D3AddEqu(D3Mul(&p2,t_right/25,&p),&tmpsp->p[4].x); GrLine(dc,tmpsp->p[2].x,tmpsp->p[2].y,p2.x,p2.y); arg=Arg(p.x,p.y); - SpriteZ3B(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,$IB,"",BI=1$,arg); + Sprite3ZB(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,$IB,"",BI=1$,arg); } if (tS>tmpsp->reload_timeout) @@ -566,22 +574,22 @@ U0 DrawIt(CTask *task,CDC *dc) switch (level) { case 3: if (!(tmpsp->s[3].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[3].x,tmpsp->p[3].y,0,img,arg); if (!(tmpsp->s[5].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[4].x,tmpsp->p[4].y,0,img,arg); case 2: if (!(tmpsp->s[1].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[1].x,tmpsp->p[1].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[1].x,tmpsp->p[1].y,0,img,arg); if (!(tmpsp->s[2].flags&SSF_INACTIVE)) - SpriteZ3B(dc,tmpsp->p[2].x,tmpsp->p[2].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[2].x,tmpsp->p[2].y,0,img,arg); case 1: - SpriteZ3B(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); break; default: - SpriteZ3B(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,$IB,"",BI=6$,arg); + Sprite3ZB(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,$IB,"",BI=6$,arg); if (tmpsp->lasering && !tmpsp->laser_overheat) { draw_laser_line=TRUE; - Snd(1000); + Snd(74); } } @@ -606,7 +614,7 @@ U0 DrawIt(CTask *task,CDC *dc) y=tmpsp->p[tmpsp->spacewalk_side].y*(1.0-d)+ tmpsp->p[0].y*(d); } - SpriteZ3B(dc,x,y,0,$IB,"",BI=4$,arg+0.75*Sin(tS*2)); + Sprite3ZB(dc,x,y,0,$IB,"",BI=4$,arg+0.75*Sin(tS*2)); } } else { if (ctrl_panel.spacewalk) { @@ -634,12 +642,12 @@ U0 DrawIt(CTask *task,CDC *dc) else img=$IB,"",BI=3$; arg=Arg(p.x,p.y); - SpriteZ3B(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); + Sprite3ZB(dc,tmpsp->p[0].x,tmpsp->p[0].y,0,img,arg); arg=Arg(p1.x,p1.y); - SpriteZ3B(dc,tmpsp->p[0].x+p1.x,tmpsp->p[0].y+p1.y,0, + Sprite3ZB(dc,tmpsp->p[0].x+p1.x,tmpsp->p[0].y+p1.y,0, $IB,"",BI=5$,arg); arg=Arg(p2.x,p2.y); - SpriteZ3B(dc,tmpsp->p[0].x+p2.x,tmpsp->p[0].y+p2.y,0, + Sprite3ZB(dc,tmpsp->p[0].x+p2.x,tmpsp->p[0].y+p2.y,0, $IB,"",BI=5$,arg); break; } @@ -765,23 +773,23 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { - d=tmpm->state->x; - if (d-tmpm->radius<0) - tmpm->DstateDt->DxDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); - if (d+tmpm->radius>task->pix_width) - tmpm->DstateDt->DxDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_width))); - - d=tmpm->state->y; - if (d-tmpm->radius<0) - tmpm->DstateDt->DyDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); - if (d+tmpm->radius>task->pix_height) - tmpm->DstateDt->DyDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_height))); - - if (tmpm->type!=MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type!=MT_SOLAR_FLARE && tmpm->type!=MT_ION) { + d=tmpm->state->x; + if (d-tmpm->radius<0) + tmpm->DstateDt->DxDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); + if (d+tmpm->radius>task->pix_width) + tmpm->DstateDt->DxDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_width))); + d=tmpm->state->y; + if (d-tmpm->radius<0) + tmpm->DstateDt->DyDt+=Sqr(Sqr(Sqr(d-tmpm->radius))); + if (d+tmpm->radius>task->pix_height) + tmpm->DstateDt->DyDt-=Sqr(Sqr(Sqr((d+tmpm->radius)-task->pix_height))); + } + if (tmpm->type!=MT_ION && tmpm->type!=MT_ANTIMATTER_SPLAT) { tmpm1=ode->next_mass; while (tmpm1!=&ode->next_mass) { if (tmpm!=tmpm1) { - if (tmpm1->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm1->type==MT_ANTIMATTER_SPLAT) { if (tmpm->type==MT_HUMAN_SHIP || tmpm->type==MT_ENEMY_SHIP) { D3Sub(&p,&tmpm->state->x,&tmpm1->state->x); dd=D3NormSqr(&p)+1; @@ -790,7 +798,7 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) D3AddEqu(&tmpm1->DstateDt->DxDt,&p); } } - } else { + } else if (tmpm1->type!=MT_ION) { D3Sub(&p,&tmpm->state->x,&tmpm1->state->x); dd=D3NormSqr(&p); dd2=Sqr(tmpm->radius+tmpm1->radius); @@ -915,13 +923,34 @@ U0 CheckDamage() MyMass *tmpm,*tmpm1,*best_mass; CD3 p,p1,p2; F64 d,best_distance; + Bool facing_sun=FALSE; + + if (human) { + D3Sub(&p1,&human->p[1].x,&human->p[0].x); + D3Sub(&p2,&human->p[2].x,&human->p[0].x); + D3Add(&p,&p1,&p2); + if (p.x>0) + facing_sun=TRUE; + } tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { - if (tmpm->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type==MT_ION) { + if (facing_sun) { + tmpm1=ode->next_mass; + while (tmpm1!=&ode->next_mass) { + if (tmpm1->type==MT_HUMAN_SHIP) { + D3Sub(&p,&tmpm1->x,&tmpm->x); + if (D3NormSqr(&p)radius)) + tmpm1->temperature+=3.0; + } + tmpm1=tmpm1->next; + } + } + } else if (tmpm->type==MT_ANTIMATTER_SPLAT) { tmpm1=ode->next_mass; while (tmpm1!=&ode->next_mass) { - if (tmpm1->type!=MT_SUPER_NAPALM_SPLAT) { + if (tmpm1->type!=MT_ION && tmpm1->type!=MT_ANTIMATTER_SPLAT) { D3Sub(&p,&tmpm1->x,&tmpm->x); if (D3NormSqr(&p)radius)) tmpm1->temperature+=0.4; @@ -943,7 +972,7 @@ U0 CheckDamage() if (!human->laser_overheat && human->lasering) { if (human->laser_temperature>=LASER_MAX_TEMP) { human->laser_overheat=TRUE; - Snd(0); + Snd; } else { human->laser_temperature+=1.0; D3Sub(&p1,&human->p[0].x,&human->p[1].x); @@ -1027,7 +1056,7 @@ U0 CheckDamage() tmpsp->exploding=TRUE; tmpsp->die_time=tS; tmpsp->die_timeout=tS+0.75; - Noise(750,1000,3000); + Noise(750,74,93); if (tmpsp->type==ST_HUMAN1) game_over=TRUE; } @@ -1038,30 +1067,61 @@ U0 CheckDamage() //********************************** Shots -U0 FireOneGun(Ship *tmpsp,I64 n,F64 r,F64 fuse_time) +Shot *ShotNew(I64 type,CD3 *_p,CD3 *_v,F64 r,F64 fuse_time, + CD3 *_p_gun_offset=NULL) { - CD3 p,p1,p2; - Shot *tmps; - - tmps=CAlloc(sizeof(Shot)); - D3Copy(&tmps->p.x,&tmpsp->p[n].x); + Shot *tmps=CAlloc(sizeof(Shot)); + D3Copy(&tmps->p.x,_p); tmps->radius=r; tmps->splats=20*r; tmps->fuse_time=tS+fuse_time; tmps->p.mass=0.3*r*r*r; - tmps->p.type=MT_SUPER_NAPALM_BALL; + tmps->p.type=type; + if (_p_gun_offset) + D3AddEqu(&tmps->p.x,_p_gun_offset); + D3Copy(&tmps->p.DxDt,_v); + QueIns(&tmps->p,ode->last_mass); + QueIns(tmps,shot_head.last); +} + +U0 SolarFlares() +{ + CD3 p,v,p1,p2; + CTask *task=ode->win_task; + if (!alarm && t_solar_storm-2.0pix_height,0); + D3Equ(&v,200.0,0,0); + ShotNew(MT_SOLAR_FLARE,&p,&v,25,0.1); + } + } else { + t_solar_storm=tS+25*Rand; //Schedule next solar storm + alarm=FALSE; + } + } +} + +U0 FireOneGun(Ship *tmpsp,I64 n,F64 r,F64 fuse_time) +{ + I64 ona; + CD3 p,v,p1,p2; + Shot *tmps; D3Sub(&p1,&tmpsp->p[0].x,&tmpsp->p[1].x); D3Sub(&p2,&tmpsp->p[0].x,&tmpsp->p[2].x); D3Unit(D3Add(&p,&p1,&p2)); - D3AddEqu(&tmps->p.x,D3MulEqu(D3Copy(&p1,&p),r+tmpsp->p[0].radius+5)); - D3AddEqu(D3MulEqu(&p,1000/(r+1)),&tmpsp->p[n].DxDt); - D3Copy(&tmps->p.DxDt,&p); + D3MulEqu(D3Copy(&p1,&p),r+tmpsp->p[0].radius+5); + D3AddEqu(D3MulEqu(D3Copy(&v,&p),1000/(r+1)),&tmpsp->p[n].DxDt); + tmps=ShotNew(MT_ANTIMATTER_BALL,&tmpsp->p[n].x,&v,r,fuse_time,&p1); D3MulEqu(&p,tmps->p.mass/tmpsp->p[n].mass/100.0); D3SubEqu(&tmpsp->p[n].DxDt,&p); - QueIns(&tmps->p,ode->last_mass); - QueIns(tmps,shot_head.last); tmpsp->reload_timeout=tS+r/tmpsp->fire_rate; - Noise(100,r*200,r*400); + ona=Freq2Ona(500/r); + Noise(100,ona,ona+12); } U0 FireOneMissile(Ship *tmpsp,I64 n) @@ -1075,7 +1135,7 @@ U0 FireOneMissile(Ship *tmpsp,I64 n) for (i=1;i<5;i++) tmpmi->s[i].flags|=SSF_INACTIVE; tmpmi->launched=TRUE; - Sweep(250,300,350); + Sweep(250,53,56); } } @@ -1120,33 +1180,44 @@ U0 HumanFireLaserEnd() { if (human && !human->exploding) { human->lasering=FALSE; - Snd(0); + Snd; + } +} + +U0 SplatNew(Shot *tmps,F64 die_time,F64 start,F64 end) +{ + MyMass *tmpm; + F64 é=Arg(tmps->p.DxDt,tmps->p.DyDt); + I64 i; + for (i=0;isplats;i++) { + tmpm=CAlloc(sizeof(MyMass)); + D3Copy(&tmpm->x,&tmps->p.x); + tmpm->radius=1; + tmpm->mass=1; + tmpm->die_timeout=tS+die_time; + if (tmps->p.type==MT_SOLAR_FLARE) + tmpm->type=MT_ION; + else + tmpm->type=MT_ANTIMATTER_SPLAT; + D3Copy(&tmpm->DxDt,&tmps->p.DxDt); + tmpm->DxDt+=50*Sqr(tmps->radius)*Rand* + Sin(start+é+(end-start)*i/tmps->splats); + tmpm->DyDt+=50*Sqr(tmps->radius)*Rand* + Cos(start+é+(end-start)*i/tmps->splats); + QueIns(tmpm,ode->last_mass); } } U0 ExpireShots() { - I64 i; - F64 é; Shot *tmps=shot_head.next,*tmps1; - MyMass *tmpm; - while (tmps!=&shot_head) { tmps1=tmps->next; if (tS>tmps->fuse_time) { - é=Arg(tmps->p.DxDt,tmps->p.DyDt); - for (i=0;isplats;i++) { - tmpm=CAlloc(sizeof(MyMass)); - D3Copy(&tmpm->x,&tmps->p.x); - tmpm->radius=1; - tmpm->mass=1; - tmpm->die_timeout=tS+0.2; - tmpm->type=MT_SUPER_NAPALM_SPLAT; - D3Copy(&tmpm->DxDt,&tmps->p.DxDt); - tmpm->DxDt+=50*Sqr(tmps->radius)*Rand*Sin(é+2*ã*i/tmps->splats); - tmpm->DyDt+=50*Sqr(tmps->radius)*Rand*Cos(é+2*ã*i/tmps->splats); - QueIns(tmpm,ode->last_mass); - } + if (tmps->p.type==MT_SOLAR_FLARE) + SplatNew(tmps,1.0,3*ã/8,5*ã/8); + else + SplatNew(tmps,.2,0,2*ã); QueRem(tmps); QueRem(&tmps->p); Free(tmps); @@ -1161,7 +1232,8 @@ U0 ExpireSplats() tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { tmpm1=tmpm->next; - if (tmpm->type==MT_SUPER_NAPALM_SPLAT && tS>tmpm->die_timeout) { + if ((tmpm->type==MT_ION || tmpm->type==MT_ANTIMATTER_SPLAT) && + tS>tmpm->die_timeout) { QueRem(tmpm); Free(tmpm); } @@ -1188,7 +1260,7 @@ U0 ExpireMissiles() tmpmi->p_front.mass=10.0; //They go flying, if too light. tmpmi->p_back.mass =10.0; tmpmi->exploding=TRUE; - Noise(50,3000,6000); + Noise(50,93,105); } else if (tS>tmpmi->die_timeout) MissileDel(tmpmi); } @@ -1223,16 +1295,20 @@ U0 InitLevel() I64 i; MyMass *tmpm,*tmpm1; + t_solar_storm=0; + tmpm=ode->next_mass; while (tmpm!=&ode->next_mass) { tmpm1=tmpm->next; - if (tmpm->type==MT_SUPER_NAPALM_SPLAT) { + if (tmpm->type==MT_ION || tmpm->type==MT_ANTIMATTER_SPLAT) { QueRem(tmpm); Free(tmpm); } tmpm=tmpm1; } - + if (level==1) + OneTimePopUp(&msg_flags,XMSGF_SOLAR_STORM, + "Face away from Sun in solar storm.\n"); if (level==4) OneTimePopUp(&msg_flags,XMSGF_ANTISPIN, "Press $$GREEN$$$$FG$$ for anti-spin stabilizer.\n"); @@ -1270,7 +1346,7 @@ U0 Init() //********************************** Main U0 XCaliber() { - I64 ch,msg_code,a1,a2,sc; + I64 ch,msg_code,arg1,arg2,sc; CCtrl *cp=CtrlPanelNew; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ @@ -1318,10 +1394,10 @@ U0 XCaliber() ch=0; do { while (!game_over && !show_level_msg && - (msg_code=ScanMsg(&a1,&a2,1<color=LTRED; GrRect(dc, c->left,c->top,CTRL_PANEL_SPACING*3+2, - CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); + CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE); dc->color=DKGRAY; GrRect(dc, c->left+CTRL_PANEL_BORDER,c->top+CTRL_PANEL_BORDER, CTRL_PANEL_SPACING*3+2-2*CTRL_PANEL_BORDER, - CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE + CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE -2*CTRL_PANEL_BORDER); dc->color=BLACK; - GrLine(dc,c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BUTTON_SIZE)+ + GrLine(dc,c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING,c->left+CTRL_PANEL_SPACING, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); - GrLine(dc,c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BUTTON_SIZE)+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); + GrLine(dc,c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING,c->left+2*CTRL_PANEL_SPACING+1, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1); dc->color=BLACK; GrRect(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2-3, @@ -55,30 +55,30 @@ U0 DrawCtrlPanelCtrl(CDC *dc,CCtrl *c) c->top+CTRL_PANEL_BORDER+3+ (CTRL_PANEL_SPACING-FONT_HEIGHT)/2,"SpaceWalk"); GrPrint(dc,c->left+CTRL_PANEL_SPACING-4*FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+ + (c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Size"); GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-4*FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+ + (c->top+CTRL_PANEL_BTTN_SIZE)+ CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Fuse"); dc->color=LTRED; GrPrint(dc,c->left+CTRL_PANEL_SPACING-FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, "%d",s->shot_radius*10/CTRL_PANEL_RANGE); GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-FONT_WIDTH/2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3, "%d",s->fuse_time*10/CTRL_PANEL_RANGE); GrRect(dc,c->left+CTRL_PANEL_SPACING-3, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->shot_radius-2 ,7,5); GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-3, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->fuse_time-2,7,5); dc->color=YELLOW; GrRect(dc,c->left+CTRL_PANEL_SPACING-2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->shot_radius-1 ,5,3); GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-2, - (c->top+CTRL_PANEL_BUTTON_SIZE)+CTRL_PANEL_SPACING+ + (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+ CTRL_PANEL_RANGE-1-s->fuse_time-1,5,3); d_range=c->right-c->left-5-5; @@ -106,7 +106,7 @@ U0 UpdateDerivedCtrlPanelCtrl(CCtrl *c) c->left=c->win_task->pix_width-(CTRL_PANEL_SPACING*3+2); c->right=c->left+CTRL_PANEL_SPACING*3+2; c->top=c->win_task->pix_height-(CTRL_PANEL_SPACING*2+ - CTRL_PANEL_RANGE+CTRL_PANEL_BUTTON_SIZE); + CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE); c->bottom=c->top+CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE; s->shot_radius=ClampI64(s->shot_radius,0,CTRL_PANEL_RANGE-1); @@ -122,10 +122,10 @@ U0 LeftClickCtrlPanel(CCtrl *c,I64 x,I64 y,Bool) else { if (x<(c->right+c->left)/2) s->shot_radius=CTRL_PANEL_RANGE-1 - -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); + -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BTTN_SIZE)); else s->fuse_time=CTRL_PANEL_RANGE-1 - -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BUTTON_SIZE)); + -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BTTN_SIZE)); } if (c->update_derived_vals) (*c->update_derived_vals)(c); @@ -136,7 +136,7 @@ CCtrl *CtrlPanelNew() CCtrl *c=CAlloc(sizeof(CCtrl)); MemSet(&ctrl_panel,0,sizeof(ctrl_panel)); c->win_task=Fs; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; c->state=&ctrl_panel; c->draw_it=&DrawCtrlPanelCtrl; diff --git a/Compiler/Asm.HC b/Compiler/Asm.HC index 70cce5d..7e3f3d1 100644 --- a/Compiler/Asm.HC +++ b/Compiler/Asm.HC @@ -277,7 +277,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) if (num2->U8_cnt==1) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I8+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); else if (!num2->imm_flag && !(MIN_I8<=num2->num.i<=MAX_I8)) @@ -287,7 +287,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U8; } } else { @@ -295,7 +295,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U8; } } @@ -304,7 +304,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) if (num2->U8_cnt==2) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I16+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); else if (!num2->imm_flag && !(MIN_I16<=num2->num.i<=MAX_I16)) @@ -314,7 +314,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U16; } } else { @@ -322,7 +322,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U16; } } @@ -331,7 +331,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) } else if (num2->U8_cnt==4) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I32+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); else if (!num2->imm_flag && !(MIN_I32<=num2->num.i<=MAX_I32)) @@ -341,7 +341,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U32; } } else { @@ -349,7 +349,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U32; } } @@ -357,7 +357,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) } else if (num2->U8_cnt==8) { if (num2->num.local_asm_undef_hash||num2->num.glbl_asm_undef_hash) AsmUnresolvedAdd(cc,num2->num.machine_code,IET_REL_I64+num2->imm_flag, - aotc->ip,num2->rel,num2->num.local_asm_undef_hash, + aotc->rip,num2->rel,num2->num.local_asm_undef_hash, num2->num.glbl_asm_undef_hash,cc->lex_include_stk->line_num, U8_avail); if (num2->imm_flag) { @@ -365,7 +365,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_ADD_U64; } } else { @@ -373,7 +373,7 @@ Bool AsmStoreNum(CCmpCtrl *cc,CAsmNum2 *num2,I64 cnt,Bool U8_avail) tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; aotc->abss=tmpa; - tmpa->ip=aotc->ip; + tmpa->rip=aotc->rip; tmpa->type=AAT_SUB_U64; } } @@ -395,7 +395,7 @@ U8 asm_seg_prefixes[6]={0x26,0x2E,0x36,0x3E,0x64,0x65}; Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) { CAOTCtrl *aotc=cc->aotc; - I64 i,j,a1,a2,om,seg,arg1mask,arg2mask; + I64 i,j,arg1,arg2,om,seg,arg1mask,arg2mask; CAsmArg *tmpa1,*tmpa2; Bool ModrM_complete,U8_avail=FALSE,found_second_possible=FALSE; CInst *tmpins; @@ -429,8 +429,8 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) cur.disp.imm_flag=TRUE; cur.imm.imm_flag=TRUE; om=tmpins->opcode_modifier; - a1=tmpins->arg1; - a2=tmpins->arg2; + arg1=tmpins->arg1; + arg2=tmpins->arg2; tmpa1=&aotc->arg1; tmpa2=&aotc->arg2; cur.last_opcode_U8=tmpins->opcode[tmpins->opcode_cnt-1]; @@ -479,9 +479,9 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) cur.last_opcode_U8+=tmpa1->reg1; } } - if (a1==ARGT_R64 || a1==ARGT_RM64 || a1==ARGT_M64) + if (arg1==ARGT_R64 || arg1==ARGT_RM64 || arg1==ARGT_M64) cur.REX|=8; - if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_M8<=a1<=ARGT_M64) { + if (ARGT_RM8<=arg1<=ARGT_RM64 || ARGT_M8<=arg1<=ARGT_M64) { if (aotc->seg_size==16) cur.has_addr_prefix=TRUE; @@ -563,9 +563,9 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) } } } - } else if (ARGT_REL8<=a1<=ARGT_REL32 || ARGT_IMM8<=a1<=ARGT_IMM64 || - ARGT_UIMM8<=a1<=ARGT_UIMM64) { - if (a1==ARGT_IMM64 || a2==ARGT_UIMM64) + } else if (ARGT_REL8<=arg1<=ARGT_REL32 || ARGT_IMM8<=arg1<=ARGT_IMM64 || + ARGT_UIMM8<=arg1<=ARGT_UIMM64) { + if (arg1==ARGT_IMM64 || arg2==ARGT_UIMM64) cur.REX|=8; MemCpy(&cur.imm.num,&tmpa1->num,sizeof(CAsmNum)); } @@ -579,7 +579,7 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) } if (tmpins->flags & IEF_PLUS_OPCODE) { if (tmpins->slash_val==SV_R_REG) { - if (ARGT_AL<=a1<=ARGT_RAX) { + if (ARGT_AL<=arg1<=ARGT_RAX) { cur.last_opcode_U8|=tmpa2->reg1&7; if (tmpa2->reg1&15>7) cur.REX|=1; @@ -599,15 +599,16 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) cur.last_opcode_U8|=tmpa2->reg1; } } - if (a1==ARGT_RM64 || a2==ARGT_RM64 || a1==ARGT_M64 || a2==ARGT_M64 || - a1==ARGT_R64 || a2==ARGT_R64) + if (arg1==ARGT_RM64 || arg2==ARGT_RM64 || + arg1==ARGT_M64 || arg2==ARGT_M64 || + arg1==ARGT_R64 || arg2==ARGT_R64) cur.REX|=8; - if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_RM8<=a2<=ARGT_RM64 || - ARGT_M8<=a1<=ARGT_M64 || ARGT_M8<=a2<=ARGT_M64) { + if (ARGT_RM8<=arg1<=ARGT_RM64 || ARGT_RM8<=arg2<=ARGT_RM64 || + ARGT_M8<=arg1<=ARGT_M64 || ARGT_M8<=arg2<=ARGT_M64) { if (aotc->seg_size==16) cur.has_addr_prefix=TRUE; cur.has_ModrM=TRUE; - if (ARGT_RM8<=a2<=ARGT_RM64 || ARGT_M8<=a2<=ARGT_M64) { + if (ARGT_RM8<=arg2<=ARGT_RM64 || ARGT_M8<=arg2<=ARGT_M64) { tmpa1=&aotc->arg2; tmpa2=&aotc->arg1; } @@ -709,39 +710,39 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) } } } - } else if (ARGT_MOFFS8<=a1<=ARGT_MOFFS64) { + } else if (ARGT_MOFFS8<=arg1<=ARGT_MOFFS64) { MemCpy(&cur.disp.num,&tmpa1->num,sizeof(CAsmNum)); if (aotc->seg_size==16) cur.disp.U8_cnt=2; else cur.disp.U8_cnt=4; cur.has_addr_prefix=FALSE; - } else if (ARGT_MOFFS8<=a2<=ARGT_MOFFS64) { + } else if (ARGT_MOFFS8<=arg2<=ARGT_MOFFS64) { MemCpy(&cur.disp.num,&tmpa2->num,sizeof(CAsmNum)); if (aotc->seg_size==16) cur.disp.U8_cnt=2; else cur.disp.U8_cnt=4; cur.has_addr_prefix=FALSE; - } else if (ARGT_IMM8<=a1<=ARGT_IMM64 || - ARGT_UIMM8<=a1<=ARGT_UIMM64) { + } else if (ARGT_IMM8<=arg1<=ARGT_IMM64 || + ARGT_UIMM8<=arg1<=ARGT_UIMM64) { MemCpy(&cur.imm.num,&tmpa1->num,sizeof(CAsmNum)); - if (a1==ARGT_IMM8 || a1==ARGT_UIMM8) cur.imm.U8_cnt=1; - else if (a1==ARGT_IMM16 || a1==ARGT_UIMM16) cur.imm.U8_cnt=2; - else if (a1==ARGT_IMM32 || a1==ARGT_UIMM32) cur.imm.U8_cnt=4; + if (arg1==ARGT_IMM8 || arg1==ARGT_UIMM8) cur.imm.U8_cnt=1; + else if (arg1==ARGT_IMM16 || arg1==ARGT_UIMM16) cur.imm.U8_cnt=2; + else if (arg1==ARGT_IMM32 || arg1==ARGT_UIMM32) cur.imm.U8_cnt=4; else { cur.imm.U8_cnt=8; cur.REX|=8; } } - if (ARGT_IMM8<=a2<=ARGT_IMM64 || - ARGT_UIMM8<=a2<=ARGT_UIMM64) { + if (ARGT_IMM8<=arg2<=ARGT_IMM64 || + ARGT_UIMM8<=arg2<=ARGT_UIMM64) { MemCpy(&cur.imm.num,&tmpa2->num,sizeof(CAsmNum)); - if (a2==ARGT_IMM8 || a2==ARGT_UIMM8) cur.imm.U8_cnt=1; - else if (a2==ARGT_IMM16 || a2==ARGT_UIMM16) cur.imm.U8_cnt=2; - else if (a2==ARGT_IMM32 || a2==ARGT_UIMM32) { + if (arg2==ARGT_IMM8 || arg2==ARGT_UIMM8) cur.imm.U8_cnt=1; + else if (arg2==ARGT_IMM16 || arg2==ARGT_UIMM16) cur.imm.U8_cnt=2; + else if (arg2==ARGT_IMM32 || arg2==ARGT_UIMM32) { cur.imm.U8_cnt=4; - if (tmpins->flags&IEF_REX_ONLY_R8_R15 && a2==ARGT_UIMM32) + if (tmpins->flags&IEF_REX_ONLY_R8_R15 && arg2==ARGT_UIMM32) cur.REX&=~8; } else { cur.imm.U8_cnt=8; @@ -793,13 +794,13 @@ Bool PrsAsmInst(CCmpCtrl *cc,CHashOpcode *tmpo,I64 argcnt) AOTStoreCodeU8(cc,best.SIB); if (best.disp.U8_cnt) { - best.disp.rel=aotc->ip+best.disp.U8_cnt+best.imm.U8_cnt; + best.disp.rel=aotc->rip+best.disp.U8_cnt+best.imm.U8_cnt; if (!AsmStoreNum(cc,&best.disp,1,U8_avail)) return FALSE; } if (best.imm.U8_cnt) { - best.imm.rel=aotc->ip+best.imm.U8_cnt; + best.imm.rel=aotc->rip+best.imm.U8_cnt; if (!AsmStoreNum(cc,&best.imm,1,U8_avail)) return FALSE; } @@ -949,7 +950,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) LexExcept(cc,"ORG not allowed in fun asm blk "); if (aotc->module_org!=INVALID_PTR) LexExcept(cc,"Just one org allowed "); - if (aotc->ip) + if (aotc->rip) LexExcept(cc,"ORG must be at beginning "); aotc->module_org=AsmLexExpression(cc); break; @@ -963,12 +964,12 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) if (!(cc->flags&CCF_AOT_COMPILE) && i>8) LexExcept(cc,"In JIT mode, max ALIGN is 8 "); if (j>aotc->max_align_bits) aotc->max_align_bits=j; - i=CeilU64(aotc->ip,i); + i=CeilU64(aotc->rip,i); if (cc->token!=',') LexExcept(cc,"Expecting ',' at "); Lex(cc); k=AsmLexExpression(cc); - for (j=aotc->ip;jrip;jhash_entry->type & HTT_EXPORT_SYS_SYM) { if (Btr(&cc->hash_entry->type,HTf_UNRESOLVED)) { if (cc->hash_entry->type & HTF_LOCAL) { - cc->hash_entry(CHashExport *)->val=aotc->ip; + cc->hash_entry(CHashExport *)->val=aotc->rip; if (Lex(cc)!=':') LexExcept(cc,"Expecting ':' at "); Lex(cc); } else { if (cc->hash_entry->type & HTF_IMPORT) LexExcept(cc,"attempt to define import at "); - cc->hash_entry(CHashExport *)->val=aotc->ip; + cc->hash_entry(CHashExport *)->val=aotc->rip; next_last_label=cc->hash_entry->str; Lex(cc); //Skip cur_str if (cc->token!=':' && cc->token!=TK_DBL_COLON) @@ -1052,7 +1053,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) } Lex(cc); } - } else if (cc->hash_entry(CHashExport *)->val==aotc->ip) { + } else if (cc->hash_entry(CHashExport *)->val==aotc->rip) { Lex(cc); //Skip cur_str if (cc->token!=':' && cc->token!=TK_DBL_COLON) LexExcept(cc,"Expecting ':' at "); @@ -1066,7 +1067,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) tmpex->str=cc->cur_str; cc->cur_str=0; tmpex->type=HTT_EXPORT_SYS_SYM; - tmpex->val=aotc->ip; + tmpex->val=aotc->rip; Lex(cc); //Skip cur_str if (cc->token!=':' && cc->token!=TK_DBL_COLON) LexExcept(cc,"Expecting ':' at "); @@ -1085,7 +1086,7 @@ U0 PrsAsmBlk(CCmpCtrl *cc,I64 cmp_flags) LexExcept(cc,"Duplicate goto label at "); g_lb->type=CMT_ASM_LABEL; g_lb->flags|=CMF_DEFINED; - g_lb->ip=aotc->ip; + g_lb->rip=aotc->rip; g_lb->use_cnt++; //Disable warning on unused labels. ICAdd(cc,IC_LABEL,g_lb,0); } diff --git a/Compiler/AsmLib.HC b/Compiler/AsmLib.HC index 937e59b..63b1a71 100644 --- a/Compiler/AsmLib.HC +++ b/Compiler/AsmLib.HC @@ -1,11 +1,11 @@ U0 AOTStoreCodeU8(CCmpCtrl *cc,U8 b) { CAOTCtrl *aotc=cc->aotc; - I64 i=aotc->ip>>AOT_BIN_BLK_BITS; + I64 i=aotc->rip>>AOT_BIN_BLK_BITS; CAOTBinBlk *tmpbin=aotc->bin; while (i--) if (!(tmpbin=tmpbin->next)) { - i=aotc->ip>>AOT_BIN_BLK_BITS+1; + i=aotc->rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) @@ -14,7 +14,7 @@ U0 AOTStoreCodeU8(CCmpCtrl *cc,U8 b) } break; } - tmpbin->body[aotc->ip++ & (AOT_BIN_BLK_SIZE-1)]=b; + tmpbin->body[aotc->rip++ & (AOT_BIN_BLK_SIZE-1)]=b; if (aotc->lst) { if (aotc->lst_col>=24) { '\n'; @@ -23,14 +23,14 @@ U0 AOTStoreCodeU8(CCmpCtrl *cc,U8 b) "%02X ",b; aotc->lst_col+=3; } - if (aotc->ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=aotc->ip; + if (aotc->rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->rip; } U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) { CAOTCtrl *aotc=cc->aotc; - I64 i=aotc->ip>>AOT_BIN_BLK_BITS,j=(aotc->ip+sizeof(U32))>>AOT_BIN_BLK_BITS; + I64 i=aotc->rip>>AOT_BIN_BLK_BITS,j=(aotc->rip+sizeof(U32))>>AOT_BIN_BLK_BITS; U32 *_d; CAOTBinBlk *tmpbin; if (i!=j) @@ -40,7 +40,7 @@ U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) tmpbin=aotc->bin; while (i--) if (!(tmpbin=tmpbin->next)) { - i=aotc->ip>>AOT_BIN_BLK_BITS+1; + i=aotc->rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) @@ -49,9 +49,9 @@ U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) } break; } - _d=tmpbin->body+ aotc->ip&(AOT_BIN_BLK_SIZE-1); + _d=tmpbin->body+ aotc->rip&(AOT_BIN_BLK_SIZE-1); *_d=d; - aotc->ip+=sizeof(U32); + aotc->rip+=sizeof(U32); if (aotc->lst) { if (aotc->lst_col>=24) { '\n'; @@ -60,16 +60,16 @@ U0 AOTStoreCodeU32(CCmpCtrl *cc,U32 d) "%08X ",d; aotc->lst_col+=9; } - if (aotc->ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=aotc->ip; + if (aotc->rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->rip; } } U0 AOTStoreCodeU64(CCmpCtrl *cc,U64 q) { CAOTCtrl *aotc=cc->aotc; - I64 i=aotc->ip>>AOT_BIN_BLK_BITS,j=(aotc->ip+sizeof(I64))>>AOT_BIN_BLK_BITS, - *_q; + I64 i=aotc->rip>>AOT_BIN_BLK_BITS, + j=(aotc->rip+sizeof(I64))>>AOT_BIN_BLK_BITS, *_q; CAOTBinBlk *tmpbin; if (i!=j) for (i=0;ibin; while (i--) if (!(tmpbin=tmpbin->next)) { - i=aotc->ip>>AOT_BIN_BLK_BITS+1; + i=aotc->rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) @@ -87,9 +87,9 @@ U0 AOTStoreCodeU64(CCmpCtrl *cc,U64 q) } break; } - _q=tmpbin->body+ aotc->ip&(AOT_BIN_BLK_SIZE-1); + _q=tmpbin->body+ aotc->rip&(AOT_BIN_BLK_SIZE-1); *_q=q; - aotc->ip+=sizeof(I64); + aotc->rip+=sizeof(I64); if (aotc->lst) { if (aotc->lst_col>=24) { '\n'; @@ -98,18 +98,18 @@ U0 AOTStoreCodeU64(CCmpCtrl *cc,U64 q) "%016X ",q; aotc->lst_col+=17; } - if (aotc->ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=aotc->ip; + if (aotc->rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=aotc->rip; } } -U0 AOTStoreCodeU8At(CCmpCtrl *cc,I64 ip,...) +U0 AOTStoreCodeU8At(CCmpCtrl *cc,I64 rip,...) { CAOTCtrl *aotc=cc->aotc; CAOTBinBlk *tmpbin; I64 i,j; for (j=0;j>AOT_BIN_BLK_BITS+1; + i=rip>>AOT_BIN_BLK_BITS+1; tmpbin=&aotc->bin; while (i--) { if (!tmpbin->next) { @@ -118,10 +118,10 @@ U0 AOTStoreCodeU8At(CCmpCtrl *cc,I64 ip,...) } tmpbin=tmpbin->next; } - tmpbin->body[ip++ & (AOT_BIN_BLK_SIZE-1)]=argv[j]; + tmpbin->body[rip++ & (AOT_BIN_BLK_SIZE-1)]=argv[j]; } - if (ip>aotc->num_bin_U8s) - aotc->num_bin_U8s=ip; + if (rip>aotc->num_bin_U8s) + aotc->num_bin_U8s=rip; } I64 AsmLexExpression(CCmpCtrl *cc) @@ -153,13 +153,13 @@ U0 AsmLineLst(CCmpCtrl *cc) if (doc_e2=aotc->lst_last_line) { if (tmpf->flags& LFSF_DOC) { while (doc_e2->yy) { - "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_ip; + "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_rip; aotc->lst_col=0; doc_e2=LexPutLine(cc,doc_e2); } } else { while (*doc_e2(U8 *) && doc_e2!=doc_e) { - "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_ip; + "%h*c%08X ",24-aotc->lst_col,CH_SPACE,aotc->lst_last_rip; aotc->lst_col=0; doc_e2=LexPutLine(cc,doc_e2); } @@ -171,5 +171,5 @@ U0 AsmLineLst(CCmpCtrl *cc) aotc->lst_last_line=NULL; aotc->lst_last_lfn=tmpf; } - aotc->lst_last_ip=aotc->ip; + aotc->lst_last_rip=aotc->rip; } diff --git a/Compiler/AsmResolve.HC b/Compiler/AsmResolve.HC index 0157292..9284765 100644 --- a/Compiler/AsmResolve.HC +++ b/Compiler/AsmResolve.HC @@ -2,7 +2,7 @@ U0 AsmResolve(CCmpCtrl *cc,CAsmUnresolvedRef *tmpu,U8 *label,Bool undefined) { CAOTImportExport *tmpie; CAsmUndefHash *tmpauh; - I64 r=Call(tmpu->machine_code); + I64 res=Call(tmpu->machine_code); if (undefined) { tmpauh=tmpu->asm_undef_hash; while (tmpauh) { @@ -10,31 +10,32 @@ U0 AsmResolve(CCmpCtrl *cc,CAsmUnresolvedRef *tmpu,U8 *label,Bool undefined) tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->next=tmpauh->hash->ie_lst; tmpauh->hash->ie_lst=tmpie; - tmpie->ip=tmpu->ip; + tmpie->rip=tmpu->rip; tmpie->aot=cc->aot; tmpie->type=tmpu->type; } tmpauh=tmpauh->next; //Technically, more than one won't work. } } else if (!(tmpu->type&IEF_IMM_NOT_REL)) { - r-=tmpu->rel_ip; - if (tmpu->type==IET_REL_I8 && !(MIN_I8<=r<=MAX_I8) || - tmpu->type==IET_REL_I16 && !(MIN_I16<=r<=MAX_I16)) { + res-=tmpu->rel_rip; + if (tmpu->type==IET_REL_I8 && !(MIN_I8<=res<=MAX_I8) || + tmpu->type==IET_REL_I16 && !(MIN_I16<=res<=MAX_I16)) { PrintErr("Branch out of range at line:%04d %s\n", tmpu->line_num,label); LexExcept(cc); } - if (tmpu->U8_avail && tmpu->type>IET_IMM_U8 && -124<=r<=123) + if (tmpu->U8_avail && tmpu->type>IET_IMM_U8 && -124<=res<=123) PrintWarn("could use I8 displacement at line:%04d %s %s\n", tmpu->line_num,cc->aotc->last_label,label); } - AOTStoreCodeU8At(cc,tmpu->ip,r.u8[0]); + AOTStoreCodeU8At(cc,tmpu->rip,res.u8[0]); if (tmpu->type>=IET_REL_I16) { - AOTStoreCodeU8At(cc,tmpu->ip+1,r.u8[1]); + AOTStoreCodeU8At(cc,tmpu->rip+1,res.u8[1]); if (tmpu->type>=IET_REL_I32) { - AOTStoreCodeU8At(cc,tmpu->ip+2,r.u8[2],r.u8[3]); + AOTStoreCodeU8At(cc,tmpu->rip+2,res.u8[2],res.u8[3]); if (tmpu->type>=IET_REL_I64) - AOTStoreCodeU8At(cc,tmpu->ip+4,r.u8[4],r.u8[5],r.u8[6],r.u8[7]); + AOTStoreCodeU8At(cc,tmpu->rip+4,res.u8[4],res.u8[5], + res.u8[6],res.u8[7]); } } } @@ -157,8 +158,8 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tmpaot) tmpeu=tmpf->ext_lst; while (tmpeu) { tmpeu8=tmpeu->next; - j=tmpf->exe_addr-(tmpeu->ip+4); - AOTStoreCodeU8At(cc,tmpeu->ip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); + j=tmpf->exe_addr-(tmpeu->rip+4); + AOTStoreCodeU8At(cc,tmpeu->rip,j.u8[0],j.u8[1],j.u8[2],j.u8[3]); Free(tmpeu); tmpeu=tmpeu8; } @@ -167,11 +168,11 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tmpaot) tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_REL32_EXPORT; if (tmpex->type & HTT_FUN) - tmpie->ip=tmpf->exe_addr; + tmpie->rip=tmpf->exe_addr; else if (tmpex->type & HTT_GLBL_VAR) - tmpie->ip=tmpex(CHashGlblVar *)->data_addr_ip; + tmpie->rip=tmpex(CHashGlblVar *)->data_addr_rip; else - tmpie->ip=tmpex->val; + tmpie->rip=tmpex->val; tmpie->aot=cc->aot; if (tmpex->type & HTF_IMM) tmpie->type++; @@ -185,15 +186,15 @@ U0 AOTGlblsResolve(CCmpCtrl *cc,CAOT *tmpaot) } } -U0 AsmUnresolvedAdd(CCmpCtrl *cc,U8 *machine_code,I64 type,I64 ip,I64 rel_ip, +U0 AsmUnresolvedAdd(CCmpCtrl *cc,U8 *machine_code,I64 type,I64 rip,I64 rel_rip, CAsmUndefHash *local_asm_undef_hash,CAsmUndefHash *glbl_asm_undef_hash, I64 line_num,Bool U8_avail) { CAsmUnresolvedRef *tmpu=MAlloc(sizeof(CAsmUnresolvedRef)); tmpu->machine_code=machine_code; tmpu->type=type; - tmpu->ip=ip; - tmpu->rel_ip=rel_ip; + tmpu->rip=rip; + tmpu->rel_rip=rel_rip; tmpu->aot=cc->aot; tmpu->imm_flag=FALSE; tmpu->line_num=line_num; diff --git a/Compiler/BackA.HC b/Compiler/BackA.HC index 6e5484f..6060d9b 100644 --- a/Compiler/BackA.HC +++ b/Compiler/BackA.HC @@ -1,5 +1,5 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, - CICType t2,I64 r2,I64 d2,CICType t3,I64 r3,I64 d3,I64 op,I64 ip) + CICType t2,I64 r2,I64 d2,CICType t3,I64 r3,I64 d3,I64 op,I64 rip) { I64 i,tmp,res_reg=REG_RAX; Bool swap=FALSE; @@ -12,13 +12,13 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, if (t2.raw_type>=RT_I64 && r2!=res_reg && t2&MDG_REG_DISP_SIB_RIP) { if (t1&MDF_REG && !(r2==r1 && t2&MDG_REG_DISP_SIB)) res_reg=r1; - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,rip); i=ICModr1(res_reg,t2,r2,d2); if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); } else { if (t2&MDF_REG) tmp=r2; @@ -33,13 +33,13 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, if (swap) { if (r3==tmp && t3&MDG_REG_DISP_SIB) tmp=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,ip); - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,rip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,rip); } else { if (r2==res_reg && t2&MDG_REG_DISP_SIB) res_reg=REG_RDX; - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t2,r2,d2,rip); } i=0x48; if (res_reg>7) @@ -50,20 +50,20 @@ U0 ICAddEct(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICU8(tmpi,OC_LOCK_PREFIX); ICU24(tmpi,0xC00000+i+(tmp&7)<<16+(res_reg&7)<<19+op<<8); } - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, - CICType t2,I64 r2,I64 d2,I64 d,I64 op,I64 ip) + CICType t2,I64 r2,I64 d2,I64 d,I64 op,I64 rip) { - I64 i,r; + I64 i; if (op.u8[0]==0x2B) { op=0x0003; d=-d; } if (t1&MDF_REG) { if (!(t2&MDF_REG)) { - ICMov(tmpi,t1,r1,d1,t2,r2,d2,ip); + ICMov(tmpi,t1,r1,d1,t2,r2,d2,rip); t2=t1; r2=r1; d2=d1; @@ -97,7 +97,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, i=ICModr1(r1,MDF_DISP+RT_I64,r2,d); i.u8[1]|=0x48; ICU24(tmpi,i.u8[2]<<16+0x8D00+i.u8[1]); - ICModr2(tmpi,i,d,ip+4); + ICModr2(tmpi,i,,d,rip); return; } } @@ -107,7 +107,7 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, case MDf_SIB: case MDf_RIP_DISP32: if (t1!=t2 || r1!=r2 || d1!=d2) { - ICMov(tmpi,t1,r1,d1,t2,r2,d2,ip); + ICMov(tmpi,t1,r1,d1,t2,r2,d2,rip); t2=t1; r2=r1; d2=d1; @@ -115,12 +115,12 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, if (!d &&(op.u8[0]==0x03||op.u8[0]==0x2B||op.u8[0]==0x33||op.u8[0]==0x0B)) return; - r=op.u8[1]; //not a reg but a slash val + if (op.u8[0]==0x03 && d==-1) //add -1 - r=1; //Decrement slash val + op.u8[1]=1; //Decrement slash val if (op.u8[0]==0x03 && (d==1 || d==-1)) { //Add - i=ICModr1(r,t1,r1,d1); + i=ICModr1(op.u8[1],t1,r1,d1); if (!(t1&MDF_REG) && tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); switch (t1.raw_type) { @@ -138,55 +138,16 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0xFF); } - ICModr2(tmpi,i,d1,ip+4); + ICModr2(tmpi,i,,d1,rip); return; } if (MIN_I8<=d<=MAX_I8 || t1&(RTG_MASK-RTF_UNSIGNED)==RT_I8) { - i=ICModr1(r,t1,r1,d1); - if (tmpi->ic_flags&ICF_LOCK) - ICU8(tmpi,OC_LOCK_PREFIX); - switch (t1.raw_type) { - case RT_I8: - case RT_U8: - ICRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x80); - break; - case RT_I16: - case RT_U16: - ICOpSizeRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x83); - break; - default: - ICRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x83); - } - ICModr2(tmpi,i,d1,ip+5); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_IMM_U8+op.u8[1],rip+1); ICU8(tmpi,d); return; } if (MIN_I32<=d<=MAX_I32 || t1.raw_typeic_flags&ICF_LOCK) - ICU8(tmpi,OC_LOCK_PREFIX); - switch (t1.raw_type) { - case RT_I16: - case RT_U16: - ICOpSizeRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x81); - break; - default: - ICRex(tmpi,i.u8[1]); - ICU16(tmpi,i.u8[2]<<8+0x81); - } - if (i.u8[0]!=MODR_RIP_REL) - ICModr2(tmpi,i,d1,); - else { - if (t1&(RTG_MASK-RTF_UNSIGNED)==RT_I16) - ICU32(tmpi,d1-(ip+tmpi->ic_cnt+6)); - else - ICU32(tmpi,d1-(ip+tmpi->ic_cnt+8)); - tmpi->ic_flags&=~ICF_CODE_FINAL; - } + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_IMM_U32+op.u8[1],rip); if (t1&(RTG_MASK-RTF_UNSIGNED)==RT_I16) ICU16(tmpi,d); else @@ -195,15 +156,15 @@ U0 ICAddSubEctImm(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, } break; case MDf_STK: - ICAddSubEctImm(tmpi,MDF_REG+RT_I64,REG_RAX,0,t2,r2,d2,d,op,ip); + ICAddSubEctImm(tmpi,MDF_REG+RT_I64,REG_RAX,0,t2,r2,d2,d,op,rip); ICPushRegs(tmpi,1<=RT_I64 && r2.u8[0]!=REG_RAX && (!(t2&MDF_SIB) || r2.u8[1]&15!=REG_RAX) && t2&MDG_REG_DISP_SIB_RIP) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,rip); if (!swap) { op=0x03; ICU24(tmpi,0xD8F748); @@ -225,24 +186,24 @@ U0 ICSub(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op); - ICModr2(tmpi,i,d2,ip+4); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RAX,0,ip); + ICModr2(tmpi,i,,d2,rip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RAX,0,rip); } else { if (!(t3&MDF_REG) || t3.raw_typeic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICU24(tmpi,0xC00000+i+(r3&7)<<16+(r2&7)<<19+op<<8); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,r2,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,r2,0,rip); } } -U0 ICMul(CIntermediateCode *tmpi,I64 ip) +U0 ICMul(CIntermediateCode *tmpi,I64 rip) { I64 i,r2,r=REG_RAX,j; - CICArg *a1,*a2; + CICArg *arg1,*arg2; Bool alt; - if (tmpi->a1.type&MDF_IMM) { - a1=&tmpi->a2; - a2=&tmpi->a1; + if (tmpi->arg1.type&MDF_IMM) { + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; alt=TRUE; } else { - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; alt=FALSE; } - i=a2->disp; + i=arg2->disp; if (!(tmpi->ic_class->raw_type&RTF_UNSIGNED) && - a2->type&MDF_IMM && MIN_I32<=i<=MAX_I32) { - if (tmpi->r.type==MDF_REG+RT_I64) { - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - a1->type,a1->reg,a1->disp,ip); - r=tmpi->r.reg; + arg2->type&MDF_IMM && MIN_I32<=i<=MAX_I32) { + if (tmpi->res.type==MDF_REG+RT_I64) { + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + arg1->type,arg1->reg,arg1->disp,rip); + r=tmpi->res.reg; } else - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a1->type,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg1->type,arg1->reg,arg1->disp,rip); if (r>7) j=0xC0004D; else @@ -299,16 +260,17 @@ U0 ICMul(CIntermediateCode *tmpi,I64 ip) else i=0xE8F748; if (alt) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type,arg1->reg,arg1->disp,rip); r2=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type,arg2->reg,arg2->disp,rip); } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); - if (!(a1->type&MDF_REG) || a1->type.raw_typetype,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type,arg2->reg,arg2->disp,rip); + if (!(arg1->type&MDF_REG) || arg1->type.raw_typetype,arg1->reg,arg1->disp,rip); r2=REG_RCX; } else - r2=a1->reg; + r2=arg1->reg; } if (r2>7) { i++; @@ -316,21 +278,22 @@ U0 ICMul(CIntermediateCode *tmpi,I64 ip) } ICU24(tmpi,i+r2<<16); } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,MDF_REG+RT_I64,r,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,r,0,rip); } -U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) +U0 ICMulEqu(CIntermediateCode *tmpi,I64 rip) { - I64 i=tmpi->a2.disp,r=REG_RAX,j; + I64 i=tmpi->arg2.disp,r=REG_RAX,j; if (!(tmpi->ic_class->raw_type&RTF_UNSIGNED) && - tmpi->a2.type&MDF_IMM && MIN_I32<=i<=MAX_I32) { + tmpi->arg2.type&MDF_IMM && MIN_I32<=i<=MAX_I32) { if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->a1.type==MDF_REG+RT_I64) - r=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r=tmpi->arg1.reg; else ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); if (r>7) j=0xC0004D; else @@ -341,13 +304,13 @@ U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0x6900+j+(r&7)<<16+(r&7)<<19); ICU32(tmpi,i); } - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,r,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,r,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); r=REG_RBX; if (MIN_I8<=i<=MAX_I8) ICU32(tmpi,i<<24+0xDB6B48); @@ -355,8 +318,8 @@ U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0xDB6948); ICU32(tmpi,i); } - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RBX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RBX,0,rip); } } else { if (tmpi->ic_class->raw_type&RTF_UNSIGNED) @@ -365,35 +328,36 @@ U0 ICMulEqu(CIntermediateCode *tmpi,I64 ip) i=0xEBF748; if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); ICU24(tmpi,i); - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); ICU24(tmpi,i); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); } } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,MDF_REG+RT_I64,r,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,r,0,rip); } -U0 ICDiv(CIntermediateCode *tmpi,I64 ip) +U0 ICDiv(CIntermediateCode *tmpi,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -401,18 +365,18 @@ U0 ICDiv(CIntermediateCode *tmpi,I64 ip) ICU16(tmpi,0x9948); ICU24(tmpi,0xF9F748); } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 ip) +U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 rip) { if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -421,19 +385,19 @@ U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 ip) ICU24(tmpi,0xF9F748); } if (is_mod) - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RDX,0,rip); else - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); //dangerous might clobber RBX in Mov, but it doesn't - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+tmpi->a1_type_pointed_to, - REG_RBX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+tmpi->arg1_type_pointed_to, + REG_RBX,0,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -442,28 +406,28 @@ U0 ICDivEqu(CIntermediateCode *tmpi,Bool is_mod,I64 ip) ICU24(tmpi,0xF9F748); } if (is_mod) - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RBX,0, - MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RBX,0, + MDF_REG+RT_I64,REG_RDX,0,rip); else - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RBX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RBX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) { + if (tmpi->res.type.mode) { if (is_mod) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RDX,0,rip); else - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICMod(CIntermediateCode *tmpi,I64 ip) +U0 ICMod(CIntermediateCode *tmpi,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED) { ICZero(tmpi,REG_RDX); ICU24(tmpi,0xF1F748); @@ -471,22 +435,22 @@ U0 ICMod(CIntermediateCode *tmpi,I64 ip) ICU16(tmpi,0x9948); ICU24(tmpi,0xF9F748); } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RDX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RDX,0,rip); } U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, CICType t1,I64 r1,I64 d1,CICType t2,I64 r2,I64 d2, - CICType t3,I64 r3,I64 d3,I64 op,I64 ip) + CICType t3,I64 r3,I64 d3,I64 op,I64 rip) { Bool done; I64 res_reg,tmp,i; if (tmpi->ic_flags & ICF_BY_VAL) { if (t3&MDF_IMM) { ICAddSubEctImm(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2,t2&MDG_MASK+ - type_pointed_to,r2,d2,d3,op,ip); + type_pointed_to,r2,d2,d3,op,rip); if (t1.mode) - ICMov(tmpi,t1,r1,d1,t2&MDG_MASK+type_pointed_to,r2,d2,ip); + ICMov(tmpi,t1,r1,d1,t2&MDG_MASK+type_pointed_to,r2,d2,rip); return; } else { done=FALSE; @@ -496,14 +460,14 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, tmp=r3; else { tmp=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,tmp,0,t3,r3,d3,rip); } i=ICModr1(tmp,t2&MDG_MASK+type_pointed_to,r2,d2); if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op.u8[5]); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); return; } if (t3.raw_type>=RT_I64 && t3&MDG_REG_DISP_SIB_RIP) { @@ -511,27 +475,27 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, res_reg=r2; else { res_reg=REG_RCX; - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); } i=ICModr1(res_reg,t3&MDG_MASK+type_pointed_to,r3,d3); if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op.u8[0]); - ICModr2(tmpi,i,d3,ip+4); + ICModr2(tmpi,i,,d3,rip); ICMov(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); done=TRUE; } } if (!done) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,rip); if (t2&MDF_REG && r2!=REG_RAX) res_reg=r2; else { res_reg=REG_RCX; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - t2&MDG_MASK+type_pointed_to,r2,d2,ip); + t2&MDG_MASK+type_pointed_to,r2,d2,rip); } if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); @@ -541,7 +505,7 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, ICU8(tmpi,0x48); ICU16(tmpi,0xC000+op.u8[0]+(res_reg&7)<<11); ICMov(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); } } } else { @@ -550,25 +514,25 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, if (!d3.u32[1]) { if (tmpi->ic_flags&ICF_RES_NOT_USED && t2&MDF_REG && d3(U64)<=MAX_I8) { - ICSlashOp(tmpi,MDF_DISP+type_pointed_to,r2,0,0x838000+op.u8[4],ip); + ICSlashOp(tmpi,MDF_DISP+type_pointed_to,r2,0,0x838000+op.u8[4],rip); ICU8(tmpi,d3); done=TRUE; } else if (op.u8[2]==0x24) {//AND - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_DISP+type_pointed_to,REG_RCX,0,ip); + MDF_DISP+type_pointed_to,REG_RCX,0,rip); res_reg=REG_RAX; if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICU16(tmpi,op.u8[3]<<8+0x40); ICU32(tmpi,d3); ICMov(tmpi,MDF_DISP+type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); done=TRUE; } else if (type_pointed_toic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); @@ -583,32 +547,32 @@ U0 ICAddSubEctEqu(CIntermediateCode *tmpi,U8 type_pointed_to, ICU8(tmpi,d3); } ICMov(tmpi,MDF_DISP+type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); done=TRUE; } } } if (!done) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - MDF_DISP+type_pointed_to,REG_RCX,0,ip); + MDF_DISP+type_pointed_to,REG_RCX,0,rip); res_reg=REG_RBX; if (tmpi->ic_flags&ICF_LOCK) ICU8(tmpi,OC_LOCK_PREFIX); ICU8(tmpi,0x48); ICU16(tmpi,0xC000+op.u8[0]+(res_reg&7)<<11); ICMov(tmpi,MDF_DISP+type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); } } if (t1.mode) - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } U0 ICShift(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, CICType t2,I64 r2,I64 d2,CICType t3,I64 r3,I64 d3, - I64 us,I64 is,I64 ip) + I64 us,I64 is,I64 rip) { I64 i=0x48,res_reg; if (tmpi->ic_class->raw_type&RTF_UNSIGNED || @@ -621,7 +585,7 @@ U0 ICShift(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, } else res_reg=REG_RAX; if (t3&MDF_IMM) { - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,rip); if (d3==1) ICU24(tmpi,i+is.u16[2]<<8+(res_reg&7)<<16); else { @@ -629,17 +593,17 @@ U0 ICShift(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, ICU8(tmpi,d3); } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,res_reg,0,t2,r2,d2,rip); ICU24(tmpi,i+is.u16[1]<<8+(res_reg&7)<<16); } - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, CICType t1,I64 r1,I64 d1, CICType t2,I64 r2,I64 d2, - CICType t3,I64 r3,I64 d3,I64 us,I64 is,I64 ip) + CICType t3,I64 r3,I64 d3,I64 us,I64 is,I64 rip) { I64 res_reg; if (tmpi->ic_class->raw_type&RTF_UNSIGNED || @@ -647,13 +611,13 @@ U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, is=us; if (tmpi->ic_flags & ICF_BY_VAL) { if (!(t3&MDF_IMM)) - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,rip); if (t2&MDF_REG) res_reg=r2; else { res_reg=REG_RAX; ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - t2&MDG_MASK+type_pointed_to,r2,d2,ip); + t2&MDG_MASK+type_pointed_to,r2,d2,rip); } if (res_reg>7) ICU8(tmpi,0x49); @@ -669,12 +633,12 @@ U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, } else ICU16(tmpi,is.u16[1]+(res_reg&7)<<8); ICMov(tmpi,t2&MDG_MASK+type_pointed_to,r2,d2, - MDF_REG+RT_I64,res_reg,0,ip); + MDF_REG+RT_I64,res_reg,0,rip); } else { if (!(t3&MDF_IMM)) - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,t2,r2,d2,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+type_pointed_to,REG_RDX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t3,r3,d3,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,t2,r2,d2,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+type_pointed_to,REG_RDX,0,rip); res_reg=REG_RAX; ICU8(tmpi,0x48); if (t3&MDF_IMM) { @@ -687,8 +651,8 @@ U0 ICShiftEqu(CIntermediateCode *tmpi,U8 type_pointed_to, } else ICU16(tmpi,is.u16[1]+(res_reg&7)<<8); ICMov(tmpi, - MDF_DISP+type_pointed_to,REG_RDX,0,MDF_REG+RT_I64,res_reg,0,ip); + MDF_DISP+type_pointed_to,REG_RDX,0,MDF_REG+RT_I64,res_reg,0,rip); } if (t1.mode) - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,ip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,res_reg,0,rip); } diff --git a/Compiler/BackB.HC b/Compiler/BackB.HC index 0b78544..ce6e295 100644 --- a/Compiler/BackB.HC +++ b/Compiler/BackB.HC @@ -1,64 +1,64 @@ -U0 ICUnaries(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICUnaries(CIntermediateCode *tmpi,I64 op,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,ip); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,rip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICNot(CIntermediateCode *tmpi,I64 ip) +U0 ICNot(CIntermediateCode *tmpi,I64 rip) { I64 i; - if (tmpi->a1.type.raw_type<=RT_U8 && tmpi->a1.type&MDG_DISP_SIB_RIP) { - i=ICModr1(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp); + if (tmpi->arg1.type.raw_type<=RT_U8 && tmpi->arg1.type&MDG_DISP_SIB_RIP) { + i=ICModr1(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0xF6); //TEST ?,0xFF - ICModr2(tmpi,i,tmpi->a1.disp,ip+5); + ICModr2(tmpi,i,,tmpi->arg1.disp,rip+1); ICU8(tmpi,0xFF); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICTest(tmpi,REG_RAX); } ICU24(tmpi,0xC0940F); //SETZ AL ICU32(tmpi,0xC0B60F48); //MOVZX RAX,AL - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_U64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_U64,REG_RAX,0,rip); } -U0 ICAndAnd(CIntermediateCode *tmpi,I64 ip) +U0 ICAndAnd(CIntermediateCode *tmpi,I64 rip) { I64 r2; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (!(tmpi->a1.type&MDF_REG) || tmpi->a1.reg==REG_RAX) { + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (!(tmpi->arg1.type&MDF_REG) || tmpi->arg1.reg==REG_RAX) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r2=REG_RDX; } else - r2=tmpi->a1.reg; + r2=tmpi->arg1.reg; ICZero(tmpi,REG_RAX); ICTest(tmpi,r2); ICU16(tmpi,0x0874); ICTest(tmpi,REG_RCX); ICU16(tmpi,0x0374); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICOrOr(CIntermediateCode *tmpi,I64 ip) +U0 ICOrOr(CIntermediateCode *tmpi,I64 rip) { I64 i=0x48,r2; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (!(tmpi->a1.type&MDF_REG) || tmpi->a1.reg==REG_RAX) { + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (!(tmpi->arg1.type&MDF_REG) || tmpi->arg1.reg==REG_RAX) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r2=REG_RDX; } else - r2=tmpi->a1.reg; + r2=tmpi->arg1.reg; if (r2>7) { i++; @@ -68,21 +68,21 @@ U0 ICOrOr(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0xC80B00+i+r2<<16); ICU16(tmpi,0x0374); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICXorXor(CIntermediateCode *tmpi,I64 ip) +U0 ICXorXor(CIntermediateCode *tmpi,I64 rip) { I64 r2; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (!(tmpi->a1.type&MDF_REG)) { + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (!(tmpi->arg1.type&MDF_REG)) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r2=REG_RDX; } else - r2=tmpi->a1.reg; + r2=tmpi->arg1.reg; ICZero(tmpi,REG_RBX); ICTest(tmpi,r2); ICU16(tmpi,0x0374); @@ -95,19 +95,19 @@ U0 ICXorXor(CIntermediateCode *tmpi,I64 ip) ICU24(tmpi,0xC33348); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) +U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 rip) { - I64 r1,d1,r2,i=0x48,j=tmpi->a2.disp; - if (tmpi->a2.type&MDF_IMM && MIN_I32<=j<=MAX_I32) { + I64 r1,d1,r2,i=0x48,j=tmpi->arg2.disp; + if (tmpi->arg2.type&MDF_IMM && MIN_I32<=j<=MAX_I32) { if (!(tmpi->ic_flags&(ICF_POP_CMP|ICF_PUSH_CMP)) && - tmpi->a1.type&MDF_DISP && //TODO - tmpi->a1.type.raw_type>=RT_I64 && tmpi->a1.reg!=REG_RAX) { - r1=tmpi->a1.reg; - d1=tmpi->a1.disp; + tmpi->arg1.type&MDF_DISP && //TODO + tmpi->arg1.type.raw_type>=RT_I64 && tmpi->arg1.reg!=REG_RAX) { + r1=tmpi->arg1.reg; + d1=tmpi->arg1.disp; ICZero(tmpi,REG_RAX); if (r1>7) i++; @@ -133,11 +133,11 @@ U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) ICPopRegs(tmpi,1<a1.type&MDF_REG && tmpi->a1.reg!=REG_RAX) - r1=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG && tmpi->arg1.reg!=REG_RAX) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r1=REG_RCX; } } @@ -153,31 +153,31 @@ U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) } } if (tmpi->ic_flags & ICF_PUSH_CMP) - ICPush(tmpi,MDF_IMM+RT_I64,0,j,ip); + ICPush(tmpi,MDF_IMM+RT_I64,0,j,rip); if (tmpi->ic_class->raw_type&RTF_UNSIGNED || tmpi->ic_flags & ICF_USE_UNSIGNED) is=us; ICU16(tmpi,0x300+is); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else { - if (tmpi->a2.type&MDF_REG && tmpi->a2.reg!=REG_RAX) - r2=tmpi->a2.reg; + if (tmpi->arg2.type&MDF_REG && tmpi->arg2.reg!=REG_RAX) + r2=tmpi->arg2.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); r2=REG_RCX; } if (tmpi->ic_flags & ICF_POP_CMP) { ICPopRegs(tmpi,1<a1.type&MDF_REG && tmpi->a1.reg!=REG_RAX) - r1=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG && tmpi->arg1.reg!=REG_RAX) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r1=REG_RDX; } } @@ -194,47 +194,47 @@ U0 ICCmp(CIntermediateCode *tmpi,I64 us,I64 is,I64 ip) is=us; ICU16(tmpi,0x300+is); ICU24(tmpi,0xC0FF48); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICBitOps(CIntermediateCode *tmpi,CICArg *a1,CICArg *a2, - CIntermediateCode *tmpi2,I64 op,I64 op_imm,I64 ip) +U0 ICBitOps(CIntermediateCode *tmpi,CICArg *arg1,CICArg *arg2, + CIntermediateCode *tmpi2,I64 op,I64 op_imm,I64 rip) {//TODO:not fully utilizing Modr Bool res_not_used=ToBool(tmpi2->ic_flags&ICF_RES_NOT_USED); I64 r1,t2,r2,d2,i=0x48; if (tmpi->ic_flags & ICF_BY_VAL) { - t2=a2->type&MDG_MASK+RT_I64; //TODO: check overflow - r2=a2->reg; - d2=a2->disp; + t2=arg2->type&MDG_MASK+RT_I64; //TODO: check overflow + r2=arg2->reg; + d2=arg2->disp; if (!(t2&MDG_REG_DISP_SIB_RIP) || !(r2.u8[0]!=REG_RAX&&(!(t2&MDF_SIB) || r2.u8[1]&15!=REG_RAX) || res_not_used)) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,rip); t2=MDF_REG+RT_I64; r2=REG_RCX; d2=0; } - if (a1->type&MDF_REG && (a1->reg!=REG_RAX||res_not_used)) - r1=a1->reg; - else if (!(a1->type&MDF_IMM) || a1->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); + if (arg1->type&MDF_REG && (arg1->reg!=REG_RAX||res_not_used)) + r1=arg1->reg; + else if (!(arg1->type&MDF_IMM) || arg1->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip); r1=REG_RDX; } else r1=0; } else { t2=MDF_DISP+RT_I64; d2=0; - if (a2->type&MDF_REG && (a2->reg!=REG_RAX||res_not_used)) - r2=a2->reg; + if (arg2->type&MDF_REG && (arg2->reg!=REG_RAX||res_not_used)) + r2=arg2->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type,arg2->reg,arg2->disp,rip); r2=REG_RCX; } - if (a1->type&MDF_REG && (a1->reg!=REG_RAX||res_not_used)) - r1=a1->reg; - else if (!(a1->type&MDF_IMM) || a1->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); + if (arg1->type&MDF_REG && (arg1->reg!=REG_RAX||res_not_used)) + r1=arg1->reg; + else if (!(arg1->type&MDF_IMM) || arg1->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip); r1=REG_RDX; } else r1=0; @@ -243,30 +243,30 @@ U0 ICBitOps(CIntermediateCode *tmpi,CICArg *a1,CICArg *a2, ICZero(tmpi,REG_RAX); if (tmpi->ic_flags&ICF_LOCK && op!=0xA30F) ICU8(tmpi,OC_LOCK_PREFIX); - if (a1->type&MDF_IMM && a1->disp<32) + if (arg1->type&MDF_IMM && arg1->disp<32) t2=t2&MDG_MASK+RT_U32; i=ICModr1(r1,t2,r2,d2); ICRex(tmpi,i.u8[1]); - if (a1->type&MDF_IMM && a1->disp<64) { + if (arg1->type&MDF_IMM && arg1->disp<64) { ICU24(tmpi,i.u8[2]<<16+op_imm); - ICModr2(tmpi,i,d2,ip+5); - ICU8(tmpi,a1->disp); + ICModr2(tmpi,i,,d2,rip+1); + ICU8(tmpi,arg1->disp); } else { ICU24(tmpi,i.u8[2]<<16+op); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); } if (!res_not_used) { ICU24(tmpi,0xC0920F); //SETC AL - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICToUpper(CIntermediateCode *tmpi,I64 ip) +U0 ICToUpper(CIntermediateCode *tmpi,I64 rip) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); ICU32(tmpi,0x61F88348); ICU16(tmpi,0x0A7C); ICU32(tmpi,0x7AF88348); @@ -274,26 +274,26 @@ U0 ICToUpper(CIntermediateCode *tmpi,I64 ip) ICU32(tmpi,0xE0C08348); } -U0 ICToI64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICToI64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) { ICFCvt(cc,tmpi,REG_RAX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,TRUE,CN_MAIN,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,TRUE,CN_INST,rip); } -U0 ICToF64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICToF64(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) { ICFCvt(cc,tmpi,REG_RAX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,FALSE,CN_MAIN,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,FALSE,CN_INST,rip); } -U0 ICToBool(CCmpCtrl *,CIntermediateCode *tmpi,I64 ip) +U0 ICToBool(CCmpCtrl *,CIntermediateCode *tmpi,I64 rip) { I64 r; - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RAX; } ICTest(tmpi,r); @@ -301,182 +301,182 @@ U0 ICToBool(CCmpCtrl *,CIntermediateCode *tmpi,I64 ip) ICU32(tmpi,0xC0B60F48); //MOVZX RAX,AL } -U0 ICPreIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICPreIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { I64 r; CHashClass *tmpc=tmpi->ic_class,*tmpc1=tmpc-1; if (tmpi->ic_flags & ICF_BY_VAL) { if (tmpc->ptr_stars_cnt && tmpc1->size!=1) { ICAddSubEctImm(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,tmpc1->size,op.u16[3],ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,tmpc1->size,op.u16[3],rip); } else ICSlashOp(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,op,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,op,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); } else { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RCX; } if (tmpc->ptr_stars_cnt && tmpc1->size!=1) { - ICAddSubEctImm(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0, - MDF_DISP+tmpi->a1_type_pointed_to,r,0, - tmpc1->size,op.u16[3],ip); + ICAddSubEctImm(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + tmpc1->size,op.u16[3],rip); } else ICSlashOp(tmpi, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,op,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,op,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,rip); } } -U0 ICPostIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICPostIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { I64 r; CHashClass *tmpc=tmpi->ic_class,*tmpc1=tmpc-1; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); if (tmpc->ptr_stars_cnt && tmpc1->size!=1) ICAddSubEctImm(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,tmpc1->size,op.u16[3],ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,tmpc1->size,op.u16[3],rip); else ICSlashOp(tmpi, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,op,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,op,rip); } else { - if (tmpi->a1.type&MDF_REG && - !(tmpi->r.type&MDF_REG && tmpi->r.reg==tmpi->a1.reg)) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG && + !(tmpi->res.type&MDF_REG && tmpi->res.reg==tmpi->arg1.reg)) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RCX; } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,rip); if (tmpc->ptr_stars_cnt && tmpc1->size!=1) - ICAddSubEctImm(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0, - MDF_DISP+tmpi->a1_type_pointed_to,r,0,tmpc1->size,op.u16[3],ip); + ICAddSubEctImm(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + MDF_DISP+tmpi->arg1_type_pointed_to,r,0,tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0,op,ip); + ICSlashOp(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0,op,rip); } } -U0 ICDerefPostIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICDerefPostIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { CICType t; I64 r; CHashClass *tmpc1=tmpi->ic_class; - t=tmpi->r.type.raw_type; - if (t>tmpi->a1_type_pointed_to) - t=tmpi->a1_type_pointed_to; + t=tmpi->res.type.raw_type; + if (t>tmpi->arg1_type_pointed_to) + t=tmpi->arg1_type_pointed_to; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RDX; } - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,r,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,r,0,rip); if (tmpc1->size!=1) ICAddSubEctImm(tmpi, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp, - tmpc1->size,op.u16[3],ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp, + tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,op,ip); + ICSlashOp(tmpi,tmpi->arg1.type&MDG_MASK+RT_I64, + tmpi->arg1.reg,tmpi->arg1.disp,op,rip); } else { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RCX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r,0,rip); if (tmpc1->size!=1) ICAddSubEctImm(tmpi,MDF_DISP+RT_I64,r,0,MDF_DISP+RT_I64,r,0, - tmpc1->size,op.u16[3],ip); + tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,MDF_DISP+RT_I64,r,0,op,ip); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,REG_RDX,0,ip); + ICSlashOp(tmpi,MDF_DISP+RT_I64,r,0,op,rip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,REG_RDX,0,rip); } } -U0 ICAssignPostIncDec(CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICAssignPostIncDec(CIntermediateCode *tmpi,I64 op,I64 rip) { CHashClass *tmpc1=tmpi->ic_class2-1; I64 r; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->a1.type&MDF_REG) - r=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); r=REG_RDX; } - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,r,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpc1->size!=1 || tmpi->a1.type&MDF_STK) - ICAddSubEctImm(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - MDF_REG+RT_I64,r,0,tmpc1->size,op.u16[3],ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,r,0, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpc1->size!=1 || tmpi->arg1.type&MDF_STK) + ICAddSubEctImm(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + MDF_REG+RT_I64,r,0,tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,op,ip); + ICSlashOp(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,op,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_I64,REG_RDX,0,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_I64,REG_RDX,0,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); if (tmpc1->size!=1) ICAddSubEctImm(tmpi,MDF_DISP+RT_I64,REG_RDX,0, - MDF_REG+RT_I64,REG_RCX,0,tmpc1->size,op.u16[3],ip); + MDF_REG+RT_I64,REG_RCX,0,tmpc1->size,op.u16[3],rip); else - ICSlashOp(tmpi,MDF_DISP+RT_I64,REG_RDX,0,op,ip); + ICSlashOp(tmpi,MDF_DISP+RT_I64,REG_RDX,0,op,rip); } } -U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, - I64 us,I64 is,I64 not_us,I64 not_is,U8 *buf,I64 ip2) +U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 rip, + I64 us,I64 is,I64 not_us,I64 not_is,U8 *buf,I64 rip2) { I64 r1,r2,i=0x48,j,res_reg; CICType t1,t2; Bool short_jmp,swap,done; CCodeMisc *lb; - CICArg *a1=&tmpi->a1,*a2=&tmpi->a2; + CICArg *arg1=&tmpi->arg1,*arg2=&tmpi->arg2; - j=a1->disp; - if (a1->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { - SwapI64(&a1,&a2); + j=arg1->disp; + if (arg1->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { + SwapI64(&arg1,&arg2); swap=TRUE; us=not_us; is=not_is; @@ -486,16 +486,17 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, tmpi->ic_flags & ICF_USE_UNSIGNED) is=us; - j=a2->disp; - if (a2->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { - if (!has_res && a1->type&MDG_REG_DISP_SIB_RIP) - ICAddSubEctImm(tmpi,a1->type,a1->reg,a1->disp, - a1->type,a1->reg,a1->disp,j,0x073B,ip2); + j=arg2->disp; + if (arg2->type&MDF_IMM && MIN_I32<=j<=MAX_I32) { + if (!has_res && arg1->type&MDG_REG_DISP_SIB_RIP) + ICAddSubEctImm(tmpi,arg1->type,arg1->reg,arg1->disp, + arg1->type,arg1->reg,arg1->disp,j,0x073B,rip2); else { - if (a1->type&MDF_REG) - r1=a1->reg; + if (arg1->type&MDF_REG) + r1=arg1->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip2); r1=REG_RDX; } if (!j) { @@ -527,56 +528,61 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, } if (has_res) { if (!swap) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_IMM+RT_I64,0,j,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_IMM+RT_I64,0,j,rip2); res_reg=REG_RCX; } else res_reg=r1; } } else { done=FALSE; - t1=a1->type; - r1=a1->reg; - r2=a2->reg; - t2=a2->type; + t1=arg1->type; + r1=arg1->reg; + r2=arg2->reg; + t2=arg2->type; if (t2.raw_type>=RT_I64 && !has_res && t2&MDG_DISP_SIB_RIP) { if (!(t1&MDF_REG) || t1.raw_typetype,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg1->type, + arg1->reg,arg1->disp,rip2); r1=REG_RAX; } - i=ICModr1(r1,t2,r2,a2->disp); + i=ICModr1(r1,t2,r2,arg2->disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0x3B); - ICModr2(tmpi,i,a2->disp,ip2+4); + ICModr2(tmpi,i,,arg2->disp,rip2); done=TRUE; } else if (t1.raw_type>=RT_I64 && t1&MDG_REG_DISP_SIB_RIP) { if (!(t2&MDF_REG) || t2.raw_typetype,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type, + arg2->reg,arg2->disp,rip2); r2=REG_RCX; } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); r2=REG_RAX; } } - i=ICModr1(r2,t1,r1,a1->disp); + i=ICModr1(r2,t1,r1,arg1->disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0x39); - ICModr2(tmpi,i,a1->disp,ip2+4); + ICModr2(tmpi,i,,arg1->disp,rip2); if (has_res) res_reg=r2; done=TRUE; } if (!done) { - if (a2->type&MDF_REG) - r2=a2->reg; + if (arg2->type&MDF_REG) + r2=arg2->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); r2=REG_RAX; } - if (a1->type&MDF_REG) - r1=a1->reg; + if (arg1->type&MDF_REG) + r1=arg1->reg; else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type, + arg1->reg,arg1->disp,rip2); r1=REG_RCX; } if (r2>7) @@ -589,11 +595,11 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, } } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -606,7 +612,7 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -616,7 +622,7 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -627,36 +633,36 @@ U0 ICCmpAndBranch(CIntermediateCode *tmpi,Bool has_res,I64 ip, ICU32(tmpi,i); } if (has_res) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,res_reg,0,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,res_reg,0,rip2); } -U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) +U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 rip,I64 is,U8 *buf,I64 rip2) { I64 i; Bool short_jmp; CCodeMisc *lb; - if (!(tmpi->a1.type&MDF_REG)) { - if (tmpi->a1.type.raw_type<=RT_U8 && tmpi->a1.type&MDG_DISP_SIB_RIP) { - i=ICModr1(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp); + if (!(tmpi->arg1.type&MDF_REG)) { + if (tmpi->arg1.type.raw_type<=RT_U8 && tmpi->arg1.type&MDG_DISP_SIB_RIP) { + i=ICModr1(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp); ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0xF6); - ICModr2(tmpi,i,tmpi->a1.disp,ip2+5); + ICModr2(tmpi,i,,tmpi->arg1.disp,rip2+1); ICU8(tmpi,0xFF); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICTest(tmpi,REG_RAX); } } else - ICTest(tmpi,tmpi->a1.reg); + ICTest(tmpi,tmpi->arg1.reg); - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -665,13 +671,13 @@ U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); @@ -679,17 +685,17 @@ U0 ICTestAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) } } -U0 ICFlagBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf) +U0 ICFlagBranch(CIntermediateCode *tmpi,I64 rip,I64 is,U8 *buf) { I64 i; Bool short_jmp; CCodeMisc *lb; - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -698,13 +704,13 @@ U0 ICFlagBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf) if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); diff --git a/Compiler/BackC.HC b/Compiler/BackC.HC index d16ca9f..939e3a7 100644 --- a/Compiler/BackC.HC +++ b/Compiler/BackC.HC @@ -1,34 +1,34 @@ -U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) +U0 ICAndBranch(CIntermediateCode *tmpi,I64 rip,I64 is,U8 *buf,I64 rip2) { U64 i; I64 it,t1,r1,d1,r2; Bool short_jmp,swap,override; CCodeMisc *lb; - CICArg *a1,*a2; + CICArg *arg1,*arg2; - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { swap=TRUE; - a1=&tmpi->a2; - a2=&tmpi->a1; + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; } else { swap=FALSE; - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; } - if (a2->type&MDF_IMM && a2->disp>MAX_U32) + if (arg2->type&MDF_IMM && arg2->disp>MAX_U32) override=TRUE; else override=FALSE; - if (a1->type.raw_typetype.raw_type) - it=a1->type.raw_type; + if (arg1->type.raw_typetype.raw_type) + it=arg1->type.raw_type; else - it=a2->type.raw_type; + it=arg2->type.raw_type; - i=a2->disp; - if (a2->type&MDF_IMM && i<=MAX_U32) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a1->type,a1->reg,a1->disp,ip2); + i=arg2->disp; + if (arg2->type&MDF_IMM && i<=MAX_U32) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg1->type,arg1->reg,arg1->disp,rip2); if (i<=MAX_U8) ICU16(tmpi,i<<8+0xA8); else if (i<=MAX_U16) @@ -41,73 +41,73 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) t1=MDF_REG+it; d1=0; if (swap && !override) { - if (a1->type&MDF_REG) { - r1=a1->reg; + if (arg1->type&MDF_REG) { + r1=arg1->reg; swap=TRUE; } else { r1=REG_RCX; swap=FALSE; } - if (a2->type&MDF_REG) { - r2=a2->reg; + if (arg2->type&MDF_REG) { + r2=arg2->reg; swap=FALSE; } else r2=REG_RDX; if (swap) { - if (!(a1->type&MDF_REG) || r1!=a1->reg) - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); - if (a2->type&MDG_REG_DISP_SIB_RIP) { - t1=a2->type&MDG_MASK+it; - r2=a2->reg; - d1=a2->disp; + if (!(arg1->type&MDF_REG) || r1!=arg1->reg) + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); + if (arg2->type&MDG_REG_DISP_SIB_RIP) { + t1=arg2->type&MDG_MASK+it; + r2=arg2->reg; + d1=arg2->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); i=ICModr1(r1,t1,r2,d1); } else { - if (a1->type&MDG_REG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+it; - r1=a1->reg; - d1=a1->disp; + if (arg1->type&MDG_REG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+it; + r1=arg1->reg; + d1=arg1->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); - if (!(a2->type&MDF_REG) || r2!=a2->reg) - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); + if (!(arg2->type&MDF_REG) || r2!=arg2->reg) + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); i=ICModr1(r2,t1,r1,d1); } } else { - if (a2->type&MDF_REG) { - r2=a2->reg; + if (arg2->type&MDF_REG) { + r2=arg2->reg; swap=FALSE; } else { r2=REG_RDX; swap=TRUE; } - if (a1->type&MDF_REG) { - r1=a1->reg; + if (arg1->type&MDF_REG) { + r1=arg1->reg; swap=TRUE; } else r1=REG_RCX; if (override) swap=FALSE; if (swap) { - if (a2->type&MDG_REG_DISP_SIB_RIP) { - t1=a2->type&MDG_MASK+it; - r2=a2->reg; - d1=a2->disp; + if (arg2->type&MDG_REG_DISP_SIB_RIP) { + t1=arg2->type&MDG_MASK+it; + r2=arg2->reg; + d1=arg2->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); - if (!(a1->type&MDF_REG) || r1!=a1->reg) - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); + if (!(arg1->type&MDF_REG) || r1!=arg1->reg) + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); i=ICModr1(r1,t1,r2,d1); } else { - if (!(a2->type&MDF_REG) || r2!=a2->reg) - ICMov(tmpi,MDF_REG+RT_I64,r2,0,a2->type,a2->reg,a2->disp,ip2); - if (a1->type&MDG_REG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+it; - r1=a1->reg; - d1=a1->disp; + if (!(arg2->type&MDF_REG) || r2!=arg2->reg) + ICMov(tmpi,MDF_REG+RT_I64,r2,0,arg2->type,arg2->reg,arg2->disp,rip2); + if (arg1->type&MDG_REG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+it; + r1=arg1->reg; + d1=arg1->disp; } else - ICMov(tmpi,MDF_REG+RT_I64,r1,0,a1->type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,r1,0,arg1->type,arg1->reg,arg1->disp,rip2); i=ICModr1(r2,t1,r1,d1); } } @@ -126,14 +126,14 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+0x85); } - ICModr2(tmpi,i,d1,ip2+4); + ICModr2(tmpi,i,,d1,rip2); } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -142,13 +142,13 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); @@ -156,111 +156,114 @@ U0 ICAndBranch(CIntermediateCode *tmpi,I64 ip,I64 is,U8 *buf,I64 ip2) } } -U0 ICAssign(CIntermediateCode *tmpi,I64 ip) +U0 ICAssign(CIntermediateCode *tmpi,I64 rip) { CIntermediateCode *tmpi1; if (tmpi->ic_flags & ICF_BY_VAL) { - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); } else { - if (tmpi->a1.type&MDF_REG) { + if (tmpi->arg1.type&MDF_REG) { if (!(tmpi1=OptLag1(tmpi)) || tmpi1->ic_code!=IC_ADD_CONST || - tmpi1->r.type!=MDF_REG+RT_I64 || tmpi1->r.reg!=tmpi->a1.reg || - tmpi1->a1.type!=MDF_REG+RT_I64 || tmpi1->a1.reg!=tmpi->a1.reg || - (tmpi->a2.type&MDF_REG || tmpi->a2.type&MDF_DISP) && - tmpi->a2.reg==tmpi->a1.reg || - tmpi->r.type.mode || tmpi1->ic_flags&~ICG_NO_CVT_MASK) { + tmpi1->res.type!=MDF_REG+RT_I64 || tmpi1->res.reg!=tmpi->arg1.reg || + tmpi1->arg1.type!=MDF_REG+RT_I64 || + tmpi1->arg1.reg!=tmpi->arg1.reg || + (tmpi->arg2.type&MDF_REG || tmpi->arg2.type&MDF_DISP) && + tmpi->arg2.reg==tmpi->arg1.reg || + tmpi->res.type.mode || tmpi1->ic_flags&~ICG_NO_CVT_MASK) { ICMov(tmpi, - MDF_DISP+tmpi->a1_type_pointed_to,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + MDF_DISP+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } else { tmpi->ic_flags=(tmpi->ic_flags|tmpi1->ic_flags)& ~ICF_CODE_FINAL|ICF_DONT_RESTORE; - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; OptSetNOP1(tmpi1); //This better not be last pass! - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } } } -U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, - I64 op,I64 op_imm,I64 is,U8 *buf,I64 ip2) +U0 ICBrBitOps(CIntermediateCode *tmpi,I64 rip, + I64 op,I64 op_imm,I64 is,U8 *buf,I64 rip2) { I64 i,t,r1,r2,d1,d2,t1,t2; - CICArg *a1=&tmpi->a1,*a2=&tmpi->a2; + CICArg *arg1=&tmpi->arg1,*arg2=&tmpi->arg2; Bool short_jmp; CCodeMisc *lb; if (tmpi->ic_flags & ICF_BY_VAL) { - if (tmpi->ic_flags&ICF_SWAP && !(a2->type&MDF_REG) && - (!(a2->type&MDF_IMM) ||a2->disp>63)|| - !(tmpi->ic_flags&ICF_SWAP) && a2->type&MDF_IMM && - a2->disp<64 || a2->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip2); + if (tmpi->ic_flags&ICF_SWAP && !(arg2->type&MDF_REG) && + (!(arg2->type&MDF_IMM) ||arg2->disp>63)|| + !(tmpi->ic_flags&ICF_SWAP) && arg2->type&MDF_IMM && + arg2->disp<64 || arg2->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_REG+RT_I64; r2=REG_RCX; d2=0; } else { - t2=a2->type; - if (t2&MDF_IMM && a2->disp<64) + t2=arg2->type; + if (t2&MDF_IMM && arg2->disp<64) r2=0; else - r2=a2->reg; - d2=a2->disp; + r2=arg2->reg; + d2=arg2->disp; } - if (!(tmpi->ic_flags&ICF_SWAP) && !(a1->type&MDF_REG) && - (!(a1->type&MDF_IMM) || a1->disp>63) || - tmpi->ic_flags&ICF_SWAP && a1->type&MDF_IMM && - a1->disp<64 || a1->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); + if (!(tmpi->ic_flags&ICF_SWAP) && !(arg1->type&MDF_REG) && + (!(arg1->type&MDF_IMM) || arg1->disp>63) || + tmpi->ic_flags&ICF_SWAP && arg1->type&MDF_IMM && + arg1->disp<64 || arg1->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip2); t1=MDF_REG+RT_I64; r1=REG_RDX; d1=0; } else { - t1=a1->type; - if (t1&MDF_IMM && a1->disp<64) + t1=arg1->type; + if (t1&MDF_IMM && arg1->disp<64) r1=0; else - r1=a1->reg; - d1=a1->disp; + r1=arg1->reg; + d1=arg1->disp; } } else { t1=MDF_DISP+RT_I64; t2=MDF_DISP+RT_I64; d1=0; d2=0; - if (a2->type&MDF_REG) - r2=a2->reg; - else if (!(tmpi->ic_flags&ICF_SWAP) || !(a2->type&MDF_IMM) || - a2->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a2->type,a2->reg,a2->disp,ip2); + if (arg2->type&MDF_REG) + r2=arg2->reg; + else if (!(tmpi->ic_flags&ICF_SWAP) || !(arg2->type&MDF_IMM) || + arg2->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg2->type,arg2->reg,arg2->disp,rip2); r2=REG_RCX; } else r2=0; - if (a1->type&MDF_REG) - r1=a1->reg; - else if (tmpi->ic_flags&ICF_SWAP || !(a1->type&MDF_IMM) || a1->disp>63) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip2); + if (arg1->type&MDF_REG) + r1=arg1->reg; + else if (tmpi->ic_flags&ICF_SWAP || + !(arg1->type&MDF_IMM) || arg1->disp>63) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type,arg1->reg,arg1->disp,rip2); r1=REG_RDX; } else r1=0; @@ -268,8 +271,8 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, if (tmpi->ic_flags&ICF_LOCK && op!=0xA30F) ICU8(tmpi,OC_LOCK_PREFIX); if (tmpi->ic_flags&ICF_SWAP) { - if (a2->type&MDF_IMM && a2->disp<32) { - if (op==0xA30F && a2->disp<8) { + if (arg2->type&MDF_IMM && arg2->disp<32) { + if (op==0xA30F && arg2->disp<8) { t=t1&MDG_MASK+RT_U8; op_imm=0xF6; //TEST } else @@ -277,10 +280,10 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, } else t=t1; i=ICModr1(r2,t,r1,d1); - SwapI64(&a1,&a2); + SwapI64(&arg1,&arg2); } else { - if (a1->type&MDF_IMM && a1->disp<32) { - if (op==0xA30F && a1->disp<8) { + if (arg1->type&MDF_IMM && arg1->disp<32) { + if (op==0xA30F && arg1->disp<8) { t=t2&MDG_MASK+RT_U8; op_imm=0xF6; //TEST } else @@ -292,26 +295,26 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, ICRex(tmpi,i.u8[1]); if (op_imm==0xF6) {//TEST ICU16(tmpi,i.u8[2]<<8+op_imm); - ICModr2(tmpi,i,a2->disp,ip2+5); - ICU8(tmpi,1<disp); + ICModr2(tmpi,i,,arg2->disp,rip2+1); + ICU8(tmpi,1<disp); if (is==0x72820F) is=0x75850F; else is=0x74840F; - } else if (a1->type&MDF_IMM && a1->disp<64) { + } else if (arg1->type&MDF_IMM && arg1->disp<64) { ICU24(tmpi,i.u8[2]<<16+op_imm); - ICModr2(tmpi,i,a2->disp,ip2+5); - ICU8(tmpi,a1->disp); + ICModr2(tmpi,i,,arg2->disp,rip2+1); + ICU8(tmpi,arg1->disp); } else { ICU24(tmpi,i.u8[2]<<16+op); - ICModr2(tmpi,i,a2->disp,ip2+4); + ICModr2(tmpi,i,,arg2->disp,rip2); } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; if (MIN_I8<=i<=MAX_I8) @@ -320,13 +323,13 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,i<<8+is.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) i+=8; ICU16(tmpi,is.u16[0]); @@ -334,107 +337,107 @@ U0 ICBrBitOps(CIntermediateCode *tmpi,I64 ip, } } -U0 ICQueInit(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueInit(CIntermediateCode *tmpi,I64 rip2) { I64 r1; - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RAX; } - ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r1,0,ip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r1,0,rip2); } -U0 ICQueIns(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueIns(CIntermediateCode *tmpi,I64 rip2) { I64 r1,r2; - if (tmpi->a2.type==MDF_REG+RT_I64 && tmpi->a2.reg!=REG_RDX) - r2=tmpi->a2.reg; + if (tmpi->arg2.type==MDF_REG+RT_I64 && tmpi->arg2.reg!=REG_RDX) + r2=tmpi->arg2.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); r2=REG_RAX; } - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RDX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,REG_RBX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,sizeof(U8 *),MDF_REG+RT_I64,r2,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,0,MDF_REG+RT_I64,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,REG_RBX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,sizeof(U8 *),MDF_REG+RT_I64,r2,0,rip2); } -U0 ICQueInsRev(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueInsRev(CIntermediateCode *tmpi,I64 rip2) { I64 r1,r2; - if (tmpi->a2.type==MDF_REG+RT_I64 && tmpi->a2.reg!=REG_RDX) - r2=tmpi->a2.reg; + if (tmpi->arg2.type==MDF_REG+RT_I64 && tmpi->arg2.reg!=REG_RDX) + r2=tmpi->arg2.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); r2=REG_RAX; } - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RDX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),ip2); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,0,MDF_REG+RT_I64,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,REG_RBX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r2,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),rip2); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RBX,0,MDF_REG+RT_I64,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,0,MDF_REG+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r2,sizeof(U8 *),MDF_REG+RT_I64,REG_RBX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,r1,sizeof(U8 *),MDF_REG+RT_I64,r2,0,rip2); } -U0 ICQueRem(CIntermediateCode *tmpi,I64 ip2) +U0 ICQueRem(CIntermediateCode *tmpi,I64 rip2) { I64 r1; - if (tmpi->a1.type==MDF_REG+RT_I64) - r1=tmpi->a1.reg; + if (tmpi->arg1.type==MDF_REG+RT_I64) + r1=tmpi->arg1.reg; else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); r1=REG_RAX; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,MDF_DISP+RT_I64,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_I64,r1,sizeof(U8 *),rip2); ICU24(tmpi,0x1A8948); ICU32(tmpi,sizeof(U8 *)<<24+0x538948); } -U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 ip2) +U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 rip2) { I64 r1,i1=0x48; - if (tmpi->a2.type==MDF_REG+RT_I64 && tmpi->a2.reg!=REG_RAX) { - r1=tmpi->a2.reg; + if (tmpi->arg2.type==MDF_REG+RT_I64 && tmpi->arg2.reg!=REG_RAX) { + r1=tmpi->arg2.reg; if (r1>7) { i1++; r1&=7; } ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } else { - if (tmpi->a1.reg==REG_RAX && tmpi->a1.type&MDG_REG_DISP_SIB) { + if (tmpi->arg1.reg==REG_RAX && tmpi->arg1.type&MDG_REG_DISP_SIB) { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); r1=REG_RDX; ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); - if (tmpi->a1.type==MDF_REG+RT_I64) { - r1=tmpi->a1.reg; + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); + if (tmpi->arg1.type==MDF_REG+RT_I64) { + r1=tmpi->arg1.reg; if (r1>7) { i1++; r1&=7; @@ -442,7 +445,7 @@ U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 ip2) } else { r1=REG_RDX; ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } } } @@ -450,49 +453,49 @@ U0 ICMinMax(CIntermediateCode *tmpi,I64 op,I64 ip2) ICU32(tmpi,0xC0000F00+op<<16+r1<<24+i1); } -U0 ICSqr(CIntermediateCode *tmpi,I64 op,I64 ip2) +U0 ICSqr(CIntermediateCode *tmpi,I64 op,I64 rip2) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + ICSlashOp(tmpi,MDF_REG+RT_I64,REG_RAX,0,op,rip2); } -U0 ICModU64(CIntermediateCode *tmpi,I64 ip2) +U0 ICModU64(CIntermediateCode *tmpi,I64 rip2) { CICType t1; I64 r1,d1; ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); - if (tmpi->a1.reg!=REG_RAX && tmpi->a1.reg!=REG_RDX && - tmpi->a1.type&MDG_REG_DISP_SIB && - tmpi->a1.type.raw_type>=RT_I64) { - t1=tmpi->a1.type; - r1=tmpi->a1.reg; - d1=tmpi->a1.disp; + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); + if (tmpi->arg1.reg!=REG_RAX && tmpi->arg1.reg!=REG_RDX && + tmpi->arg1.type&MDG_REG_DISP_SIB && + tmpi->arg1.type.raw_type>=RT_I64) { + t1=tmpi->arg1.type; + r1=tmpi->arg1.reg; + d1=tmpi->arg1.disp; } else { t1=MDF_REG+RT_I64; r1=REG_RBX; d1=0; ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); } - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,rip2); ICZero(tmpi,REG_RDX); - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_DIV,ip2); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,ip2); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_DIV,rip2); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_REG+RT_I64,REG_RDX,0,ip2); + MDF_REG+RT_I64,REG_RDX,0,rip2); } -U0 ICSwap(CIntermediateCode *tmpi,I64 ip2) +U0 ICSwap(CIntermediateCode *tmpi,I64 rip2) { I64 r1,r2; - if (tmpi->a1.type&MDF_REG) - r1=tmpi->a1.reg; + if (tmpi->arg1.type&MDF_REG) + r1=tmpi->arg1.reg; else r1=REG_RAX; - if (tmpi->a2.type&MDF_REG) - r2=tmpi->a2.reg; + if (tmpi->arg2.type&MDF_REG) + r2=tmpi->arg2.reg; else r2=REG_RAX; if (r1==r2) { @@ -502,119 +505,119 @@ U0 ICSwap(CIntermediateCode *tmpi,I64 ip2) r2=REG_RAX; } ICMov(tmpi,MDF_REG+RT_I64,r2,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,r1,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); switch (tmpi->ic_code) { case IC_SWAP_U8: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U8,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U8,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U8,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U8,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U8,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U8,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U8,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U8,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; case IC_SWAP_U16: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U16,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U16,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U16,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U16,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U16,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U16,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U16,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U16,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; case IC_SWAP_U32: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U32,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U32,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U32,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U32,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U32,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U32,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U32,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U32,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; case IC_SWAP_I64: - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U64,r1,0,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U64,r2,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U64,r2,0,MDF_REG+RT_I64,REG_RCX,0,ip2); - ICMov(tmpi,MDF_DISP+RT_U64,r1,0,MDF_REG+RT_I64,REG_RDX,0,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,MDF_DISP+RT_U64,r1,0,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_DISP+RT_U64,r2,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U64,r2,0,MDF_REG+RT_I64,REG_RCX,0,rip2); + ICMov(tmpi,MDF_DISP+RT_U64,r1,0,MDF_REG+RT_I64,REG_RDX,0,rip2); break; } } -U0 ICAndEqu(CIntermediateCode *tmpi,I64 ip2) +U0 ICAndEqu(CIntermediateCode *tmpi,I64 rip2) { I64 i,bit; - if (tmpi->a2.type&MDF_IMM && !(tmpi->a1.type&MDF_STK) && + if (tmpi->arg2.type&MDF_IMM && !(tmpi->arg1.type&MDF_STK) && tmpi->ic_flags&ICF_RES_NOT_USED) { - i=~tmpi->a2.disp; + i=~tmpi->arg2.disp; bit=Bsf(i); if (0<=bit==Bsr(i)) { - tmpi->a2.disp=bit; - tmpi->a2.reg=0; - tmpi->a1.type=tmpi->a1.type&MDG_MASK+RT_I64; - ICBitOps(tmpi,&tmpi->a2,&tmpi->a1,tmpi,0xB30F,0x30BA0F,ip2); + tmpi->arg2.disp=bit; + tmpi->arg2.reg=0; + tmpi->arg1.type=tmpi->arg1.type&MDG_MASK+RT_I64; + ICBitOps(tmpi,&tmpi->arg2,&tmpi->arg1,tmpi,0xB30F,0x30BA0F,rip2); return; } } - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x210425240423,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x210425240423,rip2); } -U0 ICOrEqu(CIntermediateCode *tmpi,I64 ip2) +U0 ICOrEqu(CIntermediateCode *tmpi,I64 rip2) { I64 i,bit; - if (tmpi->a2.type&MDF_IMM && !(tmpi->a1.type&MDF_STK) && + if (tmpi->arg2.type&MDF_IMM && !(tmpi->arg1.type&MDF_STK) && tmpi->ic_flags&ICF_RES_NOT_USED) { - i=tmpi->a2.disp; + i=tmpi->arg2.disp; bit=Bsf(i); if (0<=bit==Bsr(i) && i>MAX_I8) { - tmpi->a2.disp=bit; - tmpi->a2.reg=0; - tmpi->a1.type=tmpi->a1.type&MDG_MASK+RT_I64; - ICBitOps(tmpi,&tmpi->a2,&tmpi->a1,tmpi,0xAB0F,0x28BA0F,ip2); + tmpi->arg2.disp=bit; + tmpi->arg2.reg=0; + tmpi->arg1.type=tmpi->arg1.type&MDG_MASK+RT_I64; + ICBitOps(tmpi,&tmpi->arg2,&tmpi->arg1,tmpi,0xAB0F,0x28BA0F,rip2); return; } } - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x09010D0C010B,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x09010D0C010B,rip2); } -U0 ICXorEqu(CIntermediateCode *tmpi,I64 ip2) +U0 ICXorEqu(CIntermediateCode *tmpi,I64 rip2) { I64 i,bit; - if (tmpi->a2.type&MDF_IMM && !(tmpi->a1.type&MDF_STK) && + if (tmpi->arg2.type&MDF_IMM && !(tmpi->arg1.type&MDF_STK) && tmpi->ic_flags&ICF_RES_NOT_USED) { - i=tmpi->a2.disp; + i=tmpi->arg2.disp; bit=Bsf(i); if (0<=bit==Bsr(i)) { - tmpi->a2.disp=bit; - tmpi->a2.reg=0; - tmpi->a1.type=tmpi->a1.type&MDG_MASK+RT_I64; - ICBitOps(tmpi,&tmpi->a2,&tmpi->a1,tmpi,0xBB0F,0x38BA0F,ip2); + tmpi->arg2.disp=bit; + tmpi->arg2.reg=0; + tmpi->arg1.type=tmpi->arg1.type&MDG_MASK+RT_I64; + ICBitOps(tmpi,&tmpi->arg2,&tmpi->arg1,tmpi,0xBB0F,0x38BA0F,rip2); return; } } - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x310635340633,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x310635340633,rip2); } -U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, - Bool nobound,CCmpCtrl *cc,U8 *buf,I64 ip2) +U0 ICSwitch(CIntermediateCode *tmpi,I64 rip, + Bool nobound,CCmpCtrl *cc,U8 *buf,I64 rip2) { I64 i,j,cnt,min,max,begin,r; CCodeMisc *lb; Bool short_jmp; CAOTAbsAddr *tmpa; - if (!(tmpi->a1.type&MDF_REG) || tmpi->a1.reg&7==REG_RSP) + if (!(tmpi->arg1.type&MDF_REG) || tmpi->arg1.reg&7==REG_RSP) r=REG_RDX; else - r=tmpi->a1.reg; + r=tmpi->arg1.reg; if (nobound) ICMov(tmpi,MDF_REG+RT_I64,r,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); else { - if (tmpi->a2.type&MDF_IMM) { - j=tmpi->a2.disp; + if (tmpi->arg2.type&MDF_IMM) { + j=tmpi->arg2.disp; ICMov(tmpi,MDF_REG+RT_I64,r,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); if (MIN_I8<=j<=MAX_I8) { i=0xF88348+(r&7)<<16; if (r>7) i++; @@ -627,36 +630,36 @@ U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, ICU32(tmpi,j); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); i=0xC13B48+(r&7)<<19; if (r>7) i+=4; ICU24(tmpi,i); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,r,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); i=0xC13B48+(r&7)<<19; if (r>7) i+=4; ICU24(tmpi,i); } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=tmpi->ic_data(CCodeMisc *)->dft; short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (MIN_I8<=i<=MAX_I8) short_jmp=TRUE; } if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - ICU16(tmpi,(lb->addr-(ip+2))<<8+0x73); + ICU16(tmpi,(lb->addr-(rip+2))<<8+0x73); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; ICU16(tmpi,0x830F); - ICU32(tmpi,lb->addr-(ip+6)); + ICU32(tmpi,lb->addr-(rip+6)); } } @@ -730,8 +733,8 @@ U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, tmpa->next=cc->aotc->abss; tmpa->type=AAT_ADD_U32; cc->aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt; - ICU32(tmpi,lb->addr+cc->aotc->ip); + tmpa->rip=rip2+tmpi->ic_cnt; + ICU32(tmpi,lb->addr+cc->aotc->rip); } else ICU32(tmpi,lb->addr+buf); @@ -743,8 +746,8 @@ U0 ICSwitch(CIntermediateCode *tmpi,I64 ip, tmpa->next=cc->aotc->abss; tmpa->type=AAT_ADD_U32; cc->aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt; - ICU32(tmpi,begin+cc->aotc->ip); + tmpa->rip=rip2+tmpi->ic_cnt; + ICU32(tmpi,begin+cc->aotc->rip); } else ICU32(tmpi,begin+buf); } else @@ -763,6 +766,6 @@ U0 ICLocalVarInit(CIntermediateCode *tmpi) ICU24(tmpi,0xC1C748); ICU32(tmpi,tmpi->ic_data); ICU16(tmpi,sys_var_init_val<<8+0xB0); - ICU16(tmpi,0xAAF3); + ICU24(tmpi,0xAA48F3); ICU16(tmpi,0x5F48); } diff --git a/Compiler/BackFA.HC b/Compiler/BackFA.HC index f1c60f9..26706d0 100644 --- a/Compiler/BackFA.HC +++ b/Compiler/BackFA.HC @@ -1,7 +1,7 @@ #define CN_A2 0 #define CN_A1 1 -#define CN_MAIN 2 -#define CN_R 3 +#define CN_INST 2 +#define CN_RES 3 U0 CmpNoteFloatOp(CCmpCtrl *cc,CIntermediateCode *tmpi, Bool dont_pushable,Bool dont_popable,I64 pos) @@ -18,11 +18,11 @@ U0 CmpNoteFloatOp(CCmpCtrl *cc,CIntermediateCode *tmpi, if (cc->last_float_op_ic!=tmpi && cc->dont_push_float) link=TRUE; break; - case CN_MAIN: + case CN_INST: if (cc->last_float_op_ic!=tmpi) { if (cc->dont_push_float) { if (intermediate_code_table[tmpi->ic_code].arg_cnt==IS_2_ARG && - cc->last_float_op_ic->r.reg!=REG_R8) + cc->last_float_op_ic->res.reg!=REG_R8) tmpi->ic_flags|=ICF_ALT_TEMPLATE; else tmpi->ic_flags&=~ICF_ALT_TEMPLATE; @@ -37,8 +37,8 @@ U0 CmpNoteFloatOp(CCmpCtrl *cc,CIntermediateCode *tmpi, link=TRUE; } break; - case CN_R: - if (cc->last_float_op_ic==tmpi && cc->last_float_op_pos==CN_MAIN) + case CN_RES: + if (cc->last_float_op_ic==tmpi && cc->last_float_op_pos==CN_INST) link=TRUE; break; } @@ -121,7 +121,7 @@ U0 ICCopyTemplate(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op, } U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, - CICType t2,I64 r2,I64 d2,Bool to_int,I64 pos,I64 ip) + CICType t2,I64 r2,I64 d2,Bool to_int,I64 pos,I64 rip) { I64 rsp_size=0,op1,op2; Bool dont_push_float,dont_pop_float; @@ -137,7 +137,7 @@ U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (!dont_push_float) { if (!(t2.raw_type>=RT_I64 && t2&MDG_DISP_SIB_RIP)) { - ICPush(tmpi,t2,r2,d2,ip); + ICPush(tmpi,t2,r2,d2,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size=8; } else { @@ -146,7 +146,7 @@ U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, ICAddRSP(tmpi,-8); } } - ICSlashOp(tmpi,t2,r2,d2,op1,ip); + ICSlashOp(tmpi,t2,r2,d2,op1,rip); } else { if (!dont_pop_float) { rsp_size=8; @@ -161,13 +161,13 @@ U0 ICFCvt(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,ip); - ICPop(tmpi,MDF_REG+RT_I64,r1,0,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,rip); + ICPop(tmpi,MDF_REG+RT_I64,r1,0,rip); } } U0 ICFCvt2(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, - CICType t2,I64 r2,I64 d2,Bool to_int,I64 ip) + CICType t2,I64 r2,I64 d2,Bool to_int,I64 rip) { I64 rsp_size=0,op1,op2; if (to_int) { @@ -178,43 +178,43 @@ U0 ICFCvt2(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 r1, op2=SLASH_OP_FSTP; } if (!(t2.raw_type>=RT_I64 && t2&MDG_DISP_SIB_RIP)) { - ICPush(tmpi,t2,r2,d2,ip); + ICPush(tmpi,t2,r2,d2,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size=8; } else { rsp_size=8; ICAddRSP(tmpi,-8); } - ICSlashOp(tmpi,t2,r2,d2,op1,ip); - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,ip); - ICPop(tmpi,MDF_REG+RT_I64,r1,0,ip); + ICSlashOp(tmpi,t2,r2,d2,op1,rip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,op2,rip); + ICPop(tmpi,MDF_REG+RT_I64,r1,0,rip); cc->last_dont_pushable=cc->last_dont_popable=FALSE; //TODO: improve this } -U0 ICFUnaryMinus(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf2,I64 ip) +U0 ICFUnaryMinus(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf2,I64 rip) { - CICArg *a1=&tmpi->a1; + CICArg *arg1=&tmpi->arg1; I64 rsp_size=0,builtin1=0,t1,r1,d1; Bool dont_push_float,dont_pop_float; if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (!dont_push_float) { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } @@ -222,48 +222,48 @@ U0 ICFUnaryMinus(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf2,I64 ip) if (builtin1) ICU16(tmpi,builtin1); else - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,rip); } if (!dont_pop_float && !rsp_size) { rsp_size=8; ICAddRSP(tmpi,-8); } ICU16(tmpi,0xE0D9); //FCHS - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); if (dont_pop_float) { if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); - ICPop(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); + ICPop(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp,rip); } } -U0 ICFMod(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICFMod(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) {//for MOD Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_push_float) { if (tmpi->ic_flags&ICF_ALT_TEMPLATE) ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); else ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } //TODO: unpushable,unpop? Not sure - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_INST); if (!dont_pop_float) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) {//for POW I64 i; CAOTImportExport *tmpie; @@ -271,9 +271,9 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) cc->htc.hash_table_lst,HTT_EXPORT_SYS_SYM); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); if (cc->flags&CCF_AOT_COMPILE) { if (!tmpex) { tmpex=CAlloc(sizeof(CHashExport)); @@ -288,18 +288,18 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) if (buf) { tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_IMM_I64; - tmpie->ip=ip+tmpi->ic_cnt-8; + tmpie->rip=rip+tmpi->ic_cnt-8; tmpie->next=tmpex->ie_lst; tmpex->ie_lst=tmpie; } ICU16(tmpi,0xD3FF); } else { ICU8(tmpi,0xE8); - ICU32(tmpi,-(ip+tmpi->ic_cnt+4)); + ICU32(tmpi,-(rip+tmpi->ic_cnt+4)); if (buf) { tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_REL_I32; - tmpie->ip=ip+tmpi->ic_cnt-4; + tmpie->rip=rip+tmpi->ic_cnt-4; tmpie->next=tmpex->ie_lst; tmpex->ie_lst=tmpie; } @@ -308,7 +308,7 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) if (tmpex->type&HTF_UNRESOLVED) throw('Compiler'); else { - i=tmpex->val-(ip+tmpi->ic_cnt+5); + i=tmpex->val-(rip+tmpi->ic_cnt+5); if (!(MIN_I32<=i<=MAX_I32)) { throw('Compiler'); // ICU16(tmpi,0xBB48); @@ -321,7 +321,7 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) } } } else { - i=tmpex->val-(ip+tmpi->ic_cnt+5); + i=tmpex->val-(rip+tmpi->ic_cnt+5); if (!(MIN_I32<=i<=MAX_I32)) { ICU16(tmpi,0xBB48); ICU64(tmpi,tmpex->val); @@ -332,81 +332,81 @@ U0 ICFPow(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) } } tmpi->ic_flags&=~ICF_CODE_FINAL; - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) +U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 rip) {//for ADD,SUB,DIV,MUL - CICArg *a1,*a2; + CICArg *arg1,*arg2; Bool dont_push_float,dont_pop_float,alt; I64 rsp_size=0,builtin1=0,builtin2=0,t1,r1,d1,t2,r2,d2; if (tmpi->ic_flags&ICF_ALT_TEMPLATE) { - a1=&tmpi->a2; - a2=&tmpi->a1; + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; alt=TRUE; } else { - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; alt=FALSE; } if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_push_float) { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } } else { if (alt) { - if (!(a2->type&MDF_STK)) { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (!(arg2->type&MDF_STK)) { + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } } - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; if (r1==REG_RSP+REG_RSP<<8) @@ -414,45 +414,47 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) } } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } } else { - if (!(a1->type&MDF_STK)) { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (!(arg1->type&MDF_STK)) { + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) @@ -460,8 +462,10 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) } } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,a1->type,a1->reg,a1->disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -484,7 +488,7 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (builtin1) ICU16(tmpi,builtin1); else - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,rip); } if (alt) switch (op.u8[0]) { @@ -495,24 +499,24 @@ U0 ICFOp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) ICU16(tmpi,builtin2); ICU16(tmpi,op.u16[2]); } else - ICSlashOp(tmpi,t2,r2,d2,op,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + ICSlashOp(tmpi,t2,r2,d2,op,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); if (dont_pop_float) { if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); else if (rsp_size>8) { ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, - SLASH_OP_FSTP,ip); + SLASH_OP_FSTP,rip); ICAddRSP(tmpi,rsp_size-8); } - ICPop(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp,ip); + ICPop(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp,rip); } } -U0 ICFCmp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFCmp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); @@ -522,82 +526,82 @@ U0 ICFCmp(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) ICPopRegs(tmpi,1<a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } else ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); if (tmpi->ic_flags&ICF_POP_CMP) ICPopRegs(tmpi,1<a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } if (tmpi->ic_flags&ICF_PUSH_CMP) ICPushRegs(tmpi,1<r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFModEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip) +U0 ICFModEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (tmpi->ic_flags & ICF_BY_VAL) { if (dont_push_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); } //TODO: unpushable,unpop? Not sure - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,MDF_REG+RT_I64,REG_RAX,0,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to, - tmpi->a1.reg,tmpi->a1.disp,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_INST); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,MDF_REG+RT_I64,REG_RAX,0,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type&MDG_MASK+tmpi->arg1_type_pointed_to, + tmpi->arg1.reg,tmpi->arg1.disp,rip); } else { if (dont_push_float) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->a1.type, - tmpi->a1.reg,tmpi->a1.disp,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->arg1.type, + tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->a1.type, - tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,tmpi->arg1.type, + tmpi->arg1.reg,tmpi->arg1.disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); } //TODO: unpushable,unpop? Not sure - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_MAIN); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_MOD,FALSE,FALSE,FALSE,CN_INST); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } diff --git a/Compiler/BackFB.HC b/Compiler/BackFB.HC index 59cbff9..a8a6a9b 100644 --- a/Compiler/BackFB.HC +++ b/Compiler/BackFB.HC @@ -1,13 +1,13 @@ -U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) +U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 rip) {//for ADD,SUB,DIV,MUL - CICArg *a1=&tmpi->a1, - *a2=&tmpi->a2; + CICArg *arg1=&tmpi->arg1, + *arg2=&tmpi->arg2; Bool dont_push_float,dont_pop_float,p1_mem; I64 rsp_size=0,builtin2=0, t1,r1,d1,t2,r2,d2; if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_pop_float) @@ -16,63 +16,66 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (tmpi->ic_flags & ICF_BY_VAL) { p1_mem=FALSE; if (dont_push_float) { - if (tmpi->a1_type_pointed_to!=RT_F64) { + if (tmpi->arg1_type_pointed_to!=RT_F64) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg,a1->disp,ip); - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); - ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); + arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); + ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (tmpi->a1_type_pointed_to>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+tmpi->a1_type_pointed_to; - r1=a1->reg; - d1=a1->disp; + if (tmpi->arg1_type_pointed_to>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to; + r1=arg1->reg; + d1=arg1->disp; p1_mem=TRUE; } else { - ICPush(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to, - a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } } } else { - if (tmpi->a1_type_pointed_to!=RT_F64 || a1->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); + if (tmpi->arg1_type_pointed_to!=RT_F64 || arg1->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg,a1->disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } else { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } - if (tmpi->a1_type_pointed_to>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type&MDG_MASK+tmpi->a1_type_pointed_to; - r1=a1->reg; - d1=a1->disp; + if (tmpi->arg1_type_pointed_to>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to; + r1=arg1->reg; + d1=arg1->disp; p1_mem=TRUE; } else { - ICPush(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to, - a1->reg,a1->disp,ip); + ICPush(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) @@ -80,7 +83,7 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) } } } - if (!rsp_size && !(p1_mem && tmpi->a1_type_pointed_to==RT_F64)) { + if (!rsp_size && !(p1_mem && tmpi->arg1_type_pointed_to==RT_F64)) { rsp_size=8; ICAddRSP(tmpi,-8); } @@ -88,93 +91,97 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (builtin2) ICU16(tmpi,builtin2); else - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,rip); } switch (op.u8[0]) { case 4: op=SLASH_OP_FSUBR; break; case 6: op=SLASH_OP_FDIVR; break; } - ICSlashOp(tmpi,t1,r1,d1,op,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_MAIN); - if (p1_mem && tmpi->a1_type_pointed_to==RT_F64) { - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,t1,r1,d1,op,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_INST); + if (p1_mem && tmpi->arg1_type_pointed_to==RT_F64) { + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FSTP,rip); if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); else if (rsp_size>8) { ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, - SLASH_OP_FSTP,ip); + SLASH_OP_FSTP,rip); ICAddRSP(tmpi,rsp_size-8); } - if (tmpi->a1_type_pointed_to!=RT_F64) { - ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg, - a1->disp,MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->arg1_type_pointed_to!=RT_F64) { + ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to,arg1->reg, + arg1->disp,MDF_REG+RT_I64,REG_RAX,0,rip); } else - ICPop(tmpi,a1->type&MDG_MASK+tmpi->a1_type_pointed_to, - a1->reg,a1->disp,ip); + ICPop(tmpi,arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - a1->type&MDG_MASK+tmpi->a1_type_pointed_to,a1->reg,a1->disp,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + arg1->type&MDG_MASK+tmpi->arg1_type_pointed_to, + arg1->reg,arg1->disp,rip); } else { - if (tmpi->a1_type_pointed_to>=RT_I64) + if (tmpi->arg1_type_pointed_to>=RT_I64) p1_mem=TRUE; else p1_mem=FALSE; if (dont_push_float) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type,arg1->reg,arg1->disp,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,ip); - ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,FALSE,rip); + ICPush(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); } else - ICPush(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + ICPush(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (tmpi->a1_type_pointed_to!=RT_F64 || a1->type&MDF_STK) { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); + if (tmpi->arg1_type_pointed_to!=RT_F64 || arg1->type&MDF_STK) { + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type, + arg1->reg,arg1->disp,rip); ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,ip); + MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RDX,MDF_REG+RT_I64,REG_RDX,0,FALSE,rip); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } else { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64)))) { + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64)))) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } } - ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,a1->type,a1->reg,a1->disp,ip); - ICPush(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0,arg1->type, + arg1->reg,arg1->disp,rip); + ICPush(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0,rip); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) d2+=8; } } - if (!rsp_size && !(p1_mem && tmpi->a1_type_pointed_to==RT_F64)) { + if (!rsp_size && !(p1_mem && tmpi->arg1_type_pointed_to==RT_F64)) { rsp_size=8; ICAddRSP(tmpi,-8); } @@ -182,61 +189,61 @@ U0 ICFOpEqu(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,U8 *buf2,I64 ip) if (builtin2) ICU16(tmpi,builtin2); else - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,ip); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,rip); } switch (op.u8[0]) { case 4: op=SLASH_OP_FSUBR; break; case 6: op=SLASH_OP_FDIVR; break; } - ICSlashOp(tmpi,t1,r1,d1,op,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_MAIN); - if (p1_mem && tmpi->a1_type_pointed_to==RT_F64) { - ICSlashOp(tmpi,MDF_DISP+tmpi->a1_type_pointed_to, - REG_RCX,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,t1,r1,d1,op,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_INST); + if (p1_mem && tmpi->arg1_type_pointed_to==RT_F64) { + ICSlashOp(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to, + REG_RCX,0,SLASH_OP_FSTP,rip); if (rsp_size) ICAddRSP(tmpi,rsp_size); } else { if (rsp_size==8) - ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,ip); + ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,0,SLASH_OP_FSTP,rip); else if (rsp_size>8) { ICSlashOp(tmpi,MDF_SIB+RT_I64,REG_RSP+REG_RSP<<8,rsp_size-8, - SLASH_OP_FSTP,ip); + SLASH_OP_FSTP,rip); ICAddRSP(tmpi,rsp_size-8); } - ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip); - if (tmpi->a1_type_pointed_to!=RT_F64) - ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,ip); - ICMov(tmpi,MDF_DISP+tmpi->a1_type_pointed_to,REG_RCX,0, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip); + if (tmpi->arg1_type_pointed_to!=RT_F64) + ICFCvt2(cc,tmpi,REG_RAX,MDF_REG+RT_I64,REG_RAX,0,TRUE,rip); + ICMov(tmpi,MDF_DISP+tmpi->arg1_type_pointed_to,REG_RCX,0, + MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } } -U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, - I64 us,I64 not_us,U8 *buf,I64 ip2) +U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 rip, + I64 us,I64 not_us,U8 *buf,I64 rip2) { - CICArg *a1,*a2; + CICArg *arg1,*arg2; Bool dont_push_float,dont_pop_float,alt,short_jmp; I64 i,rsp_size=0,builtin1=0,builtin2=0,t1,r1,d1,t2,r2,d2; CCodeMisc *lb; U8 *buf2; if (tmpi->ic_flags&ICF_ALT_TEMPLATE) { - a1=&tmpi->a2; - a2=&tmpi->a1; + arg1=&tmpi->arg2; + arg2=&tmpi->arg1; alt=TRUE; } else { - a1=&tmpi->a1; - a2=&tmpi->a2; + arg1=&tmpi->arg1; + arg2=&tmpi->arg2; alt=FALSE; } if (cc->flags&CCF_AOT_COMPILE) - buf2=cc->aotc->ip; + buf2=cc->aotc->rip; else buf2=buf; @@ -246,20 +253,20 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } else { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64))) || + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64))) || tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip2); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } @@ -267,43 +274,43 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } else { if (alt) { - if (!(a2->type&MDF_STK)) { + if (!(arg2->type&MDF_STK)) { if (tmpi->ic_flags&ICF_POP_CMP) { t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } else { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip2); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip2); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; } } } - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64))) || + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64))) || tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip2); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; if (r1==REG_RSP+REG_RSP<<8) @@ -314,29 +321,31 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (tmpi->ic_flags&ICF_POP_CMP) ICPopRegs(tmpi,1<type,a1->reg,a1->disp,ip2); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; } } else { - if (!(a1->type&MDF_STK)) { - if (a2->type.raw_type>=RT_I64 && a2->type&MDG_DISP_SIB_RIP) { - t2=a2->type; - r2=a2->reg; - d2=a2->disp; + if (!(arg1->type&MDF_STK)) { + if (arg2->type.raw_type>=RT_I64 && arg2->type&MDG_DISP_SIB_RIP) { + t2=arg2->type; + r2=arg2->reg; + d2=arg2->disp; } else { - if (a2->type&MDF_IMM) { - if (!(builtin2=ICBuiltInFloatConst(a2->disp(F64))) || + if (arg2->type&MDF_IMM) { + if (!(builtin2=ICBuiltInFloatConst(arg2->disp(F64))) || tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_RIP_DISP32+RT_I64; r2=REG_RIP; - d2=COCFloatConstFind(cc,a2->disp(F64))+buf2; + d2=COCFloatConstFind(cc,arg2->disp(F64))+buf2; } } else { - ICPush(tmpi,a2->type,a2->reg,a2->disp,ip2); + ICPush(tmpi,arg2->type,arg2->reg,arg2->disp,rip2); t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; rsp_size+=8; } @@ -347,19 +356,19 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (r2==REG_RSP+REG_RSP<<8) d1+=8; } else { - if (a1->type.raw_type>=RT_I64 && a1->type&MDG_DISP_SIB_RIP) { - t1=a1->type; - r1=a1->reg; - d1=a1->disp; + if (arg1->type.raw_type>=RT_I64 && arg1->type&MDG_DISP_SIB_RIP) { + t1=arg1->type; + r1=arg1->reg; + d1=arg1->disp; } else { - if (a1->type&MDF_IMM) { - if (!(builtin1=ICBuiltInFloatConst(a1->disp(F64)))) { + if (arg1->type&MDF_IMM) { + if (!(builtin1=ICBuiltInFloatConst(arg1->disp(F64)))) { t1=MDF_RIP_DISP32+RT_I64; r1=REG_RIP; - d1=COCFloatConstFind(cc,a1->disp(F64))+buf2; + d1=COCFloatConstFind(cc,arg1->disp(F64))+buf2; } } else { - ICPush(tmpi,a1->type,a1->reg,a1->disp,ip2); + ICPush(tmpi,arg1->type,arg1->reg,arg1->disp,rip2); t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=0; rsp_size+=8; if (r2==REG_RSP+REG_RSP<<8) @@ -368,11 +377,13 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,a2->type,a2->reg,a2->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,arg2->type, + arg2->reg,arg2->disp,rip2); if (tmpi->ic_flags&ICF_POP_CMP) ICPopRegs(tmpi,1<type,a1->reg,a1->disp,ip2); + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,arg1->type, + arg1->reg,arg1->disp,rip2); ICU16(tmpi,0x5052); //PUSH EDX PUSH EAX rsp_size=16; t1=MDF_SIB+RT_I64; r1=REG_RSP+REG_RSP<<8; d1=8; @@ -384,14 +395,14 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (builtin1) ICU16(tmpi,builtin1); else - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,ip2); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_FLD,rip2); } if (!alt) us=not_us; if (builtin2) ICU16(tmpi,builtin2); else - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,ip2); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FLD,rip2); if (tmpi->ic_flags&ICF_PUSH_CMP) { t2=MDF_SIB+RT_I64; r2=REG_RSP+REG_RSP<<8; d2=0; if (!rsp_size) { @@ -402,17 +413,17 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (alt) { ICU16(tmpi,0xF1DF); //FCOMIP - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,ip2); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,rip2); } else { ICU16(tmpi,0xF1DB); //FCOMI - ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,ip2); + ICSlashOp(tmpi,t2,r2,d2,SLASH_OP_FSTP,rip2); ICU32(tmpi,0xF7D9C0DD); //FFREE,FINCSTP } } else { ICU16(tmpi,0xF1DF); //FCOMIP ICU32(tmpi,0xF7D9C0DD); //FFREE,FINCSTP } - CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_MAIN); + CmpNoteFloatOp(cc,tmpi,TRUE,FALSE,CN_INST); if (tmpi->ic_flags&ICF_PUSH_CMP) { if (r2.u8[0]==REG_RSP) { @@ -426,7 +437,7 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, ICU8(tmpi,0x5B); //POP RBX (Dont change flags) rsp_size-=8; } - ICPush(tmpi,t2,r2,d2,ip2); + ICPush(tmpi,t2,r2,d2,rip2); } } else { while (rsp_size) { @@ -435,11 +446,11 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } - ip+=tmpi->ic_cnt; + rip+=tmpi->ic_cnt; lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR) { - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -452,7 +463,7 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, if (short_jmp) { tmpi->ic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -462,7 +473,7 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, ICU16(tmpi,i<<8+us.u8[2]); } else { tmpi->ic_flags&=~ICF_SHORT_JMP; - i=lb->addr-(ip+6); + i=lb->addr-(rip+6); if (lb->flags&CMF_POP_CMP) { if(tmpi->ic_flags&ICF_PUSH_CMP) i+=4; @@ -474,147 +485,147 @@ U0 ICFCmpAndBranch(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 ip, } } -U0 ICFMul(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFMul(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { - if (tmpi->a1.type&MDF_IMM && tmpi->a1.type&RTG_MASK==RT_F64 && - tmpi->a1.disp(F64)==1.0) { - CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - } else if (tmpi->a2.type&MDF_IMM && - tmpi->a2.type&RTG_MASK==RT_F64&& tmpi->a2.disp(F64)==1.0) { - CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + if (tmpi->arg1.type&MDF_IMM && tmpi->arg1.type&RTG_MASK==RT_F64 && + tmpi->arg1.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + } else if (tmpi->arg2.type&MDF_IMM && + tmpi->arg2.type&RTG_MASK==RT_F64&& tmpi->arg2.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } else - ICFOp(cc,tmpi,SLASH_OP_FMUL,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FMUL,buf,rip); } -U0 ICFDiv(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFDiv(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { - if (tmpi->a2.type&MDF_IMM && tmpi->a2.type&RTG_MASK==RT_F64 && - tmpi->a2.disp(F64)==1.0) { - CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + if (tmpi->arg2.type&MDF_IMM && tmpi->arg2.type&RTG_MASK==RT_F64 && + tmpi->arg2.disp(F64)==1.0) { + CmpNoteFloatOp(cc,tmpi,FALSE,FALSE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); } else - ICFOp(cc,tmpi,SLASH_OP_FDIV,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FDIV,buf,rip); } -U0 ICFAdd(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFAdd(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); - if (tmpi->a1.type&MDF_IMM && !tmpi->a1.disp) { + if (tmpi->arg1.type&MDF_IMM && !tmpi->arg1.disp) { if (dont_push_float) { - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else if (dont_pop_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_INST); } else { - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip); } - } else if (tmpi->a2.type&MDF_IMM && !tmpi->a2.disp) { + } else if (tmpi->arg2.type&MDF_IMM && !tmpi->arg2.disp) { if (dont_push_float) { - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else if (dont_pop_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_INST); } else { - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); } } else - ICFOp(cc,tmpi,SLASH_OP_FADD,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FADD,buf,rip); } -U0 ICFSub(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 ip) +U0 ICFSub(CCmpCtrl *cc,CIntermediateCode *tmpi,U8 *buf,I64 rip) { Bool dont_push_float,dont_pop_float; - if (tmpi->a2.type&MDF_IMM && !tmpi->a2.disp) { + if (tmpi->arg2.type&MDF_IMM && !tmpi->arg2.disp) { CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (dont_push_float) { - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FSTP,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else if (dont_pop_float) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_MAIN); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_FLD,FALSE,TRUE,TRUE,CN_INST); } else { - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_MAIN); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + CmpNoteFloatOp(cc,tmpi,TRUE,TRUE,CN_INST); } } else - ICFOp(cc,tmpi,SLASH_OP_FSUB,buf,ip); + ICFOp(cc,tmpi,SLASH_OP_FSUB,buf,rip); } -U0 ICFPreIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFPreIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } -U0 ICFPostIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFPostIncDec(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { if (tmpi->ic_flags & ICF_BY_VAL) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type&MDG_MASK+RT_I64,tmpi->a1.reg,tmpi->a1.disp,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type&MDG_MASK+RT_I64,tmpi->arg1.reg,tmpi->arg1.disp,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,ip); - if (tmpi->r.type.mode) - ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,ip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0,MDF_DISP+RT_I64,REG_RCX,0,rip); + if (tmpi->res.type.mode) + ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0,MDF_REG+RT_I64,REG_RAX,0,rip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + ICMov(tmpi,MDF_DISP+RT_I64,REG_RCX,0,MDF_REG+RT_I64,REG_RAX,0,rip); } - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RDX,0,ip); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RDX,0,rip); } -U0 ICFTemplateFun(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 ip) +U0 ICFTemplateFun(CCmpCtrl *cc,CIntermediateCode *tmpi,I64 op,I64 rip) { Bool dont_push_float,dont_pop_float; CmpSetFloatOpPushPop(cc,tmpi,&dont_push_float,&dont_pop_float); if (!dont_push_float) ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); - ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_MAIN); - if (tmpi->r.type.mode && !(tmpi->ic_flags & ICF_R_TO_F64) && - !(tmpi->ic_flags & ICF_R_TO_INT)) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip); + ICCopyTemplate(cc,tmpi,op,FALSE,TRUE,TRUE,CN_INST); + if (tmpi->res.type.mode && !(tmpi->ic_flags & ICF_RES_TO_F64) && + !(tmpi->ic_flags & ICF_RES_TO_INT)) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip); } diff --git a/Compiler/BackLib.HC b/Compiler/BackLib.HC index 8d22415..5765c77 100644 --- a/Compiler/BackLib.HC +++ b/Compiler/BackLib.HC @@ -121,7 +121,7 @@ U0 ICAddRSP(CIntermediateCode *tmpi,I64 i,Bool optimize=TRUE) } extern U0 ICMov(CIntermediateCode *tmpi, - CICType t1,I64 r1,I64 d1,CICType t2,I64 r2,I64 d2,I64 ip); + CICType t1,I64 r1,I64 d1,CICType t2,I64 r2,I64 d2,I64 rip); #define MODR_REG 0 #define MODR_INDIRECT_REG 1 @@ -131,6 +131,7 @@ extern U0 ICMov(CIntermediateCode *tmpi, #define MODR_SIB_D8_INDIRECT_REG 5 #define MODR_SIB_D32_INDIRECT_REG 6 #define MODR_RIP_REL 7 +#define MODR_RIP_REL_IMM_U32 8 I64 ICModr1(I64 r,CICType t2,I64 r2,I64 d2) {//res.u8[0] is type @@ -210,8 +211,8 @@ I64 ICModr1(I64 r,CICType t2,I64 r2,I64 d2) return res; } -U0 ICModr2(CIntermediateCode *tmpi,I64 i,I64 d,I64 ip=0) -{//t=0 means no SIB +U0 ICModr2(CIntermediateCode *tmpi,I64 i,CICType t=0,I64 d,I64 rip=0) +{ switch [i.u8[0]] { case MODR_REG: break; @@ -234,42 +235,58 @@ U0 ICModr2(CIntermediateCode *tmpi,I64 i,I64 d,I64 ip=0) ICU8(tmpi,i.u8[3]); ICU32(tmpi,d); break; + case MODR_RIP_REL_IMM_U32: + switch (t.raw_type) { + case RT_I8: + case RT_U8: + d--; + break; + case RT_I16: + case RT_U16: + d-=2; + break; + default: + d-=4; + } case MODR_RIP_REL: - ICU32(tmpi,d-(ip+tmpi->ic_cnt)); + ICU32(tmpi,d-(rip+4+tmpi->ic_cnt)); tmpi->ic_flags&=~ICF_CODE_FINAL; break; } } -#define SLASH_OP_INC 0x0003000000FFFE00 -#define SLASH_OP_DEC 0x052B000000FFFE01 -#define SLASH_OP_NOT 0x0000000000F7F602 -#define SLASH_OP_NEG 0x0000000000F7F603 -#define SLASH_OP_MUL 0x0000000000F7F604 -#define SLASH_OP_IMUL 0x0000000000F7F605 -#define SLASH_OP_DIV 0x0000000000F7F606 -#define SLASH_OP_MOV 0x0000000000898800 -#define SLASH_OP_PUSH 0x0000000000FFFF06 -#define SLASH_OP_POP 0x00000000008F8F00 -#define SLASH_OP_FADD 0x0000C1DE01DCDC00 -#define SLASH_OP_FSUB 0x0000E9DE01DCDC04 -#define SLASH_OP_FSUBR 0x0000E1DE01DCDC05 -#define SLASH_OP_FMUL 0x0000C9DE01DCDC01 -#define SLASH_OP_FDIV 0x0000F9DE01DCDC06 -#define SLASH_OP_FDIVR 0x0000F1DE01DCDC07 -#define SLASH_OP_FLD 0x0000000001DDDD00 -#define SLASH_OP_FSTP 0x0000000001DDDD03 -#define SLASH_OP_FISTTP 0x0000000001DDDD01 -#define SLASH_OP_FILD 0x0000000001DFDF05 +#define SLASH_OP_INC 0x0003000000FFFE00 +#define SLASH_OP_DEC 0x052B000000FFFE01 +#define SLASH_OP_NOT 0x0000000000F7F602 +#define SLASH_OP_NEG 0x0000000000F7F603 +#define SLASH_OP_IMM_U8 0x0000000000838000 +#define SLASH_OP_IMM_U32 0x0000000000818300 +#define SLASH_OP_MUL 0x0000000000F7F604 +#define SLASH_OP_IMUL 0x0000000000F7F605 +#define SLASH_OP_DIV 0x0000000000F7F606 +#define SLASH_OP_MOV 0x0000000000898800 +#define SLASH_OP_MOV_IMM 0x0000000000C7C600 +#define SLASH_OP_PUSH 0x0000000000FFFF06 +#define SLASH_OP_POP 0x00000000008F8F00 +#define SLASH_OP_FADD 0x0000C1DE01DCDC00 +#define SLASH_OP_FSUB 0x0000E9DE01DCDC04 +#define SLASH_OP_FSUBR 0x0000E1DE01DCDC05 +#define SLASH_OP_FMUL 0x0000C9DE01DCDC01 +#define SLASH_OP_FDIV 0x0000F9DE01DCDC06 +#define SLASH_OP_FDIVR 0x0000F1DE01DCDC07 +#define SLASH_OP_FLD 0x0000000001DDDD00 +#define SLASH_OP_FSTP 0x0000000001DDDD03 +#define SLASH_OP_FISTTP 0x0000000001DDDD01 +#define SLASH_OP_FILD 0x0000000001DFDF05 -U0 ICSlashOp(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 op,I64 ip) +U0 ICSlashOp(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 op,I64 rip) { I64 i; if (t1&MDF_REG && !op.u8[3]) t1=t1&(MDG_MASK|RTF_UNSIGNED)+RT_I64; //Set to 64 bit,preserving unsigned i=ICModr1(op.u8[0],t1,r1,d1); - - if (tmpi->ic_flags&ICF_LOCK && op!=SLASH_OP_MOV && !(t1&MDF_REG)) + if (tmpi->ic_flags&ICF_LOCK && !(t1&MDF_REG) && + op&~7!=SLASH_OP_MOV && op!=SLASH_OP_MOV_IMM) ICU8(tmpi,OC_LOCK_PREFIX); switch (t1.raw_type) { case RT_I8: @@ -287,10 +304,12 @@ U0 ICSlashOp(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 op,I64 ip) ICRex(tmpi,i.u8[1]); ICU16(tmpi,i.u8[2]<<8+op.u8[2]); } - ICModr2(tmpi,i,d1,ip+4); + if (i.u8[0]==MODR_RIP_REL&& (op==SLASH_OP_MOV_IMM || op&~7==SLASH_OP_IMM_U32)) + i.u8[0]=MODR_RIP_REL_IMM_U32; + ICModr2(tmpi,i,t1,d1,rip); } -U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) +U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 rip) { switch (Bsr(t1)) { case MDf_REG: @@ -306,7 +325,7 @@ U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) ICU8(tmpi,0x68); ICU32(tmpi,d1); } else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,rip); ICU8(tmpi,0x50+REG_RBX); } return; @@ -319,12 +338,12 @@ U0 ICPush(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) case RT_I64: case RT_U64: case RT_F64: - ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_PUSH,ip); + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_PUSH,rip); return; } break; } - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t1,r1,d1,rip); ICU16(tmpi,0x5048+REG_RBX<<8); } @@ -341,7 +360,7 @@ U0 ICPushRegs(CIntermediateCode *tmpi,I64 mask) } } -U0 ICPop(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) +U0 ICPop(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 rip) { switch (Bsr(t1)) { case MDf_REG: @@ -355,14 +374,14 @@ U0 ICPop(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1,I64 ip) case MDf_SIB: if (t1.raw_typeic_cnt; @@ -485,7 +504,7 @@ U0 ICMov(CIntermediateCode *tmpi, ICU64(tmpi,d2); } } else if (t2&MDF_STK) - ICPop(tmpi,t1,r1,d1,ip); + ICPop(tmpi,t1,r1,d1,rip); else { if (r1==r2 && t2&MDF_REG) goto move_done; @@ -515,16 +534,16 @@ U0 ICMov(CIntermediateCode *tmpi, default: ICU16(tmpi,i.u8[2]<<8+0x8B); } - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); } break; case MDf_STK: if (tmpi->ic_flags&ICF_PUSH_CMP) ICPopRegs(tmpi,1<ic_flags&ICF_PUSH_CMP) ICPushRegs(tmpi,1<ic_cnt+4); - switch (t1.raw_type) { - case RT_I8: - case RT_U8: - i--; - break; - case RT_I16: - case RT_U16: - i-=2; - break; - default: - i-=4; - } - ICU32(tmpi,i); - tmpi->ic_flags&=~ICF_CODE_FINAL; - } - + ICSlashOp(tmpi,t1,r1,d1,SLASH_OP_MOV_IMM,rip); switch (t1.raw_type) { case RT_I8: case RT_U8: @@ -582,10 +566,10 @@ U0 ICMov(CIntermediateCode *tmpi, } } else { if (t2&MDF_REG) - ICSlashOp(tmpi,t1,r1,d1,r2+SLASH_OP_MOV,ip); + ICSlashOp(tmpi,t1,r1,d1,r2+SLASH_OP_MOV,rip); else { - ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t2,r2,d2,ip); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RBX,0,ip); + ICMov(tmpi,MDF_REG+RT_I64,REG_RBX,0,t2,r2,d2,rip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RBX,0,rip); } } break; @@ -675,7 +659,7 @@ move_redundant: } U0 ICLea(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, - CICType t2,I64 r2,I64 d2,CCmpCtrl *cc,U8 *buf,I64 ip) + CICType t2,I64 r2,I64 d2,CCmpCtrl *cc,U8 *buf,I64 rip) { I64 i; CAOTAbsAddr *tmpa; @@ -684,7 +668,7 @@ U0 ICLea(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, i=ICModr1(r1,t2,r2,d2); i.u8[1]|=0x48; ICU24(tmpi,i.u8[2]<<16+0x8D00+i.u8[1]); - ICModr2(tmpi,i,d2,ip+4); + ICModr2(tmpi,i,,d2,rip); break; case MDf_STK: if (t2&MDF_RIP_DISP32) { @@ -695,30 +679,30 @@ U0 ICLea(CIntermediateCode *tmpi,CICType t1,I64 r1,I64 d1, tmpa->next=cc->aotc->abss; tmpa->type=AAT_ADD_U32; cc->aotc->abss=tmpa; - tmpa->ip=ip+tmpi->ic_cnt-4; + tmpa->rip=rip+tmpi->ic_cnt-4; } tmpi->ic_flags&=~ICF_CODE_FINAL; break; } // Fall thru default: - ICLea(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,cc,buf,ip); - ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RCX,0,ip); + ICLea(tmpi,MDF_REG+RT_I64,REG_RCX,0,t2,r2,d2,cc,buf,rip); + ICMov(tmpi,t1,r1,d1,MDF_REG+RT_I64,REG_RCX,0,rip); } } -U0 ICDeref(CIntermediateCode *tmpi,I64 ip) +U0 ICDeref(CIntermediateCode *tmpi,I64 rip) { CICType t; - t=tmpi->r.type.raw_type; - if (t>tmpi->a1_type_pointed_to) - t=tmpi->a1_type_pointed_to; - if (tmpi->a1.type&MDF_REG) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,tmpi->a1.reg,tmpi->a1.disp,ip); + t=tmpi->res.type.raw_type; + if (t>tmpi->arg1_type_pointed_to) + t=tmpi->arg1_type_pointed_to; + if (tmpi->arg1.type&MDF_REG) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,tmpi->arg1.reg,tmpi->arg1.disp,rip); else { ICMov(tmpi,MDF_REG+RT_I64,REG_RCX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_DISP+t,REG_RCX,0,ip); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_DISP+t,REG_RCX,0,rip); } } diff --git a/Compiler/CExcept.HC b/Compiler/CExcept.HC index 6d1c14d..20b7e6c 100644 --- a/Compiler/CExcept.HC +++ b/Compiler/CExcept.HC @@ -11,7 +11,7 @@ U0 LexPutToken(CCmpCtrl *cc) "FLOAT:%e",cc->cur_f64; else if (cc->token=='\n') ""; - else if (Bt(chars_bmp_displayable,cc->token)) + else if (Bt(char_bmp_displayable,cc->token)) '' cc->token; else { "T:%X",cc->token; @@ -187,38 +187,38 @@ U0 ICPut(CCmpCtrl *cc,CIntermediateCode *tmpi) if (opcode>=IC_END_EXP && opcode!=IC_NOP2) { "%15ts %016X ",intermediate_code_table[opcode].name,tmpi->ic_data; if (cc->pass) { - if (tmpi->r.type.mode) { - "$$PURPLE$$R:$$FG$$"; - ICArgPut(&tmpi->r,0); + if (tmpi->res.type.mode) { + "$$PURPLE$$RES:$$FG$$"; + ICArgPut(&tmpi->res,0); } - if (tmpi->a1.type.mode) { - "$$PURPLE$$A1:$$FG$$"; + if (tmpi->arg1.type.mode) { + "$$PURPLE$$ARG1:$$FG$$"; if (intermediate_code_table[tmpi->ic_code].type==IST_DEREF || intermediate_code_table[tmpi->ic_code].type==IST_ASSIGN) - ICArgPut(&tmpi->a1,tmpi->a1_type_pointed_to); + ICArgPut(&tmpi->arg1,tmpi->arg1_type_pointed_to); else - ICArgPut(&tmpi->a1,0); + ICArgPut(&tmpi->arg1,0); } - if (tmpi->a2.type.mode) { - "$$PURPLE$$A2:$$FG$$"; - ICArgPut(&tmpi->a2,0); + if (tmpi->arg2.type.mode) { + "$$PURPLE$$ARG2:$$FG$$"; + ICArgPut(&tmpi->arg2,0); } "$$PURPLE$$:$$FG$$"; } ICClassPut(tmpi->ic_class); if (tmpi->ic_flags & ICF_LOCK) "$$BROWN$$lock$$FG$$ "; - if (tmpi->ic_flags & ICF_A2_TO_F64) + if (tmpi->ic_flags & ICF_ARG2_TO_F64) "$$LTBLUE$$a2d$$FG$$ "; - if (tmpi->ic_flags & ICF_A2_TO_INT) + if (tmpi->ic_flags & ICF_ARG2_TO_INT) "$$GREEN$$a2i$$FG$$ "; - if (tmpi->ic_flags & ICF_A1_TO_F64) + if (tmpi->ic_flags & ICF_ARG1_TO_F64) "$$LTBLUE$$a1d$$FG$$ "; - if (tmpi->ic_flags & ICF_A1_TO_INT) + if (tmpi->ic_flags & ICF_ARG1_TO_INT) "$$GREEN$$a1i$$FG$$ "; - if (tmpi->ic_flags & ICF_R_TO_F64) + if (tmpi->ic_flags & ICF_RES_TO_F64) "$$LTBLUE$$rd$$FG$$ "; - if (tmpi->ic_flags & ICF_R_TO_INT) + if (tmpi->ic_flags & ICF_RES_TO_INT) "$$GREEN$$ri$$FG$$ "; if (tmpi->ic_flags & ICF_USE_F64) "[F64] "; diff --git a/Compiler/CExts.HC b/Compiler/CExts.HC index 7322bc5..13d2781 100644 --- a/Compiler/CExts.HC +++ b/Compiler/CExts.HC @@ -38,7 +38,7 @@ extern I64 PrsUnaryTerm( CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var,CArrayDim **_tmpad, I64 *max_prec,I64 *unary_pre_prec,I64 *paren_prec); extern U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc, - CArrayDim *tmpad,U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass); + CArrayDim *tmpad,U8 *data_addr_rip,U8 **_base,Bool data_heap,I64 pass); _extern CMP_TEMPLATES U32 cmp_templates[1]; _extern CMP_TEMPLATES_DONT_POP U32 cmp_templates_dont_pop[1]; _extern CMP_TEMPLATES_DONT_PUSH2 U32 cmp_templates_dont_push2[1]; diff --git a/Compiler/CHash.HC b/Compiler/CHash.HC index d4dde42..7c2ae81 100644 --- a/Compiler/CHash.HC +++ b/Compiler/CHash.HC @@ -21,7 +21,7 @@ I64 HashEntrySize(CHashSrcSym *tmph) if (StrCmp(tmph->str,KERNEL_MODULE_NAME)) return MSize(tmph(CHashGeneric *)->user_data0); else { - bfh=sys_boot_base-sizeof(CBinFile); + bfh=mem_boot_base-sizeof(CBinFile); return bfh->file_size; } case HTt_WORD: diff --git a/Compiler/CMain.HC b/Compiler/CMain.HC index f05fe24..9b9b680 100644 --- a/Compiler/CMain.HC +++ b/Compiler/CMain.HC @@ -14,7 +14,7 @@ U8 *LexStmt2Bin(CCmpCtrl *cc,I64 *_type,I64 cmp_flags=0) ICAdd(cc,IC_RET,0,0); if (res=COCCompile(cc,&size,NULL,_type)) { if (cc->flags&CCF_AOT_COMPILE) { - j=cc->aotc->ip; + j=cc->aotc->rip; k=(size+7)>>3; for (i=0;itype=IET_MAIN; - tmpie->ip=buf; + tmpie->rip=buf; QueIns(tmpie,res->last_ie); } if (cmp_flags&CMPF_ASM_BLK) @@ -173,7 +173,7 @@ CAOT *CmpBuf(U8 *buf,U8 *map_name=NULL, U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) { - I64 i,ip2=tmpaot->buf+tmpaot->ip,*str=NULL; + I64 i,rip2=tmpaot->buf+tmpaot->rip,*str=NULL; U8 *ptr; CCodeMisc *g_lb; CAOTAbsAddr *tmpa,*tmpa1; @@ -183,16 +183,16 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) tmpa=tmpaot->abss; while (tmpa) { tmpa1=tmpa->next; - ptr=ip2+tmpa->ip; + ptr=rip2+tmpa->rip; switch [tmpa->type] { - case AAT_ADD_U8: *ptr(U8 *) +=ip2; break; - case AAT_SUB_U8: *ptr(U8 *) -=ip2; break; - case AAT_ADD_U16: *ptr(U16 *)+=ip2; break; - case AAT_SUB_U16: *ptr(U16 *)-=ip2; break; - case AAT_ADD_U32: *ptr(U32 *)+=ip2; break; - case AAT_SUB_U32: *ptr(U32 *)-=ip2; break; - case AAT_ADD_U64: *ptr(I64 *)+=ip2; break; - case AAT_SUB_U64: *ptr(I64 *)-=ip2; break; + case AAT_ADD_U8: *ptr(U8 *) +=rip2; break; + case AAT_SUB_U8: *ptr(U8 *) -=rip2; break; + case AAT_ADD_U16: *ptr(U16 *)+=rip2; break; + case AAT_SUB_U16: *ptr(U16 *)-=rip2; break; + case AAT_ADD_U32: *ptr(U32 *)+=rip2; break; + case AAT_SUB_U32: *ptr(U32 *)-=rip2; break; + case AAT_ADD_U64: *ptr(I64 *)+=rip2; break; + case AAT_SUB_U64: *ptr(I64 *)-=rip2; break; } Free(tmpa); tmpa=tmpa1; @@ -214,9 +214,9 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) str=NULL; tmpex->type=HTT_EXPORT_SYS_SYM|HTF_IMM; if (tmpie->type==IET_IMM32_EXPORT||tmpie->type==IET_IMM64_EXPORT) - tmpex->val=tmpie->ip; + tmpex->val=tmpie->rip; else - tmpex->val=tmpie->ip+ip2; + tmpex->val=tmpie->rip+rip2; tmpex->src_link=tmpie->src_link; tmpie->src_link=NULL; HashAdd(tmpex,Fs->hash_table); @@ -249,7 +249,7 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) } } if (tmpex || g_lb) { - ptr=tmpie->ip+ip2; + ptr=tmpie->rip+rip2; switch [tmpie->type] { case IET_REL_I0: case IET_IMM_U0: @@ -294,7 +294,7 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) } Free(str); if (!cc->aot_depth && Bt(&cc->opts,OPTf_TRACE)) - Un(ip2,tmpaot->aot_U8s,64); + Un(rip2,tmpaot->aot_U8s,64); QueRem(tmpaot); Free(tmpaot); } @@ -302,7 +302,7 @@ U0 CmpFixUpJITAsm(CCmpCtrl *cc,CAOT *tmpaot) U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) { CAOTCtrl *aotc=cc->aotc; - I64 i,ip2=tmpaot->ip+cc->aotc->ip; + I64 i,rip2=tmpaot->rip+cc->aotc->rip; U8 *ptr; CCodeMisc *g_lb=NULL; CAOTAbsAddr *tmpa,*tmpa1; @@ -312,19 +312,19 @@ U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) while (tmpa) { tmpa1=tmpa->next; tmpa->next=aotc->abss; - ptr=tmpaot->buf+tmpaot->ip+tmpa->ip; + ptr=tmpaot->buf+tmpaot->rip+tmpa->rip; switch [tmpa->type] { - case AAT_ADD_U8: *ptr(U8 *)+=ip2; break; - case AAT_SUB_U8: *ptr(U8 *)-=ip2; break; - case AAT_ADD_U16: *ptr(U16 *)+=ip2; break; - case AAT_SUB_U16: *ptr(U16 *)-=ip2; break; - case AAT_ADD_U32: *ptr(U32 *)+=ip2; break; - case AAT_SUB_U32: *ptr(U32 *)-=ip2; break; - case AAT_ADD_U64: *ptr(I64 *)+=ip2; break; - case AAT_SUB_U64: *ptr(I64 *)-=ip2; break; + case AAT_ADD_U8: *ptr(U8 *)+=rip2; break; + case AAT_SUB_U8: *ptr(U8 *)-=rip2; break; + case AAT_ADD_U16: *ptr(U16 *)+=rip2; break; + case AAT_SUB_U16: *ptr(U16 *)-=rip2; break; + case AAT_ADD_U32: *ptr(U32 *)+=rip2; break; + case AAT_SUB_U32: *ptr(U32 *)-=rip2; break; + case AAT_ADD_U64: *ptr(I64 *)+=rip2; break; + case AAT_SUB_U64: *ptr(I64 *)-=rip2; break; } aotc->abss=tmpa; - tmpa->ip+=ip2; + tmpa->rip+=rip2; tmpa=tmpa1; } @@ -347,7 +347,7 @@ U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) } else g_lb=NULL; - ptr=tmpaot->buf+tmpaot->ip+tmpie->ip; + ptr=tmpaot->buf+tmpaot->rip+tmpie->rip; if (g_lb) { i=g_lb->addr+tmpaot->buf; switch [tmpie->type] { @@ -401,12 +401,12 @@ U0 CmpFixUpAOTAsm(CCmpCtrl *cc,CAOT *tmpaot) case IET_IMM_I64: case IET_REL_I0: break; - case IET_REL_I8: *ptr(U8 *) -=ip2; break; - case IET_REL_I16: *ptr(U16 *)-=ip2; break; - case IET_REL_I32: *ptr(U32 *)-=ip2; break; - case IET_REL_I64: *ptr(I64 *)-=ip2; break; + case IET_REL_I8: *ptr(U8 *) -=rip2; break; + case IET_REL_I16: *ptr(U16 *)-=rip2; break; + case IET_REL_I32: *ptr(U32 *)-=rip2; break; + case IET_REL_I64: *ptr(I64 *)-=rip2; break; end: - tmpie->ip+=ip2; + tmpie->rip+=rip2; break; } tmpie->aot=NULL; @@ -452,7 +452,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) while (tmpa) { tmpa1=tmpa->next; if (!(tmpa->type&IEF_IMM_NOT_REL)) - *ptr(U32 *)++ =tmpa->ip; + *ptr(U32 *)++ =tmpa->rip; Free(tmpa); tmpa=tmpa1; } @@ -480,7 +480,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) tmphgr=tmphg->references; while (tmphgr) { tmphgr1=tmphgr->next; - *ptr(U32 *)++=tmphgr->ip; + *ptr(U32 *)++=tmphgr->rip; Free(tmphgr); tmphgr=tmphgr1; } @@ -496,7 +496,7 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) if (!tmpie->type || IET_REL32_EXPORT<=tmpie->type<=IET_IMM64_EXPORT) { QueRem(tmpie); *ptr++=tmpie->type; - *ptr(U32 *)++=tmpie->ip; + *ptr(U32 *)++=tmpie->rip; if (tmpie->str) { i=StrLen(tmpie->str); MemCpy(ptr,tmpie->str,i+1); @@ -517,8 +517,8 @@ I64 Cmp(U8 *filename,U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0) QueRem(tmpie); *ptr++=tmpie->type; if (tmpie->aot) - tmpie->ip+=tmpie->aot->ip2; - *ptr(U32 *)++=tmpie->ip; + tmpie->rip+=tmpie->aot->rip2; + *ptr(U32 *)++=tmpie->rip; if (tmpie->str) { i=StrLen(tmpie->str); MemCpy(ptr,tmpie->str,i+1); diff --git a/Compiler/CMisc.HC b/Compiler/CMisc.HC index 92e03ee..bcaa34c 100644 --- a/Compiler/CMisc.HC +++ b/Compiler/CMisc.HC @@ -151,7 +151,7 @@ U8 *CmdLinePmt() res=MAlloc(i+1+2); MemCpy(res,st,i+1); i--; - while (i>=0 && Bt(chars_bmp_white_space,res[i])) + while (i>=0 && Bt(char_bmp_white_space,res[i])) i--; i++; if (i>0 && res[i-1]==';') diff --git a/Compiler/Compiler.BIN b/Compiler/Compiler.BIN index 325fbb275b7941a17b47b377184d2346e434e298..f7a5d983f89a210e70090f2b5065779353ffd9aa 100644 GIT binary patch delta 46222 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 QH(zq^GD!-6CS;H?0F4|X;{X5v diff --git a/Compiler/Compiler.MAP b/Compiler/Compiler.MAP index 4412671..95dcd75 100644 --- a/Compiler/Compiler.MAP +++ b/Compiler/Compiler.MAP @@ -7,8 +7,8 @@ $LK,"CmpRawTypePointed",A="FL:::/Compiler/OptLib.HC.Z,517",BI=6$ $LK,"OptFixupBinaryOp1",A="FL:::/Compiler/OptLib.HC.Z,96",BI=7$ $LK,"OptFixupBinaryOp2",A="FL:::/Compiler/OptLib.HC.Z,182",BI=8$ $LK,"COCInit",A="FL:::/Compiler/PrsLib.HC.Z,99",BI=9$ -$LK,"IsLexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1128",BI=10$ -$LK,"CSubSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,574"$ +$LK,"IsLexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1129",BI=10$ +$LK,"CSubSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,566"$ $LK,"LexFilePop",A="FL:::/Compiler/Lex.HC.Z,11",BI=11$ $LK,"ExePutS",A="FL:::/Compiler/CMain.HC.Z,571",BI=12$ $LK,"PrsStaticInit",A="FL:::/Compiler/PrsVar.HC.Z,215",BI=13$ @@ -21,163 +21,163 @@ $LK,"ICU8",A="FL:::/Compiler/BackLib.HC.Z,17",BI=18$ $LK,"AsmStoreNum",A="FL:::/Compiler/Asm.HC.Z,268",BI=19$ $LK,"OptPass012",A="FL:::/Compiler/OptPass012.HC.Z,23",BI=20$ $LK,"MemberLstSize",A="FL:::/Compiler/LexLib.HC.Z,221",BI=21$ -$LK,"ICQueIns",A="FL:::/Compiler/BackC.HC.Z,351",BI=22$ +$LK,"ICQueIns",A="FL:::/Compiler/BackC.HC.Z,354",BI=22$ $LK,"ICAndBranch",A="FL:::/Compiler/BackC.HC.Z,1",BI=23$ -$LK,"U",A="FL:::/Compiler/UAsm.HC.Z,645",BI=24$ -$LK,"ICQueRem",A="FL:::/Compiler/BackC.HC.Z,399",BI=25$ -$LK,"CN_R",A="FL:::/Compiler/BackFA.HC.Z,4"$ +$LK,"U",A="FL:::/Compiler/UAsm.HC.Z,653",BI=24$ +$LK,"ICQueRem",A="FL:::/Compiler/BackC.HC.Z,402",BI=25$ $LK,"LastFun",A="FL:::/Compiler/CMisc.HC.Z,48"$ $LK,"OptLead1",A="FL:::/Compiler/OptLib.HC.Z,73",BI=26$ $LK,"CmpNoteFloatOp",A="FL:::/Compiler/BackFA.HC.Z,6",BI=27$ -$LK,"AOTGlblsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,76",BI=28$ +$LK,"AOTGlblsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,77",BI=28$ $LK,"ExePutS2",A="FL:::/Compiler/CMain.HC.Z,631",BI=29$ $LK,"HashEntrySize",A="FL:::/Compiler/CHash.HC.Z,1",BI=30$ $LK,"COCPush",A="FL:::/Compiler/PrsLib.HC.Z,107",BI=31$ -$LK,"SLASH_OP_DEC",A="FL:::/Compiler/BackLib.HC.Z,245"$ +$LK,"SLASH_OP_DEC",A="FL:::/Compiler/BackLib.HC.Z,259"$ $LK,"MODR_SIB_D32_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,132"$ -$LK,"ICPushRegs",A="FL:::/Compiler/BackLib.HC.Z,331",BI=32$ +$LK,"ICPushRegs",A="FL:::/Compiler/BackLib.HC.Z,350",BI=32$ $LK,"PE_POP_HIGHER",A="FL:::/Compiler/PrsExp.HC.Z,10"$ -$LK,"SLASH_OP_FLD",A="FL:::/Compiler/BackLib.HC.Z,260"$ +$LK,"SLASH_OP_FLD",A="FL:::/Compiler/BackLib.HC.Z,277"$ $LK,"ICU32",A="FL:::/Compiler/BackLib.HC.Z,47",BI=33$ $LK,"ICU24",A="FL:::/Compiler/BackLib.HC.Z,41",BI=34$ $LK,"ICU16",A="FL:::/Compiler/BackLib.HC.Z,35",BI=35$ -$LK,"SLASH_OP_DIV",A="FL:::/Compiler/BackLib.HC.Z,250"$ +$LK,"SLASH_OP_DIV",A="FL:::/Compiler/BackLib.HC.Z,266"$ $LK,"CmpFillTables",A="FL:::/Compiler/CInit.HC.Z,239",BI=36$ $LK,"AOTStoreCodeU32",A="FL:::/Compiler/AsmLib.HC.Z,30",BI=37$ $LK,"ICU64",A="FL:::/Compiler/BackLib.HC.Z,53",BI=38$ -$LK,"SLASH_OP_INC",A="FL:::/Compiler/BackLib.HC.Z,244"$ +$LK,"SLASH_OP_INC",A="FL:::/Compiler/BackLib.HC.Z,258"$ $LK,"AOTStoreCodeU64",A="FL:::/Compiler/AsmLib.HC.Z,68",BI=39$ $LK,"LexPopNoRestore",A="FL:::/Compiler/LexLib.HC.Z,38",BI=40$ $LK,"ExePrint",A="FL:::/Compiler/CMain.HC.Z,605",BI=41$ -$LK,"SLASH_OP_NEG",A="FL:::/Compiler/BackLib.HC.Z,247"$ +$LK,"SLASH_OP_NEG",A="FL:::/Compiler/BackLib.HC.Z,261"$ $LK,"PrsVarLst",A="FL:::/Compiler/PrsVar.HC.Z,416",BI=42$ -$LK,"PrsAsmDefine",A="FL:::/Compiler/Asm.HC.Z,813",BI=43$ +$LK,"PrsAsmDefine",A="FL:::/Compiler/Asm.HC.Z,814",BI=43$ $LK,"PrsAddOp",A="FL:::/Compiler/PrsExp.HC.Z,15",BI=44$ $LK,"LexWarn",A="FL:::/Compiler/CExcept.HC.Z,65",BI=45$ $LK,"PE_POP_ALL1",A="FL:::/Compiler/PrsExp.HC.Z,12"$ $LK,"PE_POP_ALL2",A="FL:::/Compiler/PrsExp.HC.Z,13"$ $LK,"COCAppend",A="FL:::/Compiler/PrsLib.HC.Z,126",BI=46$ $LK,"LexFilePush",A="FL:::/Compiler/Lex.HC.Z,1",BI=47$ -$LK,"CN_MAIN",A="FL:::/Compiler/BackFA.HC.Z,3"$ -$LK,"PrsUnaryModifier",A="FL:::/Compiler/PrsExp.HC.Z,954",BI=48$ +$LK,"PrsUnaryModifier",A="FL:::/Compiler/PrsExp.HC.Z,955",BI=48$ $LK,"OptFixupUnaryOp",A="FL:::/Compiler/OptLib.HC.Z,196",BI=49$ $LK,"LexPush",A="FL:::/Compiler/LexLib.HC.Z,12",BI=50$ -$LK,"SLASH_OP_MOV",A="FL:::/Compiler/BackLib.HC.Z,251"$ -$LK,"ICPopRegs",A="FL:::/Compiler/BackLib.HC.Z,372",BI=51$ -$LK,"SLASH_OP_MUL",A="FL:::/Compiler/BackLib.HC.Z,248"$ -$LK,"SLASH_OP_NOT",A="FL:::/Compiler/BackLib.HC.Z,246"$ +$LK,"SLASH_OP_MOV",A="FL:::/Compiler/BackLib.HC.Z,267"$ +$LK,"ICPopRegs",A="FL:::/Compiler/BackLib.HC.Z,391",BI=51$ +$LK,"SLASH_OP_MUL",A="FL:::/Compiler/BackLib.HC.Z,264"$ +$LK,"SLASH_OP_NOT",A="FL:::/Compiler/BackLib.HC.Z,260"$ $LK,"NUM_INTERNAL_TYPES",A="FL:::/Compiler/CInit.HC.Z,1"$ -$LK,"SLASH_OP_POP",A="FL:::/Compiler/BackLib.HC.Z,253"$ +$LK,"SLASH_OP_POP",A="FL:::/Compiler/BackLib.HC.Z,270"$ $LK,"ICFOp",A="FL:::/Compiler/BackFA.HC.Z,339",BI=52$ $LK,"CN_A1",A="FL:::/Compiler/BackFA.HC.Z,2"$ $LK,"CN_A2",A="FL:::/Compiler/BackFA.HC.Z,1"$ -$LK,"LexExpressionF64",A="FL:::/Compiler/PrsExp.HC.Z,1147",BI=53$ +$LK,"LexExpressionF64",A="FL:::/Compiler/PrsExp.HC.Z,1148",BI=53$ $LK,"ICAdd",A="FL:::/Compiler/PrsLib.HC.Z,79",BI=54$ $LK,"CmpRawType",A="FL:::/Compiler/OptLib.HC.Z,508",BI=55$ $LK,"ICFOpEqu",A="FL:::/Compiler/BackFB.HC.Z,1",BI=56$ -$LK,"LexExpressionI64",A="FL:::/Compiler/PrsExp.HC.Z,1133",BI=57$ -$LK,"ICQueInsRev",A="FL:::/Compiler/BackC.HC.Z,375",BI=58$ -$LK,"LexExpression",A="FL:::/Compiler/PrsExp.HC.Z,1161",BI=59$ +$LK,"LexExpressionI64",A="FL:::/Compiler/PrsExp.HC.Z,1134",BI=57$ +$LK,"ICQueInsRev",A="FL:::/Compiler/BackC.HC.Z,378",BI=58$ +$LK,"LexExpression",A="FL:::/Compiler/PrsExp.HC.Z,1162",BI=59$ $LK,"PrsExpression",A="FL:::/Compiler/PrsExp.HC.Z,264",BI=60$ $LK,"PrsClassNew",A="FL:::/Compiler/PrsLib.HC.Z,40",BI=61$ -$LK,"LexInStr",A="FL:::/Compiler/Lex.HC.Z,373",BI=62$ +$LK,"LexInStr",A="FL:::/Compiler/Lex.HC.Z,367",BI=62$ $LK,"internal_types_table",A="FL:::/Compiler/CInit.HC.Z,6"$ +$LK,"CN_INST",A="FL:::/Compiler/BackFA.HC.Z,3"$ $LK,"OptPass3",A="FL:::/Compiler/OptPass3.HC.Z,1",BI=63$ -$LK,"OptPass4",A="FL:::/Compiler/OptPass4.HC.Z,132",BI=64$ +$LK,"OptPass4",A="FL:::/Compiler/OptPass4.HC.Z,133",BI=64$ $LK,"OptPass5",A="FL:::/Compiler/OptPass5.HC.Z,1",BI=65$ $LK,"OptPass6",A="FL:::/Compiler/OptPass6.HC.Z,96",BI=66$ $LK,"MODR_REG",A="FL:::/Compiler/BackLib.HC.Z,126"$ $LK,"Echo",A="FL:::/Compiler/CMisc.HC.Z,63",BI=67$ $LK,"PrsGlblVarLst",A="FL:::/Compiler/PrsStmt.HC.Z,209",BI=68$ -$LK,"ICQueInit",A="FL:::/Compiler/BackC.HC.Z,337",BI=69$ +$LK,"ICQueInit",A="FL:::/Compiler/BackC.HC.Z,340",BI=69$ $LK,"ICCmp",A="FL:::/Compiler/BackB.HC.Z,102",BI=70$ $LK,"ICAddRSP",A="FL:::/Compiler/BackLib.HC.Z,59",BI=71$ -$LK,"ICDiv",A="FL:::/Compiler/BackA.HC.Z,391",BI=72$ -$LK,"ICDeref",A="FL:::/Compiler/BackLib.HC.Z,709",BI=73$ -$LK,"ICLea",A="FL:::/Compiler/BackLib.HC.Z,677",BI=74$ +$LK,"ICDiv",A="FL:::/Compiler/BackA.HC.Z,355",BI=72$ +$LK,"ICDeref",A="FL:::/Compiler/BackLib.HC.Z,693",BI=73$ +$LK,"ICLea",A="FL:::/Compiler/BackLib.HC.Z,661",BI=74$ $LK,"CmpBuf",A="FL:::/Compiler/CMain.HC.Z,157",BI=75$ $LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:::/Compiler/Templates.HC.Z,385"$ $LK,"ICAddEct",A="FL:::/Compiler/BackA.HC.Z,1",BI=76$ $LK,"ICToF64",A="FL:::/Compiler/BackB.HC.Z,283",BI=77$ -$LK,"PrsBinFile",A="FL:::/Compiler/Asm.HC.Z,887",BI=78$ +$LK,"PrsBinFile",A="FL:::/Compiler/Asm.HC.Z,888",BI=78$ $LK,"HashTableSize2",A="FL:::/Compiler/CHash.HC.Z,72",BI=79$ $LK,"HashEntrySize2",A="FL:::/Compiler/CHash.HC.Z,33",BI=80$ -$LK,"Ui",A="FL:::/Compiler/UAsm.HC.Z,238",BI=81$ -$LK,"ICSlashOp",A="FL:::/Compiler/BackLib.HC.Z,265",BI=82$ +$LK,"Ui",A="FL:::/Compiler/UAsm.HC.Z,245",BI=81$ +$LK,"ICSlashOp",A="FL:::/Compiler/BackLib.HC.Z,282",BI=82$ $LK,"OptBrZero",A="FL:::/Compiler/OptLib.HC.Z,230",BI=83$ -$LK,"Un",A="FL:::/Compiler/UAsm.HC.Z,660",BI=84$ +$LK,"Un",A="FL:::/Compiler/UAsm.HC.Z,668",BI=84$ $LK,"PrsSizeOf",A="FL:::/Compiler/PrsExp.HC.Z,298",BI=85$ $LK,"ICToI64",A="FL:::/Compiler/BackB.HC.Z,277",BI=86$ -$LK,"ICMod",A="FL:::/Compiler/BackA.HC.Z,461",BI=87$ +$LK,"ICMod",A="FL:::/Compiler/BackA.HC.Z,425",BI=87$ $LK,"OptSetNOP1",A="FL:::/Compiler/OptLib.HC.Z,17",BI=88$ $LK,"OptPass789A",A="FL:::/Compiler/OptPass789A.HC.Z,1",BI=89$ $LK,"OptSetNOP2",A="FL:::/Compiler/OptLib.HC.Z,25",BI=90$ $LK,"FBO1_F64",A="FL:::/Compiler/OptLib.HC.Z,94"$ -$LK,"ICXorEqu",A="FL:::/Compiler/BackC.HC.Z,578",BI=91$ +$LK,"ICXorEqu",A="FL:::/Compiler/BackC.HC.Z,581",BI=91$ $LK,"ICToUpper",A="FL:::/Compiler/BackB.HC.Z,266",BI=92$ $LK,"AsmLexExpression",A="FL:::/Compiler/AsmLib.HC.Z,127",BI=93$ -$LK,"ICMov",A="FL:::/Compiler/BackLib.HC.Z,426",BI=94$ +$LK,"ICMov",A="FL:::/Compiler/BackLib.HC.Z,445",BI=94$ $LK,"ICNot",A="FL:::/Compiler/BackB.HC.Z,10",BI=95$ -$LK,"ICMul",A="FL:::/Compiler/BackA.HC.Z,263",BI=96$ +$LK,"ICMul",A="FL:::/Compiler/BackA.HC.Z,224",BI=96$ $LK,"ICRex",A="FL:::/Compiler/BackLib.HC.Z,22",BI=97$ -$LK,"ICPop",A="FL:::/Compiler/BackLib.HC.Z,344",BI=98$ -$LK,"SLASH_OP_FADD",A="FL:::/Compiler/BackLib.HC.Z,254"$ +$LK,"ICPop",A="FL:::/Compiler/BackLib.HC.Z,363",BI=98$ +$LK,"SLASH_OP_FADD",A="FL:::/Compiler/BackLib.HC.Z,271"$ $LK,"MODR_RIP_REL",A="FL:::/Compiler/BackLib.HC.Z,133"$ $LK,"LexStmt2Bin",A="FL:::/Compiler/CMain.HC.Z,1",BI=99$ -$LK,"ICSub",A="FL:::/Compiler/BackA.HC.Z,205",BI=100$ +$LK,"ICSub",A="FL:::/Compiler/BackA.HC.Z,166",BI=100$ $LK,"COCFloatConstFind",A="FL:::/Compiler/PrsLib.HC.Z,164",BI=101$ $LK,"ICPut",A="FL:::/Compiler/CExcept.HC.Z,184",BI=102$ $LK,"PrsArrayDims",A="FL:::/Compiler/PrsVar.HC.Z,247",BI=103$ -$LK,"ICSqr",A="FL:::/Compiler/BackC.HC.Z,453",BI=104$ +$LK,"ICSqr",A="FL:::/Compiler/BackC.HC.Z,456",BI=104$ $LK,"FBO1_NOT_CONST",A="FL:::/Compiler/OptLib.HC.Z,92"$ $LK,"CMP_TEMPLATES_DONT_POP",A="FL:::/Compiler/Templates.HC.Z,173"$ $LK,"PrsClass",A="FL:::/Compiler/PrsStmt.HC.Z,1",BI=105$ +$LK,"SLASH_OP_MOV_IMM",A="FL:::/Compiler/BackLib.HC.Z,268"$ $LK,"MemberMetaData",A="FL:::/Compiler/LexLib.HC.Z,45",BI=106$ -$LK,"ICSwitch",A="FL:::/Compiler/BackC.HC.Z,599",BI=107$ +$LK,"ICSwitch",A="FL:::/Compiler/BackC.HC.Z,602",BI=107$ $LK,"OptBrNotZero",A="FL:::/Compiler/OptLib.HC.Z,357",BI=108$ $LK,"LexPutToken",A="FL:::/Compiler/CExcept.HC.Z,1",BI=109$ -$LK,"SLASH_OP_FDIV",A="FL:::/Compiler/BackLib.HC.Z,258"$ +$LK,"SLASH_OP_FDIV",A="FL:::/Compiler/BackLib.HC.Z,275"$ $LK,"AsmHashLoad",A="FL:::/Compiler/AsmInit.HC.Z,50",BI=110$ -$LK,"UAsmHashLoad",A="FL:::/Compiler/UAsm.HC.Z,188",BI=111$ +$LK,"UAsmHashLoad",A="FL:::/Compiler/UAsm.HC.Z,195",BI=111$ $LK,"UnusedExternWarning",A="FL:::/Compiler/CExcept.HC.Z,104",BI=112$ -$LK,"SLASH_OP_FILD",A="FL:::/Compiler/BackLib.HC.Z,263"$ +$LK,"SLASH_OP_FILD",A="FL:::/Compiler/BackLib.HC.Z,280"$ $LK,"ICXorXor",A="FL:::/Compiler/BackB.HC.Z,75",BI=113$ -$LK,"PrsTryBlk",A="FL:::/Compiler/PrsStmt.HC.Z,850",BI=114$ +$LK,"PrsTryBlk",A="FL:::/Compiler/PrsStmt.HC.Z,842",BI=114$ $LK,"CInit",A="FL:::/Compiler/CMain.HC.Z,691",BI=115$ $LK,"MemberMetaFind",A="FL:::/Compiler/LexLib.HC.Z,56",BI=116$ $LK,"ExePrint2",A="FL:::/Compiler/CMain.HC.Z,648",BI=117$ $LK,"FBO1_INT",A="FL:::/Compiler/OptLib.HC.Z,93"$ $LK,"PE_DO_UNARY_OP",A="FL:::/Compiler/PrsExp.HC.Z,8"$ $LK,"PrsVarInit",A="FL:::/Compiler/PrsVar.HC.Z,1",BI=118$ -$LK,"ICOrEqu",A="FL:::/Compiler/BackC.HC.Z,557",BI=119$ -$LK,"ICModr1",A="FL:::/Compiler/BackLib.HC.Z,135",BI=120$ -$LK,"ICModr2",A="FL:::/Compiler/BackLib.HC.Z,213",BI=121$ -$LK,"SLASH_OP_FMUL",A="FL:::/Compiler/BackLib.HC.Z,257"$ +$LK,"ICOrEqu",A="FL:::/Compiler/BackC.HC.Z,560",BI=119$ +$LK,"ICModr1",A="FL:::/Compiler/BackLib.HC.Z,136",BI=120$ +$LK,"ICModr2",A="FL:::/Compiler/BackLib.HC.Z,214",BI=121$ +$LK,"SLASH_OP_FMUL",A="FL:::/Compiler/BackLib.HC.Z,274"$ $LK,"ICPreIncDec",A="FL:::/Compiler/BackB.HC.Z,304",BI=122$ $LK,"PrsUnaryTerm",A="FL:::/Compiler/PrsExp.HC.Z,588",BI=123$ $LK,"MemberLstDel",A="FL:::/Compiler/LexLib.HC.Z,183",BI=124$ -$LK,"SLASH_OP_FSUB",A="FL:::/Compiler/BackLib.HC.Z,255"$ +$LK,"SLASH_OP_FSUB",A="FL:::/Compiler/BackLib.HC.Z,272"$ $LK,"ICAndAnd",A="FL:::/Compiler/BackB.HC.Z,30",BI=125$ $LK,"InstEntriesCompare",A="FL:::/Compiler/UAsm.HC.Z,1",BI=126$ -$LK,"SLASH_OP_IMUL",A="FL:::/Compiler/BackLib.HC.Z,249"$ +$LK,"SLASH_OP_IMUL",A="FL:::/Compiler/BackLib.HC.Z,265"$ $LK,"MemberLstCmp",A="FL:::/Compiler/LexLib.HC.Z,157",BI=127$ -$LK,"SLASH_OP_FSTP",A="FL:::/Compiler/BackLib.HC.Z,261"$ +$LK,"SLASH_OP_FSTP",A="FL:::/Compiler/BackLib.HC.Z,278"$ $LK,"COCDel",A="FL:::/Compiler/PrsLib.HC.Z,186",BI=128$ $LK,"PE_UNARY_TERM1",A="FL:::/Compiler/PrsExp.HC.Z,1"$ -$LK,"ICFAdd",A="FL:::/Compiler/BackFB.HC.Z,504",BI=129$ +$LK,"ICFAdd",A="FL:::/Compiler/BackFB.HC.Z,515",BI=129$ $LK,"PE_UNARY_TERM2",A="FL:::/Compiler/PrsExp.HC.Z,2"$ $LK,"CmdLinePmt",A="FL:::/Compiler/CMisc.HC.Z,127",BI=130$ $LK,"AsmMakeArgMask",A="FL:::/Compiler/Asm.HC.Z,177",BI=131$ $LK,"COCHeaderPut",A="FL:::/Compiler/PrsLib.HC.Z,229",BI=132$ $LK,"PrsGlblInit",A="FL:::/Compiler/PrsVar.HC.Z,206",BI=133$ -$LK,"ICAndEqu",A="FL:::/Compiler/BackC.HC.Z,536",BI=134$ +$LK,"ICAndEqu",A="FL:::/Compiler/BackC.HC.Z,539",BI=134$ $LK,"LexD2I32",A="FL:::/Compiler/CMisc.HC.Z,91",BI=135$ $LK,"MemberLstNew",A="FL:::/Compiler/LexLib.HC.Z,150",BI=136$ $LK,"LexD3I32",A="FL:::/Compiler/CMisc.HC.Z,107",BI=137$ $LK,"OptClassFwd",A="FL:::/Compiler/OptLib.HC.Z,9",BI=138$ -$LK,"ICFCmp",A="FL:::/Compiler/BackFA.HC.Z,515",BI=139$ -$LK,"PrsSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,586",BI=140$ -$LK,"ICFDiv",A="FL:::/Compiler/BackFB.HC.Z,493",BI=141$ +$LK,"ICFCmp",A="FL:::/Compiler/BackFA.HC.Z,519",BI=139$ +$LK,"PrsSwitch",A="FL:::/Compiler/PrsStmt.HC.Z,578",BI=140$ +$LK,"ICFDiv",A="FL:::/Compiler/BackFB.HC.Z,504",BI=141$ $LK,"AOTStoreCodeU8At",A="FL:::/Compiler/AsmLib.HC.Z,106",BI=142$ $LK,"PE_PUSH_LOWER",A="FL:::/Compiler/PrsExp.HC.Z,11"$ $LK,"OptPass6Lag",A="FL:::/Compiler/OptPass6.HC.Z,28",BI=143$ @@ -189,33 +189,33 @@ $LK,"ICFCvt",A="FL:::/Compiler/BackFA.HC.Z,123",BI=147$ $LK,"StreamDir",A="FL:::/Compiler/CMisc.HC.Z,82",BI=148$ $LK,"PrsOffsetOf",A="FL:::/Compiler/PrsExp.HC.Z,348",BI=149$ $LK,"GetOption",A="FL:::/Compiler/CMisc.HC.Z,6",BI=150$ -$LK,"PrsDoWhile",A="FL:::/Compiler/PrsStmt.HC.Z,514",BI=151$ -$LK,"ICShift",A="FL:::/Compiler/BackA.HC.Z,609",BI=152$ +$LK,"PrsDoWhile",A="FL:::/Compiler/PrsStmt.HC.Z,506",BI=151$ +$LK,"ICShift",A="FL:::/Compiler/BackA.HC.Z,573",BI=152$ $LK,"ICFMod",A="FL:::/Compiler/BackFA.HC.Z,242",BI=153$ $LK,"COCPop",A="FL:::/Compiler/PrsLib.HC.Z,121",BI=154$ $LK,"PrsExpression2",A="FL:::/Compiler/PrsExp.HC.Z,65",BI=155$ -$LK,"SLASH_OP_PUSH",A="FL:::/Compiler/BackLib.HC.Z,252"$ +$LK,"SLASH_OP_PUSH",A="FL:::/Compiler/BackLib.HC.Z,269"$ $LK,"PE_DEREFERENCE",A="FL:::/Compiler/PrsExp.HC.Z,5"$ $LK,"LexPopRestore",A="FL:::/Compiler/LexLib.HC.Z,23",BI=156$ $LK,"ICUnaries",A="FL:::/Compiler/BackB.HC.Z,1",BI=157$ -$LK,"ICFMul",A="FL:::/Compiler/BackFB.HC.Z,477",BI=158$ -$LK,"ICShiftEqu",A="FL:::/Compiler/BackA.HC.Z,639",BI=159$ -$LK,"LexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1110",BI=160$ +$LK,"ICFMul",A="FL:::/Compiler/BackFB.HC.Z,488",BI=158$ +$LK,"ICShiftEqu",A="FL:::/Compiler/BackA.HC.Z,603",BI=159$ +$LK,"LexExpression2Bin",A="FL:::/Compiler/PrsExp.HC.Z,1111",BI=160$ $LK,"ICFPow",A="FL:::/Compiler/BackFA.HC.Z,266",BI=161$ $LK,"MapFileWrite",A="FL:::/Compiler/CHash.HC.Z,90",BI=162$ -$LK,"ICFSub",A="FL:::/Compiler/BackFB.HC.Z,540",BI=163$ -$LK,"ICFModEqu",A="FL:::/Compiler/BackFA.HC.Z,545",BI=164$ +$LK,"ICFSub",A="FL:::/Compiler/BackFB.HC.Z,551",BI=163$ +$LK,"ICFModEqu",A="FL:::/Compiler/BackFA.HC.Z,549",BI=164$ $LK,"CmpF1PushPop",A="FL:::/Compiler/OptLib.HC.Z,535",BI=165$ $LK,"OptFree",A="FL:::/Compiler/OptLib.HC.Z,33",BI=166$ $LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:::/Compiler/Templates.HC.Z,447"$ $LK,"CInternalType",A="FL:::/Compiler/CInit.HC.Z,3"$ $LK,"LexDollar",A="FL:::/Compiler/Lex.HC.Z,93",BI=167$ -$LK,"AsmUnresolvedAdd",A="FL:::/Compiler/AsmResolve.HC.Z,188",BI=168$ +$LK,"AsmUnresolvedAdd",A="FL:::/Compiler/AsmResolve.HC.Z,189",BI=168$ $LK,"AOTStoreCodeU8",A="FL:::/Compiler/AsmLib.HC.Z,1",BI=169$ $LK,"ICBitOps",A="FL:::/Compiler/BackB.HC.Z,202",BI=170$ $LK,"lex_zeros",A="FL:::/Compiler/Lex.HC.Z,91"$ $LK,"ClassMemberLstDel",A="FL:::/Compiler/LexLib.HC.Z,209",BI=171$ -$LK,"CSwitchCase",A="FL:::/Compiler/PrsStmt.HC.Z,579"$ +$LK,"CSwitchCase",A="FL:::/Compiler/PrsStmt.HC.Z,571"$ $LK,"AsmResolve",A="FL:::/Compiler/AsmResolve.HC.Z,1",BI=172$ $LK,"PrsAsmInst",A="FL:::/Compiler/Asm.HC.Z,395",BI=173$ $LK,"COCCompile",A="FL:::/Compiler/PrsLib.HC.Z,249",BI=174$ @@ -224,19 +224,20 @@ $LK,"Cmp",A="FL:::/Compiler/CMain.HC.Z,419",BI=176$ $LK,"PrsPush2",A="FL:::/Compiler/PrsLib.HC.Z,11",BI=177$ $LK,"ICArgPut",A="FL:::/Compiler/CExcept.HC.Z,141",BI=178$ $LK,"UndefinedExtern",A="FL:::/Compiler/CExcept.HC.Z,98",BI=179$ +$LK,"CN_RES",A="FL:::/Compiler/BackFA.HC.Z,4"$ $LK,"OptIC4",A="FL:::/Compiler/OptPass4.HC.Z,1",BI=180$ $LK,"OptIC6",A="FL:::/Compiler/OptPass6.HC.Z,1",BI=181$ $LK,"ICCmpAndBranch",A="FL:::/Compiler/BackB.HC.Z,468",BI=182$ -$LK,"ICDivEqu",A="FL:::/Compiler/BackA.HC.Z,408",BI=183$ -$LK,"PrsWhile",A="FL:::/Compiler/PrsStmt.HC.Z,494",BI=184$ -$LK,"ICFCmpAndBranch",A="FL:::/Compiler/BackFB.HC.Z,219",BI=185$ -$LK,"Lex",A="FL:::/Compiler/Lex.HC.Z,447",BI=186$ -$LK,"ICTestAndBranch",A="FL:::/Compiler/BackB.HC.Z,634",BI=187$ +$LK,"ICDivEqu",A="FL:::/Compiler/BackA.HC.Z,372",BI=183$ +$LK,"PrsWhile",A="FL:::/Compiler/PrsStmt.HC.Z,486",BI=184$ +$LK,"ICFCmpAndBranch",A="FL:::/Compiler/BackFB.HC.Z,226",BI=185$ +$LK,"Lex",A="FL:::/Compiler/Lex.HC.Z,441",BI=186$ +$LK,"ICTestAndBranch",A="FL:::/Compiler/BackB.HC.Z,640",BI=187$ $LK,"uasm",A="FL:::/Compiler/Compiler.PRJ.Z,21"$ $LK,"MODR_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,127"$ $LK,"PE_MAYBE_MODIFIERS",A="FL:::/Compiler/PrsExp.HC.Z,3"$ $LK,"PE_UNARY_MODIFIERS",A="FL:::/Compiler/PrsExp.HC.Z,4"$ -$LK,"AOTLocalsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,42",BI=188$ +$LK,"AOTLocalsResolve",A="FL:::/Compiler/AsmResolve.HC.Z,43",BI=188$ $LK,"PE_DO_BINARY_OP",A="FL:::/Compiler/PrsExp.HC.Z,9"$ $LK,"CmpFixUpAOTAsm",A="FL:::/Compiler/CMain.HC.Z,302",BI=189$ $LK,"OptLabelFwd",A="FL:::/Compiler/OptLib.HC.Z,1",BI=190$ @@ -248,61 +249,62 @@ $LK,"CmpJoin",A="FL:::/Compiler/CMain.HC.Z,35",BI=194$ $LK,"PrsPop2",A="FL:::/Compiler/PrsLib.HC.Z,16",BI=195$ $LK,"CMP_TEMPLATES",A="FL:::/Compiler/Templates.HC.Z,4"$ $LK,"MODR_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,128"$ -$LK,"PrsAsmBlk",A="FL:::/Compiler/Asm.HC.Z,903",BI=196$ +$LK,"PrsAsmBlk",A="FL:::/Compiler/Asm.HC.Z,904",BI=196$ $LK,"PrsAsmArg",A="FL:::/Compiler/Asm.HC.Z,35",BI=197$ -$LK,"LexFirstRem",A="FL:::/Compiler/Lex.HC.Z,277",BI=198$ +$LK,"LexFirstRem",A="FL:::/Compiler/Lex.HC.Z,271",BI=198$ $LK,"MemberClassBaseFind",A="FL:::/Compiler/LexLib.HC.Z,87",BI=199$ $LK,"MemberFind",A="FL:::/Compiler/LexLib.HC.Z,67",BI=200$ $LK,"cmp",A="FL:::/Compiler/Compiler.PRJ.Z,16"$ $LK,"OptLag",A="FL:::/Compiler/OptLib.HC.Z,40",BI=201$ $LK,"ICPostIncDec",A="FL:::/Compiler/BackB.HC.Z,345",BI=202$ -$LK,"ICFPostIncDec",A="FL:::/Compiler/BackFB.HC.Z,582",BI=203$ -$LK,"ICTest",A="FL:::/Compiler/BackLib.HC.Z,394",BI=204$ -$LK,"ICModU64",A="FL:::/Compiler/BackC.HC.Z,460",BI=205$ +$LK,"ICFPostIncDec",A="FL:::/Compiler/BackFB.HC.Z,593",BI=203$ +$LK,"ICTest",A="FL:::/Compiler/BackLib.HC.Z,413",BI=204$ +$LK,"ICModU64",A="FL:::/Compiler/BackC.HC.Z,463",BI=205$ $LK,"PrsAsmImm",A="FL:::/Compiler/Asm.HC.Z,1",BI=206$ $LK,"LexExtStr",A="FL:::/Compiler/LexLib.HC.Z,248",BI=207$ -$LK,"ICAddSubEctEqu",A="FL:::/Compiler/BackA.HC.Z,478",BI=208$ +$LK,"ICAddSubEctEqu",A="FL:::/Compiler/BackA.HC.Z,442",BI=208$ $LK,"ICAddSubEctImm",A="FL:::/Compiler/BackA.HC.Z,56",BI=209$ -$LK,"ICPush",A="FL:::/Compiler/BackLib.HC.Z,293",BI=210$ -$LK,"ICSwap",A="FL:::/Compiler/BackC.HC.Z,487",BI=211$ +$LK,"ICPush",A="FL:::/Compiler/BackLib.HC.Z,312",BI=210$ +$LK,"ICSwap",A="FL:::/Compiler/BackC.HC.Z,490",BI=211$ $LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:::/Compiler/Templates.HC.Z,260"$ $LK,"intermediate_code_table",A="FL:::/Compiler/CInit.HC.Z,16"$ -$LK,"ICZero",A="FL:::/Compiler/BackLib.HC.Z,385",BI=212$ +$LK,"ICZero",A="FL:::/Compiler/BackLib.HC.Z,404",BI=212$ $LK,"CmpCtrlDel",A="FL:::/Compiler/Lex.HC.Z,58",BI=213$ $LK,"ICClassPut",A="FL:::/Compiler/CExcept.HC.Z,117",BI=214$ $LK,"ICAssign",A="FL:::/Compiler/BackC.HC.Z,159",BI=215$ -$LK,"ICFTemplateFun",A="FL:::/Compiler/BackFB.HC.Z,606",BI=216$ +$LK,"ICFTemplateFun",A="FL:::/Compiler/BackFB.HC.Z,617",BI=216$ $LK,"RunFile",A="FL:::/Compiler/CMain.HC.Z,625",BI=217$ $LK,"MemberAdd",A="FL:::/Compiler/LexLib.HC.Z,103",BI=218$ $LK,"PrsPush",A="FL:::/Compiler/PrsLib.HC.Z,1",BI=219$ -$LK,"SLASH_OP_FDIVR",A="FL:::/Compiler/BackLib.HC.Z,259"$ -$LK,"SLASH_OP_FISTTP",A="FL:::/Compiler/BackLib.HC.Z,262"$ +$LK,"SLASH_OP_FDIVR",A="FL:::/Compiler/BackLib.HC.Z,276"$ +$LK,"SLASH_OP_FISTTP",A="FL:::/Compiler/BackLib.HC.Z,279"$ $LK,"CmpCtrlSize",A="FL:::/Compiler/Lex.HC.Z,70",BI=220$ -$LK,"ICLocalVarInit",A="FL:::/Compiler/BackC.HC.Z,758",BI=221$ -$LK,"PrsFor",A="FL:::/Compiler/PrsStmt.HC.Z,537",BI=222$ +$LK,"ICLocalVarInit",A="FL:::/Compiler/BackC.HC.Z,761",BI=221$ +$LK,"PrsFor",A="FL:::/Compiler/PrsStmt.HC.Z,529",BI=222$ $LK,"PassTrace",A="FL:::/Compiler/CMisc.HC.Z,50",BI=223$ $LK,"PrsPopDeref",A="FL:::/Compiler/PrsLib.HC.Z,21",BI=224$ $LK,"ICCopyTemplate",A="FL:::/Compiler/BackFA.HC.Z,77",BI=225$ -$LK,"PrsStmt",A="FL:::/Compiler/PrsStmt.HC.Z,912",BI=226$ +$LK,"PrsStmt",A="FL:::/Compiler/PrsStmt.HC.Z,904",BI=226$ $LK,"PrsFun",A="FL:::/Compiler/PrsStmt.HC.Z,140",BI=227$ -$LK,"LexIncludeStr",A="FL:::/Compiler/Lex.HC.Z,299",BI=228$ +$LK,"LexIncludeStr",A="FL:::/Compiler/Lex.HC.Z,293",BI=228$ $LK,"PrsType",A="FL:::/Compiler/PrsVar.HC.Z,287",BI=229$ $LK,"CmpCtrlNew",A="FL:::/Compiler/Lex.HC.Z,28",BI=230$ $LK,"MODR_SIB_D8_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,131"$ -$LK,"cmp_type_flags_src_code",A="FL:::/Compiler/Lex.HC.Z,328"$ +$LK,"cmp_type_flags_src_code",A="FL:::/Compiler/Lex.HC.Z,322"$ $LK,"PrsVarInit2",A="FL:::/Compiler/PrsVar.HC.Z,123",BI=231$ $LK,"PrsPop",A="FL:::/Compiler/PrsLib.HC.Z,6",BI=232$ $LK,"asm_seg_prefixes",A="FL:::/Compiler/Asm.HC.Z,393"$ -$LK,"ICMinMax",A="FL:::/Compiler/BackC.HC.Z,415",BI=233$ +$LK,"ICMinMax",A="FL:::/Compiler/BackC.HC.Z,418",BI=233$ $LK,"CmpLoadDefines",A="FL:::/Compiler/CInit.HC.Z,204",BI=234$ -$LK,"PrsIf",A="FL:::/Compiler/PrsStmt.HC.Z,467",BI=235$ -$LK,"ICBuiltInFloatConst",A="FL:::/Compiler/BackLib.HC.Z,404",BI=236$ +$LK,"PrsIf",A="FL:::/Compiler/PrsStmt.HC.Z,459",BI=235$ +$LK,"ICBuiltInFloatConst",A="FL:::/Compiler/BackLib.HC.Z,423",BI=236$ $LK,"ICFUnaryMinus",A="FL:::/Compiler/BackFA.HC.Z,194",BI=237$ -$LK,"LexDocRead",A="FL:::/Compiler/Lex.HC.Z,311",BI=238$ +$LK,"LexDocRead",A="FL:::/Compiler/Lex.HC.Z,305",BI=238$ $LK,"CmpFixUpJITAsm",A="FL:::/Compiler/CMain.HC.Z,174",BI=239$ $LK,"COCPopNoFree",A="FL:::/Compiler/PrsLib.HC.Z,114",BI=240$ $LK,"ParenWarning",A="FL:::/Compiler/CExcept.HC.Z,110",BI=241$ $LK,"PrsFunCall",A="FL:::/Compiler/PrsExp.HC.Z,378",BI=242$ +$LK,"SLASH_OP_IMM_U32",A="FL:::/Compiler/BackLib.HC.Z,263"$ $LK,"ICDerefPostIncDec",A="FL:::/Compiler/BackB.HC.Z,384",BI=243$ $LK,"Option",A="FL:::/Compiler/CMisc.HC.Z,1",BI=244$ $LK,"ExeFile2",A="FL:::/Compiler/CMain.HC.Z,657",BI=245$ @@ -311,14 +313,15 @@ $LK,"PE_CHECK_BINARY_OPS1",A="FL:::/Compiler/PrsExp.HC.Z,6"$ $LK,"PE_CHECK_BINARY_OPS2",A="FL:::/Compiler/PrsExp.HC.Z,7"$ $LK,"LexBackupLastChar",A="FL:::/Compiler/LexLib.HC.Z,1",BI=246$ $LK,"Trace",A="FL:::/Compiler/CMisc.HC.Z,58",BI=247$ -$LK,"ICBrBitOps",A="FL:::/Compiler/BackC.HC.Z,206",BI=248$ +$LK,"ICBrBitOps",A="FL:::/Compiler/BackC.HC.Z,208",BI=248$ $LK,"MODR_D32_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,129"$ $LK,"LexGetChar",A="FL:::/Compiler/Lex.HC.Z,107",BI=249$ -$LK,"LexSkipEol",A="FL:::/Compiler/Lex.HC.Z,270",BI=250$ -$LK,"ICFlagBranch",A="FL:::/Compiler/BackB.HC.Z,682",BI=251$ -$LK,"SLASH_OP_FSUBR",A="FL:::/Compiler/BackLib.HC.Z,256"$ -$LK,"ICFPreIncDec",A="FL:::/Compiler/BackFB.HC.Z,562",BI=252$ +$LK,"LexSkipEol",A="FL:::/Compiler/Lex.HC.Z,264",BI=250$ +$LK,"ICFlagBranch",A="FL:::/Compiler/BackB.HC.Z,688",BI=251$ +$LK,"SLASH_OP_FSUBR",A="FL:::/Compiler/BackLib.HC.Z,273"$ +$LK,"ICFPreIncDec",A="FL:::/Compiler/BackFB.HC.Z,573",BI=252$ $LK,"MODR_SIB_INDIRECT_REG",A="FL:::/Compiler/BackLib.HC.Z,130"$ +$LK,"SLASH_OP_IMM_U8",A="FL:::/Compiler/BackLib.HC.Z,262"$ $LK,"ExeFile",A="FL:::/Compiler/CMain.HC.Z,614",BI=253$ $LK,"COCMiscNew",A="FL:::/Compiler/PrsLib.HC.Z,143",BI=254$ $LK,"cmp_templates_dont_pop",A="FL:::/Compiler/CExts.HC.Z,43"$ @@ -332,99 +335,94 @@ $LK,"PrsFunJoin",A="FL:::/Compiler/PrsStmt.HC.Z,62",BI=261$ $LK,"OptFixSizeOf",A="FL:::/Compiler/OptLib.HC.Z,484",BI=262$ $LK,"cmp_templates_dont_push",A="FL:::/Compiler/CExts.HC.Z,45"$ $LK,"cmp_templates_dont_push_pop",A="FL:::/Compiler/CExts.HC.Z,46"$ -$LK,"LexAttachDoc",A="FL:::/Compiler/Lex.HC.Z,331",BI=263$ -$LK,"PrsStreamBlk",A="FL:::/Compiler/PrsStmt.HC.Z,813",BI=264$ +$LK,"LexAttachDoc",A="FL:::/Compiler/Lex.HC.Z,325",BI=263$ +$LK,"PrsStreamBlk",A="FL:::/Compiler/PrsStmt.HC.Z,805",BI=264$ +$LK,"MODR_RIP_REL_IMM_U32",A="FL:::/Compiler/BackLib.HC.Z,134"$ $LK,"cmp_templates_dont_push2",A="FL:::/Compiler/CExts.HC.Z,44"$ $LK,"InstEntryFind",A="FL:::/Compiler/UAsm.HC.Z,66",BI=265$ $LK,"PrsDotDotDot",A="FL:::/Compiler/PrsVar.HC.Z,381",BI=266$ -$LK,"ICMulEqu",A="FL:::/Compiler/BackA.HC.Z,322",BI=267$ +$LK,"ICMulEqu",A="FL:::/Compiler/BackA.HC.Z,285",BI=267$ $LK,"AsmPrsInsFlags",A="FL:::/Compiler/AsmInit.HC.Z,1",BI=268$ -$LK,"PrsNoWarn",A="FL:::/Compiler/PrsStmt.HC.Z,799",BI=269$ -H2@2#2#;#A#\#a#Œ#Ž#Ã#­#Ó#Ú#ë#þ#¨­Ó÷c÷c dd d,dLd.d[dadad‹d’d½dËdËdøde2e eAemeZe„e‹e¶e¶e½eáe÷e÷e÷efH>L7ÿ7ÿQÿ[ÿ_ÿcÿhÿjÿ‚ÿšÿšÿ¤ÿp©ÁGGqsz€†ˆŽ”ª½ÌÑÓØâ÷  EW(NåNåbåƒå‡å‡å�å8åå'å,å7å@åGåIåNåd`µÙÙ$Ù(Ù5Ù7ÙDÙFÙRÙRÙ_ÙaÙnÙpÙ|Ù|Ù—Ù¥Ù¥Ù°Ù·ÙÆÙÑÙ×ÙÜÙÞÙêÙñÙÚ ÚÚÚÚ$ÚTÚzÚŠÚšÚªÚ¬Ú¼ÚÌÚÜÚÜÚáÚôÚûÚÛÛÛÛ Û Û+Û1Û7Û=ÛAÛAÛAÛnÛuÛ‹Û—Û�Û£Û©Û«Û«Û¹ÛD¶Ã¾Û¾ÛÔÛ×ÛÚÛçÛíÛúÛýÛÜÜÜÜ ,cj‹‹‹(‹3‹>‹D‹J‹ - hl––¤¹¿ P z7z7ˆ7—7³7¹7Ë7Ë7Ö7ß7å7ì7ò7 ”;\�L�L—L›L´LÎLëL MM&MJMaMaM€M�M˜M¥M¬MÞMïMóMûMûMNN"N&N Œ×ö.6:HNTT€–ª¸ÏÕáæô  ) + 2 2 8 8 H |1’"’"¨"±"¼"Ö"Ö"Ù"è"î"÷"ù"ÿ"# -###!#$#$#.#0 'X‰X‰f‰†‰Œ‰’‰’‰˜‰„“°ø¡ø¡ ¢¢¢¢B¢U¢\¢m¢’¢�¢¨¢ª¢µ¢Ú¢å¢ð¢ò¢ù¢££££@£("ÇáÇáÖáíáâââ gágáváŒá’á ˆ€´€´¥´¬´Ã´Ï´Ú´ì´ý´î´ì´µ8µDµKµQµ]µgµnµuµyµ{µ�µ�µ—µžµ¥µ©µ©µ³µ¸µÃµÕµæµ×µÕµ¶'¶3¶:¶@¶L¶V¶]¶d¶h¶j¶p¶|¶†¶�¶”¶˜¶˜¶¥¶³¶Ã¶Õ¶æ¶×¶Õ¶·'·3·:·@·L·V·]·d·h·j·p·|·†·�·”·˜·˜·¢·²·Ä·Õ·Æ·Ä·õ·ü·¸¸¸ ¸&¸*¸,¸2¸>¸H¸O¸V¸Z¸Z¸d¸r¸{¸”¸ ¸¤¸¤¸§¸°¸&¹Ôo„o„Œ„Zª”„£„Ƅфã„ê„û„…… -………H…H…]…_…_…k…s…w…„…„…�…˜…œ…©…©…©…Å…Ð…á…á…æ…þ… †††#†(†(†-†E†T†Y†_†j†o†o†}†††’†š†¢†ª†­†³†¸†Á†Ó†܆í†ý†ý†‡ -‡‡‡‡‡ ‡ ‡ ‡&‡)‡0‡;‡P‡u‡Œ‡™‡¡‡©‡µ‡Á‡LJ·ׇÛ‡Þ‡ê‡ð‡÷‡ü‡ü‡ -ˆˆˆ'ˆ'ˆ/ˆ7ˆ@ˆOˆTˆTˆ[ˆfˆlˆtˆzˆ…ˆŠˆŠˆ™ˆ¤ˆ¶ˆ¼ˆĈʈψÚˆìˆòˆúˆ‰‰‰‰ ‰*‰0‰2‰B‰H‰H‰m‰”‰™‰™‰­‰³‰ɉÚ‰à‰å‰þ‰ŠŠŠ$Š*Š/Š/ŠCŠIŠ_ŠpŠvŠ{Š”ŠšŠªŠ²ŠºŠÀŠÅŠÅŠÛŠáŠ÷Š‹‹‹"‹(‹9‹A‹I‹O‹V‹[‹[‹q‹w‹�‹ž‹¤‹¦‹µ‹»‹Å‹Í‹Õ‹Û‹â‹â‹â‹ô‹ý‹ŒŒŒ#Œ#Œ1Œ9ŒJŒ]ŒdŒjŒrŒxŒˆŒŽŒ–ŒœŒœŒœŒ¡Œ¡Œ¡Œ¡Œ¡ŒÀŒÌŒÑŒÑŒàŒéŒôŒýŒ����.�4�J�[�a�f�x�~�ƒ�œ�º�º�¿�¿�Ë�Ó�Ö�Ü�â�ç�ç� ŽŽŽ+Ž1Ž7Ž7ŽHŽfŽfŽkŽkŽwŽŽ‚މŽ�ޔޔ޴޼ŽÌŽÒŽÙŽ÷Ž��&�.�1�8�>�V�^�v�~���ˆ�Ž�Ž�Ž�­�½�É�Ñ�Ô�Û�á�ñ�� �'�/�2�9�?�W�c�~�†�‰���–�–�–�–�›�›�¤�´�Ê�Ð�è�û�‘‘‘‘#‘?‘E‘Q‘Y‘\‘c‘i‘’‘š‘ª‘°‘·‘·‘·‘¼‘¼‘őݑó‘ù‘’$’*’/’Z’`’s’ª’¼’Ù’á’ç’ì’ì’“““)“)“.“.“H“T“`“k“k“p“p“Š“–“¢“­“­“²“²“È“ΓÚ“à“å“÷“ý“”””)”/”5”<”O”Z”c”o”w”z”€”†”‹”Ÿ”®”¶”Δ֔ٔߔå”ý”•%•?•G•J•P•V•V•g•p•|•„•‡•Ž•”•™•«•º••Ú•â•å•ì•ò• -––1–K–S–V–]–c–c–s–|–ˆ–�–“–™–Ÿ–¤–¸–Ç–Ï–é–ñ–ô–ú–—— —B—^—f—i—o—u—u—†—�—›—£—¦—­—³—¸—Ê—Ù—á—ü—˜˜˜˜,˜4˜V˜s˜{˜~˜…˜‹˜‹˜‹˜‹˜‹˜�˜�˜¦˜¬˜¸˜¾˜ØÕ˜Û˜à˜î˜ú˜™™™™!™'™,™>™M™U™m™u™x™™…™�™¥™Ä™Þ™æ™é™ð™ö™ö™ö™ššš$š'š.š4šKšZšfš�š‰šŒš“š™š±š½šßšüš››››››››››,›G›M›X›]›]›p›†›Œ›—›™›™›¬›Ï›Õ›à›à›ò›û› œœ#œ3œ3œ8œ8œKœaœgœuœ„œ‰œ‰œœœ²œ¸œÆœÕœÚœÚœðœöœ�+�+�U�[�`�l�u�„�„�‰�‰�Ÿ�¥�Â�Ú�Ú�ž -žžž$ž3ž3ž8ž8žNžTžqž‰ž‰ž³ž¹ž¾žÊžÓžâžâžçžçžýžŸ Ÿ8Ÿ8ŸbŸhŸjŸvŸŸŠŸŠŸŠŸŠŸ�Ÿ�Ÿ¦Ÿ·Ÿ¹ŸËŸØŸØŸØŸèŸøŸýŸ! - . 3 H e u ™ © ¯ ¯ ¯ ´ ¹ Πá  ¡/¡5¡7¡<¡M¡\¡Ž¡–¡œ¡ž¡£¡ª¡ª¡³¡Å¡Ø¡á¡ð¡ð¡õ¡ú¡ ¢¢¢ ¢(¢3¢3¢T¢[¢a¢i¢t¢z¢Š¢�¢˜¢£¢©¢©¢®¢³¢º¢Á¢È¢Ï¢Ø¢ç¢ç¢ç¢ì¢ì¢ì¢þ¢£££ £(£0£6£6£6£;£;£F£W£Z£f£o£{£‚£ˆ£�£�£˜£©£¬£¸£Á£Í£Ô£Ú£ߣߣߣߣä£é£é£ô£ø£ø£¤ ¤¤¤¤¤3¤:¤@¤O¤Z¤e¤k¤w¤{¤{¤‡¤�¤“¤“¤ž¤ ¤¶¤½¤äˤÖ¤á¤ç¤ñ¤ô¤ø¤ø¤¥¥ -¥ ¥¥¥$¥'¥'¥2¥4¥R¥Y¥d¥o¥r¥x¥}¥}¥ˆ¥Œ¥Œ¥˜¥¡¥¤¥¤¥¯¥±¥Ç¥Î¥Ô¥ã¥î¥ù¥ÿ¥ ¦¦¦¦$¦'¦'¦2¦4¦J¦Q¦W¦_¦j¦u¦{¦…¦ˆ¦Œ¦Œ¦”¦›¦ž¦ ¦«¦¯¦¸¦»¦»¦ƦȦæ¦í¦ø¦§§ §§§#§'§'§3§<§?§?§J§L§b§i§o§�§Œ§—§�§¢§¢§­§²§²§½§§§ͧЧÔ§Û§à§å§ê§ê§þ§¨¨¨¨%¨-¨1¨E¨L¨P¨P¨]¨i¨q¨w¨‡¨‹¨œ¨®¨¹¨½¨½¨ʨÒ¨Ú¨à¨à¨à¨à¨à¨â¨â¨ð¨÷¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© © ©7©?©K©K©l©{©“©•©¡©®©®©Ñ©Þ©é©ò©û©ª ª ªªªª,ªJªVªVªƒ¬xÝ÷R5R5d5f5j5s55‹5 5 5Ï5Ó5Ø5ä5÷566666$6l_vÇÇÝìñ€ó€€€%€:€'€I€O€h€�€š€³€Ì€Ö€„žpp%p-p3p:pApCpFpMpTpTpepipopop„pŽpŽp–p¯pÒpópøpqq*q5q:qJqMqaqgqlqrqtqzq}qƒqˆq‹q“qœq¬qÏqÝqõqúqþq#r6r;rIrarfrjr�rŸrÂrÕrÚràrårèrêrðrörürsssss"s0sHsMsQsvs†s©s¼sÁsÑsôstt t#tHt[t[tvtvtvt„tœtžtžtžt¬tÄtÆtÆtÔtìtìtþtþtuu*uJuduluwuŠuŽuŽuŽu•u›uµu½uÈuãuåuëuv vv&v1v1vKvH…“¨†¨†¿†Õ†å†ì†‡‡0‡4‡w‡L�žç�ç�û�‚‚ -‚-‚/‚H‚a‚l‚w‚‚4IRŽØŽØ—ؚؗبضعؾØì=ýý?ýBý`ýwýˆýˆý£ý©ý®ý®ýÉýÏýÔýÔýÝýëýþ þ%þ,þ2þ4þQþaþfþmþsþuþuþˆþŽþŽþŽþžþ“þ¯þ¿þÑþÖþÖþÖþÝþäþëþÿÿ#ÿ#ÿ5ÿÌL»¸¦¸¦Ò¦Ý¦è¦ñ¦ù¦ü¦§§§#§'§-§;§X§e§t§y§…§Š§‘§�§¢§¥§¯§§§¿§È§Ù§×§Ï§ç§ð§ö§ö§¨¨¨$¨-¨4¨8¨=¨T¨l¨u¨ƒ¨Ÿ¨«¨«¨Ã¨Ô¨Ô¨Û¨ô¨©©©"©6©?©F©J©U©Z©a©~©«©²©¶©¸©Ã©Ï©Ó©è©ê©û©ªªª)ª8ªQªQªTª\ªaªãªPw‡'O'OCOTOgO~O›O¶O¼OÅOÓOÙOÜOèOŒ ¨b¨b¸bÜbÜbêbêbêbêbóbóbúbc*c2c2c=c=cKc[c[cicococ‡c‡c�c³c (kqP‹P‹^‹j‹z‹�‹‡‹ @KW¿ë¿ëÍëÕëÜëûëìì ì ìì!$/4oâoâ|â‘â–âœâ"$).?â?âLâaâfâlâ#$#(âââ4â9â?â$€ïK**4DZbl‡Œœ²ºÄßäú   " , 6 @ J T ^ h r | ’ œ ¦ ° º Ä Î Ø â ø  " , 6 @ J T ^ h r | † � š ¤ ® ¸ Â Ì Ö à ê ô þ !!!&!0!:!D!N!\!%¤Cø�ø�žž*ž;žMžOžVž\žlžwž�žŒž£ž¦ž¨žºžÀžÐžÚžäžëžöž ŸŸŸ)Ÿ)Ÿ)Ÿ=Ÿ&$5:ŸâŸâ­âÂâÇâÍâ'¤Di@Ÿ@ŸVŸ]ŸrŸƒŸ•Ÿ—ŸžŸ¤Ÿ´Ÿ¿ŸÉŸÔŸëŸîŸðŸ    # - 4 ? S [ [ q q q † ((&,ò/ò/00000)0]e'N'N=NPN_NeNhNpN*  ßn%n%�%˜%ž%«%²%Î%Ô%Ô%Ô%á%ã%î%ø%ÿ%&& &)&/&@&@&K&U&U&g&m&}&ƒ&ˆ&�&�&°&¶&È&Û&á&ä&ê&ê&ì&ò&ø&ú&ú&ú& ''''/'9'9'M'V'\'b'x'}'…'›'Ÿ'Ÿ'§'­'³'½'Ä'Ë'Ô'æ'æ' ((((-(@(F(J(P(V(\(\(^(b(h(n(t(y(y(y(y(¤(µ(µ(Ì(Ù(Ý(å(÷())) )$)*)*)<)M)b)v)~)�)“)¤)¨)®)Ç)É)Ï)Ü)Þ)ê)***<*G*M*S*Y*b*h*z*‹*“*—*¨*¬*²*Ë*Í*Ó*à*â*î* ++++'+-+J+=+d+m+s+s+ˆ+�+�+”+ž+³+¸+¸+¸+Õ+×+ô+ö+,,!,%,,,O,U,[,g,~,…,‹,–,›,›,¢,¦,°,¾,À,È,Í,Õ,à,æ,õ,ú,-- --!-8-H-U-`-|-~-š-š-¡-¶-»-Ä-Ñ-Ö-Ü-á-á-è-ì-ö-..... .,.3.7.?.G.O.a.o.t.€.€.ˆ.ˆ.«.«.¹.¿.Ä.È.Í.Í.Í.Í.Ó.Õ.Õ.ø.þ./ /!/#/#/#/./././3/\0+4-vfÊfʀʄʜʤʬʶʺÊÁÊÇÊÛÊãÊèÊëÊöÊË ËË Ë!Ë7Ë>ËEËPË[Ë]ËhËsËuË�ËŠËŠË Ë«ËÃËÉËÒËãËéËòËÌ -Ì -ÌÌÌ!Ì&Ì8ÌCÌGÌUÌWÌ[ÌjÌjÌjÌ{Ì{̘̀̒ÌÍ,Ô@–æ–æ¬æ³æ¶æÚæÚæ÷æ -çç0ç5ç5çSçaçtç‡ç�ç�ç‘ç‘ç‘ç¤ç¦ç¦ç¦ç­çÀçÓçÓçÓçæçñçèè è#è*è?èRèYèYè\è�è-LAP$$$!$-$H$M$m$o$Š$¥$¥$­$´$Û$.P~ŽØ‹Ø‹æ‹ó‹ŒŒŒ,Œ9ŒGŒYŒdŒrŒxŒ~Œ/4 -77(747E7W7`7n7t70|ºU– – ¸ ¿ Í Ø þ þ     < C C R a } ˆ ˆ • � ® · Õ à â û    . 7 B G M T | � � ˜ ˜ Ÿ ® Å Å Ô Ý ñ ø ÿ CLSXco~’—Ÿ«½½Ùàèø -(.BGWk}‚’¥­Áßöú9KQ\hxˆŽ——©­¹Ðìþ+;MSSXZZ__ntzz~÷1ŒÄãÜÜ2Ü>ÜBÜFÜMÜTÜcÜnÜtÜyÜ{܇܎ܖܜܢܦܦܼܵÜÄÜÊÜÐÜÒÜÒÜÞÜ28 */*/8/>/J/U/f/p/w/}/3@t€ í í-í8í?í^íkíkínípíví4ÌSÇ Ç í  - - - - +$LK,"PrsNoWarn",A="FL:::/Compiler/PrsStmt.HC.Z,791",BI=269$ +H2@2#2#;#A#\#a#Œ#Ž#Ã#­#Ó#Ú#ë#þ#¨­ÓŸ`Ÿ`µ`½`È`Ô`ô`Ö`a a a3a:aeasasa aÂaÚaÇaéabb,b3b^b^beb‰bŸbŸbŸb©bH>L�ý�ý©ý³ý·ý»ýÀýÂýÚýòýòýüýp©ÁŸŸÉËÒØÞàæì$)+0:Oex�¯(åå2åSåWåWå_å8îäîä÷äüäåååååd`µÖØÖØôØøØÙÙÙÙ"Ù"Ù/Ù1Ù>Ù@ÙLÙLÙgÙuÙuـهٖ١٧٬ٮٺÙÁÙÐÙÛÙáÙæÙèÙôÙ$ÚJÚZÚjÚzÚ|ڌڜڬڬڱÚÄÚËÚÒÚÒÚÒÚÒÚÙÚïÚûÚÛÛ ÛÛÛÛ>ÛEÛ[ÛgÛmÛsÛyÛ{Û{Û‰ÛD¶ÃŽÛŽÛ¤Û§ÛªÛ·Û½ÛÊÛÍÛÐÛÖÛØÛâÛ ,cjàŠàŠîŠøŠ‹‹‹‹ + imfft‰� P ‚7‚7�7Ÿ7»7Á7Ó7Ó7Þ7ç7í7ô7ú7 ”;\÷K÷KÿKLL6LSLtL}LŽL²LÉLÉLèL÷LM MMFMWM[McMcMvM†MŠMŽM Œ×öÞÞþ +$$PfzˆŸ¥±¶Äàéùû     |1’"’"¨"±"¼"Ö"Ö"Ù"è"î"÷"ù"ÿ"# +###!#$#$#.#0 '(‰(‰6‰V‰\‰b‰b‰h‰„“°È¡È¡Ü¡ã¡ê¡î¡¢%¢,¢=¢b¢m¢x¢z¢…¢ª¢µ¢À¢Â¢É¢Ò¢Ô¢ß¢æ¢£("·à·àÆàÝàøàøàþà WàWàfà|à‚à ˆP´P´u´|´“´Ÿ´ª´¼´Í´¾´¼´í´µµµ!µ-µ7µ>µEµIµKµQµ]µgµnµuµyµyµƒµˆµ“µ¥µ¶µ§µ¥µÖµ÷µ¶ +¶¶¶&¶-¶4¶8¶:¶@¶L¶V¶]¶d¶h¶h¶u¶ƒ¶“¶¥¶¶¶§¶¥¶Ö¶÷¶· +···&·-·4·8·:·@·L·V·]·d·h·h·r·‚·”·¥·–·”·Å·Ì·Ò·Þ·è·ï·ö·ú·ü·¸¸¸ ¸&¸*¸*¸4¸B¸K¸d¸p¸t¸t¸w¸€¸ö¸ÔoƒoƒŒƒZ©”ƒ£ƒƃуãƒêƒûƒ„„ +„„„H„H„]„_„_„k„s„w„„„„„�„˜„œ„©„©„©„Å„Єá„á„æ„þ„ ………#…(…(…-…E…T…Y…_…j…o…o…}…†…’…š…¢…ª…­…³…¸…Á…Ó…Ü…í…ý…ý…† +††††† † † †&†)†0†;†P†u†Œ†™†¡†©†µ†Á†džΆ׆Û†Þ†ê†ð†÷†ü†ü† +‡‡‡'‡'‡/‡7‡@‡O‡T‡T‡[‡f‡l‡t‡z‡…‡ЇЇ™‡¤‡¶‡¼‡ćʇχÚ‡ì‡ò‡ú‡ˆˆˆˆ ˆ*ˆ0ˆ2ˆBˆHˆHˆmˆ”ˆ™ˆ™ˆ­ˆ³ˆɈÚˆàˆåˆþˆ‰‰‰$‰*‰/‰/‰C‰I‰_‰p‰v‰{‰”‰š‰ª‰²‰º‰À‰ʼnʼnÛ‰á‰÷‰ŠŠŠ"Š(Š9ŠAŠIŠOŠVŠ[Š[ŠqŠwŠ�ŠžŠ¤Š¦ŠµŠ»ŠÅŠÍŠÕŠÛŠâŠâŠâŠôŠýŠ‹‹‹#‹#‹1‹9‹J‹]‹d‹j‹r‹x‹ˆ‹Ž‹–‹œ‹œ‹œ‹¡‹¡‹¡‹¡‹¡‹À‹Ì‹Ñ‹Ñ‹à‹é‹ô‹ý‹ŒŒŒŒ.Œ4ŒJŒ[ŒaŒfŒxŒ~ŒƒŒœŒºŒºŒ¿Œ¿ŒËŒÓŒÖŒÜŒâŒçŒçŒ ���+�1�7�7�H�f�f�k�k�w��‚�‰���”�”�´�¼�Ì�Ò�Ù�÷�ŽŽ&Ž.Ž1Ž8Ž>ŽVŽ^ŽvŽ~Ž�ŽˆŽŽŽŽŽŽŽ­Ž½ŽÉŽÑŽÔŽÛŽáŽñŽ� �'�/�2�9�?�W�c�~�†�‰���–�–�–�–�›�›�¤�´�Ê�Ð�è�û�����#�?�E�Q�Y�\�c�i�’�š�ª�°�·�·�·�¼�¼�Å�Ý�ó�ù�‘$‘*‘/‘Z‘`‘s‘ª‘¼‘Ù‘á‘ç‘ì‘ì‘’’’)’)’.’.’H’T’`’k’k’p’p’Š’–’¢’­’­’²’²’È’Î’Ú’à’å’÷’ý’“““)“/“5“<“O“Z“c“o“w“z“€“†“‹“Ÿ“®“¶“ΓÖ“Ù“ß“å“ý“”%”?”G”J”P”V”V”g”p”|”„”‡”Ž”””™”«”º””Ú”â”å”ì”ò” +••1•K•S•V•]•c•c•s•|•ˆ•�•“•™•Ÿ•¤•¸•Ǖϕé•ñ•ô•ú•–– –B–^–f–i–o–u–u–†–�–›–£–¦–­–³–¸–Ê–Ù–á–ü–————,—4—V—s—{—~—…—‹—‹—‹—‹—‹—�—�—¦—¬—¸—¾—×Õ—Û—à—î—ú—˜˜˜˜!˜'˜,˜>˜M˜U˜m˜u˜x˜˜…˜�˜¥˜ĘÞ˜æ˜é˜ð˜ö˜ö˜ö˜™™™$™'™.™4™K™Z™f™�™‰™Œ™“™™™±™½™ß™ü™šššššššššš,šGšMšXš]š]špš†šŒš—š™š™š¬šÏšÕšàšàšòšûš ››#›3›3›8›8›K›a›g›u›„›‰›‰›œ›²›¸›Æ›Õ›Ú›Ú›ð›ö›œ+œ+œUœ[œ`œlœuœ„œ„œ‰œ‰œŸœ¥œœÚœÚœ� +���$�3�3�8�8�N�T�q�‰�‰�³�¹�¾�Ê�Ó�â�â�ç�ç�ý�ž ž8ž8žbžhžjžvžžŠžŠžŠžŠž�ž�ž¦ž·ž¹žËžØžØžØžèžøžýž!Ÿ-Ÿ.Ÿ3ŸHŸeŸuŸ™Ÿ©Ÿ¯Ÿ¯Ÿ¯Ÿ´Ÿ¹ŸΟ០ / 5 7 < M \ Ž – œ ž £ ª ª ³ Å Ø á ð ð õ ú  ¡¡¡ ¡(¡3¡3¡T¡[¡a¡i¡t¡z¡Š¡�¡˜¡£¡©¡©¡®¡³¡º¡Á¡È¡Ï¡Ø¡ç¡ç¡ç¡ì¡ì¡ì¡þ¡¢¢¢ ¢(¢0¢6¢6¢6¢;¢;¢F¢W¢Z¢f¢o¢{¢‚¢ˆ¢�¢�¢˜¢©¢¬¢¸¢Á¢Í¢Ô¢Ú¢ߢߢߢߢä¢é¢é¢ô¢ø¢ø¢£ £££££3£:£@£O£Z£e£k£w£{£{£‡£�£“£“£ž£ £¶£½£ãË£Ö£á£ç£ñ£ô£ø£ø£¤¤ +¤ ¤¤¤$¤'¤'¤2¤4¤R¤Y¤d¤o¤r¤x¤}¤}¤ˆ¤Œ¤Œ¤˜¤¡¤¤¤¤¤¯¤±¤ǤΤÔ¤ã¤î¤ù¤ÿ¤ ¥¥¥¥$¥'¥'¥2¥4¥J¥Q¥W¥_¥j¥u¥{¥…¥ˆ¥Œ¥Œ¥”¥›¥ž¥ ¥«¥¯¥¸¥»¥»¥Æ¥È¥æ¥í¥ø¥¦¦ ¦¦¦#¦'¦'¦3¦<¦?¦?¦J¦L¦b¦i¦o¦�¦Œ¦—¦�¦¢¦¢¦­¦²¦²¦½¦¦¦ͦЦÔ¦Û¦à¦å¦ê¦ê¦þ¦§§§§%§-§1§E§L§P§P§]§i§q§w§‡§‹§œ§®§¹§½§½§ʧÒ§Ú§à§à§à§à§à§â§â§ð§÷§¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨ ¨7¨?¨K¨K¨l¨{¨“¨•¨¡¨®¨®¨ѨÞ¨é¨ò¨û¨© © ©©©©,©J©V©V©�«xÝ÷Z5Z5l5n5r5{5‡5“5¨5¨5×5Û5à5ì5ÿ5 6 666"6,6lbyg|g|}|Œ|‘|¦|“|µ|¸|¸|Å|Ú|Ç|é|ï|}!}:}S}l}v}„ž§l§lÅlÍlÓlÚlálãlælílôlôlm mmm$m.m.m6mOmrm“m˜m¹m¾mÊmÕmÚmêmímnn nnnnn#n(n+n3nq>q>qLqdqfqfqtqŒqŒq�q�q¦q³qÉqéqr rr)r-r-r-r4r:rTr\rgr‚r„rŠr¤r¬r·rÅrÐrÐrêrH�›x†x†�†¥†µ†¼†Ó†î†‡‡G‡L’¡‡~‡~›~¨~¾~ª~Í~Ï~è~  4IR^Ø^ØgØgØjØx؆؉؎Øì=oûoû—ûšû¸ûÏûàûàûûûüüü!ü'ü,ü,ü5üCü`üxü}ü„üŠüŒü©ü¹ü¾üÅüËüÍüÍüàüæüæüæüöüëüýý)ý.ý.ý.ý5ý<ýCýXý_ý{ý{ý�ýÌM¼ˆ¦ˆ¦¢¦­¦¸¦Á¦É¦Ì¦Ó¦×¦à¦ó¦÷¦ý¦ §(§5§D§I§U§Z§a§m§r§u§§w§�§˜§©§§§Ÿ§·§À§Æ§Æ§Ô§×§ë§ô§ý§¨¨ ¨$¨<¨E¨S¨o¨{¨{¨“¨¤¨¤¨«¨Ä¨Ð¨Ø¨ë¨ò¨©©©©%©*©1©N©{©‚©†©ˆ©“©Ÿ©£©¸©º©Ë©Õ©à©ê©ù©ª!ª!ª$ª,ª1ª³ªPw‡�N�N«N¼NÏNæNOO$O-O;OAODOPOŒ xbxbˆb¬b¬bºbºbºbºbÃbÃbÊbåbúbcc c cc+c+c9c?c?cWcWc]cƒc (kq ‹ ‹.‹:‹J‹Q‹W‹ @^j7ë7ëEëMëTësë€ë€ëƒë…ë‹ë!$/4_á_álá�á†áŒá"$)./á/á<áQáVá\á#$#(ÿàÿàá$á)á/á$€ïK**4DZbl‡Œœ²ºÄßäú   " , 6 @ J T ^ h r | ’ œ ¦ ° º Ä Î Ø â ø  " , 6 @ J T ^ h r | † � š ¤ ® ¸ Â Ì Ö à ê ô þ !!!&!0!:!D!N!\!%¤CÈ�È�Þ�å�ú� žž ž&ž,ž<žGžQž\žsžvžxžŠž�ž žªž´ž»žÆžÛžãžãžùžùžùž Ÿ&$5:�á�á�á²á·á½á'¤DiŸŸ&Ÿ-Ÿ4ŸBŸSŸeŸgŸnŸtŸ„Ÿ�Ÿ™Ÿ¤Ÿ»Ÿ¾ŸÀŸÒŸÙŸéŸóŸýŸ  # + + A A A V ((&,ú/ú/000 0%0)0]e�M�M¥M¸MÇMÍMÐMØM*ä Õ>%>%`%h%n%{%‚%ž%¤%¤%¯%¹%¹%Æ%Ï%Þ%é%ï%ù%ÿ%&&&%&%&7&=&M&S&X&_&_&€&†&˜&«&±&´&º&º&¼&Â&È&Ê&Ê&Ê&Û&å&ê&ê&ÿ& ' ''&','2'H'M'U'k'o'o'w'}'ƒ'�'”'›'¤'¶'¶'Û'ß'å'ë'ý'((( (&(,(,(.(2(8(>(D(I(I(I(I(t(…(…(œ(©(­(µ(Ç(ç(ç(í(ð(ô(ú(ú( ))2)F)N)_)c)i)v)x)„)¢)¨)³)Ö)á)ç)í)ó)ü)**%*-*1*7*D*F*R*p*v*|*‚*‹*‘*®*¡*È*Ñ*×*×*ì*ñ*ñ*ø*+++++9+;+X+Z+w+}+…+‰+�+³+¹+¿+Ë+â+é+ï+ú+ÿ+ÿ+, +,,",$,,,1,9,D,J,Y,^,d,i,q,v,…,œ,¬,¹,Ä,à,â,þ,þ,-- -(-5-:-@-E-E-L-P-Z-h-j-r-v-z-„-�-—-›-£-«-³-Å-Ó-Ø-ä-ä-ì-ì-...#.(.,.1.1.1.1.7.9.9.\.b.h.o.….‡.‡.‡.’.’.’.—.À/+4.w6Ê6ÊPÊTÊlÊtÊ|Ê†ÊŠÊ‘Ê—Ê«Ê³Ê¸Ê»ÊÆÊÑÊÙÊäÊïÊñÊËËË Ë+Ë-Ë8ËCËEËQËZËZËpË{˓˙ˢ˳˹ËÂËÔËÚËÚËâËæËñËöËÌÌÌ%Ì'Ì+Ì:Ì:Ì:ÌKÌKÌPÌbÌhÌÖÌ,Ô@fæfæ|æƒæ†æªæªæÇæÚæíæççç#ç1çDçWç_ç_çaçaçaçtçvçvçvç}ç�ç£ç£ç£ç¶çÁçÔçêçïçóçúçè"è)è)è,èQè-LAP$$$!$-$H$M$m$o$Š$¥$¥$­$´$Û$.P~ލ‹¨‹¶‹Ã‹Ñ‹ã‹î‹ü‹ ŒŒ)Œ4ŒBŒHŒNŒ/4 +"7"707<7M7_7h7v7|70|»Vf f ˆ � � ¨ Î Î × Ù Ù à    " 1 M X X e m ~ ‡ ¥ ° ² Ë Ñ Ü ì þ     $ L Q _ h h o ~ • • ¤ ­ Á È Ï Ô ß å í #(3?Nbgo{��©°¸ÈÚàééøþ';MRbu}‘¯ÆÊÖí !,8HX^ggy}‰ ¼ÎÔßëû ##(**//>DJJNÇ1ŒÄãæÛæÛÜÜÜÜÜ$Ü3Ü>ÜDÜIÜKÜWÜ^ÜfÜlÜrÜvÜv܅܌ܔܚܠܢܢܮÜ28 2/2/@/F/R/]/n/x//…/3@‡“—ì—ì¥ì°ì·ìÖìãìãìæìèìîì4ÜS  EX_fmsu|ƒ††˜˜ªµÉÑÚâçí  ( - F ^ b b g p z Ž – Ÿ § ¬ ³ Å Õ ê ì   -$ -+ -. -. -@ -@ -R -] -q -y -‚ -Š -� -• -« -» -Ð -Õ -î -  -  -   " 6 > G O T [ m } ’ ” ­ Å É É Ý å î ö û   ' < A Z r v ‰ ‰ ‰ Ž ° Ò Ý ã û   # 7 ? H P R X j z � ‘ ª  Æ Æ Ú â ë ó ø ÿ %:?Xpt‡‡‡Œ®ÐÛáù#-8JZqˆŸ¶¶Éäää##,6C]kr…‡¦µ®ÍÝ÷÷5D{ˆ.BKQccgjr6\ObhŠhŠˆŠ—Š Š©Š­Š±Š½ŠÂŠÇŠÇŠØŠÜŠäŠüŠÿŠ ‹70üöäöäÿäå åååå8tÚ‡‡©°·ÂØØêJ$Yp�•™ž³ËÐØÜîá !%%*;ƒ]’°»ÁÕíò $+=Mce~–šš¯ÇÌÔØçÚ----@FPWj……¡±¿¿Óáï;JCbryа¡ÖØMR]cn�ª—¹Ðáü*L�n�®¹¿Óëð ");Kac|”˜˜ºÓçëúúú $7RRRn~ŒŒ ®Ç¼Úíò   8 H Y w w ™ ™   à à à ã 9DmzÆÆÖêóù  :lwŽ×€×€í€ü€���%�(�(�5�J�7�Y�_�x�‘�ª�Ã�Ü�æ�;<‰”vv†— ¦ªµ<”)FïFïNïRï^ïoïqï�ïŒïžï©ï´ïÃïÔïÛïôïøï ð ððð-ð6ðDðXðtðyð–ð=d(=˜‰˜‰¤‰¸‰»‰Ï‰×‰Û‰å‰ï‰÷‰ú‰Š>4u¾8G8G^GaGeGrG{G†G–GžG¨GÐGÐGàGåGåGõGúGúG -HHH H$H$H4H9H9HIHNHNH^HcHcHsHxHxHˆH�H�H�H�H™H²HÀH×HêHìHòHôH÷HI I II#I#I.I>IKIcIkIqIqI…I…IŽI‘IQJ?Ä n‡¬‡¬¤¬¬¬¯¬½¬ˬà¬é¬­­/­:­K­O­a­d­o­x­„­—­È­½­£­Ø­ï­®®®>®S®w®‹®�®®®”®É®Ì®Ñ®Ô®Ô®Û®ñ®ø®¯ -¯¯&¯9¯9¯Q¯U¯‚¯‚¯š¯Ÿ¯Ÿ¯¯¯³¯įί߯é¯ü¯°°°°&°0°A°K°^°j°o°o°o°‘°¢°§°´°ɰɰΰذç°ì°ò°÷°÷°ü°±±± ±%±%±+±1±6±6±>±Q±]±j±v±…±�±•±ž±µ±ɱÚ±ç±ì±²².²;²C²R²\²b²k²t²t²y²y²y²y²y²‰²‰²‰²¡²·²¿²Ú²ë²ø²ú²³ ³ ³ ³³%³*³*³1³?³D³\³h³z³†³Œ³”³š³£³ɳÕ³Û³á³ð³ø³´-´>´K´M´[´[´`´`´g´u´z´�´™´¥´«´±´º´¿´¿´¿´¿´¿´×´Ü´Ü´Ü´Ü´Ü´í´í´í´í´í´í´í´í´í´í´µµ#µ>µOµ\µ^µkµ{µ€µ€µ€µ‰µ£µ¯µ´µÖµâµâµçµçµçµçµçµçµçµçµüµ¶¶¶¶¶¶¶)¶;¶S¶h¶‰¶ª¶µ¶ƶ˶˶˶Ô¶ú¶···;·T·\·d·r·œ·¥·«·Ì·å·å·å·å·å·¸@¸I¸O¸U¸Z¸c¸l¸q¸q¸q¸q¸€¸”¸²¸¸ȸ͸͸à¸ô¸¹-¹3¹3¹8¹8¹G¹[¹y¹‰¹�¹”¹”¹§¹»¹á¹ô¹ú¹ú¹ÿ¹ÿ¹ÿ¹º-º5ºPºaºnºpºº�º�º�º�º�º•º•º•º•º•º•º•º•º•º•º•º•º•º•º•º•º¤º³º¾ºÀºÀºɺ˺˺ߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺߺáºáºøº» » »»»%»A»Y»h»t»Š»¤»§»±»½»ã»¼#¼G¼I¼\¼мb¼¥¼¥¼¨¼¸¼À¼Û¼ì¼ï¼ ½½#½;½;½f½i½x½Œ½­½Á½ݽɽù½¾,¾a¾_¾T¾I¾:¾o¾o¾o¾r¾w¾z¾”¾¢¾оò¾ò¾¿ ¿/¿C¿d¿x¿”¿€¿°¿°¿οÀÀö¿ë¿Ü¿ÀÀÀÀÀÀ À0ÀQÀ]À°Ã@À„°7È7ÈMÈQÈ\ÈcÈnȂȂÈ�ȞȥȲȾÈËÈÏÈàÈàÈéÈîÈöÈÉÉ#É.ÉAÉAÉYÉYÉtɠɠɴɶɶÉÀÉÈÉÈÉÒÉÚÉÚÉÚÉëÉëÉëÉñÉùÉÿÉÊÊ -ÊÊÊÊ!Ê!Ê7ÊGÊQÊ`ÊeÊmÊmÊrÊrÊyÊ�ÊŸÊ©Ê±Ê·ÊÆÊËÊÓÊÙÊÙÊÞÊåÊðÊ$Ë3Ë=ËEËKË`ËfËkËkËkËkËkËkËkËkËkËv˄˔˚ˢ˱˶ËÃËËËÐËÐËÐËØËáËêË÷ËÿË ÌÌJÌRÌaÌkÌ…Ì‹Ì�Ì�̗̪̲ÌÇÌÏÌ×ÌìÌîÌùÌÍÍÍÍ/Í7Í>ÍDÍJÍNÍWÍ\Í€ÍŒÍ”Í©ÍµÍºÍÆÍÑÍÖÍÖÍÖÍìÍ ÎÎÎ'Î/Î7ÎLÎQÎ\ÎdÎyÎ~Î~΢ήζÎËÎ×ÎÜÎèÎóÎøÎøÎøÎøÎøÎøÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏ Ï.Ï>ÏDÏLÏ[Ï`ÏhÏpÏrÏzωÏ�Ï—ÏŸÏ¡Ï©ÏÆÏÏÏ×ÏßÏæÏúÏÐ ÐÐÐ(Ð0Ð>ÐCÐHÐZЎЖХЯÐÉÐÑÐÖÐÖÐÖÐßÐèÐëÐõÐÑÑÑ)Ñ;Ñ;Ñ;ÑFÑKÑhÑmÑmÑvÑ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{Ñ{цђѪѽÑÅÑÔÑÙÑáÑèÑõÑþÑÒÒÒÒÒ#Ò+ÒIÒQÒTÒVÒfÒpÒpÒpÒrÒ‡Ò˜Ò›ÒžÒ¦Ò«Ò«Ò´Ò¹ÒÁÒÈÒÕÒêÒñÒÓÓ+ÓDÓYÓnÓuÓuÓzÓzÓzÓzÓzÓzÓzÓ‚Ó�Ó™Ó¨Ó­Ó­ÓµÓ½ÓÊÓÏÓÏÓÏÓÓÓØÓØÓèÓíÓíÓíÓùÓÔÔÔÔ,Ô;ÔCÔTÔ\ÔԅԌԎԔԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛԛÔ�Ô�Ô¸ÔÂÔÐÔÐÔÕÔàÔçÔÕÕÕÕÕ Õ=ÕKÕA×Ax[G×G×]×d×k×v×}׎טןש׼×Ä×Ä×ß×ù×ÿ×ØØØØ&Ø-Ø0Ø5Ø@ØJØ\ØbØxØØ‡Ø�ؤؤؤزØÙØâØêØüØÙÙÙÙÙ+Ù1ÙGÙNÙVÙ]Ùrككييي٘ٿÙÌÙÕÙÝÙïÙ÷Ù÷Ù÷ÙÚ Ú ÚÚÚ5ÚAÚ†ÚBt`¹—Ý—Ý¯Ý¿ÝÆÝÍÝØÝëÝîÝöÝýÝÞÞÞ)Þ4Þ7ÞBÞXÞcÞnÞyÞ„Þ‹ÞžÞªÞÇÞÐÞØÞøÞûÞßßßß#ß2ß8ß@ß@ßLßZßißq߀߈߫߱߷߹߿ßÅßÅßÅßêßïß àààà#à'à2àLàXàhà{à—à¬à´à¾àÝàñàñàeáC ?C11‰1‘1–1DÑÒÿZÿZ [+[<[+[V[d[d[t[}[„[ˆ[‘[‘[™[�[½[Ë[×[Ý[è[ \ \\(\.\5\:\:\M\X\i\t\\†\�\�\�\¯\´\´\Â\Ç\Ç\Ø\Ø\ë\ð\]]]%]9]9]>]>]L]Q]Q]V]]]e]l]n]v]}]}]Œ]’]Ÿ]¦]®]Ò]Ò]Ú]é]ô]û]ý]^ ^%^*^*^*^=^B^Q^X^a^v^Š^Š^�^�^—^­^²^Æ^Í^Ò^Ò^Þ^í^ÿ^_)_4_N_`_r_�_ _«_°_¿_Ó_Ú_á_ô_ö_```'`5`E`L`c`j`v`‡`ž` `¬`·`¹`¹`Ä`Ø`å`í`ï`aaa-a;a]adapaŽaŽaŽa–a¡a¥a­a±a¹aÀaÐaÛaùaþabbb#b(b(b7bDbRb]bhbvb|b‚bˆb‘b—b¦b¾bÆbÒbàb÷bùbc ccc9c?cEcKcTcecŒc”cžc¬cÄcËc×cæcûcûcd d d%d%d%d%d/eEDQ^GG[h~j��§¿ÇFœfÉ¿U¿UáUëUV"V-VFVKVOVWV`VoVvVV„V™VªVÉVÑVÓVòVúV WWW!W(W0W6W8WIWNWdWPWsWyWyW�WŠW™W¸W¿WÁWàWçWçWçWþWXXX%X;X0XSXXXiXnX„XpX“X™X X¨X®X°XÁXÆXÜXÈXëXñXñXùXYY Y Y$YTY]YiYmY{Y‘Y†Y©Y©Y»YG ;zÏâÏâîâ÷âúâ ã"ã$ã-ã2ãSãqã€ãžã²ãÊãÑã÷ãä$äAäRäiämämäqävä{ä…äˆä’ä—ä°ä³ä³ä³ä³ä¸ä¾äÚäèäôäýäåå"å>åIåUå^årårå�å†å†å”åHP‡—�C�C°C�CÒC¿CáCðCøCDDDDD=DCDIPÅÕgügü{ü€ü�ü�ü–üÃüÙüÅüöüèüýýJŒ¥Äßúßúû>û>ûQûUûwû‹û�û�û—ûŸû§û¼ûÈûÙûÞûïûüü -ü -ü -ü&üDüDüaüKP�­·=·=à=â=ð=ö=> >/>>>L>W>Z>j>Lè7Ÿ0Ÿ0Ê0Í0Ð0Ö0Û0ò0 1 1D1`1c1‚1œ1®1»1Ñ1ä1é1ô1ü1ü12222+212P2o2q2†2Œ2«2Ê2Ò2Ý2Ý2ç2ç2ù273O3a3M$ g]g]’]{]œ]¤]NLw†ÍÍÍ-Í>ÍOÍVÍ^ÍnÍyÍŠÍ�ÍÂÍOTHY`e`erete}e†e”e™e¢e¥eªe¸eÂeÅeÏeP¨!G¸c¸cÈcÑcäcñcýc dd!d8d8dGdRd[dbdkd‚d™džd°d¿dËdÝdÝdæd e e ee e:eFeIe`eQhî„PpPpiptp„pÍpÔpèpïp÷pÿpqqqq"q*q1q8qWqoqxqxq­q×qàqrr9rcror‘r“ršr¡r¡rÄràrs#sJsfs�s©sÐsìst/tVtVtetrtwtwt†t“t˜t˜tŸtªt¼tÔtìtuuuu u uu u u u0u>uQufu¢u©u©u©u±uÎuÜuúuv vv'vAv]v]v]vov}v™v·v·v·vÂvÅvôvöv ww$w-w/wwKwMwZwZw~w€w‡w˜w¡w£w±w³wÁwÃwÑwÑwñwñwñwñwxExkxsxwxxƒx‘xŸx¡x©x­x±x¹xÇxÕxÕxïxúxy$yDy]yhyryyy’yžy¥y¾y¾yÐyÕy×yÝyîyÿyzz&z/z1z?zAzOzQz_z_z_zƒzƒz¢z©z°z³z¿zÂzÐzÔzâzæzôzøzøz{{{+{>{E{`{€{“{¢{¤{³{µ{Ä{Î{Î{Ü{å{û{|'|,|U|…|Š|˜|š|¨|±|Ë|Í|Ï|Ö|ç|ð|ò|}}}} } }@}@}@}@}@}_}_}_}j}†}«}Ä}É}É}É}ë}ð}ð}ð}~~~~4~9~9~@~B~B~J~L~L~S~S~V~[~z~�~µ~Ñ~å~ê~ê~#,FHHMHnppxs³³³ÒÒÒóøøø€ € € €?€D€D€D€c€h€h€ƒ€‘€“€¢€«€Å€Ç€Ç€Ì€Ç€í€ï€ï€÷€ò€2�2�2�=�=�g�g�‘�©�Á�Ì�â�ö�‚'‚?‚]‚_‚p‚�‚¤‚«‚£†R| $÷è÷èé#é9éSékévé’é’é’éŸéºé¼é¼é¼éÉéäéæéæéôéêêê,ê>êSædÞÜÞÜøÜÝ!Ý!Ý'Ý/Ý7Ý?ÝGÝMÝZÝZÝtÝyÝyÝ݄݄݊Ý�Ý�ݕݚݚݲÝÅÝËÝÐÝÐÝÙÝùÝùÝùÝÞÞÞ Þ Þ ÞÞÞÞÞÞ Þ Þ'Þ)Þ)Þ/Þ/Þ6Þ6Þ>ÞDÞJÞRÞRÞRÞRÞ^ÞfÞnÞvÞ~Þ†ÞŽÞ”Þ¬Þ»ÞÅÞÈÞÈÞÒÞØÞÞÞÞÞâÞêÞñÞõÞýÞß ßßß"ß*ß.ß4ß?ßEßRß^ßdßlßpßwß߇ߋߑߙߠߨ߰ߴߺßÅßÊßàßñßößùßžàTL”£x‡x‡‘‡“‡š‡°‡À‡Æ‡Þ‡ö‡ù‡ ˆSˆUÔ*[–ð–ðªð¿ðÎðÒðàðéðøðøðñññ(ñ/ñ?ñVñmñsñxñ|ñ�ñ�ñ¥ñ§ñ±ñÕñàñâñûñÿñ òòòò(ò0òCò­òV$']']R];]\]d]WPÍÝ·F·FØFÅFúFçF GG G+G-G8GCGCGeGkGX,n×n×w×}ׅ׎חל×Y�בבø‘ ’’(’[’h’z’š’ª’ª’·’·’¾’Ñ’Ï’ß’ß’ê’ô’ú’““““0“7“:“O“T“_“j“„“ž“¯“µ“»““à“È“é“ï“õ“ý“””&”,”2”:”:”A”_”G”h”n”t”|”œ”„”¥”«”±”¹”¹”¹”ϔϔϔϔڔä”í” ••*•/•@•T•Y•Y•d•l•w•€•Œ• •°•ŕڕ÷•ü•ü•–––'–7–F–c–x–�–˜–�–�–¨–¾–Ó–ß–ð–õ–———%——=—B—B—Q—V—V—e—j—j—{—€—€—‘—–—–—©—¸—½—½—Зß—ä—ò—ä—˜ ˜˜ ˜-˜2˜@˜2˜T˜Y˜g˜Y˜{˜€˜€˜�˜¢˜Ęɘטɘë˜ð˜ð˜ ™™4™9™G™9™[™`™`™}™‚™¤™©™·™©™Ë™ЙЙí™ò™šš'šš;š@š@š[š`š`š{š€š€š›š š š»šÀšÀšÛšàšàšûš››› › ›;›@›@›Q›V›V›g›l›l›x›ƒ›˜›�›�›©››Ç›í›ô›þ›œœœ3œ>œCœTœ_œgœlœlœpœtœ{œ…œ�œ�œ¢œ§œ§œ§œ«œÄœÍœÍœóœøœøœ���7�D�O�Z�e�w�ƒ�Œ�‘�‘�‘�¢�¿�Ê�Ô�ß�ä�ï�÷�ü�ü�žžž#ž3žKžcžwž|ž|ž‡žšž¤ž¯žОÜžížòžŸŸ Ÿ ŸŸ'Ÿ/Ÿ4Ÿ?ŸOŸ^Ÿ{Ÿ�Ÿ¥Ÿ°ŸµŸÀŸÈŸÍŸØŸèŸ÷Ÿ ) > > > > C H H T e e Š Œ © © ³ Ç Ñ Ó ß ç ¡¡ ¡*¡M¡^¡o¡€¡‹¡£¡³¡¸¡¸¡áȡȡСÛ¡à¡à¡è¡ó¡ø¡ø¡¢!¢ -¢¢9¢>¢>¢F¢g¢P¢N¢¢„¢˜¢„¢°¢µ¢µ¢¢Ç¢Ç¢Ï¢Ô¢Ô¢æ¢ø¢ý¢ý¢£ý¢)£.£.£6£;£;£N£S£S£f£k£k£…£•£š£š£´£Ä£É£É£ã£ó£ø£ø£¤"¤'¤>¤'¤V¤[¤[¤f¤k¤§¤•¤ƒ¤k¤¿¤Ĥ¥î¤ܤĤ¥¥¥,¥<¥A¥A¥P¥`¥e¥e¥t¥‚¥‡¥¯¥�¥‡¥Ç¥Ì¥ô¥â¥Ì¥ ¦¦9¦'¦¦Q¦V¦V¦s¦]¦�¦­¦²¦²¦ͦ¹¦÷¦§ § §§§§)§.§.§A§Q§V§V§i§y§~§~§‘§¡§¦§¦§¹§ɧΧΧÖ§Û§Û§ã§è§è§ð§õ§õ§ý§¨¨¨¨¨-¨2¨€¨n¨\¨J¨2¨�¨’¨à¨Ψ¼¨ª¨’¨í¨ò¨ò¨©©!©!©2©M©R©R©c©q©v©v©~©ƒ©ƒ©‹©�©�©˜©�©�©Õ©é±©¤©ô©ªªªLª:ª(ªªkª†ª‹ªÀª®ª£ª‹ªتݪ««õªݪ*«/«I«3«/«a«f«ƒ«m«f«›« « «¬«Å«Õ«æ«æ« ¬ ¬#¬)¬)¬F¬S¬„¬µ¬£¬جà¬à¬à¬ì¬ñ¬ñ¬­­­­)­3­8­8­R­W­W­_­d­x­d­‡­’­—­«­—­º­Å­Ê­Ê­Õ­æ­ë­ë­ö­®®®®®®6®A®F®Q®F®`®e®y®e®ˆ®�®˜®�®§®¬®À®¬®Ï®Ô®Ô®è®Ô®÷®÷®÷®ü®¯ü®¯ ¯ ¯,¯ ¯?¯D¯D¯P¯D¯c¯h¯h¯t¯h¯‡¯Œ¯ ¯Œ¯¯¯»¯ƯѯÖ¯ê¯Ö¯ù¯°°° °4° °K°C°T°Y°Y°a°f°f°o°t°t°}°‚°‚°‹°�°�°›° ° °«°°°°°»°À°À°˰ааÛ°à°à°ë°ð°ð°û°±±±#±.±9±D±I±I±S±X±X±b±g±g±q±v±v±€±…±…±�±’±’±Ÿ±¤±¤±±±¶±¶±¶±¶±¶±¾±ññ˱ббرݱݱå±ê±ê±ò±÷± ²÷±²+²0²0²7²B²b²g²}²ˆ²¡²�²°²»²Ʋ˲˲Ò²ݲý²³³#³<³(³K³V³a³f³f³m³x³˜³�³³³¾³׳óæ³ñ³ü³´´´´+´K´P´f´q´Š´v´­´™´¼´Ç´Ì´Ì´ç´Ó´ö´µµ1µ<µUµAµxµdµ‡µ’µ—µ—µ²µžµÁµáµæµüµ¶ ¶ ¶C¶/¶R¶]¶b¶b¶q¶v¶v¶…¶жжж�¶•¶•¶•¶Ÿ¶¡¶¡¶«¶²¶Õ¶×¶×¶á¶á¶á¶á¶á¶ã¶ã¶ú¶· · ···$·/·:·E·?·`·}·r·•·•·£·�·É·¾·á·á·á·ê·ñ·¸ ¸¸*¸*¸I¸T¸k¸‹¸‹¸‹¸¬¸¼¸Ѹã¸ó¸ó¸¹ ¹.¹@¹@¹D¹I¹P¹`¹¹¹ƒ¹š¹¡¹¦¹¦¹ª¹µ¹Á¹Ϲü¹ºº$ºWºcºhº~º–º¢º³º¸ºɺ躻?»B»R»T»T»X»w»‚»‚»…»–»Ç»ê»ê»í»¾Z, ž×ž×¬×²×¶×¿×È×Î×[`BVç‰ç‰ý‰ ŠŠŠ%Š>ŠBŠHŠ^Š{Š}Š}Š®ŠœŠ}ŠÍŠ׊\8 -·\·\Ø\Å\ç\ò\ý\]] ]%]]\’@¡@¡N¡P¡[¡c¡n¡y¡„¡†¡œ¡œ¡®¡º¡Ã¡Æ¡õ¡^øª¤çîçî ïïïJïJïUïbï€ïˆïµïºïãïð ð%ð)ðLðrðwð ð½ðãðúðñññ%ñ*ñ;ñCñbñhñlñ…ñ�ñ¬ñ±ñÂñÊñéñîñöñüñòòòò#òAòFòSòXòXòeò}òŒò™ò¹ò¹òÐòÕòÕòìòîòîòóóóóóó4ó6ó6óMóMóbógógóvóvó¯óÈóÈóÛóàóàóàóàóô'ôCôCôCôPôgôiôiôiôvô�ô�ô�ôœô³ô³ôÊôÌôçôõõõõ õ õ õõõõõõ õ$õ$õ@õ@õ@õHõMõMõMõUõZõZõbõbõdõŽõ�õ°õÐõÐõÐõÐõÐõêõíõö ö öö'ö)ö5ö5ö=öOöOö[önö…ö�ö·öÉöåö÷&÷:÷X÷}÷�÷¯÷Õ÷î÷ý÷ø/ø4ø4øhømømø€ø€øŒøžø£ø£ø·øÕøúø ù,ùRùsù‚ù°ùÂùÌùîùðùðùðùüùüùüùúJúLúLú[ú[ú`ú`ú`ú`ú`úwú|ú�úÞú_\ -RRR/RKRXRoR‚R�R¢R�R±R¹RÄRÚRÐRòRøR`øA?=?=]=`=g=n=u=y={=‚=‰=�=‘=¤=Ì=ç=Ô=ÿ=>(>(>4><>K>…>Š>·>¿>Ä>Í>Ù>á>è> -??2?4?V?b?„?Š?‘?‘?—?š?ž?¯?Ò?ä?a$—á—á¦áÁáÁáÇáb|Xsìì1ì]ì]ì|ìŒìŽìŽìŽìŽì•ì�ì¸ìÑìÓìÓìÓìÛìöìøìøìíííc”"÷5÷56#6/646D6J6_6s6ƒ6‘6Ÿ6¶6¾6È6×6ß6ì6ô6÷6÷6÷6ù6777#7&787dôÍ':':P:]:`:i:o:†:�:´:¿:õ:;; ;*;D;V;c;y;�;¦;«;½;Â;Å;å;< <<<:<Z<b<j<l<Œ<”<™<ž<©<©<´<´<À<À<Ò<=+=+=;=ed¤¹0�0�@�G�S�Y�a�o�‚�Ž�¨�µ�µ�¸�Æ�Ö�ð�ô�ü�f(¸þr*r*ˆ*�*¡*Ð*à*ç*÷*+ -++8+b+s+�+�+ˆ+˜+¤+´+½+Ô+Ô+ê+ê+,,,,,,,,B,B,X,X,n,n,„,„,›,›,²,²,É,É,à,à,÷,÷,--%-%-<-D-O-`-k-|--�-˜-Ÿ-à.g¬÷N N h n u } … ˆ “ ¥ ¥ ¼ à Æ È Ô å å è ð      $ ( 0 > P c f µ h(ÅË„„>„+„M„_„g„i= R RBRWR\RdRlRtR�R‡R�R–R›RºRÓRØRÞRàRâRïRïRôRýRSSSS S(S0S=SCSNSUSeSpSS S§S²S»SÌSÐSØSØSìSüSTTmTj8-7"0"060:0?0J0U0X0\0d0kˆWõ׊׊ñŠ ‹‹‹‹ ‹E‹J‹U‹s‹]‹‚‹•‹§‹°‹¸‹‹à‹ò‹û‹Œ Œ(ŒŒ7ŒIŒSŒ[ŒsŒ]Œ˜Œ‚Œ§Œ¹ŒÃŒËŒËŒÔŒÜŒòŒ ��,�0�0�7�<�Z�\�a�l�‚�‚�‚�†�’�³�½�Ç�Ð�ñ�û�ŽŽŽ$Ž2Ž@ŽCŽ\Ž`Ž{ŽŽžŽ¢Ž½ŽÁŽÁŽÁŽÇŽÕŽߎøŽþŽ ��� �%�>�I�W�a�z�}�…�‘�“�›�ž�·�¹�Å�Ç�Ï�Õ�î���'�,�A�Q�j�{�{�†�‘�©�µ�Ê�Ï�ä�ô� ‘‘‘$‘/‘7‘E‘L‘^‘leãžàžà¸àÁàáàáàçàïà÷àÿàá ááá(á-á-á3á8á8á>áCáCáIáNáNáfáyáá„á„á�á­á­á­á´á¶á¶á½á¿á¿áÅáÅáÌáÎáÎáÔáÔáÛáÝáÝáãáãáêáêáòáøáþáââââââ"â*â2â:âBâHâ`âoâyâ|â|â†âŒâ’â’â–âžâ¥â­âµâ¹â¿âÇâÎâÖâÞâââèâóâùâããã ã$ã+ã3ã;ã?ãEãMãTã\ãdãhãnãyã~ã”ã¥ãªã­ãRäm`b!b!k!r!†!š!Ÿ!½!Â!à!â!"""-"6"8"L"\"�"n�2Òh•h•~•�• •±••ӕæ•î•ü•–%–+–8–M–M–`–q–w–Œ–§–§–³–»–Öɖޖæ–ê–ò–—— — — —5—<—D—L—R—u—ˆ—”—˜—¢—»—Á—×Зҗä—ä—ë—󗘘6˜D˜W˜[˜e˜i˜u˜y˜…˜‰˜•˜™˜™˜¯˜Â˜È˜Ì˜Ö˜Ú˜é˜í˜ü˜™™™™™™.™<™I™Q™h™x™†™‘™§™´™Ã™Ë™Ø™ó™šššššš%š4š<šBšWšfš{šŒšœš¢š¢š¢š´šºšÆšÌšÙšôš›››#›5›C›e›ïœoÔ¼í`n`nrnƒnŽn™n²nÄnÜnánðn÷no oo o"o%o*o,o2oLofo|o”o™o¨o¯o¼oÓoñoøoúoýop%pCpOpp$hm&& &4&;&U&qxKeÏTÏT÷TãTU!U U0U5Uü>ü\ügürü˜ü˜üšü§ü²ü¸üÉüØüçüôüôüúüÿüýý-ý8ý<ýNý[ýcýnýjý…ý“ý“ý“ýžý¹ý¤ýÁýÔýÖýòýÞýúýþþ -þ&þ&þ-þ3þ<þCþFþhþ|þoþ„þŠþ“þ“þ“þ¦þ«þ«þ³þ³þ¾þÓþÜþÜþÜþÜþøþÿÿÿÿ/ÿ5ÿ:ÿ:ÿFÿcÿƒÿˆÿ�ÿ�ÿ™ÿ¶ÿÅÿÔÿÜÿáÿçÿìÿìÿóÿúÿ:<Ynntt�ŠŠ¨¾ÉÎÛæï÷..@Fu~~€‡ŒŒ™¤ª³³ÆÓåðþ 6?JOV^q†‹’Ÿ¦¸ÍÔÚããì  0>>DKTTgy||�•�©ÆÍÚÜã÷000==R]o|‡• ¯¶¶Ïâäó ---3<<IOaanq|Ž• ¥­´¿ÄÙÛõ - - - *8JJPW`e‰’’˜¡¡ÀÀÍÐÙâêõ %(1:BM_epp}€‰’”¶ÉÞäï“ |t·ÐJ4J4\4e4h4q4z4Œ4Œ4¸4¼4Á4Ä4Í4Ü4â4å4í4ð4õ4ÿ4}`2ÿRÿR'SS6S[SGSjSoSvS~S…S�S˜S£S¹S®SÑSÙS~À-ègèghh h h*h*h4hFhShVhXhahnhnh|h�h�h´hÁhÁhÑhÞhÞhiii#iEiZi|i…i’i’iµi¿i¿iòi%j+j+j+j=jt�¶R3R3f3‡3™3­3´3À3Ú3ã3é3ü344444 444:4<4<4D4€¸ºäŽŽŽŽ&Ž*Ž7Ž:ŽTŽTŽTŽZŽ^ŽfŽqŽ…Ž‘Ž“Ž“ŽœŽžŽžŽ§Ž©Ž©Ž²Ž´Ž´Ž½Ž½ŽÆŽÌŽÏŽÙŽêŽðŽüŽüŽd��œøO*O*m*~*–*�*¹*®*Ñ*ñ*Ý*+++7+#+O+l+s+�+„+§+Ç+³+Ö+ç+ý+é+,",",:,:,D,‚¨¥44#434>4h4˜4©4º4Ì4Ó4Ú4î4õ4õ455!595H5U5X5q5t5y5�5 5°5´5»5ñ5ƒx± X±X±n±u±|±›±ª±¹±È±×±æ±ð±ð±õ±ü±²²#²>²X²X²n²€²„²’²™²ž²ž²¥²·²À²Â²Ð²â²â²â²ô²ÿ²³³)³.³>³C³S³_³d³q³v³†³‹³›³�³­³¯³¿³Á³Ò³Û³Û³Ý³í³ô³´´ ´1´C´U´e´e´e´h´{´„\åøh�h�ƒ�Š�����²�¹�Ã�Ñ�Ô�Ö�à�ò�ò�ù�/�…0ÎÖ––®î⸶ -†`,ç‡ç‡ý‡ˆˆ ˆ/ˆHˆLˆRˆhˆ…ˆ‡ˆ‡ˆ¸ˆ¦ˆ‡ˆ׈ሇL[j�2�2�2¯2µ2½2Ï2Õ2Þ2ð2ö2ù253ˆ(–œ"3"303?3C3F3L3‰\k~7373E3W3]3e3w3}3†3˜3ž3§3¹3¿3Â34Š, F×F×T×[×c×h×n׋„ 5GNUdi‹‹�²Ç´Öåç   4*LVŒ`J÷i÷ijj#jHjVjXjfjsjyj„j›jªjµj¹jÄjÐj×jãjújk$k;kEkSkekgkuk‡k‡k�k¡k§k·k·kÏkÏkôkôkùkùklll'lp>pCpGpWp`prpxpzpzpˆpŽp—p¨p±p½pÍpÍpÍpÒpêpêpùpüpq.q9qbqtqq‘q•qšq¡q³qÃqÞqåqéqïq÷qrs�8í÷¯)¯)É)Þ)ô)**-*E*E*O*Ž`j~ˆ ˆ ¨ ¯ · Â Ì × ß î ø û  ¡"¡2¡2¡@¡�_ŸÛŸÛÁÛÈÛÏÛÔÛëÛýÛÜ Ü Ü$Ü0Ü8Ü;Ü=ÜGÜQÜQÜUÜ]ÜeÜmÜw܀܈܋ܔܯÜÀÜÇÜÊÜÏÜÞÜäÜìÜìÜóÜöÜûÜ -ÝÝÝÝ&Ý)Ý.Ý=ÝHÝPÝPÝ[ÝoÝvÝ}Ý”Ý�83=&Ø&Ø/Ø/Ø=ØAØOØRØWØ‘8>H^Ø^ØgØgØuØy؀؃؈ؒDDQ—1—1±1Ä1Î1Õ1á1ù12222=2“Ä{¨ßß   %++=DZm|‚„‹‘››¯±¸¾ÈÈÈßñø  22D”0RZ?2?2H2n22…2…2�2•„\y®ò®òÀòÕòßòèòêòñòó óóóó!ó2ó5ó5óYódófóó†óŠó™ó¬óÿó–  -Ž0Ž0—0´0¹0—hOgOgegpg{g‰g”g�g®g·gÈgÎgÚgñgñghh!h*h;hAh�h˜„a~§M§M×MÝMæMòMúMNNNNNN2N\NaN…N�N�N§N¿NãNOO™lò  18?ac…š‡¼©ËËÝäš y}¸‹¸‹Á‹Í‹Ò‹›(A†è†è¨è°è¶è¾èÀèÀèÑèÑèÑèÙèáèóèéóèééé3é5é5é@éFé`éeéeéeézé|é‰é‹é˜éšé§é¯é·é¾éÒéßéáéòéÿéÿéÿéêê-ê3ê;ê=êJêJê_ê_ê_êjêtêŒê‘ê‘ê‘êŸê¥êªê²ê½êÏêÚêßêßêæêêêøêüêë ë*ë7ë>ëGëcëhëhëhëhëpë{ë‰ë‰ë©ë©ë©ë°ë¾ëÍëàëóëõëõëõëììììì!ì3ì=ìYìƒì‰ì‰ì�ì¢ìÆìÍìÙì÷ì -ííí í í í í+í5íCíeípí�í—í—í¥íÃíóíîî.îAîFîFîFîNîYîkîvî{î{î{î�î·î½î½î½îÈîÒîÞîéîëîëîëîðîüîüîFïœH%‚/‚/�/—/¢/¯/º/Â/Â/Ú/ä/ê/ð/�0 �Q�Q¶Q£QÅQáQ×QùQRžLÝìŸ(Ÿ(¹(Î(ä()ò()")M)n)[)†)ž)ž)¨)Ÿð·OOLOUOaOiOtO“O“O�OŸOºO¢OÉOÉO×OáOèOP -P$P+P+PGPGPnPsP’P«PÈPËPÓPÚPúPüPQQQ9Q9QVQVQ}Q�Q TVgþþ!'->LZlpv„‡‘¡0 -R>3_K‚n‘�¢®¾ÅÒÝéôü &-1<ALenz“šžž£¼ÁÚï       4 I T ^ i k v ~ ~ Ž ƒ ¦ Æ ¢àZŽÐeÐeêeøeýe -ff!f\U\i\n\y\€\£\£\£\µ\«<ÑÜ55 555$5,545;5K5K5P5¬°)@£@£c£p£u£y£‚£‘£�£¨£³£»£Æ£Î£Ñ£Ý£å£ÿ£%¤ ¤5¤>¤s¤_¤ƒ¤ƒ¤›¤¦¤Â¤É¤í¤&¥&¥&¥&¥‡¥­”‹,.¹.¹K¹R¹Z¹e¹|¹†¹†¹�¹§¹Â¹Ø¹æ¹ê¹ -ºº2º9º=ºVº`ºqº~º~º…ºŒº‘º–º›º¢º©ºÃºÊºÚºÞºÞºèºþº»»»&»9»9»?»J»Q»Y»d»k»s»~»…»…»�»®»²»Ê»»»å»å»ë»ò»¼ ¼¼ ¼$¼&¼8¼8¼8¼J¼R¼x¼†¼†¼Š¼Ÿ¼§¼·¼Â¼×¼Ü¼ê¼ù¼½½½ ½%½-½1½@½B½Q½S½b½d½s½z½~½’½œ½ª½±½µ½Å½Ð½Õ½ó½ý½ ¾¾¾ ¾.¾5¾9¾C¾W¾_¾j¾n¾n¾n¾y¾„¾”¾ ¾¶¾¾¾É¾Ø¾à¾ë¾ð¾ø¾¿¿¿¿#¿7¿?¿J¿J¿J¿J¿g¿„¿�¿˜¿¨¿¸¿Ö¿Ú¿ Àþ¿ï¿ÀÀ#À*À9ÀHÀRÀ`ÀgÀkÀmÀ|À†À”À›ÀŸÀŸÀ¡À³À³ÀÅÀÅÀÅÀ×ÀéÀñÀ Á5ÁCÁGÁeÁlÁsÁ~Á”Á™Á Á³Á½ÁËÁÒÁÖÁØÁëÁõÁ -ÂÂÂÂÂÂ'Â6Â@ÂNÂYÂ]Â]ÂbÂjÂnÂ}ÂÂŽÂ�Ÿ¡°·»ÂÏÂÙÂçÂîÂòÂà ÃÃ0Ã:ÃHÃOÃSÃ]ÃkÃrÃvÀÔÜçëëëöýÃËÃåÃõÃÄÄÄ%Ä5ÄAÄWÄ_ÄjÄyÄ�ČđęĤİĴĿÄÄÄØÄàÄëÄëÄëÄëÄÿÄÅ$Å1Å5ÅIÅZÅoÅ|ŀŎţųÅÊÅãÅüÅþÅ ÆÆÆÆ7ÆHÆ_ÆxƆƑÆ�ƥƧƲƺƺƺÆ×ÆåÆóÆ -Ç!Ç0Ç=Ç]ÇdÇdÇtLjǢǢǦǼÇËÇæÇñÇÈÈÈ5È5ÈHÈcÈlȃÈ�ȬȹÈÙÈçÈýÈÉ)ÉAÉAÉYÉYÉeɀɘɡɡɡɭɾÉÖÉßÉßÉæÉïÉõÉÊ`Ê®<ùD0�0�U�a�l�v�|�†�Œ�–�¤�®�À�Ê�Ð�Ú�à�ê�ñ�ý�‘ ‘7‘F‘I‘K‘U‘g‘q‘ƒ‘�‘¢‘¢‘¥‘¯‘đɑّä‘é‘ý‘ÿ‘’3’3’=’R’`’i’q’’�’ ’±’¾’¾’Ë’Ë’Ó’á’(“¯$› ¯P¯PÃPËPÖPÜP°l£:÷F÷FG(G8GXGjG‚G�G�GÇGÏGÓGÖGÚGßGéGìGóGùGHH -HHH*H1H8H:H>HGHQHTH_HkHnHHŠH�H—H H¹HÊHÓHÜHäHïHúHII(I4IBIDIKIRIWI[IhIoI’I IªI´I½IÖIçIðIùIJ -JJJJJ*J1J?JIJ^JhJqJŠJ›J¤J­JµJ¾JÄJÈJÍJÓJÝJçJKKK K'K/K7KDKLKkK^K€K‰K¤K¸KËKÒKÛKäKëKôKýKL LL/L3L�L±  °ˆ°ˆ¾ˆàˆæˆ²¸�·z'z'ˆ'�'È'Ê'ÿ'*(*(:(?(?(S(X(X(t(y(y(™(ž(ž(²(·(·(Ô(Ô(â(),)L)^)p)‚)’)’)’)’)™)r*³$bgÊ%Ê%Î%æ%ø%&´ƒ·Ã·ÃÉÃØÃØÃÛÃäÃðÃðÃÄÄ.Ä5Ä9ÄIÄiÄ{Ä�Ä�Ä™Ä�ģĬÄÂÄÆÄãÄÅÅÅ(Å:ÅFÅHÅTÅ\Å`ÅfÅoÅoÅoÅ�ŌŒŨůŷÅÍÅÔÅÔÅÔÅâÅ ÆÆÆ,Æ4Æ=ÆHÆNÆdÆkÆsÆzÆ�ƠƠƧƧƧƵÆÜÆéÆòÆúÆ ÇÇÇÇ(Ç/Ç=ÇAÇMÇeÇmÇsǂNjÇ�ǗǠǠǮǶǼÇÙÇâÇêÇðÇöÇöÇöÇýÇÈÈÈ!È'È'È)È3ȵx‡Ú‡Ú•ÚªÚ±Ú¼ÚÒÚüÚÛ Û7Û=ÛLÛUÛ]ÛeÛgÛmÛsÛ‚ÛŠÛ�Û’Û˜Û¶¤Ôyff*f2fBfJfnf…f‰f‘f™fŸf¨f´f¼f¼fÄfôf3ggVg[gcgsgug£g©g²g¹gÁgÉgÕgÝgågøghhh/h6h8hBhQhqhxhzhšh¡h¡h¡hªh±hÊhÐhØhØhÝháhíhöhÿh i.i'K'a'�'›'©'µ'¼'¼'Ï'Ó'Ó'Ó'Ú'ß'ù'((((4(6(;(U(c(o(v(v(ƒ(�(�(Ÿ(º¤ ¿¤XJXJuJ„J„J„J¡J¡J²J²J¸JºJºJÀJÂJÂJÈJÊJÊJÑJÕJÚJÚJÚJÚJÚJÚJâJúJúJKK$K1KIKKKjKlK‹K�K¯K´KºKºKÓKÖKýK -L"LBLBLKLPLnL\LtLƒLˆL�L˜L«L³L»LÀLÀLÀLÉLâLèLèLMM,MEMGMOMUM]MbMbMhMhMqM‚M„M™M›M£M©M±M¶M¶M¶M¶MÄMÛMÝMñMñMùMÿMN NNN&N,N2N4N4N4N\@\I\X\`\e\k\k\s\|\Š\•\š\ \¨\­\­\­\­\­\­\­\­\­\­\Æ\Ì\Õ\Û\ã\è\í\ö\] -]]]]]]%]*]*].]3]3]<]J]V]_]e]e]n]„]„]Š]“]©]©]²]´]º]Ã]Ù]Ù]â]â]â]ë]ð]ð]ø]ý]ý]^(^4^9^?^I^Q^V^V^V^j^s^y^‹^•^•^�^�^¥^§^§^À^Ê^Ó^Õ^Õ^Õ^Û^ß^á^á^á^á^æ^ì^ò^ö^mb»Ìz© m mAmLmbm~m‹m¢mµmÀmÖmÂmåmímímümümnn&n;nJnUnhnnnnnnnsnxn‡n’n¬n®n³nÂnÍnÚnänänòn¼”*Kˆ¥ˆ¥ ¥§¥®¥±¥º¥½¥À¥Ä¥É¥ë¥Ø¥û¥¦ ¦¦¦ ¦)¦2¦8¦;¦L¦j¦{¦†¦¸¦½à.¢CC%C0CACDCHCQCXCfCuC‹CœC­C¿CÑCàCïCDDDD!D%D*D.D;DBDPDdDmDsD�DšDœD DªDªD¯D¯D¯D´D´DÃDÌDÔDêDêDêDïDïDEEE#E#E&E+E+EJEVEcEeEeEiEkEkEŠE–E¢E¤E¤E§E©E©E¶E¸E¸E»E»EÄEÊEÏEëEëEëEëEëEëEëEëEëEëEëEëEíEþEF F.F.F2F2F:FSFWF\F÷F¾,××,×3×;×@×F׿l3JßSßSõSTûSTCT/TRTWT^T^TdTgTkTsT‹T–T¬T¡TÄTÎTÀPQaâ$â$ð$þ$%%&%+%H%N%U%\%j%v%ˆ%Ä%ÁD+ÞåÞåòåææ)æ/æ5æZæ`æfælælætæÂô#œ?7?7G7V7Z7g7t7ˆ7—7´7Á7Ó7õ78+8G8Y8q8ˆ8“8´8Ò8á8ü89"9;9;9V99™9´9Æ9Õ9ä9ä9ï9::&:6:C:O:^:{:{:ƒ:ƒ:ƒ:”:¡:¨:Ç:Ð:á:å:í:ø:;(;1;A;I;N;r;‚;’;�;±;¶;¾;ä;æ;ñ;$<><><V<e<m<|<…<�<Ÿ<Á<É<Ñ<Ü<Þ<î<==6=N=`=w=€=‰=›=©=­=±=à èˆèˆñˆ‰‰Ä\‡ZÆÍÆÍàÍçÍôÍÿÍÎ -ÎÎ"Î:Î@Î^ÎtÎ΅ΧΧηÎÌÎÎÎÑÎÝÎåÎíÎõÎÏ ÏÏÏÏ Ï2Ï8Ï=Ï=ÏTÏTÏrÏrÏ…Ï’Ï—Ï—Ï®Ï·ÏÆÏÜÏçÏõÏÐÐÐ/Ð5Ð?ÐKÐXÐZÐZÐbÐgÐgÐoÐtÐtÐ|Ð�Ð�ЉЎЎДЙЙРХХЬббмÐÁÐÁÐÌÐÑÐÑÐÜÐáÐáÐìÐìÐÑÑÑÑ"Ñ%Ñ9ÑFÑUÑ\Ñ_ÑqÑsÑyÑ�њѩѩѩѩѳÑÍÑâÑôÑÒÒ Ò%Ò*Ò5ÒGÒXÒgÒmÒ~Ò‰Ò“Ò£Ò²Ò¸ÒÃÒÉÒÞÒäÒõÒÓÓÓÓ&Ó9ÓEÓMÓ]ÓdÓjÓ{Ó†Ó‹Ó¨Ó½ÓËÓÛÓçÓùÓÔÔÔ'Ô/Ô4Ô;Ô?ÔMÔWÔ]ÔgÔmÔxÔ~Ô€Ô�ÔšÔ¤Ô½ÔËÔËÔÑÔØÔ×ÅD#°(­(­G­i­q­q­­’­¬­¯­¸­Ô­Ô­Ô­Ü­Þ­Þ­æ­è­è­ð­ò­ò­ú­ú­® ®®®®&®*®/®5®:®:®:®:®B®K®Q®V®V®[®h®�® ®£®¹®Ø®Ø®Ø®à®â®â®â®ê®ì®ì®ì®ô®ö®ö®ö®þ®¯¯ ¯ ¯¯¯¯¯¯¯(¯:¯H¯V¯`¯`¯`¯p¯p¯w¯{¯�¯™¯§¯º¯Ç¯ð¯ó¯ü¯°° °(°3°3°>°D°I°I°I°P°V°k°s°y°„°›°²°¾°Ä°É°É°Ð°Û°Û°à°ò°ø°ø°ø°ø°T±Æd*DD2D4K4w4|4‰4©4®4½4é4ñ4ö4 575?5D5D5W5j5~5‚5¤5µ5º5º5æ5æ5æ5æ5æ5ú566666J6O6X6e6m6ˆ6Ÿ6­6¸6Ô6Ô6Ô6á6ø6ú6ú6ú677 7 7-7D7D7T7Y7€7—7©7Å7Å7Å7Ò7é7ë7ë7ë7ø788885858E8M8R8r8‰8›8·8·8·8Ä8Û8Ý8Ý8ê89999%9G9e9j9x9†9�9’9’9’9¯9·9¹9¹9á9':Ò¤%J?ê?êYê…ê…ê¤ê´ê¹ê¹êÈêÚêôêüêëë#ë+ë+ë+ë-ë-ë-ë-ëIëIëIëIë`ëbëbëbëbë}ëˆë½ëÓÐç……•…¡…¦…¦…²…·…¼…Ç…Ì…Ì…Ì…†î…†7†7†P†i†‚†›† † †¹†Ò†ë†‡ ‡ ‡"‡;‡T‡m‡o‡o‡ˆ‡¡‡º‡Ó‡Ó‡Ó‡å‡Ô0�‰wíwí…í‹í�í®íÏíÏíÕíÕ<:E99#9.9<9H9T9]9f9o9u9z9ÖluŒª&ª&¸&Â&É&à&à&å&ç&ó&ý& '('*':':'?'A'H'z'×ÈŸÍOvOvcv�v‚vnv­vßvÅv¸v -www(w7wNwkwÄw¬w˜wÊwÕwxxx-x5xZxOx;xmx†xrx©x•xÀxÇxóxóxóxóxûxØL^mï/ï/ 0 0&0H0H0Z0g0w0m0�0™0Ù$qv÷N÷N OOO$OÚÈg•b1b1†1Š1©1Ë1×1Þ1é1÷12 2 22242?2O2[2b2m2~2€2‘2“2•2•2•2�2�2§2§2¯2·2¿2Ç2Ë2Ö2"3Û XˆXˆfˆ}ˆƒˆÜ`FZz9z9Š9‘9“9˜9§9­9Â9Â9Ð9Ð9Ü9å9è9ö9:: :Ý<ö_‘_‘h‘s‘~‘‰‘”‘ž‘¼‘Ç‘בÞ =�h�h§h¹h¿hËhÖhähðhii"i4i:i@iFiYi_ihini€i†i‘i™i§i´iñiß,29111.1G1[1^1d1à4‰‰&‰0‰9‰@‰G‰Q‰Q‰W‰áÄMz§ÿ§ÿÓÿÖÿÛÿèÿíÿÿÿ   8^gry’¸½Öü!GIbˆˆˆ ºÉÛâ �Ï/x/xMxPxVxjxrxƒx�x–x›x›x¨x±x·xÇxÕx×xöx -yyy-y-y;yNyYy]ynynynysysyyŽy¡y§y¬yÀyÆyÎyàyæyèy÷yz -zzzz!z(z4z;z=zBzJzLzQz]z_zdzlznzsz{z}z‚zŠzŒz‘z™z™z™z©z©z©zÀzÆzÌz×zÜzõzûz{{{{"{;{F{Q{W{d{i{n{n{ƒ{‹{•{�{¥{Æ{Ñ{Ü{è{â{ñ{ú{ÿ{|| |)|5|;|G|K|P|U|`|k|v|x|~|‹|�|•|®|¹|Ä|Ä|Ê|×|Ù|Þ|ç|} }}})})}-}2}2}C}E}E}X}Z}Z}m}o}o}‚}„}„}—}™}™}«}«}±}¶}¶}Í}á}Ö}î}ö}ý}~ ~~)~ ~9~9~;~S~V~X~g~y~‰~•~¬~Æ~Ë~ß~ï~$6AIQUcinntˆ˜��£©®®®´ÃÖãçììðõõú€€+€A€M€M€S€`€b€o€{€Š€�€�€ª€¶€¶€¶€¶€º€¿€Ѐâ€í€õ€ý€ÿ€��$�3�9�F�F�]�m�m�������˜�¤�»�»�Á�Î�Ð�â�â�í�í�í�í�í�i„ã ŒÐ'W'WEWSWjWoW”WšWŸW¥W³WºWÉWÎWÚWìWìW -XX(X/XIXfXrX�X¥XÁXÊXÙXáXîX÷XüX YY:Y?YGY`YrY‚YˆY“YœY¢YèYÒYÃYøY3ZZZCZFZkZúZä<+6ÐDÐDñD÷DEE+E3EMEYEå„ |¶ ¶ Ø ã ê ò õ õ !!!!!!!'!-!3!:!@!Q!Q!S!\!h!n!“!—!š!ª!²!·!·!¾!Ç!Ø!Þ!ç!ò!"" """"")"1"7"9"G"^"a"p"}"Š"Š"Š"Š"�"¢"«"¼"Ý"î"# ## #&#&#/#6#B#R#]#]#]#q#…#•#˜#S$æ„9ò7ò788$8(8>8k8�8’8›8©8»8Ô8Ô8æ899 99çX{ÍŽŽ¹ÃÖáó '=EXm}‡‰™©²¸½ÄÊÐÖáìïö2GTW_cu„‹“®ËÏØßñù !8FLPR___ax~~�è  -ˆˆˆˆ‘ˆ¥ˆªˆé¤ŸÄ‚‚›‚¡‚³‚¸‚¾‚Á‚łłè‚킃ƒ)ƒBƒ.ƒQƒgƒSƒvƒ~ƒƒƒ‰ƒŒƒ�ƒ’ƒ«ƒ—ƒºƒºƒºƒÕƒ„„ê˜Ìîââëææúõ ""11@@OO^^m�|‹‹š©¸#ëxÓí/e/eMe_eeeqeˆeˆeše e«e»eÇeÐeÖeÜeçeõefff+f+f[fìd”©'î'î+î>î>îXî_îkîkî‚î‚î™î™î°î°îÇîÇîÞîàîàîäîíÌÂñWWy€‹¡¡³¾ÒÖÛßáçù5DHHH[pp|‚Œ—¥¬»½ÖððîP7G`E`EvE‚EŠEŽEŸE­E³E¿EÇEÒEØEÛEåEï ®-o>o>‰>”>˜>¡>¨>¯>Å>Ö>ç>ù> ??)?:?I?I?P?T?]?j?q?z?�?…?¥?¥?¥?¥?¥?±?µ?¸?À?Î?Ö?ã?ë?ó?@@@@!@'@6@M@O@Z@g@r@u@{@w@�@¦@¨@¶@¸@Ã@É@É@Ñ@Ñ@ã@ê@AAAAAA+A6A;A;A>ACACAbApA}AAAƒA…A…A¤A²A¾AÀAÀAÃAÅAÅAÒAÔAÔA×A×A×A×A×AàAæAêAöAB#B1B8BCð(rxˆ‹ˆ‹–‹�‹­‹°‹¶‹ñ(ntZ&Z&c&m&~&‰&‰&§&òTzKôô$ô*ô-ô6ô@ôXôhôqôwôzô~ô€ô˜ô¨ôµô»ô¿ôÅôÇôÊôÎôÎôñôõôûôûôõ)õ>õQõdõjõqõ|õ†õŠõ�õ”õšõžõ¤õµõ»õÀõÅõÒõÔõæõèõïõüõþõööööö4ö?öKöböböwöƒö öÄöÞöãöúöÿö ÷$÷)÷/÷@÷U÷[÷k÷x÷Œ÷“÷Ÿ÷·÷Ã÷Ã÷Ã÷É÷Ì÷Ï÷è÷î÷øø øøøø*ø7ø7ø=øKøbøhøkønøuø~ø…ø…øŠø—ø¤ø¤øªø¸øÏøÕøØøÛøâøâøóøúøùùùù%ù,ù2ù9ùDùXùXùrùwù~ù†ù�ù�ù¡ùªùÂùÇùÎùðùûùú ú"ú6ú6úQúQúkúyú€ú‡ú©ú¼úàúâúìúûûû'û3ûDûcûgû<üóÀ€¬ÿaÿabb b/b:bFbgbHbvb{b{b bÑb´b§bôbùb"c'c3cTc5ccchc�cˆc«cÁcÁcçcçcócô ^0^0m0†0Œ0õ4‘š7P7POPrPP…P‹PŽP®Pö8 â.â.ð.÷./ -/////#/÷ :>g1g1q1y1~1øÎPÿxÿxy-y8yNykyzyžyÌyÒyØyàyâyêyÿyz zz/zLz[zz­z³z¹zÁzÆzÎzãzæzñzýz{{{{{&{6{N{\{Š{�{•{�{­{Ó{|| | ||(|3|P|h|t|||Š|Š|�|¢|¹|»|Ø|ð|ü|}}}}*}7}A}X}o}ˆ}š}§}É}à}÷}~~~5~5~>~J~`~y~Œ~—~ª~®~®~®~µ~º~Í~Ø~ò~ô~ù~ $..@ù˜k �:�:¦:²:²:È:Ó:Õ:õ:õ:õ:ü:; -;;;;;;4;4;j;v;ˆ;˜;¯;´;·;¼;¼;¼;Ø;ß;ì;ó;û;<<<(<0<5<5<Q<^<f<k<k<‡<“<œ<¤<¬<¸<Î<Ù<ü<=====7=Q=[=g=o=t=t=“=Ÿ=±=¶=Ò=Þ=í=ò=>>>>>>>>>>:>F>X>Z>]>b>b>b>l>t>{>ƒ>Œ>—>�>ª>¸>¸>Â>Ë>Ó>???$?>?C?C?V?^?^?`?`?`?e?e?l?r?v?}?�?�?�?�?�?�?µ?¾?¾?Â?ÝCú(àCàCîC÷CD Dû�ªÊ÷n÷noo)o?oTobomo|o‚o‚o‚o‡oŒošo¥o¾oÀoÅoÓoÞoëoòopü\2Eg-g-�-¦-ˆ-µ-Ñ-Ç-é-þ-ë- .&.8.Q.Q.X.z.z.„.ý8fpwNwN�NžN²NÁNÇNÍNÐNðNþ0�—€Œ€Œ”Œ Œ®Œ±ŒÉŒÌŒÔŒÿ0S[¾Ø¾ØÒØÚØçØñØÙP>NŠŠ Š Š#Š7Š?ŠCŠMŠWŠ_ŠbŠhŠT¡²ßPßPùP QQQ&Q;Q=QOQYQmQmQsQvQÊQ<˜£ØŒØŒìŒóŒÿŒ �� �#�'�/� 26vævæ„æ�æH!/§]§]»]Ç]Ý]É]ì]î]õ]^ ^^D>‹oToT‘TœT¡T©TÃTÊTÌTÌTèTîTðTûTUUUUU&U/U7U>UEUIUPUXU^UcUkU‚U†UœU¯UµUÉUÎUÛUÛUïUúUV -VV!VDVJVNVSVXV[VeVjVvVV“VšV¬VÀVÇVÇVÎVÑV#WläûVäVäjä€äŽä™ä�ä¤ä¨ä±äÀäÂäÂäÖäØäáäçäçäçäçäïä´KtðEðEF'F,F3F=F=FEFXF\FaFvFxF{FF†FšFžF¦F²F¹F½FÅFÇFÏFÝFåFçFêFG GG!G%G3G -Q¯s¯s¿sËs×sçsÿstt$t,t3tLtyt“t t­t½tÃtÅtÖtøtÿtuuu1uC4CUCUCUC~C~CŠC Ð1(“(“<“<“b“b“‚“†“‹“‹“‹“—“œ“¬“±“±“±“¶“¶“ϓ֓å“ó“ü“ ”””””””%”,”3”:”A”H”O”O”Q”Q”W”\”c• D ,ss%s/s9sIsNsWscseswswsys©s \ No newline at end of file +! +! +5 += +F +N +S +Y +o + +” +™ +² +Ê +Î +á +á +á +ó +æ +  * 5 ; S k p { � —   ¨ ª °  Ò ç é     2 : C K P W m } ’ — ° È Ì ß ß ß ñ ä   ( 3 9 Q i i i u { … � ¢ ² É à ÷ !<<<]m{{„Ž›µÃÊÝßþ %5OOh5D|‰îîþ!337:B6\Ob8Š8ŠXŠgŠpŠyŠ}Š�Š�ВЗЗЍЬдŠÌŠÏŠÛŠ70üÆäÆäÏäÔäÝäääæäëä8�áßß00B[[fju¢‰|±ÈÙíñö #(04F9ey}}‚ “Ûµê-EJ^fow|ƒ•¥»½Öîòò $,0?2^rv…………˜ž¨¯ÂÝÝù +9G\ot“¢›ºÊÑâù.0\\\tg¥ªµ»Æèï(9Thlq�‚±¤ÙÆè+CH\dmuz�“£¹»Ôìððð+?CRRReku|�ªªªÆÖääø 2EJixq� ±ÏÏññø;9Dn{––¦ºÃÉÛÛßâê:lz‘w}w}�}œ}¡}¶}£}Å}È}È}Õ}ê}×}ù}ÿ}~1~J~c~|~†~;<Š•FFVgpvz…<”)ïïï"ï.ï?ïAïQï\ïnïyï„ï“ï¤ï«ïÄïÈïÙïÙïãïêïýïðð(ðDðIðfð=d(=h‰h‰t‰ˆ‰‹‰Ÿ‰§‰«‰µ‰¿‰Ç‰Ê‰Ð‰>4o¸GG.G1G5GBGKGVGfGnGxG G G°GµGµGÅGÊGÊGÚGßGßGïGôGôGH H HHHH.H3H3HCHHHHHXH]H]H]H`HiH‚H�H§HºH¼HÂHÄHÇHØHÝHÝHãHóHóHþHII3I;IAIAIUIUI^IaI!J?Ä n‡«‡«¤«¬«¯«½«Ë«à«é«¬¬/¬:¬K¬O¬a¬d¬o¬x¬„¬—¬Ȭ½¬£¬جשּׂ­­>­S­w­‹­�­®­”­É­Ì­Ñ­Ô­Ô­Û­ñ­ø­® +®®&®9®9®Q®U®‚®‚®š®Ÿ®Ÿ®¯®³®Ä®ήß®é®ü®¯¯¯¯&¯0¯A¯K¯^¯j¯o¯o¯o¯‘¯¢¯§¯´¯ɯɯίدç¯ì¯ò¯÷¯÷¯ü¯°°° °%°%°+°1°6°6°>°Q°]°j°v°…°�°•°ž°µ°ɰÚ°ç°ì°±±.±;±C±R±\±b±k±t±t±y±y±y±y±y±‰±‰±‰±¡±·±¿±Ú±ë±ø±ú±² ² ² ²²%²*²*²1²?²D²\²h²z²†²Œ²”²š²£²ɲÕ²Û²á²ð²ø²³-³>³K³M³[³[³`³`³g³u³z³�³™³¥³«³±³º³¿³¿³¿³¿³¿³׳ܳܳܳܳܳí³í³í³í³í³í³í³í³í³í³´´#´>´O´\´^´k´{´€´€´€´‰´£´¯´´´Ö´â´â´ç´ç´ç´ç´ç´ç´ç´ç´ü´µµµµµµµ)µ;µSµhµ‰µªµµµƵ˵˵˵Ôµúµ¶¶¶;¶T¶\¶d¶r¶œ¶¥¶«¶̶å¶å¶å¶å¶å¶·@·I·O·U·Z·c·l·q·q·q·q·€·”·²··È·Í·Í·à·ô·¸-¸3¸3¸8¸8¸G¸[¸y¸‰¸�¸”¸”¸§¸»¸á¸ô¸ú¸ú¸ÿ¸ÿ¸ÿ¸¹-¹5¹P¹a¹n¹p¹¹�¹�¹�¹�¹�¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹•¹¤¹³¹¾¹À¹À¹ɹ˹˹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹߹á¹á¹ø¹º º ººº%ºAºYºhºtºŠº¤º§º±º½ºãº»#»G»I»\»Š»b»¥»¥»¨»¸»À»Û»ì»ï» ¼¼#¼;¼;¼f¼i¼x¼Œ¼­¼Á¼ݼɼù¼½,½a½_½T½I½:½o½o½o½r½w½z½”½¢½нò½ò½¾ ¾/¾C¾d¾x¾”¾€¾°¾°¾ξ¿¿ö¾ë¾ܾ¿¿¿¿¿¿ ¿0¿Q¿]¿®Â@Ä…²/Ç/ÇEÇIÇTÇ[ÇfÇzÇzÇ…Ç–Ç�ǪǶÇÃÇÇÇØÇØÇáÇæÇîÇþÇ ÈÈ&È9È9ÈQÈQÈlȘȘȬȮȮȸÈÀÈÀÈÊÈÒÈÒÈÒÈãÈãÈãÈéÈñÈ÷ÈüÈüÈÉ +ÉÉÉÉÉ/É?ÉIÉXÉ]ÉeÉeÉjÉjÉqɇɗɡɩɯɾÉÃÉËÉÑÉÑÉÖÉÝÉèÉÊ+Ê5Ê=ÊCÊXÊ^ÊcÊcÊcÊcÊcÊcÊcÊcÊcÊnÊ|ʌʒʚʩʮʻÊÃÊÈÊÈÊÈÊÐÊÙÊâÊïÊ÷ÊËËBËJËYËcË}˃ˈˈË�ˢ˪˿ËÇËÏËäËæËñËùËÌÌÌ'Ì/Ì6Ì<ÌBÌFÌOÌTÌx̡̭̲̄̌̾ÌÉÌÎÌÎÌÎÌäÌÍÍÍ Í'Í/ÍDÍIÍTÍ\ÍqÍvÍv͚ͦͮÍÃÍÏÍÔÍàÍëÍðÍðÍðÍðÍðÍðÍûÍûÍûÍûÍûÍûÍûÍûÍûÍûÍûÍûÍÎÎÎ&Î6Î<ÎDÎSÎXÎ`ÎhÎjÎrÎ�·Î�ΗΙΡξÎÇÎÏÎ×ÎÞÎòÎûÎÏ ÏÏ Ï(Ï6Ï;Ï@ÏRφώÏ�ϧÏÁÏÉÏÎÏÎÏÎÏ×ÏàÏãÏíÏûÏ ÐÐ!Ð3Ð3Ð3Ð>ÐCÐ`ÐeÐeÐnÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐ~ЊТенÐÌÐÑÐÙÐàÐíÐöÐÿÐÑÑÑÑÑ#ÑAÑIÑLÑNÑ^ÑhÑhÑhÑjÑÑ�ѓіўѣѣѬѱѹÑÀÑÍÑâÑéÑúÑÒ#Ò<ÒQÒfÒmÒmÒrÒrÒrÒrÒrÒrÒrÒzÒ…Ò‘Ò Ò¥Ò¥Ò­ÒµÒÂÒÇÒÇÒÇÒËÒÐÒÐÒàÒåÒåÒåÒñÒøÒþÒÓ Ó$Ó3Ó;ÓLÓTÓwÓ}ӄӆӌӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӓӕӕӰӺÓÈÓÈÓÍÓØÓßÓûÓÔÔÔ ÔÔ5ÔCÔ7ÖAx[7Ö7ÖMÖTÖ[ÖfÖmÖ~ÖˆÖ�Ö™Ö¬Ö´Ö´ÖÏÖéÖïÖøÖÿÖ× ××× ×%×0×:×L×R×h×o×w×�×”×”×”×¢×É×Ò×Ú×ì×ô×ô×ô×ÿ× ØØ!Ø7Ø>ØFØMØbØsØsØzØzØz؈دؼØÅØÍØߨçØçØçØõØýØýØÙ Ù%Ù1ÙvÙBx`º‡Ü‡ÜŸÜ¯Ü¶Ü½ÜÈÜÛÜÞÜæÜíÜðÜÝÝÝ$Ý'Ý2ÝHÝSÝ^ÝiÝtÝ{ݎݚݷÝÀÝÈÝèÝëÝñÝöÝÞ ÞÞ"Þ(Þ0Þ0Þ<ÞJÞYÞaÞpÞxÞ›Þ¡Þ§Þ©Þ¯ÞµÞµÞµÞÚÞßÞüÞÿÞÿÞßßß"ß<ßHßXßk߇ߜߤ߮ßÍßáßáßUàC ?Cç0ç0ñ0ù0þ0DôÑÊgZgZˆZ“Z¤Z“Z¾ZÌZÌZÜZåZìZðZùZùZ[[%[3[?[E[P[t[t[…[�[–[�[¢[¢[µ[À[Ñ[Ü[ç[î[ø[\\\\\*\/\/\@\@\S\X\i\o\x\�\¡\¡\¦\¦\´\¹\¹\¾\Å\Í\Ô\Ö\Þ\å\å\ô\ú\]]]:]:]B]Q]\]c]e]y]ˆ]�]’]’]’]¥]ª]¹]À]É]Þ]ò]ò]÷]÷]ÿ]^^.^5^:^:^F^U^g^v^‘^œ^¶^È^Ú^é^___'_;_B_I_\_^_l__�_�_�_­_´_Ë_Ò_Þ_ë_ë_ö_ +`` `!`5`G`N`_`m`�`–`¢`À`À`À`È`Ó`×`ß`ã`ë`ò`a a+a0a9aDaMaUaZaZaiava„a�aša¨a®a´aºaÃaÉaØaðaðab bbb8b>bDbJbSbdb‹b“b�b«bÃbÊbÖbåbúbúbc cc$c$c$c$c.dEDTaç{ç{û{|| +|-|/|G|_|g|FœfÉgRgR‰R“R»RÊRÕRîRóR÷RÿRSSS'S,SASRSqSyS{SšS¢S±S¸SÄSÉSÐSØSÞSàSñSöS TøST!T!T)T2TAT`TgTiTˆT�T�T�T¦T¯T»T¿TÍTãTØTûTUUU,UU;UAUHUPUVUXUiUnU„UpU“U™U™U¡UªUªU´U´UÌUüUVVV#V9V.VQVQVcVG ;z¿á¿áÞáçáêáüáâââ"âCâaâpâŽâ¢âºâÁâçâãã1ãBãYã]ã]ãaãfãkãuãxã‚ã‡ã ã£ã£ã£ã£ã¨ã®ãÊãØãäãíãä ää.ä9äEäNäbäbäqävävä„äHPcs?@?@`@M@‚@o@‘@ @¨@³@µ@À@Ë@Ë@í@ó@IPµÅ¿ú¿úÓúØúçúçúîúû1ûûNû@ûfûnûJŒ•´?ù?ùrùžùžù±ùµù×ùçùìùìùóùûùúú$ú5ú:úKú_údúfúfúfú‚ú ú ú½úKP�­ = =H=J=X=^=y=ˆ=—=¦=´=¿=Â=Ò=Lè7÷.÷."/%/(/./3/J/a/x/œ/¸/»/Ú/ô/00)0:0?0J0R0R0\0\0g0l0�0‡0¦0Å0Ç0Ü0â01 1(13131=1=1O1�1¥1·1M$ ZZ:Z#ZDZLZNLx‡ÖÌÖÌèÌýÌÍ Í&Í.Í>ÍIÍZÍ`Í’ÍOTHY0e0eBeDeMeVedeiereuezeˆe’e•eŸeP¨!Gˆcˆc˜c¡c´cÁcÍcÙcåcñcddd"d+d2d;dRdidnd€d�d›d­d­d¶dÙdÙdÛdîdðd +eee0eQlõŒ p p9pDpTp�p¤p¸p¿pÇpÏpØpàpèpêpòpúpqq'q?qHqHq}q§q°qÒqìq r3r?rarcrjrqrqr”r°r×rórs6s]sys s¼sãsÿs&t&t5tBtGtGtVtcththtotztŒt¤t¼tÔtÖtÖtÖtÝtÝtêtïtïtïtuu!u6uruyuyuyu�užu¬uÊuÓuÜuéu÷uv-v-v-v?vMviv‡v‡v‡v’v•vÄvÆvÝvãvôvývÿv wwww*w*wNwPwWwhwqwsw�wƒw‘w“w¡w¡wÁwÁwÁwÁwáwx;xCxGxOxSxaxoxqxyx}x�x‰x—x¥x¥x¿xÊxàxôxy-y8yByIybynyuyŽyŽy y¥y§y­y¾yÏyÞyåyöyÿyzzz z!z/z/z/zSzSzrzyz€zƒz�z’z z¤z²z¶zÄzÈzÈzázèzízûz{{0{P{c{r{t{ƒ{…{”{ž{ž{¬{µ{Ë{Ò{÷{ü{%|U|Z|h|j|x|�|›|�|Ÿ|¦|·|À|Â|Ð|Ò|à|â|ð|ð|}}}}}/}/}/}:}V}{}”}™}™}™}»}À}À}À}à}å}å}å}~ ~ ~~~~~~~#~#~&~+~J~`~…~¡~µ~º~º~Õ~â~ä~ó~ü~>@@HCƒƒƒ¢¢¢ÃÈÈÈêïï€€3€8€8€S€a€c€r€{€•€—€—€œ€—€½€¿€¿€Ç€Â€��� � �7�7�a�y�‘�œ�²�Æ�ß�÷�‚-‚/‚@‚]‚t‚{‚s†R„7/è/èMè[èqè‹è™è·èÂèÞèÞèÞèëèééééé0é2é2é@éMéhéhé�é‘é¥é·éSæd®Ü®ÜÈÜÑÜñÜñÜ÷ÜÿÜÝÝÝÝ*Ý*ÝDÝIÝIÝOÝTÝTÝZÝ_Ý_ÝeÝjÝj݂ݕݛݠݠݩÝÉÝÉÝÉÝÐÝÒÝÒÝÙÝÛÝÛÝáÝáÝèÝêÝêÝðÝðÝ÷ÝùÝùÝÿÝÿÝÞÞÞÞÞ"Þ"Þ"Þ"Þ.Þ6Þ>ÞFÞNÞVÞ^ÞdÞ|Þ‹Þ•Þ˜Þ˜Þ¢Þ¨Þ®Þ®Þ²ÞºÞÁÞÅÞÍÞÕÞÛÞãÞêÞòÞúÞþÞßßß"ß.ß4ß<ß@ßGßOßWß[ßaßißpßx߀߄ߊߕߚ߰ßÁ߯ßÉßnàTLœ«H‡H‡a‡c‡j‡€‡�‡–‡®‡Æ‡É‡Û‡#ˆUÔ*[fðfðzð�ðžð¢ð°ð¹ðÈðÈð×ðâðíðøðÿðñ&ñ=ñCñHñLñ_ñ_ñuñwñ�ñ¥ñ°ñ²ñËñÏñÝñâñâñéñøñòò}òV$ÏYÏYúYãYZ ZWP©¹gCgCˆCuCªC—C¹CÈCÐCÛCÝCèCóCóCDDX,>×>×G×M×U×^×g×l×Y�wŽwŽ˜Ž­Ž»ŽÈŽûŽ��:�J�J�W�W�^�q�o���Š�”�š� �£�±�¸�Ð�×�Ú�ï�ô�ÿ� +�$�>�O�U�[�b�y�h�‰���•���½�¥�Æ�Ì�Ò�Ú�Ú�á�ø�ç�‘‘‘‘<‘$‘E‘K‘Q‘Y‘Y‘Y‘o‘o‘o‘o‘z‘„‘�‘­‘¹‘ʑϑà‘ô‘ù‘ù‘’ ’’ ’,’@’P’e’z’—’œ’œ’§’¯’¼’Ç’×’æ’““-“8“=“=“H“^“s““�“•“¦“º“º“Å“º“Ý“â“â“ñ“ö“ö“” +” +”” ” ”1”6”6”I”X”]”]”p””„”’”„”¦”«”¹”«”͔Ҕà”Ò”ô”ù”•ù”• • •=•B•d•i•w•i•‹•�•�•­•²•Ô•Ù•ç•Ù•û•–––"–D–I–W–I–k–p–p–�–’–´–¹–Ç–¹–Û–à–à–û–——— — —;—@—@—[—`—`—{—€—€—›— — —»—À—À—Û—à—à—ñ—ö—ö—˜ ˜ ˜˜#˜8˜=˜=˜I˜b˜g˜�˜”˜ž˜£˜´˜¾˜Ó˜Þ˜ã˜ô˜ÿ˜™ ™ ™™™™%™/™/™B™G™G™G™K™d™m™m™“™˜™˜™ ™´™½™×™ä™ï™ú™šš#š,š1š1š1šBš_šjštšš„š�š—šœšœš§š¯š¸šÚÓšëš››››'›:›D›O›p›|›�›’›£›§›¬›¬›¼›Ç›Ï›Ô›ß›ï›þ›œ0œEœPœUœ`œhœmœxœˆœ—œ´œÉœÞœÞœÞœÞœãœèœèœôœ��*�,�I�I�S�g�q�s��‡�¤�µ�¿�Ê�í�þ�ž ž+žCžSžXžXžcžhžhžpž{ž€ž€žˆž“ž˜ž˜ž žÁžªž¨žÙžÞžÞžæžŸðžîž Ÿ$Ÿ8Ÿ$ŸPŸUŸUŸbŸgŸgŸoŸtŸtŸ†Ÿ˜Ÿ�Ÿ�Ÿ±Ÿ�ŸÉŸΟΟÖŸÛŸÛŸîŸóŸóŸ     % 5 : : T d i i ƒ “ ˜ ˜ ²  Ç Þ Ç ö û û ¡ ¡G¡5¡#¡ ¡_¡d¡ ¡Ž¡|¡d¡¸¡½¡½¡Ì¡Ü¡á¡á¡ð¡¢¢¢¢"¢'¢O¢=¢'¢g¢l¢”¢‚¢l¢¬¢±¢Ù¢Ç¢±¢ñ¢ö¢ö¢£ý¢=£M£R£R£m£Y£—£§£¬£¬£¸£½£½£É£ΣΣá£ñ£ö£ö£ ¤¤¤¤1¤A¤F¤F¤Y¤i¤n¤n¤v¤{¤{¤ƒ¤ˆ¤ˆ¤�¤•¤•¤�¤¢¤¢¤µ¤º¤º¤ͤÒ¤ ¥¥ü¤ê¤Ò¤-¥2¥€¥n¥\¥J¥2¥�¥’¥’¥¡¥¼¥Á¥Á¥Ò¥í¥ò¥ò¥¦¦¦¦¦#¦#¦+¦0¦0¦8¦=¦=¦u¦c¦Q¦D¦”¦¯¦´¦´¦ì¦Ú¦Ȧ»¦ §&§+§`§N§C§+§x§}§²§ §•§}§ʧϧé§Ó§ϧ¨¨#¨ ¨¨;¨@¨@¨L¨e¨u¨†¨†¨«¨­¨èɨɨæ¨ó¨$©U©C©x©€©€©€©Œ©‘©‘©¤©¯©¹©¾©É©Ó©Ø©Ø©ò©÷©÷©ÿ©ªªª'ª2ª7ªKª7ªZªeªjªjªuª†ª‹ª‹ª–ª¡ª¦ª¦ª·ª¼ª¼ªÖªáªæªñªæª««««(«-«8«-«G«L«`«L«o«t«t«ˆ«t«—«—«—«œ«¨«œ«»«À«À«Ì«À«ß«ä«ä«ð«ä«¬¬¬¬¬'¬,¬@¬,¬O¬[¬f¬q¬v¬Ьv¬™¬¥¬°¬»¬À¬Ô¬À¬ë¬ã¬ô¬ù¬ù¬­­­­­­­"­"­+­0­0­;­@­@­K­P­P­[­`­`­k­p­p­{­€­€­‹­�­�­›­ ­´­ ­íέÙ­ä­é­é­ó­ø­ø­®®®®®® ®%®%®-®2®2®?®D®D®Q®V®V®V®V®V®^®c®c®k®p®p®x®}®}®…®Š®Š®’®—®«®—®º®Ë®ЮЮ׮⮯¯¯(¯A¯-¯P¯[¯f¯k¯k¯r¯}¯�¯¢¯¸¯ïܯȯë¯ö¯°°° °°8°=°S°^°w°c°†°‘°œ°¡°¡°¼°¨°˰ë°ð°±±*±±M±9±\±g±l±l±‡±s±–±¶±»±ѱܱõ±á±²²'²2²7²7²R²>²a²�²†²œ²§²À²¬²ã²ϲò²ý²³³³³³%³*³*³*³0³5³5³5³?³A³A³K³R³u³w³w³�³�³�³�³�³ƒ³ƒ³š³¡³¬³¬³·³½³ijϳÚ³å³ß³´´´5´5´C´=´i´^´�´�´�´Š´‘´¤´©´·´Ê´Ê´é´ô´ µ+µ+µ+µLµ\µqµƒµ“µ“µ¸µ¿µεàµàµäµéµðµ¶ ¶ ¶#¶:¶A¶F¶F¶J¶U¶a¶o¶œ¶¥¶¶¶Ķ÷¶···6·B·S·X·i·ˆ·¶·ß·â·ò·ô·ô·ø·¸"¸"¸%¸6¸g¸ЏЏ�¸²ºZ, n×n×|ׂ׆×�טמ×[`EY‡†‡†�†«†²†¶†ņÞ†â†è†þ†‡‡‡N‡<‡‡m‡w‡\8 +_Y_Y€YmY�YšY¥Y°Y»YÇYÍY]\’¡¡¡ ¡+¡3¡>¡I¡T¡V¡l¡l¡~¡Š¡“¡–¡Å¡^l½”_î_î„î‰î–îÂîÂîÍîÚîøîï-ï2ï[ï{ï—ï�ï¡ïÄïêïïïð5ð[ðrðxð|ð•ð�ð¢ð³ð»ðÚðàðäðýðñ$ñ)ñ:ñBñañfñnñtñxñ|ñŽñ–ñ›ñ¹ñ¾ñËñÐñÐñÝñõñòò1ò1òHòMòMòdòfòfòzò|ò|ò“ò•ò•ò¬ò®ò®òÅòÅò×òÜòÜòëòëò$ó=ó=óPóUóUóUóUóxó”ó°ó°ó°ó¸ó½ó½ó½óÅóÊóÊóÒóÒóÔóþóô ô@ô@ô@ô@ô@ôZô]ôrôyô{ô„ô—ô™ô¥ô¥ô­ô¿ô¿ôËôÞôõôÿô'õ9õUõuõ–õ®õÍõóõö öEö]ölöƒöŸö¤ö¤öØöÝöÝöðöðöüö÷÷÷+÷J÷p÷÷�÷Â÷â÷ñ÷ ø2ø<ø^ø`ø`ø`øløløløŠøºø¼ø¼øËøËøÐøÐøÐøÐøÐøçøìøÿø>ù_\ +¯N¯NÁN×NóNOO,O7OLO9O[OcOnO„OzOœO¢O`àï9ï9 ::::%:):+:2:9:=:A:T:|:—:„:¯:´:Ø:Ø:ä:ì:û:5;:;g;o;t;};‰;‘;˜;º;À;â;ä;<%<<4<:<A<A<G<J<N<_<_<‚<”<a$‡à‡à–à±à±à·àb|k†�ë�ë©ëÕëÕëôëììììì ìì0ìIìKìKìKìSìnìpìpìzìzì’ìc”"_5_5�5‹5—5œ5¬5²5Ç5Û5ë5ù566&606?6G6T6\6_6_6_6a6p6z6ƒ6‹6Ž6 6dô¦ßß6ß6777!7'7>7U7l7w7­7Í7Ò7×7â7ü78818C8Z8_8q8v8y8™8¹8Á8É8Î8î8999 9@9H9M9R9]9]9h9h9t9t9†9Æ9ß9ß9ï9ed¤¹����#�)�1�?�R�^�x�…�…�ˆ�–�¦�À�Ä�Ì�f(¸þr*r*ˆ*�*¡*Ð*à*ç*÷*+ +++8+b+s+�+�+ˆ+˜+¤+´+½+Ô+Ô+ê+ê+,,,,,,,,B,B,X,X,n,n,„,„,›,›,²,²,É,É,à,à,÷,÷,--%-%-<-D-O-`-k-|--�-˜-Ÿ-æ.g¬÷  8 > E M U X c u u Œ “ – ˜ ¤ µ µ ¸ À Ö Ù ç ê í ô ø    3 6 … h(Èη€·€Þ€Ë€í€ÿ€�i=‡Q‡QªQ¿QÄQÌQÔQÜQéQïQøQþQR"R;R@RFRHRJRWRWR\ReRmRvR~R€RˆR�R˜R¥R«R¶R½RÍRØRçRSSS#S4S8S@S@STSdSlSoSÕSj8-7*0*0>0B0G0R0]0`0d0l0kˆZøw‡w‡‘‡¬‡²‡¹‡¹‡À‡å‡ê‡õ‡ˆý‡"ˆ5ˆGˆPˆXˆbˆ€ˆ’ˆ›ˆ£ˆ­ˆȈ²ˆ׈éˆóˆûˆ‰ýˆ8‰"‰G‰Y‰c‰k‰k‰t‰|‰’‰«‰½‰̉ЉЉ׉܉ú‰ü‰Š Š"Š"Š"Š&Š2ŠSŠ]ŠgŠpБЛХЧЧŠÄŠÒŠàŠãŠüŠ‹‹ ‹>‹B‹]‹a‹a‹a‹g‹u‹‹˜‹ž‹©‹µ‹·‹¿‹Å‹Þ‹é‹÷‹ŒŒŒ%Œ1Œ3Œ;Œ>ŒWŒYŒeŒgŒoŒuŒŽŒ¦Œ²ŒÇŒÌŒáŒñŒ +���&�1�I�U�j�o�„�”�­�¾�¾�Ä�Ï�×�å�ì�þ�leãnànàˆà‘à±à±à·à¿àÇàÏà×àÝàêàêàøàýàýàááááááááá6áIáOáTáTá]á}á}á}á„á†á†á�á�á�á•á•áœážážá¤á¤á«á­á­á³á³áºáºáÂáÈáÎáÖáÖáÖáÖáâáêáòáúáâ +âââ0â?âIâLâLâVâ\âbâbâfânâuâ}â…â‰â�â—âžâ¦â®â²â¸âÃâÉâÖâââèâðâôâûâã ãããã$ã,ã4ã8ã>ãIãNãdãuãzã}ã"äm`b!b!k!r!†!š!Ÿ!½!Â!à!â!"""-"6"8"L"\"�"n�2Ò8•8•N•_•p•�•’•£•¶•¾•Ì•ê•õ•û•–––0–A–G–\–w–w–ƒ–‹–“–™–®–¶–º––Ж֖ۖۖ𖗠———"—E—X—d—h—r—‹—‘—“— —¢—´—´—»—×՗՗˜˜'˜+˜5˜9˜E˜I˜U˜Y˜e˜i˜i˜˜’˜˜˜œ˜¦˜ª˜¹˜½˜Ì˜Ð˜ã˜ç˜ç˜ç˜ç˜þ˜ ™™!™8™H™V™a™w™„™“™›™¨™Ã™Ó™ã™è™è™è™è™õ™š šš'š6šKš\šlšršršrš„šŠš–šœš©šÄšÔšàšæšóš››5›¿œoÔÃô0n0nBnSn^nin‚n”n¬n±nÀnÇnÔnÛnénðnònõnúnünoo6oLodoioxooŒo£oÁoÈoÊoÍoÒoõop pp$hm&& &4&;&U&qxKewQwQŸQ‹Q®QÉQµQØQÝQäQìQóQþQ RRR$R/RER:R]ReRrJ‡otot‹t’tªtÂtÌt×t×tÜtçtótþt uu,u3u9uNucucuwuu�uœu«u¸uÉuÚuèuöuýuvv-v-vAvNv_vovxv‰v‰v�v�v®v»vËv-ws8³½7Q7Q;Q@QEQVQdQmQrQwQyQt88Br0r0†0Š0�0š0¤0§0«0³0u0ˆ�WOWOmO€O�O“O–OžOvÜt††¨³¾Ç×éïõû%25=OUZ}�”š±·ÇÍÙçìú!*:<CHPo}‰£ÂÉÓâèîôú1EQhs‚�Ÿ¬¼Êáíò.ENT_dj�Œ™  ®½¿ÍÜîîö$Xw`0D‡…‡…�…¯…¶…º…É…è…ì…ò…†%†'†'†X†F†'†w†�†xDˆÕ‡ä‡ä™ä¡ä¬ä²ä¸ä¼äÀäìäìäóäöäûä åå8å<åAåAåHåKåPå\åmåqå‚å”å˜åšå¬å°åÌåÐåÕåÕåéåìåúåæ æ1æ<æ@æEæ{æ”æŸæ£æ´æ¿æÃæÅæÐæÔæÔæèæìæîæîæùæýæççççç;çy¼Ö?ç?çSçiçiçiçnçnçuçzçzç�ç†ç†ç“ç˜ç˜ç¥ç¬ç®ç®ç»çÂçÄçÄçàçàçàçãçåçåçåçéçëçëçïçïçïç èèè)èz°0X¿Z¿Z×ZßZêZN[4[)[[øZT[f[V[†[†[�[‘[Ï[Ô[à[õ[â[\ +\\5\$\\L\N\j\j\q\›\›\›\§\{ÈLºüü,ü7üBühühüjüwü‚üˆü™ü¨ü·üÄüÄüÊüÏüÔüêüýüý ýý+ý3ý>ý:ýUýcýcýcýný‰ýtý‘ý¤ý¦ýÂý®ýÊýØýØýÚýöýöýýýþ þþþ8þLþ?þTþZþcþcþcþvþ{þ{þƒþƒþŽþ£þ¬þ¬þ¬þ¬þÈþßþåþêþêþÿþÿ +ÿ +ÿÿ3ÿSÿXÿ]ÿ]ÿiÿ†ÿ•ÿ¤ÿ¬ÿ±ÿ·ÿ¼ÿ¼ÿÃÿÊÿíÿ + )>>DDQZZxŽ™ž«¶¿Ç×îîþþENNPW\\itzƒƒ–£µÀÎ×Ü &.AV[bovˆ�¤ª³³¼ÖÝâð$$7ILL]emy–�ª¬³ÇÖÖÖ  "-?LWep††Ÿ²´ÃØÚèýý   11>AL^epu}„�”©«ÅÚÚÚÜãéú '05Ybbhqq��� ©²ºÅ×Ýèèõø +/5@@MPYbd†™®´¿Ñ×ßßßßêc |t·ÐR4R4d4m4p4y4‚4”4”4À4Ä4É4Ì4Õ4ä4ê4í4õ4ø4ý45}`2§O§OÏO»OÞOPïOPPP&P-P8P@PKPaPVPyP�P~À-¸g¸gÖgægðgðgúgúghh#h&h(h1h>h>hLh`h`h„h‘h‘h¡h®h®hÑhÞhÞhóhi*iLiUibibi…i�i�iÂiõiûiûiûi jt�¶Z3Z3n3�3¡3µ3¼3È3â3ë3ñ34 4 4!4!4$4'4<4B4D4D4L4€¸ºäÐ�Ð�è�ê�ö�ú�Ž +Ž$Ž$Ž$Ž*Ž.Ž6ŽAŽUŽaŽcŽcŽlŽnŽnŽwŽyŽyނބބŽ�Ž�Ž–ŽœŽŸŽ©ŽºŽÀŽÌŽÌŽ4��œ&§(§(Å(Ö(î(õ())))I)5)X)i)n)�){)§)Ä)Ë)ç)Ü)ÿ) * *.*?*U*A*m*z*z*’*’*œ*‚¨¥33‹3›3¦3Ð344"444;4B4V4]4]4l4z4‰4¡4°4½4À4Ù4Ü4á4ø4555#5Y5ƒx± (±(±>±E±L±k±z±‰±˜±§±¶±À±À±Å±Ì±ß±î±ó±²(²(²>²P²T²b²i²n²n²u²‡²�²’² ²²²²²²²Ä²Ï²á²ì²ù²þ²³³#³/³4³A³F³V³[³k³m³}³³�³‘³¢³«³«³­³½³Ä³Ô³Ô³ï³´´%´5´5´5´8´K´„\åø8�8�S�Z�_�m�‚�‰�“�¡�¤�¦�°�Â�Â�É�ÿ�…0ÎÖff~¾²ˆ†ÒÚ†`/‡„‡„�„¯„¶„À„Ï„è„ì„ò„…%…'…'…X…F…'…w…�…‡L[j÷1÷1222%272=2F2X2^2a2�2ˆ(–œ*3*383G3K3N3T3‰\k~Ÿ2Ÿ2­2¿2Å2Í2ß2å2î2333!3'3*3x3Š, ××$×+×3×8×>׋„$oo�Ÿ¦­¼Áããè +  .=?aaapŒ‚¤®Œ`B÷h÷hii#iHiViXifisiyi„i›iªiµi¹iÄiÐi×iãiúij$j;jEjSjejgjuj‡j‡j�j¡j§j·j·jÏjÏjôjôjùjùjkkk'ko>oCoGoWo`oroxozozoˆoŽo—o¨o±o½oÍoÍoÍoÒoêoêoùoüop.p9pbptpp‘p•pšp¡p³pÃpÞpåpépïp÷pqr�8ø((!(6(L(m(Z(…(�(�(§(Ž`j~X X x  ‡ ’ œ § ¯ ¾ È Ë ð ò ¡¡¡�_�Ú�Ú±Ú¸Ú¿ÚÄÚÛÚíÚ÷ÚýÚÛÛ Û(Û+Û-Û7ÛAÛAÛEÛMÛUÛ]ÛgÛpÛxÛ{Û„ÛŸÛ°Û·ÛºÛ¿ÛÎÛÔÛÜÛÜÛãÛæÛëÛúÛÜÜÜÜÜÜ-Ü8Ü@Ü@ÜKÜ_ÜfÜmÜ„Ü�83=ö×ö×ÿ×ÿ× ØØ Ø"Ø'Ø‘8>H.Ø.Ø7Ø7ØEØIØPØSØXØ’DDQÿ0ÿ01,161=1I1a1j1n1€1†1¥1“Ä{¨77adkpvx}ƒƒ•œ²ÅÔÚÜãéóó    7IP_awŠŠœ”0RZ§1§1°1Ö1ç1í1í1õ1•„\y~ò~ò�ò¥ò¯ò¸òºòÁòÑòÜòÞòèòèòñòóóó)ó4ó6óOóVóZóió|óÏó–  +ö/ö/ÿ/0!0—húOfOfefpf{f‰f”f�f®f·fÈfÎfÚfñfñfgg!g*g;gAg�g˜„=ZOJOJJ…JŽJšJ¢J©J­J¶J¶J»JÂJÚJK K-K5K7KOKgK‹KªK¼K™lò __w‰�—¹»Ýòß##5<^^fš y}ˆ‹ˆ‹‘‹�‹¢‹›(AVèVèxè€è†èŽè�è�è¡è¡è¡è©è±èÃèÒèÃèçèéèéèééééé0é5é5é5éJéLéYé[éhéjéwéé‡éŽé¢é¯é±éÂéÏéÏéÏéØéêéýéê ê êêê/ê/ê/ê:êDê\êaêaêaêoêuêzê‚ê�êŸêªê¯ê¯ê¶êºêÈêÌêÕêÜêúêëëë3ë8ë8ë8ë8ë@ëKëYëYëyëyëyë€ëŽë�ë°ëÃëÅëÅëÅëØëØëßëæëëëñëì ì)ìSìYìYìmìrì–ì�ì©ìÇìÚìåìììðìðìðìðìûìíí5í@í]ígígíuí“íÃíÖíçíþíîîîîî)î;îFîKîKîKî]î‡î�î�î�î˜î¢î®î¹î»î»î»îÀîÌîÌîïœH%Š/Š/˜/Ÿ/ª/·/Â/Ê/Ê/â/ì/ò/ø/�0 7N7N^NKNmN‰NN¡N©NžLè÷÷&÷&'&'<']'J'u'z'¥'Æ'³'Þ'ö'ö'(Ÿð[“¿K¿KôKýK LLL;L;LELGLbLJLqLqLL‰L�L°L²LÌLÓLÓLïLïLMM:MSMpMsM{M‚M¢M¤M¾MÅMÅMáMáMþMþM%N7N TWhÎÎäñ÷ý*<@FTWa¡0 +Rgg–‹·£ÚÆéõú*5ALTYej~…‰”™¤½ÆÒ×ëòööû2GY^iqqqsŒ¡¬¶ÁÃÎÖÖæÛþ¢àZŽ e eºeÈeÍeÚeèeñe ff?fHfXfsf~fŽf�f’fœf¨f¬f¹fÅf×fßf÷fûfûfûfûfgg8g8g?gBgJgVg_gµg£d'<Ÿ*Ÿ*½*Õ*æ*í* +þ*!+A+-+P+a+w+c+�+œ+œ+´+´+¾+¤ü%`¯¯ÇÙä÷ë AVC‹qeš···Éææ2&di|p¤’³ÔìÙû/>[[[mŠŠ«²ÔÔÜ¥(fåfåtå—å�å¢å¢å¨å¦(!'ž×ž×§×µ×»×½×Â×§D]j : :::A:J:V:k:s:y::�:�:‘:¨„½Ú¸ª¸ªëª÷ªûª« ««««"«&«.«3«7«H«Y«[«_«p«�«�«£«««¶«¶«¶«È«©€ÀœÀœÙœàœçœîœôœ���$�;�>�@�[�e�o�v���“�›�›�±�±�Ã�ª Ê gVgV�VªV²V½VÍVÖVÚVõV W$W*W2W5WJWOWaWƒW‰W‘W–WœWŸWµW¾WÀWâWêWÿWXX5X;X@X@X@XMX^XiXvX‚X•X¢X¯XÆXÛXåXçXþXYYY%YHYHYHYZY«<ÑÜ +5 +555$5,545<5C5S5S5X5¬´*££3£@£E£I£R£a£m£x£ƒ£‹£–£ž£¡£­£µ£Ï£õ£ï£¤¤C¤/¤S¤S¤k¤v¤’¤™¤½¤Ä¤ö¤ö¤ö¤ö¤W¥­˜‹-þ¸þ¸¹"¹*¹5¹L¹V¹V¹m¹w¹’¹¨¹¶¹º¹Ú¹î¹º º º&º0ºAºNºNºUº\ºaºfºkºrºyº“ºšºªº®º®º¸ºÎºÒºÒºãºöº » »»»!»)»4»;»C»N»U»U»`»~»‚»š»‹»µ»µ»»»Â»Ñ»Û»é»ð»ô»ö»¼¼¼¼"¼H¼V¼V¼Z¼o¼w¼‡¼’¼§¼¬¼º¼É¼Ó¼á¼ì¼ð¼õ¼ý¼½½½!½#½2½4½C½J½N½b½l½z½�½…½•½ ½¥½Ã½Í½Û½â½æ½ð½þ½¾ ¾¾'¾/¾:¾>¾>¾>¾I¾T¾d¾p¾†¾Ž¾™¾¨¾°¾»¾À¾È¾Ó¾ß¾ã¾î¾ó¾¿¿¿¿¿¿7¿T¿`¿h¿x¿ˆ¿¦¿ª¿Ù¿Î¿¿¿é¿é¿ó¿ú¿ ÀÀ"À0À7À;À=ÀLÀVÀdÀkÀoÀoÀqÀƒÀƒÀ•À•À•À›À§À¹ÀÁÀÙÀÁÁÁ5Á<ÁCÁNÁdÁiÁpÁƒÁ�Á›Á¢Á¦Á¨Á»ÁÅÁÓÁÚÁÞÁÞÁÞÁÞÁìÁ÷ÁÂÂÂ)Â-Â-Â2Â:Â>ÂMÂOÂ^Â`ÂoÂq€‡‹Ÿ©·¾ÂÂÂÒÂÝÂâÂà +Ãà Ã#Ã-Ã;ÃBÃFÃPÃdÃlÃwÃ{Ã{Ã{ÆÃ�ÛõÃÅÃÐÃåÃêÃõÃÄÄ'Ä/Ä:ÄIÄQÄ\ÄaÄiÄtĀĄÄ�ĔĨİĻĻĻĻÄÏÄßÄôÄÅÅÅ*Å?ÅLÅPÅ^ÅsŃŚųÅÌÅÎÅÙÅáÅáÅêÅÆÆ/ÆHÆVÆaÆmÆuÆwƂƊƊƊƧƵÆÃÆÚÆñÆÇ Ç-Ç4Ç4ÇDÇXÇrÇrÇvnjǛǶÇÁÇØÇàÇàÇÈÈÈ3È<ÈSÈmÈ|ȉȩȷÈÍÈéÈùÈÉÉ)É)É5ÉPÉhÉqÉqÉqÉ}ɎɦɯɯɶɿÉÅÉÑÉ0Ê®<ùD��%�1�<�F�L�V�\�f�t�~���š� �ª�°�º�Á�Í�Ó�Ü�‘‘‘‘%‘7‘A‘S‘]‘r‘r‘u‘‘”‘™‘©‘´‘¹‘͑ϑà‘’’ ’"’0’9’A’O’`’p’�’Ž’Ž’›’›’£’±’ø’¯$› PP+P3P>PDP°l£:_F_FxF�F FÀFÒFêFGG/G7G;G>GBGGGQGTG[GaGhGnGrGwG�G’G™G G¢G¦G¯G¹G¼GÇGÓGÖGçGòGøGÿGH!H2H;HDHLHWHbHnHH�HœHªH¬H³HºH¿HÃHÐH×HúHIII%I>IOIXIaIiIrIxI|I�I…I’I™I§I±IÆIÐIÙIòIJ JJJ&J,J0J5J;JEJOJnJ|J‚J‡J�J—JŸJ¬J´JÓJÆJèJñJ K K3K:KCKLKSK\KeKnK‡KwK—K›KõK±  €ˆ€ˆŽˆ°ˆ¶ˆ²¸�·z'z'ˆ'�'È'Ê'ÿ'*(*(:(?(?(S(X(X(t(y(y(™(ž(ž(²(·(·(Ô(Ô(â(),)L)^)p)‚)’)’)’)’)™)r*³$bgÊ%Ê%Î%æ%ø%&´„¯Â¯ÂÁÂÐÂÐÂÓÂÜÂèÂèÂþÂÃ&Ã-Ã1ÃAÃaÃsÃyÈÑÕÛäúþÃÛÃùà ÄÄ Ä2Ä>Ä@ÄLÄTÄXÄ^ÄgÄgÄgÄyĄĊĠħįÄÅÄÌÄÌÄÌÄÚÄÅ +ÅÅ$Å,Å5Å@ÅFÅ\ÅcÅkÅrŇŘŘşşşŭÅÔÅáÅêÅòÅÆ ÆÆÆ Æ'Æ5Æ9ÆEÆ]ÆeÆkÆzƃƇÆ�ƘƘƦƮƴÆÑÆÚÆâÆèÆîÆîÆîÆõÆüÆ ÇÇÇ Ç Ç!Ç+ǵxwÙwمٚ١٬ÙÂÙìÙÚÚ'Ú-Ú<ÚEÚMÚUÚWÚ]ÚcÚrÚzÚ€Ú‚ÚˆÚ¶¼Ô¯b¯bÒbÚbêbòbc-c1c9cAcGcPc\cdcdclcœcÛc¶cþcd dd2ddKdQdZdadidqd}d…d�d d¨d­d·d×dÞdàdêdùde e"eBeIeIeIeReYerexe€e€e…e‰e•eže§e³eÖeùeäeff1f>fRfhflf‹f™fºf¥fÓfÙfðfÛf g g g(g5gIg_gggkgvg~gŽg¥g�g¾gÁgÉgÙgðgÛg hhhhh$hUh]h]h]h]hfhrhˆh¡h´h»hÇhÎhÎháhåhåhåhìhñhi iiii8i:i?iRiYieililiyiƒiƒiˆi«i«i½i·àt¨÷@÷@ A*AA_AEA9AnA}A…A�A’A�A¨A¨A­AâAçAB4B!BVBCBjBeB†B•B�B¨BªBµBÀBÀBÅBæBèB C CCC7C9C[C[C[CcC¸\æù_e_eue‡e�e˜e¦e²eÉeÉeÛeáeìeüeff"fNf¹$âç??]pw~…‰‹’™��¥¾ÈÈÜçõ  +  # ' 0 4 9 ? \ \ j � † Ÿ ° ´ ´ ´ ¹ Ä Î Õ è ì ñ      # 5 E \ ^ w Š Ž Ž Ž ¢ ¦ ¯ ³ ¸ ¾ Û Û é !!!/!3!E!E!E!J!Y![!}!}!Ÿ!ª!°!Æ!×!Ü!ç!û!ÿ!" """-"-";"R"T"m"~"‚"‚"‰"œ" "²"·"Ë"Ó"Ü"à"å"ì"##)#.#G#Z#^#p#p#p#p#‚#u#—#¦#¨#Ê#Õ#Û#ñ#$$$ $$5$5$5$D$D$W$n$y$Š$�$•$Ÿ$¡$­$­$´$¿$Ô$Ö$á$ö$%%%%+%2%9%C%K%O%S%U%Z%b%f%x%z%%‡%‹%�%�%–%£%¹%Ù%ó%& &&&'&+&+&+&2&7&Q&_&k&r&r&Œ&Ž&“&­&»&Ç&Î&Î&Û&å&å&÷&º¤ ¹ž(J(JEJTJTJTJqJqJ‚J‚JˆJŠJŠJ�J’J’J˜JšJšJ¡J¥JªJªJªJªJªJªJ²JÊJÊJßJêJôJKKK:KL,LDLSLXL_LhL{LƒL‹L�L�L�L™L²L¸L¸LÑLßLüLMM M%M-M2M2M8M8MAMRMTMiMkMsMyM�M†M†M†M†M”M«M­MÁMÁMÉMÏM×MÜMåMíMöMüMNNNN N NN1N5N7NCNEN`NfNnNsN|N‡N‹N‘N•NžN¡N¡N¯NÀNÂNêNO OOO#O(O(O-O/O7O7OROdOiOuO{O~O•O—OšOªO®OµO¾OÍOÛOáOéOîOöOûOûOPPP4P9PCPkPvP�PŒP—P¢P­P¸PÃPÎPÎPÎPÖPßPøPQ#QQDQFQIQTQVQVQ\QbQbQjQsQyQ…Q…QŒQ�Q®Q¹QÁQÉQÎQÎQÕQÙQÞQðQõQÿQ R RR=R=RFRTReRqRxR†R•R«R±R¶R¶R»RÑRÝRåRõRÿRSSS S(S(S2S@SLScSyS�S–S˜S¯S´S´SÔSÔSæSìSõSûSTTTT.T4T6TATSTiTiT}T�TŸT¤T°T¶T¹TÐTÒTÕTåTïTòTòTUU*U/U;UAUDU[U]U`UpUtU|UŠU�U”U”UšU¢U§U§U­U­U»UÁUÇUÑUÛUéUþUVV V VVVV!V&V&V,V4V9V9V>VIVNVSV^VcV‰V‹V�V•VšVŸV¤V©V®V®V³V¸VÔVÞVòVW WWW"W(W.W8WBWPWeWhWjWtWƒWˆWˆWˆW�W•WžWžW£W£W©W±W¶W¶W»WÆWËWÐWÕWäWäWõWûWûW XXX X)X7XLXOXQX[XjXoXoXoXwX|X…XŠXŠX�X˜X�X�X¢X­X²X·X¼XËXËXÜXâXâXðXöXüXYYY3Y6Y8YBYQYVYVYVY^YcYlYqYqYwYY„Y„Y‘Y—Y—Y¥Y«Y±Y»YÅYÓYèYëYíY÷YZ Z Z ZZZ!Z&Z&Z,Z4Z9Z9ZFZLZLZZZ`ZfZpZzZˆZ�Z Z¢Z¬Z»ZÀZÀZÀZÈZÍZÖZÛZÛZåZíZòZòZòZøZ[[[![!['[1[7[<[<[E[S[\[j[o[o[x[†[’[£[°[·[¿[É[×[×[Ü[Ü[ç[ç[ç[ë[ð[ð[÷[û[\\\\\(\0\5\;\;\C\L\Z\e\j\p\x\}\}\}\}\}\}\}\}\}\}\–\œ\¥\«\³\¸\½\Æ\Ñ\Ú\â\ç\ç\ç\í\õ\ú\ú\þ\]] ]]&]/]5]5]>]T]T]Z]c]y]y]‚]„]Š]“]©]©]²]²]²]»]À]À]È]Í]Í]ê]ø]^ ^^^!^&^&^&^:^C^I^[^e^e^m^m^u^w^w^�^š^£^¥^¥^¥^«^¯^±^±^±^±^¶^¼^Â^Æ^=b»Ì€¯¿i¿iáiìijj+jBjWjbjxjdj‡j�j�jžjžj¦j²jÈjÝjìj÷j +kkkkkk)k4kNkPkUkdkok|k†k†k”k¼”+LX¥X¥p¥w¥~¥�¥Š¥�¥�¥”¥™¥»¥¨¥Ë¥Ó¥Û¥Þ¥à¥ð¥ù¥¦¦ ¦¦:¦K¦V¦ˆ¦½à.¢oBoB�B˜B©B¬B°B¹BÀBÎBÝBóBCC'C9CHCWChCwCwC…C‰C�C’C–C£CªC¸CÌCÕCÛCéCDDDDDDDDDD+D4DQTQIQlQvQÀPQaâ$â$ð$þ$%%&%+%H%N%U%\%j%v%ˆ%Ä%ÁD+®å®åÂåÐåÖåùåÿåæ*æ0æ6æ<æ<æDæÂô#œ§6§6¯6¾6Â6Ï6Ü6ð6ÿ67)7;7]7…7“7¯7Á7Ù7ð7û78:8I8d8o8Š8£8£8¾8ç899.9=9L9L9W9j9{9Ž9ž9«9·9Æ9ã9ã9ë9ë9ë9ü9 ::/:8:I:M:U:`:x:�:™:©:±:¶:Ú:ê:ú:;;;&;L;N;Y;Œ;¦;¦;¾;Í;Õ;ä;í;õ;<)<1<9<D<F<V<n<†<ž<¶<È<ß<è<ñ<====à ¸ˆ¸ˆÁˆàˆåˆÄ\ˆ[–͖ͰͷÍÄÍÏÍÔÍÚÍìÍòÍ +ÎÎ.ÎDÎOÎUÎwÎw·ΜΞΡέενÎÅÎÓÎÙÎâÎîÎîÎðÎÏÏ Ï Ï$Ï$ÏBÏBÏUÏbÏgÏgÏ~χϖϬϷÏÅÏÐÏàÏíÏÿÏÐÐÐ(Ð*Ð*Ð2Ð7Ð7Ð?ÐDÐDÐLÐQÐQÐYÐ^Ð^ÐdÐiÐiÐpÐuÐuÐ|Ð�Ð�ЌББМССЬббммÐ×ÐÞÐäÐçÐòÐõÐ ÑÑ%Ñ,Ñ/ÑAÑCÑIÑ]ÑjÑyÑyÑyÑyуÑ�ѲÑÄÑÕÑÞÑïÑõÑúÑÒÒ(Ò7Ò=ÒNÒYÒcÒsÒ‚ÒˆÒ“Ò™Ò®Ò´ÒÅÒÐÒÖÒæÒæÒöÒ ÓÓÓ-Ó4Ó:ÓKÓVÓ[ÓxÓ�Ó›Ó«Ó·ÓÉÓÔÓãÓåÓ÷ÓÿÓÔ ÔÔÔ'Ô-Ô7Ô=ÔHÔNÔPÔ]ÔjÔtÔ�Ô›Ô›Ô¡Ô¨ÔìÖÅD#°ø¬ø¬­9­A­A­O­b­|­­ˆ­¤­¤­¤­¬­®­®­¶­¸­¸­À­Â­Â­Ê­Ê­Ó­Ù­Þ­Þ­ç­ö­ú­ÿ­® +® +® +® +®®®!®&®&®+®8®Q®p®s®‰®¨®¨®¨®°®²®²®²®º®¼®¼®¼®Ä®Æ®Æ®Æ®Î®Ð®Ð®Û®Û®á®æ®æ®æ®æ®í®ø® +¯¯&¯0¯0¯0¯@¯@¯G¯K¯Q¯i¯w¯Š¯—¯À¯Ã¯Ì¯Ó¯ç¯ï¯ø¯°°°°°°° °&°;°C°I°T°k°‚°Ž°”°™°™° °«°«°°°Â°È°È°È°È°$±Æd$àCàCD DDDD,D.D;D=DHD\DdDtDyDD‡DŠDœDÇLWf"1"161:1?1J1J1T1Z1Z1^1f1È\CVº0º0Ð0Ð0Ô0Ù0ì0ï0ô0ô0þ011111É8(2Æ×Æ×Ï×Ï×Ý×á×è×ë×ð×ʨY§\§\¿\Ç\Ò\å\Ù\]{]a]V]<]%]�]–]†]¶]»]Ø]Ý]ò]ß]^^^^8^c^F^z^˜^˜^˜^¤^ËlQhß,ß,ù,"--1-Q-m-c-…-�-Š-¬-Å-å-÷-...9.9.C.Ì4�¦OíOícíhíníríví•í�íÍxÏé��2� �A�K�R�h�m�r�v�x�~�„�š�‡�©�Â�Ê�Ü�ÿ�õ�‚‚Δ"ȫȫ֫è«ì«ô«ü«¬¬¬%¬0¬5¬K¬R¬Y¬d¬o¬q¬|¬‡¬‰¬•¬ ¬«¬´¬¼¬¼¬À¬÷¬Ï€ø2626P6T6X6`6n6q6t6Š6�6’6¤6¨6¬6´6¼6È6Ý6î6õ6ü6ü6 77к< D DODZDDaD™DÏDÔDÔD×DáDùDE +EE4EUEgEtE�EŸE¤E¾EÈEÊEÏEæE F F,FGFcFYF}FƒFƒFŒF¬F¸F»F½FØFÂFçFçFùFùFGGŽ\ŽgŽwŽÞ 5�g�g§g¹g¿gËgÖgägðghh"h4h:h@hFhYh_hhhnh€h†h‘h™h§h´hñhß,29w0w0…0–0¯0Ã0Æ0Ì0à4èˆèˆöˆ‰ ‰‰‰!‰!‰'‰áÄMzÿýÿý+þ.þ3þ@þEþWþYþ]þaþdþwþ�þ¶þ¿þÊþÑþêþÿÿ.ÿTÿYÿ`ÿyÿŸÿ¡ÿºÿàÿàÿàÿøÿ!3â ˆÇ/w/wMwPwVwjwrwƒw�w–w›w›w¨w±w·wÇwÕw×wöw +xxx-x-x;xNxYx]xnxnxnxsxsxxŽx¡x§x¬xÀxÆxÎxàxæxèx÷xy +yyyy!y(y4y;y=yByJyLyQy]y_ydylynysy{y}y‚yŠyŒy‘y™y™y™y©y©y©yÀyÆyÌy×yÜyõyûyzzzz"z;zFzQzWzdziznznzƒz‹z•z�z¥zÆzÑzÜzèzâzñzúzÿz{{ {){5{;{G{K{P{U{`{k{v{x{~{‹{�{•{®{¹{Ä{Ä{Ê{×{Ù{Þ{ç{| |||)|)|-|2|2|C|E|E|X|Z|Z|m|o|o|‚|„|„|—|™|™|«|«|±|¶|¶|Í|á|Ö|î|ö|ý|} }})} }9}9};}S}V}X}g}y}‰}•}¬}Æ}Ë}ß}ï}~~~~$~6~A~I~Q~U~c~i~n~n~t~ˆ~˜~�~�~£~©~®~®~®~´~Ã~Ö~ã~ç~ì~ì~ð~õ~õ~ú~+AMMS`bo{Š��ª¶¶¶¶º¿Ðâíõýÿ€€$€3€9€F€F€]€m€m€�€�€�€˜€¤€»€»€Á€΀Ѐâ€â€í€í€í€í€í€iƒã ŒÐ�V�V­V»VÒV×VüVWW WW"W1W6WBWTWTWrW}W�W—W±WÎWÚWõW X)X2XAXIXVX_XdXtX‚X¢X§X¯XÈXÚXêXðXûXY +YPY:Y+Y`Y›Y…YvY«Y®YÓYbZä<%0 D DÁDÇDÐDâDûDEE)Eå„ |† † ¨ ³ º  Å Å Õ à à ã ê ñ ÷ ý ! +!!!!!!#!,!8!>!c!g!j!z!‚!‡!‡!Ž!—!¨!®!·!Â!Ó!Ó!Ü!á!ë!ò!ù!"" ""."1"@"M"Z"Z"Z"Z"`"r"{"Œ"­"¾"Ö"Ý"ç"ï"ö"ö"ÿ"##"#-#-#-#A#U#e#h##$æ„9ú7ú78%8,808F8s8‰8š8£8±8Ã8Ü8Ü8î8999 9çX{Í^^‰“¦±ÃÑ×èï÷ (=MWYiy‚ˆ�”𠦱¼¿Æàè$'/3ET[c~›Ÿ¨¯ÁÉÐÔÝßñ "///1HNN`è  +XˆXˆaˆuˆzˆé¤¢Ç  ;ASX^aeeˆ�º¦ÉâÎñ€ó€€#€)€,€0€2€K€7€Z€Z€Z€u€¤€°€ê˜Ìîââëææúõ ""11@@OO^^m�|‹‹š©¸#ëxËå/d/dMd_dedqdˆdˆdšd d«d»dÇdÐdÖdÜdçdõdeee+e+e[eìd§¼ŸíŸí£í¶í¶íÐí×íãíãíúíúíîî(î(î?î?îVîXîXî\îíÌÂñ¯¯ÑØãùù *.379?Q]rt�œ   ³ÈÈÔÚäïý.HHZîP1A0E0EFEREZE^EoE}EƒE�E—E¢E¨E«EµEï ®-×=×=ñ=ü=> >>>->>>O>a>s>‚>‘>¢>±>±>¸>¼>Å>Ò>Ù>â>é>í> ? ? ? ? ??? ?(?6?>?K?S?[?l?w?|?|?‰?�?ž?µ?·?Â?Ï?Ú?Ý?ã?ß?÷?@@@ @+@1@1@9@9@K@R@h@h@h@m@m@…@“@ž@£@£@¦@«@«@Ê@Ø@å@ç@ç@ë@í@í@ AA&A(A(A+A-A-A:AøEøNøUøUøZøgøtøtøzøˆøŸø¥ø¨ø«ø²ø²øÃøÊø×øäøäøëøõøüøù ùù(ù(ùBùGùNùVù]ùmùqùzù’ù—ùžùÀùËùÑùÙùòùúú!ú!ú;úIúPúWúyúŒú°ú²ú¼úÞúÞúÞú÷úûû3û7û üóÀ€¬§^§^¿^Ã^È^×^â^î^_ð^_#_#_H_y_\_O_œ_¡_Ê_Ï_Û_ü_Ý_ ``)`0`S`i`i`�`�`›`ô Æ/Æ/Õ/î/ô/õ4‘šŸOŸO·OÚOçOíOóOöOPö8 ê.ê.ø.ÿ. +/// /%/%/+/÷ :>Ï0Ï0Ù0á0æ0øÐSŸuŸu½uÍuØuîu vv>vlvrvxv€v‚vŠvŸv¢v­v¹vÏvìvûv wMwSwYwawfwnwƒw†w‘w�w¢w¨w®w¶w¾wÆwÖwîwüw*x0x5x=xMxOxsx¡x§x¬x¬x½xÈxÓxðxyyy*y*y/yByYy[yxy�yœy¤y²y²y·yÊy×yáyøyz*z>*>,>/>4>4>4>>>F>M>U>^>i>o>|>Š>Š>”>�>¥>Ú>à>ç>ö>???(?0?0?2?2?7?7?>?D?H?O?S?S?S?S?b?b?‡?�?�?”?¯Cú(°C°C¾CÇCÕCÛCû�°Ð—k—kµk½kÉkßkôkl ll"l"l"l'l,l:lEl^l`lelsl~l‹l’l lü\=P¿+¿+Ù+þ+à+ ,), ,A,V,C,e,~,�,©,©,°,Ò,Ò,Ü,ý8fpßMßM÷MNN)N/N5N8NXNþ0�—PŒPŒdŒpŒ~Œ�Œ™ŒœŒ¤Œÿ0S[ŽØŽØ¢ØªØ·ØÁØÔØP>NЉЉ܉ð‰ó‰ŠŠŠŠ'Š/Š2Š8ŠT¡²GPGPaPtPwP�PŽP£P¥P·PÁPÕPÕPÛPÞP2Q<˜£¨Œ¨Œ¼ŒÃŒÏŒÛŒëŒðŒóŒ÷ŒÿŒ 26FæFæTæ`æH!/OZOZcZoZ…ZqZ”Z–Z�Z¨Z´Z¼ZD>‹×S×SùST TT+T2T4T4TPTVTXTcTjTjTnT}T†TŽT—TŸT¦T­T±T¸TÀTÆTËTÓTêTîTUUU1U6UCUCUWUbUiUrU€U‰U¬U²U¶U»UÀUÃUÍUÒUÞUçUûUVV(V/V/V6V9V‹Vläû&ä&ä:äPä^äiämätäxä�ä�ä’ä’ä¦ä¨ä±ä·ä·ä·ä·ä¿ä´EnÀEÀEæE÷EüEF F FF(F,F1FFFHFKFOFVFjFnFvF‚F‰F�F•F—FŸF­FµF·FºFÓFÛFãFñFõFG %I¯r¯r¿rËr×rçrÿrss$s,s3sLsys“s s­s½sÃsÅsÖsøsÿsttt1t!>>B>0>Q>W>f>{>}>ˆ>�>�>±>¶>¿>Ë>Ó>ñ>Þ>&? ??5?R?=?r?Š?w?¬?™?Í?»?Ü?î?ä?@@@ @.@.@:@ Ð1ø’ø’ “ “2“2“R“V“[“[“[“g“l“|“�“�“�“†“†“Ÿ“¦“µ“Ó̓ܓå“ç“ç“ç“ç“î“õ“ü“” +””” ” ”!”!”'”,”3• D$rr%r/r9rIrNrWrcrerwrwryr©r \ No newline at end of file diff --git a/Compiler/CompilerB.HH b/Compiler/CompilerB.HH index 2138d95..989e1f4 100644 --- a/Compiler/CompilerB.HH +++ b/Compiler/CompilerB.HH @@ -67,10 +67,10 @@ extern I64 Cmp(U8 *filename, U8 *map_name=NULL,U8 *out_name=NULL,U8 mapfile_drv_let=0); #help_index "Debugging/Unassemble" -public extern U8 *U(U8 *ip,I64 cnt=20,I64 seg_size=64); -public extern U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64, +public extern U8 *U(U8 *rip,I64 cnt=20,I64 seg_size=64); +public extern U0 Ui(U8 *buf,U8 **_rip,I64 seg_size=64, I64 *_jmp_dst=NULL,Bool just_ins=FALSE); -public extern I64 Un(U8 *ip,I64 cnt=0x80,I64 seg_size=64); +public extern I64 Un(U8 *rip,I64 cnt=0x80,I64 seg_size=64); extern CUAsmGlbls uasm; #help_index "Hash/System" diff --git a/Compiler/Lex.HC b/Compiler/Lex.HC index 2dcf9eb..7e0f17c 100644 --- a/Compiler/Lex.HC +++ b/Compiler/Lex.HC @@ -39,9 +39,9 @@ CCmpCtrl *CmpCtrlNew(U8 *buf=NULL,I64 flags=0,U8 *filename=NULL) cc->htc.define_hash_table=cc->htc.hash_table_lst= cc->htc.glbl_hash_table=cc->htc.local_hash_table=Fs->hash_table; if (flags&CCF_KEEP_AT_SIGN) - cc->chars_bmp_alpha_numeric=chars_bmp_alpha_numeric_no_at; + cc->char_bmp_alpha_numeric=char_bmp_alpha_numeric_no_at; else - cc->chars_bmp_alpha_numeric=chars_bmp_alpha_numeric; + cc->char_bmp_alpha_numeric=char_bmp_alpha_numeric; tmpf=LexFilePush(cc); QueInit(&cc->next_stream_blk); if (filename) @@ -155,11 +155,6 @@ lgc_start2: tmpf->line_num=doc_e->y+1; cc->last_U16='\t'; goto lgc_done; - case DOCT_PAGE_BREAK: - tmpf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; - tmpf->line_num=doc_e->y+2; //TODO: should be a page down - cc->last_U16=CH_FORM_FEED; - goto lgc_done; case DOCT_INS_BIN: tmpf->buf_ptr=cc->cur_buf_ptr=&lex_zeros; tmpf->line_num=doc_e->y+1; @@ -245,7 +240,6 @@ lgc_start2: } break; case CH_CURSOR: - case CH_FORM_FEED: goto lgc_start1; case '\n': tmpf=cc->lex_include_stk; @@ -261,7 +255,7 @@ lgc_done: if (cc->last_U16==CH_SHIFT_SPACE) cc->last_U16=CH_SPACE; if (cc->opts & OPTF_ECHO && - cc->last_U16<256 && Bt(chars_bmp_printable,cc->last_U16)) + cc->last_U16<256 && Bt(char_bmp_printable,cc->last_U16)) '' cc->last_U16; } return cc->last_U16; @@ -271,7 +265,7 @@ U0 LexSkipEol(CCmpCtrl *cc) {//$LK,"LexGetChar",A="MN:LexGetChar"$ to NULL until end-of-line. I64 ch; do ch=$WW,0$LexGetChar(cc); - while (Bt(chars_bmp_non_eol,ch)); + while (Bt(char_bmp_non_eol,ch)); } U8 *LexFirstRem(CCmpCtrl *cc,U8 *marker,I64 _len=NULL) @@ -413,7 +407,7 @@ I64 LexInStr(CCmpCtrl *cc,U8 *buf,I64 size,Bool *done) j=0; for (k=0;k<2;k++) { ch=ToUpper(LexGetChar(cc)); - if (Bt(chars_bmp_hex_numeric,ch)) { + if (Bt(char_bmp_hex_numeric,ch)) { if (ch<='9') j=j<<4+ch-'0'; else @@ -482,7 +476,7 @@ lex_ident: LexExcept(cc,"Ident limited to STR_LEN chars at "); else if (!(ch=LexGetChar(cc))) break; - else if (Bt(cc->chars_bmp_alpha_numeric,ch)) + else if (Bt(cc->char_bmp_alpha_numeric,ch)) buf[i++]=ch; else if (ch==TK_SUPERSCRIPT) buf[i++]='>'; @@ -526,7 +520,7 @@ lex_ident: if (ch=='X') { while (TRUE) { ch=ToUpper(LexGetChar(cc)); - if (Bt(chars_bmp_hex_numeric,ch)) { + if (Bt(char_bmp_hex_numeric,ch)) { if (ch<='9') i=i<<4+ch-'0'; else @@ -554,7 +548,7 @@ lex_ident: } } while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) i=i*10+ch-'0'; else { if (ch=='.' || ch=='e' || ch=='E') break; @@ -576,7 +570,7 @@ lex_is_int: lex_float_start: k=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) { + if (Bt(char_bmp_dec_numeric,ch)) { i=i*10+ch-'0'; k++; } else { @@ -597,7 +591,7 @@ lex_float_start: } j=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) j=j*10+ch-'0'; else { if (neg_e) @@ -660,7 +654,7 @@ lex_float_start: i=0; for (l=0;l<2;l++) { ch=ToUpper(LexGetChar(cc)); - if (Bt(chars_bmp_hex_numeric,ch)) { + if (Bt(char_bmp_hex_numeric,ch)) { if (ch<='9') i=i<<4+ch-'0'; else @@ -723,7 +717,7 @@ lex_float_start: HashSrcFileSet(cc,tmph); do ch=LexGetChar(cc); //skip space between define name and start - while (Bt(chars_bmp_non_eol_white_space,ch)); + while (Bt(char_bmp_non_eol_white_space,ch)); i=j=0; buf2=NULL; @@ -749,7 +743,7 @@ lex_float_start: ch=LexGetChar(cc); if (ch=='/') { do ch=LexGetChar(cc); - while (Bt(chars_bmp_non_eol,ch)); + while (Bt(char_bmp_non_eol,ch)); break; } else { buf[j++]='/'; @@ -757,7 +751,7 @@ lex_float_start: } } else if (ch=='\\') break; - else if (Bt(chars_bmp_non_eol,ch)) + else if (Bt(char_bmp_non_eol,ch)) buf[j++]=ch; else break; diff --git a/Compiler/OptLib.HC b/Compiler/OptLib.HC index 2e4a04c..87f7af8 100644 --- a/Compiler/OptLib.HC +++ b/Compiler/OptLib.HC @@ -18,16 +18,16 @@ U0 OptSetNOP1(CIntermediateCode *tmpi) { tmpi->ic_code=IC_NOP1; tmpi->ic_flags=0; - tmpi->a1.type=MDF_NULL+tmpi->a1.type.raw_type; - tmpi->r.type =MDF_NULL+tmpi->r.type.raw_type; + tmpi->arg1.type=MDF_NULL+tmpi->arg1.type.raw_type; + tmpi->res.type =MDF_NULL+tmpi->res.type.raw_type; } U0 OptSetNOP2(CIntermediateCode *tmpi,I64 stk_delta=1) { tmpi->ic_code=IC_NOP2; tmpi->ic_data=stk_delta; - tmpi->a1.type=MDF_NULL+tmpi->a1.type.raw_type; - tmpi->r.type =MDF_NULL+tmpi->r.type.raw_type; + tmpi->arg1.type=MDF_NULL+tmpi->arg1.type.raw_type; + tmpi->res.type =MDF_NULL+tmpi->res.type.raw_type; } CIntermediateCode *OptFree(CIntermediateCode *tmpi) @@ -100,17 +100,17 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tmpi, CIntermediateCode *tmpii; CHashClass *tmpc=tmpi->ic_class,*tmpc1,*tmpc2; - if (tmpi1->ic_flags&ICF_R_TO_INT) + if (tmpi1->ic_flags&ICF_RES_TO_INT) tmpc1=cmp.internal_types[RT_I64]; - else if (tmpi1->ic_flags&ICF_R_TO_F64) + else if (tmpi1->ic_flags&ICF_RES_TO_F64) tmpc1=cmp.internal_types[RT_F64]; else { tmpc1=OptClassFwd(tmpi1->ic_class); } - if (tmpi2->ic_flags&ICF_R_TO_INT) + if (tmpi2->ic_flags&ICF_RES_TO_INT) tmpc2=cmp.internal_types[RT_I64]; - else if (tmpi2->ic_flags&ICF_R_TO_F64) + else if (tmpi2->ic_flags&ICF_RES_TO_F64) tmpc2=cmp.internal_types[RT_F64]; else { tmpc2=OptClassFwd(tmpi2->ic_class); @@ -126,18 +126,18 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tmpi, tmpi1->ic_data(F64)=tmpi1->ic_data; tmpi1->ic_class=cmp.internal_types[RT_F64]; tmpi1->ic_code=IC_IMM_F64; - tmpi1->ic_flags&=~ICF_R_TO_F64; + tmpi1->ic_flags&=~ICF_RES_TO_F64; } else if (tmpc1->raw_type!=RT_F64) - tmpi1->ic_flags|=ICF_R_TO_F64; + tmpi1->ic_flags|=ICF_RES_TO_F64; if (tmpi2->ic_code==IC_IMM_I64) { tmpi2->ic_data(F64)=tmpi2->ic_data; tmpi2->ic_class=cmp.internal_types[RT_F64]; tmpi2->ic_code=IC_IMM_F64; - tmpi2->ic_flags&=~ICF_R_TO_F64; + tmpi2->ic_flags&=~ICF_RES_TO_F64; } else if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; if (IC_LESS<=tmpi->ic_code<=IC_GREATER_EQU && (tmpii=OptLead1(tmpi)) && tmpii->ic_code!=IC_PUSH_CMP && tmpii->ic_code!=IC_AND_AND) { //We are looking for float comparisons to zero to convert to int. @@ -149,7 +149,7 @@ Bool OptFixupBinaryOp1(CIntermediateCode *tmpi, tmpi1->ic_code==IC_DEREF && tmpc1==cmp.internal_types[RT_F64]) { tmpi2->ic_code==IC_IMM_I64; fb_here1: - tmpi1->ic_flags&=~ICF_R_TO_F64; + tmpi1->ic_flags&=~ICF_RES_TO_F64; tmpi->ic_class=tmpi1->ic_class=tmpi2->ic_class= cmp.internal_types[RT_I64]; *is_unsigned=FALSE; @@ -183,9 +183,9 @@ Bool OptFixupBinaryOp2(CIntermediateCode **tmpi1,CIntermediateCode **tmpi2) { CIntermediateCode *tmpii1=*tmpi1, *tmpii2=*tmpi2; - if (tmpii1->ic_code==IC_IMM_I64 && !(tmpii1->ic_flags & ICF_R_TO_F64)) + if (tmpii1->ic_code==IC_IMM_I64 && !(tmpii1->ic_flags & ICF_RES_TO_F64)) return TRUE; - if (tmpii2->ic_code==IC_IMM_I64 && !(tmpii2->ic_flags & ICF_R_TO_F64)) { + if (tmpii2->ic_code==IC_IMM_I64 && !(tmpii2->ic_flags & ICF_RES_TO_F64)) { *tmpi1=tmpii2; *tmpi2=tmpii1; return TRUE; @@ -205,10 +205,10 @@ Bool OptFixupUnaryOp(CIntermediateCode *tmpi, CIntermediateCode *tmpi1, tmpi1->ic_data(F64)=tmpi1->ic_data; tmpi1->ic_class=cmp.internal_types[RT_F64]; tmpi1->ic_code=IC_IMM_F64; - tmpi1->ic_flags&=~ICF_R_TO_F64; + tmpi1->ic_flags&=~ICF_RES_TO_F64; } else if (tmpc1->raw_type!=RT_F64) - tmpi1->ic_flags|=ICF_R_TO_F64; + tmpi1->ic_flags|=ICF_RES_TO_F64; if (tmpi1->ic_code==IC_IMM_F64) { tmpi->ic_flags|=tmpi1->ic_flags; OptSetNOP1(tmpi1); @@ -236,8 +236,8 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_NOT_ZERO; tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a1t=tmpii->t.a1t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; OptFree(tmpii); return OptBrNotZero(cc,tmpi); case IC_EQU_EQU...IC_LESS_EQU: @@ -253,7 +253,7 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_AND_ZERO; break; case IC_MM_: - if (cc->pass==2 && !(tmpii->ic_flags&ICF_R_TO_F64) && + if (cc->pass==2 && !(tmpii->ic_flags&ICF_RES_TO_F64) && tmpii->ic_class->raw_type!=RT_F64) tmpi->ic_code=IC_BR_MM_ZERO; break; @@ -293,10 +293,10 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) if (tmpi->ic_code!=IC_BR_ZERO) { tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a2c=tmpii->t.a2c; - tmpi->t.a1t=tmpii->t.a1t; - tmpi->t.a2t=tmpii->t.a2t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg2_class=tmpii->t.arg2_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; + tmpi->t.arg2_tree=tmpii->t.arg2_tree; OptFree(tmpii); if (tmpi->ic_flags&ICF_PUSH_CMP && @@ -307,21 +307,21 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpii=tmpi->next; //IC_PUSH_CMP inst while (tmpii->ic_code!=IC_PUSH_CMP) tmpii=tmpii->next; - tmpii->t.a1t=tmpi; + tmpii->t.arg1_tree=tmpi; OptSetNOP1(tmpii); } lb_true=tmpi->ic_data; if (tmpi->ic_code==IC_BR_AND_AND_ZERO) { - tmpii=tmpi->t.a1t->next; + tmpii=tmpi->t.arg1_tree->next; tmpii->ic_data=lb_true; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_code=IC_BR_ZERO; OptBrZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_ZERO; tmpii=OptBrZero(cc,tmpii); @@ -331,22 +331,22 @@ CIntermediateCode *OptBrZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_LABEL; tmpi->ic_flags=0; tmpi->ic_data=lb_false; - tmpii=tmpi->t.a1t->next; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii=tmpi->t.arg1_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_data=lb_false; tmpii->ic_code=IC_BR_NOT_ZERO; OptBrNotZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_ZERO; tmpii=OptBrZero(cc,tmpii); } else tmpii=tmpi; - if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.a1t->ic_code==IC_NOP1) { - tmpi->t.a1t=tmpi->t.a1t->t.a1t; + if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.arg1_tree->ic_code==IC_NOP1) { + tmpi->t.arg1_tree=tmpi->t.arg1_tree->t.arg1_tree; tmpi->ic_flags&=~ICF_POP_CMP; } return tmpii; @@ -363,8 +363,8 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_ZERO; tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a1t=tmpii->t.a1t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; OptFree(tmpii); return OptBrZero(cc,tmpi); case IC_EQU_EQU...IC_LESS_EQU: @@ -380,7 +380,7 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_BR_AND_NOT_ZERO; break; case IC_MM_: - if (cc->pass==2 && !(tmpii->ic_flags&ICF_R_TO_F64) && + if (cc->pass==2 && !(tmpii->ic_flags&ICF_RES_TO_F64) && tmpii->ic_class->raw_type!=RT_F64) tmpi->ic_code=IC_BR_MM_NOT_ZERO; break; @@ -420,10 +420,10 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) if (tmpi->ic_code!=IC_BR_NOT_ZERO) { tmpi->ic_class=tmpii->ic_class; tmpi->ic_flags|=tmpii->ic_flags; - tmpi->t.a1c=tmpii->t.a1c; - tmpi->t.a2c=tmpii->t.a2c; - tmpi->t.a1t=tmpii->t.a1t; - tmpi->t.a2t=tmpii->t.a2t; + tmpi->t.arg1_class=tmpii->t.arg1_class; + tmpi->t.arg2_class=tmpii->t.arg2_class; + tmpi->t.arg1_tree=tmpii->t.arg1_tree; + tmpi->t.arg2_tree=tmpii->t.arg2_tree; OptFree(tmpii); if (tmpi->ic_flags&ICF_PUSH_CMP && @@ -434,21 +434,21 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpii=tmpi->next; //IC_PUSH_CMP inst while (tmpii->ic_code!=IC_PUSH_CMP) tmpii=tmpii->next; - tmpii->t.a1t=tmpi; + tmpii->t.arg1_tree=tmpi; OptSetNOP1(tmpii); } lb_true=tmpi->ic_data; if (tmpi->ic_code==IC_BR_OR_OR_NOT_ZERO) { - tmpii=tmpi->t.a1t->next; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii=tmpi->t.arg1_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_NOT_ZERO; OptBrNotZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_NOT_ZERO; tmpii=OptBrNotZero(cc,tmpii); @@ -458,22 +458,22 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) tmpi->ic_code=IC_LABEL; tmpi->ic_flags=0; tmpi->ic_data=lb_false; - tmpii=tmpi->t.a1t->next; - tmpii->t.a1t=tmpi->t.a1t; - tmpii->t.a1c=tmpi->t.a1c; + tmpii=tmpi->t.arg1_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg1_tree; + tmpii->t.arg1_class=tmpi->t.arg1_class; tmpii->ic_data=lb_false; tmpii->ic_code=IC_BR_ZERO; OptBrZero(cc,tmpii); - tmpii=tmpi->t.a2t->next; - tmpii->t.a1t=tmpi->t.a2t; - tmpii->t.a1c=tmpi->t.a2c; + tmpii=tmpi->t.arg2_tree->next; + tmpii->t.arg1_tree=tmpi->t.arg2_tree; + tmpii->t.arg1_class=tmpi->t.arg2_class; tmpii->ic_data=lb_true; tmpii->ic_code=IC_BR_NOT_ZERO; tmpii=OptBrNotZero(cc,tmpii); } else tmpii=tmpi; - if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.a1t->ic_code==IC_NOP1) { - tmpi->t.a1t=tmpi->t.a1t->t.a1t; + if (tmpi->ic_flags&ICF_POP_CMP && tmpi->t.arg1_tree->ic_code==IC_NOP1) { + tmpi->t.arg1_tree=tmpi->t.arg1_tree->t.arg1_tree; tmpi->ic_flags&=~ICF_POP_CMP; } return tmpii; @@ -484,21 +484,21 @@ CIntermediateCode *OptBrNotZero(CCmpCtrl *cc,CIntermediateCode *tmpi) U0 OptFixSizeOf(CIntermediateCode *tmpi1, CIntermediateCode *tmpi_push,CHashClass *tmpcc) { - if (tmpi1->ic_code==IC_MUL && tmpi1->t.a2t->ic_code==IC_SIZEOF) { - tmpi1->t.a2t->ic_code=IC_IMM_I64; - tmpi1->t.a2t->ic_class=tmpcc; + if (tmpi1->ic_code==IC_MUL && tmpi1->t.arg2_tree->ic_code==IC_SIZEOF) { + tmpi1->t.arg2_tree->ic_code=IC_IMM_I64; + tmpi1->t.arg2_tree->ic_class=tmpcc; tmpi_push->ic_class=tmpcc; if (tmpcc->ptr_stars_cnt) { tmpcc--; if (tmpcc->size==1) goto here; - tmpi1->t.a2t->ic_data=tmpcc->size; + tmpi1->t.arg2_tree->ic_data=tmpcc->size; } else { here: if (tmpi_push==tmpi1) - tmpi1->t.a2t->ic_data=1; + tmpi1->t.arg2_tree->ic_data=1; else { - OptSetNOP1(tmpi1->t.a2t); + OptSetNOP1(tmpi1->t.arg2_tree); OptSetNOP1(tmpi1); } } @@ -528,14 +528,14 @@ I64 CmpRawTypePointed(CHashClass *tmpc) U0 CmpMinTypePointed(CIntermediateCode *tmpi,I64 pt1) { I64 pt; - if ((pt=tmpi->a1_type_pointed_to) && pt!=RT_F64 && 0a1_type_pointed_to=pt; + if ((pt=tmpi->arg1_type_pointed_to) && pt!=RT_F64 && 0arg1_type_pointed_to=pt; } U0 CmpF1PushPop(CIntermediateCode *tmpi,CIntermediateCode *tmpi2) { if (intermediate_code_table[tmpi2->ic_code].fpop|| - tmpi2->ic_flags&ICF_R_TO_F64) + tmpi2->ic_flags&ICF_RES_TO_F64) Bts(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); } @@ -543,13 +543,13 @@ U0 CmpF2PushPop(CIntermediateCode *tmpi, CIntermediateCode *tmpi1,CIntermediateCode *tmpi2) { if ((tmpi2->ic_code==IC_MOV || tmpi2->ic_code==IC_IMM_F64) && - !(tmpi2->ic_flags&ICF_R_TO_F64) && + !(tmpi2->ic_flags&ICF_RES_TO_F64) && (intermediate_code_table[tmpi1->ic_code].fpop || - tmpi1->ic_flags&ICF_R_TO_F64)) + tmpi1->ic_flags&ICF_RES_TO_F64)) Bts(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); else if ((intermediate_code_table[tmpi2->ic_code].fpop || - tmpi2->ic_flags&ICF_R_TO_F64)&& - !(tmpi1->ic_flags&ICF_R_TO_F64)) + tmpi2->ic_flags&ICF_RES_TO_F64)&& + !(tmpi1->ic_flags&ICF_RES_TO_F64)) Bts(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); } diff --git a/Compiler/OptPass012.HC b/Compiler/OptPass012.HC index f7ce8b8..2d5cf57 100644 --- a/Compiler/OptPass012.HC +++ b/Compiler/OptPass012.HC @@ -43,8 +43,8 @@ args. tmpc=tmpi->ic_class; tmpi->ic_class2=tmpc; tmpi_push=tmpi; - MemSet(&tmpi->a1,0,3*sizeof(CICArg)); - tmpi->a1_type_pointed_to=0; + MemSet(&tmpi->arg1,0,3*sizeof(CICArg)); + tmpi->arg1_type_pointed_to=0; switch [intermediate_code_table[code].arg_cnt] { case IS_V_ARG: ps->ptr-=tmpi->ic_data>>2; @@ -52,13 +52,13 @@ args. case IS_2_ARG: tmpi2=PrsPop(ps); tmpc2=tmpi2->ic_class; - tmpi->t.a2t=tmpi2; - tmpi->t.a2c=PrsPop(ps); + tmpi->t.arg2_tree=tmpi2; + tmpi->t.arg2_class=PrsPop(ps); case IS_1_ARG: tmpi1=PrsPop(ps); tmpc1=tmpi1->ic_class; - tmpi->t.a1t=tmpi1; - tmpi->t.a1c=PrsPop(ps); + tmpi->t.arg1_tree=tmpi1; + tmpi->t.arg1_class=PrsPop(ps); break; case IS_0_ARG: //nobound switch break; @@ -67,19 +67,19 @@ args. cc->flags|=CCF_NOT_CONST; switch [code] { case IC_IMM_F64: - tmpi->ic_flags&=~ICF_R_TO_F64; - if (cc->pass==2 && tmpi->ic_flags&ICF_R_TO_INT) { + tmpi->ic_flags&=~ICF_RES_TO_F64; + if (cc->pass==2 && tmpi->ic_flags&ICF_RES_TO_INT) { tmpi->ic_data=ToI64(tmpi->ic_data(F64)); - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; tmpi->ic_code=IC_IMM_I64; tmpi->ic_class=cmp.internal_types[RT_I64]; } break; case IC_IMM_I64: - tmpi->ic_flags&=~ICF_R_TO_INT; - if (cc->pass==2 && tmpi->ic_flags&ICF_R_TO_F64) { + tmpi->ic_flags&=~ICF_RES_TO_INT; + if (cc->pass==2 && tmpi->ic_flags&ICF_RES_TO_F64) { tmpi->ic_data(F64)=ToF64(tmpi->ic_data); - tmpi->ic_flags&=~ICF_R_TO_F64; + tmpi->ic_flags&=~ICF_RES_TO_F64; tmpi->ic_code=IC_IMM_F64; tmpi->ic_class=cmp.internal_types[RT_F64]; } @@ -299,9 +299,9 @@ args. case IC_POWER: tmpc=tmpi->ic_class=cmp.internal_types[RT_F64]; if (tmpc1->raw_type!=RT_F64) - tmpi1->ic_flags|=ICF_R_TO_F64; + tmpi1->ic_flags|=ICF_RES_TO_F64; if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; tmpi_push->ic_class2=cmp.internal_types[RT_F64]; break; start: @@ -332,7 +332,7 @@ args. default: if (Bsf(i)==Bsr(i)) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->t.a1c=tmpi->t.a2c; + tmpi->t.arg1_class=tmpi->t.arg2_class; tmpi->ic_data=Bsf(i); tmpi->ic_code=IC_SHL_CONST; OptSetNOP1(tmpi1); @@ -356,16 +356,16 @@ args. tmpi->ic_code=IC_SHL_CONST; OptSetNOP1(tmpi2); } else if (tmpi1->ic_code==IC_MUL && cc->pass==2) { - if (tmpi1->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data*=tmpi2->ic_data; + tmpi1->t.arg1_tree->ic_data*=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a2t->ic_data*=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data*=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -381,16 +381,16 @@ args. OptSetNOP1(tmpi2); OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_MUL) { - if (tmpi1->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; - tmpi1->t.a1t->ic_data(F64)*=tmpi2->ic_data(F64); + tmpi1->t.arg1_tree->ic_data(F64)*=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; - tmpi1->t.a2t->ic_data(F64)*=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)*=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -509,19 +509,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi2->ic_code==IC_ADD|| tmpi2->ic_code==IC_SUB) { - if (tmpi2->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi2->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi2->ic_flags|=tmpi->ic_flags; - tmpi2->t.a1t->ic_data+=tmpi1->ic_data; + tmpi2->t.arg1_tree->ic_data+=tmpi1->ic_data; tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); OptSetNOP1(tmpi); - } else if (tmpi2->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi2->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi2->ic_flags|=tmpi->ic_flags; if (tmpi2->ic_code==IC_ADD) - tmpi2->t.a2t->ic_data+=tmpi1->ic_data; + tmpi2->t.arg2_tree->ic_data+=tmpi1->ic_data; else - tmpi2->t.a2t->ic_data-=tmpi1->ic_data; + tmpi2->t.arg2_tree->ic_data-=tmpi1->ic_data; tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); @@ -537,19 +537,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data+=tmpi2->ic_data; + tmpi1->t.arg1_tree->ic_data+=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data+=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data+=tmpi2->ic_data; else - tmpi1->t.a2t->ic_data-=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data-=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -565,19 +565,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi2->ic_code==IC_ADD|| tmpi2->ic_code==IC_SUB) { - if (tmpi2->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi2->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi2->ic_flags|=tmpi->ic_flags; - tmpi2->t.a1t->ic_data(F64)+=tmpi1->ic_data(F64); + tmpi2->t.arg1_tree->ic_data(F64)+=tmpi1->ic_data(F64); tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); OptSetNOP1(tmpi); - } else if (tmpi2->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi2->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi2->ic_flags|=tmpi->ic_flags; if (tmpi2->ic_code==IC_ADD) - tmpi2->t.a2t->ic_data(F64)+=tmpi1->ic_data(F64); + tmpi2->t.arg2_tree->ic_data(F64)+=tmpi1->ic_data(F64); else - tmpi2->t.a2t->ic_data(F64)-=tmpi1->ic_data(F64); + tmpi2->t.arg2_tree->ic_data(F64)-=tmpi1->ic_data(F64); tmpi2->ic_class2=tmpi->ic_class2; tmpi_push=tmpi2; OptSetNOP1(tmpi1); @@ -593,19 +593,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data(F64)+=tmpi2->ic_data(F64); + tmpi1->t.arg1_tree->ic_data(F64)+=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data(F64)+=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)+=tmpi2->ic_data(F64); else - tmpi1->t.a2t->ic_data(F64)-=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)-=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -638,19 +638,19 @@ args. } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_I64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; - tmpi1->t.a1t->ic_data-=tmpi2->ic_data; + tmpi1->t.arg1_tree->ic_data-=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_I64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) { tmpi1->ic_flags|=tmpi->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data-=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data-=tmpi2->ic_data; else - tmpi1->t.a2t->ic_data+=tmpi2->ic_data; + tmpi1->t.arg2_tree->ic_data+=tmpi2->ic_data; tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -667,19 +667,19 @@ args. OptSetNOP1(tmpi); } else if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) { - if (tmpi1->t.a1t->ic_code==IC_IMM_F64) { + if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; - tmpi1->t.a1t->ic_data(F64)-=tmpi2->ic_data(F64); + tmpi1->t.arg1_tree->ic_data(F64)-=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); OptSetNOP1(tmpi); - } else if (tmpi1->t.a2t->ic_code==IC_IMM_F64) { + } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) { tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags; if (tmpi1->ic_code==IC_ADD) - tmpi1->t.a2t->ic_data(F64)-=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)-=tmpi2->ic_data(F64); else - tmpi1->t.a2t->ic_data(F64)+=tmpi2->ic_data(F64); + tmpi1->t.arg2_tree->ic_data(F64)+=tmpi2->ic_data(F64); tmpi1->ic_class2=tmpi->ic_class2; tmpi_push=tmpi1; OptSetNOP1(tmpi2); @@ -807,7 +807,7 @@ args. } break; end: - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; if (!tmpi_push->ic_class->ptr_stars_cnt) { if (tmpi_push->ic_class->raw_type==RT_F64) tmpi_push->ic_class2=cmp.internal_types[RT_F64]; @@ -860,16 +860,16 @@ args. tmpi->ic_flags=tmpi->ic_flags|ICF_USE_F64; if (tmpc->raw_type==RT_F64) { if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; } break; case IC_ASSIGN: if (tmpc->raw_type==RT_F64) { if (tmpc2->raw_type!=RT_F64) - tmpi2->ic_flags|=ICF_R_TO_F64; + tmpi2->ic_flags|=ICF_RES_TO_F64; } else { if (tmpc2->raw_type==RT_F64) - tmpi2->ic_flags|=ICF_R_TO_INT; + tmpi2->ic_flags|=ICF_RES_TO_INT; } if (cc->pass==2 && tmpi1->ic_class->raw_type!=RT_F64) { if (tmpi1->ic_code==IC__PP) { @@ -891,7 +891,7 @@ args. case IC_OR_EQU: case IC_XOR_EQU: if (tmpc2->raw_type==RT_F64) - tmpi2->ic_flags|=ICF_R_TO_INT; + tmpi2->ic_flags|=ICF_RES_TO_INT; break; end: break; @@ -947,7 +947,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_INT|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_INT|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_I64; @@ -965,7 +965,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_F64|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_I64; @@ -974,7 +974,7 @@ args. tmpi->ic_class2=cmp.internal_types[RT_I64]; OptSetNOP1(tmpi1); } - if (tmpi1->ic_flags&ICF_R_TO_F64) { + if (tmpi1->ic_flags&ICF_RES_TO_F64) { i=0; tmpi2=tmpi1->last; while (TRUE) { @@ -992,7 +992,7 @@ args. tmpi2=tmpi2->next; tmpi1->ic_flags=tmpi->ic_flags|tmpi1->ic_flags& - ~(ICF_R_TO_F64|ICF_PUSH_RES)|tmpi2->ic_flags; + ~(ICF_RES_TO_F64|ICF_PUSH_RES)|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi1->ic_class=cmp.internal_types[RT_I64]; @@ -1012,7 +1012,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_F64|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_F64; @@ -1030,7 +1030,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_INT|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_INT|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_F64; @@ -1039,7 +1039,7 @@ args. tmpi->ic_class2=cmp.internal_types[RT_F64]; OptSetNOP1(tmpi1); } - if (tmpi1->ic_flags&ICF_R_TO_INT) { + if (tmpi1->ic_flags&ICF_RES_TO_INT) { i=0; tmpi2=tmpi1->last; while (TRUE) { @@ -1057,7 +1057,7 @@ args. tmpi2=tmpi2->next; tmpi1->ic_flags=tmpi->ic_flags|tmpi1->ic_flags& - ~(ICF_R_TO_INT|ICF_PUSH_RES)|tmpi2->ic_flags; + ~(ICF_RES_TO_INT|ICF_PUSH_RES)|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi1->ic_class=cmp.internal_types[RT_F64]; @@ -1077,7 +1077,7 @@ args. while (tmpi2->ic_code!=IC_CALL_END) tmpi2=tmpi2->next; - tmpi->ic_flags|=tmpi1->ic_flags&~ICF_R_TO_F64|tmpi2->ic_flags; + tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags; OptSetNOP1(tmpi2); tmpi->ic_code=IC_IMM_I64; @@ -1252,7 +1252,7 @@ args. case IC_ASM: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } @@ -1270,9 +1270,9 @@ args. } if (tmpi->ic_class) { if (tmpi->ic_class->raw_type==RT_F64) - tmpi->ic_flags&=~ICF_R_TO_F64; + tmpi->ic_flags&=~ICF_RES_TO_F64; else - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; if (code>IC_END_EXP) last_with_class=tmpi; } diff --git a/Compiler/OptPass3.HC b/Compiler/OptPass3.HC index b58db9e..13bfcf5 100644 --- a/Compiler/OptPass3.HC +++ b/Compiler/OptPass3.HC @@ -67,68 +67,68 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) break; case IS_2_ARG: tmpi2=PrsPop(ps); - if (tmpi2->ic_flags&ICF_R_TO_F64) + if (tmpi2->ic_flags&ICF_RES_TO_F64) tmpc2=cmp.internal_types[RT_F64]; - else if (tmpi2->ic_flags & ICF_R_TO_INT) + else if (tmpi2->ic_flags & ICF_RES_TO_INT) tmpc2=cmp.internal_types[RT_I64]; else - tmpc2=tmpi->t.a2c; - tmpi->a2.type=MDF_STK+CmpRawType(tmpc2); - tmpi->ic_flags|=ICF_A2_WAS_STK; + tmpc2=tmpi->t.arg2_class; + tmpi->arg2.type=MDF_STK+CmpRawType(tmpc2); + tmpi->ic_flags|=ICF_ARG2_WAS_STK; case IS_1_ARG: tmpi1=PrsPop(ps); - if (tmpi1->ic_flags&ICF_R_TO_F64) + if (tmpi1->ic_flags&ICF_RES_TO_F64) tmpc1=cmp.internal_types[RT_F64]; - else if (tmpi1->ic_flags & ICF_R_TO_INT) + else if (tmpi1->ic_flags & ICF_RES_TO_INT) tmpc1=cmp.internal_types[RT_I64]; else - tmpc1=tmpi->t.a1c; - tmpi->a1.type=MDF_STK+CmpRawType(tmpc1); - tmpi->a1_type_pointed_to=CmpRawTypePointed(tmpc1); - tmpi->ic_flags|=ICF_A1_WAS_STK; + tmpc1=tmpi->t.arg1_class; + tmpi->arg1.type=MDF_STK+CmpRawType(tmpc1); + tmpi->arg1_type_pointed_to=CmpRawTypePointed(tmpc1); + tmpi->ic_flags|=ICF_ARG1_WAS_STK; break; case IS_0_ARG: //nobound switch break; } if (intermediate_code_table[code].res_cnt) { - tmpi->r.type=MDF_STK+CmpRawType(tmpc); - tmpi->ic_flags|=ICF_R_WAS_STK; + tmpi->res.type=MDF_STK+CmpRawType(tmpc); + tmpi->ic_flags|=ICF_RES_WAS_STK; PrsPush(ps,tmpi); } switch [code] { case IC_IMM_F64: - tmpi->ic_flags&=~ICF_R_TO_F64; - if (tmpi->ic_flags&ICF_R_TO_INT) { + tmpi->ic_flags&=~ICF_RES_TO_F64; + if (tmpi->ic_flags&ICF_RES_TO_INT) { tmpi->ic_data=ToI64(tmpi->ic_data(F64)); - tmpi->ic_flags&=~ICF_R_TO_INT; + tmpi->ic_flags&=~ICF_RES_TO_INT; tmpi->ic_code=IC_IMM_I64; } break; case IC_IMM_I64: - tmpi->ic_flags&=~ICF_R_TO_INT; - if (tmpi->ic_flags&ICF_R_TO_F64) { + tmpi->ic_flags&=~ICF_RES_TO_INT; + if (tmpi->ic_flags&ICF_RES_TO_F64) { tmpi->ic_data(F64)=ToF64(tmpi->ic_data); - tmpi->ic_flags&=~ICF_R_TO_F64; + tmpi->ic_flags&=~ICF_RES_TO_F64; tmpi->ic_code=IC_IMM_F64; } break; case IC_RBP: tmpi->ic_code=IC_REG; - tmpi->a1.reg=REG_RBP; + tmpi->arg1.reg=REG_RBP; break; case IC_DEREF: - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; if (tmpi1->ic_code==IC_LEA) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.type=MDF_DISP+tmpi->r.type.raw_type; - tmpi->a1_type_pointed_to=CmpRawTypePointed(tmpc); + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.type=MDF_DISP+tmpi->res.type.raw_type; + tmpi->arg1_type_pointed_to=CmpRawTypePointed(tmpc); tmpi->ic_code=IC_MOV; OptFree(tmpi1); - if (tmpi->a1.reg==REG_RBP) + if (tmpi->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; @@ -136,10 +136,10 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) } else if (tmpil1->ic_code==IC_ADD_CONST) { if (tmpil2->ic_code==IC_REG) { tmpi->ic_flags|=tmpil2->ic_flags|tmpil1->ic_flags; - tmpi->a1.reg=tmpil2->a1.reg; - tmpi->a1.disp=tmpi->ic_data; - tmpi->a1.type=MDF_DISP+tmpi->r.type.raw_type; - tmpi->a1_type_pointed_to=CmpRawTypePointed(tmpc); + tmpi->arg1.reg=tmpil2->arg1.reg; + tmpi->arg1.disp=tmpi->ic_data; + tmpi->arg1.type=MDF_DISP+tmpi->res.type.raw_type; + tmpi->arg1_type_pointed_to=CmpRawTypePointed(tmpc); tmpi->ic_code=IC_MOV; OptFree(tmpil2); OptFree(tmpil1); @@ -150,18 +150,18 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) case IC__MM: case IC_PP_: case IC_MM_: - CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.a1c)); + CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.arg1_class)); case IC_DEREF_PP: case IC_DEREF_MM: - if (tmpi1->ic_code==IC_LEA && tmpi1->a1.type&MDF_DISP && - tmpi1->a1.reg==REG_RBP) + if (tmpi1->ic_code==IC_LEA && tmpi1->arg1.type&MDF_DISP && + tmpi1->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi1->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; } - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; break; case IC_MUL: case IC_DIV: @@ -177,19 +177,19 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) } if (OptFixupBinaryOp2(&tmpi1,&tmpi2)) { tmpi->ic_flags|=tmpi1->ic_flags; - if (tmpi->t.a1t!=tmpi2) - tmpi->t.a1c=tmpi->t.a2c; + if (tmpi->t.arg1_tree!=tmpi2) + tmpi->t.arg1_class=tmpi->t.arg2_class; tmpi->ic_data=tmpi1->ic_data; tmpi->ic_code=IC_ADD_CONST; - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; - tmpi->a2.type=MDF_NULL; + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; + tmpi->arg2.type=MDF_NULL; OptFree(tmpi1); - if (tmpil2->ic_code==IC_REG && tmpil2->a1.reg==REG_RBP) { + if (tmpil2->ic_code==IC_REG && tmpil2->arg1.reg==REG_RBP) { tmpi->ic_flags|=tmpil2->ic_flags; tmpi->ic_code=IC_LEA; - tmpi->a1.reg=REG_RBP; - tmpi->a1.type=MDF_DISP+tmpi->a1.type.raw_type; - tmpi->a1.disp=tmpi->ic_data; + tmpi->arg1.reg=REG_RBP; + tmpi->arg1.type=MDF_DISP+tmpi->arg1.type.raw_type; + tmpi->arg1.disp=tmpi->ic_data; for (i=0;iic_dataic_flags|=tmpi2->ic_flags; tmpi->ic_data=tmpi2->ic_data; tmpi->ic_code=IC_SUB_CONST; - tmpi->a2.type=MDF_NULL; + tmpi->arg2.type=MDF_NULL; OptFree(tmpi2); } break; @@ -235,25 +235,25 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) case IC_AND_EQU: case IC_OR_EQU: case IC_XOR_EQU: - if (tmpi1->ic_code==IC_LEA && tmpi1->a1.type&MDF_DISP && - tmpi1->a1.reg==REG_RBP) + if (tmpi1->ic_code==IC_LEA && tmpi1->arg1.type&MDF_DISP && + tmpi1->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi1->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; } - tmpi->a1_type_pointed_to=tmpi->r.type.raw_type; - CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.a1c)); + tmpi->arg1_type_pointed_to=tmpi->res.type.raw_type; + CmpMinTypePointed(tmpi,CmpRawTypePointed(tmpi->t.arg1_class)); break; case IC_RETURN_VAL: case IC_RETURN_VAL2: if (tmpc) { if (tmpc->raw_type==RT_F64 && tmpil1->ic_class->raw_type!=RT_F64) - tmpil1->ic_flags|=ICF_R_TO_F64; + tmpil1->ic_flags|=ICF_RES_TO_F64; else if (tmpc->raw_type!=RT_F64 && tmpil1->ic_class->raw_type==RT_F64) - tmpil1->ic_flags|=ICF_R_TO_INT; + tmpil1->ic_flags|=ICF_RES_TO_INT; } break; case IC_SQR: @@ -287,8 +287,8 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) if ((tmpi1->ic_code==IC_IMM_I64 || tmpi1->ic_code==IC_IMM_F64) && !tmpi1->ic_data) { OptFree(tmpi1); - MemCpy(&tmpi->a1,&tmpi->a2,sizeof(CICArg)); - tmpi->a2.type=MDF_NULL; + MemCpy(&tmpi->arg1,&tmpi->arg2,sizeof(CICArg)); + tmpi->arg2.type=MDF_NULL; if (code==IC_BR_EQU_EQU) code=tmpi->ic_code=IC_BR_ZERO; else @@ -298,7 +298,7 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) } else if ((tmpi2->ic_code==IC_IMM_I64 || tmpi2->ic_code==IC_IMM_F64) && !tmpi2->ic_data) { OptFree(tmpi2); - tmpi->a2.type=MDF_NULL; + tmpi->arg2.type=MDF_NULL; if (code==IC_BR_EQU_EQU) code=tmpi->ic_code=IC_BR_ZERO; else @@ -310,7 +310,7 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) if (tmpi1->ic_code==IC_IMM_I64 || tmpi1->ic_code==IC_IMM_F64) { if (code==IC_BR_ZERO ^^ tmpi1->ic_data) { OptFree(tmpi1); - tmpi->a1.type=MDF_NULL; + tmpi->arg1.type=MDF_NULL; tmpi->ic_code=IC_JMP; } else { OptFree(tmpi1); @@ -359,15 +359,15 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) goto here1; case IC_BR_MM_ZERO: case IC_BR_MM_NOT_ZERO: - if (tmpi1->ic_code==IC_LEA && tmpi1->a1.type&MDF_DISP && - tmpi1->a1.reg==REG_RBP) + if (tmpi1->ic_code==IC_LEA && tmpi1->arg1.type&MDF_DISP && + tmpi1->arg1.reg==REG_RBP) for (i=0;ia1.disp) { + if (mv[i].offset_start==tmpi1->arg1.disp) { mv[i].lea_balance--; mv[i].score++; break; } - tmpi->a1_type_pointed_to=CmpRawType(tmpc); + tmpi->arg1_type_pointed_to=CmpRawType(tmpc); goto here1; case IC_BR_LESS: case IC_BR_GREATER_EQU: @@ -504,7 +504,7 @@ here1: case IC_LABEL: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } diff --git a/Compiler/OptPass4.HC b/Compiler/OptPass4.HC index b0007a5..170b735 100644 --- a/Compiler/OptPass4.HC +++ b/Compiler/OptPass4.HC @@ -9,119 +9,120 @@ Bool OptIC4(CIntermediateCode *tmpi) if (!(tmpil2=OptLag1(tmpil1))) return FALSE; - if (tmpil2->r.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { - if (tmpil1->ic_code==IC_ADD_CONST && tmpil1->a1.type&MDF_STK) { + if (tmpil2->res.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { + if (tmpil1->ic_code==IC_ADD_CONST && tmpil1->arg1.type&MDF_STK) { if ((tmpil2->ic_code==IC_REG || tmpil2->ic_code==IC_MOV) && - tmpil2->a1.type&MDF_REG) { + tmpil2->arg1.type&MDF_REG) { i=tmpil1->ic_data; if (MIN_I32<=i<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tmpil2->a1.reg)) { + !Bt(&cmp.non_ptr_vars_mask,tmpil2->arg1.reg)) { tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; tmpil1->ic_code=IC_LEA; - tmpil1->a1.type=MDF_DISP+tmpil1->a1.type.raw_type; - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=i; + tmpil1->arg1.type=MDF_DISP+tmpil1->arg1.type.raw_type; + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=i; OptFree(tmpil2); return TRUE; } - } else if (tmpil2->ic_code==IC_SHL_CONST && tmpil2->a1.type&MDF_REG) { + } else if (tmpil2->ic_code==IC_SHL_CONST && tmpil2->arg1.type&MDF_REG) { i=tmpil1->ic_data; - if (MIN_I32<=i<=MAX_I32 && tmpil2->a1.reg!=REG_RSP && + if (MIN_I32<=i<=MAX_I32 && tmpil2->arg1.reg!=REG_RSP && 1<=tmpil2->ic_data<=3) { tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; tmpil1->ic_code=IC_LEA; - tmpil1->a1.type=MDF_SIB+tmpil1->a1.type.raw_type; - tmpil1->a1.reg=tmpil2->a1.reg<<8+REG_NONE; + tmpil1->arg1.type=MDF_SIB+tmpil1->arg1.type.raw_type; + tmpil1->arg1.reg=tmpil2->arg1.reg<<8+REG_NONE; if (tmpil2->ic_data==1) - tmpil1->a1.reg|=0x4000; + tmpil1->arg1.reg|=0x4000; else if (tmpil2->ic_data==2) - tmpil1->a1.reg|=0x8000; + tmpil1->arg1.reg|=0x8000; else - tmpil1->a1.reg|=0xC000; - tmpil1->a1.disp=i; + tmpil1->arg1.reg|=0xC000; + tmpil1->arg1.disp=i; OptFree(tmpil2); return TRUE; } } } if (tmpil2->ic_code==IC_MOV || tmpil2->ic_code==IC_REG) { - if (tmpil1->a2.type&MDF_STK) { - if (tmpil2->ic_flags & ICF_R_TO_INT) { - if (tmpil2->a1.type&MDF_IMM) - tmpil2->a1.disp=tmpil2->a1.disp(F64); + if (tmpil1->arg2.type&MDF_STK) { + if (tmpil2->ic_flags & ICF_RES_TO_INT) { + if (tmpil2->arg1.type&MDF_IMM) + tmpil2->arg1.disp=tmpil2->arg1.disp(F64); else - tmpil1->ic_flags|=ICF_A2_TO_INT; - } else if (tmpil2->ic_flags&ICF_R_TO_F64) { - if (tmpil2->a1.type&MDF_IMM) - tmpil2->a1.disp(F64)=tmpil2->a1.disp; + tmpil1->ic_flags|=ICF_ARG2_TO_INT; + } else if (tmpil2->ic_flags&ICF_RES_TO_F64) { + if (tmpil2->arg1.type&MDF_IMM) + tmpil2->arg1.disp(F64)=tmpil2->arg1.disp; else - tmpil1->ic_flags|=ICF_A2_TO_F64; + tmpil1->ic_flags|=ICF_ARG2_TO_F64; } - tmpil1->a2.type=tmpil2->a1.type&MDG_MASK+ - MinI64(tmpil1->a2.type.raw_type, - MinI64(tmpil2->r.type.raw_type,tmpil2->a1.type.raw_type)); - tmpil1->a2.reg=tmpil2->a1.reg; - tmpil1->a2.disp=tmpil2->a1.disp; + tmpil1->arg2.type=tmpil2->arg1.type&MDG_MASK+ + MinI64(tmpil1->arg2.type.raw_type, + MinI64(tmpil2->res.type.raw_type,tmpil2->arg1.type.raw_type)); + tmpil1->arg2.reg=tmpil2->arg1.reg; + tmpil1->arg2.disp=tmpil2->arg1.disp; tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpil2); return TRUE; } - if (tmpil1->a1.type&MDF_STK) { - if (tmpil2->ic_flags & ICF_R_TO_INT) { - if (tmpil2->a1.type&MDF_IMM) - tmpil2->a1.disp=tmpil2->a1.disp(F64); + if (tmpil1->arg1.type&MDF_STK) { + if (tmpil2->ic_flags & ICF_RES_TO_INT) { + if (tmpil2->arg1.type&MDF_IMM) + tmpil2->arg1.disp=tmpil2->arg1.disp(F64); else - tmpil1->ic_flags|=ICF_A1_TO_INT; - } else if (tmpil2->ic_flags&ICF_R_TO_F64) { - if (tmpil2->a1.type&MDF_IMM) { - if (tmpil2->a1.type&RTF_UNSIGNED) - tmpil2->a1.disp(F64)=tmpil2->a1.disp(U64); + tmpil1->ic_flags|=ICF_ARG1_TO_INT; + } else if (tmpil2->ic_flags&ICF_RES_TO_F64) { + if (tmpil2->arg1.type&MDF_IMM) { + if (tmpil2->arg1.type&RTF_UNSIGNED) + tmpil2->arg1.disp(F64)=tmpil2->arg1.disp(U64); else - tmpil2->a1.disp(F64)=tmpil2->a1.disp(I64); + tmpil2->arg1.disp(F64)=tmpil2->arg1.disp(I64); } else - tmpil1->ic_flags|=ICF_A1_TO_F64; + tmpil1->ic_flags|=ICF_ARG1_TO_F64; } - tmpil1->a1.type=tmpil2->a1.type&MDG_MASK+ - MinI64(tmpil1->a1.type.raw_type, - MinI64(tmpil2->r.type.raw_type,tmpil2->a1.type.raw_type)); - CmpMinTypePointed(tmpil1,tmpil2->a1_type_pointed_to); - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=tmpil2->a1.disp; + tmpil1->arg1.type=tmpil2->arg1.type&MDG_MASK+ + MinI64(tmpil1->arg1.type.raw_type, + MinI64(tmpil2->res.type.raw_type,tmpil2->arg1.type.raw_type)); + CmpMinTypePointed(tmpil1,tmpil2->arg1_type_pointed_to); + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=tmpil2->arg1.disp; tmpil1->ic_flags|=tmpil2->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpil2); return TRUE; } } if (tmpil1->ic_code==IC_DEREF) { - if (tmpil2->ic_code==IC_ADD_CONST && tmpil2->a1.type&MDF_REG && - tmpil1->a1.type&MDF_STK) { + if (tmpil2->ic_code==IC_ADD_CONST && tmpil2->arg1.type&MDF_REG && + tmpil1->arg1.type&MDF_STK) { i=tmpil2->ic_data; if (MIN_I32<=i<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tmpil2->a1.reg)) { + !Bt(&cmp.non_ptr_vars_mask,tmpil2->arg1.reg)) { tmpil1->ic_flags|=tmpil2->ic_flags; tmpil1->ic_code=IC_MOV; - tmpil1->a1.type=MDF_DISP+tmpil1->a1_type_pointed_to; - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=i; + tmpil1->arg1.type=MDF_DISP+tmpil1->arg1_type_pointed_to; + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=i; OptSetNOP2(tmpil2,-1); return TRUE; } } - if (tmpil2->ic_code==IC_LEA && tmpil1->a1.type&MDF_STK) { + if (tmpil2->ic_code==IC_LEA && tmpil1->arg1.type&MDF_STK) { tmpil1->ic_flags|=tmpil2->ic_flags; tmpil1->ic_code=IC_MOV; - tmpil1->a1.type=tmpil2->a1.type&MDG_MASK+tmpil1->a1_type_pointed_to; - tmpil1->a1.reg=tmpil2->a1.reg; - tmpil1->a1.disp=tmpil2->a1.disp; + tmpil1->arg1.type=tmpil2->arg1.type&MDG_MASK+ + tmpil1->arg1_type_pointed_to; + tmpil1->arg1.reg=tmpil2->arg1.reg; + tmpil1->arg1.disp=tmpil2->arg1.disp; OptFree(tmpil2); return TRUE; } } } if (tmpil1->ic_code==IC_DEREF) { - if (tmpil1->a1.type&MDF_REG) { - tmpil1->a1.type=MDF_DISP+tmpil1->a1_type_pointed_to; - tmpil1->a1.disp=0; + if (tmpil1->arg1.type&MDF_REG) { + tmpil1->arg1.type=MDF_DISP+tmpil1->arg1_type_pointed_to; + tmpil1->arg1.disp=0; tmpil1->ic_code=IC_MOV; return TRUE; } @@ -182,51 +183,51 @@ U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) switch [code] { case IC_IMM_I64: case IC_TYPE: - tmpi->a1.type=MDF_IMM+RT_I64; - tmpi->a1.disp=tmpi->ic_data; + tmpi->arg1.type=MDF_IMM+RT_I64; + tmpi->arg1.disp=tmpi->ic_data; tmpi->ic_code=IC_MOV; break; case IC_IMM_F64: - tmpi->a1.type=MDF_IMM+RT_I64; - tmpi->a1.disp=tmpi->ic_data; - tmpi->a1_type_pointed_to=RT_F64; + tmpi->arg1.type=MDF_IMM+RT_I64; + tmpi->arg1.disp=tmpi->ic_data; + tmpi->arg1_type_pointed_to=RT_F64; tmpi->ic_code=IC_MOV; break; case IC_MOV: - if (tmpi->a1.type&MDF_DISP && tmpi->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi->a1.disp,reg_offsets); + if (tmpi->arg1.type&MDF_DISP && tmpi->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi->arg1.disp,reg_offsets); if (i>=0) { - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; } } break; case IC_DEREF: if (tmpi1->ic_code==IC_LEA) { - if (tmpi1->a1.type&MDF_DISP && tmpi1->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi1->a1.disp,reg_offsets); + if (tmpi1->arg1.type&MDF_DISP && tmpi1->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets); if (i>=0) { tmpi->ic_flags|=tmpi1->ic_flags; tmpi->ic_code=IC_REG; - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; OptFree(tmpi1); } } } else if ((tmpi1->ic_code==IC_ABS_ADDR || tmpi1->ic_code==IC_MOV && - tmpi1->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi1->a1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { + tmpi1->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi1->arg1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { if (tmpi1->ic_code==IC_ABS_ADDR) - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; else - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.disp=tmpi1->arg1.disp; tmpi->ic_flags|=tmpi1->ic_flags; tmpi->ic_code=IC_MOV; - tmpi->a1.type=MDF_RIP_DISP32+tmpi->a1_type_pointed_to; - tmpi->a1.reg=REG_RIP; + tmpi->arg1.type=MDF_RIP_DISP32+tmpi->arg1_type_pointed_to; + tmpi->arg1.reg=REG_RIP; OptFree(tmpi1); } break; @@ -240,13 +241,13 @@ U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) case IC_PP_: case IC_MM_: if (tmpi1->ic_code==IC_LEA) { - if (tmpi1->a1.type&MDF_DISP && tmpi1->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi1->a1.disp,reg_offsets); + if (tmpi1->arg1.type&MDF_DISP && tmpi1->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets); if (i>=0) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; tmpi->ic_flags|=ICF_BY_VAL; OptSetNOP2(tmpi1); } else @@ -254,38 +255,38 @@ U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) } else { p4_lea_gone: tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=tmpi1->a1.type; - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=tmpi1->arg1.type; + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; tmpi->ic_flags|=ICF_BY_VAL; OptSetNOP2(tmpi1); } } else if ((tmpi1->ic_code==IC_ABS_ADDR || tmpi1->ic_code==IC_MOV && - tmpi1->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi1->a1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { + tmpi1->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi1->arg1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { tmpi->ic_flags|=tmpi1->ic_flags; if (tmpi1->ic_code==IC_ABS_ADDR) - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; else - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.type=MDF_RIP_DISP32+tmpi->a1_type_pointed_to; - tmpi->a1.reg=REG_RIP; + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.type=MDF_RIP_DISP32+tmpi->arg1_type_pointed_to; + tmpi->arg1.reg=REG_RIP; tmpi->ic_flags|=ICF_BY_VAL; OptFree(tmpi1); } break; case IC_ADD: - if (tmpi1->ic_code==IC_MOV && tmpi1->a1.type==MDF_REG+RT_I64 || + if (tmpi1->ic_code==IC_MOV && tmpi1->arg1.type==MDF_REG+RT_I64 || tmpi1->ic_code==IC_REG) { - if (tmpi2->ic_code==IC_MOV && tmpi2->a1.type==MDF_REG+RT_I64 || + if (tmpi2->ic_code==IC_MOV && tmpi2->arg1.type==MDF_REG+RT_I64 || tmpi2->ic_code==IC_REG) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=0; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=0; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; goto p4_sib; - } else if (tmpi1->a1.reg!=REG_RSP) { - tmpi->a1.disp=0; - tmpi->a1.reg=tmpi2->a1.reg+tmpi1->a1.reg<<8; + } else if (tmpi1->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=0; + tmpi->arg1.reg=tmpi2->arg1.reg+tmpi1->arg1.reg<<8; p4_sib: tmpi->ic_flags|=(tmpi1->ic_flags|tmpi2->ic_flags) &ICG_NO_CVT_MASK; @@ -293,52 +294,52 @@ p4_sib: OptFree(tmpi2); tmpi->ic_code=IC_LEA; - tmpi->a1.type=MDF_SIB+RT_I64; - tmpi->a1_type_pointed_to=RT_I64; + tmpi->arg1.type=MDF_SIB+RT_I64; + tmpi->arg1_type_pointed_to=RT_I64; - tmpi->a2.type=MDF_NULL+tmpi->a2.type.raw_type; + tmpi->arg2.type=MDF_NULL+tmpi->arg2.type.raw_type; } } else if (tmpi2->ic_code==IC_SHL_CONST && - tmpi2->a1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=0; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + tmpi2->arg1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=0; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; if (tmpi2->ic_data==1) - tmpi->a1.reg|=0x4000; + tmpi->arg1.reg|=0x4000; else if (tmpi2->ic_data==2) - tmpi->a1.reg|=0x8000; + tmpi->arg1.reg|=0x8000; else - tmpi->a1.reg|=0xC000; + tmpi->arg1.reg|=0xC000; goto p4_sib; } } } else if (tmpi1->ic_code==IC_LEA && - tmpi1->a1.type&MDF_DISP) { - if (tmpi1->a1.reg==REG_RBP && - CmpOffset2Reg(tmpi1->a1.disp,reg_offsets)>=0) + tmpi1->arg1.type&MDF_DISP) { + if (tmpi1->arg1.reg==REG_RBP && + CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets)>=0) break; - if (tmpi2->ic_code==IC_MOV && tmpi2->a1.type==MDF_REG+RT_I64 || + if (tmpi2->ic_code==IC_MOV && tmpi2->arg1.type==MDF_REG+RT_I64 || tmpi2->ic_code==IC_REG) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; goto p4_sib; - } else if (tmpi1->a1.reg!=REG_RSP) { - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.reg=tmpi2->a1.reg+tmpi1->a1.reg<<8; + } else if (tmpi1->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.reg=tmpi2->arg1.reg+tmpi1->arg1.reg<<8; goto p4_sib; } } else if (tmpi2->ic_code==IC_SHL_CONST && - tmpi2->a1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { - if (tmpi2->a1.reg!=REG_RSP) { - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.reg=tmpi1->a1.reg+tmpi2->a1.reg<<8; + tmpi2->arg1.type==MDF_REG+RT_I64 && tmpi2->ic_data<=3) { + if (tmpi2->arg1.reg!=REG_RSP) { + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.reg=tmpi1->arg1.reg+tmpi2->arg1.reg<<8; if (tmpi2->ic_data==1) - tmpi->a1.reg|=0x4000; + tmpi->arg1.reg|=0x4000; else if (tmpi2->ic_data==2) - tmpi->a1.reg|=0x8000; + tmpi->arg1.reg|=0x8000; else - tmpi->a1.reg|=0xC000; + tmpi->arg1.reg|=0xC000; goto p4_sib; } } @@ -360,52 +361,53 @@ p4_sib: case IC_ADD_EQU: case IC_SUB_EQU: if (tmpi1->ic_code==IC_LEA) { - if (tmpi1->a1.type&(MDF_DISP|MDF_SIB)) { + if (tmpi1->arg1.type&(MDF_DISP|MDF_SIB)) { tmpi2=tmpi->next; - if (tmpi1->a1.type&MDF_DISP && tmpi1->a1.reg==REG_RBP) { - i=CmpOffset2Reg(tmpi1->a1.disp,reg_offsets); + if (tmpi1->arg1.type&MDF_DISP && tmpi1->arg1.reg==REG_RBP) { + i=CmpOffset2Reg(tmpi1->arg1.disp,reg_offsets); if (i>=0) { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=i; - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=i; + tmpi->arg1.disp=0; OptSetNOP2(tmpi1); } else { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=MDF_DISP+tmpi->a1.type.raw_type; - tmpi->a1.reg=REG_RBP; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=MDF_DISP+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=REG_RBP; + tmpi->arg1.disp=tmpi1->arg1.disp; OptSetNOP2(tmpi1); } } else { tmpi->ic_flags|=tmpi1->ic_flags; - tmpi->a1.type=tmpi1->a1.type&MDG_MASK+tmpi->a1.type.raw_type; - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=tmpi1->arg1.type&MDG_MASK+ + tmpi->arg1.type.raw_type; + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; OptSetNOP2(tmpi1); } - if (tmpi->r.type&MDF_STK && tmpi2->a2.type&MDF_STK && + if (tmpi->res.type&MDF_STK && tmpi2->arg2.type&MDF_STK && code!=IC_ASSIGN_PP && code!=IC_ASSIGN_MM) { - tmpi->r.type=tmpi->a1.type; - tmpi->r.reg=tmpi->a1.reg; - tmpi->r.disp=tmpi->a1.disp; - tmpi2->a2.type=tmpi->a1.type; - tmpi2->a2.reg=tmpi->a1.reg; - tmpi2->a2.disp=tmpi->a1.disp; - CmpMinTypePointed(tmpi2,tmpi->a1_type_pointed_to); + tmpi->res.type=tmpi->arg1.type; + tmpi->res.reg=tmpi->arg1.reg; + tmpi->res.disp=tmpi->arg1.disp; + tmpi2->arg2.type=tmpi->arg1.type; + tmpi2->arg2.reg=tmpi->arg1.reg; + tmpi2->arg2.disp=tmpi->arg1.disp; + CmpMinTypePointed(tmpi2,tmpi->arg1_type_pointed_to); } tmpi->ic_flags|=ICF_BY_VAL; } } else if ((tmpi1->ic_code==IC_ABS_ADDR || - tmpi1->ic_code==IC_MOV && tmpi1->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi1->a1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { + tmpi1->ic_code==IC_MOV && tmpi1->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi1->arg1.disp<=MAX_I32)&& !(tmpi1->ic_flags&ICF_NO_RIP)) { tmpi->ic_flags|=tmpi1->ic_flags; if (tmpi1->ic_code==IC_ABS_ADDR) - tmpi->a1.disp=tmpi1->ic_data; + tmpi->arg1.disp=tmpi1->ic_data; else - tmpi->a1.disp=tmpi1->a1.disp; - tmpi->a1.type=MDF_RIP_DISP32+tmpi->a1.type.raw_type; - tmpi->a1.reg=REG_RIP; + tmpi->arg1.disp=tmpi1->arg1.disp; + tmpi->arg1.type=MDF_RIP_DISP32+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=REG_RIP; tmpi->ic_flags|=ICF_BY_VAL; OptSetNOP2(tmpi1); } @@ -417,9 +419,9 @@ p4_sib: tmpil1=tmpi; while (tmpil1=OptLag1(tmpil1)) if (tmpil1->ic_class) { - if (tmpil1->ic_flags & ICF_R_TO_F64) + if (tmpil1->ic_flags & ICF_RES_TO_F64) *_type=RT_F64; - else if (tmpil1->ic_flags & ICF_R_TO_INT) + else if (tmpil1->ic_flags & ICF_RES_TO_INT) *_type=RT_I64; else *_type=tmpil1->ic_class->raw_type; @@ -450,42 +452,42 @@ p4_sib: case IC_LBTC: if (!(tmpi->ic_flags&ICF_BY_VAL)) { if (tmpi2->ic_code==IC_ADDR) { - if (tmpi2->a1.type&MDF_STK && - tmpi2->r.type&MDF_STK) { + if (tmpi2->arg1.type&MDF_STK && + tmpi2->res.type&MDF_STK) { if (tmpil2=OptLag1(tmpi2)) { if (tmpil2->ic_code==IC_LEA) { - if (tmpil2->a1.type&(MDF_IMM|MDG_REG_DISP_SIB_RIP)) { + if (tmpil2->arg1.type&(MDF_IMM|MDG_REG_DISP_SIB_RIP)) { if (tmpi2) { tmpi->ic_flags|=tmpi2->ic_flags; OptFree(tmpi2); } tmpi->ic_flags|=tmpil2->ic_flags|ICF_BY_VAL; - tmpi->a2.type=tmpil2->a1.type; - tmpi->a2.reg =tmpil2->a1.reg; - tmpi->a2.disp=tmpil2->a1.disp; + tmpi->arg2.type=tmpil2->arg1.type; + tmpi->arg2.reg =tmpil2->arg1.reg; + tmpi->arg2.disp=tmpil2->arg1.disp; OptFree(tmpil2); } break; } else if (tmpil2->ic_code!=IC_ABS_ADDR && !(tmpil2->ic_code==IC_MOV && - tmpil2->a1.type==MDF_IMM+RT_I64 && - 0<=tmpil2->a1.disp<=MAX_I32) || + tmpil2->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpil2->arg1.disp<=MAX_I32) || tmpil2->ic_flags&ICF_NO_RIP) tmpil2=NULL; else { if (tmpil2->ic_code==IC_ABS_ADDR) - tmpi->a2.disp=tmpil2->ic_data; + tmpi->arg2.disp=tmpil2->ic_data; else - tmpi->a2.disp=tmpil2->a1.disp; + tmpi->arg2.disp=tmpil2->arg1.disp; } } } else { - if (tmpi2->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi2->a1.disp<=MAX_I32 && + if (tmpi2->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi2->arg1.disp<=MAX_I32 && !(tmpi2->ic_flags&ICF_NO_RIP)) { tmpil2=tmpi2; tmpi2=NULL; - tmpi->a2.disp=tmpil2->a1.disp; + tmpi->arg2.disp=tmpil2->arg1.disp; } else tmpil2=NULL; } @@ -495,18 +497,18 @@ p4_sib: OptFree(tmpi2); } tmpi->ic_flags|=tmpil2->ic_flags|ICF_BY_VAL; - tmpi->a2.type=MDF_RIP_DISP32+tmpi->a2.type.raw_type; - tmpi->a2.reg=REG_RIP; + tmpi->arg2.type=MDF_RIP_DISP32+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=REG_RIP; OptFree(tmpil2); } - } else if (tmpi2->ic_code==IC_MOV && tmpi2->r.type&MDF_STK && - tmpi2->a1.type==MDF_IMM+RT_I64 && - 0<=tmpi2->a1.disp<=MAX_I32 && + } else if (tmpi2->ic_code==IC_MOV && tmpi2->res.type&MDF_STK && + tmpi2->arg1.type==MDF_IMM+RT_I64 && + 0<=tmpi2->arg1.disp<=MAX_I32 && !(tmpi2->ic_flags&ICF_NO_RIP)) { - tmpi->a2.disp=tmpi2->a1.disp; + tmpi->arg2.disp=tmpi2->arg1.disp; tmpi->ic_flags|=tmpi2->ic_flags|ICF_BY_VAL; - tmpi->a2.type=MDF_RIP_DISP32+tmpi->a2.type.raw_type; - tmpi->a2.reg=REG_RIP; + tmpi->arg2.type=MDF_RIP_DISP32+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=REG_RIP; OptFree(tmpi2); } } @@ -540,19 +542,19 @@ p4_sib: if (!(tmpil1->ic_flags&ICF_PUSH_RES)) { if (tmpi->ic_flags&ICF_RES_NOT_USED) { tmpil1->ic_flags|=ICF_RES_NOT_USED; - tmpil1->r.type=MDF_NULL+tmpil1->r.type.raw_type; - } else if (tmpi->a1.type&MDF_STK && - tmpil1->r.type&MDF_STK) { - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.disp=0; - tmpil1->r.type=MDF_REG+tmpil1->r.type.raw_type; - tmpil1->r.disp=0; + tmpil1->res.type=MDF_NULL+tmpil1->res.type.raw_type; + } else if (tmpi->arg1.type&MDF_STK && + tmpil1->res.type&MDF_STK) { + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.disp=0; + tmpil1->res.type=MDF_REG+tmpil1->res.type.raw_type; + tmpil1->res.disp=0; if (intermediate_code_table[tmpi->ic_code].arg_cnt==IS_2_ARG) { - tmpi->a1.reg=REG_R8; - tmpil1->r.reg=REG_R8; + tmpi->arg1.reg=REG_R8; + tmpil1->res.reg=REG_R8; } else { - tmpi->a1.reg=REG_RAX; - tmpil1->r.reg=REG_RAX; + tmpi->arg1.reg=REG_RAX; + tmpil1->res.reg=REG_RAX; } } } @@ -667,7 +669,7 @@ p4_sib: case IC_CALL_END2: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } diff --git a/Compiler/OptPass5.HC b/Compiler/OptPass5.HC index c1f7795..39e689b 100644 --- a/Compiler/OptPass5.HC +++ b/Compiler/OptPass5.HC @@ -26,58 +26,58 @@ U0 OptPass5(CCmpCtrl *cc) if (Bt(&tmpi->ic_data,i)) ps->ptr--; } - if (tmpi->a2.type&MDF_STK) { + if (tmpi->arg2.type&MDF_STK) { tmpi1=PrsPop(ps); if (tmpi1->ic_code==IC_MOV || tmpi1->ic_code==IC_REG) { - if (tmpi1->ic_flags & ICF_R_TO_INT) { - if (tmpi1->a1.type&MDF_IMM) - tmpi1->a1.disp=tmpi1->a1.disp(F64); + if (tmpi1->ic_flags & ICF_RES_TO_INT) { + if (tmpi1->arg1.type&MDF_IMM) + tmpi1->arg1.disp=tmpi1->arg1.disp(F64); else - tmpi->ic_flags|=ICF_A2_TO_INT; - } else if (tmpi1->ic_flags&ICF_R_TO_F64) { - if (tmpi1->a1.type&MDF_IMM) - tmpi1->a1.disp(F64)=tmpi1->a1.disp; + tmpi->ic_flags|=ICF_ARG2_TO_INT; + } else if (tmpi1->ic_flags&ICF_RES_TO_F64) { + if (tmpi1->arg1.type&MDF_IMM) + tmpi1->arg1.disp(F64)=tmpi1->arg1.disp; else - tmpi->ic_flags|=ICF_A2_TO_F64; + tmpi->ic_flags|=ICF_ARG2_TO_F64; } - tmpi->a2.type=tmpi1->a1.type&MDG_MASK+ - MinI64(tmpi->a2.type.raw_type, - MinI64(tmpi1->r.type.raw_type,tmpi1->a1.type.raw_type)); - tmpi->a2.reg=tmpi1->a1.reg; - tmpi->a2.disp=tmpi1->a1.disp; + tmpi->arg2.type=tmpi1->arg1.type&MDG_MASK+ + MinI64(tmpi->arg2.type.raw_type, + MinI64(tmpi1->res.type.raw_type,tmpi1->arg1.type.raw_type)); + tmpi->arg2.reg=tmpi1->arg1.reg; + tmpi->arg2.disp=tmpi1->arg1.disp; tmpi->ic_flags|=tmpi1->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpi1); } } - if (tmpi->a1.type&MDF_STK) { + if (tmpi->arg1.type&MDF_STK) { tmpi1=PrsPop(ps); if (tmpi1->ic_code==IC_MOV || tmpi1->ic_code==IC_REG) { - if (tmpi1->ic_flags & ICF_R_TO_INT) { - if (tmpi1->a1.type&MDF_IMM) - tmpi1->a1.disp=tmpi1->a1.disp(F64); + if (tmpi1->ic_flags & ICF_RES_TO_INT) { + if (tmpi1->arg1.type&MDF_IMM) + tmpi1->arg1.disp=tmpi1->arg1.disp(F64); else - tmpi->ic_flags|=ICF_A1_TO_INT; - } else if (tmpi1->ic_flags&ICF_R_TO_F64) { - if (tmpi1->a1.type&MDF_IMM) { - if (tmpi1->a1.type&RTF_UNSIGNED) - tmpi1->a1.disp(F64)=tmpi1->a1.disp(U64); + tmpi->ic_flags|=ICF_ARG1_TO_INT; + } else if (tmpi1->ic_flags&ICF_RES_TO_F64) { + if (tmpi1->arg1.type&MDF_IMM) { + if (tmpi1->arg1.type&RTF_UNSIGNED) + tmpi1->arg1.disp(F64)=tmpi1->arg1.disp(U64); else - tmpi1->a1.disp(F64)=tmpi1->a1.disp(I64); + tmpi1->arg1.disp(F64)=tmpi1->arg1.disp(I64); } else - tmpi->ic_flags|=ICF_A1_TO_F64; + tmpi->ic_flags|=ICF_ARG1_TO_F64; } - tmpi->a1.type=tmpi1->a1.type&MDG_MASK+ - MinI64(tmpi->a1.type.raw_type, - MinI64(tmpi1->r.type.raw_type,tmpi1->a1.type.raw_type)); - CmpMinTypePointed(tmpi,tmpi1->a1_type_pointed_to); - tmpi->a1.reg=tmpi1->a1.reg; - tmpi->a1.disp=tmpi1->a1.disp; + tmpi->arg1.type=tmpi1->arg1.type&MDG_MASK+ + MinI64(tmpi->arg1.type.raw_type, + MinI64(tmpi1->res.type.raw_type,tmpi1->arg1.type.raw_type)); + CmpMinTypePointed(tmpi,tmpi1->arg1_type_pointed_to); + tmpi->arg1.reg=tmpi1->arg1.reg; + tmpi->arg1.disp=tmpi1->arg1.disp; tmpi->ic_flags|=tmpi1->ic_flags&ICG_NO_CVT_MASK; OptSetNOP2(tmpi1); } } - if (tmpi->r.type&MDF_STK && + if (tmpi->res.type&MDF_STK && !(tmpi->ic_flags&ICF_RES_NOT_USED)) PrsPush(ps,tmpi); } diff --git a/Compiler/OptPass6.HC b/Compiler/OptPass6.HC index 4f78a88..dee23e5 100644 --- a/Compiler/OptPass6.HC +++ b/Compiler/OptPass6.HC @@ -4,21 +4,21 @@ Bool OptIC6(CIntermediateCode *tmpi) if (tmpi->ic_codeic_code==IC_ADD_CONST && tmpi->ic_code==IC_DEREF && - tmpi->ic_flags&ICF_A1_WAS_STK && tmpi->a1.type&MDF_REG && - tmpil1->r.type&MDF_REG && MIN_I32<=tmpil1->ic_data<=MAX_I32 && - !Bt(&cmp.non_ptr_vars_mask,tmpil1->a1.reg)) { - if (tmpil1->a1.type&MDF_REG) { - tmpi->ic_flags=tmpi->ic_flags&~ICF_A1_WAS_STK | tmpil1->ic_flags; + tmpi->ic_flags&ICF_ARG1_WAS_STK && tmpi->arg1.type&MDF_REG && + tmpil1->res.type&MDF_REG && MIN_I32<=tmpil1->ic_data<=MAX_I32 && + !Bt(&cmp.non_ptr_vars_mask,tmpil1->arg1.reg)) { + if (tmpil1->arg1.type&MDF_REG) { + tmpi->ic_flags=tmpi->ic_flags&~ICF_ARG1_WAS_STK | tmpil1->ic_flags; tmpi->ic_code=IC_MOV; - tmpi->a1.type=MDF_DISP+tmpi->a1_type_pointed_to; - tmpi->a1.reg=tmpil1->a1.reg; - tmpi->a1.disp=tmpil1->ic_data; + tmpi->arg1.type=MDF_DISP+tmpi->arg1_type_pointed_to; + tmpi->arg1.reg=tmpil1->arg1.reg; + tmpi->arg1.disp=tmpil1->ic_data; OptSetNOP2(tmpil1,-1); } else { tmpil1->ic_code=IC_MOV; tmpi->ic_code=IC_MOV; - tmpi->a1.type=MDF_DISP+tmpi->a1_type_pointed_to; - tmpi->a1.disp=tmpil1->ic_data; + tmpi->arg1.type=MDF_DISP+tmpi->arg1_type_pointed_to; + tmpi->arg1.disp=tmpil1->ic_data; } return TRUE; } @@ -61,33 +61,33 @@ U0 OptPass6Lag(CCmpCtrl *cc,CPrsStk *ps,CIntermediateCode *tmpi, } if (intermediate_code_table[code].arg_cnt==IS_V_ARG) stk_ptr-=tmpi->ic_data>>3; - if (tmpi->a2.type&MDF_STK) { + if (tmpi->arg2.type&MDF_STK) { stk_ptr--; if (stk_ptra2.type=MDF_REG+tmpi->a2.type.raw_type; - tmpi->a2.reg=Bsf(REGG_STK_TMP); - tmpi->a2.disp=0; + tmpi->arg2.type=MDF_REG+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=Bsf(REGG_STK_TMP); + tmpi->arg2.disp=0; } } - if (tmpi->a1.type&MDF_STK) { + if (tmpi->arg1.type&MDF_STK) { stk_ptr--; if (stk_ptra1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.reg=Bsf(REGG_STK_TMP); - tmpi->a1.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.reg=Bsf(REGG_STK_TMP); + tmpi->arg1.disp=0; } } - if (tmpi->r.type&MDF_STK && !(tmpi->ic_flags & ICF_PUSH_RES)) { + if (tmpi->res.type&MDF_STK && !(tmpi->ic_flags & ICF_PUSH_RES)) { stk_ptr++; if (stk_ptr<=reg_stk_size) { - tmpi->r.type=MDF_REG+tmpi->r.type.raw_type; - tmpi->r.reg=Bsf(REGG_STK_TMP); + tmpi->res.type=MDF_REG+tmpi->res.type.raw_type; + tmpi->res.reg=Bsf(REGG_STK_TMP); clobbered_reg_mask|=REGG_STK_TMP; - tmpi->r.disp=0; + tmpi->res.disp=0; } } while (OptIC6(tmpi)); - if (tmpi->r.type.raw_type!=RT_F64 && !(tmpi->ic_flags&ICF_USE_F64)) + if (tmpi->res.type.raw_type!=RT_F64 && !(tmpi->ic_flags&ICF_USE_F64)) tmpi->ic_flags|=ICF_USE_INT; *_stk_ptr=stk_ptr; *_clobbered_reg_mask=clobbered_reg_mask; @@ -113,49 +113,50 @@ U0 OptPass6(CCmpCtrl *cc) if (tmpil1->ic_code>IC_NOP2) tmpil2=tmpil1; tmpil1=tmpi; - if (tmpi->a2.type&MDF_STK) { - if (tmpil2->r.type&MDF_STK && + if (tmpi->arg2.type&MDF_STK) { + if (tmpil2->res.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { if (tmpi->ic_code==IC_ASSIGN && tmpi->ic_flags&ICF_BY_VAL && tmpi->ic_flags&ICF_RES_NOT_USED && tmpil2->ic_code!=IC_CALL_END && tmpil2->ic_code!=IC_CALL_END2 && tmpil2->ic_code!=IC_SET_RAX && - !(tmpi->ic_flags&(ICF_A2_TO_F64|ICF_A2_TO_INT)) && - !(tmpil2->ic_flags&(ICF_R_TO_F64|ICF_R_TO_INT))) { - tmpil2->r.type =tmpi->a1.type&MDG_MASK+tmpi->a1_type_pointed_to; - tmpil2->r.reg =tmpi->a1.reg; - tmpil2->r.disp =tmpi->a1.disp; + !(tmpi->ic_flags&(ICF_ARG2_TO_F64|ICF_ARG2_TO_INT)) && + !(tmpil2->ic_flags&(ICF_RES_TO_F64|ICF_RES_TO_INT))) { + tmpil2->res.type =tmpi->arg1.type&MDG_MASK+ + tmpi->arg1_type_pointed_to; + tmpil2->res.reg =tmpi->arg1.reg; + tmpil2->res.disp =tmpi->arg1.disp; tmpil2->ic_flags=tmpil2->ic_flags - &~(ICF_RES_NOT_USED|ICF_R_WAS_STK) - |tmpi->ic_flags&~(ICF_BY_VAL|ICF_A1_WAS_STK|ICF_A2_WAS_STK); + &~(ICF_RES_NOT_USED|ICF_RES_WAS_STK) + |tmpi->ic_flags&~(ICF_BY_VAL|ICF_ARG1_WAS_STK|ICF_ARG2_WAS_STK); old_tmpil2=NULL; OptSetNOP1(tmpi); } else { - tmpi->a2.type=MDF_REG+tmpi->a2.type.raw_type; - tmpi->a2.reg=REG_RAX; - tmpi->a2.disp=0; - tmpil2->r.type=MDF_REG+tmpil2->r.type.raw_type; - tmpil2->r.reg=REG_RAX; - tmpil2->r.disp=0; + tmpi->arg2.type=MDF_REG+tmpi->arg2.type.raw_type; + tmpi->arg2.reg=REG_RAX; + tmpi->arg2.disp=0; + tmpil2->res.type=MDF_REG+tmpil2->res.type.raw_type; + tmpil2->res.reg=REG_RAX; + tmpil2->res.disp=0; } } - } else if (tmpi->a1.type&MDF_STK && tmpil2->r.type&MDF_STK && + } else if (tmpi->arg1.type&MDF_STK && tmpil2->res.type&MDF_STK && !(tmpil2->ic_flags&ICF_PUSH_RES)) { - tmpi->a1.type=MDF_REG+tmpi->a1.type.raw_type; - tmpi->a1.disp=0; - tmpil2->r.type=MDF_REG+tmpil2->r.type.raw_type; - tmpil2->r.disp=0; + tmpi->arg1.type=MDF_REG+tmpi->arg1.type.raw_type; + tmpi->arg1.disp=0; + tmpil2->res.type=MDF_REG+tmpil2->res.type.raw_type; + tmpil2->res.disp=0; if (intermediate_code_table[tmpi->ic_code].arg_cnt==IS_2_ARG) { - tmpi->a1.reg=REG_R8; - tmpil2->r.reg=REG_R8; + tmpi->arg1.reg=REG_R8; + tmpil2->res.reg=REG_R8; } else { - tmpi->a1.reg=REG_RAX; - tmpil2->r.reg=REG_RAX; + tmpi->arg1.reg=REG_RAX; + tmpil2->res.reg=REG_RAX; } } if (tmpi->ic_flags & ICF_PUSH_RES) - tmpi->r.type==MDF_STK+tmpi->r.type.raw_type; + tmpi->res.type==MDF_STK+tmpi->res.type.raw_type; if (old_tmpil2!=tmpil2) { if (tmpil2->ic_code>IC_NOP2) OptPass6Lag(cc,ps,tmpil2,&stk_ptr,reg_stk_size,&clobbered_reg_mask); diff --git a/Compiler/OptPass789A.HC b/Compiler/OptPass789A.HC index e341c5a..3dc0368 100644 --- a/Compiler/OptPass789A.HC +++ b/Compiler/OptPass789A.HC @@ -7,8 +7,8 @@ size is now known cc->pass==10 is final pass, code is placed into buf. */ CIntermediateCode *tmpi,*tmpi_next; - I64 i,cnt,num_lines=cc->max_line+1-cc->min_line,ip=0,ip2; - U8 *ptr,saved_a1_a2_r[3*sizeof(CICArg)]; + I64 i,cnt,num_lines=cc->max_line+1-cc->min_line,rip=0,rip2; + U8 *ptr,saved_arg1_arg2_r[3*sizeof(CICArg)]; CCodeMisc *lb; CAOT *tmpaot; CAOTAbsAddr *tmpa; @@ -28,7 +28,7 @@ cc->pass==10 is final pass, code is placed into buf. dbg_info->min_line=cc->min_line; dbg_info->max_line=cc->max_line; if (cc->flags&CCF_AOT_COMPILE) - dbg_info->body[0]=aotc->ip; + dbg_info->body[0]=aotc->rip; else dbg_info->body[0]=buf; } else @@ -48,48 +48,48 @@ cc->pass==10 is final pass, code is placed into buf. tmpi_next=tmpi->next; if (tmpi->ic_flags&ICF_PASS_TRACE && Bt(&cc->saved_pass_trace,cc->pass)) ICPut(cc,tmpi); - ip2=ip; + rip2=rip; if (cc->flags&CCF_AOT_COMPILE) - ip2+=aotc->ip; + rip2+=aotc->rip; else - ip2+=buf; + rip2+=buf; cc->cur_ic_float_op_num=0; if (!(tmpi->ic_flags &ICF_CODE_FINAL)) { tmpi->ic_flags=tmpi->ic_flags& ~(ICF_PREV_DELETED|ICF_DONT_RESTORE)|ICF_CODE_FINAL; if (cc->pass==7) cc->dont_push_float=Btr(&tmpi->ic_flags,ICf_DONT_PUSH_FLOAT0); - MemCpy(saved_a1_a2_r,&tmpi->a1,3*sizeof(CICArg)); + MemCpy(saved_arg1_arg2_r,&tmpi->arg1,3*sizeof(CICArg)); tmpi->ic_cnt=0; tmpi->ic_last_start=-1; - if (tmpi->a2.type.mode) { - if (tmpi->ic_flags & ICF_A2_TO_F64) { + if (tmpi->arg2.type.mode) { + if (tmpi->ic_flags & ICF_ARG2_TO_F64) { + ICFCvt(cc,tmpi,REG_RAX,tmpi->arg2.type, + tmpi->arg2.reg,tmpi->arg2.disp,FALSE,CN_A2,rip2); + tmpi->arg2.type=MDF_REG+RT_I64; + tmpi->arg2.reg=REG_RAX; + tmpi->arg2.disp=0; + } else if (tmpi->ic_flags & ICF_ARG2_TO_INT) { ICFCvt(cc,tmpi,REG_RAX, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,FALSE,CN_A2,ip2); - tmpi->a2.type=MDF_REG+RT_I64; - tmpi->a2.reg=REG_RAX; - tmpi->a2.disp=0; - } else if (tmpi->ic_flags & ICF_A2_TO_INT) { - ICFCvt(cc,tmpi,REG_RAX, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,TRUE,CN_A2,ip2); - tmpi->a2.type=MDF_REG+RT_I64; - tmpi->a2.reg=REG_RAX; - tmpi->a2.disp=0; + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,TRUE,CN_A2,rip2); + tmpi->arg2.type=MDF_REG+RT_I64; + tmpi->arg2.reg=REG_RAX; + tmpi->arg2.disp=0; } } - if (tmpi->a1.type.mode) { - if (tmpi->ic_flags & ICF_A1_TO_F64) { + if (tmpi->arg1.type.mode) { + if (tmpi->ic_flags & ICF_ARG1_TO_F64) { + ICFCvt(cc,tmpi,REG_RDX,tmpi->arg1.type, + tmpi->arg1.reg,tmpi->arg1.disp,FALSE,CN_A1,rip2); + tmpi->arg1.type=MDF_REG+RT_I64; + tmpi->arg1.reg=REG_RDX; + tmpi->arg1.disp=0; + } else if (tmpi->ic_flags & ICF_ARG1_TO_INT) { ICFCvt(cc,tmpi,REG_RDX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,FALSE,CN_A1,ip2); - tmpi->a1.type=MDF_REG+RT_I64; - tmpi->a1.reg=REG_RDX; - tmpi->a1.disp=0; - } else if (tmpi->ic_flags & ICF_A1_TO_INT) { - ICFCvt(cc,tmpi,REG_RDX, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,TRUE,CN_A1,ip2); - tmpi->a1.type=MDF_REG+RT_I64; - tmpi->a1.reg=REG_RDX; - tmpi->a1.disp=0; + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,TRUE,CN_A1,rip2); + tmpi->arg1.type=MDF_REG+RT_I64; + tmpi->arg1.reg=REG_RDX; + tmpi->arg1.disp=0; } } @@ -105,7 +105,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt-8; + tmpa->rip=rip2+tmpi->ic_cnt-8; } break; case IC_HEAP_GLBL: @@ -118,7 +118,7 @@ cc->pass==10 is final pass, code is placed into buf. tmphgr=CAlloc(sizeof(CAOTHeapGlblRef)); tmphgr->next=tmphg->references; tmphg->references=tmphgr; - tmphgr->ip=ip2+tmpi->ic_cnt-8; + tmphgr->rip=rip2+tmpi->ic_cnt-8; } break; case IC_ADDR_IMPORT: @@ -128,7 +128,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpg=tmpi->ic_data; tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_IMM_U32; - tmpie->ip=ip2+tmpi->ic_cnt-4; + tmpie->rip=rip2+tmpi->ic_cnt-4; tmpie->next=tmpg->ie_lst; tmpg->ie_lst=tmpie; } @@ -136,182 +136,182 @@ cc->pass==10 is final pass, code is placed into buf. break; case IC_RIP: ICU16(tmpi,0xB848); - ICU64(tmpi,ip2+tmpi->ic_cnt-2); + ICU64(tmpi,rip2+tmpi->ic_cnt-2); if (cc->flags&CCF_AOT_COMPILE && buf &&!(cc->flags&CCF_NO_ABSS)) { tmpa=CAlloc(sizeof(CAOTAbsAddr)); tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=ip2+tmpi->ic_cnt-8; + tmpa->rip=rip2+tmpi->ic_cnt-8; } break; end: - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); break; case IC_BR_CARRY: - ICFlagBranch(tmpi,ip,0x72820F,buf); + ICFlagBranch(tmpi,rip,0x72820F,buf); break; case IC_BR_NOT_CARRY: - ICFlagBranch(tmpi,ip,0x73830F,buf); + ICFlagBranch(tmpi,rip,0x73830F,buf); break; case IC_BR_ZERO: - ICTestAndBranch(tmpi,ip,0x74840F,buf,ip2); + ICTestAndBranch(tmpi,rip,0x74840F,buf,rip2); break; case IC_BR_NOT_ZERO: - ICTestAndBranch(tmpi,ip,0x75850F,buf,ip2); + ICTestAndBranch(tmpi,rip,0x75850F,buf,rip2); break; case IC_BR_MM_ZERO: - ICPreIncDec(tmpi,SLASH_OP_DEC,ip2); - ICFlagBranch(tmpi,ip,0x74840F,buf); + ICPreIncDec(tmpi,SLASH_OP_DEC,rip2); + ICFlagBranch(tmpi,rip,0x74840F,buf); break; case IC_BR_MM_NOT_ZERO: - ICPreIncDec(tmpi,SLASH_OP_DEC,ip2); - ICFlagBranch(tmpi,ip,0x75850F,buf); + ICPreIncDec(tmpi,SLASH_OP_DEC,rip2); + ICFlagBranch(tmpi,rip,0x75850F,buf); break; case IC_BR_EQU_EQU: - ICCmpAndBranch(tmpi,FALSE,ip,0x74840F,0x74840F, - 0x74840F,0x74840F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x74840F,0x74840F, + 0x74840F,0x74840F,buf,rip2); break; case IC_BR_EQU_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x74840F,0x74840F, - 0x74840F,0x74840F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x74840F,0x74840F, + 0x74840F,0x74840F,buf,rip2); break; case IC_BR_NOT_EQU: - ICCmpAndBranch(tmpi,FALSE,ip,0x75850F,0x75850F, - 0x75850F,0x75850F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x75850F,0x75850F, + 0x75850F,0x75850F,buf,rip2); break; case IC_BR_NOT_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x75850F,0x75850F, - 0x75850F,0x75850F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x75850F,0x75850F, + 0x75850F,0x75850F,buf,rip2); break; case IC_BR_LESS: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x72820F,0x77870F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x72820F,0x77870F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x72820F,0x7C8C0F, - 0x77870F,0x7F8F0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x72820F,0x7C8C0F, + 0x77870F,0x7F8F0F,buf,rip2); break; case IC_BR_LESS2: - ICCmpAndBranch(tmpi,TRUE,ip,0x72820F,0x7C8C0F, - 0x77870F,0x7F8F0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x72820F,0x7C8C0F, + 0x77870F,0x7F8F0F,buf,rip2); break; case IC_BR_GREATER_EQU: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x73830F,0x76860F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x73830F,0x76860F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x73830F,0x7D8D0F, - 0x76860F,0x7E8E0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x73830F,0x7D8D0F, + 0x76860F,0x7E8E0F,buf,rip2); break; case IC_BR_GREATER_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x73830F,0x7D8D0F, - 0x76860F,0x7E8E0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x73830F,0x7D8D0F, + 0x76860F,0x7E8E0F,buf,rip2); break; case IC_BR_GREATER: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x77870F,0x72820F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x77870F,0x72820F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x77870F,0x7F8F0F, - 0x72820F,0x7C8C0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x77870F,0x7F8F0F, + 0x72820F,0x7C8C0F,buf,rip2); break; case IC_BR_GREATER2: - ICCmpAndBranch(tmpi,TRUE,ip,0x77870F,0x7F8F0F, - 0x72820F,0x7C8C0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x77870F,0x7F8F0F, + 0x72820F,0x7C8C0F,buf,rip2); break; case IC_BR_LESS_EQU: if (tmpi->ic_flags&ICF_USE_F64) - ICFCmpAndBranch(cc,tmpi, ip,0x76860F,0x73830F,buf,ip2); + ICFCmpAndBranch(cc,tmpi, rip,0x76860F,0x73830F,buf,rip2); else - ICCmpAndBranch(tmpi,FALSE,ip,0x76860F,0x7E8E0F, - 0x73830F,0x7D8D0F,buf,ip2); + ICCmpAndBranch(tmpi,FALSE,rip,0x76860F,0x7E8E0F, + 0x73830F,0x7D8D0F,buf,rip2); break; case IC_BR_LESS_EQU2: - ICCmpAndBranch(tmpi,TRUE,ip,0x76860F,0x7E8E0F, - 0x73830F,0x7D8D0F,buf,ip2); + ICCmpAndBranch(tmpi,TRUE,rip,0x76860F,0x7E8E0F, + 0x73830F,0x7D8D0F,buf,rip2); break; case IC_BR_BT: - ICBrBitOps(tmpi,ip,0xA30F,0x20BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xA30F,0x20BA0F,0x72820F,buf,rip2); break; case IC_BR_BTS: - ICBrBitOps(tmpi,ip,0xAB0F,0x28BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xAB0F,0x28BA0F,0x72820F,buf,rip2); break; case IC_BR_BTR: - ICBrBitOps(tmpi,ip,0xB30F,0x30BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xB30F,0x30BA0F,0x72820F,buf,rip2); break; case IC_BR_BTC: - ICBrBitOps(tmpi,ip,0xBB0F,0x38BA0F,0x72820F,buf,ip2); + ICBrBitOps(tmpi,rip,0xBB0F,0x38BA0F,0x72820F,buf,rip2); break; case IC_BR_NOT_BT: - ICBrBitOps(tmpi,ip,0xA30F,0x20BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xA30F,0x20BA0F,0x73830F,buf,rip2); break; case IC_BR_NOT_BTS: - ICBrBitOps(tmpi,ip,0xAB0F,0x28BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xAB0F,0x28BA0F,0x73830F,buf,rip2); break; case IC_BR_NOT_BTR: - ICBrBitOps(tmpi,ip,0xB30F,0x30BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xB30F,0x30BA0F,0x73830F,buf,rip2); break; case IC_BR_NOT_BTC: - ICBrBitOps(tmpi,ip,0xBB0F,0x38BA0F,0x73830F,buf,ip2); + ICBrBitOps(tmpi,rip,0xBB0F,0x38BA0F,0x73830F,buf,rip2); break; case IC_BR_AND_ZERO: - ICAndBranch(tmpi,ip,0x74840F,buf,ip2); + ICAndBranch(tmpi,rip,0x74840F,buf,rip2); break; case IC_BR_AND_NOT_ZERO: - ICAndBranch(tmpi,ip,0x75850F,buf,ip2); + ICAndBranch(tmpi,rip,0x75850F,buf,rip2); break; case IC_SUB_CALL: lb=OptLabelFwd(tmpi->ic_data); ICU8(tmpi,0xE8); - ICU32(tmpi,lb->addr-(ip+5)); + ICU32(tmpi,lb->addr-(rip+5)); break; case IC_JMP: lb=OptLabelFwd(tmpi->ic_data); short_jmp=ToBool(tmpi->ic_flags&ICF_SHORT_JMP); if (!buf && lb->addr!=INVALID_PTR && - MIN_I8+5addr-ipaddr-ripic_flags|=ICF_SHORT_JMP; - i=lb->addr-(ip+2); + i=lb->addr-(rip+2); if (buf || i) ICU16(tmpi,i<<8+0xEB); else tmpi->ic_code=IC_NOP1; } else { - i=lb->addr-(ip+5); + i=lb->addr-(rip+5); ICU8(tmpi,0xE9); ICU32(tmpi,i); } break; case IC_LABEL: lb=tmpi->ic_data; - lb->addr=ip; + lb->addr=rip; if (lb->flags&CMF_POP_CMP) { ICAddRSP(tmpi,-8,FALSE); ICAddRSP(tmpi,8,FALSE); } if (lb->type==CMT_ASM_LABEL) - lb->addr+=lb->ip; + lb->addr+=lb->rip; break; case IC_STR_CONST: case IC_GET_LABEL: lb=tmpi->ic_data; if (cc->flags&CCF_AOT_COMPILE) - i=lb->addr+aotc->ip; + i=lb->addr+aotc->rip; else i=lb->addr+buf; - ICLea(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_RIP_DISP32+RT_PTR,0,i,cc,buf,ip2); + ICLea(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_RIP_DISP32+RT_PTR,0,i,cc,buf,rip2); break; case IC_ASM: tmpaot=tmpi->ic_data; tmpi->ic_cnt+=tmpaot->aot_U8s; if (buf) { - MemCpy(buf+ip,tmpaot->buf,tmpaot->aot_U8s); + MemCpy(buf+rip,tmpaot->buf,tmpaot->aot_U8s); Free(tmpaot->buf); tmpaot->buf=buf; - tmpaot->ip=ip; - tmpaot->ip2=ip2; + tmpaot->rip=rip; + tmpaot->rip2=rip2; if (cc->flags&CCF_AOT_COMPILE) CmpFixUpAOTAsm(cc,tmpaot); else @@ -321,7 +321,7 @@ cc->pass==10 is final pass, code is placed into buf. } break; case IC_CALL: - i=tmpi->ic_data-(ip2+5); + i=tmpi->ic_data-(rip2+5); if (!(MIN_I32<=i<=MAX_I32) && !(cc->flags&CCF_AOT_COMPILE)) { ICU16(tmpi,0xBB48); ICU64(tmpi,tmpi->ic_data); @@ -339,12 +339,12 @@ cc->pass==10 is final pass, code is placed into buf. tmpeu=CAlloc(sizeof(CExternUsage)); tmpeu->next=tmpf->ext_lst; tmpf->ext_lst=tmpeu; - tmpeu->ip=ip2+1; + tmpeu->rip=rip2+1; } break; case IC_CALL_INDIRECT2: ICU16(tmpi,0xBB48); - if (cc->flags&CCF_AOT_COMPILE) i=ip2+tmpi->ic_cnt; + if (cc->flags&CCF_AOT_COMPILE) i=rip2+tmpi->ic_cnt; ICU64(tmpi,tmpi->ic_data); ICU16(tmpi,0x13FF); if (buf && cc->flags&CCF_AOT_COMPILE&& !(cc->flags&CCF_NO_ABSS)) { @@ -352,7 +352,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=i; + tmpa->rip=i; } break; case IC_CALL_IMPORT: @@ -363,7 +363,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpf=tmpi->ic_data; tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_IMM_I64; - tmpie->ip=ip2+tmpi->ic_cnt-8; + tmpie->rip=rip2+tmpi->ic_cnt-8; tmpie->next=tmpf->ie_lst; tmpf->ie_lst=tmpie; } @@ -375,7 +375,7 @@ cc->pass==10 is final pass, code is placed into buf. tmpf=tmpi->ic_data; tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_REL_I32; - tmpie->ip=ip2+tmpi->ic_cnt-4; + tmpie->rip=rip2+tmpi->ic_cnt-4; tmpie->next=tmpf->ie_lst; tmpf->ie_lst=tmpie; } @@ -430,270 +430,270 @@ cc->pass==10 is final pass, code is placed into buf. ICZero(tmpi,REG_RAX); ICU8(tmpi,0x64); //It's ugly to use ic_class here - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, MDF_DISP+CmpRawType(tmpi->ic_class),REG_RAX,tmpi->ic_data, - ip2); + rip2); break; case IC_MOV_GS: ICZero(tmpi,REG_RAX); ICU8(tmpi,0x65); //It's ugly to use ic_class here - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, MDF_DISP+CmpRawType(tmpi->ic_class),REG_RAX,tmpi->ic_data, - ip2); + rip2); break; case IC_HOLYC_TYPECAST: - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_COM: - ICUnaries(tmpi,SLASH_OP_NOT,ip2); + ICUnaries(tmpi,SLASH_OP_NOT,rip2); break; case IC_NOT: - ICNot(tmpi,ip2); + ICNot(tmpi,rip2); break; case IC_UNARY_MINUS: - if (tmpi->r.type.raw_type==RT_F64) - ICFUnaryMinus(cc,tmpi,buf,ip2); + if (tmpi->res.type.raw_type==RT_F64) + ICFUnaryMinus(cc,tmpi,buf,rip2); else - ICUnaries(tmpi,SLASH_OP_NEG,ip2); + ICUnaries(tmpi,SLASH_OP_NEG,rip2); break; case IC_ADDR: case IC_MOV: - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_DEREF: - ICDeref(tmpi,ip2); + ICDeref(tmpi,rip2); break; case IC_DEREF_PP: - ICDerefPostIncDec(tmpi,SLASH_OP_INC,ip2); + ICDerefPostIncDec(tmpi,SLASH_OP_INC,rip2); break; case IC_DEREF_MM: - ICDerefPostIncDec(tmpi,SLASH_OP_DEC,ip2); + ICDerefPostIncDec(tmpi,SLASH_OP_DEC,rip2); break; case IC__PP: if (tmpi->ic_flags&ICF_USE_INT) - ICPostIncDec(tmpi,SLASH_OP_INC,ip2); + ICPostIncDec(tmpi,SLASH_OP_INC,rip2); else - ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_INC,ip2); + ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_INC,rip2); break; case IC__MM: if (tmpi->ic_flags&ICF_USE_INT) - ICPostIncDec(tmpi,SLASH_OP_DEC,ip2); + ICPostIncDec(tmpi,SLASH_OP_DEC,rip2); else - ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_DEC,ip2); + ICFPostIncDec(cc,tmpi,CMP_TEMPLATE_DEC,rip2); break; case IC_PP_: if (tmpi->ic_flags&ICF_USE_INT) - ICPreIncDec(tmpi,SLASH_OP_INC,ip2); + ICPreIncDec(tmpi,SLASH_OP_INC,rip2); else - ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_INC,ip2); + ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_INC,rip2); break; case IC_MM_: if (tmpi->ic_flags&ICF_USE_INT) - ICPreIncDec(tmpi,SLASH_OP_DEC,ip2); + ICPreIncDec(tmpi,SLASH_OP_DEC,rip2); else - ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_DEC,ip2); + ICFPreIncDec(cc,tmpi,CMP_TEMPLATE_DEC,rip2); break; case IC_LEA: - ICLea(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,cc,buf,ip2); + ICLea(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,cc,buf,rip2); break; case IC_POWER: - ICFPow(cc,tmpi,buf,ip2); + ICFPow(cc,tmpi,buf,rip2); break; case IC_SHL: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,rip2); break; case IC_SHR: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,rip2); break; case IC_MUL: if (tmpi->ic_flags&ICF_USE_INT) - ICMul(tmpi,ip2); + ICMul(tmpi,rip2); else - ICFMul(cc,tmpi,buf,ip2); + ICFMul(cc,tmpi,buf,rip2); break; case IC_DIV: if (tmpi->ic_flags&ICF_USE_INT) - ICDiv(tmpi,ip2); + ICDiv(tmpi,rip2); else - ICFDiv(cc,tmpi,buf,ip2); + ICFDiv(cc,tmpi,buf,rip2); break; case IC_MOD: if (tmpi->ic_flags&ICF_USE_INT) - ICMod(tmpi,ip2); + ICMod(tmpi,rip2); else - ICFMod(cc,tmpi,ip2); + ICFMod(cc,tmpi,rip2); break; case IC_AND: - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x23,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x23,rip2); break; case IC_OR: - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x0B,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x0B,rip2); break; case IC_XOR: - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x33,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x33,rip2); break; case IC_ADD: if (tmpi->ic_flags&ICF_USE_INT) - ICAddEct(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,0x03,ip2); + ICAddEct(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,0x03,rip2); else - ICFAdd(cc,tmpi,buf,ip2); + ICFAdd(cc,tmpi,buf,rip2); break; case IC_SUB: if (tmpi->ic_flags&ICF_USE_INT) - ICSub(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + ICSub(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); else - ICFSub(cc,tmpi,buf,ip2); + ICFSub(cc,tmpi,buf,rip2); break; case IC_EQU_EQU: - ICCmp(tmpi,0x75,0x75,ip2); + ICCmp(tmpi,0x75,0x75,rip2); break; case IC_NOT_EQU: - ICCmp(tmpi,0x74,0x74,ip2); + ICCmp(tmpi,0x74,0x74,rip2); break; case IC_LESS: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x73,0x7D,ip2); + ICCmp(tmpi,0x73,0x7D,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS,rip2); break; case IC_GREATER_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x72,0x7C,ip2); + ICCmp(tmpi,0x72,0x7C,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER_EQU,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER_EQU,rip2); break; case IC_GREATER: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x76,0x7E,ip2); + ICCmp(tmpi,0x76,0x7E,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_GREATER,rip2); break; case IC_LESS_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICCmp(tmpi,0x77,0x7F,ip2); + ICCmp(tmpi,0x77,0x7F,rip2); else - ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS_EQU,ip2); + ICFCmp(cc,tmpi,CMP_TEMPLATE_LESS_EQU,rip2); break; case IC_AND_AND: - ICAndAnd(tmpi,ip2); + ICAndAnd(tmpi,rip2); break; case IC_OR_OR: - ICOrOr(tmpi,ip2); + ICOrOr(tmpi,rip2); break; case IC_XOR_XOR: - ICXorXor(tmpi,ip2); + ICXorXor(tmpi,rip2); break; case IC_ASSIGN: - ICAssign(tmpi,ip2); + ICAssign(tmpi,rip2); break; case IC_ASSIGN_PP: - ICAssignPostIncDec(tmpi,SLASH_OP_INC,ip2); + ICAssignPostIncDec(tmpi,SLASH_OP_INC,rip2); break; case IC_ASSIGN_MM: - ICAssignPostIncDec(tmpi,SLASH_OP_DEC,ip2); + ICAssignPostIncDec(tmpi,SLASH_OP_DEC,rip2); break; case IC_SHL_EQU: - ICShiftEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + ICShiftEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,rip2); break; case IC_SHR_EQU: - ICShiftEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + ICShiftEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,rip2); break; case IC_MUL_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICMulEqu(tmpi,ip2); + ICMulEqu(tmpi,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FMUL,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FMUL,buf,rip2); break; case IC_DIV_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICDivEqu(tmpi,FALSE,ip2); + ICDivEqu(tmpi,FALSE,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FDIV,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FDIV,buf,rip2); break; case IC_MOD_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICDivEqu(tmpi,TRUE,ip2); + ICDivEqu(tmpi,TRUE,rip2); else - ICFModEqu(cc,tmpi,ip2); + ICFModEqu(cc,tmpi,rip2); break; case IC_AND_EQU: - ICAndEqu(tmpi,ip2); + ICAndEqu(tmpi,rip2); break; case IC_OR_EQU: - ICOrEqu(tmpi,ip2); + ICOrEqu(tmpi,rip2); break; case IC_XOR_EQU: - ICXorEqu(tmpi,ip2); + ICXorEqu(tmpi,rip2); break; case IC_ADD_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0x010000000003,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0x010000000003,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FADD,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FADD,buf,rip2); break; case IC_SUB_EQU: if (tmpi->ic_flags&ICF_USE_INT) - ICAddSubEctEqu(tmpi,tmpi->a1_type_pointed_to, - tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp, - 0x29000000052B,ip2); + ICAddSubEctEqu(tmpi,tmpi->arg1_type_pointed_to, + tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp, + 0x29000000052B,rip2); else - ICFOpEqu(cc,tmpi,SLASH_OP_FSUB,buf,ip2); + ICFOpEqu(cc,tmpi,SLASH_OP_FSUB,buf,rip2); break; case IC_SHL_CONST: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, MDF_IMM+RT_I64,0,tmpi->ic_data, - 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,ip2); + 0xE0D1E0D3E0C1,0xE0D1E0D3E0C1,rip2); break; case IC_SHR_CONST: - ICShift(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp, + ICShift(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp, MDF_IMM+RT_I64,0,tmpi->ic_data, - 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,ip2); + 0xE8D1E8D3E8C1,0xF8D1F8D3F8C1,rip2); break; case IC_ADD_CONST: - ICAddSubEctImm(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,tmpi->ic_data, - 0x0003,ip2); + ICAddSubEctImm(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,tmpi->ic_data, + 0x0003,rip2); break; case IC_SUB_CONST: - ICAddSubEctImm(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,tmpi->ic_data, - 0x052B,ip2); + ICAddSubEctImm(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,tmpi->ic_data, + 0x052B,rip2); break; case IC_ENTER: ICU32(tmpi,0xEC8B4855); @@ -713,7 +713,7 @@ cc->pass==10 is final pass, code is placed into buf. if (reg_offsets[i]>0 && reg_offsets[i].offset!=MAX_I64) { tmpc=OptClassFwd(reg_offsets[i].m->member_class); ICMov(tmpi,MDF_REG+RT_I64,i,0,MDF_DISP+tmpc->raw_type, - REG_RBP,reg_offsets[i].offset,ip2); + REG_RBP,reg_offsets[i].offset,rip2); } } break; @@ -730,290 +730,290 @@ cc->pass==10 is final pass, code is placed into buf. } break; case IC_PUSH: - ICPush(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICPush(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_POP: ICU8(tmpi,0x58); break; case IC_INVLPG: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU24(tmpi,0x38010F); break; case IC_CLFLUSH: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU24(tmpi,0x38AE0F); break; case IC_GET_RFLAGS: ICU8(tmpi,0x9C); - ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,ip2); + ICPop(tmpi,MDF_REG+RT_I64,REG_RAX,0,rip2); break; case IC_CARRY: ICU24(tmpi,0xC0920F); //SETC AL ICU24(tmpi,0x01E083); //AND EAX,1 break; case IC_RDTSC: - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_MAIN); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_INST); break; case IC_SET_RFLAGS: - ICPush(tmpi,tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + ICPush(tmpi,tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU8(tmpi,0x9D); break; case IC_GET_RBP: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_REG+RT_I64,REG_RBP,0,ip2); + MDF_REG+RT_I64,REG_RBP,0,rip2); break; case IC_SET_RBP: ICMov(tmpi,MDF_REG+RT_I64,REG_RBP,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_GET_RSP: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - MDF_REG+RT_I64,REG_RSP,0,ip2); + MDF_REG+RT_I64,REG_RSP,0,rip2); break; case IC_SET_RSP: ICMov(tmpi,MDF_REG+RT_I64,REG_RSP,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_RETURN_VAL: case IC_SET_RAX: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); break; case IC_RETURN_VAL2: case IC_GET_RAX: break; case IC_BT: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xA30F,0x20BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xA30F,0x20BA0F,rip2); break; case IC_BTS: case IC_LBTS: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xAB0F,0x28BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xAB0F,0x28BA0F,rip2); break; case IC_BTR: case IC_LBTR: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xB30F,0x30BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xB30F,0x30BA0F,rip2); break; case IC_BTC: case IC_LBTC: - ICBitOps(tmpi,&tmpi->a1,&tmpi->a2,tmpi->next, - 0xBB0F,0x38BA0F,ip2); + ICBitOps(tmpi,&tmpi->arg1,&tmpi->arg2,tmpi->next, + 0xBB0F,0x38BA0F,rip2); break; case IC_BSF: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU32(tmpi,0xC0BC0F48); ICU16(tmpi,0x0375); ICU24(tmpi,0xD0F748); break; case IC_BSR: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU32(tmpi,0xC0BD0F48); ICU16(tmpi,0x0375); ICU24(tmpi,0xD0F748); break; case IC_SIGN_I64: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_SIGN_I64, - TRUE,FALSE,FALSE,CN_MAIN); + TRUE,FALSE,FALSE,CN_INST); break; case IC_TOUPPER: - ICToUpper(tmpi,ip2); + ICToUpper(tmpi,rip2); break; case IC_TO_I64: - ICToI64(cc,tmpi,ip2); + ICToI64(cc,tmpi,rip2); break; case IC_TO_F64: - ICToF64(cc,tmpi,ip2); + ICToF64(cc,tmpi,rip2); break; case IC_TO_BOOL: - ICToBool(cc,tmpi,ip2); + ICToBool(cc,tmpi,rip2); break; case IC_SQR: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQR,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQR,rip2); break; case IC_ABS: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ABS,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ABS,rip2); break; case IC_SQRT: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQRT,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SQRT,rip2); break; case IC_SIN: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SIN,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_SIN,rip2); break; case IC_COS: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_COS,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_COS,rip2); break; case IC_TAN: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_TAN,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_TAN,rip2); break; case IC_ATAN: - ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ATAN,ip2); + ICFTemplateFun(cc,tmpi,CMP_TEMPLATE_ATAN,rip2); break; case IC_ABS_I64: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU24(tmpi,0xC08548); ICU16(tmpi,0x0379); ICU24(tmpi,0xD8F748); break; case IC_MIN_I64: - ICMinMax(tmpi,0x4F,ip2); + ICMinMax(tmpi,0x4F,rip2); break; case IC_MAX_I64: - ICMinMax(tmpi,0x4C,ip2); + ICMinMax(tmpi,0x4C,rip2); break; case IC_MIN_U64: - ICMinMax(tmpi,0x47,ip2); + ICMinMax(tmpi,0x47,rip2); break; case IC_MAX_U64: - ICMinMax(tmpi,0x42,ip2); + ICMinMax(tmpi,0x42,rip2); break; case IC_MOD_U64: - ICModU64(tmpi,ip2); + ICModU64(tmpi,rip2); break; case IC_SQR_I64: - ICSqr(tmpi,SLASH_OP_IMUL,ip2); + ICSqr(tmpi,SLASH_OP_IMUL,rip2); break; case IC_SQR_U64: - ICSqr(tmpi,SLASH_OP_MUL,ip2); + ICSqr(tmpi,SLASH_OP_MUL,rip2); break; case IC_SWAP_U8: case IC_SWAP_U16: case IC_SWAP_U32: case IC_SWAP_I64: - ICSwap(tmpi,ip2); + ICSwap(tmpi,rip2); break; case IC_QUE_INIT: - ICQueInit(tmpi,ip2); + ICQueInit(tmpi,rip2); break; case IC_QUE_INS: - ICQueIns(tmpi,ip2); + ICQueIns(tmpi,rip2); break; case IC_QUE_INS_REV: - ICQueInsRev(tmpi,ip2); + ICQueInsRev(tmpi,rip2); break; case IC_QUE_REM: - ICQueRem(tmpi,ip2); + ICQueRem(tmpi,rip2); break; case IC_STRLEN: ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_MAIN); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + ICCopyTemplate(cc,tmpi,CMP_TEMPLATE_STRLEN,TRUE,FALSE,FALSE,CN_INST); break; case IC_IN_U32: - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { ICU16(tmpi,0xC033); - if (tmpi->a1.disp<=MAX_U8) - ICU16(tmpi,0xE5+tmpi->a1.disp<<8); + if (tmpi->arg1.disp<=MAX_U8) + ICU16(tmpi,0xE5+tmpi->arg1.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); ICU8(tmpi,0xED); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xC033); ICU8(tmpi,0xED); } break; case IC_IN_U16: - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { ICU16(tmpi,0xC033); - if (tmpi->a1.disp<=MAX_U8) - ICU24(tmpi,0xE500+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + if (tmpi->arg1.disp<=MAX_U8) + ICU24(tmpi,0xE500+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); ICU16(tmpi,0xED00+OC_OP_SIZE_PREFIX); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xC033); ICU16(tmpi,0xED00+OC_OP_SIZE_PREFIX); } break; case IC_IN_U8: - if (tmpi->a1.type&MDF_IMM) { + if (tmpi->arg1.type&MDF_IMM) { ICU16(tmpi,0xC033); - if (tmpi->a1.disp<=MAX_U8) - ICU16(tmpi,0xE4+tmpi->a1.disp<<8); + if (tmpi->arg1.disp<=MAX_U8) + ICU16(tmpi,0xE4+tmpi->arg1.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a1.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg1.disp<<16); ICU8(tmpi,0xEC); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xC033); ICU8(tmpi,0xEC); } break; case IC_OUT_U32: - if (tmpi->a2.type&MDF_IMM) { + if (tmpi->arg2.type&MDF_IMM) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - if (tmpi->a2.disp<=MAX_U8) - ICU16(tmpi,0xE7+tmpi->a2.disp<<8); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + if (tmpi->arg2.disp<=MAX_U8) + ICU16(tmpi,0xE7+tmpi->arg2.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); ICU8(tmpi,0xEF); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU8(tmpi,0xEF); } break; case IC_OUT_U16: - if (tmpi->a2.type&MDF_IMM) { + if (tmpi->arg2.type&MDF_IMM) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - if (tmpi->a2.disp<=MAX_U8) - ICU24(tmpi,0xE700+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + if (tmpi->arg2.disp<=MAX_U8) + ICU24(tmpi,0xE700+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); ICU16(tmpi,0xEF00+OC_OP_SIZE_PREFIX); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU16(tmpi,0xEF00+OC_OP_SIZE_PREFIX); } break; case IC_OUT_U8: - if (tmpi->a2.type&MDF_IMM) { + if (tmpi->arg2.type&MDF_IMM) { ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); - if (tmpi->a2.disp<=MAX_U8) - ICU16(tmpi,0xE6+tmpi->a2.disp<<8); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); + if (tmpi->arg2.disp<=MAX_U8) + ICU16(tmpi,0xE6+tmpi->arg2.disp<<8); else { - ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->a2.disp<<16); + ICU32(tmpi,0xBA00+OC_OP_SIZE_PREFIX+tmpi->arg2.disp<<16); ICU8(tmpi,0xEE); } } else { ICMov(tmpi,MDF_REG+RT_I64,REG_RDX,0, - tmpi->a2.type,tmpi->a2.reg,tmpi->a2.disp,ip2); + tmpi->arg2.type,tmpi->arg2.reg,tmpi->arg2.disp,rip2); ICMov(tmpi,MDF_REG+RT_I64,REG_RAX,0, - tmpi->a1.type,tmpi->a1.reg,tmpi->a1.disp,ip2); + tmpi->arg1.type,tmpi->arg1.reg,tmpi->arg1.disp,rip2); ICU8(tmpi,0xEE); } break; case IC_NOBOUND_SWITCH: - ICSwitch(tmpi,ip,TRUE,cc,buf,ip2); + ICSwitch(tmpi,rip,TRUE,cc,buf,rip2); break; case IC_SWITCH: - ICSwitch(tmpi,ip,FALSE,cc,buf,ip2); + ICSwitch(tmpi,rip,FALSE,cc,buf,rip2); break; case IC_NOP1: case IC_NOP2: @@ -1025,9 +1025,9 @@ cc->pass==10 is final pass, code is placed into buf. break; case IC_CALL_END: ICPopRegs(tmpi,tmpi->ic_data); - if (tmpi->r.type.mode) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + if (tmpi->res.type.mode) + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); break; case IC_POP_REGS: ICPopRegs(tmpi,tmpi->ic_data); @@ -1038,28 +1038,28 @@ cc->pass==10 is final pass, code is placed into buf. case IC_ADD_RSP1: break; default: - "Pass:%d Missing IC handler\n",cc->pass; + "Pass:%d Missing IC hndlr\n",cc->pass; ICPut(cc,tmpi); LexExcept(cc,"Compiler Optimization Error at "); } - if (tmpi->r.type.mode) { - if (tmpi->ic_flags & ICF_R_TO_F64) { + if (tmpi->res.type.mode) { + if (tmpi->ic_flags & ICF_RES_TO_F64) { if (tmpi->ic_code==IC_PUSH_CMP) { ICU24(tmpi,0x242CDF); //FILD U64 [RSP] ICU24(tmpi,0x241CDD); //FSTP U64 [RSP] } else { - ICFCvt(cc,tmpi,REG_RAX,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - FALSE,CN_R,ip2); + ICFCvt(cc,tmpi,REG_RAX,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + FALSE,CN_RES,rip2); if (!Bt(&tmpi->ic_flags,ICf_DONT_POP_FLOAT0+ cc->cur_ic_float_op_num-1)) - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); } - } else if (tmpi->ic_flags & ICF_R_TO_INT) { - ICFCvt(cc,tmpi,REG_RAX,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - TRUE,CN_R,ip2); - ICMov(tmpi,tmpi->r.type,tmpi->r.reg,tmpi->r.disp, - MDF_REG+RT_I64,REG_RAX,0,ip2); + } else if (tmpi->ic_flags & ICF_RES_TO_INT) { + ICFCvt(cc,tmpi,REG_RAX,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + TRUE,CN_RES,rip2); + ICMov(tmpi,tmpi->res.type,tmpi->res.reg,tmpi->res.disp, + MDF_REG+RT_I64,REG_RAX,0,rip2); } } } @@ -1070,25 +1070,25 @@ cc->pass==10 is final pass, code is placed into buf. tmpi->ic_flags&=~ICF_DEL_PREV_INS; } if (cnt && buf) - MemCpy(buf+ip,tmpi->ic_body,cnt); + MemCpy(buf+rip,tmpi->ic_body,cnt); op789A_skip_copy: if (dbg_info && cc->min_line<=tmpi->ic_line<=cc->max_line) { i=tmpi->ic_line-cc->min_line; if (!dbg_info->body[i]) - dbg_info->body[i]=ip2; + dbg_info->body[i]=rip2; } if (tmpi->ic_flags&ICF_PASS_TRACE && Bt(&cc->saved_pass_trace,cc->pass) && cnt) { "$$RED$$"; if (buf) - Un(buf+ip,cnt,64); + Un(buf+rip,cnt,64); else Un(tmpi->ic_body,cnt,64); "$$FG$$"; } if (!(tmpi->ic_flags&(ICF_CODE_FINAL|ICF_DONT_RESTORE))) - MemCpy(&tmpi->a1,saved_a1_a2_r,3*sizeof(CICArg)); - ip+=cnt; + MemCpy(&tmpi->arg1,saved_arg1_arg2_r,3*sizeof(CICArg)); + rip+=cnt; if (tmpi->ic_cnt>=IC_BODY_SIZE && tmpi->ic_code!=IC_ASM) throw('Compiler'); op789A_next: @@ -1099,24 +1099,24 @@ op789A_next: while (lb!=&cc->coc.coc_next_misc) { switch (lb->type) { case CMT_STR_CONST: - lb->addr=ip; + lb->addr=rip; if (buf) - MemCpy(buf+ip,lb->str,lb->st_len); - ip+=lb->st_len; + MemCpy(buf+rip,lb->str,lb->st_len); + rip+=lb->st_len; break; case CMT_JMP_TABLE: - lb->addr=ip; + lb->addr=rip; ptr=buf+lb->addr; if (lb->flags&(CMF_I8_JMP_TABLE|CMF_U8_JMP_TABLE)) { if (buf) for (i=0;irange;i++) *ptr++=lb->jmp_table[i]->addr-lb->begin->addr; - ip+=lb->range; + rip+=lb->range; } else if (lb->flags&(CMF_I16_JMP_TABLE|CMF_U16_JMP_TABLE)) { if (buf) for (i=0;irange;i++) *ptr(U16 *)++=lb->jmp_table[i]->addr-lb->begin->addr; - ip+=lb->range<<1; + rip+=lb->range<<1; } else { if (buf) for (i=0;irange;i++) { @@ -1125,28 +1125,28 @@ op789A_next: tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U32; aotc->abss=tmpa; - tmpa->ip=aotc->ip+lb->addr+i<<2; - *ptr(U32 *)++=lb->jmp_table[i]->addr+aotc->ip; + tmpa->rip=aotc->rip+lb->addr+i<<2; + *ptr(U32 *)++=lb->jmp_table[i]->addr+aotc->rip; } else *ptr(U32 *)++=lb->jmp_table[i]->addr+buf; } - ip+=lb->range<<2; + rip+=lb->range<<2; } break; case CMT_FLOAT_CONSTS: - lb->addr=ip; + lb->addr=rip; if (buf) MemCpy(buf+lb->addr,lb->float_consts,lb->num_consts*sizeof(F64)); - ip+=lb->num_consts*sizeof(F64); + rip+=lb->num_consts*sizeof(F64); break; } lb=lb->next; } if (dbg_info) { if (cc->flags&CCF_AOT_COMPILE) - dbg_info->body[num_lines]=ip+aotc->ip; + dbg_info->body[num_lines]=rip+aotc->rip; else - dbg_info->body[num_lines]=ip+buf; + dbg_info->body[num_lines]=rip+buf; } - return ip; + return rip; } diff --git a/Compiler/PrsExp.HC b/Compiler/PrsExp.HC index 99a5732..1fff5aa 100644 --- a/Compiler/PrsExp.HC +++ b/Compiler/PrsExp.HC @@ -466,17 +466,17 @@ I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tmpf) throw('Compiler'); else { COCPush(cc); - cc->pass=0; OptPass012(cc); + cc->pass=0; OptPass012(cc); cc->pass=1; tmpi=OptPass012(cc); COCPop(cc); last_class=OptClassFwd(tmpi->ic_class); tmpc2=OptClassFwd(tmpm->member_class); if (tmpc2->raw_type==RT_F64 && !tmpm->dim.next && last_class->raw_type!=RT_F64) - tmpi->ic_flags|=ICF_R_TO_F64; + tmpi->ic_flags|=ICF_RES_TO_F64; else if (tmpc2->raw_type!=RT_F64 && last_class->raw_type==RT_F64) - tmpi->ic_flags|=ICF_R_TO_INT; + tmpi->ic_flags|=ICF_RES_TO_INT; } } COCPush(cc); @@ -703,12 +703,13 @@ I64 PrsUnaryTerm(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, if (cc->flags & CCF_ASM_EXPRESSIONS) { cc->abs_cnts.abs_addres++; if (cc->flags&CCF_AOT_COMPILE) - ICAdd(cc,IC_ABS_ADDR,cc->aotc->ip,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_ABS_ADDR,cc->aotc->rip,cmp.internal_types[RT_PTR]); else - ICAdd(cc,IC_IMM_I64,cc->aotc->ip,cmp.internal_types[RT_PTR]); + ICAdd(cc,IC_IMM_I64,cc->aotc->rip,cmp.internal_types[RT_PTR]); } else { - if (cc->flags&CCF_CLASS_IP) - ICAdd(cc,IC_IMM_I64,cc->class_ip,cmp.internal_types[RT_I64]); + if (cc->flags&CCF_CLASS_DOL_OFFSET) + ICAdd(cc,IC_IMM_I64,cc->class_dol_offset, + cmp.internal_types[RT_I64]); else ICAdd(cc,IC_RIP,0,cmp.internal_types[RT_PTR]); } @@ -772,7 +773,7 @@ I64 PrsUnaryTerm(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, // if (tmpg->flags&GVF_DATA_HEAP) //TODO // ICAdd(cc,IC_HEAP_GLBL,tmpm->static_data,tmpc); // else - ICAdd(cc,IC_ABS_ADDR,tmpm->static_data_ip,tmpc); + ICAdd(cc,IC_ABS_ADDR,tmpm->static_data_rip,tmpc); } else ICAdd(cc,IC_IMM_I64,tmpm->static_data,tmpc); } else { @@ -878,7 +879,7 @@ pu_export_sys_sym: if (tmpg->flags&GVF_DATA_HEAP) ICAdd(cc,IC_HEAP_GLBL,tmpg->heap_glbl,tmpc); else - ICAdd(cc,IC_ABS_ADDR,tmpg->data_addr_ip,tmpc); + ICAdd(cc,IC_ABS_ADDR,tmpg->data_addr_rip,tmpc); } } } else { @@ -1070,7 +1071,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, LexExcept(cc,"Missing ']' at "); Lex(cc); //skip ] tmpi1=cc->coc.coc_head.last; - tmpi1->ic_flags|=ICF_R_TO_INT; + tmpi1->ic_flags|=ICF_RES_TO_INT; ICAdd(cc,IC_MUL,0,tmpc); ICAdd(cc,IC_ADD,0,tmpc); cc->flags|=CCF_RAX; @@ -1086,7 +1087,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, LexExcept(cc,"Missing ']' at "); Lex(cc); //skip ] tmpi1=cc->coc.coc_head.last; - tmpi1->ic_flags|=ICF_R_TO_INT; + tmpi1->ic_flags|=ICF_RES_TO_INT; ICAdd(cc,IC_MUL,0,tmpc); ICAdd(cc,IC_ADD,0,tmpc); cc->flags&=~(CCF_RAX|CCF_ARRAY); diff --git a/Compiler/PrsStmt.HC b/Compiler/PrsStmt.HC index b130c0e..05b65a0 100644 --- a/Compiler/PrsStmt.HC +++ b/Compiler/PrsStmt.HC @@ -99,7 +99,7 @@ CHashFun *PrsFunJoin(CCmpCtrl *cc,CHashClass *tmp_return, tmpf->clobbered_reg_mask=REGG_CLOBBERED+REGG_STK_TMP; tmpf->str=name; if (cc->flags&CCF_AOT_COMPILE) - tmpf->exe_addr=aotc->ip; + tmpf->exe_addr=aotc->rip; else tmpf->exe_addr=&UndefinedExtern; LBts(&tmpf->flags,Cf_EXTERN); @@ -169,7 +169,7 @@ U0 PrsFun(CCmpCtrl *cc,CHashClass *tmp_return,U8 *name,I64 fsp_flags) ICAdd(cc,IC_LEAVE,0,cc->htc.fun->return_class); cc->htc.fun->size&=~7; if (cc->flags&CCF_AOT_COMPILE) { - cc->htc.fun->exe_addr=cc->aotc->ip; + cc->htc.fun->exe_addr=cc->aotc->rip; cc->htc.fun->type|=HTF_EXPORT|HTF_RESOLVE; r=COCCompile(cc,&size,&cc->htc.fun->dbg_info,NULL); if (r) { @@ -300,7 +300,7 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, case PRS0__EXTERN: if (cc->flags&CCF_AOT_COMPILE) { tmpg=CAlloc(sizeof(CHashGlblVar)); - tmpg->data_addr_ip=val; + tmpg->data_addr_rip=val; tmpg->type=HTT_GLBL_VAR | HTF_EXPORT; } else { tmpg=CAlloc(sizeof(CHashGlblVar),Fs->code_heap); @@ -351,24 +351,20 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, if (cc->token=='=') tmpg->data_addr=CAlloc(j); if (tmpc->size>=8) //align - while (aotc->ip&7) + while (aotc->rip&7) AOTStoreCodeU8(cc,0); else if (tmpc->size==4) - while (aotc->ip&3) + while (aotc->rip&3) AOTStoreCodeU8(cc,0); else if (tmpc->size==2) - while (aotc->ip&1) + while (aotc->rip&1) AOTStoreCodeU8(cc,0); - tmpg->data_addr_ip=aotc->ip; + tmpg->data_addr_rip=aotc->rip; tmpg->type=HTT_GLBL_VAR | HTF_EXPORT; if (tmpex && tmpex->type & HTT_GLBL_VAR) has_alias=TRUE; - if (sys_var_init_flag) - for (k=0;kopts,OPTf_GLBLS_ON_DATA_HEAP)) { @@ -423,14 +419,10 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, tmpg->size=tmpg->dim.total_cnt*tmpc->size; if (tmphg) tmphg->size=tmpg->size; - if (cc->flags&CCF_AOT_COMPILE) { - if (sys_var_init_flag) - for (k=0;ksize;k++) - AOTStoreCodeU8(cc,sys_var_init_val); - else - for (k=0;ksize;k++) - AOTStoreCodeU8(cc,0); - } else + if (cc->flags&CCF_AOT_COMPILE) + for (k=0;ksize;k++) + AOTStoreCodeU8(cc,0); + else if (sys_var_init_flag) MemSet(tmpg->data_addr,sys_var_init_val,k); LexPopRestore(cc); @@ -440,7 +432,7 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, PrsGlblInit(cc,tmpg,2); if (cc->flags&CCF_AOT_COMPILE) for (k=0;ksize;k++) - AOTStoreCodeU8At(cc,tmpg->data_addr_ip+k,tmpg->data_addr[k]); + AOTStoreCodeU8At(cc,tmpg->data_addr_rip+k,tmpg->data_addr[k]); LexPopNoRestore(cc); } if (has_alias) { @@ -450,7 +442,7 @@ U0 PrsGlblVarLst(CCmpCtrl *cc,I64 saved_mode,CHashClass *saved_tmpc, } tmpex(CHashGlblVar *)->flags|=GVF_ALIAS; tmpex(CHashGlblVar *)->data_addr=tmpg->data_addr; - tmpex(CHashGlblVar *)->data_addr_ip=tmpg->data_addr_ip; + tmpex(CHashGlblVar *)->data_addr_rip=tmpg->data_addr_rip; } if (cc->token==',') Lex(cc); diff --git a/Compiler/PrsVar.HC b/Compiler/PrsVar.HC index 84ecb83..2364d2e 100644 --- a/Compiler/PrsVar.HC +++ b/Compiler/PrsVar.HC @@ -1,5 +1,5 @@ U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc,CArrayDim *tmpad, - U8 *data_addr_ip,U8 **_base,Bool data_heap,I64 pass) + U8 *data_addr_rip,U8 **_base,Bool data_heap,I64 pass) { U8 *dst=*_dst,*machine_code; I64 i,j,r,old_flags,type,size; @@ -19,7 +19,7 @@ U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc,CArrayDim *tmpad, Lex(cc); while (tmpm) { PrsVarInit2(cc,&dst,tmpm->member_class,&tmpm->dim, - data_addr_ip,_base,data_heap,pass); + data_addr_rip,_base,data_heap,pass); if (cc->token==',') Lex(cc); tmpm=tmpm->next; @@ -43,8 +43,8 @@ U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc,CArrayDim *tmpad, tmpa->next=aotc->abss; tmpa->type=AAT_ADD_U64; aotc->abss=tmpa; - tmpa->ip=data_addr_ip+dst-*_base; - *dst(I64 *)=aotc->ip; + tmpa->rip=data_addr_rip+dst-*_base; + *dst(I64 *)=aotc->rip; for (j=0;jtype=IET_MAIN; - tmpie->ip=cc->aotc->ip; + tmpie->rip=cc->aotc->rip; QueIns(tmpie,cc->aot->last_ie); for (i=0;itoken!='}') { tmpvi=MAlloc(offset(CVI2.base)+tmpad1->total_cnt*tmpc->size); _b=&tmpvi->base; - PrsVarInit2(cc,&_b,tmpc,tmpad1,data_addr_ip,_base,data_heap,pass); + PrsVarInit2(cc,&_b,tmpc,tmpad1,data_addr_rip,_base,data_heap,pass); QueIns(tmpvi,head.last); if (cc->token==',') Lex(cc); @@ -189,7 +189,7 @@ U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc, *_dst=_b; } else { for (i=0;icnt;i++) { - PrsVarInit2(cc,_dst,tmpc,tmpad1,data_addr_ip,_base,data_heap,pass); + PrsVarInit2(cc,_dst,tmpc,tmpad1,data_addr_rip,_base,data_heap,pass); if (tmpad1->cnt>1 && cc->token==',') Lex(cc); } @@ -198,7 +198,7 @@ U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tmpc, } } } else { - PrsVarInit(cc,_dst,tmpc,tmpad1,data_addr_ip,_base,data_heap,pass); + PrsVarInit(cc,_dst,tmpc,tmpad1,data_addr_rip,_base,data_heap,pass); LexPush(cc); } } @@ -207,7 +207,7 @@ U0 PrsGlblInit(CCmpCtrl *cc,CHashGlblVar *tmpg,I64 pass) { U8 *dst=tmpg->data_addr; PrsVarInit2(cc,&dst,tmpg->var_class,&tmpg->dim, - tmpg->data_addr_ip,&tmpg->data_addr, + tmpg->data_addr_rip,&tmpg->data_addr, Bt(&cc->opts,OPTf_GLBLS_ON_DATA_HEAP)|| Bt(&cc->flags,CCf_AOT_COMPILE),pass); } @@ -223,7 +223,7 @@ U0 PrsStaticInit(CCmpCtrl *cc,CMemberLst *tmpm,I64 pass) COCPush(cc); COCInit(cc); } - PrsVarInit2(cc,&dst,tmpc,&tmpm->dim,tmpm->static_data_ip, + PrsVarInit2(cc,&dst,tmpc,&tmpm->dim,tmpm->static_data_rip, &tmpm->static_data,Bt(&cc->flags,CCf_AOT_COMPILE),pass); if (cc->flags&CCF_AOT_COMPILE && pass==2) { if (cc->coc.coc_head.next!=&cc->coc.coc_head) { @@ -232,7 +232,7 @@ U0 PrsStaticInit(CCmpCtrl *cc,CMemberLst *tmpm,I64 pass) if (pass==2) { tmpie=CAlloc(sizeof(CAOTImportExport)); tmpie->type=IET_MAIN; - tmpie->ip=cc->aotc->ip; + tmpie->rip=cc->aotc->rip; QueIns(tmpie,cc->aot->last_ie); for (i=0;iflags|=CCF_DONT_MAKE_RES; if (mode.u8[1]==PRS1B_CLASS) - cc->flags|=CCF_CLASS_IP; + cc->flags|=CCF_CLASS_DOL_OFFSET; if ((mode.u8[1]!=PRS1B_LOCAL_VAR && mode.u8[1]!=PRS1B_STATIC_LOCAL_VAR || mode&PRSF_UNION) && (cc->token=='(' || cc->token=='{')) Lex(cc); while (TRUE) { + if (mode&PRSF_UNION) + cc->class_dol_offset=union_base; + else + cc->class_dol_offset=tmpc->size; while (cc->token==';') Lex(cc); - if (mode&PRSF_UNION) - cc->class_ip=union_base; - else - cc->class_ip=tmpc->size; while (cc->token=='$$') { if (Lex(cc)!='=') //skip $$ LexExcept(cc,"Expecting '=' at "); Lex(cc); //skip = - cc->class_ip=LexExpression(cc); - if (-cc->class_ip>tmpc->neg_offset) - tmpc->neg_offset=-cc->class_ip; + cc->class_dol_offset=LexExpression(cc); + if (-cc->class_dol_offset>tmpc->neg_offset) + tmpc->neg_offset=-cc->class_dol_offset; if (mode&PRSF_UNION) - union_base=cc->class_ip; + union_base=cc->class_dol_offset; else - tmpc->size=cc->class_ip; + tmpc->size=cc->class_dol_offset; if (cc->token!=';') LexExcept(cc,"Missing ';' at"); Lex(cc); //skip ; @@ -553,15 +553,10 @@ pvl_restart3: else tmpm->static_data=MAlloc(k,Fs->code_heap); if (cc->flags&CCF_AOT_COMPILE) { - tmpm->static_data_ip=cc->aotc->ip; + tmpm->static_data_rip=cc->aotc->rip; k>>=3; - if (sys_var_init_flag) { - k<<=3; - while (k--) - AOTStoreCodeU8(cc,sys_var_init_val); - } else - while (k--) - AOTStoreCodeU64(cc,0); + while (k--) + AOTStoreCodeU64(cc,0); } else if (sys_var_init_flag) MemSet(tmpm->static_data,sys_var_init_val,k); @@ -579,13 +574,8 @@ pvl_restart3: k=(i+7)&~7; if (cc->flags&CCF_AOT_COMPILE) { k>>=3; - if (sys_var_init_flag) { - k<<=3; - while (k--) - AOTStoreCodeU8(cc,sys_var_init_val); - } else - while (k--) - AOTStoreCodeU64(cc,0); + while (k--) + AOTStoreCodeU64(cc,0); } else if (sys_var_init_flag) MemSet(tmpm->static_data,sys_var_init_val,k); @@ -597,7 +587,7 @@ pvl_restart3: LexPopNoRestore(cc); if (cc->flags&CCF_AOT_COMPILE) for (k=0;kstatic_data_ip+k, + AOTStoreCodeU8At(cc,tmpm->static_data_rip+k, tmpm->static_data[k]); tmpm->use_cnt=0; cc->flags|=CCF_DONT_MAKE_RES; @@ -729,6 +719,6 @@ pvl_restart3: } } pvl_done: - cc->flags=cc->flags&~(CCF_CLASS_IP|CCF_DONT_MAKE_RES)| - old_flags& (CCF_CLASS_IP|CCF_DONT_MAKE_RES); + cc->flags=cc->flags&~(CCF_CLASS_DOL_OFFSET|CCF_DONT_MAKE_RES)| + old_flags&(CCF_CLASS_DOL_OFFSET|CCF_DONT_MAKE_RES); } diff --git a/Compiler/UAsm.HC b/Compiler/UAsm.HC index f712957..36b3452 100644 --- a/Compiler/UAsm.HC +++ b/Compiler/UAsm.HC @@ -63,9 +63,9 @@ U0 DumpUAsmTables() } */ -CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) +CInst *InstEntryFind(U8 *rip,I64 opsize,I64 seg_size) {//Binary Search - I64 i,j,n,m,k,a1,a2,o1,o2,oc_cnt; + I64 i,j,n,m,k,arg1,arg2,o1,o2,oc_cnt; CInst *tmpins,**table; i=0; if (seg_size==64) { @@ -82,13 +82,13 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) m=0; n=0; while (TRUE) { //ief_compare_start - a1=tmpins->arg1; - a2=tmpins->arg2; + arg1=tmpins->arg1; + arg2=tmpins->arg2; oc_cnt=tmpins->opcode_cnt; if (tmpins->flags&IEF_STI_LIKE) oc_cnt--; if (nopcode_cnt-1 && tmpins->flags & IEF_PLUS_OPCODE) o1&=-8; o2=tmpins->opcode[n++]; @@ -97,9 +97,10 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) } else switch [tmpins->uasm_slash_val] { case 0...7: - if (!(m=ip[n]>>3&7-tmpins->slash_val)) { - if ((Bt(&uasm.mem_arg_mask,a1) || Bt(&uasm.mem_arg_mask,a2)) && - ip[n]&0xC0==0xC0) { + if (!(m=rip[n]>>3&7-tmpins->slash_val)) { + if ((Bt(&uasm.mem_arg_mask,arg1) || + Bt(&uasm.mem_arg_mask,arg2)) && + rip[n]&0xC0==0xC0) { m=1; goto ief_compare_done; } @@ -114,25 +115,28 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) goto ief_compare_done; } } - if (opsize==64||a1==ARGT_M64||a2==ARGT_M64) { - if (!Bt(&uasm.ins64_arg_mask,a1)&& - !Bt(&uasm.ins64_arg_mask,a2)&&!(tmpins->flags&IEF_48_REX)) + if (opsize==64||arg1==ARGT_M64||arg2==ARGT_M64) { + if (!Bt(&uasm.ins64_arg_mask,arg1)&& + !Bt(&uasm.ins64_arg_mask,arg2)&& + !(tmpins->flags&IEF_48_REX)) m=1; } else { - if (Bt(&uasm.ins64_arg_mask,a1)||Bt(&uasm.ins64_arg_mask,a2) || + if (Bt(&uasm.ins64_arg_mask,arg1)|| + Bt(&uasm.ins64_arg_mask,arg2) || tmpins->flags&IEF_48_REX) m=-1; } - } else if ((Bt(&uasm.mem_arg_mask,a1)||Bt(&uasm.mem_arg_mask,a2)) && - ip[n]&0xC0==0xC0) + } else if ((Bt(&uasm.mem_arg_mask,arg1)|| + Bt(&uasm.mem_arg_mask,arg2)) && + rip[n]&0xC0==0xC0) m=1; goto ief_compare_done; case SV_I_REG: - m=ip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3; + m=rip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3; goto ief_compare_done; case SV_STI_LIKE: - if (!(m=ip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3)) - m=ip[n]-tmpins->opcode[tmpins->opcode_cnt-1]; + if (!(m=rip[n]>>3-tmpins->opcode[tmpins->opcode_cnt-1]>>3)) + m=rip[n]-tmpins->opcode[tmpins->opcode_cnt-1]; goto ief_compare_done; case SV_R_REG: case SV_NONE: @@ -148,18 +152,21 @@ CInst *InstEntryFind(U8 *ip,I64 opsize,I64 seg_size) goto ief_compare_done; } } - if (opsize==64 || a1==ARGT_M64 || a2==ARGT_M64) { - if (!Bt(&uasm.ins64_arg_mask,a1) &&!Bt(&uasm.ins64_arg_mask,a2) && - !(tmpins->flags&IEF_48_REX)&& !(a2==ARGT_NONE && - (ARGT_UIMM8<=a1<=ARGT_UIMM64 || ARGT_IMM8<=a1<=ARGT_IMM64))) + if (opsize==64 || arg1==ARGT_M64 || arg2==ARGT_M64) { + if (!Bt(&uasm.ins64_arg_mask,arg1) && + !Bt(&uasm.ins64_arg_mask,arg2) && + !(tmpins->flags&IEF_48_REX)&& !(arg2==ARGT_NONE && + (ARGT_UIMM8<=arg1<=ARGT_UIMM64 || + ARGT_IMM8<=arg1<=ARGT_IMM64))) m=1; else if (tmpins->arg2==ARGT_IMM64 || tmpins->arg2==ARGT_UIMM64) { - if (a2!=ARGT_IMM64&&a2!=ARGT_UIMM64) + if (arg2!=ARGT_IMM64&&arg2!=ARGT_UIMM64) m=1; - } else if (a2==ARGT_IMM64||a2==ARGT_UIMM64) + } else if (arg2==ARGT_IMM64||arg2==ARGT_UIMM64) m=-1; } else { - if (Bt(&uasm.ins64_arg_mask,a1) || Bt(&uasm.ins64_arg_mask,a2) || + if (Bt(&uasm.ins64_arg_mask,arg1) || + Bt(&uasm.ins64_arg_mask,arg2) || tmpins->flags&IEF_48_REX) m=-1; } @@ -235,19 +242,20 @@ U0 UAsmHashLoad() QSortI64(uasm.table_64 ,uasm.table_64_entries ,&InstEntriesCompare); } -U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) +U0 Ui(U8 *buf,U8 **_rip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) {//Unassembles one inst I64 i,disp,imm,opsize,opadd, - a1,a2,reloced_a1,reloced_a2, - a1_size=0,a2_size=0,reloced_a1_size,reloced_a2_size, + arg1,arg2,reloced_arg1,reloced_arg2, + arg1_size=0,arg2_size=0,reloced_arg1_size,reloced_arg2_size, ModrM=-1,SIB=-1,scale,r1,r2, Mod=-1,RM1=-1,RM2=-1,REX=-1,REX_r=0,REX_x=0,REX_b=0; Bool cont; CInst *tmpins,*tmpins2; CHashOpcode *tmpo; - U8 *ip=*_ip,*ptr,*reloced_a1_st,*reloced_a2_st, + U8 *rip=*_rip,*ptr,*reloced_arg1_st,*reloced_arg2_st, *bin_data_area1,*bin_data_area2, - line1[512],line2[512],buf2[512],a1_st[512],a2_st[512],seg_overrides[32]; + line1[512],line2[512],buf2[512],arg1_st[512], + arg2_st[512],seg_overrides[32]; if (_jmp_dst) *_jmp_dst=-1; if (seg_size==16) { @@ -260,28 +268,28 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) opsize=32; opadd=64; } - *a1_st=0; - *a2_st=0; - if (!IsRaw && PutSrcLink(ip,1,line1)) + *arg1_st=0; + *arg2_st=0; + if (!IsRaw && PutSrcLink(rip,1,line1)) CatPrint(line1,"\n"); else *line1=0; - StrPrint(line1+StrLen(line1),"%24tp ",ip); + StrPrint(line1+StrLen(line1),"%24tp ",rip); bin_data_area1=line1+StrLen(line1); for (i=0;i<6;i++) - CatPrint(line1,"%02X",ip[i]); + CatPrint(line1,"%02X",rip[i]); CatPrint(line1," "); - StrPrint(line2,"%24tp ",ip+6); + StrPrint(line2,"%24tp ",rip+6); bin_data_area2=line2+StrLen(line2); for (i=6;i<12;i++) - CatPrint(line2,"%02X",ip[i]); + CatPrint(line2,"%02X",rip[i]); *seg_overrides=0; cont=TRUE; while (TRUE) { - switch (*ip) { + switch (*rip) { case 0x2E: if (StrLen(seg_overrides)<24) CatPrint(seg_overrides,"CS:"); break; case 0x36: if (StrLen(seg_overrides)<24) @@ -308,7 +316,7 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) break; case 0x40...0x4F: if (seg_size==64) { - REX=*ip; + REX=*rip; if (REX>=0x48) opsize=64; REX_b=Bt(&REX,0)<<3; @@ -320,148 +328,148 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) cont=FALSE; } if (cont) - ip++; + rip++; else break; } - tmpins=InstEntryFind(ip,opsize,seg_size); + tmpins=InstEntryFind(rip,opsize,seg_size); if (opsize==32 && seg_size==64) { - tmpins2=InstEntryFind(ip,64,seg_size); + tmpins2=InstEntryFind(rip,64,seg_size); if (tmpins2!=tmpins && tmpins2->flags&IEF_REX_ONLY_R8_R15 || - tmpins2->flags&IEF_REX_XOR_LIKE&& ip[1]>>3&7==ip[1]&7) + tmpins2->flags&IEF_REX_XOR_LIKE&& rip[1]>>3&7==rip[1]&7) tmpins=tmpins2; } - ip+=tmpins->opcode_cnt; + rip+=tmpins->opcode_cnt; tmpo=tmpins(U8 *)-tmpins->ins_entry_num*sizeof(CInst) -offset(CHashOpcode.ins); if (just_ins) *line1=0; CatPrint(line1,tmpo->str); - a1=tmpins->arg1; - a2=tmpins->arg2; + arg1=tmpins->arg1; + arg2=tmpins->arg2; - if (a1_size=tmpins->size1) { - if (Bt(&uasm.signed_arg_mask,a1)) - CatPrint(a1_st,"I%d ",a1_size); + if (arg1_size=tmpins->size1) { + if (Bt(&uasm.signed_arg_mask,arg1)) + CatPrint(arg1_st,"I%d ",arg1_size); else - CatPrint(a1_st,"U%d ",a1_size); + CatPrint(arg1_st,"U%d ",arg1_size); } - if (a2_size=tmpins->size2) { - if (Bt(&uasm.signed_arg_mask,a2)) - CatPrint(a2_st,"I%d ",a2_size); + if (arg2_size=tmpins->size2) { + if (Bt(&uasm.signed_arg_mask,arg2)) + CatPrint(arg2_st,"I%d ",arg2_size); else - CatPrint(a2_st,"U%d ",a2_size); + CatPrint(arg2_st,"U%d ",arg2_size); } if (tmpins->flags & IEF_PLUS_OPCODE) { - ip--; - RM1=*ip++ - tmpins->opcode[tmpins->opcode_cnt-1]+REX_b; + rip--; + RM1=*rip++ - tmpins->opcode[tmpins->opcode_cnt-1]+REX_b; ptr=NULL; - if (ARGT_R8<=a1<=ARGT_R64) { - if (a1_size==8) { + if (ARGT_R8<=arg1<=ARGT_R64) { + if (arg1_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (a1_size==16) + } else if (arg1_size==16) ptr="ST_U16_REGS"; - else if (a1_size==32) + else if (arg1_size==32) ptr="ST_U32_REGS"; - else if (a1_size==64) + else if (arg1_size==64) ptr="ST_U64_REGS"; if (ptr) - CatPrint(a1_st,"%Z",RM1,ptr); + CatPrint(arg1_st,"%Z",RM1,ptr); } else { - if (a2_size==8) { + if (arg2_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (a2_size==16) + } else if (arg2_size==16) ptr="ST_U16_REGS"; - else if (a2_size==32) + else if (arg2_size==32) ptr="ST_U32_REGS"; - else if (a2_size==64) + else if (arg2_size==64) ptr="ST_U64_REGS"; if (ptr) - CatPrint(a2_st,"%Z",RM1,ptr); + CatPrint(arg2_st,"%Z",RM1,ptr); } } - if (ARGT_RM8<=a1<=ARGT_RM64 || ARGT_M8<=a1<=ARGT_M64 || - ARGT_RM8<=a2<=ARGT_RM64 || ARGT_M8<=a2<=ARGT_M64) { - if (ARGT_RM8<=a2<=ARGT_RM64 || ARGT_M8<=a2<=ARGT_M64) { - reloced_a1=a2; - reloced_a2=a1; - reloced_a1_size=a2_size; - reloced_a2_size=a1_size; - reloced_a1_st=a2_st; - reloced_a2_st=a1_st; + if (ARGT_RM8<=arg1<=ARGT_RM64 || ARGT_M8<=arg1<=ARGT_M64 || + ARGT_RM8<=arg2<=ARGT_RM64 || ARGT_M8<=arg2<=ARGT_M64) { + if (ARGT_RM8<=arg2<=ARGT_RM64 || ARGT_M8<=arg2<=ARGT_M64) { + reloced_arg1=arg2; + reloced_arg2=arg1; + reloced_arg1_size=arg2_size; + reloced_arg2_size=arg1_size; + reloced_arg1_st=arg2_st; + reloced_arg2_st=arg1_st; } else { - reloced_a1=a1; - reloced_a2=a2; - reloced_a1_size=a1_size; - reloced_a2_size=a2_size; - reloced_a1_st=a1_st; - reloced_a2_st=a2_st; + reloced_arg1=arg1; + reloced_arg2=arg2; + reloced_arg1_size=arg1_size; + reloced_arg2_size=arg2_size; + reloced_arg1_st=arg1_st; + reloced_arg2_st=arg2_st; } - CatPrint(reloced_a1_st,seg_overrides); - ModrM=*ip++; + CatPrint(reloced_arg1_st,seg_overrides); + ModrM=*rip++; Mod=ModrM>>6 & 3; RM1=ModrM & 7+REX_b; RM2=ModrM>>3 & 7+REX_r; if (Mod<3 && RM1&7==4) - SIB=*ip++; + SIB=*rip++; if (Mod==1) { - disp=*ip(U8 *)++; - CatPrint(reloced_a1_st,"%02X",disp); + disp=*rip(U8 *)++; + CatPrint(reloced_arg1_st,"%02X",disp); } else if (Mod==2) { - disp=*ip(U32 *)++; - CatPrint(reloced_a1_st,"%08X",disp); + disp=*rip(U32 *)++; + CatPrint(reloced_arg1_st,"%08X",disp); } if (tmpins->slash_val<8) RM2=-1; else { ptr=NULL; - if (reloced_a2==ARGT_SREG) { + if (reloced_arg2==ARGT_SREG) { if (RM2<=5) ptr="ST_SEG_REGS"; - } else if (!(ARGT_IMM8<=reloced_a2<=ARGT_IMM64) && - !(ARGT_UIMM8<=reloced_a2<=ARGT_UIMM64)) { - if (reloced_a2_size==8) { + } else if (!(ARGT_IMM8<=reloced_arg2<=ARGT_IMM64) && + !(ARGT_UIMM8<=reloced_arg2<=ARGT_UIMM64)) { + if (reloced_arg2_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (reloced_a2_size==16) + } else if (reloced_arg2_size==16) ptr="ST_U16_REGS"; - else if (reloced_a2_size==32) + else if (reloced_arg2_size==32) ptr="ST_U32_REGS"; - else if (reloced_a2_size==64) + else if (reloced_arg2_size==64) ptr="ST_U64_REGS"; } if (ptr) - CatPrint(reloced_a2_st,"%Z",RM2,ptr); + CatPrint(reloced_arg2_st,"%Z",RM2,ptr); } if (RM1&7==5 && !Mod) { - disp=*ip(I32 *)++; + disp=*rip(I32 *)++; if (seg_size==64) { - disp+=ip; - if (reloced_a2==ARGT_IMM8 || reloced_a2==ARGT_UIMM8) + disp+=rip; + if (reloced_arg2==ARGT_IMM8 || reloced_arg2==ARGT_UIMM8) disp++; - else if (reloced_a2==ARGT_IMM16 || reloced_a2==ARGT_UIMM16) + else if (reloced_arg2==ARGT_IMM16 || reloced_arg2==ARGT_UIMM16) disp+=2; - else if (reloced_a2==ARGT_IMM32 || reloced_a2==ARGT_UIMM32) + else if (reloced_arg2==ARGT_IMM32 || reloced_arg2==ARGT_UIMM32) disp+=4; - else if (reloced_a2==ARGT_IMM64 || reloced_a2==ARGT_UIMM64) + else if (reloced_arg2==ARGT_IMM64 || reloced_arg2==ARGT_UIMM64) disp+=8; } - CatPrint(reloced_a1_st,"[%X]",disp); + CatPrint(reloced_arg1_st,"[%X]",disp); RM1=-1; } else { if (Mod<3) { @@ -483,12 +491,12 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) else ptr="ST_U32_REGS"; if (r1==REG_RBP && !Mod) { - disp=*ip(U32 *)++; - CatPrint(reloced_a1_st,"%08X[%Z*%d]",disp,r2,ptr,scale); + disp=*rip(U32 *)++; + CatPrint(reloced_arg1_st,"%08X[%Z*%d]",disp,r2,ptr,scale); } else if (r2==4) - CatPrint(reloced_a1_st,"[%Z]",r1,ptr); + CatPrint(reloced_arg1_st,"[%Z]",r1,ptr); else - CatPrint(reloced_a1_st,"[%Z+%Z*%d]",r1,ptr,r2,ptr,scale); + CatPrint(reloced_arg1_st,"[%Z+%Z*%d]",r1,ptr,r2,ptr,scale); } else { if (opadd==16) ptr="ST_U16_REGS"; @@ -496,153 +504,153 @@ U0 Ui(U8 *buf,U8 **_ip,I64 seg_size=64,I64 *_jmp_dst=NULL,Bool just_ins=FALSE) ptr="ST_U32_REGS"; else ptr="ST_U64_REGS"; - CatPrint(reloced_a1_st,"[%Z]",RM1,ptr); + CatPrint(reloced_arg1_st,"[%Z]",RM1,ptr); } } else { ptr=NULL; - if (reloced_a1_size==8) { + if (reloced_arg1_size==8) { if (REX!=-1) ptr="ST_U8_REX_REGS"; else ptr="ST_U8_REGS"; - } else if (reloced_a1_size==16) + } else if (reloced_arg1_size==16) ptr="ST_U16_REGS"; - else if (reloced_a1_size==32) + else if (reloced_arg1_size==32) ptr="ST_U32_REGS"; - else if (reloced_a1_size==64) + else if (reloced_arg1_size==64) ptr="ST_U64_REGS"; if (ptr) - CatPrint(reloced_a1_st,DefineSub(RM1,ptr)); + CatPrint(reloced_arg1_st,DefineSub(RM1,ptr)); } } } - switch (a1) { + switch (arg1) { case ARGT_IMM8: case ARGT_UIMM8: - imm=*ip(U8 *)++; - CatPrint(a1_st,"%02X",imm); + imm=*rip(U8 *)++; + CatPrint(arg1_st,"%02X",imm); if (tmpins->opcode[0]==0xCD && (ptr=DefineSub(imm,"ST_INT_NAMES"))) - CatPrint(a1_st," %s",ptr); + CatPrint(arg1_st," %s",ptr); break; case ARGT_IMM16: case ARGT_UIMM16: - CatPrint(a1_st,"%04X",*ip(U16 *)++); + CatPrint(arg1_st,"%04X",*rip(U16 *)++); break; case ARGT_IMM32: case ARGT_UIMM32: - CatPrint(a1_st,"%08X",*ip(U32 *)++); + CatPrint(arg1_st,"%08X",*rip(U32 *)++); break; case ARGT_IMM64: case ARGT_UIMM64: - CatPrint(a1_st,"%016X",*ip(I64 *)++); + CatPrint(arg1_st,"%016X",*rip(I64 *)++); break; start: case ARGT_REL8: - disp=*ip(I8 *)++; + disp=*rip(I8 *)++; break; case ARGT_REL16: - disp=*ip(I16 *)++; + disp=*rip(I16 *)++; break; case ARGT_REL32: - disp=*ip(I32 *)++; + disp=*rip(I32 *)++; break; end: - disp+=ip; + disp+=rip; if (IsDbgMode) - CatPrint(a1_st,"%p ",disp); + CatPrint(arg1_st,"%p ",disp); else if (PutSrcLink(disp,512,buf2)) - CatPrint(a1_st,"%s ",buf2); + CatPrint(arg1_st,"%s ",buf2); else - CatPrint(a1_st,"%P ",disp); + CatPrint(arg1_st,"%P ",disp); if (_jmp_dst) *_jmp_dst=disp; break; case ARGT_MOFFS8...ARGT_MOFFS64: - CatPrint(a1_st,seg_overrides); - if (a1_size==8) - disp=*ip(U8 *)++; + CatPrint(arg1_st,seg_overrides); + if (arg1_size==8) + disp=*rip(U8 *)++; else if (opadd==16) - disp=*ip(U16 *)++; + disp=*rip(U16 *)++; else - disp=*ip(U32 *)++; - CatPrint(a1_st,"[%X]",disp); + disp=*rip(U32 *)++; + CatPrint(arg1_st,"[%X]",disp); break; case ARGT_AL ... ARGT_DX: case ARGT_SS ... ARGT_ST0: - CatPrint(a1_st,"%z",a1-ARGT_AL, + CatPrint(arg1_st,"%z",arg1-ARGT_AL, "AL\0AX\0EAX\0RAX\0CL\0DX\0 \0 \0SS\0DS\0ES\0FS\0GS\0CS\0ST0\0"); break; case ARGT_STI: - ip--; - CatPrint(a1_st,"%Z",*ip++ - tmpins->opcode[tmpins->opcode_cnt-1], + rip--; + CatPrint(arg1_st,"%Z",*rip++ - tmpins->opcode[tmpins->opcode_cnt-1], "ST_FSTK_REGS"); break; } - switch (a2) { + switch (arg2) { case ARGT_IMM8: case ARGT_UIMM8: - CatPrint(a2_st,"%02X",*ip(U8 *)++); + CatPrint(arg2_st,"%02X",*rip(U8 *)++); break; case ARGT_IMM16: case ARGT_UIMM16: - CatPrint(a2_st,"%04X",*ip(U16 *)++); + CatPrint(arg2_st,"%04X",*rip(U16 *)++); break; case ARGT_IMM32: case ARGT_UIMM32: - CatPrint(a2_st,"%08X",*ip(U32 *)++); + CatPrint(arg2_st,"%08X",*rip(U32 *)++); break; case ARGT_IMM64: case ARGT_UIMM64: - CatPrint(a2_st,"%016X",*ip(I64 *)++); + CatPrint(arg2_st,"%016X",*rip(I64 *)++); break; case ARGT_MOFFS8...ARGT_MOFFS64: - CatPrint(a2_st,seg_overrides); - if (a2_size==8) - disp=*ip(U8 *)++; + CatPrint(arg2_st,seg_overrides); + if (arg2_size==8) + disp=*rip(U8 *)++; else if (opadd==16) - disp=*ip(U16 *)++; + disp=*rip(U16 *)++; else - disp=*ip(U32 *)++; - CatPrint(a2_st,"[%X]",disp); + disp=*rip(U32 *)++; + CatPrint(arg2_st,"[%X]",disp); break; case ARGT_AL ... ARGT_DX: case ARGT_SS ... ARGT_ST0: - CatPrint(a2_st,"%z",a2-ARGT_AL, + CatPrint(arg2_st,"%z",arg2-ARGT_AL, "AL\0AX\0EAX\0RAX\0CL\0DX\0 \0 \0SS\0DS\0ES\0FS\0GS\0CS\0ST0\0"); break; case ARGT_STI: - ip--; - CatPrint(a2_st,"%Z",*ip++ -tmpins->opcode[tmpins->opcode_cnt-1], + rip--; + CatPrint(arg2_st,"%Z",*rip++ -tmpins->opcode[tmpins->opcode_cnt-1], "ST_FSTK_REGS"); break; } if (tmpins->flags&IEF_ENDING_ZERO) - ip++; + rip++; - if (*a1_st) - CatPrint(line1,"\t%s",a1_st); - if (*a2_st) - CatPrint(line1,",%s",a2_st); + if (*arg1_st) + CatPrint(line1,"\t%s",arg1_st); + if (*arg2_st) + CatPrint(line1,",%s",arg2_st); CatPrint(line1,"\n"); CatPrint(line2,"\n"); if (!just_ins) { - for (i=ip-(*_ip)(I64);i<6;i++) { + for (i=rip-(*_rip)(I64);i<6;i++) { bin_data_area1[i<<1]=CH_SPACE; bin_data_area1[i<<1+1]=CH_SPACE; } - for (i=ip-(*_ip)(I64);i<12;i++) { + for (i=rip-(*_rip)(I64);i<12;i++) { bin_data_area2[(i-6)<<1]=CH_SPACE; bin_data_area2[(i-6)<<1+1]=CH_SPACE; } } StrCpy(buf,line1); - if (!just_ins && ip-(*_ip)(I64)>6) + if (!just_ins && rip-(*_rip)(I64)>6) CatPrint(buf,line2); - *_ip=ip; + *_rip=rip; } -U8 *U(U8 *ip,I64 cnt=20,I64 seg_size=64) +U8 *U(U8 *rip,I64 cnt=20,I64 seg_size=64) {//Unassembles a num of insts. I64 i; U8 buf[1024]; @@ -650,22 +658,22 @@ U8 *U(U8 *ip,I64 cnt=20,I64 seg_size=64) PrintWarn("16-bit unassembly is not well supported.\n"); "$$HL,1$$"; for (i=0;ifilename.name='C'; - "\n\n1) TAD\n2) DLC\n\n"; - switch (GetI64("Staff Member Number:")) { - case 1: - RegWriteBranch("TempleOS/Staff", - "#define PERSONAL_INITIALS \"TAD\"\n" - "#define MACHINE_CFG %d\n", - GetI64("Machine Cfg Number:") - ); - break; - case 2: - RegWriteBranch("TempleOS/Staff", - "#define PERSONAL_INITIALS \"DLC\"\n" - "#define MACHINE_CFG 0\n"); - break; - } - Del("C:/Home/DoDistro.HC.Z"); - Del("D:/Home/DoDistro.HC.Z"); - "\n\n\nAfter Reboot be sure to run MakeDistrosAndBackUp.\n\n"; - PressAKey; - Reboot; //Too dangerous for amateurs until reboot. - } - } - break; - } - if (FileFind("D:/Tmp/Logs/access.log")) { - In("\n\n%C",CH_ESC); - RunFile("::/Demo/WebLogDemo/WebLogRep",, - "D:/Tmp/Logs/*.log","D:/Home/WebLogRep.DD"); - Del("D:/Tmp/Logs/*.log"); - } - if (tos_timestamp) - Blog(TRUE); -} - -DoOnce; diff --git a/Demo/AcctExample/HomeKeyPlugIns.HC b/Demo/AcctExample/HomeKeyPlugIns.HC index f7eef5e..40e7add 100644 --- a/Demo/AcctExample/HomeKeyPlugIns.HC +++ b/Demo/AcctExample/HomeKeyPlugIns.HC @@ -63,7 +63,7 @@ Bool MyPutKey(I64 ch,I64 sc) //You can customize keys. This routine //is called before the main editor - //key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). + //key hndlr $LK,"DocPutKey",A="MN:DocPutKey"$(). //You can intercept any key. //Return TRUE if you completely @@ -146,17 +146,10 @@ Bool MyPutKey(I64 ch,I64 sc) } return TRUE; case SC_F7: - if (sc&SCF_SHIFT) { - if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /NISTGodMisc2"); - else - NISTGodMisc2; - } else { - if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /God Misc"); - else - GodMisc; - } + if (sc&SCF_KEY_DESC) + KeyDescSet("Cmd /God Misc"); + else + GodMisc; return TRUE; case SC_F8: if (sc&SCF_SHIFT) { @@ -298,15 +291,15 @@ Bool MyPutKey(I64 ch,I64 sc) return TRUE; case 'p': if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /JukeBox(Home/Sup1)"); + KeyDescSet("Cmd /JukeBox(Home/Sup1Hymns)"); else - JukeBox("~/Sup1/Sup1Psalmody"); + JukeBox("~/Sup1/Sup1Hymns"); return TRUE; case 'P': if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /JukeBox(Examples)"); + KeyDescSet("Cmd /JukeBox(Home/Sup1Songs)"); else - JukeBox("::/Apps/Psalmody/Examples"); + JukeBox("~/Sup1/Sup1Songs"); return TRUE; } } diff --git a/Demo/AcctExample/HomeLocalize.HC b/Demo/AcctExample/HomeLocalize.HC index 9c5839b..f134007 100644 --- a/Demo/AcctExample/HomeLocalize.HC +++ b/Demo/AcctExample/HomeLocalize.HC @@ -11,11 +11,11 @@ local_time_offset=-8*60*60*CDATE_FREQ; //Pacific // Remember you can set the time in the BIOS. //$AN,"",A="mouse_move_scale"$adjust these to set mouse move scale -mouse.scale.x=0.5; -mouse.scale.y=0.5; -mouse.scale.z=5.0; //wheel +ms_hard.scale.x=0.5; +ms_hard.scale.y=0.5; +ms_hard.scale.z=5.0; //wheel //don't change these -mouse.prescale.x=mouse.pos.x/mouse.scale.x; -mouse.prescale.y=mouse.pos.y/mouse.scale.y; -mouse.prescale.z=mouse.pos.z/mouse.scale.z; +ms_hard.prescale.x=ms_hard.pos.x/ms_hard.scale.x; +ms_hard.prescale.y=ms_hard.pos.y/ms_hard.scale.y; +ms_hard.prescale.z=ms_hard.pos.z/ms_hard.scale.z; diff --git a/Demo/AcctExample/HomeSys.HC b/Demo/AcctExample/HomeSys.HC index 0096ea5..3e5ab90 100644 --- a/Demo/AcctExample/HomeSys.HC +++ b/Demo/AcctExample/HomeSys.HC @@ -30,7 +30,7 @@ U0 StartUpTasks() WinToTop(user1); WinTileVert; "Boot Time:%7.3fs\n",tS; - XTalk(user1,"Cd;#include \"DoOnce\";\n"); + XTalk(user1,"Cd;#include \"Once\";\n"); Silent; ACInit("/*;!*/Bible.TXT*;!*.TXT"); //No Bible, no uncompressed DD. Silent(OFF); diff --git a/Demo/AcctExample/HomeWrappers.HC b/Demo/AcctExample/HomeWrappers.HC index c16451f..0ce474e 100644 --- a/Demo/AcctExample/HomeWrappers.HC +++ b/Demo/AcctExample/HomeWrappers.HC @@ -1,7 +1,7 @@ #help_index "Cmd Line (Typically)" #define FILEMASK_OFF_LIMITS "!*/Misc/PCIDevices.DD*;!*/Misc/Bible.TXT*;"\ - "!*/Sup1/Sup1Texts/*;!*/Sup1/Sup1Words/*;!*/Sup1/Sup1Bin/*;"\ + "!*/Books?/*;!*/Sup1/Sup1Words/*;!*/Sup1/Sup1Bin/*;"\ "!*/Sup1/Sup1Blog/NumBible.TXT*;!*/God/Vocab.DD*" public I64 F(U8 *needle_str,U8 *fu_flags=NULL) diff --git a/Demo/AcctExample/Once.HC b/Demo/AcctExample/Once.HC new file mode 100644 index 0000000..fbd1dea --- /dev/null +++ b/Demo/AcctExample/Once.HC @@ -0,0 +1,39 @@ +//Place this file in /Home and change +//anything you want. + +//This file is executed by the +//first terminal window upon start-up. +//See $LK,"Once",A="FF:/Home/HomeSys.HC,Once"$ and $LK,"Home Files",A="FF:::/Doc/GuideLines.DD,/Home Files"$. + +// Type("::/Doc/Customize.DD"); + +U0 Tmp() +{ + OnceExe; + switch (sys_boot_src.u16[0]) { + case BOOT_SRC_DVD: + "\nIf you answer 'No' you can play with\n" + "the live CD without installing.\n\n" + "Install onto hard drive "; + if (YorN) { + DocBottom; + if (RunFile("::/Misc/OSInstall",,FALSE)) { + Del("C:/Home/DoDistro.HC.Z"); + Del("D:/Home/DoDistro.HC.Z"); + OnceDrv('C',"\"\n\nRun TOSStaffIns;\n\n\n\";"); + OnceDrv('D',"\"\n\nRun TOSStaffIns;\n\n\n\";"); + if (PressAKey!=CH_SHIFT_ESC) + Reboot; //Too dangerous for amateurs until reboot. + } + } + break; + } + if (FileFind("D:/Tmp/Logs/access.log")) { + In("\n\n%C",CH_ESC); + RunFile("::/Demo/WebLogDemo/WebLogRep",, + "D:/Tmp/Logs/*.log","D:/Home/WebLogRep.DD"); + Del("D:/Tmp/Logs/*.log"); + } +} + +Tmp; diff --git a/Demo/AcctExample/PersonalMenu.DD b/Demo/AcctExample/PersonalMenu.DD index b7040c5..a5a2250 100644 --- a/Demo/AcctExample/PersonalMenu.DD +++ b/Demo/AcctExample/PersonalMenu.DD @@ -1,19 +1,20 @@ -$MA,"Cd ",LM="Cd;Dir;\n"$$MA,"DrvC ",LM="Drv('C');\n"$$MA,"DrvD ",LM="Drv('D');\n"$$MA,"/ ",LM="Cd(\"/\");Dir;\n"$$MA,"Home ",LM="Cd(\"/Home\");Dir;\n"$$MA,"ChgDskT ",LM="ChgDsk('T');\n"$$MA,"MergeD ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"D:/*;!*/LineRep*\",\"+r+d\");\n"$$MA,"MergeT ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"T:/*;!*/LineRep*\",\"+r+d\");\n"$ -$MA,"MakeC ",LM="TOSBootHDIns('C');\n"$$MA+PU,"BootC ",LM="BootRAM(\"C:/Kernel.BIN.C\");"$$MA,"MakeBack",LM="MakeDistrosAndBackUp;\n"$$MA,"PreBack ",LM="PreBackUp;\n"$$MA,"MakeD ",LM="TOSBootHDIns('D');\n"$$MA+PU,"BootD ",LM="BootRAM(\"D:/Kernel.BIN.C\");"$$MA,"CopyDrv ",LM="TOSPromptAndCopyDrv;\n"$$MA,"MakeWeb ",LM="MakeWebSitePartial;\n"$ -$MA,"Kernel ",LM="Cd(\"/Kernel\");Dir;\n"$$MA,"Compiler",LM="Cd(\"/Compiler\");Dir;\n"$$MA,"BlkDev ",LM="Cd(\"/Kernel/BlkDev\");Dir;\n"$$MA,"Mem ",LM="Cd(\"/Kernel/Mem\");Dir;\n"$$MA,"Serial ",LM="Cd(\"/Kernel/SerialDev\");Dir;\n"$$MA,"Bin ",LM="Cd(\"/Home/Sup1/Sup1Bin\");Dir;\n"$$MA,"HDAudio ",LM="Cd(\"/Home/Sup1/Sup1HDAudio\");Dir;\n"$$MA,"Examples",LM="Cd(\"/Home/Sup1/Sup1HDAudio/Examples\");Dir;\n"$ +$MA,"Cd ",LM="Cd;Dir;\n"$$MA,"DrvC ",LM="Drv('C');\n"$$MA,"DrvD ",LM="Drv('D');\n"$$MA,"/ ",LM="Cd(\"/\");Dir;\n"$$MA,"Home ",LM="Cd(\"/Home\");Dir;\n"$$MA,"ChgDskT ",LM="ChgDsk('T');\n"$$MA,"MergeD ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"D:/*;!*/LineRep*\",\"+r+d\");\n"$$MA,"MergeT ",LM="S2T(\"C:/*\",\"+r+S\");Merge(\"C:/*;!*/LineRep*\",\"T:/*;!*/LineRep*\",\"+r+d\");\n"$$MA,"D:/Wb ",LM="Cd(\"D:/Wb\");Dir;\n"$ +$MA,"MakeC ",LM="TOSBootHDIns('C');\n"$$MA+PU,"BootC ",LM="BootRAM(\"C:/Kernel.BIN.C\");"$$MA,"Regen ",LM="TOSRegen;\n"$$MA,"PreBack ",LM="PreBackUp;\n"$$MA,"MakeD ",LM="TOSBootHDIns('D');\n"$$MA+PU,"BootD ",LM="BootRAM(\"D:/Kernel.BIN.C\");"$$MA,"CopyDrv ",LM="TOSPromptAndCopyDrv;\n"$$MA,"MakeWeb ",LM="MakeWebSitePartial;\n"$ +$MA,"Kernel ",LM="Cd(\"/Kernel\");Dir;\n"$$MA,"Compiler",LM="Cd(\"/Compiler\");Dir;\n"$$MA,"BlkDev ",LM="Cd(\"/Kernel/BlkDev\");Dir;\n"$$MA,"Mem ",LM="Cd(\"/Kernel/Mem\");Dir;\n"$$MA,"Serial ",LM="Cd(\"/Kernel/SerialDev\");Dir;\n"$$MA,"Bin ",LM="Cd(\"/Home/Sup1/Sup1Bin\");Dir;\n"$$MA,"HDAudio ",LM="Cd(\"/Home/Sup1/Sup1HDAudio\");Dir;\n"$$MA,"Examples",LM="Cd(\"/Home/Sup1/Sup1HDAudio/Examples\");Dir;\n"$$MA,"Dist ",LM="Cd(\"/Home/Sup1/Sup1Distro\");Dir;\n"$ $MA,"Adam ",LM="Cd(\"/Adam\");Dir;\n"$$MA,"AutoComp",LM="Cd(\"/Adam/AutoComplete\");Dir;\n"$$MA,"Ctrls ",LM="Cd(\"/Adam/Ctrls\");Dir;\n"$$MA,"ABlkDev ",LM="Cd(\"/Adam/ABlkDev\");Dir;\n"$$MA,"DolDoc ",LM="Cd(\"/Adam/DolDoc\");Dir;\n"$$MA,"Gr ",LM="Cd(\"/Adam/Gr\");Dir;\n"$$MA,"God ",LM="Cd(\"/Adam/God\");Dir;\n"$$MA,"Snd ",LM="Cd(\"/Adam/Snd\");Dir;\n"$$MA,"Boot ",LM="Cd(\"/Adam/Opt/Boot\");Dir;\n"$$MA,"Utils ",LM="Cd(\"/Adam/Opt/Utils\");Dir;\n"$ -$LK+X,"ChangeLg",A="FI:::/Doc/ChangeLog.DD"$$MA,"Blog ",LM="Blog;\n"$$MA,"EdGod ",LM="Ed(\"D:/Home/God.DD\");\n"$$MA,"BlogDir ",LM="Cd(\"/Home/Web/TAD/BlogDir\");Dir;\n"$$MA,"Partial ",LM="MakeWebSitePartial;\n"$$MA,"CodeWalk",LM="CodeWalkThru;\n"$$MA,"AfterEgp",LM="AfterEgyptInAction;\n"$$MA,"TOSTheme",LM="TempleOSTheme;\n"$$MA,"Videos ",LM="Cd(\"/Home/Sup1/Sup1Videos\");Dir;\n"$ -$MA,"Web ",LM="Cd(\"/Home/Web\");Dir;\n"$$MA,"TAD ",LM="Cd(\"/Home/Web/TAD\");Dir;\n"$$MA,"Sup1 ",LM="Cd(\"/Home/Sup1\");Dir;\n"$$MA,"Blog ",LM="Cd(\"/Home/Sup1/Sup1Blog\");Dir;\n"$$MA,"Code ",LM="Cd(\"/Home/Sup1/Sup1CodeScraps\");Dir;\n"$$MA,"Dist ",LM="Cd(\"/Home/Sup1/Sup1Distro\");Dir;\n"$$MA,"Games ",LM="Cd(\"/Home/Sup1/Sup1Games\");Dir;\n"$$MA,"Graphics",LM="Cd(\"/Home/Sup1/Sup1Graphics\");Dir;\n"$$MA,"Psalmody",LM="Cd(\"/Home/Sup1/Sup1Psalmody\");Dir;\n"$$MA,"Utils ",LM="Cd(\"/Home/Sup1/Sup1Utils\");Dir;\n"$ -$MA,"Apps ",LM="Cd(\"/Apps\");Dir;\n"$$MA,"AfterEgp",LM="Cd(\"/Apps/AfterEgypt\");Dir;\n"$$MA,"Budget ",LM="Cd(\"/Apps/Budget\");Dir;\n"$$MA,"GrModels",LM="Cd(\"/Apps/GrModels\");Dir;\n"$$MA,"KeepAway",LM="Cd(\"/Apps/KeepAway\");Dir;\n"$$MA,"Logic ",LM="Cd(\"/Apps/Logic\");Dir;\n"$$MA,"Psalmody",LM="Cd(\"/Apps/Psalmody\");Dir;\n"$$MA,"Span ",LM="Cd(\"/Apps/Span\");Dir;\n"$$MA,"Strut ",LM="Cd(\"/Apps/Strut\");Dir;\n"$$MA,"TimeClk ",LM="Cd(\"/Apps/TimeClock\");Dir;\n"$ -$MA,"TimeOut ",LM="Cd(\"/Apps/TimeOut\");Dir;\n"$$MA,"ToTheFrt",LM="Cd(\"/Apps/ToTheFront\");Dir;\n"$$MA,"Vocab ",LM="Cd(\"/Apps/Vocabulary\");Dir;\n"$$MA,"XCaliber",LM="Cd(\"/Apps/X-Caliber\");Dir;\n"$ +$LK+X,"ChangeLg",A="FI:::/Doc/ChangeLog.DD"$$MA,"Blog ",LM="Blog;\n"$$MA,"EdGod ",LM="Ed(\"D:/Home/God.DD\");\n"$$MA,"BlogDir ",LM="Cd(\"/Home/Web/TAD/BlogDir\");Dir;\n"$$MA,"Partial ",LM="MakeWebSitePartial;\n"$$MA,"CodeWalk",LM="CodeWalkThru;\n"$$MA,"TOSTheme",LM="TempleOSTheme;\n"$$MA,"Videos ",LM="Cd(\"/Home/Sup1/Sup1Videos\");Dir;\n"$ +$MA,"Web ",LM="Cd(\"/Home/Web\");Dir;\n"$$MA,"TAD ",LM="Cd(\"/Home/Web/TAD\");Dir;\n"$$MA,"DLC ",LM="Cd(\"/Home/Web/DLC\");Dir;\n"$$MA,"AppStore",LM="Cd(\"/Home/Web/AppStore\");Dir;\n"$$MA,"Sup1 ",LM="Cd(\"/Home/Sup1\");Dir;\n"$$MA,"Blog ",LM="Cd(\"/Home/Sup1/Sup1Blog\");Dir;\n"$$MA,"Code ",LM="Cd(\"/Home/Sup1/Sup1CodeScraps\");Dir;\n"$$MA,"Games ",LM="Cd(\"/Home/Sup1/Sup1Games\");Dir;\n"$$MA,"Graphics",LM="Cd(\"/Home/Sup1/Sup1Graphics\");Dir;\n"$$MA,"Utils ",LM="Cd(\"/Home/Sup1/Sup1Utils\");Dir;\n"$ +$MA,"Apps ",LM="Cd(\"/Apps\");Dir;\n"$$MA,"Budget ",LM="Cd(\"/Apps/Budget\");Dir;\n"$$MA,"GrModels",LM="Cd(\"/Apps/GrModels\");Dir;\n"$$MA,"KeepAway",LM="Cd(\"/Apps/KeepAway\");Dir;\n"$$MA,"Logic ",LM="Cd(\"/Apps/Logic\");Dir;\n"$$MA,"Psalmody",LM="Cd(\"/Apps/Psalmody\");Dir;\n"$$MA,"Span ",LM="Cd(\"/Apps/Span\");Dir;\n"$$MA,"Strut ",LM="Cd(\"/Apps/Strut\");Dir;\n"$$MA,"TimeClk ",LM="Cd(\"/Apps/TimeClock\");Dir;\n"$ +$MA,"Titan ",LM="Cd(\"/Apps/Titanium\");Dir;\n"$$MA,"ToTheFrt",LM="Cd(\"/Apps/ToTheFront\");Dir;\n"$$MA,"Vocab ",LM="Cd(\"/Apps/Vocabulary\");Dir;\n"$$MA,"XCaliber",LM="Cd(\"/Apps/X-Caliber\");Dir;\n"$$MA,"Books1 ",LM="Cd(\"/Home/Books1\");Dir;\n"$$MA,"Books2 ",LM="Cd(\"/Home/Books2\");Dir;\n"$$MA,"Hymns ",LM="Cd(\"/Home/Sup1/Sup1Hymns\");Dir;\n"$$MA,"Songs ",LM="Cd(\"/Home/Sup1/Sup1Songs\");Dir;\n"$ $MA,"Demo ",LM="Cd(\"/Demo\");Dir;\n"$$MA,"AcctEmpl",LM="Cd(\"/Demo/AcctExample\");Dir;\n"$$MA,"Asm ",LM="Cd(\"/Demo/Asm\");Dir;\n"$$MA,"DocDoc ",LM="Cd(\"/Demo/DolDoc\");Dir;\n"$$MA,"Dsk ",LM="Cd(\"/Demo/Dsk\");Dir;\n"$$MA,"Games ",LM="Cd(\"/Demo/Games\");Dir;\n"$$MA,"Graphics",LM="Cd(\"/Demo/Graphics\");Dir;\n"$$MA,"InFile ",LM="Cd(\"/Demo/InFile\");Dir;\n"$$MA,"Lectures",LM="Cd(\"/Demo/Lectures\");Dir;\n"$$MA,"MultCore",LM="Cd(\"/Demo/MultiCore\");Dir;\n"$ $MA,"RevFile ",LM="Cd(\"/Demo/RevFileDemo\");Dir;\n"$$MA,"Snd ",LM="Cd(\"/Demo/Snd\");Dir;\n"$$MA,"SortFile",LM="Cd(\"/Demo/SortFileDemo\");Dir;\n"$$MA,"Template",LM="Cd(\"/Demo/Templates\");Dir;\n"$$MA,"HtmlTXT ",LM="Cd(\"/Demo/ToHtmlToTXTDemo\");Dir;\n"$$MA,"WebLog ",LM="Cd(\"/Demo/WebLogDemo\");Dir;\n"$$MA,"Stadium ",LM="Cd(\"/Demo/Games/Stadium\");Dir;\n"$ $MA,"Doc ",LM="Cd(\"/Doc\");Dir;\n"$$MA,"Misc ",LM="Cd(\"/Misc\");Dir;\n"$$MA,"Tour ",LM="Cd(\"/Misc/Tour\");Dir;\n"$$MA,"Tmp ",LM="Cd(\"/Tmp\");Dir;\n"$$MA,"ScrnShot",LM="Cd(\"/Tmp/ScrnShots\");Dir;\n"$$MA,"DelScrSt",LM="Del(\"D:/Tmp/*.SND\");DelTree(\"D:/Tmp/ScrnShots\");MkDir(\"D:/Tmp/ScrnShots\");Del(\"C:/Tmp/*.SND\");DelTree(\"C:/Tmp/ScrnShots\");MkDir(\"C:/Tmp/ScrnShots\");\n"$$MA,"0000Boot",LM="Cd(\"/0000Boot\");Dir;\n"$$MA,"Linux ",LM="Cd(\"/Linux\");Dir;\n"$ -$MA,"LinxDict",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/LinuxDict.TXT**\\\");\");\n"$$MA,"August ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/AugustWords.TXT**\\\");\");\n"$$MA,"Happy ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HappyWords.TXT*\\\");\");\n"$$MA,"Yiddish ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Yiddish.TXT*\\\");\");\n"$$MA,"Bible ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/BibleWords.TXT*\\\");\");\n"$$MA,"Huck ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HuckWords.TXT*\\\");\");\n"$$MA,"Ingreds ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Ingredients.TXT*\\\");\");\n"$$MA,"Chess ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Chess.DD*\\\");\");\n"$$MA,"Texts ",LM="Cd(\"/Home/Sup1/Sup1Texts\");Dir;\n"$$MA,"Words ",LM="Cd(\"/Home/Sup1/Sup1Words\");Dir;\n"$ +$MA,"LinxDict",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/LinuxDict.TXT**\\\");\");\n"$$MA,"August ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/AugustWords.TXT**\\\");\");\n"$$MA,"Happy ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HappyWords.TXT*\\\");\");\n"$$MA,"Yiddish ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Yiddish.TXT*\\\");\");\n"$$MA,"Bible ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/BibleWords.TXT*\\\");\");\n"$$MA,"Huck ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/HuckWords.TXT*\\\");\");\n"$$MA,"Ingreds ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Ingredients.TXT*\\\");\");\n"$$MA,"Chess ",LM="Adam(\"GodInit(\\\"~/Sup1/Sup1Words/Chess.DD*\\\");\");\n"$$MA,"Words ",LM="Cd(\"/Home/Sup1/Sup1Words\");Dir;\n"$ $MA,"MakeStd ",LM="MakeStdDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSCD.ISO\");\n"$$MA,"MakeStRS",LM="MakeStdRedSeaDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_C_NAME,\"D:/Wb/TempleOSCDRS.ISO\");\n"$$MA,"MakeUlt ",LM="MakeUltraDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSUltra.ISO\");\n"$$MA,"MakeUtRS",LM="MakeUltraRedSeaDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_C_NAME,\"D:/Wb/TempleOSUltraRS.ISO\");\n"$$MA,"MakeStaf",LM="MakeStaffDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSStaff.ISO\");\n"$$MA,"MakeDbg ",LM="MakeDbgDistro;MkDir(\"D:/Wb\");Move(TOS_ISO_NAME,\"D:/Wb/TempleOSDbg.ISO\");\n"$ $MA,"BurnStd ",LM="MakeStdDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnStRS",LM="MakeStdRedSeaDistro;DVDImageWrite('T',TOS_ISO_C_NAME);\n"$$MA,"BurnUlt ",LM="MakeUltraDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnUtRS",LM="MakeUltraRedSeaDistro;DVDImageWrite('T',TOS_ISO_C_NAME);\n"$$MA,"BurnStaf",LM="MakeStaffDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnDbg ",LM="MakeDbgDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$ + $FG,5$Fun Games$FG$ @@ -21,8 +22,8 @@ $MA,"BurnStd ",LM="MakeStdDistro;DVDImageWrite('T',TOS_ISO_NAME);\n"$$MA,"BurnSt -$SP+PU," Egypt",LM="#include \"::/Apps/AfterEgypt/Run\"",BI=1$ $SP+PU,"Frankenstein",LM="#include \"::/Demo/Games/CastleFrankenstein\"",BI=2$ $SP+PU,"ZoneOut",LM="#include \"::/Demo/Games/ZoneOut\"",BI=3$ +$SP+PU,"Titanium",LM="#include \"::/Apps/Titanium/Run\"",BI=1$ $SP+PU,"Diamond",LM="#include \"::/Demo/Games/BlackDiamond\"",BI=2$ $SP+PU," Bat",LM="#include \"::/Demo/Games/FlapBat\"",BI=3$ $SP+PU,"Varoom",LM="#include \"::/Demo/Games/Varoom\"",BI=4$ @@ -30,24 +31,24 @@ $SP+PU," Egypt",LM="#include \"::/Apps/AfterEgypt/Run\"",BI=1$ $SP+PU,"Frankenst -$SP+PU,"Varoom",LM="#include \"::/Demo/Games/Varoom\"",BI=4$ $SP+PU,"Diamond",LM="#include \"::/Demo/Games/BlackDiamond\"",BI=5$ $SP+PU,"Lines",LM="#include \"::/Demo/Games/BattleLines\"",BI=6$ $SP+PU,"TimeOut",LM="#include \"::/Apps/TimeOut/Run\"",BI=7$ $SP+PU," Bat",LM="#include \"::/Demo/Games/FlapBat\"",BI=8$ +$SP+PU,"FlatTops",LM="#include \"::/Demo/Games/FlatTops\"",BI=5$ $SP+PU," Golf ",LM="#include \"::/Demo/Games/BomberGolf\"",BI=6$ $SP+PU,"KeepAway",LM="#include \"::/Apps/KeepAway/Run\"",BI=7$ $SP+PU,"RawHide",LM="#include \"::/Demo/Games/RawHide\"\n",BI=8$ -$SP+PU,"FlatTops",LM="#include \"::/Demo/Games/FlatTops\"",BI=9$ $SP+PU," Golf ",LM="#include \"::/Demo/Games/BomberGolf\"",BI=10$ $SP+PU,"Strut",LM="#include \"::/Apps/Strut/Run\"",BI=11$ $SP+PU,"TheDead",LM="#include \"::/Demo/Games/TheDead\"",BI=12$ $SP+PU,"DunGen",LM="#include \"::/Demo/Games/DunGen\"",BI=13$ +$SP+PU,"X-Caliber",LM="#include \"::/Apps/X-Caliber/Run\"",BI=9$ $SP+PU,"Wenceslas",LM="#include \"::/Demo/Games/Wenceslas\"",BI=10$ $SP+PU,"Lines",LM="#include \"::/Demo/Games/BattleLines\"",BI=11$ -$SP+PU," Talons",LM="#include \"::/Demo/Games/Talons\"",BI=14$ $SP+PU," Span ",LM="#include \"::/Apps/Span/Run\"",BI=15$ $SP+PU,"RawHide",LM="#include \"::/Demo/Games/RawHide\"\n",BI=16$ $SP+PU,"KeepAway",LM="#include \"::/Apps/KeepAway/Run\"",BI=17$ + $FG,5$Unfun Games$FG$ @@ -56,8 +57,8 @@ $SP+PU," Talons",LM="#include \"::/Demo/Games/Talons\"",BI=14$ $SP+PU," Span ", -$SP+PU,"X-Caliber",LM="#include \"::/Apps/X-Caliber/Run\"",BI=18$ $SP+PU,"ToTheFront",LM="#include \"::/Apps/ToTheFront/Run\"",BI=19$ $SP+PU,"Wenceslas",LM="#include \"::/Demo/Games/Wenceslas\"",BI=20$ +$SP+PU," Talons",LM="#include \"::/Demo/Games/Talons\"",BI=12$ $SP+PU,"Frankenstein",LM="#include \"::/Demo/Games/CastleFrankenstein\"",BI=13$ $SP+PU,"ZoneOut",LM="#include \"::/Demo/Games/ZoneOut\"",BI=14$ @@ -66,346 +67,40 @@ $SP+PU,"X-Caliber",LM="#include \"::/Apps/X-Caliber/Run\"",BI=18$ $SP+PU,"ToTheF -$SP+PU,"JukeBox",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");",BI=21$ $SP+PU,"Psalmody",LM="#include \"::/Apps/Psalmody/Run\";",BI=22$ $SP+PU,"Logic",LM="#include \"::/Apps/Logic/Run\"",BI=23$ $SP+PU,"Models",LM="#include \"::/Apps/GrModels/Run\";View;",BI=24$ $SP+PU,"Vocab",LM="#include \"::/Apps/Vocabulary/Run\"",BI=25$ +$SP+PU,"ToTheFront",LM="#include \"::/Apps/ToTheFront/Run\"",BI=15$ $SP+PU," Span ",LM="#include \"::/Apps/Span/Run\"",BI=16$ $SP+PU,"Checkers",LM="#include \"::/Demo/Games/TreeCheckers.HC.Z\"",BI=17$ $SP+PU,"Digits",LM="#include \"::/Demo/Games/Digits\"",BI=18$ + $FG,5$Code Scraps$FG$ -$SP+PU,"BigGuns",LM="#include \"::/Demo/Games/BigGuns\"",BI=26$ $SP+PU,"Budget",LM="#include \"::/Apps/Budget/Run\"",BI=27$ $SP+PU,"Digits",LM="#include \"::/Demo/Games/Digits\"",BI=28$ $SP+PU,"Checkers",LM="#include \"::/Demo/Games/TreeCheckers.HC.Z\"",BI=29$ -$MA,"TestSuit",LM="#include \"::/Misc/OSTestSuite\";\n"$$MA,"TakeTour",LM="Cd(\"::/Misc/Tour\");;InFile(\"Tour\");\n"$$MA+PU,"PsalSup1",LM="#include \"::/Apps/Psalmody/Load\";Psalmody(\"~/Sup1/Sup1Psalmody\");"$$MA,"Comics ",LM="Cd(\"/Home/Sup1/Sup1Comics\");Dir;\n"$$MA-X+PU,"SymAlpha",LM="DocMax;Who;View;"$$MA-X+PU,"SymNum ",LM="DocMax;Who(\"+m\");View;"$ -yÓÿÿÿÜÿÿÿ<H÷ÿÿÿ'ûÿÿÿ÷ÿÿÿõÿÿÿüÿÿÿ õÿÿÿ'ûÿÿÿ ' - èÿÿÿòÿÿÿèÿÿÿüÿÿÿèÿÿÿèÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿ èÿÿÿáÿÿÿèÿÿÿüÿÿÿèÿÿÿòÿÿÿèÿÿÿüÿÿÿúÿÿÿõÿÿÿ÷ÿÿÿ  $$÷ÿÿÿ$õÿÿÿ$ èÿÿÿõÿÿÿèÿÿÿòÿÿÿüÿÿÿõÿÿÿüÿÿÿ üÿÿÿéÿÿÿ üÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿõÿÿÿÿÿÿÿòÿÿÿÿÿÿÿûÿÿÿãÿÿÿýÿÿÿåÿÿÿãÿÿÿÿÿÿÿãÿÿÿåÿÿÿúÿÿÿáÿÿÿþÿÿÿãÿÿÿõÿÿÿ$÷ÿÿÿ$÷ÿÿÿ' $$õÿÿÿ'' -' ' -     !!&''"#%$$#       ! - - - $%*$*+'&('()&(( $++ -0/.112-,7 765343! 3 45833!839;:7;766;;1  ¸ÿÿÿøÿÿÿCastle¾éÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ - -ÿÿÿÿ*ÿÿÿÿ -* -**ÿÿÿÿ    -        -   - -    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"V ëÿÿÿçÿÿÿ`Œúÿÿÿ úÿÿÿ úÿÿÿúÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ      ðÿÿÿúÿÿÿöÿÿÿúÿÿÿöÿÿÿúÿÿÿðÿÿÿúÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿ ÿÿÿÿ ÷ÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿöÿÿÿöÿÿÿðÿÿÿóÿÿÿóÿÿÿ ÷ÿÿÿ÷ÿÿÿóÿÿÿóÿÿÿúÿÿÿäÿÿÿ úÿÿÿäÿÿÿ úÿÿÿïÿÿÿúÿÿÿïÿÿÿ ùÿÿÿâÿÿÿ ùÿÿÿßÿÿÿùÿÿÿßÿÿÿùÿÿÿâÿÿÿùÿÿÿñÿÿÿ ùÿÿÿñÿÿÿ ÿÿÿÿÿÿÿÿäÿÿÿ äÿÿÿ ïÿÿÿïÿÿÿ âÿÿÿ ßÿÿÿßÿÿÿâÿÿÿñÿÿÿ ñÿÿÿ ðÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿïÿÿÿðÿÿÿúÿÿÿïÿÿÿóÿÿÿùÿÿÿâÿÿÿóÿÿÿùÿÿÿßÿÿÿùÿÿÿßÿÿÿ÷ÿÿÿùÿÿÿâÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿóÿÿÿùÿÿÿñÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿäÿÿÿöÿÿÿäÿÿÿöÿÿÿïÿÿÿðÿÿÿïÿÿÿóÿÿÿâÿÿÿóÿÿÿßÿÿÿßÿÿÿ÷ÿÿÿâÿÿÿ÷ÿÿÿñÿÿÿóÿÿÿñÿÿÿóÿÿÿ        -      - $%&&'$%$$$'$%%&&'&#!"!# #     /-.-/,/*,,*++)(+*)+(+ + +(!.-.!" + + ,*)*<=>>?<1033211=<<01<?330<1=2=>2>233?>;9:9;8867754765GEFEGDGBDDBCCA@CBA4C@C474C7C4@9FEF9:8C7C8D5BAB56TUVVWTIHKKJIIUTTHITWKKHTIUJUVJVJKKWVSRQQPSPONOLMOMN_^]]\__\Z\[Z[XY[YZLX[[OLLO[[XLQ]^^RQPO[[\PMYZZNM P88P654@@A5LMYYXLC ÐÿÿÿøÿÿÿBlackÒÿÿÿÄÿÿÿ#4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôáÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÔÿÿÿøÿÿÿBattle¾Úÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ - -ÿÿÿÿ*ÿÿÿÿ -* -**ÿÿÿÿ    -        -   - -    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"´ÿÿÿ²ÿÿÿMPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÚÿÿÿèÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" -ÔÿÿÿÌÿÿÿ4.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb -ÌÿÿÿÆÿÿÿ-7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ rØÿÿÿÚÿÿÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿ ÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ²ÒÿÿÿÞÿÿÿ'$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR ÄÿÿÿÉÿÿÿ88ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -Ùÿÿÿêÿÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -ÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿ + $SP+PU,"Strut",LM="#include \"::/Apps/Strut/Run\"",BI=19$ $SP+PU,"BigGuns",LM="#include \"::/Demo/Games/BigGuns\"",BI=20$ $SP+PU,"TheDead",LM="#include \"::/Demo/Games/TheDead\"",BI=21$ $SP+PU,"DunGen",LM="#include \"::/Demo/Games/DunGen\"",BI=22$ $SP+PU,"Models",LM="#include \"::/Apps/GrModels/Run\";View;",BI=23$ + $FG,5$Nongames$FG$ - -ÿÿÿ - - +$SP+PU,"JukeBox",LM="#include \"::/Apps/Psalmody/Load\";JukeBox(\"::/Apps/Psalmody/Examples\");",BI=24$ $SP+PU,"Psalmody",LM="#include \"::/Apps/Psalmody/Run\";",BI=25$ $SP+PU,"Budget",LM="#include \"::/Apps/Budget/Run\"",BI=26$ $SP+PU,"Logic",LM="#include \"::/Apps/Logic/Run\"",BI=27$ $SP+PU,"Vocab",LM="#include \"::/Apps/Vocabulary/Run\"",BI=28$ - -ÿÿÿ - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - - - - -ÿÿÿÿ - - - - - - - - - - - - - - - - - - - -ÿÿÿÿ - - - - - - - - - - - - - - - - - - -ÿÿÿÿ - - - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - - - - -ÿÿÿ - - - - - - - - - - - - - -ÿÿ - -ÿÿÿÿÿ - - - - - - - - - - - -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - - - - -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÕÿÿÿäÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿ ÿÿ ÿÿ  - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - -ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÛÿÿÿÀÿÿÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÏÿÿÿÑÿÿÿ)+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÔÿÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÿÖÿÿÿ4$ ÐÿÿÿøÿÿÿTreeÖéÿÿÿåÿÿÿp¨üÿÿÿíÿÿÿíÿÿÿüÿÿÿòÿÿÿòÿÿÿüÿÿÿíÿÿÿýÿÿÿíÿÿÿýÿÿÿüÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿòÿÿÿòÿÿÿúÿÿÿúÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿ÷ÿÿÿôÿÿÿùÿÿÿõÿÿÿöÿÿÿûÿÿÿýÿÿÿøÿÿÿüÿÿÿüÿÿÿ÷ÿÿÿòÿÿÿùÿÿÿóÿÿÿÿÿÿÿöÿÿÿùÿÿÿûÿÿÿøÿÿÿúÿÿÿúÿÿÿöÿÿÿüÿÿÿýÿÿÿøÿÿÿýÿÿÿüÿÿÿôÿÿÿöÿÿÿöÿÿÿõÿÿÿöÿÿÿùÿÿÿüÿÿÿøÿÿÿúÿÿÿûÿÿÿôÿÿÿýÿÿÿõÿÿÿöÿÿÿþÿÿÿôÿÿÿôÿÿÿÿÿÿÿöÿÿÿöÿÿÿõÿÿÿóÿÿÿòÿÿÿõÿÿÿñÿÿÿôÿÿÿýÿÿÿöÿÿÿöÿÿÿþÿÿÿõÿÿÿóÿÿÿÿÿÿÿòÿÿÿõÿÿÿñÿÿÿóÿÿÿóÿÿÿÿÿÿÿúÿÿÿúÿÿÿôÿÿÿþÿÿÿôÿÿÿýÿÿÿûÿÿÿûÿÿÿúÿÿÿúÿÿÿûÿÿÿûÿÿÿ  úÿÿÿýÿÿÿûÿÿÿ þÿÿÿ úÿÿÿÿÿÿÿýÿÿÿþÿÿÿûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ -þÿÿÿ ûÿÿÿþÿÿÿüÿÿÿ ÿÿÿÿ ûÿÿÿ þÿÿÿ üÿÿÿÿÿÿÿÿÿÿÿ ûÿÿÿ úÿÿÿÿÿÿÿþÿÿÿÿÿÿÿùÿÿÿ øÿÿÿÿÿÿÿ -üÿÿÿ ûÿÿÿþÿÿÿùÿÿÿøÿÿÿÿÿÿÿùÿÿÿ øÿÿÿþÿÿÿöÿÿÿõÿÿÿþÿÿÿùÿÿÿøÿÿÿýÿÿÿñÿÿÿðÿÿÿþÿÿÿúÿÿÿùÿÿÿýÿÿÿòÿÿÿñÿÿÿ  - -       -  -   -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokêâÿÿÿÐÿÿÿ%%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿ  ÿÿ  ÿÿ ÿ ÿ        ÿÿ   ÿÿ  ÿÿ  ÿÿ  ÿÿÿ  ÿÿÿÿ  ÿÿÿÿ ÿÿÿ  ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ åÿÿÿøÿÿÿFlap -„Õÿÿÿáÿÿÿ*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿ        ÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿ    ÿÿÿ      ÿ  ÿÿ    ÿÿ  ÿ  ÿÿÿÿÿ  ÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÑÿÿÿøÿÿÿBomberÒÒÿÿÿÛÿÿÿ0$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ :ÚÿÿÿÝÿÿÿ%!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ’ ÁÿÿÿÑÿÿÿ>.                                                            ŠÉÿÿÿÉÿÿÿC7 ÿ ÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  +$MA,"TestSuit",LM="#include \"::/Misc/OSTestSuite\";\n"$$MA,"TakeTour",LM="Cd(\"::/Misc/Tour\");;InFile(\"Tour\");\n"$$MA+PU,"PsalSup1",LM="#include \"::/Apps/Psalmody/Load\";Psalmody(\"~/Sup1/Sup1Hymns\");"$$MA-X+PU,"SymAlpha",LM="DocMax;Who;View;"$$MA-X+PU,"SymNum ",LM="DocMax;Who(\"+m\");View;"$ +C ÐÿÿÿøÿÿÿBlackÒÿÿÿÄÿÿÿ#4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÚÿÿÿèÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" +ÔÿÿÿÌÿÿÿ4.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrØÿÿÿÚÿÿÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿ ÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÒÿÿÿÞÿÿÿ'$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR ÄÿÿÿÉÿÿÿ88ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÛÿÿÿÀÿÿÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêâÿÿÿÐÿÿÿ%%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿ  ÿÿ  ÿÿ ÿ ÿ        ÿÿ   ÿÿ  ÿÿ  ÿÿ  ÿÿÿ  ÿÿÿÿ  ÿÿÿÿ ÿÿÿ  ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ åÿÿÿøÿÿÿFlap„Õÿÿÿáÿÿÿ*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿ        ÿÿÿÿÿÿÿÿÿ      ÿÿÿÿÿÿ    ÿÿÿ      ÿ  ÿÿ    ÿÿ  ÿ  ÿÿÿÿÿ  ÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÑÿÿÿøÿÿÿBomber:ÚÿÿÿÝÿÿÿ%!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ ÁÿÿÿÑÿÿÿ>.                                                            ’ÔÿÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ g ¹ÿÿÿÉÿÿÿþÿÿÿþÿÿÿÀÿÿÿîÿÿÿÈÿÿÿÖÿÿÿìÿÿÿØÿÿÿÜÿÿÿæÿÿÿèÿÿÿôÿÿÿäÿÿÿìÿÿÿâÿÿÿÞÿÿÿÌÿÿÿÜÿÿÿäÿÿÿ€ÿÿÿ +ûÿÿÿöÿÿÿûÿÿÿöÿÿÿûÿÿÿìÿÿÿçÿÿÿöÿÿÿûÿÿÿöÿÿÿ +´ÿÿÿ²ÿÿÿMPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ŠÉÿÿÿÉÿÿÿC7 ÿ ÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @@ -829,5 +524,331 @@ $MA,"TestSuit",LM="#include \"::/Misc/OSTestSuite\";\n"$$MA,"TakeTour",LM="Cd(\" ÿÿÿÿÿÿÿ    - ÿÿÿÿ     ÿÿ     ÿÿ        ÿ      ÿ                    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg ¹ÿÿÿÉÿÿÿþÿÿÿþÿÿÿÀÿÿÿîÿÿÿÈÿÿÿÖÿÿÿìÿÿÿØÿÿÿÜÿÿÿæÿÿÿèÿÿÿôÿÿÿäÿÿÿìÿÿÿâÿÿÿÞÿÿÿÌÿÿÿÜÿÿÿäÿÿÿ€ÿÿÿ -ûÿÿÿöÿÿÿûÿÿÿöÿÿÿûÿÿÿìÿÿÿçÿÿÿöÿÿÿûÿÿÿöÿÿÿ»ÒÿÿÿÛÿÿÿ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ØÿÿÿøÿÿÿAfter’ÆÿÿÿÅÿÿÿ?:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file + ÿÿÿÿ     ÿÿ     ÿÿ        ÿ      ÿ                    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ yÓÿÿÿÜÿÿÿ<H÷ÿÿÿ'ûÿÿÿ÷ÿÿÿõÿÿÿüÿÿÿ õÿÿÿ'ûÿÿÿ ' + èÿÿÿòÿÿÿèÿÿÿüÿÿÿèÿÿÿèÿÿÿáÿÿÿúÿÿÿáÿÿÿúÿÿÿ èÿÿÿáÿÿÿèÿÿÿüÿÿÿèÿÿÿòÿÿÿèÿÿÿüÿÿÿúÿÿÿõÿÿÿ÷ÿÿÿ  $$÷ÿÿÿ$õÿÿÿ$ èÿÿÿõÿÿÿèÿÿÿòÿÿÿüÿÿÿõÿÿÿüÿÿÿ üÿÿÿéÿÿÿ üÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿ ÿÿÿÿéÿÿÿõÿÿÿÿÿÿÿòÿÿÿÿÿÿÿûÿÿÿãÿÿÿýÿÿÿåÿÿÿãÿÿÿÿÿÿÿãÿÿÿåÿÿÿúÿÿÿáÿÿÿþÿÿÿãÿÿÿõÿÿÿ$÷ÿÿÿ$÷ÿÿÿ' $$õÿÿÿ'' +' ' +     !!&''"#%$$#       ! + + + $%*$*+'&('()&(( $++ +0/.112-,7 765343! 3 45833!839;:7;766;;1  ¸ÿÿÿøÿÿÿCastle¾éÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ + +ÿÿÿÿ*ÿÿÿÿ +* +**ÿÿÿÿ    +        +   + +    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"b +ÌÿÿÿÆÿÿÿ-7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Öéÿÿÿåÿÿÿp¨üÿÿÿíÿÿÿíÿÿÿüÿÿÿòÿÿÿòÿÿÿüÿÿÿíÿÿÿýÿÿÿíÿÿÿýÿÿÿüÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿòÿÿÿòÿÿÿúÿÿÿúÿÿÿòÿÿÿýÿÿÿòÿÿÿýÿÿÿúÿÿÿýÿÿÿýÿÿÿ÷ÿÿÿôÿÿÿùÿÿÿõÿÿÿöÿÿÿûÿÿÿýÿÿÿøÿÿÿüÿÿÿüÿÿÿ÷ÿÿÿòÿÿÿùÿÿÿóÿÿÿÿÿÿÿöÿÿÿùÿÿÿûÿÿÿøÿÿÿúÿÿÿúÿÿÿöÿÿÿüÿÿÿýÿÿÿøÿÿÿýÿÿÿüÿÿÿôÿÿÿöÿÿÿöÿÿÿõÿÿÿöÿÿÿùÿÿÿüÿÿÿøÿÿÿúÿÿÿûÿÿÿôÿÿÿýÿÿÿõÿÿÿöÿÿÿþÿÿÿôÿÿÿôÿÿÿÿÿÿÿöÿÿÿöÿÿÿõÿÿÿóÿÿÿòÿÿÿõÿÿÿñÿÿÿôÿÿÿýÿÿÿöÿÿÿöÿÿÿþÿÿÿõÿÿÿóÿÿÿÿÿÿÿòÿÿÿõÿÿÿñÿÿÿóÿÿÿóÿÿÿÿÿÿÿúÿÿÿúÿÿÿôÿÿÿþÿÿÿôÿÿÿýÿÿÿûÿÿÿûÿÿÿúÿÿÿúÿÿÿûÿÿÿûÿÿÿ  úÿÿÿýÿÿÿûÿÿÿ þÿÿÿ úÿÿÿÿÿÿÿýÿÿÿþÿÿÿûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ þÿÿÿ ûÿÿÿ +þÿÿÿ ûÿÿÿþÿÿÿüÿÿÿ ÿÿÿÿ ûÿÿÿ þÿÿÿ üÿÿÿÿÿÿÿÿÿÿÿ ûÿÿÿ úÿÿÿÿÿÿÿþÿÿÿÿÿÿÿùÿÿÿ øÿÿÿÿÿÿÿ +üÿÿÿ ûÿÿÿþÿÿÿùÿÿÿøÿÿÿÿÿÿÿùÿÿÿ øÿÿÿþÿÿÿöÿÿÿõÿÿÿþÿÿÿùÿÿÿøÿÿÿýÿÿÿñÿÿÿðÿÿÿþÿÿÿúÿÿÿùÿÿÿýÿÿÿòÿÿÿñÿÿÿ  + +       +  +   +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmok¾Úÿÿÿâÿÿÿ6R äÿÿÿ äÿÿÿ îÿÿÿ îÿÿÿ  ôÿÿÿÛÿÿÿ ôÿÿÿÛÿÿÿ äÿÿÿÛÿÿÿÛÿÿÿôÿÿÿäÿÿÿîÿÿÿîÿÿÿôÿÿÿ ÷ÿÿÿ ûÿÿÿ îÿÿÿ éÿÿÿ  óÿÿÿõÿÿÿäÿÿÿõÿÿÿäÿÿÿõÿÿÿîÿÿÿõÿÿÿîÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿôÿÿÿÛÿÿÿõÿÿÿñÿÿÿäÿÿÿñÿÿÿÛÿÿÿñÿÿÿÛÿÿÿñÿÿÿôÿÿÿäÿÿÿñÿÿÿîÿÿÿñÿÿÿîÿÿÿñÿÿÿôÿÿÿñÿÿÿõÿÿÿ÷ÿÿÿõÿÿÿûÿÿÿõÿÿÿîÿÿÿõÿÿÿéÿÿÿõÿÿÿéÿÿÿõÿÿÿóÿÿÿõÿÿÿóÿÿÿéÿÿÿ óÿÿÿõÿÿÿÿÿÿÿ + +ÿÿÿÿ*ÿÿÿÿ +* +**ÿÿÿÿ    +        +   + +    $"$#"!  !"!#"$#! !    "!"%++&%%'&&(''(()),),**,*+-$$-$'()')&3/..232.11523400/3451104-"ÒÒÿÿÿÛÿÿÿ0$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÿÖÿÿÿ4$ ÐÿÿÿøÿÿÿTreeúÕÿÿÿäÿÿÿ%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿ ÿÿ ÿÿ  + + + + + + + + + +  + + + + + + + + + + + +  + + + + + + + + + + + +  + + + + + + + + + +  + + + + + + + +ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ôáÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÔÿÿÿøÿÿÿBattleÒÂÿÿÿÅÿÿÿ@;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV ëÿÿÿçÿÿÿ`Œúÿÿÿ úÿÿÿ úÿÿÿúÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿ      ðÿÿÿúÿÿÿöÿÿÿúÿÿÿöÿÿÿúÿÿÿðÿÿÿúÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿ ÿÿÿÿ ÷ÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿóÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿöÿÿÿöÿÿÿðÿÿÿóÿÿÿóÿÿÿ ÷ÿÿÿ÷ÿÿÿóÿÿÿóÿÿÿúÿÿÿäÿÿÿ úÿÿÿäÿÿÿ úÿÿÿïÿÿÿúÿÿÿïÿÿÿ ùÿÿÿâÿÿÿ ùÿÿÿßÿÿÿùÿÿÿßÿÿÿùÿÿÿâÿÿÿùÿÿÿñÿÿÿ ùÿÿÿñÿÿÿ ÿÿÿÿÿÿÿÿäÿÿÿ äÿÿÿ ïÿÿÿïÿÿÿ âÿÿÿ ßÿÿÿßÿÿÿâÿÿÿñÿÿÿ ñÿÿÿ ðÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿäÿÿÿöÿÿÿúÿÿÿïÿÿÿðÿÿÿúÿÿÿïÿÿÿóÿÿÿùÿÿÿâÿÿÿóÿÿÿùÿÿÿßÿÿÿùÿÿÿßÿÿÿ÷ÿÿÿùÿÿÿâÿÿÿ÷ÿÿÿùÿÿÿñÿÿÿóÿÿÿùÿÿÿñÿÿÿóÿÿÿÿÿÿÿÿÿÿÿðÿÿÿäÿÿÿöÿÿÿäÿÿÿöÿÿÿïÿÿÿðÿÿÿïÿÿÿóÿÿÿâÿÿÿóÿÿÿßÿÿÿßÿÿÿ÷ÿÿÿâÿÿÿ÷ÿÿÿñÿÿÿóÿÿÿñÿÿÿóÿÿÿ        +      + $%&&'$%$$$'$%%&&'&#!"!# #     /-.-/,/*,,*++)(+*)+(+ + +(!.-.!" + + ,*)*<=>>?<1033211=<<01<?330<1=2=>2>233?>;9:9;8867754765GEFEGDGBDDBCCA@CBA4C@C474C7C4@9FEF9:8C7C8D5BAB56TUVVWTIHKKJIIUTTHITWKKHTIUJUVJVJKKWVSRQQPSPONOLMOMN_^]]\__\Z\[Z[XY[YZLX[[OLLO[[XLQ]^^RQPO[[\PMYZZNM P88P654@@A5LMYYXL"ÏÿÿÿÑÿÿÿ)+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +Ùÿÿÿêÿÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + +ÿÿÿÿ + +ÿÿÿÿÿÿÿÿÿÿ + + + + + + + + +ÿÿÿ + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + + + +ÿÿÿÿ + + + + + + + + + + + + + + + + + + + +ÿÿÿÿ + + + + + + + + + + + + + + + + + + +ÿÿÿÿ + + + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + + + + +ÿÿÿ + + + + + + + + + + + + + +ÿÿ + +ÿÿÿÿÿ + + + + + + + + + + + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + + + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/Demo/AcctExample/PersonalNotes.DD b/Demo/AcctExample/PersonalNotes.DD index 02c282b..e46a38a 100644 --- a/Demo/AcctExample/PersonalNotes.DD +++ b/Demo/AcctExample/PersonalNotes.DD @@ -1,20 +1,33 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ +* $LK,"::/Apps/X-Caliber/X-Caliber.HC"$ +* Add asteroid harbor defense. +* Afterburner thruster. + +* $LK,"::/Apps/Titanium/Titanium.HC"$ +* Lead-in at start of game with no enemy. +* Have highway of death. +* Fix straight shooting. +* Helicopters. +* Anti-Aircraft. + +* Make registry files more robust. + +* $MA-X+PU,"64-Bit Device Memory",LM="F(\"mem64_ptr\");View;"$ is not implemented. + * $LK,"::/Demo/RandDemo.HC"$ is kinda crappy. * Cursor in $LK,"~/TOSToHtml.HC"$. * Investigate why packet loss $LK,"Training Sleep(1)",A="FF:::/Adam/Training.HC,Sleep(1)"$. +* Naming standard with regard to "MAX_". + * Add AVL or red/black binary tree library support. We have fixed-size stack. Auto-balancing binary tree is very needed. I've done everything myself. I don't want to ruin a perfect record. I'm in no hurry. * $LK,"SpriteEd",A="FI:::/Adam/Gr/SpriteEd.HC"$ shift pts, Ctrl pt for ellipse/polygon w,h is off when rotated. * Get rid of $LK,"JobQue",A="MN:JobQue"$() and use just $LK,"Spawn",A="MN:Spawn"$()? Not sure about this, probably. -* Add missiles to $LK,"::/Apps/TimeOut/TimeOut.HC"$. - -* Add asteroid harbor defense to $LK,"::/Apps/X-Caliber/X-Caliber.HC"$. - * God said this is bad. $LK,"FL:::/Adam/DolDoc/DocFind.HC,41"$ * Backward is broken? @@ -43,8 +56,6 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * Compiler Optimization: heap_glbls with added offset. Might exist. -* AfterEgypt: $LK,"Numbers,13:33",A="BF:Numbers,13:33"$ scouts? $LK,"Numbers,21:8",A="BF:Numbers,21:8"$ snakes? - * Bug: Find-and-replace text on $$PT$$ line before it. * 12/25/2015 Copy-Paste index.html glitch if source window 40 columns. * 01/06/2016 Editor filter "str" applied to output from LineRep looks broken. @@ -55,7 +66,7 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * Good $LK,"spell checker",A="MN:ACMisspelledFind"$. * Good Bible search. -* Can $LK,"MEM_EXTRA_HASH2_PAGES",A="MN:MEM_EXTRA_HASH2_PAGES"$ be just one? +* Can $LK,"MEM_EXTRA_HASH2_PAGS",A="MN:MEM_EXTRA_HASH2_PAGS"$ be just one? * Bible ranges in $LK,"BibleVerse",A="MN:BibleVerse"$(). @@ -140,7 +151,7 @@ $FG,5$$TX+CX,"TODO: Too Hard, or Not Worth Doing."$$FG$ * Compiler: FunPtr local vars? I forgot if this was hard or not. $ID,5$$HL,1$U0 Main() { - U0 (*fp_old_draw_input_ptr)(CDC *dc,I64 x,I64 y)=gr.fp_draw_input_ptr; + U0 (*fp_old_draw_ms)(CDC *dc,I64 x,I64 y)=gr.fp_draw_ms; } $ID,-5$$HL,0$ * Compiler: Get rid of $LK,"0x20000",A="FF:::/Compiler/CMain.HC,0x20000"$ limit. @@ -155,7 +166,7 @@ $FG,5$$TX+CX,"Bugs"$$FG$ * Bug introduced around 11/1/15. Changed $LK,"::/Kernel/Sched.HC"$ and now $LK,"WinToTop",A="MN:WinToTop"$ is called on Adam task at start-up, sometimes. Might be user's fault because of bad keys pressed during VMware power-on init. Might be fixed by $LK,"ACf_INIT_IN_PROGRESS",A="MN:ACf_INIT_IN_PROGRESS"$. -* 1/12/16 $LK,"ATARepEntry",A="MN:ATARepEntry"$ shows corrupted buttons. Weird. Perhaps, my imagination. +* 1/12/16 $LK,"ATARepEntry",A="MN:ATARepEntry"$ shows corrupted bttns. Weird. Perhaps, my imagination. $FG,5$$TX+CX,"3rd Party Bugs"$$FG$ @@ -179,7 +190,7 @@ $FG,5$$TX+CX,"Bugs? Not really sure."$$FG$ * 1/?/2015,8/10/2015 Macro sel in Menu did not go to shell? No, I think just twice. Not a bug. -* 5/7/14:Something like $LK,"InSetIP",A="MN:InSetIP"$ caused hang, then reboot in TestSuite. +* 5/7/14:Something like $LK,"InSetMs",A="MN:InSetMs"$ caused hang, then reboot in TestSuite. * 5/7/14:#63 Maybe, $LK,"::/Demo/Graphics/Pick3D.HC"$ crashed in TestSuite. * $LK,"StrPrintJoin",A="MN:StrPrintJoin"$(,st); With st="\n\\"; (Forgot what this is talking about.) @@ -194,6 +205,8 @@ CHashFun *fun_ptr; $ID,-5$ * extern of fun with dft arg of str? +* ISO.C on FAT32 created by Windows or Linux are not contiguous. + * Might want to warn switch[] dup case numbers. * Make $LK,"Clamp",A="MN:Clamp"$(), $LK,"Min",A="MN:Min"$(), $LK,"Max",A="MN:Max"$() into asm routines? @@ -219,7 +232,7 @@ $ID,-5$ * Compiler: Type for either F64 or I64, like Print -- no conversion. * Compiler: Arg type ... that did do conversion, if we have one that doesn't. -* $LK,"R",A="MN:R"$("chars_bmp_","set_"); +* $LK,"R",A="MN:R"$("char_bmp_","set_"); * Clean-up code $LK,"FileNameAbs",A="MN:FileNameAbs"$(), does it need so many local var names? I guess no choice. @@ -227,6 +240,8 @@ $ID,-5$ $FG,5$$TX+CX,"Committee Needed"$$FG$ * Make binary tree look-up using FUN_SEG symbol addresses, so we can eliminate fun_seg cache and wall-paper kludge? All HolyC functions and glbl vars would have left-right for address search. +* Make so just CdRom; command to copy entire disk to ::/CdRom directory? + * $LK,"MP DepthBuf",A="FF:::/Adam/Gr/SpriteMesh.HC,dc->depth_buf=e->"$ is a kludge because of dc->depth_buf=NULL in various graphics routines. * Improve editor undo, add redo. @@ -251,7 +266,7 @@ $FG,5$$TX+CX,"Committee Needed"$$FG$ * Eliminate? $LK,"Mat4x4MulXYZ",A="MN:Mat4x4MulXYZ"$() change to 3x3? * Eliminate? $LK,"ROP_XOR",A="MN:ROP_XOR"$? -* $LK,"WinMgrTask",A="MN:WinMgrTask"$ needs to do doc operations on $LK,"PostMsg",A="MN:PostMsg"$() msgs for mouse. Already works for $LK,"IPSet",A="MN:IPSet"$()? +* $LK,"WinMgrTask",A="MN:WinMgrTask"$ needs to do doc operations on $LK,"PostMsg",A="MN:PostMsg"$() msgs for ms_hard. Already works for $LK,"MsSet",A="MN:MsSet"$()? * Should Msgs in PopUp queue get fwded to parent when task dies? @@ -271,8 +286,6 @@ $FG,5$$TX+CX,"Committee Needed"$$FG$ * Compiler: &=, |= can overflow with Bts Btr on small data types? -* Compiler: $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$ for local vars? - * Implement $LK,"RS_ATTR_FIXED",A="MN:RS_ATTR_FIXED"$ fixed pos files? * SIMD in $LK,"Mat4x4MulXYZ",A="MN:Mat4x4MulXYZ"$? @@ -359,7 +372,7 @@ $FG,5$$TX+CX,"Test"$$FG$ * $LK,"FileMgr",A="MN:FileMgr"$() help link scrolls out of window. -* $LK,"MouseDriverInstall",A="MN:MouseDriverInstall"$() throws exceptions? Doesn't work? Why mouse $LK,"0x9FC30",A="FF:::/Kernel/SerialDev/Mouse.HC,9FC"$? +* $LK,"MsHardDrvrInstall",A="MN:MsHardDrvrInstall"$() throws exceptions? Doesn't work? Why mouse $LK,"0x9FC30",A="FF:::/Kernel/SerialDev/Mouse.HC,9FC"$? * VirtualBox MP reboot? @@ -380,7 +393,7 @@ $FG,5$$TX+CX,"Uncategorized"$$FG$ >Might want to do ZOOM in U8 graphics and convert scrn capture to U8 >Might want to rev bit order -* This $LK,"Fs->catch_except=TRUE",A="FF:::/Kernel/SrvCmd.HC,Fs->catch_except=TRUE"$ causes problems because it +* This $LK,"Fs->catch_except=TRUE",A="FF:::/Kernel/Job.HC,Fs->catch_except=TRUE"$ causes problems because it catches divide and out-of-mem. Not sure what to do, yet. * Release semaphores or break lock sema,usb_td @@ -429,7 +442,7 @@ $FG,5$$TX+CX,"Misc Notes"$$FG$ Erik van der Karbargenbok: $LK,"TempleBot",A="PI:~/Sup1/Sup1Bin/TempleBot"$. Intel CEO's name: Brian Krzanich >$FG,2$lspci -v$FG$ -Size:$TX,"17426KB",D="DD_TEMPLEOSCD_K_SIZE"$ +Size:$TX,"17354KB",D="DD_TEMPLEOSCD_K_SIZE"$ $FG,5$$TX+CX,"My Web Bookmarks"$$FG$$WW,0$ $TX,"My FireFox Bookmarks",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/Bookmarks"$ @@ -438,12 +451,15 @@ Frosting $HC,"

\"\"
"$ CottonTail $HC,"
\"\"
"$ TempleOS Logo $HC,"
\"\"
"$ +T-Shirts & Mug $HC,"\"\""$ Pew Pew Pew $HC,"
\"\"
"$ Iceberg $HC,"
\"\"
"$ I made dis $HC,"
\"\"
"$ NIST Beacon $HC,"
\"\"
"$ Purple Frog $HC,"
\"\"
"$ Casino (Dog) $HC,"
\"\"
"$ +Dianna's Cross $HC,""$ + $TX,"SimStructure",HTML="http://www.templeos.org/files/SimStrSetUp.zip"$ $TX,"ASU_Transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$ $TX,"ASU Course Catalog (See page 261)",HTML="https://catalog.asu.edu/files/shared/archives/1994-1996/general/UG1994-1996.pdf/1994-1996-UG-241-267.pdf"$ @@ -476,6 +492,7 @@ $TX,"TOSZ Compression",HTML="http://www.templeos.org/Wb/Linux/TOSZ.CPP"$ $TX,"ATA/ATAPI spec",HTML="http://www.t13.org/Documents/UploadedDocuments/docs2007/D1532v1r4b-AT_Attachment_with_Packet_Interface_-_7_Volume_1.pdf"$ $TX,"Patton Prayer",HTML="http://www.pattonhq.com/prayer.html"$ $TX,"Streaming Terry A. Davis",HTML="https://www.youtube.com/channel/UCdX4uJUwSFwiY3XBvu-F_-Q/live"$ +$TX,"Bleem",HTML="http://strangehorizons.com/fiction/the-secret-number/"$ $TX,"WWW.OSDEV.ORG",HTML="http://www.osdev.org"$ $TX,"NIST Beacon",HTML="http://www.nist.gov/itl/csd/ct/nist_beacon.cfm"$ diff --git a/Demo/AcctExample/Registry.HC b/Demo/AcctExample/Registry.HC index 5c46c5f..11f62f1 100644 --- a/Demo/AcctExample/Registry.HC +++ b/Demo/AcctExample/Registry.HC @@ -2,23 +2,34 @@ $TR-UL,"Adam"$ $ID,2$$TR,"SysMsgFlags"$ $ID,2$sys_msg_flags[0]=0xFF; $ID,-2$$TR,"SysRegVer"$ -$ID,2$registry_version=4.130; -$ID,-2$$ID,-2$$TR-C-UL,"TempleOS"$ -$ID,2$$TR,"CircleTrace"$ -$ID,2$F64 best_score=4.9425; -$ID,-2$$TR,"DiningStars"$ -$ID,2$F64 best_score=9999.0000; -$ID,-2$$TR,"Staff"$ -$ID,2$#define PERSONAL_INITIALS "TAD" -#define MACHINE_CFG 0 -$ID,-2$$TR,"TOSVideos"$ -$ID,2$I64 tos_code_walk_thru=105,tos_after_egypt_in_action=46; -$ID,-2$$TR,"EagleDive"$ +$ID,2$registry_version=5.000; +$ID,-2$$TR,"InsReg"$ +$ID,2$#help_index "Misc/Install Registration" +MemSet(&ins_reg,0,sizeof(CInsReg)); +ins_reg.registered=1; +ins_reg.host_os=2; +ins_reg.host_vm=2; + +#define INS_REG_PERSONAL_INITIALS "TAD" +StrCpy(ins_reg.initials,"TAD"); +HashPublic("INS_REG_PERSONAL_INITIALS",HTT_DEFINE_STR); + +#define INS_REG_MACHINE_NUM 0 +ins_reg.machine_num=0; +HashPublic("INS_REG_MACHINE_NUM",HTT_DEFINE_STR); + +"InsReg:%s:%d\n",INS_REG_PERSONAL_INITIALS,INS_REG_MACHINE_NUM; + +#help_index "" +$ID,-2$$ID,-2$$TR-UL,"TempleOS"$ +$ID,2$$TR,"EagleDive"$ $ID,2$F64 best_score=147.6932; $ID,-2$$TR,"TOSGodOffer"$ $ID,2$I64 tos_gus_gwen=22; -$ID,-2$$TR,"TOSGodMisc"$ -$ID,2$I64 tos_timestamp=0,tos_type=1; +$ID,-2$$TR,"TOSVideos"$ +$ID,2$I64 tos_code_walk_thru=105; +$ID,-2$$TR,"DiningStars"$ +$ID,2$F64 best_score=9999.0000; $ID,-2$$TR,"BlackDiamond"$ $ID,2$I64 best_score=1; $ID,-2$$TR,"DunGen"$ @@ -29,27 +40,32 @@ $ID,-2$$TR,"ZoneOut"$ $ID,2$F64 best_score=8.1373; $ID,-2$$TR,"Varoom"$ $ID,2$F64 best_score=46.2643; +$ID,-2$$TR,"FlapBat"$ +$ID,2$F64 best_score=16.3077; $ID,-2$$TR,"RawHide"$ $ID,2$F64 best_score=96.1279; $ID,-2$$TR,"KeepAway"$ $ID,2$I64 best_score0=68,best_score1=30; $ID,-2$$TR,"Wenceslas"$ $ID,2$F64 best_score=43.9944; -$ID,-2$$TR,"Talons"$ -$ID,2$F64 best_score=9999.0000; -$ID,-2$$TR,"FlapBat"$ -$ID,2$F64 best_score=16.3077; -$ID,-2$$TR,"XCaliber"$ -$ID,2$I64 best_score=20; -I64 msg_flags=1; $ID,-2$$TR,"BomberGolf"$ $ID,2$I64 best_score=175; -$ID,-2$$TR,"TimeOut"$ -$ID,2$I64 best_score=11291; -$ID,-2$$ID,-2$$TR,"DemoCompany"$ -$ID,2$ -$TR,"Game1"$ -$ID,2$F64 best_score=180.03208; -$TR,"SimpleVal"$ -$ID,2$1400; -$ID,-2$$ID,-2$ \ No newline at end of file +$ID,-2$$TR,"OSTestSuite"$ +$ID,2$progress1_tf=0.000;progress2_tf=0.000; +progress3_tf=0.000;progress4_tf=220.470; +$ID,-2$$TR,"Titanium"$ +$ID,2$I64 best_score=16469; +$ID,-2$$TR,"XCaliber"$ +$ID,2$I64 best_score=90; +I64 msg_flags=3; +$ID,-2$$TR,"Talons"$ +$ID,2$F64 best_score=9999.0000; +$ID,-2$$TR,"CircleTrace"$ +$ID,2$F64 best_score=4.9425; +$ID,-2$$TR,"TOSRegen"$ +$ID,2$progress1_tf=0.000;progress2_tf=0.000; +progress3_tf=0.000;progress4_tf=174.320; +$ID,-2$$ID,-2$$TR,"Once"$ +$ID,2$$TR,"Adam"$ +$ID,2$$ID,-2$$TR,"User"$ +$ID,2$$ID,-2$$ID,-2$ \ No newline at end of file diff --git a/Demo/AcctExample/TOSBlog.HC b/Demo/AcctExample/TOSBlog.HC index f35fd5f..f85e271 100644 --- a/Demo/AcctExample/TOSBlog.HC +++ b/Demo/AcctExample/TOSBlog.HC @@ -17,7 +17,7 @@ U8 *BlogLocalFile(CDate cdt=0) CDateStruct ds; if (!cdt) cdt=Now+local_time_offset; Date2Struct(&ds,cdt); - StrPrint(file,"%s/" PERSONAL_INITIALS "%02d%02d%02d.DD.Z", + StrPrint(file,"%s/" INS_REG_PERSONAL_INITIALS "%02d%02d%02d.DD.Z", BlogLocalDir(cdt),ds.year%100,ds.mon,ds.day_of_mon); return file; } @@ -39,7 +39,7 @@ U8 *BlogWebFile(CDate cdt=0) CDateStruct ds; if (!cdt) cdt=Now+local_time_offset; Date2Struct(&ds,cdt); - StrPrint(file,"%s/" PERSONAL_INITIALS "%02d%02d%02d.DD.Z", + StrPrint(file,"%s/" INS_REG_PERSONAL_INITIALS "%02d%02d%02d.DD.Z", BlogWebDir(cdt),ds.year%100,ds.mon,ds.day_of_mon); return file; } @@ -71,13 +71,13 @@ U0 BlogScrnShot() { Bool old_cursor=DocCursor; CDC *dc1,*dc2; - U8 *old_fp_draw_input_ptr=gr.fp_draw_input_ptr; - gr.fp_draw_input_ptr=NULL; + U8 *old_fp_draw_ms=gr.fp_draw_ms; + gr.fp_draw_ms=NULL; Refresh(2); dc1=DCScrnCapture; dc2=DCExt(dc1,0,FONT_HEIGHT,GR_WIDTH-1,GR_HEIGHT-1); BlogDCImgWrite(dc2); - gr.fp_draw_input_ptr=old_fp_draw_input_ptr; + gr.fp_draw_ms=old_fp_draw_ms; DCDel(dc1); DCDel(dc2); DocCursor(old_cursor); @@ -92,23 +92,21 @@ public U0 MakeWebSitePartial() MkDir("D:/Wb/Home/Web/TAD/BlogDir"); FreshenWebDir("/Home/Web"); - FreshenWebDir("/Home/Web/" PERSONAL_INITIALS); + FreshenWebDir("/Home/Web/" INS_REG_PERSONAL_INITIALS); FreshenWebDir(BlogLocalDir+2); Drv('C'); } -public U0 Blog(Bool god_misc2=FALSE) +public U0 Blog(Bool ALT_F6=TRUE) { if (!FileFind(BlogLocalFile,,FUF_JUST_FILES)) - Copy("~/Web/" PERSONAL_INITIALS "/DailyBlogHeader.DD.Z", + Copy("~/Web/" INS_REG_PERSONAL_INITIALS "/DailyBlogHeader.DD.Z", BlogLocalFile); AutoComplete; WinBorder; WinMax; Msg(MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN|SCF_CTRL); - if (god_misc2) - Msg(MSG_KEY_DOWN_UP,0,SC_F7|SCF_SHIFT|SCF_ALT); - else { + if (ALT_F6) { Msg(MSG_KEY_DOWN_UP,0,SC_F6|SCF_ALT); Msg(MSG_KEY_DOWN_UP,'\n',0); } diff --git a/Demo/AcctExample/TOSCfg.HC b/Demo/AcctExample/TOSCfg.HC index 9b099c7..31119f0 100644 --- a/Demo/AcctExample/TOSCfg.HC +++ b/Demo/AcctExample/TOSCfg.HC @@ -1,21 +1,17 @@ #help_index "TOS" -RegSetDftEntry("TempleOS/Staff", -"#define PERSONAL_INITIALS \"TAD\"\n" -"#define MACHINE_CFG 0\n" -); -RegExeBranch("TempleOS/Staff"); - #define PERSONAL_WEB "http:/" "/www.templeos.org/Wb" -#define BLOG_BASE "/Home/Web/" PERSONAL_INITIALS "/BlogDir" -#define DAILY_BASE "/Home/Web/" PERSONAL_INITIALS "/DailyBlog" +#define BLOG_BASE "/Home/Web/"\ + INS_REG_PERSONAL_INITIALS "/BlogDir" +#define DAILY_BASE "/Home/Web/"\ + INS_REG_PERSONAL_INITIALS "/DailyBlog" #define BLOG_LOCAL_BASE "::" BLOG_BASE #define BLOG_WEB_BASE PERSONAL_WEB BLOG_BASE #define SLOP BLK_SIZE U0 TOSBootRescueDrv1() { - CBinFile *bfh=sys_boot_base-sizeof(CBinFile); + CBinFile *bfh=mem_boot_base-sizeof(CBinFile); bfh(I64)+=bfh->file_size-1; DefinePrint("TOS_BOOT_RESCUE_DRV","0x%X", CeilI64(SYS_KERNEL_END+SLOP,BLK_SIZE)); @@ -34,19 +30,19 @@ U0 TOSBootRescueDrv2() U0 TOSInit() { - switch (MACHINE_CFG) { + switch (INS_REG_MACHINE_NUM) { case 1: //TAD Native Machine DefinePrint("CFG_RAM_DRVS", - "\"b\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); - DefinePrint("CFG_HARD_DRVS","\"cs0xFE00\n0xFE10\n0\""); - DefinePrint("CFG_DVD_DRVS","\"ts0x1F0\n1\""); + "\"B\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); + DefinePrint("CFG_HARD_DRVS","\"C\ns0xFE00\n0xFE10\n0\""); + DefinePrint("CFG_DVD_DRVS","\"Ts0x1F0\n1\""); DefinePrint("CFG_DSK_CACHE","\"Scale2Mem(0x80000,0x8000000)\n\""); DefinePrint("TOS_HDS","\"CD\""); DefinePrint("TOS_MASTER_BOOT_DRVS","\"C\""); break; default: DefinePrint("CFG_RAM_DRVS", - "\"b\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); + "\"B\nScale2Mem(2048,0x100000,4*1024*1024*1024)\n\""); DefinePrint("CFG_HARD_DRVS","\"\""); DefinePrint("CFG_DVD_DRVS","\"\""); DefinePrint("CFG_DSK_CACHE","\"Scale2Mem(0x80000,0x8000000)\n\""); @@ -58,16 +54,16 @@ U0 TOSInit() #define TOS_ISO_NAME "B:/TempleOSCD.ISO" #define TOS_ISO_C_NAME "B:/TempleOSCD.ISO.C" #define TOS_DISTRO_DIR "B:/Distro" -#define CFG_OPTS "AutoMountIDE\nCT\n" -#define CFG_DBG_OPTS "AutoMountIDE\nCT"\ +#define CFG_OPTS "StaffMode\nAutoMountIDE\nCT\n" +#define CFG_DBG_OPTS "StaffMode\nAutoMountIDE\nCT"\ "HeapInit\n130\nMemInit\n131\nVarInit\n132\n\n" -#define CFG_DBGZ_OPTS "AutoMountIDE\nCT"\ +#define CFG_DBGZ_OPTS "StaffMode\nAutoMountIDE\nCT"\ "HeapInit\n0\nMemInit\n0\nVarInit\n0\n\n" #define TOS_CFG "\n" CFG_RAM_DRVS CFG_DVD_DRVS CFG_HARD_DRVS "\n"\ CFG_DSK_CACHE CFG_OPTS -#define TOS_DVD_CFG "Tb\n0x20000\nt \n\n\nAutoMountIDE\nCT\n" +#define TOS_DVD_CFG "TB\n0x20000\nT \n\n\nStaffMode\nAutoMountIDE\nCT\n" #define TOS_DVD_DBG_CFG "A" CFG_BOOT_RESCUE_DRV\ - "b\nScale2Mem(2048,0x40000)\n\n\n"\ + "B\nScale2Mem(2048,0x40000)\n\n\n"\ "NoMP\nTextMode\nDontProbe\nBootRescueDrv\n"\ "C:" CFG_BOOT_RESCUE_DRV_FILE "\n"\ CFG_BOOT_RESCUE_DRV_START "\n\n" diff --git a/Demo/AcctExample/TOSDistro.HC b/Demo/AcctExample/TOSDistro.HC index bd04128..031db11 100644 --- a/Demo/AcctExample/TOSDistro.HC +++ b/Demo/AcctExample/TOSDistro.HC @@ -2,18 +2,29 @@ #help_index "TOS" +#define MAKE_STD 1 +#define MAKE_STD_RS 0 +#define MAKE_ULTRA 1 +#define MAKE_ULTRA_RS 0 +#define MAKE_SUP1 1 +#define MAKE_WEB 1 +#define MAKE_BOOKS1 0 +#define MAKE_BOOKS2 0 +#define MAKE_DBG 0 +#define MAKE_STAFF 1 + U8 TOSGetDrv() { I64 res; "Drive (%s):",TOS_HDS; - res=ToUpper(GetChar); + res=Let2Let(GetChar); '\n'; return res; } -U0 TOSBootHDIns(U8 drv_let) +U0 TOSBootHDIns(U8 drv_let=0) { - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); In(TOS_CFG); BootHDIns(drv_let); if (StrOcc(TOS_MASTER_BOOT_DRVS,drv_let)) @@ -23,8 +34,8 @@ U0 TOSBootHDIns(U8 drv_let) U0 TOSCopyDrv(U8 src,U8 dst) { U8 buf_s[STR_LEN],buf_d[STR_LEN]; - src=ToUpper(src); - dst=ToUpper(dst); + src=Let2Let(src); + dst=Let2Let(dst); Fmt(dst,,FALSE,FSt_FAT32); @@ -51,7 +62,7 @@ public U0 CopySongs(U8 threshold='7') { CDoc *doc; CDocEntry *doc_e; - CDirEntry *tmpde=FilesFind("/Home/Sup1/Sup1Psalmody/*.HC*", + CDirEntry *tmpde=FilesFind("/Home/Sup1/Sup1Hymns/*.HC*", FUF_CLUSTER_ORDER),*tmpde1=tmpde; DelTree("/Apps/Psalmody/Examples"); MkDir("/Apps/Psalmody/Examples"); @@ -70,7 +81,7 @@ U0 DistroPrep() { Del("/Home/Demo*"); DelTree("/Home/*Tmp.DD.Z"); - if (FileFind("/Home/Sup1/Sup1Psalmody")) + if (FileFind("/Home/Sup1/Sup1Hymns")) CopySongs; DelTree("/Tmp"); @@ -85,6 +96,8 @@ U0 DistroPrep() DelTree("/Demo/AcctExample/Budget"); DelTree("/Demo/AcctExample/Private"); DelTree("/Demo/AcctExample/Sup1"); + DelTree("/Demo/AcctExample/Books1"); + DelTree("/Demo/AcctExample/Books2"); DelTree("/Demo/AcctExample/Web"); Del("/Demo/AcctExample/Test*"); Copy("/Home/Web/index.DD.Z", @@ -134,7 +147,6 @@ U0 MakeBootRescueDrvFile() Copy("C:/Adam/Training.HC.Z","A:/Adam"); Copy("C:/Adam/AMem.HC.Z", "A:/Adam"); Copy("C:/Adam/TaskRep.HC.Z", "A:/Adam"); - Copy("C:/Adam/AMathODE.HC.Z","A:/Adam"); FileWrite("C:" CFG_BOOT_RESCUE_DRV_FILE, bd->RAM_dsk,(bd->max_blk+1)<catch_except=TRUE; } UpdateISODocDefines; -public U0 MakeDistrosAndBackUp() + +U0 TOSProgress(U8 *st) +{ + U8 buf[STR_LEN]; + StrPrint(buf,"%d. %s",++progress4,st); + "$$PURPLE$$$$TX+CX,\"%s\"$$$$FG$$\n",buf; + StrCpy(progress3_desc,buf); +} + +U0 TOSProfanity() +{ + Profanity(,"D:/Wb/*;" + "!*/Misc/PCIDevices.DD*;!*/Misc/Bible.TXT*;" + "!*/Books?/*;!*/Sup1/Sup1Words/*;!*/Sup1/Sup1Blog/Profanity.DD*;" + "!*/Sup1/Sup1Blog/NumBible.TXT*;!*/God/Vocab.DD*" + ); +} + +public U0 TOSRegen() { SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - progress4=*progress4_desc=0; - progress4_max=18; + progress3_max=1; + progress4=-1; + *progress4_desc=0; + progress4_max=12+MAKE_STD+MAKE_STD_RS+MAKE_ULTRA+MAKE_ULTRA_RS+MAKE_SUP1+ + MAKE_WEB+MAKE_BOOKS1+MAKE_BOOKS2+MAKE_DBG+MAKE_STAFF; progress4_t0=tS; + RegExe("TempleOS/TOSRegen"); + + TOSProgress("ChkDsk All"); AutoComplete; WinBorder; WinMax; - ChkAll; progress4++; + ChkAll; - MakeLineRepFile; progress4++; - TOSCopyDrv('C','D'); progress4++; - DelTree ("D:/Wb"); progress4++; - CopyTree("C:/","D:/Wb"); progress4++; + TOSProgress("Make LineRep"); + MakeLineRepFile; + + TOSProgress("Copy C to D"); + TOSCopyDrv('C','D'); + + TOSProgress("Del D:/Wb"); + DelTree ("D:/Wb"); + + TOSProgress("Copy C to D:/Wb"); + CopyTree("C:/","D:/Wb"); DocClear; - MakeStdDistro; progress4++; +#if MAKE_STD + TOSProgress("Make Standard Distro ISO"); + MakeStdDistro; DocClear; - Move(TOS_ISO_NAME,"D:/Wb/TempleOSCD.ISO"); progress4++; - -// MakeStdRedSeaDistro; progress4++; -// DocClear; -// Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSCDRS.ISO"); progress4++; - - MakeUltraDistro; progress4++; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSCD.ISO"); +#endif +#if MAKE_STD_RS + TOSProgress("Make Standard RedSea Distro ISO"); + MakeStdRedSeaDistro; DocClear; - Move(TOS_ISO_NAME,"D:/Wb/TempleOSUltra.ISO"); progress4++; - -// MakeUltraRedSeaDistro; progress4++; -// DocClear; -// Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSUltraRS.ISO"); progress4++; - - MakeSup1ISO; progress4++; + Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSCDRS.ISO"); +#endif +#if MAKE_ULTRA + TOSProgress("Make Ultra Distro ISO"); + MakeUltraDistro; DocClear; - Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSSup1.ISO"); progress4++; - -// MakeDbgDistro; progress4++; -// DocClear; -// Move(TOS_ISO_NAME,"D:/Wb/TempleOSDbg.ISO"); progress4++; - - MakeStaffDistro; progress4++; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSUltra.ISO"); +#endif +#if MAKE_ULTRA_RS + TOSProgress("Make Ultra RedSea Distro ISO"); + MakeUltraRedSeaDistro; DocClear; - Move(TOS_ISO_NAME,"D:/Wb/TempleOSStaff.ISO"); progress4++; + Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSUltraRS.ISO"); +#endif +#if MAKE_DBG + TOSProgress("Make Dbg Distro ISO"); + MakeDbgDistro; + DocClear; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSDbg.ISO"); +#endif +#if MAKE_STAFF + TOSProgress("Make Staff Distro ISO"); + MakeStaffDistro; + DocClear; + Move(TOS_ISO_NAME,"D:/Wb/TempleOSStaff.ISO"); +#endif + +#if MAKE_SUP1 + TOSProgress("Make Supplemental #1 ISO"); + RedSeaISO("D:/Wb/TempleOSSup1","C:/Home/Sup1"); +#endif +#if MAKE_WEB + TOSProgress("Make www.templeos.org ISO"); + RedSeaISO("D:/Wb/TempleOSWeb","C:/Home/Web"); +#endif +#if MAKE_BOOKS1 + TOSProgress("Make Books #1 ISO"); + RedSeaISO("D:/Wb/TempleOSBooks1","C:/Home/Books1"); +#endif +#if MAKE_BOOKS2 + TOSProgress("Make Books #2 ISO"); + RedSeaISO("D:/Wb/TempleOSBooks2","C:/Home/Books2"); +#endif UpdateISODocDefines; - Cd("C:/"); - DocClear; - "$$PURPLE$$Lines longer than 80 columns:$$FG$$\n"; + + TOSProgress("Check for Long Lines"); if (LongLines) throw; - progress4++; DocClear; - "$$PURPLE$$Broken DolDoc Links:$$FG$$\n"; + TOSProgress("Check for Broken DolDoc Links"); if (LinkChk) throw; - progress4++; DocClear; - MakeSymFiles; progress4++; + TOSProgress("Make Symbol Files"); + MakeSymFiles; DocClear; - MakeWebSite; progress4++; + TOSProgress("Make WebSite"); + MakeWebSite; + DocClear; + TOSProgress("Check WebSite for Profanity"); + if (TOSProfanity) + throw; + + TOSProgress("ChkDsk All"); Drv('C'); - ChkAll; progress4++; + ChkAll; + + TOSProgress("Done"); SettingsPop; "Elapsed Time:%5.3f\n",tS-progress4_t0; - ProgressBarsRst; + ProgressBarsRst("TempleOS/TOSRegen"); } public U0 PreBackUp() diff --git a/Demo/AcctExample/TOSHolySpirit.HC b/Demo/AcctExample/TOSHolySpirit.HC index 10e064e..9fbb993 100644 --- a/Demo/AcctExample/TOSHolySpirit.HC +++ b/Demo/AcctExample/TOSHolySpirit.HC @@ -79,8 +79,7 @@ U0 TOSBookLines(U8 *book_filename,I64 book_lines,U8 *st,I64 num_lines, verse=BibleLine2Verse(start); DocPrint(doc_out,"$TX,"KingJamesBible",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/NumBible.TXT"$ (%s)\n\nGod says...\n$$RED$$",verse); Free(verse); - } else if (StrMatch("Kosher",book_filename)) - DocPrint(doc_out,"$TX,"KosherTexts",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/Kosher.TXT"$\n\nGod says...\n$$RED$$"); + } doc_in=DocNew; BookLines(doc_in,start,num_lines,book_filename); @@ -116,52 +115,69 @@ U0 TOSBookLines(U8 *book_filename,I64 book_lines,U8 *st,I64 num_lines, #define GBP_MEDIUM 1 #define GBP_LONG 2 -public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512, +public U0 GodBooksPassage(U8 *files_find_mask,U8 *file_mask="*",I64 len=512, I64 rand_i32=MIN_I64,I64 verbosity=GBP_SHORT) {//Make God pick a book passage. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$ CDirEntry *tmpde=FilesFind(files_find_mask, FUF_RECURSE|FUF_JUST_FILES|FUF_JUST_TXT), - *tmpde1=tmpde; + *tmpde1,*tmpde2,**tmpde3; I64 i=0; U8 *st,*st2=NULL; + + tmpde3=&tmpde2; + tmpde2=NULL; while (tmpde) { - st=FileRead(tmpde->full_name); - tmpde->user_data=StrLen(st); - if (verbosity==GBP_LONG) - "%08X-",i; - if (tmpde->user_data>=len) - i+=tmpde->user_data+1-len; - if (verbosity==GBP_LONG) - "%08X:$$LK,\"%s\",A=\"FI:%s\"$$\n", - i-1,tmpde->full_name+2,tmpde->full_name; - Free(st); - tmpde=tmpde->next; + tmpde1=tmpde->next; + if (WildMatch(tmpde->full_name,file_mask)) { + *tmpde3=tmpde; + tmpde3=&tmpde->next; + } else + DirEntryDel(tmpde); + tmpde=tmpde1; } - if (rand_i32<0) - rand_i32=GodBits(32); - if (verbosity==GBP_LONG) - '\n'; - if (verbosity>=GBP_MEDIUM) - "%08X*%08X",rand_i32,i; - i*=rand_i32; - if (verbosity>=GBP_MEDIUM) - "=%08X.%08X\n",i.u32[1],i.u32[0]; - i=i.u32[1]; - tmpde=tmpde1; - while (tmpde) { - if (!st2 && tmpde->user_data>=len) { - i-=tmpde->user_data+1-len; - if (i<0) { - st=FileRead(tmpde->full_name); - st2=st+(tmpde->user_data+1-len)+i; - st2[len]=0; - "%s\nGod says...\n$$RED$$%s$$FG$$\n",tmpde->full_name,st2; - Free(st); - } + *tmpde3=NULL; + + if (tmpde=tmpde2) { + while (tmpde) { + st=FileRead(tmpde->full_name); + tmpde->user_data=StrLen(st); + if (verbosity==GBP_LONG) + "%08X-",i; + if (tmpde->user_data>=len) + i+=tmpde->user_data+1-len; + if (verbosity==GBP_LONG) + "%08X:$$LK,\"%s\",A=\"FI:%s\"$$\n", + i-1,tmpde->full_name+2,tmpde->full_name; + Free(st); + tmpde=tmpde->next; } - tmpde=tmpde->next; + if (rand_i32<0) + rand_i32=GodBits(32); + if (verbosity==GBP_LONG) + '\n'; + if (verbosity>=GBP_MEDIUM) + "%08X*%08X",rand_i32,i; + i*=rand_i32; + if (verbosity>=GBP_MEDIUM) + "=%08X.%08X\n",i.u32[1],i.u32[0]; + i=i.u32[1]; + + tmpde=tmpde2; + while (tmpde) { + if (!st2 && tmpde->user_data>=len) { + i-=tmpde->user_data+1-len; + if (i<0) { + st=FileRead(tmpde->full_name); + st2=st+(tmpde->user_data+1-len)+i; + st2[len]=0; + "%s\nGod says...\n$$RED$$%s$$FG$$\n",tmpde->full_name,st2; + Free(st); + } + } + tmpde=tmpde->next; + } + DirTreeDel(tmpde2); } - DirTreeDel(tmpde1); } U8 *FileDblRead(U8 *filename,I64 line) @@ -542,7 +558,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) StrPrint(hex,"%s%s",gm->rnd0,gm->rnd1); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -550,7 +566,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd2,gm->rnd3); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -558,7 +574,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd4,gm->rnd5); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -566,7 +582,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd6,gm->rnd7); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -574,7 +590,7 @@ U0 TOSGodDoodle(CNISTBeaconHexWordForm *gm,Bool NIST) CatPrint(hex,"%s%s",gm->rnd8,gm->rnd9); if (NIST) { gm->timestamp=FloorI64(CDate2Unix(Now),60); - if (DocForm(gm(CNISTBeaconHexWordForm *))) + if (PopUpForm(gm(CNISTBeaconHexWordForm *))) NISTBeaconURL(gm->timestamp); else goto gd_done; @@ -598,7 +614,7 @@ I64 GodMiscHeader(U8 *type=NULL) CDateStruct ds; I64 res; if (type) { - res=FloorI64(CDate2Unix(Now+120*CDATE_FREQ),60); + res=FloorI64(CDate2Unix(Now+5*60*CDATE_FREQ),60); Date2Struct(&ds,Unix2CDate(res)+local_time_offset+30*CDATE_FREQ); "Response of %s at %02d:%02d Timestamp:%d.\n\n",type,ds.hour,ds.min,res; In("%c//Response of %s at %02d:%02d Timestamp:%d.\n\n", @@ -609,69 +625,54 @@ I64 GodMiscHeader(U8 *type=NULL) return res; } -RegSetDftEntry("TempleOS/TOSGodMisc","I64 tos_timestamp=0,tos_type=0;\n"); -RegExeBranch("TempleOS/TOSGodMisc"); - U0 NISTGodMisc1() { - tos_type=PopUpPickLst("ExtDec5Bible\0ExtDec5Kosher\0LinuxWords\0HappyWords\0" + I64 timestamp,type; + type=PopUpPickLst("ExtDec5Bible\0LinuxWords\0HappyWords\0" "Hex5Bible\0Hex8Books\0Doodle\0Movie\0Painting\0Metallica\0"); - switch (tos_type) { - case: tos_timestamp=GodMiscHeader("Bible"); break; - case: tos_timestamp=GodMiscHeader("Kosher"); break; - case: tos_timestamp=GodMiscHeader("LinuxWords"); break; - case: tos_timestamp=GodMiscHeader("HappyWords"); break; - case: tos_timestamp=GodMiscHeader("Bible"); break; - case: tos_timestamp=GodMiscHeader("BookPick"); break; - case: tos_timestamp=GodMiscHeader("Doodle"); break; - case: tos_timestamp=GodMiscHeader("Movie"); break; - case: tos_timestamp=GodMiscHeader("Painting"); break; - case: tos_timestamp=GodMiscHeader("Metallica"); break; + switch (type) { + case: timestamp=GodMiscHeader("Bible"); break; + case: timestamp=GodMiscHeader("LinuxWords"); break; + case: timestamp=GodMiscHeader("HappyWords"); break; + case: timestamp=GodMiscHeader("Bible"); break; + case: timestamp=GodMiscHeader("BookPick"); break; + case: timestamp=GodMiscHeader("Doodle"); break; + case: timestamp=GodMiscHeader("Movie"); break; + case: timestamp=GodMiscHeader("Painting"); break; + case: timestamp=GodMiscHeader("Metallica"); break; } - RegWriteBranch("TempleOS/TOSGodMisc","I64 tos_timestamp=%d,tos_type=%d;\n", - tos_timestamp,tos_type); + Once("InStr(\"\\\"Blog(FALSE);\n\\\";" + "NISTGodMisc2(%d,%d);\");",timestamp,type); } -U0 NISTGodMisc2() +U0 NISTGodMisc2(I64 timestamp,I64 type) { CRandExtDec5Form *gm=CAlloc(sizeof(CRandExtDec5Form)); - - gm->timestamp=tos_timestamp; - tos_timestamp=0; - RegWriteBranch("TempleOS/TOSGodMisc","I64 tos_timestamp=%d,tos_type=%d;\n", - tos_timestamp,tos_type); - - switch (tos_type) { + gm->timestamp=timestamp; + switch (type) { case: - if (DocForm(gm(CRandExtDec5Form *))) { + if (PopUpForm(gm(CRandExtDec5Form *))) { NISTBeaconURL(gm->timestamp); TOSBookLines("~/Sup1/Sup1Blog/NumBible.TXT",ST_BIBLE_LINES, gm->rnd0,20,-5,FALSE,FALSE); } break; case: - if (DocForm(gm(CRandExtDec5Form *))) { - NISTBeaconURL(gm->timestamp); - TOSBookLines("~/Sup1/Sup1Blog/Kosher.TXT",100000, - gm->rnd0,20,-5,FALSE,FALSE); - } - break; - case: - if (DocForm(gm(CHexWordForm *))) { + if (PopUpForm(gm(CHexWordForm *))) { NISTBeaconURL(gm->timestamp); Adam("GodInit(\"~/Sup1/Sup1Words/LinuxDict.TXT*\");"); GodWordBatch(gm); } break; case: - if (DocForm(gm(CHexWordForm *))) { + if (PopUpForm(gm(CHexWordForm *))) { NISTBeaconURL(gm->timestamp); Adam("GodInit(\"~/Sup1/Sup1Words/HappyWords.TXT*\");"); GodWordBatch(gm); } break; case: - if (DocForm(gm(CRandHex5Form *))) { + if (PopUpForm(gm(CRandHex5Form *))) { "$$TX,\"How this random Bible passage was chosen.\"," "HTML=\"http://www.templeos.org/Wb" "/Home/Web/TAD/NISTPassage.html\"$$\n"; @@ -681,23 +682,23 @@ U0 NISTGodMisc2() } break; case: - if (DocForm(gm(CRandHex8Form *))) { + if (PopUpForm(gm(CRandHex8Form *))) { "$$TX,\"How this random book pick was chosen.\"," "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/NISTPick001.html\"$$\n"; + "/Home/Web/TAD/NISTPick002.html\"$$\n"; NISTBeaconURL(gm->timestamp); - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*",, + GodBooksPassage("C:/Home/*","C:/Home/Books?/*",, Str2I64(gm->rnd0,16),GBP_MEDIUM); } break; case: - if (DocForm(gm(CHexWordForm *))) { + if (PopUpForm(gm(CHexWordForm *))) { NISTBeaconURL(gm->timestamp); TOSGodDoodle(gm,TRUE); } break; case: - if (DocForm(gm(CMoviesForm *))) { + if (PopUpForm(gm(CMoviesForm *))) { NISTBeaconURL(gm->timestamp); GodVideo("Top 100 Movies", "http://www.afi.com/100years/movies10.aspx", @@ -705,7 +706,7 @@ U0 NISTGodMisc2() } break; case: - if (DocForm(gm(CPaintingsForm *))) { + if (PopUpForm(gm(CPaintingsForm *))) { NISTBeaconURL(gm->timestamp); GodWebIdx("Top 100 Paintings", "http://www.brushwiz.com/most-famous-paintings", @@ -713,7 +714,7 @@ U0 NISTGodMisc2() } break; case: - if (DocForm(gm(CMetallicaForm *))) { + if (PopUpForm(gm(CMetallicaForm *))) { NISTBeaconURL(gm->timestamp); GodVideo("Metallica Song", "http://home.hccnet.nl/a.r.adams/lyrics/" @@ -746,7 +747,7 @@ U0 GodMisc() end: GodMiscHeader; "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; - switch (PopUpPickLst("ExtDec5Bible\0ExtDec5Kosher\0LinuxWords\0" + switch (PopUpPickLst("ExtDec5Bible\0LinuxWords\0" "HappyWords\0Hex5Bible\0Hex8Books\0Doodle\0Movie\0Painting\0" "Metallica\0")) { case: @@ -754,11 +755,6 @@ U0 GodMisc() TOSBookLines("~/Sup1/Sup1Blog/NumBible.TXT",ST_BIBLE_LINES, gm->rnd0,20,-5,FALSE,FALSE); break; - case: - if (DocForm(gm(CRandExtDec5Form *))) - TOSBookLines("~/Sup1/Sup1Blog/Kosher.TXT",100000, - gm->rnd0,20,-5,FALSE,FALSE); - break; case: if (DocForm(gm(CHexWordForm *))) { Adam("GodInit(\"~/Sup1/Sup1Words/LinuxDict.TXT*\");"); @@ -784,8 +780,8 @@ U0 GodMisc() if (DocForm(gm(CRandHex8Form *))) { "$$TX,\"How this random book pick was chosen.\"," "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/Pick001.html\"$$\n"; - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*",, + "/Home/Web/TAD/NISTPick002.html\"$$\n"; + GodBooksPassage("C:/Home/*","C:/Home/Books?/*",, Str2I64(gm->rnd0,16),GBP_MEDIUM); } break; @@ -831,18 +827,13 @@ U0 GodMisc() end: GodMiscHeader; "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; - switch (PopUpPickLst("ExtDec5Bible\0ExtDec5Kosher\0HexWordBatch\0" + switch (PopUpPickLst("ExtDec5Bible\0HexWordBatch\0" "Hex5Bible\0Hex8Books\0Movie\0Metallica\0")) { case: if (DocForm(gm(CRandExtDec5Form *))) TOSBookLines("~/Sup1/Sup1Blog/NumBible.TXT",ST_BIBLE_LINES, gm->rnd0,20,-5,FALSE,FALSE); break; - case: - if (DocForm(gm(CRandExtDec5Form *))) - TOSBookLines("~/Sup1/Sup1Blog/Kosher.TXT",100000, - gm->rnd0,20,-5,FALSE,FALSE); - break; case: if (DocForm(gm(CHexWordForm *))) GodWordBatch(gm); @@ -860,8 +851,8 @@ U0 GodMisc() if (DocForm(gm(CRandHex8Form *))) { "$$TX,\"How this random book pick was chosen.\"," "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/Pick001.html\"$$\n"; - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*",, + "/Home/Web/TAD/NISTPick002.html\"$$\n"; + GodBooksPassage("C:/Home/*","C:/Home/Books?/*",, Str2I64(gm->rnd0,16),GBP_MEDIUM); } break; @@ -897,8 +888,8 @@ U0 GodMisc() case: GodMiscHeader; FifoU8Flush(god.fifo); - GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); - GodBooksPassage("C:/Home/Sup1/Sup1Texts/*"); + GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); + GodBooksPassage("C:/Home/*","C:/Home/Books?/*"); break; } } @@ -1134,7 +1125,7 @@ U0 GodCodeJmp() } FifoU8Flush(god.fifo); - GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); + GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS); num=GodBits(GOD_GOOD_BITS)%cnt; tmpde=tmpde1; @@ -1151,12 +1142,12 @@ U0 GodCodeJmp() Free(st); } -RegSetDftEntry("TempleOS/TOSGodOffer","I64 tos_gus_gwen=0;\n"); -RegExeBranch("TempleOS/TOSGodOffer"); +RegDft("TempleOS/TOSGodOffer","I64 tos_gus_gwen=0;\n"); +RegExe("TempleOS/TOSGodOffer"); U0 GodOffer() { - switch (PopUpPickLst("MosesComic\0GusGwen\0Fiction\0")) { + switch (PopUpPickLst("MosesComic\0GusGwen\0Fiction\0DyingLight\0")) { case: "---- Moses Comic ---- " "(Set in the $TX,"Numbers 11",HTML="http://www.biblegateway.com/passage/?search=Numbers%%%%2011&version=NIV"$ " @@ -1165,17 +1156,23 @@ U0 GodOffer() "God says, \"\"\n"; break; case: - "---- Gus and Gwen Soap Opera Episode %d ----\n" + "---- Gus and Gwen: A soap opera Episode %d ----\n" "Gus says, \"\"\n" "Gwen says, \"\"\n" "-----------------------------------------\n",tos_gus_gwen++; - RegWriteBranch("TempleOS/TOSGodOffer","I64 tos_gus_gwen=%d;\n", + RegWrite("TempleOS/TOSGodOffer","I64 tos_gus_gwen=%d;\n", tos_gus_gwen); break; case: "---- $TX,"Collaborative Fiction",HTML="http://en.wikipedia.org/wiki/Collaborative_fiction"$ ----\n" "Once upon a time "; break; + case: + "---- The Dying Light: A soap opera ----\n" + "Dr. Hans says, \"\"\n" + "Nurse Ruth, \"\"\n" + "---------------------------------------\n"; + break; } } diff --git a/Demo/AcctExample/TOSMisc.HC b/Demo/AcctExample/TOSMisc.HC index 3045293..d7d3098 100644 --- a/Demo/AcctExample/TOSMisc.HC +++ b/Demo/AcctExample/TOSMisc.HC @@ -1,46 +1,6 @@ #help_index "TOS" -public U0 CursorRemFile(U8 *filename) -{ - CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); - DocWrite(doc); - DocDel(doc); -} -public U0 CursorRem(U8 *files_find_mask="*") -{ - I64 fuf_flags=0; - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+T+f+F+O"); - CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; - while (tmpde) { - CursorRemFile(tmpde->full_name); - Touch(tmpde->full_name,"",,tmpde->datetime); - tmpde=tmpde->next; - } - DirTreeDel(tmpde1); -} - -U0 UncollapseFile(U8 *filename,I64 *) -{ - CDoc *doc=DocRead(filename,DOCF_NO_CURSOR); - DocCollapse(FALSE,doc); - DocWrite(doc); - DocDel(doc); -} -public U0 Uncollapse(U8 *files_find_mask="*",U8 *fu_flags=NULL) -{ - I64 fuf_flags=0; - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+f+F+$$+O"); - ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags); - CDirEntry *tmpde=FilesFind(files_find_mask,fuf_flags),*tmpde1=tmpde; - while (tmpde && !Bt(&fuf_flags,FUf_CANCEL)) { - UncollapseFile(tmpde->full_name,&fuf_flags); - Touch(tmpde->full_name,"",,tmpde->datetime); - tmpde=tmpde->next; - } - DirTreeDel(tmpde1); -} - -#define VIDEO_FRAME_RATE 30 +#define VIDEO_FRAME_RATE 29.97 #define FG_JUST_AUDIO 0 #define FG_BOOT_DRV 1 @@ -104,7 +64,7 @@ public U0 FrameGrabberToggle() last_time=tS; if (fg_on) { fg_on=FALSE; - Snd(0); + Snd; wall->record=snd.record=FALSE; Sleep(1000); User("CopyVideo;Exit;\n"); @@ -113,7 +73,7 @@ public U0 FrameGrabberToggle() if (fg_mode!=FG_JUST_AUDIO) Spawn(&FrameGrabberTask,NULL,"Frame Grabber"); wall->record=snd.record=TRUE; - Snd(0); + Snd; } } } @@ -123,7 +83,7 @@ public U0 JukeSong(I64 num) AutoComplete; if (!fg_on) FrameGrabberToggle; - JukeSongsPuppet("~/Sup1/Sup1Psalmody",,num,num+1); + JukeSongsPuppet("~/Sup1/Sup1Hymns",,num,num+1); if (fg_on) FrameGrabberToggle; } @@ -133,7 +93,7 @@ public U0 JukeLines(I64 start_line,I64 end_line) AutoComplete; if (!fg_on) FrameGrabberToggle; - JukeSongsPuppet("~/Sup1/Sup1Psalmody",,start_line*5,end_line*5); + JukeSongsPuppet("~/Sup1/Sup1Hymns",,start_line*5,end_line*5); if (fg_on) FrameGrabberToggle; } @@ -219,22 +179,18 @@ public U0 BMP2TXT(U8 *_in_name,U8 *_out_name=NULL) Free(out_name); } -RegSetDftEntry("TempleOS/TOSVideos", - "I64 tos_code_walk_thru=1,tos_after_egypt_in_action=1;\n"); -RegExeBranch("TempleOS/TOSVideos"); +RegDft("TempleOS/TOSVideos","I64 tos_code_walk_thru=1;\n"); +RegExe("TempleOS/TOSVideos"); U0 TOSRegInit() { DefinePrint("DD_CODE_WALK_THRU","Episode #%d",tos_code_walk_thru); - DefinePrint("DD_AFTER_EGYPT_IN_ACTION","Episode #%d", - tos_after_egypt_in_action); } TOSRegInit; U0 TOSRegWrite() { - RegWriteBranch("TempleOS/TOSVideos", - "I64 tos_code_walk_thru=%d,tos_after_egypt_in_action=%d;\n", - tos_code_walk_thru,tos_after_egypt_in_action); + RegWrite("TempleOS/TOSVideos", + "I64 tos_code_walk_thru=%d;\n",tos_code_walk_thru); TOSRegInit; } @@ -263,23 +219,6 @@ U8 *TOSYouTube() return res; } -U0 AfterEgyptInAction() -{ - SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - Adam("GodInit(\"/Adam/God/Vocab.DD*\");"); - AutoComplete; - WinBorder; - WinMax; - if (!fg_on) - PopUp("Sleep(50);FrameGrabberToggle;"); - Ed("~/Videos/AfterEgypt.DD.Z"); - Msg(MSG_KEY_DOWN_UP,CH_SPACE,0x3900000039); // - ExeFile("::/Apps/AfterEgypt/Run"); - SettingsPop; - tos_after_egypt_in_action++; - TOSRegWrite; -} - U0 CodeWalkThru() { SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ @@ -309,16 +248,40 @@ U0 TOSJukeVideo(I64 start=0,I64 end=10) Free(buf); AutoComplete; FrameGrabberToggle; - JukeSongsPuppet("~/Sup1/Sup1Psalmody",,start,end); + JukeSongsPuppet("~/Sup1/Sup1Hymns",,start,end); FrameGrabberToggle; } -#define MEM_TEST_SIZE 128*0x100000 +#define MEM_TEST_SIZE 1024*1024 U0 MemTest() { - while (sys_data_bp->alloced_u8s-sys_data_bp->used_u8s>MEM_TEST_SIZE*2) { - MemSet(MAlloc(MEM_TEST_SIZE),0x88,MEM_TEST_SIZE); - "%X\n",sys_data_bp->alloced_u8s-sys_data_bp->used_u8s; + U8 *b; + while (sys_data_bp->alloced_u8s-sys_data_bp->used_u8s>0x1000000) { + b=MAlloc(MEM_TEST_SIZE,Fs->data_heap); + MemSet(b,0x88,MSize(b)); + "Data:%X\n",sys_data_bp->alloced_u8s-sys_data_bp->used_u8s; + Yield; + } + while (sys_code_bp->alloced_u8s-sys_code_bp->used_u8s>0x1000000) { + b=MAlloc(MEM_TEST_SIZE,Fs->code_heap); + MemSet(b,0x88,MSize(b)); + "Code:%X\n",sys_code_bp->alloced_u8s-sys_code_bp->used_u8s; Yield; } } + +public I64 Profanity( + U8 *needle_filename="C:/Home/Sup1/Sup1Blog/Profanity.DD.Z", + U8 *files_find_mask="/*",U8 *fu_flags=NULL) +{//Scan for profanity. + CCmpCtrl *cc; + I64 res=0; + if (FileFind(needle_filename)) { + cc=CmpCtrlNew(MStrPrint("#include \"%s\"",needle_filename)); + while (Lex(cc)) + if (cc->token==TK_IDENT) + res+=Find(cc->cur_str,files_find_mask,fu_flags); + CmpCtrlDel(cc); + } + return res; +} diff --git a/Demo/AcctExample/TOSPolicies.DD b/Demo/AcctExample/TOSPolicies.DD new file mode 100644 index 0000000..6d59ab2 --- /dev/null +++ b/Demo/AcctExample/TOSPolicies.DD @@ -0,0 +1,118 @@ +$WW,1$$FG,5$$TX+CX,"TOS Staff Policies"$$FG$ + +* Motto: Run toward bugs, not away from bugs. + +* Be Metallica. Use short, sharp, powerful words, as though a song. + +* Be careful $FG,2$/Demo/AcctExample$FG$ doesn't get extra files. When you run TOSRegen(), it will copy home files to $FG,2$/Demo/AcctExample$FG$. + +* Be careful $FG,2$remote/Wb$FG$ site doesn't get extra files. If you delete or rename a file, also delete the $FG,2$remote/Wb$FG$ file from the site. + +$TR,"PreBackUp()"$ +$ID,2$ +Linux: Export Bookmarks to ~/TAD/Home/Sup1/Sup1Blog/Bookmarks.html + +Linux: >vm_in +{ + TempleOS: >PreBackUp; + TempleOS: Update Budget + TempleOS: >#include "::/Misc/OSTestSuite" + TempleOS: >Del("/Home/Demo*"); +} +$ID,-2$ +$TR,"Regen()"$ +$ID,2$ +When you do these four steps, do them as quickly as possible so that the $LK,"::/Doc/ChangeLog.DD"$ datetime approximately matches Kernel $LK,"sys_compile_time",A="MN:sys_compile_time"$. +{ + TempleOS: Add ordinary $LK,"::/Doc/ChangeLog.DD"$ entry. + TempleOS: >TOSBootHDIns('C'); + TempleOS: >BootRAM; + TempleOS: >TOSRegen; +} +$ID,-2$ +$TR,"NewRelease(Bool full=FALSE)"$ +$ID,2$ +if ($FG,2$full$FG$) + ]PreBackUp() + +]Regen() + +Linux: >vm_out + +if ($FG,2$full$FG$) { + Linux: Burn ~/TAD to memory stick. + + On other machine { + Linux: Copy ~/TAD from memory stick. + + VMware: Install new TempleOSStaff.ISO to machine named, "TOS". + { //2048 Meg RAM + TempleOS: $LK,"TOSStaffIns",A="MN:TOSStaffIns"$(); in VMware. + ]Regen() + TempleOS: >#include "::/Misc/OSTestSuite" + TempleOS: >Del("/Home/Demo*"); + } + + Linux: >emu_staff_new + Linux: >emu8core or >emu24core + { + TempleOS: $LK,"TOSStaffIns",A="MN:TOSStaffIns"$(); in QEMU. + ]Regen() + } + } +} + +Linux: CrossFTP sync ~/TAD/Site1/Wb to remote/Wb + +if ($FG,2$full$FG$) { + FileZilla + Upload ~/TAD/Site1/index.html to remote/index.html + Upload ~/TAD/Site1/TempleOS.html to remote/TempleOS.html +} + +In WebHost FileMgr { + Del { + remote/TempleOSCD.ISO + remote/TempleOSSup1.ISO.C + remote/TempleOSWeb.ISO.C + remote/TempleOSUltra.ISO + } + Copy up one level to remote root { + remote/Wb/TempleOSCD.ISO + remote/Wb/TempleOSSup1.ISO.C + remote/Wb/TempleOSWeb.ISO.C + remote/Wb/TempleOSUltra.ISO + } +} +$ID,-2$ +$TR,"NewVersion(Bool full=FALSE)"$ +$ID,2$ +Increment minor version number. + >$LK,"R",A="MN:R"$("3.12","3.13","-i-l"); //Approve by hand. + +Add version release notice in $LK,"::/Doc/ChangeLog.DD"$. + +]NewRelease(TRUE); + +Submit to www.betanews.com. +Send email to MajorGeeks. +if ($FG,2$full$FG$) { + Submit to www.upload.com. + Upload to SourceForge. +} +$ID,-2$ +$TR,"NewYearlyVersion()"$ +$ID,2$ +Increment major version number. + >$LK,"R",A="MN:R"$("3.13","4.00","-i-l"); //Approve by hand. + +Add version release notice in $LK,"::/Doc/ChangeLog.DD"$. + +$LK,"Update ::/Misc/PCIDevices.DD",A="FF:::/Adam/DevInfo.HC,PCIDevFileGen"$ + +Remove 6 months from bottom of $LK,"::/Doc/ChangeLog.DD"$. + +]NewVersion(TRUE); +$ID,-2$ +* If you change the compiler language syntax, immediately make a ]NewRelease(TRUE). + diff --git a/Demo/AcctExample/TOSToHtml.HC b/Demo/AcctExample/TOSToHtml.HC index 2293ee7..fca04a9 100644 --- a/Demo/AcctExample/TOSToHtml.HC +++ b/Demo/AcctExample/TOSToHtml.HC @@ -189,7 +189,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL, "\n" "\n" - "\n"; + "\n"; if (!body_header) body_header= "\n" "
\n";
@@ -244,8 +244,8 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 
       if (no_bwd)
 	while (colx)
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,FALSE,
-		" ",&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr&~DOCET_UNDERLINE,
+		&old_u32_attr,TRUE," ",&col,style_bitmap);
 
       link_st=NULL;
       if (doc_e->de_flags&DOCEF_HTML_LINK)
@@ -411,7 +411,7 @@ U0 TOSWebFile(U8 *name,Bool line_nums=FALSE)
   if (FileFind(name,&de)) {
     Free(de.full_name);
     "File:%s\n",name;
-    UncollapseFile(name,NULL);
+    Collapse(name,FALSE);
     Touch(name,"",,de.datetime);
     name2=ChgExt(name,"html");
 
@@ -430,7 +430,7 @@ U0 TOSWebFile(U8 *name,Bool line_nums=FALSE)
 	  "\n"
-	  "\n",
+	  "\n",
 
 	  ">3	//JIT Const.  Simple delay loop
+    MOV		RCX,cnts.time_stamp_freq>>3 //JIT Const.  Simple delay loop
 @@10:	LOOP	@@10
 
-    POP	RCX
+    POP		RCX
     LOOP	@@05
   }
-  Snd(0);
+  Snd;
   return i;
 }
 
diff --git a/Demo/Asm/AsmAndC2.HC b/Demo/Asm/AsmAndC2.HC
index 0f77bdf..98db273 100644
--- a/Demo/Asm/AsmAndC2.HC
+++ b/Demo/Asm/AsmAndC2.HC
@@ -7,7 +7,7 @@ it from the cmd line.
 
 //This is to demo glbl var access.
 //Glbs defined elsewhere can accessed too, like cnts.jiffies.
-I64 glbl_hz=400,glbl_hz_step=100,glbl_hz_base=100;
+I64 glbl_ona=Freq2Ona(400),glbl_ona_step=10,glbl_ona_base=Freq2Ona(100);
 
 asm {
 //Opcodes are slightly different to make writing my x86_64 assembler easier.
@@ -27,9 +27,9 @@ _BEEPS2::
 	PUSH	U64 [&cnts.jiffies]
 
 @@05:	PUSH	RCX
-//U0 $LK,"Beep",A="MN:Beep"$(I64 freq=500,Bool busy=FALSE)
+//U0 $LK,"Beep",A="MN:Beep"$(I8 ona=62,Bool busy=FALSE)
 	PUSH	FALSE	//Do not busy (spin) wait
-	PUSH	U64 [&glbl_hz]	//evaluated at run time
+	PUSH	U64 [&glbl_ona]	//evaluated at run time
 	CALL	&Beep
 	POP	RCX
 	LOOP	@@05
@@ -64,28 +64,22 @@ U0 AsmAndC2()
   asm {
     LIST
 //You can clobber RAX,RBX,RCX,RDX, but preserve the rest.
-
     MOV	RCX,R15 //You can clobber RAX,RBX,RCX,RDX. Preserve the rest.
-
     @@05:	PUSH	RCX
-//U0 $LK,"Snd",A="MN:Snd"$(F64 freq);
 
-    MOV	RAX,RCX	//freq=loop*100.0+100.0
-    IMUL2	RAX,glbl_hz_step	//evaluated at compile ttime
-    ADD	RAX,U64 [&glbl_hz_base] //evaluated at run time
+//U0 $LK,"Snd",A="MN:Snd"$(I8 ona);
+    MOV	RAX,RCX	//ona=loop*10+100.0Hz
+    IMUL2	RAX,glbl_ona_step //Intentionally evaluated at compile time
+    ADD	RAX,U64 [&glbl_ona_base]  //Intentionally evaluated at run time
     PUSH	RAX
-    FILD	U64 [RSP]	//Convert from int to floating
-    FSTP	U64 [RSP]
-
     CALL	&Snd	//We can skip IMPORT with & if JIT compiling.
-
-    MOV	RCX,cnts.time_stamp_freq>>3	//JIT Const.  Simple delay loop.
+    MOV	RCX,cnts.time_stamp_freq>>3 //JIT Const.  Simple delay loop.
 @@10:	LOOP	@@10
 
     POP	RCX
     LOOP	@@05
   }
-  Snd(0);
+  Snd;
 }
 
 AsmAndC2;
diff --git a/Demo/DolDoc/ClickCallBack.HC b/Demo/DolDoc/ClickCallBack.HC
index 102d5a1..10a51dc 100644
--- a/Demo/DolDoc/ClickCallBack.HC
+++ b/Demo/DolDoc/ClickCallBack.HC
@@ -2,10 +2,10 @@ I64 MyLeftCB1(CDoc *,CDocEntry *)
 {
   I64 i;
   for (i=500;i<1000;i+=25) {
-    Snd(i);
+    Snd(Freq2Ona(i));
     Sleep(10);
   }
-  Snd(0);
+  Snd;
   return 0;
 }
 
diff --git a/Demo/DolDoc/DemoDoc.DD b/Demo/DolDoc/DemoDoc.DD
index 72e0841ffd47f01eadbd02d952c502c91f333191..90b5e1ea976e0ff169e4aad2b091aad296316138 100644
GIT binary patch
delta 94
zcmX@0`ayMq9*atVlgdVYXHHHKL&e8e$6#_J>*dV}Tql^-RUG|vlzc0FGD}KwQXTV>
dGxCd+bR2Ebg`gVlGfh4u_=Al>Tm7hOH~^cXAL;-A

delta 44
zcmeyMdO&r89wX02BWF%_9u*&79Rrokfm|n;Hy_}PWSMwCWAZ1#A8h~i7#J8B06<#~
AF#rGn

diff --git a/Demo/DolDoc/MenuButton.HC b/Demo/DolDoc/MenuBttn.HC
similarity index 86%
rename from Demo/DolDoc/MenuButton.HC
rename to Demo/DolDoc/MenuBttn.HC
index 49007c1..1d36238 100644
--- a/Demo/DolDoc/MenuButton.HC
+++ b/Demo/DolDoc/MenuBttn.HC
@@ -1,6 +1,6 @@
-//This example shows buttons.  Buttons return a menu val
+//This example shows bttns.  Bttns return a menu val
 //unless you rig them to send macros.  Menu entries are
-//about the same as buttons, but don't have a border.
+//about the same as bttns, but don't have a border.
 
 I64 PopUpFreq()
 {//See also $LK,"PopUpRangeI64",A="MN:PopUpRangeI64"$()
@@ -22,7 +22,7 @@ I64 PopUpFreq()
 #define MU_SND_ON	2
 #define MU_SND_OFF	3
 
-U0 MenuButton()
+U0 MenuBttn()
 {
   Bool done=FALSE;
   I64 i,j=0,freq=100;
@@ -34,7 +34,7 @@ U0 MenuButton()
 //Use  to generate cursor movement expressions and check "Quote".
     "$$CM+CX-RE,-4$$Menu Demo\n\n";
     "$$LM,8$$"; //Set left margin
-//These are buttons that return a val from a menu selection.
+//These are bttns that return a val from a menu selection.
     if (!j)
       "\n$$BT,\"Snd On\",LE=MU_SND_ON$$\n\n\n";
     else
@@ -49,17 +49,17 @@ U0 MenuButton()
 	break;
       case MU_SND_ON:
 	j=freq;
-	Snd(j);
+	Snd(Freq2Ona(j));
 	break;
       case MU_SND_OFF:
 	j=0;
-	Snd(j);
+	Snd;
 	break;
       case MU_SET_FREQ:
 	freq=PopUpFreq;
 	if (j) {
 	  j=freq;
-	  Snd(j);
+	  Snd(Freq2Ona(j));
 	}
 	break;
       default:
@@ -69,7 +69,7 @@ U0 MenuButton()
   DocPut->flags=DocPut->flags&~DOCF_FORM |
 	old_flags & DOCF_FORM;
   DocClear;
-  Snd(0);
+  Snd;
 }
 
-MenuButton;
+MenuBttn;
diff --git a/Demo/DolDoc/MenuSprite.HC b/Demo/DolDoc/MenuSprite.HC
index 242465c5098f07024e74f376ad066443f5bd0ae4..2eeb83ff369b49d18a88be4192c9f2daa57990d9 100644
GIT binary patch
delta 28
jcmZqU?B(2G!o=-Xlv-%ypO>hSsX5t{NojKwlMWLAc~uA4

delta 22
dcmeC>Y~$Qu!o-+4*`7&>S;Ihcb0U)t697W41vCHv

diff --git a/Demo/DolDoc/TextDemo.HC b/Demo/DolDoc/TextDemo.HC
index 210854a..4468da1 100644
--- a/Demo/DolDoc/TextDemo.HC
+++ b/Demo/DolDoc/TextDemo.HC
@@ -6,7 +6,7 @@
 	"UnderLine: $$UL,1$$Test$$UL,0$$\n\n"
 	"Link     : $$LK,\"Genesis,1:1\",\"BF:Genesis,1:1\"$$\n\n\n"
 
-	"Button   :     $$BT-X,\"OKAY\",LE=1$$\n\n\n\n";
+	"Bttn   :     $$BT-X,\"OKAY\",LE=1$$\n\n\n\n";
 
 //You can do it this way if you like.
 	"\nSuper    : 3$SY,-3$2$SY,0$=9\n\n"
@@ -19,4 +19,4 @@
 // on this link to toggle individual commands.
 	"Link     : $LK,"Genesis,1:1",A="BF:Genesis,1:1"$\n\n\n"
 
-	"Button   :     $BT,"OKAY",LE=1$\n\n\n\n";
+	"Bttn   :     $BT,"OKAY",LE=1$\n\n\n\n";
diff --git a/Demo/Exceptions.HC b/Demo/Exceptions.HC
index 9c001b3..8767468 100644
--- a/Demo/Exceptions.HC
+++ b/Demo/Exceptions.HC
@@ -23,8 +23,8 @@ U0 D2()
     D1;
     if (Prompt(4)) throw('Point4');
   } catch {
-    "D2 handler\n"
-	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1;
+    "D2 hndlr\n"
+	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_callers[0];
     if (Fs->except_ch=='Point1') {
       "Caught in D2\n";
       Fs->catch_except=TRUE;
@@ -38,8 +38,8 @@ U0 Demo()
     D2;
     if (Prompt(3)) throw('Point3');
   } catch {
-    "Demo handler\n"
-	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_caller1;
+    "Demo hndlr\n"
+	  "Ch:%c:%P\n",Fs->except_ch,Fs->except_callers[0];
     Fs->catch_except=TRUE;
   }
 }
diff --git a/Demo/ExtChars.HC b/Demo/ExtChars.HC
index 7164c30..5f41e68 100644
--- a/Demo/ExtChars.HC
+++ b/Demo/ExtChars.HC
@@ -32,4 +32,4 @@ SrcExample;
 //See $LK,"::/Demo/ScrnCodes.HC"$, $LK,"::/Demo/Graphics/CharAnimation.HC"$,
 //$LK,"::/Demo/Games/CharDemo.HC"$ and $LK,"::/Demo/Graphics/FontEd.HC"$.
 
-//See $LK,"chars_bmp_alpha",A="MN:chars_bmp_alpha"$ and $LK,"chars_bmp_alpha_numeric",A="MN:chars_bmp_alpha_numeric"$.
+//See $LK,"char_bmp_alpha",A="MN:char_bmp_alpha"$ and $LK,"char_bmp_alpha_numeric",A="MN:char_bmp_alpha_numeric"$.
diff --git a/Demo/Games/BattleLines.HC b/Demo/Games/BattleLines.HC
index bdde3f9dd8f1337681bd70009ce89a442ea09b50..9613141f37ac8b10d5c815ea5a908aa48ec63a1d 100644
GIT binary patch
delta 179
zcmbR3c->*cX%42`;>l+@G(pr44l{w=V!eX=V!bLm1BJLah1}xFj-0BTxy5=pNi{XO
z#hddv4>NMW)NJa(CKh>{X=Mbexhbe>Vp!~hDk
xV8&Q;DJUo?WTq)-_wiJb;7~FE

diff --git a/Demo/Games/BigGuns.HC b/Demo/Games/BigGuns.HC
index 4a9ef5bde83167112b8346ea3c6c46a308a1cb3a..99635856c029a7045cb9fccacd71d2fdbb77fef0 100644
GIT binary patch
delta 39
vcmeA*>@eJLg_+4XYV$Sb1U4>H1FfLMycBIigUv2nQ<<2IO*Y@**~kq50-_9p

delta 44
zcmeA$>^0nQg_$YJc=I*p1U9~)#JrSHLo+oaQ&Vk2)6EWCQ<<0z4GcD4=h?^&073T+
AoB#j-

diff --git a/Demo/Games/BlackDiamond.HC b/Demo/Games/BlackDiamond.HC
index 62ef23e81d0c2263dc64f3c71328706d4fc6c300..f0cca4ae7596faa39d944ec07eec33add1b18af8 100644
GIT binary patch
delta 79
zcmezWg!#!6<_&yI%r0pqllMqy3R+rPT3W~CDQQ}B1*N9DR-{heBO$T5kZBP!vvHKu
l2!nJvpm<-eAJraj+0suxW8%qEH

delta 92
zcmaFzg!%sy<_&yI+`*|OE@>sMc_l@alLeWq*qn+I^O7?r3o=P;PG(xf%p7IxG`W^l
pYO@mCHdba61B1!8xYL<63^X@8^0;t;8LeV6Oi*o`7fKwy2>_c-9kT!c

diff --git a/Demo/Games/BomberGolf.HC b/Demo/Games/BomberGolf.HC
index ac0b54ec8aaff1b51e216e7aa5fae6c5d81883c1..fa84124a10d805329a11c6c3df96beec784ab43c 100644
GIT binary patch
delta 179
zcmZ26k+FLsBU?~vx=UKgL_W)jd}14uFR?NiM@_C_Q=J^cCI?|wK`7bHqU^6(S;@ZR8XD@rXi^3O}0e4p2JvM`^Ym$`|ib#P8Hx=OqOv>I$(r6(!~+XKb{8!O9e6JUNd|
zb+R9u9E4c~p=39+v%hBLFf=eQ&@nYInEajR#^f8kCX;#jd>ui8n%2QNsi_4ThNcFZ
z*1>rx8U~uyT%1T^3LrroDko3m6K2*h(A>O)PnL0)
-	      SpriteMat3B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<5>",BI=5$,r3);
+	      Sprite3Mat4x4B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<5>",BI=5$,r3);
 	  } else if (c==YELLOW) {
 	    x1=x+SCRN_SCALE/2;
 	    y1=y+SCRN_SCALE/2;
 	    z1=0;
 	    DCTransform(dc,&x1,&y1,&z1);
 	    if (z1>0)
-	      SpriteMat3B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<6>",BI=6$,r3);
+	      Sprite3Mat4x4B(dc,x+SCRN_SCALE/2,y+SCRN_SCALE/2,0,$IB,"<6>",BI=6$,r3);
 	  }
 
 	  if (!map[(yy+1)*map_width+xx]) {
@@ -320,11 +320,11 @@ U0 DrawIt(CTask *task,CDC *dc)
       DCTransform(dc,&xx,&yy,&zz);
       if (zz>0) {
 	if (tmpm->dead)
-	  SpriteMat3B(dc,x,y,0,$IB,"<2>",BI=2$,r2);
+	  Sprite3Mat4x4B(dc,x,y,0,$IB,"<2>",BI=2$,r2);
 	else {
 	  tt=Tri(tS,1.0);
 	  tmps=SpriteInterpolate(tt,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$);
-	  SpriteMat3B(dc,x,y,0,tmps,r1);
+	  Sprite3Mat4x4B(dc,x,y,0,tmps,r1);
 	  Free(tmps);
 	}
       }
@@ -380,7 +380,7 @@ U0 Fire()
   F64 d,dx,dy,xx=Cos(man_é),yy=Sin(man_é);
   Monster *tmpm;
 
-  Noise(100,300,1000);
+  Noise(100,53,74);
   for (i=0,tmpm=monsters;ix;
     y=tmpm->y;
@@ -489,9 +489,9 @@ U0 SongTask(I64)
   Fs->task_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE) {
-    Play("2q.A#1eG2AeA#qAq.A#1eG2eAeA#qA");
-    Play("q.A#1eG2A#A1qG2q.A#1eG2A#A1qG");
-    Play("3eA#A2qG3eA#A2qG3eA#A2G3AA#A2qG");
+    Play("3q.A#eGAeA#qAq.A#eGeAeA#qA");
+    Play("3q.A#eGA#AqGq.A#eGA#AqG");
+    Play("4eA#AqGeA#AqGeA#AGAA#AqG");
   }
 }
 
@@ -589,7 +589,7 @@ fs_done:
   SettingsPop;
   CleanUp;
   MenuPop;
-  RegWriteBranch("TempleOS/CastleFrankenstein","F64 best_score=%5.4f;\n",
+  RegWrite("TempleOS/CastleFrankenstein","F64 best_score=%5.4f;\n",
 	best_score);
 }
 
diff --git a/Demo/Games/CircleTrace.HC b/Demo/Games/CircleTrace.HC
index 7362e7c..372f55e 100644
--- a/Demo/Games/CircleTrace.HC
+++ b/Demo/Games/CircleTrace.HC
@@ -2,8 +2,8 @@
 
 //Giotto, a famous artist, drew a freehand circle to get a job.
 
-RegSetDftEntry("TempleOS/CircleTrace","F64 best_score=999;\n");
-RegExeBranch("TempleOS/CircleTrace");
+RegDft("TempleOS/CircleTrace","F64 best_score=999;\n");
+RegExe("TempleOS/CircleTrace");
 
 I64 cx,cy;
 F64 avg_error=0,elapsed_time=0,total_error=0,score=999;
@@ -13,7 +13,7 @@ U0 SongTask(I64)
   Fs->task_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE)
-    Play("hEDCARCDECR");
+    Play("5hEDC4A5RCDECR");
 }
 
 U0 DrawIt(CTask *task,CDC *dc)
@@ -35,7 +35,7 @@ Bool CTPlot(CDC *dc,I64 x,I64 y,I64)
 
 U0 CircleTrace()
 {
-  I64 msg_code,a1,a2,x1,y1;
+  I64 msg_code,arg1,arg2,x1,y1;
   F64 rad,t0,total_distance;
   CDC *dc=DCAlias;
 
@@ -57,12 +57,12 @@ U0 CircleTrace()
   dc->color=ROP_XOR+BLACK^TRANSPARENT;
   GrCircle(dc,cx,cy,CIRCLE_RADIUS);
   do {
-    msg_code=GetMsg(&a1,&a2,
-	  1<color=ROP_XOR+BLACK^TRANSPARENT;
 	GrCircle(dc,cx,cy,CIRCLE_RADIUS);
@@ -70,18 +70,18 @@ U0 CircleTrace()
 	t0=tS;
 	total_distance=0.001;
 	total_error=0;
-	x1=a1; y1=a2;
+	x1=arg1; y1=arg2;
 	do {
-	  msg_code=ScanMsg(&a1,&a2,
-		1<0.95*CIRCUMFERENCE) {
 	  if (scoredead &&
 	  man_x+man_dx==tmpm->x && man_y+man_dy==tmpm->y) {
@@ -438,7 +438,7 @@ dg_done:
     PutExcept;
   SettingsPop;
   MenuPop;
-  RegWriteBranch("TempleOS/DunGen","F64 best_score=%5.4f;\n",best_score);
+  RegWrite("TempleOS/DunGen","F64 best_score=%5.4f;\n",best_score);
   CleanUp;
 }
 
diff --git a/Demo/Games/ElephantWalk.HC b/Demo/Games/ElephantWalk.HC
index cd61fee43020ff82ae8660335e929e2c239b99be..bc8d97cec7704d47bb7edcc4d53916fbeba32a87 100644
GIT binary patch
delta 17
Zcmcb#g!$4E<_&)snT(@0|6>ff002r@2n7HD

delta 17
Zcmcb#g!$4E<_&)snWBt0|6>ff002sV2n7HD

diff --git a/Demo/Games/FlapBat.HC b/Demo/Games/FlapBat.HC
index a697e3adb8e7562f6b3803e99b8c82caeeefa1aa..1de41baadb1a4c5e422e330fe927c0ed0ef81343 100644
GIT binary patch
delta 197
zcmaE3{neT+C^g+Btz>e&sEVMarKP2HOrDaaHCIq-x@$%1M$a`|Oy(w&e{ywiZs(rE
z6l;>|Wa?_-Wa@0Q?BAE&|f5prD`-kds)cp=1hD;ArY%;^^dP>Qe0DTSoq3
z(A-?YJ%`ENIMvD3$=S)Z*wwAj6~R{0wB}M!P*4cSNvzaRDs)YCba8ZYbSZXmE_8vY
zLRGOjm#>M5*-$5O^EZJ2CKf{-wZzGO!Y-3ni6~6oBK&3YDv^6ocWmwu&E)_9>1sC1

diff --git a/Demo/Games/FlatTops.HC b/Demo/Games/FlatTops.HC
index 74de9c6..f255fe6 100644
--- a/Demo/Games/FlatTops.HC
+++ b/Demo/Games/FlatTops.HC
@@ -173,7 +173,7 @@ U0 DrawIt(CTask *task,CDC *dc)
   tmpo=obj_head.next;
   while (tmpo!=&obj_head) {
     if (tmpo->flags&OF_ACTIVE && tmpo->flags&OF_SHIP) {
-      SpriteZ3B(dc,tmpo->x,tmpo->y,0,
+      Sprite3ZB(dc,tmpo->x,tmpo->y,0,
 	    imgs[tmpo->player][tmpo->type],tmpo->é+ã/2);
 
       k=0;
@@ -224,7 +224,7 @@ U0 DrawIt(CTask *task,CDC *dc)
   tmpo=obj_head.next;
   while (tmpo!=&obj_head) {
     if (tmpo->flags&OF_ACTIVE && !(tmpo->flags&OF_SHIP))
-      SpriteZ3B(dc,tmpo->x,tmpo->y,0,
+      Sprite3ZB(dc,tmpo->x,tmpo->y,0,
 	    imgs[tmpo->player][tmpo->type],tmpo->é+ã/2);
     if (tmpo->flags&OF_SHOOTING) {
       dc->color=LTRED;
@@ -425,8 +425,8 @@ Squadron *SquadronLaunch(I64 player,F64 x=MAX_F64,F64 y=MAX_F64)
     if (player==0) {
       launch_unit_x1=tmpo->x;
       launch_unit_y1=tmpo->y;
-      launch_unit_x2=ip.pos.x-main_task->pix_left-main_task->scroll_x;
-      launch_unit_y2=ip.pos.y-main_task->pix_top -main_task->scroll_y;
+      launch_unit_x2=ms.pos.x-main_task->pix_left-main_task->scroll_x;
+      launch_unit_y2=ms.pos.y-main_task->pix_top -main_task->scroll_y;
       launch_t=tS+0.5;
     }
     if (tmpo->squadron>=0) {
@@ -494,8 +494,8 @@ Squadron *SquadronSet
     if (player==0) {
       set_é_unit_x1=tmpo->x;
       set_é_unit_y1=tmpo->y;
-      set_é_unit_x2=ip.pos.x-main_task->pix_left-main_task->scroll_x;
-      set_é_unit_y2=ip.pos.y-main_task->pix_top -main_task->scroll_y;
+      set_é_unit_x2=ms.pos.x-main_task->pix_left-main_task->scroll_x;
+      set_é_unit_y2=ms.pos.y-main_task->pix_top -main_task->scroll_y;
       set_é_t=tS+0.5;
     }
     if (tmpo->squadron>=0) {
@@ -640,7 +640,7 @@ U0 Combat(F64 period)
 	  tmpt->target=tmpo1;
 	  tmpt->é=Arg(tmpo1->x-tmpo->x,tmpo1->y-tmpo->y);
 	  QueIns(tmpt,torpedo_head.last);
-	  Sweep(2000,2000,300);
+	  Sweep(2000,86,53);
 	} else if (tmpo->ship_guns>0 && dship_guns_range) {
 	  tmpo->flags|=OF_SHOOTING;
 	  if (Rand<125.0*period) {
@@ -649,7 +649,7 @@ U0 Combat(F64 period)
 	      tmpo1->fuel*=0.75*Rand+0.25;
 	  }
 	  if (tS>next_noise) {
-	    Noise(100,75,200);
+	    Noise(100,29,46);
 	    next_noise=tS+0.1;
 	  }
 	}
@@ -662,7 +662,7 @@ U0 Combat(F64 period)
 	      tmpo1->fuel*=0.75*Rand+0.25;
 	  }
 	  if (tS>next_noise) {
-	    Noise(25,500,2000);
+	    Noise(25,62,86);
 	    next_noise=tS+0.025;
 	  }
 	}
@@ -781,7 +781,7 @@ U0 AnimateTask(I64)
 
 U0 FlatTops()
 {
-  I64 a1,a2;
+  I64 arg1,arg2;
 
   SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
   Fs->text_attr=BLUE<<4+WHITE;
@@ -805,16 +805,16 @@ U0 FlatTops()
 	"  Slower(,'-');"
 	"}"
 	);
-  Fs->win_inhibit|=WIF_SELF_IP_L|WIF_SELF_IP_R;
+  Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R;
   Init;
   Fs->draw_it=&DrawIt;
   Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs);
   try {
     while (TRUE)
-      switch (GetMsg(&a1,&a2,
-	    1<text_attr=BLACK<<4+WHITE;
   MenuPush(
@@ -100,9 +100,9 @@ U0 Halogen()
   Fs->draw_it=&DrawIt;
   try {
     while (TRUE) {
-      switch (ScanMsg(&a1,&a2,1<>8,"Draw a maze with left button.");
+  TextPrint(task,0,0,ATTR>>8,"Draw a maze with left bttn.");
   TextPrint(task,0,1,ATTR>>8,"Solve maze starting at right click.");
 }
 
@@ -69,7 +69,7 @@ U0 SolveMaze(I64 x,I64 y)
       if (stk_ptr==STK_SIZE) return;
       Sleep(100);
       if (ScanChar)
-	ThrowBreak;  //
+	throw;
     }
   }
 }
@@ -91,12 +91,11 @@ U0 Maze()
     do {
       MemSet(text,0,sizeof(text));
       while (!(ch=ScanChar)) {
-//Input Ptr (mouse) text x,y coordinates.
-	x=ip.pos_text.x-Fs->win_left-Fs->scroll_x/FONT_WIDTH;
-	y=ip.pos_text.y-Fs->win_top-Fs->scroll_y/FONT_HEIGHT;
-	if (ip.lb&&!winmgr.grab_scroll)
+	x=ms.pos_text.x-Fs->win_left-Fs->scroll_x/FONT_WIDTH;
+	y=ms.pos_text.y-Fs->win_top-Fs->scroll_y/FONT_HEIGHT;
+	if (ms.lb&&!winmgr.grab_scroll)
 	  text[y][x]=CH_SPACE+ATTRF_INVERT+ATTR;
-	if (ip.rb&&!winmgr.grab_scroll) {
+	if (ms.rb&&!winmgr.grab_scroll) {
 	  text[y][x]='*'+ATTR;
 	  SolveMaze(x,y);
 	  ch=GetChar;
diff --git a/Demo/Games/RawHide.HC b/Demo/Games/RawHide.HC
index d87b849..78dfcee 100644
--- a/Demo/Games/RawHide.HC
+++ b/Demo/Games/RawHide.HC
@@ -1,7 +1,7 @@
 //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$.
 
-RegSetDftEntry("TempleOS/RawHide","F64 best_score=9999;\n");
-RegExeBranch("TempleOS/RawHide");
+RegDft("TempleOS/RawHide","F64 best_score=9999;\n");
+RegExe("TempleOS/RawHide");
 
 F64 t0,tf;
 I64 outside_cnt;
@@ -230,19 +230,19 @@ U0 DrawIt(CTask *task,CDC *dc)
       dc->flags&=~(DCF_JUST_MIRROR|DCF_SYMMETRY);
     }
 
-  if (ip.pos.x-last_pos_x>0)
+  if (ms.pos.x-last_pos_x>0)
     left=FALSE;
-  else if (ip.pos.x-last_pos_x<0)
+  else if (ms.pos.x-last_pos_x<0)
     left=TRUE;
   if (left) {
     dc->flags|=DCF_JUST_MIRROR|DCF_SYMMETRY;
-    DCSymmetrySet(dc,ip.pos.x-task->pix_left-task->scroll_x,0,
-	  ip.pos.x-task->pix_left-task->scroll_x,1);
+    DCSymmetrySet(dc,ms.pos.x-task->pix_left-task->scroll_x,0,
+	  ms.pos.x-task->pix_left-task->scroll_x,1);
   }
-  Sprite3(dc,ip.pos.x-task->pix_left-task->scroll_x,
-	     ip.pos.y-task->pix_top -task->scroll_y,0,horse_imgs[frame&3]);
+  Sprite3(dc,ms.pos.x-task->pix_left-task->scroll_x,
+	     ms.pos.y-task->pix_top -task->scroll_y,0,horse_imgs[frame&3]);
   dc->flags&=~(DCF_JUST_MIRROR|DCF_SYMMETRY);
-  last_pos_x=ip.pos.x;
+  last_pos_x=ms.pos.x;
 
   if (tf) {
     dc->color=RED;
@@ -336,8 +336,8 @@ U0 AnimateTask(CTask *parent)
     max_speed=ClampU64(max_speed,MAX_U32/3,200*MAX_U32);
     cx=(MAP_WIDTH -parent->pix_width)/2,
 	  cy=(MAP_HEIGHT-parent->pix_height)/2;
-    cursor_x=ip.pos.x+cx-parent->pix_left-parent->scroll_x;
-    cursor_y=ip.pos.y+cy-parent->pix_top -parent->scroll_y;
+    cursor_x=ms.pos.x+cx-parent->pix_left-parent->scroll_x;
+    cursor_y=ms.pos.y+cy-parent->pix_top -parent->scroll_y;
     cnt=0;stress=0;
     my_outside_cnt=0;
     if (cursor_xtask_end_cb=&SndTaskEndCB;
   MusicSettingsRst;
   while (TRUE) {
-    Play("3qC2etG3DCBDCECFqFCsADADqB");
-    Play("C2etG3DCBDCECFqFCsADADqB");
-    Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE");
-    Play("2sG3A2G3AqG2etG3GDeBBqBFeBAqE");
+    Play("5qC4etG5DC4B5DCECFqFC4sA5D4A5D4qB");
+    Play("5C4etG5DC4B5DCECFqFC4sA5D4A5D4qB");
+    Play("4sGAGA5qG4etG5GD4eBBqB5F4eBA5qE");
+    Play("4sGAGA5qG4etG5GD4eBBqB5F4eBA5qE");
   }
 }
 
@@ -528,7 +528,7 @@ U0 CleanUp()
 
 U0 RawHide()
 {
-  I64 msg_code,a1,a2;
+  I64 msg_code,arg1,arg2;
   SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
   MenuPush(
 	"File {"
@@ -559,15 +559,15 @@ U0 RawHide()
   Fs->draw_it=&DrawIt;
   try {
     while (TRUE) {
-      msg_code=GetMsg(&a1,&a2,
-	    1<4lXFl%u81&w&vo3*%0LK?Cly7@8Rm{
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
\n";
@@ -239,8 +239,8 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 
       if (no_bwd)
 	while (colx)
-	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,FALSE,
-		" ",&col,style_bitmap);
+	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr&~DOCET_UNDERLINE,
+		&old_u32_attr,TRUE," ",&col,style_bitmap);
 
       link_st=NULL;
       if (doc_e->de_flags&DOCEF_HTML_LINK)
@@ -280,7 +280,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	    Free(hl);
 	  } else
 	    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,
-		  &old_u32_attr,doc_e->tag,&col,style_bitmap);
+		  &old_u32_attr,TRUE,doc_e->tag,&col,style_bitmap);
 	  break;
 	case DOCT_TAB:
 	  HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,TRUE,
diff --git a/Demo/WebLogDemo/WebLogRep.HC b/Demo/WebLogDemo/WebLogRep.HC
index 1439762..0f9b049 100644
--- a/Demo/WebLogDemo/WebLogRep.HC
+++ b/Demo/WebLogDemo/WebLogRep.HC
@@ -174,7 +174,7 @@ Bool IsBlocked(BlockedStruct *head,U32 ip_num)
   return FALSE;
 }
 
-U0 BlockIPNums(LogStruct *head)
+U0 BlockIPNuip(LogStruct *head)
 {
   BlockedStruct blocked_head;
   LogStruct *tmplg=head->next,*tmplg1;
@@ -197,7 +197,7 @@ U0 BlockIPNums(LogStruct *head)
     tmplg=tmplg->next;
   }
 
-  //pass 2: removed blocked ip_nums
+  //pass 2: removed blocked ip_nuip
   tmplg=head->next;
   while (tmplg!=head) {
     tmplg1=tmplg->next;
@@ -241,7 +241,7 @@ Bool IPNumTreeAdd(LogStruct **_head,LogStruct *tmplg)
   LogStruct *head;
   if (UnusedStk<0x200) {
     PrintErr("Stk Overflow");
-    ThrowBreak;
+    throw;
   }
   if (head=*_head) {
     if (tmplg->ip_num==head->ip_num)
@@ -264,7 +264,7 @@ U0 LinkTreeAdd(LinkStruct **_root,LogStruct *tmplg)
   LinkStruct *root,*tmplk;
   if (UnusedStk<0x200) {
     PrintErr("Stk Overflow");
-    ThrowBreak;
+    throw;
   }
   if (root=*_root) {
     if (!(i=StrCmp(tmplg->link,root->link)))
@@ -287,7 +287,7 @@ U0 FileTreeAdd(LinkStruct **_root,LogStruct *tmplg)
   LinkStruct *root,*tmplk;
   if (UnusedStk<0x200) {
     PrintErr("Stk Overflow");
-    ThrowBreak;
+    throw;
   }
   if (root=*_root) {
     if (!(i=StrCmp(tmplg->file,root->file)))
@@ -503,7 +503,7 @@ U0 WebLogRep(U8 *mask,U8 *output_filename)
   head=PrsLogFiles(mask,&start,&end);
   start=GetDate("Start(%D):",start);
   end  =GetDate("End  (%D):",end);
-  BlockIPNums(head);
+  BlockIPNuip(head);
 
   DocClear;
   "$$WW,0$$";
diff --git a/Doc/Boot.DD b/Doc/Boot.DD
index d174290272fe2554ce6108763f19efe09115755a..0e170aa9f1105723c2db101b02d655465d6b3854 100644
GIT binary patch
delta 506
zcmaE>IZJCpufXIU0WQYs&C>;@F-mYLC}^0O=sIPVXmWu8gUl8N28IulU4#@RI2aii
z^n*(hi%R^1^*o&Qq8MaOFfcGEOs*A@WAvCjM@W`2WAZK`DVyI63=ATS3=Axc3=C2c
zj0_Ahj0_AQIt3(ffdL`_qQL?nr7$crSwL9Q?nAOl<&7#QLh
z85ltHWCjKX8A%2PhJ?wn!sYdbX1=cO@xhV7@y`A(uJKL*4AKFN3=At67#MhXh4JRC+)~J^VR+T_HjNllO^8iGs`pxd!aRVAr59
I*B}N40O=TIDgXcg

delta 494
zcmbQG^;UC3ufXI!0ZvB$%`*h1F;3PO5@UQZ*-c1Mf`O5NK|i=8v8cp9SkJ>*FN#6t
z1Oo$u#N>J*IYx)c^Mqs>6DIEwlB)mAz`!8F$iVQ2fq_9Pf{}qCgpq*(M8_~PFi2fs
zfCzwSumDIY4fq~&Zl$HXC-i8|b6l5q!zyzwr24pBmOBf>q1Bm7V
z>6MXWU|@)t94}m6Z)W1;8NwhPz{tR`f`Ne{$R{n{$=^RD-ow=~03y5rD(n{OH2dJorzppDq
n!~-hg7#iXq53 CH_FORM_FEED.
+* Fixed $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$.
+* $LK,"GRScrnCaptureRead",A="MN:GRScrnCaptureRead"$().
+
+$IV,1$----01/04/17 18:06:14----$IV,0$
+* Added $LK,"::/Demo/AcctExample/TOSPolicies.DD"$.
+* $LK,"R",A="MN:R"$("U0 pad;",";"); for align #asserts.
+* Got rid of $FG,4$mouse.throttle$FG$. 
+* $LK,"R",A="MN:R"$("Button","Bttn");
+* $LK,"R",A="MN:R"$("Handler","Hndlr");
+* $LK,"R",A="MN:R"$("InputPointer","Mouse");
+* Improved $LK,"MemRep",A="MN:MemRep"$().
+* Changed $LK,"::/Adam/WallPaper.HC"$.
+
+$IV,1$----01/03/17 12:23:49----$IV,0$
+* $LK,"R",A="MN:R"$("chars_cmp...","char_bmp...");
+* Added chk for $LK,"Profanity",A="FF:::/Demo/AcctExample/TOSMisc.HC,Profanity"$.
+* Improved $LK,"TOSRegen",A="FF:::/Demo/AcctExample/TOSDistro.HC,TOSRegen"$.
+* Removed $TX,"TempleOSBooks1.ISO",HTML="http://www.templeos.org/files/TempleOSBooks1.ISO"$ and $TX,"TempleOSBooks2.ISO",HTML="http://www.templeos.org/files/TempleOSBooks2.ISO"$ out of $TX,"TempleOSSup1.ISO",HTML="http://www.templeos.org/TempleOSSup1.ISO"$.
+
+$IV,1$----01/01/17 17:16:16----$IV,0$
+* $BK,1$TempleOS version 5.00 Released$BK,0$
+* Added $LK,"Collapse",A="MN:Collapse"$().
+* Added $LK,"CursorRem",A="MN:CursorRem"$().
+
+$IV,1$----12/31/16 07:21:20----$IV,0$
+* $LK,"R",A="MN:R"$("SYS_SEMA_...","SEMA_...");
+* $LK,"R",A="MN:R"$("SYSf_CTRL_ALT_...","CTRL_ALT_...");
+* $LK,"R",A="MN:R"$("ThrowBreak()","$LK,"Break",A="MN:Break"$()");
+* Added $LK,"MemPageRep",A="MN:MemPageRep"$().
+
+$IV,1$----12/30/16 23:42:20----$IV,0$
+* $LK,"R",A="MN:R"$("Pages512","Pags");
+* Overhauled $LK,"::/Kernel/Mem/PageTables.HC"$.
+* $LK,"R",A="MN:R"$("BusyWait()","$LK,"Busy",A="MN:Busy"$()");
+
+$IV,1$----12/29/16 10:21:44----$IV,0$
+* Changed $LK,"Snd",A="MN:Snd"$() from $FG,2$freq$FG$ to a $FG,2$I8$FG$ val called an $FG,2$ona$FG$.
+* Fixed err in music octaves.
+* To convert songs, download Supplemental#1 ISO from the AppStore on http://www.templeos.org and run Sup1/Sup1Utils/CvtSong500.HC.
+
+$IV,1$----12/22/16 16:18:32----$IV,0$
+* $LK,"R",A="MN:R"$("CSrvCmd","$LK,"CJob",A="MN:CJob"$");
+* $LK,"R",A="MN:R"$("CSrvCtrl","$LK,"CJobCtrl",A="MN:CJobCtrl"$");
+
+$IV,1$----12/03/16 13:19:58----$IV,0$
+* $LK,"R",A="MN:R"$("SpriteMat3B()","$LK,"Sprite3Mat4x4B",A="MN:Sprite3Mat4x4B"$()");
+* $LK,"R",A="MN:R"$("SpriteX3B()","$LK,"Sprite3XB",A="MN:Sprite3XB"$()");
+* $LK,"R",A="MN:R"$("SpriteY3B()","$LK,"Sprite3YB",A="MN:Sprite3YB"$()");
+* $LK,"R",A="MN:R"$("SpriteZ3B()","$LK,"Sprite3ZB",A="MN:Sprite3ZB"$()");
+* Improved $LK,"::/Demo/Games/Talons.HC"$.
+
+$IV,1$----12/03/16 10:16:26----$IV,0$
+* Changed $LK,"__CMD_LINE__",A="MN:__CMD_LINE__"$.
+* Added $LK,"CProgress",A="MN:CProgress"$.tf.
+* Added $LK,"sys_staff_mode_flag",A="MN:sys_staff_mode_flag"$.
+* $LK,"R",A="MN:R"$("except_caller","except_callers");
+
+$IV,1$----11/30/16 22:44:35----$IV,0$
+* Added $LK,"SpriteTransform",A="MN:SpriteTransform"$().
+
+$IV,1$----11/28/16 07:11:41----$IV,0$
+* Improved $LK,"::/Apps/Titanium/Titanium.HC"$.
+
+$IV,1$----11/26/16 22:43:51----$IV,0$
+* Added solar storms to $LK,"::/Apps/X-Caliber/X-Caliber.HC"$.
+* $LK,"R",A="MN:R"$("TimeOut","Titanium");
 
 $IV,1$----11/20/16 19:46:43----$IV,0$
 * $BK,1$TempleOS version 4.13 Released$BK,0$
-* Improved $LK,"::/Apps/TimeOut/TimeOut.HC"$.
+* Improved $LK,"::/Apps/Titanium/Titanium.HC"$.
 * Improved $LK,"::/Apps/X-Caliber/X-Caliber.HC"$.
 
 $IV,1$----11/19/16 08:19:51----$IV,0$
@@ -139,7 +241,7 @@ $IV,1$----07/08/16 14:30:19----$IV,0$
 
 $IV,1$----07/07/16 07:21:03----$IV,0$
 * $LK,"DocRead",A="MN:DocRead"$() changes to file's dir so relative filenames work.
-* Added AppStore to website with Supplemental #1 ISO for download.
+* Added AppStore to website with Supplemental#1 ISO for download.
 
 $IV,1$----07/06/16 23:45:30----$IV,0$
 * Fixed multicore bug in $LK,"Sprite3",A="MN:Sprite3"$().
@@ -201,228 +303,3 @@ $IV,1$----06/16/16 19:49:39----$IV,0$
 $IV,1$----06/02/16 03:20:56----$IV,0$
 * $BK,1$TempleOS version 4.07 Released$BK,0$
 * Added claws to $LK,"::/Demo/Games/Talons.HC"$.
-
-$IV,1$----05/30/16 21:16:44----$IV,0$
-* Added waterfall to $LK,"::/Demo/Games/RawHide.HC"$.
-
-$IV,1$----05/23/16 01:30:28----$IV,0$
-* Added $LK,"RedSeaISO",A="MN:RedSeaISO"$().
-* $LK,"R",A="MN:R"$("ISOFileCreate","$LK,"ISO9660ISO",A="MN:ISO9660ISO"$");
-
-$IV,1$----05/19/16 02:16:09----$IV,0$
-* Added $LK,"BDT_ISO_FILE_WRITE",A="MN:BDT_ISO_FILE_WRITE"$.
-
-$IV,1$----05/17/16 07:16:38----$IV,0$
-* Worked on compiler $LK,"CICArg",A="MN:CICArg"$.a1_type_pointed_to.
-
-$IV,1$----05/13/16 14:35:14----$IV,0$
-* Improved $LK,"::/Demo/Games/Wenceslas.HC"$.
-
-$IV,1$----05/12/16 05:18:56----$IV,0$
-* Added $LK,"CCF_CMD_LINE",A="MN:CCF_CMD_LINE"$
-* Replaced $FG,4$__DEPTH__$FG$ with $LK,"__CMD_LINE__",A="MN:__CMD_LINE__"$.
-
-$IV,1$----05/10/16 06:23:05----$IV,0$
-* Compiler bug fixes and optimizations.
-
-$IV,1$----05/07/16 08:55:59----$IV,0$
-* $BK,1$TempleOS version 4.06 Released$BK,0$
-
-$IV,1$----05/03/16 19:26:45----$IV,0$
-* Made $LK,"FunSegFind",A="MN:FunSegFind"$() search all hash tables when $LK,"IsDbgMode",A="MN:IsDbgMode"$.
-* Added missiles to $LK,"::/Apps/X-Caliber/X-Caliber.HC"$.
-* Fixed bug in $LK,"D3Unit",A="MN:D3Unit"$().
-
-$IV,1$----05/01/16 15:12:31----$IV,0$
-* $LK,"R",A="MN:R"$("Identical","Ident");
-* $LK,"R",A="MN:R"$("Previous","Prev");
-* $LK,"R",A="MN:R"$("Result","Res");
-* Started assembler MMX/SSE.  Not done.
-* Changed a couple Bible related things.
-
-$IV,1$----04/26/16 01:18:57----$IV,0$
-* $LK,"R",A="MN:R"$("MapDrv","$LK,"DrvMap",A="MN:DrvMap"$");
-
-$IV,1$----04/25/16 13:17:49----$IV,0$
-* Changed args in $LK,"CAdd",A="MN:CAdd"$(), $LK,"CSub",A="MN:CSub"$(), $LK,"CMul",A="MN:CMul"$(), $LK,"CDiv",A="MN:CDiv"$() and $LK,"CPoly",A="MN:CPoly"$().
-* Changed args in $LK,"D3Add",A="MN:D3Add"$(), $LK,"D3Sub",A="MN:D3Sub"$(), $LK,"D3Mul",A="MN:D3Mul"$(), $LK,"D3Div",A="MN:D3Div"$() and $LK,"D3Cross",A="MN:D3Cross"$().
-
-$IV,1$----04/25/16 03:42:30----$IV,0$
-* $LK,"R",A="MN:R"$("TK_INT","TK_I64");
-* Added $LK,"::/Demo/Templates/Game1.HC"$.
-* Added $LK,"::/Demo/Templates/Lex1.HC"$.
-* Added $LK,"::/Demo/Templates/MultiCore1.HC"$.
-* Added $LK,"::/Demo/Templates/ODE1.HC"$.
-* Added $LK,"::/Demo/Templates/Registry1.HC"$.
-* Added $LK,"::/Demo/Templates/Util1.HC"$.
-* Added $LK,"::/Demo/Templates/Util2.HC"$.
-
-$IV,1$----04/23/16 13:20:24----$IV,0$
-* Got rid of low protected memory area that caught NULL deref.
-* Got rid of 4K page tables by making $LK,"text",A="MN:text"$.vga_alias.  All pages are 2Meg size.
-
-$IV,1$----04/15/16 13:39:25----$IV,0$
-* Fixed bug in $LK,"EdCodeTools",A="MN:EdCodeTools"$().
-* Fixed double $FG,2$ASCII#5$FG$ cursor bug.
-
-$IV,1$----04/01/16 14:59:49----$IV,0$
-* Changed $LK,"SpriteInterpolate",A="MN:SpriteInterpolate"$() args.
-* $LK,"R",A="MN:R"$("Index","Idx");
-
-$IV,1$----03/31/16 11:20:13----$IV,0$
-* Changed $LK,"::/Adam/WallPaper.HC"$.
-* Got rid of $FG,4$CTask.time_slice_start$FG$ and $FG,4$CTask.total_time$FG$.
-
-$IV,1$----03/29/16 05:53:45----$IV,0$
-* $BK,1$TempleOS version 4.05 Released$BK,0$
-
-$IV,1$----03/24/16 16:26:50----$IV,0$
-* Added $LK,"::/Demo/Games/CharDemo.HC"$.
-
-$IV,1$----03/22/16 16:58:25----$IV,0$
-* Added $LK,"DOCEF_DFT_RAW_TYPE",A="MN:DOCEF_DFT_RAW_TYPE"$.  Modified $LK,"DocForm",A="MN:DocForm"$() to look-up raw type automatically from the compiler's class information.
-* Added $LK,"DOCEF_DFT_LEN",A="MN:DOCEF_DFT_LEN"$.  Modified $LK,"DocForm",A="MN:DocForm"$() to look-up string length automatically from the compiler's class information.
-
-$IV,1$----03/21/16 07:28:35----$IV,0$
-* Added $LK,"OCF_ALIAS",A="MN:OCF_ALIAS"$.
-* $LK,"R",A="MN:R"$("Integer","Int");
-* Added aliases to $LK,"::/Compiler/OpCodes.DD"$.
-
-$IV,1$----03/21/16 02:12:08----$IV,0$
-* Added $LK,"DOCT_MARKER",A="MN:DOCT_MARKER"$.
-* Added $LK,"CICType",A="MN:CICType"$.
-* Optimized $LK,"MDG_MASK",A="MN:MDG_MASK"$ and $LK,"RTG_MASK",A="MN:RTG_MASK"$ values.
-
-$IV,1$----03/19/16 09:15:11----$IV,0$
-* Fixed bug in $LK,"EdFindReplace",A="MN:EdFindReplace"$().
-
-$IV,1$----03/19/16 06:22:36----$IV,0$
-* Fixed $LK,"UAsm",A="MN:Ui"$() bug.
-* Got rids of $FG,4$ICF_A1_FIRST$FG$.
-* Cleaned-up compiler $LK,"REGG_CLOBBERED",A="MN:REGG_CLOBBERED"$ and $LK,"REGG_STK_TMP",A="MN:REGG_STK_TMP"$.
-
-$IV,1$----03/18/16 09:53:33----$IV,0$
-* Made $LK,"SpriteEd",A="MN:SpriteEd"$() sel foreground elem.
-
-$IV,1$----03/14/16 05:57:27----$IV,0$
-* $BK,1$TempleOS version 4.04 Released$BK,0$
-* Changed $FG,2$nobound_switch$FG$ so it uses [].
-* Changed $LK,"KbdMouseCmdAck",A="MN:KbdMouseCmdAck"$().
-
-$IV,1$----02/19/16 18:48:51----$IV,0$
-* Fixed bug in $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.HC"$.
-
-$IV,1$----02/15/16 23:31:15----$IV,0$
-* Improved $LK,"::/Demo/Games/RawHide.HC"$.
-
-$IV,1$----02/13/16 17:02:34----$IV,0$
-* Added $FG,2$$$CL+H$$$FG$ to clear all, including hold entries.
-
-$IV,1$----02/10/16 08:56:49----$IV,0$
-* Improved $FG,2$$FG$ prompting.
-
-$IV,1$----02/09/16 23:54:23----$IV,0$
-* Created $LK,"DOCEF_LEN",A="MN:DOCEF_LEN"$ with arg.  $LK,"DOCT_DATA",A="MN:DOCT_DATA"$ has default 64 len.
-
-$IV,1$----02/09/16 09:34:32----$IV,0$
-* $BK,1$TempleOS version 4.03 Released$BK,0$
-* Added $LK,"DOCEF_REMALLOC_DATA",A="MN:DOCEF_REMALLOC_DATA"$.
-
-$IV,1$----02/05/16 23:00:53----$IV,0$
-* Moved $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.HC"$.
-* Added $LK,"::/Demo/AcctExample/TOSToHtml.HC"$.
-
-$IV,1$----02/03/16 18:47:00----$IV,0$
-* Refactored $LK,"SpriteMainEd",A="MN:SpriteMainEd"$().
-* Added tag edit to main sprite edit menu.
-
-$IV,1$----02/01/16 21:01:15----$IV,0$
-* Cleaned-up $LK,"TaskKillDying",A="MN:TaskKillDying"$().
-* Made multicore more professional.
-
-$IV,1$----02/01/16 06:02:41----$IV,0$
-* Moved Sup1CodeScraps/Mem/Mem2Meg.HC out of kernel.
-
-$IV,1$----01/31/16 04:07:50----$IV,0$
-* Fixed scheduler, so doesn't idle so high.
-* Fixed many memory leaks.
-* Changed args to  $LK,"Mem512Alloc",A="MN:Mem512Alloc"$(), $LK,"Mem512Free",A="MN:Mem512Free"$(), and $LK,"Mem512TaskAlloc",A="MN:Mem512TaskAlloc"$().
-
-$IV,1$----01/30/16 11:14:29----$IV,0$
-* Changed arg in $LK,"DocEntryNewTag",A="MN:DocEntryNewTag"$().
-* Added $LK,"DocEntryNewBase",A="MN:DocEntryNewBase"$().
-
-$IV,1$----01/29/16 02:44:38----$IV,0$
-* Overhauled $LK,"DocSave",A="MN:DocSave"$() and $LK,"DocRecalc",A="MN:DocRecalc"$().
-
-$IV,1$----01/28/16 20:45:35----$IV,0$
-* Fixed bug in locate sprite elem code.
-* Overhauled $FG,2$$FG$ sprite editor.
-* Added $LK,"DocHighlightCursor",A="MN:DocHighlightCursor"$() and $LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="MN:DOCf_DONT_HIGHLIGHT_CURSOR"$.
-
-$IV,1$----01/28/16 14:05:52----$IV,0$
-* Fixed bug in $LK,"AutoComplete",A="MN:AutoComplete"$() init.
-* Added $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$().
-
-$IV,1$----01/27/16 20:41:54----$IV,0$
-* $BK,1$TempleOS version 4.02 Released$BK,0$
-
-$IV,1$----01/27/16 06:40:46----$IV,0$
-* Added $FG,2$$FG$ macro to $LK,"TestSuite",A="FI:::/Misc/OSTestSuite.HC"$.
-* Added compiler err for $FG,2$break;$FG$ in a subswitch preface.
-
-$IV,1$----01/27/16 04:14:08----$IV,0$
-* Added $LK,"::/Demo/ToHtmlToTXTDemo/HtmlGen.HC"$ and $LK,"::/Demo/ToHtmlToTXTDemo/TXTGen.HC"$.
-* Now, $LK,"Plain",A="MN:Plain"$() doesn't save with $LK,"CH_CURSOR",A="MN:CH_CURSOR"$.
-* $LK,"R",A="MN:R"$("DOCF_PLAIN_TEXT_WITH_TABS","DOCF_PLAIN_TEXT_TABS"); 
-* Change $LK,"Document Links",A="FF:::/Adam/DolDoc/DocLink.HC,AD"$ "DF:word" to "DN:word".
-* Merged documentation into $LK,"::/Doc/FAQ.DD"$.
-
-$IV,1$----01/26/16 17:51:45----$IV,0$
-* $LK,"R",A="MN:R"$("PSect","FunSeg"); 
-* $LK,"R",A="MN:R"$("Equal","Equ");
-* $LK,"R",A="MN:R"$("Binary","Bin");
-
-$IV,1$----01/26/16 14:09:45----$IV,0$
-* Changed $LK,"DirContextNew",A="MN:DirContextNew"$(), $LK,"FilesFindMatch",A="MN:FilesFindMatch"$() and $LK,"FilesFind",A="MN:FilesFind"$() to use full_name.
-* $LK,"R",A="MN:R"$("Statement","Stmt");
-
-$IV,1$----01/18/16 15:19:43----$IV,0$
-* Added except arg to $LK,"Let2BlkDev",A="MN:Let2BlkDev"$(), $LK,"BlkDevChk",A="MN:BlkDevChk"$(), $LK,"Let2Drv",A="MN:Let2Drv"$(), $LK,"DrvChk",A="MN:DrvChk"$() and $LK,"DrvIsWritable",A="MN:DrvIsWritable"$().
-
-$IV,1$----01/16/16 08:20:00----$IV,0$
-* Added $LK,"DrvTextAttrGet",A="MN:DrvTextAttrGet"$().
-* Removed $FG,4$DrvTextAttrSet$FG$().
-
-$IV,1$----01/15/16 00:47:31----$IV,0$
-* $LK,"KeyboardPlug-Ins '9','0'",A="FF:::/HomeKeyPlugIns.HC,'9'"$.
-* $LK,"R",A="MN:R"$("$$$$LM,5$$$$","$$$$ID,5$$$$");
-
-$IV,1$----01/15/16 00:12:02----$IV,0$
-* Added $LK,"Let2BlkDevType",A="MN:Let2BlkDevType"$().
-* Added $LK,"WIF_SELF_FOCUS",A="MN:WIF_SELF_FOCUS"$ to $LK,"::/Misc/OSInstall.HC"$.
-* Added $FG,2$%$$F$FG$ to $LK,"Print(\"\") Fmt Strings",A="FI:::/Doc/Print.DD"$.
-
-$IV,1$----01/12/16 19:17:12----$IV,0$
-* Overhauled $LK,"Mount",A="MN:Mount"$() and $LK,"::/Kernel/KCfg.HC"$.
-
-$IV,1$----01/12/16 10:06:18----$IV,0$
-* $BK,1$TempleOS version 4.01 Released$BK,0$
-* Standardized drive letters.  Your $LK,"In",A="MN:In"$() config scripts for compiling the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$() must be changed.
-* Added $LK,"CCF_QUESTION_HELP",A="MN:CCF_QUESTION_HELP"$.
-
-$IV,1$----01/11/16 00:04:38----$IV,0$
-* $LK,"R",A="MN:R"$("PAGE_SIZE","MEM_PAGE_SIZE"); etc.
-* $LK,"R",A="MN:R"$("DFT_STK","MEM_DFT_STK"); etc.
-* Added $LK,"::/Demo/MemDemo.HC"$.
-
-$IV,1$----01/08/16 17:04:58----$IV,0$
-* Added $LK,"FUF_RISKY",A="MN:FUF_RISKY"$ to $LK,"DocOpt",A="MN:DocOpt"$().
-* Fixed $LK,"::/Doc/CompilerOverview.DD"$.
-
-$IV,1$----01/06/16 11:01:57----$IV,0$
-* Got rid of $FG,4$DOCEF_HARD_SKIP$FG$.
-
-$IV,1$----01/03/16 17:15:41----$IV,0$
-* Updated $LK,"::/Misc/PCIDevices.DD"$.
-* Added null case option.  Next higher int with "$FG,2$case:$FG$" in $FG,2$switch$FG$ stmts.  See  $LK,"::/Demo/NullCase.HC"$.
diff --git a/Doc/Charter.DD b/Doc/Charter.DD
index 3426e47..81b5d65 100644
--- a/Doc/Charter.DD
+++ b/Doc/Charter.DD
@@ -21,7 +21,7 @@ $ID,-5$
 
 * God said $FG,2$640x480 16 color$FG$ graphics is a covenant like circumcision.  Children will do offerings.  Think of 16 colors like the Simpson's cartoons.  In the future, even if one GPU were universal, we would keep 640x480 16 color and not use GPU acceleration.  Graphics operations should be transparent, not hidden in a GPU.
 
-* God said to use a single audio voice -- a single frequency with waveforms and, maybe, amplitude envelope. 
+* God said to use a single-voice 8-bit signed MIDI-like sample for sound.  God does not want death screams, perhaps, because God has PTSD or soldiers have PTSD.  (Imagine wounded on battlefields.) 
 
 * God said His temple must be perfect.  $FG,4$We don't think twice about breaking compatibility.$FG$  God said we do a seven year release cycle.  I say the PC hardware follows a 49 year, jubilee cycle, like broadcast TV upgrades.
 
@@ -31,7 +31,7 @@ $ID,-5$
 
 * Low line count is the highest good, so it is easy to learn the whole thing.  Users should see the light at the end of the tunnel.  One file system, for example, is better than many file systems.
 
-* There is a limit of 100,000 lines of code for all time, not including applications and demos.  $FG,4$Code comments count$FG$, however.  Currently, there are $TX,"81,223",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code.  $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit.  The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications.  Dependency on components and libraries creates a hell that is no longer blissful.
+* There is a limit of 100,000 lines of code for all time, not including applications and demos.  $FG,4$Code comments count$FG$, however.  Currently, there are $TX,"81,390",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code.  $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit.  The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications.  Dependency on components and libraries creates a hell that is no longer blissful.
  
 * Minimal abstraction is a goal.  Sheep are fools.  They always respect a design that is more complicated than another.  Any genius can make it complicated.  Like in physics, it takes a supra-genius to make it simple.
 
@@ -39,7 +39,7 @@ $ID,-5$
 
 * All hardware access will be done through x86 IN/OUT instructions, not PCI drivers.  A frame buffer for VGA is an exception.
 
-* One driver for each class of device.  Limited exceptions are allowed.  With divergent device capabilities, it is a nightmare for user applications and what is gained?  A three button mouse is like a leg you cannot put weight on.
+* One driver for each class of device.  Limited exceptions are allowed.  With divergent device capabilities, it is a nightmare for user applications and what is gained?  A three bttn mouse is like a leg you cannot put weight on.
 
 * $FG,2$Ring-0-only$FG$.  Everything runs in kernel mode, including user applications.
 
diff --git a/Doc/Credits.DD b/Doc/Credits.DD
index 4e7527a..43d29bc 100644
--- a/Doc/Credits.DD
+++ b/Doc/Credits.DD
@@ -1,6 +1,6 @@
 $WW,1$$FG,5$$TX+CX,"Credits"$$FG$
 
-I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,996",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"13.2",D="DD_TEMPLEOS_AGE"$ years (full-time).  It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources.  Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$.  It is independent and stands alone.  It has no networking, so it certainly doesn't call home.  100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders!  It is public domain, not GPL.
+I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,241",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"13.4",D="DD_TEMPLEOS_AGE"$ years (full-time).  It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources.  Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$.  It is independent and stands alone.  It has no networking, so it certainly doesn't call home.  100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders!  It is public domain, not GPL.
 
 *) $LK,"::/Kernel/FontStd.HC"$, is taken from $FG,4$$TX,"FreeDOS",HTML="http://www.freedos.org"$$FG$.  It's public domain.
 
@@ -14,7 +14,7 @@ I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,996",D="DD_TEMPLEOS_LOC"$ lines
 
 *) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/AMathODE.HC"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$.
 
-*) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$.  The wolf in BlackDiamond is also from there.  I took watermarked photos and converted to 16 color.
+*) The mountain in some games is from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$.  The wolf in BlackDiamond is also from there.  I took watermarked photos and converted to 16 color.
 
 *) The $FG,2$FAT32$FG$ file system is owned by MicroSoft.
 
@@ -34,7 +34,7 @@ I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"119,996",D="DD_TEMPLEOS_LOC"$ lines
 
 *) Thanks to $FG,4$$TX,"http://www.osdev.org",HTML="http://www.osdev.org"$$FG$ for a couple tips.
 
-*) God told me to stick with 640x480 16 color,  a single audio voice and kept me from zombie-walking into making child windows like $FG,2$Windows$FG$.  Instead, I made one window per task with no child windows.  He also guided my progress, very obviously.
+*) God told me to stick with 640x480 16 color and single-voice 8-bit signed MIDI-like sample for sound.   He kept me from zombie-walking into making child windows like $FG,2$Windows$FG$.  Instead, I made one window per task with no child windows.  He also guided my progress, very obviously.
 
 *) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.DD"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.DD"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://web.archive.org/web/20110730111436/http://promo.net/pg/"$$FG$.
 
diff --git a/Doc/Ctrls.DD b/Doc/Ctrls.DD
index 91e5a18..28155da 100644
--- a/Doc/Ctrls.DD
+++ b/Doc/Ctrls.DD
@@ -1 +1 @@
-$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue.  See $LK,"::/Demo/Graphics/Slider.HC"$, $LK,"::/Demo/Graphics/ScrollBars.HC"$ and $LK,"TermButtonNew",A="FF:::/Adam/WallPaper.HC,TermButtonNew"$.  There is a template-code ctrl generator, if you press $FG,2$$FG$.
+$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue.  See $LK,"::/Demo/Graphics/Slider.HC"$, $LK,"::/Demo/Graphics/ScrollBars.HC"$ and $LK,"TermBttnNew",A="FF:::/Adam/WallPaper.HC,TermBttnNew"$.  There is a template-code ctrl generator, if you press $FG,2$$FG$.
diff --git a/Doc/Customize.DD b/Doc/Customize.DD
index beb052a..8105fff 100644
--- a/Doc/Customize.DD
+++ b/Doc/Customize.DD
@@ -1,6 +1,6 @@
 
-$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file.  See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,mouse.scale"$.
+$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file.  See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,ms_hard.scale"$.
 
 * You can set your local time zone by setting the $FG,4$local_time_offset$FG$ global var in a start-up file.  It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$.  See $LK,"local time",A="FF:~/HomeLocalize.HC,local_time"$.
 
-* Get rid of this msg $LK,"here",A="FF:~/DoOnce.HC,Customize.DD"$.
+* Get rid of this msg $LK,"here",A="FF:~/Once.HC,Customize.DD"$.
diff --git a/Doc/DbgOverview.DD b/Doc/DbgOverview.DD
index 06f7374..cbaefee 100644
--- a/Doc/DbgOverview.DD
+++ b/Doc/DbgOverview.DD
@@ -20,7 +20,7 @@ $WW,1$$FG,5$$TX+CX,"Debugging Overview"$$FG$
 
 * $LK,"ClassRep",A="MN:ClassRep"$() and the dynamic version $LK,"ClassRepD",A="MN:ClassRepD"$() can be used to dump structures.
 
-* $LK,"Prof",A="MN:Prof"$() and $LK,"ProfRep",A="MN:ProfRep"$() provide code profiling.  See $LK,"::/Demo/InFile/INProfile.IN"$ (This is an $LK,"InFile",A="FF:::/Doc/Glossary.DD,InFile"$.)
+* $LK,"Prof",A="MN:Prof"$() and $LK,"ProfRep",A="MN:ProfRep"$() provide code profiling.  See $LK,"::/Demo/InFile/InProfile.IN"$ (This is an $LK,"InFile",A="FF:::/Doc/Glossary.DD,InFile"$.)
 
 * Use $LK,"RawPrint",A="MN:RawPrint"$() to print debug info bypassing the window framework.  You pass these routines a count in milliseconds for how long it should be displayed.  You can use $LK,"Raw",A="MN:Raw"$($FG,2$TRUE$FG$) to make all output bypass the window framework.  The $FG,2$WinMgr$FG$ runs on $FG,2$Core0$FG$ and will overwrite raw text from other cores when it updates the scrn.
 
@@ -37,6 +37,6 @@ $ID,-2$
 
 * There is a heap check utility which can find leaks.  Use $LK,"HeapLog",A="MN:HeapLog"$(), $LK,"HeapLogAddrRep",A="MN:HeapLogAddrRep"$() and $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$().  It's a really simple program which intercepts $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$().  You can customize the code to find other heap issues.
 
-* You can define handler functions for $FG,2$$FG$ keys with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ handlers take a scan_code as an arg.
+* You can define hndlr functions for $FG,2$$FG$ keys with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ hndlrs take a scan_code as an arg.
 
-* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"BootHDIns",A="MN:BootHDIns"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value.  Pick a non-zero value to discover uninitialized var bugs.  You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
+* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"BootHDIns",A="MN:BootHDIns"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value, but global AOT variables are always zero if not initialized.  Pick a non-zero value to discover uninitialized var bugs.  You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
diff --git a/Doc/Demands.DD b/Doc/Demands.DD
index 0a52721..27a5354 100644
--- a/Doc/Demands.DD
+++ b/Doc/Demands.DD
@@ -40,7 +40,7 @@ $LK,"/Kernel/PCIBIOS.HC",A="FI:::/Kernel/PCIBIOS.HC"$		:290 could be eliminated,
 * Since I don't use paging (for anything), Intel should have an option for  no-paging long mode, and optimize it!
 $LK,"::/Kernel/Mem/PageTables.HC"$	:135 lines to identity-map gets eliminated.
 
-* Desktop computers must have a reset switch and a fast reboot option, skipping diagnostics.  I recommend booting TempleOS from a ROM when the reset button is pressed and booting UEFI when the power button is pressed.  Or, we could build UEFI on a TempleOS layer.  Intel must burn TempleOS into a ROM in the factory for all desktop x86 CPUs to ensure tamper-proof trust in the oracle and because God deserves the glory.  There will be just an English version.  A new ROM version is released every seven years.  The ROM should boot like the DVD boots, but with $LK,"BOOT_SRC_ROM",A="MN:BOOT_SRC_ROM"$.
+* Desktop computers must have a reset switch and a fast reboot option, skipping diagnostics.  I recommend booting TempleOS from a ROM when the reset bttn is pressed and booting UEFI when the power bttn is pressed.  Or, we could build UEFI on a TempleOS layer.  Intel must burn TempleOS into a ROM in the factory for all desktop x86 CPUs to ensure tamper-proof trust in the oracle and because God deserves the glory.  There will be just an English version.  A new ROM version is released every seven years.  The ROM should boot like the DVD boots, but with $LK,"BOOT_SRC_ROM",A="MN:BOOT_SRC_ROM"$.
 
 * We do not want UTF, just 8-bit characters.  $FG,2$$FG$ toggles between Cyrillic and Std Fonts.  We need the twelve window $LK,"TextBorder",A="MN:TextBorder"$ characters added to the VGA font 0x02-0x0D.  Japan, China and Korea must switch to alphabets.  Maybe, the United States will change to metric, out of good will. 
 
@@ -48,6 +48,8 @@ $LK,"::/Kernel/Mem/PageTables.HC"$	:135 lines to identity-map gets eliminated.
 
 * We must have a nice dictionary.  Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.HC"$, too.
 
+* Intel needs to make $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ versions of its x86 CPU data sheets documenting all hardware relevant to TempleOS. 
+
 * We must have the ultimate Bible search engine.  Currently, all we have is     $TX,"filter search",HTML="https://www.youtube.com/watch?v=ULJU8DzvQFo"$.  In the end, it should be a low line-count technique.
 
 * We will make a $LK,"Standard TempleOS PC",A="FI:::/Doc/StdTempleOSPC.DD"$.
diff --git a/Doc/DemoIndex.DD b/Doc/DemoIndex.DD
index b6f185d..0bde3be 100644
--- a/Doc/DemoIndex.DD
+++ b/Doc/DemoIndex.DD
@@ -8,7 +8,7 @@ $LK,"::/Doc/HelloWorld.DD"$
 
 $WW,0$$TR,"Games: Beginner"$
 $ID,2$$LK,"::/Demo/Graphics/NetOfDots.HC"$
-$LK,"::/Demo/Graphics/InputPointer.HC"$
+$LK,"::/Demo/Graphics/MouseDemo.HC"$
 $LK,"::/Demo/Graphics/Lines.HC"$
 $LK,"::/Demo/Graphics/SunMoon.HC"$
 $LK,"::/Demo/Graphics/LowPassFilter.HC"$
@@ -27,7 +27,6 @@ $LK,"::/Demo/RandDemo.HC"$
 $LK,"::/Demo/KeyBitMap.HC"$
 $LK,"::/Demo/Graphics/WinZBuf.HC"$
 $LK,"::/Demo/Graphics/Elephant.HC"$
-$LK,"::/Demo/Graphics/Mountain.HC"$
 $LK,"::/Demo/Graphics/WallPaperFish.HC"$ //Press SHIFT-F5 to Adam Include
 $LK,"::/Demo/Games/Digits.HC"$
 $LK,"::/Demo/Progress.HC"$ //has some ASM, just ignore
@@ -78,7 +77,6 @@ $LK,"::/Demo/Games/TreeCheckers.HC"$
 $LK,"::/Demo/MultiCore/Palindrome.HC"$
 $LK,"::/Demo/MultiCore/MPAdd.HC"$
 $LK,"::/Demo/MultiCore/Lock.HC"$
-$LK,"::/Demo/MultiCore/Clouds.HC"$
 $LK,"::/Demo/Graphics/Slider.HC"$
 $LK,"::/Demo/Graphics/WallPaperCtrl.HC"$ //Press SHIFT-F5 to Adam Include
 $LK,"::/Demo/Graphics/ScrollBars.HC"$
@@ -89,14 +87,13 @@ $LK,"::/Demo/Games/BigGuns.HC"$
 $LK,"::/Demo/Games/FlatTops.HC"$
 $LK,"::/Demo/Games/RawHide.HC"$
 $LK,"::/Demo/Games/DunGen.HC"$
-$MA-X+PU,"::/Apps/TimeOut",LM="Cd(\"::/Apps/TimeOut\");Dir;View;\n"$
+$MA-X+PU,"::/Apps/Titanium",LM="Cd(\"::/Apps/Titanium\");Dir;View;\n"$
 $LK,"::/Demo/Games/Collision.HC"$
 $ID,-2$$TR,"Games: Advanced"$
 $ID,2$$LK,"::/Demo/MultiCore/LoadTest.HC"$
 $LK,"::/Demo/MultiCore/Primes.HC"$
 $LK,"::/Demo/MultiCore/MPRadix.HC"$
 $LK,"::/Demo/MultiCore/Interrupts.HC"$
-$MA-X+PU,"::/Apps/AfterEgypt",LM="Cd(\"::/Apps/AfterEgypt\");Dir;View;\n"$
 $LK,"::/Demo/Games/Varoom.HC"$
 $LK,"::/Demo/Graphics/Shading.HC"$
 $LK,"::/Demo/Graphics/Transform.HC"$
@@ -108,7 +105,6 @@ $LK,"::/Demo/Graphics/SpriteText.HC"$
 $LK,"::/Demo/Graphics/SpriteRaw.HC"$
 $MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$
 $MA-X+PU,"::/Apps/KeepAway",LM="Cd(\"::/Apps/KeepAway\");Dir;View;\n"$
-$LK,"::/Demo/Graphics/Camp.HC"$
 $LK,"::/Demo/Games/Rocket.HC"$
 $LK,"::/Demo/Games/RocketScience.HC"$
 $LK,"::/Demo/Games/MassSpring.HC"$
@@ -162,7 +158,7 @@ $LK,"::/Demo/ClassMeta.HC"$
 $LK,"::/Demo/LastClass.HC"$
 $LK,"::/Demo/DolDoc/NumBible.HC"$
 $LK,"::/Demo/DolDoc/Form.HC"$
-$LK,"::/Demo/DolDoc/MenuButton.HC"$
+$LK,"::/Demo/DolDoc/MenuBttn.HC"$
 $LK,"::/Demo/DolDoc/MenuSprite.HC"$
 $LK,"::/Demo/DolDoc/ClickCallBack.HC"$
 $LK,"::/Demo/DolDoc/TreeDemo.HC"$
diff --git a/Doc/Directives.DD b/Doc/Directives.DD
index 32c10eb..9617939 100644
--- a/Doc/Directives.DD
+++ b/Doc/Directives.DD
@@ -1,7 +1,7 @@
 $HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
 #define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
 #define __LINE__ #exe{StreamPrint("%d",Fs->last_cc->lex_include_stk->line_num);}
-#define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE && Fs->last_cc->lex_include_stk->depth<2);}
+#define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE && Fs->last_cc->lex_include_stk->depth<1);}
 #define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_cc->lex_include_stk->full_name);}
 #define __DIR__  #exe{StreamDir;}
 
diff --git a/Doc/DolDocOverview.DD b/Doc/DolDocOverview.DD
index 3a1ef68..60ef706 100644
--- a/Doc/DolDocOverview.DD
+++ b/Doc/DolDocOverview.DD
@@ -113,15 +113,15 @@ Examples:  to see
 5)$LK,"File find link searching for 5th 'CTRL'",A="FF:::/Kernel/KernelA.HH,CTRL:5"$
 6)$LK,"Manual page link",A="MN:Print"$
 7)$LK,"File line num link",A="FL:::/Kernel/KernelA.HH,200"$
-8)$LK,"File anchor link --  to see anchor after you click",A="FA:::/Kernel/Mem/PageTables.HC,ExpandHeap"$
+8)$LK,"File anchor link --  to see anchor after you click",A="FA:::/Demo/DolDoc/DemoDoc.DD,MyLittleAnchor"$
 9)$LK,"Bible Link",A="BF:Acts,2:3"$ The chapter:verse actually just does a text search.
 10) $LK,"Help Index Link",A="HI:Doc"$.
-11) $LK,"Address Link",A="AD:0x12000"$.
+11) $LK,"Address Link",A="AD:0x11000"$.
 
 12) For in-memory document address links, see $LK,"SpriteEdText",A="MN:SpriteEdText"$().
 
-$ID,-2$$TR,"BT Button"$
-$ID,2$See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+$ID,-2$$TR,"BT Bttn"$
+$ID,2$See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$$TR,"DA Data"$
 $ID,2$Used for forms that prompt for data or just displaying a value.  Use $FG,2$$FG$ to help you generate the DolDoc command text you need in your $LK,"HolyC",A="FI:::/Doc/HolyC.DD"$ $FG,2$class$FG$ member's $FG,2$fmtstr$FG$ meta-data for $LK,"DocForm",A="MN:DocForm"$().  See $LK,"::/Demo/DolDoc/Form.HC"$, $LK,"::/Demo/Dsk/DataBase.HC"$, and $LK,"::/Adam/DolDoc/DocWidgetWiz.HC"$.
 
@@ -240,13 +240,13 @@ $ID,2$See $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.HC"$ to generate a html version of
 $ID,-2$$TR,"LE= Left Expression"$
 $ID,2$Left expression.  $FG,2$CM$FG$ has this by default for X offset and you can leave-off the $FG,2$LE=$FG$, just putting the $FG,2$$FG$.
 
-See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$$TR,"LM=\"\" Left Macro Str"$
 $ID,2$Left macro string.
 $ID,-2$$TR,"RE= Right Expression"$
 $ID,2$Right expression.  $FG,2$CM$FG$ has this by default for Y offset and you can leave-off the $FG,2$RE=$FG$, just putting the $FG,2$$FG$.
 
-See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$$TR,"RM=\"\" Right Macro Str"$
 $ID,2$Right macro string.
 $ID,-2$$TR,"BI= Bin Number"$
@@ -269,7 +269,7 @@ $ID,2$Scroll text in a marquee of so many columns.
 $ID,-2$$TR,"U= User Data"$
 $ID,2$User Data.
 
-See $LK,"::/Demo/DolDoc/MenuButton.HC"$.
+See $LK,"::/Demo/DolDoc/MenuBttn.HC"$.
 $ID,-2$
 $FG,5$EXAMPLES:
 
diff --git a/Doc/Features.DD b/Doc/Features.DD
index f260741..8595fa2 100644
--- a/Doc/Features.DD
+++ b/Doc/Features.DD
@@ -1,6 +1,6 @@
          $WW,1$$FG,5$$TX+CX,"TempleOS' Features"$$FG$
 
-* Oracle in program, $FG,2$AfterEgypt$FG$, for $LK,"tongues",A="FI:::/Adam/God/HSNotes.DD"$.
+* Oracle in with $FG,2$$FG$ for words or $FG,2$$FG$ for passages.  See $LK,"tongues",A="FI:::/Adam/God/HSNotes.DD"$.
 
 * $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$, ring-0-only, single-address-map (identity), multitasking kernel with multicore support.
 
diff --git a/Doc/Glossary.DD b/Doc/Glossary.DD
index d2c7b6c..52d799d 100644
--- a/Doc/Glossary.DD
+++ b/Doc/Glossary.DD
@@ -18,6 +18,7 @@ $FG,2$BG$FG$	Backround
 $FG,2$Bin$FG$	Binary
 $FG,2$Blk$FG$	Block
 $FG,2$Bmp$FG$	BitMap
+$FG,2$Bttn$FG$	Button
 $FG,2$Buf$FG$	Buffer
 $FG,2$Bwd$FG$	Backward
 $FG,2$CB$FG$	Call-Back, Code Block
@@ -25,6 +26,7 @@ $FG,2$Cfg$FG$	Config
 $FG,2$Chg$FG$	Change
 $FG,2$Chk$FG$	Check
 $FG,2$Const$FG$	Consant
+$FG,2$Cont$FG$	Continue
 $FG,2$Cmd$FG$	Command
 $FG,2$Cmp$FG$	Compiler
 $FG,2$Cnt$FG$	Count
@@ -60,6 +62,7 @@ $FG,2$Fun$FG$	Function
 $FG,2$Gen$FG$	Generate
 $FG,2$Glbl$FG$	Global
 $FG,2$Gr$FG$	Graphic
+$FG,2$Hndlr$FG$	Handler
 $FG,2$IDE$FG$	Integrated Drive Electronics, Integrated Development Environment
 $FG,2$Id$FG$	Identification
 $FG,2$Ident$FG$	Identifier, Identity, Identical
@@ -69,7 +72,6 @@ $FG,2$Init$FG$	Initialize
 $FG,2$Ins$FG$	Insert, Install
 $FG,2$Inst$FG$	Instruction
 $FG,2$Int$FG$	Interrupt, Integer
-$FG,2$ip_$FG$	Input Pointer.  See $LK,"InputPointer.HC",A="FI:::/Kernel/SerialDev/InputPointer.HC"$.
 $FG,2$Irq$FG$	Interrupt (Request)
 $FG,2$JIT$FG$	Just-in-Time
 $FG,2$Kbd$FG$	Keyboard
@@ -84,8 +86,10 @@ $FG,2$Man$FG$	Manual
 $FG,2$Mem$FG$	Memory
 $FG,2$Mgd$FG$	Managed
 $FG,2$Mgr$FG$	Manager
+$FG,2$Mid$FG$	Middle
 $FG,2$Mon$FG$	Month
 $FG,2$MP$FG$	MultiProcessor
+$FG,2$Ms$FG$	Mouse
 $FG,2$Msg$FG$	Message
 $FG,2$Num$FG$	Number
 $FG,2$Obj$FG$	Object
@@ -160,7 +164,7 @@ $ID,2$This is Adam, as in Adam and Eve, the parent of all tasks.  Adam is immort
 $ID,-2$$TR,"Seth Tasks"$
 $ID,2$In the Bible, $LK,"Seth",A="BF:Genesis,4:25"$$FG$ is Adam and Eve's child.  Each CPU core has an executive task called $FG,2$Seth$FG$ that is immortal.  The Adam task on $FG,2$Core0$FG$ is also its $FG,2$Seth$FG$ task.
 $ID,-2$$TR,"Code and Data Heaps"$
-$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ inst, exclusively, and that inst is limited to calling routines $FG,2$+/-2Gig$FG$ from the current code location.  To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$.  The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used.  When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory.  You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:Mem512Alloc"$ heaps.
+$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ inst, exclusively, and that inst is limited to calling routines $FG,2$+/-2Gig$FG$ from the current code location.  To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$.  The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used.  When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory.  You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:MemPagAlloc"$ heaps.
 $ID,-2$$TR,"Parent, Child and PopUp Tasks"$
 $ID,2$Often a task will $LK,"Spawn",A="MN:Spawn"$() or $LK,"PopUp",A="MN:PopUp"$() a task as a helper.  The helper is known as a child Task, though you can $LK,"Spawn",A="MN:Spawn"$ a task and assign it a different parent... like $FG,2$Adam$FG$.  Links are kept as to who's whose child, so when one task is $LK,"Kill",A="MN:Kill"$()ed the child helper tasks die, too.  You can get a report of current system tasks with $LK,"TaskRep",A="MN:TaskRep"$().  There is just one window per task, so child tasks are needed for pop-ups.
 $ID,-2$$TR,"HolyC"$
@@ -176,6 +180,7 @@ $ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memor
 $ID,-2$$TR,"Compiler Intermediate Code"$
 $ID,2$The compiler generates insts one step before making actual assembly (machine) language insts.  This code is rev polish stack machine in nature and can be viewed with $LK,"PassTrace",A="MN:PassTrace"$().  The compiler does not $FG,2$interpret$FG$ code, except in the process of optimization to make the final machine code.  Assembly language output can be viewed when code is compiled with the $LK,"Trace",A="MN:Trace"$(), or, afterward, with $LK,"U",A="MN:U"$() or $LK,"Uf",A="MN:Uf"$("").
 $ID,-2$$TR,"Drive/Partition"$
+
 $ID,2$There is no distinction between $FG,2$drive$FG$ or $FG,2$partition$FG$.  They are specified with a single letter from $FG,2$A$FG$-$FG,2$Z$FG$.
 
 '$FG,2$:$FG$' is the boot drive.
@@ -197,8 +202,11 @@ $LK,"Editor Link Types",A="MN:LK_FILE"$
 $LK,"files_find_mask",A="FI:::/Doc/FileUtils.DD"$
 $LK,"Hash Table",A="HI:Hash"$
 $LK,"InFile",A="HI:InFile"$
+$LK,"Ona",A="HI:Snd"$
+$LK,"Pag",A="HI:Memory/BlkPool"$
 $LK,"RedSea File System",A="FI:::/Doc/RedSea.DD"$
 $LK,"Sprite",A="HI:Graphics/Sprite"$
+
 $TR,"CLI, STI, PUSHFD, POPFD"$
 $ID,2$These are x86 assembly insts.
 $FG,2$CLI$FG$ disable interrupts.
diff --git a/Doc/GraphicsOverview.DD b/Doc/GraphicsOverview.DD
index ae2fccf82179eacd6fbca73d7f091dbf1ea63c02..9259b85b00fb52623726fb90d103fff92a0896d8 100644
GIT binary patch
delta 52
wcmexo(rCKjf`EESVqRuxu9A+Ut&*FYm6esgV?jZ&en=)n9M0JMMWBll0Q=w*R{#J2

delta 49
vcmZoP{b#b_f`CeHs()#Tl8&RTlAD{Am6g6@K|!&8NG4bqMsNNu(8UP=xWy66

diff --git a/Doc/GuideLines.DD b/Doc/GuideLines.DD
index f7add04..51c2e08 100644
--- a/Doc/GuideLines.DD
+++ b/Doc/GuideLines.DD
@@ -30,7 +30,7 @@ $LK,"~/MakeHome.HC"$ a file compiled by the $LK,"Adam Task",A="FF:::/Doc/Glossar
 
 $FG,4$~/Home*$FG$ Copy $FG,2$Home*$FG$ files from the root into $FG,2$~$FG$ and customize them.  These files are invoked when the $LK,"Adam Task",A="FF:::/Doc/Glossary.DD,Adam Task"$ starts-up.
 
-$LK,"~/DoOnce.HC"$ a file invoked at the start-up of the first user.  Customize this!
+$LK,"~/Once.HC"$ a file invoked at the start-up of the first user.  Customize this!
 
 $LK,"~/Registry.HC"$ can be edited by hand or deleted to reset to defaults.  Takes affect next boot.
 
@@ -88,6 +88,8 @@ $ID,-5$
 
 * Use $FG,2$$LK,"CH_SHIFT_SPACE",A="MN:CH_SHIFT_SPACE"$$FG$ for spaces in quotes in source code because I run $LK,"Spaces-to-Tabs",A="FF:::/Adam/Opt/Utils/StrUtils.HC,S2T"$ on source code.
 
+* Do not use $FG,2$#if$FG$ or $FG,2$#ifdef$FG$
+
 
 
 $FG,5$$TX+CX,"Hash Sym Tables"$$FG$
diff --git a/Doc/HelpIndex.DD b/Doc/HelpIndex.DD
index fa9935e863bac68cb261eba21560b429c41ace33..eef56f4611e0a2d0b154d06c587775ef2f34ce49 100644
GIT binary patch
delta 62
zcmdmQw%csOes-pklFf(N&+tt?C}zaxm7k=f<7lho;c4ZSpS1b4m>;8Hera(kOwbp^
K*=!)e&kO+0!4%d2

delta 72
zcmdmOw%=^Ses-49l9K$*2iec?X%v)}Cexcept_ch$FG$.  Within a $FG,2$catch {}$FG$ blk, set the var $FG,2$Fs->catch_except$FG$ to $FG,2$TRUE$FG$ if you want to terminate the search for a handler.  Use $LK,"PutExcept",A="MN:PutExcept"$() as a handler, if you like.
+* See $LK,"::/Demo/Exceptions.HC"$.  $FG,2$try{} catch{}$FG$ and $FG,2$throw$FG$ are different from C++. $FG,2$throw$FG$ is a function with an 8-byte or less char arg.  The char string passed in $FG,2$throw()$FG$ can be accessed from within a $FG,2$catch{}$FG$ using the $FG,2$Fs->except_ch$FG$.  Within a $FG,2$catch {}$FG$ blk, set the var $FG,2$Fs->catch_except$FG$ to $FG,2$TRUE$FG$ if you want to terminate the search for a hndlr.  Use $LK,"PutExcept",A="MN:PutExcept"$() as a hndlr, if you like.
 
 * A function is available similar to $FG,2$sizeof$FG$ which provides the offset of a member of a class.  It's called $FG,2$offset$FG$.  You place the class name and member inside as in $FG,2$offset(classname.membername)$FG$.  It has nothing to do with 16-bit code.  Both $FG,2$sizeof$FG$ and $FG,2$offset$FG$ only accept one level of member vars.  That is, you can't do $FG,2$sizeof(classname.membername.submembername)$FG$.$FG$
 
diff --git a/Doc/InFile.DD b/Doc/InFile.DD
index ed63e9d..35f1eea 100644
--- a/Doc/InFile.DD
+++ b/Doc/InFile.DD
@@ -2,6 +2,6 @@ $WW,1$$FG,2$InFiles$FG$ are used to generate user input to automate operations.
 
 When an $FG,2$InFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed which intercepts real user input and generates fake input.  InFiles are $LK,"HolyC",A="FI:::/Doc/HolyC.DD"$ programs run by the child whose stdout goes to the parent's input buffer.  $LK,"Msg",A="MN:Msg"$() can be included in an $FG,2$InFile$FG$ to send special keys or mouse cmds to the parent.  While an $FG,2$InFile$FG$ is running, the normal input gets diverted to the InFile task and can be filtered and sent back to the parent task.  Unless you are driving functions which prompt for data, you can probably use an $FG,2$#include$FG$ file in place of an $FG,2$InFile$FG$.
 
-See $LK,"::/Demo/InFile/INDir.IN"$.
+See $LK,"::/Demo/InFile/InDir.IN"$.
 
 Note: $LK,"In",A="MN:In"$("") can be used if all you need is to send ASCII characters.  It differs from $LK,"InStr",A="MN:InStr"$().  You'll probably use $LK,"In",A="MN:In"$() a lot and not $LK,"InStr",A="MN:InStr"$().  With $LK,"In",A="MN:In"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"BootHDIns",A="MN:BootHDIns"$().
diff --git a/Doc/InputPointer.DD b/Doc/InputPointer.DD
deleted file mode 100644
index 05f51dc..0000000
--- a/Doc/InputPointer.DD
+++ /dev/null
@@ -1,16 +0,0 @@
-$WW,1$"Input Ptr" is the mouse.  In the future, might be joystick or pad.
-
-$LK,"ip.pos.x",A="MN:ip"$ and $LK,"ip.pos.y",A="MN:ip"$ can be used to access the x and y coordinates of the input ptr.  They are relative to the scrn, not window.  These can be used if you don't want to use msg passing.  $LK,"ip.pos.z",A="MN:ip"$ is the wheel.
-
-$LK,"ip.pos_text.x",A="MN:CIPStateGlbls"$ and $LK,"ip.pos_text.y",A="MN:CIPStateGlbls"$ are the text column and row of the input ptr.  See $LK,"::/Demo/Games/Maze.HC"$.
-
-See $LK,"CIPStateGlbls",A="MN:CIPStateGlbls"$ and $LK,"CMouseStateGlbls",A="MN:CMouseStateGlbls"$.
-
-$HL,1$//****
-mouse.pos.x=mouse.prescale.x*mouse.scale.x*ip_grid.x_speed;
-ip.presnap.x=ToI64(ip.scale.x*mouse.pos.x)+ip.offset.x;
-if (ip_grid.snap)
-  ip.pos.x=Trunc(ip.presnap.x/ip_grid.x)*ip_grid.x+ip_grid.x_offset;
-else
-  ip.pos.x=ip.presnap.x;
-//****$HL,0$
diff --git a/Doc/TaskSrv.DD b/Doc/Job.DD
similarity index 53%
rename from Doc/TaskSrv.DD
rename to Doc/Job.DD
index aeb7c0d7957a3b7054cb0f5966043384f852e8fd..003afacda3aec1016085752b32be3e755baa2060 100644
GIT binary patch
delta 302
zcmX>uI9+f<1k>ahOg!~o`ANkdc_}$XN;;0VO1^$p2muu?E-o$=XJ6eQR~;W$TT2xc
zA8&0Z-B2GLC9nLXpwc}5yi_DzPyrQ$4nsqNS_Hv{AnCE3Y|E@U*@)Sd-zz@}X1cRi
ze$wO~W^HCKf2Ya2m>os1**{s7B?+vcip2v=A7!xx)2yuFU^<@F8%(cdt>b|Caadj65pAMP<&pDa9U%c_}%mMM^r3wo1N!R;Z$rJ(y&aAVNW>e6VzM!_++bP#aJj
zH~9;55?EOziwBrq!eR@ipRk03X**VLFx|si#|tqA>dVPOY`V%QBG~=CIfBie2>^04
BVK4vy

diff --git a/Doc/KeyAlloc.DD b/Doc/KeyAlloc.DD
index 9ad2891..601b0d7 100644
--- a/Doc/KeyAlloc.DD
+++ b/Doc/KeyAlloc.DD
@@ -4,11 +4,11 @@ See $LK,"Char",A="HI:Char"$ for definition of scan codes.
 
 See $MA-X+PU,"Key Map",LM="KeyMap;View;\n"$ for a detailed list of key commands.
 
-When you are at the cmd line, editing documents, browsing documentation and help, entering items in forms or in menu's, the $LK,"DolDoc",A="MN:CDoc"$ editor handles keys.  It allows you to define your own key handlers in a $LK,"MyPutKey",A="MN:MyPutKey"$() function.  If you choose, you can catch keys, overriding the default handlers.  See $LK,"DocPutKey",A="MN:DocPutKey"$().  The following is an overview of key allocations.
+When you are at the cmd line, editing documents, browsing documentation and help, entering items in forms or in menu's, the $LK,"DolDoc",A="MN:CDoc"$ editor handles keys.  It allows you to define your own key hndlrs in a $LK,"MyPutKey",A="MN:MyPutKey"$() function.  If you choose, you can catch keys, overriding the default hndlrs.  See $LK,"DocPutKey",A="MN:DocPutKey"$().  The following is an overview of key allocations.
 
-$FG,2$$FG$ and $FG,2$$FG$  Free for user configurations in your $LK,"MyPutKey",A="MN:MyPutKey"$() handler, except for $FG,2$ALT-BACKSPACE$FG$ (undo).  There are a few examples pre-defined, but you can change them if you wish.
+$FG,2$$FG$ and $FG,2$$FG$  Free for user configurations in your $LK,"MyPutKey",A="MN:MyPutKey"$() hndlr, except for $FG,2$ALT-BACKSPACE$FG$ (undo).  There are a few examples pre-defined, but you can change them if you wish.
 
-$FG,2$$FG$ and $FG,2$$FG$  Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor.  I reserve the right to alloc these, but in the mean time, you can define your own handlers with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ handlers take a scan_code as an arg.
+$FG,2$$FG$ and $FG,2$$FG$  Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor.  I reserve the right to alloc these, but in the mean time, you can define your own hndlrs with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$().  They operate either in a interrupt environment or in the window mgr when it queues kbd msgs.  You can do $LK,"Raw",A="MN:Raw"$() output.  $FG,2$$FG$ hndlrs take a scan_code as an arg.
 
 $FG,2$$FG$  Auto-completes local words.
 
diff --git a/Doc/KeyDev.DD b/Doc/KeyDev.DD
index d0b5a68..006cb95 100644
--- a/Doc/KeyDev.DD
+++ b/Doc/KeyDev.DD
@@ -1,14 +1,14 @@
-$WW,1$The editor mostly stays in a $LK,"GetKey",A="MN:GetKey"$()/$LK,"PutKey",A="MN:PutKey"$() loop.  The putkey portion is where keys are acted-upon.  TempleOS has a chain of putkey handlers in a $LK,"Circular Queue",A="HI:Circular Queue"$ with priorities.  The highest priority handlers can choose to terminate handling, otherwise, the keys get sent on down the chain.
+$WW,1$The editor mostly stays in a $LK,"GetKey",A="MN:GetKey"$()/$LK,"PutKey",A="MN:PutKey"$() loop.  The putkey portion is where keys are acted-upon.  TempleOS has a chain of putkey hndlrs in a $LK,"Circular Queue",A="HI:Circular Queue"$ with priorities.  The highest priority hndlrs can choose to terminate handling, otherwise, the keys get sent on down the chain.
 
 $LK,"KeyDevAdd",A="MN:KeyDevAdd"$() defines a putkey device with a priority.  "Device" might be a misnomer.  Currently, the following are defined:
 
-Priority    Handler
+Priority    Hndlr
 ---------- ---------
-$FG,2$0x20000000$FG$ $LK,"MyPutKey",A="MN:MyPutKey"$() user handler
+$FG,2$0x20000000$FG$ $LK,"MyPutKey",A="MN:MyPutKey"$() user hndlr
 $FG,2$0x40000000$FG$ $LK,"KDInputFilterPutKey",A="MN:KDInputFilterPutKey"$() for $LK,"In",A="MN:In"$(), $LK,"InStr",A="MN:InStr"$(), and $LK,"InFile",A="MN:InFile"$() handling.
 $FG,2$0x60000000$FG$ $LK,"KDRawPutKey",A="MN:KDRawPutKey"$() nonwindowed direct to video mem debug output. 
 $FG,2$0x80000000$FG$ $LK,"KDDocPutKey",A="MN:KDDocPutKey"$() standard document cmds
 
-Since handling individual keys is slow, TempleOS supports PutS() as well.  If no puts handler is defined, individual keys are sent.
+Since handling individual keys is slow, TempleOS supports PutS() as well.  If no puts hndlr is defined, individual keys are sent.
 
 $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_key$FG$ and $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_s$FG$ are call back routines which offer some neat tricks.  See $LK,"::/Apps/Psalmody/JukeBox.HC"$.  There is a var $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_data$FG$ which gets passed to them.
diff --git a/Doc/MemOverview.DD b/Doc/MemOverview.DD
index 891bd63..f227c6b 100644
--- a/Doc/MemOverview.DD
+++ b/Doc/MemOverview.DD
@@ -1,6 +1,6 @@
 $WW,1$$FG,5$$TX+CX,"Memory Overview"$$FG$
 
-Paging is practically not used.  64-bit mode requires paging, however, so it is identity-mapped, virtual identical to physical.  All tasks on all cores use the same page table map, just as though all addresses are physical addresses.  2Meg or 1Gig page table entries are used.  Nothing swaps to disk.  You can adjust $LK,"MEM_MAPPED_SPACE",A="MN:MEM_MAPPED_SPACE"$ for more RAM.
+Paging is practically not used.  64-bit mode requires paging, however, so it is identity-mapped -- virtual identical to physical.  All tasks on all cores use the same page table map, just as though all addresses are physical addresses.  2Meg or 1Gig page table entries are used.  Nothing swaps to disk.
 
 In TempleOS, the lowest 2Gig of memory is called the $FG,2$code heap$FG$.  TempleOS's compiler always uses 32-bit signed relative JMP & CALL insts because 64-bit CALLs take two insts.  With signed +/- 32-bit values, code can only call a function within 2Gig distance.  Therefore, TempleOS keeps all code in the lowest 2Gig memory addresses including what would normally be called "the kernel".  Two Gig is plenty for code, don't worry.
 
@@ -8,50 +8,39 @@ You can create new, independent heaps using $LK,"HeapCtrlInit",A="MN:HeapCtrlIni
 
 Memory alloced by a task will be freed when the task is killed.  The $LK,"Adam Task",A="FF:::/Doc/Glossary.DD,Adam Task"$ is a task that never dies.  His memory is like kernel memory in other operating systems.  See $LK,"ACAlloc",A="MN:ACAlloc"$(), $LK,"AMAlloc",A="MN:AMAlloc"$(), $LK,"AMAllocIdent",A="MN:AMAllocIdent"$() and $LK,"AStrNew",A="MN:AStrNew"$().
 
-All of the regular page tables are marked, "cached".  When accessing hardware, however, you need uncached page table.  The lowest 4Gig of addresses have an alias used to access hardware located toward the top of mapped space.  It is currently at $FG,2$0x$TX,"3F00000000",D="DD_UNCACHED_ALIAS"$$FG$ but can change if $LK,"MEM_MAPPED_SPACE",A="MN:MEM_MAPPED_SPACE"$ is adjusted.  See $LK,"dev.uncached_alias",A="FF:::/Kernel/KEnd.HC,dev.uncached_alias"$.
+All of the regular page tables are marked, "cached".  When accessing hardware, however, you need uncached page table.  The lowest 4Gig addresses have an alias to access hardware located toward the top of mapped space, $FG,2$0x$TX,"01AA000000",D="DD_UNCACHED_ALIAS"$$FG$.  See $LK,"dev.uncached_alias",A="FF:::/Kernel/KEnd.HC,dev.uncached_alias"$.
 
-During an extended powered-on session of TempleOS, in theory, memory will become fragmented, requiring a reboot.  It has never happened to me.
+During an extended powered-on session of TempleOS, in theory, memory will become fragmented, requiring a reboot.  It has never happens to me.
 
 See $LK,"MemRep",A="MN:MemRep"$() and $LK,"::/Demo/MemDemo.HC"$.
 
+
 $FG,5$$TX+CX,"Single System-wide Mem Map"$
 
-$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"0003654F",D="DD_KERNEL_END"$$FG$
+$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"00036AEF",D="DD_KERNEL_END"$$FG$
 $ID,2$Kernel module, placed here by the boot-loader, $LK,"BOOT_RAM_BASE",A="MN:BOOT_RAM_BASE"$.
 $ID,-2$
 $FG,2$ 0x00$TX,"00096600",D="DD_BOOT_HIGH_LOC_DVD"$- 0x00$TX,"00096FFF",D="DD_BOOT_HIGH_LOC_DVD_END"$$FG$
 $ID,2$$FG$Boot block relocated here before loading the Kernel module, $LK,"BootDVD",A="FI:::/Adam/Opt/Boot/BootDVD.HC"$ & $LK,"BootHD",A="FI:::/Adam/Opt/Boot/BootHD.HC"$.
 $ID,-2$
-$FG,2$ 0x00$TX,"00097000",D="DD_MP_VECT"$- 0x00$TX,"00097030",D="DD_MP_VECT_END"$$FG$
-$ID,2$Multicore start-up vect code, $LK,"MPN_VECT",A="MN:MPN_VECT"$.
-$ID,-2$
-$FG,2$~0x000009F000- 0x000009FFFF
-$ID,2$$FG$Extended BIOS data area.
-$ID,-2$
-$FG,2$ 0x00000A0000- 0x00000BFFFF$FG$
-$ID,2$VGA graphics mem, marked as write-through cache in $LK,"text",A="MN:text"$.vga_alias.
-$ID,-2$
-$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"002035FF",D="DD_SYS_FIXED_AREA_END"$$FG$
-$ID,2$$LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for page tables and misc.  $TX,"256Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ of address space mapped.
-$ID,-2$
-$FG,2$ 0x00$TX,"00203600",D="DD_SYS_HEAP_BASE"$- 0x00$TX,"7FFFFFFF",D="DD_SYS_HEAP_LIMIT"$$FG$
-$ID,2$Code Heap mem.
-$ID,-2$
-$FG,2$             - 0x007FFFFFFF$FG$
-$ID,2$Data Heap mem.  (This exists if there is less than 2Gig of code heap.)
-$ID,-2$
+$FG,2$ 0x00$TX,"00097000",D="DD_MP_VECT"$- 0x00$TX,"00097030",D="DD_MP_VECT_END"$$FG$ Multicore start-up vect code, $LK,"MPN_VECT",A="MN:MPN_VECT"$.
+$FG,2$~0x000009F000- 0x000009FFFF$FG$ Extended BIOS data area.
+$FG,2$ 0x00000A0000- 0x00000BFFFF$FG$ VGA graphics mem with alias at $LK,"text",A="MN:text"$.vga_alias.
+$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"00101FFF",D="DD_SYS_FIXED_AREA_END"$$FG$ $LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for misc.
+$FG,2$ 0x00$TX,"0010F000",D="DD_MEM_HEAP_BASE"$- 0x00$TX,"7FFFFFFF",D="DD_MEM_HEAP_LIMIT"$$FG$ Code Heap mem.
+
 $FG,2$ 0x00E0000000- 0x00FFFFFFFF$FG$
 $ID,2$32-bit devices could alloc memory at 0xF0000000 going up, but this is wrong, since some PCs already have devices at 0xF0000000.  No PCI devices are supported, so $LK,"Mem32DevAlloc",A="MN:Mem32DevAlloc"$() flaws are not an issue.
 $ID,-2$
 $FG,2$ 0x0080000000-~0x00DFFFFFFF$FG$
-$FG,2$ 0x0100000000-~0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
+$FG,2$ 0x0100000000-~0x$TX,"01A9FFFFFF",D="DD_PHYSICAL_SPACE_END"$$FG$
 $ID,2$Data Heap mem.  (The physical memory that exists in this range is data heap.)
 $ID,-2$
-$FG,2$ 0x$TX,"3F00000000",D="DD_UNCACHED_ALIAS"$- 0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
+$FG,2$ 0x$TX,"01AA000000",D="DD_UNCACHED_ALIAS"$- 0x$TX,"02A9FFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
 $ID,2$Uncached alias of first 4Gig.  (For 32-bit device access.)
 $ID,-2$
-$FG,2$             - 0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
-$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting bwd from $TX,"256Gig",D="DD_MEM_MAPPED_SPACE_GIG"$, but no PCI devices are actually supported$WW,0$.
+$FG,2$             - 0x$TX,"02A9FFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
+$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting bwd, but no PCI devices are actually supported$WW,0$.
 $ID,-2$
 
 
@@ -60,15 +49,14 @@ $WW,1$* Note: There is a break in the data-heap block pool.  This has no effect
 * Note: For systems with less than 2Gig RAM, the code and data heap block pools are the same.  For systems with 2-4Gig of RAM, the code heap is 1/4 of the total.  See $LK,"BlkPoolsInit",A="MN:BlkPoolsInit"$().
 
 
-
 $FG,5$$TX+CX,"History"$$FG$
 
 In 2003, I wanted to make a no-paging ring-0-only 64-bit operating system for super speed with simplicity and full access.  With paging, every memory request requires 5 accesses -- it must access the address itself, 4K, 2Meg, 1Gig, and 512Gig page tables, but the CPU's translation look-aside buffer mostly removes the penalty for using paging.  So, I did not want to use paging, but long mode requires it.  I did the next best thing -- I identity-mapped everything and achieved the simplicity I was after with subtle performance boosts, not wasting time changing address maps.  And, I look forward to the day I command Intel to make an optimized no-paging long mode.
 
 I needed VGA A0000-BFFFF memory to be write-through and 0xE0000000-0xFFFFFFFF to be uncached for various devices.  All 64-bit computers allow stopping address translation at 2Meg page size, not using 4K.  I wanted to use 2Meg for everything because it's faster, with one less level of page tables.  I had to make A0000-BFFFF write-through, though, so I could not use 2Meg size on the lowest page.  I did the lowest 2Meg area as 4K pages.  I also unmapped the first 4K to cause a fault when dereferencing NULL.
 
-In 2016, I came-up with an alternate idea.  I double mapped the lowest memory with an alias that was uncached.  Accessing the lowest 2Meg area directly was cached but the alias I created up at the $LK,"top of address space",A="MN:MEM_MAPPED_SPACE"$ was uncached.  Unfortunately, I could no longer boast of the simplicity of identity mapping everything.  Since many of my users are familiar with A0000-BFFFF, it is actually pretty seriously unfortunate that they cannot use the easy-to-understand numbers of A0000-BFFFF, but must access the relocated alias location.  See $LK,"text.vga_alias",A="FF:::/Kernel/KEnd.HC,text.vga_alias"$.  I also no longer cause a fault when dereferencing NULL.
+In 2016, I came-up with an alternate idea.  I double mapped the lowest memory with an alias that was uncached.  Accessing the lowest 2Meg area directly was cached but the alias I created up at the top of address space was uncached.  See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$().  Unfortunately, I could no longer boast of the simplicity of identity mapping everything.  Since many of my users are familiar with A0000-BFFFF, it is actually pretty seriously unfortunate that they cannot use the easy-to-understand numbers of A0000-BFFFF, but must access the relocated alias location.  See $LK,"text.vga_alias",A="FF:::/Kernel/KEnd.HC,text.vga_alias"$.  I also no longer cause a fault when dereferencing NULL.
 
-Then, I switched to 1Gig page sizes.  For the lowest 4Gig, I set-up an alias up at the $LK,"top of address space",A="MN:MEM_MAPPED_SPACE"$.  Not all computers support 1Gig page tables, however, so I also support 2Meg.
+Then, I switched to 1Gig page sizes.  For the lowest 4Gig, I set-up an alias up at the top of address space.  See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$().  Not all computers support 1Gig page tables, however, so I also support 2Meg.
 
 My original plan was to allow changing the page tables as needed, so I had code for taking control of 2Meg pages and marking them uncached or whatever.  When I did a HDAudio driver, I requested some 32-bit address space as uncached.  Today, all of the first 4Gig can be accessed without caching at the $LK,"dev.uncached_alias",A="FF:::/Kernel/KEnd.HC,dev.uncached_alias"$.
diff --git a/Doc/Menus.DD b/Doc/Menus.DD
index a760998..5502099 100644
--- a/Doc/Menus.DD
+++ b/Doc/Menus.DD
@@ -21,7 +21,7 @@ Help
   About(,'/');
 }
 $FG$
-The first arg is the msg code and it is optional with the default being $LK,"MSG_KEY_DOWN_UP",A="MN:MSG_KEY_DOWN_UP"$.  The second arg is the msg $FG,2$a1$FG$ value which is $LK,"ASCII",A="MN:CH_CTRLA"$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.  The third arg is the msg $FG,2$a2$FG$ value which is the $LK,"scan_code",A="FI:::/Doc/CharOverview.DD"$$FG$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.
+The first arg is the msg code and it is optional with the default being $LK,"MSG_KEY_DOWN_UP",A="MN:MSG_KEY_DOWN_UP"$.  The second arg is the msg $FG,2$arg1$FG$ value which is $LK,"ASCII",A="MN:CH_CTRLA"$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.  The third arg is the msg $FG,2$arg2$FG$ value which is the $LK,"scan_code",A="FI:::/Doc/CharOverview.DD"$$FG$ of the key in the case of $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$.
 
 Press $FG,2$$FG$ and "Insert ASCII/ScanCode".
 
diff --git a/Doc/Mouse.DD b/Doc/Mouse.DD
new file mode 100644
index 0000000..4931dd0
--- /dev/null
+++ b/Doc/Mouse.DD
@@ -0,0 +1,16 @@
+$WW,1$$LK,"ms.pos.x",A="MN:ms"$ and $LK,"ms.pos.y",A="MN:ms"$ can be used to access the x and y coordinates of the mouse.  They are relative to the scrn, not window.  These can be used if you don't want to use msg passing.  $LK,"ms.pos.z",A="MN:ms"$ is the wheel.
+
+$LK,"ms.pos_text.x",A="MN:CMsStateGlbls"$ and $LK,"ms.pos_text.y",A="MN:CMsStateGlbls"$ are the text column and row.  See $LK,"::/Demo/Games/Maze.HC"$.
+
+See $LK,"CMsStateGlbls",A="MN:CMsStateGlbls"$ and $LK,"CMsHardStateGlbls",A="MN:CMsHardStateGlbls"$.
+
+The $FG,2$hard$FG$ designation, as in $FG,2$ms_hard$FG$, represents hardware layer items before the application of an abstraction layer.
+
+$HL,1$//****
+ms_hard.pos.x=ms_hard.prescale.x*ms_hard.scale.x*ms_grid.x_speed;
+ms.presnap.x=ToI64(ms.scale.x*ms_hard.pos.x)+ms.offset.x;
+if (ms_grid.snap)
+  ms.pos.x=Trunc(ms.presnap.x/ms_grid.x)*ms_grid.x+ms_grid.x_offset;
+else
+  ms.pos.x=ms.presnap.x;
+//****$HL,0$
diff --git a/Doc/MultiCore.DD b/Doc/MultiCore.DD
index 705523a..72735dc 100644
--- a/Doc/MultiCore.DD
+++ b/Doc/MultiCore.DD
@@ -6,7 +6,7 @@ Only tasks on $FG,2$Core0$FG$ can have windows, but other cores can help render
 
 Each core has an executive $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ which is the father of all tasks on that core.  $LK,"Adam",A="FF:::/Doc/Glossary.DD,Adam Task"$ is the $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ on $FG,2$Core0$FG$.
 
-You give a job to a $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ with $LK,"JobQue",A="MN:JobQue"$() and get the res with $LK,"JobResGet",A="MN:JobResGet"$().  You spawn a task on another core with $LK,"Spawn",A="MN:Spawn"$().
+You give a job to a $LK,"Seth Task",A="FF:::/Doc/Glossary.DD,Seth Tasks"$ with $LK,"JobQue",A="MN:JobQue"$() and get the result with $LK,"JobResGet",A="MN:JobResGet"$().  You spawn a task on any core with $LK,"Spawn",A="MN:Spawn"$().
 
 Note: You must use the $FG,2$LOCK$FG$ asm prefix when changing shared structures in a multicore environment.  The $LK,"LBts",A="MN:LBts"$(), $LK,"LBtr",A="MN:LBtr"$() and $LK,"LBtc",A="MN:LBtc"$() insts have $FG,2$LOCK$FG$ prefixes.  The compiler has a $FG,2$lock{}$FG$ feature but it doesn't work well.  See $LK,"::/Demo/MultiCore/Lock.HC"$.
 
diff --git a/Doc/Pags.DD b/Doc/Pags.DD
new file mode 100644
index 0000000..90488d0
--- /dev/null
+++ b/Doc/Pags.DD
@@ -0,0 +1 @@
+$WW,1$The word $FG,2$Pag$FG$ refers to an arbitrilly created $LK,"MEM_PAG_SIZE",A="MN:MEM_PAG_SIZE"$ unit of heap allocation.  TempleOS does not alter the CPU page tables after setting them up at boot in $LK,"SYS_INIT_PAGE_TABLES",A="MN:SYS_INIT_PAGE_TABLES"$, so the CPU hardware page size is rarely important.
diff --git a/Doc/Print.DD b/Doc/Print.DD
index 5562ef3..03375ff 100644
--- a/Doc/Print.DD
+++ b/Doc/Print.DD
@@ -75,9 +75,13 @@ $LK,"TextPrint",A="MN:TextPrint"$(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...)
 
 $LK,"ExePrint",A="MN:ExePrint"$(U8 *fmt,...) compiles and execute a string.  Note: It returns the res of the last executed expression.
 
-$LK,"InPrint",A="MN:InPrint"$(I64 ms,U8 *fmt,...) $LK,"PutChars",A="MN:PutChars"$()s one at a time with a delay.
+$LK,"Once",A="MN:Once"$(U8 *fmt,...) Writes User code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot.
 
-$LK,"RawPrint",A="MN:RawPrint"$(I64 ms,U8 *fmt,...) sends direct to scrn memory, bypassing window manager.
+$LK,"AOnce",A="MN:AOnce"$(U8 *fmt,...) Writes Adam code to $LK,"Registry",A="FI:~/Registry.HC"$ to be executed next boot.
+
+$LK,"InPrint",A="MN:InPrint"$(I64 mS,U8 *fmt,...) $LK,"PutChars",A="MN:PutChars"$()s one at a time with a delay.
+
+$LK,"RawPrint",A="MN:RawPrint"$(I64 mS,U8 *fmt,...) sends direct to scrn memory, bypassing window manager.
 
 $LK,"User",A="MN:User"$(U8 *fmt,...) Spawns a user and execute a string on start-up.
 
diff --git a/Doc/Quirks.DD b/Doc/Quirks.DD
index 4f65ce4..30b267b 100644
--- a/Doc/Quirks.DD
+++ b/Doc/Quirks.DD
@@ -18,7 +18,7 @@ $WW,1$* You run a risk of problems if you do file operations on the same files s
 $ID,2$
 A) $LK,"DocBottom",A="MN:DocBottom"$() followed by $LK,"DocClear",A="MN:DocClear"$() to clear the $LK,"CDoc",A="MN:CDoc"$ so it has no active widgets.
 
-B) Disable window mgr button click checking with $FG,4$Fs->win_inhibit$FG$ set to mask $LK,"WIF_SELF_IP_L",A="MN:WIF_SELF_IP_L"$|$LK,"WIF_FOCUS_TASK_IP_L_D",A="MN:WIF_FOCUS_TASK_IP_L_D"$|$LK,"WIF_SELF_IP_R",A="MN:WIF_SELF_IP_R"$|$LK,"WIF_FOCUS_TASK_IP_R_D",A="MN:WIF_FOCUS_TASK_IP_R_D"$.  This inhibits window mgr operations but still generates messages from button clicks.
+B) Disable window mgr bttn click checking with $FG,4$Fs->win_inhibit$FG$ set to mask $LK,"WIF_SELF_MS_L",A="MN:WIF_SELF_MS_L"$|$LK,"WIF_FOCUS_TASK_MS_L_D",A="MN:WIF_FOCUS_TASK_MS_L_D"$|$LK,"WIF_SELF_MS_R",A="MN:WIF_SELF_MS_R"$|$LK,"WIF_FOCUS_TASK_MS_R_D",A="MN:WIF_FOCUS_TASK_MS_R_D"$.  This inhibits window mgr operations but still generates messages from bttn clicks.
 $ID,-2$
 * $FG,2$switch/case$FG$ stmts alloc a single jump table--do not use with wide, sparse ranges of case values.
 
diff --git a/Doc/RedSea.DD b/Doc/RedSea.DD
index b672c0a..7b12aab 100644
--- a/Doc/RedSea.DD
+++ b/Doc/RedSea.DD
@@ -6,13 +6,13 @@ $HL,1$#define CDIR_FILENAME_LEN	38 //Must include terminator zero
 
 The following bit field shows valid 8-Bit ASCII filename characters.
 
-U32 chars_bmp_filename[8]=
+U32 char_bmp_filename[8]=
 {0x0000000, 0x03FF73FB, 0xEFFFFFFF, 0x2FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
 
 public class CDirEntry //64-byte fixed-size
 {
   U16 attr;	//See $LK,"RS_ATTR_DIR",A="MN:RS_ATTR_DIR"$.  I would like to change these.
-  U8 name[CDIR_FILENAME_LEN]; //See $LK,"chars_bmp_filename",A="MN:chars_bmp_filename"$, $LK,"FileNameChk",A="MN:FileNameChk"$
+  U8 name[CDIR_FILENAME_LEN]; //See $LK,"char_bmp_filename",A="MN:char_bmp_filename"$, $LK,"FileNameChk",A="MN:FileNameChk"$
   I64 cluster; (blk) //One sector per cluster.
   I64 size;	//In bytes
   CDate datetime; //See  $LK,"DateTime",A="::/Doc/TimeDate.DD"$, $LK,"Implementation of DateTime",A="FI:::/Kernel/KDate.HC"$
diff --git a/Doc/Requirements.DD b/Doc/Requirements.DD
index cea2773..16d2a8e 100644
--- a/Doc/Requirements.DD
+++ b/Doc/Requirements.DD
@@ -10,7 +10,7 @@ $FG,5$Supported Hardware$FG$
 
 * Most$FG$ keyboards and mice.
 
-* Minimum $TX,"512Meg",D="DD_MEM_MIN_MEG"$ RAM; Maximum $TX,"256Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ RAM ($LK,"easily increased",A="MN:MEM_MAPPED_SPACE"$).
+* Minimum $TX,"512Meg",D="DD_MEM_MIN_MEG"$ RAM.
 
 * Internal PC Speakers.
 
diff --git a/Doc/Snd.DD b/Doc/Snd.DD
new file mode 100644
index 0000000..2aee02d
--- /dev/null
+++ b/Doc/Snd.DD
@@ -0,0 +1 @@
+$WW,1$Sound is generated with $FG,2$I8$FG$ vals called $FG,2$ona$FG$'s.  See $LK,"Note2Ona",A="MN:Note2Ona"$() and $LK,"Ona2Freq",A="MN:Ona2Freq"$().  God does not want death screams, perhaps, because God has PTSD or soldiers have PTSD.  (Imagine wounded on battlefields.)  $FG,2$Ona$FG$'s will allow elegant wave files for export and will allow the creation of simple hardware over the next centuries.  $LK,"ONA_REST",A="MN:ONA_REST"$ is off.
diff --git a/Doc/Sprite.DD b/Doc/Sprite.DD
index 8ae908f..3318cb9 100644
--- a/Doc/Sprite.DD
+++ b/Doc/Sprite.DD
@@ -2,6 +2,6 @@ $WW,1$A $LK,"CSprite",A="MN:CSprite"$ is an ordered list of $LK,"these",A="MN:SP
 
 See $LK,"::/Demo/Graphics/SpritePlot.HC"$, $LK,"::/Demo/Graphics/SpritePlot3D.HC"$, $LK,"::/Demo/Graphics/SpritePut.HC"$, $LK,"::/Demo/Graphics/SpriteRaw.HC"$ and $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$().
 
-Be aware that copying $FG,2$SP$FG$, $FG,2$IB$FG$, or $FG,2$IS$FG$ entries with the clipboard ress in duplicate entries with different nums.  You can manually remove dups by editing with $FG,2$$FG$ and setting to the original num.
+Be aware that copying $FG,2$SP$FG$, $FG,2$IB$FG$, or $FG,2$IS$FG$ entries with the clipboard results in duplicate entries with different nums.  You can manually remove dups by editing with $FG,2$$FG$ and setting to the original num.
 
 See $LK,"::/Adam/Gr/GrSpritePlot.HC",A="FL:::/Adam/Gr/GrSpritePlot.HC,1"$ for how CSprite are stored.$FG$
diff --git a/Doc/Start.DD b/Doc/Start.DD
index 7aa8e75..43e53b1 100644
--- a/Doc/Start.DD
+++ b/Doc/Start.DD
@@ -1,4 +1,4 @@
-$WW+H,1$$FG,5$$TX+CX,"TempleOS V4.13",D="DD_OS_NAME_VERSION"$$FG$
+$WW+H,1$$FG,5$$TX+CX,"TempleOS V5.00",D="DD_OS_NAME_VERSION"$$FG$
 
 $TX+CX,"Public Domain Operating System"$
 
diff --git a/Doc/StdTempleOSPC.DD b/Doc/StdTempleOSPC.DD
index e8cdb0d..dda6068 100644
--- a/Doc/StdTempleOSPC.DD
+++ b/Doc/StdTempleOSPC.DD
@@ -1,6 +1,6 @@
 $WW,1$$FG,5$$TX+CX,"The Standard TempleOS PC",HTML="http://www.templeos.org/Wb/Home/Web/TAD/TAD.html"$$FG$
 
-All desktop PCs will have 8-channel OCTART super-simple high speed serial ports to replace USB.  They are simpler because the driver is as simple as old school $LK,"RS232 Serial",A="FI:::/Doc/Comm.HC"$, they have no USB end-points and they have no USB human interface device reports.  Computer mice will all have exactly two buttons and one wheel.  Game controllers will all be the standard deluxe $TX,"game console controllers",HTML="http://www.gamestop.com/pc/accessories/steam-controller/121865"$ that are popular today.  It will have 8 big TX and 8 big RX fifos that allow flow control characters to jump the queue.  It should be locked-down to as few options as possible, like 8-1-N only, although hardware may use a USB frame, not an RS232, so stop bits might not be relevant.  Perhaps, just two baud rates -- high and low speed are needed.  Low speed is good for slow microcontrollers and allows longer cable length.  Keyboard, mouse and game controller can be low speed.
+All desktop PCs will have 8-channel OCTART super-simple high speed serial ports to replace USB.  They are simpler because the driver is as simple as old school $LK,"RS232 Serial",A="FI:::/Doc/Comm.HC"$, they have no USB end-points and they have no USB human interface device reports.  Computer mice will all have exactly two bttns and one wheel.  Game controllers will all be the standard deluxe $TX,"game console controllers",HTML="http://www.gamestop.com/pc/accessories/steam-controller/121865"$ that are popular today.  It will have 8 big TX and 8 big RX fifos that allow flow control characters to jump the queue.  It should be locked-down to as few options as possible, like 8-1-N only, although hardware may use a USB frame, not an RS232, so stop bits might not be relevant.  Perhaps, just two baud rates -- high and low speed are needed.  Low speed is good for slow microcontrollers and allows longer cable length.  Keyboard, mouse and game controller can be low speed.
 
 The USB creators banned generic devices, requiring a signed, certified driver for everything!  That's no good.  We allow any device and will communicate, generically, using a serial terminal program like the old school HyperTerminal, XTalk or Telnet.
 
@@ -41,7 +41,7 @@ We want a CPU mode with virtual IO port addresses similar to how paging creates
 
 Meanwhile, a complicated PCI interface can be designed along-side the TempleOS interface for Windows and Linux.  It would almost be possible to carry-on separate lives, however, the super-simple serial requires getting rid of USB since super-simple serial is a new hardware standard.  People can add USB ports with a PCI device card.
 
-God said He wants single audio voice for the sound.  I think we want a word-sized IO port for period with zero causing it to be off.  The period should allow for 20Hz to 20,000 Hz.  The PIT period register for PC speaker seems okay, whatever it is.
+God said He wants single-voice 8-bit signed MIDI-like sample for the sound.  God does not want death screams, perhaps, because God has PTSD or soldiers have PTSD.  (Imagine wounded on battlefields.)
 
 The video will be a linear frame buffer 640x480 16 color with one-byte-per-pixel even though it is only 16 color with is 4-bit.  Perhaps, we have a interrupt to sync with the refresh.
 
@@ -52,9 +52,9 @@ The original PC had general purpose digital IO through the parallel port.  That
 Digital cameras will be super-simple high speed serial, but TempleOS is forever limited to 16 colors and multimedia is banned because large files being loaded into memory fragments memory, so cameras are somewhat unwelcome.  I have enough problems without making the Brits anxious about autonomous gun turrets and killer robots.  The reason I say cameras will be super-simple serial is because we are replacing USB ports with super-simple serial.  Windows/Linux will have only super-simple serial ports unless people buy a USB PCI expansion card.  So, the digital cameras will be super-simple serial.
 
 
-$FG,5$$TX+CX,"Version One"$$FG$
+$FG,5$$TX+CX,"Version 1.0"$$FG$
 
-We will make a spec for a $$4,000, perfectly standardized, cryogenically-cooled, monster desktop PC.  It will have 16 cores, integrated 4K graphics, and, hopefully, 6 Ghz continuous operation.  Perhaps, 64 Gig of RAM will be standard? God said to help to poor buy them.  It is pointless to have a high powered machine if other people have wimpy machines and cannot run programs you write.  Therefore, everybody in the developed world will buy a Standard TempleOS IBM PC over the next ten years, so that will be a quantity of 400 million, perhaps.  God said to pay the US national debt with the revenue.  We will standardize everything, not just the TempleOS related items.  The display will be 4K (and of course 640x480 16 color) and no others.  Everybody gets just one monitor, unless you buy special PCI cards.  Everybody gets two speakers, a headphone, a mic, a webcam and touch scrn.  We make the audio one sample rate and one sample size, but TempleOS still gets just a square wave.  (HD Audio is really screwed-up and requires complicated artificial intelligence, just to route output to speakers.)
+We will make a spec for a $$8,000, perfectly standardized, cryogenically-cooled, monster desktop PC.  It will have 16 cores, integrated 4K graphics, and, hopefully, 6 Ghz continuous operation.  Perhaps, 64 Gig of RAM will be standard? God said to help to poor buy them.  It is pointless to have a high powered machine if other people have wimpy machines and cannot run programs you write.  Therefore, everybody in the developed world will buy a Standard TempleOS IBM PC over the next ten years, so that will be a quantity of 400 million, perhaps.  God said to pay the US national debt with the revenue.  We will standardize everything, not just the TempleOS related items.  The display will be 4K (and of course 640x480 16 color) and no others.  Everybody gets just one monitor, unless you buy special PCI cards.  Everybody gets two speakers, a headphone, a mic, a webcam and touch scrn.  We make the audio one sample rate and one sample size, but TempleOS still gets just a square wave.  (HD Audio is really screwed-up and requires complicated artificial intelligence, just to route output to speakers.)
 
 The Standard Temple IBM PC will be a full-sized tower.  Perhaps, stain-glass will decorate the case because God is sentimentally attached to stained-glass.  We should set the size at exactly 2.5 feet by 1.5 feet by 1.5 feet as in the $LK,"Exodus,25:10-10",A="BF:Exodus,25:10-10"$ for all time.  If there is extra room, make a storage shelf for DVDs.  We do not want a race-to-the-bottom, shrinking the size.  Instead of making it smaller, make it more powerful.  We want to remove all cost pressure from making things small.  It must have a CD/DVD/Blu-ray drive.  The vision is CD/DVDs used for a library of games, not installed on the hard-drive.  We need a network connection, possibly implemented as a super-simple high speed serial device.  What about standard monitor and speakers?  The C64's success was partially due to wide spread, completely standard, hardware.  I think TempleOS will not do bad block devices, so we need a hard drive, not just NV-memory or SSD.
 
@@ -80,6 +80,13 @@ The Temple PC will stay unchanged for seven years at a time.  The Bible speaks o
 $HC,""$
 
 I thought 2.5' x 1.5' x 1.5' was ridiculously big, but it looks like it is reasonable for super-cooled refrigeration systems!
+
+
+$FG,5$$TX+CX,"Version 2.0"$$FG$
+
+$HC,"
\"\"
"$ + +The Standard Temple IBM PC V2.0 will be released seven years after V1.0. Each unit will have a full, uncut, silicon wafer. V2.0 will be sold, unchanged, for seven more years, like a Commodore 64. $FG,8$ * "Commodore 64" is a trademark owned by Polabe Holding NV. * "Linux" is a trademark owned by Linus Torvalds. diff --git a/Doc/Strategy.DD b/Doc/Strategy.DD index 4248faa..d853cde 100644 --- a/Doc/Strategy.DD +++ b/Doc/Strategy.DD @@ -16,7 +16,7 @@ TempleOS is a motorcycle -- if you lean-over too far, a motorcycle will crash. Linux and Windows are general purpose operating systems. They attempt to do any task you want. TempleOS cherry-picks tasks and is designed to do the same things a C64 did. This saves and order of magnitude complexity. For example, the $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file system allocates just contiguous files -- you load and save whole files at once. A benefit is this allows compression. Also, TempleOS does not do networking or multimedia. In theory, memory will fragment with lots of big files. The system would fall to pieces with multimedia, but God said 640x480 16 color is a permanent covenant like circumcision. -A three button mouse is like a leg you cannot put weight on. TempleOS just does hardware everybody has, with no divergent code bases for each machine's custom hardware. There is one graphics driver instead of 50 for different GPUs. This saves an order of magnitude complexity and makes for a delightful API, so developer's code is not like a frayed rope end. +A three bttn mouse is like a leg you cannot put weight on. TempleOS just does hardware everybody has, with no divergent code bases for each machine's custom hardware. There is one graphics driver instead of 50 for different GPUs. This saves an order of magnitude complexity and makes for a delightful API, so developer's code is not like a frayed rope end. @@ -46,7 +46,7 @@ A three button mouse is like a leg you cannot put weight on. TempleOS just does * One editor/word processor/browser for the command-line window, source code, documentation browser, dialog forms. -* No child windows. One window per task. Buttons are widgets, not child windows. There are child tasks, however. +* No child windows. One window per task. Bttns are widgets, not child windows. There are child tasks, however. * No distinction between $FG,2$thread$FG$, $FG,2$process$FG$ or $FG,2$task$FG$. @@ -54,7 +54,7 @@ A three button mouse is like a leg you cannot put weight on. TempleOS just does * $LK,"MultiCore",A="FI:::/Doc/MultiCore.DD"$ is done $FG,2$master/slave$FG$, instead of $FG,2$SMP$FG$. $FG,2$Core0$FG$ applications explicitly assigns jobs. Locks are present allowing multicore file, heap, and hardware access, though. -* $LK,"Music",A="MN:Play"$ is done with an elegant one-voice notation. +* $LK,"Sound",A="HI:Snd"$ has single-voice 8-bit signed MIDI-like samples. * All tasks have a heap and a sym table. Scope is that of environment vars in other operating systems. As text is typed at the command line or you run programs by $FG,2$#include$FG$ing them, the syms go in the table. If a sym is not found, the parent task's table is checked. The father of all tasks has the API syms you'll need waiting in it's table. No need to $FG,2$#include$FG$ headers. diff --git a/Doc/Tips.DD b/Doc/Tips.DD index 2f276d0..0a042f7 100644 --- a/Doc/Tips.DD +++ b/Doc/Tips.DD @@ -21,7 +21,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes. * Use the PullDown menu at the top of the scrn to learn commands, or for finding the keyboard controls to games. -* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,mouse.scale"$. +* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:~/HomeLocalize.HC,ms_hard.scale"$. * You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:~/HomeLocalize.HC,local_time"$. diff --git a/HomeKeyPlugIns.HC b/HomeKeyPlugIns.HC index d251a5b..eee3097 100644 --- a/HomeKeyPlugIns.HC +++ b/HomeKeyPlugIns.HC @@ -17,7 +17,7 @@ Bool MyPutKey(I64 ch,I64 sc) //You can customize keys. This routine //is called before the main editor - //key handler $LK,"DocPutKey",A="MN:DocPutKey"$(). + //key hndlr $LK,"DocPutKey",A="MN:DocPutKey"$(). //You can intercept any key. //Return TRUE if you completely diff --git a/HomeLocalize.HC b/HomeLocalize.HC index b5c4531..bafbe59 100644 --- a/HomeLocalize.HC +++ b/HomeLocalize.HC @@ -8,12 +8,12 @@ KbdTypeMatic(0); local_time_offset=0*60*60*CDATE_FREQ; //Do daylight savings by hand //$AN,"",A="mouse_move_scale"$adjust these to set mouse move scale -mouse.scale.x=0.5; -mouse.scale.y=0.5; -mouse.scale.z=1.0; //wheel +ms_hard.scale.x=0.5; +ms_hard.scale.y=0.5; +ms_hard.scale.z=1.0; //wheel //don't change these -mouse.prescale.x=mouse.pos.x/mouse.scale.x; -mouse.prescale.y=mouse.pos.y/mouse.scale.y; -mouse.prescale.z=mouse.pos.z/mouse.scale.z; +ms_hard.prescale.x=ms_hard.pos.x/ms_hard.scale.x; +ms_hard.prescale.y=ms_hard.pos.y/ms_hard.scale.y; +ms_hard.prescale.z=ms_hard.pos.z/ms_hard.scale.z; diff --git a/HomeSys.HC b/HomeSys.HC index 512b685..71113c1 100644 --- a/HomeSys.HC +++ b/HomeSys.HC @@ -27,7 +27,7 @@ U0 StartUpTasks() WinToTop(user1); WinTileVert; "Boot Time:%7.3fs\n",tS; - XTalk(user1,"Cd;#include \"DoOnce\";\n"); + XTalk(user1,"Cd;#include \"Once\";\n"); Silent; //no output to scrn ACInit("/*;!*/Bible.TXT*"); Silent(OFF); //no output to scrn diff --git a/Kernel/BlkDev/DskATA.HC b/Kernel/BlkDev/DskATA.HC index 6c09f11..1b89dce 100644 --- a/Kernel/BlkDev/DskATA.HC +++ b/Kernel/BlkDev/DskATA.HC @@ -160,10 +160,10 @@ Bool ATAPIStartStop(CBlkDev *bd,F64 timeout,Bool start) return FALSE; } -I64 ATAGetDevId(CBlkDev *bd,F64 timeout,U16 **_id_record) +I64 ATAGetDevId(CBlkDev *bd,F64 timeout,Bool keep_id_record) { - U16 *id_record; - if (_id_record) *_id_record=NULL; + I64 res=BDT_NULL; + U16 *id_record=NULL; if (bd->type!=BDT_ATAPI && bd->base1) OutU8(bd->base1+ATAR1_CTRL,0x8); if (bd->flags & BDF_EXT_SIZE) @@ -171,24 +171,30 @@ I64 ATAGetDevId(CBlkDev *bd,F64 timeout,U16 **_id_record) else OutU8(bd->base0+ATAR0_SEL,0xE0|bd->unit<<4); ATACmd(bd,ATA_ID_DEV); - if (!ATAWaitNotBUSY(bd,timeout)) - return BDT_NULL; - if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR) - return BDT_ATAPI; - id_record=ACAlloc(512); - if (!ATAGetRes(bd,timeout,id_record,512,512,FALSE)) { - Free(id_record); - return BDT_NULL; + if (ATAWaitNotBUSY(bd,timeout)) { + if (InU8(bd->base0+ATAR0_STAT)&ATAS_ERR) + res=BDT_ATAPI; + else { + id_record=ACAlloc(512); + if (ATAGetRes(bd,timeout,id_record,512,512,FALSE)) + res=BDT_ATA; + else { + Free(id_record); + id_record=NULL; + } + } } - if (_id_record) *_id_record=id_record; - return BDT_ATA; + if (keep_id_record) { + Free(bd->dev_id_record); + bd->dev_id_record=id_record; + } + return res; } I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout) {//Returns zero on err I64 res=0; Bool okay=TRUE; - if (bd->type==BDT_ATAPI) { if (bd->flags & BDF_EXT_SIZE) OutU8(bd->base0+ATAR0_SEL,0xEF|bd->unit<<4); @@ -207,9 +213,7 @@ I64 ATAReadNativeMax(CBlkDev *bd,F64 timeout) if (0dev_id_record); - if (ATAGetDevId(bd,timeout,&bd->dev_id_record)==BDT_NULL) + if (ATAGetDevId(bd,timeout,TRUE)==BDT_NULL) okay=FALSE; else BEqu(&bd->flags,BDf_EXT_SIZE,Bt(&bd->dev_id_record[86],10)); @@ -310,7 +314,6 @@ Bool ATAInit(CBlkDev *bd) bd->flags|=BDF_EXT_SIZE; if (ATAReadNativeMax(bd,tS+0.1)) { - ATABlkSel(bd,bd->max_blk,0); if (bd->flags&BDF_EXT_SIZE) ATACmd(bd,ATA_SET_MAX_EXT); @@ -379,7 +382,7 @@ I64 ATAProbe(I64 base0,I64 base1,I64 unit) bd.base1=base1; bd.unit=unit; bd.blk_size=DVD_BLK_SIZE; - return ATAGetDevId(&bd,tS+0.1,NULL); + return ATAGetDevId(&bd,tS+0.1,FALSE); } Bool ATAPIReadBlks2(CBlkDev *bd,F64 timeout,U8 *buf, diff --git a/Kernel/BlkDev/DskATAId.HC b/Kernel/BlkDev/DskATAId.HC index 724e2b8..5f8ee77 100644 --- a/Kernel/BlkDev/DskATAId.HC +++ b/Kernel/BlkDev/DskATAId.HC @@ -244,7 +244,7 @@ CBlkDev *ATAMount(U8 first_drv_let,I64 type,I64 base0,I64 base1,I64 unit) res->unit=unit; res->base0=base0; res->base1=base1; - if (BlkDevAdd(res,FALSE,FALSE)) + if (BlkDevAdd(res,,FALSE,FALSE)) return res; } return NULL; diff --git a/Kernel/BlkDev/DskAddDev.HC b/Kernel/BlkDev/DskAddDev.HC index e09b626..0ec685b 100644 --- a/Kernel/BlkDev/DskAddDev.HC +++ b/Kernel/BlkDev/DskAddDev.HC @@ -24,18 +24,20 @@ U0 BlkDevLockFwdingSet(CBlkDev *bd) } } -I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) -{ - I64 i,j,ext_base,offset,res=0; +I64 BlkDevAdd(CBlkDev *bd,I64 prt_num=MIN_I64, + Bool whole_drv,Bool make_free) +{//It will mount just one partition of prt_num>=0. +//When repartitioing whole drive, whole_drv=TRUE. + I64 i,j,ext_base,offset,res=0,num=0; CDrv *dv; CRedSeaBoot br; CMasterBoot mbr; bd->bd_signature=BD_SIGNATURE_VAL; if (make_free) - dv=DrvMakeFreeSlot(bd->first_drv_let+res); + dv=DrvMakeFreeSlot(bd->first_drv_let); else - dv=DrvMakeFreeSlot(DrvNextFreeLet(bd->first_drv_let+res)); + dv=DrvMakeFreeSlot(DrvNextFreeLet(bd->first_drv_let)); dv->bd=bd; dv->drv_offset=bd->drv_offset; dv->size=bd->max_blk+1-bd->drv_offset; @@ -44,6 +46,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) case BDT_ISO_FILE_READ: case BDT_ISO_FILE_WRITE: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; dv->fs_type=FSt_REDSEA; //This is to force creation of a RAM //drive during boot, so it is probably @@ -63,8 +66,9 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) dv->dv_signature=0; //Revoke validation else { dv->dv_signature=0; //Revoke validation - if (one_drv) { + if (whole_drv) { dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; @@ -75,12 +79,12 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) } offset=0; ext_base=INVALID_CLUSTER; - while (TRUE) { + while (prt_num<0 || num<=prt_num) { ATAReadBlks(bd,&mbr,offset,1); if (mbr.signature!=0xAA55) break; j=-1; - for (i=0;i<4;i++) { + for (i=0;i<4 && (prt_num<0 || num<=prt_num);i++) { if (mbr.p[i].type) { if (make_free) dv=DrvMakeFreeSlot(bd->first_drv_let+res); @@ -92,9 +96,10 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) switch (mbr.p[i].type) { case MBR_PT_REDSEA: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_REDSEA; - RedSeaDrvInit(dv); + RedSeaInit(dv); break; case MBR_PT_FAT32a: case MBR_PT_FAT32b: @@ -104,17 +109,19 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) case MBR_PT_FAT32f: ATAReadBlks(bd,&br,dv->drv_offset,1); dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; if (br.signature==MBR_PT_REDSEA) { dv->fs_type=FSt_REDSEA; - RedSeaDrvInit(dv); + RedSeaInit(dv); } else { dv->fs_type=FSt_FAT32; - FAT32DrvInit(dv); + FAT32Init(dv); } break; case MBR_PT_NTFS: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_NTFS; break; @@ -124,9 +131,11 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) break; default: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_UNKNOWN; } + num++; } } if (Let2BlkDevType(bd->first_drv_let+res)!=bd->type) @@ -145,6 +154,7 @@ I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free) break; case BDT_ATAPI: dv->dv_signature=DRV_SIGNATURE_VAL; + dv->prt_num=num; res++; dv->fs_type=FSt_ISO9660; //Start with this dv->size=0; diff --git a/Kernel/BlkDev/DskBlkDev.HC b/Kernel/BlkDev/DskBlkDev.HC index e787d42..fa67d63 100644 --- a/Kernel/BlkDev/DskBlkDev.HC +++ b/Kernel/BlkDev/DskBlkDev.HC @@ -44,8 +44,8 @@ Bool BlkDevInit(CBlkDev *bd) } dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; - if (RedSeaDrvValidate(bd->first_drv_let)) - RedSeaDrvInit(dv); + if (RedSeaValidate(bd->first_drv_let)) + RedSeaInit(dv); else RedSeaFmt(bd->first_drv_let); res=TRUE; @@ -54,21 +54,25 @@ Bool BlkDevInit(CBlkDev *bd) if (FileFind(bd->file_dsk_name,&de,FUF_JUST_FILES)) { bd->max_blk=de.size>>BLK_SIZE_BITS-1; try bd->file_dsk=FOpen(bd->file_dsk_name,"rc",bd->max_blk+1); - catch + catch { + if (Fs->except_ch=='File') + PrintErr("Not Contiguous. Move file to filename.ISO.C.\n"); Fs->catch_except=TRUE; + } if (bd->file_dsk) { dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; - if (RedSeaDrvValidate(bd->first_drv_let)) { - RedSeaDrvInit(dv); + if (RedSeaValidate(bd->first_drv_let)) { + RedSeaInit(dv); res=TRUE; - } + } else + PrintErr("Not RedSea\n"); } } break; case BDT_ISO_FILE_WRITE: if (!bd->file_dsk_name) { - StrPrint(buf,"%C:/Drv%C.DRV.C", + StrPrint(buf,"%C:/Drv%C.ISO.C", blkdev.boot_drv_let,bd->first_drv_let); bd->file_dsk_name=AStrNew(buf); } @@ -78,6 +82,7 @@ Bool BlkDevInit(CBlkDev *bd) dv->fs_type=FSt_REDSEA; dv->size=bd->max_blk+1-bd->drv_offset; RedSeaFmt(bd->first_drv_let); + CallExtStr("RedSeaISO9660",bd->file_dsk_name,bd->first_drv_let); res=TRUE; break; case BDT_ATA: diff --git a/Kernel/BlkDev/DskCDDVD.HC b/Kernel/BlkDev/DskCDDVD.HC index 0809d91..2a7f485 100644 --- a/Kernel/BlkDev/DskCDDVD.HC +++ b/Kernel/BlkDev/DskCDDVD.HC @@ -2,7 +2,7 @@ //ISO2 is ISO13490 //ISO3 is ISO13346 -Bool ISODrvInit(CDrv *dv,I64 blk) +Bool ISOInit(CDrv *dv,I64 blk) { CBlkDev *bd=dv->bd; I64 spc=bd->blk_size>>BLK_SIZE_BITS,i=blk/spc,drv_offset=0; @@ -13,9 +13,9 @@ Bool ISODrvInit(CDrv *dv,I64 blk) try { unlock=DrvLock(dv); - dv->fs_type=FSt_ISO9660; //default + dv->fs_type=FSt_ISO9660; dv->spc=spc; - dv->drv_offset=bd->drv_offset=dv->data_area=dv->root_cluster=dv->size=0; + dv->data_area=dv->root_cluster=dv->drv_offset=bd->drv_offset=dv->size=0; while (TRUE) { dv->size=MaxI64(dv->size,(i+1)*spc); RBlks(dv,iso,i*spc,spc); @@ -30,17 +30,17 @@ Bool ISODrvInit(CDrv *dv,I64 blk) break; case ISO1T_SUPPLEMENTARY_DESC: de=&iso->root_dir_record; - dv->root_cluster=de->loc.little; dv->size=iso->vol_space_size.little*bd->blk_size>>BLK_SIZE_BITS; if (!StrCmp(iso->publisher_id,"TempleOS RedSea")) { dv->fs_type=FSt_REDSEA; bd->drv_offset=dv->drv_offset=19<<2+drv_offset; bd->max_blk=dv->size-1; dv->size-=bd->drv_offset; - RedSeaDrvInit(dv); - } + RedSeaInit(dv); + } else + dv->root_cluster=de->loc.little; res=TRUE; - goto ipi_done; + goto di_done; case ISO1T_TERMINATOR: throw('Drv'); } @@ -51,7 +51,7 @@ Bool ISODrvInit(CDrv *dv,I64 blk) } i++; } -ipi_done: +di_done: Free(iso); if (unlock) DrvUnlock(dv); diff --git a/Kernel/BlkDev/DskCache.HC b/Kernel/BlkDev/DskCache.HC index 33f7946..988f458 100644 --- a/Kernel/BlkDev/DskCache.HC +++ b/Kernel/BlkDev/DskCache.HC @@ -3,7 +3,7 @@ U0 DskCacheInit(I64 size_in_U8s) CCacheBlk *tmpc; I64 i,cnt; - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; Free(blkdev.cache_ctrl); Free(blkdev.cache_base); @@ -34,7 +34,7 @@ U0 DskCacheInit(I64 size_in_U8s) tmpc->next_hash=tmpc->last_hash=tmpc; } } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } I64 DskCacheHash(I64 blk) @@ -77,7 +77,7 @@ U0 DskCacheAdd(CDrv *dv,U8 *buf, I64 blk, I64 cnt) { CCacheBlk *tmpc; if (blkdev.cache_base) { - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; while (cnt-->0) { if (!(tmpc=DskCacheFind(dv,blk))) @@ -90,7 +90,7 @@ U0 DskCacheAdd(CDrv *dv,U8 *buf, I64 blk, I64 cnt) blk++; buf+=BLK_SIZE; } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } } @@ -98,7 +98,7 @@ U0 DskCacheInvalidate2(CDrv *dv) { CCacheBlk *tmpc,*tmpc1; if (blkdev.cache_base) { - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; tmpc=blkdev.cache_ctrl->last_lru; while (tmpc!=blkdev.cache_ctrl) { @@ -112,7 +112,7 @@ U0 DskCacheInvalidate2(CDrv *dv) } tmpc=tmpc1; } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } } @@ -120,7 +120,7 @@ U0 RCache(CDrv *dv,U8 **_buf, I64 *_blk, I64 *_cnt) { CCacheBlk *tmpc; if (blkdev.cache_base) { - while (LBts(&sys_semas[SYS_SEMA_DSK_CACHE],0)) + while (LBts(&sys_semas[SEMA_DSK_CACHE],0)) Yield; //fetch leading blks from cache while (*_cnt>0) { @@ -140,6 +140,6 @@ U0 RCache(CDrv *dv,U8 **_buf, I64 *_blk, I64 *_cnt) } else break; } - LBtr(&sys_semas[SYS_SEMA_DSK_CACHE],0); + LBtr(&sys_semas[SEMA_DSK_CACHE],0); } } diff --git a/Kernel/BlkDev/DskDrv.HC b/Kernel/BlkDev/DskDrv.HC index 047bd6e..5e8ee8f 100644 --- a/Kernel/BlkDev/DskDrv.HC +++ b/Kernel/BlkDev/DskDrv.HC @@ -38,7 +38,7 @@ U0 DrvsRelease() CDrv *DrvMakeFreeSlot(U8 drv_let) {//Make a slot free for a new drv, like during $LK,"Mount",A="MN:Mount"$(). //!!! drv_let is not a $LK,"remapped",A="MN:DrvMap"$ drv. - I64 i=ToUpper(drv_let)-'A'; + I64 i=Let2Let(drv_let)-'A'; CDrv *res; if (!(0<=idrv_let; } +U8 Let2Let(U8 drv_let=0) +{//Drv letter to Drv letter. + if (!drv_let) + drv_let=Drv2Let(Fs->cur_dv); + else if (drv_let==':') + drv_let=blkdev.boot_drv_let; + else if (drv_let=='~') + drv_let=*blkdev.home_dir; + return ToUpper(drv_let); +} + I64 Let2BlkDevType(U8 drv_let) {//Drv letter to BlkDev Type. drv_let=0 not allowed. See $LK,"BDT_NULL",A="MN:BDT_NULL"$. - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if ('A'<=drv_let<='B') return BDT_RAM; if ('C'<=drv_let<='L') @@ -180,11 +191,7 @@ CDrv *Let2Drv(U8 drv_let=0,Bool except=TRUE) if (!drv_let) dv=Fs->cur_dv; else { - if (drv_let==':') - drv_let=blkdev.boot_drv_let; - else if (drv_let=='~') - drv_let=*blkdev.home_dir; - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if (!('A'<=drv_let<='Z')) { if (except) throw('Drv'); @@ -219,7 +226,7 @@ U0 DskCacheInvalidate(CDrv *dv) if (bd->flags & BDF_READ_CACHE) DskCacheInvalidate2(dv); if (bd->type==BDT_ATAPI && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) - ISODrvInit(dv,(32767/bd->blk_size+1)*bd->blk_size>>BLK_SIZE_BITS); + ISOInit(dv,(32767/bd->blk_size+1)*bd->blk_size>>BLK_SIZE_BITS); if (unlock) DrvUnlock(dv); } catch @@ -233,15 +240,18 @@ U0 ChgDsk(U8 drv_let=0) CBlkDev *bd=dv->bd; if (!(bd->flags&BDF_INITIALIZED)) BlkDevInit(bd); - else if (bd->flags&BDF_REMOVABLE) + else if (bd->flags&BDF_REMOVABLE) { + if (bd->type==BDT_ATAPI) + ATAInit(bd); //TODO: This is a kludge for QEMU? DskCacheInvalidate(dv); + } Drv(drv_let); RedSeaFreeFreeLst(dv); } Bool DrvMap(U8 drv_let,CDrv *dv) {//Make drive letter map to another. - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if ('A'<=drv_let<='Z') { blkdev.let_to_drv[drv_let-'A']=dv; dv->drv_let=drv_let; @@ -311,13 +321,7 @@ U8 drv_text_attr[3]={BLACK,BLUE,RED}; U8 DrvTextAttrGet(U8 drv_let=0) {//Get color of drive. - if (!drv_let) - drv_let=Drv2Let(Fs->cur_dv); - else if (drv_let==':') - drv_let=blkdev.boot_drv_let; - else if (drv_let=='~') - drv_let=*blkdev.home_dir; - drv_let=ToUpper(drv_let); + drv_let=Let2Let(drv_let); if ('A'<=drv_let<='Z') return blkdev_text_attr[Let2BlkDevType(drv_let)]<<4| drv_text_attr[drv_let%sizeof(drv_text_attr)]; diff --git a/Kernel/BlkDev/DskFmt.HC b/Kernel/BlkDev/DskFmt.HC index 0092d21..87d18ef 100644 --- a/Kernel/BlkDev/DskFmt.HC +++ b/Kernel/BlkDev/DskFmt.HC @@ -2,7 +2,9 @@ Bool DrvTypeSet(U8 drv_let,I64 type=FSt_REDSEA) {//Very dangerous I64 i,j,ext_base,drv_num,offset,cur_type; CMasterBoot mbr; - CBlkDev *bd=Let2BlkDev(drv_let); + CBlkDev *bd; + drv_let=Let2Let(drv_let); + bd=Let2BlkDev(drv_let); drv_num=bd->first_drv_let-'A'; switch (bd->type) { case BDT_ATA: @@ -17,7 +19,7 @@ Bool DrvTypeSet(U8 drv_let,I64 type=FSt_REDSEA) if (cur_type==5 || cur_type==15) j=i; else { - if (drv_num+'A'==ToUpper(drv_let)) { + if (drv_num+'A'==drv_let) { switch (type) { case FSt_REDSEA: mbr.p[i].type=MBR_PT_REDSEA; diff --git a/Kernel/BlkDev/DskStrA.HC b/Kernel/BlkDev/DskStrA.HC index 55d00ad..2d78581 100644 --- a/Kernel/BlkDev/DskStrA.HC +++ b/Kernel/BlkDev/DskStrA.HC @@ -257,7 +257,7 @@ Bool FileNameChk(U8 *filename) } if (StrLen(filename)>=CDIR_FILENAME_LEN) return FALSE; while (*ptr) - if (!Bt(chars_bmp_filename,*ptr++)) + if (!Bt(char_bmp_filename,*ptr++)) return FALSE; return TRUE; } diff --git a/Kernel/BlkDev/FileSysFAT.HC b/Kernel/BlkDev/FileSysFAT.HC index 0f8bc55..7affbc1 100644 --- a/Kernel/BlkDev/FileSysFAT.HC +++ b/Kernel/BlkDev/FileSysFAT.HC @@ -19,7 +19,7 @@ CDate Dos2CDate(U16 t,U16 d) return Struct2Date(&ds); } -U0 FAT32DrvInit(CDrv *dv) +U0 FAT32Init(CDrv *dv) { CFAT32Boot br32; Bool unlock; @@ -45,18 +45,6 @@ U0 FAT32DrvInit(CDrv *dv) DrvUnlock(dv); } -Bool FAT32DrvValidate(U8 drv_let) -{ - CDrv *dv; - CFAT32Boot br; - if ((dv=Let2Drv(drv_let,FALSE)) && dv->fs_type==FSt_FAT32 && - RBlks(dv,&br,dv->drv_offset,1) && br.signature==0xAA55 && - br.sects==dv->size) - return TRUE; - else - return FALSE; -} - U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) { CFAT32Boot *br=CAlloc(BLK_SIZE); @@ -115,11 +103,11 @@ U0 FAT32Fmt(U8 drv_let,Bool quick=TRUE) WBlks(dv,fis,dv->drv_offset+br->file_system_info_sect,1); WBlks(dv,br,dv->drv_offset,1); - FAT32DrvInit(dv); + FAT32Init(dv); ClustersAlloc(dv,0,1,FALSE); //Alloc #1 br->root_cluster=ClustersAlloc(dv,0,1,FALSE); WBlks(dv,br,dv->drv_offset,1); - FAT32DrvInit(dv); + FAT32Init(dv); DrvUnlock(dv); } catch DrvUnlock(dv); diff --git a/Kernel/BlkDev/FileSysISO.HC b/Kernel/BlkDev/FileSysISO.HC index 25bf8de..07b9f39 100644 --- a/Kernel/BlkDev/FileSysISO.HC +++ b/Kernel/BlkDev/FileSysISO.HC @@ -42,7 +42,7 @@ Bool ISO1FromName(U8 *dst,U8 *src) src++; if (*src==';') break; - if (Bt(chars_bmp_filename,*src)) { + if (Bt(char_bmp_filename,*src)) { if (j>=CDIR_FILENAME_LEN-1) return FALSE; dst[j++]=*src++; diff --git a/Kernel/BlkDev/FileSysRedSea.HC b/Kernel/BlkDev/FileSysRedSea.HC index 2ea99ef..1a78034 100644 --- a/Kernel/BlkDev/FileSysRedSea.HC +++ b/Kernel/BlkDev/FileSysRedSea.HC @@ -55,7 +55,7 @@ U0 RedSeaFreeLstBuild(CDrv *dv) DrvUnlock(dv); } -U0 RedSeaDrvInit(CDrv *dv) +U0 RedSeaInit(CDrv *dv) { CRedSeaBoot br; Bool unlock; @@ -79,7 +79,7 @@ U0 RedSeaDrvInit(CDrv *dv) DrvUnlock(dv); } -Bool RedSeaDrvValidate(U8 drv_let) +Bool RedSeaValidate(U8 drv_let) { CDrv *dv; CRedSeaBoot br; @@ -119,7 +119,7 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) WZeroBlks(dv,dv->drv_offset,i); WBlks(dv,br,dv->drv_offset,1); - RedSeaDrvInit(dv); + RedSeaInit(dv); ClustersAlloc(dv,0,1,FALSE); //Alloc #1 root_dir_blks=MaxI64(1,dv->bd->init_root_dir_blks); @@ -144,7 +144,7 @@ U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE) d_native->datetime=Now; WBlks(dv,root_dir,br->root_cluster,root_dir_blks); - RedSeaDrvInit(dv); + RedSeaInit(dv); DrvUnlock(dv); } catch DrvUnlock(dv); diff --git a/Kernel/Compress.HC b/Kernel/Compress.HC index 304fb0b..103136d 100644 --- a/Kernel/Compress.HC +++ b/Kernel/Compress.HC @@ -253,7 +253,7 @@ U8 *ExpandBuf(CArcCompress *arc,CTask *mem_task=NULL) U8 *res; if (!(CT_NONE<=arc->compression_type<=CT_8_BIT) || - arc->expanded_size>MEM_MAPPED_SPACE) + arc->expanded_size>mem_mapped_space) throw('Compress'); res=MAlloc(arc->expanded_size+1,mem_task); diff --git a/Kernel/Display.HC b/Kernel/Display.HC index a2d8f2d..06abfc2 100644 --- a/Kernel/Display.HC +++ b/Kernel/Display.HC @@ -39,7 +39,7 @@ See also $LK,"GrUpdateScrn",A="MN:GrUpdateScrn"$(). while (text.raw_col % text.cols) RawPutChar(CH_SPACE); - } else if (Bt(chars_bmp_displayable,ch)) { + } else if (Bt(char_bmp_displayable,ch)) { row=text.raw_col/text.cols%text.rows; col=text.raw_col%text.cols; if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode @@ -87,7 +87,7 @@ See also $LK,"GrUpdateScrn",A="MN:GrUpdateScrn"$(). U0 VGAFlush() {//Flush winmgr vga cache, so updates whole scrn. - LBts(&sys_semas[SYS_SEMA_FLUSH_VGA_IMAGE],0); + LBts(&sys_semas[SEMA_FLUSH_VGA_IMAGE],0); } U0 WinDerivedValsUpdate(CTask *task) diff --git a/Kernel/EdLite.HC b/Kernel/EdLite.HC index f42a459..c655be2 100644 --- a/Kernel/EdLite.HC +++ b/Kernel/EdLite.HC @@ -232,7 +232,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0) } break; default: - if (Bt(chars_bmp_getkey,ch)) { + if (Bt(char_bmp_printable,ch)) { if (cur_line==&head) { cur_line=MAlloc(sizeof(CLine)); cur_line->line=StrNew(""); @@ -327,11 +327,11 @@ Bool EdLiteFileLine(U8 *fl_file_line,I64 edf_dof_flags=0) U0 FixSet(U8 *filename,I64 line) {//Compiler calls this to set file line for Fix U8 *st=MStrPrint("FL:%s,%d",filename,line); - while (LBts(&sys_semas[SYS_SEMA_FIX],0)) + while (LBts(&sys_semas[SEMA_FIX],0)) Yield; Free(dbg.fix_file_line); dbg.fix_file_line=AStrNew(st); - LBtr(&sys_semas[SYS_SEMA_FIX],0); + LBtr(&sys_semas[SEMA_FIX],0); } Bool Fix(I64 edf_dof_flags=0) @@ -339,10 +339,10 @@ Bool Fix(I64 edf_dof_flags=0) U8 *st; Bool res=FALSE; - while (LBts(&sys_semas[SYS_SEMA_FIX],0)) + while (LBts(&sys_semas[SEMA_FIX],0)) Yield; st=StrNew(dbg.fix_file_line); - LBtr(&sys_semas[SYS_SEMA_FIX],0); + LBtr(&sys_semas[SEMA_FIX],0); if (st) { if (IsRaw) diff --git a/Kernel/SrvCmd.HC b/Kernel/Job.HC similarity index 70% rename from Kernel/SrvCmd.HC rename to Kernel/Job.HC index b46314d..b5f5511 100644 --- a/Kernel/SrvCmd.HC +++ b/Kernel/Job.HC @@ -1,21 +1,21 @@ -U0 SrvCmdDel(CSrvCmd *tmpc) +U0 JobDel(CJob *tmpc) {//Free one cmd node. Free(tmpc->aux_str); Free(tmpc); } -U0 SrvCmdQueDel(CSrvCmd *head) +U0 JobQueDel(CJob *head) { - CSrvCmd *tmpc=head->next,*tmpc1; + CJob *tmpc=head->next,*tmpc1; while (tmpc!=head) { tmpc1=tmpc->next; QueRem(tmpc); - SrvCmdDel(tmpc); + JobDel(tmpc); tmpc=tmpc1; } } -U0 SrvCtrlInit(CSrvCtrl *ctrl) +U0 JobCtrlInit(CJobCtrl *ctrl) { QueInit(&ctrl->next_waiting); QueInit(&ctrl->next_done); @@ -36,34 +36,34 @@ U0 TaskRstAwaitingMsg(CTask *task=NULL) POPFD } -CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) +CJob *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) {//Queues a request to compile and execute src code text. - CSrvCmd *res; + CJob *res; if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; - res=ACAlloc(sizeof(CSrvCmd)); + res=ACAlloc(sizeof(CJob)); res->master_task=master; - res->cmd_code=SVCT_EXE_STR; + res->job_code=JOBT_EXE_STR; res->flags=flags; res->aux_str=AStrNew(data); res->ctrl=&srv->srv_ctrl; PUSHFD CLI - while (LBts(&srv->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&srv->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (!TaskValidate(srv)) { - LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&srv->srv_ctrl.flags,JOBCf_LOCKED); POPFD - SrvCmdDel(res); + JobDel(res); return NULL; } else { LBtr(&srv->task_flags,TASKf_IDLE); TaskRstAwaitingMsg(srv); QueIns(res,srv->srv_ctrl.last_waiting); - LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED); - if (Bt(&flags,SVCf_WAKE_MASTER)) { + LBtr(&srv->srv_ctrl.flags,JOBCf_LOCKED); + if (Bt(&flags,JOBf_WAKE_MASTER)) { Suspend(master); Yield; } @@ -72,22 +72,22 @@ CSrvCmd *TaskExe(CTask *srv,CTask *master,U8 *data,I64 flags) return res; } -CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) +CJob *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) {//Post StdIn text to servant task. Tell who the master task is. - CSrvCmd *res; + CJob *res; CTask *task; if (!data || !TaskValidate(srv) || master && !TaskValidate(master) || srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; - res=ACAlloc(sizeof(CSrvCmd)); + res=ACAlloc(sizeof(CJob)); res->master_task=master; //in case somebody cares - res->cmd_code=SVCT_TEXT_INPUT; + res->job_code=JOBT_TEXT_INPUT; res->flags=flags; res->aux_str=AStrNew(data); PUSHFD task=srv->last_input_filter_task; - if (Bt(&flags,SVCf_HIGHEST_PRIORITY) || task==srv) { + if (Bt(&flags,JOBf_HIGHEST_PRIORITY) || task==srv) { if (task!=srv) TaskWait(srv); task=Spawn(&InputFilterTask,NULL,"Input Filter",,srv); @@ -101,38 +101,39 @@ CSrvCmd *TaskText(CTask *srv,CTask *master,U8 *data,I64 flags) task=srv->next_input_filter_task; } res->ctrl=&task->srv_ctrl; - while (LBts(&task->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (!TaskValidate(task)) { - SrvCmdDel(res); + JobDel(res); res=NULL; } else { LBtr(&task->task_flags,TASKf_IDLE); TaskRstAwaitingMsg(task); QueIns(res,task->srv_ctrl.last_waiting); - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); } POPFD return res; } -CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) +CJob *TaskMsg(CTask *_srv,CTask *master, + I64 msg_code,I64 arg1,I64 arg2,I64 flags) {//Post message to servant task. Tell who the master task is. -//See $LK,"flags",A="MN:SVCf_WAKE_MASTER"$ and $LK,"msg_code",A="MN:MSG_CMD"$. - CSrvCmd *tmpc1,*tmpc; +//See $LK,"flags",A="MN:JOBf_WAKE_MASTER"$ and $LK,"msg_code",A="MN:MSG_CMD"$. + CJob *tmpc1,*tmpc; CTask *srv=_srv; if (!TaskValidate(srv) || master && !TaskValidate(master)|| srv->popup_task && !Bt(&srv->task_flags,TASKf_FILTER_INPUT)) return NULL; - tmpc=ACAlloc(sizeof(CSrvCmd)); + tmpc=ACAlloc(sizeof(CJob)); tmpc->master_task=master; - tmpc->cmd_code=SVCT_MSG; + tmpc->job_code=JOBT_MSG; tmpc->msg_code=AbsI64(msg_code); //negative means do a down and up - tmpc->aux1=a1; - tmpc->aux2=a2; + tmpc->aux1=arg1; + tmpc->aux2=arg2; tmpc->flags=flags; PUSHFD - if (Bt(&sys_semas[SYS_SEMA_RECORD_MACRO],0) && + if (Bt(&sys_semas[SEMA_RECORD_MACRO],0) && srv!=sys_macro_task && msg_code==MSG_KEY_DOWN) { tmpc1=AMAllocIdent(tmpc); CLI @@ -140,54 +141,54 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags) } CLI while (Bt(&srv->task_flags,TASKf_FILTER_INPUT) && - !Bt(&flags,SVCf_DONT_FILTER)) + !Bt(&flags,JOBf_DONT_FILTER)) srv=srv->next_input_filter_task; tmpc->ctrl=&srv->srv_ctrl; - while (LBts(&srv->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&srv->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (!TaskValidate(srv)) { - SrvCmdDel(tmpc); + JobDel(tmpc); tmpc=NULL; } else { LBtr(&srv->task_flags,TASKf_IDLE); TaskRstAwaitingMsg(srv); QueIns(tmpc,srv->srv_ctrl.last_waiting); - LBtr(&srv->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&srv->srv_ctrl.flags,JOBCf_LOCKED); } POPFD if (msg_code<0) //Down-Up - TaskMsg(_srv,master,-msg_code+1,a1,a2,flags); + TaskMsg(_srv,master,-msg_code+1,arg1,arg2,flags); return tmpc; } -Bool JobResScan(CSrvCmd *rqst=NULL,I64 *_res=NULL) +Bool JobResScan(CJob *rqst=NULL,I64 *_res=NULL) {//Check rqst complete, return with or without. - CSrvCtrl *ctrl; - CSrvCmd *tmpc,*tmpc1; - if (!rqst || Bt(&rqst->flags,SVCf_DONE)) { + CJobCtrl *ctrl; + CJob *tmpc,*tmpc1; + if (!rqst || Bt(&rqst->flags,JOBf_DONE)) { if (!rqst || rqst->master_task) ctrl=&Fs->srv_ctrl; else ctrl=rqst->ctrl; PUSHFD CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) PAUSE tmpc1=&ctrl->next_done; tmpc=tmpc1->next; while (tmpc!=tmpc1) { if (!rqst || rqst==tmpc) { QueRem(tmpc); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD if (_res) *_res=tmpc->res; - SrvCmdDel(tmpc); + JobDel(tmpc); return TRUE; } tmpc=tmpc->next; } - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD } if (_res) @@ -195,10 +196,10 @@ Bool JobResScan(CSrvCmd *rqst=NULL,I64 *_res=NULL) return FALSE; } -I64 JobResGet(CSrvCmd *rqst=NULL) +I64 JobResGet(CJob *rqst=NULL) {//See $LK,"::/Demo/MultiCore/Lock.HC"$ I64 res; - CSrvCmd *tmpc1; + CJob *tmpc1; if (!rqst) { tmpc1=&Fs->srv_ctrl.next_done; while (tmpc1==tmpc1->next) { @@ -206,7 +207,7 @@ I64 JobResGet(CSrvCmd *rqst=NULL) Yield; } } else { - while (!Bt(&rqst->flags,SVCf_DONE)) { + while (!Bt(&rqst->flags,JOBf_DONE)) { LBts(&Fs->task_flags,TASKf_IDLE); Yield; } @@ -220,7 +221,7 @@ I64 JobResGet(CSrvCmd *rqst=NULL) U0 TaskWait(CTask *task=NULL,Bool cmd_line_pmt=FALSE) {//Wait for idle. CTask *task1; - CSrvCmd *tmpc1; + CJob *tmpc1; if (!task) task=Fs; if (TaskValidate(task)) { PUSHFD @@ -238,48 +239,47 @@ U0 TaskWait(CTask *task=NULL,Bool cmd_line_pmt=FALSE) } } -U0 PostMsg(CTask *task,I64 msg_code,I64 a1,I64 a2,I64 flags=0) +U0 PostMsg(CTask *task,I64 msg_code,I64 arg1,I64 arg2,I64 flags=0) {//Post message to a task and return immediately. See $LK,"msg_code",A="MN:MSG_CMD"$. if (TaskValidate(task)) { if (Bt(&task->task_flags,TASKf_INPUT_FILTER_TASK)) - TaskMsg(task->last_input_filter_task,NULL,msg_code,a1,a2, - flags|1<last_input_filter_task,NULL,msg_code,arg1,arg2, + flags|1<flags,SVCRf_LOCKED. - CSrvCmd *tmpc=ctrl->next_waiting; +I64 JobRunOne(I64 run_flags,CJobCtrl *ctrl) +{//Called with ctrl->flags,JOBCf_LOCKED. + CJob *tmpc=ctrl->next_waiting; CTask *master; I64 res,flags=tmpc->flags,old_flags=GetRFlags; - if (Bt(&flags,SVCf_EXIT_ON_COMPLETE)) - res=SCR_EXIT; + if (Bt(&flags,JOBf_EXIT_ON_COMPLETE)) + res=JOB_EXIT; else - res=SCR_CONT; - switch (tmpc->cmd_code) { - case SVCT_SPAWN_TASK: + res=JOB_CONT; + switch (tmpc->job_code) { + case JOBT_SPAWN_TASK: QueRem(tmpc); - LBts(&tmpc->flags,SVCf_DISPATCHED); - tmpc->servant_cpu_num=Gs->num; - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DISPATCHED); + LBtr(&ctrl->flags,JOBCf_LOCKED); if (tmpc->aux_str) tmpc->spawned_task=Spawn(tmpc->addr,tmpc->fun_arg, tmpc->aux_str,,tmpc->aux1,tmpc->aux2,tmpc->flags); @@ -287,11 +287,10 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl) tmpc->spawned_task=Spawn(tmpc->addr,tmpc->fun_arg, "Unnamed",,tmpc->aux1,tmpc->aux2,tmpc->flags); break; - case SVCT_CALL: + case JOBT_CALL: QueRem(tmpc); - LBts(&tmpc->flags,SVCf_DISPATCHED); - tmpc->servant_cpu_num=Gs->num; - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DISPATCHED); + LBtr(&ctrl->flags,JOBCf_LOCKED); SetRFlags(run_flags); LBtr(&Fs->task_flags,TASKf_IDLE); try @@ -300,11 +299,10 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl) Fs->catch_except=TRUE; SetRFlags(old_flags); break; - case SVCT_EXE_STR: + case JOBT_EXE_STR: QueRem(tmpc); - LBts(&tmpc->flags,SVCf_DISPATCHED); - tmpc->servant_cpu_num=Gs->num; - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DISPATCHED); + LBtr(&ctrl->flags,JOBCf_LOCKED); SetRFlags(run_flags); LBtr(&Fs->task_flags,TASKf_IDLE); try @@ -314,63 +312,63 @@ I64 SrvCmdRunOne(I64 run_flags,CSrvCtrl *ctrl) SetRFlags(old_flags); break; default: - res=SCR_DONE; + res=JOB_DONE; } if (res) { if (master=tmpc->master_task) { - if (!Bt(&flags,SVCf_FREE_ON_COMPLETE)) { + if (!Bt(&flags,JOBf_FREE_ON_COMPLETE)) { CLI - while (LBts(&master->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&master->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE QueIns(tmpc,master->srv_ctrl.last_done); - LBts(&tmpc->flags,SVCf_DONE); - LBtr(&master->srv_ctrl.flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DONE); + LBtr(&master->srv_ctrl.flags,JOBCf_LOCKED); SetRFlags(old_flags); } - if (Bt(&flags,SVCf_FOCUS_MASTER) && + if (Bt(&flags,JOBf_FOCUS_MASTER) && !Bt(&master->win_inhibit,WIf_SELF_FOCUS)) sys_focus_task=master; - if (Bt(&flags,SVCf_WAKE_MASTER)) + if (Bt(&flags,JOBf_WAKE_MASTER)) Suspend(master,FALSE); } - if (Bt(&flags,SVCf_FREE_ON_COMPLETE)) - SrvCmdDel(tmpc); + if (Bt(&flags,JOBf_FREE_ON_COMPLETE)) + JobDel(tmpc); else if (!master) { CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) Yield; QueIns(tmpc,ctrl->last_done); - LBts(&tmpc->flags,SVCf_DONE); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBts(&tmpc->flags,JOBf_DONE); + LBtr(&ctrl->flags,JOBCf_LOCKED); SetRFlags(old_flags); } } return res; } -I64 SrvCmdsHandler(I64 run_flags,CTask *task=NULL) +I64 JobsHndlr(I64 run_flags,CTask *task=NULL) {//Handle all waiting cmds and return. I64 cnt=0,old_flags=GetRFlags; if (!task) task=Fs; while (TRUE) { CLI - while (LBts(&task->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE if (task->srv_ctrl.next_waiting!=&task->srv_ctrl) - switch (SrvCmdRunOne(run_flags,&task->srv_ctrl)) { - case SCR_CONT: + switch (JobRunOne(run_flags,&task->srv_ctrl)) { + case JOB_CONT: cnt++; break; - case SCR_EXIT: + case JOB_EXIT: Exit; - case SCR_DONE: - goto sch_done; + case JOB_DONE: + goto jh_done; } else - goto sch_done; + goto jh_done; } -sch_done: - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); +jh_done: + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); SetRFlags(old_flags); return cnt; } @@ -378,15 +376,15 @@ sch_done: I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL) {//Execute code in $LK,"PopUp",A="MN:PopUp"$ task. I64 res; - CSrvCmd *tmpc; + CJob *tmpc; CTask *task=Spawn(&SrvCmdLine,NULL,"Servant",,parent); if (!parent) { - TaskExe(task,parent,buf,1<popup_task=task; - tmpc=TaskExe(task,parent,buf,1<popup_task=NULL; @@ -409,13 +407,13 @@ I64 Adam(U8 *fmt,...) {//Make adam_task execute code. I64 res; U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); - CSrvCmd *tmpc; + CJob *tmpc; if (Fs==adam_task) { tmpc=TaskExe(adam_task,Fs,buf,0); - SrvCmdsHandler(GetRFlags); + JobsHndlr(GetRFlags); } else { TaskWait(adam_task); - tmpc=TaskExe(adam_task,Fs,buf,1<task_flags,TASKf_INPUT_FILTER_TASK)) ExePrint("%s",buf); else - TaskText(Fs,NULL,buf,1<$$FG$$ for cur drv) Boot Drv:"; - ch=ToUpper(GetChar); + ch=Let2Let(GetChar); if ('A'<=ch<='Z') c->boot_drv_let=ch; else @@ -109,7 +110,7 @@ U0 KernelCfgOptions(CKernelCfg *c) case CFG_AUTO_MOUNT_IDE: if (state) { "First HD Drive Let:"; - c->auto_mount_ide_hd_let=ToUpper(GetChar); + c->auto_mount_ide_hd_let=Let2Let(GetChar); if (!('A'<=c->auto_mount_ide_hd_let<='Z')) c->auto_mount_ide_hd_let=0; '\n'; @@ -119,7 +120,7 @@ U0 KernelCfgOptions(CKernelCfg *c) "First HD Drive:%C\n",'C'; "First CD Drive Let:"; - c->auto_mount_ide_cd_let=ToUpper(GetChar); + c->auto_mount_ide_cd_let=Let2Let(GetChar); if (!('A'<=c->auto_mount_ide_cd_let<='Z')) c->auto_mount_ide_cd_let=0; '\n'; diff --git a/Kernel/KDate.HC b/Kernel/KDate.HC index 38ac24c..b56ee58 100644 --- a/Kernel/KDate.HC +++ b/Kernel/KDate.HC @@ -139,7 +139,7 @@ U0 NowDateTimeStruct(CDateStruct *_ds) MemSet(_ds,0,sizeof(CDateStruct)); PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_SYS_DATE],0)) + while (LBts(&sys_semas[SEMA_SYS_DATE],0)) PAUSE OutU8(0x70,0x0A); @@ -172,7 +172,7 @@ U0 NowDateTimeStruct(CDateStruct *_ds) else is_bcd=TRUE; - LBtr(&sys_semas[SYS_SEMA_SYS_DATE],0); + LBtr(&sys_semas[SEMA_SYS_DATE],0); POPFD if (is_bcd) for (i=2;i<9;i++) diff --git a/Kernel/KDbg.HC b/Kernel/KDbg.HC index 41aedc5..48708ba 100644 --- a/Kernel/KDbg.HC +++ b/Kernel/KDbg.HC @@ -1,11 +1,11 @@ Bool ChkPtr(U8 *ptr) {//Check if addr is valid ptr. - if (sys_heap_base<=ptr<=MEM_MAPPED_SPACE) { + if (mem_heap_base<=ptr<=mem_mapped_space) { if (*MemPageTable(ptr)&1) return TRUE; else return FALSE; - } else if (ptrstk->stk_base<=ptr<= (&task->stk->stk_base)(U8 *)+task->stk->stk_size) res=TRUE; - } else if (sys_heap_base<=ptr<=sys_heap_limit) + } else if (mem_heap_base<=ptr<=mem_heap_limit) res=TRUE; POPFD return res; @@ -214,7 +214,7 @@ U0 Da(U8 **addr,I64 cnt=0x10) } } -U0 RawPrint(I64 ms=100,U8 *fmt,...) +U0 RawPrint(I64 mS=100,U8 *fmt,...) {//Print using $LK,"Raw",A="MN:Raw"$ scrn output for a length of time. //$BK,1$Your heap must be good.$BK,0$ U8 *buf=StrPrintJoin(NULL,fmt,argc,argv); @@ -224,14 +224,14 @@ U0 RawPrint(I64 ms=100,U8 *fmt,...) old_raw=Raw(ON); old_input_filter=LBtr(&Fs->task_flags,TASKf_INPUT_FILTER_TASK); "%s",buf; - BusyWait(ms<<10); + Busy(mS<<10); POPFD LBEqu(&Fs->task_flags,TASKf_INPUT_FILTER_TASK,old_input_filter); Raw(old_raw); Free(buf); } -U0 RawD(I64 ms=100,U8 *addr,I64 cnt=0x80) +U0 RawD(I64 mS=100,U8 *addr,I64 cnt=0x80) {//Dumps a block of mem using $LK,"Raw",A="MN:Raw"$ //scrn output for a fixed length //of time. @@ -241,13 +241,13 @@ U0 RawD(I64 ms=100,U8 *addr,I64 cnt=0x80) old_raw=Raw(ON); old_input_filter=LBtr(&Fs->task_flags,TASKf_INPUT_FILTER_TASK); D(addr,cnt); - BusyWait(ms<<10); + Busy(mS<<10); POPFD LBEqu(&Fs->task_flags,TASKf_INPUT_FILTER_TASK,old_input_filter); Raw(old_raw); } -U0 RawDm(I64 ms=100,U8 *addr,I64 cnt=0x80) +U0 RawDm(I64 mS=100,U8 *addr,I64 cnt=0x80) {//Dumps a block of mem using $LK,"Raw",A="MN:Raw"$ //scrn output for a fixed length //of time. @@ -257,7 +257,7 @@ U0 RawDm(I64 ms=100,U8 *addr,I64 cnt=0x80) old_raw=Raw(ON); old_input_filter=LBtr(&Fs->task_flags,TASKf_INPUT_FILTER_TASK); Dm(addr,cnt); - BusyWait(ms<<10); + Busy(mS<<10); POPFD LBEqu(&Fs->task_flags,TASKf_INPUT_FILTER_TASK,old_input_filter); Raw(old_raw); @@ -512,7 +512,7 @@ U0 DbgHelp() ">1+2*3+&Print;\t\t\t//Show calculation res.\n" ">*(0x70000)(I64 *)=0x123456789;\t//Assign value to 0x70000-0x70007.\n" ">_RAX=0x1234;\t\t\t//Set RAX to 0x1234.\n" - ">_RIP=&SysThrowBreak;\t\t//Set RIP.\n" + ">_RIP=&Break;\t\t//Set RIP.\n" ">I64 i;\t\t\t\t//Declare variable.\n" ">i=_RCX+_RDX;\t\t\t//Assign to variable.\n" ">U(&Print+0x8);\t\t\t//Unassemble Print.\n" @@ -535,12 +535,15 @@ U0 Dbg2() Bool old_win_inhibit,old_waiting_msg,old_single; I64 i,old_getstr2; U8 buf[200]; - if (IsRaw) { - i=Fs->rip; - Ui(buf,&i); - "%s",buf; + if (dbg.panic) { + if (IsRaw) { + i=Fs->rip; + Ui(buf,&i); + "%s",buf; + } else + U(Fs->rip,1); } else - U(Fs->rip,1); + dbg.panic=TRUE; old_waiting_msg=LBtr(&Fs->task_flags,TASKf_AWAITING_MSG); old_win_inhibit=Fs->win_inhibit; Fs->win_inhibit=WIG_USER_TASK_DFT; @@ -549,7 +552,7 @@ U0 Dbg2() old_getstr2=fp_getstr2; fp_getstr2=&SysGetStr2; old_single=SingleUser(OFF); - while (!mouse.install_attempts) + while (!ms_hard.install_attempts) Yield; SingleUser(old_single); UserTaskCont; @@ -575,7 +578,7 @@ U0 Fault3(I64 fault_num,I64 fault_err_code) } "\n\tTempleOS Debugger\n\n" ">Help;\t//For help.\n\n"; - Beep(500,TRUE); + Beep(62,TRUE); if (fault_num==I_DBG) { if (dbg.msg) { "\n!!! %s",dbg.msg; @@ -584,7 +587,8 @@ U0 Fault3(I64 fault_num,I64 fault_err_code) " !!!\n\n"; } } - CallerRep; + if (dbg.panic) + CallerRep; Dbg2; POPFD } @@ -631,12 +635,18 @@ U0 Fault2(I64 fault_num,I64 fault_err_code) Exit; } -U0 Dbg(U8 *msg=NULL,I64 msg_num=0) -{//Enters the debugger.Can be used as a panic. +U0 Panic(U8 *msg=NULL,I64 msg_num=0,Bool panic=TRUE) +{//Enter the debugger with panic? PUSHFD CLI dbg.msg=msg; dbg.msg_num=msg_num; + dbg.panic=panic; INT I_DBG POPFD } + +U0 Dbg(U8 *msg=NULL,I64 msg_num=0) +{//Enter debugger, no panic. + Panic(msg,msg_num,FALSE); +} diff --git a/Kernel/KDefine.HC b/Kernel/KDefine.HC index 3f728dd..4ad7130 100644 --- a/Kernel/KDefine.HC +++ b/Kernel/KDefine.HC @@ -164,9 +164,9 @@ CColorROPU16 Str2ColorU16(U8 *st) while (TRUE) { if (!*st||StrOcc(str2color_lst,*st)) return res; - if (Bt(chars_bmp_alpha,*st)) { + if (Bt(char_bmp_alpha,*st)) { ptr=st; - while (Bt(chars_bmp_alpha_numeric,*ptr)) + while (Bt(char_bmp_alpha_numeric,*ptr)) ptr++; st2=ptr2=MAlloc(ptr-st+1); while (sttask_name,"Adam Task CPU#0"); + StrCpy(Fs->task_name,"Adam Task CPU00"); StrCpy(Fs->task_title,Fs->task_name); Fs->title_src=TTS_TASK_NAME; Fs->win_right=text.cols-2; @@ -152,7 +151,7 @@ U0 KernelMain() Core0Init; IntInit1; - //Before this point use $LK,"Snd",A="MN:Snd"$() and $LK,"BusyWait",A="MN:BusyWait"$() + //Before this point use $LK,"Snd",A="MN:Snd"$() and $LK,"Busy",A="MN:Busy"$() //to debug. After this point, use $LK,"RawPrint",A="MN:RawPrint"$() LBts(&sys_run_level,RLf_RAW); "TempleOS V%5.3f\t%D %T\n\n", @@ -165,7 +164,7 @@ U0 KernelMain() IntsInit; "Enable IRQ's\n"; SetRFlags(RFLAGG_NORMAL); - BusyWait(2000); + Busy(2000); IntInit2; LBts(&sys_run_level,RLf_INTERRUPTS); @@ -185,10 +184,10 @@ U0 KernelMain() "LBts(&sys_run_level,RLf_MP);"); }; - KbdMouseVarsInit; - IPVarsInit; + KbdMsInit; + MsInit; KbdInit; - Spawn(&MouseDriverInstall); + Spawn(&MsHardDrvrInstall); "Loading Compiler\n"; Cd("/Compiler"); diff --git a/Kernel/KExcept.HC b/Kernel/KExcept.HC index a16853a..ae2d24d 100644 --- a/Kernel/KExcept.HC +++ b/Kernel/KExcept.HC @@ -14,13 +14,13 @@ _TEST_EXCEPT:: MOV R15,U64 CExcept.r15[RAX] PUSH U64 CExcept.rflags[RAX] POPFD - JMP U64 CExcept.handler_catch[RAX] + JMP U64 CExcept.hndlr_catch[RAX] _TAKE_EXCEPT:: XOR RAX,RAX MOV RAX,FS:U64 CTask.last_except[RAX] MOV RSP,U64 CExcept.rsp[RAX] - JMP U64 CExcept.handler_untry[RAX] + JMP U64 CExcept.hndlr_untry[RAX] _SAVE_EXCEPT_REGS:: PUSH RBP @@ -45,9 +45,9 @@ _extern _SAVE_EXCEPT_REGS U0 SaveExceptRegs(CExcept *t); U0 PutExcept(Bool catch_it=TRUE) {//Print exception msg and catch exception. "Except:%c:",Fs->except_ch; - "%P:%P:%P:%P:%P:%P\n",Fs->except_caller1,Fs->except_caller2, - Fs->except_caller3,Fs->except_caller4,Fs->except_caller5, - Fs->except_caller6,Fs->except_caller7,Fs->except_caller8; + "%P:%P:%P:%P:%P:%P\n",Fs->except_callers[0],Fs->except_callers[1], + Fs->except_callers[2],Fs->except_callers[3],Fs->except_callers[4], + Fs->except_callers[5],Fs->except_callers[6],Fs->except_callers[7]; Fs->catch_except=catch_it; } @@ -65,8 +65,8 @@ U0 SysTry(U8 *catch_start,U8 *untry_start) { I64 *rbp=GetRBP; CExcept *tmpt=MAlloc(sizeof(CExcept)); - tmpt->handler_catch=catch_start; - tmpt->handler_untry=untry_start; + tmpt->hndlr_catch=catch_start; + tmpt->hndlr_untry=untry_start; tmpt->rsp=rbp(U8 *)+sizeof(CTryStk); tmpt->rbp=*rbp; tmpt->rflags=GetRFlags; @@ -86,22 +86,17 @@ U0 throw(I64 ch=0,Bool no_log=FALSE) //In the catcher, fetch ch from Fs->except_ch. CExcept *tmpt=Fs->last_except; Bool was_raw; + I64 i; Fs->except_ch=ch; - Fs->except_caller1=Caller(1); - Fs->except_caller2=Caller(2); - Fs->except_caller3=Caller(3); - Fs->except_caller4=Caller(4); - Fs->except_caller5=Caller(5); - Fs->except_caller6=Caller(6); - Fs->except_caller7=Caller(7); - Fs->except_caller8=Caller(8); + for (i=0;iexcept_callers[i]=Caller(i+1); Fs->except_rbp=GetRBP; Fs->catch_except=FALSE; if (!no_log) - AdamLog("Except:%c:%p:%p:%p:%p:%p:%p\n",ch,Fs->except_caller1, - Fs->except_caller2,Fs->except_caller3,Fs->except_caller4, - Fs->except_caller5,Fs->except_caller6,Fs->except_caller7, - Fs->except_caller8); + AdamLog("Except:%c:%p:%p:%p:%p:%p:%p\n",ch,Fs->except_callers[0], + Fs->except_callers[1],Fs->except_callers[2],Fs->except_callers[3], + Fs->except_callers[4],Fs->except_callers[5],Fs->except_callers[6], + Fs->except_callers[7]); while (Fs->next_except!=&Fs->next_except) { TestExcept; if (Fs->catch_except) @@ -113,17 +108,17 @@ U0 throw(I64 ch=0,Bool no_log=FALSE) } was_raw=Raw(ON); PutExcept(FALSE); - Dbg("Unhandled Exception"); + Panic("Unhandled Exception"); Raw(was_raw); } #exe {Option(OPTf_NO_REG_VAR,OFF);}; -U0 SysThrowBreak() -{ +U0 Break() +{//Send . if (Bt(&Fs->task_flags,TASKf_BREAK_TO_SHIFT_ESC)) Msg(MSG_KEY_DOWN,CH_SHIFT_ESC,0x20100000201); - else {//TODO: Might want lock + else { Fs->wake_jiffy=0; TaskRstAwaitingMsg; DrvsRelease(); @@ -133,17 +128,6 @@ U0 SysThrowBreak() } } -U0 ThrowBreak(CTask *task=NULL) -{//Can be used to exit an app, but not a task. - if (task && task!=Fs) { - if (!TaskValidate(task)) return; -//TODO: Might want lock - sys_focus_task=task; - LBts(sys_ctrl_alt_flags,SYSf_CTRL_ALT_C); - } else - SysThrowBreak; -} - Bool BreakLock(CTask *task=NULL) {//Disables . if (!task) task=Fs; @@ -157,9 +141,9 @@ Bool BreakUnlock(CTask *task=NULL) res=LBtr(&task->task_flags,TASKf_BREAK_LOCKED); if (LBtr(&task->task_flags,TASKf_PENDING_BREAK)) { if (task==Fs) - ThrowBreak; + Break; else - task->rip=&ThrowBreak; + task->rip=&Break; } return res; } diff --git a/Kernel/KExts.HC b/Kernel/KExts.HC index 4abc398..1f40687 100644 --- a/Kernel/KExts.HC +++ b/Kernel/KExts.HC @@ -10,7 +10,8 @@ import Bool Ed(U8 *link_st,I64 edf_dof_flags=0); extern U0 AdamErr(U8 *fmt,...); extern U0 AdamLog(U8 *fmt,...); extern I64 BIOSTotalMem(); -extern I64 BlkDevAdd(CBlkDev *bd,Bool one_drv,Bool make_free); +extern I64 BlkDevAdd(CBlkDev *bd,I64 prt_num=MIN_I64, + Bool whole_drv,Bool make_free); extern CBlkDev *BlkDevChk(CBlkDev *bd,Bool except=TRUE); extern Bool BlkDevLock(CBlkDev *bd); extern CBlkDev *BlkDevNextFreeSlot(U8 first_drv_let,I64 type); @@ -19,7 +20,6 @@ extern U0 BlkDevsRelease(); extern U8 *Caller(I64 num=1); extern U8 *CatPrint(U8 *_dst,U8 *fmt,...); extern Bool Cd(U8 *dirname=NULL,Bool make_dirs=FALSE); -extern U0 Dbg(U8 *msg=NULL,I64 msg_num=0); extern U0 DbgHelp(); extern U8 *Define(U8 *dname); extern I64 DefineMatch(U8 *needle,U8 *haystack_lst_dname,I64 flags=0); @@ -40,9 +40,9 @@ extern I64 FAT32AllocClusters(CDrv *dv,I64 c,I64 cnt); extern I64 FAT32AllocContiguousClusters(CDrv *dv,I64 cnt); extern Bool FAT32DirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tmpde, Bool free_old_chain); -extern U0 FAT32DrvInit(CDrv *dv); extern Bool FAT32FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, CDirEntry *_res,I64 fuf_flags=0); +extern U0 FAT32Init(CDrv *dv); extern U0 FClose(CFile *f); extern CFile *FOpen(U8 *filename,U8 *flags,I64 cnt=0); extern Bool FRBlks(CFile *f,U8 *buf,I64 blk=FFB_NEXT_BLK,I64 cnt=1); @@ -59,18 +59,24 @@ extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL, CTask *task=NULL,CBlkPool *bp); extern Bool ISO1FileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, CDirEntry *_res,I64 fuf_flags=0); -extern Bool ISODrvInit(CDrv *dv,I64 blk); +extern Bool ISOInit(CDrv *dv,I64 blk); extern Bool IsDbgMode(); extern Bool IsDir(U8 *dir_name); extern Bool IsRaw(); +extern U0 JobCtrlInit(CJobCtrl *ctrl); +extern U0 JobDel(CJob *tmpc); +extern U0 JobQueDel(CJob *head); +extern I64 JobsHndlr(I64 run_flags,CTask *task=NULL); extern CBlkDev *Let2BlkDev(U8 drv_let=0,Bool except=TRUE); extern I64 Let2BlkDevType(U8 drv_let); extern CDrv *Let2Drv(U8 drv_let=0,Bool except=TRUE); +extern U8 Let2Let(U8 drv_let=0); extern U0 MPInt(U8 num,I64 cpu_num=1); extern U8 *MStrPrint(U8 *fmt,...); extern Bool MkDir(U8 *filename,I64 entry_cnt=0); -extern U0 MouseIPSet(I64 x,I64 y,I64 z,I64 l,I64 r); -extern U0 Msg(I64 msg_code,I64 a1,I64 a2,I64 flags=0); +extern U0 MsHardSet(I64 x,I64 y,I64 z,I64 l,I64 r); +extern U0 Msg(I64 msg_code,I64 arg1,I64 arg2,I64 flags=0); +extern U0 Panic(U8 *msg=NULL,I64 msg_num=0,Bool panic=TRUE); extern I64 PopUp(U8 *buf,CTask *parent=NULL,CTask **_pu_task=NULL); extern U0 Print(U8 *fmt,...); extern U0 PutChars(U64 ch); @@ -79,24 +85,20 @@ extern Bool RBlks(CDrv *dv,U8 *buf, I64 blk, I64 cnt); extern I64 RedSeaAllocClusters(CDrv *dv,I64 cnt); extern Bool RedSeaDirNew(CDrv *dv,U8 *cur_dir,CDirEntry *tmpde, Bool free_old_chain); -extern U0 RedSeaDrvInit(CDrv *dv); -extern Bool RedSeaDrvValidate(U8 drv_let); extern Bool RedSeaFileFind(CDrv *dv,I64 cur_dir_cluster,U8 *name, CDirEntry *_res,I64 fuf_flags=0); extern U0 RedSeaFmt(U8 drv_let,Bool quick=TRUE); extern U0 RedSeaFreeFreeLst(CDrv *dv); +extern U0 RedSeaInit(CDrv *dv); +extern Bool RedSeaValidate(U8 drv_let); extern CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL, U8 *task_name=NULL,I64 target_cpu,CTask *parent=NULL, //NULL means adam - I64 stk_size=0,I64 flags=1<code_heap),*dst=res; diff --git a/Kernel/KLoad.HC b/Kernel/KLoad.HC index cd99443..e95450a 100644 --- a/Kernel/KLoad.HC +++ b/Kernel/KLoad.HC @@ -240,11 +240,11 @@ CBinFile *Load(U8 *filename,I64 ld_flags=0,CBinFile *bfh_addr=INVALID_PTR) U0 LoadKernel() { HashGenericAdd(KERNEL_MODULE_NAME,HTT_MODULE|HTF_PUBLIC, - sys_boot_base-sizeof(CBinFile)); + mem_boot_base-sizeof(CBinFile)); //Abs patches done here $LK,"CPatchTableAbsAddr",A="FF:D:/Kernel/KStart32.HC,CPatchTableAbsAddr"$. - LoadPass1(sys_boot_patch_table_base,sys_boot_base,LDF_NO_ABSS|LDF_SILENT); + LoadPass1(sys_boot_patch_table_base,mem_boot_base,LDF_NO_ABSS|LDF_SILENT); //No main routines - // LoadPass2(sys_boot_patch_table_base,sys_boot_base,0); + // LoadPass2(sys_boot_patch_table_base,mem_boot_base,0); } diff --git a/Kernel/KMisc.HC b/Kernel/KMisc.HC index 852d9c7..eadf147 100644 --- a/Kernel/KMisc.HC +++ b/Kernel/KMisc.HC @@ -44,15 +44,15 @@ I64 BCnt(I64 d) return res; } -U0 IntCore0TimerHandler(CTask *) -{//Called from $LK,"IntCore0TimerHandler",A="FF:::/Kernel/KInts.HC,IntCore0TimerHandler"$ +U0 IntCore0TimerHndlr(CTask *) +{//Called from $LK,"IntCore0TimerHndlr",A="FF:::/Kernel/KInts.HC,IntCore0TimerHndlr"$ I64 i; if (mp_cnt>1) - while (LBts(&sys_semas[SYS_SEMA_SYS_TIMER],0)) + while (LBts(&sys_semas[SEMA_SYS_TIMER],0)) PAUSE lock cnts.jiffies++; cnts.timer+=SYS_TIMER0_PERIOD+1; - LBtr(&sys_semas[SYS_SEMA_SYS_TIMER],0); + LBtr(&sys_semas[SEMA_SYS_TIMER],0); for (i=1;i1) - while (LBts(&sys_semas[SYS_SEMA_SYS_TIMER],0)) + while (LBts(&sys_semas[SEMA_SYS_TIMER],0)) PAUSE OutU8(0x43,0); //Latch Timer0 if ((i=InU8(0x40)+InU8(0x40)<<8)==SYS_TIMER0_PERIOD) { @@ -72,7 +72,7 @@ I64 SysTimerRead() i=-1; } res=cnts.timer+SYS_TIMER0_PERIOD-i; - LBtr(&sys_semas[SYS_SEMA_SYS_TIMER],0); + LBtr(&sys_semas[SEMA_SYS_TIMER],0); POPFD return res; } @@ -133,7 +133,7 @@ Bool Blink(F64 Hz=2.5) return ToI64(cnts.jiffies*2*Hz/JIFFY_FREQ)&1; } -U0 BusyWait(I64 æS) +U0 Busy(I64 æS) {//Loosely timed. I64 i; if (cnts.HPET_freq) { @@ -152,63 +152,79 @@ U0 SleepUntil(I64 wake_jiffy) LBEqu(&Fs->task_flags,TASKf_IDLE,old_idle); } -U0 Sleep(I64 ms) +U0 Sleep(I64 mS) {//Not for power-saving. It is to make a program pause without hogging the CPU. - if (!ms) + if (!mS) Yield; else - SleepUntil(cnts.jiffies+ms*JIFFY_FREQ/1000); + SleepUntil(cnts.jiffies+mS*JIFFY_FREQ/1000); } -U0 Snd(F64 freq) +F64 Ona2Freq(I8 ona) +{//Ona to freq. Ona=60 is 440.0Hz. + if (ona==ONA_REST) + return 0; + else + return 440.0/32*2.0`(ona/12.0); +} + +I8 Freq2Ona(F64 freq) +{//Freq to Ona. 440.0Hz is Ona=60. + if (freq>0) + return ClampI64(12*Log2(32.0/440.0*freq),ONA_REST+1,MAX_I8); + else + return ONA_REST; +} + +U0 Snd(I8 ona=ONA_REST) {//Play freq. Zero means off. I64 period; CSndData *d; - if (!Bt(&sys_semas[SYS_SEMA_MUTE],0) && - !LBts(&sys_semas[SYS_SEMA_SND],0)) { //Mutex. Just throw-out if in use - if (freq!=snd.freq) { - snd.freq=freq; - if (0freq=freq; + d->ona=ona; d->time=tS; QueIns(d,snd.record_head.last); } - LBtr(&sys_semas[SYS_SEMA_SND],0); + LBtr(&sys_semas[SEMA_SND],0); } } U0 SndRst() {//Fix stuck sound. - if (Bt(&sys_semas[SYS_SEMA_SND],0)) { + if (Bt(&sys_semas[SEMA_SND],0)) { Sleep(1); - if (Bt(&sys_semas[SYS_SEMA_SND],0)) { + if (Bt(&sys_semas[SEMA_SND],0)) { Sleep(1); - LBtr(&sys_semas[SYS_SEMA_SND],0); + LBtr(&sys_semas[SEMA_SND],0); } } - Snd(0); + Snd; } -U0 Beep(I64 freq=500,Bool busy=FALSE) -{//Make beep at given freq. - Snd(freq); +U0 Beep(I8 ona=62,Bool busy=FALSE) +{//Make beep at given ona freq. + Snd(ona); if (busy) - BusyWait(500000); + Busy(500000); else Sleep(500); - Snd(0); + Snd; if (busy) - BusyWait(200000); + Busy(200000); else Sleep(200); } @@ -219,17 +235,17 @@ Bool Mute(Bool val) if (val) { PUSHFD CLI - Snd(0); - res=LBts(&sys_semas[SYS_SEMA_MUTE],0); + Snd; + res=LBts(&sys_semas[SEMA_MUTE],0); POPFD } else - res=LBtr(&sys_semas[SYS_SEMA_MUTE],0); + res=LBtr(&sys_semas[SEMA_MUTE],0); return res; } Bool IsMute() {//Return is-mute flag. - return Bt(&sys_semas[SYS_SEMA_MUTE],0); + return Bt(&sys_semas[SEMA_MUTE],0); } Bool Silent(Bool val=ON) @@ -244,12 +260,12 @@ Bool IsSilent() Bool SysDbg(Bool val) {//Set SysDbg bit you can use while debugging. - return LBEqu(&sys_semas[SYS_SEMA_DEBUG],0,val); + return LBEqu(&sys_semas[SEMA_DEBUG],0,val); } Bool IsSysDbg() {//Return SysDbg bit. - return Bt(&sys_semas[SYS_SEMA_DEBUG],0); + return Bt(&sys_semas[SEMA_DEBUG],0); } Bool Raw(Bool val) @@ -266,25 +282,26 @@ Bool IsRaw() Bool SingleUser(Bool val) {//Set single-user mode. - return LBEqu(&sys_semas[SYS_SEMA_SINGLE_USER],0,val); + return LBEqu(&sys_semas[SEMA_SINGLE_USER],0,val); } Bool IsSingleUser() {//Return single-user mode. - return Bt(&sys_semas[SYS_SEMA_SINGLE_USER],0); + return Bt(&sys_semas[SEMA_SINGLE_USER],0); } Bool DbgMode(Bool val) {//Set dbg-mode. - return LBEqu(&sys_semas[SYS_SEMA_DBG_MODE],0,val); + return LBEqu(&sys_semas[SEMA_DBG_MODE],0,val); } Bool IsDbgMode() {//Return dbg-mode. - return Bt(&sys_semas[SYS_SEMA_DBG_MODE],0); + return Bt(&sys_semas[SEMA_DBG_MODE],0); } -U0 ProgressBarsRst() +U0 ProgressBarsRst(U8 *path=NULL) { + CallExtStr("ProgressBarsRegTf",path); MemSet(sys_progresses,0,sizeof(sys_progresses)); } diff --git a/Kernel/KStart16.HC b/Kernel/KStart16.HC index 53fe4db..4314536 100644 --- a/Kernel/KStart16.HC +++ b/Kernel/KStart16.HC @@ -15,7 +15,7 @@ because it is #included first. $LK,"Kernel.PRJ",A="FF:::/Kernel/Kernel.PRJ,KSta */ USE16 SYS_KERNEL:: //This must match $LK,"CKernel",A="MN:CKernel"$. - JMP U16 CORE0_16BIT_INIT + JMP I16 CORE0_16BIT_INIT //************************************ // ASM Global vars required for 16-bit start-up @@ -27,13 +27,13 @@ SYS_RUN_LEVEL:: DU32 0; #exe {StreamPrint("SYS_COMPILE_TIME:: DU64 0x%X;",Now);} //See $LK,"BootDVDProbe",A="MN:BootDVDProbe"$ #assert SYS_COMPILE_TIME+sizeof(CDate)+sizeof(CBinFile)opts[CFG_MEM_INIT], kernel_cfg->mem_init_val, kernel_cfg->opts[CFG_HEAP_INIT],kernel_cfg->heap_init_val, -kernel_cfg->opts[CFG_VAR_INIT], kernel_cfg->var_init_val); +kernel_cfg->opts[CFG_VAR_INIT], kernel_cfg->var_init_val, +kernel_cfg->opts[CFG_STAFF_MODE]); }; SYS_HEAP_DBG_FLAG:: DU8 _CFG_HEAP_DBG; -SYS_GIG_PAGES:: DU8 0; + ALIGN 8,0 SYS_CTRL_ALT_FLAGS:: DU64 0; SYS_EXTERN_TABLE:: DU64 0; @@ -31,18 +41,22 @@ SYS_PROGRESSES:: SYS_PROGRESS1:: DU64 0; SYS_PROGRESS1_MAX:: DU64 0; SYS_PROGRESS1_T0:: DU64 0; +SYS_PROGRESS1_TF:: DU64 0; SYS_PROGRESS1_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); SYS_PROGRESS2:: DU64 0; SYS_PROGRESS2_MAX:: DU64 0; SYS_PROGRESS2_T0:: DU64 0; +SYS_PROGRESS2_TF:: DU64 0; SYS_PROGRESS2_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); SYS_PROGRESS3:: DU64 0; SYS_PROGRESS3_MAX:: DU64 0; SYS_PROGRESS3_T0:: DU64 0; +SYS_PROGRESS3_TF:: DU64 0; SYS_PROGRESS3_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); SYS_PROGRESS4:: DU64 0; SYS_PROGRESS4_MAX:: DU64 0; SYS_PROGRESS4_T0:: DU64 0; +SYS_PROGRESS4_TF:: DU64 0; SYS_PROGRESS4_DESC:: DU8 PROGRESS_DESC_LEN DUP(0); #assert $$-SYS_PROGRESSES==sizeof(CProgress)*4 @@ -55,7 +69,7 @@ SYS_MP_CNT_LOCK:: DU64 1; ALIGN DFT_CACHE_LINE_WIDTH,OC_NOP SYS_CACHE_LINE_WIDTH:: DU64 DFT_CACHE_LINE_WIDTH; DU8 DFT_CACHE_LINE_WIDTH-sizeof(CBinFile)-8 DUP(0); -SYS_SEMAS:: DU8 NUM_SYS_SEMAS*SEMA_STRUCT_SIZE DUP(0); +SYS_SEMAS:: DU8 SEMA_NUM_SEMAS*DFT_CACHE_LINE_WIDTH DUP(0); //************************************ ALIGN 16,OC_NOP CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$. @@ -68,7 +82,7 @@ CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$. MOV DS,AX BTS U32 [SYS_RUN_LEVEL],RLf_32BIT MOV ESI,U32 [SYS_BOOT_PATCH_TABLE_BASE] - MOV EDI,U32 [SYS_BOOT_BASE] + MOV EDI,U32 [MEM_BOOT_BASE] MOV AX,CGDT.ds MOV DS,AX @@ -94,10 +108,10 @@ CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$. CALL SYS_FIND_PCIBIOS_SERVICE_DIR CALL SYS_FIND_PCI_SERVICES - - MOV U32 [SYS_HEAP_BASE],SYS_FIXED_AREA+sizeof(CSysFixedArea) CALL SYS_INIT_PAGE_TABLES - + CALL SYS_INIT_16MEG_SYS_CODE_BP PUSH U32 0 //Return from next call will be 64-bit CALL SYS_ENTER_LONG_MODE + + //We fall-thou to $LK,"KStart64",A="FL:::/Kernel/KStart64.HC,1"$, next. } diff --git a/Kernel/KStart64.HC b/Kernel/KStart64.HC index 5947dce..8b6dbdd 100644 --- a/Kernel/KStart64.HC +++ b/Kernel/KStart64.HC @@ -15,7 +15,7 @@ USE64 //Init Adam HeapCtrl MOV EDI,U32 SYS_FIXED_AREA+CSysFixedArea.adam_hc - MOV EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam_bp + MOV EAX,U32 SYS_FIXED_AREA+CSysFixedArea.sys_code_bp MOV U64 CHeapCtrl.bp[RDI],RAX MOV U32 CHeapCtrl.hc_signature[RDI],HEAP_CTRL_SIGNATURE_VAL @@ -29,7 +29,7 @@ USE64 MOV U64 CTask.data_heap[RAX],RDI MOV U32 CTask.task_signature[RAX],TASK_SIGNATURE_VAL - BTS U32 [SYS_RUN_LEVEL],RLf_BOOT_HEAP + BTS U32 [SYS_RUN_LEVEL],RLf_16MEG_ADAM_HEAP_CTRL PUSH MEM_ADAM_STK PUSH U32 SYS_FIXED_AREA+CSysFixedArea.adam @@ -46,7 +46,7 @@ SYS_ENTER_LONG_MODE:: //Switch to long 64-bit mode OR EAX,0xB0 MOV_CR4_EAX - MOV EAX,SYS_FIXED_AREA+CSysFixedArea.pml4 + MOV EAX,[MEM_PML4] MOV_CR3_EAX MOV ECX,IA32_EFER diff --git a/Kernel/KTask.HC b/Kernel/KTask.HC index 2627023..0676912 100644 --- a/Kernel/KTask.HC +++ b/Kernel/KTask.HC @@ -4,6 +4,9 @@ U0 Exit() LBts(&Fs->task_flags,TASKf_KILL_AFTER_DBG); G; } else { + if (sys_staff_mode_flag) + AdamLog("%p:%p:%p:%p:%p:%p\n",Caller(0),Caller(1),Caller(2),Caller(3), + Caller(4),Caller(5),Caller(6),Caller(7)); if (!Gs->num && !IsDbgMode) SingleUser(OFF); Fs->rflags=GetRFlags; @@ -42,19 +45,31 @@ U0 DeathWait(CTask **_task,Bool send_exit=FALSE) Yield; } -Bool Kill(CTask *task,Bool wait=TRUE) +Bool Kill(CTask *task,Bool wait=TRUE,Bool just_break=FALSE) {//Terminate other task. I64 i; - if (TaskValidate(task) && task!=sys_winmgr_task) { - for (i=0;itask_flags,TASKf_KILL_TASK); - if (wait) { - do Yield; - while (TaskValidate(task) && Bt(&task->task_flags,TASKf_KILL_TASK)); + if (TaskValidate(task)) { + if (just_break) { + if (task!=Fs) + Break; + else {//TODO wait + sys_focus_task=task; + LBts(sys_ctrl_alt_flags,CTRL_ALT_C); + return TRUE; + } + } else { + if (task!=sys_winmgr_task) { + for (i=0;itask_flags,TASKf_KILL_TASK); + if (wait) { + do Yield; + while (TaskValidate(task) && Bt(&task->task_flags,TASKf_KILL_TASK)); + } + return TRUE; + } } - return TRUE; } return FALSE; } @@ -187,7 +202,7 @@ I64 TaskInit(CTask *task,I64 stk_size) task->next_child_task=task->last_child_task= (&task->next_child_task)(U8 *)-offset(CTask.next_sibling_task); - SrvCtrlInit(&task->srv_ctrl); + JobCtrlInit(&task->srv_ctrl); QueInit(&task->next_cc); QueInit(&task->next_except); QueInit(&task->next_ctrl); @@ -228,7 +243,7 @@ CTask *Spawn(U0 (*fp_start_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL, I64 target_cpu=-1, //-1 for current CPU. See $LK,"multi-core",A="FI:::/Demo/MultiCore/LoadTest.HC"$. CTask *parent=NULL, //NULL means adam I64 stk_size=0, //0=default - I64 flags=1<title_src=TTS_TASK_NAME; PUSHFD CLI - if (Bt(&flags,SVCf_ADD_TO_QUE)) { + if (Bt(&flags,JOBf_ADD_TO_QUE)) { TaskQueInsChild(task); TaskQueIns(task); } @@ -279,7 +294,7 @@ U0 TaskDerivedValsUpdate(CTask *task=NULL,Bool update_z_buf=TRUE) if (fp_update_ctrls) (*fp_update_ctrls)(task); if (update_z_buf && Bt(&task->display_flags,DISPLAYf_SHOW)) - LBts(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0); + LBts(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0); LBtr(&task->task_flags,TASKf_TASK_LOCK); POPFD } @@ -356,7 +371,7 @@ U0 SrvTaskCont() FlushMsgs; while (TRUE) { CLI - if (SrvCmdsHandler(old_flags) && Fs->title_src==TTS_TASK_NAME) + if (JobsHndlr(old_flags) && Fs->title_src==TTS_TASK_NAME) MemCpy(Fs->task_title,Fs->task_name,TASK_NAME_LEN); FlushMsgs; LBts(&Fs->task_flags,TASKf_IDLE); @@ -392,8 +407,7 @@ U0 SrvCmdLine(I64 dummy=0) { no_warn dummy; Fs->win_inhibit=WIG_USER_TASK_DFT; - if (HashFind("SrvStartUp",adam_task->hash_table,HTT_FUN)) - CallExtStr("SrvStartUp"); + CallExtStr("SrvStartUp"); SrvTaskCont; } @@ -401,8 +415,7 @@ U0 UserCmdLine(I64 dummy=0) {//A user task ends-up calling this. no_warn dummy; Fs->win_inhibit=WIG_USER_TASK_DFT; - if (HashFind("UserStartUp",adam_task->hash_table,HTT_FUN)) - CallExtStr("UserStartUp"); + CallExtStr("UserStartUp"); if (!LBts(&Fs->display_flags,DISPLAYf_SHOW)) Dbg; UserTaskCont; @@ -463,15 +476,15 @@ I64 TaskEnd() return task->next_task; } if (LBtr(&task->display_flags,DISPLAYf_SHOW)) - LBts(&sys_semas[SYS_SEMA_UPDATE_WIN_Z_BUF],0); + LBts(&sys_semas[SEMA_UPDATE_WIN_Z_BUF],0); while (LBts(&task->task_flags,TASKf_TASK_LOCK)) PAUSE - while (LBts(&task->srv_ctrl.flags,SVCRf_LOCKED)) + while (LBts(&task->srv_ctrl.flags,JOBCf_LOCKED)) PAUSE - SrvCmdQueDel(&task->srv_ctrl.next_waiting); - SrvCmdQueDel(&task->srv_ctrl.next_done); + JobQueDel(&task->srv_ctrl.next_waiting); + JobQueDel(&task->srv_ctrl.next_done); if (IsRaw) VGAFlush; @@ -500,7 +513,7 @@ I64 TaskEnd() tmpt =task->next_task; //save to return TaskQueRem(task); - LBtr(&task->srv_ctrl.flags,SVCRf_LOCKED); + LBtr(&task->srv_ctrl.flags,JOBCf_LOCKED); LBtr(&task->task_flags,TASKf_TASK_LOCK); task->wake_jiffy=cnts.jiffies+DYING_JIFFIES; diff --git a/Kernel/Kernel.MAP b/Kernel/Kernel.MAP index c7431f9..bd68701 100644 --- a/Kernel/Kernel.MAP +++ b/Kernel/Kernel.MAP @@ -1,2913 +1,2931 @@ -$LK,"DrvTextAttrGet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,312",BI=1$ -$LK,"ARGT_R64",A="FL:::/Kernel/KernelA.HH,1895"$ +$LK,"DrvTextAttrGet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,322",BI=1$ +$LK,"TASK_EXCEPT_CALLERS",A="FL:::/Kernel/KernelA.HH,3268"$ +$LK,"ARGT_R64",A="FL:::/Kernel/KernelA.HH,1882"$ $LK,"MAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,387"$ -$LK,"BOOT_SRC_NULL",A="FL:::/Kernel/KernelA.HH,3884"$ +$LK,"BOOT_SRC_NULL",A="FL:::/Kernel/KernelA.HH,3839"$ $LK,"KbdTypeMatic",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,86",BI=2$ $LK,"KbdLEDsSet",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,52",BI=3$ -$LK,"LXchgU32",A="FL:::/Kernel/KernelB.HH,259"$ -$LK,"LXchgU16",A="FL:::/Kernel/KernelB.HH,258"$ -$LK,"BDS_CUR_DRV",A="FL:::/Kernel/KernelA.HH,3270"$ -$LK,"DOCM_CANCEL",A="FL:::/Kernel/KernelA.HH,1343"$ -$LK,"chars_bmp_word",A="FL:::/Kernel/StrA.HC.Z,340"$ -$LK,"BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2297"$ -$LK,"ARGT_SS",A="FL:::/Kernel/KernelA.HH,1926"$ +$LK,"LXchgU32",A="FL:::/Kernel/KernelB.HH,265"$ +$LK,"LXchgU16",A="FL:::/Kernel/KernelB.HH,264"$ +$LK,"BDS_CUR_DRV",A="FL:::/Kernel/KernelA.HH,3230"$ +$LK,"ICF_ARG2_TO_F64",A="FL:::/Kernel/KernelA.HH,1581"$ +$LK,"DOCM_CANCEL",A="FL:::/Kernel/KernelA.HH,1331"$ +$LK,"BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2284"$ +$LK,"ARGT_SS",A="FL:::/Kernel/KernelA.HH,1913"$ $LK,"c32_eax",A="FL:::/Kernel/PCIBIOS.HC.Z,152"$ -$LK,"ARGT_EAX",A="FL:::/Kernel/KernelA.HH,1919"$ -$LK,"DOCT_HEADER",A="FL:::/Kernel/KernelA.HH,913"$ -$LK,"Ff__EXTERN",A="FL:::/Kernel/KernelA.HH,853"$ +$LK,"ARGT_EAX",A="FL:::/Kernel/KernelA.HH,1906"$ +$LK,"DOCT_HEADER",A="FL:::/Kernel/KernelA.HH,901"$ +$LK,"Ff__EXTERN",A="FL:::/Kernel/KernelA.HH,841"$ $LK,"c32_ebx",A="FL:::/Kernel/PCIBIOS.HC.Z,153"$ -$LK,"MemPageSize",A="FL:::/Kernel/Mem/PageTables.HC.Z,135",BI=4$ $LK,"D3Add",A="FL:::/Kernel/KernelB.HH,145"$ $LK,"D3NormSqr",A="FL:::/Kernel/KernelB.HH,158"$ -$LK,"ARf_PLANAR_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3897"$ -$LK,"DOCf_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1297"$ -$LK,"RLF_BLKDEV",A="FL:::/Kernel/KernelA.HH,467"$ -$LK,"RLf_BLKDEV",A="FL:::/Kernel/KernelA.HH,448"$ +$LK,"ARf_PLANAR_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3852"$ +$LK,"DOCf_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1285"$ +$LK,"RLF_BLKDEV",A="FL:::/Kernel/KernelA.HH,470"$ +$LK,"RLf_BLKDEV",A="FL:::/Kernel/KernelA.HH,450"$ $LK,"c32_ecx",A="FL:::/Kernel/PCIBIOS.HC.Z,154"$ -$LK,"CCF_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2156"$ -$LK,"SYSf_CTRL_ALT_DEL",A="FL:::/Kernel/KernelA.HH,618"$ +$LK,"CCF_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2143"$ $LK,"SSF_INACTIVE",A="FL:::/Kernel/KernelA.HH,224"$ $LK,"MSF_INACTIVE",A="FL:::/Kernel/KernelA.HH,207"$ -$LK,"ATA_READ_MULTI",A="FL:::/Kernel/KernelA.HH,2264"$ +$LK,"ATA_READ_MULTI",A="FL:::/Kernel/KernelA.HH,2251"$ $LK,"c32_edx",A="FL:::/Kernel/PCIBIOS.HC.Z,155"$ -$LK,"FUf_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2594"$ -$LK,"CAOTBinBlk",A="FL:::/Kernel/KernelA.HH,1798"$ -$LK,"DOCEf_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1100"$ -$LK,"KernelMain",A="FL:::/Kernel/KEnd.HC.Z,132",BI=5$ -$LK,"KbdCmdSend",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,24",BI=6$ +$LK,"JOBf_DISPATCHED",A="FL:::/Kernel/KernelA.HH,3149"$ +$LK,"FUf_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2581"$ +$LK,"CAOTBinBlk",A="FL:::/Kernel/KernelA.HH,1785"$ +$LK,"DOCEf_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1088"$ +$LK,"KernelMain",A="FL:::/Kernel/KEnd.HC.Z,133",BI=4$ +$LK,"KbdCmdSend",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,24",BI=5$ $LK,"_D3_NORM_SQR",A="FL:::/Kernel/KMathA.HC.Z,22"$ -$LK,"TTS_CUR_LEX",A="FL:::/Kernel/KernelA.HH,3278"$ -$LK,"RS_ATTR_COMPRESSED",A="FL:::/Kernel/KernelA.HH,2537"$ -$LK,"CCf_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2157"$ -$LK,"CDocEntry",A="FL:::/Kernel/KernelA.HH,1182"$ -$LK,"CAOT",A="FL:::/Kernel/KernelA.HH,1996"$ -$LK,"sys_gig_pages",A="FL:::/Kernel/KernelB.HH,179"$ -$LK,"SVCf_DISPATCHED",A="FL:::/Kernel/KernelA.HH,3187"$ -$LK,"RLF_32BIT",A="FL:::/Kernel/KernelA.HH,460"$ -$LK,"RLF_16BIT",A="FL:::/Kernel/KernelA.HH,458"$ -$LK,"RLf_32BIT",A="FL:::/Kernel/KernelA.HH,441"$ -$LK,"RLf_16BIT",A="FL:::/Kernel/KernelA.HH,439"$ -$LK,"BreakUnlock",A="FL:::/Kernel/KExcept.HC.Z,153",BI=7$ -$LK,"DOCT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,917"$ -$LK,"DOCT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,916"$ +$LK,"TTS_CUR_LEX",A="FL:::/Kernel/KernelA.HH,3238"$ +$LK,"RS_ATTR_COMPRESSED",A="FL:::/Kernel/KernelA.HH,2524"$ +$LK,"CCf_USE_LAST_U16",A="FL:::/Kernel/KernelA.HH,2144"$ +$LK,"CDocEntry",A="FL:::/Kernel/KernelA.HH,1170"$ +$LK,"CAOT",A="FL:::/Kernel/KernelA.HH,1983"$ +$LK,"ICF_ARG2_WAS_STK",A="FL:::/Kernel/KernelA.HH,1594"$ +$LK,"RLF_32BIT",A="FL:::/Kernel/KernelA.HH,462"$ +$LK,"RLF_16BIT",A="FL:::/Kernel/KernelA.HH,460"$ +$LK,"RLf_32BIT",A="FL:::/Kernel/KernelA.HH,442"$ +$LK,"RLf_16BIT",A="FL:::/Kernel/KernelA.HH,440"$ +$LK,"BreakUnlock",A="FL:::/Kernel/KExcept.HC.Z,137",BI=6$ +$LK,"DOCT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,905"$ +$LK,"DOCT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,904"$ $LK,"CGDT",A="FL:::/Kernel/KernelA.HH,336"$ -$LK,"TSF_SAME_SONG",A="FL:::/Kernel/KernelA.HH,3248"$ -$LK,"PRTF_NEG_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3925"$ -$LK,"ICF_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1607"$ -$LK,"MLF_NO_UNUSED_WARN",A="FL:::/Kernel/KernelA.HH,780"$ +$LK,"TSF_SAME_SONG",A="FL:::/Kernel/KernelA.HH,3208"$ +$LK,"PRTF_NEG_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3880"$ +$LK,"SCF_MS_L_DOWN",A="FL:::/Kernel/KernelA.HH,3499"$ +$LK,"SCf_MS_L_DOWN",A="FL:::/Kernel/KernelA.HH,3484"$ +$LK,"MSG_MS_L_DOWN",A="FL:::/Kernel/KernelA.HH,3192"$ +$LK,"ICF_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1595"$ +$LK,"MLF_NO_UNUSED_WARN",A="FL:::/Kernel/KernelA.HH,768"$ $LK,"I_MP_CRASH",A="FL:::/Kernel/KernelA.HH,295"$ -$LK,"MEM_HEAP_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2880"$ +$LK,"MEM_HEAP_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2848"$ $LK,"INVALID_PTR",A="FL:::/Kernel/KernelA.HH,40"$ -$LK,"RECALCt_NORMAL",A="FL:::/Kernel/KernelA.HH,1347"$ -$LK,"ATAInit",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,303",BI=8$ -$LK,"HashDefineLstAdd",A="FL:::/Kernel/KHashB.HC.Z,206",BI=9$ -$LK,"StrUtil",A="FL:::/Kernel/StrA.HC.Z,524",BI=10$ -$LK,"LstMatch",A="FL:::/Kernel/StrA.HC.Z,421",BI=11$ -$LK,"IET_REL_I32",A="FL:::/Kernel/KernelA.HH,401"$ -$LK,"IET_REL_I16",A="FL:::/Kernel/KernelA.HH,399"$ -$LK,"CPrsStk",A="FL:::/Kernel/KernelA.HH,1677"$ -$LK,"CCmpCtrl",A="FL:::/Kernel/KernelA.HH,2167"$ -$LK,"ATAWBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,579",BI=12$ -$LK,"CCPU",A="FL:::/Kernel/KernelA.HH,3443"$ -$LK,"ATABlkSel",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,1",BI=13$ +$LK,"RECALCt_NORMAL",A="FL:::/Kernel/KernelA.HH,1335"$ +$LK,"ATAInit",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,307",BI=7$ +$LK,"HashDefineLstAdd",A="FL:::/Kernel/KHashB.HC.Z,206",BI=8$ +$LK,"StrUtil",A="FL:::/Kernel/StrA.HC.Z,519",BI=9$ +$LK,"LstMatch",A="FL:::/Kernel/StrA.HC.Z,416",BI=10$ +$LK,"IET_REL_I32",A="FL:::/Kernel/KernelA.HH,400"$ +$LK,"IET_REL_I16",A="FL:::/Kernel/KernelA.HH,398"$ +$LK,"CPrsStk",A="FL:::/Kernel/KernelA.HH,1664"$ +$LK,"CCmpCtrl",A="FL:::/Kernel/KernelA.HH,2154"$ +$LK,"ATAWBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,582",BI=11$ +$LK,"CCPU",A="FL:::/Kernel/KernelA.HH,3403"$ +$LK,"ATABlkSel",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,1",BI=12$ $LK,"c32_esi",A="FL:::/Kernel/PCIBIOS.HC.Z,156"$ -$LK,"CCF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,2132"$ -$LK,"DOCEF_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,987"$ -$LK,"LDF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,369"$ -$LK,"SYS_CACHE_LINE_WIDTH",A="FL:::/Kernel/KStart32.HC.Z,56"$ -$LK,"CMF_I16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1698"$ +$LK,"CCF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,2119"$ +$LK,"DOCEF_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,975"$ +$LK,"LDF_JUST_LOAD",A="FL:::/Kernel/KernelA.HH,368"$ +$LK,"SYS_CACHE_LINE_WIDTH",A="FL:::/Kernel/KStart32.HC.Z,70"$ +$LK,"CMF_I16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1685"$ +$LK,"IRQMsHard",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,90",BI=13$ $LK,"FramePtrSet",A="FL:::/Kernel/KHashB.HC.Z,230",BI=14$ -$LK,"CCf_PASS_TRACE_PRESENT",A="FL:::/Kernel/KernelA.HH,2138"$ -$LK,"CMF_U16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1699"$ +$LK,"CCf_PASS_TRACE_PRESENT",A="FL:::/Kernel/KernelA.HH,2125"$ +$LK,"CMF_U16_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1686"$ $LK,"_STRICMP",A="FL:::/Kernel/StrA.HC.Z,117"$ -$LK,"IET_REL_I64",A="FL:::/Kernel/KernelA.HH,403"$ -$LK,"CFAT32Boot",A="FL:::/Kernel/KernelA.HH,2336"$ -$LK,"DOCEf_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,1075"$ -$LK,"DOCEF_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1023"$ -$LK,"FILEMASK_TXT",A="FL:::/Kernel/KernelA.HH,2292"$ -$LK,"TK_EOF",A="FL:::/Kernel/KernelA.HH,2067"$ -$LK,"CWinScroll",A="FL:::/Kernel/KernelA.HH,3102"$ -$LK,"DOCEf_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1109"$ -$LK,"ARf_FLOODFILL",A="FL:::/Kernel/KernelA.HH,3895"$ -$LK,"ICF_USE_F64",A="FL:::/Kernel/KernelA.HH,1595"$ -$LK,"MemPagesNotPresentMark",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,58",BI=15$ -$LK,"CH_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3511"$ -$LK,"FloorI64",A="FL:::/Kernel/KMathB.HC.Z,52",BI=16$ -$LK,"SC_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3557"$ -$LK,"FUf_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2593"$ -$LK,"GVF_ARRAY",A="FL:::/Kernel/KernelA.HH,872"$ -$LK,"DirEntryCompareCluster",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,84",BI=17$ -$LK,"KbdCmdFlush",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,45",BI=18$ -$LK,"CFPU",A="FL:::/Kernel/KernelA.HH,3174"$ -$LK,"TASKf_IDLE",A="FL:::/Kernel/KernelA.HH,3284"$ -$LK,"CDIR_SIZE",A="FL:::/Kernel/KernelA.HH,2564"$ -$LK,"ARGT_UIMM32",A="FL:::/Kernel/KernelA.HH,1889"$ -$LK,"ARGT_UIMM16",A="FL:::/Kernel/KernelA.HH,1888"$ -$LK,"PCIWriteU8",A="FL:::/Kernel/PCIBIOS.HC.Z,220",BI=19$ -$LK,"DefinePrint",A="FL:::/Kernel/KDefine.HC.Z,90",BI=20$ -$LK,"FifoI64Del",A="FL:::/Kernel/KDataTypes.HC.Z,252",BI=21$ -$LK,"CDocUndo",A="FL:::/Kernel/KernelA.HH,1335"$ -$LK,"ROPB_XOR",A="FL:::/Kernel/KernelA.HH,2936"$ -$LK,"FUF_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2608"$ -$LK,"ATA_SET_MAX",A="FL:::/Kernel/KernelA.HH,2262"$ -$LK,"IEF_DFT",A="FL:::/Kernel/KernelA.HH,1729"$ -$LK,"RT_F32",A="FL:::/Kernel/KernelA.HH,1562"$ -$LK,"Let2BlkDev",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,175",BI=22$ -$LK,"FUf_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2581"$ -$LK,"ARGT_M1632",A="FL:::/Kernel/KernelA.HH,1907"$ -$LK,"DOF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1216"$ -$LK,"DOCEF_LEFT_X",A="FL:::/Kernel/KernelA.HH,988"$ +$LK,"IET_REL_I64",A="FL:::/Kernel/KernelA.HH,402"$ +$LK,"CFAT32Boot",A="FL:::/Kernel/KernelA.HH,2323"$ +$LK,"DOCEf_RIGHT_IN_STR",A="FL:::/Kernel/KernelA.HH,1063"$ +$LK,"DOCEF_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1011"$ +$LK,"FILEMASK_TXT",A="FL:::/Kernel/KernelA.HH,2279"$ +$LK,"TK_EOF",A="FL:::/Kernel/KernelA.HH,2054"$ +$LK,"CWinScroll",A="FL:::/Kernel/KernelA.HH,3064"$ +$LK,"DOCEf_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HH,1097"$ +$LK,"ARf_FLOODFILL",A="FL:::/Kernel/KernelA.HH,3850"$ +$LK,"ICF_USE_F64",A="FL:::/Kernel/KernelA.HH,1583"$ +$LK,"CH_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3465"$ +$LK,"FloorI64",A="FL:::/Kernel/KMathB.HC.Z,52",BI=15$ +$LK,"SC_BACKSPACE",A="FL:::/Kernel/KernelA.HH,3510"$ +$LK,"FUf_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2580"$ +$LK,"GVF_ARRAY",A="FL:::/Kernel/KernelA.HH,860"$ +$LK,"DirEntryCompareCluster",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,84",BI=16$ +$LK,"KbdCmdFlush",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,45",BI=17$ +$LK,"CFPU",A="FL:::/Kernel/KernelA.HH,3136"$ +$LK,"TASKf_IDLE",A="FL:::/Kernel/KernelA.HH,3244"$ +$LK,"CDIR_SIZE",A="FL:::/Kernel/KernelA.HH,2551"$ +$LK,"ARGT_UIMM32",A="FL:::/Kernel/KernelA.HH,1876"$ +$LK,"ARGT_UIMM16",A="FL:::/Kernel/KernelA.HH,1875"$ +$LK,"PCIWriteU8",A="FL:::/Kernel/PCIBIOS.HC.Z,220",BI=18$ +$LK,"DefinePrint",A="FL:::/Kernel/KDefine.HC.Z,90",BI=19$ +$LK,"FifoI64Del",A="FL:::/Kernel/KDataTypes.HC.Z,252",BI=20$ +$LK,"CDocUndo",A="FL:::/Kernel/KernelA.HH,1323"$ +$LK,"ROPB_XOR",A="FL:::/Kernel/KernelA.HH,2904"$ +$LK,"FUF_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2595"$ +$LK,"ATA_SET_MAX",A="FL:::/Kernel/KernelA.HH,2249"$ +$LK,"IEF_DFT",A="FL:::/Kernel/KernelA.HH,1716"$ +$LK,"RT_F32",A="FL:::/Kernel/KernelA.HH,1550"$ +$LK,"Let2BlkDev",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,180",BI=21$ +$LK,"FUf_JUST_FILES",A="FL:::/Kernel/KernelA.HH,2568"$ +$LK,"ARGT_M1632",A="FL:::/Kernel/KernelA.HH,1894"$ +$LK,"DOF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1204"$ +$LK,"DOCEF_LEFT_X",A="FL:::/Kernel/KernelA.HH,976"$ $LK,"RFLAGf_AUX_CARRY",A="FL:::/Kernel/KernelA.HH,310"$ -$LK,"DEF_PROCESSED",A="FL:::/Kernel/KernelA.HH,2548"$ -$LK,"WIf_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HH,1449"$ -$LK,"DOCEf_LEFT_X",A="FL:::/Kernel/KernelA.HH,1076"$ -$LK,"Mem64DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,150",BI=23$ -$LK,"Mem32DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,114",BI=24$ -$LK,"SYS_GIG_PAGES",A="FL:::/Kernel/KStart32.HC.Z,22"$ -$LK,"ARGT_UIMM64",A="FL:::/Kernel/KernelA.HH,1890"$ -$LK,"DOCf_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1305"$ -$LK,"DOCF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1269"$ -$LK,"ATARepEntry",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,91",BI=25$ -$LK,"BLUE",A="FL:::/Kernel/KernelA.HH,2961"$ -$LK,"sys_ctrl_alt_flags",A="FL:::/Kernel/KernelB.HH,203"$ +$LK,"DEF_PROCESSED",A="FL:::/Kernel/KernelA.HH,2535"$ +$LK,"DOCEf_LEFT_X",A="FL:::/Kernel/KernelA.HH,1064"$ +$LK,"Mem64DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,127",BI=22$ +$LK,"Mem32DevFree",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,91",BI=23$ +$LK,"ARGT_UIMM64",A="FL:::/Kernel/KernelA.HH,1877"$ +$LK,"DOCf_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1293"$ +$LK,"DOCF_MIN_SIZE",A="FL:::/Kernel/KernelA.HH,1257"$ +$LK,"ATARepEntry",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,91",BI=24$ +$LK,"BLUE",A="FL:::/Kernel/KernelA.HH,2929"$ +$LK,"sys_ctrl_alt_flags",A="FL:::/Kernel/KernelB.HH,205"$ $LK,"D3Div",A="FL:::/Kernel/KernelB.HH,151"$ -$LK,"RT_F64",A="FL:::/Kernel/KernelA.HH,1564"$ -$LK,"EdLite",A="FL:::/Kernel/EdLite.HC.Z,58",BI=26$ -$LK,"MBR_PT_FAT12",A="FL:::/Kernel/KernelA.HH,2701"$ -$LK,"FramePtr",A="FL:::/Kernel/KHashB.HC.Z,215",BI=27$ -$LK,"ARGT_RM8",A="FL:::/Kernel/KernelA.HH,1897"$ -$LK,"ROPF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2956"$ -$LK,"RTF_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1567"$ -$LK,"DOCEF_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,1003"$ -$LK,"TK_EQU_EQU",A="FL:::/Kernel/KernelA.HH,2082"$ -$LK,"RT_I32",A="FL:::/Kernel/KernelA.HH,1557"$ -$LK,"RT_I16",A="FL:::/Kernel/KernelA.HH,1555"$ -$LK,"DOCEf_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,1091"$ -$LK,"SysTry",A="FL:::/Kernel/KExcept.HC.Z,64",BI=28$ -$LK,"POP_REGS",A="FL:::/Kernel/KernelA.HH,1769"$ -$LK,"IEF_OP_SIZE32",A="FL:::/Kernel/KernelA.HH,1726"$ -$LK,"IEF_OP_SIZE16",A="FL:::/Kernel/KernelA.HH,1725"$ -$LK,"HTT_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,688"$ -$LK,"BD_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2663"$ -$LK,"DOCEf_ESC",A="FL:::/Kernel/KernelA.HH,1088"$ -$LK,"ScanCode2Char",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,136",BI=29$ -$LK,"NUM_DRVS",A="FL:::/Kernel/KernelA.HH,2717"$ -$LK,"FSt_ISO13346",A="FL:::/Kernel/KernelA.HH,2693"$ +$LK,"RT_F64",A="FL:::/Kernel/KernelA.HH,1552"$ +$LK,"EdLite",A="FL:::/Kernel/EdLite.HC.Z,58",BI=25$ +$LK,"MBR_PT_FAT12",A="FL:::/Kernel/KernelA.HH,2688"$ +$LK,"FramePtr",A="FL:::/Kernel/KHashB.HC.Z,215",BI=26$ +$LK,"ARGT_RM8",A="FL:::/Kernel/KernelA.HH,1884"$ +$LK,"ROPF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2924"$ +$LK,"RTF_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1555"$ +$LK,"DOCEF_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,991"$ +$LK,"TK_EQU_EQU",A="FL:::/Kernel/KernelA.HH,2069"$ +$LK,"RT_I32",A="FL:::/Kernel/KernelA.HH,1545"$ +$LK,"RT_I16",A="FL:::/Kernel/KernelA.HH,1543"$ +$LK,"DOCEf_HAS_BORDER",A="FL:::/Kernel/KernelA.HH,1079"$ +$LK,"SysTry",A="FL:::/Kernel/KExcept.HC.Z,64",BI=27$ +$LK,"POP_REGS",A="FL:::/Kernel/KernelA.HH,1756"$ +$LK,"IEF_OP_SIZE32",A="FL:::/Kernel/KernelA.HH,1713"$ +$LK,"IEF_OP_SIZE16",A="FL:::/Kernel/KernelA.HH,1712"$ +$LK,"HTT_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,676"$ +$LK,"BD_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2650"$ +$LK,"DOCEf_ESC",A="FL:::/Kernel/KernelA.HH,1076"$ +$LK,"ScanCode2Char",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,136",BI=28$ +$LK,"NUM_DRVS",A="FL:::/Kernel/KernelA.HH,2704"$ +$LK,"FSt_ISO13346",A="FL:::/Kernel/KernelA.HH,2680"$ $LK,"_D3_ADD",A="FL:::/Kernel/KMathA.HC.Z,131"$ -$LK,"SYSf_CTRL_ALT_TAB",A="FL:::/Kernel/KernelA.HH,621"$ -$LK,"RCache",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,119",BI=30$ -$LK,"DOC_ATTR_DFT_TEXT",A="FL:::/Kernel/KernelA.HH,1135"$ +$LK,"RCache",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,119",BI=29$ +$LK,"DOC_ATTR_DFT_TEXT",A="FL:::/Kernel/KernelA.HH,1123"$ $LK,"D3Dot",A="FL:::/Kernel/KernelB.HH,153"$ -$LK,"CSrvCmd",A="FL:::/Kernel/KernelA.HH,3198"$ -$LK,"ARGT_RAX",A="FL:::/Kernel/KernelA.HH,1920"$ -$LK,"EDf_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1257"$ -$LK,"EDF_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1251"$ -$LK,"DOCF_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1272"$ -$LK,"KbdMsgsQue",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,467",BI=31$ -$LK,"ARGT_ST0",A="FL:::/Kernel/KernelA.HH,1933"$ -$LK,"RT_I64",A="FL:::/Kernel/KernelA.HH,1559"$ -$LK,"FifoI64Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,312",BI=32$ +$LK,"ARGT_RAX",A="FL:::/Kernel/KernelA.HH,1907"$ +$LK,"EDf_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1245"$ +$LK,"EDF_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,1239"$ +$LK,"DOCF_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1260"$ +$LK,"KbdMsgsQue",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,467",BI=30$ +$LK,"ARGT_ST0",A="FL:::/Kernel/KernelA.HH,1920"$ +$LK,"RT_I64",A="FL:::/Kernel/KernelA.HH,1547"$ +$LK,"SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,602"$ +$LK,"FifoI64Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,312",BI=31$ $LK,"sys_task_being_scrn_updated",A="FL:::/Kernel/KGlbls.HC.Z,11"$ -$LK,"NUM_PROGRESS_BARS",A="FL:::/Kernel/KernelA.HH,3904"$ -$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HH,3797"$ -$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HH,3597"$ -$LK,"_CFG_HEAP_DBG",A="FL:::/Kernel/KernelA.HH,2799"$ -$LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,658"$ -$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,511",BI=33$ -$LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HH,384"$ -$LK,"DVDImageRead",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,69",BI=34$ -$LK,"FSt_ISO13490",A="FL:::/Kernel/KernelA.HH,2692"$ -$LK,"IET_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,412"$ -$LK,"ROPB_MONO",A="FL:::/Kernel/KernelA.HH,2938"$ -$LK,"CAsmNum2",A="FL:::/Kernel/KernelA.HH,1825"$ +$LK,"NUM_PROGRESS_BARS",A="FL:::/Kernel/KernelA.HH,3859"$ +$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HH,3750"$ +$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HH,3550"$ +$LK,"_CFG_HEAP_DBG",A="FL:::/Kernel/KernelA.HH,2787"$ +$LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,646"$ +$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,511",BI=32$ +$LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HH,383"$ +$LK,"DVDImageRead",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,69",BI=33$ +$LK,"FSt_ISO13490",A="FL:::/Kernel/KernelA.HH,2679"$ +$LK,"IET_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,411"$ +$LK,"ROPB_MONO",A="FL:::/Kernel/KernelA.HH,2906"$ +$LK,"CAsmNum2",A="FL:::/Kernel/KernelA.HH,1812"$ +$LK,"WIf_FOCUS_TASK_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1440"$ +$LK,"MsHardSetPost",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,203",BI=34$ $LK,"AMAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,390",BI=35$ -$LK,"ICF_R_TO_INT",A="FL:::/Kernel/KernelA.HH,1590"$ -$LK,"DOCEf_LEN",A="FL:::/Kernel/KernelA.HH,1055"$ +$LK,"DOCEf_LEN",A="FL:::/Kernel/KernelA.HH,1043"$ $LK,"B",A="FL:::/Kernel/KDbg.HC.Z,407",BI=36$ -$LK,"ICF_PUSH_RES",A="FL:::/Kernel/KernelA.HH,1602"$ -$LK,"chars_bmp_dec_numeric",A="FL:::/Kernel/StrA.HC.Z,350"$ +$LK,"ICF_PUSH_RES",A="FL:::/Kernel/KernelA.HH,1590"$ $LK,"D3Equ",A="FL:::/Kernel/KernelB.HH,154"$ -$LK,"FF_NEW_FILE",A="FL:::/Kernel/KernelA.HH,2783"$ -$LK,"CMT_STR_CONST",A="FL:::/Kernel/KernelA.HH,1688"$ -$LK,"WIf_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HH,1451"$ +$LK,"FF_NEW_FILE",A="FL:::/Kernel/KernelA.HH,2771"$ +$LK,"CMT_STR_CONST",A="FL:::/Kernel/KernelA.HH,1675"$ $LK,"D",A="FL:::/Kernel/KDbg.HC.Z,172",BI=37$ $LK,"StrPrint",A="FL:::/Kernel/StrPrint.HC.Z,876",BI=38$ -$LK,"WINMGR_FPS",A="FL:::/Kernel/KernelA.HH,1465"$ +$LK,"MEM_PAG_BITS",A="FL:::/Kernel/KernelA.HH,2846"$ +$LK,"WINMGR_FPS",A="FL:::/Kernel/KernelA.HH,1453"$ $LK,"E",A="FL:::/Kernel/FunSeg.HC.Z,310",BI=39$ -$LK,"ICF_A2_TO_INT",A="FL:::/Kernel/KernelA.HH,1594"$ -$LK,"CEdFileName",A="FL:::/Kernel/KernelA.HH,1241"$ -$LK,"DOCT_LEFT_MARGIN",A="FL:::/Kernel/KernelA.HH,911"$ +$LK,"CEdFileName",A="FL:::/Kernel/KernelA.HH,1229"$ +$LK,"DOCT_LEFT_MARGIN",A="FL:::/Kernel/KernelA.HH,899"$ $LK,"_STRNCMP",A="FL:::/Kernel/StrA.HC.Z,154"$ -$LK,"MEM_NUM_USED_1GIG",A="FL:::/Kernel/KernelA.HH,3466"$ -$LK,"CCF_NO_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2137"$ +$LK,"CCF_NO_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2124"$ $LK,"G",A="FL:::/Kernel/KDbg.HC.Z,444",BI=40$ $LK,"ScaleIndent",A="FL:::/Kernel/StrB.HC.Z,35",BI=41$ -$LK,"IET_ABS_ADDR",A="FL:::/Kernel/KernelA.HH,411"$ +$LK,"JOBCf_LOCKED",A="FL:::/Kernel/KernelA.HH,3177"$ +$LK,"IET_ABS_ADDR",A="FL:::/Kernel/KernelA.HH,410"$ $LK,"PressAKey",A="FL:::/Kernel/StrB.HC.Z,103",BI=42$ -$LK,"DOF_WIN_MAX",A="FL:::/Kernel/KernelA.HH,1219"$ -$LK,"CCodeCtrl",A="FL:::/Kernel/KernelA.HH,2015"$ +$LK,"DOF_WIN_MAX",A="FL:::/Kernel/KernelA.HH,1207"$ +$LK,"CCodeCtrl",A="FL:::/Kernel/KernelA.HH,2002"$ $LK,"Char2ScanCode",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,100",BI=43$ $LK,"Mem32DevInit",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,30",BI=44$ $LK,"_BIT_FIELD_OR_U32",A="FL:::/Kernel/KUtils.HC.Z,154"$ -$LK,"DOCf_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1308"$ +$LK,"DOCf_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HH,1296"$ $LK,"SPutChar",A="FL:::/Kernel/StrPrint.HC.Z,1",BI=45$ $LK,"TaskQueIns",A="FL:::/Kernel/Sched.HC.Z,287",BI=46$ -$LK,"CYAN",A="FL:::/Kernel/KernelA.HH,2963"$ -$LK,"TK_SUPERSCRIPT",A="FL:::/Kernel/KernelA.HH,2068"$ -$LK,"RS_ATTR_DELETED",A="FL:::/Kernel/KernelA.HH,2535"$ -$LK,"CMT_ASM_LABEL",A="FL:::/Kernel/KernelA.HH,1686"$ -$LK,"RLF_64BIT",A="FL:::/Kernel/KernelA.HH,462"$ -$LK,"RLf_64BIT",A="FL:::/Kernel/KernelA.HH,443"$ +$LK,"CYAN",A="FL:::/Kernel/KernelA.HH,2931"$ +$LK,"TK_SUPERSCRIPT",A="FL:::/Kernel/KernelA.HH,2055"$ +$LK,"RS_ATTR_DELETED",A="FL:::/Kernel/KernelA.HH,2522"$ +$LK,"CMT_ASM_LABEL",A="FL:::/Kernel/KernelA.HH,1673"$ +$LK,"RLF_64BIT",A="FL:::/Kernel/KernelA.HH,465"$ +$LK,"RLf_64BIT",A="FL:::/Kernel/KernelA.HH,445"$ $LK,"RedSeaFreeLstBuild",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,24",BI=47$ -$LK,"TK_SHL",A="FL:::/Kernel/KernelA.HH,2080"$ -$LK,"DOCf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1311"$ -$LK,"DOCF_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1275"$ -$LK,"CH_CTRLA",A="FL:::/Kernel/KernelA.HH,3484"$ -$LK,"CHashGlblVar",A="FL:::/Kernel/KernelA.HH,874"$ -$LK,"CH_CTRLB",A="FL:::/Kernel/KernelA.HH,3485"$ -$LK,"MEM_NUM_1GIG",A="FL:::/Kernel/KernelA.HH,3467"$ -$LK,"DOCEf_TAG",A="FL:::/Kernel/KernelA.HH,1054"$ +$LK,"MSG_MS_L_D_UP",A="FL:::/Kernel/KernelA.HH,3195"$ +$LK,"TK_SHL",A="FL:::/Kernel/KernelA.HH,2067"$ +$LK,"DOCf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1299"$ +$LK,"DOCF_HAS_SONG",A="FL:::/Kernel/KernelA.HH,1263"$ +$LK,"CH_CTRLA",A="FL:::/Kernel/KernelA.HH,3438"$ +$LK,"CHashGlblVar",A="FL:::/Kernel/KernelA.HH,862"$ +$LK,"MEM_NUM_1GIG",A="FL:::/Kernel/KStart32.HC.Z,11"$ +$LK,"CH_CTRLB",A="FL:::/Kernel/KernelA.HH,3439"$ +$LK,"DOCEf_TAG",A="FL:::/Kernel/KernelA.HH,1042"$ $LK,"S",A="FL:::/Kernel/KDbg.HC.Z,479",BI=48$ -$LK,"CH_CTRLC",A="FL:::/Kernel/KernelA.HH,3486"$ +$LK,"CH_CTRLC",A="FL:::/Kernel/KernelA.HH,3440"$ +$LK,"SEMA_RECORD_MACRO",A="FL:::/Kernel/KernelA.HH,595"$ $LK,"FifoI64Ins",A="FL:::/Kernel/KDataTypes.HC.Z,258",BI=49$ $LK,"FloorU64",A="FL:::/Kernel/KMathB.HC.Z,36",BI=50$ -$LK,"CH_CTRLD",A="FL:::/Kernel/KernelA.HH,3487"$ -$LK,"DOCF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1284"$ -$LK,"DOCT_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,920"$ -$LK,"CH_CTRLE",A="FL:::/Kernel/KernelA.HH,3488"$ -$LK,"BLACK",A="FL:::/Kernel/KernelA.HH,2960"$ -$LK,"ARGT_STI",A="FL:::/Kernel/KernelA.HH,1934"$ -$LK,"NUM_REGS",A="FL:::/Kernel/KernelA.HH,1772"$ -$LK,"DOCf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1321"$ -$LK,"DOCEf_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,1081"$ -$LK,"DOCEF_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,993"$ +$LK,"CH_CTRLD",A="FL:::/Kernel/KernelA.HH,3441"$ +$LK,"DOCF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1272"$ +$LK,"DOCT_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,908"$ +$LK,"CH_CTRLE",A="FL:::/Kernel/KernelA.HH,3442"$ +$LK,"BLACK",A="FL:::/Kernel/KernelA.HH,2928"$ +$LK,"ARGT_STI",A="FL:::/Kernel/KernelA.HH,1921"$ +$LK,"NUM_REGS",A="FL:::/Kernel/KernelA.HH,1759"$ +$LK,"DOCf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1309"$ +$LK,"DOCEf_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,1069"$ +$LK,"DOCEF_BOTTOM_Y",A="FL:::/Kernel/KernelA.HH,981"$ $LK,"FileNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,171",BI=51$ -$LK,"CH_CTRLF",A="FL:::/Kernel/KernelA.HH,3489"$ -$LK,"TK_SHR",A="FL:::/Kernel/KernelA.HH,2081"$ +$LK,"CH_CTRLF",A="FL:::/Kernel/KernelA.HH,3443"$ +$LK,"TK_SHR",A="FL:::/Kernel/KernelA.HH,2068"$ $LK,"AutoMountIDE",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,253",BI=52$ -$LK,"CH_CTRLG",A="FL:::/Kernel/KernelA.HH,3490"$ -$LK,"DOCEF_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1013"$ +$LK,"CH_CTRLG",A="FL:::/Kernel/KernelA.HH,3444"$ +$LK,"DOCEF_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1001"$ $LK,"_HASH_REM_DEL",A="FL:::/Kernel/KHashA.HC.Z,208"$ $LK,"TaskQueRem",A="FL:::/Kernel/Sched.HC.Z,301",BI=53$ -$LK,"CH_CTRLH",A="FL:::/Kernel/KernelA.HH,3491"$ -$LK,"CPalindromeU32",A="FL:::/Kernel/KernelA.HH,2416"$ -$LK,"CPalindromeU16",A="FL:::/Kernel/KernelA.HH,2411"$ -$LK,"DOCT_CHECK_BOX",A="FL:::/Kernel/KernelA.HH,932"$ -$LK,"DCF_SCRN_BITMAP",A="FL:::/Kernel/KernelA.HH,3640"$ -$LK,"CH_CTRLI",A="FL:::/Kernel/KernelA.HH,3492"$ -$LK,"FileNameTmpTxt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,276",BI=54$ -$LK,"FifoI64New",A="FL:::/Kernel/KDataTypes.HC.Z,240",BI=55$ -$LK,"CH_CTRLJ",A="FL:::/Kernel/KernelA.HH,3493"$ -$LK,"ARGT_XMM128",A="FL:::/Kernel/KernelA.HH,1943"$ -$LK,"SC_CURSOR_UP",A="FL:::/Kernel/KernelA.HH,3566"$ -$LK,"CH_CTRLK",A="FL:::/Kernel/KernelA.HH,3494"$ -$LK,"TASKf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,3288"$ -$LK,"DOCEf_SEL",A="FL:::/Kernel/KernelA.HH,1050"$ -$LK,"RandI32",A="FL:::/Kernel/KMathB.HC.Z,97",BI=56$ -$LK,"RandI16",A="FL:::/Kernel/KMathB.HC.Z,77",BI=57$ -$LK,"CH_CTRLL",A="FL:::/Kernel/KernelA.HH,3495"$ -$LK,"CH_CTRLM",A="FL:::/Kernel/KernelA.HH,3496"$ -$LK,"ICf_LOCK",A="FL:::/Kernel/KernelA.HH,1614"$ -$LK,"ICF_LOCK",A="FL:::/Kernel/KernelA.HH,1613"$ -$LK,"PutFileLink",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,163",BI=58$ -$LK,"BreakLock",A="FL:::/Kernel/KExcept.HC.Z,147",BI=59$ -$LK,"HPET",A="FL:::/Kernel/KMisc.HC.Z,80",BI=60$ -$LK,"CORE0_32BIT_INIT",A="FL:::/Kernel/KStart32.HC.Z,61"$ +$LK,"RedSeaValidate",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,82",BI=54$ +$LK,"CH_CTRLH",A="FL:::/Kernel/KernelA.HH,3445"$ +$LK,"CPalindromeU32",A="FL:::/Kernel/KernelA.HH,2403"$ +$LK,"CPalindromeU16",A="FL:::/Kernel/KernelA.HH,2398"$ +$LK,"DOCT_CHECK_BOX",A="FL:::/Kernel/KernelA.HH,920"$ +$LK,"DCF_SCRN_BITMAP",A="FL:::/Kernel/KernelA.HH,3593"$ +$LK,"CH_CTRLI",A="FL:::/Kernel/KernelA.HH,3446"$ +$LK,"FileNameTmpTxt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,276",BI=55$ +$LK,"FifoI64New",A="FL:::/Kernel/KDataTypes.HC.Z,240",BI=56$ +$LK,"CH_CTRLJ",A="FL:::/Kernel/KernelA.HH,3447"$ +$LK,"ARGT_XMM128",A="FL:::/Kernel/KernelA.HH,1930"$ +$LK,"SC_CURSOR_UP",A="FL:::/Kernel/KernelA.HH,3519"$ +$LK,"CH_CTRLK",A="FL:::/Kernel/KernelA.HH,3448"$ +$LK,"TASKf_HAS_SONG",A="FL:::/Kernel/KernelA.HH,3248"$ +$LK,"WIF_FOCUS_TASK_MS_L_D",A="FL:::/Kernel/KernelA.HH,1412"$ +$LK,"DOCEf_SEL",A="FL:::/Kernel/KernelA.HH,1038"$ +$LK,"RandI32",A="FL:::/Kernel/KMathB.HC.Z,97",BI=57$ +$LK,"RandI16",A="FL:::/Kernel/KMathB.HC.Z,77",BI=58$ +$LK,"CH_CTRLL",A="FL:::/Kernel/KernelA.HH,3449"$ +$LK,"CH_CTRLM",A="FL:::/Kernel/KernelA.HH,3450"$ +$LK,"ICf_LOCK",A="FL:::/Kernel/KernelA.HH,1602"$ +$LK,"ICF_LOCK",A="FL:::/Kernel/KernelA.HH,1601"$ +$LK,"WIF_SELF_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1402"$ +$LK,"PutFileLink",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,163",BI=59$ +$LK,"BreakLock",A="FL:::/Kernel/KExcept.HC.Z,131",BI=60$ +$LK,"HPET",A="FL:::/Kernel/KMisc.HC.Z,80",BI=61$ +$LK,"CORE0_32BIT_INIT",A="FL:::/Kernel/KStart32.HC.Z,75"$ $LK,"CORE0_16BIT_INIT",A="FL:::/Kernel/KStart16.HC.Z,56"$ -$LK,"CH_CTRLN",A="FL:::/Kernel/KernelA.HH,3497"$ -$LK,"BDf_FMT",A="FL:::/Kernel/KernelA.HH,2655"$ -$LK,"CCF_KEEP_DOT",A="FL:::/Kernel/KernelA.HH,2134"$ -$LK,"Let2BlkDevType",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,161",BI=61$ -$LK,"CH_CTRLO",A="FL:::/Kernel/KernelA.HH,3498"$ -$LK,"ARGT_XMM",A="FL:::/Kernel/KernelA.HH,1939"$ -$LK,"DOCEf_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1099"$ -$LK,"DOCEf_WIN_REL",A="FL:::/Kernel/KernelA.HH,1086"$ -$LK,"DOCEF_WIN_REL",A="FL:::/Kernel/KernelA.HH,998"$ -$LK,"FifoI64Rem",A="FL:::/Kernel/KDataTypes.HC.Z,275",BI=62$ +$LK,"CH_CTRLN",A="FL:::/Kernel/KernelA.HH,3451"$ +$LK,"BDf_FMT",A="FL:::/Kernel/KernelA.HH,2642"$ +$LK,"CCF_KEEP_DOT",A="FL:::/Kernel/KernelA.HH,2121"$ +$LK,"Let2BlkDevType",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,172",BI=62$ +$LK,"CH_CTRLO",A="FL:::/Kernel/KernelA.HH,3452"$ +$LK,"ARGT_XMM",A="FL:::/Kernel/KernelA.HH,1926"$ +$LK,"DOCEf_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HH,1087"$ +$LK,"DOCEf_WIN_REL",A="FL:::/Kernel/KernelA.HH,1074"$ +$LK,"DOCEF_WIN_REL",A="FL:::/Kernel/KernelA.HH,986"$ +$LK,"FifoI64Rem",A="FL:::/Kernel/KDataTypes.HC.Z,275",BI=63$ $LK,"_D3_DIV",A="FL:::/Kernel/KMathA.HC.Z,184"$ -$LK,"CH_CTRLP",A="FL:::/Kernel/KernelA.HH,3499"$ -$LK,"chars_bmp_non_eol",A="FL:::/Kernel/StrA.HC.Z,396"$ -$LK,"PRTF_NEG",A="FL:::/Kernel/KernelA.HH,3923"$ -$LK,"CH_CTRLQ",A="FL:::/Kernel/KernelA.HH,3500"$ -$LK,"CTSS",A="FL:::/Kernel/KernelA.HH,3407"$ -$LK,"HomeSet",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,1",BI=63$ -$LK,"FileNameChk",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,249",BI=64$ +$LK,"CH_CTRLP",A="FL:::/Kernel/KernelA.HH,3453"$ +$LK,"ICF_ARG2_TO_INT",A="FL:::/Kernel/KernelA.HH,1582"$ +$LK,"PRTF_NEG",A="FL:::/Kernel/KernelA.HH,3878"$ +$LK,"CH_CTRLQ",A="FL:::/Kernel/KernelA.HH,3454"$ +$LK,"CTSS",A="FL:::/Kernel/KernelA.HH,3367"$ +$LK,"HomeSet",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,1",BI=64$ +$LK,"FileNameChk",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,249",BI=65$ $LK,"D3Mul",A="FL:::/Kernel/KernelB.HH,155"$ -$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HH,3501"$ +$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HH,3455"$ $LK,"SK_NAME",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,89"$ -$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.HC.Z,133",BI=65$ -$LK,"CallerRep",A="FL:::/Kernel/KDbg.HC.Z,152",BI=66$ -$LK,"CH_CTRLS",A="FL:::/Kernel/KernelA.HH,3502"$ -$LK,"ROP_EQU",A="FL:::/Kernel/KernelA.HH,2944"$ -$LK,"DOCEf_LST",A="FL:::/Kernel/KernelA.HH,1104"$ -$LK,"CtrlAltD",A="FL:::/Kernel/KeyDev.HC.Z,138",BI=67$ -$LK,"RandI64",A="FL:::/Kernel/KMathB.HC.Z,117",BI=68$ -$LK,"CH_CTRLT",A="FL:::/Kernel/KernelA.HH,3503"$ -$LK,"MBS_UNUSED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2859"$ -$LK,"CCmpGlbls",A="FL:::/Kernel/KernelA.HH,2214"$ -$LK,"RT_U32",A="FL:::/Kernel/KernelA.HH,1558"$ -$LK,"RT_U16",A="FL:::/Kernel/KernelA.HH,1556"$ -$LK,"CExternUsage",A="FL:::/Kernel/KernelA.HH,818"$ -$LK,"FAT32FreeClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,413",BI=69$ +$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.HC.Z,133",BI=66$ +$LK,"CallerRep",A="FL:::/Kernel/KDbg.HC.Z,152",BI=67$ +$LK,"CH_CTRLS",A="FL:::/Kernel/KernelA.HH,3456"$ +$LK,"ROP_EQU",A="FL:::/Kernel/KernelA.HH,2912"$ +$LK,"DOCEf_LST",A="FL:::/Kernel/KernelA.HH,1092"$ +$LK,"CtrlAltD",A="FL:::/Kernel/KeyDev.HC.Z,138",BI=68$ +$LK,"RandI64",A="FL:::/Kernel/KMathB.HC.Z,117",BI=69$ +$LK,"CH_CTRLT",A="FL:::/Kernel/KernelA.HH,3457"$ +$LK,"MBS_UNUSED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2827"$ +$LK,"CCmpGlbls",A="FL:::/Kernel/KernelA.HH,2201"$ +$LK,"RT_U32",A="FL:::/Kernel/KernelA.HH,1546"$ +$LK,"RT_U16",A="FL:::/Kernel/KernelA.HH,1544"$ +$LK,"CExternUsage",A="FL:::/Kernel/KernelA.HH,806"$ +$LK,"FAT32FreeClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,401",BI=70$ $LK,"sys_os_version",A="FL:::/Kernel/KGlbls.HC.Z,16"$ -$LK,"CH_CTRLU",A="FL:::/Kernel/KernelA.HH,3504"$ -$LK,"ARGT_MM32",A="FL:::/Kernel/KernelA.HH,1937"$ -$LK,"DOCSS_COMMENT",A="FL:::/Kernel/KernelA.HH,1132"$ -$LK,"CtrlAltF",A="FL:::/Kernel/KeyDev.HC.Z,148",BI=70$ -$LK,"ip_grid",A="FL:::/Kernel/KGlbls.HC.Z,24"$ -$LK,"CH_CTRLV",A="FL:::/Kernel/KernelA.HH,3505"$ -$LK,"CCodeMisc",A="FL:::/Kernel/KernelA.HH,1703"$ -$LK,"DOF_DONT_TEXT_ATTR",A="FL:::/Kernel/KernelA.HH,1220"$ -$LK,"DOCEf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1047"$ -$LK,"DOCEF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1041"$ -$LK,"DrvFATBlkSet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,117",BI=71$ -$LK,"ISODrvInit",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,5",BI=72$ -$LK,"CH_CTRLW",A="FL:::/Kernel/KernelA.HH,3506"$ -$LK,"FFB_NEXT_BLK",A="FL:::/Kernel/KernelA.HH,2780"$ +$LK,"CH_CTRLU",A="FL:::/Kernel/KernelA.HH,3458"$ +$LK,"ARGT_MM32",A="FL:::/Kernel/KernelA.HH,1924"$ +$LK,"WIf_SELF_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1428"$ +$LK,"DOCSS_COMMENT",A="FL:::/Kernel/KernelA.HH,1120"$ +$LK,"CtrlAltF",A="FL:::/Kernel/KeyDev.HC.Z,148",BI=71$ +$LK,"CH_CTRLV",A="FL:::/Kernel/KernelA.HH,3459"$ +$LK,"CCodeMisc",A="FL:::/Kernel/KernelA.HH,1690"$ +$LK,"DOF_DONT_TEXT_ATTR",A="FL:::/Kernel/KernelA.HH,1208"$ +$LK,"DOCEf_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1035"$ +$LK,"DOCEF_WORD_WRAP",A="FL:::/Kernel/KernelA.HH,1029"$ +$LK,"DrvFATBlkSet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,117",BI=72$ +$LK,"CH_CTRLW",A="FL:::/Kernel/KernelA.HH,3460"$ +$LK,"FFB_NEXT_BLK",A="FL:::/Kernel/KernelA.HH,2768"$ $LK,"ISO1FromName",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,28",BI=73$ $LK,"MPIntAll",A="FL:::/Kernel/MultiProc.HC.Z,149",BI=74$ $LK,"TaskContextRestore",A="FL:::/Kernel/Sched.HC.Z,283"$ -$LK,"SCf_ALT",A="FL:::/Kernel/KernelA.HH,3526"$ -$LK,"CH_CTRLX",A="FL:::/Kernel/KernelA.HH,3507"$ -$LK,"CH_CTRLY",A="FL:::/Kernel/KernelA.HH,3508"$ -$LK,"CDoc",A="FL:::/Kernel/KernelA.HH,1356"$ +$LK,"SCf_ALT",A="FL:::/Kernel/KernelA.HH,3479"$ +$LK,"CH_CTRLX",A="FL:::/Kernel/KernelA.HH,3461"$ +$LK,"CH_CTRLY",A="FL:::/Kernel/KernelA.HH,3462"$ +$LK,"CDoc",A="FL:::/Kernel/KernelA.HH,1344"$ $LK,"MemSetU8",A="FL:::/Kernel/KernelB.HH,178"$ $LK,"_FCLEX",A="FL:::/Kernel/KMathA.HC.Z,646"$ $LK,"_D3_DOT",A="FL:::/Kernel/KMathA.HC.Z,113"$ -$LK,"ARf_CSPRITE_INS_CLIPBOARD",A="FL:::/Kernel/KernelA.HH,3896"$ -$LK,"CH_CTRLZ",A="FL:::/Kernel/KernelA.HH,3509"$ -$LK,"MEM_NUM_2MEG",A="FL:::/Kernel/KernelA.HH,3465"$ -$LK,"CHashGeneric",A="FL:::/Kernel/KernelA.HH,734"$ +$LK,"MEM_NUM_2MEG",A="FL:::/Kernel/KStart32.HC.Z,10"$ +$LK,"ARf_CSPRITE_INS_CLIPBOARD",A="FL:::/Kernel/KernelA.HH,3851"$ +$LK,"CH_CTRLZ",A="FL:::/Kernel/KernelA.HH,3463"$ +$LK,"CHashGeneric",A="FL:::/Kernel/KernelA.HH,722"$ $LK,"SYS_FIND_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.HC.Z,8"$ -$LK,"CTRLF_CLICKED",A="FL:::/Kernel/KernelA.HH,3098"$ -$LK,"HTF_RESOLVE",A="FL:::/Kernel/KernelA.HH,708"$ +$LK,"CTRLF_CLICKED",A="FL:::/Kernel/KernelA.HH,3060"$ +$LK,"HTF_RESOLVE",A="FL:::/Kernel/KernelA.HH,696"$ $LK,"BCnt",A="FL:::/Kernel/KMisc.HC.Z,39",BI=75$ -$LK,"Mem64DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,131",BI=76$ -$LK,"Mem32DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,81",BI=77$ -$LK,"RT_U64",A="FL:::/Kernel/KernelA.HH,1561"$ -$LK,"DOCT_TAB",A="FL:::/Kernel/KernelA.HH,904"$ -$LK,"HTT_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,699"$ -$LK,"HTt_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,669"$ +$LK,"Mem64DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,108",BI=76$ +$LK,"Mem32DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,58",BI=77$ +$LK,"RT_U64",A="FL:::/Kernel/KernelA.HH,1549"$ +$LK,"DOCT_TAB",A="FL:::/Kernel/KernelA.HH,892"$ +$LK,"HTT_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,687"$ +$LK,"HTt_FRAME_PTR",A="FL:::/Kernel/KernelA.HH,657"$ $LK,"ISO1FilesFind",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,173",BI=78$ $LK,"CtrlAltM",A="FL:::/Kernel/KeyDev.HC.Z,153",BI=79$ $LK,"DefineLstLoad",A="FL:::/Kernel/KDefine.HC.Z,13",BI=80$ -$LK,"ARGT_MM64",A="FL:::/Kernel/KernelA.HH,1938"$ -$LK,"DOCEf_LEFT_CB",A="FL:::/Kernel/KernelA.HH,1072"$ -$LK,"DOCEF_LEFT_CB",A="FL:::/Kernel/KernelA.HH,984"$ +$LK,"ARGT_MM64",A="FL:::/Kernel/KernelA.HH,1925"$ +$LK,"DOCEf_LEFT_CB",A="FL:::/Kernel/KernelA.HH,1060"$ +$LK,"DOCEF_LEFT_CB",A="FL:::/Kernel/KernelA.HH,972"$ $LK,"RFLAGf_DIR",A="FL:::/Kernel/KernelA.HH,315"$ $LK,"ClusterNumNext",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,1",BI=81$ -$LK,"KbdMouseEvtTime",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,486",BI=82$ -$LK,"CtrlAltN",A="FL:::/Kernel/KeyDev.HC.Z,158",BI=83$ -$LK,"ip_last",A="FL:::/Kernel/KGlbls.HC.Z,25"$ -$LK,"C:/Doc/MultiCore.DD.Z",A="FL:::/Kernel/KernelB.HH,231"$ -$LK,"CDirEntry",A="FL:::/Kernel/KernelA.HH,2552"$ -$LK,"TK_STR",A="FL:::/Kernel/KernelA.HH,2072"$ -$LK,"ACD_DEF_END",A="FL:::/Kernel/KernelA.HH,1503"$ -$LK,"PROGRESS_DESC_LEN",A="FL:::/Kernel/KernelA.HH,3905"$ -$LK,"CCF_ASM_EXPRESSIONS",A="FL:::/Kernel/KernelA.HH,2145"$ +$LK,"CtrlAltN",A="FL:::/Kernel/KeyDev.HC.Z,158",BI=82$ +$LK,"C:/Doc/MultiCore.DD.Z",A="FL:::/Kernel/KernelB.HH,237"$ +$LK,"CDirEntry",A="FL:::/Kernel/KernelA.HH,2539"$ +$LK,"TK_STR",A="FL:::/Kernel/KernelA.HH,2059"$ +$LK,"ACD_DEF_END",A="FL:::/Kernel/KernelA.HH,1491"$ +$LK,"PROGRESS_DESC_LEN",A="FL:::/Kernel/KernelA.HH,3860"$ +$LK,"CCF_ASM_EXPRESSIONS",A="FL:::/Kernel/KernelA.HH,2132"$ $LK,"D3Sub",A="FL:::/Kernel/KernelB.HH,159"$ -$LK,"SC_CURSOR_RIGHT",A="FL:::/Kernel/KernelA.HH,3569"$ -$LK,"KeyDevAdd",A="FL:::/Kernel/KeyDev.HC.Z,70",BI=84$ -$LK,"CTRLF_BORDER",A="FL:::/Kernel/KernelA.HH,3095"$ +$LK,"SC_CURSOR_RIGHT",A="FL:::/Kernel/KernelA.HH,3522"$ +$LK,"KeyDevAdd",A="FL:::/Kernel/KeyDev.HC.Z,70",BI=83$ +$LK,"CTRLF_BORDER",A="FL:::/Kernel/KernelA.HH,3057"$ $LK,"_D3_EQU",A="FL:::/Kernel/KMathA.HC.Z,226"$ -$LK,"VGAP_ATTR_DATA_READ",A="FL:::/Kernel/KernelA.HH,3726"$ -$LK,"ATA_PACKET",A="FL:::/Kernel/KernelA.HH,2259"$ -$LK,"HTF_LOCAL",A="FL:::/Kernel/KernelA.HH,710"$ -$LK,"HTT_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,693"$ -$LK,"HTf_LOCAL",A="FL:::/Kernel/KernelA.HH,680"$ -$LK,"CtrlAltT",A="FL:::/Kernel/KeyDev.HC.Z,163",BI=85$ -$LK,"IsSilent",A="FL:::/Kernel/KMisc.HC.Z,240",BI=86$ -$LK,"CBpt",A="FL:::/Kernel/KernelA.HH,3160"$ -$LK,"HTt_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,663"$ -$LK,"PCIWriteU32",A="FL:::/Kernel/PCIBIOS.HC.Z,250",BI=87$ -$LK,"PCIWriteU16",A="FL:::/Kernel/PCIBIOS.HC.Z,235",BI=88$ -$LK,"CtrlAltV",A="FL:::/Kernel/KeyDev.HC.Z,168",BI=89$ -$LK,"CISO1DirEntry",A="FL:::/Kernel/KernelA.HH,2458"$ +$LK,"VGAP_ATTR_DATA_READ",A="FL:::/Kernel/KernelA.HH,3679"$ +$LK,"ATA_PACKET",A="FL:::/Kernel/KernelA.HH,2246"$ +$LK,"WIF_FOCUS_TASK_MS_R_D",A="FL:::/Kernel/KernelA.HH,1414"$ +$LK,"HTF_LOCAL",A="FL:::/Kernel/KernelA.HH,698"$ +$LK,"HTT_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,681"$ +$LK,"HTf_LOCAL",A="FL:::/Kernel/KernelA.HH,668"$ +$LK,"CtrlAltT",A="FL:::/Kernel/KeyDev.HC.Z,163",BI=84$ +$LK,"IsSilent",A="FL:::/Kernel/KMisc.HC.Z,256",BI=85$ +$LK,"CBpt",A="FL:::/Kernel/KernelA.HH,3122"$ +$LK,"HTt_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HH,651"$ +$LK,"PCIWriteU32",A="FL:::/Kernel/PCIBIOS.HC.Z,250",BI=86$ +$LK,"PCIWriteU16",A="FL:::/Kernel/PCIBIOS.HC.Z,235",BI=87$ +$LK,"CtrlAltV",A="FL:::/Kernel/KeyDev.HC.Z,168",BI=88$ +$LK,"VM_VMWARE",A="FL:::/Kernel/KernelA.HH,3891"$ +$LK,"CISO1DirEntry",A="FL:::/Kernel/KernelA.HH,2445"$ $LK,"_LXCHG_U8",A="FL:::/Kernel/KUtils.HC.Z,244"$ -$LK,"CtrlAltX",A="FL:::/Kernel/KeyDev.HC.Z,173",BI=90$ -$LK,"ChgDsk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,230",BI=91$ -$LK,"UserTaskCont",A="FL:::/Kernel/KTask.HC.Z,369",BI=92$ +$LK,"CtrlAltX",A="FL:::/Kernel/KeyDev.HC.Z,173",BI=89$ +$LK,"ChgDsk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,237",BI=90$ +$LK,"UserTaskCont",A="FL:::/Kernel/KTask.HC.Z,384",BI=91$ $LK,"RFLAGf_NESTED_TASK",A="FL:::/Kernel/KernelA.HH,319"$ $LK,"BEqu",A="FL:::/Kernel/KernelB.HH,28"$ -$LK,"ISO1T_PRI_VOL_DESC",A="FL:::/Kernel/KernelA.HH,2479"$ -$LK,"FAT32MkDir",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,933",BI=93$ -$LK,"DCS_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3649"$ -$LK,"ICF_USE_INT",A="FL:::/Kernel/KernelA.HH,1597"$ -$LK,"DOCT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,902"$ -$LK,"BIN_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,372"$ -$LK,"ARGT_IMM8",A="FL:::/Kernel/KernelA.HH,1882"$ +$LK,"ISO1T_PRI_VOL_DESC",A="FL:::/Kernel/KernelA.HH,2466"$ +$LK,"FAT32MkDir",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,921",BI=92$ +$LK,"DCS_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3602"$ +$LK,"ICF_USE_INT",A="FL:::/Kernel/KernelA.HH,1585"$ +$LK,"DOCT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,890"$ +$LK,"BIN_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,371"$ +$LK,"char_bmp_non_eol_white_space",A="FL:::/Kernel/StrA.HC.Z,359"$ +$LK,"ARGT_IMM8",A="FL:::/Kernel/KernelA.HH,1869"$ $LK,"SYS_HASH_SINGLE_TABLE_FIND1",A="FL:::/Kernel/KHashA.HC.Z,30"$ -$LK,"DOC_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,1345"$ -$LK,"DOCEF_INVERT",A="FL:::/Kernel/KernelA.HH,1043"$ +$LK,"CJob",A="FL:::/Kernel/KernelA.HH,3160"$ +$LK,"DOC_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,1333"$ +$LK,"DOCEF_INVERT",A="FL:::/Kernel/KernelA.HH,1031"$ $LK,"CDateStruct",A="FL:::/Kernel/KernelA.HH,193"$ -$LK,"CHashFun",A="FL:::/Kernel/KernelA.HH,857"$ -$LK,"SV_I_REG",A="FL:::/Kernel/KernelA.HH,1739"$ -$LK,"DOCEf_INVERT",A="FL:::/Kernel/KernelA.HH,1049"$ -$LK,"DayOfWeek",A="FL:::/Kernel/KDate.HC.Z,30",BI=94$ -$LK,"CDrv",A="FL:::/Kernel/KernelA.HH,2720"$ -$LK,"TK_MINUS_MINUS",A="FL:::/Kernel/KernelA.HH,2077"$ -$LK,"DOCT_LST",A="FL:::/Kernel/KernelA.HH,933"$ -$LK,"JobResGet",A="FL:::/Kernel/SrvCmd.HC.Z,198",BI=95$ -$LK,"sys_heap_init_flag",A="FL:::/Kernel/KernelB.HH,181"$ -$LK,"FUF_CANCEL",A="FL:::/Kernel/KernelA.HH,2600"$ -$LK,"FUf_CANCEL",A="FL:::/Kernel/KernelA.HH,2573"$ +$LK,"CHashFun",A="FL:::/Kernel/KernelA.HH,845"$ +$LK,"JOBf_ADD_TO_QUE",A="FL:::/Kernel/KernelA.HH,3151"$ +$LK,"SV_I_REG",A="FL:::/Kernel/KernelA.HH,1726"$ +$LK,"DOCEf_INVERT",A="FL:::/Kernel/KernelA.HH,1037"$ +$LK,"DayOfWeek",A="FL:::/Kernel/KDate.HC.Z,30",BI=93$ +$LK,"CDrv",A="FL:::/Kernel/KernelA.HH,2707"$ +$LK,"TK_MINUS_MINUS",A="FL:::/Kernel/KernelA.HH,2064"$ +$LK,"DOCT_LST",A="FL:::/Kernel/KernelA.HH,921"$ +$LK,"JobResGet",A="FL:::/Kernel/Job.HC.Z,199",BI=94$ +$LK,"sys_heap_init_flag",A="FL:::/Kernel/KernelB.HH,180"$ +$LK,"FUF_CANCEL",A="FL:::/Kernel/KernelA.HH,2587"$ +$LK,"FUf_CANCEL",A="FL:::/Kernel/KernelA.HH,2560"$ $LK,"FALSE",A="FL:::/Kernel/KernelA.HH,21"$ -$LK,"VGAP_REG_READ",A="FL:::/Kernel/KernelA.HH,3731"$ -$LK,"SVCf_ADD_TO_QUE",A="FL:::/Kernel/KernelA.HH,3189"$ -$LK,"CUAsmGlbls",A="FL:::/Kernel/KernelA.HH,2229"$ -$LK,"TK_ADD_EQU",A="FL:::/Kernel/KernelA.HH,2096"$ -$LK,"TK_XOR_EQU",A="FL:::/Kernel/KernelA.HH,2095"$ -$LK,"StrPrintHex",A="FL:::/Kernel/StrA.HC.Z,1",BI=96$ +$LK,"VGAP_REG_READ",A="FL:::/Kernel/KernelA.HH,3684"$ +$LK,"CUAsmGlbls",A="FL:::/Kernel/KernelA.HH,2216"$ +$LK,"TK_ADD_EQU",A="FL:::/Kernel/KernelA.HH,2083"$ +$LK,"TK_XOR_EQU",A="FL:::/Kernel/KernelA.HH,2082"$ +$LK,"StrPrintHex",A="FL:::/Kernel/StrA.HC.Z,1",BI=95$ $LK,"_D3_ADD_EQU",A="FL:::/Kernel/KMathA.HC.Z,239"$ -$LK,"DRV_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2719"$ -$LK,"DOCT_PMT",A="FL:::/Kernel/KernelA.HH,908"$ -$LK,"Cf_EXTERN",A="FL:::/Kernel/KernelA.HH,831"$ -$LK,"HPET_GCAP_ID",A="FL:::/Kernel/KernelA.HH,534"$ +$LK,"DRV_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2706"$ +$LK,"DOCT_PMT",A="FL:::/Kernel/KernelA.HH,896"$ +$LK,"Cf_EXTERN",A="FL:::/Kernel/KernelA.HH,819"$ +$LK,"HPET_GCAP_ID",A="FL:::/Kernel/KernelA.HH,537"$ $LK,"ATan",A="FL:::/Kernel/KernelB.HH,95"$ -$LK,"MEM_NUM_512GIG",A="FL:::/Kernel/KernelA.HH,3468"$ -$LK,"SysBadFree",A="FL:::/Kernel/Mem/Mem512.HC.Z,1",BI=97$ -$LK,"ATA_ID_DEV",A="FL:::/Kernel/KernelA.HH,2268"$ -$LK,"CHashReg",A="FL:::/Kernel/KernelA.HH,749"$ -$LK,"SCf_INS",A="FL:::/Kernel/KernelA.HH,3534"$ -$LK,"LAPIC_LVT_ERR",A="FL:::/Kernel/KernelA.HH,504"$ -$LK,"Scale2Mem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,192",BI=98$ -$LK,"Mem512TaskFree",A="FL:::/Kernel/Mem/Mem512.HC.Z,154",BI=99$ -$LK,"RandU32",A="FL:::/Kernel/KMathB.HC.Z,107",BI=100$ -$LK,"RandU16",A="FL:::/Kernel/KMathB.HC.Z,87",BI=101$ +$LK,"MEM_NUM_512GIG",A="FL:::/Kernel/KStart32.HC.Z,12"$ +$LK,"SysBadFree",A="FL:::/Kernel/Mem/MemPag.HC.Z,1",BI=96$ +$LK,"ATA_ID_DEV",A="FL:::/Kernel/KernelA.HH,2255"$ +$LK,"CHashReg",A="FL:::/Kernel/KernelA.HH,737"$ +$LK,"SCf_INS",A="FL:::/Kernel/KernelA.HH,3487"$ +$LK,"LAPIC_LVT_ERR",A="FL:::/Kernel/KernelA.HH,507"$ +$LK,"Scale2Mem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,169",BI=97$ +$LK,"RandU32",A="FL:::/Kernel/KMathB.HC.Z,107",BI=98$ +$LK,"RandU16",A="FL:::/Kernel/KMathB.HC.Z,87",BI=99$ $LK,"_FLDCW",A="FL:::/Kernel/KMathA.HC.Z,625"$ -$LK,"__DIR__",A="FL:::/Kernel/KernelA.HH,2031"$ -$LK,"ARGT_RM32",A="FL:::/Kernel/KernelA.HH,1899"$ -$LK,"ARGT_RM16",A="FL:::/Kernel/KernelA.HH,1898"$ +$LK,"__DIR__",A="FL:::/Kernel/KernelA.HH,2018"$ +$LK,"ARGT_RM32",A="FL:::/Kernel/KernelA.HH,1886"$ +$LK,"ARGT_RM16",A="FL:::/Kernel/KernelA.HH,1885"$ $LK,"RFLAGf_INT",A="FL:::/Kernel/KernelA.HH,314"$ -$LK,"WIf_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1443"$ -$LK,"WIF_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1417"$ -$LK,"MLF_STATIC",A="FL:::/Kernel/KernelA.HH,781"$ -$LK,"ChgExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,203",BI=102$ +$LK,"WIf_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1431"$ +$LK,"WIF_SELF_DOC",A="FL:::/Kernel/KernelA.HH,1405"$ +$LK,"MLF_STATIC",A="FL:::/Kernel/KernelA.HH,769"$ +$LK,"ChgExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,203",BI=100$ $LK,"str2color_lst",A="FL:::/Kernel/KDefine.HC.Z,156"$ $LK,"local_time_offset",A="FL:::/Kernel/KGlbls.HC.Z,14"$ -$LK,"RedSeaFilesFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,539",BI=103$ -$LK,"TK_INS_BIN",A="FL:::/Kernel/KernelA.HH,2108"$ +$LK,"RedSeaFilesFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,539",BI=101$ +$LK,"TK_INS_BIN",A="FL:::/Kernel/KernelA.HH,2095"$ $LK,"_D3_MUL",A="FL:::/Kernel/KMathA.HC.Z,167"$ -$LK,"ISO1_BASE_YEAR",A="FL:::/Kernel/KernelA.HH,2521"$ -$LK,"TK_ELSE",A="FL:::/Kernel/KernelA.HH,2104"$ -$LK,"RandU64",A="FL:::/Kernel/KMathB.HC.Z,127",BI=104$ -$LK,"PostMsgWait",A="FL:::/Kernel/SrvCmd.HC.Z,252",BI=105$ -$LK,"UndefinedDefine",A="FL:::/Kernel/KDefine.HC.Z,43",BI=106$ -$LK,"ARGT_RM64",A="FL:::/Kernel/KernelA.HH,1900"$ -$LK,"ATAGetRes",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,67",BI=107$ -$LK,"ATAWaitDRQ",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,36",BI=108$ -$LK,"TaskInit",A="FL:::/Kernel/KTask.HC.Z,167",BI=109$ -$LK,"DOCEf_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,1074"$ -$LK,"DOCEF_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,986"$ -$LK,"HTT_DICT_WORD",A="FL:::/Kernel/KernelA.HH,691"$ -$LK,"HTt_DICT_WORD",A="FL:::/Kernel/KernelA.HH,661"$ -$LK,"RLf_MP",A="FL:::/Kernel/KernelA.HH,449"$ -$LK,"PRTF_DOLLAR",A="FL:::/Kernel/KernelA.HH,3918"$ +$LK,"ISO1_BASE_YEAR",A="FL:::/Kernel/KernelA.HH,2508"$ +$LK,"TK_ELSE",A="FL:::/Kernel/KernelA.HH,2091"$ +$LK,"RandU64",A="FL:::/Kernel/KMathB.HC.Z,127",BI=102$ +$LK,"PostMsgWait",A="FL:::/Kernel/Job.HC.Z,253",BI=103$ +$LK,"UndefinedDefine",A="FL:::/Kernel/KDefine.HC.Z,43",BI=104$ +$LK,"ARGT_RM64",A="FL:::/Kernel/KernelA.HH,1887"$ +$LK,"ATAGetRes",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,67",BI=105$ +$LK,"ATAWaitDRQ",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,36",BI=106$ +$LK,"TaskInit",A="FL:::/Kernel/KTask.HC.Z,182",BI=107$ +$LK,"DOCEf_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,1062"$ +$LK,"DOCEF_RIGHT_CB",A="FL:::/Kernel/KernelA.HH,974"$ +$LK,"HTT_DICT_WORD",A="FL:::/Kernel/KernelA.HH,679"$ +$LK,"HTt_DICT_WORD",A="FL:::/Kernel/KernelA.HH,649"$ +$LK,"RLf_MP",A="FL:::/Kernel/KernelA.HH,451"$ +$LK,"PRTF_DOLLAR",A="FL:::/Kernel/KernelA.HH,3873"$ $LK,"CSpring",A="FL:::/Kernel/KernelA.HH,227"$ -$LK,"CBGR24",A="FL:::/Kernel/KernelA.HH,2992"$ -$LK,"FONT_WIDTH",A="FL:::/Kernel/KernelA.HH,3610"$ -$LK,"CHeapCtrl",A="FL:::/Kernel/KernelA.HH,2909"$ -$LK,"LastDayOfYear",A="FL:::/Kernel/KDate.HC.Z,110",BI=110$ +$LK,"CBGR24",A="FL:::/Kernel/KernelA.HH,2960"$ +$LK,"FONT_WIDTH",A="FL:::/Kernel/KernelA.HH,3563"$ +$LK,"CHeapCtrl",A="FL:::/Kernel/KernelA.HH,2877"$ +$LK,"LastDayOfYear",A="FL:::/Kernel/KDate.HC.Z,110",BI=108$ $LK,"SYS_IDLE_PT",A="FL:::/Kernel/Sched.HC.Z,204"$ -$LK,"mp_cnt_initial",A="FL:::/Kernel/KernelB.HH,233"$ -$LK,"STD_DISTRO_DVD_CFG",A="FL:::/Kernel/KernelA.HH,3891"$ -$LK,"CAbsCntsI64",A="FL:::/Kernel/KernelA.HH,1804"$ -$LK,"Core0StartMP",A="FL:::/Kernel/MultiProc.HC.Z,284",BI=111$ +$LK,"mp_cnt_initial",A="FL:::/Kernel/KernelB.HH,239"$ +$LK,"STD_DISTRO_DVD_CFG",A="FL:::/Kernel/KernelA.HH,3846"$ +$LK,"OS_WINDOWS",A="FL:::/Kernel/KernelA.HH,3887"$ +$LK,"CAbsCntsI64",A="FL:::/Kernel/KernelA.HH,1791"$ +$LK,"Core0StartMP",A="FL:::/Kernel/MultiProc.HC.Z,283",BI=109$ $LK,"_D3_SUB",A="FL:::/Kernel/KMathA.HC.Z,149"$ -$LK,"CBGR48",A="FL:::/Kernel/KernelA.HH,2996"$ -$LK,"DOCEF_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,1005"$ -$LK,"IntCore0TimerHandler",A="FL:::/Kernel/KMisc.HC.Z,47",BI=112$ -$LK,"__DATE__",A="FL:::/Kernel/KernelA.HH,2023"$ -$LK,"chars_bmp_safe_dollar",A="FL:::/Kernel/StrA.HC.Z,391"$ -$LK,"AdamErr",A="FL:::/Kernel/SrvCmd.HC.Z,435",BI=113$ -$LK,"sys_focus_task",A="FL:::/Kernel/KernelB.HH,197"$ -$LK,"DOCEf_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,1093"$ -$LK,"HTT_MODULE",A="FL:::/Kernel/KernelA.HH,697"$ -$LK,"HTt_MODULE",A="FL:::/Kernel/KernelA.HH,667"$ -$LK,"SVCf_HIGHEST_PRIORITY",A="FL:::/Kernel/KernelA.HH,3184"$ -$LK,"ARGT_REL8",A="FL:::/Kernel/KernelA.HH,1878"$ -$LK,"GridInit",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,1",BI=114$ -$LK,"FirstDayOfYear",A="FL:::/Kernel/KDate.HC.Z,98",BI=115$ -$LK,"CCf_PMT",A="FL:::/Kernel/KernelA.HH,2127"$ -$LK,"ACD_EXTRA",A="FL:::/Kernel/KernelA.HH,1508"$ -$LK,"WIf_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1444"$ -$LK,"WIF_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1418"$ -$LK,"MLF_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,775"$ +$LK,"CBGR48",A="FL:::/Kernel/KernelA.HH,2964"$ +$LK,"DOCEF_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,993"$ +$LK,"__DATE__",A="FL:::/Kernel/KernelA.HH,2010"$ +$LK,"AdamErr",A="FL:::/Kernel/Job.HC.Z,433",BI=110$ +$LK,"sys_focus_task",A="FL:::/Kernel/KernelB.HH,199"$ +$LK,"DOCEf_BORDER_PLOT",A="FL:::/Kernel/KernelA.HH,1081"$ +$LK,"HTT_MODULE",A="FL:::/Kernel/KernelA.HH,685"$ +$LK,"HTt_MODULE",A="FL:::/Kernel/KernelA.HH,655"$ +$LK,"ARGT_REL8",A="FL:::/Kernel/KernelA.HH,1865"$ +$LK,"GridInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,1",BI=111$ +$LK,"FirstDayOfYear",A="FL:::/Kernel/KDate.HC.Z,98",BI=112$ +$LK,"CCf_PMT",A="FL:::/Kernel/KernelA.HH,2114"$ +$LK,"ACD_EXTRA",A="FL:::/Kernel/KernelA.HH,1496"$ +$LK,"WIf_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1432"$ +$LK,"WIF_SELF_ODE",A="FL:::/Kernel/KernelA.HH,1406"$ +$LK,"MLF_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,763"$ $LK,"COREAP_16BIT_INIT",A="FL:::/Kernel/MultiProc.HC.Z,9"$ -$LK,"SCf_NUM",A="FL:::/Kernel/KernelA.HH,3528"$ -$LK,"RS_ATTR_RESIDENT",A="FL:::/Kernel/KernelA.HH,2536"$ -$LK,"Dbg2",A="FL:::/Kernel/KDbg.HC.Z,533",BI=116$ -$LK,"HashSrcFileSet",A="FL:::/Kernel/KHashB.HC.Z,154",BI=117$ -$LK,"ROP_XOR",A="FL:::/Kernel/KernelA.HH,2945"$ +$LK,"SCf_NUM",A="FL:::/Kernel/KernelA.HH,3481"$ +$LK,"MSG_MS_MOVE",A="FL:::/Kernel/KernelA.HH,3191"$ +$LK,"RS_ATTR_RESIDENT",A="FL:::/Kernel/KernelA.HH,2523"$ +$LK,"Dbg2",A="FL:::/Kernel/KDbg.HC.Z,533",BI=113$ +$LK,"HashSrcFileSet",A="FL:::/Kernel/KHashB.HC.Z,154",BI=114$ +$LK,"ROP_XOR",A="FL:::/Kernel/KernelA.HH,2913"$ $LK,"NULL",A="FL:::/Kernel/KernelA.HH,19"$ -$LK,"BlkPoolInit",A="FL:::/Kernel/Mem/BlkPool.HC.Z,18",BI=118$ -$LK,"BDF_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2647"$ -$LK,"ProgressBarsRst",A="FL:::/Kernel/KMisc.HC.Z,287",BI=119$ +$LK,"BlkPoolInit",A="FL:::/Kernel/Mem/BlkPool.HC.Z,18",BI=115$ +$LK,"BDF_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2634"$ +$LK,"ProgressBarsRst",A="FL:::/Kernel/KMisc.HC.Z,303",BI=116$ $LK,"sys_boot_blk",A="FL:::/Kernel/KernelB.HH,38"$ -$LK,"TASKf_PENDING_BREAK",A="FL:::/Kernel/KernelA.HH,3292"$ -$LK,"BDf_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2657"$ -$LK,"RedSeaAllocClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,302",BI=120$ +$LK,"TASKf_PENDING_BREAK",A="FL:::/Kernel/KernelA.HH,3252"$ +$LK,"BDf_EXT_SIZE",A="FL:::/Kernel/KernelA.HH,2644"$ +$LK,"RedSeaAllocClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,302",BI=117$ +$LK,"JOBT_SPAWN_TASK",A="FL:::/Kernel/KernelA.HH,3158"$ $LK,"CQue",A="FL:::/Kernel/KernelA.HH,122"$ -$LK,"MEM_ADAM_STK",A="FL:::/Kernel/KernelA.HH,2886"$ -$LK,"DOCEF_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,1009"$ -$LK,"AdamLog",A="FL:::/Kernel/SrvCmd.HC.Z,425",BI=121$ -$LK,"TASKf_KILL_TASK",A="FL:::/Kernel/KernelA.HH,3282"$ -$LK,"ACD_H1",A="FL:::/Kernel/KernelA.HH,1500"$ -$LK,"Ff_RET1",A="FL:::/Kernel/KernelA.HH,855"$ -$LK,"SVCT_SPAWN_TASK",A="FL:::/Kernel/KernelA.HH,3196"$ -$LK,"RS_ATTR_ARCHIVE",A="FL:::/Kernel/KernelA.HH,2531"$ -$LK,"DOCEf_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,1097"$ -$LK,"EXT_DBG_RESUME",A="FL:::/Kernel/KernelA.HH,580"$ -$LK,"FSt_FAT32",A="FL:::/Kernel/KernelA.HH,2690"$ -$LK,"OPTf_WARN_PAREN",A="FL:::/Kernel/KernelA.HH,1536"$ -$LK,"TaskStkNew",A="FL:::/Kernel/KTask.HC.Z,85",BI=122$ -$LK,"RT_PTR",A="FL:::/Kernel/KernelA.HH,1560"$ -$LK,"HashTableDel",A="FL:::/Kernel/KHashB.HC.Z,90",BI=123$ +$LK,"MEM_ADAM_STK",A="FL:::/Kernel/KernelA.HH,2854"$ +$LK,"DOCEF_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,997"$ +$LK,"AdamLog",A="FL:::/Kernel/Job.HC.Z,423",BI=118$ +$LK,"TASKf_KILL_TASK",A="FL:::/Kernel/KernelA.HH,3242"$ +$LK,"ACD_H1",A="FL:::/Kernel/KernelA.HH,1488"$ +$LK,"Ff_RET1",A="FL:::/Kernel/KernelA.HH,843"$ +$LK,"RS_ATTR_ARCHIVE",A="FL:::/Kernel/KernelA.HH,2518"$ +$LK,"DOCEf_UPDATE_DATA",A="FL:::/Kernel/KernelA.HH,1085"$ +$LK,"EXT_DBG_RESUME",A="FL:::/Kernel/KernelA.HH,583"$ +$LK,"MSG_MS_R_D_DOWN",A="FL:::/Kernel/KernelA.HH,3198"$ +$LK,"FSt_FAT32",A="FL:::/Kernel/KernelA.HH,2677"$ +$LK,"OPTf_WARN_PAREN",A="FL:::/Kernel/KernelA.HH,1524"$ +$LK,"TaskStkNew",A="FL:::/Kernel/KTask.HC.Z,100",BI=119$ +$LK,"RT_PTR",A="FL:::/Kernel/KernelA.HH,1548"$ +$LK,"HashTableDel",A="FL:::/Kernel/KHashB.HC.Z,90",BI=120$ $LK,"LBtc",A="FL:::/Kernel/KernelB.HH,22"$ -$LK,"FUF_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2615"$ +$LK,"FUF_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2602"$ +$LK,"char_bmp_zero_tab_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,365"$ $LK,"ClampI64",A="FL:::/Kernel/KernelB.HH,125"$ -$LK,"FUf_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2588"$ -$LK,"B2",A="FL:::/Kernel/KDbg.HC.Z,422",BI=124$ +$LK,"FUf_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HH,2575"$ +$LK,"B2",A="FL:::/Kernel/KDbg.HC.Z,422",BI=121$ $LK,"SLOP",A="FL:::/Kernel/StrPrint.HC.Z,206"$ -$LK,"FF_BUF_DIRTY",A="FL:::/Kernel/KernelA.HH,2784"$ -$LK,"ICF_SWAP",A="FL:::/Kernel/KernelA.HH,1609"$ +$LK,"FF_BUF_DIRTY",A="FL:::/Kernel/KernelA.HH,2772"$ +$LK,"ICF_SWAP",A="FL:::/Kernel/KernelA.HH,1597"$ $LK,"_STRMATCH",A="FL:::/Kernel/StrA.HC.Z,223"$ $LK,"MSF_FIXED",A="FL:::/Kernel/KernelA.HH,208"$ +$LK,"MEM_HEAP_BASE",A="FL:::/Kernel/KStart32.HC.Z,6"$ $LK,"_CPUID",A="FL:::/Kernel/KUtils.HC.Z,319"$ -$LK,"SYS_HEAP_BASE",A="FL:::/Kernel/KStart32.HC.Z,6"$ $LK,"_LBEQU",A="FL:::/Kernel/KUtils.HC.Z,104"$ -$LK,"Caller",A="FL:::/Kernel/KDbg.HC.Z,60",BI=125$ -$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HH,3794"$ -$LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HH,2258"$ +$LK,"Caller",A="FL:::/Kernel/KDbg.HC.Z,60",BI=122$ +$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HH,3747"$ +$LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HH,2245"$ $LK,"INT_MP_CRASH_ADDR",A="FL:::/Kernel/KInts.HC.Z,2"$ -$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HH,3596"$ -$LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2538"$ -$LK,"HPET_MAIN_CNT",A="FL:::/Kernel/KernelA.HH,536"$ -$LK,"ARGT_NONE",A="FL:::/Kernel/KernelA.HH,1877"$ -$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HH,931"$ -$LK,"SUF_T2S",A="FL:::/Kernel/KernelA.HH,3795"$ -$LK,"MEM_MIN_MEG",A="FL:::/Kernel/KernelA.HH,3463"$ +$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HH,3549"$ +$LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2525"$ +$LK,"HPET_MAIN_CNT",A="FL:::/Kernel/KernelA.HH,539"$ +$LK,"ARGT_NONE",A="FL:::/Kernel/KernelA.HH,1864"$ +$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HH,919"$ +$LK,"SUF_T2S",A="FL:::/Kernel/KernelA.HH,3748"$ +$LK,"MEM_MIN_MEG",A="FL:::/Kernel/KernelA.HH,3423"$ $LK,"exp_1",A="FL:::/Kernel/KernelA.HH,52"$ $LK,"CTRL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,15"$ -$LK,"KeyDevRem",A="FL:::/Kernel/KeyDev.HC.Z,64",BI=126$ -$LK,"G2",A="FL:::/Kernel/KDbg.HC.Z,469",BI=127$ -$LK,"DOCEG_HAS_ARG",A="FL:::/Kernel/KernelA.HH,1032"$ -$LK,"TSSNew",A="FL:::/Kernel/MultiProc.HC.Z,76",BI=128$ -$LK,"SYS_PROGRESS1_DESC",A="FL:::/Kernel/KStart32.HC.Z,34"$ +$LK,"KeyDevRem",A="FL:::/Kernel/KeyDev.HC.Z,64",BI=123$ +$LK,"G2",A="FL:::/Kernel/KDbg.HC.Z,469",BI=124$ +$LK,"DOCEG_HAS_ARG",A="FL:::/Kernel/KernelA.HH,1020"$ +$LK,"TSSNew",A="FL:::/Kernel/MultiProc.HC.Z,76",BI=125$ +$LK,"SYS_PROGRESS1_DESC",A="FL:::/Kernel/KStart32.HC.Z,45"$ $LK,"LBtr",A="FL:::/Kernel/KernelB.HH,24"$ -$LK,"FStf_DISABLE",A="FL:::/Kernel/KernelA.HH,2699"$ -$LK,"HTT_OPCODE",A="FL:::/Kernel/KernelA.HH,694"$ -$LK,"HTt_OPCODE",A="FL:::/Kernel/KernelA.HH,664"$ +$LK,"FStf_DISABLE",A="FL:::/Kernel/KernelA.HH,2686"$ +$LK,"HTT_OPCODE",A="FL:::/Kernel/KernelA.HH,682"$ +$LK,"HTt_OPCODE",A="FL:::/Kernel/KernelA.HH,652"$ $LK,"CDATE_YEAR_DAYS_INT",A="FL:::/Kernel/KernelA.HH,184"$ -$LK,"FAT32AllocContiguousClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,514",BI=129$ +$LK,"FAT32AllocContiguousClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,502",BI=126$ $LK,"LBts",A="FL:::/Kernel/KernelB.HH,26"$ $LK,"ArcEntryGet",A="FL:::/Kernel/Compress.HC.Z,100"$ $LK,"_LOG10",A="FL:::/Kernel/KMathA.HC.Z,592"$ -$LK,"Adam",A="FL:::/Kernel/SrvCmd.HC.Z,408",BI=130$ +$LK,"Adam",A="FL:::/Kernel/Job.HC.Z,406",BI=127$ $LK,"CTryStk",A="FL:::/Kernel/KExcept.HC.Z,56"$ -$LK,"DCF_PALETTE",A="FL:::/Kernel/KernelA.HH,3625"$ +$LK,"DCF_PALETTE",A="FL:::/Kernel/KernelA.HH,3578"$ $LK,"set_bits_table",A="FL:::/Kernel/KGlbls.HC.Z,13"$ $LK,"rev_bits_table",A="FL:::/Kernel/KGlbls.HC.Z,12"$ -$LK,"KBD_CTRL",A="FL:::/Kernel/KernelA.HH,3003"$ -$LK,"HTt_FUN",A="FL:::/Kernel/KernelA.HH,659"$ -$LK,"RS_ATTR_LONG_NAME",A="FL:::/Kernel/KernelA.HH,2532"$ -$LK,"TK_XOR_XOR",A="FL:::/Kernel/KernelA.HH,2088"$ -$LK,"DOCEf_HOLD",A="FL:::/Kernel/KernelA.HH,1102"$ -$LK,"DOCEF_HOLD",A="FL:::/Kernel/KernelA.HH,1016"$ -$LK,"KDInputFilterPutKey",A="FL:::/Kernel/KeyDev.HC.Z,108",BI=131$ -$LK,"GetOutOfDollar",A="FL:::/Kernel/StrB.HC.Z,75",BI=132$ -$LK,"DOC_COLOR_ALT_TEXT",A="FL:::/Kernel/KernelA.HH,1136"$ -$LK,"MBR_PT_FAT32a",A="FL:::/Kernel/KernelA.HH,2702"$ -$LK,"DbgHelp",A="FL:::/Kernel/KDbg.HC.Z,498",BI=133$ +$LK,"KBD_CTRL",A="FL:::/Kernel/KernelA.HH,2971"$ +$LK,"HTt_FUN",A="FL:::/Kernel/KernelA.HH,647"$ +$LK,"JobCtrlInit",A="FL:::/Kernel/Job.HC.Z,18",BI=128$ +$LK,"RS_ATTR_LONG_NAME",A="FL:::/Kernel/KernelA.HH,2519"$ +$LK,"TK_XOR_XOR",A="FL:::/Kernel/KernelA.HH,2075"$ +$LK,"DOCEf_HOLD",A="FL:::/Kernel/KernelA.HH,1090"$ +$LK,"DOCEF_HOLD",A="FL:::/Kernel/KernelA.HH,1004"$ +$LK,"KDInputFilterPutKey",A="FL:::/Kernel/KeyDev.HC.Z,108",BI=129$ +$LK,"GetOutOfDollar",A="FL:::/Kernel/StrB.HC.Z,75",BI=130$ +$LK,"MEM_PAG_SIZE",A="FL:::/Kernel/KernelA.HH,2847"$ +$LK,"DOC_COLOR_ALT_TEXT",A="FL:::/Kernel/KernelA.HH,1124"$ +$LK,"MBR_PT_FAT32a",A="FL:::/Kernel/KernelA.HH,2689"$ +$LK,"DbgHelp",A="FL:::/Kernel/KDbg.HC.Z,498",BI=131$ $LK,"_FLOOR",A="FL:::/Kernel/KMathA.HC.Z,420"$ -$LK,"MBR_PT_FAT32b",A="FL:::/Kernel/KernelA.HH,2703"$ -$LK,"MBR_PT_FAT32c",A="FL:::/Kernel/KernelA.HH,2704"$ +$LK,"MBR_PT_FAT32b",A="FL:::/Kernel/KernelA.HH,2690"$ +$LK,"MBR_PT_FAT32c",A="FL:::/Kernel/KernelA.HH,2691"$ $LK,"D3Dist",A="FL:::/Kernel/KernelB.HH,149"$ -$LK,"MBR_PT_FAT32d",A="FL:::/Kernel/KernelA.HH,2705"$ -$LK,"TK_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,2109"$ -$LK,"LMF_EXACT",A="FL:::/Kernel/KernelA.HH,3807"$ -$LK,"MBR_PT_FAT32e",A="FL:::/Kernel/KernelA.HH,2706"$ -$LK,"FSt_NTFS",A="FL:::/Kernel/KernelA.HH,2694"$ -$LK,"MBR_PT_FAT32f",A="FL:::/Kernel/KernelA.HH,2707"$ -$LK,"CM_MAX_CONSTS",A="FL:::/Kernel/KernelA.HH,1701"$ -$LK,"DOCEF_TAG_CB",A="FL:::/Kernel/KernelA.HH,995"$ -$LK,"Str2Date",A="FL:::/Kernel/StrScan.HC.Z,138",BI=134$ -$LK,"ICF_PASS_TRACE",A="FL:::/Kernel/KernelA.HH,1603"$ -$LK,"DOCEf_TAG_CB",A="FL:::/Kernel/KernelA.HH,1083"$ -$LK,"HTt_REG",A="FL:::/Kernel/KernelA.HH,665"$ -$LK,"ChkPtr",A="FL:::/Kernel/KDbg.HC.Z,1",BI=135$ -$LK,"TaskWait",A="FL:::/Kernel/SrvCmd.HC.Z,220",BI=136$ -$LK,"_R10",A="FL:::/Kernel/KernelA.HH,3432"$ +$LK,"MBR_PT_FAT32d",A="FL:::/Kernel/KernelA.HH,2692"$ +$LK,"TK_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,2096"$ +$LK,"LMF_EXACT",A="FL:::/Kernel/KernelA.HH,3760"$ +$LK,"MBR_PT_FAT32e",A="FL:::/Kernel/KernelA.HH,2693"$ +$LK,"FSt_NTFS",A="FL:::/Kernel/KernelA.HH,2681"$ +$LK,"char_bmp_alpha_numeric",A="FL:::/Kernel/StrA.HC.Z,330"$ +$LK,"MBR_PT_FAT32f",A="FL:::/Kernel/KernelA.HH,2694"$ +$LK,"CM_MAX_CONSTS",A="FL:::/Kernel/KernelA.HH,1688"$ +$LK,"DOCEF_TAG_CB",A="FL:::/Kernel/KernelA.HH,983"$ +$LK,"Str2Date",A="FL:::/Kernel/StrScan.HC.Z,138",BI=132$ +$LK,"ICF_PASS_TRACE",A="FL:::/Kernel/KernelA.HH,1591"$ +$LK,"DOCEf_TAG_CB",A="FL:::/Kernel/KernelA.HH,1071"$ +$LK,"HTt_REG",A="FL:::/Kernel/KernelA.HH,653"$ +$LK,"ChkPtr",A="FL:::/Kernel/KDbg.HC.Z,1",BI=133$ +$LK,"TaskWait",A="FL:::/Kernel/Job.HC.Z,221",BI=134$ +$LK,"SCF_MS_R_DOWN",A="FL:::/Kernel/KernelA.HH,3500"$ +$LK,"SCf_MS_R_DOWN",A="FL:::/Kernel/KernelA.HH,3485"$ +$LK,"_R10",A="FL:::/Kernel/KernelA.HH,3392"$ +$LK,"MSG_MS_R_DOWN",A="FL:::/Kernel/KernelA.HH,3196"$ $LK,"SYS_MEM_INIT_VAL",A="FL::/Tmp.DD.Z,1"$ -$LK,"_R11",A="FL:::/Kernel/KernelA.HH,3433"$ -$LK,"BOOT_RAM_LIMIT",A="FL:::/Kernel/KernelA.HH,3881"$ -$LK,"_R12",A="FL:::/Kernel/KernelA.HH,3434"$ +$LK,"_R11",A="FL:::/Kernel/KernelA.HH,3393"$ +$LK,"BOOT_RAM_LIMIT",A="FL:::/Kernel/KernelA.HH,3836"$ +$LK,"_R12",A="FL:::/Kernel/KernelA.HH,3394"$ $LK,"SK_CLUSTER",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,90"$ -$LK,"SysGetI64",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,169",BI=137$ +$LK,"SysGetI64",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,179",BI=135$ $LK,"MemSetI64",A="FL:::/Kernel/KernelB.HH,172"$ -$LK,"_R13",A="FL:::/Kernel/KernelA.HH,3435"$ -$LK,"DEF_NOT_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2549"$ +$LK,"_R13",A="FL:::/Kernel/KernelA.HH,3395"$ +$LK,"DEF_NOT_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2536"$ $LK,"SYS_BOOT_PATCH_TABLE_BASE",A="FL:::/Kernel/KStart16.HC.Z,25"$ -$LK,"_R14",A="FL:::/Kernel/KernelA.HH,3436"$ -$LK,"CTRLT_WIN_VSCROLL",A="FL:::/Kernel/KernelA.HH,3091"$ -$LK,"TK_LESS_EQU",A="FL:::/Kernel/KernelA.HH,2084"$ +$LK,"_R14",A="FL:::/Kernel/KernelA.HH,3396"$ +$LK,"JOBf_FREE_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3150"$ +$LK,"CTRLT_WIN_VSCROLL",A="FL:::/Kernel/KernelA.HH,3053"$ +$LK,"TK_LESS_EQU",A="FL:::/Kernel/KernelA.HH,2071"$ $LK,"ODEF_HAS_MASSES",A="FL:::/Kernel/KernelA.HH,241"$ -$LK,"_R15",A="FL:::/Kernel/KernelA.HH,3437"$ -$LK,"FUG_FILES_FIND",A="FL:::/Kernel/KernelA.HH,2623"$ +$LK,"_R15",A="FL:::/Kernel/KernelA.HH,3397"$ +$LK,"FUG_FILES_FIND",A="FL:::/Kernel/KernelA.HH,2610"$ $LK,"TRUE",A="FL:::/Kernel/KernelA.HH,20"$ -$LK,"FSt_NULL",A="FL:::/Kernel/KernelA.HH,2688"$ -$LK,"chars_bmp_zero_tab_ff_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,365"$ -$LK,"CEdFindText",A="FL:::/Kernel/KernelA.HH,1225"$ -$LK,"MEM_FREE_PAGE_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2881"$ -$LK,"LDF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,368"$ -$LK,"DOCEf_LINK",A="FL:::/Kernel/KernelA.HH,1087"$ -$LK,"DOCEF_LINK",A="FL:::/Kernel/KernelA.HH,999"$ +$LK,"JOBf_EXIT_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3144"$ +$LK,"FSt_NULL",A="FL:::/Kernel/KernelA.HH,2675"$ +$LK,"CEdFindText",A="FL:::/Kernel/KernelA.HH,1213"$ +$LK,"WIf_FOCUS_TASK_MS_L_D",A="FL:::/Kernel/KernelA.HH,1437"$ +$LK,"LDF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,367"$ +$LK,"DOCEf_LINK",A="FL:::/Kernel/KernelA.HH,1075"$ +$LK,"DOCEF_LINK",A="FL:::/Kernel/KernelA.HH,987"$ $LK,"D3Copy",A="FL:::/Kernel/KernelB.HH,147"$ -$LK,"Beep",A="FL:::/Kernel/KMisc.HC.Z,202",BI=138$ +$LK,"Beep",A="FL:::/Kernel/KMisc.HC.Z,218",BI=136$ $LK,"_STRNICMP",A="FL:::/Kernel/StrA.HC.Z,183"$ +$LK,"JobQueDel",A="FL:::/Kernel/Job.HC.Z,7",BI=137$ $LK,"_MEMSET_I64",A="FL:::/Kernel/KUtils.HC.Z,42"$ -$LK,"CH_SPACE",A="FL:::/Kernel/KernelA.HH,3516"$ -$LK,"AAT_SUB_U8",A="FL:::/Kernel/KernelA.HH,1968"$ -$LK,"IET_IMM64_EXPORT",A="FL:::/Kernel/KernelA.HH,410"$ -$LK,"IET_IMM32_EXPORT",A="FL:::/Kernel/KernelA.HH,408"$ -$LK,"sys_gdt",A="FL:::/Kernel/KernelB.HH,270"$ +$LK,"CH_SPACE",A="FL:::/Kernel/KernelA.HH,3469"$ +$LK,"AAT_SUB_U8",A="FL:::/Kernel/KernelA.HH,1955"$ +$LK,"IET_IMM64_EXPORT",A="FL:::/Kernel/KernelA.HH,409"$ +$LK,"IET_IMM32_EXPORT",A="FL:::/Kernel/KernelA.HH,407"$ +$LK,"sys_gdt",A="FL:::/Kernel/KernelB.HH,274"$ $LK,"Call",A="FL:::/Kernel/KernelB.HH,44"$ -$LK,"SYS_FIXED_AREA",A="FL:::/Kernel/KernelA.HH,3470"$ -$LK,"ICF_CODE_FINAL",A="FL:::/Kernel/KernelA.HH,1599"$ -$LK,"SYS_PROGRESS2_DESC",A="FL:::/Kernel/KStart32.HC.Z,38"$ -$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,1",BI=139$ +$LK,"SYS_FIXED_AREA",A="FL:::/Kernel/KernelA.HH,3425"$ +$LK,"ICF_CODE_FINAL",A="FL:::/Kernel/KernelA.HH,1587"$ +$LK,"SYS_PROGRESS2_DESC",A="FL:::/Kernel/KStart32.HC.Z,50"$ +$LK,"SYS_STAFF_MODE_FLAG",A="FL::/Tmp.DD.Z,1"$ +$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,1",BI=138$ $LK,"InU8",A="FL:::/Kernel/KernelB.HH,77"$ -$LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HH,1924"$ -$LK,"CMemUnused",A="FL:::/Kernel/KernelA.HH,2818"$ -$LK,"IEF_48_REX",A="FL:::/Kernel/KernelA.HH,1731"$ +$LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HH,1911"$ +$LK,"CMemUnused",A="FL:::/Kernel/KernelA.HH,2806"$ +$LK,"IEF_48_REX",A="FL:::/Kernel/KernelA.HH,1718"$ $LK,"ã",A="FL:::/Kernel/KernelA.HH,51"$ -$LK,"Suspend",A="FL:::/Kernel/KTask.HC.Z,62",BI=140$ +$LK,"Suspend",A="FL:::/Kernel/KTask.HC.Z,77",BI=139$ $LK,"ClampU64",A="FL:::/Kernel/KernelB.HH,127"$ -$LK,"ARC_MAX_BITS",A="FL:::/Kernel/KernelA.HH,3742"$ -$LK,"TK_MOD_EQU",A="FL:::/Kernel/KernelA.HH,2105"$ -$LK,"FunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,54",BI=141$ -$LK,"Define",A="FL:::/Kernel/KDefine.HC.Z,49",BI=142$ -$LK,"FAT32Fmt",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,60",BI=143$ -$LK,"SrvCmdLine",A="FL:::/Kernel/KTask.HC.Z,391",BI=144$ -$LK,"HashTableNew",A="FL:::/Kernel/KHashB.HC.Z,50",BI=145$ -$LK,"DOCT_INDENT",A="FL:::/Kernel/KernelA.HH,915"$ +$LK,"ARC_MAX_BITS",A="FL:::/Kernel/KernelA.HH,3695"$ +$LK,"TK_MOD_EQU",A="FL:::/Kernel/KernelA.HH,2092"$ +$LK,"FunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,54",BI=140$ +$LK,"Define",A="FL:::/Kernel/KDefine.HC.Z,49",BI=141$ +$LK,"FAT32Fmt",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,48",BI=142$ +$LK,"SrvCmdLine",A="FL:::/Kernel/KTask.HC.Z,406",BI=143$ +$LK,"HashTableNew",A="FL:::/Kernel/KHashB.HC.Z,50",BI=144$ +$LK,"DOCT_INDENT",A="FL:::/Kernel/KernelA.HH,903"$ $LK,"_ARG",A="FL:::/Kernel/KMathA.HC.Z,366"$ -$LK,"COLORROP_NO_ROP0_MASK",A="FL:::/Kernel/KernelA.HH,2990"$ +$LK,"COLORROP_NO_ROP0_MASK",A="FL:::/Kernel/KernelA.HH,2958"$ $LK,"CDualBuf",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,109"$ -$LK,"TaskText",A="FL:::/Kernel/SrvCmd.HC.Z,75",BI=146$ -$LK,"COLORROP_BITS",A="FL:::/Kernel/KernelA.HH,2991"$ -$LK,"BROWN",A="FL:::/Kernel/KernelA.HH,2966"$ -$LK,"Da",A="FL:::/Kernel/KDbg.HC.Z,209",BI=147$ -$LK,"SUF_REM_TRAILING",A="FL:::/Kernel/KernelA.HH,3789"$ -$LK,"Cd",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,9",BI=148$ +$LK,"TaskText",A="FL:::/Kernel/Job.HC.Z,75",BI=145$ +$LK,"MSG_MS_L_UP",A="FL:::/Kernel/KernelA.HH,3193"$ +$LK,"COLORROP_BITS",A="FL:::/Kernel/KernelA.HH,2959"$ +$LK,"BROWN",A="FL:::/Kernel/KernelA.HH,2934"$ +$LK,"Da",A="FL:::/Kernel/KDbg.HC.Z,209",BI=146$ +$LK,"SUF_REM_TRAILING",A="FL:::/Kernel/KernelA.HH,3742"$ +$LK,"Cd",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,9",BI=147$ $LK,"Ceil",A="FL:::/Kernel/KernelB.HH,123"$ -$LK,"DOCEF_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1021"$ -$LK,"CCF_DONT_FREE_BUF",A="FL:::/Kernel/KernelA.HH,2129"$ -$LK,"IET_ZEROED_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,413"$ -$LK,"SrcEdLink",A="FL:::/Kernel/FunSeg.HC.Z,278",BI=149$ -$LK,"GetRBP",A="FL:::/Kernel/KernelB.HH,246"$ -$LK,"GREEN",A="FL:::/Kernel/KernelA.HH,2962"$ -$LK,"RECALCF_TO_HTML",A="FL:::/Kernel/KernelA.HH,1354"$ +$LK,"DOCEF_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1009"$ +$LK,"CCF_DONT_FREE_BUF",A="FL:::/Kernel/KernelA.HH,2116"$ +$LK,"ICF_RES_WAS_STK",A="FL:::/Kernel/KernelA.HH,1592"$ +$LK,"IET_ZEROED_CODE_HEAP",A="FL:::/Kernel/KernelA.HH,412"$ +$LK,"SrcEdLink",A="FL:::/Kernel/FunSeg.HC.Z,278",BI=148$ +$LK,"GetRBP",A="FL:::/Kernel/KernelB.HH,252"$ +$LK,"GREEN",A="FL:::/Kernel/KernelA.HH,2930"$ +$LK,"RECALCF_TO_HTML",A="FL:::/Kernel/KernelA.HH,1342"$ $LK,"ì",A="FL:::/Kernel/KernelA.HH,49"$ $LK,"ON",A="FL:::/Kernel/KernelA.HH,22"$ $LK,"_LXCHG_I64",A="FL:::/Kernel/KUtils.HC.Z,217"$ -$LK,"MDG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1586"$ -$LK,"DOCEt_BLINK",A="FL:::/Kernel/KernelA.HH,954"$ -$LK,"DOCET_BLINK",A="FL:::/Kernel/KernelA.HH,948"$ +$LK,"MDG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1574"$ +$LK,"DOCEt_BLINK",A="FL:::/Kernel/KernelA.HH,942"$ +$LK,"DOCET_BLINK",A="FL:::/Kernel/KernelA.HH,936"$ $LK,"sys_clipboard_doc",A="FL:::/Kernel/KGlbls.HC.Z,6"$ -$LK,"CCF_NO_DEFINES",A="FL:::/Kernel/KernelA.HH,2130"$ -$LK,"DOCEf_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1107"$ +$LK,"JOBf_DONE",A="FL:::/Kernel/KernelA.HH,3148"$ +$LK,"CCF_NO_DEFINES",A="FL:::/Kernel/KernelA.HH,2117"$ +$LK,"DOCEf_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HH,1095"$ $LK,"CGDTEntry",A="FL:::/Kernel/KernelA.HH,331"$ -$LK,"ARGT_XMM0",A="FL:::/Kernel/KernelA.HH,1944"$ +$LK,"ARGT_XMM0",A="FL:::/Kernel/KernelA.HH,1931"$ $LK,"_TASK_END_NOW",A="FL:::/Kernel/Sched.HC.Z,151"$ -$LK,"HTT_INVALID",A="FL:::/Kernel/KernelA.HH,682"$ +$LK,"HTT_INVALID",A="FL:::/Kernel/KernelA.HH,670"$ $LK,"_REP_OUT_U8",A="FL:::/Kernel/KUtils.HC.Z,308"$ -$LK,"GetRAX",A="FL:::/Kernel/KernelB.HH,245"$ +$LK,"GetRAX",A="FL:::/Kernel/KernelB.HH,251"$ $LK,"sys_boot_src",A="FL:::/Kernel/KernelB.HH,40"$ -$LK,"SCF_DELETE",A="FL:::/Kernel/KernelA.HH,3548"$ -$LK,"SCf_DELETE",A="FL:::/Kernel/KernelA.HH,3533"$ -$LK,"ARGT_M32N32",A="FL:::/Kernel/KernelA.HH,1910"$ -$LK,"ARGT_M16N16",A="FL:::/Kernel/KernelA.HH,1909"$ -$LK,"ARGT_M16N32",A="FL:::/Kernel/KernelA.HH,1908"$ -$LK,"SV_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1740"$ -$LK,"ICG_NO_CVT_MASK",A="FL:::/Kernel/KernelA.HH,1619"$ -$LK,"RECALCG_MASK",A="FL:::/Kernel/KernelA.HH,1350"$ -$LK,"progress1_t0",A="FL:::/Kernel/KernelB.HH,210"$ -$LK,"HTF_PRIVATE",A="FL:::/Kernel/KernelA.HH,702"$ -$LK,"ESTIMATED_MISC_ALLOCS",A="FL:::/Kernel/Mem/PageTables.HC.Z,97"$ -$LK,"Pow10I64",A="FL:::/Kernel/KMathB.HC.Z,26",BI=150$ -$LK,"IEF_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1734"$ -$LK,"HTf_PRIVATE",A="FL:::/Kernel/KernelA.HH,672"$ -$LK,"Dm",A="FL:::/Kernel/KDbg.HC.Z,204",BI=151$ -$LK,"CCF_EXE_BLK",A="FL:::/Kernel/KernelA.HH,2142"$ +$LK,"SCF_DELETE",A="FL:::/Kernel/KernelA.HH,3501"$ +$LK,"SCf_DELETE",A="FL:::/Kernel/KernelA.HH,3486"$ +$LK,"ARGT_M32N32",A="FL:::/Kernel/KernelA.HH,1897"$ +$LK,"ARGT_M16N16",A="FL:::/Kernel/KernelA.HH,1896"$ +$LK,"ARGT_M16N32",A="FL:::/Kernel/KernelA.HH,1895"$ +$LK,"SV_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1727"$ +$LK,"ICG_NO_CVT_MASK",A="FL:::/Kernel/KernelA.HH,1607"$ +$LK,"RECALCG_MASK",A="FL:::/Kernel/KernelA.HH,1338"$ +$LK,"progress1_t0",A="FL:::/Kernel/KernelB.HH,212"$ +$LK,"WIf_FOCUS_TASK_MS_R_D",A="FL:::/Kernel/KernelA.HH,1439"$ +$LK,"HTF_PRIVATE",A="FL:::/Kernel/KernelA.HH,690"$ +$LK,"Pow10I64",A="FL:::/Kernel/KMathB.HC.Z,26",BI=149$ +$LK,"char_bmp_alpha_numeric_no_at",A="FL:::/Kernel/StrA.HC.Z,335"$ +$LK,"IEF_STI_LIKE",A="FL:::/Kernel/KernelA.HH,1721"$ +$LK,"HTf_PRIVATE",A="FL:::/Kernel/KernelA.HH,660"$ +$LK,"Dm",A="FL:::/Kernel/KDbg.HC.Z,204",BI=150$ +$LK,"CCF_EXE_BLK",A="FL:::/Kernel/KernelA.HH,2129"$ $LK,"CQueD3I32",A="FL:::/Kernel/KernelA.HH,132"$ -$LK,"BDf_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2649"$ -$LK,"BDF_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2639"$ -$LK,"COLOR_INVALID",A="FL:::/Kernel/KernelA.HH,2978"$ -$LK,"DftExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,212",BI=152$ +$LK,"BDf_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2636"$ +$LK,"BDF_REMOVABLE",A="FL:::/Kernel/KernelA.HH,2626"$ +$LK,"COLOR_INVALID",A="FL:::/Kernel/KernelA.HH,2946"$ +$LK,"DftExt",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,212",BI=151$ $LK,"Bt",A="FL:::/Kernel/KernelB.HH,14"$ -$LK,"OPTf_EXTERNS_TO_IMPORTS",A="FL:::/Kernel/KernelA.HH,1539"$ -$LK,"HashFunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,10",BI=153$ -$LK,"Dr",A="FL:::/Kernel/KDbg.HC.Z,328",BI=154$ -$LK,"CPUId",A="FL:::/Kernel/KernelB.HH,256"$ -$LK,"FilesFind2",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,1",BI=155$ -$LK,"TaskKillDying",A="FL:::/Kernel/KTask.HC.Z,515",BI=156$ +$LK,"OPTf_EXTERNS_TO_IMPORTS",A="FL:::/Kernel/KernelA.HH,1527"$ +$LK,"HashFunSegFind",A="FL:::/Kernel/FunSeg.HC.Z,10",BI=152$ +$LK,"Dr",A="FL:::/Kernel/KDbg.HC.Z,328",BI=153$ +$LK,"CPUId",A="FL:::/Kernel/KernelB.HH,262"$ +$LK,"FilesFind2",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,1",BI=154$ +$LK,"TaskKillDying",A="FL:::/Kernel/KTask.HC.Z,528",BI=155$ $LK,"scan_code_map",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,157"$ -$LK,"progress2_t0",A="FL:::/Kernel/KernelB.HH,215"$ -$LK,"UncachedAliasAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,161",BI=157$ +$LK,"progress2_t0",A="FL:::/Kernel/KernelB.HH,218"$ +$LK,"UncachedAliasAlloc",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,138",BI=156$ $LK,"MSize2",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,385"$ +$LK,"SYS_16MEG_AREA_LIMIT",A="FL:::/Kernel/KernelA.HH,3426"$ $LK,"MemSetU32",A="FL:::/Kernel/KernelB.HH,176"$ $LK,"MemSetU16",A="FL:::/Kernel/KernelB.HH,174"$ -$LK,"DirTreeDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,36",BI=158$ -$LK,"Fs",A="FL:::/Kernel/KernelB.HH,280"$ -$LK,"SCF_CAPS",A="FL:::/Kernel/KernelA.HH,3542"$ -$LK,"SCf_CAPS",A="FL:::/Kernel/KernelA.HH,3527"$ -$LK,"SYS_SEMA_FAR_CALL32",A="FL:::/Kernel/KernelA.HH,606"$ -$LK,"In",A="FL:::/Kernel/SrvCmd.HC.Z,484",BI=159$ -$LK,"ACD_DEF_CHAR",A="FL:::/Kernel/KernelA.HH,1514"$ -$LK,"DbgMode",A="FL:::/Kernel/KMisc.HC.Z,277",BI=160$ -$LK,"Gs",A="FL:::/Kernel/KernelB.HH,238"$ -$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart32.HC.Z,42"$ -$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HH,3598"$ -$LK,"REGG_LOCAL_VARS",A="FL:::/Kernel/KernelA.HH,1792"$ -$LK,"DrvModelNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,294",BI=161$ +$LK,"DirTreeDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,36",BI=157$ +$LK,"Fs",A="FL:::/Kernel/KernelB.HH,287"$ +$LK,"SCF_CAPS",A="FL:::/Kernel/KernelA.HH,3495"$ +$LK,"SCf_CAPS",A="FL:::/Kernel/KernelA.HH,3480"$ +$LK,"In",A="FL:::/Kernel/Job.HC.Z,482",BI=158$ +$LK,"ACD_DEF_CHAR",A="FL:::/Kernel/KernelA.HH,1502"$ +$LK,"DbgMode",A="FL:::/Kernel/KMisc.HC.Z,293",BI=159$ +$LK,"Gs",A="FL:::/Kernel/KernelB.HH,244"$ +$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart32.HC.Z,55"$ +$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HH,3551"$ +$LK,"REGG_LOCAL_VARS",A="FL:::/Kernel/KernelA.HH,1779"$ +$LK,"DrvModelNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,304",BI=160$ $LK,"RepInU8",A="FL:::/Kernel/KernelB.HH,86"$ -$LK,"IsSysDbg",A="FL:::/Kernel/KMisc.HC.Z,250",BI=162$ -$LK,"progress3_t0",A="FL:::/Kernel/KernelB.HH,220"$ -$LK,"CDbgGlbls",A="FL:::/Kernel/KernelA.HH,3866"$ +$LK,"IsSysDbg",A="FL:::/Kernel/KMisc.HC.Z,266",BI=161$ +$LK,"progress3_t0",A="FL:::/Kernel/KernelB.HH,224"$ +$LK,"CDbgGlbls",A="FL:::/Kernel/KernelA.HH,3820"$ $LK,"_TEST_EXCEPT",A="FL:::/Kernel/KExcept.HC.Z,4"$ $LK,"_FSTCW",A="FL:::/Kernel/KMathA.HC.Z,632"$ -$LK,"MSG_IP_R_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3244"$ -$LK,"ScanFlags",A="FL:::/Kernel/StrB.HC.Z,123",BI=163$ +$LK,"MSG_MS_R_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3204"$ +$LK,"ScanFlags",A="FL:::/Kernel/StrB.HC.Z,123",BI=162$ $LK,"Ln",A="FL:::/Kernel/KernelB.HH,134"$ $LK,"INT_WAKE",A="FL:::/Kernel/KInts.HC.Z,6"$ -$LK,"GetS",A="FL:::/Kernel/SerialDev/Message.HC.Z,209",BI=164$ +$LK,"GetS",A="FL:::/Kernel/SerialDev/Message.HC.Z,209",BI=163$ $LK,"_MEMSET_U32",A="FL:::/Kernel/KUtils.HC.Z,29"$ $LK,"_MEMSET_U16",A="FL:::/Kernel/KUtils.HC.Z,16"$ -$LK,"SYS_MP_CNT_LOCK",A="FL:::/Kernel/KStart32.HC.Z,53"$ +$LK,"DOCT_BTTN",A="FL:::/Kernel/KernelA.HH,918"$ +$LK,"SYS_MP_CNT_LOCK",A="FL:::/Kernel/KStart32.HC.Z,67"$ $LK,"SYS_COMPILE_TIME",A="FL::/Tmp.DD.Z,1"$ -$LK,"GetTSC",A="FL:::/Kernel/KernelB.HH,284"$ -$LK,"BptR",A="FL:::/Kernel/KDbg.HC.Z,389",BI=165$ -$LK,"DOCT_MARKER",A="FL:::/Kernel/KernelA.HH,907"$ -$LK,"BptS",A="FL:::/Kernel/KDbg.HC.Z,368",BI=166$ +$LK,"GetTSC",A="FL:::/Kernel/KernelB.HH,291"$ +$LK,"BptR",A="FL:::/Kernel/KDbg.HC.Z,389",BI=164$ +$LK,"DOCT_MARKER",A="FL:::/Kernel/KernelA.HH,895"$ +$LK,"BptS",A="FL:::/Kernel/KDbg.HC.Z,368",BI=165$ $LK,"_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.HC.Z,158"$ $LK,"_MHEAP_CTRL",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,368"$ -$LK,"progress4_t0",A="FL:::/Kernel/KernelB.HH,225"$ -$LK,"ATAMount",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,238",BI=167$ -$LK,"FifoI64Peek",A="FL:::/Kernel/KDataTypes.HC.Z,290",BI=168$ +$LK,"progress4_t0",A="FL:::/Kernel/KernelB.HH,230"$ +$LK,"ATAMount",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,238",BI=166$ +$LK,"FifoI64Peek",A="FL:::/Kernel/KDataTypes.HC.Z,290",BI=167$ $LK,"_EXP",A="FL:::/Kernel/KMathA.HC.Z,558"$ -$LK,"SYS_SEMA_SYS_TIMER",A="FL:::/Kernel/KernelA.HH,596"$ -$LK,"IET_END",A="FL:::/Kernel/KernelA.HH,393"$ -$LK,"KbdHandler",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,441",BI=169$ -$LK,"GSF_WITH_NEW_LINE",A="FL:::/Kernel/KernelA.HH,3783"$ +$LK,"IET_END",A="FL:::/Kernel/KernelA.HH,392"$ +$LK,"GSF_WITH_NEW_LINE",A="FL:::/Kernel/KernelA.HH,3736"$ $LK,"SYS_HASH_FIND1",A="FL:::/Kernel/KHashA.HC.Z,81"$ -$LK,"GetRSP",A="FL:::/Kernel/KernelB.HH,248"$ +$LK,"GetRSP",A="FL:::/Kernel/KernelB.HH,254"$ $LK,"_D3_DIST",A="FL:::/Kernel/KMathA.HC.Z,39"$ -$LK,"ScanKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,123",BI=170$ -$LK,"MouseDriverInstall",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,217",BI=171$ -$LK,"mouse_last",A="FL:::/Kernel/KGlbls.HC.Z,28"$ -$LK,"InFile",A="FL:::/Kernel/SrvCmd.HC.Z,476",BI=172$ +$LK,"ScanKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,123",BI=168$ +$LK,"MSG_MS_R_D_UP",A="FL:::/Kernel/KernelA.HH,3199"$ +$LK,"InFile",A="FL:::/Kernel/Job.HC.Z,474",BI=169$ $LK,"D3DistSqr",A="FL:::/Kernel/KernelB.HH,150"$ -$LK,"_RDI",A="FL:::/Kernel/KernelA.HH,3426"$ -$LK,"SV_R_REG",A="FL:::/Kernel/KernelA.HH,1738"$ -$LK,"PRTF_TRUNCATE",A="FL:::/Kernel/KernelA.HH,3916"$ -$LK,"ATARepExitAllApplications",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,120",BI=173$ -$LK,"CeilI64",A="FL:::/Kernel/KMathB.HC.Z,62",BI=174$ -$LK,"_RBP",A="FL:::/Kernel/KernelA.HH,3427"$ -$LK,"CCacheBlk",A="FL:::/Kernel/KernelA.HH,2748"$ -$LK,"OPTf_WARN_DUP_TYPES",A="FL:::/Kernel/KernelA.HH,1537"$ -$LK,"ATAProbe",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,373",BI=175$ +$LK,"_RDI",A="FL:::/Kernel/KernelA.HH,3386"$ +$LK,"SV_R_REG",A="FL:::/Kernel/KernelA.HH,1725"$ +$LK,"PRTF_TRUNCATE",A="FL:::/Kernel/KernelA.HH,3871"$ +$LK,"ATARepExitAllApplications",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,120",BI=170$ +$LK,"CeilI64",A="FL:::/Kernel/KMathB.HC.Z,62",BI=171$ +$LK,"_RBP",A="FL:::/Kernel/KernelA.HH,3387"$ +$LK,"CCacheBlk",A="FL:::/Kernel/KernelA.HH,2736"$ +$LK,"OPTf_WARN_DUP_TYPES",A="FL:::/Kernel/KernelA.HH,1525"$ +$LK,"ATAProbe",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,376",BI=172$ $LK,"_LXCHG_U16",A="FL:::/Kernel/KUtils.HC.Z,235"$ $LK,"_LXCHG_U32",A="FL:::/Kernel/KUtils.HC.Z,226"$ -$LK,"SYS_PROGRESS1",A="FL:::/Kernel/KStart32.HC.Z,31"$ -$LK,"DOCT_FOOTER",A="FL:::/Kernel/KernelA.HH,914"$ +$LK,"SYS_PROGRESS1",A="FL:::/Kernel/KStart32.HC.Z,41"$ +$LK,"DOCT_FOOTER",A="FL:::/Kernel/KernelA.HH,902"$ $LK,"MEM_NUM_E820_ENTRIES",A="FL:::/Kernel/KernelA.HH,357"$ -$LK,"MPAPICInit",A="FL:::/Kernel/MultiProc.HC.Z,171",BI=176$ -$LK,"SYS_PROGRESS2",A="FL:::/Kernel/KStart32.HC.Z,35"$ -$LK,"DOCEf_SKIP",A="FL:::/Kernel/KernelA.HH,1105"$ -$LK,"DOCEF_SKIP",A="FL:::/Kernel/KernelA.HH,1019"$ -$LK,"SYS_PROGRESS3",A="FL:::/Kernel/KStart32.HC.Z,39"$ -$LK,"CCF_DONT_MAKE_RES",A="FL:::/Kernel/KernelA.HH,2165"$ -$LK,"CSrvCtrl",A="FL:::/Kernel/KernelA.HH,3218"$ -$LK,"DirNew",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,1",BI=177$ -$LK,"SYS_PROGRESS4",A="FL:::/Kernel/KStart32.HC.Z,43"$ -$LK,"_RAX",A="FL:::/Kernel/KernelA.HH,3421"$ -$LK,"FAT32DirNew",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,576",BI=178$ -$LK,"HTf_RESOLVED",A="FL:::/Kernel/KernelA.HH,678"$ -$LK,"LinkedLstDel",A="FL:::/Kernel/KDataTypes.HC.Z,1",BI=179$ -$LK,"Help",A="FL:::/Kernel/StrB.HC.Z,115",BI=180$ +$LK,"MPAPICInit",A="FL:::/Kernel/MultiProc.HC.Z,171",BI=173$ +$LK,"SYS_PROGRESS2",A="FL:::/Kernel/KStart32.HC.Z,46"$ +$LK,"DOCEf_SKIP",A="FL:::/Kernel/KernelA.HH,1093"$ +$LK,"DOCEF_SKIP",A="FL:::/Kernel/KernelA.HH,1007"$ +$LK,"SYS_PROGRESS3",A="FL:::/Kernel/KStart32.HC.Z,51"$ +$LK,"MSG_MS_R_UP",A="FL:::/Kernel/KernelA.HH,3197"$ +$LK,"CCF_DONT_MAKE_RES",A="FL:::/Kernel/KernelA.HH,2152"$ +$LK,"DirNew",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,1",BI=174$ +$LK,"SYS_PROGRESS4",A="FL:::/Kernel/KStart32.HC.Z,56"$ +$LK,"_RAX",A="FL:::/Kernel/KernelA.HH,3381"$ +$LK,"FAT32DirNew",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,564",BI=175$ +$LK,"HTf_RESOLVED",A="FL:::/Kernel/KernelA.HH,666"$ +$LK,"LinkedLstDel",A="FL:::/Kernel/KDataTypes.HC.Z,1",BI=176$ +$LK,"Help",A="FL:::/Kernel/StrB.HC.Z,115",BI=177$ $LK,"Log2",A="FL:::/Kernel/KernelB.HH,136"$ -$LK,"_RBX",A="FL:::/Kernel/KernelA.HH,3422"$ -$LK,"DOCT_HEX_ED",A="FL:::/Kernel/KernelA.HH,936"$ -$LK,"DOCT_LINK",A="FL:::/Kernel/KernelA.HH,929"$ +$LK,"_RBX",A="FL:::/Kernel/KernelA.HH,3382"$ +$LK,"DOCT_HEX_ED",A="FL:::/Kernel/KernelA.HH,924"$ +$LK,"DOCT_LINK",A="FL:::/Kernel/KernelA.HH,917"$ $LK,"_D3_COPY",A="FL:::/Kernel/KMathA.HC.Z,212"$ $LK,"PUT_STR",A="FL:::/Kernel/StrA.HC.Z,58"$ $LK,"_RET",A="FL:::/Kernel/KUtils.HC.Z,456"$ -$LK,"_RCX",A="FL:::/Kernel/KernelA.HH,3423"$ -$LK,"BIOSTotalMem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,174",BI=181$ -$LK,"_RDX",A="FL:::/Kernel/KernelA.HH,3424"$ -$LK,"RLF_FULL_HEAP",A="FL:::/Kernel/KernelA.HH,464"$ -$LK,"RLf_FULL_HEAP",A="FL:::/Kernel/KernelA.HH,445"$ -$LK,"ScanMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,37",BI=182$ -$LK,"SYS_PROGRESS4_DESC",A="FL:::/Kernel/KStart32.HC.Z,46"$ -$LK,"__FILE__",A="FL:::/Kernel/KernelA.HH,2029"$ +$LK,"_RCX",A="FL:::/Kernel/KernelA.HH,3383"$ +$LK,"BIOSTotalMem",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,151",BI=178$ +$LK,"_RDX",A="FL:::/Kernel/KernelA.HH,3384"$ +$LK,"ScanMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,37",BI=179$ +$LK,"SYS_PROGRESS4_DESC",A="FL:::/Kernel/KStart32.HC.Z,60"$ +$LK,"__FILE__",A="FL:::/Kernel/KernelA.HH,2016"$ $LK,"CDate",A="FL:::/Kernel/KernelA.HH,186"$ -$LK,"CLFlush",A="FL:::/Kernel/KernelB.HH,273"$ -$LK,"SYS_HEAP_DBG_FLAG",A="FL:::/Kernel/KStart32.HC.Z,21"$ -$LK,"_RIP",A="FL:::/Kernel/KernelA.HH,3429"$ -$LK,"IEF_REX_ONLY_R8_R15",A="FL:::/Kernel/KernelA.HH,1732"$ -$LK,"MDF_IMM",A="FL:::/Kernel/KernelA.HH,1579"$ -$LK,"DOCSS_SINGLE_QUOTE",A="FL:::/Kernel/KernelA.HH,1130"$ -$LK,"KBD_PORT",A="FL:::/Kernel/KernelA.HH,3002"$ -$LK,"NUM_COLORS",A="FL:::/Kernel/KernelA.HH,2977"$ +$LK,"CLFlush",A="FL:::/Kernel/KernelB.HH,277"$ +$LK,"SYS_HEAP_DBG_FLAG",A="FL:::/Kernel/KStart32.HC.Z,31"$ +$LK,"_RIP",A="FL:::/Kernel/KernelA.HH,3389"$ +$LK,"IEF_REX_ONLY_R8_R15",A="FL:::/Kernel/KernelA.HH,1719"$ +$LK,"MDF_IMM",A="FL:::/Kernel/KernelA.HH,1567"$ +$LK,"DOCSS_SINGLE_QUOTE",A="FL:::/Kernel/KernelA.HH,1118"$ +$LK,"KBD_PORT",A="FL:::/Kernel/KernelA.HH,2970"$ +$LK,"NUM_COLORS",A="FL:::/Kernel/KernelA.HH,2945"$ $LK,"ac",A="FL:::/Kernel/KGlbls.HC.Z,19"$ $LK,"_FSTSW",A="FL:::/Kernel/KMathA.HC.Z,641"$ -$LK,"ARGT_IMM32",A="FL:::/Kernel/KernelA.HH,1884"$ -$LK,"ARGT_IMM16",A="FL:::/Kernel/KernelA.HH,1883"$ -$LK,"MouseSpeedSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,109",BI=183$ -$LK,"Name2ParentDirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,54",BI=184$ +$LK,"ARGT_IMM32",A="FL:::/Kernel/KernelA.HH,1871"$ +$LK,"ARGT_IMM16",A="FL:::/Kernel/KernelA.HH,1870"$ +$LK,"Name2ParentDirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,54",BI=180$ $LK,"Free",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,383"$ -$LK,"DOCEf_AUX_STR",A="FL:::/Kernel/KernelA.HH,1056"$ -$LK,"DOCEF_AUX_STR",A="FL:::/Kernel/KernelA.HH,968"$ -$LK,"Char2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,201",BI=185$ -$LK,"Mem512Free",A="FL:::/Kernel/Mem/Mem512.HC.Z,84",BI=186$ +$LK,"DOCEf_AUX_STR",A="FL:::/Kernel/KernelA.HH,1044"$ +$LK,"DOCEF_AUX_STR",A="FL:::/Kernel/KernelA.HH,956"$ +$LK,"Char2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,201",BI=181$ $LK,"blkdev",A="FL:::/Kernel/KGlbls.HC.Z,20"$ -$LK,"TK_NUM_TK",A="FL:::/Kernel/KernelA.HH,2110"$ -$LK,"CWinMgrGlbls",A="FL:::/Kernel/KernelA.HH,1467"$ -$LK,"DOCEf_TREE",A="FL:::/Kernel/KernelA.HH,1103"$ -$LK,"DOCEF_TREE",A="FL:::/Kernel/KernelA.HH,1017"$ -$LK,"MouseUpdatePre",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,119",BI=187$ -$LK,"ISO1FileFind",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,70",BI=188$ -$LK,"TASK_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3306"$ -$LK,"SysDefinesLoad",A="FL:::/Kernel/KDefine.HC.Z,97",BI=189$ -$LK,"Mem512TaskAlloc",A="FL:::/Kernel/Mem/Mem512.HC.Z,115",BI=190$ -$LK,"MEM_MAPPED_SPACE",A="FL:::/Kernel/KernelA.HH,3464"$ +$LK,"TK_NUM_TK",A="FL:::/Kernel/KernelA.HH,2097"$ +$LK,"CWinMgrGlbls",A="FL:::/Kernel/KernelA.HH,1455"$ +$LK,"DOCEf_TREE",A="FL:::/Kernel/KernelA.HH,1091"$ +$LK,"DOCEF_TREE",A="FL:::/Kernel/KernelA.HH,1005"$ +$LK,"ISO1FileFind",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,70",BI=182$ +$LK,"progress1_tf",A="FL:::/Kernel/KernelB.HH,213"$ +$LK,"mem_mapped_space",A="FL:::/Kernel/KernelB.HH,195"$ +$LK,"TASK_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,3266"$ +$LK,"SysDefinesLoad",A="FL:::/Kernel/KDefine.HC.Z,97",BI=183$ +$LK,"MEM_MAPPED_SPACE",A="FL:::/Kernel/KStart32.HC.Z,9"$ +$LK,"SEMA_SYS_DATE",A="FL:::/Kernel/KernelA.HH,597"$ $LK,"D3Norm",A="FL:::/Kernel/KernelB.HH,157"$ $LK,"_POW",A="FL:::/Kernel/KMathA.HC.Z,515"$ -$LK,"MSG_KEY_DOWN",A="FL:::/Kernel/KernelA.HH,3229"$ -$LK,"ARGT_IMM64",A="FL:::/Kernel/KernelA.HH,1885"$ -$LK,"RTG_MASK",A="FL:::/Kernel/KernelA.HH,1568"$ -$LK,"TASK_HASH_TABLE_SIZE",A="FL:::/Kernel/KernelA.HH,2891"$ -$LK,"DOCT_BUTTON",A="FL:::/Kernel/KernelA.HH,930"$ -$LK,"drv_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,310"$ +$LK,"MSG_KEY_DOWN",A="FL:::/Kernel/KernelA.HH,3189"$ +$LK,"ARGT_IMM64",A="FL:::/Kernel/KernelA.HH,1872"$ +$LK,"RTG_MASK",A="FL:::/Kernel/KernelA.HH,1556"$ +$LK,"SEMA_UPDATE_WIN_Z_BUF",A="FL:::/Kernel/KernelA.HH,609"$ +$LK,"TASK_HASH_TABLE_SIZE",A="FL:::/Kernel/KernelA.HH,2859"$ +$LK,"drv_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,320"$ $LK,"PUT_HEX_U8",A="FL:::/Kernel/StrA.HC.Z,44"$ -$LK,"_RSI",A="FL:::/Kernel/KernelA.HH,3425"$ -$LK,"CTRLF_CAPTURE_RIGHT_IP",A="FL:::/Kernel/KernelA.HH,3097"$ -$LK,"CPUStructInit",A="FL:::/Kernel/MultiProc.HC.Z,116",BI=191$ -$LK,"WIf_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1454"$ -$LK,"WIF_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1429"$ -$LK,"CIntermediateCode",A="FL:::/Kernel/KernelA.HH,1653"$ -$LK,"MDF_REG",A="FL:::/Kernel/KernelA.HH,1580"$ -$LK,"DOC_COLOR_ANCHOR",A="FL:::/Kernel/KernelA.HH,1139"$ -$LK,"Str2ColorU32",A="FL:::/Kernel/KDefine.HC.Z,202",BI=192$ -$LK,"Str2ColorU16",A="FL:::/Kernel/KDefine.HC.Z,158",BI=193$ -$LK,"LinkedLstCnt",A="FL:::/Kernel/KDataTypes.HC.Z,21",BI=194$ -$LK,"CTRLT_VIEWING_ANGLES",A="FL:::/Kernel/KernelA.HH,3092"$ -$LK,"DOCEf_QUIT",A="FL:::/Kernel/KernelA.HH,1089"$ -$LK,"DOCEF_QUIT",A="FL:::/Kernel/KernelA.HH,1001"$ -$LK,"Tabs2Spaces",A="FL:::/Kernel/StrB.HC.Z,1",BI=195$ +$LK,"_RSI",A="FL:::/Kernel/KernelA.HH,3385"$ +$LK,"CPUStructInit",A="FL:::/Kernel/MultiProc.HC.Z,116",BI=184$ +$LK,"WIf_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1442"$ +$LK,"WIF_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1417"$ +$LK,"CIntermediateCode",A="FL:::/Kernel/KernelA.HH,1641"$ +$LK,"progress2_tf",A="FL:::/Kernel/KernelB.HH,219"$ +$LK,"MDF_REG",A="FL:::/Kernel/KernelA.HH,1568"$ +$LK,"DOC_COLOR_ANCHOR",A="FL:::/Kernel/KernelA.HH,1127"$ +$LK,"Str2ColorU32",A="FL:::/Kernel/KDefine.HC.Z,202",BI=185$ +$LK,"Str2ColorU16",A="FL:::/Kernel/KDefine.HC.Z,158",BI=186$ +$LK,"LinkedLstCnt",A="FL:::/Kernel/KDataTypes.HC.Z,21",BI=187$ +$LK,"CTRLT_VIEWING_ANGLES",A="FL:::/Kernel/KernelA.HH,3054"$ +$LK,"DOCEf_QUIT",A="FL:::/Kernel/KernelA.HH,1077"$ +$LK,"DOCEF_QUIT",A="FL:::/Kernel/KernelA.HH,989"$ +$LK,"Tabs2Spaces",A="FL:::/Kernel/StrB.HC.Z,1",BI=188$ $LK,"MaxI64",A="FL:::/Kernel/KernelB.HH,99"$ $LK,"SYS_GDT_PTR",A="FL:::/Kernel/KStart16.HC.Z,34"$ -$LK,"_RSP",A="FL:::/Kernel/KernelA.HH,3428"$ -$LK,"DOCT_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,940"$ -$LK,"FSetCluster",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,99",BI=196$ -$LK,"WinDerivedValsUpdate",A="FL:::/Kernel/Display.HC.Z,93",BI=197$ +$LK,"_RSP",A="FL:::/Kernel/KernelA.HH,3388"$ +$LK,"DOCT_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HH,928"$ +$LK,"FSetCluster",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,99",BI=189$ +$LK,"WinDerivedValsUpdate",A="FL:::/Kernel/Display.HC.Z,93",BI=190$ $LK,"fp_update_ctrls",A="FL:::/Kernel/KGlbls.HC.Z,33"$ -$LK,"DSK_CACHE_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2746"$ -$LK,"RS_ATTR_VOL_ID",A="FL:::/Kernel/KernelA.HH,2529"$ -$LK,"DOCf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1325"$ -$LK,"DOCF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1288"$ -$LK,"DOCT_UNDERLINE",A="FL:::/Kernel/KernelA.HH,924"$ -$LK,"IntDivZero",A="FL:::/Kernel/KInts.HC.Z,150",BI=198$ +$LK,"DSK_CACHE_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2734"$ +$LK,"RS_ATTR_VOL_ID",A="FL:::/Kernel/KernelA.HH,2516"$ +$LK,"DOCf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1313"$ +$LK,"DOCF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1276"$ +$LK,"DOCT_UNDERLINE",A="FL:::/Kernel/KernelA.HH,912"$ +$LK,"IntDivZero",A="FL:::/Kernel/KInts.HC.Z,150",BI=191$ +$LK,"MemPagFree",A="FL:::/Kernel/Mem/MemPag.HC.Z,83",BI=192$ $LK,"_SQR",A="FL:::/Kernel/KMathA.HC.Z,337"$ -$LK,"DISPLAYf_SILENT",A="FL:::/Kernel/KernelA.HH,3301"$ -$LK,"MDF_SIB",A="FL:::/Kernel/KernelA.HH,1582"$ -$LK,"REGT_R32",A="FL:::/Kernel/KernelA.HH,742"$ -$LK,"REGT_R16",A="FL:::/Kernel/KernelA.HH,741"$ -$LK,"IEF_NOT_IN_64_BIT",A="FL:::/Kernel/KernelA.HH,1730"$ -$LK,"RedSeaFileFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,155",BI=199$ +$LK,"DISPLAYf_SILENT",A="FL:::/Kernel/KernelA.HH,3261"$ +$LK,"MDF_SIB",A="FL:::/Kernel/KernelA.HH,1570"$ +$LK,"REGT_R32",A="FL:::/Kernel/KernelA.HH,730"$ +$LK,"REGT_R16",A="FL:::/Kernel/KernelA.HH,729"$ +$LK,"CJobCtrl",A="FL:::/Kernel/KernelA.HH,3178"$ +$LK,"progress3_tf",A="FL:::/Kernel/KernelB.HH,225"$ +$LK,"IEF_NOT_IN_64_BIT",A="FL:::/Kernel/KernelA.HH,1717"$ +$LK,"RedSeaFileFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,155",BI=193$ +$LK,"CTRLF_CAPTURE_RIGHT_MS",A="FL:::/Kernel/KernelA.HH,3059"$ $LK,"SYS_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.HC.Z,4"$ -$LK,"tS",A="FL:::/Kernel/KMisc.HC.Z,122",BI=200$ +$LK,"tS",A="FL:::/Kernel/KMisc.HC.Z,122",BI=194$ $LK,"LBEqu",A="FL:::/Kernel/KernelB.HH,34"$ -$LK,"ICF_RES_NOT_USED",A="FL:::/Kernel/KernelA.HH,1598"$ -$LK,"DOCEt_SEL",A="FL:::/Kernel/KernelA.HH,956"$ -$LK,"ArcDetermineCompressionType",A="FL:::/Kernel/Compress.HC.Z,102",BI=201$ -$LK,"SYS_SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,602"$ -$LK,"IntInit1",A="FL:::/Kernel/KInts.HC.Z,180",BI=202$ -$LK,"CH_CURSOR",A="FL:::/Kernel/KernelA.HH,3510"$ -$LK,"IntInit2",A="FL:::/Kernel/KInts.HC.Z,195",BI=203$ -$LK,"DOCT_CURSOR",A="FL:::/Kernel/KernelA.HH,906"$ -$LK,"GetKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,142",BI=204$ -$LK,"ROP_MONO",A="FL:::/Kernel/KernelA.HH,2947"$ -$LK,"CFAT32DirEntryLong",A="FL:::/Kernel/KernelA.HH,2396"$ -$LK,"Kill",A="FL:::/Kernel/KTask.HC.Z,45",BI=205$ -$LK,"RS_ATTR_FIXED",A="FL:::/Kernel/KernelA.HH,2539"$ -$LK,"TK_IFDEF",A="FL:::/Kernel/KernelA.HH,2099"$ -$LK,"REGT_R64",A="FL:::/Kernel/KernelA.HH,743"$ -$LK,"SingleUser",A="FL:::/Kernel/KMisc.HC.Z,267",BI=206$ -$LK,"Date2Struct",A="FL:::/Kernel/KDate.HC.Z,39",BI=207$ -$LK,"CFile",A="FL:::/Kernel/KernelA.HH,2789"$ -$LK,"Fault2",A="FL:::/Kernel/KDbg.HC.Z,592",BI=208$ -$LK,"Load",A="FL:::/Kernel/KLoad.HC.Z,181",BI=209$ -$LK,"ip",A="FL:::/Kernel/KGlbls.HC.Z,25"$ -$LK,"CFreeLst",A="FL:::/Kernel/KernelA.HH,2711"$ -$LK,"DOCEF_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,1006"$ +$LK,"ICF_RES_NOT_USED",A="FL:::/Kernel/KernelA.HH,1586"$ +$LK,"DOCEt_SEL",A="FL:::/Kernel/KernelA.HH,944"$ +$LK,"ArcDetermineCompressionType",A="FL:::/Kernel/Compress.HC.Z,102",BI=195$ +$LK,"IntInit1",A="FL:::/Kernel/KInts.HC.Z,180",BI=196$ +$LK,"CH_CURSOR",A="FL:::/Kernel/KernelA.HH,3464"$ +$LK,"IntInit2",A="FL:::/Kernel/KInts.HC.Z,195",BI=197$ +$LK,"DOCT_CURSOR",A="FL:::/Kernel/KernelA.HH,894"$ +$LK,"GetKey",A="FL:::/Kernel/SerialDev/Message.HC.Z,142",BI=198$ +$LK,"ROP_MONO",A="FL:::/Kernel/KernelA.HH,2915"$ +$LK,"CFAT32DirEntryLong",A="FL:::/Kernel/KernelA.HH,2383"$ +$LK,"Kill",A="FL:::/Kernel/KTask.HC.Z,48",BI=199$ +$LK,"RS_ATTR_FIXED",A="FL:::/Kernel/KernelA.HH,2526"$ +$LK,"TK_IFDEF",A="FL:::/Kernel/KernelA.HH,2086"$ +$LK,"REGT_R64",A="FL:::/Kernel/KernelA.HH,731"$ +$LK,"SingleUser",A="FL:::/Kernel/KMisc.HC.Z,283",BI=200$ +$LK,"Date2Struct",A="FL:::/Kernel/KDate.HC.Z,39",BI=201$ +$LK,"progress4_tf",A="FL:::/Kernel/KernelB.HH,231"$ +$LK,"CFile",A="FL:::/Kernel/KernelA.HH,2777"$ +$LK,"Fault2",A="FL:::/Kernel/KDbg.HC.Z,596",BI=202$ +$LK,"Load",A="FL:::/Kernel/KLoad.HC.Z,181",BI=203$ +$LK,"CFreeLst",A="FL:::/Kernel/KernelA.HH,2698"$ +$LK,"DOCEF_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,994"$ $LK,"CHash",A="FL:::/Kernel/KernelA.HH,624"$ -$LK,"RedSeaFreeClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,250",BI=210$ -$LK,"DeathWait",A="FL:::/Kernel/KTask.HC.Z,35",BI=211$ -$LK,"Fault3",A="FL:::/Kernel/KDbg.HC.Z,561",BI=212$ -$LK,"CompressBuf",A="FL:::/Kernel/Compress.HC.Z,281",BI=213$ -$LK,"chars_bmp_hex_numeric",A="FL:::/Kernel/StrA.HC.Z,353"$ -$LK,"CCF_NOT_CONST",A="FL:::/Kernel/KernelA.HH,2139"$ -$LK,"CeilU64",A="FL:::/Kernel/KMathB.HC.Z,41",BI=214$ -$LK,"BPlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2894"$ -$LK,"BDlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2660"$ -$LK,"TK_ELLIPSIS",A="FL:::/Kernel/KernelA.HH,2107"$ -$LK,"TK_OR_EQU",A="FL:::/Kernel/KernelA.HH,2094"$ +$LK,"RedSeaFreeClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,250",BI=204$ +$LK,"DeathWait",A="FL:::/Kernel/KTask.HC.Z,38",BI=205$ +$LK,"Fault3",A="FL:::/Kernel/KDbg.HC.Z,564",BI=206$ +$LK,"Busy",A="FL:::/Kernel/KMisc.HC.Z,136",BI=207$ +$LK,"CompressBuf",A="FL:::/Kernel/Compress.HC.Z,281",BI=208$ +$LK,"CCF_NOT_CONST",A="FL:::/Kernel/KernelA.HH,2126"$ +$LK,"CeilU64",A="FL:::/Kernel/KMathB.HC.Z,41",BI=209$ +$LK,"BPlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2862"$ +$LK,"BDlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2647"$ +$LK,"TK_ELLIPSIS",A="FL:::/Kernel/KernelA.HH,2094"$ +$LK,"TK_OR_EQU",A="FL:::/Kernel/KernelA.HH,2081"$ $LK,"sys_neg_pows_lst",A="FL:::/Kernel/StrPrint.HC.Z,203"$ $LK,"sys_pos_pows_lst",A="FL:::/Kernel/StrPrint.HC.Z,202"$ -$LK,"MStrPrint",A="FL:::/Kernel/StrPrint.HC.Z,898",BI=215$ -$LK,"DVlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2685"$ -$LK,"SrcFileName",A="FL:::/Kernel/FunSeg.HC.Z,239",BI=216$ -$LK,"RawD",A="FL:::/Kernel/KDbg.HC.Z,234",BI=217$ -$LK,"IsSingleUser",A="FL:::/Kernel/KMisc.HC.Z,272",BI=218$ +$LK,"MStrPrint",A="FL:::/Kernel/StrPrint.HC.Z,898",BI=210$ +$LK,"DVlf_LOCKED",A="FL:::/Kernel/KernelA.HH,2672"$ +$LK,"SrcFileName",A="FL:::/Kernel/FunSeg.HC.Z,239",BI=211$ +$LK,"RawD",A="FL:::/Kernel/KDbg.HC.Z,234",BI=212$ +$LK,"IsSingleUser",A="FL:::/Kernel/KMisc.HC.Z,288",BI=213$ $LK,"adam_task",A="FL:::/Kernel/KGlbls.HC.Z,8"$ $LK,"_POW10",A="FL:::/Kernel/KMathA.HC.Z,524"$ -$LK,"SVCRf_LOCKED",A="FL:::/Kernel/KernelA.HH,3217"$ -$LK,"BDF_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2643"$ -$LK,"DOCT_CURSOR_MOVEMENT",A="FL:::/Kernel/KernelA.HH,927"$ -$LK,"SCF_CTRL",A="FL:::/Kernel/KernelA.HH,3540"$ -$LK,"SCf_CTRL",A="FL:::/Kernel/KernelA.HH,3525"$ -$LK,"TK_ENDIF",A="FL:::/Kernel/KernelA.HH,2103"$ -$LK,"RT_UF32",A="FL:::/Kernel/KernelA.HH,1563"$ -$LK,"CCF_NO_REG_OPT",A="FL:::/Kernel/KernelA.HH,2140"$ -$LK,"DOCEf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1051"$ -$LK,"DOCEF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1045"$ -$LK,"DOCEt_UNDERLINE",A="FL:::/Kernel/KernelA.HH,957"$ -$LK,"DOCET_UNDERLINE",A="FL:::/Kernel/KernelA.HH,951"$ -$LK,"RLf_DOC",A="FL:::/Kernel/KernelA.HH,451"$ +$LK,"BDF_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2630"$ +$LK,"DOCT_CURSOR_MOVEMENT",A="FL:::/Kernel/KernelA.HH,915"$ +$LK,"SCF_CTRL",A="FL:::/Kernel/KernelA.HH,3493"$ +$LK,"SCf_CTRL",A="FL:::/Kernel/KernelA.HH,3478"$ +$LK,"TK_ENDIF",A="FL:::/Kernel/KernelA.HH,2090"$ +$LK,"RT_UF32",A="FL:::/Kernel/KernelA.HH,1551"$ +$LK,"CCF_NO_REG_OPT",A="FL:::/Kernel/KernelA.HH,2127"$ +$LK,"DOCEf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1039"$ +$LK,"DOCEF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,1033"$ +$LK,"DOCEt_UNDERLINE",A="FL:::/Kernel/KernelA.HH,945"$ +$LK,"DOCET_UNDERLINE",A="FL:::/Kernel/KernelA.HH,939"$ +$LK,"RLf_DOC",A="FL:::/Kernel/KernelA.HH,453"$ $LK,"pi",A="FL:::/Kernel/KernelA.HH,50"$ -$LK,"ATTRF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,893"$ -$LK,"ATTRf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,898"$ -$LK,"KbdMouseVarsInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,271",BI=219$ -$LK,"DOCF_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1277"$ -$LK,"SYS_SEMA_UPDATE_WIN_Z_BUF",A="FL:::/Kernel/KernelA.HH,609"$ -$LK,"Exit",A="FL:::/Kernel/KTask.HC.Z,1",BI=220$ -$LK,"TASKf_BREAK_TO_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3293"$ -$LK,"HTT_KEYWORD",A="FL:::/Kernel/KernelA.HH,692"$ -$LK,"CopySingleZ",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,1",BI=221$ -$LK,"DCF_NO_TRANSPARENTS",A="FL:::/Kernel/KernelA.HH,3626"$ -$LK,"HTt_KEYWORD",A="FL:::/Kernel/KernelA.HH,662"$ -$LK,"RT_UF64",A="FL:::/Kernel/KernelA.HH,1565"$ -$LK,"DOCf_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1313"$ -$LK,"GetMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,95",BI=222$ -$LK,"CMPCrash",A="FL:::/Kernel/KernelA.HH,3857"$ -$LK,"ROPBF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2939"$ -$LK,"ICF_SHORT_JMP",A="FL:::/Kernel/KernelA.HH,1601"$ -$LK,"IA32_FS_BASE",A="FL:::/Kernel/KernelA.HH,523"$ -$LK,"Rand",A="FL:::/Kernel/KMathB.HC.Z,137",BI=223$ -$LK,"FAT32_ENTRIES_BITS",A="FL:::/Kernel/KernelA.HH,2409"$ -$LK,"TK_IDENT",A="FL:::/Kernel/KernelA.HH,2071"$ -$LK,"ArcCompressBuf",A="FL:::/Kernel/Compress.HC.Z,110",BI=224$ -$LK,"MDG_REG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1587"$ -$LK,"ToFileLine",A="FL:::/Kernel/EdLite.HC.Z,303",BI=225$ +$LK,"MsHardDrvrInstall",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,294",BI=214$ +$LK,"KbdHndlr",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,441",BI=215$ +$LK,"ATTRF_UNDERLINE",A="FL:::/Kernel/KernelA.HH,881"$ +$LK,"ATTRf_UNDERLINE",A="FL:::/Kernel/KernelA.HH,886"$ +$LK,"SEMA_FLUSH_VGA_IMAGE",A="FL:::/Kernel/KernelA.HH,603"$ +$LK,"DOCF_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1265"$ +$LK,"ms",A="FL:::/Kernel/KGlbls.HC.Z,25"$ +$LK,"Exit",A="FL:::/Kernel/KTask.HC.Z,1",BI=216$ +$LK,"TASKf_BREAK_TO_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3253"$ +$LK,"HTT_KEYWORD",A="FL:::/Kernel/KernelA.HH,680"$ +$LK,"CopySingleZ",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,1",BI=217$ +$LK,"DCF_NO_TRANSPARENTS",A="FL:::/Kernel/KernelA.HH,3579"$ +$LK,"HTt_KEYWORD",A="FL:::/Kernel/KernelA.HH,650"$ +$LK,"RT_UF64",A="FL:::/Kernel/KernelA.HH,1553"$ +$LK,"DOCf_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HH,1301"$ +$LK,"GetMsg",A="FL:::/Kernel/SerialDev/Message.HC.Z,95",BI=218$ +$LK,"CMPCrash",A="FL:::/Kernel/KernelA.HH,3811"$ +$LK,"ROPBF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2907"$ +$LK,"JOBT_EXE_STR",A="FL:::/Kernel/KernelA.HH,3155"$ +$LK,"ICF_SHORT_JMP",A="FL:::/Kernel/KernelA.HH,1589"$ +$LK,"IA32_FS_BASE",A="FL:::/Kernel/KernelA.HH,526"$ +$LK,"Rand",A="FL:::/Kernel/KMathB.HC.Z,137",BI=219$ +$LK,"FAT32_ENTRIES_BITS",A="FL:::/Kernel/KernelA.HH,2396"$ +$LK,"TK_IDENT",A="FL:::/Kernel/KernelA.HH,2058"$ +$LK,"ArcCompressBuf",A="FL:::/Kernel/Compress.HC.Z,110",BI=220$ +$LK,"MDG_REG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HH,1575"$ +$LK,"ToFileLine",A="FL:::/Kernel/EdLite.HC.Z,303",BI=221$ $LK,"D3Unit",A="FL:::/Kernel/KernelB.HH,161"$ -$LK,"CTRLT_WIN_HSCROLL",A="FL:::/Kernel/KernelA.HH,3090"$ -$LK,"TK_IFAOT",A="FL:::/Kernel/KernelA.HH,2101"$ -$LK,"IsDotC",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,31",BI=226$ -$LK,"BDf_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2653"$ -$LK,"TK_GREATER_EQU",A="FL:::/Kernel/KernelA.HH,2085"$ -$LK,"CICArg",A="FL:::/Kernel/KernelA.HH,1630"$ -$LK,"MDF_STK",A="FL:::/Kernel/KernelA.HH,1578"$ -$LK,"DOCEf_CENTER_X",A="FL:::/Kernel/KernelA.HH,1077"$ -$LK,"DOCEF_CENTER_X",A="FL:::/Kernel/KernelA.HH,989"$ -$LK,"SYS_TIMER_FREQ",A="FL:::/Kernel/KernelA.HH,553"$ -$LK,"HashTablePurge",A="FL:::/Kernel/KHashB.HC.Z,107",BI=227$ -$LK,"GR_HEIGHT",A="FL:::/Kernel/KernelA.HH,3615"$ -$LK,"DOCEf_CENTER_Y",A="FL:::/Kernel/KernelA.HH,1080"$ -$LK,"DOCEF_CENTER_Y",A="FL:::/Kernel/KernelA.HH,992"$ -$LK,"Seed",A="FL:::/Kernel/KMathB.HC.Z,147",BI=228$ -$LK,"DrvsRelease",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,27",BI=229$ -$LK,"BlkDevNextFreeSlot",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,120",BI=230$ -$LK,"TASKf_FILTER_INPUT",A="FL:::/Kernel/KernelA.HH,3287"$ -$LK,"DOCEF_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,1008"$ -$LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1307"$ -$LK,"DOCF_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1271"$ -$LK,"SYS_SEMA_FLUSH_VGA_IMAGE",A="FL:::/Kernel/KernelA.HH,603"$ -$LK,"OPTf_NO_REG_VAR",A="FL:::/Kernel/KernelA.HH,1541"$ -$LK,"CTRLF_SHOW",A="FL:::/Kernel/KernelA.HH,3094"$ -$LK,"DOCEf_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,1096"$ -$LK,"DOCEf_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,1059"$ -$LK,"DOCEF_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,971"$ -$LK,"ISO1FileRead",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,130",BI=231$ -$LK,"ATAPIWaitReady",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,334",BI=232$ -$LK,"SC_PRTSCRN1",A="FL:::/Kernel/KernelA.HH,3590"$ -$LK,"FUF_ALL",A="FL:::/Kernel/KernelA.HH,2599"$ +$LK,"CTRLT_WIN_HSCROLL",A="FL:::/Kernel/KernelA.HH,3052"$ +$LK,"TK_IFAOT",A="FL:::/Kernel/KernelA.HH,2088"$ +$LK,"IsDotC",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,31",BI=222$ +$LK,"BDf_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HH,2640"$ +$LK,"TK_GREATER_EQU",A="FL:::/Kernel/KernelA.HH,2072"$ +$LK,"CICArg",A="FL:::/Kernel/KernelA.HH,1618"$ +$LK,"MDF_STK",A="FL:::/Kernel/KernelA.HH,1566"$ +$LK,"DOCEf_CENTER_X",A="FL:::/Kernel/KernelA.HH,1065"$ +$LK,"DOCEF_CENTER_X",A="FL:::/Kernel/KernelA.HH,977"$ +$LK,"SYS_TIMER_FREQ",A="FL:::/Kernel/KernelA.HH,556"$ +$LK,"HashTablePurge",A="FL:::/Kernel/KHashB.HC.Z,107",BI=223$ +$LK,"GR_HEIGHT",A="FL:::/Kernel/KernelA.HH,3568"$ +$LK,"DOCEf_CENTER_Y",A="FL:::/Kernel/KernelA.HH,1068"$ +$LK,"DOCEF_CENTER_Y",A="FL:::/Kernel/KernelA.HH,980"$ +$LK,"Seed",A="FL:::/Kernel/KMathB.HC.Z,147",BI=224$ +$LK,"DrvsRelease",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,27",BI=225$ +$LK,"BlkDevNextFreeSlot",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,125",BI=226$ +$LK,"TASKf_FILTER_INPUT",A="FL:::/Kernel/KernelA.HH,3247"$ +$LK,"DOCEF_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,996"$ +$LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1295"$ +$LK,"DOCF_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HH,1259"$ +$LK,"OPTf_NO_REG_VAR",A="FL:::/Kernel/KernelA.HH,1529"$ +$LK,"CTRLF_SHOW",A="FL:::/Kernel/KernelA.HH,3056"$ +$LK,"DOCEf_REFRESH_DATA",A="FL:::/Kernel/KernelA.HH,1084"$ +$LK,"DOCEf_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,1047"$ +$LK,"DOCEF_LEFT_EXP",A="FL:::/Kernel/KernelA.HH,959"$ +$LK,"ISO1FileRead",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,130",BI=227$ +$LK,"ATAPIWaitReady",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,337",BI=228$ +$LK,"SC_PRTSCRN1",A="FL:::/Kernel/KernelA.HH,3543"$ +$LK,"FUF_ALL",A="FL:::/Kernel/KernelA.HH,2586"$ $LK,"STR_LEN",A="FL:::/Kernel/KernelA.HH,41"$ -$LK,"DskCacheQueIns",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,53",BI=233$ -$LK,"SC_PRTSCRN2",A="FL:::/Kernel/KernelA.HH,3591"$ -$LK,"sys_semas",A="FL:::/Kernel/KernelB.HH,235"$ -$LK,"InputFilterTask",A="FL:::/Kernel/SerialDev/Message.HC.Z,1",BI=234$ +$LK,"DskCacheQueIns",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,53",BI=229$ +$LK,"SC_PRTSCRN2",A="FL:::/Kernel/KernelA.HH,3544"$ +$LK,"sys_semas",A="FL:::/Kernel/KernelB.HH,241"$ +$LK,"OS_LINUX",A="FL:::/Kernel/KernelA.HH,3886"$ +$LK,"InputFilterTask",A="FL:::/Kernel/SerialDev/Message.HC.Z,1",BI=230$ $LK,"SYS_HASH_STR",A="FL:::/Kernel/KHashA.HC.Z,4"$ -$LK,"ATAR0_CMD",A="FL:::/Kernel/KernelA.HH,2284"$ +$LK,"ATAR0_CMD",A="FL:::/Kernel/KernelA.HH,2271"$ $LK,"I_DBG",A="FL:::/Kernel/KernelA.HH,297"$ -$LK,"FATNameTo",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,130",BI=235$ -$LK,"SrvCmdQueDel",A="FL:::/Kernel/SrvCmd.HC.Z,7",BI=236$ +$LK,"FATNameTo",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,118",BI=231$ $LK,"MinI64",A="FL:::/Kernel/KernelB.HH,101"$ $LK,"MaxU64",A="FL:::/Kernel/KernelB.HH,100"$ $LK,"CallInd",A="FL:::/Kernel/KernelB.HH,49"$ -$LK,"EndianI64",A="FL:::/Kernel/KMisc.HC.Z,25",BI=237$ +$LK,"EndianI64",A="FL:::/Kernel/KMisc.HC.Z,25",BI=232$ $LK,"_MSIZE",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,337"$ -$LK,"AC_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1482"$ -$LK,"GVF_IMPORT",A="FL:::/Kernel/KernelA.HH,868"$ -$LK,"HTF_IMPORT",A="FL:::/Kernel/KernelA.HH,705"$ -$LK,"HTf_IMPORT",A="FL:::/Kernel/KernelA.HH,675"$ -$LK,"NUM_BLKDEVS",A="FL:::/Kernel/KernelA.HH,2662"$ -$LK,"IEF_PLUS_OPCODE",A="FL:::/Kernel/KernelA.HH,1727"$ -$LK,"LAPIC_ICR_LOW",A="FL:::/Kernel/KernelA.HH,496"$ -$LK,"mouse",A="FL:::/Kernel/KGlbls.HC.Z,28"$ +$LK,"AC_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1470"$ +$LK,"GVF_IMPORT",A="FL:::/Kernel/KernelA.HH,856"$ +$LK,"HTF_IMPORT",A="FL:::/Kernel/KernelA.HH,693"$ +$LK,"HTf_IMPORT",A="FL:::/Kernel/KernelA.HH,663"$ +$LK,"NUM_BLKDEVS",A="FL:::/Kernel/KernelA.HH,2649"$ +$LK,"IEF_PLUS_OPCODE",A="FL:::/Kernel/KernelA.HH,1714"$ +$LK,"LAPIC_ICR_LOW",A="FL:::/Kernel/KernelA.HH,499"$ $LK,"D3Zero",A="FL:::/Kernel/KernelB.HH,162"$ -$LK,"ST_WARN_ST",A="FL:::/Kernel/KernelA.HH,3519"$ -$LK,"FUF_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2617"$ -$LK,"DskCacheInvalidate2",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,97",BI=238$ -$LK,"CCtrl",A="FL:::/Kernel/KernelA.HH,3116"$ -$LK,"CBlkDev",A="FL:::/Kernel/KernelA.HH,2664"$ -$LK,"DOCT_SONG",A="FL:::/Kernel/KernelA.HH,941"$ -$LK,"DOCT_TREE",A="FL:::/Kernel/KernelA.HH,937"$ -$LK,"progress1_desc",A="FL:::/Kernel/KernelB.HH,208"$ -$LK,"BDS_ED_FILENAME_DRV",A="FL:::/Kernel/KernelA.HH,3271"$ -$LK,"DOCT_TEXT",A="FL:::/Kernel/KernelA.HH,901"$ +$LK,"ST_WARN_ST",A="FL:::/Kernel/KernelA.HH,3472"$ +$LK,"FUF_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2604"$ +$LK,"DskCacheInvalidate2",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,97",BI=233$ +$LK,"CCtrl",A="FL:::/Kernel/KernelA.HH,3078"$ +$LK,"CBlkDev",A="FL:::/Kernel/KernelA.HH,2651"$ +$LK,"DOCT_SONG",A="FL:::/Kernel/KernelA.HH,929"$ +$LK,"DOCT_TREE",A="FL:::/Kernel/KernelA.HH,925"$ +$LK,"progress1_desc",A="FL:::/Kernel/KernelB.HH,210"$ +$LK,"BDS_ED_FILENAME_DRV",A="FL:::/Kernel/KernelA.HH,3231"$ +$LK,"DOCT_TEXT",A="FL:::/Kernel/KernelA.HH,889"$ $LK,"CMathODE",A="FL:::/Kernel/KernelA.HH,245"$ -$LK,"WinInside",A="FL:::/Kernel/Display.HC.Z,110",BI=239$ +$LK,"WinInside",A="FL:::/Kernel/Display.HC.Z,110",BI=234$ +$LK,"SEMA_FIX",A="FL:::/Kernel/KernelA.HH,615"$ $LK,"RFLAGf_ALIGN_CHECK",A="FL:::/Kernel/KernelA.HH,322"$ -$LK,"FUf_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2590"$ -$LK,"DOCF_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1273"$ -$LK,"CMemberLst",A="FL:::/Kernel/KernelA.HH,798"$ -$LK,"DOCf_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1309"$ -$LK,"DskCacheQueRem",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,46",BI=240$ +$LK,"MsHardSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,272",BI=235$ +$LK,"FUf_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HH,2577"$ +$LK,"DOCF_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1261"$ +$LK,"CMemberLst",A="FL:::/Kernel/KernelA.HH,786"$ +$LK,"DOCf_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HH,1297"$ +$LK,"DskCacheQueRem",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,46",BI=236$ $LK,"_D3_NORM",A="FL:::/Kernel/KMathA.HC.Z,4"$ -$LK,"DOCEf_BLINK",A="FL:::/Kernel/KernelA.HH,1048"$ -$LK,"DOCEF_BLINK",A="FL:::/Kernel/KernelA.HH,1042"$ -$LK,"IsDotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,22",BI=241$ -$LK,"HashGenericAdd",A="FL:::/Kernel/KHashB.HC.Z,140",BI=242$ +$LK,"DOCEf_BLINK",A="FL:::/Kernel/KernelA.HH,1036"$ +$LK,"DOCEF_BLINK",A="FL:::/Kernel/KernelA.HH,1030"$ +$LK,"IsDotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,22",BI=237$ +$LK,"HashGenericAdd",A="FL:::/Kernel/KHashB.HC.Z,140",BI=238$ $LK,"_TASK_CONTEXT_RESTORE",A="FL:::/Kernel/Sched.HC.Z,100"$ $LK,"BFieldOrU32",A="FL:::/Kernel/KernelB.HH,32"$ -$LK,"TK_IFJIT",A="FL:::/Kernel/KernelA.HH,2102"$ -$LK,"RedSeaFileRead",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,207",BI=243$ -$LK,"MousePktRead",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,1",BI=244$ -$LK,"VGAP_CRTC_DATA",A="FL:::/Kernel/KernelA.HH,3735"$ -$LK,"ARGT_REL32",A="FL:::/Kernel/KernelA.HH,1880"$ -$LK,"ARGT_REL16",A="FL:::/Kernel/KernelA.HH,1879"$ -$LK,"cpu_structs",A="FL:::/Kernel/KernelB.HH,231"$ -$LK,"SC_DELETE",A="FL:::/Kernel/KernelA.HH,3575"$ +$LK,"TK_IFJIT",A="FL:::/Kernel/KernelA.HH,2089"$ +$LK,"RedSeaFileRead",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,207",BI=239$ +$LK,"VGAP_CRTC_DATA",A="FL:::/Kernel/KernelA.HH,3688"$ +$LK,"ARGT_REL32",A="FL:::/Kernel/KernelA.HH,1867"$ +$LK,"ARGT_REL16",A="FL:::/Kernel/KernelA.HH,1866"$ +$LK,"mem_page_size",A="FL:::/Kernel/KernelB.HH,284"$ +$LK,"cpu_structs",A="FL:::/Kernel/KernelB.HH,237"$ +$LK,"SC_DELETE",A="FL:::/Kernel/KernelA.HH,3528"$ $LK,"MAX_U64_F64",A="FL:::/Kernel/KernelA.HH,45"$ +$LK,"MsHardGetType",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,103",BI=240$ $LK,"CLine",A="FL:::/Kernel/EdLite.HC.Z,1"$ -$LK,"C:/Doc/TimeCycles.DD.Z",A="FL:::/Kernel/KernelB.HH,284"$ -$LK,"ACD_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1519"$ -$LK,"REGT_SEG",A="FL:::/Kernel/KernelA.HH,744"$ +$LK,"C:/Doc/TimeCycles.DD.Z",A="FL:::/Kernel/KernelB.HH,291"$ +$LK,"ACD_MAX_FILLINS",A="FL:::/Kernel/KernelA.HH,1507"$ +$LK,"REGT_SEG",A="FL:::/Kernel/KernelA.HH,732"$ $LK,"CMass",A="FL:::/Kernel/KernelA.HH,209"$ -$LK,"GetStr",A="FL:::/Kernel/SerialDev/Message.HC.Z,193",BI=245$ -$LK,"LTRED",A="FL:::/Kernel/KernelA.HH,2972"$ -$LK,"FSG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,2697"$ +$LK,"GetStr",A="FL:::/Kernel/SerialDev/Message.HC.Z,193",BI=241$ +$LK,"LTRED",A="FL:::/Kernel/KernelA.HH,2940"$ +$LK,"FSG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,2684"$ $LK,"StrIMatch",A="FL:::/Kernel/StrA.HC.Z,319"$ -$LK,"HTG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,700"$ +$LK,"HTG_TYPE_MASK",A="FL:::/Kernel/KernelA.HH,688"$ $LK,"Sign",A="FL:::/Kernel/KernelB.HH,140"$ -$LK,"ExpandBuf",A="FL:::/Kernel/Compress.HC.Z,250",BI=246$ -$LK,"ICF_ALT_TEMPLATE",A="FL:::/Kernel/KernelA.HH,1612"$ -$LK,"DOCT_PAGE_LEN",A="FL:::/Kernel/KernelA.HH,910"$ -$LK,"RLf_RAW",A="FL:::/Kernel/KernelA.HH,446"$ -$LK,"BootDVDProbe",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,1",BI=247$ -$LK,"ToggleZorNotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,265",BI=248$ -$LK,"VGAP_ATTR_INDEX",A="FL:::/Kernel/KernelA.HH,3724"$ +$LK,"ExpandBuf",A="FL:::/Kernel/Compress.HC.Z,250",BI=242$ +$LK,"ICF_ALT_TEMPLATE",A="FL:::/Kernel/KernelA.HH,1600"$ +$LK,"DOCT_PAGE_LEN",A="FL:::/Kernel/KernelA.HH,898"$ +$LK,"RLf_RAW",A="FL:::/Kernel/KernelA.HH,448"$ +$LK,"BootDVDProbe",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,1",BI=243$ +$LK,"ToggleZorNotZ",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,265",BI=244$ +$LK,"VGAP_ATTR_INDEX",A="FL:::/Kernel/KernelA.HH,3677"$ $LK,"D3MulEqu",A="FL:::/Kernel/KernelB.HH,156"$ -$LK,"BDS_CONST",A="FL:::/Kernel/KernelA.HH,3269"$ +$LK,"BDS_CONST",A="FL:::/Kernel/KernelA.HH,3229"$ $LK,"MP_MAX_PROCESSORS",A="FL:::/Kernel/KernelA.HH,304"$ -$LK,"SysGlblsInit",A="FL:::/Kernel/KEnd.HC.Z,1",BI=249$ -$LK,"PutSrcLink",A="FL:::/Kernel/FunSeg.HC.Z,295",BI=250$ -$LK,"CMenu",A="FL:::/Kernel/KernelA.HH,3150"$ -$LK,"BDT_ATAPI",A="FL:::/Kernel/KernelA.HH,2636"$ -$LK,"FUF_MAP",A="FL:::/Kernel/KernelA.HH,2604"$ -$LK,"CFAT32DirEntry",A="FL:::/Kernel/KernelA.HH,2380"$ -$LK,"ACD_POS_END",A="FL:::/Kernel/KernelA.HH,1507"$ -$LK,"DOCT_INVERT",A="FL:::/Kernel/KernelA.HH,923"$ -$LK,"CMT_HASH_ENTRY",A="FL:::/Kernel/KernelA.HH,1692"$ -$LK,"RLf_VGA",A="FL:::/Kernel/KernelA.HH,440"$ -$LK,"WIf_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1452"$ -$LK,"LAPIC_LVT_PERF",A="FL:::/Kernel/KernelA.HH,501"$ -$LK,"SC_F1",A="FL:::/Kernel/KernelA.HH,3576"$ -$LK,"SYS_SEMAS",A="FL:::/Kernel/KStart32.HC.Z,58"$ -$LK,"SC_F2",A="FL:::/Kernel/KernelA.HH,3577"$ -$LK,"BirthWait",A="FL:::/Kernel/KTask.HC.Z,28",BI=251$ +$LK,"SysGlblsInit",A="FL:::/Kernel/KEnd.HC.Z,1",BI=245$ +$LK,"PutSrcLink",A="FL:::/Kernel/FunSeg.HC.Z,295",BI=246$ +$LK,"CMenu",A="FL:::/Kernel/KernelA.HH,3112"$ +$LK,"JobRunOne",A="FL:::/Kernel/Job.HC.Z,269",BI=247$ +$LK,"BDT_ATAPI",A="FL:::/Kernel/KernelA.HH,2623"$ +$LK,"FUF_MAP",A="FL:::/Kernel/KernelA.HH,2591"$ +$LK,"CFAT32DirEntry",A="FL:::/Kernel/KernelA.HH,2367"$ +$LK,"ACD_POS_END",A="FL:::/Kernel/KernelA.HH,1495"$ +$LK,"DOCT_INVERT",A="FL:::/Kernel/KernelA.HH,911"$ +$LK,"CMT_HASH_ENTRY",A="FL:::/Kernel/KernelA.HH,1679"$ +$LK,"RLf_VGA",A="FL:::/Kernel/KernelA.HH,441"$ +$LK,"LAPIC_LVT_PERF",A="FL:::/Kernel/KernelA.HH,504"$ +$LK,"SC_F1",A="FL:::/Kernel/KernelA.HH,3529"$ +$LK,"SYS_SEMAS",A="FL:::/Kernel/KStart32.HC.Z,72"$ +$LK,"SC_F2",A="FL:::/Kernel/KernelA.HH,3530"$ +$LK,"BirthWait",A="FL:::/Kernel/KTask.HC.Z,31",BI=248$ +$LK,"MsHardRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,114",BI=249$ $LK,"SYS_VAR_INIT_FLAG",A="FL::/Tmp.DD.Z,1"$ $LK,"SYS_MEM_INIT_FLAG",A="FL::/Tmp.DD.Z,1"$ -$LK,"SC_F3",A="FL:::/Kernel/KernelA.HH,3578"$ +$LK,"SC_F3",A="FL:::/Kernel/KernelA.HH,3531"$ $LK,"SignI64",A="FL:::/Kernel/KernelB.HH,104"$ -$LK,"SC_F4",A="FL:::/Kernel/KernelA.HH,3579"$ -$LK,"WSSf_SET_TO_POS",A="FL:::/Kernel/KernelA.HH,3100"$ -$LK,"RS_ATTR_SYSTEM",A="FL:::/Kernel/KernelA.HH,2528"$ -$LK,"SYS_SEMA_MUTE",A="FL:::/Kernel/KernelA.HH,611"$ +$LK,"SC_F4",A="FL:::/Kernel/KernelA.HH,3532"$ +$LK,"WSSf_SET_TO_POS",A="FL:::/Kernel/KernelA.HH,3062"$ +$LK,"RS_ATTR_SYSTEM",A="FL:::/Kernel/KernelA.HH,2515"$ $LK,"I_BPT",A="FL:::/Kernel/KernelA.HH,290"$ $LK,"_TAKE_EXCEPT",A="FL:::/Kernel/KExcept.HC.Z,20"$ -$LK,"DefineCnt",A="FL:::/Kernel/KDefine.HC.Z,74",BI=252$ -$LK,"SC_F5",A="FL:::/Kernel/KernelA.HH,3580"$ -$LK,"WIF_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1421"$ -$LK,"RedSeaCd",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,236",BI=253$ -$LK,"SC_F6",A="FL:::/Kernel/KernelA.HH,3581"$ -$LK,"SysGrInit",A="FL:::/Kernel/KEnd.HC.Z,62",BI=254$ -$LK,"ArcCtrlDel",A="FL:::/Kernel/Compress.HC.Z,244",BI=255$ -$LK,"SysBadMAlloc",A="FL:::/Kernel/Mem/Mem512.HC.Z,6",BI=256$ -$LK,"SC_F7",A="FL:::/Kernel/KernelA.HH,3582"$ -$LK,"DOCSS_NORMAL",A="FL:::/Kernel/KernelA.HH,1129"$ -$LK,"GVF_EXTERN",A="FL:::/Kernel/KernelA.HH,869"$ -$LK,"blkdev_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,309"$ -$LK,"SC_F8",A="FL:::/Kernel/KernelA.HH,3583"$ -$LK,"Mute",A="FL:::/Kernel/KMisc.HC.Z,216",BI=257$ +$LK,"DefineCnt",A="FL:::/Kernel/KDefine.HC.Z,74",BI=250$ +$LK,"SC_F5",A="FL:::/Kernel/KernelA.HH,3533"$ +$LK,"WIF_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1409"$ +$LK,"RedSeaCd",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,236",BI=251$ +$LK,"JobDel",A="FL:::/Kernel/Job.HC.Z,1",BI=252$ +$LK,"SC_F6",A="FL:::/Kernel/KernelA.HH,3534"$ +$LK,"SysGrInit",A="FL:::/Kernel/KEnd.HC.Z,63",BI=253$ +$LK,"ArcCtrlDel",A="FL:::/Kernel/Compress.HC.Z,244",BI=254$ +$LK,"SysBadMAlloc",A="FL:::/Kernel/Mem/MemPag.HC.Z,6",BI=255$ +$LK,"SC_F7",A="FL:::/Kernel/KernelA.HH,3535"$ +$LK,"DOCSS_NORMAL",A="FL:::/Kernel/KernelA.HH,1117"$ +$LK,"GVF_EXTERN",A="FL:::/Kernel/KernelA.HH,857"$ +$LK,"blkdev_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,319"$ +$LK,"SC_F8",A="FL:::/Kernel/KernelA.HH,3536"$ +$LK,"Mute",A="FL:::/Kernel/KMisc.HC.Z,232",BI=256$ $LK,"INT_FAULT",A="FL:::/Kernel/KInts.HC.Z,62"$ -$LK,"progress2_desc",A="FL:::/Kernel/KernelB.HH,213"$ -$LK,"DCSF_PALETTE_GET",A="FL:::/Kernel/KernelA.HH,3647"$ -$LK,"SC_F9",A="FL:::/Kernel/KernelA.HH,3584"$ -$LK,"DOCEF_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,1004"$ +$LK,"progress2_desc",A="FL:::/Kernel/KernelB.HH,216"$ +$LK,"DCSF_PALETTE_GET",A="FL:::/Kernel/KernelA.HH,3600"$ +$LK,"SC_F9",A="FL:::/Kernel/KernelA.HH,3537"$ +$LK,"DOCEF_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,992"$ +$LK,"KbdMsRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,284",BI=257$ $LK,"KbdBuildSC",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,301",BI=258$ -$LK,"CInst",A="FL:::/Kernel/KernelA.HH,1742"$ -$LK,"IOAPICID",A="FL:::/Kernel/KernelA.HH,513"$ +$LK,"CInst",A="FL:::/Kernel/KernelA.HH,1729"$ +$LK,"IOAPICID",A="FL:::/Kernel/KernelA.HH,516"$ $LK,"RFLAGf_SIGN",A="FL:::/Kernel/KernelA.HH,312"$ -$LK,"DKGRAY",A="FL:::/Kernel/KernelA.HH,2968"$ -$LK,"DOCEF_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,997"$ +$LK,"DKGRAY",A="FL:::/Kernel/KernelA.HH,2936"$ +$LK,"DOCEF_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,985"$ $LK,"PutDirLink",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,200",BI=259$ $LK,"EndianU32",A="FL:::/Kernel/KMisc.HC.Z,15",BI=260$ $LK,"EndianU16",A="FL:::/Kernel/KMisc.HC.Z,7",BI=261$ -$LK,"DOCEf_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,1092"$ -$LK,"DOCEF_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,985"$ -$LK,"sys_pci_busses",A="FL:::/Kernel/KernelB.HH,241"$ -$LK,"BOOT_STK_SIZE",A="FL:::/Kernel/KernelA.HH,3882"$ -$LK,"TTS_LOCKED_CONST",A="FL:::/Kernel/KernelA.HH,3275"$ -$LK,"CCf_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2149"$ -$LK,"CCF_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2148"$ -$LK,"LAPIC_APIC_VERSION",A="FL:::/Kernel/KernelA.HH,481"$ -$LK,"PutS",A="FL:::/Kernel/KeyDev.HC.Z,29",BI=262$ -$LK,"DOCEf_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,1085"$ -$LK,"DOCEf_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,1073"$ -$LK,"CDocBin",A="FL:::/Kernel/KernelA.HH,1115"$ -$LK,"LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,478"$ +$LK,"MemPagTaskFree",A="FL:::/Kernel/Mem/MemPag.HC.Z,153",BI=262$ +$LK,"DOCEf_SOLID_BORDER",A="FL:::/Kernel/KernelA.HH,1080"$ +$LK,"DOCEF_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,973"$ +$LK,"sys_pci_busses",A="FL:::/Kernel/KernelB.HH,247"$ +$LK,"BOOT_STK_SIZE",A="FL:::/Kernel/KernelA.HH,3837"$ +$LK,"TTS_LOCKED_CONST",A="FL:::/Kernel/KernelA.HH,3235"$ +$LK,"CCf_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2136"$ +$LK,"CCF_FUN_EXP",A="FL:::/Kernel/KernelA.HH,2135"$ +$LK,"LAPIC_APIC_VERSION",A="FL:::/Kernel/KernelA.HH,484"$ +$LK,"PutS",A="FL:::/Kernel/KeyDev.HC.Z,29",BI=263$ +$LK,"DOCEf_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HH,1073"$ +$LK,"DOCEf_LEFT_IN_STR",A="FL:::/Kernel/KernelA.HH,1061"$ +$LK,"SEMA_VGA",A="FL:::/Kernel/KernelA.HH,608"$ +$LK,"CDocBin",A="FL:::/Kernel/KernelA.HH,1103"$ +$LK,"LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,481"$ $LK,"MAX_F64",A="FL:::/Kernel/KernelA.HH,46"$ -$LK,"StrPrintJoin",A="FL:::/Kernel/StrPrint.HC.Z,208",BI=263$ -$LK,"IA32_GS_BASE",A="FL:::/Kernel/KernelA.HH,524"$ +$LK,"StrPrintJoin",A="FL:::/Kernel/StrPrint.HC.Z,208",BI=264$ +$LK,"IA32_GS_BASE",A="FL:::/Kernel/KernelA.HH,527"$ $LK,"log2_e",A="FL:::/Kernel/KernelA.HH,54"$ -$LK,"CurDir",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,281",BI=264$ +$LK,"CurDir",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,281",BI=265$ $LK,"MinU64",A="FL:::/Kernel/KernelB.HH,102"$ $LK,"_SYS_HLT",A="FL:::/Kernel/KUtils.HC.Z,468"$ -$LK,"CCF_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2159"$ -$LK,"OPTf_KEEP_PRIVATE",A="FL:::/Kernel/KernelA.HH,1540"$ +$LK,"CCF_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2146"$ +$LK,"OPTf_KEEP_PRIVATE",A="FL:::/Kernel/KernelA.HH,1528"$ +$LK,"SEMA_SND",A="FL:::/Kernel/KernelA.HH,599"$ $LK,"MAX_I32",A="FL:::/Kernel/KernelA.HH,33"$ $LK,"MAX_I16",A="FL:::/Kernel/KernelA.HH,29"$ -$LK,"HTF_EXPORT",A="FL:::/Kernel/KernelA.HH,704"$ -$LK,"HTf_EXPORT",A="FL:::/Kernel/KernelA.HH,674"$ -$LK,"DrvDel",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,69",BI=265$ -$LK,"ATAPIReadBlks2",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,385",BI=266$ +$LK,"HTF_EXPORT",A="FL:::/Kernel/KernelA.HH,692"$ +$LK,"HTf_EXPORT",A="FL:::/Kernel/KernelA.HH,662"$ +$LK,"DrvDel",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,69",BI=266$ +$LK,"ATAPIReadBlks2",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,388",BI=267$ $LK,"_D3_UNIT",A="FL:::/Kernel/KMathA.HC.Z,305"$ -$LK,"CCf_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2160"$ -$LK,"POP_C_REGS",A="FL:::/Kernel/KernelA.HH,1765"$ +$LK,"CCf_AOT_COMPILE",A="FL:::/Kernel/KernelA.HH,2147"$ +$LK,"POP_C_REGS",A="FL:::/Kernel/KernelA.HH,1752"$ $LK,"_STRIMATCH",A="FL:::/Kernel/StrA.HC.Z,262"$ -$LK,"DrvChk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,142",BI=267$ -$LK,"CSema",A="FL:::/Kernel/KernelA.HH,588"$ -$LK,"EXT_HEAPLOG_MALLOC",A="FL:::/Kernel/KernelA.HH,578"$ -$LK,"GR_WIDTH",A="FL:::/Kernel/KernelA.HH,3614"$ -$LK,"DOCT_SOFT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,903"$ -$LK,"GetBaseUnit",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,176",BI=268$ -$LK,"FixSet",A="FL:::/Kernel/EdLite.HC.Z,327",BI=269$ -$LK,"IPSet",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,43",BI=270$ -$LK,"DOCf_SEL",A="FL:::/Kernel/KernelA.HH,1324"$ -$LK,"SYS_SEMA_HEAPLOG_LOCK",A="FL:::/Kernel/KernelA.HH,601"$ +$LK,"DrvChk",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,142",BI=268$ +$LK,"CSema",A="FL:::/Kernel/KernelA.HH,590"$ +$LK,"EXT_HEAPLOG_MALLOC",A="FL:::/Kernel/KernelA.HH,581"$ +$LK,"GR_WIDTH",A="FL:::/Kernel/KernelA.HH,3567"$ +$LK,"DOCT_SOFT_NEW_LINE",A="FL:::/Kernel/KernelA.HH,891"$ +$LK,"GetBaseUnit",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,186",BI=269$ +$LK,"FixSet",A="FL:::/Kernel/EdLite.HC.Z,327",BI=270$ +$LK,"DOCf_SEL",A="FL:::/Kernel/KernelA.HH,1312"$ $LK,"sqrt2",A="FL:::/Kernel/KernelA.HH,57"$ -$LK,"ATAR0_SEL",A="FL:::/Kernel/KernelA.HH,2282"$ +$LK,"VM_QEMU",A="FL:::/Kernel/KernelA.HH,3892"$ +$LK,"ATAR0_SEL",A="FL:::/Kernel/KernelA.HH,2269"$ $LK,"CQueVectU8",A="FL:::/Kernel/KernelA.HH,163"$ -$LK,"IntFaultHandlersNew",A="FL:::/Kernel/KInts.HC.Z,166",BI=271$ -$LK,"TASKf_INPUT_FILTER_TASK",A="FL:::/Kernel/KernelA.HH,3286"$ -$LK,"OM_CB",A="FL:::/Kernel/KernelA.HH,1869"$ +$LK,"ms_hard",A="FL:::/Kernel/KGlbls.HC.Z,28"$ +$LK,"mem_boot_base",A="FL:::/Kernel/KernelB.HH,37"$ +$LK,"TASKf_INPUT_FILTER_TASK",A="FL:::/Kernel/KernelA.HH,3246"$ +$LK,"OM_CB",A="FL:::/Kernel/KernelA.HH,1856"$ $LK,"MAX_I64",A="FL:::/Kernel/KernelA.HH,37"$ -$LK,"throw",A="FL:::/Kernel/KExcept.HC.Z,84",BI=272$ -$LK,"sys_boot_base",A="FL:::/Kernel/KernelB.HH,37"$ -$LK,"BDF_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2642"$ -$LK,"TK_AND_AND",A="FL:::/Kernel/KernelA.HH,2086"$ -$LK,"REG_NONE",A="FL:::/Kernel/KernelA.HH,1785"$ -$LK,"OC_LOCK_PREFIX",A="FL:::/Kernel/KernelA.HH,1757"$ -$LK,"WIF_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1414"$ -$LK,"Ff_INTERRUPT",A="FL:::/Kernel/KernelA.HH,848"$ -$LK,"CFunSegCache",A="FL:::/Kernel/KernelA.HH,3847"$ -$LK,"OM_CD",A="FL:::/Kernel/KernelA.HH,1871"$ -$LK,"AAT_ADD_U8",A="FL:::/Kernel/KernelA.HH,1967"$ -$LK,"REGT_XMM",A="FL:::/Kernel/KernelA.HH,747"$ -$LK,"DOCSS_CPP_Z_COMMENT",A="FL:::/Kernel/KernelA.HH,1133"$ -$LK,"DOCT_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,925"$ -$LK,"PutExcept",A="FL:::/Kernel/KExcept.HC.Z,45",BI=273$ +$LK,"throw",A="FL:::/Kernel/KExcept.HC.Z,84",BI=271$ +$LK,"BDF_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2629"$ +$LK,"TK_AND_AND",A="FL:::/Kernel/KernelA.HH,2073"$ +$LK,"REG_NONE",A="FL:::/Kernel/KernelA.HH,1772"$ +$LK,"OC_LOCK_PREFIX",A="FL:::/Kernel/KernelA.HH,1744"$ +$LK,"Ff_INTERRUPT",A="FL:::/Kernel/KernelA.HH,836"$ +$LK,"CFunSegCache",A="FL:::/Kernel/KernelA.HH,3801"$ +$LK,"OM_CD",A="FL:::/Kernel/KernelA.HH,1858"$ +$LK,"AAT_ADD_U8",A="FL:::/Kernel/KernelA.HH,1954"$ +$LK,"REGT_XMM",A="FL:::/Kernel/KernelA.HH,735"$ +$LK,"DOCSS_CPP_Z_COMMENT",A="FL:::/Kernel/KernelA.HH,1121"$ +$LK,"DOCT_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,913"$ +$LK,"RLF_16MEG_SYS_CODE_BP",A="FL:::/Kernel/KernelA.HH,464"$ +$LK,"PutExcept",A="FL:::/Kernel/KExcept.HC.Z,45",BI=272$ $LK,"TestExcept",A="FL:::/Kernel/KExcept.HC.Z,41"$ -$LK,"CColorROPU32",A="FL:::/Kernel/KernelA.HH,2985"$ -$LK,"CColorROPU16",A="FL:::/Kernel/KernelA.HH,2981"$ -$LK,"DOCT_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,926"$ -$LK,"HTT_FILE",A="FL:::/Kernel/KernelA.HH,696"$ -$LK,"HTT_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,685"$ -$LK,"HTt_FILE",A="FL:::/Kernel/KernelA.HH,666"$ -$LK,"Push",A="FL:::/Kernel/KernelB.HH,250"$ -$LK,"SVCf_FREE_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3188"$ -$LK,"HTt_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,655"$ +$LK,"char_bmp_printable",A="FL:::/Kernel/StrA.HC.Z,376"$ +$LK,"CColorROPU32",A="FL:::/Kernel/KernelA.HH,2953"$ +$LK,"CColorROPU16",A="FL:::/Kernel/KernelA.HH,2949"$ +$LK,"DOCT_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,914"$ +$LK,"HTT_FILE",A="FL:::/Kernel/KernelA.HH,684"$ +$LK,"HTT_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,673"$ +$LK,"HTt_FILE",A="FL:::/Kernel/KernelA.HH,654"$ +$LK,"Push",A="FL:::/Kernel/KernelB.HH,256"$ +$LK,"HTt_DEFINE_STR",A="FL:::/Kernel/KernelA.HH,643"$ $LK,"STK_REP_LEN",A="FL:::/Kernel/KDbg.HC.Z,102"$ $LK,"I_NMI",A="FL:::/Kernel/KernelA.HH,289"$ -$LK,"Date2ISO1",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,1",BI=274$ +$LK,"Date2ISO1",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,1",BI=273$ $LK,"ModU64",A="FL:::/Kernel/KernelB.HH,103"$ -$LK,"SVCf_EXIT_ON_COMPLETE",A="FL:::/Kernel/KernelA.HH,3182"$ -$LK,"DOCG_DBL_BUF_FLAGS",A="FL:::/Kernel/KernelA.HH,959"$ -$LK,"JobResScan",A="FL:::/Kernel/SrvCmd.HC.Z,163",BI=275$ -$LK,"WIf_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1446"$ -$LK,"WIf_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1440"$ -$LK,"CTask",A="FL:::/Kernel/KernelA.HH,3322"$ +$LK,"DOCG_DBL_BUF_FLAGS",A="FL:::/Kernel/KernelA.HH,947"$ +$LK,"JobResScan",A="FL:::/Kernel/Job.HC.Z,164",BI=274$ +$LK,"WIf_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HH,1434"$ +$LK,"CTask",A="FL:::/Kernel/KernelA.HH,3283"$ $LK,"C:/Doc/Bit.DD.Z",A="FL:::/Kernel/KernelB.HH,9"$ -$LK,"OC_JMP_REL8",A="FL:::/Kernel/KernelA.HH,1761"$ +$LK,"C:/Doc/Pags.DD.Z",A="FL:::/Kernel/KernelA.HH,2825"$ +$LK,"OC_JMP_REL8",A="FL:::/Kernel/KernelA.HH,1748"$ $LK,"_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.HC.Z,143"$ $LK,"_D3_ZERO",A="FL:::/Kernel/KMathA.HC.Z,201"$ -$LK,"REGG_STK_TMP",A="FL:::/Kernel/KernelA.HH,1791"$ -$LK,"Str2F64",A="FL:::/Kernel/StrScan.HC.Z,55",BI=276$ +$LK,"REGG_STK_TMP",A="FL:::/Kernel/KernelA.HH,1778"$ +$LK,"Str2F64",A="FL:::/Kernel/StrScan.HC.Z,55",BI=275$ $LK,"_YIELD",A="FL:::/Kernel/Sched.HC.Z,157"$ -$LK,"OM_IB",A="FL:::/Kernel/KernelA.HH,1873"$ -$LK,"progress3_desc",A="FL:::/Kernel/KernelB.HH,218"$ -$LK,"DCF_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3631"$ -$LK,"OM_ID",A="FL:::/Kernel/KernelA.HH,1875"$ -$LK,"OM_CP",A="FL:::/Kernel/KernelA.HH,1872"$ -$LK,"WIF_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HH,1423"$ +$LK,"OM_IB",A="FL:::/Kernel/KernelA.HH,1860"$ +$LK,"progress3_desc",A="FL:::/Kernel/KernelB.HH,222"$ +$LK,"DCF_SYMMETRY",A="FL:::/Kernel/KernelA.HH,3584"$ +$LK,"OM_ID",A="FL:::/Kernel/KernelA.HH,1862"$ +$LK,"OM_CP",A="FL:::/Kernel/KernelA.HH,1859"$ $LK,"_ROUND",A="FL:::/Kernel/KMathA.HC.Z,380"$ +$LK,"OS_OTHER",A="FL:::/Kernel/KernelA.HH,3884"$ $LK,"RFLAGf_TRAP",A="FL:::/Kernel/KernelA.HH,313"$ $LK,"SYS_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.HC.Z,109"$ -$LK,"BOOT_SRC_DVD",A="FL:::/Kernel/KernelA.HH,3888"$ -$LK,"FUF_RECURSE",A="FL:::/Kernel/KernelA.HH,2596"$ -$LK,"FUf_RECURSE",A="FL:::/Kernel/KernelA.HH,2569"$ +$LK,"BOOT_SRC_DVD",A="FL:::/Kernel/KernelA.HH,3843"$ +$LK,"FUF_RECURSE",A="FL:::/Kernel/KernelA.HH,2583"$ +$LK,"FUf_RECURSE",A="FL:::/Kernel/KernelA.HH,2556"$ $LK,"MemCmp",A="FL:::/Kernel/KernelB.HH,166"$ -$LK,"SVCf_DONE",A="FL:::/Kernel/KernelA.HH,3186"$ -$LK,"SC_PAGE_UP",A="FL:::/Kernel/KernelA.HH,3570"$ -$LK,"User",A="FL:::/Kernel/KTask.HC.Z,411",BI=277$ -$LK,"WIF_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HH,1425"$ -$LK,"DOCEf_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,1061"$ -$LK,"DOCEF_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,973"$ -$LK,"DirEntryDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,17",BI=278$ -$LK,"CLexFile",A="FL:::/Kernel/KernelA.HH,2035"$ -$LK,"OM_CW",A="FL:::/Kernel/KernelA.HH,1870"$ -$LK,"DOCF_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1279"$ -$LK,"IA32_LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,521"$ -$LK,"ATACmd",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,59",BI=279$ -$LK,"BusyWait",A="FL:::/Kernel/KMisc.HC.Z,136",BI=280$ -$LK,"FILEMASK_DD",A="FL:::/Kernel/KernelA.HH,2291"$ -$LK,"DOCEf_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,1066"$ -$LK,"DOCEG_DONT_EDIT",A="FL:::/Kernel/KernelA.HH,1036"$ -$LK,"DOCEF_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,978"$ -$LK,"DOCEf_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,1067"$ -$LK,"DOCEF_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,979"$ -$LK,"Str2I64",A="FL:::/Kernel/StrScan.HC.Z,1",BI=281$ +$LK,"ONA_REST",A="FL:::/Kernel/KernelA.HH,3784"$ +$LK,"SC_PAGE_UP",A="FL:::/Kernel/KernelA.HH,3523"$ +$LK,"User",A="FL:::/Kernel/KTask.HC.Z,424",BI=276$ +$LK,"MSG_MS_L_D_DOWN",A="FL:::/Kernel/KernelA.HH,3194"$ +$LK,"DOCEf_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,1049"$ +$LK,"DOCEF_RIGHT_EXP",A="FL:::/Kernel/KernelA.HH,961"$ +$LK,"DirEntryDel",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,17",BI=277$ +$LK,"CLexFile",A="FL:::/Kernel/KernelA.HH,2022"$ +$LK,"OM_CW",A="FL:::/Kernel/KernelA.HH,1857"$ +$LK,"DOCF_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1267"$ +$LK,"IA32_LAPIC_BASE",A="FL:::/Kernel/KernelA.HH,524"$ +$LK,"ATACmd",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,59",BI=278$ +$LK,"FILEMASK_DD",A="FL:::/Kernel/KernelA.HH,2278"$ +$LK,"DOCEf_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,1054"$ +$LK,"DOCEG_DONT_EDIT",A="FL:::/Kernel/KernelA.HH,1024"$ +$LK,"DOCEF_SHIFTED_X",A="FL:::/Kernel/KernelA.HH,966"$ +$LK,"SEMA_HEAPLOG_ACTIVE",A="FL:::/Kernel/KernelA.HH,600"$ +$LK,"DOCEf_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,1055"$ +$LK,"DOCEF_SHIFTED_Y",A="FL:::/Kernel/KernelA.HH,967"$ +$LK,"Str2I64",A="FL:::/Kernel/StrScan.HC.Z,1",BI=279$ $LK,"Sqrt",A="FL:::/Kernel/KernelB.HH,109"$ -$LK,"DrvMap",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,242",BI=282$ -$LK,"NowDateTimeStruct",A="FL:::/Kernel/KDate.HC.Z,133",BI=283$ -$LK,"YorN",A="FL:::/Kernel/StrB.HC.Z,87",BI=284$ -$LK,"MT_CD",A="FL:::/Kernel/KernelA.HH,2543"$ +$LK,"DrvMap",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,252",BI=280$ +$LK,"NowDateTimeStruct",A="FL:::/Kernel/KDate.HC.Z,133",BI=281$ +$LK,"YorN",A="FL:::/Kernel/StrB.HC.Z,87",BI=282$ +$LK,"MT_CD",A="FL:::/Kernel/KernelA.HH,2530"$ $LK,"RFLAGf_VINT",A="FL:::/Kernel/KernelA.HH,323"$ -$LK,"DCF_ON_TOP",A="FL:::/Kernel/KernelA.HH,3643"$ -$LK,"ACD_DEF",A="FL:::/Kernel/KernelA.HH,1502"$ -$LK,"DOCEF_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,976"$ -$LK,"SYS_CPU_STRUCTS",A="FL:::/Kernel/KStart32.HC.Z,50"$ -$LK,"SVCT_MSG",A="FL:::/Kernel/KernelA.HH,3192"$ -$LK,"DOCf_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1315"$ -$LK,"CDocEntryBase",A="FL:::/Kernel/KernelA.HH,1160"$ -$LK,"MLF_STR_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,777"$ -$LK,"ArcCtrlNew",A="FL:::/Kernel/Compress.HC.Z,221",BI=285$ -$LK,"DCF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,3638"$ -$LK,"SYS_SEMA_HEAPLOG_ACTIVE",A="FL:::/Kernel/KernelA.HH,600"$ -$LK,"DOC_SCROLL_SPEED",A="FL:::/Kernel/KernelA.HH,1127"$ -$LK,"ATTRf_SEL",A="FL:::/Kernel/KernelA.HH,897"$ -$LK,"DOCEf_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,1064"$ +$LK,"DCF_ON_TOP",A="FL:::/Kernel/KernelA.HH,3596"$ +$LK,"ACD_DEF",A="FL:::/Kernel/KernelA.HH,1490"$ +$LK,"DOCEF_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,964"$ +$LK,"SYS_CPU_STRUCTS",A="FL:::/Kernel/KStart32.HC.Z,64"$ +$LK,"DOCf_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HH,1303"$ +$LK,"CDocEntryBase",A="FL:::/Kernel/KernelA.HH,1148"$ +$LK,"MLF_STR_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HH,765"$ +$LK,"ArcCtrlNew",A="FL:::/Kernel/Compress.HC.Z,221",BI=283$ +$LK,"DCF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,3591"$ +$LK,"DOC_SCROLL_SPEED",A="FL:::/Kernel/KernelA.HH,1115"$ +$LK,"ATTRf_SEL",A="FL:::/Kernel/KernelA.HH,885"$ +$LK,"DOCEf_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HH,1052"$ $LK,"SSF_NO_TENSION",A="FL:::/Kernel/KernelA.HH,226"$ $LK,"I32",A="FL:::/Kernel/KernelA.HH,87"$ $LK,"I16",A="FL:::/Kernel/KernelA.HH,73"$ $LK,"MemCpy",A="FL:::/Kernel/KernelB.HH,168"$ -$LK,"CT_NONE",A="FL:::/Kernel/KernelA.HH,3744"$ -$LK,"OM_IW",A="FL:::/Kernel/KernelA.HH,1874"$ -$LK,"VGAP_DATA",A="FL:::/Kernel/KernelA.HH,3729"$ -$LK,"OM_NO",A="FL:::/Kernel/KernelA.HH,1868"$ -$LK,"IET_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,414"$ -$LK,"GVF_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,870"$ -$LK,"DefineSub",A="FL:::/Kernel/KDefine.HC.Z,60",BI=286$ -$LK,"WHITE",A="FL:::/Kernel/KernelA.HH,2975"$ -$LK,"ATA_READ_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2265"$ -$LK,"DOCEF_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,980"$ -$LK,"DOCEf_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,1094"$ -$LK,"ISO1T_SUPPLEMENTARY_DESC",A="FL:::/Kernel/KernelA.HH,2480"$ -$LK,"DOCEf_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,1068"$ -$LK,"MPInt",A="FL:::/Kernel/MultiProc.HC.Z,132",BI=287$ -$LK,"BOOT_SRC_RAM",A="FL:::/Kernel/KernelA.HH,3886"$ -$LK,"TK_AND_EQU",A="FL:::/Kernel/KernelA.HH,2093"$ +$LK,"CT_NONE",A="FL:::/Kernel/KernelA.HH,3697"$ +$LK,"OM_IW",A="FL:::/Kernel/KernelA.HH,1861"$ +$LK,"VGAP_DATA",A="FL:::/Kernel/KernelA.HH,3682"$ +$LK,"OM_NO",A="FL:::/Kernel/KernelA.HH,1855"$ +$LK,"IET_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,413"$ +$LK,"GVF_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,858"$ +$LK,"DefineSub",A="FL:::/Kernel/KDefine.HC.Z,60",BI=284$ +$LK,"WHITE",A="FL:::/Kernel/KernelA.HH,2943"$ +$LK,"ATA_READ_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2252"$ +$LK,"DOCEF_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,968"$ +$LK,"DOCEf_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HH,1082"$ +$LK,"ISO1T_SUPPLEMENTARY_DESC",A="FL:::/Kernel/KernelA.HH,2467"$ +$LK,"DOCEf_SCROLLING_X",A="FL:::/Kernel/KernelA.HH,1056"$ +$LK,"MPInt",A="FL:::/Kernel/MultiProc.HC.Z,132",BI=285$ +$LK,"BOOT_SRC_RAM",A="FL:::/Kernel/KernelA.HH,3841"$ +$LK,"TK_AND_EQU",A="FL:::/Kernel/KernelA.HH,2080"$ $LK,"I64",A="FL:::/Kernel/KernelA.HH,105"$ $LK,"MAX_U32",A="FL:::/Kernel/KernelA.HH,35"$ $LK,"MAX_U16",A="FL:::/Kernel/KernelA.HH,31"$ -$LK,"PopUpPrint",A="FL:::/Kernel/SrvCmd.HC.Z,399",BI=288$ -$LK,"IntEntryGet",A="FL:::/Kernel/KInts.HC.Z,97",BI=289$ -$LK,"FILEMASK_GR",A="FL:::/Kernel/KernelA.HH,2293"$ +$LK,"PopUpPrint",A="FL:::/Kernel/Job.HC.Z,397",BI=286$ +$LK,"IntEntryGet",A="FL:::/Kernel/KInts.HC.Z,97",BI=287$ +$LK,"ms_grid",A="FL:::/Kernel/KGlbls.HC.Z,24"$ +$LK,"FILEMASK_GR",A="FL:::/Kernel/KernelA.HH,2280"$ $LK,"CD2",A="FL:::/Kernel/KernelA.HH,150"$ -$LK,"KeyDevInit",A="FL:::/Kernel/KeyDev.HC.Z,201",BI=290$ -$LK,"CCF_HAS_RETURN",A="FL:::/Kernel/KernelA.HH,2144"$ -$LK,"CAsmArg",A="FL:::/Kernel/KernelA.HH,1844"$ +$LK,"KeyDevInit",A="FL:::/Kernel/KeyDev.HC.Z,201",BI=288$ +$LK,"CCF_HAS_RETURN",A="FL:::/Kernel/KernelA.HH,2131"$ +$LK,"CAsmArg",A="FL:::/Kernel/KernelA.HH,1831"$ $LK,"CD3",A="FL:::/Kernel/KernelA.HH,156"$ $LK,"SYS_BOOT_BLK",A="FL:::/Kernel/KStart16.HC.Z,24"$ -$LK,"progress4_desc",A="FL:::/Kernel/KernelB.HH,223"$ +$LK,"progress4_desc",A="FL:::/Kernel/KernelB.HH,228"$ $LK,"RFLAGf_ZERO",A="FL:::/Kernel/KernelA.HH,311"$ -$LK,"DrvFATBlkClean",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,99",BI=291$ -$LK,"CCF_CLASS_IP",A="FL:::/Kernel/KernelA.HH,2164"$ -$LK,"WIf_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HH,1448"$ -$LK,"PCIReadU8",A="FL:::/Kernel/PCIBIOS.HC.Z,163",BI=292$ -$LK,"SYS_SEMA_SYS_DATE",A="FL:::/Kernel/KernelA.HH,597"$ -$LK,"EXT_WIN_FOCUS",A="FL:::/Kernel/KernelA.HH,577"$ -$LK,"ClustersAlloc",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,134",BI=293$ -$LK,"WIF_SELF_IP_L",A="FL:::/Kernel/KernelA.HH,1410"$ +$LK,"DrvFATBlkClean",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,99",BI=289$ +$LK,"PCIReadU8",A="FL:::/Kernel/PCIBIOS.HC.Z,163",BI=290$ +$LK,"EXT_WIN_FOCUS",A="FL:::/Kernel/KernelA.HH,580"$ +$LK,"ClustersAlloc",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,134",BI=291$ $LK,"MAX_U64",A="FL:::/Kernel/KernelA.HH,39"$ -$LK,"WIf_SELF_IP_L",A="FL:::/Kernel/KernelA.HH,1438"$ -$LK,"CHashAC",A="FL:::/Kernel/KernelA.HH,754"$ -$LK,"DOCf_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1298"$ -$LK,"DOCF_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1262"$ -$LK,"PrintWarn",A="FL:::/Kernel/StrPrint.HC.Z,914",BI=294$ -$LK,"LoadOneImport",A="FL:::/Kernel/KLoad.HC.Z,1",BI=295$ -$LK,"FOpen",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,9",BI=296$ -$LK,"CCF_LAST_WAS_DOT",A="FL:::/Kernel/KernelA.HH,2158"$ -$LK,"CMF_DEFINED",A="FL:::/Kernel/KernelA.HH,1695"$ -$LK,"WIf_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HH,1450"$ -$LK,"HTG_ALL",A="FL:::/Kernel/KernelA.HH,715"$ +$LK,"CHashAC",A="FL:::/Kernel/KernelA.HH,742"$ +$LK,"ms_last",A="FL:::/Kernel/KGlbls.HC.Z,25"$ +$LK,"DOCf_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1286"$ +$LK,"DOCF_NO_CURSOR",A="FL:::/Kernel/KernelA.HH,1250"$ +$LK,"PrintWarn",A="FL:::/Kernel/StrPrint.HC.Z,914",BI=292$ +$LK,"LoadOneImport",A="FL:::/Kernel/KLoad.HC.Z,1",BI=293$ +$LK,"SEMA_FORCE_WINMGR",A="FL:::/Kernel/KernelA.HH,612"$ +$LK,"FOpen",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,9",BI=294$ +$LK,"CCF_LAST_WAS_DOT",A="FL:::/Kernel/KernelA.HH,2145"$ +$LK,"CMF_DEFINED",A="FL:::/Kernel/KernelA.HH,1682"$ +$LK,"HTG_ALL",A="FL:::/Kernel/KernelA.HH,703"$ $LK,"sys_var_init_val",A="FL:::/Kernel/KernelB.HH,186"$ -$LK,"FUF_REPLACE",A="FL:::/Kernel/KernelA.HH,2601"$ -$LK,"FUf_REPLACE",A="FL:::/Kernel/KernelA.HH,2574"$ -$LK,"DrvRep",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,328",BI=297$ -$LK,"BlkDevUnlock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,15",BI=298$ -$LK,"CMemUsed",A="FL:::/Kernel/KernelA.HH,2825"$ -$LK,"WIF_SELF_IP_R",A="FL:::/Kernel/KernelA.HH,1412"$ -$LK,"IntMPCrash",A="FL:::/Kernel/MultiProc.HC.Z,380",BI=299$ -$LK,"JobQue",A="FL:::/Kernel/MultiProc.HC.Z,213",BI=300$ -$LK,"TSSBusy",A="FL:::/Kernel/MultiProc.HC.Z,71",BI=301$ -$LK,"DrvTypeSet",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,1",BI=302$ -$LK,"FUF_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2612"$ -$LK,"FUf_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2585"$ -$LK,"WIf_SELF_IP_R",A="FL:::/Kernel/KernelA.HH,1439"$ -$LK,"DirNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,108",BI=303$ -$LK,"DOF_DONT_HOME",A="FL:::/Kernel/KernelA.HH,1218"$ -$LK,"CH_ESC",A="FL:::/Kernel/KernelA.HH,3513"$ -$LK,"DOCEf_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1110"$ -$LK,"DOCEF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1024"$ -$LK,"DrvFATBlkAlloc",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,89",BI=304$ -$LK,"WildMatch",A="FL:::/Kernel/StrA.HC.Z,656",BI=305$ -$LK,"CDC",A="FL:::/Kernel/KernelA.HH,3658"$ -$LK,"SC_CURSOR_LEFT",A="FL:::/Kernel/KernelA.HH,3568"$ -$LK,"IsMute",A="FL:::/Kernel/KMisc.HC.Z,230",BI=306$ -$LK,"DOCT_CLEAR",A="FL:::/Kernel/KernelA.HH,909"$ -$LK,"DVDImageWrite",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,147",BI=307$ -$LK,"MouseRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,37",BI=308$ -$LK,"HashTypeNum",A="FL:::/Kernel/KHashB.HC.Z,1",BI=309$ -$LK,"CPUf_DYING_TASK_QUE",A="FL:::/Kernel/KernelA.HH,3441"$ -$LK,"BDf_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2651"$ -$LK,"BDF_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2641"$ -$LK,"DCF_JUST_MIRROR",A="FL:::/Kernel/KernelA.HH,3635"$ -$LK,"FSt_UNKNOWN",A="FL:::/Kernel/KernelA.HH,2695"$ -$LK,"WIG_USER_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1434"$ -$LK,"sys_cache_line_width",A="FL:::/Kernel/KernelB.HH,269"$ -$LK,"XchgI64",A="FL:::/Kernel/KernelB.HH,264"$ -$LK,"SC_CURSOR_DOWN",A="FL:::/Kernel/KernelA.HH,3567"$ -$LK,"DOF_DONT_WINMGR_SYNC",A="FL:::/Kernel/KernelA.HH,1221"$ +$LK,"FUF_REPLACE",A="FL:::/Kernel/KernelA.HH,2588"$ +$LK,"FUf_REPLACE",A="FL:::/Kernel/KernelA.HH,2561"$ +$LK,"DrvRep",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,332",BI=295$ +$LK,"BlkDevUnlock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,15",BI=296$ +$LK,"CMemUsed",A="FL:::/Kernel/KernelA.HH,2813"$ +$LK,"IntMPCrash",A="FL:::/Kernel/MultiProc.HC.Z,379",BI=297$ +$LK,"JobQue",A="FL:::/Kernel/MultiProc.HC.Z,213",BI=298$ +$LK,"TSSBusy",A="FL:::/Kernel/MultiProc.HC.Z,71",BI=299$ +$LK,"DrvTypeSet",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,1",BI=300$ +$LK,"FUF_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2599"$ +$LK,"FUf_JUST_AOT",A="FL:::/Kernel/KernelA.HH,2572"$ +$LK,"DirNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,108",BI=301$ +$LK,"DOF_DONT_HOME",A="FL:::/Kernel/KernelA.HH,1206"$ +$LK,"CH_ESC",A="FL:::/Kernel/KernelA.HH,3466"$ +$LK,"DOCEf_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1098"$ +$LK,"DOCEF_DONT_DRAW",A="FL:::/Kernel/KernelA.HH,1012"$ +$LK,"WIF_FOCUS_TASK_MS_L",A="FL:::/Kernel/KernelA.HH,1411"$ +$LK,"DrvFATBlkAlloc",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,89",BI=302$ +$LK,"WildMatch",A="FL:::/Kernel/StrA.HC.Z,651",BI=303$ +$LK,"MEM_EXTRA_HASH2_PAGS",A="FL:::/Kernel/KernelA.HH,2852"$ +$LK,"CDC",A="FL:::/Kernel/KernelA.HH,3611"$ +$LK,"SC_CURSOR_LEFT",A="FL:::/Kernel/KernelA.HH,3521"$ +$LK,"IsMute",A="FL:::/Kernel/KMisc.HC.Z,246",BI=304$ +$LK,"DOCT_CLEAR",A="FL:::/Kernel/KernelA.HH,897"$ +$LK,"DVDImageWrite",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,147",BI=305$ +$LK,"HashTypeNum",A="FL:::/Kernel/KHashB.HC.Z,1",BI=306$ +$LK,"CPUf_DYING_TASK_QUE",A="FL:::/Kernel/KernelA.HH,3401"$ +$LK,"BDf_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2638"$ +$LK,"BDF_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2628"$ +$LK,"DCF_JUST_MIRROR",A="FL:::/Kernel/KernelA.HH,3588"$ +$LK,"FSt_UNKNOWN",A="FL:::/Kernel/KernelA.HH,2682"$ +$LK,"WIG_USER_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1422"$ +$LK,"sys_cache_line_width",A="FL:::/Kernel/KernelB.HH,279"$ +$LK,"XchgI64",A="FL:::/Kernel/KernelB.HH,270"$ +$LK,"SC_CURSOR_DOWN",A="FL:::/Kernel/KernelA.HH,3520"$ +$LK,"WIF_FOCUS_TASK_MS_R",A="FL:::/Kernel/KernelA.HH,1413"$ +$LK,"DOF_DONT_WINMGR_SYNC",A="FL:::/Kernel/KernelA.HH,1209"$ $LK,"I_SINGLE_STEP",A="FL:::/Kernel/KernelA.HH,288"$ -$LK,"KbdMouseRst",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,207",BI=310$ -$LK,"ATA_WRITE_MULTI",A="FL:::/Kernel/KernelA.HH,2266"$ -$LK,"DOC_COLOR_KEYWORD",A="FL:::/Kernel/KernelA.HH,1143"$ -$LK,"XTalkStr",A="FL:::/Kernel/SrvCmd.HC.Z,491",BI=311$ -$LK,"CCF_IN_QUOTES",A="FL:::/Kernel/KernelA.HH,2141"$ +$LK,"ATA_WRITE_MULTI",A="FL:::/Kernel/KernelA.HH,2253"$ +$LK,"DOC_COLOR_KEYWORD",A="FL:::/Kernel/KernelA.HH,1131"$ +$LK,"XTalkStr",A="FL:::/Kernel/Job.HC.Z,489",BI=307$ +$LK,"CCF_IN_QUOTES",A="FL:::/Kernel/KernelA.HH,2128"$ $LK,"CFifoU8",A="FL:::/Kernel/KernelA.HH,171"$ -$LK,"ATAReadNativeMax",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,187",BI=312$ -$LK,"BOOT_SRC_ROM",A="FL:::/Kernel/KernelA.HH,3885"$ -$LK,"RLF_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,474"$ -$LK,"SYS_KERNEL_END",A="FL:::/Kernel/KEnd.HC.Z,216"$ +$LK,"ATAReadNativeMax",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,194",BI=308$ +$LK,"MsHardSetPre",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,196",BI=309$ +$LK,"BOOT_SRC_ROM",A="FL:::/Kernel/KernelA.HH,3840"$ +$LK,"MEM_FREE_PAG_HASH_SIZE",A="FL:::/Kernel/KernelA.HH,2849"$ +$LK,"RLF_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,477"$ +$LK,"SYS_KERNEL_END",A="FL:::/Kernel/KEnd.HC.Z,215"$ $LK,"TakeExcept",A="FL:::/Kernel/KExcept.HC.Z,42"$ $LK,"_MALLOC",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,5"$ -$LK,"CHashDefineStr",A="FL:::/Kernel/KernelA.HH,825"$ +$LK,"CHashDefineStr",A="FL:::/Kernel/KernelA.HH,813"$ $LK,"MemSet",A="FL:::/Kernel/KernelB.HH,170"$ $LK,"_TRUNC",A="FL:::/Kernel/KMathA.HC.Z,400"$ -$LK,"HTF_IMM",A="FL:::/Kernel/KernelA.HH,706"$ -$LK,"FUF_IGNORE",A="FL:::/Kernel/KernelA.HH,2598"$ -$LK,"FUf_IGNORE",A="FL:::/Kernel/KernelA.HH,2571"$ -$LK,"AAT_SUB_U32",A="FL:::/Kernel/KernelA.HH,1972"$ -$LK,"AAT_SUB_U16",A="FL:::/Kernel/KernelA.HH,1970"$ -$LK,"IP_MOUSE",A="FL:::/Kernel/KernelA.HH,3046"$ -$LK,"ATAIDDrvs",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,204",BI=313$ -$LK,"UserCmdLine",A="FL:::/Kernel/KTask.HC.Z,400",BI=314$ -$LK,"GVF_FUN",A="FL:::/Kernel/KernelA.HH,867"$ -$LK,"IA32F_LME",A="FL:::/Kernel/KernelA.HH,520"$ -$LK,"LAPICF_APIC_ENABLED",A="FL:::/Kernel/KernelA.HH,490"$ -$LK,"RLf_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,455"$ -$LK,"PCIClassFind",A="FL:::/Kernel/PCIBIOS.HC.Z,265",BI=315$ -$LK,"RECALCF_HAS_CURSOR",A="FL:::/Kernel/KernelA.HH,1352"$ -$LK,"ATARep",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,131",BI=316$ -$LK,"KDInputFilterPutS",A="FL:::/Kernel/KeyDev.HC.Z,117",BI=317$ +$LK,"HTF_IMM",A="FL:::/Kernel/KernelA.HH,694"$ +$LK,"char_bmp_dec_numeric",A="FL:::/Kernel/StrA.HC.Z,350"$ +$LK,"FUF_IGNORE",A="FL:::/Kernel/KernelA.HH,2585"$ +$LK,"FUf_IGNORE",A="FL:::/Kernel/KernelA.HH,2558"$ +$LK,"AAT_SUB_U32",A="FL:::/Kernel/KernelA.HH,1959"$ +$LK,"AAT_SUB_U16",A="FL:::/Kernel/KernelA.HH,1957"$ +$LK,"ATAIDDrvs",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,204",BI=310$ +$LK,"UserCmdLine",A="FL:::/Kernel/KTask.HC.Z,414",BI=311$ +$LK,"GVF_FUN",A="FL:::/Kernel/KernelA.HH,855"$ +$LK,"IA32F_LME",A="FL:::/Kernel/KernelA.HH,523"$ +$LK,"LAPICF_APIC_ENABLED",A="FL:::/Kernel/KernelA.HH,493"$ +$LK,"RLf_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HH,457"$ +$LK,"PCIClassFind",A="FL:::/Kernel/PCIBIOS.HC.Z,265",BI=312$ +$LK,"RECALCF_HAS_CURSOR",A="FL:::/Kernel/KernelA.HH,1340"$ +$LK,"ATARep",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,131",BI=313$ +$LK,"KDInputFilterPutS",A="FL:::/Kernel/KeyDev.HC.Z,117",BI=314$ $LK,"D3SubEqu",A="FL:::/Kernel/KernelB.HH,160"$ -$LK,"FUF_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2613"$ -$LK,"FUf_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2586"$ -$LK,"CAsmIns",A="FL:::/Kernel/KernelA.HH,1832"$ +$LK,"FUF_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2600"$ +$LK,"FUf_JUST_JIT",A="FL:::/Kernel/KernelA.HH,2573"$ +$LK,"CAsmIns",A="FL:::/Kernel/KernelA.HH,1819"$ $LK,"InU32",A="FL:::/Kernel/KernelB.HH,76"$ $LK,"InU16",A="FL:::/Kernel/KernelB.HH,75"$ -$LK,"TK_IF",A="FL:::/Kernel/KernelA.HH,2098"$ -$LK,"DOCT_BLINK",A="FL:::/Kernel/KernelA.HH,922"$ +$LK,"TK_IF",A="FL:::/Kernel/KernelA.HH,2085"$ +$LK,"DOCT_BLINK",A="FL:::/Kernel/KernelA.HH,910"$ $LK,"U32",A="FL:::/Kernel/KernelA.HH,79"$ $LK,"U16",A="FL:::/Kernel/KernelA.HH,67"$ $LK,"_XCHG_I64",A="FL:::/Kernel/KUtils.HC.Z,184"$ -$LK,"ATANop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,48",BI=318$ -$LK,"TaskDel",A="FL:::/Kernel/KTask.HC.Z,424",BI=319$ -$LK,"LXchgU8",A="FL:::/Kernel/KernelB.HH,260"$ -$LK,"AAT_SUB_U64",A="FL:::/Kernel/KernelA.HH,1974"$ -$LK,"HasLower",A="FL:::/Kernel/FunSeg.HC.Z,1",BI=320$ +$LK,"ATANop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,48",BI=315$ +$LK,"TaskDel",A="FL:::/Kernel/KTask.HC.Z,437",BI=316$ +$LK,"LXchgU8",A="FL:::/Kernel/KernelB.HH,266"$ +$LK,"AAT_SUB_U64",A="FL:::/Kernel/KernelA.HH,1961"$ +$LK,"HasLower",A="FL:::/Kernel/FunSeg.HC.Z,1",BI=317$ $LK,"_CALL",A="FL:::/Kernel/KUtils.HC.Z,145"$ -$LK,"IA32F_SCE",A="FL:::/Kernel/KernelA.HH,519"$ +$LK,"IA32F_SCE",A="FL:::/Kernel/KernelA.HH,522"$ $LK,"MIN_F64",A="FL:::/Kernel/KernelA.HH,47"$ -$LK,"__LINE__",A="FL:::/Kernel/KernelA.HH,2025"$ -$LK,"FUF_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2618"$ -$LK,"KeyDescSet",A="FL:::/Kernel/KeyDev.HC.Z,56",BI=321$ +$LK,"__LINE__",A="FL:::/Kernel/KernelA.HH,2012"$ +$LK,"FUF_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2605"$ +$LK,"KeyDescSet",A="FL:::/Kernel/KeyDev.HC.Z,56",BI=318$ $LK,"U64",A="FL:::/Kernel/KernelA.HH,95"$ $LK,"MIN_I32",A="FL:::/Kernel/KernelA.HH,32"$ $LK,"MIN_I16",A="FL:::/Kernel/KernelA.HH,28"$ -$LK,"FSize",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,1",BI=322$ -$LK,"IntEntrySet",A="FL:::/Kernel/KInts.HC.Z,109",BI=323$ -$LK,"Mem32DevIns",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,1",BI=324$ -$LK,"SYS_MP_CNT_INITIAL",A="FL:::/Kernel/KStart32.HC.Z,52"$ -$LK,"FUf_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2591"$ +$LK,"FSize",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,1",BI=319$ +$LK,"IntEntrySet",A="FL:::/Kernel/KInts.HC.Z,109",BI=320$ +$LK,"Mem32DevIns",A="FL:::/Kernel/Mem/MemPhysical.HC.Z,1",BI=321$ +$LK,"SYS_MP_CNT_INITIAL",A="FL:::/Kernel/KStart32.HC.Z,66"$ +$LK,"FUf_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HH,2578"$ +$LK,"WIf_FOCUS_TASK_MS_L",A="FL:::/Kernel/KernelA.HH,1436"$ +$LK,"WIF_SELF_MS_L",A="FL:::/Kernel/KernelA.HH,1398"$ +$LK,"char_bmp_word",A="FL:::/Kernel/StrA.HC.Z,340"$ +$LK,"WIf_SELF_MS_L",A="FL:::/Kernel/KernelA.HH,1426"$ $LK,"_CEIL",A="FL:::/Kernel/KMathA.HC.Z,441"$ -$LK,"INVALID_CLUSTER",A="FL:::/Kernel/KernelA.HH,2300"$ -$LK,"TaskEnd",A="FL:::/Kernel/KTask.HC.Z,432",BI=325$ +$LK,"INVALID_CLUSTER",A="FL:::/Kernel/KernelA.HH,2287"$ +$LK,"TaskEnd",A="FL:::/Kernel/KTask.HC.Z,445",BI=322$ +$LK,"WIf_FOCUS_TASK_MS_R",A="FL:::/Kernel/KernelA.HH,1438"$ $LK,"MIN_I64",A="FL:::/Kernel/KernelA.HH,36"$ -$LK,"TaskCaller",A="FL:::/Kernel/KDbg.HC.Z,75",BI=326$ -$LK,"SV_NONE",A="FL:::/Kernel/KernelA.HH,1741"$ +$LK,"TaskCaller",A="FL:::/Kernel/KDbg.HC.Z,75",BI=323$ +$LK,"SV_NONE",A="FL:::/Kernel/KernelA.HH,1728"$ $LK,"QUE_VECT_U8_CNT",A="FL:::/Kernel/KernelA.HH,162"$ -$LK,"RT_I0",A="FL:::/Kernel/KernelA.HH,1551"$ -$LK,"DOCEF_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,972"$ -$LK,"TK_DEREFERENCE",A="FL:::/Kernel/KernelA.HH,2078"$ -$LK,"ARGT_UIMM8",A="FL:::/Kernel/KernelA.HH,1887"$ -$LK,"DOCF_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1278"$ -$LK,"DOCEf_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,1060"$ +$LK,"RT_I0",A="FL:::/Kernel/KernelA.HH,1539"$ +$LK,"WIF_SELF_MS_R",A="FL:::/Kernel/KernelA.HH,1400"$ +$LK,"DOCEF_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,960"$ +$LK,"TK_DEREFERENCE",A="FL:::/Kernel/KernelA.HH,2065"$ +$LK,"ARGT_UIMM8",A="FL:::/Kernel/KernelA.HH,1874"$ +$LK,"WIf_SELF_MS_R",A="FL:::/Kernel/KernelA.HH,1427"$ +$LK,"DOCF_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1266"$ +$LK,"DOCEf_LEFT_MACRO",A="FL:::/Kernel/KernelA.HH,1048"$ $LK,"SYS_GDT",A="FL:::/Kernel/KStart16.HC.Z,39"$ -$LK,"CDate2Dos",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,1",BI=327$ -$LK,"SrvCmdRunOne",A="FL:::/Kernel/SrvCmd.HC.Z,268",BI=328$ +$LK,"JOBf_WAKE_MASTER",A="FL:::/Kernel/KernelA.HH,3142"$ +$LK,"CDate2Dos",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,1",BI=324$ +$LK,"SEMA_DEBUG",A="FL:::/Kernel/KernelA.HH,594"$ $LK,"TMP_BUF_LEN",A="FL:::/Kernel/StrPrint.HC.Z,205"$ -$LK,"MRT_UNUSED",A="FL:::/Kernel/KernelA.HH,2866"$ -$LK,"MDG_REG_DISP_SIB",A="FL:::/Kernel/KernelA.HH,1585"$ -$LK,"RedSeaFilesDel",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,458",BI=329$ -$LK,"XchgU32",A="FL:::/Kernel/KernelB.HH,266"$ -$LK,"XchgU16",A="FL:::/Kernel/KernelB.HH,265"$ -$LK,"TK_SHL_EQU",A="FL:::/Kernel/KernelA.HH,2089"$ -$LK,"CCntsGlbls",A="FL:::/Kernel/KernelA.HH,538"$ -$LK,"LastDayOfMon",A="FL:::/Kernel/KDate.HC.Z,82",BI=330$ -$LK,"RT_I8",A="FL:::/Kernel/KernelA.HH,1553"$ -$LK,"SVCf_WAKE_MASTER",A="FL:::/Kernel/KernelA.HH,3180"$ -$LK,"CAsmNum",A="FL:::/Kernel/KernelA.HH,1817"$ +$LK,"MRT_UNUSED",A="FL:::/Kernel/KernelA.HH,2834"$ +$LK,"MDG_REG_DISP_SIB",A="FL:::/Kernel/KernelA.HH,1573"$ +$LK,"RedSeaFilesDel",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,458",BI=325$ +$LK,"XchgU32",A="FL:::/Kernel/KernelB.HH,272"$ +$LK,"XchgU16",A="FL:::/Kernel/KernelB.HH,271"$ +$LK,"TK_SHL_EQU",A="FL:::/Kernel/KernelA.HH,2076"$ +$LK,"CCntsGlbls",A="FL:::/Kernel/KernelA.HH,541"$ +$LK,"LastDayOfMon",A="FL:::/Kernel/KDate.HC.Z,82",BI=326$ +$LK,"RT_I8",A="FL:::/Kernel/KernelA.HH,1541"$ +$LK,"CAsmNum",A="FL:::/Kernel/KernelA.HH,1804"$ $LK,"_REP_OUT_U16",A="FL:::/Kernel/KUtils.HC.Z,297"$ $LK,"_REP_OUT_U32",A="FL:::/Kernel/KUtils.HC.Z,286"$ -$LK,"VGAM_TEXT",A="FL:::/Kernel/KernelA.HH,3721"$ -$LK,"ACD_POS",A="FL:::/Kernel/KernelA.HH,1506"$ -$LK,"FirstDayOfMon",A="FL:::/Kernel/KDate.HC.Z,71",BI=331$ -$LK,"PutChars",A="FL:::/Kernel/KeyDev.HC.Z,20",BI=332$ +$LK,"VGAM_TEXT",A="FL:::/Kernel/KernelA.HH,3674"$ +$LK,"ACD_POS",A="FL:::/Kernel/KernelA.HH,1494"$ +$LK,"FirstDayOfMon",A="FL:::/Kernel/KDate.HC.Z,71",BI=327$ +$LK,"PutChars",A="FL:::/Kernel/KeyDev.HC.Z,20",BI=328$ $LK,"_BEQU",A="FL:::/Kernel/KUtils.HC.Z,89"$ -$LK,"DOCEf_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1065"$ -$LK,"DOCEF_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,977"$ -$LK,"ansf",A="FL:::/Kernel/KernelA.HH,3419"$ -$LK,"BlkDevsInitAll",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,215",BI=333$ -$LK,"SysUntry",A="FL:::/Kernel/KExcept.HC.Z,77",BI=334$ -$LK,"WIF_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1428"$ +$LK,"DOCEf_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1053"$ +$LK,"DOCEF_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,965"$ +$LK,"ansf",A="FL:::/Kernel/KernelA.HH,3379"$ +$LK,"BlkDevsInitAll",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,225",BI=329$ +$LK,"SysUntry",A="FL:::/Kernel/KExcept.HC.Z,77",BI=330$ +$LK,"WIF_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1416"$ $LK,"_MEMCMP",A="FL:::/Kernel/KUtils.HC.Z,70"$ -$LK,"DISPLAYf_NO_BORDER",A="FL:::/Kernel/KernelA.HH,3302"$ +$LK,"DISPLAYf_NO_BORDER",A="FL:::/Kernel/KernelA.HH,3262"$ $LK,"OFF",A="FL:::/Kernel/KernelA.HH,23"$ -$LK,"DOCF_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1280"$ +$LK,"DOCF_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1268"$ $LK,"SYS_BOOT_SRC",A="FL:::/Kernel/KStart16.HC.Z,23"$ -$LK,"FUF_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2611"$ -$LK,"FUf_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2584"$ -$LK,"OC_CALL",A="FL:::/Kernel/KernelA.HH,1760"$ -$LK,"TaskExe",A="FL:::/Kernel/SrvCmd.HC.Z,39",BI=335$ -$LK,"ThrowBreak",A="FL:::/Kernel/KExcept.HC.Z,136",BI=336$ -$LK,"FileWrite",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,87",BI=337$ -$LK,"ARf_CSPRITE_PTS_RECTANGLES",A="FL:::/Kernel/KernelA.HH,3900"$ +$LK,"FUF_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2598"$ +$LK,"FUf_JUST_SRC",A="FL:::/Kernel/KernelA.HH,2571"$ +$LK,"OC_CALL",A="FL:::/Kernel/KernelA.HH,1747"$ +$LK,"TaskExe",A="FL:::/Kernel/Job.HC.Z,39",BI=331$ +$LK,"FileWrite",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,87",BI=332$ +$LK,"ARf_CSPRITE_PTS_RECTANGLES",A="FL:::/Kernel/KernelA.HH,3855"$ $LK,"RFLAGf_ID",A="FL:::/Kernel/KernelA.HH,325"$ -$LK,"SCF_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3537"$ -$LK,"SCf_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3522"$ -$LK,"ATAWaitNotBUSY",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,24",BI=338$ +$LK,"SCF_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3490"$ +$LK,"SCf_E0_PREFIX",A="FL:::/Kernel/KernelA.HH,3475"$ +$LK,"ATAWaitNotBUSY",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,24",BI=333$ $LK,"_XCHG_U16",A="FL:::/Kernel/KUtils.HC.Z,200"$ $LK,"_XCHG_U32",A="FL:::/Kernel/KUtils.HC.Z,192"$ -$LK,"SUF_TO_LOWER",A="FL:::/Kernel/KernelA.HH,3793"$ -$LK,"ARGT_XMM32",A="FL:::/Kernel/KernelA.HH,1941"$ -$LK,"WIF_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1416"$ -$LK,"LDF_SILENT",A="FL:::/Kernel/KernelA.HH,370"$ -$LK,"RED",A="FL:::/Kernel/KernelA.HH,2964"$ -$LK,"RT_U0",A="FL:::/Kernel/KernelA.HH,1552"$ -$LK,"SYS_SEMA_DEBUG",A="FL:::/Kernel/KernelA.HH,594"$ -$LK,"SrvCmdDel",A="FL:::/Kernel/SrvCmd.HC.Z,1",BI=339$ -$LK,"VGAR_MAP_MASK",A="FL:::/Kernel/KernelA.HH,3739"$ -$LK,"PRTF_COMMA",A="FL:::/Kernel/KernelA.HH,3917"$ -$LK,"CAOTCtrl",A="FL:::/Kernel/KernelA.HH,2049"$ -$LK,"SCF_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3545"$ +$LK,"SUF_TO_LOWER",A="FL:::/Kernel/KernelA.HH,3746"$ +$LK,"ARGT_XMM32",A="FL:::/Kernel/KernelA.HH,1928"$ +$LK,"WIF_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1404"$ +$LK,"LDF_SILENT",A="FL:::/Kernel/KernelA.HH,369"$ +$LK,"MsInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,63",BI=334$ +$LK,"RED",A="FL:::/Kernel/KernelA.HH,2932"$ +$LK,"RT_U0",A="FL:::/Kernel/KernelA.HH,1540"$ +$LK,"VGAR_MAP_MASK",A="FL:::/Kernel/KernelA.HH,3692"$ +$LK,"PRTF_COMMA",A="FL:::/Kernel/KernelA.HH,3872"$ +$LK,"CAOTCtrl",A="FL:::/Kernel/KernelA.HH,2036"$ +$LK,"VM_VIRTUALBOX",A="FL:::/Kernel/KernelA.HH,3893"$ +$LK,"SCF_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3498"$ $LK,"TASK_CONTEXT_SAVE",A="FL:::/Kernel/Sched.HC.Z,56"$ -$LK,"SCf_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3530"$ -$LK,"CDirContext",A="FL:::/Kernel/KernelA.HH,2773"$ -$LK,"BootDVDProbeAll",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,29",BI=340$ -$LK,"SysThrowBreak",A="FL:::/Kernel/KExcept.HC.Z,122",BI=341$ +$LK,"SCf_NEW_KEY",A="FL:::/Kernel/KernelA.HH,3483"$ +$LK,"CDirContext",A="FL:::/Kernel/KernelA.HH,2761"$ +$LK,"BootDVDProbeAll",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,29",BI=335$ $LK,"_MEMCPY",A="FL:::/Kernel/KUtils.HC.Z,55"$ $LK,"_D3_DIST_SQR",A="FL:::/Kernel/KMathA.HC.Z,61"$ -$LK,"ARGT_XMM64",A="FL:::/Kernel/KernelA.HH,1942"$ -$LK,"ATAWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,461",BI=342$ -$LK,"RT_U8",A="FL:::/Kernel/KernelA.HH,1554"$ -$LK,"DOCEf_USER_DATA",A="FL:::/Kernel/KernelA.HH,1069"$ -$LK,"DOCEF_USER_DATA",A="FL:::/Kernel/KernelA.HH,981"$ +$LK,"ARGT_XMM64",A="FL:::/Kernel/KernelA.HH,1929"$ +$LK,"ATAWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,464",BI=336$ +$LK,"RT_U8",A="FL:::/Kernel/KernelA.HH,1542"$ +$LK,"RLf_16MEG_SYS_CODE_BP",A="FL:::/Kernel/KernelA.HH,444"$ +$LK,"DOCEf_USER_DATA",A="FL:::/Kernel/KernelA.HH,1057"$ +$LK,"DOCEF_USER_DATA",A="FL:::/Kernel/KernelA.HH,969"$ $LK,"COPY_BUF_BLKS",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,22"$ -$LK,"FAT32FileWrite",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,813",BI=343$ -$LK,"CISO1Date",A="FL:::/Kernel/KernelA.HH,2453"$ -$LK,"EDf_BAIL",A="FL:::/Kernel/KernelA.HH,1254"$ -$LK,"EDF_BAIL",A="FL:::/Kernel/KernelA.HH,1248"$ -$LK,"ChkCodePtr",A="FL:::/Kernel/KDbg.HC.Z,16",BI=344$ +$LK,"FAT32FileWrite",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,801",BI=337$ +$LK,"CISO1Date",A="FL:::/Kernel/KernelA.HH,2440"$ +$LK,"EDf_BAIL",A="FL:::/Kernel/KernelA.HH,1242"$ +$LK,"EDF_BAIL",A="FL:::/Kernel/KernelA.HH,1236"$ +$LK,"ChkCodePtr",A="FL:::/Kernel/KDbg.HC.Z,16",BI=338$ $LK,"SYS_RAM_REBOOT",A="FL:::/Kernel/KStart64.HC.Z,74"$ -$LK,"ISO1T_BOOT_RECORD",A="FL:::/Kernel/KernelA.HH,2478"$ -$LK,"FileFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,57",BI=345$ +$LK,"ISO1T_BOOT_RECORD",A="FL:::/Kernel/KernelA.HH,2465"$ +$LK,"FileFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,57",BI=339$ $LK,"SYS_FIND_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.HC.Z,38"$ -$LK,"VGAP_ATTR_DATA_WRITE",A="FL:::/Kernel/KernelA.HH,3725"$ -$LK,"FUF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2620"$ -$LK,"TK_MUL_EQU",A="FL:::/Kernel/KernelA.HH,2091"$ -$LK,"TK_NOT_EQU",A="FL:::/Kernel/KernelA.HH,2083"$ +$LK,"VGAP_ATTR_DATA_WRITE",A="FL:::/Kernel/KernelA.HH,3678"$ +$LK,"FUF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,2607"$ +$LK,"TK_MUL_EQU",A="FL:::/Kernel/KernelA.HH,2078"$ +$LK,"TK_NOT_EQU",A="FL:::/Kernel/KernelA.HH,2070"$ $LK,"MIN_U32",A="FL:::/Kernel/KernelA.HH,34"$ $LK,"MIN_U16",A="FL:::/Kernel/KernelA.HH,30"$ -$LK,"CFileNameTo",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,1",BI=346$ -$LK,"IntNop",A="FL:::/Kernel/KInts.HC.Z,143",BI=347$ +$LK,"CFileNameTo",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,1",BI=340$ +$LK,"IntNop",A="FL:::/Kernel/KInts.HC.Z,143",BI=341$ $LK,"_D3_MUL_EQU",A="FL:::/Kernel/KMathA.HC.Z,273"$ -$LK,"DISPLAYf_SHOW",A="FL:::/Kernel/KernelA.HH,3299"$ -$LK,"DOF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1222"$ -$LK,"HTF_PUBLIC",A="FL:::/Kernel/KernelA.HH,703"$ -$LK,"HTf_PUBLIC",A="FL:::/Kernel/KernelA.HH,673"$ +$LK,"DISPLAYf_SHOW",A="FL:::/Kernel/KernelA.HH,3259"$ +$LK,"DOF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1210"$ +$LK,"HTF_PUBLIC",A="FL:::/Kernel/KernelA.HH,691"$ +$LK,"HTf_PUBLIC",A="FL:::/Kernel/KernelA.HH,661"$ $LK,"SYS_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.HC.Z,41"$ -$LK,"OC_OP_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1755"$ -$LK,"CCF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,2146"$ -$LK,"MLF_FUN",A="FL:::/Kernel/KernelA.HH,778"$ -$LK,"TaskMsg",A="FL:::/Kernel/SrvCmd.HC.Z,119",BI=348$ -$LK,"RBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,31",BI=349$ -$LK,"DOCEF_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1015"$ -$LK,"HTF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,709"$ -$LK,"FAT32Cd",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,399",BI=350$ -$LK,"DOCEf_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1101"$ -$LK,"HTf_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,679"$ -$LK,"CAP16BitInit",A="FL:::/Kernel/KernelA.HH,526"$ -$LK,"ATAPIWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,535",BI=351$ +$LK,"OC_OP_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1742"$ +$LK,"CCF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,2133"$ +$LK,"MLF_FUN",A="FL:::/Kernel/KernelA.HH,766"$ +$LK,"TaskMsg",A="FL:::/Kernel/Job.HC.Z,119",BI=342$ +$LK,"RBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,31",BI=343$ +$LK,"DOCEF_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1003"$ +$LK,"HTF_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,697"$ +$LK,"FAT32Cd",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,387",BI=344$ +$LK,"DOCEf_ZERO_BASED",A="FL:::/Kernel/KernelA.HH,1089"$ +$LK,"HTf_UNRESOLVED",A="FL:::/Kernel/KernelA.HH,667"$ +$LK,"CAP16BitInit",A="FL:::/Kernel/KernelA.HH,529"$ +$LK,"ATAPIWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,538",BI=345$ $LK,"cnts",A="FL:::/Kernel/KGlbls.HC.Z,21"$ -$LK,"chars_bmp_displayable",A="FL:::/Kernel/StrA.HC.Z,386"$ $LK,"SYS_HEAP_INIT_FLAG",A="FL::/Tmp.DD.Z,1"$ -$LK,"FUF_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2619"$ -$LK,"ScanChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,110",BI=352$ +$LK,"FUF_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2606"$ +$LK,"ScanChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,110",BI=346$ $LK,"RepInU32",A="FL:::/Kernel/KernelB.HH,84"$ $LK,"RepInU16",A="FL:::/Kernel/KernelB.HH,82"$ $LK,"loge_2",A="FL:::/Kernel/KernelA.HH,56"$ $LK,"MIN_U64",A="FL:::/Kernel/KernelA.HH,38"$ -$LK,"chars_bmp_white_space",A="FL:::/Kernel/StrA.HC.Z,356"$ -$LK,"FAT32FileFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,298",BI=353$ -$LK,"GSF_SHIFT_ESC_EXIT",A="FL:::/Kernel/KernelA.HH,3782"$ -$LK,"SFG_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,3803"$ -$LK,"FUf_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2592"$ -$LK,"DOCf_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1316"$ -$LK,"DOCf_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1310"$ -$LK,"DOCF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1274"$ -$LK,"DirTreeDel2",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,49",BI=354$ -$LK,"FUF_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2609"$ -$LK,"FUf_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2582"$ -$LK,"DOCT_DFT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,919"$ -$LK,"DOCT_DFT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,918"$ -$LK,"BOOT_SRC_HARDDRV",A="FL:::/Kernel/KernelA.HH,3887"$ +$LK,"FAT32FileFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,286",BI=347$ +$LK,"GSF_SHIFT_ESC_EXIT",A="FL:::/Kernel/KernelA.HH,3735"$ +$LK,"SFG_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,3756"$ +$LK,"SEMA_SINGLE_USER",A="FL:::/Kernel/KernelA.HH,604"$ +$LK,"FUf_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HH,2579"$ +$LK,"DOCf_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HH,1304"$ +$LK,"DOCf_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1298"$ +$LK,"DOCF_DONT_SHOW",A="FL:::/Kernel/KernelA.HH,1262"$ +$LK,"MsHardSpeedSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,186",BI=348$ +$LK,"DirTreeDel2",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,49",BI=349$ +$LK,"FUF_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2596"$ +$LK,"FUf_JUST_TXT",A="FL:::/Kernel/KernelA.HH,2569"$ +$LK,"DOCT_DFT_BACKGROUND",A="FL:::/Kernel/KernelA.HH,907"$ +$LK,"DOCT_DFT_FOREGROUND",A="FL:::/Kernel/KernelA.HH,906"$ +$LK,"BOOT_SRC_HARDDRV",A="FL:::/Kernel/KernelA.HH,3842"$ $LK,"HashFind",A="FL:::/Kernel/KHashA.HC.Z,255"$ $LK,"D3Cross",A="FL:::/Kernel/KernelB.HH,148"$ -$LK,"MAX_PTR_STARS",A="FL:::/Kernel/KernelA.HH,772"$ -$LK,"DOCEF_ESC",A="FL:::/Kernel/KernelA.HH,1000"$ +$LK,"MAX_PTR_STARS",A="FL:::/Kernel/KernelA.HH,760"$ +$LK,"DOCEF_ESC",A="FL:::/Kernel/KernelA.HH,988"$ $LK,"_FREE",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,224"$ -$LK,"SrcLineNum",A="FL:::/Kernel/FunSeg.HC.Z,184",BI=355$ -$LK,"ATAPIClose",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,521",BI=356$ -$LK,"DOCT_MACRO",A="FL:::/Kernel/KernelA.HH,934"$ -$LK,"CH_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3514"$ -$LK,"Dbg",A="FL:::/Kernel/KDbg.HC.Z,634",BI=357$ +$LK,"SrcLineNum",A="FL:::/Kernel/FunSeg.HC.Z,184",BI=350$ +$LK,"ATAPIClose",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,524",BI=351$ +$LK,"DOCT_MACRO",A="FL:::/Kernel/KernelA.HH,922"$ +$LK,"CH_SHIFT_ESC",A="FL:::/Kernel/KernelA.HH,3467"$ +$LK,"Dbg",A="FL:::/Kernel/KDbg.HC.Z,649",BI=352$ $LK,"Abs",A="FL:::/Kernel/KernelB.HH,96"$ $LK,"CDATE_YEAR_DAYS",A="FL:::/Kernel/KernelA.HH,183"$ $LK,"RFLAGf_OVERFLOW",A="FL:::/Kernel/KernelA.HH,316"$ $LK,"SYS_POW",A="FL:::/Kernel/KMathA.HC.Z,462"$ $LK,"StrNICmp",A="FL:::/Kernel/StrA.HC.Z,315"$ -$LK,"DOCf_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1314"$ -$LK,"DOCEf_RIGHT_X",A="FL:::/Kernel/KernelA.HH,1078"$ -$LK,"DOCEF_RIGHT_X",A="FL:::/Kernel/KernelA.HH,990"$ -$LK,"DCF_FILL_NOT_COLOR",A="FL:::/Kernel/KernelA.HH,3641"$ -$LK,"DOCEF_LEN",A="FL:::/Kernel/KernelA.HH,967"$ -$LK,"FileAttr",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,238",BI=358$ +$LK,"DOCf_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1302"$ +$LK,"DOCEf_RIGHT_X",A="FL:::/Kernel/KernelA.HH,1066"$ +$LK,"DOCEF_RIGHT_X",A="FL:::/Kernel/KernelA.HH,978"$ +$LK,"DCF_FILL_NOT_COLOR",A="FL:::/Kernel/KernelA.HH,3594"$ +$LK,"WIF_FOCUS_TASK_MS_WHEEL",A="FL:::/Kernel/KernelA.HH,1415"$ +$LK,"DOCEF_LEN",A="FL:::/Kernel/KernelA.HH,955"$ +$LK,"FileAttr",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,238",BI=353$ $LK,"_MEMSET",A="FL:::/Kernel/KUtils.HC.Z,3"$ -$LK,"ROP_COLLISION",A="FL:::/Kernel/KernelA.HH,2946"$ -$LK,"TK_PLUS_PLUS",A="FL:::/Kernel/KernelA.HH,2076"$ -$LK,"sys_heap_init_val",A="FL:::/Kernel/KernelB.HH,182"$ -$LK,"DOCEF_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1012"$ -$LK,"VGAP_REG_WRITE",A="FL:::/Kernel/KernelA.HH,3732"$ -$LK,"FUF_EXPAND",A="FL:::/Kernel/KernelA.HH,2605"$ -$LK,"FUf_EXPAND",A="FL:::/Kernel/KernelA.HH,2578"$ -$LK,"DOCEf_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1098"$ -$LK,"Del",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,82",BI=359$ +$LK,"ROP_COLLISION",A="FL:::/Kernel/KernelA.HH,2914"$ +$LK,"TK_PLUS_PLUS",A="FL:::/Kernel/KernelA.HH,2063"$ +$LK,"char_bmp_safe_dollar",A="FL:::/Kernel/StrA.HC.Z,386"$ +$LK,"sys_heap_init_val",A="FL:::/Kernel/KernelB.HH,181"$ +$LK,"DOCEF_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1000"$ +$LK,"VGAP_REG_WRITE",A="FL:::/Kernel/KernelA.HH,3685"$ +$LK,"FUF_EXPAND",A="FL:::/Kernel/KernelA.HH,2592"$ +$LK,"FUf_EXPAND",A="FL:::/Kernel/KernelA.HH,2565"$ +$LK,"DOCEf_DEREF_DATA",A="FL:::/Kernel/KernelA.HH,1086"$ +$LK,"Del",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,82",BI=354$ $LK,"C:/Doc/Que.DD.Z",A="FL:::/Kernel/KernelB.HH,65"$ $LK,"IDTET_TASK",A="FL:::/Kernel/KernelA.HH,281"$ -$LK,"TaskValidate",A="FL:::/Kernel/KTask.HC.Z,19",BI=360$ -$LK,"LAPIC_ARIBITRATION_PRIORITY",A="FL:::/Kernel/KernelA.HH,483"$ +$LK,"TaskValidate",A="FL:::/Kernel/KTask.HC.Z,22",BI=355$ +$LK,"FAT32Init",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,22",BI=356$ +$LK,"LAPIC_ARIBITRATION_PRIORITY",A="FL:::/Kernel/KernelA.HH,486"$ $LK,"fp_set_std_palette",A="FL:::/Kernel/KGlbls.HC.Z,35"$ $LK,"keydev",A="FL:::/Kernel/KGlbls.HC.Z,27"$ $LK,"HashBucketFind",A="FL:::/Kernel/KHashA.HC.Z,260"$ -$LK,"OCF_ALIAS",A="FL:::/Kernel/KernelA.HH,1947"$ -$LK,"IC_BODY_SIZE",A="FL:::/Kernel/KernelA.HH,1621"$ -$LK,"chars_bmp_alpha_numeric",A="FL:::/Kernel/StrA.HC.Z,330"$ +$LK,"OCF_ALIAS",A="FL:::/Kernel/KernelA.HH,1934"$ +$LK,"IC_BODY_SIZE",A="FL:::/Kernel/KernelA.HH,1609"$ $LK,"_LOG2",A="FL:::/Kernel/KMathA.HC.Z,603"$ -$LK,"ROPB_COLLISION",A="FL:::/Kernel/KernelA.HH,2937"$ -$LK,"HTT_WORD",A="FL:::/Kernel/KernelA.HH,690"$ -$LK,"HTt_WORD",A="FL:::/Kernel/KernelA.HH,660"$ -$LK,"FUG_FILE_FIND",A="FL:::/Kernel/KernelA.HH,2626"$ +$LK,"ROPB_COLLISION",A="FL:::/Kernel/KernelA.HH,2905"$ +$LK,"HTT_WORD",A="FL:::/Kernel/KernelA.HH,678"$ +$LK,"HTt_WORD",A="FL:::/Kernel/KernelA.HH,648"$ +$LK,"SEMA_DSK_CACHE",A="FL:::/Kernel/KernelA.HH,605"$ +$LK,"MsHardHndlr",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,235",BI=357$ +$LK,"FUG_FILE_FIND",A="FL:::/Kernel/KernelA.HH,2613"$ $LK,"I_PAGE_FAULT",A="FL:::/Kernel/KernelA.HH,291"$ -$LK,"DrvUnlock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,14",BI=361$ -$LK,"CProgress",A="FL:::/Kernel/KernelA.HH,3906"$ +$LK,"DrvUnlock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,14",BI=358$ +$LK,"CProgress",A="FL:::/Kernel/KernelA.HH,3861"$ $LK,"Arg",A="FL:::/Kernel/KernelB.HH,122"$ -$LK,"FSt_ISO9660",A="FL:::/Kernel/KernelA.HH,2691"$ +$LK,"FSt_ISO9660",A="FL:::/Kernel/KernelA.HH,2678"$ $LK,"CallExtNum",A="FL:::/Kernel/KernelB.HH,55"$ -$LK,"DirFile",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,294",BI=362$ -$LK,"DOCEF_TAG",A="FL:::/Kernel/KernelA.HH,966"$ +$LK,"DirFile",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,294",BI=359$ +$LK,"DOCEF_TAG",A="FL:::/Kernel/KernelA.HH,954"$ $LK,"Btc",A="FL:::/Kernel/KernelB.HH,16"$ -$LK,"CCF_KEEP_NEW_LINES",A="FL:::/Kernel/KernelA.HH,2133"$ -$LK,"MDF_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1583"$ -$LK,"Dir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,105",BI=363$ +$LK,"CCF_KEEP_NEW_LINES",A="FL:::/Kernel/KernelA.HH,2120"$ +$LK,"MDF_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1571"$ +$LK,"Dir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,105",BI=360$ $LK,"Bsf",A="FL:::/Kernel/KernelB.HH,10"$ -$LK,"MDf_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1575"$ -$LK,"ECF_HAS_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1623"$ -$LK,"WIf_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1442"$ -$LK,"DOCT_PAGE_BREAK",A="FL:::/Kernel/KernelA.HH,905"$ -$LK,"SYS_SEMA_RECORD_MACRO",A="FL:::/Kernel/KernelA.HH,595"$ -$LK,"IPVarsUpdate",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,9",BI=364$ -$LK,"MLF_LASTCLASS",A="FL:::/Kernel/KernelA.HH,776"$ -$LK,"_R8",A="FL:::/Kernel/KernelA.HH,3430"$ -$LK,"_R9",A="FL:::/Kernel/KernelA.HH,3431"$ -$LK,"FileRead",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,1",BI=365$ -$LK,"DOCf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1320"$ -$LK,"DOCF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1283"$ -$LK,"DOCT_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,921"$ +$LK,"MDf_RIP_DISP32",A="FL:::/Kernel/KernelA.HH,1563"$ +$LK,"ECF_HAS_PUSH_CMP",A="FL:::/Kernel/KernelA.HH,1611"$ +$LK,"WIf_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HH,1430"$ +$LK,"DOCT_PAGE_BREAK",A="FL:::/Kernel/KernelA.HH,893"$ +$LK,"MLF_LASTCLASS",A="FL:::/Kernel/KernelA.HH,764"$ +$LK,"_R8",A="FL:::/Kernel/KernelA.HH,3390"$ +$LK,"_R9",A="FL:::/Kernel/KernelA.HH,3391"$ +$LK,"FileRead",A="FL:::/Kernel/BlkDev/DskFile.HC.Z,1",BI=361$ +$LK,"DOCf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1308"$ +$LK,"DOCF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1271"$ +$LK,"DOCT_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,909"$ $LK,"_FAR_CALL32",A="FL:::/Kernel/PCIBIOS.HC.Z,69"$ -$LK,"KbdMouseCmdAck",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,65",BI=366$ -$LK,"CAOTHeapGlblRef",A="FL:::/Kernel/KernelA.HH,1982"$ -$LK,"DOCEF_SEL",A="FL:::/Kernel/KernelA.HH,1044"$ -$LK,"IEF_IMM_NOT_REL",A="FL:::/Kernel/KernelA.HH,405"$ -$LK,"FAT32DirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,241",BI=367$ -$LK,"QueCopy",A="FL:::/Kernel/KDataTypes.HC.Z,53",BI=368$ -$LK,"Carry",A="FL:::/Kernel/KernelB.HH,244"$ +$LK,"CAOTHeapGlblRef",A="FL:::/Kernel/KernelA.HH,1969"$ +$LK,"DOCEF_SEL",A="FL:::/Kernel/KernelA.HH,1032"$ +$LK,"IEF_IMM_NOT_REL",A="FL:::/Kernel/KernelA.HH,404"$ +$LK,"FAT32DirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,229",BI=362$ +$LK,"QueCopy",A="FL:::/Kernel/KDataTypes.HC.Z,53",BI=363$ +$LK,"Carry",A="FL:::/Kernel/KernelB.HH,250"$ $LK,"Cos",A="FL:::/Kernel/KernelB.HH,98"$ -$LK,"Clamp",A="FL:::/Kernel/KMathB.HC.Z,1",BI=369$ -$LK,"BDF_FMT",A="FL:::/Kernel/KernelA.HH,2645"$ -$LK,"Name2DirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,10",BI=370$ +$LK,"Clamp",A="FL:::/Kernel/KMathB.HC.Z,1",BI=364$ +$LK,"BDF_FMT",A="FL:::/Kernel/KernelA.HH,2632"$ +$LK,"Name2DirCluster",A="FL:::/Kernel/BlkDev/DskStrB.HC.Z,10",BI=365$ $LK,"Bsr",A="FL:::/Kernel/KernelB.HH,12"$ -$LK,"SYS_PROGRESS1_MAX",A="FL:::/Kernel/KStart32.HC.Z,32"$ -$LK,"GR_Z_ALL",A="FL:::/Kernel/KernelA.HH,3620"$ -$LK,"CMasterBoot",A="FL:::/Kernel/KernelA.HH,2314"$ -$LK,"Fix",A="FL:::/Kernel/EdLite.HC.Z,337",BI=371$ +$LK,"SYS_PROGRESS1_MAX",A="FL:::/Kernel/KStart32.HC.Z,42"$ +$LK,"GR_Z_ALL",A="FL:::/Kernel/KernelA.HH,3573"$ +$LK,"CMasterBoot",A="FL:::/Kernel/KernelA.HH,2301"$ +$LK,"Fix",A="FL:::/Kernel/EdLite.HC.Z,337",BI=366$ $LK,"Btr",A="FL:::/Kernel/KernelB.HH,18"$ $LK,"_LN",A="FL:::/Kernel/KMathA.HC.Z,614"$ -$LK,"OPTf_WARN_UNUSED_VAR",A="FL:::/Kernel/KernelA.HH,1535"$ -$LK,"DOCF_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1292"$ +$LK,"OPTf_WARN_UNUSED_VAR",A="FL:::/Kernel/KernelA.HH,1523"$ +$LK,"DOCF_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1280"$ $LK,"RFLAGf_CARRY",A="FL:::/Kernel/KernelA.HH,308"$ -$LK,"FAT32FileRead",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,367",BI=372$ -$LK,"DirFilesFlatten",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,136",BI=373$ -$LK,"FileExtDot",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,1",BI=374$ +$LK,"FAT32FileRead",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,355",BI=367$ +$LK,"DirFilesFlatten",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,136",BI=368$ +$LK,"FileExtDot",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,1",BI=369$ $LK,"Bts",A="FL:::/Kernel/KernelB.HH,20"$ -$LK,"CMemBlk",A="FL:::/Kernel/KernelA.HH,2860"$ -$LK,"DOCEF_LST",A="FL:::/Kernel/KernelA.HH,1018"$ -$LK,"Man",A="FL:::/Kernel/FunSeg.HC.Z,324",BI=375$ -$LK,"Mem512Alloc",A="FL:::/Kernel/Mem/Mem512.HC.Z,11",BI=376$ -$LK,"TK_SHR_EQU",A="FL:::/Kernel/KernelA.HH,2090"$ -$LK,"CDATE_FREQ",A="FL:::/Kernel/KernelA.HH,552"$ -$LK,"FilesFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,30",BI=377$ +$LK,"CMemBlk",A="FL:::/Kernel/KernelA.HH,2828"$ +$LK,"DOCEF_LST",A="FL:::/Kernel/KernelA.HH,1006"$ +$LK,"Man",A="FL:::/Kernel/FunSeg.HC.Z,324",BI=370$ +$LK,"TK_SHR_EQU",A="FL:::/Kernel/KernelA.HH,2077"$ +$LK,"CDATE_FREQ",A="FL:::/Kernel/KernelA.HH,555"$ +$LK,"FilesFind",A="FL:::/Kernel/BlkDev/DskFind.HC.Z,30",BI=371$ $LK,"_HASH_FIND",A="FL:::/Kernel/KHashA.HC.Z,129"$ $LK,"MSize",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,384"$ -$LK,"CSysFixedArea",A="FL:::/Kernel/KernelA.HH,3471"$ -$LK,"Fmt",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,53",BI=378$ -$LK,"ExeCmdLine",A="FL:::/Kernel/KTask.HC.Z,287",BI=379$ +$LK,"CSysFixedArea",A="FL:::/Kernel/KernelA.HH,3427"$ +$LK,"Fmt",A="FL:::/Kernel/BlkDev/DskFmt.HC.Z,55",BI=372$ +$LK,"ExeCmdLine",A="FL:::/Kernel/KTask.HC.Z,302",BI=373$ $LK,"Log10",A="FL:::/Kernel/KernelB.HH,135"$ -$LK,"FifoI64Flush",A="FL:::/Kernel/KDataTypes.HC.Z,304",BI=380$ -$LK,"InvlPg",A="FL:::/Kernel/KernelB.HH,277"$ +$LK,"FifoI64Flush",A="FL:::/Kernel/KDataTypes.HC.Z,304",BI=374$ +$LK,"InvlPg",A="FL:::/Kernel/KernelB.HH,283"$ $LK,"CallExtStr",A="FL:::/Kernel/KernelB.HH,46"$ -$LK,"VGAM_GRAPHICS",A="FL:::/Kernel/KernelA.HH,3720"$ -$LK,"DCF_LOCATE_NEAREST",A="FL:::/Kernel/KernelA.HH,3637"$ -$LK,"Ff_ARGPOP",A="FL:::/Kernel/KernelA.HH,850"$ -$LK,"SCF_ALT",A="FL:::/Kernel/KernelA.HH,3541"$ -$LK,"CViewAngles",A="FL:::/Kernel/KernelA.HH,3109"$ -$LK,"CArrayDim",A="FL:::/Kernel/KernelA.HH,783"$ -$LK,"DOCEf_NUM_FLAGS",A="FL:::/Kernel/KernelA.HH,1113"$ -$LK,"Ff_INTERNAL",A="FL:::/Kernel/KernelA.HH,852"$ -$LK,"Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,253",BI=381$ +$LK,"VGAM_GRAPHICS",A="FL:::/Kernel/KernelA.HH,3673"$ +$LK,"DCF_LOCATE_NEAREST",A="FL:::/Kernel/KernelA.HH,3590"$ +$LK,"Ff_ARGPOP",A="FL:::/Kernel/KernelA.HH,838"$ +$LK,"SCF_ALT",A="FL:::/Kernel/KernelA.HH,3494"$ +$LK,"CViewAngles",A="FL:::/Kernel/KernelA.HH,3071"$ +$LK,"CArrayDim",A="FL:::/Kernel/KernelA.HH,771"$ +$LK,"DOCEf_NUM_FLAGS",A="FL:::/Kernel/KernelA.HH,1101"$ +$LK,"Ff_INTERNAL",A="FL:::/Kernel/KernelA.HH,840"$ +$LK,"Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,263",BI=375$ $LK,"Fclex",A="FL:::/Kernel/KernelB.HH,129"$ -$LK,"MDF_DISP",A="FL:::/Kernel/KernelA.HH,1581"$ -$LK,"MDf_DISP",A="FL:::/Kernel/KernelA.HH,1573"$ -$LK,"Blink",A="FL:::/Kernel/KMisc.HC.Z,130",BI=382$ -$LK,"CDbgInfo",A="FL:::/Kernel/KernelA.HH,719"$ -$LK,"IET_ZEROED_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,415"$ +$LK,"MDF_DISP",A="FL:::/Kernel/KernelA.HH,1569"$ +$LK,"MDf_DISP",A="FL:::/Kernel/KernelA.HH,1561"$ +$LK,"KbdMsHndlr",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,313",BI=376$ +$LK,"Blink",A="FL:::/Kernel/KMisc.HC.Z,130",BI=377$ +$LK,"CDbgInfo",A="FL:::/Kernel/KernelA.HH,707"$ +$LK,"IET_ZEROED_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,414"$ $LK,"RFLAGf_V8086",A="FL:::/Kernel/KernelA.HH,321"$ $LK,"IDTET_TRAP",A="FL:::/Kernel/KernelA.HH,283"$ -$LK,"SetRBP",A="FL:::/Kernel/KernelB.HH,252"$ -$LK,"LTGREEN",A="FL:::/Kernel/KernelA.HH,2970"$ -$LK,"DOCf_BLINK",A="FL:::/Kernel/KernelA.HH,1322"$ -$LK,"DOCF_BLINK",A="FL:::/Kernel/KernelA.HH,1285"$ -$LK,"DOCEf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1046"$ -$LK,"DOCEF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1040"$ -$LK,"SysSymImportsResolve",A="FL:::/Kernel/KLoad.HC.Z,55",BI=383$ -$LK,"RS_ATTR_HIDDEN",A="FL:::/Kernel/KernelA.HH,2527"$ +$LK,"SetRBP",A="FL:::/Kernel/KernelB.HH,258"$ +$LK,"LTGREEN",A="FL:::/Kernel/KernelA.HH,2938"$ +$LK,"DOCf_BLINK",A="FL:::/Kernel/KernelA.HH,1310"$ +$LK,"DOCF_BLINK",A="FL:::/Kernel/KernelA.HH,1273"$ +$LK,"DOCEf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1034"$ +$LK,"DOCEF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HH,1028"$ +$LK,"SysSymImportsResolve",A="FL:::/Kernel/KLoad.HC.Z,55",BI=378$ +$LK,"RS_ATTR_HIDDEN",A="FL:::/Kernel/KernelA.HH,2514"$ $LK,"TaskEndNow",A="FL:::/Kernel/Sched.HC.Z,285"$ -$LK,"Max",A="FL:::/Kernel/KMathB.HC.Z,18",BI=384$ +$LK,"Max",A="FL:::/Kernel/KMathB.HC.Z,18",BI=379$ $LK,"SYS_HASH_FIND",A="FL:::/Kernel/KHashA.HC.Z,89"$ -$LK,"ROPF_DITHER",A="FL:::/Kernel/KernelA.HH,2955"$ -$LK,"ICF_PREV_DELETED",A="FL:::/Kernel/KernelA.HH,1617"$ -$LK,"WIG_DBL_CLICK",A="FL:::/Kernel/KernelA.HH,1431"$ -$LK,"SYS_SEMA_FIX",A="FL:::/Kernel/KernelA.HH,615"$ +$LK,"ROPF_DITHER",A="FL:::/Kernel/KernelA.HH,2923"$ +$LK,"ICF_PREV_DELETED",A="FL:::/Kernel/KernelA.HH,1605"$ +$LK,"WIG_DBL_CLICK",A="FL:::/Kernel/KernelA.HH,1419"$ $LK,"ToF64",A="FL:::/Kernel/KernelB.HH,120"$ -$LK,"SYS_PROGRESS2_MAX",A="FL:::/Kernel/KStart32.HC.Z,36"$ -$LK,"CH_SHIFT_SPACE",A="FL:::/Kernel/KernelA.HH,3515"$ -$LK,"ROPBF_DITHER",A="FL:::/Kernel/KernelA.HH,2941"$ -$LK,"FF_WRITE",A="FL:::/Kernel/KernelA.HH,2782"$ -$LK,"SetRAX",A="FL:::/Kernel/KernelB.HH,251"$ -$LK,"Min",A="FL:::/Kernel/KMathB.HC.Z,10",BI=385$ -$LK,"mp_cnt",A="FL:::/Kernel/KernelB.HH,232"$ +$LK,"SYS_PROGRESS2_MAX",A="FL:::/Kernel/KStart32.HC.Z,47"$ +$LK,"Break",A="FL:::/Kernel/KExcept.HC.Z,117",BI=380$ +$LK,"CH_SHIFT_SPACE",A="FL:::/Kernel/KernelA.HH,3468"$ +$LK,"JOBT_CALL",A="FL:::/Kernel/KernelA.HH,3157"$ +$LK,"ROPBF_DITHER",A="FL:::/Kernel/KernelA.HH,2909"$ +$LK,"FF_WRITE",A="FL:::/Kernel/KernelA.HH,2770"$ +$LK,"SetRAX",A="FL:::/Kernel/KernelB.HH,257"$ +$LK,"ICF_RES_TO_F64",A="FL:::/Kernel/KernelA.HH,1577"$ +$LK,"Min",A="FL:::/Kernel/KMathB.HC.Z,10",BI=381$ +$LK,"mp_cnt",A="FL:::/Kernel/KernelB.HH,238"$ $LK,"Exp",A="FL:::/Kernel/KernelB.HH,128"$ -$LK,"DCF_RECORD_EXTENTS",A="FL:::/Kernel/KernelA.HH,3642"$ -$LK,"FAT32FilesFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,846",BI=386$ -$LK,"ISO1Cd",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,159",BI=387$ +$LK,"DCF_RECORD_EXTENTS",A="FL:::/Kernel/KernelA.HH,3595"$ +$LK,"FAT32FilesFind",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,834",BI=382$ +$LK,"ISO1Cd",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,159",BI=383$ $LK,"_HASH_ADD_AFTER",A="FL:::/Kernel/KHashA.HC.Z,191"$ $LK,"QueInit",A="FL:::/Kernel/KernelB.HH,66"$ -$LK,"SrvTaskCont",A="FL:::/Kernel/KTask.HC.Z,353",BI=388$ -$LK,"RS_ATTR_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2526"$ -$LK,"ICF_USE_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1596"$ -$LK,"ATAGetDevId",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,163",BI=389$ -$LK,"WBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,71",BI=390$ -$LK,"DOCT_ERROR",A="FL:::/Kernel/KernelA.HH,943"$ -$LK,"CopySingle",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,23",BI=391$ -$LK,"EXT_WIN_TO_TOP",A="FL:::/Kernel/KernelA.HH,576"$ -$LK,"MouseIPSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,195",BI=392$ -$LK,"ATAPIReadCapacity",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,253",BI=393$ -$LK,"MkDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,165",BI=394$ -$LK,"IsDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,90",BI=395$ -$LK,"SetMSR",A="FL:::/Kernel/KernelB.HH,262"$ +$LK,"SrvTaskCont",A="FL:::/Kernel/KTask.HC.Z,368",BI=384$ +$LK,"RS_ATTR_READ_ONLY",A="FL:::/Kernel/KernelA.HH,2513"$ +$LK,"ICF_USE_UNSIGNED",A="FL:::/Kernel/KernelA.HH,1584"$ +$LK,"ATAGetDevId",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,163",BI=385$ +$LK,"WBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,71",BI=386$ +$LK,"DOCT_ERROR",A="FL:::/Kernel/KernelA.HH,931"$ +$LK,"CopySingle",A="FL:::/Kernel/BlkDev/DskCopy.HC.Z,23",BI=387$ +$LK,"EXT_WIN_TO_TOP",A="FL:::/Kernel/KernelA.HH,579"$ +$LK,"ATAPIReadCapacity",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,257",BI=388$ +$LK,"MkDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,165",BI=389$ +$LK,"IsDir",A="FL:::/Kernel/BlkDev/DskDirB.HC.Z,90",BI=390$ +$LK,"SetMSR",A="FL:::/Kernel/KernelB.HH,268"$ +$LK,"mem_heap_limit",A="FL:::/Kernel/KernelB.HH,194"$ $LK,"ToI64",A="FL:::/Kernel/KernelB.HH,121"$ -$LK,"IET_MAIN",A="FL:::/Kernel/KernelA.HH,416"$ -$LK,"ScanCode2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,248",BI=396$ -$LK,"DOCf_INVERT",A="FL:::/Kernel/KernelA.HH,1323"$ -$LK,"DOCF_INVERT",A="FL:::/Kernel/KernelA.HH,1286"$ -$LK,"sys_heap_limit",A="FL:::/Kernel/KernelB.HH,194"$ -$LK,"FileExtRem",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,10",BI=397$ +$LK,"IET_MAIN",A="FL:::/Kernel/KernelA.HH,415"$ +$LK,"ScanCode2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,248",BI=391$ +$LK,"DOCf_INVERT",A="FL:::/Kernel/KernelA.HH,1311"$ +$LK,"DOCF_INVERT",A="FL:::/Kernel/KernelA.HH,1274"$ +$LK,"SEMA_FAR_CALL32",A="FL:::/Kernel/KernelA.HH,606"$ +$LK,"FileExtRem",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,10",BI=392$ $LK,"Tan",A="FL:::/Kernel/KernelB.HH,118"$ -$LK,"SYS_PROGRESS3_MAX",A="FL:::/Kernel/KStart32.HC.Z,40"$ -$LK,"SUF_REM_LEADING",A="FL:::/Kernel/KernelA.HH,3788"$ -$LK,"OPTf_USE_IMM64",A="FL:::/Kernel/KernelA.HH,1545"$ -$LK,"Raw",A="FL:::/Kernel/KMisc.HC.Z,255",BI=398$ -$LK,"Msg",A="FL:::/Kernel/SrvCmd.HC.Z,258",BI=399$ -$LK,"OPTf_GLBLS_ON_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,1542"$ -$LK,"KbdInit",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,424",BI=400$ -$LK,"chars_bmp_zero_tab_ff_cr_nl_cursor_dollar",A="FL:::/Kernel/StrA.HC.Z,368"$ +$LK,"SYS_PROGRESS3_MAX",A="FL:::/Kernel/KStart32.HC.Z,52"$ +$LK,"SUF_REM_LEADING",A="FL:::/Kernel/KernelA.HH,3741"$ +$LK,"OPTf_USE_IMM64",A="FL:::/Kernel/KernelA.HH,1533"$ +$LK,"Raw",A="FL:::/Kernel/KMisc.HC.Z,271",BI=393$ +$LK,"Msg",A="FL:::/Kernel/Job.HC.Z,259",BI=394$ +$LK,"MemPagAlloc",A="FL:::/Kernel/Mem/MemPag.HC.Z,11",BI=395$ +$LK,"OPTf_GLBLS_ON_DATA_HEAP",A="FL:::/Kernel/KernelA.HH,1530"$ +$LK,"KbdInit",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,424",BI=396$ $LK,"ToBool",A="FL:::/Kernel/KernelB.HH,119"$ -$LK,"TASKf_KILL_AFTER_DBG",A="FL:::/Kernel/KernelA.HH,3294"$ -$LK,"IRQMouse",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,13",BI=401$ +$LK,"TASKf_KILL_AFTER_DBG",A="FL:::/Kernel/KernelA.HH,3254"$ $LK,"PUT_HEX_U16",A="FL:::/Kernel/StrA.HC.Z,37"$ $LK,"PUT_HEX_U32",A="FL:::/Kernel/StrA.HC.Z,30"$ -$LK,"ATAPIStartStop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,144",BI=402$ +$LK,"ATAPIStartStop",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,144",BI=397$ $LK,"_SIGN",A="FL:::/Kernel/KMathA.HC.Z,347"$ -$LK,"PRTF_NEG_E",A="FL:::/Kernel/KernelA.HH,3924"$ -$LK,"REGT_R8",A="FL:::/Kernel/KernelA.HH,740"$ +$LK,"PRTF_NEG_E",A="FL:::/Kernel/KernelA.HH,3879"$ +$LK,"REGT_R8",A="FL:::/Kernel/KernelA.HH,728"$ +$LK,"SEMA_DEV_MEM",A="FL:::/Kernel/KernelA.HH,607"$ $LK,"log10_2",A="FL:::/Kernel/KernelA.HH,55"$ -$LK,"PrintErr",A="FL:::/Kernel/StrPrint.HC.Z,906",BI=403$ -$LK,"ROPF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2952"$ -$LK,"BDF_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2644"$ -$LK,"SCF_INS",A="FL:::/Kernel/KernelA.HH,3549"$ -$LK,"CPUf_RAN_A_TASK",A="FL:::/Kernel/KernelA.HH,3440"$ -$LK,"BDf_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2654"$ -$LK,"Snd",A="FL:::/Kernel/KMisc.HC.Z,163",BI=404$ -$LK,"GetChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,182",BI=405$ +$LK,"PrintErr",A="FL:::/Kernel/StrPrint.HC.Z,906",BI=398$ +$LK,"ROPF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2920"$ +$LK,"BDF_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2631"$ +$LK,"SCF_INS",A="FL:::/Kernel/KernelA.HH,3502"$ +$LK,"CPUf_RAN_A_TASK",A="FL:::/Kernel/KernelA.HH,3400"$ +$LK,"BDf_READ_CACHE",A="FL:::/Kernel/KernelA.HH,2641"$ +$LK,"Snd",A="FL:::/Kernel/KMisc.HC.Z,179",BI=399$ +$LK,"GetChar",A="FL:::/Kernel/SerialDev/Message.HC.Z,182",BI=400$ $LK,"Sin",A="FL:::/Kernel/KernelB.HH,105"$ -$LK,"TK_OR_OR",A="FL:::/Kernel/KernelA.HH,2087"$ +$LK,"TK_OR_OR",A="FL:::/Kernel/KernelA.HH,2074"$ +$LK,"SEMA_TMBEAT",A="FL:::/Kernel/KernelA.HH,614"$ $LK,"SYS_PCIBIOS_SERVICE_CALL",A="FL:::/Kernel/PCIBIOS.HC.Z,46"$ -$LK,"Now",A="FL:::/Kernel/KDate.HC.Z,191",BI=406$ +$LK,"Now",A="FL:::/Kernel/KDate.HC.Z,191",BI=401$ $LK,"Fldcw",A="FL:::/Kernel/KernelB.HH,130"$ -$LK,"TTS_ED_FILENAME",A="FL:::/Kernel/KernelA.HH,3277"$ -$LK,"WIf_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1453"$ -$LK,"IA32_EFER",A="FL:::/Kernel/KernelA.HH,522"$ -$LK,"SetRSP",A="FL:::/Kernel/KernelB.HH,254"$ -$LK,"Pop",A="FL:::/Kernel/KernelB.HH,249"$ -$LK,"sys_progresses",A="FL:::/Kernel/KernelB.HH,227"$ -$LK,"CMenuEntry",A="FL:::/Kernel/KernelA.HH,3141"$ -$LK,"OC_NOP2",A="FL:::/Kernel/KernelA.HH,1762"$ -$LK,"DOCT_RIGHT_MARGIN",A="FL:::/Kernel/KernelA.HH,912"$ +$LK,"TTS_ED_FILENAME",A="FL:::/Kernel/KernelA.HH,3237"$ +$LK,"WIf_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HH,1441"$ +$LK,"IA32_EFER",A="FL:::/Kernel/KernelA.HH,525"$ +$LK,"SetRSP",A="FL:::/Kernel/KernelB.HH,260"$ +$LK,"Pop",A="FL:::/Kernel/KernelB.HH,255"$ +$LK,"sys_progresses",A="FL:::/Kernel/KernelB.HH,233"$ +$LK,"CMenuEntry",A="FL:::/Kernel/KernelA.HH,3103"$ +$LK,"OC_NOP2",A="FL:::/Kernel/KernelA.HH,1749"$ +$LK,"DOCT_RIGHT_MARGIN",A="FL:::/Kernel/KernelA.HH,900"$ $LK,"PUT_HEX_U64",A="FL:::/Kernel/StrA.HC.Z,23"$ $LK,"SYS_KERNEL",A="FL:::/Kernel/KStart16.HC.Z,17"$ $LK,"RFLAGf_PARITY",A="FL:::/Kernel/KernelA.HH,309"$ -$LK,"SYS_PROGRESS4_MAX",A="FL:::/Kernel/KStart32.HC.Z,44"$ -$LK,"PRTF_PAD_ZERO",A="FL:::/Kernel/KernelA.HH,3914"$ -$LK,"SUF_TO_UPPER",A="FL:::/Kernel/KernelA.HH,3792"$ -$LK,"MBR_PT_REDSEA",A="FL:::/Kernel/KernelA.HH,2709"$ -$LK,"MBR_PT_NTFS",A="FL:::/Kernel/KernelA.HH,2708"$ -$LK,"MouseHandler",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,158",BI=407$ -$LK,"SCF_IP_L_DOWN",A="FL:::/Kernel/KernelA.HH,3546"$ -$LK,"SCf_IP_L_DOWN",A="FL:::/Kernel/KernelA.HH,3531"$ -$LK,"MSG_IP_L_DOWN",A="FL:::/Kernel/KernelA.HH,3232"$ -$LK,"LAPIC_TASK_PRIORITY",A="FL:::/Kernel/KernelA.HH,482"$ -$LK,"REGT_MM",A="FL:::/Kernel/KernelA.HH,746"$ -$LK,"DOCEf_POPUP",A="FL:::/Kernel/KernelA.HH,1106"$ -$LK,"DOCEF_POPUP",A="FL:::/Kernel/KernelA.HH,1020"$ -$LK,"SYS_SEMA_VGA",A="FL:::/Kernel/KernelA.HH,608"$ +$LK,"SYS_PROGRESS4_MAX",A="FL:::/Kernel/KStart32.HC.Z,57"$ +$LK,"PRTF_PAD_ZERO",A="FL:::/Kernel/KernelA.HH,3869"$ +$LK,"SUF_TO_UPPER",A="FL:::/Kernel/KernelA.HH,3745"$ +$LK,"MBR_PT_REDSEA",A="FL:::/Kernel/KernelA.HH,2696"$ +$LK,"MBR_PT_NTFS",A="FL:::/Kernel/KernelA.HH,2695"$ +$LK,"LAPIC_TASK_PRIORITY",A="FL:::/Kernel/KernelA.HH,485"$ +$LK,"REGT_MM",A="FL:::/Kernel/KernelA.HH,734"$ +$LK,"RLF_FULL_HEAPS",A="FL:::/Kernel/KernelA.HH,467"$ +$LK,"DOCEf_POPUP",A="FL:::/Kernel/KernelA.HH,1094"$ +$LK,"DOCEF_POPUP",A="FL:::/Kernel/KernelA.HH,1008"$ +$LK,"RLf_FULL_HEAPS",A="FL:::/Kernel/KernelA.HH,447"$ $LK,"ODEF_PAUSED",A="FL:::/Kernel/KernelA.HH,242"$ -$LK,"FATNameXSum",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,157",BI=408$ +$LK,"FATNameXSum",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,145",BI=402$ $LK,"Pow",A="FL:::/Kernel/KernelB.HH,137"$ $LK,"sys_boot_patch_table_base",A="FL:::/Kernel/KernelB.HH,39"$ -$LK,"WIF_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1415"$ -$LK,"DOCF_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1294"$ -$LK,"MStrUtil",A="FL:::/Kernel/StrB.HC.Z,58",BI=409$ +$LK,"MEM_HEAP_LIMIT",A="FL:::/Kernel/KStart32.HC.Z,7"$ +$LK,"WIF_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1403"$ +$LK,"DOCF_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1282"$ +$LK,"MStrUtil",A="FL:::/Kernel/StrB.HC.Z,58",BI=403$ $LK,"_D3_CROSS",A="FL:::/Kernel/KMathA.HC.Z,82"$ -$LK,"VGAP_INPUT_STAT",A="FL:::/Kernel/KernelA.HH,3736"$ -$LK,"DOCf_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1331"$ -$LK,"SYS_HEAP_LIMIT",A="FL:::/Kernel/KStart32.HC.Z,7"$ -$LK,"WIf_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1441"$ +$LK,"VGAP_INPUT_STAT",A="FL:::/Kernel/KernelA.HH,3689"$ +$LK,"DOCf_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HH,1319"$ +$LK,"WIf_SELF_BORDER",A="FL:::/Kernel/KernelA.HH,1429"$ $LK,"text",A="FL:::/Kernel/KGlbls.HC.Z,30"$ -$LK,"ATA_READ_NATIVE_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2261"$ -$LK,"MPrintQ",A="FL:::/Kernel/StrPrint.HC.Z,56",BI=410$ +$LK,"ATA_READ_NATIVE_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2248"$ +$LK,"MPrintQ",A="FL:::/Kernel/StrPrint.HC.Z,56",BI=404$ $LK,"MHeapCtrl",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,386"$ -$LK,"CCF_CMD_LINE",A="FL:::/Kernel/KernelA.HH,2125"$ -$LK,"RECALCt_FIND_CURSOR",A="FL:::/Kernel/KernelA.HH,1348"$ -$LK,"SYS_SEMA_SND",A="FL:::/Kernel/KernelA.HH,599"$ -$LK,"CCF_RAX",A="FL:::/Kernel/KernelA.HH,2155"$ -$LK,"DskCacheInvalidate",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,211",BI=411$ -$LK,"DOCG_BL_IV_UL",A="FL:::/Kernel/KernelA.HH,952"$ +$LK,"CCF_CMD_LINE",A="FL:::/Kernel/KernelA.HH,2112"$ +$LK,"RECALCt_FIND_CURSOR",A="FL:::/Kernel/KernelA.HH,1336"$ +$LK,"CCF_RAX",A="FL:::/Kernel/KernelA.HH,2142"$ +$LK,"DskCacheInvalidate",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,218",BI=405$ +$LK,"DOCG_BL_IV_UL",A="FL:::/Kernel/KernelA.HH,940"$ $LK,"HashSingleTableFind",A="FL:::/Kernel/KHashA.HC.Z,257"$ +$LK,"mem_heap_base",A="FL:::/Kernel/KernelB.HH,193"$ $LK,"sys_data_bp",A="FL:::/Kernel/KernelB.HH,190"$ $LK,"SYS_PCI_BUSES",A="FL:::/Kernel/KStart16.HC.Z,36"$ -$LK,"sys_heap_base",A="FL:::/Kernel/KernelB.HH,193"$ $LK,"_CLAMP_I64",A="FL:::/Kernel/KUtils.HC.Z,121"$ -$LK,"VGAP_MISC_OUTPUT",A="FL:::/Kernel/KernelA.HH,3727"$ -$LK,"BDf_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2652"$ -$LK,"Spaces2Tabs",A="FL:::/Kernel/StrA.HC.Z,477",BI=412$ -$LK,"Drv2Let",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,153",BI=413$ -$LK,"ROPBF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2940"$ -$LK,"MEM_E820_ENTRY_SIZE",A="FL:::/Kernel/KernelA.HH,358"$ -$LK,"KDRawPutS",A="FL:::/Kernel/KeyDev.HC.Z,97",BI=414$ +$LK,"VGAP_MISC_OUTPUT",A="FL:::/Kernel/KernelA.HH,3680"$ +$LK,"BDf_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HH,2639"$ +$LK,"Spaces2Tabs",A="FL:::/Kernel/StrA.HC.Z,472",BI=406$ +$LK,"Drv2Let",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,153",BI=407$ +$LK,"ROPBF_TWO_SIDED",A="FL:::/Kernel/KernelA.HH,2908"$ +$LK,"KDRawPutS",A="FL:::/Kernel/KeyDev.HC.Z,97",BI=408$ $LK,"Sqr",A="FL:::/Kernel/KernelB.HH,106"$ -$LK,"REG_RDI",A="FL:::/Kernel/KernelA.HH,1781"$ -$LK,"REG_ALLOC",A="FL:::/Kernel/KernelA.HH,1786"$ -$LK,"DOCf_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1329"$ -$LK,"SrvCmdsHandler",A="FL:::/Kernel/SrvCmd.HC.Z,351",BI=415$ -$LK,"progress1_max",A="FL:::/Kernel/KernelB.HH,209"$ -$LK,"CCF_ARRAY",A="FL:::/Kernel/KernelA.HH,2154"$ -$LK,"REG_RBP",A="FL:::/Kernel/KernelA.HH,1779"$ -$LK,"DOCEF_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1022"$ -$LK,"FifoU8Flush",A="FL:::/Kernel/KDataTypes.HC.Z,219",BI=416$ -$LK,"InStr",A="FL:::/Kernel/SrvCmd.HC.Z,466",BI=417$ -$LK,"SYS_PROGRESSES",A="FL:::/Kernel/KStart32.HC.Z,31"$ -$LK,"SUF_REM_SPACES",A="FL:::/Kernel/KernelA.HH,3790"$ -$LK,"CCF_PMT",A="FL:::/Kernel/KernelA.HH,2126"$ -$LK,"DOCEf_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1108"$ -$LK,"DskCacheHash",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,40",BI=418$ -$LK,"SCF_NUM",A="FL:::/Kernel/KernelA.HH,3543"$ -$LK,"ACD_DEF_FILENAME",A="FL:::/Kernel/KernelA.HH,1497"$ +$LK,"REG_RDI",A="FL:::/Kernel/KernelA.HH,1768"$ +$LK,"REG_ALLOC",A="FL:::/Kernel/KernelA.HH,1773"$ +$LK,"DOCf_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1317"$ +$LK,"CTRL_ALT_C",A="FL:::/Kernel/KernelA.HH,619"$ +$LK,"progress1_max",A="FL:::/Kernel/KernelB.HH,211"$ +$LK,"CCF_ARRAY",A="FL:::/Kernel/KernelA.HH,2141"$ +$LK,"REG_RBP",A="FL:::/Kernel/KernelA.HH,1766"$ +$LK,"DOCEF_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1010"$ +$LK,"FifoU8Flush",A="FL:::/Kernel/KDataTypes.HC.Z,219",BI=409$ +$LK,"InStr",A="FL:::/Kernel/Job.HC.Z,464",BI=410$ +$LK,"SYS_PROGRESSES",A="FL:::/Kernel/KStart32.HC.Z,41"$ +$LK,"SUF_REM_SPACES",A="FL:::/Kernel/KernelA.HH,3743"$ +$LK,"CCF_PMT",A="FL:::/Kernel/KernelA.HH,2113"$ +$LK,"DOCEf_FILTER_SKIP",A="FL:::/Kernel/KernelA.HH,1096"$ +$LK,"DskCacheHash",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,40",BI=411$ +$LK,"SCF_NUM",A="FL:::/Kernel/KernelA.HH,3496"$ +$LK,"ACD_DEF_FILENAME",A="FL:::/Kernel/KernelA.HH,1485"$ $LK,"fp_doc_put",A="FL:::/Kernel/KGlbls.HC.Z,34"$ -$LK,"DskCacheFind",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,64",BI=419$ -$LK,"IsRaw",A="FL:::/Kernel/KMisc.HC.Z,262",BI=420$ -$LK,"TK_DBL_COLON",A="FL:::/Kernel/KernelA.HH,2079"$ -$LK,"ATAPIReadTrackInfo",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,277",BI=421$ -$LK,"CATARep",A="FL:::/Kernel/KernelA.HH,2250"$ -$LK,"REG_RAX",A="FL:::/Kernel/KernelA.HH,1774"$ -$LK,"ATAReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,350",BI=422$ +$LK,"DskCacheFind",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,64",BI=412$ +$LK,"IsRaw",A="FL:::/Kernel/KMisc.HC.Z,278",BI=413$ +$LK,"TK_DBL_COLON",A="FL:::/Kernel/KernelA.HH,2066"$ +$LK,"ATAPIReadTrackInfo",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,281",BI=414$ +$LK,"CATARep",A="FL:::/Kernel/KernelA.HH,2237"$ +$LK,"REG_RAX",A="FL:::/Kernel/KernelA.HH,1761"$ +$LK,"ATAReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,353",BI=415$ $LK,"D3AddEqu",A="FL:::/Kernel/KernelB.HH,146"$ $LK,"ToUpper",A="FL:::/Kernel/KernelB.HH,58"$ -$LK,"REG_RBX",A="FL:::/Kernel/KernelA.HH,1777"$ -$LK,"SCR_DONE",A="FL:::/Kernel/SrvCmd.HC.Z,264"$ -$LK,"MDG_MASK",A="FL:::/Kernel/KernelA.HH,1584"$ -$LK,"ACD_EXTRA_CHAR",A="FL:::/Kernel/KernelA.HH,1517"$ -$LK,"Reboot",A="FL:::/Kernel/KEnd.HC.Z,119",BI=423$ +$LK,"REG_RBX",A="FL:::/Kernel/KernelA.HH,1764"$ +$LK,"MDG_MASK",A="FL:::/Kernel/KernelA.HH,1572"$ +$LK,"ACD_EXTRA_CHAR",A="FL:::/Kernel/KernelA.HH,1505"$ +$LK,"Reboot",A="FL:::/Kernel/KEnd.HC.Z,120",BI=416$ $LK,"acd",A="FL:::/Kernel/KGlbls.HC.Z,18"$ -$LK,"REG_RCX",A="FL:::/Kernel/KernelA.HH,1775"$ -$LK,"Ff_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,854"$ -$LK,"CHashClass",A="FL:::/Kernel/KernelA.HH,834"$ +$LK,"REG_RCX",A="FL:::/Kernel/KernelA.HH,1762"$ +$LK,"Ff_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,842"$ +$LK,"CHashClass",A="FL:::/Kernel/KernelA.HH,822"$ $LK,"ZERO_BUF_SIZE",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,1"$ -$LK,"LoadKernel",A="FL:::/Kernel/KLoad.HC.Z,240",BI=424$ -$LK,"SCF_KEY_UP",A="FL:::/Kernel/KernelA.HH,3538"$ -$LK,"SCf_KEY_UP",A="FL:::/Kernel/KernelA.HH,3523"$ -$LK,"MSG_IP_R_D_DOWN",A="FL:::/Kernel/KernelA.HH,3238"$ -$LK,"ICF_BY_VAL",A="FL:::/Kernel/KernelA.HH,1600"$ -$LK,"REG_RDX",A="FL:::/Kernel/KernelA.HH,1776"$ -$LK,"ATAPIReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,413",BI=425$ -$LK,"REG_RIP",A="FL:::/Kernel/KernelA.HH,1783"$ -$LK,"DOCEF_FROM_START",A="FL:::/Kernel/KernelA.HH,1002"$ -$LK,"SEMA_STRUCT_SIZE",A="FL:::/Kernel/KernelA.HH,585"$ -$LK,"SCR_CONT",A="FL:::/Kernel/SrvCmd.HC.Z,265"$ -$LK,"progress2_max",A="FL:::/Kernel/KernelB.HH,214"$ -$LK,"DOCEf_FROM_START",A="FL:::/Kernel/KernelA.HH,1090"$ -$LK,"SYS_SEMA_TMBEAT",A="FL:::/Kernel/KernelA.HH,614"$ -$LK,"RLF_WINMGR",A="FL:::/Kernel/KernelA.HH,471"$ -$LK,"RLf_WINMGR",A="FL:::/Kernel/KernelA.HH,452"$ +$LK,"LoadKernel",A="FL:::/Kernel/KLoad.HC.Z,240",BI=417$ +$LK,"SCF_KEY_UP",A="FL:::/Kernel/KernelA.HH,3491"$ +$LK,"SCf_KEY_UP",A="FL:::/Kernel/KernelA.HH,3476"$ +$LK,"ICF_BY_VAL",A="FL:::/Kernel/KernelA.HH,1588"$ +$LK,"REG_RDX",A="FL:::/Kernel/KernelA.HH,1763"$ +$LK,"SEMA_TT",A="FL:::/Kernel/KernelA.HH,610"$ +$LK,"ATAPIReadBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,416",BI=418$ +$LK,"REG_RIP",A="FL:::/Kernel/KernelA.HH,1770"$ +$LK,"DOCEF_FROM_START",A="FL:::/Kernel/KernelA.HH,990"$ +$LK,"progress2_max",A="FL:::/Kernel/KernelB.HH,217"$ +$LK,"DOCEf_FROM_START",A="FL:::/Kernel/KernelA.HH,1078"$ +$LK,"SEMA_JUST_PUMP_MSGS",A="FL:::/Kernel/KernelA.HH,613"$ +$LK,"RLF_WINMGR",A="FL:::/Kernel/KernelA.HH,474"$ +$LK,"RLf_WINMGR",A="FL:::/Kernel/KernelA.HH,454"$ $LK,"C:/Doc/D3.DD.Z",A="FL:::/Kernel/KernelB.HH,145"$ -$LK,"SUF_SCALE_INDENT",A="FL:::/Kernel/KernelA.HH,3796"$ -$LK,"CT_7_BIT",A="FL:::/Kernel/KernelA.HH,3745"$ -$LK,"PUSH_REGS",A="FL:::/Kernel/KernelA.HH,1767"$ +$LK,"SUF_SCALE_INDENT",A="FL:::/Kernel/KernelA.HH,3749"$ +$LK,"CT_7_BIT",A="FL:::/Kernel/KernelA.HH,3698"$ +$LK,"PUSH_REGS",A="FL:::/Kernel/KernelA.HH,1754"$ $LK,"MAX_I8",A="FL:::/Kernel/KernelA.HH,25"$ -$LK,"KbdMouseHandler",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,236",BI=426$ -$LK,"Color2Str",A="FL:::/Kernel/KDefine.HC.Z,127",BI=427$ -$LK,"MAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,407",BI=428$ -$LK,"EDF_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1249"$ -$LK,"LAPIC_DFR",A="FL:::/Kernel/KernelA.HH,487"$ +$LK,"Color2Str",A="FL:::/Kernel/KDefine.HC.Z,127",BI=419$ +$LK,"MAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,407",BI=420$ +$LK,"EDF_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1237"$ +$LK,"CTRL_ALT_X",A="FL:::/Kernel/KernelA.HH,620"$ +$LK,"LAPIC_DFR",A="FL:::/Kernel/KernelA.HH,490"$ $LK,"CDATE_BASE_DAY_OF_WEEK",A="FL:::/Kernel/KernelA.HH,185"$ -$LK,"StrFirstOcc",A="FL:::/Kernel/StrA.HC.Z,572",BI=429$ -$LK,"MSG_NULL",A="FL:::/Kernel/KernelA.HH,3227"$ -$LK,"CCF_QUESTION_HELP",A="FL:::/Kernel/KernelA.HH,2128"$ -$LK,"EDf_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1255"$ -$LK,"MPrintq",A="FL:::/Kernel/StrPrint.HC.Z,113",BI=430$ -$LK,"AMAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,418",BI=431$ -$LK,"MEM_DFT_STK",A="FL:::/Kernel/KernelA.HH,2889"$ +$LK,"StrFirstOcc",A="FL:::/Kernel/StrA.HC.Z,567",BI=421$ +$LK,"MSG_NULL",A="FL:::/Kernel/KernelA.HH,3187"$ +$LK,"CCF_QUESTION_HELP",A="FL:::/Kernel/KernelA.HH,2115"$ +$LK,"EDf_COLLAPSE",A="FL:::/Kernel/KernelA.HH,1243"$ +$LK,"MPrintq",A="FL:::/Kernel/StrPrint.HC.Z,113",BI=422$ +$LK,"AMAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,418",BI=423$ +$LK,"MEM_DFT_STK",A="FL:::/Kernel/KernelA.HH,2857"$ $LK,"sys_font_cyrillic",A="FL:::/Kernel/FontCyrillic.HC.Z,3"$ -$LK,"SYS_FOCUS_TASK",A="FL:::/Kernel/KStart32.HC.Z,49"$ -$LK,"DYING_JIFFIES",A="FL:::/Kernel/KernelA.HH,3315"$ -$LK,"FUF_JUST_DD",A="FL:::/Kernel/KernelA.HH,2610"$ -$LK,"FUf_JUST_DD",A="FL:::/Kernel/KernelA.HH,2583"$ +$LK,"SYS_FOCUS_TASK",A="FL:::/Kernel/KStart32.HC.Z,63"$ +$LK,"DYING_JIFFIES",A="FL:::/Kernel/KernelA.HH,3276"$ +$LK,"FUF_JUST_DD",A="FL:::/Kernel/KernelA.HH,2597"$ +$LK,"FUf_JUST_DD",A="FL:::/Kernel/KernelA.HH,2570"$ $LK,"dbg",A="FL:::/Kernel/KGlbls.HC.Z,22"$ -$LK,"QSort",A="FL:::/Kernel/QSort.HC.Z,85",BI=432$ +$LK,"QSort",A="FL:::/Kernel/QSort.HC.Z,85",BI=424$ $LK,"OutU32",A="FL:::/Kernel/KernelB.HH,79"$ $LK,"OutU16",A="FL:::/Kernel/KernelB.HH,78"$ -$LK,"SYS_SEMA_JUST_PUMP_MSGS",A="FL:::/Kernel/KernelA.HH,613"$ -$LK,"LAPIC_ICR_HIGH",A="FL:::/Kernel/KernelA.HH,497"$ -$LK,"LMF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3806"$ -$LK,"SFF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3800"$ +$LK,"LAPIC_ICR_HIGH",A="FL:::/Kernel/KernelA.HH,500"$ +$LK,"LMF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3759"$ +$LK,"SFF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HH,3753"$ $LK,"HashRemDel",A="FL:::/Kernel/KHashA.HC.Z,264"$ -$LK,"REG_RSI",A="FL:::/Kernel/KernelA.HH,1780"$ +$LK,"REG_RSI",A="FL:::/Kernel/KernelA.HH,1767"$ $LK,"HashAdd",A="FL:::/Kernel/KHashA.HC.Z,262"$ -$LK,"mp_cnt_lock",A="FL:::/Kernel/KernelB.HH,234"$ -$LK,"MLF_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,779"$ -$LK,"IsSuspended",A="FL:::/Kernel/KTask.HC.Z,76",BI=433$ -$LK,"CAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,395",BI=434$ -$LK,"BDF_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2640"$ -$LK,"CAsmUnresolvedRef",A="FL:::/Kernel/KernelA.HH,1854"$ -$LK,"BDf_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2650"$ -$LK,"DOCT_SPRITE",A="FL:::/Kernel/KernelA.HH,938"$ -$LK,"WClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,92",BI=435$ -$LK,"RClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,46",BI=436$ +$LK,"mp_cnt_lock",A="FL:::/Kernel/KernelB.HH,240"$ +$LK,"MLF_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HH,767"$ +$LK,"IsSuspended",A="FL:::/Kernel/KTask.HC.Z,91",BI=425$ +$LK,"CAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,395",BI=426$ +$LK,"BDF_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2627"$ +$LK,"CAsmUnresolvedRef",A="FL:::/Kernel/KernelA.HH,1841"$ +$LK,"BDf_INITIALIZED",A="FL:::/Kernel/KernelA.HH,2637"$ +$LK,"DOCT_SPRITE",A="FL:::/Kernel/KernelA.HH,926"$ +$LK,"WClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,92",BI=427$ +$LK,"RClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,46",BI=428$ $LK,"sys_neg_pows_lets",A="FL:::/Kernel/StrPrint.HC.Z,201"$ -$LK,"progress3_max",A="FL:::/Kernel/KernelB.HH,219"$ +$LK,"progress3_max",A="FL:::/Kernel/KernelB.HH,223"$ $LK,"SqrI64",A="FL:::/Kernel/KernelB.HH,107"$ -$LK,"BDF_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2646"$ -$LK,"OPTF_ECHO",A="FL:::/Kernel/KernelA.HH,1547"$ -$LK,"OPTf_ECHO",A="FL:::/Kernel/KernelA.HH,1533"$ -$LK,"LAPIC_EOI",A="FL:::/Kernel/KernelA.HH,485"$ +$LK,"BDF_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2633"$ +$LK,"OPTF_ECHO",A="FL:::/Kernel/KernelA.HH,1535"$ +$LK,"OPTf_ECHO",A="FL:::/Kernel/KernelA.HH,1521"$ +$LK,"LAPIC_EOI",A="FL:::/Kernel/KernelA.HH,488"$ $LK,"sys_pos_pows_lets",A="FL:::/Kernel/StrPrint.HC.Z,200"$ -$LK,"QueSize",A="FL:::/Kernel/KDataTypes.HC.Z,76",BI=437$ +$LK,"QueSize",A="FL:::/Kernel/KDataTypes.HC.Z,76",BI=429$ $LK,"LIN_CONGRUE_A",A="FL:::/Kernel/KMathB.HC.Z,74"$ -$LK,"CT_8_BIT",A="FL:::/Kernel/KernelA.HH,3746"$ -$LK,"REG_RSP",A="FL:::/Kernel/KernelA.HH,1778"$ -$LK,"CtrlAltDel",A="FL:::/Kernel/KeyDev.HC.Z,128",BI=438$ +$LK,"VM_NATIVE",A="FL:::/Kernel/KernelA.HH,3890"$ +$LK,"OS_NATIVE",A="FL:::/Kernel/KernelA.HH,3885"$ +$LK,"CT_8_BIT",A="FL:::/Kernel/KernelA.HH,3699"$ +$LK,"REG_RSP",A="FL:::/Kernel/KernelA.HH,1765"$ +$LK,"CtrlAltDel",A="FL:::/Kernel/KeyDev.HC.Z,128",BI=430$ $LK,"LIN_CONGRUE_C",A="FL:::/Kernel/KMathB.HC.Z,75"$ -$LK,"CTRLF_CAPTURE_LEFT_IP",A="FL:::/Kernel/KernelA.HH,3096"$ -$LK,"LFSF_DEFINE",A="FL:::/Kernel/KernelA.HH,2034"$ -$LK,"OPTf_WARN_HEADER_MISMATCH",A="FL:::/Kernel/KernelA.HH,1538"$ -$LK,"BLK_SIZE_BITS",A="FL:::/Kernel/KernelA.HH,2296"$ -$LK,"AOT_BIN_BLK_BITS",A="FL:::/Kernel/KernelA.HH,1795"$ -$LK,"HTT_FUN",A="FL:::/Kernel/KernelA.HH,689"$ +$LK,"LFSF_DEFINE",A="FL:::/Kernel/KernelA.HH,2021"$ +$LK,"OPTf_WARN_HEADER_MISMATCH",A="FL:::/Kernel/KernelA.HH,1526"$ +$LK,"BLK_SIZE_BITS",A="FL:::/Kernel/KernelA.HH,2283"$ +$LK,"AOT_BIN_BLK_BITS",A="FL:::/Kernel/KernelA.HH,1782"$ +$LK,"HTT_FUN",A="FL:::/Kernel/KernelA.HH,677"$ $LK,"I_DIV_ZERO",A="FL:::/Kernel/KernelA.HH,287"$ -$LK,"SrvCtrlInit",A="FL:::/Kernel/SrvCmd.HC.Z,18",BI=439$ -$LK,"DOCEF_DEFINE",A="FL:::/Kernel/KernelA.HH,969"$ -$LK,"DOCEf_DEFINE",A="FL:::/Kernel/KernelA.HH,1057"$ -$LK,"HeapCtrlInit",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,1",BI=440$ -$LK,"progress1",A="FL:::/Kernel/KernelB.HH,206"$ +$LK,"DOCEF_DEFINE",A="FL:::/Kernel/KernelA.HH,957"$ +$LK,"DOCEf_DEFINE",A="FL:::/Kernel/KernelA.HH,1045"$ +$LK,"HeapCtrlInit",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,1",BI=431$ +$LK,"SEMA_DBG_MODE",A="FL:::/Kernel/KernelA.HH,598"$ +$LK,"progress1",A="FL:::/Kernel/KernelB.HH,208"$ $LK,"Floor",A="FL:::/Kernel/KernelB.HH,131"$ -$LK,"CIPStateGlbls",A="FL:::/Kernel/KernelA.HH,3047"$ -$LK,"SYSf_CTRL_ALT_C",A="FL:::/Kernel/KernelA.HH,619"$ -$LK,"progress2",A="FL:::/Kernel/KernelB.HH,211"$ +$LK,"progress2",A="FL:::/Kernel/KernelB.HH,214"$ $LK,"_CLAMP_U64",A="FL:::/Kernel/KUtils.HC.Z,133"$ -$LK,"progress3",A="FL:::/Kernel/KernelB.HH,216"$ -$LK,"FUF_JUST_GR",A="FL:::/Kernel/KernelA.HH,2614"$ -$LK,"FUf_JUST_GR",A="FL:::/Kernel/KernelA.HH,2587"$ -$LK,"MPN_VECT",A="FL:::/Kernel/KernelA.HH,506"$ +$LK,"CMsStateGlbls",A="FL:::/Kernel/KernelA.HH,3012"$ +$LK,"progress3",A="FL:::/Kernel/KernelB.HH,220"$ +$LK,"FUF_JUST_GR",A="FL:::/Kernel/KernelA.HH,2601"$ +$LK,"FUf_JUST_GR",A="FL:::/Kernel/KernelA.HH,2574"$ +$LK,"ICF_RES_TO_INT",A="FL:::/Kernel/KernelA.HH,1578"$ +$LK,"MPN_VECT",A="FL:::/Kernel/KernelA.HH,509"$ $LK,"MAX_U8",A="FL:::/Kernel/KernelA.HH,27"$ $LK,"RAWDR_COL",A="FL:::/Kernel/KDbg.HC.Z,289"$ -$LK,"progress4",A="FL:::/Kernel/KernelB.HH,221"$ -$LK,"CtrlAltCBSet",A="FL:::/Kernel/KeyDev.HC.Z,178",BI=441$ -$LK,"SysTimerRead",A="FL:::/Kernel/KMisc.HC.Z,61",BI=442$ +$LK,"progress4",A="FL:::/Kernel/KernelB.HH,226"$ +$LK,"CtrlAltCBSet",A="FL:::/Kernel/KeyDev.HC.Z,178",BI=432$ +$LK,"SysTimerRead",A="FL:::/Kernel/KMisc.HC.Z,61",BI=433$ $LK,"dev",A="FL:::/Kernel/KGlbls.HC.Z,23"$ -$LK,"MSG_IP_L_D_UP",A="FL:::/Kernel/KernelA.HH,3235"$ -$LK,"FunSegCacheFind",A="FL:::/Kernel/FunSeg.HC.Z,114",BI=443$ -$LK,"HTT_REG",A="FL:::/Kernel/KernelA.HH,695"$ -$LK,"StrFirstRem",A="FL:::/Kernel/StrA.HC.Z,582",BI=444$ +$LK,"FunSegCacheFind",A="FL:::/Kernel/FunSeg.HC.Z,114",BI=434$ +$LK,"MsUpdate",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,9",BI=435$ +$LK,"CInsReg",A="FL:::/Kernel/KernelA.HH,3896"$ +$LK,"HTT_REG",A="FL:::/Kernel/KernelA.HH,683"$ +$LK,"StrFirstRem",A="FL:::/Kernel/StrA.HC.Z,577",BI=436$ +$LK,"CTRLF_CAPTURE_LEFT_MS",A="FL:::/Kernel/KernelA.HH,3058"$ $LK,"SYS_VAR_INIT_VAL",A="FL::/Tmp.DD.Z,1"$ -$LK,"DCF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3624"$ -$LK,"ans",A="FL:::/Kernel/KernelA.HH,3418"$ -$LK,"ICF_DEL_PREV_INS",A="FL:::/Kernel/KernelA.HH,1616"$ -$LK,"LAPIC_LDR",A="FL:::/Kernel/KernelA.HH,488"$ -$LK,"BptFind",A="FL:::/Kernel/KDbg.HC.Z,344",BI=445$ +$LK,"DCF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3577"$ +$LK,"ans",A="FL:::/Kernel/KernelA.HH,3378"$ +$LK,"ICF_DEL_PREV_INS",A="FL:::/Kernel/KernelA.HH,1604"$ +$LK,"LAPIC_LDR",A="FL:::/Kernel/KernelA.HH,491"$ +$LK,"BptFind",A="FL:::/Kernel/KDbg.HC.Z,344",BI=437$ $LK,"kbd",A="FL:::/Kernel/KGlbls.HC.Z,26"$ -$LK,"progress4_max",A="FL:::/Kernel/KernelB.HH,224"$ -$LK,"MouseUpdatePost",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,126",BI=446$ -$LK,"HashDel",A="FL:::/Kernel/KHashB.HC.Z,59",BI=447$ -$LK,"CKbdStateGlbls",A="FL:::/Kernel/KernelA.HH,3004"$ +$LK,"progress4_max",A="FL:::/Kernel/KernelB.HH,229"$ +$LK,"HashDel",A="FL:::/Kernel/KHashB.HC.Z,59",BI=438$ +$LK,"ISOInit",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,5",BI=439$ +$LK,"CKbdStateGlbls",A="FL:::/Kernel/KernelA.HH,2972"$ $LK,"sys_font_std",A="FL:::/Kernel/FontStd.HC.Z,3"$ -$LK,"LinkedLstCopy",A="FL:::/Kernel/KDataTypes.HC.Z,11",BI=448$ -$LK,"IP_NULL",A="FL:::/Kernel/KernelA.HH,3045"$ -$LK,"MDF_NULL",A="FL:::/Kernel/KernelA.HH,1577"$ -$LK,"SYS_SEMA_DEV_MEM",A="FL:::/Kernel/KernelA.HH,607"$ -$LK,"ICF_A1_WAS_STK",A="FL:::/Kernel/KernelA.HH,1605"$ -$LK,"Let2Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,177",BI=449$ -$LK,"fat_long_name_map",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,183"$ -$LK,"DskCacheInit",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,1",BI=450$ -$LK,"CCF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,2161"$ -$LK,"DOC_COLOR_MACRO",A="FL:::/Kernel/KernelA.HH,1138"$ -$LK,"LAPIC_LOG_DST",A="FL:::/Kernel/KernelA.HH,486"$ -$LK,"RLF_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,475"$ -$LK,"RClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,87",BI=451$ -$LK,"VGAP_IDX",A="FL:::/Kernel/KernelA.HH,3728"$ -$LK,"ISO1CDirFill",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,56",BI=452$ -$LK,"RLf_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,456"$ -$LK,"SCR_EXIT",A="FL:::/Kernel/SrvCmd.HC.Z,266"$ -$LK,"QueDel",A="FL:::/Kernel/KDataTypes.HC.Z,41",BI=453$ -$LK,"ICF_DONT_RESTORE",A="FL:::/Kernel/KernelA.HH,1618"$ -$LK,"RedSeaDirNew",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,352",BI=454$ -$LK,"IET_REL64_EXPORT",A="FL:::/Kernel/KernelA.HH,409"$ -$LK,"IET_REL32_EXPORT",A="FL:::/Kernel/KernelA.HH,407"$ -$LK,"CExcept",A="FL:::/Kernel/KernelA.HH,3167"$ +$LK,"LinkedLstCopy",A="FL:::/Kernel/KDataTypes.HC.Z,11",BI=440$ +$LK,"MDF_NULL",A="FL:::/Kernel/KernelA.HH,1565"$ +$LK,"char_bmp_alpha",A="FL:::/Kernel/StrA.HC.Z,325"$ +$LK,"Let2Drv",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,188",BI=441$ +$LK,"fat_long_name_map",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,171"$ +$LK,"DskCacheInit",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,1",BI=442$ +$LK,"CCF_NO_ABSS",A="FL:::/Kernel/KernelA.HH,2148"$ +$LK,"DOC_COLOR_MACRO",A="FL:::/Kernel/KernelA.HH,1126"$ +$LK,"LAPIC_LOG_DST",A="FL:::/Kernel/KernelA.HH,489"$ +$LK,"RLF_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,478"$ +$LK,"RClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,87",BI=443$ +$LK,"VGAP_IDX",A="FL:::/Kernel/KernelA.HH,3681"$ +$LK,"ISO1CDirFill",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,56",BI=444$ +$LK,"RLf_ADAM_SERVER",A="FL:::/Kernel/KernelA.HH,458"$ +$LK,"QueDel",A="FL:::/Kernel/KDataTypes.HC.Z,41",BI=445$ +$LK,"Let2Let",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,161",BI=446$ +$LK,"ICF_DONT_RESTORE",A="FL:::/Kernel/KernelA.HH,1606"$ +$LK,"RedSeaDirNew",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,352",BI=447$ +$LK,"IET_REL64_EXPORT",A="FL:::/Kernel/KernelA.HH,408"$ +$LK,"IET_REL32_EXPORT",A="FL:::/Kernel/KernelA.HH,406"$ +$LK,"SYS_INIT_16MEG_SYS_CODE_BP",A="FL:::/Kernel/Mem/PageTables.HC.Z,157"$ +$LK,"CExcept",A="FL:::/Kernel/KernelA.HH,3129"$ $LK,"QueInsRev",A="FL:::/Kernel/KernelB.HH,70"$ -$LK,"SYSf_CTRL_ALT_X",A="FL:::/Kernel/KernelA.HH,620"$ -$LK,"SYS_EXTERN_TABLE",A="FL:::/Kernel/KStart32.HC.Z,25"$ -$LK,"PRTF_SLASH",A="FL:::/Kernel/KernelA.HH,3919"$ -$LK,"FUF_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2616"$ -$LK,"DOCT_HTML_CODE",A="FL:::/Kernel/KernelA.HH,942"$ -$LK,"LAPIC_IRR",A="FL:::/Kernel/KernelA.HH,495"$ -$LK,"chars_bmp_getkey",A="FL:::/Kernel/StrA.HC.Z,371"$ +$LK,"SYS_EXTERN_TABLE",A="FL:::/Kernel/KStart32.HC.Z,35"$ +$LK,"PRTF_SLASH",A="FL:::/Kernel/KernelA.HH,3874"$ +$LK,"FUF_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2603"$ +$LK,"DOCT_HTML_CODE",A="FL:::/Kernel/KernelA.HH,930"$ +$LK,"LAPIC_IRR",A="FL:::/Kernel/KernelA.HH,498"$ +$LK,"char_bmp_hex_numeric",A="FL:::/Kernel/StrA.HC.Z,353"$ $LK,"sys_run_level",A="FL:::/Kernel/KernelB.HH,41"$ -$LK,"JIFFY_FREQ",A="FL:::/Kernel/KernelA.HH,551"$ +$LK,"JIFFY_FREQ",A="FL:::/Kernel/KernelA.HH,554"$ $LK,"COrder2D3",A="FL:::/Kernel/KernelA.HH,201"$ -$LK,"TaskRegAddr",A="FL:::/Kernel/KDbg.HC.Z,266",BI=455$ -$LK,"DCSF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3646"$ -$LK,"LAPIC_ISR",A="FL:::/Kernel/KernelA.HH,493"$ +$LK,"TaskRegAddr",A="FL:::/Kernel/KDbg.HC.Z,266",BI=448$ +$LK,"DCSF_COMPRESSED",A="FL:::/Kernel/KernelA.HH,3599"$ +$LK,"LAPIC_ISR",A="FL:::/Kernel/KernelA.HH,496"$ $LK,"c32_eflags",A="FL:::/Kernel/PCIBIOS.HC.Z,158"$ $LK,"Pow10",A="FL:::/Kernel/KernelB.HH,138"$ -$LK,"ATA_WRITE_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2267"$ -$LK,"CCF_PREDEC",A="FL:::/Kernel/KernelA.HH,2153"$ +$LK,"ATA_WRITE_MULTI_EXT",A="FL:::/Kernel/KernelA.HH,2254"$ +$LK,"CCF_PREDEC",A="FL:::/Kernel/KernelA.HH,2140"$ $LK,"inf",A="FL:::/Kernel/KernelA.HH,48"$ $LK,"MIN_I8",A="FL:::/Kernel/KernelA.HH,24"$ $LK,"sys_macro_head",A="FL:::/Kernel/KGlbls.HC.Z,4"$ -$LK,"XTalk",A="FL:::/Kernel/SrvCmd.HC.Z,447",BI=456$ +$LK,"XTalk",A="FL:::/Kernel/Job.HC.Z,445",BI=449$ $LK,"SYS_ENTER_LONG_MODE",A="FL:::/Kernel/KStart64.HC.Z,44"$ $LK,"eps",A="FL:::/Kernel/KernelA.HH,58"$ -$LK,"LstSub",A="FL:::/Kernel/StrA.HC.Z,402",BI=457$ -$LK,"RLF_PATCHED",A="FL:::/Kernel/KernelA.HH,461"$ -$LK,"TaskDerivedValsUpdate",A="FL:::/Kernel/KTask.HC.Z,271",BI=458$ +$LK,"LstSub",A="FL:::/Kernel/StrA.HC.Z,397",BI=450$ +$LK,"RLF_PATCHED",A="FL:::/Kernel/KernelA.HH,463"$ +$LK,"TaskDerivedValsUpdate",A="FL:::/Kernel/KTask.HC.Z,286",BI=451$ $LK,"_HASH_ADD",A="FL:::/Kernel/KHashA.HC.Z,170"$ -$LK,"FRBlks",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,129",BI=459$ -$LK,"__TIME__",A="FL:::/Kernel/KernelA.HH,2024"$ -$LK,"RLf_PATCHED",A="FL:::/Kernel/KernelA.HH,442"$ -$LK,"FUf_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2589"$ -$LK,"ACD_WORD_FILENAME",A="FL:::/Kernel/KernelA.HH,1496"$ -$LK,"ATTRf_BLINK",A="FL:::/Kernel/KernelA.HH,895"$ -$LK,"ATTRF_BLINK",A="FL:::/Kernel/KernelA.HH,890"$ -$LK,"XchgU8",A="FL:::/Kernel/KernelB.HH,267"$ -$LK,"TTS_TASK_NAME",A="FL:::/Kernel/KernelA.HH,3276"$ -$LK,"CKernel",A="FL:::/Kernel/KernelA.HH,419"$ -$LK,"IET_IMM_I64",A="FL:::/Kernel/KernelA.HH,404"$ +$LK,"FRBlks",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,129",BI=452$ +$LK,"MEM_E801",A="FL:::/Kernel/KStart16.HC.Z,31"$ +$LK,"__TIME__",A="FL:::/Kernel/KernelA.HH,2011"$ +$LK,"RLf_PATCHED",A="FL:::/Kernel/KernelA.HH,443"$ +$LK,"FUf_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HH,2576"$ +$LK,"MEM_E820",A="FL:::/Kernel/KStart16.HC.Z,32"$ +$LK,"ACD_WORD_FILENAME",A="FL:::/Kernel/KernelA.HH,1484"$ +$LK,"ATTRf_BLINK",A="FL:::/Kernel/KernelA.HH,883"$ +$LK,"ATTRF_BLINK",A="FL:::/Kernel/KernelA.HH,878"$ +$LK,"XchgU8",A="FL:::/Kernel/KernelB.HH,273"$ +$LK,"TTS_TASK_NAME",A="FL:::/Kernel/KernelA.HH,3236"$ +$LK,"CKernel",A="FL:::/Kernel/KernelA.HH,418"$ +$LK,"IET_IMM_I64",A="FL:::/Kernel/KernelA.HH,403"$ $LK,"log2_10",A="FL:::/Kernel/KernelA.HH,53"$ -$LK,"LTBLUE",A="FL:::/Kernel/KernelA.HH,2969"$ -$LK,"FAT32AllocClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,456",BI=460$ -$LK,"DOCEf_TOP_Y",A="FL:::/Kernel/KernelA.HH,1079"$ -$LK,"DOCEF_TOP_Y",A="FL:::/Kernel/KernelA.HH,991"$ +$LK,"LTBLUE",A="FL:::/Kernel/KernelA.HH,2937"$ +$LK,"FAT32AllocClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,444",BI=453$ +$LK,"DOCEf_TOP_Y",A="FL:::/Kernel/KernelA.HH,1067"$ +$LK,"DOCEF_TOP_Y",A="FL:::/Kernel/KernelA.HH,979"$ +$LK,"MsSet",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,42",BI=454$ $LK,"_CALLEXTNUM",A="FL:::/Kernel/KUtils.HC.Z,362"$ -$LK,"SCF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3551"$ -$LK,"SCf_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3536"$ -$LK,"MSG_CMD",A="FL:::/Kernel/KernelA.HH,3228"$ +$LK,"SCF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3504"$ +$LK,"SCf_KEY_DESC",A="FL:::/Kernel/KernelA.HH,3489"$ +$LK,"MSG_CMD",A="FL:::/Kernel/KernelA.HH,3188"$ $LK,"IDTET_IRQ",A="FL:::/Kernel/KernelA.HH,282"$ -$LK,"CCF_LOCAL",A="FL:::/Kernel/KernelA.HH,2147"$ -$LK,"QueCnt",A="FL:::/Kernel/KDataTypes.HC.Z,65",BI=461$ -$LK,"chars_bmp_alpha",A="FL:::/Kernel/StrA.HC.Z,325"$ +$LK,"CCF_LOCAL",A="FL:::/Kernel/KernelA.HH,2134"$ +$LK,"QueCnt",A="FL:::/Kernel/KDataTypes.HC.Z,65",BI=455$ $LK,"SwapI64",A="FL:::/Kernel/KernelB.HH,111"$ $LK,"SqrU64",A="FL:::/Kernel/KernelB.HH,108"$ -$LK,"OPTf_NO_BUILTIN_CONST",A="FL:::/Kernel/KernelA.HH,1544"$ -$LK,"HTG_SRC_SYM",A="FL:::/Kernel/KernelA.HH,713"$ -$LK,"LAPIC_LVT_THERMAL",A="FL:::/Kernel/KernelA.HH,500"$ +$LK,"Panic",A="FL:::/Kernel/KDbg.HC.Z,638",BI=456$ +$LK,"OPTf_NO_BUILTIN_CONST",A="FL:::/Kernel/KernelA.HH,1532"$ +$LK,"HTG_SRC_SYM",A="FL:::/Kernel/KernelA.HH,701"$ +$LK,"LAPIC_LVT_THERMAL",A="FL:::/Kernel/KernelA.HH,503"$ $LK,"RFLAGf_IOPL0",A="FL:::/Kernel/KernelA.HH,317"$ -$LK,"IntsInit",A="FL:::/Kernel/KInts.HC.Z,129",BI=462$ +$LK,"IntsInit",A="FL:::/Kernel/KInts.HC.Z,129",BI=457$ $LK,"_XCHG_U8",A="FL:::/Kernel/KUtils.HC.Z,208"$ -$LK,"DOCEF_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,1007"$ +$LK,"DOCEF_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,995"$ $LK,"RFLAGf_IOPL1",A="FL:::/Kernel/KernelA.HH,318"$ -$LK,"FAT32FilesDel",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,726",BI=463$ -$LK,"DOCT_MENU_VAL",A="FL:::/Kernel/KernelA.HH,935"$ -$LK,"Bcd2Bin",A="FL:::/Kernel/KDate.HC.Z,123",BI=464$ -$LK,"CAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,434",BI=465$ -$LK,"MAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,423",BI=466$ +$LK,"FAT32FilesDel",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,714",BI=458$ +$LK,"DOCT_MENU_VAL",A="FL:::/Kernel/KernelA.HH,923"$ +$LK,"Bcd2Bin",A="FL:::/Kernel/KDate.HC.Z,123",BI=459$ +$LK,"CAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,434",BI=460$ +$LK,"MAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,423",BI=461$ $LK,"ext",A="FL:::/Kernel/KernelB.HH,53"$ -$LK,"FUN_SEG_CACHE_SIZE",A="FL:::/Kernel/KernelA.HH,3846"$ -$LK,"ACf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,1481"$ -$LK,"RawDm",A="FL:::/Kernel/KDbg.HC.Z,250",BI=467$ -$LK,"ICf_DONT_POP_FLOAT0",A="FL:::/Kernel/KernelA.HH,1611"$ -$LK,"DskCacheAdd",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,76",BI=468$ -$LK,"MPNMInt",A="FL:::/Kernel/MultiProc.HC.Z,159",BI=469$ +$LK,"FUN_SEG_CACHE_SIZE",A="FL:::/Kernel/KernelA.HH,3800"$ +$LK,"ACf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,1469"$ +$LK,"RawDm",A="FL:::/Kernel/KDbg.HC.Z,250",BI=462$ +$LK,"ICf_DONT_POP_FLOAT0",A="FL:::/Kernel/KernelA.HH,1599"$ +$LK,"DskCacheAdd",A="FL:::/Kernel/BlkDev/DskCache.HC.Z,76",BI=463$ +$LK,"MPNMInt",A="FL:::/Kernel/MultiProc.HC.Z,159",BI=464$ $LK,"_MSIZE2",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,353"$ -$LK,"LTPURPLE",A="FL:::/Kernel/KernelA.HH,2973"$ -$LK,"RawDr",A="FL:::/Kernel/KDbg.HC.Z,291",BI=470$ +$LK,"LTPURPLE",A="FL:::/Kernel/KernelA.HH,2941"$ +$LK,"RawDr",A="FL:::/Kernel/KDbg.HC.Z,291",BI=465$ $LK,"StrICmp",A="FL:::/Kernel/StrA.HC.Z,311"$ -$LK,"ATAR0_DATA",A="FL:::/Kernel/KernelA.HH,2276"$ +$LK,"ATAR0_DATA",A="FL:::/Kernel/KernelA.HH,2263"$ $LK,"MIN_U8",A="FL:::/Kernel/KernelA.HH,26"$ -$LK,"OPTf_TRACE",A="FL:::/Kernel/KernelA.HH,1534"$ -$LK,"HTG_FLAGS_MASK",A="FL:::/Kernel/KernelA.HH,711"$ -$LK,"DirFilesSort",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,92",BI=471$ -$LK,"HashLstAdd",A="FL:::/Kernel/KHashB.HC.Z,185",BI=472$ -$LK,"ACAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,402",BI=473$ -$LK,"SYS_PROGRESS1_T0",A="FL:::/Kernel/KStart32.HC.Z,33"$ +$LK,"OPTf_TRACE",A="FL:::/Kernel/KernelA.HH,1522"$ +$LK,"HTG_FLAGS_MASK",A="FL:::/Kernel/KernelA.HH,699"$ +$LK,"DirFilesSort",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,92",BI=466$ +$LK,"HashLstAdd",A="FL:::/Kernel/KHashB.HC.Z,185",BI=467$ +$LK,"ACAlloc",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,402",BI=468$ +$LK,"SYS_PROGRESS1_T0",A="FL:::/Kernel/KStart32.HC.Z,43"$ $LK,"SYS_RUN_LEVEL",A="FL:::/Kernel/KStart16.HC.Z,26"$ -$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HH,3544"$ -$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HH,3529"$ -$LK,"SndRst",A="FL:::/Kernel/KMisc.HC.Z,190",BI=474$ -$LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2656"$ -$LK,"TK_SUB_EQU",A="FL:::/Kernel/KernelA.HH,2097"$ -$LK,"TK_DIV_EQU",A="FL:::/Kernel/KernelA.HH,2092"$ -$LK,"OC_BPT",A="FL:::/Kernel/KernelA.HH,1759"$ -$LK,"DOCF_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1270"$ -$LK,"IOREDTAB",A="FL:::/Kernel/KernelA.HH,516"$ +$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HH,3497"$ +$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HH,3482"$ +$LK,"SndRst",A="FL:::/Kernel/KMisc.HC.Z,206",BI=469$ +$LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2643"$ +$LK,"TK_SUB_EQU",A="FL:::/Kernel/KernelA.HH,2084"$ +$LK,"TK_DIV_EQU",A="FL:::/Kernel/KernelA.HH,2079"$ +$LK,"OC_BPT",A="FL:::/Kernel/KernelA.HH,1746"$ +$LK,"DOCF_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1258"$ +$LK,"IOREDTAB",A="FL:::/Kernel/KernelA.HH,519"$ $LK,"Fstcw",A="FL:::/Kernel/KernelB.HH,132"$ -$LK,"MSG_IP_L_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3242"$ -$LK,"LAPIC_TMR",A="FL:::/Kernel/KernelA.HH,494"$ +$LK,"MSG_MS_L_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3202"$ +$LK,"LAPIC_TMR",A="FL:::/Kernel/KernelA.HH,497"$ $LK,"C32_EFLAGS",A="FL:::/Kernel/PCIBIOS.HC.Z,64"$ -$LK,"sys_compile_time",A="FL:::/Kernel/KernelB.HH,201"$ +$LK,"sys_compile_time",A="FL:::/Kernel/KernelB.HH,203"$ $LK,"_D3_DIV_EQU",A="FL:::/Kernel/KMathA.HC.Z,289"$ $LK,"_D3_SUB_EQU",A="FL:::/Kernel/KMathA.HC.Z,256"$ -$LK,"TASKf_SUSPENDED",A="FL:::/Kernel/KernelA.HH,3283"$ -$LK,"FUF_DIFF",A="FL:::/Kernel/KernelA.HH,2597"$ -$LK,"FUf_DIFF",A="FL:::/Kernel/KernelA.HH,2570"$ -$LK,"DOCf_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1306"$ -$LK,"CHashImport",A="FL:::/Kernel/KernelA.HH,765"$ -$LK,"CMT_LABEL",A="FL:::/Kernel/KernelA.HH,1685"$ +$LK,"TASKf_SUSPENDED",A="FL:::/Kernel/KernelA.HH,3243"$ +$LK,"FUF_DIFF",A="FL:::/Kernel/KernelA.HH,2584"$ +$LK,"FUf_DIFF",A="FL:::/Kernel/KernelA.HH,2557"$ +$LK,"DOCf_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HH,1294"$ +$LK,"CHashImport",A="FL:::/Kernel/KernelA.HH,753"$ +$LK,"CMT_LABEL",A="FL:::/Kernel/KernelA.HH,1672"$ $LK,"C32_ADD",A="FL:::/Kernel/PCIBIOS.HC.Z,122"$ -$LK,"MEM_PAGE_BITS",A="FL:::/Kernel/KernelA.HH,2878"$ -$LK,"MBS_USED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2858"$ -$LK,"HeapCtrlDel",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,15",BI=475$ +$LK,"MBS_USED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2826"$ +$LK,"HeapCtrlDel",A="FL:::/Kernel/Mem/HeapCtrl.HC.Z,15",BI=470$ $LK,"_CALLEXTSTR",A="FL:::/Kernel/KUtils.HC.Z,392"$ -$LK,"SYS_PROGRESS2_T0",A="FL:::/Kernel/KStart32.HC.Z,37"$ -$LK,"FF_USE_OLD_DATETIME",A="FL:::/Kernel/KernelA.HH,2787"$ -$LK,"BDT_ISO_FILE_READ",A="FL:::/Kernel/KernelA.HH,2634"$ -$LK,"CCf_PAREN",A="FL:::/Kernel/KernelA.HH,2163"$ -$LK,"CCF_PAREN",A="FL:::/Kernel/KernelA.HH,2162"$ -$LK,"ACD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1510"$ +$LK,"SYS_PROGRESS2_T0",A="FL:::/Kernel/KStart32.HC.Z,48"$ +$LK,"FF_USE_OLD_DATETIME",A="FL:::/Kernel/KernelA.HH,2775"$ +$LK,"BDT_ISO_FILE_READ",A="FL:::/Kernel/KernelA.HH,2621"$ +$LK,"CCf_PAREN",A="FL:::/Kernel/KernelA.HH,2150"$ +$LK,"CCF_PAREN",A="FL:::/Kernel/KernelA.HH,2149"$ +$LK,"ACD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1498"$ $LK,"CSysLimitBase",A="FL:::/Kernel/KernelA.HH,350"$ -$LK,"DVD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2298"$ +$LK,"DVD_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,2285"$ $LK,"QueIns",A="FL:::/Kernel/KernelB.HH,68"$ -$LK,"CGrSym",A="FL:::/Kernel/KernelA.HH,3651"$ -$LK,"ATAR0_FEAT",A="FL:::/Kernel/KernelA.HH,2277"$ -$LK,"RLF_HOME",A="FL:::/Kernel/KernelA.HH,473"$ -$LK,"RLf_HOME",A="FL:::/Kernel/KernelA.HH,454"$ +$LK,"CGrSym",A="FL:::/Kernel/KernelA.HH,3604"$ +$LK,"ATAR0_FEAT",A="FL:::/Kernel/KernelA.HH,2264"$ +$LK,"RLF_HOME",A="FL:::/Kernel/KernelA.HH,476"$ +$LK,"RLf_HOME",A="FL:::/Kernel/KernelA.HH,456"$ $LK,"snd",A="FL:::/Kernel/KGlbls.HC.Z,29"$ -$LK,"SC_ENTER",A="FL:::/Kernel/KernelA.HH,3559"$ -$LK,"LTCYAN",A="FL:::/Kernel/KernelA.HH,2971"$ -$LK,"FUF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2621"$ -$LK,"CCF_PREINC",A="FL:::/Kernel/KernelA.HH,2152"$ -$LK,"RECALCt_TO_SCRN",A="FL:::/Kernel/KernelA.HH,1349"$ -$LK,"HTT_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,684"$ -$LK,"HTT_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,683"$ -$LK,"FunSegCacheAdd",A="FL:::/Kernel/FunSeg.HC.Z,92",BI=476$ -$LK,"CTRLT_GENERIC",A="FL:::/Kernel/KernelA.HH,3089"$ -$LK,"CCF_KEEP_AT_SIGN",A="FL:::/Kernel/KernelA.HH,2136"$ -$LK,"RS_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2530"$ -$LK,"CCF_POSTDEC",A="FL:::/Kernel/KernelA.HH,2151"$ -$LK,"DirContextDel",A="FL:::/Kernel/BlkDev/DskDirContext.HC.Z,1",BI=477$ -$LK,"StrPrintFlags",A="FL:::/Kernel/StrB.HC.Z,177",BI=478$ -$LK,"SYS_PROGRESS3_T0",A="FL:::/Kernel/KStart32.HC.Z,41"$ -$LK,"TK_IFNDEF",A="FL:::/Kernel/KernelA.HH,2100"$ -$LK,"CMT_FLOAT_CONSTS",A="FL:::/Kernel/KernelA.HH,1690"$ -$LK,"CBinFile",A="FL:::/Kernel/KernelA.HH,373"$ -$LK,"SpawnQue",A="FL:::/Kernel/MultiProc.HC.Z,248",BI=479$ -$LK,"LAPIC_SVR",A="FL:::/Kernel/KernelA.HH,491"$ -$LK,"CMouseStateGlbls",A="FL:::/Kernel/KernelA.HH,3025"$ -$LK,"StrPrintFunSeg",A="FL:::/Kernel/FunSeg.HC.Z,134",BI=480$ -$LK,"ISO1_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2522"$ -$LK,"HashVal",A="FL:::/Kernel/KHashB.HC.Z,9",BI=481$ -$LK,"DOCEF_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1026"$ -$LK,"IET_IMM_U32",A="FL:::/Kernel/KernelA.HH,402"$ -$LK,"IET_IMM_U16",A="FL:::/Kernel/KernelA.HH,400"$ +$LK,"SC_ENTER",A="FL:::/Kernel/KernelA.HH,3512"$ +$LK,"LTCYAN",A="FL:::/Kernel/KernelA.HH,2939"$ +$LK,"FUF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,2608"$ +$LK,"CCF_PREINC",A="FL:::/Kernel/KernelA.HH,2139"$ +$LK,"RECALCt_TO_SCRN",A="FL:::/Kernel/KernelA.HH,1337"$ +$LK,"HTT_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,672"$ +$LK,"HTT_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,671"$ +$LK,"char_bmp_filename",A="FL:::/Kernel/StrA.HC.Z,345"$ +$LK,"FunSegCacheAdd",A="FL:::/Kernel/FunSeg.HC.Z,92",BI=471$ +$LK,"CTRLT_GENERIC",A="FL:::/Kernel/KernelA.HH,3051"$ +$LK,"CCF_KEEP_AT_SIGN",A="FL:::/Kernel/KernelA.HH,2123"$ +$LK,"RS_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2517"$ +$LK,"CCF_POSTDEC",A="FL:::/Kernel/KernelA.HH,2138"$ +$LK,"ICF_ARG1_WAS_STK",A="FL:::/Kernel/KernelA.HH,1593"$ +$LK,"MEM_PHYSICAL_SPACE",A="FL:::/Kernel/KStart16.HC.Z,33"$ +$LK,"DirContextDel",A="FL:::/Kernel/BlkDev/DskDirContext.HC.Z,1",BI=472$ +$LK,"StrPrintFlags",A="FL:::/Kernel/StrB.HC.Z,177",BI=473$ +$LK,"SYS_PROGRESS3_T0",A="FL:::/Kernel/KStart32.HC.Z,53"$ +$LK,"TK_IFNDEF",A="FL:::/Kernel/KernelA.HH,2087"$ +$LK,"CMT_FLOAT_CONSTS",A="FL:::/Kernel/KernelA.HH,1677"$ +$LK,"CBinFile",A="FL:::/Kernel/KernelA.HH,372"$ +$LK,"SpawnQue",A="FL:::/Kernel/MultiProc.HC.Z,247",BI=474$ +$LK,"LAPIC_SVR",A="FL:::/Kernel/KernelA.HH,494"$ +$LK,"SEMA_NUM_SEMAS",A="FL:::/Kernel/KernelA.HH,616"$ +$LK,"StrPrintFunSeg",A="FL:::/Kernel/FunSeg.HC.Z,134",BI=475$ +$LK,"ISO1_ATTR_DIR",A="FL:::/Kernel/KernelA.HH,2509"$ +$LK,"HashVal",A="FL:::/Kernel/KHashB.HC.Z,9",BI=476$ +$LK,"DOCEF_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1014"$ +$LK,"IET_IMM_U32",A="FL:::/Kernel/KernelA.HH,401"$ +$LK,"IET_IMM_U16",A="FL:::/Kernel/KernelA.HH,399"$ +$LK,"KbdMsInit",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,348",BI=477$ $LK,"QueRem",A="FL:::/Kernel/KernelB.HH,72"$ -$LK,"TASKf_DISABLE_BPTS",A="FL:::/Kernel/KernelA.HH,3289"$ -$LK,"BDT_NULL",A="FL:::/Kernel/KernelA.HH,2631"$ +$LK,"SYS_PROGRESS1_TF",A="FL:::/Kernel/KStart32.HC.Z,44"$ +$LK,"TASKf_DISABLE_BPTS",A="FL:::/Kernel/KernelA.HH,3249"$ +$LK,"BDT_NULL",A="FL:::/Kernel/KernelA.HH,2618"$ $LK,"FarCall32",A="FL:::/Kernel/PCIBIOS.HC.Z,161"$ -$LK,"SYS_PROGRESS4_T0",A="FL:::/Kernel/KStart32.HC.Z,45"$ -$LK,"SCF_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3550"$ -$LK,"SCf_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3535"$ -$LK,"ARGT_MOFFS32",A="FL:::/Kernel/KernelA.HH,1914"$ -$LK,"ARGT_MOFFS16",A="FL:::/Kernel/KernelA.HH,1913"$ -$LK,"sys_heap_dbg",A="FL:::/Kernel/KernelB.HH,180"$ -$LK,"PRTF_LEFT_JUSTIFY",A="FL:::/Kernel/KernelA.HH,3915"$ -$LK,"FUF_SINGLE",A="FL:::/Kernel/KernelA.HH,2606"$ -$LK,"FUf_SINGLE",A="FL:::/Kernel/KernelA.HH,2579"$ -$LK,"DOCEf_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1112"$ -$LK,"DVDImageWriteTask",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,117",BI=482$ -$LK,"LTGRAY",A="FL:::/Kernel/KernelA.HH,2967"$ -$LK,"CoreAPSethInit",A="FL:::/Kernel/MultiProc.HC.Z,276",BI=483$ -$LK,"IRQKbd",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,411",BI=484$ -$LK,"QueVectU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,132",BI=485$ +$LK,"SYS_PROGRESS4_T0",A="FL:::/Kernel/KStart32.HC.Z,58"$ +$LK,"SCF_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3503"$ +$LK,"SCf_NO_SHIFT",A="FL:::/Kernel/KernelA.HH,3488"$ +$LK,"ARGT_MOFFS32",A="FL:::/Kernel/KernelA.HH,1901"$ +$LK,"ARGT_MOFFS16",A="FL:::/Kernel/KernelA.HH,1900"$ +$LK,"sys_heap_dbg",A="FL:::/Kernel/KernelB.HH,179"$ +$LK,"PRTF_LEFT_JUSTIFY",A="FL:::/Kernel/KernelA.HH,3870"$ +$LK,"FUF_SINGLE",A="FL:::/Kernel/KernelA.HH,2593"$ +$LK,"FUf_SINGLE",A="FL:::/Kernel/KernelA.HH,2566"$ +$LK,"DOCEf_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HH,1100"$ +$LK,"DVDImageWriteTask",A="FL:::/Kernel/BlkDev/DskCDDVD.HC.Z,117",BI=478$ +$LK,"LTGRAY",A="FL:::/Kernel/KernelA.HH,2935"$ +$LK,"CoreAPSethInit",A="FL:::/Kernel/MultiProc.HC.Z,275",BI=479$ +$LK,"IRQKbd",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,411",BI=480$ +$LK,"QueVectU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,132",BI=481$ $LK,"SwapU32",A="FL:::/Kernel/KernelB.HH,115"$ $LK,"SwapU16",A="FL:::/Kernel/KernelB.HH,113"$ -$LK,"ARf_MESH_ED",A="FL:::/Kernel/KernelA.HH,3899"$ -$LK,"CAsmUndefHash",A="FL:::/Kernel/KernelA.HH,1811"$ -$LK,"HTt_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,654"$ -$LK,"HTt_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,653"$ +$LK,"ARf_MESH_ED",A="FL:::/Kernel/KernelA.HH,3854"$ +$LK,"CAsmUndefHash",A="FL:::/Kernel/KernelA.HH,1798"$ +$LK,"HTt_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,642"$ +$LK,"HTt_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HH,641"$ $LK,"C32_EDI",A="FL:::/Kernel/PCIBIOS.HC.Z,63"$ $LK,"pow10_I64",A="FL:::/Kernel/KGlbls.HC.Z,15"$ $LK,"sys_num_spawned_tasks",A="FL:::/Kernel/KGlbls.HC.Z,9"$ -$LK,"LAPIC_LVT_LINT0",A="FL:::/Kernel/KernelA.HH,502"$ -$LK,"Cluster2Blk",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,32",BI=486$ -$LK,"ArcFinishCompression",A="FL:::/Kernel/Compress.HC.Z,155",BI=487$ -$LK,"LAPIC_LVT_LINT1",A="FL:::/Kernel/KernelA.HH,503"$ +$LK,"LAPIC_LVT_LINT0",A="FL:::/Kernel/KernelA.HH,505"$ +$LK,"Cluster2Blk",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,32",BI=482$ +$LK,"ArcFinishCompression",A="FL:::/Kernel/Compress.HC.Z,155",BI=483$ +$LK,"LAPIC_LVT_LINT1",A="FL:::/Kernel/KernelA.HH,506"$ $LK,"sys_winmgr_task",A="FL:::/Kernel/KGlbls.HC.Z,11"$ -$LK,"SC_CAPS",A="FL:::/Kernel/KernelA.HH,3563"$ +$LK,"SYS_PROGRESS2_TF",A="FL:::/Kernel/KStart32.HC.Z,49"$ +$LK,"SC_CAPS",A="FL:::/Kernel/KernelA.HH,3516"$ $LK,"SYS_RAM_REBOOT_END",A="FL:::/Kernel/KStart64.HC.Z,99"$ -$LK,"REG_R8",A="FL:::/Kernel/KernelA.HH,1782"$ -$LK,"CMT_ARRAY_DIM",A="FL:::/Kernel/KernelA.HH,1691"$ -$LK,"ACD_POS_CHAR",A="FL:::/Kernel/KernelA.HH,1516"$ -$LK,"REGT_FSTK",A="FL:::/Kernel/KernelA.HH,745"$ -$LK,"ARGT_MOFFS64",A="FL:::/Kernel/KernelA.HH,1915"$ -$LK,"DOCF_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1265"$ -$LK,"CRAXRBCRCXRDX",A="FL:::/Kernel/KernelA.HH,569"$ +$LK,"REG_R8",A="FL:::/Kernel/KernelA.HH,1769"$ +$LK,"CMT_ARRAY_DIM",A="FL:::/Kernel/KernelA.HH,1678"$ +$LK,"ACD_POS_CHAR",A="FL:::/Kernel/KernelA.HH,1504"$ +$LK,"REGT_FSTK",A="FL:::/Kernel/KernelA.HH,733"$ +$LK,"ARGT_MOFFS64",A="FL:::/Kernel/KernelA.HH,1902"$ +$LK,"DOCF_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1253"$ +$LK,"CRAXRBCRCXRDX",A="FL:::/Kernel/KernelA.HH,572"$ $LK,"_SAVE_EXCEPT_REGS",A="FL:::/Kernel/KExcept.HC.Z,26"$ -$LK,"MDf_IMM",A="FL:::/Kernel/KernelA.HH,1571"$ -$LK,"DOCf_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1301"$ -$LK,"RoundI64",A="FL:::/Kernel/KMathB.HC.Z,47",BI=488$ -$LK,"CSndGlbls",A="FL:::/Kernel/KernelA.HH,3838"$ -$LK,"EXT_HEAPLOG_FREE",A="FL:::/Kernel/KernelA.HH,579"$ -$LK,"DrvSerialNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,279",BI=489$ +$LK,"MDf_IMM",A="FL:::/Kernel/KernelA.HH,1559"$ +$LK,"DOCf_COLOR_NAMES",A="FL:::/Kernel/KernelA.HH,1289"$ +$LK,"RoundI64",A="FL:::/Kernel/KMathB.HC.Z,47",BI=484$ +$LK,"CSndGlbls",A="FL:::/Kernel/KernelA.HH,3792"$ +$LK,"EXT_HEAPLOG_FREE",A="FL:::/Kernel/KernelA.HH,582"$ +$LK,"DrvSerialNum",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,289",BI=485$ $LK,"Fstsw",A="FL:::/Kernel/KernelB.HH,133"$ -$LK,"TASKf_TASK_LOCK",A="FL:::/Kernel/KernelA.HH,3281"$ -$LK,"BDT_ATA",A="FL:::/Kernel/KernelA.HH,2633"$ +$LK,"TASKf_TASK_LOCK",A="FL:::/Kernel/KernelA.HH,3241"$ +$LK,"BDT_ATA",A="FL:::/Kernel/KernelA.HH,2620"$ $LK,"RFLAGf_RESUME",A="FL:::/Kernel/KernelA.HH,320"$ $LK,"C32_EAX",A="FL:::/Kernel/PCIBIOS.HC.Z,58"$ -$LK,"PortNop",A="FL:::/Kernel/KMisc.HC.Z,1",BI=490$ +$LK,"PortNop",A="FL:::/Kernel/KMisc.HC.Z,1",BI=486$ $LK,"StrNCmp",A="FL:::/Kernel/StrA.HC.Z,313"$ -$LK,"FUF_PUBLIC",A="FL:::/Kernel/KernelA.HH,2603"$ -$LK,"FUf_PUBLIC",A="FL:::/Kernel/KernelA.HH,2576"$ -$LK,"CFAT32FileInfoSect",A="FL:::/Kernel/KernelA.HH,2369"$ +$LK,"FUF_PUBLIC",A="FL:::/Kernel/KernelA.HH,2590"$ +$LK,"FUf_PUBLIC",A="FL:::/Kernel/KernelA.HH,2563"$ +$LK,"CFAT32FileInfoSect",A="FL:::/Kernel/KernelA.HH,2356"$ +$LK,"SYS_PROGRESS3_TF",A="FL:::/Kernel/KStart32.HC.Z,54"$ $LK,"SYS_HEAP_INIT_VAL",A="FL::/Tmp.DD.Z,1"$ -$LK,"CATAPITrack",A="FL:::/Kernel/KernelA.HH,2421"$ +$LK,"CATAPITrack",A="FL:::/Kernel/KernelA.HH,2408"$ $LK,"C32_EBX",A="FL:::/Kernel/PCIBIOS.HC.Z,59"$ -$LK,"CCF_HAS_MISC_DATA",A="FL:::/Kernel/KernelA.HH,2143"$ -$LK,"LFSF_DOC",A="FL:::/Kernel/KernelA.HH,2033"$ -$LK,"ACD_PRONUNCIATION_CHAR",A="FL:::/Kernel/KernelA.HH,1515"$ -$LK,"ACD_PRONUNCIATION",A="FL:::/Kernel/KernelA.HH,1504"$ +$LK,"CCF_HAS_MISC_DATA",A="FL:::/Kernel/KernelA.HH,2130"$ +$LK,"LFSF_DOC",A="FL:::/Kernel/KernelA.HH,2020"$ +$LK,"ACD_PRONUNCIATION_CHAR",A="FL:::/Kernel/KernelA.HH,1503"$ +$LK,"ACD_PRONUNCIATION",A="FL:::/Kernel/KernelA.HH,1492"$ $LK,"C32_ECX",A="FL:::/Kernel/PCIBIOS.HC.Z,60"$ -$LK,"FifoU8Peek",A="FL:::/Kernel/KDataTypes.HC.Z,205",BI=491$ +$LK,"FifoU8Peek",A="FL:::/Kernel/KDataTypes.HC.Z,205",BI=487$ +$LK,"JobsHndlr",A="FL:::/Kernel/Job.HC.Z,349",BI=488$ $LK,"C32_EDX",A="FL:::/Kernel/PCIBIOS.HC.Z,61"$ -$LK,"LoadPass1",A="FL:::/Kernel/KLoad.HC.Z,67",BI=492$ -$LK,"LoadPass2",A="FL:::/Kernel/KLoad.HC.Z,154",BI=493$ -$LK,"ARf_MANAGE_SLIDER",A="FL:::/Kernel/KernelA.HH,3901"$ -$LK,"CSndData",A="FL:::/Kernel/KernelA.HH,3831"$ -$LK,"SC_PAGE_DOWN",A="FL:::/Kernel/KernelA.HH,3571"$ -$LK,"OC_NOP",A="FL:::/Kernel/KernelA.HH,1758"$ -$LK,"MSG_KEY_UP",A="FL:::/Kernel/KernelA.HH,3230"$ -$LK,"SYS_SEMA_SINGLE_USER",A="FL:::/Kernel/KernelA.HH,604"$ -$LK,"TimeStampFreqCal",A="FL:::/Kernel/KMisc.HC.Z,85",BI=494$ -$LK,"QueVectU8Get",A="FL:::/Kernel/KDataTypes.HC.Z,140",BI=495$ -$LK,"DOCF_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1263"$ -$LK,"PostMsg",A="FL:::/Kernel/SrvCmd.HC.Z,241",BI=496$ -$LK,"SVCT_CALL",A="FL:::/Kernel/KernelA.HH,3195"$ -$LK,"MDf_REG",A="FL:::/Kernel/KernelA.HH,1572"$ -$LK,"ATAPISeek",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,131",BI=497$ -$LK,"MPrintDate",A="FL:::/Kernel/StrPrint.HC.Z,49",BI=498$ +$LK,"LoadPass1",A="FL:::/Kernel/KLoad.HC.Z,67",BI=489$ +$LK,"JOB_DONE",A="FL:::/Kernel/Job.HC.Z,265"$ +$LK,"LoadPass2",A="FL:::/Kernel/KLoad.HC.Z,154",BI=490$ +$LK,"MemPagTaskAlloc",A="FL:::/Kernel/Mem/MemPag.HC.Z,114",BI=491$ +$LK,"ARf_MANAGE_SLIDER",A="FL:::/Kernel/KernelA.HH,3856"$ +$LK,"CSndData",A="FL:::/Kernel/KernelA.HH,3785"$ +$LK,"SC_PAGE_DOWN",A="FL:::/Kernel/KernelA.HH,3524"$ +$LK,"OC_NOP",A="FL:::/Kernel/KernelA.HH,1745"$ +$LK,"IntCore0TimerHndlr",A="FL:::/Kernel/KMisc.HC.Z,47",BI=492$ +$LK,"SYS_PROGRESS4_TF",A="FL:::/Kernel/KStart32.HC.Z,59"$ +$LK,"MSG_KEY_UP",A="FL:::/Kernel/KernelA.HH,3190"$ +$LK,"TimeStampFreqCal",A="FL:::/Kernel/KMisc.HC.Z,85",BI=493$ +$LK,"QueVectU8Get",A="FL:::/Kernel/KDataTypes.HC.Z,140",BI=494$ +$LK,"char_bmp_macro",A="FL:::/Kernel/StrA.HC.Z,371"$ +$LK,"DOCF_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1251"$ +$LK,"PostMsg",A="FL:::/Kernel/Job.HC.Z,242",BI=495$ +$LK,"MDf_REG",A="FL:::/Kernel/KernelA.HH,1560"$ +$LK,"ATAPISeek",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,131",BI=496$ +$LK,"MPrintDate",A="FL:::/Kernel/StrPrint.HC.Z,49",BI=497$ $LK,"_BIT_FIELD_EXT_U32",A="FL:::/Kernel/KUtils.HC.Z,167"$ -$LK,"SC_F10",A="FL:::/Kernel/KernelA.HH,3585"$ -$LK,"SC_F11",A="FL:::/Kernel/KernelA.HH,3586"$ -$LK,"SYS_SEMA_TT",A="FL:::/Kernel/KernelA.HH,610"$ -$LK,"Silent",A="FL:::/Kernel/KMisc.HC.Z,235",BI=499$ -$LK,"SC_F12",A="FL:::/Kernel/KernelA.HH,3587"$ -$LK,"WIF_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1422"$ -$LK,"CCF_POSTINC",A="FL:::/Kernel/KernelA.HH,2150"$ -$LK,"CCF_IN_IF",A="FL:::/Kernel/KernelA.HH,2131"$ -$LK,"DrvMakeFreeSlot",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,38",BI=500$ +$LK,"SC_F10",A="FL:::/Kernel/KernelA.HH,3538"$ +$LK,"SC_F11",A="FL:::/Kernel/KernelA.HH,3539"$ +$LK,"JOB_CONT",A="FL:::/Kernel/Job.HC.Z,266"$ +$LK,"Silent",A="FL:::/Kernel/KMisc.HC.Z,251",BI=498$ +$LK,"SC_F12",A="FL:::/Kernel/KernelA.HH,3540"$ +$LK,"WIF_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1410"$ +$LK,"CCF_POSTINC",A="FL:::/Kernel/KernelA.HH,2137"$ +$LK,"CCF_IN_IF",A="FL:::/Kernel/KernelA.HH,2118"$ +$LK,"DrvMakeFreeSlot",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,38",BI=499$ $LK,"HashStr",A="FL:::/Kernel/KHashA.HC.Z,254"$ -$LK,"CHashExport",A="FL:::/Kernel/KernelA.HH,760"$ -$LK,"FifoU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,167",BI=501$ -$LK,"DrvIsWritable",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,199",BI=502$ -$LK,"MDf_SIB",A="FL:::/Kernel/KernelA.HH,1574"$ -$LK,"chars_bmp_printable",A="FL:::/Kernel/StrA.HC.Z,381"$ +$LK,"CHashExport",A="FL:::/Kernel/KernelA.HH,748"$ +$LK,"FifoU8Del",A="FL:::/Kernel/KDataTypes.HC.Z,167",BI=500$ +$LK,"DrvIsWritable",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,206",BI=501$ +$LK,"MDf_SIB",A="FL:::/Kernel/KernelA.HH,1562"$ +$LK,"Freq2Ona",A="FL:::/Kernel/KMisc.HC.Z,171",BI=502$ $LK,"FWBlks",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,181",BI=503$ -$LK,"RLF_COMPILER",A="FL:::/Kernel/KernelA.HH,469"$ -$LK,"RLf_COMPILER",A="FL:::/Kernel/KernelA.HH,450"$ +$LK,"RLF_COMPILER",A="FL:::/Kernel/KernelA.HH,472"$ +$LK,"RLf_COMPILER",A="FL:::/Kernel/KernelA.HH,452"$ $LK,"SYS_INIT_PAGE_TABLES",A="FL:::/Kernel/Mem/PageTables.HC.Z,6"$ -$LK,"TASK_NAME_LEN",A="FL:::/Kernel/KernelA.HH,3307"$ -$LK,"COLORROP_COLORS_MASK",A="FL:::/Kernel/KernelA.HH,2989"$ +$LK,"TASK_NAME_LEN",A="FL:::/Kernel/KernelA.HH,3267"$ +$LK,"COLORROP_COLORS_MASK",A="FL:::/Kernel/KernelA.HH,2957"$ $LK,"C32_ESI",A="FL:::/Kernel/PCIBIOS.HC.Z,62"$ $LK,"BlkPoolsInit",A="FL:::/Kernel/Mem/BlkPool.HC.Z,29",BI=504$ -$LK,"SYS_DATA_BP",A="FL:::/Kernel/KStart32.HC.Z,28"$ -$LK,"VGAP_PALETTE_DATA",A="FL:::/Kernel/KernelA.HH,3733"$ -$LK,"ATAR0_HCYL",A="FL:::/Kernel/KernelA.HH,2281"$ -$LK,"DOCET_SEL",A="FL:::/Kernel/KernelA.HH,950"$ +$LK,"SYS_DATA_BP",A="FL:::/Kernel/KStart32.HC.Z,38"$ +$LK,"VGAP_PALETTE_DATA",A="FL:::/Kernel/KernelA.HH,3686"$ +$LK,"ATAR0_HCYL",A="FL:::/Kernel/KernelA.HH,2268"$ +$LK,"DOCET_SEL",A="FL:::/Kernel/KernelA.HH,938"$ $LK,"sys_code_bp",A="FL:::/Kernel/KernelB.HH,189"$ $LK,"RepOutU32",A="FL:::/Kernel/KernelB.HH,90"$ $LK,"RepOutU16",A="FL:::/Kernel/KernelB.HH,88"$ -$LK,"TK_SUBSCRIPT",A="FL:::/Kernel/KernelA.HH,2069"$ -$LK,"WIG_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1432"$ -$LK,"REGT_NONE",A="FL:::/Kernel/KernelA.HH,739"$ -$LK,"ARf_PSALMODY_JUKEBOX",A="FL:::/Kernel/KernelA.HH,3898"$ -$LK,"DOCEf_HTML_LINK",A="FL:::/Kernel/KernelA.HH,1058"$ -$LK,"DOCEF_HTML_LINK",A="FL:::/Kernel/KernelA.HH,970"$ +$LK,"TK_SUBSCRIPT",A="FL:::/Kernel/KernelA.HH,2056"$ +$LK,"WIG_TASK_DFT",A="FL:::/Kernel/KernelA.HH,1420"$ +$LK,"REGT_NONE",A="FL:::/Kernel/KernelA.HH,727"$ +$LK,"ARf_PSALMODY_JUKEBOX",A="FL:::/Kernel/KernelA.HH,3853"$ +$LK,"DOCEf_HTML_LINK",A="FL:::/Kernel/KernelA.HH,1046"$ +$LK,"DOCEF_HTML_LINK",A="FL:::/Kernel/KernelA.HH,958"$ $LK,"NORMAL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,3"$ $LK,"LinkedLstSize",A="FL:::/Kernel/KDataTypes.HC.Z,31",BI=505$ $LK,"SSF_NO_COMPRESSION",A="FL:::/Kernel/KernelA.HH,225"$ +$LK,"RLF_16MEG_ADAM_HEAP_CTRL",A="FL:::/Kernel/KernelA.HH,466"$ +$LK,"RLf_16MEG_ADAM_HEAP_CTRL",A="FL:::/Kernel/KernelA.HH,446"$ $LK,"DirContextNew",A="FL:::/Kernel/BlkDev/DskDirContext.HC.Z,23",BI=506$ $LK,"_SET_MSR",A="FL:::/Kernel/KUtils.HC.Z,458"$ -$LK,"HClf_LOCKED",A="FL:::/Kernel/KernelA.HH,2906"$ -$LK,"ACD_EXTRA_END",A="FL:::/Kernel/KernelA.HH,1509"$ -$LK,"SetRFlags",A="FL:::/Kernel/KernelB.HH,253"$ -$LK,"GetRFlags",A="FL:::/Kernel/KernelB.HH,247"$ -$LK,"DOCEF_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,974"$ -$LK,"MSG_IP_MOVE",A="FL:::/Kernel/KernelA.HH,3231"$ -$LK,"SVCT_TEXT_INPUT",A="FL:::/Kernel/KernelA.HH,3191"$ -$LK,"DOClf_LOCKED",A="FL:::/Kernel/KernelA.HH,1334"$ -$LK,"CallStkGrow",A="FL:::/Kernel/KTask.HC.Z,95",BI=507$ -$LK,"ATAR0_NSECT",A="FL:::/Kernel/KernelA.HH,2278"$ -$LK,"DOCEf_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,1062"$ -$LK,"RLF_DOC",A="FL:::/Kernel/KernelA.HH,470"$ -$LK,"chars_bmp_macro",A="FL:::/Kernel/StrA.HC.Z,376"$ +$LK,"JOBT_TEXT_INPUT",A="FL:::/Kernel/KernelA.HH,3153"$ +$LK,"HClf_LOCKED",A="FL:::/Kernel/KernelA.HH,2874"$ +$LK,"ACD_EXTRA_END",A="FL:::/Kernel/KernelA.HH,1497"$ +$LK,"SetRFlags",A="FL:::/Kernel/KernelB.HH,259"$ +$LK,"GetRFlags",A="FL:::/Kernel/KernelB.HH,253"$ +$LK,"DOCEF_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,962"$ +$LK,"DOClf_LOCKED",A="FL:::/Kernel/KernelA.HH,1322"$ +$LK,"CallStkGrow",A="FL:::/Kernel/KTask.HC.Z,110",BI=507$ +$LK,"KbdMsEvtTime",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,486",BI=508$ +$LK,"ATAR0_NSECT",A="FL:::/Kernel/KernelA.HH,2265"$ +$LK,"DOCEf_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HH,1050"$ +$LK,"RLF_DOC",A="FL:::/Kernel/KernelA.HH,473"$ $LK,"OutU8",A="FL:::/Kernel/KernelB.HH,80"$ -$LK,"PRTF_QUESTION",A="FL:::/Kernel/KernelA.HH,3920"$ -$LK,"DCF_ALIAS",A="FL:::/Kernel/KernelA.HH,3639"$ -$LK,"CoreAPSethTask",A="FL:::/Kernel/MultiProc.HC.Z,194",BI=508$ -$LK,"Ff_HASERRCODE",A="FL:::/Kernel/KernelA.HH,849"$ -$LK,"REGG_LOCAL_NON_PTR_VARS",A="FL:::/Kernel/KernelA.HH,1793"$ -$LK,"DOCF_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1260"$ -$LK,"RawPutChar",A="FL:::/Kernel/Display.HC.Z,1",BI=509$ -$LK,"FifoU8Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,227",BI=510$ -$LK,"DOCf_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1296"$ -$LK,"CArcEntry",A="FL:::/Kernel/KernelA.HH,3747"$ -$LK,"BDT_ISO_FILE_WRITE",A="FL:::/Kernel/KernelA.HH,2635"$ -$LK,"AOT_BIN_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1796"$ -$LK,"DOCf_FORM",A="FL:::/Kernel/KernelA.HH,1304"$ -$LK,"DOCF_FORM",A="FL:::/Kernel/KernelA.HH,1268"$ -$LK,"CHashTable",A="FL:::/Kernel/KernelA.HH,643"$ -$LK,"QueVectU8New",A="FL:::/Kernel/KDataTypes.HC.Z,87",BI=511$ -$LK,"MEM_INTERRUPT_STK",A="FL:::/Kernel/KernelA.HH,2888"$ -$LK,"BDT_RAM",A="FL:::/Kernel/KernelA.HH,2632"$ -$LK,"CMF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1694"$ -$LK,"ICF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1608"$ -$LK,"DOCf_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1299"$ -$LK,"MLMF_IS_STR",A="FL:::/Kernel/KernelA.HH,789"$ -$LK,"SYS_TIMER0_PERIOD",A="FL:::/Kernel/KernelA.HH,554"$ +$LK,"PRTF_QUESTION",A="FL:::/Kernel/KernelA.HH,3875"$ +$LK,"DCF_ALIAS",A="FL:::/Kernel/KernelA.HH,3592"$ +$LK,"CoreAPSethTask",A="FL:::/Kernel/MultiProc.HC.Z,194",BI=509$ +$LK,"Ff_HASERRCODE",A="FL:::/Kernel/KernelA.HH,837"$ +$LK,"REGG_LOCAL_NON_PTR_VARS",A="FL:::/Kernel/KernelA.HH,1780"$ +$LK,"DOCF_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1248"$ +$LK,"RawPutChar",A="FL:::/Kernel/Display.HC.Z,1",BI=510$ +$LK,"FifoU8Cnt",A="FL:::/Kernel/KDataTypes.HC.Z,227",BI=511$ +$LK,"JOBf_FOCUS_MASTER",A="FL:::/Kernel/KernelA.HH,3143"$ +$LK,"DOCf_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HH,1284"$ +$LK,"CArcEntry",A="FL:::/Kernel/KernelA.HH,3700"$ +$LK,"BDT_ISO_FILE_WRITE",A="FL:::/Kernel/KernelA.HH,2622"$ +$LK,"AOT_BIN_BLK_SIZE",A="FL:::/Kernel/KernelA.HH,1783"$ +$LK,"DOCf_FORM",A="FL:::/Kernel/KernelA.HH,1292"$ +$LK,"DOCF_FORM",A="FL:::/Kernel/KernelA.HH,1256"$ +$LK,"CHashTable",A="FL:::/Kernel/KernelA.HH,632"$ +$LK,"QueVectU8New",A="FL:::/Kernel/KDataTypes.HC.Z,87",BI=512$ +$LK,"MEM_INTERRUPT_STK",A="FL:::/Kernel/KernelA.HH,2856"$ +$LK,"BDT_RAM",A="FL:::/Kernel/KernelA.HH,2619"$ +$LK,"CMF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1681"$ +$LK,"ICF_POP_CMP",A="FL:::/Kernel/KernelA.HH,1596"$ +$LK,"DOCf_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HH,1287"$ +$LK,"MLMF_IS_STR",A="FL:::/Kernel/KernelA.HH,777"$ +$LK,"SYS_TIMER0_PERIOD",A="FL:::/Kernel/KernelA.HH,557"$ $LK,"SET_FS_BASE",A="FL:::/Kernel/KUtils.HC.Z,445"$ -$LK,"CISO1PriDesc",A="FL:::/Kernel/KernelA.HH,2484"$ -$LK,"PutHex",A="FL:::/Kernel/StrA.HC.Z,12",BI=512$ -$LK,"PopUp",A="FL:::/Kernel/SrvCmd.HC.Z,378",BI=513$ -$LK,"SCF_IP_R_DOWN",A="FL:::/Kernel/KernelA.HH,3547"$ -$LK,"SCf_IP_R_DOWN",A="FL:::/Kernel/KernelA.HH,3532"$ -$LK,"MSG_IP_R_DOWN",A="FL:::/Kernel/KernelA.HH,3236"$ -$LK,"SVCT_EXE_STR",A="FL:::/Kernel/KernelA.HH,3193"$ -$LK,"DOCF_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1290"$ -$LK,"IOAPICARB",A="FL:::/Kernel/KernelA.HH,515"$ -$LK,"DOCf_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1327"$ +$LK,"CISO1PriDesc",A="FL:::/Kernel/KernelA.HH,2471"$ +$LK,"PutHex",A="FL:::/Kernel/StrA.HC.Z,12",BI=513$ +$LK,"PopUp",A="FL:::/Kernel/Job.HC.Z,376",BI=514$ +$LK,"DOCF_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1278"$ +$LK,"IOAPICARB",A="FL:::/Kernel/KernelA.HH,518"$ +$LK,"DOCf_OVERSTRIKE",A="FL:::/Kernel/KernelA.HH,1315"$ $LK,"COREAP_16BIT_INIT_END",A="FL:::/Kernel/MultiProc.HC.Z,27"$ -$LK,"SCF_SHIFT",A="FL:::/Kernel/KernelA.HH,3539"$ -$LK,"SCf_SHIFT",A="FL:::/Kernel/KernelA.HH,3524"$ -$LK,"WIF_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1407"$ -$LK,"StrLastOcc",A="FL:::/Kernel/StrA.HC.Z,599",BI=514$ -$LK,"WIf_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1436"$ -$LK,"FClose",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,73",BI=515$ -$LK,"MDf_STK",A="FL:::/Kernel/KernelA.HH,1570"$ -$LK,"PRTF_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3921"$ -$LK,"IEF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1956"$ -$LK,"CMT_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1687"$ +$LK,"SCF_SHIFT",A="FL:::/Kernel/KernelA.HH,3492"$ +$LK,"SCf_SHIFT",A="FL:::/Kernel/KernelA.HH,3477"$ +$LK,"WIF_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1395"$ +$LK,"StrLastOcc",A="FL:::/Kernel/StrA.HC.Z,594",BI=515$ +$LK,"WIf_SELF_FOCUS",A="FL:::/Kernel/KernelA.HH,1424"$ +$LK,"FClose",A="FL:::/Kernel/BlkDev/DskCFile.HC.Z,73",BI=516$ +$LK,"MDf_STK",A="FL:::/Kernel/KernelA.HH,1558"$ +$LK,"PRTF_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HH,3876"$ +$LK,"IEF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1943"$ +$LK,"CMT_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,1674"$ $LK,"mon_start_days1",A="FL:::/Kernel/KDate.HC.Z,3"$ -$LK,"HTF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,707"$ +$LK,"JOBT_MSG",A="FL:::/Kernel/KernelA.HH,3154"$ +$LK,"HTF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,695"$ $LK,"mon_start_days2",A="FL:::/Kernel/KDate.HC.Z,5"$ -$LK,"FONT_HEIGHT",A="FL:::/Kernel/KernelA.HH,3611"$ -$LK,"SVCf_FOCUS_MASTER",A="FL:::/Kernel/KernelA.HH,3181"$ -$LK,"HTf_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,677"$ -$LK,"DFT_CACHE_LINE_WIDTH",A="FL:::/Kernel/KernelA.HH,584"$ -$LK,"ATAR0_LCYL",A="FL:::/Kernel/KernelA.HH,2280"$ -$LK,"MemPagePresentMark",A="FL:::/Kernel/Mem/PageTables.HC.Z,143",BI=516$ -$LK,"ICf_DONT_PUSH_FLOAT0",A="FL:::/Kernel/KernelA.HH,1610"$ +$LK,"FONT_HEIGHT",A="FL:::/Kernel/KernelA.HH,3564"$ +$LK,"HTf_GOTO_LABEL",A="FL:::/Kernel/KernelA.HH,665"$ +$LK,"DFT_CACHE_LINE_WIDTH",A="FL:::/Kernel/KernelA.HH,587"$ +$LK,"ATAR0_LCYL",A="FL:::/Kernel/KernelA.HH,2267"$ +$LK,"ICf_DONT_PUSH_FLOAT0",A="FL:::/Kernel/KernelA.HH,1598"$ +$LK,"JOB_EXIT",A="FL:::/Kernel/Job.HC.Z,267"$ $LK,"Sleep",A="FL:::/Kernel/KMisc.HC.Z,155",BI=517$ $LK,"RedSeaMkDir",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,604",BI=518$ $LK,"PutKey",A="FL:::/Kernel/KeyDev.HC.Z,1",BI=519$ $LK,"_HASH_STR",A="FL:::/Kernel/KHashA.HC.Z,120"$ -$LK,"FUf_ALL",A="FL:::/Kernel/KernelA.HH,2572"$ +$LK,"CMsHardStateGlbls",A="FL:::/Kernel/KernelA.HH,2993"$ +$LK,"FUf_ALL",A="FL:::/Kernel/KernelA.HH,2559"$ $LK,"sys_macro_task",A="FL:::/Kernel/KGlbls.HC.Z,5"$ -$LK,"CArcCompress",A="FL:::/Kernel/KernelA.HH,3773"$ -$LK,"CHashOpcode",A="FL:::/Kernel/KernelA.HH,1948"$ +$LK,"CArcCompress",A="FL:::/Kernel/KernelA.HH,3726"$ +$LK,"CHashOpcode",A="FL:::/Kernel/KernelA.HH,1935"$ +$LK,"CTRL_ALT_DEL",A="FL:::/Kernel/KernelA.HH,618"$ $LK,"FifoU8Ins",A="FL:::/Kernel/KDataTypes.HC.Z,173",BI=520$ -$LK,"CGridGlbls",A="FL:::/Kernel/KernelA.HH,3072"$ -$LK,"FATFromName",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,168",BI=521$ -$LK,"AAT_ADD_U32",A="FL:::/Kernel/KernelA.HH,1971"$ -$LK,"AAT_ADD_U16",A="FL:::/Kernel/KernelA.HH,1969"$ -$LK,"SC_PAUSE",A="FL:::/Kernel/KernelA.HH,3588"$ -$LK,"TRANSPARENT",A="FL:::/Kernel/KernelA.HH,2959"$ -$LK,"XTalkStrWait",A="FL:::/Kernel/SrvCmd.HC.Z,498",BI=522$ -$LK,"CArcCtrl",A="FL:::/Kernel/KernelA.HH,3755"$ -$LK,"SC_CTRL",A="FL:::/Kernel/KernelA.HH,3561"$ -$LK,"RS_ATTR_LONG_NAME_MASK",A="FL:::/Kernel/KernelA.HH,2534"$ -$LK,"ATAR1_CTRL",A="FL:::/Kernel/KernelA.HH,2285"$ -$LK,"ICF_A1_TO_F64",A="FL:::/Kernel/KernelA.HH,1591"$ -$LK,"RECALCF_ADD_CURSOR",A="FL:::/Kernel/KernelA.HH,1353"$ -$LK,"DOC_COLOR_BIN",A="FL:::/Kernel/KernelA.HH,1142"$ -$LK,"Ff_NOARGPOP",A="FL:::/Kernel/KernelA.HH,851"$ -$LK,"EdLiteFileLine",A="FL:::/Kernel/EdLite.HC.Z,316",BI=523$ -$LK,"FifoU8New",A="FL:::/Kernel/KDataTypes.HC.Z,155",BI=524$ -$LK,"SC_HOME",A="FL:::/Kernel/KernelA.HH,3572"$ -$LK,"SYS_SEMA_DBG_MODE",A="FL:::/Kernel/KernelA.HH,598"$ -$LK,"ATAPIWritePktWord",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,106",BI=525$ -$LK,"FilesFindMatch",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,40",BI=526$ -$LK,"BlkDevsRelease",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,109",BI=527$ -$LK,"DOC_COLOR_LINK",A="FL:::/Kernel/KernelA.HH,1137"$ -$LK,"AAT_ADD_U64",A="FL:::/Kernel/KernelA.HH,1973"$ -$LK,"HTT_CLASS",A="FL:::/Kernel/KernelA.HH,687"$ -$LK,"HTt_CLASS",A="FL:::/Kernel/KernelA.HH,657"$ -$LK,"Cd2DirEntry",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,221",BI=528$ -$LK,"IET_IMM_U0",A="FL:::/Kernel/KernelA.HH,396"$ -$LK,"FifoU8Rem",A="FL:::/Kernel/KDataTypes.HC.Z,190",BI=529$ -$LK,"StrLastRem",A="FL:::/Kernel/StrA.HC.Z,609",BI=530$ -$LK,"RedSeaDrvInit",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,58",BI=531$ +$LK,"IntFaultHndlrsNew",A="FL:::/Kernel/KInts.HC.Z,166",BI=521$ +$LK,"CGridGlbls",A="FL:::/Kernel/KernelA.HH,3034"$ +$LK,"FATFromName",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,156",BI=522$ +$LK,"char_bmp_zero_tab_cr_nl_cursor_dollar",A="FL:::/Kernel/StrA.HC.Z,368"$ +$LK,"AAT_ADD_U32",A="FL:::/Kernel/KernelA.HH,1958"$ +$LK,"AAT_ADD_U16",A="FL:::/Kernel/KernelA.HH,1956"$ +$LK,"SC_PAUSE",A="FL:::/Kernel/KernelA.HH,3541"$ +$LK,"TRANSPARENT",A="FL:::/Kernel/KernelA.HH,2927"$ +$LK,"XTalkStrWait",A="FL:::/Kernel/Job.HC.Z,496",BI=523$ +$LK,"mem_physical_space",A="FL:::/Kernel/KernelB.HH,196"$ +$LK,"CArcCtrl",A="FL:::/Kernel/KernelA.HH,3708"$ +$LK,"SC_CTRL",A="FL:::/Kernel/KernelA.HH,3514"$ +$LK,"RS_ATTR_LONG_NAME_MASK",A="FL:::/Kernel/KernelA.HH,2521"$ +$LK,"ATAR1_CTRL",A="FL:::/Kernel/KernelA.HH,2272"$ +$LK,"RECALCF_ADD_CURSOR",A="FL:::/Kernel/KernelA.HH,1341"$ +$LK,"DOC_COLOR_BIN",A="FL:::/Kernel/KernelA.HH,1130"$ +$LK,"Ff_NOARGPOP",A="FL:::/Kernel/KernelA.HH,839"$ +$LK,"EdLiteFileLine",A="FL:::/Kernel/EdLite.HC.Z,316",BI=524$ +$LK,"FifoU8New",A="FL:::/Kernel/KDataTypes.HC.Z,155",BI=525$ +$LK,"SC_HOME",A="FL:::/Kernel/KernelA.HH,3525"$ +$LK,"ATAPIWritePktWord",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,106",BI=526$ +$LK,"FilesFindMatch",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,40",BI=527$ +$LK,"BlkDevsRelease",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,114",BI=528$ +$LK,"DOC_COLOR_LINK",A="FL:::/Kernel/KernelA.HH,1125"$ +$LK,"AAT_ADD_U64",A="FL:::/Kernel/KernelA.HH,1960"$ +$LK,"HTT_CLASS",A="FL:::/Kernel/KernelA.HH,675"$ +$LK,"HTt_CLASS",A="FL:::/Kernel/KernelA.HH,645"$ +$LK,"Cd2DirEntry",A="FL:::/Kernel/BlkDev/DskStrA.HC.Z,221",BI=529$ +$LK,"IET_IMM_U0",A="FL:::/Kernel/KernelA.HH,395"$ +$LK,"FifoU8Rem",A="FL:::/Kernel/KDataTypes.HC.Z,190",BI=530$ +$LK,"StrLastRem",A="FL:::/Kernel/StrA.HC.Z,604",BI=531$ $LK,"BlkDevAdd",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,27",BI=532$ -$LK,"REGG_CLOBBERED",A="FL:::/Kernel/KernelA.HH,1789"$ -$LK,"ROPF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2951"$ -$LK,"DirLongNameFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,199",BI=533$ -$LK,"QueVectU8Put",A="FL:::/Kernel/KDataTypes.HC.Z,96",BI=534$ -$LK,"StrFind",A="FL:::/Kernel/StrA.HC.Z,624",BI=535$ -$LK,"CMemRange",A="FL:::/Kernel/KernelA.HH,2870"$ -$LK,"WIf_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1447"$ +$LK,"REGG_CLOBBERED",A="FL:::/Kernel/KernelA.HH,1776"$ +$LK,"ROPF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HH,2919"$ +$LK,"DirLongNameFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,187",BI=533$ +$LK,"Ona2Freq",A="FL:::/Kernel/KMisc.HC.Z,163",BI=534$ +$LK,"QueVectU8Put",A="FL:::/Kernel/KDataTypes.HC.Z,96",BI=535$ +$LK,"StrFind",A="FL:::/Kernel/StrA.HC.Z,619",BI=536$ +$LK,"CMemRange",A="FL:::/Kernel/KernelA.HH,2838"$ +$LK,"WIf_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HH,1435"$ $LK,"C32_RSP",A="FL:::/Kernel/PCIBIOS.HC.Z,66"$ -$LK,"OutStr",A="FL:::/Kernel/StrPrint.HC.Z,20",BI=536$ -$LK,"DOCEf_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,1095"$ -$LK,"DOCEF_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,996"$ -$LK,"TimersInit",A="FL:::/Kernel/KEnd.HC.Z,86",BI=537$ -$LK,"ATAR0_SECT",A="FL:::/Kernel/KernelA.HH,2279"$ -$LK,"__CMD_LINE__",A="FL:::/Kernel/KernelA.HH,2027"$ -$LK,"WIF_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1409"$ -$LK,"DOCEf_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,1084"$ -$LK,"IET_IMM_U8",A="FL:::/Kernel/KernelA.HH,398"$ -$LK,"SC_ALT",A="FL:::/Kernel/KernelA.HH,3562"$ -$LK,"ARGT_MOFFS8",A="FL:::/Kernel/KernelA.HH,1912"$ -$LK,"WIf_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1437"$ -$LK,"EXT_NUM_ENTRIES",A="FL:::/Kernel/KernelA.HH,581"$ -$LK,"DefineMatch",A="FL:::/Kernel/KDefine.HC.Z,85",BI=538$ -$LK,"CLexHashTableContext",A="FL:::/Kernel/KernelA.HH,2112"$ -$LK,"RLF_RAW",A="FL:::/Kernel/KernelA.HH,465"$ -$LK,"WZeroBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,2",BI=539$ -$LK,"ATAPISetMaxSpeed",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,118",BI=540$ -$LK,"StkRep",A="FL:::/Kernel/KDbg.HC.Z,104",BI=541$ +$LK,"OutStr",A="FL:::/Kernel/StrPrint.HC.Z,20",BI=537$ +$LK,"DOCEf_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HH,1083"$ +$LK,"DOCEF_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,984"$ +$LK,"TimersInit",A="FL:::/Kernel/KEnd.HC.Z,87",BI=538$ +$LK,"ATAR0_SECT",A="FL:::/Kernel/KernelA.HH,2266"$ +$LK,"__CMD_LINE__",A="FL:::/Kernel/KernelA.HH,2014"$ +$LK,"WIF_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1397"$ +$LK,"DOCEf_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HH,1072"$ +$LK,"IET_IMM_U8",A="FL:::/Kernel/KernelA.HH,397"$ +$LK,"SC_ALT",A="FL:::/Kernel/KernelA.HH,3515"$ +$LK,"ARGT_MOFFS8",A="FL:::/Kernel/KernelA.HH,1899"$ +$LK,"WIf_SELF_CTRLS",A="FL:::/Kernel/KernelA.HH,1425"$ +$LK,"EXT_NUM_ENTRIES",A="FL:::/Kernel/KernelA.HH,584"$ +$LK,"DefineMatch",A="FL:::/Kernel/KDefine.HC.Z,85",BI=539$ +$LK,"CLexHashTableContext",A="FL:::/Kernel/KernelA.HH,2099"$ +$LK,"RLF_RAW",A="FL:::/Kernel/KernelA.HH,468"$ +$LK,"WZeroBlks",A="FL:::/Kernel/BlkDev/DskBlk.HC.Z,2",BI=540$ +$LK,"ATAPISetMaxSpeed",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,118",BI=541$ +$LK,"StkRep",A="FL:::/Kernel/KDbg.HC.Z,104",BI=542$ $LK,"SwapU8",A="FL:::/Kernel/KernelB.HH,117"$ -$LK,"FUN_SEG_CACHE_STR_LEN",A="FL:::/Kernel/KernelA.HH,3854"$ -$LK,"DCF_TRANSFORMATION",A="FL:::/Kernel/KernelA.HH,3628"$ -$LK,"FF_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2786"$ -$LK,"TTS_CONST",A="FL:::/Kernel/KernelA.HH,3274"$ -$LK,"ISO1T_VOL_DRV_DESC",A="FL:::/Kernel/KernelA.HH,2481"$ +$LK,"FUN_SEG_CACHE_STR_LEN",A="FL:::/Kernel/KernelA.HH,3808"$ +$LK,"DCF_TRANSFORMATION",A="FL:::/Kernel/KernelA.HH,3581"$ +$LK,"FF_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2774"$ +$LK,"SEMA_MUTE",A="FL:::/Kernel/KernelA.HH,611"$ +$LK,"TTS_CONST",A="FL:::/Kernel/KernelA.HH,3234"$ +$LK,"ISO1T_VOL_DRV_DESC",A="FL:::/Kernel/KernelA.HH,2468"$ $LK,"SaveExceptRegs",A="FL:::/Kernel/KExcept.HC.Z,43"$ -$LK,"SC_END",A="FL:::/Kernel/KernelA.HH,3573"$ -$LK,"CAOTHeapGlbl",A="FL:::/Kernel/KernelA.HH,1988"$ -$LK,"ArcExpandBuf",A="FL:::/Kernel/Compress.HC.Z,165",BI=542$ -$LK,"FUf_MAP",A="FL:::/Kernel/KernelA.HH,2577"$ -$LK,"DOCf_MORE",A="FL:::/Kernel/KernelA.HH,1312"$ -$LK,"DOCF_MORE",A="FL:::/Kernel/KernelA.HH,1276"$ -$LK,"chars_bmp_non_eol_white_space",A="FL:::/Kernel/StrA.HC.Z,359"$ -$LK,"CISO1PathEntry",A="FL:::/Kernel/KernelA.HH,2469"$ -$LK,"REGG_SAVED",A="FL:::/Kernel/KernelA.HH,1790"$ -$LK,"SF_ARG1",A="FL:::/Kernel/KernelA.HH,560"$ -$LK,"RLF_VGA",A="FL:::/Kernel/KernelA.HH,459"$ -$LK,"COLOR_MONO",A="FL:::/Kernel/KernelA.HH,2979"$ -$LK,"ACD_END_CHAR",A="FL:::/Kernel/KernelA.HH,1512"$ -$LK,"WIF_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HH,1427"$ -$LK,"DOCET_INVERT",A="FL:::/Kernel/KernelA.HH,949"$ -$LK,"SF_ARG2",A="FL:::/Kernel/KernelA.HH,561"$ -$LK,"SC_SCROLL",A="FL:::/Kernel/KernelA.HH,3565"$ -$LK,"DISPLAYf_NOT_RAW",A="FL:::/Kernel/KernelA.HH,3300"$ -$LK,"DOCEt_INVERT",A="FL:::/Kernel/KernelA.HH,955"$ -$LK,"ATTRf_INVERT",A="FL:::/Kernel/KernelA.HH,896"$ -$LK,"ATTRF_INVERT",A="FL:::/Kernel/KernelA.HH,891"$ -$LK,"SF_ARG3",A="FL:::/Kernel/KernelA.HH,562"$ -$LK,"IsDbgMode",A="FL:::/Kernel/KMisc.HC.Z,282",BI=543$ -$LK,"ACD_PRONUNCIATION_END",A="FL:::/Kernel/KernelA.HH,1505"$ -$LK,"SF_ARG4",A="FL:::/Kernel/KernelA.HH,563"$ -$LK,"SF_ARG5",A="FL:::/Kernel/KernelA.HH,564"$ +$LK,"SC_END",A="FL:::/Kernel/KernelA.HH,3526"$ +$LK,"CAOTHeapGlbl",A="FL:::/Kernel/KernelA.HH,1975"$ +$LK,"ArcExpandBuf",A="FL:::/Kernel/Compress.HC.Z,165",BI=543$ +$LK,"FUf_MAP",A="FL:::/Kernel/KernelA.HH,2564"$ +$LK,"DOCf_MORE",A="FL:::/Kernel/KernelA.HH,1300"$ +$LK,"DOCF_MORE",A="FL:::/Kernel/KernelA.HH,1264"$ +$LK,"CISO1PathEntry",A="FL:::/Kernel/KernelA.HH,2456"$ +$LK,"REGG_SAVED",A="FL:::/Kernel/KernelA.HH,1777"$ +$LK,"SF_ARG1",A="FL:::/Kernel/KernelA.HH,563"$ +$LK,"RLF_VGA",A="FL:::/Kernel/KernelA.HH,461"$ +$LK,"COLOR_MONO",A="FL:::/Kernel/KernelA.HH,2947"$ +$LK,"ACD_END_CHAR",A="FL:::/Kernel/KernelA.HH,1500"$ +$LK,"DOCET_INVERT",A="FL:::/Kernel/KernelA.HH,937"$ +$LK,"SF_ARG2",A="FL:::/Kernel/KernelA.HH,564"$ +$LK,"SC_SCROLL",A="FL:::/Kernel/KernelA.HH,3518"$ +$LK,"DISPLAYf_NOT_RAW",A="FL:::/Kernel/KernelA.HH,3260"$ +$LK,"DOCEt_INVERT",A="FL:::/Kernel/KernelA.HH,943"$ +$LK,"ATTRf_INVERT",A="FL:::/Kernel/KernelA.HH,884"$ +$LK,"ATTRF_INVERT",A="FL:::/Kernel/KernelA.HH,879"$ +$LK,"SF_ARG3",A="FL:::/Kernel/KernelA.HH,565"$ +$LK,"IsDbgMode",A="FL:::/Kernel/KMisc.HC.Z,298",BI=544$ +$LK,"ACD_PRONUNCIATION_END",A="FL:::/Kernel/KernelA.HH,1493"$ +$LK,"SF_ARG4",A="FL:::/Kernel/KernelA.HH,566"$ +$LK,"SF_ARG5",A="FL:::/Kernel/KernelA.HH,567"$ $LK,"ODEF_STARTED",A="FL:::/Kernel/KernelA.HH,243"$ -$LK,"TaskFocusNext",A="FL:::/Kernel/Sched.HC.Z,38",BI=544$ -$LK,"Print",A="FL:::/Kernel/StrPrint.HC.Z,890",BI=545$ -$LK,"SFF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,3801"$ -$LK,"FUF_RISKY",A="FL:::/Kernel/KernelA.HH,2602"$ -$LK,"FUf_RISKY",A="FL:::/Kernel/KernelA.HH,2575"$ -$LK,"CAOTAbsAddr",A="FL:::/Kernel/KernelA.HH,1975"$ -$LK,"SF_ARG6",A="FL:::/Kernel/KernelA.HH,565"$ -$LK,"SC_ESC",A="FL:::/Kernel/KernelA.HH,3556"$ -$LK,"ACD_WORD_CHAR",A="FL:::/Kernel/KernelA.HH,1513"$ -$LK,"SF_ARG7",A="FL:::/Kernel/KernelA.HH,566"$ -$LK,"FAT32DrvValidate",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,48",BI=546$ +$LK,"TaskFocusNext",A="FL:::/Kernel/Sched.HC.Z,38",BI=545$ +$LK,"Print",A="FL:::/Kernel/StrPrint.HC.Z,890",BI=546$ +$LK,"SFF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HH,3754"$ +$LK,"FUF_RISKY",A="FL:::/Kernel/KernelA.HH,2589"$ +$LK,"FUf_RISKY",A="FL:::/Kernel/KernelA.HH,2562"$ +$LK,"CAOTAbsAddr",A="FL:::/Kernel/KernelA.HH,1962"$ +$LK,"ICF_ARG1_TO_F64",A="FL:::/Kernel/KernelA.HH,1579"$ +$LK,"SF_ARG6",A="FL:::/Kernel/KernelA.HH,568"$ +$LK,"SC_ESC",A="FL:::/Kernel/KernelA.HH,3509"$ +$LK,"ACD_WORD_CHAR",A="FL:::/Kernel/KernelA.HH,1501"$ +$LK,"SF_ARG7",A="FL:::/Kernel/KernelA.HH,569"$ $LK,"StrCmp",A="FL:::/Kernel/StrA.HC.Z,309"$ -$LK,"DOF_INTERCEPT_TASK_END",A="FL:::/Kernel/KernelA.HH,1217"$ -$LK,"SF_ARG8",A="FL:::/Kernel/KernelA.HH,567"$ -$LK,"BlkDevDel",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,154",BI=547$ -$LK,"ST_ERR_ST",A="FL:::/Kernel/KernelA.HH,3518"$ -$LK,"BlkDevChk",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,163",BI=548$ -$LK,"MSG_IP_L_UP",A="FL:::/Kernel/KernelA.HH,3233"$ -$LK,"FSt_REDSEA",A="FL:::/Kernel/KernelA.HH,2689"$ -$LK,"CPCIDev",A="FL:::/Kernel/KernelA.HH,2240"$ -$LK,"DOCEf_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1111"$ -$LK,"DOCEF_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1025"$ +$LK,"DOF_INTERCEPT_TASK_END",A="FL:::/Kernel/KernelA.HH,1205"$ +$LK,"SF_ARG8",A="FL:::/Kernel/KernelA.HH,570"$ +$LK,"BlkDevDel",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,159",BI=547$ +$LK,"ST_ERR_ST",A="FL:::/Kernel/KernelA.HH,3471"$ +$LK,"BlkDevChk",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,168",BI=548$ +$LK,"FSt_REDSEA",A="FL:::/Kernel/KernelA.HH,2676"$ +$LK,"CPCIDev",A="FL:::/Kernel/KernelA.HH,2227"$ +$LK,"DOCEf_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1099"$ +$LK,"DOCEF_DFT_LEN",A="FL:::/Kernel/KernelA.HH,1013"$ $LK,"RepOutU8",A="FL:::/Kernel/KernelB.HH,92"$ $LK,"DrvBlkDevDel",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,78",BI=549$ -$LK,"VGAP_PALETTE_MASK",A="FL:::/Kernel/KernelA.HH,3730"$ -$LK,"NUM_SYS_SEMAS",A="FL:::/Kernel/KernelA.HH,616"$ -$LK,"ATAPISync",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,501",BI=550$ +$LK,"VGAP_PALETTE_MASK",A="FL:::/Kernel/KernelA.HH,3683"$ +$LK,"ATAPISync",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,504",BI=550$ $LK,"TO_UPPER",A="FL:::/Kernel/StrA.HC.Z,110"$ $LK,"RFLAGG_NORMAL",A="FL:::/Kernel/KernelA.HH,328"$ -$LK,"KERNEL_MODULE_NAME",A="FL:::/Kernel/KernelA.HH,717"$ -$LK,"SYS_SEMA_DSK_CACHE",A="FL:::/Kernel/KernelA.HH,605"$ -$LK,"MEM_PAGE_SIZE",A="FL:::/Kernel/KernelA.HH,2879"$ +$LK,"KERNEL_MODULE_NAME",A="FL:::/Kernel/KernelA.HH,705"$ +$LK,"MEM_PAGE_SIZE",A="FL:::/Kernel/KStart32.HC.Z,8"$ $LK,"SleepUntil",A="FL:::/Kernel/KMisc.HC.Z,147",BI=551$ -$LK,"Spawn",A="FL:::/Kernel/KTask.HC.Z,227",BI=552$ -$LK,"CTaskDying",A="FL:::/Kernel/KernelA.HH,3316"$ -$LK,"MSG_IP_R_D_UP",A="FL:::/Kernel/KernelA.HH,3239"$ -$LK,"CRedSeaBoot",A="FL:::/Kernel/KernelA.HH,2323"$ -$LK,"WIF_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1419"$ +$LK,"Spawn",A="FL:::/Kernel/KTask.HC.Z,242",BI=552$ +$LK,"CTaskDying",A="FL:::/Kernel/KernelA.HH,3277"$ +$LK,"CRedSeaBoot",A="FL:::/Kernel/KernelA.HH,2310"$ +$LK,"WIF_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1407"$ $LK,"SET_GS_BASE",A="FL:::/Kernel/KUtils.HC.Z,433"$ +$LK,"CTRL_ALT_TAB",A="FL:::/Kernel/KernelA.HH,621"$ $LK,"RFLAGf_VINT_PENDING",A="FL:::/Kernel/KernelA.HH,324"$ $LK,"DirEntryDel2",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,26",BI=553$ $LK,"DefineLoad",A="FL:::/Kernel/KDefine.HC.Z,1",BI=554$ $LK,"INT_FAULT_ERR_CODE_BITMAP",A="FL:::/Kernel/KInts.HC.Z,94"$ -$LK,"ICF_NO_RIP",A="FL:::/Kernel/KernelA.HH,1615"$ -$LK,"SUF_REM_CTRL_CHARS",A="FL:::/Kernel/KernelA.HH,3787"$ -$LK,"SC_SHIFT",A="FL:::/Kernel/KernelA.HH,3560"$ -$LK,"ATA_SET_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2263"$ -$LK,"StrOcc",A="FL:::/Kernel/StrA.HC.Z,467",BI=555$ +$LK,"ICF_NO_RIP",A="FL:::/Kernel/KernelA.HH,1603"$ +$LK,"SUF_REM_CTRL_CHARS",A="FL:::/Kernel/KernelA.HH,3740"$ +$LK,"SC_SHIFT",A="FL:::/Kernel/KernelA.HH,3513"$ +$LK,"ATA_SET_MAX_EXT",A="FL:::/Kernel/KernelA.HH,2250"$ +$LK,"StrOcc",A="FL:::/Kernel/StrA.HC.Z,462",BI=555$ $LK,"StrCpy",A="FL:::/Kernel/StrA.HC.Z,321"$ -$LK,"DOCT_INS_BIN",A="FL:::/Kernel/KernelA.HH,939"$ +$LK,"DOCT_INS_BIN",A="FL:::/Kernel/KernelA.HH,927"$ $LK,"StrMatch",A="FL:::/Kernel/StrA.HC.Z,317"$ $LK,"FlushMsgs",A="FL:::/Kernel/SerialDev/Message.HC.Z,87",BI=556$ -$LK,"CMT_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1689"$ -$LK,"RLF_MP",A="FL:::/Kernel/KernelA.HH,468"$ -$LK,"SC_GUI",A="FL:::/Kernel/KernelA.HH,3589"$ -$LK,"RLF_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,466"$ +$LK,"CMT_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1676"$ +$LK,"RLF_MP",A="FL:::/Kernel/KernelA.HH,471"$ +$LK,"SC_GUI",A="FL:::/Kernel/KernelA.HH,3542"$ +$LK,"RLF_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,469"$ $LK,"StrLen",A="FL:::/Kernel/KernelB.HH,61"$ -$LK,"ATA_READ_NATIVE_MAX",A="FL:::/Kernel/KernelA.HH,2260"$ -$LK,"PUSH_C_REGS",A="FL:::/Kernel/KernelA.HH,1764"$ -$LK,"IEF_REX_XOR_LIKE",A="FL:::/Kernel/KernelA.HH,1733"$ -$LK,"WIf_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1445"$ -$LK,"RLf_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,447"$ +$LK,"ATA_READ_NATIVE_MAX",A="FL:::/Kernel/KernelA.HH,2247"$ +$LK,"PUSH_C_REGS",A="FL:::/Kernel/KernelA.HH,1751"$ +$LK,"IEF_REX_XOR_LIKE",A="FL:::/Kernel/KernelA.HH,1720"$ +$LK,"WIf_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HH,1433"$ +$LK,"SEMA_HEAPLOG_LOCK",A="FL:::/Kernel/KernelA.HH,601"$ +$LK,"RLf_INTERRUPTS",A="FL:::/Kernel/KernelA.HH,449"$ $LK,"ISO1DateStruct2CDate",A="FL:::/Kernel/BlkDev/FileSysISO.HC.Z,14",BI=557$ -$LK,"DOCF_SEL",A="FL:::/Kernel/KernelA.HH,1287"$ -$LK,"RLF_REGISTRY",A="FL:::/Kernel/KernelA.HH,472"$ -$LK,"RLf_REGISTRY",A="FL:::/Kernel/KernelA.HH,453"$ -$LK,"SC_INS",A="FL:::/Kernel/KernelA.HH,3574"$ -$LK,"TK_DOT_DOT",A="FL:::/Kernel/KernelA.HH,2106"$ -$LK,"RT_NUM_IT",A="FL:::/Kernel/KernelA.HH,1566"$ +$LK,"DOCF_SEL",A="FL:::/Kernel/KernelA.HH,1275"$ +$LK,"RLF_REGISTRY",A="FL:::/Kernel/KernelA.HH,475"$ +$LK,"RLf_REGISTRY",A="FL:::/Kernel/KernelA.HH,455"$ +$LK,"SC_INS",A="FL:::/Kernel/KernelA.HH,3527"$ +$LK,"TK_DOT_DOT",A="FL:::/Kernel/KernelA.HH,2093"$ +$LK,"RT_NUM_IT",A="FL:::/Kernel/KernelA.HH,1554"$ $LK,"AbsI64",A="FL:::/Kernel/KernelB.HH,97"$ -$LK,"SC_TAB",A="FL:::/Kernel/KernelA.HH,3558"$ -$LK,"IOAPICVER",A="FL:::/Kernel/KernelA.HH,514"$ -$LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HH,499"$ -$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HH,183"$ -$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,3595"$ -$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HH,3304"$ +$LK,"SC_TAB",A="FL:::/Kernel/KernelA.HH,3511"$ +$LK,"IOAPICVER",A="FL:::/Kernel/KernelA.HH,517"$ +$LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HH,502"$ +$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HH,182"$ +$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,3548"$ +$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HH,3264"$ $LK,"RedSeaFmt",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,94",BI=558$ $LK,"sys_var_init_flag",A="FL:::/Kernel/KernelB.HH,185"$ -$LK,"PRTF_DECIMAL",A="FL:::/Kernel/KernelA.HH,3922"$ -$LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HH,511"$ +$LK,"PRTF_DECIMAL",A="FL:::/Kernel/KernelA.HH,3877"$ +$LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HH,514"$ $LK,"SysGetStr2",A="FL:::/Kernel/KDbg.HC.Z,337",BI=559$ $LK,"fp_getstr2",A="FL:::/Kernel/KGlbls.HC.Z,32"$ $LK,"KDRawPutKey",A="FL:::/Kernel/KeyDev.HC.Z,88",BI=560$ -$LK,"DOCF_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1293"$ +$LK,"DOCF_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1281"$ $LK,"Dos2CDate",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,9",BI=561$ $LK,"SYS_START_CR0",A="FL:::/Kernel/KernelA.HH,306"$ $LK,"QSortI64",A="FL:::/Kernel/QSort.HC.Z,1",BI=562$ $LK,"RawPrint",A="FL:::/Kernel/KDbg.HC.Z,217",BI=563$ -$LK,"CTextGlbls",A="FL:::/Kernel/KernelA.HH,3600"$ -$LK,"CDevGlbls",A="FL:::/Kernel/KernelA.HH,2923"$ -$LK,"chars_bmp_zero_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,362"$ +$LK,"CTextGlbls",A="FL:::/Kernel/KernelA.HH,3553"$ +$LK,"CDevGlbls",A="FL:::/Kernel/KernelA.HH,2891"$ $LK,"AreYouSure",A="FL:::/Kernel/StrB.HC.Z,109",BI=564$ -$LK,"DOCf_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1328"$ -$LK,"DOCF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1291"$ +$LK,"DOCf_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1316"$ +$LK,"DOCF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1279"$ $LK,"_REP_IN_U16",A="FL:::/Kernel/KUtils.HC.Z,264"$ $LK,"_REP_IN_U32",A="FL:::/Kernel/KUtils.HC.Z,253"$ -$LK,"CH_FORM_FEED",A="FL:::/Kernel/KernelA.HH,3512"$ -$LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HH,507"$ +$LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HH,510"$ $LK,"I_WAKE",A="FL:::/Kernel/KernelA.HH,296"$ $LK,"Yield",A="FL:::/Kernel/Sched.HC.Z,284"$ -$LK,"CKeyDevGlbls",A="FL:::/Kernel/KernelA.HH,3819"$ -$LK,"MRT_DEV",A="FL:::/Kernel/KernelA.HH,2868"$ -$LK,"CBlkDevGlbls",A="FL:::/Kernel/KernelA.HH,2758"$ -$LK,"CMBRPrt",A="FL:::/Kernel/KernelA.HH,2302"$ +$LK,"CKeyDevGlbls",A="FL:::/Kernel/KernelA.HH,3772"$ +$LK,"MRT_DEV",A="FL:::/Kernel/KernelA.HH,2836"$ +$LK,"CBlkDevGlbls",A="FL:::/Kernel/KernelA.HH,2746"$ +$LK,"CMBRPrt",A="FL:::/Kernel/KernelA.HH,2289"$ $LK,"StrNew",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,446",BI=565$ -$LK,"HTT_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,686"$ -$LK,"HTt_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,656"$ -$LK,"WIF_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HH,1424"$ -$LK,"HTT_HELP_FILE",A="FL:::/Kernel/KernelA.HH,698"$ -$LK,"HTt_HELP_FILE",A="FL:::/Kernel/KernelA.HH,668"$ +$LK,"HTT_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,674"$ +$LK,"HTt_GLBL_VAR",A="FL:::/Kernel/KernelA.HH,644"$ +$LK,"HTT_HELP_FILE",A="FL:::/Kernel/KernelA.HH,686"$ +$LK,"HTt_HELP_FILE",A="FL:::/Kernel/KernelA.HH,656"$ $LK,"Round",A="FL:::/Kernel/KernelB.HH,139"$ -$LK,"TaskRstAwaitingMsg",A="FL:::/Kernel/SrvCmd.HC.Z,25",BI=566$ -$LK,"MSG_IP_L_D_DOWN",A="FL:::/Kernel/KernelA.HH,3234"$ -$LK,"ATAR0_STAT",A="FL:::/Kernel/KernelA.HH,2283"$ -$LK,"DOC_COLOR_PMT",A="FL:::/Kernel/KernelA.HH,1141"$ -$LK,"HPET_GEN_CONF",A="FL:::/Kernel/KernelA.HH,535"$ +$LK,"VM_OTHER",A="FL:::/Kernel/KernelA.HH,3889"$ +$LK,"TaskRstAwaitingMsg",A="FL:::/Kernel/Job.HC.Z,25",BI=566$ +$LK,"ATAR0_STAT",A="FL:::/Kernel/KernelA.HH,2270"$ +$LK,"DOC_COLOR_PMT",A="FL:::/Kernel/KernelA.HH,1129"$ +$LK,"HPET_GEN_CONF",A="FL:::/Kernel/KernelA.HH,538"$ $LK,"MPHalt",A="FL:::/Kernel/MultiProc.HC.Z,164",BI=567$ $LK,"UnusedStk",A="FL:::/Kernel/KDbg.HC.Z,46",BI=568$ +$LK,"CCF_CLASS_DOL_OFFSET",A="FL:::/Kernel/KernelA.HH,2151"$ $LK,"DirEntryCompareName",A="FL:::/Kernel/BlkDev/DskDirA.HC.Z,62",BI=569$ +$LK,"sys_staff_mode_flag",A="FL:::/Kernel/KernelB.HH,184"$ $LK,"BFieldExtU32",A="FL:::/Kernel/KernelB.HH,30"$ -$LK,"DOCf_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1330"$ -$LK,"TASKf_CMD_LINE_PMT",A="FL:::/Kernel/KernelA.HH,3285"$ -$LK,"ATAS_DF",A="FL:::/Kernel/KernelA.HH,2272"$ -$LK,"ROPBF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2942"$ +$LK,"DOCf_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HH,1318"$ +$LK,"TASKf_CMD_LINE_PMT",A="FL:::/Kernel/KernelA.HH,3245"$ +$LK,"ATAS_DF",A="FL:::/Kernel/KernelA.HH,2259"$ +$LK,"ROPBF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HH,2910"$ $LK,"StrScan",A="FL:::/Kernel/StrScan.HC.Z,212",BI=570$ -$LK,"CONSERVATIVE_16MEG_SIZE",A="FL:::/Kernel/Mem/PageTables.HC.Z,96"$ -$LK,"ACD_DEF_FILENAME_Z",A="FL:::/Kernel/KernelA.HH,1498"$ +$LK,"ACD_DEF_FILENAME_Z",A="FL:::/Kernel/KernelA.HH,1486"$ $LK,"ATARepFind",A="FL:::/Kernel/BlkDev/DskATAId.HC.Z,194",BI=571$ $LK,"QSort2a",A="FL:::/Kernel/QSort.HC.Z,32",BI=572$ $LK,"num_lock_map",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,179"$ +$LK,"ms_hard_last",A="FL:::/Kernel/KGlbls.HC.Z,28"$ $LK,"QSort2b",A="FL:::/Kernel/QSort.HC.Z,55",BI=573$ -$LK,"KDF_HAS_DESCS",A="FL:::/Kernel/KernelA.HH,3810"$ -$LK,"CBlkPool",A="FL:::/Kernel/KernelA.HH,2895"$ -$LK,"SC_NUM",A="FL:::/Kernel/KernelA.HH,3564"$ -$LK,"MSG_IP_R_UP",A="FL:::/Kernel/KernelA.HH,3237"$ -$LK,"IEF_DONT_SWITCH_MODES",A="FL:::/Kernel/KernelA.HH,1728"$ +$LK,"KDF_HAS_DESCS",A="FL:::/Kernel/KernelA.HH,3763"$ +$LK,"CBlkPool",A="FL:::/Kernel/KernelA.HH,2863"$ +$LK,"RedSeaInit",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,58",BI=574$ +$LK,"SC_NUM",A="FL:::/Kernel/KernelA.HH,3517"$ +$LK,"MEM_BOOT_BASE",A="FL:::/Kernel/KStart16.HC.Z,30"$ +$LK,"IEF_DONT_SWITCH_MODES",A="FL:::/Kernel/KernelA.HH,1715"$ $LK,"I_TIMER",A="FL:::/Kernel/KernelA.HH,293"$ $LK,"IRQ_TIMER",A="FL:::/Kernel/KInts.HC.Z,16"$ -$LK,"DOC_COLOR_TREE",A="FL:::/Kernel/KernelA.HH,1140"$ -$LK,"DOCEf_HAS_BIN",A="FL:::/Kernel/KernelA.HH,1063"$ -$LK,"DOCEF_HAS_BIN",A="FL:::/Kernel/KernelA.HH,975"$ -$LK,"SYS_BOOT_BASE",A="FL:::/Kernel/KStart16.HC.Z,30"$ -$LK,"VGAP_CRTC_INDEX",A="FL:::/Kernel/KernelA.HH,3734"$ -$LK,"ATTRF_SEL",A="FL:::/Kernel/KernelA.HH,892"$ -$LK,"DrvNextFreeLet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,51",BI=574$ -$LK,"SFF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,3802"$ -$LK,"CDIR_FILENAME_LEN",A="FL:::/Kernel/KernelA.HH,2551"$ +$LK,"DOC_COLOR_TREE",A="FL:::/Kernel/KernelA.HH,1128"$ +$LK,"DOCEf_HAS_BIN",A="FL:::/Kernel/KernelA.HH,1051"$ +$LK,"DOCEF_HAS_BIN",A="FL:::/Kernel/KernelA.HH,963"$ +$LK,"VGAP_CRTC_INDEX",A="FL:::/Kernel/KernelA.HH,3687"$ +$LK,"ATTRF_SEL",A="FL:::/Kernel/KernelA.HH,880"$ +$LK,"DrvNextFreeLet",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,51",BI=575$ +$LK,"SFF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HH,3755"$ +$LK,"CDIR_FILENAME_LEN",A="FL:::/Kernel/KernelA.HH,2538"$ $LK,"CFifoI64",A="FL:::/Kernel/KernelA.HH,176"$ -$LK,"PCIReadU32",A="FL:::/Kernel/PCIBIOS.HC.Z,201",BI=575$ -$LK,"PCIReadU16",A="FL:::/Kernel/PCIBIOS.HC.Z,182",BI=576$ -$LK,"YearStartDate",A="FL:::/Kernel/KDate.HC.Z,8",BI=577$ -$LK,"ACD_H1_END",A="FL:::/Kernel/KernelA.HH,1501"$ +$LK,"PCIReadU32",A="FL:::/Kernel/PCIBIOS.HC.Z,201",BI=576$ +$LK,"PCIReadU16",A="FL:::/Kernel/PCIBIOS.HC.Z,182",BI=577$ +$LK,"YearStartDate",A="FL:::/Kernel/KDate.HC.Z,8",BI=578$ +$LK,"ACD_H1_END",A="FL:::/Kernel/KernelA.HH,1489"$ $LK,"_REP_IN_U8",A="FL:::/Kernel/KUtils.HC.Z,275"$ $LK,"SHIFT_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,9"$ -$LK,"DOCF_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1281"$ -$LK,"REG_UNDEF",A="FL:::/Kernel/KernelA.HH,1787"$ -$LK,"VGAFlush",A="FL:::/Kernel/Display.HC.Z,88",BI=578$ -$LK,"FILEMASK_AOT",A="FL:::/Kernel/KernelA.HH,2289"$ -$LK,"SysDbg",A="FL:::/Kernel/KMisc.HC.Z,245",BI=579$ -$LK,"FramePtrAdd",A="FL:::/Kernel/KHashB.HC.Z,225",BI=580$ -$LK,"FF_NEEDS_WRITE",A="FL:::/Kernel/KernelA.HH,2785"$ -$LK,"WIF_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HH,1426"$ -$LK,"DOCF_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1264"$ -$LK,"LAPIC_APIC_ID",A="FL:::/Kernel/KernelA.HH,480"$ -$LK,"MPrintTime",A="FL:::/Kernel/StrPrint.HC.Z,42",BI=581$ -$LK,"CatPrint",A="FL:::/Kernel/StrPrint.HC.Z,881",BI=582$ -$LK,"TK_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2074"$ -$LK,"TASKf_AWAITING_MSG",A="FL:::/Kernel/KernelA.HH,3290"$ -$LK,"ICF_A1_TO_INT",A="FL:::/Kernel/KernelA.HH,1592"$ -$LK,"DOCf_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1300"$ -$LK,"EDF_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1250"$ -$LK,"DOCEG_HAS_ALLOC",A="FL:::/Kernel/KernelA.HH,1028"$ -$LK,"CHashSrcSym",A="FL:::/Kernel/KernelA.HH,725"$ -$LK,"HashPublic",A="FL:::/Kernel/KHashB.HC.Z,170",BI=583$ -$LK,"HEAP_CTRL_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2908"$ -$LK,"EDf_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1256"$ -$LK,"CDocSettings",A="FL:::/Kernel/KernelA.HH,1148"$ -$LK,"BlkDevInit",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,31",BI=584$ -$LK,"CTaskStk",A="FL:::/Kernel/KernelA.HH,3308"$ -$LK,"CWinMgrTimingGlbls",A="FL:::/Kernel/KernelA.HH,1456"$ -$LK,"FAT32_ENTRIES_PER_BLK",A="FL:::/Kernel/KernelA.HH,2408"$ -$LK,"ATARBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,442",BI=585$ -$LK,"GVF_ALIAS",A="FL:::/Kernel/KernelA.HH,871"$ -$LK,"CTaskSettings",A="FL:::/Kernel/KernelA.HH,3249"$ -$LK,"IEF_ENDING_ZERO",A="FL:::/Kernel/KernelA.HH,1735"$ +$LK,"DOCF_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1269"$ +$LK,"REG_UNDEF",A="FL:::/Kernel/KernelA.HH,1774"$ +$LK,"VGAFlush",A="FL:::/Kernel/Display.HC.Z,88",BI=579$ +$LK,"FILEMASK_AOT",A="FL:::/Kernel/KernelA.HH,2276"$ +$LK,"SysDbg",A="FL:::/Kernel/KMisc.HC.Z,261",BI=580$ +$LK,"FramePtrAdd",A="FL:::/Kernel/KHashB.HC.Z,225",BI=581$ +$LK,"FF_NEEDS_WRITE",A="FL:::/Kernel/KernelA.HH,2773"$ +$LK,"DOCF_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1252"$ +$LK,"LAPIC_APIC_ID",A="FL:::/Kernel/KernelA.HH,483"$ +$LK,"MPrintTime",A="FL:::/Kernel/StrPrint.HC.Z,42",BI=582$ +$LK,"CatPrint",A="FL:::/Kernel/StrPrint.HC.Z,881",BI=583$ +$LK,"TK_CHAR_CONST",A="FL:::/Kernel/KernelA.HH,2061"$ +$LK,"TASKf_AWAITING_MSG",A="FL:::/Kernel/KernelA.HH,3250"$ +$LK,"DOCf_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HH,1288"$ +$LK,"EDF_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1238"$ +$LK,"DOCEG_HAS_ALLOC",A="FL:::/Kernel/KernelA.HH,1016"$ +$LK,"CHashSrcSym",A="FL:::/Kernel/KernelA.HH,713"$ +$LK,"HashPublic",A="FL:::/Kernel/KHashB.HC.Z,170",BI=584$ +$LK,"HEAP_CTRL_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HH,2876"$ +$LK,"EDf_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HH,1244"$ +$LK,"CDocSettings",A="FL:::/Kernel/KernelA.HH,1136"$ +$LK,"BlkDevInit",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,31",BI=585$ +$LK,"CTaskStk",A="FL:::/Kernel/KernelA.HH,3269"$ +$LK,"CWinMgrTimingGlbls",A="FL:::/Kernel/KernelA.HH,1444"$ +$LK,"KbdMsCmdAck",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,65",BI=586$ +$LK,"FAT32_ENTRIES_PER_BLK",A="FL:::/Kernel/KernelA.HH,2395"$ +$LK,"ATARBlks",A="FL:::/Kernel/BlkDev/DskATA.HC.Z,445",BI=587$ +$LK,"GVF_ALIAS",A="FL:::/Kernel/KernelA.HH,859"$ +$LK,"CTaskSettings",A="FL:::/Kernel/KernelA.HH,3209"$ +$LK,"IEF_ENDING_ZERO",A="FL:::/Kernel/KernelA.HH,1722"$ +$LK,"char_bmp_displayable",A="FL:::/Kernel/StrA.HC.Z,381"$ $LK,"PUT_CHARS",A="FL:::/Kernel/StrA.HC.Z,51"$ -$LK,"CMemE820",A="FL:::/Kernel/KernelA.HH,359"$ -$LK,"DVD_BOOT_LOADER_SIZE",A="FL:::/Kernel/KernelA.HH,2299"$ -$LK,"ATAS_DRQ",A="FL:::/Kernel/KernelA.HH,2271"$ -$LK,"DOCF_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1267"$ -$LK,"DrvEnable",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,160",BI=586$ -$LK,"BlkDevLock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,1",BI=587$ -$LK,"BDT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2637"$ -$LK,"DOCf_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1303"$ -$LK,"MRT_RAM",A="FL:::/Kernel/KernelA.HH,2867"$ -$LK,"FSt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2696"$ -$LK,"ATAS_BSY",A="FL:::/Kernel/KernelA.HH,2274"$ -$LK,"HTt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,670"$ -$LK,"ICF_R_WAS_STK",A="FL:::/Kernel/KernelA.HH,1604"$ -$LK,"DOCf_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1317"$ -$LK,"sys_mem_init_val",A="FL:::/Kernel/KernelB.HH,184"$ -$LK,"SYS_SEMA_FORCE_WINMGR",A="FL:::/Kernel/KernelA.HH,612"$ -$LK,"ATAS_ERR",A="FL:::/Kernel/KernelA.HH,2270"$ -$LK,"Struct2Date",A="FL:::/Kernel/KDate.HC.Z,14",BI=588$ -$LK,"ISO1T_TERMINATOR",A="FL:::/Kernel/KernelA.HH,2482"$ -$LK,"SF_RBP",A="FL:::/Kernel/KernelA.HH,558"$ -$LK,"SYS_MP_CNT",A="FL:::/Kernel/KStart32.HC.Z,51"$ -$LK,"CMF_U8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1697"$ -$LK,"CMF_I8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1696"$ -$LK,"EdLiteUpdate",A="FL:::/Kernel/EdLite.HC.Z,7",BI=589$ +$LK,"SEMA_SYS_TIMER",A="FL:::/Kernel/KernelA.HH,596"$ +$LK,"CMemE820",A="FL:::/Kernel/KernelA.HH,358"$ +$LK,"DVD_BOOT_LOADER_SIZE",A="FL:::/Kernel/KernelA.HH,2286"$ +$LK,"ATAS_DRQ",A="FL:::/Kernel/KernelA.HH,2258"$ +$LK,"DOCF_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1255"$ +$LK,"DrvEnable",A="FL:::/Kernel/BlkDev/DskAddDev.HC.Z,170",BI=588$ +$LK,"char_bmp_white_space",A="FL:::/Kernel/StrA.HC.Z,356"$ +$LK,"BlkDevLock",A="FL:::/Kernel/BlkDev/DskBlkDev.HC.Z,1",BI=589$ +$LK,"MEM_PML2",A="FL:::/Kernel/KStart32.HC.Z,13"$ +$LK,"BDT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2624"$ +$LK,"DOCf_BORDER_DOC",A="FL:::/Kernel/KernelA.HH,1291"$ +$LK,"MEM_PML3",A="FL:::/Kernel/KStart32.HC.Z,14"$ +$LK,"MRT_RAM",A="FL:::/Kernel/KernelA.HH,2835"$ +$LK,"FSt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,2683"$ +$LK,"ATAS_BSY",A="FL:::/Kernel/KernelA.HH,2261"$ +$LK,"HTt_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,658"$ +$LK,"MEM_PML4",A="FL:::/Kernel/KStart32.HC.Z,15"$ +$LK,"DOCf_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HH,1305"$ +$LK,"sys_mem_init_val",A="FL:::/Kernel/KernelB.HH,183"$ +$LK,"ATAS_ERR",A="FL:::/Kernel/KernelA.HH,2257"$ +$LK,"Struct2Date",A="FL:::/Kernel/KDate.HC.Z,14",BI=590$ +$LK,"ISO1T_TERMINATOR",A="FL:::/Kernel/KernelA.HH,2469"$ +$LK,"SF_RBP",A="FL:::/Kernel/KernelA.HH,561"$ +$LK,"SYS_MP_CNT",A="FL:::/Kernel/KStart32.HC.Z,65"$ +$LK,"CMF_U8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1684"$ +$LK,"CMF_I8_JMP_TABLE",A="FL:::/Kernel/KernelA.HH,1683"$ +$LK,"EdLiteUpdate",A="FL:::/Kernel/EdLite.HC.Z,7",BI=591$ $LK,"_ARC_ENTRY_GET",A="FL:::/Kernel/Compress.HC.Z,43"$ -$LK,"DOCT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,945"$ -$LK,"SYS_CTRL_ALT_FLAGS",A="FL:::/Kernel/KStart32.HC.Z,24"$ -$LK,"BOOT_RAM_BASE",A="FL:::/Kernel/KernelA.HH,3880"$ -$LK,"MT_DVD",A="FL:::/Kernel/KernelA.HH,2544"$ -$LK,"FramePtrDel",A="FL:::/Kernel/KHashB.HC.Z,240",BI=590$ -$LK,"chars_bmp_filename",A="FL:::/Kernel/StrA.HC.Z,345"$ -$LK,"CICType",A="FL:::/Kernel/KernelA.HH,1625"$ -$LK,"ICF_A2_WAS_STK",A="FL:::/Kernel/KernelA.HH,1606"$ -$LK,"FILEMASK_JIT",A="FL:::/Kernel/KernelA.HH,2288"$ -$LK,"ATAS_DRDY",A="FL:::/Kernel/KernelA.HH,2273"$ -$LK,"ARGT_AL",A="FL:::/Kernel/KernelA.HH,1917"$ -$LK,"CIntermediateCodeBase",A="FL:::/Kernel/KernelA.HH,1644"$ -$LK,"CAutoCompleteDictGlbls",A="FL:::/Kernel/KernelA.HH,1520"$ -$LK,"SYS_CODE_BP",A="FL:::/Kernel/KStart32.HC.Z,27"$ -$LK,"WClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,129",BI=591$ -$LK,"LXchgI64",A="FL:::/Kernel/KernelB.HH,257"$ -$LK,"MSG_KEY_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3241"$ -$LK,"TASKf_NONTIMER_RAND",A="FL:::/Kernel/KernelA.HH,3296"$ -$LK,"ARGT_CL",A="FL:::/Kernel/KernelA.HH,1922"$ -$LK,"ARGT_M8",A="FL:::/Kernel/KernelA.HH,1902"$ -$LK,"ChkOnStk",A="FL:::/Kernel/KDbg.HC.Z,31",BI=592$ -$LK,"TaskQueInsChild",A="FL:::/Kernel/Sched.HC.Z,314",BI=593$ -$LK,"TK_F64",A="FL:::/Kernel/KernelA.HH,2075"$ -$LK,"RLF_BOOT_HEAP",A="FL:::/Kernel/KernelA.HH,463"$ -$LK,"RLf_BOOT_HEAP",A="FL:::/Kernel/KernelA.HH,444"$ +$LK,"DOCT_NUM_TYPES",A="FL:::/Kernel/KernelA.HH,933"$ +$LK,"SYS_CTRL_ALT_FLAGS",A="FL:::/Kernel/KStart32.HC.Z,34"$ +$LK,"BOOT_RAM_BASE",A="FL:::/Kernel/KernelA.HH,3835"$ +$LK,"JOBf_HIGHEST_PRIORITY",A="FL:::/Kernel/KernelA.HH,3146"$ +$LK,"MT_DVD",A="FL:::/Kernel/KernelA.HH,2531"$ +$LK,"FramePtrDel",A="FL:::/Kernel/KHashB.HC.Z,240",BI=592$ +$LK,"CICType",A="FL:::/Kernel/KernelA.HH,1613"$ +$LK,"FILEMASK_JIT",A="FL:::/Kernel/KernelA.HH,2275"$ +$LK,"ATAS_DRDY",A="FL:::/Kernel/KernelA.HH,2260"$ +$LK,"ARGT_AL",A="FL:::/Kernel/KernelA.HH,1904"$ +$LK,"CIntermediateCodeBase",A="FL:::/Kernel/KernelA.HH,1632"$ +$LK,"CAutoCompleteDictGlbls",A="FL:::/Kernel/KernelA.HH,1508"$ +$LK,"SYS_CODE_BP",A="FL:::/Kernel/KStart32.HC.Z,37"$ +$LK,"WClusters",A="FL:::/Kernel/BlkDev/DskCluster.HC.Z,129",BI=593$ +$LK,"LXchgI64",A="FL:::/Kernel/KernelB.HH,263"$ +$LK,"MSG_KEY_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3201"$ +$LK,"TASKf_NONTIMER_RAND",A="FL:::/Kernel/KernelA.HH,3256"$ +$LK,"ARGT_CL",A="FL:::/Kernel/KernelA.HH,1909"$ +$LK,"ARGT_M8",A="FL:::/Kernel/KernelA.HH,1889"$ +$LK,"ChkOnStk",A="FL:::/Kernel/KDbg.HC.Z,31",BI=594$ +$LK,"TaskQueInsChild",A="FL:::/Kernel/Sched.HC.Z,314",BI=595$ +$LK,"TK_F64",A="FL:::/Kernel/KernelA.HH,2062"$ +$LK,"ICF_ARG1_TO_INT",A="FL:::/Kernel/KernelA.HH,1580"$ $LK,"I_USER",A="FL:::/Kernel/KernelA.HH,302"$ -$LK,"FAT32CDirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,226",BI=594$ -$LK,"BlkPoolAdd",A="FL:::/Kernel/Mem/BlkPool.HC.Z,1",BI=595$ -$LK,"TK_NORMALSCRIPT",A="FL:::/Kernel/KernelA.HH,2070"$ -$LK,"SF_RIP",A="FL:::/Kernel/KernelA.HH,559"$ -$LK,"IOAPIC_REG",A="FL:::/Kernel/KernelA.HH,510"$ +$LK,"FAT32CDirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,214",BI=596$ +$LK,"BlkPoolAdd",A="FL:::/Kernel/Mem/BlkPool.HC.Z,1",BI=597$ +$LK,"TK_NORMALSCRIPT",A="FL:::/Kernel/KernelA.HH,2057"$ +$LK,"SF_RIP",A="FL:::/Kernel/KernelA.HH,562"$ +$LK,"IOAPIC_REG",A="FL:::/Kernel/KernelA.HH,513"$ $LK,"Complex",A="FL:::/Kernel/KernelA.HH,116"$ $LK,"Trunc",A="FL:::/Kernel/KernelB.HH,141"$ -$LK,"ROPB_EQU",A="FL:::/Kernel/KernelA.HH,2935"$ -$LK,"HTf_IMM",A="FL:::/Kernel/KernelA.HH,676"$ +$LK,"ROPB_EQU",A="FL:::/Kernel/KernelA.HH,2903"$ +$LK,"HTf_IMM",A="FL:::/Kernel/KernelA.HH,664"$ $LK,"sys_pci_services",A="FL:::/Kernel/PCIBIOS.HC.Z,159"$ -$LK,"CStreamBlk",A="FL:::/Kernel/KernelA.HH,2009"$ -$LK,"ARGT_M32",A="FL:::/Kernel/KernelA.HH,1904"$ -$LK,"ARGT_M16",A="FL:::/Kernel/KernelA.HH,1903"$ -$LK,"MEM_EXTRA_HASH2_PAGES",A="FL:::/Kernel/KernelA.HH,2884"$ -$LK,"ARGT_CS",A="FL:::/Kernel/KernelA.HH,1932"$ -$LK,"ICF_R_TO_F64",A="FL:::/Kernel/KernelA.HH,1589"$ -$LK,"DOC_COLOR_QUOTE",A="FL:::/Kernel/KernelA.HH,1146"$ -$LK,"DOCSS_DBL_QUOTE",A="FL:::/Kernel/KernelA.HH,1131"$ +$LK,"CStreamBlk",A="FL:::/Kernel/KernelA.HH,1996"$ +$LK,"ARGT_M32",A="FL:::/Kernel/KernelA.HH,1891"$ +$LK,"ARGT_M16",A="FL:::/Kernel/KernelA.HH,1890"$ +$LK,"char_bmp_zero_cr_nl_cursor",A="FL:::/Kernel/StrA.HC.Z,362"$ +$LK,"ARGT_CS",A="FL:::/Kernel/KernelA.HH,1919"$ +$LK,"DOC_COLOR_QUOTE",A="FL:::/Kernel/KernelA.HH,1134"$ +$LK,"DOCSS_DBL_QUOTE",A="FL:::/Kernel/KernelA.HH,1119"$ $LK,"SYS_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.HC.Z,5"$ $LK,"_STRCMP",A="FL:::/Kernel/StrA.HC.Z,86"$ -$LK,"ARGT_AX",A="FL:::/Kernel/KernelA.HH,1918"$ -$LK,"LAPIC_PROCESSOR_PRIORITY",A="FL:::/Kernel/KernelA.HH,484"$ -$LK,"Core0Init",A="FL:::/Kernel/MultiProc.HC.Z,355",BI=596$ -$LK,"ARGT_DS",A="FL:::/Kernel/KernelA.HH,1927"$ -$LK,"ARGT_R8",A="FL:::/Kernel/KernelA.HH,1892"$ -$LK,"AStrNew",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,461",BI=597$ -$LK,"ARGT_ES",A="FL:::/Kernel/KernelA.HH,1928"$ -$LK,"ICF_A2_TO_F64",A="FL:::/Kernel/KernelA.HH,1593"$ -$LK,"DOCF_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1261"$ -$LK,"Cf_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,832"$ -$LK,"FAT32DrvInit",A="FL:::/Kernel/BlkDev/FileSysFAT.HC.Z,22",BI=598$ -$LK,"DOCT_ANCHOR",A="FL:::/Kernel/KernelA.HH,928"$ -$LK,"KbdPktRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,388",BI=599$ -$LK,"KbdCmdRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,36",BI=600$ +$LK,"ARGT_AX",A="FL:::/Kernel/KernelA.HH,1905"$ +$LK,"LAPIC_PROCESSOR_PRIORITY",A="FL:::/Kernel/KernelA.HH,487"$ +$LK,"Core0Init",A="FL:::/Kernel/MultiProc.HC.Z,354",BI=598$ +$LK,"ARGT_DS",A="FL:::/Kernel/KernelA.HH,1914"$ +$LK,"ARGT_R8",A="FL:::/Kernel/KernelA.HH,1879"$ +$LK,"AStrNew",A="FL:::/Kernel/Mem/MAllocFree.HC.Z,461",BI=599$ +$LK,"JOBf_DONT_FILTER",A="FL:::/Kernel/KernelA.HH,3145"$ +$LK,"ARGT_ES",A="FL:::/Kernel/KernelA.HH,1915"$ +$LK,"DOCF_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HH,1249"$ +$LK,"Cf_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,820"$ +$LK,"DOCT_ANCHOR",A="FL:::/Kernel/KernelA.HH,916"$ +$LK,"KbdPktRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,388",BI=600$ +$LK,"KbdCmdRead",A="FL:::/Kernel/SerialDev/Keyboard.HC.Z,36",BI=601$ $LK,"D3DivEqu",A="FL:::/Kernel/KernelB.HH,152"$ -$LK,"ARGT_FS",A="FL:::/Kernel/KernelA.HH,1929"$ -$LK,"TK_I64",A="FL:::/Kernel/KernelA.HH,2073"$ -$LK,"ARGT_DX",A="FL:::/Kernel/KernelA.HH,1923"$ -$LK,"ARGT_M64",A="FL:::/Kernel/KernelA.HH,1905"$ -$LK,"DOCE_LEN_DFT",A="FL:::/Kernel/KernelA.HH,1180"$ -$LK,"DOC_COLOR_KEYWORD2",A="FL:::/Kernel/KernelA.HH,1144"$ +$LK,"ARGT_FS",A="FL:::/Kernel/KernelA.HH,1916"$ +$LK,"TK_I64",A="FL:::/Kernel/KernelA.HH,2060"$ +$LK,"ARGT_DX",A="FL:::/Kernel/KernelA.HH,1910"$ +$LK,"ARGT_M64",A="FL:::/Kernel/KernelA.HH,1892"$ +$LK,"DOCE_LEN_DFT",A="FL:::/Kernel/KernelA.HH,1168"$ +$LK,"DOC_COLOR_KEYWORD2",A="FL:::/Kernel/KernelA.HH,1132"$ $LK,"CD2I32",A="FL:::/Kernel/KernelA.HH,138"$ -$LK,"DrvLock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,1",BI=601$ -$LK,"ARGT_GS",A="FL:::/Kernel/KernelA.HH,1931"$ -$LK,"CICTreeLinks",A="FL:::/Kernel/KernelA.HH,1637"$ -$LK,"DOC_COLOR_COMMENT",A="FL:::/Kernel/KernelA.HH,1145"$ -$LK,"SYS_MEM_E801",A="FL:::/Kernel/KStart16.HC.Z,31"$ -$LK,"ATA_NOP",A="FL:::/Kernel/KernelA.HH,2257"$ -$LK,"SVCf_DONT_FILTER",A="FL:::/Kernel/KernelA.HH,3183"$ -$LK,"IET_REL_I0",A="FL:::/Kernel/KernelA.HH,395"$ -$LK,"OC_ADDR_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1756"$ -$LK,"SYS_MEM_E820",A="FL:::/Kernel/KStart16.HC.Z,32"$ -$LK,"SUF_SINGLE_SPACE",A="FL:::/Kernel/KernelA.HH,3791"$ +$LK,"DrvLock",A="FL:::/Kernel/BlkDev/DskDrv.HC.Z,1",BI=602$ +$LK,"ARGT_GS",A="FL:::/Kernel/KernelA.HH,1918"$ +$LK,"CICTreeLinks",A="FL:::/Kernel/KernelA.HH,1625"$ +$LK,"DOC_COLOR_COMMENT",A="FL:::/Kernel/KernelA.HH,1133"$ +$LK,"ATA_NOP",A="FL:::/Kernel/KernelA.HH,2244"$ +$LK,"IET_REL_I0",A="FL:::/Kernel/KernelA.HH,394"$ +$LK,"OC_ADDR_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HH,1743"$ +$LK,"SUF_SINGLE_SPACE",A="FL:::/Kernel/KernelA.HH,3744"$ $LK,"RFLAGG_START",A="FL:::/Kernel/KernelA.HH,327"$ -$LK,"CKeyDevEntry",A="FL:::/Kernel/KernelA.HH,3811"$ -$LK,"MSG_IP_R_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3245"$ -$LK,"MSG_IP_L_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3243"$ -$LK,"XTalkWait",A="FL:::/Kernel/SrvCmd.HC.Z,456",BI=602$ -$LK,"MemPageTable",A="FL:::/Kernel/Mem/PageTables.HC.Z,127",BI=603$ -$LK,"CCF_KEEP_NUM_SIGN",A="FL:::/Kernel/KernelA.HH,2135"$ -$LK,"ARGT_MM",A="FL:::/Kernel/KernelA.HH,1936"$ -$LK,"chars_bmp_alpha_numeric_no_at",A="FL:::/Kernel/StrA.HC.Z,335"$ -$LK,"SysHlt",A="FL:::/Kernel/KernelB.HH,263"$ -$LK,"FUF_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2607"$ +$LK,"CKeyDevEntry",A="FL:::/Kernel/KernelA.HH,3764"$ +$LK,"XTalkWait",A="FL:::/Kernel/Job.HC.Z,454",BI=603$ +$LK,"MemPageTable",A="FL:::/Kernel/Mem/PageTables.HC.Z,199",BI=604$ +$LK,"MSG_MS_R_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3205"$ +$LK,"MSG_MS_L_D_DOWN_UP",A="FL:::/Kernel/KernelA.HH,3203"$ +$LK,"CCF_KEEP_NUM_SIGN",A="FL:::/Kernel/KernelA.HH,2122"$ +$LK,"ARGT_MM",A="FL:::/Kernel/KernelA.HH,1923"$ +$LK,"SysHlt",A="FL:::/Kernel/KernelB.HH,269"$ +$LK,"FUF_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2594"$ $LK,"CD2I64",A="FL:::/Kernel/KernelA.HH,142"$ $LK,"CD3I32",A="FL:::/Kernel/KernelA.HH,128"$ +$LK,"MsHardPktRead",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,78",BI=605$ $LK,"_STRCPY",A="FL:::/Kernel/StrA.HC.Z,65"$ -$LK,"RedSeaDrvValidate",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,82",BI=604$ -$LK,"YELLOW",A="FL:::/Kernel/KernelA.HH,2974"$ -$LK,"FUf_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2580"$ -$LK,"RedSeaFreeFreeLst",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,3",BI=605$ -$LK,"IPVarsInit",A="FL:::/Kernel/SerialDev/InputPointer.HC.Z,68",BI=606$ -$LK,"IET_REL_I8",A="FL:::/Kernel/KernelA.HH,397"$ -$LK,"MouseGetDevType",A="FL:::/Kernel/SerialDev/Mouse.HC.Z,26",BI=607$ -$LK,"ARGT_R32",A="FL:::/Kernel/KernelA.HH,1894"$ -$LK,"ARGT_R16",A="FL:::/Kernel/KernelA.HH,1893"$ -$LK,"DOC_DFT",A="FL:::/Kernel/KernelA.HH,1158"$ -$LK,"CMemberLstMeta",A="FL:::/Kernel/KernelA.HH,790"$ -$LK,"DISPLAYf_WIN_ON_TOP",A="FL:::/Kernel/KernelA.HH,3303"$ -$LK,"CAutoCompleteGlbls",A="FL:::/Kernel/KernelA.HH,1483"$ -$LK,"CAOTImportExport",A="FL:::/Kernel/KernelA.HH,1957"$ -$LK,"MEM_SETH_STK",A="FL:::/Kernel/KernelA.HH,2887"$ -$LK,"DOCEF_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1014"$ +$LK,"YELLOW",A="FL:::/Kernel/KernelA.HH,2942"$ +$LK,"FUf_JUST_DIRS",A="FL:::/Kernel/KernelA.HH,2567"$ +$LK,"RedSeaFreeFreeLst",A="FL:::/Kernel/BlkDev/FileSysRedSea.HC.Z,3",BI=606$ +$LK,"IET_REL_I8",A="FL:::/Kernel/KernelA.HH,396"$ +$LK,"ARGT_R32",A="FL:::/Kernel/KernelA.HH,1881"$ +$LK,"ARGT_R16",A="FL:::/Kernel/KernelA.HH,1880"$ +$LK,"DOC_DFT",A="FL:::/Kernel/KernelA.HH,1146"$ +$LK,"CMemberLstMeta",A="FL:::/Kernel/KernelA.HH,778"$ +$LK,"DISPLAYf_WIN_ON_TOP",A="FL:::/Kernel/KernelA.HH,3263"$ +$LK,"CAutoCompleteGlbls",A="FL:::/Kernel/KernelA.HH,1471"$ +$LK,"char_bmp_non_eol",A="FL:::/Kernel/StrA.HC.Z,391"$ +$LK,"CAOTImportExport",A="FL:::/Kernel/KernelA.HH,1944"$ +$LK,"MEM_SETH_STK",A="FL:::/Kernel/KernelA.HH,2855"$ +$LK,"DOCEF_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HH,1002"$ $LK,"CD3I64",A="FL:::/Kernel/KernelA.HH,146"$ $LK,"c32_edi",A="FL:::/Kernel/PCIBIOS.HC.Z,157"$ $LK,"_CALL_IND",A="FL:::/Kernel/KUtils.HC.Z,332"$ -$LK,"PURPLE",A="FL:::/Kernel/KernelA.HH,2965"$ -$LK,"TASKf_BREAK_LOCKED",A="FL:::/Kernel/KernelA.HH,3291"$ -$LK,"FILEMASK_SRC",A="FL:::/Kernel/KernelA.HH,2290"$ -L8G«ß«ßµßÉßËßÙßÛßìßàà+àYà]à]àbàDVc£%£%§%¶%Â%Î%Ú%è%ô%û%&&&&@4@S$S$[$_$v$�$¤$³$¿$Í$Ô$å$æ$ê$,‡ŽºSºS¾SÏSÔSØST„Õ0�0�4�L�Y�^�g�l�q�v�{�€�…���¾�Ï�é�ö�ÿ�ž žž,žž<žAžIžgžgžlž|ž‚žŒž‘žšžŸž¤ž´žÅžúžÿž&Ÿ+Ÿ0Ÿ5ŸVŸTŸdŸpŸ‡Ÿ�Ÿ—Ÿ£Ÿ¯ŸÑŸÑŸØŸߟäŸëŸôŸõŸþŸ ¸ <#####6#P#i#v#}###ˆ#–#D™¦ããñÿ '::Cˆ/MJ´J´Z´e´p´w´w´š´¦´µ´´Ï´Ô´Ú´é´ï´ö´ö´ú´ú´ú´ú´µ -µµ 0ÎÖ{—{—•—­—À———̗ -Ì ;X9X9p9v9�9“9Ÿ9´9º9À9Æ9å9ê9ò9ò9:: :0:6:8:G:K:Z:`:c:e:t:x:‡:�:�:’:¢:¦:º:½:À:Â:Ñ:Ô:à: Ä¥Òà6à67 77 777A7G7J7M7P7Œ7�7’7”7§7ª7­7µ7»7À7À7Æ7Ò7Ô7Ý7Ý7Ý7Ý7ã7æ7ë7î7ö78 ˆCa:¿:¿`¿d¿l¿r¿{¿ƒ¿‰¿Œ¿˜¿˜¿Æ¿Ó¿Ý¿à¿ã¿ê¿ò¿ø¿ÀÀÀ h"§"§+§9§H§S§c§s§ƒ§“§¢§±§Á§ѧò§ô§¨¨"¨2¨^¨^¨c¨4æïS˜S˜m˜{˜“˜¦˜¨˜¨˜²˜h:PÈaÈaÖaØaåaòaùabb b#b?bSbbbjbsbubub}b44=hIhIvI’I’I•I¯I¯IµI TX›û›û©û·û(-3$$ $%$-$B$D$N$HÜêqxqx‘xžx£x¯xÏxÕxÛxèxñxòxþx(Z`VÜVÜp܂܊Ü�ܘÜ$üZ‰Z‰c‰k‰q‰v‰0¯·2Õ2ÕHÕSÕdÕfÕnÕ8– xdxd†d�d˜d�dŸd¶d¶d¿dÅdPr‚pcpc~c…c�c•cžc­c³cºc¼c¿cÊcÐc€[wbÄbÄ�ĔĘįĿÄÕÄëÄýÄýÄÅÅ&Å,Å/Å6Å:Å>ÅBÅFÅFÅFÅôÅà:.rˆrˆ‹ˆ“ˆ®ˆ¹ˆÀˆ͈Úˆçˆûˆ‰,‰7‰E‰U‰^‰a‰k‰o‰Љ�‰–‰ž‰°‰³‰Á‰Љá‰ç‰í‰ù‰Š Š$Š)Š<Š\ŠkŠrŠyŠyŠ€ŠˆŠ•Š—Š©Š±Š³Š½ŠÄŠÄŠÄŠËŠÓŠÝŠèŠôŠ‹‹G‹G‹k‹k‹r‹|‹’‹´‹¹‹¹‹À‹È‹Þ‹ŒŒŒŒ'Œ*Œ6Œ9Œ<ŒZŒZŒ_Œ_ŒgŒlŒpŒ€ŒƒŒœŒœŒ¡Œ¡Œ´Œ»ŒÅŒÛŒùŒüŒþŒþŒ�� �6�T�W�Y�Y�t�w�—�²�»�Ä�È�Ö�Ü�Ü�ù�ù�ù�þ�þ�þ� -ŽŽ(Ž9Ž<Ž?ŽDŽDŽIŽaŽdŽŠŽŽŽ©ŽÂŽËŽÔŽØŽæŽìŽïŽôŽôŽ�� -��!�'�*�/�/�C�O�[�k�ƒ�¨�µ�¹�Ï�é�û��� � ��!�3�8�@�G�S�p�s�u�†���™�²�¿�Â�É�Ì�Î�æ�ù�‘‘‘‘‘!‘+‘9‘B‘H‘O‘Z‘c‘r‘�‘�‘°‘¹‘#’4×àÓ—Ó—ç—õ— ˜˜˜˜"˜@@LÃÃËÒßîý&5>]a`ˆœc'c'q'~'ˆ'ˆ'›'£'¶'¸'Ë'Ë'Ï'Ù'Þ'Þ'ä'|w’¦¦:¦J¦U¦Z¦\¦b¦t¦†¦–¦§¦·¦¹¦¹¦¹¦¿¦ئõ¦§§§§§ XÓå£9£9¯9±9À9Ö9â9é9::::::$: @8D‚Š‚Š�Š’Š´ŠÁŠÁŠËŠ!|ÿû û , / = F F ] n ƒ ˆ › Ÿ ° à Ì Ü ä ô !!;!"¬Elè‚è‚þ‚ƒƒ"ƒ4ƒHƒSƒYƒqƒqƒ…ƒ“ƒ�ƒ¬ƒ±ƒ±ƒ½ƒ½ƒÃÃ-„2„2„Z„Z„h„k„n„|„‚„‹„³„# †ŠÈ\È\Ñ\Þ\ã\$H—¥nn‰‹œ¨­¹¹½Ç%Œ¬Ëæøæøù -ùù/ùBùBùMùRùZùtù|ù�ù™ùžùªù°ù·ùÄùÇùÐùÓùÖùÛùú& lp–˖˪˸˾Ë'D6Cx—x—”—–—©—®—¾—Ë—Ñ—Ô—à—(p¼ÔNN\j€�”¤¦¬µ½Èâò÷)h#9XwXwnwpww“w•wžw w w£w¿wÿw xx&x0x;x>xLx*$glÐyÐyÔyäyïy -z+œd‡&&1&:&G&T&a&y&�&�&£&£&«&À&Í&Í&Ú&â&ñ&' ' '1'9'M'T'T'^',|9aaa a0a:aAaHaQaYaqaxaa‰a‘a˜aŸa§a­a¸a¼a¾a¾aÂa-Xü§ü§¨¨#¨&¨/¨:¨M¨W¨_¨c¨f¨f¨l¨o¨}¨.D ,UQUQiQyQ€Q•QœQ£Q¤Q¬Q/”9K K S w † ’ � « ½ Ë Ó á õ ( -* -. -. -9 -D -S -b -‚ -� -’ -¤ -« -« -½ -¾ - -0Xßñ^lzz’˜¡©´¾ÅÝÝÝääåë1Pz‰z‰Ž‰ž‰¤‰©‰©‰º‰¾‰Ã‰Ã‰Ë‰2 $(èHèHöH -II3Œ«Êúšúš››(›8›E›I›M›p›}›‰›”› ›©›è›ð›œ&œ4œ;œBœIœjœpœwœzœ�œ4ŒýÒÌÒÌÜÌÞÌöÌÍÍ ÍNÍQÍZ͈͋Í�͔ͧ͠ÍÉÍÌÍÎÍÕÍ÷ÍúÍúÍýÍÎÎÎ5@-9­Q­Q½QÆQÍQÔQÛQÜQäQ6 ªŸªŸ®ŸןéŸ7<ðûòˆòˆ‰‰ ‰0‰8‰@‰H‰K‰S‰84aj0K0K8KFK…K•K¢K¶KºK¼K94MVJJJ&JeJuJ‚J–J›J�J: £Çƒýƒý¤ý®ý¸ýÏýåýêý÷ýüýþ7þ<þOþTþYþsþˆþŠþ¤þ¹þ¹þÀþÀþÀþgÿ;$“˜««´Â×Ü< PT~ì~ì‚ì”ì–ì=L¡°rÚrÚ|Ú’Ú¡Ú§Ú¶Ú¼ÚËÚÑÚàÚæÚõÚûÚýÚÛ>H!Ò‰Ò‰à‰ì‰ñ‰ñ‰ŠŠŠŠ Š?,````&`3`9`>`@Lùšžšž¨ž«ž·žÁžÇžÔžèžèž -Ÿ -Ÿ'Ÿ+Ÿ/Ÿ5ŸA …‰..2AEB\˜«>ø>øRø`øeøkøvøøø�ø›øŸø·ø¾øÁøÃøæøC4Š“FFJTd…šššžD4u~PLPLYLcL�L­L¹LÉLÌLÏLE¸�Çð8ð8ø89 9*939I9]9g9s9~9~9�9®9Ó9à9è9þ9 ::: :A:f:s:{:‘:œ:®:®:¼:Ã:Õ:Õ:ã:ã:ä:÷:F ”˜žž¢ÅÉGpu�:Ù:ÙTÙfققىًًٙٛٛ٧٧٭ٵٹÙÄÙÜÙöÙöÙöÙÚH DX}X}`}l}”}¨}¬}»}Ç}Õ}ä})~)~U~r~|~‹~‰~¸~¸~Þ~Þ~ã~è~è~÷~ 0KY{“®·»½½ÉÉËËÛççëðù €€ €/€g€p€‚€‚€ˆ€ã‚I|7ËËãíô (+3GQgmprx„J4•žâ~â~ì~î~'(-K,'.NëNëXëZëbë|ë�ë‡ëLXƒ•ÐcÐcâcåcðcõcdddd1d;dDdZdedldvdM�Qq€b€bšb¥bªb³bÆbÞbæbîbûbc cccc&c,c5c9cBcHcKcYc[cicN­éƒƒ�¤µ¸Ùìù0IU\^agk|†Œ�’” °¸¾ËÎÑßð +1>RUX```hovv„œO ™�ÎÎÒçëP„ *žÙžÙ¸Ù»ÙÎÙÛÙ÷ÙúÙÚ ÚÚÚ-ÚCÚGÚbÚeÚkÚxÚ„Ú†Ú†Ú–Ú™Ú¯ÚQˆ +ç+ç3ç>çNç]çiç�ç�ç�ç•çšçšç¾çÍçîçèèèèèè.è5è5èGèLèTèR,æí+:+:/:H:O:Q:S ž¢îîòTTFW¦¦ÉÐÚÞâæððú *U £§ -V ðôòòò(ò*òWHú‘y‘y±y¾yÃyÏyïyõyûyzzzzXHëùyy!y.y3y?y_yeykyxy�y‚yŽyY ¨¬"'+Z ­±..2AE[<æñÚÜÚÜëÜ÷ÜûÜÝ ÝÝÝ"Ý*Ý\dq†K]K]S]W]W]f]…]”]�]¦]½]Ï]Ø]ß]^ ^^ ^!^]´¥Î¸T¸TÃTÔT÷TUU U-UFU]UaUeUmUuU~UœU¤U»U¿UÃUÇUÏU×UàUþUVV+V2V2VCVLV^0&̢̢բբ좣££_dÆÛKhKhYh^hnhsh‚h‡h‰h�hžh£h¥h´h¿hÃhÉh`8 “.“.­.±.´.¿.Ü.à.å./a :T:TCTNT]TbDÀÍÀeÀeÚeñeþeþef(f2fcLš©RWRW`WeWgWvWxW†W‘WšWšW›W¡Wd4ktÀKÀKÈKÖKL%L2LFLILKLe4W` J J¨J¶JõJKK&K+K-Kf0ËÓ’œ’œ¦œåœìœòœÿœ��g[;!;!C!N!V!w!†!�!£!³!Æ!Ó!æ!" ""&"2"7"T"Y"Y"f"p"„"‘"ª"¹"Ì"é"ô"ü"#"#7#U#a#j#o#Œ#•#¢#±#Æ#à#ë#ó#þ#þ#þ#$$$#$.$3$:$h4ˆÐLÐLÙLãLM-M9MIMLMOMi$üÃiÃiãiðiøijj$+0¶Ú¶Ú¿ÚÐÚâÚÛk¨Ci*ª*ªSªXªbªlªvª‚ª‚ªŠª³ª¼ªÁªʪͪÒªÒªêªÿª«« «««E«I«Q«S«^«^«c«c«r«‚«l<$/ê¨ê¨ø¨©©©$©.©]©_©e©mü§âëUëUÿUVV'V6VEVEVkV€V‹V’VµVÂVÐVÞVìVúVWW&W8WCWUWgWnWuW‚W‰W‘W¡W©W¹WÅWïWXXXX!X/Xn@nzÔ¥Ô¥á¥é¥ì¥ú¥þ¥¦¦¦¦ ¦o(b²‚²‚ł˂ڂä‚é‚é‚õ‚ü‚ƒ ƒƒ-ƒAƒCƒ^ƒŽƒ¥ƒ¾ƒɃÛƒÿƒ„„$„=„G„`„j„u„ƒ„Š„˜„˜„¢„»„ã„î„… -… ……2…;…C…^…pD/<ŽëŽë—ë¬ë¸ëÃëÌëÚëåëíëòëq<³¾ q q!q4qHqQqkqrqˆqŽq”qÊqr,CCGt›ÈÝßs<bmŒ¥Œ¥™¥¡¥¤¥²¥¶¥º¥È¥Ì¥Ñ¥t|0Ž Ž Ÿ © · Ï ç ü  - -. -; -F -M -^ -h -h -y -� +$LK,"PURPLE",A="FL:::/Kernel/KernelA.HH,2933"$ +$LK,"TASKf_BREAK_LOCKED",A="FL:::/Kernel/KernelA.HH,3251"$ +$LK,"FILEMASK_SRC",A="FL:::/Kernel/KernelA.HH,2277"$ +4BK3à3à=àFàUàsà¡à¥à¥àªàDVcË Ë Ï Þ ê ö    # ( 9 : > @4@{{ƒ‡žµÌÛçõü   L…Ôx�x�|�”�¡�¦�«�°�µ�º�¿�×�ø� ž#ž0ž9ž>žCžHžfžQžvž{žƒž¡ž¡ž¦ž¶ž¼žÆžËžÔžÙžÞžîžÿž4Ÿ9Ÿ`ŸeŸjŸoŸ�ŸŽŸžŸªŸÁŸÊŸÑŸÝŸéŸ       % . / 8 = ò <#KK^x‘ž¥§§°¾D‰–ûû %-3=PPY„3Pú³ú³ +´´ ´'´'´J´V´e´r´´„´Š´™´Ÿ´¦´¦´ª´ª´ª´ª´·´º´Ê´0ÎÖK—K—e—}—�—’—’—œ— Ì6”9”9¬9²9Ì9Ï9Û9ð9ö9ü9:!:&:.:.:<:B:G:l:r:t:ƒ:‡:–:œ:Ÿ:¡:°:´:Ã:É:Ì:Î:Þ:â:ö:ù:ü:þ: ;;; +Ä Í77>7H7K7[7s7}7ƒ7†7‰7Œ7È7Ë7Î7Ð7ã7æ7é7ñ7÷7ü7ü78888888 8"8'8*828D8 ˆFdê¾ê¾¿¿¿"¿+¿3¿9¿<¿H¿H¿v¿ƒ¿�¿�¿“¿š¿¢¿¨¿µ¿µ¿Ë¿ hÚ¦Ú¦ã¦ñ¦§ §§+§;§K§Z§i§y§‰§ª§¬§»§ʧڧꧨ¨¨ @Zf³:³:Á:È:Î:Õ:é:ð:ò:÷:;4æï#˜#˜=˜K˜c˜v˜x˜x˜‚˜44=`I`InIŠIŠI�I§I§I­I TXKüKüYügü(-3++3MUjlvHÜê9x9xYxfxkxwx—x�x£x°x¹xºxÆx(Z`&Ü&Ü@ÜRÜZÜ`ÜhÜ$ü2‰2‰;‰C‰I‰N‰0´¼’Õ’Õ¨Õ³ÕÄÕÆÕÎÕ8‰LdLdZdadldqdsdŠdŠd“d™dP[kDcDcRcYcdcicrc�c‡cŽc�c“cžc¤c€[wÄÄ@ÄDÄHÄ_ÄoąěĭĭÄÅÄÊÄÖÄÜÄßÄæÄêÄîÄòÄöÄöÄöĤÅà:.*ˆ*ˆCˆKˆfˆqˆxˆ…ˆ’ˆŸˆ³ˆƈäˆïˆýˆ ‰‰‰#‰'‰B‰G‰N‰V‰h‰k‰y‰ˆ‰™‰Ÿ‰¥‰±‰À‰؉܉á‰ô‰Š#Š*Š1Š1Š8Š@ŠMŠOŠaŠiŠkŠuŠ|Š|Š|ŠƒŠ‹Š•Š Š¬ŠºŠЊÿŠÿŠ#‹#‹*‹4‹J‹l‹q‹q‹x‹€‹–‹¸‹½‹½‹À‹ß‹â‹î‹ñ‹ô‹ŒŒŒŒ Œ$Œ(Œ8Œ;ŒTŒTŒYŒYŒlŒsŒ}Œ“Œ±Œ´Œ¶Œ¶ŒÉŒÐŒØŒîŒ ����,�/�O�j�s�|�€�Ž�”�”�±�±�±�¶�¶�¶�Â�Õ�à�ñ�ô�÷�ü�ü�ŽŽŽBŽFŽaŽzŽƒŽŒŽ�ŽžŽ¤Ž§Ž¬Ž¬Ž¼Ž¿ŽÂŽÐŽÙŽߎâŽçŽçŽûŽ��#�;�`�m�q�‡�¡�³�¼�À�Ã�Ã�Ó�Ù�ë�ð�ø�ÿ� �(�+�-�>�E�Q�j�w�z���„�†�ž�±�¸�Æ�Æ�Æ�Í�Ù�ã�ñ�ú�‘‘‘‘*‘9‘H‘h‘q‘Û‘4×ࣗ£—·—Å—Ý—è—ê—ê—ò—@@L££«²¿ÎÝò=A`ˆœ‹!‹!™!¦!°!°!Ã!Ë!Þ!à!ó!ó!÷!""" "|w’Ò¥Ò¥ò¥¦ ¦¦¦¦,¦>¦N¦_¦o¦q¦q¦q¦w¦�¦­¦½¦¿¦¿¦ȦÔ¦XÓåË3Ë3×3Ù3è3þ3 +44(4*4A4A4C4F4L4 @8DZŠZŠhŠjŠŒŠ™Š™Š£Š |ÿ« « Ü ß í ö ö  !!3!8!K!O!`!s!|!Œ!”!¤!³!¶!ë!!¬El0ƒ0ƒFƒWƒ[ƒjƒ|ƒ�ƒ›ƒ¡ƒ¹ƒ¹ƒ̓Ûƒåƒôƒùƒùƒ„„ „ „u„z„z„¢„¢„°„³„¶„Ąʄӄû„"ŒËê›>›>¤>Ï>ú>%?t?�?ƒ?›?›?ê?÷?ù?@@!@A@H@M@W@„@‹@�@’@•@# †ŠT]T]]]j]o]$H—¥öö$05AAEO%Œ¬Ënùnù�ù’ù›ù·ùÊùÊùÕùÚùâùüùúú!ú&ú2ú8ú?úLúOúXú[ú^úcúŠú& lpfËfËzˈˎË'D6C¸—¸—Ô—Ö—é—î—þ— ˜˜˜ ˜(p¼ÔÖÖäò,.4=EPjz‰‰���)h#90w0wFwHwWwkwmwvwxwxw{w—w×wäwîwþwxxx$x*$gl¨y¨y¬y¼yÇyây+œd‡C C Y b o | ‰ ¡ µ · Ë Ë Ó è õ õ ! +!!+!3!G!Y!a!u!|!|!†!,|9”a”aža«a¼aÆaÍaÔaÝaåaýab bbb$b+b3b9bDbHbJbJbNb-X̧̧ë§î§ó§ö§ÿ§ +¨¨'¨/¨3¨6¨6¨<¨?¨M¨.D ,MQMQaQqQxQ�Q”Q›QœQ¤Q/”9û û  +' +6 +B +M +[ +m +{ +ƒ +‘ +¥ +Ø +Ú +Þ +Þ +é +ô +  2 = B T [ [ m n r 0Xßñæô )1<FMeeellms1PR‰R‰f‰v‰|‰�‰�‰’‰–‰›‰›‰£‰2 $(àHàHîHII3Œ«Ê²š²šÑšÍšàšðšýš››(›5›A›L›X›a› ›¨›Ç›Þ›ì›ó›ú›œ"œ(œ/œ2œHœ4Œý’̶̜̞̒ÌÄÌ×ÌàÌÍÍÍHÍKÍOÍTÍ`Íg͉͎͕͌ͷͺͺͽÍÈÍÏÍÖÍ5@-9¥Q¥QµQ¾QÅQÌQÓQÔQÜQ6<R]£ £ µ Å å   +    7 bŸbŸfŸ�Ÿ¡Ÿ8<ðûʈʈވìˆ÷ˆ‰‰‰ ‰#‰+‰94aj(K(K0K>K}K�KšK®K²K´K:4MVJJJJ]JmJzJŽJ“J•J; £Ç3þ3þTþ^þhþþ•þšþ§þ¬þÈþçþìþÿþÿ ÿ#ÿ8ÿ:ÿTÿiÿiÿpÿpÿpÿ<$ƒˆÃÃÌÚïô= PTNìNìRìdìfì>L¬»2Û2Û<ÛEÛTÛZÛiÛoÛ~Û„Û“Û™Û¨Û®Û°ÛµÛ?H!ª‰ª‰¸‰Ä‰É‰É‰Ú‰ì‰ñ‰ñ‰÷‰@,P`P`Y`b`n`{`�`†`ALùRžRž`žcžožyžžŒž ž žžžßžãžçžížB …‰ööú  C\˜«ÆøÆøÚøèøíøóøþøùùù#ù'ù?ùFùIùKùnùD4Š“,MbbbfE4u~HLHLQL[L•L¥L±LÁLÄLÇLF¸‘»8989@9H9S9r9{9‘9¥9¯9»9Æ9Æ9Õ9ö9:(:0:F:Q:Y:Y:h:‰:®:»:Ã:Ù:ä:ö:ö:; ;;;+;+;,;?;G ”˜ffj�‘Hpu�’ْ٬پÙÚÙÚÙáÙãÙãÙñÙóÙóÙÿÙÿÙÚÚÚ"Ú=ÚZÚZÚZÚgÚI|7{{“�¤°³ÁÄÈÊÍÐØÛã÷ "(4J4•ž¢~¢~¬~®~À~Ç~ç~è~í~K,'.ëë(ë*ë2ëLëQëWëLXl~¤c¤c¶c¹cÄcÉcÖcècècñcddd/d:dAdKdM�:ZTbTbnbyb~b‡bšb²bºbÂbÏbÙbàbçbëbïbúbc c ccc c-c/c=cN­é33MTeh‰œ©·àù ,6<?BDP`hn{~�� °¼¾ÎÛáî        & & 4 L O ™�––š¯³P„ *nÙnوًٞ٫ÙÇÙÊÙÐÙÙÙåÙçÙýÙÚÚ2Ú5Ú;ÚHÚTÚVÚVÚfÚiÚÚQˆ sçsç{ç†ç–ç¥ç±çÕçÕçÕçÝçâçâçèè6èNèVèXèXèdèdèvè}è}è�è”èœèR ž¢¶¶ºÉÍSTFWnn‘˜¢¦ª®¸¸ÂÕáäòT £§ÎÎÒßãU vòvòzò�ò’òVHúYyYyyy†y‹y—y·y½yÃyÐyÙyÚyæyWHëùÉxÉxéxöxûxy'y-y3y@yIyJyVyX ¨¬ææêïóY ­±ööú  ZHíûbÝbÝsÝ݃Ý�ݗݣݩݰݶݾÝ[d€•»]»]Ã]Ç]Ç]Ö]õ]^ ^^-^?^H^O^s^|^ƒ^�^‘^\´™ÂUU UU?UNUYUhUuUŽU¥U©U­UµU½UÆUäUìUVV VVV V(VFVYVbVsVzVzV‹V”V]0&œ¢œ¢¥¢¥¢¼¢ß¢ß¢ä¢^dÇÜShShahfhvh{hŠh�h‘h—h¦h«h­h¼hÇhËhÑh_8 //(/,///:/W/[/`/{/` ¾T¾TÇTÔTãTaD©¶”e”e®eÅeÒeÒeÜeüefb4kt¸K¸KÀKÎK LL*L>LALCLc4W`˜J˜J J®JíJýJ +KK#K%Kd0ËÓJœJœ^œ�œ¤œªœ·œÊœÖœe[ë!ë!ó!þ!"'"6"?"S"c"v"ƒ"–"´"½"Ê"Ö"â"ç"# # ## #4#A#Z#i#|#™#¤#¬#Ç#Ò#ç#$$$ $<$E$R$a$v$�$›$£$®$®$®$³$Á$Ì$Ó$Þ$ã$ê$f4ˆÈLÈLÑLÛLM%M1MAMDMGMg$ýËiËiëiøij jh$+0†Ú†Ú�Ú Ú²ÚîÚi¨Ciâ©â© ªªª$ª.ª:ª:ªBªkªtªyª‚ª…ªŠªŠª¢ª·ªºª½ªêʪΪýª« « «««««*«:«j<$/¢¨¢¨°¨¸¨À¨Шܨ権©©kü¶ñ[V[VoV~V�V—V¦VµVµVÛVðVûVW%W2W@WNW\WjWŠW€W–W¨W³WÅW×WÞWåWòWùWXXX)X5X_XuX†X†XŽX‘XŸXl@nz¤¥¤¥±¥¹¥¼¥Ê¥Î¥Ò¥Õ¥ã¥ê¥ï¥m(aj‚j‚}‚ƒ‚’‚œ‚¡‚¡‚­‚´‚¹‚ÂÔ‚å‚ù‚û‚ƒFƒ]ƒvƒ�ƒ“ƒ·ƒ¹ƒÒƒ܃õƒÿƒ„"„-„;„B„P„P„Z„s„›„¦„½„„Ä„΄ê„ó„û„…n<±¼ÓpÓpépüpqq3q:qPqVq\q’qo,{4{44¬4Ó4555p<bm\¥\¥i¥q¥t¥‚¥†¥Š¥˜¥œ¥¡¥qˆ3 + + +) +3 +A +Y +q † -� -š -® -¹ -uLš©»•»•וޕå•ñ•ú•– –$–-–C–R–\–\–q–v8XX0X=XOXiXwX€XŠXw  #^ó^óbó{óxÔ._ËËÓÛéü !,:IZv~Š’šš¥§¼ÈÚî 1>YvxŠ““¥¥³ºÌÌÚÚßãy4©²‹p‹pŸp±pºpÔpÛpñp÷p -qz0U]KTKTSTiTtTƒT�T¥T{PZjû“û“ ”””+”0”3”9”<”A”L”R”\”|d¦»ÎÎçêøø $/58;=AM}H<J.õ.õ>õDõOõXõ[õhõqõqõuõxõ€õ~$@E~~‡•› 4ÕÞþþ "-FKRX€¬LsÊ{Ê{Ü{ë{ñ{||/|B|Y|l|ƒ|š|±|Ì|Ð|×|Ý|á|ó| }} }:}>}E}K}O}a}z}‡}�}�}š}�?ˆ=ˆ=�=˜=©=¸=Â=Î=Î=Ò=Ú=Þ=÷=1>C>W>{>„>�>�>’>¥>ª>µ>Ë>ß>æ>?K?\?l?‚?–?�?Ï?@@#@#@*@<@<@J@J@K@]@]@k@o@s@‚P˜¨ãoãoùo pp7pApCpQpjpup{pp‡pƒ0lt––¤³¾ÄÆÆÌ„<KVÐxÐxÙxãxóxõx(y/y/y/y2y…˜òîîôò‡ †4ŠÓ†Ñ†ÑžÑ¦Ñ´Ñ¿ÑÃÑÉÑÏÑÝÑòÑ÷ÑýÑÒÒ Ò6Ò;ÒAÒXÒ]ÒcÒqÒuÒ‘Ò¤Ò·Ò¼ÒËÒØÒèÒ÷ÒÓÓÓ$Ó&Ó9ÓSÓZÓhÓzÓzÓ�Ó�Ó¢Ó¤Ó·Ó¹ÓÌÓÌÓèÓÿÓÔ ÔÔ:Ô‡H~ó~ó‡ó¢ó«ó·ó¹ó»óÊóÊóÙóÛóÛóàóˆ`ÜðËhËhâhðhûhýhii$i/i:iK»S»SÐSÞSÞSæSüSTTT T�¤6[0Ž0ŽJŽRŽVŽ^ŽjŽqŽxŽ}ޒޣާާ޴޻ŽÀŽ׎ÚŽãŽéŽìŽîŽøŽýŽ��� �$�2�Ž81;ÛÛ,ÛCÛNÛNÛYÛ]Û]ÛcÛ�$<�³(³(»(Ë(Û(í(ü())!)()3)?)T)b)j))Œ)¡)®)Ã)Í)â)ì)* * *.*.*<*H*T*h*�*ž*­*»*Ç*Ó*ä*ù*+ +)+;+M+_+q+¤+²+Ç+ì+, ,,6,M,V,a,h,s,},†,–,�0‡�#^#^'^8^T^i^n^ˆ^‘02:Ã’Ã’×’â’ô’ü’ÿ’“’¼KvƒdƒdŸdÀdÒdÙdædòdúde ee%eIeXe_efeweye�eŒe—e¦e­e°e²e¸e¾eÖeßeßeãeüe“,ÑØ&ú&ú4ú@úWú[ú]úqú”P Y@`@`Z`]`c`o`q`€`‡`�`¶`½`ê`ñ`õ` aa6a?a?a?aLa…a‘a�aªa½aËaÜaïaüa b$b*bqbƒb°b·bÖbÝbèbcccccc c c,c.c.c>cAcAcMcYcrc~c‡c’c¨c¶c¶c¶cÇcàcçcîcôc÷c?d•P&@–@–`–s––‹–¡–§–²–¸–½–¿–Ø––4# H H©H¾H¾HËHàHàHåH— ÌÐúúúú#ú˜0ÔÜ"�"�6�u�|�‚�š���©�™¼ -5���"�)�0�=�K�T�W�]�c�j�q�s�}�‚�Œ�š� �¯�»�¾�Á�É�Î�ä�ð�ó�ö�ö�ö�ö�ù�Ž ŽŽŽ)Žš0HPÿÿÿ"ÿ*ÿMÿfÿŽÿ›€¨Y¨Y¼YÃYËYÓYïYïYýYÿYÿYZZZ Z!Z!Z1Z9Z9ZBZNZkZkZ}Z}Z�Z¨ZœXbb b!b2b=bYb\bjbpbsb„bŸb£b�@¡­ÈdÒdÚdòdòdûdeee:e>ež@$0[ú[úiúnúqúƒú‰úŒúŽú”úŸ(äêÃsÃsÙsõst t(t  óó(ó;ó@ó¡H&4ßß/ß;ß>ßGßSß[ßx߇ß�ß�ߜߢ úþVòVòZògòiò£ä{°�z�z®z·zÚzäzözùz{{ -{ {{+{8{>{K{V{[{a{s{s{‚{…{�{’{ž{°{½{Ã{Ð{Û{à{æ{ø{ø{ø{ø{|||¤ Ñõ“L“L²L´LÅLÊLØLùLMM M8M?MAMAMSMYM_MaMgMmMpMvMxM�M�M–M–M–M�M®M¥T…–ææ - /?JP[[[_m¦`p„NNkq“ž¢©¬¶½ÍÑÑÑÕá§HîüBÌBÌį̶̠̤̬̇̕ÌÀÌÀÌÂÌÐ̨D"/"Š"Š0Š<ŠAŠAŠRŠWŠWŠ]Š©t¹Òs8s8{8Œ8°8·8È8ì8ú899$9+959C9Y9o9q9‡9�9�9�9Ÿ9ªX{�ÃIÃIÜIìIJJJJ.J4J4J@JLJNJNJVJ«XÙë+C4C;CQCfC|C„C›C¥CÂCÇCÎCãCêCòC÷C¬,ÜãSsSsas„sos”sšsÀs­8x‚úÅúÅÆþÅÆ,Æ8Æ:Æ:ƾƮ8>H¸I¸IÆIÌIÓIéIéIðI -JJ¯<u€b¶b¶}¶‹¶’¶–¶™¶�¶¤¶ȶض°`«¿rrv�¿ò €€)€.€4€6€±LSùSùnùŠùŠù—ù—ù¤ù¤ù´ù¸ù¸ùÈùÊùÊùú²d@Õx@x@ƒ@™@ @¾@Ï@Þ@ë@ú@A&A>AQAgArAœA·AÔAùAþAB,BLBcBsBuB«BCÓBÑB!C2C9CYCnCˆCˆC¯C¯CÎCÕCD DDPDNDžD¥DªDÀDÈDÈDíDýDEdE1E9E$E�E¿EÇEÇEçEüEF'F>FFF1FšFšFšFŸFŸF°FËFÙFñF -G#G>GVGlG„G’G�G�G°GÉGÝGòGHHHbHpH€HŽH¦HÁHÌHäHúHúHQI"I IpI~IŽI©IÁI×IÙI#JôIòIBJBJKJTJiJiJzJ�J–J–J§J§JªJ®J³4 -rƒrƒ€ƒ…ƒˆƒŽƒ‘ƒ“ƒ™ƒ´,sz@z@zDzIzSzczczŽzµT®¿@e@eNe[ehe†e‰e�e—e¥e©e«eµe½e¶Ô%V³G³GÓGáGæGðGðG÷GHHHHH$H'H+H7H7HCHIHVHdHfHfHfHiHnHzHzH†HŸH¢HµHµH¸H»HËH·4mvû=û=>>5>K>‡>•>™>¸À6b;ï;ïFïJïnïyïˆï”ï¨ïÇïÏïçï÷ïðð?ðAðAðeðgðgð‹ð�ð�ð™ð™ð¡ð¡ð­ðÁðÑðÙðÙðëðòðòðñññ@ñ¹ÈÉ÷ë)ë)* ***0*5*5*G*L*L*^*c*c*u*z*z*Œ*‘*‘*‘*‘*˜*�*�*¯*´*´*Æ*Ë*Ë*â*+$+$+6+=+D+M+\+¿+ºˆTrâUâUøUýU V VVV%V0V9VAVFVHVLV[VfVnVvVwVwV�V»(w}›>›>¤>«>Ë>Ò>Õ>¼üF� 0;DZnz’¥Æü3<>FNemx…‰��¢©¼ÌÓéÿ"+=DDV\q½„a~žÜžÜ¢Ü±Ü±ÜÀÜÀÜÏÜÏÜÞÜíÜíÜÝüÜÝ ÝÝÝ)Ý)Ý8ݦᾨs™‚V‚VœV´VÉVÐVÛVáVáVäVëVöVúVÿVWWWWW W#W#W(W7W:WLW¿Ltƒš}š}®}»}¾}Â}Ð}Û}ä}~~~~!~3~ÀTÊÛ.å.å<åCåNåqåå‰å�å™åžå¬å²åµå»åÁ¼žÉVãVãhãnã|ã|ã™ã£ã»ã¿ã×ãÛãõãõãäää%ä2ä;äPäZägäpäräxä�ä‡ä¬ä¯äÇä×äèäìäðäûäûäÿäÿäÿä(åÂ4âƒâƒðƒòƒ÷ƒúƒýƒ„„Ô"8v8vRvqv}v�v–v§v¯v³v¿vÐvÝvãvævévìvñvóv÷vww#w)w,w/w2w2wÌ>ÌTÌgÌrÌxÌ{ÌƒÌØ¨ï••"•%•=•H•X•j•n•|•…•§•­•­•¹•ĕҕܕä•è•è•è•ë•í•ñ•ñ•ö•–– –%–'–'–=–ÙLêùûû:ûFû`ûkûxûŒû’ûžûÚ óó -óóóÛ`#ÛDÛDßDöDEE)E0EGEWEgExE‰EšE»EÜEóEþE FCFÜTƒQƒQ‡Q£Q²QÄQÉQßQæQøQ RR8RHRMRMRORÝ`Èxáxãxëxyy#y2y7yJyaygysyƒyƒy•yÕyÞH_mII#I1I7IKIQIVI^IaImIß4‰’PMPMYMcM�M­M¹MÉMåMðMàÀnšË‹Ë‹ã‹ê‹ò‹ŒŒŒ+Œ1Œ1Œ;ŒBŒMŒRŒ\ŒpŒrŒ}Œ}ŒŒŒ”ŒŸŒ£Œ¨Œ¬Œ·Œ½ŒÀŒÃŒÈŒÏŒÙŒéŒá@/;*’*’H’T’a’l’x’…’‹’Ž’‘’£’â0 'ڔڔ蔕3•9•;•;•A•ã�k‹c”c”y”|”ˆ”ˆ”Š”—”¥”ª”­”¸”»”À”Ö”è”ó”ÿ” • •••••• •$•2•ä<“žðMðMþM NNN'N'N-NJNPNå8%"Ö"Ö,Ö4ÖHÖ]ÖeÖhÖjÖnÖæ”x™²Ó²ÓÉÓËÓÕÓìÓìÓýÓÔÔÔÔ Ô&Ô/ÔFÔFÔKÔMÔMÔQÔSÔSÔWÔ^Ô^ÔcÔsÔ…Ô‡Ô—Ô瀂žss~†‘œ§°ÆÚã÷4NVr~‰¡¬³¾ÃØèLN]µµ#µ#µ2µAµRµVµfµ}µ�µ�µ†µé85?¤¤*¤F¤R¤V¤Z¤^¤j¤r¤êœ$CFCFKFQFbFqF�F¨F¨F´FÅFÐFÜFÜFéFûFG'G.G?GIGNGNGNGnGŽG¨G­G²Gëx‚œ›,›,¯,¹,¿,Ë,Û,Þ,â,ë,û,þ,- ---B-J-S-S-Y-…-Š-�-�-ì8ÃbÃbÓbÖbÛbÞbìbòbõb÷bÿbíD&þêþêëëëë&ë.ë6ë>ëFëJëNëîdavr¥r¥‚¥’¥�¥¢¥¯¥¸¥¼¥Â¥È¥Ð¥Ø¥ä¥¦¦¦¦¦ï@nzîéîéêê'ê-ê/êDêwê}ê}ê‰êð(.4Ú£Ú£ã£ñ£¤¤¤ñ0r”r”€”˜”˔єӔӔٔòDŒ™3•3•_•m•x•|•€•„•ˆ•”•¡•¤•´•ó€Ïëccnv�Œ— ¶ÊÓç$>Fbny‘œ£®³Çô< S:S:[:y:Š:š:«:º:Ô:ì:î:ð:õLÁÐLL-L@LUL[LaLpL~L~L�LŒLöˆú���=�O�O�a�l�‚�‚�’�”�”�”�¥�°�·�»�Ã�Ç�Ï�Õ�Û�Û�Þ�ì�÷|"À"À4ÀCÀFÀgÀŠÀšÀÃÀÓÀàÀÁ Á,Á<ÁBÁRÁRÁdÁgÁlÁlÁ|Á‚Á…ÁéÁø8 :Ÿ:ŸHŸSŸ^Ÿ�Ÿ—ŸšŸ¥Ÿù=x˜x˜�˜�˜�˜ª˜»˜̘ݘò˜ù˜ ™ ™1™9™Z™n™q™y™‰™š™Á™Ô™æ™šš.š:š?šaštš€šŸšúH'5ؖؖò–——3—9—?—?—G—I—u—û("‹R‹R™RµRºRÆRÌRü8JTÖÛÖÛäÛûÛÜÜÜÜÜ ÜýDìùËËÝéÿ$$5EGrþl>U š š¤šµšÆšßšøš› ››:›K›U›W›b›m›v››’›¥›¶›À›À››ÿ$ôùã�ã�ì�õ�û��  -bTbTkTvT‡TDØå~ñ~ñ�ñ’ñ›ñ¬ñ­ñÀñÃñÉñh-ƒƒ2ƒ2«2­2¶2Ê2Í2Ò2Ö2õ2 3 33&3-3L3U3W3v3333„3º3Ä3Î3Ø3â3é3õ34 4 4 4,4,4547474@4B4B4K4M4M4R4T4T4Y4Y4Y4]4x4Ž4™4°4¹4¾4È4Ô4à4ì4ÿ45(5,575M5]55œ5º5º5º5º5º5Ä5Í5Ô5T6LÈ×kÿkÿÿ†ÿ‹ÿ¡ÿ£ÿ´ÿ¸ÿËÿÑÿþÿ4ÆêÆêÎêÖêÞêæêîêöêúêþê,žêžê¦ê®ê¶ê¾êÂêÆêx7NNbgqx‹¤¤³ÉÒáèèëõ %| -Ðkž¯ž¯¿¯Á¯Ø¯á¯ì¯÷¯ù¯ °°%°0°D°O°R°X°\°_°e°i°l°o°‚°—°Ÿ°¢°º°Ê°Í°Ó°Ö°é°þ°± ±!±1±6±6±>±>±a±a±a±e±g±g±k±m±m±q±s±s±w±w±w±z±|±|±±„±Š±�±‘±“±™±œ±´±È±Í±Ó±Ö±Û±î± ² ²!²!²!²&²&²(²(²-²0²V²V²V²n²t²‹²š²©²¾²Ð²õ²ú²ú²³0³5³5³M³k³m³m³…³¡³£³£³»³×³×³õ³´´´´5´:´:´R´n´s´s´w´�´­´±´³´³´·´Ï´í´ñ´ñ´µµµ,µCµJµOµOµgµ~µ…µ“µ£µÇµÎµÐµÐµÞµæµ¶¶¶)¶J¶i¶n¶n¶†¶›¶½¶±¶Õ¶ô¶····5·L·V·[·l·l·r·}·’·—·¡·±·±·ç·õ·û·¸¸#¸#¸/¸3¸3¸<¸K¸T¸T¸]¸g¸ƒ¸¡¸¾¸Í¸Ó¸è¸ð¸ü¸¹¹¹ ¹+¹C¹E¹e¹e¹j¹j¹ ¹®¹·¹·¹Ã¹Ç¹Ç¹Ð¹ß¹è¹è¹ñ¹÷¹ºº6º8ºCº[º]ºyºyºyº‰ºªº¬º¬ºÄºÛºàºàºøº»»»4»4»K»K»W»[»a»j»y»‚»‚»‹»–»®»°»Ì»×»ò»ô»ô»ý»¼ ¼6¼C¼K¼l¼n¼v¼�¼“¼œ¼¡¼Â¼Ì¼Ì¼ç¼ñ¼ü¼½+½B½J½T½T½]½a½x½°½»½»½»½Ï½Ø½Ü½ó½+¾+¾-¾-¾I¾S¾[¾[¾d¾h¾¾·¾È¾Î¾å¾í¾ú¾ÿ¾ÿ¾¿ ¿#¿[¿l¿u¿z¿z¿…¿‰¿¡¿¸¿Â¿Ç¿Ý¿õ¿õ¿ À)À)ÀFÀJÀ]ÀeÀlÀwÀ|ÀƒÀƒÀˆÀ»ÀÏÀíÀÁÁÁÁ(ÁRÁbÁtÁ€Á„ÁžÁ°Á¼ÁÀÁÀÁÀÁÀÁÄÁÉÁÉÁÔÁØÁðÁÂÂÂ,ÂDÂDÂnÂxÂ�¢¢¢­±ÂÉÂàÂêÂïÂÃÃÃÃOÃYÃvÃ}ÈÃ�Ã²Ã¸ÃØÃêÃòÃôà ÄÄ8ÄHÄHÄuÄwġģĿÄÊÄÔÄÞÄåÄÅ Å Å8ÅPÅSÅnÅnÅnÅsÅxūſÅÝÅôÅùÅÆ Æ:ÆNÆQÆhÆhÆhÆhÆrÆˆÆŸÆ©Æ®Æ®ÆÆÆÝÆçÆ÷Æ÷ÆÇ'Ç*Ç<ÇFÇLÇcÇkÇtÇyÇyÇyǕǩǬǾÇÐÇÕÇÕÇíÇÈÈÈÈ:ÈNÈQÈcÈmÈsȊȒțȠȠȠȼÈÐÈÓÈåÈ÷ÈüÈüÈüÈÉ+É5ÉEÉEÉjÉ{ɅɋɢɪɳɸɸɸÉÝÉîÉÊÊÊÊÊÊ6Ê6ÊPÊWÊ”Ë@%êŸêŸþŸ     > I M [ ^ f  0EM¢×¢×«×¾×Ä×Ð×Ù׿×ë× -|�œÚ¶Ú¶÷¶ù¶···(·P·s·�·‘·´·œ·ηî·¸¸¸¸¸¸)¸ 8Ž˜ -Ú -ÚÚ'Ú8Ú<Ú<ÚAÚAÚGÚ ¨°Öƒöƒö™ö¯ö­ö½öÅöÌöÐöØöèööö÷ ÷÷ ÷%÷%÷,÷0÷0÷2÷�ø 4GPú’ú’“$“/“4“B“O“X“i“p+Cà à ã ô û    ) ) 7 ? M U U € « Ö ã !!!!!!D¦³Ú�Ú�æ�ý�‚‚‚‚0‚7‚<‚B‚œTw››²¼Ìç8Sn‰¤·Èõ×Í/KP[er|Š�œ£¯ð0-5  eG)‰À@  -5=EMU]c˜£Åƒgƒg›gªg¸gÈgÎgÎgÙgägçgìgögh h hhh$h'h0h1h1h=h?hKhX7‰NÏNÏlÏrÏyωÏ�ϘϞϥϻÏÉÏÍÏÒÏØÏæÏéÏîÏñÏñÏÐÐÐ&Ð(Ð5Ð:ÐAÐCÐPÐRÐRÐbÐsÐvÐxЄІЦЫвлÐÁÐÇÐÎÐÑÐÑÐáÐòÐôÐ ÑAÑCÑJÑLÑXÑXÑlÑpÑpцÑ@›§__)_K_S_X_k_x_~_�_‰_0úú úúú ú ú%ú,;Bê©ê©ù©ªªª!ª'ª8ˆ’®î®î¼îÈîóîïï ïïïïä6fÍf͇̈́͊ͦͭ͞ÍÁÍÄÍÆÍéÍéÍìÍüÍþÍþÍÎÎÎÎÎ2ÎMÎWÎaÎiÎiÎiÎkÎkÎpÎ�ΕΤδÎÈÎØÎÚÎìÎüÎÏÏ Ï ÏÏÏÏHÏ8òü*Ý*Ý9ÝOÝ^Ý|݆݈݈݀ݎÝô…¾l¦l¦~¦�¦‹¦˜¦œ¦¢¦¢¦©¦¯¦³¦·¦¾¦Ä¦Ë¦Ñ¦Ø¦Þ¦å¦ë¦ò¦ø¦ÿ¦§ §§ §%§,§5§=§=§F§G§X§k§m§}§„§�§š§¥§°§»§Æ§Æ§Ð§LWf8y8yAyQyQyoyuy…y‹y‘y¡y£y£y£yÊyhÝó#�#�8�G�L�\�d�d�r�|�‹�“�Ÿ�®�º�Å�Ë�Ö�Ù�á�D<IfÛfÛzÛ–Û¤Û´Û¶Û¸ÛÃÛÇÛÇÛÏÛ P„”:~:~I~R~\~a~s~s~s~u~‡~Ž~¿~Û~Ü~â~ 0�—“o“o©o¼oÎoÔo×oßo!<al¢¢°ÁÉÍÙÞâè"\ÉÜffj}�£®ÂÓõ2Mhƒž¹Ô�#Tct’ؒؠزظØÂØÚØàØâØíØÙÙ)Ù/Ù/Ù/Ù/Ù5Ù$X£µ‘v‘v±v¾vÃvÏvïvõvwww w#w/w%X†˜ƒìƒìžì¦ì±ìÍìÍìÖìÖìÛìììõìíí íí&,’™öÌöÌ -ÍÍ!Í2Í_Í'ä6™™5™8™;™A™U™\™_™z™„™‰™�™•™•™¦™˜™´™Ë™×™ë™ô™ü™ š š ššš+š-š8š>š]šmšuš‡š�š¡š©š»š¾š¾š¾š¾šÊš ›(  HPoPopoo‹o–o¡oµoÈoÓoßoðoõopp -pp,p8p8pSpepxp†p›p¡pÅpÍpÍpÙpÝpápùpq2q qAqLqcqgqpququqŠq�q¯q´q´qÀqÆqÌqÎqÞq) Hlcàcàwà‡à›à¨à¬àµà¼àÂàÄà×àßà)ááéà9áHáZáaápá‚á‰á•á©áÉáÓá«â*LrÎrÎ�ΉΉΖΨδμÎÂÎÇÎÍÎÏÎÏÎÕÎ+<|‡ -† -††1†<†C†m†K†{†dž,˜Õ÷²€²€Ü€í€ÿ€ ��$�(�,�0�4�<�D�V�d�n�s�ƒ�Œ�¡�§�«�½�- GK’{’{¡{¾{Ä{.Ü4X‰X‰v‰‚‰‹‰©‰©‰«‰²‰²‰Éʉ׉ê‰ó‰ÿ‰ŠŠ'ŠBŠBŠXŠZŠZŠpŠrŠrŠ~Š~Š“Š¤ŠªŠ­Š­Š°ŠµŠ½ŠΊÕŠÛŠìŠïŠ ‹ ‹‹‹‹,‹/lªò—ò—˜"˜2˜2˜F˜P˜T˜X˜e˜v˜x˜Œ˜•˜™˜¨˜»˜Á˜Șטژ嘙&™2™:™D™R™c™v™ƒ™”™§™­™ô™šš*š9šDšZšhšhštš˜š¤š¯š¶š¼šÚ̚Ϛöš04Yb:Ø:ØCØKØWØhØpØxØ‹Ø�Ø1 �´H=H=b=h=h=w=ƒ=Š=�=�=š=£=£=©=­=°=º=Å=Å=Ô=Ý=Ý=è=í=ð=ó=ö=ù=>>>>>>2 æêÎñÎñÒñßñáñ3¤“ø˜…˜…®…º…Â…Ó…×…ë…ý… ††"†(†-†D†M†e†u†u†‚†�†œ†¬†¾†¾††ȆІÚ†Ú†Þ†â†ñ†‡‡*‡*‡9‡;‡A‡I‡[‡p‡z‡‰‡އއš‡š‡¨‡±‡±‡À‡î‡ò‡õ‡ù‡ˆ ˆ!ˆ6ˆEˆTˆ_ˆaˆgˆtˆzˆ�ˆŽˆ”ˆ”ˆ›ˆ´ˆ¹ˆÁˆɈÒˆÙˆâˆQ‰4,%l‹;‹;“;—;ž;¥;°;¸;¿;¿;Î;Ó;ß;ë;û;<$<)<1<8<I<c<w<~<�<�<³<¸<Ê<Ï<ò<ö<ÿ<==/=6=G=H=L=n==”=Ÿ=¬=¬=³=Õ=æ=ì=ö=5,’’ ’'’-’-’2’64ÏØãBãBçBìBøBCCC"C$C7(ëñ+t+tEtWtctitqt8»ü -¯ -¯¯ ¯%¯+¯S¯v¯~¯†¯‘¯–¯¬¯¹¯¯ǯö¯ý¯°°° °&°L°L°U°l°{°œ°¤°·°ǰ×°ç°ö°±±&±@±E±M±M±R±`±o±�±›±ª±º±ʱÚ±ô±ô±ô±²²9”ÌíúÊúÊË Ë)Ë5Ë<ËEËXËrËxË€Ë�ˣˣ˲˹˾ËÜËßËèËíË ÌÌÌÌÌÌ.Ì1ÌAÌ:8�š‹^‹^�^ ^¼^Ñ^â^ë^ð^ _;p !!z!z5zBzGzSzYz`z|z²z»zÄzÐz<ƒÁÂÆÂÆæÆùÆÇÇÇÇÇ#Ç5Ç>Ç^ÇcÇ|ǃǃǘǤǤÇËÇÎÇíÇ ÈÈ.ÈDÈFÈRÈhÈ~È�ȼÈÈÈÞÈôÈùÈÉÉ1É1É9ÉCÉOÉeÉ{ɇÉ�ɳɽÉÅÉÌÉâÉëÉÃÊ=8uÎÎÜëõ>80:j©j©s©›©¾©Ê©שá©æ©?,¨¯‹_‹_”_�_°_¶_»_@0 ÀŒÀŒÎŒØŒìŒòŒôŒúŒA,8?&&:L]kqwB,0o0o9oDoFoFoKoC\m€êê €€€-€9€B€a€m€v€|€€€Ž€D€ð_ð_```&`M`W`a`i`q`y`…`—`©`Ã`Ï`Ø`æ`ì`ò`õ`ü`aEX°»_»_Ç_Ð_Ù_ß_ë_÷_ÿ_` ``!`,`4`M`_`j`s`s`x`}`‹`’`—`—`�`¤`©`µ`½`Æ`Æ`Î`Ý`á`î`û`a -a -aaa&a1aMaMaMaUa\acajaqaxaa†a�a”aša£a©a¼aÍaéaøaûabF|Kf†õ†õ¥õ³õÃõÏõÕõÞõåõìõñõýõö ö ööööö%ö3ö:ö:ö:öHöG,Ã%Ã%Û%æ% &0&8&HX ^CjCjKjVjhjnjvj€j£j£jµjÂjÖjãjëjùj4kBkzkkk‘kžk²k¿kÄkÓkll l&l+l+l=lJl^lklpll³lºlËlÑlÓlÓlÛlÛlèlýlmm:mGmWm\mbmomzm€m‹m‹m‘mšm¥mµmºmÙmæmómømømümnIàÊþ››£ÃÒÜåö&9W`my……’œÂÕô  ' 4 i U z  ‘ • � � « ¶ Ä Ë Ö ä ä é õ JLRa4¥4¥A¥I¥L¥Z¥]¥d¥h¥k¥o¥}¥„¥‰¥K8GQì¤ì¤ù¤¥¥¥¥$¥(¥-¥L0&&/4CGINMP×çƒøƒø�ø ø³ø»øQùN(MSccky‹”–Oœ'Jscsc�c®cÀcÇcÔcàcècócþc dd#d*d.d.d4d:dRd[dadjdodododsd}dP8ˆ’ccl|‰‰�Ÿ¦¦«Q¼W‚@m@mfmimwm’m m§m´m·m»mÅmÒmòmòmnnn0n2n2nBnDnDnTnTnxnnˆn’n–n¯n±nÖnßnçnîn0oR<#j¨j¨x¨€¨ˆ¨˜¨¤¨®¨ݨߨå¨S$£b£b¬bµb»bÀbTZêÁêÁþÁÂÂÂÂ2Â>Âe„£¯ÂÃÂÇÂÍÂÛÂßÂåÂóÂóÂóÂÃ1ÃEÃ]ÃaÃgÃuÃyÃÑÑÑÑÔÙÞäøüÃÂÃÍÃÑÃ×ÃâÃâÃâÃçÃíÃÄÄ ÄÄÄ Ä)Ä)Ä)Ä^ÄUDz‡óó÷ 07<AHZZ\V¬ÍôJºJºlºqºzºzº†º•º¢º¦º°ºƺƺÖºâºçºçº» »»»*»*»*»2»@»N»X»[»`»m»z»z»Œ»W�-MhOhO•O˜O¦O¯O¯OÆO×OìOñOPPPP+PUP]PaPfPnP€P�P’PÆPXHæóæóïóô ôôôô,ô,ô;ô=ô=ôBôY¸9£H[H[i[l[o[Œ[°[·[Â[Ð[Ú[ð[ø[þ[ \\/\4\C\V\v\\v\‘\“\œ\“\®\°\¹\°\Ë\Í\Í\Ý\Ý\ë\ü\]-]T]T]\]_]„]Œ]’]Ÿ]¯]Ã]È]×]ê] ^^,^L^Y^L^g^l^y^l^‡^Œ^™^Œ^§^¬^¬^¼^¼^Ï^à^å^__8_8_@_C_Q_V_i_t_ƒ_ƒ_Œ_`Z0 íí)í3í9íBíIíMíSí[(�•Ú€Ú€æ€ì€ò€ ��\¼w¢ff-f0fLf^fefrf~f�f‘f•f�f§f¶f¿fØfØfßfåfìfùfggggg#g)gAgJgJgQglgog�g]¬ F£ã£ã«ã¯ã»ãËãÖãåãñãúãä8äDäLäjäuä”ä”ä»ä½ä½ä½äÖäØäØäØäðäðäå -å%å%å%å7å>å>åPåVå`å^D�œH8H8Z8f8|8–8¡8¡8²8Â8Ä8î8_¼B½½(½0½:½F½T½d½Œ½¯½¾½é½í½õ½ÿ½'¾J¾X¾h¾s¾ž¾®¾³¾»¾æ¾ê¾ü¾¿¿¿&¿&¿0¿:¿`@nzsIsI{IœI I³I¼IÀIÂIa *n°3°3»3¿3Ç3è3õ344404C4X4l4x4�4 4³4»4Ü4ñ4ü45+505:5L5e5t5�5–5Ž5±5É5Í5Ò5Ò5ã5ã5ö566163636F6N6N6N6`6`6i6{6‚6‚6”6š6À6b@1=›ú›ú©ú®ú±úÃúÉúÌúÎúÔúcè¸îH“H“b“z“†“–“¨“¬“¯“¸“»“̓̓̓ӓà“ã“è“å“B”Y”\”^”u”x”z”‚”’”’”›”ª”¸”Ȕ֔ߔæ”ë”ë”ë”ñ”•dD b¼b¼v¼ž¼Á¼μۼ漽 -½½e4zƒ^^lu|…f8îøZžZžhžnžwž}žƒžŒž�ž•žgtRkP|P|u|w|�|°|¶|°|Í|Ï|Õ|Ï|ì|î|î|þ|}}}}}V}h0SRSR\RnR|R€R„R„R‰Ri@ÊÕÊÕÙÕáÕõÕÿÕÖÖÖÖÖÖ"ÖjØ&Xj j € � š ¬ ààÔ ì ù  ¡¡#¡3¡U¡W¡t¡�¡�¡�¡’¡¾¡Å¡ΡÔ¡Û¡á¡æ¡ì¡ð¡÷¡¢¢2¢küi¤ÀdÀdßdádðdüdee"e+e2e@eNededegeleveve€eƒe™e±e­e¿eÄeâeûeff -ff3f5fQfKf}f}f‘f¥f¬f²fµfºfÊfÑfÔfªgl” *ãã-U}‹ÎTVdr€€š´Ñãó ! 3 C X q x  › · à mdV8i8iLiNi^iliviši¾iÆiØiæiñijjj%j*jCjcjcj„j†j†j§j©j©jÊjÌjÌjÜjÜjäjçjìjk -kk(kKkWk~k~kŸk¡k¡kÂkÇkÇkèkíkíkýkýk -l ll+l;lGlglglslwlƒl‘lšl®lÂlÉlÐlÓl;mn`AUë$ë$ó$ %%%%(%4%O%X%_%d%u%†%˜%œ%¡%£%oðñ) 0 0¾0Á0Ä0Î0Ü0ç0ÿ01171D1O1a1v1‡1’1¿1Ä1Ê1ô1þ1222 212F2Z2b2ˆ2�2“2¶2»2Ï2ç2þ2303F3X3X3„3š3�3¯3p<5@ЄЄ¢„±„¸„½„Ȅ݄à„å„ñ„q0 (H(H,H@H@HTHXH\Hr¼ -5SíSí^íbí†í‘í í¬í¸í×íïíÿí î î@îBîBîcîeîeî†îˆîˆî”î”îœîœî¨î¼îÌîÔîÔîæîíîíîÿî ïïï;ïs\Qdj“j“z“|“‡“Œ“Ÿ“¨“­“²““ϓϓՓà“tŒoŽÀ6À6Ë6Ó6Þ6é6ô6ý67'707D7k7�7›7£7¹7Á7ß7ë7ö788 8+808C8uxˆ¢óüóüýýý$ý*ý-ý5ý>ýMýUýUý`ý`ýhýjýjýqýtý€ýv0 â“â“ð“ú“””” ”wLDSà—à—ø—ú—˜-˜;˜=˜R˜]˜c˜x˜x0 SŠTŠT¢T¤T°T°T¼TÉTÖTÞTãTéTëTïTÿT UU(U-U-U4U4U?U?U^UlUwUyUU�UƒU…U…U�U’UšU U¢U¢U®U¸U»U»U»U»UÆUÆUÎUÒUÞUyx8¨Z¨Z¾ZÛZâZîZýZ[[[*[2[8[;[E[z´5^0‹0‹T‹_‹g‹v‹{‹€‹�‹•‹°‹°‹¾‹Å‹Ë‹Ò‹Ú‹è‹î‹ð‹ŒŒŒ ŒŒŒ*Œ0Œ2Œ2ŒBŒDŒDŒTŒ¹Œ{ `3Z3ZMZ[ZtZZ–Z£ZµZÊZÚZáZòZýZ [[3[3[7[B[N[P[P[P[V[V[Y[c[c[~[‹[‹[�[ [³[¹[Â[Ì[Ü[ð[\)\4\4\F\F\F\\\l\ƒ\Œ\’\¢\¦\¦\«\«\Á\|,07bŠbŠkŠuŠvŠ{Š}tý’ݒݣݯݽÝÉÝÕÝáÝáÝóÝùÝùÝÞÞ/ÞKÞKÞKÞKÞQÞQÞaÞcÞcÞŒÞ~$‚‡VîVîZîgî�î©î<7B››'›'›C›K›[›b›d›l›€,€H€H„H˜HœHœH H�, -`H`HdHxH|H|H€H‚hN¤ÈPÈPÓPÞPîPöPQ&Q7Q@QTQlQ|Q�QŸQ§QÈQÝQèQòQRR&R3RER^RmRmR”R£R­RÊRÕRÝRøRSS!S;SJSVS_SdS�SŽS”S­S©SÃSÎSÖSáSáSáSìSìSýSýST"T5T>T>TQTaTiTiTiTwT‚T‰T”T•T©T­T´TƒDŸ¬ÛÛíù)44EUWƒ„LapÃ\Ã\Ì\Ñ\Ø\Ø\÷\]!]0]?]D]F]H]H]…l£ºú­ú­®®(®7®7®_®‚®�®—® ®°®¼®É®å®ë®ï®÷®û®¯†¬Gncåcåkåoå{å‹å–å¥å±åºåÖåèåýå&æ2æ=æ\æ\æƒæ…æ…æ…æžæ æ æ æ¸æ¸æÊæÒæíæíæíæÿæççç(ç‡øQØyöyz*z.z@zIzRzYzbzkzƒz’zªz½zÆzÏzÝzõz{{%{){/{8{>{I{K{N{V{k{€{ƒ{Ž{”{œ{ {²{¸{¾{Å{Ë{Û{á{ó{ú{ü{L|ˆ<ÃÎBB;BKBPBvBœBÂBÉBÐBÕBáB‰lý -² -²²'²8²`²ƒ²’²Ÿ²ª²DzÚ²ó²ó² ³ ³³(³2³:³Š ¥É°g°gÈgÊgØgägýghh,h1hGhChShshshŠhŒhŒh£h¥h¥hµh·h·hÇhÇhÎhÎhÖh8i‹HZh@d@dTdidsd‡d�d•d™dŸd¦d©dºdŒàø,Ã+Ã+Ö+Ý+û+û+,,7,7,U,j,v, ,¦,«,Ò,ï, -)-F-c-€-�-º-×-ô-...K.h.….¢.¿.Ü.ù./3/P/m/Š/¤/¾/Ø/ò/ -0 -0 -00�2�< -"”"”6”E”U”X”Z”b”e”m”Ž(ÿnònòxò‚ò¬ò±ò�$ j j%jAj�P¨¸Ë7Ë7Ï7Þ7ã7ï7û7888#8(898P8h8j8‘@ ó:ó:;;;;);0;2;7;D;’X�¢B­B­W­a­e­e­�­°­»­Ù­ê­ì­ì­ô­“,Š‘†Ì†ÌšÌ¬Ì±ÌÂÌÈÌïÌ”x£½¶ï¶ï¿ïÌïÛïìï÷ïð2ð8ð>ðEðXðzðzðŽð˜ð ð©ðÁðÊðÊðßð•8¶À³K³KÏKÜKáK÷KúKL–(¿Åԧԧܧæ§ü§— žÂÛ@Û@é@î@ö@þ@ AA'A,A>ASAiAA•A§A®A®AÄAÑAÑAçAöAöAýAB BBB˜8�§£-£-±-¹-Á-â-ø-..™P:JPxPxhxtx|xƒxŒx’x•x•x©x¶x¼x¿xËxšð8p<ª<ªVªfªmªuª|ª˜ª³ª³ª¹ªÂªËªÍªÖªßªáªáªêªùªûªûª« ««««$«)«)«2«;«@«@«@«I«R«W«W«c«l«q«ˆ«Œ«Œ«¦«¨«¨«¶«º«,¬›XÓåÜÜ -ÜÜ!Ü0Ü<ÜEÜMÜ\ÜxܩܩܻÜÂÜÂÜÔÜÕÜÙÜœÈÝ P8P8l8r8|888ˆ8“8�8§8³8µ8»8Â8Å8È8Ð8Ü8â8ç8í8ð8ò8ý89 9999#9)92929292989@9C9S9�,™ JÚJÚSÚ_ÚgÚlÚqÚž8akVVdnxƒ‹��“Ÿx_ynn1n8nFnFnRn]n�n�n’n”n”n™n™n›n›n›n�n�n�n¦n©n¬n¹n ,Û₈‚ˆ‹ˆ•ˆ–ˆ›ˆ¡4ÒÛërërÿrs s1sDsJsSs¢$(-ª£ª£¸£À£Ò£Ø££<@Kr¤r¤ˆ¤’¤–¤›¤§¤¬¤°¤´¤¾¤¤  -¶ò¶òºòÚòÜò¥t.:³:³J³V³_³p³˜³»³ʳ׳ë³â³ ´ ´&´(´*´0´2´?´B´J´¦h^tе嬵²µ»µ»µĵӵ൶¶"¶$¶6¶6¶6¶G¶T¶T¶b¶§@wƒèœèœìœíœüœ� ���)�.�0�¨<ðûÛ Û ð ß ÿ '¡©€�¹*¸*¸H¸Y¸a¸t¸†¸‘¸œ¸²¸¾¸Ô¸ê¸ò¸ò¸A¹F¹F¹i¹i¹€¹ ¹§¹ɹª˜ìûCûC DDD D D.D3DLDUD`DbDcDcDoDzD|D‹D�D™D£D±D¶DÅDÌDÎDÎDÎDÔD«€›¦á¦á¯á²áÉáÉáàáôáââ,â?âJâ[ârârâ‰â�â»â½âÕâèâèâëâDã¬8—¡@]@]V]_]i]t]}]€]Š]­4<Eà:à:ô:;;; ; ;';®hqÇ,¬,¬J¬Z¬a¬i¬p¬Œ¬�¬¯¬¯¬Ñ¬Ñ¬Ñ¬Ú¬Ü¬Ü¬å¬ç¬ç¬ð¬ò¬ò¬û¬ý¬ý¬­­­­­­­­­'­)­)­2­2­5­:­:­:­=­@­I­c­s­Š­�­Ÿ­¢­¤­§­²­·­·­À­À­Å­Å­Î­Û­à­à­é­ý­®®®®®® ®û®¯ ¢¦�]�]™]¦]«]°`UiQQ3Q>QDQOQQQbQoQuQuQ�Q±0LTTTT*T0TATCTCTHT²(‹‘è\è\ü\]]]]³ \€ÓêÓêÛêæêöêëë5ë5ëJëRëWëWëdëzë†ëŽë–ë¨ëÕëáëôëüëìì ì ì ì&ì&ì8ì=ìDì´°.V»è»èÃèÎèÞèíèùèééJéoétété‰é‘é–é–é½éÅéÍéßé êê+ê3ê8êMêOêOê[ê[êmêtêtê†ê‹ê—êµ8LV"…"…2…5…7…<…E…H…M…U…¶ €„)-·(cc cc!c)c.c¸D0_0_D_V_]_a_d_o_w_‹_Ž_–_¹h²ÈFFh‰�³×ññ*DDWWcºX=Oöëöëììì ì@ìGìTìTìkìtìxì|ì»\r…(�(�>�E�T�[�d�d�~�‰�‘�¥�®�´�¿�¿�Ý�¼PFV(;(;F;L;Q;m;s;x;–;˜;¦;¬;¯;½;½lXoÆÿÆÿçÿêÿøÿøÿ $)).137G¾Œ~�Û>Û>ä>?:?e?´?Á?Ã?Û?Û?*@7@9@Q@Q@a@�@ˆ@�@—@Ä@Ë@Í@Ò@Õ@¿ˆ;Y “ ““““.“;“D“M“V“_“s“s“~“„“†“•“�“¬“µ“¾“Þ“Þ“à“ð“ö“û“À4 šƒšƒ®ƒ½ƒÂƒÐƒÓƒÙƒáƒÁd±ÆÛÛÛ$Û)Û7Û9ÛJÛ`ÛoÛ€Û†Û†Û¡Û©Û±Û¨'2¢2¢D¢O¢T¢b¢n¢z¢ƒ¢Ž¢™¢¤¢©¢·¢Å¢Ó¢ò¢ý¢££4£@£H£S£U£f£q£x£†£•£—£ £ª£Ã W[›ê›êµêÇêÑêÄD8E‹‹Ÿ©»ÂÉÙäòõýÅ<)4:„:„Q„T„Y„\„o„u„x„z„„„Æ´`Éããî%2?Nbrˆ•¨ÉØåîî*K~ƒ�±ÍØø $6Vk~˜­ÇÓåêü&6BUUˆ“ž¸ÆÒÞÞãóDKPpwœœ¿Îøúúÿ!,,:OO`g||���˜Çh - üü,üGüSü_ükütü}ü†ü�ü˜ü¡üªü³ü¼üÅüÎü×üàüàüøüÈ0¿ÇËqËqéqrr(r.r4rSrÉX’¤€6€6Ž6—6£6©6¬6±6·6º6¿6¿6Ì6Ð6Ó6Ó6Ù6ÊLÃYÃYÒYàYàYêYôYZZ%Z+Z,Z2ZËÜ�´ØsØsþstt't't=tEtUtdtdtit‡tŠt�t�t±t¸tÂtÂt×t×títûtu uu2uOIOWOWO\OhOÐ4{„$¦$¦4¦6¦>¦R¦Y¦^¦f¦Ñ<²½(^(^L^P^i^€^Š^”^—^§^Ò8§±°]°]Ô]Ø]ñ]^^^%^ÓLú žûžûºûÆûàûéûöû -üüüÔ`L`¤¤â¤î¤ù¤þ¤ ¥¥&¥,¥=¥A¥E¥K¥N¥U¥`¥`¥l¥Õ Ÿ£226OQÖ #Gþüþüýý$ý2ý2ý:ýSývýxý—ý®ýÍýóýþþ&þ4þLþdþmþmþ†þ�þ©þ·þ¹þÀþÇþÿ×¼\‡»û»û×ûÚûãûìûöûü üüü&ü)ü<ü<üPüRüRüfüfüiülüzü~ü”üšü¡ü¨ü«ü°üÅüÈüÊüÊüßüßüßüñüØ`¹Íó–ó–————&—+—7—?—K—O—W—c—e—e—h—t—Ù ’– ] ])]6];]Ú<¾Éæðæðêðóðúðñ -ñññññÛ\"˜_˜_¨_­_·_¿_È_Ë_Ò_Õ_Ý_ä_ì_Üd\q8�8�P�Y�t�ƒ�˜�ž�¦�É�×�û� ����&�ÝdPVPVeVoVtV{V�VŠV˜V£V¥VµVÁVÞVÞVçVðVöVWÞ<±¼||,|/|8|H|M|a|r|ß|øÂ�Â�ø�ì�‚‚‚"‚3‚7‚;‚E‚J‚Z‚`‚g‚j‚|‚àÔ†·à�à�‘ ‘‘‘/‘9‘D‘F‘Z‘g‘p‘t‘t‘}‘�‘˜‘¬‘²‘ܑ󑒒-’4’9’?’i’’Ÿ’Ÿ’·’·’¹’¹’¹’Ô’é’é’G“á° 13’3’<’W’W’]’]’c’c’c’c’c’c’c’c’h’h’t’z’z’€’…’Ž’Ž’¡’¡’¡’¡’¡’¡’§’§’§’§’©’©’Á’â„u’¸„¸„΄Õ„ã„ý„……&…+…2…>…>…H…M…T…_…m…q…t…w…€…“…ã,‚‚‚‚†‚‹‚¥‚ª‚¬‚ä@›§s7s7�7ˆ7�7™7 7¢7´7¹7Æ7å,„‹š†š†£†¨†°†¶†¶†»†æD -[è[èièqè�è�è’è’è’èŸèŸè«è«èµèç4›¤ëŒëŒôŒ���$�&�&�+�è /3@I@INIbIhIéH%’Þ’Þ§Þ³Þ¶Þ¿ÞËÞÓÞðÞÿÞßßßê$ŽêŽê’ê–ê˜êëDÍÚJˆJˆXˆdˆiˆiˆvˆ{ˆ{ˆ�ˆìhC™s›s›�›�›¨›´›¸›Ô›ï›ï›ï›ï›ï›û›œœœ œ+œ;œEœJœJœSœcœhœhœyœ~œ�œ�œžœ®œ°œ°œ°œÍœÏœÏœìœìœòœþœ -���%�(�4�E�V�X�X�n�p�p�†�†�Œ�˜�¤�«�¯�¿�Â�Î�ß�ñ�ó�ó�ó�ø�<žíxš´CžCž[žjžpžsžŽž©ž©ž³žµžµž¿žÁžÁžÁžÌžÎžÎžÎžÙžÙžÙžÞžðžî Uy®ì®ì·ìÇìÕìùì í í.í@í@íUíWímí…íŒíŒí�í�í›í¦í²í´íÀíËíÛíãíöíïHŒšÂ†Â†Ö†Ý†ï†ò†ò†ù†‡‡‡‡%‡ð8ñûSiSisi~iŒi„iŸi°i°i°i¼iñ@ƒ�’¬’¬ ¬Ȭë¬ø¬­­2­:­@­ò(17Ô©Ô©á©ö©"ª6ªó ëïæñæñðñòòô@&2rÖrÖƒÖšÖ¨Ö´ÖÈÖÕÖÜÖßÖçÖõ$§¬Š‡Š‡“‡›‡¡‡¦‡ö<ÇÒ²Û²ÛÈÛÞÛïÛóÛóÛøÛøÛÜ÷dµ -ØuØuúuþuvvv-v6vFvFvRvavfv‚v…vŠv�vŸvªv±vµv¹vÇvÛvâvìvòvõvw ww0w2w5w5w7wQw]wcwlwxw™w�w©w°w·w½wÀwÎwäwäwäwéwõw xxx x"x(x+x9xOxOxOxWxcx{xxŠx�x”x¥x¥x¬xÂxøÀIŠXŠXžX«X±X¹XÆXÈXÞXæXæXðX YY Y+Y6Y9Y@YEYMYRY_YdYvY}Y£Y¦YÁYÁYÁYÅYÊYØYù4 ( -„ -„„„ „(„+„0„6„úXWWW!W:WFWXWbWrWuW‚W¯W²W¶WáWäWïWúW XX'X5XDXVX_XlX{X‘X˜X©X©XµXÀXÀXÓXÖXæXóXüX YY!Y+Y;YDYTY`Y`Y`YfYmYrYzY|Y¡Yû$_¤«T«T³TÃTÒT×TëTU!U>UFUeUxU”UâUäUèUüXÂÔ:€:€C€S€S€T€Y€Y€c€v€†€Œ€›€ €¯€±€±€ýhW¾å¾åÖåßåååîåöåÿåæ æ ææææ!æ/æ/æ5æ<æ<æRæZæaæhæoæzæ�æ—æ§æ©æ½æåæûæçOç7çmçžç¬ç¶çÓçÖçÚçßçèçñç(èèè9è4èOègèuèèè”èžè¨è½èÆèÝèáèèèêèëèòèòèéþ@ã¢ˆ°ˆ²ˆÔˆáˆáˆåˆëˆÿ0W_Z…Z…h…w…~…Ž…’…•…›…, /// /3/H/Q/`zŽ»n»n×nünooooo,o;oCoOocokowo{o{o�o4W`À;À;Ö;Ø;â;ï;ø;ý;<tIbàqàqîq÷qüqrrr5rCrCr_rxr€rŽrŽršr£r©r©r¯r<�šÚSÚSñSûSTT T&T3T,›¢vïvïï‰ï¯ï¯ï´ï˜\~;$;$C$T$o$~$‹$š$¤$½$Ë$Ý$ì$û$ %% %,%8%D%S%b%t%‡%�%ž%¥%¥%³%¼%X††š¤«ºÓÓäóÿ#P­½ª‡ª‡¿‡Ï‡Õ‡Ú‡Ú‡ä‡è‡í‡í‡õ‡ H¨¶ . .#.&.;.D.[.r.€.�.š.±.Ã.Ê.Ö. -,òùstst�t t«t±tÁt 8<Fª’ª’¾’Î’à’é’ì’ô’ <›¦*‡*‡>‡L‡W‡b‡j‡r‡z‡}‡…‡ <ju‚«‚«–«�«§«°«Å«Ñ«׫Ý«(kB•B•\•Ž•²•µ•À•͕ޕï•÷•–– -– – ––,–/–4–>–D–U–X–]–]–j–q–ƒ–†–‹–’–¤–§–¬–³–Å–È–Ê–Ñ–ã–æ–è–ï–——— — —"—$—*—*—*—*—/—/—6—=—D—J—M—í—8mwbÓbÓlÓtÓ…ÓšÓ¢Ó¥Ó§Ó«ÓPÝíª�ª�¾�Ç�à�ñ�žž3ž=žJžJžLžTžH¾Ìú‡ú‡ˆˆˆˆ&ˆ8ˆ=ˆ=ˆCˆHao<<"<3<C<F<H<U<Y<\<f<l:Qà -à -Î -Ý -ì -  % 3 < K ] | Ž ³ ¼ Ñ Ø Ø í î ò  Ÿãñãñòòò%ò>òBòJò\òzòzòzòzò‡ò�ò•ò¡ò¦ò¦ò­ò³ò¿òÄòËòÒòÙòâòôòó óóóó'ó7ó>óKójó€ó™ó�ó¼óÔóôôôôô ô ô ô ô ô ô ô4ô;ô>ôNôTô\ôbôdôdôkôtôvôvôvôyô{ô{ô‚ô…ô‹ô‹ôŽô¤ô±ô±ô¼ôÐô×ôÝôòôõôõõõõõ!õ*õ2õ2õ2õ=õEõHõóõxÇáè.è.// // /Ì"<0;K(K(](m(�(¡(§(©(©(¯(#0š¢šÔšÔ£Ô©Ô²Ô»ÔÄÔÎÔÓÔ$<£®ÚÔÚÔéÔîÔ Õ Õ$Õ$Õ)Õ)Õ/Õ%8NXò×òר -ØØ*Ø-Ø/Ø7Ø&\õ’»’» »¥»­»´»¹»á»¼¼¼)¼F¼N¼U¼U¼X¼^¼',“šïï,ïFïSïXïkïqï(¼ã3X3X_XeX~X–X�X©XµX¹XÇXæXæXYYYY&Y0Y8YLY]YnYƒYŠY“Y™Y¡Y¡Y¥YÂY)4#+ú+ú4ú9úBúKúQúQúVú*< ÙÙ*Ù=ÙJÙVÙ^ÙzÙŠÙ�Ù�Ù+4ÓÜ8888'8'848<8A8I8,,W^ËHËHÙHÛHíHõHúHI-Dccp~†Žœ¤¬´¼ÆË.^šc c k { � œ ¥ ³ Á Í Þ ó   . N ] p ~ “ ª ³  Ý û &3AMbw‰Žš¦´ÉÛôý$-1/(QWŽÿŽÿ™ÿ­ÿ¼ÿÀÿ00X`..7AGMOOT1@ ;&;&O&]&k&u&†&—&¡&«&µ&»&2ˆ ³M³MÓMÝMàMèMøMøM NN,N6N8NWN\NmN{N†N—N¥N¯N¯N¯N¿N3PÙévúvú”ú§ú³úÍúÞúëúÿúû ûû4$mrzzz$z)z9z5H¾Ì¨^¨^¾^Ã^Ü^ç^ð^ò^þ^___6D&3c3cSÛúÛúôúøúûûûûûû,û;ûJû\ûqû{ûŠûŠû”û:ÔT>Ô>Ô\Ô`ÔcÔtÔ‡Ô‘Ô—Ô›ÔžÔ Ô¦ÔªÔ­Ô³Ô¶ÔÉÔáÔéÔìÔýÔÕÕ"Õ&Õ9Õ<ÕHÕMÕSÕ[ÕnÕˆÕ�Õ“Õ¤Õ¼ÕÃÕÃÕÒÕàÕúÕÖ&Ö&Ö7ÖOÖ\ÖaÖaÖrÖ†Ö�Ö’Ö’Ö£Ö·ÖÎÖÓÖÓÖÙÖêÖþÖ×"×"×(×9×M×l×q×qׂזףרר׹×Í×Ú×ß×ß×ð×ØØØØØØØ$Ø<ØKØMØMØ^ØrØ{Ø{Ø�Ø�؊؊ØÙ;4ÂËÊÊÊÊØÊÝÊèÊëÊïÊõÊ<l 7ÃNÃNáNäNìNOOO O6O@OBOaOfOwO…O�O¡O¯O¹O¹OÇO=ˆ7UËOËOñOõOøOP!P!P4P=PRP[PbPgPqPzP„P‡PŠP�P§PµPÆPàPîPþPþPQ>T3DêÖêÖûÖ×*×6×6×T×a×r×z×z׆גהל×?XÉÛÑwÑwñwþwxx/x5xBxMxTx]xaxmx@X¶È1w1wQw^wcwow�w•w¢w¯w¶w¿wÃwÏwA$ \¡\¡r¡¬¡Ë¡Ù¡B X\éé -éééC õù.ò.ò8òKòPòD áå#˜#˜7˜I˜Q˜E(*0t©t©�©–©»©Ï©F0qy¾Ë¾ËØËÛËÛËäËõËøËÌGHª¸s–s–Ž–«–µ–¼–¼–Û–à–â–â–ì–HD lÚÎÚÎåÎþÎÏÏ%ÏHÏHÏUÏwϘϩÏÔÏäÏõÏ ÐÐÐÐ5ÐMЇЎПбÐÂÐíÐÑÑÑÑÑÑÑ@Ñ+ÑXÑrÑzÑ�ѺÑËÑöÑÒÒÒÒ#Ò2ÒAÒFÒFÒUÒiÒ�Ò—Ò¯Ò¾ÒÕÒõÒõÒõÒ ÓÓ&Ó/Ó7Ó]ÓIXºÌʹʹì¹ð¹ö¹ù¹ººº"º,º/º2º8ºFºJ0 ¨óõóõ öö@öBöBöJöKDÎÎ#Î+Î+Î8ÎJÎRÎWÎcÎiÎkÎkÎpÎLLܡܡì¡ú¡ -¢¢;¢_¢p¢»¢¿¢Ç¢MØ9ʆʆä†ë†ï†ó†þ†‡‡1‡=‡@‡I‡T‡k‡p‡y‡|‡†‡އ‘‡”‡¨‡¿‡LJÞ‡å‡î‡ñ‡ó‡ˆˆˆˆ ˆ#ˆ*ˆ-ˆSˆZˆlˆN<ðû³˜³˜É˜Ë˜Ù˜ö˜ú˜ -™™O �…KìKìeìwì�ìPH -FôFôZô\ôcôqô™ôžôµôºôºô¾ôÆôQ@:FåQåQõQR RR%R,R5RRHâð0020?0O0d0k0t0‘0”0ž0SP¢W¢W¶WØWØWäWïWóWúWX XXXXTpc{b…b…j…v…�…š…¨…¶…Ü…ñ…ö…ý…†††U ÍÑ___+_Vt/»&»&Æ&Õ&ä&ò& '0'S't'…'¨'»'Ì'Õ'â'ù'()(0(0(E(F(J(Wh„šk6k6s6‘6¢6²6¹6Ý6î6777173737F7W7o7q7q7s7X0$,›#›#£#½#Å#Ý#é#ò#ü#Y@ rÕrÕ{ՃՌՠժկջÕÁÕÃÕÃÕÈÕZ4ÈÑSrSrqr�r¤r°r¶r¼rÅrär[,†zSzSƒS¡S³S³S¸S\<R]ó ó   5 T Z \ \ b ]`££«ºÆÚëöÿ   - 4 4 F G K ^TDU#!#!'!>!U!`!k!’!¿!Ê!ñ!ø!ÿ! -""+"2"_8$K;K;T;d;l;y;{;ˆ;ˆ;‹; \ No newline at end of file +† +� +© +° +Á +Î +Ù +à +ñ +û +û +    - A L rLš©‹•‹•§•®•µ•Á•Ê•ä•ï•ô•ý•–"–,–,–A–s8žXžX´XÁXÓXíXûXYYt$/4ÆóÆóÏóàóôuÔ._{{ƒ‹™¬»ÅÑÜêù +&.:BJJUWlxŠžÐáî &(:CCUUcj||ŠŠ�“v4§°SpSpgpyp‚pœp£p¹p¿pÒpw0dl»T»TÃTÙTäTóT UUxPZj˓˓ݓä“í“û“”” ” ”””"”,”yd¦»VVor€€‰”™œ¬·½ÀÃÅÉÕzH<J¶õ¶õÆõÌõ×õàõãõðõùõùõýõöö{$@EFFO]ch|4ÕÞ††”¢ªµÎÓÚà}¬LsŠ{Š{œ{«{±{Å{Ø{ï{||,|C|Z|q|Œ|�|—|�|¡|³|Ì|Ù|ß|ú|þ|} }}!}:}G}M}P}Z}~ö3Ð=Ð=Ø=à=ñ=> +>>>>">&>?>y>‹>Ÿ>Ã>Ì>Õ>Õ>Ú>í>ò>ý>?'?.?`?“?¤?´?Ê?Þ?å?@J@[@k@k@r@„@„@’@’@“@¥@¥@³@·@»@P–¦«o«oÁoÔoæoÿo p pp2p=pCpGpOp€(cc$c.c9cAcFc�0lt^^l{†ŒŽŽ”‚<KV¨x¨x±x»xËxÍxyyyy +yƒ˜òvv|zŠ +„4ŠÓVÑVÑnÑvÑ„Ñ�ѓљџѭÑÂÑÇÑÍÑäÑéÑïÑÒ ÒÒ(Ò-Ò3ÒAÒEÒaÒt҇ҌқҨҸÒÇÒÔÒçÒíÒôÒöÒ Ó#Ó*Ó8ÓJÓJÓ]Ó_ÓrÓtӇӉӜӜӸÓÏÓÕÓÛÓæÓ +Ô…Hôôô,ô5ôAôCôEôTôTôcôeôeôjô†`ÝñÓhÓhêhøhii ii,i7iBiDiIiKiLiLiVi‡(³¹ÛöÛöæöúö ÷ ÷ˆDÚç†ñ†ñ–ñœñ«ñ·ñ¾ñÍñÙñÙñßñ‰8ÛbÛbëbîbóböbc +c cccŠt‹ñ‹ñ›ñµñµñ·ñ·ñ·ñËñÍñÍñÍñÖñçñðñò òòòòòòò$ò‹DMZ+T+T@TNTNTVTlTpTpTtT|TŒ¤6[pŽpŽŠŽ’Ž–ŽžŽªŽ±Ž¸Ž½ŽÒŽãŽçŽçŽôŽûŽ���#�)�,�.�8�=�T�W�Y�`�d�r��81;îÚîÚüÚÛÛÛ)Û-Û-Û3ÛŽ$0uû(û())#)5)D)M)[)i)p){)‡)œ)ª)²)Ç)Ô)é)ö) ****4*I*S*h*v*v*„*�*œ*°*×*æ*õ*+++,+A+V+g+q+ƒ+•+§+¹+ì+ú+,4,K,T,c,~,•,ž,©,°,»,Å,Î,Þ,�,–�“^“^—^¨^¸^½^Ì^�02:“’“’§’²’Ä’Ì’Ï’×’‘¼Kv“d“d¯dÐdâdédódÿdeee%e2eVeeelese„e†eŽe™e¤e³eºe½e¿eÅeËeãeìeìeðe f’,ÑØ®ú®ú¼úÈúßúãúåúùú“P Yˆ`ˆ`¢`¥`«`·`¹`È`Ï`Õ`þ`a2a9a=aUaaa~a‡a‡a‡a”aÍaÙaåaòabb$b7bDbUblbrb¹bËbøbÿbc%c0cLcLcXcZcZcfchchctcvcvc†c‰c‰c•c¡cºcÆcÏcÚcðcþcþcþcd(d/d6dûDûž(âè‹s‹s¡s½sÏsÕsðsŸ %)†ó†ó�ó£ó¨ó H0>¢ß¢ß·ßÃ߯ßÏßÛßãßàààà$à¡  +¾ò¾òÂòÏòÑò¢ä{°hzhz†z�z²z¼zÎzÑzÙzÜzâzåzñz{{{#{.{3{9{K{K{Z{]{g{j{v{ˆ{•{›{¨{³{¸{¾{Ð{Ð{Ð{Ð{Û{Û{é{£ ÑõSLSLrLtL…LŠL˜L¹LÇLÕLàLøLÿLMMMM M!M'M-M0M6M8MAMPMVMVMVM]MnM¤T…–nn’•££·ÇÒØãããçõ¥`p„ÖÖóù&*14>EUYYY]i¦HîüòËòËÌ7ÌEÌPÌTÌXÌ\ÌqÌ{Ì{Ì}̧̋D"/ú‰ú‰ŠŠŠŠ*Š/Š/Š5ЍX{�ƒIƒIœI¬IÄIÐIÜIÜIîIôIôIJ JJJJ©,Úáss)sLs7s\sbsˆsª8x‚ªÅªÅ°Å®Å¾ÅÜÅèÅêÅêÅnÆ«8>H°I°I¾IÄIËIáIáIèIJJ¬<xƒ¶¶-¶;¶B¶F¶I¶M¶T¶x¶ˆ¶­`«¿226M²ËÚéîôö®Lúúú:ú:úGúGúTúTúdúhúhúxúzúzú±ú¯d4ÉÀ@À@Ë@á@è@AA&A3ABAVAnA†A™A¯AºAäAÿABABFB_BtB”B«B»B½BóBJCCCiCzC�C¡C¶CÐCÐC÷C÷CDDYDgDÇD˜D–DæDíDòDEEE5EEEfE¬EyE�ElEÕEFFF/FDFeFoF†FŽFyFâFâFâFçFçFøFG!G9GRGkG†GžG´GÌGÚGåGåGøGH%H:HXH\HZHªH¸HÈHÖHîH II,IBIBI™IjIhI¸IÆIÖIñI J J!JkJãLãLãiãsã‹ã�ã§ã«ãÅãÅãØãáãìãõãä ä ä*ä7ä@äBäHäQäWä|ää—ä§ä¸ä¼äÀäËäËäÏäÏäÏäøä»4ºƒºƒÈƒÊƒÏƒÒƒÕƒÚƒàƒ¼”"vv*vIvUvhvnvv‡v‹v—v¨vµv»v¾vÁvÄvÉvËvÏvÛvìvûvwww +w +www)w½„c€ørørs s,s1s5sHsisssss‰s•sœs¯s´s¸sËsìsösös +t +t tt¾P]mæèæèïèýèýèé+é:éSéoé~é—é³é´é¹é¿L–¥ò€ò€� ��(�<�@�N�c�u�~�ƒ�•�«�ÀˆSqfVfV|V�V�V�V™V¡V©V´V½VÅVÊVÌVÐVßVêVòVúVûVûVWÁÜ›Îããëï(1GZoƒ�Ÿ²¿Òðù+5E[q‰¢¦¨­²»ÍÔÔæìÂ,z�ÆíÆíÊíîîî"îÃ,fmk‹k‹y‹‹‹‹—‹›‹¡‹ÄH´Â‚‚#‚/‚B‚M‚e‚g‚m‚x‚|‚€‚ƒ‚ÅdÃØŠ‚Š‚“‚«‚¶‚҂Ԃꂃƒ)ƒCƒGƒÆ¬޵JJ7J9JSJbJ�J™JžJÍJÔJÖJÖJåJïJúJÿJKKK%K>KEKEKWKcKgKqKÇ€0LcScSSŽS“S™S£S¨S¯S¾SÄSÄSÍSØSêSóSþSTTT T T T!T+TÈ  FóFóPócóhóÉŒ'Fä¢ä¢ô¢ø¢££*£/£2£@£E£d£l£–£š£º£¼£Ä£î£ò£¤¤#¤9¤T¤p¤Œ¤¨¤¯¤·¤Ê´T}Î Î ì ó ý    6 @ U Z d n x v † ¤ ¾ ´ Î Ø ò #7?ELSZarwwïËøµïÞÞážòžŸ ŸŸŸ"Ÿ1Ÿ8Ÿ>ŸPŸPŸcŸsŸzŸ‰ŸœŸ¨Ÿ¿ŸÁŸÙŸÛŸÞŸàŸàŸäŸäŸðŸ÷Ÿ÷ŸûŸ      E [ l ƒ Š � “ « ÌÜú-##+/:HQg{…‘œª¹Ùö+CRVamx‡–¶ÄÓÿ //=DVVddeyÍ4&/SSS$S.SASISSSUSbSÎŒ4SN N W y „ • © Á Ö ë ô ù ù    $ ; ^ n n n � † ‡ Ë Ï8ˆ’~î~îŒî˜îÃîÐîÒîÙîáîãîéîЀ5Ã�Ã�ã�ï�û�ÿ�‘‘&‘.‘4‘H‘W‘c‘o‘s‘v‘x‘Š‘˜‘œ‘¦‘ª‘³‘¹‘Ì‘Ñ$).IIII1I7IÒ,‚‰ÌÌ$Ì7ÌBÌHÌKÌSÌÓ¨ïH•H•b•e•}•ˆ•˜•ª•®•¼•Å•ç•í•í•ù•–––$–(–(–(–+–-–1–1–6–D–R–`–e–g–g–}–ÔLêù¦û¦ûÂûÎûèûóûüüü&üÕ  $nónóróó�óÖX&8ëBôBûBC&CL>LALLLòˆúÛ�Û�ñ���$�$�6�A�W�W�g�i�i�i�z�…�Œ���˜�œ�¤�ª�°�°�³�Á�ó|Ò¿Ò¿ä¿ó¿ö¿À:ÀJÀsÀƒÀ�ÀÀÀÏÀÜÀìÀòÀÁÁÁÁÁÁ,Á2Á5Á™Áô8 òžòžŸ ŸŸ9ŸOŸRŸ]Ÿõ>¸˜¸˜Á˜͘ݘê˜û˜ ™™2™9™L™_™q™y™š™®™±™¹™É™Ú™šš&š[š]šdšuš�šˆš™š§šºšÆšåšöH'5——2—E—^—s—y———‡—‰—µ—÷L \KjKjSj^jpjvj~jˆj«j«j½jÊj×jßjíj(k6knksksk…k’kŸk¤k³kèkïkll l ll*l7l<O<P<s<x<Š<�<²<¶<¿<Ç<Ð<ï<ö<== =.=?=T=_=l=l=s=•=¦=¬=¶=ú8JT¦Û¦Û´ÛËÛÖÛÖÛáÛéÛéÛïÛûDìù{{�™¯ÉÔÔåõ÷"ü$»b»bÄbÍbÓbØbýl?Vèšèšìšýš›'›@›I›T›_›‚›“›�›Ÿ›ª›µ›¾›Ç›Ú›í›þ›œœ +œþ$ôù»�»�Ä�Í�Ó�Ø�ÿ  +æTæTïTüT UDèõæñæñõñúñòòò(ò+ò1ò4%£B£B§B¬B¸BÄBÐBÛBâBäBh-ƒ«,«,Ó,Õ,Þ,ò,õ,ú,þ,-1-4-F-N-U-t-}--ž-§-§-§-¬-â-ì-ö-. +...).3.3.3.T.T.]._._.h.j.j.s.u.u.z.|.|.�.�.�.…. .¶.Á.Ø.á.æ.ð.ü.//'/>/P/T/_/u/…/§/Ä/â/â/â/â/â/ì/õ/ü/|0LÈ×/6;QSdh{�®4–ê–êžê¦ê®ê¶ê¾êÆêÊêÎê,nênêvê~ê†êŽê’ê–êL™¨ÖWÖWäWéWëWúWüW +XXXX X%Xx7*/9@Sll{‘š©°°³½ÓÚÜßááí| +Ðkn¯n¯�¯‘¯¨¯±¯¼¯Ç¯É¯Ü¯ê¯õ¯°° °"°(°,°/°5°9°<°?°R°g°o°r°Š°š°�°£°¦°¹°Î°Ö°Ù°ñ°±±±±±1±1±1±5±7±7±;±=±=±A±C±C±G±G±G±J±L±L±O±T±Z±]±a±c±i±l±„±˜±�±£±¦±«±¾±Ù±Û±ñ±ñ±ñ±ö±ö±ø±ø±ý±²&²&²&²>²D²[²j²y²Ž² ²Å²Ê²Ê²â²³³³³;³=³=³U³q³s³s³‹³§³§³Å³Ñ³Ö³Ö³î³´ +´ +´"´>´C´C´G´_´}´�´ƒ´ƒ´‡´Ÿ´½´Á´Á´ß´ä´ä´ü´µµ µ µ7µNµUµcµsµ—µžµ µ µ®µ¶µßµáµáµùµ¶9¶>¶>¶V¶k¶�¶�¶¥¶Ä¶å¶è¶í¶í¶··&·+·<·<·B·M·b·g·q·�·�···Å·Ë·â·ê·ó·ó·ÿ·¸¸ ¸¸$¸$¸-¸7¸S¸q¸Ž¸�¸£¸¸¸À¸Ì¸Ö¸Ö¸î¸ð¸û¸¹¹5¹5¹:¹:¹p¹~¹‡¹‡¹“¹—¹—¹ ¹¯¹¸¹¸¹Á¹Ç¹ã¹î¹ººº+º-ºIºIºIºYºzº|º|º”º«º°º°ºÈºßºéºîº»»»»'»+»1»:»I»R»R»[»f»~»€»œ»§»Â»Ä»Ä»Í»å»ð»¼¼¼<¼>¼F¼`¼c¼l¼q¼’¼œ¼œ¼·¼Á¼Ì¼è¼û¼½½$½$½-½1½H½€½‹½‹½‹½Ÿ½¨½¬½Ã½û½û½ý½ý½¾#¾+¾+¾4¾8¾O¾‡¾˜¾ž¾µ¾½¾Ê¾Ï¾Ï¾Ø¾Ü¾ó¾+¿<¿E¿J¿J¿U¿Y¿q¿ˆ¿’¿—¿­¿Å¿Å¿ï¿ù¿ù¿ÀÀ-À5À<ÀGÀLÀSÀSÀXÀ‹ÀŸÀ½ÀÔÀÞÀèÀèÀøÀ"Á2ÁDÁPÁTÁnÁ€ÁŒÁ�Á�Á�Á�Á”Á™Á™Á¤Á¨ÁÀÁ×ÁáÁæÁüÁÂÂ>ÂHÂmÂrÂrÂrÂ}Â�™°º¿ÂÕÂÕÂíÂí Ã)ÃFÃMÃXÃ]ÂÈèúÃÂÃÄÃÝÃëÃÄÄÄEÄGÄqÄsÄ�ĚĤĮĵÄÒÄÛÄÛÄÅ Å#Å>Å>Å>ÅCÅHÅ{Å�Å­ÅÄÅÉÅÓÅÝÅ +ÆÆ!Æ8Æ8Æ8Æ8ÆBÆXÆoÆyÆ~Æ~Æ–Æ­Æ·ÆÇÆÇÆãÆ÷ÆúÆ ÇÇÇ3Ç;ÇDÇIÇIÇIÇeÇyÇ|ǎǠǥǥǽÇÔÇÞÇîÇîÇ +ÈÈ!È3È=ÈCÈZÈbÈkÈpÈpÈpȌȠȣȵÈÇÈÌÈÌÈÌÈäÈûÈÉÉÉ:ÉKÉUÉ[ÉrÉzɃɈɈɈɭɾÉÐÉÕÉÕÉêÉêÉêÉÊÊ Ê'ÊdË @%¢Ÿ¢Ÿ¶ŸÄŸÄŸÑŸöŸ      +0EMê×ê×óר ØØ!Ø.Ø3Ø |„Ÿжж§¶©¶·¶·¶Ŷض·#·1·A·d·L·~·ž·³·¸·¸·¸·Ê·Í·Ù· 8Ž˜jÚjÚyÚ‡Ú˜ÚœÚœÚ¡Ú¡Ú§Ú ¨ºà÷÷)÷?÷=÷M÷U÷\÷`÷h÷x÷†÷•÷›÷£÷¯÷µ÷µ÷¼÷À÷À÷Â÷ù4GP²’²’Æ’Ü’ç’ì’ú’““!“ˆTr{{”ž®¶äù +C‰¥ªµ¿ÌÖäêöý O0-5ÓÓ×?ñi @ ³³ÅÐÝåíõý ˜¤Æ‹g‹g£g²gÀgÐgÖgÖgágìgïgôgþg hhh h&h,h/h8h9h9hEhGhShX7‰ÏÏ<ÏBÏIÏYÏ`ÏhÏnÏuϋϙÏ�ϢϨ϶ϹϾÏÁÏÁÏÑÏâÏäÏöÏøÏÐ +ÐÐÐ Ð"Ð"Ð2ÐCÐFÐHÐTÐVÐvÐ{ЂЋБЗОССбÐÂÐÄÐïÐÑÑÑÑ(Ñ(Ñ<Ñ@Ñ@ÑVÑ@¨´+_+_A_c_k_p_ƒ_�_–_™_¡_0³ú³ú¼úÁúÊúÐúÐúÕú,;B¢©¢©±©½©Ë©Ô©Ù©ß©ä66Í6ÍTÍWÍZÍnÍvÍ}͔͖͑͹͹ͼÍÌÍÎÍÎÍÑÍÓÍÓÍÖÍíÍÎÎ'Î1Î9Î9Î9Î;Î;Î@Î_ÎeÎt΄ΘΨΪμÎÌÎÑÎÑÎÝÎÝÎêÎíÎíÎÏ8üÂÝÂÝÑÝÚÝéÝÞ ÞÞÞÞÞô…¾<¦<¦N¦Q¦[¦h¦l¦r¦r¦y¦¦ƒ¦‡¦Ž¦”¦›¦¡¦¨¦®¦µ¦»¦Â¦È¦Ï¦Õ¦Ü¦â¦ï¦õ¦ü¦§ § §§§(§;§=§M§T§_§j§u§€§‹§–§–§ §LWfyyy)y)yGyMy]ycyiyyy{y{y{y¢yhÝóûŽûŽ� �$�4�<�<�J�T�c�k�w�†�’���£�®�±�¹�D<I6Û6ÛJÛfÛtÛ„Û†ÛˆÛ“Û—Û—ÛŸÛP„”ú}ú} ~~~!~3~3~3~5~G~N~~›~œ~¢~0�•[o[oqo„o–oœoŸo§o <alzzˆ™¡¥±¶ºÀ \ÉÜ..2EXkvŠ›½ßú0Kf�œX!TctâØâØðØÙ ÙÙ1Ù7Ù9ÙDÙ_ÙkنٌٌٌٌْÙ"X£µYvYvyv†v‹v—v·v½vÊv×vÞvçvëv÷v#X†˜ËìËìæìîìùìíííí#í4í=íHíHíTíaí$,’™ÆÌÆÌÚÌìÌñÌÍ/Í%ä6ë˜ë˜™™ ™™%™,™/™J™T™Y™`™e™e™v™h™„™›™§™»™Ä™Ì™Ý™Ý™Ý™æ™í™û™ý™šš-š=šEšWš`šqšyš‹šŽšŽšŽšŽšššÝš&  H˜o˜o¸oÇoÓoÞoéoýopp'p8p=pIpNpRp[ptp€p€p›p­pÀpÎpãpép qqq!q%q)qAqOqzqUq‰q”q«q¯q¸q½q½qÒqØq÷qüqüqrrrr&r' Lp«à«à¿àÏàãàðàôàýàá +á á á'áqáLá1á�á�á¢á©á¸áÊáÑáÝáñáââóâ(L2Î2ÎAÎIÎIÎVÎhÎtÎ|΂·Î�Î�Î�ΕÎ)<{†Â…Â…Ð…é…ô…û…%††3†€†*”Õör€r€œ€­€¿€É€Ù€á€å€é€í€õ€ý€��'�,�<�E�Z�`�d�v�+ GKR{R{a{~{„{,ä6 ‰ ‰¾‰ȉÔ‰݉û‰û‰ý‰ŠŠŠŠ)Š<ŠEŠQŠTŠYŠiŠ„Š„ŠšŠœŠœŠ²Š´Š´ŠÀŠÀŠÕŠæŠìŠïŠïŠòŠ÷ŠÿŠ‹‹‹.‹1‹N‹N‹S‹S‹S‹n‹-lªª—ª—¾—Ú—ê—ê—þ—˜ ˜˜˜.˜0˜D˜M˜Q˜`˜s˜y˜€˜�˜’˜�˜Ò˜Þ˜ê˜ò˜ü˜ +™™.™;™L™_™e™¬™¾™Ì™â™ñ™ü™š š š,šPš\šgšnštš{š„š‡š®š.4Yb‚؂؋ؓ؟ذػØÃØÖØÛØ/ ‹¯„=„=ž=¤=¤=³=¿=Æ=Ì=Ì=Ö=ß=ß=å=é=ì=ö=>>>>>$>)>,>/>2>5><><><><><>J>0 öú6ò6ò:òGòIò1¤“øà…à…ö…† +†† †3†E†S†e†j†p†u†Œ†•†­†½†½†ʆ؆ä†ô†‡‡ +‡‡‡"‡"‡&‡*‡9‡I‡M‡r‡r‡�‡ƒ‡‰‡‘‡£‡¸‡‡чÖ‡Ö‡â‡â‡ð‡ù‡ù‡ˆ6ˆ:ˆ=ˆAˆHˆSˆiˆ~ˆ�ˆœˆ§ˆ©ˆ¯ˆ¼ˆˆɈÖˆ܈܈ãˆüˆ‰ ‰‰‰!‰*‰™‰2,Ó‘Ó‘Ü‘÷‘ý‘ý‘’3(éïósós t t+t1t9t4Âʮʮخà®å®ë®¯6¯>¯F¯Q¯V¯l¯y¯‚¯‡¯¶¯½¯ůÓ¯Ú¯°° ° °/°P°X°k°{°‹°›°ª°º°ʰÚ°ô°ù°±±±±#±D±O±^±n±~±ޱ¨±¨±¨±´±º±5(ÄÊ[>[>d>k>‹>’>•>6”ÌíªÊªÊÂÊÏÊÙÊåÊìÊõÊË"Ë(Ë0ËMËSËSËbËiËnËŒË�˘Ë�˻˾˾˾ËÁËÎËÞËáËñË74ž§Ó^Ó^×^è^ø^ ___'_8p !éyéyýy +zzz!z(zDzzzƒzŒz˜z9ƒÁrÆrƖƩƵƵÆÄÆËÆËÆÓÆåÆîÆÇÇ,Ç3Ç3ÇHÇTÇTÇ{Ç~Ç�ǼÇÈÇÞÇôÇöÇÈÈ.ÈMÈlÈxȎȤȩȵÈËÈáÈáÈéÈóÈÿÈÉ+É7ÉMÉcÉmÉuÉ|É’É›ÉsÊ:8u––¤³½ÎÖØØÞ;80:"©"©+©S©v©‚©�©™©ž©<,µ¼£_£_¬_µ_È_Î_Ó_=0 ����,�2�4�:�>,8?îî%39??,xoxo�oŒoŽoŽo“o@\m€ÂÂäèô€€€9€E€N€T€X€f€A€|`|`Œ`“`¦`²`Ù`ã`í`õ`ý`aa#a5aOa[adaraxa~a�aˆa�aBX½Ó_Ó_ß_è_ñ_÷_````#`+`9`D`L`e`w`„`�`�`’`—`¥`¬`±`±`·`¾`Ã`Ï`×`à`à`è`÷`û`aaa$a$a-a4a@aKagagagaoava}a„a‹a’a™a a§a®a´a½aÃaÖaçabbbbC|Kföö-ö;öKöWö]öfömötöyö…ö‰ö“ö“öšö�ö£ö£ö­ö»öÂöÂöÂöÐöD,s&s&‹&–&¼&à&è&EàÊþKKSs‚Œ•¦¶ÉÖé   ) 5 5 B L r … ¤ · · × ä   * / A E M M [ f t { † ” ” ™ ¥ FLRa¥¥¥¥¥*¥-¥4¥8¥;¥?¥M¥T¥Y¥G8GQ¼¤¼¤É¤Ñ¤Ô¤â¤æ¤ô¤ø¤ý¤H0îî÷ü IPáñùùù0ùCùKùÿùJ(MSCCKYktvKœ'J‹c‹c¥cÆcØcßcécõcýcdd d/d8d?dCdCdIdOdgdpdvdd„d„d„dˆd’dL¼W‚ˆmˆm®m±m¿mÚmèmïmümÿmn nn:n:nXnZnZnxnznznŠnŒnŒnœnœnÀnÇnÐnÚnÞn÷nùno'o/o6oxoM<#"¨"¨0¨8¨@¨P¨\¨f¨•¨—¨�¨NH?M#9#9'9>9U9|9©9Ð9×9Þ9é9ù9 +:::OZšÁšÁ®ÁµÁÅÁÌÁÌÁâÁîÁÂ4ÂSÂ_ÂsÂwÂ}‹Â�•£££ÂÂÂáÂõ ÃÃÃ%Ã)Ã/ÃAÃAÃAÃAÃDÃIÃNÃTÃhÃlÃrÃ}Ã�ÇÒÒÒ×Ã�Ã±ÃµÃ»ÃÆÃÊÃÐÃÙÃÙÃÙÃÄP¬Ð÷ú¹ú¹º!º*º*º6ºEºRºVº`ºvºvº†º’º—º—º°º»ºúȺÚºÚºÚºâºðºþº» »»»*»*»<»Q�!A°O°OÝOàOîO÷O÷OP P4P9PLPYP^PbPsP�P¥P©P®P¶PÈP×PÚPQRHnônôwôŒô•ô¡ô£ô¥ô´ô´ôÃôÅôÅôÊôS¸9£�[�[±[´[·[Ô[ø[ÿ[ +\\"\8\@\F\S\c\w\|\‹\ž\¾\Ç\¾\Ù\Û\ä\Û\ö\ø\]ø\]]]%]%]3]D]I]u]œ]œ]¤]§]Ì]Ô]Ú]ç]÷] ^^ ^2^U^a^t^”^¡^”^¯^´^Á^´^Ï^Ô^á^Ô^ï^ô^ô^___(_-_Y_[_€_€_ˆ_‹_™_ž_±_¼_Ë_Ë_Ô_P`T0 cícíqí{í�íŠí‘í•í›íU(�•²€²€¾€Ä€Ê€ã€î€VÀw£ f f5f8fTfffmfwfƒf’f–fšf¢f¬f»fÄfÝfÝfäfêfñfþf ggg g"g(g.gFgOgOgVgqgtg†gW¬ Fëãëãóã÷ãäää-ä9äBäWä€äŒä”ä²ä½äÜäÜäååååå å å å8å8åJåRåmåmåmåå†å†å˜åžå¨åXDƒ��8�8¢8®8Ä8Þ8é8é8ú8 +9 969Y¼E¼¼ؼà¼ê¼ö¼½½<½_½n½™½�½¥½¯½×½ú½¾¾#¾N¾^¾c¾k¾–¾š¾¬¾±¾¾¾ȾÖ¾Ö¾à¾ê¾Z@nz3I3I;I\I`IsI|I€I‚I[ bø3ø344404=4N4Y4b4x4‹4 4´4À4Ø4è4û45$595D5N5s5x5‚5”5­5¼5É5Þ5Ö5ù56666+6+6>6P6c6y6{6{6Ž6–6–6–6¨6¨6±6Ã6Ê6Ê6Ü6â67\4ºÃ»=»=Å=Å=õ= >G>U>Y>]@1=KûKûYû^ûaûsûyû|û~û„û^è¸îˆ“ˆ“¢“º“Ɠ֓è“ì“ï“ø“û“ ” ” ”” ”#”(”%”‚”™”œ”ž”µ”¸”º””Ò”Ò”Û”ê”ø”•• •&•+•+•+•1•E•_D ¼¼&¼N¼q¼~¼‹¼–¼²¼º¼¼` ‰�..<Ka8îøžž ž&ž/ž5ž;žDžGžMžbtRk˜|˜|½|¿|Ø|ø|þ|ø|}}}}4}6}6}F}H}H}X}X}`}ž}c0ƒRƒRŒRžR¬R°R´R´R¹Rdt/k'k'v'…'”'¢'½'à'($(5(X(k(|(…(’(©(Ä(Ù(à(à(õ(ö(ú(e ë›@›@©@®@¶@¾@Ë@Ý@ç@ì@þ@A)A?AUAgAnAnA„A‘A‘A§A¶A¶A½AÄAËAÐAØAf@*Ö*Ö9ÖAÖUÖ_ÖgÖoÖtÖzÖ|Ö|Ö‚ÖgØ&X" " 8 G R d { { Œ ¤ ± Ä РÛ ë  ¡¡,¡9¡9¡9¡J¡v¡}¡†¡Œ¡“¡™¡ž¡¤¡¨¡¯¡º¡À¡ê¡hüi¤ee'e)e8eDePeeejesezeˆe–e¬e¬e¯e´e¾e¾eÈeËeáeùeõef f*fCfLfOfRfWf{f}f™f“fÅfÅfÙfífôfúfýfggggògidV€i€i”i–i¦i´i¾iâijj j.j9jJjOjejmjrj‹j«j«jÌjÎjÎjïjñjñjkkk$k$k,k/k4kJkRkWkpk“kŸkÆkÆkçkékék +lll0l5l5lElElRlUl_lslƒl�l¯l¯l»l¿lËlÙlâlöl +mmmmƒmjðåè0è01 1 11$1/1G1O1Y11Œ1—1©1¾1Ï1Ú12 22<2F2L2O2\2g2y2Ž2¢2ª2Ð2Õ2Û2þ233/3F3]3x3Ž3 3 3Ì3â3å3÷3k<5@b„b„z„‰„�„•„ „µ„¸„½„É„l0 H H$H8H8HLHPHTHm¼ +5›í›í¦íªíÎíÙíèíôíî î7îGîgîgîˆîŠîŠî«î­î­îÎîÐîÐîÜîÜîäîäîðîïïïï.ï5ï5ïGïTï`ïdïƒïn\Qd"“"“2“4“?“D“W“`“e“j“z“‡“‡“�“˜“oŒc‚7777&717<7E7[7o7x7Œ7³7É7ã7ë78 8'838>8V8a8h8s8x8‹8pxˆ¢£ý£ý¿ýÄýÇýÔýÚýÝýåýîýýýþþþþþþþ!þ$þ0þq0 š“š“¨“²“ɓϓѓדrLDS ˜ ˜8˜:˜D˜m˜{˜}˜’˜�˜£˜¸˜sx8ðZðZ[#[*[6[E[K[O[d[r[z[€[ƒ[�[t´7`p‹p‹”‹Ÿ‹§‹¶‹»‹À‹ЋÕ‹ð‹ð‹þ‹Œ ŒŒŒ(Œ.Œ0Œ@Œ@ŒGŒMŒTŒ\ŒjŒpŒrŒrŒ‚Œ„Œ„Œ”ŒùŒu.o£Z£Z½ZËZäZïZ[[%[:[J[Q[b[m[|[‡[£[£[§[²[¾[À[À[À[Æ[Æ[É[Ó[Ó[î[û[û[\\#\)\2\<\L\`\ˆ\™\¤\¤\¶\¶\¶\Ì\Ü\ó\ü\]]]]]]1]v,07:Š:ŠCŠMŠNŠSŠwt ÞÞ+Þ7ÞEÞQÞ]ÞiÞiÞ{Þ�Þ�ÞŽÞšÞ·ÞÓÞÓÞÓÞÓÞÙÞÙÞéÞëÞëÞßx˜9[»C»CËCÕCÚCßCßCîCóC DD D"D#D#D/D:DQ_QnQQˆQœQ´QÄQ×QçQïQR%R0R:R_RdRnR{R�R¦RµRµRÜRëRõRSS%S@SKS`SiSƒS’SžS§S¬SÉSÖSÜSõSñS TTT)T)T)T4T4TETETXTjT}T†T†T™T©T±T±T±T¿TÊTÑTÜTÝTñTõTüTDŸ¬‹‹�©¿Ùääõ3€Lp3]3]<]A]H]H]g]Š]‘] ]¯]´]¶]¸]¸]�ˆ£Á²­²­É­Ì­έÜ­ë­ë­®6®A®P®`®l®n®{®’®�®Ÿ®¥®§®§®§®¬®µ®¹®¼®Æ®‚¬Gn«å«å³å·åÃåÓåÞåíåùåææ0æEænæzæ…æ¤æ¤æËæÍæÍæÍæææèæèæèæçççç5ç5ç5çGçNçNç`çpçƒøQ z>zXzrzvzˆz‘zšz¡zªz³zËzÚzòz{{{%{={P{Y{m{q{w{€{†{‘{“{–{ž{³{È{Ë{Ö{Ü{ä{è{ú{|| ||#|)|;|B|D|”|„lº±º±αױ豲3²B²O²Z²w²в£²£²¹²¹²Ʋزâ²ê²… ¥Éøgøghh h,hEhVh_hthyh�h‹h›h»h»hÒhÔhÔhëhíhíhýhÿhÿhiiiii€i†HZhˆdˆdœd±d»dÏdØdÝdádçdîdñde‡àø,ë%ë%þ%&#&#&A&A&_&_&}&’&ž&È&Î&Ó&ú&'4'Q'n'‹'¨'Å'â'ÿ'(9(V(s(�(­(Ê(ç()!)>)[)x)•)²)Ì)æ)**2*2*2*A*©,ˆ< +Ú“Ú“î“ý“ ”””””%”‰(ÖòÖòàòêòóóŠ$jj-jIj‹, RUU&U(U4U4U@UMUZUbUgUmUoUsUƒU‘U¡U¬U±U±U¸U¸UÃUÃUâUðUûUýUVVV V VVVV$V&V&V2Vð>ðMðZðiðoðvðŽð�ð¤ðÉðÏðÕðÜðïðñ ñññ2ñ;ñ;ñIñ�8¶ÀsKsK�KœK¡K·KºKÏK‘(¿Å¤§¤§¬§¶§Ì§’8‘›ë-ë-ù-. .*.@.I.O.“P:J(x(x@xLxTx[xdxjxmxmx�xŽx”x—x£x”ð8p ª ª&ª6ª=ªEªLªhªƒªƒª‰ª’ª›ª�ª¦ª¯ª±ª±ªºªÉªËªËªÔªÝªâªâªëªôªùªùª« «««««"«'«'«3«<«A«X«\«\«v«x«x«†«Š«ü«•XÚìŠÜŠÜ’ܞܩܸÜÄÜÍÜÕÜäÜÝ1Ý1ÝCÝJÝJÝ\Ý]ÝaÝ–ÈØŒ8Œ8¨8®8¸8»8»8Ä8Ï8Ù8ã8ï8ñ8÷8þ899 999#9)9,9.999?9E9N9N9V9_9e9n9n9n9n9t9|99�9—,™ ªÚªÚ³Ú¿ÚÇÚÌÚÑÚ˜8ak,6@KSUU[™,ÛâZˆZˆcˆmˆnˆsˆš4ÐÙ³r³rÇrÙrèrùr sss›$(-b£b£p£x£Š£�£œ<@K*¤*¤@¤J¤N¤S¤_¤d¤h¤l¤v¤� óó"óBóDóžt2ê²ê²ú²³³ ³H³k³z³‡³›³’³¼³гÖ³سÚ³à³â³ï³ò³ú³Ÿhaw:µ:µ\µbµkµkµtµƒµ�µ¿µʵÒµÔµæµæµæµ÷µ¶¶¶ @x„0�0�4�5�D�M�S�W�[�q�v�x�¡<ðû« « À ¯ Ï ÷ ¢€ ¼Ú·Ú·ø· ¸¸$¸6¸A¸L¸b¸n¸„¸š¸¢¸¢¸ñ¸ö¸ö¸¹¹0¹P¹W¹y¹£€›váváá‚á™á™á°áÄáâáäáüáââ+âBâBâYâmâ‹â�â¥â¸â¸â»âã¤8—¡Ì]Ì]â]ë]õ]^ ^ ^^¥47@;;0;L;N;Y;[;[;c;¦hqÇü«ü«¬*¬1¬9¬@¬\¬`¬¬¬¡¬¡¬¡¬ª¬¬¬¬¬µ¬·¬·¬À¬Â¬Â¬Ë¬Í¬Í¬Ö¬Ø¬Ø¬á¬ã¬ã¬ì¬î¬î¬÷¬ù¬ù¬­­­ +­ +­ +­ ­­­3­C­Z­m­o­r­t­w­‚­‡­‡­�­�­•­•­ž­«­°­°­¹­Í­Ð­Õ­Õ­Þ­Þ­ì­ð­Ë®§ ¢¦^^%^2^7^¨`UiÓPÓPóPþPQQQ"Q/Q5Q5QAQ©0[cƒTƒTŒTšT T±T³T³T¸Tª(‹‘t]t]ˆ]“]œ]Ÿ]§]« \€ëë#ë.ë>ëMëYë}ë}ë’ëšëŸëŸë¬ëÂëÎëÖëÞëðëì)ì<ìDìIìIìUìUìgìnìnì€ì…ìŒì¬°.Véé éé&é5éAéeéeé’é·é¼é¼éÑéÙéÞéÞéê êê'êTê`êsê{ê€ê•ê—ê—ê£ê£êµê¼ê¼êÎêÓêßê­8LVú„ú„ +… ………… …%…-…® €„ÞÞâñõ¯D¼_¼_Ð_â_é_í_ð_û_```"`°h²È0GQe{Ÿ¹¹Ïò    +±X=OÆëÆëÐëÒëçëïëìì$ì$ì;ìDìHìLì²\r…h�h�~�…�”�›�¤�¤�¾�É�Ñ�å�î�ô�ÿ�ÿ�‘³� )55=5e5�5µ5Ã56I6Œ6Ž6œ6ª6¸6¸6Ò6ì6þ67#7<7N7^7s7Œ7“7š7¶7Ò7Þ7´PAQd;d;‚;ˆ;�;©;¯;´;Ò;Ô;â;è;ë;ù;µlXoNNor€€Œ“˜›¡¤¬±±¶¹»¿Ï¶ˆ;YÛ’Û’ä’î’î’þ’ “““&“/“C“C“N“T“V“e“m“|“…“Ž“®“®“°“À“Ɠ˓· D } }¨}´}Ü}ð}ô}~~~,~q~q~�~º~Ä~Ó~Ñ~&&+00?d�¯Çâ뀀€€€€€€%€1€1€5€:€C€U€\€j€y€±€º€Ì€Ì€Ò€-ƒ¸4 rƒrƒ†ƒ•ƒšƒ¨ƒ«ƒ±ƒ¹ƒ¹T¼ÍºÛºÛÐÛÜÛÞÛçÛöÛÜ Ü Ü(Ü0Ü8ܺ¨'ê¡ê¡ü¡¢ ¢¢&¢2¢;¢F¢Q¢\¢a¢o¢}¢‹¢ª¢µ¢¼¢Тì¢ø¢£ £ ££)£0£>£M£O£X£b£» W[ãêãêýêëë¼D8E;;OYkry‰”¢¥­½<)4„„)„,„1„4„G„M„P„R„\„¾8¡«ÒÚÒÚÜÚðÚòÚÛÛÛ&Û+Û¿´`É““ž¿ÆÕâïþ"8EXyˆ•žž·Úû.3Ma}ˆ¨±¹ÂÔæ.H]wƒ•š¬¾Öæò8CNhv‚ŽŽ“£±Êôû 'LLo~¨ªª¯ÊÑÜÜêÿÿ,,==@HÀh + ¦ü¦ü´üÏüÛüçüóüüüýýý ý)ý2ý;ýDýMýVý_ýhýhý€ýÁ0½Å“q“q±qÍqäqðqöqüqrÂX�Ÿ¼6¼6Ê6Ó6ß6å6è6í6ó6ö6û6û67 7777ÃL-3Z3ZBZPZPZZZdZ�ZŒZ•Z›ZœZ¢ZÄÜ�´ t tFtNtZtotot…t�t�t¬t¬t±tÏtÒt×tåtùtu +u +u u u5uCuIuQu\uzu„u‡uŠu�u�u³u½uÀuÃuËuÙuïuùuüuüuvvvÅô¼õ@;@;H;L;T;e;t;~;Š;Å;×;é;é;í;ü;<<!<%<4<Q<V<V<l<t<‡<–<»<È<Ð<Õ<è<÷<=)=4=J=`={=‚=”=”=¢=¢=£=µ=µ=Ã=Ç=Ë=Æ`*>ã7ã7888,83838I8I8W8_8m8u8u8 8Ë8ö8999Ç8AKʄʄڄ݄߄ä„ç„ê„ï„÷„È8~ˆöö "%-ÉD�Žj€j€n€t€z€€€†€Œ€’€˜€ž€¤€ª€¬€ÊhÊ øJøJKK,K;KEKNK_KwK�KŸK²KºKÛKðKLL5L:LDLULgL~L~L¢LÀLÊLÊLéLüLMM#M3MQM‘MdMlMWM·MÐMØMØMòMN%N/NBNJN5N•N•N•NËNËNÜNÜNïNO OO4OGOOOOO]OfOqOO†O‘OŸOŸO¤O°OË4{„ô¥ô¥¦¦¦"¦)¦.¦6¦Ì<²½´^´^Ø^Ü^õ^ __ _#_3_Í8§±<^<^`^d^}^”^ž^¡^±^ÎLú &ü&üBüNühüqü~ü’ü˜ü¤üÏ`L`z¤z¤š¤¦¤±¤¶¤ĤϤÞ¤ä¤õ¤ù¤ý¤¥¥ ¥¥¥$¥Ð Ÿ£ò~ò~ö~Ñ #G†ý†ý›ý¢ý¬ýºýºýÂýÛýþýþ þ6þUþ{þšþ¤þ®þ¼þÔþìþõþõþÿÿ1ÿ?ÿAÿHÿOÿˆÿÒ¼\‡kükü‡üŠü“üœü¦ü¸ü»ü¾üÃüÖüÙüìüìüýýýýýýý*ý.ýDýJýQýXý[ý`ýuýxýzýzý�ý�ý�ý¡ýÓ`¹ÍÖÖߖâ–ç–í–ö–û–——— —'—3—5—5—8—D—Ô ’–¬]¬]µ]Â]Ç]Õ<ÎÙNñNñRñ[ñbñkñrñ{ñ{ñ‚ñ„ñÖ\"$`$`4`9`C`K`T`W`^`a`i`p`x`×d\qx�x���™�´�Ã�Ø�Þ�æ� ��;�K�Q�Z�Z�f�Ød˜V˜V­V·V¼VÃVÉVÒVàVëVíVýV W&W&W/W8W>WHWÙ<±¼ð{ð{||| |%|9|J|Ú|÷z�z�°�¤�À�Æ�Õ�Ú�ë�ï�ó�ý�‚‚‚ ‚"‚4‚ÛÔ†· ‘ ‘F‘I‘R‘[‘o‘y‘„‘†‘š‘§‘°‘´‘´‘½‘ϑؑì‘ò‘’3’T’T’m’t’y’’©’¿’ß’ß’÷’÷’ù’ù’ù’“)“)“‡“ܰ 1’’ ’'’'’-’-’3’3’3’3’3’3’3’3’8’8’D’J’J’P’U’^’^’q’q’q’q’q’q’w’w’w’w’y’y’‘’Ý`\p›D›DŸD¶DÆDÖDéDðDEE'E8EIEZE{EœE³E¾EÉEFÞ„u’…………+…E…Z…`…n…s…z…†…†…�…•…œ…§…µ…¹…¼…¿…È…Û…ß,:‚:‚>‚C‚]‚b‚d‚à@›§›1›1©1°1·1Á1È1Ê1Ü1á1î1á,„‹r†r†{†€†ˆ†Ž†Ž†“†âD -£è£è±è¹èÕèÕèÚèÚèÚèçèçèóèóèýèã4›¤ÃŒÃŒÌŒÚŒîŒöŒüŒþŒþŒ�ä /38I8IFIZI`IåH!/ßß/ß;ß>ßGßSß[ßx߇ß�ß�ßœßæ$^ê^êbêfêhêçDÍÚ"ˆ"ˆ0ˆ<ˆAˆAˆNˆSˆSˆYˆèx]wãmãmùmnnnn%nWnWnZn\n\nanancncncnenenennnqntn�néhC™C›C›]›_›x›„›ˆ›¤›¿›¿›¿›¿›¿›Ë›×›Þ›ì›ð›û› œœœœ#œ3œ8œ8œIœNœQœ]œnœ~œ€œ€œ€œ�œŸœŸœ¼œ¼œÂœÎœÚœáœåœõœøœ��&�(�(�>�@�@�V�V�\�h�t�{����’�ž�¯�Á�Ã�Ã�Ã�È� žêxš´žž+ž:ž@žCž^žyžyžƒž…ž…ž�ž‘ž‘ž‘žœžžžžžžž©ž©ž©ž®žÀžë¨r˜WW W8WMWTW_WeWeWhWoWzW~WƒW‰W–WœWŸW¡W¤W§W§W¬W»W¾WÐWìD/<^ë^ëgë|ëˆë“ëœëªëµë½ëÂëí Uy~ì~ì‡ì—ì¥ìÉìÛìÝìþìíí%í'í=íUí\í\í]í]íkíví‚í„í�í›í«í³íÆíîHŒšš†š†®†µ†Ç†Ê†Ê†Ñ†ë†î†ó†õ†ý†ï8òü[i[i{i†i”iŒi§i¸i¸i¸iÄið@ƒ�J¬J¬X¬€¬£¬°¬½¬Ȭê¬ò¬ø¬ñ(17¤©¤©±©Æ©ò©ªò ûÿNòNòXòkòpòó@&2ÒÖÒÖãÖîÖüÖ××)×0×3×;×ô$§¬b‡b‡k‡s‡y‡~‡õ<ÎÙ:Ü:ÜPÜfÜwÜ{Ü{܀܀܈Üö,«²ÞïÞïâï ð&ð&ð:ð÷dµ + v vBvFvNv_v_vuv~vŽvŽvšv©v®vÊvÍvÒv×vçvòvùvývww#w*w4w:w=wKwQwawxwzw}w}ww™w¥w«w´wÀwáwåwñwøwÿwxxx,x,x,x1x=xUxYxdxgxjxpxsx�x—x—x—xŸx«xÃxÇxÒxÕxÜxíxíxôx +yøÄJYY"Y/Y5Y=YJYLYbYjYjYtY�Y›Y¤Y¯YºY½YÄYÉYÑYÖYãYèYúYZ'Z*ZEZEZEZIZNZeZù4 (âƒâƒðƒòƒ÷ƒ„„„„úXHWHWcWiW‚WŽW WªWºW½WÊW÷WúWþW)X,X7XBXTX\XoX}XŒXžX§X´XÃXÙXàXñXñXýXYYYY.Y;YDYTYVYiYsYƒYŒYœY¨Y¨Y¨Y®YµYºYÂYÄYéYû$n³UU#U3UBUGU[UxU‘U®U¶UÕUèUVRVTVXVü,æíS4S4W4p4w4y4ýXÂÔúú€€€€€€#€6€F€L€[€`€o€q€q€þhWŽåŽå¦å¯åµå¾åÆåÏå×åÜåÜåäåéåéåñåÿåÿåæ æ æ"æ*æ1æ8æ?æJæQægæwæyæ�æµæËæØæ çç=çnç|ç†ç£ç¦çªç¯ç¸çÁçøçéçäç èè è7èEèOèOèdènèxè�è–è­è±è¸èºè»èÂèÂèÒèÿ@ãïzˆzˆˆˆŠˆ¬ˆ¹ˆ¹ˆ½ˆÃˆ0W_2…2…@…O…V…f…j…m…s…, ~/~/�/›/®/Ã/Ì/`xŒƒnƒnŸnÄnÉnØnànänänôno oo+o5oAoEoEoYo4R[ü;ü;<<<+<4<9<C<tIb(r(r6r?rDr]rarfr}r‹r‹r§rÀrÈrÖrÖrârërñrñr÷r,›¢FïFïOïYïïï„ï˜\~ë$ë$ó$% %.%;%J%T%m%{%�%œ%«%½%Â%Ð%Ü%è%ô%&&$&7&@&N&U&U&c&l&XNNbls‚››¬»ÇÜÞáãããëP­½‚‡‚‡—‡§‡­‡²‡²‡¼‡À‡Å‡Å‡Í‡ D¦³²�²�¾�Õ�à�æ�ì�ò�‚‚‚‚ +HœªS.S.k.n.ƒ.Œ.£.º.È.Ø.â.ù. /// ,ð÷;t;tUthtstyt‰t 8<Fb’b’v’†’˜’¡’¤’¬’ <›¦‡‡‡$‡/‡:‡B‡J‡R‡U‡]‡<ju:«:«N«U«_«h«}«‰«�«•«(kú”ú”•F•j•m•x•…•–•§•¯•½•¿••ŕŕҕä•ç•ì•ö•ü• ––––"–)–;–>–C–J–\–_–d–k–}–€–‚–‰–›–ž– –§–¹–¼–¾–Å–×–Ú–Ü–â–â–â–â–ç–ç–î–õ–ü–——¥—8r|ÂÓÂÓÌÓÔÓåÓúÓÔÔÔ ÔPÝíb�b�v��˜�©�Î�Ñ�ë�õ�žžž žH¾ÌÒ‡Ò‡à‡ì‡ñ‡ñ‡þ‡ˆˆˆˆH\jD<D<^<o<<‚<„<‘<•<˜<¢<H©+ò+òLòRòYòoò†òŠò’ò¤òÂòÂòÂòÂòÉòÓòÙòáòíòòòòòùòÿò óóóó%ó)ó2óDóVó[ó^ófóuó‡ó—óžóºóÙóñó +ôô-ôEôyôyô€ô„ô�ô“ô˜ô˜ô˜ô˜ô˜ô˜ô˜ô¬ô³ô·ôºôÊôÐôØôÞôàôàôçôëôôôöôöôöôùôûôûôõõ õõõõõ+õ8õ8õCõWõ^õeõzõ~õŸõŸõ¤õ¤õ¤õ«õ¯õ¸õÀõÀõÀõËõÓõÖõ�öx»Õ0/0/L/O/T/_/g/„/�/–/�/Å/Å/Í/ó/þ/00 070B0G0G0K0Z0,£ª†ï†ï�ïšïÅïÅïÚïœ`ƒz…z…•…œ…§…­…°…°…·…½…Ñ…Ö…Ù…Þ…ç…ç…ç…ë…õ…† †!†,†B†F†H†]†a†a†a†k†ŒkФ<¤<Â<Å<Ý<Ý<ß<ð<ý<==%=(=3=7=7=<=W=Z=e=i=i=r=u=ƒ=d)T¨T¨|¨„¨ž¨©¨¬¨²¨º¨Î¨Þ¨ë¨í¨û¨©©,©.©.©>©�Wwœœœ œ'œ-œFœkœœœ‘œ˜œ°œÉœâœôœøœ����'�'�+� UYöÛöÛ +ÜÜ!Ü€óâóâã ã7ãIã^ãdãiãoãrã€ãŒã�ã’ãžã£ã¬ã±ã¸ãÑãÑãçã@v‚š«š«£«Ë«î«û«¬¬6¬>¬C¬Ìh—ÖöÖöñöûö ÷÷÷÷&÷,÷0÷3÷5÷<÷C÷M÷Y÷b÷v÷Ž÷«÷›÷À÷À÷Î÷ö÷ø÷ø ø#ø/ø7ø9øSønøzøŠøÀø ì¥Ü���%�-�<�M�O�f�x�t�‡�—���£�ª�³�Ñ�Í�à�ð�ŽŽŽ Ž&ŽFŽ\ŽiŽpŽ{ŽŽ„Ž�ŽšŽ Ž£Ž©Ž¸ŽÉŽÎŽÚŽåŽ÷Ž  *.®ó®ó²ó¿óÁó!L&5HNHNRNYNdNpNwNwN}N„N”N–N�N¢N¦N",z�ÖËÖËêËüËÌÌÌ#0Ÿ§úÔúÔÕ ÕÕÕ$Õ.Õ3Õ$<¨³:Õ:ÕIÕNÕiÕ€Õ„Õ„Õ‰Õ‰Õ�Õ%8NX:Ø:ØJØRØfØrØuØwØØ&\ø B»B»P»U»]»d»i»‘»´»Á»λÙ»ö»þ»¼¼¼¼',“šîîîîüîï#ï(ï;ïAï(¼ò£X£XÏXÕXîXY YY%Y)Y7YVYVYuYY‡YŽY–Y Y¨Y¼YÍYÞYóYúYZ ZZZZ2Z)4#ÛúÛúäúéúòúûúûûû*< æØæØúØ ÙÙ&Ù.ÙJÙZÙ]ÙmÙ+4Î×D8D8X8Z8c8c8p8x8}8…8,,W^‹H‹H™H›H­HµHºHÀH-D .6>LT\dlv{.^š   + = L U c q } Ž £ ¸ Ï Þ þ   .CZcr�«ÂÖãñý'9>JVdy‹¤­¸¿ÊÔÝá/(QW!5DH00X`ööÿ 1@ ë&ë&ÿ& ''%'6'G'Q'['e'k'2ˆ sMsM“M�M M¨M¸M¸MÌMÖMìMöMøMNN-N;NFNWNeNoNoNoNN3PÙéþúþúû/û;ûUûfûsû‡ûŽû”û£û4$mrèyèyìyüyzz5H¾Ì4_4_J_O_h_s_|_~_Š_�_�_š_6D&KcKcTcbcbcdcjcucuc„c…cŠc7(¤ª!&028D.;NõNõ\õjõjõrõ‘õ«õ«õ¯õµõ9d>S‹û‹û¤û¨û´û´ûÀûÀûÍûÍûÜûëûúû ü!ü+ü:ü:üDü:ÔTÔÔ,Ô0Ô3ÔDÔWÔaÔgÔkÔnÔpÔvÔzÔ}ÔƒÔ†Ô™Ô±Ô¹Ô¼ÔÍÔáÔèÔòÔöÔ Õ ÕÕÕ#Õ+Õ>ÕXÕ`ÕcÕtՌՓՓբհÕÊÕ×ÕöÕöÕÖ Ö,Ö1Ö1ÖBÖVÖ]ÖbÖbÖsÖ‡ÖžÖ£Ö£Ö©ÖºÖÎÖíÖòÖòÖøÖ ××<×A×A×R×f×s×x×x׉×�תׯׯ×À×Ô×á×ã×ã×ã×ã×ã×ô× ØØØØ.ØBØKØKØQØQØZØZØãØ;4ÂËzÊzʈÊ�ʘʛʟʥÊ<l 7ƒNƒN¡N¤N¬NÀNÀNÕNßNöNOO!O&O7OEOPOaOoOyOyO‡O=ˆ7U‹O‹O±OµO¸OÈOáOáOôOýOPP"P'P1P:PDPGPJPOPgPuP†P P®P¾P¾PÐP>l:Qs s ~ � œ · É Õ ã ì û  , > c l � ˆ ˆ � ž ¢ ?T3DB×B×S×h×vׂׂנ׭׾ׯׯ×Ò×Þ×à×è×@XÉÛ™w™w¹wÆwËw×w÷wýw +xxx%x)x5xAX¶Èùvùvw&w+w7wWw]wjwww~w‡w‹w—wB$ ,¡,¡B¡|¡›¡©¡C X\ÖèÖèÚèãèåèD  –ò–ò ò³ò¸òE áåó—󗘘!˜F(*0D©D©Q©f©‹©Ÿ©G0qyŽËŽË¨Ë«Ë«Ë´ËÅËÈËÐËHHª¸C–C–^–{–…–Œ–Œ–«–°–²–²–¼–IX qšÎšÎ¥Î¾ÎÅÎØÎåÎÏÏÏ7ÏXÏiϔϤϵÏÉÏÐÏÕÏÕÏõÏ ÐGÐNÐXÐqЂДХÐÐÐåÐñÐøÐ Ñ Ñ ÑÑÑ4Ñ ÑLÑfÑnуѮѿÑêÑüÑ Ò&Ò+Ò+Ò:ÒIÒXÒ]Ò]ÒlÒ€Ò¦Ò®ÒÆÒÕÒìÒ Ó Ó Ó$Ó0Ó=ÓFÓNÓ½ÓJ`AU   1 9 9 A P \ w € ‡ Œ � ® À Ä É Ë KX½Ïz¹z¹œ¹ ¹¦¹©¹´¹´¹ŹÒ¹ܹß¹â¹è¹ö¹L0ª²ƒöƒö™ö¥öÐöÒöÒöÚöMDÚÍÚÍãÍëÍëÍøÍ +ÎÎÎ#Î)Î+Î+Î0ÎNL¬¡¬¡¼¡Ê¡Ú¡à¡ ¢/¢@¢‹¢�¢—¢OØ9‚†‚†œ†£†§†«†¶†džÕ†é†õ†ø†‡ ‡#‡(‡1‡4‡>‡F‡I‡L‡`‡w‡‡–‡�‡¦‡©‡«‡»‡¾‡À‡LJׇÛ‡â‡å‡ ˆˆ$ˆP<ðûƒ˜ƒ˜™˜›˜©˜Æ˜Ê˜Ú˜ç˜Q �…“ì“ì­ì¿ìÉìRH -ÎôÎôâôäôëôùô!õ&õ=õBõBõFõNõS@:FÝQÝQíQúQRRR$R-RTHÖä`0`0z0‡0—0¬0³0¼0Ù0Ü0æ0UP&X&X:X\X\XhXsXwX~X‰X�X•X–XžXVpbz……"….…G…R…`…n…”…©…®…µ…º…º…¼…W ÍÑœ_œ_¥_·_Xh„š“0“0›0¹0Ê0Ú0á011)101A1Y1[1[1n11—1™1™1›1Y0$,ÃÃËåí$Z@ ÒÕÒÕÛÕãÕìÕÖ +ÖÖÖ!Ö#Ö#Ö(Ö[4ÆÏrr9rUrlrxr~r„r�r¬r\,ÇÎ~T~T‡T‘T¥T·T¼T]<NY:::9:J:Z:k:z:”:¬:®:°:^`S S [ j v Š › ¦ ¯ · ¹ Ë Ý ä ä ö ÷ û  \ No newline at end of file diff --git a/Kernel/Kernel.PRJ b/Kernel/Kernel.PRJ index 20beca7..6525633 100644 --- a/Kernel/Kernel.PRJ +++ b/Kernel/Kernel.PRJ @@ -50,7 +50,7 @@ #include "SerialDev/MakeSerialDev" #include "QSort" #include "KTask" -#include "SrvCmd" +#include "Job" #include "PCIBIOS" #include "MultiProc" #include "EdLite" diff --git a/Kernel/KernelA.HH b/Kernel/KernelA.HH index d82bcc5..0f57bae 100644 --- a/Kernel/KernelA.HH +++ b/Kernel/KernelA.HH @@ -13,7 +13,7 @@ extern class CHashClass; extern class CHashFun; extern class CHeapCtrl; extern class CIntermediateCode; -extern class CSrvCtrl; +extern class CJobCtrl; extern class CTask; #define NULL 0 @@ -355,7 +355,6 @@ class CSysLimitBase #help_index "Memory/Info" #define MEM_NUM_E820_ENTRIES 48 -#define MEM_E820_ENTRY_SIZE 20 class CMemE820 { U8 *base; @@ -402,7 +401,7 @@ class CPatchTableAbsAddr #define IET_IMM_U32 9 #define IET_REL_I64 10 #define IET_IMM_I64 11 -#define IEF_IMM_NOT_REL 1 +#define IEF_IMM_NOT_REL 1 //reserved #define IET_REL32_EXPORT 16 #define IET_IMM32_EXPORT 17 @@ -417,7 +416,7 @@ class CPatchTableAbsAddr #help_index "Boot" class CKernel -{//Must match $LK,"OSStartUp",A="FF:::/Kernel/KStart16.HC,SYS_BOOT_BASE"$ +{//Must match $LK,"OSStartUp",A="FF:::/Kernel/KStart16.HC,MEM_BOOT_BASE"$ CBinFile h; U32 jmp, boot_src, @@ -428,10 +427,12 @@ class CKernel U0 start; U32 boot_base; - U16 sys_mem_E801[2]; - CMemE820 sys_mem_E820[MEM_NUM_E820_ENTRIES]; + U16 mem_E801[2]; + CMemE820 mem_E820[MEM_NUM_E820_ENTRIES]; + U64 mem_physical_space; CSysLimitBase sys_gdt_ptr; U16 sys_pci_busses; + ;$$=($$+15)&-16; CGDT sys_gdt; }; @@ -440,39 +441,41 @@ class CKernel #define RLf_VGA 1 #define RLf_32BIT 2 #define RLf_PATCHED 3 -#define RLf_64BIT 4 -#define RLf_BOOT_HEAP 5 -#define RLf_FULL_HEAP 6 -#define RLf_RAW 7 -#define RLf_INTERRUPTS 8 -#define RLf_BLKDEV 9 -#define RLf_MP 10 -#define RLf_COMPILER 11 -#define RLf_DOC 12 -#define RLf_WINMGR 13 -#define RLf_REGISTRY 14 -#define RLf_HOME 15 -#define RLf_AUTO_COMPLETE 16 -#define RLf_ADAM_SERVER 17 +#define RLf_16MEG_SYS_CODE_BP 4 +#define RLf_64BIT 5 +#define RLf_16MEG_ADAM_HEAP_CTRL 6 +#define RLf_FULL_HEAPS 7 +#define RLf_RAW 8 +#define RLf_INTERRUPTS 9 +#define RLf_BLKDEV 10 +#define RLf_MP 11 +#define RLf_COMPILER 12 +#define RLf_DOC 13 +#define RLf_WINMGR 14 +#define RLf_REGISTRY 15 +#define RLf_HOME 16 +#define RLf_AUTO_COMPLETE 17 +#define RLf_ADAM_SERVER 18 #define RLF_16BIT 0x00001 #define RLF_VGA 0x00002 #define RLF_32BIT 0x00004 #define RLF_PATCHED 0x00008 -#define RLF_64BIT 0x00010 -#define RLF_BOOT_HEAP 0x00020 -#define RLF_FULL_HEAP 0x00040 -#define RLF_RAW 0x00080 -#define RLF_INTERRUPTS 0x00100 -#define RLF_BLKDEV 0x00200 -#define RLF_MP 0x00400 -#define RLF_COMPILER 0x00800 -#define RLF_DOC 0x01000 -#define RLF_WINMGR 0x02000 -#define RLF_REGISTRY 0x04000 -#define RLF_HOME 0x08000 -#define RLF_AUTO_COMPLETE 0x10000 -#define RLF_ADAM_SERVER 0x20000 +#define RLF_16MEG_SYS_CODE_BP 0x00010 +#define RLF_64BIT 0x00020 +#define RLF_16MEG_ADAM_HEAP_CTRL 0x00040 +#define RLF_FULL_HEAPS 0x00050 +#define RLF_RAW 0x00100 +#define RLF_INTERRUPTS 0x00200 +#define RLF_BLKDEV 0x00400 +#define RLF_MP 0x00800 +#define RLF_COMPILER 0x01000 +#define RLF_DOC 0x02000 +#define RLF_WINMGR 0x04000 +#define RLF_REGISTRY 0x08000 +#define RLF_HOME 0x10000 +#define RLF_AUTO_COMPLETE 0x20000 +#define RLF_ADAM_SERVER 0x40000 #help_index "Processor" #define LAPIC_BASE 0xFEE00000 @@ -582,62 +585,48 @@ class CRAXRBCRCXRDX #help_index "Processor" #define DFT_CACHE_LINE_WIDTH 128 -#define SEMA_STRUCT_SIZE DFT_CACHE_LINE_WIDTH //Semaphores class CSema -{//I read you're supposed to use one cache line. -//I don't know why. Might be silly. - Bool val; - U8 pad[SEMA_STRUCT_SIZE-sizeof(Bool)]; +{ + Bool val,pad[DFT_CACHE_LINE_WIDTH-1]; }; -#define SYS_SEMA_DEBUG 0 -#define SYS_SEMA_RECORD_MACRO 1 -#define SYS_SEMA_SYS_TIMER 2 -#define SYS_SEMA_SYS_DATE 3 -#define SYS_SEMA_DBG_MODE 4 -#define SYS_SEMA_SND 5 -#define SYS_SEMA_HEAPLOG_ACTIVE 6 -#define SYS_SEMA_HEAPLOG_LOCK 7 -#define SYS_SEMA_REFRESH_IN_PROGRESS 8 -#define SYS_SEMA_FLUSH_VGA_IMAGE 9 -#define SYS_SEMA_SINGLE_USER 10 -#define SYS_SEMA_DSK_CACHE 11 -#define SYS_SEMA_FAR_CALL32 12 -#define SYS_SEMA_DEV_MEM 13 -#define SYS_SEMA_VGA 14 -#define SYS_SEMA_UPDATE_WIN_Z_BUF 15 -#define SYS_SEMA_TT 16 -#define SYS_SEMA_MUTE 17 -#define SYS_SEMA_FORCE_WINMGR 18 -#define SYS_SEMA_JUST_PUMP_MSGS 19 -#define SYS_SEMA_TMBEAT 20 -#define SYS_SEMA_FIX 21 -#define NUM_SYS_SEMAS 22 +#define SEMA_DEBUG 0 +#define SEMA_RECORD_MACRO 1 +#define SEMA_SYS_TIMER 2 +#define SEMA_SYS_DATE 3 +#define SEMA_DBG_MODE 4 +#define SEMA_SND 5 +#define SEMA_HEAPLOG_ACTIVE 6 +#define SEMA_HEAPLOG_LOCK 7 +#define SEMA_REFRESH_IN_PROGRESS 8 +#define SEMA_FLUSH_VGA_IMAGE 9 +#define SEMA_SINGLE_USER 10 +#define SEMA_DSK_CACHE 11 +#define SEMA_FAR_CALL32 12 +#define SEMA_DEV_MEM 13 +#define SEMA_VGA 14 +#define SEMA_UPDATE_WIN_Z_BUF 15 +#define SEMA_TT 16 +#define SEMA_MUTE 17 +#define SEMA_FORCE_WINMGR 18 +#define SEMA_JUST_PUMP_MSGS 19 +#define SEMA_TMBEAT 20 +#define SEMA_FIX 21 +#define SEMA_NUM_SEMAS 22 -#define SYSf_CTRL_ALT_DEL 0 -#define SYSf_CTRL_ALT_C 1 -#define SYSf_CTRL_ALT_X 2 -#define SYSf_CTRL_ALT_TAB 3 +#define CTRL_ALT_DEL 0 +#define CTRL_ALT_C 1 +#define CTRL_ALT_X 2 +#define CTRL_ALT_TAB 3 #help_index "Hash" public class CHash -{ -//Hash entries are not removed. New entries eclipse old by being - //in front for searches. Old function code is not freed - //because a reference might use it. +{//See $LK,"Hash",A="HI:Hash"$ CHash *next; U8 *str; - U32 type,use_cnt; -//use_cnt is never decremented. It is incremented - //each time a node is found in a hash search. - //One place it is used is to tell if a externed function was unused - //before being defined. It is also used for popularity measures - //in autocomplete. You can do a $LK,"Who",A="MN:Who"$() to see - //roughly how many times a symbol has been - //referenced. Beware of instances where - //a hash entry is continuously searched for and - //racks-up huge use_cnt numbers. + U32 type, + use_cnt; // inc'ed every time search found, never dec'ed. }; public class CHashTable @@ -648,8 +637,7 @@ public class CHashTable }; #help_index "Hash/System" -//Hash table types -//$LK,"ST_HTT_TYPES",A="FF:::/Kernel/KDefine.HC,ST_HTT_TYPES"$ +//Hash table types: $LK,"ST_HTT_TYPES",A="FF:::/Kernel/KDefine.HC,ST_HTT_TYPES"$ #define HTt_EXPORT_SYS_SYM 0 #define HTt_IMPORT_SYS_SYM 1 #define HTt_DEFINE_STR 2 @@ -809,7 +797,7 @@ public class CMemberLst CArrayDim dim; U8 *static_data; union { - I64 static_data_ip; + I64 static_data_rip; I64 dft_val; } CHashFun *fun_ptr; @@ -818,7 +806,7 @@ public class CMemberLst class CExternUsage { CExternUsage *next; - I64 ip; + I64 rip; }; #help_index "Hash/System;Compiler/Internal" @@ -832,7 +820,7 @@ public class CHashDefineStr:CHashSrcSym #define Cf_INTERNAL_TYPE 1 public class CHashClass:CHashSrcSym -{//See $LK,"PrsClassNew",A="MN:PrsClassNew"$(). base_class of $LK,"CHashFun",A="MN:CHashFun"$ +{//See $LK,"PrsClassNew",A="MN:PrsClassNew"$(). base_class of $LK,"CHashFun",A="MN:CHashFun"$ I64 size,neg_offset; U32 member_cnt; U8 ptr_stars_cnt,raw_type; @@ -879,7 +867,7 @@ public class CHashGlblVar:CHashSrcSym CArrayDim dim; U8 *data_addr; union { - I64 data_addr_ip; + I64 data_addr_rip; CAOTHeapGlbl *heap_glbl; } }; @@ -927,7 +915,7 @@ public class CHashGlblVar:CHashSrcSym #define DOCT_CURSOR_MOVEMENT 26 #define DOCT_ANCHOR 27 #define DOCT_LINK 28 -#define DOCT_BUTTON 29 +#define DOCT_BTTN 29 #define DOCT_DATA 30 #define DOCT_CHECK_BOX 31 #define DOCT_LST 32 @@ -1121,7 +1109,7 @@ public class CDocBin U32 num,flags,size,use_cnt; U0 end; U8 *data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #define DOC_SCROLL_SPEED 8 @@ -1174,7 +1162,7 @@ public class CDocEntryBase U32 min_col,max_col; CDocSettings settings; I64 user_data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #define DOCE_LEN_DFT 64 @@ -1209,7 +1197,7 @@ public class CDocEntry:CDocEntryBase U8 raw_type,pad[3]; CDocBin *bin_data; U8 *data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; //$LK,"DocForm",A="MN:DocForm"$() $LK,"DocMenu",A="MN:DocMenu"$() $LK,"DocEd",A="MN:DocEd"$() $LK,"PopUpMenu",A="MN:PopUpMenu"$() @@ -1393,7 +1381,7 @@ public class CDoc //Linked Text File header CDocUndo undo_head; I64 user_data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Windows" @@ -1407,11 +1395,11 @@ tries to do something. #define WIF_SELF_FOCUS 0x0001 //If active this task cannot have focus //MENU 0x0002 #define WIF_SELF_CTRLS 0x0004 -#define WIF_SELF_IP_L 0x0008 - //IP_L_D 0x0010 -#define WIF_SELF_IP_R 0x0020 - //IP_R_D 0x0040 -#define WIF_SELF_IP_WHEEL 0x0080 //Does nothing, yet +#define WIF_SELF_MS_L 0x0008 + //MS_L_D 0x0010 +#define WIF_SELF_MS_R 0x0020 + //MS_R_D 0x0040 +#define WIF_SELF_MS_WHEEL 0x0080 //Does nothing, yet #define WIF_SELF_BORDER 0x0100 #define WIF_SELF_GRAB_SCROLL 0x0200 #define WIF_SELF_DOC 0x0400 @@ -1420,24 +1408,24 @@ tries to do something. //FOCUS 0x00010000 #define WIF_FOCUS_TASK_MENU 0x00020000 #define WIF_FOCUS_TASK_CTRLS 0x00040000 -#define WIF_FOCUS_TASK_IP_L 0x00080000 -#define WIF_FOCUS_TASK_IP_L_D 0x00100000 -#define WIF_FOCUS_TASK_IP_R 0x00200000 -#define WIF_FOCUS_TASK_IP_R_D 0x00400000 -#define WIF_FOCUS_TASK_IP_WHEEL 0x00800000 //Does nothing, yet +#define WIF_FOCUS_TASK_MS_L 0x00080000 +#define WIF_FOCUS_TASK_MS_L_D 0x00100000 +#define WIF_FOCUS_TASK_MS_R 0x00200000 +#define WIF_FOCUS_TASK_MS_R_D 0x00400000 +#define WIF_FOCUS_TASK_MS_WHEEL 0x00800000 //Does nothing, yet #define WIF_FOCUS_TASK_BORDER 0x01000000 #define WIF_FOCUS_TASK_GRAB_SCROLL 0x02000000 -#define WIG_DBL_CLICK (WIF_FOCUS_TASK_IP_L_D|WIF_FOCUS_TASK_IP_R_D) +#define WIG_DBL_CLICK (WIF_FOCUS_TASK_MS_L_D|WIF_FOCUS_TASK_MS_R_D) #define WIG_TASK_DFT (WIF_FOCUS_TASK_MENU|WIG_DBL_CLICK|\ 0xFFFF-WIF_SELF_DOC-WIF_SELF_ODE) #define WIG_USER_TASK_DFT WIF_SELF_KEY_DESC #define WIf_SELF_FOCUS 0 #define WIf_SELF_CTRLS 2 -#define WIf_SELF_IP_L 3 -#define WIf_SELF_IP_R 5 -#define WIf_SELF_IP_WHEEL 7 +#define WIf_SELF_MS_L 3 +#define WIf_SELF_MS_R 5 +#define WIf_SELF_MS_WHEEL 7 #define WIf_SELF_BORDER 8 #define WIf_SELF_GRAB_SCROLL 9 #define WIf_SELF_DOC 10 @@ -1445,11 +1433,11 @@ tries to do something. #define WIf_SELF_KEY_DESC 12 #define WIf_FOCUS_TASK_MENU 17 #define WIf_FOCUS_TASK_CTRLS 18 -#define WIf_FOCUS_TASK_IP_L 19 -#define WIf_FOCUS_TASK_IP_L_D 20 -#define WIf_FOCUS_TASK_IP_R 21 -#define WIf_FOCUS_TASK_IP_R_D 22 -#define WIf_FOCUS_TASK_IP_WHEEL 23 +#define WIf_FOCUS_TASK_MS_L 19 +#define WIf_FOCUS_TASK_MS_L_D 20 +#define WIf_FOCUS_TASK_MS_R 21 +#define WIf_FOCUS_TASK_MS_R_D 22 +#define WIf_FOCUS_TASK_MS_WHEEL 23 #define WIf_FOCUS_TASK_BORDER 24 #define WIf_FOCUS_TASK_GRAB_SCROLL 25 @@ -1586,12 +1574,12 @@ public class CAutoCompleteDictGlbls #define MDG_DISP_SIB_RIP (MDF_DISP|MDF_SIB|MDF_RIP_DISP32) #define MDG_REG_DISP_SIB_RIP (MDF_REG|MDG_DISP_SIB_RIP) -#define ICF_R_TO_F64 0x000000001 -#define ICF_R_TO_INT 0x000000002 -#define ICF_A1_TO_F64 0x000000004 -#define ICF_A1_TO_INT 0x000000008 -#define ICF_A2_TO_F64 0x000000010 -#define ICF_A2_TO_INT 0x000000020 +#define ICF_RES_TO_F64 0x000000001 +#define ICF_RES_TO_INT 0x000000002 +#define ICF_ARG1_TO_F64 0x000000004 +#define ICF_ARG1_TO_INT 0x000000008 +#define ICF_ARG2_TO_F64 0x000000010 +#define ICF_ARG2_TO_INT 0x000000020 #define ICF_USE_F64 0x000000040 #define ICF_USE_UNSIGNED 0x000000080 #define ICF_USE_INT 0x000000100 //highest priority @@ -1601,9 +1589,9 @@ public class CAutoCompleteDictGlbls #define ICF_SHORT_JMP 0x000001000 #define ICF_PUSH_RES 0x000002000 #define ICF_PASS_TRACE 0x000004000 -#define ICF_R_WAS_STK 0x000008000 -#define ICF_A1_WAS_STK 0x000010000 -#define ICF_A2_WAS_STK 0x000020000 +#define ICF_RES_WAS_STK 0x000008000 +#define ICF_ARG1_WAS_STK 0x000010000 +#define ICF_ARG2_WAS_STK 0x000020000 #define ICF_PUSH_CMP 0x000040000 //for 50last_cc->lex_include_stk->line_num);} #define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_cc->flags&CCF_CMD_LINE &&\ - Fs->last_cc->lex_include_stk->depth<2);} + Fs->last_cc->lex_include_stk->depth<1);} #define __FILE__ #exe{StreamPrint("\"%s\"",\ Fs->last_cc->lex_include_stk->full_name);} #define __DIR__ #exe{StreamDir;} @@ -2048,7 +2035,7 @@ class CLexFile class CAOTCtrl { - I64 ip; //Inst ptr + I64 rip; //Inst ptr CAsmArg arg1,arg2; CAOTBinBlk *bin; I64 num_bin_U8s, @@ -2056,7 +2043,7 @@ class CAOTCtrl CAsmUnresolvedRef *local_unresolved,*glbl_unresolved; CAOTAbsAddr *abss; CAOTHeapGlbl *heap_glbls; - I64 lst_col,lst_last_ip; + I64 lst_col,lst_last_rip; U8 *last_label,*lst_last_line; CLexFile *lst_last_lfn; I64 seg_size; @@ -2161,7 +2148,7 @@ class CLexHashTableContext #define CCF_NO_ABSS 0x1000000000 #define CCF_PAREN 0x2000000000 #define CCf_PAREN 37 -#define CCF_CLASS_IP 0x4000000000 +#define CCF_CLASS_DOL_OFFSET 0x4000000000 #define CCF_DONT_MAKE_RES 0x8000000000 public class CCmpCtrl @@ -2173,14 +2160,14 @@ public class CCmpCtrl F64 cur_f64; U8 *cur_str; I64 cur_str_len, - class_ip; + class_dol_offset; U8 *dollar_buf; I64 dollar_cnt; U8 *cur_help_idx; I64 last_U16, min_line,max_line,last_line_num, lock_cnt; - U32 *chars_bmp_alpha_numeric; + U32 *char_bmp_alpha_numeric; CLexHashTableContext htc; CHashGeneric *hash_entry; CAbsCntsI64 abs_cnts; @@ -2207,7 +2194,7 @@ public class CCmpCtrl CPrsStk *ps; CAOTCtrl *aotc; I64 aot_depth,pmt_line; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Compiler" @@ -2727,6 +2714,7 @@ public class CDrv U16 fs_type; I64 drv_offset, size, + prt_num, file_system_info_sect, fat1,fat2, root_cluster, @@ -2833,34 +2821,14 @@ class CMemUsed #endif #help_index "Memory/BlkPool" -/*TempleOS does not mess with page tables after setting them up -during boot -- $LK,"SYS_INIT_PAGE_TABLES",A="MN:SYS_INIT_PAGE_TABLES"$. - -$LK,"MEM_PAGE_SIZE",A="MN:MEM_PAGE_SIZE"$, the unit size for alloications, is arbitrary, -and is not related to CPU hardware. - -All virtual addresses are ident to physical at all times. -text.vga_alias is not identity-mapped, however. - -There is no high kernel memory because RAM's physical -addresses are low. (All motherboards that I know of -put RAM in low addresses of 64-bit address space.) -It's ring-0-only so all (or none) is kernel, remember. -2Meg hardware pages are used. Only the caching bits matter. -Remember, it is ring-0-only and identity-mapped! - -All code is placed in just the lowest 2Gig, so the CALL REL32 -inst always works. It never changes out of ring-0, remember, -so I don't need to waste cycles on use SYSCALL or software interrupts. -Everything just uses CALL REL32. -*/ +#help_file "::/Doc/Pags" #define MBS_USED_SIGNATURE_VAL 'MBUs' #define MBS_UNUSED_SIGNATURE_VAL 'MBUn' class CMemBlk { CMemBlk *next,*last; - U32 mb_signature,pages; + U32 mb_signature,pags; }; #define MRT_UNUSED 0 @@ -2875,18 +2843,18 @@ class CMemRange I64 size; }; -#define MEM_PAGE_BITS 9 -#define MEM_PAGE_SIZE (1< #define MSG_KEY_UP 3 //($LK,"ASCII",A="MN:CH_CTRLA"$,$LK,"scan code",A="FI:::/Doc/CharOverview.DD"$) Press -#define MSG_IP_MOVE 4 //(x,y) -#define MSG_IP_L_DOWN 5 //(x,y) -#define MSG_IP_L_UP 6 //(x,y) -#define MSG_IP_L_D_DOWN 7 //(x,y) -#define MSG_IP_L_D_UP 8 //(x,y) -#define MSG_IP_R_DOWN 9 //(x,y) -#define MSG_IP_R_UP 10 //(x,y) -#define MSG_IP_R_D_DOWN 11 //(x,y) -#define MSG_IP_R_D_UP 12 //(x,y) +#define MSG_MS_MOVE 4 //(x,y) +#define MSG_MS_L_DOWN 5 //(x,y) +#define MSG_MS_L_UP 6 //(x,y) +#define MSG_MS_L_D_DOWN 7 //(x,y) +#define MSG_MS_L_D_UP 8 //(x,y) +#define MSG_MS_R_DOWN 9 //(x,y) +#define MSG_MS_R_UP 10 //(x,y) +#define MSG_MS_R_D_DOWN 11 //(x,y) +#define MSG_MS_R_D_UP 12 //(x,y) #define MSG_KEY_DOWN_UP -2 //Down & UP -#define MSG_IP_L_DOWN_UP -5 //Down & Up -#define MSG_IP_L_D_DOWN_UP -7 //Down & Up -#define MSG_IP_R_DOWN_UP -9 //Down & Up -#define MSG_IP_R_D_DOWN_UP -11 //Down & Up +#define MSG_MS_L_DOWN_UP -5 //Down & Up +#define MSG_MS_L_D_DOWN_UP -7 //Down & Up +#define MSG_MS_R_DOWN_UP -9 //Down & Up +#define MSG_MS_R_D_DOWN_UP -11 //Down & Up #help_index "Task/Settings" #define TSF_SAME_SONG 1 @@ -3261,7 +3221,7 @@ public class CTaskSettings border_attr,border_src, task_title[STR_LEN]; Bool border,hide_cursor,highlight_cursor,scroll,autocomplete,pad[3]; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Task" @@ -3305,6 +3265,7 @@ public class CTaskSettings #define TASK_SIGNATURE_VAL 'TskS' #define TASK_NAME_LEN 32 +#define TASK_EXCEPT_CALLERS 8 class CTaskStk { CTaskStk *next_stk; @@ -3323,7 +3284,7 @@ public class CTask //The Fs segment reg points to current CTask. { CTask *addr; //Self-addressed ptr U32 task_signature,win_inhibit; -U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) + ;#assert $$==offset(CTaskDying.wake_jiffy) I64 wake_jiffy; U32 task_flags,display_flags; @@ -3371,8 +3332,7 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) CExcept *next_except,*last_except; I64 except_rbp, //throw routine's RBP except_ch; //throw(ch) - U8 *except_caller1,*except_caller2,*except_caller3,*except_caller4, - *except_caller5,*except_caller6,*except_caller7,*except_caller8; + U8 *except_callers[TASK_EXCEPT_CALLERS]; Bool catch_except; Bool new_answer; @@ -3387,7 +3347,7 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) F64 last_ode_time; CHashTable *hash_table; - CSrvCtrl srv_ctrl; + CJobCtrl srv_ctrl; CCmpCtrl *next_cc,*last_cc; CHashFun *last_fun; @@ -3401,7 +3361,7 @@ U0 pad;#assert $$==offset(CTaskDying.wake_jiffy) CWinScroll horz_scroll,vert_scroll; I64 user_data; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; class CTSS @@ -3456,28 +3416,22 @@ public class CCPU //The Gs segment reg points to current CCPU. I64 kill_jiffy; CTSS *tss; I64 start_stk[16]; - U0 pad;#assert !($$&7) //(compiler lags one token) + ;#assert !($$&7) //(compiler lags one token) }; #help_index "Memory/Page Tables" #define MEM_MIN_MEG 512 //512 Meg minimum. -#define MEM_MAPPED_SPACE 0x4000000000 //Arbitrarily set to 256 Gig. -#define MEM_NUM_2MEG (MEM_MAPPED_SPACE>>21) -#define MEM_NUM_USED_1GIG (MEM_MAPPED_SPACE>>(21+9)) -#define MEM_NUM_1GIG (0x1000/8) -#define MEM_NUM_512GIG (0x1000/8) -#define SYS_FIXED_AREA 0x100000 +#define SYS_FIXED_AREA 0x100000 +#define SYS_16MEG_AREA_LIMIT 0x1000000 public class CSysFixedArea { - U8 pml2[MEM_NUM_2MEG*8],pml3[MEM_NUM_1GIG*8],pml4[MEM_NUM_512GIG*8]; - $$=($$+15)&-16; CFPU init_fpu_mmx; CCPU boot_cpu; CTask adam; - CBlkPool adam_bp; + CBlkPool sys_code_bp; CHeapCtrl adam_hc; - $$=($$+MEM_PAGE_SIZE-1)&-MEM_PAGE_SIZE; + $$=($$+0x1000-1)&-0x1000; }; #help_index "Char" @@ -3509,7 +3463,6 @@ public class CSysFixedArea #define CH_CTRLZ 0x1A #define CH_CURSOR 0x05 #define CH_BACKSPACE 0x08 -#define CH_FORM_FEED 0x0C #define CH_ESC 0x1B #define CH_SHIFT_ESC 0x1C #define CH_SHIFT_SPACE 0x1F @@ -3528,8 +3481,8 @@ public class CSysFixedArea #define SCf_NUM 13 #define SCf_SCROLL 14 #define SCf_NEW_KEY 15 -#define SCf_IP_L_DOWN 16 -#define SCf_IP_R_DOWN 17 +#define SCf_MS_L_DOWN 16 +#define SCf_MS_R_DOWN 17 #define SCf_DELETE 18 #define SCf_INS 19 #define SCf_NO_SHIFT 30 @@ -3543,8 +3496,8 @@ public class CSysFixedArea #define SCF_NUM (1<. ch=ToUpper(ch)-'A'; if (ch<26) { - keydev.fp_ctrl_alt_cbs[ch]=fp_handler; + keydev.fp_ctrl_alt_cbs[ch]=fp_hndlr; Free(keydev.ctrl_alt_no_shift_descs[ch]); if (no_shift_desc) diff --git a/Kernel/Mem/BlkPool.HC b/Kernel/Mem/BlkPool.HC index b4bec7c..0d73bcb 100644 --- a/Kernel/Mem/BlkPool.HC +++ b/Kernel/Mem/BlkPool.HC @@ -1,35 +1,35 @@ -U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pages512) +U0 BlkPoolAdd(CBlkPool *bp,CMemBlk *m,I64 pags) {//Add mem to BlkPool. if (sys_mem_init_flag) - MemSet(m,sys_mem_init_val,pages512*512); + MemSet(m,sys_mem_init_val,pags*MEM_PAG_SIZE); PUSHFD CLI while (LBts(&bp->locked_flags,BPlf_LOCKED)) PAUSE m->next=bp->mem_free_lst; - m->pages=pages512; + m->pags=pags; m->mb_signature=MBS_UNUSED_SIGNATURE_VAL; - bp->alloced_u8s+=pages512<alloced_u8s+=pags<mem_free_lst=m; LBtr(&bp->locked_flags,BPlf_LOCKED); POPFD } -U0 BlkPoolInit(CBlkPool *bp,I64 pages512) +U0 BlkPoolInit(CBlkPool *bp,I64 pags) {//Make mem chunk into a BlkPool. I64 num; CMemBlk *m; MemSet(bp,0,sizeof(CBlkPool)); - m=(bp(U8 *)+sizeof(CBlkPool)+MEM_PAGE_SIZE-1)&~(MEM_PAGE_SIZE-1); - num=(bp(U8 *)+pages512<>MEM_PAGE_BITS; - bp->alloced_u8s=(pages512-num)<>MEM_PAG_BITS; + bp->alloced_u8s=(pags-num)<>MEM_PAGE_BITS); - sys_heap_limit=i+0x1000000-1; + i=code_heap_limit-SYS_16MEG_AREA_LIMIT; //See $LK,"RLf_16MEG_SYS_CODE_BP",A="FF:::/Kernel/Mem/PageTables.HC,RLf_16MEG_SYS_CODE_BP"$ + BlkPoolAdd(sys_code_bp,SYS_16MEG_AREA_LIMIT,i>>MEM_PAG_BITS); + mem_heap_limit=i+SYS_16MEG_AREA_LIMIT-1; if (code_heap_limittype) { @@ -58,15 +58,16 @@ U0 BlkPoolsInit() } if (code_heap_limit<=lo>MEM_PAGE_BITS); + BlkPoolInit(lo,(hi-lo)>>MEM_PAG_BITS); sys_data_bp=lo; Fs->data_heap=HeapCtrlInit(,Fs,sys_data_bp); first=FALSE; } else - BlkPoolAdd(sys_data_bp,lo,(hi-lo)>>MEM_PAGE_BITS); + BlkPoolAdd(sys_data_bp,lo,(hi-lo)>>MEM_PAG_BITS); } } m20++; } } + LBts(&sys_run_level,RLf_FULL_HEAPS); } diff --git a/Kernel/Mem/HeapCtrl.HC b/Kernel/Mem/HeapCtrl.HC index d4e2939..758fea1 100644 --- a/Kernel/Mem/HeapCtrl.HC +++ b/Kernel/Mem/HeapCtrl.HC @@ -23,7 +23,7 @@ U0 HeapCtrlDel(CHeapCtrl *hc) m=hc->next_mem_blk; while (m!=&hc->next_mem_blk) { m1=m->next; - Mem512TaskFree(m,hc); + MemPagTaskFree(m,hc); m=m1; } LBtr(&hc->locked_flags,HClf_LOCKED); diff --git a/Kernel/Mem/MAllocFree.HC b/Kernel/Mem/MAllocFree.HC index 76c5bc7..9a7fc3d 100644 --- a/Kernel/Mem/MAllocFree.HC +++ b/Kernel/Mem/MAllocFree.HC @@ -51,20 +51,20 @@ _MALLOC:: JMP I32 MALLOC_ALMOST_DONE //Big allocation -@@30: ADD RAX,sizeof(CMemBlk)+MEM_PAGE_SIZE-1 - SHR RAX,MEM_PAGE_BITS +@@30: ADD RAX,sizeof(CMemBlk)+MEM_PAG_SIZE-1 + SHR RAX,MEM_PAG_BITS PUSH RDX //preserve HeapCtrl PUSH RDX PUSH RAX - CALL &Mem512TaskAlloc + CALL &MemPagTaskAlloc POP RDX TEST RAX,RAX JZ @@45 //Out of memory MOV RSI,RAX - MOV EAX,U32 CMemBlk.pages[RSI] + MOV EAX,U32 CMemBlk.pags[RSI] - SHL RAX,MEM_PAGE_BITS + SHL RAX,MEM_PAG_BITS SUB RAX,sizeof(CMemBlk) ADD RSI,sizeof(CMemBlk) JMP I32 MALLOC_ALMOST_DONE @@ -77,13 +77,13 @@ _MALLOC:: TEST RSI,RSI JNZ I32 @@60 PUSH RAX //-**** save byte size - ADD RAX,16*MEM_PAGE_SIZE-1 - SHR RAX,MEM_PAGE_BITS + ADD RAX,16*MEM_PAG_SIZE-1 + SHR RAX,MEM_PAG_BITS PUSH RDX //preserve HeapCtrl PUSH RDX PUSH RAX - CALL &Mem512TaskAlloc + CALL &MemPagTaskAlloc POP RDX TEST RAX,RAX JNZ @@50 @@ -99,8 +99,8 @@ _MALLOC:: JMP I32 MALLOC_FINAL_EXIT //Never gets here, hopefully. @@50: MOV RSI,RAX - MOV EAX,U32 CMemBlk.pages[RSI] - SHL RAX,MEM_PAGE_BITS + MOV EAX,U32 CMemBlk.pags[RSI] + SHL RAX,MEM_PAG_BITS //Can it be combined with last chunk? (Never Free these chunks.) MOV RDI,U64 CHeapCtrl.last_mergable[RDX] @@ -109,8 +109,8 @@ _MALLOC:: JNE @@55 PUSH RAX - MOV EAX,U32 CMemBlk.pages[RDI] - ADD U32 CMemBlk.pages[RSI],EAX + MOV EAX,U32 CMemBlk.pags[RDI] + ADD U32 CMemBlk.pags[RSI],EAX //QueRem MOV RAX,U64 CMemBlk.next[RDI] MOV RBX,U64 CMemBlk.last[RDI] @@ -161,7 +161,7 @@ MALLOC_ALMOST_DONE: //Caller1/Caller2 PUSH RDX - MOV RDX,U64 [SYS_HEAP_LIMIT] + MOV RDX,U64 [MEM_HEAP_LIMIT] MOV RDI,U64 SF_RIP[RBP] CMP RDI,RDX JB @@80 @@ -190,7 +190,7 @@ MALLOC_ALMOST_DONE: MOV U64 CMemUsed.hc[RSI],RDX LEA RAX,U64 CMemUsed.start[RSI] - TEST U8 [SYS_SEMAS+SYS_SEMA_HEAPLOG_ACTIVE*SEMA_STRUCT_SIZE],1 + TEST U8 [SYS_SEMAS+SEMA_HEAPLOG_ACTIVE*DFT_CACHE_LINE_WIDTH],1 JZ @@105 PUSH RAX PUSH RAX @@ -221,13 +221,13 @@ MALLOC_FINAL_EXIT: RET1 16 //************************************ _FREE:: -//Be aware of $LK,"heap_hash",A="FF:::/Kernel/Mem/MAllocFree.HC,heap_hash"$ in $LK,"Mem512TaskAlloc",A="MN:Mem512TaskAlloc"$(). +//Be aware of $LK,"heap_hash",A="FF:::/Kernel/Mem/MAllocFree.HC,heap_hash"$ in $LK,"MemPagTaskAlloc",A="MN:MemPagTaskAlloc"$(). PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI - TEST U8 [SYS_SEMAS+SYS_SEMA_HEAPLOG_ACTIVE*SEMA_STRUCT_SIZE],1 + TEST U8 [SYS_SEMAS+SEMA_HEAPLOG_ACTIVE*DFT_CACHE_LINE_WIDTH],1 JZ @@15 MOV RBX,U64 SF_ARG1[RBP] TEST RBX,RBX @@ -285,7 +285,7 @@ _FREE:: MOV U64 CMemUsed.next[RDI],RDX //Caller1/Caller2 - MOV RDX,U64 [SYS_HEAP_LIMIT] + MOV RDX,U64 [MEM_HEAP_LIMIT] MOV RDI,U64 SF_RIP[RBP] CMP RDI,RDX JB @@35 @@ -321,7 +321,7 @@ _FREE:: PUSH RDX PUSH RDX PUSH RSI - CALL &Mem512TaskFree + CALL &MemPagTaskFree POP RDX @@55: LOCK diff --git a/Kernel/Mem/MakeMem.HC b/Kernel/Mem/MakeMem.HC index 2df9982..e2ea650 100644 --- a/Kernel/Mem/MakeMem.HC +++ b/Kernel/Mem/MakeMem.HC @@ -1,6 +1,6 @@ #exe {Cd(__DIR__);}; #include "PageTables" -#include "Mem512" +#include "MemPag" #include "BlkPool" #include "MAllocFree" #include "HeapCtrl" diff --git a/Kernel/Mem/Mem512.HC b/Kernel/Mem/MemPag.HC similarity index 58% rename from Kernel/Mem/Mem512.HC rename to Kernel/Mem/MemPag.HC index 4693ae3..43c7e38 100644 --- a/Kernel/Mem/Mem512.HC +++ b/Kernel/Mem/MemPag.HC @@ -1,18 +1,17 @@ U0 SysBadFree(I64 *ptr) { - Dbg("Bad Free:",ptr); + Panic("Bad Free:",ptr); } U0 SysBadMAlloc(I64 *ptr) { - Dbg("Bad MAlloc:",ptr); + Panic("Bad MAlloc:",ptr); } -U8 *Mem512Alloc(I64 pages512,CBlkPool *bp=NULL) -{/*Alloc 512Byte pages from BlkPool. Don't link to task. +U8 *MemPagAlloc(I64 pags,CBlkPool *bp=NULL) +{/*Alloc pags from BlkPool. Don't link to task. (Linking to a task means they will be freed when the task dies.) -It might give you more than you asked for -so a ptr to a page count is passed. +It might give you more than you asked for. Return: NULL if out of memory. */ @@ -23,23 +22,23 @@ Return: NULL if out of memory. CLI while (LBts(&bp->locked_flags,BPlf_LOCKED)) PAUSE - if (pages512free_page_hash[pages512]) { - bp->free_page_hash[pages512]=res->next; + if (pagsfree_pag_hash[pags]) { + bp->free_pag_hash[pags]=res->next; goto at_done; } - i=Bsr(MEM_FREE_PAGE_HASH_SIZE)+1; + i=Bsr(MEM_FREE_PAG_HASH_SIZE)+1; } else { //We'll now round-up to a power of two. //There is some overhead on allocations and //we wouldn't want to round to the next //power of two if a power of two was requested. //So we use a little more than a power of two. - pages512-=MEM_EXTRA_HASH2_PAGES; - i=Bsr(pages512)+1; - pages512=1<free_page_hash2[i]) { - bp->free_page_hash2[i]=res->next; + pags-=MEM_EXTRA_HASH2_PAGS; + i=Bsr(pags)+1; + pags=1<free_pag_hash2[i]) { + bp->free_pag_hash2[i]=res->next; goto at_done; } } @@ -49,84 +48,84 @@ Return: NULL if out of memory. //We're probably out of luck, but lets search for a //freed larger size block... and, screw-it, return the whole thing. do { - if (res=bp->free_page_hash2[++i]) { - pages512=1<free_page_hash2[i]=res->next; + if (res=bp->free_pag_hash2[++i]) { + pags=1<free_pag_hash2[i]=res->next; goto at_done; } - } while (i<64-MEM_PAGE_BITS-1); - pages512=0; + } while (i<64-MEM_PAG_BITS-1); + pags=0; res=NULL; //Out of memory goto at_done2; } - if (res->pagespagspages==pages512) { + if (res->pags==pags) { m->next=res->next; goto at_done; } else { - res->pages-=pages512; - res(U8 *)+=res->pages<pages=pages512; + res->pags-=pags; + res(U8 *)+=res->pags<pags=pags; goto at_done; } } } at_done: - bp->used_u8s+=res->pages<used_u8s+=res->pags<locked_flags,BPlf_LOCKED); POPFD return res; } -U0 Mem512Free(CMemBlk *m,CBlkPool *bp=NULL) -{//Return non-task 512Byte pages to BlkPool. - I64 i,pages512; +U0 MemPagFree(CMemBlk *m,CBlkPool *bp=NULL) +{//Return non-task pags to BlkPool. + I64 i,pags; if (m) { if (!bp) bp=sys_code_bp; PUSHFD CLI while (LBts(&bp->locked_flags,BPlf_LOCKED)) PAUSE - pages512=m->pages; + pags=m->pags; m->mb_signature=MBS_UNUSED_SIGNATURE_VAL; - bp->used_u8s-=pages512<next=bp->free_page_hash[pages512]; - bp->free_page_hash[pages512]=m; + bp->used_u8s-=pags<next=bp->free_pag_hash[pags]; + bp->free_pag_hash[pags]=m; } else { //We'll now round-up to a power of two. //There is some overhead on allocations and //we wouldn't want to round to the next //power of two if a power of two was requested. //So we use a little more than a power of two. - pages512-=MEM_EXTRA_HASH2_PAGES; - i=Bsr(pages512); - m->next=bp->free_page_hash2[i]; - bp->free_page_hash2[i]=m; + pags-=MEM_EXTRA_HASH2_PAGS; + i=Bsr(pags); + m->next=bp->free_pag_hash2[i]; + bp->free_pag_hash2[i]=m; } LBtr(&bp->locked_flags,BPlf_LOCKED); POPFD } } -CMemBlk *Mem512TaskAlloc(I64 pages512,CHeapCtrl *hc) -{/*hc must be locked. Interrupts should probably be off +CMemBlk *MemPagTaskAlloc(I64 pags,CHeapCtrl *hc) +{/*hc must be locked. Don't preempt this routine. Currently, this is only called from $LK,"MAlloc",A="MN:MAlloc"$(). Return: NULL if out of memory. */ CMemBlk *res; I64 threshold,cnt,size; CMemUnused *uum,**_uum,**_ptr; - if (res=Mem512Alloc(pages512,hc->bp)) { + if (res=MemPagAlloc(pags,hc->bp)) { QueIns(res,hc->last_mem_blk); res->mb_signature=MBS_USED_SIGNATURE_VAL; - hc->alloced_u8s+=res->pages<alloced_u8s+=res->pags<>4; #assert MEM_HEAP_HASH_SIZE>>4>=sizeof(U8 *) do { @@ -151,7 +150,7 @@ Return: NULL if out of memory. return res; } -U0 Mem512TaskFree(CMemBlk *m,CHeapCtrl *hc) +U0 MemPagTaskFree(CMemBlk *m,CHeapCtrl *hc) {//hc must be locked if (m) { PUSHFD @@ -160,8 +159,8 @@ U0 Mem512TaskFree(CMemBlk *m,CHeapCtrl *hc) SysBadFree(m); else { QueRem(m); - hc->alloced_u8s-=m->pages<bp); + hc->alloced_u8s-=m->pags<bp); } POPFD } diff --git a/Kernel/Mem/MemPhysical.HC b/Kernel/Mem/MemPhysical.HC index 62ea122..bf895b4 100644 --- a/Kernel/Mem/MemPhysical.HC +++ b/Kernel/Mem/MemPhysical.HC @@ -30,7 +30,7 @@ Bool Mem32DevIns(CMemRange *tmpmr) U0 Mem32DevInit() { CMemRange *tmpmr; - CMemE820 *m20=SYS_MEM_E820; + CMemE820 *m20=MEM_E820; QueInit(&dev.mem32_head); tmpmr=AMAlloc(sizeof(CMemRange)); @@ -55,36 +55,13 @@ U0 Mem32DevInit() } } -U0 MemPagesNotPresentMark() -{ - U8 *a,*max_physical=NULL; - U16 *m01=SYS_MEM_E801; - CMemE820 *m20=SYS_MEM_E820; - while (m20->type) { - a=m20->base+m20->len; - if (a>max_physical) - max_physical=a; - m20++; - } - if (max_physical>=0x1000000+m01[1]<<16) { - if (sys_gig_pages) - a=(max_physical+0x3FFFFFFF)&~0x3FFFFFFF; - else - a=(max_physical+0x1FFFFF)&~0x1FFFFF; - while (asize=size; if (!Mem32DevIns(tmpmr)) { Free(tmpmr); - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return NULL; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return tmpmr->base; } tmpmr1=tmpmr1->next; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return NULL; } @@ -115,7 +92,7 @@ U0 Mem32DevFree(U8 *base) {//Free 32-bit device address space. CMemRange *tmpmr; if (!base) return; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; tmpmr=dev.mem32_head.next; while (tmpmr!=&dev.mem32_head) { @@ -125,14 +102,14 @@ U0 Mem32DevFree(U8 *base) } tmpmr=tmpmr->next; } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); } U8 *Mem64DevAlloc(I64 *_pages1Gig) {//Alloc 64-bit addr space for device. U8 *a; I64 i=*_pages1Gig,*pte; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; while (i--) { a=dev.mem64_ptr-=1<<30; @@ -140,22 +117,22 @@ U8 *Mem64DevAlloc(I64 *_pages1Gig) pte=MemPageTable(a); *pte=*pte&~0x18 |0x11; //Uncached and present InvlPg(dev.mem64_ptr); - a+=MemPageSize(a); + a+=mem_page_size; } while (a-dev.mem64_ptr<1<<30); } - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); return dev.mem64_ptr; } U0 Mem64DevFree(U8 *base,I64 pages1Gig) {//Free 64-bit device address space. if (!base) return; - while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) + while (LBts(&sys_semas[SEMA_DEV_MEM],0)) Yield; if (base==dev.mem64_ptr) dev.mem64_ptr+=pages1Gig*1<<30; //else not freed - LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0); + LBtr(&sys_semas[SEMA_DEV_MEM],0); } U0 UncachedAliasAlloc() //Make uncached alias for 4 lowest Gig. @@ -167,15 +144,15 @@ U0 UncachedAliasAlloc() //Make uncached alias for 4 lowest Gig. pte=MemPageTable(a); *pte=0x197+a-dev.uncached_alias; InvlPg(a); - a+=MemPageSize(a); + a+=mem_page_size; } while (a-dev.uncached_alias<1<<32); } I64 BIOSTotalMem() { I64 r01,r20; - U16 *m01=SYS_MEM_E801; - CMemE820 *m20=SYS_MEM_E820; + U16 *m01=MEM_E801; + CMemE820 *m20=MEM_E820; r01=0x100000+m01[0]<<10+m01[1]<<16; r20=0; @@ -201,4 +178,4 @@ I64 Scale2Mem(I64 min,I64 max,I64 limit=2*1024*1024*1024) return max; else return min+(max-min)*i/limit; - } +} diff --git a/Kernel/Mem/PageTables.HC b/Kernel/Mem/PageTables.HC index be8720f..e185145 100644 --- a/Kernel/Mem/PageTables.HC +++ b/Kernel/Mem/PageTables.HC @@ -3,152 +3,203 @@ asm { USE32 SYS_INIT_PAGE_TABLES:: -//Set page tables to identity map everything. +//Check 1Gig page capability and set page size. + MOV EAX,0x80000001 + CPUID + MOV EAX,1<<21 + BT EDX,26 + JNC @@05 + MOV EAX,1<<30 +@@05: MOV U32 [MEM_PAGE_SIZE],EAX + +//Set mapped space limit + MOV EAX,[MEM_PHYSICAL_SPACE] + MOV EDX,[MEM_PHYSICAL_SPACE+4] + BT U32 [MEM_PAGE_SIZE],30 //Round-up to 1Gig boundary? + JNC @@10 + ADD EAX,0x3FFFFFFF + ADC EDX,0 + AND EAX,~0x3FFFFFFF +@@10: INC EDX //Need 4Gig extra for uncached alias up at top of space. + MOV [MEM_MAPPED_SPACE],EAX + MOV [MEM_MAPPED_SPACE+4],EDX + +//How many 2Meg pages? + MOV CL,21 + ADD EAX,0x1FFFFF + ADC EDX,0 + SHRD EAX,EDX + SHR EDX,CL + MOV [MEM_NUM_2MEG],EAX + MOV [MEM_NUM_2MEG+4],EDX + +//How many 1Gig pages? + MOV CL,9 + ADD EAX,0x1FF + ADC EDX,0 + SHRD EAX,EDX + SHR EDX,CL + MOV [MEM_NUM_1GIG],EAX + MOV [MEM_NUM_1GIG+4],EDX + +//How many 512Gig pages? + MOV CL,9 + ADD EAX,0x1FF + ADC EDX,0 + SHRD EAX,EDX + SHR EDX,CL + MOV [MEM_NUM_512GIG],EAX + MOV [MEM_NUM_512GIG+4],EDX + +//Set $LK,"CSysFixedArea",A="MN:CSysFixedArea"$ to zero MOV EDI,SYS_FIXED_AREA XOR EAX,EAX MOV ECX,sizeof(CSysFixedArea)/4 - REP_STOSD //Init entire SYS_FIXED_AREA to zero + REP_STOSD - MOV EAX,0x80000001 - CPUID - BT EDX,26 + MOV U32 [MEM_PML2],EDI +//Check for 1Gig page capability. + BT U32 [MEM_PAGE_SIZE],30 JC @@15 +//Find PML2 Size + MOV EAX,U32 [MEM_NUM_2MEG] + ADD EAX,0x1FF + AND EAX,~0x1FF + SHL EAX,3 + ADD EDI,EAX - MOV U8 [SYS_GIG_PAGES],FALSE -//PML2: Use 2Meg PAges +//Find PML3 Size +@@15: MOV U32 [MEM_PML3],EDI + MOV EAX,U32 [MEM_NUM_1GIG] + ADD EAX,0x1FF + AND EAX,~0x1FF + SHL EAX,3 + ADD EDI,EAX + +//Find PML4 Size + MOV U32 [MEM_PML4],EDI + MOV EAX,U32 [MEM_NUM_512GIG] + ADD EAX,0x1FF + AND EAX,~0x1FF + SHL EAX,3 + ADD EAX,EDI + + MOV U32 [MEM_HEAP_BASE],EAX + +//Set page tables to zero + MOV EDI,U32 [MEM_PML2] + SUB EAX,EDI + MOV ECX,EAX + SHR ECX,2 + XOR EAX,EAX + REP_STOSD + +//Check for 1Gig page capability. + BT U32 [MEM_PAGE_SIZE],30 + JC @@30 + +//PML2: Use 2Meg Pages MOV EAX,0x87 //bit 7 is page size (2Meg) XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml2 - MOV ECX,MEM_NUM_2MEG -@@05: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML2] + MOV ECX,[MEM_NUM_2MEG] +@@20: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x200000 ADC EDX,0 - LOOP @@05 + LOOP @@20 //PML3: Use 2Meg Pages - MOV EAX,SYS_FIXED_AREA+CSysFixedArea.pml2+7 + MOV EAX,[MEM_PML2] + OR EAX,7 XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml3 - MOV ECX,MEM_NUM_USED_1GIG -@@10: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML3] + MOV ECX,[MEM_NUM_1GIG] +@@25: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x1000 ADC EDX,0 - LOOP @@10 - JMP @@25 + LOOP @@25 + JMP @@40 -@@15: MOV U8 [SYS_GIG_PAGES],TRUE //PML3: Use 1Gig Pages - MOV EAX,0x87 //bit 7 is page size (1Gig) +@@30: MOV EAX,0x87 //bit 7 is page size (1Gig) XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml3 - MOV ECX,MEM_NUM_USED_1GIG -@@20: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML3] + MOV ECX,[MEM_NUM_1GIG] +@@35: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x40000000 ADC EDX,0 - LOOP @@20 + LOOP @@35 //PML4 -@@25: MOV EAX,SYS_FIXED_AREA+CSysFixedArea.pml3+7 +@@40: MOV EAX,[MEM_PML3] + OR EAX,7 XOR EDX,EDX - MOV EDI,SYS_FIXED_AREA+CSysFixedArea.pml4 - MOV ECX,MEM_NUM_1GIG/(0x1000/8) -@@30: MOV U32 [EDI],EAX + MOV EDI,[MEM_PML4] + MOV ECX,[MEM_NUM_512GIG] +@@45: MOV U32 [EDI],EAX ADD EDI,4 MOV U32 [EDI],EDX ADD EDI,4 ADD EAX,0x1000 ADC EDX,0 - LOOP @@30 + LOOP @@45 + RET - MOV U32 [SYS_CODE_BP],SYS_FIXED_AREA+CSysFixedArea.adam_bp +SYS_INIT_16MEG_SYS_CODE_BP:: +// Init sys_code_bp to BIOS E801 lowest 16Meg val. +// $LK,"BlkPoolsInit",A="MN:BlkPoolsInit"$() adds the rest. + MOV U32 [SYS_CODE_BP],SYS_FIXED_AREA+CSysFixedArea.sys_code_bp MOV U32 [SYS_CODE_BP+4],0 MOV U32 [SYS_DATA_BP],0 MOV U32 [SYS_DATA_BP+4],0 XOR EAX,EAX - MOV AX,U16 [SYS_MEM_E801] //1 Kb blks between 1M and 16M + MOV AX,U16 [MEM_E801] //1 Kb blks between 1M and 16M SHL EAX,10 ADD EAX,0x100000 - MOV EBX,U32 [SYS_HEAP_BASE] //SYS_FIXED_AREA+sizeof(CSysFixedArea) - SUB EAX,EBX + MOV EDI,U32 [MEM_HEAP_BASE] + SUB EAX,EDI -/*$AN,"ExpandHeap",A="ExpandHeap"$ -TempleOS initializes the heap to the val -of the BIOS E801 lowest 16Meg val. It -later adds the rest to the heap. There -are a few allocations which occur while -it is set to this small val. - -At some point, it might be nice to -initialize to the full val but it is a -pain without MAlloc up-and-running. -*/ - -#define CONSERVATIVE_16MEG_SIZE 0xF00000 -#define ESTIMATED_MISC_ALLOCS 0x100000 - -#assert CONSERVATIVE_16MEG_SIZE- - (SYS_FIXED_AREA+sizeof(CSysFixedArea))>MEM_ADAM_STK+ - ESTIMATED_MISC_ALLOCS - -//EBX=BASE EAX=SIZE +//EDI=BASE EAX=SIZE TEST U8 [SYS_MEM_INIT_FLAG],1 - JZ @@35 + JZ @@05 PUSH EAX - MOV EDI,EBX + PUSH EDI MOV ECX,EAX MOV AL,U8 [SYS_MEM_INIT_VAL] REP_STOSB + POP EDI POP EAX -@@35: SHR EAX,MEM_PAGE_BITS - MOV ESI,SYS_FIXED_AREA+CSysFixedArea.adam_bp - MOV EDI,U32 CBlkPool.mem_free_lst[ESI] - MOV U32 CMemBlk.next[EBX],EDI - MOV U32 CMemBlk.next+4[EBX],0 - MOV U32 CBlkPool.mem_free_lst[ESI],EBX +@@05: SHR EAX,MEM_PAG_BITS + MOV ESI,SYS_FIXED_AREA+CSysFixedArea.sys_code_bp + MOV EBX,U32 CBlkPool.mem_free_lst[ESI] + MOV U32 CMemBlk.next[EDI],EBX + MOV U32 CMemBlk.next+4[EDI],0 + MOV U32 CBlkPool.mem_free_lst[ESI],EDI MOV U32 CBlkPool.mem_free_lst+4[ESI],0 - MOV U32 CMemBlk.mb_signature[EBX],MBS_UNUSED_SIGNATURE_VAL - MOV U32 CMemBlk.pages[EBX],EAX - SHL EAX,MEM_PAGE_BITS + MOV U32 CMemBlk.mb_signature[EDI],MBS_UNUSED_SIGNATURE_VAL + MOV U32 CMemBlk.pags[EDI],EAX + SHL EAX,MEM_PAG_BITS ADD U32 CBlkPool.alloced_u8s[ESI],EAX + + BTS U32 [SYS_RUN_LEVEL],RLf_16MEG_SYS_CODE_BP RET } I64 *MemPageTable(U8 *a) {//Point to page table entry for addr. - if (sys_gig_pages) - return SYS_FIXED_AREA+offset(CSysFixedArea.pml3)+a>>30*8; + if (Bt(&mem_page_size,30)) + return *MEM_PML3(U64 *)+a>>30*8; else - return SYS_FIXED_AREA+offset(CSysFixedArea.pml2)+a>>21*8; + return *MEM_PML2(U64 *)+a>>21*8; } - -I64 MemPageSize(U8 *) -{//Page table entry size for addr. - if (sys_gig_pages) - return 1<<30; //1Gig - else - return 1<<21; //2Meg -} - -Bool MemPagePresentMark(U8 *a,Bool val) -{//Mark an addr's page present or not-present. - I64 *pte=MemPageTable(a); - Bool res=*pte&1; - if (val) - *pte=*pte|1; //Mark present - else - *pte=*pte&~1; //Mark not present - InvlPg(a); - return res; -} - diff --git a/Kernel/MultiProc.HC b/Kernel/MultiProc.HC index 49e597d..9c9e004 100644 --- a/Kernel/MultiProc.HC +++ b/Kernel/MultiProc.HC @@ -120,7 +120,7 @@ CCPU *CPUStructInit(I64 num,CCPU *c,CTask *seth_task) c->num=num; c->idle_factor=0.01; QueInit(&c->next_dying); - if (Bt(&sys_run_level,RLf_BOOT_HEAP)) { + if (Bt(&sys_run_level,RLf_16MEG_ADAM_HEAP_CTRL)) { c->idle_task=Spawn(0,NULL,"Idle Task",,Fs,,0); LBts(&c->idle_task->task_flags,TASKf_IDLE); c->tss=TSSNew(num); @@ -165,7 +165,7 @@ U0 MPHalt() {//Halt all other cores. mp_cnt=1; MPNMInt; - BusyWait(10000); + Busy(10000); } U0 MPAPICInit() @@ -189,45 +189,44 @@ U0 MPAPICInit() } } -#assert !offset(CSrvCtrl.next_waiting) +#assert !offset(CJobCtrl.next_waiting) U0 CoreAPSethTask() { - CSrvCtrl *ctrl=&Fs->srv_ctrl; + CJobCtrl *ctrl=&Fs->srv_ctrl; while (TRUE) { STI do { TaskKillDying; do PAUSE - while (LBts(&ctrl->flags,SVCRf_LOCKED)); - } while (ctrl->next_waiting!=ctrl && SrvCmdRunOne(GetRFlags,ctrl)); + while (LBts(&ctrl->flags,JOBCf_LOCKED)); + } while (ctrl->next_waiting!=ctrl && JobRunOne(GetRFlags,ctrl)); CLI LBts(&Fs->task_flags,TASKf_AWAITING_MSG); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); LBts(&Fs->task_flags,TASKf_IDLE); Yield; LBtr(&Fs->task_flags,TASKf_IDLE); } } -CSrvCmd *JobQue(I64 (*fp_addr)(U8 *data),U8 *data=NULL, - I64 target_cpu=1,I64 flags=1<aux_str=AStrNew(aux_str); - tmpc->cmd_code=cmd_code; + tmpc->job_code=job_code; tmpc->addr=fp_addr; tmpc->fun_arg=data; - tmpc->target_cpu=target_cpu; tmpc->flags=flags; tmpc->aux1=aux1; tmpc->aux2=aux2; @@ -235,26 +234,26 @@ CSrvCmd *JobQue(I64 (*fp_addr)(U8 *data),U8 *data=NULL, tmpc->ctrl=ctrl=&seth->srv_ctrl; PUSHFD CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) Yield; if (ctrl->next_waiting==ctrl && LBtr(&seth->task_flags,TASKf_AWAITING_MSG)) MPInt(I_WAKE,target_cpu); QueIns(tmpc,ctrl->last_waiting); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD return tmpc; } CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL, I64 target_cpu, CTask *parent=NULL, //NULL means adam - I64 stk_size=0,I64 flags=1<flags,SVCf_DONE)) { + while (!Bt(&tmpc->flags,JOBf_DONE)) { LBts(&Fs->task_flags,TASKf_IDLE); Yield; } @@ -264,12 +263,12 @@ CTask *SpawnQue(U0 (*fp_addr)(U8 *data),U8 *data=NULL,U8 *task_name=NULL, ctrl=tmpc->ctrl; PUSHFD CLI - while (LBts(&ctrl->flags,SVCRf_LOCKED)) + while (LBts(&ctrl->flags,JOBCf_LOCKED)) Yield; QueRem(tmpc); - LBtr(&ctrl->flags,SVCRf_LOCKED); + LBtr(&ctrl->flags,JOBCf_LOCKED); POPFD - SrvCmdDel(tmpc); + JobDel(tmpc); return res; } @@ -301,8 +300,8 @@ U0 Core0StartMP() MPHalt; //sets mp_cnt to 1 for (i=1;iseth_task->srv_ctrl.next_waiting); - SrvCmdQueDel(&c->seth_task->srv_ctrl.next_done); + JobQueDel(&c->seth_task->srv_ctrl.next_waiting); + JobQueDel(&c->seth_task->srv_ctrl.next_done); } } MemSet(&cpu_structs[1],0,sizeof(CCPU)*(MP_MAX_PROCESSORS-1)); @@ -320,13 +319,13 @@ U0 Core0StartMP() WBINVD //Not sure why this is needed. Might just need delay. $LK,"MemCpy",A="MN:MemCpy"$ above? *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4500; //assert init IPI - BusyWait(10000); + Busy(10000); *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4600+MPN_VECT; //start-up - BusyWait(200); + Busy(200); *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4600+MPN_VECT; - BusyWait(100000); + Busy(100000); for (i=0;i<10000;i++) LBts(&mp_cnt_lock,0); //Don't let more through my_mp_cnt=mp_cnt_initial; @@ -335,7 +334,7 @@ U0 Core0StartMP() my_mp_cnt=MP_MAX_PROCESSORS; for (i=1;irflags=RFLAGG_START; //$LK,"CTask",A="MN:CTask"$ alloced off this core's seth_task's heap (Which is Adam) @@ -384,7 +383,7 @@ interrupt U0 IntMPCrash() mp_cnt=1; Raw(ON); text.raw_flags|=RWF_SHOW_DOLLAR; - "MP Crash CPU#%02X Task:%08X\n" + "MP Crash CPU%02X Task:%08X\n" "RIP:%P\n",dbg.mp_crash->cpu_num,dbg.mp_crash->task,dbg.mp_crash->rip; - Dbg(dbg.mp_crash->msg,dbg.mp_crash->msg_num); + Panic(dbg.mp_crash->msg,dbg.mp_crash->msg_num); } diff --git a/Kernel/PCIBIOS.HC b/Kernel/PCIBIOS.HC index 4a46d56..37dd199 100644 --- a/Kernel/PCIBIOS.HC +++ b/Kernel/PCIBIOS.HC @@ -165,7 +165,7 @@ U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg) I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB108; c32_ebx=bus<<8+dev<<3+fun; @@ -174,7 +174,7 @@ U8 PCIReadU8(I64 bus,I64 dev,I64 fun,I64 rg) res=c32_ecx.u8[0]; else res=0xFF; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } @@ -184,7 +184,7 @@ U16 PCIReadU16(I64 bus,I64 dev,I64 fun,I64 rg) I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB109; c32_ebx=bus<<8+dev<<3+fun; @@ -193,7 +193,7 @@ U16 PCIReadU16(I64 bus,I64 dev,I64 fun,I64 rg) res=c32_ecx.u16[0]; else res=0xFFFF; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } @@ -203,7 +203,7 @@ U32 PCIReadU32(I64 bus,I64 dev,I64 fun,I64 rg) I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10A; c32_ebx=bus<<8+dev<<3+fun; @@ -212,7 +212,7 @@ U32 PCIReadU32(I64 bus,I64 dev,I64 fun,I64 rg) res=c32_ecx; else res=0xFFFFFFFF; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } @@ -221,14 +221,14 @@ U0 PCIWriteU8(I64 bus,I64 dev,I64 fun,I64 rg,I64 val) {//Write U8 in PCI configspace at bus,dev,fun,reg. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10B; c32_ebx=bus<<8+dev<<3+fun; c32_edi=rg; c32_ecx=val; FarCall32(sys_pci_services); - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD } @@ -236,14 +236,14 @@ U0 PCIWriteU16(I64 bus,I64 dev,I64 fun,I64 rg,I64 val) {//Write U16 in PCI configspace at bus,dev,fun,reg. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10C; c32_ebx=bus<<8+dev<<3+fun; c32_edi=rg; c32_ecx=val; FarCall32(sys_pci_services); - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD } @@ -251,14 +251,14 @@ U0 PCIWriteU32(I64 bus,I64 dev,I64 fun,I64 rg,I64 val) {//Write U32 in PCI configspace at bus,dev,fun,reg. PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB10D; c32_ebx=bus<<8+dev<<3+fun; c32_edi=rg; c32_ecx=val; FarCall32(sys_pci_services); - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD } @@ -273,7 +273,7 @@ else bus,dev,fun. I64 res; PUSHFD CLI - while (LBts(&sys_semas[SYS_SEMA_FAR_CALL32],0)) + while (LBts(&sys_semas[SEMA_FAR_CALL32],0)) Yield; c32_eax=0xB103; c32_esi=n; @@ -282,7 +282,7 @@ else bus,dev,fun. res=c32_ebx.u8[1]<<16+(c32_ebx&0xF8)<<5+c32_ebx&7; else res=-1; - LBtr(&sys_semas[SYS_SEMA_FAR_CALL32],0); + LBtr(&sys_semas[SEMA_FAR_CALL32],0); POPFD return res; } diff --git a/Kernel/Sched.HC b/Kernel/Sched.HC index ec14d9f..a86b99a 100644 --- a/Kernel/Sched.HC +++ b/Kernel/Sched.HC @@ -155,7 +155,7 @@ _TASK_END_NOW:: _YIELD:: PUSHFD - TEST U8 [SYS_SEMAS+SYS_SEMA_SINGLE_USER*SEMA_STRUCT_SIZE],1 + TEST U8 [SYS_SEMAS+SEMA_SINGLE_USER*DFT_CACHE_LINE_WIDTH],1 JZ @@05 POPFD //If single user, don't change task. RET @@ -169,8 +169,8 @@ _YIELD:: MOV RSI,U64 CTask.next_task[RSI] RESTORE_RSI_TASK: - TEST U64 [SYS_CTRL_ALT_FLAGS],1<=text.cols) { - ip.pos_text.x=text.cols-1; - ip.pos.x=text.cols*FONT_WIDTH-1; - } - ip.pos_text.y=ip.pos.y/FONT_HEIGHT; - if (ip.pos_text.y>=text.rows) { - ip.pos_text.y=text.rows-1; - ip.pos.y=text.rows*FONT_HEIGHT-1; - } - ip.lb=l; - ip.rb=r; - LBEqu(&kbd.scan_code,SCf_IP_L_DOWN,ip.lb); - LBEqu(&kbd.scan_code,SCf_IP_R_DOWN,ip.rb); -} - -U0 IPSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64) -{//Note: Generates a message. See $LK,"IPSet",A="FF:::/Demo/Games/Zing.HC,IPSet"$(). - if (!(0<=x>3; - ip.offset.x=ip.offset.y=ip.offset.z=0; - ip.scale.x=ip.scale.y=ip.scale.z=1.0; - ip.dev=IP_NULL; - ip.pos_text.x=ip.pos_text.y=ip.pos_text.z=0; - ip.has_wheel=FALSE; - ip.show=TRUE; - ip.speed=0; - ip.timestamp=GetTSC; - ip.dbl_time=0.350; - GridInit; -} diff --git a/Kernel/SerialDev/Keyboard.HC b/Kernel/SerialDev/Keyboard.HC index bd3f35b..ff370b3 100644 --- a/Kernel/SerialDev/Keyboard.HC +++ b/Kernel/SerialDev/Keyboard.HC @@ -62,7 +62,7 @@ U0 KbdLEDsSet(I64 sc) Fs->catch_except=TRUE; } -U0 KbdMouseCmdAck(...) +U0 KbdMsCmdAck(...) { I64 i,ack,timeout; for (i=0;ikbd.timestamp) - return mouse.timestamp; + if (ms_hard.timestamp>kbd.timestamp) + return ms_hard.timestamp; else return kbd.new_key_timestamp; } diff --git a/Kernel/SerialDev/MakeSerialDev.HC b/Kernel/SerialDev/MakeSerialDev.HC index c465c45..dc609f6 100644 --- a/Kernel/SerialDev/MakeSerialDev.HC +++ b/Kernel/SerialDev/MakeSerialDev.HC @@ -1,5 +1,4 @@ #exe {Cd(__DIR__);}; -#include "InputPointer" #include "Keyboard" #include "Mouse" #include "Message" diff --git a/Kernel/SerialDev/Message.HC b/Kernel/SerialDev/Message.HC index 50a59ee..e94f246 100644 --- a/Kernel/SerialDev/Message.HC +++ b/Kernel/SerialDev/Message.HC @@ -1,6 +1,6 @@ U0 InputFilterTask() { - CSrvCmd *tmpc,*tmpc1; + CJob *tmpc,*tmpc1; Bool old_filter; I64 old_flags=GetRFlags; Fs->win_inhibit=WIG_USER_TASK_DFT; @@ -9,20 +9,20 @@ U0 InputFilterTask() LBEqu(&Fs->task_flags,TASKf_FILTER_INPUT,old_filter); while (TRUE) { CLI - SrvCmdsHandler(old_flags); + JobsHndlr(old_flags); tmpc1=&Fs->srv_ctrl.next_waiting; tmpc=tmpc1->next; if (tmpc==tmpc1) break; else { - if (tmpc->cmd_code==SVCT_TEXT_INPUT) { + if (tmpc->job_code==JOBT_TEXT_INPUT) { QueRem(tmpc); SetRFlags(old_flags); try ExePrint("%s",tmpc->aux_str); catch Fs->catch_except=TRUE; - SrvCmdDel(tmpc); + JobDel(tmpc); } else break; } @@ -34,7 +34,7 @@ U0 InputFilterTask() SetRFlags(old_flags); } -I64 ScanMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL) +I64 ScanMsg(I64 *_arg1=NULL,I64 *_arg2=NULL,I64 mask=~1,CTask *task=NULL) {/*Check for a message of type specified by a one in the mask. Throw-out messages not in mask. If no message fit mask, return NULL immediately. @@ -42,27 +42,27 @@ Remove desired message, return $LK,"msg_code",A="MN:MSG_CMD"$. Note: This delivers messages from parent down to pop-up. */ I64 res,old_flags; - CSrvCmd *tmpc,*tmpc1; + CJob *tmpc,*tmpc1; if (!task) task=Fs; old_flags=GetRFlags; tmpc1=&task->srv_ctrl.next_waiting; while (TRUE) { CLI if (task==Fs) - SrvCmdsHandler(old_flags); + JobsHndlr(old_flags); tmpc=tmpc1->next; if (tmpc==tmpc1) break; else { - if (tmpc->cmd_code==SVCT_MSG) { + if (tmpc->job_code==JOBT_MSG) { QueRem(tmpc); SetRFlags(old_flags); res=tmpc->msg_code; - if (_a1) - *_a1=tmpc->aux1; - if (_a2) - *_a2=tmpc->aux2; - SrvCmdDel(tmpc); + if (_arg1) + *_arg1=tmpc->aux1; + if (_arg2) + *_arg2=tmpc->aux2; + JobDel(tmpc); if ((res!=MSG_KEY_DOWN || !(tmpc->aux2&SCF_KEY_DESC) || !Bt(&task->win_inhibit,WIf_SELF_KEY_DESC)) && Bt(&mask,res)) goto sm_done; @@ -71,13 +71,13 @@ Note: This delivers messages from parent down to pop-up. SetRFlags(old_flags); } res=MSG_NULL; - if (_a1) - *_a1=0; - if (_a2) - *_a2=0; + if (_arg1) + *_arg1=0; + if (_arg2) + *_arg2=0; if (task->parent_task&&task->parent_task->popup_task==task) { SetRFlags(old_flags); - return ScanMsg(_a1,_a2,mask,task->parent_task); + return ScanMsg(_arg1,_arg2,mask,task->parent_task); } sm_done: SetRFlags(old_flags); @@ -86,20 +86,20 @@ sm_done: I64 FlushMsgs(CTask *task=NULL) {//Throw away all messages. Return count. - I64 res=0,a1,a2; - while (ScanMsg(&a1,&a2,~1,task)) + I64 res=0,arg1,arg2; + while (ScanMsg(&arg1,&arg2,~1,task)) res++; return res; } -I64 GetMsg(I64 *_a1=NULL,I64 *_a2=NULL,I64 mask=~1,CTask *task=NULL) +I64 GetMsg(I64 *_arg1=NULL,I64 *_arg2=NULL,I64 mask=~1,CTask *task=NULL) {//Wait for a message of type specified by a one in the mask. //Throw-out all messages not in mask. //Returns $LK,"msg_code",A="MN:MSG_CMD"$. See $LK,"::/Demo/MsgLoop.HC"$. I64 res; if (!task) task=Fs; LBtr(&task->task_flags,TASKf_IDLE); - while (!(res=ScanMsg(_a1,_a2,mask,task))) { + while (!(res=ScanMsg(_arg1,_arg2,mask,task))) { LBts(&task->task_flags,TASKf_IDLE); Yield; } @@ -111,13 +111,13 @@ I64 ScanChar() {//Checks for $LK,"MSG_KEY_DOWN",A="MN:MSG_KEY_DOWN"$ and returns 0 immediately if no key. //Waits for $LK,"MSG_KEY_UP",A="MN:MSG_KEY_UP"$ of non-zero $LK,"ASCII",A="MN:CH_CTRLA"$ key and returns $LK,"ASCII",A="MN:CH_CTRLA"$ if key. //$LK,"ScanMsg",A="MN:ScanMsg"$() throws away other message types. - I64 a1a,a2a,a1b,a2b; - if (!ScanMsg(&a1a,&a2a,1<mouse.timestamp+cnts.time_stamp_freq>>3) - FifoU8Flush(mouse.fifo); - mouse.timestamp=GetTSC; - FifoU8Ins(mouse.fifo,InU8(KBD_PORT)); - if (FifoU8Cnt(mouse.fifo)==mouse.pkt_size) - while (FifoU8Rem(mouse.fifo,&j)) - FifoU8Ins(mouse.fifo2,j); +U0 GridInit() +{//Init mouse grid struct. See $LK,"::/Demo/Graphics/Grid.HC"$. + ms_grid.x=ms_grid.y=ms_grid.z=8; + ms_grid.x_offset=ms_grid.y_offset=ms_grid.z_offset=0; + ms_grid.x_speed =ms_grid.y_speed =ms_grid.z_speed =1; + ms_grid.show=ms_grid.snap=FALSE; } -interrupt U0 IRQMouse() +U0 MsUpdate(I64 x,I64 y,I64 z,Bool l,Bool r) +{ + ms.presnap.x=ToI64(ms.scale.x*x)+ms.offset.x; + ms.presnap.y=ToI64(ms.scale.y*y)+ms.offset.y; + ms.presnap.z=ToI64(ms.scale.z*z)+ms.offset.z; + if (ms_grid.snap) { + ms.pos.x=Trunc(ms.presnap.x/ms_grid.x)*ms_grid.x+ms_grid.x_offset; + ms.pos.y=Trunc(ms.presnap.y/ms_grid.y)*ms_grid.y+ms_grid.y_offset; + ms.pos.z=Trunc(ms.presnap.z/ms_grid.z)*ms_grid.z+ms_grid.z_offset; + } else { + ms.pos.x=ms.presnap.x; + ms.pos.y=ms.presnap.y; + ms.pos.z=ms.presnap.z; + } + + ms.pos.x=ClampI64(ms.pos.x,0,GR_WIDTH-1); + ms.pos.y=ClampI64(ms.pos.y,0,GR_HEIGHT-1); + ms.pos_text.x=ms.pos.x/FONT_WIDTH; + if (ms.pos_text.x>=text.cols) { + ms.pos_text.x=text.cols-1; + ms.pos.x=text.cols*FONT_WIDTH-1; + } + ms.pos_text.y=ms.pos.y/FONT_HEIGHT; + if (ms.pos_text.y>=text.rows) { + ms.pos_text.y=text.rows-1; + ms.pos.y=text.rows*FONT_HEIGHT-1; + } + ms.lb=l; + ms.rb=r; + LBEqu(&kbd.scan_code,SCf_MS_L_DOWN,ms.lb); + LBEqu(&kbd.scan_code,SCf_MS_R_DOWN,ms.rb); +} + +U0 MsSet(I64 x=MAX_I64,I64 y=MAX_I64,I64 z=MAX_I64,I64 l=MAX_I64,I64 r=MAX_I64) +{//Note: Generates a message. See $LK,"MsSet",A="FF:::/Demo/Games/Zing.HC,MsSet"$(). + if (!(0<=xms_hard.timestamp+cnts.time_stamp_freq>>3) + FifoU8Flush(ms_hard.fifo); + ms_hard.timestamp=GetTSC; + FifoU8Ins(ms_hard.fifo,InU8(KBD_PORT)); + if (FifoU8Cnt(ms_hard.fifo)==ms_hard.pkt_size) + while (FifoU8Rem(ms_hard.fifo,&j)) + FifoU8Ins(ms_hard.fifo2,j); +} + +interrupt U0 IRQMsHard() { CLD OutU8(0xA0,0x20); OutU8(0x20,0x20); - mouse.irqs_working=TRUE; - if (mouse.install_in_progress || !mouse.installed) { + ms_hard.irqs_working=TRUE; + if (ms_hard.install_in_progress || !ms_hard.installed) { kbd.rst=TRUE; return; } - MousePktRead; + MsHardPktRead; } -U0 MouseGetDevType() +U0 MsHardGetType() { I64 b; - KbdMouseCmdAck(0xF2); + KbdMsCmdAck(0xF2); b=KbdCmdRead; if (b==3) - mouse.has_wheel=TRUE; + ms_hard.has_wheel=TRUE; else if (b==4) - mouse.has_ext_buttons=TRUE; + ms_hard.has_ext_bttns=TRUE; } -Bool MouseRst() +Bool MsHardRst() { U8 b,*_b; F64 timeout; Bool res=FALSE; - mouse.has_wheel=FALSE; - mouse.has_ext_buttons=FALSE; + ms_hard.has_wheel=FALSE; + ms_hard.has_ext_bttns=FALSE; if (*0x40E(U16 *)==0x9FC0) { _b=0x9FC00+0x30; @@ -54,7 +131,7 @@ Bool MouseRst() KbdCmdSend(KBD_CTRL,0xAD); //Disable Kbd KbdCmdSend(KBD_CTRL,0xA8); //Enable Mouse - KbdMouseCmdAck(0xFF); //Rst + KbdMsCmdAck(0xFF); //Rst timeout=tS+10.0; do @@ -70,11 +147,11 @@ Bool MouseRst() catch Fs->catch_except=TRUE; - KbdMouseCmdAck(0xF3,200,0xF3,100,0xF3,80); - MouseGetDevType; - KbdMouseCmdAck(0xF3,10); - MouseGetDevType; - KbdMouseCmdAck(0xE8,0x03,0xE6,0xF3,100,0xF4); + KbdMsCmdAck(0xF3,200,0xF3,100,0xF3,80); + MsHardGetType; + KbdMsCmdAck(0xF3,10); + MsHardGetType; + KbdMsCmdAck(0xE8,0x03,0xE6,0xF3,100,0xF4); res=TRUE; //Enable IRQ 12 @@ -94,10 +171,10 @@ Bool MouseRst() KbdCmdSend(KBD_CTRL,0xAE); //Enable Keyboard catch Fs->catch_except=TRUE; - if (mouse.has_wheel || mouse.has_ext_buttons) - mouse.pkt_size=4; + if (ms_hard.has_wheel || ms_hard.has_ext_bttns) + ms_hard.pkt_size=4; else - mouse.pkt_size=3; + ms_hard.pkt_size=3; if (!res) try KbdCmdSend(KBD_CTRL,0xA7); //Disable Mouse @@ -106,147 +183,147 @@ Bool MouseRst() return res; } -U0 MouseSpeedSet() +U0 MsHardSpeedSet() { I64 dd,tmp; - if ((dd=SqrI64(mouse_last.pos.x-mouse.pos.x) - +SqrI64(mouse_last.pos.y-mouse.pos.y)) && - (tmp=mouse.timestamp-mouse_last.timestamp)) - mouse.speed=Sqrt(dd)*cnts.time_stamp_freq/tmp; - mouse_last.timestamp=mouse.timestamp; + if ((dd=SqrI64(ms_hard_last.pos.x-ms_hard.pos.x) + +SqrI64(ms_hard_last.pos.y-ms_hard.pos.y)) && + (tmp=ms_hard.timestamp-ms_hard_last.timestamp)) + ms_hard.speed=Sqrt(dd)*cnts.time_stamp_freq/tmp; + ms_hard_last.timestamp=ms_hard.timestamp; } -U0 MouseUpdatePre() +U0 MsHardSetPre() { - I64 old_timestamp=mouse_last.timestamp; - MemCpy(&mouse_last,&mouse,sizeof(CMouseStateGlbls)); - mouse_last.timestamp=old_timestamp; + I64 old_timestamp=ms_hard_last.timestamp; + MemCpy(&ms_hard_last,&ms_hard,sizeof(CMsHardStateGlbls)); + ms_hard_last.timestamp=old_timestamp; } -U0 MouseUpdatePost() +U0 MsHardSetPost() { I64 i; - mouse.pos.x=mouse.prescale.x*mouse.scale.x*ip_grid.x_speed; - mouse.pos.y=mouse.prescale.y*mouse.scale.y*ip_grid.y_speed; - mouse.pos.z=mouse.prescale.z*mouse.scale.z*ip_grid.z_speed; + ms_hard.pos.x=ms_hard.prescale.x*ms_hard.scale.x*ms_grid.x_speed; + ms_hard.pos.y=ms_hard.prescale.y*ms_hard.scale.y*ms_grid.y_speed; + ms_hard.pos.z=ms_hard.prescale.z*ms_hard.scale.z*ms_grid.z_speed; - i=Trunc(ip.scale.x*mouse.pos.x/ip_grid.x)*ip_grid.x+ip.offset.x; -//TODO ip_grid.x_offset? + i=Trunc(ms.scale.x*ms_hard.pos.x/ms_grid.x)*ms_grid.x+ms.offset.x; +//TODO ms_grid.x_offset? if (i<0) - ip.offset.x-=i; + ms.offset.x-=i; else if (i>=GR_WIDTH) - ip.offset.x+=GR_WIDTH-1-i; + ms.offset.x+=GR_WIDTH-1-i; - i=Trunc(ip.scale.y*mouse.pos.y/ip_grid.y)*ip_grid.y+ip.offset.y; + i=Trunc(ms.scale.y*ms_hard.pos.y/ms_grid.y)*ms_grid.y+ms.offset.y; if (i<0) - ip.offset.y-=i; + ms.offset.y-=i; else if (i>=GR_HEIGHT) - ip.offset.y+=GR_HEIGHT-1-i; + ms.offset.y+=GR_HEIGHT-1-i; - if (mouse.pos.x!=mouse_last.pos.x || mouse.pos.y!=mouse_last.pos.y || - mouse.pos.z!=mouse_last.pos.z) { - mouse.evt=TRUE; - MouseSpeedSet; + if (ms_hard.pos.x!=ms_hard_last.pos.x || ms_hard.pos.y!=ms_hard_last.pos.y || + ms_hard.pos.z!=ms_hard_last.pos.z) { + ms_hard.evt=TRUE; + MsHardSpeedSet; } else for (i=0;i<5;i++) - if (mouse.buttons[i]!=mouse_last.buttons[i]) { - mouse.evt=TRUE; + if (ms_hard.bttns[i]!=ms_hard_last.bttns[i]) { + ms_hard.evt=TRUE; break; } } -U0 MouseHandler() +U0 MsHardHndlr() { I64 i,dx,dy,dz; - U8 mouse_buf[4]; + U8 ms_buf[4]; - MouseUpdatePre; + MsHardSetPre; for (i=0;i<4;i++) - mouse_buf[i]=0; - for (i=0;i> 1; - mouse.buttons[2] = (mouse_buf[0] & 4) >> 2; - mouse.buttons[3] = (mouse_buf[3] & 0x10) >> 4; - mouse.buttons[4] = (mouse_buf[3] & 0x20) >> 5; - if (mouse_buf[0] & 0x10) - dx=mouse_buf[1]-256; + ms_hard.bttns[0] = ms_buf[0] & 1; + ms_hard.bttns[1] = (ms_buf[0] & 2) >> 1; + ms_hard.bttns[2] = (ms_buf[0] & 4) >> 2; + ms_hard.bttns[3] = (ms_buf[3] & 0x10) >> 4; + ms_hard.bttns[4] = (ms_buf[3] & 0x20) >> 5; + if (ms_buf[0] & 0x10) + dx=ms_buf[1]-256; else - dx=mouse_buf[1]; - if (mouse_buf[0] & 0x20) - dy=256-mouse_buf[2]; + dx=ms_buf[1]; + if (ms_buf[0] & 0x20) + dy=256-ms_buf[2]; else - dy=-mouse_buf[2]; - if (mouse_buf[3] & 0x08) - dz=mouse_buf[3]&7-8; + dy=-ms_buf[2]; + if (ms_buf[3] & 0x08) + dz=ms_buf[3]&7-8; else - dz=mouse_buf[3]&7; + dz=ms_buf[3]&7; - mouse.prescale.x+=dx; - mouse.prescale.y+=dy; - mouse.prescale.z+=dz; + ms_hard.prescale.x+=dx; + ms_hard.prescale.y+=dy; + ms_hard.prescale.z+=dz; - MouseUpdatePost; + MsHardSetPost; } -U0 MouseIPSet(I64 x,I64 y,I64 z,I64 l,I64 r) +U0 MsHardSet(I64 x,I64 y,I64 z,I64 l,I64 r) { - mouse.timestamp=GetTSC; - MouseUpdatePre; - mouse.prescale.x=x/mouse.scale.x/ip_grid.x_speed; - mouse.prescale.y=y/mouse.scale.y/ip_grid.y_speed; - mouse.prescale.z=z/mouse.scale.z/ip_grid.z_speed; - mouse.buttons[0]=l; - mouse.buttons[1]=r; - MouseUpdatePost; + ms_hard.timestamp=GetTSC; + MsHardSetPre; + ms_hard.prescale.x=x/ms_hard.scale.x/ms_grid.x_speed; + ms_hard.prescale.y=y/ms_hard.scale.y/ms_grid.y_speed; + ms_hard.prescale.z=z/ms_hard.scale.z/ms_grid.z_speed; + ms_hard.bttns[0]=l; + ms_hard.bttns[1]=r; + MsHardSetPost; } -U0 KbdMouseRst() +U0 KbdMsRst() { KbdCmdFlush; FifoU8Flush(kbd.fifo2); - FifoU8Flush(mouse.fifo2); + FifoU8Flush(ms_hard.fifo2); FifoI64Flush(kbd.scan_code_fifo); kbd.scan_code=0; kbd.rst=FALSE; } -Bool MouseDriverInstall(I64 dummy=0) //can be spawned +Bool MsHardDrvrInstall(I64 dummy=0) //can be spawned { no_warn dummy; I64 i; - mouse.install_in_progress=TRUE; + ms_hard.install_in_progress=TRUE; OutU8(0xA1,InU8(0xA1)|0x10); - mouse.installed=mouse.irqs_working=FALSE; - IntEntrySet(0x2C,&IRQMouse); + ms_hard.installed=ms_hard.irqs_working=FALSE; + IntEntrySet(0x2C,&IRQMsHard); for(i=0;i<5;i++) - mouse.buttons[i]=0; - if (i=MouseRst) + ms_hard.bttns[i]=0; + if (i=MsHardRst) OutU8(0xA1,InU8(0xA1)&~0x10); - KbdMouseRst; - mouse.install_attempts++; - mouse.installed=mouse.evt=i; - mouse.install_in_progress=FALSE; - return mouse.installed; + KbdMsRst; + ms_hard.install_attempts++; + ms_hard.installed=ms_hard.evt=i; + ms_hard.install_in_progress=FALSE; + return ms_hard.installed; } -U0 KbdMouseHandler(Bool poll_kbd,Bool poll_mouse) +U0 KbdMsHndlr(Bool poll_kbd,Bool poll_ms) { - if (mouse.install_in_progress) { + if (ms_hard.install_in_progress) { Yield; return; } if (kbd.rst) - KbdMouseRst; + KbdMsRst; else { - if (poll_mouse && mouse.installed && !mouse.irqs_working) { + if (poll_ms && ms_hard.installed && !ms_hard.irqs_working) { PUSHFD CLI while (InU8(KBD_CTRL)&1) - MousePktRead; + MsHardPktRead; POPFD } @@ -255,36 +332,36 @@ U0 KbdMouseHandler(Bool poll_kbd,Bool poll_mouse) KbdPktRead; if (kbd.rst) - KbdMouseRst; + KbdMsRst; else { while (FifoU8Cnt(kbd.fifo2)) - KbdHandler; - while (FifoU8Cnt(mouse.fifo2)) - if (mouse.installed) - MouseHandler; + KbdHndlr; + while (FifoU8Cnt(ms_hard.fifo2)) + if (ms_hard.installed) + MsHardHndlr; else - KbdMouseRst; + KbdMsRst; } } } -U0 KbdMouseVarsInit() +U0 KbdMsInit() { MemSet(&kbd,0,sizeof(CKbdStateGlbls)); kbd.fifo=FifoU8New(8); kbd.fifo2=FifoU8New(64); kbd.scan_code_fifo=FifoI64New(128); kbd.irqs_working=FALSE; - MemSet(&mouse,0,sizeof(CMouseStateGlbls)); - mouse.fifo=FifoU8New(8); - mouse.fifo2=FifoU8New(64); - mouse.scale.x=0.5; - mouse.scale.y=0.5; - mouse.scale.z=1.0; - mouse.prescale.x=GR_WIDTH/mouse.scale.x/2.0; - mouse.prescale.y=GR_HEIGHT/mouse.scale.y/2.0; - mouse.prescale.z=0/mouse.scale.z; - mouse.pos.x=GR_WIDTH>>1; - mouse.pos.y=GR_HEIGHT>>1; - MemCpy(&mouse_last,&mouse,sizeof(CMouseStateGlbls)); + MemSet(&ms_hard,0,sizeof(CMsHardStateGlbls)); + ms_hard.fifo=FifoU8New(8); + ms_hard.fifo2=FifoU8New(64); + ms_hard.scale.x=0.5; + ms_hard.scale.y=0.5; + ms_hard.scale.z=1.0; + ms_hard.prescale.x=GR_WIDTH/ms_hard.scale.x/2.0; + ms_hard.prescale.y=GR_HEIGHT/ms_hard.scale.y/2.0; + ms_hard.prescale.z=0/ms_hard.scale.z; + ms_hard.pos.x=GR_WIDTH>>1; + ms_hard.pos.y=GR_HEIGHT>>1; + MemCpy(&ms_hard_last,&ms_hard,sizeof(CMsHardStateGlbls)); } diff --git a/Kernel/StrA.HC b/Kernel/StrA.HC index 97d6217..5db105d 100644 --- a/Kernel/StrA.HC +++ b/Kernel/StrA.HC @@ -322,78 +322,73 @@ _extern _STRCPY U0 StrCpy( //These bitmaps go to 0-511 so that $LK,"Lex",A="MN:Lex"$() can use them with $LK,"Token Codes",A="MN:TK_EOF"$. U32 - chars_bmp_alpha[16]= + char_bmp_alpha[16]= {0x0000000,0x00000000,0x87FFFFFF,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_alpha_numeric[16]= + char_bmp_alpha_numeric[16]= {0x0000000,0x03FF0000,0x87FFFFFF,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_alpha_numeric_no_at[16]= + char_bmp_alpha_numeric_no_at[16]= {0x0000000,0x03FF0000,0x87FFFFFE,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_word[16]= + char_bmp_word[16]= {0x0000000,0x03FF0080,0x87FFFFFE,0x07FFFFFE, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_filename[16]= + char_bmp_filename[16]= {0x0000000,0x03FF73FB,0xEFFFFFFF,0x6FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_dec_numeric[16]= + char_bmp_dec_numeric[16]= {0x0000000,0x03FF0000,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_hex_numeric[16]= + char_bmp_hex_numeric[16]= {0x0000000,0x03FF0000,0x7E,0x7E,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_white_space[16]= - {0x80003600,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_white_space[16]= + {0x80002600,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_non_eol_white_space[16]= - {0x80001200,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_non_eol_white_space[16]= + {0x80000200,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_zero_cr_nl_cursor[16]= + char_bmp_zero_cr_nl_cursor[16]= {0x00002421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_zero_tab_ff_cr_nl_cursor[16]= - {0x00003621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_zero_tab_cr_nl_cursor[16]= + {0x00002621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_zero_tab_ff_cr_nl_cursor_dollar[16]= - {0x00003621,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + char_bmp_zero_tab_cr_nl_cursor_dollar[16]= + {0x00002621,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, - chars_bmp_getkey[16]= - {0x80002600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, - 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, - 0,0,0,0,0,0,0,0}, - - chars_bmp_macro[16]= + char_bmp_macro[16]= {0x80002600,0xFFFFFFDF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_printable[16]= - {0x80003600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, + char_bmp_printable[16]= + {0x80002600,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_displayable[16]= + char_bmp_displayable[16]= {0x80000000,0xFFFFFFFF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0}, - chars_bmp_safe_dollar[16]= + char_bmp_safe_dollar[16]= {0x80000000,0xFFFFFFEF,0xFFFFFFFF,0x7FFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0,0,0,0,0,0,0,0},//same but no dollar sign - chars_bmp_non_eol[16]= + char_bmp_non_eol[16]= {0xFFFFDBFE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, @@ -527,14 +522,14 @@ U8 *StrUtil(U8 *_src,I64 flags) I64 ch; if (flags & SUF_REM_LEADING) - while (Bt(chars_bmp_white_space,*src)) + while (Bt(char_bmp_white_space,*src)) src++; while (ch=*src++) - if (Bt(chars_bmp_white_space,ch)) { + if (Bt(char_bmp_white_space,ch)) { if (!(flags & SUF_REM_SPACES)) { if (flags & SUF_SINGLE_SPACE) { *dst++ = CH_SPACE; - while ((ch=*src++) && Bt(chars_bmp_white_space,ch)); + while ((ch=*src++) && Bt(char_bmp_white_space,ch)); src--; } else *dst++ = ch; @@ -544,7 +539,7 @@ U8 *StrUtil(U8 *_src,I64 flags) *dst=0; if (flags & SUF_REM_TRAILING) - while (dst!=_src && (!*dst || Bt(chars_bmp_white_space,*dst))) + while (dst!=_src && (!*dst || Bt(char_bmp_white_space,*dst))) *dst-- =0; if (flags & SUF_TO_UPPER) for (dst=_src;*dst;dst++) { @@ -561,7 +556,7 @@ U8 *StrUtil(U8 *_src,I64 flags) if (flags & SUF_SAFE_DOLLAR) for (dst=_src;*dst;dst++) { ch=*dst; - if (!Bt(chars_bmp_safe_dollar,*dst)) + if (!Bt(char_bmp_safe_dollar,*dst)) *dst='.'; } if (flags & SUF_S2T) @@ -634,7 +629,7 @@ U8 *StrFind(U8 *needle,U8 *haystack_str,I64 flags=0) haystack_str=StrMatch(needle,haystack_str); if (haystack_str && flags & SFF_WHOLE_LABELS_BEFORE && haystack_str!=saved_haystack_str && - Bt(chars_bmp_alpha_numeric,*(haystack_str-1))) { + Bt(char_bmp_alpha_numeric,*(haystack_str-1))) { haystack_str++; if (*haystack_str) cont=TRUE; @@ -642,7 +637,7 @@ U8 *StrFind(U8 *needle,U8 *haystack_str,I64 flags=0) haystack_str=NULL; } if (haystack_str && flags & SFF_WHOLE_LABELS_AFTER && - Bt(chars_bmp_alpha_numeric,*(haystack_str+plen))) { + Bt(char_bmp_alpha_numeric,*(haystack_str+plen))) { haystack_str++; if (*haystack_str) cont=TRUE; diff --git a/Kernel/StrPrint.HC b/Kernel/StrPrint.HC index bc82467..a57f257 100644 --- a/Kernel/StrPrint.HC +++ b/Kernel/StrPrint.HC @@ -162,7 +162,7 @@ U8 *MPrintq(U8 *ptr,I64 flags) ptr++; for (j=0;j<2;j++) { ch1=ToUpper(*ptr++); - if (Bt(chars_bmp_hex_numeric,ch1)) { + if (Bt(char_bmp_hex_numeric,ch1)) { if (ch1<='9') i=i<<4+ch1-'0'; else diff --git a/Kernel/StrScan.HC b/Kernel/StrScan.HC index 738ab91..8e92b55 100644 --- a/Kernel/StrScan.HC +++ b/Kernel/StrScan.HC @@ -8,7 +8,7 @@ I64 Str2I64(U8 *st,I64 radix=10,U8 **_end_ptr=NULL) if (_end_ptr) *_end_ptr=st; return 0; } - while (Bt(chars_bmp_white_space,*st)) + while (Bt(char_bmp_white_space,*st)) st++; while (TRUE) switch (*st) { @@ -66,7 +66,7 @@ to avoid this. Bool neg=FALSE,neg_e=FALSE; ch=*src++; - while (Bt(chars_bmp_white_space,ch)) + while (Bt(char_bmp_white_space,ch)) ch=*src++; if (ch=='-') { neg=TRUE; @@ -84,7 +84,7 @@ to avoid this. } i=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) i=i*10+ch-'0'; else { if (ch=='.' || ch=='e' || ch=='E') @@ -98,7 +98,7 @@ to avoid this. ch=*src++; k=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) { + if (Bt(char_bmp_dec_numeric,ch)) { i=i*10+ch-'0'; k++; } else { @@ -116,7 +116,7 @@ to avoid this. } j=0; while (TRUE) { - if (Bt(chars_bmp_dec_numeric,ch)) + if (Bt(char_bmp_dec_numeric,ch)) j=j*10+ch-'0'; else { if (neg_e) diff --git a/Misc/DoDistro.HC b/Misc/DoDistro.HC index 07713c6..cbf4907 100644 --- a/Misc/DoDistro.HC +++ b/Misc/DoDistro.HC @@ -1,6 +1,6 @@ //Make Your own Distro by #include-ing this file. -#define STD_DISTRO_DVD_CFG "Tb\nScale2Mem(2048,0x40000)\nt \n\n\n\n" +#define STD_DISTRO_DVD_CFG "TB\nScale2Mem(2048,0x40000)\nT \n\n\n\n" U0 MakeMyISO(U8 *_out_iso_filename) {//Does everything with current drive. diff --git a/Misc/OSInstall.HC b/Misc/OSInstall.HC index 860fe76..3b19d75 100644 --- a/Misc/OSInstall.HC +++ b/Misc/OSInstall.HC @@ -20,8 +20,7 @@ U0 InstallDrv(U8 drv_let) Bool VMPrtDsk(CTask *task,CATARep *ata_drv) { if (ata_drv) { - XTalkWait(task,"PrtDsk;\nYCp%d\nYYY",ata_drv->num); - XTalkWait(task,"%d\nY\nY\n",(drv_dsk_dsk_size-DRV_HEADER)/2); + XTalkWait(task,"PrtDsk(,0.5,0.5);\nC\np%d\nY",ata_drv->num); return TRUE; } else return FALSE; @@ -33,7 +32,7 @@ U0 VMInstallDrv(CTask *task,U8 drv_let, InstallDrv(drv_let); XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n",drv_let); if (ata_drv) - XTalkWait(task,"Cp%d\n",ata_drv->num); + XTalkWait(task,"C\np%d\n",ata_drv->num); if (atapi_drv) XTalkWait(task,"Tp%d\n",atapi_drv->num); XTalkWait(task,"\n\n\n"); //Exit Drives,Dsk Cache,Options @@ -90,7 +89,7 @@ U0 RegularInstallWiz() WinVert(Fs->win_top,(Fs->win_top+Fs->win_bottom)>>2-1,task); WinVert(task->win_bottom+3,Fs->win_bottom); WinToTop(Fs); - XTalk(task,"Mount;\nCp"); + XTalk(task,"Mount;\nC\np"); num_hints=ATARep(FALSE,,&head); "\nInclude '$$PURPLE$$0x$$FG$$' for hexidecimal numbers.\n\n"; @@ -126,7 +125,10 @@ U0 RegularInstallWiz() DrvRep; do { st=GetStr("\nDestination Partition Letter: "); - drv_let=ToUpper(*st); + if (*st) + drv_let=Let2Let(*st); + else + drv_let=0; Free(st); } while (!('A'<=drv_let<='Z')); '\n'; @@ -148,7 +150,7 @@ U0 RegularInstallWiz() } InstallDrv(drv_let); XTalkWait(task,"BootHDIns('%C');\n\nB\n0x20000\n" - "Cs%s\n%s\n%C\n\n\n", //Exit Drives,Dsk Cache,Options + "C\ns%s\n%s\n%C\n\n\n", //Exit Drives,Dsk Cache,Options drv_let,base0,base1,'0'+unit); "$$RED$$Install Master Boot loader?$$FG$$"; if (YorN) { diff --git a/Misc/OSTestSuite.HC b/Misc/OSTestSuite.HC index 1536113..5e6df29 100644 --- a/Misc/OSTestSuite.HC +++ b/Misc/OSTestSuite.HC @@ -1,32 +1,47 @@ -U0 TS(I64 i,F64 t0) -{ - progress4=i; - progress4_max=172; - progress4_t0=t0; +I64 ts_i; +F64 ts_t0; + +U0 TS(U8 *desc) +{//We must set these because an app can call $LK,"ProgressBarsRst",A="MN:ProgressBarsRst"$. + U8 *st=MStrPrint("%d. %s",ts_i,desc); + if (*desc) + progress3_max=1; + else + progress3_max=0; + StrPrint(progress3_desc,"%*hc%s", + (PROGRESS_DESC_LEN-StrLen(st))>>1,CH_SPACE,st); + Free(st); + progress4=ts_i++; + progress4_max=170; + progress4_t0=ts_t0; *progress4_desc=0; + RegExe("TempleOS/OSTestSuite"); } -U0 TSFile(U8 *name,I64 ms=750) + +U0 TSFile(U8 *name,I64 mS=750) { - CTask *task=User("#include \"%s\";Sleep(%d);\n",name,ms); + CTask *task=User("#include \"%s\";Sleep(%d);\n",name,mS); DeathWait(&task,TRUE); } -U0 TSFileChar(U8 *name,I64 ms=750,I64 ch=CH_SPACE,Bool wait=TRUE) + +U0 TSFileChar(U8 *name,I64 mS=750,I64 ch=CH_SPACE,Bool wait=TRUE) { CTask *task=User; if (wait) XTalkWait(task,"#include \"%s\";\n",name); else XTalk(task,"#include \"%s\";\n",name); - Sleep(ms); + Sleep(mS); if (ch) PostMsgWait(task,MSG_KEY_DOWN_UP,ch,0); DeathWait(&task,TRUE); } + /* -U0 DoInputPointer() +U0 DoMouseDemo() { CTask *task=User; - XTalkWait(task,"#include \"::/Demo/Graphics/InputPointer\";\n"); + XTalkWait(task,"#include \"::/Demo/Graphics/MouseDemo\";\n"); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task,TRUE); @@ -232,8 +247,8 @@ U0 DoDoodle() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Doodle\";\n"); - PostMsgWait(task,MSG_IP_L_DOWN,10,10); - PostMsgWait(task,MSG_IP_L_UP,100,200); + PostMsgWait(task,MSG_MS_L_DOWN,10,10); + PostMsgWait(task,MSG_MS_L_UP,100,200); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -244,16 +259,16 @@ U0 DoSpeedLine() I64 i=PURPLE+1; //+1 because TRANSPARENT CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Speedline\";\n"); - PostMsgWait(task,MSG_IP_L_DOWN,10,10); - PostMsgWait(task,MSG_IP_L_UP,100,200); - PostMsg(task,MSG_IP_R_DOWN_UP,0,0); + PostMsgWait(task,MSG_MS_L_DOWN,10,10); + PostMsgWait(task,MSG_MS_L_UP,100,200); + PostMsg(task,MSG_MS_R_DOWN_UP,0,0); BirthWait(&task->popup_task); while (i--) PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_ESC,0); TaskWait(task); - PostMsgWait(task,MSG_IP_L_DOWN,50,10); - PostMsgWait(task,MSG_IP_L_UP,150,200); + PostMsgWait(task,MSG_MS_L_DOWN,50,10); + PostMsgWait(task,MSG_MS_L_UP,150,200); Sleep(1000); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -271,13 +286,6 @@ U0 DoKeyBitMap() DeathWait(&task,TRUE); } -U0 DoMountain() -{ - CTask *task=User("#include \"::/Demo/Graphics/Mountain\";\n"); - Sleep(1500); - Kill(task); -} - U0 DoDigits() { CTask *task=User; @@ -297,14 +305,14 @@ U0 DoSymmetry() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Symmetry\";\n"); - PostMsgWait(task,MSG_IP_R_DOWN,100,100); - PostMsgWait(task,MSG_IP_R_UP,200,200); + PostMsgWait(task,MSG_MS_R_DOWN,100,100); + PostMsgWait(task,MSG_MS_R_UP,200,200); Sleep(100); - PostMsgWait(task,MSG_IP_L_DOWN,10,10); - PostMsgWait(task,MSG_IP_L_UP,100,200); + PostMsgWait(task,MSG_MS_L_DOWN,10,10); + PostMsgWait(task,MSG_MS_L_UP,100,200); Sleep(250); - PostMsgWait(task,MSG_IP_L_DOWN,100,200); - PostMsgWait(task,MSG_IP_L_UP,400,400); + PostMsgWait(task,MSG_MS_L_DOWN,100,200); + PostMsgWait(task,MSG_MS_L_UP,400,400); Sleep(250); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -314,10 +322,10 @@ U0 DoBSpline() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/BSpline\";\n"); - PostMsgWait(task,MSG_IP_L_DOWN_UP,50,50); - PostMsgWait(task,MSG_IP_L_DOWN_UP,300,100); - PostMsgWait(task,MSG_IP_L_DOWN_UP,150,300); - PostMsgWait(task,MSG_IP_R_DOWN_UP,0,0); + PostMsgWait(task,MSG_MS_L_DOWN_UP,50,50); + PostMsgWait(task,MSG_MS_L_DOWN_UP,300,100); + PostMsgWait(task,MSG_MS_L_DOWN_UP,150,300); + PostMsgWait(task,MSG_MS_R_DOWN_UP,0,0); Sleep(1500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task,TRUE); @@ -342,11 +350,11 @@ U0 DoStadium() CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Stadium/Stadium\";\n"); Sleep(50); - PostMsgWait(task,MSG_IP_L_DOWN_UP,100,10); + PostMsgWait(task,MSG_MS_L_DOWN_UP,100,10); Sleep(300); - PostMsgWait(task,MSG_IP_L_DOWN_UP,320,20); + PostMsgWait(task,MSG_MS_L_DOWN_UP,320,20); Sleep(300); - PostMsgWait(task,MSG_IP_L_DOWN_UP,520,10); + PostMsgWait(task,MSG_MS_L_DOWN_UP,520,10); Sleep(300); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -472,7 +480,7 @@ U0 DoFlatTops() TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_R_DOWN_UP,RandI16%400+200,RandI16%300+150); + PostMsgWait(task,MSG_MS_R_DOWN_UP,RandI16%400+200,RandI16%300+150); Sleep(1500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -566,8 +574,8 @@ U0 DoPixCollision() XTalkWait(task,"#include \"::/Demo/Graphics/Collision\";\n"); w=task->pix_width>>1 +task->pix_left+task->scroll_x; h=task->pix_height>>1+task->pix_top +task->scroll_y; - IPSet(w-35,h-35); - InSetIP(10,w+35,w+35); + MsSet(w-35,h-35); + InSetMs(10,w+35,w+35); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task,TRUE); } @@ -631,16 +639,16 @@ U0 DoCtrlR1() PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,150,95); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,150,95); Sleep(250); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,190,190); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,190,190); Sleep(250); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,110,190); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,110,190); Sleep(250); - PostMsg(task,MSG_IP_R_DOWN_UP,100,100); + PostMsg(task,MSG_MS_R_DOWN_UP,100,100); //Color task_num=BirthWait(&task->popup_task,task_num); @@ -661,10 +669,10 @@ U0 DoCtrlR1() PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsg(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_L_DOWN,150,150); - PostMsgWait(task,MSG_IP_L_UP,190,190); + PostMsgWait(task,MSG_MS_L_DOWN,150,150); + PostMsgWait(task,MSG_MS_L_UP,190,190); Sleep(250); - PostMsg(task,MSG_IP_R_DOWN_UP,100,100); + PostMsg(task,MSG_MS_R_DOWN_UP,100,100); //Exit BirthWait(&task->popup_task); @@ -691,7 +699,7 @@ U0 DoF2Macro() PostMsgWait(sys_macro_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); PostMsgWait(sys_macro_task,MSG_KEY_DOWN_UP,0,SC_CURSOR_RIGHT); PostMsgWait(sys_macro_task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Press RECORD - while (!Bt(&sys_semas[SYS_SEMA_RECORD_MACRO],0)) + while (!Bt(&sys_semas[SEMA_RECORD_MACRO],0)) Yield; while (*ptr) @@ -804,9 +812,9 @@ U0 DoBattleLines() TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - IPSet(430,300,,TRUE); - InSetIP(10,530,400); - IPSet(,,,FALSE); + MsSet(430,300,,TRUE); + InSetMs(10,530,400); + MsSet(,,,FALSE); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); } @@ -854,11 +862,11 @@ U0 DoDunGen() DeathWait(&task,TRUE); } -U0 DoTimeOut() +U0 DoTitanium() { I64 i; CTask *task=User; - XTalkWait(task,"#include \"::/Apps/TimeOut/Run\";\n"); + XTalkWait(task,"#include \"::/Apps/Titanium/Run\";\n"); Sleep(200); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); for (i=0;i<3;i++) { @@ -954,61 +962,61 @@ U0 DoStrut() PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); Refresh(2); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); PostMsgWait(task,MSG_KEY_DOWN_UP,'s',0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,GR_HEIGHT/2,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); PostMsgWait(task,MSG_KEY_DOWN_UP,'t',0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(GR_WIDTH-200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(GR_WIDTH-200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(GR_WIDTH/2,400,,TRUE); - PostMsgWait(task,MSG_IP_L_DOWN,0,0); - IPSet(200,200,,TRUE); - PostMsgWait(task,MSG_IP_L_UP,0,0); + MsSet(GR_WIDTH/2,400,,TRUE); + PostMsgWait(task,MSG_MS_L_DOWN,0,0); + MsSet(200,200,,TRUE); + PostMsgWait(task,MSG_MS_L_UP,0,0); - IPSet(,,,FALSE); + MsSet(,,,FALSE); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); LBts(kbd.down_bitmap,Char2ScanCode('1')); @@ -1036,28 +1044,6 @@ U0 DoRawHide() DeathWait(&task,TRUE); } -U0 DoAfterEgypt() -{ - CTask *task=User("#include \"::/Apps/AfterEgypt/Run\";\n"); - BirthWait(&task->popup_task); - Sleep(600); //It flushes messages! - PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); - DeathWait(&task->popup_task); - TaskWait(task); - Sleep(1000); - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Camp - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN); - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); //Map - Sleep(1000); - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Map - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Camp - PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); //Main Menu - DeathWait(&task,TRUE); -} - U0 DoPoleZeros() { CTask *task=User("#include \"::/Demo/Graphics/PoleZeros\";\n"); @@ -1073,11 +1059,11 @@ U0 DoWhap() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Games/Whap\";\n"); - IPSet(300,200); + MsSet(300,200); Sleep(500); - InSetIP(3,350,300); + InSetMs(3,350,300); Sleep(500); - InSetIP(3,450,200); + InSetMs(3,450,200); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1086,14 +1072,14 @@ U0 DoWhap() U0 DoGrid() { CTask *task=User("#include \"::/Demo/Graphics/Grid\";\n"); - IPSet(200,200); + MsSet(200,200); Sleep(150); - InSetIP(2,400,400); - InSetIP(2,200,400); - InSetIP(2,200,200); - IPSet(,,,TRUE); + InSetMs(2,400,400); + InSetMs(2,200,400); + InSetMs(2,200,200); + MsSet(,,,TRUE); Sleep(50); - IPSet(,,,FALSE); + MsSet(,,,FALSE); DocBottom(DocPut(task)); DeathWait(&task,TRUE); } @@ -1102,11 +1088,11 @@ U0 DoPick() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Pick\";\n"); - IPSet(200,200); + MsSet(200,200); Sleep(500); - IPSet(,,,TRUE); - InSetIP(4,400,400); - IPSet(,,,FALSE); + MsSet(,,,TRUE); + InSetMs(4,400,400); + MsSet(,,,FALSE); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1116,11 +1102,11 @@ U0 DoPick3D() { CTask *task=User; XTalkWait(task,"#include \"::/Demo/Graphics/Pick3D\";\n"); - IPSet(200,200); + MsSet(200,200); Sleep(500); - IPSet(,,,TRUE); - InSetIP(4,400,400); - IPSet(,,,FALSE); + MsSet(,,,TRUE); + InSetMs(4,400,400); + MsSet(,,,FALSE); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1151,9 +1137,9 @@ U0 DoKeepAway() BirthWait(&task->popup_task); TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); - IPSet(100,100); + MsSet(100,100); Sleep(1500); - PostMsgWait(task,MSG_IP_R_DOWN_UP,ip.pos.x,ip.pos.y); + PostMsgWait(task,MSG_MS_R_DOWN_UP,ms.pos.x,ms.pos.y); Sleep(1000); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1197,22 +1183,22 @@ U0 DoMassSpring() TaskWait(task->popup_task); PostMsgWait(task->popup_task,MSG_KEY_DOWN_UP,CH_SPACE,0); DeathWait(&task->popup_task); - PostMsgWait(task,MSG_IP_L_DOWN_UP,50,50); //#1 - PostMsgWait(task,MSG_IP_L_DOWN_UP,50,200); //#2 - PostMsgWait(task,MSG_IP_L_DOWN_UP,210,50); //#3 - PostMsgWait(task,MSG_IP_L_DOWN_UP,310,200);//#4 + PostMsgWait(task,MSG_MS_L_DOWN_UP,50,50); //#1 + PostMsgWait(task,MSG_MS_L_DOWN_UP,50,200); //#2 + PostMsgWait(task,MSG_MS_L_DOWN_UP,210,50); //#3 + PostMsgWait(task,MSG_MS_L_DOWN_UP,310,200);//#4 Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,50,50); //1-2 - PostMsgWait(task,MSG_IP_R_UP,50,200); + PostMsgWait(task,MSG_MS_R_DOWN,50,50); //1-2 + PostMsgWait(task,MSG_MS_R_UP,50,200); Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,210,50);//3-4 - PostMsgWait(task,MSG_IP_R_UP,310,200); + PostMsgWait(task,MSG_MS_R_DOWN,210,50);//3-4 + PostMsgWait(task,MSG_MS_R_UP,310,200); Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,50,200);//2-4 - PostMsgWait(task,MSG_IP_R_UP,310,200); + PostMsgWait(task,MSG_MS_R_DOWN,50,200);//2-4 + PostMsgWait(task,MSG_MS_R_UP,310,200); Sleep(500); - PostMsgWait(task,MSG_IP_R_DOWN,50,50); //1-3 - PostMsgWait(task,MSG_IP_R_UP,210,50); + PostMsgWait(task,MSG_MS_R_DOWN,50,50); //1-3 + PostMsgWait(task,MSG_MS_R_UP,210,50); Sleep(1500); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); DeathWait(&task,TRUE); @@ -1463,10 +1449,10 @@ U0 DoClickCallBack() DeathWait(&task,TRUE); } -U0 DoMenuButton() +U0 DoMenuBttn() { CTask *task=User; - XTalkWait(task,"#include \"::/Demo/DolDoc/MenuButton\";\n"); + XTalkWait(task,"#include \"::/Demo/DolDoc/MenuBttn\";\n"); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); Sleep(500); PostMsgWait(task,MSG_KEY_DOWN_UP,0,SC_CURSOR_DOWN,0); @@ -1558,198 +1544,202 @@ U0 DoAsmAndC2() } U0 OSTestSuite() -{ //$MA+LIS-X,"RENUM",LM="I64 i;for (i=0;i<172;i++){if(i)Msg(MSG_KEY_DOWN_UP,0,SC_F3);else\"%cTS(%c\",CH_CTRLF,CH_ESC;Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);\"%03d\",i;Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);Msg(MSG_KEY_DOWN,0,SC_CURSOR_RIGHT);\"%c%c%c\",CH_BACKSPACE,CH_BACKSPACE,CH_BACKSPACE;}"$ - F64 t0=tS; +{ CTask *task; - TS(000,t0); DoBlackDiamond; - TS(001,t0); DoTalons; - TS(002,t0); DoFlatTops; - TS(003,t0); DoDunGen; - TS(004,t0); DoFPS; - TS(005,t0); DoZoneOut; - TS(006,t0); DoVaroom; - TS(007,t0); DoRocket; - TS(008,t0); DoRocketScience; - TS(009,t0); DoBattleLines; - TS(010,t0); DoBigGuns; - TS(011,t0); DoFlapBat; - TS(012,t0); DoTimeOut; - TS(013,t0); DoToTheFront; - TS(014,t0); DoPsalmody; - TS(015,t0); DoJukeBox; - TS(016,t0); if (!sys_heap_init_flag) DoSpan; //Has FloodFill - TS(017,t0); DoStrut; - TS(018,t0); DoRawHide; - TS(019,t0); DoKeepAway; - TS(020,t0); DoAfterEgypt; - TS(021,t0); DoXCaliber; - TS(022,t0); DoWenceslas; - TS(023,t0); DoBomberGolf; - TS(024,t0); DoTheDead; - TS(025,t0); DoTreeCheckers; - TS(026,t0); TSFile("::/Demo/RadixSort"); - TS(027,t0); DoMPAdd; - TS(028,t0); TSFile("::/Demo/MultiCore/Primes"); - TS(029,t0); if (FileFind(BIBLE_FILENAME)) - TSFile("::/Demo/MultiCore/Palindrome"); - TS(030,t0); TSFileChar("::/Demo/MultiCore/Clouds"); - TS(031,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPRadix"); - TS(032,t0); if (mp_cnt>1 && DrvIsWritable(':')) - TSFileChar("::/Demo/MultiCore/LoadTest"); - TS(033,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPPrint"); - TS(034,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Lock"); - TS(035,t0); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Interrupts"); - TS(036,t0); TSFileChar("::/Demo/Graphics/SpritePlot"); - TS(037,t0); TSFileChar("::/Demo/Graphics/Elephant",,CH_SHIFT_ESC); - TS(038,t0); TSFileChar("::/Demo/Graphics/SpritePlot3D"); - TS(039,t0); TSFile("::/Demo/Graphics/SpritePut"); - TS(040,t0); TSFile("::/Demo/Graphics/SpritePutExt"); - TS(041,t0); TSFile("::/Demo/Graphics/SpriteText"); - TS(042,t0); TSFile("::/Demo/Graphics/SpriteRaw"); - TS(043,t0); TSFile("::/Demo/Graphics/EdSprite"); - TS(044,t0); TSFile("::/Demo/Graphics/Balloon",0); - TS(045,t0); TSFile("::/Demo/Carry"); - TS(046,t0); TSFile("::/Demo/Directives"); - TS(047,t0); DoRandDemo; - TS(048,t0); TSFileChar("::/Demo/Graphics/Extents"); - TS(049,t0); TSFileChar("::/Demo/Graphics/NetOfDots"); - TS(050,t0); TSFileChar("::/Demo/Graphics/SunMoon"); - TS(051,t0); DoLowPassFilter; - TS(052,t0); DoMathAudioDemo; - TS(053,t0); TSFileChar("::/Demo/Graphics/Lines"); - TS(054,t0); TSFileChar("::/Demo/Graphics/Bounce",,CH_SHIFT_ESC,FALSE); - TS(055,t0); DoMsgLoop; - TS(056,t0); DoASCIIOrgan; - TS(057,t0); DoMorseCode; - TS(058,t0); DoPixCollision; - TS(059,t0); DoDoodle; - TS(060,t0); DoMassSpring; - TS(061,t0); DoSpeedLine; - TS(062,t0); DoKeyBitMap; - TS(063,t0); DoMountain; - TS(064,t0); DoBSpline; - TS(065,t0); DoGrModels; - TS(066,t0); TSFileChar("::/Demo/Graphics/Blot",1800); - TS(067,t0); if (DrvIsWritable('~')) DoScrnCapture; - TS(068,t0); DoGrid; - TS(069,t0); DoPick; - TS(070,t0); DoPick3D; - TS(071,t0); DoWhap; - TS(072,t0); DoPalette; - TS(073,t0); TSFile("::/Demo/Print"); - TS(074,t0); TSFileChar("::/Demo/Graphics/Shading",1500); - TS(075,t0); TSFileChar("::/Demo/Graphics/RotateTank",1500); - TS(076,t0); TSFileChar("::/Demo/Graphics/3DPoly",1500); - TS(077,t0); TSFileChar("::/Demo/Graphics/Box",1500); - TS(078,t0); DoSymmetry; - TS(079,t0); TSFileChar("::/Demo/Graphics/Shadow",1500); - TS(080,t0); TSFileChar("::/Demo/Graphics/Transform",,CH_SHIFT_ESC); - TS(081,t0); DoPredatorPrey; - TS(082,t0); DoPoleZeros; - TS(083,t0); DoDigits; - TS(084,t0); DoStadium; - TS(085,t0); DoElephantWalk; - TS(086,t0); DoHalogen; - TS(087,t0); TSFileChar("::/Demo/Games/Maze",,CH_SHIFT_ESC); - TS(088,t0); TSFileChar("::/Demo/Graphics/FontEd",,CH_SHIFT_ESC); - TS(089,t0); DoLattice; - TS(090,t0); DoCtrlR1; - TS(091,t0); DoF2Macro; - TS(092,t0); TSFile("::/Demo/SubIntAccess"); - TS(093,t0); DoDemoDoc; - TS(094,t0); TSFile("::/Demo/DolDoc/TreeDemo"); - TS(095,t0); TSFile("::/Demo/DolDoc/TextDemo"); - TS(096,t0); TSFile("::/Demo/DolDoc/CursorMove"); - TS(097,t0); DoMiniCompiler; - TS(098,t0); TSFile("::/Demo/Lectures/MiniGrLib",0); - TS(099,t0); TSFileChar("::/Demo/TimeIns"); - TS(100,t0); DoPhoneNumWords; - TS(101,t0); TSFile("::/Demo/Dsk/UnusedSpaceRep"); - TS(102,t0); TSFile("::/Demo/Dsk/BlkDevRep"); - TS(103,t0); DoLastClass; - TS(104,t0); if (DrvIsWritable('~')) DoFPrintF; - TS(105,t0); TSFile("::/Demo/Dsk/SerializeTree"); - TS(106,t0); DoExceptions; - TS(107,t0); TSFileChar("::/Demo/ScrnCodes"); - TS(108,t0); TSFile("::/Demo/ExtChars"); - TS(109,t0); TSFile("::/Demo/Graphics/PanText",0); - TS(110,t0); TSFile("::/Demo/Graphics/CharAnimation"); - TS(111,t0); DoCharDemo; - TS(112,t0); TSFile("::/Demo/DateTime"); - TS(113,t0); TSFile("::/Demo/SubSwitch"); - TS(114,t0); TSFile("::/Demo/NullCase"); - TS(115,t0); TSFile("::/Demo/MagicPairs"); - TS(116,t0); TSFileChar("::/Demo/Graphics/Hanoi",3000); - TS(117,t0); DoSquirt; - TS(118,t0); TSFileChar("::/Demo/Graphics/CommonAncestor",1500,CH_SHIFT_ESC); - TS(119,t0); DoCartesian; - TS(120,t0); TSFileChar("::/Demo/Games/RainDrops",,CH_SHIFT_ESC); - TS(121,t0); TSFileChar("::/Demo/Games/Collision",1500); - TS(122,t0); DoLogic; - TS(123,t0); TSFile("::/Demo/CompileDemo"); - TS(124,t0); DoPrompt; - TS(125,t0); if (DrvIsWritable('~')) DoWebLog; - TS(126,t0); if (DrvIsWritable('~')) DoRevFile; - TS(127,t0); if (DrvIsWritable('~')) DoSortFile; - TS(128,t0); if (DrvIsWritable('~')) DoToHtmlToTXT; - TS(129,t0); if (DrvIsWritable('~')) TSFile("::/Demo/RegistryDemo"); - TS(130,t0); DoDefine; - TS(131,t0); TSFile("::/Demo/GlblVars"); - TS(132,t0); DoFileRead; - TS(133,t0); TSFile("::/Demo/ParenWarn"); - TS(134,t0); TSFile("::/Demo/DolDoc/DefineStr"); - TS(135,t0); TSFile("::/Demo/DolDoc/Data"); - TS(136,t0); TSFile("::/Demo/DolDoc/CallBack"); - TS(137,t0); TSFile("::/Demo/ClassMeta"); - TS(138,t0); if (DrvIsWritable('~')) DoNumBible; - TS(139,t0); DoForm; - TS(140,t0); DoClickCallBack; - TS(141,t0); DoMenuButton; - TS(142,t0); DoMenuSprite; - TS(143,t0); DoSuggestedSpelling; - TS(144,t0); TSFileChar("::/Demo/WordSearch"); - TS(145,t0); TSFile("::/Demo/StkGrow"); - TS(146,t0); TSFile("::/Demo/MemDemo"); - TS(147,t0); TSFileChar("::/Demo/Snd/WaterFowl"); - TS(148,t0); TSFile("::/Demo/Asm/AsmHelloWorld"); - TS(149,t0); DoAsmAndC1; - TS(150,t0); DoAsmAndC2; - TS(151,t0); TSFile("::/Demo/Asm/AsmAndC3"); - TS(152,t0); TSFile("::/Demo/Asm/MulByHand"); - TS(153,t0); TSFile("::/Demo/Asm/DivByHand"); - TS(154,t0); TSFile("::/Demo/Asm/BuzzFizz"); - TS(155,t0); TSFile("::/Demo/Asm/PutDec"); + ts_t0=tS; + ts_i=0; + + TS("BlackDiamond"); DoBlackDiamond; + TS("Talons"); DoTalons; + TS("FlatTops"); DoFlatTops; + TS("DunGen"); DoDunGen; + TS("FPS"); DoFPS; + TS("ZoneOut"); DoZoneOut; + TS("Varoom"); DoVaroom; + TS("Rocket"); DoRocket; + TS("RocketScience"); DoRocketScience; + TS("BattleLines"); DoBattleLines; + TS("BigGuns"); DoBigGuns; + TS("FlapBat"); DoFlapBat; + TS("Titanium"); DoTitanium; + TS("ToTheFront"); DoToTheFront; + TS("Psalmody"); DoPsalmody; + TS("JukeBox"); DoJukeBox; + TS("Span"); if (!sys_heap_init_flag) DoSpan; //Has FloodFill + TS("Strut"); DoStrut; + TS("RawHide"); DoRawHide; + TS("KeepAway"); DoKeepAway; + TS("XCaliber"); DoXCaliber; + TS("Wenceslas"); DoWenceslas; + TS("BomberGolf"); DoBomberGolf; + TS("TheDead"); DoTheDead; + TS("TreeCheckers"); DoTreeCheckers; + TS("RadixDort"); TSFile("::/Demo/RadixSort"); + TS("MPAdd"); DoMPAdd; + TS("Primes"); TSFile("::/Demo/MultiCore/Primes"); + TS("Palindrome"); if (FileFind(BIBLE_FILENAME)) + TSFile("::/Demo/MultiCore/Palindrome"); + TS("MPRadix"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPRadix"); + TS("LoadTest"); if (mp_cnt>1 && DrvIsWritable(':')) + TSFileChar("::/Demo/MultiCore/LoadTest"); + TS("MPPrint"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/MPPrint"); + TS("Lock"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Lock"); + TS("Interrupts"); if (mp_cnt>1) TSFile("::/Demo/MultiCore/Interrupts"); + TS("SpritePlot"); TSFileChar("::/Demo/Graphics/SpritePlot"); + TS("Elephants"); TSFileChar("::/Demo/Graphics/Elephant",,CH_SHIFT_ESC); + TS("SpritePlot3D"); TSFileChar("::/Demo/Graphics/SpritePlot3D"); + TS("SpritePut"); TSFile("::/Demo/Graphics/SpritePut"); + TS("SpritePutExt"); TSFile("::/Demo/Graphics/SpritePutExt"); + TS("SpriteText"); TSFile("::/Demo/Graphics/SpriteText"); + TS("SpriteRaw"); TSFile("::/Demo/Graphics/SpriteRaw"); + TS("EdSprite"); TSFile("::/Demo/Graphics/EdSprite"); + TS("Balloon"); TSFile("::/Demo/Graphics/Balloon",0); + TS("Carry"); TSFile("::/Demo/Carry"); + TS("Directives"); TSFile("::/Demo/Directives"); + TS("RandDemo"); DoRandDemo; + TS("Extents"); TSFileChar("::/Demo/Graphics/Extents"); + TS("NetOfDots"); TSFileChar("::/Demo/Graphics/NetOfDots"); + TS("SunMoon"); TSFileChar("::/Demo/Graphics/SunMoon"); + TS("LowPassFilter"); DoLowPassFilter; + TS("MathAudioDemo"); DoMathAudioDemo; + TS("Lines"); TSFileChar("::/Demo/Graphics/Lines"); + TS("Bounce"); TSFileChar("::/Demo/Graphics/Bounce",,CH_SHIFT_ESC,FALSE); + TS("MsgLoop"); DoMsgLoop; + TS("ASCIIOrgan"); DoASCIIOrgan; + TS("MorseCode"); DoMorseCode; + TS("PixCollision"); DoPixCollision; + TS("Doodle"); DoDoodle; + TS("MassSpring"); DoMassSpring; + TS("SpeedLine"); DoSpeedLine; + TS("KeyBitMap"); DoKeyBitMap; + TS("BSpline"); DoBSpline; + TS("GrModels"); DoGrModels; + TS("Blot"); TSFileChar("::/Demo/Graphics/Blot",1800); + TS("ScrnCapture"); if (DrvIsWritable('~')) DoScrnCapture; + TS("Grid"); DoGrid; + TS("Pick"); DoPick; + TS("Pick3D"); DoPick3D; + TS("Whap"); DoWhap; + TS("Palette"); DoPalette; + TS("Print"); TSFile("::/Demo/Print"); + TS("Shading"); TSFileChar("::/Demo/Graphics/Shading",1500); + TS("RotateTank"); TSFileChar("::/Demo/Graphics/RotateTank",1500); + TS("3DPoly"); TSFileChar("::/Demo/Graphics/3DPoly",1500); + TS("Box"); TSFileChar("::/Demo/Graphics/Box",1500); + TS("Symmetry"); DoSymmetry; + TS("Shadow"); TSFileChar("::/Demo/Graphics/Shadow",1500); + TS("Transform"); TSFileChar("::/Demo/Graphics/Transform",,CH_SHIFT_ESC); + TS("PredatorPrey"); DoPredatorPrey; + TS("PoleZeros"); DoPoleZeros; + TS("Digits"); DoDigits; + TS("Stadium"); DoStadium; + TS("ElephantWalk"); DoElephantWalk; + TS("Halogen"); DoHalogen; + TS("Maze"); TSFileChar("::/Demo/Games/Maze",,CH_SHIFT_ESC); + TS("FontEd"); TSFileChar("::/Demo/Graphics/FontEd",,CH_SHIFT_ESC); + TS("Lattice"); DoLattice; + TS("CtrlR1"); DoCtrlR1; + TS("F2Macro"); DoF2Macro; + TS("SubIntAccess"); TSFile("::/Demo/SubIntAccess"); + TS("DemoDoc"); DoDemoDoc; + TS("TreeDemo"); TSFile("::/Demo/DolDoc/TreeDemo"); + TS("TextDemo"); TSFile("::/Demo/DolDoc/TextDemo"); + TS("CursorMove"); TSFile("::/Demo/DolDoc/CursorMove"); + TS("MiniCompiler"); DoMiniCompiler; + TS("MiniGrLib"); TSFile("::/Demo/Lectures/MiniGrLib",0); + TS("TimeIns"); TSFileChar("::/Demo/TimeIns"); + TS("PhoneNumWords"); DoPhoneNumWords; + TS("UnusedSpaceRep"); TSFile("::/Demo/Dsk/UnusedSpaceRep"); + TS("BlkDevRep"); TSFile("::/Demo/Dsk/BlkDevRep"); + TS("LastClass"); DoLastClass; + TS("FPrintF"); if (DrvIsWritable('~')) DoFPrintF; + TS("SerializeTree"); TSFile("::/Demo/Dsk/SerializeTree"); + TS("Exceptions"); DoExceptions; + TS("ScrnDCodes"); TSFileChar("::/Demo/ScrnCodes"); + TS("ExtChars"); TSFile("::/Demo/ExtChars"); + TS("PanText"); TSFile("::/Demo/Graphics/PanText",0); + TS("CharAnimation"); TSFile("::/Demo/Graphics/CharAnimation"); + TS("CharDemo"); DoCharDemo; + TS("DateTime"); TSFile("::/Demo/DateTime"); + TS("SubSwitch"); TSFile("::/Demo/SubSwitch"); + TS("NullCase"); TSFile("::/Demo/NullCase"); + TS("Magicpairs"); TSFile("::/Demo/MagicPairs"); + TS("Hanoi"); TSFileChar("::/Demo/Graphics/Hanoi",3000); + TS("Squirt"); DoSquirt; + TS("CommonAncestor"); + TSFileChar("::/Demo/Graphics/CommonAncestor",1500,CH_SHIFT_ESC); + TS("Cartesian"); DoCartesian; + TS("RainDrops"); TSFileChar("::/Demo/Games/RainDrops",,CH_SHIFT_ESC); + TS("Collision"); TSFileChar("::/Demo/Games/Collision",1500); + TS("Logic"); DoLogic; + TS("CompileDemo"); TSFile("::/Demo/CompileDemo"); + TS("Prompt"); DoPrompt; + TS("WebLog"); if (DrvIsWritable('~')) DoWebLog; + TS("RevFile"); if (DrvIsWritable('~')) DoRevFile; + TS("SortFile"); if (DrvIsWritable('~')) DoSortFile; + TS("ToHtmlToTXT"); if (DrvIsWritable('~')) DoToHtmlToTXT; + TS("RegistryDemo"); if (DrvIsWritable('~')) + TSFile("::/Demo/RegistryDemo"); + TS("Define"); DoDefine; + TS("GlblVars"); TSFile("::/Demo/GlblVars"); + TS("FileRead"); DoFileRead; + TS("ParenWarn"); TSFile("::/Demo/ParenWarn"); + TS("DefineStr"); TSFile("::/Demo/DolDoc/DefineStr"); + TS("Data"); TSFile("::/Demo/DolDoc/Data"); + TS("CallBack"); TSFile("::/Demo/DolDoc/CallBack"); + TS("ClassMeta"); TSFile("::/Demo/ClassMeta"); + TS("NumBible"); if (DrvIsWritable('~')) DoNumBible; + TS("Form"); DoForm; + TS("ClickCallBack"); DoClickCallBack; + TS("MenuBttn"); DoMenuBttn; + TS("MenuSprite");DoMenuSprite; + TS("SuggestedSpelling"); DoSuggestedSpelling; + TS("WordSearch"); TSFileChar("::/Demo/WordSearch"); + TS("StkGrow"); TSFile("::/Demo/StkGrow"); + TS("MemDemo"); TSFile("::/Demo/MemDemo"); + TS("WaterFowl"); TSFileChar("::/Demo/Snd/WaterFowl"); + TS("AsmHelloWorld"); TSFile("::/Demo/Asm/AsmHelloWorld"); + TS("AsmAndC1"); DoAsmAndC1; + TS("AsmAndC2"); DoAsmAndC2; + TS("AsmAndC3"); TSFile("::/Demo/Asm/AsmAndC3"); + TS("MulByHand"); TSFile("::/Demo/Asm/MulByHand"); + TS("DivByHand"); TSFile("::/Demo/Asm/DivByHand"); + TS("BuzzFizz"); TSFile("::/Demo/Asm/BuzzFizz"); + TS("PutDec"); TSFile("::/Demo/Asm/PutDec"); task=User; - TS(156,t0); XTalkWait(task,"DocMax;Prof;HeapLog(ON);\n"); - TS(157,t0); XTalkWait(task,"PCIRep;Sleep(750);\n"); - TS(158,t0); XTalkWait(task,"MemBIOSRep;Sleep(750);\n"); - TS(159,t0); XTalkWait(task,"MemRep;Sleep(750);\n"); - TS(160,t0); XTalkWait(task,"ZipRep;Sleep(750);\n"); - TS(161,t0); XTalkWait(task,"ProfRep;Sleep(750);\n"); - TS(162,t0); XTalkWait(task,"HeapLogSizeRep;Sleep(750);\n"); - TS(163,t0); if (mp_cnt>1) XTalkWait(task,"CPURep(TRUE);Sleep(750);\n"); - TS(164,t0); if (DrvIsWritable(':')) XTalkWait(task,"ChkDsk;Sleep(750);\n"); - TS(165,t0); if (DrvIsWritable(':')) { + TS("Prof"); XTalkWait(task,"DocMax;Prof;HeapLog(ON);\n"); + TS("PCIRep"); XTalkWait(task,"PCIRep;Sleep(750);\n"); + TS("MemBIOSRep"); XTalkWait(task,"MemBIOSRep;Sleep(750);\n"); + TS("MemPageRep"); XTalkWait(task,"MemPageRep;Sleep(750);\n"); + TS("MemRep"); XTalkWait(task,"MemRep;Sleep(750);\n"); + TS("ZipRep"); XTalkWait(task,"ZipRep;Sleep(750);\n"); + TS("ProfRep"); XTalkWait(task,"ProfRep;Sleep(750);\n"); + TS("HeapLogSizeRep"); XTalkWait(task,"HeapLogSizeRep;Sleep(750);\n"); + TS("CPURep"); if (mp_cnt>1) + XTalkWait(task,"CPURep(TRUE);Sleep(750);\n"); + TS("ChkDsk"); if (DrvIsWritable(':')) + XTalkWait(task,"ChkDsk;Sleep(750);\n"); + TS("DrvView"); if (DrvIsWritable(':')) { XTalkWait(task,"DrvView;\n"); Sleep(750); PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); } - TS(166,t0); if (DrvIsWritable(':')) { + TS("DskView"); if (DrvIsWritable(':')) { XTalkWait(task,"DskView;\n"); Sleep(250); //Short because ATARep takes time. PostMsgWait(task,MSG_KEY_DOWN_UP,CH_SPACE,0); } - TS(167,t0); XTalkWait(task,"ATARep;\npSleep(750);\n"); - TS(168,t0); XTalkWait(task, + TS("ATARep"); XTalkWait(task,"ATARep;\npSleep(750);\n"); + TS("HashDepthRep"); XTalkWait(task, "HashDepthRep(adam_task->hash_table);Sleep(750);\n"); - TS(169,t0); XTalkWait(task,"Who;Sleep(750);\n"); - TS(170,t0); XTalkWait(task,"DrvRep;Sleep(750);\n"); - TS(171,t0); XTalkWait(task,"TaskRep;Sleep(750);\n"); + TS("Who"); XTalkWait(task,"Who;Sleep(750);\n"); + TS("DrvRep"); XTalkWait(task,"DrvRep;Sleep(750);\n"); + TS("TaskRep"); XTalkWait(task,"TaskRep;Sleep(750);\n"); DeathWait(&task,TRUE); - ProgressBarsRst; - "Elapsed Time:%5.3f\n",tS-t0; + ProgressBarsRst("TempleOS/OSTestSuite"); + "Elapsed Time:%5.3f\n",tS-ts_t0; } OSTestSuite; diff --git a/Misc/PCIDevices.DD b/Misc/PCIDevices.DD index 86075c8..0869f60 100644 --- a/Misc/PCIDevices.DD +++ b/Misc/PCIDevices.DD @@ -212,7 +212,7 @@ 602C SN9C102C home made 602D VID_0C45&PID_6480&MI_00 USB Webcam 6030 USB\VID_0C45&PID_6029\5&18D8BE1C&0&1 USB WebCam - 610C USB\VID_0C45&PID_610B\7&3211544E$$0$$2 usb web camera + 610C USB\VID_0C45&PID_610B\7&3211544E$$$$0$$$$2 usb web camera 6128 USB\VID_0C45&PID_613C&REV_0101 USB веб-камера 6128_ USB\VID_0C45&PID_6148&REV_0101 USB PC Camera Plus 6129 USB\VID_0C45&PID_6128\5&3875c171&0&1 USB WebCam diff --git a/Misc/Tour/Tour.IN b/Misc/Tour/Tour.IN index c804d4d..7e485b9 100644 --- a/Misc/Tour/Tour.IN +++ b/Misc/Tour/Tour.IN @@ -13,8 +13,8 @@ U0 TourPutTask() Fs->border_src=BDS_CONST; Fs->border_attr=LTGRAY<<4+DrvTextAttrGet(':')&15; Fs->text_attr =LTGRAY<<4+BLUE; - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L - -WIF_SELF_IP_R-WIG_DBL_CLICK; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_MS_L + -WIF_SELF_MS_R-WIG_DBL_CLICK; doc=DocPut; doc->flags|=DOCF_FORM; DocCursor(FALSE,doc); @@ -29,13 +29,13 @@ U0 TourPutTask() if (ch==CH_SPACE && doc->cur_entry!=doc) { if (doc->cur_entry->de_flags & DOCEF_LINK) '' CH_SPACE; - else if (doc->cur_entry->type_u8==DOCT_BUTTON) + else if (doc->cur_entry->type_u8==DOCT_BTTN) tour_okay_pressed=TRUE; } DocUnlock(doc); if (tour_okay_pressed) { - Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_IP_L - -WIF_SELF_IP_R-WIG_DBL_CLICK; + Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_BORDER-WIF_SELF_MS_L + -WIF_SELF_MS_R-WIG_DBL_CLICK; if (sys_focus_task==Fs) WinRefocus; } else { @@ -67,7 +67,7 @@ U0 TourPut(U8 *st,Bool wait_okay=FALSE) DocClear(doc); } } else - ThrowBreak(tour_task); + Kill(tour_task,,TRUE); } public I64 PopUpTourPart() diff --git a/Misc/Tour/Tour1.IN b/Misc/Tour/Tour1.IN index c722ef1..10ba1ea 100644 --- a/Misc/Tour/Tour1.IN +++ b/Misc/Tour/Tour1.IN @@ -45,13 +45,13 @@ U0 RevealPopUpHelp(I64 scf) while (kbd.scan_code&(SCF_CTRL|SCF_ALT|SCF_SHIFT)==scf) { ScanKey(,,TRUE); if (1.0win_inhibit,WIf_SELF_KEY_DESC,old_key_desc); - Snd(0); + Snd; } while (tS-t0<1.0); } diff --git a/DoOnce.HC b/Once.HC similarity index 85% rename from DoOnce.HC rename to Once.HC index f349aff..851790f 100644 --- a/DoOnce.HC +++ b/Once.HC @@ -3,18 +3,19 @@ //This file is executed by the //first terminal window upon start-up. -//See $LK,"DoOnce",A="FF:/Home/HomeSys.HC,DoOnce"$ and $LK,"Home Files",A="FF:::/Doc/GuideLines.DD,/Home Files"$. +//See $LK,"Once",A="FF:/Home/HomeSys.HC,Once"$ and $LK,"Home Files",A="FF:::/Doc/GuideLines.DD,/Home Files"$. //Delete the rest from this file. -U0 DoOnce() +U0 Tmp() { + OnceExe; switch (sys_boot_src.u16[0]) { case BOOT_SRC_ROM: "Continue booting hard drive "; if (YorN) { DocBottom; - ExeFile("C:/Home/DoOnce"); + ExeFile("C:/Home/Once"); } break; case BOOT_SRC_DVD: @@ -51,4 +52,4 @@ U0 DoOnce() } } -DoOnce; +Tmp; diff --git a/PersonalMenu.DD b/PersonalMenu.DD index d9a13d8de583d61aa60276168b1d603466086ad3..6baea9b7ec8e71f080ca2b3490c8549b86844e29 100644 GIT binary patch delta 1381 zcmezJow@rRv$#rlxQ?NUbACakLPg6nv|bkqNL;FYpdjxpI;K>=xeQ{ zqA=N<#h#IKayg5J5f>L1rvlh~Qx&(;JO%f}+|*)_wOlZu5*z?FFC?=hF)y<;ck)C| zDRvl}k5z2)cUDVAqsi;ptc8tL6ciL->cbL?^7BEeMJ6xc=AL|?m7kGo@*6f+M$^eg z><*JZaM&}NPhQXAz-*zyHQ9*MbMgUBXCXra6@&>snR%(jlP7Y54B(lZz$U0@Xs7~q z7AMrjp?PVjZl0{q;lgaBqA*#S)tAZ8cycDI9iO3ziUL>{n3!D8>BwZNGP#Vyg3)ZU zDUTPA*C;Kn{}0rR)~WmMRL9Yq@P14JNN+ zw_`Fgocxa6hRMii@<%Rb1!H8Bpf2^x&r62|?PLzFTt<`0Wn2!7rjvJbTQizX-p*yo zXg=AL+m6)&6bD7^XVF%MQok&YLFDNWvx#5;MxVXnyqyy}x19Qh{yKPEZ3fLC&I**&Gn1-!D83!bw~ z-g!?R%>H^$8B7~IXPaz&Ulz8WPvs}?d?F8FicZ#ls>%3&a^zEckP0w)^Qryh zKz{Mb2X?SbHh!i$`9T5uiwtoXkAdZ{wDg^T~a%_%UW5~fMwRug6Br^b#EZv#_ delta 2129 zcmeBv$Nc3xvxG``xQ?MpKu%(EszOOdX0bwAW=^U?X5L2edyMs-X$qD3r3yu*c?y|% z3W*A3nMEa~i8%_niOCt6d8s;J+2q7Lh0@|wh1^Q8-eQHMN`>V7g38RibcK?91r;}U z9U~QekNn(J6*qSkJp~2-l8n@%^338?9fh3K#G*WflA_Gy>|%w)ycC6!%z|Pag{0CF zg``vkt>na_)U?tZg{0KvM5q7{w`v11hPK0EVZa|vMlqi$-kIw7!@X)vuOCJ_&RC_gz7ljDmmrnmjpTbD(U$6 z!Z{i-O8VZZMR}0B8#NBV_HdS5tyqV zRGJr~q@?5IX=|u5c|W@^qtRqO4m(L>gaI)9VTncg`MHw~Iprtkv+_^g&*H>nsxn!E z-CoE{MFFNLBr`YFzZ7JPv^wToz~Secnj4f_010{s zdvXhp%H&j@B1W;z3hNVj7@0P!M7XhU&b=4J%gDSrJN^Vaqwr>v^lj{nQk%au6>>33 zY+gP6520oAyg!KRaV3Elm*DJ6xFfj1(O?Ge= zVP;@pm>eJ~UC+P=QqI7K3>ZKf`1sH)0h!3a1_ca!5QigcgouEQgDPTUV*|PE|9_B! zA+pHoL00mD2nYtbtS(=2a_lzl$qHxq*+5R^136Mc8eJDe1DKp#*e5($(OPfvUn};> zqGzNgPq31j{K1+<7uEHAIE;Y$baH^GgaU*OHWihCNPwL}XGQW5t5KZ;=7A*`Ci{y@ zGBNN?ZnTnM0R{YIMp2Q;|6j8SpnG?+EWh+*K2dg%BrJp{-#@`K`G6nmqz(L&1E%s% zR^a29Y%obkl!1YfQ~JjL|Nnpd|NkFc4lyvWZSFY3%*@EWd2Ou+>*RCW*ftx8er9Fl z+^j6UkXw!&8o87Bpvm~y|NsAw{{R2qo`HeEYI5NQrO5`96eb%?lAFAtU3jvAmcV3z zkF1jwcqJx#UI59-PVTs%JlSB9?Bo+rn&TpbUw?;nvhPJXuw27kw#j`LWx?zdP*U@`5IxA^v|uCb5}kBad$PeK(a8=_x&cgcP1f4MHF^J4oyi81I47^#%{BSo zRb57g$vW5U85t($T(h6-b(eeciR(O*ZKc>JpS-37<%>+_x~>RPcO9$_Os=_ZKY8J9 ziOI}2G$u>&icWU80kTnIa`O$1$p(`oCLe~<%r_x?kcT~Pf&x-vGKk$lfbDz>qHq5l z-pLbgNrTM<={s=?Vg@JzIB!ED%;Ppl3=wg#2!zlglN;`GPWHG1QX?|C{tn3ZB9r%{ k(e`&i;-Zrq?t=UwH~HjUklFH+HYhSPFz{{e@|ejF04>0g8vpdisplay_flags,DISPLAYf_CHILDREN_NOT_ON_TOP); LBts(&Fs->display_flags,DISPLAYf_SHOW); RegInit; LBts(&sys_run_level,RLf_REGISTRY); +if (!ins_reg.registered) + InsUnreg; + WallPaperInit; if (DrvIsWritable) @@ -40,4 +43,4 @@ LBts(&sys_run_level,RLf_HOME); #help_index "" #include "/Home/MakeHome" -//After this file, the Adam task enters $LK,"server mode",A="HI:Task/Srv"$. +//After this file, the Adam task enters $LK,"server mode",A="HI:Job"$.

2m?ZbWkBlSW`LXl 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 BU7Y{` diff --git a/Demo/Games/Stadium/Stadium.HC b/Demo/Games/Stadium/Stadium.HC index b91a66db1cead1c7fbd873f5a3497183b29b9311..b537ec3bc0656e65b52676ea5989cbf8e9c3bd1e 100644 GIT binary patch delta 106 zcmX>tdsBA9Rz@b{sLk6MXMyQpW-n&;qI5%@#G>@g3)qe_DuXy`iACu~I)*kjzQOMC y-ma1HF8<+u+EBi4@Z=T_Gp3^S$-6kL1&h)RtrbcVi_%j|;wx=IrZ91yWCZ{&O(HD- delta 71 zcmca9ds=qGRz{{M9B~C8nkYw@",BI=3$ @@ -112,20 +90,6 @@ RegExeBranch("TempleOS/Talons"); - - - - - - - - - - - - - - @@ -149,6 +113,7 @@ RegExeBranch("TempleOS/Talons"); + $SP,"<5>",BI=5$ @@ -164,6 +129,7 @@ RegExeBranch("TempleOS/Talons"); + $SP,"<6>",BI=6$ @@ -172,20 +138,17 @@ RegExeBranch("TempleOS/Talons"); +#define LS_TYPES 3 +U8 *landscape_small_imgs[LS_TYPES]={$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<6>",BI=6$}, + *landscape_large_imgs[LS_TYPES]; - - - - - - - - - - - - - +#define B_NUM 256 +class Bird +{ + Bird *next,*last; + CD3I64 p; + F64 é; +} b_head[mp_cnt]; class Obj { @@ -218,9 +181,12 @@ class MPCtrl { F64 game_t0,game_tf,pitch,roll,heading,è,speed; Bool invert_pitch,rolled_over; I64 strip_height,x,y,z,fish_left; +CD3 v; U0 WrapAngles() { + I64 r[4][4],x,y,z; + è=Wrap(è); pitch=Wrap(-è-ã/2); if (Abs(pitch)>ã/2) { @@ -234,6 +200,17 @@ U0 WrapAngles() else rolled_over=TRUE; heading=Wrap(heading,0); + + //World to scrn coordinates + Mat4x4IdentEqu(r); + Mat4x4RotZ(r,heading); + Mat4x4RotX(r,è); + Mat4x4RotZ(r,roll); + + //We use velocity vector for dog-fighting. + x=0x100000000*speed; y=0; z=0; + Mat4x4MulXYZ(r,&x,&y,&z); + v.x=x/ToF64(0x100000000); v.y=y/ToF64(0x100000000); v.z=z/ToF64(0x100000000); } U0 EDTransform(CDC *dc,I64 *x,I64 *y,I64 *z) @@ -332,9 +309,9 @@ U0 MPDoPanels(CTask *task) if (Rand<0.1) { tmpo->fish=FALSE; if (RandI16&1) - tmpo->img=$IB,"<2>",BI=2$; //Boat + tmpo->img=landscape_large_imgs[0]; //Boat else - tmpo->img=$IB,"<3>",BI=3$; //Boat + tmpo->img=landscape_large_imgs[1]; //Boat tmpo->p.z=(WATER_ELEVATION+2)*MAP_SCALE; } else { tmpo->fish=TRUE; @@ -354,7 +331,7 @@ U0 MPDoPanels(CTask *task) tmpo->p.x=(i+w/2)*MAP_SCALE; tmpo->p.y=(j+h/2)*MAP_SCALE; tmpo->p.z=l; - tmpo->img=$IB,"<4>",BI=4$; //Tree + tmpo->img=landscape_large_imgs[2]; //Tree tmpo->fish=FALSE; QueIns(tmpo,tmpp->last_obj); } @@ -476,8 +453,8 @@ F64 claws_down; -$SP,"<5>",BI=5$ -$SP,"<6>",BI=6$ +$SP,"<7>",BI=7$ +$SP,"<8>",BI=8$ @@ -502,9 +479,9 @@ U0 ClawDraw(CDC *dc,I64 x1,I64 y1,I64 x2,I64 y2,I64 w,I64 segments,Bool talon) } if (talon) { if (y1",BI=5$); + Sprite3B(dc,x1,y1,0,$IB,"<7>",BI=7$); else - Sprite3B(dc,x1,y1,0,$IB,"<6>",BI=6$); + Sprite3B(dc,x1,y1,0,$IB,"<8>",BI=8$); } } @@ -534,7 +511,7 @@ U0 DrawIt(CTask *task,CDC *dc) } /* -$SP,"<7>",BI=7$ +$SP,"<9>",BI=9$ @@ -553,7 +530,7 @@ $SP,"<7>",BI=7$ -$SP,"<8>",BI=8$ +$SP,"<10>",BI=10$ @@ -598,11 +575,10 @@ I64 update_jiffy_limit; U0 MPDrawIt(CTask *task,CDC *dc) { I64 j,update=winmgr.updates&65535,strip_width,*s2w,x1,y1,z1,xx,yy, - xh,yh,zh,yh2,xh2,x1h,y1h,x1wa,y1wa,x1wb,y1wb, - x3,y3,z3,dd,dd_old, - cx=task->pix_width>>1, - cy=task->pix_height>>1; + xh,yh,zh,yh2,xh2,x1h,y1h,x1wa,y1wa,x1wb,y1wb,x3,y3,z3,dd,dd_old, + cx=task->pix_width>>1,cy=task->pix_height>>1,r[16],*elems1,*elems_hard; Panel reg *tmpp; + Bird *tmpb; Obj *tmpo; Bool w_on_map,h_on_map; @@ -733,6 +709,21 @@ U0 MPDrawIt(CTask *task,CDC *dc) } } + tmpb=b_head[Gs->num].next; + while (tmpb!=&b_head[Gs->num]) { + elems1=SpriteInterpolate(Tri(tS,0.2),$IB,"<2>",BI=2$,$IB,"<3>",BI=3$); + + Mat4x4IdentEqu(r); + Mat4x4RotZ(r,tmpb->é); + elems_hard=SpriteTransform(elems1,r); + + Sprite3(dc,tmpb->p.x,tmpb->p.y,tmpb->p.z,elems_hard); + Free(elems_hard); + Free(elems1); + + tmpb=tmpb->next; + } + Free(s2w); mp.strip_width[Gs->num]=strip_width; LBtr(&mp.update_not_done_flags,Gs->num); @@ -858,6 +849,7 @@ U0 DrawHorizon(CDC *dc) DCFill(dc,LTCYAN); //Not correct. } } + dc->depth_buf=old_db; } @@ -969,9 +961,10 @@ Obj *FishFind(I64 x1,I64 y1,I64 *_dd) U0 AnimateTask(I64) {//Steadily moves the airplane fwd. - I64 *s2w,x1,y1,z1,dx,dy,dz,dd; + I64 i,*s2w,x1,y1,z1,dx,dy,dz,dd; F64 t0=tS,ms,é,d; Obj *tmpo; + Bird *tmpb; while (TRUE) { ms=1000*(tS-t0); t0=tS; @@ -1020,7 +1013,7 @@ U0 AnimateTask(I64) QueRem(tmpo); Free(tmpo); music.mute=TRUE; - Snd(1000); Sleep(200); Snd(0); + Snd(74); Sleep(200); Snd; music.mute=FALSE; } } @@ -1034,6 +1027,18 @@ U0 AnimateTask(I64) speed-=0.0001; speed=Clamp(speed+(0.0005-0.0002*Abs(è)/(ã/4)),0.1,5.0); } + + for (i=0;ip.x+=10*ms/1000*MAP_SCALE*Cos(tmpb->é); + tmpb->p.y+=10*ms/1000*MAP_SCALE*Sin(tmpb->é); + tmpb->p.z=BIRD_ELEVATION*MAP_SCALE+ + elevations[tmpb->p.y/MAP_SCALE][tmpb->p.x/MAP_SCALE]; + tmpb->é+=2*ã*ms/1000/10; + tmpb=tmpb->next; + } + } } Refresh; } @@ -1060,16 +1065,34 @@ U0 SongTask(I64) Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; while (TRUE) { - Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG"); - Play("3eCGFsDAe.C2sG3eGDqCDeGsGG2qG"); - Play("3eGECGCAFCsCBCBe.GsG2qG3B"); - Play("eGECGCAFCsCBCBe.GsG2qG3B"); + Play("5eCGFsD4A5e.C4sG5eGDqCDeGsGG4qG"); + Play("5eCGFsD4A5e.C4sG5eGDqCDeGsGG4qG"); + Play("5eGECGC4A5FCsC4B5C4B5e.GsG4qGB"); + Play("5eGECGC4A5FCsC4B5C4B5e.GsG4qGB"); } } +U0 PreInit() +{ + I64 i,*r=Mat4x4IdentNew; + Mat4x4Scale(r,10.0); + for (i=0;ip.x=Rand*MAP_WIDTH*MAP_SCALE; + tmpb->p.y=Rand*MAP_HEIGHT*MAP_SCALE; + tmpb->p.z=BIRD_ELEVATION*MAP_SCALE+ + elevations[tmpb->p.y/MAP_SCALE][tmpb->p.x/MAP_SCALE]; + tmpb->é=2*ã*Rand; + QueIns(tmpb,b_head[i%mp_cnt].last); + } + for (i=1;itask_end_cb=&TaskEndCB; @@ -1104,6 +1140,7 @@ U0 Init() U0 CleanUp() { + I64 i; Panel *tmpp=panel_head,*tmpp1; MPEnd; while (tmpp) { @@ -1113,6 +1150,10 @@ U0 CleanUp() Free(tmpp); tmpp=tmpp1; } + for (i=0;isong_task=Spawn(&SongTask,NULL,"Song",,Fs); + PreInit; Init; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); Fs->draw_it=&DrawIt; @@ -1183,10 +1225,12 @@ U0 Talons() PutExcept; SettingsPop; CleanUp; - RegWriteBranch("TempleOS/Talons","F64 best_score=%5.4f;\n",best_score); + PostCleanUp; + RegWrite("TempleOS/Talons","F64 best_score=%5.4f;\n",best_score); MenuPop; } +Seed(1); Talons; � àÿÿÿýÿÿÿ @@ -1196,30 +1240,38 @@ Talons; &  üÿÿÿ üÿÿÿáÿÿÿ -áÿÿÿ):_éÿÿÿ¡‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbþÿÿÿâÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚þÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿʰÿÿÿ8ÿÿÿ<8ÿÿÿȰÿÿÿÈPPȰÿÿÿÈ8ÿÿÿP8ÿÿÿ°ÿÿÿìÿÿÿÎÿÿÿÜÎÿÿÿÜ2ìÿÿÿÜ2Ü2Üìÿÿÿ2ÜÎÿÿÿÜÎÿÿÿìÿÿÿÜ     +áÿÿÿ) :_éÿÿÿ¡‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +Šëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbþÿÿÿâÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚þÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊøÿÿÿìÿÿÿìÿÿÿøÿÿÿøÿÿÿìÿÿÿìÿÿÿøÿÿÿþÿÿÿûÿÿÿ•ûÿÿÿ•þÿÿÿ•••þÿÿÿ•ûÿÿÿ•ûÿÿÿþÿÿÿ•         -             P -á>þÿÿÿÿÿáwÿÿÿXÿÿÿ ÿÿÿwÿÿÿ ÿÿÿ>þÿÿÿÿÿQ]ýÿÿQ2„®þÿÿ2®þÿÿ]ýÿÿ       öÿÿÿöÿÿÿ -öÿÿÿ - -öÿÿÿ -öÿÿÿöÿÿÿÜ -öÿÿÿÜ - -Üöÿÿÿ -Ü»þÿÿd000000000p¨ àÿÿÿàÿÿÿàÿÿÿ àÿÿÿÉàÿÿÿàÿÿÿÉ àÿÿÿ  Éàÿÿÿ É>àÿÿÿÉÁÿÿÿàÿÿÿÉ>àÿÿÿîÁÿÿÿàÿÿÿî> ÉÁÿÿÿ É> îÁÿÿÿ î]çÿÿÿ¶Dóÿÿÿ©p XW+L]ÏD Âp8qWDep%RW2Eƒv jƒp2wW>kƒƒEj�9ƒ}&j‰�¨ vµƒ}?j‰3�¨&vµÁÿÿÿùÿÿÿ¨ÿÿÿ®ÿÿÿÁÿÿÿe•ÿÿÿÎÿÿÿeÁÿÿÿ¶¨ÿÿÿ ¶®ÿÿÿÚÿÿÿX•ÿÿÿçÿÿÿX®ÿÿÿÁÿÿÿe•ÿÿÿÎÿÿÿe¢ÿÿÿ•ÿÿÿ‰ÿÿÿ¢ÿÿÿ®ÿÿÿÚÿÿÿX•ÿÿÿçÿÿÿX¢ÿÿÿ®ÿÿÿ‰ÿÿÿ»ÿÿÿ¢ÿÿÿœÿÿÿ‰ÿÿÿ¨ÿÿÿœÿÿÿ‰ÿÿÿèƒÿÿÿ•ÿÿÿè¢ÿÿÿ¨ÿÿÿ‰ÿÿÿµÿÿÿœÿÿÿ•ÿÿÿÛƒÿÿÿ¢ÿÿÿÛ8çÿÿÿîóÿÿÿî2ÚÿÿÿŠ çÿÿÿŠ8 îî2Š Š2ÚÿÿÿŠ çÿÿÿŠ+Îÿÿÿ&Úÿÿÿ&2Š Š+óÿÿÿ&&+ÎÿÿÿÎÿÿÿ +ôÿÿÿùÿÿÿ+ôÿÿÿ+Îÿÿÿ,Îÿÿÿ, +ùÿÿÿ+íÿÿÿçÿÿÿîÇÿÿÿóÿÿÿáùÿÿÿùÿÿÿŠÔÿÿÿ}íÿÿÿ úÇÿÿÿîùÿÿÿ –Ôÿÿÿ+Šùÿÿÿùÿÿÿ�Ôÿÿÿùÿÿÿ„ùÿÿÿ,àÿÿÿùÿÿÿ ùÿÿÿ+�Ôÿÿÿ+„+,àÿÿÿ+ ùÿÿÿàÿÿÿWíÿÿÿdùÿÿÿ,àÿÿÿ,W,íÿÿÿd,000000000000 0  +             P +Óÿÿÿçÿÿÿ%çÿÿÿ;çÿÿÿéÿÿÿ%çÿÿÿéÿÿÿÓÿÿÿçÿÿÿ!¼ÿÿÿ!8YÞÿÿÿ8Þÿÿÿ¼ÿÿÿ       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•ÿÿÿÿ••ÿÿÿÿ•ßÿÿÿ 000000000p¨üÿÿÿ3üÿÿÿüÿÿÿ3üÿÿÿ-üÿÿÿüÿÿÿ-3üÿÿÿ3-üÿÿÿ-üÿÿÿ-ùÿÿÿüÿÿÿ-üÿÿÿùÿÿÿüÿÿÿ-ùÿÿÿ-ùÿÿÿ ýÿÿÿ+þÿÿÿ* "! ., $# !  +  %$ +  +   +  ùÿÿÿÿÿÿÿ,÷ÿÿÿ,÷ÿÿÿùÿÿÿ#õÿÿÿûÿÿÿ#ùÿÿÿ+÷ÿÿÿ+÷ÿÿÿüÿÿÿ"õÿÿÿýÿÿÿ"÷ÿÿÿùÿÿÿ#õÿÿÿûÿÿÿ#öÿÿÿõÿÿÿôÿÿÿöÿÿÿ÷ÿÿÿüÿÿÿ"õÿÿÿýÿÿÿ"öÿÿÿ÷ÿÿÿôÿÿÿùÿÿÿöÿÿÿöÿÿÿôÿÿÿ÷ÿÿÿöÿÿÿôÿÿÿóÿÿÿõÿÿÿöÿÿÿ÷ÿÿÿôÿÿÿøÿÿÿöÿÿÿõÿÿÿóÿÿÿöÿÿÿýÿÿÿþÿÿÿüÿÿÿ ýÿÿÿ   üÿÿÿ ýÿÿÿ ûÿÿÿüÿÿÿ  þÿÿÿûÿÿÿûÿÿÿþÿÿÿÿÿÿÿþÿÿÿûÿÿÿûÿÿÿÿÿÿÿþÿÿÿýÿÿÿúÿÿÿþÿÿÿÿÿÿÿÿÿÿÿ ûÿÿÿ þÿÿÿúÿÿÿÿÿÿÿûÿÿÿ ÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿ ÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿûÿÿÿ üÿÿÿÿÿÿÿüÿÿÿþÿÿÿ ÿÿÿÿüÿÿÿþÿÿÿ 000000000000 0  0 0  0 0  0 0  0 0  0  - 0 0  0 0 0 0 0 0 0 0 0 0 0 00000 0000 0000 0! "0"#!0%$&0&'%0! $0$%!0#"&0&'#0" $0$&"0#!%0%'# 0)(* 0*+) 0-,. 0./- 0)(, 0,-) 0+*. 0./+ 0*(, 0,.* 0+)- 0-/+010202310546067501040451032606730204046203150573098:0:;90=<>0>?=098<0<=90;:>0>?;0:8<0<>:0;9=0=?;0A@B0BCA0EDF0FGE0A@D0DEA0CBF0FGC0B@D0DFB0CAE0EGC0IHJ0JKI0MLN0NOM0IHL0LMI0KJN0NOK0JHL0LNJ0KIM0MOK0QPR0RSQ0UTV0VWU0QPT0TUQ0SRV0VWS0RPT0TVR0SQU0UWS0YXZ0Z[Y0]\^0^_]0YX\0\]Y0[Z^0^_[0ZX\0\^Z0[Y]0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mok! ->þÿÿàÿÿÿvàÿÿÿWÿÿÿvÿÿÿÿÿÿ>þÿÿÿÿÿÿÿÿ\ýÿÿP1Pƒ1®þÿÿ\ýÿÿ®þÿÿ      p¨~~ßÿÿÿ~Ê~ßÿÿÿÊ@@ßÿÿÿ@Ê@ßÿÿÿÊ~>Ê~ÁÿÿÿÊ~>î~Áÿÿÿî@>Ê@ÁÿÿÿÊ@>î@Áÿÿÿîw\¶jC©@pY3WM^\ÏQCÂ'prWf8pR,WEè‚ Üi,pw WkÜ‚EÏi9á‚'Ôi¶Žªuá‚@Ôi4¶Ž'ªueÁÿÿÿÂY¨ÿÿÿœ­ÿÿÿf�”ÿÿÿfLÁÿÿÿ¶@¨ÿÿÿ¶ƒ­ÿÿÿYw”ÿÿÿYœ­ÿÿÿf�”ÿÿÿfÉ¡ÿÿÿ½ˆÿÿÿƒ­ÿÿÿYw”ÿÿÿY°¡ÿÿÿ¤ˆÿÿÿ¡ÿÿÿµˆÿÿÿÖœÿÿÿéɃÿÿÿ鵡ÿÿÿ©ˆÿÿÿÉœÿÿÿܽƒÿÿÿÜw7õjõ�2‘ƒ ‘Q7éEéj2…^ …�2‘ƒ ‘©*-œ-j2…^ …ƒ*!w!©* © LïÿÿÿLøÿÿÿïÿÿÿ©*2©2LLøÿÿÿwìÿÿÿéjÆÿÿÿÜYøÿÿÿ…LÓÿÿÿxQìÿÿÿEÆÿÿÿõ3øÿÿÿž'Óÿÿÿ‘Yøÿÿÿ‘YÓÿÿÿ…Y-Yßÿÿÿ!'øÿÿÿ‘'Óÿÿÿ…'-'ßÿÿÿ!YLßÿÿÿúíìÿÿÿY-Lßÿÿÿ-ú-íìÿÿÿ-  + 0 0  0 0 0 0 0 0 0 0 0 0 0 00000 0000 0000 0! "0"#!0%$&0&'%0! $0$%!0#"&0&'#0" $0$&"0#!%0%'# 0)(* 0*+) 0-,. 0./- 0)(, 0,-) 0+*. 0./+ 0*(, 0,.* 0+)- 0-/+010202310546067501040451032606730204046203150573098:0:;90=<>0>?=098<0<=90;:>0>?;0:8<0<>:0;9=0=?;0A@B0BCA0EDF0FGE0A@D0DEA0CBF0FGC0B@D0DFB0CAE0EGC0IHJ0JKI0MLN0NOM0IHL0LMI0KJN0NOK0JHL0LNJ0KIM0MOK0QPR0RSQ0UTV0VWU0QPT0TUQ0SRV0VWS0RPT0TVR0SQU0UWS0YXZ0Z[Y0]\^0^_]0YX\0\]Y0[Z^0^_[0ZX\0\^Z0[Y]0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mok! +Óÿÿÿçÿÿÿ%çÿÿÿ;çÿÿÿ%éÿÿÿçÿÿÿÓÿÿÿéÿÿÿçÿÿÿ¼ÿÿÿ!8!Y8Þÿÿÿ¼ÿÿÿÞÿÿÿ      p¨&3&üÿÿÿ3&-&üÿÿÿ- 3 üÿÿÿ3 - üÿÿÿ-&-&ùÿÿÿ-&&ùÿÿÿ - ùÿÿÿ-  ùÿÿÿ% +$* "!" .!, $# !   + %$  +   +   + #ùÿÿÿ,"÷ÿÿÿ,)÷ÿÿÿ#'õÿÿÿ#!ùÿÿÿ+ ÷ÿÿÿ+&÷ÿÿÿ"%õÿÿÿ")÷ÿÿÿ#'õÿÿÿ#-öÿÿÿ,ôÿÿÿ&÷ÿÿÿ"%õÿÿÿ"+öÿÿÿ)ôÿÿÿ,öÿÿÿ+ôÿÿÿ.öÿÿÿ-óÿÿÿ+öÿÿÿ*ôÿÿÿ-öÿÿÿ,óÿÿÿ%$'&! $ " '&*)$ " &%**!þÿÿÿ!ÿÿÿÿþÿÿÿ**!!ÿÿÿÿ%þÿÿÿ$úÿÿÿ"ÿÿÿÿ !ûÿÿÿ !þÿÿÿ úÿÿÿÿÿÿÿûÿÿÿ"ÿÿÿÿ"ûÿÿÿ ""üÿÿÿÿÿÿÿûÿÿÿ üÿÿÿ"!üÿÿÿþÿÿÿ"!üÿÿÿþÿÿÿ              -      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokp¨Âþÿÿ >Âþÿÿàÿÿÿ>Âþÿÿ Âþÿÿàÿÿÿƒþÿÿ >ƒþÿÿàÿÿÿ>ƒþÿÿ ƒþÿÿàÿÿÿÂþÿÿ>ÂþÿÿÁÿÿÿÂþÿÿ>%ÂþÿÿÁÿÿÿ%ƒþÿÿ>ƒþÿÿÁÿÿÿƒþÿÿ>%ƒþÿÿÁÿÿÿ%»þÿÿ]í¯þÿÿDáƒþÿÿp�wþÿÿWƒ¢þÿÿ]–þÿÿDújþÿÿp¨^þÿÿWœ}þÿÿp‰pþÿÿW},þÿÿƒW þÿÿjKpþÿÿp¯dþÿÿW¢ þÿÿƒ}þÿÿjp%þÿÿƒ]þÿÿjQúýÿÿ�Díýÿÿv8%þÿÿƒvþÿÿjjúýÿÿ�]íýÿÿvQ©þÿÿÁÿÿÿúœþÿÿ¨ÿÿÿúáþÿÿ®ÿÿÿœÔþÿÿ•ÿÿÿœ�þÿÿÁÿÿÿíƒþÿÿ¨ÿÿÿíÈþÿÿ®ÿÿÿ�»þÿÿ•ÿÿÿ�áþÿÿ®ÿÿÿœÔþÿÿ•ÿÿÿœ ÿÿÿ¢ÿÿÿKÿÿÿ‰ÿÿÿKÈþÿÿ®ÿÿÿ�»þÿÿ•ÿÿÿ�ôþÿÿ¢ÿÿÿ>çþÿÿ‰ÿÿÿ>ÿÿÿ¢ÿÿÿKúþÿÿ‰ÿÿÿKÿÿÿœÿÿÿ ÿÿÿƒÿÿÿ úþÿÿ¢ÿÿÿ>íþÿÿ‰ÿÿÿ> ÿÿÿœÿÿÿÿÿÿƒÿÿÿ¯þÿÿ8 –þÿÿ KþÿÿW 2þÿÿ2 ¯þÿÿ8>–þÿÿ>KþÿÿW>2þÿÿ2>KþÿÿW 2þÿÿ2 çýÿÿv ÎýÿÿQ KþÿÿW>2þÿÿ2>çýÿÿv>ÎýÿÿQ>»ýÿÿp»ýÿÿK»ýÿÿ�d»ýÿÿjpáýÿÿpáýÿÿKáýÿÿ�dáýÿÿjpœþÿÿíÿÿÿ ©þÿÿÇÿÿÿ 8þÿÿÔÿÿÿ Eþÿÿ®ÿÿÿ œþÿÿíÿÿÿ>©þÿÿÇÿÿÿ>8þÿÿÔÿÿÿ>Eþÿÿ®ÿÿÿ>8þÿÿÔÿÿÿ Eþÿÿ®ÿÿÿ Ôýÿÿ»ÿÿÿ áýÿÿ•ÿÿÿ 8þÿÿÔÿÿÿ>Eþÿÿ®ÿÿÿ>Ôýÿÿ»ÿÿÿ>áýÿÿ•ÿÿÿ>»ýÿÿÁÿÿÿ»ýÿÿœÿÿÿ»ýÿÿ¢ÿÿÿv»ýÿÿ|ÿÿÿ]áýÿÿÁÿÿÿáýÿÿœÿÿÿáýÿÿ¢ÿÿÿváýÿÿ|ÿÿÿ]000000000000 0  +      ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+10223154667510445132667320446231557398::;9=<>>?=98<<=9;:>>?;:8<<>:;9==?;A@BBCAEDFFGEA@DDEACBFFGCB@DDFBCAEEGCIHJJKIMLNNOMIHLLMIKJNNOKJHLLNJKIMMOKQPRRSQUTVVWUQPTTUQSRVVWSRPTTVRSQUUWSYXZZ[Y]\^^_]YX\\]Y[Z^^_[ZX\\^Z[Y]]_[a`bbcaedffgea`ddeacbffgcb`ddfbcaeegcihjjkimlnnomihllmikjnnokjhllnjkimmokp¨àÿÿÿ àÿÿÿüÿÿÿ àÿÿÿàÿÿÿüÿÿÿÙÿÿÿ Ùÿÿÿüÿÿÿ ÙÿÿÿÙÿÿÿüÿÿÿàÿÿÿàÿÿÿùÿÿÿàÿÿÿàÿÿÿùÿÿÿÙÿÿÿÙÿÿÿùÿÿÿÙÿÿÿÙÿÿÿùÿÿÿßÿÿÿ ÞÿÿÿÙÿÿÿ Øÿÿÿ Ýÿÿÿ Ûÿÿÿ×ÿÿÿ ÖÿÿÿÙÿÿÿ Øÿÿÿ Ñÿÿÿ Ïÿÿÿ +Øÿÿÿ ÖÿÿÿÏÿÿÿ Îÿÿÿ + Ðÿÿÿ Ïÿÿÿ +ÌÿÿÿÊÿÿÿ Ðÿÿÿ Ïÿÿÿ + +Ìÿÿÿ Êÿÿÿ ÝÿÿÿùÿÿÿÜÿÿÿ÷ÿÿÿãÿÿÿ÷ÿÿÿâÿÿÿõÿÿÿÛÿÿÿùÿÿÿÙÿÿÿ÷ÿÿÿàÿÿÿ÷ÿÿÿßÿÿÿõÿÿÿãÿÿÿ÷ÿÿÿâÿÿÿõÿÿÿçÿÿÿöÿÿÿæÿÿÿôÿÿÿàÿÿÿ÷ÿÿÿßÿÿÿõÿÿÿåÿÿÿöÿÿÿãÿÿÿôÿÿÿçÿÿÿöÿÿÿåÿÿÿôÿÿÿèÿÿÿöÿÿÿçÿÿÿóÿÿÿåÿÿÿöÿÿÿäÿÿÿôÿÿÿçÿÿÿöÿÿÿæÿÿÿóÿÿÿÞÿÿÿÛÿÿÿÔÿÿÿÑÿÿÿÞÿÿÿÛÿÿÿÔÿÿÿÑÿÿÿÔÿÿÿÑÿÿÿÊÿÿÿ ÇÿÿÿÔÿÿÿÑÿÿÿÊÿÿÿ ÇÿÿÿÅÿÿÿ ÅÿÿÿÅÿÿÿ Åÿÿÿ + Éÿÿÿ ÉÿÿÿÉÿÿÿ Éÿÿÿ + ÜÿÿÿþÿÿÿÝÿÿÿúÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÜÿÿÿþÿÿÿÝÿÿÿúÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÈÿÿÿùÿÿÿÉÿÿÿõÿÿÿÒÿÿÿûÿÿÿÓÿÿÿ÷ÿÿÿÈÿÿÿùÿÿÿÉÿÿÿõÿÿÿÅÿÿÿùÿÿÿÅÿÿÿöÿÿÿÅÿÿÿöÿÿÿ Åÿÿÿòÿÿÿ ÉÿÿÿùÿÿÿÉÿÿÿöÿÿÿÉÿÿÿöÿÿÿ Éÿÿÿòÿÿÿ 000000000000 0  0 0  0 0  0 0  0 0 @@ -1248,4 +1300,18 @@ Talons; 0ZX\ 0\^Z 0[Y] -0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mok \ No newline at end of file +0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mokÂ(K +Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿnÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿsn-K +Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿs-ÎÿÿÿÎÿÿÿÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ2ÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ20 0 0 +0 + 0 0 +0 0 0 0 00 00000000000 0 + 0 +0 0 0 000000000000Â(K +Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿ’ÿÿÿÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿs’ÿÿÿ-K +Köÿÿÿ-çÿÿÿûÿÿÿ�ÿÿÿ£ÿÿÿÎÿÿÿçÿÿÿÎÿÿÿûÿÿÿs£ÿÿÿ-ÎÿÿÿÎÿÿÿÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ2ÎÿÿÿÎÿÿÿçÿÿÿœÿÿÿÎÿÿÿœÿÿÿ20 0 0 +0 + 0 0 +0 0 0 0 00 00000000000 0 + 0 +0 0 0 000000000000 \ No newline at end of file diff --git a/Demo/Games/TheDead.HC b/Demo/Games/TheDead.HC index f2fb65eebe5704bd58715f4600645b5e4b83d84d..d9c6b652305bb5f59ffd9cbeb3e2a9bd3cee7c7e 100644 GIT binary patch delta 100 zcmdmNcEW7Kes*2cLYG39Vi#u@XOq+tCsSt=C(}Y_D8!JN{FuFgy(ryKC$T7fa~j7E fMh*~1EwLzlvJ%&F?xJ)fYlY+tTafGpu4DlKr{*C~ delta 87 zcmX?Mw%KgMes+~YmqM3f7iSme)DkCWr$T2aL=m0*hP{E=P$zM7F~<%@7DFAi#L327 b%Xy5f6_PV-6Ai7oxHu=<@rZ5W_7DI7Bxf54 diff --git a/Demo/Games/TicTacToe.HC b/Demo/Games/TicTacToe.HC index ab1c750..921eb52 100644 --- a/Demo/Games/TicTacToe.HC +++ b/Demo/Games/TicTacToe.HC @@ -35,12 +35,12 @@ U0 DrawBoard(I64 player) break; } -//ip.pos.x,ip.pos.y are input pointer (mouse) x,y. - //ip.lb is mouse left button +//ms.pos.x,ms.pos.y are mouse x,y. + //ms.lb is mouse left bttn if (player==1) - DrawX(dc,ip.pos.x-Fs->pix_left,ip.pos.y-Fs->pix_top); + DrawX(dc,ms.pos.x-Fs->pix_left,ms.pos.y-Fs->pix_top); else - DrawO(dc,ip.pos.x-Fs->pix_left,ip.pos.y-Fs->pix_top); + DrawO(dc,ms.pos.x-Fs->pix_left,ms.pos.y-Fs->pix_top); DCDel(dc); } @@ -49,19 +49,19 @@ U0 TakeTurn(I64 player) I64 i,x=0,y=0; while (!(100<=x<400) || !(100<=y<400) || board[i]) { if (player==1) - Beep(500); + Beep; else - Beep(1000); - while (!ip.lb) { + Beep(74); + while (!ms.lb) { DrawBoard(player); Refresh; } - while (ip.lb) { + while (ms.lb) { DrawBoard(player); Refresh; } - x=ip.pos.x-Fs->pix_left; - y=ip.pos.y-Fs->pix_top; + x=ms.pos.x-Fs->pix_left; + y=ms.pos.y-Fs->pix_top; i=(x-100)/100+(y-100)/100*3; } board[i]=player; @@ -91,18 +91,18 @@ U0 DoGame() while (TRUE) { TakeTurn(1); if (CheckWinner(1)) { - Beep(500); - Beep(500); - Beep(500); + Beep; + Beep; + Beep; break; } if (++moves==9) break; TakeTurn(2); if (CheckWinner(2)) { - Beep(1000); - Beep(1000); - Beep(1000); + Beep(74); + Beep(74); + Beep(74); break; } if (++moves==9) break; diff --git a/Demo/Games/TreeCheckers.HC b/Demo/Games/TreeCheckers.HC index 55c7849..440c1b4 100644 --- a/Demo/Games/TreeCheckers.HC +++ b/Demo/Games/TreeCheckers.HC @@ -123,7 +123,7 @@ U0 KillsChk(I64 x1,I64 y1,I64 player) dd=SqrI64(x2-x1)+SqrI64(y2-y1); if (dd<=(CIRCLE_RAD+2)*(CIRCLE_RAD+2)) { u[i].alive=FALSE; - Snd(500);Sleep(100);Snd(0);Sleep(25); + Snd(62);Sleep(100);Snd;Sleep(25); num_alive[u[i].player]--; do { found=FALSE; @@ -132,7 +132,7 @@ U0 KillsChk(I64 x1,I64 y1,I64 player) !u[u[j].link].alive) { found=TRUE; u[j].alive=FALSE; - Snd(500);Sleep(100);Snd(0);Sleep(25); + Snd(62);Sleep(100);Snd;Sleep(25); num_alive[u[j].player]--; } } while (found); @@ -283,7 +283,7 @@ U0 CleanUp() U0 TreeCheckers() { - I64 msg_code,a1,a2,ch,sc; + I64 msg_code,arg1,arg2,ch,sc; Unit *tmpu; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ @@ -311,11 +311,11 @@ cn_start: show_start=FALSE; Fs->draw_it=&DrawIt; while (TRUE) { - msg_code=GetMsg(&a1,&a2, - 1<1 && num_alive[1]>1) { - tmpu=UnitFind(a1,a2,cur_player); + tmpu=UnitFind(arg1,arg2,cur_player); end_x=start_x=tmpu->x; end_y=start_y=tmpu->y; show_start=TRUE; } break; - case MSG_IP_MOVE: + case MSG_MS_MOVE: if (tmpu) - UnitMove(tmpu,a1,a2); + UnitMove(tmpu,arg1,arg2); break; - case MSG_IP_L_UP: - UnitMove(tmpu,a1,a2); + case MSG_MS_L_UP: + UnitMove(tmpu,arg1,arg2); KillsChk(tmpu->x,tmpu->y,cur_player); show_start=FALSE; tmpu=NULL; diff --git a/Demo/Games/Varoom.HC b/Demo/Games/Varoom.HC index a4e9745..5738044 100644 --- a/Demo/Games/Varoom.HC +++ b/Demo/Games/Varoom.HC @@ -87,8 +87,8 @@ -RegSetDftEntry("TempleOS/Varoom","F64 best_score=9999;\n"); -RegExeBranch("TempleOS/Varoom"); +RegDft("TempleOS/Varoom","F64 best_score=9999;\n"); +RegExe("TempleOS/Varoom"); F64 distance,t0,tf; Bool game_over; @@ -468,7 +468,7 @@ U0 DrawIt(CTask *task,CDC *dc) dc->x=task->pix_width>>1; dc->y=task->pix_height-150; dc->z=GR_Z_ALL; - SpriteMat3B(dc,0,0,-100,c[0].img,r); + Sprite3Mat4x4B(dc,0,0,-100,c[0].img,r); //Map GrBlot(dc,w-track_map->width,h-track_map->height,track_map); @@ -509,9 +509,9 @@ U0 AnimateTask(I64) Track *tmpt,*tmpt2; while (TRUE) { if (!game_over) - Snd(0.01*c[0].speed*3+10); + Snd(12.0*Log2(c[0].speed/500+0.7)); else - Snd(0); + Snd; for (i=0;ip.x-=0.01*tmpc->speed*Cos(tmpc->é-ã/2); @@ -542,7 +542,7 @@ U0 AnimateTask(I64) for (i=1;i>1*CAR_LENGTH>>1) { game_over=TRUE; - Noise(500,50,100); + Noise(500,22,34); Sleep(500); break; } @@ -697,7 +697,7 @@ vr_done: //Don't goto out of try CleanUp; SettingsPop; MenuPop; - RegWriteBranch("TempleOS/Varoom","F64 best_score=%5.4f;\n",best_score); + RegWrite("TempleOS/Varoom","F64 best_score=%5.4f;\n",best_score); } Varoom; diff --git a/Demo/Games/Wenceslas.HC b/Demo/Games/Wenceslas.HC index 5ef4677..8520df3 100644 --- a/Demo/Games/Wenceslas.HC +++ b/Demo/Games/Wenceslas.HC @@ -1,5 +1,5 @@ -RegSetDftEntry("TempleOS/Wenceslas","F64 best_score=9999;\n"); -RegExeBranch("TempleOS/Wenceslas"); +RegDft("TempleOS/Wenceslas","F64 best_score=9999;\n"); +RegExe("TempleOS/Wenceslas"); #define BORDER 5 #define KING_STEP 6 @@ -177,12 +177,12 @@ U0 DrawIt(CTask *task,CDC *dc) Mat4x4RotY(r,tmpp->é+ã/2); Mat4x4RotX(r,ã/6); if (tmpp->stopped) - SpriteMat3B(dc,tmpp->x,tmpp->y,GR_Z_ALL,peasant_imgs[0],r); + Sprite3Mat4x4B(dc,tmpp->x,tmpp->y,GR_Z_ALL,peasant_imgs[0],r); else { tmps=SpriteInterpolate(Saw(animate_mS/250.0,1.0), peasant_imgs[ animate_phase &3], peasant_imgs[(animate_phase+1)&3]); - SpriteMat3B(dc,tmpp->x,tmpp->y,GR_Z_ALL,tmps,r); + Sprite3Mat4x4B(dc,tmpp->x,tmpp->y,GR_Z_ALL,tmps,r); Free(tmps); } tmpp=tmpp->next; @@ -193,12 +193,12 @@ U0 DrawIt(CTask *task,CDC *dc) Mat4x4RotY(r,king_é+ã/2); Mat4x4RotX(r,ã/6); if (tS>king_timeout) - SpriteMat3B(dc,king_x,king_y,GR_Z_ALL,king_imgs[0],r); + Sprite3Mat4x4B(dc,king_x,king_y,GR_Z_ALL,king_imgs[0],r); else { tmps=SpriteInterpolate(Saw(king_mS/250.0,1.0), king_imgs[ king_phase &3], king_imgs[(king_phase+1)&3]); - SpriteMat3B(dc,king_x,king_y,GR_Z_ALL,tmps,r); + Sprite3Mat4x4B(dc,king_x,king_y,GR_Z_ALL,tmps,r); Free(tmps); } @@ -396,10 +396,10 @@ U0 AnimateTask(I64) if (!not_stopped_cnt && !tf) { tf=tS; music.mute=TRUE; - Snd(2000);Sleep(200);Snd(0);Sleep(100); + Snd(86);Sleep(200);Snd;Sleep(100); if (tf-t0color=YELLOW; GrLine(dc,balls[0].x,balls[0].y, - ip.pos.x-task->pix_left-task->scroll_x, - ip.pos.y-task->pix_top-task->scroll_y); + ms.pos.x-task->pix_left-task->scroll_x, + ms.pos.y-task->pix_top-task->scroll_y); for (i=0;ix,springs[i].end1->y, springs[i].end2->x,springs[i].end2->y); @@ -46,9 +46,9 @@ U0 DrawIt(CTask *task,CDC *dc) GrCircle(dc,balls[i].x,balls[i].y,BALL_RADIUS); } if (snd_on) - Snd(1000); + Snd(74); else - Snd(0); + Snd; } U0 MyDerivative(CMathODE *ode,F64 t,COrder2D3 *,COrder2D3 *) @@ -59,8 +59,8 @@ U0 MyDerivative(CMathODE *ode,F64 t,COrder2D3 *,COrder2D3 *) CTask *task=ode->win_task; D3SubEqu(D3Equ(&p2, - ip.pos.x-task->pix_left-task->scroll_x, - ip.pos.y-task->pix_top-task->scroll_y,0), + ms.pos.x-task->pix_left-task->scroll_x, + ms.pos.y-task->pix_top-task->scroll_y,0), &balls[0].state->x); D3AddEqu(&balls[0].DstateDt->DxDt,D3MulEqu(&p2,STRETCH)); @@ -80,7 +80,7 @@ U0 MyDerivative(CMathODE *ode,F64 t,COrder2D3 *,COrder2D3 *) dd=D3NormSqr(&p); if (dd<=(2*BALL_RADIUS)*(2*BALL_RADIUS)) { if (t-collision_t>0.05) { - Noise(50,5000,6000); + Noise(50,102,105); collision_t=t; } d=Sqrt(dd)+0.0001; @@ -129,8 +129,8 @@ U0 Whap() for (i=1;ipix_width>>1,RandI16%500+Fs->pix_height>>1,0); - balls[0].x=ip.pos.x-Fs->pix_left-Fs->scroll_x; - balls[0].y=ip.pos.y-Fs->pix_top-Fs->scroll_y; + balls[0].x=ms.pos.x-Fs->pix_left-Fs->scroll_x; + balls[0].y=ms.pos.y-Fs->pix_top-Fs->scroll_y; for (i=0;iP l*a!uMlH7tsT{|RGVL}j-a|QI+4Gj%+3=K^-FBNEG1OPgcUX=g< delta 279 zcmX@1vRY+B79&$;!Q>o952nn5&D$77S(&1YC!b|215vK*PeGD89CJX_DUQi1nFV?U z`Net_inbLBH8l!QZl$7ar6!jG7JD)y2fU*vZt*#L3hx)y2fow9w66NzLy25%sqQYtZtiaGg)Xip zsZOS@4kpF!rYlXk34G=}m delta 242 zcmX^5g6+TyHolLy35msqQYt zZtiaGg)XkCPOe79?#3X4T?*YmOh+SkV@H_D>JXy|YS^63XU+=s#zZ!i=3~O!j|nr@ GF8}~q3P>^l diff --git a/Demo/Graphics/3DPoly.HC b/Demo/Graphics/3DPoly.HC index a0148ac..3301f8e 100644 --- a/Demo/Graphics/3DPoly.HC +++ b/Demo/Graphics/3DPoly.HC @@ -9,12 +9,12 @@ U0 Main() while (!ScanChar) { DCDepthBufRst(dc); DCSymmetrySet(dc,Fs->pix_width/2,Fs->pix_height/2, - ip.pos.x-Fs->pix_left-Fs->scroll_x, - ip.pos.y-Fs->pix_top-Fs->scroll_y); + ms.pos.x-Fs->pix_left-Fs->scroll_x, + ms.pos.y-Fs->pix_top-Fs->scroll_y); dc->color=LTBLUE; GrLine(dc,Fs->pix_width/2,Fs->pix_height/2, - ip.pos.x-Fs->pix_left-Fs->scroll_x, - ip.pos.y-Fs->pix_top-Fs->scroll_y); + ms.pos.x-Fs->pix_left-Fs->scroll_x, + ms.pos.y-Fs->pix_top-Fs->scroll_y); Mat4x4IdentEqu(dc->r); Mat4x4RotX(dc->r,ê); diff --git a/Demo/Graphics/BSpline.HC b/Demo/Graphics/BSpline.HC index 51f45ee..c17fb63 100644 --- a/Demo/Graphics/BSpline.HC +++ b/Demo/Graphics/BSpline.HC @@ -3,7 +3,7 @@ U0 BSplineDemo() { CDC *dc=DCAlias; - I64 a1,a2,i=0,msg_code; + I64 arg1,arg2,i=0,msg_code; CD3I32 c[MAX_PTS]; SettingsPush; @@ -13,14 +13,14 @@ U0 BSplineDemo() "Sel ctrl points with left mouse. Right when finished.\n"; DCFill; do { - msg_code=GetMsg(&a1,&a2,1<color=GREEN; - GrCircle(dc,a1,a2,10); + GrCircle(dc,arg1,arg2,10); i++; } - } while (icolor=RED; Gr2BSpline(dc,c,i,TRUE); dc->color=BLUE; diff --git a/Demo/Graphics/Balloon.HC b/Demo/Graphics/Balloon.HC index f0aef6f..7f134f6 100644 --- a/Demo/Graphics/Balloon.HC +++ b/Demo/Graphics/Balloon.HC @@ -24,7 +24,7 @@ U0 Balloon() for (j=0;j<3;j++) *(text.vga_alias(I64)+0x1000+(i+k)*640/8+j)(U8 *)=a[i*3+j]; - BusyWait(40000); + Busy(40000); for (i=0;i<20;i++) for (j=0;j<3;j++) diff --git a/Demo/Graphics/Camp.HC b/Demo/Graphics/Camp.HC deleted file mode 100644 index 3ebeaf468b25e887a145816f0fe5a3091fb1de4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23099 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 delta 42 xcmaDN{6u&{n0#h|UO|4bUWIN+VsW;vT|s6=d`@awi8YskLZxkH!N$^jP5@Ux4@&?5 diff --git a/Demo/Graphics/Doodle.HC b/Demo/Graphics/Doodle.HC index b01a7cf..c31c629 100644 --- a/Demo/Graphics/Doodle.HC +++ b/Demo/Graphics/Doodle.HC @@ -2,7 +2,7 @@ U0 Doodle() { - I64 msg_code,i,x1,y1,x2,y2,a1,a2,color=BLACK; + I64 msg_code,i,x1,y1,x2,y2,arg1,arg2,color=BLACK; CDC *dc=DCAlias; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ @@ -14,30 +14,31 @@ U0 Doodle() DocClear; DCFill; do { - msg_code=GetMsg(&a1,&a2,1<=0) color=i; break; - case MSG_IP_L_DOWN: - x1=a1; y1=a2; - x2=a1; y2=a2; + case MSG_MS_L_DOWN: + x1=arg1; y1=arg2; + x2=arg1; y2=arg2; dc->color=ROP_XOR+color^TRANSPARENT; dc->pen_width=7; - while (msg_code!=MSG_IP_L_UP) { + while (msg_code!=MSG_MS_L_UP) { GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2, - 1<4msD31cQm64(Uo!`)NVe-Y$*T$DYGd4 delta 140 zcmbQB(X6q-kGbBc(A_xI*}c%!(aky4#jVguNzL&*rQtdmQs8%RZo ftCM4)lVfU$qpM4*tC2gZ8ODXU)os4TY$gBzu|+1- diff --git a/Demo/Graphics/FontEd.HC b/Demo/Graphics/FontEd.HC index 88ea7cf..7515e8c 100644 --- a/Demo/Graphics/FontEd.HC +++ b/Demo/Graphics/FontEd.HC @@ -60,7 +60,7 @@ U0 FESave(Bool pmt) I64 i; for (i=0;i<256;i++) { DocPrint(doc,"0x%016X,",text.font[i]); - if (Bt(chars_bmp_safe_dollar,i)) + if (Bt(char_bmp_safe_dollar,i)) DocPrint(doc,"//%c",i); else if (i=='$$') DocPrint(doc,"//$$$$",i); @@ -74,7 +74,7 @@ U0 FESave(Bool pmt) U0 FontEd() { - I64 msg_code,a1,a2,k; + I64 msg_code,arg1,arg2,k; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ MenuPush( "File {" @@ -90,12 +90,12 @@ U0 FontEd() try { Fs->draw_it=&DrawIt; while (TRUE) { - switch (msg_code=GetMsg(&a1,&a2, - 1<pen_width=1; dc->flags&=~(DCF_TRANSFORMATION|DCF_SYMMETRY); @@ -10,21 +10,21 @@ U0 DrawMyInputPtr(CDC *dc,I64 x,I64 y) U0 GridDemo() { CGridGlbls old_grid; - U0 (*old_draw_input_ptr)(CDC *dc,I64 x,I64 y); //Can't init this type of var. - MemCpy(&old_grid,&ip_grid,sizeof(CGridGlbls)); + U0 (*old_draw_ms)(CDC *dc,I64 x,I64 y); //Can't init this type of var. + MemCpy(&old_grid,&ms_grid,sizeof(CGridGlbls)); GridInit; - ip_grid.snap=TRUE; //You can set other $LK,"stuff",A="MN:CGridGlbls"$. - ip_grid.x=GRID; - ip_grid.y=GRID; - old_draw_input_ptr=gr.fp_draw_input_ptr; - gr.fp_draw_input_ptr=&DrawMyInputPtr; - while (!ip.lb) {//Left button to exit. - GrPlot(,ip.pos.x,ip.pos.y); + ms_grid.snap=TRUE; //You can set other $LK,"stuff",A="MN:CGridGlbls"$. + ms_grid.x=GRID; + ms_grid.y=GRID; + old_draw_ms=gr.fp_draw_ms; + gr.fp_draw_ms=&DrawMyMs; + while (!ms.lb) {//Left bttn to exit. + GrPlot(,ms.pos.x,ms.pos.y); Yield; } DCFill; - gr.fp_draw_input_ptr=old_draw_input_ptr; - MemCpy(&ip_grid,&old_grid,sizeof(CGridGlbls)); + gr.fp_draw_ms=old_draw_ms; + MemCpy(&ms_grid,&old_grid,sizeof(CGridGlbls)); } GridDemo; diff --git a/Demo/Graphics/Hanoi.HC b/Demo/Graphics/Hanoi.HC index a73d53d..c2ed739 100644 --- a/Demo/Graphics/Hanoi.HC +++ b/Demo/Graphics/Hanoi.HC @@ -77,7 +77,7 @@ U0 DrawIt(CTask *task,CDC *dc) U0 MySleep() { if (ScanChar) - ThrowBreak; + throw; Sleep(3); } diff --git a/Demo/Graphics/InputPointer.HC b/Demo/Graphics/InputPointer.HC deleted file mode 100644 index 5a94044..0000000 --- a/Demo/Graphics/InputPointer.HC +++ /dev/null @@ -1,11 +0,0 @@ -U0 InputPointer() -{ - "Press left mouse button to exit.\n"; - while (!ip.lb) { //Left button to exit. - GrPlot(,ip.pos.x,ip.pos.y); - Refresh; - } - DCFill; -} - -InputPointer; diff --git a/Demo/Graphics/Lattice.HC b/Demo/Graphics/Lattice.HC index 1c31489..fa107b3 100644 --- a/Demo/Graphics/Lattice.HC +++ b/Demo/Graphics/Lattice.HC @@ -135,7 +135,7 @@ U0 SetMenu() U0 Lattice() { Bool aim=FALSE; - I64 a1,a2; + I64 arg1,arg2; CDC *dc=DCAlias; DCDepthBufAlloc(dc); MenuPush( @@ -181,29 +181,29 @@ U0 Lattice() Fs->draw_it=&DrawIt; try { while (TRUE) { - switch (GetMsg(&a1,&a2,1<draw_it=&DrawIt; Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; do { - msg_code=GetMsg(&a1,&a2,1<color=GREEN; - dc[cur_dc]->pen_width=0.04*ip.speed; + dc[cur_dc]->pen_width=0.04*ms.speed; GrLine3(dc[cur_dc],x1,y1,0,x2,y2,0); restart=TRUE; - msg_code=GetMsg(&a1,&a2,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 diff --git a/Demo/Graphics/MouseDemo.HC b/Demo/Graphics/MouseDemo.HC new file mode 100644 index 0000000..62ddef7 --- /dev/null +++ b/Demo/Graphics/MouseDemo.HC @@ -0,0 +1,11 @@ +U0 Mouse() +{ + "Press left mouse bttn to exit.\n"; + while (!ms.lb) { //Left bttn to exit. + GrPlot(,ms.pos.x,ms.pos.y); + Refresh; + } + DCFill; +} + +Mouse; diff --git a/Demo/Graphics/Pick.HC b/Demo/Graphics/Pick.HC index 6adc953d26388be3bfcf868422859031d41db68c..b12d044d997e86107c8dc6e73695b3530665cf20 100644 GIT binary patch delta 235 zcmdlZbV6vtBZ=H%y@LE=y$WkC1%;GkUAyGcqWDVN+~SSDelfBar5oxb7Nu|g&a{Y; z1H@5FEJ~j|mqn7vH+b?6mYwb(vBaWuBTX&^Fwoam@$uGCf*Go$<7lho>t~f)tfZol zn3tk}EL(|?oxFuLlQlQLv^aIL9-AyvZt-MaHf0c1#HKC;vIAtVkq#Fp*b;@w^I60N seS_nD{li>q3~g+DgWcnOgC`$na{=k$WtRg{y6n14zQLPg*dH(g0M_A0fB*mh delta 261 zcmX>hv`1*dBZLhOd&9sP7-cUy^ z(MZS8#>O|;J>J_jGTy~M+^+`8_Y9bPfMut%p-!TaCYJ&j=6B!b15uXjx=fw{n={xSFaiMBO^Df0CvkJHkRTI_p^jSO*vcF7ewiIYEy$}@Qe bOcoN;m~0~^GdW7k7{u*|a5rBUJIMq9r)w;< diff --git a/Demo/Graphics/PoleZeros.HC b/Demo/Graphics/PoleZeros.HC index a7dca59..182cdc3 100644 --- a/Demo/Graphics/PoleZeros.HC +++ b/Demo/Graphics/PoleZeros.HC @@ -37,7 +37,7 @@ F64 F(Complex *x) CDiv(&n1,&num,&denom); R2P(&m,&a,n1.x,n1.y); - if (ip.rb) + if (ms.rb) return ã+a; else return m; @@ -65,7 +65,7 @@ F64 MPDraw(CTask *task) U0 Draw() { - CSrvCmd *tmpm[MP_MAX_PROCESSORS]; + CJob *tmpm[MP_MAX_PROCESSORS]; F64 y_total,old_y_total=MAX_F64; I64 i,w=Fs->pix_width,h=Fs->pix_height,cx=w/2,cy=h/2; CDC *dc=DCAlias; @@ -94,7 +94,7 @@ U0 Draw() U0 PoleZeros() { - I64 msg_code,a1,a2,p11,p22,cx,cy; + I64 msg_code,arg1,arg2,p11,p22,cx,cy; Complex *tmpc=NULL; PopUpOk( @@ -118,24 +118,25 @@ U0 PoleZeros() try { Draw; while (TRUE) { - msg_code=GetMsg(&a1,&a2,1<pix_width/2; cy=Fs->pix_height/2; switch (msg_code) { - case MSG_IP_L_DOWN: - tmpc=PoleZeroFind(a1-cx,cy-a2); + case MSG_MS_L_DOWN: + tmpc=PoleZeroFind(arg1-cx,cy-arg2); break; - case MSG_IP_MOVE: + case MSG_MS_MOVE: if (tmpc) { - p11=a1;p22=a2; + p11=arg1;p22=arg2; //get to last mouse move - while (msg_code=ScanMsg(&a1,&a2,1<x=a1-cx; - tmpc->y=cy-a2; + tmpc->x=arg1-cx; + tmpc->y=cy-arg2; tmpc=NULL; Draw; } break; - case MSG_IP_R_DOWN: - case MSG_IP_R_UP: + case MSG_MS_R_DOWN: + case MSG_MS_R_UP: Draw; break; case MSG_KEY_DOWN: - if (a1==CH_SHIFT_ESC||a1==CH_ESC) + if (arg1==CH_SHIFT_ESC||arg1==CH_ESC) goto pz_done; } Refresh; diff --git a/Demo/Graphics/ScrnCapture.HC b/Demo/Graphics/ScrnCapture.HC index 0415cff..8b9a86b 100644 --- a/Demo/Graphics/ScrnCapture.HC +++ b/Demo/Graphics/ScrnCapture.HC @@ -1,24 +1,13 @@ //See $LK,"::/Demo/Games/Stadium/StadiumGen.HC"$. -U0 ViewScrnCapture(U8 *filename) -{ - CDC *dc=DCAlias(,Fs), - *dc2=GRRead(filename); - GrBlot(dc,0,0,dc2); - DCDel(dc2); - DCDel(dc); -} - U0 Main() { "Capture scrn...\n"; PressAKey; - GRScrnCapture("~/DemoScrnShot"); - + GRScrnCaptureWrite("~/DemoScrnShot"); "View captured scrn...\n"; PressAKey; - ViewScrnCapture("~/DemoScrnShot"); - + GRScrnCaptureRead("~/DemoScrnShot"); PressAKey; DCFill; } diff --git a/Demo/Graphics/Shading.HC b/Demo/Graphics/Shading.HC index 332f126..9e9ae56 100644 --- a/Demo/Graphics/Shading.HC +++ b/Demo/Graphics/Shading.HC @@ -72,8 +72,8 @@ U0 DrawIt(CTask *task,CDC *dc) Mat4x4Scale(dc->r,tt); DCMat4x4Set(dc,dc->r); - ls.x=-(ip.pos.x-task->pix_left-task->scroll_x-cx); - ls.y=-(ip.pos.y-task->pix_top-task->scroll_y-cy); + ls.x=-(ms.pos.x-task->pix_left-task->scroll_x-cx); + ls.y=-(ms.pos.y-task->pix_top-task->scroll_y-cy); ls.z=GR_WIDTH/8; d=1<<16/D3I32Norm(&ls); ls.x*=d; diff --git a/Demo/Graphics/Shadow.HC b/Demo/Graphics/Shadow.HC index aff8f952473d2ede41474eb5808e4908b614beec..aef853f9959396486907a2ce73e8e8ebebfbc333 100644 GIT binary patch delta 33 ocmZn``XRXC1B*yVMyf(_Mq)~Sxk6@cVtT4Vl3wvwin_task=Fs; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; c->state=&sld; MemSet(&sld,0,sizeof(CSliderState)); diff --git a/Demo/Graphics/Speedline.HC b/Demo/Graphics/Speedline.HC index cf4d269..3eddd13 100644 --- a/Demo/Graphics/Speedline.HC +++ b/Demo/Graphics/Speedline.HC @@ -2,7 +2,7 @@ public U0 SpeedLineDemo() { - I64 msg_code,cnt,x1,y1,x2,y2,a1,a2,color=BLACK; + I64 msg_code,cnt,x1,y1,x2,y2,arg1,arg2,color=BLACK; CDC *dc=DCAlias; dc->color=color; @@ -15,31 +15,32 @@ public U0 SpeedLineDemo() DocClear; DCFill; do { - msg_code=GetMsg(&a1,&a2,1<=0) dc->color=color; break; - case MSG_IP_L_DOWN: - x1=a1; y1=a2; - x2=a1; y2=a2; + case MSG_MS_L_DOWN: + x1=arg1; y1=arg2; + x2=arg1; y2=arg2; cnt=0; - while (msg_code!=MSG_IP_L_UP) { - dc->pen_width=0.04*ip.speed; + while (msg_code!=MSG_MS_L_UP) { + dc->pen_width=0.04*ms.speed; GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2, - 1<flags|=DCF_SYMMETRY; DCSymmetrySet(dc,Fs->pix_width/2,0,Fs->pix_width/2,1); do { - msg_code=GetMsg(&a1,&a2, - 1<flags&=~DCF_SYMMETRY; dc->color=ROP_XOR+RED^TRANSPARENT; - x1=a1; y1=a2; - x2=a1; y2=a2; - while (msg_code!=MSG_IP_R_UP) { + x1=arg1; y1=arg2; + x2=arg1; y2=arg2; + while (msg_code!=MSG_MS_R_UP) { GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2, - 1<flags|=DCF_SYMMETRY; break; - case MSG_IP_L_DOWN: + case MSG_MS_L_DOWN: dc->color=ROP_XOR+BLACK^TRANSPARENT; - x1=a1; y1=a2; - x2=a1; y2=a2; - while (msg_code!=MSG_IP_L_UP) { + x1=arg1; y1=arg2; + x2=arg1; y2=arg2; + while (msg_code!=MSG_MS_L_UP) { GrLine3(dc,x1,y1,0,x2,y2,0); - msg_code=GetMsg(&a1,&a2, - 1<6>RU`f)H7rB8mr zsl-&2zL|^5kBP}QcykobCnhH2sL6i(=RmSD0;V7;P#{U7DBVy~+t)E5KHSqK#6v4M cGf$&fFR>_n@^OJSkQ!gXi6DdS3BD5m03D|*Z~y=R delta 95 zcmaFhdd79aPvIzICnX(6TP0sVtKfp7%#ze7BeK>?A;*9F=p#|uu}{7LYg000B% BAn^bI diff --git a/Demo/Graphics/WallPaperCtrl.HC b/Demo/Graphics/WallPaperCtrl.HC index d7ab602..35cc029 100644 --- a/Demo/Graphics/WallPaperCtrl.HC +++ b/Demo/Graphics/WallPaperCtrl.HC @@ -87,7 +87,7 @@ CCtrl *SliderNew() } c=ACAlloc(sizeof(CCtrl)); c->win_task=sys_winmgr_task; - c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_IP; + c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; c->state=ACAlloc(sizeof(CSliderState)); c->draw_it=&DrawCtrlSlider; diff --git a/Demo/InFile/INSetIP.HC b/Demo/InFile/INSetIP.HC deleted file mode 100644 index edf3b0e..0000000 --- a/Demo/InFile/INSetIP.HC +++ /dev/null @@ -1,13 +0,0 @@ -U0 INSetIPDemo() -{ - I64 t,l; - WinBorder(ON); - l=Fs->pix_left+Fs->scroll_x; - t=Fs->pix_top+Fs->scroll_y; - IPSet(,,,FALSE,FALSE); //Mouse unclicked - InSetIP(,l-4,t-4); - InSetIP(20,l+20,t+20,,TRUE); - IPSet(,,,FALSE,FALSE); -} - -INSetIPDemo; diff --git a/Demo/InFile/INDir.IN b/Demo/InFile/InDir.IN similarity index 100% rename from Demo/InFile/INDir.IN rename to Demo/InFile/InDir.IN diff --git a/Demo/InFile/INEd.DD b/Demo/InFile/InEd.DD similarity index 100% rename from Demo/InFile/INEd.DD rename to Demo/InFile/InEd.DD diff --git a/Demo/InFile/INEd.IN b/Demo/InFile/InEd.IN similarity index 90% rename from Demo/InFile/INEd.IN rename to Demo/InFile/InEd.IN index 09e5268..3476b0a 100644 --- a/Demo/InFile/INEd.IN +++ b/Demo/InFile/InEd.IN @@ -4,14 +4,14 @@ Or, type $LK,"InFile",A="MN:InFile"$(filename); See $LK,"InFile",A="FF:::/Doc/Glossary.DD,InFile"$ in the glossary for more info. This InFile will renum the defines in -INEd.DD.Z. Test it by numbering a few wrong +InEd.DD.Z. Test it by numbering a few wrong and running this demo. */ U8 i; -"Ed(\"INEd.DD.Z\");\n"; +"Ed(\"InEd.DD.Z\");\n"; //Go to start of file Msg(MSG_KEY_DOWN,0,SC_CURSOR_UP|SCF_CTRL); for (i=0;i<=0xC3;i++) { diff --git a/Demo/InFile/INPopUp.HC b/Demo/InFile/InPopUp.HC similarity index 100% rename from Demo/InFile/INPopUp.HC rename to Demo/InFile/InPopUp.HC diff --git a/Demo/InFile/INPopUpWait.IN b/Demo/InFile/InPopUpWait.IN similarity index 100% rename from Demo/InFile/INPopUpWait.IN rename to Demo/InFile/InPopUpWait.IN diff --git a/Demo/InFile/INProfile.IN b/Demo/InFile/InProfile.IN similarity index 100% rename from Demo/InFile/INProfile.IN rename to Demo/InFile/InProfile.IN diff --git a/Demo/InFile/InSetIP.HC b/Demo/InFile/InSetIP.HC new file mode 100644 index 0000000..807234c --- /dev/null +++ b/Demo/InFile/InSetIP.HC @@ -0,0 +1,13 @@ +U0 InSetMsDemo() +{ + I64 t,l; + WinBorder(ON); + l=Fs->pix_left+Fs->scroll_x; + t=Fs->pix_top+Fs->scroll_y; + MsSet(,,,FALSE,FALSE); //Mouse unclicked + InSetMs(,l-4,t-4); + InSetMs(20,l+20,t+20,,TRUE); + MsSet(,,,FALSE,FALSE); +} + +InSetMsDemo; diff --git a/Demo/Lectures/MiniGrLib.HC b/Demo/Lectures/MiniGrLib.HC index 9fa7336..8b00800 100644 --- a/Demo/Lectures/MiniGrLib.HC +++ b/Demo/Lectures/MiniGrLib.HC @@ -88,7 +88,7 @@ U0 MGCircle(I64 x,I64 y,F64 r) MGPlot(x+x1,y+y1); while (len-->=0) { - //m1@a1 * m2@a2 = m1*m2@(a1+a2) + //m1@a1 * m2@a2 = m1*m2@(arg1+arg2) //(x1+y1i)*(x2+y2i) = x1*x2+(x1*y1+x2*y2)i-y1*y2 @@ -114,7 +114,7 @@ U0 MiniGrLibDemo() for (i=0;i<300;i+=4) MGCircle(200,100+i,i); MGUpdate; - BusyWait(1500000); + Busy(1500000); /* We are returning graphics to normal operations under TempleOS. It is not normal to by-pass the TempleOS graphcis routines. diff --git a/Demo/Lectures/Optimization.HC b/Demo/Lectures/Optimization.HC index 505769e..33f7fa5 100644 --- a/Demo/Lectures/Optimization.HC +++ b/Demo/Lectures/Optimization.HC @@ -14,7 +14,7 @@ speed-up. Depressing. asm { -LIMIT:: DU64 SAMPLES; //Memory reference should suck, right? +LIMIT:: DU64 SAMPLES; //Memory reference should be bad, right? _BADLY_UNOPTIMIZED:: MOV RAX,0 @@ -61,7 +61,7 @@ _WELL_OPTIMIZED3:: XOR RAX,RAX MOV RCX,SAMPLES-1 @@05: ADD RAX,RCX - LOOP @@05 //Inst sucks in speed, but saves code size. + LOOP @@05 //Inst has slow speed, but saves code size. RET } diff --git a/Demo/Lectures/ScrnMemory.HC b/Demo/Lectures/ScrnMemory.HC index aa25476..137fcc0 100644 --- a/Demo/Lectures/ScrnMemory.HC +++ b/Demo/Lectures/ScrnMemory.HC @@ -35,7 +35,7 @@ are zero, so sel them and make them zero. You can't do reads on VGA memory, by the way. That means no read-modify-writes, too. */ - BusyWait(4000000); + Busy(4000000); //TempleOS has a 4 plane memory duplicate of the scrn, $LK,"gr.scrn_image",A="MN:CGrGlbls"$, //and only writes actual changes. See $LK,"GrUpdateVGAGraphics",A="MN:GrUpdateVGAGraphics"$(). diff --git a/Demo/MagicPairs.HC b/Demo/MagicPairs.HC index 1e5b9f6..f083414 100644 --- a/Demo/MagicPairs.HC +++ b/Demo/MagicPairs.HC @@ -258,7 +258,7 @@ class RangeJob CDoc *doc; I64 num,lo,hi,N,sqrt_primes,cbrt_primes; Prime *primes; - CSrvCmd *cmd; + CJob *cmd; } rj[mp_cnt]; I64 TestCoreSubRange(RangeJob *r) diff --git a/Demo/MemDemo.HC b/Demo/MemDemo.HC index 80ea1bf..11798bb 100644 --- a/Demo/MemDemo.HC +++ b/Demo/MemDemo.HC @@ -2,16 +2,16 @@ U0 MemDemo() { I64 i; "$$HL,1$$$$BLACK$$ -#define MEM_PAGE_BITS 9 -#define MEM_PAGE_SIZE (1<data_heap->bp->free_page_hash[%X/512]" + "Fs->data_heap->bp->free_pag_hash[%X/512]" "$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$\n",i; "\n\n"; "$$PURPLE$$Powers of two, owned by the system.$$FG$$\n"; - for (i=Bsf(MEM_FREE_PAGE_HASH_SIZE*MEM_PAGE_SIZE);i<64;i++) + for (i=Bsf(MEM_FREE_PAG_HASH_SIZE*MEM_PAG_SIZE);i<64;i++) if (i==0x1A) "...\n"; else if (!(0x1A<=i<=0x36)) - "Fs->data_heap->bp->free_page_hash2[%X] %016X" + "Fs->data_heap->bp->free_pag_hash2[%X] %016X" "$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$[X]$$BLACK$$ -->$$FG$$\n",i, - 1< to Exit\n"; - //We don't want the mouse buttons to reposition the cursor, + //We don't want the mouse bttns to reposition the cursor, //so we inhibit the window mgr from processing them. - Fs->win_inhibit=WIF_SELF_IP_L|WIF_SELF_IP_R; + Fs->win_inhibit=WIF_SELF_MS_L|WIF_SELF_MS_R; do { - msg_code=GetMsg(&a1,&a2,~(1<win_inhibit=WIG_USER_TASK_DFT; diff --git a/Demo/MultiCore/Clouds.HC b/Demo/MultiCore/Clouds.HC deleted file mode 100644 index 8dab6cb..0000000 --- a/Demo/MultiCore/Clouds.HC +++ /dev/null @@ -1,205 +0,0 @@ -//Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.HC"$. - - - - - - - - - - - - - - - -$SP,"<1>",BI=1,BP="::/Demo/Graphics/Mountain.HC.Z,Mountain"$ //Pointer to sprite in $LK,"Mountain.HC",A="FI:::/Demo/Graphics/Mountain.HC"$ file - -#define NUM_CLOUDS 16 -#define SKY_LINES 30 -#define CLOUD_PTS 512 -#define CLOUD_PENS 8 -#define CLOUD_PEN_PTS 16 -#define CLOUD_PEN_SIZE 16 - -class Cloud -{ - I64 i,x,y,w,h,dx,dy; - I64 color; - I64 px[CLOUD_PTS],py[CLOUD_PTS],pc[CLOUD_PTS]; -} clouds[NUM_CLOUDS]; - -class CloudPen -{ - CDC *img; - I64 px[CLOUD_PEN_PTS],py[CLOUD_PEN_PTS]; -} cloud_pens[CLOUD_PENS]; - -CDC *cloud_pen; - -I64 mp_not_done_flags; -U0 MPDrawClouds(CTask *task) -{ - Cloud *c; - CDC *dc=DCAlias(gr.dc2,task); - I64 i,j,k,xx,yy,lo=Gs->num*CLOUD_PTS/mp_cnt,hi=(Gs->num+1)*CLOUD_PTS/mp_cnt; - - for (j=0,c=clouds;jpc[i]; - if (kcolor) - dc->color=ROP_MONO+LTGRAY; - else - dc->color=ROP_MONO+WHITE; - xx=c->x.i32[1]+c->px[i]; - yy=c->y.i32[1]+c->py[i]; - - k=RandU16&31-16; - if (k==-16) - k=-c->px[i]; - c->px[i]+=SignI64(k); - - k=RandU16&31-16; - if (k==-16) - k=-c->py[i]; - c->py[i]+=SignI64(k); - - GrBlot(dc,xx,yy,cloud_pens[i&(CLOUD_PENS-1)].img); - } - DCDel(dc); - LBtr(&mp_not_done_flags,Gs->num); -} - -U0 DrawIt(CTask *task,CDC *dc) -{ - I64 i; - Sprite3(dc,0,SKY_LINES*FONT_HEIGHT,0,$IB,"<1>",BI=1$); - mp_not_done_flags=1<img); - cp->img->color=COLOR_MONO; - for (j=0;jimg,cp->px[j],cp->py[j]); - cp->px[j]=ClampI64(cp->px[j]+RandU16%3-1,0,CLOUD_PEN_SIZE-1); - cp->py[j]=ClampI64(cp->py[j]+RandU16%3-1,0,CLOUD_PEN_SIZE-1); - } - } - - for (i=0,c=clouds;ix+=c->dx; - c->y=ClampI64(c->y+c->dy,0,0.7*(SKY_LINES*FONT_HEIGHT)<<32); - c->color=MAX_U16*c->y.i32[1]/(0.8*(SKY_LINES*FONT_HEIGHT)); - } - - Sleep(20); - } -} - -#define SAMPLES 6 -U0 Init() -{ - Cloud *c=clouds; - CloudPen *cp=cloud_pens; - I64 i,j,k,l, - w=Fs->pix_width, - h=SKY_LINES*FONT_HEIGHT; - - for (i=0;ix=ToI64(w/2+Rand*w/2-w/4)<<32; - c->y=ToI64(h/2+Rand*h/2-h/4)<<32; - c->dx=RandI32; - c->dy=RandI32; - c->w=100; - c->h=50; - c->color=RandU16; - for (l=0;lpx[l]=(k*c->w/MAX_I16)/SAMPLES; - - k=0; - for (j=0;jpy[l]=(k*c->h/MAX_I16)/SAMPLES; - - c->pc[l]=RandU16; - } - } - - for (i=0;iimg=DCNew(CLOUD_PEN_SIZE,CLOUD_PEN_SIZE); - for (j=0;jpx[j]=RandU16%CLOUD_PEN_SIZE; - cp->py[j]=RandU16%CLOUD_PEN_SIZE; - } - } -} - -U0 CleanUp() -{ - I64 i; - CloudPen *cp=cloud_pens; - for (i=0;iimg); -} - -U0 SongTask(I64) -{//Song by the Holy Spirit -//This specifies a callback routine - //to be called when the task dies. - Fs->task_end_cb=&SndTaskEndCB; - MusicSettingsRst; - while (TRUE) { - Play("3qBetDA2G3qD2sG3E2G3EetCEDqFEeDC"); - Play("qBetDA2G3qD2sG3E2G3EetCEDqFEeDC"); - Play("CGqDeADsDCDCqGEetDAD2sG3D2G3D"); - Play("eCGqDeADsDCDCqGEetDAD2sG3D2G3D"); - } -} - -U0 CloudScene() -{ - SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ - try { - Fs->text_attr=YELLOW<<4+BLUE; - Fs->song_task=Spawn(&SongTask,NULL,"Song",,Fs); - AutoComplete; - WinBorder; - WinMax; - DocCursor; - DocClear; - Init; - Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); - - "$$BG,LTCYAN$$%h*c",SKY_LINES,'\n'; - "$$BG,YELLOW$$%h5c",'\n'; - BibleVerse(,"Exodus,14:19",7); - - Fs->draw_it=&DrawIt; - GetChar; - Refresh; - } catch - PutExcept; - SettingsPop; - CleanUp; -} - -#if __CMD_LINE__ -CloudScene; -#endif diff --git a/Demo/MultiCore/Interrupts.HC b/Demo/MultiCore/Interrupts.HC index 11f34f4..e06617d 100644 --- a/Demo/MultiCore/Interrupts.HC +++ b/Demo/MultiCore/Interrupts.HC @@ -1,13 +1,13 @@ interrupt U0 IntBeepOn() { *(dev.uncached_alias+LAPIC_EOI)(U32 *)=0; //signal end of interrupt - Snd(100); + Snd(34); } interrupt U0 IntBeepOff() { *(dev.uncached_alias+LAPIC_EOI)(U32 *)=0; - Snd(0); + Snd; } U0 IntTest() diff --git a/Demo/MultiCore/Lock.HC b/Demo/MultiCore/Lock.HC index a5e9c9d..a2c2bbf 100644 --- a/Demo/MultiCore/Lock.HC +++ b/Demo/MultiCore/Lock.HC @@ -20,7 +20,7 @@ U0 MPUnlockedInc(I64) U0 UnlockedInc() { - CSrvCmd *tmpm0,*tmpm1; + CJob *tmpm0,*tmpm1; glbl=0; tmpm0=JobQue(&MPUnlockedInc,NULL,0,0); tmpm1=JobQue(&MPUnlockedInc,NULL,1,0); @@ -39,7 +39,7 @@ U0 MPLockedInc(I64) U0 LockedInc() { - CSrvCmd *tmpm0,*tmpm1; + CJob *tmpm0,*tmpm1; glbl=0; tmpm0=JobQue(&MPLockedInc,NULL,0,0); tmpm1=JobQue(&MPLockedInc,NULL,1,0); diff --git a/Demo/MultiCore/MPAdd.HC b/Demo/MultiCore/MPAdd.HC index 9db9535..71c4a94 100644 --- a/Demo/MultiCore/MPAdd.HC +++ b/Demo/MultiCore/MPAdd.HC @@ -12,7 +12,7 @@ I64 MPSum(I64 my_mp_cnt) I64 Sum(I64 n,I64 my_mp_cnt) { - CSrvCmd *tmpm[MP_MAX_PROCESSORS]; + CJob *tmpm[MP_MAX_PROCESSORS]; I64 res=0,i; mp_n=n+1; for (i=0;i>k1+k2; //This is a preliminary radix sort. - b[j][bn[j]++]=a1[i]; + j=arg1[i]>>k1+k2; //This is a preliminary radix sort. + b[j][bn[j]++]=arg1[i]; } mp_not_done_flags=1<num,len); + DocPrint(doc,"CPU%02X Len:%2d ",Gs->num,len); while (len--) DocPrint(doc,"%C",*a++); //%C is toupper char DocPrint(doc,"\n"); diff --git a/Demo/Progress.HC b/Demo/Progress.HC index e1abc9c..f8acb8d 100644 --- a/Demo/Progress.HC +++ b/Demo/Progress.HC @@ -1,54 +1,69 @@ /*$LK,"progress1",A="MN:progress1"$-$LK,"progress4",A="MN:progress4"$ are just global vars shown on the wallpaper. I use them in debugging a lot. + If you set $LK,"progress1_max",A="MN:progress1_max"$-$LK,"progress4_max",A="MN:progress4_max"$, -then a bar will display. +then a progress bar will display. + +If you set $LK,"progress1_t0",A="MN:progress1_t0"$-$LK,"progress4_t0",A="MN:progress4_t0"$ +then the elapsed time will display. + +If you set $LK,"progress1_tf",A="MN:progress1_tf"$-$LK,"progress4_tf",A="MN:progress4_tf"$ +then the estimated time will display. */ U0 Main1() { "\nWith description.\n"; PressAKey; - ProgressBarsRst; progress1_max=200; StrCpy(progress1_desc,"Progress Demo"); //PROGRESS_DESC_LEN is max while (progress1++!=progress1_max) Sleep(20); - progress1_max=0; //hide + ProgressBarsRst; } - Main1; U0 Main2() { - "\nWith description and time.\n"; + "\nWith description and elapsed time.\n"; PressAKey; - ProgressBarsRst; progress1_max=200; progress1_t0=tS; StrCpy(progress1_desc,"Progress Demo"); //PROGRESS_DESC_LEN is max while (progress1++!=progress1_max) Sleep(20); - progress1_max=0; //hide + ProgressBarsRst; } - Main2; U0 Main3() +{ + "\nWith description, elapsed time and registry total time.\n"; + PressAKey; + progress1_max=200; + progress1_t0=tS; + RegExe("DemoCompany/ProgressBars"); + StrCpy(progress1_desc,"Progress Demo"); //PROGRESS_DESC_LEN is max + while (progress1++!=progress1_max) + Sleep(20); + ProgressBarsRst("DemoCompany/ProgressBars"); +} +Main3; + +U0 Main4() { "\nNo description.\n"; PressAKey; - ProgressBarsRst; -//No progress1_desc progress1_max=200; while (progress1++!=progress1_max) Sleep(20); - progress1_max=0; //hide + ProgressBarsRst; } +Main4; -Main3; -"\n$$LTRED$$Now, from asm... It's handy for debugging.$$FG$$\n" -"$$LTRED$$Watch the progress on the wallpaper.$$FG$$\n"; +"\nNow, from asm... It's handy for debugging.\n" +"Watch the progress on the wallpaper.\n"; WinBorder(ON); PressAKey; @@ -61,6 +76,5 @@ _PROGRESS_DEMO:: MOV U64 [&progress1],RCX RET } - _extern _PROGRESS_DEMO U0 AsmProgressDemo(); AsmProgressDemo; diff --git a/Demo/PullDownMenu.HC b/Demo/PullDownMenu.HC index b26ae31..9980c42 100644 --- a/Demo/PullDownMenu.HC +++ b/Demo/PullDownMenu.HC @@ -5,7 +5,7 @@ U0 PullDownMenuDemo() { - I64 msg_code,a1,a2; + I64 msg_code,arg1,arg2; CMenuEntry *tmpse; MenuPush( @@ -33,29 +33,29 @@ U0 PullDownMenuDemo() "of the scrn.\n\n"; do { - msg_code=GetMsg(&a1,&a2,1<cur_menu,"Misc/Opt1")) @@ -82,7 +82,7 @@ U0 PullDownMenuDemo() break; } - } while (msg_code!=MSG_KEY_DOWN||(a1!=CH_SHIFT_ESC && a1!=CH_ESC)); + } while (msg_code!=MSG_KEY_DOWN||(arg1!=CH_SHIFT_ESC && arg1!=CH_ESC)); MenuPop; } diff --git a/Demo/RegistryDemo.HC b/Demo/RegistryDemo.HC index bd7d0fd..d6bd181 100644 --- a/Demo/RegistryDemo.HC +++ b/Demo/RegistryDemo.HC @@ -7,21 +7,21 @@ is valid in HolyC you can place simple expressions without vars. */ -RegSetDftEntry("DemoCompany/Game1","F64 best_score=1.23;\n"); -RegSetDftEntry("DemoCompany/Game1/SimpleVal","1234;\n"); -RegExeBranch("DemoCompany/Game1"); +RegDft("DemoCompany/Game1","F64 best_score=1.23;\n"); +RegDft("DemoCompany/Game1/SimpleVal","1234;\n"); +RegExe("DemoCompany/Game1"); U0 Game() { - I64 i=RegExeBranch("DemoCompany/Game1/SimpleVal"); + I64 i=RegExe("DemoCompany/Game1/SimpleVal"); "High Score:%6.5f\n",best_score; "Val:%d\n",i; i++; best_score=tS; //You could combine these into one write by making //the $$TR...$$ and $$ID,2$$, $$ID,-2$$, cmds yourself. - RegWriteBranch("DemoCompany/Game1","F64 best_score=%9.5f;\n",best_score); - RegWriteBranch("DemoCompany/Game1/SimpleVal","%d;\n",i); + RegWrite("DemoCompany/Game1","F64 best_score=%9.5f;\n",best_score); + RegWrite("DemoCompany/Game1/SimpleVal","%d;\n",i); } Game; diff --git a/Demo/Snd/ASCIIOrgan.HC b/Demo/Snd/ASCIIOrgan.HC index b9b60db163f9d410f5ebdb5f5083162e49dc382f..b0ece5c009c9192a007d1a077af9afe395eb37b1 100644 GIT binary patch delta 26 hcmbQJ(5tYahlw*eL)Y0O-Zj{H@-!xs&1achcmZ~^2$cW; delta 31 mcmeBGn5eL!hlxugIYZaTLQ~7gbn;Xt6J`wq&CMs7TzCPIG6=M_SPACE_THRESHOLD) { @@ -170,7 +170,7 @@ U0 Morse() } } } - Snd(0); + Snd; } Morse; diff --git a/Demo/Snd/OhGreat.HC b/Demo/Snd/OhGreat.HC index 0abb739..1977196 100644 --- a/Demo/Snd/OhGreat.HC +++ b/Demo/Snd/OhGreat.HC @@ -4,38 +4,38 @@ U0 Song() MusicSettingsRst; try //Catch exit while (!ScanChar) { - Play("4hEqDCBCDhE", + Play("6hEqDC5B6CDhE", "God \0is \0a \0g\0od \0of \0love.\n\0"); - Play("3GqFEFhG4E", + Play("5GqFEFhG6E", " \0 \0 \0 \0 \0He \0"); - Play("qDCBCDhE3G", + Play("6qDC5B6CDhE5G", "wat\0ches \0us \0from \0a\0bove.\n\0 \0"); - Play("qFEFhG4BqC", + Play("5qFEFhGB6qC", " \0 \0 \0 \0Our \0world \0"); - Play("DhCeDChB3G", + Play("6DhCeDC5hBG", "is\0n't \0al\0ways \0nice.\n\0 \0"); - Play("qFEFhG4EqD", + Play("5qFEFhG6EqD", " \0 \0 \0 \0Be\0fore \0"); - Play("CBCDhE3G", + Play("6C5B6CDhE5G", "you \0gr\0ipe \0think \0twice.\n\0 \0"); - Play("qFEFhG4EqD", + Play("5qFEFhG6EqD", " \0 \0 \0 \0He \0wat\0"); - Play("CBCDhE3G", + Play("6C5B6CDhE5G", "ches \0us \0from \0a\0bove.\n\0 \0"); - Play("qFEFhG4EqD", + Play("5qFEFhG6EqD", " \0 \0 \0 \0He'll \0smack \0"); - Play("CBCDhE3G", + Play("6C5B6CDhE5G", "you \0with \0out \0a \0glove.\n\0 \0"); - Play("qFEFhG4BqC", + Play("5qFEFhGB6qC", " \0 \0 \0 \0Our \0world \0"); - Play("DhCeDChB3G", + Play("6DhCeDC5hBG", "is\0n't \0al\0ways \0nice.\n\0 \0"); - Play("qFEFhG"); + Play("5qFEFhG"); } catch PutExcept; '\n'; - Snd(0); + Snd; } Song; diff --git a/Demo/Snd/WaterFowl.HC b/Demo/Snd/WaterFowl.HC index efcdaa30e424a0e59c107a934d406f0309c3f8da..d968a5f0b4c03f7913036b23a2ee3861cf697530 100644 GIT binary patch delta 120 zcmbR9R%rEGp$)UyBTZ9XU7SsvOrhA(v@i%JqNHifrJ$go5Rj8tsi6c>1D1Dlbpb(V klR_s{HKswSaJlBE?Cnq48QY(-GqpcuXWsslon`wv09djl3;+NC delta 105 zcmZ4eR%p&!p$)Uyy^K>`U7Vdj(6KNG!dB9>=2B2lPzcCLtkh6)a&`jAxVgH3pmU)U gs&r5)Os4q@d;1r5#`Z7lOzmITnYVvoXW70E0Jwl5GXMYp diff --git a/Demo/Templates/Game1.HC b/Demo/Templates/Game1.HC index df88518..eda3208 100644 --- a/Demo/Templates/Game1.HC +++ b/Demo/Templates/Game1.HC @@ -22,7 +22,7 @@ U0 SongTask(I64) Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; while (TRUE) { - Play("ABC"); + Play("4AB5C"); } } diff --git a/Demo/Templates/Registry1.HC b/Demo/Templates/Registry1.HC index 2db820e..4557274 100644 --- a/Demo/Templates/Registry1.HC +++ b/Demo/Templates/Registry1.HC @@ -1,10 +1,10 @@ -RegSetDftEntry("MyCompany/MyApp","F64 best_score=9999;\n"); -RegExeBranch("MyCompany/MyApp"); +RegDft("MyCompany/MyApp","F64 best_score=9999;\n"); +RegExe("MyCompany/MyApp"); U0 Main() { GetChar; - RegWriteBranch("MyCompany/MyApp","F64 best_score=%5.4f;\n",best_score); + RegWrite("MyCompany/MyApp","F64 best_score=%5.4f;\n",best_score); } Main; diff --git a/Demo/ToHtmlToTXTDemo/DemoInPage.DD b/Demo/ToHtmlToTXTDemo/DemoInPage.DD index 4e63d3b..ec2c15f 100644 --- a/Demo/ToHtmlToTXTDemo/DemoInPage.DD +++ b/Demo/ToHtmlToTXTDemo/DemoInPage.DD @@ -1,6 +1,8 @@ $WW,1$$FG,5$$TX+CX,"The Temple Operating System"$$FG,0$ $FG,4$ -$LK,"Download Operating System",A="FI:~/Web/DownloadOS.DD"$ $LK,"App Store",A="FI:~/Web/AppStore.DD"$ +$LK,"Download Operating System",A="FI:~/Web/DownloadOS.DD"$ $LK,"App Store",A="FI:~/Web/AppStore/AppStore.DD"$ + +$FG,4$$TX,"Terry's Linux Bash Scripts for QEMU, VMware and VirtualBox",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Bin"$ $LK,"Screen Shots",A="FI:~/Web/ScrnShots.DD"$ $LK,"Instructional Videos",A="FI:~/Web/TOSVideos.DD"$ @@ -12,10 +14,12 @@ $LK,"Source Code By File",A="FF:~/Web/LineRep.DD,KStart16.HC"$ $TX,"Source Cod $TX,"Source Code By Sym",HTML="http://www.templeos.org/Wb/Home/Web/SymsAlpha.html"$ $TX,"Source Code By Address",HTML="http://www.templeos.org/Wb/Home/Web/SymsAddress.html"$ -$LK,"Change Log",A="FI:::/Doc/ChangeLog.DD"$ $LK,"History of TempleOS",A="FI:~/Web/History.DD"$ +$LK,"TempleOS Credits",A="FI:::/Doc/Credits.DD"$ $LK,"History of TempleOS",A="FI:~/Web/History.DD"$ -$LK,"TempleOS Credits",A="FI:::/Doc/Credits.DD"$ $LK,"Terry Davis",A="FI:~/Web/TAD/TAD.DD"$ $LK,"Dianna Cowern",A="FI:~/Web/DLC/DLC.DD"$ +$LK,"Why 640x480?",A="FI:::/Home/Web/640x480.DD"$ $LK,"Dianna Cowern",A="FI:~/Web/DLC/DLC.DD"$ $FG$ +$LK,"Change Log",A="FI:::/Doc/ChangeLog.DD"$ $LK,"Terry Davis",A="FI:~/Web/TAD/TAD.DD"$ + The Brits are moving to $TX,"ban \"hacking tools\"",HTML="http://www.theregister.co.uk/2008/01/02/hacker_toll_ban_guidance"$. Take my $LK,"unassembler",A="MN:Ui"$ from my cold dead hands. NRA is for guns; IRA is for computers. $HC,""$ @@ -24,7 +28,7 @@ TempleOS is a free, public domain, open source, $FG,4$$TX,"x86_64",HTML="http:// The CIA encourages code obsfucation. They make it more complicated than necessary. TempleOS is, literally, more simple than necessary. It is obnoxiously simple... to the point it hurts. -This $TX,"\"Hello World\" joke",HTML="http://www.infiltec.com/j-h-wrld.htm"$, the $TX,"BMP file format",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$ and the $TX,"WAV file format",HTML="http://en.wikipedia.org/wiki/WAV"$ show that the industry is really screwed-up! That's what TempleOS fixes. I capped the line-of-code count at 100,000 and God said it must be perfect, so it will never be an ugly monstrocity. It is currently $TX,"81,304",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of unblemished code. Backward compatibility is not promised. +This $TX,"\"Hello World\" joke",HTML="http://www.infiltec.com/j-h-wrld.htm"$, the $TX,"BMP file format",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$ and the $TX,"WAV file format",HTML="http://en.wikipedia.org/wiki/WAV"$ show that the industry is really screwed-up! That's what TempleOS fixes. I capped the line-of-code count at 100,000 and God said it must be perfect, so it will never be an ugly monstrocity. It is currently $TX,"81,432",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of unblemished code. Backward compatibility is not promised. Normally, failure is not an option, but since TempleOS accompanies Windows or Linux, we exclude certain uses. There is no reason to duplicate browsing, multimedia, desktop publishing, etc. Linux wants to be a secure, multi-user mainframe. That's why it has file permissions. The vision for TempleOS, however, is a modern, 64-bit Commodore 64. The C64 was a non-networked, home computer mostly used for games. It trained my generation how to program because it was wide open, completely hackable. The games were not multimedia works of art, but generated by non-artist. @@ -40,7 +44,7 @@ $HC,""$ -I wrote all $LK,"120,646",A="FF:~/Web/LineRep.DD,Kernel.PRJ",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the last $TX,"13.3",D="DD_TEMPLEOS_AGE"$ years, full-time, including the 64-bit compiler. It was called, at various times, "$FG,4$$TX,"Hoppy",HTML="http://web.archive.org/web/*/http://www.simstructure.hare.com/*"$$FG$", "$FG,4$$TX,"The J Operating System",HTML="http://wayback.archive.org/web/*/http://www.justrighteous.org/*"$$FG$", "$FG,4$$TX,"LoseThos",HTML="http://web.archive.org/web/*/http://www.losethos.com/*"$$FG$" and "$FG,4$$TX,"SparrowOS",HTML="http://web.archive.org/web/*/http://www.sparrowos.com/*"$$FG$". Here are my $FG,4$$TX,"college transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$$FG$. I've been a professional operating system developer since 1990 when I was hired to work on Ticketmaster's VAX OS. +I wrote all $LK,"121,216",A="FF:~/Web/LineRep.DD,Kernel.PRJ",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the last $TX,"13.4",D="DD_TEMPLEOS_AGE"$ years, full-time, including the 64-bit compiler. It was called, at various times, "$FG,4$$TX,"Hoppy",HTML="http://web.archive.org/web/*/http://www.simstructure.hare.com/*"$$FG$", "$FG,4$$TX,"The J Operating System",HTML="http://wayback.archive.org/web/*/http://www.justrighteous.org/*"$$FG$", "$FG,4$$TX,"LoseThos",HTML="http://web.archive.org/web/*/http://www.losethos.com/*"$$FG$" and "$FG,4$$TX,"SparrowOS",HTML="http://web.archive.org/web/*/http://www.sparrowos.com/*"$$FG$". Here are my $FG,4$$TX,"college transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$$FG$. I've been a professional operating system developer since 1990 when I was hired to work on Ticketmaster's VAX OS. $FG,8$ * "Commodore 64" is a trademark owned by Polabe Holding NV. diff --git a/Demo/ToHtmlToTXTDemo/ToHtml.HC b/Demo/ToHtmlToTXTDemo/ToHtml.HC index e2a28ba..f2f345b 100644 --- a/Demo/ToHtmlToTXTDemo/ToHtml.HC +++ b/Demo/ToHtmlToTXTDemo/ToHtml.HC @@ -184,7 +184,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL, "\n" "\n" - "\n"; + "\n"; if (!body_header) body_header= "\n" "