From 92062461478e10088d28e1ddd3627c07184f89f6 Mon Sep 17 00:00:00 2001 From: "Terry A. Davis" Date: Mon, 8 Aug 2016 17:33:38 +0200 Subject: [PATCH] TempleOSCDV4.10.ISO --- 0000Boot/0000Kernel.BIN.C | Bin 188688 -> 189264 bytes Adam/ABlkDev/FileMgr.CPP | 42 +- Adam/ABlkDev/Mount.CPP | 8 +- Adam/ABlkDev/PrtDsk.CPP | 22 +- Adam/ADefine.CPP | 5 +- Adam/AHash.CPP | 6 +- Adam/AutoComplete/ACDictGen.CPP | 2 +- Adam/AutoComplete/ACTask.CPP | 2 +- Adam/DevInfo.CPP | 16 +- Adam/DolDoc/DocBin.CPP | 20 +- Adam/DolDoc/DocChar.CPP | 10 +- Adam/DolDoc/DocClipBoard.CPP | 12 +- Adam/DolDoc/DocCodeTools.CPP | 18 +- Adam/DolDoc/DocEd.CPP | 2 +- Adam/DolDoc/DocFile.CPP | 51 +- Adam/DolDoc/DocFind.CPP | 12 +- Adam/DolDoc/DocForm.CPP | 4 +- Adam/DolDoc/DocGet.CPP | 2 +- Adam/DolDoc/DocInit.CPP | 33 +- Adam/DolDoc/DocMacro.CPP | 32 +- Adam/DolDoc/DocNew.CPP | 40 +- Adam/DolDoc/DocOpt.CPP | 16 +- Adam/DolDoc/DocPlain.CPP | 26 +- Adam/DolDoc/DocPutKey.CPP | 6 +- Adam/DolDoc/DocPutS.CPP | 24 +- Adam/DolDoc/DocRecalc.CPP | 186 +- Adam/DolDoc/DocRecalcLib.CPP | 8 +- Adam/DolDoc/DocTree.CPP | 4 +- Adam/DolDoc/DocWidgetWiz.CPP | 63 +- Adam/DolDoc/MakeDoc.CPP | 1 + Adam/God/GodBible.CPP | 9 +- Adam/God/GodDoodle.CPP | 2 +- Adam/God/HSNotes.TXT | 20 +- Adam/Gr/GrBitMap.CPP | 2 +- Adam/Gr/GrExt.CPP | 2 +- Adam/Gr/GrGlbls.CPP | 2 +- Adam/Gr/GrScreen.CPP | 2 +- Adam/Gr/GrSpritePlot.CPP | 2 +- Adam/Gr/SpriteBitMap.CPP | 10 +- Adam/Gr/SpriteCode.CPP | 46 +- Adam/Gr/SpriteEd.CPP | 254 +-- Adam/Gr/SpriteMain.CPP | 136 +- Adam/Gr/SpriteMesh.CPP | 225 +-- Adam/Opt/Boot/BootDVD.CPP | 12 +- Adam/Opt/Boot/BootHD.CPP | 6 +- Adam/Opt/Boot/BootMHD.CPP | 3 - Adam/Opt/Boot/BootMHD2.CPP | 6 +- Adam/Opt/Boot/DskISO9660.CPP | 28 +- Adam/Opt/Boot/DskISORedSea.CPP | 2 +- Adam/Opt/Utils/Diff.CPP | 14 +- Adam/Opt/Utils/Find.CPP | 2 +- Adam/Opt/Utils/HeapLog.CPP | 40 +- Adam/Opt/Utils/LineRep.CPP | 4 +- Adam/Opt/Utils/LinkChk.CPP | 5 +- Adam/Opt/Utils/StrUtils.CPP | 16 +- Adam/Opt/Utils/ToTXT.CPP | 4 +- Adam/Snd/SndFile.CPP | 14 +- Adam/TaskRep.CPP | 2 +- Adam/Training.CPP | 4 +- Apps/Budget/BgtAccts.CPP | 8 +- Apps/Budget/BgtEntry.CPP | 4 +- Apps/Budget/BgtFile.CPP | 40 +- Apps/Budget/BgtMain.CPP | 14 +- Apps/Budget/BgtStrs.CPP | 4 +- Apps/Budget/BgtTemplate.CPP | 8 +- Apps/Budget/Budget.CPP | 8 +- Apps/Psalmody/JukeBox.CPP | 4 +- Apps/Psalmody/Psalmody.CPP | 4 +- Apps/Psalmody/PsalmodyDraw.CPP | 16 +- Apps/Psalmody/PsalmodyFile.CPP | 46 +- Apps/Psalmody/PsalmodyMain.CPP | 64 +- Apps/ToTheFront/ToTheFront.CPP | 16 +- Apps/X-Caliber/X-Caliber.CPP | 72 +- Compiler/CHash.CPP | 2 +- Compiler/CInit.CPP | 1 - Compiler/CMain.CPP | 6 +- Compiler/Compiler.BIN | Bin 193233 -> 193214 bytes Compiler/Compiler.MAP | 219 ++- Compiler/CompilerA.HPP | 150 +- Compiler/Lex.CPP | 58 +- Compiler/OpCodes.TXT | 52 +- Compiler/OptPass012.CPP | 3 +- Compiler/OptPass3.CPP | 3 +- Compiler/OptPass4.CPP | 3 +- Compiler/OptPass5.CPP | 2 +- Compiler/OptPass6.CPP | 2 +- Compiler/OptPass789A.CPP | 5 +- Compiler/PrsExp.CPP | 30 +- Compiler/PrsLib.CPP | 20 +- Compiler/PrsStmt.CPP | 38 +- Compiler/PrsVar.CPP | 14 +- Compiler/Templates.CPP | 117 +- Demo/AcctExample/HomeKeyPlugIns.CPP | 8 +- Demo/AcctExample/HomeSys.CPP | 2 +- Demo/AcctExample/HomeWrappers.CPP | 2 +- Demo/AcctExample/PersonalMenu.TXT | Bin 67535 -> 69303 bytes Demo/AcctExample/PersonalNotes.TXT | 22 +- Demo/AcctExample/Registry.CPP | 50 +- Demo/AcctExample/TOSBlog.CPP | 5 +- Demo/AcctExample/TOSCfg.CPP | 2 +- Demo/AcctExample/TOSDistro.CPP | 172 +- Demo/AcctExample/TOSHolySpirit.CPP | 543 +++--- Demo/AcctExample/TOSMisc.CPP | 21 +- Demo/AcctExample/TOSToHtml.CPP | 22 +- Demo/AutoFile/AFEd.TXT | 1 - Demo/DolDoc/FileRead.CPP | 4 +- Demo/DolDoc/NumBible.CPP | 2 +- Demo/DolDoc/UnusedDefine.CPP | 2 +- Demo/Games/BomberGolf.CPP | Bin 18645 -> 18645 bytes Demo/Games/Collision.CPP | Bin 3999 -> 3999 bytes Demo/Games/EagleDive.CPP | 521 +++--- Demo/Games/FlatTops.CPP | 76 +- Demo/Games/RawHide.CPP | 144 +- Demo/Games/Stadium/StadiumGen.CPP | 2 +- Demo/Games/Varoom.CPP | 46 +- Demo/Games/Wenceslas.CPP | 52 +- Demo/Games/Zing.CPP | Bin 4686 -> 4686 bytes Demo/Graphics/Pick3D.CPP | Bin 6630 -> 6630 bytes Demo/Graphics/SpritePlot.CPP | Bin 1376 -> 1395 bytes Demo/Lectures/PCIInterrupts.CPP | 12 +- Demo/MultiCore/Interrupts.CPP | 4 +- Demo/MultiCore/MPPrint.CPP | 2 +- Demo/MultiCore/RadixSort.CPP | 2 +- Demo/MultiCore/RateCores.CPP | 46 + Demo/RevFileDemo/Rev.CPP | 2 +- Demo/Templates/Util2.CPP | 2 +- Demo/ToHtmlToTXTDemo/DemoInPage.TXT | 25 +- Demo/ToHtmlToTXTDemo/ToHtml.CPP | 8 +- Demo/WebLogDemo/WebLogRep.CPP | 117 +- Demo/WebLogDemo/WebLogScramble.CPP | 2 +- Demo/WebLogDemo/access_150211.LOG | 72 +- Demo/WebLogDemo/access_150212.LOG | 76 +- Demo/WebLogDemo/access_150213.LOG | 32 +- Doc/Boot.TXT | Bin 4324 -> 4296 bytes Doc/ChangeLog.TXT | 33 +- Doc/Credits.TXT | 2 +- Doc/Demands.TXT | 2 + Doc/DemoIndex.TXT | 1 + Doc/DolDocOverview.TXT | 2 +- Doc/FAQ.TXT | 8 +- Doc/Glossary.TXT | 6 +- Doc/Grub.TXT | 23 - Doc/HolyC.TXT | 6 +- Doc/Install.TXT | 2 +- Doc/MemOverview.TXT | 19 +- Doc/Requirements.TXT | 2 +- Doc/Sprite.TXT | 2 +- Doc/StdTempleOSPC.TXT | 2 +- Doc/Welcome.TXT | 51 +- Kernel/BlkDev/DskATAId.CPP | 80 +- Kernel/BlkDev/DskAddDev.CPP | 2 +- Kernel/EdLite.CPP | 58 +- Kernel/KDataTypes.CPP | 32 +- Kernel/KEnd.CPP | 20 +- Kernel/KExts.CPP | 2 +- Kernel/KGlbls.CPP | 2 +- Kernel/KInts.CPP | 17 +- Kernel/KLoad.CPP | 2 +- Kernel/KMisc.CPP | 7 +- Kernel/KStart.CPP | 379 ---- Kernel/KStart16.CPP | 177 ++ Kernel/KStart32.CPP | 99 ++ Kernel/KStart64.CPP | 100 ++ Kernel/KTask.CPP | 2 +- Kernel/KUtils.CPP | 2 +- Kernel/Kernel.MAP | 2517 +++++++++++++-------------- Kernel/Kernel.PRJ | 4 +- Kernel/KernelA.HPP | 109 +- Kernel/KernelB.HPP | 11 +- Kernel/KernelC.HPP | 26 +- Kernel/KeyDev.CPP | 14 +- Kernel/Mem/HeapCtrl.CPP | 2 +- Kernel/Mem/Mem512.CPP | 5 +- Kernel/Mem/MemPhysical.CPP | 64 +- Kernel/Mem/PageTables.CPP | 92 +- Kernel/MultiProc.CPP | 39 +- Kernel/SrvCmd.CPP | 8 +- Kernel/StrPrint.CPP | 38 +- Misc/OSInstall.CPP | 16 +- Misc/OSTestSuite.CPP | 11 +- StartOS.CPP | 2 +- 181 files changed, 4468 insertions(+), 4313 deletions(-) create mode 100644 Demo/MultiCore/RateCores.CPP delete mode 100644 Doc/Grub.TXT delete mode 100644 Kernel/KStart.CPP create mode 100644 Kernel/KStart16.CPP create mode 100644 Kernel/KStart32.CPP create mode 100644 Kernel/KStart64.CPP diff --git a/0000Boot/0000Kernel.BIN.C b/0000Boot/0000Kernel.BIN.C index ee13685423904d20086345b81f3ac7c1932a0335..6b39716f9d29cefb8326306d8d23614ed998de81 100644 GIT binary patch delta 56596 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Ν& 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 delta 55700 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 diff --git a/Adam/ABlkDev/FileMgr.CPP b/Adam/ABlkDev/FileMgr.CPP index bae5664..a4fcf54 100644 --- a/Adam/ABlkDev/FileMgr.CPP +++ b/Adam/ABlkDev/FileMgr.CPP @@ -30,7 +30,7 @@ class CFMUncollapsedLst CFMUncollapsedLst *FMCollectUncollapsedLst(CDoc *doc) { - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; CFMUncollapsedLst *res=NULL,*tempc; CDirEntry *tempde; while (doc_e!=doc) { @@ -52,7 +52,7 @@ CFMUncollapsedLst *FMCollectUncollapsedLst(CDoc *doc) U0 FMMarkUncollapsed(CDoc *doc,CFMUncollapsedLst *tempc, U8 *cur_entry,U8 *next_entry) { - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; CFMUncollapsedLst *tempc1; CDirEntry *tempde; while (doc_e!=doc) { @@ -112,7 +112,7 @@ U0 FMDelUncollapsedLst(CFMUncollapsedLst *tempc) } } -CDirEntry *FMRebuildDocDrv(U8 drv_let,CDoc *doc,CDirEntry **_root,Bool init) +CDirEntry *FMRebuildDocDrv(U8 drv_let,CDoc *doc,CDirEntry **_head,Bool init) { CDirEntry *tempde,*tempde1; U8 *st; @@ -126,8 +126,8 @@ CDirEntry *FMRebuildDocDrv(U8 drv_let,CDoc *doc,CDirEntry **_root,Bool init) tempde1=NULL; Free(st); tempde->user_data=DocPrint(doc,"$$TR,\"%s\",U=0x%X$$",tempde->full_name,tempde); - tempde->next=*_root; - *_root=tempde; + tempde->next=*_head; + *_head=tempde; DocPrint(doc,"\n$$ID,+2$$"); DocBottom(doc); if (init) { @@ -141,7 +141,7 @@ CDirEntry *FMRebuildDocDrv(U8 drv_let,CDoc *doc,CDirEntry **_root,Bool init) return tempde; } -U0 FMRebuildDoc(CDoc **_doc,CDirEntry **_root,I64 mode) +U0 FMRebuildDoc(CDoc **_doc,CDirEntry **_head,I64 mode) { CDrv *dv; I64 i; @@ -192,9 +192,9 @@ U0 FMRebuildDoc(CDoc **_doc,CDirEntry **_root,I64 mode) tempc=FMCollectUncollapsedLst(doc); DocDel(doc); } - if (*_root) { - DirTreeDel(*_root); - *_root=NULL; + if (*_head) { + DirTreeDel(*_head); + *_head=NULL; } doc=DocNew; doc->desc='FileMan'; @@ -219,13 +219,13 @@ U0 FMRebuildDoc(CDoc **_doc,CDirEntry **_root,I64 mode) dv=&blkdev.drvs[i]; if (dv->bd->type==BDT_ATAPI) { if (dv->bd->flags&BDF_INITIALIZED) - tempde=FMRebuildDocDrv(Drv2Let(dv),doc,_root,TRUE); + tempde=FMRebuildDocDrv(Drv2Let(dv),doc,_head,TRUE); else { - tempde=FMRebuildDocDrv(Drv2Let(dv),doc,_root,FALSE); + tempde=FMRebuildDocDrv(Drv2Let(dv),doc,_head,FALSE); tempde->flags|=DEF_NOT_INITIALIZED; } } else if (dv->fs_type==FSt_REDSEA || dv->fs_type==FSt_FAT32) - FMRebuildDocDrv(Drv2Let(dv),doc,_root,TRUE); + FMRebuildDocDrv(Drv2Let(dv),doc,_head,TRUE); } DocTop(doc); FMMarkUncollapsed(doc,tempc,cur_entry,next_entry); @@ -437,7 +437,7 @@ U0 FMCopy(CDoc *doc) CDocEntry *doc_ce=doc->cur_entry,*doc_e; CDirEntry *tempde,*tempde1=NULL,*tempde2; Bool unlock_doc2=DocLock(doc2); - doc_e=doc2->root.next; + doc_e=doc2->head.next; tempde1=doc_ce->user_data; if (doc_ce->type_u8==DOCT_MENU_VAL) @@ -580,7 +580,7 @@ U0 FMFinalScreenUpdate(CDC *dc) public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) {//File manager. Also, used to choose files and dirs. - CDirEntry *root=NULL,*tempde,*tempde1,*tempde2; + CDirEntry *head=NULL,*tempde,*tempde1,*tempde2; I64 sc,ch,a1,a2,msg_code; CDoc *doc=NULL,*old_put_doc=DocPut,*old_display_doc=DocDisplay; U8 *res=NULL,*st,*st2,*old_cur_dir=CurDir; @@ -590,8 +590,8 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ fp_old_final_screen_update=gr.fp_final_screen_update; MenuFilePush("::/Doc/FileMgrPullDown.TXT"); - FMRebuildDoc(&doc,&root,mode); - if (tempde1=Cd2DirEntry(root,old_cur_dir)) + FMRebuildDoc(&doc,&head,mode); + if (tempde1=Cd2DirEntry(head,old_cur_dir)) doc->cur_entry=tempde1->user_data; while (tempde1) { if (tempde1->attr&RS_ATTR_DIR) @@ -636,7 +636,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) Silent; Move(tempde->full_name,st2); Silent(OFF); - FMRebuildDoc(&doc,&root,mode); + FMRebuildDoc(&doc,&head,mode); } else if (st2 && doc_ce->type_u8==DOCT_TREE) { tempde=doc_ce->user_data; okay=TRUE; @@ -659,7 +659,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) CopyTree(tempde->full_name,st); DelTree(tempde->full_name); Silent(OFF); - FMRebuildDoc(&doc,&root,mode); + FMRebuildDoc(&doc,&head,mode); } Free(st); } @@ -721,7 +721,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) FMFmtDrv(doc); break; end: - FMRebuildDoc(&doc,&root,mode); + FMRebuildDoc(&doc,&head,mode); break; case CH_SHIFT_ESC: break; @@ -757,7 +757,7 @@ public U8 *FileMgr(I64 mode=FM_NORMAL,CTask *mem_task=NULL) default: if (sc.u8[0]==SC_INS && sc&SCF_SHIFT && !(sc&SCF_CTRL)) { FMCopy(doc); - FMRebuildDoc(&doc,&root,mode); + FMRebuildDoc(&doc,&head,mode); } else if (sc.u8[0]==SC_F5) { if (doc->cur_entry->type_u8==DOCT_MENU_VAL) { tempde=doc->cur_entry->user_data; @@ -783,7 +783,7 @@ fm_regular_key: Fs->display_doc=old_display_doc; SettingsPop; DocDel(doc); - DirTreeDel(root); + DirTreeDel(head); Cd(old_cur_dir); Free(old_cur_dir); if (mode!=FM_NORMAL && !res) diff --git a/Adam/ABlkDev/Mount.CPP b/Adam/ABlkDev/Mount.CPP index 518e241..db45dca 100644 --- a/Adam/ABlkDev/Mount.CPP +++ b/Adam/ABlkDev/Mount.CPP @@ -4,7 +4,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) I64 cnt,res=0,num_hints,drv_let,type,unit; U8 blks_buf[STR_LEN],addr_buf[STR_LEN],base0_buf[STR_LEN],base1_buf[STR_LEN], *filename=NULL,*filename2=NULL; - CATARep *root=NULL,*tempha; + CATARep *head=NULL,*tempha; Bool one_drv,make_free; CDoc *doc; boot_drv_let=ToUpper(boot_drv_let); @@ -45,7 +45,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) break; case BDT_ATA: case BDT_ATAPI: - num_hints=ATARep(,,&root); + num_hints=ATARep(,,&head); if (type==BDT_ATAPI && boot_drv_let) " to use booted CD/DVD\n"; //Only $LK,"::/Kernel/KCfg.CPP"$ do { @@ -57,7 +57,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) GetS(base0_buf,STR_LEN); } while (!Str2I64(base0_buf) && (type!=BDT_ATAPI || !boot_drv_let)); if (1<=Str2I64(base0_buf)<=num_hints) { - tempha=ATARepFind(root,Str2I64(base0_buf)); + tempha=ATARepFind(head,Str2I64(base0_buf)); StrPrint(base0_buf,"0x%X",tempha->base0); StrPrint(base1_buf,"0x%X",tempha->base1); unit=tempha->unit; @@ -75,7 +75,7 @@ I64 Mount2(U8 boot_drv_let,CDoc *_doc,Bool repartition) } while (!(0<=unit<=1)); '\n'; } - LinkedLstDel(root); + LinkedLstDel(head); break; } DocPrint(doc,"bd=BlkDevNextFreeSlot(\'%C\',%d);bd->unit=%d;\n", diff --git a/Adam/ABlkDev/PrtDsk.CPP b/Adam/ABlkDev/PrtDsk.CPP index 87d64c4..d663e64 100644 --- a/Adam/ABlkDev/PrtDsk.CPP +++ b/Adam/ABlkDev/PrtDsk.CPP @@ -18,7 +18,7 @@ public I64 PrtDsk(U8 drv_let=0) //drv_let=0 means add new drive that //is not already mounted. CBlkDev *bd; - CPlannedDrv root,*temppp; + CPlannedDrv head,*temppp; CMasterBoot mbr; Bool pri=TRUE; I64 ext_base,drv_let2,pri_cnt=0, @@ -45,7 +45,7 @@ public I64 PrtDsk(U8 drv_let=0) return 0; drv_dsk_dsk_size=bd->max_blk+1; - QueInit(&root); + QueInit(&head); drv_let2=bd->first_drv_let; remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO); while (FloorU64(remaining,ROUND_DRV_TO)>=ROUND_DRV_TO) { @@ -68,15 +68,15 @@ public I64 PrtDsk(U8 drv_let=0) temppp->size=CeilU64(GetI64("Size in Blocks :", remaining-DRV_HEADER)+DRV_HEADER,ROUND_DRV_TO); } while (!(ROUND_DRV_TO<=temppp->size<=FloorU64(remaining,ROUND_DRV_TO))); - QueIns(temppp,root.last); + QueIns(temppp,head.last); remaining-=temppp->size; drv_let2++; } "\n\n!!! Repartition Drive !!!\n\n"; - temppp=root.next; + temppp=head.next; drv_let2=bd->first_drv_let; - while (temppp!=&root) { + while (temppp!=&head) { "Drive %C:%08X ",drv_let2,temppp->size; if (temppp->pri) "Primary\n"; @@ -89,7 +89,7 @@ public I64 PrtDsk(U8 drv_let=0) goto pd_done; remaining=FloorU64(bd->max_blk+1,ROUND_DRV_TO)-ROUND_DRV_TO; - temppp=root.next; + temppp=head.next; MemSet(&mbr,0,BLK_SIZE); mbr.signature=0xAA55; offset=0; @@ -107,7 +107,7 @@ public I64 PrtDsk(U8 drv_let=0) temppp=temppp->next; } if (!i) i++; - if (temppp!=&root) { + if (temppp!=&head) { mbr.p[i].active=0x80; mbr.p[i].start_head=0; mbr.p[i].start_cyl=0x101; @@ -120,7 +120,7 @@ public I64 PrtDsk(U8 drv_let=0) } ATAWriteBlks(bd,&mbr,0,1); - while (temppp!=&root) { + while (temppp!=&head) { start_offset=offset; MemSet(&mbr,0,BLK_SIZE); mbr.signature=0xAA55; @@ -135,7 +135,7 @@ public I64 PrtDsk(U8 drv_let=0) mbr.p[0].size=temppp->size-DRV_HEADER; offset+=temppp->size; temppp=temppp->next; - if (temppp!=&root) { + if (temppp!=&head) { mbr.p[1].active=0x80; mbr.p[1].start_head=0; mbr.p[1].start_cyl=0x101; @@ -154,8 +154,8 @@ public I64 PrtDsk(U8 drv_let=0) Fmt(i,,FALSE); pd_done: - while (root.next!=&root) { - temppp=root.next; + while (head.next!=&head) { + temppp=head.next; QueRem(temppp); Free(temppp); } diff --git a/Adam/ADefine.CPP b/Adam/ADefine.CPP index 7eeaa8c..ccee520 100644 --- a/Adam/ADefine.CPP +++ b/Adam/ADefine.CPP @@ -11,8 +11,8 @@ U0 LoadDocDefines() //This is cut and replaced when I generate a distro. //See $LK,"DD_TEMPLEOS_LOC",A="FF:::/Demo/AcctExample/TOSDistro.CPP,DD_TEMPLEOS_LOC"$. $TR-C,"LineRep"$ - $ID,4$DefinePrint("DD_TEMPLEOS_LOC","121,410"); -DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","81,046"); + $ID,4$DefinePrint("DD_TEMPLEOS_LOC","121,488"); +DefinePrint("DD_TEMPLEOS_LOC_OFFICIAL","81,126"); $ID,-4$ DefinePrint("DD_KERNEL","%08X",bfh); bfh(I64)+=bfh->file_size-1; @@ -30,6 +30,7 @@ $ID,-4$ DefinePrint("DD_SYS_HEAP_BASE","%08X",sys_heap_base); DefinePrint("DD_SYS_HEAP_LIMIT","%08X",sys_heap_limit); DefinePrint("DD_MEM_MIN_MEG","%d Meg",MEM_MIN_MEG); + DefinePrint("DD_UNCACHED_ALIAS","%010X",dev.uncached_alias); DefinePrint("DD_MEM_MAPPED_SPACE_GIG","%d Gig",MEM_MAPPED_SPACE/0x40000000); DefinePrint("DD_MEM_MAPPED_SPACE_END","%010X",MEM_MAPPED_SPACE-1); DefinePrint("DD_JIFFY_HZ","%d Hz",JIFFY_FREQ); diff --git a/Adam/AHash.CPP b/Adam/AHash.CPP index bae94be..54c076d 100644 --- a/Adam/AHash.CPP +++ b/Adam/AHash.CPP @@ -248,7 +248,7 @@ U8 *idx=NULL,CDoc *doc=NULL) last_idx=StrNew(cur_idx); if (i) DocPrint(doc,"\n\n"); - DocPrint(doc,"$$WW,0$$$$PURPLE$$$$TX+CX,\"%Q\"$$$$FG$$\n",cur_idx); + DocPrint(doc,"$$WW,0$$$$PURPLE$$$$TX+CX,\"%$$Q\"$$$$FG$$\n",cur_idx); } } @@ -315,7 +315,7 @@ U8 *idx=NULL,CDoc *doc=NULL) wh_done: if (doc) { - if (doc->root.next==doc) + if (doc->head.next==doc) DocPrint(doc,"No Match"); else DocRecalc(doc); @@ -387,7 +387,7 @@ public U0 MapFileLoad(U8 *filename) base=temph(CHashGeneric *)->user_data0+sizeof(CBinFile); if (!doc) return; - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_LINK) { if (*doc_e->tag) diff --git a/Adam/AutoComplete/ACDictGen.CPP b/Adam/AutoComplete/ACDictGen.CPP index b66efbb..82d38a4 100644 --- a/Adam/AutoComplete/ACDictGen.CPP +++ b/Adam/AutoComplete/ACDictGen.CPP @@ -20,7 +20,7 @@ $$ --> $$$$ CDoc *doc; CDocEntry *doc_e; if (doc=DocRead(in_name,DOCF_PLAIN_TEXT_TABS|DOCF_DBL_DOLLARS)) { - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_TEXT) { src=dst=doc_e->tag; diff --git a/Adam/AutoComplete/ACTask.CPP b/Adam/AutoComplete/ACTask.CPP index 2f1e003..ad2f1f3 100644 --- a/Adam/AutoComplete/ACTask.CPP +++ b/Adam/AutoComplete/ACTask.CPP @@ -126,7 +126,7 @@ U0 ACPutChoices(CDoc *focus_l,CDocEntry *doc_e,CTask *focus_task, temph->src_link) { if (temph->type&HTF_PUBLIC) "$$RED$$"; - "$$TX+UL+L+PU,\"%Q\",A=\"%s\"$$$$FG$$\n",st,temph->src_link; + "$$TX+UL+L+PU,\"%$$Q\",A=\"%s\"$$$$FG$$\n",st,temph->src_link; } else "%s\n",st; } diff --git a/Adam/DevInfo.CPP b/Adam/DevInfo.CPP index 027e51c..2ff36a1 100644 --- a/Adam/DevInfo.CPP +++ b/Adam/DevInfo.CPP @@ -15,7 +15,7 @@ public U0 PCIDevFileGen() Bool first=TRUE,del=FALSE,del2=FALSE,cont=FALSE; CDoc *doc=DocRead(PCI_DEV_FILE, DOCF_PLAIN_TEXT|DOCF_DBL_DOLLARS|DOCF_NO_CURSOR); - CDocEntry *doc_e=doc->root.next,*doc_e2; + CDocEntry *doc_e=doc->head.next,*doc_e2; while (doc_e!=doc) { doc_e2=doc_e->next; if (first) { @@ -53,7 +53,7 @@ U0 PCILookUpSingle(CDoc *doc,I64 m,I64 d,U8 **_vendor,U8 **_dev) { Bool first=TRUE; U8 buf[8],*vendor=NULL,*dev=NULL; - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; while (doc_e!=doc) { if (first) { if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[0]!=';' && @@ -120,7 +120,7 @@ U0 PCILookUpDevs() CPCIDev *temppci; I64 w1,w2,b,d,f,timeout=32*8*2; CDoc *doc; - if (dev.pci_root.next!=&dev.pci_root) + if (dev.pci_head.next!=&dev.pci_head) return; doc=DocRead(PCI_DEV_FILE,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); for (b=0;bsub_code=PCIReadU8(b,d,f,0xA); temppci->base_code=PCIReadU8(b,d,f,0xB); PCILookUpSingle(doc,w1,w2,&temppci->vendor_str,&temppci->dev_id_str); - QueIns(temppci,dev.pci_root.last); + QueIns(temppci,dev.pci_head.last); timeout=32*8*2; } else if (sys_pci_busses==256 && --timeout<=0) goto lud_done; @@ -155,8 +155,8 @@ public U0 PCIRep() return; } PCILookUpDevs; - temppci=dev.pci_root.next; - while (temppci!=&dev.pci_root) { + temppci=dev.pci_head.next; + while (temppci!=&dev.pci_head) { "%02X:%02X:%01X %02X%02X $$GREEN$$%s $$CYAN$$%s$$FG$$\n", temppci->bus,temppci->dev,temppci->fun, temppci->base_code,temppci->sub_code, @@ -183,8 +183,8 @@ public U0 MemBIOSRep() "32 Bit Device Mem\n"; while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0)) Yield; - tempmr=dev.mem32_root.next; - while (tempmr!=&dev.mem32_root) { + tempmr=dev.mem32_head.next; + while (tempmr!=&dev.mem32_head) { "%02X:0x%016X-0x%016X\n", tempmr->type,tempmr->base,tempmr->base+tempmr->size-1; tempmr=tempmr->next; diff --git a/Adam/DolDoc/DocBin.CPP b/Adam/DolDoc/DocBin.CPP index 204a3e9..8f0ae72 100644 --- a/Adam/DolDoc/DocBin.CPP +++ b/Adam/DolDoc/DocBin.CPP @@ -2,8 +2,8 @@ CDocBin *DocBinFindNum(CDoc *haystack_doc,I64 needle_num) { - CDocBin *b=haystack_doc->bin_root.next; - while (b!=&haystack_doc->bin_root) { + CDocBin *b=haystack_doc->bin_head.next; + while (b!=&haystack_doc->bin_head) { if (b->num==needle_num) return b; b=b->next; @@ -15,8 +15,8 @@ CDocBin *DocBinFindTag(CDoc *haystack_doc,U8 *needle_tag) { CDocBin *b; if (needle_tag) { - b=haystack_doc->bin_root.next; - while (b!=&haystack_doc->bin_root) { + b=haystack_doc->bin_head.next; + while (b!=&haystack_doc->bin_head) { if (b->tag && !StrCmp(b->tag,needle_tag)) return b; b=b->next; @@ -31,8 +31,8 @@ U0 DocBinsValidate(CDoc *doc) CDocBin *b,*b1; CDocEntry *doc_e,*doc_e2; I64 renum_num=0; - b=doc->bin_root.next; - while (b!=&doc->bin_root) { + b=doc->bin_head.next; + while (b!=&doc->bin_head) { b->use_cnt=0; b->temp_use_cnt=0; b->renum_num=-1; @@ -40,7 +40,7 @@ U0 DocBinsValidate(CDoc *doc) b->tag=NULL; b=b->next; } - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { doc_e2=doc_e->next; if (doc_e->de_flags & DOCEF_HAS_BIN) { @@ -61,9 +61,9 @@ U0 DocBinsValidate(CDoc *doc) doc_e=doc_e2; } - b=doc->bin_root.next; + b=doc->bin_head.next; doc->cur_bin_num=1; - while (b!=&doc->bin_root) { + while (b!=&doc->bin_head) { b1=b->next; if (!b->use_cnt) { QueRem(b); @@ -128,7 +128,7 @@ I64 DocBinPtrRst(CDoc *doc,CDocEntry *doc_e) tempb->tag=StrNew(doc_e->tag,doc->mem_task); else tempb->tag=NULL; - QueIns(tempb,doc->bin_root.last); + QueIns(tempb,doc->bin_head.last); } else bin_num=0; DocDel(doc2); diff --git a/Adam/DolDoc/DocChar.CPP b/Adam/DolDoc/DocChar.CPP index e3bf9e7..af2dadf 100644 --- a/Adam/DolDoc/DocChar.CPP +++ b/Adam/DolDoc/DocChar.CPP @@ -540,7 +540,7 @@ ic_overstrike: goto ic_done; } doc_ne=DocEntryNewTag(doc,doc_ce,&ch); - doc_ne->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8; + doc_ne->type=DOCT_TEXT | doc->settings_head.dft_text_attr<<8; doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT]; QueIns(doc_ne,doc_ce->last); } else if (ch=='\n') { @@ -557,10 +557,10 @@ ic_not_overstrike: if (ch=='\n') { if (sc&SCF_CTRL && !(sc&SCF_SHIFT)) { doc_ne=DocEntryNewBase(doc, - DOCT_PAGE_BREAK|doc->settings_root.dft_text_attr<<8); + DOCT_PAGE_BREAK|doc->settings_head.dft_text_attr<<8); } else { doc_ne=DocEntryNewBase(doc, - DOCT_NEW_LINE|doc->settings_root.dft_text_attr<<8); + DOCT_NEW_LINE|doc->settings_head.dft_text_attr<<8); } DocInsEntry(doc,doc_ne); } else if (ch=='\t') { @@ -574,7 +574,7 @@ ic_form_tab: DocFormFwd(doc); goto ic_done; } else { - doc_ne=DocEntryNewBase(doc,DOCT_TAB|doc->settings_root.dft_text_attr<<8); + doc_ne=DocEntryNewBase(doc,DOCT_TAB|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_ne); } } else { @@ -616,7 +616,7 @@ ic_form_tab: doc->cur_col++; } else { doc_ne=DocEntryNewTag(doc,doc_ce,&ch); - doc_ne->type=DOCT_TEXT | doc->settings_root.dft_text_attr<<8; + doc_ne->type=DOCT_TEXT | doc->settings_head.dft_text_attr<<8; doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT]; doc_ne->x=doc_ce->x+1; QueIns(doc_ne,doc_ce->last); diff --git a/Adam/DolDoc/DocClipBoard.CPP b/Adam/DolDoc/DocClipBoard.CPP index 6e9da3c..3346890 100644 --- a/Adam/DolDoc/DocClipBoard.CPP +++ b/Adam/DolDoc/DocClipBoard.CPP @@ -12,14 +12,14 @@ public U0 EdCopyToClipboard(CDoc *doc) CDoc *doc2=sys_clipboard_doc; Bool unlock_doc=DocLock(doc), unlock_doc2=DocLock(doc2); - CDocEntry *doc_e=doc->root.next,*doc_ne; + CDocEntry *doc_e=doc->head.next,*doc_ne; ClipboardDel; while (doc_e!=doc) { if (doc_e->type & DOCET_SEL) { doc_e->type&=~DOCET_SEL; if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) { doc_ne=DocEntryCopy(doc2,doc_e); - QueIns(doc_ne,doc2->root.last); + QueIns(doc_ne,doc2->head.last); } } doc_e=doc_e->next; @@ -35,7 +35,7 @@ public U0 EdCutToClipboard(CDoc *doc) CDoc *doc2=sys_clipboard_doc; Bool unlock_doc=DocLock(doc), unlock_doc2=DocLock(doc2); - CDocEntry *doc_e=doc->root.next,*doc_e1,*doc_ne,*doc_e2=NULL; + CDocEntry *doc_e=doc->head.next,*doc_e1,*doc_ne,*doc_e2=NULL; ClipboardDel; while (doc_e!=doc) { doc_e1=doc_e->next; @@ -43,7 +43,7 @@ public U0 EdCutToClipboard(CDoc *doc) doc_e->type&=~DOCET_SEL; if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) { doc_ne=DocEntryCopy(doc2,doc_e); - QueIns(doc_ne,doc2->root.last); + QueIns(doc_ne,doc2->head.last); } if (doc_e==doc->cur_entry || doc_e==doc_e2) doc_e2=doc_e->next; @@ -69,7 +69,7 @@ public U0 EdPasteClipboard(CDoc *doc) unlock_doc2=DocLock(doc2); CDocEntry *doc_ce=doc->cur_entry,*doc_e; if (doc_ce->type_u8==DOCT_DATA) { - doc_e=doc2->root.next; + doc_e=doc2->head.next; while (doc_e!=doc2) { if (doc_e->de_flags&DOCEF_TAG) DocPrintPartial(doc,"%s",doc_e->tag); @@ -111,7 +111,7 @@ public CDoc *DocCopy(CDoc *doc,CDocEntry *start,CDocEntry *end) while (start!=doc) { if (!Bt(doldoc.type_flags_data,start->type_u8)) { doc_ne=DocEntryCopy(doc2,start); - QueIns(doc_ne,doc2->root.last); + QueIns(doc_ne,doc2->head.last); } if (start==end) break; diff --git a/Adam/DolDoc/DocCodeTools.CPP b/Adam/DolDoc/DocCodeTools.CPP index a2d87ac..00f4acf 100644 --- a/Adam/DolDoc/DocCodeTools.CPP +++ b/Adam/DolDoc/DocCodeTools.CPP @@ -343,7 +343,7 @@ I64 EdRAGetU8(CDoc *doc) return res; } -U0 EdRACollect(CDoc *doc,CRenum *root) +U0 EdRACollect(CDoc *doc,CRenum *head) { I64 ch,i; CRenum *tempr; @@ -373,7 +373,7 @@ U0 EdRACollect(CDoc *doc,CRenum *root) ch=EdRAGetU8(doc); tempr=MAlloc(sizeof(CRenum)); StrCpy(tempr->label,buf); - QueIns(tempr,root->last); + QueIns(tempr,head->last); } } } @@ -388,16 +388,16 @@ U0 EdRenumAsm(CDoc *doc) { Bool unlock=DocLock(doc); I64 num=0; - CRenum root,*tempr,*tempr1; + CRenum head,*tempr,*tempr1; U8 buf[sizeof(CEdFindText.find_text)], buf2[sizeof(CEdFindText.find_text)]; - QueInit(&root); + QueInit(&head); EdSelFun(doc,TRUE); - EdRACollect(doc,&root); + EdRACollect(doc,&head); - tempr=root.next; - while (tempr!=&root) { + tempr=head.next; + while (tempr!=&head) { tempr1=tempr->next; num+=ASM_RENUM_SPACING; StrPrint(buf,"@#%02d",num); @@ -531,7 +531,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) x=doc_e->x+1; while (i>8) { doc_ne=DocEntryNewBase(doc, - DOCT_TAB|doc->settings_root.dft_text_attr<<8,, + DOCT_TAB|doc->settings_head.dft_text_attr<<8,, x,doc_e->y,doc_e->page_line_num); MemCpy(&doc_ne->settings, &doc_e->settings,sizeof(CDocSettings)); @@ -544,7 +544,7 @@ U0 EdCodeTools2(CDoc *doc,I64 tool_action,Bool beep=TRUE) MemSet(b,CH_SPACE,i); b[i]=0; doc_ne=DocEntryNewBase(doc, - DOCT_TEXT|doc->settings_root.dft_text_attr<<8,, + DOCT_TEXT|doc->settings_head.dft_text_attr<<8,, x,doc_e->y,doc_e->page_line_num); doc_ne->tag=b; doc_ne->max_col=1; diff --git a/Adam/DolDoc/DocEd.CPP b/Adam/DolDoc/DocEd.CPP index 4dfe646..c7860b3 100644 --- a/Adam/DolDoc/DocEd.CPP +++ b/Adam/DolDoc/DocEd.CPP @@ -159,7 +159,7 @@ public Bool DocEd(CDoc *doc,I64 dof_flags=0) DocLock(doc); if (res) { - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_DATA || doc_e->type_u8==DOCT_CHECK_BOX) DocDataScan(doc,doc_e); diff --git a/Adam/DolDoc/DocFile.CPP b/Adam/DolDoc/DocFile.CPP index 9e8163e..1e9aaf2 100644 --- a/Adam/DolDoc/DocFile.CPP +++ b/Adam/DolDoc/DocFile.CPP @@ -20,7 +20,7 @@ public U0 DocLoad(CDoc *doc,U8 *src2,I64 size) MemCpy(tempb->data,src,tempb->size); src+=tempb->size; } - QueIns(tempb,doc->bin_root.last); + QueIns(tempb,doc->bin_head.last); if (tempb->num>=doc->cur_bin_num) doc->cur_bin_num=tempb->num+1; } @@ -37,16 +37,19 @@ public CDoc *DocRead(U8 *name=NULL,I64 flags=0) CDoc *doc=DocNew; U8 *src,*name2; I64 size=0; + CDirContext *dirc; if (!name) name=blkdev.temp_filename; doc->flags|=flags; name2=FileNameAbs(name); StrCpy(doc->filename.name,name2); - src=FileRead(name2,&size,&doc->file_attr); - Free(name2); - if (src) { - DocLoad(doc,src,size); + if (src=FileRead(name2,&size,&doc->file_attr)) { + if (dirc=DirContextNew(name2)) { + DocLoad(doc,src,size); + DirContextDel(dirc); + } Free(src); } + Free(name2); return doc; } @@ -64,10 +67,10 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) DocRecalc(doc); else { DocRecalc(doc,RECALCF_ADD_CURSOR); - if (doc->root.next->type_u8==DOCT_CURSOR) - DocEntryDel(doc,doc->root.next); //If no cursor, $LK,"DocLoad",A="MN:DocLoad"$() puts at top. + if (doc->head.next->type_u8==DOCT_CURSOR) + DocEntryDel(doc,doc->head.next); //If no cursor, $LK,"DocLoad",A="MN:DocLoad"$() puts at top. } - for (doc_e=doc->root.next;doc_e!=doc;doc_e=doc_e->next) { + for (doc_e=doc->head.next;doc_e!=doc;doc_e=doc_e->next) { if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) { switch (doc_e->type_u8) { case DOCT_TAB: @@ -100,12 +103,12 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) } } } - for (b=doc->bin_root.next;b!=&doc->bin_root;b=b->next) + for (b=doc->bin_head.next;b!=&doc->bin_head;b=b->next) if (b->use_cnt>b->temp_use_cnt) cnt+=offset(CDocBin.end)-offset(CDocBin.start)+b->size; res=MAlloc(cnt); dst=res; - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { doc_e1=doc_e->next; if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) @@ -151,8 +154,8 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) doc_e=doc_e1; } *dst++=0; - b=doc->bin_root.next; - if (b!=&doc->bin_root) { + b=doc->bin_head.next; + if (b!=&doc->bin_head) { do { if (b->use_cnt>b->temp_use_cnt) { MemCpy(dst,&b->start,offset(CDocBin.end)-offset(CDocBin.start)); @@ -161,7 +164,7 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL) dst+=b->size; } b=b->next; - } while (b!=&doc->bin_root); + } while (b!=&doc->bin_head); } else cnt--; //No terminator if (_size) *_size=cnt; @@ -189,7 +192,7 @@ public U0 DocInsDoc(CDoc *doc=NULL,CDoc *doc2) //TODO: $LK,"DocRst",A="MN:DocRst"$ U8 *dst; Bool unlock_doc,unlock_doc2=DocLock(doc2); - CDocEntry *doc_ne,*doc_e=doc2->root.next,*doc_ce; + CDocEntry *doc_ne,*doc_e=doc2->head.next,*doc_ce; if (!doc) doc=DocPut; unlock_doc=DocLock(doc), DocRemSoftNewLines(doc,NULL); @@ -227,7 +230,7 @@ public U0 StreamDoc(CDoc *doc) {//Inject doc into compile stream. Use inside #exe{}. //TODO: $LK,"DocRst",A="MN:DocRst"$ Bool unlock_doc=DocLock(doc); - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_TEXT) StreamPrint("%s",doc_e->tag); @@ -251,7 +254,7 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE) unlock=DocLock(doc); time_stamp=GetTSC; if (doc->flags&DOCF_UNDO_DIRTY && - time_stamp>doc->undo_root.last->time_stamp+cnts.time_stamp_freq<<4 || + time_stamp>doc->undo_head.last->time_stamp+cnts.time_stamp_freq<<4 || force) { u=CAlloc(sizeof(CDocUndo),doc->mem_task); u->time_stamp=time_stamp; @@ -259,7 +262,7 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE) doc->flags&=~DOCF_NO_CURSOR; u->body=DocSave(doc,&u->size); doc->flags=flags; - QueIns(u,doc->undo_root.last); + QueIns(u,doc->undo_head.last); doc->flags&=~DOCF_UNDO_DIRTY; doc->undo_cnt++; u->doc_flags=doc->flags; @@ -274,19 +277,19 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE) U0 DocUndoRestore(CDoc *doc) { Bool unlock=DocLock(doc); - CDocUndo *u=doc->undo_root.last,*u_next,*u_last; - if (u!=&doc->undo_root) { + CDocUndo *u=doc->undo_head.last,*u_next,*u_last; + if (u!=&doc->undo_head) { QueRem(u); - u_next=doc->undo_root.next; - u_last=doc->undo_root.last; - QueInit(&doc->undo_root); + u_next=doc->undo_head.next; + u_last=doc->undo_head.last; + QueInit(&doc->undo_head); DocRst(doc,TRUE); doc->flags=u->doc_flags&~DOCF_NO_CURSOR; DocLoad(doc,u->body,u->size); doc->flags=u->doc_flags; DocUndoDel(doc,u); - doc->undo_root.next=u_next; - doc->undo_root.last=u_last; + doc->undo_head.next=u_next; + doc->undo_head.last=u_last; } DocUndoCntSet(doc); doc->flags&=~DOCF_UNDO_DIRTY; diff --git a/Adam/DolDoc/DocFind.CPP b/Adam/DolDoc/DocFind.CPP index 9f65bb5..7e37a1b 100644 --- a/Adam/DolDoc/DocFind.CPP +++ b/Adam/DolDoc/DocFind.CPP @@ -28,7 +28,7 @@ U8 *needle,I64 match=1) unlock=DocLock(haystack_doc); if (start_line_num==MIN_I64) { res=TRUE; - doc_e=haystack_doc->root.next; + doc_e=haystack_doc->head.next; } else { res=DocLineNumGoTo(haystack_doc,start_line_num); doc_e=haystack_doc->cur_entry; @@ -69,7 +69,7 @@ public Bool DocAnchorFind(CDoc *haystack_doc,U8 *needle_str) CDocEntry *doc_e; if (haystack_doc) { unlock=DocLock(haystack_doc); - doc_e=haystack_doc->root.next; + doc_e=haystack_doc->head.next; if (needle_str) while (doc_e!=haystack_doc) { if (doc_e->type_u8==DOCT_ANCHOR && doc_e->de_flags & DOCEF_AUX_STR) { @@ -170,7 +170,7 @@ fn_skip: public U0 EdSelAll(CDoc *doc,Bool sel) {//Set state of $LK,"DOCET_SEL",A="MN:DOCET_SEL"$ on all entries. Bool unlock=DocLock(doc); - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; while (doc_e!=doc) { BEqu(&doc_e->type,DOCEt_SEL,sel); doc_e=doc_e->next; @@ -401,7 +401,7 @@ I64 EdFindReplace(CDoc *doc) sf_flags|=SFG_WHOLE_LABELS; if (i=doc->find_replace->filter_lines) { - doc_ce=doc->root.next; + doc_ce=doc->head.next; while (doc_ce!=doc) { if (doc_ce->de_flags&DOCEF_TAG && doc_ce->tag && !(doc_ce->de_flags&DOCEF_FILTER_SKIP) && @@ -413,7 +413,7 @@ I64 EdFindReplace(CDoc *doc) doc_ce=doc_ce->next; } - doc_ce=doc->root.next; + doc_ce=doc->head.next; while (doc_ce!=doc) { if (!(doc_ce->de_flags&DOCEF_FILTER_SKIP)) { found=FALSE; @@ -459,7 +459,7 @@ I64 EdFindReplace(CDoc *doc) if (!plen) goto fr_unlock_done; rlen=StrLen(doc->find_replace->replace_text); - if (doc->root.next!=doc) { + if (doc->head.next!=doc) { doc_e=doc_marker=DocSplitTag(doc,doc->cur_entry,doc->cur_col, doc->cur_entry->x+doc->cur_col,doc->cur_entry->y,DOCT_MARKER); do { diff --git a/Adam/DolDoc/DocForm.CPP b/Adam/DolDoc/DocForm.CPP index 41d295c..fd31b73 100644 --- a/Adam/DolDoc/DocForm.CPP +++ b/Adam/DolDoc/DocForm.CPP @@ -260,7 +260,7 @@ public Bool DocForm(U8 *_d,U8 *class_name=lastclass, ml=ml->next; } if (footer) DocPrint(doc,"%s",footer); - if (doc->root.next!=doc) { + if (doc->head.next!=doc) { Fs->border_src=BDS_CONST; DocRecalc(doc); if (DocEd(doc,dof_flags)) { @@ -273,7 +273,7 @@ public Bool DocForm(U8 *_d,U8 *class_name=lastclass, } } } - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->de_flags&DOCEF_REMALLOC_DATA) { *doc_e->user_data(U8 **)=doc_e->data; diff --git a/Adam/DolDoc/DocGet.CPP b/Adam/DolDoc/DocGet.CPP index edcc4e3..8c4cf14 100644 --- a/Adam/DolDoc/DocGet.CPP +++ b/Adam/DolDoc/DocGet.CPP @@ -3,7 +3,7 @@ U0 EdUndoFilter(CDoc *doc) { Bool unlock=DocLock(doc); - CDocEntry *doc_ce=doc->root.next; + CDocEntry *doc_ce=doc->head.next; while (doc_ce!=doc) { doc_ce->de_flags&=~DOCEF_FILTER_SKIP; doc_ce=doc_ce->next; diff --git a/Adam/DolDoc/DocInit.CPP b/Adam/DolDoc/DocInit.CPP index bc3ce55..049a5e5 100644 --- a/Adam/DolDoc/DocInit.CPP +++ b/Adam/DolDoc/DocInit.CPP @@ -7,9 +7,9 @@ U0 DocInit() CHashGeneric *temph; DefineLstLoad("ST_DOC_CMDS", - "TX\0CR\0SR\0CU\0MK\0TB\0CL\0PB\0PL\0LM\0RM\0HD\0FO\0ID\0FG\0" - "BG\0FD\0BD\0PT\0WW\0UL\0IV\0BK\0SX\0SY\0CM\0AN\0LK\0BT\0" - "DA\0CB\0LS\0MA\0MU\0HX\0TR\0SP\0IB\0IS\0SO\0HL\0HC\0ER\0"); + "TX\0CR\0SR\0TB\0PB\0CU\0MK\0PT\0CL\0PL\0LM\0RM\0HD\0FO\0ID\0FG\0" + "BG\0FD\0BD\0WW\0HL\0BK\0IV\0UL\0SX\0SY\0CM\0AN\0LK\0BT\0" + "DA\0CB\0LS\0MA\0MU\0HX\0TR\0SP\0IB\0IS\0SO\0HC\0ER\0"); DefineLstLoad("ST_DOC_FLAGS", "T\0LEN\0A\0D\0HTML\0LE\0LM\0RE\0RM\0BI\0BP\0RT\0SX\0SY\0SCX\0U\0" "LC\0LA\0RC\0RA\0LX\0CX\0RX\0TY\0CY\0BY\0" @@ -52,6 +52,7 @@ U0 DocInit() //Don't forget $LK,"cmp_type_flags_src_code",A="MN:cmp_type_flags_src_code"$. doldoc.type_flags_nontag_invisible[0]= + 1<next; - while (tempc!=macro_root) { + tempc=macro_head->next; + while (tempc!=macro_head) { tempc1=tempc->next; if (tempc->cmd_code==SVCT_MSG && (tempc->msg_code==MSG_KEY_DOWN || tempc->msg_code==MSG_KEY_UP || @@ -50,20 +50,20 @@ CMacroTemp *Cmd2MT(CSrvCmd *tempc) return tempmt; } -U8 *SysMacro2Str(CSrvCmd *macro_root) +U8 *SysMacro2Str(CSrvCmd *macro_head) { CSrvCmd *tempc; I64 cnt=1; //terminating zero U8 *ptr,*m; - CMacroTemp *tempmt,*tempmt1,root; + CMacroTemp *tempmt,*tempmt1,head; LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); - QueInit(&root); - root.type=MT_NULL; - tempc=macro_root->next; - while (tempc!=macro_root) { + QueInit(&head); + head.type=MT_NULL; + tempc=macro_head->next; + while (tempc!=macro_head) { tempmt=Cmd2MT(tempc); - QueIns(tempmt,root.last); + QueIns(tempmt,head.last); cnt+=StrLen(tempmt->buf); if (tempmt->type==MT_CHAR) { if (tempmt->last->type!=MT_CHAR) @@ -77,8 +77,8 @@ U8 *SysMacro2Str(CSrvCmd *macro_root) m=MAlloc(cnt); ptr=m; - tempmt=root.next; - while (tempmt!=&root) { + tempmt=head.next; + while (tempmt!=&head) { tempmt1=tempmt->next; if (tempmt->type==MT_MSG) { StrCpy(ptr, tempmt->buf); @@ -108,7 +108,7 @@ U0 PlaySysMacro(I64 n=1) U8 *m; if (TaskValidate(task)) { LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); - m=SysMacro2Str(&sys_macro_root); + m=SysMacro2Str(&sys_macro_head); while (n-- && TaskValidate(task)) { if (task==Fs) AutoStr("%s",m); @@ -121,9 +121,9 @@ U0 PlaySysMacro(I64 n=1) U0 EdInsCapturedMacro() { - U8 *st=SysMacro2Str(&sys_macro_root); + U8 *st=SysMacro2Str(&sys_macro_head); if (sys_focus_task) { - XTalk(sys_focus_task,"$$MA+LA,T=\"%s\",LM=\"%Q\"$$", + XTalk(sys_focus_task,"$$MA+LA,T=\"%s\",LM=\"%$$Q\"$$", captured_macro_name,st); Free(st); } @@ -184,7 +184,7 @@ U0 MacroTask(I64) switch (i) { case SM_RECORD: LBtr(&sys_semas[SYS_SEMA_RECORD_MACRO],0); - QueDel(&sys_macro_root,TRUE); + QueDel(&sys_macro_head,TRUE); LBts(&sys_semas[SYS_SEMA_RECORD_MACRO],0); break; case SM_PLAY: diff --git a/Adam/DolDoc/DocNew.CPP b/Adam/DolDoc/DocNew.CPP index 566e4ba..4447beb 100644 --- a/Adam/DolDoc/DocNew.CPP +++ b/Adam/DolDoc/DocNew.CPP @@ -123,9 +123,9 @@ U0 DocUndoDel(CDoc *,CDocUndo *u) U0 DocUndoCntSet(CDoc *doc) { Bool unlock=DocLock(doc); - CDocUndo *u=doc->undo_root.next; + CDocUndo *u=doc->undo_head.next; doc->undo_cnt=0; - while (u!=&doc->undo_root) { + while (u!=&doc->undo_head) { doc->undo_cnt++; u=u->next; } @@ -165,7 +165,7 @@ public CDocEntry *DocEntryCopy(CDoc *doc,CDocEntry *doc_e) tempb->tag=StrNew(doc_e->tag,task); else tempb->tag=NULL; - QueIns(tempb,doc->bin_root.last); + QueIns(tempb,doc->bin_head.last); } if (doc_e->de_flags & DOCEF_REMALLOC_DATA) doc_ne->data=MAllocIdent(doc_e->data,task); @@ -179,7 +179,7 @@ U0 DocRemSoftNewLines(CDoc *doc=NULL,CDocEntry *doc_e=NULL) if (!doc && !(doc=DocPut)) return; unlock=DocLock(doc); - if (!doc_e) doc_e=doc->root.next; + if (!doc_e) doc_e=doc->head.next; while (doc_e!=doc) { doc_e2=doc_e->next; if (doc_e->type_u8==DOCT_SOFT_NEW_LINE) { @@ -244,20 +244,20 @@ public U0 DocRst(CDoc *doc,Bool is_old) return; unlock=DocLock(doc); if (is_old) { - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { doc_e2=doc_e->next; DocEntryDel(doc,doc_e); doc_e=doc_e2; } - u=doc->undo_root.next; - while (u!=&doc->undo_root) { + u=doc->undo_head.next; + while (u!=&doc->undo_head) { u8=u->next; DocUndoDel(doc,u); u=u8; } - b=doc->bin_root.next; - while (b!=&doc->bin_root) { + b=doc->bin_head.next; + while (b!=&doc->bin_head) { b1=b->next; QueRem(b); Free(b->data); @@ -267,10 +267,10 @@ public U0 DocRst(CDoc *doc,Bool is_old) } //Check $LK,"DocInsDoc",A="MN:DocInsDoc"$ doc->flags&=DOCF_BREAK_UNLOCKED; - doc->root.next=doc->root.last=doc; - QueInit(&doc->bin_root); - QueInit(&doc->undo_root); - doc->undo_root.time_stamp=0; + doc->head.next=doc->head.last=doc; + QueInit(&doc->bin_head); + QueInit(&doc->undo_head); + doc->undo_head.time_stamp=0; doc->undo_cnt=0; doc->cur_bin_num=1; doc->dollar_buf_ptr=0; @@ -278,7 +278,7 @@ public U0 DocRst(CDoc *doc,Bool is_old) doc->page_line_num=0; doc->best_d=MAX_I64; - s=&doc->settings_root; + s=&doc->settings_head; s->left_margin=DOC_DFT; s->right_margin=DOC_DFT; s->indent=0; @@ -293,7 +293,7 @@ public U0 DocRst(CDoc *doc,Bool is_old) s->shifted_y=0; s->cur_text_attr=s->dft_text_attr=DOC_ATTR_DFT_TEXT; - doc_e=&doc->root; + doc_e=&doc->head; doc_e->type=DOCT_ERROR; doc_e->de_flags=0; doc_e->x=0; @@ -331,21 +331,21 @@ public I64 DocSize(CDoc *doc) if (!doc || doc->doc_signature!=DOC_SIGNATURE_VAL) return 0; unlock=DocLock(doc); - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { res+=DocEntrySize(doc,doc_e); doc_e=doc_e->next; } - u=doc->undo_root.next; - while (u!=&doc->undo_root) { + u=doc->undo_head.next; + while (u!=&doc->undo_head) { res+=MSize2(u->body); res+=MSize2(u); u=u->next; } - b=doc->bin_root.next; - while (b!=&doc->bin_root) { + b=doc->bin_head.next; + while (b!=&doc->bin_head) { res+=MSize2(b->data); res+=MSize2(b); b=b->next; diff --git a/Adam/DolDoc/DocOpt.CPP b/Adam/DolDoc/DocOpt.CPP index 49db3fe..9f2a580 100644 --- a/Adam/DolDoc/DocOpt.CPP +++ b/Adam/DolDoc/DocOpt.CPP @@ -53,13 +53,23 @@ I64 DocOptDoc(CDoc *doc,I64 fuf_flags) {//Optimize Doc. Bool unlock=DocLock(doc); I64 res=0; - CDocEntry *doc_e; + CDocEntry *doc_e,*doc_e1,*doc_e_last; DocRecalc(doc); - doc_e=doc->root.next; + doc_e_last=NULL; + doc_e=doc->head.next; while (doc_e!=doc) { + doc_e1=doc_e->next; if (res+=DocOptEntry(doc,doc_e,fuf_flags)) res+=DocOptEntry(doc,doc_e,fuf_flags); - doc_e=doc_e->next; + if (doc_e_last && doc_e_last->type&~0xFF00==doc_e->type&~0xFF00 && + doc_e_last->de_flags==doc_e->de_flags && + Bt(doldoc.type_flags_chk_dup,doc_e->type_u8) && + doc_e_last->attr==doc_e->attr) { + DocEntryDel(doc,doc_e); + res++; + } else + doc_e_last=doc_e; + doc_e=doc_e1; } DocRecalc(doc); if (unlock) diff --git a/Adam/DolDoc/DocPlain.CPP b/Adam/DolDoc/DocPlain.CPP index 9db551e..47ec7a9 100644 --- a/Adam/DolDoc/DocPlain.CPP +++ b/Adam/DolDoc/DocPlain.CPP @@ -10,10 +10,10 @@ I64 PrsDocFlagSingle(CCmpCtrl *cc,I64 *_de_flags,U32 *_type,Bool turn_on) if (res<64) { BEqu(_de_flags,res,turn_on); switch (res) { - case DOCEf_SEL: - case DOCEf_UNDERLINE: - case DOCEf_INVERT: case DOCEf_BLINK: + case DOCEf_INVERT: + case DOCEf_UNDERLINE: + case DOCEf_SEL: BEqu(_type,res,turn_on); break; } @@ -105,9 +105,9 @@ U8 *Doc2PlainText(CDoc *doc,CDocEntry *doc_e) case DOCT_INDENT: case DOCT_WORD_WRAP: case DOCT_HIGHLIGHT: - case DOCT_UNDERLINE: - case DOCT_INVERT: case DOCT_BLINK: + case DOCT_INVERT: + case DOCT_UNDERLINE: case DOCT_SHIFTED_X: case DOCT_SHIFTED_Y: if (attr!=DOC_DFT) { @@ -273,9 +273,9 @@ CDocEntry *PrsDollarCmd(CDoc *doc,U8 *st) case DOCT_DFT_BACKGROUND: case DOCT_WORD_WRAP: case DOCT_HIGHLIGHT: - case DOCT_UNDERLINE: - case DOCT_INVERT: case DOCT_BLINK: + case DOCT_INVERT: + case DOCT_UNDERLINE: case DOCT_SHIFTED_X: case DOCT_SHIFTED_Y: while (cc->token==',') @@ -575,7 +575,7 @@ U0 DocEntryToggle(CDoc *doc) st=Doc2PlainText(doc,doc_ce); LBEqu(&doc->flags,DOCf_COLOR_NAMES,old_color_names); DocEntryDel(doc,doc_ce); - DocPrint(doc,"$$$$%Q$$$$",st); + DocPrint(doc,"$$$$%$$Q$$$$",st); } DocRecalc(doc); } @@ -593,13 +593,13 @@ U0 DocFlagsToggle(CDoc *doc,I64 tog_flags) doc->flags=doc->flags&~DOCF_NO_CURSOR|DOCF_COLOR_NAMES; st=DocSave(doc,&size); - u_next=doc->undo_root.next; - u_last=doc->undo_root.last; - doc->undo_root.next=doc->undo_root.last=&doc->undo_root; + u_next=doc->undo_head.next; + u_last=doc->undo_head.last; + doc->undo_head.next=doc->undo_head.last=&doc->undo_head; DocRst(doc,TRUE); - doc->undo_root.next=u_next; - doc->undo_root.last=u_last; + doc->undo_head.next=u_next; + doc->undo_head.last=u_last; DocUndoCntSet(doc); doc->flags=flags&~(DOCF_NO_CURSOR|DOCG_BL_IV_UL|DOCF_WORD_WRAP); DocLoad(doc,st,size); diff --git a/Adam/DolDoc/DocPutKey.CPP b/Adam/DolDoc/DocPutKey.CPP index 5df8617..bd7d239 100644 --- a/Adam/DolDoc/DocPutKey.CPP +++ b/Adam/DolDoc/DocPutKey.CPP @@ -97,7 +97,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) BEqu(&doc_ce->type,DOCEt_SEL,sc&SCF_SHIFT); doc_ce=doc->cur_entry=doc_ce->last; } - doc_ce=doc->cur_entry=doc->root.next; + doc_ce=doc->cur_entry=doc->head.next; doc->cur_col=doc_ce->min_col; DocFormFwd(doc); } @@ -142,7 +142,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) (doc_ce->type_u8!=DOCT_HEX_ED && doc_ce->y>i || doc_ce->type_u8==DOCT_HEX_ED && doc_ce->y+doc->cur_col/3/doc_ce->hex_ed_width>i) && - doc_ce->y!=doc->root.next->y) { + doc_ce->y!=doc->head.next->y) { EdLineUp(doc,sc); //paranoid check for stuck on same node if (doc->cur_entry==doc_ce && doc_ce->type_u8!=DOCT_HEX_ED) @@ -256,7 +256,7 @@ public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0) if (TaskValidate(sys_macro_task)) PostMsgWait(sys_macro_task, MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0); - SysMacroStripKey(&sys_macro_root,ch,sc); + SysMacroStripKey(&sys_macro_head,ch,sc); PlaySysMacro; } else EdMacroUtil; diff --git a/Adam/DolDoc/DocPutS.CPP b/Adam/DolDoc/DocPutS.CPP index 6689ac8..cedcfad 100644 --- a/Adam/DolDoc/DocPutS.CPP +++ b/Adam/DolDoc/DocPutS.CPP @@ -27,7 +27,7 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) if (!ch) { if (j=ptr-ptr2) { doc_e=DocEntryNewBase(doc, - DOCT_TEXT|doc->settings_root.dft_text_attr<<8); + DOCT_TEXT|doc->settings_head.dft_text_attr<<8); if (doc->flags & DOCF_NO_CURSOR) { src=MAlloc(j+1); MemCpy(src,ptr2,j+1); @@ -46,7 +46,7 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) if (j=ptr-ptr2) { *ptr=0; doc_e=DocEntryNewBase(doc, - DOCT_TEXT|doc->settings_root.dft_text_attr<<8); + DOCT_TEXT|doc->settings_head.dft_text_attr<<8); if (doc->flags & DOCF_NO_CURSOR) { src=MAlloc(j+1); MemCpy(src,ptr2,j+1); @@ -72,19 +72,19 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) switch (ch) { case CH_CURSOR: doc_e=DocEntryNewBase(doc, - DOCT_CURSOR|doc->settings_root.dft_text_attr<<8); + DOCT_CURSOR|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_e); ptr++; break; case CH_FORM_FEED: doc_e=DocEntryNewBase(doc, - DOCT_PAGE_BREAK|doc->settings_root.dft_text_attr<<8); + 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_root.dft_text_attr<<8); + DOCT_TAB|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_e); ptr++; break; @@ -97,13 +97,13 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) *ptr=0; //zero second dollar if (ptr-1==ptr2 && *ptr2==CH_CURSOR) { doc_e=DocEntryNewBase(doc, - DOCT_CURSOR|doc->settings_root.dft_text_attr<<8); + DOCT_CURSOR|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_e); ptr2++; } if (ptr==ptr2) { doc_e=DocEntryNewBase(doc, - DOCT_TEXT|doc->settings_root.dft_text_attr<<8); + DOCT_TEXT|doc->settings_head.dft_text_attr<<8); doc_e->max_col=1; if (doc->flags & DOCF_DBL_DOLLARS) doc_e->tag=StrNew("$$$$",doc->mem_task); @@ -117,11 +117,11 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) while (ch=*ptr3++) { if (ch==CH_CURSOR) { doc_e=DocEntryNewBase(doc, - DOCT_CURSOR|doc->settings_root.dft_text_attr<<8); + 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_root.dft_text_attr<<8); + DOCT_PAGE_BREAK|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_e); } else *ptr4++=ch; @@ -138,7 +138,7 @@ CDocEntry *DocPutS(CDoc *doc,U8 *st) break; default: doc_e=DocEntryNewBase(doc, - DOCT_NEW_LINE|doc->settings_root.dft_text_attr<<8); + DOCT_NEW_LINE|doc->settings_head.dft_text_attr<<8); DocInsEntry(doc,doc_e); if (ch=='\r') while (*ptr=='\r') @@ -214,7 +214,7 @@ public U0 DocPrintPartial(CDoc *doc=NULL,U8 *fmt,...) doc_ce->tag=st; } else { doc_ne=DocEntryNewTag(doc,doc_ce,ptr2); - doc_ne->type=DOCT_TEXT|doc->settings_root.dft_text_attr<<8; + doc_ne->type=DOCT_TEXT|doc->settings_head.dft_text_attr<<8; doc_ne->de_flags=doldoc.dft_de_flags[DOCT_TEXT]; QueIns(doc_ne,doc_ce->last); doc->cur_entry=doc_ne; @@ -263,7 +263,7 @@ U0 DocDump(CDoc *doc,I64 uS_delay=0) U8 *st; CDocEntry *doc_e,*doc_e2; Bool unlock=DocLock(doc); - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { st=DocScanLine(doc,doc_e,NULL,&doc_e2); "%s",st; diff --git a/Adam/DolDoc/DocRecalc.CPP b/Adam/DolDoc/DocRecalc.CPP index e644b8a..da5b6a4 100644 --- a/Adam/DolDoc/DocRecalc.CPP +++ b/Adam/DolDoc/DocRecalc.CPP @@ -353,8 +353,8 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) doc->line_start_col=0; recalc_flags&=~RECALCF_HAS_CURSOR; if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN) - doc->settings_root.cur_text_attr= - doc->settings_root.dft_text_attr=win_task->border_attr; + doc->settings_head.cur_text_attr= + doc->settings_head.dft_text_attr=win_task->border_attr; } else { if (recalc_flags&RECALCF_HAS_CURSOR && full_refresh) { if (Bt(&hss->flags,WSSf_SET_TO_POS)||Bt(&vss->flags,WSSf_SET_TO_POS)) { @@ -374,8 +374,8 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) } } if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN) - doc->settings_root.cur_text_attr= - doc->settings_root.dft_text_attr=win_task->text_attr; + doc->settings_head.cur_text_attr= + doc->settings_head.dft_text_attr=win_task->text_attr; } x0=doc->line_start_col; y0=doc->top_line_num; @@ -395,16 +395,16 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) if (doc->cur_col<=doc->cur_entry->min_col) doc->cur_col=doc->cur_entry->min_col; - doc_e=doc->root.next; + doc_e=doc->head.next; doc_e->de_flags&=~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT); - if (doc_e==doc->root.next) - s=&doc->settings_root; + if (doc_e==doc->head.next) + s=&doc->settings_head; else s=&doc_e->last->settings; doc->flags=doc_e->de_flags& (DOCG_BL_IV_UL|DOCEF_WORD_WRAP) | doc->flags&~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP); cur_u8_attr=s->cur_text_attr; - if (doc_e==doc->root.next) { + if (doc_e==doc->head.next) { doc->flags&=~DOCF_BWD_MOVEMENT; if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCREEN && full_refresh) doc->flags&=~DOCF_HAS_SONG; @@ -412,14 +412,14 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) doc->flags=doc_e->de_flags& DOCEF_HIGHLIGHT | doc->flags&~DOCEF_HIGHLIGHT; - if (doc->root.next==doc) { + if (doc->head.next==doc) { best_doc_e=doc; best_col=0; doc->cur_entry=doc; doc->cur_col=0; doc_e=doc; } - skipped_update= doc_e==doc && doc->root.next!=doc; + skipped_update= doc_e==doc && doc->head.next!=doc; if (full_refresh) { doc->min_x=MAX_I32; doc->min_y=MAX_I32; @@ -716,41 +716,6 @@ public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL) x-=doc_e->hex_ed_width*3+k+9; } break; - case DOCT_TAB: - k=(x+8) & ~7; - if (doc_e->de_flags & DOCEF_BORDER_PLOT && - !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) { - while (xde_flags&DOCEF_DONT_DRAW)) - TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+CH_SPACE); - if (find_cursor) { - d2=DocCharDist(doc,x,y); - if (d2de_flags&DOCEF_DONT_DRAW)) { - if (y_plot_top<=y<=y_plot_bottom) - TextLenStr(win_task,x-x0,y-y0,k,temp_u32_attr," "); - x+=k; - } else { - if (find_cursor) { - while (k--) { - d2=DocCharDist(doc,x,y); - if (d2flags|=DOCF_BWD_MOVEMENT; - x+=doc_e->cursor_x_offset; - if (doc_e->de_flags & DOCEF_PAGE_REL_Y) { - i=doc->page_line_num; - if (doc_e->de_flags & DOCEF_TOP_Y) - doc->page_line_num=0; - else if (doc_e->de_flags & DOCEF_BOTTOM_Y) - doc->page_line_num=s->page_len-1; - else if (doc_e->de_flags & DOCEF_CENTER_Y) - doc->page_line_num=s->page_len>>1; - y+=doc->page_line_num-i; + case DOCT_TAB: + k=(x+8) & ~7; + if (doc_e->de_flags & DOCEF_BORDER_PLOT && + !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) { + while (xde_flags&DOCEF_DONT_DRAW)) + TextChar(win_task,TRUE,x-x0,y-y0,temp_u32_attr+CH_SPACE); + if (find_cursor) { + d2=DocCharDist(doc,x,y); + if (d2de_flags&DOCEF_DONT_DRAW)) { + if (y_plot_top<=y<=y_plot_bottom) + TextLenStr(win_task,x-x0,y-y0,k,temp_u32_attr," "); + x+=k; + } else { + if (find_cursor) { + while (k--) { + d2=DocCharDist(doc,x,y); + if (d2cursor_y_offset; - doc->page_line_num+=doc_e->cursor_y_offset; - goto rc_adjust_xy; + break; case DOCT_PAGE_BREAK: doc->flags|=DOCF_BWD_MOVEMENT; y+=s->page_len-doc_e->page_line_num; doc->page_line_num=0; goto rc_start_of_line; - case DOCT_INDENT: - if (doc_e->de_flags & DOCEF_LEFT_X) - i=doc_e->attr; + case DOCT_CURSOR: + if (!find_cursor && !(doc->flags & DOCF_NO_CURSOR)) { + doc->cur_entry=doc_e->next; + doc->cur_col=doc->cur_entry->min_col; + } + if (doc_e!=added_cursor) + del_doc_e=TRUE; + break; + case DOCT_PMT: + cur_u8_attr=cur_u8_attr&0xF0|DOC_COLOR_PMT; + if (y==cursor_y) { + doc->cur_entry=doc_e->next; + doc->cur_col=doc->cur_entry->min_col; + } + break; + case DOCT_CLEAR: + next_clear_found=doc_e; + if (doc_e->de_flags&DOCEF_HOLD) + clear_holds=TRUE; else - i=s->indent+doc_e->attr; - s->indent=i; - goto rc_start_of_line; + clear_holds=FALSE; + break; case DOCT_PAGE_LEN: s->page_len=doc_e->attr; if (doc_e->de_flags & DOCEF_WIN_REL) @@ -861,6 +860,13 @@ rc_adjust_xy: case DOCT_FOOTER: s->footer=doc_e->attr; goto rc_adjust_xy; + case DOCT_INDENT: + if (doc_e->de_flags & DOCEF_LEFT_X) + i=doc_e->attr; + else + i=s->indent+doc_e->attr; + s->indent=i; + goto rc_start_of_line; case DOCT_FOREGROUND: cur_u8_attr&=0xF0; if (doc_e->attr==DOC_DFT) @@ -895,13 +901,6 @@ rc_adjust_xy: s->dft_text_attr=s->dft_text_attr&0x0F|cur_u8_attr&0xF0; s->cur_text_attr=cur_u8_attr; break; - case DOCT_PMT: - cur_u8_attr=cur_u8_attr&0xF0|DOC_COLOR_PMT; - if (y==cursor_y) { - doc->cur_entry=doc_e->next; - doc->cur_col=doc->cur_entry->min_col; - } - break; case DOCT_WORD_WRAP: if (doc_e->attr) doc->flags|=DOCF_WORD_WRAP; @@ -914,11 +913,11 @@ rc_adjust_xy: else doc->flags&=~DOCF_HIGHLIGHT; break; - case DOCT_UNDERLINE: + case DOCT_BLINK: if (doc_e->attr) - doc->flags|=DOCF_UNDERLINE; + doc->flags|=DOCF_BLINK; else - doc->flags&=~DOCF_UNDERLINE; + doc->flags&=~DOCF_BLINK; break; case DOCT_INVERT: if (doc_e->attr) @@ -926,11 +925,11 @@ rc_adjust_xy: else doc->flags&=~DOCF_INVERT; break; - case DOCT_BLINK: + case DOCT_UNDERLINE: if (doc_e->attr) - doc->flags|=DOCF_BLINK; + doc->flags|=DOCF_UNDERLINE; else - doc->flags&=~DOCF_BLINK; + doc->flags&=~DOCF_UNDERLINE; break; case DOCT_SHIFTED_X: s->shifted_x=doc_e->attr; @@ -938,14 +937,22 @@ rc_adjust_xy: case DOCT_SHIFTED_Y: s->shifted_y=doc_e->attr; break; - case DOCT_CURSOR: - if (!find_cursor && !(doc->flags & DOCF_NO_CURSOR)) { - doc->cur_entry=doc_e->next; - doc->cur_col=doc->cur_entry->min_col; + case DOCT_CURSOR_MOVEMENT: + doc->flags|=DOCF_BWD_MOVEMENT; + x+=doc_e->cursor_x_offset; + if (doc_e->de_flags & DOCEF_PAGE_REL_Y) { + i=doc->page_line_num; + if (doc_e->de_flags & DOCEF_TOP_Y) + doc->page_line_num=0; + else if (doc_e->de_flags & DOCEF_BOTTOM_Y) + doc->page_line_num=s->page_len-1; + else if (doc_e->de_flags & DOCEF_CENTER_Y) + doc->page_line_num=s->page_len>>1; + y+=doc->page_line_num-i; } - if (doc_e!=added_cursor) - del_doc_e=TRUE; - break; + y+=doc_e->cursor_y_offset; + doc->page_line_num+=doc_e->cursor_y_offset; + goto rc_adjust_xy; case DOCT_SPRITE: if (!doc_e->bin_data && doc->flags&DOCEF_HAS_BIN) doc_e->bin_data=DocBinFindNum(doc,doc_e->bin_num); @@ -1040,13 +1047,6 @@ rc_adjust_xy: } doc->flags|=DOCF_HAS_SONG; break; - case DOCT_CLEAR: - next_clear_found=doc_e; - if (doc_e->de_flags&DOCEF_HOLD) - clear_holds=TRUE; - else - clear_holds=FALSE; - break; case DOCT_HTML_CODE: if (recalc_flags&RECALCF_TO_HTML && doc_e->de_flags&DOCEF_TAG && doc_e->tag) diff --git a/Adam/DolDoc/DocRecalcLib.CPP b/Adam/DolDoc/DocRecalcLib.CPP index c0f5742..76a9fdb 100644 --- a/Adam/DolDoc/DocRecalcLib.CPP +++ b/Adam/DolDoc/DocRecalcLib.CPP @@ -8,7 +8,7 @@ I64 DocCharDist(CDoc *doc,I64 x,I64 y) U0 DocDelToNum(CDoc *doc,I64 num) { - CDocEntry *doc_e=doc->root.next,*doc_e2; + CDocEntry *doc_e=doc->head.next,*doc_e2; while (num-->0 && doc_e!=doc) { doc_e2=doc_e->next; if (!(doc_e->de_flags & (DOCEF_HOLD|DOCEF_FILTER_SKIP))) { @@ -24,7 +24,7 @@ U0 DocDelToNum(CDoc *doc,I64 num) U0 DocDelToEntry(CDoc *doc,CDocEntry *clear_entry,Bool clear_holds) { - CDocEntry *doc_e=doc->root.next,*doc_e2; + CDocEntry *doc_e=doc->head.next,*doc_e2; while (doc_e!=doc) { doc_e2=doc_e->next; if (!(doc_e->de_flags & (DOCEF_HOLD|DOCEF_FILTER_SKIP))||clear_holds) { @@ -76,7 +76,7 @@ public U0 DocTop(CDoc *doc=NULL) if (!doc && !(doc=DocPut)) return; unlock=DocLock(doc); - doc->cur_entry=doc->root.next; + doc->cur_entry=doc->head.next; doc->cur_col=doc->cur_entry->min_col; doc->x=0; doc->y=0; @@ -161,7 +161,7 @@ public U0 DocCollapse(Bool collapse=TRUE,CDoc *doc=NULL) if (!doc && !(doc=DocPut)) return; unlock=DocLock(doc); - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->de_flags&DOCEF_TREE) BEqu(&doc_e->de_flags,DOCEf_CHECKED_COLLAPSED,collapse); diff --git a/Adam/DolDoc/DocTree.CPP b/Adam/DolDoc/DocTree.CPP index fe71d3f..15f1748 100644 --- a/Adam/DolDoc/DocTree.CPP +++ b/Adam/DolDoc/DocTree.CPP @@ -7,7 +7,7 @@ public Bool DocTreeFind(CDoc *haystack_doc,U8 *needle_path, I64 i=0,k=0; U8 *st1=StrNew(needle_path),*st2=MAlloc(StrLen(needle_path)+1); Bool res=FALSE,unlock_doc=DocLock(haystack_doc); - CDocEntry *doc_e=haystack_doc->root.next; + CDocEntry *doc_e=haystack_doc->head.next; if (_tree_entry) *_tree_entry=haystack_doc; if (_start_indent) *_start_indent=haystack_doc; if (_end_indent) *_end_indent=haystack_doc; @@ -65,7 +65,7 @@ public Bool DocTreeMake(CDoc *doc,U8 *path) *st2=MAlloc(StrLen(path)+1), *st3=StrNew(path); Bool res=TRUE,unlock_doc=DocLock(doc); - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; doc->cur_entry=doc; doc->cur_col=0; while (*st1 && doc_e!=doc) { diff --git a/Adam/DolDoc/DocWidgetWiz.CPP b/Adam/DolDoc/DocWidgetWiz.CPP index 74b1354..665c42f 100644 --- a/Adam/DolDoc/DocWidgetWiz.CPP +++ b/Adam/DolDoc/DocWidgetWiz.CPP @@ -363,22 +363,23 @@ U0 EdInsLink() switch (type) { case LK_PLACE_ANCHOR: if (html_link) - st=MStrPrint("$$AN,\"%Q\",A=\"%Q\",HTML=\"%Q\"$$",tag,link,html_link); + st=MStrPrint("$$AN,\"%$$Q\",A=\"%$$Q\",HTML=\"%$$Q\"$$", + tag,link,html_link); else - st=MStrPrint("$$AN,\"%Q\",A=\"%Q\"$$",tag,link); + st=MStrPrint("$$AN,\"%$$Q\",A=\"%$$Q\"$$",tag,link); break; default: if (html_link) - st=MStrPrint("$$LK%s,\"%Q\",A=\"%Q\",HTML=\"%Q\"$$", + st=MStrPrint("$$LK%s,\"%$$Q\",A=\"%$$Q\",HTML=\"%$$Q\"$$", pop_up_st,tag,link,html_link); else - st=MStrPrint("$$LK%s,\"%Q\",A=\"%Q\"$$",pop_up_st,tag,link); + st=MStrPrint("$$LK%s,\"%$$Q\",A=\"%$$Q\"$$",pop_up_st,tag,link); } } } if (st) { if (quote) - "%Q",st; + "%$$Q",st; else "%s",st; } @@ -540,7 +541,7 @@ U0 EdInsText() if (e->tree) CatPrint(buf,"+TR"); if (e->collapsed) CatPrint(buf,"+C"); st=MStrPrint("%q",e->tag); - "$$TX%s,\"%Q\"",buf,st; + "$$TX%s,\"%$$Q\"",buf,st; Free(st); if (*e->shift_x) ",SX=%s",e->shift_x; @@ -550,12 +551,12 @@ U0 EdInsText() ",SCX=%s",e->scroll_x; if (*e->define_str) { st=MStrPrint("%q",e->define_str); - ",D=\"%Q\"",st; + ",D=\"%$$Q\"",st; Free(st); } if (*e->html_link) { st=MStrPrint("%q",e->html_link); - ",HTML=\"%Q\"",st; + ",HTML=\"%$$Q\"",st; Free(st); } "$$"; @@ -573,7 +574,7 @@ U0 EdInsSong() { CEdSong *e=CAlloc(sizeof(CEdSong)); if (DocForm(e,,,,ctrl_L_footer)) - "$$SO,\"%Q\",A=\"%s\"$$",e->tag,e->song; + "$$SO,\"%$$Q\",A=\"%s\"$$",e->tag,e->song; Free(e); } @@ -586,7 +587,7 @@ U0 EdInsHtml() { CEdHtmlCode *e=CAlloc(sizeof(CEdHtmlCode)); if (DocForm(e,,,,ctrl_L_footer)) - "$$HC,\"%Q\"$$",e->tag; + "$$HC,\"%$$Q\"$$",e->tag; Free(e); } @@ -632,20 +633,20 @@ U0 EdInsMacroMenu(Bool is_macro) if (is_macro) { if (*e->tag) { st=MStrPrint("%q",e->tag); - "$$MA%s,\"%Q\"",buf,st; + "$$MA%s,\"%$$Q\"",buf,st; Free(st); } else "$$MA%s",buf; } else { st=MStrPrint("%q",e->tag); - "$$MU%s,\"%Q\"",buf,st; + "$$MU%s,\"%$$Q\"",buf,st; Free(st); } if (*e->left_exp) ",LE=%s",e->left_exp; if (*e->left_macro) { st=MStrPrint("%q",e->left_macro); - ",LM=\"%Q\"",st; + ",LM=\"%$$Q\"",st; Free(st); } if (*e->shift_x) @@ -692,25 +693,25 @@ U0 EdInsButton() if (*e->tag) { if (e->quote) { st=MStrPrint("%q",e->tag); - "$$$$BT%s,\\\"%Q\\\"",buf,st; + "$$$$BT%s,\\\"%$$Q\\\"",buf,st; Free(st); if (*e->left_exp) ",LE=%s",e->left_exp; if (*e->left_macro) { st=MStrPrint("%q",e->left_macro); - ",LM=\\\"%Q\\\"",st; + ",LM=\\\"%$$Q\\\"",st; Free(st); } "$$$$"; } else { st=MStrPrint("%q",e->tag); - "$$BT%s,\"%Q\"",buf,st; + "$$BT%s,\"%$$Q\"",buf,st; Free(st); if (*e->left_exp) ",LE=%s",e->left_exp; if (*e->left_macro) { st=MStrPrint("%q",e->left_macro); - ",LM=\"%Q\"",st; + ",LM=\"%$$Q\"",st; Free(st); } "$$"; @@ -820,11 +821,11 @@ U0 EdInsData() st=MStrPrint("%q",e->fmt_str); if (e->remalloc) - "$$$$DA%s,A=\\\"%Q\\\"$$$$",buf,st; + "$$$$DA%s,A=\\\"%$$Q\\\"$$$$",buf,st; else if (e->len==DOCE_LEN_DFT) - "$$$$DA%s%s,A=\\\"%Q\\\"$$$$",buf,raw_type,st; + "$$$$DA%s%s,A=\\\"%$$Q\\\"$$$$",buf,raw_type,st; else - "$$$$DA%s,LEN=%d%s,A=\\\"%Q\\\"$$$$",buf,e->len,raw_type,st; + "$$$$DA%s,LEN=%d%s,A=\\\"%$$Q\\\"$$$$",buf,e->len,raw_type,st; Free(st); } } @@ -852,7 +853,7 @@ U0 EdInsCheckBox() StrPrint(raw_type,",RT=%Z",e->type,"ST_RAW_TYPES"); if (e->refresh) CatPrint(buf,"+RD"); st=MStrPrint("%q",e->tag); - "$$$$CB%s%s,\\\"%Q\\\"$$$$",buf,raw_type,st; + "$$$$CB%s%s,\\\"%$$Q\\\"$$$$",buf,raw_type,st; Free(st); } Free(e); @@ -885,9 +886,9 @@ U0 EdInsLst() st1=MStrPrint("%q",e->tag); st2=MStrPrint("%q",e->define_str); if (st1) - "$$$$LS%s%s,\\\"%Q\\\",D=\\\"%Q\\\"$$$$",buf,raw_type,st1,st2; + "$$$$LS%s%s,\\\"%$$Q\\\",D=\\\"%$$Q\\\"$$$$",buf,raw_type,st1,st2; else - "$$$$LS%s%s,D=\\\"%Q\\\"$$$$",buf,raw_type,st2; + "$$$$LS%s%s,D=\\\"%$$Q\\\"$$$$",buf,raw_type,st2; Free(st1); Free(st2); } @@ -940,14 +941,14 @@ U0 EdInsBin(I64 bin_num,I64 type) "bin tag.\n\n",ctrl_L_footer)) { if (*e->bin_ptr_link_file) { if (*e->bin_ptr_link_tag) - "$$%Z,\"%Q\",BI=%d,BP=\"%s,%s\"$$",type,"ST_DOC_CMDS",e->tag,e->bin_num, + "$$%Z,\"%$$Q\",BI=%d,BP=\"%s,%s\"$$",type,"ST_DOC_CMDS",e->tag,e->bin_num, e->bin_ptr_link_file,e->bin_ptr_link_tag; else - "$$%Z,\"%Q\",BI=%d,BP=\"%s,%d\"$$",type,"ST_DOC_CMDS",e->tag,e->bin_num, + "$$%Z,\"%$$Q\",BI=%d,BP=\"%s,%d\"$$",type,"ST_DOC_CMDS",e->tag,e->bin_num, e->bin_ptr_link_file,e->bin_ptr_link_bin_num; } else { if (DocBinFindNum(DocPut,e->bin_num)) - "$$%Z,\"%Q\",BI=%d$$",type,"ST_DOC_CMDS",e->tag,e->bin_num; + "$$%Z,\"%$$Q\",BI=%d$$",type,"ST_DOC_CMDS",e->tag,e->bin_num; else PopUpOk("Invalid Binary Num"); } @@ -972,7 +973,7 @@ U0 EdInsTree() *buf=0; if (!e->collapsed) CatPrint(buf,"-C"); st1=MStrPrint("%q",e->tag); - st2=MStrPrint("$$TR%s,\"%Q\"$$\n$$ID,%d$$*\n$$ID,%d$$", + st2=MStrPrint("$$TR%s,\"%$$Q\"$$\n$$ID,%d$$*\n$$ID,%d$$", buf,st1,e->indent,-e->indent); DocPrintAtomic(DocPut,"%s",st2); Free(st1); @@ -1097,7 +1098,7 @@ U8 *EdSpriteLink(Bool *_pop_up,U8 **_html_link) I64 type=PopUpLinkType(FALSE); *_html_link=NULL; if (type>=0 && GetLink(type,&tag,&link,_pop_up,"e,_html_link)) - res=MStrPrint("\"%Q\",A=\"%Q\"",tag,link); + res=MStrPrint("\"%$$Q\",A=\"%$$Q\"",tag,link); Free(tag); Free(link); return res; @@ -1122,7 +1123,7 @@ U8 *EdSprite(I64 bin_num) if (e->popup) CatPrint(buf,"+PU"); if (e->escape) CatPrint(buf,"+X"); st=MStrPrint("%q",e->exp); - st1=MStrPrint("\"%Q\",LM=\"%Q\"",e->tag,st); + st1=MStrPrint("\"%$$Q\",LM=\"%$$Q\"",e->tag,st); Free(st); } break; @@ -1130,7 +1131,7 @@ U8 *EdSprite(I64 bin_num) e->escape=TRUE; if (DocForm(e,"CEdMenuSprite",,,ctrl_L_footer)) { if (e->escape) CatPrint(buf,"+X"); - st1=MStrPrint("\"%Q\",LE=%s",e->tag,e->exp); + st1=MStrPrint("\"%$$Q\",LE=%s",e->tag,e->exp); } break; case EST_SPRITE_LINK: @@ -1151,7 +1152,7 @@ U8 *EdSprite(I64 bin_num) } if (st1) { if (html_link) - st2=MStrPrint("$$SP%s,%s,HTML=\"%Q\",BI=%d$$",buf,st1,html_link,bin_num); + st2=MStrPrint("$$SP%s,%s,HTML=\"%$$Q\",BI=%d$$",buf,st1,html_link,bin_num); else st2=MStrPrint("$$SP%s,%s,BI=%d$$",buf,st1,bin_num); Free(st1); diff --git a/Adam/DolDoc/MakeDoc.CPP b/Adam/DolDoc/MakeDoc.CPP index 76b586f..fcb5a90 100644 --- a/Adam/DolDoc/MakeDoc.CPP +++ b/Adam/DolDoc/MakeDoc.CPP @@ -25,6 +25,7 @@ public class CDolDocGlbls type_flags_nontag_invisible [(DOCT_NUM_TYPES+63)/64], type_flags_form [(DOCT_NUM_TYPES+63)/64], type_flags_data [(DOCT_NUM_TYPES+63)/64], + type_flags_chk_dup [(DOCT_NUM_TYPES+63)/64], clean_scan_codes [4]; I32 dft_type_flags [DOCT_NUM_TYPES]; } doldoc; diff --git a/Adam/God/GodBible.CPP b/Adam/God/GodBible.CPP index 4f50d57..7b6ef72 100644 --- a/Adam/God/GodBible.CPP +++ b/Adam/God/GodBible.CPP @@ -214,13 +214,14 @@ public U8 *BibleLine2Verse(I64 line,I64 separate_ch=CH_SPACE) return NULL; } -public U0 BibleLines(CDoc *doc_out=NULL,I64 start,I64 lines) +public U0 BibleLines(CDoc *doc_out=NULL,I64 start,I64 lines, + U8 *bible_filename=BIBLE_FILENAME) {//Put N line starting at line M into doc. CDoc *doc_in; CDocEntry *doc_e; if (!doc_out) doc_out=DocPut; - if (doc_out && FileFind(BIBLE_FILENAME)) { - doc_in=DocRead(BIBLE_FILENAME,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); + if (doc_out && FileFind(bible_filename)) { + doc_in=DocRead(bible_filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); DocLineNumGoTo(doc_in,start); //one based doc_e=doc_in->cur_entry; while (lines>0 && doc_e!=doc_in) { @@ -279,7 +280,7 @@ public U0 BibleVerse(CDoc *doc_out=NULL,U8 *verse,I64 lines) public CDoc *BibleDoc() {//Return Bible as DolDoc with trees. CDoc *res=DocRead(BIBLE_FILENAME); - CDocEntry *doc_e=res->root.next,*doc_e1; + CDocEntry *doc_e=res->head.next,*doc_e1; Bool open_chapter=FALSE; U8 *ptr=Define("ST_BIBLE_BOOK_LINES"); I64 book,book_cnt=DefineCnt("ST_BIBLE_BOOK_LINES")-1, diff --git a/Adam/God/GodDoodle.CPP b/Adam/God/GodDoodle.CPP index ea5ffe9..2607798 100644 --- a/Adam/God/GodDoodle.CPP +++ b/Adam/God/GodDoodle.CPP @@ -23,7 +23,7 @@ U0 GodDoodleDraw(CTask *task,CDC *dc) U0 GodDoodleSmooth(I64 num) { - CDC *dc=DCExtract(god.doodle_dc,0,0, + CDC *dc=DCExt(god.doodle_dc,0,0, god.doodle_dc->width-1,god.doodle_dc->height-1); I64 i,x,y,x1,y1,c,histogram[16],best,best_cnt,c_old=god.doodle_dc->color; for (y=0;yheight;y++) diff --git a/Adam/God/HSNotes.TXT b/Adam/God/HSNotes.TXT index 59499a6..8e2e96d 100644 --- a/Adam/God/HSNotes.TXT +++ b/Adam/God/HSNotes.TXT @@ -8,7 +8,7 @@ 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/Downloads/Comics/",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"$ +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"$ 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." @@ -24,7 +24,7 @@ Jesus said, "Forgive us our trespasses as we forgive those who tresspass against God hates complaining. $LK,"Numbers,11:1-35",A="BF:Numbers,11:1-35"$ Food and clothing is all we're to ask for or demand, in fact -- daily bread. $LK,"1 Timothy,6:8",A="BF:1 Timothy,6:8"$ Just think about man in the last 50,000 years mostly living like Native Americans and how God must see us. You need food, clothing and entertainment, money is to get those. Man does not live on bread alone. $LK,"Luke,4:4",A="BF:Luke,4:4"$, $LK,"Amos,8:11-12",A="BF:Amos,8:11-12"$ -God's favorite animals are bears and elephants. They are funny shaped -- I think God must have seen too much starvation over the years. If the purpose of life is to know and love God, then a priest's job is to make everybody know and love God. By saying God likes bears and elephants, I did more toward that end than all priests in history. $LK,"Hosea,6:6",A="BF:Hosea,6:6"$ "It is love that I desire, not sacrifice; knowledge of God, not holocaust." As a former Catholic, that blew my mind. I actually thought love was sacrifice! I was so dumb-founded reading, "it is love that I desire, not sacrifice," that I actually looked-up the word, "love". It means to take delight in. I realized it is demonic pride if you think love means hurting yourself for others. In the Philippians, they got the notion crucifying yourself was a good idea. Similarly, a child thinking about Lent, might conclude, "if it's bad, it must be good." That is, if you think God wants you to hurt yourself to please Him, you are worshiping a demon, not God! God wants you to take delight in His company, get to know Him and praise Him. It is best to separate justice -- sin and punishment -- from relationship with God. Never ask God to change justice into injustice by not punishing. God said to me in an oracle, "Excessive contrician wearisome." He doesn't want to hear confessions. When you pray, be witty and charming and rarely earnest. Enjoy God's company without imposing on Him and don't expect secrets of the Universe. Earnestness in prayer is the root of much evil. Be entertaining. Don't remind Him of sin, LOL. +God's favorite animals are bears and elephants. They are funny shaped -- I think God must have seen too much starvation over the years. If the purpose of life is to know and love God, then a priest's job is to make everybody know and love God. By saying God likes bears and elephants, I did more toward that end than all priests in history. $LK,"Hosea,6:6",A="BF:Hosea,6:6"$ "It is love that I desire, not sacrifice; knowledge of God, not holocaust." As a former Catholic, that blew my mind. I actually thought love was sacrifice! I was so dumb-founded reading, "it is love that I desire, not sacrifice," that I actually looked-up the word, "love". It means to take delight in. I realized it is demonic pride if you think love means hurting yourself for others. In the Philippians, they got the notion crucifying yourself was a good idea. Similarly, a child thinking about Lent, might conclude, "if it's bad, it must be good." That is, if you think God wants you to hurt yourself to please Him, you are worshiping a demon, not God! God wants you to take delight in His company, get to know Him and praise Him. It is best to separate justice -- sin and punishment -- from relationship with God. Never ask God to change justice into injustice by not punishing. God said to me in an oracle, "Excessive contrician wearisome." He doesn't want to hear confessions. When you pray, be witty and charming and rarely earnest. Enjoy God's company without imposing on Him and don't expect secrets of the Universe. Earnestness in prayer is the head of much evil. Be entertaining. Don't remind Him of sin, LOL. God's ways are far above man's ways. Mom said Heaven was a never-ending family reunion. Yikes! A friend said, "Most guy's idea of Heaven would be running around doing things they'd get locked up for on Earth." I wonder how long kids play Grand Theft Auto before getting board. Perhaps, it takes ten years, but they will get bored. Most people are like King Midas. When you realize how silly most notions of Heaven are, you come to appreciate that Earth is not that bad. This is the first step in loving God, the Creator -- praising Creation. My parents spend their retired days watching TV and going to casinos. That's not a good argument for getting extended-play! @@ -56,18 +56,19 @@ 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 $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.) 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, - and conversation. See $LK,"Cain and Abel",A="BF:Genesis,4:1"$.$FG$ + 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$ -Arab/Jews? $FG,4$"Oil funny hopefully"$FG$ +Arab/Jews? $FG,4$"Oil funny hopefully"$FG$ Peace? $FG,4$One Palestinian can ruin it.$FG$ Best religion? $FG,4$One with most new vistas of understanding in$FG$ - $FG,4$a lifetime. One you can level-up the most in.$FG$ + $FG,4$a lifetime -- one you can level-up the most in.$FG$ Chavez blaming the US. $FG,4$"Japan industrious"$FG$ On racism? $FG,4$"Sports"$FG$ On socialism? $FG,4$"pardon_the_French, never_happy, never_enough"$FG$ @@ -92,10 +93,11 @@ Favorite color? $FG,4$$TX,"\"Iceberg\" blue",HTML="https://upload.wikimedia.or Money? $FG,4$"Enough vehemently better"$FG$ $FG,4$"Pride [or] money, choose_one"$FG$ Favorite car? $FG,4$Beamer$FG$ -Favorite soda? $FG,4$Root beer, $TX,"scotch variety",HTML="http://www.root-beer.org/modules.php?name=Brands&rbop=Brand&bid=1965"$.$FG$ +Favorite soda? $FG,4$Root beer, $TX,"scotch variety",HTML="http://www.head-beer.org/modules.php?name=Brands&rbop=Brand&bid=1965"$.$FG$ Homosexuality? $LK,"Matthew,15:11",A="BF:Matthew,15:11"$ -Pets? $FG,4$"homo"$FG$ -Sports? $FG,4$"homo"$FG$ +Pets? $FG,4$"homo" Hates fact too dependent and tame.$FG$ +Sports? $FG,4$"homo" + "Tackle a horse"$FG$ Favorite sport? $FG,4$Hockey$FG$ $TX,"Wreck of the Edmund Fitzgerald",HTML="http://www.youtube.com/watch?v=9vST6hVRj2A"$ $FG,4$"homo"$FG$ Smelling farts $FG,4$"Sodom"$FG$ diff --git a/Adam/Gr/GrBitMap.CPP b/Adam/Gr/GrBitMap.CPP index f56b320..10eaefa 100644 --- a/Adam/Gr/GrBitMap.CPP +++ b/Adam/Gr/GrBitMap.CPP @@ -616,7 +616,7 @@ U8 *GrBitMap1ToBitMap8(U8 *dst,U8 *src,I64 src_size,I64 bkcolor) return dst; } -public CDC *DCExtract(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2, +public CDC *DCExt(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2, CTask *task=NULL) {//Extract new device context rect from device context. CDC *res; diff --git a/Adam/Gr/GrExt.CPP b/Adam/Gr/GrExt.CPP index a093303..c478f2b 100644 --- a/Adam/Gr/GrExt.CPP +++ b/Adam/Gr/GrExt.CPP @@ -2,4 +2,4 @@ extern U8 *GrBitMap4ToBitMap8(U8 *dst,U8 *src,I64 src_size,I64 bkcolor); extern I64 GrBlot3(CDC *dc,I64 x1,I64 y1,I64 z1,CDC *img); extern I64 *Mat4x4New(I64 *src,CTask *mem_task=NULL); -extern U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL); +extern U8 *SpriteQue2Sprite(CSprite *head,I64 *_size=NULL); diff --git a/Adam/Gr/GrGlbls.CPP b/Adam/Gr/GrGlbls.CPP index da7ca41..054e18e 100644 --- a/Adam/Gr/GrGlbls.CPP +++ b/Adam/Gr/GrGlbls.CPP @@ -42,7 +42,7 @@ public class CGrGlbls hide_row,hide_col; } gr; -//See $LK,"RLf_VGA",A="FF:::/Kernel/KStart.CPP,RLf_VGA"$ +//See $LK,"RLf_VGA",A="FF:::/Kernel/KStart16.CPP,RLf_VGA"$ //See $LK,"SysGrInit",A="MN:SysGrInit"$() //Allows consts to be used instead of vars. HashPublic("GR_WIDTH",HTT_DEFINE_STR);; diff --git a/Adam/Gr/GrScreen.CPP b/Adam/Gr/GrScreen.CPP index eecfab8..7a23516 100644 --- a/Adam/Gr/GrScreen.CPP +++ b/Adam/Gr/GrScreen.CPP @@ -16,7 +16,7 @@ U0 GrUpdateTaskODEs(CTask *task) } U0 GrUpdateTaskWin(CTask *task) -{ //Draw core0 task win. +{ //Draw a win. Only core0 tasks have a win. CDC *dc; CD3I64 saved_scroll; sys_task_being_screen_updated=task; diff --git a/Adam/Gr/GrSpritePlot.CPP b/Adam/Gr/GrSpritePlot.CPP index a16e3b6..0c936c2 100644 --- a/Adam/Gr/GrSpritePlot.CPP +++ b/Adam/Gr/GrSpritePlot.CPP @@ -456,7 +456,7 @@ public CDocEntry *DocSprite(CDoc *doc=NULL,U8 *elems,U8 *fmt=NULL) MemCpy(tempb->data,elems,size); tempb->num=doc->cur_bin_num; tempb->use_cnt=1; - QueIns(tempb,doc->bin_root.last); + QueIns(tempb,doc->bin_head.last); if (fmt) st=MStrPrint(fmt,doc->cur_bin_num++); else diff --git a/Adam/Gr/SpriteBitMap.CPP b/Adam/Gr/SpriteBitMap.CPP index d45cac5..c1cd504 100644 --- a/Adam/Gr/SpriteBitMap.CPP +++ b/Adam/Gr/SpriteBitMap.CPP @@ -139,7 +139,7 @@ U0 GrBitMapEdTrimToExtents(CDC **_img,I64 *_xx1,I64 *_yy1, } tr_done: - *_img=DCExtract(img,x1,y1,x2,y2); + *_img=DCExt(img,x1,y1,x2,y2); *_xx1+=x1; *_yy1+=y1; *_xx2+=x2-(img->width-1); *_yy2+=y2-(img->height-1); //not inclusive DCDel(img); @@ -155,7 +155,7 @@ U0 GrBitMapEdAddOutline(CDC *img,I64 width, old_color=img->color; img->color=color; while (width-->0) { - src=DCExtract(img,0,0,img->width-1,img->height-1); + src=DCExt(img,0,0,img->width-1,img->height-1); for (i=0;iheight;i++) for (j=0;jwidth;j++) if (GrPeek(src,j,i)==bkcolor) @@ -181,7 +181,7 @@ U0 GrBitMapEdEtch(CDC *img,I64 width,CColorROPU32 bkcolor) old_color=img->color; img->color=bkcolor; while (width-->0) { - src=DCExtract(img,0,0,img->width-1,img->height-1); + src=DCExt(img,0,0,img->width-1,img->height-1); for (i=0;iheight;i++) for (j=0;jwidth;j++) if (GrPeek(src,j,i)!=bkcolor) @@ -347,7 +347,7 @@ bm_menu: break; } DCDel(undo); - undo=DCExtract(img,0,0,img->width-1,img->height-1); + undo=DCExt(img,0,0,img->width-1,img->height-1); undo->bkcolor=bkcolor; WinMgrSync(2,TRUE); //Let popup close GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img); @@ -612,7 +612,7 @@ bm_menu: y22=y1; } DCDel(clipboard); - clipboard=DCExtract(img,x11-xx1,y11-yy1,x22-xx1,y22-yy1); + clipboard=DCExt(img,x11-xx1,y11-yy1,x22-xx1,y22-yy1); clipboard->bkcolor=bkcolor; if (mode==GBM_DELETE) { img->color=bkcolor; diff --git a/Adam/Gr/SpriteCode.CPP b/Adam/Gr/SpriteCode.CPP index 4ba93e0..36ea582 100644 --- a/Adam/Gr/SpriteCode.CPP +++ b/Adam/Gr/SpriteCode.CPP @@ -204,8 +204,8 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) CSprite *res,g; CColorROPU32 color; U8 *st,*ptr; - CQueD3I32 rootp,*tempp,*tempa1; - CQueMeshTri roott,*tempt,*tempt1; + CQueD3I32 headp,*tempp,*tempa1; + CQueMeshTri headt,*tempt,*tempt1; CQueVectU8 *tempv; MemSet(&g,0,sizeof(CSprite)); switch (type) { @@ -338,11 +338,11 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) case SPT_POLYLINE: Lex(cc); //Skip { g.type=SPT_POLYLINE; - QueInit(&rootp); + QueInit(&headp); while (cc->token=='(') { tempp=CAlloc(sizeof(CQueD3I32)); LexD2I32(cc,&tempp->p); - QueIns(tempp,rootp.last); + QueIns(tempp,headp.last); g.nu.num++; if (cc->token==',') Lex(cc); //Skip , @@ -353,8 +353,8 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) res=MAlloc(size+g.nu.num*sizeof(CD2I32)); MemCpy(res,&g,size); ptr=&res->nu.u; - tempp=rootp.next; - while (tempp!=&rootp) { + tempp=headp.next; + while (tempp!=&headp) { tempa1=tempp->next; MemCpy(ptr,&tempp->p,sizeof(CD2I32)); ptr+=sizeof(CD2I32); @@ -367,11 +367,11 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) case SPT_BSPLINE2_CLOSED: case SPT_BSPLINE3_CLOSED: Lex(cc); //Skip { - QueInit(&rootp); + QueInit(&headp); while (cc->token=='(') { tempp=CAlloc(sizeof(CQueD3I32)); LexD3I32(cc,&tempp->p); - QueIns(tempp,rootp.last); + QueIns(tempp,headp.last); g.nu.num++; if (cc->token==',') Lex(cc); //Skip , @@ -393,8 +393,8 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) } MemCpy(res,&g,size); ptr=&res->nu.u; - tempp=rootp.next; - while (tempp!=&rootp) { + tempp=headp.next; + while (tempp!=&headp) { tempa1=tempp->next; MemCpy(ptr,&tempp->p,sizeof(CD3I32)); ptr+=sizeof(CD3I32); @@ -482,11 +482,11 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) Lex(cc); //Skip , } num1=0; - QueInit(&rootp); + QueInit(&headp); while (cc->token=='(') { tempp=CAlloc(sizeof(CQueD3I32)); LexD3I32(cc,&tempp->p); - QueIns(tempp,rootp.last); + QueIns(tempp,headp.last); num1++; if (cc->token==',') Lex(cc); //Skip , @@ -495,7 +495,7 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) LexExcept(cc,"Expecting ':' at "); Lex(cc); //Skip : num2=0; - QueInit(&roott); + QueInit(&headt); while (cc->token=='(') { tempt=CAlloc(sizeof(CQueMeshTri)); st=LexFirstRem(cc,","); @@ -517,7 +517,7 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) if (cc->token!=')') LexExcept(cc,"Expecting ')' at "); Lex(cc); //Skip ) - QueIns(tempt,roott.last); + QueIns(tempt,headt.last); num2++; if (cc->token==',') Lex(cc); //Skip , @@ -534,16 +534,16 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) res=MAlloc(size+num1*sizeof(CD3I32)+num2*sizeof(CMeshTri)); MemCpy(res,&g,size); ptr=res(U8 *)+size; - tempp=rootp.next; - while (tempp!=&rootp) { + tempp=headp.next; + while (tempp!=&headp) { tempa1=tempp->next; MemCpy(ptr,&tempp->p,sizeof(CD3I32)); ptr+=sizeof(CD3I32); Free(tempp); tempp=tempa1; } - tempt=roott.next; - while (tempt!=&roott) { + tempt=headt.next; + while (tempt!=&headt) { tempt1=tempt->next; MemCpy(ptr,&tempt->start,sizeof(CMeshTri)); ptr+=sizeof(CMeshTri); @@ -561,14 +561,14 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type) public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL) {//Text to sprite. - CSprite root; + CSprite head; U8 *res; Bool okay=TRUE,unlock_doc=DocLock(doc); CCmpCtrl *cc=CmpCtrlNew(,CCF_DONT_FREE_BUF); CHashTable *old_hash_table_lst=cc->htc.hash_table_lst; CHashGeneric *temph; I64 i,size=0; - QueInit(&root); + QueInit(&head); LexAttachDoc(cc,,doc); try { do { @@ -578,7 +578,7 @@ public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL) i=temph->user_data0; cc->htc.hash_table_lst=old_hash_table_lst; if (Lex(cc)=='{') //Skip ident - QueIns(Code2SpriteElem(cc,i),root.last); + QueIns(Code2SpriteElem(cc,i),head.last); } else if (cc->token) LexExcept(cc,"Expecting sprite element type name at "); } while (cc->token); @@ -591,12 +591,12 @@ public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL) DocUnlock(doc); if (okay) { CmpCtrlDel(cc); //TODO: can crash - res=SpriteQue2Sprite(&root,&size); + res=SpriteQue2Sprite(&head,&size); } else { res=NULL; size=0; } if (_size) *_size=size; - QueDel(&root); + QueDel(&head); return res; } diff --git a/Adam/Gr/SpriteEd.CPP b/Adam/Gr/SpriteEd.CPP index d04ca71..934d8c5 100644 --- a/Adam/Gr/SpriteEd.CPP +++ b/Adam/Gr/SpriteEd.CPP @@ -1,14 +1,14 @@ #help_index "Graphics/Sprite;Sprites" -CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *root,I64 elem_num, +CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *head,I64 elem_num, I64 x=0,I64 y=0,CColorROPU32 *_color=NULL,I64 *_width=NULL, I64 *_xx=NULL,I64 *_yy=NULL) { - CSprite *res=root->next; + CSprite *res=head->next; I64 width=1,xx=0,yy=0; CColorROPU32 color=BLACK; if (dc) DCRst(dc); - while (elem_num-->0 && res!=root) { + while (elem_num-->0 && res!=head) { switch (res->type) { case SPT_COLOR: color=res->c.color; @@ -49,13 +49,13 @@ CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *root,I64 elem_num, return res; } -Bool SpritePolyPtPlot(CSprite *root,I64 x,I64 y,I64) +Bool SpritePolyPtPlot(CSprite *head,I64 x,I64 y,I64) { CSprite *tempg=CAlloc(SpriteElemQuedBaseSize(SPT_PT)); tempg->type=SPT_PT; tempg->p.x1=x; tempg->p.y1=y; - QueIns(tempg,root->last); + QueIns(tempg,head->last); return TRUE; } @@ -76,19 +76,19 @@ CSprite *Sprite2SpriteQue(U8 *elems) return res; } -U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL) +U8 *SpriteQue2Sprite(CSprite *head,I64 *_size=NULL) { I64 i,size=sprite_elem_base_sizes[SPT_END]; - CSprite *tempg=root->next; + CSprite *tempg=head->next; U8 *res,*dst; - while (tempg!=root) { + while (tempg!=head) { size+=SpriteElemSize(tempg); tempg=tempg->next; } if (_size) *_size=size; res=dst=MAlloc(size); - tempg=root->next; - while (tempg!=root) { + tempg=head->next; + while (tempg!=head) { i=SpriteElemSize(tempg); MemCpy(dst,&tempg->start,i); dst+=i; @@ -98,25 +98,25 @@ U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL) return res; } -U0 SpriteEdUpdate(CDoc *doc,CDocEntry *doc_ce,CSprite *root) +U0 SpriteEdUpdate(CDoc *doc,CDocEntry *doc_ce,CSprite *head) { CDocBin *tempb=doc_ce->bin_data; I64 size; Bool unlock=DocLock(doc); Free(tempb->data); - tempb->data=SpriteQue2Sprite(root,&size); + tempb->data=SpriteQue2Sprite(head,&size); tempb->size=size; if (unlock) DocUnlock(doc); } -U0 SpriteSetOrigin(CSprite *root,I64 dx,I64 dy,I64 dz) +U0 SpriteSetOrigin(CSprite *head,I64 dx,I64 dy,I64 dz) { I64 i; I32 *ptr; CD3I32 *p; - CSprite *tempg=root->next; - while (tempg!=root) { + CSprite *tempg=head->next; + while (tempg!=head) { if (tempg->sel) switch (tempg->type) { case SPT_ARROW: @@ -372,14 +372,14 @@ CSprite *SpriteTransformBitMap(I64 *r,CSprite *tempg) return tempg1; } -U0 SpriteTransform(I64 *r,CSprite *root) +U0 SpriteTransform(I64 *r,CSprite *head) { I64 i,j,k,num, x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3; I32 *ptr; CD3I32 *p; - CSprite *tempg=root->next,root2,*tempg1,*tempg2,*tempg3; - while (tempg!=root) { + CSprite *tempg=head->next,head2,*tempg1,*tempg2,*tempg3; + while (tempg!=head) { if (tempg->sel) switch (tempg->type) { case SPT_WIDTH: @@ -450,7 +450,7 @@ U0 SpriteTransform(I64 *r,CSprite *root) } break; case SPT_POLYPT: - QueInit(&root2); + QueInit(&head2); x=tempg->npu.x; y=tempg->npu.y; z=0; x1=x; y1=y; z1=z; //unrotated cur coordinates Mat4x4MulXYZ(r,&x,&y,&z); @@ -464,14 +464,14 @@ U0 SpriteTransform(I64 *r,CSprite *root) y1+=gr_y_offsets[j]; x=x1; y=y1; z=z1; Mat4x4MulXYZ(r,&x,&y,&z); - Line(&root2,x3-x2,y3-y2,0,x-x2,y-y2,0,&SpritePolyPtPlot); + Line(&head2,x3-x2,y3-y2,0,x-x2,y-y2,0,&SpritePolyPtPlot); x3=x; y3=y; z3=z; } num=0; - tempg1=root2.next; + tempg1=head2.next; x3=0; y3=0; z3=0; - while (tempg1!=&root2) { + while (tempg1!=&head2) { tempg2=tempg1->next; if (tempg1->p.x1==x3 && tempg1->p.y1==y3) { QueRem(tempg1); @@ -490,8 +490,8 @@ U0 SpriteTransform(I64 *r,CSprite *root) ptr=&tempg3->npu.u; x3=0;y3=0; z3=0; i=0; - tempg1=root2.next; - while (tempg1!=&root2) { + tempg1=head2.next; + while (tempg1!=&head2) { tempg2=tempg1->next; BFieldOrU32(ptr,i, polypt_map[SignI64(tempg1->p.x1-x3)+1+ @@ -553,12 +553,12 @@ U0 SpriteTransform(I64 *r,CSprite *root) } } -I64 SpriteQueSelCnt(CSprite *root,Bool val=TRUE) +I64 SpriteQueSelCnt(CSprite *head,Bool val=TRUE) { I64 res=0; - CSprite *tempg=root->next; + CSprite *tempg=head->next; val=ToBool(val); - while (tempg!=root) { + while (tempg!=head) { if (ToBool(tempg->sel)==val) res++; tempg=tempg->next; @@ -566,11 +566,11 @@ I64 SpriteQueSelCnt(CSprite *root,Bool val=TRUE) return res; } -I64 SpriteQueSelAll(CSprite *root,Bool val=TRUE) +I64 SpriteQueSelAll(CSprite *head,Bool val=TRUE) { I64 res=0; - CSprite *tempg=root->next; - while (tempg!=root) { + CSprite *tempg=head->next; + while (tempg!=head) { tempg->sel=val; res++; tempg=tempg->next; @@ -578,17 +578,17 @@ I64 SpriteQueSelAll(CSprite *root,Bool val=TRUE) return res; } -CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num) +CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *head,I64 *_cur_elem_num) {//For the side-bar CSprite *res=CAlloc(sizeof(CSprite)),*tempg; - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; Bool found=FALSE; I64 num=0; QueInit(res); while (doc_e!=doc) { if (doc_e->type_u8==DOCT_MENU_VAL && doc_e->left_exp>=0) { - tempg=SpriteSetSettings(,root,doc_e->left_exp); - if (tempg!=root) { + tempg=SpriteSetSettings(,head,doc_e->left_exp); + if (tempg!=head) { tempg=MAllocIdent(tempg); tempg->sel=Bt(&doc_e->type,DOCEt_SEL); if (*_cur_elem_num==doc_e->left_exp) { @@ -603,12 +603,12 @@ CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num) } if (!found) *_cur_elem_num=num; - QueDel(root); - Free(root); + QueDel(head); + Free(head); return res; } -U0 SpriteSideBarPickNew(CDoc *doc,CSprite *root,I64 old_num) +U0 SpriteSideBarPickNew(CDoc *doc,CSprite *head,I64 old_num) { CSprite *tempg; CDocEntry *doc_cur_e=NULL,*doc_e; @@ -617,15 +617,15 @@ U0 SpriteSideBarPickNew(CDoc *doc,CSprite *root,I64 old_num) DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Sprite SideBar\"$$\n" "$$LK+PU+CX,\"Click for Help\"," "A=\"FI:::/Doc/SpriteSideBar.TXT.Z\"$$\n\n"); - tempg=root->next; - while (tempg!=root) { + tempg=head->next; + while (tempg!=head) { st=SpriteElem2Summary(tempg); if (cur_elem_num==old_num) { DocPrint(doc,"$$LTRED$$"); doc_e=doc_cur_e=DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++); } else { DocPrint(doc,"$$LTBLUE$$"); - doc_e=DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++); + doc_e=DocPrint(doc,"$$MU-UL,\"%$$Q\",LE=%d$$\n",st,cur_elem_num++); } BEqu(&doc_e->de_flags,DOCEf_SEL,tempg->sel); BEqu(&doc_e->type,DOCEt_SEL,tempg->sel); @@ -659,29 +659,29 @@ U0 SpriteSideBarTask2(CTask *grand_parent) } } -U0 SpriteSideBarTask(CTask *parent,CSprite **_root,I64 *_cur_elem_num) +U0 SpriteSideBarTask(CTask *parent,CSprite **_head,I64 *_cur_elem_num) { CDocEntry *doc_e; CDoc *doc=DocPut; Spawn(&SpriteSideBarTask2,parent,"CSpriteTask",,Fs); doc->flags|=DOCF_MIN_SIZE|DOCF_FORM; while (TRUE) { - SpriteSideBarPickNew(doc,*_root,*_cur_elem_num); + SpriteSideBarPickNew(doc,*_head,*_cur_elem_num); DocHighlightCursor(,doc); View; doc_e=doc->cur_entry; if (doc_e->type_u8==DOCT_MENU_VAL) *_cur_elem_num=doc_e->left_exp; - *_root=SpriteSideBar2SpriteQue(doc,*_root,_cur_elem_num); + *_head=SpriteSideBar2SpriteQue(doc,*_head,_cur_elem_num); DocClear(doc); } } -Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num) +Bool SpriteEdText(CSprite **_head,I64 *_cur_elem_num) { Bool res; - CSprite *root=*_root; - U8 *elems=SpriteQue2Sprite(root); + CSprite *head=*_head; + U8 *elems=SpriteQue2Sprite(head); CDoc *doc=DocNew,*doc2,*old_put=DocPut; StrPrint(doc->filename.name,"AI:0x%X",doc); DocPrint(doc,"//$$PURPLE$$$$TX+CX,\"Sprite Edit as Text\"$$$$FG$$\n" @@ -696,11 +696,11 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num) if (elems=Code2Sprite(doc)) { DocDel(doc2); Fs->put_doc=old_put; - QueDel(root); - Free(root); - root=Sprite2SpriteQue(elems); + QueDel(head); + Free(head); + head=Sprite2SpriteQue(elems); Free(elems); - *_cur_elem_num=QueCnt(root); //TODO: Might want to improve this. + *_cur_elem_num=QueCnt(head); //TODO: Might want to improve this. break; } else { PopUpPrint("DocEd(0x%X,0x%X);",doc2,0); @@ -711,7 +711,7 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num) break; } DocDel(doc); - if (_root) *_root=root; + if (_head) *_head=head; return res; } @@ -738,7 +738,7 @@ U0 GrInit3() } GrInit3; -I64 PopUpSpriteEd(CSprite **_root,I64 *_cur_elem_num) +I64 PopUpSpriteEd(CSprite **_head,I64 *_cur_elem_num) { U8 *st; CTask *pu_task; @@ -760,12 +760,12 @@ I64 PopUpSpriteEd(CSprite **_root,I64 *_cur_elem_num) "$$PURPLE$$$$MU-UL,\"+] Sprite Main Menu\",LE=GED_MAIN_MENU$$$$LTBLUE$$\n" "$$MU-UL,\"Exit Sprite\",LE=GED_EXIT$$\n" "$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$"); - st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_root,_cur_elem_num); + st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_head,_cur_elem_num); PopUp(st,NULL,&pu_task); Free(st); i=PopUpMenu(doc); if (TaskValidate(pu_task)) { - *_root=SpriteSideBar2SpriteQue(DocPut(pu_task),*_root,_cur_elem_num); + *_head=SpriteSideBar2SpriteQue(DocPut(pu_task),*_head,_cur_elem_num); Kill(pu_task); } DocDel(doc); @@ -784,14 +784,14 @@ class CEdSprite I32 *x,*y,*z,*w,*h; }; -U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root) +U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *head) { I64 i,num=0; I32 *ptr; CD3I32 *p; CEdSprite *temppe; CSprite *tempg=elems-offset(CSprite.start); - QueInit(root); + QueInit(head); while (tempg->type) { switch (tempg->type) { case SPT_ELLIPSE: @@ -805,7 +805,7 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root) temppe->w=&tempg->pwha.width; temppe->h=&tempg->pwha.height; temppe->num=num; - QueIns(temppe,root->last); + QueIns(temppe,head->last); goto pq_x1_y1; case SPT_RECT: case SPT_ROTATED_RECT: @@ -819,7 +819,7 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root) temppe->x=&tempg->pp.x2; temppe->y=&tempg->pp.y2; temppe->num=num; - QueIns(temppe,root->last); + QueIns(temppe,head->last); case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: @@ -836,7 +836,7 @@ pq_x1_y1: temppe->x=&tempg->p.x1; temppe->y=&tempg->p.y1; temppe->num=num; - QueIns(temppe,root->last); + QueIns(temppe,head->last); break; case SPT_SHIFT: x+=tempg->p.x1; @@ -852,7 +852,7 @@ pq_x1_y1: temppe->x=&ptr[i<<1]; temppe->y=&ptr[i<<1+1]; temppe->num=num; - QueIns(temppe,root->last); + QueIns(temppe,head->last); } break; case SPT_POLYPT: @@ -863,7 +863,7 @@ pq_x1_y1: temppe->x=&tempg->npu.x; temppe->y=&tempg->npu.y; temppe->num=num; - QueIns(temppe,root->last); + QueIns(temppe,head->last); break; case SPT_BSPLINE2: case SPT_BSPLINE3: @@ -879,7 +879,7 @@ pq_x1_y1: temppe->y=&p[i].y; temppe->z=&p[i].z; temppe->num=num; - QueIns(temppe,root->last); + QueIns(temppe,head->last); } break; case SPT_MESH: @@ -893,7 +893,7 @@ pq_x1_y1: temppe->y=&tempg->pmu.y; temppe->z=&tempg->pmu.z; temppe->num=num; - QueIns(temppe,root->last); + QueIns(temppe,head->last); break; } tempg(U8 *)+=SpriteElemSize(tempg); @@ -901,15 +901,15 @@ pq_x1_y1: } } -U0 SpriteCtrlPtsDraw(CDC *dc,CEdSprite *root) +U0 SpriteCtrlPtsDraw(CDC *dc,CEdSprite *head) { I64 x,y; CEdSprite *temppe; WinMgrSync; DCFill(dc); if (Blink(20)) { - temppe=root->next; - while (temppe!=root) { + temppe=head->next; + while (temppe!=head) { switch (temppe->type) { case GSPT_SIMPLE_PT: x=*temppe->x+temppe->xx; @@ -932,11 +932,11 @@ U0 SpriteCtrlPtsDraw(CDC *dc,CEdSprite *root) } } -U0 SpriteCtrlPtsMove(CEdSprite *root,I64 dx,I64 dy) +U0 SpriteCtrlPtsMove(CEdSprite *head,I64 dx,I64 dy) { CEdSprite *temppe; - temppe=root->next; - while (temppe!=root) { + temppe=head->next; + while (temppe!=head) { if (temppe->flags&GSPF_SEL) switch (temppe->type) { case GSPT_SIMPLE_PT: @@ -957,13 +957,13 @@ Bool SpriteShiftPts(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; Bool res=TRUE; CDC *dc=DCAlias; - CEdSprite root,*temppe,*best_pe; + CEdSprite head,*temppe,*best_pe; - SpritePtQueNew(elems,x,y,&root); + SpritePtQueNew(elems,x,y,&head); cur_elem_num=0; - if (root.next!=&root) { + if (head.next!=&head) { while (TRUE) { - SpriteCtrlPtsDraw(dc,&root); //has WinMgrSync + SpriteCtrlPtsDraw(dc,&head); //has WinMgrSync switch (msg_code=ScanMsg(&a1,&a2, 1<type) { case GSPT_SIMPLE_PT: dd=SqrI64(*temppe->x+temppe->xx-xx)+ @@ -995,7 +995,7 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) case GED_SHIFT_RECTS: xx2=xx=a1; yy2=yy=a2; while (TRUE) { - SpriteCtrlPtsDraw(dc,&root); + SpriteCtrlPtsDraw(dc,&head); dc->color=ROPF_DITHER+WHITE<<16+RED; GrBorder(dc,xx,yy,xx2,yy2); if (msg_code=ScanMsg(&a1,&a2,1<type) { case GSPT_SIMPLE_PT: if (xx<=*temppe->x+temppe->xx<=xx2 && @@ -1024,7 +1024,7 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode) temppe=temppe->next; } do { - SpriteCtrlPtsDraw(dc,&root); + SpriteCtrlPtsDraw(dc,&head); msg_code=ScanMsg(&a1,&a2,1<flags&=~GSPF_SEL; temppe=temppe->next; } @@ -1067,7 +1067,7 @@ gs_key: } } gs_done: - QueDel(&root,TRUE); + QueDel(&head,TRUE); } DCFill(dc); DCDel(dc); @@ -1077,33 +1077,33 @@ gs_done: } I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y, - CSprite **_root,I64 *_cur_elem_num) + CSprite **_head,I64 *_cur_elem_num) { CDocEntry *doc_e2; CDocBin *tempb; Bool unlock; I64 i,r[16],msg_code,a1,a2,xx,yy, old_de_flags; - CSprite *cur_elem,*root2,*next,*last,*tempg,*insert_pt; + CSprite *cur_elem,*head2,*next,*last,*tempg,*insert_pt; old_de_flags=doc_ce->de_flags; tempb=doc_ce->bin_data; DocUnlock(doc); - SpriteQueSelAll(*_root,FALSE); + SpriteQueSelAll(*_head,FALSE); do { if (winmgr.fps<10) doc_ce->de_flags|=DOCEF_DONT_DRAW; StrCpy(Fs->task_title,"Sprite Edit Menu"); - i=PopUpSpriteEd(_root,_cur_elem_num); - SpriteEdUpdate(doc,doc_ce,*_root); + i=PopUpSpriteEd(_head,_cur_elem_num); + SpriteEdUpdate(doc,doc_ce,*_head); if (0<=itask_title,DefineSub(i,"ST_SPRITE_ED_MENU")); switch (i) { case GED_SEL_UNSEL_ALL: - if (!SpriteQueSelCnt(*_root)) - SpriteQueSelAll(*_root); + if (!SpriteQueSelCnt(*_head)) + SpriteQueSelAll(*_head); else - SpriteQueSelAll(*_root,FALSE); + SpriteQueSelAll(*_head,FALSE); break; case GED_SEL: case GED_UNSEL: @@ -1115,7 +1115,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y, WinMgrSync(2); if (msg_code==MSG_IP_L_DOWN) { *_cur_elem_num=doc->nearest_sprite_elem_num; - cur_elem=SpriteSetSettings(,*_root,*_cur_elem_num); + cur_elem=SpriteSetSettings(,*_head,*_cur_elem_num); cur_elem->sel=ToBool(i==GED_SEL); GetMsg(,,1<cur_sprite=NULL; break; case GED_SET_ORIGIN: - SpriteQueSelAll(*_root); + SpriteQueSelAll(*_head); doc_ce->de_flags=old_de_flags; GetMsg(&a1,&a2,1<de_flags=old_de_flags; GetMsg(&a1,&a2,1<de_flags=old_de_flags; if (SpriteShiftPts(tempb->data,x,y,_cur_elem_num,i)) { - QueDel(*_root); - Free(*_root); - *_root=Sprite2SpriteQue(tempb->data); + QueDel(*_head); + Free(*_head); + *_head=Sprite2SpriteQue(tempb->data); } else - SpriteEdUpdate(doc,doc_ce,*_root); + SpriteEdUpdate(doc,doc_ce,*_head); break; case GED_TRANSFORM_SEL: - if (!SpriteQueSelCnt(*_root)) - SpriteQueSelAll(*_root); + if (!SpriteQueSelCnt(*_head)) + SpriteQueSelAll(*_head); if (PopUpTransform(r)) { - SpriteTransform(r,*_root); - SpriteEdUpdate(doc,doc_ce,*_root); + SpriteTransform(r,*_head); + SpriteEdUpdate(doc,doc_ce,*_head); } - if (!SpriteQueSelCnt(*_root,FALSE)) - SpriteQueSelAll(*_root,FALSE); + if (!SpriteQueSelCnt(*_head,FALSE)) + SpriteQueSelAll(*_head,FALSE); break; case GED_SHIFT_SUB_ORIGIN: doc_ce->de_flags=old_de_flags; - insert_pt=SpriteSetSettings(,*_root,*_cur_elem_num); + insert_pt=SpriteSetSettings(,*_head,*_cur_elem_num); tempg=CAlloc(SpriteElemQuedBaseSize(SPT_SHIFT)); tempg->type=SPT_SHIFT; tempg->p.x1=0; @@ -1186,7 +1186,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y, 1<p.x1=a1-xx; tempg->p.y1=a2-yy; - SpriteEdUpdate(doc,doc_ce,*_root); + SpriteEdUpdate(doc,doc_ce,*_head); } while (msg_code!=MSG_IP_L_UP); *_cur_elem_num+=1; break; @@ -1197,36 +1197,36 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y, "'Insert shift sub-origin' after picking the\n" "element to insert before. Or,\n" "use 'shift points'.\n"); - insert_pt=SpriteSetSettings(,*_root,*_cur_elem_num); + insert_pt=SpriteSetSettings(,*_head,*_cur_elem_num); unlock=DocLock(sys_clipboard_doc); - doc_e2=sys_clipboard_doc->root.next; + doc_e2=sys_clipboard_doc->head.next; while (doc_e2!=sys_clipboard_doc) { if (doc_e2->type_u8==DOCT_SPRITE) { - root2=Sprite2SpriteQue(doc_e2->bin_data->data); - if (root2->next!=root2) { - tempg=root2->next; - while (tempg!=root2) { + head2=Sprite2SpriteQue(doc_e2->bin_data->data); + if (head2->next!=head2) { + tempg=head2->next; + while (tempg!=head2) { *_cur_elem_num+=1; tempg=tempg->next; } - next=root2->next; - last=root2->last; + next=head2->next; + last=head2->last; insert_pt->last->next=next; next->last=insert_pt->last; insert_pt->last=last; last->next=insert_pt; } - Free(root2); + Free(head2); } doc_e2=doc_e2->next; } if (unlock) DocUnlock(sys_clipboard_doc); - SpriteEdUpdate(doc,doc_ce,*_root); + SpriteEdUpdate(doc,doc_ce,*_head); break; case GED_TEXT_ED: - if (SpriteEdText(_root,_cur_elem_num)) - SpriteEdUpdate(doc,doc_ce,*_root); + if (SpriteEdText(_head,_cur_elem_num)) + SpriteEdUpdate(doc,doc_ce,*_head); break; } } diff --git a/Adam/Gr/SpriteMain.CPP b/Adam/Gr/SpriteMain.CPP index 155d8b0..ef4bd8e 100644 --- a/Adam/Gr/SpriteMain.CPP +++ b/Adam/Gr/SpriteMain.CPP @@ -6,7 +6,7 @@ #define SPT_ED_MENU -5 #define SPT_EXIT -6 -I64 PopUpSpriteMain(CSprite **_root,I64 *_cur_elem_num, +I64 PopUpSpriteMain(CSprite **_head,I64 *_cur_elem_num, CDoc *_doc,CDocEntry *_doc_e) { CTask *pu_task; @@ -60,12 +60,12 @@ I64 PopUpSpriteMain(CSprite **_root,I64 *_cur_elem_num, "$$MU-UL,\"Exit Sprite\",LE=SPT_EXIT$$\n" "$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$\n" "\nRight-Click to get back to this menu."); - st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_root,_cur_elem_num); + st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_head,_cur_elem_num); PopUp(st,NULL,&pu_task); Free(st); i=PopUpMenu(doc); if (TaskValidate(pu_task)) { - *_root=SpriteSideBar2SpriteQue(DocPut(pu_task),*_root,_cur_elem_num); + *_head=SpriteSideBar2SpriteQue(DocPut(pu_task),*_head,_cur_elem_num); Kill(pu_task); } Free(_doc_e->tag); @@ -269,7 +269,7 @@ CSprite *SMScreenBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2, WinMgrSync(2,TRUE); dc3=DCScreenCapture; - img=DCExtract(dc3,Fs->pix_left+Fs->scroll_x+xx1,Fs->pix_top+Fs->scroll_y+yy1, + img=DCExt(dc3,Fs->pix_left+Fs->scroll_x+xx1,Fs->pix_top+Fs->scroll_y+yy1, Fs->pix_left+Fs->scroll_x+xx2-1,Fs->pix_top+Fs->scroll_y+yy2-1); if (eletype==SPT_INS_TRANSPARENT_SCREEN_BITMAP) DCColorChg(img,bm_bkcolor); @@ -405,9 +405,9 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2; I32 *ptr; CD3I32 *p; - CSprite *res,*tempg,*tempg1,root2; + CSprite *res,*tempg,*tempg1,head2; - QueInit(&root2); + QueInit(&head2); do { do { dc->color=color&COLORROP_NO_ROP0_MASK; @@ -427,7 +427,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, res->type=SPT_PT; res->p.x1=x2-x; res->p.y1=y2-y; - QueIns(res,root2.last); + QueIns(res,head2.last); x1=x2;y1=y2; num++; } @@ -438,7 +438,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, if (num>1) { res=CAlloc(SpriteElemQuedBaseSize(SPT_POLYLINE)+num*sizeof(CD2I32)); ptr=&res->nu.u; - tempg1=root2.next; + tempg1=head2.next; for (i=0;inext; ptr[i<<1]=tempg1->p.x1; @@ -449,7 +449,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, res->type=SPT_POLYLINE; res->nu.num=num; } else { - tempg1=root2.next; + tempg1=head2.next; for (i=0;inext; Free(tempg1); @@ -465,7 +465,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, if (num>2) { res=CAlloc(SpriteElemQuedBaseSize(eletype)+num*sizeof(CD3I32)); p=&res->nu.u; - tempg1=root2.next; + tempg1=head2.next; for (i=0;inext; p[i].x=tempg1->p.x1; @@ -476,7 +476,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2, res->type=eletype; res->nu.num=num; } else { - tempg1=root2.next; + tempg1=head2.next; for (i=0;inext; Free(tempg1); @@ -493,23 +493,23 @@ CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) { I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2,x3,y3; I32 *ptr; - CSprite *res,*tempg,*tempg1,root2; + CSprite *res,*tempg,*tempg1,head2; - QueInit(&root2); + QueInit(&head2); x3=a1-x; y3=a2-y; dc->color=color&COLORROP_NO_ROP0_MASK; do { msg_code=GetMsg(&a1,&a2,1<next; if (res->p.x1==x1 && res->p.y1==y1) { QueRem(res); @@ -528,8 +528,8 @@ CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) ptr=&res->npu.u; x1=x3; y1=y3; i=0; - tempg1=root2.next; - while (tempg1!=&root2) { + tempg1=head2.next; + while (tempg1!=&head2) { tempg=tempg1->next; BFieldOrU32(ptr,i,polypt_map[SignI64(tempg1->p.x1-x1)+1+ 3*(SignI64(tempg1->p.y1-y1)+1)]); @@ -544,11 +544,11 @@ CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color) return res; } -U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,CDC *dc, +U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head,CDC *dc, I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color,I64 *_cur_elem_num, I64 old_de_flags) { - CSprite *tempg,*insert_pt=SpriteSetSettings(,root,*_cur_elem_num); + CSprite *tempg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num); I64 msg_code,x1,y1; U8 *st; doc_ce->de_flags|=DOCEF_DONT_DRAW; @@ -573,13 +573,13 @@ U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,CDC *dc, tempg->ps.y1=y1-y; StrCpy(tempg->ps.st,st); QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); *_cur_elem_num+=1; } Free(st); } -I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root, +I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head, CDC *dc,I64 xx,I64 yy,I64 a1,I64 a2,CColorROPU32 bm_bkcolor, Bool sel,I64 xx1=0,I64 yy1=0,I64 xx2=0,I64 yy2=0,I64 *_cur_elem_num) { @@ -587,7 +587,7 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root, CSprite *tempg,*tempg1,*insert_pt; CDC *img; - insert_pt=SpriteSetSettings(,root,*_cur_elem_num,xx,yy,,,&x,&y); + insert_pt=SpriteSetSettings(,head,*_cur_elem_num,xx,yy,,,&x,&y); x+=xx; y+=yy; if (sel) { @@ -627,15 +627,15 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root, img->color=bm_bkcolor; GrRect(img,0,0,tempg->pwhu.width,tempg->pwhu.height); tempg1=insert_pt; - if (tempg1==root || tempg1->type!=SPT_BITMAP) { - SpriteSetSettings(img,root,0,-(xx1-x),-(yy1-y)); + if (tempg1==head || tempg1->type!=SPT_BITMAP) { + SpriteSetSettings(img,head,0,-(xx1-x),-(yy1-y)); x=xx; y=yy; Sprite3(img,-(xx1-x),-(yy1-y),0,doc_ce->bin_data->data); - QueDel(root); - insert_pt=root->next=root->last=root; + QueDel(head); + insert_pt=head->next=head->last=head; *_cur_elem_num=1; } else { - SpriteSetSettings(img,root,*_cur_elem_num,-(xx1-x),-(yy1-y)); + SpriteSetSettings(img,head,*_cur_elem_num,-(xx1-x),-(yy1-y)); Sprite3(img,-(xx1-x),-(yy1-y),0,&tempg1->start,TRUE); insert_pt=tempg1->next; QueRem(tempg1); @@ -660,20 +660,20 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root, } QueIns(tempg,insert_pt->last); DCDel(img); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); return i; } -U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,I64 *_cur_elem_num) +U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,I64 *_cur_elem_num) { - CSprite *tempg,*insert_pt=SpriteSetSettings(,root,*_cur_elem_num), + CSprite *tempg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num), *tempg1=insert_pt; CD3I32 *p; I64 i,size,x1,y1,z1; I32 *mesh,*old_mesh; - if (tempg1!=root && tempg1->type==SPT_MESH) + if (tempg1!=head && tempg1->type==SPT_MESH) old_mesh=&tempg1->mu.vertex_cnt; - else if (tempg1!=root && tempg1->type==SPT_SHIFTABLE_MESH) { + else if (tempg1!=head && tempg1->type==SPT_SHIFTABLE_MESH) { x1=tempg1->pmu.x; y1=tempg1->pmu.y; z1=tempg1->pmu.z; @@ -692,12 +692,12 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,I64 *_cur_elem_num) MemCpy(&tempg->mu.vertex_cnt,mesh,size); Free(mesh); QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); if (old_mesh) { insert_pt=tempg; QueRem(tempg1); Free(tempg1); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); } else *_cur_elem_num+=1; } else if (old_mesh && tempg1->type==SPT_SHIFTABLE_MESH) { @@ -713,15 +713,15 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,I64 *_cur_elem_num) } } -U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root, +U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head, I64 x,I64 y,I64 a1,I64 a2,I64 *_cur_elem_num) { - CSprite *tempg,*insert_pt=SpriteSetSettings(,root,*_cur_elem_num), + CSprite *tempg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num), *tempg1=insert_pt; CD3I32 *p; I64 i,size,z,x1,y1,z1; I32 *mesh,*old_mesh; - if (tempg1!=root && tempg1->type==SPT_MESH) { + if (tempg1!=head && tempg1->type==SPT_MESH) { z=0; x1=-(a1-x); y1=-(a2-y); @@ -733,7 +733,7 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root, p->z+=z1; } old_mesh=&tempg1->mu.vertex_cnt; - } else if (tempg1!=root && tempg1->type==SPT_SHIFTABLE_MESH) { + } else if (tempg1!=head && tempg1->type==SPT_SHIFTABLE_MESH) { z=-tempg1->pmu.z; x1=tempg1->pmu.x-(a1-x); y1=tempg1->pmu.y-(a2-y); @@ -758,12 +758,12 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root, tempg->pmu.y=a2-y; tempg->pmu.z=-z; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); if (old_mesh) { insert_pt=tempg; QueRem(tempg1); Free(tempg1); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); } else *_cur_elem_num+=1; } else if (old_mesh && tempg1->type==SPT_SHIFTABLE_MESH) { @@ -813,7 +813,7 @@ I64 SpriteMainEd(CDoc *doc) 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; - CSprite *root,*tempg,*insert_pt; + CSprite *head,*tempg,*insert_pt; CDC *dc=DCAlias(,Fs),*dc2=DCAlias(,sys_winmgr_task),*dc3; U8 *old_task_title=StrNew(Fs->task_title); @@ -821,13 +821,13 @@ I64 SpriteMainEd(CDoc *doc) AutoComplete; WinMgrSync(2,TRUE); dc2->flags|=DCF_ON_TOP; - root=Sprite2SpriteQue(doc_ce->bin_data->data); - cur_elem_num=QueCnt(root); + head=Sprite2SpriteQue(doc_ce->bin_data->data); + cur_elem_num=QueCnt(head); xx=(doc_ce->x+doc_ce->max_col-doc->line_start_col)*FONT_WIDTH; yy=(doc_ce->y-doc->top_line_num)*FONT_HEIGHT; while (TRUE) { - insert_pt=SpriteSetSettings(dc,root,cur_elem_num,xx,yy, + insert_pt=SpriteSetSettings(dc,head,cur_elem_num,xx,yy, &color,&width,&x,&y); x+=xx; y+=yy; DCFill; @@ -841,13 +841,13 @@ I64 SpriteMainEd(CDoc *doc) Fs->title_src =old_title_src; xx-=StrLen(doc_ce->tag)*FONT_WIDTH; - eletype=PopUpSpriteMain(&root,&cur_elem_num,doc,doc_ce); + eletype=PopUpSpriteMain(&head,&cur_elem_num,doc,doc_ce); xx+=StrLen(doc_ce->tag)*FONT_WIDTH; - insert_pt=SpriteSetSettings(dc,root,cur_elem_num,x,y, + insert_pt=SpriteSetSettings(dc,head,cur_elem_num,x,y, &color,&width,&x,&y); x+=xx; y+=yy; - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); switch (eletype) { case SPT_FLOOD_FILL: case SPT_FLOOD_FILL_NOT: @@ -877,7 +877,7 @@ I64 SpriteMainEd(CDoc *doc) tempg->type=SPT_COLOR; tempg->c.color=color; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; } doc_ce->de_flags=old_de_flags; @@ -892,14 +892,14 @@ I64 SpriteMainEd(CDoc *doc) tempg->type=SPT_DITHER_COLOR; tempg->d.dither_color=color.c0.color|color.c1.color<<8; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; } doc_ce->de_flags=old_de_flags; eletype=SPT_MENU; break; case SPT_ED_MENU: - switch (SpriteEd(doc,doc_ce,x,y,&root,&cur_elem_num)) { + switch (SpriteEd(doc,doc_ce,x,y,&head,&cur_elem_num)) { case GE_ABORT: eletype=DOCM_CANCEL; break; case GE_EXIT: eletype=SPT_EXIT; break; case GE_CONT: eletype=SPT_MENU; break; @@ -907,7 +907,7 @@ I64 SpriteMainEd(CDoc *doc) break; case SPT_MESH: doc_ce->de_flags|=DOCEF_DONT_DRAW; - SMMesh(doc,doc_ce,root,&cur_elem_num); + SMMesh(doc,doc_ce,head,&cur_elem_num); doc_ce->de_flags=old_de_flags; eletype=SPT_MENU; break; @@ -928,7 +928,7 @@ I64 SpriteMainEd(CDoc *doc) "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,root,x,y,a1,a2,&cur_elem_num); + SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num); eletype=SPT_MENU; } else PopUpOk("Select Origin.\n"); @@ -948,7 +948,7 @@ I64 SpriteMainEd(CDoc *doc) eletype=SPT_MENU; else { bm_bkcolor=i; - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); SpriteExtents(doc_ce->bin_data->data,&xx1,&xx2,&yy1,&yy2); if (!(xx1<=xx2 && yy1<=yy2)) xx1=xx2=yy1=yy2=0; @@ -956,7 +956,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,root,dc,xx,yy,a1,a2,bm_bkcolor, + if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor, FALSE,xx1,yy1,xx2,yy2,&cur_elem_num)==GE_EXIT) { res=GE_EXIT; goto ei_done; @@ -988,7 +988,7 @@ I64 SpriteMainEd(CDoc *doc) tempg->type=SPT_WIDTH; tempg->w.width=width; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; } doc_ce->de_flags=old_de_flags; @@ -1002,7 +1002,7 @@ I64 SpriteMainEd(CDoc *doc) else tempg->type=SPT_TRANSFORM_OFF; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; eletype=SPT_MENU; break; @@ -1016,14 +1016,14 @@ I64 SpriteMainEd(CDoc *doc) case SPT_TEXT: case SPT_TEXT_BOX: case SPT_TEXT_DIAMOND: - SMTextFamily(eletype,doc,doc_ce,root,dc,xx,yy,a1,a2, + SMTextFamily(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2, color,&cur_elem_num,old_de_flags); eletype=SPT_MENU; break; } if (eletype!=SPT_MENU) { - insert_pt=SpriteSetSettings(dc,root,cur_elem_num,xx,yy, + insert_pt=SpriteSetSettings(dc,head,cur_elem_num,xx,yy, &color,&width,&x,&y); x+=xx; y+=yy; SpriteScreenInit(dc,x,y); @@ -1051,7 +1051,7 @@ I64 SpriteMainEd(CDoc *doc) tempg->type=SPT_COLOR; tempg->c.color=color; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; break; case 't': //Set to transparent color @@ -1059,7 +1059,7 @@ I64 SpriteMainEd(CDoc *doc) tempg->type=SPT_COLOR; tempg->c.color=TRANSPARENT; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; break; } @@ -1069,7 +1069,7 @@ I64 SpriteMainEd(CDoc *doc) tempg=CAlloc(SpriteElemQuedBaseSize(SPT_PLANAR_SYMMETRY)); tempg->type=SPT_PLANAR_SYMMETRY; QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; eletype=SPT_MENU; } else @@ -1127,12 +1127,12 @@ I64 SpriteMainEd(CDoc *doc) end: if (tempg) { QueIns(tempg,insert_pt->last); - SpriteEdUpdate(doc,doc_ce,root); + SpriteEdUpdate(doc,doc_ce,head); cur_elem_num++; } break; case SPT_BITMAP: - if (SMBitMap(eletype,doc,doc_ce,root,dc,xx,yy,a1,a2,bm_bkcolor, + if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor, TRUE,,,,,&cur_elem_num)==GE_EXIT) { res=GE_EXIT; goto ei_done; @@ -1143,7 +1143,7 @@ I64 SpriteMainEd(CDoc *doc) case SPT_SHIFTABLE_MESH: GetMsg(NULL,NULL,1<de_flags|=DOCEF_DONT_DRAW; - SMShiftableMesh(doc,doc_ce,root,x,y,a1,a2,&cur_elem_num); + SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num); doc_ce->de_flags=old_de_flags; eletype=SPT_MENU; break; @@ -1162,8 +1162,8 @@ ei_done: Free(old_task_title); Fs->border_src=old_border_src; Fs->title_src =old_title_src; - QueDel(root); - Free(root); + QueDel(head); + Free(head); return res; } @@ -1182,7 +1182,7 @@ U0 EdSpriteIns(CDoc *doc) tempb->data=CAlloc(tempb->size,doc->mem_task); tempb->num=doc->cur_bin_num++; tempb->use_cnt=1; - QueIns(tempb,doc->bin_root.last); + QueIns(tempb,doc->bin_head.last); doc_e=DocPrint(doc,"%s",st); doc_e->bin_data=tempb; Free(st); diff --git a/Adam/Gr/SpriteMesh.CPP b/Adam/Gr/SpriteMesh.CPP index ca9c00f..0f83af8 100644 --- a/Adam/Gr/SpriteMesh.CPP +++ b/Adam/Gr/SpriteMesh.CPP @@ -44,8 +44,8 @@ class CMeshFrame I32 *depth_buf; I64 *w2s,*s2w; //Screen-to-world and world-to-screen transform matrices. I64 vertex_cnt,tri_cnt; //Set by MeshSize - CMeshEdVertex vertex_root,*cur_vertex,*chain_pred; - CMeshEdTri tri_root,*cur_tri; + CMeshEdVertex vertex_head,*cur_vertex,*chain_pred; + CMeshEdTri tri_head,*cur_tri; I64 x1,y1,x2,y2,cur_snap; }; @@ -55,7 +55,7 @@ CMeshEdVertex *MeshVertexNew(CMeshFrame *e,I64 x,I64 y,I64 z) tempv->p.x=x; tempv->p.y=y; tempv->p.z=z; - QueIns(tempv,e->vertex_root.last); + QueIns(tempv,e->vertex_head.last); return tempv; } @@ -69,15 +69,15 @@ CMeshEdTri *MeshTriNew(CMeshFrame *e,CColorROPU32 color, tempt->t[0]=v1; tempt->t[1]=v2; tempt->t[2]=v3; - QueIns(tempt,e->tri_root.last); + QueIns(tempt,e->tri_head.last); return tempt; } CMeshEdVertex *MeshVertexFindScrPt(CMeshFrame *e,I64 x,I64 y) {//Screen coordinates - CMeshEdVertex *res=NULL,*tempv=e->vertex_root.next; + CMeshEdVertex *res=NULL,*tempv=e->vertex_head.next; I64 dd,dz,best_dd=MAX_I64,best_dz=MAX_I64; - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { if (!(tempv->flags&VF_IGNORE)) { dd=SqrI64(x-tempv->pt.x)+SqrI64(y-tempv->pt.y); dz=AbsI64(e->ip_z-tempv->p.z); @@ -94,8 +94,8 @@ CMeshEdVertex *MeshVertexFindScrPt(CMeshFrame *e,I64 x,I64 y) CMeshEdVertex *MeshVertexFindNum(CMeshFrame *haystack_e,I64 needle_num) { - CMeshEdVertex *tempv=haystack_e->vertex_root.next; - while (tempv!=&haystack_e->vertex_root) { + CMeshEdVertex *tempv=haystack_e->vertex_head.next; + while (tempv!=&haystack_e->vertex_head) { if (tempv->num==needle_num) return tempv; tempv=tempv->next; @@ -118,8 +118,8 @@ U0 MeshVertexDel(CMeshFrame *e,CMeshEdVertex *tempv) I64 i; CMeshEdTri *tempt,*tempt1; if (tempv) { - tempt=e->tri_root.next; - while (tempt!=&e->tri_root) { + tempt=e->tri_head.next; + while (tempt!=&e->tri_head) { tempt1=tempt->next; for (i=0;i<3;i++) if (tempt->t[i]==tempv) @@ -140,7 +140,7 @@ U0 MeshVertexDel(CMeshFrame *e,CMeshEdVertex *tempv) U0 MeshFence(CMeshFrame *e) { CMeshEdVertex *tempv,*tempv1,*tempv_last=NULL,*tempv1_last=NULL, - *start=e->chain_pred->next,*end=e->vertex_root.last; + *start=e->chain_pred->next,*end=e->vertex_head.last; tempv=start; while (TRUE) { tempv1=MeshVertexNew(e,tempv->p.x,tempv->p.y,tempv->p.z+e->thickness); @@ -179,16 +179,16 @@ U0 MeshPolygon(CMeshFrame *e,CMeshEdVertex *start,CMeshEdVertex *end,Bool rev) U0 MeshPrism(CMeshFrame *e) { - CMeshEdVertex *start=e->chain_pred->next,*end=e->vertex_root.last; + CMeshEdVertex *start=e->chain_pred->next,*end=e->vertex_head.last; MeshFence(e); MeshPolygon(e,start,end,FALSE); - MeshPolygon(e,end->next,e->vertex_root.last,TRUE); + MeshPolygon(e,end->next,e->vertex_head.last,TRUE); } U0 MeshVertexSelAll(CMeshFrame *e,Bool val) { - CMeshEdVertex *tempv=e->vertex_root.next; - while (tempv!=&e->vertex_root) { + CMeshEdVertex *tempv=e->vertex_head.next; + while (tempv!=&e->vertex_head) { if (val) tempv->flags|=VF_SEL; else @@ -199,8 +199,8 @@ U0 MeshVertexSelAll(CMeshFrame *e,Bool val) U0 MeshTriSelAll(CMeshFrame *e,Bool val) { - CMeshEdTri *tempt=e->tri_root.next; - while (tempt!=&e->tri_root) { + CMeshEdTri *tempt=e->tri_head.next; + while (tempt!=&e->tri_head) { if (val) tempt->flags|=TF_SEL; else @@ -211,8 +211,8 @@ U0 MeshTriSelAll(CMeshFrame *e,Bool val) U0 MeshVertexIgnoreSet(CMeshFrame *e,Bool val) { - CMeshEdVertex *tempv=e->vertex_root.next; - while (tempv!=&e->vertex_root) { + CMeshEdVertex *tempv=e->vertex_head.next; + while (tempv!=&e->vertex_head) { tempv->flags&=~VF_IGNORE; if (tempv->flags&VF_SEL && val) tempv->flags|=VF_IGNORE; @@ -222,8 +222,8 @@ U0 MeshVertexIgnoreSet(CMeshFrame *e,Bool val) U0 MeshP0Capture(CMeshFrame *e) { - CMeshEdVertex *tempv=e->vertex_root.next; - while (tempv!=&e->vertex_root) { + CMeshEdVertex *tempv=e->vertex_head.next; + while (tempv!=&e->vertex_head) { MemCpy(&tempv->p0,&tempv->p,sizeof(CD3I32)); tempv=tempv->next; } @@ -231,8 +231,8 @@ U0 MeshP0Capture(CMeshFrame *e) U0 MeshP0Offset(CMeshFrame *e,I64 dx,I64 dy,I64 dz) { - CMeshEdVertex *tempv=e->vertex_root.next; - while (tempv!=&e->vertex_root) { + CMeshEdVertex *tempv=e->vertex_head.next; + while (tempv!=&e->vertex_head) { if (tempv->flags&VF_SEL) { tempv->p.x=tempv->p0.x+dx; tempv->p.y=tempv->p0.y+dy; @@ -248,10 +248,10 @@ U0 MeshP0Offset(CMeshFrame *e,I64 dx,I64 dy,I64 dz) U0 MeshVertexSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2) { - CMeshEdVertex *tempv=e->vertex_root.next; + CMeshEdVertex *tempv=e->vertex_head.next; if (x1>x2) SwapI64(&x1,&x2); if (y1>y2) SwapI64(&y1,&y2); - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { if (x1<=tempv->pt.x<=x2 && y1<=tempv->pt.y<=y2) { if (sel_mode==SEL_MESH_AND) @@ -266,10 +266,10 @@ U0 MeshVertexSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2) U0 MeshTriSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2) { - CMeshEdTri *tempt=e->tri_root.next; + CMeshEdTri *tempt=e->tri_head.next; if (x1>x2) SwapI64(&x1,&x2); if (y1>y2) SwapI64(&y1,&y2); - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { if (x1<=tempt->t[0]->pt.x<=x2 && y1<=tempt->t[0]->pt.y<=y2 && x1<=tempt->t[1]->pt.x<=x2 && @@ -300,14 +300,14 @@ U0 MeshTriSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2) I64 MeshSelCnt(CMeshFrame *e) { I64 res=0; - CMeshEdVertex *tempv=e->vertex_root.next; - CMeshEdTri *tempt=e->tri_root.next; - while (tempv!=&e->vertex_root) { + CMeshEdVertex *tempv=e->vertex_head.next; + CMeshEdTri *tempt=e->tri_head.next; + while (tempv!=&e->vertex_head) { if (tempv->flags&VF_SEL) res++; tempv=tempv->next; } - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { if (tempt->flags&TF_SEL) res++; tempt=tempt->next; @@ -318,13 +318,13 @@ I64 MeshSelCnt(CMeshFrame *e) U0 MeshSwapAxes(CMeshFrame *e,I64 o1,I64 o2) { Bool unsel; - CMeshEdVertex *tempv=e->vertex_root.next; + CMeshEdVertex *tempv=e->vertex_head.next; if (!MeshSelCnt(e)) { MeshVertexSelAll(e,TRUE); unsel=TRUE; } else unsel=FALSE; - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { if (tempv->flags&VF_SEL) SwapU32((&tempv->p)(U8 *)+o1,(&tempv->p)(U8 *)+o2); tempv=tempv->next; @@ -336,13 +336,13 @@ U0 MeshSwapAxes(CMeshFrame *e,I64 o1,I64 o2) U0 MeshInvertAxis(CMeshFrame *e,I64 o) { Bool unsel; - CMeshEdVertex *tempv=e->vertex_root.next; + CMeshEdVertex *tempv=e->vertex_head.next; if (!MeshSelCnt(e)) { MeshVertexSelAll(e,TRUE); unsel=TRUE; } else unsel=FALSE; - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { if (tempv->flags&VF_SEL) *((&tempv->p)(U8 *)+o)(I32 *)=-*((&tempv->p)(U8 *)+o)(I32 *); tempv=tempv->next; @@ -355,14 +355,14 @@ U0 MeshTransformSel(CMeshFrame *e) { Bool unsel; I64 r[16],x,y,z; - CMeshEdVertex *tempv=e->vertex_root.next; + CMeshEdVertex *tempv=e->vertex_head.next; if (PopUpTransform(r)) { if (!MeshSelCnt(e)) { MeshVertexSelAll(e,TRUE); unsel=TRUE; } else unsel=FALSE; - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { if (tempv->flags&VF_SEL) { x=tempv->p.x; y=tempv->p.y; z=tempv->p.z; Mat4x4MulXYZ(r,&x,&y,&z); @@ -378,13 +378,13 @@ U0 MeshTransformSel(CMeshFrame *e) U0 MeshColorTris(CMeshFrame *e) { Bool unsel; - CMeshEdTri *tempt=e->tri_root.next; + CMeshEdTri *tempt=e->tri_head.next; if (!MeshSelCnt(e)) { MeshTriSelAll(e,TRUE); unsel=TRUE; } else unsel=FALSE; - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { if (tempt->flags & TF_SEL) tempt->mt.color=e->cur_color; tempt=tempt->next; @@ -396,13 +396,13 @@ U0 MeshColorTris(CMeshFrame *e) U0 MeshRevTris(CMeshFrame *e) { Bool unsel; - CMeshEdTri *tempt=e->tri_root.next; + CMeshEdTri *tempt=e->tri_head.next; if (!MeshSelCnt(e)) { MeshTriSelAll(e,TRUE); unsel=TRUE; } else unsel=FALSE; - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { if (tempt->flags & TF_SEL) SwapI64(&tempt->t[1],&tempt->t[2]); tempt=tempt->next; @@ -451,7 +451,7 @@ U0 MPDrawIt(CMeshFrame *e) //Makes a copy of e->dc so we can change dc->color member and stuff. CDC *dc=DCAlias(e->dc,e->dc->win_task); - CMeshEdTri *tempt=e->tri_root.next; + CMeshEdTri *tempt=e->tri_head.next; I64 i,*old_r=dc->r; //$LK,"DCAlias",A="MN:DCAlias"$() allocs a new identity rotation matrix. @@ -493,7 +493,7 @@ U0 MPDrawIt(CMeshFrame *e) GrLine3(dc,0,0,-500,0,0,0); } - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { if (tempt->cpu_num==Gs->num) { if (tempt->flags & TF_SEL) { if (Blink) @@ -588,33 +588,33 @@ U0 MeshCursorW(CMeshFrame *e,CTask *task,I64 *_x,I64 *_y,I64 *_z) *_x=x; *_y=y; *_z=z; } -CMeshEdVertex sys_clipboard_vertex_root; -CMeshEdTri sys_clipboard_tri_root; +CMeshEdVertex sys_clipboard_vertex_head; +CMeshEdTri sys_clipboard_tri_head; U0 MeshClipboardInit() { - QueInit(&sys_clipboard_vertex_root); - QueInit(&sys_clipboard_tri_root); + QueInit(&sys_clipboard_vertex_head); + QueInit(&sys_clipboard_tri_head); } U0 MeshClipboardRst() { - QueDel(&sys_clipboard_vertex_root,TRUE); - QueDel(&sys_clipboard_tri_root,TRUE); + QueDel(&sys_clipboard_vertex_head,TRUE); + QueDel(&sys_clipboard_tri_head,TRUE); MeshClipboardInit; } U0 MeshClipboardCopy(CMeshFrame *e) { - CMeshEdVertex *tempv=e->vertex_root.next,*tempv2; - CMeshEdTri *tempt=e->tri_root.next,*tempt2; + CMeshEdVertex *tempv=e->vertex_head.next,*tempv2; + CMeshEdTri *tempt=e->tri_head.next,*tempt2; MeshClipboardRst; - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { if (tempv->flags&VF_SEL) { tempv->copy=tempv2=ACAlloc(sizeof(CMeshEdVertex)); MemCpy(&tempv2->p,&tempv->p,sizeof(CD3I32)); - QueIns(tempv2,sys_clipboard_vertex_root.last); + QueIns(tempv2,sys_clipboard_vertex_head.last); tempv->flags|=VF_COPIED; tempv->flags&=~VF_SEL; } else { @@ -623,7 +623,7 @@ U0 MeshClipboardCopy(CMeshFrame *e) } tempv=tempv->next; } - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { if (tempt->flags&TF_SEL && tempt->t[0]->copy && tempt->t[1]->copy && tempt->t[2]->copy) { tempt2=ACAlloc(sizeof(CMeshEdTri)); @@ -631,7 +631,7 @@ U0 MeshClipboardCopy(CMeshFrame *e) tempt2->t[1]=tempt->t[1]->copy; tempt2->t[2]=tempt->t[2]->copy; tempt2->mt.color=tempt->mt.color; - QueIns(tempt2,sys_clipboard_tri_root.last); + QueIns(tempt2,sys_clipboard_tri_head.last); tempt->flags|=TF_COPIED; tempt->flags&=~TF_SEL; } else @@ -642,16 +642,16 @@ U0 MeshClipboardCopy(CMeshFrame *e) U0 MeshClipboardCut(CMeshFrame *e) { - CMeshEdVertex *tempv=e->vertex_root.next,*tempv1; - CMeshEdTri *tempt=e->tri_root.next,*tempt1; + CMeshEdVertex *tempv=e->vertex_head.next,*tempv1; + CMeshEdTri *tempt=e->tri_head.next,*tempt1; MeshClipboardCopy(e); - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { tempt1=tempt->next; if (tempt->flags&TF_COPIED) MeshTriDel(e,tempt); tempt=tempt1; } - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { tempv1=tempv->next; if (tempv->flags&VF_COPIED) MeshVertexDel(e,tempv); @@ -661,15 +661,15 @@ U0 MeshClipboardCut(CMeshFrame *e) U0 MeshClipboardDel(CMeshFrame *e) {//Technically not clipboard - CMeshEdVertex *tempv=e->vertex_root.next,*tempv1; - CMeshEdTri *tempt=e->tri_root.next,*tempt1; - while (tempt!=&e->tri_root) { + CMeshEdVertex *tempv=e->vertex_head.next,*tempv1; + CMeshEdTri *tempt=e->tri_head.next,*tempt1; + while (tempt!=&e->tri_head) { tempt1=tempt->next; if (tempt->flags&TF_SEL) MeshTriDel(e,tempt); tempt=tempt1; } - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { tempv1=tempv->next; if (tempv->flags&VF_SEL) MeshVertexDel(e,tempv); @@ -679,20 +679,20 @@ U0 MeshClipboardDel(CMeshFrame *e) U0 MeshClipboardPaste(CMeshFrame *e) { - CMeshEdVertex *tempv2=sys_clipboard_vertex_root.next,*tempv; - CMeshEdTri *tempt2=sys_clipboard_tri_root.next,*tempt; + CMeshEdVertex *tempv2=sys_clipboard_vertex_head.next,*tempv; + CMeshEdTri *tempt2=sys_clipboard_tri_head.next,*tempt; MeshVertexSelAll(e,FALSE); MeshTriSelAll(e,FALSE); - while (tempv2!=&sys_clipboard_vertex_root) { + while (tempv2!=&sys_clipboard_vertex_head) { tempv2->copy=tempv=CAlloc(sizeof(CMeshEdVertex)); MemCpy(&tempv->p,&tempv2->p,sizeof(CD3I32)); - QueIns(tempv,e->vertex_root.last); + QueIns(tempv,e->vertex_head.last); tempv->flags|=VF_SEL; tempv2=tempv2->next; } - while (tempt2!=&sys_clipboard_tri_root) { + while (tempt2!=&sys_clipboard_tri_head) { tempt=MeshTriNew(e,tempt2->mt.color,tempt2->t[0]->copy, tempt2->t[1]->copy,tempt2->t[2]->copy); tempt->flags|=TF_SEL; @@ -741,8 +741,8 @@ U0 DrawIt(CTask *task,CDC *dc) DCDepthBufAlloc(dc); - tempv=e->vertex_root.next; - while (tempv!=&e->vertex_root) { + tempv=e->vertex_head.next; + while (tempv!=&e->vertex_head) { x=tempv->p.x; y=tempv->p.y; z=tempv->p.z; (*dc->transform)(dc,&x,&y,&z); tempv->pt.x=x; tempv->pt.y=y; tempv->pt.z=z; @@ -755,8 +755,8 @@ U0 DrawIt(CTask *task,CDC *dc) for (i=0;ivertex_root.next; - while (tempv!=&e->vertex_root) { + tempv=e->vertex_head.next; + while (tempv!=&e->vertex_head) { x=tempv->pt.x; y=tempv->pt.y; z=tempv->pt.z; if (e->vertex_on) { if (Blink(10)) //This blinks at 10 Hz. @@ -823,8 +823,8 @@ U0 DrawIt(CTask *task,CDC *dc) U0 MeshInit(CMeshFrame *e,Bool flip_y) { MemSet(e,0,sizeof(CMeshFrame)); - e->vertex_root.next=e->vertex_root.last=&e->vertex_root; - e->tri_root.next=e->tri_root.last=&e->tri_root; + QueInit(&e->vertex_head); + QueInit(&e->tri_head); e->ed_mode='v'; e->grid_on=TRUE; e->vertex_on=TRUE; @@ -849,8 +849,8 @@ U0 MeshLoad(CMeshFrame *e,U8 *src) CColorROPU32 color; CMeshEdVertex *tempv,*va[3]; - e->vertex_root.next=e->vertex_root.last=&e->vertex_root; - e->tri_root.next=e->tri_root.last=&e->tri_root; + QueInit(&e->vertex_head); + QueInit(&e->tri_head); e->vertex_cnt =*src(I32 *)++; e->tri_cnt=*src(I32 *)++; @@ -872,17 +872,17 @@ U0 MeshLoad(CMeshFrame *e,U8 *src) I64 MeshSize(CMeshFrame *e) { I64 i; - CMeshEdVertex *tempv=e->vertex_root.next; - CMeshEdTri *tempt=e->tri_root.next; + CMeshEdVertex *tempv=e->vertex_head.next; + CMeshEdTri *tempt=e->tri_head.next; e->vertex_cnt=0; - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { tempv->num=e->vertex_cnt++; tempv=tempv->next; } e->tri_cnt=0; - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { e->tri_cnt++; for (i=0;i<3;i++) tempt->mt.nums[i]=tempt->t[i]->num; @@ -897,14 +897,14 @@ I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL) { I64 size=MeshSize(e); U8 *res=MAlloc(size),*dst=res; - CMeshEdVertex *tempv=e->vertex_root.next; - CMeshEdTri *tempt=e->tri_root.next; + CMeshEdVertex *tempv=e->vertex_head.next; + CMeshEdTri *tempt=e->tri_head.next; *dst(I32 *)++=e->vertex_cnt; *dst(I32 *)++=e->tri_cnt; e->vertex_cnt=0; - while (tempv!=&e->vertex_root) { + while (tempv!=&e->vertex_head) { MemCpy(dst,&tempv->start,offset(CMeshEdVertex.end) -offset(CMeshEdVertex.start)); dst+=offset(CMeshEdVertex.end)-offset(CMeshEdVertex.start); @@ -912,7 +912,7 @@ I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL) } e->tri_cnt=0; - while (tempt!=&e->tri_root) { + while (tempt!=&e->tri_head) { MemCpy(dst,&tempt->start,offset(CMeshEdTri.end)-offset(CMeshEdTri.start)); dst+=offset(CMeshEdTri.end)-offset(CMeshEdTri.start); tempt=tempt->next; @@ -923,8 +923,8 @@ I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL) U0 MeshCleanUp(CMeshFrame *e) { - QueDel(&e->vertex_root,TRUE); - QueDel(&e->tri_root,TRUE); + QueDel(&e->vertex_head,TRUE); + QueDel(&e->tri_head,TRUE); Free(e->w2s); Free(e->s2w); } @@ -954,7 +954,7 @@ U0 MeshUpdateMenu(CMeshFrame *e) tempse->checked=ToBool(e->flip_y); } -I32 *SpriteMeshEd(I32 *root=NULL,I64 *_size=NULL,Bool flip_y=FALSE) +I32 *SpriteMeshEd(I32 *head=NULL,I64 *_size=NULL,Bool flip_y=FALSE) {/*Fmt for mesh: { I32 vertex_cnt; @@ -963,7 +963,7 @@ CD3I32 vertices[]; CMeshTri tris[]; } -If root points to a mesh, it will load it. +If head points to a mesh, it will load it. Returns a newly malloced mesh or NULL. @@ -1067,8 +1067,8 @@ $WW,0$*/ Fs->horz_scroll.pos=0; Fs->vert_scroll.pos=0; MeshInit(&e,flip_y); - if (root) - MeshLoad(&e,root); + if (head) + MeshLoad(&e,head); FramePtrAdd("CMeshFrame",&e); Fs->draw_it=&DrawIt; MeshCurSnap(&e); @@ -1134,7 +1134,7 @@ me_restart: else e.closed=PopUpNoYes("Closed?\n"); me_chain: - e.chain_pred=e.vertex_root.last; + e.chain_pred=e.vertex_head.last; case 't': MeshVertexSelAll(&e,FALSE); MeshTriSelAll(&e,FALSE); @@ -1416,8 +1416,9 @@ me_clipboard_cut: } break; case MSG_IP_R_DOWN: - if (e.ed_mode!='M' && e.ed_mode!='n' && e.ed_mode!='f' && - e.ed_mode!='p' && !adjusting_z) { + 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')) { if (moving) { MeshCursorW(&e,Fs,&x,&y,&z); MeshP0Offset(&e,x-p0a.x,y-p0a.y,z-p0a.z); @@ -1434,22 +1435,7 @@ me_clipboard_cut: } break; case MSG_IP_R_UP: - if (e.ed_mode=='n') { - if (e.chain_pred && e.chain_pred!=e.vertex_root.last) - MeshPolygon(&e,e.chain_pred->next,e.vertex_root.last,FALSE); - a1=e.ed_mode; - goto me_chain; - } else if (e.ed_mode=='f') { - if (e.chain_pred && e.chain_pred!=e.vertex_root.last) - MeshFence(&e); - a1=e.ed_mode; - goto me_chain; - } else if (e.ed_mode=='p') { - if (e.chain_pred && e.chain_pred!=e.vertex_root.last) - MeshPrism(&e); - a1=e.ed_mode; - goto me_chain; - } else if (e.ed_mode!='M' && adjusting_z) { + 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)) +p0b.z,e.cur_snap); @@ -1463,6 +1449,21 @@ me_clipboard_cut: p0a.z=z; MeshP0Capture(&e); } + } 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; + 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; + 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; + goto me_chain; } break; case MSG_IP_MOVE: @@ -1492,9 +1493,9 @@ me_done: SettingsPop; MenuPop; if (save_and_exit) - root=MeshSave(&e,_size); + head=MeshSave(&e,_size); else - root=NULL; + head=NULL; MeshCleanUp(&e); FramePtrDel("CMeshFrame"); if (old_s) { @@ -1502,5 +1503,5 @@ me_done: Free(old_s); } else ViewAnglesDel; - return root; + return head; } diff --git a/Adam/Opt/Boot/BootDVD.CPP b/Adam/Opt/Boot/BootDVD.CPP index c888952..1427256 100644 --- a/Adam/Opt/Boot/BootDVD.CPP +++ b/Adam/Opt/Boot/BootDVD.CPP @@ -61,7 +61,7 @@ BDVD_SHIFT_BLKS:: DU16 0; BDVD_PROGRESS_STEP:: DU32 0; BDVD_PROGRESS_VAL:: DU32 0; -BDVD_PUTCHAR:: +BDVD_PUT_CHAR:: MOV AH,0xE MOV BL,7 //Might be foreground color on some BIOS's MOV BH,U8 [BDVD_PAGE-BDVD_START] @@ -72,7 +72,7 @@ BDVD_PUTS:: @@1: LODSB TEST AL,AL JZ BDVD_RET - CALL BDVD_PUTCHAR + CALL BDVD_PUT_CHAR JMP @@1 BDVD_MAIN:: @@ -80,7 +80,7 @@ BDVD_MAIN:: MOV AH,0xF INT 0x10 - MOV U8 [BDVD_PAGE-BDVD_START],BH //video page + MOV U8 [BDVD_PAGE-BDVD_START],BH //Video page MOV EAX,0x80000000 CPUID @@ -143,7 +143,7 @@ BDVD_MAIN:: CMP U16 [BDVD_PROGRESS_VAL+2-BDVD_START],BX JE @@30 MOV AL,'.' - CALL BDVD_PUTCHAR + CALL BDVD_PUT_CHAR @@30: POP AX POP CX @@ -173,7 +173,7 @@ BDVD_MAIN:: LOOP @@35 POP DS -//See $LK,"BootDVDProve",A="MN:BootDVDProve"$(). +//See $LK,"BootDVDProbe",A="MN:BootDVDProbe"$(). MOV EBX,U32 [BDVD_BLK_LO-BDVD_START] MOV AX,U16 [BDVD_SHIFT_BLKS-BDVD_START] SHL EAX,16 @@ -182,7 +182,7 @@ BDVD_MAIN:: //My assembler doesn't support 16-bit very well. DU8 0xEA; //JMP BOOT_RAM_BASE:0000 DU16 0,BOOT_RAM_BASE/16; -//Continues here $LK,"::/Kernel/KStart.CPP",A="FL:::/Kernel/KStart.CPP,1"$ +//Continues here $LK,"::/Kernel/KStart16.CPP",A="FL:::/Kernel/KStart16.CPP,1"$ BDVD_END:: #assert BDVD_END-BDVD_START>2, stage2_size,cur_blk=0,tabsize,tabsize2,first_free,max_depth,fuf_flags=0; U32 *d; @@ -335,22 +335,22 @@ public I64 ISO9660ISO(U8 *_filename=NULL,U8 *src_files_find_mask, else stage2_filename=NULL; - rootdir->attr=RS_ATTR_DIR; - rootdir->sub=FilesFind(src_files_find_mask,fuf_flags); - rootdir->datetime=Now; - rootdir->user_data=CAlloc(sizeof(CCDVDUserData)); - tempc=rootdir->user_data; + headdir->attr=RS_ATTR_DIR; + headdir->sub=FilesFind(src_files_find_mask,fuf_flags); + headdir->datetime=Now; + headdir->user_data=CAlloc(sizeof(CCDVDUserData)); + tempc=headdir->user_data; tempc->path_entry_num=1; cur_blk=20<<2>>2; if (stage2_filename) //preboot and bootloader cur_blk+=1+DVD_BOOT_LOADER_SIZE/DVD_BLK_SIZE; - DVDFileCreate2(out_file,rootdir,&iso_pri->root_dir_record, - &iso_sup->root_dir_record,&cur_blk,rootdir,FALSE, + DVDFileCreate2(out_file,headdir,&iso_pri->root_dir_record, + &iso_sup->root_dir_record,&cur_blk,headdir,FALSE, stage2_filename,&stage2_blk); tabsize=sizeof(CISO1PathEntry); tabsize2=sizeof(CISO1PathEntry); - max_depth=DVDTableLen(rootdir,&tabsize,&tabsize2,1); + max_depth=DVDTableLen(headdir,&tabsize,&tabsize2,1); FillU32Palindrome(&iso_pri->path_table_size,tabsize); FillU32Palindrome(&iso_sup->path_table_size,tabsize2); tabsize=(tabsize+DVD_BLK_SIZE-1)/DVD_BLK_SIZE; @@ -412,8 +412,8 @@ public I64 ISO9660ISO(U8 *_filename=NULL,U8 *src_files_find_mask, cur_blk+=DVD_BOOT_LOADER_SIZE/DVD_BLK_SIZE; } - DVDFileCreate2(out_file,rootdir,&iso_pri->root_dir_record, - &iso_sup->root_dir_record,&cur_blk,rootdir,TRUE, + DVDFileCreate2(out_file,headdir,&iso_pri->root_dir_record, + &iso_sup->root_dir_record,&cur_blk,headdir,TRUE, stage2_filename,&stage2_blk); tabbuf=CAlloc(tabsize*DVD_BLK_SIZE); @@ -432,7 +432,7 @@ public I64 ISO9660ISO(U8 *_filename=NULL,U8 *src_files_find_mask, itabbuf2=tabbuf2+1; first_free=2; for (i=1;i<=max_depth;i++) - DVDFillPathTable(rootdir,&itabbuf,&itabbuf2,1,FALSE,&first_free,1,i); + DVDFillPathTable(headdir,&itabbuf,&itabbuf2,1,FALSE,&first_free,1,i); "%X: Path Table 0\n",cur_blk; FWBlks(out_file,tabbuf,cur_blk<<2,tabsize<<2); cur_blk+=tabsize; @@ -456,7 +456,7 @@ public I64 ISO9660ISO(U8 *_filename=NULL,U8 *src_files_find_mask, itabbuf2=tabbuf2+1; first_free=2; for (i=1;i<=max_depth;i++) - DVDFillPathTable(rootdir,&itabbuf,&itabbuf2,1,TRUE,&first_free,1,i); + DVDFillPathTable(headdir,&itabbuf,&itabbuf2,1,TRUE,&first_free,1,i); "%X: Path Table 2\n",cur_blk; FWBlks(out_file,tabbuf,cur_blk<<2,tabsize<<2); cur_blk+=tabsize; @@ -464,7 +464,7 @@ public I64 ISO9660ISO(U8 *_filename=NULL,U8 *src_files_find_mask, FWBlks(out_file,tabbuf2,cur_blk<<2,tabsize2<<2); cur_blk+=tabsize2; - DirTreeDel2(rootdir); + DirTreeDel2(headdir); FillU32Palindrome(&iso_pri->vol_space_size,cur_blk); FillU32Palindrome(&iso_sup->vol_space_size,cur_blk); FWBlks(out_file,iso_pri,16<<2,4); diff --git a/Adam/Opt/Boot/DskISORedSea.CPP b/Adam/Opt/Boot/DskISORedSea.CPP index a596d99..2acbc15 100644 --- a/Adam/Opt/Boot/DskISORedSea.CPP +++ b/Adam/Opt/Boot/DskISORedSea.CPP @@ -142,7 +142,7 @@ public I64 RedSeaISO(U8 *_iso_filename=NULL,U8 *_src_dir, stage2_filename=FileNameAbs(_stage2_filename); *stage2_filename=dv->drv_let; i=StrLen(src_dir); - if (i!=3) //If not root + if (i!=3) //If not head i++; //Skip slash StrCpy(stage2_filename+3,stage2_filename+i); } else diff --git a/Adam/Opt/Utils/Diff.CPP b/Adam/Opt/Utils/Diff.CPP index 6380c9d..399f968 100644 --- a/Adam/Opt/Utils/Diff.CPP +++ b/Adam/Opt/Utils/Diff.CPP @@ -219,12 +219,12 @@ Bool DiffSub(CDoc *doc,I64 *_df_flags,I64 j1_lo,I64 j1_hi,I64 j2_lo,I64 j2_hi, Bool DiffBins(CDoc *doc1,CDoc *doc2) { - CDocBin *tempb1=doc1->bin_root.next, - *tempb2=doc2->bin_root.next; + CDocBin *tempb1=doc1->bin_head.next, + *tempb2=doc2->bin_head.next; if (tempb1->last->last->num!=tempb2->last->last->num) return TRUE; - while (tempb1!=&doc1->bin_root) { + while (tempb1!=&doc1->bin_head) { if (tempb1->size!=tempb2->size || MemCmp(tempb1->data,tempb2->data,tempb1->size)) return TRUE; @@ -249,14 +249,14 @@ public Bool Diff(U8 *dst_file,U8 *src_file,I64 *_df_flags=NULL) df_flags=0; df_flags&=DF_ABORT_ALL_FILES; - doc_e=doc1->root.next; + doc_e=doc1->head.next; while (doc_e!=doc1) { if (doc_e->type_u8==DOCT_TEXT) doc_e->user_data=cnt1++; //user_data is the new y doc_e=doc_e->next; } - doc_e=doc2->root.next; + doc_e=doc2->head.next; while (doc_e!=doc2) { if (doc_e->type_u8==DOCT_TEXT) doc_e->user_data=cnt2++; //user_data is the new y @@ -266,7 +266,7 @@ public Bool Diff(U8 *dst_file,U8 *src_file,I64 *_df_flags=NULL) doc_sorted1=MAlloc(cnt1*sizeof(CDocEntry *)); doc_unsorted1=MAlloc((cnt1+1)*sizeof(CDocEntry *)); i=0; - doc_e=doc1->root.next; + doc_e=doc1->head.next; while (doc_e!=doc1) { if (doc_e->type_u8==DOCT_TEXT) { doc_sorted1[i]=doc_e; @@ -280,7 +280,7 @@ public Bool Diff(U8 *dst_file,U8 *src_file,I64 *_df_flags=NULL) doc_sorted2=MAlloc(cnt2*sizeof(CDocEntry *)); doc_unsorted2=MAlloc((cnt2+1)*sizeof(CDocEntry *)); i=0; - doc_e=doc2->root.next; + doc_e=doc2->head.next; while (doc_e!=doc2) { if (doc_e->type_u8==DOCT_TEXT) { doc_sorted2[i]=doc_e; diff --git a/Adam/Opt/Utils/Find.CPP b/Adam/Opt/Utils/Find.CPP index 2ed083e..e3cb8d5 100644 --- a/Adam/Opt/Utils/Find.CPP +++ b/Adam/Opt/Utils/Find.CPP @@ -47,7 +47,7 @@ I64 FindFile(U8 *needle_str,U8 *haystack_filename, plen=StrLen(needle_str); if (replace_text) rlen=StrLen(replace_text); - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc && cont) { if (doc_e->type_u8==DOCT_TEXT) { src=doc_e->tag; diff --git a/Adam/Opt/Utils/HeapLog.CPP b/Adam/Opt/Utils/HeapLog.CPP index ad76f83..d7c1d1c 100644 --- a/Adam/Opt/Utils/HeapLog.CPP +++ b/Adam/Opt/Utils/HeapLog.CPP @@ -21,7 +21,7 @@ class CHeapLogHash }; CHeapCtrl *heaplog_hc_watched,*heaplog_hc=NULL; -CHeapLogHash *heaplog_root=NULL; +CHeapLogHash *heaplog_head=NULL; U0 HeapLogMAlloc(U8 *addr) { @@ -37,7 +37,7 @@ U0 HeapLogMAlloc(U8 *addr) CLI while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) PAUSE - QueIns(temphl,heaplog_root[i].last); + QueIns(temphl,heaplog_head[i].last); LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); POPFD } @@ -54,8 +54,8 @@ U0 HeapLogFree(U8 *addr) CLI while (LBts(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0)) PAUSE - temphl=heaplog_root[i].next; - while (temphl!=&heaplog_root[i]) { + temphl=heaplog_head[i].next; + while (temphl!=&heaplog_head[i]) { if (addr==temphl->addr) { QueRem(temphl); LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); @@ -90,9 +90,9 @@ public Bool HeapLog(Bool val=ON,CTask *task=NULL) heaplog_hc=HeapCtrlInit(,,sys_data_bp); ext[EXT_HEAPLOG_MALLOC]=&HeapLogMAlloc; ext[EXT_HEAPLOG_FREE]=&HeapLogFree; - heaplog_root=MAlloc(sizeof(CHeapLogHash)*HL_HASH_SIZE,heaplog_hc); + heaplog_head=MAlloc(sizeof(CHeapLogHash)*HL_HASH_SIZE,heaplog_hc); for (i=0;i>3+hla.caller[0])&(HL_HASH_SIZE-1); - temphls=size_root[k].next; - while (temphls!=&size_root[k]) { + temphls=size_head[k].next; + while (temphls!=&size_head[k]) { if (MSize(hla.addr)==temphls->size) { for (j=0;jcaller[j]) @@ -182,7 +182,7 @@ hl_next: MemCpy(temphls,&hla,sizeof(CHeapLog)); temphls->cnt=1; temphls->size=MSize(hla.addr); - QueIns(temphls,size_root[k].last); + QueIns(temphls,size_head[k].last); hl_found: temphla=hla.next; } @@ -190,8 +190,8 @@ hl_found: LBtr(&sys_semas[SYS_SEMA_HEAPLOG_LOCK],0); for (i=0;inext; "%08X*%08X=%08X",temphls->size,temphls->cnt,temphls->size*temphls->cnt; for (j=0;jsub); else { doc=DocRead(tempde->full_name); - if (doc->root.next!=doc) - i=doc->root.last->y+2; + if (doc->head.next!=doc) + i=doc->head.last->y+2; DocDel(doc); } tempde->user_data=i; diff --git a/Adam/Opt/Utils/LinkChk.CPP b/Adam/Opt/Utils/LinkChk.CPP index 50c765a..40b796e 100644 --- a/Adam/Opt/Utils/LinkChk.CPP +++ b/Adam/Opt/Utils/LinkChk.CPP @@ -5,7 +5,7 @@ I64 LinkChkDoc(CDoc *doc,I64 *_fuf_flags) U8 *st; Bool found,unlock=DocLock(doc); CDoc *old_doc; - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; I64 res=0; while (doc_e!=doc) { if (ScanKey) { @@ -38,8 +38,9 @@ I64 LinkChkDoc(CDoc *doc,I64 *_fuf_flags) I64 LinkChkFile(U8 *filename,I64 *_fuf_flags) { + I64 res; CDoc *doc=DocRead(filename,DOCF_NO_CURSOR); - I64 res=LinkChkDoc(doc,_fuf_flags); + res=LinkChkDoc(doc,_fuf_flags); DocDel(doc); return res; } diff --git a/Adam/Opt/Utils/StrUtils.CPP b/Adam/Opt/Utils/StrUtils.CPP index 4870144..d5c64de 100644 --- a/Adam/Opt/Utils/StrUtils.CPP +++ b/Adam/Opt/Utils/StrUtils.CPP @@ -21,14 +21,14 @@ public I64 Sort(U8 *_in_name,U8 *_out_name=NULL, out_name=StrNew(in_name); doc=DocRead(in_name,DOCF_PLAIN_TEXT_TABS|DOCF_NO_CURSOR); - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_TEXT) cnt++; doc_e=doc_e->next; } a=MAlloc(cnt*sizeof(CDocEntry *)); - doc_e=doc->root.next; + doc_e=doc->head.next; i=0; while (doc_e!=doc) { doc_e1=doc_e->next; @@ -47,15 +47,15 @@ public I64 Sort(U8 *_in_name,U8 *_out_name=NULL, if (!unique || !st || StrCmp(a[i]->tag,st)) { st=a[i]->tag; for (j=0;jroot.last); - doc->cur_entry=&doc->root; + QueIns(a[i],doc->head.last); + doc->cur_entry=&doc->head; doc->cur_col=0; DocPrint(doc,"\n"); } res++; } else for (j=0;jroot.last); + QueIns(a[i],doc->head.last); DocEntryDel(doc,a[i]); } } @@ -74,7 +74,7 @@ I64 DocWordsFile(CDoc *doc_out=NULL,U8 *filename,U32 *chars_bmp) U8 *ptr,*ptr2; I64 res=0,ch; CDoc *doc_in=DocRead(filename); - CDocEntry *doc_e=doc_in->root.next; + CDocEntry *doc_e=doc_in->head.next; while (doc_e!=doc_in) { if (doc_e->de_flags & DOCEF_TAG) { ptr=doc_e->tag; @@ -123,7 +123,7 @@ I64 LongLinesFile(U8 *filename,I64 cols) { I64 res=0; CDoc *doc=DocRead(filename); - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_NEW_LINE && doc_e->x>=cols+1) res++; @@ -160,7 +160,7 @@ U0 SUFile(U8 *filename,I64 suf_flags,F64 indent_scale_factor) Bool chged=FALSE; I64 reduced=0; CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT_TABS|DOCF_NO_CURSOR); - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_TEXT) { dst=MStrUtil(doc_e->tag,suf_flags,indent_scale_factor); diff --git a/Adam/Opt/Utils/ToTXT.CPP b/Adam/Opt/Utils/ToTXT.CPP index b37bc24..7e8977f 100644 --- a/Adam/Opt/Utils/ToTXT.CPP +++ b/Adam/Opt/Utils/ToTXT.CPP @@ -46,7 +46,7 @@ public CDoc *Doc2TXT(CDoc *doc_in) doc_out->flags|=DOCF_PLAIN_TEXT|DOCF_NO_CURSOR; - doc_e=doc_in->root.next; + doc_e=doc_in->head.next; col=doc_e->x; y=doc_e->y; while (doc_e!=doc_in) { @@ -93,7 +93,7 @@ public CDoc *Doc2TXT(CDoc *doc_in) y++; col=0; } - doc_out->cur_entry=&doc_out->root; + doc_out->cur_entry=&doc_out->head; DocRecalc(doc_out); if (unlock_doc_in) diff --git a/Adam/Snd/SndFile.CPP b/Adam/Snd/SndFile.CPP index ecddb0a..92d1c22 100644 --- a/Adam/Snd/SndFile.CPP +++ b/Adam/Snd/SndFile.CPP @@ -32,7 +32,7 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0, snd.record=FALSE; - dt=snd.record_root.last->time-snd.record_root.next->time; + dt=snd.record_head.last->time-snd.record_head.next->time; if (!dt) return 0; cnt=dt*SNDFILE_SAMPLE_RATE; cnt++; //Terminator @@ -48,9 +48,9 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0, s->channels=EndianU32(1); if (time_shift) { - d=snd.record_root.next; + d=snd.record_head.next; d->time-=time_shift; - while (d->next!=&snd.record_root) { + while (d->next!=&snd.record_head) { d1=d->next; dt=d1->time-d->time; if (dt<0) { @@ -61,9 +61,9 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0, } } - d=snd.record_root.next; + d=snd.record_head.next; k=0; - while (d->next!=&snd.record_root) { + while (d->next!=&snd.record_head) { d1=d->next; dt=d1->time-d->time; cnt2=dt*SNDFILE_SAMPLE_RATE; @@ -103,8 +103,8 @@ public I64 SndFileCreate(U8 *base_filename,F64 normalized_vol=1.0, s->body[cnt-1]=0; - d=snd.record_root.next; - while (d!=&snd.record_root) { + d=snd.record_head.next; + while (d!=&snd.record_head) { d1=d->next; QueRem(d); Free(d); diff --git a/Adam/TaskRep.CPP b/Adam/TaskRep.CPP index c1a4c66..2ba503c 100644 --- a/Adam/TaskRep.CPP +++ b/Adam/TaskRep.CPP @@ -4,7 +4,7 @@ U0 TaskRepTask(CTask *task,I64 indent) CTask *task1; U8 *st,*desc=MStrUtil(task->task_title,SUF_SAFE_DOLLAR); st=MStrPrint("$$MA,T=\"%08X\",LM=\"Kill(0x%X);\n\",$$",task,task,task); - "%h*c%s $$TX,\"%Q...\",SCX=16$$\n",indent,CH_SPACE, + "%h*c%s $$TX,\"%$$Q...\",SCX=16$$\n",indent,CH_SPACE, st,desc; "%h*c%08X %04X:%04X:%08X\n",indent+2,CH_SPACE,TaskMemAlloced(task), task->task_flags,task->display_flags,task->win_inhibit; diff --git a/Adam/Training.CPP b/Adam/Training.CPP index 56eddb9..14dc6ec 100644 --- a/Adam/Training.CPP +++ b/Adam/Training.CPP @@ -21,7 +21,7 @@ U8 *KeyMapKeyMStrPrint(I64 sc,U0 (*fp_handler)(I64 sc), else if (k=='Cmd ') c=RED; else c=BLACK; - res=MStrPrint("%-*s $$FG,%d$$$$TX+UL+L+PU,\"%Q\",A=\"%s\"$$$$FG$$\n", + res=MStrPrint("%-*s $$FG,%d$$$$TX+UL+L+PU,\"%$$Q\",A=\"%s\"$$$$FG$$\n", i,st,c,desc,st2); Free(st); Free(st2); @@ -162,7 +162,7 @@ public U0 TipOfDay(U8 *tip_file="::/Doc/Tips.TXT") {//Print random tip-of-day from ::/Doc/Tips.TXT. I64 i=RandU16; CDoc *doc=DocRead(tip_file),*doc2=DocNew; - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; "$$WW,1$$\n"; while (TRUE) { if (doc_e->type_u8==DOCT_TEXT && *doc_e->tag=='*') diff --git a/Apps/Budget/BgtAccts.CPP b/Apps/Budget/BgtAccts.CPP index 7885a33..8c10561 100644 --- a/Apps/Budget/BgtAccts.CPP +++ b/Apps/Budget/BgtAccts.CPP @@ -2,8 +2,8 @@ U0 BgtAcctsUpdate() { CBgtEntry *tempb; CBgtTemplate *tempt; - tempb=b_root.next; - while (tempb!=&b_root) { + tempb=b_head.next; + while (tempb!=&b_head) { if (tempb->type!=BE_TEMPLATE_COPY) { tempb->credit_idx=StrFileAdd(tempb->credit, &accts_table_strs,accts_table); @@ -12,8 +12,8 @@ U0 BgtAcctsUpdate() } tempb=tempb->next; } - tempt=t_root.next; - while (tempt!=&t_root) { + tempt=t_head.next; + while (tempt!=&t_head) { tempt->b.credit_idx=StrFileAdd(tempt->b.credit, &accts_table_strs,accts_table); tempt->b.debit_idx =StrFileAdd(tempt->b.debit, diff --git a/Apps/Budget/BgtEntry.CPP b/Apps/Budget/BgtEntry.CPP index c1b5d8c..37c9cfd 100644 --- a/Apps/Budget/BgtEntry.CPP +++ b/Apps/Budget/BgtEntry.CPP @@ -15,8 +15,8 @@ U0 BgtEntryDel(CBgtEntry *tempb) U0 BgtIns(CBgtEntry *tempb) { - CBgtEntry *tempb1=b_root.next; - while (tempb1!=&b_root && tempb1->datedate) + CBgtEntry *tempb1=b_head.next; + while (tempb1!=&b_head && tempb1->datedate) tempb1=tempb1->next; QueIns(tempb,tempb1->last); } diff --git a/Apps/Budget/BgtFile.CPP b/Apps/Budget/BgtFile.CPP index 01ed89a..ef512a4 100644 --- a/Apps/Budget/BgtFile.CPP +++ b/Apps/Budget/BgtFile.CPP @@ -7,12 +7,12 @@ U0 BgtDataRead() I64 max_num; U8 **s=StrFileRead(BGT_STRINGS_FILE,&max_num); - MemSet(&b_root,0,sizeof(CBgtEntry)); - QueInit(&b_root); - b_root.date=Now; - MemSet(&t_root,0,sizeof(CBgtTemplate)); - QueInit(&t_root); - t_root.b.date=Now; + MemSet(&b_head,0,sizeof(CBgtEntry)); + QueInit(&b_head); + b_head.date=Now; + MemSet(&t_head,0,sizeof(CBgtTemplate)); + QueInit(&t_head); + t_head.b.date=Now; if (ptr=b=FileRead(BGT_DATA_FILE,&size)) { cnt=*ptr(I64 *)++; @@ -22,7 +22,7 @@ U0 BgtDataRead() tempb->credit=StrNew(s[tempb->credit_idx]); tempb->debit =StrNew(s[tempb->debit_idx]); tempb->desc =StrNew(s[tempb->desc_idx]); - QueIns(tempb,b_root.last); + QueIns(tempb,b_head.last); ptr+=BE_SIZE; } @@ -36,7 +36,7 @@ U0 BgtDataRead() tempt->b.credit=StrNew(s[tempt->b.credit_idx]); tempt->b.debit =StrNew(s[tempt->b.debit_idx]); tempt->b.desc =StrNew(s[tempt->b.desc_idx]); - QueIns(tempt,t_root.last); + QueIns(tempt,t_head.last); } } @@ -63,9 +63,9 @@ U0 BgtDataWrite() } } - tempb=b_root.next; + tempb=b_head.next; cnt1=0; - while (tempb!=&b_root) { + while (tempb!=&b_head) { if (tempb->type!=BE_TEMPLATE_COPY) { tempb->credit_idx =StrFileAdd(tempb->credit,&num,table); tempb->debit_idx =StrFileAdd(tempb->debit,&num,table); @@ -75,9 +75,9 @@ U0 BgtDataWrite() tempb=tempb->next; } - tempt=t_root.next; + tempt=t_head.next; cnt2=0; - while (tempt!=&t_root) { + while (tempt!=&t_head) { tempt->b.credit_idx =StrFileAdd(tempt->b.credit,&num,table); tempt->b.debit_idx =StrFileAdd(tempt->b.debit,&num,table); tempt->b.desc_idx =StrFileAdd(tempt->b.desc,&num,table); @@ -92,8 +92,8 @@ U0 BgtDataWrite() MemCpy(ptr,&cnt1,sizeof(I64)); ptr+=sizeof(I64); - tempb=b_root.next; - while (tempb!=&b_root) { + tempb=b_head.next; + while (tempb!=&b_head) { if (tempb->type!=BE_TEMPLATE_COPY) { MemCpy(ptr,&tempb->start,BE_SIZE); ptr+=BE_SIZE; @@ -103,8 +103,8 @@ U0 BgtDataWrite() MemCpy(ptr,&cnt2,sizeof(I64)); ptr+=sizeof(I64); - tempt=t_root.next; - while (tempt!=&t_root) { + tempt=t_head.next; + while (tempt!=&t_head) { MemCpy(ptr,&tempt->start,BT_SIZE); ptr+=BT_SIZE; MemCpy(ptr,&tempt->b.start,BE_SIZE); @@ -120,15 +120,15 @@ U0 BgtDel() { CBgtEntry *tempb,*tempb1; CBgtTemplate *tempt,*tempt1; - tempb=b_root.next; - while (tempb!=&b_root) { + tempb=b_head.next; + while (tempb!=&b_head) { tempb1=tempb->next; BgtEntryDel2(tempb); Free(tempb); tempb=tempb1; } - tempt=t_root.next; - while (tempt!=&t_root) { + tempt=t_head.next; + while (tempt!=&t_head) { tempt1=tempt->next; BgtEntryDel2(&tempt->b); Free(tempt); diff --git a/Apps/Budget/BgtMain.CPP b/Apps/Budget/BgtMain.CPP index 7040e2c..54f8a39 100644 --- a/Apps/Budget/BgtMain.CPP +++ b/Apps/Budget/BgtMain.CPP @@ -18,7 +18,7 @@ Bool BgtPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) BgtTemplatePurge(tempt); BgtEntryDel2(&tempt->b); Free(tempt); - QueIns(tempt1,t_root.last); + QueIns(tempt1,t_head.last); BgtTemplateExpand(tempt1); BgtRegen; } @@ -71,7 +71,7 @@ Bool BgtPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) return TRUE; case 't': if (tempt1=BgtTemplatePmt) { - QueIns(tempt1,t_root.last); + QueIns(tempt1,t_head.last); BgtTemplateExpand(tempt1); BgtRegen; } @@ -97,10 +97,10 @@ U0 BgtRegen() F64 balance=0; CDoc *doc,*pdoc,*ddoc; CDocEntry *doc_ce; - CBgtEntry *tempb=b_root.next,*tempb_ce; + CBgtEntry *tempb=b_head.next,*tempb_ce; doc=DocNew; doc->flags|=DOCF_FORM; - while (tempb!=&b_root) { + while (tempb!=&b_head) { if (!StrCmp(view_acct,tempb->credit)) balance-=tempb->amount; if (!StrCmp(view_acct,tempb->debit)) @@ -111,7 +111,7 @@ U0 BgtRegen() DocPrint(doc,"$$FG,%d$$",color); } tempb->doc_e=DocPrint(doc, - "$$MU-UL,\"%D %8ts %8ts:%8.2f %8.2f:%Q\",U=0x%X$$\n", + "$$MU-UL,\"%D %8ts %8ts:%8.2f %8.2f:%$$Q\",U=0x%X$$\n", tempb->date,tempb->credit,tempb->debit,balance, tempb->amount,tempb->desc,tempb); tempb=tempb->next; @@ -134,8 +134,8 @@ U0 BgtRegen() doc_ce=doc_ce->next; if (doc_ce==pdoc) goto br_cont; } - tempb=b_root.next; - while (tempb!=&b_root) { + tempb=b_head.next; + while (tempb!=&b_head) { if (tempb==tempb_ce) { doc->cur_entry=tempb->doc_e; doc->cur_col=0; diff --git a/Apps/Budget/BgtStrs.CPP b/Apps/Budget/BgtStrs.CPP index 30284bf..d035b20 100644 --- a/Apps/Budget/BgtStrs.CPP +++ b/Apps/Budget/BgtStrs.CPP @@ -4,7 +4,7 @@ public U8 **StrFileRead(U8 *name,I64 *_max_num=NULL, U8 **_colors=NULL,Bool no_nums=FALSE) { CDoc *doc=DocRead(name,DOCF_DBL_DOLLARS|DOCF_NO_CURSOR); - CDocEntry *doc_e=doc->root.next; + CDocEntry *doc_e=doc->head.next; I64 i,max_num=0; U8 *ptr,**res,*colors; @@ -27,7 +27,7 @@ public U8 **StrFileRead(U8 *name,I64 *_max_num=NULL, res=CAlloc(sizeof(U8 *)*(max_num+1)); colors=CAlloc(sizeof(U8)*(max_num+1)); - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_TEXT && 0<=doc_e->user_data<=max_num) { res[doc_e->user_data]=doc_e->tag; diff --git a/Apps/Budget/BgtTemplate.CPP b/Apps/Budget/BgtTemplate.CPP index ea060fd..4d5dd59 100644 --- a/Apps/Budget/BgtTemplate.CPP +++ b/Apps/Budget/BgtTemplate.CPP @@ -1,8 +1,8 @@ U0 BgtTemplatePurge(CBgtTemplate *tempt) { CBgtEntry *tempb,*tempb1; - tempb=b_root.next; - while (tempb!=&b_root) { + tempb=b_head.next; + while (tempb!=&b_head) { tempb1=tempb->next; if (tempb->template==tempt) { QueRem(tempb); @@ -110,8 +110,8 @@ U0 BgtTemplateExpand(CBgtTemplate *tempt) U0 CBgtTemplatesExpand() { - CBgtTemplate *tempt=t_root.next; - while (tempt!=&t_root) { + CBgtTemplate *tempt=t_head.next; + while (tempt!=&t_head) { BgtTemplateExpand(tempt); tempt=tempt->next; } diff --git a/Apps/Budget/Budget.CPP b/Apps/Budget/Budget.CPP index 9453492..768ec25 100644 --- a/Apps/Budget/Budget.CPP +++ b/Apps/Budget/Budget.CPP @@ -24,7 +24,7 @@ class CBgtEntry U8 *credit,*debit,*desc; CBgtTemplate *template; CDocEntry *doc_e; -} b_root; +} b_head; #define BE_SIZE (offset(CBgtEntry.end)-offset(CBgtEntry.start)) #define BT_NULL 0 @@ -50,7 +50,7 @@ class CBgtTemplate U0 end; CBgtEntry b; -} t_root; +} t_head; #define BT_SIZE (offset(CBgtTemplate.end)-offset(CBgtTemplate.start)) U8 view_acct[512]; @@ -63,9 +63,9 @@ CDate MyStr2Date(U8 *st) CDate res; if (st&&*st) { if (StrOcc(st,'[')) - res=b_root.next->date; + res=b_head.next->date; else if (StrOcc(st,']')) - res=b_root.last->date; + res=b_head.last->date; else res=Str2Date(st); } else diff --git a/Apps/Psalmody/JukeBox.CPP b/Apps/Psalmody/JukeBox.CPP index 0141818..a580414 100644 --- a/Apps/Psalmody/JukeBox.CPP +++ b/Apps/Psalmody/JukeBox.CPP @@ -32,7 +32,7 @@ Bool JBPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) if (StrLen(doc_ce->tag)>1) doc_ce->tag[0]=ch; s=DocRead(tempde->full_name); - doc_e=s->root.next; + doc_e=s->head.next; while (doc_e!=s && doc_e->type_u8!=DOCT_TEXT) doc_e=doc_e->next; if (doc_e!=s && doc_e->type_u8==DOCT_TEXT && StrLen(doc_e->tag)>=3) { @@ -77,7 +77,7 @@ public U0 JukeBox(U8 *dirname="~/Psalmody",U8 **_filename=NULL) st=StrNew(tempde->name); FileExtRem(st); s=DocRead(tempde->full_name); - doc_e=s->root.next; + doc_e=s->head.next; while (doc_e!=s && doc_e->type_u8!=DOCT_TEXT) doc_e=doc_e->next; rating='0'; diff --git a/Apps/Psalmody/Psalmody.CPP b/Apps/Psalmody/Psalmody.CPP index 7bc93ee..dbea3f4 100644 --- a/Apps/Psalmody/Psalmody.CPP +++ b/Apps/Psalmody/Psalmody.CPP @@ -25,7 +25,7 @@ $WW,1$$WW,0$*/ #define NOTE_REST MIN_I64 #define OCTAVE_REST MIN_I64 -#define PSMT_ROOT 0 +#define PSMT_HEAD 0 #define PSMT_NOTE 1 #define PSMT_METER 2 @@ -59,7 +59,7 @@ class PsmNote class PsmCtrl { - PsmNote root; + PsmNote head; PsmNote clipboard; CMenuEntry *incomplete_entry,*record_entry; I64 screen_x, diff --git a/Apps/Psalmody/PsalmodyDraw.CPP b/Apps/Psalmody/PsalmodyDraw.CPP index 650f0ad..739f5b4 100644 --- a/Apps/Psalmody/PsalmodyDraw.CPP +++ b/Apps/Psalmody/PsalmodyDraw.CPP @@ -88,8 +88,8 @@ Bool PsmIsDotted(I64 duration) U0 PsmMarkSel(I64 x1,I64 x2,Bool sel) { - PsmNote *tempo=oc.root.next; - while (tempo!=&oc.root) { + PsmNote *tempo=oc.head.next; + while (tempo!=&oc.head) { if (sel) { if (x1<=tempo->x<=x2) tempo->flags|=PSMF_SEL; @@ -150,12 +150,12 @@ U0 DrawTimeSignature(CDC *dc,I64 x,I64 y,I64 top,I64 bottom) U0 PsmRecalcNoteXY() { F64 measure_len=4,measure_left=measure_len; - PsmNote *tempo=oc.root.next; + PsmNote *tempo=oc.head.next; I64 x=8-oc.screen_x,note,octave; while (TRUE) { tempo->x=x; tempo->y=50; - if (tempo==&oc.root) + if (tempo==&oc.head) break; else { if (tempo->type!=PSMT_METER) { @@ -215,8 +215,8 @@ U0 DrawIt(CTask *task,CDC *dc) PsmRecalcNoteXY; } - tempo=oc.root.next; - while (tempo!=&oc.root) { + tempo=oc.head.next; + while (tempo!=&oc.head) { x=tempo->x; y=tempo->y; if (measure_left<0.001) { @@ -258,11 +258,11 @@ U0 DrawIt(CTask *task,CDC *dc) tempo=tempo->next; } - if (oc.cur_note==&oc.root && PsmBlink) + if (oc.cur_note==&oc.head && PsmBlink) dc->color=BROWN; else dc->color=BLACK; - Sprite3(dc,oc.root.x,50,0,$IB,"<12>",BI=12$); + Sprite3(dc,oc.head.x,50,0,$IB,"<12>",BI=12$); } #define PSM_NOTE_BOX_X 220 diff --git a/Apps/Psalmody/PsalmodyFile.CPP b/Apps/Psalmody/PsalmodyFile.CPP index 61ec605..91a5165 100644 --- a/Apps/Psalmody/PsalmodyFile.CPP +++ b/Apps/Psalmody/PsalmodyFile.CPP @@ -14,24 +14,24 @@ PsmNote *PsmNoteCopy(PsmNote *tempo) return tempo1; } -U0 PsmSongDel(PsmNote *root) +U0 PsmSongDel(PsmNote *head) { PsmNote *tempo,*tempo1; - tempo=root->next; - while (tempo!=root) { + tempo=head->next; + while (tempo!=head) { tempo1=tempo->next; PsmNoteDel(tempo); tempo=tempo1; } - QueInit(root); + QueInit(head); } U0 PsmCutToClipboard() { PsmNote *tempo,*tempo1; PsmSongDel(&oc.clipboard); - tempo=oc.root.next; - while (tempo!=&oc.root) { + tempo=oc.head.next; + while (tempo!=&oc.head) { tempo1=tempo->next; if (tempo->flags&PSMF_SEL) { if (oc.cur_note==tempo) @@ -59,8 +59,8 @@ U0 PsmCopyToClipboard() { PsmNote *tempo,*tempo1; PsmSongDel(&oc.clipboard); - tempo=oc.root.next; - while (tempo!=&oc.root) { + tempo=oc.head.next; + while (tempo!=&oc.head) { if (tempo->flags&PSMF_SEL) { tempo->flags&=~PSMF_SEL; tempo1=PsmNoteCopy(tempo); @@ -72,10 +72,10 @@ U0 PsmCopyToClipboard() PsmNote *PsmFindNote(I64 x,I64) { - PsmNote *tempo=oc.root.next; + PsmNote *tempo=oc.head.next; PsmRecalcNoteXY; x+=PSM_NOTE_SPACING/2; - while (x>tempo->next->x && tempo!=&oc.root) + while (x>tempo->next->x && tempo!=&oc.head) tempo=tempo->next; return tempo; } @@ -129,7 +129,7 @@ U0 PsmLoadSongStr(U8 *st,I64 *psm_octave,F64 *psm_duration) else tempo1->meter_bottom=4; PsmSetWidth(tempo1); - QueIns(tempo1,oc.root.last); + QueIns(tempo1,oc.head.last); } while (*st=='(') { Bts(&tempo->flags,PSMf_TIE); @@ -212,7 +212,7 @@ U0 PsmLoadSong(U8 *filename,I64 *psm_octave,F64 *psm_duration) if (!StrCmp(cc->cur_str,"Play")) { if (Lex(cc)=='(') if (Lex(cc)==TK_STR) { - tempo=oc.root.last; + tempo=oc.head.last; st=LexExtStr(cc); PsmLoadSongStr(st,psm_octave,psm_duration); if (cc->token==',') { @@ -220,8 +220,8 @@ U0 PsmLoadSong(U8 *filename,I64 *psm_octave,F64 *psm_duration) st=LexExtStr(cc); do { do tempo=tempo->next; - while (tempo!=&oc.root && tempo->type==PSMT_METER); - if (tempo!=&oc.root) + while (tempo!=&oc.head && tempo->type==PSMT_METER); + if (tempo!=&oc.head) tempo->word=StrNew(st); st+=StrLen(st)+1; } while (*st); @@ -254,10 +254,10 @@ U8 *PsmCvtSong() I64 i,note,octave,last_octave,last_duration; i=0; - tempo=oc.root.next; + tempo=oc.head.next; last_octave=OCTAVE_REST; last_duration=-1; - while (tempo!=&oc.root) { + while (tempo!=&oc.head) { dst=&tempo->ascii; if (tempo->type==PSMT_METER) { *dst++='M'; @@ -313,8 +313,8 @@ U8 *PsmCvtSong() st=MAlloc(i+1); dst=st; - tempo=oc.root.next; - while (tempo!=&oc.root) { + tempo=oc.head.next; + while (tempo!=&oc.head) { StrCpy(dst,tempo->ascii); dst+=StrLen(tempo->ascii); tempo=tempo->next; @@ -338,8 +338,8 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) music.stacatto_factor=0.88*tempo_state.stacatto/TEMPO_RANGE+0.12; has_words=FALSE; - tempo=oc.root.next; - while (tempo!=&oc.root) { + tempo=oc.head.next; + while (tempo!=&oc.head) { if (PsmHasWords(tempo->word)) has_words=TRUE; tempo=tempo->next; } @@ -361,10 +361,10 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) " while (!ScanKey) {\n" "\tPlay(\"",music.tempo+0.0005,music.stacatto_factor+0.0005); - tempo=oc.root.next; + tempo=oc.head.next; tempo1=tempo; has_words=FALSE; - while (tempo!=&oc.root) { + while (tempo!=&oc.head) { DocPrint(doc,"%s",tempo->ascii); if (PsmHasWords(tempo->word)) has_words=TRUE; if (tempo->type==PSMT_METER) { @@ -373,7 +373,7 @@ U8 *PsmSaveSong(U8 *dirname,U8 *full_filename) } else two_measure_left-=psm_durations[tempo->duration]; tempo=tempo->next; - if (two_measure_left<0.001 && tempo!=&oc.root) { + if (two_measure_left<0.001 && tempo!=&oc.head) { if (has_words) { DocPrint(doc,"\",\n\t\t\""); while (tempo1!=tempo) { diff --git a/Apps/Psalmody/PsalmodyMain.CPP b/Apps/Psalmody/PsalmodyMain.CPP index 2307485..b0d6ac1 100644 --- a/Apps/Psalmody/PsalmodyMain.CPP +++ b/Apps/Psalmody/PsalmodyMain.CPP @@ -32,7 +32,7 @@ U0 PsmRightClick(I64 x,I64 y) I64 i,old_doc_flags; if (DocPut) old_doc_flags=DocPut->flags; oc.cur_note=tempo=PsmFindNote(x,y); - if (tempo!=&oc.root) { + if (tempo!=&oc.head) { Fs->win_inhibit=WIG_USER_TASK_DFT; i=PopUpDuration; if (0<=ioc.root.last->x) - tempo1=oc.root.last; - else if (a1x) - tempo1=&oc.root; + if (a1>oc.head.last->x) + tempo1=oc.head.last; + else if (a1x) + tempo1=&oc.head; else tempo1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); tempo=CAlloc(sizeof(PsmNote)); @@ -172,10 +172,10 @@ U0 PsmLeftClickPickMeterBox(I64 top,I64 bottom) } } while (msg_code!=MSG_IP_L_UP); if (a2<13*FONT_HEIGHT) { - if (a1>=oc.root.x) - tempo1=oc.root.last; - else if (a1x) - tempo1=&oc.root; + if (a1>=oc.head.x) + tempo1=oc.head.last; + else if (a1x) + tempo1=&oc.head; else tempo1=PsmFindNote(a1-PSM_NOTE_SPACING/2,a2); tempo=CAlloc(sizeof(PsmNote)); @@ -194,7 +194,7 @@ U0 PsmLeftClickStaffPtr(I64 x,I64 y) PsmNote *tempo,*tempo1; I64 o,n,msg_code,a1,a2,n_original,o_original; oc.cur_note=tempo=PsmFindNote(x,y); - if (tempo!=&oc.root) { + if (tempo!=&oc.head) { if (tempo->type==PSMT_NOTE) { n_original=tempo->note; o_original=tempo->octave; @@ -202,7 +202,7 @@ U0 PsmLeftClickStaffPtr(I64 x,I64 y) msg_code=GetMsg(&a1,&a2,1<word); @@ -420,9 +420,9 @@ U0 Psalmody(U8 *dirname="~/Psalmody") MemSet(&oc,0,sizeof(PsmCtrl)); oc.screen_x=0; - oc.root.next=oc.root.last=&oc.root; + oc.head.next=oc.head.last=&oc.head; oc.clipboard.next=oc.clipboard.last=&oc.clipboard; - oc.cur_note=&oc.root; + oc.cur_note=&oc.head; oc.dc2=DCAlias; MenuPush( @@ -569,29 +569,29 @@ mo_got_msg: switch (a2.u8[0]) { case SC_CURSOR_LEFT: if (a2&SCF_CTRL) { - while (oc.cur_note->last!=&oc.root) { + while (oc.cur_note->last!=&oc.head) { oc.cur_note=oc.cur_note->last; - if (oc.cur_note!=&oc.root) + if (oc.cur_note!=&oc.head) LBEqu(&oc.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); } } else { - if (oc.cur_note->last!=&oc.root) { + if (oc.cur_note->last!=&oc.head) { oc.cur_note=oc.cur_note->last; - if (oc.cur_note!=&oc.root) + if (oc.cur_note!=&oc.head) LBEqu(&oc.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); } } break; case SC_CURSOR_RIGHT: if (a2&SCF_CTRL) { - while (oc.cur_note!=&oc.root) { - if (oc.cur_note!=&oc.root) + while (oc.cur_note!=&oc.head) { + if (oc.cur_note!=&oc.head) LBEqu(&oc.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); oc.cur_note=oc.cur_note->next; } } else { - if (oc.cur_note!=&oc.root) { - if (oc.cur_note!=&oc.root) + if (oc.cur_note!=&oc.head) { + if (oc.cur_note!=&oc.head) LBEqu(&oc.cur_note->flags,PSMf_SEL,a2&SCF_SHIFT); oc.cur_note=oc.cur_note->next; } @@ -603,7 +603,7 @@ mo_got_msg: else { tempo=oc.cur_note; oc.cur_note=tempo->next; - if (tempo!=&oc.root) { + if (tempo!=&oc.head) { QueRem(tempo); PsmNoteDel(tempo); } @@ -650,11 +650,11 @@ mo_got_msg: oc.screen_x=0; psm_duration=1.0; psm_octave=3; - PsmSongDel(&oc.root); - oc.cur_note=&oc.root; + PsmSongDel(&oc.head); + oc.cur_note=&oc.head; PsmLoadSong(filename,&psm_octave,&psm_duration); oc.record_entry->checked=FALSE; - oc.cur_note=oc.root.next; + oc.cur_note=oc.head.next; } PsmPushMode(psm_octave); col=0; @@ -680,12 +680,12 @@ mo_got_msg: filename=NULL; psm_duration=1.0; psm_octave=3; - PsmSongDel(&oc.root); - oc.cur_note=&oc.root; + PsmSongDel(&oc.head); + oc.cur_note=&oc.head; oc.screen_x=0; break; case '\n': - if (oc.cur_note!=&oc.root) + if (oc.cur_note!=&oc.head) PsmRightClick(oc.cur_note->x,oc.cur_note->y); break; case 'x': @@ -695,7 +695,7 @@ mo_got_msg: oc.playing=TRUE; PsmMenu(psm_octave); tempo=oc.cur_note; - while (tempo!=&oc.root) { + while (tempo!=&oc.head) { if (tempo->type!=PSMT_METER) { timeout_val=cnts.jiffies; if (ip.pos_text.y-Fs->win_top<18) @@ -748,7 +748,7 @@ mo_got_msg: } tempo=tempo->next; } - oc.cur_note=&oc.root; + oc.cur_note=&oc.head; oc.screen_x+=oc.cur_note->x-GR_WIDTH/2; oc.playing=FALSE; PsmMenu(psm_octave); @@ -758,7 +758,7 @@ mo_got_msg: break; case CH_BACKSPACE: tempo=oc.cur_note->last; - if (tempo!=&oc.root) { + if (tempo!=&oc.head) { QueRem(tempo); PsmNoteDel(tempo); } @@ -860,7 +860,7 @@ mo_done: } catch PutExcept; PsmPopMode; - PsmSongDel(&oc.root); + PsmSongDel(&oc.head); PsmSongDel(&oc.clipboard); TempoDel(c); Kill(play_task); diff --git a/Apps/ToTheFront/ToTheFront.CPP b/Apps/ToTheFront/ToTheFront.CPP index 5cb1f78..f322e1f 100644 --- a/Apps/ToTheFront/ToTheFront.CPP +++ b/Apps/ToTheFront/ToTheFront.CPP @@ -641,7 +641,7 @@ class IndirectOrders IndirectOrders *next,*last; Unit *attacker; I64 row,col; -} indirect_root; +} indirect_head; U0 PlotShot(Unit *tempu,I64 row,I64 col) { @@ -653,7 +653,7 @@ U0 PlotShot(Unit *tempu,I64 row,I64 col) tempi->attacker=tempu; tempi->row=row; tempi->col=col; - QueIns(tempi,indirect_root.last); + QueIns(tempi,indirect_head.last); } Bool firing=FALSE; @@ -798,8 +798,8 @@ U0 IndirectFireResolve() F64 x1,y1,x2,y2,d,dammage=0,range_factor; Unit *tempu,*target; Bool hit; - IndirectOrders *tempi=indirect_root.next,*tempi1; - while (tempi!=*indirect_root) { + IndirectOrders *tempi=indirect_head.next,*tempi1; + while (tempi!=*indirect_head) { tempi1=tempi->next; tempu=tempi->attacker; RowCol2XY(&x1,&y1,tempu->row,tempu->col); @@ -1303,7 +1303,7 @@ U0 Init() Fs->horz_scroll.pos=0; Fs->vert_scroll.pos=0; InitUnits; - QueInit(&indirect_root); + QueInit(&indirect_head); turn=0; fire_radius=0; show_visible_row=-1; @@ -1315,7 +1315,7 @@ U0 Init() U0 CleanUp() { - QueDel(&indirect_root,TRUE); + QueDel(&indirect_head,TRUE); } U0 HandleChar(U8 ch) @@ -1543,8 +1543,8 @@ U0 DrawIt(CTask *task,CDC *dc) GrCircle(dc,fire_radius_x-h,fire_radius_y-v,fire_radius); } if (Blink(10)) { - tempi=indirect_root.next; - while (tempi!=&indirect_root) { + tempi=indirect_head.next; + while (tempi!=&indirect_head) { if (tempi->attacker->player==view_player) { RowCol2XY(&x,&y,tempi->row,tempi->col); Sprite3(dc,x-task->horz_scroll.pos,y-task->vert_scroll.pos,0,$IB,"<5>",BI=5$); diff --git a/Apps/X-Caliber/X-Caliber.CPP b/Apps/X-Caliber/X-Caliber.CPP index bfc7cca..41e155a 100644 --- a/Apps/X-Caliber/X-Caliber.CPP +++ b/Apps/X-Caliber/X-Caliber.CPP @@ -71,7 +71,7 @@ class Missile Ship *owner,*target; Bool active,launched,exploding; U8 label[5]; -} missile_root; +} missile_head; class Ship { @@ -86,7 +86,7 @@ class Ship F64 laser_temperature; Missile missiles[MAX_MISSILES]; Bool lasering,exploding,laser_overheat; -} ship_root,*human; +} ship_head,*human; F64 human_t_left,human_t_right,human_antispin; @@ -97,7 +97,7 @@ class Shot F64 fuse_time,die_timeout; MyMass p; Bool exploding; -} shot_root; +} shot_head; #define MAX_THRUST 200.0 #define MAX_ANTISPIN 25.0 @@ -211,7 +211,7 @@ U0 MissileNew(Ship *tempsp,I64 n) } tempmi->img=$IB,"<7>",BI=7$; tempmi->active=TRUE; - QueIns(tempmi,missile_root.last); + QueIns(tempmi,missile_head.last); } Ship *ShipNew(I64 x,I64 y,I64 type) @@ -365,7 +365,7 @@ Ship *ShipNew(I64 x,I64 y,I64 type) remaining++; break; } - QueIns(tempsp,ship_root.last); + QueIns(tempsp,ship_head.last); return tempsp; } @@ -438,14 +438,14 @@ U0 AllDel(CMathODE *ode) { Ship *tempsp,*tempsp1; QueRem(ode); - tempsp=ship_root.next; - while (tempsp!=&ship_root) { + tempsp=ship_head.next; + while (tempsp!=&ship_head) { tempsp1=tempsp->next; ShipDel(tempsp); tempsp=tempsp1; } human=NULL; - QueDel(&shot_root,TRUE); + QueDel(&shot_head,TRUE); ODEDel(ode); } @@ -502,8 +502,8 @@ U0 DrawIt(CTask *task,CDC *dc) tempsps=tempsps->next; } - tempmi=missile_root.next; - while (tempmi!=&missile_root) { + tempmi=missile_head.next; + while (tempmi!=&missile_head) { if (tempmi->active) { if (tempmi->launched && tempmi->exploding) { d=(tS-tempmi->fuse_time)/(tempmi->die_timeout-tempmi->fuse_time); @@ -524,8 +524,8 @@ U0 DrawIt(CTask *task,CDC *dc) tempmi=tempmi->next; } - tempsp=ship_root.next; - while (tempsp!=&ship_root) { + tempsp=ship_head.next; + while (tempsp!=&ship_head) { if (!tempsp->exploding) switch (tempsp->type) { case ST_HUMAN1: @@ -678,8 +678,8 @@ U0 DrawIt(CTask *task,CDC *dc) tempsp=tempsp->next; } - temps=shot_root.next; - while (temps!=&shot_root) { + temps=shot_head.next; + while (temps!=&shot_head) { if (temps->exploding) { d=(tS-temps->fuse_time)/(temps->die_timeout-temps->fuse_time); d=7*Sin(ã*d)*temps->explosion_radius+1; @@ -715,8 +715,8 @@ U0 DrawIt(CTask *task,CDC *dc) human->p[0].x-800*p.x,human->p[0].y-800*p.y,0,&LaserPlot); } - tempmi=missile_root.next; - while (tempmi!=&missile_root) { + tempmi=missile_head.next; + while (tempmi!=&missile_head) { if (tempsp=tempmi->target) { dc->color=LTRED; GrCircle(dc,tempsp->p[0].x,tempsp->p[0].y,10); @@ -759,8 +759,8 @@ Ship TargetGet(Missile *tempmi) I64 i; CD3 p,p1,p2; D3Unit(D3Sub(&p,&tempmi->p_front.state->x,&tempmi->p_back.state->x)); - tempsp=ship_root.next; - while (tempsp!=&ship_root) { + tempsp=ship_head.next; + while (tempsp!=&ship_head) { if (!tempsp->exploding && tempsp!=tempmi->owner) for (i=0;imasses;i++) { D3Sub(&p1,&tempsp->p[i].state->x,&tempmi->p_front.state->x); @@ -821,8 +821,8 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) tempm=tempm->next; } - tempsp=ship_root.next; - while (tempsp!=&ship_root) { + tempsp=ship_head.next; + while (tempsp!=&ship_head) { if (tempsp->exploding && tempsp->die_time<=tS<=tempsp->die_timeout) for (i=0;imasses;i++) Explosion(&tempsp->p[i],NULL,tempsp->p[i].radius/3.0); @@ -886,15 +886,15 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *) tempsp=tempsp->next; } - temps=shot_root.next; - while (temps!=&shot_root) { + temps=shot_head.next; + while (temps!=&shot_head) { if (temps->exploding) Explosion(&temps->p,NULL,temps->explosion_radius); temps=temps->next; } - tempmi=missile_root.next; - while (tempmi!=&missile_root) { + tempmi=missile_head.next; + while (tempmi!=&missile_head) { if (tempmi->active) { if (tempmi->launched) { if (tempmi->exploding) @@ -981,8 +981,8 @@ U0 CheckDamage() } } - tempsp=ship_root.next; - while (tempsp!=&ship_root) { + tempsp=ship_head.next; + while (tempsp!=&ship_head) { tempsp1=tempsp->next; switch (tempsp->type) { case ST_HUMAN1: @@ -1071,7 +1071,7 @@ U0 FireOneGun(Ship *tempsp,I64 n,F64 r,F64 fuse_time) D3MulEqu(&p,temps->p.mass/tempsp->p[n].mass/100.0); D3SubEqu(&tempsp->p[n].DxDt,&p); QueIns(&temps->p,ode->last_mass); - QueIns(temps,shot_root.last); + QueIns(temps,shot_head.last); tempsp->reload_timeout=tS+r/tempsp->fire_rate; Noise(100,r*200,r*400); } @@ -1138,8 +1138,8 @@ U0 HumanFireLaserEnd() U0 ExpireShots() { - Shot *temps=shot_root.next,*temps1; - while (temps!=&shot_root) { + Shot *temps=shot_head.next,*temps1; + while (temps!=&shot_head) { temps1=temps->next; if (!temps->exploding && tS>temps->fuse_time) { temps->exploding=TRUE; @@ -1157,8 +1157,8 @@ U0 ExpireMissiles() { I64 i; F64 dd,best_dd; - Missile *tempmi=missile_root.next,*tempm1; - while (tempmi!=&missile_root) { + Missile *tempmi=missile_head.next,*tempm1; + while (tempmi!=&missile_head) { tempm1=tempmi->next; if (tempmi->launched) { best_dd=MAX_F64; @@ -1185,9 +1185,9 @@ U0 ExpireMissiles() U0 AI() { CD3 p,p1,p2; - Ship *tempsp=ship_root.next; + Ship *tempsp=ship_head.next; if (human && !human->exploding) { - while (tempsp!=&ship_root) { + while (tempsp!=&ship_head) { D3Sub(&p1,&tempsp->p[0].x,&tempsp->p[1].x); D3Sub(&p2,&tempsp->p[0].x,&tempsp->p[2].x); D3Add(&p,&p1,&p2); @@ -1223,9 +1223,9 @@ U0 Init() score=0; level=1; - QueInit(&ship_root); - QueInit(&shot_root); - QueInit(&missile_root); + QueInit(&ship_head); + QueInit(&shot_head); + QueInit(&missile_head); for (i=0;idata,dbg_info,size); tempb->num=doc->cur_bin_num++; tempb->use_cnt=1; - QueIns(tempb,doc->bin_root.last); + QueIns(tempb,doc->bin_head.last); } else dbg_info=NULL; } diff --git a/Compiler/CInit.CPP b/Compiler/CInit.CPP index faf30c8..20ef80d 100644 --- a/Compiler/CInit.CPP +++ b/Compiler/CInit.CPP @@ -133,7 +133,6 @@ CIntermediateStruct intermediate_code_table[IC_NUM_ENTRIES]={ {IS_1_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"SET_RSP"}, {IS_0_ARG,1,IST_NULL,FALSE,TRUE,0,0,0,"RIP"}, {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"RDTSC"}, - {IS_0_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"HPET"}, {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BT"}, {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTS"}, {IS_2_ARG,0,IST_NULL,FALSE,TRUE,0,0,0,"BTR"}, diff --git a/Compiler/CMain.CPP b/Compiler/CMain.CPP index ec76805..9b2e746 100644 --- a/Compiler/CMain.CPP +++ b/Compiler/CMain.CPP @@ -8,8 +8,8 @@ U8 *LexStmt2Bin(CCmpCtrl *cc,I64 *_type,I64 cmp_flags=0) COCPush(cc); COCInit(cc); if (!PrsStmt(cc,,,cmp_flags)) { - if (cc->coc.coc_root.next!=&cc->coc.coc_root) { - cc->coc.coc_root.last->ic_flags&=~ICF_RES_NOT_USED; + if (cc->coc.coc_head.next!=&cc->coc.coc_head) { + cc->coc.coc_head.last->ic_flags&=~ICF_RES_NOT_USED; ICAdd(cc,IC_RETURN_VAL2,0,0); ICAdd(cc,IC_RET,0,0); if (res=COCCompile(cc,&size,NULL,_type)) { @@ -24,7 +24,7 @@ U8 *LexStmt2Bin(CCmpCtrl *cc,I64 *_type,I64 cmp_flags=0) } } //TODO: else del misc? } else //TODO: too dangerous to del Misc? - QueDel(&cc->coc.coc_root.next); + QueDel(&cc->coc.coc_head.next); if (cc->aot_depth==2) { tempcbh=COCPopNoFree(cc); COCAppend(cc,tempcbh); diff --git a/Compiler/Compiler.BIN b/Compiler/Compiler.BIN index 1a5fe2e98aa735b59422741fcb5c5a3c1cd56e07..a1dc71a5e2539eb850308dabefc01ac30e444515 100644 GIT binary patch delta 45014 zcmccklzZP(?wr?h3=ARu!A}1npx%BD69Wh|e1*^f3=9lW3=9k@3=9m-3=9nO85kIL zGcYh*XJBCX%)r3F$iTqI$iSeCgmoDi7|a!oJ`WC#vsU;wcg7!K#9GcYrRLd8HV zh!_i_rv*eEhy@dK%FoYX2xeel47JE)V8}}cF&G#?B5X{ahGv-{A$F!v5G$C0frG`< z*a$4f$r1`;1vAt$aB+B=nScekIYL3KUM&D{|*}e0hA9i3*_J@X#Ce8KFEHUf=?g;sAV7xzhHc*0wxiV zC<6l{)B%D>e2|P78ea;HF9+u{f@4`rgnglH=yxbM8N)M zV1QZBj!*!$pc{?f59PxgI2nyU7s_X1WClB6IU0XG8h?8|n!p}3{s}bx1t=dJfeZ`` zH=%r(2OgpEU!n0o!1+vIBkF&k3H(RnbBcmJ!ob7`(IAY*mqz0&qw%%T_{OOG$<{oI z^`xYi8C<%0|d;qOpB$T=YXA1EKh z24MyNDvk^|v7C?AySLHsrtA5;c{1iGLC zFdt4p<4;E8Pe#@B0XcB| zf|?L8VUX(>7#L#E_!(&YLNtCO8ow9Dhq#Ji78-vUlwS|3-9UD3g9^a-2cdkJKQEy1 zAE5ESpz)a`AU1>agUlB}<4ZyK^$aitiVy)fUjvP=kH)t|{c>pBehsK|V#-E4AUk2iX(jd%$bszzxHqJIQ{$3a# z6h{mU3`fxTC(!t3(D)b8_*W$u800`MhcjY~ z85mxGv}7r>4xGCJ#QhKF za?3C}RRBdGY_h z$8pXV|Nn#h<8fT<#sB{Y&M+_-|MzJAFHo!H!N1s+?ZyB9#nK+#PoMw)@A3cM^Z);S zx)1m;|9SrZzhj4m$N%H6FJv)f34lYyqw@_&)$yIrVJ02}u?$d6-1Zz|;#6Ib;{Sax zBiEo9nK6e2>I0AN4<4PSc9Tuyr!lUZd|E!0F<`Qxf+nNh=4b^6M&|$j?I+Ju)MiYa zd`eM?F=g^wMJ2}U$pT99jD?d8lq49dCVMIw3AQT1Olv+Ok;RbFwYf)0pONW<^5nhB zu1w#RC$p#&GwzyPp`yZgV)9%S8OAe{cd1A*U00cWO(l=9Z?dbZ5#y@K6{?1eJ0`DE z4HH*lNLOND2=(ZGlf?-3dq5Ur#xK>$;%YvOj+0Z=!WsJ}?@*5Yqy?GLFe3IEyJm2}yy%OG%IdRfGbtDa;v$NQyLG zeqmtXgqd$K`JslQye*QvL|StllRznFRx~&uUn^xeOjgtsR`)?tqmU7(#lYahzuk?= z^WX~(;{zM`J(UjxWHDvLPL9@;cTdm)`OZfZhg%dIesafC3yvL@A3QBMU`D zAd4X*Z}UM-MMl{P?4azxz~Iw;!n6C3$H50Ip3Db5{ugj$F=ecr{9j9raoc1yZ6$%D zx=3N@v17vYxC@Mu+zw2h%|94RRA2&=r)nE!UPV@##o*EF<`eMZ+VB7Wvlud-BFlOF zFEe=Y_SgUa{JYX5WQswq`iw09%}qj}1SHC$hh+ITHwgu>sOV&U9Z_9XG&v5ioEe%Z zBUsdJa-oiBbQqeP16VEdBKwXllgVU z+@_*S3WFu*qYKM{g;$^pD}aSJP0rR;X52HmUssy()a2E=(oEO&HlNVtVljPY#K7Pg z3{G1ftp`fBm3u9|Nn=- zkew{&@{X00fq~(`WKmaRahw03lK+B7>$g%t&#)KUU;h8^8TR7A!byHvxcyH>&1_=)2&Hb&20_y3-jNBDasm>3wsUr0=z?WSt@ znUR6Pv-xife`^CHNc7PskToxSdL8b0Hvb6cZ}wwkVDRGKFXKAf0~B^ACVzAj(Pntr z@c;jR&+a3h|BryHqhpT87}Q^8V+tlrHgFfIk9p~cDW&vM2UAexr8uS_*Gnc$LEe{d z|6#a+^W}|y|Nr|MU-C7+?b-aBsWu_}#mA46m%3XUO8a&n@&uJ7-3L6GkNWfmoO}&R zM)?v7uRZ@Cemx7>H?AE5FC!*%dq^?bPFC|!uNVCXiV~}jps)d@Ko$NLrhlOH;vN8M zntAZ=%9l`h`Tj4edt5s-Uf%xu|G(ogHU^OC@t$#>v7RxW(VkK9aVHNcFoZDJGD4sz zoCV?AGBO~E)WZZRq4z=!w1?7KP&yMzBb!|Z6`Rap%eaEURt)UQy$rbwdI}1VTGylT z&4bAio@$zGA3%Zfz_f1*MXio}h}rkp8yPj9cnww9LULundym%NDCQtMd z5wLlg1xg6bf0#?f^|oS+nVjLR;|~!B z+3C^gX5i5s`@^F%&I0T_Mh1qLQbG(2KAovQJepm9TnKw{@a_Nq9?d@zYq&g`e^k}8 zcr+h);M4uUv-wX%X;s*ZMQmAqdJmf1FDF!d@s%PV#YQRGGZWCsg8` z0LVjiZ@?k*dcJ4#AH7oXuot*%=H{& z*o&i+5BO@bM!0-)JvaG{Z-C7NevqLK5XCPm|AVTiJP9G=|FH1%=yg3GkTHRQfx)A< z7wqM*7dyX$ta&k6AjFVSVe%?JX<@KLIJh+SVa)yE^3C=9a z{Fj5jw}KI5r`IcxArCxS5Ae67fy;|O>ZLEEA*>kwRzwf=77fqlKPsiNVK4r?n4A-!s8$CmZJPh6mnek2IP(G)A|-;J zATjQYec(jQJ9%?}7GuEVdjT%GCO`iF2j__g-~fmW1O-6Yi;v(aIpEp&12kw`@-m5s zfg!_avVWkpuKDNx|6hw_F=jDjF+idyAUx~^<0nwz!vLz6R(%I0O+N{NuouOXw+A{i zrceGIXvAnTSuaRR0u-~J-A6tDANA=z;LCi_@fbr4IFlp<$uK>AHn}cHj8S3o)F4$c zbd|0h3SloMO}-E$u3PmC>@&~iKl-IIVK1^F+#Mj>J(3Uj@Gn*2=Q$Gqg)yt_9FMo z|NkDX2TET)=ucj z#I$sIM>_zq?OtTe0#(>P8&IU4@9b~rE$B#&6Td^UVeeL7_ z|KOG-FQ}-J1r=42Yzzz@&EN#kGkHR|zCp`JgqvO3qYbUQ$f>@h`?`s4+$XtmTIUXP-MS6!VGeh4M+&& z^DSVm(k=!DPzlz$l$n7c!z~e{Ash;bK7sAq6H(2$KiVnv*xg znes3QJ^l~kSu!vPP2L!1!Uf`h@Z^ZNB`vDdF(o5R&Ry?*`L_jSbU*RPW&7bd8ADF1-Km(1bJ5Ed%= zgaefi;idVqnXtcPpU1HkCO!Fnf~ef}&vO4Ai;Gi>N)+4@Gjmc?6c|DxLiC~-V$?Mi zswXqDT1*!&U=)}fmMG5NnglAf&P*;z%wU|d`EDX3qo~-$|NlK0kH7rIz`*d$O~9eV zC+r2&NWIR?Zk!7;Mt}3Q%yMP{+3ElP zdvrT+cvv2<&+zExogAAxM;0o2G-xrT?Y@ zpZ@;`SN|S6ZcN^sr_RW*`F0)`Bjei1&+-)+*H7js$hF?q2yR`x`1AjNAVh8R5e3ix zM_*sdV#wHyMN-0}*N-hQi!o#GVXj0Ll173nf2f>@jH7TscGN^P3lSR>5&TFNs# zi!mb$%$xk8M4d5zvOuXUW65NJQjy6{rJESHPySk3#Q0-#M%e;J#@~}UE3}yynkSo8 z9AfmJ{IjBqF=%s3r3fQq{^Xfex{TG6k5}n2Hcb9j<;u8zvQ71D_D{_q$NEpcS1ryM zG}*CMWHMI`k6d^QXw;_k1tcK4K^d99g#*;N%3{n&0W0&U5n{{$v+`>M7;`}^ftT~Z zqdjIG&Br*h7&D4Mf|GaD7&2CXS^sL(7;8W*j@MG2Az6$W4U-*fOBh=~LL#rTGde-G zcDr5xHA_JQFgqqY)(UfLymt2Ze=cKp3j@RCfKnyaz$~VW6Cjz%W_2P`r&~boKU4>5 zfq3wP2BtjzAIoCQ&~BY9SSmcZyiSP80K%MCC%|M1W(vN12TCvhVeYg7i%x!C=gZ^( zVu}c7XSlX9FnDyko`AWfWO8i16iaz4k|SCsFRC|TY@f{7ATs%Ny(nY%WX1+@#{S8S z4Z^GvSqvEyHybv5V_{WrD$!7ztkbF>sMCftu#&})5jHut)l@7NNmRn)|FPG{vlucG zCa-9%7vyM1)nGK)qRmvy5=j)S;b;~^hRx*Ww$)5$xHcQKPiJNS(F+O{m&xaPw8R+t z5Qa!(2=*~Bc!s@boXpqjFRO$s1!M+scQxbZ$!dM-OdDrU_U{v8;_RQC z-ZwFY`!fSW7GoAu*o#O1K;`J~PhdWC*o#Y`o?~w>sG}Mf_Tsk`BS;-f*o$2t@&Bb7 z9&ovSGq7CPi+Nxp`dz_Xwy+m{VE*~ZG5u|_9sd~_vKX>B!d`s;3mVS?jc&mV&zbzc zUz#ysvh)N+6}|tA3_jftd@b+PNoO%+Je!E{ut3I-iJt2AL)Zc=324 zs1W?%al8%Oj%5IO)pQF;%uN8)Bxq@8VPF6?6+zvP67Gxzvp_1A_JeKSIr;n)G3%dT zp~iktOupRw|38vyw%H)nY5kyz{x1)IGY<=7z$8~;HYfn6Pga=v&@q^h!b@MM(B-_zoznv>D|7z;_xxYR0giJ}AA&oh3+&OV9?<-VX(UKK3?kcH zCt$_jDhTeKo}4T+!%yu~HYnCzH-H9{A!=F=lyGM(0-Nx@8*IY4?8$92%*5n2Kw=ph zV+X)WW>3B}!`jysWXk{26JQgB>Xg+9fCBvzSeacnD4i@@|NsBXoZtWddj>&O zhRp*vt38|l3i9_(1SRkt4<<*=jNzM;_5VL?h;+w=$wy{dGKOycH`9)Z@#$vUIqr;% z`kPzlx-&ACZ$3LukJ0RF5x6Z2iu0I7|Np%vRwaS`DG6Ujs?ywgP zlOL`UVdq!_lFi@zXO%xA`@i*|9Cv1N&>C}5|2hBvzkJ069)gIH@aT-w2!CNcdEOdv zS!Ixn`F~I;;${FUW<2?~fmK+9zhIwyX^kzT<79!g_U!B%K&D-o9JW@US6~BZaP)o| zs3-0|dD7Z^#_N-r)*Uhvnf3qwOAC-$&GiCWrRm`>m}Y^}O}zj#-6(=J)|Z0PUA%%v zXIw=1i~Ey*t@C1>GTC*#Iu0iOZ3bC8d9vh&35*jquiEg2k)r@C zB))m`yiM|q96Ppy$J3WhKDzli=LHC7d;a8Oo6RP_-g1!h1ym#tB(nMSR$WF8h8u40 z1UE<6i-Q&a|G&;ePH6K^gMxl@)a11%r`dGYK}v(>9~vdx8C$_p>`|a>kY5KP1FwSQ zKY$7+%@Xd6<6s5PB0*Aqlj~0zvEKxXET6pNl)2p9+W-GwvVf|?W=OVr50;DoD?c!q z_jDi6q%$DP_eT8xpRs)M^3%@Jk7_^`fCgtl`EWH@Iw1mN{)x$~XIgoGT?T157Y-6J zn>_tYlH%p+|Nnivk9am80O^wCZ}w(_l-#a7S3prPf3nnB1$MhDAboO^9nU(|dsf5j z&?)T?dtp`m|NrZDke5JKhJzLE2m@K5Q2qb^%UDp`sBHy2W2S)>Obh$}-(v@4HS+&@ z56kus3=9k<+!<|P*$R+sH#?+Yn*$a~1)I3_;{X4Xna)YDZvzY3OjbN+q<90&W(Mg2 z%>yYFfd->E>bNt$gC$;tPA)m8&MR^ikNNs4~4SpZws02zv!sC~@-d3-*ltldUgGF_nNN^t!+juYy2k z29^K+|FR!6ojC_AdL`)p|CgY(DH&_Q{3Ah=XI^xYeOCr4ZLLbAK$S2DBLhQ;K*m0> zl9b6mE*h|30JC)`>t9Odcm-x34xBveQmE{$(*OToOM&AHRCJyOak(>?uYrOmU^CC< z=`7Ztb^iZUTRM~P zU5{m~o@{f&g3)nu>5YEI4U<`K8Zy>RHoqy$=&(8TW+NlhJczKh7fg$amy{Qm>iq=DN9~{f z{|8Ml#U7GixHyZ8mjN1gl;}+tY-AFiEb~;AJ?=RucrQ)%cxo*ts__4R7Gst`*bC>ypcbFU ze^Vxq5JQ$h*b9Tn3!hrn?~{Wmd9w(rWHm?#tmG!B#p2~_eA{s|<7+2S3*NL3BFPx` zVh>1C*Y%rI$o~>Guv`&H4s6{5m|5{4A+TA!U?I;Skjhetuotz9K!IBShO3h^Fm*$KUCRe{y;hXyg)I>QBN^{{aI3}-sDJRK1|NsA& z-$ApSoVFPU6Yf7aO#jXVIRiONUxP#-VftY5oi}d6t1ZAS{6iq|PH;4BpKSW}j@a@U zAj3WWm%ey0XU6~k8E4)xFl1bwto|;QyYxM%J60<2Vz24s>F+cdIVK-`m%#4+5#&GZ z$r|s~7>g$Rzcd7nK8w)&* z`2YXqEYQ?Uceq2?i))i#zn77004s1c`Tzel*Ee?ojuIA+?)reR7YipVd=M3VYY$4l zH$Z0bW=sMrfJP;=M4)&!9{pJ9*8A zZuWJbKu#B(Z1>T?`~aAJ&j{T{t8kcUdL`T$m%yra7=b!Ox5Hk@hEG=fAR>}!2U2qZ z;+`j9C2f<>eAHGr5eAX~IYqBz4%i88LZB`a$O&7f{r^9C;|IOTuAhoD(ta^Oy8RyD z@wig%jQn39w>24pBGOF(WHejYi-(i%f0EFdi=lWiSg{jWv7dnl|29UbhPjiKKdbX@ zVqjpX5rWi+J0^#J*7D&K1jTZeO4tjVsURnUlZt2a0RxY2*-rxh|9f^yfSvnH0IaSc z?1jiw5X1B`*V-|DR3&yFSg8T90v!C@D4^RI4S%EQVvfLLjhi*`F%m&AKKoyy2$BMK{S!ed!Cik)>-sTR<$e9hC0}wC|4jvFj}2K29^IAv zpqzgIl=A~T{+DjZ;sMPwGkuL@%$^+c)x=G13aD4qW&v8%03IfB>0w~-I1Uy7iG{r| z1_^Y!t_XV(1ybAXy29gsfx(N%_d%Zj;Q7DE;KlXH*S>}@woKOkrXsB{8RS`za25k7 zuF@xg9kU|rh3n+3Z;B$uLI3~1=Fa#EcJK~eP%vDWJnx$pi-wk!bAkvax>DxM>)fdtpov}MSy61I(WdN zteh~@Nmk4HnmK%e{tUzOhiklbz^k8Hc zV`pS&Jlrw))2}4KG~fUKUv6P!V0ba@KPY^{Ca3=HsaN7;WC(i^qVfO#e{kO)CEB{ zdy&@zYUrd%h!v}*{ci(J`M#C`tCi*W|6kUl+x3PAR54fB3#Xp{|I_}rJpv~h-O0Uw z9EEqVgKCj-aMk$)JRovy^20wy^|Ly`j{M=#cz}U{hXIrhC0?|4{{L@$U<2bz3r^4k zXPp8=tvJ{+AFwH93ZTSO(Eb1aYf-SUE|PF0*l=&}|Nmb`F@gpFJ^q_Qkg0R10Dfk zFSeNd|L+;;*~ti6fhO|uIRgXOz}KMRr%qR}foWI_+|&g!(RGLCWTAf=jFpqE|0&n2 zg4A{Q9ROF@hM+L_?)v}#wLjR09H^39VK4MRl1AWYQ!R#s&SOvzmw|(rA0!J-)uv~_ z5nUSg;#Vgq!MySO|KGFOnx&TA^EfkToYnZi2Bw!??5ve$P<|FemRZ;fgLaTll&1GHGU~DSfbFfHeuR;69miZwP%e{Vo?gYoXvw}2 zEY&%E7ZYQkVhQ8_{~o>W4q)@a=0LP>#Oc7Vu3&&QFV~nTQGBZjuicg=(%$Qk!6l}4j!vFs-+ZY%a z9KX4HFo70&dIouhXYqx-nA-CH|Lc5^Fh_|fXjIM>)0 zSFtc^FzQaf%)+QAcMlwRs~8#nKSoJhzQ#|&UQC!S&&sGd-GPmfjs2q>$gs%ip{$Gw zj26?&SQ#~W-MB!d*G#Ys-mjC+)>RoV!y;#}=Z%ZbD1i|&kgeH(- zO-`Vq{)p%QGobVU?$Lv)y)dw;-(^8c;+_8ge|;O2(qD6Dq=6;w$!xY1_7tcXq)&1i& zlkxws7fI6(3Np&E6cy_+Y=11s7|qC7HQipAQBKlK5|m1Q@`H_)29c&xATo4%nJ}Z7 zs+4<$3hF9ta3~;XXZBj4|C{dGr7O9{*im zyuJ&cwg@Q#Et3IP?UTj-|9=S@?+AO*Ar5NCT$+ASlu=~+KQTsbM#gp1xg;1}`J_P+ z5AxfOfUp;K(_JzdHSk z45Kl799T$qx}Gd!3QsARa|k4@HGRG;<7WRVB~Suj0`*#+fLx?iYU%RL_2vH(p0F3c z!4a$rCVe$QZ3=J~+w=bs@F?>Smb$YUJz)I@S^ocjeIV?G!t@1lj3SIe)3?eoDl+Cz zzb?mUY`;eXQUEmn&?@21m28%u4nTPrs8POSZkynsP1S`1=V{Ke2xD*ZdVL@aYPwncjFJxRA?z^X+pFfBWTAB ze8$yN5)|_5e7paIy_lx_|Nra7V9g3)FFK~%sWAGdV?Bcr&wU||NpP=gI32wDsz)8hOies)8*9}4H-qI2dXpL$?~#+%x4Fa>Y$NE z#_+HgYd(Vncd<=hqt2Kp?puV#l#Y_=3hImoQVT#Toj^nqNH*o)`jkjQ-NIz-@`17)Zc0|4=OzNNe`@VG4WEFx^p$ zF@RBa`XnvJE=ITMvf7Ll6528lg^;DarJ|sfykRe%vrk{E%_to>iwPv_1{%4(?%Dh! zl)t%?0W>|iZ^j95_*CnHBgUbjR*|Vxh<{hAf*o%YG|Np-f`2PR@G1qwvFE9N7 zxpJ-a|NpP!rWa^3sxmfBx7T6RN7Is7ffHM%UB{~=FvR?)T8t0 z_7(8xE|u^&_>kE{`=LkopU)oC4fGh>C7=HL|35DF5C?3Sn15fXKv)*Ti?h=&=rKk! z{+h0%`wf4ZMOV;W<`^sV}gM*imwL6#+d1|`f9>XBdG@-u($=vNBj_GDs)f zOEiuRbT~=z|9>cumTR4)#tzpBEbp{ih2d77~>f^e84kkY@yRLjTv3##6uueO%_8| zbl3~d5b%H)s5Jqq^bSowW6Ws9IDb0338Nm*h7eH1-|!3$d+~L2=*ATrVZ02?HEzpr$_S*zEMolLV08*Fpz2<{7RnIyo_@@Ov64yJd%B}1VF}5<^H>0d@k1rzw zw5j3I{UI!iF=Nv71Ky0~j0dJ$_%OOMU3)RT-iI;F?8z@sDhIj1r~86Ox12|J7>7rv zlt*VUN7#$bm;e5Ib|3PLgUu>PFdPEU=1kVTB|bgMn^Anar7xqgu$Mo&WdYOceHrr^ zIi|n&WsH_L3V^w|`G~-415n>wxQIK$F#wd$9$%TB>Brb^7Ios^{}*%5{`>E-12n`8 znzHU>@aS~l@aUGU-U6z;Wv^`c_do6U>Mj5NGcvrG=luWwi;2_K{23jE9tMFLQMWJu z1J9t?zbH4K9vHx=I(?o$BOfEz^tJws_KZE#-}*C}FosW83SiV_oIgDvfH7Q<@B2T{ zUS`kcA6BK2;V=Gwo4zA}QC0C5*u0cW|Ne)+IP(prM5mNHgC`hdlh^cr0gUp3Z5RLl zf6bT0kih_2r5*mFY`R_`;{(Rb>HI;AMvP|Doq`x0IZW>V`~SM|#p&tYL5wDhr=}kW zV$5eOnQjowm_9i-MSS|YV8%$zc_yIFRG9>K*o$Bjc%}{ydokA-l!Uka0FQHk8bAgi zj6PDW5ulKJdiLLcP(#||KSZ7-?1jekX(5aXjO^35hcK2fMorfVWz=DGogNv==*jqa z`r=SVEhYy2>E}Zk)fgqFe+y;QU|cv|K8(?pamDo5Fh)s6-|6LHj0TK1wyy|dlwf4k zo_;W#aUF+!5-3xNL`^S`V02~oP67o%)AYj;jFr;)U=Gu%fB!xBccn`x6$xZa1`EAE zIXyg*@h(9FqUwE7XGZBz95D%Rm#;C(z3qiYy8C5 z@(X`2XaEo-ud`h~mhljy%(8Q!Xj}j$54-?%?Zd)foZSs-Q3p@|8^;(U{>BPo#6w@> zCqC9`4z=bW{nw@!#50?mUDRi@Bd3V@OGJc@X9QWWKhWMJ_IsKd3$#PqcNkDV+trL zs}F**;p3-}2nDr2j&@CVOkq^44+hISfaOg8dcf2G;n0KS*ObRAapwhQC5US~fDDd+ob4F|a`$o2cpt>T+2CDp%b-op z<{z9T+!?`XAphuqoi*h#Ea!u|BWYk6A+Su=O&m663F64XiQMoB1oO3;2w33tXVutm%E zg6!sd1R{SZfn2z0`kGWmiLjes4mY@C@geMmkupRlsO|I;tTPI%^Uy<(6Twk5j}NqF zIqZcx)Yp&{wo(z|JaD?1GhHf;(Sd0**Yub)#xh=+0+3(R_kb)vKmC3hqYUGv>3`A~ zrH!|N6ve|HN|ye$WFKY+5v98fo-(@nvn`GAGTf6&5X29R)YE7<2&kO9v*;E3P~ zd*Q4AZhuSw3;&x97B&xip#y4%gJ$4gLxi}(UPw-#o6abm`WK|3xlSOqL^s0}?7Y(5 z|Ng&L07bWFSXOY@i`!5Yppb9{s|el=^1$xzg1sh&^f31F{%R8S|#MWic8veYrDzcNU|g z{Kh+=X!*Dd0o{&h;R4@ zGz9N@!o$+_M2RdY_%49Ls2eG4mrH{T2RVG|ZIHvW7(Bu0ydNaqTqgjIuBzMrKvRq> z!6yIT_V2$(FVs*=kLl7`jEW+zAmylDGMe6!!)T%O6EunkR(`w`Jj@Il&f5((DPtSR zdl#nP%VCrbUn2>Mb)-#EUw{4opK%wghfTn9_;VIDi=Lc6T4JB^xD?vx^y$8k#fT7pHC?`lQ8fB8$hE?D>jC`_^#vcg`th=N8m6&M)8J;Snu!d{pl_~9VF%JlvsMnx?q(f|Kn zt7kEUd-gVgdcOgnncBA^|Np-h0tx=#1QN`O343vK`mG{H6}>GWDPGXR9D%IRuop{3 zK!qk~(3CCg#S9UUmEg?=SqxcBVK3UJ>l8D}@nwJ&fn65%B5Ha>F{5I=1;`wTz0Dvi z!1gMG1R?fr1_^@f9tSTi&N9@ zRWRDC1%l~k#XNJ9ab!Pg$Dn@0IgmxCe-luE;1EGz_9($o2> z8O0d8rmI#nDuo>ctKx>Lg7szs!(RCDfR-IFfm*ZHXCQ?NWO%cLJL4``)3)XR{)3jr zhP{{s4pQ*49cfSw(V9NDno%X_EjK7Q?w|hm|D`Y3pev_A@!$$xgu|Wj4Qxsf-0D&V zP+H%?{r~?QUJ-ed}JUU}9_;iNVf}02*KqK~@ zZnn5+0mx65%iMAPUn1{{MgJuLw$APryn+Q>Z1f zY0dQlj-{O8FV0UdYGF*`c;XN0l*mq>ey4@egK^4q)mBDRp*a8l|6kq(tq|^YeGfVy z;p_CAR>nle3)9cFG8!@_PHSUq5jOGr|NrG?(0mhA(dnS+jBSjH(|5EnCW*`gt*HTR zsP_QLdIp7qrcU+R8Jk2nKr-#10T8%M@AM<>j1`PE(``E#)rIt`q2XX53l4{WRnyBl z7}Ysmtz-mk8Qd^^X$PY&$(L!u03e zj6UqmU{39Hs~*O1c2zJ(Vfu_7#sKzn?jU6+roZoD)Mhl9F5SzxfcLi>NbIZI|Nk$G zxTZUHF)B@e)yt^LxO}=mAEPlN_jZ>)Mm|QyKhuNz866pSO`i&)DyCltQD)O6Coq<9 zXu5zCi_-L|6BwP@?>U1EyfOX$1jY#VdN8MQy4^&^EOtIHhhzHsiHzp#7r-O4K1 z$QaIE1m@&S_nyR>I(H)zjIhFh;QlfH_{%Go~;WNZqstDZ6a{|NqMX&?!*xIEk44X$oT#yDeDW ze0ud%#&Gugb|A$!r{A2)n8lt4=44Fwn#O3(ZUE+JP4Ae-7{`9v7NqRx^taO(OQZt8 z9537d|6d+QNoVJ$S5IfukvNhK8gGj;cnLa=9+5t~r|+N6s4m(Hm3{4wkn*4Ydpe^D zqs?@K8I0QY2HDUgWyQ90W)-*lUqjBAv)2u4DHq%$FMgPS!dA!(TpoIKyFtqu zcL~p+7k9vN*QQ^d x0#?2ZEOfvWoANHOT+4Lj1&sQPfzyK*FlsZZOs`+SC@pp< z2@)wD-Ll&uOpEXrpQmqFz^Kf0&UkwHVn!{-h0_)?iio*Eq(SRHtszW{@E7INwH7j3 zGg?hgTgYfEZwxNfb|iv~j0Y)P3t?LLbl(qq@of6eg^cQqd#68K$f(UYVLI<3MrkoW zu!=a4VrK}`BK$@Cbh|~2%8XVZl_JyA7ch!z^BVpCpLX0$fE&Dz!J{)y!J}LDQUb^( zu;$|srbYOR$J2K#Vzg#lHvP*YMq`CS@QPPi7qB$gO_mTQ#7#ld-4`?JF)B?jTg<2( z^wj`j2^WJ$w>zjZ=bw7OgMZrr574+kx9o&?xOJ@%rbYORg9iWqzg!8bmOaB>sDNYZ z#><&d{*~#U7c&MjF&RvETf(T#xORHc5=L9b=hHVVVbo%DnSOf-qb+BhK4|}0*o%MD z6_+xK^YiJ0I|(y9{+BDfVAP-PzLZg3MRpam+X0$j2=fekq22uNe}*L_P4(A;hPT0$ zspRyncW<(4Ct9|G#A70abt3Kr010U3Y+*1xg09x+q(_Ll&s>}OUGs?1`+Xt#Mx~6Yh&8Tg7^d=}OTu=CPJ4k>BZ$bI8 zA{-mRJ(i+`-7{Ci11wH<61@+-yBu{r( z!zdyv1~KCU*o+G(X50>&Ubu!)RA~~#5QnrzHwOkr&^*kG<);7tcetg1I(-5l2d`Me zsKn?u{q!0}X_1~ApypHP3J?DMGNG5ip13&u*BZvd!c8V%U7%zw1zH+(;f2EV3u_s7 z8g4a4mDuni7&M3p3PUe7&@Lhl2GAUQ>Wd!Z|NjHRUTmGdYaQcE{guZ5|G#|1&cNW< zP#4NqD(vyU^n}O%(hFfP`av=$*g;2JxSj~`=ykmi@FIG8(|SgKM(OF7)-!IAPFDH< z|K%DsEP5lSFWkWBV#)$i;L8R&!$ZP>zr~pi}YK?8QvO>ATl4 z*717$FH3zf%K+@u!_${;WULhK0_7TRP^IL3>6^DQ zW--p4F1L-bmN9GkoNbH}(v~`)S(P*ip<*tN?l=XH&e#X9L0(jN5kLL>HbybVAJd<0 zW7Lp$Ie?O9gI{D7{`;SiZ~#23buN3l?smo;#=PybwlgX)GB!-#y@S!za4oVPk8al) z9@bgj|Nis$b%V~yF$VQPeXLVw@b^|TGBEg9+lEe8+{q}zC^p@0C!->lnD@W`wdx+- zrry(KcQdMpJoEbZpTGAzXfD3{xaa@l9?ZYJrZ3#d7|p-+03(A3|Gs!XkKinpjDyp; zcQG0=KAdj5i_w|!+4RO;jOvVsrmx(^7^ozD5Hz1yt^tk!@R}ioT{_eE?`D)?@;Nx&ZWp5yW8id!J&g8ZZ3huyrI0b> zAUKR_x0mi=EN9&QZZG34#_7lQGiorJPJh3jv5}E?df@>^dq(N$8xJrZVvLwxa***1 zW7KrVLyVi5LKUX(y2_}@ST$YYFryzM@AUk`jK+-Lr!PLt7{PdM`k%v$ZY-ejsOjsZ znZ%~Y9APZ0cLy!j>2#go)9qm4+5Cf{j@zT#bpm7{m?P}P4UlyAhnGq`p!6CC>T>*m z7gs*r7d*Rvg}rbR09Cx8S>Y0Q&#)K9U@mBSx3d9xDmmX!5*WJ7y)PcJI?Ki#f z41ck3Kd9V+b&@`S4s6TK1Z(*`{o_%_NXD$`-p3fj7=@-UI>uz1(US4-^b5xsjT!r=vz%b;W;C8Y;RNGqj&N>pE4N{~^GU`7jO(_uoMJR* zWGtR;bDGhFQEqzSX+~Yf_tWQ}X0&HqKmGn`#yCcX>2_xrCo%4we(?;W0;9_GPiGkY znXZ{mcRtIg&*(k9_$;F>W9sycXBo{HuT6h(mQj~+#dNWAj2jrgO+S8)QJwMZ^!Mi& zn;1Q(7oBH(%?LgY*GK906-1hm2m`MzSP}m3f5!JKpcGpw@PcdlnG1|Ej1#86yuhf$ zXfU1UBBQc|_*H~1g$&KBP__Nj-7hl!n(lmw@e^Bdab{k+!sNO+V$=OEGX_b7-#}=Q z2=@$ou`C2q;qJW5Si`6}-RuhEZsD%~pfSI62M+#bP*(8_dJ#393Y`~6BtXT_g`ZyW{jH7 ze4WvcQFD6Gb;drC>9>)b1o3%h@E7+XVxWZ8dV}!~69dEa=9`S!i~-Z%-(>vB z7(4ytEyf;5u**-MdYiG7arSiXJB;#Toc9sVP{@$J&j>nMp=r9q9mZ-=Ya}@dkN>3y zvKTW$wqLlzsKvy@{B8T6dyMy(ILx1ck}%7Y?T;QZ<}1#=s>M?7H^Vq~{_0g{|G zz3?gHTlQHmL7d*{sm~bqux|r%0=H{CXXIsM7kLemO5JYrf{~et@%wa#SB#I?SN;GA z25r}T&6v#0eiY0*xP9_F#%4zLb6}qLblDG#J2|d_IozM8-}}I5!hR3T^O!FAk#P@` z%;V{Q?lDSifB%tDf|Wh)7sy1n?R?)EotW4y|AKfEricGz%x0W0o%`Xz7jFYDaa5Al8e6jsEC(~(0 z4nck=-%j%7PTF6rX;Mn@MSV zrzq28X2wI?WhI$-8QGtJ<;u1jN-=F@V*EM%u?*8KM!D(xWSJH-R&7s`V+v$s)R?|S zp6ME6;P!3>rg|pE;EFJH67F=@q*=n6rO-mI>2suIaf>OuE~P?3o<-n9g%;-|EZsTyT1E z3zO*fjqywe+1c%LK_{dh!B->g>1_n?8>-w}6WTgG}qm4|nc$nCCO;7A&vShTFKD&=emC<; zFfuxC@0-PB!pL}J`r+A3&lvAcUp0rRqCQ2GfguC5hd%7Z7Es?l1i@bd;=71K=69ES z|Nozn;?d0z_F{^||Nk#_pyK@?@l>#Q4MF4G#i5V;uhHTm4D3(w3}N9fK6QaceWn-AXOeLB2FV3OIpZ|SWY_=yFG07U zfriY(!e5kh{{R0{1Z0$q;8!7#W3xb}xPpYAPMb_L z`mFM>7i=JPeh_tG;V=9^%Iv`0uos%E|Nnn!2<7|%aa5q3`)mIHe<=>;D2BZVI`{wo zOD-@ECEY#R{r~^VPkht+7c+@6-Qt5qyYY1YHYU#L{}(f{GF9=x697~=ehCw+n-m`` zguqGR*|h)vU$TJ~Mud05 zs6X9*8B-wR-RTRLF_|$gn|@;%lLceWbiw6JCXD9O-Ig=eGVYvyWI2-uZ!4Gt zm`b4>&6P|7j84<7Rx&9tDo&4H$s{Gj2GRtc2gzd0;s^_WF=6`Ll}vIxoHqaeXUqjp zyr@k-zLH6ntsPV>E}w3&ib;wigA2THB7Qp0DkeEbhw0j@nAF)NKng54!1gkJm|ne# zNttoU^!XsFVftYZ6*K)gh_aZ@y_!i~!@~am|J@$^dkzGLz1U*(|9?g)XrMW2Fi0c1_|Nmz|RI5y%znV$Ceu>@x|5-2} zafXGz2nNk3Y-R(+Mc9ilPy$^B;e@}~0piVo@m_&=T`-=^T2L&5d09MR;V(i!87c?D z=M4*g;R52vK=^!N;V(=;d>=L|kUd%aVc{=SKms-p1p;B=FGN6m9SC1AEc^uvh%W=- z3x$Qh_%gkI4U>BP5nGUtS`RRUy$}R>t`Zz7*9<_S-)}I4z4#3pG&l^l#y{+Z&PC8X z9+>A7_CglKTMFj6hrQqf@uq=!PGK+pU-kVx2zgO~sRf9VNf*PQ+T|D_Ft{T{^Dhp<0^^12d){q_9+|1U+s2|?(r z4N`QlhlRhWnZ9r>lNi%k{ps)5F^NyVu$GBkeXaig|1XzZ@{Hxv`PMT@3GD%?e*^Z`N?lOsGJ|rm zB-mV8MufR?2zA*Yb==I;`8G0XFz%VYa6OYeWqHV z`8O~r@n~E9|DOSoSTNmo1Ct)($LTp6nB*BXr}u1Nk`l7h1v&dY$d8wGK-DPY^tbDo z6q%YWrweRgQshangv-}X=h(=k$EY^ld?S-Qn;uBD+VqJVm_&Jsb^ia)cn7vUVS4RG zCUvGA7GUjBQ!U^!T-yKtzgz_xgbDEs3eRHn3=Mmcb_G<#!o?UsVnHCWCa__8O8@@9 zTn(BC{9mRJ_Cmq*|Nqz7pe9(@i<0Szo0v2$g)IL6e{Bj8vNQYt|Fx#a|LvgD4YC+B zPVQ!cthxse7KgvcEdBdGzyuC;|pMymh(-~X=#KQjJu}q-@>HJF0cpGv~A!1c?;83CL3F&-HIYgyA|iMA5*-f zXsaY;t0bZ%qI83ufkBtCivhw0kw1Afc?Eg%c_aAs_@+xQmEJ7fHJx<_lM|!ubdMcO zs`bkiCo2j{*eYEVJEq8?RLT94=MaaI#9B^UE?rJdj!cOTi4zi2C8o>$kxi66q3~D1 zNa44HjHIumt&&u^6BS6vrXo(%vG6#(if#4N`I7Qlo6Csl$q|og3)Gr!A>Ue`oyAakt?8kAse?d zF;s77VtBWWiDCOTCI+spOblPQFfm-5#KdrV5);F%2}}%@Eldo?EldpMMNABZMNAAk z%$OK9nK3aOGi72pV9LaB)r5)Rya^M-3u7jRN5)JH`7%rlnKDcai^Q22=7=*fu<||naXJW|t&&W_8{GX9Q`#&Rt(0@jT2mcruj{jq1nDdX3q4^&pgVR4o2F-tr z40eAQ8NU8zWa#|O$k6?&l&3(dY>~gR6S#4 zD0#-n@b57r!;i;|3~%l+GTgYw$Pjvuk-_~QBg3S-j0{|N7#Zf>Vr2Mnlaayh1|x&P z4Mv7@R~Z?$Uu9%)yUfU7ahZ|f<0VFh)0Y?-HeX_7NV~+y@b)+(!}H^e3=5AlGR!{C z$WV8jkslqoM_AxT}>|b;B%bN4bbJlVs@ zkhO=AL2VBs!{!mo5W1X^!DBfigHio* zMh2~Uj0_n)j0{OVj0}6a85y>9Gcug)Vq|ddVq_?9XJmNX%*b%JnUP_0Gb4j%Gb4j@ zGb4jqGb6);dPaumdPWA9dPWBRdPas7b&L#cwTui(wTujJYZw{YYZw_`RWmZ2u4ZHq zsb*w2RK>`US;fd8Ud708tCEqSv67LY-oKKOfu)j>VP6F!LqRzsLsmH>LwhMB!_{I& zhJD4149kic8T5-88CDlDGCV3|WGF3UWNU>(EAa3z|N;aoH$1L#d{K-H98ru6b`gvWpTij$wuUn@2!}B; zgoQ9N^aU|8lmsy{{0(4a=nr6I`08KJ$Z*e}kwM6xk%7UVks-*Jk-@>2k-^M|k-^Z1 zk>QdTBSW|sBZIRSBZG|_BZHzFBLk-!Bf}IIMut8YMh0saMuy+cj0`)R85t%yGcxoz zGcwpZGcuSsF*4{mF*1ZYFfs@`FfyF8XJlAm&&aUIo{_=Ro{`~$9V3Ik9V3Hhy&WS% zo-HFohAksQjRhk^xdkIbzcC|2v@s)twlO0^y%8froDm~~tq~)GtPvx_HbX{+sfLUU zrG|_QPKJyOw+$E>b{a4;e9>iODA8qP$kSzHVA5b@c&N_Ea9f>`fkB;-;ffj~!#OoZ zhD0?+24OWuhS{o&43(;k48^L94E4IIj12cx7#X%JGcx2TGcqVEF)}nMGBRW+GBN}x zGBTJbGBTW0U}Tu5z{nu3z{qe-fssK>fstXg93w-v93z9PC?mst5k`j7{EQ5e{EQ3< ze2ffQe2fftc^Mf_@-Q;&;AUiK<7Q+?;hUbh7 zOBfmEF*3|&VPx=UW@HdyW@O-FW@LzDVr00-$jC5*k&!`-fstYTe+Gt@KMV{_zZn>6 zelsxq{m#J9`<;P7;X4Dv&o2xN=f5y8O#95h(DIpqA?z~)gUe?IhM-Rj3<{qZ7=C?Z zU^x7df#KW-28PKW7#MUvFfed`U|?8V|DJ(C;ynYyrgsbsYu_<2?0v()F!K!q!{65o z3};_6Fid;Rz%b<%14G{{1_p*#3=D^#GcfFZ&cJZ`DFegNrwj~+PZ<~(o-#1Zd&0ml z?*RkDj0X%1m+vz$oW0M$@ahf&!;?D<48nI97MX$A(v(+mus zPBAcCJjKAEdWwPJ-3bN;!Q%`JEc+Q4F6?4p=-tjx&!Di4fk9y_1B2lf1_pu63=CYG z85m?YGBEUPU|;~P^?Iat zu3%uew2Xma)iMT#XG<6u@)k2NC@f}RIJ%I5p>`ny!<+>S3|$Kt80_XVFnpWKz_4x( z1B2--28Po!>lqkk&17J(oyoxPas~rK+zbYWMbjA=%%?LjoSMeKz&4G6;mA}5hKW-d z7`mr2FceK?UKGXM>KGVO>KGV2>lhd;>lhdm>lhf; z)G{zksAXUXtz}@S=dWd8cwNK5aIA)bVSWt*LsJa{Lt+gBgJ%r`gL4f7!}4kdhQw+H z2E%Fw2Igu8hPRar4Dpo=46`a281gC@7|xV2FhrIyFia|CU??eNV6Z4Cd;=L6P6seBH25g?^8Zt0+>oPFp>oPC|>oPFt z>oPD%=rS-c>M}6A(qUk@ti!;tM~8u7sSX1}pAG{|sM%W4b^^=b?Z>S_!OH&q!Ja#a}^tW_BpI8+%JW~eYQ)T%HrB&aYj zSgSBF98+dss8?oS@K<7BuvcPW;89{=_^imla9NRoVS^$AGefW9bgm;zQT1Gs3=EPC z48J897`{m`FuajqV0bRUz#t*az`!BQ!0_C85k;f85lBn85kl!>(zJ}7%X@h7&Lep7$kTZ7&v$t7=G|D zFudSlV7S4o1`8er1`Qqt z1_>Sp1`Zwuh9BGv3@^AD7;bPgFr46KVA#RUz_5awfnf$W14BnWHv>ZjHv>ZkHv>Zi zXh8-y1A_%O1A_)P1A_!N0|N&)1H%t428I`03=B887#L1)F)-}lVqjRo#lSFwi-Dno zi-Dnni-947i-946i-Ey|i-Ey{i-AFdi-AFci-CcIi-F+>Cj-L^P6mb>oD2*nI2jmr za56Bg;ACK!!O6f--@(biP{GN-kip5o5CK{;$H~9|Ix9_slYv2klYxPQlY!v}2LrSgTTM(c_*2~>bKouVDK*}am%bIEpW=rODwANFEC;dVCZ6CaQ1ih%*!lc5J(ed zWbiEZNv&|LC@4xTF3!x)GjhtzV-P4Z13S+xGba^ny}dUhgKI@H|tkd@}P=83a5!>KQ<4yi+T~^NUg#1U@WaU~nwX1OGwu^HQ9O67!NX7zAdtGBAWP z2)wU{Dho=@We{k)4h|uo)Wj4+1_6cN;IQ}0FG+<4K7+u9r3?&?{vqx;Njb$qsm1v@ zWvL7T*L~q(VZ<(~{IOnINf^{#4 zXfZQk5U`ksCU0g^&mizg9}+3~1%CNKsl}l1WDvOS195#(W?l({fSn3BD#H>%LCGKx zcM=?Hj>WkyscGPd>;sJn78N_Dr1%#w2r#LDO$<*g%3}~X0rIB5vtvO)YF-M1fDlrW zDJ{;ZXAr340vjF*N_)QfDVb@RsYMI|e7C`&4o;U~DUiWhP^Xp_XD|q;zXpX+Kz;!v zz|OOSBFzn??42+pDAyoTs~gDo5uFSSp3aUbDGUPd9)rU!D6zaAlqVPj`h}sIT?mHZWokaL8w12+d>=`2P%KS8z^ZaRw+7uR#)k zQ&CiEQ9gqJXyPtYSgSmyJBZI&+WEDmX0`J>Fnj`Xyz)4_#6o?m+A6ifVN{trKatXNz zWDt1&2IOMj{4xds{s54Azx)yg0e5Q<)3-E-L0~?(v;r4g3a=O$JnNmo#pH4maKZ^L z$t{7Dqxu#gEy1Np3<3&0;DQ%iwm9eK6_>bWg0fAK7AWxsl$J0E$jO1@*|Df7vC<_o zx0pddp$V+Lu!unbbS;3hZ$NyAt8ajhV~A^Tyor#8XOrks*UXI5?g8=BE@HF$gHcfYb#PrF!NiyQC&F2IWwUxAGJQ z0R?`LX>Q=c;eR?fFoU7VV7oe43S2rgOuv7TNwj|XO+*>wlbFsRAP21^6VnYD1j67P zBL;zV14f46lA_ea+yF>r(x=bJ5bxs{91`yq>c=4P{68pi+?>lw7zFqYVQO76ix>o! zeFVpae_C2`Y6&Q}$LTXNxTlu**B6vz=I1d8gr|ZX>XILxk(raqAh6yWxHwn=sf56}ukJb6R74qV#30ZFtyn;n3A6^B?hn!qN(Y&sx^=l4i0cN<)(Z8$ zAP(3baNwU40tY^lk>KW$I7pRSKz=!cz=0G72H(U2P+=Helv$F>AmFbBmIY_}cmXim zHy;w0eUKKLn<1!a0Cw{+NOZXsrKU0naI#DvgMAqCucNO1)h3Je1K4}#N_r?UxzK>rOW+l)bgKLzAk=iCCMhMK<< zxasDSSq2XO^b~M9fTn`?vLFqhq>Q8^z!Mx;3hqyEXU$paM`D@2F7(PN@oz@a0a{G zEwiY&1l%N*GK3XL;0)}PSeyze6*s|4N(lc13j;$ksJ?#(b89+-0DBxL1OoDlOJIdw zeZLM!$PHQSKDc=W3MU4Ed~gNho1YR2Y6yK;1#_KeZZ3m>k}24At`#Mq28}?uE66Cv zl$7AoB-i8;aQx&OqKJXDxxWDAdr+t_2xzr8gA@dpCl)XWxHB;@V5`DHgFP4oCQRRW zjY+1y9_%|kI>EY6KDPEC(5C`wJstN;~)?F}H``ev%- z`6gB{2t1MiTL-H6AsvBY1_ASAu&JJ)w%PQ88%z@Q@k}61ZlIF1(l;}&w3tC4!UddU zT=J8HQbCOd1zT{I0B0{RPe}HvfEU?*`H*riN{xXbAh9SF(SZ2(37it$O7ol(b3hey z0>~49D1l$e}dTHupdT;iMoDof1`7#W~Z z#$FCG)2RqnTy{W8UH4R|(i=`-6N0ld3taPa7zF<3fYiI?B&I`pmBtJL`PyJ1q*jJH zq;m*z1cN|9H@HOg%`8p^$67t(^oCnZV)dYS*mfNp#E>e`C@3|ZLEr-<4Y`%(fmQeW z!|F^>&l^(3o`9I>o*$AADV@M=$h@cE=A3UByos_N+In`%2f5rn7#wwOrFr18NmRh^ zF<66JW(6p*gDPNmCXmx4nL%BE`dds2YA+x$=~z;dn4IB~pUfbzy%1~)q{;`EW}GZw zP4z|$0tT5344`TR)K;p56j5r*VD&EfB@o0Q@ZJ^_T)w3_;Iczv61YAJC@S{MD+UEC zsKE=d!!IAylw^=R9>B=Jz_Fu=ks;pK(Z|Q%nStX*AxP*9m`utCv2{T+j0_x!IUtTk z7Kjv$2a!+XK;&Le5c$9rM4qt%kv(9N-wee5Yz!j5>VQZ)4G^gXCNC<3*bn4DWREn6 z%mvx*A(*_F3S!%bfXFSuAo8srh-?LuRn8#xerpi9(G)~_PGw;5DK7C% zR4GZ$VBml+VxA!O?6BvX5eTG1PQM;2azk485jaeOF;5InR(d^oN>Vn z49OXZMaA(+xdrig`FZiF`8f=niXg{xesBWmDN18taLG@0%FHVcOU#kTOi3(BW#HH% z$-n?9SbU00K&8xdr@Ksc_56|`EucYX29A#sAok=Rj12Kku7RNp91BB0As?gd1IJv@4dNW9l|d%lk7opr&jc4GgB%{5TEf6_ z1)Mx~fDN<=0vV+XBI`M90zsVU%OH)*E`rF1Q6N%02t?XhL5u>A%7AJl4n1&6a##wI z?RI5ghls|qO2DD%?hDfH;{_sJ-9V%enAAT5 zvTg@BOsXI$BZYw>-Z$7Y%GHR0V_^zNS|3cZgUMsbAd#71QV~r4O9F{}0+Y|cl zSu-+#5^QP;w4cZE))M3=#pNJbHE{6E>t$f5XW*~_TVntwTZ}={9CAUMqsgf3l3A_&)>9-J*o zz+@!26h8+l2suuIGs*-o=?^mU5jfk;2a`SCAdxfRbXvb0OmW(Qg!bEl$O+)`KGhP$ zHUpEH;Ix?xCZoV)Aei(3lQ+SI%VjWm3QWELXPJj!@+UY&zXOxc!Q^!?ISou!*Mlix z1CV9U^g$KHPhUocq@3)O)G`LnP;W*C22OsE6FGN)>H|*E0OaC7BefzvuQWHcC^MOX z^B2floU7eIM)93zU~o>&%mH;VIK=%K8GM6FilDVlI5>f;feV*?_28u85Ar5w^ehI3 z#FWI`_!7{l3C9^@@c00zVa#!MFC#;Ia7d7+uVaX_2Lp%p9#C?qsRdU~!9~fStj@q; z2d>YyLfTMZ+rVufj)UM#_R|NXrx$EtoiQVWb7_%FW_=L@M}#t{0;~X66E54C7)mmV z^2-@G*hQEa7&zEL!~r%Css0yaK-psuDGDa{gR{?u8j#4p3=qkk4kEv%g2=NeAhIVJ zM6!Srzn3b6oP?ZQurH){Y4c-wtz@ZpCkr` z;K<;3Cx8EtcqhkTR|bv%NKFIwFaw7fIAK=rWMYW-b@g=)h-BcHw;kks88E504aByd z4I(#BWCG>CCI3N|OKb&^w~9cd2AJdp2bd1HeBlCVeI4`Dw$%o*!R0lX07K6!PF!>jpBVT~Y6JYW`I2)b= zk@XxqK@`VKF!=$T^=^SP&PgzN4U{K1x@%x<7tja~hjb0d1%mrPZQabg5^%efBOjb3 zm+k_E#K|=v^2TZqc_a};I!A!WAK@U9b3aJ?)m-n=`sOUCfy+@1N%)X4 zIF52JMsPb8!sV1vLN2LNGK&jx5-UM-YYd!%CXBE)Y<+G)e0fG@Noss?0jN{Y;lsob z@8KBi5%1>d=fc489<;Zf<1o0kUkxT(!PR;)xI(wE2gPUJACNOUKZ8h5Fxj&f#CBc= zBJYC}Y6zG#1{IMUMXC%8E=lPOoHgbQ)7N}rlBj3kxXZ){wb#+bCEn33#5IV4!^n`4 z!6mZ@)P`l?IOYOw*$;Kt)zgD!9kZ@fY0A+YPR5CV&cSj@8DXNnVg89PYIs zS4>TXwb>XrT)~Ymbuf7`k%56hj^lU{cmUox7d(*7z>x5fSVNm!7*P1Cf`g2iN6Oo7Z!mFr^P#%7@WbbV&Hf>7gQ+wfXTaaKx_jr`Ctl& zZ2~6OP6ij*QjnB)hO$74X^%fVz2m=pq&ucATXQJ{FQ=Xee7WWEP?rgwr#88Ep@7NqDIxMI5` z3St+41IP>fqOpp!Np7c zop~VXDd18j23*SUfYu=wVETnDvl zIQYP%D!BP%0d5nCD1g+w0+TIZ@{JrwWMVy-vILVWdm&Sx;9lM#u)Yaij0}OLsbG;U z;AXK9D6w-+1uct<42};9^^5m$4RiHj;EV+&QqGUyM0(Je5tNx+iWoQ+J2QYx2un>a z3AF&5GXYto-aWO1fpd->a`9FG8Y%)8ZX8>Z84x`mNbcYQ_rhwxT_s&)qre@ecw`aK zAS(x_IwQ2J?wbf6XIP>Nip7O15uo+(_P;(Db;`8#>4<^csPJ-UNx5-T;w%u7XJ0%OG;cB@h`1?rd$?3u6D=4I*!YtJ5DlKx{A2 zmA@S3%R%hx;O2;vGdM5$flJ}9ptQ*`1>E^a0Fwq_^3+0*tDC^2GdKbL2B)0O;FNO^ zJVQVBpvXu2Y^f zf+F?@ctq9h*SI!JjGl_FOsF}o>q5<-Rem(=FP63a&2d{V2F?OboFsz;CKkG0rxS1hUUOo@;P{@(-&MKcY({_GB9ZgE`?RWWHqQqQO~gl zJZM=6CM^{~wx9S4vX2=&pmi8LHmR`^Bq9kWkAOSCo57?pI2q3dH%el`qzAZQlm-`! zOkh$J+<-d*E*^Ut85o=sOQ89EWdk_ZW50h7SQm21WrniJ5sJsi0v@*;xz>j=?2G OpqS^(p1$f6lNtayO{U%e delta 44514 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ēTp8J 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

-Zmq^> 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 diff --git a/Compiler/Compiler.MAP b/Compiler/Compiler.MAP index 2866da5..4b6f28d 100644 --- a/Compiler/Compiler.MAP +++ b/Compiler/Compiler.MAP @@ -42,7 +42,7 @@ $LK,"ICU32",A="FL:::/Compiler/BackLib.CPP.Z,47",BI=33$ $LK,"ICU24",A="FL:::/Compiler/BackLib.CPP.Z,41",BI=34$ $LK,"ICU16",A="FL:::/Compiler/BackLib.CPP.Z,35",BI=35$ $LK,"SLASH_OP_DIV",A="FL:::/Compiler/BackLib.CPP.Z,250"$ -$LK,"CmpFillTables",A="FL:::/Compiler/CInit.CPP.Z,240",BI=36$ +$LK,"CmpFillTables",A="FL:::/Compiler/CInit.CPP.Z,239",BI=36$ $LK,"AOTStoreCodeU32",A="FL:::/Compiler/AsmLib.CPP.Z,30",BI=37$ $LK,"ICU64",A="FL:::/Compiler/BackLib.CPP.Z,53",BI=38$ $LK,"SLASH_OP_INC",A="FL:::/Compiler/BackLib.CPP.Z,244"$ @@ -96,7 +96,7 @@ $LK,"ICDiv",A="FL:::/Compiler/BackA.CPP.Z,391",BI=72$ $LK,"ICDeref",A="FL:::/Compiler/BackLib.CPP.Z,709",BI=73$ $LK,"ICLea",A="FL:::/Compiler/BackLib.CPP.Z,677",BI=74$ $LK,"CmpBuf",A="FL:::/Compiler/CMain.CPP.Z,157",BI=75$ -$LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:::/Compiler/Templates.CPP.Z,394"$ +$LK,"CMP_TEMPLATES_DONT_PUSH_POP",A="FL:::/Compiler/Templates.CPP.Z,385"$ $LK,"ICAddEct",A="FL:::/Compiler/BackA.CPP.Z,1",BI=76$ $LK,"ICToF64",A="FL:::/Compiler/BackB.CPP.Z,283",BI=77$ $LK,"PrsBinFile",A="FL:::/Compiler/Asm.CPP.Z,888",BI=78$ @@ -130,7 +130,7 @@ $LK,"ICPut",A="FL:::/Compiler/CExcept.CPP.Z,184",BI=102$ $LK,"PrsArrayDims",A="FL:::/Compiler/PrsVar.CPP.Z,247",BI=103$ $LK,"ICSqr",A="FL:::/Compiler/BackC.CPP.Z,453",BI=104$ $LK,"FBO1_NOT_CONST",A="FL:::/Compiler/OptLib.CPP.Z,92"$ -$LK,"CMP_TEMPLATES_DONT_POP",A="FL:::/Compiler/Templates.CPP.Z,178"$ +$LK,"CMP_TEMPLATES_DONT_POP",A="FL:::/Compiler/Templates.CPP.Z,173"$ $LK,"PrsClass",A="FL:::/Compiler/PrsStmt.CPP.Z,1",BI=105$ $LK,"MemberMetaData",A="FL:::/Compiler/LexLib.CPP.Z,45",BI=106$ $LK,"ICSwitch",A="FL:::/Compiler/BackC.CPP.Z,599",BI=107$ @@ -206,7 +206,7 @@ $LK,"ICFSub",A="FL:::/Compiler/BackFB.CPP.Z,540",BI=162$ $LK,"ICFModEqu",A="FL:::/Compiler/BackFA.CPP.Z,545",BI=163$ $LK,"CmpF1PushPop",A="FL:::/Compiler/OptLib.CPP.Z,535",BI=164$ $LK,"OptFree",A="FL:::/Compiler/OptLib.CPP.Z,33",BI=165$ -$LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:::/Compiler/Templates.CPP.Z,458"$ +$LK,"CMP_TEMPLATES_DONT_PUSH2",A="FL:::/Compiler/Templates.CPP.Z,447"$ $LK,"CInternalType",A="FL:::/Compiler/CInit.CPP.Z,3"$ $LK,"LexDollar",A="FL:::/Compiler/Lex.CPP.Z,93",BI=166$ $LK,"AsmUnresolvedAdd",A="FL:::/Compiler/AsmResolve.CPP.Z,188",BI=167$ @@ -228,7 +228,7 @@ $LK,"ICCmpAndBranch",A="FL:::/Compiler/BackB.CPP.Z,468",BI=180$ $LK,"ICDivEqu",A="FL:::/Compiler/BackA.CPP.Z,408",BI=181$ $LK,"PrsWhile",A="FL:::/Compiler/PrsStmt.CPP.Z,486",BI=182$ $LK,"ICFCmpAndBranch",A="FL:::/Compiler/BackFB.CPP.Z,219",BI=183$ -$LK,"Lex",A="FL:::/Compiler/Lex.CPP.Z,443",BI=184$ +$LK,"Lex",A="FL:::/Compiler/Lex.CPP.Z,447",BI=184$ $LK,"ICTestAndBranch",A="FL:::/Compiler/BackB.CPP.Z,634",BI=185$ $LK,"uasm",A="FL:::/Compiler/Compiler.PRJ.Z,21"$ $LK,"MODR_INDIRECT_REG",A="FL:::/Compiler/BackLib.CPP.Z,127"$ @@ -263,7 +263,7 @@ $LK,"ICAddSubEctEqu",A="FL:::/Compiler/BackA.CPP.Z,478",BI=206$ $LK,"ICAddSubEctImm",A="FL:::/Compiler/BackA.CPP.Z,56",BI=207$ $LK,"ICPush",A="FL:::/Compiler/BackLib.CPP.Z,293",BI=208$ $LK,"ICSwap",A="FL:::/Compiler/BackC.CPP.Z,487",BI=209$ -$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:::/Compiler/Templates.CPP.Z,267"$ +$LK,"CMP_TEMPLATES_DONT_PUSH",A="FL:::/Compiler/Templates.CPP.Z,260"$ $LK,"intermediate_code_table",A="FL:::/Compiler/CInit.CPP.Z,16"$ $LK,"ICZero",A="FL:::/Compiler/BackLib.CPP.Z,385",BI=210$ $LK,"CmpCtrlDel",A="FL:::/Compiler/Lex.CPP.Z,58",BI=211$ @@ -292,7 +292,7 @@ $LK,"PrsVarInit2",A="FL:::/Compiler/PrsVar.CPP.Z,123",BI=229$ $LK,"PrsPop",A="FL:::/Compiler/PrsLib.CPP.Z,6",BI=230$ $LK,"asm_seg_prefixes",A="FL:::/Compiler/Asm.CPP.Z,393"$ $LK,"ICMinMax",A="FL:::/Compiler/BackC.CPP.Z,415",BI=231$ -$LK,"CmpLoadDefines",A="FL:::/Compiler/CInit.CPP.Z,205",BI=232$ +$LK,"CmpLoadDefines",A="FL:::/Compiler/CInit.CPP.Z,204",BI=232$ $LK,"PrsIf",A="FL:::/Compiler/PrsStmt.CPP.Z,459",BI=233$ $LK,"ICBuiltInFloatConst",A="FL:::/Compiler/BackLib.CPP.Z,404",BI=234$ $LK,"ICFUnaryMinus",A="FL:::/Compiler/BackFA.CPP.Z,194",BI=235$ @@ -338,109 +338,104 @@ $LK,"PrsDotDotDot",A="FL:::/Compiler/PrsVar.CPP.Z,381",BI=264$ $LK,"ICMulEqu",A="FL:::/Compiler/BackA.CPP.Z,322",BI=265$ $LK,"AsmPrsInsFlags",A="FL:::/Compiler/AsmInit.CPP.Z,1",BI=266$ $LK,"PrsNoWarn",A="FL:::/Compiler/PrsStmt.CPP.Z,791",BI=267$ -H2@_#_#h#n#‰#Ž#¹#»#ð#Ú#$$$+$¨­ÓÞaÞaôaüabb3bbBbHbHbrbyb¤b²b²bßbccc(cTcAckcrc�c�c¤cÈcÞcÞcÞcècH>Lýý8ýBýFýJýOýQýiý�ý�ý‹ýp©Á..XZagmou{‘¤³¸º¿ÉÞô,>(&ä&ä:ä[ä_ä_ägä8öãöãÿãäää ä!ä&äd`µÖ×Ö×ô׸רØØØ"Ø"Ø/Ø1Ø>Ø@ØLØLØgØuØu؀؇ؖءاجخغØÁØÐØÛØáØæØèØôØ$ÙJÙZÙjÙzÙ|ٌٜ٬٬ٱÙÄÙËÙÒÙÒÙÒÙÒÙÙÙïÙûÙÚÚ ÚÚÚÚ>ÚEÚ[ÚgÚmÚsÚyÚ{Ú{Ú‰ÚD¶ÃŽÚŽÚ¤Ú§ÚªÚ·Ú½ÚÊÚÍÚÐÚÖÚØÚâÚ ,cj؉؉æ‰ð‰û‰Š ŠŠ - hlFFTio P Ÿ6Ÿ6­6¼6Ø6Þ6ð6ð6û67 -777 ”;\KK&K*KCK]KzK›K¤KµKÙKðKðKLL'L4L;LmL~L‚LŠLŠL�L­L±LµL Œ×ö¾¾Þæêøþ0FZh…‘–¤ÀÉÙÛââèèø|1¿"¿"Õ"Þ"é"#####$#&#,#5#7#=#G#N#Q#Q#[#0 ' ˆ ˆ.ˆNˆTˆZˆZˆ`ˆ„“°È È Ü ã ê î ¡%¡,¡=¡b¡m¡x¡z¡…¡ª¡µ¡À¡Â¡É¡Ò¡Ô¡ß¡æ¡¢("®ß®ß½ßÔßïßïßõß NßNß]ßsßyß ˆ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·€·ö·Ø V‚V‚s‚A¨{‚Š‚­‚¸‚ʂтâ‚ê‚î‚ñ‚ÿ‚ƒ/ƒ/ƒDƒFƒFƒRƒZƒ^ƒkƒkƒwƒƒƒƒ�ƒ�ƒ�ƒ¬ƒ·ƒȃȃ̓åƒôƒùƒÿƒ -„„„„,„;„@„F„Q„V„V„d„m„y„�„‰„‘„”„š„Ÿ„¨„º„ÄÔ„ä„ä„é„ñ„ù„ü„…………… ………"…7…\…s…€…ˆ…�…œ…¨…®…µ…¾…Â…Å…Ñ…×…Þ…ã…ã…ñ…††††††'†6†;†;†B†M†S†[†a†l†q†q†€†‹†�†£†«†±†¶†Á†Ó†Ù†á†ç†ì†ì†‡‡‡‡‡)‡/‡/‡T‡{‡€‡€‡”‡š‡°‡Á‡LJ̇å‡ë‡û‡ˆ ˆˆˆˆ*ˆ0ˆFˆWˆ]ˆbˆ{ˆ�ˆ‘ˆ™ˆ¡ˆ§ˆ¬ˆ¬ˆˆȈÞˆïˆõˆúˆ ‰‰ ‰(‰0‰6‰=‰B‰B‰X‰^‰t‰…‰‹‰�‰œ‰¢‰¬‰´‰¼‰‰ɉɉɉÛ‰ä‰õ‰ŠŠ -Š -ŠŠ Š1ŠDŠKŠQŠYŠ_ŠoŠuŠ}ŠƒŠƒŠƒŠˆŠˆŠˆŠˆŠˆŠ§Š³Š¸Š¸ŠÇŠЊÛŠäŠïŠúŠÿŠÿŠ‹‹1‹B‹H‹M‹_‹e‹j‹ƒ‹¡‹¡‹¦‹¦‹²‹º‹½‹ËÉ‹΋΋ò‹ú‹ŒŒŒŒŒ/ŒMŒMŒRŒRŒ^ŒfŒiŒpŒvŒ{Œ{Œ›Œ£Œ³Œ¹ŒÀŒÞŒíŒõŒ ��� �%�=�E�]�e�h�o�u�u�u�”�¤�°�¸�»�Â�È�Ø�ç�ó�ŽŽŽ Ž&Ž>ŽJŽeŽmŽpŽwŽ}Ž}Ž}Ž}ނނދޛޱ޷ŽÏŽâŽèŽíŽÿŽ� -�&�,�8�@�C�J�P�y���‘�—�ž�ž�ž�£�£�¬�Ä�Ú�à�ø� ���A�G�Z�‘�£�À�È�Î�Ó�Ó�í�ù�‘‘‘‘‘/‘;‘G‘R‘R‘W‘W‘q‘}‘‰‘”‘”‘™‘™‘¯‘µ‘Á‘Ǒ̑ޑä‘鑸‘’’’’#’6’A’J’V’^’a’g’m’r’†’•’�’µ’½’À’Æ’Ì’ä’ì’ “&“.“1“7“=“=“N“W“c“k“n“u“{“€“’“¡“©“Á“ɓ̓ӓٓñ“ù“”2”:”=”D”J”J”Z”c”o”w”z”€”†”‹”Ÿ”®”¶”ДØ”Û”á”ç”ÿ”•)•E•M•P•V•\•\•m•v•‚•Š•�•”•š•Ÿ•±•À•È•ã•ë•î•õ•û•––=–Z–b–e–l–r–r–r–r–r–w–w–�–“–Ÿ–¥–ª–¼––Ç–Õ–á–ê–ö–þ–————%—4—<—T—\—_—f—l—„—Œ—«—Å—Í—З×—Ý—Ý—Ý—î—÷—˜ ˜˜˜˜2˜A˜M˜h˜p˜s˜z˜€˜˜˜¤˜Ƙã˜ë˜î˜õ˜û˜û˜û˜û˜û˜™™™.™4™?™D™D™W™m™s™~™€™€™“™¶™¼™Ç™Ç™Ù™â™ó™ø™ -ššš š š2šHšNš\škšpšpšƒš™šŸš­š¼šÁšÁšךÝšúš››<›B›G›S›\›k›k›p›p›†›Œ›©›Á›Á›ë›ñ›ö›œ œœœ œ œ5œ;œXœpœpœšœ œ¥œ±œºœÉœÉœΜΜäœêœ� � �I�O�Q�]�f�q�q�q�q�v�„���ž� �²�¿�¿�¿�Ï�ß�ä�žžžž/žLž\ž€ž�ž–ž–ž–ž›ž žµžÈžŸŸŸŸ#Ÿ4ŸCŸuŸ}ŸƒŸ…ŸŠŸ‘Ÿ‘ŸšŸ¬Ÿ¿ŸÈŸןןÜŸáŸðŸùŸ     ; B H P [ a q w  Š � � • š ¡ ¨ ¯ ¶ ¿ ΠΠΠÓ Ó Ó å ê ê ü ¡¡¡¡¡¡"¡"¡-¡>¡A¡M¡V¡b¡i¡o¡t¡t¡¡�¡“¡Ÿ¡¨¡´¡»¡Á¡Æ¡Æ¡Æ¡Æ¡Ë¡ССۡߡߡë¡ô¡÷¡÷¡¢¢¢!¢'¢6¢A¢L¢R¢^¢b¢b¢n¢w¢z¢z¢…¢‡¢�¢¤¢ª¢²¢½¢È¢΢Ø¢Û¢ߢߢç¢î¢ñ¢ó¢þ¢£ £££££9£@£K£V£Y£_£d£d£o£s£s££ˆ£‹£‹£–£˜£®£µ£»£Ê£Õ£à£æ£ò£ö£ö£¤ ¤¤¤¤¤1¤8¤>¤F¤Q¤\¤b¤l¤o¤s¤s¤{¤‚¤…¤‡¤’¤–¤Ÿ¤¢¤¢¤­¤¯¤ͤÔ¤ߤê¤í¤ó¤ø¤ø¤ -¥¥¥¥#¥&¥&¥1¥3¥I¥P¥V¥h¥s¥~¥„¥‰¥‰¥”¥™¥™¥¤¥©¥©¥´¥·¥»¥Â¥Ç¥Ì¥Ñ¥Ñ¥å¥ê¥ê¥÷¥û¥ ¦¦¦,¦3¦7¦7¦D¦P¦X¦^¦n¦r¦ƒ¦•¦ ¦¤¦¤¦±¦¹¦Á¦ǦǦǦǦǦɦɦצÞ¦ë¦÷¦§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§&§2§2§S§b§z§|§ˆ§•§•§¸§ŧЧÙ§â§í§ô§ô§þ§þ§¨¨1¨=¨=¨lªx¿Ùw4w4‰4‹4�4˜4¤4°4Å4Å4ô4ø4ý4 55&5)54575?5I5l_v®}®}Ä}Ó}Ø}í}Ú}ü}ÿ}ÿ} ~!~~0~6~O~h~�~š~³~½~„žîmîm nnn!n(n*n-n4n;n;nLnPnVnVnknunun}n–n¹nÚnßnoooo!o1o4oHoNoSoYo[oaodojooorozoƒo“o¶oÄoÜoáoåo -pp"p0pHpMpQpvp†p©p¼pÁpÇpÌpÏpÑp×pÝpãpèpîpöpöpq qq/q4q8q]qmq�q£q¨q¸qÛqéqrr -r/rBrBr]r]r]rkrƒr…r…r…r“r«r­r­r»rÓrÓrårårîrûrs1sKsSs^sqsususus|s‚sœs¤s¯sÊsÌsÒsìsôsÿs ttt2tH…“p…p…‡…�…­…´…Ë…æ…ø…ü…?†L�žÎÎâï€ñ€€/€H€S€^€f€4IR^×^×g×g×j×x׆׉׎×ì=þúþú&û)ûGû^ûoûoûŠû�û•û•û°û¶û»û»ûÄûÒûïûü üüüü8üHüMüTüZü\ü\üoüuüuüuü…üzü–ü¦ü¸ü½ü½ü½üÄüËüÒüçüîü -ý -ýýÌL»ˆ¥ˆ¥¢¥­¥¸¥Á¥É¥Ì¥Ó¥×¥à¥ó¥÷¥ý¥ ¦(¦5¦D¦I¦U¦Z¦a¦m¦r¦u¦¦w¦�¦˜¦©¦§¦Ÿ¦·¦À¦Æ¦Æ¦Ô¦×¦ë¦ô¦ý¦§§ §$§<§E§S§o§{§{§“§¤§¤§«§Ä§Ð§Ø§ë§ò§¨¨¨¨%¨*¨1¨N¨{¨‚¨†¨ˆ¨“¨Ÿ¨£¨¸¨º¨Ë¨Õ¨à¨ê¨ù¨©!©!©$©,©1©³©Pw‡¶M¶MÒMãMöM N*NENKNTNbNhNkNwNŒ papa€a¤a¤a²a²a²a²a»a»aÂaÝaòaúaúabbb#b#b1b7b7bObObUb{b (kqŠŠ&Š2ŠBŠIŠOŠ @KW¦é¦é´é¼éÃéâéïéïéòéôéúé!$/4VàVàcàxà}àƒà"$).&à&à3àHàMàSà#$#(ößößàà à&à$€ðLWWaq‡�™´¹Éßçñ  ' 1 ; E O Y c m w � ‹ • Ÿ © ¿ É Ó Ý ç ñ û  % / 9 O Y c m w � ‹ • Ÿ © ³ ½ Ç Ñ Û å ï ù ! !!!!+!5!?!I!S!]!g!q!{!‰!%¤CȜȜޜåœúœ �� �&�,�<�G�Q�\�s�v�x�Š��� �ª�´�»�Æ�Û�ã�ã�ù�ù�ù� ž&$5:†à†à”à©à®à´à'¤Dižž&ž-žBžSžežgžnžtž„ž�ž™ž¤ž»ž¾žÀžÒžÙžéžóžýžŸŸ#Ÿ+Ÿ+ŸAŸAŸAŸVŸ((&, 0 0-040>0D0J0)0]e¶L¶LÌLßLîLôL÷LÿL*  ß$$@$H$N$[$b$~$„$„$„$‘$“$ž$¨$¯$¾$É$Ï$Ù$ß$ð$ð$û$%%%%-%3%8%?%?%`%f%x%‹%‘%”%š%š%œ%¢%¨%ª%ª%ª%»%Å%Ê%Ê%ß%é%é%ý%& &&(&-&5&K&O&O&W&]&c&m&t&{&„&–&–&»&¿&Å&Ë&Ý&ð&ö&ú&'' ' '''''$')')')')'T'e'e'|'‰'�'•'§'Ç'Ç'Í'Ð'Ô'Ú'Ú'ì'ý'(&(.(?(C(T(X(^(w(y((Œ(Ž(š(¸(¾(É(ì(÷(ý() )))*);)C)G)X)\)b){)})ƒ)�)’)ž)¼)Â)È)Î)×)Ý)ú)í)**#*#*8*=*=*D*N*c*h*h*h*…*‡*¤*¦*Ã*É*Ñ*Õ*Ü*ÿ*+ ++.+5+;+F+K+K+R+V+`+n+p+x+}+…+�+–+¥+ª+°+µ+½+Â+Ñ+è+ø+,,,,.,J,J,Q,f,k,t,�,†,Œ,‘,‘,˜,œ,¦,´,¶,¾,Â,Æ,Ð,Ü,ã,ç,ï,÷,ÿ,- -$-0-0-8-8-[-[-i-o-t-x-}-}-}-}-ƒ-…-…-¨-®-´-»-Ñ-Ó-Ó-Ó-Þ-Þ-Þ-ã- /+4.w6É6ÉPÉTÉlÉtÉ|É†ÉŠÉ‘É—É«É³É¸É»ÉÆÉÑÉÙÉäÉïÉñÉÊÊÊ Ê+Ê-Ê8ÊCÊEÊQÊZÊZÊpÊ{ʓʙʢʳʹÊÂÊÔÊÚÊÚÊâÊæÊñÊöÊËËË%Ë'Ë+Ë:Ë:Ë:ËKËKËPËbËhËÖË,Ô@nånå„å‹åŽå²å²åÏåâåõåæ æ æ+æ9æLæ_ægægæiæiæiæ|æ~æ~æ~æ…æ˜æ«æ«æ«æ¾æÉæÜæòæ÷æûæçç*ç1ç1ç4çYç-LAP/$/$=$N$Z$u$z$š$œ$·$Ò$Ò$Ú$á$%.P~ޠРЮлŠÉŠÛŠæŠôŠ‹‹!‹,‹:‹@‹F‹/4 -?6?6M6Y6j6|6…6“6™60|ºU^ -^ -€ -‡ -• -  -Æ -Æ -Ï -Ñ -Ñ -Ø -ÿ -   $ @ K K W _ p y — ¢ ¤ ½ à Î Þ ð ù     > C Q Z Z a p ‡ ‡ – Ÿ ³ º Á Æ Ñ × ß     % 1 @ T Y a m   – � ¥ µ Ç Í Ö Ö å ë ÿ #5:J]ey—®²¾Õñ  0@ENN`dp‡£µ»ÆÒâò - -%+115®1ŒÄãæÚæÚÛÛÛÛÛ$Û3Û>ÛDÛIÛKÛWÛ^ÛfÛlÛrÛvÛvۅی۔ۚ۠ۢۢۮÛ28 W/W/e/k/w/‚/“/�/¤/ª/3@t€ëëë ë&ëEëRëRëUëWë]ë4ÌS®®Ôçîõü ''9DX`iqv|’¢·¼Õíññöÿ  % . 6 ; B T d y { ” ¬ ° ° Ä Ì Õ Ý â è þ  -# -( -A -Y -] -p -p -p -u -— -¹ -Ä -Ê -â -ú -ÿ - -  & / 7 9 ? Q a v x ‘ © ­ ­ Á É Ò Ú ß æ ü  ! & ? W [ n n n s • ·  È à ø ø ø   -   1 A X o † � � ° Ë Ë Ë ì ü  - -*DRYln�œ•´ÄÞÞ÷5D{ˆÎÎÞòû"6\Ob0‰0‰P‰_‰h‰q‰u‰y‰…‰Š‰�‰�‰ ‰¤‰¬‰Ä‰Ç‰Ó‰70üÎãÎã×ãÜãåãìãîãóã8tÚnn�—ž©¿¿Ñêêõù1 @Wh|€…š²·¿ÃÕÈô  "jDy—¢¨¼ÔÙíõþ $4JLe}��–®³»¿ÎÁí'-7>Qllˆ˜¦¦ºÈÖëþ"1*IY`q—ˆ½¿ëëëö49DJUw‘~ ·Èã÷û3hUw• ¦ºÒ×ëóü "2HJc{¡ºÎÒáááôú 999Uess‡•®£ÁÔÙø /@^^€€‡ªªªÊ9Dmzvv†š£©»»¿ÂÊ:lw޾~¾~Ô~ã~è~ý~ê~ 1@F_x‘ªÃÍ;<‰”&&6GPVZe<”)îî&î*î6îGîIîYîdîvî�îŒî›î¬î³îÌîÐîáîáîëîòîïïï0ïLïQïnï=d(=`ˆ`ˆlˆ€ˆƒˆ—ˆŸˆ£ˆ­ˆ·ˆ¿ˆÂˆÈˆ>$uºXFXF|FFƒF�F™F¤F´F¼FÆFîFîFþFGGGGG(G-G-G=GBGBGRGWGWGgGlGlG|G�G�G‘G–G–G–G™G™G²GÀG×GêGêGìGìGûGHHH HHH'H7HDH\HdHjHjH~H~H‡HŠHHI?È onªnª‹ª“ª–ª¤ª²ªǪЪ몫«!«2«6«H«K«V«_«k«~«¯«¤«Š«¿«Ö«ê«ö«¬%¬:¬^¬r¬t¬•¬{¬°¬³¬¸¬»¬»¬¬ج߬ì¬ñ¬­ ­ ­ ­8­<­i­i­�­†­†­–­š­«­µ­Æ­Эã­è­è­ø­ü­ ®®(®2®E®Q®V®V®V®x®‰®Ž®›®°®°®µ®¿®ήÓ®Ù®Þ®Þ®ã®í®ü®¯¯ ¯ ¯¯¯¯¯%¯8¯D¯Q¯]¯l¯v¯|¯…¯œ¯°¯Á¯ίÓ¯ë¯þ¯°"°*°9°C°I°R°[°[°`°`°`°`°`°p°p°p°ˆ°ž°¦°Á°Ò°ß°á°î°ó°ó°ó°þ° ±±±±&±+±C±O±a±m±s±{±�±б°±¼±±ȱױ߱籲%²2²4²B²B²G²G²N²\²a²t²€²Œ²’²˜²¡²¦²¦²¦²¦²¦²¾²òòòòòԲԲԲԲԲԲԲԲԲԲ첳 -³%³6³C³E³R³b³g³g³g³p³г–³›³½³ɳɳγγγγγγγγã³è³è³è³ù³´´´´"´:´O´p´‘´œ´­´²´²´²´»´á´ê´û´µ"µ;µCµKµYµƒµŒµ’µ³µ̵̵̵̵̵îµ'¶0¶6¶<¶A¶J¶S¶X¶X¶X¶X¶g¶{¶™¶©¶¯¶´¶´¶ǶÛ¶···· · ·.·B·`·p·v·{·{·Ž·¢·È·Û·á·á·æ·æ·æ·þ·¸¸7¸H¸U¸W¸f¸h¸h¸h¸h¸h¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸|¸‹¸š¸¥¸§¸§¸°¸²¸²¸ƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸƸȸȸ߸ç¸ó¸ó¸÷¸ü¸ ¹(¹@¹O¹[¹q¹‹¹޹˜¹¤¹ʹê¹ -º.º0ºCºqºIºŒºŒº�ºŸº§ººÓºÖºðºþº -»"»"»M»P»_»s»”»¨»Ä»°»à»õ»¼H¼F¼;¼0¼!¼V¼V¼V¼Y¼^¼a¼{¼‰¼·¼Ù¼Ù¼½½½*½K½_½{½g½—½—½µ½ê½è½ݽÒ½ýø½ø½ø½û½¾¾¾¾8¾D¾™Á@Ä„±ÆÆ4Æ8ÆCÆJÆUÆiÆiÆtƅƌƙƥƲƶÆÇÆÇÆÐÆÕÆÝÆíÆûÆ -ÇÇ(Ç(Ç@Ç@Ç[LJLJǛÇ�Ç�ǧǯǯǹÇÁÇÁÇÁÇÒÇÒÇÒÇØÇàÇæÇëÇëÇñÇùÇýÇÈÈÈÈ.È8ÈGÈLÈTÈTÈYÈYÈ`ÈvȆÈ�ȘȞȭȲȺÈÀÈÀÈÅÈÌÈ×È ÉÉ$É,É2ÉGÉMÉRÉRÉRÉRÉRÉRÉRÉRÉRÉ]ÉkÉ{É�ɉɘÉ�ɪɲɷɷɷɿÉÈÉÑÉÞÉæÉòÉýÉ1Ê9ÊHÊRÊlÊrÊwÊwÊ~ʑʙʮʶʾÊÓÊÕÊàÊèÊýÊýÊËËË%Ë+Ë1Ë5Ë>ËCËgËsË{Ë�˜ˡ˭˸˽˽˽ËÓËðËõËýËÌÌÌ3Ì8ÌCÌKÌ`ÌeÌẻ̕Ì�̲̾ÌÃÌÏÌÚÌßÌßÌßÌßÌßÌßÌêÌêÌêÌêÌêÌêÌêÌêÌêÌêÌêÌêÌõÌÍÍÍ%Í+Í3ÍBÍGÍOÍWÍYÍaÍpÍvÍ~͈͆Í�Í­Í¶Í¾ÍÆÍÍÍáÍêÍóÍûÍÎÎÎ%Î*Î/ÎAÎuÎ}ÎŒÎ–Î°Î¸Î½Î½Î½ÎÆÎÏÎÒÎÜÎêÎüÎþÎÏ"Ï"Ï"Ï-Ï2ÏOÏTÏTÏ]ÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏbÏmÏyϑϤϬϻÏÀÏÈÏÏÏÜÏåÏîÏöÏýÏÐÐ -ÐÐ0Ð8Ð;Ð=ÐMÐWÐWÐWÐYÐnÐЂЅÐ�ВВЛРШЯмÐÑÐØÐéÐõÐÑ+Ñ@ÑUÑ\Ñ\ÑaÑaÑaÑaÑaÑaÑaÑiÑtÑ€Ñ�єєќѤѱѶѶѶѺѿѿÑÏÑÔÑÔÑÔÑàÑçÑíÑ÷ÑüÑÒ"Ò*Ò;ÒCÒfÒlÒsÒuÒ{Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò‚Ò„Ò„ÒŸÒ©Ò·Ò·Ò¼ÒÇÒÎÒêÒ÷Ò÷Ò÷ÒûÒÓ$Ó2Ó*ÕAx[.Õ.ÕDÕKÕRÕ]ÕdÕuÕÕ†Õ�Õ£Õ«Õ«ÕÆÕàÕæÕïÕöÕùÕÖ ÖÖÖÖ'Ö1ÖCÖIÖ_ÖfÖnÖ„Ö‹Ö‹Ö‹Ö™ÖÀÖÉÖÑÖãÖëÖëÖëÖöÖ×××.×5×=×D×Y×j×j×q×q×q×צ׳׼×Ä×Ö×Þ×Þ×Þ×ì×ô×ô×÷רØ(ØmØBt`¹~Û~Û–Û¦Û­Û´Û¿ÛÒÛÕÛÝÛäÛçÛ÷ÛÜÜÜÜ)Ü?ÜJÜUÜ`ÜkÜr܅ܑܮܷܿÜßÜâÜèÜíÜüÜÝ -ÝÝ Ý'Ý'Ý3ÝAÝPÝXÝgÝoݒݘݞݠݦݬݬݬÝÑÝÖÝóÝöÝöÝýÝ -ÞÞÞ3Þ?ÞOÞbÞ~Þ“Þ›Þ¥ÞÄÞØÞØÞLßC ?C.0.080@0E0DÉÊæXæXYY#YY=YKYKY[YdYkYoYxYxY€Y„Y¤Y²Y¾YÄYÏYóYóYZZZZ!Z!Z4Z?ZPZ[ZfZmZwZ„Z„Z–Z›Z›Z©Z®Z®Z¿Z¿ZÒZ×ZèZîZ÷Z [ [ [%[%[3[8[8[=[D[L[S[U[][d[d[s[y[†[�[•[¹[¹[Á[Ð[Û[â[ä[ø[\ \\\\$\)\8\?\H\]\q\q\v\v\~\”\™\­\´\¹\¹\Å\Ô\æ\õ\]]5]G]Y]h]‡]’]—]¦]º]Á]È]Û]Ý]ë]þ]^^^,^3^J^Q^]^n^…^‡^“^ž^ ^ ^«^¿^Ì^Ô^Ö^ê^ü^__"_D_K_W_u_u_u_}_ˆ_Œ_”_˜_ _§_·_Â_à_å_î_ù_` -````+`9`D`O`]`c`i`o`x`~`�`¥`­`¹`Ç`Þ`à`é`ô`ö`a a&a,a2a;aLasa{a…a“a«a²a¾aÍaâaâaïaôab b b b bcEDQ^.}.}B}O}e}Q}t}v}Ž}¦}®}FœfɦS¦SÈSÒSúS TT-T2T6T>TGTVT]TfTkT€T‘T°T¸TºTÙTáTðT÷TUUUUU U0U5UKU7UZU`U`UhUqU€UŸU¦U¨UÇUÎUÎUÎUåUîUúUþU V"VV:V?VPVUVkVWVzV€V‡V�V•V—V¨V­VÃV¯VÒVØVØVàVéVéVóVóV W;WDWPWTWbWxWmW�W�W¢WG ;z¶à¶àÕàÞàáàóà á ááá:áXágá…á™á±á¸áÞáüá â(â9âPâTâTâXâ]âbâlâoâyâ~â—âšâšâšâšâŸâ¥âÁâÏâÛâäâøâã ã%ã0ã<ãEãYãYãhãmãmã{ãHP‡—vAvA—A„A¹A¦AÈA×AßAêAìA÷ABB$B*BIPÅÕNúNúbúgúvúvú}úªúÀú¬úÝúÏúõúýúJŒ¥ÄÆøÆøùø%ù%ù8ù<ù^ùrùwùwù~ù†ùŽù£ù¯ùÀùÅùÖùêùïùñùñùñù ú+ú+úHúKP�­F<F<o<q<<…< <¯<¾<Í<Û<æ<é<ù<Lè7†.†.±.´.·.½.Â.Ù.ð./+/G/J/i/ƒ/•/¢/¸/Ë/Ð/Û/ã/ã/í/í/ø/ý/0070V0X0m0s0’0±0¹0Ä0Ä0Î0Î0à0161H1M$ N[N[y[b[ƒ[‹[NLx‡ÖËÖËèËýËÌ Ì&Ì.Ì>ÌIÌZÌ`Ì’ÌOTHY(d(d:dÝFÝNÝVÝ^ÝdÝ|݋ݕݘݘݢݨݮݮݲݺÝÁÝÅÝÍÝÕÝÛÝãÝêÝòÝúÝþÝÞÞÞ"Þ.Þ4Þ<Þ@ÞGÞOÞWÞ[ÞaÞiÞpÞxÞ€Þ„ÞŠÞ•ÞšÞ°ÞÁÞÆÞÉÞoßTL”£@†@†Y†[†b†x†ˆ†Ž†¦†¾†Á†Ó†‡UÔ*[nïnï‚ï—ï¦ïªï¸ïÁïÐïÐïßïêïõïððð.ðEðKðPðTðgðgð}ðð‰ð­ð¸ðºðÓð×ðåðêðêðñðñññ…ñV$[[9["[C[K[WPÍÝžDžD¿D¬DáDÎDðDÿDEEE E*E*ELEREX,>Ö>ÖGÖMÖUÖ^ÖgÖlÖY„¾�¾�ß�ô���B�O�a���‘�‘�ž�ž�¥�¸�¶�Æ�Æ�Ñ�Û�á�ç�ê�ø�ÿ�‘‘!‘6‘;‘F‘Q‘k‘…‘–‘œ‘¢‘©‘Ç‘¯‘БÖ‘Ü‘ä‘’ì‘ ’’’!’!’(’F’.’O’U’[’c’ƒ’k’Œ’’’˜’ ’ ’ ’¶’¶’¶’¶’Á’Ë’Ô’ô’“““'“;“@“@“K“S“^“g“s“‡“—“¬“Á“Þ“ã“ã“î“ö“”””-”J”_”t””„”„”�”¥”º”Ɣהܔ픕• ••$•)•)•8•=•=•L•Q•Q•b•g•g•x•}•}•�•Ÿ•¤•¤•·•ƕ˕ٕ˕í•ò•–ò•––'––;–@–N–@–b–g–g–„–‰–«–°–¾–°–Ò–×–×–ô–ù–— —.— —B—G—G—d—i—‹—�—ž—�—²—·—·—Ô—Ù—û—˜˜˜"˜'˜'˜B˜G˜G˜b˜g˜g˜‚˜‡˜‡˜¢˜§˜§˜˜ǘǘâ˜ç˜ç˜™™™"™'™'™8™=™=™N™S™S™_™j™™„™„™�™©™®™Ô™Û™å™ê™û™šš%š*š;šFšNšSšSšWš[šbšlšvšvš‰šŽšŽšŽš’š«š´š´šÚšßšßšçšûš››+›6›A›L›^›j›s›x›x›x›‰›¦›±›»›Æ›Ë›Ö›Þ›ã›ã›î›ö›ÿ› -œœ2œJœ^œcœcœnœ�œ‹œ–œ·œÜԜٜêœîœóœóœ����&�6�E�b�w�Œ�—�œ�§�¯�´�¿�Ï�Þ�û�ž%ž%ž%ž%ž*ž/ž/ž;žLžLžqžsž�ž�žšž®ž¸žºžÆžΞëžüžŸŸ4ŸEŸVŸgŸrŸŠŸšŸŸŸŸŸªŸ¯Ÿ¯Ÿ·ŸŸÇŸÇŸÏŸÚŸߟߟ矠ñŸïŸ  % % - N 7 5 f k  k — œ œ © ® ® ¶ » » Í ß ä ä ø ä ¡¡¡¡"¡"¡5¡:¡:¡M¡R¡R¡l¡|¡�¡�¡›¡«¡°¡°¡Ê¡Ú¡ß¡ß¡ù¡ ¢¢%¢¢=¢B¢B¢M¢R¢Ž¢|¢j¢R¢¦¢«¢ç¢Õ¢â«¢ÿ¢£££#£(£(£7£G£L£L£[£i£n£–£„£n£®£³£Û£É£³£ó£ø£ ¤¤ø£8¤=¤=¤Z¤D¤„¤”¤™¤™¤´¤ ¤Þ¤î¤ó¤ó¤ÿ¤¥¥¥¥¥(¥8¥=¥=¥P¥`¥e¥e¥x¥ˆ¥�¥�¥ ¥°¥µ¥µ¥½¥Â¥Â¥Ê¥Ï¥Ï¥×¥Ü¥Ü¥ä¥é¥é¥ü¥¦¦¦¦g¦U¦C¦1¦¦t¦y¦Ǧµ¦£¦‘¦y¦Ô¦Ù¦Ù¦è¦§§§§4§9§9§J§X§]§]§e§j§j§r§w§w§§„§„§¼§ª§˜§‹§Û§ö§û§û§3¨!¨¨¨R¨m¨r¨§¨•¨Ѝr¨¿¨Ĩù¨ç¨ܨĨ©©0©©©H©M©j©T©M©‚©‡©‡©“©¬©¼©Í©Í©ò©ô© -ªªª-ª:ªkªœªŠª¿ªǪǪǪÓªتتëªöª«««« « «9«>«>«F«K«_«K«n«y«~«’«~«¡«¬«±«±«¼«Í«Ò«Ò«Ý«è«í«í«þ«¬¬¬¬¬3¬>¬C¬N¬C¬]¬b¬v¬b¬…¬Ь•¬Ь¤¬©¬½¬©¬̬ѬѬå¬Ѭô¬ô¬ô¬ù¬­ù¬­­­)­­<­A­A­M­A­`­e­e­q­e­„­‰­�­‰­¬­¸­íέÓ­ç­Ó­ö­® ®®®1®®H®@®Q®V®V®^®c®c®l®q®q®z®®®ˆ®�®�®˜®�®�®¨®­®­®¸®½®½®È®Í®Í®Ø®Ý®Ý®è®í®í®ø®ý®¯ý® ¯+¯6¯A¯F¯F¯P¯U¯U¯_¯d¯d¯n¯s¯s¯}¯‚¯‚¯Н�¯�¯œ¯¡¯¡¯®¯³¯³¯³¯³¯³¯»¯À¯À¯ȯͯͯÕ¯Ú¯Ú¯â¯ç¯ç¯ï¯ô¯°ô¯°(°-°-°4°?°_°d°z°…°ž°а­°¸°ðȰȰϰÚ°ú°ÿ°± ±9±%±H±S±^±c±c±j±u±•±š±°±»±Ô±À±ã±î±ù±þ±þ±²²(²H²M²c²n²‡²s²ª²–²¹²IJɲɲä²вó²³³.³9³R³>³u³a³„³�³”³”³¯³›³¾³Þ³ã³ù³´´ ´@´,´O´Z´_´_´n´s´s´‚´‡´‡´‡´�´’´’´’´œ´ž´ž´¨´¯´Ò´Ô´Ô´Þ´Þ´Þ´Þ´Þ´à´à´÷´þ´ µ µµµ!µ,µ7µBµ<µ]µzµoµ’µ’µ µšµƵ»µÞµÞµÞµçµîµ¶¶¶'¶'¶F¶Q¶h¶ˆ¶ˆ¶ˆ¶©¶¹¶ζà¶ð¶ð¶··+·=·=·A·F·M·]·|·|·€·—·ž·£·£·§·²·¾·Ì·ù·¸¸!¸T¸`¸e¸{¸“¸Ÿ¸°¸µ¸Ƹ帹<¹?¹O¹Q¹Q¹U¹t¹¹¹‚¹“¹Ĺç¹ç¹ê¹¼Z, nÖnÖ|Ö‚Ö†Ö�Ö˜ÖžÖ[`BV··ä‡ò‡ù‡ý‡ ˆ%ˆ)ˆ/ˆEˆbˆdˆdˆ•ˆƒˆdˆ´ˆ¾ˆ\8 -žZžZ¿Z¬ZÎZÙZäZïZúZ[ []\’     + 3 > I T V l l ~ Š “ – Å ^øª¤ÎìÎìóìøìí1í1í<íIígíoíœí¡íÊíêíî îî3îYî^î‡î¤îÊîáîçîëîï ïï"ï*ïIïOïSïlïtï“ï˜ï©ï±ïÐïÕïÝïãïçïëïýïð -ð(ð-ð:ð?ð?ðLðdðsð€ð ð ð·ð¼ð¼ðÓðÕðÕðéðëðëðññññññ4ñ4ñIñNñNñ]ñ]ñ–ñ¯ñ¯ñÂñÇñÇñÇñÇñöñò*ò*ò*ò7òNòPòPòPò]òtòvòvòƒòšòšò±ò³òÎòêòêòêòîòðòðòðòõò÷ò÷òüòüòó ó ó'ó'ó'ó/ó4ó4ó4ó<óAóAóIóIóKóuówó—ó·ó·ó·ó·ó·óÑóÔóéóðóòóûóôôôô$ô6ô6ôBôUôlôvôžô°ôÌôìô õ!õ?õdõwõ–õ¼õÕõäõúõöööOöTöTögögösö…öŠöŠöžö¼öáöôö÷9÷Z÷i÷—÷©÷³÷Õ÷×÷×÷×÷ã÷ã÷ã÷ø1ø3ø3øBøBøGøGøGøGøGø^øcøvøÅø_\ -îOîOPP2P?PVPiPtP‰PvP˜P P«PÁP·PÙPßP`øA&;&;D;G;N;U;\;`;b;i;p;t;x;‹;³;Î;»;æ;ë;<<<#<2<l<q<ž<¦<«<´<À<È<Ï<ñ<÷<====I=k=q=x=x=~=�=…=–=¹=Ë=a$~ß~ß�ߨߨ߮ßb|XsþéþéêDêDêcêsêuêuêuêuê|ê„êŸê¸êºêºêºêÂêÝêßêßêéêéêëc”"†4†4¨4²4¾4Ã4Ó4Ù4î455 5.5E5M5W5f5n5{5ƒ5†5†5†5ˆ5—5¡5ª5²5µ5Ç5dôÍ8878D8G8P8V8m8„8›8¦8Ü8ü8999+9=9J9`9v9�9’9¤9©9¬9Ì9ì9ô9ü9:!:A:I:Q:S:s:{:€:…:�:�:›:›:§:§:¹:ù:;;";ed¤¹ø‹ø‹ŒŒŒ!Œ)Œ7ŒJŒVŒpŒ}Œ}Œ€ŒŽŒžŒ¸Œ¼ŒÄŒf(¸þŸ*Ÿ*µ*º*Î*ý* ++$+0+7+G+e+�+ +®+®+µ+Å+Ñ+á+ê+,,,,-,-,C,C,Y,Y,o,o,…,…,›,›,±,±,È,È,ß,ß,ö,ö, - -$-$-;-;-R-R-i-q-|-�-˜-©-¬-®-Å-Ì-/g¬÷þþ%-58CUUlsvx„••˜ ¶¹ÇÊÍÔØàî   e h(ÅËþ�þ�%‚‚4‚F‚N‚iC®P®PÑPæPëPóPûPQQQ Q%Q*Q2QNQTQVQXQeQeQrQgQƒQ‰Q‹Q�QšQšQšQŸQ¨Q°Q¹QÁQÃQËQÓQÛQèQîQùQRRR*RKRRR]RfRwR{RƒRƒR—R§R¯R²RSj8-7O0O0c0g0l0w0‚0…0‰0‘0kˆWõ¾ˆ¾ˆ؈óˆùˆ‰‰‰,‰1‰<‰Z‰D‰i‰|‰މ—‰Ÿ‰©‰ljÙ‰â‰ê‰ô‰Šù‰Š0Š:ŠBŠZŠDŠŠiŠŽŠ ŠªŠ²Š²Š»ŠÊÙŠòŠ‹‹‹‹‹#‹A‹C‹H‹S‹i‹i‹i‹m‹y‹š‹¤‹®‹·‹Ø‹â‹ì‹î‹î‹ ŒŒ'Œ*ŒCŒGŒbŒfŒ…Œ‰Œ¤Œ¨Œ¨Œ¨Œ®Œ¼ŒÆŒߌåŒðŒüŒþŒ� �%�0�>�H�a�d�l�x�z�‚�…�ž� �¬�®�¶�¼�Õ�í�ù�ŽŽ(Ž8ŽQŽbŽbŽmŽxŽ�ŽœŽ±Ž¶ŽËŽÛŽôŽ�� ���,�3�E�leãvßvß�ߙ߹߹߿ßÇßÏß×ßßßåßòßòßààà àààààà!à&à&à>àQàWà\à\àeà…à…à…àŒàŽàŽà•à—à—à�à�à¤à¦à¦à¬à¬à³àµàµà»à»àÂàÂàÊàÐàÖàÞàÞàÞàÞàêàòàúàá -ááá á8áGáQáTáTá^ádájájánává}á…á�á‘á—áŸá¦á®á¶áºáÀáËáÑáÞáêáðáøáüáâ ââââ%â,â4â<â@âFâQâVâlâ}â‚â…â+ãm`�!�!˜!Ÿ!³!Ç!Ì!ê!ï! ""-"/"F"Z"c"e"y"‰"º"n�2Ò0”0”F”W”h”y”Š”›”®”¶”Ä”â”í”ó”•••(•9•?•T•o•o•{•ƒ•‹•‘•¦•®•²•º•ȕΕӕӕè•ý•– –––=–P–\–`–j–ƒ–‰–‹–˜–š–¬–¬–³–»–Í–Í–þ– — —#—-—1—=—A—M—Q—]—a—a—w—Š—�—”—ž—¢—±—µ—Ä—È—Û—ß—ß—ß—ß—ö—˜˜˜0˜@˜N˜Y˜o˜|˜‹˜“˜ ˜»˜Ë˜Û˜à˜à˜à˜à˜í˜ü˜™ -™ ™.™C™T™d™j™j™j™|™‚™Ž™”™¡™¼™Ì™Ø™Þ™ë™ý™ š-š¹›oÔ¼í(m(m:mKmVmamzmŒm¤m©m¸m¿mÌmÓmámèmêmímòmômúmn.nDn\nanpnwn„n›n¹nÀnÂnÅnÊnín oop$hm?&?&M&a&h&‚&qxKe¶R¶RÞRÊRíRSôRSS#S+S2S=SHSPSXScSnS„SySœS¤SrJ‡VsVsrsys‘s©s³s¾s¾sÃsÎsÚsåsósttt t5tJtJt^tftvtƒt’tŸt°tÁtÏtÝtätêtÿtuu(u5uFuVu_upupuvu„u•u¢u²uvs8³½^P^PbPgPlP}P‹P”P™PžP Pt88B—0—0«0¯0´0¿0É0Ì0Ð0Ø0u0ˆ�~N~N”N§N´NºN½NÅNvÜtffˆ“ž§·ÉÏÕÛñà/5:]ptz‘—§­¹ÇÌÚó -#(0O]iƒ¢©³ÂÈÎÔÚð%1HSbpŒœªÁÍÒàü%.4?DJaly€€Ž�Ÿ­¼ÎÎÖù8w`-AΆΆä†ö†ý†‡‡/‡3‡9‡O‡l‡n‡n‡Ÿ‡�‡n‡¾‡ȇxD‡Ô~ã~ã�ã˜ã£ã©ã¯ã³ã·ãããããêãíãòãää/ä3ä8ä8ä?äBäGäSädähäyä‹ä�ä‘ä£ä§äÃäÇäÌäÌäàäãäñäûäå(å3å7å<årå‹å–åšå«å¶åºå¼åÇåËåËåßåãåååååðåôåæ æ æ ææ2æyˆÕó6æ6æJæ`æ`æ`æbæbæiækækærætætæ�æƒæƒæ�æ—æ™æ™æ¦æ­æ¯æ¯æÇæÌæÌæÜæz°0Xþ[þ[\\)\�\s\h\N\7\“\¥\•\Å\Å\Ü\Ð\]] ]4]!]C]I]P]t]c]W]‹]�]©]©]°]Ú]Ú]Ú]æ]{ÄL¹ûû,û7ûBûhûhûjûwû‚ûˆû™û¨û·ûÄûÄûÊûÏûÔûêûýûü üü+ü3ü>ü:üUücücücünü‰ütü‘ü¤ü¦üÂü®üÊüØüØüÚüöüöüýüý ýýý8ýLý?ýTýZýcýcýcývý{ý{ýƒýƒýŽý£ý¬ý¬ý¬ý¬ýÈýßýåýêýêýÿýþ +H2@2#2#;#A#\#a#Œ#Ž#Ã#­#Ó#Ú#ë#þ#¨­Óÿaÿabb(b4bTb6bcbibib“bšbÅbÓbÓbc"c:c'cIcucbcŒc“c¾c¾cÅcécÿcÿcÿc dH>L?ý?ýYýcýgýkýpýrýŠý¢ý¢ý¬ýp©ÁOOy{‚ˆŽ�–œ²ÅÔÙÛàêÿ(M_(FäFäZä{äää‡ä8ää ä$ä/ä8ä?äAäFäd`µþ×þר Ø-Ø/Ø<Ø>ØJØJØWØYØfØhØtØtØ�Ø�Ø�بدؾØÉØÏØÔØÖØâØéØøØÙ ÙÙÙÙLÙrقْ٢٤ٴÙÄÙÔÙÔÙÙÙìÙóÙúÙúÙúÙúÙÚÚ#Ú)Ú/Ú5Ú9Ú9Ú9ÚfÚmÚƒÚ�Ú•Ú›Ú¡Ú£Ú£Ú±ÚD¶Ã¶Ú¶ÚÌÚÏÚÒÚßÚåÚòÚõÚøÚþÚÛ +Û ,cjŠŠŠŠ#Š.Š4Š:Š + hlfft‰� P r6r6€6�6«6±6Ã6Ã6Î6×6Ý6ä6ê6 ”;\?K?KGKKKdK~K›K¼KÅKÖKúKLL0L?LHLUL\LŽLŸL£L«L«L¾LÎLÒLÖL Œ×öÞÞþ +$$PfzˆŸ¥±¶Äàéùû|1’"’"¨"±"¼"Ö"Ö"Ù"è"î"÷"ù"ÿ"# +###!#$#$#.#0 'HˆHˆVˆvˆ|ˆ‚ˆ‚ˆˆˆ„“°ð ð ¡ ¡¡¡:¡M¡T¡e¡Š¡•¡ ¡¢¡­¡Ò¡Ý¡è¡ê¡ñ¡ú¡ü¡¢¢8¢("ÏßÏßÞßõßààà oßoß~ß”ßšß ˆx³x³�³¤³»³Ç³Ò³ä³õ³æ³ä³´0´<´C´I´U´_´f´m´q´s´y´…´�´–´�´¡´¡´«´°´»´Í´Þ´Ï´Í´þ´ µ+µ2µ8µDµNµUµ\µ`µbµhµtµ~µ…µŒµ�µ�µ�µ«µ»µÍµÞµÏµÍµþµ ¶+¶2¶8¶D¶N¶U¶\¶`¶b¶h¶t¶~¶…¶Œ¶�¶�¶š¶ª¶¼¶Í¶¾¶¼¶í¶ô¶ú¶····"·$·*·6·@·G·N·R·R·\·j·s·Œ·˜·œ·œ·Ÿ·¨·¸Ôw‚w‚”‚b¨œ‚«‚΂Ù‚ë‚ò‚ƒ ƒƒƒ ƒ$ƒPƒPƒeƒgƒgƒsƒ{ƒƒŒƒŒƒ˜ƒ ƒ¤ƒ±ƒ±ƒ±ƒ̓؃éƒéƒîƒ„„„ „+„0„0„5„M„\„a„g„r„w„w„…„Ž„š„¢„ª„²„µ„»„À„Ʉۄä„õ„…… +…………#…#…(…(…(….…1…8…C…X…}…”…¡…©…±…½…É…Ï…Ö…ß…ã…æ…ò…ø…ÿ…†††"†"†/†/†7†?†H†W†\†\†c†n†t†|†‚†�†’†’†¡†¬†¾†Ć̆Ò†׆â†ô†ú†‡‡ ‡ ‡!‡'‡2‡8‡:‡J‡P‡P‡u‡œ‡¡‡¡‡µ‡»‡чâ‡è‡í‡ˆ ˆˆ$ˆ,ˆ2ˆ7ˆ7ˆKˆQˆgˆxˆ~ˆƒˆœˆ¢ˆ²ˆºˆˆȈ͈͈ãˆéˆÿˆ‰‰‰*‰0‰A‰I‰Q‰W‰^‰c‰c‰y‰‰•‰¦‰¬‰®‰½‰É͉Õ‰݉ã‰ê‰ê‰ê‰ü‰ŠŠ&Š&Š+Š+Š9ŠAŠRŠeŠlŠrŠzŠ€Š�Š–ŠžŠ¤Š¤Š¤Š©Š©Š©Š©Š©ŠÈŠÔŠÙŠÙŠèŠñŠüŠ‹‹‹ ‹ ‹6‹<‹R‹c‹i‹n‹€‹†‹‹‹¤‹‹‹Ç‹Ç‹Ó‹Û‹Þ‹ä‹ê‹ï‹ï‹ŒŒ#Œ3Œ9Œ?Œ?ŒPŒnŒnŒsŒsŒŒ‡ŒŠŒ‘Œ—ŒœŒœŒ¼ŒÄŒÔŒÚŒáŒÿŒ��.�6�9�@�F�^�f�~�†�‰���–�–�–�µ�Å�Ñ�Ù�Ü�ã�é�ù�ŽŽ/Ž7Ž:ŽAŽGŽ_ŽkŽ†ŽŽŽ‘Ž˜ŽžŽžŽžŽžŽ£Ž£Ž¬Ž¼ŽÒŽØŽðŽ� �� �&�+�G�M�Y�a�d�k�q�š�¢�²�¸�¿�¿�¿�Ä�Ä�Í�å�û���,�2�7�b�h�{�²�Ä�á�é�ï�ô�ô�‘‘&‘1‘1‘6‘6‘P‘\‘h‘s‘s‘x‘x‘’‘ž‘ª‘µ‘µ‘º‘º‘БÖ‘â‘è‘í‘ÿ‘’ +’’%’1’7’=’D’W’b’k’w’’‚’ˆ’Ž’“’§’¶’¾’Ö’Þ’á’ç’í’“ “-“G“O“R“X“^“^“o“x“„“Œ“�“–“œ“¡“³““Ê“â“ê“í“ô“ú“””9”S”[”^”e”k”k”{”„”�”˜”›”¡”§”¬”À”Ï”×”ñ”ù”ü”•• •(•J•f•n•q•w•}•}•Ž•—•£•«•®•µ•»•À•Ò•á•é•– ––––4–<–^–{–ƒ–†–�–“–“–“–“–“–˜–˜–®–´–À–Æ–Ë–Ý–ã–è–ö–— —— —"—)—/—4—F—U—]—u—}—€—‡—�—¥—­—Ì—æ—î—ñ—ø—þ—þ—þ—˜˜$˜,˜/˜6˜<˜S˜b˜n˜‰˜‘˜”˜›˜¡˜¹˜Ř瘙 ™™™™™™™™!™!™4™O™U™`™e™e™x™Ž™”™Ÿ™¡™¡™´™×™Ý™è™è™ú™ššš+š;š;š@š@šSšišoš}šŒš‘š‘š¤šºšÀšΚÝšâšâšøšþš›3›3›]›c›h›t›}›Œ›Œ›‘›‘›§›­›Ê›â›â› œœœ#œ,œ;œ;œ@œ@œVœ\œyœ‘œ‘œ»œÁœÆœÒœÛœêœêœïœïœ� �(�@�@�j�p�r�~�‡�’�’�’�’�—�¥�®�¿�Á�Ó�à�à�à�ð�žž)ž5ž6ž;žPžmž}ž¡ž±ž·ž·ž·ž¼žÁžÖžéž'Ÿ7Ÿ=Ÿ?ŸDŸUŸdŸ–ŸžŸ¤Ÿ¦Ÿ«Ÿ²Ÿ²Ÿ»ŸÍŸàŸéŸøŸøŸýŸ   % ' 0 ; ; \ c i q | ‚ ’ ˜   « ± ± ¶ »  É Р× à ï ï ï ô ô ô ¡ ¡ ¡¡(¡0¡8¡>¡>¡>¡C¡C¡N¡_¡b¡n¡w¡ƒ¡Š¡�¡•¡•¡ ¡±¡´¡À¡É¡Õ¡Ü¡â¡ç¡ç¡ç¡ç¡ì¡ñ¡ñ¡ü¡¢¢ ¢¢¢¢#¢%¢;¢B¢H¢W¢b¢m¢s¢¢ƒ¢ƒ¢�¢˜¢›¢›¢¦¢¨¢¾¢Å¢Ë¢Ó¢Þ¢é¢ï¢ù¢ü¢££££££ £#£,£/£/£:£<£Z£a£l£w£z£€£…£…£�£”£”£ £©£¬£¬£·£¹£Ï£Ö£Ü£ë£ö£¤¤¤¤¤#¤,¤/¤/¤:¤<¤R¤Y¤_¤g¤r¤}¤ƒ¤�¤�¤”¤”¤œ¤£¤¦¤¨¤³¤·¤À¤ääΤФî¤õ¤¥ ¥¥¥¥¥+¥/¥/¥;¥D¥G¥G¥R¥T¥j¥q¥w¥‰¥”¥Ÿ¥¥¥ª¥ª¥µ¥º¥º¥Å¥Ê¥Ê¥Õ¥Ø¥Ü¥ã¥è¥í¥ò¥ò¥¦ ¦ ¦¦¦-¦5¦9¦M¦T¦X¦X¦e¦q¦y¦¦�¦“¦¤¦¶¦Á¦ŦŦÒ¦Ú¦â¦è¦è¦è¦è¦è¦ê¦ê¦ø¦ÿ¦ §§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§&§(§(§?§G§S§S§t§ƒ§›§�§©§¶§¶§Ù§æ§ñ§ú§¨¨¨¨ ¨ ¨"¨4¨R¨^¨^¨‹ªx¿ÙJ4J4\4^4b4k4w4ƒ4˜4˜4Ç4Ë4Ð4Ü4ï4ù4ü45 +555l_vÏ}Ï}å}ô}ù}~û}~ ~ ~-~B~/~Q~W~p~‰~¢~»~Ô~Þ~„žnn-n5n;nBnInKnNnUn\n\nmnqnwnwnŒn–n–nžn·nÚnûno!o&o2o=oBoRoUoioootozo|o‚o…o‹o�o“o›o¤o´o×oåoýopp+p>pCpQpipnprp—p§pÊpÝpâpèpípðpòpøpþpq qqqq!q*q8qPqUqYq~qŽq±qÄqÉqÙqüq +r"r'r+rPrcrcr~r~r~rŒr¤r¦r¦r¦r´rÌrÎrÎrÜrôrôrssss2sRslstss’s–s–s–s�s£s½sÅsÐsësísós tt t.t9t9tStH…“˜…˜…¯…Å…Õ…Ü…ó…† †$†g†L�žï&€€5€7€P€i€t€€‡€4IR†×†×�×�×’× ×®×±×¶×ì= û ûGûJûhûû�û�û«û±û¶û¶ûÑû×ûÜûÜûåûóûü(ü-ü4ü:ü<üYüiünüuü{ü}ü}ü�ü–ü–ü–ü¦ü›ü·üÇüÙüÞüÞüÞüåüìüóüýý+ý+ý=ýÌL»°¥°¥Ê¥Õ¥à¥é¥ñ¥ô¥û¥ÿ¥¦¦ ¦%¦3¦P¦]¦l¦q¦}¦‚¦‰¦•¦š¦�¦§¦Ÿ¦·¦À¦Ñ¦Ï¦Ç¦ß¦è¦î¦î¦ü¦ÿ¦§§%§,§0§5§L§d§m§{§—§£§£§»§Ì§Ì§Ó§ì§ø§¨¨¨.¨7¨>¨B¨M¨R¨Y¨v¨£¨ª¨®¨°¨»¨Ç¨Ë¨à¨â¨ó¨ý¨©©!©0©I©I©L©T©Y©Û©Pw‡×M×MóMNN.NKNfNlNuNƒN‰NŒN˜NŒ ˜a˜a¨aÌaÌaÚaÚaÚaÚaãaãaêabb"b"b-b-b;bKbKbYb_b_bwbwb}b£b (kq@Š@ŠNŠZŠjŠqŠwŠ @KWÇéÇéÕéÝéäéêêêêêê!$/4wàwà„à™àžà¤à"$).GàGàTàiànàtà#$#(àà&à<àAàGà$€ïK**4DZbl‡Œœ²ºÄßäú   " , 6 @ J T ^ h r | ’ œ ¦ ° º Ä Î Ø â ø  " , 6 @ J T ^ h r | † � š ¤ ® ¸ Â Ì Ö à ê ô þ !!!&!0!:!D!N!\!%¤Cðœðœ� �"�3�E�G�N�T�d�o�y�„�›�ž� �²�¸�È�Ò�Ü�ã�î�ž ž ž!ž!ž!ž5ž&$5:§à§àµàÊàÏàÕà'¤Di8ž8žNžUžjž{ž�ž�ž–žœž¬ž·žÁžÌžãžæžèžúžŸŸŸ%Ÿ,Ÿ7ŸKŸSŸSŸiŸiŸiŸ~Ÿ((&,ò/ò/00000)0]e×L×LíLMMMM 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(t(x(~(—(™(Ÿ(¬(®(º(Ø(Þ(é( )))#)))2)8)J)[)c)g)x)|)‚)›)�)£)°)²)¾)Ü)â)è)î)÷)ý)* *4*=*C*C*X*]*]*d*n*ƒ*ˆ*ˆ*ˆ*¥*§*Ä*Æ*ã*é*ñ*õ*ü* +%+++7+N+U+[+f+k+k+r+v+€+Ž+�+˜+�+¥+°+¶+Å+Ê+Ð+Õ+Ý+â+ñ+,,%,0,L,N,j,j,q,†,‹,”,¡,¦,¬,±,±,¸,¼,Æ,Ô,Ö,Þ,â,æ,ð,ü,---- -1-?-D-P-P-X-X-{-{-‰-�-”-˜-�-�-�-�-£-¥-¥-È-Î-Ô-Û-ñ-ó-ó-ó-þ-þ-þ-.,/+4.w^É^ÉxÉ|ɔɜɤɮɲɹɿÉÓÉÛÉàÉãÉîÉùÉÊ ÊÊÊ/Ê6Ê=ÊHÊSÊUÊ`ÊkÊmÊyʂʂʘʣʻÊÁÊÊÊÛÊáÊêÊüÊËË +ËËËË0Ë;Ë?ËMËOËSËbËbËbËsËsËxËŠË�ËþË,Ô@ŽåŽå¤å«å®åÒåÒåïåææ(æ-æ-æKæYælææ‡æ‡æ‰æ‰æ‰æœæžæžæžæ¥æ¸æËæËæËæÞæéæüæççç"ç7çJçQçQçTçyç-LAP$$$!$-$H$M$m$o$Š$¥$¥$­$´$Û$.P~ŽÈŠÈŠÖŠãŠñŠ‹‹‹)‹7‹I‹T‹b‹h‹n‹/4 +66 6,6=6O6X6f6l60|ºU~ +~ +  +§ +µ +À +æ +æ +ï +ñ +ñ +ø + & & 5 D ` k k w  � ™ ·  Ä Ý ã î þ   $ ) / 6 ^ c q z z � � § § ¶ ¿ Ó Ú á æ ñ ÷ ÿ % . 5 : E Q ` t y � � Ÿ Ÿ ¶ ½ Å Õ ç í ö ö   $4CUZj}…™·ÎÒÞõ#)4@P`enn€„�§ÃÕÛæò$**/1166EKQQUÎ1ŒÄãÛÛ*Û6Û:Û>ÛEÛLÛ[ÛfÛlÛqÛsÛÛ†ÛŽÛ”ÛšÛžÛžÛ­Û´Û¼ÛÂÛÈÛÊÛÊÛÖÛ28 */*/8/>/J/U/f/p/w/}/3@t€'ë'ë5ë@ëGëfësësëvëxë~ë4ÌSÏÏõ#%,366HHZey�Š’—�³ÃØÝö     * > F O W \ c u … š œ µ Í Ñ Ñ å í ö þ  + + +/ +D +I +b +z +~ +‘ +‘ +‘ +– +¸ +Ú +å +ë +   + ? G P X Z ` r ‚ — ™ ² Ê Î Î â ê ó û    - B G ` x | � � � ” ¶ Ø ã é     % + 5 @ R b y � § ¾ ¾ Ñ ì ì ì  ++4>Kesz��®½¶Õåÿÿ5D{ˆîîþ!337:B6\ObX‰X‰x‰‡‰�‰™‰�‰¡‰­‰²‰·‰·‰È‰Ì‰Ô‰ì‰ï‰û‰70üîãîã÷ãüãä äää8tÚ��±¸¿Êààò  %R,ax‰�¡¦»ÓØàäöé)--2C‹eš¸ÃÉÝõú ',3EUkm†ž¢¢·ÏÔÜàïâ"&5555HNX_r��©¹ÇÇÛé÷  $CRKjz�’¸©Þà   UZekv˜²ŸÁØé!2T‰v˜¶ÁÇÛóø %*1CSik„œ  ÂÛïó%,?ZZZv†””¨¶ÏÄâõú(!@Pa¡¡¨ËËËë9Dmz––¦ºÃÉÛÛßâê:lwŽß~ß~õ~  -00=R?ag€™²Ëäî;<‰”FFVgpvz…<”)>î>îFîJîVîgîiîyî„î–î¡î¬î»îÌîÓîìîðîïï ïï%ï.ï<ïPïlïqïŽï=d(=ˆˆˆˆ”ˆ¨ˆ«ˆ¿ˆÇˆËˆÕˆßˆçˆêˆðˆ>4u¾0F0FVFYF]FjFsF~FŽF–F FÈFÈFØFÝFÝFíFòFòFGGGGGG,G1G1GAGFGFGVG[G[GkGpGpG€G…G…G…GˆG‘GªG¸GÏGâGäGêGìGïGHHH HHH&H6HCH[HcHiHiH}H}H†H‰HII?Ä n�ª�ª¬ª´ª·ªŪÓªèªñª «%«7«B«S«W«i«l«w«€«Œ«Ÿ«ЫÅ«««à«÷« ¬¬%¬F¬[¬¬“¬•¬¶¬œ¬ѬÔ¬Ù¬ܬܬã¬ù¬­ ­­!­.­A­A­Y­]­Š­Š­¢­§­§­·­»­Ì­Ö­ç­ñ­® ® ®®®.®8®I®S®f®r®w®w®w®™®ª®¯®¼®Ñ®Ñ®Ö®à®ï®ô®ú®ÿ®ÿ®¯¯¯"¯(¯-¯-¯3¯9¯>¯>¯F¯Y¯e¯r¯~¯�¯—¯�¯¦¯½¯ѯâ¯ï¯ô¯ ° °6°C°K°Z°d°j°s°|°|°�°�°�°�°�°‘°‘°‘°©°¿°ǰâ°ó°±±±±±± ±-±2±2±9±G±L±d±p±‚±ޱ”±œ±¢±«±ѱݱã±é±ø±²²5²F²S²U²c²c²h²h²o²}²‚²•²¡²­²³²¹²²DzDzDzDzDzß²ä²ä²ä²ä²ä²õ²õ²õ²õ²õ²õ²õ²õ²õ²õ² ³#³+³F³W³d³f³s³ƒ³ˆ³ˆ³ˆ³‘³«³·³¼³Þ³ê³ê³ï³ï³ï³ï³ï³ï³ï³ï³´ ´ ´ ´´!´&´&´1´C´[´p´‘´²´½´δÓ´Ó´Ó´Ü´µ µµ"µCµ\µdµlµzµ¤µ­µ³µÔµíµíµíµíµíµ¶H¶Q¶W¶]¶b¶k¶t¶y¶y¶y¶y¶ˆ¶œ¶º¶ʶжÕ¶Õ¶è¶ü¶"·5·;·;·@·@·O·c·�·‘·—·œ·œ·¯·÷é·ü·¸¸¸¸¸ ¸5¸=¸X¸i¸v¸x¸‡¸‰¸‰¸‰¸‰¸‰¸�¸�¸�¸�¸�¸�¸�¸�¸�¸�¸�¸�¸�¸�¸�¸�¸¬¸»¸ƸȸȸѸÓ¸Ó¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸é¸é¸¹¹¹¹¹¹-¹I¹a¹p¹|¹’¹¬¹¯¹¹¹Źë¹ º+ºOºQºdº’ºjº­º­º°ºÀºȺãºôº÷º» »+»C»C»n»q»€»”»µ»É»å»Ñ»¼¼4¼i¼g¼\¼Q¼B¼w¼w¼w¼z¼¼‚¼œ¼ª¼ؼú¼ú¼%½(½7½K½l½€½œ½ˆ½¸½¸½Ö½ ¾ ¾þ½ó½ä½¾¾¾¾!¾!¾(¾8¾Y¾e¾¸Á@À„°?Æ?ÆUÆYÆdÆkÆvÆŠÆŠÆ•Æ¦Æ­ÆºÆÆÆÓÆׯèÆèÆñÆöÆþÆÇÇ+Ç6ÇIÇIÇaÇaÇ|ǨǨǼǾǾÇÈÇÐÇÐÇÚÇâÇâÇâÇóÇóÇóÇùÇÈÈ È ÈÈÈÈ$È)È)È?ÈOÈYÈhÈmÈuÈuÈzÈzÈ�ȗȧȱȹȿÈÎÈÓÈÛÈáÈáÈæÈíÈøÈ,É;ÉEÉMÉSÉhÉnÉsÉsÉsÉsÉsÉsÉsÉsÉsÉ~ɌɜɢɪɹɾÉËÉÓÉØÉØÉØÉàÉéÉòÉÿÉÊÊÊRÊZÊiÊsÊ�ʓʘʘʟʲʺÊÏÊ×ÊßÊôÊöÊË ËËË&Ë7Ë?ËFËLËRËVË_Ëdˈ˔˜˱˽ËÂËÎËÙËÞËÞËÞËôËÌÌÌ/Ì7Ì?ÌTÌYÌdÌlÌ�̶̪̆̆̾ÌÓÌßÌäÌðÌûÌÍÍÍÍÍÍ Í Í Í Í Í Í Í Í Í Í Í ÍÍ%Í(Í6ÍFÍLÍTÍcÍhÍpÍxÍz͂͑͗ͧͩ͟ͱÍÎÍ×ÍßÍçÍîÍÎ ÎÎÎ&Î0Î8ÎFÎKÎPÎbΖΞέηÎÑÎÙÎÞÎÞÎÞÎçÎðÎóÎýÎ ÏÏ Ï1ÏCÏCÏCÏNÏSÏpÏuÏuÏ~σσσσσσσσσσσσσσσσώϚϲÏÅÏÍÏÜÏáÏéÏðÏýÏÐÐÐÐ#Ð#Ð+Ð3ÐQÐYÐ\Ð^ÐnÐxÐxÐxÐzÐ�РУЦЮггмÐÁÐÉÐÐÐÝÐòÐùÐ +ÑÑ3ÑLÑaÑvÑ}Ñ}тттттттъѕѡѰѵѵѽÑÅÑÒÑ×Ñ×Ñ×ÑÛÑàÑàÑðÑõÑõÑõÑÒÒÒÒÒ4ÒCÒKÒ\ÒdÒ‡Ò�ҔҖҜңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңңҥҥÒÀÒÊÒØÒØÒÝÒèÒïÒ ÓÓÓÓÓ'ÓEÓSÓIÕAx[OÕOÕeÕlÕsÕ~Õ…Õ–Õ Õ§Õ±ÕÄÕÌÕÌÕçÕÖÖÖÖÖ%Ö.Ö5Ö8Ö=ÖHÖRÖdÖjÖ€Ö‡Ö�Ö¥Ö¬Ö¬Ö¬ÖºÖáÖêÖòÖ× × × ××!×3×9×O×V×^×e×z׋׋גגגנ×Ç×Ô×Ý×å×÷×ÿ×ÿ×ÿ× ØØØØ#Ø=ØIØŽØBt`¹ŸÛŸÛ·ÛÇÛÎÛÕÛàÛóÛöÛþÛÜÜÜ&Ü1Ü<Ü?ÜJÜ`ÜkÜvÜ�܌ܓܦܲÜÏÜØÜàÜÝÝ ÝÝÝ#Ý+Ý:Ý@ÝHÝHÝTÝbÝqÝy݈Ý�ݳݹݿÝÁÝÇÝÍÝÍÝÍÝòÝ÷ÝÞÞÞÞ+Þ/Þ:ÞTÞ`ÞpÞƒÞŸÞ´Þ¼ÞÆÞåÞùÞùÞmßC ?CO0O0Y0a0f0DÉÊYY(Y3YDY3Y^YlYlY|Y…YŒY�Y™Y™Y¡Y¥YÅYÓYßYåYðYZZ%Z0Z6Z=ZBZBZUZ`ZqZ|Z‡ZŽZ˜Z¥Z¥Z·Z¼Z¼ZÊZÏZÏZàZàZóZøZ [[[-[A[A[F[F[T[Y[Y[^[e[m[t[v[~[…[…[”[š[§[®[¶[Ú[Ú[â[ñ[ü[\\\(\-\2\2\2\E\J\Y\`\i\~\’\’\—\—\Ÿ\µ\º\Î\Õ\Ú\Ú\æ\õ\]]1]<]V]h]z]‰]¨]³]¸]Ç]Û]â]é]ü]þ] ^ ^!^/^=^M^T^k^r^~^�^¦^¨^´^¿^Á^Á^Ì^à^í^õ^÷^ __$_5_C_e_l_x_–_–_–_ž_©_­_µ_¹_Á_È_Ø_ã_````#`+`0`0`?`L`Z`e`p`~`„`Š`�`™`Ÿ`®`Æ`Î`Ú`è`ÿ`a +aaa#aAaGaMaSa\ama”aœa¦a´aÌaÓaßaîabbbb'b-b-b-b-b7cEDQ^O}O}c}p}†}r}•}—}¯}Ç}Ï}FœfÉÇSÇSéSóST*T5TNTSTWT_ThTwT~T‡TŒT¡T²TÑTÙTÛTúTUUU$U)U0U8U>U@UQUVUlUXU{U�U�U‰U’U¡UÀUÇUÉUèUïUïUïUVVV V-VCV8V[V`VqVvVŒVxV›V¡V¨V°V¶V¸VÉVÎVäVÐVóVùVùVW +W +WWW,W\WeWqWuWƒW™WŽW±W±WÃWG ;z×à×àöàÿàáá*á,á5á:á[áyáˆá¦áºáÒáÙáÿáâ,âIâZâqâuâuâyâ~âƒâ�â�âšâŸâ¸â»â»â»â»âÀâÆâââðâüâãã!ã*ãFãQã]ãfãzãzã‰ãŽãŽãœãHP‡——A—A¸A¥AÚAÇAéAøAB B BB#B#BEBKBIPÅÕoúoúƒúˆú—ú—úžúËúáúÍúþúðúûûJŒ¥ÄçøçøùFùFùYù]ùù“ù˜ù˜ùŸù§ù¯ùÄùÐùáùæù÷ù úúúúú.úLúLúiúKP�­g<g<�<’< <¦<Á<Ð<ß<î<ü<= +==Lè7§.§.Ò.Õ.Ø.Þ.ã.ú./(/L/h/k/Š/¤/¶/Ã/Ù/ì/ñ/ü/0000003090X0w0y0Ž0”0³0Ò0Ú0å0å0ï0ï01?1W1i1M$ o[o[š[ƒ[¤[¬[NLx‡þËþËÌ%Ì6ÌGÌNÌVÌfÌq̺̂̈ÌOTHYPdPdbdddmdvd„d‰d’d•dšd¨d²dµd¿dP¨!G¨b¨b¸bÁbÔbábíbùbcc(c(c7cBcKcRc[crc‰cŽc c¯c»cÍcÍcÖcùcùcûcdd*d6d9dPdQhî„@o@oYodoto½oÄoØoßoçoïoøopp +ppp!p(pGp_phphp�pÇpÐpòp q)qSq_q�qƒqŠq‘q‘q´qÐq÷qr:rVr}r™rÀrÜrs sFsFsUsbsgsgsvsƒsˆsˆs�sšs¬sÄsÜsôsösösösýsýs +tttt t.tAtVt’t™t™t™t¡t¾tÌtêtótüt uu1uMuMuMu_umu‰u§u§u§u²uµuäuæuýuvvv v,v.v;v=vJvJvnvpvwvˆv‘v“v¡v£v±v³vÁvÁvávávávávw5w[wcwgwowsw�w�w‘w™w�w¡w©w·wÅwÅwßwêwxx4xMxXxbxix‚xŽx•x®x®xÀxÅxÇxÍxÞxïxþxyy y!y/y1y?yAyOyOyOysysy’y™y y£y¯y²yÀyÄyÒyÖyäyèyèyzz zz.z5zPzpzƒz’z”z£z¥z´z¾z¾zÌzÕzëzòz{{E{u{z{ˆ{Š{˜{¡{»{½{¿{Æ{×{à{â{ð{ò{||||0|0|0|0|0|O|O|O|Z|v|›|´|¹|¹|¹|Û|à|à|à|}}}}$})})}0}2}2}:}<}<}C}C}F}K}j}€}¥}Á}Õ}Ú}Ú}õ}~~~~6~8~8~=~8~^~`~`~h~c~£~£~£~Â~Â~Â~ã~è~è~è~ +/444SXXs�ƒ’›µ··¼·Ýßßçâ"€"€"€-€-€W€W€�€™€±€¼€Ò€æ€ÿ€�/�M�O�`�}�”�›�“…R| $ÿæÿæç+çAç[çsç~çšçšçšç§çÂçÄçÄçÄçÑçìçîçîçüç è$è$è4èFèSædÖÛÖÛðÛùÛÜÜ Ü'Ü/Ü7Ü?ÜEÜRÜRÜlÜqÜqÜwÜ|Ü|܂܇܇Ü�ܒܒܪܽÜÃÜÈÜÈÜÑÜñÜñÜñÜøÜúÜúÜÝÝÝ Ý ÝÝÝÝÝÝ Ý!Ý!Ý'Ý'Ý.Ý.Ý6Ý<ÝBÝJÝJÝJÝJÝVÝ^ÝfÝnÝvÝ~݆݌ݤݳݽÝÀÝÀÝÊÝÐÝÖÝÖÝÚÝâÝéÝíÝõÝýÝÞ ÞÞÞ"Þ&Þ,Þ7Þ=ÞJÞVÞ\ÞdÞhÞoÞwÞÞƒÞ‰Þ‘Þ˜Þ Þ¨Þ¬Þ²Þ½ÞÂÞØÞéÞîÞñÞ–ßTL”£h†h†�†ƒ†Š† †°†¶†Î†æ†é†û†C‡UÔ*[ŽïŽï¢ï·ïÆïÊïØïáïðïðïÿï +ðð ð'ð7ðNðeðkðpðtð‡ð‡ð�ðŸð©ðÍðØðÚðóð÷ðñ +ñ +ññ ñ(ñ;ñ¥ñV$/[/[Z[C[d[l[WPÍÝ¿D¿DàDÍDEïDE E(E3E5E@EKEKEmEsEX,fÖfÖoÖuÖ}Ö†Ö�Ö”ÖY�ß�ß���#�0�c�p�‚�¢�²�²�¿�¿�Æ�Ù�×�ç�ç�ò�ü�‘‘ ‘‘ ‘8‘?‘B‘W‘\‘g‘r‘Œ‘¦‘·‘½‘ÑÊ‘è‘Бñ‘÷‘ý‘’%’ ’.’4’:’B’B’I’g’O’p’v’|’„’¤’Œ’­’³’¹’Á’Á’Á’×’×’×’×’â’ì’õ’“!“2“7“H“\“a“a“l“t““ˆ“”“¨“¸“Í“â“ÿ“””””$”/”?”N”k”€”•” ”¥”¥”°”Æ”Û”ç”ø”ý”•"•"•-•"•E•J•J•Y•^•^•m•r•r•ƒ•ˆ•ˆ•™•ž•ž•±•À•ŕŕؕç•ì•ú•ì•––!––5–:–H–:–\–a–o–a–ƒ–ˆ–ˆ–¥–ª–Ì–Ñ–ß–Ñ–ó–ø–ø–——<—A—O—A—c—h—h—…—Š—¬—±—¿—±—ӗؗؗõ—ú—˜!˜/˜!˜C˜H˜H˜c˜h˜h˜ƒ˜ˆ˜ˆ˜£˜¨˜¨˜ØȘȘã˜è˜è˜™™™#™(™(™C™H™H™Y™^™^™o™t™t™€™‹™ ™¥™¥™±™Ê™Ï™õ™ü™š šš&š;šFšKš\šgšoštštšxš|šƒš�š—š—šªš¯š¯š¯š³šÌšÕšÕšûš››››%›?›L›W›b›m››‹›”›™›™›™›ª›Ç›Ò›Ü›ç›ì›÷›ÿ›œœœœ œ+œ;œSœkœœ„œ„œ�œ¢œ¬œ·œØœäœõœúœ ����$�/�7�<�G�W�f�ƒ�˜�­�¸�½�È�Ð�Õ�à�ð�ÿ�ž1žFžFžFžFžKžPžPž\žmžmž’ž”ž±ž±ž»žÏžÙžÛžçžïž ŸŸ'Ÿ2ŸUŸfŸwŸˆŸ“Ÿ«Ÿ»ŸÀŸÀŸËŸППØŸãŸèŸèŸðŸûŸ   )   A F F N o X V ‡ Œ   Œ ¸ ½ ½ Ê Ï Ï × Ü Ü î ¡¡¡¡¡1¡6¡6¡>¡C¡C¡V¡[¡[¡n¡s¡s¡�¡�¡¢¡¢¡¼¡Ì¡Ñ¡Ñ¡ë¡û¡¢¢¢*¢/¢F¢/¢^¢c¢c¢n¢s¢¯¢�¢‹¢s¢Ç¢Ì¢£ö¢ä¢Ì¢ £%£%£4£D£I£I£X£h£m£m£|£Š£�£·£¥£�£Ï£Ô£ü£ê£Ô£¤¤A¤/¤¤Y¤^¤^¤{¤e¤¥¤µ¤º¤º¤Õ¤Á¤ÿ¤¥¥¥ ¥%¥%¥1¥6¥6¥I¥Y¥^¥^¥q¥�¥†¥†¥™¥©¥®¥®¥Á¥Ñ¥Ö¥Ö¥Þ¥ã¥ã¥ë¥ð¥ð¥ø¥ý¥ý¥¦ +¦ +¦¦"¦"¦5¦:¦ˆ¦v¦d¦R¦:¦•¦š¦è¦Ö¦Ħ²¦š¦õ¦ú¦ú¦ §$§)§)§:§U§Z§Z§k§y§~§~§†§‹§‹§“§˜§˜§ §¥§¥§ݧ˧¹§¬§ü§¨¨¨T¨B¨0¨#¨s¨ލ“¨Ȩ¶¨«¨“¨à¨å¨©©ý¨å¨2©7©Q©;©7©i©n©‹©u©n©£©¨©¨©´©Í©Ý©î©î©ªª+ª1ª1ªNª[ªŒª½ª«ªàªèªèªèªôªùªùª ««!«&«1«;«@«@«Z«_«_«g«l«€«l«�«š«Ÿ«³«Ÿ««Í«Ò«Ò«Ý«î«ó«ó«þ« ¬¬¬ ¬$¬$¬>¬I¬N¬Y¬N¬h¬m¬�¬m¬�¬•¬ ¬•¬¯¬´¬Ȭ´¬׬ܬܬð¬ܬÿ¬ÿ¬ÿ¬­­­#­(­(­4­(­G­L­L­X­L­k­p­p­|­p­�­”­¨­”­·­íέÙ­Þ­ò­Þ­® ®®#®(®<®(®S®K®\®a®a®i®n®n®w®|®|®…®Š®Š®“®˜®˜®£®¨®¨®³®¸®¸®îȮȮӮخخã®è®è®ó®ø®ø®¯¯¯¯+¯6¯A¯L¯Q¯Q¯[¯`¯`¯j¯o¯o¯y¯~¯~¯ˆ¯�¯�¯•¯š¯š¯§¯¬¯¬¯¹¯¾¯¾¯¾¯¾¯¾¯Ư˯˯Ó¯ددà¯å¯å¯í¯ò¯ò¯ú¯ÿ¯°ÿ¯"°3°8°8°?°J°j°o°…°�°©°•°¸°ðΰÓ°Ó°Ú°å°± +± ±+±D±0±S±^±i±n±n±u±€± ±¥±»±Ʊß±˱î±ù±² ² ²$²²3²S²X²n²y²’²~²µ²¡²IJϲÔ²Ô²ï²Û²þ²³#³9³D³]³I³€³l³�³š³Ÿ³Ÿ³º³¦³ɳé³î³´´(´´K´7´Z´e´j´j´y´~´~´�´’´’´’´˜´�´�´�´§´©´©´³´º´Ý´ß´ß´é´é´é´é´é´ë´ë´µ µµµ µ%µ,µ7µBµMµGµhµ…µzµ�µ�µ«µ¥µѵƵéµéµéµòµùµ ¶¶ ¶2¶2¶Q¶\¶s¶“¶“¶“¶´¶ĶÙ¶ë¶û¶û¶ ·'·6·H·H·L·Q·X·h·‡·‡·‹·¢·©·®·®·²·½·É·×·¸ ¸¸,¸_¸k¸p¸†¸ž¸ª¸»¸À¸Ѹð¸¹G¹J¹Z¹\¹\¹`¹¹йй�¹ž¹Ϲò¹ò¹õ¹¼Z, –Ö–Ö¤ÖªÖ®Ö·ÖÀÖÆÖ[`BVï‡ï‡ˆˆˆˆ-ˆFˆJˆPˆfˆƒˆ…ˆ…ˆ¶ˆ¤ˆ…ˆÕˆ߈\8 +¿Z¿ZàZÍZïZúZ[[['[-[]\’8 8 F H S [ f q | ~ ” ” ¦ ² » ¾ í ^øª¤ïìïìíí&íRíRí]íjíˆí�í½íÂíëí î'î-î1îTîzîî¨îÅîëîïï ï%ï-ï2ïCïKïjïpïtï�ï•ï´ï¹ïÊïÒïñïöïþïðð ðð&ð+ðIðNð[ð`ð`ðmð…ð”ð¡ðÁðÁðØðÝðÝðôðöðöð +ñ ñ ñ#ñ%ñ%ñ<ñ>ñ>ñUñUñjñoñoñ~ñ~ñ·ñÐñÐñãñèñèñèñèñò/òKòKòKòXòoòqòqòqò~ò•ò—ò—ò¤ò»ò»òÒòÔòïò ó ó óóóóóóóóóó'ó,ó,óHóHóHóPóUóUóUó]óbóbójójóló–ó˜ó¸óØóØóØóØóØóòóõó +ôôôô/ô1ô=ô=ôEôWôWôcôvô�ô—ô¿ôÑôíô õ.õBõ`õ…õ˜õ·õÝõöõöö7ö<ö<öpöuöuöˆöˆö”ö¦ö«ö«ö¿öÝö÷÷4÷Z÷{÷Š÷¸÷Ê÷Ô÷ö÷ø÷ø÷ø÷øøø"øRøTøTøcøcøhøhøhøhøhøø„ø—øæø_\ +PP!P7PSP`PwPŠP•PªP—P¹PÁPÌPâPØPúPQ`øAG;G;e;h;o;v;};�;ƒ;Š;‘;•;™;¬;Ô;ï;Ü;< <0<0<<<D<S<�<’<¿<Ç<Ì<Õ<á<é<ð<==:=<=^=j=Œ=’=™=™=Ÿ=¢=¦=·=Ú=ì=a$ŸßŸß®ßÉßÉßÏßb|Xs ê ê9êeêeê„ê”ê–ê–ê–ê–ê�ê¥êÀêÙêÛêÛêÛêãêþêëë +ë +ë"ëc”"§4§4É4Ó4ß4ä4ô4ú45#535A5O5f5n5x5‡5�5œ5¤5§5§5§5©5¸5Â5Ë5Ó5Ö5è5dôÍ/8/8X8e8h8q8w8Ž8¥8¼8Ç8ý89"9'929L9^9k9�9—9®9³9Å9Ê9Í9í9 :::":B:b:j:r:t:”:œ:¡:¦:±:±:¼:¼:È:È:Ú:;3;3;C;ed¤¹ Œ Œ0Œ7ŒCŒIŒQŒ_ŒrŒ~Œ˜Œ¥Œ¥Œ¨Œ¶ŒÆŒàŒäŒìŒf(¸þr*r*ˆ*�*¡*Ð*à*ç*÷*+ +++8+b+s+�+�+ˆ+˜+¤+´+½+Ô+Ô+ê+ê+,,,,,,,,B,B,X,X,n,n,„,„,›,›,²,²,É,É,à,à,÷,÷,--%-%-<-D-O-`-k-|--�-˜-Ÿ-á.g¬÷8>EMUXcuuŒ“–˜¤µµ¸ÀÖÙçêíôø   3 6 … h(ÅË ‚ ‚F‚3‚U‚g‚o‚iCÏPÏPòPQ QQQ$Q1Q7Q@QFQKQSQoQuQwQyQ†Q†Q“QˆQ¤QªQ¬Q®Q»Q»Q»QÀQÉQÑQÚQâQäQìQôQüQ RRR!R1RüKüSü^üZüuüƒüƒüƒüŽü©ü”ü±üÄüÆüâüÎüêüøüøüúüýýý#ý,ý3ý6ýXýlý_ýtýzýƒýƒýƒý–ý›ý›ý£ý£ý®ýÃýÌýÌýÌýÌýèýÿýþ þ -þþ3þSþXþ]þ]þiþ†þ•þ¤þ¬þ±þ·þ¼þ¼þÃþÊþíþ -ÿ ÿ)ÿ>ÿ>ÿDÿDÿQÿZÿZÿxÿŽÿ™ÿžÿ«ÿ¶ÿ¿ÿÇÿ×ÿîÿîÿþÿþÿ?HHJQVVcnt}}��¯ºÈÑÖ  (;PU\ip‚—ž¤­­¶Ð×Üêú1CFFW_gs�—¤¦­ÁÐÐÐúúú'9FQ_jy€€™¬®½ÒÔâ÷÷ý++8;FX_jow~‰Ž£¥¿ÔÔÔÖÝãô!*/S\\bkkŠŠ—𣬴¿Ñ×ââïòû )/::GJS\^€“¨®¹ËÑÙÙÙÙä] -|”�¾33“3—3 3£3¬3µ3Ç3Ç3ó3÷3ü3ÿ344 4"4*4-4:4B4J4R4Y4i4i4u4}`2æPæPQúPQBQ.QQQVQ]QeQlQwQQŠQ Q•Q¸QÀQ~À-°f°fÎfÞfèfèfòfòfüfggg g)g6g6gDgXgXg|g‰g‰g™g¦g¦gÉgÖgÖgëg h"hDhMhZhZh}h‡h‡hºhíhóhóhóhi¸ºäȌȌàŒâŒîŒòŒÿŒ����"�&�.�9�M�Y�[�[�d�f�f�o�q�q�z�|�|�…�…�Ž�”�—�¡�²�¸�Ä�Ä�,Ž€œø6(6(T(e(}(„( (•(¸(Ø(Ä(ç(ø(ý() -)6)S)Z)v)k)Ž)®)š)½)Î)ä)Ð)ü) * *!*!*+*�œ¢Æ2Æ2Ò2â2í23G3X3i3{3‚3‰3�3¤3²3Ê3Ù3æ3é344 -4!414A4E4L4‚4‚x± (°(°>°E°L°k°z°‰°˜°§°¶°À°À°Å°Ì°ß°î°ó°±(±(±>±P±T±b±i±n±n±u±‡±�±’± ±²±²±²±Ä±Ï±á±ì±ù±þ±²²#²/²4²A²F²V²[²k²m²}²²�²‘²¢²«²«²­²½²Ä²Ô²Ô²ï²³³%³5³5³5³8³K³ƒ\åø0Ž0ŽKŽRŽWŽeŽzŽ�Ž‹Ž™ŽœŽžŽ¨ŽºŽºŽÁŽ÷Ž„0ÎÖFF^ž’hf²º…`,Î…Î…ä…ö…ý…††/†3†9†O†l†n†n†Ÿ†�†n†¾†Ȇ†L[j>1>1L1^1d1l1~1„1�1Ÿ1¥1¨1ä1‡(–œO3O3]3l3p3s3y3ˆ\k~æ1æ1ô12 22&2,252G2M2V2h2n2q2¿2‰, ÖÖ$Ö+Ö3Ö8Ö>ÖŠ„ þþ.5<KPrrw™®›½ÌÎðððÿ3=‹`BÞgÞgûgh -h/h=h?hMhZh`hkh‚h‘hœh h«h·h¾hÊháhøh i"i,i:iLiNi\ininiwiˆiŽižiži¶i¶iÛiÛiàiàiéiõijj#j:jIjTjfjrj‰j¡jÂjÂjËjÐjÐjÐjÐjàjéjñjöjkk"k'k'k5k5k:k:kDkOkakgkskƒkŽk˜kœk¥k¾kÁkÑkØkökÿkÿkll.l5l;lGlOlZlalelxl~l‹l–lœl¬l¼l¼lélmmm&m-m8mHmXmXmhmmmmmwm‚m”mšm¨mµmÂmÌmÐmÙmòmõmn nnn%n%n*n.n>nGnYn_nananonun~n�n˜n¤n´n´n´n¹nÑnÑnànãn÷no oIo[ofoxo|o�oˆošoªoÅoÌoÐoÖoÞoéoøpŒ8í÷–'–'°'Å'Û'ü'é'(,(,(6(�`j~XŸXŸxŸŸ‡Ÿ’ŸœŸ§Ÿ¯Ÿ¾ŸÈŸËŸðŸòŸ   Ž_†Ù†Ù¨Ù¯Ù¶Ù»ÙÒÙäÙîÙôÙÚ ÚÚ Ú"Ú$Ú.Ú8Ú8Ú<ÚDÚLÚTÚ^ÚgÚoÚrÚ{Ú–Ú§Ú®Ú±Ú¶ÚÅÚËÚÓÚÓÚÚÚÝÚâÚñÚ÷ÚÿÚÿÚ ÛÛÛ$Û/Û7Û7ÛBÛVÛ]ÛdÛ{Û�83=öÖöÖÿÖÿÖ ×× ×"×'×�8>H.×.×7×7×E×I×P×S×XבDDQF0F0`0s0}0„0�0¨0±0µ0Ç0Í0ì0’Ä{¨ÆÿÆÿðÿóÿúÿÿÿ $+ATcikrx‚‚–˜Ÿ¥¯¯¯ÆØßîð+“0RZî0î0÷01.14141<1”„\y†ñ†ñ˜ñ­ñ·ñÀñÂñÉñÙñäñæñðñðñùñ -ò ò ò1ò<ò>òWò^òbòqò„ò×ò•  ->/>/G/d/i/–hú6e6eLeWebepe{e„e•eže¯eµeÁeØeØeêeûeff"f(fvf—„a~ŽKŽK¾KÄKÍKÙKáKèKìKõKõKúKLLCLHLlLtLvLŽL¦LÊLéLûL˜lò îî &HJl�n£�²²ÄËííõ™ y}€Š€Š‰Š•ŠšŠš(A^ç^ç€çˆçŽç–ç˜ç˜ç©ç©ç©ç±ç¹çËçÚçËçïçñçñç è è èèè7è<è<è<èQèSè`èbèoèqè~è†èŽè•è¤è±è³èÄèÑèÑèÑèÚèìèÿèé éééé1é1é1é<éFé^écécécéqéwé|é„é�é¡é¬é±é±é¸é¼éÊéÎé×éÞéüé êêê5ê:ê:ê:ê:êBêMê[ê[ê{ê{ê{ê‚ê�êŸê²êÅêÇêÇêÇêÚêÚêáêèêíêóêëë+ëUë[ë[ëoëtë˜ëŸë«ëÉëÜëçëîëòëòëòëòëýëìì7ìBì_ìiìiìwì•ìÅìØìéìííííí í+í=íHíMíMíMí_í‰í�í�í�íší¤í°í»í½í½í½íÂíÎíÎíî›H%¯/¯/½/Ä/Ï/Ü/ç/ï/ï/0000œ0 vOvO�OŠO¬OÈO¾OàOèO�LÝì†&†& &µ&Ë&ì&Ù&' '4'U'B'm'…'…'�'žð·þLþL3M>Vhs †z¯ÐåÒô)FFFXuuªÁµóø ÿ3!Bc{h–о¬Íêêêü:Acck¤(nänä|äŸä¥äªäªä°ä¥(!'žÖžÖ§ÖµÖ»Ö½ÖÂÖ¦D]j<9<9V9]9f9r9‡9�9•9›9�9�9¬9§„¼Ù¸©¸©ë©÷©û©ª ªªªª"ª&ª.ª3ª7ªHªYª[ª_ªpª�ª�ª£ª«ª¶ª¶ª¶ªÈª¨€À›À›Ù›à›ç›î›ô›œœœ$œ;œ>œ@œ[œeœoœvœ�œ“œ›œ›œ±œ±œÃœ© Ê ¦W¦WÌWéWñWüW XXX4XJXcXiXqXtX‰XŽX XÂXÈXÐXÕXÛXÞXôXýXÿX!Y)Y>YCYRYtYzYYYYŒY�Y¨YµYÁYÔYáYîYZZ#Z%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ăĚijÄÌÄÎÄÙÄáÄáÄêÄÅÅ/ÅHÅVÅaÅmÅuÅwłŊŊŊŧŵÅÃÅÚÅñÅÆ Æ-Æ4Æ4ÆDÆXÆrÆrÆvƌƛƶÆÁÆØÆàÆàÆÇÇÇ3Ç<ÇSÇmÇ|ljǩǷÇÍÇéÇùÇÈÈ)È)È5ÈPÈhÈqÈqÈqÈ}ȎȦȯȯȶȿÈÅÈÑÈ0ɬ<ùDøŽøŽ�)�4�>�D�N�T�^�l�v�ˆ�’�˜�¢�¨�²�¹�Å�Ë�Ô�ÿ�����/�9�K�U�j�j�m�w�Œ�‘�¡�¬�±�Å�Ç�Ø�û�û�‘‘(‘1‘9‘G‘X‘h‘y‘†‘†‘“‘“‘›‘©‘ð‘­$› >O>OROZOeOkO®l£:†E†EŸE·EÇEçEùEF,F,FVF^FbFeFiFnFxF{F‚FˆF�F•F™FžF¨F¹FÀFÇFÉFÍFÖFàFãFîFúFýFGG G&G/GHGYGbGkGsG~G‰G•G¦G·GÃGÑGÓGÚGáGæGêG÷GþG!H/H9HCHLHeHvHHˆH�H™HŸH£H¨H¬H¹HÀHÎHØHíH÷HII*I3I B G M j j x � ” ­ ¾  Ô Ô Ô Ù è  !.!9!?!U!f!k!v!Š!Ž!—!›!�!£!¼!¼!Ê!á!ã!ü! """"+"/"A"F"Z"b"k"o"t"{"‘"¡"¸"½"Ö"é"í"ÿ"ÿ"ÿ"ÿ"#&#5#Y#d#j#€#‘#‘#‘#˜#«#Ä#Ä#Ä#Ó#Ó#æ#ý#$$$$$.$0$<$<$C$N$c$e$p$…$‘$“$ž$ª$º$Á$È$Ò$Ú$Þ$â$ä$é$ñ$õ$% %%%%%%%%2%H%h%‚%�%œ%£%£%¶%º%º%º%Á%Æ%à%î%ú%&&&&"&<&J&V&]&]&j&t&t&†&¸˜ »�HIHIeItItItI‘I‘I¢I¢I¨IªIªI°I²I²I¸IºIºIÁIÅIÊIÊIÊIÊIÊIÊIÒIêIêIÿI -JJ!J9J;JZJ\J{J€JŸJ¤JªJªJÃJÆJíJúJK2K2K;K@K^KLKdKsKxKKˆK›K£K«K°K°K°K¹KÒKØKØKñKÿKL5L7L?LELMLRLRLXLXLaLrLtL‰L‹L“L™L¡L¦L¦L¦L¦L´LËLÍLáLáLéLïL÷LüLM MMM"M$M$M$M,M,M:MQMUMWMcMeM€M†MŽM“MœM§MªM°M¶M¿MÂMÂMÐMáMãM N&N,N4N9NBNGNGNLNNNVNVNqNƒNˆN”NšN�N´N¶N¹NÉNÍNÔNÝNìNúNOO OOOO"O/OGOLOVO~O‰O”OŸOªOµOÀOËOÖOÖOÖOÞOÞO÷OP"P;P;P=P=PFPLPNPNPTPZPZPbPkPqP}P}P„P‡P¦P±P¹PÁPÆPÆPÍPÑPÖPèPíP÷PQQQ5Q5Q>QLQ]QiQpQ~Q�Q£Q©Q®Q®Q³QÉQÕQÝQíQ÷QRRRR R R*R8RDR[RqRˆRŽR�R§R¬R¬RÌRÌRÞRäRíRóRüR -SSS&S,S.S9SKSaSaSuS…S—SœS¨S®S±SÈSÊSÍSÝSçSêSêSùST"T'T3T9TYDYDYRYXY^YhYrY€Y•Y˜YšY¤Y³Y¸Y¸Y¸YÀYÅYÎYÓYÓYÝYåYêYêYêYðYúYZZZZ Z)Z/Z4Z4Z=ZKZTZbZgZgZpZ~ZŠZ›Z¨Z¯Z·ZÁZÏZÏZÔZÔZßZßZßZãZèZèZïZóZøZ[[[[ [([-[3[3[;[D[R[][b[h[p[u[u[u[u[u[u[u[u[u[u[Ž[”[�[£[«[°[µ[¾[É[Ò[Ú[ß[ß[ß[å[í[ò[ò[ö[û[û[\\\'\-\-\6\L\L\R\[\q\q\z\|\‚\‹\¡\¡\ª\ª\ª\³\¸\¸\À\Å\Å\â\ð\ü\]]]]]]]2];]A]S]]]]]e]e]m]o]o]ˆ]’]›]�]�]�]£]§]©]©]©]©]®]´]º]¾]7a¹Ìz©kk(k3kIkekrk‰kœk§k½k©kÌkÔkÔkãkãkëk÷k l"l1lC>C>CCCCCRC[CcCyCyCyC~C~C–C¢C­C²C²CµCºCºCÙCåCòCôCôCøCúCúCD%D1D3D3D6D8D8DEDGDGDJDJDSDYD^DzDzDzDzDzDzDzDzDzDzDzDzD|D�DŸD®D½D½DÁDÁDÉDâDæDëD†E¼,îÕîÕüÕÖ ÖÖÖ½l3JÆQÆQÜQöQâQR*RR9R>RERERKRNRRRZRrR}R“RˆR«RµR¾PQa%%%+%2%B%S%X%u%{%‚%‰%—%£%µ%ñ%¿D+¶ä¶äÊäØäÞäåå å2å8å>åDåDåLåÀô#œÎ5Î5Ö5å5é5ö566&6C6P6b6„6¬6º6Ö6è677"7C7a7p7‹7–7±7Ê7Ê7å78(8C8U8d8s8s8~8‘8¢8µ8Å8Ò8Þ8í8 -9 -9999#90979V9_9p9t9|9‡9Ÿ9·9À9Ð9Ø9Ý9::!:,:@:E:M:s:u:€:³:Í:Í:å:ô:ü: ;;;.;P;X;`;k;m;};•;­;Å;Ý;ï;<<<*<8<<<@<Á °‡°‡¹‡Ø‡Ý‡Â\ˆ[–̷̖̰ÌÄÌÏÌÔÌÚÌìÌòÌ -ÍÍ.Í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,CNCXC[C[CeCxCzC‡C‰C”C¨C°CÀCÅCËCÓCÖCèCÅLWfG1G1[1_1d1o1o1y111ƒ1‹1Æ\CVß0ß0õ0õ0ù0þ01111#1)1)17191C1Ç8(2ÆÖÆÖÏÖÏÖÝÖáÖèÖëÖðÖȨYæ]æ]þ]^^$^^V^º^ ^•^{^d^À^Õ^Å^õ^ú^__1__@_F_F_M_w_¢_…_¹_×_×_×_ã_ÉlF]n,n,ˆ,±,“,À,à,ü,ò,-,--;-T-t-†-Ÿ-Ÿ-¦-È-È-Ò-Ê4Š“¾ë¾ëÒë×ëÝëáëåëì ìËxÌæN‚N‚y‚f‚ˆ‚’‚™‚¯‚´‚¹‚½‚¿‚ł˂á‚΂ð‚ ƒƒ#ƒFƒ<ƒUƒaƒÌ”"ȪȪ֪èªìªôªüª«««%«0«5«K«R«Y«d«o«q«|«‡«‰«•« «««´«¼«¼«À«÷«Í€ÚöO5O5m5q5u5}5‹5Ž5‘5§5­5¯5Á5Å5É5Ñ5Ù5å5ú5 6666&6;6ÎÞ`VEVE†E‘E¶E˜EÐEF F FFF0F?FAFIFkFŒFžF«FÆFÚFßFùFGG -G!GHGZGgG‚G¢G˜G¼GÂGÂGËGëG÷GúGüGHH&H&H8H8HFHPH{HqH•H•HšH�H³H¿HÔHøHIII@I/IOIQIcIwI‹I�I I¦IµIÝIÌIìIîIJ -JJ(J1JHJRJTJhJrJrJ‘J—J—J—J JÀJèJ×J÷JüJKKAK7KVKVKVK|K|KŽKÏ`8ÌN1N1…1Œ1”1�1¨1¯1Ç1Ì1Ï1Ò1Û1é1ó1ø1 2%222^2c2p2�2•2¤2Ð2Ø2Ý2ò23&3+3+3>3Q3e3i3‹3œ3¡3¡3Í3Í3Í3Í3Í3á3ù3þ34441464?4L4T4o4†4”4Ÿ4»4»4»4È4ß4á4á4á4î45555+5+5;5@5g5~5�5¬5¬5¬5¹5Ð5Ò5Ò5Ò5ß5ö5ø5ø5666,64696Y6p6‚6ž6ž6ž6«6Â6Ä6Ä6Ñ6è6è6ü6þ6 7.7L7Q7_7m7w7y7y7y7–7ž7 7 7È78Ф%J&è&è@èlèlè‹è›è è è¯èÁèÛèãèêèïè -éééééééé0é0é0é0éGéIéIéIéIédéoé¤éÑÐçfƒfƒ|ƒˆƒ�ƒ�ƒ™ƒžƒ£ƒ®ƒ³ƒ³ƒ³ƒèƒÕƒ÷ƒ„„7„P„i„‚„‡„‡„ „¹„Ò„ë„ð„ð„ …"…;…T…V…V…o…ˆ…¡…º…º…º…Ì…Ò0�‰^ë^ëlërëvë•ë¶ë¶ë¼ëÓ<:E?8?8H8S8a8m8y8‚8‹8”8š8Ÿ8ÔluŒ×&×&å&ï&ö& ' ''' '*'8'U'W'g'g'l'n'u'§'ÕÈŸÍ6t6tJtttitUt”tÆt¬tŸtñtötuuu5uRu«u“uu±u¼uèuíuõuvvAv6v"vTvmvYv�v|v§v®vÚvÚvÚvÚvâvÖL^mÖ-Ö-ô-. ././.A.N.^.T.v.€.×$qv†M†MšM¢M­M³MØÈg•�1�1³1·1Ö1ø12 22$212:2:2?2I2a2l2|2ˆ2�2š2«2­2¾2À2Â2Â2Â2Ê2Ê2Ô2Ô2Ü2ä2ì2ô2ø23O3Ù  ‡ ‡.‡E‡K‡Ú`FZŸ8Ÿ8¯8¶8¸8½8Ì8Ò8ç8ç8õ8õ89 -9 99%9(909Û<öF�F�O�Z�e�p�{�…�£�®�¾�Ü 5vfvfŽf f¦f²f½fËf×fîfùf gg!g'g-g@gFgOgUgggmgxg€gŽg›gØgÝ,29¾/¾/Ì/Ý/ö/ -0 00Þ4à‡à‡î‡ø‡ˆˆˆˆˆ ˆßÄMzŽýŽýºý½ýÂýÏýÔýæýèýìýðýóýþ þEþNþYþ`þyþŸþ¤þ½þãþèþïþÿ.ÿ0ÿIÿoÿoÿoÿ‡ÿ¡ÿ°ÿÂÿà ˆÇvv4v7v=vQvYvjvwv}v‚v‚v�v˜vžv®v¼v¾vÝvñvøvwww"w5w@wDwUwUwUwZwZwfwuwˆwŽw“w§w­wµwÇwÍwÏwÞwëwñw÷wüwxxxx"x$x)x1x3x8xDxFxKxSxUxZxbxdxixqxsxxx€x€x€x�x�x�x§x­x³x¾xÃxÜxâxíxõxÿxy y"y-y8y>yKyPyUyUyjyry|y„yŒy­y¸yÃyÏyÉyØyáyæyëyzzzz"z.z2z7z>is†‘£±·ÈÏ×íõ-79IYbhmtz€†‘œŸ¦ÀÈâ÷%4;C^{ˆ�¡©°´½¿Ñèöü(..@æ  -P‡P‡Y‡m‡r‡ç¤ŸÄf€f€‚€ˆ€š€Ÿ€¥€¨€¬€¬€Ï€Ô€�í€�)��8�N�:�]�e�j�p�s�w�y�’�~�¡�¡�¡�¼�ë�÷�è˜Íï'"61@OO^^mm||‹‹š®©¸¸ÇÖåPéxËåcc4cFcLcXcococ�c‡c’c¢c®c·c½cÃcÎcÜcécõcdddBdêd”©ììì%ì%ì?ìFìRìRìiìiì€ì€ì—ì—ì®ì®ìÅìÇìÇìËìëÌÂñ>>`grˆˆš¥¹½ÂÆÈÎàì+///BWWcis~Œ“¢¤½××éìP7G|D|D’DžD¦DªD»DÉDÏDÛDãDîDôD÷DEí ®-þ<þ<=#='=0=7=>=T=e=v=ˆ=š=©=¸=É=Ø=Ø=ß=ã=ì=ù=> >>>4>4>4>4>4>@>D>G>O>]>e>r>z>‚>“>ž>£>£>°>¶>Å>Ü>Þ>é>ö>?? -???5?7?E?G?R?X?X?`?`?r?y?�?�?�?”?”?¬?º?Å?Ê?Ê?Í?Ò?Ò?ñ?ÿ? @@@@@@3@A@M@O@O@R@T@T@a@c@c@f@f@f@f@f@o@u@y@…@¥@²@À@Ç@�Aî(rxPŠPŠ^ŠeŠuŠxŠ~Šï(nt‡&‡&�&š&«&¶&¶&Ô&ðTzKÞòÞòüòóóóó0ó@óIóOóRóVóXópó€ó�ó“ó—ó�óŸó¢ó¦ó¦óÉóÍóÓóÓóÚóüóô$ô7ô=ôDôOôYô]ô`ôgômôqôwôˆôŽô“ô˜ô¥ô§ô¹ô»ôÂôÏôÑôãôãôãôãôãôõõõ5õ5õJõVõsõ—õ±õ¶õÍõÒõàõ÷õüõöö(ö.ö>öKö_öföröŠö–ö–ö–öœöŸö¢ö»öÁöÕöÛöàöëöëöðöýö -÷ -÷÷÷5÷;÷>÷A÷H÷Q÷X÷X÷]÷j÷w÷w÷}÷‹÷¢÷¨÷«÷®÷µ÷µ÷Æ÷Í÷Ú÷ç÷ç÷î÷ø÷ÿ÷ø øø+ø+øEøJøQøYø`øpøtø}ø•øšø¡øÃøÎøÔøÜøõø ù ù$ù$ù>ùLùSùZù|ù�ù³ùµù¿ùáùáùáùúùúú0ú4ú ûñÀ€¬æ_æ_þ_```!`-`N`/`]`b`b`‡`¸`›`Ž`Û`à` aaa;aaJaOahaoa’a¨a¨aÎaÎaÚaò ///6/Oô8 ///$///7/>/D/J/J/P/õ :>00 0(0-0öÎPævævww w5wRwaw…w³w¹w¿wÇwÉwÑwæwéwôwxx3xBxfx”xšx x¨x­xµxÊxÍxØxäxéxïxõxýxy yy5yCyqywy|y„y”yºyèyîyóyóyzzz7zOz[zczqzqzvz‰z z¢z¿z×zãzëzùzùzþz{{({?{V{o{�{Ž{°{Ç{Þ{ì{î{|||%|1|G|`|s|~|‘|•|•|•|œ|¡|´|¿|Ù|Û|à|ó|þ| }}}'}÷˜k ¬9¬9Â9Î9Î9ä9ï9ñ9::::":&:*:-:-:6:::P:P:†:’:¤:´:Ë:Ð:Ó:Ø:Ø:Ø:ô:û:;;;;;8;D;L;Q;Q;m;z;‚;‡;‡;£;¯;¸;À;È;Ô;ê;õ;<<*<2<7<7<S<m<w<ƒ<‹<�<�<¯<»<Í<Ò<î<ú< ===*=/=/=/=/=2=7=7=7=V=b=t=v=y=~=~=~=ˆ=�=—=Ÿ=¨=³=¹=Æ=Ô=Ô=Þ=ç=ï=$>*>1>@>Z>_>_>r>z>z>|>|>|>�>�>ˆ>Ž>’>™>�>�>�>�>¬>¬>Ñ>Ú>Ú>Þ>ùBø(üBüB -CC!C'Cù�ªÊÞlÞlülmm&m;mImTmcmimimimnmsm�mŒm¥m§m¬mºmÅmÒmÙmçmú\2EN+N+h+�+o+œ+¸+®+Ð+å+Ò+ô+ , ,8,8,?,a,a,k,û8fpMMM-MAMPMVM\M_M€Mü0�—H‹H‹\‹h‹v‹y‹‘‹”‹œ‹ý0S[Ž×Ž×¢×ª×·×Á×Ô×þP>NȈȈԈèˆëˆÿˆ‰ ‰‰ ‰'‰*‰0‰ÿT¡²nOnOˆO›OžO¨OµOÊOÌOÞOèOüOüOPPYP<˜£ ‹ ‹´‹»‹Ç‹Ó‹ã‹è‹ë‹ï‹÷‹ 26NåNå\åhåH!/Ž[Ž[¢[®[Ä[°[Ó[Õ[Ü[ç[ó[û[ DƒSSBSISNSVSpSyS{SˆSˆSŠS¤SªS¬S®S»S»S»S»S¿SÎS×SßSèSðS÷SýSÿST T1TDTJT^TcTpTpT„T‹T’T›T©T²TÕTÛTßTäTéTìTöTùT Uläû.ã.ãBãXãfãqãuã|ã€ã‰ã˜ãšãšã®ã°ã¹ã¿ã¿ã¿ã¿ãÇã´KtEE6EGELESE]E]EeExE|E�E–E˜E›EŸE¦EºE¾EÆEÒEÙEÝEåEçEïEýEFF -F#F+F3FAFEFSF %I–q–q¦q²q¾qÎqæqìqúq rrr3r`rzr‡r”r¤rªr¬r½rßrærìrúrss#s)s/sRsôB»ii"i%i,i7iFiHiSibibioi}i€i‚i‚i‡iŒi•i i¦i¯iÂiÇiÜiçiñiñijj4jHj_jejjjqjwj~jƒjƒj‰j�j”j”j§jµjÍjÓjØjìjöjýjýjk5k;k@k@kkkpkpk›kÂkÇkÇkÇkÊkÑk×kÞkãkãkékïkôkôk l l%lHlNl^ljlpl~l…l‡l›l¡l¨l¨lªlªlªl¯lµlºl¾lÀlÃlÎlÝlàlâlælælëlëlùl#m˜}Ÿ##"#'#.#8#>#I#Y#a#i#n#y#ƒ#‰#”#¤#¬#¼#Ã#Ë#Ó#Û#ã#è#ó#$$$  B†Î=Î=æ=í=>(>3>@>N>B>w>w>ƒ>‹>š>Ô>Ö>? ? ?@?X?E?y?g?ˆ?Ž?�?²?´?¿?Ç?Ç?è?í?ö?@ -@(@@]@C@7@l@‰@t@©@Á@®@ã@Ð@Aò@A%AAqJqLq^q^q`q�q \ No newline at end of file +þ þ%þ*þ*þ6þSþsþxþ}þ}þ‰þ¦þµþÄþÌþÑþ×þÜþÜþãþêþ ÿ*ÿ,ÿIÿ^ÿ^ÿdÿdÿqÿzÿzÿ˜ÿ®ÿ¹ÿ¾ÿËÿÖÿßÿçÿ÷ÿ06_hhjqvvƒŽ”��°½ÏÚèñö )49@H[pu|‰�¢·¾ÄÍÍÖð÷ü +((.5>>Qcffw‡“°·ÄÆÍáððð''<GYfqŠ™  ¹ÌÎÝòô&&39KKX[fxŠ�—ž©®ÃÅßôôôöý"44:AJOs||‚‹‹ªª·ºÃÌÔßñ÷$,7IOZZgjs|~ ³ÈÎÙëñùùùù} +|”�¾R3R3f3j3s3v33ˆ3š3š3Æ3Ê3Ï3Ò3Û3ë3ò3õ3ý34 444%4,4<4<4H4}`2QQ/QQ>QcQOQrQwQ~Q†Q�Q˜Q Q«QÁQ¶QÙQáQ~À-ØfØföfggggg$g6gCgFgHgQg^g^glg€g€g¤g±g±gÁgÎgÎgñgþgþgh5hJhlhuh‚h‚h¥h¯h¯hâhiiii-i¸ºäðŒðŒ� +���'�*�D�D�D�J�N�V�a�u���ƒ�ƒ�Œ�Ž�Ž�—�™�™�¢�¤�¤�­�­�¶�¼�¿�É�Ú�à�ì�ì�TŽ€œøW(W(u(†(ž(¥(Á(¶(Ù(ù(å()))?)+)W)t){)—)Œ)¯)Ï)»)Þ)ï)*ñ)*****B*B*L*�œ¢ç2ç2ó23383h3y3Š3œ3£3ª3¾3Å3Ó3ë3ú34 +4#4&4+4B4R4b4f4m4£4‚x± P°P°f°m°t°“°¢°±°À°Ï°Þ°è°è°í°ô°±±±6±P±P±f±x±|±Š±‘±–±–±�±¯±¸±º±È±Ú±Ú±Ú±ì±÷± ²²!²&²6²;²K²W²\²i²n²~²ƒ²“²•²¥²§²·²¹²Ê²Ó²Ó²Õ²å²ì²ü²ü²³)³;³M³]³]³]³`³s³ƒ\åøXŽXŽsŽzŽŽ�ޢީ޳ŽÁŽÄŽÆŽÐŽâŽâŽéŽ �„0ÎÖff~¾²ˆ†ÒÚ…`,ï…ï…†††(†7†P†T†Z†p†�†�†�†À†®†�†߆醆L[j_1_1m11…1�1Ÿ1¥1®1À1Æ1É12‡(–œ"3"303?3C3F3L3ˆ\k~222'2-252G2M2V2h2n2w2‰2�2’2à2‰, >Ö>ÖLÖSÖ[Ö`ÖfÖŠ„   =OV]lq““˜ºÏ¼Þíï <2T^‹`Bÿgÿgh$h+hPh^h`hnh{h�hŒh£h²h½hÁhÌhØhßhëhii,iCiMi[imioi}i�i�i˜i©i¯i¿i¿i×i×iüiüijj +jj#j/jDj[jjjuj‡j“jªjÂjãjãjìjñjñjñjñjk +kkk%k3kCkHkHkVkVk[k[kekpk‚kˆk”k¤k¯k¹k½kÆkßkâkòkùkl l l/l?lOlVl\lhlpl{l‚l†l™lŸl¬l·l½lÍlÝlÝl +m(m4mHV×V×_×_×m×q×x×{׀בDDQg0g0�0”0ž0¥0±0É0Ò0Ö0è0î0 1’Ä{¨çÿçÿ &(-33ELbu„ŠŒ“™££·¹ÀÆÐÐÐçù'::L“0RZ111>1O1U1U1]1”„\y¦ñ¦ñ¸ñÍñ×ñàñâñéñùñòòòòò*ò-ò-òQò\ò^òwò~ò‚ò‘ò¤ò÷ò•  +^/^/g/„/‰/–húWeWemexeƒe‘eœe¥e¶e¿eÐeÖeâeùeùe ff)f2fCfIf—f—„a~¯K¯KßKåKîKúKL L LLLL"L:LdLiL�L•L—L¯LÇLëL +MM˜lò '9@Gik�¢�ıÓÓåì™ y}¨Š¨Š±Š½ŠÂŠš(A~ç~ç ç¨ç®ç¶ç¸ç¸çÉçÉçÉçÑçÙçëçúçëçèèè+è-è-è8è=èWè\è\è\èqèsè€è‚è�è‘èžè¦è®èµèÄèÑèÓèäèñèñèñèúè é é%é-é/é<é<éQéQéQé\éfé~éƒéƒéƒé‘é—éœé¤é¯éÁéÌéÑéÑéØéÜéêéîé÷éþéê)ê0ê9êUêZêZêZêZêbêmê{ê{ê›ê›ê›ê¢ê°ê¿êÒêåêçêçêçêúêúêëë ëë%ë/ëKëuë{ë{ë�ë”ë¸ë¿ëËëéëüëììììììì'ì5ìWìbìì‰ì‰ì—ìµìåìøì í í3í8í8í8í@íKí]íhímímímíí©í¯í¯í¯íºíÄíÐíÛíÝíÝíÝíâíîíîí8î›H%‚/‚/�/—/¢/¯/º/Â/Â/Ú/ä/ê/ð/œ0 —O—O¾O«OÍOéOßOP P�LÝì§&§&Á&Ö&ì& 'ú&%'*'U'v'c'Ž'¦'¦'°'žð· M MTM]MiMqM|M›M›M¥M§MÂMªMÑMÑMßMéMðMNN,N3N3NONONvN{NšN³NÐNÓNÛNâNOOO%O%OAOAO^O^O…O—OŸTVgÎÎäñ÷ý*<@FTWa 0 +RF;gSŠv™¥ª¶ÆÍÚåñü .59DITmv‚‡›¢¦¦«ÄÉâ÷ !!!#<Q\fqs~††–‹®Î¡àZŽÀdÀdÚdèdídúdee,e:e_ehexe“eže®e°e²e¼eÈeÌeÙeåe÷eÿefffff f>fXfXf_fbfjfvffÕf¢d1O*O*m*…*–*�*¹*®*Ñ*ñ*Ý*++'++?+L+L+d+d+n+£ü!\__w‰”Á§›Ðñó;!Jgggy––ËâÖ, TBc„œ‰·«ßÍî   ::[b„„Œ¤(ŽäŽäœä¿äÅäÊäÊäÐä¥(!'ÆÖÆÖÏÖÝÖãÖåÖêÖ¦D]j99*919:9F9[9c9i9o9q9q9�9§„¼Ùà©à©ª ª#ª+ª3ª7ªBªFªJªNªVª[ª_ªpª�ªƒª‡ª˜ª©ª¸ªËªÓªÞªÞªÞªðª¨€è›è›œœœœœ,œ7œAœLœcœfœhœƒœ�œ—œžœ©œ»œÃœÃœÙœÙœëœ© Ê ÇWÇWíW +XXX-X6X:XUXkX„XŠX’X•XªX¯XÁXãXéXñXöXüXÿXYY YBYJY_YdYsY•Y›Y Y Y Y­Y¾YÉYÖYâYõYZZ&Z:ZDZFZ]ZqZvZ�ZˆZ«Z«Z«Z½Zª°)8¢8¢[¢h¢m¢q¢z¢‰¢•¢ ¢«¢³¢¾¢Æ¢É¢Õ¢Ý¢÷¢££-£6£k£W£{£{£“£ž£º£Á£å£¤¤¤¤¤«˜‹-&¸&¸C¸J¸R¸]¸t¸~¸~¸•¸Ÿ¸º¸Ð¸Þ¸â¸¹¹*¹1¹5¹N¹X¹i¹v¹v¹}¹„¹‰¹Ž¹“¹š¹¡¹»¹Â¹Ò¹Ö¹Ö¹à¹ö¹ú¹ú¹ ºº1º1º7ºBºIºQº\ºcºkºvº}º}ºˆº¦ºªºÂº³ºÝºÝºãºêºùº»»»»»0»0»0»B»J»p»~»~»‚»—»Ÿ»¯»º»Ï»Ô»â»ñ»û» ¼¼¼¼%¼)¼8¼:¼I¼K¼Z¼\¼k¼r¼v¼Š¼”¼¢¼©¼­¼½¼È¼Í¼ë¼õ¼½ +½½½&½-½1½;½O½W½b½f½f½f½q½|½Œ½˜½®½¶½Á½Ð½Ø½ã½è½ð½û½¾ ¾¾¾/¾7¾B¾B¾B¾B¾_¾|¾ˆ¾�¾ ¾°¾Î¾Ò¾¿ö¾ç¾¿¿¿"¿1¿@¿J¿X¿_¿c¿e¿t¿~¿Œ¿“¿—¿—¿™¿«¿«¿½¿½¿½¿Ï¿á¿é¿À-À;À?À]ÀdÀkÀvÀŒÀ‘À˜À«ÀµÀÃÀÊÀÎÀÐÀãÀíÀûÀÁÁÁÁÁÁ Á.Á8ÁFÁQÁUÁUÁZÁbÁfÁuÁwÁ†ÁˆÁ—Á™Á¨Á¯Á³ÁÇÁÑÁßÁæÁêÁúÁ +Â(Â2Â@ÂGÂKÂUÂcÂjÂnÂxŒ”Ÿ£££®µÂÃÂÝÂíÂøÂ ÃÃÃ-Ã9ÃOÃWÃbÃqÃyÄÉÑÜèì÷üÃÐÃØÃãÃãÃãÃãÃ÷ÃÄÄ)Ä-ÄAÄRÄgÄtÄxĆěīÄÂÄÛÄôÄöÄÅ Å ÅÅ/Å@ÅWÅpÅ~ʼnŕÅ�şŪŲŲŲÅÏÅÝÅëÅÆÆ(Æ5ÆUÆ\Æ\ÆlƀƚƚƞƴÆÃÆÞÆéÆÇÇÇ-Ç-Ç@Ç[ÇdÇ{ǕǤDZÇÑÇßÇõÇÈ!È9È9ÈQÈQÈ]ÈxÈ�șșșȥȶÈÎÈ×È×ÈÞÈçÈíÈùÈXɬ<ùD � �E�Q�\�f�l�v�|�†�”�ž�°�º�À�Ê�Ð�Ú�á�í�ó�ü�'�6�9�;�E�W�a�s�}�’�’�•�Ÿ�´�¹�É�Ô�Ù�í�ï�‘#‘#‘-‘B‘P‘Y‘a‘o‘€‘�‘¡‘®‘®‘»‘»‘Ñё’­$› _O_OsO{O†OŒO®l£:§E§EÀEØEèEFF2FMFMFwFFƒF†FŠF�F™FœF£F©F°F¶FºF¿FÉFÚFáFèFêFîF÷FGGGGG/G:G@GGGPGiGzGƒGŒG”GŸGªG¶GÇGØGäGòGôGûGHH HH HBHPHZHdHmH†H—H H©H±HºHÀHÄHÉHÍHÚHáHïHùHII!I:IKITI]IeInItIxI}IƒI�I—I¶IÄIÊIÏI×IßIçIôIüIJJ0J9JTJhJ{J‚J‹J”J›J¤J­J¶JÏJ¿JßJãJ=K¯   ‡ ‡®‡Ð‡Ö‡°¸�·z'z'ˆ'�'È'Ê'ÿ'*(*(:(?(?(S(X(X(t(y(y(™(ž(ž(²(·(·(Ô(Ô(â(),)L)^)p)‚)’)’)’)’)™)r*±$bgÊ%Ê%Î%æ%ø%&²ƒ¿Á¿ÁÑÁàÁàÁãÁìÁøÁøÁÂ$Â6Â=ÂAÂQÂqƒ‰˜¡¥«´ÂÊÂÎÂë ÃÃ!Ã0ÃBÃNÃPÃ\ÃdÃhÃnÃwÃwÃwÉÔÚð÷ÿÃÕÃÜÃÜÃÜÃêÃÄÄ"Ä4Ä<ÄEÄPÄVÄlÄsÄ{ĂėĨĨįįįĽÄäÄñÄúÄÅÅÅ%Å%Å0Å7ÅEÅIÅUÅmÅuÅ{ŊœŗşŨŨŶžÅÄÅáÅêÅòÅøÅþÅþÅþÅÆ ÆÆ#Æ)Æ/Æ/Æ1Æ;Ƴx�Ø�Ø�زعØÄØÚØÙ Ù'Ù?ÙEÙTÙ]ÙeÙmÙoÙuÙ{يْ٘ٚ٠ٴ¤Ôydd2d:dJdRdvd�d‘d™d¡d§d°d¼dÄdÄdÌdüd;ee^eceke{e}e«e±eºeÁeÉeÑeÝeåeíeff ff7f>f@fJfYfyf€f‚f¢f©f©f©f²f¹fÒfØfàfàfåféfõfþfgg6gDgrgug‘gžg²gÌgÐgïgýg h7h=h?hmhphphŒh™h­hÇhÏhÓhÞhæhöhøh&i)i1iAiCiqiwiwi�i�iŒi½iÅiÅiÅiÅiÎiÚiði jj#j/j6j6jIjMjMjMjTjYjljsjj†j†j j¢j§jºjÁjÍjÔjÔjájëjëjðjkk%kµà˜ÌOBOBdB‚BoB·B�B‘BÆBÕBÝBèBêBõBCCC:C?CtCŒCyC®C›CÂC½CÞCíCõCDD DDDD>D@DaDaDhDmD�D‘D³D³D³D»D¶\æùgdgd}d�d•d d®dºdÑdÑdãdédôdeee*eVe·ÛÜïï  '.59;BIMMUnxxŒ—¥¶º¿Ó×àäéï   1 6 O ` d d d i t ~ … ˜ œ ¡ µ ½ Æ Ê Ì Ó å õ   ' : > > > R V _ c h n ‹ ‹ ™ ° µ Î ß ã õ õ õ ú  !-!O!Z!`!v!‡!Œ!—!«!¯!¸!¼!¾!Ä!Ý!Ý!ë!"""."2"2"9"L"P"b"g"{"ƒ"Œ"�"•"œ"²"Â"Ù"Þ"÷" +## # # # #%#G#V#z#…#‹#¡#²#²#²#¹#Ì#å#å#å#ô#ô#$$)$:$?$E$O$Q$]$]$d$o$„$†$‘$¦$²$´$¿$Ë$Û$â$é$ó$û$ÿ$%% +%%%(%*%/%7%;%=%=%F%S%i%‰%£%±%½%Ä%Ä%×%Û%Û%Û%â%ç%&&&"&"&<&>&C&]&k&w&~&~&‹&•&•&§&¸  ¿£PIPImI|I|I|I™I™IªIªI°I²I²I¸IºIºIÀIÂIÂIÉIÍIÒIÒIÒIÒIÒIÒIÚIòIòIJJJ)JAJCJbJdJƒJˆJ§J¬J²J²JËJÎJõJKK:K:KCKHKfKTKlK{K€K‡K�K£K«K³K¸K¸K¸KÁKÚKàKàKùKL$L=L?LGLMLULZLZL`L`LiLzL|L‘L“L›L¡L©L®L®L®L®L¼LÓLÕLéLéLñL÷LÿLM MMM$M*M,M,M,M4M4MBMYM]M_MkMmMˆMŽM–M›M¤M¯M³M¹M½MÆMÉMÉM×MèMêMN/N5N=NBNKNPNPNUNWN_N_NzNŒN‘N�N£N¦N½N¿NÂNÒNÖNÝNæNõNO OOOO#O#O+O8OPOUO_O‡O’O�O¨O³O¾OÉOÔOßOêOêOêOòOûOP"P?PXPZP`PbPePpPrPrPxP~P~P†P�P•P¡P¡P¨P«PÊPÕPÝPåPêPêPñPõPúP QQQ%Q%Q2QYQYQbQpQ�Q�Q”Q¢Q±QÇQÍQÒQÒQ×QíQùQRRR$R2R9R;RDRDRNR\RhRR•R¬R²R´RËRÐRÐRðRðRSSSS S.S3S3SJSPSRS]SoS…S…S™S©S»SÀSÌSÒSÕSìSîSñST TTTT4TFTKTWT]T`TwTyT|TŒT�T˜T¦T«T°T°T¶T¾TÃTÃTÉTÉT×TÝTãTíT÷TUUU U)U)U+U3U8U=UBUBUHUPUUUUUZUeUjUoUzUU¥U§U¬U±U¶U»UÀUÅUÊUÊUÏUÔUðUúUV"V(V0V0V>VDVJVTV^VlV�V„V†V�VŸV¤V¤V¤V¬V±VºVºV¿V¿VÅVÍVÒVÒV×VâVçVìVñVWWWWW%W+W1W;WEWSWhWkWmWwW†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,X:XOXRXTX^XmXrXrXrXzXXˆX�X�X“X›X X X­X³X³XÁXÇXÍX×XáXïXYY YY"Y'Y'Y'Y/Y4Y=YBYBYHYPYUYUYbYhYhYvY|Y‚YŒY–Y¤Y¹Y¼Y¾YÈY×YÜYÜYÜYäYéYòY÷Y÷YZ ZZZZZZ$Z8Z=Z=ZCZMZSZXZXZaZoZxZ†Z‹Z‹Z”Z¢Z®Z¿ZÌZÓZÛZåZóZóZøZøZ[[[[ [ [[[[$[*[,[5[D[L[Q[W[W[_[h[v[�[†[Œ[”[™[™[™[™[™[™[™[™[™[™[²[¸[Á[Ç[Ï[Ô[Ù[â[í[ö[þ[\\\ \\\\\ \ \(\6\B\K\Q\Q\Z\p\p\v\\•\•\ž\ \¦\¯\Å\Å\Î\Î\Î\×\Ü\Ü\ä\é\é\]] ]%]+]5]=]B]B]B]V]_]e]w]�]�]‰]‰]‘]“]“]¬]¶]¿]Á]Á]Á]Ç]Ë]Í]Í]Í]Í]Ò]Ø]Þ]â][a¹Ìz©'k'kIkTkjk†k“kªk½kÈkÞkÊkíkõkõkll ll.lClRl]lplvlvlvl{l€l�lšl´l¶l»lÊlÕlâlìlìlúlº”*K€¤€¤˜¤Ÿ¤¦¤©¤²¤µ¤¸¤¼¤Á¤ã¤Ð¤ó¤û¤¥¥¥¥!¥*¥0¥3¥D¥b¥s¥~¥°¥»à.¢·A·AÕAàAñAôAøABBB%B;BLB]BoB�B�BŸB°B¿B¿BÍBÑBÕBÚBÞBëBòBCCC#C1CJCLCPCZCZC_C_C_CdCdCsC|C„CšCšCšCŸCŸC·CÃCÎCÓCÓCÖCÛCÛCúCDDDDDDD:DFDRDTDTDWDYDYDfDhDhDkDkDtDzDD›D›D›D›D›D›D›D›D›D›D›D›D�D®DÀDÏDÞDÞDâDâDêDEE E§E¼,ÖÖ$Ö+Ö3Ö8Ö>Ö½l3JçQçQýQRR&RKR7RZR_RfRfRlRoRsR{R“RžR´R©RÌRÖR¾PQaâ$â$ð$þ$%%&%+%H%N%U%\%j%v%ˆ%Ä%¿D+ÖäÖäêäøäþä!å'å-åRåXå^ådådålåÀô#œï5ï5÷56 +66$686G6d6q6ƒ6¥6Í6Û6÷6 7!787C7d7‚7‘7¬7·7Ò7ë7ë78/8I8d8v8…8”8”8Ÿ8²8Ã8Ö8æ8ó8ÿ89+9+9393939D9Q9X9w9€9‘9•9�9¨9À9Ø9á9ñ9ù9þ9":2:B:M:a:f:n:”:–:¡:Ô:î:î:;;;,;5;=;O;q;y;�;Œ;Ž;ž;¶;Î;æ;þ;<'<0<9<K<Y<]<a<Á ؇؇ᇈˆÂ\ˆ[¾Ì¾ÌØÌßÌìÌ÷ÌüÌÍÍÍ2Í8ÍVÍlÍwÍ}ͯ͟͟ÍÄÍÆÍÉÍÕÍÝÍåÍíÍûÍÎ +ÎÎÎÎ*Î0Î5Î5ÎLÎLÎjÎjÎ}ΊÎ�Î�ΦίξÎÔÎßÎíÎøÎÏÏ'Ï-Ï7ÏCÏPÏRÏRÏZÏ_Ï_ÏgÏlÏlÏtÏyÏyÏ�φφόϑϑϘÏ�Ï�ϤϩϩϴϹϹÏÄÏÉÏÉÏÔÏÙÏÙÏäÏäÏÿÏÐ ÐÐÐÐ1Ð>ÐMÐTÐWÐiÐkÐqЅВССССЫÐÅÐÚÐìÐýÐÑÑÑ"Ñ-Ñ?ÑPÑ_ÑeÑvÑ�ыћѪѰѻÑÁÑÖÑÜÑíÑøÑþÑÒÒÒ1Ò=ÒEÒUÒ\ÒbÒsÒ~ÒƒÒ ÒµÒÃÒÓÒßÒñÒüÒ Ó Ó Ó'Ó,Ó3Ó7ÓEÓOÓUÓ_ÓeÓpÓvÓxӅӒӜӵÓÃÓÃÓÉÓÐÓÖÃD#° ¬ ¬?¬a¬i¬i¬w¬Š¬¤¬§¬°¬Ì¬Ì¬Ì¬Ô¬Ö¬Ö¬Þ¬à¬à¬è¬ê¬ê¬ò¬ò¬û¬­­­­­"­'­-­2­2­2­2­:­C­I­N­N­S­`­y­˜­›­±­Ð­Ð­Ð­Ø­Ú­Ú­Ú­â­ä­ä­ä­ì­î­î­î­ö­ø­ø­®® ®®®®®® ®2®@®N®X®X®X®h®h®o®s®y®‘®Ÿ®²®¿®è®ë®ô®û®¯¯ ¯+¯+¯6¯<¯A¯A¯A¯H¯N¯c¯k¯q¯|¯“¯ª¯¶¯¼¯Á¯Á¯È¯Ó¯Ó¯Ø¯ê¯ð¯ð¯ð¯ð¯L°Äd*CC*C4C7C7CACTCVCcCeCpC„CŒCœC¡C§C¯C²CÄCÅLWf11.12171B1B1L1R1R1V1^1Æ\CV²0²0È0È0Ì0Ñ0ä0ç0ì0ì0ö0ü0ü0 +1 11Ç8(2îÖîÖ÷Ö÷Ö× ××××ȨY^^ ^'^2^E^9^w^Û^Á^¶^œ^…^á^ö^æ^__8_=_R_?_a_g_g_n_˜_Ã_¦_Ú_ø_ø_ø_`ÉlF]�,�,©,Ò,´,á,---5-M-:-\-u-•-§-À-À-Ç-é-é-ó-Ê4Š“ßëßëóëøëþëìì%ì-ìËxÌæo‚o‚š‚‡‚©‚³‚º‚ЂÕ‚Ú‚Þ‚à‚æ‚삃*ƒ2ƒDƒgƒ]ƒvƒ‚ƒÌ”"ðªðªþª«««$«/«:«B«M«X«]«s«z«�«Œ«—«™«¤«¯«±«½«È«Ó«Ü«ä«ä«è« ¬Í€Úö"5"5@5D5H5P5^5a5d5z5€5‚5”5˜5œ5¤5¬5¸5Í5Þ5å5ì5ì5ù56ÎÞ`wEwE§E²E×E¹EñE'F,F,F/F9FQF`FbFjFŒF­F¿FÌFçFûFGG$G&G+GBGiG{GˆG£GÃG¹GÝGãGãGìG HHHH8H"HGHGHYHYHgHqHœH’H¶H¶H»H¾HÔHàHõHI#I)I9IaIPIpIrI„I˜I¬I¢IÁIÇIÖIþIíI JJ!J+J?JIJRJiJsJuJ‰J“J“J²J¸J¸J¸JÁJáJ KøJKK/K7KbKXKwKwKwK�K�K¯KÏ`8Ìo1o1¦1­1µ1¾1É1Ð1è1í1ð1ó1ü1 +222A2F2S22„2‘2±2¶2Å2ñ2ù2þ23?3G3L3L3_3r3†3Š3¬3½3Â3Â3î3î3î3î3î344 4"4%4%4R4W4`4m4u4�4§4µ4À4Ü4Ü4Ü4é455555&5(5(555L5L5\5a5ˆ5Ÿ5±5Í5Í5Í5Ú5ñ5ó5ó5ó56666&6=6=6M6U6Z6z6‘6£6¿6¿6¿6Ì6ã6å6å6ò6 7 77 7-7O7m7r7€7Ž7˜7š7š7š7·7¿7Á7Á7é7/8Ф%JGèGèaè�è�è¬è¼èÁèÁèÐèâèüèé éé+é3é3é3é5é5é5é5éQéQéQéQéhéjéjéjéjé…é�éÅéÑÐ燃‡ƒ�ƒ©ƒ®ƒ®ƒºƒ¿ƒăσÔƒÔƒÔƒ „öƒ„?„?„X„q„Š„£„¨„¨„Á„Ú„ó„ ………*…C…\…u…w…w…�…©…Â…Û…Û…Û…í…Ò0�‰ëë�ë“ë—ë¶ë×ë×ëÝëÓ<:E888&848@8L8U8^8g8m8r8ÔluŒª&ª&¸&Â&É&à&à&å&ç&ó&ý& '('*':':'?'A'H'z'ÕÈŸÍWtWtkt•tŠtvtµtçtÍtÀtuu"u0u?uVusuÌu´u uÒuÝu vvv5v=vbvWvCvuvŽvzv±v�vÈvÏvûvûvûvûvwÖL^m÷-÷-.'...P.P.b.o..u.—.¡.×$qv§M§M»MÃMÎMÔMØÈ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Ù H‡H‡V‡m‡s‡Ú`FZr8r8‚8‰8‹8�8Ÿ8¥8º8º8È8È8Ô8Ý8à8î8ø8û89Û<ög�g�p�{�†�‘�œ�¦�Ä�Ï�ß�Ü 5—f—f¯fÁfÇfÓfÞfìføfgg*g}I}Q}Y}]}k}q}v}v}|}�} }¥}¥}«}±}¶}¶}¶}¼}Ë}Þ}ë}ï}ô}ô}ø}ý}ý}~ ~~3~I~U~U~[~h~j~w~ƒ~’~¥~¥~²~¾~¾~¾~¾~Â~Ç~Ø~ê~õ~ý~,;ANNeuu‰•— ¬ÃÃÉÖØêêõõõõõq‚á „È/U/UMU[UrUwUœU¢U§U­U»UÂUÑUÖUâUôUôUVV0V7VQVnVzV•V­VÉVÒVáVéVöVÿVWW"WBWGWOWhWzWŠW�W›W¤WªWðWÚWËWX;X%XXKXNXsXYâ<+6ÈCÈCéCïCøC +D#D+DEDQDã„ |† † ¨ ³ º  Å Å Õ à à ã ê ñ ÷ ý   +  ! ! # , 8 > c g j z ‚ ‡ ‡ Ž — ¨ ® ·  Ó Ó Ü á ë ò ù !! !!.!1!@!M!Z!Z!Z!Z!`!r!{!Œ!­!¾!Ö!Ý!ç!ï!ö!ö!ÿ!""""-"-"-"A"U"e"h"##ä„9ê6ê677767c7y7Š7“7¡7³7Ì7Ì7Þ7ø7888åX{Í^^‰“¦±ÃÑ×èï÷ (=MWYiy‚ˆ�”𠦱¼¿Æàè$'/3ET[c~›Ÿ¨¯ÁÉÐÔÝßñ "///1HNN`æ  +x‡x‡�‡•‡š‡ç¤ŸÄ‡€‡€£€©€»€À€Æ€É€Í€Í€ð€õ€"��1�J�6�Y�o�[�~�†�‹�‘�”�˜�š�³�Ÿ�Â�Â�Â�Ý� ‚‚è˜Ìîââëææúõ ""11@@OO^^m�|‹‹š©¸#éxËå7c7cUcgcmcyc�c�c¢c¨c³cÃcÏcØcÞcäcïcýc +dd$d3d3dcdêd”©/ì/ì3ìFìFì`ìgìsìsìŠìŠì¡ì¡ì¸ì¸ìÏìÏìæìèìèìììëÌÂñ__�ˆ“©©»ÆÚÞãçéï "$=LPPPcxx„Š”Ÿ­´ÃÅÞøø +ìP7GXDXDnDzD‚D†D—D¥D«D·D¿DÊDÐDÓDÝDí ®- = =9=D=H=Q=X=_=u=†=—=©=»=Ê=Ù=ê=ù=ù=>> >>!>*>1>5>U>U>U>U>U>a>e>h>p>~>†>“>›>£>´>¿>Ä>Ä>Ñ>×>æ>ý>ÿ> +??"?%?+?'???V?X?f?h?s?y?y?�?�?“?š?°?°?°?µ?µ?Í?Û?æ?ë?ë?î?ó?ó?@ @-@/@/@3@5@5@T@b@n@p@p@s@u@u@‚@„@„@‡@‡@‡@‡@‡@�@–@š@¦@Æ@Ó@á@è@°Aî(rxxŠxІŠ�Š�РЦŠï(ntZ&Z&c&m&~&‰&‰&§&ðTzKþòþòó"ó%ó.ó8óPó`óióoóróvóxó�ó ó­ó³ó·ó½ó¿óÂóÆóÆóéóíóóóóóúóô1ôDôWô]ôdôoôyô}ô€ô‡ô�ô‘ô—ô¨ô®ô³ô¸ôÅôÇôÙôÛôâôïôñôõõõõõ'õ2õ>õUõUõjõvõ“õ·õÑõÖõíõòõööö"ö3öHöNö^ököö†ö’öªö¶ö¶ö¶ö¼ö¿öÂöÛöáöõöûö÷ ÷ ÷÷÷*÷*÷0÷>÷U÷[÷^÷a÷h÷q÷x÷x÷}÷Š÷—÷—÷�÷«÷Â÷È÷Ë÷Î÷Õ÷Õ÷æ÷í÷ú÷øøøø ø%ø,ø7øKøKøeøjøqøyø€ø�ø”ø�øµøºøÁøãøîøôøüøù)ù)ùDùDù^ùlùsùzùœù¯ùÓùÕùßùúúúú&ú7úPúTú)ûñÀ€¬`` `#`(`7`B`N`o`P`~`ƒ`ƒ`¨`Ù`¼`¯`ü`a*a/a;a\a=akapa‰a�a³aÉaÉaïaïaûaò ././=/V/\/ó4‘šçNçNÿN"O/O5O;O>O_Oô8 â.â.ð.÷./ +/////#/õ :>7070A0I0N0öÎPww%w5w@wVwsw‚w¦wÔwÚwàwèwêwòwx +xx!x7xTxcx‡xµx»xÁxÉxÎxÖxëxîxùxy +yyyy&y.y>yVydy’y˜y�y¥yµyÛy zzzz%z0z;zXzpz|z„z’z’z—zªzÁzÃzàzøz{ {{{ {2{?{I{`{w{�{¢{¯{Ñ{è{ÿ{ ||&|=|=|F|R|h|�|”|Ÿ|²|¶|¶|¶|½|Â|Õ|à|ú|ü|}} },}6}6}H}÷˜k ˆ9ˆ9ž9ª9ª9À9Ë9Í9í9í9í9ô9þ9:: : :::,:,:b:n:€:�:§:¬:¯:´:´:´:Ð:×:ä:ë:ó:ø:ø:; ;(;-;-;I;V;^;c;c;;‹;”;œ;¤;°;Æ;Ñ;ô;ø;<<<</<I<S<_<g<l<l<‹<—<©<®<Ê<Ö<å<ê<ù<= = = = =====2=>=P=R=U=Z=Z=Z=d=l=s={=„=�=•=¢=°=°=º=Ã=Ë=>> >>6>;>;>N>V>V>X>X>X>]>]>d>j>n>u>y>y>y>y>ˆ>ˆ>­>¶>¶>º>ÕBø(ØBØBæBïBýBCù�ªÊÿlÿlm%m1mGm\mjmum„mŠmŠmŠm�m”m¢m­mÆmÈmÍmÛmæmómúmnú\2Eo+o+‰+®+�+½+Ù+Ï+ñ+,ó+,.,@,Y,Y,`,‚,‚,Œ,û8fp'M'M?MNMbMqMwM}M€M¡Mü0�—p‹p‹„‹�‹ž‹¡‹¹‹¼‹Ä‹ý0S[¶×¶×Ê×Ò×ß×é×ü×þP>Nðˆðˆüˆ‰‰'‰/‰3‰=‰G‰O‰R‰X‰ÿT¡²�O�O©O¼O¿OÉOÖOëOíOÿO PPP#P&PzP<˜£È‹È‹Ü‹ã‹ï‹û‹ ŒŒŒŒ Œ 26nånå|åˆåH!/¯[¯[Ã[Ï[å[Ñ[ô[ö[ý[\\\ Dƒ?S?ScSjSoSwS‘SšSœS©S©S«SÅSËSÍSÏSÜSÜSÜSÜSàSïSøST TTTT T>!>I>T>a>o>c>˜>˜>¤>¬>»>õ>÷>$?,?,?a?y?f?š?ˆ?©?¯?¾?Ó?Õ?à?è?è? @@@#@+@I@6@~@d@X@�@ª@•@Ê@â@Ï@Añ@%AA4AFAflags&CCF_IN_QUOTES) { Free(cc->dollar_buf); st=Doc2PlainText(doc,doc_e); - cc->dollar_buf=MStrPrint("$$%Q$$",st); + cc->dollar_buf=MStrPrint("$$%$$Q$$",st); cc->dollar_cnt=2; Free(st); return TRUE; @@ -217,7 +217,7 @@ lgc_start2: } if (doc_e!=doc) goto lgc_start1; - tempf->cur_entry=doc->root.last; //When take next, will still be end. + tempf->cur_entry=doc->head.last; //When take next, will still be end. } tempf=cc->lex_include_stk; if (tempf->next) { @@ -338,7 +338,7 @@ U0 LexAttachDoc(CCmpCtrl *cc,CLexFile *tempf=NULL, tempf=LexFilePush(cc); } if (!doc_e) - doc_e=doc->root.next; + doc_e=doc->head.next; tempf->full_name=StrNew(doc->filename.name); tempf->doc=doc; while (doc_e!=doc) { @@ -372,7 +372,7 @@ U0 LexAttachDoc(CCmpCtrl *cc,CLexFile *tempf=NULL, I64 LexInStr(CCmpCtrl *cc,U8 *buf,I64 size,Bool *done) { - I64 i=0,j,ch; + I64 i=0,j,k,ch; *done=TRUE; while (iflags|=CCF_USE_LAST_U16; break; + } } buf[i++]=j; - cc->flags|=CCF_USE_LAST_U16; break; default: cc->flags|=CCF_USE_LAST_U16; @@ -442,7 +446,7 @@ I64 LexInStr(CCmpCtrl *cc,U8 *buf,I64 size,Bool *done) I64 Lex(CCmpCtrl *cc) {//Fetch next token. - I64 i,j,k,ch; + I64 i,j,k,l,ch; CHash *temph; Bool str_done,neg_e; U8 *fbuf,*buf2,*buf3,buf[STR_LEN]; @@ -640,29 +644,31 @@ lex_float_start: break; if (ch=='\\') { switch (ch=LexGetChar(cc)) { - case 'n': k.u8[j]='\n'; break; - case 'r': k.u8[j]='\r'; break; - case '"': k.u8[j]='"'; break; + case '0': k.u8[j]=0; break; case '\'': k.u8[j]='\''; break; case '\`': k.u8[j]='\`'; break; + case '"': k.u8[j]='"'; break; case '\\': k.u8[j]='\\'; break; + case 'd': k.u8[j]='$$'; break; + case 'n': k.u8[j]='\n'; break; + case 'r': k.u8[j]='\r'; break; case 't': k.u8[j]='\t'; break; - case '0': k.u8[j]=0; break; case 'x': case 'X': i=0; - while (TRUE) { + for (l=0;l<2;l++) { ch=ToUpper(LexGetChar(cc)); if (Bt(chars_bmp_hex_numeric,ch)) { if (ch<='9') i=i<<4+ch-'0'; else i=i<<4+ch-'A'+10; - } else + } else { + cc->flags|=CCF_USE_LAST_U16; break; + } } k.u8[j]=i; - cc->flags|=CCF_USE_LAST_U16; break; default: k.u8[j]='\\'; diff --git a/Compiler/OpCodes.TXT b/Compiler/OpCodes.TXT index e47d4d7..f6cb2da 100644 --- a/Compiler/OpCodes.TXT +++ b/Compiler/OpCodes.TXT @@ -816,7 +816,7 @@ OPCODE INSB 0x6C; OPCODE INSW 0x6D, 16; OPCODE INSD 0x6D, 32; OPCODE INTO 0xCE; -OPCODE INT3 0xCC; +OPCODE INT3 0xCC, :BPT; OPCODE INT 0xCD, IB &UIMM8 0xCD, IB IMM8; @@ -906,40 +906,58 @@ OPCODE OUT OPCODE OUTSB 0x6E; OPCODE OUTSW 0x6F, 16; OPCODE OUTSD 0x6F, 32; -OPCODE REP_INSB 0xF3 0x6C; +OPCODE REP_INSB + 0xF3 0x6C, % + 0xF3 0x48 0x6C; OPCODE REP_INSW 0xF3 0x6D, 16; OPCODE REP_INSD 0xF3 0x6D, 32; -OPCODE REP_MOVSB 0xF3 0xA4; +OPCODE REP_MOVSB + 0xF3 0xA4, % + 0xF3 0x48 0xA4; OPCODE REP_MOVSW 0xF3 0xA5, 16; OPCODE REP_MOVSD 0xF3 0xA5, 32; -OPCODE REP_MOVSQ 0xF3 0x48 0xA5, 32=; -OPCODE REP_OUTSB 0xF3 0x6E; +OPCODE REP_MOVSQ 0xF3 0x48 0xA5, 32; +OPCODE REP_OUTSB, + 0xF3 0x6E, % + 0xF3 0x48 0x6E; OPCODE REP_OUTSW 0xF3 0x6F, 16; OPCODE REP_OUTSD 0xF3 0x6F, 32; -OPCODE REP_LODSB 0xF2 0xAC; +OPCODE REP_LODSB + 0xF2 0xAC, % + 0xF2 0x48 0xAC; OPCODE REP_LODSW 0xF2 0xAD, 16; OPCODE REP_LODSD 0xF2 0xAD, 32; -OPCODE REP_LODSQ 0xF2 0x48 0xAD, 32=; -OPCODE REP_STOSB 0xF3 0xAA; +OPCODE REP_LODSQ 0xF2 0x48 0xAD, 32; +OPCODE REP_STOSB + 0xF3 0xAA, % + 0xF3 0x48 0xAA; OPCODE REP_STOSW 0xF3 0xAB, 16; OPCODE REP_STOSD 0xF3 0xAB, 32; -OPCODE REP_STOSQ 0xF3 0x48 0xAB, 32=; -OPCODE REPE_CMPSB 0xF3 0xA6; +OPCODE REP_STOSQ 0xF3 0x48 0xAB, 32; +OPCODE REPE_CMPSB + 0xF3 0xA6, % + 0xF3 0x48 0xA6; OPCODE REPE_CMPSW 0xF3 0xA7, 16; OPCODE REPE_CMPSD 0xF3 0xA7, 32; -OPCODE REPE_CMPSQ 0xF3 0x48 0xA7, 32=; -OPCODE REPE_SCASB 0xF3 0xAE; +OPCODE REPE_CMPSQ 0xF3 0x48 0xA7, 32; +OPCODE REPE_SCASB + 0xF3 0xAE, % + 0xF3 0x48 0xAE; OPCODE REPE_SCASW 0xF3 0xAF, 16; OPCODE REPE_SCASD 0xF3 0xAF, 32; -OPCODE REPE_SCASQ 0xF3 0x48 0xAF, 32=; -OPCODE REPNE_CMPSB 0xF2 0x48 0xA6; +OPCODE REPE_SCASQ 0xF3 0x48 0xAF, 32; +OPCODE REPNE_CMPSB + 0xF2 0xA6, % + 0xF2 0x48 0xA6; OPCODE REPNE_CMPSW 0xF2 0xA7, 16; OPCODE REPNE_CMPSD 0xF2 0xA7, 32; -OPCODE REPNE_CMPSQ 0xF2 0x48 0xA7, 32=; -OPCODE REPNE_SCASB 0xF2 0xAE; +OPCODE REPNE_CMPSQ 0xF2 0x48 0xA7, 32; +OPCODE REPNE_SCASB + 0xF2 0xAE, % + 0xF2 0x48 0xAE; OPCODE REPNE_SCASW 0xF2 0xAF, 16; OPCODE REPNE_SCASD 0xF2 0xAF, 32; -OPCODE REPNE_SCASQ 0xF2 0x48 0xAF, 32=; +OPCODE REPNE_SCASQ 0xF2 0x48 0xAF, 32; OPCODE RET 0xC3; OPCODE RET1 0xC2, IW IMM16; OPCODE RETF 0xCB; diff --git a/Compiler/OptPass012.CPP b/Compiler/OptPass012.CPP index 9cf4fe4..04c6533 100644 --- a/Compiler/OptPass012.CPP +++ b/Compiler/OptPass012.CPP @@ -38,7 +38,7 @@ args. ps=cc->ps=MAlloc(sizeof(CPrsStk)); ps->ptr=0; ps->ptr2=0; - tempi=cc->coc.coc_root.next; + tempi=cc->coc.coc_head.next; while (code=tempi->ic_code) { tempc=tempi->ic_class; tempi->ic_class2=tempc; @@ -1214,7 +1214,6 @@ args. case IC_GET_LABEL: case IC_TYPE: case IC_RDTSC: - case IC_HPET: case IC_SET_RFLAGS: case IC_SET_RBP: case IC_SET_RSP: diff --git a/Compiler/OptPass3.CPP b/Compiler/OptPass3.CPP index c8b228c..cd8c92f 100644 --- a/Compiler/OptPass3.CPP +++ b/Compiler/OptPass3.CPP @@ -49,7 +49,7 @@ U0 OptPass3(CCmpCtrl *cc,COptReg *reg_offsets) } else member_cnt=0; - tempi=cc->coc.coc_root.next; + tempi=cc->coc.coc_head.next; while (code=tempi->ic_code) { tempi_next=tempi->next; if (code==IC_NOP1) @@ -419,7 +419,6 @@ here1: case IC_GET_RFLAGS: case IC_CARRY: case IC_RDTSC: - case IC_HPET: case IC_SET_RFLAGS: case IC_GET_RBP: case IC_SET_RBP: diff --git a/Compiler/OptPass4.CPP b/Compiler/OptPass4.CPP index 2b32067..6879161 100644 --- a/Compiler/OptPass4.CPP +++ b/Compiler/OptPass4.CPP @@ -144,7 +144,7 @@ U0 OptPass4(CCmpCtrl *cc,COptReg *reg_offsets,I64 *_type) if (_type) *_type=RT_I64; - tempi=cc->coc.coc_root.next; + tempi=cc->coc.coc_head.next; while (code=tempi->ic_code) { tempi_next=tempi->next; if (dead_code&&code!=IC_LABEL) { @@ -587,7 +587,6 @@ p4_sib: case IC_GET_RFLAGS: case IC_CARRY: case IC_RDTSC: - case IC_HPET: case IC_SET_RFLAGS: case IC_GET_RBP: case IC_SET_RBP: diff --git a/Compiler/OptPass5.CPP b/Compiler/OptPass5.CPP index 221b981..25a1aab 100644 --- a/Compiler/OptPass5.CPP +++ b/Compiler/OptPass5.CPP @@ -6,7 +6,7 @@ U0 OptPass5(CCmpCtrl *cc) ps->ptr=0; ps->ptr2=0; - tempi=cc->coc.coc_root.next; + tempi=cc->coc.coc_head.next; while (code=tempi->ic_code) { if (code>IC_NOP2) { if (tempi->ic_flags&ICF_PASS_TRACE) { diff --git a/Compiler/OptPass6.CPP b/Compiler/OptPass6.CPP index 636e984..b543690 100644 --- a/Compiler/OptPass6.CPP +++ b/Compiler/OptPass6.CPP @@ -105,7 +105,7 @@ U0 OptPass6(CCmpCtrl *cc) else reg_stk_size=1; #assert REGG_STK_TEMP==1<<9 - tempi=cc->coc.coc_root.next; + tempi=cc->coc.coc_head.next; old_tempil2=NULL; tempil1=tempil2=&cmp.ic_nop; while (tempi->ic_code) { diff --git a/Compiler/OptPass789A.CPP b/Compiler/OptPass789A.CPP index ab19ba0..3491d62 100644 --- a/Compiler/OptPass789A.CPP +++ b/Compiler/OptPass789A.CPP @@ -40,7 +40,7 @@ cc->pass==10 is final pass, code is placed into buf. "$$FG$$$$IV,0$$$$BK,0$$"; cc->last_float_op_ic=NULL; - tempi=&cc->coc.coc_root; + tempi=&cc->coc.coc_head; tempi->ic_last_start=-1; tempi->ic_cnt=0; tempi=tempi->next; @@ -756,9 +756,6 @@ cc->pass==10 is final pass, code is placed into buf. case IC_RDTSC: ICCopyTemplate(cc,tempi,CMP_TEMPLATE_RDTSC,TRUE,FALSE,FALSE,CN_MAIN); break; - case IC_HPET: - ICCopyTemplate(cc,tempi,CMP_TEMPLATE_HPET,TRUE,FALSE,FALSE,CN_MAIN); - break; case IC_SET_RFLAGS: ICPush(tempi,tempi->a1.type,tempi->a1.reg,tempi->a1.disp,ip2); ICU8(tempi,0x9D); diff --git a/Compiler/PrsExp.CPP b/Compiler/PrsExp.CPP index 3ff6cc3..1f6bf53 100644 --- a/Compiler/PrsExp.CPP +++ b/Compiler/PrsExp.CPP @@ -14,7 +14,7 @@ CIntermediateCode *PrsAddOp(CCmpCtrl *cc,I64 stk_op,CHashClass *tempc) { - CIntermediateCode *tempi=cc->coc.coc_root.last; + CIntermediateCode *tempi=cc->coc.coc_head.last; Bool div_sizeof=FALSE; switch (stk_op.u16[0]) { case IC_ADD: @@ -108,7 +108,7 @@ pe_unary_term1: i=IC_PP_+PREC_UNARY_PRE<<16; cc->flags&=~(CCF_PREINC|CCF_PREDEC|CCF_POSTINC|CCF_POSTDEC); } - tempi=cc->coc.coc_root.last; + tempi=cc->coc.coc_head.last; if (cc->flags & (CCF_RAX|CCF_ARRAY)) { if (tempi->ic_code==IC_DEREF) tempi->ic_code=i; @@ -142,11 +142,11 @@ pe_check_binary_ops2: left_prec=cur_op.i8[2]; PrsPush(ps,tempc); PrsPush(ps,stk_op); - PrsPush(ps,cc->coc.coc_root.last->ic_class); + PrsPush(ps,cc->coc.coc_head.last->ic_class); PrsPush(ps,cur_op); goto pe_unary_term1; } else { - tempi=cc->coc.coc_root.last; + tempi=cc->coc.coc_head.last; tempc=tempi->ic_class; if (stk_op.u16[0]==IC_DEREF && tempc->ptr_stars_cnt) tempc--; @@ -172,7 +172,7 @@ pe_do_binary_op: switch (cur_op.u16[0]) { case IC_ADD: case IC_SUB: - tempi=cc->coc.coc_root.last; + tempi=cc->coc.coc_head.last; if (!tempi->ic_class->ptr_stars_cnt && tempi->ic_class->raw_type!=RT_F64) { ICAdd(cc,IC_SIZEOF,1,cmp.internal_types[RT_I64]); @@ -199,7 +199,7 @@ pe_do_binary_op: max_prec=cur_op.u8[2]; left_prec=cur_op.u8[2]; if (intermediate_code_table[cur_op.u16[0]].type==IST_ASSIGN) { - tempi=cc->coc.coc_root.last; + tempi=cc->coc.coc_head.last; tempc=OptClassFwd(tempi->ic_class); if (intermediate_code_table[tempi->ic_code].type!=IST_DEREF || !tempc->ptr_stars_cnt && !Bt(&tempc->flags,Cf_INTERNAL_TYPE)) @@ -236,7 +236,7 @@ pe_pop_higher: pe_push_lower: PrsPush(ps,tempc); PrsPush(ps,stk_op); - PrsPush(ps,cc->coc.coc_root.last->ic_class); + PrsPush(ps,cc->coc.coc_head.last->ic_class); PrsPush(ps,cur_op); goto pe_unary_term1; @@ -415,7 +415,7 @@ I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tempf) if (indirect) { if (!(cc->flags & (CCF_RAX | CCF_ARRAY))) ICAdd(cc,IC_DEREF,0,cmp.internal_types[RT_PTR]); - cc->coc.coc_root.last->ic_class=cmp.internal_types[RT_PTR]; + cc->coc.coc_head.last->ic_class=cmp.internal_types[RT_PTR]; ICAdd(cc,IC_SET_RAX,0,cmp.internal_types[RT_PTR]); ICAdd(cc,IC_NOP2,1,cmp.internal_types[RT_PTR]); //balance the books } @@ -544,7 +544,7 @@ I64 PrsFunCall(CCmpCtrl *cc,CPrsStk *ps,Bool indirect,CHashFun *tempf) tempcbh1=tempcbh->coc_next; COCAppend(cc,tempcbh); if (!Bt(&tempf->flags,Ff_INTERNAL)) - cc->coc.coc_root.last->ic_flags|=ICF_PUSH_RES; + cc->coc.coc_head.last->ic_flags|=ICF_PUSH_RES; tempcbh=tempcbh1; } if (Bt(&tempf->flags,Ff_INTERNAL)) @@ -970,7 +970,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, goto um_join; case TK_DEREFERENCE: - tempi=cc->coc.coc_root.last; + tempi=cc->coc.coc_head.last; if (!(cc->flags & (CCF_RAX | CCF_ARRAY))) ICAdd(cc,IC_DEREF+PREC_UNARY_PRE<<16,0,tempi->ic_class-1); else @@ -979,7 +979,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, um_join: if (!*unary_post_prec) *unary_post_prec=PREC_TERM; - tempc=cc->coc.coc_root.last->ic_class; + tempc=cc->coc.coc_head.last->ic_class; if ((!tempc->ptr_stars_cnt || cc->flags & CCF_ARRAY) && cc->token=='.') LexExcept(cc,"Must be address, not value "); if (!(cc->flags & CCF_RAX)) @@ -1038,7 +1038,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, } if (!(cc->flags&(CCF_RAX|CCF_ARRAY))) tempc++; - tempi=cc->coc.coc_root.last; + tempi=cc->coc.coc_head.last; tempi->ic_class=tempc; ICAdd(cc,IC_HOLYC_TYPECAST,was_paren,tempc); if (cc->token!=')') @@ -1049,7 +1049,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, if (!*unary_post_prec) *unary_post_prec=PREC_TERM; Lex(cc); - tempc=OptClassFwd(cc->coc.coc_root.last->ic_class); + tempc=OptClassFwd(cc->coc.coc_head.last->ic_class); if (!tempc->ptr_stars_cnt) LexExcept(cc,"Not array or ptr "); if (!(cc->flags & (CCF_ARRAY | CCF_RAX))) { @@ -1069,7 +1069,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, if (cc->token!=']') LexExcept(cc,"Missing ']' at "); Lex(cc); //skip ] - tempi1=cc->coc.coc_root.last; + tempi1=cc->coc.coc_head.last; tempi1->ic_flags|=ICF_R_TO_INT; ICAdd(cc,IC_MUL,0,tempc); ICAdd(cc,IC_ADD,0,tempc); @@ -1085,7 +1085,7 @@ I64 PrsUnaryModifier(CCmpCtrl *cc,CPrsStk *ps,CMemberLst **_local_var, if (cc->token!=']') LexExcept(cc,"Missing ']' at "); Lex(cc); //skip ] - tempi1=cc->coc.coc_root.last; + tempi1=cc->coc.coc_head.last; tempi1->ic_flags|=ICF_R_TO_INT; ICAdd(cc,IC_MUL,0,tempc); ICAdd(cc,IC_ADD,0,tempc); diff --git a/Compiler/PrsLib.CPP b/Compiler/PrsLib.CPP index eece419..345baa6 100644 --- a/Compiler/PrsLib.CPP +++ b/Compiler/PrsLib.CPP @@ -92,16 +92,16 @@ CIntermediateCode *ICAdd(CCmpCtrl *cc, flags|=ICF_LOCK; tempi->ic_flags=flags; tempi->ic_line=cc->last_line_num; - QueIns(tempi,cc->coc.coc_root.last); + QueIns(tempi,cc->coc.coc_head.last); return tempi; } U0 COCInit(CCmpCtrl *cc) { CCodeCtrl *tempcbh=&cc->coc; - QueInit(&tempcbh->coc_root.next); + QueInit(&tempcbh->coc_head.next); QueInit(&tempcbh->coc_next_misc); - tempcbh->coc_root.ic_code=IC_END; + tempcbh->coc_head.ic_code=IC_END; } U0 COCPush(CCmpCtrl *cc) @@ -125,11 +125,11 @@ U0 COCPop(CCmpCtrl *cc) U0 COCAppend(CCmpCtrl *cc, CCodeCtrl *tempcbh) { - if (tempcbh->coc_root.next!=&cc->coc.coc_root.next) { - cc->coc.coc_root.last->next=tempcbh->coc_root.next; - tempcbh->coc_root.next->last=cc->coc.coc_root.last; - cc->coc.coc_root.last=tempcbh->coc_root.last; - tempcbh->coc_root.last->next=&cc->coc.coc_root.next; + if (tempcbh->coc_head.next!=&cc->coc.coc_head.next) { + cc->coc.coc_head.last->next=tempcbh->coc_head.next; + tempcbh->coc_head.next->last=cc->coc.coc_head.last; + cc->coc.coc_head.last=tempcbh->coc_head.last; + tempcbh->coc_head.last->next=&cc->coc.coc_head.next; } if (tempcbh->coc_next_misc!=&cc->coc.coc_next_misc) { cc->coc.coc_last_misc->next=tempcbh->coc_next_misc; @@ -187,7 +187,7 @@ U0 COCDel(CCmpCtrl *cc,CCodeCtrl *coc) { CCodeMisc *cm,*cm1; U8 *undef=NULL; - QueDel(&coc->coc_root.next); + QueDel(&coc->coc_head.next); cm=coc->coc_next_misc; while (cm!=&coc->coc_next_misc) { cm1=cm->next; @@ -233,7 +233,7 @@ U0 COCHeaderPut(CCmpCtrl *cc,I64 pass,Bool put) if (put) { if (Bt(&cc->saved_pass_trace,pass-1)) { "$$IV,1$$Pass %d:$$IV,0$$\n",pass-1; - tempi=cc->coc.coc_root.next; + tempi=cc->coc.coc_head.next; while (tempi->ic_code) { if (tempi->ic_flags&ICF_PASS_TRACE) ICPut(cc,tempi); diff --git a/Compiler/PrsStmt.CPP b/Compiler/PrsStmt.CPP index 7567f93..e4b202f 100644 --- a/Compiler/PrsStmt.CPP +++ b/Compiler/PrsStmt.CPP @@ -578,7 +578,7 @@ class CSwitchCase { U0 PrsSwitch(CCmpCtrl *cc,I64 try_cnt) { CSwitchCase *header=NULL,*temps,*temps1; //Leaks on except - CSubSwitch root,*tempss; //Leaks on except + CSubSwitch head,*tempss; //Leaks on except CCodeMisc *lb_dft,*lb_fwd_case,*mc_jt,*lb_entry,**jmp_table; CIntermediateCode *tempi_sub,*tempi_cmp,*tempi_jmp,*tempi_start; Bool dft_found=FALSE,nobound; @@ -591,10 +591,10 @@ U0 PrsSwitch(CCmpCtrl *cc,I64 try_cnt) else LexExcept(cc,"Expecting '(' or '[' at "); Lex(cc); - QueInit(&root); + QueInit(&head); - root.last->lb_break=COCMiscNew(cc,CMT_LABEL); - root.last->lb_break->use_cnt++; + head.last->lb_break=COCMiscNew(cc,CMT_LABEL); + head.last->lb_break->use_cnt++; lb_dft=COCMiscNew(cc,CMT_LABEL); lb_dft->use_cnt++; mc_jt=COCMiscNew(cc,CMT_JMP_TABLE); @@ -630,9 +630,9 @@ sw_cont: else LexExcept(cc,"Expecting ':' at "); tempss=MAlloc(sizeof(CSubSwitch)); - QueIns(tempss,root.last); - root.last->lb_break=COCMiscNew(cc,CMT_LABEL); - root.last->lb_break->use_cnt++; + QueIns(tempss,head.last); + head.last->lb_break=COCMiscNew(cc,CMT_LABEL); + head.last->lb_break->use_cnt++; lb_fwd_case=COCMiscNew(cc,CMT_LABEL); tempi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0); @@ -646,7 +646,7 @@ sw_cont: case KW_START: case KW_CASE: case KW_DFT: - if (cc->coc.coc_root.last==tempi_start) { + if (cc->coc.coc_head.last==tempi_start) { OptFree(tempi_jmp); tempss->lb_start=NULL; } else { @@ -661,7 +661,7 @@ sw_cont: } break; case KW_CASE: - if (root.next!=&root) { + if (head.next!=&head) { lb_fwd_case=COCMiscNew(cc,CMT_LABEL); tempi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0);//In case fall-thru } @@ -669,9 +669,9 @@ sw_cont: lb_entry=COCMiscNew(cc,CMT_LABEL); ICAdd(cc,IC_LABEL,lb_entry,0); lb_entry->use_cnt++; - if (root.next!=&root) { - tempss=root.next; - while (tempss!=&root) { + if (head.next!=&head) { + tempss=head.next; + while (tempss!=&head) { if (tempss->lb_start) ICAdd(cc,IC_SUB_CALL,tempss->lb_start,0); tempss=tempss->next; @@ -717,7 +717,7 @@ sw_cont: LexExcept(cc,"Expecting ':' at "); break; case KW_DFT: - if (root.next!=&root) { + if (head.next!=&head) { lb_fwd_case=COCMiscNew(cc,CMT_LABEL); tempi_jmp=ICAdd(cc,IC_JMP,lb_fwd_case,0);//In case fall-thru } @@ -727,9 +727,9 @@ sw_cont: Lex(cc); else LexExcept(cc,"Expecting ':' at "); - if (root.next!=&root) { - tempss=root.next; - while (tempss!=&root) { + if (head.next!=&head) { + tempss=head.next; + while (tempss!=&head) { if (tempss->lb_start) ICAdd(cc,IC_SUB_CALL,tempss->lb_start,0); tempss=tempss->next; @@ -739,13 +739,13 @@ sw_cont: dft_found=TRUE; break; default: - PrsStmt(cc,try_cnt,root.last->lb_break); + PrsStmt(cc,try_cnt,head.last->lb_break); } } sw_sub_end: - tempss=root.last; + tempss=head.last; ICAdd(cc,IC_LABEL,tempss->lb_break,0); - if (tempss==&root) { + if (tempss==&head) { if (cc->token!='}') LexExcept(cc,"Missing '}' at "); Lex(cc); diff --git a/Compiler/PrsVar.CPP b/Compiler/PrsVar.CPP index cdbf22b..36040b4 100644 --- a/Compiler/PrsVar.CPP +++ b/Compiler/PrsVar.CPP @@ -70,7 +70,7 @@ U0 PrsVarInit(CCmpCtrl *cc,U8 **_dst,CHashClass *tempc,CArrayDim *tempad, ICAdd(cc,IC_ADD,0,tempc+1); if (!PrsExpression(cc,NULL,TRUE)) throw('Compiler'); - tempi=cc->coc.coc_root.last; + tempi=cc->coc.coc_head.last; if (tempi->ic_code==IC_END_EXP) { tempi->ic_code=IC_NOP1; tempi->ic_flags=0; @@ -125,7 +125,7 @@ U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tempc, { I64 i,j,cnt; U8 *st,*_b; - CVI2 root,*tempvi,*tempvi1; + CVI2 head,*tempvi,*tempvi1; CArrayDim *tempad1; tempc=OptClassFwd(tempc); if (tempad1=tempad->next) { @@ -157,13 +157,13 @@ U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tempc, Lex(cc); } if (tempad1->cnt<0) {//[] - QueInit(&root); + QueInit(&head); cnt=0; while (cc->token!='}') { tempvi=MAlloc(offset(CVI2.base)+tempad1->total_cnt*tempc->size); _b=&tempvi->base; PrsVarInit2(cc,&_b,tempc,tempad1,data_addr_ip,_base,data_heap,pass); - QueIns(tempvi,root.last); + QueIns(tempvi,head.last); if (cc->token==',') Lex(cc); cnt++; @@ -178,8 +178,8 @@ U0 PrsVarInit2(CCmpCtrl *cc,U8 **_dst,CHashClass *tempc, *_base=_b=MAlloc(i); else *_base=_b=MAlloc(i,Fs->code_heap); - tempvi=root.next; - while (tempvi!=&root) { + tempvi=head.next; + while (tempvi!=&head) { tempvi1=tempvi->next; MemCpy(_b,&tempvi->base,j); _b+=j; @@ -226,7 +226,7 @@ U0 PrsStaticInit(CCmpCtrl *cc,CMemberLst *tempm,I64 pass) PrsVarInit2(cc,&dst,tempc,&tempm->dim,tempm->static_data_ip, &tempm->static_data,Bt(&cc->flags,CCf_AOT_COMPILE),pass); if (cc->flags&CCF_AOT_COMPILE && pass==2) { - if (cc->coc.coc_root.next!=&cc->coc.coc_root) { + if (cc->coc.coc_head.next!=&cc->coc.coc_head) { ICAdd(cc,IC_RET,0,0); if (machine_code=COCCompile(cc,&size,NULL,NULL)) { if (pass==2) { diff --git a/Compiler/Templates.CPP b/Compiler/Templates.CPP index 3fcf9e6..e3f142b 100644 --- a/Compiler/Templates.CPP +++ b/Compiler/Templates.CPP @@ -4,8 +4,7 @@ CMP_TEMPLATES:: DU32 @@05,@@10,@@15,@@25,@@30, @@35,@@40,@@45,@@55,@@60, @@75,@@80,@@85,@@90,@@95, - @@100,@@105,@@110,@@115,@@125, - @@135; + @@100,@@105,@@110,@@120,@@130; @@05: //INC PUSH RAX @@ -109,77 +108,72 @@ CMP_TEMPLATES:: @@70: @@75: @@80: -@@85: - MOV EAX,HPET_MAIN_CNT - MOV RAX,U64 [RAX] - -@@90: //Sqr +@@85: //Sqr PUSH RAX FLD U64 [RSP] FMUL ST0,ST0 FSTP U64 [RSP] POP RAX -@@95: //Abs +@@90: //Abs PUSH RAX FLD U64 [RSP] FABS FSTP U64 [RSP] POP RAX -@@100: //Sqrt +@@95: //Sqrt PUSH RAX FLD U64 [RSP] FSQRT FSTP U64 [RSP] POP RAX -@@105: //Sin +@@100: //Sin PUSH RAX FLD U64 [RSP] FSIN FSTP U64 [RSP] POP RAX -@@110: //Cos +@@105: //Cos PUSH RAX FLD U64 [RSP] FCOS FSTP U64 [RSP] POP RAX -@@115: //Tan +@@110: //Tan PUSH RAX FLD U64 [RSP] -@@120: FPTAN +@@115: FPTAN FSTSW TEST AX,0x400 - JNZ @@120 + JNZ @@115 FFREE ST0 FINCSTP FSTP U64 [RSP] POP RAX -@@125: //Atan +@@120: //Atan PUSH RAX FLD U64 [RSP] FLD1 -@@130: FPATAN +@@125: FPATAN FSTSW TEST AX,0x400 - JNZ @@130 + JNZ @@125 FSTP U64 [RSP] POP RAX -@@135: +@@130: //************************************ CMP_TEMPLATES_DONT_POP:: DU32 @@05,@@10,@@15,@@20,@@25, @@30,@@35,@@40,@@45,@@50, @@55,@@60,@@65,@@70,@@75, - @@80,@@85,@@90,@@95,@@105, - @@115; + @@80,@@85,@@90,@@100,@@110; @@05: //INC PUSH RAX @@ -208,67 +202,65 @@ CMP_TEMPLATES_DONT_POP:: PUSH RAX FLD U64 [RSP] ADD RSP,8 -@@65: -@@70: //Sqr +@@65: //Sqr PUSH RAX FLD U64 [RSP] FMUL ST0,ST0 ADD RSP,8 -@@75: //Abs +@@70: //Abs PUSH RAX FLD U64 [RSP] FABS ADD RSP,8 -@@80: //Sqrt +@@75: //Sqrt PUSH RAX FLD U64 [RSP] FSQRT ADD RSP,8 -@@85: //Sin +@@80: //Sin PUSH RAX FLD U64 [RSP] FSIN ADD RSP,8 -@@90: //Cos +@@85: //Cos PUSH RAX FLD U64 [RSP] FCOS ADD RSP,8 -@@95: //Tan +@@90: //Tan PUSH RAX FLD U64 [RSP] -@@100: FPTAN +@@95: FPTAN FSTSW TEST AX,0x400 - JNZ @@100 + JNZ @@95 FFREE ST0 FINCSTP ADD RSP,8 -@@105: //Atan +@@100: //Atan PUSH RAX FLD U64 [RSP] FLD1 -@@110: FPATAN +@@105: FPATAN FSTSW TEST AX,0x400 - JNZ @@110 + JNZ @@105 ADD RSP,8 -@@115: +@@110: //************************************ CMP_TEMPLATES_DONT_PUSH:: DU32 @@05,@@10,@@15,@@20,@@30, @@35,@@40,@@50,@@55,@@60, @@65,@@70,@@75,@@80,@@85, - @@90,@@95,@@100,@@105,@@115, - @@125; + @@90,@@95,@@100,@@110,@@120; @@05: //INC SUB RSP,8 @@ -336,66 +328,64 @@ CMP_TEMPLATES_DONT_PUSH:: FSTP U64 [RSP] POP RAX @@70: -@@75: -@@80: //Sqr +@@75: //Sqr SUB RSP,8 FMUL ST0,ST0 FSTP U64 [RSP] POP RAX -@@85: //Abs +@@80: //Abs SUB RSP,8 FABS FSTP U64 [RSP] POP RAX -@@90: //Sqrt +@@85: //Sqrt SUB RSP,8 FSQRT FSTP U64 [RSP] POP RAX -@@95: //Sin +@@90: //Sin SUB RSP,8 FSIN FSTP U64 [RSP] POP RAX -@@100: //Cos +@@95: //Cos SUB RSP,8 FCOS FSTP U64 [RSP] POP RAX -@@105: //Tan +@@100: //Tan SUB RSP,8 -@@110: FPTAN +@@105: FPTAN FSTSW TEST AX,0x400 - JNZ @@110 + JNZ @@105 FFREE ST0 FINCSTP FSTP U64 [RSP] POP RAX -@@115: //Atan +@@110: //Atan SUB RSP,8 FLD1 -@@120: FPATAN +@@115: FPATAN FSTSW TEST AX,0x400 - JNZ @@120 + JNZ @@115 FSTP U64 [RSP] POP RAX -@@125: +@@120: //************************************ CMP_TEMPLATES_DONT_PUSH_POP:: DU32 @@05,@@10,@@15,@@20,@@25, @@30,@@35,@@40,@@45,@@50, @@55,@@60,@@65,@@70,@@75, - @@80,@@85,@@90,@@95,@@100, - @@110; + @@80,@@85,@@90,@@95,@@105; @@05: //INC SUB RSP,8 @@ -421,45 +411,43 @@ CMP_TEMPLATES_DONT_PUSH_POP:: @@50: @@55: @@60: -@@65: -@@70: //Sqr +@@65: //Sqr FMUL ST0,ST0 -@@75: //Abs +@@70: //Abs FABS -@@80: //Sqrt +@@75: //Sqrt FSQRT -@@85: //Sin +@@80: //Sin FSIN -@@90: //Cos +@@85: //Cos FCOS -@@95: //Tan +@@90: //Tan FPTAN FSTSW TEST AX,0x400 - JNZ @@95 + JNZ @@90 FFREE ST0 FINCSTP -@@100: //Atan +@@95: //Atan FLD1 -@@105: FPATAN +@@100: FPATAN FSTSW TEST AX,0x400 - JNZ @@105 -@@110: + JNZ @@100 +@@105: //************************************ CMP_TEMPLATES_DONT_PUSH2:: DU32 @@05,@@10,@@15,@@20,@@25, @@35,@@45,@@50,@@55,@@60, @@65,@@70,@@75,@@80,@@85, - @@90,@@95,@@100,@@105,@@110, - @@115; + @@90,@@95,@@100,@@105,@@110; @@05: @@10: @@ -521,5 +509,4 @@ CMP_TEMPLATES_DONT_PUSH2:: @@100: @@105: @@110: -@@115: } diff --git a/Demo/AcctExample/HomeKeyPlugIns.CPP b/Demo/AcctExample/HomeKeyPlugIns.CPP index 7229476..9a19327 100644 --- a/Demo/AcctExample/HomeKeyPlugIns.CPP +++ b/Demo/AcctExample/HomeKeyPlugIns.CPP @@ -41,7 +41,7 @@ U0 DocHiddenDel(CDoc *doc=NULL) if (doc) { unlock=DocLock(doc); DocRecalc(doc); - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { doc_e1=doc_e->next; if (doc_e->de_flags&(DOCEF_FILTER_SKIP|DOCEF_SKIP)) @@ -165,7 +165,7 @@ Bool MyPutKey(I64 ch,I64 sc) else { FifoU8Flush(god.fifo); GodBitsIns(GOD_GOOD_BITS,KbdMouseEvtTime>>GOD_BAD_BITS); - GodBooksPassage("C:/Home/Downloads/Text/*"); + GodBooksPassage("C:/Home/Sup1/Sup1Texts/*"); } } else { if (sc&SCF_KEY_DESC) @@ -319,9 +319,9 @@ Bool MyPutKey(I64 ch,I64 sc) return TRUE; case 'p': if (sc&SCF_KEY_DESC) - KeyDescSet("Cmd /JukeBox(Home/Downloads)"); + KeyDescSet("Cmd /JukeBox(Home/Sup1)"); else - JukeBox("~/Downloads/Psalmody"); + JukeBox("~/Sup1/Sup1Psalmody"); return TRUE; case 'P': if (sc&SCF_KEY_DESC) diff --git a/Demo/AcctExample/HomeSys.CPP b/Demo/AcctExample/HomeSys.CPP index 203e0b3..b383dcb 100644 --- a/Demo/AcctExample/HomeSys.CPP +++ b/Demo/AcctExample/HomeSys.CPP @@ -9,7 +9,7 @@ U0 UserStartUp() WinToTop; WinZBufUpdate; Dir; - "$TX,"80,142",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:"; + "$TX,"81,125",D="DD_TEMPLEOS_LOC_OFFICIAL"$LOC:"; CPURep; } diff --git a/Demo/AcctExample/HomeWrappers.CPP b/Demo/AcctExample/HomeWrappers.CPP index 08f309b..b6902f8 100644 --- a/Demo/AcctExample/HomeWrappers.CPP +++ b/Demo/AcctExample/HomeWrappers.CPP @@ -1,7 +1,7 @@ #help_index "Cmd Line (Typically)" #define FILEMASK_OFF_LIMITS "!*/Misc/PCIDevices.TXT*;!*/Misc/Bible.TXT*;"\ - "!*/Downloads/Text/*;!*/Downloads/Words/*;!*/Downloads/Bin/*;"\ + "!*/Sup1/Sup1Texts/*;!*/Sup1/Sup1Words/*;!*/Sup1/Sup1Bin/*;"\ "!*/God/Vocab.TXT*" public I64 F(U8 *needle_str,U8 *fu_flags=NULL) diff --git a/Demo/AcctExample/PersonalMenu.TXT b/Demo/AcctExample/PersonalMenu.TXT index 27474abfbee56bec3db93c17cc69e9891539960a..0330865620d5afd4f7e74b27770de34813ef7cee 100644 GIT binary patch delta 4560 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 delta 2515 zcmdl!m*spvi<^qCqmGZSt&($!wM%A^bxfX;3KvYwrKn6p-C11|i>M2dsCGc;9a;f-uYe(oPIcFs1rKc+R4*sP=W#jnEDV)lu?JtyJ($EKmab z%R9BwH?hDvEK?}89PAGTknfa260=hkCJQN=LtM?vEDK?zGDH0_ommkgV!MoB+LNfRZeC#$eQy&T4-&gAPjaiX+3nih}z+*JMW)Fce8_8iLf z*wnh@m*?f=C#Dpm>i|cIGuRzqL*WYbK|w*hYLK^slZz4yiYNcz;E}=ShRF%sV#;U= z9199CoHjX{OAQie{anyU4C01{ObfRHM9Pf^s^%RJG%@(_LgRNeFI3lUmur$yUj+G`+OABs{+;r5Ih&1|d}eh$4@~f`Uq{YS@I8 zp=z8mlX6nAs)-U-=7*Y7nw*VQ$vR;rsCzu~(u-14GE?(PFxpS(aU zMjB$iQ)yA20*bs#n9Jmu5;l@Z`dyOJk#%#5M@S;+Mv?{TeI#Ke0WQ#>R;M6q%@-G) z%r5GLtUb5{t^%YzU))jw$!d^nP-;qWY9g{RVWNo&NG`xs1Ttx>xT6M=Nj{k+sYqr( ziaU@SK@yYyi`ZCz70RPyQh3!e}ztRLYsrbaJJX1EbmGT~aoT=99lmSuF$7P~MHv zY%+&}HKX}t7X@2Ji^)w2Uh+nkDqNs&0N0xV#fdq&`6-nO@WelPqP*nfcXFJQ`{dYl zVA2{fN_F~hCHgR7P&`7~4xsixD-*QHi)4}x0NDVon|)JrgHoYYGlXp&mYG^^4bcfz z7^`yIc;&&aV^@%j%|My}0LcPBG5@^4=E;2|3$_vQ)DJy;nz iH{X1-keiWjbM=ovenz3~XW1EZ7#SJ2TX8a;VgUfk9O111 diff --git a/Demo/AcctExample/PersonalNotes.TXT b/Demo/AcctExample/PersonalNotes.TXT index 0bc476c..fa7ffc6 100644 --- a/Demo/AcctExample/PersonalNotes.TXT +++ b/Demo/AcctExample/PersonalNotes.TXT @@ -1,5 +1,5 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ -* $LK,"::/Demo/Games/RawHide.CPP"$ fix waterfall code so not in center. +* Cursor in $LK,"::/Home/TOSToHtml.CPP"$. * Investigate why packet loss $LK,"Training Sleep(1)",A="FF:::/Adam/Training.CPP,Sleep(1)"$. @@ -10,8 +10,7 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * God said this is bad. $LK,"FL:::/Adam/DolDoc/DocFind.CPP,41"$ * Backward is broken? -* Cannot entering a '$$' in $$TX command's tag. - +* Cannot include ':' in $LK,"Document Links",A="FF:::/Adam/DolDoc/DocLink.CPP,AD"$ search string. * $$DA fixed width string: or permanently shortens. * Editor overstrike mode at cmd line with menu macro? Probably, many other overstrike issues. @@ -20,8 +19,6 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * $LK,"FL:::/Adam/Gr/SpriteEd.CPP,789"$ Resize bitmap? -* Cannot include ':' in $LK,"Document Links",A="FF:::/Adam/DolDoc/DocLink.CPP,AD"$ search string. - * $LK,"DOCEF_REMALLOC_DATA",A="FF:::/Adam/DolDoc/DocChar.CPP,DOCEF_REMALLOC_DATA"$ HexEdit Remalloc. * $LK,"DOCF_DBL_DOLLARS",A="MN:DOCF_DBL_DOLLARS"$ in $LK,"Reindention",A="MN:EdCodeTools2"$. @@ -52,7 +49,7 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * Use pen_width and pen_height when clipping with pen_width>1. -* $LK,"~/Downloads/Games/Rocks.CPP"$. +* $LK,"~/Sup1/Sup1Games/Rocks.CPP"$. * Asm LIST NOLIST bugs. @@ -69,6 +66,8 @@ $WW,1$$FG,5$$TX+CX,"TODO"$$FG$ * $LK,"GrLineFat3",A="MN:GrLineFat3"$() needs a little work. +* $LK,"GrFillTri0",A="MN:GrFillTri0"$() with both $LK,"GrHLine",A="MN:GrHLine"$() and $LK,"GrVLine",A="MN:GrVLine"$() don't match in $LK,"::/Demo/Games/CastleFrankenstein.CPP"$ causing wall spot pixels. + $FG,5$$TX+CX,"TODO? Meh"$$FG$ * Compiler: lock{} needs warn on invalid modes or something. @@ -153,7 +152,6 @@ $FG,5$$TX+CX,"Bugs? Not really sure."$$FG$ * 1/1/2015 Bug messing-up keyboard, like no CTRL key. Was working on Sprites. * 4/13/14 Strut or RawHide crashed when $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$ was set during testsuite. Perhaps, floodfill? -* 3/19/14: RESET during RawHide. * $LK,"ChkDsk",A="MN:ChkDsk"$ alloc unalloced. I don't know if I fixed this. @@ -268,7 +266,7 @@ $FG,5$$TX+CX,"Committee Needed"$$FG$ * Note: We will never put multiple $LK,"Keyboard Tables",A="FI:::/Kernel/SerialDev/Keyboard.CPP"$. Each country must make their own version of TempleOS. The $LK,"Intel Factory ROM",A="FF:::/Doc/Demands.TXT,English"$ will have just English. Our $LK,"Charter",A="FI:::/Doc/Charter.TXT"$ bans multiple country or architectures in the same version. -* 12 border chars in screen font codes 0x02-0x0D. $LK,"TextBorder",A="MN:TextBorder"$() $LK,"RawDr",A="MN:RawDr"$() LineFeed shows-up in $FG,2$$FG$ PersonalMenu. +* 12 border chars in screen font codes 0x02-0x0D. $LK,"TextBorder",A="MN:TextBorder"$() $LK,"RawDr",A="MN:RawDr"$() $LK,"::/Demo/Games/CharDemo.CPP"$. LineFeed shows-up in $FG,2$$FG$ PersonalMenu. * Super-simple high speed serial needs flow control. $FG,2$$FG$ and $FG,2$$FG$? @@ -410,10 +408,10 @@ New wineskins $TX,"Mark 2:22",HTML="http://www.biblegateway.com/verse/en/Mark $FG,5$$TX+CX,"Misc Notes"$$FG$ Intel CEO's name: Brian Krzanich >$FG,2$lspci -v$FG$ -Size:$TX,"17412 KB",D="DD_TEMPLEOSCD_K_SIZE"$ +Size:$TX,"17422 KB",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/Downloads/Blog/Bookmarks"$ +$TX,"My FireFox Bookmarks",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/Bookmarks"$ Machine $HC,"

\"\"
"$ Frosting $HC,"
\"\"
"$ Soap Carvings $HC,"
\"\"
"$ @@ -437,7 +435,6 @@ qFeDAsBDeDqCeF2G3sGGeF2sG3C2G3CBCeF $FG,5$$TX+CX,"Web Bookmarks"$$FG$ Cop tying shoe $HC,"
\"\"
"$ -$TX,"Good Time Bad Times Lyrics",HTML="https://www.google.com/#q=led+zep+good+times+bad+times+lyrics"$ $TX,"Unikernels",HTML="https://ma.ttias.be/what-is-a-unikernel"$ $TX,"Handford school",HTML="https:/pinterest.com/pin/255368241346360278"$ $TX,"Look at PCI interrupt routing.",HTML="http://forum.osdev.org/viewtopic.php?f=1&t=29558"$ @@ -445,8 +442,9 @@ $TX,"The sins of Newton",HTML="https://www.brainpickings.org/2012/01/04/isaac-ne $TX,"Stalin's Tanks",HTML="https://boardgamegeek.com/boardgame/5198/stalins-tanks"$ $TX,"Lamp shades",HTML="http://www.lampsplus.com/products/lamp-shades"$ $TX,"The Original Jewish Temple",HTML="http://www.jewishvirtuallibrary.org/jsource/Judaism/The_Temple.html"$ -$TX,"KingJamesBible with LineNums",HTML="http://www.templeos.org/files/NumBible.TXT"$ +$TX,"KingJamesBible with LineNums",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Blog/NumBible.TXT"$ $TX,"Higgs 5-Sigma Proof",HTML="http://understandinguncertainty.org/explaining-5-sigma-higgs-how-well-did-they-do"$ +$TX,"The Number Bleem",HTML="http://www.strangehorizons.com/2000/20001120/secret_number.shtml"$ $TX,"Dwight: Nerd torture",HTML="http://www.noob.us/humor/the-office-dwight-faces-nerd-torture-of-the-highest-form"$ $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"$ diff --git a/Demo/AcctExample/Registry.CPP b/Demo/AcctExample/Registry.CPP index 7108e08..cb69527 100644 --- a/Demo/AcctExample/Registry.CPP +++ b/Demo/AcctExample/Registry.CPP @@ -2,8 +2,8 @@ $TR-UL,"Adam"$ $ID,2$$TR,"SysMsgFlags"$ $ID,2$sys_msg_flags[0]=0xFF; $ID,-2$$TR,"SysRegVer"$ -$ID,2$registry_version=4.090; -$ID,-2$$ID,-2$$TR-C-UL,"TempleOS"$ +$ID,2$registry_version=4.100; +$ID,-2$$ID,-2$$TR-UL,"TempleOS"$ $ID,2$$TR,"TOS"$ $ID,2$I64 tos_code_walk_thru=105,tos_after_egypt_in_action=46; $ID,-2$$TR,"CircleTrace"$ @@ -13,37 +13,37 @@ $ID,2$F64 best_score=9999.0000; $ID,-2$$TR,"Staff"$ $ID,2$#define PERSONAL_INITIALS "TAD" #define MACHINE_CFG 0 -$ID,-2$$TR,"BlackDiamond"$ -$ID,2$I64 best_score=9; -$ID,-2$$TR,"DunGen"$ -$ID,2$F64 best_score=20.5295; -$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.4090; -$ID,-2$$TR,"TimeOut"$ -$ID,2$I64 best_score=22202; -$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,"CastleFrankenstein"$ +$ID,2$F64 best_score=33.8405; +$ID,-2$$TR,"ZoneOut"$ +$ID,2$F64 best_score=8.1373; +$ID,-2$$TR,"DunGen"$ +$ID,2$F64 best_score=20.5295; +$ID,-2$$TR,"Wenceslas"$ +$ID,2$F64 best_score=43.9944; +$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,"Varoom"$ +$ID,2$F64 best_score=46.2643; +$ID,-2$$TR,"TimeOut"$ +$ID,2$I64 best_score=22202; +$ID,-2$$TR,"BlackDiamond"$ +$ID,2$I64 best_score=9; +$ID,-2$$TR,"BomberGolf"$ +$ID,2$I64 best_score=175; $ID,-2$$TR,"XCaliber"$ $ID,2$I64 best_score=248; I64 msg_flags=1; -$ID,-2$$TR,"Wenceslas"$ -$ID,2$F64 best_score=43.9944; -$ID,-2$$TR,"BomberGolf"$ -$ID,2$I64 best_score=175; -$ID,-2$$TR,"CastleFrankenstein"$ -$ID,2$F64 best_score=33.8405; $ID,-2$$TR,"EagleDive"$ -$ID,2$I64 best_score=8; +$ID,2$F64 best_score=147.6932; $ID,-2$$ID,-2$$TR,"DemoCompany"$ $ID,2$ $TR,"Game1"$ -$ID,2$F64 best_score=168.87967; +$ID,2$F64 best_score=388.68032; $TR,"SimpleVal"$ -$ID,2$1330; +$ID,2$1332; $ID,-2$$ID,-2$ \ No newline at end of file diff --git a/Demo/AcctExample/TOSBlog.CPP b/Demo/AcctExample/TOSBlog.CPP index 43b7901..6cd0e6b 100644 --- a/Demo/AcctExample/TOSBlog.CPP +++ b/Demo/AcctExample/TOSBlog.CPP @@ -75,7 +75,7 @@ U0 BlogScreenShot() gr.fp_draw_input_ptr=NULL; WinMgrSync(2); dc1=DCScreenCapture; - dc2=DCExtract(dc1,0,FONT_HEIGHT,GR_WIDTH-1,GR_HEIGHT-1); + dc2=DCExt(dc1,0,FONT_HEIGHT,GR_WIDTH-1,GR_HEIGHT-1); BlogDCImgWrite(dc2); gr.fp_draw_input_ptr=old_fp_draw_input_ptr; DCDel(dc1); @@ -89,7 +89,7 @@ public U0 MakeWebSitePartial() MkDir("D:/Wb/Home"); MkDir("D:/Wb/Home/Web"); MkDir("D:/Wb/Home/Web/TAD"); - MkDir("D:/Wb/Home/Web/TAD/Blog"); + MkDir("D:/Wb/Home/Web/TAD/BlogDir"); FreshenWebDir("/Home/Web"); FreshenWebDir("/Home/Web/" PERSONAL_INITIALS); @@ -109,6 +109,7 @@ public U0 Blog() Msg(MSG_KEY_DOWN_UP,0,SC_F6|SCF_ALT); Msg(MSG_KEY_DOWN_UP,'\n',0); if (Ed(BlogLocalFile,EDF_WAS_WRITE)) { + DocOpt(BlogLocalFile,"-r"); Copy(BlogLocalFile,"::" DAILY_BASE ".TXT.Z"); Copy(BlogLocalFile,"D:" DAILY_BASE ".TXT.Z"); Copy(BlogLocalFile,"D:/Wb" DAILY_BASE ".TXT.Z"); diff --git a/Demo/AcctExample/TOSCfg.CPP b/Demo/AcctExample/TOSCfg.CPP index 7d6abc1..a6b0f17 100644 --- a/Demo/AcctExample/TOSCfg.CPP +++ b/Demo/AcctExample/TOSCfg.CPP @@ -7,7 +7,7 @@ RegSetDftEntry("TempleOS/Staff", RegExeBranch("TempleOS/Staff"); #define PERSONAL_WEB "http:/" "/www.templeos.org/Wb" -#define BLOG_BASE "/Home/Web/" PERSONAL_INITIALS "/Blog" +#define BLOG_BASE "/Home/Web/" PERSONAL_INITIALS "/BlogDir" #define DAILY_BASE "/Home/Web/" PERSONAL_INITIALS "/DailyBlog" #define BLOG_LOCAL_BASE "::" BLOG_BASE #define BLOG_WEB_BASE PERSONAL_WEB BLOG_BASE diff --git a/Demo/AcctExample/TOSDistro.CPP b/Demo/AcctExample/TOSDistro.CPP index 001647c..c58dbe7 100644 --- a/Demo/AcctExample/TOSDistro.CPP +++ b/Demo/AcctExample/TOSDistro.CPP @@ -51,13 +51,13 @@ public U0 CopySongs(U8 threshold='7') { CDoc *doc; CDocEntry *doc_e; - CDirEntry *tempde=FilesFind("/Home/Downloads/Psalmody/*.CPP*", + CDirEntry *tempde=FilesFind("/Home/Sup1/Sup1Psalmody/*.CPP*", FUF_CLUSTER_ORDER),*tempde1=tempde; DelTree("/Apps/Psalmody/Examples"); MkDir("/Apps/Psalmody/Examples"); while (tempde) { doc=DocRead(tempde->full_name); - doc_e=doc->root.next; + doc_e=doc->head.next; if (doc_e->type_u8==DOCT_TEXT && doc_e->tag[2]>=threshold) Copy(tempde->full_name,"/Apps/Psalmody/Examples"); DocDel(doc); @@ -70,7 +70,7 @@ U0 DistroPrep() { Del("/Home/Demo*"); DelTree("/Home/*Temp.TXT.Z"); - if (FileFind("/Home/Downloads/Psalmody")) + if (FileFind("/Home/Sup1/Sup1Psalmody")) CopySongs; DelTree("/Temp"); @@ -84,17 +84,18 @@ U0 DistroPrep() CopyTree("/Home","/Demo/AcctExample"); DelTree("/Demo/AcctExample/Budget"); DelTree("/Demo/AcctExample/Private"); - DelTree("/Demo/AcctExample/Downloads"); + DelTree("/Demo/AcctExample/Sup1"); DelTree("/Demo/AcctExample/Web"); Del("/Demo/AcctExample/Test*"); + Copy("/Home/Web/index.TXT.Z", + "/Demo/ToHtmlToTXTDemo/DemoInPage.TXT.Z"); + if (FileFind("/Home/Sup1/Sup1Utils/SortHeaders.CPP.Z")) + ExeFile("/Home/Sup1/Sup1Utils/SortHeaders.CPP.Z"); - if (FileFind("/Home/Downloads/Utils/SortHeaders.CPP.Z")) - ExeFile("/Home/Downloads/Utils/SortHeaders.CPP.Z"); + if (FileFind("/Home/Sup1/Sup1Blog/YouTube.TXT.Z")) + Sort("/Home/Sup1/Sup1Blog/YouTube.TXT.Z",,2); - if (FileFind("/Home/Downloads/Blog/YouTube.TXT.Z")) - Sort("/Home/Downloads/Blog/YouTube.TXT.Z",,2); - - //Once in a while, do $LK,"~/Downloads/Utils/DblSpaceScan.CPP"$. + //Once in a while, do $LK,"~/Sup1/Sup1Utils/DblSpaceScan.CPP"$. CursorRem("/*"); DelTree("/Demo/*.BI*"); @@ -123,11 +124,11 @@ U0 MakeBootRescueDrvFile() Copy("C:/Kernel/*.HPP*", "A:/Kernel"); CopyTree("C:/Kernel/BlkDev", "A:/Kernel/BlkDev"); - Copy("C:/Home/Downloads/Distro/DbgStartOS.CPP.Z","A:/StartOS.CPP.Z"); + Copy("C:/Home/Sup1/Sup1Distro/DbgStartOS.CPP.Z","A:/StartOS.CPP.Z"); MkDir("A:/Adam"); - Copy("C:/Home/Downloads/Distro/DbgMakeAdam.CPP.Z","A:/Adam/MakeAdam.CPP.Z"); - Copy("C:/Home/Downloads/Distro/DbgMount.CPP.Z","A:/Adam"); + Copy("C:/Home/Sup1/Sup1Distro/DbgMakeAdam.CPP.Z","A:/Adam/MakeAdam.CPP.Z"); + Copy("C:/Home/Sup1/Sup1Distro/DbgMount.CPP.Z","A:/Adam"); Copy("C:/Adam/AExts.CPP.Z", "A:/Adam"); Copy("C:/Adam/AMath.CPP.Z", "A:/Adam"); Copy("C:/Adam/Training.CPP.Z","A:/Adam"); @@ -221,11 +222,7 @@ I64 MakeLineRepFile() } U0 StaffDistroPrep() -{/*This is the TempleOS internal distro. Only run this on a -virtual machine, not bare metal hardware because it's settings could cause -problems. The hard drive must be partitioned. Install Std Distro, then -install this on top. -*/ +{ Drv('C'); DistroPrep; Auto(TOS_DVD_CFG); @@ -241,25 +238,13 @@ U0 MakeStaffDistro() ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSSTAFF_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - T.S. Company Internal Distro (%0.1f MB)", 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } U0 DbgDistroPrep() -{/*This is a debug distro. The CD/DVD bootloader uses BIOS INT 0x13 0x42 to -load Kernel.BIN.C which has been modified to also hold a small RAM drive -(Drive A) that fits in the low 640k. The bootloader starts in real mode -and the kernel changes to long, 64-bit mode. It loads the 64-bit compiler -and assembler, compiles some, but not all, of the normal start-up scripts -and drops you off at the $LK,"Dbg",A="MN:Dbg"$ command-line where you can JIT compile, -use $LK,"EdLite",A="MN:EdLite"$ on RAM files, and use many of the other normal Kernel commands. -I could not fit all the normal start-up scripts into the small RAM drive, -so you do not have the window manager or normal document framework. You -should have many Gig of RAM to play with with RAM Drive B, a high memory -RAM drive, but you have only those few files. When I generate this distro, -I call $LK,"MakeBootDrvFile",A="FF:::/Demo/AcctExample/TOSDistro.CPP,MakeBootRescueDrvFile"$. -*/ +{ Drv('C'); DistroPrep; MakeBootRescueDrvFile; @@ -268,8 +253,12 @@ I call $LK,"MakeBootDrvFile",A="FF:::/Demo/AcctExample/TOSDistro.CPP,MakeBootRes Fmt('B',,FALSE,FSt_REDSEA); DelTree(TOS_DISTRO_DIR); CopyTree("C:/",TOS_DISTRO_DIR "/"); + DelTree(TOS_DISTRO_DIR "/Home"); + MkDir(TOS_DISTRO_DIR "/Home"); + CopyTree("C:/Home/Sup1",TOS_DISTRO_DIR "/Home/Sup1"); Del(TOS_DISTRO_DIR "/" KERNEL_BIN_C); - Del("C:" CFG_BOOT_RESCUE_DRV_FILE); + Del(TOS_DISTRO_DIR BOOT_DIR "/OldMBR.BIN.C"); + Del(TOS_DISTRO_DIR BOOT_DIR "/BootMHD2.BIN.C"); } U0 MakeDbgDistro() { @@ -277,7 +266,7 @@ U0 MakeDbgDistro() ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSDBG_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.1f MB)", 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } @@ -303,7 +292,7 @@ U0 MakeStdDistro() ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSCD_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } @@ -312,46 +301,20 @@ U0 MakeStdRedSeaDistro() StdDistroPrep; RedSeaISO(TOS_ISO_C_NAME,TOS_DISTRO_DIR,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSCD_RS_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)", 0.1*(10*Size(TOS_ISO_C_NAME,"+s")/1024/1024)); Drv('C'); } -U0 LiteDistroPrep() -{/*Missing: Dictionary, Bible and TOSZ Utility.Still 100% OpenSource. -Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, -Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, -Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, -FileManager, WindowManager, PCSpeaker, Apps, Games, God-Oracle-App, Hymns, -Demos, Documentation. -*/ +U0 UltraDistroPrep() +{ StdDistroPrep; DelTree(TOS_DISTRO_DIR "/Linux"); Del(TOS_DISTRO_DIR "/" KERNEL_BIN_C); Del(TOS_DISTRO_DIR "/Adam/AutoComplete/ACDefs.DAT*"); Del(TOS_DISTRO_DIR "/Misc/PCIDevices.TXT.Z"); Del(TOS_DISTRO_DIR "/Misc/Bible.TXT.Z"); -} -U0 MakeLiteDistro() -{ - LiteDistroPrep; - ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, - TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); - DefinePrint("DD_TEMPLEOSLITE_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Lite Distro (%0.1f MB)", - 0.1*(10*Size(TOS_ISO_NAME,"+s")/1024/1024)); - Drv('C'); -} -U0 UltraDistroPrep() -{/* -Missing: Apps, Demos, Dictionary, Bible and TOSZ Utility. Still 100%OpenSource. -Includes: x86_64 64BitMultiCoredKernel, 64BitCompiler, Assembler, -Unassembler, Debugger, Editor, VGAGraphics, Tools, BootLoaders, -Keyboard&Mouse, HardDrives, FAT32, Partitioner, CD/DVD, ISO9660FileCreator, -FileManager, WindowManager, PCSpeaker, Documentation. -*/ - LiteDistroPrep; DelTree(TOS_DISTRO_DIR "/Apps"); MkDir(TOS_DISTRO_DIR "/Apps"); DelTree(TOS_DISTRO_DIR "/Demo"); @@ -360,7 +323,7 @@ FileManager, WindowManager, PCSpeaker, Documentation. Del(TOS_DISTRO_DIR "/Adam/AutoComplete/ACWords.DAT*"); Del(TOS_DISTRO_DIR "/Adam/God/Vocab.TXT.Z"); Del(TOS_DISTRO_DIR "/Misc/OSTestSuite.CPP.Z"); - Copy("C:/Home/Downloads/Distro/UltraMenu.TXT.Z", + Copy("C:/Home/Sup1/Sup1Distro/UltraMenu.TXT.Z", TOS_DISTRO_DIR "/PersonalMenu.TXT.Z"); Copy("C:/Demo/Games/EagleDive.CPP.Z", TOS_DISTRO_DIR "/Misc"); @@ -371,7 +334,7 @@ U0 MakeUltraDistro() ISO9660ISO(TOS_ISO_NAME,TOS_DISTRO_DIR "/*",, TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSULTRA_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)", 0.01*(100*Size(TOS_ISO_NAME,"+s")/1024/1024)); Drv('C'); } @@ -380,7 +343,16 @@ U0 MakeUltraRedSeaDistro() UltraDistroPrep; RedSeaISO(TOS_ISO_C_NAME,TOS_DISTRO_DIR,TOS_DISTRO_DIR BOOT_DIR_KERNEL_BIN_C); DefinePrint("DD_TEMPLEOSULTRA_RS_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)", + 0.01*(100*Size(TOS_ISO_C_NAME,"+s")/1024/1024)); + Drv('C'); +} + +U0 MakeSup1ISO() +{ + RedSeaISO(TOS_ISO_C_NAME,"::/Home/Sup1"); + DefinePrint("DD_TEMPLEOS_SUP1_SIZE", + "Supplemental ISO #1 (%0.2f MB)", 0.01*(100*Size(TOS_ISO_C_NAME,"+s")/1024/1024)); Drv('C'); } @@ -389,28 +361,40 @@ U0 UpdateISODocDefines() { try { DefinePrint("DD_TEMPLEOSCD_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - Standard Distro (%0.1f MB)", 0.1*(10*Size("D:/Wb/TempleOSCD.ISO","+s")/1024/1024)); DefinePrint("DD_TEMPLEOSCD_K_SIZE", "%d KB",Size("D:/Wb/TempleOSCD.ISO","+s")/1024); - DefinePrint("DD_TEMPLEOSCD_RS_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)", - 0.1*(10*Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024/1024)); - DefinePrint("DD_TEMPLEOSCD_RS_K_SIZE", - "%d KB",Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024); +// DefinePrint("DD_TEMPLEOSCD_RS_SIZE", +// "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - Standard RedSea Distro (%0.1f MB)", +// 0.1*(10*Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024/1024)); +// DefinePrint("DD_TEMPLEOSCD_RS_K_SIZE", +// "%d KB",Size("D:/Wb/TempleOSCDRS.ISO","+s")/1024); DefinePrint("DD_TEMPLEOSULTRA_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)", + "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - UltraSmall Distro (%0.2f MB)", 0.01*(100*Size("D:/Wb/TempleOSUltra.ISO","+s")/1024/1024)); DefinePrint("DD_TEMPLEOSULTRA_K_SIZE", "%d KB",Size("D:/Wb/TempleOSUltra.ISO","+s")/1024); - DefinePrint("DD_TEMPLEOSULTRA_RS_SIZE", - "Download $TX,"TempleOS V4.09",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)", - 0.01*(100*Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024/1024)); - DefinePrint("DD_TEMPLEOSULTRA_RS_K_SIZE", - "%d KB",Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024); +// DefinePrint("DD_TEMPLEOSULTRA_RS_SIZE", +// "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - UltraSmall RedSea Distro (%0.2f MB)", +// 0.01*(100*Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024/1024)); +// DefinePrint("DD_TEMPLEOSULTRA_RS_K_SIZE", +// "%d KB",Size("D:/Wb/TempleOSUltraRS.ISO","+s")/1024); + +// DefinePrint("DD_TEMPLEOSDBG_SIZE", +// "Download $TX,"TempleOS V4.10",D="DD_OS_NAME_VERSION"$ - Debug Distro (%0.2f MB)", +// 0.01*(100*Size("D:/Wb/TempleOSDbg.ISO","+s")/1024/1024)); +// DefinePrint("DD_TEMPLEOSDBG_K_SIZE", +// "%d KB",Size("D:/Wb/TempleOSDbg.ISO","+s")/1024); + + DefinePrint("DD_TEMPLEOS_SUP1_SIZE", + "Supplemental ISO #1 (%0.2f MB)", + 0.01*(100*Size("D:/Wb/TempleOSSup1.ISO","+s")/1024/1024)); + DefinePrint("DD_TEMPLEOS_SUP1_K_SIZE", + "%d KB",Size("D:/Wb/TempleOSSup1.ISO","+s")/1024); } catch Fs->catch_except=TRUE; } @@ -420,7 +404,7 @@ public U0 MakeDistrosAndBackUp() { SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ progress4=*progress4_desc=0; - progress4_max=19; + progress4_max=18; AutoComplete; WinBorder; WinMax; @@ -436,17 +420,25 @@ public U0 MakeDistrosAndBackUp() DocClear; Move(TOS_ISO_NAME,"D:/Wb/TempleOSCD.ISO"); progress4++; - MakeStdRedSeaDistro; progress4++; - DocClear; - Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSCDRS.ISO"); progress4++; +// MakeStdRedSeaDistro; progress4++; +// DocClear; +// Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSCDRS.ISO"); progress4++; MakeUltraDistro; progress4++; DocClear; Move(TOS_ISO_NAME,"D:/Wb/TempleOSUltra.ISO"); progress4++; - MakeUltraRedSeaDistro; progress4++; +// MakeUltraRedSeaDistro; progress4++; +// DocClear; +// Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSUltraRS.ISO"); progress4++; + + MakeSup1ISO; progress4++; DocClear; - Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSUltraRS.ISO"); progress4++; + Move(TOS_ISO_C_NAME,"D:/Wb/TempleOSSup1.ISO"); progress4++; + +// MakeStaffDistro; progress4++; +// DocClear; +// Move(TOS_ISO_NAME,"D:/Wb/TempleOSDbg.ISO"); progress4++; MakeStaffDistro; progress4++; DocClear; @@ -475,9 +467,9 @@ public U0 MakeDistrosAndBackUp() public U0 PreBackUp() { - Copy("D:/Home/Downloads/Blog/Bookmarks.html","C:/Home/Downloads/Blog"); - Del("C:/Home/Downloads/Bin/*"); - Copy("D:/Home/Downloads/Bin/*","C:/Home/Downloads/Bin"); - Copy("D:/Home/Downloads/Bin/TempleBot","C:/Linux"); - Copy("D:/Home/Downloads/Bin/God*","C:/Linux"); + Copy("D:/Home/Sup1/Sup1Blog/Bookmarks.html","C:/Home/Sup1/Sup1Blog"); + Del("C:/Home/Sup1/Sup1Bin/*"); + Copy("D:/Home/Sup1/Sup1Bin/*","C:/Home/Sup1/Sup1Bin"); + Copy("D:/Home/Sup1/Sup1Bin/TempleBot","C:/Linux"); + Copy("D:/Home/Sup1/Sup1Bin/God*","C:/Linux"); } diff --git a/Demo/AcctExample/TOSHolySpirit.CPP b/Demo/AcctExample/TOSHolySpirit.CPP index 4f12e12..e8bf701 100644 --- a/Demo/AcctExample/TOSHolySpirit.CPP +++ b/Demo/AcctExample/TOSHolySpirit.CPP @@ -10,8 +10,8 @@ U0 BadCodeJump() U8 *st; while (tempde) { doc=DocRead(tempde->full_name); - tempde->user_data=doc->root.y; - cnt+=doc->root.y; + tempde->user_data=doc->head.y; + cnt+=doc->head.y; DocDel(doc); tempde=tempde->next; } @@ -34,7 +34,7 @@ U0 BadCodeJump() Free(st); } -U8 *WebBookMarks(U8 *filename="~/Downloads/Blog/Bookmarks.html") +U8 *WebBookMarks(U8 *filename="~/Sup1/Sup1Blog/Bookmarks.html") { U8 *st; CDocEntry *doc_e; @@ -42,7 +42,7 @@ U8 *WebBookMarks(U8 *filename="~/Downloads/Blog/Bookmarks.html") CCmpCtrl *cc=CmpCtrlNew(MStrPrint("#include \"%s\"",filename)); while (Lex(cc)) if (cc->token==TK_STR && *cc->cur_str(U32 *)=='http') { - DocPrint(doc,"$$MU-UL,\"%Q\",LE=0x%X$$\n",cc->cur_str,cc->cur_str); + DocPrint(doc,"$$MU-UL,\"%$$Q\",LE=0x%X$$\n",cc->cur_str,cc->cur_str); cc->cur_str=NULL; } CmpCtrlDel(cc); @@ -52,7 +52,7 @@ U8 *WebBookMarks(U8 *filename="~/Downloads/Blog/Bookmarks.html") else st=NULL; - doc_e=doc->root.next; + doc_e=doc->head.next; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_MENU_VAL) Free(doc_e->left_exp); @@ -63,7 +63,7 @@ U8 *WebBookMarks(U8 *filename="~/Downloads/Blog/Bookmarks.html") return st; } -U8 *YouTubeGet(U8 *filename="C:/Home/Downloads/Blog/YouTube.TXT.Z",U8 *needle) +U8 *YouTubeGet(U8 *filename="C:/Home/Sup1/Sup1Blog/YouTube.TXT.Z",U8 *needle) { I64 i=0,line=MIN_I64; CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT_TABS|DOCF_NO_CURSOR), @@ -100,7 +100,7 @@ U8 *YouTubeGet(U8 *filename="C:/Home/Downloads/Blog/YouTube.TXT.Z",U8 *needle) return res; } -U0 YouTubeAdd(U8 *filename="C:/Home/Downloads/Blog/YouTube.TXT.Z", +U0 YouTubeAdd(U8 *filename="C:/Home/Sup1/Sup1Blog/YouTube.TXT.Z", U8 *title,U8 *code) { CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT_TABS|DOCF_NO_CURSOR); @@ -117,9 +117,10 @@ U0 YouTubeAdd(U8 *filename="C:/Home/Downloads/Blog/YouTube.TXT.Z", class CTopMoviesForm { U8 tag[STR_LEN]; - U8 special[STR_LEN]; - I64 timestamp; - I64 cert fmtstr "$$DA-TRM,LEN=2,A=\"Movie #1-100:%02d\"$$\n"; + U8 special[STR_LEN] fmtstr "$$DA-P," + "A=\"Movie #1-100 (2 Decimal Digits from Hex):%s\"$$\n"; + I64 timestamp fmtstr "$$DA,A=\"TimeStamp :%d\"$$\n"; + I64 cert; I64 min; I64 sec; }; @@ -127,9 +128,10 @@ class CTopMoviesForm class CMetallicaForm { U8 tag[STR_LEN]; - U8 special[STR_LEN]; - I64 timestamp; - I64 cert fmtstr "$$DA-TRM,LEN=2,A=\"Song #1-99:%02d\"$$\n"; + U8 special[STR_LEN] fmtstr "$$DA-P," + "A=\"Song #1-99 (2 Decimal Digits from Hex):%s\"$$\n"; + I64 timestamp fmtstr "$$DA,A=\"TimeStamp :%d\"$$\n"; + I64 cert; I64 min; I64 sec; }; @@ -215,7 +217,7 @@ class CRandCertForm I64 sec; }; -class CRandHexBeacon5Form +class CRandHex5BeaconForm { U8 tag[STR_LEN]; U8 special[STR_LEN] fmtstr "$$DA-P-TRM,LEN=5," @@ -226,7 +228,7 @@ class CRandHexBeacon5Form I64 sec; }; -class CRandHexBeacon8Form +class CRandHex8BeaconForm { U8 tag[STR_LEN]; U8 special[STR_LEN] fmtstr "$$DA-P-TRM,LEN=8," @@ -237,6 +239,26 @@ class CRandHexBeacon8Form I64 sec; }; +class CRandExtDec5Form +{ + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,A=\"5 Decimal Digits from Hex:%s\"$$\n"; + I64 timestamp; + I64 cert; + I64 min; + I64 sec; +}; + +class CRandExtDec5BeaconForm +{ + U8 tag[STR_LEN]; + U8 special[STR_LEN] fmtstr "$$DA-P,A=\"5 Decimal Digits from Hex:%s\"$$\n"; + I64 timestamp fmtstr "$$DA,A=\"TimeStamp:%d\"$$\n"; + I64 cert; + I64 min; + I64 sec; +}; + U8 *URLPercentSpaces(U8 *src) { U8 buf[2048],*dst=buf; @@ -268,6 +290,20 @@ U8 *URLPlusSpaces(U8 *src) return StrNew(buf); } +I64 ExtDecFromHex(U8 *st,I64 digits) +{ + I64 res=0,ch; + do { + if (!(ch=*st++)) + throw; + if ('0'<=ch<='9') { + res=10*res+ch-'0'; + digits--; + } + } while (digits); + return res; +} + U8 *RandVideoRead(U8 *filename,I64 line) { U8 *res=NULL; @@ -295,21 +331,23 @@ U8 *RandVideoWrite(U8 *filename,I64 line,U8 *st) return res; } -U0 RandVideo(U8 *title,U8 *webpage,CTopMoviesForm *url,U8 *filename) +U0 RandVideo(U8 *title,U8 *webpage,CTopMoviesForm *url,I64 digits,U8 *filename) { U8 *st,*st2; - if (st=RandVideoRead(filename,url->cert*2)) { + I64 i=ExtDecFromHex(url->special,digits); + if (st=RandVideoRead(filename,i*2)) { StrCpy(url->tag,st); Free(st); - if (!(st=RandVideoRead(filename,url->cert*2+1))||!*st) { + if (!(st=RandVideoRead(filename,i*2+1))||!*st) { Free(st); + *url->special=0; if (DocForm(url(CYouTubeForm *)) && *url->special) { if (url->min || url->sec) st=MStrPrint("%s&hl=enUS&start=%d", url->special,url->min*60+url->sec); else st=StrNew(url->special); - RandVideoWrite(filename,url->cert*2+1,st); + RandVideoWrite(filename,i*2+1,st); } else st=NULL; } @@ -342,23 +380,27 @@ U0 RandVideo(U8 *title,U8 *webpage,CTopMoviesForm *url,U8 *filename) } U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) -{ +{//Radix<0 means extract N dec digits from hex. CDoc *doc_out,*doc_in; CDocEntry *doc_e; I64 i,start; U8 *verse; if (*st && (doc_out=DocPut)) { - i=Str2I64(st,radix); + if (radix<0) + i=ExtDecFromHex(st,-radix); + else + i=Str2I64(st,radix); + if (radix<0) + DocPrint(doc_out,"'%s'-->(Taking first %d decimal digits)",st,-radix); + else if (radix==16) + DocPrint(doc_out,"0x%s-->",st); if (modulo) { - if (radix==16) - DocPrint(doc_out,"0x%s-->",st); DocPrint(doc_out,"(%d remainder when divided by %d)", i,ST_BIBLE_LINES-(num_lines-1)); start=i%(ST_BIBLE_LINES-(num_lines-1)); } else { - if (radix==16) - DocPrint(doc_out,"0x%s-->",st); - DocPrint(doc_out,"%d",i); + if (radix>=0 || plus_one) + DocPrint(doc_out,"%d",i); start=i; } if (plus_one) { @@ -368,13 +410,13 @@ U0 MyBibleLines(U8 *st,I64 num_lines,I64 radix,Bool modulo,Bool plus_one) DocPrint(doc_out,"-->Line:%d\n",start); verse=BibleLine2Verse(start); - DocPrint(doc_out,"$TX,"KingJamesBible",HTML="http://www.templeos.org/files/NumBible.TXT"$ (%s)\n\nGod says...\n$$RED$$",verse); + 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); doc_in=DocNew; - BibleLines(doc_in,start,num_lines); + BibleLines(doc_in,start,num_lines,"::/Home/Sup1/Sup1Blog/NumBible.TXT"); while (TRUE) {//Del leading blanks - doc_e=doc_in->root.next; + doc_e=doc_in->head.next; if (doc_e==doc_in) break; else { @@ -453,7 +495,7 @@ public U0 GodBooksPassage(U8 *files_find_mask,I64 len=512, DirTreeDel(tempde1); } -#define NIST_TIME_OFFSET (-7923-local_time_offset/CDATE_FREQ) +#define NIST_TIME_OFFSET (-7976-local_time_offset/CDATE_FREQ) #define NIST_TIME_TO_SWITCH 3 public U0 NISTSync() @@ -471,6 +513,19 @@ public U0 NISTSync() } } +U0 NISTBeaconURL(I64 timestamp) +{ + U8 *tag; + CDateStruct ds; + CDate dt=(timestamp-NIST_TIME_OFFSET)*CDATE_FREQ+Str2Date("1/1/1970"); + Date2Struct(&ds,dt+local_time_offset); + "$$TX,\"NIST Beacon Date:%D Time:%02d:%02d Unix TimeStamp:%u\"," + "HTML=\"https://beacon.nist.gov/home\"$$\n",dt,ds.hour,ds.min,timestamp; + tag=MStrPrint("https:/beacon.nist.gov/rest/record/%d",timestamp); + "$$TX,\"NIST Beacon Record:%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + Free(tag); +} + U0 InsMyURL() { U8 *tag,*st,*st2; @@ -478,211 +533,233 @@ U0 InsMyURL() url->timestamp= FloorI64((Now-Str2Date("1/1/1970"))/CDATE_FREQ+NIST_TIME_OFFSET- NIST_TIME_TO_SWITCH,60); - switch (PopUpPickLst("NISTBeacon5Bible\0NISTBeacon8Passage\0" - "BibleGatewaySearch\0BibleGatewayVerse\0" - "YouTube\0Imgur\0Wikipedia\0RandomNumbers.info\0" - "Random.org\0PassWord\0VirtualNotary\0ANU_NIST\0HotBits\0" - "GenerateData\0WebBookMark\0Roulette\0Movie\0Metallica\0")) { - case: - if (DocForm(url(CRandHexBeacon5Form *))) { - "$$TX,\"Guidelines for Talking with God.\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\t"; - "$$TX,\"How this random Bible passage was chosen.\"," - "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/NISTPassage.html\"$$\n"; - tag=MStrPrint("https:/beacon.nist.gov/rest/record/%d",url->timestamp); - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - Free(tag); - MyBibleLines(url->special,20,16,TRUE,TRUE); - } - break; - case: - if (DocForm(url(CRandHexBeacon8Form *))) { - "$$TX,\"Guidelines for Talking with God.\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\t"; - "$$TX,\"How this random book pick was chosen.\"," - "HTML=\"http://www.templeos.org/Wb" - "/Home/Web/TAD/NISTPick001.html\"$$\n"; - tag=MStrPrint("https:/beacon.nist.gov/rest/record/%d",url->timestamp); - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - Free(tag); - GodBooksPassage("C:/Home/Downloads/Text/*",, - Str2I64(url->special,16),GBP_MEDIUM); - } - break; - case: - if (DocForm(url(CWebBibleForm *))) { - tag=url->special; - st2=URLPercentSpaces(url->special); - st=MStrPrint( - "http://www.biblegateway.com/passage/?search=%s&version=NIV",st2); - Free(st2); - if (*url->tag) - tag=url->tag; - "$$TX,\"%Q\",HTML=\"%Q\"$$",tag,st; - Free(st); - } - break; - case: - if (DocForm(url(CWebBibleForm *))) { - tag=url->special; - st2=URLPercentSpaces(url->special); - st=MStrPrint( - "http://www.biblegateway.com/verse/en/%s",st2); - Free(st2); - if (*url->tag) - tag=url->tag; - "$$TX,\"%Q\",HTML=\"%Q\"$$",tag,st; - Free(st); - } - break; - case: - if (DocForm(url(CYouTubeForm *))) { - if (*url->special==CH_SPACE) - st2=YouTubeGet(,url->tag); - else - st2=StrNew(url->special); - if (st2 && *st2!=CH_SPACE) { - if (url->min || url->sec) - st=MStrPrint("%s&hl=enUS&start=%d",st2,url->min*60+url->sec); - else - st=StrNew(st2); - if (*url->special!=CH_SPACE && *url->tag) - YouTubeAdd(,url->tag,st); - "$$HC,\"" - "\"$$\n",st,st; - Free(st); - Free(st2); + try { + switch (PopUpPickLst("NISTExtDec5Bible\0NISTHex5Bible\0NISTHex8Passage\0" + "BibleGatewaySearch\0BibleGatewayVerse\0" + "YouTube\0Imgur\0Wikipedia\0ExtDec5Bible\0Random.org\0" + "RandomNumbers.info\0PassWord\0VirtualNotary\0ANU_NIST\0HotBits\0" + "GenerateData\0WebBookMark\0Roulette\0NISTMovie\0NISTMetallica\0")) { + case: + if (DocForm(url(CRandExtDec5BeaconForm *))) { + "$$TX,\"Guidelines for Talking with God.\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\t"; + NISTBeaconURL(url->timestamp); + MyBibleLines(url->special,20,-5,FALSE,FALSE); } - } - break; - case: - if (DocForm(url(CImgurForm *))) { - "$$HC,\"
\\\"\\\"
\"$$\n", - url->special,url->min,url->sec; - } - break; - case: - if (DocForm(url(CWikipediaForm *))) { - tag=url->special; - st=MStrPrint("http://en.wikipedia.org/wiki/%s",url->special); - if (*url->tag) - tag=url->tag; - "$$TX,\"%Q\",HTML=\"%Q\"$$",tag,st; - Free(st); - } - break; - case: - if (DocForm(url(CRandDecForm *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="http://www.randomnumbers.info"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - MyBibleLines(url->special,20,10,FALSE,TRUE); - } - break; - case: - if (DocForm(url(CRandDecForm *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="http://www.random.org"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - MyBibleLines(url->special,20,10,FALSE,FALSE); - } - break; - case: - if (DocForm(url(CRandDecForm *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="https://passed.pw"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - MyBibleLines(url->special,20,10,FALSE,FALSE); - } - break; - case: - if (DocForm(url(CRandCertForm *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="http://virtual-notary.org"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - tag="Here is the certificate"; - st=MStrPrint("http://www.templeos.org/Certs/virtual-notary-cert" - "-randomnum-%d.p12",url->cert); - "\n$$TX,\"%Q: %d\",HTML=\"%Q\"$$.\n",tag,url->cert,st; - Free(st); - MyBibleLines(url->special,20,10,FALSE,FALSE); - } - break; - case: - if (DocForm(url(CRandHex5Form *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="http://qrng.anu.edu.au/NIST.php"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - MyBibleLines(url->special,20,16,TRUE,TRUE); - } - break; - case: - if (DocForm(url(CRandHex5Form *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="https://www.fourmilab.ch/hotbits/secure_generate.html"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - MyBibleLines(url->special,20,16,TRUE,TRUE); - } - break; - case: - if (DocForm(url(CRandDecForm *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="http://www.generatedata.com"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - MyBibleLines(url->special,20,10,FALSE,FALSE); - } - break; - case: - if (DocForm(url(CWebBookMarkForm *))) { - tag=st=WebBookMarks; - if (*url->tag) - tag=url->tag; - "$$TX,\"%Q\",HTML=\"%Q\"$$",tag,st; - Free(st); - } - break; - case: - if (DocForm(url(CRandDecForm *))) { - "$$TX,\"Guidelines for Talking with God\"," - "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; - tag="https://www.dublinbet.com"; - "$$TX,\"%Q\",HTML=\"%Q\"$$\n",tag,tag; - MyBibleLines(url->special,20,10,FALSE,FALSE); - } - break; - case: - if (DocForm(url(CTopMoviesForm *))) - RandVideo("Top 100 Movies","http://www.afi.com/100years/movies10.aspx", - url,"C:/Home/Downloads/Blog/Movies.TXT.Z"); - break; - case: - if (DocForm(url(CMetallicaForm *))) - RandVideo("Metallica Song", - "http://home.hccnet.nl/a.r.adams/lyrics/metallica/songindex.html", - url,"C:/Home/Downloads/Blog/Metallica.TXT.Z"); - break; + break; + case: + if (DocForm(url(CRandHex5BeaconForm *))) { + "$$TX,\"Guidelines for Talking with God.\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\t"; + "$$TX,\"How this random Bible passage was chosen.\"," + "HTML=\"http://www.templeos.org/Wb" + "/Home/Web/TAD/NISTPassage.html\"$$\n"; + NISTBeaconURL(url->timestamp); + MyBibleLines(url->special,20,16,TRUE,TRUE); + } + break; + case: + if (DocForm(url(CRandHex8BeaconForm *))) { + "$$TX,\"Guidelines for Talking with God.\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\t"; + "$$TX,\"How this random book pick was chosen.\"," + "HTML=\"http://www.templeos.org/Wb" + "/Home/Web/TAD/NISTPick001.html\"$$\n"; + NISTBeaconURL(url->timestamp); + GodBooksPassage("C:/Home/Sup1/Sup1Texts/*",, + Str2I64(url->special,16),GBP_MEDIUM); + } + break; + case: + if (DocForm(url(CWebBibleForm *))) { + tag=url->special; + st2=URLPercentSpaces(url->special); + st=MStrPrint("http://www.biblegateway.com/passage/" + "?search=%s&version=NIV",st2); + Free(st2); + if (*url->tag) + tag=url->tag; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$",tag,st; + Free(st); + } + break; + case: + if (DocForm(url(CWebBibleForm *))) { + tag=url->special; + st2=URLPercentSpaces(url->special); + st=MStrPrint( + "http://www.biblegateway.com/verse/en/%s",st2); + Free(st2); + if (*url->tag) + tag=url->tag; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$",tag,st; + Free(st); + } + break; + case: + if (DocForm(url(CYouTubeForm *))) { + if (*url->special==CH_SPACE) + st2=YouTubeGet(,url->tag); + else + st2=StrNew(url->special); + if (st2 && *st2!=CH_SPACE) { + if (url->min || url->sec) + st=MStrPrint("%s&hl=enUS&start=%d",st2,url->min*60+url->sec); + else + st=StrNew(st2); + if (*url->special!=CH_SPACE && *url->tag) + YouTubeAdd(,url->tag,st); + "$$HC,\"" + "\"$$\n",st,st; + Free(st); + Free(st2); + } + } + break; + case: + if (DocForm(url(CImgurForm *))) { + "$$HC,\"
\"$$\n", + url->special,url->min,url->sec; + } + break; + case: + if (DocForm(url(CWikipediaForm *))) { + tag=url->special; + st=MStrPrint("http://en.wikipedia.org/wiki/%s",url->special); + if (*url->tag) + tag=url->tag; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$",tag,st; + Free(st); + } + break; + case: + if (DocForm(url(CRandExtDec5Form *))) { + "$$TX,\"Guidelines for Talking with God.\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + MyBibleLines(url->special,20,-5,FALSE,FALSE); + } + break; + case: + if (DocForm(url(CRandDecForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="http://www.random.org"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,10,FALSE,FALSE); + } + break; + case: + if (DocForm(url(CRandDecForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="http://www.randomnumbers.info"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,10,FALSE,TRUE); + } + break; + case: + if (DocForm(url(CRandDecForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="https://passed.pw"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,10,FALSE,FALSE); + } + break; + case: + if (DocForm(url(CRandCertForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="http://virtual-notary.org"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + tag="Here is the certificate"; + st=MStrPrint("http://www.templeos.org/Certs/virtual-notary-cert" + "-randomnum-%d.p12",url->cert); + "\n$$TX,\"%$$Q: %d\",HTML=\"%$$Q\"$$.\n",tag,url->cert,st; + Free(st); + MyBibleLines(url->special,20,10,FALSE,FALSE); + } + break; + case: + if (DocForm(url(CRandHex5Form *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="http://qrng.anu.edu.au/NIST.php"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,16,TRUE,TRUE); + } + break; + case: + if (DocForm(url(CRandHex5Form *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="https://www.fourmilab.ch/hotbits/secure_generate.html"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,16,TRUE,TRUE); + } + break; + case: + if (DocForm(url(CRandDecForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="http://www.generatedata.com"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,10,FALSE,FALSE); + } + break; + case: + if (DocForm(url(CWebBookMarkForm *))) { + tag=st=WebBookMarks; + if (*url->tag) + tag=url->tag; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$",tag,st; + Free(st); + } + break; + case: + if (DocForm(url(CRandDecForm *))) { + "$$TX,\"Guidelines for Talking with God\"," + "HTML=\"http://www.templeos.org/Wb/Adam/God/HSNotes.html\"$$\n"; + tag="https://www.dublinbet.com"; + "$$TX,\"%$$Q\",HTML=\"%$$Q\"$$\n",tag,tag; + MyBibleLines(url->special,20,10,FALSE,FALSE); + } + break; + case: + if (DocForm(url(CTopMoviesForm *))) { + NISTBeaconURL(url->timestamp); + RandVideo("Top 100 Movies", + "http://www.afi.com/100years/movies10.aspx", + url,2,"C:/Home/Sup1/Sup1Blog/Movies.TXT.Z"); + } + break; + case: + if (DocForm(url(CMetallicaForm *))) { + NISTBeaconURL(url->timestamp); + RandVideo("Metallica Song","http://home.hccnet.nl/a.r.adams/lyrics/" + "metallica/songindex.html", + url,2,"C:/Home/Sup1/Sup1Blog/Metallica.TXT.Z"); + } + break; + } + } catch { + Fs->catch_except=TRUE; + Beep; Beep; } Free(url); } -//if (FileFind("~/Downloads/Words/LinuxDict.TXT")) -// GodInit("~/Downloads/Words/LinuxDict.TXT"); -if (FileFind("~/Downloads/Words/HappyWords.TXT")) - GodInit("~/Downloads/Words/HappyWords.TXT"); +//if (FileFind("~/Sup1/Sup1Words/LinuxDict.TXT")) +// GodInit("~/Sup1/Sup1Words/LinuxDict.TXT"); +if (FileFind("~/Sup1/Sup1Words/HappyWords.TXT")) + GodInit("~/Sup1/Sup1Words/HappyWords.TXT"); diff --git a/Demo/AcctExample/TOSMisc.CPP b/Demo/AcctExample/TOSMisc.CPP index f8f99d2..837fc11 100644 --- a/Demo/AcctExample/TOSMisc.CPP +++ b/Demo/AcctExample/TOSMisc.CPP @@ -2,8 +2,7 @@ public U0 CursorRemFile(U8 *filename) { - CDoc *doc; - doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); + CDoc *doc=DocRead(filename,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); DocWrite(doc); DocDel(doc); } @@ -124,7 +123,7 @@ public U0 JukeSong(I64 num) AutoComplete; if (!fg_on) FrameGrabberToggle; - JukeSongsPuppet("~/Downloads/Psalmody",,num,num+1); + JukeSongsPuppet("~/Sup1/Sup1Psalmody",,num,num+1); if (fg_on) FrameGrabberToggle; } @@ -134,7 +133,7 @@ public U0 JukeLines(I64 start_line,I64 end_line) AutoComplete; if (!fg_on) FrameGrabberToggle; - JukeSongsPuppet("~/Downloads/Psalmody",,start_line*5,end_line*5); + JukeSongsPuppet("~/Sup1/Sup1Psalmody",,start_line*5,end_line*5); if (fg_on) FrameGrabberToggle; } @@ -300,7 +299,7 @@ U0 TempleOSTheme() { if (!fg_on) PopUp("Sleep(50);FrameGrabberToggle;"); - ExeFile("~/Downloads/Graphics/TempleOSTheme.CPP"); + ExeFile("~/Sup1/Sup1Graphics/TempleOSTheme.CPP"); DocClear; } @@ -310,6 +309,16 @@ U0 TOSJukeVideo(I64 start=0,I64 end=10) Free(buf); AutoComplete; FrameGrabberToggle; - JukeSongsPuppet("~/Downloads/Psalmody",,start,end); + JukeSongsPuppet("~/Sup1/Sup1Psalmody",,start,end); FrameGrabberToggle; } + +#define MEM_TEST_SIZE 128*0x100000 +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; + Yield; + } +} diff --git a/Demo/AcctExample/TOSToHtml.CPP b/Demo/AcctExample/TOSToHtml.CPP index afdc20a..3b62286 100644 --- a/Demo/AcctExample/TOSToHtml.CPP +++ b/Demo/AcctExample/TOSToHtml.CPP @@ -171,7 +171,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";
@@ -189,7 +189,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	"\n");
   DocPrint(doc_out,"%s",body_header);
 
-  doc_e=doc_in->root.next;
+  doc_e=doc_in->head.next;
   col=doc_e->x;
   y=doc_e->y;
   while (doc_e!=doc_in) {
@@ -242,7 +242,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	case DOCT_TEXT:
 	  if (doc_e->de_flags&DOCEF_HIGHLIGHT) {
 	    if (doc_e->last==doc_in)
-	      MemCpy(&doc_e->settings,&doc_in->settings_root,
+	      MemCpy(&doc_e->settings,&doc_in->settings_head,
 		    sizeof(CDocSettings));
 	    else
 	      MemCpy(&doc_e->settings,&doc_e->last->settings,
@@ -320,7 +320,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	    ".c%02X{color:#%02x%02x%02x;background-color:#%02x%02x%02x;}\n",
 	    i,p[i&15].r>>8,p[i&15].g>>8,p[i&15].b>>8,
 	    p[i/16].r>>8,p[i/16].g>>8,p[i/16].b>>8);
-  doc_out->cur_entry=&doc_out->root;
+  doc_out->cur_entry=&doc_out->head;
   DocRecalc(doc_out);
 
   doc_in->win_task->text_attr=old_attr;
@@ -393,7 +393,7 @@ U0 TOSWebFile(U8 *name)
 	  "\n"
-	  "\n",
+	  "\n",
 
 	  "full_name);
     tempde=tempde->next;
   }
-  Copy(	"D:/Wb/Home/Downloads/Bin/TempleBot",
-	"D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
-  ToDolDoc("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
-  TOSToHtml("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
-  Del("D:/Wb/Home/Downloads/Bin/TempleBot.TXT");
+  Copy(	"D:/Wb/Home/Sup1/Sup1Bin/TempleBot",
+	"D:/Wb/Home/Sup1/Sup1Bin/TempleBot.TXT");
+  ToDolDoc("D:/Wb/Home/Sup1/Sup1Bin/TempleBot.TXT");
+  TOSToHtml("D:/Wb/Home/Sup1/Sup1Bin/TempleBot.TXT");
+  Del("D:/Wb/Home/Sup1/Sup1Bin/TempleBot.TXT");
   DirTreeDel(tempde1);
   Drv('C');
 }
diff --git a/Demo/AutoFile/AFEd.TXT b/Demo/AutoFile/AFEd.TXT
index 7d8316f..ce1444c 100644
--- a/Demo/AutoFile/AFEd.TXT
+++ b/Demo/AutoFile/AFEd.TXT
@@ -149,7 +149,6 @@
 #define IC_RIP			0x7F
 
 #define IC_RDTSC		0x80
-#define IC_HPET			0x81
 
 #define IC_BT			0x82
 #define IC_BTS	 		0x83
diff --git a/Demo/DolDoc/FileRead.CPP b/Demo/DolDoc/FileRead.CPP
index 939807d..e5bad67 100644
--- a/Demo/DolDoc/FileRead.CPP
+++ b/Demo/DolDoc/FileRead.CPP
@@ -8,9 +8,9 @@ public U0 DocProfile(U8 *filename,I64 flags)
   //use $LK,"DocRecalc",A="MN:DocRecalc"$().
   CDoc *doc=DocRead(filename,flags);
 
-  //doc->root which is equ to doc is the
+  //doc->head which is equ to doc is the
   //header of the CQue and represents the end-of-file marker.
-  CDocEntry *doc_e=doc->root.next;
+  CDocEntry *doc_e=doc->head.next;
   while (doc_e!=doc) {
     cmd_stats[doc_e->type_u8]++;
     for (i=0;i<64;i++)
diff --git a/Demo/DolDoc/NumBible.CPP b/Demo/DolDoc/NumBible.CPP
index 4dbcf55..fcfdbcc 100644
--- a/Demo/DolDoc/NumBible.CPP
+++ b/Demo/DolDoc/NumBible.CPP
@@ -5,7 +5,7 @@ U0 NumBible()
 {
   CDoc *doc_in=DocRead("::/Misc/Bible.TXT.Z",DOCF_PLAIN_TEXT_TABS),
 	*doc_out=DocNew("~/DemoNumBible.TXT.Z");
-  CDocEntry *doc_e=doc_in->root.next;
+  CDocEntry *doc_e=doc_in->head.next;
   while (doc_e!=doc_in) {
     if (doc_e->type_u8==DOCT_TEXT) {
       DocPrint(doc_out,"%05d %s",doc_e->y+1,doc_e->tag);
diff --git a/Demo/DolDoc/UnusedDefine.CPP b/Demo/DolDoc/UnusedDefine.CPP
index f4a817f..57a05d0 100644
--- a/Demo/DolDoc/UnusedDefine.CPP
+++ b/Demo/DolDoc/UnusedDefine.CPP
@@ -53,7 +53,7 @@ U0 UnusedDefineScan()
 	      Find(temph->str,"/*","+l-i+T");
 	      Fs->put_doc=old_put_doc;
 	      Fs->display_doc=old_display_doc;
-	      doc_e=doc->root.next;
+	      doc_e=doc->head.next;
 	      while (doc_e!=doc) {
 		if (doc_e->type_u8==DOCT_LINK) {
 		  "%s ",temph->str;
diff --git a/Demo/Games/BomberGolf.CPP b/Demo/Games/BomberGolf.CPP
index 56d3584ca355f912be823bfa4131a7c4dc5d9d77..57f433790bc847eeeb8770bbb7319292bf7336b4 100644
GIT binary patch
delta 113
zcmcaQk@4z8#tl5oEE%bZDVqhD+1S9W$x@uMV8&)^&Px!<$%4EyL_wpa1{>

delta 17
YcmbO)KVN=B2?tA2etya33J!I406BUE(f|Me

diff --git a/Demo/Games/EagleDive.CPP b/Demo/Games/EagleDive.CPP
index 1b8feb9..e4f6e60 100644
--- a/Demo/Games/EagleDive.CPP
+++ b/Demo/Games/EagleDive.CPP
@@ -1,6 +1,6 @@
 //Uses $LK,"fixed-point",A="FI:::/Demo/Lectures/FixedPoint.CPP"$.
 
-RegSetDftEntry("TempleOS/EagleDive","I64 best_score=0;\n");
+RegSetDftEntry("TempleOS/EagleDive","F64 best_score=9999;\n");
 RegExeBranch("TempleOS/EagleDive");
 
 //Keep these power of two so shift is used instead of multiply
@@ -34,15 +34,6 @@ RegExeBranch("TempleOS/EagleDive");
 
 
 
-
-
-
-
-
-
-
-
-
 
 
 
@@ -68,6 +59,12 @@ RegExeBranch("TempleOS/EagleDive");
 
 
 
+
+
+
+
+
+
 
 
 
@@ -94,44 +91,6 @@ RegExeBranch("TempleOS/EagleDive");
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 
 
 
@@ -153,43 +112,6 @@ RegExeBranch("TempleOS/EagleDive");
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 
 
 
@@ -281,24 +203,39 @@ class Panel
   U16 update,num_sides;
   CColorROPU32 color;
   Obj *next_obj,*last_obj;
-} *panel_root,*panels[MAP_HEIGHT][MAP_WIDTH];
+} *panel_head,*panels[MAP_HEIGHT][MAP_WIDTH];
 
 I64 critical_section_flag;
 I16 elevations[MAP_HEIGHT][MAP_WIDTH];
 CD3 normals[MAP_HEIGHT][MAP_WIDTH];
 
-F64 game_t0,è,é1,é2,speed;
-
-I64 strip_height,x,y,z,game_score;
-
-Bool game_over;
-
 class MPCtrl {
   I64 init_not_done_flags,update_not_done_flags,app_not_done_flags;
   I64 strip_width[MP_MAX_PROCESSORS];
   Bool app_done;
 } mp;
 
+F64 game_t0,game_tf,pitch,roll,heading,è,speed;
+Bool invert_pitch,rolled_over;
+I64 strip_height,x,y,z,fish_left;
+
+U0 WrapAngles()
+{
+  è=Wrap(è);
+  pitch=Wrap(-è-ã/2);
+  if (Abs(pitch)>ã/2) {
+    invert_pitch=TRUE;
+    pitch=Wrap(ã-pitch);
+  } else
+    invert_pitch=FALSE;
+  roll=Wrap(roll);
+  if (invert_pitch ^^ -ã/2<=roll<ã/2)
+    rolled_over=FALSE;
+  else
+    rolled_over=TRUE;
+  heading=Wrap(heading,0);
+}
+
 U0 EDTransform(CDC *dc,I64 *x,I64 *y,I64 *z)
 {
   I64 zz;
@@ -392,13 +329,13 @@ U0 MPDoPanels(CTask *task)
 		tempo=MAlloc(sizeof(Obj),task);
 		tempo->p.x=(i+w/2)*MAP_SCALE;
 		tempo->p.y=(j+h/2)*MAP_SCALE;
-		if (Rand<0.2) {
+		if (Rand<0.1) {
 		  tempo->fish=FALSE;
 		  if (RandI16&1)
 		    tempo->img=$IB,"<2>",BI=2$; //Boat
 		  else
 		    tempo->img=$IB,"<3>",BI=3$; //Boat
-		  tempo->p.z=(WATER_ELEVATION+1)*MAP_SCALE;
+		  tempo->p.z=(WATER_ELEVATION+2)*MAP_SCALE;
 		} else {
 		  tempo->fish=TRUE;
 		  tempo->img=$IB,"<1>",BI=1$; //Fish
@@ -476,8 +413,8 @@ U0 MPDoPanels(CTask *task)
     while (LBts(&critical_section_flag,0))
       Yield;
     if (end_ptr)
-      end_ptr->next=panel_root;
-    panel_root=start_ptr;
+      end_ptr->next=panel_head;
+    panel_head=start_ptr;
     LBtr(&critical_section_flag,0);
   }
   LBtr(&mp.init_not_done_flags,Gs->num);
@@ -523,7 +460,7 @@ for each spot.
   InitElevations;
   MemSet(panels,0,sizeof(panels));
   CalcNormals;
-  panel_root=NULL;
+  panel_head=NULL;
   mp.init_not_done_flags=1<r);
-  Mat4x4RotZ(dc->r,é2);
+  Mat4x4RotZ(dc->r,heading);
   Mat4x4RotX(dc->r,è);
-  Mat4x4RotZ(dc->r,é1);
+  Mat4x4RotZ(dc->r,roll);
   DCMat4x4Set(dc,dc->r);
 
   //Screen to world coordinates
@@ -687,9 +624,10 @@ U0 MPDrawIt(CTask *task,CDC *dc)
   //y=mx+b and y=(-1/m)x+b are perpendicular.
 
   s2w=Mat4x4IdentNew;
-  Mat4x4RotZ(s2w,-é1);
+  Mat4x4RotZ(s2w,-roll);
   Mat4x4RotX(s2w,-è);
-  Mat4x4RotZ(s2w,-é2);
+  Mat4x4RotZ(s2w,-heading);
+
   xh=0;
   yh=0;
   zh=-256;
@@ -827,88 +765,97 @@ U0 DrawHorizon(CDC *dc)
   dc->depth_buf=NULL;
   CColorROPU32 ground_color;
 
-  if (z/COORDINATE_SCALE<(WATER_ELEVATION+3)*MAP_SCALE)
-    ground_color=BLUE;
-  else
-    ground_color=LTGREEN;
-
-  Mat4x4IdentEqu(dc->r);
-  Mat4x4RotZ(dc->r,é2);
-  Mat4x4RotX(dc->r,è);
-  Mat4x4RotZ(dc->r,é1);
-  DCMat4x4Set(dc,dc->r);
-  dc->flags&=~DCF_TRANSFORMATION;
-  dc->transform=&EDTransform;
-  dc->x=cx;
-  dc->y=cy;
-
-  Mat4x4RotZ(s2w,-é1);
-  Mat4x4RotX(s2w,-è);
-  Mat4x4RotZ(s2w,-é2);
-  xh=0;
-  yh=0;
-  zh=-256;
-  Mat4x4MulXYZ(s2w,&xh,&yh,&zh);
-  Free(s2w);
-
-  x1=xh+yh*32; y1=yh-xh*32; z1=0;
-  (*dc->transform)(dc,&x1,&y1,&z1);
-  x2=xh-yh*32; y2=yh+xh*32; z2=0;
-  (*dc->transform)(dc,&x2,&y2,&z2);
-  DCClipLine(dc,&x1,&y1,&x2,&y2);
-
-  MemSet(p,0,sizeof(p));
-  if (x2width-1) {
-    p[0].x=0;
-    p[0].y=0;
-    p[1].x=dc->width-1;
-    p[1].y=0;
-    p[2].x=dc->width-1;
-    p[2].y=y2;
-    p[3].x=0;
-    p[3].y=y1;
-    if (-ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2)
-      dc->color=LTCYAN;
+  if (game_tf && fish_left)
+    DCFill(dc,BLACK);
+  else if (-ã/4<=Wrap(è-ã)<ã/4)
+    DCFill(dc,LTCYAN);
+  else {
+    if (z/COORDINATE_SCALE<(WATER_ELEVATION+3)*MAP_SCALE)
+      ground_color=BLUE;
     else
-      dc->color=ground_color;
-    GrFillPoly3(dc,4,p);
-    p[0].y=dc->height-1;
-    p[1].y=dc->height-1;
-    if (-ã/2<=é1<ã/2 ^^ -ã/2<=Wrap(è-ã/2)<ã/2)
-      dc->color=ground_color;
-    else
-      dc->color=LTCYAN;
-    GrFillPoly3(dc,4,p);
-  } else {
-    if (y2r);
+    Mat4x4RotZ(dc->r,heading);
+    Mat4x4RotX(dc->r,è);
+    Mat4x4RotZ(dc->r,roll);
+
+    DCMat4x4Set(dc,dc->r);
+    dc->flags&=~DCF_TRANSFORMATION;
+    dc->transform=&EDTransform;
+    dc->x=cx;
+    dc->y=cy;
+
+    Mat4x4RotZ(s2w,-roll);
+    Mat4x4RotX(s2w,-è);
+    Mat4x4RotZ(s2w,-heading);
+
+    xh=0;
+    yh=0;
+    zh=-256;
+    Mat4x4MulXYZ(s2w,&xh,&yh,&zh);
+    Free(s2w);
+
+    x1=xh+yh*32; y1=yh-xh*32; z1=0;
+    (*dc->transform)(dc,&x1,&y1,&z1);
+    x2=xh-yh*32; y2=yh+xh*32; z2=0;
+    (*dc->transform)(dc,&x2,&y2,&z2);
+    DCClipLine(dc,&x1,&y1,&x2,&y2);
+
+    MemSet(p,0,sizeof(p));
+    if (x2height-1) {
+    if (!x1 && x2==dc->width-1) {
       p[0].x=0;
       p[0].y=0;
-      p[1].x=0;
-      p[1].y=dc->height-1;
-      p[2].x=x2;
-      p[2].y=dc->height-1;
-      p[3].x=x1;
-      p[3].y=0;
-      if (x1color=LTCYAN;
-      else
-	dc->color=ground_color;
-      GrFillPoly3(dc,4,p);
-      p[0].x=dc->width-1;
       p[1].x=dc->width-1;
-      if (x1width-1;
+      p[2].y=y2;
+      p[3].x=0;
+      p[3].y=y1;
+      if (rolled_over)
 	dc->color=ground_color;
       else
 	dc->color=LTCYAN;
       GrFillPoly3(dc,4,p);
+      p[0].y=dc->height-1;
+      p[1].y=dc->height-1;
+      if (rolled_over)
+	dc->color=LTCYAN;
+      else
+	dc->color=ground_color;
+      GrFillPoly3(dc,4,p);
+    } else {
+      if (y2height-1) {
+	p[0].x=0;
+	p[0].y=0;
+	p[1].x=0;
+	p[1].y=dc->height-1;
+	p[2].x=x2;
+	p[2].y=dc->height-1;
+	p[3].x=x1;
+	p[3].y=0;
+	if (x1color=ground_color;
+	else
+	  dc->color=LTCYAN;
+	GrFillPoly3(dc,4,p);
+	p[0].x=dc->width-1;
+	p[1].x=dc->width-1;
+	if (x1color=LTCYAN;
+	else
+	  dc->color=ground_color;
+	GrFillPoly3(dc,4,p);
+      } else
+	DCFill(dc,LTCYAN); //Not correct.
     }
   }
   dc->depth_buf=old_db;
@@ -917,8 +864,8 @@ U0 DrawHorizon(CDC *dc)
 U0 Core0EagleDive()
 {
   CDC *dc=DCAlias(main_dc,Fs);
-  I64 i,xx,yy,elev,height,bkcolor,cx=Fs->pix_width>>1,cy=Fs->pix_height>>1;
-  F64 min_strip_width,roll,pitch,heading;
+  I64 i,xx,yy,elev,height,cx=Fs->pix_width>>1,cy=Fs->pix_height>>1;
+  F64 min_strip_width,tt;
 
   update_jiffy_limit=cnts.jiffies+JIFFY_FREQ/40;
 
@@ -930,28 +877,26 @@ U0 Core0EagleDive()
     elev=MAX_I64;
 
   height=z/COORDINATE_SCALE-elev;
-  if (height<0) {
-    if (elev>WATER_ELEVATION*MAP_SCALE) {
-      dc->color=bkcolor=BLACK;
-      if (!game_over) {
-	GrRect(dc,0,0,dc->width,dc->height);
-	music.mute=TRUE;
-	Beep;
-	game_over=TRUE;
-	music.mute=FALSE;
-      }
-    } else
-      bkcolor=BLUE;
-  } else
-    bkcolor=LTCYAN;
+  if (height<0 && elev>WATER_ELEVATION*MAP_SCALE && !game_tf) {
+    music.mute=TRUE;
+    Beep;
+    game_tf=tS;
+    music.mute=FALSE;
+  }
 
-  if (height>=0 && !(-ã/4<=Wrap(è-ã)<ã/4)) {
-    DrawHorizon(dc);
+  DrawHorizon(dc);
+
+  if (game_tf) {
+    tt=game_tf-game_t0;
+    if (Blink) {
+      dc->color=RED;
+      GrPrint(dc,(Fs->pix_width-9*FONT_WIDTH)/2,
+	    (Fs->pix_height-FONT_HEIGHT)/2,"Game Over");
+    }
+  } else {
     DCDepthBufRst(dc);
-
     mp.update_not_done_flags=1<color=bkcolor;
-    GrRect(dc,0,0,dc->width,dc->height);
+
+    tt=tS-game_t0;
+    if (tt<5.0 && Blink) {
+      dc->color=WHITE;
+      GrPrint(dc,(Fs->pix_width-13*FONT_WIDTH)/2,
+	    (Fs->pix_height-FONT_HEIGHT)/2-4*FONT_HEIGHT,"Catch 10 Fish");
+    }
   }
+
   dc->pen_width=2;
-  if (bkcolor==BLUE)
+  if (game_tf && fish_left)
     dc->color=WHITE;
   else
     dc->color=BLACK;
   dc->flags&=~DCF_TRANSFORMATION;
   GrLine3(dc,cx+5,cy,0,cx-5,cy,0);
   GrLine3(dc,cx,cy+5,0,cx,cy-5,0);
-  heading=Wrap(é2,0);
-  roll=é1;
-  pitch=Wrap(-è-ã/2,-ã);
-  if (Abs(pitch)>ã/2) {
-    pitch=Wrap(ã-pitch,-ã);
-    roll=Wrap(roll+ã,-ã);
-    heading=Wrap(heading+ã,0);
-  }
-  GrPrint(dc,0,0,"Roll:%5.1f Pitch:%5.1f Heading:%5.1f",
-	roll*180/ã,pitch*180/ã,heading*180/ã);
-  GrPrint(dc,0,FONT_HEIGHT,"Height:%5d Score:%d High:%d  [Core Strip:%3d]",
-	height,game_score,best_score,strip_height);
+  if (invert_pitch)
+    GrPrint(dc,0,0,"Pitch:%5.1f Roll:%5.1f Heading:%5.1f "
+	  "Height:%5d [Core Strip:%3d]",
+	  pitch*180/ã,Wrap(roll+ã)*180/ã,Wrap(heading+ã,0)*180/ã,
+	  height,strip_height);
+  else
+    GrPrint(dc,0,0,"Pitch:%5.1f Roll:%5.1f Heading:%5.1f "
+	  "Height:%5d [Core Strip:%3d]",
+	  pitch*180/ã,roll*180/ã,heading*180/ã,height,strip_height);
+  GrPrint(dc,0,FONT_HEIGHT,"Fish Remaining:%d Time:%3.2f Best:%3.2f",
+	fish_left,tt,best_score);
 
-  if (game_over && Blink) {
-    dc->color=RED;
-    GrPrint(dc,(Fs->pix_width-9*FONT_WIDTH)/2,
-	  (Fs->pix_height-FONT_HEIGHT)/2,"Game Over");
-  } else if (tS-game_t0<5.0 && Blink) {
-    dc->color=WHITE;
-    GrPrint(dc,(Fs->pix_width-10*FONT_WIDTH)/2,
-	  (Fs->pix_height-FONT_HEIGHT)/2,"Catch Fish");
-  }
-//We made an alias of this we don't want freed.
+  //We made an alias of this we don't want freed.
   dc->depth_buf=NULL;
   DCDel(dc);
   WinMgrSync;
@@ -1006,7 +946,7 @@ Obj *FishFind(I64 x1,I64 y1,I64 *_dd)
 {
   I64 dd,best_dd=MAX_I64;
   Obj *res=NULL,*tempo;
-  Panel *tempp=panel_root;
+  Panel *tempp=panel_head;
   while (tempp) {
     tempo=tempp->next_obj;
     while (tempo!=&tempp->next_obj) {
@@ -1030,17 +970,18 @@ 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;
-  F64 t0=tS,mS,é,d,pitch;
+  F64 t0=tS,mS,é,d;
   Obj *tempo;
   while (TRUE) {
     mS=1000*(tS-t0);
     t0=tS;
-    if (!game_over) {
+    if (!game_tf) {
 //Screen to world coordinates
       s2w=Mat4x4IdentNew;
-      Mat4x4RotZ(s2w,-é1);
+      Mat4x4RotZ(s2w,-roll);
       Mat4x4RotX(s2w,-è);
-      Mat4x4RotZ(s2w,-é2);
+      Mat4x4RotZ(s2w,-heading);
+
       dx=0;dy=0;dz=1<<16;
       Mat4x4MulXYZ(s2w,&dx,&dy,&dz);
       x-=speed*mS*COORDINATE_SCALE*dx/1<<16;
@@ -1048,20 +989,20 @@ U0 AnimateTask(I64)
       z-=speed*mS*COORDINATE_SCALE*dz/1<<16;
       Free(s2w);
       x1=x/COORDINATE_SCALE; y1=y/COORDINATE_SCALE; z1=z/COORDINATE_SCALE;
-
       if (z1<(WATER_ELEVATION+3)*MAP_SCALE) {
 	if (z1ã/2) {
-	    pitch=Wrap(ã-pitch,-ã);
+	  if (invert_pitch) {
 	    if (pitch<-ã/8)
 	      è+=mS/1000.0*Sign(3*ã/8-è);
 	  } else if (pitch<-ã/8)
 	    è+=mS/1000.0*Sign(-3*ã/8-è);
+	  WrapAngles;
 	}
 	speed=1.0;
-	if (tempo=FishFind(x1,y1,&dd)) {
+	if (rolled_over || !(tempo=FishFind(x1,y1,&dd)))
+	  claws_down=0;
+	else {
 	  d=Sqrt(dd);
 	  x1-=tempo->p.x;
 	  y1-=tempo->p.y;
@@ -1071,9 +1012,11 @@ U0 AnimateTask(I64)
 	  else
 	    claws_down=0.01;
 	  if (dbest_score)
-	      best_score=game_score;
+	    if (!--fish_left) {
+	      game_tf=tS;
+	      if (game_tf-game_t0>1 *COORDINATE_SCALE*MAP_SCALE;
   y=MAP_HEIGHT>>1*COORDINATE_SCALE*MAP_SCALE;
@@ -1158,7 +1103,7 @@ U0 Init()
 
 U0 CleanUp()
 {
-  Panel *tempp=panel_root,*tempp1;
+  Panel *tempp=panel_head,*tempp1;
   MPEnd;
   while (tempp) {
     tempp1=tempp->next;
@@ -1173,8 +1118,6 @@ U0 CleanUp()
 U0 EagleDive()
 {
   I64 ch,sc;
-  F64 pp,tt1,tt2;
-
   SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
   MenuPush(
 	"File {"
@@ -1202,24 +1145,26 @@ U0 EagleDive()
   try //in case  is pressed.
     do {
       if (ScanKey(&ch,&sc)) {
-	pp=è; tt1=é1; tt2=é2;
 	switch (ch) {
 	  case 0:
 	    switch (sc.u8[0]) {
-	      case SC_CURSOR_DOWN:
-		è +=-CTRLS_SCALE*Cos(tt1);
-		é2+=-CTRLS_SCALE*Sin(tt1)*Sin(è);
-		break;
-	      case SC_CURSOR_UP:
-		è -=-CTRLS_SCALE*Cos(tt1);
-		é2-=-CTRLS_SCALE*Sin(tt1)*Sin(è);
-		break;
-	      case SC_CURSOR_RIGHT:
-		é1+=CTRLS_SCALE;
-		break;
-	      case SC_CURSOR_LEFT:
-		é1-=CTRLS_SCALE;
-		break;
+	      start:
+		case SC_CURSOR_DOWN:
+		  è-=CTRLS_SCALE*Cos(roll);
+		  heading-=CTRLS_SCALE*Sin(roll)*Sin(è);
+		  break;
+		case SC_CURSOR_UP:
+		  è+=CTRLS_SCALE*Cos(roll);
+		  heading+=CTRLS_SCALE*Sin(roll)*Sin(è);
+		  break;
+		case SC_CURSOR_RIGHT:
+		  roll+=CTRLS_SCALE;
+		  break;
+		case SC_CURSOR_LEFT:
+		  roll-=CTRLS_SCALE;
+		  break;
+	      end:
+		WrapAngles;
 	    }
 	    break;
 	  case '\n':
@@ -1230,9 +1175,6 @@ U0 EagleDive()
 	    Fs->draw_it=&DrawIt;
 	    break;
 	}
-	é1=Wrap(é1);
-	è =Wrap(è);
-	é2=Wrap(é2);
       } else
 	Core0EagleDive;
     } while (ch!=CH_SHIFT_ESC && ch!=CH_ESC);
@@ -1240,7 +1182,7 @@ U0 EagleDive()
     PutExcept;
   SettingsPop;
   CleanUp;
-  RegWriteBranch("TempleOS/EagleDive","I64 best_score=%d;\n",best_score);
+  RegWriteBranch("TempleOS/EagleDive","F64 best_score=%5.4f;\n",best_score);
   MenuPop;
 }
 
@@ -1253,17 +1195,56 @@ EagleDive;
 &
 	üÿÿÿ
 	üÿÿÿáÿÿÿ
-áÿÿÿ):_éÿÿÿ¡‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ







ÿ







ÿ







ÿ







ÿ







ÿ







ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbþÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚þÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹
->þÿÿ ÿÿÿw ÿÿÿXwá>þÿÿá>þÿÿ ÿÿÿjÿÿÿw ÿÿÿjÿÿÿXjÿÿÿwájÿÿÿ>þÿÿájÿÿÿ						%KK%µÿÿÿKÚÿÿÿµÿÿÿKÚÿÿÿKK%K%µÿÿÿÚÿÿÿµÿÿÿÚÿÿÿKÚÿÿÿÚÿÿÿp%Úÿÿÿp%%pÚÿÿÿ%pÚÿÿÿÚÿÿÿK%ÚÿÿÿK%%KÚÿÿÿ%K000000000	
0
0	
-0
	0
-0
-000	0	
-0
0
ʰÿÿÿ8ÿÿÿ<8ÿÿÿȰÿÿÿÈPPȰÿÿÿÈ8ÿÿÿP8ÿÿÿ°ÿÿÿìÿÿÿÎÿÿÿÜÎÿÿÿÜ2ìÿÿÿÜ2Ü2Üìÿÿÿ2ÜÎÿÿÿÜÎÿÿÿìÿÿÿÜ 	 	 
+áÿÿÿ):_éÿÿÿ¡‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ







ÿ







ÿ







ÿ







ÿ







ÿ







ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbþÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚þÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿʰÿÿÿ8ÿÿÿ<8ÿÿÿȰÿÿÿÈPPȰÿÿÿÈ8ÿÿÿP8ÿÿÿ°ÿÿÿìÿÿÿÎÿÿÿÜÎÿÿÿÜ2ìÿÿÿÜ2Ü2Üìÿÿÿ2ÜÎÿÿÿÜÎÿÿÿìÿÿÿÜ 	 	 
  
 	  
-   
 
  
    ‹
-á>þÿÿáwX ÿÿÿw ÿÿÿ>þÿÿá>þÿÿjÿÿÿáwjÿÿÿXjÿÿÿ ÿÿÿwjÿÿÿ ÿÿÿ>þÿÿjÿÿÿ						µÿÿÿ%KK%KKÚÿÿÿKµÿÿÿÚÿÿÿKµÿÿÿ%K%KÚÿÿÿµÿÿÿÚÿÿÿ&Úÿÿÿp&%pÛÿÿÿ%pÛÿÿÿÚÿÿÿp&ÚÿÿÿK&%KÛÿÿÿ%KÛÿÿÿÚÿÿÿK000000000	
0
0	
-0
	0
-0
-000	0	
-0
0

\ No newline at end of file
+   
 
  
    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,0000000000000	
+0
+	0
0
0	0
	0
+00
+0
+0	
0
0000000000000000 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ßÿÿÿ-ú-íìÿÿÿ-	
+
+	

	
	
+
+
+	

   ! ""#!%$&&'%! $$%!#"&&'#" $$&"#!%%'#)(**+)-,../-)(,,-)+*../+*(,,.*+)--/+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	
+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@B
+0BCA
+0EDF
+0FGE
+0A@D
+0DEA
+0CBF
+0FGC
+0B@D
+0DFB
+0CAE
+0EGC0IHJ0JKI0MLN0NOM0IHL0LMI0KJN0NOK0JHL0LNJ0KIM0MOK0QPR0RSQ0UTV0VWU0QPT0TUQ0SRV0VWS0RPT0TVR0SQU0UWS
+0YXZ
+0Z[Y
+0]\^
+0^_]
+0YX\
+0\]Y
+0[Z^
+0^_[
+0ZX\
+0\^Z
+0[Y]
+0]_[0a`b0bca0edf0fge0a`d0dea0cbf0fgc0b`d0dfb0cae0egc0ihj0jki0mln0nom0ihl0lmi0kjn0nok0jhl0lnj0kim0mok
\ No newline at end of file
diff --git a/Demo/Games/FlatTops.CPP b/Demo/Games/FlatTops.CPP
index 35abb58..60437ff 100644
--- a/Demo/Games/FlatTops.CPP
+++ b/Demo/Games/FlatTops.CPP
@@ -46,14 +46,14 @@ class Obj
   I32 torpedos,max_torpedos;
   F64 torpedos_range;
   U8  fire[(FIRE_WIDTH*FIRE_HEIGHT+7)/8];
-} obj_root;
+} obj_head;
 
 class Torpedo
 {
   Torpedo *next,*last;
   Obj *target;
   F64 x,y,é,speed,timeout;
-} torpedo_root;
+} torpedo_head;
 
 #define SA_PARKED	0
 #define SA_LAUNCHING	1
@@ -96,9 +96,9 @@ Obj *ObjFind(F64 x,F64 y,
 	     I64 flag_mask=OF_ACTIVE|OF_RETURNING,I64 flag_val=OF_ACTIVE,
 	     I64 type_mask=-1,I64 player_mask=-1,F64 *_d=NULL)
 {
-  Obj *tempo=obj_root.next,*best=NULL;
+  Obj *tempo=obj_head.next,*best=NULL;
   F64 dd,best_dd=MAX_F64;
-  while (tempo!=&obj_root) {
+  while (tempo!=&obj_head) {
     if (tempo->flags&flag_mask==flag_val &&
 	  Bt(&type_mask,tempo->type)&&Bt(&player_mask,tempo->player)) {
       dd=Sqr(tempo->x-x)+Sqr(tempo->y-y);
@@ -163,15 +163,15 @@ U0 DrawIt(CTask *task,CDC *dc)
   Obj *tempo;
   Torpedo *tempt;
 
-  tempt=torpedo_root.next;
-  while (tempt!=&torpedo_root) {
+  tempt=torpedo_head.next;
+  while (tempt!=&torpedo_head) {
     dc->color=WHITE;
     GrPlot(dc,tempt->x,tempt->y);
     tempt=tempt->next;
   }
 
-  tempo=obj_root.next;
-  while (tempo!=&obj_root) {
+  tempo=obj_head.next;
+  while (tempo!=&obj_head) {
     if (tempo->flags&OF_ACTIVE && tempo->flags&OF_SHIP) {
       SpriteZ3B(dc,tempo->x,tempo->y,0,
 	    imgs[tempo->player][tempo->type],tempo->é+ã/2);
@@ -221,8 +221,8 @@ U0 DrawIt(CTask *task,CDC *dc)
     tempo=tempo->next;
   }
 
-  tempo=obj_root.next;
-  while (tempo!=&obj_root) {
+  tempo=obj_head.next;
+  while (tempo!=&obj_head) {
     if (tempo->flags&OF_ACTIVE && !(tempo->flags&OF_SHIP))
       SpriteZ3B(dc,tempo->x,tempo->y,0,
 	    imgs[tempo->player][tempo->type],tempo->é+ã/2);
@@ -279,8 +279,8 @@ U0 Init()
 	w=Fs->pix_width,h=Fs->pix_height;
   Squadron *temps;
   Obj *tempo,*tempo1;
-  QueInit(&obj_root);
-  QueInit(&torpedo_root);
+  QueInit(&obj_head);
+  QueInit(&torpedo_head);
 
   next_noise=tS;
   Fs->scroll_x=0;
@@ -309,7 +309,7 @@ U0 Init()
       tempo1->torpedos =tempo1->max_torpedos=0;
       tempo1->torpedos_range =0.0;
       tempo1->next_action_time=0;
-      QueIns(tempo1,obj_root.last);
+      QueIns(tempo1,obj_head.last);
     }
 
     for (ship=0;shiptorpedos =tempo1->max_torpedos=0;
       tempo1->torpedos_range =0.0;
       tempo1->next_action_time=0;
-      QueIns(tempo1,obj_root.last);
+      QueIns(tempo1,obj_head.last);
 
       for (squadron=0;squadronship_guns=0;		tempo->ship_guns_range=0.0;
 	  tempo->torpedos =tempo->max_torpedos=1;
 	  tempo->torpedos_range =20.0;
-	  QueIns(tempo,obj_root.last);
+	  QueIns(tempo,obj_head.last);
 	}
       }
     }
@@ -359,8 +359,8 @@ U0 Init()
     temps->next_in_squadron=temps->last_in_squadron=temps;
     temps->squadron=i;
   }
-  tempo=obj_root.next;
-  while (tempo!=&obj_root) {
+  tempo=obj_head.next;
+  while (tempo!=&obj_head) {
     if (tempo->squadron>=0) {
       temps=&squadrons[tempo->squadron];
       temps->host  =tempo->host;
@@ -374,8 +374,8 @@ U0 Init()
 
 U0 CleanUp()
 {
-  QueDel(&obj_root,TRUE);
-  QueDel(&torpedo_root,TRUE);
+  QueDel(&obj_head,TRUE);
+  QueDel(&torpedo_head,TRUE);
   Free(squadrons);
 }
 
@@ -389,8 +389,8 @@ Obj *ObjLaunch(I64 player,I64 squadron=-1,
   if (host && cur_time>host->next_action_time) {
     if (é==MAX_F64)
       é=Arg(x-host->x,y-host->y);
-    tempo=obj_root.next;
-    while (tempo!=&obj_root) {
+    tempo=obj_head.next;
+    while (tempo!=&obj_head) {
       if (tempo->host==host && (squadron<0||tempo->squadron==squadron) &&
 	    !(tempo->flags&OF_ACTIVE) &&
 	    (tempo->squadron<0||squadrons[tempo->squadron].action==SA_PARKED||
@@ -564,8 +564,8 @@ U0 SquadronActions()
 U0 AI(I64 player,F64 period)
 {
   Obj *tempo;
-  tempo=obj_root.next;
-  while (tempo!=&obj_root) {
+  tempo=obj_head.next;
+  while (tempo!=&obj_head) {
     if (tempo->player==player) {
       if (tempo->type==OT_CARRIER && Rand<5*period)
 	SquadronLaunch(player,tempo->x,tempo->y);
@@ -620,8 +620,8 @@ U0 Combat(F64 period)
   F64 d;
   Obj *tempo,*tempo1;
   Torpedo *tempt;
-  tempo=obj_root.next;
-  while (tempo!=&obj_root) {
+  tempo=obj_head.next;
+  while (tempo!=&obj_head) {
     tempo->flags&=~OF_SHOOTING;
     if (tempo->flags&OF_ACTIVE &&
 	  (tempo1=ObjFind(tempo->x,tempo->y,OF_ACTIVE,OF_ACTIVE,,
@@ -639,7 +639,7 @@ U0 Combat(F64 period)
 	  tempo1->death_time=tempt->timeout=tS+d;
 	  tempt->target=tempo1;
 	  tempt->é=Arg(tempo1->x-tempo->x,tempo1->y-tempo->y);
-	  QueIns(tempt,torpedo_root.last);
+	  QueIns(tempt,torpedo_head.last);
 	  Sweep(2000,2000,300);
 	} else if (tempo->ship_guns>0 && dship_guns_range) {
 	  tempo->flags|=OF_SHOOTING;
@@ -670,8 +670,8 @@ U0 Combat(F64 period)
     }
     tempo=tempo->next;
   }
-  tempo=obj_root.next;
-  while (tempo!=&obj_root) {
+  tempo=obj_head.next;
+  while (tempo!=&obj_head) {
     tempo1=tempo->next;
     if (tempo->type==OT_FIGHTER &&
 	  (tempo->life_percent<=0.0 || tempo->flags&OF_ACTIVE &&
@@ -680,8 +680,8 @@ U0 Combat(F64 period)
       ObjDel(tempo);
     tempo=tempo1;
   }
-  tempo=obj_root.next;
-  while (tempo!=&obj_root) {
+  tempo=obj_head.next;
+  while (tempo!=&obj_head) {
     tempo1=tempo->next;
     if (tempo->life_percent<=0.0)
       ObjDel(tempo);
@@ -700,8 +700,8 @@ U0 AnimateTask(I64)
     period=GAME_SPEED_SCALE*game_speed/ANIMATE_FREQ;
     SquadronActions;
 
-    tempo=obj_root.next;
-    while (tempo!=&obj_root) {
+    tempo=obj_head.next;
+    while (tempo!=&obj_head) {
       if (tempo->flags&OF_ACTIVE && tempo->fuel>0) {
 	if (tempo->dé) {
 	  d=tempo->dé;
@@ -717,8 +717,8 @@ U0 AnimateTask(I64)
       tempo=tempo->next;
     }
 
-    tempt=torpedo_root.next;
-    while (tempt!=&torpedo_root) {
+    tempt=torpedo_head.next;
+    while (tempt!=&torpedo_head) {
       tempt1=tempt->next;
       if (tS>tempt->timeout) {
 	tempo=tempt->target;
@@ -736,8 +736,8 @@ U0 AnimateTask(I64)
       tempt=tempt1;
     }
 
-    tempo=obj_root.next;
-    while (tempo!=&obj_root) {
+    tempo=obj_head.next;
+    while (tempo!=&obj_head) {
       if (tempo->host && !(tempo->flags&OF_ACTIVE)) {
 	tempo->x=tempo->host->x;
 	tempo->y=tempo->host->y;
@@ -745,8 +745,8 @@ U0 AnimateTask(I64)
       tempo=tempo->next;
     }
 
-    tempo=obj_root.next;
-    while (tempo!=&obj_root) {
+    tempo=obj_head.next;
+    while (tempo!=&obj_head) {
       if (tempo->flags&OF_ACTIVE) {
 	if (tempo->host) {
 	  d=Sqrt(Sqr(tempo->x-tempo->host->x)+Sqr(tempo->y-tempo->host->y));
diff --git a/Demo/Games/RawHide.CPP b/Demo/Games/RawHide.CPP
index 78e2408..5237a86 100644
--- a/Demo/Games/RawHide.CPP
+++ b/Demo/Games/RawHide.CPP
@@ -65,16 +65,14 @@ class Animal
 #define WATERFALL_HEIGHT	(MAP_HEIGHT/20)
 #define WATERFALL_DROPS		512
 #define WATERFALL_ACCELERATION	10
-#define COURSE_LEN		(MAP_HEIGHT*2)
-I32 *r_x,*r_y,*r_width,*wfd_x;
+I32 *r_x,*r_width,*wfd_x;
 F64 *wfd_t0,waterfall_tf;
-I64 river_lo,river_hi,waterfall_x,waterfall_y,waterfall_width;
+I64 waterfall_x,waterfall_y,waterfall_width;
+
 U0 RiverNew()
 {
-  r_x=MAlloc(COURSE_LEN*sizeof(I32));
-  r_y=MAlloc(COURSE_LEN*sizeof(I32));
-  r_width=MAlloc(COURSE_LEN*sizeof(I32));
-  river_lo=river_hi=COURSE_LEN/2;
+  r_x=MAlloc(MAP_HEIGHT*sizeof(I32));
+  r_width=MAlloc(MAP_HEIGHT*sizeof(I32));
   wfd_x=MAlloc(WATERFALL_DROPS*sizeof(I32));
   wfd_t0=MAlloc(WATERFALL_DROPS*sizeof(F64));
   waterfall_tf=Sqrt(2*WATERFALL_HEIGHT/WATERFALL_ACCELERATION);
@@ -82,89 +80,50 @@ U0 RiverNew()
 
 U0 RiverMake()
 {
-  I64 i,j,k,x,y,dx,dy,w,old_x,old_y;
-//Plan lower course of river
-  old_x=-1;old_y=-1;
-  x=MAP_WIDTH<<32/2; y=(MAP_HEIGHT+WATERFALL_HEIGHT)<<32/2;
-  dx=0; dy=1<<32;
-  w=15<<32;
-  i=(COURSE_LEN+WATERFALL_HEIGHT)/2;
-  while (y.i32[1]=MAP_BORDER && i>=0) {
-    if (old_x.i32[1]!=x.i32[1]||old_y.i32[1]!=y.i32[1]) {
-      r_x[i]=x.i32[1]; r_y[i]=y.i32[1]; r_width[i]=w.i32[1];
-      river_lo=i--;
-      old_x=x; old_y=y;
-    }
-    dx=ClampI64(dx+RandI32/64,-MAX_I32,MAX_I32)+MAX_I32/256;
-    dy=ClampI64(dy+RandI32/64,-MAX_I32,0);
-    w=ClampI64(w+RandI32*2,10*MAX_U32,150*MAX_U32);
-    x+=dx; y+=dy;
-  }
-
   //Plot waterfall cliff
   Sprite3B(map_dc,waterfall_x,waterfall_y,0,$IB,"<10>",BI=10$);
 
   //Plot sand bar
-  x=0; y=0;
-  for (i=river_lo;i<=river_hi;i++) {
-    if (!((MAP_HEIGHT-WATERFALL_HEIGHT)/2-9color=YELLOW;
-      map_dc->pen_width=r_width[i]+5;
-      GrPlot3(map_dc,r_x[i]+x.i32[1],r_y[i]+y.i32[1],0);
+      map_dc->pen_width=r_width[y]+10;
+      GrPlot3(map_dc,r_x[y]+x.i32[1],y,0);
     }
     x=ClampI64(x+RandI32,-6*MAX_U32,6*MAX_U32);
-    y=ClampI64(y+RandI32,-6*MAX_U32,6*MAX_U32);
   }
 
   //Plot water
-  for (i=river_lo;i<=river_hi;i++) {
+  for (y=MAP_BORDER;ycolor=BLUE;
-    map_dc->pen_width=r_width[i];
-    GrPlot3(map_dc,r_x[i],r_y[i],0);
+    map_dc->pen_width=r_width[y];
+    GrPlot3(map_dc,r_x[y],y,0);
   }
 }
 
 U0 RiverDel()
 {
   Free(r_x);
-  Free(r_y);
   Free(r_width);
   Free(wfd_x);
   Free(wfd_t0);
@@ -174,16 +133,16 @@ U0 RiverDel()
 class RiverDrop
 {
   RiverDrop *next,*last;
-  I64 idx,dx,dy;
-} rd_root;
+  I64 y,dx,dy;
+} rd_head;
 Bool rd_lock;
 
 U0 RiverDropsDel()
 {
   while (LBts(&rd_lock,0))
     Yield;
-  QueDel(&rd_root,TRUE);
-  QueInit(&rd_root);
+  QueDel(&rd_head,TRUE);
+  QueInit(&rd_head);
   LBtr(&rd_lock,0);
 }
 
@@ -192,33 +151,32 @@ U0 RiverDropsNext(CTask *mem_task)
   RiverDrop *tempr,*tempr1;
   while (LBts(&rd_lock,0))
     Yield;
-  tempr=rd_root.next;
-  while (tempr!=&rd_root) {
+  tempr=rd_head.next;
+  while (tempr!=&rd_head) {
     tempr1=tempr->next;
-    if (++tempr->idx>river_hi) {
+    if (++tempr->y>=MAP_HEIGHT-MAP_BORDER) {
       QueRem(tempr);
       Free(tempr);
     } else {
       do {
-	if (RandU16&1 && GrPeek(map_dc,r_x[tempr->idx]+tempr->dx,
-	      r_y[tempr->idx]+tempr->dy)==BLUE)
+	if (RandU16&1 && GrPeek(map_dc,r_x[tempr->y]+tempr->dx,
+	      tempr->y+tempr->dy)==BLUE)
 	  break;
-	tempr->dx=ClampI64(tempr->dx+RandU16%3-1,-r_width[tempr->idx]/2,
-	      r_width[tempr->idx]/2);
-	tempr->dy=ClampI64(tempr->dy+RandU16%3-1,-r_width[tempr->idx]/2,
-	      r_width[tempr->idx]/2);
-      } while (GrPeek(map_dc,r_x[tempr->idx]+tempr->dx,
-	    r_y[tempr->idx]+tempr->dy)!=BLUE &&
-	    GrPeek(map_dc,r_x[tempr->idx],
-	    r_y[tempr->idx])==BLUE); //Might be reinitializing
+	tempr->dx=ClampI64(tempr->dx+RandU16%3-1,-r_width[tempr->y]/2,
+	      r_width[tempr->y]/2);
+	tempr->dy=ClampI64(tempr->dy+RandU16%3-1,-r_width[tempr->y]/2,
+	      r_width[tempr->y]/2);
+      } while (GrPeek(map_dc,r_x[tempr->y]+tempr->dx,
+	    tempr->y+tempr->dy)!=BLUE &&
+	    GrPeek(map_dc,r_x[tempr->y],tempr->y)==BLUE);//Might be reiniting
     }
     tempr=tempr1;
   }
   tempr=MAlloc(sizeof(RiverDrop),mem_task);
-  tempr->idx=river_lo;
+  tempr->y=MAP_BORDER;
   tempr->dx=0;
   tempr->dy=0;
-  QueIns(tempr,rd_root.last);
+  QueIns(tempr,rd_head.last);
   LBtr(&rd_lock,0);
 }
 
@@ -229,14 +187,10 @@ U0 RiverDropsDraw(CDC *dc,I64 cx,I64 cy)
   RiverDrop *tempr;
   while (LBts(&rd_lock,0))
     Yield;
-  tempr=rd_root.next;
-  while (tempr!=&rd_root) {
-    if ((MAP_HEIGHT-WATERFALL_HEIGHT)/2idx]
-	  <(MAP_HEIGHT+WATERFALL_HEIGHT)/2)
-      dc->color=WHITE;
-    else
-      dc->color=LTBLUE;
-    GrPlot(dc,r_x[tempr->idx]+tempr->dx-cx,r_y[tempr->idx]+tempr->dy-cy);
+  tempr=rd_head.next;
+  dc->color=LTBLUE;
+  while (tempr!=&rd_head) {
+    GrPlot(dc,r_x[tempr->y]+tempr->dx-cx,tempr->y+tempr->dy-cy);
     tempr=tempr->next;
   }
   LBtr(&rd_lock,0);
@@ -535,7 +489,7 @@ U0 ReInit()
   GrBorder(map_dc,MAP_BORDER/2,MAP_BORDER/2,
 	MAP_WIDTH-(MAP_BORDER+1)/2,MAP_HEIGHT-(MAP_BORDER+1)/2);
 
-  for (i=river_lo;i<=river_hi;i++)
+  for (i=MAP_BORDER;i<=MAP_HEIGHT-MAP_BORDER;i++)
     RiverDropsNext(Fs);
 
   MemSet(a,0,NUM_ANIMALS*sizeof(Animal));
@@ -563,7 +517,7 @@ U0 Init()
 {
   RiverNew;
   rd_lock=0;
-  QueInit(&rd_root);
+  QueInit(&rd_head);
   map_dc=DCNew(MAP_WIDTH,MAP_HEIGHT);
   a=MAlloc(NUM_ANIMALS*sizeof(Animal));
   ReInit;
diff --git a/Demo/Games/Stadium/StadiumGen.CPP b/Demo/Games/Stadium/StadiumGen.CPP
index b51023a..86cbd17 100644
--- a/Demo/Games/Stadium/StadiumGen.CPP
+++ b/Demo/Games/Stadium/StadiumGen.CPP
@@ -18,7 +18,7 @@ U0 StadiumGen()
 
   WinMgrSync(2,TRUE);
   dc2=DCScreenCapture;
-  dc=DCExtract(dc2,0,FONT_HEIGHT,GR_WIDTH,GR_HEIGHT);
+  dc=DCExt(dc2,0,FONT_HEIGHT,GR_WIDTH,GR_HEIGHT);
   DCDel(dc2);
 
   GRAWrite("StadiumBG",dc,DCSF_COMPRESSED|DCSF_PALETTE_GET);
diff --git a/Demo/Games/Varoom.CPP b/Demo/Games/Varoom.CPP
index 085153c..a20b0fe 100644
--- a/Demo/Games/Varoom.CPP
+++ b/Demo/Games/Varoom.CPP
@@ -109,7 +109,7 @@ class Track
   I64 x,z;
   F64 é,d;
   CD3I32 left[4],center[4],right[4];
-} track_root,
+} track_head,
   *track_start[MP_MAX_PROCESSORS],*track_end[MP_MAX_PROCESSORS];
 
 CDC *track_map;
@@ -158,7 +158,7 @@ Track *TrackFind(Track *_tempt,I64 x,I64 z)
   tempt=_tempt;
   while (TRUE) {
     tempt=tempt->next;
-    if (tempt==&track_root)
+    if (tempt==&track_head)
       tempt=tempt->next;
     dd=SqrI64(tempt->x-x)+SqrI64(tempt->z-z);
     if (ddlast;
-    if (tempt==&track_root)
+    if (tempt==&track_head)
       tempt=tempt->last;
     dd=SqrI64(tempt->x-x)+SqrI64(tempt->z-z);
     if (ddx=x;
   tempt->z=z;
   tempt->é=é;
-  tempt->num=track_root.last->num+1;
-  tempt->d  =track_root.last->d+d;
+  tempt->num=track_head.last->num+1;
+  tempt->d  =track_head.last->d+d;
 
-  QueIns(tempt,track_root.last);
+  QueIns(tempt,track_head.last);
 
   if (tempt->num&1)
     tempt->c=RED;
@@ -254,7 +254,7 @@ U0 TrackSlice(F64 *_x,F64 *_z,F64 
 
 U0 CoupleEnds()
 {
-  Track *first=track_root.next,*last=track_root.last;
+  Track *first=track_head.next,*last=track_head.last;
   MemCpy(&first->center[0],&last->center[3],sizeof(CD3I32));
   MemCpy(&first->center[1],&last->center[2],sizeof(CD3I32));
   MemCpy(&first->left[0]  ,&last->left[3]  ,sizeof(CD3I32));
@@ -269,8 +269,8 @@ U0 InitTrack()
   Track *tempt;
   F64 x,z,é,d;
 
-  MemSet(&track_root,0,sizeof(Track));
-  QueInit(&track_root);
+  MemSet(&track_head,0,sizeof(Track));
+  QueInit(&track_head);
 
   t_minx=t_minz=MAX_I64;
   t_maxx=t_maxz=MIN_I64;
@@ -295,11 +295,11 @@ U0 InitTrack()
 
   CoupleEnds;
 
-  tempt=track_root.next;
+  tempt=track_head.next;
   for (i=0;inum/mp_cnt+1;
+    j=(i+1)*track_head.last->num/mp_cnt+1;
     track_start[i]=tempt;
-    while (tempt!=&track_root && tempt->num!=j)
+    while (tempt!=&track_head && tempt->num!=j)
       tempt=tempt->next;
     track_end[i]=tempt;
   }
@@ -311,10 +311,10 @@ U0 InitTrack()
 
   track_map->color=LTGRAY;
   GrRect(track_map,0,0,track_map->width,track_map->height);
-  tempt=track_root.next;
+  tempt=track_head.next;
   track_map->color=YELLOW;
   track_map->pen_width=3;
-  while (tempt!=&track_root) {
+  while (tempt!=&track_head) {
     GrPlot3(track_map,track_map->width-(tempt->x-t_minx)>>MAP_BITS,
 	  (tempt->z-t_minz)>>MAP_BITS,0);
     tempt=tempt->next;
@@ -498,7 +498,7 @@ U0 DrawIt(CTask *task,CDC *dc)
     s=tS-t0;
   dc->color=BLACK;
   GrPrint(dc,0,0,"%0.1f%% Time:%0.2f Best:%0.2f",
-	100.0*distance/track_root.last->d,s,best_score);
+	100.0*distance/track_head.last->d,s,best_score);
 }
 
 U0 AnimateTask(I64)
@@ -520,7 +520,7 @@ U0 AnimateTask(I64)
       if (i) {
 	if (tempt!=tempc->t) {
 	  tempt2=tempt->next;
-	  if (tempt2==&track_root)
+	  if (tempt2==&track_head)
 	    tempt2=tempt2->next;
 	  tempc->é=Arg(-tempt2->z+tempc->p.z,-tempt2->x+tempc->p.x);
 	}
@@ -548,7 +548,7 @@ U0 AnimateTask(I64)
 	}
       if (!game_over) {
 	distance+=0.01*c[0].speed;
-	if (distance>track_root.last->d&& c[0].t->numnum>>1) {
+	if (distance>track_head.last->d&& c[0].t->numnum>>1) {
 	  tf=tS;
 	  game_over=TRUE;
 	  Beep;
@@ -601,7 +601,7 @@ U0 Init()
 
   InitTrack;
   InitBushes;
-  tempt=track_root.next;
+  tempt=track_head.next;
   for (i=0;it=tempt;
@@ -617,8 +617,8 @@ U0 Init()
       tempc->img=$IB,"<6>",BI=6$;
       tempc->speed=2500.0;
     }
-    d=(i+1)*track_root.last->d/NUM_CARS;
-    while (tempt->next!=&track_root && tempt->dd/NUM_CARS;
+    while (tempt->next!=&track_head && tempt->dnext;
   }
   distance=0;
@@ -631,7 +631,7 @@ U0 CleanUp()
 {
   while (mp_not_done_flags)
     Yield;
-  QueDel(&track_root,TRUE);
+  QueDel(&track_head,TRUE);
   DCDel(track_map);
 }
 
diff --git a/Demo/Games/Wenceslas.CPP b/Demo/Games/Wenceslas.CPP
index f383d39..98da405 100644
--- a/Demo/Games/Wenceslas.CPP
+++ b/Demo/Games/Wenceslas.CPP
@@ -109,14 +109,14 @@ class Peasant
   Peasant *next,*last;
   F64 x,y,é,door_opened_t0;
   Bool stopped;
-} peasant_root;
+} peasant_head;
 
 class Step
 {
   Step *next,*last;
   U16 x,y;
   F64 t0;
-} step_root,king_step_root;
+} step_head,king_step_head;
 
 U0 DrawIt(CTask *task,CDC *dc)
 {
@@ -157,8 +157,8 @@ U0 DrawIt(CTask *task,CDC *dc)
     }
   }
 
-  tempst=step_root.next;
-  while (tempst!=&step_root) {
+  tempst=step_head.next;
+  while (tempst!=&step_head) {
     if (tS-tempst->t0<2.0)
       dc->color=DKGRAY;
     else
@@ -171,8 +171,8 @@ U0 DrawIt(CTask *task,CDC *dc)
   DCDepthBufAlloc(dc);
   dc->flags|=DCF_TRANSFORMATION;
   dc->pen_width=1;
-  tempp=peasant_root.next;
-  while (tempp!=&peasant_root) {
+  tempp=peasant_head.next;
+  while (tempp!=&peasant_head) {
     Mat4x4IdentEqu(r);
     Mat4x4RotY(r,tempp->é+ã/2);
     Mat4x4RotX(r,ã/6);
@@ -230,7 +230,7 @@ U0 StepNew(CTask *task,I64 x,I64 y,F64 
     temps->x=x;
     temps->y=y;
     temps->t0=tS;
-    QueIns(temps,king_step_root.last);
+    QueIns(temps,king_step_head.last);
   }
 
   if (left_right) {
@@ -238,23 +238,23 @@ U0 StepNew(CTask *task,I64 x,I64 y,F64 
     temps->x=x-3.5*Sin(é)+2.0*Cos(é);
     temps->y=y+3.5*Cos(é)+2.0*Sin(é);
     temps->t0=tS;
-    QueIns(temps,step_root.last);
+    QueIns(temps,step_head.last);
     temps=MAlloc(sizeof(Step),task);
     temps->x=x-3.5*Sin(é)+5.0*Cos(é);
     temps->y=y+3.5*Cos(é)+5.0*Sin(é);
     temps->t0=tS;
-    QueIns(temps,step_root.last);
+    QueIns(temps,step_head.last);
   } else {
     temps=MAlloc(sizeof(Step),task);
     temps->x=x+3.5*Sin(é)+0.0*Cos(é);
     temps->y=y-3.5*Cos(é)+0.0*Sin(é);
     temps->t0=tS;
-    QueIns(temps,step_root.last);
+    QueIns(temps,step_head.last);
     temps=MAlloc(sizeof(Step),task);
     temps->x=x+3.5*Sin(é)+3.0*Cos(é);
     temps->y=y-3.5*Cos(é)+3.0*Sin(é);
     temps->t0=tS;
-    QueIns(temps,step_root.last);
+    QueIns(temps,step_head.last);
   }
 }
 
@@ -275,11 +275,11 @@ U0 Init()
     trees[i].fire_frame_idx=0;
   }
 
-  QueInit(&step_root);
-  QueInit(&king_step_root);
+  QueInit(&step_head);
+  QueInit(&king_step_head);
 
   SpriteExtents($IB,"<12>",BI=12$,&min_x,&max_x,&min_y,&max_y);
-  QueInit(&peasant_root);
+  QueInit(&peasant_head);
   for (i=0;ix=RandU16%(w-2*BORDER-(max_x-min_x+1))+BORDER-min_x;
@@ -287,7 +287,7 @@ U0 Init()
     tempp->é=ã*2*Rand;
     tempp->door_opened_t0=0;
     tempp->stopped=FALSE;
-    QueIns(tempp,peasant_root.last);
+    QueIns(tempp,peasant_head.last);
   }
   animate_phase=0;
   animate_mS=0;
@@ -305,16 +305,16 @@ U0 Init()
 U0 CleanUp()
 {
   DCDel(snow_tile);
-  QueDel(&peasant_root,TRUE);
-  QueDel(&step_root,TRUE);
-  QueDel(&king_step_root,TRUE);
+  QueDel(&peasant_head,TRUE);
+  QueDel(&step_head,TRUE);
+  QueDel(&king_step_head,TRUE);
 }
 
 U0 Follow(CTask *,Peasant *tempp)
 {
-  Step *temps=king_step_root.next;
+  Step *temps=king_step_head.next;
   F64 d,best_d=MAX_F64;
-  while (temps!=&king_step_root) {
+  while (temps!=&king_step_head) {
     if ((d=Sqr(temps->x-tempp->x)+Sqr(temps->y-tempp->y)) &&
 	  d<15*15) {
       d+=1000*Sqr(tS-temps->t0);
@@ -336,8 +336,8 @@ U0 AnimateTask(I64)
     w=Fs->parent_task->pix_width;
     h=Fs->parent_task->pix_height;
 
-    temps=step_root.next;
-    while (temps!=&step_root) {
+    temps=step_head.next;
+    while (temps!=&step_head) {
       temps1=temps->next;
       if (tS-temps->t0>5.0) {
 	QueRem(temps);
@@ -346,8 +346,8 @@ U0 AnimateTask(I64)
       temps=temps1;
     }
 
-    temps=king_step_root.next;
-    while (temps!=&king_step_root) {
+    temps=king_step_head.next;
+    while (temps!=&king_step_head) {
       temps1=temps->next;
       if (tS-temps->t0>3.0) {
 	QueRem(temps);
@@ -357,8 +357,8 @@ U0 AnimateTask(I64)
     }
 
     not_stopped_cnt=0;
-    tempp=peasant_root.next;
-    while (tempp!=&peasant_root) {
+    tempp=peasant_head.next;
+    while (tempp!=&peasant_head) {
       if (tempp->stopped) {
 	if (tempp->door_opened_t0 && tS>tempp->door_opened_t0+1.0) {
 	  tempp->door_opened_t0=0;
diff --git a/Demo/Games/Zing.CPP b/Demo/Games/Zing.CPP
index 2b7227e6a72dd713ecf66f8b2ef9274a3c708d2d..c519ffebef5341eda7472b97fa0fb57ce192ebd4 100644
GIT binary patch
delta 111
zcmX@7a!zGJ3QI<6V#>yhNo-)oz*W`-=!kbrfvob=A*uwLH8Nym2u#6D^Zr&z4

delta 111
zcmX@7a!zGJ3QJLbe#yp+No-)oz*W`-=!kbrfvob=A*uwLH8Nym2u#6D^$Sfzz

diff --git a/Demo/Graphics/Pick3D.CPP b/Demo/Graphics/Pick3D.CPP
index 32277b014c14e38942660c577a7b0fe2a093cbb5..253f8992e67b30e27b9866b206d950e6f96cb7e7 100644
GIT binary patch
delta 163
zcmaE6{LFZRH4{rlYGTS}dnOA;Fl%x(^9?X#b2!Uc7EX|)UQS|h$z(=8vCYn$vl$^m
zd8rj8lkad#f|XAG$t^!wnR^+8bCz2J%-H;syNy{DYye2LZ9$r@U4A^64>HhJ4I!|3
T34cGtA(PF8)F8SOg<9DGMyWWn

delta 163
zcmaE6{LFZRH4{rwetyYjdnOA;Fl%x(^9?X#b2!Uc7EX|)UQS|h$z(=8vCYn$vl$^m
zd8rj8lkad#f|XAG$t^!wnR^+8bCz2J%-H;syNy{DYye2LZ9$r@U4A^64>HhJ4I!|3
T34cGtA(PF8)F8SOg<9DG6dpT0

diff --git a/Demo/Graphics/SpritePlot.CPP b/Demo/Graphics/SpritePlot.CPP
index 5f8ce77015a13c6f409310d32879d621e9390661..14a3883c33f7bb209dfd38e207f85350d5b26737 100644
GIT binary patch
delta 95
zcmaFB^_gqKUq}brKFZ+CZ{SS=jWBAR+LPh$Yd(0P@a*Qld4dXk*bhi
zl95`(HTgP|F~34mszOm}N>O5Yo?*JMd%Ssn$2kc`Y?g_P9Xe6G!o%<@bCp06M{

delta 73
zcmey&^?+-`U&cvHQzkEFG8N=1&&bS4RVc|wRmd;NNG(#B{F2F-pDQUv

diff --git a/Demo/Lectures/PCIInterrupts.CPP b/Demo/Lectures/PCIInterrupts.CPP
index 6cc3dd4..bc0c5b9 100644
--- a/Demo/Lectures/PCIInterrupts.CPP
+++ b/Demo/Lectures/PCIInterrupts.CPP
@@ -11,25 +11,25 @@
 interrupt U0 IntMy40()
 {
   lock {progress1++;}
-*LAPIC_EOI(U32 *)=0;
+*(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
 }
 
 interrupt U0 IntMy41()
 {
   lock {progress2++;}
-*LAPIC_EOI(U32 *)=0;
+*(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
 }
 
 interrupt U0 IntMy42()
 {
   lock {progress3++;}
-*LAPIC_EOI(U32 *)=0;
+*(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
 }
 
 interrupt U0 IntMy43()
 {
   lock {progress4++;}
-*LAPIC_EOI(U32 *)=0;
+*(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
 }
 
 I64 vect[4]={&IntMy40,&IntMy41,&IntMy42,&IntMy43};
@@ -37,8 +37,8 @@ I64 vect[4]={&IntMy40,&IntMy41,&IntMy42,&IntMy43};
 U0 Main()
 {
   I64 i;
-  U8 *da=IOAPIC_REG;
-  U32 *_d=IOAPIC_DATA;
+  U8 *da=dev.uncached_alias+IOAPIC_REG;
+  U32 *_d=dev.uncached_alias+IOAPIC_DATA;
 
   ProgressBarsRst;
   for (i=I_USER;inum,Gs->num);
+    DocPrint(doc,"$$FG,%d$$CPU%d ",Gs->num&15,Gs->num);
 }
 
 U0 MPPrintDemo()
diff --git a/Demo/MultiCore/RadixSort.CPP b/Demo/MultiCore/RadixSort.CPP
index 9b4e71c..53b3e4f 100644
--- a/Demo/MultiCore/RadixSort.CPP
+++ b/Demo/MultiCore/RadixSort.CPP
@@ -132,7 +132,7 @@ U0 MPRadixSortDemo(I64 dummy=0)
 
 MPRadixSortDemo;
 
-/*$HL,0$ Ress on 8 Cores 3.397GHz Core i7:
+/*$HL,0$ Results on 8 Cores 3.397GHz Core i7:
 $FG,2$QSort$FG$
 Time: 0.759998
 $FG,2$QSortU32$FG$
diff --git a/Demo/MultiCore/RateCores.CPP b/Demo/MultiCore/RateCores.CPP
new file mode 100644
index 0000000..3f060af
--- /dev/null
+++ b/Demo/MultiCore/RateCores.CPP
@@ -0,0 +1,46 @@
+Bool mp_start,mp_end;
+I64 mp_not_done_flags,
+    **glbl_cnts;
+
+U0 MPRateCores(I64 )
+{
+  I64 i=0;
+  while (!mp_start)
+    Yield;
+  while (!mp_end) {
+    i++;
+    Yield;
+  }
+  glbl_cnts[Gs->num]=i;
+  LBtr(&mp_not_done_flags,Gs->num);
+}
+
+U0 RateCores()
+{
+  I64 i;
+  F64 t0,tf;
+  glbl_cnts=CAlloc(sizeof(I64)*mp_cnt);
+
+  mp_start=mp_end=FALSE;
+  mp_not_done_flags=1<root.next!=doc_in) {
+  while (doc_in->head.next!=doc_in) {
     EdLineDown(doc_in,SC_CURSOR_DOWN|SCF_SHIFT);
     EdCutToClipboard(doc_in);
     DocTop(doc_out);
diff --git a/Demo/Templates/Util2.CPP b/Demo/Templates/Util2.CPP
index d85dba5..6351889 100644
--- a/Demo/Templates/Util2.CPP
+++ b/Demo/Templates/Util2.CPP
@@ -4,7 +4,7 @@ I64 MyUtilDoc(CDoc *doc,I64 fuf_flags)
   I64 res=0;
   CDocEntry *doc_e;
   DocRecalc(doc);
-  doc_e=doc->root.next;
+  doc_e=doc->head.next;
   while (doc_e!=doc) {
     res++;
     doc_e=doc_e->next;
diff --git a/Demo/ToHtmlToTXTDemo/DemoInPage.TXT b/Demo/ToHtmlToTXTDemo/DemoInPage.TXT
index c021a65..ebdcd61 100644
--- a/Demo/ToHtmlToTXTDemo/DemoInPage.TXT
+++ b/Demo/ToHtmlToTXTDemo/DemoInPage.TXT
@@ -1,31 +1,28 @@
-$WW,1$$FG,5$$TX+CX,"The Temple Operating System"$$FG,4$
+$WW,1$$FG,5$$TX+CX,"The Temple Operating System"$$FG,0$
+$FG,4$
+$LK,"Download Operating System",A="FI:::/Home/Web/DownloadOS.TXT"$		$LK,"App Store",A="FI:::/Home/Web/AppStore.TXT"$
 
-$TX,"Downloads",HTML="http://www.templeos.org/Wb/Home/Web/Downloads.html"$				$TX,"Screen Shots",HTML="http://www.templeos.org/Wb/Home/Web/ScreenShots.html"$
+$LK,"Screen Shots",A="FI:::/Home/Web/ScreenShots.TXT"$				$LK,"Instructional Videos",A="FI:::/Home/Web/TOSVideos.TXT"$
 
 $LK,"Introduction",A="FI:::/Doc/Welcome.TXT"$				$LK,"F.A.Q.",A="FI:::/Doc/FAQ.TXT"$
 
 $LK,"Features",A="FI:::/Doc/Features.TXT"$				$LK,"The Charter",A="FI:::/Doc/Charter.TXT"$
 
-$LK,"TempleOS Help",A="FI:::/Doc/HelpIndex.TXT"$				$TX,"Instructional YouTube Videos",HTML="http://www.templeos.org/Wb/Home/Web/TempleOSVideos.html"$
-
-$LK,"Source Code By File",A="FF:~/Web/LineRep.TXT,KStart.CPP"$			$TX,"Source Code (Raw)",HTML="http://www.templeos.org/Wb/"$
+$LK,"Source Code By File",A="FF:~/Web/LineRep.TXT,KStart16.CPP"$			$TX,"Source Code (Raw)",HTML="http://www.templeos.org/Wb/"$
 
 $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.TXT"$				$LK,"History of TempleOS",A="FI:::/Home/Web/History.TXT"$
 
-$TX,"Misc TempleOS Files For Download",HTML="http://www.templeos.org/Wb/Home/Downloads"$	$LK,"3rd-Party TempleOS Files For Download",A="FI:~/Web/3rdParty.TXT"$
-
-$LK,"Change Log",A="FI:::/Doc/ChangeLog.TXT"$				$TX,"The History of TempleOS",HTML="http://www.templeos.org/Wb/Home/Web/History.html"$		
-
-$TX,"About Terry Davis",HTML="http://www.templeos.org/Wb/Home/Web/TAD/TAD.html"$			$LK,"TempleOS Credits",A="FI:::/Doc/Credits.TXT"$
-
+$LK,"TempleOS Credits",A="FI:::/Doc/Credits.TXT"$			$LK,"About Terry Davis",A="FI:::/Home/Web/TAD/TAD.TXT"$
 $FG$
-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.  The IRA is the NRA for computer people.
+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,""$
 
 TempleOS is a free, public domain, open source, $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$, non-preemptive multi-tasking, multi-cored, $FG,4$$TX,"ring-0-only",HTML="http://en.wikipedia.org/wiki/Ring_(computer_security)"$$FG$, single-address-map ($FG,4$$TX,"identity-mapped",HTML="http://en.wikipedia.org/wiki/Identity_(mathematics)"$$FG$), non-networked, PC operating system.  Paging is, basically, not used.
 
-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,"80,928",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,046",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.
 
@@ -41,7 +38,7 @@ $HC,""$
 
-I wrote all $LK,"118,851",A="FF:~/Web/LineRep.TXT,Kernel.PRJ",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the last $TX,"12.5",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,430",A="FF:~/Web/LineRep.TXT,Kernel.PRJ",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the last $TX,"12.9",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" was a trademark owned by Commodore Business Machines.
diff --git a/Demo/ToHtmlToTXTDemo/ToHtml.CPP b/Demo/ToHtmlToTXTDemo/ToHtml.CPP
index 290ee87..c2df55d 100644
--- a/Demo/ToHtmlToTXTDemo/ToHtml.CPP
+++ b/Demo/ToHtmlToTXTDemo/ToHtml.CPP
@@ -148,7 +148,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";
@@ -166,7 +166,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	"\n");
   DocPrint(doc_out,"%s",body_header);
 
-  doc_e=doc_in->root.next;
+  doc_e=doc_in->head.next;
   col=doc_e->x;
   y=doc_e->y;
   while (doc_e!=doc_in) {
@@ -219,7 +219,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	case DOCT_TEXT:
 	  if (doc_e->de_flags&DOCEF_HIGHLIGHT) {
 	    if (doc_e->last==doc_in)
-	      MemCpy(&doc_e->settings,&doc_in->settings_root,
+	      MemCpy(&doc_e->settings,&doc_in->settings_head,
 		    sizeof(CDocSettings));
 	    else
 	      MemCpy(&doc_e->settings,&doc_e->last->settings,
@@ -290,7 +290,7 @@ public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,
 	    ".c%02X{color:#%02x%02x%02x;background-color:#%02x%02x%02x;}\n",
 	    i,p[i&15].r>>8,p[i&15].g>>8,p[i&15].b>>8,
 	    p[i/16].r>>8,p[i/16].g>>8,p[i/16].b>>8);
-  doc_out->cur_entry=&doc_out->root;
+  doc_out->cur_entry=&doc_out->head;
   DocRecalc(doc_out);
 
   doc_in->win_task->text_attr=old_attr;
diff --git a/Demo/WebLogDemo/WebLogRep.CPP b/Demo/WebLogDemo/WebLogRep.CPP
index 1d59f05..2b619d7 100644
--- a/Demo/WebLogDemo/WebLogRep.CPP
+++ b/Demo/WebLogDemo/WebLogRep.CPP
@@ -39,11 +39,11 @@ U0 LogStructDel(LogStruct *templg)
   Free(templg);
 }
 
-U0 PrsSingleLogFile(LogStruct *root,U8 *name,CDate *_start,CDate *_end)
+U0 PrsSingleLogFile(LogStruct *head,U8 *name,CDate *_start,CDate *_end)
 {
   CDoc *doc=DocRead(name,
 	DOCF_PLAIN_TEXT_TABS|DOCF_DBL_DOLLARS|DOCF_NO_CURSOR);
-  CDocEntry *doc_e=doc->root.next;
+  CDocEntry *doc_e=doc->head.next;
   U8 *src,*src2,*mon_lst=Define("ST_MONTHS");
   LogStruct *templg;
   CDateStruct ds;
@@ -117,7 +117,7 @@ U0 PrsSingleLogFile(LogStruct *root,U8 *name,CDate *_start,CDate *_end)
 	  templg->link=StrNew(src);
 	  src=++src2;
 
-	  QueIns(templg,root->last);
+	  QueIns(templg,head->last);
 	} else if (!StrNCmp(src,"HEAD ",5)) {
 	  LogStructDel(templg);
 	} else
@@ -135,38 +135,38 @@ U0 PrsSingleLogFile(LogStruct *root,U8 *name,CDate *_start,CDate *_end)
 
 LogStruct *PrsLogFiles(U8 *files_find_mask,CDate *_start,CDate *_end)
 {
-  LogStruct *root=CAlloc(sizeof(LogStruct));
+  LogStruct *head=CAlloc(sizeof(LogStruct));
   CDirEntry *tempde=FilesFind(files_find_mask),*tempde1=tempde;
-  QueInit(root);
+  QueInit(head);
   while (tempde) {
-    PrsSingleLogFile(root,tempde->full_name,_start,_end);
+    PrsSingleLogFile(head,tempde->full_name,_start,_end);
     tempde=tempde->next;
   }
   DirTreeDel(tempde1);
-  return root;
+  return head;
 }
 
-U0 LogLstDel(LogStruct *root)
+U0 LogLstDel(LogStruct *head)
 {
-  LogStruct *templg=root->next,*templg1;
-  while (templg!=root) {
+  LogStruct *templg=head->next,*templg1;
+  while (templg!=head) {
     templg1=templg->next;
     LogStructDel(templg);
     templg=templg1;
   }
 }
 
-U0 BlockedStructAdd(BlockedStruct *root,U32 ip_num)
+U0 BlockedStructAdd(BlockedStruct *head,U32 ip_num)
 {
   BlockedStruct *tempb=CAlloc(sizeof(BlockedStruct));
   tempb->ip_num=ip_num;
-  QueIns(tempb,root->last);
+  QueIns(tempb,head->last);
 }
 
-Bool IsBlocked(BlockedStruct *root,U32 ip_num)
+Bool IsBlocked(BlockedStruct *head,U32 ip_num)
 {
-  BlockedStruct *tempb=root->next;
-  while (tempb!=root) {
+  BlockedStruct *tempb=head->next;
+  while (tempb!=head) {
     if (tempb->ip_num==ip_num)
       return TRUE;
     tempb=tempb->next;
@@ -174,40 +174,41 @@ Bool IsBlocked(BlockedStruct *root,U32 ip_num)
   return FALSE;
 }
 
-U0 BlockIPNums(LogStruct *root)
+U0 BlockIPNums(LogStruct *head)
 {
-  BlockedStruct blocked_root;
-  LogStruct *templg=root->next,*templg1;
+  BlockedStruct blocked_head;
+  LogStruct *templg=head->next,*templg1;
 
-  QueInit(&blocked_root);
+  QueInit(&blocked_head);
 
-  BlockedStructAdd(&blocked_root,70<<24+173<<16+110<<8+214);
-  BlockedStructAdd(&blocked_root,68<<24+224<<16+130<<8+96);
-  BlockedStructAdd(&blocked_root,68<<24+96<<16+100<<8+126);
-  BlockedStructAdd(&blocked_root,68<<24+96<<16+110<<8+213);
-  BlockedStructAdd(&blocked_root,68<<24+96<<16+242<<8+108);
-  BlockedStructAdd(&blocked_root,68<<24+227<<16+61<<8+11);
+  BlockedStructAdd(&blocked_head,70<<24+173<<16+110<<8+214);
+  BlockedStructAdd(&blocked_head,68<<24+224<<16+130<<8+96);
+  BlockedStructAdd(&blocked_head,68<<24+96<<16+100<<8+126);
+  BlockedStructAdd(&blocked_head,68<<24+96<<16+110<<8+213);
+  BlockedStructAdd(&blocked_head,68<<24+96<<16+242<<8+108);
+  BlockedStructAdd(&blocked_head,68<<24+227<<16+61<<8+11);
+  BlockedStructAdd(&blocked_head,68<<24+227<<16+61<<8+139);
 
   //pass 1: collect robot lst
-  while (templg!=root) {
+  while (templg!=head) {
     if (StrIMatch("ROBOT",templg->file) &&
-	  !IsBlocked(&blocked_root,templg->ip_num))
-      BlockedStructAdd(&blocked_root,templg->ip_num);
+	  !IsBlocked(&blocked_head,templg->ip_num))
+      BlockedStructAdd(&blocked_head,templg->ip_num);
     templg=templg->next;
   }
 
   //pass 2: removed blocked ip_nums
-  templg=root->next;
-  while (templg!=root) {
+  templg=head->next;
+  while (templg!=head) {
     templg1=templg->next;
-    if (IsBlocked(&blocked_root,templg->ip_num)) {
+    if (IsBlocked(&blocked_head,templg->ip_num)) {
       QueRem(templg);
       LogStructDel(templg);
     }
     templg=templg1;
   }
 
-  QueDel(&blocked_root);
+  QueDel(&blocked_head);
 }
 
 Bool IsDownLoad(LogStruct *templg)
@@ -235,24 +236,24 @@ Bool IsIndex(LogStruct *templg)
     return FALSE;
 }
 
-Bool IPNumTreeAdd(LogStruct **_root,LogStruct *templg)
+Bool IPNumTreeAdd(LogStruct **_head,LogStruct *templg)
 {
-  LogStruct *root;
+  LogStruct *head;
   if (UnusedStk<0x200) {
     PrintErr("Stk Overflow");
     ThrowBreak;
   }
-  if (root=*_root) {
-    if (templg->ip_num==root->ip_num)
+  if (head=*_head) {
+    if (templg->ip_num==head->ip_num)
       return TRUE;
-    else if (templg->ip_numip_num)
-      return IPNumTreeAdd(&root->ip_num_left,templg);
+    else if (templg->ip_numip_num)
+      return IPNumTreeAdd(&head->ip_num_left,templg);
     else
-      return IPNumTreeAdd(&root->ip_num_right,templg);
+      return IPNumTreeAdd(&head->ip_num_right,templg);
   } else {
     templg->ip_num_left=NULL;
     templg->ip_num_right=NULL;
-    *_root=templg;
+    *_head=templg;
     return FALSE;
   }
 }
@@ -339,12 +340,12 @@ U0 FileTreeTraverse(LinkStruct *root)
   }
 }
 
-U0 DownLoadRep(LogStruct *root,CDate start,CDate end)
+U0 DownLoadRep(LogStruct *head,CDate start,CDate end)
 {
   I64 i,j,cnt,dups,
 	hours_start,hours_end,*hour_cnts,*dup_cnts,
 	days_start,days_end,*day_cnts,*day_dup_cnts;
-  LogStruct *templg=root->next,*dup_root=NULL;
+  LogStruct *templg=head->next,*dup_head=NULL;
   LinkStruct *link_root=NULL;
   CDateStruct ds;
 
@@ -359,13 +360,13 @@ U0 DownLoadRep(LogStruct *root,CDate start,CDate end)
   day_cnts =CAlloc((days_end-days_start+1)*sizeof(I64));
   day_dup_cnts=CAlloc((days_end-days_start+1)*sizeof(I64));
   dups=cnt=0;
-  while (templg!=root) {
+  while (templg!=head) {
     if (start<=templg->datetime<=end && IsDownLoad(templg)) {
       i=templg->datetime*24;
       hour_cnts[i.u32[1]-hours_start]++;
       day_cnts[(templg->datetime+local_time_offset)>>32-days_start]++;
       cnt++;
-      if (IPNumTreeAdd(&dup_root,templg)) {
+      if (IPNumTreeAdd(&dup_head,templg)) {
 	day_dup_cnts[(templg->datetime+local_time_offset)>>32-days_start]++;
 	dup_cnts[i.u32[1]-hours_start]++;
 	dups++;
@@ -408,11 +409,11 @@ U0 DownLoadRep(LogStruct *root,CDate start,CDate end)
   Free(day_dup_cnts);
 }
 
-U0 FileRep(LogStruct *root,CDate start,CDate end)
+U0 FileRep(LogStruct *head,CDate start,CDate end)
 {
-  LogStruct *templg=root->next;
+  LogStruct *templg=head->next;
   LinkStruct *file_root=NULL;
-  while (templg!=root) {
+  while (templg!=head) {
     if (start<=templg->datetime<=end)
       FileTreeAdd(&file_root,templg);
     templg=templg->next;
@@ -423,12 +424,12 @@ U0 FileRep(LogStruct *root,CDate start,CDate end)
   FileTreeDel(file_root);
 }
 
-U0 IndexRep(LogStruct *root,CDate start,CDate end)
+U0 IndexRep(LogStruct *head,CDate start,CDate end)
 {
   I64 i,j,cnt,dups,
 	hours_start,hours_end,*hour_cnts,*dup_cnts,
 	days_start,days_end,*day_cnts,*day_dup_cnts;
-  LogStruct *templg=root->next,*dup_root=NULL;
+  LogStruct *templg=head->next,*dup_head=NULL;
   LinkStruct *link_root=NULL;
   CDateStruct ds;
 
@@ -443,13 +444,13 @@ U0 IndexRep(LogStruct *root,CDate start,CDate end)
   day_cnts =CAlloc((days_end-days_start+1)*sizeof(I64));
   day_dup_cnts=CAlloc((days_end-days_start+1)*sizeof(I64));
   dups=cnt=0;
-  while (templg!=root) {
+  while (templg!=head) {
     if (start<=templg->datetime<=end && IsIndex(templg)) {
       i=templg->datetime*24;
       hour_cnts[i.u32[1]-hours_start]++;
       day_cnts[(templg->datetime+local_time_offset)>>32-days_start]++;
       cnt++;
-      if (IPNumTreeAdd(&dup_root,templg)) {
+      if (IPNumTreeAdd(&dup_head,templg)) {
 	day_dup_cnts[(templg->datetime+local_time_offset)>>32-days_start]++;
 	dup_cnts[i.u32[1]-hours_start]++;
 	dups++;
@@ -494,27 +495,27 @@ U0 IndexRep(LogStruct *root,CDate start,CDate end)
 
 U0 WebLogRep(U8 *mask,U8 *output_filename)
 {
-  LogStruct *root;
+  LogStruct *head;
   CDate start=MAX_I64,end=MIN_I64;
 
   DocMax;
 
-  root=PrsLogFiles(mask,&start,&end);
+  head=PrsLogFiles(mask,&start,&end);
   start=GetDate("Start(%D):",start);
   end  =GetDate("End  (%D):",end);
-  BlockIPNums(root);
+  BlockIPNums(head);
 
   DocClear;
   "$$WW,0$$";
-  IndexRep(root,start,end);
-  FileRep(root,start,end);
-  DownLoadRep(root,start,end);
+  IndexRep(head,start,end);
+  FileRep(head,start,end);
+  DownLoadRep(head,start,end);
 
   StrCpy(DocPut->filename.name,output_filename);
   DocWrite(DocPut,TRUE);
 
   "$$WW,1$$";
-  LogLstDel(root);
+  LogLstDel(head);
 }
 
 #if __CMD_LINE__
diff --git a/Demo/WebLogDemo/WebLogScramble.CPP b/Demo/WebLogDemo/WebLogScramble.CPP
index 08d90cd..61e0493 100644
--- a/Demo/WebLogDemo/WebLogScramble.CPP
+++ b/Demo/WebLogDemo/WebLogScramble.CPP
@@ -14,7 +14,7 @@ U0 InitKey()
 U0 LogScrambleFile(U8 *name)
 {
   CDoc *doc=DocRead(name,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR);
-  CDocEntry *doc_e=doc->root.next;
+  CDocEntry *doc_e=doc->head.next;
   I64 i;
   U32 num;
   U8 *st,*st2;
diff --git a/Demo/WebLogDemo/access_150211.LOG b/Demo/WebLogDemo/access_150211.LOG
index 91c1845..e8291c9 100644
--- a/Demo/WebLogDemo/access_150211.LOG
+++ b/Demo/WebLogDemo/access_150211.LOG
@@ -97,7 +97,7 @@
 130.98.70.92 - - [10/Feb/2015:01:53:47 -0800] "GET /Wb/Accts/TS/Web/TAD/2014/10/Rant141010.html HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Accts/TS/Web/TAD/2014/10/Rant141010.html" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRA 5.10 (build 5339); GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)" "www.templeos.org"
 151.190.39.120 - - [10/Feb/2015:01:53:52 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" "www.templeos.org"
 31.28.244.154 - - [10/Feb/2015:01:54:27 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?url=http://www.templeos.org/&rct=j&frm=1&q=&esrc=s&sa=U&ei=T9XZVMKfDcytPLv8gKgB&ved=0CBQQFjAA&usg=AFQjCNGE6bW93Hv9DZ0KcAYVUpQAPcF_aA" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF; InfoPath.3)" "www.templeos.org"
-31.28.244.154 - - [10/Feb/2015:01:54:30 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF; InfoPath.3)" "www.templeos.org"
+31.28.244.154 - - [10/Feb/2015:01:54:30 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF; InfoPath.3)" "www.templeos.org"
 82.153.251.69 - - [10/Feb/2015:01:59:33 -0800] "GET /Wb/Accts/TS/Web/WalkThru.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org"
 78.73.194.7 - - [10/Feb/2015:01:59:51 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 75.167.213.20 - - [10/Feb/2015:02:01:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2013/10/Rant131004.html HTTP/1.1" 404 89 "http://www.templeos.org/Wb/Accts/TS/Web/Rants/TAD/2013/10/Rant131004.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36" "www.templeos.org"
@@ -109,7 +109,7 @@
 211.88.221.103 - - [10/Feb/2015:02:09:05 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org"
 52.87.77.86 - - [10/Feb/2015:02:09:09 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org"
 52.53.176.225 - - [10/Feb/2015:02:09:13 -0800] "GET /Wb/Demo/DolDoc/Data.CPP.Z HTTP/1.1" 200 950 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
-52.87.77.86 - - [10/Feb/2015:02:09:43 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org"
+52.87.77.86 - - [10/Feb/2015:02:09:43 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org"
 119.225.240.174 - - [10/Feb/2015:02:10:24 -0800] "GET /Wb/Accts/TS/Web/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org"
 14.6.26.253 - - [10/Feb/2015:02:10:59 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org"
 14.6.26.253 - - [10/Feb/2015:02:11:07 -0800] "GET /Wb/Home/Web/Downloads.html HTTP/1.1" 200 7102 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org"
@@ -147,8 +147,8 @@
 164.219.42.247 - - [10/Feb/2015:02:37:48 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 18122752 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:02:37:48 -0800] "GET /logs/access.log HTTP/1.1" 200 32183 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:02:39:36 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-254.174.215.3 - - [10/Feb/2015:02:41:29 -0800] "GET /Wb/Home/Downloads/Text/Talmud.TXT HTTP/1.1" 200 849716 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
-254.174.215.3 - - [10/Feb/2015:02:42:32 -0800] "GET /Wb/Home/Downloads/Text/Talmud.TXT HTTP/1.1" 200 849716 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
+254.174.215.3 - - [10/Feb/2015:02:41:29 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Talmud.TXT HTTP/1.1" 200 849716 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
+254.174.215.3 - - [10/Feb/2015:02:42:32 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Talmud.TXT HTTP/1.1" 200 849716 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
 120.29.162.145 - - [10/Feb/2015:02:42:48 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org"
 120.29.162.145 - - [10/Feb/2015:02:43:08 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0" "www.templeos.org"
 27.210.37.158 - - [10/Feb/2015:02:47:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org"
@@ -172,8 +172,8 @@
 85.209.42.43 - - [10/Feb/2015:03:03:42 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 246.2.100.39 - - [10/Feb/2015:03:09:07 -0800] "GET /Wb/Adam/DevInfo.html HTTP/1.1" 200 110324 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 229.137.198.53 - - [10/Feb/2015:03:09:27 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 327680 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
-28.130.54.100 - - [10/Feb/2015:03:09:56 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
-50.26.245.193 - - [10/Feb/2015:03:12:00 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/Wb/Home/Web/TempleOSVideos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org"
+28.130.54.100 - - [10/Feb/2015:03:09:56 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
+50.26.245.193 - - [10/Feb/2015:03:12:00 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/Wb/Home/Web/TOSVideos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org"
 228.141.141.213 - - [10/Feb/2015:03:13:19 -0800] "GET /Wb/Apps/Psalmody/Examples/elijah.html HTTP/1.1" 200 34593 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 34.222.78.124 - - [10/Feb/2015:03:13:44 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 34.222.78.124 - - [10/Feb/2015:03:13:45 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
@@ -253,8 +253,8 @@
 148.120.95.68 - - [10/Feb/2015:04:52:46 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 75.176.241.118 - - [10/Feb/2015:04:53:12 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.es/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 75.176.241.118 - - [10/Feb/2015:04:53:14 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-75.176.241.118 - - [10/Feb/2015:04:53:21 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-148.120.95.68 - - [10/Feb/2015:04:53:27 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+75.176.241.118 - - [10/Feb/2015:04:53:21 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+148.120.95.68 - - [10/Feb/2015:04:53:27 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 148.120.95.68 - - [10/Feb/2015:04:54:13 -0800] "GET /Wb/Demo/Games/CastleFrankenstein.html HTTP/1.1" 200 259730 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 223.88.111.105 - - [10/Feb/2015:04:56:03 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
 75.176.241.118 - - [10/Feb/2015:04:56:25 -0800] "GET /Wb/Doc/RedSea.html HTTP/1.1" 200 23788 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -271,7 +271,7 @@
 228.141.169.196 - - [10/Feb/2015:05:24:45 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses58.html HTTP/1.1" 200 3650 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 222.32.254.206 - - [10/Feb/2015:05:30:20 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org"
 222.32.254.206 - - [10/Feb/2015:05:30:21 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org"
-222.32.254.206 - - [10/Feb/2015:05:30:55 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org"
+222.32.254.206 - - [10/Feb/2015:05:30:55 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.2; Nexus 7 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Safari/537.36" "www.templeos.org"
 164.176.61.156 - - [10/Feb/2015:05:30:58 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org"
 223.88.111.189 - - [10/Feb/2015:05:31:25 -0800] "GET /Wb/Doc/HelpIndex.html HTTP/1.1" 200 19954 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
 223.88.111.189 - - [10/Feb/2015:05:31:25 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
@@ -291,7 +291,7 @@
 34.222.78.124 - - [10/Feb/2015:06:13:46 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 34.222.78.124 - - [10/Feb/2015:06:13:47 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 52.53.176.0 - - [10/Feb/2015:06:17:23 -0800] "GET /Wb/Apps/AfterEgypt/?M=A HTTP/1.1" 200 4643 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
-130.183.37.67 - - [10/Feb/2015:06:19:52 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/Wb/Home/Web/TempleOSVideos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org"
+130.183.37.67 - - [10/Feb/2015:06:19:52 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40105 "http://www.templeos.org/Wb/Home/Web/TOSVideos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org"
 150.106.210.108 - - [10/Feb/2015:06:20:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 115.70.68.214 - - [10/Feb/2015:06:20:38 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://codigofonte.uol.com.br/artigos/o-programador-que-criou-um-os-para-falar-com-deus" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 115.70.68.214 - - [10/Feb/2015:06:20:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
@@ -312,7 +312,7 @@
 69.27.5.233 - - [10/Feb/2015:06:46:21 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" "www.templeos.org"
 69.27.5.233 - - [10/Feb/2015:06:46:22 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" "www.templeos.org"
 69.27.5.233 - - [10/Feb/2015:06:46:23 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://doska-vsem.ru/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)" "www.templeos.org"
-223.88.111.105 - - [10/Feb/2015:06:47:10 -0800] "GET /Wb/Home/Downloads HTTP/1.1" 301 105 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
+223.88.111.105 - - [10/Feb/2015:06:47:10 -0800] "GET /Wb/Home/Sup1 HTTP/1.1" 301 105 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
 223.88.111.105 - - [10/Feb/2015:06:47:10 -0800] "GET /Wb/ HTTP/1.1" 200 5158 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
 70.246.47.16 - - [10/Feb/2015:06:49:42 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "www.templeos.org"
 222.103.136.117 - - [10/Feb/2015:06:51:15 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org"
@@ -335,7 +335,7 @@
 16.21.117.141 - - [10/Feb/2015:07:32:31 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
 254.22.12.199 - - [10/Feb/2015:07:35:48 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
 3.169.79.157 - - [10/Feb/2015:07:36:02 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org"
-202.176.251.249 - - [10/Feb/2015:07:36:36 -0800] "GET /Wb/Home/Downloads/Words/Chess.html HTTP/1.1" 200 3015 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
+202.176.251.249 - - [10/Feb/2015:07:36:36 -0800] "GET /Wb/Home/Sup1/Sup1Words/Chess.html HTTP/1.1" 200 3015 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 254.22.12.199 - - [10/Feb/2015:07:37:59 -0800] "GET /Wb/Doc/Welcome.html HTTP/1.1" 200 24269 "http://www.templeos.org/Wb/Home/Web/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 228.141.141.213 - - [10/Feb/2015:07:37:59 -0800] "GET /Wb/Doc/StandBy.html HTTP/1.1" 200 4208 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 228.141.141.213 - - [10/Feb/2015:07:38:00 -0800] "GET /Wb/Adam/DolDoc/DocWidgetWiz.html HTTP/1.1" 200 654379 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
@@ -360,7 +360,7 @@
 69.200.5.39 - - [10/Feb/2015:08:18:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.4; D5803 Build/23.0.1.A.5.77) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 44.208.145.23 - - [10/Feb/2015:08:18:57 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12685 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 228.141.169.196 - - [10/Feb/2015:08:28:16 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
-199.55.138.47 - - [10/Feb/2015:08:48:17 -0800] "GET /Wb/Home/Downloads/ HTTP/1.1" 200 5204 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org"
+199.55.138.47 - - [10/Feb/2015:08:48:17 -0800] "GET /Wb/Home/Sup1/ HTTP/1.1" 200 5204 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16" "www.templeos.org"
 254.67.161.241 - - [10/Feb/2015:08:51:05 -0800] "GET /Wb/Accts/TS/Web/TAD/2014/05/Rant140501.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org"
 254.67.161.241 - - [10/Feb/2015:08:51:06 -0800] "GET /files/BIBLE.TXT HTTP/1.1" 200 655360 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org"
 254.67.161.241 - - [10/Feb/2015:08:51:08 -0800] "GET /Wb/Accts/TS/Web/TAD/2014/05/Rant140501.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) QuickLook/5.0" "www.templeos.org"
@@ -429,7 +429,7 @@
 127.173.116.46 - - [10/Feb/2015:10:01:59 -0800] "GET /old/wp-admin/ HTTP/1.1" 404 89 "-" "-" "templeos.org"
 112.129.154.164 - - [10/Feb/2015:10:03:54 -0800] "GET /Wb/Demo/Graphics/Doodle.html HTTP/1.1" 200 24250 "http://www.templeos.org/Wb/Doc/DemoIndex.html" "Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0" "www.templeos.org"
 127.33.79.31 - - [10/Feb/2015:10:06:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Opera/9.80 (Android; Opera Mini/7.6.40234/35.7194; U; pt) Presto/2.8.119 Version/11.10" "www.templeos.org"
-103.171.233.63 - - [10/Feb/2015:10:08:45 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org"
+103.171.233.63 - - [10/Feb/2015:10:08:45 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:10:08:46 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:10:08:53 -0800] "GET /Wb/Home/Web/LineRep.html HTTP/1.1" 200 110108 "http://www.templeos.org/Wb/Home/Web/TempleOS.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 213.160.102.96 - - [10/Feb/2015:10:12:38 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -440,14 +440,14 @@
 119.156.166.145 - - [10/Feb/2015:10:19:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 130.15.226.45 - - [10/Feb/2015:10:21:04 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org"
 52.53.176.137 - - [10/Feb/2015:10:27:25 -0800] "GET /Wb/Apps/Psalmody/Examples/readier.CPP.Z HTTP/1.1" 200 348 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
-136.232.213.50 - - [10/Feb/2015:10:33:47 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40265 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2301.0 Safari/537.36" "www.templeos.org"
+136.232.213.50 - - [10/Feb/2015:10:33:47 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40265 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2301.0 Safari/537.36" "www.templeos.org"
 136.232.213.50 - - [10/Feb/2015:10:34:11 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2301.0 Safari/537.36" "www.templeos.org"
 222.211.142.20 - - [10/Feb/2015:10:37:15 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 70.137.95.233 - - [10/Feb/2015:10:38:34 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:10:40:06 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 164.19.71.62 - - [10/Feb/2015:10:40:39 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.pt/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=pFDaVPLDCIP6avbKgpAO&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&sig2=tqQQ0-CmDA4jWipvsf5l2Q&bvm=bv.85464276,d.d2s" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 164.19.71.62 - - [10/Feb/2015:10:40:41 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-254.174.215.3 - - [10/Feb/2015:10:42:29 -0800] "GET /Wb/Home/Downloads/Text/Darwin.html HTTP/1.1" 200 1697615 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
+254.174.215.3 - - [10/Feb/2015:10:42:29 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Darwin.html HTTP/1.1" 200 1697615 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
 58.128.177.232 - - [10/Feb/2015:10:43:50 -0800] "GET /Certs/virtual-notary-cert-randomnum-29070.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 164.19.71.62 - - [10/Feb/2015:10:44:46 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 78.19.21.206 - - [10/Feb/2015:10:45:11 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 655360 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
@@ -485,12 +485,12 @@
 52.53.176.53 - - [10/Feb/2015:11:23:39 -0800] "GET /Wb/Apps/Budget/Load.CPP.Z HTTP/1.1" 200 136 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 58.128.177.232 - - [10/Feb/2015:11:25:53 -0800] "GET /beacon.nist.gov/rest/record/1417188660 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:11:26:06 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-58.71.218.57 - - [10/Feb/2015:11:26:10 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+58.71.218.57 - - [10/Feb/2015:11:26:10 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 112.201.223.166 - - [10/Feb/2015:11:26:49 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 172.177.247.196 - - [10/Feb/2015:11:29:01 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0" "www.templeos.org"
-222.58.71.125 - - [10/Feb/2015:11:31:16 -0800] "GET /Wb/Home/Downloads/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-222.58.71.125 - - [10/Feb/2015:11:31:59 -0800] "GET /Wb/Home/Downloads/Text/ HTTP/1.1" 200 5751 "http://www.templeos.org/Wb/Home/Downloads/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-222.58.71.125 - - [10/Feb/2015:11:32:03 -0800] "GET /Wb/Home/Downloads/VanGogh/ HTTP/1.1" 200 1007 "http://www.templeos.org/Wb/Home/Downloads/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+222.58.71.125 - - [10/Feb/2015:11:31:16 -0800] "GET /Wb/Home/Sup1/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+222.58.71.125 - - [10/Feb/2015:11:31:59 -0800] "GET /Wb/Home/Sup1/Sup1Texts/ HTTP/1.1" 200 5751 "http://www.templeos.org/Wb/Home/Sup1/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+222.58.71.125 - - [10/Feb/2015:11:32:03 -0800] "GET /Wb/Home/Sup1/VanGogh/ HTTP/1.1" 200 1007 "http://www.templeos.org/Wb/Home/Sup1/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 222.58.71.125 - - [10/Feb/2015:11:32:55 -0800] "GET /Wb/Kernel/BlkDev/FileSysRedSea.html HTTP/1.1" 200 342512 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 222.58.71.125 - - [10/Feb/2015:11:33:41 -0800] "GET /Wb/Adam/Opt/Boot/DskISO9660.html HTTP/1.1" 200 360031 "http://www.templeos.org/Wb/Doc/Demands.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 222.178.105.52 - - [10/Feb/2015:11:34:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -507,8 +507,8 @@
 56.76.208.168 - - [10/Feb/2015:11:59:16 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 56.76.208.168 - - [10/Feb/2015:11:59:20 -0800] "GET /Wb/Home/Web/TADRant.html HTTP/1.1" 200 37263 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 131.8.134.171 - - [10/Feb/2015:12:00:01 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
-232.70.57.249 - - [10/Feb/2015:12:01:17 -0800] "GET /Wb/Home/Downloads HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-232.70.57.249 - - [10/Feb/2015:12:01:18 -0800] "GET /Wb/Home/Downloads/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+232.70.57.249 - - [10/Feb/2015:12:01:17 -0800] "GET /Wb/Home/Sup1 HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+232.70.57.249 - - [10/Feb/2015:12:01:18 -0800] "GET /Wb/Home/Sup1/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 74.51.144.36 - - [10/Feb/2015:12:01:59 -0800] "GET /TempleOS.html HTTP/1.1" 200 12685 "-" "SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org"
 130.19.136.192 - - [10/Feb/2015:12:04:40 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org"
 130.19.136.192 - - [10/Feb/2015:12:04:40 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org"
@@ -533,8 +533,8 @@
 50.246.225.191 - - [10/Feb/2015:12:27:13 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
 104.133.41.223 - - [10/Feb/2015:12:28:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 228.141.169.196 - - [10/Feb/2015:12:29:13 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
-199.138.47.61 - - [10/Feb/2015:12:30:01 -0800] "GET /Wb/Home/Downloads/Text/Hamlet.html HTTP/1.1" 200 328768 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org"
-199.138.47.61 - - [10/Feb/2015:12:30:01 -0800] "GET /Wb/Home/Downloads/Text/Talmud.html HTTP/1.1" 200 458752 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org"
+199.138.47.61 - - [10/Feb/2015:12:30:01 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Hamlet.html HTTP/1.1" 200 328768 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org"
+199.138.47.61 - - [10/Feb/2015:12:30:01 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Talmud.html HTTP/1.1" 200 458752 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" "www.templeos.org"
 254.187.174.234 - - [10/Feb/2015:12:34:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 112.77.203.64 - - [10/Feb/2015:12:35:55 -0800] "GET /Wb/Doc/TrivialSolutions.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 215.73.32.178 - - [10/Feb/2015:12:38:07 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" "www.templeos.org"
@@ -552,7 +552,7 @@
 70.8.165.221 - - [10/Feb/2015:12:53:48 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
 70.8.165.221 - - [10/Feb/2015:12:53:51 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
 70.8.165.221 - - [10/Feb/2015:12:53:56 -0800] "GET /Wb/Home/Web/History.html HTTP/1.1" 200 7745 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
-70.8.165.221 - - [10/Feb/2015:12:54:02 -0800] "GET /Wb/Home/Downloads HTTP/1.1" 301 105 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
+70.8.165.221 - - [10/Feb/2015:12:54:02 -0800] "GET /Wb/Home/Sup1 HTTP/1.1" 301 105 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
 70.8.165.221 - - [10/Feb/2015:12:54:18 -0800] "GET /Wb/Home/Web/TADRant.html HTTP/1.1" 200 40133 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
 124.89.143.170 - - [10/Feb/2015:12:57:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
 124.89.143.170 - - [10/Feb/2015:12:57:52 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
@@ -664,7 +664,7 @@
 78.5.254.186 - - [10/Feb/2015:15:45:50 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 18.1.147.164 - - [10/Feb/2015:15:48:08 -0800] "GET / HTTP/1.1" 200 6329 "http://www.reddit.com/comments/1aqdxn" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org"
 18.1.147.164 - - [10/Feb/2015:15:48:09 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org"
-18.1.147.164 - - [10/Feb/2015:15:48:32 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org"
+18.1.147.164 - - [10/Feb/2015:15:48:32 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.43 Safari/537.36" "www.templeos.org"
 228.141.141.213 - - [10/Feb/2015:15:52:49 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses66.html HTTP/1.1" 200 3038 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 58.128.177.232 - - [10/Feb/2015:15:53:55 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2013/12/Rant131220.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 131.8.134.171 - - [10/Feb/2015:15:55:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
@@ -681,7 +681,7 @@
 192.93.245.183 - - [10/Feb/2015:16:46:14 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36" "www.templeos.org"
 78.19.21.206 - - [10/Feb/2015:16:46:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 150.244.103.30 - - [10/Feb/2015:16:58:13 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 iPad4,5/J86AP Zite/2.6" "www.templeos.org"
-150.244.103.30 - - [10/Feb/2015:16:58:19 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 iPad4,5/J86AP Zite/2.6" "www.templeos.org"
+150.244.103.30 - - [10/Feb/2015:16:58:19 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257 iPad4,5/J86AP Zite/2.6" "www.templeos.org"
 119.225.240.14 - - [10/Feb/2015:16:59:20 -0800] "GET /Wb/Accts/TS/Web/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org"
 131.8.134.171 - - [10/Feb/2015:17:00:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
 112.77.76.210 - - [10/Feb/2015:17:02:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org"
@@ -699,8 +699,8 @@
 58.71.218.57 - - [10/Feb/2015:17:27:07 -0800] "GET /Wb/Home/Web/TADRant.html HTTP/1.1" 200 111157 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 108.25.30.75 - - [10/Feb/2015:17:27:09 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 108.25.30.75 - - [10/Feb/2015:17:27:10 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-108.25.30.75 - - [10/Feb/2015:17:30:17 -0800] "GET /Wb/Home/Downloads/ HTTP/1.1" 200 5204 "http://t.co/9n6tiOcMYh" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-108.25.30.75 - - [10/Feb/2015:17:30:37 -0800] "GET /Wb/Home/Downloads/DocIDE.CPP.Z HTTP/1.1" 200 6028 "http://www.templeos.org/Wb/Home/Downloads/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+108.25.30.75 - - [10/Feb/2015:17:30:17 -0800] "GET /Wb/Home/Sup1/ HTTP/1.1" 200 5204 "http://t.co/9n6tiOcMYh" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+108.25.30.75 - - [10/Feb/2015:17:30:37 -0800] "GET /Wb/Home/Sup1/DocIDE.CPP.Z HTTP/1.1" 200 6028 "http://www.templeos.org/Wb/Home/Sup1/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 189.40.12.106 - - [10/Feb/2015:17:35:40 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org"
 202.176.251.73 - - [10/Feb/2015:17:37:54 -0800] "GET /Wb/Adam/DolDoc/DocNew.html HTTP/1.1" 200 448384 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 58.128.177.232 - - [10/Feb/2015:17:39:45 -0800] "GET /beacon.nist.gov/rest/record/1416785100 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
@@ -738,8 +738,8 @@
 111.7.18.116 - - [10/Feb/2015:18:41:08 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 112.77.76.210 - - [10/Feb/2015:18:43:42 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org"
 112.77.76.210 - - [10/Feb/2015:18:46:20 -0800] "GET /Wb/Home/Web/3rdParty.html HTTP/1.1" 200 3094 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org"
-228.191.84.89 - - [10/Feb/2015:18:49:49 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/Wb/Home/Web/TempleOSVideos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 YaBrowser/14.10.2062.12061 Safari/537.36" "www.templeos.org"
-82.223.38.239 - - [10/Feb/2015:18:52:38 -0800] "GET /Wb/Home/Downloads/Text/Paradise.html HTTP/1.1" 200 704139 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org"
+228.191.84.89 - - [10/Feb/2015:18:49:49 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/Wb/Home/Web/TOSVideos.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 YaBrowser/14.10.2062.12061 Safari/537.36" "www.templeos.org"
+82.223.38.239 - - [10/Feb/2015:18:52:38 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Paradise.html HTTP/1.1" 200 704139 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org"
 159.151.172.112 - - [10/Feb/2015:18:54:49 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org"
 159.151.172.112 - - [10/Feb/2015:18:54:51 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org"
 131.8.134.171 - - [10/Feb/2015:18:55:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150210.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
@@ -752,7 +752,7 @@
 52.53.176.179 - - [10/Feb/2015:19:19:38 -0800] "GET /Wb/Demo/DolDoc/CallBack.html HTTP/1.1" 200 37017 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 126.106.40.164 - - [10/Feb/2015:19:21:42 -0800] "GET / HTTP/1.1" 200 6329 "http://www.losethos.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 126.106.40.164 - - [10/Feb/2015:19:21:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-126.106.40.164 - - [10/Feb/2015:19:22:16 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+126.106.40.164 - - [10/Feb/2015:19:22:16 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 27.241.156.119 - - [10/Feb/2015:19:26:35 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:19:26:58 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:19:28:39 -0800] "GET /Wb/Home/Web/TADRant.html HTTP/1.1" 200 136360 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
@@ -791,14 +791,14 @@
 89.174.197.231 - - [10/Feb/2015:20:25:40 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 74.51.200.50 - - [10/Feb/2015:20:26:19 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org"
 70.90.255.16 - - [10/Feb/2015:20:30:46 -0800] "GET /Wb/Home/Web/Downloads.html HTTP/1.1" 200 7086 "http://templeos.org/" "Mozilla/5.0 (X11; Linux i686; rv:25.2) Gecko/20150123 Firefox/31.9 PaleMoon/25.2.1" "www.templeos.org"
-136.88.5.205 - - [10/Feb/2015:20:31:59 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+136.88.5.205 - - [10/Feb/2015:20:31:59 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 74.51.144.214 - - [10/Feb/2015:20:33:29 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org"
 224.253.247.40 - - [10/Feb/2015:20:34:26 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Linux; Android 4.4.2; SGH-I337M Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 224.253.247.40 - - [10/Feb/2015:20:34:27 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 4.4.2; SGH-I337M Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 58.71.218.57 - - [10/Feb/2015:20:41:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 52.53.176.137 - - [10/Feb/2015:20:44:58 -0800] "GET /Wb/Demo/?N=A HTTP/1.1" 200 10926 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 241.159.189.144 - - [10/Feb/2015:20:47:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko" "www.templeos.org"
-240.94.100.138 - - [10/Feb/2015:20:47:39 -0800] "GET /Wb/Home/Downloads/Text/Yankee.TXT HTTP/1.1" 200 663207 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
+240.94.100.138 - - [10/Feb/2015:20:47:39 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Yankee.TXT HTTP/1.1" 200 663207 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
 58.128.177.232 - - [10/Feb/2015:20:50:23 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2014/08/Rant140831.TXT.Z HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 112.233.185.37 - - [10/Feb/2015:20:51:08 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org"
 87.5.200.32 - - [10/Feb/2015:20:52:55 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://na-verh.ru/" "Opera/7.54 (Windows NT 5.1; U)  [pl]" "www.templeos.org"
@@ -894,7 +894,7 @@
 199.38.39.172 - - [10/Feb/2015:23:06:30 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "http://www.linux.org/threads/linux-kernel-vs-other-kernels.6026/" "Opera/9.80 (Android; Opera Mini/7.6.40234/35.7194; U; en) Presto/2.8.119 Version/11.10" "www.templeos.org"
 199.58.211.111 - - [10/Feb/2015:23:09:29 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 98.20.198.134 - - [10/Feb/2015:23:09:31 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-98.20.198.134 - - [10/Feb/2015:23:09:51 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+98.20.198.134 - - [10/Feb/2015:23:09:51 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 178.0.187.99 - - [10/Feb/2015:23:13:04 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 78.19.21.206 - - [10/Feb/2015:23:17:41 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 129.226.244.66 - - [10/Feb/2015:23:25:01 -0800] "GET /Wb/Kernel/FunSeg.html HTTP/1.1" 200 151686 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
@@ -938,7 +938,7 @@
 74.187.37.30 - - [10/Feb/2015:23:54:34 -0800] "GET /Wb/Accts/TS/Web/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org"
 69.185.167.13 - - [10/Feb/2015:23:54:53 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 131.8.134.171 - - [10/Feb/2015:23:55:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
-69.185.167.13 - - [10/Feb/2015:23:55:07 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
+69.185.167.13 - - [10/Feb/2015:23:55:07 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 5.0.1; Nexus 5 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 111.92.62.205 - - [10/Feb/2015:23:55:53 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org"
 111.92.62.205 - - [10/Feb/2015:23:55:54 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org"
 111.92.62.205 - - [10/Feb/2015:23:56:14 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36" "www.templeos.org"
diff --git a/Demo/WebLogDemo/access_150212.LOG b/Demo/WebLogDemo/access_150212.LOG
index bfa7a9d..ab7ba97 100644
--- a/Demo/WebLogDemo/access_150212.LOG
+++ b/Demo/WebLogDemo/access_150212.LOG
@@ -26,7 +26,7 @@
 58.128.177.232 - - [11/Feb/2015:00:37:06 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2013/11/Rant131108.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 202.176.250.234 - - [11/Feb/2015:00:38:24 -0800] "GET /Wb/Demo/MultiCore/RadixSort.html HTTP/1.1" 200 60928 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 52.221.226.64 - - [11/Feb/2015:00:39:38 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "templeos.org"
-127.101.53.207 - - [11/Feb/2015:00:40:12 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (Linux; Android 5.0.1; HTC One_M8 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36" "www.templeos.org"
+127.101.53.207 - - [11/Feb/2015:00:40:12 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (Linux; Android 5.0.1; HTC One_M8 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36" "www.templeos.org"
 58.128.177.232 - - [11/Feb/2015:00:42:10 -0800] "GET /Wb/Accts/TOS/Web/History.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 189.117.13.223 - - [11/Feb/2015:00:42:21 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org"
 27.241.156.119 - - [11/Feb/2015:00:50:41 -0800] "GET /Wb/Apps/Logic/Load.html HTTP/1.1" 200 3967 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
@@ -64,7 +64,7 @@
 214.200.131.51 - - [11/Feb/2015:01:22:58 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL ONE TOUCH 4037T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36" "www.templeos.org"
 25.28.235.97 - - [11/Feb/2015:01:23:05 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 165.169.82.82 - - [11/Feb/2015:01:25:10 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org"
-165.169.82.82 - - [11/Feb/2015:01:25:11 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org"
+165.169.82.82 - - [11/Feb/2015:01:25:11 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org"
 25.28.235.97 - - [11/Feb/2015:01:25:35 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 1 "http://www.templeos.org/Wb/Home/Web/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 25.28.235.97 - - [11/Feb/2015:01:26:37 -0800] "GET /TempleOSUltra.ISO HTTP/1.1" 200 1114112 "http://www.templeos.org/Wb/Home/Web/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 25.28.235.97 - - [11/Feb/2015:01:27:23 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "http://www.templeos.org/Wb/Home/Web/Downloads.html" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -210,7 +210,7 @@
 82.164.220.94 - - [11/Feb/2015:03:14:46 -0800] "GET / HTTP/1.1" 200 6329 "http://www.developpez.com/actu/77604/TempleOS-un-systeme-d-exploitation-pour-parler-a-Dieu-developpe-par-un-programmeur-schizophrene/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 130.195.45.202 - - [11/Feb/2015:03:20:16 -0800] "GET /Wb/Misc/Bible.html HTTP/1.1" 200 6439170 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org"
 106.255.105.30 - - [11/Feb/2015:03:22:03 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1b39333cdab5cb490d069fe62825a04&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2236.0 Safari/537.36" "www.templeos.org"
-52.53.176.129 - - [11/Feb/2015:03:24:32 -0800] "GET /Wb/Home/Downloads/HDAudio/Examples/BeatFreq.CPP.Z HTTP/1.1" 200 1167 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
+52.53.176.129 - - [11/Feb/2015:03:24:32 -0800] "GET /Wb/Home/Sup1/Sup1HDAudio/Examples/BeatFreq.CPP.Z HTTP/1.1" 200 1167 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 164.225.231.69 - - [11/Feb/2015:03:27:05 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" "www.templeos.org"
 228.48.95.108 - - [11/Feb/2015:03:31:51 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible;  Page2RSS/0.7; +http://page2rss.com/)" "www.templeos.org"
 131.17.77.111 - - [11/Feb/2015:03:32:40 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "www.templeos.org"
@@ -303,24 +303,24 @@
 225.106.229.210 - - [11/Feb/2015:05:38:27 -0800] "GET /Wb/Home/Web/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 254.230.43.236 - - [11/Feb/2015:05:38:49 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2298.0 Safari/537.36" "www.templeos.org"
 225.106.229.210 - - [11/Feb/2015:05:39:03 -0800] "GET /Wb/Doc/HolyC.html HTTP/1.1" 200 30095 "http://www.reddit.com/r/TempleOS_Official/comments/2q0k2l/how_can_i_learn_holyc/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:39:55 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.57 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:39:56 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT/register.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.57 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:39:56 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:39:55 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.57 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:39:56 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT/register.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.57 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:39:56 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
 121.55.32.121 - - [11/Feb/2015:05:39:57 -0800] "GET /register.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:39:58 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:39:58 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
 121.55.32.121 - - [11/Feb/2015:05:39:59 -0800] "GET /signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:39:59 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT/index.php?do=/user/register/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT/join.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT/index.php?action=register HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:01 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT/wikka.php?wakka=UserSettings HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:02 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:03 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT/tiki-register.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:03 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:39:59 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT/index.php?do=/user/register/ HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT/join.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:00 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT/index.php?action=register HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:01 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT/wikka.php?wakka=UserSettings HTTP/1.1" 404 89 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:02 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:03 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT/tiki-register.php HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:03 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
 121.55.32.121 - - [11/Feb/2015:05:40:04 -0800] "GET /login.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Downloads/Text/signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Downloads/Text/signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
-121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Downloads/Text/index.php?page=register HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Sup1/Sup1Texts/signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:14.0) Gecko/20100101 Firefox/14.0.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Sup1/Sup1Texts/signup.php HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1" "www.templeos.org"
+121.55.32.121 - - [11/Feb/2015:05:40:05 -0800] "GET /Wb/Home/Sup1/Sup1Texts/index.php?page=register HTTP/1.1" 200 73 "-" "Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1" "www.templeos.org"
 111.111.209.37 - - [11/Feb/2015:05:40:59 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "www.templeos.org"
 146.104.4.202 - - [11/Feb/2015:05:42:52 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/6.1.1 Safari/537.73.11" "www.templeos.org"
 127.229.168.75 - - [11/Feb/2015:05:43:03 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -468,16 +468,16 @@
 182.48.85.221 - - [11/Feb/2015:09:16:22 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 83.141.82.225 - - [11/Feb/2015:09:16:44 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ro/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 83.141.82.225 - - [11/Feb/2015:09:16:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-83.141.82.225 - - [11/Feb/2015:09:17:36 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+83.141.82.225 - - [11/Feb/2015:09:17:36 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 112.227.70.67 - - [11/Feb/2015:09:17:41 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2013/09/Rant130913.html HTTP/1.1" 404 89 "http://www.atheistfoundation.org.au/forums/showthread.php?t=21972" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org"
-202.176.251.130 - - [11/Feb/2015:09:21:48 -0800] "GET /Wb/Home/Downloads/?D=A HTTP/1.1" 200 5204 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
+202.176.251.130 - - [11/Feb/2015:09:21:48 -0800] "GET /Wb/Home/Sup1/?D=A HTTP/1.1" 200 5204 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 58.170.132.124 - - [11/Feb/2015:09:22:10 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org"
 58.170.132.124 - - [11/Feb/2015:09:22:12 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0" "www.templeos.org"
 228.141.169.196 - - [11/Feb/2015:09:22:23 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses71.html HTTP/1.1" 200 3232 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 78.19.21.206 - - [11/Feb/2015:09:24:35 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 10813440 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 150.57.222.231 - - [11/Feb/2015:09:26:00 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 224.223.108.49 - - [11/Feb/2015:09:28:09 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Googlebot (gocrawl v0.4)" "templeos.org"
-150.57.222.231 - - [11/Feb/2015:09:28:52 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+150.57.222.231 - - [11/Feb/2015:09:28:52 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 150.57.222.231 - - [11/Feb/2015:09:28:54 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 182.48.85.221 - - [11/Feb/2015:09:28:54 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 150.57.222.231 - - [11/Feb/2015:09:28:54 -0800] "GET /Wb/Doc/Demands.html HTTP/1.1" 200 11835 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -515,7 +515,7 @@
 87.5.200.32 - - [11/Feb/2015:10:18:58 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2014/06/Rant140618.html HTTP/1.1" 404 89 "http://vpihnul.ru/" "Opera/7.54 (Windows NT 5.1; U)  [pl]" "www.templeos.org"
 106.171.103.114 - - [11/Feb/2015:10:23:39 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.de/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org"
 228.141.141.213 - - [11/Feb/2015:10:25:18 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
-106.171.103.114 - - [11/Feb/2015:10:25:27 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org"
+106.171.103.114 - - [11/Feb/2015:10:25:27 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org"
 155.193.28.70 - - [11/Feb/2015:10:26:07 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 143.94.237.51 - - [11/Feb/2015:10:29:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 129.66.239.134 - - [11/Feb/2015:10:36:46 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Jakarta Commons-HttpClient/3.1" "www.templeos.org"
@@ -526,7 +526,7 @@
 190.223.163.164 - - [11/Feb/2015:10:40:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
 175.150.202.21 - - [11/Feb/2015:10:41:22 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org"
 106.171.103.114 - - [11/Feb/2015:10:43:46 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66" "www.templeos.org"
-75.167.213.212 - - [11/Feb/2015:10:46:39 -0800] "GET /Wb/Home/Downloads/Text/Hamlet.html HTTP/1.1" 200 328768 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org"
+75.167.213.212 - - [11/Feb/2015:10:46:39 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Hamlet.html HTTP/1.1" 200 328768 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org"
 171.24.44.123 - - [11/Feb/2015:10:48:36 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 61.39.72.30 - - [11/Feb/2015:10:52:15 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy)" "templeos.org"
 131.8.134.171 - - [11/Feb/2015:10:55:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
@@ -649,7 +649,7 @@
 112.240.191.115 - - [11/Feb/2015:13:44:04 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36" "www.templeos.org"
 74.51.214.50 - - [11/Feb/2015:13:44:52 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org"
 240.92.54.138 - - [11/Feb/2015:13:46:25 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-240.92.54.138 - - [11/Feb/2015:13:46:34 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+240.92.54.138 - - [11/Feb/2015:13:46:34 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 38.191.148.193 - - [11/Feb/2015:13:55:13 -0800] "GET /files/DICTIONARY.TXT HTTP/1.1" 200 2555904 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org"
 27.210.37.110 - - [11/Feb/2015:13:59:05 -0800] "GET /Wb/Kernel/Memory.html HTTP/1.1" 404 89 "-" "Twitterbot/1.0" "www.templeos.org"
 82.39.137.4 - - [11/Feb/2015:14:01:26 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=d1756393434cb7a7170f4fceda22c860&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
@@ -705,7 +705,7 @@
 193.22.148.87 - - [11/Feb/2015:14:52:26 -0800] "HEAD /TempleOSCD.ISO HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 2.0.50727)" "www.templeos.org"
 88.41.4.142 - - [11/Feb/2015:14:53:19 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 131.8.134.171 - - [11/Feb/2015:14:55:01 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
-88.41.4.142 - - [11/Feb/2015:14:55:51 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/Wb/Home/Web/TempleOS.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+88.41.4.142 - - [11/Feb/2015:14:55:51 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/Wb/Home/Web/TempleOS.html" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 2.18.244.210 - - [11/Feb/2015:14:58:01 -0800] "GET /Wb/Accts/TS/Web/TAD/Files/Text/2Cities.html HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org"
 2.18.244.210 - - [11/Feb/2015:14:58:01 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60" "www.templeos.org"
 131.8.134.171 - - [11/Feb/2015:15:00:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150211.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
@@ -798,7 +798,7 @@
 48.232.145.192 - - [11/Feb/2015:17:38:56 -0800] "GET /Wb/Home/Web/3rdParty.html HTTP/1.1" 200 3094 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 48.232.145.192 - - [11/Feb/2015:17:39:47 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "http://www.templeos.org/Wb/Home/Web/History.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 215.134.105.68 - - [11/Feb/2015:17:44:23 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=cwXcVPDVCpLwoAT-0oCgBg&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85970519,d.cGU" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-215.134.105.68 - - [11/Feb/2015:17:44:43 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+215.134.105.68 - - [11/Feb/2015:17:44:43 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 215.134.105.68 - - [11/Feb/2015:17:45:03 -0800] "GET /TempleOS.html HTTP/1.1" 200 12669 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCoQFjAB&url=http%3A%2F%2Fwww.templeos.org%2FTempleOS.html&ei=cwXcVPDVCpLwoAT-0oCgBg&usg=AFQjCNFgKoJBriQLYGUTwabTk3qxKB7Xfg&bvm=bv.85970519,d.cGU" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 48.232.145.192 - - [11/Feb/2015:17:45:11 -0800] "GET /Wb/Home/Web/LineRep.html HTTP/1.1" 200 110073 "http://www.templeos.org/Wb/Home/Web/TempleOS.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 112.130.98.166 - - [11/Feb/2015:17:45:44 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
@@ -847,7 +847,7 @@
 92.74.116.43 - - [11/Feb/2015:19:04:58 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org"
 52.53.176.115 - - [11/Feb/2015:19:09:02 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 215.73.32.178 - - [11/Feb/2015:19:09:24 -0800] "GET /Wb/Home/Web/3rdParty.html HTTP/1.1" 200 3094 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org"
-215.73.32.178 - - [11/Feb/2015:19:10:41 -0800] "GET /Wb/Home/Downloads HTTP/1.1" 301 105 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org"
+215.73.32.178 - - [11/Feb/2015:19:10:41 -0800] "GET /Wb/Home/Sup1 HTTP/1.1" 301 105 "-" "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFTHWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.44 like Chrome/37.0.2026.117 Safari/537.36" "www.templeos.org"
 27.241.156.119 - - [11/Feb/2015:19:12:21 -0800] "GET /Wb/Accts/TS/Web/AfterEgypt03.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
 228.141.141.213 - - [11/Feb/2015:19:14:34 -0800] "GET /Wb/Demo/Spy.html HTTP/1.1" 200 29873 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 237.74.135.250 - - [11/Feb/2015:19:15:23 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25" "www.templeos.org"
@@ -858,19 +858,19 @@
 104.237.154.130 - - [11/Feb/2015:19:22:27 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4" "www.templeos.org"
 228.141.141.213 - - [11/Feb/2015:19:25:21 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses04.html HTTP/1.1" 200 2928 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 228.141.141.213 - - [11/Feb/2015:19:25:21 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses25.html HTTP/1.1" 200 3175 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
-224.37.38.66 - - [11/Feb/2015:19:27:23 -0800] "GET /Wb/Home/Downloads/Words/Ingredients.html HTTP/1.1" 200 30633 "https://www.google.com/" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53" "www.templeos.org"
+224.37.38.66 - - [11/Feb/2015:19:27:23 -0800] "GET /Wb/Home/Sup1/Sup1Words/Ingredients.html HTTP/1.1" 200 30633 "https://www.google.com/" "Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53" "www.templeos.org"
 58.128.177.232 - - [11/Feb/2015:19:29:20 -0800] "GET /Certs/virtual-notary-cert-randomnum-39534.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 16.254.102.53 - - [11/Feb/2015:19:29:43 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.co.uk/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 234.111.185.200 - - [11/Feb/2015:19:29:43 -0800] "GET / HTTP/1.1" 200 6329 "-" "www.ahmadsoftware.com" "www.templeos.org"
 52.53.176.53 - - [11/Feb/2015:19:30:08 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/TADRants.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
-207.244.49.30 - - [11/Feb/2015:19:30:53 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
+207.244.49.30 - - [11/Feb/2015:19:30:53 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
 207.244.49.30 - - [11/Feb/2015:19:31:44 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 175.175.225.39 - - [11/Feb/2015:19:35:17 -0800] "GET /Wb/Home/Web/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org"
 190.241.251.38 - - [11/Feb/2015:19:45:40 -0800] "GET /apple-touch-icon.png HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org"
 190.241.251.38 - - [11/Feb/2015:19:45:41 -0800] "GET /apple-touch-icon-72x72.png HTTP/1.1" 404 89 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)" "www.templeos.org"
 82.144.237.15 - - [11/Feb/2015:19:53:49 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org"
-82.144.237.15 - - [11/Feb/2015:19:54:52 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org"
-61.87.248.67 - - [11/Feb/2015:19:55:26 -0800] "GET /Wb/Home/Downloads/Text/Yankee.TXT HTTP/1.1" 200 663207 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org"
+82.144.237.15 - - [11/Feb/2015:19:54:52 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org"
+61.87.248.67 - - [11/Feb/2015:19:55:26 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Yankee.TXT HTTP/1.1" 200 663207 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org"
 82.144.237.15 - - [11/Feb/2015:19:55:40 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 52.53.176.42 - - [11/Feb/2015:19:56:47 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 129.226.244.80 - - [11/Feb/2015:19:58:05 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "templeos.org"
@@ -889,7 +889,7 @@
 52.53.176.236 - - [11/Feb/2015:20:41:43 -0800] "GET /Wb/Accts/TS/TAD/MusicOrgan/battlehymnsolo.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 129.226.244.238 - - [11/Feb/2015:20:42:40 -0800] "GET /Wb/Doc/KeyAlloc.html HTTP/1.1" 200 6621 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
 222.23.138.147 - - [11/Feb/2015:20:43:36 -0800] "GET /Wb/Home/Web/TADRant.html HTTP/1.1" 200 3600 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-222.23.138.147 - - [11/Feb/2015:20:43:59 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+222.23.138.147 - - [11/Feb/2015:20:43:59 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 121.139.44.4 - - [11/Feb/2015:20:44:39 -0800] "GET /Wb/Doc/Charter.html HTTP/1.1" 200 10431 "-" "creepyCrawler" "www.templeos.org"
 58.71.218.57 - - [11/Feb/2015:20:44:40 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 121.139.44.4 - - [11/Feb/2015:20:45:40 -0800] "HEAD /robots.txt HTTP/1.1" 404 0 "-" "creepyCrawler" "www.templeos.org"
@@ -996,7 +996,7 @@
 189.34.163.43 - - [11/Feb/2015:22:27:47 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org"
 74.51.200.50 - - [11/Feb/2015:22:28:29 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org"
 74.51.200.50 - - [11/Feb/2015:22:28:29 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google favicon" "www.templeos.org"
-52.53.176.185 - - [11/Feb/2015:22:29:24 -0800] "GET /Wb/Home/Downloads/Words/?N=A HTTP/1.1" 200 1997 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
+52.53.176.185 - - [11/Feb/2015:22:29:24 -0800] "GET /Wb/Home/Sup1/Sup1Words/?N=A HTTP/1.1" 200 1997 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 228.141.141.213 - - [11/Feb/2015:22:30:49 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 52.53.176.236 - - [11/Feb/2015:22:35:47 -0800] "GET /Wb/Accts/TS/TAD/PersonalMenu.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 74.51.144.214 - - [11/Feb/2015:22:38:30 -0800] "GET /Wb/Adam/WordStat/WSMain.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "www.templeos.org"
@@ -1015,7 +1015,7 @@
 175.107.111.93 - - [11/Feb/2015:22:41:21 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/sport=sportnews" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org"
 122.43.121.5 - - [11/Feb/2015:22:41:58 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
 122.43.121.5 - - [11/Feb/2015:22:42:11 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
-240.177.94.44 - - [11/Feb/2015:22:42:13 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+240.177.94.44 - - [11/Feb/2015:22:42:13 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 240.177.94.44 - - [11/Feb/2015:22:42:52 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 190.248.157.66 - - [11/Feb/2015:22:43:24 -0800] "GET /images/Machine.jpg HTTP/1.1" 200 90402 "http://motherboard.vice.com/read/gods-lonely-programmer" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "templeos.org"
 190.248.157.66 - - [11/Feb/2015:22:43:51 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -1025,8 +1025,8 @@
 70.112.108.22 - - [11/Feb/2015:22:49:04 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://www.templeos.org/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18" "www.templeos.org"
 111.127.160.133 - - [11/Feb/2015:22:50:30 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org"
 111.127.160.133 - - [11/Feb/2015:22:50:35 -0800] "GET /Wb/Home/Web/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org"
-129.226.244.80 - - [11/Feb/2015:22:50:36 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
-111.127.160.133 - - [11/Feb/2015:22:50:56 -0800] "GET /Wb/Home/Downloads HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org"
+129.226.244.80 - - [11/Feb/2015:22:50:36 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
+111.127.160.133 - - [11/Feb/2015:22:50:56 -0800] "GET /Wb/Home/Sup1 HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org"
 111.127.160.133 - - [11/Feb/2015:22:50:56 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.35 Safari/537.36 OPR/28.0.1750.15 (Edition beta)" "www.templeos.org"
 39.83.94.17 - - [11/Feb/2015:22:55:35 -0800] "GET /Wb/Doc/MultiCore.html HTTP/1.1" 200 5292 "-" "Mozilla/5.0 (compatible; XoviBot/2.0; +http://www.xovibot.net/)" "www.templeos.org"
 185.106.116.254 - - [11/Feb/2015:22:57:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" "www.templeos.org"
@@ -1052,8 +1052,8 @@
 108.204.215.78 - - [11/Feb/2015:23:31:38 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 108.204.215.78 - - [11/Feb/2015:23:31:39 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 108.204.215.78 - - [11/Feb/2015:23:31:57 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-108.204.215.78 - - [11/Feb/2015:23:32:43 -0800] "GET /Wb/Home/Downloads HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-108.204.215.78 - - [11/Feb/2015:23:32:44 -0800] "GET /Wb/Home/Downloads/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+108.204.215.78 - - [11/Feb/2015:23:32:43 -0800] "GET /Wb/Home/Sup1 HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+108.204.215.78 - - [11/Feb/2015:23:32:44 -0800] "GET /Wb/Home/Sup1/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 228.141.141.213 - - [11/Feb/2015:23:36:28 -0800] "GET /Wb/Demo/Carry.html HTTP/1.1" 200 14681 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" "www.templeos.org"
 58.128.177.232 - - [11/Feb/2015:23:50:51 -0800] "GET /Wb/Accts/TS/Web/TAD/2014/03/Rant140305.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 52.53.176.185 - - [11/Feb/2015:23:51:52 -0800] "GET /Wb/Adam/AExts.HPP.Z HTTP/1.1" 200 2002 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
diff --git a/Demo/WebLogDemo/access_150213.LOG b/Demo/WebLogDemo/access_150213.LOG
index b007a76..eaafe85 100644
--- a/Demo/WebLogDemo/access_150213.LOG
+++ b/Demo/WebLogDemo/access_150213.LOG
@@ -20,7 +20,7 @@
 18.199.184.33 - - [12/Feb/2015:00:27:52 -0800] "GET /Wb/Doc/AboutTempleOS.html HTTP/1.1" 200 4925 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:00:27:54 -0800] "GET /Wb/Home/Web/3rdParty.html HTTP/1.1" 200 3094 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:00:31:02 -0800] "GET /Wb/Home/Web/TempleOS.html HTTP/1.1" 200 12669 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-147.59.227.112 - - [12/Feb/2015:00:31:06 -0800] "GET /Wb/Accts/TS/Web/TempleOSVideos.html HTTP/1.1" 404 89 "-" "Pinterest/0.2 (+http://www.pinterest.com/)" "www.templeos.org"
+147.59.227.112 - - [12/Feb/2015:00:31:06 -0800] "GET /Wb/Accts/TS/Web/TOSVideos.html HTTP/1.1" 404 89 "-" "Pinterest/0.2 (+http://www.pinterest.com/)" "www.templeos.org"
 34.87.144.98 - - [12/Feb/2015:00:34:59 -0800] "HEAD /TempleOSCD.ISO HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 2.0.50727)" "www.templeos.org"
 164.151.148.185 - - [12/Feb/2015:00:37:23 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:25.2) Gecko/20150122 PaleMoon/25.2.1" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:00:39:13 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
@@ -30,7 +30,7 @@
 35.132.148.108 - - [12/Feb/2015:00:51:21 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 154.241.32.105 - - [12/Feb/2015:00:53:33 -0800] "GET /Wb/Accts/TS/Web/AfterEgypt03.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
 152.130.74.187 - - [12/Feb/2015:00:53:58 -0800] "GET / HTTP/1.1" 200 6329 "http://www.haosou.com/s?ie=utf-8&src=hao_start_new&shb=1&q=templeos" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" "www.templeos.org"
-181.41.2.88 - - [12/Feb/2015:00:54:47 -0800] "GET /Wb/Home/Downloads/Text/Talmud.TXT HTTP/1.1" 200 849716 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org"
+181.41.2.88 - - [12/Feb/2015:00:54:47 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Talmud.TXT HTTP/1.1" 200 849716 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "www.templeos.org"
 223.247.137.232 - - [12/Feb/2015:00:55:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
 184.209.164.221 - - [12/Feb/2015:00:58:45 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0" "www.templeos.org"
 223.247.137.232 - - [12/Feb/2015:01:00:02 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
@@ -45,7 +45,7 @@
 35.132.148.108 - - [12/Feb/2015:01:10:47 -0800] "GET /logs/ HTTP/1.1" 200 5619 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 35.132.148.108 - - [12/Feb/2015:01:10:51 -0800] "GET /logs/access_150212.log HTTP/1.1" 200 241474 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 35.132.148.108 - - [12/Feb/2015:01:10:54 -0800] "GET /logs/access.log HTTP/1.1" 200 9450 "http://www.templeos.org/logs/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-52.209.6.251 - - [12/Feb/2015:01:21:38 -0800] "GET /Wb/Home/Downloads/HDAudio/?N=D HTTP/1.1" 200 1843 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
+52.209.6.251 - - [12/Feb/2015:01:21:38 -0800] "GET /Wb/Home/Sup1/Sup1HDAudio/?N=D HTTP/1.1" 200 1843 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 18.14.185.120 - - [12/Feb/2015:01:24:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko)                 Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org"
 18.14.185.120 - - [12/Feb/2015:01:25:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org"
 18.14.185.120 - - [12/Feb/2015:01:25:11 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)" "templeos.org"
@@ -114,7 +114,7 @@
 146.195.0.189 - - [12/Feb/2015:01:44:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 146.195.0.189 - - [12/Feb/2015:01:44:52 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.pl/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org"
 146.195.0.189 - - [12/Feb/2015:01:44:53 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.pl/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" "www.templeos.org"
-146.195.0.189 - - [12/Feb/2015:01:45:18 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
+146.195.0.189 - - [12/Feb/2015:01:45:18 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 46.48.190.210 - - [12/Feb/2015:01:45:44 -0800] "GET /Wb/Apps/Psalmody/Examples/blinded.html HTTP/1.1" 200 24692 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
 46.48.190.210 - - [12/Feb/2015:01:47:21 -0800] "GET /Wb/Demo/SortFileDemo/SortedF64.html HTTP/1.1" 200 2725 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
 15.88.213.93 - - [12/Feb/2015:01:47:29 -0800] "GET /TempleOS.html HTTP/1.1" 200 12685 "-" "DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)" "www.templeos.org"
@@ -132,7 +132,7 @@
 129.14.210.30 - - [12/Feb/2015:01:56:13 -0800] "GET /Wb/Adam/God/HSNotes.html HTTP/1.1" 200 35828 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org"
 129.14.210.30 - - [12/Feb/2015:01:56:17 -0800] "GET /Wb/Home/Web/History.html HTTP/1.1" 200 7745 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:01:57:18 -0800] "GET /Wb/Apps/AfterEgypt/Comics/Moses01.TXT.Z HTTP/1.1" 200 324 "http://www.templeos.org/Wb/Apps/AfterEgypt/Comics/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-96.11.7.225 - - [12/Feb/2015:01:58:16 -0800] "GET /Wb/Home/Downloads/Text/Darwin.TXT HTTP/1.1" 200 851968 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
+96.11.7.225 - - [12/Feb/2015:01:58:16 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Darwin.TXT HTTP/1.1" 200 851968 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 13.92.170.164 - - [12/Feb/2015:01:59:23 -0800] "GET / HTTP/1.1" 200 6329 "http://forum.ubuntu-it.org/viewtopic.php?f=13&t=304452&start=2940" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 13.92.170.164 - - [12/Feb/2015:01:59:24 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 223.247.137.232 - - [12/Feb/2015:02:00:01 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2015/11/Rant150212.html HTTP/1.1" 404 89 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "www.templeos.org"
@@ -142,7 +142,7 @@
 154.241.32.105 - - [12/Feb/2015:02:02:05 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2013/12/Rant131230.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
 92.248.212.126 - - [12/Feb/2015:02:02:14 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 163.236.58.23 - - [12/Feb/2015:02:05:34 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.com.hk/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-163.236.58.23 - - [12/Feb/2015:02:06:37 -0800] "GET /Wb/Home/Downloads/Movies.html HTTP/1.1" 200 9318 "http://www.templeos.org/Wb/Home/Downloads/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+163.236.58.23 - - [12/Feb/2015:02:06:37 -0800] "GET /Wb/Home/Sup1/Movies.html HTTP/1.1" 200 9318 "http://www.templeos.org/Wb/Home/Sup1/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 35.18.127.92 - - [12/Feb/2015:02:07:07 -0800] "GET /Certs/virtual-notary-cert-randomnum-43249.p12 HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" "www.templeos.org"
 249.107.121.250 - - [12/Feb/2015:02:07:17 -0800] "GET /Wb/Accts/TS/Web/Rants/TAD/2013/10/Rant131007.html HTTP/1.1" 404 89 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org"
 117.175.238.94 - - [12/Feb/2015:02:08:54 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205" "www.templeos.org"
@@ -152,8 +152,8 @@
 231.231.121.111 - - [12/Feb/2015:02:12:14 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:02:13:04 -0800] "GET /Wb/Doc/GuideLines.html HTTP/1.1" 200 19765 "http://www.templeos.org/Wb/Doc/HelpIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:02:13:15 -0800] "GET /Wb/Doc/MultiTasking.html HTTP/1.1" 200 6972 "http://www.templeos.org/Wb/Doc/HelpIndex.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-96.103.90.46 - - [12/Feb/2015:02:15:20 -0800] "GET /Wb/Home/Downloads HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-96.103.90.46 - - [12/Feb/2015:02:15:20 -0800] "GET /Wb/Home/Downloads/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+96.103.90.46 - - [12/Feb/2015:02:15:20 -0800] "GET /Wb/Home/Sup1 HTTP/1.1" 301 105 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
+96.103.90.46 - - [12/Feb/2015:02:15:20 -0800] "GET /Wb/Home/Sup1/ HTTP/1.1" 200 5204 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 96.103.90.46 - - [12/Feb/2015:02:15:22 -0800] "GET /Wb/Home/Web/TADRant.html HTTP/1.1" 200 3600 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 213.15.135.144 - - [12/Feb/2015:02:15:25 -0800] "GET /Wb/Doc/DemoIndex.html HTTP/1.1" 200 32945 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 97.150.165.238 - - [12/Feb/2015:02:19:56 -0800] "GET / HTTP/1.1" 200 6329 "http://disqus.com/embed/comments/?base=default&version=0523ff5c0c3046e85673af71613146f3&f=hausdorff&t_u=http%3A%2F%2Fblog.nullspace.io%2Fkernel-latency.html&t_d=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&t_t=84%25%20of%20a%20single-threaded%201KB%20write%20in%20Redis%20is%20spent%20in%20the%20kernel&s_o=default" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
@@ -210,7 +210,7 @@
 15.88.159.153 - - [12/Feb/2015:03:17:28 -0800] "GET /Wb/Home/Web/Imgs/MenuV0401.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Web/ScreenShots.html" "Mozilla/5.0 (Linux; Android 4.4.2; LG-D850 Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 15.88.159.150 - - [12/Feb/2015:03:17:28 -0800] "GET /Wb/Home/Web/Imgs/ToTheFront.BMP HTTP/1.1" 200 90050 "http://www.templeos.org/Wb/Home/Web/ScreenShots.html" "Mozilla/5.0 (Linux; Android 4.4.2; LG-D850 Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:03:17:50 -0800] "GET /Wb/Kernel/Mem/MAllocFree.html HTTP/1.1" 200 233249 "http://www.templeos.org/Wb/Doc/HolyC.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-96.11.7.110 - - [12/Feb/2015:03:18:13 -0800] "GET /Wb/Home/Downloads/VanGogh/?S=D HTTP/1.1" 200 1007 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
+96.11.7.110 - - [12/Feb/2015:03:18:13 -0800] "GET /Wb/Home/Sup1/VanGogh/?S=D HTTP/1.1" 200 1007 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 15.79.75.90 - - [12/Feb/2015:03:18:16 -0800] "GET /files/ASU_Transcripts.pdf HTTP/1.1" 200 13602 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.2; LG-D850 Build/KVT49L.D85010f)" "www.templeos.org"
 18.199.184.33 - - [12/Feb/2015:03:18:20 -0800] "GET /Wb/Doc/DolDocOverview.html HTTP/1.1" 200 48077 "http://www.templeos.org/Wb/Doc/HolyC.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 104.166.59.246 - - [12/Feb/2015:03:18:21 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
@@ -228,7 +228,7 @@
 117.45.170.127 - - [12/Feb/2015:03:33:40 -0800] "GET /Wb/Compiler/ HTTP/1.1" 200 8721 "http://www.reddit.com/user/TempleOS_Terry_Davis" "Mozilla/5.0 (Windows NT 6.3; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 117.45.170.127 - - [12/Feb/2015:03:34:24 -0800] "GET /Wb/Compiler/UAsm.CPP.Z HTTP/1.1" 200 6806 "http://www.templeos.org/Wb/Compiler/" "Mozilla/5.0 (Windows NT 6.3; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 231.231.121.111 - - [12/Feb/2015:03:40:51 -0800] "GET /Wb/Accts/TS/TAD/Adam3cKeyPlugIns.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
-231.231.121.111 - - [12/Feb/2015:03:40:51 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
+231.231.121.111 - - [12/Feb/2015:03:40:51 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.templeos.org"
 52.209.44.154 - - [12/Feb/2015:03:42:20 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
 154.241.32.105 - - [12/Feb/2015:03:44:33 -0800] "GET /Wb/Compiler/CmpMain.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" "www.templeos.org"
 40.89.142.17 - - [12/Feb/2015:03:47:47 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
@@ -241,7 +241,7 @@
 147.190.232.70 - - [12/Feb/2015:03:55:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "templeos.org"
 147.190.232.70 - - [12/Feb/2015:03:55:02 -0800] "GET /Wb/Doc/Credits.html HTTP/1.1" 200 9704 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org"
 147.190.232.70 - - [12/Feb/2015:03:55:02 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org"
-105.108.89.95 - - [12/Feb/2015:03:55:04 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "-" "mifetcher/1.0" "www.templeos.org"
+105.108.89.95 - - [12/Feb/2015:03:55:04 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "-" "mifetcher/1.0" "www.templeos.org"
 147.255.165.35 - - [12/Feb/2015:03:55:34 -0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)" "www.templeos.org"
 147.59.8.215 - - [12/Feb/2015:03:57:31 -0800] "GET /robots.txt HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org"
 147.59.8.215 - - [12/Feb/2015:03:57:31 -0800] "GET /Wb/Accts/TS/Web/TAD/2013/11/Rant131114.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)" "www.templeos.org"
@@ -301,7 +301,7 @@
 179.165.230.173 - - [12/Feb/2015:05:52:15 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
 179.165.230.173 - - [12/Feb/2015:05:52:16 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "templeos.org"
 39.62.80.146 - - [12/Feb/2015:05:53:22 -0800] "GET / HTTP/1.1" 200 6329 "http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCAQFjAA&url=http%3A%2F%2Fwww.templeos.org%2F&ei=T7DcVKbOKYLIsQTPz4CgAg&usg=AFQjCNFKL3We7L8wuY5up5gkGZtpKv4qtA&bvm=bv.85761416,d.cWc" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
-96.11.7.217 - - [12/Feb/2015:05:56:55 -0800] "GET /Wb/Home/Downloads/VanGogh/BMPView.html HTTP/1.1" 200 17528 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
+96.11.7.217 - - [12/Feb/2015:05:56:55 -0800] "GET /Wb/Home/Sup1/VanGogh/BMPView.html HTTP/1.1" 200 17528 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 96.11.7.121 - - [12/Feb/2015:05:58:36 -0800] "GET /Wb/Doc/FileMgrPullDown.TXT.Z HTTP/1.1" 200 245 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 179.165.230.173 - - [12/Feb/2015:05:59:54 -0800] "GET /Wb/Home/Web/ScreenShots.html HTTP/1.1" 200 3353 "http://www.templeos.org/Wb/Home/Web/TempleOS.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
 179.165.230.173 - - [12/Feb/2015:05:59:54 -0800] "GET /Wb/Home/Web/Imgs/MenuV0401.BMP HTTP/1.1" 200 153718 "http://www.templeos.org/Wb/Home/Web/ScreenShots.html" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0" "www.templeos.org"
@@ -338,7 +338,7 @@
 130.173.25.185 - - [12/Feb/2015:07:30:00 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
 96.11.7.221 - - [12/Feb/2015:07:31:15 -0800] "GET /Wb/Apps/Psalmody/Examples/personal.html HTTP/1.1" 200 18195 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 118.138.223.250 - - [12/Feb/2015:07:38:05 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" "www.templeos.org"
-96.11.7.110 - - [12/Feb/2015:07:41:29 -0800] "GET /Wb/Home/Downloads/Text/Quix.html HTTP/1.1" 200 1310720 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
+96.11.7.110 - - [12/Feb/2015:07:41:29 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Quix.html HTTP/1.1" 200 1310720 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 67.59.196.244 - - [12/Feb/2015:07:42:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)" "www.templeos.org"
 67.59.196.244 - - [12/Feb/2015:07:42:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0" "www.templeos.org"
 67.59.196.244 - - [12/Feb/2015:07:42:52 -0800] "GET / HTTP/1.1" 200 6329 "http://www.best-sport-videoclips.com/?sport=sportnews" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0" "www.templeos.org"
@@ -490,7 +490,7 @@
 30.122.182.64 - - [12/Feb/2015:11:34:54 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 206 2424832 "http://www.templeos.org/Wb/Home/Web/Downloads.html" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36" "www.templeos.org"
 89.114.33.147 - - [12/Feb/2015:11:35:11 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 786432 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 89.114.33.147 - - [12/Feb/2015:11:35:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 720896 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
-129.135.178.96 - - [12/Feb/2015:11:35:41 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0" "www.templeos.org"
+129.135.178.96 - - [12/Feb/2015:11:35:41 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0" "www.templeos.org"
 27.157.61.98 - - [12/Feb/2015:11:36:47 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) WhiteHat Aviator/37.0.2062.99 Chrome/37.0.2062.99 Safari/537.36" "www.templeos.org"
 27.157.61.98 - - [12/Feb/2015:11:37:16 -0800] "GET /Wb/Home/Web/Downloads.html HTTP/1.1" 200 7086 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) WhiteHat Aviator/37.0.2062.99 Chrome/37.0.2062.99 Safari/537.36" "www.templeos.org"
 90.249.21.63 - - [12/Feb/2015:11:45:16 -0800] "GET /Wb/Accts/TS/Web/TempleOSV0218A.BMP HTTP/1.1" 404 89 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "www.templeos.org"
@@ -514,7 +514,7 @@
 69.53.241.54 - - [12/Feb/2015:12:25:36 -0800] "GET / HTTP/1.1" 200 6329 "http://www.templeos.org/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0" "www.templeos.org"
 96.156.190.246 - - [12/Feb/2015:12:26:42 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.ro/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 96.156.190.246 - - [12/Feb/2015:12:26:43 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
-169.56.190.145 - - [12/Feb/2015:12:28:15 -0800] "GET /Wb/Home/Downloads/Text/Walden.TXT HTTP/1.1" 200 652722 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org"
+169.56.190.145 - - [12/Feb/2015:12:28:15 -0800] "GET /Wb/Home/Sup1/Sup1Texts/Walden.TXT HTTP/1.1" 200 652722 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36" "www.templeos.org"
 96.11.7.217 - - [12/Feb/2015:12:30:10 -0800] "GET /Wb/Adam/ABlkDev/?M=D HTTP/1.1" 200 1943 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "www.templeos.org"
 109.87.221.193 - - [12/Feb/2015:12:30:17 -0800] "GET /Wb/Accts/TS/Web/TempleOS.html HTTP/1.1" 404 89 "http://www.reddit.com/r/AskReddit/comments/24e4sf/reddit_what_are_some_of_the_creepiest/" "Mozilla/5.0 (Linux; Android 4.4.4; XT1080 Build/SU6-7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36" "www.templeos.org"
 92.78.238.59 - - [12/Feb/2015:12:30:19 -0800] "GET / HTTP/1.1" 200 6329 "-" "NetLyzer FastProbe" "www.templeos.org"
@@ -572,7 +572,7 @@
 102.173.16.164 - - [12/Feb/2015:14:32:51 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 78.175.24.35 - - [12/Feb/2015:14:33:32 -0800] "GET / HTTP/1.1" 200 6329 "https://www.google.it/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 102.173.16.164 - - [12/Feb/2015:14:33:35 -0800] "GET / HTTP/1.1" 200 6329 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
-102.173.16.164 - - [12/Feb/2015:14:33:50 -0800] "GET /Wb/Home/Web/TempleOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
+102.173.16.164 - - [12/Feb/2015:14:33:50 -0800] "GET /Wb/Home/Web/TOSVideos.html HTTP/1.1" 200 40440 "http://www.templeos.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36" "www.templeos.org"
 154.16.41.17 - - [12/Feb/2015:14:34:18 -0800] "GET /favicon.ico HTTP/1.1" 200 1078 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" "www.templeos.org"
 89.114.33.147 - - [12/Feb/2015:14:35:12 -0800] "GET /TempleOSCD.ISO HTTP/1.1" 200 589824 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "www.templeos.org"
 52.209.44.178 - - [12/Feb/2015:14:36:14 -0800] "GET /Wb/Accts/TS/Web/ScreenShots.html HTTP/1.1" 404 89 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "www.templeos.org"
diff --git a/Doc/Boot.TXT b/Doc/Boot.TXT
index e16304d53e34d420dc9ebff045e6f171ac2d8738..f4e7173d5f62b7ec7963b7e0e87a91a7ca085372 100644
GIT binary patch
delta 24
gcmaE&ctUZ*HD(s~qSB}5&tlQz
F0RXhI5RU)=

diff --git a/Doc/ChangeLog.TXT b/Doc/ChangeLog.TXT
index 6a293a5..9eec6ee 100644
--- a/Doc/ChangeLog.TXT
+++ b/Doc/ChangeLog.TXT
@@ -2,7 +2,38 @@ $WW,1$$FG,5$$TX+CX,"Change Log"$$FG$
 
 Use $LK,"R",A="MN:R"$() to rename if I change a label.
 
-$IV,1$----07/07/16 00:41:12----$IV,0$
+$IV,1$----08/08/16 08:32:26----$IV,0$
+
+$IV,1$----07/17/16 13:03:12----$IV,0$
+* Improved $LK,"DocOpt",A="MN:DocOpt"$().
+
+$IV,1$----07/17/16 03:23:53----$IV,0$
+* Improved $LK,"::/Demo/Games/RawHide.CPP"$.
+
+$IV,1$----07/15/16 10:11:10----$IV,0$
+* $BK,1$TempleOS version 4.10 Released$BK,0$
+* Improved $LK,"::/Demo/Games/EagleDive.CPP"$.
+
+$IV,1$----07/15/16 05:17:24----$IV,0$
+* Created $LK,"CDevGlbls",A="MN:CDevGlbls"$.uncached_alias.
+* Added 1 Gig page table support.
+
+$IV,1$----07/13/16 17:21:19----$IV,0$
+* Added $LK,"::/Demo/MultiCore/RateCores.CPP"$.
+
+$IV,1$----07/09/16 08:46:36----$IV,0$
+* Changed scoring in $LK,"::/Demo/Games/EagleDive.CPP"$.
+* Replaced many $FG,2$"%Q"$FG$ with $FG,2$"%$$Q"$FG$.
+* Fixed $FG,2$'\x24'$FG$.
+* Added $FG,2$'\d'$FG$ for $FG,2$'$$'$FG$.
+
+$IV,1$----07/08/16 14:30:19----$IV,0$
+* $LK,"R",A="MN:R"$("root","head");
+* Fixed $FG,2$REP_STOSB$FG$ and $LK,"MemSet",A="MN:MemSet"$() for 64-bit.
+
+$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.
 
 $IV,1$----07/06/16 23:45:30----$IV,0$
 * Fixed multicore bug in $LK,"Sprite3",A="MN:Sprite3"$().
diff --git a/Doc/Credits.TXT b/Doc/Credits.TXT
index 2efdade..0adfc5b 100644
--- a/Doc/Credits.TXT
+++ b/Doc/Credits.TXT
@@ -44,7 +44,7 @@ I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"121,193",D="DD_TEMPLEOS_LOC"$ lines
 
 *) I hired an artist, Cody Rigby, for $$3,000 worth of pixel art.
 
-*) Erik van der Karbargenbok made $LK,"TempleBot",A="PI:::/Linux/TempleBot",HTML="http://www.templeos.org/Wb/Home/Downloads/Bin/TempleBot.html"$.
+*) Erik van der Karbargenbok made $LK,"TempleBot",A="PI:::/Linux/TempleBot",HTML="http://www.templeos.org/Wb/Home/Sup1/Sup1Bin/TempleBot.html"$.
 
 *) The random number generator is from Donald Knuth in the wikipedia entry for $TX,"Linear_congruential_generator",HTML="http://en.wikipedia.org/wiki/Linear_congruential_generator"$.
 
diff --git a/Doc/Demands.TXT b/Doc/Demands.TXT
index ce5eaad..007cf5a 100644
--- a/Doc/Demands.TXT
+++ b/Doc/Demands.TXT
@@ -23,6 +23,8 @@ $LK,"::/Kernel/BlkDev/DskCluster.CPP"$	:152 All the cluster operations become bl
 
 * VMware and others must list TempleOS as an official 64-bit operating system.
 
+* VMware needs to support more than 16 cores.
+
 * Until super-simple block devices are available, hard disk should be placed at IDE primary master 1F0/3F6 and CD/DVD/Blu-ray should be placed at the IDE secondary master 170/376.
 $LK,"/Kernel/BlkDev/DskATAId.CPP",A="FI:::/Kernel/BlkDev/DskATAId.CPP"$	:286 lines to figure-out I/O ports is gone.
 $LK,"/Kernel/PCIBIOS.CPP",A="FI:::/Kernel/PCIBIOS.CPP"$		:290 could be eliminated, but maybe we will keep it so people can play with PCI devices.
diff --git a/Doc/DemoIndex.TXT b/Doc/DemoIndex.TXT
index 34f6947..f28bd2e 100644
--- a/Doc/DemoIndex.TXT
+++ b/Doc/DemoIndex.TXT
@@ -66,6 +66,7 @@ $LK,"::/Demo/ExtendedChars.CPP"$
 $LK,"::/Demo/TimeIns.CPP"$
 $LK,"::/Demo/Snd/WaterFowl.CPP"$
 $MA-X+PU,"::/Apps/Psalmody/Examples",LM="Cd(\"::/Apps/Psalmody/Examples\");Dir;View;\n"$
+$LK,"::/Demo/MultiCore/RateCores.CPP"$
 $LK,"::/Demo/MultiCore/MPPrint.CPP"$
 $LK,"::/Demo/Graphics/PredatorPrey.CPP"$
 $LK,"::/Demo/Graphics/Cartesian.CPP"$
diff --git a/Doc/DolDocOverview.TXT b/Doc/DolDocOverview.TXT
index 73cd6d4..8402d26 100644
--- a/Doc/DolDocOverview.TXT
+++ b/Doc/DolDocOverview.TXT
@@ -139,7 +139,7 @@ $ID,2$Used for forms.  Use $FG,2$$FG$ to help you generate the DolDoc co
 
 If you are not using $LK,"DocForm",A="MN:DocForm"$(), make a $FG,2$$$CB...$$$FG$ statement with $LK,"DocPrint",A="MN:DocPrint"$() and fill-in the $FG,2$->data$FG$ addr.  See $LK,"task_title",A="FF:::/Adam/DolDoc/DocEd.CPP,&Fs->task_title"$.   
 
-The default raw data type for the $FG,2$$$CB...$$$FG$ command is $FG,2$RT=I8$FG$ which is $FG,2$Bool$FG$$FG$.  $LK,"DocForm",A="MN:DocForm"$() will automatically reset the raw type to the value from the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ $FG,2$class$FG$ member's definition if you leave it set to the default.  Or, if not using $LK,"DocForm",A="MN:DocForm"$(), specify a raw data type of $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, $FG,2$U64$FG$, or $FG,2$F64$FG$.  See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$().
+The default raw data type for the $FG,2$$$CB...$$$FG$ command is $FG,2$RT=I8$FG$ which is $FG,2$Bool$FG$.  $LK,"DocForm",A="MN:DocForm"$() will automatically reset the raw type to the value from the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ $FG,2$class$FG$ member's definition if you leave it set to the default.  Or, if not using $LK,"DocForm",A="MN:DocForm"$(), specify a raw data type of $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, $FG,2$U64$FG$, or $FG,2$F64$FG$.  See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$().
 $ID,-2$$TR,"LS List Widget"$
 $ID,2$Used for forms that prompt for data.  You must specify a define list, $FG,2$D=""$FG$.  Use $FG,2$$FG$ to help you generate the DolDoc command text you need in your $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ $FG,2$class$FG$ member's $FG,2$fmtstr$FG$ meta-data for $LK,"DocForm",A="MN:DocForm"$().  See $LK,"::/Demo/DolDoc/Form.CPP"$.
 
diff --git a/Doc/FAQ.TXT b/Doc/FAQ.TXT
index 2aee643..24a4d06 100644
--- a/Doc/FAQ.TXT
+++ b/Doc/FAQ.TXT
@@ -3,7 +3,7 @@ $WW,1$$FG,5$$TX+CX,"Frequently Asked Questions"$$FG$
 $TR,"How come it is public domain, not GPL?"$
 $ID,2$I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"118,851",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"12.5",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!  See $LK,"::/Doc/Credits.TXT"$.
 $ID,-2$$TR,"Shouldn't it be GNU/TempleOS?"$
-$ID,2$TempleOS executes no code not written by me at any time except for a few $FG,2$BIOS$FG$ calls for configuration.  I even wrote boot-loaders, so I do not need $LK,"Grub",A="FI:::/Doc/Grub.TXT"$.  See $LK,"::/Doc/Credits.TXT"$.
+$ID,2$TempleOS executes no code not written by me at any time except for a few $FG,2$BIOS$FG$ calls for configuration.  I even wrote boot-loaders, so I do not need Grub.  See $LK,"::/Doc/Credits.TXT"$.
 $ID,-2$$TR,"Don't you use GNU's gcc?"$
 $ID,2$TempleOS was written from scratch, starting with $FG,2$TASM$FG$ long ago, launching from real-mode DOS.  Now, there is no $FG,2$Linux$FG$ or $FG,2$GNU$FG$ or any other code in TempleOS.  Yes, I wrote the compiler from scratch.  See $LK,"::/Doc/Credits.TXT"$.
 $ID,-2$$TR,"Why do you dual boot?"$
@@ -43,7 +43,7 @@ $ID,2$TempleOS allocs mem as more items are displayed in the window.  Also, Temp
 $ID,-2$$TR,"Why do I get a memory leak when editing big files?"$
 $ID,2$The editor periodically takes a snap-shot of the document for $FG,2$UNDO$FG$ and this looks like a memory leak.
 $ID,-2$$TR,"Why is it in text mode?"$
-$ID,2$TempleOS runs in $FG,2$VGA 640x480 16 color$FG$ graphics mode, not text mode.  It changes to this mode with a $LK,"BIOS call",A="FF:::/Kernel/KStart.CPP,INT 0x10"$ while in real-mode before it switches to 64-bit mode.  The text is $LK,"drawn by hand",A="MN:GrUpdateTextFG"$.  See $LK,"::/Kernel/FontStd.CPP"$.  If graphics mode fails, it falls-back on text mode.  You can force text mode with an $LK,"Kernel config",A="FI:::/Kernel/KCfg.CPP"$ option.
+$ID,2$TempleOS runs in $FG,2$VGA 640x480 16 color$FG$ graphics mode, not text mode.  It changes to this mode with a $LK,"BIOS call",A="FF:::/Kernel/KStart16.CPP,INT 0x10"$ while in real-mode before it switches to 64-bit mode.  The text is $LK,"drawn by hand",A="MN:GrUpdateTextFG"$.  See $LK,"::/Kernel/FontStd.CPP"$.  If graphics mode fails, it falls-back on text mode.  You can force text mode with an $LK,"Kernel config",A="FI:::/Kernel/KCfg.CPP"$ option.
 $ID,-2$$TR,"Where is the kernel memory?"$
 $ID,2$TempleOS identity-maps all memory, all the time.  It is like paging is not used.  There is no special kernel $FG,2$high half$FG$ memory space.  TempleOS is ring-0-only, so everything is kernel, even user programs.  There is a special task called $FG,2$Adam$FG$ and he doesn't die, so his heap never gets freed.  That's as close to $FG,2$kernel memory$FG$ as it gets.  All code goes in the lowest 2 Gig of addresses, known as the $LK,"Code Heap",A="FF:::/Doc/Glossary.TXT,Code and Data Heaps"$, so that the $FG,2$REL32$FG$ addressing mode can be used.  See $LK,"MemOverview",A="FI:::/Doc/MemOverview.TXT"$.
 $ID,-2$$TR,"Why does it run code from stack addresses?"$
@@ -55,9 +55,9 @@ $ID,2$The stack does not grow, so do not do deep recursion.  In theory, memory g
 $ID,-2$$TR,"How do I set the PATH?"$
 $ID,2$There is no $FG,2$PATH$FG$.  You do not enter filenames at the command-line and expect them to run.  You enter C-like code.  $LK,"Get Started Here",A="FI:::/Doc/CmdLineOverview.TXT"$.
 $ID,-2$$TR,"How do I boot it with Grub?"$
-$ID,2$If you use $LK,"Grub",A="FI:::/Doc/Grub.TXT"$, you $FG,2$chain-load$FG$ like Windows.  See $LK,"Boot",A="FI:::/Doc/Boot.TXT"$.  You can use the TempleOS boot-loader.  $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Opt/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Opt/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootDVD.CPP"$.
+$ID,2$If you use Grub, you $FG,2$chain-load$FG$ like Windows.  See $LK,"Boot",A="FI:::/Doc/Boot.TXT"$.  You can use the TempleOS boot-loader.  $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Opt/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Opt/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootDVD.CPP"$.
 $ID,-2$$TR,"How do I get Kernel.BIN to boot?"$
-$ID,2$The boot-loaders must be patched by you running $LK,"BootHDIns",A="MN:BootHDIns"$() or $LK,"BootMHDIns",A="MN:BootMHDIns"$().  Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it.
+$ID,2$The boot-loaders must be patched by you running $LK,"BootHDIns",A="MN:BootHDIns"$() or $LK,"BootMHDIns",A="MN:BootMHDIns"$().  Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart16.CPP"$ if you relocate it.
 $ID,-2$$TR,"Why is there some 16-Bit code?"$
 $ID,2$TempleOS is 64-bit.  Like all PC operating systems, the boot-loader starts in 16-bit real-mode.  TempleOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode.  There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access.  TempleOS calls $LK,"that",A="FI:::/Kernel/PCIBIOS.CPP"$ a couple times.  It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking.
 $ID,-2$$TR,"Why are you pushing 32-bit values on the stack?"$
diff --git a/Doc/Glossary.TXT b/Doc/Glossary.TXT
index 78756d5..1972700 100644
--- a/Doc/Glossary.TXT
+++ b/Doc/Glossary.TXT
@@ -49,7 +49,7 @@ $FG,2$Elem$FG$	Element
 $FG,2$Equ$FG$	Equal
 $FG,2$Evt$FG$	Event
 $FG,2$Exe$FG$	Execute
-$FG,2$Ext$FG$	Extern, Extended
+$FG,2$Ext$FG$	Extern, Extended, Extract
 $FG,2$Feat$FG$	Feature
 $FG,2$FG$FG$	Foreground
 $FG,2$Fmt$FG$	Format
@@ -94,7 +94,7 @@ $FG,2$ODE$FG$	Ordinary Differential Equation
 $FG,2$Opt$FG$	Option, Optimize
 $FG,2$Paren$FG$	Parenthesis
 $FG,2$Pix$FG$	Pixel
-$FG,2$$FG,2$Pkg$FG$	Package
+$FG,2$Pkg$FG$	Package
 $FG,2$Poly$FG$	Polygon
 $FG,2$Pos$FG$	Position
 $FG,2$Pow$FG$	Power
@@ -255,8 +255,6 @@ $ID,-2$$TR,"Gs"$
 $ID,2$The CPU GS segment reg.  This reg points to the current core's $LK,"CCPU",A="MN:CCPU"$.
 $ID,-2$$TR,"Heap"$
 $ID,2$Programs can dynamically request chunks of memory alloced from a $FG,2$heap$FG$ using $LK,"MAlloc",A="MN:MAlloc"$().  They must $LK,"Free",A="MN:Free"$() it when finished.  Ptrs are used to refer to the chunk.  The $FG,2$heap$FG$ is dynamically alloced mem.
-$ID,-2$$TR,"Root"$
-$ID,2$The base of a binary tree or the head of a queue is the $FG,2$root$FG$.  (I don't like the word $FG,2$head$FG$.)
 $ID,-2$$TR,"Join"$
 $ID,2$When two parts of a program have a common low-level routine, that routine is often labeled SomethingJoin.
 $ID,-2$$TR,"user_data"$
diff --git a/Doc/Grub.TXT b/Doc/Grub.TXT
deleted file mode 100644
index 5db996c..0000000
--- a/Doc/Grub.TXT
+++ /dev/null
@@ -1,23 +0,0 @@
-$FG,5$$TX+CX,"The Grub Master Bootloader"$$FG$
-
-$WW,1$Here are my $FG,2$grub.cfg$FG$ file entries for my TempleOS partitions.  I don't have the patience to do it correctly and GRUB obfuscates.  Chain loading is just the normal way an operating system like Windows boots.  They do drives, zero-based, and partitions on drives, one-based.  They call traditional partitioning a "msdos" partition and I presume, if there is a new way to partition drives, it has a new name.
-
-In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS.  "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning.  I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ ident by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files.  They only need to be a couple Gig in size.  Every time I copy files, use $LK,"BootHDIns",A="MN:BootHDIns"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$.
-
-menuentry "TempleOS D" {
-	insmod chain
-	set root=(hd0,msdos1)
-	chainloader +1
-}
-
-menuentry "TempleOS E" {
-	insmod chain
-	set root=(hd0,msdos5)
-	chainloader +1
-}
-
-menuentry "TempleOS I" {
-	insmod chain
-	set root=(hd1,msdos5)
-	chainloader +1
-}
diff --git a/Doc/HolyC.TXT b/Doc/HolyC.TXT
index 5ec8719..5334ed3 100644
--- a/Doc/HolyC.TXT
+++ b/Doc/HolyC.TXT
@@ -198,11 +198,11 @@ $FG$$ID,-2$
   $FG,2$^$FG$
   $FG,2$|$FG$
   $FG,2$+$FG$,$FG,2$-$FG$
-  $FG,2$$FG,2$<$FG$,$FG,2$>$FG$,$FG,2$<=$FG$,$FG,2$>=$FG$
+  $FG,2$<$FG$,$FG,2$>$FG$,$FG,2$<=$FG$,$FG,2$>=$FG$
   $FG,2$==$FG$,$FG,2$!=$FG$
   $FG,2$&&$FG$
-  $FG,2$$FG,2$^^$FG$
-  $FG,2$||$FG$$FG$
+  $FG,2$^^$FG$
+  $FG,2$||$FG$
   $FG,2$=$FG$,$FG,2$<<=$FG$,$FG,2$>>=$FG$,$FG,2$*=$FG$,$FG,2$/=$FG$,$FG,2$&=$FG$,$FG,2$|=$FG$,$FG,2$^=$FG$,$FG,2$+=$FG$,$FG,2$-=$FG$
 
 * You can use $LK,"Option",A="MN:Option"$($LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$,ON) to find unnecessary parentheses in code.
diff --git a/Doc/Install.TXT b/Doc/Install.TXT
index 66a9f41..c3ecd4d 100644
--- a/Doc/Install.TXT
+++ b/Doc/Install.TXT
@@ -34,7 +34,7 @@ $ID,2$This command is used to copy files onto a hard drive partition from the CD
 $ID,-2$4) $LK,"BootHDIns",A="MN:BootHDIns"$($FG,2$'D'$FG$)
 $ID,2$This command recompiles the source code on a drive and writes to the $UL,1$drive's$UL,0$ boot record.  You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel.
 
-$ID,-2$5) Use Linux's $LK,"Grub",A="FI:::/Doc/Grub.TXT"$ or TempleOS' $LK,"BootMHDIns",A="MN:BootMHDIns"$($FG,2$'D'$FG$)
+$ID,-2$5) Use Linux's Grub or TempleOS' $LK,"BootMHDIns",A="MN:BootMHDIns"$($FG,2$'D'$FG$)
 $ID,2$
 The $LK,"BootMHDIns",A="MN:BootMHDIns"$() command places a boot loader on a drive.  It saves the old master boot record to $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ and replaces it.  When you boot, you will have the option of booting the old master boot record.  This command can be skipped if you already have a boot loader.  Be sure not to lose the copy of the old boot record, like if you reformat the drive.
 
diff --git a/Doc/MemOverview.TXT b/Doc/MemOverview.TXT
index 6c6ed0a..80d3d59 100644
--- a/Doc/MemOverview.TXT
+++ b/Doc/MemOverview.TXT
@@ -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 ident to physical.  All tasks on all cores use the same page table map, just as though all addresses are physical addresses.  2 Meg page table entries are used.  Nothing swaps to disk.
+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.  2 Meg page table entries are used.  Nothing swaps to disk.  You can adjust $LK,"MEM_MAPPED_SPACE",A="MN:MEM_MAPPED_SPACE"$ for more RAM.
 
 In TempleOS, the lowest 2 Gig 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 2 Gig distance.  Therefore, TempleOS keeps all code in the lowest 2 Gig memory addresses including what would normally be called "the kernel".  Two Gig is plenty for code, don't worry.
 
@@ -14,7 +14,7 @@ See $LK,"MemRep",A="MN:MemRep"$() and $LK,"::/Demo/MemDemo.CPP"$.
 
 $FG,5$$TX+CX,"Single System-wide Mem Map"$
 
-$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"000347DF",D="DD_KERNEL_END"$$FG$
+$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"00035F3F",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$
@@ -29,10 +29,10 @@ $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,"001835FF",D="DD_SYS_FIXED_AREA_END"$$FG$
-$ID,2$$LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for page tables and misc.  $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ of address space mapped.
+$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"002037FF",D="DD_SYS_FIXED_AREA_END"$$FG$
+$ID,2$$LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for page tables and misc.  $TX,"256 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ of address space mapped.
 $ID,-2$
-$FG,2$ 0x00$TX,"00183600",D="DD_SYS_HEAP_BASE"$- 0x00$TX,"3FFE3DFF",D="DD_SYS_HEAP_LIMIT"$$FG$
+$FG,2$ 0x00$TX,"00203800",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$
@@ -42,11 +42,14 @@ $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,"1FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
+$FG,2$ 0x0100000000-~0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_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,"1FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$$FG$
-$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting bwd from $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$, but no PCI devices are actually supported$WW,0$.
+$FG,2$ 0x$TX,"3F00000000",D="DD_UNCACHED_ALIAS"$- 0x$TX,"3FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
+$ID,2$Uncached alias of first 4 Gig.  (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,"256 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$, but no PCI devices are actually supported$WW,0$.
 $ID,-2$
 
 
diff --git a/Doc/Requirements.TXT b/Doc/Requirements.TXT
index 43af90a..3e87d4d 100644
--- a/Doc/Requirements.TXT
+++ b/Doc/Requirements.TXT
@@ -10,7 +10,7 @@ $FG,5$Supported Hardware$FG$
 
 * Most$FG$ keyboards and mice.
 
-* Minimum $TX,"512 Meg",D="DD_MEM_MIN_MEG"$ RAM; Maximum $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ RAM (easily increased).
+* Minimum $TX,"512 Meg",D="DD_MEM_MIN_MEG"$ RAM; Maximum $TX,"256 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ RAM ($LK,"easily increased",A="MN:MEM_MAPPED_SPACE"$).
 
 * Internal PC Speakers.
 
diff --git a/Doc/Sprite.TXT b/Doc/Sprite.TXT
index ae5b0d8..96352d5 100644
--- a/Doc/Sprite.TXT
+++ b/Doc/Sprite.TXT
@@ -1,4 +1,4 @@
-$WW,1$A $LK,"CSprite",A="MN:CSprite"$ is an ordered list of $LK,"these",A="MN:SPT_END"$ elements, created with $FG,2$$FG$$FG$.  Normally, they are packed together in a list and the address of the first is passed to routines.
+$WW,1$A $LK,"CSprite",A="MN:CSprite"$ is an ordered list of $LK,"these",A="MN:SPT_END"$ elements, created with $FG,2$$FG$.  Normally, they are packed together in a list and the address of the first is passed to routines.
 
 See $LK,"::/Demo/Graphics/SpritePlot.CPP"$, $LK,"::/Demo/Graphics/SpritePlot3D.CPP"$, $LK,"::/Demo/Graphics/SpritePut.CPP"$, $LK,"::/Demo/Graphics/SpriteRaw.CPP"$ and $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$().
 
diff --git a/Doc/StdTempleOSPC.TXT b/Doc/StdTempleOSPC.TXT
index 03c0218..e0b17d6 100644
--- a/Doc/StdTempleOSPC.TXT
+++ b/Doc/StdTempleOSPC.TXT
@@ -56,7 +56,7 @@ $FG,5$$TX+CX,"Version One"$$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 and a webcam.  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.  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.  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.
+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.
 
 TempleOS will have the priority over Windows or Linux on hardware decisions.  We could make it heterogenious multicore.  I think we want 16 non-hyperthreaded cores.  Core#0 is the only full-featured core needed.  The other cores will have long mode, but not some of these: real mode, protected mode, ring-3, paging, interrupts, in/out port instructions, SSE instructions,  MMX instructions.  This $LK,"Graphics Job",A="FI:~/Web/TAD/GraphicsPerformance.TXT"$ is what to optimize for.
 
diff --git a/Doc/Welcome.TXT b/Doc/Welcome.TXT
index 3c3b87d..c948210 100644
--- a/Doc/Welcome.TXT
+++ b/Doc/Welcome.TXT
@@ -7,11 +7,45 @@ $ID,2$* Professionals doing hobby projects
 * Teenagers doing projects
 * Non-professional, older-persons projects
 $ID,-2$
-Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with.  As it turns-out, simplicity makes it faster in some ways, too.  It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed.  It's only $TX,"81,056",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools.  More importantly, it's designed to keep the user's line count down -- you can do a $LK,"Hello World",A="FI:::/Doc/HelloWorld.TXT"$ application in one line of code and can put graphics on the screen with a three line program!
+Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with.  As it turns-out, simplicity makes it faster in some ways, too.  It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed.  It's only $TX,"81,125",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools.  More importantly, it's designed to keep the user's line count down -- you can do a $LK,"Hello World",A="FI:::/Doc/HelloWorld.TXT"$ application in one line of code and can put graphics on the screen with a three line program!
 
 It's a kayak, not a Titanic -- it will crash if you do something wrong.  You quickly reboot, however.  DOS and the 8-bit home computers of the 80's worked fine without memory protection and most computers in the world -- the embedded ones -- operate without protection.  The resulting simplicity of no protections is why TempleOS has value.  In facts, that's the point of TempleOS.  See the $LK,"TempleOS Charter",A="FI:::/Doc/Charter.TXT"$.
 
-Conventional thinking is "failure is not an option" for general purpose operating systems.  Since this OS is used in addition to Windows or Linux, however, failure is an option -- just use Windows or Linux if you can't do something.  I cherry-pick what it will and won't do to make it maximally beautiful.
+Conventional thinking is "failure is not an option" for general purpose operating systems.  Since this OS is used in addition to Windows or Linux, however, failure is an option -- just use Windows or Linux if you can't do something.  I cherry-pick what it will and won't do, to make it maximally beautiful.  The following applications more or less form a basis that spans the range of use that TempleOS is intended for:
+
+$LK,"/Demo/Games/BattleLines.CPP",A="FI:::/Demo/Games/BattleLines.CPP"$
+$LK,"/Demo/Games/BigGuns.CPP",A="FI:::/Demo/Games/BigGuns.CPP"$
+$LK,"/Demo/Games/BlackDiamond.CPP",A="FI:::/Demo/Games/BlackDiamond.CPP"$
+$LK,"/Demo/Games/BomberGolf.CPP",A="FI:::/Demo/Games/BomberGolf.CPP"$
+$LK,"/Demo/Games/CastleFrankenstein.CPP",A="FI:::/Demo/Games/CastleFrankenstein.CPP"$
+$LK,"/Demo/Games/CharDemo.CPP",A="FI:::/Demo/Games/CharDemo.CPP"$
+$LK,"/Demo/Games/CircleTrace.CPP",A="FI:::/Demo/Games/CircleTrace.CPP"$
+$LK,"/Demo/Games/Collision.CPP",A="FI:::/Demo/Games/Collision.CPP"$
+$LK,"/Demo/Games/Digits.CPP",A="FI:::/Demo/Games/Digits.CPP"$
+$LK,"/Demo/Games/DunGen.CPP",A="FI:::/Demo/Games/DunGen.CPP"$
+$LK,"/Demo/Games/EagleDive.CPP",A="FI:::/Demo/Games/EagleDive.CPP"$
+$LK,"/Demo/Games/ElephantWalk.CPP",A="FI:::/Demo/Games/ElephantWalk.CPP"$
+$LK,"/Demo/Games/FlapBat.CPP",A="FI:::/Demo/Games/FlapBat.CPP"$
+$LK,"/Demo/Games/FlatTops.CPP",A="FI:::/Demo/Games/FlatTops.CPP"$
+$LK,"/Demo/Games/Halogen.CPP",A="FI:::/Demo/Games/Halogen.CPP"$
+$LK,"/Demo/Games/MassSpring.CPP",A="FI:::/Demo/Games/MassSpring.CPP"$
+$LK,"/Demo/Games/Maze.CPP",A="FI:::/Demo/Games/Maze.CPP"$
+$LK,"/Demo/Games/RainDrops.CPP",A="FI:::/Demo/Games/RainDrops.CPP"$
+$LK,"/Demo/Games/RawHide.CPP",A="FI:::/Demo/Games/RawHide.CPP"$
+$LK,"/Demo/Games/Rocket.CPP",A="FI:::/Demo/Games/Rocket.CPP"$
+$LK,"/Demo/Games/RocketScience.CPP",A="FI:::/Demo/Games/RocketScience.CPP"$
+$LK,"/Demo/Games/Squirt.CPP",A="FI:::/Demo/Games/Squirt.CPP"$
+$LK,"/Demo/Games/TheDead.CPP",A="FI:::/Demo/Games/TheDead.CPP"$
+$LK,"/Demo/Games/TicTacToe.CPP",A="FI:::/Demo/Games/TicTacToe.CPP"$
+$LK,"/Demo/Games/TreeCheckers.CPP",A="FI:::/Demo/Games/TreeCheckers.CPP"$
+$LK,"/Demo/Games/Varoom.CPP",A="FI:::/Demo/Games/Varoom.CPP"$
+$LK,"/Demo/Games/Wenceslas.CPP",A="FI:::/Demo/Games/Wenceslas.CPP"$
+$LK,"/Demo/Games/Whap.CPP",A="FI:::/Demo/Games/Whap.CPP"$
+$LK,"/Demo/Games/Zing.CPP",A="FI:::/Demo/Games/Zing.CPP"$
+$LK,"/Demo/Games/ZoneOut.CPP",A="FI:::/Demo/Games/ZoneOut.CPP"$
+$LK,"/Apps/Psalmody/Examples/childish.CPP",A="FI:::/Apps/Psalmody/Examples/childish.CPP"$
+$LK,"/Apps/Psalmody/Examples/night.CPP",A="FI:::/Apps/Psalmody/Examples/night.CPP"$
+$LK,"/Apps/Psalmody/Examples/prosper.CPP",A="FI:::/Apps/Psalmody/Examples/prosper.CPP"$
 
 Two things to know about TempleOS are that $UL,1$tasks$UL,0$ have $LK,"MAlloc",A="MN:MAlloc"$/$LK,"Free",A="MN:Free"$ heap memory, not applications, and tasks have compiler symbol tables that persist at a scope like environment variables in other operating systems, and the symbols can include functions.
 
@@ -73,7 +107,7 @@ $FG,2$$FG$ horizontally tiles windows.
 The $FG,2$ALT$FG$ keys are defined in $LK,"~/HomeKeyPlugIns.CPP"$.  You can customize them.
 
 $FG,2$$FG$ new terminal window.
-$FG,2$$FG,2$$FG$ switches to the next window.
+$FG,2$$FG$ switches to the next window.
 $FG,2$$FG$ kills a window.
 
 $LK,"Find",A="MN:Find"$() is your best friend.  There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$~/HomeWrappers.CPP.Z$FG$ file.  Feel free to make wrapper functions for functions you use often and customize the args.  By the way, $LK,"Find",A="MN:Find"$() or $LK,"R",A="MN:R"$() can be used to replace strings across multiple files.  You can access $LK,"Find",A="MN:Find"$() using $FG,2$$FG$.
@@ -82,14 +116,21 @@ As you browse code, use the $FG,2$AutoComplete$FG$ window to look-up functions,
 
 Use the $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$ or $LK,"Demo Index",A="FI:::/Doc/DemoIndex.TXT"$ to find-out what exists.  Press $FG,2$$FG$ for help or use the links on your menu ($FG,2$$FG$).  Also, look in the $FG,2$/Demo$FG$ or $FG,2$/Apps$FG$ directories for inspiration.
 
-3rd parties can make TempleOS software.  It will be distributed as $LK,"RedSea ISO Files",A="MN:RedSeaISO"$.  Burn a CD/DVD, or in a $FG,2$QEMU$FG$$FG$, $FG,2$VMware$FG$ or $FG,2$VirtualBox$FG$, set your CD/DVD to point to the ISO file.  Then, access the $FG,2$'T'$FG$ drive.  Or, $LK,"Mount",A="MN:Mount"$() the ISO file and access the $FG,2$'M'$FG$ drive.  Ideally, do not install applications such as games onto your hard drive because we wish to keep hard drive usage low, so the whole $FG,2$'C'$FG$ drive can quickly be copied to $FG,2$'D'$FG$.  Also, the $LK,"FileMgr",A="MN:FileMgr"$() starts too slowly with lots of hard drive files.
+Software is distributed as $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ ISO files.  Burn a CD/DVD, or set your CD/DVD in $FG,2$QEMU$FG$, $FG,2$VMware$FG$ or $FG,2$VirtualBox$FG$ to the ISO file.  Then, access the $FG,2$'T'$FG$ drive.  Or, $LK,"Mount",A="MN:Mount"$() the ISO.C file and access the $FG,2$'M'$FG$ drive in TempleOS.  It must be a contiguous ISO.C file, so rename it under TempleOS to ISO.C.
+
+Ideally, do not install applications such as games onto your hard drive because we wish to keep hard drive usage low, so the whole $FG,2$'C'$FG$ drive can be copied quickly to $FG,2$'D'$FG$.  Also, the $LK,"FileMgr",A="MN:FileMgr"$() $FG,2$$FG$ starts too slowly when there are lots of hard drive files, but that is how we want it.
+
+3rd party libraries are banned, since they circumvent the 100,000 line of code limit in the $LK,"TempleOS Charter",A="FI:::/Doc/Charter.TXT"$.  All applications must only depend on the core TempleOS files and whatever they bring along in the ISO.  This is similar to how Commodore 64 applications only depended on the ROM.
+
+Create a $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ ISO file with $LK,"RedSeaISO",A="MN:RedSeaISO"$().  Send an email to $TX,"tdavis@templeos.org",HTML="mailto:tdavis@templeos.org"$ if you want me to post a link to your TempleOS code in the App Store.
 
 $MA-X+PU,"Take Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$
 
 $FG,8$
 * "Linux" is a trademark owned by Linus Torvalds.
 * "Windows" is a trademark owned by MicroSoft Corp.
+* "Commodore 64" was a trademark owned by Commodore Business Machines.
 * "QEMU" is a trademark owned by Fabrice Bellard.
 * "VMware" is a trademark owned by VMware, Inc.
 * "VirtualBox" is a trademark owned by Oracle.
-$FG$$FG$
\ No newline at end of file
+$FG$
\ No newline at end of file
diff --git a/Kernel/BlkDev/DskATAId.CPP b/Kernel/BlkDev/DskATAId.CPP
index 64367dd..8d5a270 100644
--- a/Kernel/BlkDev/DskATAId.CPP
+++ b/Kernel/BlkDev/DskATAId.CPP
@@ -1,4 +1,4 @@
-Bool BootDVDProve(CBlkDev *bd)
+Bool BootDVDProbe(CBlkDev *bd)
 {
   U8 *img=CAlloc(DVD_BLK_SIZE);
   I64 i;
@@ -12,7 +12,7 @@ Bool BootDVDProve(CBlkDev *bd)
 	if (ATAPIReadBlks2(bd,tS+7.0,img,sys_boot_blk,1,FALSE)) {
 	  if ((img+sys_boot_src.u16[1]<compile_time==sys_compile_time) {
-	    " Found";
+	    " Found\n";
 	    return TRUE;
 	  } else
 	    " Read";
@@ -43,10 +43,10 @@ Bool BootDVDProbeAll(CBlkDev *bd)
       if (d1&1 && d2&1) {
 	if (bd->base0=d1&~7) {
 	  bd->unit=0;
-	  if (BootDVDProve(bd))
+	  if (BootDVDProbe(bd))
 	    return TRUE;
 	  bd->unit=1;
-	  if (BootDVDProve(bd))
+	  if (BootDVDProbe(bd))
 	    return TRUE;
 	}
       }
@@ -55,10 +55,10 @@ Bool BootDVDProbeAll(CBlkDev *bd)
       if (d1&1 && d2&1) {
 	if (bd->base0=d1&~7) {
 	  bd->unit=0;
-	  if (BootDVDProve(bd))
+	  if (BootDVDProbe(bd))
 	    return TRUE;
 	  bd->unit=1;
-	  if (BootDVDProve(bd))
+	  if (BootDVDProbe(bd))
 	    return TRUE;
 	}
       }
@@ -69,10 +69,10 @@ Bool BootDVDProbeAll(CBlkDev *bd)
   d2=0x3F6;
   if (bd->base0=d1&~7) {
     bd->unit=0;
-    if (BootDVDProve(bd))
+    if (BootDVDProbe(bd))
       return TRUE;
     bd->unit=1;
-    if (BootDVDProve(bd))
+    if (BootDVDProbe(bd))
       return TRUE;
   }
 
@@ -80,16 +80,16 @@ Bool BootDVDProbeAll(CBlkDev *bd)
   d2=0x376;
   if (bd->base0=d1&~7) {
     bd->unit=0;
-    if (BootDVDProve(bd))
+    if (BootDVDProbe(bd))
       return TRUE;
     bd->unit=1;
-    if (BootDVDProve(bd))
+    if (BootDVDProbe(bd))
       return TRUE;
   }
 }
 
 U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg,
-		CATARep **_root,I64 *num_hints)
+		CATARep **_head,I64 *num_hints)
 {
   I64 type;
   base0&=-8;
@@ -104,10 +104,10 @@ U0 ATARepEntry(I64 base0,I64 base1,I64 unit,I64 irq,U8 *msg,
       "$$RED$$CD/DVD Drive $$LTBLUE$$ATAPI ";
     "%s$$FG$$\nBase0:0x%04X    Base1:0x%04X\nIrq:0x%02X Unit:%d$$LM,0$$\n",
 	  msg,base0,base1,irq,unit;
-    if (_root) {
+    if (_head) {
       tempha=CAlloc(sizeof(CATARep));
-      tempha->next=*_root;
-      *_root=tempha;
+      tempha->next=*_head;
+      *_head=tempha;
       tempha->num=*num_hints;
       tempha->type=type;
       tempha->base0=base0;
@@ -128,11 +128,11 @@ Bool ATARepExitAllApplications()
     return FALSE;
 }
 
-public I64 ATARep(Bool pmt=TRUE,Bool just_ide=FALSE,CATARep **_root=NULL)
+public I64 ATARep(Bool pmt=TRUE,Bool just_ide=FALSE,CATARep **_head=NULL)
 {//Report possible ATA devices by probing.  Hard disks and CD/DVDs.
   I64 d1,d2,d3,i,j,k,cnt=0,unlock_flags=0,num_hints=0;
 #assert NUM_BLKDEVS<=64
-  if (_root) *_root=NULL;
+  if (_head) *_head=NULL;
 
   if (pmt && ATARepExitAllApplications)
     return 0;
@@ -157,33 +157,33 @@ public I64 ATARep(Bool pmt=TRUE,Bool just_ide=FALSE,CATARep **_root=NULL)
 	d2=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x14);
 	d3=PCIReadU8(j.u8[2],j.u8[1],j.u8[0],0x3C);
 	if (d1&1 && d2&1) {
-	  ATARepEntry(d1,d2,0,d3,"Primary IDE",_root,&num_hints);
-	  ATARepEntry(d1,d2,1,d3,"Primary IDE",_root,&num_hints);
+	  ATARepEntry(d1,d2,0,d3,"Primary IDE",_head,&num_hints);
+	  ATARepEntry(d1,d2,1,d3,"Primary IDE",_head,&num_hints);
 	} else {
 	  d1=0x1F0; d2=0x3F6; d3=14;
-	  ATARepEntry(d1,d2,0,d3,"Primary IDE",_root,&num_hints);
-	  ATARepEntry(d1,d2,1,d3,"Primary IDE",_root,&num_hints);
+	  ATARepEntry(d1,d2,0,d3,"Primary IDE",_head,&num_hints);
+	  ATARepEntry(d1,d2,1,d3,"Primary IDE",_head,&num_hints);
 	}
 	d1=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x18);
 	d2=PCIReadU32(j.u8[2],j.u8[1],j.u8[0],0x1C);
 	if (d1&1 && d2&1) {
-	  ATARepEntry(d1,d2,0,d3,"Secondary IDE",_root,&num_hints);
-	  ATARepEntry(d1,d2,1,d3,"Secondary IDE",_root,&num_hints);
+	  ATARepEntry(d1,d2,0,d3,"Secondary IDE",_head,&num_hints);
+	  ATARepEntry(d1,d2,1,d3,"Secondary IDE",_head,&num_hints);
 	} else {
 	  d1=0x170; d2=0x376; d3=15;
-	  ATARepEntry(d1,d2,0,d3,"Secondary IDE",_root,&num_hints);
-	  ATARepEntry(d1,d2,1,d3,"Secondary IDE",_root,&num_hints);
+	  ATARepEntry(d1,d2,0,d3,"Secondary IDE",_head,&num_hints);
+	  ATARepEntry(d1,d2,1,d3,"Secondary IDE",_head,&num_hints);
 	}
       }
     }
   if (!cnt) {
     d1=0x1F0; d2=0x3F6; d3=14;
-    ATARepEntry(d1,d2,0,d3,"Primary IDE",_root,&num_hints);
-    ATARepEntry(d1,d2,1,d3,"Primary IDE",_root,&num_hints);
+    ATARepEntry(d1,d2,0,d3,"Primary IDE",_head,&num_hints);
+    ATARepEntry(d1,d2,1,d3,"Primary IDE",_head,&num_hints);
 
     d1=0x170; d2=0x376; d3=15;
-    ATARepEntry(d1,d2,0,d3,"Secondary IDE",_root,&num_hints);
-    ATARepEntry(d1,d2,1,d3,"Secondary IDE",_root,&num_hints);
+    ATARepEntry(d1,d2,0,d3,"Secondary IDE",_head,&num_hints);
+    ATARepEntry(d1,d2,1,d3,"Secondary IDE",_head,&num_hints);
   }
   '\n\n';
   for (i=0;inum==needle_num)
-      return haystack_root;
-    haystack_root=haystack_root->next;
+  while (haystack_head) {
+    if (haystack_head->num==needle_num)
+      return haystack_head;
+    haystack_head=haystack_head->next;
   }
   return NULL;
 }
 
-CATARep *ATAIDDrvs(CATARep *root,CATARep **_ata_drv,CATARep **_atapi_drv)
+CATARep *ATAIDDrvs(CATARep *head,CATARep **_ata_drv,CATARep **_atapi_drv)
 {//This is for when trying to sort-out main hard drives and CD/DVD drives.
-  CATARep *res=NULL,*tempha=root,*ata_drv=NULL,*atapi_drv=NULL;
+  CATARep *res=NULL,*tempha=head,*ata_drv=NULL,*atapi_drv=NULL;
   CBlkDev *bd;
   Bool was_silent=Silent;
   bd=Let2BlkDev(':',FALSE);
@@ -256,16 +256,16 @@ I64 AutoMountIDE()
 //It uses 'C' and 'T' as first drive letters or whatever you set
   //in config when compiling Kernel.BIN.
   I64 res=0;
-  CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL,*tempha;
-  ATARep(FALSE,TRUE,&root);
-  ATAIDDrvs(root,&ata_drv,&atapi_drv);
+  CATARep *head=NULL,*ata_drv=NULL,*atapi_drv=NULL,*tempha;
+  ATARep(FALSE,TRUE,&head);
+  ATAIDDrvs(head,&ata_drv,&atapi_drv);
   if (ata_drv && ATAMount(blkdev.first_hd_drv_let,BDT_ATA,
 	ata_drv->base0,ata_drv->base1,ata_drv->unit))
     res++;
   if (atapi_drv && ATAMount(blkdev.first_dvd_drv_let,BDT_ATAPI,
 	atapi_drv->base0,atapi_drv->base1,atapi_drv->unit))
     res++;
-  tempha=root;
+  tempha=head;
   while (tempha) {
     if (tempha!=ata_drv && tempha!=atapi_drv) {
       if (tempha->type==BDT_ATA && ATAMount(blkdev.first_hd_drv_let,BDT_ATA,
@@ -278,7 +278,7 @@ I64 AutoMountIDE()
     }
     tempha=tempha->next;
   }
-  LinkedLstDel(root);
+  LinkedLstDel(head);
   blkdev.auto_mount_ide_cnt=res;
   return res;
 }
diff --git a/Kernel/BlkDev/DskAddDev.CPP b/Kernel/BlkDev/DskAddDev.CPP
index af3f11a..5ca2cb2 100644
--- a/Kernel/BlkDev/DskAddDev.CPP
+++ b/Kernel/BlkDev/DskAddDev.CPP
@@ -203,7 +203,7 @@ Bool GetBaseUnit(CBlkDev *bd)
       while (!('0'<=ch<='1'));
       '' ch;
       bd->unit=ch-'0';
-      blkdev.dvd_boot_is_good=BootDVDProve(bd);
+      blkdev.dvd_boot_is_good=BootDVDProbe(bd);
       return TRUE;
     } else {
       blkdev.dvd_boot_is_good=FALSE;
diff --git a/Kernel/EdLite.CPP b/Kernel/EdLite.CPP
index 481f583..8a09a51 100644
--- a/Kernel/EdLite.CPP
+++ b/Kernel/EdLite.CPP
@@ -4,7 +4,7 @@ class CLine
   U8 *line;
 };
 
-U0 EdLiteUpdate(CLine *root,CLine *cur_line,I64 cur_col,I64 line_start_col)
+U0 EdLiteUpdate(CLine *head,CLine *cur_line,I64 cur_col,I64 line_start_col)
 {
   I64 ch,i,j,k,k2,cursor_col,cursor_row=-1;
   U8 *st;
@@ -12,7 +12,7 @@ U0 EdLiteUpdate(CLine *root,CLine *cur_line,I64 cur_col,I64 line_start_col)
   Bool done_eof=FALSE;
   text.raw_col=0;
   for (i=0;ilast!=root)
+    if (templ->last!=head)
       templ=templ->last;
   for (i=0;iline;
       k=0;
       j=0;
@@ -60,7 +60,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
   U8 *src,*src2,*src3,*dst,*buf,*bin_data=NULL;
   I64 i,cnt=0,ch,sc,size,bin_size=0,line_start_col=0,cur_col=0,
 	old_raw_flags=text.raw_flags;
-  CLine root,*templ,*templ1,*cur_line;
+  CLine head,*templ,*templ1,*cur_line;
   Bool	res=FALSE,
 	old_raw=Raw(ON),
 	old_debug=InDbg(ON),
@@ -73,8 +73,8 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
   CLI
   text.raw_flags=text.raw_flags&~RWF_SCROLL|RWF_SHOW_DOLLAR;
   kbd.scan_code=0;
-  QueInit(&root);
-  root.line=StrNew("");
+  QueInit(&head);
+  head.line=StrNew("");
 
   if (buf) {
     src=buf;
@@ -95,7 +95,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 
       templ=MAlloc(sizeof(CLine));
       templ->line=StrNew(src2);
-      QueIns(templ,root.last);
+      QueIns(templ,head.last);
       cnt++;
     }
 
@@ -107,7 +107,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
     res=TRUE;
   }
 
-  cur_line=root.next;
+  cur_line=head.next;
   if (--num<0)
     res=FALSE;
   else {
@@ -115,29 +115,29 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
       while (num--)
 	cur_line=cur_line->next;
     else {
-      cur_line=&root;
+      cur_line=&head;
       res=FALSE;
     }
   }
   do {
-    if (cur_line==&root)
+    if (cur_line==&head)
       cur_col=0;
     while (cur_col-line_start_col<0)
       line_start_col-=8;
     while (cur_col-line_start_col>=text.cols)
       line_start_col+=8;
-    EdLiteUpdate(&root,cur_line,cur_col,line_start_col);
+    EdLiteUpdate(&head,cur_line,cur_col,line_start_col);
     switch (ch=GetKey(&sc,FALSE,TRUE)) {
       case 0:
 	switch (sc.u8[0]) {
 	  case SC_CURSOR_UP:
-	    if (cur_line->last!=&root)
+	    if (cur_line->last!=&head)
 	      cur_line=cur_line->last;
 	    if (cur_col>StrLen(cur_line->line))
 	      cur_col=StrLen(cur_line->line);
 	    break;
 	  case SC_CURSOR_DOWN:
-	    if (cur_line!=&root)
+	    if (cur_line!=&head)
 	      cur_line=cur_line->next;
 	    if (cur_col>StrLen(cur_line->line))
 	      cur_col=StrLen(cur_line->line);
@@ -146,7 +146,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	    cur_col++;
 	    if (cur_col>StrLen(cur_line->line)) {
 	      templ=cur_line->next;
-	      if (templ!=&root) {
+	      if (templ!=&head) {
 		cur_col=0;
 		cur_line=templ;
 	      } else
@@ -158,7 +158,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	      cur_col--;
 	    else {
 	      templ=cur_line->last;
-	      if (templ!=&root) {
+	      if (templ!=&head) {
 		cur_line=templ;
 		cur_col=StrLen(templ->line);
 	      }
@@ -166,7 +166,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	    break;
 	  case SC_PAGE_UP:
 	    for (i=1;ilast!=&root)
+	      if (cur_line->last!=&head)
 		cur_line=cur_line->last;
 	      if (cur_col>StrLen(cur_line->line))
 		cur_col=StrLen(cur_line->line);
@@ -174,7 +174,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	    break;
 	  case SC_PAGE_DOWN:
 	    for (i=1;inext;
 	      if (cur_col>StrLen(cur_line->line))
 		cur_col=StrLen(cur_line->line);
@@ -183,7 +183,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	  case SC_DELETE:
 	    if (cur_col==StrLen(cur_line->line)) {
 	      templ=cur_line->next;
-	      if (cur_line!=&root && templ!=&root) {
+	      if (cur_line!=&head && templ!=&head) {
 		src=MStrPrint("%s%s",cur_line->line,templ->line);
 		Free(cur_line->line);
 		Free(templ->line);
@@ -209,7 +209,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	if (cur_col) {
 	  StrCpy(cur_line->line+cur_col-1,cur_line->line+cur_col);
 	  cur_col--;
-	} else if (cur_line!=&root && cur_line->last!=&root) {
+	} else if (cur_line!=&head && cur_line->last!=&head) {
 	  templ=cur_line->last;
 	  src=MStrPrint("%s%s",templ->line,cur_line->line);
 	  cur_col=StrLen(templ->line);
@@ -222,7 +222,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	}
 	break;
       case CH_CTRLY:
-	if (cur_line!=&root) {
+	if (cur_line!=&head) {
 	  templ=cur_line;
 	  cur_line=cur_line->next;
 	  QueRem(templ);
@@ -233,10 +233,10 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
 	break;
       default:
 	if (Bt(chars_bmp_getkey,ch)) {
-	  if (cur_line==&root) {
+	  if (cur_line==&head) {
 	    cur_line=MAlloc(sizeof(CLine));
 	    cur_line->line=StrNew("");
-	    QueIns(cur_line,root.last);
+	    QueIns(cur_line,head.last);
 	  }
 	  src=MAlloc(StrLen(cur_line->line)+2);
 	  MemCpy(src,cur_line->line,cur_col);
@@ -258,15 +258,15 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
   } else {
     size=bin_size;
 
-    templ=root.next;
-    while (templ!=&root) {
+    templ=head.next;
+    while (templ!=&head) {
       size+=StrLen(templ->line)+1;
       templ=templ->next;
     }
 
     buf=dst=MAlloc(size);
-    templ=root.next;
-    while (templ!=&root) {
+    templ=head.next;
+    while (templ!=&head) {
       i=StrLen(templ->line);
       MemCpy(dst,templ->line,i);
       dst+=i;
@@ -282,15 +282,15 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
       res=TRUE;
   }
 
-  templ=root.next;
-  while (templ!=&root) {
+  templ=head.next;
+  while (templ!=&head) {
     templ1=templ->next;
     QueRem(templ);
     Free(templ->line);
     Free(templ);
     templ=templ1;
   }
-  Free(root.line);
+  Free(head.line);
   Free(bin_data);
   Raw(old_raw);
   InDbg(old_debug);
diff --git a/Kernel/KDataTypes.CPP b/Kernel/KDataTypes.CPP
index 1a71177..c01ec30 100644
--- a/Kernel/KDataTypes.CPP
+++ b/Kernel/KDataTypes.CPP
@@ -38,10 +38,10 @@ I64 LinkedLstSize(U8 **_lst)
   return res;
 }
 
-U0 QueDel(CQue *root,Bool querem=FALSE)
-{//Free entries in queue, not root.
-  CQue *tempq=root->next,*tempq1;
-  while (tempq!=root) {
+U0 QueDel(CQue *head,Bool querem=FALSE)
+{//Free entries in queue, not head.
+  CQue *tempq=head->next,*tempq1;
+  while (tempq!=head) {
     tempq1=tempq->next;
     if (querem)
       QueRem(tempq);
@@ -50,11 +50,11 @@ U0 QueDel(CQue *root,Bool querem=FALSE)
   }
 }
 
-CQue *QueCopy(CQue *root,CTask *mem_task=NULL)
-{//MAlloc ident copy of entire queue and root.
-  CQue *res=MAllocIdent(root,mem_task),*tempq=root->next,*tempq1;
+CQue *QueCopy(CQue *head,CTask *mem_task=NULL)
+{//MAlloc ident copy of entire queue and head.
+  CQue *res=MAllocIdent(head,mem_task),*tempq=head->next,*tempq1;
   QueInit(res);
-  while (tempq!=root) {
+  while (tempq!=head) {
     tempq1=MAllocIdent(tempq,mem_task);
     QueIns(tempq1,res->last);
     tempq=tempq->next;
@@ -62,22 +62,22 @@ CQue *QueCopy(CQue *root,CTask *mem_task=NULL)
   return res;
 }
 
-I64 QueCnt(CQue *root)
-{//Count of nodes in queue, not root.
-  CQue *tempq=root->next;
+I64 QueCnt(CQue *head)
+{//Count of nodes in queue, not head.
+  CQue *tempq=head->next;
   I64 res=0;
-  while (tempq!=root) {
+  while (tempq!=head) {
     res++;
     tempq=tempq->next;
   }
   return res;
 }
 
-I64 QueSize(CQue *root)
-{//Mem size of all nodes in queue, not root.
-  CQue *tempq=root->next;
+I64 QueSize(CQue *head)
+{//Mem size of all nodes in queue, not head.
+  CQue *tempq=head->next;
   I64 res=0;
-  while (tempq!=root) {
+  while (tempq!=head) {
     res+=MSize2(tempq);
     tempq=tempq->next;
   }
diff --git a/Kernel/KEnd.CPP b/Kernel/KEnd.CPP
index 08cf543..b1d78fc 100644
--- a/Kernel/KEnd.CPP
+++ b/Kernel/KEnd.CPP
@@ -7,7 +7,7 @@ U0 SysGlblsInit()
   sys_cache_line_width=ee.rbx.u8[1]*8;
 
   sys_focus_task=Fs;
-  QueInit(&sys_macro_root);
+  QueInit(&sys_macro_head);
 
   blkdev.dft_iso_filename=AStrNew("::/Temp/CDDVD.ISO");
   blkdev.temp_filename=AStrNew("~/Temp.TXT.Z");
@@ -47,14 +47,14 @@ U0 SysGlblsInit()
   for (i=-308;i<309;i++)
     pow10_I64[i+309]=Pow10(i);
 
-  QueInit(&snd.record_root);
-  snd.record_root.time=tS;
+  QueInit(&snd.record_head);
+  snd.record_head.time=tS;
 
   ProgressBarsRst;
 
   //$AN,"Independent HeapCtrl Example",A="Independent HeapCtrl Example"$
   i=1; //Rqst 1 blk, we might get more.
-  QueInit(&dev.pci_root);
+  QueInit(&dev.pci_head);
   dev.mem64_ptr=MEM_MAPPED_SPACE;
 
   dbg.fun_seg_cache=CAlloc(FUN_SEG_CACHE_SIZE*sizeof(CFunSegCache));
@@ -63,11 +63,10 @@ U0 SysGlblsInit()
 
 U0 SysGrInit()
 {
-  U8 *vga_page=MemVGAAlloc;
   text.font=sys_font_std;
   text.aux_font=sys_font_cyrillic;
-  text.vga_alias	=vga_page+VGAM_GRAPHICS;
-  text.vga_text_alias	=vga_page+VGAM_TEXT;
+  text.vga_alias	=dev.uncached_alias+VGAM_GRAPHICS;
+  text.vga_text_alias	=dev.uncached_alias+VGAM_TEXT;
   if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode
     text.cols=80;
     text.rows=25;
@@ -104,12 +103,12 @@ U0 TimersInit()
     *_d=*_d&3|0x80;
   }
 
-  _q=HPET_GCAP_ID;
+  _q=dev.uncached_alias+HPET_GCAP_ID;
   i=*_q; //i.u32[1]= period in femtoS (10e-15)
   if (100000task_name,"Adam Task CPU#0");
diff --git a/Kernel/KExts.CPP b/Kernel/KExts.CPP
index 7bc4202..c40dde3 100644
--- a/Kernel/KExts.CPP
+++ b/Kernel/KExts.CPP
@@ -89,7 +89,7 @@ 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<freq=freq;
       d->time=tS;
-      QueIns(d,snd.record_root.last);
+      QueIns(d,snd.record_head.last);
     }
     LBtr(&sys_semas[SYS_SEMA_SND],0);
   }
diff --git a/Kernel/KStart.CPP b/Kernel/KStart.CPP
deleted file mode 100644
index 2438004..0000000
--- a/Kernel/KStart.CPP
+++ /dev/null
@@ -1,379 +0,0 @@
-asm {/*
-See $LK,"::/Doc/Boot.TXT"$ for how booting works.
-This file calls some BIOS routines before
-switching to 32 bit, and then, 64 bit modes.
-It continues here: $LK,"Kernel",A="FF:::/Kernel/KEnd.CPP,U0 Kernel"$.
-
-The boot loader jumps here, in real-mode (16-bit).
-It actually jumps to the $LK,"CBinFile",A="MN:CBinFile"$ which is placed
-just before this $LK,"generated by the compiler",A="FF:::/Compiler/CMain.CPP,16 ALIGN"$.
-The header begins with a short jmp to
-the start of this file's code which begins
-with the following small jump past some data.
-
-This file is first in the Kernel image
-because it is #included first.  $LK,"Kernel.PRJ",A="FF:::/Kernel/Kernel.PRJ,KStart:1"$
-*/
-USE16
-SYS_KERNEL:: //This must match $LK,"CKernel",A="MN:CKernel"$.
-	JMP	U16 CORE0_16BIT_INIT
-
-//************************************
-//  ASM Global vars required for 16-bit start-up
-	ALIGN	4,OC_NOP
-SYS_BOOT_SRC::			DU32	BOOT_SRC_NULL;
-SYS_BOOT_BLK::			DU32	0;
-SYS_BOOT_PATCH_TABLE_BASE::	DU32	0;
-SYS_RUN_LEVEL::			DU32	0;
-#exe {StreamPrint("SYS_COMPILE_TIME:: DU64 0x%X;",Now);}
-//See $LK,"BootDVDProve",A="MN:BootDVDProve"$
-#assert SYS_COMPILE_TIME+sizeof(CDate)+sizeof(CBinFile)opts[CFG_TEXT_MODE])
-    StreamPrint("INT 0x10");	//Enable VGA
-};
-	CMP	AX,0x004F
-	JNE	@@10		//Jmp if fail
-	BTS	U32 [SYS_RUN_LEVEL],RLf_VGA
-@@10:
-
-//Get mem maps
-	MOV	AX,0xE801
-	INT	0x15
-	MOV	U16 [SYS_MEM_E801],CX
-	MOV	U16 [SYS_MEM_E801+2],DX
-
-	MOV	CX,MEM_NUM_E820_ENTRIES-1 //Leave one to terminate
-	XOR	EBX,EBX
-	MOV	AX,DS
-	MOV	ES,AX
-	MOV	DI,SYS_MEM_E820
-@@15:	PUSH	CX
-	MOV	EAX,0xE820
-	MOV	ECX,MEM_E820_ENTRY_SIZE
-	MOV	EDX,'PAMS'
-	INT	0x15
-	JC	@@20
-	CMP	EAX,'PAMS'
-	JNE	@@20
-	TEST	EBX,EBX
-	JZ	@@20
-	ADD	DI,MEM_E820_ENTRY_SIZE
-	POP	CX
-	LOOP	@@15
-	JMP	@@25
-@@20:	ADD	SP,2
-
-//Get PCI Bus Info
-@@25:	MOV	U16 [SYS_PCI_BUSES],256
-	XOR	DX,DX
-	MOV	AX,0xB101
-	INT	0x1A
-	CMP	DX,'PC'
-	JNE	@@30
-	MOV	CH,0
-	INC	CX
-	MOV	U16 [SYS_PCI_BUSES],CX
-@@30:
-
-	CLI
-//Enable A20
-	IN	AL,0x92
-	OR	AL,2
-	OUT	0x92,AL
-
-	POP	U32 [SYS_BOOT_BLK]
-	POP	U32 [SYS_BOOT_SRC]	//See $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$, & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,BOOT_SRC_RAM"$.
-
-	CLD
-	XOR	EAX,EAX
-	MOV	AX,CS
-	MOV	DS,AX
-	MOV	ES,AX
-	SHL	EAX,4
-
-	MOV	U32 [SYS_BOOT_BASE],EAX
-
-	MOV	DX,CS
-	SUB	DX,sizeof(CBinFile)/16
-#assert !(sizeof(CBinFile)&15)
-	MOV	GS,DX
-
-	MOV	EDX,EAX
-	ADD	EDX,U32 GS:[CBinFile.patch_table_offset]
-	SUB	EDX,sizeof(CBinFile)
-	MOV	U32 [SYS_BOOT_PATCH_TABLE_BASE],EDX
-
-	ADD	U32 [GDT_BOOT_DS+2],EAX
-	ADD	U32 [GDT_BOOT_CS+2],EAX
-	ADD	EAX,I32 SYS_GDT
-	MOV	U32 [SYS_GDT_PTR+CSysLimitBase.base],EAX
-	LGDT	U32 [SYS_GDT_PTR]
-
-	MOV	EAX,SYS_START_CR0
-	MOV_CR0_EAX
-
-/*
-The assembler doesn't support far jumps so we hand code it.
-16-bit code is not important enough for me to implement
-16-bit mode in the assembler fully.
-
-To complete the switch to 32-bit mode, we have to load
-the code segment with a far jump.
-*/
-	DU8	0x66,0xEA; //JMP CGDT.boot_cs:CORE0_32BIT_INIT
-	DU32	CORE0_32BIT_INIT;
-	DU16	CGDT.boot_cs;
-
-#assert $$+16<=0xFFFF
-USE32
-//************************************
-//  ASM Global vars not required for 16-bit start-up
-	ALIGN	8,OC_NOP
-SYS_HEAP_BASE::		DU64	SYS_FIXED_AREA+sizeof(CSysFixedArea);
-SYS_HEAP_LIMIT::	DU64	0;
-
-#exe {
-  StreamPrint(
-"SYS_MEM_INIT_FLAG::	DU8	%d;"
-"SYS_MEM_INIT_VAL::	DU8	%d;"
-"SYS_HEAP_INIT_FLAG::	DU8	%d;"
-"SYS_HEAP_INIT_VAL::	DU8	%d;"
-"SYS_VAR_INIT_FLAG::	DU8	%d;"
-"SYS_VAR_INIT_VAL::	DU8	%d;",
-kernel_cfg->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);
-};
-SYS_HEAP_DBG_FLAG::	DU8	_CFG_HEAP_DBG;
-	ALIGN	8,0
-SYS_CTRL_ALT_FLAGS::	DU64	0;
-SYS_EXTERN_TABLE::	DU64	0;
-
-SYS_CODE_BP::		DU64	0;
-SYS_DATA_BP::		DU64	0;
-
-SYS_PROGRESSES::
-SYS_PROGRESS1::		DU64	0;
-SYS_PROGRESS1_MAX::	DU64	0;
-SYS_PROGRESS1_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
-SYS_PROGRESS2::		DU64	0;
-SYS_PROGRESS2_MAX::	DU64	0;
-SYS_PROGRESS2_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
-SYS_PROGRESS3::		DU64	0;
-SYS_PROGRESS3_MAX::	DU64	0;
-SYS_PROGRESS3_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
-SYS_PROGRESS4::		DU64	0;
-SYS_PROGRESS4_MAX::	DU64	0;
-SYS_PROGRESS4_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
-#assert $$-SYS_PROGRESSES==sizeof(CProgress)*4
-
-SYS_FOCUS_TASK::	DU64	0;
-SYS_CPU_STRUCTS::	DU64	0;
-SYS_MP_CNT::		DU64	1;
-SYS_MP_CNT_INITIAL::	DU64	1;
-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);
-//************************************
-	ALIGN	16,OC_NOP
-CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$.
-	PUSH	U32 RFLAGG_START
-	POPFD
-	MOV	EAX,SYS_START_CR0
-	MOV_CR0_EAX
-
-	MOV	AX,CGDT.boot_ds	//LOAD DS SELECTOR
-	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	AX,CGDT.ds
-	MOV	DS,AX
-	MOV	ES,AX
-	MOV	FS,AX
-	MOV	GS,AX
-	MOV	SS,AX
-	MOV	ESP,BOOT_RAM_LIMIT //Temp Stk
-
-//Patch abs addresses
-	MOV	ECX,U32 CPatchTableAbsAddr.abs_addres_cnt[ESI]
-	LEA	ESI,U32 CPatchTableAbsAddr.abs_addres[ESI]
-@@05:	LODSD
-	ADD	EAX,EDI
-	ADD	U32 [EAX],EDI
-	LOOP	@@05
-
-	DU8	0xEA; //JMP CGDT.cs32:@@10
-	DU32	@@10;
-	DU16	CGDT.cs32;
-
-@@10:	BTS	U32 [SYS_RUN_LEVEL],RLf_PATCHED
-
-	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
-
-	PUSH	U32 0	//Return from next call will be 64-bit
-	CALL	SYS_ENTER_LONG_MODE
-USE64
-	BTS	U32 [SYS_RUN_LEVEL],RLf_64BIT
-
-	FNINIT
-	MOV	RAX,SYS_FIXED_AREA+CSysFixedArea.init_fpu_mmx
-	FXSAVE	U64 [RAX]
-
-//Init CPU0 Struct
-	PUSH	SYS_FIXED_AREA+CSysFixedArea.adam
-	PUSH	SYS_FIXED_AREA+CSysFixedArea.boot_cpu
-	PUSH	0
-	CALL	&CPUStructInit
-	CALL	SET_GS_BASE
-
-//Init Adam HeapCtrl
-	MOV	EDI,U32 SYS_FIXED_AREA+CSysFixedArea.adam_hc
-	MOV	EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam_bp
-	MOV	U64 CHeapCtrl.bp[RDI],RAX
-	MOV	U32 CHeapCtrl.hc_signature[RDI],HEAP_CTRL_SIGNATURE_VAL
-	
-	LEA	RAX,U64 CHeapCtrl.next_um-CMemUsed.next[RDI]
-	MOV	U64 CHeapCtrl.next_um[RDI],RAX
-	MOV	U64 CHeapCtrl.last_um[RDI],RAX
-
-	MOV	EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam
-	MOV	U64 CHeapCtrl.mem_task[RDI],RAX
-	MOV	U64 CTask.code_heap[RAX],RDI
-	MOV	U64 CTask.data_heap[RAX],RDI
-	MOV	U32 CTask.task_signature[RAX],TASK_SIGNATURE_VAL
-	
-	BTS	U32 [SYS_RUN_LEVEL],RLf_BOOT_HEAP
-
-	PUSH	MEM_ADAM_STK
-	PUSH	U32 SYS_FIXED_AREA+CSysFixedArea.adam
-	CALL	&TaskInit
-	CALL	SET_FS_BASE
-	MOV	RSP,U64 CTask.rsp[RAX]
-
-	JMP	I32 &KernelMain
-
-//************************************
-USE32
-SYS_ENTER_LONG_MODE:: //Switch to long 64-bit mode
-	MOV_EAX_CR4
-	OR	EAX,0xB0
-	MOV_CR4_EAX
-
-	MOV	EAX,SYS_FIXED_AREA+CSysFixedArea.pml4
-	MOV_CR3_EAX
-
-	MOV	ECX,IA32_EFER
-	XOR	EDX,EDX
-	MOV	EAX,IA32F_LME
-	WRMSR
-
-	MOV_EAX_CR0
-	BTS	EAX,31	//enable paging (required for 64-bit mode)
-	MOV_CR0_EAX
-
-	DU8	0xEA;	   //JMP CGDT.cs64:@@05
-	DU32	@@05;
-	DU16	CGDT.cs64;
-USE64
-@@05:	MOV	AX,CGDT.ds
-	MOV	DS,AX
-	MOV	ES,AX
-	MOV	SS,AX
-	MOV	FS,AX
-	MOV	GS,AX
-	RET
-
-//************************************
-SYS_RAM_REBOOT:: //This gets copied high.  $LK,"SYS_RAM_REBOOT",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,SYS_RAM_REBOOT:2"$
-	PUSH	U32 CGDT.ds		//stk seg
-	PUSH	U32 BOOT_RAM_LIMIT	//stk
-	PUSH	U32 0			//flags
-	PUSH	U32 CGDT.cs32
-	LEA	RAX,[@@10]
-	PUSH	RAX
-	IRET
-USE32
-@@10:	WBINVD
-
-//disable paging
-	MOV_EAX_CR0
-	BTR	EAX,31
-	MOV_CR0_EAX
-
-	MOV	ECX,IA32_EFER
-	XOR	EDX,EDX
-	XOR	EAX,EAX
-	WRMSR
-
-	MOV	EBX,BOOT_SRC_RAM
-	MOV	EAX,I32 CORE0_32BIT_INIT
-	JMP	EAX
-SYS_RAM_REBOOT_END::
-USE64
-}
diff --git a/Kernel/KStart16.CPP b/Kernel/KStart16.CPP
new file mode 100644
index 0000000..ac1671a
--- /dev/null
+++ b/Kernel/KStart16.CPP
@@ -0,0 +1,177 @@
+asm {/* See $LK,"::/Doc/Boot.TXT"$.
+TempleOS starts in real, calls some BIOS
+routines, switches to 32 bit, and 64 bit mode
+and continues in $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ at $LK,"KernelMain",A="MN:KernelMain"$().
+
+The boot loader jumps here in real-mode (16-bit).
+It actually jumps to the $LK,"CBinFile",A="MN:CBinFile"$ header which is
+placed just before this by $LK,"the compiler",A="FF:::/Compiler/CMain.CPP,16 ALIGN"$.
+The header begins with a short jmp to
+the start of this file's code which begins
+with the following small jump past some data.
+
+This file is first in the Kernel image
+because it is #included first.  $LK,"Kernel.PRJ",A="FF:::/Kernel/Kernel.PRJ,KStart16:1"$
+*/
+USE16
+SYS_KERNEL:: //This must match $LK,"CKernel",A="MN:CKernel"$.
+	JMP	U16 CORE0_16BIT_INIT
+
+//************************************
+//  ASM Global vars required for 16-bit start-up
+	ALIGN	4,OC_NOP
+SYS_BOOT_SRC::			DU32	BOOT_SRC_NULL;
+SYS_BOOT_BLK::			DU32	0;
+SYS_BOOT_PATCH_TABLE_BASE::	DU32	0;
+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_TEXT_MODE])
+    StreamPrint("INT 0x10");	//Enable VGA
+};
+	CMP	AX,0x004F
+	JNE	@@10		//Jmp if fail
+	BTS	U32 [SYS_RUN_LEVEL],RLf_VGA
+@@10:
+
+//Get mem maps
+	MOV	AX,0xE801
+	INT	0x15
+	MOV	U16 [SYS_MEM_E801],CX
+	MOV	U16 [SYS_MEM_E801+2],DX
+
+	MOV	CX,MEM_NUM_E820_ENTRIES-1 //Leave one to terminate
+	XOR	EBX,EBX
+	MOV	AX,DS
+	MOV	ES,AX
+	MOV	DI,SYS_MEM_E820
+@@15:	PUSH	CX
+	MOV	EAX,0xE820
+	MOV	ECX,MEM_E820_ENTRY_SIZE
+	MOV	EDX,'PAMS'
+	INT	0x15
+	JC	@@20
+	CMP	EAX,'PAMS'
+	JNE	@@20
+	TEST	EBX,EBX
+	JZ	@@20
+	ADD	DI,MEM_E820_ENTRY_SIZE
+	POP	CX
+	LOOP	@@15
+	JMP	@@25
+@@20:	ADD	SP,2
+
+//Get PCI Bus Info
+@@25:	MOV	U16 [SYS_PCI_BUSES],256
+	XOR	DX,DX
+	MOV	AX,0xB101
+	INT	0x1A
+	CMP	DX,'PC'
+	JNE	@@30
+	MOV	CH,0
+	INC	CX
+	MOV	U16 [SYS_PCI_BUSES],CX
+@@30:
+	CLI
+//Enable A20
+	IN	AL,0x92
+	OR	AL,2
+	OUT	0x92,AL
+
+	POP	U32 [SYS_BOOT_BLK]
+	POP	U32 [SYS_BOOT_SRC]	//See $LK,"BootHD",A="FF:::/Adam/Opt/Boot/BootHD.CPP,BOOT_SRC_HARDDRV"$, $LK,"BootDVD",A="FF:::/Adam/Opt/Boot/BootDVD.CPP,BOOT_SRC_DVD"$, & $LK,"BootRAM",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,BOOT_SRC_RAM"$.
+
+	CLD
+	XOR	EAX,EAX
+	MOV	AX,CS
+	MOV	DS,AX
+	MOV	ES,AX
+	SHL	EAX,4
+
+	MOV	U32 [SYS_BOOT_BASE],EAX
+
+	MOV	DX,CS
+	SUB	DX,sizeof(CBinFile)/16
+#assert !(sizeof(CBinFile)&15)
+	MOV	GS,DX
+
+	MOV	EDX,EAX
+	ADD	EDX,U32 GS:[CBinFile.patch_table_offset]
+	SUB	EDX,sizeof(CBinFile)
+	MOV	U32 [SYS_BOOT_PATCH_TABLE_BASE],EDX
+
+	ADD	U32 [GDT_BOOT_DS+2],EAX
+	ADD	U32 [GDT_BOOT_CS+2],EAX
+	ADD	EAX,I32 SYS_GDT
+	MOV	U32 [SYS_GDT_PTR+CSysLimitBase.base],EAX
+	LGDT	U32 [SYS_GDT_PTR]
+
+	MOV	EAX,SYS_START_CR0
+	MOV_CR0_EAX
+
+/* The assembler doesn't support far jumps so
+we hand code it.  16-bit code is not important
+enough to fully implement in the assembler.
+
+To complete the switch to 32-bit mode, we have to load
+the code segment with a far jump.
+*/
+	DU8	0x66,0xEA; //JMP CGDT.boot_cs:CORE0_32BIT_INIT
+	DU32	CORE0_32BIT_INIT;
+	DU16	CGDT.boot_cs;
+#assert $$+16<=0xFFFF
+}
diff --git a/Kernel/KStart32.CPP b/Kernel/KStart32.CPP
new file mode 100644
index 0000000..6c9237d
--- /dev/null
+++ b/Kernel/KStart32.CPP
@@ -0,0 +1,99 @@
+asm {
+USE32
+//************************************
+//  ASM Global vars not required for 16-bit start-up
+	ALIGN	8,OC_NOP
+SYS_HEAP_BASE::		DU64	SYS_FIXED_AREA+sizeof(CSysFixedArea);
+SYS_HEAP_LIMIT::	DU64	0;
+
+#exe {
+  StreamPrint(
+"SYS_MEM_INIT_FLAG::	DU8	%d;"
+"SYS_MEM_INIT_VAL::	DU8	%d;"
+"SYS_HEAP_INIT_FLAG::	DU8	%d;"
+"SYS_HEAP_INIT_VAL::	DU8	%d;"
+"SYS_VAR_INIT_FLAG::	DU8	%d;"
+"SYS_VAR_INIT_VAL::	DU8	%d;",
+kernel_cfg->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);
+};
+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;
+
+SYS_CODE_BP::		DU64	0;
+SYS_DATA_BP::		DU64	0;
+
+SYS_PROGRESSES::
+SYS_PROGRESS1::		DU64	0;
+SYS_PROGRESS1_MAX::	DU64	0;
+SYS_PROGRESS1_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
+SYS_PROGRESS2::		DU64	0;
+SYS_PROGRESS2_MAX::	DU64	0;
+SYS_PROGRESS2_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
+SYS_PROGRESS3::		DU64	0;
+SYS_PROGRESS3_MAX::	DU64	0;
+SYS_PROGRESS3_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
+SYS_PROGRESS4::		DU64	0;
+SYS_PROGRESS4_MAX::	DU64	0;
+SYS_PROGRESS4_DESC::	DU8	PROGRESS_DESC_LEN DUP(0);
+#assert $$-SYS_PROGRESSES==sizeof(CProgress)*4
+
+SYS_FOCUS_TASK::	DU64	0;
+SYS_CPU_STRUCTS::	DU64	0;
+SYS_MP_CNT::		DU64	1;
+SYS_MP_CNT_INITIAL::	DU64	1;
+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);
+//************************************
+	ALIGN	16,OC_NOP
+CORE0_32BIT_INIT:: //Entry point for $LK,"BootRAM",A="MN:BootRAM"$.
+	PUSH	U32 RFLAGG_START
+	POPFD
+	MOV	EAX,SYS_START_CR0
+	MOV_CR0_EAX
+
+	MOV	AX,CGDT.boot_ds	//LOAD DS SELECTOR
+	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	AX,CGDT.ds
+	MOV	DS,AX
+	MOV	ES,AX
+	MOV	FS,AX
+	MOV	GS,AX
+	MOV	SS,AX
+	MOV	ESP,BOOT_RAM_LIMIT //Temp Stk
+
+//Patch abs addresses
+	MOV	ECX,U32 CPatchTableAbsAddr.abs_addres_cnt[ESI]
+	LEA	ESI,U32 CPatchTableAbsAddr.abs_addres[ESI]
+@@05:	LODSD
+	ADD	EAX,EDI
+	ADD	U32 [EAX],EDI
+	LOOP	@@05
+
+	DU8	0xEA; //JMP CGDT.cs32:@@10
+	DU32	@@10;
+	DU16	CGDT.cs32;
+
+@@10:	BTS	U32 [SYS_RUN_LEVEL],RLf_PATCHED
+
+	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
+
+	PUSH	U32 0	//Return from next call will be 64-bit
+	CALL	SYS_ENTER_LONG_MODE
+}
diff --git a/Kernel/KStart64.CPP b/Kernel/KStart64.CPP
new file mode 100644
index 0000000..409002a
--- /dev/null
+++ b/Kernel/KStart64.CPP
@@ -0,0 +1,100 @@
+asm {
+USE64
+	BTS	U32 [SYS_RUN_LEVEL],RLf_64BIT
+
+	FNINIT
+	MOV	RAX,SYS_FIXED_AREA+CSysFixedArea.init_fpu_mmx
+	FXSAVE	U64 [RAX]
+
+//Init CPU0 Struct
+	PUSH	SYS_FIXED_AREA+CSysFixedArea.adam
+	PUSH	SYS_FIXED_AREA+CSysFixedArea.boot_cpu
+	PUSH	0
+	CALL	&CPUStructInit
+	CALL	SET_GS_BASE
+
+//Init Adam HeapCtrl
+	MOV	EDI,U32 SYS_FIXED_AREA+CSysFixedArea.adam_hc
+	MOV	EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam_bp
+	MOV	U64 CHeapCtrl.bp[RDI],RAX
+	MOV	U32 CHeapCtrl.hc_signature[RDI],HEAP_CTRL_SIGNATURE_VAL
+	
+	LEA	RAX,U64 CHeapCtrl.next_um-CMemUsed.next[RDI]
+	MOV	U64 CHeapCtrl.next_um[RDI],RAX
+	MOV	U64 CHeapCtrl.last_um[RDI],RAX
+
+	MOV	EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam
+	MOV	U64 CHeapCtrl.mem_task[RDI],RAX
+	MOV	U64 CTask.code_heap[RAX],RDI
+	MOV	U64 CTask.data_heap[RAX],RDI
+	MOV	U32 CTask.task_signature[RAX],TASK_SIGNATURE_VAL
+	
+	BTS	U32 [SYS_RUN_LEVEL],RLf_BOOT_HEAP
+
+	PUSH	MEM_ADAM_STK
+	PUSH	U32 SYS_FIXED_AREA+CSysFixedArea.adam
+	CALL	&TaskInit
+	CALL	SET_FS_BASE
+	MOV	RSP,U64 CTask.rsp[RAX]
+
+	JMP	I32 &KernelMain
+
+//************************************
+USE32
+SYS_ENTER_LONG_MODE:: //Switch to long 64-bit mode
+	MOV_EAX_CR4
+	OR	EAX,0xB0
+	MOV_CR4_EAX
+
+	MOV	EAX,SYS_FIXED_AREA+CSysFixedArea.pml4
+	MOV_CR3_EAX
+
+	MOV	ECX,IA32_EFER
+	XOR	EDX,EDX
+	MOV	EAX,IA32F_LME
+	WRMSR
+
+	MOV_EAX_CR0
+	BTS	EAX,31	//Enable paging (required for 64-bit mode)
+	MOV_CR0_EAX
+
+	DU8	0xEA;	   //JMP CGDT.cs64:@@05
+	DU32	@@05;
+	DU16	CGDT.cs64;
+USE64
+@@05:	MOV	AX,CGDT.ds
+	MOV	DS,AX
+	MOV	ES,AX
+	MOV	SS,AX
+	MOV	FS,AX
+	MOV	GS,AX
+	RET
+
+//************************************
+SYS_RAM_REBOOT:: //This gets copied high.  $LK,"SYS_RAM_REBOOT",A="FF:::/Adam/Opt/Boot/BootRAM.CPP,SYS_RAM_REBOOT:2"$
+	PUSH	U32 CGDT.ds		//stk seg
+	PUSH	U32 BOOT_RAM_LIMIT	//stk
+	PUSH	U32 0			//flags
+	PUSH	U32 CGDT.cs32
+	LEA	RAX,[@@10]
+	PUSH	RAX
+	IRET
+USE32
+@@10:	WBINVD
+
+//Disable paging
+	MOV_EAX_CR0
+	BTR	EAX,31
+	MOV_CR0_EAX
+
+	MOV	ECX,IA32_EFER
+	XOR	EDX,EDX
+	XOR	EAX,EAX
+	WRMSR
+
+	MOV	EBX,BOOT_SRC_RAM
+	MOV	EAX,I32 CORE0_32BIT_INIT
+	JMP	EAX
+SYS_RAM_REBOOT_END::
+USE64
+}
diff --git a/Kernel/KTask.CPP b/Kernel/KTask.CPP
index 4e50dd6..b9bbe1b 100644
--- a/Kernel/KTask.CPP
+++ b/Kernel/KTask.CPP
@@ -196,7 +196,7 @@ I64 TaskInit(CTask *task,I64 stk_size)
   task->win_top		=13;
   task->win_bottom	=text.rows-2;
 
-  if (blkdev.home_dir) {//Beware Adam $LK,"TaskInit",A="FF:::/Kernel/KStart.CPP,TaskInit"$. I guess ok until $LK,"ChgDsk",A="FF:::/Kernel/KEnd.CPP,ChgDsk"$().
+  if (blkdev.home_dir) {//Beware Adam $LK,"TaskInit",A="FF:::/Kernel/KStart64.CPP,TaskInit"$. I guess ok until $LK,"ChgDsk",A="FF:::/Kernel/KEnd.CPP,ChgDsk"$().
     task->cur_dv=blkdev.let_to_drv[*blkdev.home_dir-'A'];
     task->cur_dir=StrNew(blkdev.home_dir+2,task);
   } else
diff --git a/Kernel/KUtils.CPP b/Kernel/KUtils.CPP
index 2efc304..f864990 100644
--- a/Kernel/KUtils.CPP
+++ b/Kernel/KUtils.CPP
@@ -163,7 +163,7 @@ _BIT_FIELD_OR_U32::
 	OR	U64 [RBX],RAX
 	POP	RBP
 	RET1	24
-_BIT_FIELD_EXTRACT_U32::
+_BIT_FIELD_EXT_U32::
 	PUSH	RBP
 	MOV	RBP,RSP
 	MOV	RBX,U64 SF_ARG2[RBP]
diff --git a/Kernel/Kernel.MAP b/Kernel/Kernel.MAP
index b543468..f437cfd 100644
--- a/Kernel/Kernel.MAP
+++ b/Kernel/Kernel.MAP
@@ -1,24 +1,25 @@
 $LK,"DrvTextAttrGet",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,312",BI=1$
 $LK,"ARGT_R64",A="FL:::/Kernel/KernelA.HPP,1897"$
 $LK,"MAlloc",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,387"$
-$LK,"BOOT_SRC_NULL",A="FL:::/Kernel/KernelA.HPP,3889"$
+$LK,"BOOT_SRC_NULL",A="FL:::/Kernel/KernelA.HPP,3890"$
 $LK,"KbdTypeMatic",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,86",BI=2$
 $LK,"KbdLEDsSet",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,52",BI=3$
-$LK,"LXchgU32",A="FL:::/Kernel/KernelB.HPP,254"$
-$LK,"LXchgU16",A="FL:::/Kernel/KernelB.HPP,253"$
-$LK,"BDS_CUR_DRV",A="FL:::/Kernel/KernelA.HPP,3270"$
+$LK,"LXchgU32",A="FL:::/Kernel/KernelB.HPP,255"$
+$LK,"LXchgU16",A="FL:::/Kernel/KernelB.HPP,254"$
+$LK,"BDS_CUR_DRV",A="FL:::/Kernel/KernelA.HPP,3271"$
 $LK,"DOCM_CANCEL",A="FL:::/Kernel/KernelA.HPP,1341"$
 $LK,"chars_bmp_word",A="FL:::/Kernel/StrA.CPP.Z,340"$
 $LK,"BLK_SIZE",A="FL:::/Kernel/KernelA.HPP,2297"$
 $LK,"ARGT_SS",A="FL:::/Kernel/KernelA.HPP,1928"$
 $LK,"c32_eax",A="FL:::/Kernel/PCIBIOS.CPP.Z,152"$
 $LK,"ARGT_EAX",A="FL:::/Kernel/KernelA.HPP,1921"$
-$LK,"DOCT_HEADER",A="FL:::/Kernel/KernelA.HPP,911"$
+$LK,"DOCT_HEADER",A="FL:::/Kernel/KernelA.HPP,912"$
 $LK,"Ff__EXTERN",A="FL:::/Kernel/KernelA.HPP,852"$
 $LK,"c32_ebx",A="FL:::/Kernel/PCIBIOS.CPP.Z,153"$
+$LK,"MemPageSize",A="FL:::/Kernel/Mem/PageTables.CPP.Z,135",BI=4$
 $LK,"D3Add",A="FL:::/Kernel/KernelB.HPP,145"$
 $LK,"D3NormSqr",A="FL:::/Kernel/KernelB.HPP,158"$
-$LK,"ARf_PLANAR_SYMMETRY",A="FL:::/Kernel/KernelA.HPP,3902"$
+$LK,"ARf_PLANAR_SYMMETRY",A="FL:::/Kernel/KernelA.HPP,3903"$
 $LK,"DOCf_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HPP,1295"$
 $LK,"RLF_BLKDEV",A="FL:::/Kernel/KernelA.HPP,466"$
 $LK,"RLf_BLKDEV",A="FL:::/Kernel/KernelA.HPP,447"$
@@ -32,47 +33,48 @@ $LK,"c32_edx",A="FL:::/Kernel/PCIBIOS.CPP.Z,155"$
 $LK,"FUf_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HPP,2593"$
 $LK,"CAOTBinBlk",A="FL:::/Kernel/KernelA.HPP,1800"$
 $LK,"DOCEf_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HPP,1099"$
-$LK,"KernelMain",A="FL:::/Kernel/KEnd.CPP.Z,135",BI=4$
-$LK,"KbdCmdSend",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,24",BI=5$
+$LK,"KernelMain",A="FL:::/Kernel/KEnd.CPP.Z,134",BI=5$
+$LK,"KbdCmdSend",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,24",BI=6$
 $LK,"_D3_NORM_SQR",A="FL:::/Kernel/KMathA.CPP.Z,22"$
-$LK,"TTS_CUR_LEX",A="FL:::/Kernel/KernelA.HPP,3278"$
+$LK,"TTS_CUR_LEX",A="FL:::/Kernel/KernelA.HPP,3279"$
 $LK,"RS_ATTR_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,2537"$
 $LK,"CCf_USE_LAST_U16",A="FL:::/Kernel/KernelA.HPP,2158"$
 $LK,"CDocEntry",A="FL:::/Kernel/KernelA.HPP,1181"$
 $LK,"CAOT",A="FL:::/Kernel/KernelA.HPP,1998"$
-$LK,"SVCf_DISPATCHED",A="FL:::/Kernel/KernelA.HPP,3184"$
+$LK,"sys_gig_pages",A="FL:::/Kernel/KernelB.HPP,179"$
+$LK,"SVCf_DISPATCHED",A="FL:::/Kernel/KernelA.HPP,3185"$
 $LK,"RLF_32BIT",A="FL:::/Kernel/KernelA.HPP,459"$
 $LK,"RLF_16BIT",A="FL:::/Kernel/KernelA.HPP,457"$
 $LK,"RLf_32BIT",A="FL:::/Kernel/KernelA.HPP,440"$
 $LK,"RLf_16BIT",A="FL:::/Kernel/KernelA.HPP,438"$
-$LK,"BreakUnlock",A="FL:::/Kernel/KExcept.CPP.Z,146",BI=6$
-$LK,"DOCT_BACKGROUND",A="FL:::/Kernel/KernelA.HPP,915"$
-$LK,"DOCT_FOREGROUND",A="FL:::/Kernel/KernelA.HPP,914"$
+$LK,"BreakUnlock",A="FL:::/Kernel/KExcept.CPP.Z,146",BI=7$
+$LK,"DOCT_BACKGROUND",A="FL:::/Kernel/KernelA.HPP,916"$
+$LK,"DOCT_FOREGROUND",A="FL:::/Kernel/KernelA.HPP,915"$
 $LK,"CGDT",A="FL:::/Kernel/KernelA.HPP,335"$
-$LK,"TSF_SAME_SONG",A="FL:::/Kernel/KernelA.HPP,3248"$
+$LK,"TSF_SAME_SONG",A="FL:::/Kernel/KernelA.HPP,3249"$
 $LK,"ICF_PUSH_CMP",A="FL:::/Kernel/KernelA.HPP,1609"$
 $LK,"MLF_NO_UNUSED_WARN",A="FL:::/Kernel/KernelA.HPP,779"$
 $LK,"I_MP_CRASH",A="FL:::/Kernel/KernelA.HPP,294"$
 $LK,"MEM_HEAP_HASH_SIZE",A="FL:::/Kernel/KernelA.HPP,2878"$
 $LK,"INVALID_PTR",A="FL:::/Kernel/KernelA.HPP,39"$
 $LK,"RECALCt_NORMAL",A="FL:::/Kernel/KernelA.HPP,1345"$
-$LK,"ATAInit",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,303",BI=7$
-$LK,"HashDefineLstAdd",A="FL:::/Kernel/KHashB.CPP.Z,206",BI=8$
-$LK,"StrUtil",A="FL:::/Kernel/StrA.CPP.Z,524",BI=9$
-$LK,"LstMatch",A="FL:::/Kernel/StrA.CPP.Z,421",BI=10$
+$LK,"ATAInit",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,303",BI=8$
+$LK,"HashDefineLstAdd",A="FL:::/Kernel/KHashB.CPP.Z,206",BI=9$
+$LK,"StrUtil",A="FL:::/Kernel/StrA.CPP.Z,524",BI=10$
+$LK,"LstMatch",A="FL:::/Kernel/StrA.CPP.Z,421",BI=11$
 $LK,"IET_REL_I32",A="FL:::/Kernel/KernelA.HPP,400"$
 $LK,"IET_REL_I16",A="FL:::/Kernel/KernelA.HPP,398"$
 $LK,"CPrsStk",A="FL:::/Kernel/KernelA.HPP,1679"$
 $LK,"CCmpCtrl",A="FL:::/Kernel/KernelA.HPP,2168"$
-$LK,"ATAWBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,579",BI=11$
-$LK,"CCPU",A="FL:::/Kernel/KernelA.HPP,3445"$
-$LK,"ATABlkSel",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,1",BI=12$
+$LK,"ATAWBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,579",BI=12$
+$LK,"CCPU",A="FL:::/Kernel/KernelA.HPP,3446"$
+$LK,"ATABlkSel",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,1",BI=13$
 $LK,"c32_esi",A="FL:::/Kernel/PCIBIOS.CPP.Z,156"$
 $LK,"CCF_JUST_LOAD",A="FL:::/Kernel/KernelA.HPP,2134"$
 $LK,"LDF_JUST_LOAD",A="FL:::/Kernel/KernelA.HPP,368"$
-$LK,"SYS_CACHE_LINE_WIDTH",A="FL:::/Kernel/KStart.CPP.Z,234"$
+$LK,"SYS_CACHE_LINE_WIDTH",A="FL:::/Kernel/KStart32.CPP.Z,52"$
 $LK,"CMF_I16_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1700"$
-$LK,"FramePtrSet",A="FL:::/Kernel/KHashB.CPP.Z,230",BI=13$
+$LK,"FramePtrSet",A="FL:::/Kernel/KHashB.CPP.Z,230",BI=14$
 $LK,"CCf_PASS_TRACE_PRESENT",A="FL:::/Kernel/KernelA.HPP,2139"$
 $LK,"CMF_U16_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1701"$
 $LK,"_STRICMP",A="FL:::/Kernel/StrA.CPP.Z,117"$
@@ -81,34 +83,34 @@ $LK,"CFAT32Boot",A="FL:::/Kernel/KernelA.HPP,2336"$
 $LK,"DOCEF_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HPP,1022"$
 $LK,"FILEMASK_TXT",A="FL:::/Kernel/KernelA.HPP,2292"$
 $LK,"TK_EOF",A="FL:::/Kernel/KernelA.HPP,2069"$
-$LK,"SPF_NEG",A="FL:::/Kernel/KernelA.HPP,3927"$
-$LK,"CWinScroll",A="FL:::/Kernel/KernelA.HPP,3099"$
+$LK,"SPF_NEG",A="FL:::/Kernel/KernelA.HPP,3928"$
+$LK,"CWinScroll",A="FL:::/Kernel/KernelA.HPP,3100"$
 $LK,"DOCEf_NO_CLICK_ON",A="FL:::/Kernel/KernelA.HPP,1108"$
-$LK,"ARf_FLOODFILL",A="FL:::/Kernel/KernelA.HPP,3900"$
+$LK,"ARf_FLOODFILL",A="FL:::/Kernel/KernelA.HPP,3901"$
 $LK,"ICF_USE_F64",A="FL:::/Kernel/KernelA.HPP,1597"$
-$LK,"MemPagesNotPresentMark",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,58",BI=14$
-$LK,"CH_BACKSPACE",A="FL:::/Kernel/KernelA.HPP,3513"$
-$LK,"FloorI64",A="FL:::/Kernel/KMathB.CPP.Z,52",BI=15$
-$LK,"SC_BACKSPACE",A="FL:::/Kernel/KernelA.HPP,3559"$
+$LK,"MemPagesNotPresentMark",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,58",BI=15$
+$LK,"CH_BACKSPACE",A="FL:::/Kernel/KernelA.HPP,3514"$
+$LK,"FloorI64",A="FL:::/Kernel/KMathB.CPP.Z,52",BI=16$
+$LK,"SC_BACKSPACE",A="FL:::/Kernel/KernelA.HPP,3560"$
 $LK,"FUf_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HPP,2592"$
 $LK,"GVF_ARRAY",A="FL:::/Kernel/KernelA.HPP,871"$
-$LK,"DirEntryCompareCluster",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,84",BI=16$
-$LK,"KbdCmdFlush",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,45",BI=17$
-$LK,"CFPU",A="FL:::/Kernel/KernelA.HPP,3171"$
-$LK,"TASKf_IDLE",A="FL:::/Kernel/KernelA.HPP,3284"$
+$LK,"DirEntryCompareCluster",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,84",BI=17$
+$LK,"KbdCmdFlush",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,45",BI=18$
+$LK,"CFPU",A="FL:::/Kernel/KernelA.HPP,3172"$
+$LK,"TASKf_IDLE",A="FL:::/Kernel/KernelA.HPP,3285"$
 $LK,"CDIR_SIZE",A="FL:::/Kernel/KernelA.HPP,2564"$
 $LK,"ARGT_UIMM32",A="FL:::/Kernel/KernelA.HPP,1891"$
 $LK,"ARGT_UIMM16",A="FL:::/Kernel/KernelA.HPP,1890"$
-$LK,"PCIWriteU8",A="FL:::/Kernel/PCIBIOS.CPP.Z,220",BI=18$
-$LK,"DefinePrint",A="FL:::/Kernel/KDefine.CPP.Z,90",BI=19$
-$LK,"FifoI64Del",A="FL:::/Kernel/KDataTypes.CPP.Z,252",BI=20$
+$LK,"PCIWriteU8",A="FL:::/Kernel/PCIBIOS.CPP.Z,220",BI=19$
+$LK,"DefinePrint",A="FL:::/Kernel/KDefine.CPP.Z,90",BI=20$
+$LK,"FifoI64Del",A="FL:::/Kernel/KDataTypes.CPP.Z,252",BI=21$
 $LK,"CDocUndo",A="FL:::/Kernel/KernelA.HPP,1333"$
-$LK,"ROPB_XOR",A="FL:::/Kernel/KernelA.HPP,2933"$
+$LK,"ROPB_XOR",A="FL:::/Kernel/KernelA.HPP,2934"$
 $LK,"FUF_JUST_FILES",A="FL:::/Kernel/KernelA.HPP,2607"$
 $LK,"ATA_SET_MAX",A="FL:::/Kernel/KernelA.HPP,2263"$
 $LK,"IEF_DFT",A="FL:::/Kernel/KernelA.HPP,1731"$
 $LK,"RT_F32",A="FL:::/Kernel/KernelA.HPP,1564"$
-$LK,"Let2BlkDev",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,175",BI=21$
+$LK,"Let2BlkDev",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,175",BI=22$
 $LK,"FUf_JUST_FILES",A="FL:::/Kernel/KernelA.HPP,2581"$
 $LK,"ARGT_M1632",A="FL:::/Kernel/KernelA.HPP,1909"$
 $LK,"DOF_MIN_SIZE",A="FL:::/Kernel/KernelA.HPP,1215"$
@@ -117,269 +119,273 @@ $LK,"RFLAGf_AUX_CARRY",A="FL:::/Kernel/KernelA.HPP,309"$
 $LK,"DEF_PROCESSED",A="FL:::/Kernel/KernelA.HPP,2548"$
 $LK,"WIf_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HPP,1451"$
 $LK,"DOCEf_LEFT_X",A="FL:::/Kernel/KernelA.HPP,1075"$
-$LK,"Mem64DevFree",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,145",BI=22$
-$LK,"Mem32DevFree",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,111",BI=23$
+$LK,"Mem64DevFree",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,150",BI=23$
+$LK,"Mem32DevFree",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,114",BI=24$
+$LK,"SYS_GIG_PAGES",A="FL:::/Kernel/KStart32.CPP.Z,22"$
 $LK,"ARGT_UIMM64",A="FL:::/Kernel/KernelA.HPP,1892"$
 $LK,"DOCf_MIN_SIZE",A="FL:::/Kernel/KernelA.HPP,1303"$
 $LK,"DOCF_MIN_SIZE",A="FL:::/Kernel/KernelA.HPP,1267"$
-$LK,"ATARepEntry",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,91",BI=24$
-$LK,"BLUE",A="FL:::/Kernel/KernelA.HPP,2958"$
-$LK,"sys_ctrl_alt_flags",A="FL:::/Kernel/KernelB.HPP,202"$
+$LK,"ATARepEntry",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,91",BI=25$
+$LK,"BLUE",A="FL:::/Kernel/KernelA.HPP,2959"$
+$LK,"sys_ctrl_alt_flags",A="FL:::/Kernel/KernelB.HPP,203"$
 $LK,"D3Div",A="FL:::/Kernel/KernelB.HPP,151"$
 $LK,"RT_F64",A="FL:::/Kernel/KernelA.HPP,1566"$
-$LK,"EdLite",A="FL:::/Kernel/EdLite.CPP.Z,58",BI=25$
+$LK,"EdLite",A="FL:::/Kernel/EdLite.CPP.Z,58",BI=26$
 $LK,"MBR_PT_FAT12",A="FL:::/Kernel/KernelA.HPP,2699"$
-$LK,"FramePtr",A="FL:::/Kernel/KHashB.CPP.Z,215",BI=26$
+$LK,"FramePtr",A="FL:::/Kernel/KHashB.CPP.Z,215",BI=27$
 $LK,"ARGT_RM8",A="FL:::/Kernel/KernelA.HPP,1899"$
-$LK,"ROPF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HPP,2953"$
+$LK,"ROPF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HPP,2954"$
 $LK,"RTF_UNSIGNED",A="FL:::/Kernel/KernelA.HPP,1569"$
 $LK,"DOCEF_HAS_BORDER",A="FL:::/Kernel/KernelA.HPP,1002"$
 $LK,"TK_EQU_EQU",A="FL:::/Kernel/KernelA.HPP,2084"$
 $LK,"RT_I32",A="FL:::/Kernel/KernelA.HPP,1559"$
 $LK,"RT_I16",A="FL:::/Kernel/KernelA.HPP,1557"$
 $LK,"DOCEf_HAS_BORDER",A="FL:::/Kernel/KernelA.HPP,1090"$
-$LK,"SysTry",A="FL:::/Kernel/KExcept.CPP.Z,63",BI=27$
+$LK,"SysTry",A="FL:::/Kernel/KExcept.CPP.Z,63",BI=28$
 $LK,"POP_REGS",A="FL:::/Kernel/KernelA.HPP,1771"$
 $LK,"IEF_OP_SIZE32",A="FL:::/Kernel/KernelA.HPP,1728"$
 $LK,"IEF_OP_SIZE16",A="FL:::/Kernel/KernelA.HPP,1727"$
 $LK,"HTT_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HPP,687"$
 $LK,"BD_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2661"$
 $LK,"DOCEf_ESC",A="FL:::/Kernel/KernelA.HPP,1087"$
-$LK,"ScanCode2Char",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,136",BI=28$
+$LK,"ScanCode2Char",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,136",BI=29$
 $LK,"NUM_DRVS",A="FL:::/Kernel/KernelA.HPP,2715"$
 $LK,"FSt_ISO13346",A="FL:::/Kernel/KernelA.HPP,2691"$
 $LK,"_D3_ADD",A="FL:::/Kernel/KMathA.CPP.Z,131"$
 $LK,"SYSf_CTRL_ALT_TAB",A="FL:::/Kernel/KernelA.HPP,620"$
-$LK,"RCache",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,119",BI=29$
+$LK,"RCache",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,119",BI=30$
 $LK,"DOC_ATTR_DFT_TEXT",A="FL:::/Kernel/KernelA.HPP,1134"$
 $LK,"D3Dot",A="FL:::/Kernel/KernelB.HPP,153"$
-$LK,"CSrvCmd",A="FL:::/Kernel/KernelA.HPP,3195"$
+$LK,"CSrvCmd",A="FL:::/Kernel/KernelA.HPP,3196"$
 $LK,"ARGT_RAX",A="FL:::/Kernel/KernelA.HPP,1922"$
 $LK,"EDf_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,1255"$
 $LK,"EDF_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,1249"$
 $LK,"DOCF_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HPP,1270"$
-$LK,"KbdMsgsQue",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,467",BI=30$
+$LK,"KbdMsgsQue",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,467",BI=31$
 $LK,"ARGT_ST0",A="FL:::/Kernel/KernelA.HPP,1935"$
 $LK,"RT_I64",A="FL:::/Kernel/KernelA.HPP,1561"$
-$LK,"FifoI64Cnt",A="FL:::/Kernel/KDataTypes.CPP.Z,312",BI=31$
-$LK,"NUM_PROGRESS_BARS",A="FL:::/Kernel/KernelA.HPP,3909"$
-$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3802"$
-$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3599"$
+$LK,"FifoI64Cnt",A="FL:::/Kernel/KDataTypes.CPP.Z,312",BI=32$
+$LK,"NUM_PROGRESS_BARS",A="FL:::/Kernel/KernelA.HPP,3910"$
+$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3803"$
+$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3600"$
 $LK,"_CFG_HEAP_DBG",A="FL:::/Kernel/KernelA.HPP,2797"$
 $LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HPP,657"$
-$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,511",BI=32$
-$LK,"AutoStr",A="FL:::/Kernel/SrvCmd.CPP.Z,465",BI=33$
+$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,511",BI=33$
+$LK,"AutoStr",A="FL:::/Kernel/SrvCmd.CPP.Z,465",BI=34$
 $LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HPP,383"$
-$LK,"DVDImageRead",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,69",BI=34$
+$LK,"DVDImageRead",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,69",BI=35$
 $LK,"FSt_ISO13490",A="FL:::/Kernel/KernelA.HPP,2690"$
 $LK,"IET_CODE_HEAP",A="FL:::/Kernel/KernelA.HPP,411"$
-$LK,"ROPB_MONO",A="FL:::/Kernel/KernelA.HPP,2935"$
+$LK,"ROPB_MONO",A="FL:::/Kernel/KernelA.HPP,2936"$
 $LK,"CAsmNum2",A="FL:::/Kernel/KernelA.HPP,1827"$
-$LK,"AutoFile",A="FL:::/Kernel/SrvCmd.CPP.Z,475",BI=35$
-$LK,"AMAlloc",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,390",BI=36$
+$LK,"AutoFile",A="FL:::/Kernel/SrvCmd.CPP.Z,475",BI=36$
+$LK,"AMAlloc",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,390",BI=37$
 $LK,"ICF_R_TO_INT",A="FL:::/Kernel/KernelA.HPP,1592"$
 $LK,"DOCEf_LEN",A="FL:::/Kernel/KernelA.HPP,1054"$
-$LK,"B",A="FL:::/Kernel/KDbg.CPP.Z,407",BI=37$
+$LK,"B",A="FL:::/Kernel/KDbg.CPP.Z,407",BI=38$
 $LK,"ICF_PUSH_RES",A="FL:::/Kernel/KernelA.HPP,1604"$
 $LK,"chars_bmp_dec_numeric",A="FL:::/Kernel/StrA.CPP.Z,350"$
 $LK,"D3Equ",A="FL:::/Kernel/KernelB.HPP,154"$
 $LK,"FF_NEW_FILE",A="FL:::/Kernel/KernelA.HPP,2781"$
 $LK,"CMT_STR_CONST",A="FL:::/Kernel/KernelA.HPP,1690"$
 $LK,"WIf_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HPP,1453"$
-$LK,"D",A="FL:::/Kernel/KDbg.CPP.Z,172",BI=38$
-$LK,"StrPrint",A="FL:::/Kernel/StrPrint.CPP.Z,874",BI=39$
+$LK,"D",A="FL:::/Kernel/KDbg.CPP.Z,172",BI=39$
+$LK,"StrPrint",A="FL:::/Kernel/StrPrint.CPP.Z,876",BI=40$
 $LK,"WINMGR_FPS",A="FL:::/Kernel/KernelA.HPP,1467"$
-$LK,"E",A="FL:::/Kernel/FunSeg.CPP.Z,310",BI=40$
+$LK,"E",A="FL:::/Kernel/FunSeg.CPP.Z,310",BI=41$
 $LK,"ICF_A2_TO_INT",A="FL:::/Kernel/KernelA.HPP,1596"$
 $LK,"CEdFileName",A="FL:::/Kernel/KernelA.HPP,1240"$
-$LK,"DOCT_LEFT_MARGIN",A="FL:::/Kernel/KernelA.HPP,909"$
+$LK,"DOCT_LEFT_MARGIN",A="FL:::/Kernel/KernelA.HPP,910"$
 $LK,"_STRNCMP",A="FL:::/Kernel/StrA.CPP.Z,154"$
-$LK,"G",A="FL:::/Kernel/KDbg.CPP.Z,444",BI=41$
-$LK,"ScaleIndent",A="FL:::/Kernel/StrB.CPP.Z,35",BI=42$
+$LK,"MEM_NUM_USED_1GIG",A="FL:::/Kernel/KernelA.HPP,3469"$
+$LK,"G",A="FL:::/Kernel/KDbg.CPP.Z,444",BI=42$
+$LK,"ScaleIndent",A="FL:::/Kernel/StrB.CPP.Z,35",BI=43$
 $LK,"IET_ABS_ADDR",A="FL:::/Kernel/KernelA.HPP,410"$
-$LK,"PressAKey",A="FL:::/Kernel/StrB.CPP.Z,103",BI=43$
+$LK,"PressAKey",A="FL:::/Kernel/StrB.CPP.Z,103",BI=44$
 $LK,"DOF_WIN_MAX",A="FL:::/Kernel/KernelA.HPP,1218"$
 $LK,"CCodeCtrl",A="FL:::/Kernel/KernelA.HPP,2017"$
-$LK,"Char2ScanCode",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,100",BI=44$
-$LK,"Mem32DevInit",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,30",BI=45$
+$LK,"Char2ScanCode",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,100",BI=45$
+$LK,"Mem32DevInit",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,30",BI=46$
 $LK,"_BIT_FIELD_OR_U32",A="FL:::/Kernel/KUtils.CPP.Z,154"$
 $LK,"DOCf_NO_SCROLL_BARS",A="FL:::/Kernel/KernelA.HPP,1306"$
-$LK,"SPutChar",A="FL:::/Kernel/StrPrint.CPP.Z,1",BI=46$
-$LK,"TaskQueIns",A="FL:::/Kernel/Sched.CPP.Z,287",BI=47$
-$LK,"CYAN",A="FL:::/Kernel/KernelA.HPP,2960"$
+$LK,"SPutChar",A="FL:::/Kernel/StrPrint.CPP.Z,1",BI=47$
+$LK,"TaskQueIns",A="FL:::/Kernel/Sched.CPP.Z,287",BI=48$
+$LK,"CYAN",A="FL:::/Kernel/KernelA.HPP,2961"$
 $LK,"TK_SUPERSCRIPT",A="FL:::/Kernel/KernelA.HPP,2070"$
-$LK,"FileNameTempTxt",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,272",BI=48$
+$LK,"FileNameTempTxt",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,272",BI=49$
 $LK,"RS_ATTR_DELETED",A="FL:::/Kernel/KernelA.HPP,2535"$
 $LK,"CMT_ASM_LABEL",A="FL:::/Kernel/KernelA.HPP,1688"$
 $LK,"RLF_64BIT",A="FL:::/Kernel/KernelA.HPP,461"$
 $LK,"RLf_64BIT",A="FL:::/Kernel/KernelA.HPP,442"$
-$LK,"RedSeaFreeLstBuild",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,24",BI=49$
+$LK,"RedSeaFreeLstBuild",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,24",BI=50$
 $LK,"TK_SHL",A="FL:::/Kernel/KernelA.HPP,2082"$
 $LK,"DOCf_HAS_SONG",A="FL:::/Kernel/KernelA.HPP,1309"$
 $LK,"DOCF_HAS_SONG",A="FL:::/Kernel/KernelA.HPP,1273"$
-$LK,"CH_CTRLA",A="FL:::/Kernel/KernelA.HPP,3486"$
+$LK,"CH_CTRLA",A="FL:::/Kernel/KernelA.HPP,3487"$
 $LK,"CHashGlblVar",A="FL:::/Kernel/KernelA.HPP,873"$
-$LK,"CH_CTRLB",A="FL:::/Kernel/KernelA.HPP,3487"$
+$LK,"CH_CTRLB",A="FL:::/Kernel/KernelA.HPP,3488"$
+$LK,"MEM_NUM_1GIG",A="FL:::/Kernel/KernelA.HPP,3470"$
 $LK,"DOCEf_TAG",A="FL:::/Kernel/KernelA.HPP,1053"$
-$LK,"S",A="FL:::/Kernel/KDbg.CPP.Z,479",BI=50$
-$LK,"CH_CTRLC",A="FL:::/Kernel/KernelA.HPP,3488"$
-$LK,"FifoI64Ins",A="FL:::/Kernel/KDataTypes.CPP.Z,258",BI=51$
-$LK,"FloorU64",A="FL:::/Kernel/KMathB.CPP.Z,36",BI=52$
-$LK,"CH_CTRLD",A="FL:::/Kernel/KernelA.HPP,3489"$
+$LK,"S",A="FL:::/Kernel/KDbg.CPP.Z,479",BI=51$
+$LK,"CH_CTRLC",A="FL:::/Kernel/KernelA.HPP,3489"$
+$LK,"FifoI64Ins",A="FL:::/Kernel/KDataTypes.CPP.Z,258",BI=52$
+$LK,"FloorU64",A="FL:::/Kernel/KMathB.CPP.Z,36",BI=53$
+$LK,"CH_CTRLD",A="FL:::/Kernel/KernelA.HPP,3490"$
 $LK,"DOCF_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1282"$
 $LK,"DOCT_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,919"$
-$LK,"CH_CTRLE",A="FL:::/Kernel/KernelA.HPP,3490"$
-$LK,"BLACK",A="FL:::/Kernel/KernelA.HPP,2957"$
+$LK,"CH_CTRLE",A="FL:::/Kernel/KernelA.HPP,3491"$
+$LK,"BLACK",A="FL:::/Kernel/KernelA.HPP,2958"$
 $LK,"ARGT_STI",A="FL:::/Kernel/KernelA.HPP,1936"$
 $LK,"NUM_REGS",A="FL:::/Kernel/KernelA.HPP,1774"$
 $LK,"DOCf_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1319"$
 $LK,"DOCEf_BOTTOM_Y",A="FL:::/Kernel/KernelA.HPP,1080"$
 $LK,"DOCEF_BOTTOM_Y",A="FL:::/Kernel/KernelA.HPP,992"$
-$LK,"FileNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,167",BI=53$
-$LK,"CH_CTRLF",A="FL:::/Kernel/KernelA.HPP,3491"$
+$LK,"FileNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,167",BI=54$
+$LK,"CH_CTRLF",A="FL:::/Kernel/KernelA.HPP,3492"$
 $LK,"TK_SHR",A="FL:::/Kernel/KernelA.HPP,2083"$
-$LK,"AutoMountIDE",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,254",BI=54$
-$LK,"CH_CTRLG",A="FL:::/Kernel/KernelA.HPP,3492"$
+$LK,"AutoMountIDE",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,254",BI=55$
+$LK,"CH_CTRLG",A="FL:::/Kernel/KernelA.HPP,3493"$
 $LK,"DOCEF_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HPP,1012"$
 $LK,"_HASH_REM_DEL",A="FL:::/Kernel/KHashA.CPP.Z,208"$
-$LK,"TaskQueRem",A="FL:::/Kernel/Sched.CPP.Z,301",BI=55$
-$LK,"CH_CTRLH",A="FL:::/Kernel/KernelA.HPP,3493"$
+$LK,"TaskQueRem",A="FL:::/Kernel/Sched.CPP.Z,301",BI=56$
+$LK,"CH_CTRLH",A="FL:::/Kernel/KernelA.HPP,3494"$
 $LK,"CPalindromeU32",A="FL:::/Kernel/KernelA.HPP,2416"$
 $LK,"CPalindromeU16",A="FL:::/Kernel/KernelA.HPP,2411"$
-$LK,"DOCT_CHECK_BOX",A="FL:::/Kernel/KernelA.HPP,930"$
-$LK,"CH_CTRLI",A="FL:::/Kernel/KernelA.HPP,3494"$
-$LK,"FifoI64New",A="FL:::/Kernel/KDataTypes.CPP.Z,240",BI=56$
-$LK,"CH_CTRLJ",A="FL:::/Kernel/KernelA.HPP,3495"$
+$LK,"DOCT_CHECK_BOX",A="FL:::/Kernel/KernelA.HPP,931"$
+$LK,"CH_CTRLI",A="FL:::/Kernel/KernelA.HPP,3495"$
+$LK,"FifoI64New",A="FL:::/Kernel/KDataTypes.CPP.Z,240",BI=57$
+$LK,"CH_CTRLJ",A="FL:::/Kernel/KernelA.HPP,3496"$
 $LK,"ARGT_XMM128",A="FL:::/Kernel/KernelA.HPP,1945"$
-$LK,"SC_CURSOR_UP",A="FL:::/Kernel/KernelA.HPP,3568"$
-$LK,"CH_CTRLK",A="FL:::/Kernel/KernelA.HPP,3496"$
-$LK,"TASKf_HAS_SONG",A="FL:::/Kernel/KernelA.HPP,3287"$
+$LK,"SC_CURSOR_UP",A="FL:::/Kernel/KernelA.HPP,3569"$
+$LK,"CH_CTRLK",A="FL:::/Kernel/KernelA.HPP,3497"$
+$LK,"TASKf_HAS_SONG",A="FL:::/Kernel/KernelA.HPP,3288"$
 $LK,"DOCEf_SEL",A="FL:::/Kernel/KernelA.HPP,1049"$
-$LK,"RandI32",A="FL:::/Kernel/KMathB.CPP.Z,90",BI=57$
-$LK,"RandI16",A="FL:::/Kernel/KMathB.CPP.Z,74",BI=58$
-$LK,"CH_CTRLL",A="FL:::/Kernel/KernelA.HPP,3497"$
-$LK,"CH_CTRLM",A="FL:::/Kernel/KernelA.HPP,3498"$
+$LK,"RandI32",A="FL:::/Kernel/KMathB.CPP.Z,90",BI=58$
+$LK,"RandI16",A="FL:::/Kernel/KMathB.CPP.Z,74",BI=59$
+$LK,"CH_CTRLL",A="FL:::/Kernel/KernelA.HPP,3498"$
+$LK,"CH_CTRLM",A="FL:::/Kernel/KernelA.HPP,3499"$
 $LK,"ICf_LOCK",A="FL:::/Kernel/KernelA.HPP,1616"$
 $LK,"ICF_LOCK",A="FL:::/Kernel/KernelA.HPP,1615"$
-$LK,"PutFileLink",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,163",BI=59$
-$LK,"BreakLock",A="FL:::/Kernel/KExcept.CPP.Z,140",BI=60$
-$LK,"HPET",A="FL:::/Kernel/KernelB.HPP,283"$
-$LK,"CORE0_32BIT_INIT",A="FL:::/Kernel/KStart.CPP.Z,239"$
-$LK,"CORE0_16BIT_INIT",A="FL:::/Kernel/KStart.CPP.Z,58"$
-$LK,"CH_CTRLN",A="FL:::/Kernel/KernelA.HPP,3499"$
+$LK,"PutFileLink",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,163",BI=60$
+$LK,"BreakLock",A="FL:::/Kernel/KExcept.CPP.Z,140",BI=61$
+$LK,"HPET",A="FL:::/Kernel/KMisc.CPP.Z,80",BI=62$
+$LK,"CORE0_32BIT_INIT",A="FL:::/Kernel/KStart32.CPP.Z,57"$
+$LK,"CORE0_16BIT_INIT",A="FL:::/Kernel/KStart16.CPP.Z,56"$
+$LK,"CH_CTRLN",A="FL:::/Kernel/KernelA.HPP,3500"$
 $LK,"BDf_FMT",A="FL:::/Kernel/KernelA.HPP,2653"$
 $LK,"CCF_KEEP_DOT",A="FL:::/Kernel/KernelA.HPP,2136"$
-$LK,"Let2BlkDevType",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,161",BI=61$
-$LK,"CH_CTRLO",A="FL:::/Kernel/KernelA.HPP,3500"$
+$LK,"Let2BlkDevType",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,161",BI=63$
+$LK,"CH_CTRLO",A="FL:::/Kernel/KernelA.HPP,3501"$
 $LK,"ARGT_XMM",A="FL:::/Kernel/KernelA.HPP,1941"$
 $LK,"DOCEf_REMALLOC_DATA",A="FL:::/Kernel/KernelA.HPP,1098"$
 $LK,"DOCEf_WIN_REL",A="FL:::/Kernel/KernelA.HPP,1085"$
 $LK,"DOCEF_WIN_REL",A="FL:::/Kernel/KernelA.HPP,997"$
-$LK,"FifoI64Rem",A="FL:::/Kernel/KDataTypes.CPP.Z,275",BI=62$
+$LK,"FifoI64Rem",A="FL:::/Kernel/KDataTypes.CPP.Z,275",BI=64$
 $LK,"_D3_DIV",A="FL:::/Kernel/KMathA.CPP.Z,184"$
-$LK,"CH_CTRLP",A="FL:::/Kernel/KernelA.HPP,3501"$
+$LK,"CH_CTRLP",A="FL:::/Kernel/KernelA.HPP,3502"$
 $LK,"chars_bmp_non_eol",A="FL:::/Kernel/StrA.CPP.Z,396"$
-$LK,"CH_CTRLQ",A="FL:::/Kernel/KernelA.HPP,3502"$
-$LK,"CTSS",A="FL:::/Kernel/KernelA.HPP,3409"$
-$LK,"HomeSet",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,1",BI=63$
-$LK,"FileNameChk",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,245",BI=64$
+$LK,"CH_CTRLQ",A="FL:::/Kernel/KernelA.HPP,3503"$
+$LK,"CTSS",A="FL:::/Kernel/KernelA.HPP,3410"$
+$LK,"HomeSet",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,1",BI=65$
+$LK,"FileNameChk",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,245",BI=66$
 $LK,"D3Mul",A="FL:::/Kernel/KernelB.HPP,155"$
-$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HPP,3503"$
+$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HPP,3504"$
 $LK,"SK_NAME",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,89"$
-$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.CPP.Z,133",BI=65$
-$LK,"CallerRep",A="FL:::/Kernel/KDbg.CPP.Z,152",BI=66$
-$LK,"CH_CTRLS",A="FL:::/Kernel/KernelA.HPP,3504"$
-$LK,"ROP_EQU",A="FL:::/Kernel/KernelA.HPP,2941"$
+$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.CPP.Z,133",BI=67$
+$LK,"CallerRep",A="FL:::/Kernel/KDbg.CPP.Z,152",BI=68$
+$LK,"CH_CTRLS",A="FL:::/Kernel/KernelA.HPP,3505"$
+$LK,"ROP_EQU",A="FL:::/Kernel/KernelA.HPP,2942"$
 $LK,"DOCEf_LST",A="FL:::/Kernel/KernelA.HPP,1103"$
-$LK,"CtrlAltD",A="FL:::/Kernel/KeyDev.CPP.Z,138",BI=67$
-$LK,"RandI64",A="FL:::/Kernel/KMathB.CPP.Z,106",BI=68$
-$LK,"CH_CTRLT",A="FL:::/Kernel/KernelA.HPP,3505"$
+$LK,"CtrlAltD",A="FL:::/Kernel/KeyDev.CPP.Z,138",BI=69$
+$LK,"RandI64",A="FL:::/Kernel/KMathB.CPP.Z,106",BI=70$
+$LK,"CH_CTRLT",A="FL:::/Kernel/KernelA.HPP,3506"$
 $LK,"MBS_UNUSED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2857"$
 $LK,"CCmpGlbls",A="FL:::/Kernel/KernelA.HPP,2215"$
 $LK,"RT_U32",A="FL:::/Kernel/KernelA.HPP,1560"$
 $LK,"RT_U16",A="FL:::/Kernel/KernelA.HPP,1558"$
 $LK,"CExternUsage",A="FL:::/Kernel/KernelA.HPP,817"$
-$LK,"FAT32FreeClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,413",BI=69$
-$LK,"CH_CTRLU",A="FL:::/Kernel/KernelA.HPP,3506"$
+$LK,"FAT32FreeClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,413",BI=71$
+$LK,"CH_CTRLU",A="FL:::/Kernel/KernelA.HPP,3507"$
 $LK,"ARGT_MM32",A="FL:::/Kernel/KernelA.HPP,1939"$
 $LK,"DOCSS_COMMENT",A="FL:::/Kernel/KernelA.HPP,1131"$
-$LK,"CtrlAltF",A="FL:::/Kernel/KeyDev.CPP.Z,148",BI=70$
+$LK,"CtrlAltF",A="FL:::/Kernel/KeyDev.CPP.Z,148",BI=72$
 $LK,"ip_grid",A="FL:::/Kernel/KGlbls.CPP.Z,23"$
-$LK,"CH_CTRLV",A="FL:::/Kernel/KernelA.HPP,3507"$
+$LK,"CH_CTRLV",A="FL:::/Kernel/KernelA.HPP,3508"$
 $LK,"CCodeMisc",A="FL:::/Kernel/KernelA.HPP,1705"$
 $LK,"DOF_DONT_TEXT_ATTR",A="FL:::/Kernel/KernelA.HPP,1219"$
 $LK,"DOCEf_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1046"$
 $LK,"DOCEF_WORD_WRAP",A="FL:::/Kernel/KernelA.HPP,1040"$
-$LK,"DrvFATBlkSet",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,117",BI=71$
-$LK,"ISODrvInit",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,5",BI=72$
-$LK,"CH_CTRLW",A="FL:::/Kernel/KernelA.HPP,3508"$
+$LK,"DrvFATBlkSet",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,117",BI=73$
+$LK,"ISODrvInit",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,5",BI=74$
+$LK,"CH_CTRLW",A="FL:::/Kernel/KernelA.HPP,3509"$
 $LK,"FFB_NEXT_BLK",A="FL:::/Kernel/KernelA.HPP,2778"$
-$LK,"ISO1FromName",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,28",BI=73$
-$LK,"MPIntAll",A="FL:::/Kernel/MultiProc.CPP.Z,149",BI=74$
+$LK,"ISO1FromName",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,28",BI=75$
+$LK,"MPIntAll",A="FL:::/Kernel/MultiProc.CPP.Z,149",BI=76$
 $LK,"TaskContextRestore",A="FL:::/Kernel/Sched.CPP.Z,283"$
-$LK,"SCf_ALT",A="FL:::/Kernel/KernelA.HPP,3528"$
-$LK,"CH_CTRLX",A="FL:::/Kernel/KernelA.HPP,3509"$
-$LK,"CH_CTRLY",A="FL:::/Kernel/KernelA.HPP,3510"$
+$LK,"SCf_ALT",A="FL:::/Kernel/KernelA.HPP,3529"$
+$LK,"CH_CTRLX",A="FL:::/Kernel/KernelA.HPP,3510"$
+$LK,"CH_CTRLY",A="FL:::/Kernel/KernelA.HPP,3511"$
 $LK,"CDoc",A="FL:::/Kernel/KernelA.HPP,1354"$
 $LK,"MemSetU8",A="FL:::/Kernel/KernelB.HPP,178"$
 $LK,"_FCLEX",A="FL:::/Kernel/KMathA.CPP.Z,646"$
 $LK,"_D3_DOT",A="FL:::/Kernel/KMathA.CPP.Z,113"$
-$LK,"ARf_CSPRITE_INS_CLIPBOARD",A="FL:::/Kernel/KernelA.HPP,3901"$
-$LK,"CH_CTRLZ",A="FL:::/Kernel/KernelA.HPP,3511"$
+$LK,"ARf_CSPRITE_INS_CLIPBOARD",A="FL:::/Kernel/KernelA.HPP,3902"$
+$LK,"CH_CTRLZ",A="FL:::/Kernel/KernelA.HPP,3512"$
+$LK,"MEM_NUM_2MEG",A="FL:::/Kernel/KernelA.HPP,3468"$
 $LK,"CHashGeneric",A="FL:::/Kernel/KernelA.HPP,733"$
 $LK,"SYS_FIND_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.CPP.Z,8"$
-$LK,"CTRLF_CLICKED",A="FL:::/Kernel/KernelA.HPP,3095"$
+$LK,"CTRLF_CLICKED",A="FL:::/Kernel/KernelA.HPP,3096"$
 $LK,"HTF_RESOLVE",A="FL:::/Kernel/KernelA.HPP,707"$
-$LK,"BCnt",A="FL:::/Kernel/KMisc.CPP.Z,39",BI=75$
-$LK,"Mem64DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,128",BI=76$
-$LK,"Mem32DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,78",BI=77$
+$LK,"BCnt",A="FL:::/Kernel/KMisc.CPP.Z,39",BI=77$
+$LK,"Mem64DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,131",BI=78$
+$LK,"Mem32DevAlloc",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,81",BI=79$
 $LK,"RT_U64",A="FL:::/Kernel/KernelA.HPP,1563"$
-$LK,"DOCT_TAB",A="FL:::/Kernel/KernelA.HPP,905"$
+$LK,"DOCT_TAB",A="FL:::/Kernel/KernelA.HPP,903"$
 $LK,"HTT_FRAME_PTR",A="FL:::/Kernel/KernelA.HPP,698"$
 $LK,"HTt_FRAME_PTR",A="FL:::/Kernel/KernelA.HPP,668"$
-$LK,"ISO1FilesFind",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,173",BI=78$
-$LK,"CtrlAltM",A="FL:::/Kernel/KeyDev.CPP.Z,153",BI=79$
-$LK,"DefineLstLoad",A="FL:::/Kernel/KDefine.CPP.Z,13",BI=80$
+$LK,"ISO1FilesFind",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,173",BI=80$
+$LK,"CtrlAltM",A="FL:::/Kernel/KeyDev.CPP.Z,153",BI=81$
+$LK,"DefineLstLoad",A="FL:::/Kernel/KDefine.CPP.Z,13",BI=82$
 $LK,"ARGT_MM64",A="FL:::/Kernel/KernelA.HPP,1940"$
 $LK,"DOCEf_LEFT_CB",A="FL:::/Kernel/KernelA.HPP,1071"$
 $LK,"DOCEF_LEFT_CB",A="FL:::/Kernel/KernelA.HPP,983"$
 $LK,"RFLAGf_DIR",A="FL:::/Kernel/KernelA.HPP,314"$
-$LK,"ClusterNumNext",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,1",BI=81$
-$LK,"KbdMouseEvtTime",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,486",BI=82$
-$LK,"CtrlAltN",A="FL:::/Kernel/KeyDev.CPP.Z,158",BI=83$
+$LK,"ClusterNumNext",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,1",BI=83$
+$LK,"KbdMouseEvtTime",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,486",BI=84$
+$LK,"CtrlAltN",A="FL:::/Kernel/KeyDev.CPP.Z,158",BI=85$
 $LK,"ip_last",A="FL:::/Kernel/KGlbls.CPP.Z,24"$
 $LK,"CDirEntry",A="FL:::/Kernel/KernelA.HPP,2552"$
 $LK,"TK_STR",A="FL:::/Kernel/KernelA.HPP,2074"$
 $LK,"ACD_DEF_END",A="FL:::/Kernel/KernelA.HPP,1506"$
-$LK,"PROGRESS_DESC_LEN",A="FL:::/Kernel/KernelA.HPP,3910"$
+$LK,"PROGRESS_DESC_LEN",A="FL:::/Kernel/KernelA.HPP,3911"$
 $LK,"CCF_ASM_EXPRESSIONS",A="FL:::/Kernel/KernelA.HPP,2146"$
 $LK,"D3Sub",A="FL:::/Kernel/KernelB.HPP,159"$
-$LK,"SC_CURSOR_RIGHT",A="FL:::/Kernel/KernelA.HPP,3571"$
-$LK,"KeyDevAdd",A="FL:::/Kernel/KeyDev.CPP.Z,70",BI=84$
-$LK,"CTRLF_BORDER",A="FL:::/Kernel/KernelA.HPP,3092"$
+$LK,"SC_CURSOR_RIGHT",A="FL:::/Kernel/KernelA.HPP,3572"$
+$LK,"KeyDevAdd",A="FL:::/Kernel/KeyDev.CPP.Z,70",BI=86$
+$LK,"CTRLF_BORDER",A="FL:::/Kernel/KernelA.HPP,3093"$
 $LK,"_D3_EQU",A="FL:::/Kernel/KMathA.CPP.Z,226"$
-$LK,"VGAP_ATTR_DATA_READ",A="FL:::/Kernel/KernelA.HPP,3731"$
+$LK,"VGAP_ATTR_DATA_READ",A="FL:::/Kernel/KernelA.HPP,3732"$
 $LK,"ATA_PACKET",A="FL:::/Kernel/KernelA.HPP,2260"$
 $LK,"HTF_LOCAL",A="FL:::/Kernel/KernelA.HPP,709"$
 $LK,"HTT_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HPP,692"$
 $LK,"HTf_LOCAL",A="FL:::/Kernel/KernelA.HPP,679"$
-$LK,"CtrlAltT",A="FL:::/Kernel/KeyDev.CPP.Z,163",BI=85$
-$LK,"IsSilent",A="FL:::/Kernel/KMisc.CPP.Z,223",BI=86$
-$LK,"CBpt",A="FL:::/Kernel/KernelA.HPP,3157"$
+$LK,"CtrlAltT",A="FL:::/Kernel/KeyDev.CPP.Z,163",BI=87$
+$LK,"IsSilent",A="FL:::/Kernel/KMisc.CPP.Z,228",BI=88$
+$LK,"CBpt",A="FL:::/Kernel/KernelA.HPP,3158"$
 $LK,"HTt_ASM_KEYWORD",A="FL:::/Kernel/KernelA.HPP,662"$
-$LK,"PCIWriteU32",A="FL:::/Kernel/PCIBIOS.CPP.Z,250",BI=87$
-$LK,"PCIWriteU16",A="FL:::/Kernel/PCIBIOS.CPP.Z,235",BI=88$
-$LK,"CtrlAltV",A="FL:::/Kernel/KeyDev.CPP.Z,168",BI=89$
+$LK,"PCIWriteU32",A="FL:::/Kernel/PCIBIOS.CPP.Z,250",BI=89$
+$LK,"PCIWriteU16",A="FL:::/Kernel/PCIBIOS.CPP.Z,235",BI=90$
+$LK,"CtrlAltV",A="FL:::/Kernel/KeyDev.CPP.Z,168",BI=91$
 $LK,"CISO1DirEntry",A="FL:::/Kernel/KernelA.HPP,2458"$
 $LK,"_LXCHG_U8",A="FL:::/Kernel/KUtils.CPP.Z,244"$
-$LK,"CtrlAltX",A="FL:::/Kernel/KeyDev.CPP.Z,173",BI=90$
-$LK,"ChgDsk",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,230",BI=91$
-$LK,"UserTaskCont",A="FL:::/Kernel/KTask.CPP.Z,352",BI=92$
+$LK,"CtrlAltX",A="FL:::/Kernel/KeyDev.CPP.Z,173",BI=92$
+$LK,"ChgDsk",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,230",BI=93$
+$LK,"UserTaskCont",A="FL:::/Kernel/KTask.CPP.Z,352",BI=94$
 $LK,"RFLAGf_NESTED_TASK",A="FL:::/Kernel/KernelA.HPP,318"$
 $LK,"BEqu",A="FL:::/Kernel/KernelB.HPP,28"$
 $LK,"ISO1T_PRI_VOL_DESC",A="FL:::/Kernel/KernelA.HPP,2479"$
-$LK,"FAT32MkDir",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,933",BI=93$
-$LK,"DCS_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,3651"$
+$LK,"FAT32MkDir",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,933",BI=95$
+$LK,"DCS_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,3652"$
 $LK,"ICF_USE_INT",A="FL:::/Kernel/KernelA.HPP,1599"$
 $LK,"DOCT_NEW_LINE",A="FL:::/Kernel/KernelA.HPP,901"$
 $LK,"BIN_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,371"$
@@ -391,36 +397,37 @@ $LK,"CDateStruct",A="FL:::/Kernel/KernelA.HPP,192"$
 $LK,"CHashFun",A="FL:::/Kernel/KernelA.HPP,856"$
 $LK,"SV_I_REG",A="FL:::/Kernel/KernelA.HPP,1741"$
 $LK,"DOCEf_INVERT",A="FL:::/Kernel/KernelA.HPP,1048"$
-$LK,"DayOfWeek",A="FL:::/Kernel/KDate.CPP.Z,30",BI=94$
+$LK,"DayOfWeek",A="FL:::/Kernel/KDate.CPP.Z,30",BI=96$
 $LK,"CDrv",A="FL:::/Kernel/KernelA.HPP,2718"$
 $LK,"TK_MINUS_MINUS",A="FL:::/Kernel/KernelA.HPP,2079"$
-$LK,"DOCT_LST",A="FL:::/Kernel/KernelA.HPP,931"$
-$LK,"JobResGet",A="FL:::/Kernel/SrvCmd.CPP.Z,198",BI=95$
-$LK,"sys_heap_init_flag",A="FL:::/Kernel/KernelB.HPP,180"$
+$LK,"DOCT_LST",A="FL:::/Kernel/KernelA.HPP,932"$
+$LK,"JobResGet",A="FL:::/Kernel/SrvCmd.CPP.Z,198",BI=97$
+$LK,"sys_heap_init_flag",A="FL:::/Kernel/KernelB.HPP,181"$
 $LK,"FUF_CANCEL",A="FL:::/Kernel/KernelA.HPP,2599"$
 $LK,"FUf_CANCEL",A="FL:::/Kernel/KernelA.HPP,2573"$
 $LK,"FALSE",A="FL:::/Kernel/KernelA.HPP,20"$
-$LK,"VGAP_REG_READ",A="FL:::/Kernel/KernelA.HPP,3736"$
-$LK,"SVCf_ADD_TO_QUE",A="FL:::/Kernel/KernelA.HPP,3186"$
+$LK,"VGAP_REG_READ",A="FL:::/Kernel/KernelA.HPP,3737"$
+$LK,"SVCf_ADD_TO_QUE",A="FL:::/Kernel/KernelA.HPP,3187"$
 $LK,"CUAsmGlbls",A="FL:::/Kernel/KernelA.HPP,2230"$
 $LK,"TK_ADD_EQU",A="FL:::/Kernel/KernelA.HPP,2098"$
 $LK,"TK_XOR_EQU",A="FL:::/Kernel/KernelA.HPP,2097"$
-$LK,"StrPrintHex",A="FL:::/Kernel/StrA.CPP.Z,1",BI=96$
+$LK,"StrPrintHex",A="FL:::/Kernel/StrA.CPP.Z,1",BI=98$
 $LK,"_D3_ADD_EQU",A="FL:::/Kernel/KMathA.CPP.Z,239"$
 $LK,"DRV_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2717"$
-$LK,"DOCT_PMT",A="FL:::/Kernel/KernelA.HPP,918"$
+$LK,"DOCT_PMT",A="FL:::/Kernel/KernelA.HPP,907"$
 $LK,"Cf_EXTERN",A="FL:::/Kernel/KernelA.HPP,830"$
 $LK,"HPET_GCAP_ID",A="FL:::/Kernel/KernelA.HPP,533"$
 $LK,"ATan",A="FL:::/Kernel/KernelB.HPP,95"$
-$LK,"SysBadFree",A="FL:::/Kernel/Mem/Mem512.CPP.Z,1",BI=97$
+$LK,"MEM_NUM_512GIG",A="FL:::/Kernel/KernelA.HPP,3471"$
+$LK,"SysBadFree",A="FL:::/Kernel/Mem/Mem512.CPP.Z,1",BI=99$
 $LK,"ATA_ID_DEV",A="FL:::/Kernel/KernelA.HPP,2269"$
 $LK,"CHashReg",A="FL:::/Kernel/KernelA.HPP,748"$
-$LK,"SCf_INS",A="FL:::/Kernel/KernelA.HPP,3536"$
+$LK,"SCf_INS",A="FL:::/Kernel/KernelA.HPP,3537"$
 $LK,"LAPIC_LVT_ERR",A="FL:::/Kernel/KernelA.HPP,503"$
-$LK,"Scale2Mem",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,182",BI=98$
-$LK,"Mem512TaskFree",A="FL:::/Kernel/Mem/Mem512.CPP.Z,153",BI=99$
-$LK,"RandU32",A="FL:::/Kernel/KMathB.CPP.Z,98",BI=100$
-$LK,"RandU16",A="FL:::/Kernel/KMathB.CPP.Z,82",BI=101$
+$LK,"Scale2Mem",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,192",BI=100$
+$LK,"Mem512TaskFree",A="FL:::/Kernel/Mem/Mem512.CPP.Z,154",BI=101$
+$LK,"RandU32",A="FL:::/Kernel/KMathB.CPP.Z,98",BI=102$
+$LK,"RandU16",A="FL:::/Kernel/KMathB.CPP.Z,82",BI=103$
 $LK,"_FLDCW",A="FL:::/Kernel/KMathA.CPP.Z,625"$
 $LK,"__DIR__",A="FL:::/Kernel/KernelA.HPP,2033"$
 $LK,"ARGT_RM32",A="FL:::/Kernel/KernelA.HPP,1901"$
@@ -429,177 +436,176 @@ $LK,"RFLAGf_INT",A="FL:::/Kernel/KernelA.HPP,313"$
 $LK,"WIf_SELF_DOC",A="FL:::/Kernel/KernelA.HPP,1445"$
 $LK,"WIF_SELF_DOC",A="FL:::/Kernel/KernelA.HPP,1419"$
 $LK,"MLF_STATIC",A="FL:::/Kernel/KernelA.HPP,780"$
-$LK,"ChgExt",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,199",BI=102$
+$LK,"ChgExt",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,199",BI=104$
 $LK,"str2color_lst",A="FL:::/Kernel/KDefine.CPP.Z,156"$
 $LK,"local_time_offset",A="FL:::/Kernel/KGlbls.CPP.Z,14"$
-$LK,"RedSeaFilesFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,539",BI=103$
+$LK,"RedSeaFilesFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,539",BI=105$
 $LK,"TK_INS_BIN",A="FL:::/Kernel/KernelA.HPP,2110"$
 $LK,"_D3_MUL",A="FL:::/Kernel/KMathA.CPP.Z,167"$
 $LK,"ISO1_BASE_YEAR",A="FL:::/Kernel/KernelA.HPP,2521"$
 $LK,"TK_ELSE",A="FL:::/Kernel/KernelA.HPP,2106"$
-$LK,"RandU64",A="FL:::/Kernel/KMathB.CPP.Z,114",BI=104$
-$LK,"PostMsgWait",A="FL:::/Kernel/SrvCmd.CPP.Z,251",BI=105$
-$LK,"UndefinedDefine",A="FL:::/Kernel/KDefine.CPP.Z,43",BI=106$
+$LK,"RandU64",A="FL:::/Kernel/KMathB.CPP.Z,114",BI=106$
+$LK,"PostMsgWait",A="FL:::/Kernel/SrvCmd.CPP.Z,251",BI=107$
+$LK,"UndefinedDefine",A="FL:::/Kernel/KDefine.CPP.Z,43",BI=108$
 $LK,"ARGT_RM64",A="FL:::/Kernel/KernelA.HPP,1902"$
-$LK,"ATAGetRes",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,67",BI=107$
-$LK,"ATAWaitDRQ",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,36",BI=108$
-$LK,"TaskInit",A="FL:::/Kernel/KTask.CPP.Z,150",BI=109$
+$LK,"ATAGetRes",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,67",BI=109$
+$LK,"ATAWaitDRQ",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,36",BI=110$
+$LK,"TaskInit",A="FL:::/Kernel/KTask.CPP.Z,150",BI=111$
 $LK,"DOCEf_RIGHT_CB",A="FL:::/Kernel/KernelA.HPP,1073"$
 $LK,"DOCEF_RIGHT_CB",A="FL:::/Kernel/KernelA.HPP,985"$
 $LK,"HTT_DICT_WORD",A="FL:::/Kernel/KernelA.HPP,690"$
 $LK,"HTt_DICT_WORD",A="FL:::/Kernel/KernelA.HPP,660"$
 $LK,"RLf_MP",A="FL:::/Kernel/KernelA.HPP,448"$
 $LK,"CSpring",A="FL:::/Kernel/KernelA.HPP,226"$
-$LK,"CBGR24",A="FL:::/Kernel/KernelA.HPP,2989"$
-$LK,"FONT_WIDTH",A="FL:::/Kernel/KernelA.HPP,3612"$
+$LK,"CBGR24",A="FL:::/Kernel/KernelA.HPP,2990"$
+$LK,"FONT_WIDTH",A="FL:::/Kernel/KernelA.HPP,3613"$
 $LK,"CHeapCtrl",A="FL:::/Kernel/KernelA.HPP,2907"$
-$LK,"LastDayOfYear",A="FL:::/Kernel/KDate.CPP.Z,110",BI=110$
+$LK,"LastDayOfYear",A="FL:::/Kernel/KDate.CPP.Z,110",BI=112$
 $LK,"SYS_IDLE_PT",A="FL:::/Kernel/Sched.CPP.Z,204"$
-$LK,"mp_cnt_initial",A="FL:::/Kernel/KernelB.HPP,228"$
-$LK,"STD_DISTRO_DVD_CFG",A="FL:::/Kernel/KernelA.HPP,3896"$
+$LK,"mp_cnt_initial",A="FL:::/Kernel/KernelB.HPP,229"$
+$LK,"STD_DISTRO_DVD_CFG",A="FL:::/Kernel/KernelA.HPP,3897"$
 $LK,"CAbsCntsI64",A="FL:::/Kernel/KernelA.HPP,1806"$
-$LK,"Core0StartMP",A="FL:::/Kernel/MultiProc.CPP.Z,284",BI=111$
+$LK,"Core0StartMP",A="FL:::/Kernel/MultiProc.CPP.Z,284",BI=113$
 $LK,"_D3_SUB",A="FL:::/Kernel/KMathA.CPP.Z,149"$
-$LK,"CBGR48",A="FL:::/Kernel/KernelA.HPP,2993"$
+$LK,"CBGR48",A="FL:::/Kernel/KernelA.HPP,2994"$
 $LK,"DOCEF_BORDER_PLOT",A="FL:::/Kernel/KernelA.HPP,1004"$
-$LK,"IntCore0TimerHandler",A="FL:::/Kernel/KMisc.CPP.Z,47",BI=112$
+$LK,"IntCore0TimerHandler",A="FL:::/Kernel/KMisc.CPP.Z,47",BI=114$
 $LK,"__DATE__",A="FL:::/Kernel/KernelA.HPP,2025"$
 $LK,"chars_bmp_safe_dollar",A="FL:::/Kernel/StrA.CPP.Z,391"$
-$LK,"AdamErr",A="FL:::/Kernel/SrvCmd.CPP.Z,434",BI=113$
-$LK,"sys_focus_task",A="FL:::/Kernel/KernelB.HPP,196"$
+$LK,"AdamErr",A="FL:::/Kernel/SrvCmd.CPP.Z,434",BI=115$
+$LK,"sys_focus_task",A="FL:::/Kernel/KernelB.HPP,197"$
 $LK,"DOCEf_BORDER_PLOT",A="FL:::/Kernel/KernelA.HPP,1092"$
 $LK,"HTT_MODULE",A="FL:::/Kernel/KernelA.HPP,696"$
 $LK,"HTt_MODULE",A="FL:::/Kernel/KernelA.HPP,666"$
-$LK,"SVCf_HIGHEST_PRIORITY",A="FL:::/Kernel/KernelA.HPP,3181"$
+$LK,"SVCf_HIGHEST_PRIORITY",A="FL:::/Kernel/KernelA.HPP,3182"$
 $LK,"ARGT_REL8",A="FL:::/Kernel/KernelA.HPP,1880"$
-$LK,"GridInit",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,1",BI=114$
-$LK,"FirstDayOfYear",A="FL:::/Kernel/KDate.CPP.Z,98",BI=115$
+$LK,"GridInit",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,1",BI=116$
+$LK,"FirstDayOfYear",A="FL:::/Kernel/KDate.CPP.Z,98",BI=117$
 $LK,"CCf_PMT",A="FL:::/Kernel/KernelA.HPP,2129"$
 $LK,"ACD_EXTRA",A="FL:::/Kernel/KernelA.HPP,1511"$
 $LK,"WIf_SELF_ODE",A="FL:::/Kernel/KernelA.HPP,1446"$
 $LK,"WIF_SELF_ODE",A="FL:::/Kernel/KernelA.HPP,1420"$
 $LK,"MLF_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HPP,774"$
 $LK,"COREAP_16BIT_INIT",A="FL:::/Kernel/MultiProc.CPP.Z,9"$
-$LK,"SCf_NUM",A="FL:::/Kernel/KernelA.HPP,3530"$
+$LK,"SCf_NUM",A="FL:::/Kernel/KernelA.HPP,3531"$
 $LK,"RS_ATTR_RESIDENT",A="FL:::/Kernel/KernelA.HPP,2536"$
-$LK,"Dbg2",A="FL:::/Kernel/KDbg.CPP.Z,533",BI=116$
-$LK,"HashSrcFileSet",A="FL:::/Kernel/KHashB.CPP.Z,154",BI=117$
-$LK,"ROP_XOR",A="FL:::/Kernel/KernelA.HPP,2942"$
+$LK,"Dbg2",A="FL:::/Kernel/KDbg.CPP.Z,533",BI=118$
+$LK,"HashSrcFileSet",A="FL:::/Kernel/KHashB.CPP.Z,154",BI=119$
+$LK,"ROP_XOR",A="FL:::/Kernel/KernelA.HPP,2943"$
 $LK,"NULL",A="FL:::/Kernel/KernelA.HPP,18"$
-$LK,"BlkPoolInit",A="FL:::/Kernel/Mem/BlkPool.CPP.Z,18",BI=118$
-$LK,"_BIT_FIELD_EXTRACT_U32",A="FL:::/Kernel/KUtils.CPP.Z,167"$
+$LK,"BlkPoolInit",A="FL:::/Kernel/Mem/BlkPool.CPP.Z,18",BI=120$
 $LK,"BDF_EXT_SIZE",A="FL:::/Kernel/KernelA.HPP,2645"$
-$LK,"ProgressBarsRst",A="FL:::/Kernel/KMisc.CPP.Z,270",BI=119$
+$LK,"ProgressBarsRst",A="FL:::/Kernel/KMisc.CPP.Z,275",BI=121$
 $LK,"sys_boot_blk",A="FL:::/Kernel/KernelB.HPP,38"$
-$LK,"TASKf_PENDING_BREAK",A="FL:::/Kernel/KernelA.HPP,3291"$
+$LK,"TASKf_PENDING_BREAK",A="FL:::/Kernel/KernelA.HPP,3292"$
 $LK,"BDf_EXT_SIZE",A="FL:::/Kernel/KernelA.HPP,2655"$
-$LK,"RedSeaAllocClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,302",BI=120$
+$LK,"RedSeaAllocClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,302",BI=122$
 $LK,"CQue",A="FL:::/Kernel/KernelA.HPP,121"$
 $LK,"MEM_ADAM_STK",A="FL:::/Kernel/KernelA.HPP,2884"$
 $LK,"DOCEF_UPDATE_DATA",A="FL:::/Kernel/KernelA.HPP,1008"$
-$LK,"AdamLog",A="FL:::/Kernel/SrvCmd.CPP.Z,424",BI=121$
-$LK,"TASKf_KILL_TASK",A="FL:::/Kernel/KernelA.HPP,3282"$
+$LK,"AdamLog",A="FL:::/Kernel/SrvCmd.CPP.Z,424",BI=123$
+$LK,"TASKf_KILL_TASK",A="FL:::/Kernel/KernelA.HPP,3283"$
 $LK,"ACD_H1",A="FL:::/Kernel/KernelA.HPP,1503"$
 $LK,"Ff_RET1",A="FL:::/Kernel/KernelA.HPP,854"$
-$LK,"SVCT_SPAWN_TASK",A="FL:::/Kernel/KernelA.HPP,3193"$
+$LK,"SVCT_SPAWN_TASK",A="FL:::/Kernel/KernelA.HPP,3194"$
 $LK,"RS_ATTR_ARCHIVE",A="FL:::/Kernel/KernelA.HPP,2531"$
 $LK,"DOCEf_UPDATE_DATA",A="FL:::/Kernel/KernelA.HPP,1096"$
 $LK,"EXT_DBG_RESUME",A="FL:::/Kernel/KernelA.HPP,579"$
 $LK,"FSt_FAT32",A="FL:::/Kernel/KernelA.HPP,2688"$
 $LK,"OPTf_WARN_PAREN",A="FL:::/Kernel/KernelA.HPP,1539"$
-$LK,"TaskStkNew",A="FL:::/Kernel/KTask.CPP.Z,68",BI=122$
+$LK,"TaskStkNew",A="FL:::/Kernel/KTask.CPP.Z,68",BI=124$
 $LK,"RT_PTR",A="FL:::/Kernel/KernelA.HPP,1562"$
-$LK,"HashTableDel",A="FL:::/Kernel/KHashB.CPP.Z,90",BI=123$
+$LK,"HashTableDel",A="FL:::/Kernel/KHashB.CPP.Z,90",BI=125$
 $LK,"LBtc",A="FL:::/Kernel/KernelB.HPP,22"$
 $LK,"FUF_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HPP,2613"$
 $LK,"ClampI64",A="FL:::/Kernel/KernelB.HPP,125"$
 $LK,"FUf_Z_OR_NOT_Z",A="FL:::/Kernel/KernelA.HPP,2587"$
-$LK,"B2",A="FL:::/Kernel/KDbg.CPP.Z,422",BI=124$
-$LK,"SLOP",A="FL:::/Kernel/StrPrint.CPP.Z,204"$
+$LK,"B2",A="FL:::/Kernel/KDbg.CPP.Z,422",BI=126$
+$LK,"SLOP",A="FL:::/Kernel/StrPrint.CPP.Z,206"$
 $LK,"FF_BUF_DIRTY",A="FL:::/Kernel/KernelA.HPP,2782"$
 $LK,"ICF_SWAP",A="FL:::/Kernel/KernelA.HPP,1611"$
 $LK,"_STRMATCH",A="FL:::/Kernel/StrA.CPP.Z,223"$
 $LK,"MSF_FIXED",A="FL:::/Kernel/KernelA.HPP,207"$
 $LK,"_CPUID",A="FL:::/Kernel/KUtils.CPP.Z,319"$
-$LK,"SYS_HEAP_BASE",A="FL:::/Kernel/KStart.CPP.Z,189"$
+$LK,"SYS_HEAP_BASE",A="FL:::/Kernel/KStart32.CPP.Z,6"$
 $LK,"_LBEQU",A="FL:::/Kernel/KUtils.CPP.Z,104"$
-$LK,"Caller",A="FL:::/Kernel/KDbg.CPP.Z,60",BI=125$
-$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HPP,3799"$
+$LK,"Caller",A="FL:::/Kernel/KDbg.CPP.Z,60",BI=127$
+$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HPP,3800"$
 $LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HPP,2259"$
 $LK,"INT_MP_CRASH_ADDR",A="FL:::/Kernel/KInts.CPP.Z,2"$
-$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3598"$
+$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3599"$
 $LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HPP,2538"$
 $LK,"HPET_MAIN_CNT",A="FL:::/Kernel/KernelA.HPP,535"$
 $LK,"ARGT_NONE",A="FL:::/Kernel/KernelA.HPP,1879"$
-$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HPP,929"$
-$LK,"SUF_T2S",A="FL:::/Kernel/KernelA.HPP,3800"$
-$LK,"MEM_MIN_MEG",A="FL:::/Kernel/KernelA.HPP,3465"$
+$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HPP,930"$
+$LK,"SUF_T2S",A="FL:::/Kernel/KernelA.HPP,3801"$
+$LK,"MEM_MIN_MEG",A="FL:::/Kernel/KernelA.HPP,3466"$
 $LK,"exp_1",A="FL:::/Kernel/KernelA.HPP,51"$
 $LK,"CTRL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,15"$
-$LK,"KeyDevRem",A="FL:::/Kernel/KeyDev.CPP.Z,64",BI=126$
-$LK,"G2",A="FL:::/Kernel/KDbg.CPP.Z,469",BI=127$
+$LK,"KeyDevRem",A="FL:::/Kernel/KeyDev.CPP.Z,64",BI=128$
+$LK,"G2",A="FL:::/Kernel/KDbg.CPP.Z,469",BI=129$
 $LK,"DOCEG_HAS_ARG",A="FL:::/Kernel/KernelA.HPP,1031"$
-$LK,"TSSNew",A="FL:::/Kernel/MultiProc.CPP.Z,76",BI=128$
-$LK,"SYS_PROGRESS1_DESC",A="FL:::/Kernel/KStart.CPP.Z,215"$
+$LK,"TSSNew",A="FL:::/Kernel/MultiProc.CPP.Z,76",BI=130$
+$LK,"SYS_PROGRESS1_DESC",A="FL:::/Kernel/KStart32.CPP.Z,33"$
 $LK,"LBtr",A="FL:::/Kernel/KernelB.HPP,24"$
 $LK,"FStf_DISABLE",A="FL:::/Kernel/KernelA.HPP,2697"$
 $LK,"HTT_OPCODE",A="FL:::/Kernel/KernelA.HPP,693"$
 $LK,"HTt_OPCODE",A="FL:::/Kernel/KernelA.HPP,663"$
 $LK,"CDATE_YEAR_DAYS_INT",A="FL:::/Kernel/KernelA.HPP,183"$
-$LK,"FAT32AllocContiguousClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,514",BI=129$
+$LK,"FAT32AllocContiguousClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,514",BI=131$
 $LK,"LBts",A="FL:::/Kernel/KernelB.HPP,26"$
 $LK,"ArcEntryGet",A="FL:::/Kernel/Compress.CPP.Z,100"$
 $LK,"_LOG10",A="FL:::/Kernel/KMathA.CPP.Z,592"$
-$LK,"Adam",A="FL:::/Kernel/SrvCmd.CPP.Z,407",BI=130$
+$LK,"Adam",A="FL:::/Kernel/SrvCmd.CPP.Z,407",BI=132$
 $LK,"CTryStk",A="FL:::/Kernel/KExcept.CPP.Z,55"$
-$LK,"DCF_PALETTE",A="FL:::/Kernel/KernelA.HPP,3627"$
+$LK,"DCF_PALETTE",A="FL:::/Kernel/KernelA.HPP,3628"$
 $LK,"set_bits_table",A="FL:::/Kernel/KGlbls.CPP.Z,13"$
 $LK,"rev_bits_table",A="FL:::/Kernel/KGlbls.CPP.Z,12"$
-$LK,"KBD_CTRL",A="FL:::/Kernel/KernelA.HPP,3000"$
+$LK,"KBD_CTRL",A="FL:::/Kernel/KernelA.HPP,3001"$
 $LK,"HTt_FUN",A="FL:::/Kernel/KernelA.HPP,658"$
 $LK,"RS_ATTR_LONG_NAME",A="FL:::/Kernel/KernelA.HPP,2532"$
 $LK,"TK_XOR_XOR",A="FL:::/Kernel/KernelA.HPP,2090"$
 $LK,"DOCEf_HOLD",A="FL:::/Kernel/KernelA.HPP,1101"$
 $LK,"DOCEF_HOLD",A="FL:::/Kernel/KernelA.HPP,1015"$
-$LK,"KDInputFilterPutKey",A="FL:::/Kernel/KeyDev.CPP.Z,108",BI=131$
-$LK,"GetOutOfDollar",A="FL:::/Kernel/StrB.CPP.Z,75",BI=132$
+$LK,"KDInputFilterPutKey",A="FL:::/Kernel/KeyDev.CPP.Z,108",BI=133$
+$LK,"GetOutOfDollar",A="FL:::/Kernel/StrB.CPP.Z,75",BI=134$
 $LK,"DOC_COLOR_ALT_TEXT",A="FL:::/Kernel/KernelA.HPP,1135"$
 $LK,"MBR_PT_FAT32a",A="FL:::/Kernel/KernelA.HPP,2700"$
-$LK,"DbgHelp",A="FL:::/Kernel/KDbg.CPP.Z,498",BI=133$
+$LK,"DbgHelp",A="FL:::/Kernel/KDbg.CPP.Z,498",BI=135$
 $LK,"_FLOOR",A="FL:::/Kernel/KMathA.CPP.Z,420"$
 $LK,"MBR_PT_FAT32b",A="FL:::/Kernel/KernelA.HPP,2701"$
 $LK,"MBR_PT_FAT32c",A="FL:::/Kernel/KernelA.HPP,2702"$
 $LK,"D3Dist",A="FL:::/Kernel/KernelB.HPP,149"$
 $LK,"MBR_PT_FAT32d",A="FL:::/Kernel/KernelA.HPP,2703"$
 $LK,"TK_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HPP,2111"$
-$LK,"LMF_EXACT",A="FL:::/Kernel/KernelA.HPP,3812"$
+$LK,"LMF_EXACT",A="FL:::/Kernel/KernelA.HPP,3813"$
 $LK,"MBR_PT_FAT32e",A="FL:::/Kernel/KernelA.HPP,2704"$
 $LK,"FSt_NTFS",A="FL:::/Kernel/KernelA.HPP,2692"$
 $LK,"MBR_PT_FAT32f",A="FL:::/Kernel/KernelA.HPP,2705"$
 $LK,"CM_MAX_CONSTS",A="FL:::/Kernel/KernelA.HPP,1703"$
 $LK,"DOCEF_TAG_CB",A="FL:::/Kernel/KernelA.HPP,994"$
-$LK,"Str2Date",A="FL:::/Kernel/StrScan.CPP.Z,138",BI=134$
+$LK,"Str2Date",A="FL:::/Kernel/StrScan.CPP.Z,138",BI=136$
 $LK,"ICF_PASS_TRACE",A="FL:::/Kernel/KernelA.HPP,1605"$
 $LK,"DOCEf_TAG_CB",A="FL:::/Kernel/KernelA.HPP,1082"$
 $LK,"HTt_REG",A="FL:::/Kernel/KernelA.HPP,664"$
-$LK,"ChkPtr",A="FL:::/Kernel/KDbg.CPP.Z,1",BI=135$
-$LK,"TaskWait",A="FL:::/Kernel/SrvCmd.CPP.Z,220",BI=136$
-$LK,"_R10",A="FL:::/Kernel/KernelA.HPP,3434"$
+$LK,"ChkPtr",A="FL:::/Kernel/KDbg.CPP.Z,1",BI=137$
+$LK,"TaskWait",A="FL:::/Kernel/SrvCmd.CPP.Z,220",BI=138$
+$LK,"_R10",A="FL:::/Kernel/KernelA.HPP,3435"$
 $LK,"SYS_MEM_INIT_VAL",A="FL::/Temp.TXT.Z,1"$
-$LK,"_R11",A="FL:::/Kernel/KernelA.HPP,3435"$
-$LK,"BOOT_RAM_LIMIT",A="FL:::/Kernel/KernelA.HPP,3886"$
-$LK,"_R12",A="FL:::/Kernel/KernelA.HPP,3436"$
+$LK,"_R11",A="FL:::/Kernel/KernelA.HPP,3436"$
+$LK,"BOOT_RAM_LIMIT",A="FL:::/Kernel/KernelA.HPP,3887"$
+$LK,"_R12",A="FL:::/Kernel/KernelA.HPP,3437"$
 $LK,"SK_CLUSTER",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,90"$
-$LK,"SysGetI64",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,169",BI=137$
+$LK,"SysGetI64",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,169",BI=139$
 $LK,"MemSetI64",A="FL:::/Kernel/KernelB.HPP,172"$
-$LK,"_R13",A="FL:::/Kernel/KernelA.HPP,3437"$
+$LK,"_R13",A="FL:::/Kernel/KernelA.HPP,3438"$
 $LK,"DEF_NOT_INITIALIZED",A="FL:::/Kernel/KernelA.HPP,2549"$
-$LK,"SYS_BOOT_PATCH_TABLE_BASE",A="FL:::/Kernel/KStart.CPP.Z,26"$
-$LK,"_R14",A="FL:::/Kernel/KernelA.HPP,3438"$
-$LK,"CTRLT_WIN_VSCROLL",A="FL:::/Kernel/KernelA.HPP,3088"$
+$LK,"SYS_BOOT_PATCH_TABLE_BASE",A="FL:::/Kernel/KStart16.CPP.Z,25"$
+$LK,"_R14",A="FL:::/Kernel/KernelA.HPP,3439"$
+$LK,"CTRLT_WIN_VSCROLL",A="FL:::/Kernel/KernelA.HPP,3089"$
 $LK,"TK_LESS_EQU",A="FL:::/Kernel/KernelA.HPP,2086"$
 $LK,"ODEF_HAS_MASSES",A="FL:::/Kernel/KernelA.HPP,240"$
-$LK,"_R15",A="FL:::/Kernel/KernelA.HPP,3439"$
+$LK,"_R15",A="FL:::/Kernel/KernelA.HPP,3440"$
 $LK,"FUG_FILES_FIND",A="FL:::/Kernel/KernelA.HPP,2621"$
 $LK,"TRUE",A="FL:::/Kernel/KernelA.HPP,19"$
 $LK,"FSt_NULL",A="FL:::/Kernel/KernelA.HPP,2686"$
@@ -610,51 +616,51 @@ $LK,"LDF_NO_ABSS",A="FL:::/Kernel/KernelA.HPP,367"$
 $LK,"DOCEf_LINK",A="FL:::/Kernel/KernelA.HPP,1086"$
 $LK,"DOCEF_LINK",A="FL:::/Kernel/KernelA.HPP,998"$
 $LK,"D3Copy",A="FL:::/Kernel/KernelB.HPP,147"$
-$LK,"Beep",A="FL:::/Kernel/KMisc.CPP.Z,185",BI=138$
+$LK,"Beep",A="FL:::/Kernel/KMisc.CPP.Z,190",BI=140$
 $LK,"_STRNICMP",A="FL:::/Kernel/StrA.CPP.Z,183"$
 $LK,"_MEMSET_I64",A="FL:::/Kernel/KUtils.CPP.Z,42"$
-$LK,"CH_SPACE",A="FL:::/Kernel/KernelA.HPP,3518"$
+$LK,"CH_SPACE",A="FL:::/Kernel/KernelA.HPP,3519"$
 $LK,"AAT_SUB_U8",A="FL:::/Kernel/KernelA.HPP,1970"$
 $LK,"IET_IMM64_EXPORT",A="FL:::/Kernel/KernelA.HPP,409"$
 $LK,"IET_IMM32_EXPORT",A="FL:::/Kernel/KernelA.HPP,407"$
-$LK,"sys_gdt",A="FL:::/Kernel/KernelB.HPP,265"$
+$LK,"sys_gdt",A="FL:::/Kernel/KernelB.HPP,266"$
 $LK,"Call",A="FL:::/Kernel/KernelB.HPP,44"$
-$LK,"SYS_FIXED_AREA",A="FL:::/Kernel/KernelA.HPP,3471"$
+$LK,"SYS_FIXED_AREA",A="FL:::/Kernel/KernelA.HPP,3473"$
 $LK,"ICF_CODE_FINAL",A="FL:::/Kernel/KernelA.HPP,1601"$
-$LK,"SYS_PROGRESS2_DESC",A="FL:::/Kernel/KStart.CPP.Z,218"$
-$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,1",BI=139$
+$LK,"SYS_PROGRESS2_DESC",A="FL:::/Kernel/KStart32.CPP.Z,36"$
+$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,1",BI=141$
 $LK,"InU8",A="FL:::/Kernel/KernelB.HPP,77"$
 $LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HPP,1926"$
 $LK,"CMemUnused",A="FL:::/Kernel/KernelA.HPP,2816"$
 $LK,"IEF_48_REX",A="FL:::/Kernel/KernelA.HPP,1733"$
 $LK,"RECALCt_TO_SCREEN",A="FL:::/Kernel/KernelA.HPP,1347"$
 $LK,"ã",A="FL:::/Kernel/KernelA.HPP,50"$
-$LK,"Suspend",A="FL:::/Kernel/KTask.CPP.Z,45",BI=140$
+$LK,"Suspend",A="FL:::/Kernel/KTask.CPP.Z,45",BI=142$
 $LK,"ClampU64",A="FL:::/Kernel/KernelB.HPP,127"$
-$LK,"ARC_MAX_BITS",A="FL:::/Kernel/KernelA.HPP,3747"$
+$LK,"ARC_MAX_BITS",A="FL:::/Kernel/KernelA.HPP,3748"$
 $LK,"TK_MOD_EQU",A="FL:::/Kernel/KernelA.HPP,2107"$
-$LK,"FunSegFind",A="FL:::/Kernel/FunSeg.CPP.Z,54",BI=141$
-$LK,"Define",A="FL:::/Kernel/KDefine.CPP.Z,49",BI=142$
-$LK,"FAT32Fmt",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,60",BI=143$
-$LK,"SrvCmdLine",A="FL:::/Kernel/KTask.CPP.Z,374",BI=144$
-$LK,"HashTableNew",A="FL:::/Kernel/KHashB.CPP.Z,50",BI=145$
-$LK,"DOCT_INDENT",A="FL:::/Kernel/KernelA.HPP,913"$
+$LK,"FunSegFind",A="FL:::/Kernel/FunSeg.CPP.Z,54",BI=143$
+$LK,"Define",A="FL:::/Kernel/KDefine.CPP.Z,49",BI=144$
+$LK,"FAT32Fmt",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,60",BI=145$
+$LK,"SrvCmdLine",A="FL:::/Kernel/KTask.CPP.Z,374",BI=146$
+$LK,"HashTableNew",A="FL:::/Kernel/KHashB.CPP.Z,50",BI=147$
+$LK,"DOCT_INDENT",A="FL:::/Kernel/KernelA.HPP,914"$
 $LK,"_ARG",A="FL:::/Kernel/KMathA.CPP.Z,366"$
-$LK,"COLORROP_NO_ROP0_MASK",A="FL:::/Kernel/KernelA.HPP,2987"$
+$LK,"COLORROP_NO_ROP0_MASK",A="FL:::/Kernel/KernelA.HPP,2988"$
 $LK,"CDualBuf",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,109"$
-$LK,"TaskText",A="FL:::/Kernel/SrvCmd.CPP.Z,75",BI=146$
-$LK,"COLORROP_BITS",A="FL:::/Kernel/KernelA.HPP,2988"$
-$LK,"BROWN",A="FL:::/Kernel/KernelA.HPP,2963"$
-$LK,"Da",A="FL:::/Kernel/KDbg.CPP.Z,209",BI=147$
-$LK,"SUF_REM_TRAILING",A="FL:::/Kernel/KernelA.HPP,3794"$
-$LK,"Cd",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,9",BI=148$
+$LK,"TaskText",A="FL:::/Kernel/SrvCmd.CPP.Z,75",BI=148$
+$LK,"COLORROP_BITS",A="FL:::/Kernel/KernelA.HPP,2989"$
+$LK,"BROWN",A="FL:::/Kernel/KernelA.HPP,2964"$
+$LK,"Da",A="FL:::/Kernel/KDbg.CPP.Z,209",BI=149$
+$LK,"SUF_REM_TRAILING",A="FL:::/Kernel/KernelA.HPP,3795"$
+$LK,"Cd",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,9",BI=150$
 $LK,"Ceil",A="FL:::/Kernel/KernelB.HPP,123"$
 $LK,"DOCEF_SKIP_IN_FORM",A="FL:::/Kernel/KernelA.HPP,1020"$
 $LK,"CCF_DONT_FREE_BUF",A="FL:::/Kernel/KernelA.HPP,2131"$
 $LK,"IET_ZEROED_CODE_HEAP",A="FL:::/Kernel/KernelA.HPP,412"$
-$LK,"SrcEdLink",A="FL:::/Kernel/FunSeg.CPP.Z,278",BI=149$
-$LK,"GetRBP",A="FL:::/Kernel/KernelB.HPP,241"$
-$LK,"GREEN",A="FL:::/Kernel/KernelA.HPP,2959"$
+$LK,"SrcEdLink",A="FL:::/Kernel/FunSeg.CPP.Z,278",BI=151$
+$LK,"GetRBP",A="FL:::/Kernel/KernelB.HPP,242"$
+$LK,"GREEN",A="FL:::/Kernel/KernelA.HPP,2960"$
 $LK,"RECALCF_TO_HTML",A="FL:::/Kernel/KernelA.HPP,1352"$
 $LK,"ì",A="FL:::/Kernel/KernelA.HPP,48"$
 $LK,"ON",A="FL:::/Kernel/KernelA.HPP,21"$
@@ -670,10 +676,10 @@ $LK,"ARGT_XMM0",A="FL:::/Kernel/KernelA.HPP,1946"$
 $LK,"_TASK_END_NOW",A="FL:::/Kernel/Sched.CPP.Z,151"$
 $LK,"HTT_INVALID",A="FL:::/Kernel/KernelA.HPP,681"$
 $LK,"_REP_OUT_U8",A="FL:::/Kernel/KUtils.CPP.Z,308"$
-$LK,"GetRAX",A="FL:::/Kernel/KernelB.HPP,240"$
+$LK,"GetRAX",A="FL:::/Kernel/KernelB.HPP,241"$
 $LK,"sys_boot_src",A="FL:::/Kernel/KernelB.HPP,40"$
-$LK,"SCF_DELETE",A="FL:::/Kernel/KernelA.HPP,3550"$
-$LK,"SCf_DELETE",A="FL:::/Kernel/KernelA.HPP,3535"$
+$LK,"SCF_DELETE",A="FL:::/Kernel/KernelA.HPP,3551"$
+$LK,"SCf_DELETE",A="FL:::/Kernel/KernelA.HPP,3536"$
 $LK,"ARGT_M32N32",A="FL:::/Kernel/KernelA.HPP,1912"$
 $LK,"ARGT_M16N16",A="FL:::/Kernel/KernelA.HPP,1911"$
 $LK,"ARGT_M16N32",A="FL:::/Kernel/KernelA.HPP,1910"$
@@ -681,245 +687,246 @@ $LK,"SV_STI_LIKE",A="FL:::/Kernel/KernelA.HPP,1742"$
 $LK,"ICG_NO_CVT_MASK",A="FL:::/Kernel/KernelA.HPP,1621"$
 $LK,"RECALCG_MASK",A="FL:::/Kernel/KernelA.HPP,1348"$
 $LK,"HTF_PRIVATE",A="FL:::/Kernel/KernelA.HPP,701"$
-$LK,"ESTIMATED_MISC_ALLOCS",A="FL:::/Kernel/Mem/PageTables.CPP.Z,88"$
-$LK,"Pow10I64",A="FL:::/Kernel/KMathB.CPP.Z,26",BI=150$
+$LK,"ESTIMATED_MISC_ALLOCS",A="FL:::/Kernel/Mem/PageTables.CPP.Z,97"$
+$LK,"Pow10I64",A="FL:::/Kernel/KMathB.CPP.Z,26",BI=152$
 $LK,"IEF_STI_LIKE",A="FL:::/Kernel/KernelA.HPP,1736"$
 $LK,"HTf_PRIVATE",A="FL:::/Kernel/KernelA.HPP,671"$
-$LK,"Dm",A="FL:::/Kernel/KDbg.CPP.Z,204",BI=151$
+$LK,"Dm",A="FL:::/Kernel/KDbg.CPP.Z,204",BI=153$
 $LK,"CCF_EXE_BLK",A="FL:::/Kernel/KernelA.HPP,2143"$
 $LK,"CQueD3I32",A="FL:::/Kernel/KernelA.HPP,131"$
 $LK,"BDf_REMOVABLE",A="FL:::/Kernel/KernelA.HPP,2647"$
 $LK,"BDF_REMOVABLE",A="FL:::/Kernel/KernelA.HPP,2637"$
-$LK,"COLOR_INVALID",A="FL:::/Kernel/KernelA.HPP,2975"$
-$LK,"DftExt",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,208",BI=152$
+$LK,"COLOR_INVALID",A="FL:::/Kernel/KernelA.HPP,2976"$
+$LK,"DftExt",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,208",BI=154$
 $LK,"Bt",A="FL:::/Kernel/KernelB.HPP,14"$
 $LK,"OPTf_EXTERNS_TO_IMPORTS",A="FL:::/Kernel/KernelA.HPP,1541"$
-$LK,"HashFunSegFind",A="FL:::/Kernel/FunSeg.CPP.Z,10",BI=153$
-$LK,"Dr",A="FL:::/Kernel/KDbg.CPP.Z,328",BI=154$
-$LK,"CPUId",A="FL:::/Kernel/KernelB.HPP,251"$
-$LK,"FilesFind2",A="FL:::/Kernel/BlkDev/DskFind.CPP.Z,1",BI=155$
-$LK,"TaskKillDying",A="FL:::/Kernel/KTask.CPP.Z,498",BI=156$
+$LK,"HashFunSegFind",A="FL:::/Kernel/FunSeg.CPP.Z,10",BI=155$
+$LK,"Dr",A="FL:::/Kernel/KDbg.CPP.Z,328",BI=156$
+$LK,"CPUId",A="FL:::/Kernel/KernelB.HPP,252"$
+$LK,"FilesFind2",A="FL:::/Kernel/BlkDev/DskFind.CPP.Z,1",BI=157$
+$LK,"TaskKillDying",A="FL:::/Kernel/KTask.CPP.Z,498",BI=158$
 $LK,"scan_code_map",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,157"$
+$LK,"UncachedAliasAlloc",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,161",BI=159$
 $LK,"MSize2",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,385"$
 $LK,"MemSetU32",A="FL:::/Kernel/KernelB.HPP,176"$
 $LK,"MemSetU16",A="FL:::/Kernel/KernelB.HPP,174"$
-$LK,"DirTreeDel",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,36",BI=157$
-$LK,"Fs",A="FL:::/Kernel/KernelB.HPP,275"$
-$LK,"SCF_CAPS",A="FL:::/Kernel/KernelA.HPP,3544"$
-$LK,"SCf_CAPS",A="FL:::/Kernel/KernelA.HPP,3529"$
+$LK,"DirTreeDel",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,36",BI=160$
+$LK,"Fs",A="FL:::/Kernel/KernelB.HPP,276"$
+$LK,"SCF_CAPS",A="FL:::/Kernel/KernelA.HPP,3545"$
+$LK,"SCf_CAPS",A="FL:::/Kernel/KernelA.HPP,3530"$
 $LK,"SYS_SEMA_FAR_CALL32",A="FL:::/Kernel/KernelA.HPP,605"$
 $LK,"ACD_DEF_CHAR",A="FL:::/Kernel/KernelA.HPP,1517"$
-$LK,"Gs",A="FL:::/Kernel/KernelB.HPP,233"$
-$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart.CPP.Z,221"$
-$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HPP,3600"$
+$LK,"Gs",A="FL:::/Kernel/KernelB.HPP,234"$
+$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart32.CPP.Z,39"$
+$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HPP,3601"$
 $LK,"REGG_LOCAL_VARS",A="FL:::/Kernel/KernelA.HPP,1794"$
-$LK,"DrvModelNum",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,294",BI=158$
+$LK,"DrvModelNum",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,294",BI=161$
 $LK,"RepInU8",A="FL:::/Kernel/KernelB.HPP,86"$
-$LK,"MSG_FOCUS",A="FL:::/Kernel/KernelA.HPP,3237"$
-$LK,"IsSysDbg",A="FL:::/Kernel/KMisc.CPP.Z,233",BI=159$
-$LK,"CDbgGlbls",A="FL:::/Kernel/KernelA.HPP,3871"$
+$LK,"MSG_FOCUS",A="FL:::/Kernel/KernelA.HPP,3238"$
+$LK,"IsSysDbg",A="FL:::/Kernel/KMisc.CPP.Z,238",BI=162$
+$LK,"CDbgGlbls",A="FL:::/Kernel/KernelA.HPP,3872"$
 $LK,"_TEST_EXCEPT",A="FL:::/Kernel/KExcept.CPP.Z,4"$
 $LK,"_FSTCW",A="FL:::/Kernel/KMathA.CPP.Z,632"$
-$LK,"MSG_IP_R_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3244"$
-$LK,"ScanFlags",A="FL:::/Kernel/StrB.CPP.Z,123",BI=160$
+$LK,"MSG_IP_R_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3245"$
+$LK,"ScanFlags",A="FL:::/Kernel/StrB.CPP.Z,123",BI=163$
 $LK,"Ln",A="FL:::/Kernel/KernelB.HPP,134"$
 $LK,"INT_WAKE",A="FL:::/Kernel/KInts.CPP.Z,6"$
-$LK,"GetS",A="FL:::/Kernel/SerialDev/Message.CPP.Z,209",BI=161$
+$LK,"GetS",A="FL:::/Kernel/SerialDev/Message.CPP.Z,209",BI=164$
 $LK,"_MEMSET_U32",A="FL:::/Kernel/KUtils.CPP.Z,29"$
 $LK,"_MEMSET_U16",A="FL:::/Kernel/KUtils.CPP.Z,16"$
-$LK,"SYS_MP_CNT_LOCK",A="FL:::/Kernel/KStart.CPP.Z,231"$
+$LK,"SYS_MP_CNT_LOCK",A="FL:::/Kernel/KStart32.CPP.Z,49"$
 $LK,"SYS_COMPILE_TIME",A="FL::/Temp.TXT.Z,1"$
-$LK,"GetTSC",A="FL:::/Kernel/KernelB.HPP,279"$
-$LK,"BptR",A="FL:::/Kernel/KDbg.CPP.Z,389",BI=162$
-$LK,"DOCT_MARKER",A="FL:::/Kernel/KernelA.HPP,904"$
-$LK,"BptS",A="FL:::/Kernel/KDbg.CPP.Z,368",BI=163$
+$LK,"GetTSC",A="FL:::/Kernel/KernelB.HPP,280"$
+$LK,"BptR",A="FL:::/Kernel/KDbg.CPP.Z,389",BI=165$
+$LK,"DOCT_MARKER",A="FL:::/Kernel/KernelA.HPP,906"$
+$LK,"BptS",A="FL:::/Kernel/KDbg.CPP.Z,368",BI=166$
 $LK,"_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.CPP.Z,158"$
 $LK,"_MHEAP_CTRL",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,368"$
-$LK,"ATAMount",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,239",BI=164$
-$LK,"FifoI64Peek",A="FL:::/Kernel/KDataTypes.CPP.Z,290",BI=165$
+$LK,"ATAMount",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,239",BI=167$
+$LK,"FifoI64Peek",A="FL:::/Kernel/KDataTypes.CPP.Z,290",BI=168$
 $LK,"_EXP",A="FL:::/Kernel/KMathA.CPP.Z,558"$
 $LK,"SYS_SEMA_SYS_TIMER",A="FL:::/Kernel/KernelA.HPP,595"$
 $LK,"IET_END",A="FL:::/Kernel/KernelA.HPP,392"$
-$LK,"KbdHandler",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,441",BI=166$
-$LK,"GSF_WITH_NEW_LINE",A="FL:::/Kernel/KernelA.HPP,3788"$
+$LK,"KbdHandler",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,441",BI=169$
+$LK,"GSF_WITH_NEW_LINE",A="FL:::/Kernel/KernelA.HPP,3789"$
 $LK,"SYS_HASH_FIND1",A="FL:::/Kernel/KHashA.CPP.Z,81"$
-$LK,"GetRSP",A="FL:::/Kernel/KernelB.HPP,243"$
+$LK,"GetRSP",A="FL:::/Kernel/KernelB.HPP,244"$
 $LK,"_D3_DIST",A="FL:::/Kernel/KMathA.CPP.Z,39"$
-$LK,"SPF_TRUNCATE",A="FL:::/Kernel/KernelA.HPP,3920"$
-$LK,"ScanKey",A="FL:::/Kernel/SerialDev/Message.CPP.Z,123",BI=167$
-$LK,"MouseDriverInstall",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,217",BI=168$
+$LK,"SPF_TRUNCATE",A="FL:::/Kernel/KernelA.HPP,3921"$
+$LK,"ScanKey",A="FL:::/Kernel/SerialDev/Message.CPP.Z,123",BI=170$
+$LK,"MouseDriverInstall",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,217",BI=171$
 $LK,"mouse_last",A="FL:::/Kernel/KGlbls.CPP.Z,27"$
 $LK,"D3DistSqr",A="FL:::/Kernel/KernelB.HPP,150"$
-$LK,"_RDI",A="FL:::/Kernel/KernelA.HPP,3428"$
+$LK,"_RDI",A="FL:::/Kernel/KernelA.HPP,3429"$
 $LK,"SV_R_REG",A="FL:::/Kernel/KernelA.HPP,1740"$
-$LK,"ATARepExitAllApplications",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,120",BI=169$
-$LK,"CeilI64",A="FL:::/Kernel/KMathB.CPP.Z,62",BI=170$
-$LK,"_RBP",A="FL:::/Kernel/KernelA.HPP,3429"$
+$LK,"ATARepExitAllApplications",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,120",BI=172$
+$LK,"CeilI64",A="FL:::/Kernel/KMathB.CPP.Z,62",BI=173$
+$LK,"_RBP",A="FL:::/Kernel/KernelA.HPP,3430"$
 $LK,"CCacheBlk",A="FL:::/Kernel/KernelA.HPP,2746"$
 $LK,"OPTf_WARN_DUP_TYPES",A="FL:::/Kernel/KernelA.HPP,1540"$
-$LK,"ATAProbe",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,373",BI=171$
+$LK,"ATAProbe",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,373",BI=174$
 $LK,"_LXCHG_U16",A="FL:::/Kernel/KUtils.CPP.Z,235"$
 $LK,"_LXCHG_U32",A="FL:::/Kernel/KUtils.CPP.Z,226"$
-$LK,"SYS_PROGRESS1",A="FL:::/Kernel/KStart.CPP.Z,213"$
-$LK,"DOCT_FOOTER",A="FL:::/Kernel/KernelA.HPP,912"$
+$LK,"SYS_PROGRESS1",A="FL:::/Kernel/KStart32.CPP.Z,31"$
+$LK,"DOCT_FOOTER",A="FL:::/Kernel/KernelA.HPP,913"$
 $LK,"MEM_NUM_E820_ENTRIES",A="FL:::/Kernel/KernelA.HPP,356"$
-$LK,"MPAPICInit",A="FL:::/Kernel/MultiProc.CPP.Z,171",BI=172$
-$LK,"SYS_PROGRESS2",A="FL:::/Kernel/KStart.CPP.Z,216"$
+$LK,"MPAPICInit",A="FL:::/Kernel/MultiProc.CPP.Z,171",BI=175$
+$LK,"SYS_PROGRESS2",A="FL:::/Kernel/KStart32.CPP.Z,34"$
 $LK,"DOCEf_SKIP",A="FL:::/Kernel/KernelA.HPP,1104"$
 $LK,"DOCEF_SKIP",A="FL:::/Kernel/KernelA.HPP,1018"$
-$LK,"SYS_PROGRESS3",A="FL:::/Kernel/KStart.CPP.Z,219"$
-$LK,"SPF_COMMA",A="FL:::/Kernel/KernelA.HPP,3921"$
+$LK,"SYS_PROGRESS3",A="FL:::/Kernel/KStart32.CPP.Z,37"$
+$LK,"SPF_COMMA",A="FL:::/Kernel/KernelA.HPP,3922"$
 $LK,"CCF_DONT_MAKE_RES",A="FL:::/Kernel/KernelA.HPP,2166"$
-$LK,"CSrvCtrl",A="FL:::/Kernel/KernelA.HPP,3215"$
-$LK,"DirNew",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,1",BI=173$
-$LK,"SYS_PROGRESS4",A="FL:::/Kernel/KStart.CPP.Z,222"$
-$LK,"_RAX",A="FL:::/Kernel/KernelA.HPP,3423"$
-$LK,"FAT32DirNew",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,576",BI=174$
+$LK,"CSrvCtrl",A="FL:::/Kernel/KernelA.HPP,3216"$
+$LK,"DirNew",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,1",BI=176$
+$LK,"SYS_PROGRESS4",A="FL:::/Kernel/KStart32.CPP.Z,40"$
+$LK,"_RAX",A="FL:::/Kernel/KernelA.HPP,3424"$
+$LK,"FAT32DirNew",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,576",BI=177$
 $LK,"HTf_RESOLVED",A="FL:::/Kernel/KernelA.HPP,677"$
-$LK,"LinkedLstDel",A="FL:::/Kernel/KDataTypes.CPP.Z,1",BI=175$
-$LK,"Help",A="FL:::/Kernel/StrB.CPP.Z,115",BI=176$
+$LK,"LinkedLstDel",A="FL:::/Kernel/KDataTypes.CPP.Z,1",BI=178$
+$LK,"Help",A="FL:::/Kernel/StrB.CPP.Z,115",BI=179$
 $LK,"Log2",A="FL:::/Kernel/KernelB.HPP,136"$
-$LK,"_RBX",A="FL:::/Kernel/KernelA.HPP,3424"$
-$LK,"DOCT_HEX_ED",A="FL:::/Kernel/KernelA.HPP,934"$
-$LK,"DOCT_LINK",A="FL:::/Kernel/KernelA.HPP,927"$
+$LK,"_RBX",A="FL:::/Kernel/KernelA.HPP,3425"$
+$LK,"DOCT_HEX_ED",A="FL:::/Kernel/KernelA.HPP,935"$
+$LK,"DOCT_LINK",A="FL:::/Kernel/KernelA.HPP,928"$
 $LK,"_D3_COPY",A="FL:::/Kernel/KMathA.CPP.Z,212"$
 $LK,"PUT_STR",A="FL:::/Kernel/StrA.CPP.Z,58"$
 $LK,"_RET",A="FL:::/Kernel/KUtils.CPP.Z,456"$
-$LK,"_RCX",A="FL:::/Kernel/KernelA.HPP,3425"$
-$LK,"BIOSTotalMem",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,164",BI=177$
-$LK,"_RDX",A="FL:::/Kernel/KernelA.HPP,3426"$
+$LK,"_RCX",A="FL:::/Kernel/KernelA.HPP,3426"$
+$LK,"BIOSTotalMem",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,174",BI=180$
+$LK,"_RDX",A="FL:::/Kernel/KernelA.HPP,3427"$
 $LK,"RLF_FULL_HEAP",A="FL:::/Kernel/KernelA.HPP,463"$
 $LK,"RLf_FULL_HEAP",A="FL:::/Kernel/KernelA.HPP,444"$
-$LK,"ScanMsg",A="FL:::/Kernel/SerialDev/Message.CPP.Z,37",BI=178$
-$LK,"SYS_PROGRESS4_DESC",A="FL:::/Kernel/KStart.CPP.Z,224"$
+$LK,"ScanMsg",A="FL:::/Kernel/SerialDev/Message.CPP.Z,37",BI=181$
+$LK,"SYS_PROGRESS4_DESC",A="FL:::/Kernel/KStart32.CPP.Z,42"$
 $LK,"__FILE__",A="FL:::/Kernel/KernelA.HPP,2031"$
 $LK,"CDate",A="FL:::/Kernel/KernelA.HPP,185"$
-$LK,"CLFlush",A="FL:::/Kernel/KernelB.HPP,268"$
-$LK,"SYS_HEAP_DBG_FLAG",A="FL:::/Kernel/KStart.CPP.Z,204"$
-$LK,"_RIP",A="FL:::/Kernel/KernelA.HPP,3431"$
+$LK,"CLFlush",A="FL:::/Kernel/KernelB.HPP,269"$
+$LK,"SYS_HEAP_DBG_FLAG",A="FL:::/Kernel/KStart32.CPP.Z,21"$
+$LK,"_RIP",A="FL:::/Kernel/KernelA.HPP,3432"$
 $LK,"IEF_REX_ONLY_R8_R15",A="FL:::/Kernel/KernelA.HPP,1734"$
 $LK,"MDF_IMM",A="FL:::/Kernel/KernelA.HPP,1581"$
 $LK,"DOCSS_SINGLE_QUOTE",A="FL:::/Kernel/KernelA.HPP,1129"$
-$LK,"KBD_PORT",A="FL:::/Kernel/KernelA.HPP,2999"$
-$LK,"NUM_COLORS",A="FL:::/Kernel/KernelA.HPP,2974"$
+$LK,"KBD_PORT",A="FL:::/Kernel/KernelA.HPP,3000"$
+$LK,"NUM_COLORS",A="FL:::/Kernel/KernelA.HPP,2975"$
 $LK,"ac",A="FL:::/Kernel/KGlbls.CPP.Z,18"$
-$LK,"C:/Doc/TimeCycles.TXT.Z",A="FL:::/Kernel/KernelB.HPP,279"$
+$LK,"C:/Doc/TimeCycles.TXT.Z",A="FL:::/Kernel/KernelB.HPP,280"$
 $LK,"_FSTSW",A="FL:::/Kernel/KMathA.CPP.Z,641"$
 $LK,"ARGT_IMM32",A="FL:::/Kernel/KernelA.HPP,1886"$
 $LK,"ARGT_IMM16",A="FL:::/Kernel/KernelA.HPP,1885"$
-$LK,"MouseSpeedSet",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,109",BI=179$
-$LK,"Name2ParentDirCluster",A="FL:::/Kernel/BlkDev/DskStrB.CPP.Z,54",BI=180$
+$LK,"MouseSpeedSet",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,109",BI=182$
+$LK,"Name2ParentDirCluster",A="FL:::/Kernel/BlkDev/DskStrB.CPP.Z,54",BI=183$
 $LK,"Free",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,383"$
 $LK,"DOCEf_AUX_STR",A="FL:::/Kernel/KernelA.HPP,1055"$
 $LK,"DOCEF_AUX_STR",A="FL:::/Kernel/KernelA.HPP,967"$
-$LK,"Char2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,201",BI=181$
-$LK,"Mem512Free",A="FL:::/Kernel/Mem/Mem512.CPP.Z,83",BI=182$
+$LK,"Char2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,201",BI=184$
+$LK,"Mem512Free",A="FL:::/Kernel/Mem/Mem512.CPP.Z,84",BI=185$
 $LK,"blkdev",A="FL:::/Kernel/KGlbls.CPP.Z,19"$
 $LK,"TK_NUM_TK",A="FL:::/Kernel/KernelA.HPP,2112"$
 $LK,"CWinMgrGlbls",A="FL:::/Kernel/KernelA.HPP,1469"$
 $LK,"DOCEf_TREE",A="FL:::/Kernel/KernelA.HPP,1102"$
 $LK,"DOCEF_TREE",A="FL:::/Kernel/KernelA.HPP,1016"$
-$LK,"MouseUpdatePre",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,119",BI=183$
-$LK,"ISO1FileFind",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,70",BI=184$
-$LK,"TASK_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,3304"$
-$LK,"SysDefinesLoad",A="FL:::/Kernel/KDefine.CPP.Z,97",BI=185$
-$LK,"Mem512TaskAlloc",A="FL:::/Kernel/Mem/Mem512.CPP.Z,114",BI=186$
-$LK,"MEM_MAPPED_SPACE",A="FL:::/Kernel/KernelA.HPP,3466"$
+$LK,"MouseUpdatePre",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,119",BI=186$
+$LK,"ISO1FileFind",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,70",BI=187$
+$LK,"TASK_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,3305"$
+$LK,"SysDefinesLoad",A="FL:::/Kernel/KDefine.CPP.Z,97",BI=188$
+$LK,"Mem512TaskAlloc",A="FL:::/Kernel/Mem/Mem512.CPP.Z,115",BI=189$
+$LK,"MEM_MAPPED_SPACE",A="FL:::/Kernel/KernelA.HPP,3467"$
 $LK,"D3Norm",A="FL:::/Kernel/KernelB.HPP,157"$
 $LK,"_POW",A="FL:::/Kernel/KMathA.CPP.Z,515"$
-$LK,"MSG_KEY_DOWN",A="FL:::/Kernel/KernelA.HPP,3226"$
+$LK,"MSG_KEY_DOWN",A="FL:::/Kernel/KernelA.HPP,3227"$
 $LK,"ARGT_IMM64",A="FL:::/Kernel/KernelA.HPP,1887"$
 $LK,"RTG_MASK",A="FL:::/Kernel/KernelA.HPP,1570"$
 $LK,"TASK_HASH_TABLE_SIZE",A="FL:::/Kernel/KernelA.HPP,2889"$
-$LK,"DOCT_BUTTON",A="FL:::/Kernel/KernelA.HPP,928"$
+$LK,"DOCT_BUTTON",A="FL:::/Kernel/KernelA.HPP,929"$
 $LK,"drv_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,310"$
 $LK,"PUT_HEX_U8",A="FL:::/Kernel/StrA.CPP.Z,44"$
-$LK,"_RSI",A="FL:::/Kernel/KernelA.HPP,3427"$
-$LK,"CTRLF_CAPTURE_RIGHT_IP",A="FL:::/Kernel/KernelA.HPP,3094"$
-$LK,"CPUStructInit",A="FL:::/Kernel/MultiProc.CPP.Z,116",BI=187$
+$LK,"_RSI",A="FL:::/Kernel/KernelA.HPP,3428"$
+$LK,"CTRLF_CAPTURE_RIGHT_IP",A="FL:::/Kernel/KernelA.HPP,3095"$
+$LK,"CPUStructInit",A="FL:::/Kernel/MultiProc.CPP.Z,116",BI=190$
 $LK,"WIf_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1456"$
 $LK,"WIF_FOCUS_TASK_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1431"$
 $LK,"CIntermediateCode",A="FL:::/Kernel/KernelA.HPP,1655"$
 $LK,"MDF_REG",A="FL:::/Kernel/KernelA.HPP,1582"$
 $LK,"DOC_COLOR_ANCHOR",A="FL:::/Kernel/KernelA.HPP,1138"$
-$LK,"Str2ColorU32",A="FL:::/Kernel/KDefine.CPP.Z,202",BI=188$
-$LK,"Str2ColorU16",A="FL:::/Kernel/KDefine.CPP.Z,158",BI=189$
-$LK,"LinkedLstCnt",A="FL:::/Kernel/KDataTypes.CPP.Z,21",BI=190$
-$LK,"Auto",A="FL:::/Kernel/SrvCmd.CPP.Z,483",BI=191$
-$LK,"CTRLT_VIEWING_ANGLES",A="FL:::/Kernel/KernelA.HPP,3089"$
+$LK,"Str2ColorU32",A="FL:::/Kernel/KDefine.CPP.Z,202",BI=191$
+$LK,"Str2ColorU16",A="FL:::/Kernel/KDefine.CPP.Z,158",BI=192$
+$LK,"LinkedLstCnt",A="FL:::/Kernel/KDataTypes.CPP.Z,21",BI=193$
+$LK,"Auto",A="FL:::/Kernel/SrvCmd.CPP.Z,483",BI=194$
+$LK,"CTRLT_VIEWING_ANGLES",A="FL:::/Kernel/KernelA.HPP,3090"$
 $LK,"DOCEf_QUIT",A="FL:::/Kernel/KernelA.HPP,1088"$
 $LK,"DOCEF_QUIT",A="FL:::/Kernel/KernelA.HPP,1000"$
-$LK,"Tabs2Spaces",A="FL:::/Kernel/StrB.CPP.Z,1",BI=192$
+$LK,"Tabs2Spaces",A="FL:::/Kernel/StrB.CPP.Z,1",BI=195$
 $LK,"MaxI64",A="FL:::/Kernel/KernelB.HPP,99"$
-$LK,"SYS_GDT_PTR",A="FL:::/Kernel/KStart.CPP.Z,36"$
-$LK,"_RSP",A="FL:::/Kernel/KernelA.HPP,3430"$
-$LK,"DOCT_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HPP,938"$
-$LK,"FSetCluster",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,99",BI=193$
-$LK,"WinDerivedValsUpdate",A="FL:::/Kernel/Display.CPP.Z,93",BI=194$
+$LK,"SYS_GDT_PTR",A="FL:::/Kernel/KStart16.CPP.Z,34"$
+$LK,"_RSP",A="FL:::/Kernel/KernelA.HPP,3431"$
+$LK,"DOCT_INS_BIN_SIZE",A="FL:::/Kernel/KernelA.HPP,939"$
+$LK,"FSetCluster",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,99",BI=196$
+$LK,"WinDerivedValsUpdate",A="FL:::/Kernel/Display.CPP.Z,93",BI=197$
 $LK,"fp_update_ctrls",A="FL:::/Kernel/KGlbls.CPP.Z,32"$
 $LK,"DSK_CACHE_HASH_SIZE",A="FL:::/Kernel/KernelA.HPP,2744"$
 $LK,"RS_ATTR_VOL_ID",A="FL:::/Kernel/KernelA.HPP,2529"$
 $LK,"DOCf_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,1323"$
 $LK,"DOCF_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,1286"$
-$LK,"DOCT_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,920"$
-$LK,"IntDivZero",A="FL:::/Kernel/KInts.CPP.Z,143",BI=195$
+$LK,"DOCT_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,923"$
+$LK,"IntDivZero",A="FL:::/Kernel/KInts.CPP.Z,150",BI=198$
 $LK,"_SQR",A="FL:::/Kernel/KMathA.CPP.Z,337"$
-$LK,"DISPLAYf_SILENT",A="FL:::/Kernel/KernelA.HPP,3299"$
+$LK,"DISPLAYf_SILENT",A="FL:::/Kernel/KernelA.HPP,3300"$
 $LK,"MDF_SIB",A="FL:::/Kernel/KernelA.HPP,1584"$
 $LK,"REGT_R32",A="FL:::/Kernel/KernelA.HPP,741"$
 $LK,"REGT_R16",A="FL:::/Kernel/KernelA.HPP,740"$
 $LK,"IEF_NOT_IN_64_BIT",A="FL:::/Kernel/KernelA.HPP,1732"$
-$LK,"RedSeaFileFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,155",BI=196$
+$LK,"RedSeaFileFind",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,155",BI=199$
 $LK,"SYS_PCIBIOS_SERVICE_DIR",A="FL:::/Kernel/PCIBIOS.CPP.Z,4"$
-$LK,"tS",A="FL:::/Kernel/KMisc.CPP.Z,117",BI=197$
+$LK,"tS",A="FL:::/Kernel/KMisc.CPP.Z,122",BI=200$
 $LK,"LBEqu",A="FL:::/Kernel/KernelB.HPP,34"$
 $LK,"ICF_RES_NOT_USED",A="FL:::/Kernel/KernelA.HPP,1600"$
 $LK,"DOCEt_SEL",A="FL:::/Kernel/KernelA.HPP,955"$
-$LK,"ArcDetermineCompressionType",A="FL:::/Kernel/Compress.CPP.Z,102",BI=198$
+$LK,"ArcDetermineCompressionType",A="FL:::/Kernel/Compress.CPP.Z,102",BI=201$
 $LK,"SYS_SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HPP,601"$
-$LK,"IntInit1",A="FL:::/Kernel/KInts.CPP.Z,173",BI=199$
-$LK,"CH_CURSOR",A="FL:::/Kernel/KernelA.HPP,3512"$
-$LK,"IntInit2",A="FL:::/Kernel/KInts.CPP.Z,188",BI=200$
-$LK,"DOCT_CURSOR",A="FL:::/Kernel/KernelA.HPP,903"$
-$LK,"GetKey",A="FL:::/Kernel/SerialDev/Message.CPP.Z,142",BI=201$
-$LK,"ROP_MONO",A="FL:::/Kernel/KernelA.HPP,2944"$
+$LK,"IntInit1",A="FL:::/Kernel/KInts.CPP.Z,180",BI=202$
+$LK,"CH_CURSOR",A="FL:::/Kernel/KernelA.HPP,3513"$
+$LK,"IntInit2",A="FL:::/Kernel/KInts.CPP.Z,195",BI=203$
+$LK,"DOCT_CURSOR",A="FL:::/Kernel/KernelA.HPP,905"$
+$LK,"GetKey",A="FL:::/Kernel/SerialDev/Message.CPP.Z,142",BI=204$
+$LK,"ROP_MONO",A="FL:::/Kernel/KernelA.HPP,2945"$
 $LK,"CFAT32DirEntryLong",A="FL:::/Kernel/KernelA.HPP,2396"$
-$LK,"Kill",A="FL:::/Kernel/KTask.CPP.Z,28",BI=202$
+$LK,"Kill",A="FL:::/Kernel/KTask.CPP.Z,28",BI=205$
 $LK,"RS_ATTR_FIXED",A="FL:::/Kernel/KernelA.HPP,2539"$
 $LK,"TK_IFDEF",A="FL:::/Kernel/KernelA.HPP,2101"$
 $LK,"REGT_R64",A="FL:::/Kernel/KernelA.HPP,742"$
-$LK,"SingleUser",A="FL:::/Kernel/KMisc.CPP.Z,250",BI=203$
-$LK,"Date2Struct",A="FL:::/Kernel/KDate.CPP.Z,39",BI=204$
+$LK,"SingleUser",A="FL:::/Kernel/KMisc.CPP.Z,255",BI=206$
+$LK,"Date2Struct",A="FL:::/Kernel/KDate.CPP.Z,39",BI=207$
 $LK,"CFile",A="FL:::/Kernel/KernelA.HPP,2787"$
-$LK,"Fault2",A="FL:::/Kernel/KDbg.CPP.Z,592",BI=205$
-$LK,"Load",A="FL:::/Kernel/KLoad.CPP.Z,181",BI=206$
+$LK,"Fault2",A="FL:::/Kernel/KDbg.CPP.Z,592",BI=208$
+$LK,"Load",A="FL:::/Kernel/KLoad.CPP.Z,181",BI=209$
 $LK,"ip",A="FL:::/Kernel/KGlbls.CPP.Z,24"$
 $LK,"CFreeLst",A="FL:::/Kernel/KernelA.HPP,2709"$
 $LK,"DOCEF_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HPP,1005"$
 $LK,"CHash",A="FL:::/Kernel/KernelA.HPP,623"$
-$LK,"RedSeaFreeClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,250",BI=207$
-$LK,"Fault3",A="FL:::/Kernel/KDbg.CPP.Z,561",BI=208$
-$LK,"CompressBuf",A="FL:::/Kernel/Compress.CPP.Z,281",BI=209$
+$LK,"RedSeaFreeClusters",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,250",BI=210$
+$LK,"Fault3",A="FL:::/Kernel/KDbg.CPP.Z,561",BI=211$
+$LK,"CompressBuf",A="FL:::/Kernel/Compress.CPP.Z,281",BI=212$
 $LK,"chars_bmp_hex_numeric",A="FL:::/Kernel/StrA.CPP.Z,353"$
 $LK,"CCF_NOT_CONST",A="FL:::/Kernel/KernelA.HPP,2140"$
-$LK,"CeilU64",A="FL:::/Kernel/KMathB.CPP.Z,41",BI=210$
+$LK,"CeilU64",A="FL:::/Kernel/KMathB.CPP.Z,41",BI=213$
 $LK,"BPlf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2892"$
 $LK,"BDlf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2658"$
 $LK,"TK_OR_EQU",A="FL:::/Kernel/KernelA.HPP,2096"$
-$LK,"sys_neg_pows_lst",A="FL:::/Kernel/StrPrint.CPP.Z,201"$
-$LK,"sys_pos_pows_lst",A="FL:::/Kernel/StrPrint.CPP.Z,200"$
-$LK,"MStrPrint",A="FL:::/Kernel/StrPrint.CPP.Z,896",BI=211$
+$LK,"sys_neg_pows_lst",A="FL:::/Kernel/StrPrint.CPP.Z,203"$
+$LK,"sys_pos_pows_lst",A="FL:::/Kernel/StrPrint.CPP.Z,202"$
+$LK,"MStrPrint",A="FL:::/Kernel/StrPrint.CPP.Z,898",BI=214$
 $LK,"DVlf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2683"$
-$LK,"SrcFileName",A="FL:::/Kernel/FunSeg.CPP.Z,239",BI=212$
-$LK,"RawD",A="FL:::/Kernel/KDbg.CPP.Z,234",BI=213$
-$LK,"IsSingleUser",A="FL:::/Kernel/KMisc.CPP.Z,255",BI=214$
+$LK,"SrcFileName",A="FL:::/Kernel/FunSeg.CPP.Z,239",BI=215$
+$LK,"RawD",A="FL:::/Kernel/KDbg.CPP.Z,234",BI=216$
+$LK,"IsSingleUser",A="FL:::/Kernel/KMisc.CPP.Z,260",BI=217$
 $LK,"adam_task",A="FL:::/Kernel/KGlbls.CPP.Z,8"$
 $LK,"_POW10",A="FL:::/Kernel/KMathA.CPP.Z,524"$
-$LK,"SVCRf_LOCKED",A="FL:::/Kernel/KernelA.HPP,3214"$
+$LK,"SVCRf_LOCKED",A="FL:::/Kernel/KernelA.HPP,3215"$
 $LK,"BDF_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,2641"$
-$LK,"DOCT_CURSOR_MOVEMENT",A="FL:::/Kernel/KernelA.HPP,925"$
-$LK,"SCF_CTRL",A="FL:::/Kernel/KernelA.HPP,3542"$
-$LK,"SCf_CTRL",A="FL:::/Kernel/KernelA.HPP,3527"$
+$LK,"DOCT_CURSOR_MOVEMENT",A="FL:::/Kernel/KernelA.HPP,926"$
+$LK,"SCF_CTRL",A="FL:::/Kernel/KernelA.HPP,3543"$
+$LK,"SCf_CTRL",A="FL:::/Kernel/KernelA.HPP,3528"$
 $LK,"TK_ENDIF",A="FL:::/Kernel/KernelA.HPP,2105"$
 $LK,"RT_UF32",A="FL:::/Kernel/KernelA.HPP,1565"$
 $LK,"CCF_NO_REG_OPT",A="FL:::/Kernel/KernelA.HPP,2141"$
@@ -931,36 +938,33 @@ $LK,"RLf_DOC",A="FL:::/Kernel/KernelA.HPP,450"$
 $LK,"pi",A="FL:::/Kernel/KernelA.HPP,49"$
 $LK,"ATTRF_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,892"$
 $LK,"ATTRf_UNDERLINE",A="FL:::/Kernel/KernelA.HPP,897"$
-$LK,"KbdMouseVarsInit",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,271",BI=215$
+$LK,"KbdMouseVarsInit",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,271",BI=218$
 $LK,"DOCF_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HPP,1275"$
 $LK,"SYS_SEMA_UPDATE_WIN_Z_BUF",A="FL:::/Kernel/KernelA.HPP,608"$
-$LK,"Exit",A="FL:::/Kernel/KTask.CPP.Z,1",BI=216$
-$LK,"TASKf_BREAK_TO_SHIFT_ESC",A="FL:::/Kernel/KernelA.HPP,3292"$
+$LK,"Exit",A="FL:::/Kernel/KTask.CPP.Z,1",BI=219$
+$LK,"TASKf_BREAK_TO_SHIFT_ESC",A="FL:::/Kernel/KernelA.HPP,3293"$
 $LK,"HTT_KEYWORD",A="FL:::/Kernel/KernelA.HPP,691"$
-$LK,"CopySingleZ",A="FL:::/Kernel/BlkDev/DskCopy.CPP.Z,1",BI=217$
-$LK,"DCF_NO_TRANSPARENTS",A="FL:::/Kernel/KernelA.HPP,3628"$
+$LK,"CopySingleZ",A="FL:::/Kernel/BlkDev/DskCopy.CPP.Z,1",BI=220$
+$LK,"DCF_NO_TRANSPARENTS",A="FL:::/Kernel/KernelA.HPP,3629"$
 $LK,"HTt_KEYWORD",A="FL:::/Kernel/KernelA.HPP,661"$
 $LK,"SYS_SEMA_IN_DEBUGGER",A="FL:::/Kernel/KernelA.HPP,597"$
 $LK,"RT_UF64",A="FL:::/Kernel/KernelA.HPP,1567"$
 $LK,"DOCf_BWD_MOVEMENT",A="FL:::/Kernel/KernelA.HPP,1311"$
-$LK,"GetMsg",A="FL:::/Kernel/SerialDev/Message.CPP.Z,95",BI=218$
-$LK,"CMPCrash",A="FL:::/Kernel/KernelA.HPP,3862"$
-$LK,"ROPBF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HPP,2936"$
-$LK,"MEM_NUM_PML2",A="FL:::/Kernel/KernelA.HPP,3467"$
+$LK,"GetMsg",A="FL:::/Kernel/SerialDev/Message.CPP.Z,95",BI=221$
+$LK,"CMPCrash",A="FL:::/Kernel/KernelA.HPP,3863"$
+$LK,"ROPBF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HPP,2937"$
 $LK,"ICF_SHORT_JMP",A="FL:::/Kernel/KernelA.HPP,1603"$
 $LK,"IA32_FS_BASE",A="FL:::/Kernel/KernelA.HPP,522"$
-$LK,"Rand",A="FL:::/Kernel/KMathB.CPP.Z,122",BI=219$
-$LK,"MEM_NUM_PML3",A="FL:::/Kernel/KernelA.HPP,3468"$
+$LK,"Rand",A="FL:::/Kernel/KMathB.CPP.Z,122",BI=222$
 $LK,"FAT32_ENTRIES_BITS",A="FL:::/Kernel/KernelA.HPP,2409"$
 $LK,"TK_IDENT",A="FL:::/Kernel/KernelA.HPP,2073"$
-$LK,"ArcCompressBuf",A="FL:::/Kernel/Compress.CPP.Z,110",BI=220$
-$LK,"MEM_NUM_PML4",A="FL:::/Kernel/KernelA.HPP,3469"$
+$LK,"ArcCompressBuf",A="FL:::/Kernel/Compress.CPP.Z,110",BI=223$
 $LK,"MDG_REG_DISP_SIB_RIP",A="FL:::/Kernel/KernelA.HPP,1589"$
-$LK,"ToFileLine",A="FL:::/Kernel/EdLite.CPP.Z,303",BI=221$
+$LK,"ToFileLine",A="FL:::/Kernel/EdLite.CPP.Z,303",BI=224$
 $LK,"D3Unit",A="FL:::/Kernel/KernelB.HPP,161"$
-$LK,"CTRLT_WIN_HSCROLL",A="FL:::/Kernel/KernelA.HPP,3087"$
+$LK,"CTRLT_WIN_HSCROLL",A="FL:::/Kernel/KernelA.HPP,3088"$
 $LK,"TK_IFAOT",A="FL:::/Kernel/KernelA.HPP,2103"$
-$LK,"IsDotC",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,31",BI=222$
+$LK,"IsDotC",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,31",BI=225$
 $LK,"BDf_LAST_WAS_WRITE",A="FL:::/Kernel/KernelA.HPP,2651"$
 $LK,"TK_GREATER_EQU",A="FL:::/Kernel/KernelA.HPP,2087"$
 $LK,"CICArg",A="FL:::/Kernel/KernelA.HPP,1632"$
@@ -968,41 +972,41 @@ $LK,"MDF_STK",A="FL:::/Kernel/KernelA.HPP,1580"$
 $LK,"DOCEf_CENTER_X",A="FL:::/Kernel/KernelA.HPP,1076"$
 $LK,"DOCEF_CENTER_X",A="FL:::/Kernel/KernelA.HPP,988"$
 $LK,"SYS_TIMER_FREQ",A="FL:::/Kernel/KernelA.HPP,552"$
-$LK,"HashTablePurge",A="FL:::/Kernel/KHashB.CPP.Z,107",BI=223$
-$LK,"GR_HEIGHT",A="FL:::/Kernel/KernelA.HPP,3617"$
+$LK,"HashTablePurge",A="FL:::/Kernel/KHashB.CPP.Z,107",BI=226$
+$LK,"GR_HEIGHT",A="FL:::/Kernel/KernelA.HPP,3618"$
 $LK,"DOCEf_CENTER_Y",A="FL:::/Kernel/KernelA.HPP,1079"$
 $LK,"DOCEF_CENTER_Y",A="FL:::/Kernel/KernelA.HPP,991"$
-$LK,"Seed",A="FL:::/Kernel/KMathB.CPP.Z,128",BI=224$
-$LK,"DrvsRelease",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,27",BI=225$
-$LK,"BlkDevNextFreeSlot",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,120",BI=226$
-$LK,"TASKf_FILTER_INPUT",A="FL:::/Kernel/KernelA.HPP,3286"$
+$LK,"Seed",A="FL:::/Kernel/KMathB.CPP.Z,128",BI=227$
+$LK,"DrvsRelease",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,27",BI=228$
+$LK,"BlkDevNextFreeSlot",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,120",BI=229$
+$LK,"TASKf_FILTER_INPUT",A="FL:::/Kernel/KernelA.HPP,3287"$
 $LK,"DOCEF_REFRESH_DATA",A="FL:::/Kernel/KernelA.HPP,1007"$
 $LK,"DOCf_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HPP,1305"$
 $LK,"DOCF_DONT_HIGHLIGHT_CURSOR",A="FL:::/Kernel/KernelA.HPP,1269"$
 $LK,"SYS_SEMA_FLUSH_VGA_IMAGE",A="FL:::/Kernel/KernelA.HPP,602"$
 $LK,"OPTf_NO_REG_VAR",A="FL:::/Kernel/KernelA.HPP,1543"$
-$LK,"CTRLF_SHOW",A="FL:::/Kernel/KernelA.HPP,3091"$
+$LK,"CTRLF_SHOW",A="FL:::/Kernel/KernelA.HPP,3092"$
 $LK,"DOCEf_REFRESH_DATA",A="FL:::/Kernel/KernelA.HPP,1095"$
 $LK,"DOCEf_LEFT_EXP",A="FL:::/Kernel/KernelA.HPP,1058"$
 $LK,"DOCEF_LEFT_EXP",A="FL:::/Kernel/KernelA.HPP,970"$
-$LK,"ISO1FileRead",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,130",BI=227$
-$LK,"ATAPIWaitReady",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,334",BI=228$
-$LK,"SC_PRTSCRN1",A="FL:::/Kernel/KernelA.HPP,3592"$
+$LK,"ISO1FileRead",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,130",BI=230$
+$LK,"ATAPIWaitReady",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,334",BI=231$
+$LK,"SC_PRTSCRN1",A="FL:::/Kernel/KernelA.HPP,3593"$
 $LK,"FUF_ALL",A="FL:::/Kernel/KernelA.HPP,2598"$
 $LK,"STR_LEN",A="FL:::/Kernel/KernelA.HPP,40"$
-$LK,"DskCacheQueIns",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,53",BI=229$
-$LK,"SC_PRTSCRN2",A="FL:::/Kernel/KernelA.HPP,3593"$
-$LK,"sys_semas",A="FL:::/Kernel/KernelB.HPP,230"$
-$LK,"InputFilterTask",A="FL:::/Kernel/SerialDev/Message.CPP.Z,1",BI=230$
+$LK,"DskCacheQueIns",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,53",BI=232$
+$LK,"SC_PRTSCRN2",A="FL:::/Kernel/KernelA.HPP,3594"$
+$LK,"sys_semas",A="FL:::/Kernel/KernelB.HPP,231"$
+$LK,"InputFilterTask",A="FL:::/Kernel/SerialDev/Message.CPP.Z,1",BI=233$
 $LK,"SYS_HASH_STR",A="FL:::/Kernel/KHashA.CPP.Z,4"$
 $LK,"ATAR0_CMD",A="FL:::/Kernel/KernelA.HPP,2285"$
 $LK,"I_DBG",A="FL:::/Kernel/KernelA.HPP,296"$
-$LK,"FATNameTo",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,130",BI=231$
-$LK,"SrvCmdQueDel",A="FL:::/Kernel/SrvCmd.CPP.Z,7",BI=232$
+$LK,"FATNameTo",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,130",BI=234$
+$LK,"SrvCmdQueDel",A="FL:::/Kernel/SrvCmd.CPP.Z,7",BI=235$
 $LK,"MinI64",A="FL:::/Kernel/KernelB.HPP,101"$
 $LK,"MaxU64",A="FL:::/Kernel/KernelB.HPP,100"$
 $LK,"CallInd",A="FL:::/Kernel/KernelB.HPP,49"$
-$LK,"EndianI64",A="FL:::/Kernel/KMisc.CPP.Z,25",BI=233$
+$LK,"EndianI64",A="FL:::/Kernel/KMisc.CPP.Z,25",BI=236$
 $LK,"_MSIZE",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,337"$
 $LK,"AC_MAX_FILLINS",A="FL:::/Kernel/KernelA.HPP,1485"$
 $LK,"GVF_IMPORT",A="FL:::/Kernel/KernelA.HPP,867"$
@@ -1013,131 +1017,132 @@ $LK,"IEF_PLUS_OPCODE",A="FL:::/Kernel/KernelA.HPP,1729"$
 $LK,"LAPIC_ICR_LOW",A="FL:::/Kernel/KernelA.HPP,495"$
 $LK,"mouse",A="FL:::/Kernel/KGlbls.CPP.Z,27"$
 $LK,"D3Zero",A="FL:::/Kernel/KernelB.HPP,162"$
-$LK,"ST_WARN_ST",A="FL:::/Kernel/KernelA.HPP,3521"$
+$LK,"ST_WARN_ST",A="FL:::/Kernel/KernelA.HPP,3522"$
 $LK,"FUF_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HPP,2615"$
-$LK,"DskCacheInvalidate2",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,97",BI=234$
-$LK,"CCtrl",A="FL:::/Kernel/KernelA.HPP,3113"$
+$LK,"DskCacheInvalidate2",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,97",BI=237$
+$LK,"CCtrl",A="FL:::/Kernel/KernelA.HPP,3114"$
 $LK,"CBlkDev",A="FL:::/Kernel/KernelA.HPP,2662"$
-$LK,"DOCT_SONG",A="FL:::/Kernel/KernelA.HPP,939"$
-$LK,"DOCT_TREE",A="FL:::/Kernel/KernelA.HPP,935"$
-$LK,"progress1_desc",A="FL:::/Kernel/KernelB.HPP,207"$
-$LK,"BDS_ED_FILENAME_DRV",A="FL:::/Kernel/KernelA.HPP,3271"$
+$LK,"DOCT_SONG",A="FL:::/Kernel/KernelA.HPP,940"$
+$LK,"DOCT_TREE",A="FL:::/Kernel/KernelA.HPP,936"$
+$LK,"progress1_desc",A="FL:::/Kernel/KernelB.HPP,208"$
+$LK,"BDS_ED_FILENAME_DRV",A="FL:::/Kernel/KernelA.HPP,3272"$
 $LK,"DOCT_TEXT",A="FL:::/Kernel/KernelA.HPP,900"$
 $LK,"CMathODE",A="FL:::/Kernel/KernelA.HPP,244"$
-$LK,"WinInside",A="FL:::/Kernel/Display.CPP.Z,126",BI=235$
+$LK,"WinInside",A="FL:::/Kernel/Display.CPP.Z,126",BI=238$
 $LK,"RFLAGf_ALIGN_CHECK",A="FL:::/Kernel/KernelA.HPP,321"$
 $LK,"FUf_SCAN_PARENTS",A="FL:::/Kernel/KernelA.HPP,2589"$
 $LK,"DOCF_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HPP,1271"$
 $LK,"CMemberLst",A="FL:::/Kernel/KernelA.HPP,797"$
 $LK,"DOCf_ALLOW_UNDO",A="FL:::/Kernel/KernelA.HPP,1307"$
-$LK,"DskCacheQueRem",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,46",BI=236$
+$LK,"DskCacheQueRem",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,46",BI=239$
 $LK,"_D3_NORM",A="FL:::/Kernel/KMathA.CPP.Z,4"$
 $LK,"DOCEf_BLINK",A="FL:::/Kernel/KernelA.HPP,1047"$
 $LK,"DOCEF_BLINK",A="FL:::/Kernel/KernelA.HPP,1041"$
-$LK,"IsDotZ",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,22",BI=237$
-$LK,"HashGenericAdd",A="FL:::/Kernel/KHashB.CPP.Z,140",BI=238$
+$LK,"IsDotZ",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,22",BI=240$
+$LK,"HashGenericAdd",A="FL:::/Kernel/KHashB.CPP.Z,140",BI=241$
 $LK,"_TASK_CONTEXT_RESTORE",A="FL:::/Kernel/Sched.CPP.Z,100"$
 $LK,"BFieldOrU32",A="FL:::/Kernel/KernelB.HPP,32"$
 $LK,"TK_IFJIT",A="FL:::/Kernel/KernelA.HPP,2104"$
-$LK,"RedSeaFileRead",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,207",BI=239$
-$LK,"MousePktRead",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,1",BI=240$
-$LK,"VGAP_CRTC_DATA",A="FL:::/Kernel/KernelA.HPP,3740"$
+$LK,"RedSeaFileRead",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,207",BI=242$
+$LK,"MousePktRead",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,1",BI=243$
+$LK,"VGAP_CRTC_DATA",A="FL:::/Kernel/KernelA.HPP,3741"$
 $LK,"ARGT_REL32",A="FL:::/Kernel/KernelA.HPP,1882"$
 $LK,"ARGT_REL16",A="FL:::/Kernel/KernelA.HPP,1881"$
-$LK,"cpu_structs",A="FL:::/Kernel/KernelB.HPP,226"$
-$LK,"SC_DELETE",A="FL:::/Kernel/KernelA.HPP,3577"$
+$LK,"cpu_structs",A="FL:::/Kernel/KernelB.HPP,227"$
+$LK,"SC_DELETE",A="FL:::/Kernel/KernelA.HPP,3578"$
 $LK,"MAX_U64_F64",A="FL:::/Kernel/KernelA.HPP,44"$
 $LK,"CLine",A="FL:::/Kernel/EdLite.CPP.Z,1"$
 $LK,"ACD_MAX_FILLINS",A="FL:::/Kernel/KernelA.HPP,1522"$
 $LK,"REGT_SEG",A="FL:::/Kernel/KernelA.HPP,743"$
 $LK,"CMass",A="FL:::/Kernel/KernelA.HPP,208"$
-$LK,"GetStr",A="FL:::/Kernel/SerialDev/Message.CPP.Z,193",BI=241$
-$LK,"LTRED",A="FL:::/Kernel/KernelA.HPP,2969"$
+$LK,"GetStr",A="FL:::/Kernel/SerialDev/Message.CPP.Z,193",BI=244$
+$LK,"LTRED",A="FL:::/Kernel/KernelA.HPP,2970"$
 $LK,"FSG_TYPE_MASK",A="FL:::/Kernel/KernelA.HPP,2695"$
 $LK,"StrIMatch",A="FL:::/Kernel/StrA.CPP.Z,319"$
 $LK,"HTG_TYPE_MASK",A="FL:::/Kernel/KernelA.HPP,699"$
 $LK,"Sign",A="FL:::/Kernel/KernelB.HPP,140"$
-$LK,"ExpandBuf",A="FL:::/Kernel/Compress.CPP.Z,250",BI=242$
+$LK,"ExpandBuf",A="FL:::/Kernel/Compress.CPP.Z,250",BI=245$
 $LK,"ICF_ALT_TEMPLATE",A="FL:::/Kernel/KernelA.HPP,1614"$
-$LK,"DOCT_PAGE_LEN",A="FL:::/Kernel/KernelA.HPP,908"$
+$LK,"DOCT_PAGE_LEN",A="FL:::/Kernel/KernelA.HPP,909"$
 $LK,"RLf_RAW",A="FL:::/Kernel/KernelA.HPP,445"$
-$LK,"ToggleZorNotZ",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,261",BI=243$
-$LK,"VGAP_ATTR_INDEX",A="FL:::/Kernel/KernelA.HPP,3729"$
+$LK,"BootDVDProbe",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,1",BI=246$
+$LK,"ToggleZorNotZ",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,261",BI=247$
+$LK,"VGAP_ATTR_INDEX",A="FL:::/Kernel/KernelA.HPP,3730"$
 $LK,"D3MulEqu",A="FL:::/Kernel/KernelB.HPP,156"$
-$LK,"BDS_CONST",A="FL:::/Kernel/KernelA.HPP,3269"$
+$LK,"BDS_CONST",A="FL:::/Kernel/KernelA.HPP,3270"$
 $LK,"MP_MAX_PROCESSORS",A="FL:::/Kernel/KernelA.HPP,303"$
-$LK,"SysGlblsInit",A="FL:::/Kernel/KEnd.CPP.Z,1",BI=244$
-$LK,"PutSrcLink",A="FL:::/Kernel/FunSeg.CPP.Z,295",BI=245$
-$LK,"CMenu",A="FL:::/Kernel/KernelA.HPP,3147"$
+$LK,"SysGlblsInit",A="FL:::/Kernel/KEnd.CPP.Z,1",BI=248$
+$LK,"PutSrcLink",A="FL:::/Kernel/FunSeg.CPP.Z,295",BI=249$
+$LK,"CMenu",A="FL:::/Kernel/KernelA.HPP,3148"$
 $LK,"BDT_ATAPI",A="FL:::/Kernel/KernelA.HPP,2634"$
 $LK,"FUF_MAP",A="FL:::/Kernel/KernelA.HPP,2603"$
 $LK,"CFAT32DirEntry",A="FL:::/Kernel/KernelA.HPP,2380"$
 $LK,"ACD_POS_END",A="FL:::/Kernel/KernelA.HPP,1510"$
-$LK,"DOCT_INVERT",A="FL:::/Kernel/KernelA.HPP,921"$
+$LK,"DOCT_INVERT",A="FL:::/Kernel/KernelA.HPP,922"$
 $LK,"CMT_HASH_ENTRY",A="FL:::/Kernel/KernelA.HPP,1694"$
 $LK,"RLf_VGA",A="FL:::/Kernel/KernelA.HPP,439"$
 $LK,"WIf_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1454"$
 $LK,"LAPIC_LVT_PERF",A="FL:::/Kernel/KernelA.HPP,500"$
-$LK,"SC_F1",A="FL:::/Kernel/KernelA.HPP,3578"$
-$LK,"SYS_SEMAS",A="FL:::/Kernel/KStart.CPP.Z,236"$
-$LK,"SC_F2",A="FL:::/Kernel/KernelA.HPP,3579"$
+$LK,"SC_F1",A="FL:::/Kernel/KernelA.HPP,3579"$
+$LK,"SYS_SEMAS",A="FL:::/Kernel/KStart32.CPP.Z,54"$
+$LK,"SC_F2",A="FL:::/Kernel/KernelA.HPP,3580"$
 $LK,"SYS_VAR_INIT_FLAG",A="FL::/Temp.TXT.Z,1"$
 $LK,"SYS_MEM_INIT_FLAG",A="FL::/Temp.TXT.Z,1"$
-$LK,"SC_F3",A="FL:::/Kernel/KernelA.HPP,3580"$
+$LK,"SC_F3",A="FL:::/Kernel/KernelA.HPP,3581"$
 $LK,"SignI64",A="FL:::/Kernel/KernelB.HPP,104"$
-$LK,"SC_F4",A="FL:::/Kernel/KernelA.HPP,3581"$
-$LK,"WSSf_SET_TO_POS",A="FL:::/Kernel/KernelA.HPP,3097"$
+$LK,"SC_F4",A="FL:::/Kernel/KernelA.HPP,3582"$
+$LK,"WSSf_SET_TO_POS",A="FL:::/Kernel/KernelA.HPP,3098"$
 $LK,"RS_ATTR_SYSTEM",A="FL:::/Kernel/KernelA.HPP,2528"$
 $LK,"SYS_SEMA_MUTE",A="FL:::/Kernel/KernelA.HPP,610"$
 $LK,"I_BPT",A="FL:::/Kernel/KernelA.HPP,289"$
 $LK,"_TAKE_EXCEPT",A="FL:::/Kernel/KExcept.CPP.Z,20"$
-$LK,"DefineCnt",A="FL:::/Kernel/KDefine.CPP.Z,74",BI=246$
-$LK,"SC_F5",A="FL:::/Kernel/KernelA.HPP,3582"$
+$LK,"DefineCnt",A="FL:::/Kernel/KDefine.CPP.Z,74",BI=250$
+$LK,"SC_F5",A="FL:::/Kernel/KernelA.HPP,3583"$
 $LK,"WIF_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HPP,1423"$
-$LK,"RedSeaCd",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,236",BI=247$
+$LK,"RedSeaCd",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,236",BI=251$
 $LK,"C:/Doc/Bit.TXT.Z",A="FL:::/Kernel/KernelB.HPP,9"$
-$LK,"SC_F6",A="FL:::/Kernel/KernelA.HPP,3583"$
-$LK,"SysGrInit",A="FL:::/Kernel/KEnd.CPP.Z,64",BI=248$
-$LK,"ArcCtrlDel",A="FL:::/Kernel/Compress.CPP.Z,244",BI=249$
-$LK,"SysBadMAlloc",A="FL:::/Kernel/Mem/Mem512.CPP.Z,6",BI=250$
-$LK,"SC_F7",A="FL:::/Kernel/KernelA.HPP,3584"$
+$LK,"SC_F6",A="FL:::/Kernel/KernelA.HPP,3584"$
+$LK,"SysGrInit",A="FL:::/Kernel/KEnd.CPP.Z,64",BI=252$
+$LK,"ArcCtrlDel",A="FL:::/Kernel/Compress.CPP.Z,244",BI=253$
+$LK,"SysBadMAlloc",A="FL:::/Kernel/Mem/Mem512.CPP.Z,6",BI=254$
+$LK,"SC_F7",A="FL:::/Kernel/KernelA.HPP,3585"$
 $LK,"DOCSS_NORMAL",A="FL:::/Kernel/KernelA.HPP,1128"$
 $LK,"GVF_EXTERN",A="FL:::/Kernel/KernelA.HPP,868"$
 $LK,"blkdev_text_attr",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,309"$
-$LK,"SPF_NEG_E",A="FL:::/Kernel/KernelA.HPP,3928"$
-$LK,"SC_F8",A="FL:::/Kernel/KernelA.HPP,3585"$
-$LK,"Mute",A="FL:::/Kernel/KMisc.CPP.Z,199",BI=251$
-$LK,"INT_FAULT",A="FL:::/Kernel/KInts.CPP.Z,55"$
-$LK,"progress2_desc",A="FL:::/Kernel/KernelB.HPP,211"$
-$LK,"DCSF_PALETTE_GET",A="FL:::/Kernel/KernelA.HPP,3649"$
-$LK,"SC_F9",A="FL:::/Kernel/KernelA.HPP,3586"$
+$LK,"SPF_NEG_E",A="FL:::/Kernel/KernelA.HPP,3929"$
+$LK,"SC_F8",A="FL:::/Kernel/KernelA.HPP,3586"$
+$LK,"Mute",A="FL:::/Kernel/KMisc.CPP.Z,204",BI=255$
+$LK,"INT_FAULT",A="FL:::/Kernel/KInts.CPP.Z,62"$
+$LK,"progress2_desc",A="FL:::/Kernel/KernelB.HPP,212"$
+$LK,"DCSF_PALETTE_GET",A="FL:::/Kernel/KernelA.HPP,3650"$
+$LK,"SC_F9",A="FL:::/Kernel/KernelA.HPP,3587"$
 $LK,"DOCEF_SOLID_BORDER",A="FL:::/Kernel/KernelA.HPP,1003"$
-$LK,"KbdBuildSC",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,301",BI=252$
+$LK,"KbdBuildSC",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,301",BI=256$
 $LK,"CInst",A="FL:::/Kernel/KernelA.HPP,1744"$
 $LK,"IOAPICID",A="FL:::/Kernel/KernelA.HPP,512"$
 $LK,"RFLAGf_SIGN",A="FL:::/Kernel/KernelA.HPP,311"$
-$LK,"DKGRAY",A="FL:::/Kernel/KernelA.HPP,2965"$
+$LK,"DKGRAY",A="FL:::/Kernel/KernelA.HPP,2966"$
 $LK,"DOCEF_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HPP,996"$
-$LK,"PutDirLink",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,200",BI=253$
-$LK,"EndianU32",A="FL:::/Kernel/KMisc.CPP.Z,15",BI=254$
-$LK,"EndianU16",A="FL:::/Kernel/KMisc.CPP.Z,7",BI=255$
+$LK,"PutDirLink",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,200",BI=257$
+$LK,"EndianU32",A="FL:::/Kernel/KMisc.CPP.Z,15",BI=258$
+$LK,"EndianU16",A="FL:::/Kernel/KMisc.CPP.Z,7",BI=259$
 $LK,"DOCEf_SOLID_BORDER",A="FL:::/Kernel/KernelA.HPP,1091"$
-$LK,"sys_pci_busses",A="FL:::/Kernel/KernelB.HPP,236"$
-$LK,"SPF_NEG_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HPP,3929"$
-$LK,"BOOT_STK_SIZE",A="FL:::/Kernel/KernelA.HPP,3887"$
-$LK,"TTS_LOCKED_CONST",A="FL:::/Kernel/KernelA.HPP,3275"$
+$LK,"sys_pci_busses",A="FL:::/Kernel/KernelB.HPP,237"$
+$LK,"SPF_NEG_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HPP,3930"$
+$LK,"BOOT_STK_SIZE",A="FL:::/Kernel/KernelA.HPP,3888"$
+$LK,"TTS_LOCKED_CONST",A="FL:::/Kernel/KernelA.HPP,3276"$
 $LK,"CCf_FUN_EXP",A="FL:::/Kernel/KernelA.HPP,2150"$
 $LK,"CCF_FUN_EXP",A="FL:::/Kernel/KernelA.HPP,2149"$
 $LK,"LAPIC_APIC_VERSION",A="FL:::/Kernel/KernelA.HPP,480"$
-$LK,"PutS",A="FL:::/Kernel/KeyDev.CPP.Z,29",BI=256$
+$LK,"PutS",A="FL:::/Kernel/KeyDev.CPP.Z,29",BI=260$
 $LK,"DOCEf_MARGIN_REL_X",A="FL:::/Kernel/KernelA.HPP,1084"$
 $LK,"CDocBin",A="FL:::/Kernel/KernelA.HPP,1114"$
 $LK,"LAPIC_BASE",A="FL:::/Kernel/KernelA.HPP,477"$
 $LK,"MAX_F64",A="FL:::/Kernel/KernelA.HPP,45"$
-$LK,"StrPrintJoin",A="FL:::/Kernel/StrPrint.CPP.Z,206",BI=257$
+$LK,"StrPrintJoin",A="FL:::/Kernel/StrPrint.CPP.Z,208",BI=261$
 $LK,"IA32_GS_BASE",A="FL:::/Kernel/KernelA.HPP,523"$
 $LK,"log2_e",A="FL:::/Kernel/KernelA.HPP,53"$
-$LK,"CurDir",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,277",BI=258$
+$LK,"CurDir",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,277",BI=262$
 $LK,"MinU64",A="FL:::/Kernel/KernelB.HPP,102"$
 $LK,"_SYS_HLT",A="FL:::/Kernel/KUtils.CPP.Z,468"$
 $LK,"CCF_AOT_COMPILE",A="FL:::/Kernel/KernelA.HPP,2160"$
@@ -1146,30 +1151,30 @@ $LK,"MAX_I32",A="FL:::/Kernel/KernelA.HPP,32"$
 $LK,"MAX_I16",A="FL:::/Kernel/KernelA.HPP,28"$
 $LK,"HTF_EXPORT",A="FL:::/Kernel/KernelA.HPP,703"$
 $LK,"HTf_EXPORT",A="FL:::/Kernel/KernelA.HPP,673"$
-$LK,"DrvDel",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,69",BI=259$
-$LK,"ATAPIReadBlks2",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,385",BI=260$
+$LK,"DrvDel",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,69",BI=263$
+$LK,"ATAPIReadBlks2",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,385",BI=264$
 $LK,"_D3_UNIT",A="FL:::/Kernel/KMathA.CPP.Z,305"$
 $LK,"CCf_AOT_COMPILE",A="FL:::/Kernel/KernelA.HPP,2161"$
 $LK,"POP_C_REGS",A="FL:::/Kernel/KernelA.HPP,1767"$
 $LK,"_STRIMATCH",A="FL:::/Kernel/StrA.CPP.Z,262"$
-$LK,"DrvChk",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,142",BI=261$
+$LK,"DrvChk",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,142",BI=265$
 $LK,"CSema",A="FL:::/Kernel/KernelA.HPP,587"$
 $LK,"EXT_HEAPLOG_MALLOC",A="FL:::/Kernel/KernelA.HPP,577"$
-$LK,"GR_WIDTH",A="FL:::/Kernel/KernelA.HPP,3616"$
+$LK,"GR_WIDTH",A="FL:::/Kernel/KernelA.HPP,3617"$
 $LK,"DOCT_SOFT_NEW_LINE",A="FL:::/Kernel/KernelA.HPP,902"$
-$LK,"GetBaseUnit",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,176",BI=262$
-$LK,"FixSet",A="FL:::/Kernel/EdLite.CPP.Z,327",BI=263$
-$LK,"IPSet",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,43",BI=264$
+$LK,"GetBaseUnit",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,176",BI=266$
+$LK,"FixSet",A="FL:::/Kernel/EdLite.CPP.Z,327",BI=267$
+$LK,"IPSet",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,43",BI=268$
 $LK,"DOCf_SEL",A="FL:::/Kernel/KernelA.HPP,1322"$
 $LK,"SYS_SEMA_HEAPLOG_LOCK",A="FL:::/Kernel/KernelA.HPP,600"$
 $LK,"sqrt2",A="FL:::/Kernel/KernelA.HPP,56"$
 $LK,"ATAR0_SEL",A="FL:::/Kernel/KernelA.HPP,2283"$
 $LK,"CQueVectU8",A="FL:::/Kernel/KernelA.HPP,162"$
-$LK,"IntFaultHandlersNew",A="FL:::/Kernel/KInts.CPP.Z,159",BI=265$
-$LK,"TASKf_INPUT_FILTER_TASK",A="FL:::/Kernel/KernelA.HPP,3285"$
+$LK,"IntFaultHandlersNew",A="FL:::/Kernel/KInts.CPP.Z,166",BI=269$
+$LK,"TASKf_INPUT_FILTER_TASK",A="FL:::/Kernel/KernelA.HPP,3286"$
 $LK,"OM_CB",A="FL:::/Kernel/KernelA.HPP,1871"$
 $LK,"MAX_I64",A="FL:::/Kernel/KernelA.HPP,36"$
-$LK,"throw",A="FL:::/Kernel/KExcept.CPP.Z,83",BI=266$
+$LK,"throw",A="FL:::/Kernel/KExcept.CPP.Z,83",BI=270$
 $LK,"sys_boot_base",A="FL:::/Kernel/KernelB.HPP,37"$
 $LK,"BDF_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HPP,2640"$
 $LK,"TK_AND_AND",A="FL:::/Kernel/KernelA.HPP,2088"$
@@ -1177,87 +1182,86 @@ $LK,"REG_NONE",A="FL:::/Kernel/KernelA.HPP,1787"$
 $LK,"OC_LOCK_PREFIX",A="FL:::/Kernel/KernelA.HPP,1759"$
 $LK,"WIF_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1416"$
 $LK,"Ff_INTERRUPT",A="FL:::/Kernel/KernelA.HPP,847"$
-$LK,"CFunSegCache",A="FL:::/Kernel/KernelA.HPP,3852"$
+$LK,"CFunSegCache",A="FL:::/Kernel/KernelA.HPP,3853"$
 $LK,"OM_CD",A="FL:::/Kernel/KernelA.HPP,1873"$
 $LK,"AAT_ADD_U8",A="FL:::/Kernel/KernelA.HPP,1969"$
 $LK,"REGT_XMM",A="FL:::/Kernel/KernelA.HPP,746"$
 $LK,"DOCSS_CPP_Z_COMMENT",A="FL:::/Kernel/KernelA.HPP,1132"$
-$LK,"DOCT_SHIFTED_X",A="FL:::/Kernel/KernelA.HPP,923"$
-$LK,"PutExcept",A="FL:::/Kernel/KExcept.CPP.Z,45",BI=267$
+$LK,"DOCT_SHIFTED_X",A="FL:::/Kernel/KernelA.HPP,924"$
+$LK,"PutExcept",A="FL:::/Kernel/KExcept.CPP.Z,45",BI=271$
 $LK,"TestExcept",A="FL:::/Kernel/KExcept.CPP.Z,41"$
-$LK,"CColorROPU32",A="FL:::/Kernel/KernelA.HPP,2982"$
-$LK,"CColorROPU16",A="FL:::/Kernel/KernelA.HPP,2978"$
-$LK,"DOCT_SHIFTED_Y",A="FL:::/Kernel/KernelA.HPP,924"$
+$LK,"CColorROPU32",A="FL:::/Kernel/KernelA.HPP,2983"$
+$LK,"CColorROPU16",A="FL:::/Kernel/KernelA.HPP,2979"$
+$LK,"DOCT_SHIFTED_Y",A="FL:::/Kernel/KernelA.HPP,925"$
 $LK,"HTT_FILE",A="FL:::/Kernel/KernelA.HPP,695"$
 $LK,"HTT_DEFINE_STR",A="FL:::/Kernel/KernelA.HPP,684"$
 $LK,"HTt_FILE",A="FL:::/Kernel/KernelA.HPP,665"$
-$LK,"BootDVDProve",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,1",BI=268$
-$LK,"Push",A="FL:::/Kernel/KernelB.HPP,245"$
-$LK,"SVCf_FREE_ON_COMPLETE",A="FL:::/Kernel/KernelA.HPP,3185"$
+$LK,"Push",A="FL:::/Kernel/KernelB.HPP,246"$
+$LK,"SVCf_FREE_ON_COMPLETE",A="FL:::/Kernel/KernelA.HPP,3186"$
 $LK,"HTt_DEFINE_STR",A="FL:::/Kernel/KernelA.HPP,654"$
 $LK,"STK_REP_LEN",A="FL:::/Kernel/KDbg.CPP.Z,102"$
 $LK,"I_NMI",A="FL:::/Kernel/KernelA.HPP,288"$
-$LK,"Date2ISO1",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,1",BI=269$
+$LK,"Date2ISO1",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,1",BI=272$
 $LK,"ModU64",A="FL:::/Kernel/KernelB.HPP,103"$
-$LK,"SVCf_EXIT_ON_COMPLETE",A="FL:::/Kernel/KernelA.HPP,3179"$
+$LK,"SVCf_EXIT_ON_COMPLETE",A="FL:::/Kernel/KernelA.HPP,3180"$
 $LK,"DOCG_DBL_BUF_FLAGS",A="FL:::/Kernel/KernelA.HPP,958"$
-$LK,"JobResScan",A="FL:::/Kernel/SrvCmd.CPP.Z,163",BI=270$
+$LK,"JobResScan",A="FL:::/Kernel/SrvCmd.CPP.Z,163",BI=273$
 $LK,"WIf_FOCUS_TASK_MENU",A="FL:::/Kernel/KernelA.HPP,1448"$
 $LK,"WIf_SELF_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1442"$
-$LK,"CTask",A="FL:::/Kernel/KernelA.HPP,3320"$
+$LK,"CTask",A="FL:::/Kernel/KernelA.HPP,3321"$
 $LK,"OC_JMP_REL8",A="FL:::/Kernel/KernelA.HPP,1763"$
 $LK,"_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.CPP.Z,143"$
 $LK,"_D3_ZERO",A="FL:::/Kernel/KMathA.CPP.Z,201"$
-$LK,"Str2F64",A="FL:::/Kernel/StrScan.CPP.Z,55",BI=271$
+$LK,"Str2F64",A="FL:::/Kernel/StrScan.CPP.Z,55",BI=274$
 $LK,"_YIELD",A="FL:::/Kernel/Sched.CPP.Z,157"$
 $LK,"OM_IB",A="FL:::/Kernel/KernelA.HPP,1875"$
-$LK,"progress3_desc",A="FL:::/Kernel/KernelB.HPP,215"$
-$LK,"DCF_SYMMETRY",A="FL:::/Kernel/KernelA.HPP,3633"$
+$LK,"progress3_desc",A="FL:::/Kernel/KernelB.HPP,216"$
+$LK,"DCF_SYMMETRY",A="FL:::/Kernel/KernelA.HPP,3634"$
 $LK,"OM_ID",A="FL:::/Kernel/KernelA.HPP,1877"$
 $LK,"OM_CP",A="FL:::/Kernel/KernelA.HPP,1874"$
 $LK,"WIF_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HPP,1425"$
 $LK,"_ROUND",A="FL:::/Kernel/KMathA.CPP.Z,380"$
 $LK,"RFLAGf_TRAP",A="FL:::/Kernel/KernelA.HPP,312"$
 $LK,"SYS_HASH_BUCKET_FIND",A="FL:::/Kernel/KHashA.CPP.Z,109"$
-$LK,"BOOT_SRC_DVD",A="FL:::/Kernel/KernelA.HPP,3893"$
+$LK,"BOOT_SRC_DVD",A="FL:::/Kernel/KernelA.HPP,3894"$
 $LK,"FUF_RECURSE",A="FL:::/Kernel/KernelA.HPP,2595"$
 $LK,"FUf_RECURSE",A="FL:::/Kernel/KernelA.HPP,2569"$
 $LK,"MemCmp",A="FL:::/Kernel/KernelB.HPP,166"$
-$LK,"SVCf_DONE",A="FL:::/Kernel/KernelA.HPP,3183"$
-$LK,"SC_PAGE_UP",A="FL:::/Kernel/KernelA.HPP,3572"$
-$LK,"User",A="FL:::/Kernel/KTask.CPP.Z,394",BI=272$
+$LK,"SVCf_DONE",A="FL:::/Kernel/KernelA.HPP,3184"$
+$LK,"SC_PAGE_UP",A="FL:::/Kernel/KernelA.HPP,3573"$
+$LK,"User",A="FL:::/Kernel/KTask.CPP.Z,394",BI=275$
 $LK,"WIF_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HPP,1427"$
 $LK,"DOCEf_RIGHT_EXP",A="FL:::/Kernel/KernelA.HPP,1060"$
 $LK,"DOCEF_RIGHT_EXP",A="FL:::/Kernel/KernelA.HPP,972"$
-$LK,"DirEntryDel",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,17",BI=273$
+$LK,"DirEntryDel",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,17",BI=276$
 $LK,"CLexFile",A="FL:::/Kernel/KernelA.HPP,2037"$
 $LK,"OM_CW",A="FL:::/Kernel/KernelA.HPP,1872"$
 $LK,"DOCF_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HPP,1277"$
 $LK,"IA32_LAPIC_BASE",A="FL:::/Kernel/KernelA.HPP,520"$
-$LK,"ATACmd",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,59",BI=274$
-$LK,"BusyWait",A="FL:::/Kernel/KMisc.CPP.Z,131",BI=275$
+$LK,"ATACmd",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,59",BI=277$
+$LK,"BusyWait",A="FL:::/Kernel/KMisc.CPP.Z,136",BI=278$
 $LK,"DOCEf_SHIFTED_X",A="FL:::/Kernel/KernelA.HPP,1065"$
 $LK,"DOCEG_DONT_EDIT",A="FL:::/Kernel/KernelA.HPP,1035"$
 $LK,"DOCEF_SHIFTED_X",A="FL:::/Kernel/KernelA.HPP,977"$
 $LK,"DOCEf_SHIFTED_Y",A="FL:::/Kernel/KernelA.HPP,1066"$
 $LK,"DOCEF_SHIFTED_Y",A="FL:::/Kernel/KernelA.HPP,978"$
-$LK,"Str2I64",A="FL:::/Kernel/StrScan.CPP.Z,1",BI=276$
+$LK,"Str2I64",A="FL:::/Kernel/StrScan.CPP.Z,1",BI=279$
 $LK,"Sqrt",A="FL:::/Kernel/KernelB.HPP,109"$
-$LK,"DrvMap",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,242",BI=277$
-$LK,"NowDateTimeStruct",A="FL:::/Kernel/KDate.CPP.Z,133",BI=278$
-$LK,"YorN",A="FL:::/Kernel/StrB.CPP.Z,87",BI=279$
+$LK,"DrvMap",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,242",BI=280$
+$LK,"NowDateTimeStruct",A="FL:::/Kernel/KDate.CPP.Z,133",BI=281$
+$LK,"YorN",A="FL:::/Kernel/StrB.CPP.Z,87",BI=282$
 $LK,"MT_CD",A="FL:::/Kernel/KernelA.HPP,2543"$
 $LK,"RFLAGf_VINT",A="FL:::/Kernel/KernelA.HPP,322"$
-$LK,"DCF_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3645"$
+$LK,"DCF_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3646"$
 $LK,"ACD_DEF",A="FL:::/Kernel/KernelA.HPP,1505"$
 $LK,"DOCEF_BIN_PTR_LINK",A="FL:::/Kernel/KernelA.HPP,975"$
-$LK,"SYS_CPU_STRUCTS",A="FL:::/Kernel/KStart.CPP.Z,228"$
-$LK,"SVCT_MSG",A="FL:::/Kernel/KernelA.HPP,3189"$
+$LK,"SYS_CPU_STRUCTS",A="FL:::/Kernel/KStart32.CPP.Z,46"$
+$LK,"SVCT_MSG",A="FL:::/Kernel/KernelA.HPP,3190"$
 $LK,"DOCf_DONT_SWAP_OUT",A="FL:::/Kernel/KernelA.HPP,1313"$
 $LK,"CDocEntryBase",A="FL:::/Kernel/KernelA.HPP,1159"$
 $LK,"MLF_STR_DFT_AVAILABLE",A="FL:::/Kernel/KernelA.HPP,776"$
-$LK,"ArcCtrlNew",A="FL:::/Kernel/Compress.CPP.Z,221",BI=280$
-$LK,"DCF_DONT_DRAW",A="FL:::/Kernel/KernelA.HPP,3640"$
+$LK,"ArcCtrlNew",A="FL:::/Kernel/Compress.CPP.Z,221",BI=283$
+$LK,"DCF_DONT_DRAW",A="FL:::/Kernel/KernelA.HPP,3641"$
 $LK,"SYS_SEMA_HEAPLOG_ACTIVE",A="FL:::/Kernel/KernelA.HPP,599"$
 $LK,"DOC_SCROLL_SPEED",A="FL:::/Kernel/KernelA.HPP,1126"$
 $LK,"ATTRf_SEL",A="FL:::/Kernel/KernelA.HPP,896"$
@@ -1266,104 +1270,104 @@ $LK,"SSF_NO_TENSION",A="FL:::/Kernel/KernelA.HPP,225"$
 $LK,"I32",A="FL:::/Kernel/KernelA.HPP,86"$
 $LK,"I16",A="FL:::/Kernel/KernelA.HPP,72"$
 $LK,"MemCpy",A="FL:::/Kernel/KernelB.HPP,168"$
-$LK,"CT_NONE",A="FL:::/Kernel/KernelA.HPP,3749"$
+$LK,"CT_NONE",A="FL:::/Kernel/KernelA.HPP,3750"$
 $LK,"OM_IW",A="FL:::/Kernel/KernelA.HPP,1876"$
-$LK,"VGAP_DATA",A="FL:::/Kernel/KernelA.HPP,3734"$
+$LK,"VGAP_DATA",A="FL:::/Kernel/KernelA.HPP,3735"$
 $LK,"OM_NO",A="FL:::/Kernel/KernelA.HPP,1870"$
 $LK,"IET_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,413"$
 $LK,"GVF_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,869"$
-$LK,"DefineSub",A="FL:::/Kernel/KDefine.CPP.Z,60",BI=281$
-$LK,"WHITE",A="FL:::/Kernel/KernelA.HPP,2972"$
+$LK,"DefineSub",A="FL:::/Kernel/KDefine.CPP.Z,60",BI=284$
+$LK,"WHITE",A="FL:::/Kernel/KernelA.HPP,2973"$
 $LK,"ATA_READ_MULTI_EXT",A="FL:::/Kernel/KernelA.HPP,2266"$
 $LK,"DOCEF_SCROLLING_X",A="FL:::/Kernel/KernelA.HPP,979"$
 $LK,"DOCEf_CHECKED_COLLAPSED",A="FL:::/Kernel/KernelA.HPP,1093"$
 $LK,"ISO1T_SUPPLEMENTARY_DESC",A="FL:::/Kernel/KernelA.HPP,2480"$
 $LK,"DOCEf_SCROLLING_X",A="FL:::/Kernel/KernelA.HPP,1067"$
-$LK,"MPInt",A="FL:::/Kernel/MultiProc.CPP.Z,132",BI=282$
-$LK,"BOOT_SRC_RAM",A="FL:::/Kernel/KernelA.HPP,3891"$
+$LK,"MPInt",A="FL:::/Kernel/MultiProc.CPP.Z,132",BI=285$
+$LK,"BOOT_SRC_RAM",A="FL:::/Kernel/KernelA.HPP,3892"$
 $LK,"TK_AND_EQU",A="FL:::/Kernel/KernelA.HPP,2095"$
 $LK,"I64",A="FL:::/Kernel/KernelA.HPP,104"$
 $LK,"MAX_U32",A="FL:::/Kernel/KernelA.HPP,34"$
 $LK,"MAX_U16",A="FL:::/Kernel/KernelA.HPP,30"$
-$LK,"PopUpPrint",A="FL:::/Kernel/SrvCmd.CPP.Z,398",BI=283$
-$LK,"IntEntryGet",A="FL:::/Kernel/KInts.CPP.Z,90",BI=284$
+$LK,"PopUpPrint",A="FL:::/Kernel/SrvCmd.CPP.Z,398",BI=286$
+$LK,"IntEntryGet",A="FL:::/Kernel/KInts.CPP.Z,97",BI=287$
 $LK,"CD2",A="FL:::/Kernel/KernelA.HPP,149"$
-$LK,"KeyDevInit",A="FL:::/Kernel/KeyDev.CPP.Z,201",BI=285$
+$LK,"KeyDevInit",A="FL:::/Kernel/KeyDev.CPP.Z,201",BI=288$
 $LK,"CCF_HAS_RETURN",A="FL:::/Kernel/KernelA.HPP,2145"$
 $LK,"CAsmArg",A="FL:::/Kernel/KernelA.HPP,1846"$
 $LK,"CD3",A="FL:::/Kernel/KernelA.HPP,155"$
-$LK,"SYS_BOOT_BLK",A="FL:::/Kernel/KStart.CPP.Z,25"$
-$LK,"progress4_desc",A="FL:::/Kernel/KernelB.HPP,219"$
+$LK,"SYS_BOOT_BLK",A="FL:::/Kernel/KStart16.CPP.Z,24"$
+$LK,"progress4_desc",A="FL:::/Kernel/KernelB.HPP,220"$
 $LK,"RFLAGf_ZERO",A="FL:::/Kernel/KernelA.HPP,310"$
-$LK,"DrvFATBlkClean",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,99",BI=286$
+$LK,"DrvFATBlkClean",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,99",BI=289$
 $LK,"CCF_CLASS_IP",A="FL:::/Kernel/KernelA.HPP,2165"$
 $LK,"WIf_FOCUS_TASK_IP_L",A="FL:::/Kernel/KernelA.HPP,1450"$
-$LK,"PCIReadU8",A="FL:::/Kernel/PCIBIOS.CPP.Z,163",BI=287$
+$LK,"PCIReadU8",A="FL:::/Kernel/PCIBIOS.CPP.Z,163",BI=290$
 $LK,"SYS_SEMA_SYS_DATE",A="FL:::/Kernel/KernelA.HPP,596"$
 $LK,"EXT_WIN_FOCUS",A="FL:::/Kernel/KernelA.HPP,576"$
-$LK,"ClustersAlloc",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,134",BI=288$
+$LK,"ClustersAlloc",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,134",BI=291$
 $LK,"WIF_SELF_IP_L",A="FL:::/Kernel/KernelA.HPP,1412"$
 $LK,"MAX_U64",A="FL:::/Kernel/KernelA.HPP,38"$
 $LK,"WIf_SELF_IP_L",A="FL:::/Kernel/KernelA.HPP,1440"$
 $LK,"CHashAC",A="FL:::/Kernel/KernelA.HPP,753"$
 $LK,"DOCf_NO_CURSOR",A="FL:::/Kernel/KernelA.HPP,1296"$
 $LK,"DOCF_NO_CURSOR",A="FL:::/Kernel/KernelA.HPP,1260"$
-$LK,"PrintWarn",A="FL:::/Kernel/StrPrint.CPP.Z,912",BI=289$
-$LK,"LoadOneImport",A="FL:::/Kernel/KLoad.CPP.Z,1",BI=290$
-$LK,"FOpen",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,9",BI=291$
+$LK,"PrintWarn",A="FL:::/Kernel/StrPrint.CPP.Z,914",BI=292$
+$LK,"LoadOneImport",A="FL:::/Kernel/KLoad.CPP.Z,1",BI=293$
+$LK,"FOpen",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,9",BI=294$
 $LK,"CCF_LAST_WAS_DOT",A="FL:::/Kernel/KernelA.HPP,2159"$
 $LK,"CMF_DEFINED",A="FL:::/Kernel/KernelA.HPP,1697"$
 $LK,"WIf_FOCUS_TASK_IP_R",A="FL:::/Kernel/KernelA.HPP,1452"$
 $LK,"HTG_ALL",A="FL:::/Kernel/KernelA.HPP,714"$
-$LK,"sys_var_init_val",A="FL:::/Kernel/KernelB.HPP,185"$
+$LK,"sys_var_init_val",A="FL:::/Kernel/KernelB.HPP,186"$
 $LK,"FUF_REPLACE",A="FL:::/Kernel/KernelA.HPP,2600"$
 $LK,"FUf_REPLACE",A="FL:::/Kernel/KernelA.HPP,2574"$
-$LK,"DrvRep",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,328",BI=292$
-$LK,"BlkDevUnlock",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,15",BI=293$
+$LK,"DrvRep",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,328",BI=295$
+$LK,"BlkDevUnlock",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,15",BI=296$
 $LK,"CMemUsed",A="FL:::/Kernel/KernelA.HPP,2823"$
 $LK,"WIF_SELF_IP_R",A="FL:::/Kernel/KernelA.HPP,1414"$
-$LK,"IntMPCrash",A="FL:::/Kernel/MultiProc.CPP.Z,379",BI=294$
-$LK,"JobQue",A="FL:::/Kernel/MultiProc.CPP.Z,213",BI=295$
-$LK,"TSSBusy",A="FL:::/Kernel/MultiProc.CPP.Z,71",BI=296$
-$LK,"DrvTypeSet",A="FL:::/Kernel/BlkDev/DskFmt.CPP.Z,1",BI=297$
+$LK,"IntMPCrash",A="FL:::/Kernel/MultiProc.CPP.Z,380",BI=297$
+$LK,"JobQue",A="FL:::/Kernel/MultiProc.CPP.Z,213",BI=298$
+$LK,"TSSBusy",A="FL:::/Kernel/MultiProc.CPP.Z,71",BI=299$
+$LK,"DrvTypeSet",A="FL:::/Kernel/BlkDev/DskFmt.CPP.Z,1",BI=300$
 $LK,"FUF_JUST_AOT",A="FL:::/Kernel/KernelA.HPP,2610"$
 $LK,"FUf_JUST_AOT",A="FL:::/Kernel/KernelA.HPP,2584"$
 $LK,"WIf_SELF_IP_R",A="FL:::/Kernel/KernelA.HPP,1441"$
-$LK,"DirNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,104",BI=298$
+$LK,"DirNameAbs",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,104",BI=301$
 $LK,"DOF_DONT_HOME",A="FL:::/Kernel/KernelA.HPP,1217"$
-$LK,"CH_ESC",A="FL:::/Kernel/KernelA.HPP,3515"$
+$LK,"CH_ESC",A="FL:::/Kernel/KernelA.HPP,3516"$
 $LK,"DOCEf_DONT_DRAW",A="FL:::/Kernel/KernelA.HPP,1109"$
 $LK,"DOCEF_DONT_DRAW",A="FL:::/Kernel/KernelA.HPP,1023"$
-$LK,"DrvFATBlkAlloc",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,89",BI=299$
-$LK,"WildMatch",A="FL:::/Kernel/StrA.CPP.Z,656",BI=300$
-$LK,"CDC",A="FL:::/Kernel/KernelA.HPP,3660"$
-$LK,"SC_CURSOR_LEFT",A="FL:::/Kernel/KernelA.HPP,3570"$
-$LK,"IsMute",A="FL:::/Kernel/KMisc.CPP.Z,213",BI=301$
-$LK,"DOCT_CLEAR",A="FL:::/Kernel/KernelA.HPP,906"$
-$LK,"DVDImageWrite",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,147",BI=302$
-$LK,"MouseRst",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,37",BI=303$
-$LK,"HashTypeNum",A="FL:::/Kernel/KHashB.CPP.Z,1",BI=304$
-$LK,"CPUf_DYING_TASK_QUE",A="FL:::/Kernel/KernelA.HPP,3443"$
+$LK,"DrvFATBlkAlloc",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,89",BI=302$
+$LK,"WildMatch",A="FL:::/Kernel/StrA.CPP.Z,656",BI=303$
+$LK,"CDC",A="FL:::/Kernel/KernelA.HPP,3661"$
+$LK,"SC_CURSOR_LEFT",A="FL:::/Kernel/KernelA.HPP,3571"$
+$LK,"IsMute",A="FL:::/Kernel/KMisc.CPP.Z,218",BI=304$
+$LK,"DOCT_CLEAR",A="FL:::/Kernel/KernelA.HPP,908"$
+$LK,"DVDImageWrite",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,147",BI=305$
+$LK,"MouseRst",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,37",BI=306$
+$LK,"HashTypeNum",A="FL:::/Kernel/KHashB.CPP.Z,1",BI=307$
+$LK,"CPUf_DYING_TASK_QUE",A="FL:::/Kernel/KernelA.HPP,3444"$
 $LK,"BDf_READ_ONLY",A="FL:::/Kernel/KernelA.HPP,2649"$
 $LK,"BDF_READ_ONLY",A="FL:::/Kernel/KernelA.HPP,2639"$
-$LK,"DCF_JUST_MIRROR",A="FL:::/Kernel/KernelA.HPP,3637"$
+$LK,"DCF_JUST_MIRROR",A="FL:::/Kernel/KernelA.HPP,3638"$
 $LK,"FSt_UNKNOWN",A="FL:::/Kernel/KernelA.HPP,2693"$
 $LK,"WIG_USER_TASK_DFT",A="FL:::/Kernel/KernelA.HPP,1436"$
-$LK,"sys_cache_line_width",A="FL:::/Kernel/KernelB.HPP,264"$
-$LK,"XchgI64",A="FL:::/Kernel/KernelB.HPP,259"$
-$LK,"SC_CURSOR_DOWN",A="FL:::/Kernel/KernelA.HPP,3569"$
+$LK,"sys_cache_line_width",A="FL:::/Kernel/KernelB.HPP,265"$
+$LK,"XchgI64",A="FL:::/Kernel/KernelB.HPP,260"$
+$LK,"SC_CURSOR_DOWN",A="FL:::/Kernel/KernelA.HPP,3570"$
 $LK,"DOF_DONT_WINMGR_SYNC",A="FL:::/Kernel/KernelA.HPP,1220"$
 $LK,"I_SINGLE_STEP",A="FL:::/Kernel/KernelA.HPP,287"$
-$LK,"KbdMouseRst",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,207",BI=305$
+$LK,"KbdMouseRst",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,207",BI=308$
 $LK,"ATA_WRITE_MULTI",A="FL:::/Kernel/KernelA.HPP,2267"$
 $LK,"DOC_COLOR_KEYWORD",A="FL:::/Kernel/KernelA.HPP,1142"$
-$LK,"XTalkStr",A="FL:::/Kernel/SrvCmd.CPP.Z,490",BI=306$
+$LK,"XTalkStr",A="FL:::/Kernel/SrvCmd.CPP.Z,490",BI=309$
 $LK,"FUF_JUST_GRA",A="FL:::/Kernel/KernelA.HPP,2612"$
 $LK,"FUf_JUST_GRA",A="FL:::/Kernel/KernelA.HPP,2586"$
 $LK,"CCF_IN_QUOTES",A="FL:::/Kernel/KernelA.HPP,2142"$
 $LK,"CFifoU8",A="FL:::/Kernel/KernelA.HPP,170"$
-$LK,"ATAReadNativeMax",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,187",BI=307$
-$LK,"BOOT_SRC_ROM",A="FL:::/Kernel/KernelA.HPP,3890"$
+$LK,"ATAReadNativeMax",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,187",BI=310$
+$LK,"BOOT_SRC_ROM",A="FL:::/Kernel/KernelA.HPP,3891"$
 $LK,"RLF_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HPP,473"$
 $LK,"SYS_KERNEL_END",A="FL:::/Kernel/KEnd.CPP.Z,218"$
 $LK,"TakeExcept",A="FL:::/Kernel/KExcept.CPP.Z,42"$
@@ -1371,23 +1375,23 @@ $LK,"_MALLOC",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,5"$
 $LK,"CHashDefineStr",A="FL:::/Kernel/KernelA.HPP,824"$
 $LK,"MemSet",A="FL:::/Kernel/KernelB.HPP,170"$
 $LK,"_TRUNC",A="FL:::/Kernel/KMathA.CPP.Z,400"$
-$LK,"SPF_SLASH",A="FL:::/Kernel/KernelA.HPP,3923"$
+$LK,"SPF_SLASH",A="FL:::/Kernel/KernelA.HPP,3924"$
 $LK,"HTF_IMM",A="FL:::/Kernel/KernelA.HPP,705"$
 $LK,"FUF_IGNORE",A="FL:::/Kernel/KernelA.HPP,2597"$
 $LK,"FUf_IGNORE",A="FL:::/Kernel/KernelA.HPP,2571"$
 $LK,"AAT_SUB_U32",A="FL:::/Kernel/KernelA.HPP,1974"$
 $LK,"AAT_SUB_U16",A="FL:::/Kernel/KernelA.HPP,1972"$
-$LK,"IP_MOUSE",A="FL:::/Kernel/KernelA.HPP,3043"$
-$LK,"ATAIDDrvs",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,205",BI=308$
-$LK,"UserCmdLine",A="FL:::/Kernel/KTask.CPP.Z,383",BI=309$
+$LK,"IP_MOUSE",A="FL:::/Kernel/KernelA.HPP,3044"$
+$LK,"ATAIDDrvs",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,205",BI=311$
+$LK,"UserCmdLine",A="FL:::/Kernel/KTask.CPP.Z,383",BI=312$
 $LK,"GVF_FUN",A="FL:::/Kernel/KernelA.HPP,866"$
 $LK,"IA32F_LME",A="FL:::/Kernel/KernelA.HPP,519"$
 $LK,"LAPICF_APIC_ENABLED",A="FL:::/Kernel/KernelA.HPP,489"$
 $LK,"RLf_AUTO_COMPLETE",A="FL:::/Kernel/KernelA.HPP,454"$
-$LK,"PCIClassFind",A="FL:::/Kernel/PCIBIOS.CPP.Z,265",BI=310$
+$LK,"PCIClassFind",A="FL:::/Kernel/PCIBIOS.CPP.Z,265",BI=313$
 $LK,"RECALCF_HAS_CURSOR",A="FL:::/Kernel/KernelA.HPP,1350"$
-$LK,"ATARep",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,131",BI=311$
-$LK,"KDInputFilterPutS",A="FL:::/Kernel/KeyDev.CPP.Z,117",BI=312$
+$LK,"ATARep",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,131",BI=314$
+$LK,"KDInputFilterPutS",A="FL:::/Kernel/KeyDev.CPP.Z,117",BI=315$
 $LK,"D3SubEqu",A="FL:::/Kernel/KernelB.HPP,160"$
 $LK,"FUF_JUST_JIT",A="FL:::/Kernel/KernelA.HPP,2611"$
 $LK,"FUf_JUST_JIT",A="FL:::/Kernel/KernelA.HPP,2585"$
@@ -1395,34 +1399,34 @@ $LK,"CAsmIns",A="FL:::/Kernel/KernelA.HPP,1834"$
 $LK,"InU32",A="FL:::/Kernel/KernelB.HPP,76"$
 $LK,"InU16",A="FL:::/Kernel/KernelB.HPP,75"$
 $LK,"TK_IF",A="FL:::/Kernel/KernelA.HPP,2100"$
-$LK,"DOCT_BLINK",A="FL:::/Kernel/KernelA.HPP,922"$
+$LK,"DOCT_BLINK",A="FL:::/Kernel/KernelA.HPP,921"$
 $LK,"U32",A="FL:::/Kernel/KernelA.HPP,78"$
 $LK,"U16",A="FL:::/Kernel/KernelA.HPP,66"$
 $LK,"_XCHG_I64",A="FL:::/Kernel/KUtils.CPP.Z,184"$
-$LK,"ATANop",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,48",BI=313$
-$LK,"TaskDel",A="FL:::/Kernel/KTask.CPP.Z,407",BI=314$
-$LK,"LXchgU8",A="FL:::/Kernel/KernelB.HPP,255"$
+$LK,"ATANop",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,48",BI=316$
+$LK,"TaskDel",A="FL:::/Kernel/KTask.CPP.Z,407",BI=317$
+$LK,"LXchgU8",A="FL:::/Kernel/KernelB.HPP,256"$
 $LK,"AAT_SUB_U64",A="FL:::/Kernel/KernelA.HPP,1976"$
-$LK,"HasLower",A="FL:::/Kernel/FunSeg.CPP.Z,1",BI=315$
+$LK,"HasLower",A="FL:::/Kernel/FunSeg.CPP.Z,1",BI=318$
 $LK,"_CALL",A="FL:::/Kernel/KUtils.CPP.Z,145"$
 $LK,"IA32F_SCE",A="FL:::/Kernel/KernelA.HPP,518"$
 $LK,"MIN_F64",A="FL:::/Kernel/KernelA.HPP,46"$
 $LK,"__LINE__",A="FL:::/Kernel/KernelA.HPP,2027"$
 $LK,"FUF_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HPP,2616"$
-$LK,"KeyDescSet",A="FL:::/Kernel/KeyDev.CPP.Z,56",BI=316$
+$LK,"KeyDescSet",A="FL:::/Kernel/KeyDev.CPP.Z,56",BI=319$
 $LK,"U64",A="FL:::/Kernel/KernelA.HPP,94"$
 $LK,"MIN_I32",A="FL:::/Kernel/KernelA.HPP,31"$
 $LK,"MIN_I16",A="FL:::/Kernel/KernelA.HPP,27"$
-$LK,"FSize",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,1",BI=317$
-$LK,"IntEntrySet",A="FL:::/Kernel/KInts.CPP.Z,102",BI=318$
-$LK,"Mem32DevIns",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,1",BI=319$
-$LK,"SYS_MP_CNT_INITIAL",A="FL:::/Kernel/KStart.CPP.Z,230"$
+$LK,"FSize",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,1",BI=320$
+$LK,"IntEntrySet",A="FL:::/Kernel/KInts.CPP.Z,109",BI=321$
+$LK,"Mem32DevIns",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,1",BI=322$
+$LK,"SYS_MP_CNT_INITIAL",A="FL:::/Kernel/KStart32.CPP.Z,48"$
 $LK,"FUf_FLATTEN_TREE",A="FL:::/Kernel/KernelA.HPP,2590"$
 $LK,"_CEIL",A="FL:::/Kernel/KMathA.CPP.Z,441"$
 $LK,"INVALID_CLUSTER",A="FL:::/Kernel/KernelA.HPP,2300"$
-$LK,"TaskEnd",A="FL:::/Kernel/KTask.CPP.Z,415",BI=320$
+$LK,"TaskEnd",A="FL:::/Kernel/KTask.CPP.Z,415",BI=323$
 $LK,"MIN_I64",A="FL:::/Kernel/KernelA.HPP,35"$
-$LK,"TaskCaller",A="FL:::/Kernel/KDbg.CPP.Z,75",BI=321$
+$LK,"TaskCaller",A="FL:::/Kernel/KDbg.CPP.Z,75",BI=324$
 $LK,"SV_NONE",A="FL:::/Kernel/KernelA.HPP,1743"$
 $LK,"QUE_VECT_U8_CNT",A="FL:::/Kernel/KernelA.HPP,161"$
 $LK,"RT_I0",A="FL:::/Kernel/KernelA.HPP,1553"$
@@ -1431,95 +1435,95 @@ $LK,"TK_DEREFERENCE",A="FL:::/Kernel/KernelA.HPP,2080"$
 $LK,"ARGT_UIMM8",A="FL:::/Kernel/KernelA.HPP,1889"$
 $LK,"DOCF_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1276"$
 $LK,"DOCEf_LEFT_MACRO",A="FL:::/Kernel/KernelA.HPP,1059"$
-$LK,"SYS_GDT",A="FL:::/Kernel/KStart.CPP.Z,41"$
-$LK,"CDate2Dos",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,1",BI=322$
-$LK,"SrvCmdRunOne",A="FL:::/Kernel/SrvCmd.CPP.Z,267",BI=323$
+$LK,"SYS_GDT",A="FL:::/Kernel/KStart16.CPP.Z,39"$
+$LK,"CDate2Dos",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,1",BI=325$
+$LK,"SrvCmdRunOne",A="FL:::/Kernel/SrvCmd.CPP.Z,267",BI=326$
 $LK,"MRT_UNUSED",A="FL:::/Kernel/KernelA.HPP,2864"$
 $LK,"MDG_REG_DISP_SIB",A="FL:::/Kernel/KernelA.HPP,1587"$
-$LK,"RedSeaFilesDel",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,458",BI=324$
-$LK,"XchgU32",A="FL:::/Kernel/KernelB.HPP,261"$
-$LK,"XchgU16",A="FL:::/Kernel/KernelB.HPP,260"$
+$LK,"RedSeaFilesDel",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,458",BI=327$
+$LK,"XchgU32",A="FL:::/Kernel/KernelB.HPP,262"$
+$LK,"XchgU16",A="FL:::/Kernel/KernelB.HPP,261"$
 $LK,"TK_SHL_EQU",A="FL:::/Kernel/KernelA.HPP,2091"$
 $LK,"CCntsGlbls",A="FL:::/Kernel/KernelA.HPP,537"$
-$LK,"TEMP_BUF_LEN",A="FL:::/Kernel/StrPrint.CPP.Z,203"$
-$LK,"LastDayOfMon",A="FL:::/Kernel/KDate.CPP.Z,82",BI=325$
+$LK,"TEMP_BUF_LEN",A="FL:::/Kernel/StrPrint.CPP.Z,205"$
+$LK,"LastDayOfMon",A="FL:::/Kernel/KDate.CPP.Z,82",BI=328$
 $LK,"RT_I8",A="FL:::/Kernel/KernelA.HPP,1555"$
-$LK,"SVCf_WAKE_MASTER",A="FL:::/Kernel/KernelA.HPP,3177"$
+$LK,"SVCf_WAKE_MASTER",A="FL:::/Kernel/KernelA.HPP,3178"$
 $LK,"CAsmNum",A="FL:::/Kernel/KernelA.HPP,1819"$
 $LK,"_REP_OUT_U16",A="FL:::/Kernel/KUtils.CPP.Z,297"$
 $LK,"_REP_OUT_U32",A="FL:::/Kernel/KUtils.CPP.Z,286"$
-$LK,"VGAM_TEXT",A="FL:::/Kernel/KernelA.HPP,3726"$
+$LK,"VGAM_TEXT",A="FL:::/Kernel/KernelA.HPP,3727"$
 $LK,"ACD_POS",A="FL:::/Kernel/KernelA.HPP,1509"$
-$LK,"FirstDayOfMon",A="FL:::/Kernel/KDate.CPP.Z,71",BI=326$
-$LK,"PutChars",A="FL:::/Kernel/KeyDev.CPP.Z,20",BI=327$
+$LK,"FirstDayOfMon",A="FL:::/Kernel/KDate.CPP.Z,71",BI=329$
+$LK,"PutChars",A="FL:::/Kernel/KeyDev.CPP.Z,20",BI=330$
 $LK,"_BEQU",A="FL:::/Kernel/KUtils.CPP.Z,89"$
 $LK,"DOCEf_RAW_TYPE",A="FL:::/Kernel/KernelA.HPP,1064"$
 $LK,"DOCEF_RAW_TYPE",A="FL:::/Kernel/KernelA.HPP,976"$
-$LK,"ansf",A="FL:::/Kernel/KernelA.HPP,3421"$
-$LK,"BlkDevsInitAll",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,216",BI=328$
-$LK,"SysUntry",A="FL:::/Kernel/KExcept.CPP.Z,76",BI=329$
+$LK,"ansf",A="FL:::/Kernel/KernelA.HPP,3422"$
+$LK,"BlkDevsInitAll",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,216",BI=331$
+$LK,"SysUntry",A="FL:::/Kernel/KExcept.CPP.Z,76",BI=332$
 $LK,"WIF_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HPP,1430"$
 $LK,"_MEMCMP",A="FL:::/Kernel/KUtils.CPP.Z,70"$
-$LK,"DISPLAYf_NO_BORDER",A="FL:::/Kernel/KernelA.HPP,3300"$
+$LK,"DISPLAYf_NO_BORDER",A="FL:::/Kernel/KernelA.HPP,3301"$
 $LK,"OFF",A="FL:::/Kernel/KernelA.HPP,22"$
 $LK,"DOCF_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HPP,1278"$
-$LK,"SYS_BOOT_SRC",A="FL:::/Kernel/KStart.CPP.Z,24"$
+$LK,"SYS_BOOT_SRC",A="FL:::/Kernel/KStart16.CPP.Z,23"$
 $LK,"FUF_JUST_SRC",A="FL:::/Kernel/KernelA.HPP,2609"$
 $LK,"FUf_JUST_SRC",A="FL:::/Kernel/KernelA.HPP,2583"$
 $LK,"OC_CALL",A="FL:::/Kernel/KernelA.HPP,1762"$
-$LK,"TaskExe",A="FL:::/Kernel/SrvCmd.CPP.Z,39",BI=330$
-$LK,"ThrowBreak",A="FL:::/Kernel/KExcept.CPP.Z,129",BI=331$
-$LK,"FileWrite",A="FL:::/Kernel/BlkDev/DskFile.CPP.Z,87",BI=332$
-$LK,"ARf_CSPRITE_PTS_RECTANGLES",A="FL:::/Kernel/KernelA.HPP,3905"$
+$LK,"TaskExe",A="FL:::/Kernel/SrvCmd.CPP.Z,39",BI=333$
+$LK,"ThrowBreak",A="FL:::/Kernel/KExcept.CPP.Z,129",BI=334$
+$LK,"FileWrite",A="FL:::/Kernel/BlkDev/DskFile.CPP.Z,87",BI=335$
+$LK,"ARf_CSPRITE_PTS_RECTANGLES",A="FL:::/Kernel/KernelA.HPP,3906"$
 $LK,"RFLAGf_ID",A="FL:::/Kernel/KernelA.HPP,324"$
-$LK,"SCF_E0_PREFIX",A="FL:::/Kernel/KernelA.HPP,3539"$
-$LK,"SCf_E0_PREFIX",A="FL:::/Kernel/KernelA.HPP,3524"$
-$LK,"ATAWaitNotBUSY",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,24",BI=333$
+$LK,"SCF_E0_PREFIX",A="FL:::/Kernel/KernelA.HPP,3540"$
+$LK,"SCf_E0_PREFIX",A="FL:::/Kernel/KernelA.HPP,3525"$
+$LK,"ATAWaitNotBUSY",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,24",BI=336$
 $LK,"_XCHG_U16",A="FL:::/Kernel/KUtils.CPP.Z,200"$
 $LK,"_XCHG_U32",A="FL:::/Kernel/KUtils.CPP.Z,192"$
-$LK,"SUF_TO_LOWER",A="FL:::/Kernel/KernelA.HPP,3798"$
+$LK,"SUF_TO_LOWER",A="FL:::/Kernel/KernelA.HPP,3799"$
 $LK,"ARGT_XMM32",A="FL:::/Kernel/KernelA.HPP,1943"$
 $LK,"WIF_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1418"$
 $LK,"LDF_SILENT",A="FL:::/Kernel/KernelA.HPP,369"$
-$LK,"RED",A="FL:::/Kernel/KernelA.HPP,2961"$
+$LK,"RED",A="FL:::/Kernel/KernelA.HPP,2962"$
 $LK,"RT_U0",A="FL:::/Kernel/KernelA.HPP,1554"$
 $LK,"SYS_SEMA_DEBUG",A="FL:::/Kernel/KernelA.HPP,593"$
-$LK,"SrvCmdDel",A="FL:::/Kernel/SrvCmd.CPP.Z,1",BI=334$
-$LK,"VGAR_MAP_MASK",A="FL:::/Kernel/KernelA.HPP,3744"$
+$LK,"SrvCmdDel",A="FL:::/Kernel/SrvCmd.CPP.Z,1",BI=337$
+$LK,"VGAR_MAP_MASK",A="FL:::/Kernel/KernelA.HPP,3745"$
 $LK,"CAOTCtrl",A="FL:::/Kernel/KernelA.HPP,2051"$
-$LK,"SCF_NEW_KEY",A="FL:::/Kernel/KernelA.HPP,3547"$
+$LK,"SCF_NEW_KEY",A="FL:::/Kernel/KernelA.HPP,3548"$
 $LK,"TASK_CONTEXT_SAVE",A="FL:::/Kernel/Sched.CPP.Z,56"$
-$LK,"SCf_NEW_KEY",A="FL:::/Kernel/KernelA.HPP,3532"$
+$LK,"SCf_NEW_KEY",A="FL:::/Kernel/KernelA.HPP,3533"$
 $LK,"CDirContext",A="FL:::/Kernel/KernelA.HPP,2771"$
-$LK,"BootDVDProbeAll",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,29",BI=335$
-$LK,"SysThrowBreak",A="FL:::/Kernel/KExcept.CPP.Z,115",BI=336$
+$LK,"BootDVDProbeAll",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,29",BI=338$
+$LK,"SysThrowBreak",A="FL:::/Kernel/KExcept.CPP.Z,115",BI=339$
 $LK,"_MEMCPY",A="FL:::/Kernel/KUtils.CPP.Z,55"$
 $LK,"_D3_DIST_SQR",A="FL:::/Kernel/KMathA.CPP.Z,61"$
 $LK,"ARGT_XMM64",A="FL:::/Kernel/KernelA.HPP,1944"$
-$LK,"ATAWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,461",BI=337$
+$LK,"ATAWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,461",BI=340$
 $LK,"RT_U8",A="FL:::/Kernel/KernelA.HPP,1556"$
 $LK,"DOCEf_USER_DATA",A="FL:::/Kernel/KernelA.HPP,1068"$
 $LK,"DOCEF_USER_DATA",A="FL:::/Kernel/KernelA.HPP,980"$
 $LK,"COPY_BUF_BLKS",A="FL:::/Kernel/BlkDev/DskCopy.CPP.Z,22"$
-$LK,"FAT32FileWrite",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,813",BI=338$
+$LK,"FAT32FileWrite",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,813",BI=341$
 $LK,"CISO1Date",A="FL:::/Kernel/KernelA.HPP,2453"$
 $LK,"EDf_BAIL",A="FL:::/Kernel/KernelA.HPP,1252"$
 $LK,"EDF_BAIL",A="FL:::/Kernel/KernelA.HPP,1246"$
-$LK,"ChkCodePtr",A="FL:::/Kernel/KDbg.CPP.Z,16",BI=339$
-$LK,"SYS_RAM_REBOOT",A="FL:::/Kernel/KStart.CPP.Z,353"$
+$LK,"ChkCodePtr",A="FL:::/Kernel/KDbg.CPP.Z,16",BI=342$
+$LK,"SYS_RAM_REBOOT",A="FL:::/Kernel/KStart64.CPP.Z,74"$
 $LK,"ISO1T_BOOT_RECORD",A="FL:::/Kernel/KernelA.HPP,2478"$
-$LK,"FileFind",A="FL:::/Kernel/BlkDev/DskFind.CPP.Z,57",BI=340$
+$LK,"FileFind",A="FL:::/Kernel/BlkDev/DskFind.CPP.Z,57",BI=343$
 $LK,"SYS_FIND_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.CPP.Z,38"$
-$LK,"VGAP_ATTR_DATA_WRITE",A="FL:::/Kernel/KernelA.HPP,3730"$
+$LK,"VGAP_ATTR_DATA_WRITE",A="FL:::/Kernel/KernelA.HPP,3731"$
 $LK,"FUF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HPP,2618"$
 $LK,"TK_MUL_EQU",A="FL:::/Kernel/KernelA.HPP,2093"$
 $LK,"TK_NOT_EQU",A="FL:::/Kernel/KernelA.HPP,2085"$
 $LK,"MIN_U32",A="FL:::/Kernel/KernelA.HPP,33"$
 $LK,"MIN_U16",A="FL:::/Kernel/KernelA.HPP,29"$
-$LK,"CFileNameTo",A="FL:::/Kernel/BlkDev/DskStrB.CPP.Z,1",BI=341$
-$LK,"IntNop",A="FL:::/Kernel/KInts.CPP.Z,136",BI=342$
+$LK,"CFileNameTo",A="FL:::/Kernel/BlkDev/DskStrB.CPP.Z,1",BI=344$
+$LK,"IntNop",A="FL:::/Kernel/KInts.CPP.Z,143",BI=345$
 $LK,"_D3_MUL_EQU",A="FL:::/Kernel/KMathA.CPP.Z,273"$
-$LK,"DISPLAYf_SHOW",A="FL:::/Kernel/KernelA.HPP,3297"$
+$LK,"DISPLAYf_SHOW",A="FL:::/Kernel/KernelA.HPP,3298"$
 $LK,"DOF_DONT_SHOW",A="FL:::/Kernel/KernelA.HPP,1221"$
 $LK,"HTF_PUBLIC",A="FL:::/Kernel/KernelA.HPP,702"$
 $LK,"HTf_PUBLIC",A="FL:::/Kernel/KernelA.HPP,672"$
@@ -1527,49 +1531,49 @@ $LK,"SYS_HASH_SINGLE_TABLE_FIND",A="FL:::/Kernel/KHashA.CPP.Z,41"$
 $LK,"OC_OP_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HPP,1757"$
 $LK,"CCF_UNRESOLVED",A="FL:::/Kernel/KernelA.HPP,2147"$
 $LK,"MLF_FUN",A="FL:::/Kernel/KernelA.HPP,777"$
-$LK,"TaskMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,119",BI=343$
-$LK,"RBlks",A="FL:::/Kernel/BlkDev/DskBlk.CPP.Z,31",BI=344$
+$LK,"TaskMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,119",BI=346$
+$LK,"RBlks",A="FL:::/Kernel/BlkDev/DskBlk.CPP.Z,31",BI=347$
 $LK,"DOCEF_ZERO_BASED",A="FL:::/Kernel/KernelA.HPP,1014"$
 $LK,"HTF_UNRESOLVED",A="FL:::/Kernel/KernelA.HPP,708"$
-$LK,"FAT32Cd",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,399",BI=345$
+$LK,"FAT32Cd",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,399",BI=348$
 $LK,"DOCEf_ZERO_BASED",A="FL:::/Kernel/KernelA.HPP,1100"$
 $LK,"HTf_UNRESOLVED",A="FL:::/Kernel/KernelA.HPP,678"$
 $LK,"CAP16BitInit",A="FL:::/Kernel/KernelA.HPP,525"$
-$LK,"ATAPIWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,535",BI=346$
+$LK,"ATAPIWriteBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,535",BI=349$
 $LK,"cnts",A="FL:::/Kernel/KGlbls.CPP.Z,20"$
 $LK,"chars_bmp_displayable",A="FL:::/Kernel/StrA.CPP.Z,386"$
 $LK,"SYS_HEAP_INIT_FLAG",A="FL::/Temp.TXT.Z,1"$
 $LK,"FUF_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HPP,2617"$
-$LK,"ScanChar",A="FL:::/Kernel/SerialDev/Message.CPP.Z,110",BI=347$
+$LK,"ScanChar",A="FL:::/Kernel/SerialDev/Message.CPP.Z,110",BI=350$
 $LK,"RepInU32",A="FL:::/Kernel/KernelB.HPP,84"$
 $LK,"RepInU16",A="FL:::/Kernel/KernelB.HPP,82"$
 $LK,"loge_2",A="FL:::/Kernel/KernelA.HPP,55"$
 $LK,"MIN_U64",A="FL:::/Kernel/KernelA.HPP,37"$
 $LK,"chars_bmp_white_space",A="FL:::/Kernel/StrA.CPP.Z,356"$
-$LK,"FAT32FileFind",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,298",BI=348$
-$LK,"GSF_SHIFT_ESC_EXIT",A="FL:::/Kernel/KernelA.HPP,3787"$
-$LK,"SFG_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HPP,3808"$
+$LK,"FAT32FileFind",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,298",BI=351$
+$LK,"GSF_SHIFT_ESC_EXIT",A="FL:::/Kernel/KernelA.HPP,3788"$
+$LK,"SFG_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HPP,3809"$
 $LK,"FUf_WHOLE_LABELS",A="FL:::/Kernel/KernelA.HPP,2591"$
 $LK,"DOCf_DO_FULL_REFRESH",A="FL:::/Kernel/KernelA.HPP,1314"$
 $LK,"DOCf_DONT_SHOW",A="FL:::/Kernel/KernelA.HPP,1308"$
 $LK,"DOCF_DONT_SHOW",A="FL:::/Kernel/KernelA.HPP,1272"$
-$LK,"DirTreeDel2",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,49",BI=349$
+$LK,"DirTreeDel2",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,49",BI=352$
 $LK,"FUF_JUST_TXT",A="FL:::/Kernel/KernelA.HPP,2608"$
 $LK,"FUf_JUST_TXT",A="FL:::/Kernel/KernelA.HPP,2582"$
-$LK,"DOCT_DFT_BACKGROUND",A="FL:::/Kernel/KernelA.HPP,917"$
-$LK,"DOCT_DFT_FOREGROUND",A="FL:::/Kernel/KernelA.HPP,916"$
-$LK,"BOOT_SRC_HARDDRV",A="FL:::/Kernel/KernelA.HPP,3892"$
+$LK,"DOCT_DFT_BACKGROUND",A="FL:::/Kernel/KernelA.HPP,918"$
+$LK,"DOCT_DFT_FOREGROUND",A="FL:::/Kernel/KernelA.HPP,917"$
+$LK,"BOOT_SRC_HARDDRV",A="FL:::/Kernel/KernelA.HPP,3893"$
 $LK,"HashFind",A="FL:::/Kernel/KHashA.CPP.Z,255"$
 $LK,"D3Cross",A="FL:::/Kernel/KernelB.HPP,148"$
 $LK,"MAX_PTR_STARS",A="FL:::/Kernel/KernelA.HPP,771"$
 $LK,"DOCEF_ESC",A="FL:::/Kernel/KernelA.HPP,999"$
 $LK,"_FREE",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,224"$
-$LK,"SrcLineNum",A="FL:::/Kernel/FunSeg.CPP.Z,184",BI=350$
-$LK,"ATAPIClose",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,521",BI=351$
-$LK,"DOCT_MACRO",A="FL:::/Kernel/KernelA.HPP,932"$
-$LK,"CH_SHIFT_ESC",A="FL:::/Kernel/KernelA.HPP,3516"$
-$LK,"InDbg",A="FL:::/Kernel/KMisc.CPP.Z,260",BI=352$
-$LK,"Dbg",A="FL:::/Kernel/KDbg.CPP.Z,634",BI=353$
+$LK,"SrcLineNum",A="FL:::/Kernel/FunSeg.CPP.Z,184",BI=353$
+$LK,"ATAPIClose",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,521",BI=354$
+$LK,"DOCT_MACRO",A="FL:::/Kernel/KernelA.HPP,933"$
+$LK,"CH_SHIFT_ESC",A="FL:::/Kernel/KernelA.HPP,3517"$
+$LK,"InDbg",A="FL:::/Kernel/KMisc.CPP.Z,265",BI=355$
+$LK,"Dbg",A="FL:::/Kernel/KDbg.CPP.Z,634",BI=356$
 $LK,"Abs",A="FL:::/Kernel/KernelB.HPP,96"$
 $LK,"CDATE_YEAR_DAYS",A="FL:::/Kernel/KernelA.HPP,182"$
 $LK,"RFLAGf_OVERFLOW",A="FL:::/Kernel/KernelA.HPP,315"$
@@ -1578,22 +1582,21 @@ $LK,"StrNICmp",A="FL:::/Kernel/StrA.CPP.Z,315"$
 $LK,"DOCf_NULL_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1312"$
 $LK,"DOCEf_RIGHT_X",A="FL:::/Kernel/KernelA.HPP,1077"$
 $LK,"DOCEF_RIGHT_X",A="FL:::/Kernel/KernelA.HPP,989"$
-$LK,"DCF_FILL_NOT_COLOR",A="FL:::/Kernel/KernelA.HPP,3643"$
+$LK,"DCF_FILL_NOT_COLOR",A="FL:::/Kernel/KernelA.HPP,3644"$
 $LK,"DOCEF_LEN",A="FL:::/Kernel/KernelA.HPP,966"$
-$LK,"FileAttr",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,234",BI=354$
+$LK,"FileAttr",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,234",BI=357$
 $LK,"_MEMSET",A="FL:::/Kernel/KUtils.CPP.Z,3"$
-$LK,"ROP_COLLISION",A="FL:::/Kernel/KernelA.HPP,2943"$
+$LK,"ROP_COLLISION",A="FL:::/Kernel/KernelA.HPP,2944"$
 $LK,"TK_PLUS_PLUS",A="FL:::/Kernel/KernelA.HPP,2078"$
-$LK,"sys_heap_init_val",A="FL:::/Kernel/KernelB.HPP,181"$
-$LK,"MemVGAAlloc",A="FL:::/Kernel/Mem/MemPhysical.CPP.Z,156",BI=355$
+$LK,"sys_heap_init_val",A="FL:::/Kernel/KernelB.HPP,182"$
 $LK,"DOCEF_DEREF_DATA",A="FL:::/Kernel/KernelA.HPP,1011"$
-$LK,"VGAP_REG_WRITE",A="FL:::/Kernel/KernelA.HPP,3737"$
+$LK,"VGAP_REG_WRITE",A="FL:::/Kernel/KernelA.HPP,3738"$
 $LK,"FUF_EXPAND",A="FL:::/Kernel/KernelA.HPP,2604"$
 $LK,"FUf_EXPAND",A="FL:::/Kernel/KernelA.HPP,2578"$
 $LK,"DOCEf_DEREF_DATA",A="FL:::/Kernel/KernelA.HPP,1097"$
-$LK,"Del",A="FL:::/Kernel/BlkDev/DskCopy.CPP.Z,82",BI=356$
+$LK,"Del",A="FL:::/Kernel/BlkDev/DskCopy.CPP.Z,82",BI=358$
 $LK,"IDTET_TASK",A="FL:::/Kernel/KernelA.HPP,280"$
-$LK,"TaskValidate",A="FL:::/Kernel/KTask.CPP.Z,19",BI=357$
+$LK,"TaskValidate",A="FL:::/Kernel/KTask.CPP.Z,19",BI=359$
 $LK,"LAPIC_ARIBITRATION_PRIORITY",A="FL:::/Kernel/KernelA.HPP,482"$
 $LK,"fp_set_std_palette",A="FL:::/Kernel/KGlbls.CPP.Z,34"$
 $LK,"keydev",A="FL:::/Kernel/KGlbls.CPP.Z,26"$
@@ -1602,413 +1605,413 @@ $LK,"OCF_ALIAS",A="FL:::/Kernel/KernelA.HPP,1949"$
 $LK,"IC_BODY_SIZE",A="FL:::/Kernel/KernelA.HPP,1623"$
 $LK,"chars_bmp_alpha_numeric",A="FL:::/Kernel/StrA.CPP.Z,330"$
 $LK,"_LOG2",A="FL:::/Kernel/KMathA.CPP.Z,603"$
-$LK,"ROPB_COLLISION",A="FL:::/Kernel/KernelA.HPP,2934"$
+$LK,"ROPB_COLLISION",A="FL:::/Kernel/KernelA.HPP,2935"$
 $LK,"HTT_WORD",A="FL:::/Kernel/KernelA.HPP,689"$
 $LK,"HTt_WORD",A="FL:::/Kernel/KernelA.HPP,659"$
 $LK,"FUG_FILE_FIND",A="FL:::/Kernel/KernelA.HPP,2624"$
 $LK,"I_PAGE_FAULT",A="FL:::/Kernel/KernelA.HPP,290"$
-$LK,"DrvUnlock",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,14",BI=358$
-$LK,"CProgress",A="FL:::/Kernel/KernelA.HPP,3911"$
+$LK,"DrvUnlock",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,14",BI=360$
+$LK,"CProgress",A="FL:::/Kernel/KernelA.HPP,3912"$
 $LK,"Arg",A="FL:::/Kernel/KernelB.HPP,122"$
 $LK,"FSt_ISO9660",A="FL:::/Kernel/KernelA.HPP,2689"$
 $LK,"CallExtNum",A="FL:::/Kernel/KernelB.HPP,55"$
-$LK,"DirFile",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,290",BI=359$
+$LK,"DirFile",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,290",BI=361$
 $LK,"DOCEF_TAG",A="FL:::/Kernel/KernelA.HPP,965"$
 $LK,"Btc",A="FL:::/Kernel/KernelB.HPP,16"$
 $LK,"CCF_KEEP_NEW_LINES",A="FL:::/Kernel/KernelA.HPP,2135"$
 $LK,"MDF_RIP_DISP32",A="FL:::/Kernel/KernelA.HPP,1585"$
-$LK,"Dir",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,105",BI=360$
+$LK,"Dir",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,105",BI=362$
 $LK,"Bsf",A="FL:::/Kernel/KernelB.HPP,10"$
 $LK,"MDf_RIP_DISP32",A="FL:::/Kernel/KernelA.HPP,1577"$
 $LK,"ECF_HAS_PUSH_CMP",A="FL:::/Kernel/KernelA.HPP,1625"$
 $LK,"WIf_SELF_GRAB_SCROLL",A="FL:::/Kernel/KernelA.HPP,1444"$
-$LK,"DOCT_PAGE_BREAK",A="FL:::/Kernel/KernelA.HPP,907"$
+$LK,"DOCT_PAGE_BREAK",A="FL:::/Kernel/KernelA.HPP,904"$
 $LK,"SYS_SEMA_RECORD_MACRO",A="FL:::/Kernel/KernelA.HPP,594"$
-$LK,"IPVarsUpdate",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,9",BI=361$
+$LK,"IPVarsUpdate",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,9",BI=363$
 $LK,"MLF_LASTCLASS",A="FL:::/Kernel/KernelA.HPP,775"$
-$LK,"_R8",A="FL:::/Kernel/KernelA.HPP,3432"$
-$LK,"_R9",A="FL:::/Kernel/KernelA.HPP,3433"$
-$LK,"FileRead",A="FL:::/Kernel/BlkDev/DskFile.CPP.Z,1",BI=362$
+$LK,"_R8",A="FL:::/Kernel/KernelA.HPP,3433"$
+$LK,"_R9",A="FL:::/Kernel/KernelA.HPP,3434"$
+$LK,"FileRead",A="FL:::/Kernel/BlkDev/DskFile.CPP.Z,1",BI=364$
 $LK,"DOCf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1318"$
 $LK,"DOCF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1281"$
-$LK,"DOCT_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,940"$
+$LK,"DOCT_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,920"$
 $LK,"_FAR_CALL32",A="FL:::/Kernel/PCIBIOS.CPP.Z,69"$
-$LK,"KbdMouseCmdAck",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,65",BI=363$
+$LK,"KbdMouseCmdAck",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,65",BI=365$
 $LK,"CAOTHeapGlblRef",A="FL:::/Kernel/KernelA.HPP,1984"$
 $LK,"DOCEF_SEL",A="FL:::/Kernel/KernelA.HPP,1043"$
 $LK,"IEF_IMM_NOT_REL",A="FL:::/Kernel/KernelA.HPP,404"$
-$LK,"FAT32DirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,241",BI=364$
-$LK,"QueCopy",A="FL:::/Kernel/KDataTypes.CPP.Z,53",BI=365$
-$LK,"Carry",A="FL:::/Kernel/KernelB.HPP,239"$
+$LK,"FAT32DirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,241",BI=366$
+$LK,"QueCopy",A="FL:::/Kernel/KDataTypes.CPP.Z,53",BI=367$
+$LK,"Carry",A="FL:::/Kernel/KernelB.HPP,240"$
 $LK,"Cos",A="FL:::/Kernel/KernelB.HPP,98"$
-$LK,"Clamp",A="FL:::/Kernel/KMathB.CPP.Z,1",BI=366$
+$LK,"Clamp",A="FL:::/Kernel/KMathB.CPP.Z,1",BI=368$
 $LK,"BDF_FMT",A="FL:::/Kernel/KernelA.HPP,2643"$
-$LK,"Name2DirCluster",A="FL:::/Kernel/BlkDev/DskStrB.CPP.Z,10",BI=367$
+$LK,"Name2DirCluster",A="FL:::/Kernel/BlkDev/DskStrB.CPP.Z,10",BI=369$
 $LK,"Bsr",A="FL:::/Kernel/KernelB.HPP,12"$
-$LK,"SYS_PROGRESS1_MAX",A="FL:::/Kernel/KStart.CPP.Z,214"$
-$LK,"GR_Z_ALL",A="FL:::/Kernel/KernelA.HPP,3622"$
+$LK,"SYS_PROGRESS1_MAX",A="FL:::/Kernel/KStart32.CPP.Z,32"$
+$LK,"GR_Z_ALL",A="FL:::/Kernel/KernelA.HPP,3623"$
 $LK,"CMasterBoot",A="FL:::/Kernel/KernelA.HPP,2314"$
-$LK,"Fix",A="FL:::/Kernel/EdLite.CPP.Z,337",BI=368$
+$LK,"Fix",A="FL:::/Kernel/EdLite.CPP.Z,337",BI=370$
 $LK,"Btr",A="FL:::/Kernel/KernelB.HPP,18"$
 $LK,"_LN",A="FL:::/Kernel/KMathA.CPP.Z,614"$
 $LK,"OPTf_WARN_UNUSED_VAR",A="FL:::/Kernel/KernelA.HPP,1538"$
 $LK,"DOCF_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1290"$
 $LK,"RFLAGf_CARRY",A="FL:::/Kernel/KernelA.HPP,307"$
-$LK,"FAT32FileRead",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,367",BI=369$
-$LK,"DirFilesFlatten",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,136",BI=370$
-$LK,"FileExtDot",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,1",BI=371$
-$LK,"IsDbg",A="FL:::/Kernel/KMisc.CPP.Z,265",BI=372$
+$LK,"FAT32FileRead",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,367",BI=371$
+$LK,"DirFilesFlatten",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,136",BI=372$
+$LK,"FileExtDot",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,1",BI=373$
+$LK,"IsDbg",A="FL:::/Kernel/KMisc.CPP.Z,270",BI=374$
 $LK,"Bts",A="FL:::/Kernel/KernelB.HPP,20"$
 $LK,"CMemBlk",A="FL:::/Kernel/KernelA.HPP,2858"$
 $LK,"DOCEF_LST",A="FL:::/Kernel/KernelA.HPP,1017"$
-$LK,"Man",A="FL:::/Kernel/FunSeg.CPP.Z,324",BI=373$
-$LK,"Mem512Alloc",A="FL:::/Kernel/Mem/Mem512.CPP.Z,11",BI=374$
+$LK,"Man",A="FL:::/Kernel/FunSeg.CPP.Z,324",BI=375$
+$LK,"Mem512Alloc",A="FL:::/Kernel/Mem/Mem512.CPP.Z,11",BI=376$
 $LK,"TK_SHR_EQU",A="FL:::/Kernel/KernelA.HPP,2092"$
 $LK,"CDATE_FREQ",A="FL:::/Kernel/KernelA.HPP,551"$
-$LK,"FilesFind",A="FL:::/Kernel/BlkDev/DskFind.CPP.Z,30",BI=375$
+$LK,"FilesFind",A="FL:::/Kernel/BlkDev/DskFind.CPP.Z,30",BI=377$
 $LK,"_HASH_FIND",A="FL:::/Kernel/KHashA.CPP.Z,129"$
 $LK,"MSize",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,384"$
-$LK,"CSysFixedArea",A="FL:::/Kernel/KernelA.HPP,3472"$
-$LK,"Fmt",A="FL:::/Kernel/BlkDev/DskFmt.CPP.Z,53",BI=376$
-$LK,"ExeCmdLine",A="FL:::/Kernel/KTask.CPP.Z,270",BI=377$
+$LK,"CSysFixedArea",A="FL:::/Kernel/KernelA.HPP,3474"$
+$LK,"Fmt",A="FL:::/Kernel/BlkDev/DskFmt.CPP.Z,53",BI=378$
+$LK,"ExeCmdLine",A="FL:::/Kernel/KTask.CPP.Z,270",BI=379$
 $LK,"Log10",A="FL:::/Kernel/KernelB.HPP,135"$
-$LK,"FifoI64Flush",A="FL:::/Kernel/KDataTypes.CPP.Z,304",BI=378$
-$LK,"InvlPg",A="FL:::/Kernel/KernelB.HPP,272"$
+$LK,"FifoI64Flush",A="FL:::/Kernel/KDataTypes.CPP.Z,304",BI=380$
+$LK,"InvlPg",A="FL:::/Kernel/KernelB.HPP,273"$
 $LK,"CallExtStr",A="FL:::/Kernel/KernelB.HPP,46"$
-$LK,"VGAM_GRAPHICS",A="FL:::/Kernel/KernelA.HPP,3725"$
-$LK,"DCF_LOCATE_NEAREST",A="FL:::/Kernel/KernelA.HPP,3639"$
+$LK,"VGAM_GRAPHICS",A="FL:::/Kernel/KernelA.HPP,3726"$
+$LK,"DCF_LOCATE_NEAREST",A="FL:::/Kernel/KernelA.HPP,3640"$
 $LK,"Ff_ARGPOP",A="FL:::/Kernel/KernelA.HPP,849"$
-$LK,"SCF_ALT",A="FL:::/Kernel/KernelA.HPP,3543"$
-$LK,"CViewAngles",A="FL:::/Kernel/KernelA.HPP,3106"$
+$LK,"SCF_ALT",A="FL:::/Kernel/KernelA.HPP,3544"$
+$LK,"CViewAngles",A="FL:::/Kernel/KernelA.HPP,3107"$
 $LK,"CArrayDim",A="FL:::/Kernel/KernelA.HPP,782"$
 $LK,"DOCEf_NUM_FLAGS",A="FL:::/Kernel/KernelA.HPP,1112"$
 $LK,"Ff_INTERNAL",A="FL:::/Kernel/KernelA.HPP,851"$
-$LK,"Drv",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,253",BI=379$
+$LK,"Drv",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,253",BI=381$
 $LK,"Fclex",A="FL:::/Kernel/KernelB.HPP,129"$
 $LK,"MDF_DISP",A="FL:::/Kernel/KernelA.HPP,1583"$
 $LK,"MDf_DISP",A="FL:::/Kernel/KernelA.HPP,1575"$
-$LK,"Blink",A="FL:::/Kernel/KMisc.CPP.Z,125",BI=380$
+$LK,"Blink",A="FL:::/Kernel/KMisc.CPP.Z,130",BI=382$
 $LK,"CDbgInfo",A="FL:::/Kernel/KernelA.HPP,718"$
 $LK,"IET_ZEROED_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,414"$
 $LK,"RFLAGf_V8086",A="FL:::/Kernel/KernelA.HPP,320"$
 $LK,"IDTET_TRAP",A="FL:::/Kernel/KernelA.HPP,282"$
-$LK,"SetRBP",A="FL:::/Kernel/KernelB.HPP,247"$
-$LK,"LTGREEN",A="FL:::/Kernel/KernelA.HPP,2967"$
+$LK,"SetRBP",A="FL:::/Kernel/KernelB.HPP,248"$
+$LK,"LTGREEN",A="FL:::/Kernel/KernelA.HPP,2968"$
 $LK,"DOCf_BLINK",A="FL:::/Kernel/KernelA.HPP,1320"$
 $LK,"DOCF_BLINK",A="FL:::/Kernel/KernelA.HPP,1283"$
 $LK,"DOCEf_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1045"$
 $LK,"DOCEF_HIGHLIGHT",A="FL:::/Kernel/KernelA.HPP,1039"$
-$LK,"SysSymImportsResolve",A="FL:::/Kernel/KLoad.CPP.Z,55",BI=381$
+$LK,"SysSymImportsResolve",A="FL:::/Kernel/KLoad.CPP.Z,55",BI=383$
 $LK,"RS_ATTR_HIDDEN",A="FL:::/Kernel/KernelA.HPP,2527"$
 $LK,"TaskEndNow",A="FL:::/Kernel/Sched.CPP.Z,285"$
-$LK,"Max",A="FL:::/Kernel/KMathB.CPP.Z,18",BI=382$
+$LK,"Max",A="FL:::/Kernel/KMathB.CPP.Z,18",BI=384$
 $LK,"SYS_HASH_FIND",A="FL:::/Kernel/KHashA.CPP.Z,89"$
-$LK,"ROPF_DITHER",A="FL:::/Kernel/KernelA.HPP,2952"$
+$LK,"ROPF_DITHER",A="FL:::/Kernel/KernelA.HPP,2953"$
 $LK,"ICF_PREV_DELETED",A="FL:::/Kernel/KernelA.HPP,1619"$
 $LK,"WIG_DBL_CLICK",A="FL:::/Kernel/KernelA.HPP,1433"$
 $LK,"SYS_SEMA_FIX",A="FL:::/Kernel/KernelA.HPP,614"$
 $LK,"ToF64",A="FL:::/Kernel/KernelB.HPP,120"$
-$LK,"SYS_PROGRESS2_MAX",A="FL:::/Kernel/KStart.CPP.Z,217"$
-$LK,"CH_SHIFT_SPACE",A="FL:::/Kernel/KernelA.HPP,3517"$
-$LK,"ROPBF_DITHER",A="FL:::/Kernel/KernelA.HPP,2938"$
+$LK,"SYS_PROGRESS2_MAX",A="FL:::/Kernel/KStart32.CPP.Z,35"$
+$LK,"CH_SHIFT_SPACE",A="FL:::/Kernel/KernelA.HPP,3518"$
+$LK,"ROPBF_DITHER",A="FL:::/Kernel/KernelA.HPP,2939"$
 $LK,"FF_WRITE",A="FL:::/Kernel/KernelA.HPP,2780"$
-$LK,"SetRAX",A="FL:::/Kernel/KernelB.HPP,246"$
-$LK,"Min",A="FL:::/Kernel/KMathB.CPP.Z,10",BI=383$
-$LK,"mp_cnt",A="FL:::/Kernel/KernelB.HPP,227"$
+$LK,"SetRAX",A="FL:::/Kernel/KernelB.HPP,247"$
+$LK,"Min",A="FL:::/Kernel/KMathB.CPP.Z,10",BI=385$
+$LK,"mp_cnt",A="FL:::/Kernel/KernelB.HPP,228"$
 $LK,"Exp",A="FL:::/Kernel/KernelB.HPP,128"$
-$LK,"DCF_RECORD_EXTENTS",A="FL:::/Kernel/KernelA.HPP,3644"$
-$LK,"FAT32FilesFind",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,846",BI=384$
-$LK,"ISO1Cd",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,159",BI=385$
+$LK,"DCF_RECORD_EXTENTS",A="FL:::/Kernel/KernelA.HPP,3645"$
+$LK,"FAT32FilesFind",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,846",BI=386$
+$LK,"ISO1Cd",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,159",BI=387$
 $LK,"_HASH_ADD_AFTER",A="FL:::/Kernel/KHashA.CPP.Z,191"$
 $LK,"QueInit",A="FL:::/Kernel/KernelB.HPP,66"$
-$LK,"SrvTaskCont",A="FL:::/Kernel/KTask.CPP.Z,336",BI=386$
+$LK,"SrvTaskCont",A="FL:::/Kernel/KTask.CPP.Z,336",BI=388$
 $LK,"RS_ATTR_READ_ONLY",A="FL:::/Kernel/KernelA.HPP,2526"$
 $LK,"ICF_USE_UNSIGNED",A="FL:::/Kernel/KernelA.HPP,1598"$
-$LK,"ATAGetDevId",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,163",BI=387$
-$LK,"WBlks",A="FL:::/Kernel/BlkDev/DskBlk.CPP.Z,71",BI=388$
+$LK,"ATAGetDevId",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,163",BI=389$
+$LK,"WBlks",A="FL:::/Kernel/BlkDev/DskBlk.CPP.Z,71",BI=390$
 $LK,"DOCT_ERROR",A="FL:::/Kernel/KernelA.HPP,942"$
-$LK,"CopySingle",A="FL:::/Kernel/BlkDev/DskCopy.CPP.Z,23",BI=389$
+$LK,"CopySingle",A="FL:::/Kernel/BlkDev/DskCopy.CPP.Z,23",BI=391$
 $LK,"EXT_WIN_TO_TOP",A="FL:::/Kernel/KernelA.HPP,575"$
-$LK,"MouseIPSet",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,195",BI=390$
-$LK,"ATAPIReadCapacity",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,253",BI=391$
-$LK,"MkDir",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,165",BI=392$
-$LK,"IsDir",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,90",BI=393$
-$LK,"SetMSR",A="FL:::/Kernel/KernelB.HPP,257"$
+$LK,"MouseIPSet",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,195",BI=392$
+$LK,"ATAPIReadCapacity",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,253",BI=393$
+$LK,"MkDir",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,165",BI=394$
+$LK,"IsDir",A="FL:::/Kernel/BlkDev/DskDirB.CPP.Z,90",BI=395$
+$LK,"SetMSR",A="FL:::/Kernel/KernelB.HPP,258"$
 $LK,"ToI64",A="FL:::/Kernel/KernelB.HPP,121"$
 $LK,"IET_MAIN",A="FL:::/Kernel/KernelA.HPP,415"$
-$LK,"ScanCode2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,248",BI=394$
+$LK,"ScanCode2KeyName",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,248",BI=396$
 $LK,"DOCf_INVERT",A="FL:::/Kernel/KernelA.HPP,1321"$
 $LK,"DOCF_INVERT",A="FL:::/Kernel/KernelA.HPP,1284"$
-$LK,"sys_heap_limit",A="FL:::/Kernel/KernelB.HPP,193"$
-$LK,"FileExtRem",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,10",BI=395$
+$LK,"sys_heap_limit",A="FL:::/Kernel/KernelB.HPP,194"$
+$LK,"FileExtRem",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,10",BI=397$
 $LK,"Tan",A="FL:::/Kernel/KernelB.HPP,118"$
-$LK,"SYS_PROGRESS3_MAX",A="FL:::/Kernel/KStart.CPP.Z,220"$
-$LK,"SUF_REM_LEADING",A="FL:::/Kernel/KernelA.HPP,3793"$
+$LK,"SYS_PROGRESS3_MAX",A="FL:::/Kernel/KStart32.CPP.Z,38"$
+$LK,"SUF_REM_LEADING",A="FL:::/Kernel/KernelA.HPP,3794"$
 $LK,"OPTf_USE_IMM64",A="FL:::/Kernel/KernelA.HPP,1547"$
-$LK,"Raw",A="FL:::/Kernel/KMisc.CPP.Z,238",BI=396$
-$LK,"Msg",A="FL:::/Kernel/SrvCmd.CPP.Z,257",BI=397$
+$LK,"Raw",A="FL:::/Kernel/KMisc.CPP.Z,243",BI=398$
+$LK,"Msg",A="FL:::/Kernel/SrvCmd.CPP.Z,257",BI=399$
 $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="FL:::/Kernel/KernelA.HPP,1544"$
-$LK,"KbdInit",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,424",BI=398$
+$LK,"KbdInit",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,424",BI=400$
 $LK,"chars_bmp_zero_tab_ff_cr_nl_cursor_dollar",A="FL:::/Kernel/StrA.CPP.Z,368"$
 $LK,"ToBool",A="FL:::/Kernel/KernelB.HPP,119"$
-$LK,"TASKf_KILL_AFTER_DBG",A="FL:::/Kernel/KernelA.HPP,3293"$
-$LK,"IRQMouse",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,13",BI=399$
+$LK,"TASKf_KILL_AFTER_DBG",A="FL:::/Kernel/KernelA.HPP,3294"$
+$LK,"IRQMouse",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,13",BI=401$
 $LK,"PUT_HEX_U16",A="FL:::/Kernel/StrA.CPP.Z,37"$
 $LK,"PUT_HEX_U32",A="FL:::/Kernel/StrA.CPP.Z,30"$
-$LK,"ATAPIStartStop",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,144",BI=400$
+$LK,"ATAPIStartStop",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,144",BI=402$
 $LK,"_SIGN",A="FL:::/Kernel/KMathA.CPP.Z,347"$
 $LK,"REGT_R8",A="FL:::/Kernel/KernelA.HPP,739"$
 $LK,"log10_2",A="FL:::/Kernel/KernelA.HPP,54"$
-$LK,"PrintErr",A="FL:::/Kernel/StrPrint.CPP.Z,904",BI=401$
-$LK,"ROPF_TWO_SIDED",A="FL:::/Kernel/KernelA.HPP,2949"$
+$LK,"PrintErr",A="FL:::/Kernel/StrPrint.CPP.Z,906",BI=403$
+$LK,"ROPF_TWO_SIDED",A="FL:::/Kernel/KernelA.HPP,2950"$
 $LK,"BDF_READ_CACHE",A="FL:::/Kernel/KernelA.HPP,2642"$
-$LK,"SCF_INS",A="FL:::/Kernel/KernelA.HPP,3551"$
-$LK,"CPUf_RAN_A_TASK",A="FL:::/Kernel/KernelA.HPP,3442"$
+$LK,"SCF_INS",A="FL:::/Kernel/KernelA.HPP,3552"$
+$LK,"CPUf_RAN_A_TASK",A="FL:::/Kernel/KernelA.HPP,3443"$
 $LK,"BDf_READ_CACHE",A="FL:::/Kernel/KernelA.HPP,2652"$
-$LK,"Snd",A="FL:::/Kernel/KMisc.CPP.Z,158",BI=402$
-$LK,"GetChar",A="FL:::/Kernel/SerialDev/Message.CPP.Z,182",BI=403$
+$LK,"Snd",A="FL:::/Kernel/KMisc.CPP.Z,163",BI=404$
+$LK,"GetChar",A="FL:::/Kernel/SerialDev/Message.CPP.Z,182",BI=405$
 $LK,"Sin",A="FL:::/Kernel/KernelB.HPP,105"$
-$LK,"SPF_PAD_ZERO",A="FL:::/Kernel/KernelA.HPP,3918"$
+$LK,"SPF_PAD_ZERO",A="FL:::/Kernel/KernelA.HPP,3919"$
 $LK,"TK_OR_OR",A="FL:::/Kernel/KernelA.HPP,2089"$
 $LK,"SYS_PCIBIOS_SERVICE_CALL",A="FL:::/Kernel/PCIBIOS.CPP.Z,46"$
-$LK,"Now",A="FL:::/Kernel/KDate.CPP.Z,191",BI=404$
+$LK,"Now",A="FL:::/Kernel/KDate.CPP.Z,191",BI=406$
 $LK,"Fldcw",A="FL:::/Kernel/KernelB.HPP,130"$
-$LK,"TTS_ED_FILENAME",A="FL:::/Kernel/KernelA.HPP,3277"$
+$LK,"TTS_ED_FILENAME",A="FL:::/Kernel/KernelA.HPP,3278"$
 $LK,"WIf_FOCUS_TASK_BORDER",A="FL:::/Kernel/KernelA.HPP,1455"$
 $LK,"IA32_EFER",A="FL:::/Kernel/KernelA.HPP,521"$
-$LK,"SetRSP",A="FL:::/Kernel/KernelB.HPP,249"$
-$LK,"Pop",A="FL:::/Kernel/KernelB.HPP,244"$
-$LK,"sys_progresses",A="FL:::/Kernel/KernelB.HPP,222"$
-$LK,"CMenuEntry",A="FL:::/Kernel/KernelA.HPP,3138"$
+$LK,"SetRSP",A="FL:::/Kernel/KernelB.HPP,250"$
+$LK,"Pop",A="FL:::/Kernel/KernelB.HPP,245"$
+$LK,"sys_progresses",A="FL:::/Kernel/KernelB.HPP,223"$
+$LK,"CMenuEntry",A="FL:::/Kernel/KernelA.HPP,3139"$
 $LK,"OC_NOP2",A="FL:::/Kernel/KernelA.HPP,1764"$
-$LK,"DOCT_RIGHT_MARGIN",A="FL:::/Kernel/KernelA.HPP,910"$
+$LK,"DOCT_RIGHT_MARGIN",A="FL:::/Kernel/KernelA.HPP,911"$
 $LK,"PUT_HEX_U64",A="FL:::/Kernel/StrA.CPP.Z,23"$
-$LK,"SYS_KERNEL",A="FL:::/Kernel/KStart.CPP.Z,18"$
+$LK,"SYS_KERNEL",A="FL:::/Kernel/KStart16.CPP.Z,17"$
 $LK,"RFLAGf_PARITY",A="FL:::/Kernel/KernelA.HPP,308"$
-$LK,"SYS_PROGRESS4_MAX",A="FL:::/Kernel/KStart.CPP.Z,223"$
-$LK,"SUF_TO_UPPER",A="FL:::/Kernel/KernelA.HPP,3797"$
+$LK,"SYS_PROGRESS4_MAX",A="FL:::/Kernel/KStart32.CPP.Z,41"$
+$LK,"SUF_TO_UPPER",A="FL:::/Kernel/KernelA.HPP,3798"$
 $LK,"MBR_PT_REDSEA",A="FL:::/Kernel/KernelA.HPP,2707"$
 $LK,"MBR_PT_NTFS",A="FL:::/Kernel/KernelA.HPP,2706"$
-$LK,"MouseHandler",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,158",BI=405$
-$LK,"SCF_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3548"$
-$LK,"SCf_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3533"$
-$LK,"MSG_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3229"$
+$LK,"MouseHandler",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,158",BI=407$
+$LK,"SCF_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3549"$
+$LK,"SCf_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3534"$
+$LK,"MSG_IP_L_DOWN",A="FL:::/Kernel/KernelA.HPP,3230"$
 $LK,"LAPIC_TASK_PRIORITY",A="FL:::/Kernel/KernelA.HPP,481"$
 $LK,"REGT_MM",A="FL:::/Kernel/KernelA.HPP,745"$
 $LK,"DOCEf_POPUP",A="FL:::/Kernel/KernelA.HPP,1105"$
 $LK,"DOCEF_POPUP",A="FL:::/Kernel/KernelA.HPP,1019"$
 $LK,"SYS_SEMA_VGA",A="FL:::/Kernel/KernelA.HPP,607"$
 $LK,"ODEF_PAUSED",A="FL:::/Kernel/KernelA.HPP,241"$
-$LK,"FATNameXSum",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,157",BI=406$
+$LK,"FATNameXSum",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,157",BI=408$
 $LK,"Pow",A="FL:::/Kernel/KernelB.HPP,137"$
 $LK,"sys_boot_patch_table_base",A="FL:::/Kernel/KernelB.HPP,39"$
-$LK,"SPF_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3922"$
+$LK,"SPF_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3923"$
 $LK,"WIF_SELF_BORDER",A="FL:::/Kernel/KernelA.HPP,1417"$
 $LK,"DOCF_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HPP,1292"$
-$LK,"MStrUtil",A="FL:::/Kernel/StrB.CPP.Z,58",BI=407$
+$LK,"MStrUtil",A="FL:::/Kernel/StrB.CPP.Z,58",BI=409$
 $LK,"_D3_CROSS",A="FL:::/Kernel/KMathA.CPP.Z,82"$
-$LK,"VGAP_INPUT_STAT",A="FL:::/Kernel/KernelA.HPP,3741"$
+$LK,"VGAP_INPUT_STAT",A="FL:::/Kernel/KernelA.HPP,3742"$
 $LK,"DOCf_UNDO_DIRTY",A="FL:::/Kernel/KernelA.HPP,1329"$
-$LK,"SYS_HEAP_LIMIT",A="FL:::/Kernel/KStart.CPP.Z,190"$
+$LK,"SYS_HEAP_LIMIT",A="FL:::/Kernel/KStart32.CPP.Z,7"$
 $LK,"WIf_SELF_BORDER",A="FL:::/Kernel/KernelA.HPP,1443"$
 $LK,"text",A="FL:::/Kernel/KGlbls.CPP.Z,29"$
 $LK,"ATA_READ_NATIVE_MAX_EXT",A="FL:::/Kernel/KernelA.HPP,2262"$
-$LK,"MPrintQ",A="FL:::/Kernel/StrPrint.CPP.Z,56",BI=408$
+$LK,"MPrintQ",A="FL:::/Kernel/StrPrint.CPP.Z,56",BI=410$
 $LK,"MHeapCtrl",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,386"$
 $LK,"CCF_CMD_LINE",A="FL:::/Kernel/KernelA.HPP,2127"$
 $LK,"RECALCt_FIND_CURSOR",A="FL:::/Kernel/KernelA.HPP,1346"$
 $LK,"SYS_SEMA_SND",A="FL:::/Kernel/KernelA.HPP,598"$
 $LK,"CCF_RAX",A="FL:::/Kernel/KernelA.HPP,2156"$
-$LK,"DskCacheInvalidate",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,211",BI=409$
+$LK,"DskCacheInvalidate",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,211",BI=411$
 $LK,"DOCG_BL_IV_UL",A="FL:::/Kernel/KernelA.HPP,951"$
 $LK,"HashSingleTableFind",A="FL:::/Kernel/KHashA.CPP.Z,257"$
-$LK,"sys_data_bp",A="FL:::/Kernel/KernelB.HPP,189"$
-$LK,"SYS_PCI_BUSES",A="FL:::/Kernel/KStart.CPP.Z,38"$
-$LK,"sys_heap_base",A="FL:::/Kernel/KernelB.HPP,192"$
+$LK,"sys_data_bp",A="FL:::/Kernel/KernelB.HPP,190"$
+$LK,"SYS_PCI_BUSES",A="FL:::/Kernel/KStart16.CPP.Z,36"$
+$LK,"sys_heap_base",A="FL:::/Kernel/KernelB.HPP,193"$
 $LK,"_CLAMP_I64",A="FL:::/Kernel/KUtils.CPP.Z,121"$
-$LK,"VGAP_MISC_OUTPUT",A="FL:::/Kernel/KernelA.HPP,3732"$
+$LK,"VGAP_MISC_OUTPUT",A="FL:::/Kernel/KernelA.HPP,3733"$
 $LK,"BDf_READ_ONLY_OVERRIDE",A="FL:::/Kernel/KernelA.HPP,2650"$
-$LK,"Spaces2Tabs",A="FL:::/Kernel/StrA.CPP.Z,477",BI=410$
-$LK,"Drv2Let",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,153",BI=411$
-$LK,"ROPBF_TWO_SIDED",A="FL:::/Kernel/KernelA.HPP,2937"$
+$LK,"Spaces2Tabs",A="FL:::/Kernel/StrA.CPP.Z,477",BI=412$
+$LK,"Drv2Let",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,153",BI=413$
+$LK,"ROPBF_TWO_SIDED",A="FL:::/Kernel/KernelA.HPP,2938"$
 $LK,"MEM_E820_ENTRY_SIZE",A="FL:::/Kernel/KernelA.HPP,357"$
-$LK,"KDRawPutS",A="FL:::/Kernel/KeyDev.CPP.Z,97",BI=412$
+$LK,"KDRawPutS",A="FL:::/Kernel/KeyDev.CPP.Z,97",BI=414$
 $LK,"Sqr",A="FL:::/Kernel/KernelB.HPP,106"$
 $LK,"REG_RDI",A="FL:::/Kernel/KernelA.HPP,1783"$
 $LK,"REG_ALLOC",A="FL:::/Kernel/KernelA.HPP,1788"$
 $LK,"DOCf_SUPERSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1327"$
-$LK,"SrvCmdsHandler",A="FL:::/Kernel/SrvCmd.CPP.Z,350",BI=413$
-$LK,"progress1_max",A="FL:::/Kernel/KernelB.HPP,208"$
+$LK,"SrvCmdsHandler",A="FL:::/Kernel/SrvCmd.CPP.Z,350",BI=415$
+$LK,"progress1_max",A="FL:::/Kernel/KernelB.HPP,209"$
 $LK,"CCF_ARRAY",A="FL:::/Kernel/KernelA.HPP,2155"$
 $LK,"REG_RBP",A="FL:::/Kernel/KernelA.HPP,1781"$
 $LK,"DOCEF_FILTER_SKIP",A="FL:::/Kernel/KernelA.HPP,1021"$
-$LK,"FifoU8Flush",A="FL:::/Kernel/KDataTypes.CPP.Z,219",BI=414$
-$LK,"MSG_MOVE",A="FL:::/Kernel/KernelA.HPP,3239"$
-$LK,"SYS_PROGRESSES",A="FL:::/Kernel/KStart.CPP.Z,213"$
-$LK,"SUF_REM_SPACES",A="FL:::/Kernel/KernelA.HPP,3795"$
+$LK,"FifoU8Flush",A="FL:::/Kernel/KDataTypes.CPP.Z,219",BI=416$
+$LK,"MSG_MOVE",A="FL:::/Kernel/KernelA.HPP,3240"$
+$LK,"SYS_PROGRESSES",A="FL:::/Kernel/KStart32.CPP.Z,31"$
+$LK,"SUF_REM_SPACES",A="FL:::/Kernel/KernelA.HPP,3796"$
 $LK,"CCF_PMT",A="FL:::/Kernel/KernelA.HPP,2128"$
 $LK,"DOCEf_FILTER_SKIP",A="FL:::/Kernel/KernelA.HPP,1107"$
-$LK,"DskCacheHash",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,40",BI=415$
-$LK,"SCF_NUM",A="FL:::/Kernel/KernelA.HPP,3545"$
+$LK,"DskCacheHash",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,40",BI=417$
+$LK,"SCF_NUM",A="FL:::/Kernel/KernelA.HPP,3546"$
 $LK,"ACD_DEF_FILENAME",A="FL:::/Kernel/KernelA.HPP,1500"$
 $LK,"fp_doc_put",A="FL:::/Kernel/KGlbls.CPP.Z,33"$
-$LK,"DskCacheFind",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,64",BI=416$
-$LK,"IsRaw",A="FL:::/Kernel/KMisc.CPP.Z,245",BI=417$
+$LK,"DskCacheFind",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,64",BI=418$
+$LK,"IsRaw",A="FL:::/Kernel/KMisc.CPP.Z,250",BI=419$
 $LK,"TK_DBL_COLON",A="FL:::/Kernel/KernelA.HPP,2081"$
-$LK,"ATAPIReadTrackInfo",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,277",BI=418$
+$LK,"ATAPIReadTrackInfo",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,277",BI=420$
 $LK,"CATARep",A="FL:::/Kernel/KernelA.HPP,2251"$
 $LK,"REG_RAX",A="FL:::/Kernel/KernelA.HPP,1776"$
-$LK,"ATAReadBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,350",BI=419$
+$LK,"ATAReadBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,350",BI=421$
 $LK,"D3AddEqu",A="FL:::/Kernel/KernelB.HPP,146"$
 $LK,"ToUpper",A="FL:::/Kernel/KernelB.HPP,58"$
 $LK,"REG_RBX",A="FL:::/Kernel/KernelA.HPP,1779"$
 $LK,"SCR_DONE",A="FL:::/Kernel/SrvCmd.CPP.Z,263"$
 $LK,"MDG_MASK",A="FL:::/Kernel/KernelA.HPP,1586"$
 $LK,"ACD_EXTRA_CHAR",A="FL:::/Kernel/KernelA.HPP,1520"$
-$LK,"Reboot",A="FL:::/Kernel/KEnd.CPP.Z,122",BI=420$
+$LK,"Reboot",A="FL:::/Kernel/KEnd.CPP.Z,121",BI=422$
 $LK,"acd",A="FL:::/Kernel/KGlbls.CPP.Z,17"$
 $LK,"TK_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,2109"$
 $LK,"REG_RCX",A="FL:::/Kernel/KernelA.HPP,1777"$
 $LK,"Ff_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,853"$
 $LK,"CHashClass",A="FL:::/Kernel/KernelA.HPP,833"$
 $LK,"ZERO_BUF_SIZE",A="FL:::/Kernel/BlkDev/DskBlk.CPP.Z,1"$
-$LK,"LoadKernel",A="FL:::/Kernel/KLoad.CPP.Z,240",BI=421$
-$LK,"SCF_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3540"$
-$LK,"SCf_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3525"$
-$LK,"MSG_IP_R_D_DOWN",A="FL:::/Kernel/KernelA.HPP,3235"$
+$LK,"LoadKernel",A="FL:::/Kernel/KLoad.CPP.Z,240",BI=423$
+$LK,"SCF_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3541"$
+$LK,"SCf_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3526"$
+$LK,"MSG_IP_R_D_DOWN",A="FL:::/Kernel/KernelA.HPP,3236"$
 $LK,"ICF_BY_VAL",A="FL:::/Kernel/KernelA.HPP,1602"$
 $LK,"REG_RDX",A="FL:::/Kernel/KernelA.HPP,1778"$
-$LK,"ATAPIReadBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,413",BI=422$
+$LK,"ATAPIReadBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,413",BI=424$
 $LK,"REG_RIP",A="FL:::/Kernel/KernelA.HPP,1785"$
 $LK,"DOCEF_FROM_START",A="FL:::/Kernel/KernelA.HPP,1001"$
 $LK,"SEMA_STRUCT_SIZE",A="FL:::/Kernel/KernelA.HPP,584"$
 $LK,"SCR_CONT",A="FL:::/Kernel/SrvCmd.CPP.Z,264"$
-$LK,"progress2_max",A="FL:::/Kernel/KernelB.HPP,212"$
+$LK,"progress2_max",A="FL:::/Kernel/KernelB.HPP,213"$
 $LK,"DOCEf_FROM_START",A="FL:::/Kernel/KernelA.HPP,1089"$
 $LK,"SYS_SEMA_TMBEAT",A="FL:::/Kernel/KernelA.HPP,613"$
 $LK,"RLF_WINMGR",A="FL:::/Kernel/KernelA.HPP,470"$
 $LK,"RLf_WINMGR",A="FL:::/Kernel/KernelA.HPP,451"$
-$LK,"SUF_SCALE_INDENT",A="FL:::/Kernel/KernelA.HPP,3801"$
-$LK,"CT_7_BIT",A="FL:::/Kernel/KernelA.HPP,3750"$
+$LK,"SUF_SCALE_INDENT",A="FL:::/Kernel/KernelA.HPP,3802"$
+$LK,"CT_7_BIT",A="FL:::/Kernel/KernelA.HPP,3751"$
 $LK,"PUSH_REGS",A="FL:::/Kernel/KernelA.HPP,1769"$
 $LK,"MAX_I8",A="FL:::/Kernel/KernelA.HPP,24"$
-$LK,"KbdMouseHandler",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,236",BI=423$
-$LK,"Color2Str",A="FL:::/Kernel/KDefine.CPP.Z,127",BI=424$
-$LK,"MAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,407",BI=425$
+$LK,"KbdMouseHandler",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,236",BI=425$
+$LK,"Color2Str",A="FL:::/Kernel/KDefine.CPP.Z,127",BI=426$
+$LK,"MAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,407",BI=427$
 $LK,"EDF_COLLAPSE",A="FL:::/Kernel/KernelA.HPP,1247"$
 $LK,"LAPIC_DFR",A="FL:::/Kernel/KernelA.HPP,486"$
 $LK,"CDATE_BASE_DAY_OF_WEEK",A="FL:::/Kernel/KernelA.HPP,184"$
-$LK,"StrFirstOcc",A="FL:::/Kernel/StrA.CPP.Z,572",BI=426$
-$LK,"MSG_NULL",A="FL:::/Kernel/KernelA.HPP,3224"$
+$LK,"StrFirstOcc",A="FL:::/Kernel/StrA.CPP.Z,572",BI=428$
+$LK,"MSG_NULL",A="FL:::/Kernel/KernelA.HPP,3225"$
 $LK,"CCF_QUESTION_HELP",A="FL:::/Kernel/KernelA.HPP,2130"$
 $LK,"EDf_COLLAPSE",A="FL:::/Kernel/KernelA.HPP,1253"$
-$LK,"MPrintq",A="FL:::/Kernel/StrPrint.CPP.Z,115",BI=427$
-$LK,"AMAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,418",BI=428$
+$LK,"MPrintq",A="FL:::/Kernel/StrPrint.CPP.Z,113",BI=429$
+$LK,"AMAllocIdent",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,418",BI=430$
 $LK,"MEM_DFT_STK",A="FL:::/Kernel/KernelA.HPP,2887"$
 $LK,"sys_font_cyrillic",A="FL:::/Kernel/FontCyrillic.CPP.Z,3"$
-$LK,"SYS_FOCUS_TASK",A="FL:::/Kernel/KStart.CPP.Z,227"$
-$LK,"DYING_JIFFIES",A="FL:::/Kernel/KernelA.HPP,3313"$
+$LK,"SYS_FOCUS_TASK",A="FL:::/Kernel/KStart32.CPP.Z,45"$
+$LK,"DYING_JIFFIES",A="FL:::/Kernel/KernelA.HPP,3314"$
 $LK,"dbg",A="FL:::/Kernel/KGlbls.CPP.Z,21"$
-$LK,"QSort",A="FL:::/Kernel/QSort.CPP.Z,85",BI=429$
+$LK,"QSort",A="FL:::/Kernel/QSort.CPP.Z,85",BI=431$
 $LK,"OutU32",A="FL:::/Kernel/KernelB.HPP,79"$
 $LK,"OutU16",A="FL:::/Kernel/KernelB.HPP,78"$
 $LK,"SYS_SEMA_JUST_PUMP_MSGS",A="FL:::/Kernel/KernelA.HPP,612"$
 $LK,"LAPIC_ICR_HIGH",A="FL:::/Kernel/KernelA.HPP,496"$
-$LK,"LMF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HPP,3811"$
-$LK,"SFF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HPP,3805"$
+$LK,"LMF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HPP,3812"$
+$LK,"SFF_IGNORE_CASE",A="FL:::/Kernel/KernelA.HPP,3806"$
 $LK,"HashRemDel",A="FL:::/Kernel/KHashA.CPP.Z,264"$
 $LK,"REG_RSI",A="FL:::/Kernel/KernelA.HPP,1782"$
 $LK,"HashAdd",A="FL:::/Kernel/KHashA.CPP.Z,262"$
-$LK,"mp_cnt_lock",A="FL:::/Kernel/KernelB.HPP,229"$
+$LK,"mp_cnt_lock",A="FL:::/Kernel/KernelB.HPP,230"$
 $LK,"MLF_DOT_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,778"$
-$LK,"IsSuspended",A="FL:::/Kernel/KTask.CPP.Z,59",BI=430$
-$LK,"CAlloc",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,395",BI=431$
+$LK,"IsSuspended",A="FL:::/Kernel/KTask.CPP.Z,59",BI=432$
+$LK,"CAlloc",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,395",BI=433$
 $LK,"BDF_INITIALIZED",A="FL:::/Kernel/KernelA.HPP,2638"$
 $LK,"CAsmUnresolvedRef",A="FL:::/Kernel/KernelA.HPP,1856"$
 $LK,"BDf_INITIALIZED",A="FL:::/Kernel/KernelA.HPP,2648"$
-$LK,"DOCT_SPRITE",A="FL:::/Kernel/KernelA.HPP,936"$
-$LK,"WClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,92",BI=432$
-$LK,"RClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,46",BI=433$
-$LK,"sys_neg_pows_lets",A="FL:::/Kernel/StrPrint.CPP.Z,199"$
-$LK,"progress3_max",A="FL:::/Kernel/KernelB.HPP,216"$
+$LK,"DOCT_SPRITE",A="FL:::/Kernel/KernelA.HPP,937"$
+$LK,"WClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,92",BI=434$
+$LK,"RClustersBlks",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,46",BI=435$
+$LK,"sys_neg_pows_lets",A="FL:::/Kernel/StrPrint.CPP.Z,201"$
+$LK,"progress3_max",A="FL:::/Kernel/KernelB.HPP,217"$
 $LK,"SqrI64",A="FL:::/Kernel/KernelB.HPP,107"$
 $LK,"BDF_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HPP,2644"$
 $LK,"OPTF_ECHO",A="FL:::/Kernel/KernelA.HPP,1549"$
 $LK,"OPTf_ECHO",A="FL:::/Kernel/KernelA.HPP,1536"$
 $LK,"LAPIC_EOI",A="FL:::/Kernel/KernelA.HPP,484"$
-$LK,"sys_pos_pows_lets",A="FL:::/Kernel/StrPrint.CPP.Z,198"$
-$LK,"QueSize",A="FL:::/Kernel/KDataTypes.CPP.Z,76",BI=434$
+$LK,"sys_pos_pows_lets",A="FL:::/Kernel/StrPrint.CPP.Z,200"$
+$LK,"QueSize",A="FL:::/Kernel/KDataTypes.CPP.Z,76",BI=436$
 $LK,"C:/Doc/Que.TXT.Z",A="FL:::/Kernel/KernelB.HPP,65"$
-$LK,"CT_8_BIT",A="FL:::/Kernel/KernelA.HPP,3751"$
+$LK,"CT_8_BIT",A="FL:::/Kernel/KernelA.HPP,3752"$
 $LK,"REG_RSP",A="FL:::/Kernel/KernelA.HPP,1780"$
-$LK,"CtrlAltDel",A="FL:::/Kernel/KeyDev.CPP.Z,128",BI=435$
-$LK,"CTRLF_CAPTURE_LEFT_IP",A="FL:::/Kernel/KernelA.HPP,3093"$
+$LK,"CtrlAltDel",A="FL:::/Kernel/KeyDev.CPP.Z,128",BI=437$
+$LK,"CTRLF_CAPTURE_LEFT_IP",A="FL:::/Kernel/KernelA.HPP,3094"$
 $LK,"LFSF_DEFINE",A="FL:::/Kernel/KernelA.HPP,2036"$
 $LK,"BLK_SIZE_BITS",A="FL:::/Kernel/KernelA.HPP,2296"$
 $LK,"AOT_BIN_BLK_BITS",A="FL:::/Kernel/KernelA.HPP,1797"$
 $LK,"HTT_FUN",A="FL:::/Kernel/KernelA.HPP,688"$
 $LK,"I_DIV_ZERO",A="FL:::/Kernel/KernelA.HPP,286"$
-$LK,"SrvCtrlInit",A="FL:::/Kernel/SrvCmd.CPP.Z,18",BI=436$
+$LK,"SrvCtrlInit",A="FL:::/Kernel/SrvCmd.CPP.Z,18",BI=438$
 $LK,"DOCEF_DEFINE",A="FL:::/Kernel/KernelA.HPP,968"$
-$LK,"SPF_LEFT_JUSTIFY",A="FL:::/Kernel/KernelA.HPP,3919"$
+$LK,"SPF_LEFT_JUSTIFY",A="FL:::/Kernel/KernelA.HPP,3920"$
 $LK,"DOCEf_DEFINE",A="FL:::/Kernel/KernelA.HPP,1056"$
-$LK,"HeapCtrlInit",A="FL:::/Kernel/Mem/HeapCtrl.CPP.Z,1",BI=437$
-$LK,"progress1",A="FL:::/Kernel/KernelB.HPP,205"$
+$LK,"HeapCtrlInit",A="FL:::/Kernel/Mem/HeapCtrl.CPP.Z,1",BI=439$
+$LK,"progress1",A="FL:::/Kernel/KernelB.HPP,206"$
 $LK,"Floor",A="FL:::/Kernel/KernelB.HPP,131"$
-$LK,"CIPStateGlbls",A="FL:::/Kernel/KernelA.HPP,3044"$
+$LK,"CIPStateGlbls",A="FL:::/Kernel/KernelA.HPP,3045"$
 $LK,"SYSf_CTRL_ALT_C",A="FL:::/Kernel/KernelA.HPP,618"$
-$LK,"progress2",A="FL:::/Kernel/KernelB.HPP,209"$
+$LK,"progress2",A="FL:::/Kernel/KernelB.HPP,210"$
 $LK,"_CLAMP_U64",A="FL:::/Kernel/KUtils.CPP.Z,133"$
-$LK,"progress3",A="FL:::/Kernel/KernelB.HPP,213"$
+$LK,"progress3",A="FL:::/Kernel/KernelB.HPP,214"$
 $LK,"MPN_VECT",A="FL:::/Kernel/KernelA.HPP,505"$
 $LK,"MAX_U8",A="FL:::/Kernel/KernelA.HPP,26"$
 $LK,"RAWDR_COL",A="FL:::/Kernel/KDbg.CPP.Z,289"$
-$LK,"progress4",A="FL:::/Kernel/KernelB.HPP,217"$
-$LK,"CtrlAltCBSet",A="FL:::/Kernel/KeyDev.CPP.Z,178",BI=438$
-$LK,"SysTimerRead",A="FL:::/Kernel/KMisc.CPP.Z,61",BI=439$
+$LK,"progress4",A="FL:::/Kernel/KernelB.HPP,218"$
+$LK,"CtrlAltCBSet",A="FL:::/Kernel/KeyDev.CPP.Z,178",BI=440$
+$LK,"SysTimerRead",A="FL:::/Kernel/KMisc.CPP.Z,61",BI=441$
 $LK,"dev",A="FL:::/Kernel/KGlbls.CPP.Z,22"$
-$LK,"MSG_IP_L_D_UP",A="FL:::/Kernel/KernelA.HPP,3232"$
-$LK,"FunSegCacheFind",A="FL:::/Kernel/FunSeg.CPP.Z,114",BI=440$
+$LK,"MSG_IP_L_D_UP",A="FL:::/Kernel/KernelA.HPP,3233"$
+$LK,"FunSegCacheFind",A="FL:::/Kernel/FunSeg.CPP.Z,114",BI=442$
 $LK,"HTT_REG",A="FL:::/Kernel/KernelA.HPP,694"$
-$LK,"StrFirstRem",A="FL:::/Kernel/StrA.CPP.Z,582",BI=441$
+$LK,"StrFirstRem",A="FL:::/Kernel/StrA.CPP.Z,582",BI=443$
 $LK,"SYS_VAR_INIT_VAL",A="FL::/Temp.TXT.Z,1"$
-$LK,"DCF_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,3626"$
-$LK,"ans",A="FL:::/Kernel/KernelA.HPP,3420"$
+$LK,"DCF_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,3627"$
+$LK,"ans",A="FL:::/Kernel/KernelA.HPP,3421"$
 $LK,"ICF_DEL_PREV_INS",A="FL:::/Kernel/KernelA.HPP,1618"$
 $LK,"LAPIC_LDR",A="FL:::/Kernel/KernelA.HPP,487"$
-$LK,"BptFind",A="FL:::/Kernel/KDbg.CPP.Z,344",BI=442$
+$LK,"BptFind",A="FL:::/Kernel/KDbg.CPP.Z,344",BI=444$
 $LK,"kbd",A="FL:::/Kernel/KGlbls.CPP.Z,25"$
-$LK,"progress4_max",A="FL:::/Kernel/KernelB.HPP,220"$
-$LK,"MouseUpdatePost",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,126",BI=443$
-$LK,"HashDel",A="FL:::/Kernel/KHashB.CPP.Z,59",BI=444$
-$LK,"CKbdStateGlbls",A="FL:::/Kernel/KernelA.HPP,3001"$
+$LK,"progress4_max",A="FL:::/Kernel/KernelB.HPP,221"$
+$LK,"MouseUpdatePost",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,126",BI=445$
+$LK,"HashDel",A="FL:::/Kernel/KHashB.CPP.Z,59",BI=446$
+$LK,"CKbdStateGlbls",A="FL:::/Kernel/KernelA.HPP,3002"$
 $LK,"sys_font_std",A="FL:::/Kernel/FontStd.CPP.Z,3"$
-$LK,"LinkedLstCopy",A="FL:::/Kernel/KDataTypes.CPP.Z,11",BI=445$
-$LK,"IP_NULL",A="FL:::/Kernel/KernelA.HPP,3042"$
+$LK,"LinkedLstCopy",A="FL:::/Kernel/KDataTypes.CPP.Z,11",BI=447$
+$LK,"IP_NULL",A="FL:::/Kernel/KernelA.HPP,3043"$
 $LK,"MDF_NULL",A="FL:::/Kernel/KernelA.HPP,1579"$
 $LK,"SYS_SEMA_DEV_MEM",A="FL:::/Kernel/KernelA.HPP,606"$
 $LK,"ICF_A1_WAS_STK",A="FL:::/Kernel/KernelA.HPP,1607"$
-$LK,"Let2Drv",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,177",BI=446$
+$LK,"Let2Drv",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,177",BI=448$
 $LK,"fat_long_name_map",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,183"$
-$LK,"DskCacheInit",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,1",BI=447$
+$LK,"DskCacheInit",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,1",BI=449$
 $LK,"CCF_NO_ABSS",A="FL:::/Kernel/KernelA.HPP,2162"$
 $LK,"DOC_COLOR_MACRO",A="FL:::/Kernel/KernelA.HPP,1137"$
 $LK,"LAPIC_LOG_DST",A="FL:::/Kernel/KernelA.HPP,485"$
 $LK,"RLF_ADAM_SERVER",A="FL:::/Kernel/KernelA.HPP,474"$
-$LK,"RClusters",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,87",BI=448$
-$LK,"VGAP_IDX",A="FL:::/Kernel/KernelA.HPP,3733"$
-$LK,"ISO1CDirFill",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,56",BI=449$
+$LK,"RClusters",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,87",BI=450$
+$LK,"VGAP_IDX",A="FL:::/Kernel/KernelA.HPP,3734"$
+$LK,"ISO1CDirFill",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,56",BI=451$
 $LK,"RLf_ADAM_SERVER",A="FL:::/Kernel/KernelA.HPP,455"$
 $LK,"SCR_EXIT",A="FL:::/Kernel/SrvCmd.CPP.Z,265"$
-$LK,"QueDel",A="FL:::/Kernel/KDataTypes.CPP.Z,41",BI=450$
+$LK,"QueDel",A="FL:::/Kernel/KDataTypes.CPP.Z,41",BI=452$
 $LK,"ICF_DONT_RESTORE",A="FL:::/Kernel/KernelA.HPP,1620"$
-$LK,"RedSeaDirNew",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,352",BI=451$
+$LK,"RedSeaDirNew",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,352",BI=453$
 $LK,"IET_REL64_EXPORT",A="FL:::/Kernel/KernelA.HPP,408"$
 $LK,"IET_REL32_EXPORT",A="FL:::/Kernel/KernelA.HPP,406"$
-$LK,"CExcept",A="FL:::/Kernel/KernelA.HPP,3164"$
+$LK,"CExcept",A="FL:::/Kernel/KernelA.HPP,3165"$
 $LK,"QueInsRev",A="FL:::/Kernel/KernelB.HPP,70"$
 $LK,"SYSf_CTRL_ALT_X",A="FL:::/Kernel/KernelA.HPP,619"$
-$LK,"SYS_EXTERN_TABLE",A="FL:::/Kernel/KStart.CPP.Z,207"$
+$LK,"SYS_EXTERN_TABLE",A="FL:::/Kernel/KStart32.CPP.Z,25"$
 $LK,"FUF_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HPP,2614"$
 $LK,"DOCT_HTML_CODE",A="FL:::/Kernel/KernelA.HPP,941"$
 $LK,"LAPIC_IRR",A="FL:::/Kernel/KernelA.HPP,494"$
@@ -2016,8 +2019,8 @@ $LK,"chars_bmp_getkey",A="FL:::/Kernel/StrA.CPP.Z,371"$
 $LK,"sys_run_level",A="FL:::/Kernel/KernelB.HPP,41"$
 $LK,"JIFFY_FREQ",A="FL:::/Kernel/KernelA.HPP,550"$
 $LK,"COrder2D3",A="FL:::/Kernel/KernelA.HPP,200"$
-$LK,"TaskRegAddr",A="FL:::/Kernel/KDbg.CPP.Z,266",BI=452$
-$LK,"DCSF_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,3648"$
+$LK,"TaskRegAddr",A="FL:::/Kernel/KDbg.CPP.Z,266",BI=454$
+$LK,"DCSF_COMPRESSED",A="FL:::/Kernel/KernelA.HPP,3649"$
 $LK,"LAPIC_ISR",A="FL:::/Kernel/KernelA.HPP,492"$
 $LK,"c32_eflags",A="FL:::/Kernel/PCIBIOS.CPP.Z,158"$
 $LK,"Pow10",A="FL:::/Kernel/KernelB.HPP,138"$
@@ -2025,38 +2028,39 @@ $LK,"ATA_WRITE_MULTI_EXT",A="FL:::/Kernel/KernelA.HPP,2268"$
 $LK,"CCF_PREDEC",A="FL:::/Kernel/KernelA.HPP,2154"$
 $LK,"inf",A="FL:::/Kernel/KernelA.HPP,47"$
 $LK,"MIN_I8",A="FL:::/Kernel/KernelA.HPP,23"$
-$LK,"XTalk",A="FL:::/Kernel/SrvCmd.CPP.Z,446",BI=453$
-$LK,"SYS_ENTER_LONG_MODE",A="FL:::/Kernel/KStart.CPP.Z,323"$
+$LK,"sys_macro_head",A="FL:::/Kernel/KGlbls.CPP.Z,4"$
+$LK,"XTalk",A="FL:::/Kernel/SrvCmd.CPP.Z,446",BI=455$
+$LK,"SYS_ENTER_LONG_MODE",A="FL:::/Kernel/KStart64.CPP.Z,44"$
 $LK,"DOCEf_LEFT_AUTO",A="FL:::/Kernel/KernelA.HPP,1072"$
 $LK,"DOCEF_LEFT_AUTO",A="FL:::/Kernel/KernelA.HPP,984"$
 $LK,"eps",A="FL:::/Kernel/KernelA.HPP,57"$
-$LK,"LstSub",A="FL:::/Kernel/StrA.CPP.Z,402",BI=454$
+$LK,"LstSub",A="FL:::/Kernel/StrA.CPP.Z,402",BI=456$
 $LK,"RLF_PATCHED",A="FL:::/Kernel/KernelA.HPP,460"$
-$LK,"TaskDerivedValsUpdate",A="FL:::/Kernel/KTask.CPP.Z,254",BI=455$
+$LK,"TaskDerivedValsUpdate",A="FL:::/Kernel/KTask.CPP.Z,254",BI=457$
 $LK,"_HASH_ADD",A="FL:::/Kernel/KHashA.CPP.Z,170"$
-$LK,"FRBlks",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,129",BI=456$
+$LK,"FRBlks",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,129",BI=458$
 $LK,"__TIME__",A="FL:::/Kernel/KernelA.HPP,2026"$
 $LK,"RLf_PATCHED",A="FL:::/Kernel/KernelA.HPP,441"$
 $LK,"FUf_CLUSTER_ORDER",A="FL:::/Kernel/KernelA.HPP,2588"$
 $LK,"ACD_WORD_FILENAME",A="FL:::/Kernel/KernelA.HPP,1499"$
 $LK,"ATTRf_BLINK",A="FL:::/Kernel/KernelA.HPP,894"$
 $LK,"ATTRF_BLINK",A="FL:::/Kernel/KernelA.HPP,889"$
-$LK,"XchgU8",A="FL:::/Kernel/KernelB.HPP,262"$
-$LK,"TTS_TASK_NAME",A="FL:::/Kernel/KernelA.HPP,3276"$
+$LK,"XchgU8",A="FL:::/Kernel/KernelB.HPP,263"$
+$LK,"TTS_TASK_NAME",A="FL:::/Kernel/KernelA.HPP,3277"$
 $LK,"CKernel",A="FL:::/Kernel/KernelA.HPP,418"$
 $LK,"IET_IMM_I64",A="FL:::/Kernel/KernelA.HPP,403"$
 $LK,"log2_10",A="FL:::/Kernel/KernelA.HPP,52"$
-$LK,"LTBLUE",A="FL:::/Kernel/KernelA.HPP,2966"$
-$LK,"FAT32AllocClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,456",BI=457$
+$LK,"LTBLUE",A="FL:::/Kernel/KernelA.HPP,2967"$
+$LK,"FAT32AllocClusters",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,456",BI=459$
 $LK,"DOCEf_TOP_Y",A="FL:::/Kernel/KernelA.HPP,1078"$
 $LK,"DOCEF_TOP_Y",A="FL:::/Kernel/KernelA.HPP,990"$
 $LK,"_CALLEXTNUM",A="FL:::/Kernel/KUtils.CPP.Z,362"$
-$LK,"SCF_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,3553"$
-$LK,"SCf_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,3538"$
-$LK,"MSG_CMD",A="FL:::/Kernel/KernelA.HPP,3225"$
+$LK,"SCF_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,3554"$
+$LK,"SCf_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,3539"$
+$LK,"MSG_CMD",A="FL:::/Kernel/KernelA.HPP,3226"$
 $LK,"IDTET_IRQ",A="FL:::/Kernel/KernelA.HPP,281"$
 $LK,"CCF_LOCAL",A="FL:::/Kernel/KernelA.HPP,2148"$
-$LK,"QueCnt",A="FL:::/Kernel/KDataTypes.CPP.Z,65",BI=458$
+$LK,"QueCnt",A="FL:::/Kernel/KDataTypes.CPP.Z,65",BI=460$
 $LK,"chars_bmp_alpha",A="FL:::/Kernel/StrA.CPP.Z,325"$
 $LK,"SwapI64",A="FL:::/Kernel/KernelB.HPP,111"$
 $LK,"SqrU64",A="FL:::/Kernel/KernelB.HPP,108"$
@@ -2064,36 +2068,36 @@ $LK,"OPTf_NO_BUILTIN_CONST",A="FL:::/Kernel/KernelA.HPP,1546"$
 $LK,"HTG_SRC_SYM",A="FL:::/Kernel/KernelA.HPP,712"$
 $LK,"LAPIC_LVT_THERMAL",A="FL:::/Kernel/KernelA.HPP,499"$
 $LK,"RFLAGf_IOPL0",A="FL:::/Kernel/KernelA.HPP,316"$
-$LK,"IntsInit",A="FL:::/Kernel/KInts.CPP.Z,122",BI=459$
+$LK,"IntsInit",A="FL:::/Kernel/KInts.CPP.Z,129",BI=461$
 $LK,"_XCHG_U8",A="FL:::/Kernel/KUtils.CPP.Z,208"$
 $LK,"DOCEF_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HPP,1006"$
 $LK,"RFLAGf_IOPL1",A="FL:::/Kernel/KernelA.HPP,317"$
-$LK,"FAT32FilesDel",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,726",BI=460$
-$LK,"DOCT_MENU_VAL",A="FL:::/Kernel/KernelA.HPP,933"$
-$LK,"Bcd2Bin",A="FL:::/Kernel/KDate.CPP.Z,123",BI=461$
-$LK,"CAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,434",BI=462$
-$LK,"MAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,423",BI=463$
+$LK,"FAT32FilesDel",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,726",BI=462$
+$LK,"DOCT_MENU_VAL",A="FL:::/Kernel/KernelA.HPP,934"$
+$LK,"Bcd2Bin",A="FL:::/Kernel/KDate.CPP.Z,123",BI=463$
+$LK,"CAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,434",BI=464$
+$LK,"MAllocAligned",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,423",BI=465$
 $LK,"ext",A="FL:::/Kernel/KernelB.HPP,53"$
-$LK,"FUN_SEG_CACHE_SIZE",A="FL:::/Kernel/KernelA.HPP,3851"$
+$LK,"FUN_SEG_CACHE_SIZE",A="FL:::/Kernel/KernelA.HPP,3852"$
 $LK,"ACf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HPP,1484"$
-$LK,"RawDm",A="FL:::/Kernel/KDbg.CPP.Z,250",BI=464$
+$LK,"RawDm",A="FL:::/Kernel/KDbg.CPP.Z,250",BI=466$
 $LK,"ICf_DONT_POP_FLOAT0",A="FL:::/Kernel/KernelA.HPP,1613"$
-$LK,"DskCacheAdd",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,76",BI=465$
-$LK,"MPNMInt",A="FL:::/Kernel/MultiProc.CPP.Z,159",BI=466$
+$LK,"DskCacheAdd",A="FL:::/Kernel/BlkDev/DskCache.CPP.Z,76",BI=467$
+$LK,"MPNMInt",A="FL:::/Kernel/MultiProc.CPP.Z,159",BI=468$
 $LK,"_MSIZE2",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,353"$
-$LK,"LTPURPLE",A="FL:::/Kernel/KernelA.HPP,2970"$
-$LK,"RawDr",A="FL:::/Kernel/KDbg.CPP.Z,291",BI=467$
+$LK,"LTPURPLE",A="FL:::/Kernel/KernelA.HPP,2971"$
+$LK,"RawDr",A="FL:::/Kernel/KDbg.CPP.Z,291",BI=469$
 $LK,"StrICmp",A="FL:::/Kernel/StrA.CPP.Z,311"$
 $LK,"ATAR0_DATA",A="FL:::/Kernel/KernelA.HPP,2277"$
 $LK,"MIN_U8",A="FL:::/Kernel/KernelA.HPP,25"$
 $LK,"OPTf_TRACE",A="FL:::/Kernel/KernelA.HPP,1537"$
 $LK,"HTG_FLAGS_MASK",A="FL:::/Kernel/KernelA.HPP,710"$
-$LK,"DirFilesSort",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,92",BI=468$
-$LK,"HashLstAdd",A="FL:::/Kernel/KHashB.CPP.Z,185",BI=469$
-$LK,"ACAlloc",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,402",BI=470$
-$LK,"SYS_RUN_LEVEL",A="FL:::/Kernel/KStart.CPP.Z,27"$
-$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HPP,3546"$
-$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HPP,3531"$
+$LK,"DirFilesSort",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,92",BI=470$
+$LK,"HashLstAdd",A="FL:::/Kernel/KHashB.CPP.Z,185",BI=471$
+$LK,"ACAlloc",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,402",BI=472$
+$LK,"SYS_RUN_LEVEL",A="FL:::/Kernel/KStart16.CPP.Z,26"$
+$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HPP,3547"$
+$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HPP,3532"$
 $LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HPP,2654"$
 $LK,"TK_SUB_EQU",A="FL:::/Kernel/KernelA.HPP,2099"$
 $LK,"TK_DIV_EQU",A="FL:::/Kernel/KernelA.HPP,2094"$
@@ -2101,13 +2105,13 @@ $LK,"OC_BPT",A="FL:::/Kernel/KernelA.HPP,1761"$
 $LK,"DOCF_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HPP,1268"$
 $LK,"IOREDTAB",A="FL:::/Kernel/KernelA.HPP,515"$
 $LK,"Fstcw",A="FL:::/Kernel/KernelB.HPP,132"$
-$LK,"MSG_IP_L_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3242"$
+$LK,"MSG_IP_L_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3243"$
 $LK,"LAPIC_TMR",A="FL:::/Kernel/KernelA.HPP,493"$
 $LK,"C32_EFLAGS",A="FL:::/Kernel/PCIBIOS.CPP.Z,64"$
-$LK,"sys_compile_time",A="FL:::/Kernel/KernelB.HPP,200"$
+$LK,"sys_compile_time",A="FL:::/Kernel/KernelB.HPP,201"$
 $LK,"_D3_DIV_EQU",A="FL:::/Kernel/KMathA.CPP.Z,289"$
 $LK,"_D3_SUB_EQU",A="FL:::/Kernel/KMathA.CPP.Z,256"$
-$LK,"TASKf_SUSPENDED",A="FL:::/Kernel/KernelA.HPP,3283"$
+$LK,"TASKf_SUSPENDED",A="FL:::/Kernel/KernelA.HPP,3284"$
 $LK,"FUF_DIFF",A="FL:::/Kernel/KernelA.HPP,2596"$
 $LK,"FUf_DIFF",A="FL:::/Kernel/KernelA.HPP,2570"$
 $LK,"DOCf_HIDE_CURSOR",A="FL:::/Kernel/KernelA.HPP,1304"$
@@ -2116,7 +2120,7 @@ $LK,"CMT_LABEL",A="FL:::/Kernel/KernelA.HPP,1687"$
 $LK,"C32_ADD",A="FL:::/Kernel/PCIBIOS.CPP.Z,122"$
 $LK,"MEM_PAGE_BITS",A="FL:::/Kernel/KernelA.HPP,2876"$
 $LK,"MBS_USED_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2856"$
-$LK,"HeapCtrlDel",A="FL:::/Kernel/Mem/HeapCtrl.CPP.Z,15",BI=471$
+$LK,"HeapCtrlDel",A="FL:::/Kernel/Mem/HeapCtrl.CPP.Z,15",BI=473$
 $LK,"_CALLEXTSTR",A="FL:::/Kernel/KUtils.CPP.Z,392"$
 $LK,"FF_USE_OLD_DATETIME",A="FL:::/Kernel/KernelA.HPP,2785"$
 $LK,"BDT_ISO_FILE_READ",A="FL:::/Kernel/KernelA.HPP,2632"$
@@ -2126,57 +2130,57 @@ $LK,"ACD_BLK_SIZE",A="FL:::/Kernel/KernelA.HPP,1513"$
 $LK,"CSysLimitBase",A="FL:::/Kernel/KernelA.HPP,349"$
 $LK,"DVD_BLK_SIZE",A="FL:::/Kernel/KernelA.HPP,2298"$
 $LK,"QueIns",A="FL:::/Kernel/KernelB.HPP,68"$
-$LK,"CGrSym",A="FL:::/Kernel/KernelA.HPP,3653"$
+$LK,"CGrSym",A="FL:::/Kernel/KernelA.HPP,3654"$
 $LK,"ATAR0_FEAT",A="FL:::/Kernel/KernelA.HPP,2278"$
 $LK,"RLF_HOME",A="FL:::/Kernel/KernelA.HPP,472"$
 $LK,"RLf_HOME",A="FL:::/Kernel/KernelA.HPP,453"$
 $LK,"snd",A="FL:::/Kernel/KGlbls.CPP.Z,28"$
-$LK,"SC_ENTER",A="FL:::/Kernel/KernelA.HPP,3561"$
-$LK,"LTCYAN",A="FL:::/Kernel/KernelA.HPP,2968"$
+$LK,"SC_ENTER",A="FL:::/Kernel/KernelA.HPP,3562"$
+$LK,"LTCYAN",A="FL:::/Kernel/KernelA.HPP,2969"$
 $LK,"FUF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HPP,2619"$
 $LK,"CCF_PREINC",A="FL:::/Kernel/KernelA.HPP,2153"$
 $LK,"HTT_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,683"$
 $LK,"HTT_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,682"$
-$LK,"FunSegCacheAdd",A="FL:::/Kernel/FunSeg.CPP.Z,92",BI=472$
-$LK,"CTRLT_GENERIC",A="FL:::/Kernel/KernelA.HPP,3086"$
+$LK,"FunSegCacheAdd",A="FL:::/Kernel/FunSeg.CPP.Z,92",BI=474$
+$LK,"CTRLT_GENERIC",A="FL:::/Kernel/KernelA.HPP,3087"$
 $LK,"CCF_KEEP_AT_SIGN",A="FL:::/Kernel/KernelA.HPP,2138"$
 $LK,"RS_ATTR_DIR",A="FL:::/Kernel/KernelA.HPP,2530"$
 $LK,"CCF_POSTDEC",A="FL:::/Kernel/KernelA.HPP,2152"$
-$LK,"DirContextDel",A="FL:::/Kernel/BlkDev/DskDirContext.CPP.Z,1",BI=473$
-$LK,"StrPrintFlags",A="FL:::/Kernel/StrB.CPP.Z,177",BI=474$
+$LK,"DirContextDel",A="FL:::/Kernel/BlkDev/DskDirContext.CPP.Z,1",BI=475$
+$LK,"StrPrintFlags",A="FL:::/Kernel/StrB.CPP.Z,177",BI=476$
 $LK,"TK_IFNDEF",A="FL:::/Kernel/KernelA.HPP,2102"$
 $LK,"CMT_FLOAT_CONSTS",A="FL:::/Kernel/KernelA.HPP,1692"$
 $LK,"CBinFile",A="FL:::/Kernel/KernelA.HPP,372"$
-$LK,"SpawnQue",A="FL:::/Kernel/MultiProc.CPP.Z,248",BI=475$
+$LK,"SpawnQue",A="FL:::/Kernel/MultiProc.CPP.Z,248",BI=477$
 $LK,"LAPIC_SVR",A="FL:::/Kernel/KernelA.HPP,490"$
-$LK,"CMouseStateGlbls",A="FL:::/Kernel/KernelA.HPP,3022"$
-$LK,"StrPrintFunSeg",A="FL:::/Kernel/FunSeg.CPP.Z,134",BI=476$
+$LK,"CMouseStateGlbls",A="FL:::/Kernel/KernelA.HPP,3023"$
+$LK,"StrPrintFunSeg",A="FL:::/Kernel/FunSeg.CPP.Z,134",BI=478$
 $LK,"ISO1_ATTR_DIR",A="FL:::/Kernel/KernelA.HPP,2522"$
-$LK,"HashVal",A="FL:::/Kernel/KHashB.CPP.Z,9",BI=477$
-$LK,"C:/Doc/MultiCore.TXT.Z",A="FL:::/Kernel/KernelB.HPP,226"$
+$LK,"HashVal",A="FL:::/Kernel/KHashB.CPP.Z,9",BI=479$
+$LK,"C:/Doc/MultiCore.TXT.Z",A="FL:::/Kernel/KernelB.HPP,227"$
 $LK,"DOCEF_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HPP,1025"$
 $LK,"IET_IMM_U32",A="FL:::/Kernel/KernelA.HPP,401"$
 $LK,"IET_IMM_U16",A="FL:::/Kernel/KernelA.HPP,399"$
 $LK,"QueRem",A="FL:::/Kernel/KernelB.HPP,72"$
-$LK,"TASKf_DISABLE_BPTS",A="FL:::/Kernel/KernelA.HPP,3288"$
+$LK,"TASKf_DISABLE_BPTS",A="FL:::/Kernel/KernelA.HPP,3289"$
 $LK,"BDT_NULL",A="FL:::/Kernel/KernelA.HPP,2629"$
 $LK,"FarCall32",A="FL:::/Kernel/PCIBIOS.CPP.Z,161"$
-$LK,"SCF_NO_SHIFT",A="FL:::/Kernel/KernelA.HPP,3552"$
-$LK,"SCf_NO_SHIFT",A="FL:::/Kernel/KernelA.HPP,3537"$
+$LK,"SCF_NO_SHIFT",A="FL:::/Kernel/KernelA.HPP,3553"$
+$LK,"SCf_NO_SHIFT",A="FL:::/Kernel/KernelA.HPP,3538"$
 $LK,"ARGT_MOFFS32",A="FL:::/Kernel/KernelA.HPP,1916"$
 $LK,"ARGT_MOFFS16",A="FL:::/Kernel/KernelA.HPP,1915"$
-$LK,"sys_heap_dbg",A="FL:::/Kernel/KernelB.HPP,179"$
+$LK,"sys_heap_dbg",A="FL:::/Kernel/KernelB.HPP,180"$
 $LK,"FUF_SINGLE",A="FL:::/Kernel/KernelA.HPP,2605"$
 $LK,"FUf_SINGLE",A="FL:::/Kernel/KernelA.HPP,2579"$
 $LK,"DOCEf_DFT_RAW_TYPE",A="FL:::/Kernel/KernelA.HPP,1111"$
-$LK,"DVDImageWriteTask",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,117",BI=478$
-$LK,"LTGRAY",A="FL:::/Kernel/KernelA.HPP,2964"$
-$LK,"CoreAPSethInit",A="FL:::/Kernel/MultiProc.CPP.Z,276",BI=479$
-$LK,"IRQKbd",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,411",BI=480$
-$LK,"QueVectU8Del",A="FL:::/Kernel/KDataTypes.CPP.Z,132",BI=481$
+$LK,"DVDImageWriteTask",A="FL:::/Kernel/BlkDev/DskCDDVD.CPP.Z,117",BI=480$
+$LK,"LTGRAY",A="FL:::/Kernel/KernelA.HPP,2965"$
+$LK,"CoreAPSethInit",A="FL:::/Kernel/MultiProc.CPP.Z,276",BI=481$
+$LK,"IRQKbd",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,411",BI=482$
+$LK,"QueVectU8Del",A="FL:::/Kernel/KDataTypes.CPP.Z,132",BI=483$
 $LK,"SwapU32",A="FL:::/Kernel/KernelB.HPP,115"$
 $LK,"SwapU16",A="FL:::/Kernel/KernelB.HPP,113"$
-$LK,"ARf_MESH_ED",A="FL:::/Kernel/KernelA.HPP,3904"$
+$LK,"ARf_MESH_ED",A="FL:::/Kernel/KernelA.HPP,3905"$
 $LK,"CAsmUndefHash",A="FL:::/Kernel/KernelA.HPP,1813"$
 $LK,"HTt_IMPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,653"$
 $LK,"HTt_EXPORT_SYS_SYM",A="FL:::/Kernel/KernelA.HPP,652"$
@@ -2184,12 +2188,12 @@ $LK,"C32_EDI",A="FL:::/Kernel/PCIBIOS.CPP.Z,63"$
 $LK,"pow10_I64",A="FL:::/Kernel/KGlbls.CPP.Z,15"$
 $LK,"sys_num_spawned_tasks",A="FL:::/Kernel/KGlbls.CPP.Z,9"$
 $LK,"LAPIC_LVT_LINT0",A="FL:::/Kernel/KernelA.HPP,501"$
-$LK,"Cluster2Blk",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,32",BI=482$
-$LK,"ArcFinishCompression",A="FL:::/Kernel/Compress.CPP.Z,155",BI=483$
+$LK,"Cluster2Blk",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,32",BI=484$
+$LK,"ArcFinishCompression",A="FL:::/Kernel/Compress.CPP.Z,155",BI=485$
 $LK,"LAPIC_LVT_LINT1",A="FL:::/Kernel/KernelA.HPP,502"$
 $LK,"sys_winmgr_task",A="FL:::/Kernel/KGlbls.CPP.Z,11"$
-$LK,"SC_CAPS",A="FL:::/Kernel/KernelA.HPP,3565"$
-$LK,"SYS_RAM_REBOOT_END",A="FL:::/Kernel/KStart.CPP.Z,378"$
+$LK,"SC_CAPS",A="FL:::/Kernel/KernelA.HPP,3566"$
+$LK,"SYS_RAM_REBOOT_END",A="FL:::/Kernel/KStart64.CPP.Z,99"$
 $LK,"REG_R8",A="FL:::/Kernel/KernelA.HPP,1784"$
 $LK,"CMT_ARRAY_DIM",A="FL:::/Kernel/KernelA.HPP,1693"$
 $LK,"ACD_POS_CHAR",A="FL:::/Kernel/KernelA.HPP,1519"$
@@ -2200,16 +2204,16 @@ $LK,"CRAXRBCRCXRDX",A="FL:::/Kernel/KernelA.HPP,568"$
 $LK,"_SAVE_EXCEPT_REGS",A="FL:::/Kernel/KExcept.CPP.Z,26"$
 $LK,"MDf_IMM",A="FL:::/Kernel/KernelA.HPP,1573"$
 $LK,"DOCf_COLOR_NAMES",A="FL:::/Kernel/KernelA.HPP,1299"$
-$LK,"RoundI64",A="FL:::/Kernel/KMathB.CPP.Z,47",BI=484$
-$LK,"CSndGlbls",A="FL:::/Kernel/KernelA.HPP,3843"$
+$LK,"RoundI64",A="FL:::/Kernel/KMathB.CPP.Z,47",BI=486$
+$LK,"CSndGlbls",A="FL:::/Kernel/KernelA.HPP,3844"$
 $LK,"EXT_HEAPLOG_FREE",A="FL:::/Kernel/KernelA.HPP,578"$
-$LK,"DrvSerialNum",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,279",BI=485$
+$LK,"DrvSerialNum",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,279",BI=487$
 $LK,"Fstsw",A="FL:::/Kernel/KernelB.HPP,133"$
-$LK,"TASKf_TASK_LOCK",A="FL:::/Kernel/KernelA.HPP,3281"$
+$LK,"TASKf_TASK_LOCK",A="FL:::/Kernel/KernelA.HPP,3282"$
 $LK,"BDT_ATA",A="FL:::/Kernel/KernelA.HPP,2631"$
 $LK,"RFLAGf_RESUME",A="FL:::/Kernel/KernelA.HPP,319"$
 $LK,"C32_EAX",A="FL:::/Kernel/PCIBIOS.CPP.Z,58"$
-$LK,"PortNop",A="FL:::/Kernel/KMisc.CPP.Z,1",BI=486$
+$LK,"PortNop",A="FL:::/Kernel/KMisc.CPP.Z,1",BI=488$
 $LK,"StrNCmp",A="FL:::/Kernel/StrA.CPP.Z,313"$
 $LK,"FUF_PUBLIC",A="FL:::/Kernel/KernelA.HPP,2602"$
 $LK,"FUf_PUBLIC",A="FL:::/Kernel/KernelA.HPP,2576"$
@@ -2222,97 +2226,97 @@ $LK,"LFSF_DOC",A="FL:::/Kernel/KernelA.HPP,2035"$
 $LK,"ACD_PRONUNCIATION_CHAR",A="FL:::/Kernel/KernelA.HPP,1518"$
 $LK,"ACD_PRONUNCIATION",A="FL:::/Kernel/KernelA.HPP,1507"$
 $LK,"C32_ECX",A="FL:::/Kernel/PCIBIOS.CPP.Z,60"$
-$LK,"FifoU8Peek",A="FL:::/Kernel/KDataTypes.CPP.Z,205",BI=487$
+$LK,"FifoU8Peek",A="FL:::/Kernel/KDataTypes.CPP.Z,205",BI=489$
 $LK,"C32_EDX",A="FL:::/Kernel/PCIBIOS.CPP.Z,61"$
-$LK,"LoadPass1",A="FL:::/Kernel/KLoad.CPP.Z,67",BI=488$
-$LK,"LoadPass2",A="FL:::/Kernel/KLoad.CPP.Z,154",BI=489$
-$LK,"ARf_MANAGE_SLIDER",A="FL:::/Kernel/KernelA.HPP,3906"$
-$LK,"CSndData",A="FL:::/Kernel/KernelA.HPP,3836"$
-$LK,"SC_PAGE_DOWN",A="FL:::/Kernel/KernelA.HPP,3573"$
+$LK,"LoadPass1",A="FL:::/Kernel/KLoad.CPP.Z,67",BI=490$
+$LK,"LoadPass2",A="FL:::/Kernel/KLoad.CPP.Z,154",BI=491$
+$LK,"ARf_MANAGE_SLIDER",A="FL:::/Kernel/KernelA.HPP,3907"$
+$LK,"CSndData",A="FL:::/Kernel/KernelA.HPP,3837"$
+$LK,"SC_PAGE_DOWN",A="FL:::/Kernel/KernelA.HPP,3574"$
 $LK,"OC_NOP",A="FL:::/Kernel/KernelA.HPP,1760"$
-$LK,"SPF_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HPP,3925"$
-$LK,"MSG_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3227"$
+$LK,"SPF_AUX_FMT_NUM",A="FL:::/Kernel/KernelA.HPP,3926"$
+$LK,"MSG_KEY_UP",A="FL:::/Kernel/KernelA.HPP,3228"$
 $LK,"SYS_SEMA_SINGLE_USER",A="FL:::/Kernel/KernelA.HPP,603"$
-$LK,"TimeStampFreqCal",A="FL:::/Kernel/KMisc.CPP.Z,80",BI=490$
-$LK,"QueVectU8Get",A="FL:::/Kernel/KDataTypes.CPP.Z,140",BI=491$
+$LK,"TimeStampFreqCal",A="FL:::/Kernel/KMisc.CPP.Z,85",BI=492$
+$LK,"QueVectU8Get",A="FL:::/Kernel/KDataTypes.CPP.Z,140",BI=493$
 $LK,"DOCF_CARRIAGE_RETURN",A="FL:::/Kernel/KernelA.HPP,1261"$
-$LK,"PostMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,240",BI=492$
-$LK,"SVCT_CALL",A="FL:::/Kernel/KernelA.HPP,3192"$
+$LK,"PostMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,240",BI=494$
+$LK,"SVCT_CALL",A="FL:::/Kernel/KernelA.HPP,3193"$
 $LK,"MDf_REG",A="FL:::/Kernel/KernelA.HPP,1574"$
-$LK,"ATAPISeek",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,131",BI=493$
-$LK,"MPrintDate",A="FL:::/Kernel/StrPrint.CPP.Z,49",BI=494$
-$LK,"SC_F10",A="FL:::/Kernel/KernelA.HPP,3587"$
-$LK,"SC_F11",A="FL:::/Kernel/KernelA.HPP,3588"$
+$LK,"ATAPISeek",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,131",BI=495$
+$LK,"MPrintDate",A="FL:::/Kernel/StrPrint.CPP.Z,49",BI=496$
+$LK,"_BIT_FIELD_EXT_U32",A="FL:::/Kernel/KUtils.CPP.Z,167"$
+$LK,"SC_F10",A="FL:::/Kernel/KernelA.HPP,3588"$
+$LK,"SC_F11",A="FL:::/Kernel/KernelA.HPP,3589"$
 $LK,"SYS_SEMA_TT",A="FL:::/Kernel/KernelA.HPP,609"$
-$LK,"Silent",A="FL:::/Kernel/KMisc.CPP.Z,218",BI=495$
-$LK,"SC_F12",A="FL:::/Kernel/KernelA.HPP,3589"$
+$LK,"Silent",A="FL:::/Kernel/KMisc.CPP.Z,223",BI=497$
+$LK,"SC_F12",A="FL:::/Kernel/KernelA.HPP,3590"$
 $LK,"WIF_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HPP,1424"$
 $LK,"CCF_POSTINC",A="FL:::/Kernel/KernelA.HPP,2151"$
 $LK,"CCF_IN_IF",A="FL:::/Kernel/KernelA.HPP,2133"$
-$LK,"DrvMakeFreeSlot",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,38",BI=496$
+$LK,"DrvMakeFreeSlot",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,38",BI=498$
 $LK,"HashStr",A="FL:::/Kernel/KHashA.CPP.Z,254"$
 $LK,"CHashExport",A="FL:::/Kernel/KernelA.HPP,759"$
-$LK,"FifoU8Del",A="FL:::/Kernel/KDataTypes.CPP.Z,167",BI=497$
-$LK,"DrvIsWritable",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,199",BI=498$
+$LK,"FifoU8Del",A="FL:::/Kernel/KDataTypes.CPP.Z,167",BI=499$
+$LK,"DrvIsWritable",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,199",BI=500$
 $LK,"MDf_SIB",A="FL:::/Kernel/KernelA.HPP,1576"$
 $LK,"chars_bmp_printable",A="FL:::/Kernel/StrA.CPP.Z,381"$
-$LK,"FWBlks",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,181",BI=499$
+$LK,"FWBlks",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,181",BI=501$
 $LK,"RLF_COMPILER",A="FL:::/Kernel/KernelA.HPP,468"$
 $LK,"RLf_COMPILER",A="FL:::/Kernel/KernelA.HPP,449"$
 $LK,"SYS_INIT_PAGE_TABLES",A="FL:::/Kernel/Mem/PageTables.CPP.Z,6"$
-$LK,"TASK_NAME_LEN",A="FL:::/Kernel/KernelA.HPP,3305"$
-$LK,"COLORROP_COLORS_MASK",A="FL:::/Kernel/KernelA.HPP,2986"$
+$LK,"TASK_NAME_LEN",A="FL:::/Kernel/KernelA.HPP,3306"$
+$LK,"COLORROP_COLORS_MASK",A="FL:::/Kernel/KernelA.HPP,2987"$
 $LK,"C32_ESI",A="FL:::/Kernel/PCIBIOS.CPP.Z,62"$
-$LK,"BlkPoolsInit",A="FL:::/Kernel/Mem/BlkPool.CPP.Z,29",BI=500$
-$LK,"SYS_DATA_BP",A="FL:::/Kernel/KStart.CPP.Z,210"$
-$LK,"VGAP_PALETTE_DATA",A="FL:::/Kernel/KernelA.HPP,3738"$
+$LK,"BlkPoolsInit",A="FL:::/Kernel/Mem/BlkPool.CPP.Z,29",BI=502$
+$LK,"SYS_DATA_BP",A="FL:::/Kernel/KStart32.CPP.Z,28"$
+$LK,"VGAP_PALETTE_DATA",A="FL:::/Kernel/KernelA.HPP,3739"$
 $LK,"ATAR0_HCYL",A="FL:::/Kernel/KernelA.HPP,2282"$
 $LK,"DOCET_SEL",A="FL:::/Kernel/KernelA.HPP,949"$
-$LK,"sys_code_bp",A="FL:::/Kernel/KernelB.HPP,188"$
+$LK,"sys_code_bp",A="FL:::/Kernel/KernelB.HPP,189"$
 $LK,"RepOutU32",A="FL:::/Kernel/KernelB.HPP,90"$
 $LK,"RepOutU16",A="FL:::/Kernel/KernelB.HPP,88"$
 $LK,"TK_SUBSCRIPT",A="FL:::/Kernel/KernelA.HPP,2071"$
 $LK,"WIG_TASK_DFT",A="FL:::/Kernel/KernelA.HPP,1434"$
 $LK,"REGT_NONE",A="FL:::/Kernel/KernelA.HPP,738"$
-$LK,"ARf_PSALMODY_JUKEBOX",A="FL:::/Kernel/KernelA.HPP,3903"$
+$LK,"ARf_PSALMODY_JUKEBOX",A="FL:::/Kernel/KernelA.HPP,3904"$
 $LK,"DOCEf_HTML_LINK",A="FL:::/Kernel/KernelA.HPP,1057"$
 $LK,"DOCEF_HTML_LINK",A="FL:::/Kernel/KernelA.HPP,969"$
 $LK,"NORMAL_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,3"$
-$LK,"LinkedLstSize",A="FL:::/Kernel/KDataTypes.CPP.Z,31",BI=501$
+$LK,"LinkedLstSize",A="FL:::/Kernel/KDataTypes.CPP.Z,31",BI=503$
 $LK,"SSF_NO_COMPRESSION",A="FL:::/Kernel/KernelA.HPP,224"$
-$LK,"DirContextNew",A="FL:::/Kernel/BlkDev/DskDirContext.CPP.Z,21",BI=502$
+$LK,"DirContextNew",A="FL:::/Kernel/BlkDev/DskDirContext.CPP.Z,21",BI=504$
 $LK,"_SET_MSR",A="FL:::/Kernel/KUtils.CPP.Z,458"$
 $LK,"HClf_LOCKED",A="FL:::/Kernel/KernelA.HPP,2904"$
-$LK,"SPF_QUESTION",A="FL:::/Kernel/KernelA.HPP,3924"$
+$LK,"SPF_QUESTION",A="FL:::/Kernel/KernelA.HPP,3925"$
 $LK,"ACD_EXTRA_END",A="FL:::/Kernel/KernelA.HPP,1512"$
-$LK,"SetRFlags",A="FL:::/Kernel/KernelB.HPP,248"$
-$LK,"GetRFlags",A="FL:::/Kernel/KernelB.HPP,242"$
+$LK,"SetRFlags",A="FL:::/Kernel/KernelB.HPP,249"$
+$LK,"GetRFlags",A="FL:::/Kernel/KernelB.HPP,243"$
 $LK,"DOCEF_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HPP,973"$
-$LK,"MSG_IP_MOVE",A="FL:::/Kernel/KernelA.HPP,3228"$
-$LK,"SVCT_TEXT_INPUT",A="FL:::/Kernel/KernelA.HPP,3188"$
+$LK,"MSG_IP_MOVE",A="FL:::/Kernel/KernelA.HPP,3229"$
+$LK,"SVCT_TEXT_INPUT",A="FL:::/Kernel/KernelA.HPP,3189"$
 $LK,"DOClf_LOCKED",A="FL:::/Kernel/KernelA.HPP,1332"$
-$LK,"CallStkGrow",A="FL:::/Kernel/KTask.CPP.Z,78",BI=503$
+$LK,"CallStkGrow",A="FL:::/Kernel/KTask.CPP.Z,78",BI=505$
 $LK,"ATAR0_NSECT",A="FL:::/Kernel/KernelA.HPP,2279"$
 $LK,"DOCEf_RIGHT_MACRO",A="FL:::/Kernel/KernelA.HPP,1061"$
 $LK,"RLF_DOC",A="FL:::/Kernel/KernelA.HPP,469"$
 $LK,"chars_bmp_macro",A="FL:::/Kernel/StrA.CPP.Z,376"$
 $LK,"OutU8",A="FL:::/Kernel/KernelB.HPP,80"$
-$LK,"DCF_ALIAS",A="FL:::/Kernel/KernelA.HPP,3641"$
-$LK,"CoreAPSethTask",A="FL:::/Kernel/MultiProc.CPP.Z,194",BI=504$
+$LK,"DCF_ALIAS",A="FL:::/Kernel/KernelA.HPP,3642"$
+$LK,"CoreAPSethTask",A="FL:::/Kernel/MultiProc.CPP.Z,194",BI=506$
 $LK,"Ff_HASERRCODE",A="FL:::/Kernel/KernelA.HPP,848"$
 $LK,"REGG_LOCAL_NON_PTR_VARS",A="FL:::/Kernel/KernelA.HPP,1795"$
 $LK,"DOCF_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HPP,1258"$
-$LK,"RawPutChar",A="FL:::/Kernel/Display.CPP.Z,1",BI=505$
-$LK,"FifoU8Cnt",A="FL:::/Kernel/KDataTypes.CPP.Z,227",BI=506$
-$LK,"C:/Doc/TimeHPET.TXT.Z",A="FL:::/Kernel/KernelB.HPP,283"$
+$LK,"RawPutChar",A="FL:::/Kernel/Display.CPP.Z,1",BI=507$
+$LK,"FifoU8Cnt",A="FL:::/Kernel/KDataTypes.CPP.Z,227",BI=508$
 $LK,"DOCf_PLAIN_TEXT",A="FL:::/Kernel/KernelA.HPP,1294"$
-$LK,"CArcEntry",A="FL:::/Kernel/KernelA.HPP,3752"$
+$LK,"CArcEntry",A="FL:::/Kernel/KernelA.HPP,3753"$
 $LK,"BDT_ISO_FILE_WRITE",A="FL:::/Kernel/KernelA.HPP,2633"$
 $LK,"AOT_BIN_BLK_SIZE",A="FL:::/Kernel/KernelA.HPP,1798"$
 $LK,"DOCf_FORM",A="FL:::/Kernel/KernelA.HPP,1302"$
 $LK,"DOCF_FORM",A="FL:::/Kernel/KernelA.HPP,1266"$
 $LK,"CHashTable",A="FL:::/Kernel/KernelA.HPP,642"$
-$LK,"QueVectU8New",A="FL:::/Kernel/KDataTypes.CPP.Z,87",BI=507$
+$LK,"QueVectU8New",A="FL:::/Kernel/KDataTypes.CPP.Z,87",BI=509$
 $LK,"MEM_INTERRUPT_STK",A="FL:::/Kernel/KernelA.HPP,2886"$
 $LK,"BDT_RAM",A="FL:::/Kernel/KernelA.HPP,2630"$
 $LK,"CMF_POP_CMP",A="FL:::/Kernel/KernelA.HPP,1696"$
@@ -2322,113 +2326,113 @@ $LK,"MLMF_IS_STR",A="FL:::/Kernel/KernelA.HPP,788"$
 $LK,"SYS_TIMER0_PERIOD",A="FL:::/Kernel/KernelA.HPP,553"$
 $LK,"SET_FS_BASE",A="FL:::/Kernel/KUtils.CPP.Z,445"$
 $LK,"CISO1PriDesc",A="FL:::/Kernel/KernelA.HPP,2484"$
-$LK,"PutHex",A="FL:::/Kernel/StrA.CPP.Z,12",BI=508$
-$LK,"PopUp",A="FL:::/Kernel/SrvCmd.CPP.Z,377",BI=509$
-$LK,"SCF_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3549"$
-$LK,"SCf_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3534"$
-$LK,"MSG_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3233"$
-$LK,"SVCT_EXE_STR",A="FL:::/Kernel/KernelA.HPP,3190"$
+$LK,"PutHex",A="FL:::/Kernel/StrA.CPP.Z,12",BI=510$
+$LK,"PopUp",A="FL:::/Kernel/SrvCmd.CPP.Z,377",BI=511$
+$LK,"SCF_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3550"$
+$LK,"SCf_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3535"$
+$LK,"MSG_IP_R_DOWN",A="FL:::/Kernel/KernelA.HPP,3234"$
+$LK,"SVCT_EXE_STR",A="FL:::/Kernel/KernelA.HPP,3191"$
 $LK,"DOCF_OVERSTRIKE",A="FL:::/Kernel/KernelA.HPP,1288"$
 $LK,"IOAPICARB",A="FL:::/Kernel/KernelA.HPP,514"$
 $LK,"DOCf_OVERSTRIKE",A="FL:::/Kernel/KernelA.HPP,1325"$
 $LK,"COREAP_16BIT_INIT_END",A="FL:::/Kernel/MultiProc.CPP.Z,27"$
-$LK,"SCF_SHIFT",A="FL:::/Kernel/KernelA.HPP,3541"$
-$LK,"SCf_SHIFT",A="FL:::/Kernel/KernelA.HPP,3526"$
+$LK,"SCF_SHIFT",A="FL:::/Kernel/KernelA.HPP,3542"$
+$LK,"SCf_SHIFT",A="FL:::/Kernel/KernelA.HPP,3527"$
 $LK,"WIF_SELF_FOCUS",A="FL:::/Kernel/KernelA.HPP,1409"$
-$LK,"StrLastOcc",A="FL:::/Kernel/StrA.CPP.Z,599",BI=510$
+$LK,"StrLastOcc",A="FL:::/Kernel/StrA.CPP.Z,599",BI=512$
 $LK,"WIf_SELF_FOCUS",A="FL:::/Kernel/KernelA.HPP,1438"$
-$LK,"FClose",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,73",BI=511$
+$LK,"FClose",A="FL:::/Kernel/BlkDev/DskCFile.CPP.Z,73",BI=513$
 $LK,"MDf_STK",A="FL:::/Kernel/KernelA.HPP,1572"$
 $LK,"IEF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,1958"$
 $LK,"CMT_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,1689"$
 $LK,"mon_start_days1",A="FL:::/Kernel/KDate.CPP.Z,3"$
 $LK,"HTF_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,706"$
 $LK,"mon_start_days2",A="FL:::/Kernel/KDate.CPP.Z,5"$
-$LK,"FONT_HEIGHT",A="FL:::/Kernel/KernelA.HPP,3613"$
-$LK,"SVCf_FOCUS_MASTER",A="FL:::/Kernel/KernelA.HPP,3178"$
+$LK,"FONT_HEIGHT",A="FL:::/Kernel/KernelA.HPP,3614"$
+$LK,"SVCf_FOCUS_MASTER",A="FL:::/Kernel/KernelA.HPP,3179"$
 $LK,"HTf_GOTO_LABEL",A="FL:::/Kernel/KernelA.HPP,676"$
 $LK,"DFT_CACHE_LINE_WIDTH",A="FL:::/Kernel/KernelA.HPP,583"$
 $LK,"ATAR0_LCYL",A="FL:::/Kernel/KernelA.HPP,2281"$
-$LK,"MemPagePresentMark",A="FL:::/Kernel/Mem/PageTables.CPP.Z,123",BI=512$
+$LK,"MemPagePresentMark",A="FL:::/Kernel/Mem/PageTables.CPP.Z,143",BI=514$
 $LK,"ICf_DONT_PUSH_FLOAT0",A="FL:::/Kernel/KernelA.HPP,1612"$
-$LK,"Sleep",A="FL:::/Kernel/KMisc.CPP.Z,150",BI=513$
-$LK,"RedSeaMkDir",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,604",BI=514$
-$LK,"PutKey",A="FL:::/Kernel/KeyDev.CPP.Z,1",BI=515$
+$LK,"Sleep",A="FL:::/Kernel/KMisc.CPP.Z,155",BI=515$
+$LK,"RedSeaMkDir",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,604",BI=516$
+$LK,"PutKey",A="FL:::/Kernel/KeyDev.CPP.Z,1",BI=517$
 $LK,"_HASH_STR",A="FL:::/Kernel/KHashA.CPP.Z,120"$
 $LK,"FUf_ALL",A="FL:::/Kernel/KernelA.HPP,2572"$
 $LK,"sys_macro_task",A="FL:::/Kernel/KGlbls.CPP.Z,5"$
-$LK,"CArcCompress",A="FL:::/Kernel/KernelA.HPP,3778"$
+$LK,"CArcCompress",A="FL:::/Kernel/KernelA.HPP,3779"$
 $LK,"CHashOpcode",A="FL:::/Kernel/KernelA.HPP,1950"$
-$LK,"FifoU8Ins",A="FL:::/Kernel/KDataTypes.CPP.Z,173",BI=516$
-$LK,"CGridGlbls",A="FL:::/Kernel/KernelA.HPP,3069"$
-$LK,"FATFromName",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,168",BI=517$
+$LK,"FifoU8Ins",A="FL:::/Kernel/KDataTypes.CPP.Z,173",BI=518$
+$LK,"CGridGlbls",A="FL:::/Kernel/KernelA.HPP,3070"$
+$LK,"FATFromName",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,168",BI=519$
 $LK,"AAT_ADD_U32",A="FL:::/Kernel/KernelA.HPP,1973"$
 $LK,"AAT_ADD_U16",A="FL:::/Kernel/KernelA.HPP,1971"$
-$LK,"SC_PAUSE",A="FL:::/Kernel/KernelA.HPP,3590"$
-$LK,"TRANSPARENT",A="FL:::/Kernel/KernelA.HPP,2956"$
-$LK,"XTalkStrWait",A="FL:::/Kernel/SrvCmd.CPP.Z,497",BI=518$
-$LK,"CArcCtrl",A="FL:::/Kernel/KernelA.HPP,3760"$
-$LK,"SC_CTRL",A="FL:::/Kernel/KernelA.HPP,3563"$
+$LK,"SC_PAUSE",A="FL:::/Kernel/KernelA.HPP,3591"$
+$LK,"TRANSPARENT",A="FL:::/Kernel/KernelA.HPP,2957"$
+$LK,"XTalkStrWait",A="FL:::/Kernel/SrvCmd.CPP.Z,497",BI=520$
+$LK,"CArcCtrl",A="FL:::/Kernel/KernelA.HPP,3761"$
+$LK,"SC_CTRL",A="FL:::/Kernel/KernelA.HPP,3564"$
 $LK,"RS_ATTR_LONG_NAME_MASK",A="FL:::/Kernel/KernelA.HPP,2534"$
 $LK,"ATAR1_CTRL",A="FL:::/Kernel/KernelA.HPP,2286"$
 $LK,"ICF_A1_TO_F64",A="FL:::/Kernel/KernelA.HPP,1593"$
 $LK,"RECALCF_ADD_CURSOR",A="FL:::/Kernel/KernelA.HPP,1351"$
 $LK,"DOC_COLOR_BIN",A="FL:::/Kernel/KernelA.HPP,1141"$
 $LK,"Ff_NOARGPOP",A="FL:::/Kernel/KernelA.HPP,850"$
-$LK,"EdLiteFileLine",A="FL:::/Kernel/EdLite.CPP.Z,316",BI=519$
-$LK,"FifoU8New",A="FL:::/Kernel/KDataTypes.CPP.Z,155",BI=520$
-$LK,"SC_HOME",A="FL:::/Kernel/KernelA.HPP,3574"$
-$LK,"ATAPIWritePktWord",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,106",BI=521$
-$LK,"FilesFindMatch",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,40",BI=522$
-$LK,"BlkDevsRelease",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,109",BI=523$
+$LK,"EdLiteFileLine",A="FL:::/Kernel/EdLite.CPP.Z,316",BI=521$
+$LK,"FifoU8New",A="FL:::/Kernel/KDataTypes.CPP.Z,155",BI=522$
+$LK,"SC_HOME",A="FL:::/Kernel/KernelA.HPP,3575"$
+$LK,"ATAPIWritePktWord",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,106",BI=523$
+$LK,"FilesFindMatch",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,40",BI=524$
+$LK,"BlkDevsRelease",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,109",BI=525$
 $LK,"DOC_COLOR_LINK",A="FL:::/Kernel/KernelA.HPP,1136"$
 $LK,"AAT_ADD_U64",A="FL:::/Kernel/KernelA.HPP,1975"$
 $LK,"HTT_CLASS",A="FL:::/Kernel/KernelA.HPP,686"$
 $LK,"HTt_CLASS",A="FL:::/Kernel/KernelA.HPP,656"$
-$LK,"Cd2DirEntry",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,217",BI=524$
+$LK,"Cd2DirEntry",A="FL:::/Kernel/BlkDev/DskStrA.CPP.Z,217",BI=526$
 $LK,"IET_IMM_U0",A="FL:::/Kernel/KernelA.HPP,395"$
-$LK,"FifoU8Rem",A="FL:::/Kernel/KDataTypes.CPP.Z,190",BI=525$
-$LK,"StrLastRem",A="FL:::/Kernel/StrA.CPP.Z,609",BI=526$
-$LK,"RedSeaDrvInit",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,58",BI=527$
-$LK,"BlkDevAdd",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,27",BI=528$
+$LK,"FifoU8Rem",A="FL:::/Kernel/KDataTypes.CPP.Z,190",BI=527$
+$LK,"StrLastRem",A="FL:::/Kernel/StrA.CPP.Z,609",BI=528$
+$LK,"RedSeaDrvInit",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,58",BI=529$
+$LK,"BlkDevAdd",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,27",BI=530$
 $LK,"REGG_CLOBBERED",A="FL:::/Kernel/KernelA.HPP,1791"$
-$LK,"ROPF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HPP,2948"$
-$LK,"DirLongNameFill",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,199",BI=529$
-$LK,"QueVectU8Put",A="FL:::/Kernel/KDataTypes.CPP.Z,96",BI=530$
-$LK,"StrFind",A="FL:::/Kernel/StrA.CPP.Z,624",BI=531$
+$LK,"ROPF_HALF_RANGE_COLOR",A="FL:::/Kernel/KernelA.HPP,2949"$
+$LK,"DirLongNameFill",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,199",BI=531$
+$LK,"QueVectU8Put",A="FL:::/Kernel/KDataTypes.CPP.Z,96",BI=532$
+$LK,"StrFind",A="FL:::/Kernel/StrA.CPP.Z,624",BI=533$
 $LK,"CMemRange",A="FL:::/Kernel/KernelA.HPP,2868"$
 $LK,"WIf_FOCUS_TASK_CTRLS",A="FL:::/Kernel/KernelA.HPP,1449"$
 $LK,"C32_RSP",A="FL:::/Kernel/PCIBIOS.CPP.Z,66"$
-$LK,"OutStr",A="FL:::/Kernel/StrPrint.CPP.Z,20",BI=532$
+$LK,"OutStr",A="FL:::/Kernel/StrPrint.CPP.Z,20",BI=534$
 $LK,"DOCEf_CHECK_COLLAPSABLE",A="FL:::/Kernel/KernelA.HPP,1094"$
 $LK,"DOCEF_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HPP,995"$
-$LK,"TimersInit",A="FL:::/Kernel/KEnd.CPP.Z,89",BI=533$
+$LK,"TimersInit",A="FL:::/Kernel/KEnd.CPP.Z,88",BI=535$
 $LK,"ATAR0_SECT",A="FL:::/Kernel/KernelA.HPP,2280"$
 $LK,"__CMD_LINE__",A="FL:::/Kernel/KernelA.HPP,2029"$
 $LK,"WIF_SELF_CTRLS",A="FL:::/Kernel/KernelA.HPP,1411"$
 $LK,"DOCEf_PAGE_REL_Y",A="FL:::/Kernel/KernelA.HPP,1083"$
 $LK,"IET_IMM_U8",A="FL:::/Kernel/KernelA.HPP,397"$
-$LK,"SC_ALT",A="FL:::/Kernel/KernelA.HPP,3564"$
+$LK,"SC_ALT",A="FL:::/Kernel/KernelA.HPP,3565"$
 $LK,"ARGT_MOFFS8",A="FL:::/Kernel/KernelA.HPP,1914"$
 $LK,"REGG_STK_TEMP",A="FL:::/Kernel/KernelA.HPP,1793"$
 $LK,"WIf_SELF_CTRLS",A="FL:::/Kernel/KernelA.HPP,1439"$
 $LK,"EXT_NUM_ENTRIES",A="FL:::/Kernel/KernelA.HPP,580"$
-$LK,"DefineMatch",A="FL:::/Kernel/KDefine.CPP.Z,85",BI=534$
+$LK,"DefineMatch",A="FL:::/Kernel/KDefine.CPP.Z,85",BI=536$
 $LK,"CLexHashTableContext",A="FL:::/Kernel/KernelA.HPP,2114"$
 $LK,"RLF_RAW",A="FL:::/Kernel/KernelA.HPP,464"$
-$LK,"WZeroBlks",A="FL:::/Kernel/BlkDev/DskBlk.CPP.Z,2",BI=535$
-$LK,"ATAPISetMaxSpeed",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,118",BI=536$
-$LK,"StkRep",A="FL:::/Kernel/KDbg.CPP.Z,104",BI=537$
+$LK,"WZeroBlks",A="FL:::/Kernel/BlkDev/DskBlk.CPP.Z,2",BI=537$
+$LK,"ATAPISetMaxSpeed",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,118",BI=538$
+$LK,"StkRep",A="FL:::/Kernel/KDbg.CPP.Z,104",BI=539$
 $LK,"SwapU8",A="FL:::/Kernel/KernelB.HPP,117"$
-$LK,"FUN_SEG_CACHE_STR_LEN",A="FL:::/Kernel/KernelA.HPP,3859"$
-$LK,"DCF_TRANSFORMATION",A="FL:::/Kernel/KernelA.HPP,3630"$
+$LK,"FUN_SEG_CACHE_STR_LEN",A="FL:::/Kernel/KernelA.HPP,3860"$
+$LK,"DCF_TRANSFORMATION",A="FL:::/Kernel/KernelA.HPP,3631"$
 $LK,"FF_CONTIGUOUS",A="FL:::/Kernel/KernelA.HPP,2784"$
-$LK,"TTS_CONST",A="FL:::/Kernel/KernelA.HPP,3274"$
+$LK,"TTS_CONST",A="FL:::/Kernel/KernelA.HPP,3275"$
 $LK,"ISO1T_VOL_DRV_DESC",A="FL:::/Kernel/KernelA.HPP,2481"$
 $LK,"SaveExceptRegs",A="FL:::/Kernel/KExcept.CPP.Z,43"$
-$LK,"SC_END",A="FL:::/Kernel/KernelA.HPP,3575"$
+$LK,"SC_END",A="FL:::/Kernel/KernelA.HPP,3576"$
 $LK,"CAOTHeapGlbl",A="FL:::/Kernel/KernelA.HPP,1990"$
-$LK,"ArcExpandBuf",A="FL:::/Kernel/Compress.CPP.Z,165",BI=538$
+$LK,"ArcExpandBuf",A="FL:::/Kernel/Compress.CPP.Z,165",BI=540$
 $LK,"FUf_MAP",A="FL:::/Kernel/KernelA.HPP,2577"$
 $LK,"DOCf_MORE",A="FL:::/Kernel/KernelA.HPP,1310"$
 $LK,"DOCF_MORE",A="FL:::/Kernel/KernelA.HPP,1274"$
@@ -2437,13 +2441,13 @@ $LK,"CISO1PathEntry",A="FL:::/Kernel/KernelA.HPP,2469"$
 $LK,"REGG_SAVED",A="FL:::/Kernel/KernelA.HPP,1792"$
 $LK,"SF_ARG1",A="FL:::/Kernel/KernelA.HPP,559"$
 $LK,"RLF_VGA",A="FL:::/Kernel/KernelA.HPP,458"$
-$LK,"COLOR_MONO",A="FL:::/Kernel/KernelA.HPP,2976"$
+$LK,"COLOR_MONO",A="FL:::/Kernel/KernelA.HPP,2977"$
 $LK,"ACD_END_CHAR",A="FL:::/Kernel/KernelA.HPP,1515"$
 $LK,"WIF_FOCUS_TASK_IP_WHEEL",A="FL:::/Kernel/KernelA.HPP,1429"$
 $LK,"DOCET_INVERT",A="FL:::/Kernel/KernelA.HPP,948"$
 $LK,"SF_ARG2",A="FL:::/Kernel/KernelA.HPP,560"$
-$LK,"SC_SCROLL",A="FL:::/Kernel/KernelA.HPP,3567"$
-$LK,"DISPLAYf_NOT_RAW",A="FL:::/Kernel/KernelA.HPP,3298"$
+$LK,"SC_SCROLL",A="FL:::/Kernel/KernelA.HPP,3568"$
+$LK,"DISPLAYf_NOT_RAW",A="FL:::/Kernel/KernelA.HPP,3299"$
 $LK,"DOCEt_INVERT",A="FL:::/Kernel/KernelA.HPP,954"$
 $LK,"ATTRf_INVERT",A="FL:::/Kernel/KernelA.HPP,895"$
 $LK,"ATTRF_INVERT",A="FL:::/Kernel/KernelA.HPP,890"$
@@ -2452,65 +2456,64 @@ $LK,"ACD_PRONUNCIATION_END",A="FL:::/Kernel/KernelA.HPP,1508"$
 $LK,"SF_ARG4",A="FL:::/Kernel/KernelA.HPP,562"$
 $LK,"SF_ARG5",A="FL:::/Kernel/KernelA.HPP,563"$
 $LK,"ODEF_STARTED",A="FL:::/Kernel/KernelA.HPP,242"$
-$LK,"TaskFocusNext",A="FL:::/Kernel/Sched.CPP.Z,38",BI=539$
-$LK,"Print",A="FL:::/Kernel/StrPrint.CPP.Z,888",BI=540$
-$LK,"SFF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HPP,3806"$
+$LK,"TaskFocusNext",A="FL:::/Kernel/Sched.CPP.Z,38",BI=541$
+$LK,"Print",A="FL:::/Kernel/StrPrint.CPP.Z,890",BI=542$
+$LK,"SFF_WHOLE_LABELS_BEFORE",A="FL:::/Kernel/KernelA.HPP,3807"$
 $LK,"FUF_RISKY",A="FL:::/Kernel/KernelA.HPP,2601"$
 $LK,"FUf_RISKY",A="FL:::/Kernel/KernelA.HPP,2575"$
 $LK,"CAOTAbsAddr",A="FL:::/Kernel/KernelA.HPP,1977"$
 $LK,"SF_ARG6",A="FL:::/Kernel/KernelA.HPP,564"$
-$LK,"SC_ESC",A="FL:::/Kernel/KernelA.HPP,3558"$
+$LK,"SC_ESC",A="FL:::/Kernel/KernelA.HPP,3559"$
 $LK,"ACD_WORD_CHAR",A="FL:::/Kernel/KernelA.HPP,1516"$
 $LK,"SF_ARG7",A="FL:::/Kernel/KernelA.HPP,565"$
-$LK,"FAT32DrvValidate",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,48",BI=541$
+$LK,"FAT32DrvValidate",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,48",BI=543$
 $LK,"StrCmp",A="FL:::/Kernel/StrA.CPP.Z,309"$
-$LK,"MSG_RESIZE",A="FL:::/Kernel/KernelA.HPP,3238"$
+$LK,"MSG_RESIZE",A="FL:::/Kernel/KernelA.HPP,3239"$
 $LK,"DOF_INTERCEPT_TASK_END",A="FL:::/Kernel/KernelA.HPP,1216"$
 $LK,"SF_ARG8",A="FL:::/Kernel/KernelA.HPP,566"$
-$LK,"BlkDevDel",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,154",BI=542$
-$LK,"ST_ERR_ST",A="FL:::/Kernel/KernelA.HPP,3520"$
-$LK,"BlkDevChk",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,163",BI=543$
-$LK,"MSG_IP_L_UP",A="FL:::/Kernel/KernelA.HPP,3230"$
+$LK,"BlkDevDel",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,154",BI=544$
+$LK,"ST_ERR_ST",A="FL:::/Kernel/KernelA.HPP,3521"$
+$LK,"BlkDevChk",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,163",BI=545$
+$LK,"MSG_IP_L_UP",A="FL:::/Kernel/KernelA.HPP,3231"$
 $LK,"FSt_REDSEA",A="FL:::/Kernel/KernelA.HPP,2687"$
 $LK,"CPCIDev",A="FL:::/Kernel/KernelA.HPP,2241"$
 $LK,"DOCEf_DFT_LEN",A="FL:::/Kernel/KernelA.HPP,1110"$
 $LK,"DOCEF_DFT_LEN",A="FL:::/Kernel/KernelA.HPP,1024"$
 $LK,"RepOutU8",A="FL:::/Kernel/KernelB.HPP,92"$
 $LK,"DOCEF_RIGHT_AUTO",A="FL:::/Kernel/KernelA.HPP,986"$
-$LK,"sys_macro_root",A="FL:::/Kernel/KGlbls.CPP.Z,4"$
-$LK,"DrvBlkDevDel",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,78",BI=544$
-$LK,"VGAP_PALETTE_MASK",A="FL:::/Kernel/KernelA.HPP,3735"$
+$LK,"DrvBlkDevDel",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,78",BI=546$
+$LK,"VGAP_PALETTE_MASK",A="FL:::/Kernel/KernelA.HPP,3736"$
 $LK,"DOCEf_RIGHT_AUTO",A="FL:::/Kernel/KernelA.HPP,1074"$
 $LK,"NUM_SYS_SEMAS",A="FL:::/Kernel/KernelA.HPP,615"$
-$LK,"ATAPISync",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,501",BI=545$
+$LK,"ATAPISync",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,501",BI=547$
 $LK,"TO_UPPER",A="FL:::/Kernel/StrA.CPP.Z,110"$
 $LK,"RFLAGG_NORMAL",A="FL:::/Kernel/KernelA.HPP,327"$
 $LK,"KERNEL_MODULE_NAME",A="FL:::/Kernel/KernelA.HPP,716"$
 $LK,"SYS_SEMA_DSK_CACHE",A="FL:::/Kernel/KernelA.HPP,604"$
 $LK,"MEM_PAGE_SIZE",A="FL:::/Kernel/KernelA.HPP,2877"$
-$LK,"SleepUntil",A="FL:::/Kernel/KMisc.CPP.Z,142",BI=546$
-$LK,"Spawn",A="FL:::/Kernel/KTask.CPP.Z,210",BI=547$
-$LK,"CTaskDying",A="FL:::/Kernel/KernelA.HPP,3314"$
-$LK,"MSG_IP_R_D_UP",A="FL:::/Kernel/KernelA.HPP,3236"$
+$LK,"SleepUntil",A="FL:::/Kernel/KMisc.CPP.Z,147",BI=548$
+$LK,"Spawn",A="FL:::/Kernel/KTask.CPP.Z,210",BI=549$
+$LK,"CTaskDying",A="FL:::/Kernel/KernelA.HPP,3315"$
+$LK,"MSG_IP_R_D_UP",A="FL:::/Kernel/KernelA.HPP,3237"$
 $LK,"CRedSeaBoot",A="FL:::/Kernel/KernelA.HPP,2323"$
 $LK,"WIF_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,1421"$
 $LK,"SET_GS_BASE",A="FL:::/Kernel/KUtils.CPP.Z,433"$
 $LK,"RFLAGf_VINT_PENDING",A="FL:::/Kernel/KernelA.HPP,323"$
-$LK,"DirEntryDel2",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,26",BI=548$
-$LK,"DefineLoad",A="FL:::/Kernel/KDefine.CPP.Z,1",BI=549$
-$LK,"INT_FAULT_ERR_CODE_BITMAP",A="FL:::/Kernel/KInts.CPP.Z,87"$
+$LK,"DirEntryDel2",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,26",BI=550$
+$LK,"DefineLoad",A="FL:::/Kernel/KDefine.CPP.Z,1",BI=551$
+$LK,"INT_FAULT_ERR_CODE_BITMAP",A="FL:::/Kernel/KInts.CPP.Z,94"$
 $LK,"ICF_NO_RIP",A="FL:::/Kernel/KernelA.HPP,1617"$
-$LK,"SUF_REM_CTRL_CHARS",A="FL:::/Kernel/KernelA.HPP,3792"$
-$LK,"SC_SHIFT",A="FL:::/Kernel/KernelA.HPP,3562"$
+$LK,"SUF_REM_CTRL_CHARS",A="FL:::/Kernel/KernelA.HPP,3793"$
+$LK,"SC_SHIFT",A="FL:::/Kernel/KernelA.HPP,3563"$
 $LK,"ATA_SET_MAX_EXT",A="FL:::/Kernel/KernelA.HPP,2264"$
-$LK,"StrOcc",A="FL:::/Kernel/StrA.CPP.Z,467",BI=550$
+$LK,"StrOcc",A="FL:::/Kernel/StrA.CPP.Z,467",BI=552$
 $LK,"StrCpy",A="FL:::/Kernel/StrA.CPP.Z,321"$
-$LK,"DOCT_INS_BIN",A="FL:::/Kernel/KernelA.HPP,937"$
+$LK,"DOCT_INS_BIN",A="FL:::/Kernel/KernelA.HPP,938"$
 $LK,"StrMatch",A="FL:::/Kernel/StrA.CPP.Z,317"$
-$LK,"FlushMsgs",A="FL:::/Kernel/SerialDev/Message.CPP.Z,87",BI=551$
+$LK,"FlushMsgs",A="FL:::/Kernel/SerialDev/Message.CPP.Z,87",BI=553$
 $LK,"CMT_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1691"$
 $LK,"RLF_MP",A="FL:::/Kernel/KernelA.HPP,467"$
-$LK,"SC_GUI",A="FL:::/Kernel/KernelA.HPP,3591"$
+$LK,"SC_GUI",A="FL:::/Kernel/KernelA.HPP,3592"$
 $LK,"RLF_INTERRUPTS",A="FL:::/Kernel/KernelA.HPP,465"$
 $LK,"StrLen",A="FL:::/Kernel/KernelB.HPP,61"$
 $LK,"ATA_READ_NATIVE_MAX",A="FL:::/Kernel/KernelA.HPP,2261"$
@@ -2518,129 +2521,129 @@ $LK,"PUSH_C_REGS",A="FL:::/Kernel/KernelA.HPP,1766"$
 $LK,"IEF_REX_XOR_LIKE",A="FL:::/Kernel/KernelA.HPP,1735"$
 $LK,"WIf_SELF_KEY_DESC",A="FL:::/Kernel/KernelA.HPP,1447"$
 $LK,"RLf_INTERRUPTS",A="FL:::/Kernel/KernelA.HPP,446"$
-$LK,"ISO1DateStruct2CDate",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,14",BI=552$
+$LK,"ISO1DateStruct2CDate",A="FL:::/Kernel/BlkDev/FileSysISO.CPP.Z,14",BI=554$
 $LK,"DOCF_SEL",A="FL:::/Kernel/KernelA.HPP,1285"$
 $LK,"RLF_REGISTRY",A="FL:::/Kernel/KernelA.HPP,471"$
 $LK,"RLf_REGISTRY",A="FL:::/Kernel/KernelA.HPP,452"$
-$LK,"SC_INS",A="FL:::/Kernel/KernelA.HPP,3576"$
+$LK,"SC_INS",A="FL:::/Kernel/KernelA.HPP,3577"$
 $LK,"TK_DOT_DOT",A="FL:::/Kernel/KernelA.HPP,2108"$
 $LK,"RT_NUM_IT",A="FL:::/Kernel/KernelA.HPP,1568"$
 $LK,"AbsI64",A="FL:::/Kernel/KernelB.HPP,97"$
-$LK,"SC_TAB",A="FL:::/Kernel/KernelA.HPP,3560"$
-$LK,"SPF_DECIMAL",A="FL:::/Kernel/KernelA.HPP,3926"$
+$LK,"SC_TAB",A="FL:::/Kernel/KernelA.HPP,3561"$
+$LK,"SPF_DECIMAL",A="FL:::/Kernel/KernelA.HPP,3927"$
 $LK,"IOAPICVER",A="FL:::/Kernel/KernelA.HPP,513"$
 $LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HPP,498"$
-$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HPP,182"$
-$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3597"$
-$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3302"$
-$LK,"RedSeaFmt",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,94",BI=553$
-$LK,"sys_var_init_flag",A="FL:::/Kernel/KernelB.HPP,184"$
+$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HPP,183"$
+$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HPP,3598"$
+$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3303"$
+$LK,"RedSeaFmt",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,94",BI=555$
+$LK,"sys_var_init_flag",A="FL:::/Kernel/KernelB.HPP,185"$
 $LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HPP,510"$
-$LK,"SysGetStr2",A="FL:::/Kernel/KDbg.CPP.Z,337",BI=554$
+$LK,"SysGetStr2",A="FL:::/Kernel/KDbg.CPP.Z,337",BI=556$
 $LK,"fp_getstr2",A="FL:::/Kernel/KGlbls.CPP.Z,31"$
-$LK,"KDRawPutKey",A="FL:::/Kernel/KeyDev.CPP.Z,88",BI=555$
+$LK,"KDRawPutKey",A="FL:::/Kernel/KeyDev.CPP.Z,88",BI=557$
 $LK,"DOCF_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1291"$
-$LK,"Dos2CDate",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,9",BI=556$
+$LK,"Dos2CDate",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,9",BI=558$
 $LK,"SYS_START_CR0",A="FL:::/Kernel/KernelA.HPP,305"$
-$LK,"QSortI64",A="FL:::/Kernel/QSort.CPP.Z,1",BI=557$
-$LK,"RawPrint",A="FL:::/Kernel/KDbg.CPP.Z,217",BI=558$
-$LK,"CTextGlbls",A="FL:::/Kernel/KernelA.HPP,3602"$
+$LK,"QSortI64",A="FL:::/Kernel/QSort.CPP.Z,1",BI=559$
+$LK,"RawPrint",A="FL:::/Kernel/KDbg.CPP.Z,217",BI=560$
+$LK,"CTextGlbls",A="FL:::/Kernel/KernelA.HPP,3603"$
 $LK,"CDevGlbls",A="FL:::/Kernel/KernelA.HPP,2921"$
 $LK,"chars_bmp_zero_cr_nl_cursor",A="FL:::/Kernel/StrA.CPP.Z,362"$
-$LK,"AreYouSure",A="FL:::/Kernel/StrB.CPP.Z,109",BI=559$
+$LK,"AreYouSure",A="FL:::/Kernel/StrB.CPP.Z,109",BI=561$
 $LK,"C:/Doc/D3.TXT.Z",A="FL:::/Kernel/KernelB.HPP,145"$
 $LK,"DOCf_IN_DOLLAR",A="FL:::/Kernel/KernelA.HPP,1326"$
 $LK,"DOCF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HPP,1289"$
 $LK,"_REP_IN_U16",A="FL:::/Kernel/KUtils.CPP.Z,264"$
 $LK,"_REP_IN_U32",A="FL:::/Kernel/KUtils.CPP.Z,253"$
-$LK,"CH_FORM_FEED",A="FL:::/Kernel/KernelA.HPP,3514"$
+$LK,"CH_FORM_FEED",A="FL:::/Kernel/KernelA.HPP,3515"$
 $LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HPP,506"$
 $LK,"I_WAKE",A="FL:::/Kernel/KernelA.HPP,295"$
 $LK,"Yield",A="FL:::/Kernel/Sched.CPP.Z,284"$
-$LK,"CKeyDevGlbls",A="FL:::/Kernel/KernelA.HPP,3824"$
+$LK,"CKeyDevGlbls",A="FL:::/Kernel/KernelA.HPP,3825"$
 $LK,"MRT_DEV",A="FL:::/Kernel/KernelA.HPP,2866"$
 $LK,"CBlkDevGlbls",A="FL:::/Kernel/KernelA.HPP,2756"$
 $LK,"CMBRPrt",A="FL:::/Kernel/KernelA.HPP,2302"$
-$LK,"StrNew",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,446",BI=560$
+$LK,"StrNew",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,446",BI=562$
 $LK,"HTT_GLBL_VAR",A="FL:::/Kernel/KernelA.HPP,685"$
 $LK,"HTt_GLBL_VAR",A="FL:::/Kernel/KernelA.HPP,655"$
 $LK,"WIF_FOCUS_TASK_IP_L_D",A="FL:::/Kernel/KernelA.HPP,1426"$
 $LK,"HTT_HELP_FILE",A="FL:::/Kernel/KernelA.HPP,697"$
 $LK,"HTt_HELP_FILE",A="FL:::/Kernel/KernelA.HPP,667"$
 $LK,"Round",A="FL:::/Kernel/KernelB.HPP,139"$
-$LK,"TaskRstAwaitingMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,25",BI=561$
-$LK,"MSG_IP_L_D_DOWN",A="FL:::/Kernel/KernelA.HPP,3231"$
+$LK,"TaskRstAwaitingMsg",A="FL:::/Kernel/SrvCmd.CPP.Z,25",BI=563$
+$LK,"MSG_IP_L_D_DOWN",A="FL:::/Kernel/KernelA.HPP,3232"$
 $LK,"ATAR0_STAT",A="FL:::/Kernel/KernelA.HPP,2284"$
 $LK,"DOC_COLOR_PMT",A="FL:::/Kernel/KernelA.HPP,1140"$
 $LK,"HPET_GEN_CONF",A="FL:::/Kernel/KernelA.HPP,534"$
-$LK,"MPHalt",A="FL:::/Kernel/MultiProc.CPP.Z,164",BI=562$
-$LK,"UnusedStk",A="FL:::/Kernel/KDbg.CPP.Z,46",BI=563$
-$LK,"DirEntryCompareName",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,62",BI=564$
+$LK,"MPHalt",A="FL:::/Kernel/MultiProc.CPP.Z,164",BI=564$
+$LK,"UnusedStk",A="FL:::/Kernel/KDbg.CPP.Z,46",BI=565$
+$LK,"DirEntryCompareName",A="FL:::/Kernel/BlkDev/DskDirA.CPP.Z,62",BI=566$
 $LK,"BFieldExtU32",A="FL:::/Kernel/KernelB.HPP,30"$
 $LK,"DOCf_SUBSCRIPT_MODE",A="FL:::/Kernel/KernelA.HPP,1328"$
 $LK,"ATAS_DF",A="FL:::/Kernel/KernelA.HPP,2273"$
-$LK,"ROPBF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HPP,2939"$
-$LK,"StrScan",A="FL:::/Kernel/StrScan.CPP.Z,212",BI=565$
-$LK,"CONSERVATIVE_16MEG_SIZE",A="FL:::/Kernel/Mem/PageTables.CPP.Z,87"$
+$LK,"ROPBF_PROBABILITY_DITHER",A="FL:::/Kernel/KernelA.HPP,2940"$
+$LK,"StrScan",A="FL:::/Kernel/StrScan.CPP.Z,212",BI=567$
+$LK,"CONSERVATIVE_16MEG_SIZE",A="FL:::/Kernel/Mem/PageTables.CPP.Z,96"$
 $LK,"ACD_DEF_FILENAME_Z",A="FL:::/Kernel/KernelA.HPP,1501"$
-$LK,"ATARepFind",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,195",BI=566$
-$LK,"QSort2a",A="FL:::/Kernel/QSort.CPP.Z,32",BI=567$
+$LK,"ATARepFind",A="FL:::/Kernel/BlkDev/DskATAId.CPP.Z,195",BI=568$
+$LK,"QSort2a",A="FL:::/Kernel/QSort.CPP.Z,32",BI=569$
 $LK,"num_lock_map",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,179"$
-$LK,"QSort2b",A="FL:::/Kernel/QSort.CPP.Z,55",BI=568$
-$LK,"KDF_HAS_DESCS",A="FL:::/Kernel/KernelA.HPP,3815"$
+$LK,"QSort2b",A="FL:::/Kernel/QSort.CPP.Z,55",BI=570$
+$LK,"KDF_HAS_DESCS",A="FL:::/Kernel/KernelA.HPP,3816"$
 $LK,"CBlkPool",A="FL:::/Kernel/KernelA.HPP,2893"$
-$LK,"SC_NUM",A="FL:::/Kernel/KernelA.HPP,3566"$
-$LK,"MSG_IP_R_UP",A="FL:::/Kernel/KernelA.HPP,3234"$
+$LK,"SC_NUM",A="FL:::/Kernel/KernelA.HPP,3567"$
+$LK,"MSG_IP_R_UP",A="FL:::/Kernel/KernelA.HPP,3235"$
 $LK,"IEF_DONT_SWITCH_MODES",A="FL:::/Kernel/KernelA.HPP,1730"$
 $LK,"I_TIMER",A="FL:::/Kernel/KernelA.HPP,292"$
-$LK,"IRQ_TIMER",A="FL:::/Kernel/KInts.CPP.Z,12"$
+$LK,"IRQ_TIMER",A="FL:::/Kernel/KInts.CPP.Z,16"$
 $LK,"DOC_COLOR_TREE",A="FL:::/Kernel/KernelA.HPP,1139"$
 $LK,"DOCEf_HAS_BIN",A="FL:::/Kernel/KernelA.HPP,1062"$
 $LK,"DOCEF_HAS_BIN",A="FL:::/Kernel/KernelA.HPP,974"$
-$LK,"SYS_BOOT_BASE",A="FL:::/Kernel/KStart.CPP.Z,32"$
-$LK,"VGAP_CRTC_INDEX",A="FL:::/Kernel/KernelA.HPP,3739"$
+$LK,"SYS_BOOT_BASE",A="FL:::/Kernel/KStart16.CPP.Z,30"$
+$LK,"VGAP_CRTC_INDEX",A="FL:::/Kernel/KernelA.HPP,3740"$
 $LK,"ATTRF_SEL",A="FL:::/Kernel/KernelA.HPP,891"$
-$LK,"DrvNextFreeLet",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,51",BI=569$
-$LK,"SFF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HPP,3807"$
+$LK,"DrvNextFreeLet",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,51",BI=571$
+$LK,"SFF_WHOLE_LABELS_AFTER",A="FL:::/Kernel/KernelA.HPP,3808"$
 $LK,"CDIR_FILENAME_LEN",A="FL:::/Kernel/KernelA.HPP,2551"$
 $LK,"CFifoI64",A="FL:::/Kernel/KernelA.HPP,175"$
-$LK,"PCIReadU32",A="FL:::/Kernel/PCIBIOS.CPP.Z,201",BI=570$
-$LK,"PCIReadU16",A="FL:::/Kernel/PCIBIOS.CPP.Z,182",BI=571$
-$LK,"YearStartDate",A="FL:::/Kernel/KDate.CPP.Z,8",BI=572$
+$LK,"PCIReadU32",A="FL:::/Kernel/PCIBIOS.CPP.Z,201",BI=572$
+$LK,"PCIReadU16",A="FL:::/Kernel/PCIBIOS.CPP.Z,182",BI=573$
+$LK,"YearStartDate",A="FL:::/Kernel/KDate.CPP.Z,8",BI=574$
 $LK,"ACD_H1_END",A="FL:::/Kernel/KernelA.HPP,1504"$
 $LK,"_REP_IN_U8",A="FL:::/Kernel/KUtils.CPP.Z,275"$
 $LK,"SHIFT_KEY_SCAN_DECODE_TABLE",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,9"$
 $LK,"DOCF_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HPP,1279"$
 $LK,"REG_UNDEF",A="FL:::/Kernel/KernelA.HPP,1789"$
-$LK,"VGAFlush",A="FL:::/Kernel/Display.CPP.Z,88",BI=573$
+$LK,"VGAFlush",A="FL:::/Kernel/Display.CPP.Z,88",BI=575$
 $LK,"FILEMASK_AOT",A="FL:::/Kernel/KernelA.HPP,2290"$
-$LK,"SysDbg",A="FL:::/Kernel/KMisc.CPP.Z,228",BI=574$
-$LK,"FramePtrAdd",A="FL:::/Kernel/KHashB.CPP.Z,225",BI=575$
-$LK,"DCF_SCREEN_BITMAP",A="FL:::/Kernel/KernelA.HPP,3642"$
+$LK,"SysDbg",A="FL:::/Kernel/KMisc.CPP.Z,233",BI=576$
+$LK,"FramePtrAdd",A="FL:::/Kernel/KHashB.CPP.Z,225",BI=577$
+$LK,"DCF_SCREEN_BITMAP",A="FL:::/Kernel/KernelA.HPP,3643"$
 $LK,"FF_NEEDS_WRITE",A="FL:::/Kernel/KernelA.HPP,2783"$
 $LK,"WIF_FOCUS_TASK_IP_R_D",A="FL:::/Kernel/KernelA.HPP,1428"$
 $LK,"DOCF_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HPP,1262"$
 $LK,"LAPIC_APIC_ID",A="FL:::/Kernel/KernelA.HPP,479"$
-$LK,"MPrintTime",A="FL:::/Kernel/StrPrint.CPP.Z,42",BI=576$
-$LK,"CatPrint",A="FL:::/Kernel/StrPrint.CPP.Z,879",BI=577$
+$LK,"MPrintTime",A="FL:::/Kernel/StrPrint.CPP.Z,42",BI=578$
+$LK,"CatPrint",A="FL:::/Kernel/StrPrint.CPP.Z,881",BI=579$
 $LK,"TK_CHAR_CONST",A="FL:::/Kernel/KernelA.HPP,2076"$
-$LK,"TASKf_AWAITING_MSG",A="FL:::/Kernel/KernelA.HPP,3289"$
+$LK,"TASKf_AWAITING_MSG",A="FL:::/Kernel/KernelA.HPP,3290"$
 $LK,"ICF_A1_TO_INT",A="FL:::/Kernel/KernelA.HPP,1594"$
 $LK,"DOCf_DBL_DOLLARS",A="FL:::/Kernel/KernelA.HPP,1298"$
 $LK,"EDF_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HPP,1248"$
 $LK,"DOCEG_HAS_ALLOC",A="FL:::/Kernel/KernelA.HPP,1027"$
 $LK,"CHashSrcSym",A="FL:::/Kernel/KernelA.HPP,724"$
-$LK,"HashPublic",A="FL:::/Kernel/KHashB.CPP.Z,170",BI=578$
+$LK,"HashPublic",A="FL:::/Kernel/KHashB.CPP.Z,170",BI=580$
 $LK,"HEAP_CTRL_SIGNATURE_VAL",A="FL:::/Kernel/KernelA.HPP,2906"$
 $LK,"EDf_UNCOLLAPSE",A="FL:::/Kernel/KernelA.HPP,1254"$
 $LK,"CDocSettings",A="FL:::/Kernel/KernelA.HPP,1147"$
-$LK,"BlkDevInit",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,31",BI=579$
-$LK,"CTaskStk",A="FL:::/Kernel/KernelA.HPP,3306"$
+$LK,"BlkDevInit",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,31",BI=581$
+$LK,"CTaskStk",A="FL:::/Kernel/KernelA.HPP,3307"$
 $LK,"CWinMgrTimingGlbls",A="FL:::/Kernel/KernelA.HPP,1458"$
 $LK,"FAT32_ENTRIES_PER_BLK",A="FL:::/Kernel/KernelA.HPP,2408"$
-$LK,"ATARBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,442",BI=580$
+$LK,"ATARBlks",A="FL:::/Kernel/BlkDev/DskATA.CPP.Z,442",BI=582$
 $LK,"GVF_ALIAS",A="FL:::/Kernel/KernelA.HPP,870"$
-$LK,"CTaskSettings",A="FL:::/Kernel/KernelA.HPP,3249"$
+$LK,"CTaskSettings",A="FL:::/Kernel/KernelA.HPP,3250"$
 $LK,"IEF_ENDING_ZERO",A="FL:::/Kernel/KernelA.HPP,1737"$
 $LK,"PUT_CHARS",A="FL:::/Kernel/StrA.CPP.Z,51"$
 $LK,"CMemE820",A="FL:::/Kernel/KernelA.HPP,358"$
@@ -2648,8 +2651,8 @@ $LK,"DVD_BOOT_LOADER_SIZE",A="FL:::/Kernel/KernelA.HPP,2299"$
 $LK,"FILEMASK_GRA",A="FL:::/Kernel/KernelA.HPP,2293"$
 $LK,"ATAS_DRQ",A="FL:::/Kernel/KernelA.HPP,2272"$
 $LK,"DOCF_BORDER_DOC",A="FL:::/Kernel/KernelA.HPP,1265"$
-$LK,"DrvEnable",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,160",BI=581$
-$LK,"BlkDevLock",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,1",BI=582$
+$LK,"DrvEnable",A="FL:::/Kernel/BlkDev/DskAddDev.CPP.Z,160",BI=583$
+$LK,"BlkDevLock",A="FL:::/Kernel/BlkDev/DskBlkDev.CPP.Z,1",BI=584$
 $LK,"BDT_NUM_TYPES",A="FL:::/Kernel/KernelA.HPP,2635"$
 $LK,"DOCf_BORDER_DOC",A="FL:::/Kernel/KernelA.HPP,1301"$
 $LK,"MRT_RAM",A="FL:::/Kernel/KernelA.HPP,2865"$
@@ -2658,22 +2661,22 @@ $LK,"ATAS_BSY",A="FL:::/Kernel/KernelA.HPP,2275"$
 $LK,"HTt_NUM_TYPES",A="FL:::/Kernel/KernelA.HPP,669"$
 $LK,"ICF_R_WAS_STK",A="FL:::/Kernel/KernelA.HPP,1606"$
 $LK,"DOCf_BREAK_UNLOCKED",A="FL:::/Kernel/KernelA.HPP,1315"$
-$LK,"sys_mem_init_val",A="FL:::/Kernel/KernelB.HPP,183"$
+$LK,"sys_mem_init_val",A="FL:::/Kernel/KernelB.HPP,184"$
 $LK,"SYS_SEMA_FORCE_WINMGR",A="FL:::/Kernel/KernelA.HPP,611"$
 $LK,"ATAS_ERR",A="FL:::/Kernel/KernelA.HPP,2271"$
-$LK,"Struct2Date",A="FL:::/Kernel/KDate.CPP.Z,14",BI=583$
+$LK,"Struct2Date",A="FL:::/Kernel/KDate.CPP.Z,14",BI=585$
 $LK,"ISO1T_TERMINATOR",A="FL:::/Kernel/KernelA.HPP,2482"$
 $LK,"SF_RBP",A="FL:::/Kernel/KernelA.HPP,557"$
-$LK,"SYS_MP_CNT",A="FL:::/Kernel/KStart.CPP.Z,229"$
+$LK,"SYS_MP_CNT",A="FL:::/Kernel/KStart32.CPP.Z,47"$
 $LK,"CMF_U8_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1699"$
 $LK,"CMF_I8_JMP_TABLE",A="FL:::/Kernel/KernelA.HPP,1698"$
-$LK,"EdLiteUpdate",A="FL:::/Kernel/EdLite.CPP.Z,7",BI=584$
+$LK,"EdLiteUpdate",A="FL:::/Kernel/EdLite.CPP.Z,7",BI=586$
 $LK,"_ARC_ENTRY_GET",A="FL:::/Kernel/Compress.CPP.Z,43"$
 $LK,"DOCT_NUM_TYPES",A="FL:::/Kernel/KernelA.HPP,944"$
-$LK,"SYS_CTRL_ALT_FLAGS",A="FL:::/Kernel/KStart.CPP.Z,206"$
-$LK,"BOOT_RAM_BASE",A="FL:::/Kernel/KernelA.HPP,3885"$
+$LK,"SYS_CTRL_ALT_FLAGS",A="FL:::/Kernel/KStart32.CPP.Z,24"$
+$LK,"BOOT_RAM_BASE",A="FL:::/Kernel/KernelA.HPP,3886"$
 $LK,"MT_DVD",A="FL:::/Kernel/KernelA.HPP,2544"$
-$LK,"FramePtrDel",A="FL:::/Kernel/KHashB.CPP.Z,240",BI=585$
+$LK,"FramePtrDel",A="FL:::/Kernel/KHashB.CPP.Z,240",BI=587$
 $LK,"chars_bmp_filename",A="FL:::/Kernel/StrA.CPP.Z,345"$
 $LK,"CICType",A="FL:::/Kernel/KernelA.HPP,1627"$
 $LK,"ICF_A2_WAS_STK",A="FL:::/Kernel/KernelA.HPP,1608"$
@@ -2682,28 +2685,28 @@ $LK,"ATAS_DRDY",A="FL:::/Kernel/KernelA.HPP,2274"$
 $LK,"ARGT_AL",A="FL:::/Kernel/KernelA.HPP,1919"$
 $LK,"CIntermediateCodeBase",A="FL:::/Kernel/KernelA.HPP,1646"$
 $LK,"CAutoCompleteDictGlbls",A="FL:::/Kernel/KernelA.HPP,1523"$
-$LK,"SYS_CODE_BP",A="FL:::/Kernel/KStart.CPP.Z,209"$
-$LK,"WClusters",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,129",BI=586$
-$LK,"LXchgI64",A="FL:::/Kernel/KernelB.HPP,252"$
-$LK,"MSG_KEY_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3241"$
-$LK,"TASKf_NONTIMER_RAND",A="FL:::/Kernel/KernelA.HPP,3294"$
+$LK,"SYS_CODE_BP",A="FL:::/Kernel/KStart32.CPP.Z,27"$
+$LK,"WClusters",A="FL:::/Kernel/BlkDev/DskCluster.CPP.Z,129",BI=588$
+$LK,"LXchgI64",A="FL:::/Kernel/KernelB.HPP,253"$
+$LK,"MSG_KEY_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3242"$
+$LK,"TASKf_NONTIMER_RAND",A="FL:::/Kernel/KernelA.HPP,3295"$
 $LK,"ARGT_CL",A="FL:::/Kernel/KernelA.HPP,1924"$
 $LK,"ARGT_M8",A="FL:::/Kernel/KernelA.HPP,1904"$
-$LK,"ChkOnStk",A="FL:::/Kernel/KDbg.CPP.Z,31",BI=587$
-$LK,"TaskQueInsChild",A="FL:::/Kernel/Sched.CPP.Z,314",BI=588$
+$LK,"ChkOnStk",A="FL:::/Kernel/KDbg.CPP.Z,31",BI=589$
+$LK,"TaskQueInsChild",A="FL:::/Kernel/Sched.CPP.Z,314",BI=590$
 $LK,"TK_F64",A="FL:::/Kernel/KernelA.HPP,2077"$
 $LK,"RLF_BOOT_HEAP",A="FL:::/Kernel/KernelA.HPP,462"$
 $LK,"RLf_BOOT_HEAP",A="FL:::/Kernel/KernelA.HPP,443"$
 $LK,"I_USER",A="FL:::/Kernel/KernelA.HPP,301"$
-$LK,"FAT32CDirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,226",BI=589$
-$LK,"BlkPoolAdd",A="FL:::/Kernel/Mem/BlkPool.CPP.Z,1",BI=590$
+$LK,"FAT32CDirFill",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,226",BI=591$
+$LK,"BlkPoolAdd",A="FL:::/Kernel/Mem/BlkPool.CPP.Z,1",BI=592$
 $LK,"sys_task_being_screen_updated",A="FL:::/Kernel/KGlbls.CPP.Z,11"$
 $LK,"TK_NORMALSCRIPT",A="FL:::/Kernel/KernelA.HPP,2072"$
 $LK,"SF_RIP",A="FL:::/Kernel/KernelA.HPP,558"$
 $LK,"IOAPIC_REG",A="FL:::/Kernel/KernelA.HPP,509"$
 $LK,"Complex",A="FL:::/Kernel/KernelA.HPP,115"$
 $LK,"Trunc",A="FL:::/Kernel/KernelB.HPP,141"$
-$LK,"ROPB_EQU",A="FL:::/Kernel/KernelA.HPP,2932"$
+$LK,"ROPB_EQU",A="FL:::/Kernel/KernelA.HPP,2933"$
 $LK,"HTf_IMM",A="FL:::/Kernel/KernelA.HPP,675"$
 $LK,"sys_pci_services",A="FL:::/Kernel/PCIBIOS.CPP.Z,159"$
 $LK,"CStreamBlk",A="FL:::/Kernel/KernelA.HPP,2011"$
@@ -2718,18 +2721,18 @@ $LK,"SYS_PCI_SERVICES",A="FL:::/Kernel/PCIBIOS.CPP.Z,5"$
 $LK,"_STRCMP",A="FL:::/Kernel/StrA.CPP.Z,86"$
 $LK,"ARGT_AX",A="FL:::/Kernel/KernelA.HPP,1920"$
 $LK,"LAPIC_PROCESSOR_PRIORITY",A="FL:::/Kernel/KernelA.HPP,483"$
-$LK,"Core0Init",A="FL:::/Kernel/MultiProc.CPP.Z,354",BI=591$
+$LK,"Core0Init",A="FL:::/Kernel/MultiProc.CPP.Z,355",BI=593$
 $LK,"ARGT_DS",A="FL:::/Kernel/KernelA.HPP,1929"$
 $LK,"ARGT_R8",A="FL:::/Kernel/KernelA.HPP,1894"$
-$LK,"AStrNew",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,461",BI=592$
+$LK,"AStrNew",A="FL:::/Kernel/Mem/MAllocFree.CPP.Z,461",BI=594$
 $LK,"ARGT_ES",A="FL:::/Kernel/KernelA.HPP,1930"$
 $LK,"ICF_A2_TO_F64",A="FL:::/Kernel/KernelA.HPP,1595"$
 $LK,"DOCF_PLAIN_TEXT_TABS",A="FL:::/Kernel/KernelA.HPP,1259"$
 $LK,"Cf_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HPP,831"$
-$LK,"FAT32DrvInit",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,22",BI=593$
-$LK,"DOCT_ANCHOR",A="FL:::/Kernel/KernelA.HPP,926"$
-$LK,"KbdPktRead",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,388",BI=594$
-$LK,"KbdCmdRead",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,36",BI=595$
+$LK,"FAT32DrvInit",A="FL:::/Kernel/BlkDev/FileSysFAT.CPP.Z,22",BI=595$
+$LK,"DOCT_ANCHOR",A="FL:::/Kernel/KernelA.HPP,927"$
+$LK,"KbdPktRead",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,388",BI=596$
+$LK,"KbdCmdRead",A="FL:::/Kernel/SerialDev/Keyboard.CPP.Z,36",BI=597$
 $LK,"D3DivEqu",A="FL:::/Kernel/KernelB.HPP,152"$
 $LK,"ARGT_FS",A="FL:::/Kernel/KernelA.HPP,1931"$
 $LK,"TK_I64",A="FL:::/Kernel/KernelA.HPP,2075"$
@@ -2738,43 +2741,43 @@ $LK,"ARGT_M64",A="FL:::/Kernel/KernelA.HPP,1907"$
 $LK,"DOCE_LEN_DFT",A="FL:::/Kernel/KernelA.HPP,1179"$
 $LK,"DOC_COLOR_KEYWORD2",A="FL:::/Kernel/KernelA.HPP,1143"$
 $LK,"CD2I32",A="FL:::/Kernel/KernelA.HPP,137"$
-$LK,"DrvLock",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,1",BI=596$
+$LK,"DrvLock",A="FL:::/Kernel/BlkDev/DskDrv.CPP.Z,1",BI=598$
 $LK,"ARGT_GS",A="FL:::/Kernel/KernelA.HPP,1933"$
 $LK,"CICTreeLinks",A="FL:::/Kernel/KernelA.HPP,1639"$
 $LK,"DOC_COLOR_COMMENT",A="FL:::/Kernel/KernelA.HPP,1144"$
-$LK,"SYS_MEM_E801",A="FL:::/Kernel/KStart.CPP.Z,33"$
+$LK,"SYS_MEM_E801",A="FL:::/Kernel/KStart16.CPP.Z,31"$
 $LK,"ATA_NOP",A="FL:::/Kernel/KernelA.HPP,2258"$
-$LK,"SVCf_DONT_FILTER",A="FL:::/Kernel/KernelA.HPP,3180"$
+$LK,"SVCf_DONT_FILTER",A="FL:::/Kernel/KernelA.HPP,3181"$
 $LK,"IET_REL_I0",A="FL:::/Kernel/KernelA.HPP,394"$
 $LK,"OC_ADDR_SIZE_PREFIX",A="FL:::/Kernel/KernelA.HPP,1758"$
-$LK,"SYS_MEM_E820",A="FL:::/Kernel/KStart.CPP.Z,34"$
-$LK,"SUF_SINGLE_SPACE",A="FL:::/Kernel/KernelA.HPP,3796"$
+$LK,"SYS_MEM_E820",A="FL:::/Kernel/KStart16.CPP.Z,32"$
+$LK,"SUF_SINGLE_SPACE",A="FL:::/Kernel/KernelA.HPP,3797"$
 $LK,"RFLAGG_START",A="FL:::/Kernel/KernelA.HPP,326"$
-$LK,"CKeyDevEntry",A="FL:::/Kernel/KernelA.HPP,3816"$
-$LK,"MSG_IP_R_D_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3245"$
-$LK,"MSG_IP_L_D_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3243"$
-$LK,"XTalkWait",A="FL:::/Kernel/SrvCmd.CPP.Z,455",BI=597$
-$LK,"MemPageTable",A="FL:::/Kernel/Mem/PageTables.CPP.Z,118",BI=598$
+$LK,"CKeyDevEntry",A="FL:::/Kernel/KernelA.HPP,3817"$
+$LK,"MSG_IP_R_D_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3246"$
+$LK,"MSG_IP_L_D_DOWN_UP",A="FL:::/Kernel/KernelA.HPP,3244"$
+$LK,"XTalkWait",A="FL:::/Kernel/SrvCmd.CPP.Z,455",BI=599$
+$LK,"MemPageTable",A="FL:::/Kernel/Mem/PageTables.CPP.Z,127",BI=600$
 $LK,"CCF_KEEP_NUM_SIGN",A="FL:::/Kernel/KernelA.HPP,2137"$
 $LK,"ARGT_MM",A="FL:::/Kernel/KernelA.HPP,1938"$
 $LK,"chars_bmp_alpha_numeric_no_at",A="FL:::/Kernel/StrA.CPP.Z,335"$
-$LK,"SysHlt",A="FL:::/Kernel/KernelB.HPP,258"$
+$LK,"SysHlt",A="FL:::/Kernel/KernelB.HPP,259"$
 $LK,"FUF_JUST_DIRS",A="FL:::/Kernel/KernelA.HPP,2606"$
 $LK,"CD2I64",A="FL:::/Kernel/KernelA.HPP,141"$
 $LK,"CD3I32",A="FL:::/Kernel/KernelA.HPP,127"$
 $LK,"_STRCPY",A="FL:::/Kernel/StrA.CPP.Z,65"$
-$LK,"RedSeaDrvValidate",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,82",BI=599$
-$LK,"YELLOW",A="FL:::/Kernel/KernelA.HPP,2971"$
+$LK,"RedSeaDrvValidate",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,82",BI=601$
+$LK,"YELLOW",A="FL:::/Kernel/KernelA.HPP,2972"$
 $LK,"FUf_JUST_DIRS",A="FL:::/Kernel/KernelA.HPP,2580"$
-$LK,"RedSeaFreeFreeLst",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,3",BI=600$
-$LK,"IPVarsInit",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,68",BI=601$
+$LK,"RedSeaFreeFreeLst",A="FL:::/Kernel/BlkDev/FileSysRedSea.CPP.Z,3",BI=602$
+$LK,"IPVarsInit",A="FL:::/Kernel/SerialDev/InputPointer.CPP.Z,68",BI=603$
 $LK,"IET_REL_I8",A="FL:::/Kernel/KernelA.HPP,396"$
-$LK,"MouseGetDevType",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,26",BI=602$
+$LK,"MouseGetDevType",A="FL:::/Kernel/SerialDev/Mouse.CPP.Z,26",BI=604$
 $LK,"ARGT_R32",A="FL:::/Kernel/KernelA.HPP,1896"$
 $LK,"ARGT_R16",A="FL:::/Kernel/KernelA.HPP,1895"$
 $LK,"DOC_DFT",A="FL:::/Kernel/KernelA.HPP,1157"$
 $LK,"CMemberLstMeta",A="FL:::/Kernel/KernelA.HPP,789"$
-$LK,"DISPLAYf_WIN_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3301"$
+$LK,"DISPLAYf_WIN_ON_TOP",A="FL:::/Kernel/KernelA.HPP,3302"$
 $LK,"CAutoCompleteGlbls",A="FL:::/Kernel/KernelA.HPP,1486"$
 $LK,"CAOTImportExport",A="FL:::/Kernel/KernelA.HPP,1959"$
 $LK,"MEM_SETH_STK",A="FL:::/Kernel/KernelA.HPP,2885"$
@@ -2782,141 +2785,101 @@ $LK,"DOCEF_HAS_TERMINATOR",A="FL:::/Kernel/KernelA.HPP,1013"$
 $LK,"CD3I64",A="FL:::/Kernel/KernelA.HPP,145"$
 $LK,"c32_edi",A="FL:::/Kernel/PCIBIOS.CPP.Z,157"$
 $LK,"_CALL_IND",A="FL:::/Kernel/KUtils.CPP.Z,332"$
-$LK,"PURPLE",A="FL:::/Kernel/KernelA.HPP,2962"$
-$LK,"TASKf_BREAK_LOCKED",A="FL:::/Kernel/KernelA.HPP,3290"$
+$LK,"PURPLE",A="FL:::/Kernel/KernelA.HPP,2963"$
+$LK,"TASKf_BREAK_LOCKED",A="FL:::/Kernel/KernelA.HPP,3291"$
 $LK,"FILEMASK_SRC",A="FL:::/Kernel/KernelA.HPP,2291"$
-L8G#Ö#Ö-ÖAÖCÖQÖSÖdÖzÖ‰Ö£ÖÑÖÕÖÕÖÚÖDVc““—¦²¾ÊØäëð@4@CCKOf}”£¯½ÄÕÖÚP‡×°“°“´“̓ٓޓç“ì“ñ“ö“û“””9”J”d”q”z””„”‰”’”—”Ÿ”½”½””Ҕؔâ”ç”ð”÷”õ”•
-••+•`•e•Œ•‘•–•›•¼•º•ʕ֕í•ö•ý•	––7–7–>–E–J–Q–Z–[–d–i–'—<#&@Yfmoox†D’ŸÓÓáïý**3ˆ/Mrªrª‚ª�ª˜ªŸªŸªªΪݪêª÷ªüª«««««"«"«"«"«/«2«B«0ÎÖÕ�Õ�ï�����&�	Ì;T3T3l3r3Œ3�3›3°3¶3¼3Â3á3æ3î3î3ü344,42444C4G4V4\4_4a4p4t4ƒ4‰4Œ4Ž4ž4¢4¶4¹4¼4¾4Í4Ð4Ü4
-Ä¥ÒÜ0Ü0þ011131=1C1F1I1L1ˆ1‹1Ž1�1£1¦1©1±1·1¼1¼1Â1Î1Ð1Ù1Ù1Ù1Ù1ß1â1ç1ê1ò12ˆCabµbµˆµŒµ”µšµ£µ«µ±µ´µÀµÀµîµûµ¶¶¶¶¶ ¶-¶-¶C¶hJ�J�S�a�p�{�‹�›�«�»�Ê�Ù�é�ù�žž+ž:žJžZž†ž†ž‹ž
4æï­�­�Ç�Õ�í�‘‘‘‘\:M²Z²ZÀZÃZÐZÝZäZëZóZ÷Z[ [/[7[>[@[@[H[44=XCXCfC‚C‚C…CŸCŸC¥C TXKòKòYògò(-3óóû24>HÜê‰o‰o©o¶o»oÇoçoíoóop	p
-pp(Z`¦Ô¦ÔÀÔÒÔÚÔàÔèÔ$ü´�´�½�Å�Ë�Ð�0¯·ªËªËÀËËËÜËÞËæË8‘›*]*]8]?]J]O]Q]h]h]q]w]Po:\:\H\O\Z\_\h\w\}\„\†\‰\”\š\€[wŠºŠº¸º¼ºÀº׺çºýº»%»%»A»F»R»X»[»b»f»j»n»r»r»r»/¼à:.º~º~Ó~Û~ö~"/CVt��¦©³·Ò×Þæøû	€€)€/€5€A€P€h€l€q€„€¤€³€º€Á€Á€È€ЀÝ€߀ñ€ù€û€������%�0�<�J�`�����³�³�º�Ä�Ú�ü�‚‚‚‚&‚H‚M‚M‚P‚o‚r‚~‚�‚„‚¢‚¢‚§‚§‚¯‚´‚¸‚Ȃ˂ä‚ä‚é‚é‚ü‚ƒ
ƒ#ƒAƒDƒFƒFƒYƒ`ƒhƒ~ƒœƒŸƒ¡ƒ¡ƒ¼ƒ¿ƒ߃úƒ„„„„$„$„A„A„A„F„F„F„R„e„p„�„„„‡„Œ„Œ„‘„©„¬„Ò„Ö„ñ„
-……… ….…4…7…<…<…L…O…R…`…i…o…r…w…w…‹…—…£…³…Ë…ð…ý…††1†C†L†P†S†S†c†i†{†€†ˆ†�†›†¸†»†½†ΆÕ†á†ú†‡
-‡‡‡‡.‡A‡H‡V‡V‡V‡]‡i‡s‡�‡Ї�‡—‡¢‡«‡º‡ɇ؇ø‡ˆkˆ4×à-�-�A�O�g�r�t�t�|�@?KKKSZgv…𮽯åé`ˆœS S a n x x ‹ “ ¦ ¨ » » ¿ É Î Î Ô |w’BœBœbœrœ}œ‚œ„œŠœœœ®œ¾œÏœßœáœáœáœçœ��-�/�/�8�D�XÓå“1“1Ÿ1¡1°1Æ1Ò1Ù1ð1ò1	2	2222 @8D܂܂ê‚삃ƒƒ%ƒ |ÿ««Üßíöö
38KO`s|Œ”¤³¶ë!4ÑÚjjj)j8jIj\jbjkj"¬ElxyxyŽyŸy£y²yÄyØyãyéyzzz#z-zŽNŽ[ŽaŽdŽpŽ)p¼Ôûûû"û8ûGûLû\û^ûdûmûuû€ûšûªû¹û¹ûÀûÀûÀû±ü*h#9ØoØoîoðoÿoppp p p#p?ppŒp–p¦p°p»p¾pÌp+$glPrPrTrdrorŠr,œd‡!*7DQi}““›°½½ÊÒáóû ! ) = D D N -|9òYòYüY	ZZ$Z+Z2Z;ZCZ[ZbZiZsZ{Z‚Z‰Z‘Z—Z¢Z¦Z¨Z¨Z¬Z.XV V u x } € ‰ ” § ± ¹ ½ À À Æ É × /D ,¥J¥J¹JÉJÐJåJìJóJôJüJ0 ʕʕΕ÷•–1”9ûÿûÿ'6BM[m{ƒ‘¥ØÚÞÞéô2=BT[[mnr2Xßñý$ý2ý2ýJýPýYýaýlývý}ý•ý•ý•ýœýœý�ý£ý3PÔ�Ô�è�ø�þ�‚‚‚‚‚‚%‚4 $(ØBØBæBúBC5Œ§Æ‘‘9‘5‘H‘X‘e‘i‘m‘�‘�‘©‘´‘À‘É‘’’/’F’T’[’b’i’Š’�’—’š’°’6ŒþJÃJÃTÃVÃnÃ|Ã�Ã˜ÃÆÃÉÃÒÃÄÄÄÄÄ ÄAÄDÄFÄMÄoÄrÄrÄuĀćĎÄ7@-9ýJýJ
KKK$K+K,K4K8<ðûL�L�`�n�y�Š�’�š�¢�¥�­�9,ZaEEEKE[E�EŽE�E:,JQDDD;DKDqDD�D; £Ç3ô3ôTô^ôhôô•ôšô§ô¬ôÈôçôìôÿôõ	õ#õ8õ:õTõiõiõpõpõpõö<$Œ‘››¤²ÇÌ=L¡°êÐêÐôÐ
-ÑÑ Ñ.Ñ4ÑCÑIÑXÑ^ÑmÑsÑuÑzÑ>H!,‚,‚:‚F‚K‚K‚\‚n‚s‚s‚y‚?,¨V¨V±VºVÆVÓVÙVÞV@Lõº”º”Ȕ˔הá”ç”ô”••*•*•G•K•O•U•A …‰æ
-æ
-ê
-ù
-ý
-B\˜«öðöð
-ñññ#ñ.ñ7ñ7ñGñSñWñoñvñyñ{ñžñC4Š“þ
-þ
-=RRRVD,jqFFFKF[F�F‹F�FE¸�Ç / /¨/°/»/Ú/ã/ù/
00#0.0.0=0^0ƒ0�0˜0®0¹0Á0Á0Ð0ñ01#1+1A1L1^1^1l1s1…1…1“1“1”1§1F ”˜VVZ}�Gpu�²Ï²ÏÌÏÞÏúÏúÏÐÐÐÐÐÐ Ð Ð%Ð-Ð1Ð<ÐTÐnÐnÐnÐ{ÐHDèsèsðsüs$t8tvGvKvMvMvYvYv[v[vkvwvwv{v€v‰v›v¢v°v¿v÷vwwwwsyI|7{÷{÷“÷�÷¤÷°÷³÷Á÷Ä÷È÷Ê÷Í÷Ð÷Ø÷Û÷ã÷÷÷øøø ø"ø(ø4øJ4•žÊuÊuÔuÖuÞuåu÷uøuýuK,'.FäFäPäRäZätäyääLP€�š\š\¬\¯\º\¿\Ì\×\æ\ú\]
]]]#]M�NnJ[J[d[o[t[}[�[¨[°[¸[Å[Ï[Ö[Ý[á[å[ð[ö[ÿ[\\\\#\%\3\N­é3ý3ýMýTýeýhý‰ýœý©ý·ýàýùýþþþþþþ,þ6þ<þ?þBþDþPþ`þhþnþ{þ~þ�þ�þ þ°þ¼þ¾þÎþÛþáþîþÿÿÿÿÿÿÿ ÿ&ÿ&ÿ4ÿLÿO ™�††ŠŸ£P„
*îÑîÑÒÒÒ+ÒGÒJÒPÒYÒeÒgÒ}Ò“Ò—Ò²ÒµÒ»ÒÈÒÔÒÖÒÖÒæÒéÒÿÒQˆ £Ý£Ý«Ý¶ÝÆÝÕÝáÝÞÞÞ
ÞÞÞ6ÞEÞfÞ~Þ†ÞˆÞˆÞ”Þ”Þ¦Þ­Þ­Þ¿ÞÄÞÌÞR,æí22 282?2A2S ž¢¦¦ª¹½TTFW^	^	�	ˆ	’	–	š	ž	¨	¨	²	Å	Ñ	Ô	â	U £§¾¾ÂÏÓV ßãÆêÆêÊêàêâêWHú©p©pÉpÖpÛpçpq
qq q)q*q6qXHëùpp9pFpKpWpwp}pƒp�p™pšp¦pY ¨¬ÖÖÚßãZ ­±ææêùý[<æñRÓRÓcÓoÓsÓÓ�Ó�Ó”ÓšÓ¢Ó\d`u“T“T›TŸTŸT®TÍTÜTåTîTUU U'UKUTU[UgUiU]´¥ÎhKhKsK„K§K¶KÁKÐKÝKöK
LLLL%L.LLLTLkLoLsLwLL‡L�L®LÁLÊLÛLâLâLóLüL^0&&›&›/›/›F›i›i›n›_dÆÛ‹_‹_™_ž_®_³_Â_Ç_É_Ï_Þ_ã_å_ô_ÿ_`	``8Ž(Ž(¨(¬(¯(º(×(Û(à(û(a %M%M.M9MHMbD¶Ã:^:^T^k^x^x^‚^¢^¬^cL™¨=P=PKPPPRPaPcPqP|P…P…P†PŒPd,bi�E�E”EËEÛEF
FFe,RYˆDˆDŒDÃDÓDùDE	Ef0Çϲ’²’Æ’“““ “2“>“g[ëëóþ'6?Scvƒ–´½ÊÖâç		 4AZi|™¤¬ÇÒç <ERav�›£®®®³ÁÌÓÞãêh,ry�F�F”FËFÛFGG
Gi$ûë`ë`aaa*aj$+0ÓÓÓ Ó2ÓnÓk¨CiR R { € Š ” ž ª ª ² Û ä é ò õ ú ú ¡'¡*¡-¡3¡:¡>¡m¡q¡y¡{¡†¡†¡‹¡‹¡š¡ª¡l<$/ŸŸ Ÿ(Ÿ0Ÿ@ŸLŸVŸ…Ÿ‡Ÿ�Ÿmü–Ñ3M3MGMVMeMoM~M�M�M³MÈMÓMÚMýM
-NN&N4NBNbNXNnN€N‹N�N¯N¶N½NÊNÑNÙNéNñNO
O7OMO^O^OfOiOwOn@nz.ž.ž;žCžFžTžXž\ž_žmžtžyžo$aJyJy]ycyry|y�y�y�y”y™y£y´yÅyÙyÛyöy&z=zVzazz�zŒz–z¡z«z¶zÀzËzÙzàzîzîzøz{9{D{[{`{b{l{ˆ{‘{™{´{pD/<†ä†ä�ä¤ä°ä»äÄäÒäÝäåäêäq<²½+h+hAhThhhqh‹h’h¨h®h´hêhr,337d‹¸ÍÏs<bmæ�æ�ó�û�þ�žžž"ž&ž+žt|0FFWao‡Ÿ´ÎÕæóþ  19>ERfquLš©ŽŽ1Ž8Ž?ŽKŽTŽnŽyŽ~އŽ�ެ޶޶ŽËŽv8QQQ(Q:QTQbQkQuQw ììì3ìxÔ._{{ƒ‹™¬»ÅÑÜêù
-
&
.
:
B
J
J
U
W
l
x
Š
ž
Ð
á
î
	&(:CCUUcj||ŠŠ�“y4¨±«g«g¿gÑgÚgôgûghh*hz0DL“K“K›K±K¼KËKåKíK{PZjUŒUŒgŒnŒwŒ…ŒŠŒ�Œ“Œ–Œ›Œ¦Œ¬Œ¶Œ|d¦»†ú†úŸú¢ú°ú°ú¹úÄúÉúÌúÜúçúíúðúóúõúùúû}H<Jæíæíöíüíîîî î)î)î-î0î8î~$@E6	6	?	M	S	X	4ÕÞ¶ü¶üÄüÒüÚüåüþüý
-ýý€¬LsÚrÚrìrûrss(s?sRsis|s“sªsÁsÜsàsçsísñstt)t/tJtNtUt[t_tqtŠt—t�t tªt�?8484@4H4Y4h4r4~4~4‚4Š4Ž4§4á4ó45+545=5=5B5U5Z5e5{5�5–5È5û56626F6M66²6Ã6Ó6Ó6Ú6ì6ì6ú6ú6û6
7
77 7#7‚P—§ggg,g>gWgagcgogˆg“g™g�g¥gƒ0ltN
-N
-\
-k
-v
-|
-~
-~
-„
-„<KVPqPqYqcqsquq¨q¯q¯q¯q²q…˜ò¦ý¦ý¬ýªýºýA†4ŠÓÖÉÖÉîÉöÉÊÊÊÊ Ê-ÊBÊGÊMÊdÊiÊoʆʋʑʨʭʳÊÁÊÅÊáÊôÊËËË(Ë8ËGËTËgËmËtËvˉˣ˪˸ËÊËÊËÝËßËòËôËÌ	ÌÌÌ8ÌOÌUÌ[Ìf̊̇H6ì6ì?ìZìcìoìqìsì‚ì‚ì‘ì“ì“ì˜ìˆ\Üï```)`4`6`=`G`]`h`j`o`q`r`r`z`‰(©¯ÃìÃìÎìâìóìõìŠD¹ÆÖéÖéåéóéêêê$ê0ê0ê6ê‹t»ç»çËçåçåçççççççûçýçýçýçèè è1è<è?èAèDèFèFèFèTèŒD-:KKK&K&K.KDKHKHKLKTK�¤6[À„À„Ú„â„æ„î„ú„……
…"…3…7…7…D…K…P…g…j…s…y…|…~…ˆ…�…¤…§…©…°…´…Â…Ž81;nÓnÓ|Ó“ÓžÓžÓ©Ó­Ó­Ó³Ó�$<�c c k { ‹ � ¬ µ à Ñ Ø ã ï    / < Q ^ s } ’ œ ± » Ð Þ Þ ì ø !!?!N!]!k!w!ƒ!”!©!¾!Ï!Ù!ë!ý!"!"T"b"w"œ"³"¼"Ë"æ"ý"#####-#6#F#�0v~kUkUoU€UœU±U¶UÐU‘02:‹‹1‹<‹N‹V‹Y‹a‹’¼KvË[Ë[ç[\\!\.\:\B\M\U\`\k\�\ž\¥\¬\½\¿\Ç\Ò\Ý\ì\ó\ö\ø\þ\]]%]%])]B]“,ÑØÞòÞòìòøòóóó)ó”P	YàVàVúVýVWWW W'W-WVW]WŠW‘W•W­W¹WÖWßWßWßWìW%X1X=XJX]XkX|X�XœX­XÄXÊXY#YPYWYvY}YˆY¤Y¤Y°Y²Y²Y¾YÀYÀYÌYÎYÎYÞYáYáYíYùYZZ'Z2ZHZVZVZVZgZ€Z‡ZŽZ”Z—ZßZ•P&ЌЌðŒ���1�7�B�H�M�O�h�–4#�B�B™B®B®B»BÐBÐBÕB— Ìоò¾òÌòÕòÛò˜0ÐØB“B“V“•“œ“¢“º“½“É“™¼
-5�ƒ�ƒ®ƒ²ƒ¹ƒÀƒ̓Ûƒäƒçƒíƒóƒúƒ„„
„„„*„0„?„K„N„Q„Y„^„t„€„ƒ„†„†„†„†„‰„‘„™„ „§„¹„š0HP¾÷¾÷Ì÷Ú÷â÷øøFø›€HPHP\PcPkPsP�P�P�PŸPŸP¯P±P±P¿PÁPÁPÑPÙPÙPâPîPQQQQ!QHQœXòKYKYUYiYzY…Y¡Y¤Y²Y¸Y»YÌYçYëY�@$0ññññ!ñ3ñ9ñ<ñ>ñDñžH&4’Õ’Õ§Õ³Õ¶Õ¿ÕËÕÓÕðÕÿÕÖÖÖŸ éíëëë ë!ë ä{°ss.s7sZsdsvsys�s„sŠs�s™s«s¸s¾sËsÖsÛsásósósttttt0t=tCtPt[t`tftxtxtxtxtƒtƒt‘t¡ ÑõƒDƒD¢D¤DµDºDÈDéD÷DEE(E/E1E1ECEIEOEQEWE]E`EfEhEqE€E†E†E†E�EžE¢T…–žùžùÂùÅùÓùÓùçù÷ùúúúúúú%ú£`p„ùù#ù)ù7ù7ùKùVùZùaùdùnùuù…ù‰ù‰ù‰ù�ù™ù¤HïýºÂºÂáÂÿÂ
ÃÃà Ã$Ã.Ã8Ã8Ã:ÃHÃ¥D"/|‚|‚Š‚–‚›‚›‚¬‚±‚±‚·‚¦t¹Òc0c0k0|0 0§0¸0Ü0ê0ø0111%131I1_1a1w1�1�1�1�1§X{�³A³AÌAÜAôABBBB$B$B0BB>BFB¨XÙë;$;+;A;V;l;t;‹;•;²;·;¾;Ó;Ú;â;ç;©8x‚2¼2¼8¼6¼F¼d¼p¼r¼r¼ö¼ª8>H¨C¨C¶C¼CÃCÙCÙCàCúCúCD«<u€ЬЬ¥¬³¬º¬¾¬Á¬Ŭ̬𬭬`«¿:v:v>vGvov•v v¯v¾vÃvÉvËv­Lððð:ð:ðGðGðTðTðdðhðhðxðzðzð±ð®d@Õ(7(737I7P7n77Ž7›7ª7¾7Ö7î788"8L8g8„8©8®8Ç8Ü8ü89#9%9[9²9ƒ9�9Ñ9â9é9	::8:8:_:_:~:…:Á:Ï:/;;þ:N;U;Z;p;x;x;�;­;Î;<á;é;Ô;=<o<w<w<—<¬<Í<×<î<ö<á<J=J=J=O=O=`={=‰=¡=º=Ó=î=>>4>B>M>M>`>y>�>¢>À>Ä>Â>? ?0?>?V?q?|?”?ª?ª?@Ò?Ð? @.@>@Y@q@‡@‰@Ó@¤@¢@ò@ò@û@AAA*A1AFAFAWAWAZA^A¯4
-Ì{Ì{Ú{ß{â{è{ë{í{ó{°,szÀrÀrÄrÉrÓrãrãrs±T¤µº]º]È]Õ]â]^^
-^^ ^#^%^/^7^²Ô%V£?£?Ã?Ñ?Ö?à?à?ç?õ?ø?ÿ?ÿ?@@@@'@'@3@9@F@T@V@V@V@Y@^@j@j@v@�@’@¥@¥@¨@«@»@³4mvë5ë5õ5õ5%6;6w6…6‰6´À6b³å³å¾åÂåæåñåææ æ?æGæ_æoæ“æ“æ·æ¹æ¹æÝæßæßæççççççç%ç9çIçQçQçcçjçjç|ç‰ç•ç¸çµÈÉ÷Û!Û!ó!ý!"" "%"%"7"<"<"N"S"S"e"j"j"|"�"�"�"�"ˆ"�"�"Ÿ"¤"¤"¶"»"»"Ò"ÿ"##&#-#4#=#L#¯#¶ˆSqÍNÍNãNèNôNôNOOOO$O,O1O3O7OFOQOYOaObObOlO·(w}‹6‹6”6›6»6Â6Å6¸üF�³ø³ø»ø¿øàøëøôø
-ùù*ùBùUùvù¬ùÎùãùìùîùöùþùúú(ú5ú9ú=ú?úRúYúlú|úƒú™ú¯ú±úµúµúµúÁúÍúÍúÒúÛúíúôúôúûû!û¹„a~îÔîÔòÔÕÕÕÕ Õ Õ.Õ=Õ=ÕQÕLÕ`Õ[ÕjÕjÕyÕyÕˆÕôÙº¨r˜mOmO‡OŸO´O»OÆOÌOÌOÏOÖOáOåOêOðOýOPPPPPPP"P%P7P»Ltƒªtªt¾tËtÎtÒtàtëtôtu u*u.u1uCu¼TÊÛ~Ý~݌ݓݞÝÁÝÏÝÙÝßÝéÝîÝüÝÞÞÞ½¼žÉ¦Û¦Û¸Û¾ÛÌÛÌÛéÛóÛÜÜ'Ü+ÜEÜEÜXÜaÜlÜu܂܋ܠܪܷÜÀÜÂÜÈÜÑÜ×ÜüÜÿÜÝ'Ý8Ý<Ý@ÝKÝKÝOÝOÝOÝxݾ4<|<|J|L|Q|T|W|\|b|¿(ãéÛjÛjñj
k k%k@kÀ”"¸n¸nÒnñnýnoo'o/o3o?oPo]ocofoioloqosowoƒo”o£o©o¬o¯o²o²o¼o¿oÑoÁ„c€@i@icigitiyi}i�i±i»i»iÑiÝiäi÷iüijj4j>j>jRjRjUjcjÂ�]}fáfáoá}á}á•á«áºáÓáïáþáâ3â9âGâUâcâqâsâ‰âŸâµâËâËâÌâÑâÃL�žtyty‚yŽy™yªy¾yÂyÐyåy÷yzzz-zÄÜ›Îããëï(1GZoƒ�Ÿ²¿Òðù+5E[q‰¢¦¨­²»ÍÔÔæìÅ,u|ÞæÞæâæç3ç3ç=çÆ,fmíƒíƒûƒ„
„„„#„ÇH­»œzœz¥z±zÄzÏzçzézïzúzþz{{Èd¼Ñ{{{-{8{T{V{l{‚{•{«{Å{É{ɬ޵KBKBgBiBƒB’B¿BÉBÎBýBCCCC C*C/C2CACFCUCnCuCuC‡C“C—C¡CÊP,{J{J�J¤J¯JÁJÊJÕJÚJßJðJöJøJKË úþ–ë–ë ë³ë¸ëÌŒ'Fn›n›~›‚›‹›¦›´›¹›¼›Ê›Ï›î›ö› œ$œDœFœNœxœ|œœœ¦œ­œÃœÞœúœ�2�9�A�Í´Pyîî"5@V`uz„Ž˜–¦ÄÞÔîø6<CW_elsz�’——ÎøµïM—M—k—|—‘———ž—ž—¬—»——ȗڗڗí—ý—˜˜&˜2˜I˜K˜c˜e˜h˜j˜j˜n˜n˜z˜�˜�˜…˜�˜–˜¢˜ª˜Ï˜å˜ö˜
™™™™5™ÏÜú-#
-#
-+
-/
-:
-H
-Q
-g
-{
-…
-‘
-œ
-ª
-¹
-Ù
+L8Gû×û×ØØØ)Ø+Ø<ØRØaØ{ةححزØDVc££§¶ÂÎÚèôû    @4@SS[_v�¤³¿ÍÔåæê,‡ŽMMM'M,M0MT†×¨•¨•¬•ĕѕ֕ߕä•é•î•ó•ø•ý•–6–G–a–n–w–|–�–†–�–”–œ–º–º–¿–Ï–Õ–ß–ä–í–ô–ò–———(—]—b—‰—Ž—“—˜—¹—·—Ç—Ó—ê—ó—ú—˜˜4˜4˜;˜B˜G˜N˜W˜X˜a˜f˜$™<###6Piv}ˆ–D’Ÿããñÿ
'::Cˆ/MJ¬J¬Z¬e¬p¬w¬w¬š¬¦¬µ¬¬ϬÔ¬Ú¬é¬ï¬ö¬ö¬ú¬ú¬ú¬ú¬­
+­­	0ÎÖÓ�Ó�í�‘‘‘‘$‘
+Ì;X3X3p3v3�3“3Ÿ3´3º3À3Æ3å3ê3ò3ò3444046484G4K4Z4`4c4e4t4x4‡4�4�4’4¢4¦4º4½4À4Â4Ñ4Ô4à4Ä¥Òà0à0111 171A1G1J1M1P1Œ1�1’1”1§1ª1­1µ1»1À1À1Æ1Ò1Ô1Ý1Ý1Ý1Ý1ã1æ1ë1î1ö12ˆCa:·:·`·d·l·r·{·ƒ·‰·Œ·˜·˜·Æ·Ó·Ý·à·ã·ê·ò·ø·¸¸¸
h"Ÿ"Ÿ+Ÿ9ŸHŸSŸcŸsŸƒŸ“Ÿ¢Ÿ±ŸÁŸÑŸòŸôŸ  " 2 ^ ^ c 4æï«‘«‘őӑë‘þ‘’’
+’h:P [ [.[0[=[J[Q[X[`[d[{[—[«[º[Â[Ë[Í[Í[Õ[44=`C`CnCŠCŠC�C§C§C­C TX#ô#ô1ô?ô(-3%-BDNHÜê™p™p¹pÆpËp×p÷pýpqqqq&q(Z`®Õ®ÕÈÕÚÕâÕèÕðÕ$ü²‚²‚»‚Âɂ΂0¯·‚͂ͣ͘ʹͶ;Í8– Ð]Ð]Þ]å]ð]õ]÷]^^^^Pr‚È\È\Ö\Ý\è\í\ö\]]]]]"](]€[wb¼b¼�¼”¼˜¼¯¼¿¼Õ¼ë¼ý¼ý¼½½*½0½3½:½>½B½F½J½J½J½¾à:.’€’€«€³€΀Ù€à€í€ú€��.�L�W�e�u�~���‹���ª�¯�¶�¾�Ð�Ó�á�ð�‚‚
‚‚(‚@‚D‚I‚\‚|‚‹‚’‚™‚™‚ ‚¨‚µ‚·‚ɂтӂ݂ä‚ä‚ä‚ë‚ó‚ý‚ƒƒ"ƒ8ƒgƒgƒ‹ƒ‹ƒ’ƒœƒ²ƒÔƒÙƒÙƒàƒèƒþƒ „%„%„(„G„J„V„Y„\„z„z„„„‡„Œ„�„ „£„¼„¼„Á„Á„Ô„Û„å„û„…………1…8…@…V…t…w…y…y…”…—…·…Ò…Û…ä…è…ö…ü…ü…††††††*†=†H†Y†\†_†d†d†i†�†„†ª†®†Ɇâ†ë†ô†ø†‡‡‡‡‡$‡'‡*‡8‡A‡G‡J‡O‡O‡c‡o‡{‡‹‡£‡ȇÕ‡Ù‡ï‡	ˆˆ$ˆ(ˆ+ˆ+ˆ;ˆAˆSˆXˆ`ˆgˆsˆ�ˆ“ˆ•ˆ¦ˆ­ˆ¹ˆÒˆ߈âˆéˆìˆîˆ‰‰ ‰.‰.‰.‰5‰A‰K‰Y‰b‰h‰o‰z‰ƒ‰’‰¡‰°‰ЉÙ‰CŠ4×à+‘+‘?‘M‘e‘p‘r‘r‘z‘@?K[[cjw†•ª¾ÍÖõù`ˆœc c q ~ ˆ ˆ › £ ¶ ¸ Ë Ë Ï Ù Þ Þ ä |w’žž:žJžUžZž\žbžtž†ž–ž§ž·ž¹ž¹ž¹ž¿žØžõžŸŸŸŸŸ XÓå£2£2¯2±2À2Ö2â2é2333333$3 @8DÚƒÚƒèƒêƒ„„„#„!|ÿƒƒ´·ÅÎÎåö#'8KTdl|‹ŽÃ"4ÑÚkk'k9kHkYklkrk{k#¬ElP{P{f{w{{{Š{œ{°{»{Á{Ù{Ù{í{û{||||%|%|+|+|•|š|š|Â|Â|Ð|Ó|Ö|ä|ê|ó|}$,Ûâ{k{k‰k¬k—k¼kÂkék% †Š V V)V6V;V&H—¥6û6ûQûSûdûpûuû�û�û…û�û'Œ¬Ë®ò®òÏòÒòÛò÷ò
+ó
+óóó"ó<óDóWóaófóróxóóŒó�ó˜ó›óžó£óÊó( lpîÄîÄÅÅÅ)D6Cà�à�ü�þ���&�3�9�<�H�*p¼Ôüü$ü2üHüWü\ülünütü}ü…ü�üªüºüÉüÉüÐüÐüÐüÁý+h#9°p°pÆpÈp×pëpípöpøpøpûpqWqdqnq~qˆq“q–q¤q,$gl(s(s,s PT~æ~æ‚æ”æ–æ?L¡°ÂÒÂÒÌÒâÒñÒ÷ÒÓÓÓ!Ó0Ó6ÓEÓKÓMÓRÓ@H!*ƒ*ƒ8ƒDƒIƒIƒZƒlƒqƒqƒwƒA,€X€X‰X’XžX«X±X¶XBLõ’–’– –£–¯–¹–¿–Ì–à–à–—— —#—'—-—C …‰ööú	
D\˜«òòò(ò-ò3ò>òGòGòWòcògòò†ò‰ò‹ò®òE4Š“,MbbbfF,jqFFFSFcF‰F“F•FG¸�Çx1x1€1ˆ1“1²1»1Ñ1å1ï1û122262[2h2p2†2‘2™2™2¨2É2î2û233$36363D3K3]3]3k3k3l33H ”˜ffj�‘Ipu�ŠÑŠÑ¤Ñ¶ÑÒÑÒÑÙÑÛÑÛÑéÑëÑëÑ÷Ñ÷ÑýÑÒ	ÒÒ,ÒFÒFÒFÒSÒJDÀuÀuÈuÔuüuvv#v/v=vLv‘v‘v½vÚvävóvñv w wFwFwKwPwPw_wsw˜w³wÁwãwûwx x#x%x%x1x1x3x3xCxOxOxSxXxaxsxzxˆx—xÏxØxêxêxðxK{K|7SùSùkùuù|ùˆù‹ù™ùœù ù¢ù¥ù¨ù°ù³ù»ùÏùÙùïùõùøùúùúúL4•žwwww w'wGwHwMwM,'.NåNåXåZåbå|å�å‡åNXƒ•(](]:]=]H]M]Z]l]l]u]‰]“]œ]²]½]Ä]Î]O�QqØ[Ø[ò[ý[\\\6\>\F\S\]\d\k\o\s\~\„\�\‘\š\ \£\±\³\Á\P­éÿÿ%ÿ,ÿ=ÿ@ÿaÿtÿ�ÿ�ÿ¸ÿÑÿÝÿäÿæÿéÿïÿóÿ(8@FSVYgxˆ”–¦³¹ÆÚÝàèèèð÷þþ$Q ™�––š¯³R„
*öÒöÒÓÓ&Ó3ÓOÓRÓXÓaÓmÓoÓ…Ó›ÓŸÓºÓ½ÓÃÓÐÓÜÓÞÓÞÓîÓñÓÔSˆ {ß{߃ߎߞ߭߹ßÝßÝßÝßåßêßêßàà>àVà^à`à`àlàlà~à…à…à—àœà¤àT,æí+3+3/3H3O3Q3U ž¢¶¶ºÉÍVTFWn
+n
+‘
+˜
+¢
+¦
+ª
+®
+¸
+¸
+Â
+Õ
+á
+ä
+ò
+W £§ÎÎÒßãX äèÖëÖëÚëðëòëYHú¹q¹qÙqæqëq÷qrr#r0r9r:rFrZHëù)q)qIqVq[qgq‡q�q“q q©qªq¶q[ ¨¬ææêïó\ ­±ööú	


]<æñ*Õ*Õ;ÕGÕKÕWÕYÕeÕlÕrÕzÕ^d`u£U£U«U¯U¯U¾UÝUìUõUþUV'V0V7V[VdVkVwVyV_´¥Î@M@MKM\MMŽM™M¨MµMÎMåMéMíMõMýMN$N,NCNGNKNONWN_NhN†N™N¢N³NºNºNËNÔN`0&$œ$œ-œ-œDœgœgœlœadÆÛ›`›`©`®`¾`Ã`Ò`×`Ù`ß`î`ó`õ`aaaab8“(“(­(±(´(¿(Ü(à(å()c ’M’M›M¦MµMdDÀÍ__2_I_V_V_`_€_Š_eLš©ªPªP¸P½P¿PÎPÐPÞPéPòPòPóPùPf,bi˜E˜EœEÓEãE	FFFg,RY�D�D”DËDÛDEEEh0ÇÏŠ”Š”ž”Ý”ä”ê”÷”
+••i[ÃÃËÖÞÿ+;N[nŒ•¢®º¿Üááîø2ATq|„Ÿª¿Ýéò÷*9Nhs{†††‹™¤«¶»Âj,ry˜F˜FœFÓFãF	GGGk$ûûaûab(b.b:bl$+0ÔÔÔ(Ô:ÔvÔm¨Ci*¢*¢S¢X¢b¢l¢v¢‚¢‚¢Š¢³¢¼¢Á¢Ê¢Í¢Ò¢Ò¢ê¢ÿ¢£££££E£I£Q£S£^£^£c£c£r£‚£n<$/ê ê ø ¡¡¡$¡.¡]¡_¡e¡oü–ÑCNCNWNfNuNNŽN�N�NÃNØNãNêN
OO(O6ODOROrOhO~O�O›O­O¿OÆOÍOÚOáOéOùOPPPGP]PnPnPvPyP‡Pp@nz,Ÿ,Ÿ9ŸAŸDŸRŸVŸZŸ]ŸkŸrŸwŸq(bÒzÒzåzëzúz{	{	{{{!{+{<{M{a{c{~{®{Å{Þ{é{û{ |!|:|D|]|g|€|Š|•|£|ª|¸|¸|Â|Û|}}%}*},}6}R}[}c}~}rD/<ŽåŽå—å¬å¸åÃåÌåÚåååíåòås<²½;i;iQidixi�i›i¢i¸i¾iÄiúit,CCGt›ÈÝßu<bmäžäžñžùžüž
+ŸŸŸ Ÿ$Ÿ)Ÿv|0VVgq—¯ÄÞåö&00AINUbv�wLš©��/�6�=�I�R�l�w�|�…�›�ª�´�´�É�x8rQrQˆQ•Q§QÁQÏQØQâQy &í&í*íCízÔ._SS[cq„“�©´ÂÑâþ""-/DPbv¨¹Æáþ--;BTTbbgk{4¨±»h»hÏháhêhii!i'i:i|0DL£L£L«LÁLÌLÛLõLýL}PZjS�S�e�l�u�ƒ�ˆ�‹�‘�”�™�¤�ª�´�~d¦»–û–û¯û²ûÀûÀûÉûÔûÙûÜûìû÷ûýûüüü	üüH<Jöîöîïïï ï#ï0ï9ï9ï=ï@ïHï€$@EF
+F
+O
+]
+c
+h
+�4ÕÞÆýÆýÔýâýêýõýþþþ þ‚¬Lsêsêsüstt%t8tOtbtytŒt£tºtÑtìtðt÷týtuu,u9u?uZu^ueukuou�ušu§u­u°uºuƒ?666 616@6J6V6V6Z6b6f66¹6Ë6ß677777-727=7S7g7n7 7Ó7ä7ô7
+88%8W8Š8›8«8«8²8Ä8Ä8Ò8Ò8Ó8å8å8ó8÷8û8„P—§hh)hLTLXLXL\LdL�¤6[˜†˜†²†º†¾†ƆÒ†Ù†à†å†ú†‡‡‡‡#‡(‡?‡B‡K‡Q‡T‡V‡`‡e‡|‡‡�‡ˆ‡Œ‡š‡�81;vÔvÔ„Ô›Ô¦Ô¦Ô±ÔµÔµÔ»Ô‘$<�;!;!C!S!c!u!„!�!›!©!°!»!Ç!Ü!ê!ò!"")"6"K"U"j"t"‰"“"¨"¶"¶"Ä"Ð"Ü"ð"#&#5#C#O#[#l#�#–#§#±#Ã#Õ#ç#ù#,$:$O$t$‹$”$£$¾$Õ$Þ$é$ð$û$%%%’0v~{V{VV�V¬VÁVÆVàV“02:ŒŒ/Œ:ŒLŒTŒWŒ_Œ”¼KvÛ\Û\÷\]*]1]>]J]R]]]e]p]{]Ÿ]®]µ]¼]Í]Ï]×]â]í]ü]^^^^^,^5^5^9^R^•,ÑØîóîóüóô ô#ô%ô9ô–P	Y¸X¸XÒXÕXÛXçXéXøXÿXY.Y5YbYiYmY…Y‘Y®Y·Y·Y·YÄYýY	ZZ"Z5ZCZTZgZtZ…ZœZ¢ZéZûZ([/[N[U[`[|[|[ˆ[Š[Š[–[˜[˜[¤[¦[¦[¶[¹[¹[Å[Ñ[ê[ö[ÿ[
+\ \.\.\.\?\X\_\f\l\o\·\—P&¨Ž¨ŽÈŽÛŽçŽóŽ	��� �%�'�@�˜4#˜B˜B¡B¶B¶BÃBØBØBÝB™ ÌÐÎóÎóÜóåóëóš0ÐØ••.•m•t•z•’•••¡•›¼
+5h…h…†…Š…‘…˜…¥…³…¼…¿…Å…Ë…Ò…Ù…Û…å…ê…ô…†††#†&†)†1†6†L†X†[†^†^†^†^†a†i†q†x††‘†œ0HPÎøÎøÜøêøòøù.ùVù�€ R R4R;RCRKRgRgRuRwRwR‡R‰R‰R—R™R™R©R±R±RºRÆRãRãRõRõRùR SžXò[Z[ZeZyZŠZ•Z±Z´ZÂZÈZËZÜZ÷ZûZŸ@¡­ ^*^2^J^J^S^g^m^v^’^–^ @$0ãòãòñòöòùòóóóóó¡H&4j×j×׋׎חף׫×È×××Ý×à×ì×¢ îòìì"ì/ì1ì£ä{°èsèstt2tuPuPuPuPu[u[uiu¤ Ñõ“E“E²E´EÅEÊEØEùEFF F8F?FAFAFSFYF_FaFgFmFpFvFxF�F�F–F–F–F�F®F¥T…–®ú®úÒúÕúãúãú÷úûûû#û#û#û'û5û¦`p„úú3ú9úGúGú[úfújúqútú~ú…ú•ú™ú™ú™ú�ú©ú§Hïý’ĒĹÄ×ÄåÄðÄôÄøÄüÄÅÅÅŠŨD"/zƒzƒˆƒ”ƒ™ƒ™ƒªƒ¯ƒ¯ƒµƒ©t¹Òs1s1{1Œ1°1·1È1ì1ú122$2+252C2Y2o2q2‡2�2�2�2Ÿ2ªX{�ÃBÃBÜBìBCCCC.C4C4C@CLCNCNCVC«XÙë+<4<;<Q<f<|<„<›<¥<Â<Ç<Î<ã<ê<ò<÷<¬8x‚
+¾
+¾¾¾¾<¾H¾J¾J¾ξ­8>H°C°C¾CÄCËCáCáCèCDDD®<u€b®b®}®‹®’®–®™®�®¤®È®Ø®¯`«¿’w’w–w­wßwx+x:xIxNxTxVx°LÛñÛñöñòò ò ò,ò,ò<ò@ò@òPòRòRò‰ò±d@Õ999!9(9F9W9f9s9‚9–9®9Æ9Ù9ï9ú9$:?:\:�:†:Ÿ:´:Ô:ë:û:ý:3;Š;[;Y;©;º;Á;á;ö;<<7<7<V<]<™<§<=Ø<Ö<&=-=2=H=P=P=u=…=¦=ì=¹=Á=¬=>G>O>O>o>„>¥>¯>Æ>Î>¹>"?"?"?'?'?8?S?a?y?’?«?Æ?Þ?ô?@@%@%@8@Q@e@z@˜@œ@š@ê@ø@AA.AIATAlA‚A‚AÙAªA¨AøABB1BIB_BaB«B|BzBÊBÊBÓBÜBñBñBC	CCC/C/C2C6C²4
+Ê|Ê|Ø|Ý|à|æ|é|ë|ñ|³,sz˜s˜sœs¡s«s»s»sçs´T®¿˜^˜^¦^³^À^Þ^á^è^ï^ý^__
__µÔ%V³@³@Ó@á@æ@ð@ð@÷@AAAAA$A'A+A7A7ACAIAVAdAfAfAfAiAnAzAzA†AŸA¢AµAµA¸A»AËA¶4mvû6û67757K7‡7•7™7·À6b‹ç‹ç–çšç¾çÉçØçäçøçè è7èGèkèkè�è‘è‘èµè·è·èÛèÝèÝèéèéèñèñèýèé!é)é)é;éBéBéTéaémé�é¸ÈÉ÷ë"ë"#
###0#5#5#G#L#L#^#c#c#u#z#z#Œ#‘#‘#‘#‘#˜#�#�#¯#´#´#Æ#Ë#Ë#â#$$$$$6$=$D$M$\$¿$¹ˆTr:O:OPOUOaOaOmOuO}OˆO‘O™OžO O¤O³O¾OÆOÎOÏOÏOÙOº(w}›7›7¤7«7Ë7Ò7Õ7»üF�‹ú‹ú“ú—ú¸úÃúÌúâúöúûû-ûNû„û¦û»ûÄûÆûÎûÖûíûõûü
üüüü*ü1üDüTü[üqü‡ü‰ü�ü�ü�ü™ü¥ü¥üªü³üÅüÌüÌüÞüäüùü¼„a~öÕöÕúÕ	Ö	ÖÖÖ'Ö'Ö6ÖEÖEÖYÖTÖhÖcÖrÖrÖ�Ö�Ö�ÖüÚ½¨s™ÚOÚOôOP!P(P3P9P9PvAvSv¿TÊÛ†Þ†Þ”Þ›Þ¦ÞÉÞ×ÞáÞçÞñÞöÞß
+ß
ßßÀ¼žÉ®Ü®ÜÀÜÆÜÔÜÔÜñÜûÜÝÝ/Ý3ÝMÝMÝ`ÝiÝtÝ}݊ݓݨݲݿÝÈÝÊÝÐÝÙÝßÝÞÞ Þ/Þ@ÞDÞHÞSÞSÞWÞWÞWÞ€ÞÁ4:}:}H}J}O}R}U}Z}`}Â(ãéëkëkll/l5lPlÔ"�o�oªoÉoÕoèoîoÿoppp(p5p;p>pApDpIpKpOp[plp{p�p„p‡pŠpŠp”p—p©pÄ„c€kk;k?kLkQkUkhk‰k“k“k©kµk¼kÏkÔkØkëklll*l*l-l;lÅ�]}nânâwâ…â…â�â³âÂâÛâ÷âã ã;ãAãOã]ãkãyã{ã‘ã§ã½ãÓãÓãÔãÙãÆL–¥rzrz€zŒz—z¨z¼zÀzÎzãzõzþz{{+{Çܛλ»ÃÇèõ	 2G[gwŠ—ªÈÑÞêöö	
		3	I	a	z	~	€	…	Š	“	¥	¬	¬	¾	Ä	ë	È,z�öçöçúç1èHèHèRèÉ,fmë„ë„ù„ÿ„………!…ÊH´Âš{š{£{¯{Â{Í{å{ç{í{ø{ü{||ËdÃØ
+|
+||+|6|R|T|j|€|“|©|Ã|Ç|̬޵[C[CwCyC“C¢CÏCÙCÞC
DDDD%D/D:D?DBDQDVDeD~D…D…D—D£D§D±DÍP,‹K‹K K´K¿KÑKÚKåKêKïKLLLLÎ ÿ¦ì¦ì°ìÃìÈìÏŒ'Flœlœ|œ€œ‰œ¤œ²œ·œºœÈœÍœìœôœ�"�B�D�L�v�z�š�¤�«�Á�Ü�ø�ž0ž7ž?žÐ´Pyþþ#-2EPfp…Š”ž¨¦¶Ôîäþ"FLSgou|ƒŠ‘¢§§ ÑøµïK˜K˜i˜z˜�˜•˜œ˜œ˜ª˜¹˜À˜Æ˜Ø˜Ø˜ë˜û˜™™$™0™G™I™a™c™f™h™h™l™l™x™™™ƒ™Ž™”™ ™¨™Í™ã™ô™šššš3šÒÜú-ûû )?S]it‚‘±Îæê

*
.
9
E
P
_
n
Ž
œ
«
×
ä
è
õ
..<<=QÓˆ1O††�±¼Íáù#,11AMS_v™©©²·¸üÔ€5KŠKŠkŠwŠƒŠ‡Š‹ŠšŠ®Š¶Š¼ŠÐŠßŠëŠ÷ŠûŠþŠ‹‹ ‹$‹.‹2‹;‹A‹T‹Õ$).CCCC1C7CÖ,‚‰–ŖŬſÅÊÅÐÅÓÅÛÅרïp�p�Š���¥�°�À�Ò�Ö�ä�í�ŽŽŽ!Ž,Ž:ŽDŽLŽPŽPŽPŽSŽUŽYŽYŽ^ŽlŽzŽˆŽ�Ž�Ž�ޥިLêùæôæôõõ(õ3õ@õTõZõfõÙ ÎìÎìÒìßìáìÚ`#Û=Û=ß=ö=>>)>0>G>W>g>x>‰>š>»>Ü>ó>þ>	?C?ÛTƒJƒJ‡J£J²JÄJÉJßJæJøJKK8KHKMKMKOKÜ`0qIqKqSqoqxq‹qšqŸq²qÉqÏqÛqëqëqýq=rÝH_mBB#B1B7BKBQBVB^BaBmBÞ$zGG!G6GDGOGßÀnš#…#…;…B…J…_…h…h…ƒ…‰…‰…“…š…¥…ª…´…È…Ê…Õ…Õ…ä…ì…÷…û…†††††† †'†1†A†à@/;JŠJŠhŠtŠ�ŠŒŠ˜Š¥Š«Š®Š±ŠÊá0 '���(�a�g�i�i�o�â�k‹»�»�Ñ�Ô�à�à�â�ï�ý�ŽŽŽŽŽ.Ž@ŽKŽWŽaŽdŽfŽiŽkŽnŽsŽxŽ|ŽŠŽã<€‹PGPG^GlGqGwG‡G‡G�G¡G§Gä8%rÎrÎ|΄ΘέεθκξÎå”x™ÌÌÌÌ%Ì<Ì<ÌMÌVÌ`ÌdÌhÌoÌvÌÌ–Ì–Ì›Ì�Ì�̡̧̣̣̮̮̳ÌÃÌÕÌ×ÌçÌæ€‚žûüûüýýý$ý/ý8ýNýbýkýý¦ý¼ýÖýÞýúýþþ)þ4þ;þFþKþ`þçLN]­­#­#­2­A­R­V­f­}­�­�­†­è85?œœ*œFœRœVœZœ^œjœrœéœ$C?C?K?Q?b?q?�?¨?¨?´?Å?Ð?Ü?Ü?é?û?@'@.@?@I@N@N@N@n@Ž@¨@­@²@êx‚œ#%#%7%A%G%S%c%f%j%s%ƒ%†%�%’%¤%Ê%Ò%Û%Û%á%
&&&%&ë8[[+[.[3[6[D[J[M[O[W[ìD&þäþäåååå&å.å6å>åFåJåNåídavr�r�‚�’���¢�¯�¸�¼�Â�È�Ð�Ø�ä�žžžžžîH~ŒÞãÞãùãäää)äGäMäYäwä}ä}ä‰äï(.4Ú›Ú›ã›ñ›œœœð0’Œ’Œ Œ¸ŒñŒ÷ŒùŒùŒÿŒñDŒ™‹Ž‹Ž·ŽÅŽÐŽÔŽØŽÜŽàŽìŽùŽüŽ�ò€Ïëë	ë	ö	þ		
+
+ 
+(
+>
+R
+[
+o
+–
+¬
+Æ
+Î
+ê
 ö
-+CRVamx‡–¶ÄÓÿ//=DVVddeyЈ1Ovv¡¬½Ñéþ!!1=COf‰™™¢§¨ìÑ€5M‰M‰m‰y‰…‰‰‰�‰œ‰°‰¸‰¾‰Ò‰á‰í‰ù‰ý‰ŠŠŠ"Š&Š0Š4Š=ŠCŠVŠÒ$).CCCC)C/CÓ,€‡ŽÄŽÄ¤Ä·ÄÂÄÈÄËÄÓÄԨ˜‹²‹µ‹Í‹Ø‹è‹ú‹þ‹ŒŒ7Œ=Œ=ŒIŒTŒbŒlŒtŒxŒxŒxŒ{Œ}Œ�Œ�Œ†Œ”Œ¢Œ°ŒµŒ·Œ·ŒÍŒÕLêùÖóÖóòóþóô#ô0ôDôJôVôÖ ÿ¾ë¾ëÂëÏëÑë×`#Ë<Ë<Ï<æ<ö<== =7=G=W=h=y=Š=«=Ì=ã=î=ù=3>ØTsIsIwI“I¢I´I¹IÏIÖIèIûIJ(J8J=J=J?JÙ`Xoqoso{o—o o³oÂoÇoÚoño÷oppp%pepÚH_mó@ó@A!A'A;AAAFANAQA]AÛ$zGGG.G3>;>A>R>a>>˜>˜>¤>µ>À>Ì>Ì>Ù>ë>ð>??/?9?>?>?>?^?~?˜?�?¢?çx‚œK#K#_#i#o#{#‹#Ž#’#›#«#®#·#º#Ì#ò#ú#$$	$5$:$@$M$è8ZZZZ#Z&Z4Z:Z=Z?ZGZéD&öãöãþãääää&ä.ä6ä>äBäFäêdavš›š›ª›º›Å›Ê›×›à›ä›ê›ð›ø›œœ(œ+œ6œ6œ>œëH~ŒÖâÖâñâÿâãã!ã?ãEãQãoãuãuã�ãì(.4šššš(š7š<ší0ºŠºŠÈŠàŠ‹ ‹!‹!‹'‹îDŒ™����¹�Ç�Ò�Ö�Ú�Þ�â�î�û�þ�Žï€Ïë&1<GPfzƒ—¾Ôîö		)	A	L	S	^	c	w	ð<C2C2K2i2z2Š2›2ª2Ä2Ü2Þ2à2ñLÁÐDDD0DEDKDQD`DnDnDqD|Dòˆú]ˆ]ˆsˆ—ˆ©ˆ©ˆ»ˆÆˆÜˆÜˆìˆîˆîˆîˆÿˆ
-‰‰‰‰!‰)‰/‰5‰5‰8‰F‰ó8Z•Z•h•s•~•¡•·•º•Å•ô?����-�:�K�\�m�‚�‰�œ�¯�Á�É�ê�þ��	��*�Q�d�v�«�­�¾�Ê�Ï�×�ù�‘‘:‘õH'5h�h�‚�•�®�Ã�É�Ï�Ï�×�Ù�Žö8JT&Ô&Ô4ÔKÔVÔVÔaÔiÔiÔoÔ÷Dìù{	{	�	™	¯	É	Ô	Ô	å	õ	÷	"
-øp@X@‘@‘I‘Q‘b‘s‘�‘�‘˜‘£‘®‘Ñ‘â‘ì‘î‘ù‘’
’’)’<’M’W’W’Z’ù$ôù=ˆ=ˆFˆOˆUˆZˆú 
-MMMMVMaMrMûDÇÔ6ê6êEêJêSêdêeêxê{ê�êüh-ƒs*s*›*�*¦*º*½*Â*Æ*å*ù*ü*+++<+E+G+f+o+o+o+t+ª+´+¾+È+Ò+Ù+å+ñ+û+û+û+,,%,',',0,2,2,;,=,=,B,D,D,I,I,I,M,h,~,‰, ,©,®,¸,Ä,Ð,Ü,ï,---'-=-M-o-Œ-ª-ª-ª-ª-ª-´-½-Ä-D.ýLÈ×öö/ö6ö;öQöSödöhö{ö�ö®öþ4¾ã¾ãÆãÎãÖãÞãæãîãòãöãÿ,–ã–ãžã¦ã®ã¶ãºã¾ãx7 )0C\\k�Š™  £­ÃÊÌÏÑÑÝ|
-Îiî§î§¨¨(¨1¨<¨G¨I¨\¨j¨u¨€¨”¨Ÿ¨¢¨¨¨¬¨¯¨µ¨¹¨¼¨¿¨Ò¨ç¨ï¨ò¨
-©©©#©&©9©N©V©Y©q©�©†©†©Ž©Ž©±©±©±©µ©·©·©»©½©½©Á©Ã©Ã©Ç©Ç©Ç©Ê©Ì©Ì©Ï©Ô©Ú©Ý©á©ã©é©ì©ªªª#ª&ª+ª>ªYª[ªqªqªqªvªvªxªxª}ª€ª¦ª¦ª¦ª¾ªÄªÛªêªùª« «E«J«J«b«€«…«…«�«»«½«½«Õ«ñ«ó«ó«¬'¬'¬E¬Q¬V¬V¬n¬…¬Š¬Š¬¢¬¾¬Ã¬Ã¬Ç¬ß¬ý¬­­­­ ­=­A­A­_­d­d­|­“­š­Ÿ­Ÿ­·­Î­Õ­ã­ó­®® ® ®.®6®_®a®a®y®š®¹®¾®¾®Ö®ë®
¯¯%¯D¯e¯h¯m¯m¯…¯œ¯¦¯«¯¼¯¼¯Â¯Í¯â¯ç¯ñ¯°°7°E°K°b°j°s°s°°ƒ°ƒ°Œ°›°¤°¤°­°·°Ó°ñ°±±#±8±@±L±V±V±n±p±{±“±•±µ±µ±º±º±ð±þ±²²²²² ²/²8²8²A²G²c²n²†²ˆ²“²«²­²É²É²É²Ù²ú²ü²ü²³+³0³0³H³_³i³n³„³„³›³›³§³«³±³º³É³Ò³Ò³Û³æ³þ³´´'´B´D´D´M´e´p´†´“´›´¼´¾´Æ´à´ã´ì´ñ´µµµ7µAµLµhµ{µ’µšµ¤µ¤µ­µ±µÈµ¶¶¶¶ ¶(¶,¶C¶{¶{¶}¶}¶™¶£¶«¶«¶´¶¸¶Ï¶···5·=·J·O·O·X·\·s·«·¼·Å·Ê·Ê·Õ·Ù·ñ·¸¸¸-¸E¸E¸o¸y¸y¸–¸š¸­¸µ¸¼¸Ç¸Ì¸Ó¸Ó¸Ø¸¹ ¹=¹T¹^¹h¹h¹x¹¢¹²¹Ä¹Ð¹Ô¹î¹ººººººººº$º(º@ºWºaºfº|º”º”º¾ºÈºíºòºòºòºýº»»0»:»?»U»U»m»m»Ÿ»©»Æ»Í»Ø»Ý»¼¼(¼:¼B¼D¼]¼k¼ˆ¼˜¼˜¼Å¼Ç¼ñ¼ó¼½½$½.½5½R½[½[½ˆ½ ½£½¾½¾½¾½Ã½È½û½¾-¾D¾I¾S¾]¾Š¾ž¾¡¾¸¾¸¾¸¾¸¾Â¾Ø¾ï¾ù¾þ¾þ¾¿-¿7¿G¿G¿c¿w¿z¿Œ¿–¿œ¿³¿»¿Ä¿É¿É¿É¿å¿ù¿ü¿À À%À%À=ÀTÀ^ÀnÀnÀŠÀžÀ¡À³À½ÀÃÀÚÀâÀëÀðÀðÀðÀÁ Á#Á5ÁGÁLÁLÁLÁdÁ{Á…Á•Á•ÁºÁËÁÕÁÛÁòÁúÁÂÂÂÂ-Â>ÂPÂUÂUÂjÂjÂj†† §ÂäÃ@!––&–4–4–A–f–q–u–ƒ–†–Ž–0EMÎÎ#Î6Î<ÎHÎQÎ^ÎcÎ|�œ­­ ­!­/­/­=­P­x­›­©­¹­Ü­Ä­ö­®+®0®0®0®B®E®Q®8Ž˜‚ЂБПаддййпЬ°×ûìûìí!í7í5íEíMíTíXí`ípí~í�í“í›í§í­í­í´í¸í¸íºí!ï4GPB‰B‰V‰l‰w‰|‰Љ—‰ ‰±‰p+C³³Óäëü'/=EEp›ÆÓññþþþ	DŸ¬4z4z@zWzbzhznztzŠz‘z–zœz
-„Sp##:DToŠ¥ÀÓäé#?DOYfp~„�—£Þ,-4ÃÃÇõáJ|J¶J¶\¶k¶n¶�¶²¶¶ë¶û¶·8·G·T·d·j·z·z·Œ·�·”·”·¤·ª·­·¸
@
³ö³öÅöÐöÝöåöíöõöýö÷
÷÷˜£ÅÃ^Ã^Û^ê^ø^____$_'_,_6_D_K_L_X_^_d_g_p_q_q_}__‹_X7‰žÇžÇ¼ÇÂÇÉÇÙÇàÇèÇîÇõÇÈÈÈ"È(È6È9È>ÈAÈAÈQÈbÈdÈvÈxȅȊȑȓȠȢȢȲÈÃÈÆÈÈÈÔÈÖÈöÈûÈÉÉÉÉÉ!É!É1ÉBÉDÉoɑɓɚɜɨɨɼÉÀÉÀÉÖÉ@Š–[V[VqV“V™VžV±V¾VÄVÇVÏV0³ð³ð¼ðÁðÊðÐðÐðÕð,;B  ! - ; D I O 8ƒ�–ç–ç¤ç°çÞçîçðç÷çÿçèèä6¶Å¶ÅÔÅ×ÅÚÅîÅöÅýÅÆÆÆ9Æ9Æ<ÆLÆNÆNÆQÆSÆSÆVÆmÆ‚Æ�ƧƱƹƹƹƻƻÆÀÆßÆåÆôÆÇÇ(Ç*Ç<ÇLÇQÇQÇ]Ç]ÇjÇmÇmǘÇ8òü¢Ó¢Ó±ÓÇÓÖÓôÓøÓþÓÔÔÔô…¾ÆžÆžØžÛžåžòžöžüžüžŸ	Ÿ
ŸŸŸŸ%Ÿ+Ÿ2Ÿ8Ÿ?ŸEŸLŸRŸYŸ_ŸfŸlŸyŸŸ†Ÿ�Ÿ—Ÿ—Ÿ Ÿ¡Ÿ²ŸÅŸÇŸ×ŸÞŸéŸôŸÿŸ
-      * LWf¸q¸qÁqÑqÑqïqõqrrr!r#r#r#rJrhÝó}‡}‡’‡¡‡¦‡¶‡¾‡¾‡Ì‡Ö‡å‡í‡ù‡ˆˆ ˆ%ˆ0ˆ3ˆ;ˆD<I¶Ó¶ÓÊÓæÓôÓÔÔÔÔÔÔ ÔP„”JuJuYubulunu€u€u€u‚uŠu‘u´uÂuÃuÉu0Ž–³f³fÉfÜfîfôf÷fÿf<Zexxx+x3x7xCxHxLxRx\ÉÜ

"
5
H
[
f
z
‹
­
Ï
ê
 ;VqŒHTct
-Ï
-ÏÏ*Ï0Ï:ÏRÏXÏZÏeÏ}Ï‰Ï¡Ï§Ï§Ï§Ï§Ï­Ï X£µ©m©mÉmÖmÛmçmn
nn'n.n7n;nGn X†˜ûâûâãã)ãEãEãNãNãSãdãmãxãxã„ã‘ã!,�—FÅFÅZÅlÅqłůÅ"ä6u‘u‘�‘’‘•‘›‘¯‘¶‘¹‘Ô‘Þ‘ã‘ê‘ï‘ï‘’ò‘’%’1’E’N’V’g’g’g’p’w’…’‡’’’˜’·’Ç’Ï’á’ê’û’““““““$“g“#	Hàeàefff&f1fEfXfcfof€f…f‘f–fšf£f¼fÈfÈfãfõfgg+g1gUg]g]gigmgqg‰g—gÂg�gÑgÜgóg÷gþghhhh=hBhBhNhThZh\hlh$ HlÛÖÛÖïÖÿÖ× ×$×-×4×:×<×O×Wס×|×a×±×À×Ò×Ù×è×úר
Ø!ØAØKØ#Ù%LêÄêÄùÄÅÅÅ Å,Å4Å:Å?ÅEÅGÅGÅMÅ&<{†b|b|p|{|†|�|·|•|Å|}'˜Õ÷JwJwtw…w—w¤w´w¼wÀwÄwÈwÌwÔwÜwîwüwxxx$x9x?xCxUx( GK¢r¢r±rÎrÔr)Ü4è耀€9€9€;€B€B€S€Z€g€z€ƒ€�€’€—€·€Ò€Ò€è€ê€ê€�����#�4�:�=�=�@�E�M�^�e�k�|��œ�œ�¡�¡�¡�¼�*h¦ŽŽ&ŽBŽRŽRŽfŽpŽtŽxŽ…Ž–Ž˜Ž¬ŽµŽ¹ŽÈŽÛŽáŽèŽ÷ŽúŽ�:�F�R�Z�d�r�ƒ�–�£�´�Ç�Í��&�4�J�Y�d�z�ˆ�ˆ�”�¸�Ä�Ï�Ö�Ü�ã�ì�ï�‘+4Yb²Î²Î»ÎÃÎÏÎàÎèÎðÎÏÏ, �´D7D7^7d7d7s77†7Œ7Œ7–7Ÿ7Ÿ7¥7©7¬7¶7Á7Á7Ð7Ù7Ù7ä7é7ì7ï7ò7õ7ü7ü7ü7ü7ü7
-8- ÕÙ†ê†êŠê—ê™ê.¤“ø(|(|>|J|R|c|g|{|�|›|­|²|¸|½|Ô|Ý|õ|}}} },}<}N}N}R}X}`}j}j}n}r}�}‘}•}º}º}É}Ë}Ñ}Ù}ë}~
-~~~~*~*~8~A~A~P~~~‚~…~‰~�~›~±~Æ~Õ~ä~ï~ñ~÷~
-$$+DIQYbirá/,%l{3{3ƒ3‡3Ž3•3 3¨3¯3¯3¾3Ã3Ï3Û3ë3444!4(494S4g4n44€4£4¨4º4¿4â4æ4ï4÷45 5&57585<5^5o5„5�5œ5œ5£5Å5Ö5Ü5æ50,]Š]ŠfŠ�Š‡Š‡ŠŒŠ14ÏØÓ:Ó:×:Ü:è:ô:;;;;2(êðCkCk]kok{k�k‰k3»ü2¥2¥@¥H¥M¥S¥{¥ž¥¦¥®¥¹¥¾¥Ô¥á¥ê¥ï¥¦%¦-¦/¦8¦G¦N¦t¦t¦}¦”¦£¦Ħ̦ߦï¦ÿ¦§§.§>§N§h§m§u§u§z§ˆ§—§¸§çÒ§â§ò§¨¨¨¨(¨.¨4”ÍîrÁrÁŠÁ—Á¡Á­Á´Á½ÁÐÁêÁðÁøÁÂÂÂ*Â1Â6ÂTÂWÂ`Âeƒ†††‰–¦©¹Â58‰ÓUÓU×UèUVV*V3V8VTV6p	!9q9qMqZq_qkqqqxq”qÊqÓqÜqèq7ƒÂú¼ú¼½,½8½8½I½P½P½Y½k½t½•½š½³½º½º½нܽܽ¾¾%¾D¾c¾o¾†¾�¾Ÿ¾°¾ǾÞ¾ý¾¿(¿?¿V¿[¿l¿ƒ¿š¿š¿¢¿°¿Á¿Ø¿ï¿ÀÀ.À8ÀAÀHÀ^ÀgÀ?Á88u†
-†
-”
-£
-­
-¾
-Æ
-È
-È
-Î
-980:’Ÿ’Ÿ›ŸßæŸòŸÿŸ	  :,—žÓVÓVÜVåVøVþVW;0	PƒPƒ^ƒhƒ|ƒ‚ƒ„ƒŠƒ<,8?ÞÞò		#	)	/	=,ÀeÀeÉeÔeÖeÖeÛe>\fyTxTxvxzx†x—x£x¬xËx×xàxæxêxøx?€ÚXÚXêXñXYY7YAYKYSY[YcYoY�Y“Y­Y¹YÂYÐYÖYÜYßYæYîY@XŸñWWWW!W'W3W?WGWMWSW[WiWtW|W•W§W²W»W»WÀWÅWÓWÚWßWßWåWìWñWýWXXXX%X)X6XCXHXRXRX[XbXnXyX•X•X•X�X¤X«X²X¹XÀXÇXÎXÕXÜXâXëXñXYY1Y@YCYIYA|Kf>î>î]îkî{î‡î�î–î�î¤î©îµî¹îÃîÃîÊîÍîÓîÓîÝîëîòîòîòîïB,ss‹–¼àèCX]cacakavaˆaŽa–a aÃaÃaÕaâaöabbbTbbbšbŸbŸb±b¾bÒbßbäbób(c/c@cFcKcKc]cjc~c‹c�cŸcÓcÚcëcñcócócûcûcdd#d6dZdgdwd|d‚d�dšd d«d«d±dºdÅdÕdÚdùdeeeee5eDàÊþKKSs‚Œ•¦¶ÉÖé)55BLr…¤··×ä*/AEMM[ft{†””™¥ELRaŽ�Ž�›�£�¦�´�·�¾�Â�Å�É�×�Þ�ã�F8GQF�F�S�[�^�l�p�~�‚�‡�G0ÞÞçìûÿHTØé#ï#ï-ï@ïSï[ïŒïüïI(LRëëóJœ'J»Z»ZÕZöZ[[[([0[;[F[S[b[k[r[v[v[|[‚[š[£[©[²[·[·[·[»[Å[K8�‹SS\lyy€�––›L¼W‚ÐcÐcöcùcd"d0d7dDdGdKdUdbd‚d‚d d¢d¢dÀdÂdÂdÒdÔdÔdädädeee"e&e?eAefeoeue|e¾eM<#’ž’ž ž¨ž°žÀžÌžÖžŸŸ
ŸN$ëYëYôYýYZZOZ¸¸&¸-¸=¸D¸D¸Z¸f¸�¸¬¸˸׸ë¸ï¸õ¸¹¹
¹¹¹¹:¹Y¹m¹…¹‰¹�¹�¹¡¹§¹¹¹¹¹¹¹¹¹¼¹Á¹ƹ̹à¹ä¹ê¹õ¹ù¹ÿ¹
-º
-º
-ººº)º-º3º>ºBºHºQºQºQº†ºPDs€ããç÷
 ',18JJLQ¬Íôr°r°”°™°¢°¢°®°½°ʰΰذî°î°þ°
-±±±(±3±;±@±R±R±R±Z±h±v±€±ƒ±ˆ±•±¢±¢±´±R�-MFFEFHFVF_F_FvF‡FœF¡F´FÁFÆFÊFÛFG
GGGG0G?GBGvGSHžìžì§ì¼ìÅìÑìÓìÕìäìäìóìõìõìúìT¸9£èQèQ	RRR,RPRWRbRpRzR�R˜RžR«R»RÏRÔRãRöRS SS1S3S,a,y,},‚,‚,“,“,¦,¸,Ë,á,ã,ã,ö,þ,þ,þ,---+-2-2-D-J-p-]@1=KñKñYñ^ñañsñyñ|ñ~ñ„ñ^è¸î؉؉ò‰
-ŠŠ&Š8Š<Š?ŠHŠKŠ\Š\Š\ŠcŠpŠsŠxŠuŠÒŠéŠìŠîŠ‹‹
-‹‹"‹"‹+‹:‹H‹X‹f‹o‹v‹{‹{‹{‹�‹•‹_D	ввž²Ʋé²ö²³³*³2³:³` ÖëÖëàëóëøëa4zƒ$-4=b8êôz”z”ˆ”Ž”—”�”£”¬”¯”µ”c,œ£z]z]„]¢]©]¯]²]¶]dtRkàràrss s@sFs@s]s_ses_s|s~s~sŽs�s�s s s¦säse0CJCJLJ^JlJpJtJtJyJf@BÌBÌQÌYÌmÌwÌ̇̌̒̔̔̚ÌgØ"T’–’–¨–·––Ô–ë–ë–ü–—!—4—@—K—[—}——œ—©—©—©—º—æ—í—ö—ü—˜	˜˜˜˜ ˜*˜0˜Z˜hüi¤X[X[w[y[ˆ[”[ [µ[º[Ã[Ê[Ø[æ[ü[ü[ÿ[\\\\\1\I\E\W\\\z\“\œ\Ÿ\¢\§\Ë\Í\é\ã\]])]=]D]J]M]R]b]i]l]B^i”	*ÓÓõEm{¾DFTbppФÁÓãø#3Haho‹§³jdVÐ_Ð_ä_æ_ö_``2`V`^`p`~`‰`š`Ÿ`µ`½`Â`Û`û`û`aaa?aAaAabadadatataza}a‚a˜a a¥a¾aáaíabb5b7b7bXb]b]b~bƒbƒb“b“bžb¡b«b¿bÏbÛbûbûbccc%c.cBcVc]cdcgcÏck`AUÛÛãù	$?HOTevˆŒ‘“lðñ)P'P'n'q't'~'Œ'—'¯'·'Á'ç'ô'ÿ'(&(7(B(o(t(z(¤(®(´(·(Ä(Ï(á(ö(
-))8)=)C)f)k))—)®)Å)à)ö)**4*J*M*_*m<5@ä|ä|ü|}}}"}7}:}?}K}n0	BBB0B0BDBHBLBo¼
-5ËãËãÖãÚãþã	ää$ä0äOägäwä—ä—ä¸äºäºäÛäÝäÝäþäåååååå å4åDåLåLå^åeåeåwå„å�å”å³åp\Qd²‰²‰‰ĉωÔ‰ç‰ð‰õ‰ú‰
-ŠŠŠŠ(ŠqŒoŽp-p-{-ƒ-Ž-™-¤-­-Ã-×-à-ô-.1.K.S.i.q.�.›.¦.¾.É.Ð.Û.à.ó.rxˆ¢£ó£ó¿óÄóÇóÔóÚóÝóåóîóýóôôôôôôô!ô$ô0ôs0	*Š*Š8ŠBŠYŠ_ŠaŠgŠt 	
þëþëìììuLDSpŽpŽˆŽŠŽ”Ž½ŽËŽÍŽâŽíŽóŽ�v,RuMuM�M�M›M›M§M´MÁMÉMÎMÔMÖMÚMêMøMNNNN N N*N*NINWNbNdNjNlNnNpNpN{N}N…N‹N�N�N™N£N¦N¦N¦N¦N±N¹N½NÉNwx8HQHQ^Q{Q‚QŽQ�Q£Q§Q¼QÊQÐQÖQÙQãQx´5^À�À�ä�ï�÷�‚‚‚ ‚%‚@‚@‚N‚U‚[‚b‚j‚x‚~‚€‚�‚�‚—‚�‚¤‚¬‚º‚À‚‚‚Ò‚Ô‚Ô‚ä‚IƒyO{Q{Q•Q£Q¼QÇQÞQëQýQR"R)R:RERTR_R{R{RRŠR–R˜R˜R˜RžRžR¡R«R«RÆRÓRÓRØRèRûRS
-SS$S8S`SqS|S|SŽSŽSŽS¤S´SËSÔSÚSêSîSîSóSóSTz,07¼‚¼‚łςЂՂ{tý
-Ô
-ÔÔ'Ô5ÔAÔMÔYÔYÔkÔqÔqÔ~ÔŠÔ§ÔÃÔÃÔÃÔÃÔÉÔÉÔÙÔÛÔÛÔÕ|$}‚>ç>çBçOç…ç‘ç}<7Bm“m“�“�“�“¥“µ“¼“¾“Æ“~,pBpBtBˆBŒBŒB�B,
-PBPBTBhBlBlBpB€hN¤xGxGƒGŽGžG¦GÇGÖGçGðGHH,H?HOHWHxH�H˜H¢HÇHÌHÖHãHõHIIIDISI]IzI…I�I¨I³IÈIÑIëIúIJJJ1J>JDJ]JYJsJ~J†J‘J‘J‘JœJœJ­J­JÀJÒJåJîJîJKKKKK'K2K9KDKEKYK]KdK�DŸ¬‹ü‹ü�ü©ü¿üÙüäüäüõüýý3ý‚LP_TTTT T T?TbTiTxT‡TŒTŽT�T�Tƒl£º"¤"¤6¤B¤P¤_¤_¤‡¤ª¤µ¤¿¤Ȥؤä¤ñ¤
¥¥¥ ¥#¥+¥„¬GnÛÛÛÛãÛçÛóÛÜÜÜ)Ü2ÜNÜ`ÜuܞܪܵÜÔÜÔÜûÜýÜýÜýÜÝÝÝÝ0Ý0ÝBÝJÝeÝeÝeÝwÝ~Ý~Ý�Ý Ý…øQhp†p pºp¾pÐpÙpâpépòpûpq"q:qMqVq_qmq…q˜q¡qµq¹q¿qÈqÎqÙqÛqÞqæqûqrrr$r,r0rBrHrNrUr[rkrqrƒrŠrŒrÜr†<ÃÎ::+:;:@:f:Œ:²:¹:À:Å:Ñ:‡lý2¨2¨F¨O¨`¨ˆ¨«¨º¨ǨҨ﨩©©1©1©>©P©Z©b©ˆ ¥ÉH^H^`^b^p^|^•^¦^¯^Ä^É^ß^Û^ë^__"_$_$_;_=_=_M_O_O_____f_f_l_Î_‰HZhàZàZôZ	[['[.[3[7[=[D[G[X[Šàø,³#³#Æ#Í#ë#ë#	$	$'$'$E$Z$f$�$–$›$Â$ß$ü$%6%S%p%�%ª%Ç%ä%&&;&X&u&’&¯&Ì&é&'#'@']'z'”'®'È'â'ú'ú'ú'	(q*‹<
-jŠjŠ~Š�Š�Š Š¢ŠªŠ­ŠµŠŒ(îô&ë&ë0ë:ëdëië�$+a+aEaaaŽP¨¸»/»/¿/Î/Ó/ß/ë/÷/0000)0@0X0Z0�@
ã2ã2ñ2ø2þ233 3"3'343�X�¢j£j££‰£�£�£µ£Ø£ã£¤¤¤¤¤‘,ˆ�ÖÄÖÄêÄüÄÅÅÅ?Å’xž¸¦è¦è¯è¼èËèÜèçè
é"é(é.é5éHéjéjé~éˆé�é™é±éºéºéÏé“8¶À£C£C¿CÌCÑCçCêCÿC”(¿Å. . 6 @ V • žÂË8Ë8Ù8Þ8æ8î8û8
999.9C9Y9o9…9—9ž9ž9´9Á9Á9×9æ9æ9í9ô9û9::–8�§S$S$a$i$q$’$¨$±$·$—P:JÐpÐpèpôpüpqqqqq)q6q¦R¦U¦Z¦Z¦c¦c¦q¦u¦N§¬ ¢¦zVzVƒV�V•V­`UiII#I.I4I?IAIRI_IeIeIqI®0;C[K[KdKrKxK‰K‹K‹K�K¯(‹‘ÒUÒUæUñUúUýUV° \€KáKáSá^áná}á‰á­á­áÂáÊáÏáÏáÜáòáþáââ âMâYâlâtâyâyâ…â…â—âžâžâ°âµâ¼â±°.V3ß3ß;ßFßVßeßqߕߕßÂßçßìßìßà	ààà5à=àEàWà„à�à£à«à°àÅàÇàÇàÓàÓàåàìàìàþàáá²8LV|}|}Œ}�}‘}–}Ÿ}¢}§}¯}³ €„Î
-Î
-Ò
-á
-å
-´(KZKZTZ^ZiZqZvZµDXX.X@XGXKXNXYXaXuXxX€X¶h²Èþþ 7AUk�©©¿âüü


·X=Oîäîäøäúäåå8å?åLåLåcålåpåtå¸\r…¸†¸†ΆÕ†ä†ë†ô†ô†‡‡!‡5‡>‡D‡O‡O‡m‡¹PFV$5$5B5H5M5i5o5t5’5”5¢5¨5«5¹5ºlXo~ø~øŸø¢ø°ø°ø¼øÃøÈøËøÑøÔøÜøáøáøæøéøëøïøÿø»Œ~�Ë6Ë6Ô6ÿ6*7U7¤7±7³7Ë7Ë78'8)8A8A8Q8q8x8}8‡8´8»8½8Â8Å8¼ˆ;Ye‹e‹n‹x‹x‹ˆ‹•‹ž‹§‹°‹¹‹Í‹Í‹Ø‹Þ‹à‹ï‹÷‹ŒŒŒ8Œ8Œ:ŒJŒPŒUŒ½4ô{ô{|||*|-|3|;|¾d±ÆzÑzÑ�ќѡѯѱÑÂÑØÑçÑøÑþÑþÑÒ!Ò)Ò¿¨'Z˜Z˜l˜w˜|˜Š˜–˜¢˜«˜¶˜Á˜̘јߘí˜û˜™%™,™@™\™h™p™{™}™Ž™™™ ™®™½™¿™È™Ò™À W[áá-á?áIáÁD8E;ø;øOøYøkørøyø‰ø”ø¢ø¥ø­øÂ<)4”|”|«|®|³|¶|É|Ï|Ò|Ô|Þ|ô`É““ž¿ÆÕâïþ"8EXyˆ•žž·Úû.3Ma}ˆ¨±¹ÂÔæ.H]wƒ•š¬¾Öæò8CNhv‚ŽŽ“£±Êôû 'LLo~¨ªª¯ÊÑÜÜêÿÿ,,==@HÄh
- ÖôÖôäôÿôõõ#õ,õ5õ>õGõPõYõbõkõtõ}õ†õ�õ˜õ˜õ°õÅ0¾Æëhëh	i%iyÌhÖ,`A`AkAƒA”A£A­A¶AÇAßA÷ABB"BCBXBnBxB�B¢B¬B½BÏBæBæB
-C(C2C2CQCdClClC‹C›C¹CùCÌCÔC¿C D8D@D@DZDoD�D—DªD²D�DýDýDýD3E3EDEDEWEiEqE„EœE¯E·E·EÅEÎEÙEçEîEùEFFFFÍ4{„~ž~žŽž�ž˜ž¬ž³ž¸žÀžÎ<²½WW6W:WSWjWtW~W�W‘WÏ8§±šVšV¾VÂVÛVòVüVÿVWÐLú	VôVôrô~ô˜ô¡ô®ôÂôÈôÔôÑ`L`êšêš
-››!›&›4›?›N›T›e›i›m›s›v›}›ˆ›ˆ›”›Ò Ÿ£vvvvvÓ #G¶õ¶õËõÒõÜõêõêõòõö.ö0öOöfö…ö«öÊöÔöÞöìö÷÷%÷%÷>÷H÷a÷o÷q÷x÷÷¸÷Ô¼\‡kòkò‡òŠò“òœò¦ò¸ò»ò¾òÃòÖòÙòìòìòóóóóóóó*ó.óDóJóQóXó[ó`óuóxózózó�ó�ó�ó¡óÕ`¹ÍM�M�i�l�q�w�€�…�‘�™�¥�©�±�½�¿�¿�Â�Î�Ö ’–
-V
-VV V%V×\"‚X‚X’X—X¡X©X²XµX¼X¿XÇXÎXÖXØd\qÈ…È…à…é…††(†.†6†Y†g†‹†›†¡†ª†ª†¶†Ù\MMMM M%M.MCRCXCåH%
-Õ
-Õ Õ+Õ.Õ7ÕCÕKÕhÕwÕ}Õ€ÕŒÕæ$†ã†ãŠãŽã�ãçDÍÚ¤€¤€²€¾€Ã€Ã€Ð€Õ€Õ€Û€èhC™Í“Í“ç“é“”””.”I”I”I”I”I”U”a”h”v”z”…”•”Ÿ”¤”¤”­”½”Â”Â”Ó”Ø”Û”ç”ø”•
-•
-•
-•'•)•)•F•F•L•X•d•k•o••‚•Ž•Ÿ•°•²•²•ȕʕʕà•à•æ•ò•þ•–	–––(–9–K–M–M–M–R–––éxš´�–�–µ–Ä–Ê–Í–è–——
———————&—(—(—(—3—3—3—8—J—ê PtŽåŽå—å§åµåÙåîåðåæ#æ#æ8æ:æPæhæoæoæpæpæ~æ‰æ˜æšæ¦æ±æÁæÉæÜæëHŒš07ILLSmpuwì8ðú{`{`›`¦`´`¬`Ç`Ø`Ø`Ø`ä`í@ƒ�º¢º¢È¢ð¢£ £-£8£Z£b£h£î(17.¢.¢;¢P¢|¢�¢ï ÚÞžêžê¨ê»êÀêð@&2êÌêÌûÌÍ Í,Í@ÍMÍTÍWÍ_Íñ$§¬ääíõû€ò<ÇÒ*Ò*Ò@ÒVÒgÒkÒkÒpÒpÒxÒódµ
-hlhlŠlŽl–l§l§l½lÆlÖlÖlâlñlölmmm m/m:mAmEmImWmkmrm|m‚m…m“m™m©mÀmÂmÅmÅmÇmámímómümn)n-n9n@nGnMnPn^ntntntnyn…n�n¡n¬n¯n²n¸n»nÉnßnßnßnçnónoooo$o5o5oÞFÞOÞWÞ\Þ\ÞdÞiÞiÞqÞÞޅތތޢުޱ޸޿ÞÊÞÑÞçÞ÷ÞùÞ
ß5ßKßXߟ߇߽ßîßüßà#à&à*à/à8àAàxàiàdà‰à„àŸà·àÅàÏàÏàäàîàøà
áá-á1á8á:á;áBáBáRáú@ãïü€ü€
-��.�;�;�?�E�û0W_´}´}Â}Ñ}Ø}è}ì}ï}õ}ü,þ(þ()).)C)L)ý`y�ÛeÛe÷ef!f0f8f>R\cr‹‹œ«·ÌÎÑÓÓÓÛP­½€€€)€/€4€4€>€B€G€G€O€H¨¶»$»$Ó$Ö$ë$ô$%"%0%@%J%a%s%z%†%,ñø‹k‹k¥k¸kÃkÉk×k8<Fòˆòˆ‰‰(‰1‰4‰<‰<›¦„„˜¦±¼ÄÌÔ×ß	<juª¡ª¡¾¡Å¡Ï¡Ø¡í¡ù¡ÿ¡¢
-(gš‹š‹´‹æ‹
-Œ
ŒŒ%Œ6ŒGŒOŒ]Œ_ŒbŒeŒeŒrŒ„Œ‡ŒŒŒ–ŒœŒ­Œ°ŒµŒµŒÂŒÉŒÛŒÞŒãŒêŒüŒÿŒ���� �&�8�;�=�D�V�Y�[�a�a�a�a�f�f�m�t�{���„�Ž8mwÚÉÚÉäÉìÉýÉÊÊÊ Ê#ÊPÙéʓʓޓ瓔”6”9”S”]”j”j”l”t”
H¾ÌT€T€b€n€s€s€€€’€—€—€�€Hao666/6?6B6D6Q6U6X6b6l:Qss~�œ·ÉÕãìû
,>cl�ˆˆ�ž¢ Ÿ[è[è}è€è‡è�è¶èºèÂèÔèòèòèòèòèÿèé
éééé%é+é7é<éCéJéQéZélé~éƒé†é�é�éŸé¯é¶éÃéâéøéêê4êLê€ê€ê‡ê�ê–ê˜ê˜ê˜ê˜ê˜ê˜ê˜ê¬ê³ê¶êÆêÌêÔêÚêÜêÜêãêìêîêîêîêñêóêóêúêýêëëëë)ë)ë4ëHëOëUëjëmë�ë�ë’ë’ë’ë™ë¢ëªëªëªëµë½ëÀëkìxÇá˜%˜%´%·%¼%Ç%Ï%ì%÷%þ%&-&-&5&[&f&k&k&s&Ÿ&ª&¯&¯&³&Â&œ`ƒü}ü}~~)~/~2~2~9~?~S~X~[~`~i~i~i~m~w~†~Ž~£~®~Ä~È~Ê~ß~ã~ã~ã~í~Œp�d6d6‚6…6�6�6Ÿ6°6½6Â6È6å6è6ó6÷6÷6ü677%7)7)72757C7d)Þ Þ ¡¡(¡3¡6¡<¡D¡X¡h¡u¡w¡…¡’¡¢¡¶¡¸¡¸¡È¡�Yy`’`’j’p’w’}’–’»’Ï’Ï’Ô’Û’ó’“%“*“.“=“?“J“U“`“`“d“ UYvÔvÔŠÔ™Ô¡Ô€#Ù#ÙAÙPÙgÙyَٟٔٙ٢ٰټٿÙÂÙÎÙÓÙÜÙáÙèÙÚÚÚ@v‚
-¢
-¢¢;¢^¢k¢x¢ƒ¢¦¢®¢³¢Ìh—ïï!ï+ï9ï?ïIïIïVï\ï`ïcïeïlïsï}ï‰ï’ï¦ï¾ïÛïËïðïðïþï&ð(ð5ð<ðSð_ðgðiðƒðžðªðºðððì¥Ü…………Ÿ…§…¯…¾…Ï…Ñ…è…ú…ö…	†† †%†,†5†S†O†b†r†‰†š†�†¢†¨†È†Þ†ë†ò†ý†‡‡‡‡"‡%‡+‡:‡K‡P‡\‡g‡y‡L&5 G GªG±G¼GÈGÏGÏGÕGÜGìGîGõGúGþG,xVÄVÄjÄ|ĂĈĎÄ<0;ûû
  = Q W Y Y _ 0š¢ËËË!Ë*Ë3Ë<ËFËKË <£®RËRËaËfË�Ë˜ËœËœË¡Ë¡Ë§Ë 8NXjÎjÎz΂Ζ΢ΥΧίÎ!\õº±º±ȱͱÕ±ܱá±	²,²9²F²Q²n²v²}²}²€²†²",Ž•èèè6èCèHè[èaè#¼Òý{O{O§O­OÆOÞOåOñOýOPP.P.PMPWP_PfPnPxP€P”P¥P¶PËPÒPÛPáPéPéPíP
-Q$4#ÛðÛðäðéðòðûðñññ%<fÑfÑzÑ�њѦѮÑÊÑÚÑÝÑíÑ&4ÓÜ2222#2#20282=2E2',W^»@»@É@Ë@Ý@å@ê@ð@(D÷÷ ÷.÷6÷>÷L÷T÷\÷d÷l÷v÷{÷)^š+=LUcq}Ž£¸ÏÞþ
 .CZcr�«ÂÖãñý'9>JVdy‹¤­¸¿ÊÔÝá*(QWFøFøQøeøtøxø+0X`æ	æ	ï	ù	ÿ	
-
-
-
-,@	ëëÿ
%6GQ[ek-ˆ £E£EÃEÍEÐEØEèEèEüEFF&F(FGFLF]FkFvF‡F•FŸFŸFŸF¯F.PÙé.ó.óLó_ókó…ó–ó£ó·ó¾óÄóÓó/$mr�r�r”r¤r©r¹r0H¾Ì’W’W¨W­WÆWÑWÚWÜWèWëWîWøW1D&{Z{Z„Z’Z’Z”ZšZ¥Z¥Z´ZµZºZ2(¤ªvvv)v.v8v:v3D.;~í~íŒíšíší¢íÁíÛíÛíßíåí4d>S‹ñ‹ñ¤ñ¨ñ´ñ´ñÀñÀñÍñÍñÜñëñúñò!ò+ò:ò:òDò5ÔTŽÌŽÌ¬Ì°Ì³ÌÄÌ×ÌáÌçÌëÌîÌðÌöÌúÌýÌÍÍÍ1Í9Í<ÍMÍaÍhÍrÍv͉͌͘Í�Í£Í«Í¾ÍØÍàÍãÍôÍÎÎÎ"Î0ÎJÎWÎvÎv·ΟάααÎÂÎÖÎÝÎâÎâÎóÎÏÏ#Ï#Ï)Ï:ÏNÏmÏrÏrÏxωÏ�ϼÏÁÏÁÏÒÏæÏóÏøÏøÏ	ÐÐ*Ð/Ð/Ð@ÐTÐaÐcÐcÐcÐcÐcÐtЌЛÐ�Ð�ЮÐÂÐËÐËÐÑÐÑÐÚÐÚÐcÑ64ÃÌBÁBÁPÁUÁ`ÁcÁgÁmÁ7l 7³F³FÑFÔFÜFðFðFGG&G0G2GQGVGgGuG€G‘GŸG©G©G·G8ˆ7U»G»GáGåGèGøGHH$H-HBHKHRHWHaHjHtHwHzHH—H¥H¶HÐHÞHîHîHI9T3DbÍbÍs͔ͮͮ͢ÍÌÍÙÍêÍòÍòÍþÍ
-ÎÎÎ:XÉÛénén	ooo'oGoMoZoeolouoyo…o;X¶ÈInIninvn{n‡n§n­nºnÇnÎn×nÛnçn<$
¶™¶™Ì™š%š3š= X\VáVáZácáeá> äèæêæêðêëë? áå}�}�‘�£�«�@(*0ΡΡۡð¡¢)¢A0owÄÄ(Ä+Ä+Ä4ÄEÄHÄPÄBHª¸ÍŽÍŽèŽ����5�:�<�<�F�CD lRÅRÅ]ÅvÅ}Å�Å�ÅÀÅÀÅÍÅïÅÆ!ÆLÆ\ÆmÆ�ƈÆ�Æ�Æ­ÆÅÆÿÆÇÇ)Ç:ÇeÇ~NJǑǑǑǖǖǸǣÇÐÇêÇòÇÈ2ÈCÈnȀȇȌȌțȪȹȾȾÈÍÈáÈÉÉ'É6ÉMÉmÉmÉmɅɑɞɧɯÉÕÉDXºÌò¯ò¯°°°!°,°,°=°J°T°W°Z°`°n°E0 ¨kìkì�ì�ì¸ìºìºìÂìFD’ĒěģģİÄÂÄÊÄÏÄÛÄáÄãÄãÄèÄGL6š6šFšTšdšjš•š¹šÊš››!›HØ9}},}3}7};}F}W}e}y}…}ˆ}‘}œ}³}¸}Á}Ä}Î}Ö}Ù}Ü}ð}~~&~-~6~9~;~K~N~P~W~g~k~r~u~›~¢~´~I<ðû
‘
‘#‘%‘3‘P‘T‘d‘q‘J �…ÃâÃâÝâïâùâKH -þìþìííí)íQíVímíríríví~íL@:F5K5KEKRKYKnKuK|K…KMHâðÈ&È&â&ï&ÿ&''$'A'D'N'NP�P�P¡PÃPÃPÏPÚPÞPåPðPôPüPýPQOpbzº{º{Â{Î{ç{ò{||4|I|N|U|Z|Z|\|P ÍÑúWúWXXQt/kkv…”¢½à$5Xk|…’©ÄÙààõöúRh„š[.[.c.�.’.¢.©.Í.Þ.ñ.ø.	/!/#/#/6/G/_/a/a/c/S0$,‹‹“­µÍÙâìT@
êËêËóËûËÌÌ"Ì'Ì3Ì9Ì;Ì;Ì@ÌU4ÇÐsisi‘i­iÄiÐiÖiÜiãijV vz¥L¥L®LÀLÅLW<R]££µÅå
-X`SÿSÿ[ÿjÿvÿŠÿ›ÿ¦ÿ¯ÿ·ÿ¹ÿËÿÝÿäÿäÿöÿ÷ÿûÿYTDU.EP[‚¯ºáèïú
-"Z8$;3;3D3T3\3i3k3x3x3{3
\ No newline at end of file
+$+6;Oó<S3S3[3y3Š3š3«3º3Ô3ì3î3ð3ôLÁÐEE-E@EUE[EaEpE~E~E�EŒEõˆú[‰[‰q‰•‰§‰§‰¹‰Ä‰Ú‰Ú‰ê‰ì‰ì‰ì‰ý‰ŠŠŠŠ Š'Š-Š3Š3Š6ŠDŠö|"¸"¸4¸C¸F¸g¸Џš¸øÓ¸à¸¹ ¹,¹<¹B¹R¹R¹d¹g¹l¹l¹|¹‚¹…¹é¹÷82—2—@—K—V—y—�—’—�—ø?à�à�é�õ�‘‘#‘4‘E‘Z‘a‘t‘‡‘™‘¡‘‘Ö‘Ù‘á‘ñ‘’)’<’N’ƒ’…’–’¢’§’¯’Ñ’ä’ð’“ùH'5@�@�Z�m�†�›�¡�§�§�¯�±�Ý�ú8JT.Õ.Õ<ÕSÕ^Õ^ÕiÕqÕqÕwÕûDìùSSeq‡¡¬¬½ÍÏúül@W“““-“>“W“p“y“„“�“²“Ó͓ϓړå“î“÷“
+””.”8”8”:”ý$ôù;‰;‰D‰M‰S‰X‰þ 
+ºMºMÃMÎMßMÿDÌÙFëFëUëZëcëtëuëˆë‹ë‘ëh-ƒƒ+ƒ+«+­+¶+Ê+Í+Ò+Ö+õ+	,,,&,-,L,U,W,v,,,,„,º,Ä,Î,Ø,â,é,õ,----,-,-5-7-7-@-B-B-K-M-M-R-T-T-Y-Y-Y-]-x-Ž-™-°-¹-¾-È-Ô-à-ì-ÿ-.(.,.7.M.]..œ.º.º.º.º.º.Ä.Í.Ô.T/LÈ×ó÷ó÷øøø)ø+ø<ø@øSøYø†ø4ÆäÆäÎäÖäÞäæäîäöäúäþä,žäžä¦ä®ä¶ä¾äÂäÆäx7		*	/	9	@	S	l	l	{	‘	š	©	°	°	³	½	Ó	Ú	Ü	ß	á	á	í	|
+Ðkö¨ö¨©©0©9©D©O©Q©d©r©}©ˆ©œ©§©ª©°©´©·©½©Á©Ä©Ç©Ú©ï©÷©ú©ª"ª%ª+ª.ªAªVª^ªaªyª‰ªŽªŽª–ª–ª¹ª¹ª¹ª½ª¿ª¿ªÃªÅªÅªÉªËªËªÏªÏªÏªÒªÔªÔª×ªÜªâªåªéªëªñªôª« «%«+«.«3«F«a«c«y«y«y«~«~«€«€«…«ˆ«®«®«®«Æ«Ì«ã«ò«¬¬(¬M¬R¬R¬j¬ˆ¬�¬�¬¥¬Ã¬Å¬Å¬Ý¬ù¬û¬û¬­/­/­M­Y­^­^­v­�­’­’­ª­Æ­Ë­Ë­Ï­ç­®	®®®®'®E®I®I®g®l®l®„®›®¢®§®§®¿®Ö®Ý®ë®û® ¯&¯(¯(¯6¯>¯g¯i¯i¯�¯¢¯Á¯Æ¯Æ¯Þ¯ó¯°	°-°L°m°p°u°u°�°¤°®°³°Ä°Ä°Ê°Õ°ê°ï°ù°	±	±?±M±S±j±r±{±{±‡±‹±‹±”±£±¬±¬±µ±¿±Û±ù±²%²+²@²H²T²^²^²v²x²ƒ²›²�²½²½²Â²Â²ø²³³³³ ³ ³(³7³@³@³I³O³k³v³Ž³�³›³³³µ³Ñ³Ñ³Ñ³á³´´´´3´8´8´P´g´q´v´Œ´Œ´£´£´¯´³´¹´Â´Ñ´Ú´Ú´ã´î´µµ$µ/µJµLµLµUµmµxµŽµ›µ£µÄµÆµÎµèµëµôµùµ¶$¶$¶?¶I¶T¶p¶ƒ¶š¶¢¶¬¶¬¶µ¶¹¶Ð¶····'·0·4·K·ƒ·ƒ·…·…·¡·«·³·³·¼·À·×·¸ ¸&¸=¸E¸R¸W¸W¸`¸d¸{¸³¸Ä¸Í¸Ò¸Ò¸Ý¸á¸ù¸¹¹ ¹5¹M¹M¹w¹�¹�¹ž¹¢¹µ¹½¹Ä¹Ï¹Ô¹Û¹Û¹à¹º'ºEº\ºfºpºpº€ºªºººÌºØºÜºöº»»»»»»»!»!»,»0»H»_»i»n»„»œ»œ»Æ»Ð»õ»ú»ú»ú»¼	¼!¼8¼B¼G¼]¼]¼u¼u¼§¼±¼Î¼Õ¼à¼å¼
+½½0½B½J½L½e½s½�½ ½ ½Í½Ï½ù½û½¾"¾,¾6¾=¾Z¾c¾c¾�¾¨¾«¾Æ¾Æ¾Æ¾Ë¾Ð¾¿¿5¿L¿Q¿[¿e¿’¿¦¿©¿À¿À¿À¿À¿Ê¿à¿÷¿ÀÀÀÀ5À?ÀOÀOÀkÀÀ‚À”ÀžÀ¤À»ÀÃÀÌÀÑÀÑÀÑÀíÀÁÁÁ(Á-Á-ÁEÁ\ÁfÁvÁvÁ’Á¦Á©Á»ÁÅÁËÁâÁêÁóÁøÁøÁøÁÂ(Â+Â=ÂOÂTÂTÂTÂlƒÂ�Â�Â�ÂÂÂÓÂÝÂãÂúÂÃÃÃÃÃ5ÃFÃXÃ]Ã]ÃrÃrÃrÎÎèïÃìÄ@!ê—ê—þ—˜˜˜>˜I˜M˜[˜^˜f˜0EMòÏòÏûÏÐÐ Ð)Ð6Ð;Ð|�œÚ®Ú®÷®ù®¯¯¯(¯P¯s¯�¯‘¯´¯œ¯ί°°°°°)°	8Ž˜ZÒZÒiÒw҈ҌҌґґҗÒ
+¬°×ÓîÓîãîùîï
ïï%ï,ï0ï8ïHïVïeïkïsïï…ï…ïŒï�ï�ï’ïùð4GP‹‹.‹D‹O‹T‹b‹o‹x‹‰‹p+CÃÃãôû))7?MUU€«Öã
D¦³2{2{>{U{`{f{l{r{ˆ{�{”{š{„Sp33JTdšµÐãôù3OT_iv€Ž” §³î,-4ÓÓ×ñ)Z@
‹ø‹ø�ø¨øµø½øÅøÍøÕøÝøåøëø˜£ÅÓ_Ó_ë_ú_````)`4`7`<`F`T`[`\`h`n`t`w`€`�`�`�`�`›`X7‰¦È¦ÈÄÈÊÈÑÈáÈèÈðÈöÈýÈÉ!É%É*É0É>ÉAÉFÉIÉIÉYÉjÉlÉ~É€É�ɒəɛɨɪɪɺÉËÉÎÉÐÉÜÉÞÉþÉÊ
+ÊÊÊ Ê&Ê)Ê)Ê9ÊJÊLÊwʙʛʢʤʰʰÊÄÊÈÊÈÊÞÊ@Š–kWkW�W£W©W®WÁWÎWÔW×WßW0‹ò‹ò”ò™ò¢ò¨ò¨ò­ò,;Bê¡ê¡ù¡¢¢¢!¢'¢8ˆ’®è®è¼èÈèóèéé	ééééä6¾Æ¾ÆÜÆßÆâÆöÆþÆÇÇÇÇAÇAÇDÇTÇVÇVÇYÇ[Ç[Ç^ÇuNJǥǯǹÇÁÇÁÇÁÇÃÇÃÇÈÇçÇíÇüÇÈ È0È2ÈDÈTÈYÈYÈeÈeÈrÈuÈuÈ È8òüzÕzÕ‰ÕŸÕ®ÕÌÕÐÕÖÕØÕØÕÞÕô…¾ÄŸÄŸÖŸÙŸãŸðŸôŸúŸúŸ      # ) 0 6 = C J P W ] d j w } „ � • • ž Ÿ ° Ã Å Õ Ü ç ò ý ¡¡¡¡(¡LWf�r�r™r©r©rÇrÍrÝrãrérùrûrûrûr"shÝó{ˆ{ˆ�ˆŸˆ¤ˆ´ˆ¼ˆ¼ˆÊˆÔˆãˆëˆ÷ˆ‰‰‰#‰.‰1‰9‰D<I¾Ô¾ÔÒÔîÔüÔÕÕÕÕ Õ Õ'ÕP„”ZvZvivrv|v�v“v“v“v•v§v®vßvûvüvw0Ž–ÃgÃgÙgìgþghhh <alúxúxyy!y%y1y6y:y@y \ÉÜ..2EXkvŠ›½ßú0Kf�œX!TctâÐâÐðÐÑÑÑ*Ñ0Ñ2Ñ=ÑUÑaÑyÑÑÑÑÑ…Ñ"X£µ¹n¹nÙnænën÷noo*o7o>oGoKoWo#X†˜ÓäÓäîäöäååå&å&å+å<åEåPåPå\åiå$,’™NÆNÆbÆtÆyÆŠÆ·Æ%ä6s’s’�’�’“’™’­’´’·’Ò’Ü’á’è’í’í’þ’ð’“#“/“C“L“T“e“e“e“n“u“ƒ“…“�“–“µ“œ͓ߓè“ù“””””””"”e”&	H¸g¸gØgçgógþg	hh0h;hGhXh]hihnhrh{h”h h h»hÍhàhîhi	i-i5i5iAiEiIiaioišiui©i´iËiÏiÖiÛiÛiðiöijjj&j,j2j4jDj' Hl³Ø³ØÇØרëØøØüØÙÙÙÙ'Ù/ÙyÙTÙ9ى٘٪ٱÙÀÙÒÙÙÙåÙùÙÚ#ÚûÚ(LÂÆÂÆÑÆÙÆÙÆæÆøÆÇÇÇÇÇ Ç Ç%Ç)<|‡*~*~8~Q~\~c~�~k~›~ç~*˜Õ÷ÒxÒxüx
y y,y�H�L�P�]�n�p�„���‘� �³�¹�À�Ï�Ò�Ý�‘‘*‘2‘<‘J‘[‘n‘{‘Œ‘Ÿ‘¥‘ì‘þ‘’"’1’<’R’`’`’l’�’œ’§’®’´’»’Ä’Ç’î’.4YbŠÐŠÐ“ЛЧиÐÀÐÈÐÛÐàÐ/ �´H7H7b7h7h7w7ƒ7Š7�7�7š7£7£7©7­7°7º7Å7Å7Ô7Ý7Ý7è7í7ð7ó7ö7ù78888880 ÚÞ–ë–ëšë§ë©ë1¤“ø~~~"~*~;~?~S~e~s~…~Š~�~•~¬~µ~Í~Ý~Ý~ê~ø~&&*08BBFJYim’’¡£©±ÃØâñöö€€€€€(€V€Z€]€a€h€s€‰€ž€­€¼€Ç€É€Ï€Ü€â€é€ö€ü€ü€��!�)�1�:�A�J�¹�2,%l‹4‹4“4—4ž4¥4°4¸4¿4¿4Î4Ó4ß4ë4û45$5)51585I5c5w5~5�5�5³5¸5Ê5Ï5ò5ö5ÿ566/666G6H6L6n66”6Ÿ6¬6¬6³6Õ6æ6ì6ö63,[‹[‹d‹‹…‹…‹Š‹44ÏØã;ã;ç;ì;ø;<<<"<$<5(êðSlSlmll‹l‘l™l6»ü
+§
+§§ §%§+§S§v§~§†§‘§–§¬§¹§§ǧö§ý§¨¨¨ ¨&¨L¨L¨U¨l¨{¨œ¨¤¨·¨Ǩרç¨ö¨©©&©@©E©M©M©R©`©o©�©›©ª©º©Ê©Ú©ô©ô©ô©ªª7”ÍîJÃJÃbÃoÃyÅÌÕèÃÂÃÈÃÐÃíÃóÃóÃÄ	ÄÄ,Ä/Ä8Ä=Ä[Ä^Ä^Ä^ÄaÄnÄ~Ä�Ä‘Ä88‰ãVãVçVøVW)W:WCWHWdW9p	!IrIr]rjror{r�rˆr¤rÚrãrìrør:ƒÂÒ¾Ò¾ñ¾¿¿¿!¿(¿(¿1¿C¿L¿m¿r¿‹¿’¿’¿¨¿´¿´¿Û¿Þ¿ý¿À;ÀGÀ^ÀuÀwÀˆÀŸÀ¶ÀÕÀôÀÁÁ.Á3ÁDÁ[ÁrÁrÁzÁˆÁ™Á°ÁÇÁØÁïÁ Â6Â?ÂÃ;8u––¤³½ÎÖØØÞ<80:j¡j¡s¡›¡¾¡Ê¡סá¡æ¡=,—žãWãWìWõWXXX>0	(…(…6…@…T…Z…\…b…?,8?î	î	
+
+%
+3
+9
+?
+@,˜g˜g¡g¬g®g®g³gA\m€ByBydyhyty…y‘yšy¹yÅyÎyÔyØyæyB€HYHYXY_YrY~Y¥Y¯Y¹YÁYÉYÑYÝYïYZZ'Z0Z>ZDZJZMZTZ\ZCXŸñXX X(X1X7XCXOXWX]XcXkXyX„XŒX¥X·XÂXËXËXÐXÕXãXêXïXïXõXüXY
YYYY&Y5Y9YFYSYXYbYbYkYrY~Y‰Y¥Y¥Y¥Y­Y´Y»YÂYÉYÐY×YÞYåYìYòYûYZZ%ZAZPZSZYZD|KfNïNïmï{ï‹ï—ï�ï¦ï­ï´ï¹ïÅïÉïÓïÓïÚïÝïãïãïíïûïððððE,KKcn”¸ÀFX]sbsb{b†b˜bžb¦b°bÓbÓbåbòbccc)cdcrcªc¯c¯cÁcÎcâcïcôcd8d?dPdVd[d[dmdzdŽd›d d¯dãdêdûdeeeeee-e3eFejewe‡eŒe’eŸeªe°e»e»eÁeÊeÕeåeêe	ff#f(f(f,fEfGàÊþ##+KZdm~Ž¡®Áßèõ

$J]|��¯¼ñÝ%%3>LS^llq}HLRaŒžŒž™ž¡ž¤ž²žµž¼žÀžÃžÇžÕžÜžážI8GQDžDžQžYž\žjžnž|ž€ž…žJ0îî÷ü				KTØéûðûðññ+ñ3ñdñÔñL(LRûû#,.Mœ'JË[Ë[å[\\ \,\8\@\K\V\c\r\{\‚\†\†\Œ\’\ª\³\¹\Â\Ç\Ç\Ç\Ë\Õ\N8�‹ccl|‰‰�Ÿ¦¦«O¼W‚¨e¨eÎeÑeßeúefff f#f-f:fZfZfxfzfzf˜fšfšfªf¬f¬f¼f¼fàfçfðfúfþfgg>gGgMgTg–gP<#j j x € ˆ ˜ ¤ ® Ý ß å Q$ûZûZ[
[[[RZê¹ê¹þ¹ºººº2º>ºeº„º£º¯ºúǺͺÛºߺåºóºóºóº»1»E»]»a»g»u»y»»‘»‘»‘»‘»”»™»ž»¤»¸»¼»»Í»Ñ»×»â»â»â»ç»í»¼¼¼¼¼ ¼)¼)¼)¼^¼SDs€óó÷ 07<AHZZ\T¬ÍôJ²J²l²q²z²z²†²•²¢²¦²°²ƲƲÖ²â²ç²ç²³³³³*³*³*³2³@³N³X³[³`³m³z³z³Œ³U�-MðGðGH H.H7H7HNH_HtHyHŒH™HžH¢H³HÝHåHéHîHöHIIINIVH®í®í·íÌíÕíáíãíåíôíôíîîî
+îW¸9£ÀSÀSáSäSçST(T/T:THTRThTpTvTƒT“T§T¬T»TÎTîT÷TîT	UUUU&U(U1U(UCUEUEUUUUUcUtUyU¥UÌUÌUÒUÕUúUVVV%V9V>VMV`VƒV�V¢VÂVÏVÂVÝVâVïVâVýVWWWW"W"W2W2WEWVW[W‡W‰W®W®W´W·WÅWÊWÝWèW÷W÷WX|XX0	kåkåyåƒå‰å’å™å�å£åY(�•2z2z>zDzJzcznzZ¼w¢S^S^}^€^œ^®^µ^Â^Î^Ý^á^å^í^÷^__(_(_/_5_<_I_T_c_i_k_m_s_y_‘_š_š_¡_¼_¿_Ñ_[¬ FóÛóÛûÛÿÛÜÜ&Ü5ÜAÜJÜ_܈ܔܜܺÜÅÜäÜäÜÝ
Ý
Ý
Ý&Ý(Ý(Ý(Ý@Ý@ÝRÝZÝuÝuÝu݇ݎݎݠݦݰÝ\D�œÐ0Ð0â0î011)1)1:1J1L1v1]¼Bµµ(µ0µ:µFµTµdµŒµ¯µ¾µéµíµõµÿµ'¶J¶X¶h¶s¶ž¶®¶³¶»¶æ¶ê¶ü¶···&·&·0·:·^@nzsBsB{BœB B³B¼BÀBÂB_ *n8,8,C,G,O,p,},Ž,™,¢,¸,Ë,à,ô,--(-;-C-d-y-„-Ž-³-¸-Â-Ô-í-ü-	...9.Q.U.Z.Z.k.k.~.�.£.¹.».».Î.Ö.Ö.Ö.è.è.ñ./
+/
+//"/H/`@1=#ó#ó1ó6ó9óKóQóTóVó\óaè¸î°‹°‹Ê‹â‹î‹þ‹ŒŒŒ Œ#Œ4Œ4Œ4Œ;ŒHŒKŒPŒMŒªŒÁŒÄŒÆŒÝŒàŒâŒêŒúŒúŒ�� �0�>�G�N�S�S�S�Y�m�bD	b´b´v´ž´Á´δÛ´æ´µ
+µµc 	
æìæìðìííd4zƒ&&4=DMe8êôR–R–`–f–o–u–{–„–‡–�–ftRk¸t¸tÝtßtøtuuu5u7u=u7uTuVuVufuhuhuxuxu~u¼ug0SKSK\KnK|K€K„K„K‰Kh@ÎÎ)Î1ÎEÎOÎWÎ_ÎdÎjÎlÎlÎrÎiØ"Tj˜j˜€˜�˜š˜¬˜ØØÔ˜ì˜ù˜™™#™3™U™W™t™�™�™�™’™¾™Å™ΙÔ™Û™á™æ™ì™ð™÷™šš2šjüi¤0]0]O]Q]`]l]x]�]’]›]¢]°]¾]Ô]Ô]×]Ü]æ]æ]ð]ó]	^!^^/^4^R^k^t^w^z^^£^¥^Á^»^í^í^___"_%_*_:_A_D_`k”	*ãã-U}‹ÎTVdr€€š´Ñãó!3CXqx›·ÃldV¨a¨a¼a¾aÎaÜaæa
+b.b6bHbVbabrbwb�b•bšb³bÓbÓbôböböbccc:c+C+W+o+†+�+¸+Î+à+à+,",%,7,o<5@â}â}ú}	~~~ ~5~8~=~I~p0	 B B$B8B8BLBPBTBq¼
+5£å£å®å²åÖåáåðåüåæ'æ?æOæoæoæ�æ’æ’æ³æµæµæÖæØæØæäæäæìæìæøæçç$ç$ç6ç=ç=çOç\çhçlç‹çr\QdŠ‹Š‹š‹œ‹§‹¬‹¿‹È‹Í‹Ò‹â‹ï‹ï‹õ‹ŒsŒoŽH/H/S/[/f/q/|/…/›/¯/¸/Ì/ó/	0#0+0A0I0g0s0~0–0¡0¨0³0¸0Ë0txˆ¢{õ{õ—õœõŸõ¬õ²õµõ½õÆõÕõÝõÝõèõèõðõòõòõùõüõöu0	ŒŒŒŒ1Œ7Œ9Œ?Œv ííí í!íwLDSH�H�`�b�l�•�£�¥�º�Å�Ë�à�x0SâMâMúMüMNNN!N.N6N;NANCNGNWNeNuN€N…N…NŒNŒN—N—N¶NÄNÏNÑN×NÙNÛNÝNÝNèNêNòNøNúNúNOOOOOOOO&O*O6Oyx8 S S6SSSZSfSuS{SS”S¢S¨S®S±S»Sz´5^˜ƒ˜ƒ¼ƒǃσÞƒãƒèƒøƒýƒ„„&„-„3„:„B„P„V„X„h„h„o„u„|„„„’„˜„š„š„ª„¬„¬„¼„!…{O‹R‹R¥R³RÌR×RîRûR
S"S2S9SJSUSdSoS‹S‹S�SšS¦S¨S¨S¨S®S®S±S»S»SÖSãSãSèSøSTTT$T4THTpT�TŒTŒTžTžTžT´TÄTÛTäTêTúTþTþTUUU|,07ºƒºƒÃƒÍƒÎƒÓƒ}týâÕâÕóÕÿÕ
ÖÖ%Ö1Ö1ÖCÖIÖIÖVÖbÖÖ›Ö›Ö›Ö›Ö¡Ö¡Ö±Ö³Ö³ÖÜÖ~$‚‡VèVèZègè�è©è<7Bk”k”””›”£”³”º”¼”Ä”€,xBxB|B�B”B”B˜B�,
+XBXB\BpBtBtBxB‚hN¤PIPI[IfIvI~IŸI®I¿IÈIÜIôIJJ'J/JPJeJpJzJŸJ¤J®J»JÍJæJõJõJK+K5KRK]KeK€K‹K K©KÃKÒKÞKçKìK	LLL5L1LKLVL^LiLiLiLtLtL…L…L˜LªL½LÆLÆLÙLéLñLñLñLÿL
+MMMM1M5Ma>aDa¦a‹HZh¸\¸\Ì\á\ë\ÿ\]]]]] ]0]Œàø,Ã$Ã$Ö$Ý$û$û$%%7%7%U%j%v% %¦%«%Ò%ï%&)&F&c&€&�&º&×&ô&'.'K'h'…'¢'¿'Ü'ù'(3(P(m(Š(¤(¾(Ø(ò(
+)
+)
+))�+�<
+BŒBŒVŒeŒuŒxŒzŒ‚Œ…Œ�ŒŽ(óù6ì6ì@ìJìtìyì�$;b;bUbqb�P¨¸Ë0Ë0Ï0Þ0ã0ï0û0111#1(191P1h1j1‘@
ó3ó34444)4042474D4’X�¢B¥B¥W¥a¥e¥e¥�¥°¥»¥Ù¥ê¥ì¥ì¥ô¥“,Š‘ÞÅÞÅòÅÆ	ÆÆ ÆGÆ”x£½¶é¶é¿éÌéÛéìé÷éê2ê8ê>êEêXêzêzêŽê˜ê ê©êÁêÊêÊêßê•8¶À³D³DÏDÜDáD÷DúDE–(¿Å,¡,¡4¡>¡T¡— žÂÛ9Û9é9î9ö9þ9::':,:>:S:i::•:§:®:®:Ä:Ñ:Ñ:ç:ö:ö:ý:;;;;˜8�§+&+&9&A&I&j&€&‰&�&™P:J¨q¨qÀqÌqÔqÛqäqêqíqíqrrrr#ršð8p”£”£®£¾£Å£Í£Ô£ð£¤¤¤¤#¤%¤.¤7¤9¤9¤B¤Q¤S¤S¤\¤e¤j¤j¤s¤|¤�¤�¤Š¤“¤˜¤˜¤˜¤¡¤ª¤¯¤¯¤»¤Ä¤É¤à¤ä¤ä¤þ¤¥¥¥¥„¥›XÓåRÔRÔZÔfÔqԀԌԕÔ�Ô¬ÔÈÔùÔùÔÕÕÕ$Õ%Õ)ÕœÈÝP2P2l2r2|222ˆ2“2�2§2³2µ2»2Â2Å2È2Ð2Ü2â2ç2í2ð2ò2ý23	3333#3)32323232383@3C3S3�,™ šÒšÒ£Ò¯Ò·Ò¼ÒÁÒž8ak,6@KSUU[Ÿx^xKfKfafhfvfvf‚f�f¿f¿fÂfÄfÄfÉfÉfËfËfËfÍfÍfÍfÖfÙfÜféf ,ÛâÚ�Ú�ã�í�î�ó�¡$(-ª›ª›¸›À›Ò›Ø›¢<@Krœrœˆœ’œ–œ›œ§œ¬œ°œ´œ¾œ£ úþ~ì~ì‚ì¢ì¤ì¤t.:«:«J«V«_«p«˜«»«Ê«׫ë«â«¬ ¬&¬(¬*¬0¬2¬?¬B¬J¬¥h^tŠ­Š­¬­²­»­»­Ä­Ó­à­®®"®$®6®6®6®G®T®T®b®¦@y…`•`•d•e•t•}•ƒ•‡•‹•¡•¦•¨•§<ðû3š3šHš7šWšš¨€�¹*°*°H°Y°a°t°†°‘°œ°²°¾°Ô°ê°ò°ò°A±F±F±i±i±€± ±§±ɱ©˜ìû<û<=== = =.=3=L=U=`=b=c=c=o=z=|=‹=�=™=£=±=¶=Å=Ì=Î=Î=Î=Ô=ª€›þÚþÚÛ
+Û!Û!Û8ÛLÛjÛlÛ„Û—Û¢Û³ÛÊÛÊÛáÛõÛÜÜ-Ü@Ü@ÜCܜܫ8—¡˜V˜V®V·VÁVÌVÕVØVâV¬4<Eà4à4ô4555 5 5'5­hqÇ„¥„¥¢¥²¥¹¥Á¥È¥ä¥è¥¦¦)¦)¦)¦2¦4¦4¦=¦?¦?¦H¦J¦J¦S¦U¦U¦^¦`¦`¦i¦k¦k¦t¦v¦v¦¦�¦�¦Š¦Š¦�¦’¦’¦’¦•¦˜¦¡¦»¦Ë¦â¦õ¦÷¦ú¦ü¦ÿ¦
+§§§§§§§&§3§8§8§A§U§X§]§]§f§f§t§x§S¨® ¢¦èVèVñVþVW¯`UiJJ3J>JDJOJQJbJoJuJuJ�J°0;CkLkLtL‚LˆL™L›L›L L±(‹‘@V@VTV_VhVkVsV² \€#ã#ã+ã6ãFãUãaã…ã…ãšã¢ã§ã§ã´ãÊãÖãÞãæãøã%ä1äDäLäQäQä]ä]äoäväväˆä�ä”ä³°.Váááá.á=áIámámášá¿áÄáÄáÙáááæáæá
âââ/â\âhâ{âƒâˆâ�âŸâŸâ«â«â½âÄâÄâÖâÛâçâ´8LVz~z~Š~�~�~”~�~ ~¥~­~µ €„ÞÞâñõ¶([[[[d[n[y[�[†[·DˆXˆXœX®XµX¹X¼XÇXÏXãXæXîX¸h²È

0
G
Q
e
{
Ÿ
¹
¹
Ï
ò
  +¹X=Oöåöåæææ æ@æGæTæTækætæxæ|æº\r…�ˆ�ˆ¦ˆ­ˆ¼ˆÈ̈̈æˆñˆùˆ
‰‰‰'‰'‰E‰»PFV(5(5F5L5Q5m5s5x5–5˜5¦5¬5¯5½5¼lXoŽùŽù¯ù²ùÀùÀùÌùÓùØùÛùáùäùìùñùñùöùùùûùÿùú½Œ~�Û7Û7ä78:8e8´8Á8Ã8Û8Û8*97999Q9Q9a9�9ˆ9�9—9Ä9Ë9Í9Ò9Õ9¾ˆ;YcŒcŒlŒvŒvŒ†Œ“ŒœŒ¥Œ®Œ·ŒËŒËŒÖŒÜŒÞŒíŒõŒ�
��6�6�8�H�N�S�¿4ò|ò|}}}(}+}1}9}Àd±ÆRÓRÓhÓtÓyÓ‡Ó‰ÓšÓ°Ó¿ÓÐÓÖÓÖÓñÓùÓÔÁ¨'2š2šDšOšTšbšnšzšƒšŽš™š¤š©š·šÅšÓšòšýš››4›@›H›S›U›f›q›x›†›•›—› ›ª›Â W[ëâëâãã!ãÃD8Eúú'ú1úCúJúQúaúlúzú}ú…úÄ<)4’}’}©}¬}±}´}Ç}Í}Ð}Ò}Ü}Å´`Ékkv—ž­ºÇÖêú0Q`mvv�²Ó%9U`€‰‘š¬¾Þó 5O[mr„–®¾ÊÝÝ&@NZffk{‰¢ÌÓØøÿ$$GV€‚‚‡¢©´´Â××èï Æh
+ æõæõôõöö'ö3ö<öEöNöWö`öiörö{ö„ö�ö–öŸö¨ö¨öÀöÇ0¾Æûiûij5jLjXj^jdjƒjÈX’¤€0€0Ž0—0£0©0¬0±0·0º0¿0¿0Ì0Ð0Ó0Ó0Ù0ÉLþ
RR*R8R8RBRLRiRtR}RƒR„RŠRÊÜ�´@l@lflnlzl�l�l¥l­l½lÌlÌlÑlïlòl÷lmm m*m*m?m?mUmcmimqm|mšm¤m§mªm¯m½mÓmÝmàmãmëmùmnnnn#n'n9nËôÈ€3€3ˆ3Œ3”3¥3´3¾3Ê344)4)4-4<4F4Y4a4e4t4‘4–4–4¬4´4Ç4Ö4û4555(575\5i5t5Š5 5»5Â5Ô5Ô5â5â5ã5õ5õ5666Ì8AKJ~J~Z~]~_~d~g~j~o~w~ÍD�Žêyêyîyôyúyzzzzzz$z*z,zÎhÖ,8C8CCC[ClC{C…CŽCŸC·CÏCßCòCúCD0DFDPDuDzD„D•D§D¾D¾DâDE
+E
+E)E÷@÷_÷v÷•÷»÷Ú÷ä÷î÷ü÷ø,ø5ø5øNøXøqøø�øˆø�øÈøÖ¼\‡CôCô_ôbôkôtô~ô�ô“ô–ô›ô®ô±ôÄôÄôØôÚôÚôîôîôñôôôõõõ"õ)õ0õ3õ8õMõPõRõRõgõgõgõyõ×`¹ÍK�K�g�j�o�u�~�ƒ���—�£�§�¯�»�½�½�À�Ì�Ø ’–xVxV�VŽV“VÙ\"ðXðXYYYY Y#Y*Y-Y5YR>RHRaRoRxRƒRŽR‘R˜R�R¥RªR·R¼RÎRÕRûRþRSSSS"S0S÷4 (b}b}p}r}w}€}ƒ}ˆ}Ž}øV€O€O›O¡OºOÆOØOâOòOõOP/P2P6PaPdPoPzPŒP”P§PµPÄPÖPßPìPûPQQ)Q)Q5Q@Q@QSQVQfQsQ|QŒQŽQ¡Q«Q»QÄQÔQàQàQàQæQíQòQøQúQ Rù$N“MMMM*M/MCM`MyM–MžM½MÐMìM:N�>�E�L�S�Y�\�é�
8mw²Ë²Ë¼ËÄËÕËêËòËõË÷ËûËPÙ颕¢•¶•¿•ؕ镖–+–5–B–B–D–L–H¾ÌR�R�`�l�q�q�~���•�•�›�Hao66"636C6F6H6U6Y6\6f6l:QKKVet�¡­»ÄÓå;DY``uvz Ÿ3ê3êUêXê_êuêŽê’êšê¬êÊêÊêÊêÊê×êÝêåêñêöêöêýêëëëë"ë)ë2ëDëVë[ë^ëeëeëwë‡ëŽë›ëºëÐëéëíëì$ìXìXì_ìhìnìpìpìpìpìpìpìpì„ì‹ìŽìžì¤ì¬ì²ì´ì´ì»ìÄìÆìÆìÆìÉìËìËìÒìÕìÛìÛìÞìôìííí í'í-íBíEíeíeíjíjíjíqízí‚í‚í‚í�í•í˜íCîxÇáp'p'Œ'�'”'Ÿ'§'Ä'Ï'Ö'Ý'((
(3(>(C(C(K(w(‚(‡(‡(‹(š(œ`ƒú~ú~'-007=QVY^gggku„Œ¡¬ÂÆÈÝáááëŒp�h6h6†6‰6¡6¡6£6´6Á6Æ6Ì6é6ì6÷6û6û6777)7-7-76797G7d)ܡܡ¢¢&¢1¢4¢:¢B¢V¢f¢s¢u¢ƒ¢�¢ ¢´¢¶¢¶¢Æ¢�Xx@”@”J”P”W”]”v”›”¯”¯”Á”È”à”ù”•$•(•4•6•A•L•W•W•[• UY~Õ~Õ’Õ¡Õ©Õ€ûÚûÚÛ(Û?ÛQÛfÛlÛqÛwÛzÛˆÛ”Û—ÛšÛ¦Û«Û´Û¹ÛÀÛÙÛÙÛïÛ@v‚â£â£ë£¤6¤C¤P¤[¤~¤†¤‹¤Ìh—ðð1ð;ðIðOðYðYðfðlðpðsðuð|ðƒð�ð™ð¢ð¶ðÎðëðÛðñññ6ñ8ñEñLñcñoñwñyñ“ñ®ñºñÊñòì¥Üƒ†ƒ†�†¥†­†¼†Í†Ï†æ†ø†ô†‡‡‡#‡*‡3‡Q‡M‡`‡p‡‡‡˜‡›‡ ‡¦‡Æ‡Ü‡é‡ð‡û‡ÿ‡ˆˆˆ ˆ#ˆ)ˆ8ˆIˆNˆZˆeˆwˆL&5¨G¨G²G¹GÄGÐG×G×GÝGäGôGöGýGHH,z�^Å^ÅrńŊÅ�Å–Å <0;Ó Ó å õ !)!/!1!1!7! 0š¢êÌêÌóÌùÌÍÍÍÍ#Í!<£®*Í*Í9Í>ÍYÍpÍtÍtÍyÍyÍÍ"8NXBÐBÐRÐZÐnÐzÐ}ÐЇÐ#\õ’³’³ ³¥³­³´³¹³á³´´´)´F´N´U´U´X´^´$,“šéé,éFéSéXékéqé%¼Òý‹P‹P·P½PÖPîPõPQ
QQ Q>Q>Q]QgQoQvQ~QˆQ�Q¤QµQÆQÛQâQëQñQùQùQýQR&4#³ò³ò¼òÁòÊòÓòÙòÙòÞò'<nÒnÒ‚Ò•Ò¢Ò®Ò¶ÒÒÒâÒåÒõÒ(4ÓÜ2222'2'242<2A2I2),W^ËAËAÙAÛAíAõAúAB*Dëøëøøøùùù$ù,ù4ù<ùDùNùSù+^šëëó$-;IUf{�§¶Öåø2;Jeƒš®»ÉÕêÿ".<Qc|…�—¢¬µ¹,(QWVùVùaùuù„ùˆù-0X`ö
+ö
+ÿ
+	.@	ÃÃ×åóý   ) 3 = C /ˆ ³F³FÓFÝFàFèFøFøFGG,G6G8GWG\GmG{G†G—G¥G¯G¯G¯G¿G0PÙé>ô>ô\ôoô{ô•ô¦ô³ôÇôÎôÔôãô1$mrhshsls|s�s‘s2H¾ÌXXXX4X?XHXJXVXYX\XfX3D&‹[‹[”[¢[¢[¤[ª[µ[µ[Ä[Å[Ê[4(¤ªrwrwvw�w†w�w’w5D.;ŽîŽîœîªîªî²îÑîëîëîïîõî6d>Scócó|ó€óŒóŒó˜ó˜ó¥ó¥ó´óÃóÒóäóùóôôôô7ÔT–͖ʹ͸ͻÍÌÍßÍéÍïÍóÍöÍøÍþÍÎÎÎÎ!Î9ÎAÎDÎUÎiÎpÎzÎ~Î‘Î”Î Î¥Î«Î³ÎÆÎàÎèÎëÎüÎÏÏÏ*Ï8ÏRÏ_Ï~Ï~Ï�ϧϴϹϹÏÊÏÞÏåÏêÏêÏûÏÐ&Ð+Ð+Ð1ÐBÐVÐuÐzÐzЀБХÐÄÐÉÐÉÐÚÐîÐûÐÑÑÑ%Ñ2Ñ7Ñ7ÑHÑ\ÑiÑkÑkÑkÑkÑkÑ|єѣѥѥѶÑÊÑÓÑÓÑÙÑÙÑâÑâÑkÒ84ÃÌÃÃ(Ã-Ã8Ã;Ã?ÃEÃ9l 7ÃGÃGáGäGìGHHH H6H@HBHaHfHwH…H�H¡H¯H¹H¹HÇH:ˆ7UËHËHñHõHøHI!I!I4I=IRI[IbIgIqIzI„I‡IŠI�I§IµIÆIàIîIþIþIJ;T3D:Ï:ÏKÏlÏzφφϤϱÏÂÏÊÏÊÏÖÏâÏäÏìÏ<XÉÛùoùop&p+p7pWp]pjpup|p…p‰p•p=X¶ÈYoYoyo†o‹o—o·o½oÊo×oÞoçoëo÷o>$
´š´šÊš›#›1›? X\^â^âbâkâmâ@ éíöëöëìììA áå{‘{‘�‘¡‘©‘B(*0̢̢٢'£C0qyÅÅ0Å3Å3Å<ÅMÅPÅXÅDHª¸Ë�Ë�æ��
���3�8�:�:�D�ED l*Ç*Ç5ÇNÇUÇhÇuǘǘǥÇÇÇèÇùÇ$È4ÈEÈYÈ`ÈeÈeÈ…È�È×ÈÞÈïÈÉÉ=ÉVÉbÉiÉiÉiÉnÉnÉ�É{ɨÉÂÉÊÉßÉ
+ÊÊFÊXÊ_ÊdÊdÊsʂʑʖʖʥʹÊßÊçÊÿÊË%ËEËEËEË]ËiËvˡ˭ËFXºÌʱʱì±ð±ö±ù±²²²"²,²/²2²8²F²G0 ¨CîCîYîeî�î’î’îšîHDjÆjÆsÆ{Æ{ƈƚƢƧƳƹƻƻÆÀÆIL4›4›D›R›b›h›“›·›È›œœ œJØ9ê~ê~/=Q]`it‹�™œ¦®±´Èßçþ€€€€#€&€(€/€?€C€J€M€s€z€Œ€K<ðû’’!’#’1’N’R’b’o’L �…›ä›äµäÇäÑäMH -îî"î$î+î9îaîfî}î‚î‚î†îŽîN@:F=K=KMKZKaKvK}K„K�KOHâð ( (º(Ç(×(ì(ó(ü())&)PPúPúPQ0Q0QU`k’¿Êñøÿ
++2\8$K4K4T4d4l4y4{4ˆ4ˆ4‹4
\ No newline at end of file
diff --git a/Kernel/Kernel.PRJ b/Kernel/Kernel.PRJ
index 851a61c..1aa7d7c 100644
--- a/Kernel/Kernel.PRJ
+++ b/Kernel/Kernel.PRJ
@@ -11,7 +11,9 @@
 };
 
 #include "KernelA.HPP"
-#include "KStart"
+#include "KStart16"
+#include "KStart32"
+#include "KStart64"
 #include "KMathA"
 #include "KUtils"
 #exe {Option(OPTf_KEEP_PRIVATE,ON);};
diff --git a/Kernel/KernelA.HPP b/Kernel/KernelA.HPP
index 1b69aff..1262b95 100644
--- a/Kernel/KernelA.HPP
+++ b/Kernel/KernelA.HPP
@@ -416,7 +416,7 @@ class CPatchTableAbsAddr
 
 #help_index "Boot"
 class CKernel
-{//Must match $LK,"OSStartUp",A="FF:::/Kernel/KStart.CPP,SYS_BOOT_BASE"$
+{//Must match $LK,"OSStartUp",A="FF:::/Kernel/KStart16.CPP,SYS_BOOT_BASE"$
   CBinFile h;
   U32	jmp,
 	boot_src,
@@ -836,7 +836,7 @@ public class CHashClass:CHashSrcSym
   U32	member_cnt;
   U8	ptr_stars_cnt,raw_type;
   U16	flags;
-  CMemberLst *member_lst_and_root, //Head of linked list and root of tree.
+  CMemberLst *member_lst_and_root, //Head of linked list and head of tree.
 	*member_class_base_root, //For finding dup class local vars.
 	*last_in_member_lst;
   CHashClass	*base_class,
@@ -900,44 +900,44 @@ public class CHashGlblVar:CHashSrcSym
 #define DOCT_TEXT		0
 #define DOCT_NEW_LINE		1
 #define DOCT_SOFT_NEW_LINE	2
-#define DOCT_CURSOR		3
-#define DOCT_MARKER		4
-#define DOCT_TAB		5
-#define DOCT_CLEAR		6
-#define DOCT_PAGE_BREAK		7
-#define DOCT_PAGE_LEN		8
-#define DOCT_LEFT_MARGIN	9
-#define DOCT_RIGHT_MARGIN	10
-#define DOCT_HEADER		11
-#define DOCT_FOOTER		12
-#define DOCT_INDENT		13
-#define DOCT_FOREGROUND		14
-#define DOCT_BACKGROUND		15
-#define DOCT_DFT_FOREGROUND	16
-#define DOCT_DFT_BACKGROUND	17
-#define DOCT_PMT		18
+#define DOCT_TAB		3
+#define DOCT_PAGE_BREAK		4
+#define DOCT_CURSOR		5
+#define DOCT_MARKER		6
+#define DOCT_PMT		7
+#define DOCT_CLEAR		8
+#define DOCT_PAGE_LEN		9
+#define DOCT_LEFT_MARGIN	10
+#define DOCT_RIGHT_MARGIN	11
+#define DOCT_HEADER		12
+#define DOCT_FOOTER		13
+#define DOCT_INDENT		14
+#define DOCT_FOREGROUND		15
+#define DOCT_BACKGROUND		16
+#define DOCT_DFT_FOREGROUND	17
+#define DOCT_DFT_BACKGROUND	18
 #define DOCT_WORD_WRAP		19
-#define DOCT_UNDERLINE		20
-#define DOCT_INVERT		21
-#define DOCT_BLINK		22
-#define DOCT_SHIFTED_X		23
-#define DOCT_SHIFTED_Y		24
-#define DOCT_CURSOR_MOVEMENT	25
-#define DOCT_ANCHOR		26
-#define DOCT_LINK		27
-#define DOCT_BUTTON		28
-#define DOCT_DATA		29
-#define DOCT_CHECK_BOX		30
-#define DOCT_LST		31
-#define DOCT_MACRO		32
-#define DOCT_MENU_VAL		33
-#define DOCT_HEX_ED		34
-#define DOCT_TREE		35
-#define DOCT_SPRITE		36
-#define DOCT_INS_BIN		37
-#define DOCT_INS_BIN_SIZE	38
-#define DOCT_SONG		39
-#define DOCT_HIGHLIGHT		40
+#define DOCT_HIGHLIGHT		20
+#define DOCT_BLINK		21
+#define DOCT_INVERT		22
+#define DOCT_UNDERLINE		23
+#define DOCT_SHIFTED_X		24
+#define DOCT_SHIFTED_Y		25
+#define DOCT_CURSOR_MOVEMENT	26
+#define DOCT_ANCHOR		27
+#define DOCT_LINK		28
+#define DOCT_BUTTON		29
+#define DOCT_DATA		30
+#define DOCT_CHECK_BOX		31
+#define DOCT_LST		32
+#define DOCT_MACRO		33
+#define DOCT_MENU_VAL		34
+#define DOCT_HEX_ED		35
+#define DOCT_TREE		36
+#define DOCT_SPRITE		37
+#define DOCT_INS_BIN		38
+#define DOCT_INS_BIN_SIZE	39
+#define DOCT_SONG		40
 #define DOCT_HTML_CODE		41
 #define DOCT_ERROR		42
 
@@ -1353,7 +1353,7 @@ class CDocUndo
 
 public class CDoc //Linked Text File header
 {//See $LK,"Doc",A="HI:Doc"$ for documentation.
-  CDocEntryBase root;
+  CDocEntryBase head;
   I64	flags,locked_flags;
   CDocEntry *cur_entry,*old_cur_entry;
   I32	cur_col,old_cur_col,
@@ -1390,9 +1390,9 @@ public class CDoc //Linked Text File header
   CDoc	*parent_doc; //(When browsing deeper, opening deeper docs.)
   U64	desc; //8 characters. See $LK,"DocBorderLstDraw",A="MN:DocBorderLstDraw"$().
 
-  CDocBin bin_root;
-  CDocSettings settings_root;
-  CDocUndo undo_root;
+  CDocBin bin_head;
+  CDocSettings settings_head;
+  CDocUndo undo_head;
 
   I64	user_data;
   U0 pad;#assert !($$&7) //(compiler lags one token)
@@ -2018,7 +2018,7 @@ class CCodeCtrl
 {
   CCodeCtrl *coc_next;
   CCodeMisc *coc_next_misc,*coc_last_misc;
-  CIntermediateCodeBase	coc_root;
+  CIntermediateCodeBase	coc_head;
 };
 
 #help_index "Compiler/Lex"
@@ -2922,9 +2922,10 @@ public class CDevGlbls
 {
   I64	*idt;
   U8	*mem64_ptr;
+  U8	*uncached_alias; //Alias of lowest 4 Gig.
   U8	mp_apic_ids[MP_MAX_PROCESSORS];
-  CMemRange mem32_root;
-  CPCIDev pci_root;
+  CMemRange mem32_head;
+  CPCIDev pci_head;
 };
 
 #help_index "Graphics/Color;Graphics/Device Contexts"
@@ -3463,16 +3464,16 @@ public class CCPU //The Gs segment reg points to current CCPU.
 
 #help_index "Memory/Page Tables"
 #define MEM_MIN_MEG		512 //512 Meg minimum.
-#define MEM_MAPPED_SPACE	0x2000000000 //Arbitrarily set to 128 Gig.
-#define MEM_NUM_PML2		(MEM_MAPPED_SPACE>>(9+21))
-#define MEM_NUM_PML3		1
-#define MEM_NUM_PML4		1
+#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
 public class CSysFixedArea
 {
-  U8	pml2[MEM_NUM_PML2*0x1000],pml3[MEM_NUM_PML3*0x1000],
-	pml4[MEM_NUM_PML4*0x1000];
+  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;
@@ -3823,7 +3824,7 @@ class CKeyDevEntry
 
 class CKeyDevGlbls
 {
-  CKeyDevEntry put_key_root;
+  CKeyDevEntry put_key_head;
   U0	(**fp_ctrl_alt_cbs)(I64 sc);
   I64	ctrl_alt_in_irq_flags,
 	**ctrl_alt_ret_addr; //addr of ret addr on stack in kbd irq
@@ -3843,7 +3844,7 @@ class CSndData
 public class CSndGlbls
 {
   F64	freq;
-  CSndData record_root;
+  CSndData record_head;
   Bool	record;
 };
 
diff --git a/Kernel/KernelB.HPP b/Kernel/KernelB.HPP
index 29c8004..38220b9 100644
--- a/Kernel/KernelB.HPP
+++ b/Kernel/KernelB.HPP
@@ -26,7 +26,7 @@ public _intern IC_LBTS Bool LBts(
 	U8 *bit_field,I64 bit); //Locked bit test and set to one.
 public _extern _BEQU Bool BEqu(
 	U8 *bit_field,I64 bit,Bool val);//Set bit equ to val.
-public _extern _BIT_FIELD_EXTRACT_U32 U32 BFieldExtU32(
+public _extern _BIT_FIELD_EXT_U32 U32 BFieldExtU32(
 	U8 *bit_field,I64 bit,I64 size); //Extract U32 from bit field.
 public _extern _BIT_FIELD_OR_U32 U0 BFieldOrU32(
 	U8 *bit_field,I64 bit,U32 pattern); //Or U32 into bit field.
@@ -63,7 +63,7 @@ public _intern IC_STRLEN I64 StrLen(U8 *st); //String length.
 #help_index "Data Types/Circular Queue"
 #help_file "::/Doc/Que"
 public _intern IC_QUE_INIT U0 QueInit(
-	CQue *root); //Init queue root links.
+	CQue *head); //Init queue head links.
 public _intern IC_QUE_INS U0 QueIns(
 	CQue *entry,CQue *pred);//Insert item into que after predecessor.
 public _intern IC_QUE_INS_REV U0 QueInsRev(
@@ -106,7 +106,7 @@ public _intern IC_SIN F64 Sin(F64 d); //Sine.
 public _intern IC_SQR F64 Sqr(F64 d); //Square of F64.
 public _intern IC_SQR_I64  I64 SqrI64(I64 i); //Square of I64.
 public _intern IC_SQR_U64  U64 SqrU64(U64 i); //Square of U64.
-public _intern IC_SQRT F64 Sqrt(F64 d); //Square root of F64.
+public _intern IC_SQRT F64 Sqrt(F64 d); //Square head of F64.
 public _intern IC_SWAP_I64 U0 SwapI64(
 	I64 *n1,I64 *n2); //Swap two I64s. Not atomic.
 public _intern IC_SWAP_U16 U0 SwapU16(
@@ -176,6 +176,7 @@ public _extern _MEMSET_U32 U32 *MemSetU32(
 	U32 *dst,I64 val,I64 U32cnt); //Set chunk of U32s to value.
 public _extern _MEMSET U8 *MemSetU8(
 	U8 *dst,I64 val,I64 U8cnt); //Set chunk of U8s to value.
+_extern SYS_GIG_PAGES		U8 sys_gig_pages;
 _extern SYS_HEAP_DBG_FLAG	U8 sys_heap_dbg;
 _extern SYS_HEAP_INIT_FLAG	U8 sys_heap_init_flag;
 _extern SYS_HEAP_INIT_VAL	U8 sys_heap_init_val;
@@ -278,8 +279,4 @@ public _intern IC_FS CTask *Fs(); //FS seg reg points to the current $LK,"CTask"
 #help_file "::/Doc/TimeCycles"
 public _intern IC_RDTSC I64 GetTSC(); //Get time stamp counter.
 
-#help_index "Time/HPET"
-#help_file "::/Doc/TimeHPET"
-public _intern IC_HPET I64 HPET(); //Get high precision event timer.
-
 #help_index ""
diff --git a/Kernel/KernelC.HPP b/Kernel/KernelC.HPP
index 511ebb4..0e2372c 100644
--- a/Kernel/KernelC.HPP
+++ b/Kernel/KernelC.HPP
@@ -128,10 +128,10 @@ public extern U0 ArcExpandBuf(CArcCtrl *c);
 public extern Bool ArcFinishCompression(CArcCtrl *c);
 
 #help_index "Data Types/Circular Queue"
-public extern I64	QueCnt(CQue *root);
-public extern CQue	*QueCopy(CQue *root,CTask *mem_task=NULL);
-public extern U0	QueDel(CQue *root,Bool querem=FALSE);
-public extern I64	QueSize(CQue *root);
+public extern I64	QueCnt(CQue *head);
+public extern CQue	*QueCopy(CQue *head,CTask *mem_task=NULL);
+public extern U0	QueDel(CQue *head,Bool querem=FALSE);
+public extern I64	QueSize(CQue *head);
 
 #help_index "Data Types/Fifo"
 public extern I64	FifoI64Cnt(CFifoI64 *f);
@@ -243,8 +243,8 @@ public extern U8 *DefineSub(I64 sub,U8 *dname);
 #help_index "Devices;Memory/Page Tables"
 public extern U8 *Mem32DevAlloc(I64 size,I64 alignment);
 public extern U0 Mem32DevFree(U8 *base);
-public extern U8 *Mem64DevAlloc(I64 *_pages2Meg);
-public extern U0 Mem64DevFree(U8 *base,I64 pages2Meg);
+public extern U8 *Mem64DevAlloc(I64 *_pages1Gig);
+public extern U0 Mem64DevFree(U8 *base,I64 pages1Gig);
 public extern CDevGlbls dev;
 
 #help_index "DolDoc/Clipboard"
@@ -375,7 +375,7 @@ public extern I64 FileWrite(U8 *filename,
 public extern CDirEntry *FilesFind(U8 *files_find_mask,I64 fuf_flags=0);
 
 #help_index "File/System"
-public extern CATARep *ATAIDDrvs(CATARep *root,CATARep **_ata_drv,
+public extern CATARep *ATAIDDrvs(CATARep *head,CATARep **_ata_drv,
 	CATARep **_atapi_drv);
 extern CBlkDev *ATAMount(U8 first_drv_let,
 	I64 type,I64 base0,I64 base1,I64 unit);
@@ -460,7 +460,7 @@ extern CMouseStateGlbls mouse_last;
 
 #help_index "Install"
 #help_file "::/Doc/Install"
-extern CATARep *ATARepFind(CATARep *haystack_root,I64 needle_num);
+extern CATARep *ATARepFind(CATARep *haystack_head,I64 needle_num);
 public extern Bool DrvEnable(U8 drv_let,Bool val);
 
 #help_index "Install;File/Cmd Line (Typically);Cmd Line (Typically);"
@@ -479,7 +479,7 @@ public extern CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),
 	Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE);
 public extern U0 KeyDevRem(CKeyDevEntry *tempp);
 extern CKeyDevGlbls keydev;
-extern CSrvCmd sys_macro_root;
+extern CSrvCmd sys_macro_head;
 extern CTask *sys_macro_task;
 
 #help_index "Keyboard Devices;Char/Input;StdIn"
@@ -554,6 +554,7 @@ public extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL,
 
 #help_index "Memory/Page Tables"
 public extern Bool MemPagePresentMark(U8 *a,Bool val);
+public extern I64 MemPageSize(U8 *a);
 public extern I64 *MemPageTable(U8 *a);
 
 #help_index "Messages"
@@ -611,7 +612,7 @@ public _extern SYS_PCI_SERVICES
 
 #help_index "PCI;Info;File/System;Devices"
 public extern I64 ATARep(Bool pmt=TRUE,
-	Bool just_ide=FALSE,CATARep **_root=NULL);
+	Bool just_ide=FALSE,CATARep **_head=NULL);
 
 #help_index "Processor"
 public extern U8 *IntEntryGet(I64 irq);
@@ -727,7 +728,6 @@ extern U8 *MPrintTime(CDate cdt);
 public extern CDate Now();
 public extern CDate Struct2Date(CDateStruct *_ds);
 public extern CDate local_time_offset;
-
 #help_index "Time/Date;Date"
 #help_file "::/Doc/Date"
 public extern I64 DayOfWeek(I64 i);
@@ -739,6 +739,10 @@ public extern I64 YearStartDate(I64 year);
 public extern U16 mon_start_days1[12];
 public extern U16 mon_start_days2[12];
 
+#help_index "Time/HPET"
+#help_file "::/Doc/TimeHPET"
+public extern I64 HPET();
+
 #help_index "Time/Jiffies"
 #help_file "::/Doc/TimeJiffy"
 public extern I64 SysTimerRead();//18.33333*65536Hz (SYS_TIMER_FREQ)
diff --git a/Kernel/KeyDev.CPP b/Kernel/KeyDev.CPP
index 58ead54..dd0d3e7 100644
--- a/Kernel/KeyDev.CPP
+++ b/Kernel/KeyDev.CPP
@@ -2,12 +2,12 @@ U0 PutKey(I64 ch=0,I64 sc=0)
 {//See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
   CKeyDevEntry *tempp;
   if (ch||sc) {
-    tempp=keydev.put_key_root.next;
+    tempp=keydev.put_key_head.next;
     if (!Bt(&Fs->display_flags,DISPLAYf_SILENT)) {
       if (kbd.scan_code & SCF_SCROLL && sys_focus_task==Fs)
 	while (kbd.scan_code & SCF_SCROLL)
 	  Yield; //Wait on SCROLL LOCK Key
-      while (tempp!=&keydev.put_key_root) {
+      while (tempp!=&keydev.put_key_head) {
 	if ((!(sc&SCF_KEY_DESC) || tempp->flags & KDF_HAS_DESCS) &&
 	      (*tempp->put_key)(ch,sc))
 	  break;
@@ -33,12 +33,12 @@ U0 PutS(U8 *st)
   U8 *ptr;
   Bool cont=TRUE;
   if (!st) return;
-  CKeyDevEntry *tempp=keydev.put_key_root.next;
+  CKeyDevEntry *tempp=keydev.put_key_head.next;
   if (!Bt(&Fs->display_flags,DISPLAYf_SILENT)) {
     if (kbd.scan_code & SCF_SCROLL && sys_focus_task==Fs)
       while (kbd.scan_code & SCF_SCROLL)
 	Yield;
-    while (cont && tempp!=&keydev.put_key_root) {
+    while (cont && tempp!=&keydev.put_key_head) {
       if (tempp->put_s) {
 	if ((*tempp->put_s)(st))
 	  break;
@@ -70,7 +70,7 @@ U0 KeyDevRem(CKeyDevEntry *tempp)
 CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch,I64 sc),
 	Bool (*fp_puts)(U8 *st),I64 priority,Bool key_descs=FALSE)
 {//Places hook in StdOut chain. See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
-  CKeyDevEntry *tempp=keydev.put_key_root.last,
+  CKeyDevEntry *tempp=keydev.put_key_head.last,
 	*tempp1=ACAlloc(sizeof(CKeyDevEntry));
   tempp1->put_key=fp_put_key;
   tempp1->put_s=fp_puts;
@@ -204,8 +204,8 @@ U0 KeyDevInit()
   keydev.ctrl_alt_no_shift_descs=CAlloc(26*sizeof(U8 *));
   keydev.ctrl_alt_shift_descs	=CAlloc(26*sizeof(U8 *));
   keydev.ctrl_alt_in_irq_flags	=0;
-  MemSet(&keydev.put_key_root,0,sizeof(CKeyDevEntry));
-  QueInit(&keydev.put_key_root);
+  MemSet(&keydev.put_key_head,0,sizeof(CKeyDevEntry));
+  QueInit(&keydev.put_key_head);
   KeyDevAdd(&KDInputFilterPutKey,&KDInputFilterPutS,0x40000000,FALSE);
   KeyDevAdd(&KDRawPutKey,&KDRawPutS,0x60000000,FALSE);
   CtrlAltCBSet('C',&CtrlAltC,"Cmd /Break Execution",,TRUE);
diff --git a/Kernel/Mem/HeapCtrl.CPP b/Kernel/Mem/HeapCtrl.CPP
index 0fbb634..e259540 100644
--- a/Kernel/Mem/HeapCtrl.CPP
+++ b/Kernel/Mem/HeapCtrl.CPP
@@ -1,6 +1,6 @@
 CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL,CTask *task=NULL,CBlkPool *bp)
 {//See $LK,"HeapLog",A="MN:HeapLog"$() for an example.
-//Duplicated for $LK,"Adam Task",A="FF:::/Kernel/KStart.CPP,CHeapCtrl.bp"$.
+//Duplicated for $LK,"Adam Task",A="FF:::/Kernel/KStart64.CPP,CHeapCtrl.bp"$.
   if (!hc)
     hc=ACAlloc(sizeof(CHeapCtrl));
   hc->hc_signature=HEAP_CTRL_SIGNATURE_VAL;
diff --git a/Kernel/Mem/Mem512.CPP b/Kernel/Mem/Mem512.CPP
index af51c3e..4693ae3 100644
--- a/Kernel/Mem/Mem512.CPP
+++ b/Kernel/Mem/Mem512.CPP
@@ -57,7 +57,7 @@ Return: NULL if out of memory.
       } while (i<64-MEM_PAGE_BITS-1);
       pages512=0;
       res=NULL; //Out of memory
-      goto at_done;
+      goto at_done2;
     }
     if (res->pagesused_u8s+=pages512<used_u8s+=res->pages<locked_flags,BPlf_LOCKED);
   POPFD
   return res;
diff --git a/Kernel/Mem/MemPhysical.CPP b/Kernel/Mem/MemPhysical.CPP
index a736b49..a02231d 100644
--- a/Kernel/Mem/MemPhysical.CPP
+++ b/Kernel/Mem/MemPhysical.CPP
@@ -1,7 +1,7 @@
 Bool Mem32DevIns(CMemRange *tempmr)
 {
-  CMemRange *tempmr1=dev.mem32_root.next,*tempmr2;
-  while (tempmr1!=&dev.mem32_root) {
+  CMemRange *tempmr1=dev.mem32_head.next,*tempmr2;
+  while (tempmr1!=&dev.mem32_head) {
     if (!tempmr1->type && tempmr->base>=tempmr1->base &&
 	  tempmr->base+tempmr->size<=tempmr1->base+tempmr1->size) {
       if (tempmr->base>tempmr1->base) {
@@ -32,14 +32,14 @@ U0 Mem32DevInit()
   CMemRange *tempmr;
   CMemE820 *m20=SYS_MEM_E820;
 
-  QueInit(&dev.mem32_root);
+  QueInit(&dev.mem32_head);
   tempmr=AMAlloc(sizeof(CMemRange));
   tempmr->type=MRT_UNUSED;
   tempmr->flags=0;
 //Maybe !!! Change this to 0xF0000000 !!!
   tempmr->base=0xE0000000;
   tempmr->size=0x10000000;
-  QueIns(tempmr,dev.mem32_root.last);
+  QueIns(tempmr,dev.mem32_head.last);
 
   if (m20->type) {
     while (m20->type) {
@@ -67,10 +67,13 @@ U0 MemPagesNotPresentMark()
     m20++;
   }
   if (max_physical>=0x1000000+m01[1]<<16) {
-    a=(max_physical+0x1FFFFF)&~0x1FFFFF;
+    if (sys_gig_pages)
+      a=(max_physical+0x3FFFFFFF)&~0x3FFFFFFF;
+    else
+      a=(max_physical+0x1FFFFF)&~0x1FFFFF;
     while (abase+alignment-1)&~(alignment-1);
     limit=base+size-1;
     if (!tempmr1->type &&
@@ -114,8 +117,8 @@ U0 Mem32DevFree(U8 *base)
   if (!base) return;
   while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0))
     Yield;
-  tempmr=dev.mem32_root.next;
-  while (tempmr!=&dev.mem32_root) {
+  tempmr=dev.mem32_head.next;
+  while (tempmr!=&dev.mem32_head) {
     if (tempmr->base==base) {
       tempmr->type=MRT_UNUSED;
       break;
@@ -125,40 +128,47 @@ U0 Mem32DevFree(U8 *base)
   LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0);
 }
 
-U8 *Mem64DevAlloc(I64 *_pages2Meg)
+U8 *Mem64DevAlloc(I64 *_pages1Gig)
 {//Alloc 64-bit addr space for device.
-  U8 *res;
-  I64 i=*_pages2Meg,*pte;
+  U8 *a;
+  I64 i=*_pages1Gig,*pte;
   while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0))
     Yield;
   while (i--) {
-    dev.mem64_ptr-=0x200000;
-    pte=MemPageTable(dev.mem64_ptr);
-    *pte=*pte&~0x18 |0x11; //Uncached and present
-    InvlPg(dev.mem64_ptr);
+    a=dev.mem64_ptr-=1<<30;
+    do {
+      pte=MemPageTable(a);
+      *pte=*pte&~0x18 |0x11; //Uncached and present
+      InvlPg(dev.mem64_ptr);
+      a+=MemPageSize(a);
+    } while (a-dev.mem64_ptr<1<<30);
   }
-  res=dev.mem64_ptr;
   LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0);
-  return res;
+  return dev.mem64_ptr;
 }
 
-U0 Mem64DevFree(U8 *base,I64 pages2Meg)
+U0 Mem64DevFree(U8 *base,I64 pages1Gig)
 {//Free 64-bit device address space.
   if (!base) return;
   while (LBts(&sys_semas[SYS_SEMA_DEV_MEM],0))
     Yield;
   if (base==dev.mem64_ptr)
-    dev.mem64_ptr+=pages2Meg*0x200000;
+    dev.mem64_ptr+=pages1Gig*1<<30;
 //else not freed
   LBtr(&sys_semas[SYS_SEMA_DEV_MEM],0);
 }
 
-U8 *MemVGAAlloc()
+U0 UncachedAliasAlloc() //Make uncached alias for 4 lowest Gig.
 {
-  I64 i=1,*a=Mem64DevAlloc(&i),*pte=MemPageTable(a);
-  *pte=0x197;
-  InvlPg(a);
-  return a;
+  I64 i=4,*pte;
+  U8 *a;
+  a=dev.uncached_alias=Mem64DevAlloc(&i);
+  do {
+    pte=MemPageTable(a);
+    *pte=0x197+a-dev.uncached_alias;
+    InvlPg(a);
+    a+=MemPageSize(a);
+  } while (a-dev.uncached_alias<1<<32);
 }
 
 I64 BIOSTotalMem()
@@ -191,4 +201,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.CPP b/Kernel/Mem/PageTables.CPP
index 9729eee..10fa384 100644
--- a/Kernel/Mem/PageTables.CPP
+++ b/Kernel/Mem/PageTables.CPP
@@ -7,37 +7,59 @@ SYS_INIT_PAGE_TABLES::
 	MOV	EDI,SYS_FIXED_AREA
 	XOR	EAX,EAX
 	MOV	ECX,sizeof(CSysFixedArea)/4
-	REP_STOSD			//Init entire SYS_FIXED_AREA to zero
+	REP_STOSD	//Init entire SYS_FIXED_AREA to zero
 
-//PML2
-	MOV	EAX,0x87 //bit 7 is page size (1==2Meg)
+	MOV	EAX,0x80000001
+	CPUID
+	BT	EDX,26
+	JC	@@15
+
+	MOV	U8 [SYS_GIG_PAGES],FALSE
+//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_PML2*0x200
-@@20:	MOV	U32 [EDI],EAX
+	MOV	ECX,MEM_NUM_2MEG
+@@05:	MOV	U32 [EDI],EAX
 	ADD	EDI,4
 	MOV	U32 [EDI],EDX
 	ADD	EDI,4
 	ADD	EAX,0x200000
 	ADC	EDX,0
-	LOOP	@@20
-
-//0xE0000000-0xFFFFFFFF: PCI Devs
-	MOV	EAX,0x17	//Cache disabled
-	XOR	EDX,EDX
-	MOV	EDI,SYS_FIXED_AREA+CSysFixedArea.pml2+8*0x700
-	MOV	ECX,0x800-0x700
-@@25:	OR	U32 [EDI],EAX
-	ADD	EDI,4
-	OR	U32 [EDI],EDX
-	ADD	EDI,4
-	LOOP	@@25
-
-//PML3
+	LOOP	@@05
+//PML3: Use 2Meg Pages
 	MOV	EAX,SYS_FIXED_AREA+CSysFixedArea.pml2+7
 	XOR	EDX,EDX
 	MOV	EDI,SYS_FIXED_AREA+CSysFixedArea.pml3
-	MOV	ECX,MEM_NUM_PML2
+	MOV	ECX,MEM_NUM_USED_1GIG
+@@10:	MOV	U32 [EDI],EAX
+	ADD	EDI,4
+	MOV	U32 [EDI],EDX
+	ADD	EDI,4
+	ADD	EAX,0x1000
+	ADC	EDX,0
+	LOOP	@@10
+	JMP	@@25
+
+@@15:	MOV	U8 [SYS_GIG_PAGES],TRUE
+//PML3: Use 1Gig Pages
+	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
+	ADD	EDI,4
+	MOV	U32 [EDI],EDX
+	ADD	EDI,4
+	ADD	EAX,0x40000000
+	ADC	EDX,0
+	LOOP	@@20
+
+//PML4
+@@25:	MOV	EAX,SYS_FIXED_AREA+CSysFixedArea.pml3+7
+	XOR	EDX,EDX
+	MOV	EDI,SYS_FIXED_AREA+CSysFixedArea.pml4
+	MOV	ECX,MEM_NUM_1GIG/(0x1000/8)
 @@30:	MOV	U32 [EDI],EAX
 	ADD	EDI,4
 	MOV	U32 [EDI],EDX
@@ -46,19 +68,6 @@ SYS_INIT_PAGE_TABLES::
 	ADC	EDX,0
 	LOOP	@@30
 
-//PML4
-	MOV	EAX,SYS_FIXED_AREA+CSysFixedArea.pml3+7
-	XOR	EDX,EDX
-	MOV	EDI,SYS_FIXED_AREA+CSysFixedArea.pml4
-	MOV	ECX,MEM_NUM_PML3
-@@35:	MOV	U32 [EDI],EAX
-	ADD	EDI,4
-	MOV	U32 [EDI],EDX
-	ADD	EDI,4
-	ADD	EAX,0x1000
-	ADC	EDX,0
-	LOOP	@@35
-
 	MOV	U32 [SYS_CODE_BP],SYS_FIXED_AREA+CSysFixedArea.adam_bp
 	MOV	U32 [SYS_CODE_BP+4],0
 
@@ -93,7 +102,7 @@ pain without MAlloc up-and-running.
 
 //EBX=BASE EAX=SIZE
 	TEST	U8 [SYS_MEM_INIT_FLAG],1
-	JZ	@@40
+	JZ	@@35
 	PUSH	EAX
 	MOV	EDI,EBX
 	MOV	ECX,EAX
@@ -101,7 +110,7 @@ pain without MAlloc up-and-running.
 	REP_STOSB
 	POP	EAX
 
-@@40:	SHR	EAX,MEM_PAGE_BITS
+@@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
@@ -117,7 +126,18 @@ pain without MAlloc up-and-running.
 
 I64 *MemPageTable(U8 *a)
 {//Point to page table entry for addr.
-  return SYS_FIXED_AREA+offset(CSysFixedArea.pml2)+a>>21*8;
+  if (sys_gig_pages)
+    return SYS_FIXED_AREA+offset(CSysFixedArea.pml3)+a>>30*8;
+  else
+    return SYS_FIXED_AREA+offset(CSysFixedArea.pml2)+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)
diff --git a/Kernel/MultiProc.CPP b/Kernel/MultiProc.CPP
index 14e25bb..4347444 100644
--- a/Kernel/MultiProc.CPP
+++ b/Kernel/MultiProc.CPP
@@ -139,10 +139,10 @@ U0 MPInt(U8 num,I64 cpu_num=1)
   }
   PUSHFD
   CLI //Multitasking safe because each core has a local apic and IRQ's are off
-  while (*LAPIC_ICR_LOW(U32 *)&0x1000)
+  while (*(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)&0x1000)
     PAUSE
-  *LAPIC_ICR_HIGH(U32 *)=dev.mp_apic_ids[cpu_num]<<24;
-  *LAPIC_ICR_LOW(U32 *)=0x4000+num;
+  *(dev.uncached_alias+LAPIC_ICR_HIGH)(U32 *)=dev.mp_apic_ids[cpu_num]<<24;
+  *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0x4000+num;
   POPFD
 }
 
@@ -150,15 +150,15 @@ U0 MPIntAll(U8 num)
 {//Generate interrupt for all but own core.
   PUSHFD
   CLI //Multitasking safe because each core has a local apic and IRQ's are off
-  while (*LAPIC_ICR_LOW(U32 *)&0x1000)
+  while (*(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)&0x1000)
     PAUSE
-  *LAPIC_ICR_LOW(U32 *)=0xC4800+num;
+  *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4800+num;
   POPFD
 }
 
 U0 MPNMInt()
 {//Generate nonmaskable interrupt.
-  *LAPIC_ICR_LOW(U32 *)=0xC4400;
+  *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4400;
 }
 
 U0 MPHalt()
@@ -172,14 +172,14 @@ U0 MPAPICInit()
 {//Called by adam during start-up
 //and other cores during initialization
   //after $LK,"Core0StartMP",A="MN:Core0StartMP"$().
-  *LAPIC_SVR(U32 *)|=LAPICF_APIC_ENABLED;
-  dev.mp_apic_ids[Gs->num]=*LAPIC_APIC_ID(U32 *)>>24;
-  *LAPIC_LDR(U32 *)=dev.mp_apic_ids[Gs->num]<<24;
-  *LAPIC_DFR(U32 *)=0xF0000000;
+  *(dev.uncached_alias+LAPIC_SVR)(U32 *)|=LAPICF_APIC_ENABLED;
+  dev.mp_apic_ids[Gs->num]=*(dev.uncached_alias+LAPIC_APIC_ID)(U32 *)>>24;
+  *(dev.uncached_alias+LAPIC_LDR)(U32 *)=dev.mp_apic_ids[Gs->num]<<24;
+  *(dev.uncached_alias+LAPIC_DFR)(U32 *)=0xF0000000;
 
-  //  MemSet(LAPIC_IRR,0,0x20);
-  //  MemSet(LAPIC_ISR,0,0x20);
-  //  MemSet(LAPIC_TMR,0,0x20);
+  //  MemSet(dev.uncached_alias+LAPIC_IRR,0,0x20);
+  //  MemSet(dev.uncached_alias+LAPIC_ISR,0,0x20);
+  //  MemSet(dev.uncached_alias+LAPIC_TMR,0,0x20);
 
   SetRAX(Gs->tss->tr);
   LTR	AX
@@ -315,15 +315,16 @@ U0 Core0StartMP()
   mp_cnt_initial=mp_cnt=1;
   mp_cnt_lock=0;
 
-  *LAPIC_LVT_ERR(U32 *)=*LAPIC_LVT_ERR(U32 *)&0xFFFFFF00+MPN_VECT;
+  *(dev.uncached_alias+LAPIC_LVT_ERR)(U32 *)=
+	*(dev.uncached_alias+LAPIC_LVT_ERR)(U32 *)&0xFFFFFF00+MPN_VECT;
   WBINVD //Not sure why this is needed.	Might just need delay. $LK,"MemCpy",A="MN:MemCpy"$ above?
 
-  *LAPIC_ICR_LOW(U32 *)=0xC4500; //assert init IPI
+  *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4500; //assert init IPI
   BusyWait(10000);
 
-  *LAPIC_ICR_LOW(U32 *)=0xC4600+MPN_VECT; //start-up
+  *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4600+MPN_VECT; //start-up
   BusyWait(200);
-  *LAPIC_ICR_LOW(U32 *)=0xC4600+MPN_VECT;
+  *(dev.uncached_alias+LAPIC_ICR_LOW)(U32 *)=0xC4600+MPN_VECT;
 
   BusyWait(100000);
   for (i=0;i<10000;i++)
@@ -371,7 +372,7 @@ U0 Core0Init()
   }
   if (Bt(&ee.rdx,9)) {
 //Unnecessary?
-    //	  SetMSR(IA32_LAPIC_BASE,LAPIC_BASE+0x900);
+    //	  SetMSR(IA32_LAPIC_BASE,dev.uncached_alias+LAPIC_BASE+0x900);
     MPAPICInit;
   }
 }
@@ -379,7 +380,7 @@ U0 Core0Init()
 interrupt U0 IntMPCrash()
 {//Entering the debugger from another core causes an interrupt on core0
 //Which calls this routine.
-  *LAPIC_EOI(U32 *)=0;
+  *(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
   mp_cnt=1;
   Raw(ON);
   text.raw_flags|=RWF_SHOW_DOLLAR;
diff --git a/Kernel/SrvCmd.CPP b/Kernel/SrvCmd.CPP
index e560e8a..dc8210f 100644
--- a/Kernel/SrvCmd.CPP
+++ b/Kernel/SrvCmd.CPP
@@ -4,10 +4,10 @@ U0 SrvCmdDel(CSrvCmd *tempc)
   Free(tempc);
 }
 
-U0 SrvCmdQueDel(CSrvCmd *root)
+U0 SrvCmdQueDel(CSrvCmd *head)
 {
-  CSrvCmd *tempc=root->next,*tempc1;
-  while (tempc!=root) {
+  CSrvCmd *tempc=head->next,*tempc1;
+  while (tempc!=head) {
     tempc1=tempc->next;
     QueRem(tempc);
     SrvCmdDel(tempc);
@@ -136,7 +136,7 @@ CSrvCmd *TaskMsg(CTask *_srv,CTask *master,I64 msg_code,I64 a1,I64 a2,I64 flags)
 	srv!=sys_macro_task && msg_code==MSG_KEY_DOWN) {
     tempc1=AMAllocIdent(tempc);
     CLI
-    QueIns(tempc1,sys_macro_root.last);
+    QueIns(tempc1,sys_macro_head.last);
   }
   CLI
   while (Bt(&srv->task_flags,TASKf_FILTER_INPUT) &&
diff --git a/Kernel/StrPrint.CPP b/Kernel/StrPrint.CPP
index 32ab0a3..971556e 100644
--- a/Kernel/StrPrint.CPP
+++ b/Kernel/StrPrint.CPP
@@ -67,9 +67,7 @@ U8 *MPrintQ(U8 *ptr,I64 flags)
 	case '$$':
 	  if (flags&SPF_DOLLAR) {
 	    SPutChar(_dst,'\\',_buf);
-	    SPutChar(_dst,'x',_buf);
-	    SPutChar(_dst,'2',_buf);
-	    SPutChar(_dst,'4',_buf);
+	    SPutChar(_dst,'d',_buf);
 	  } else {
 	    SPutChar(_dst,ch,_buf);
 	    SPutChar(_dst,ch,_buf);
@@ -115,7 +113,7 @@ U8 *MPrintQ(U8 *ptr,I64 flags)
 U8 *MPrintq(U8 *ptr,I64 flags)
 {
   U8 **_buf,*buf,**_dst,*dst;
-  I64 i,ch,ch1;
+  I64 i,j,ch,ch1;
   buf=MAlloc(STR_LEN);
   _buf=&buf;
   dst=buf;
@@ -127,14 +125,8 @@ U8 *MPrintq(U8 *ptr,I64 flags)
 	case '\\':
 	  switch (ch1) {
 	    start:
-	      case 'n':
-		SPutChar(_dst,'\n',_buf);
-		break;
-	      case 'r':
-		SPutChar(_dst,'\r',_buf);
-		break;
-	      case '"':
-		SPutChar(_dst,'"',_buf);
+	      case '0':
+		SPutChar(_dst,0,_buf);
 		break;
 	      case '\'':
 		SPutChar(_dst,'\'',_buf);
@@ -142,15 +134,24 @@ U8 *MPrintq(U8 *ptr,I64 flags)
 	      case '\`':
 		SPutChar(_dst,'\`',_buf);
 		break;
+	      case '"':
+		SPutChar(_dst,'"',_buf);
+		break;
 	      case '\\':
 		SPutChar(_dst,'\\',_buf);
 		break;
+	      case 'd':
+		SPutChar(_dst,'$$',_buf);
+		break;
+	      case 'n':
+		SPutChar(_dst,'\n',_buf);
+		break;
+	      case 'r':
+		SPutChar(_dst,'\r',_buf);
+		break;
 	      case 't':
 		SPutChar(_dst,'\t',_buf);
 		break;
-	      case '0':
-		SPutChar(_dst,0,_buf);
-		break;
 	    end:
 	      ptr++;
 	      break;
@@ -159,18 +160,19 @@ U8 *MPrintq(U8 *ptr,I64 flags)
 	    case 'X':
 	      i=0;
 	      ptr++;
-	      while (TRUE) {
+	      for (j=0;j<2;j++) {
 		ch1=ToUpper(*ptr++);
 		if (Bt(chars_bmp_hex_numeric,ch1)) {
 		  if (ch1<='9')
 		    i=i<<4+ch1-'0';
 		  else
 		    i=i<<4+ch1-'A'+10;
-		} else
+		} else {
+		  ptr--;
 		  break;
+		}
 	      }
 	      SPutChar(_dst,i,_buf);
-	      ptr--;
 	      break;
 
 	    default:
diff --git a/Misc/OSInstall.CPP b/Misc/OSInstall.CPP
index 3186893..a842d39 100644
--- a/Misc/OSInstall.CPP
+++ b/Misc/OSInstall.CPP
@@ -41,7 +41,7 @@ U0 VMInstallDrv(CTask *task,U8 drv_let,
 
 U0 VMInstallWiz()
 {
-  CATARep *root=NULL,*ata_drv=NULL,*atapi_drv=NULL;
+  CATARep *head=NULL,*ata_drv=NULL,*atapi_drv=NULL;
   CTask *task;
   "\nIt's normal for this to freeze for a moment or two.\n";
   PressAKey;
@@ -57,14 +57,14 @@ U0 VMInstallWiz()
   WinVert(task->win_bottom+3,Fs->win_bottom);
   WinToTop(Fs);
 
-  ATARep(FALSE,TRUE,&root);
-  ATAIDDrvs(root,&ata_drv,&atapi_drv);
+  ATARep(FALSE,TRUE,&head);
+  ATAIDDrvs(head,&ata_drv,&atapi_drv);
   if (VMPrtDsk(task,ata_drv)) {
     VMInstallDrv(task,'C',ata_drv,atapi_drv);
     VMInstallDrv(task,'D',ata_drv,atapi_drv);
     BootMHDIns('C');
   }
-  LinkedLstDel(root);
+  LinkedLstDel(head);
   WinVert(task->win_top,Fs->win_bottom);
   Kill(task);
 }
@@ -73,7 +73,7 @@ U0 RegularInstallWiz()
 {
   I64 unit,drv_let;
   U8 *st,*base0,*base1;
-  CATARep *root=NULL,*tempha;
+  CATARep *head=NULL,*tempha;
   I64 ch,num_hints;
   CTask *task;
 
@@ -92,7 +92,7 @@ U0 RegularInstallWiz()
   WinToTop(Fs);
   XTalk(task,"Mount;\nCp");
 
-  num_hints=ATARep(FALSE,,&root);
+  num_hints=ATARep(FALSE,,&head);
   "\nInclude '$$PURPLE$$0x$$FG$$' for hexidecimal numbers.\n\n";
   while (TRUE) {
     base0=GetStr("Hard Drive I/O Port Base0  : ");
@@ -101,7 +101,7 @@ U0 RegularInstallWiz()
     Free(base0);
   }
   if (1<=Str2I64(base0)<=num_hints) {
-    tempha=ATARepFind(&root,Str2I64(base0));
+    tempha=ATARepFind(&head,Str2I64(base0));
     Free(base0);
     base0=MStrPrint("0x%X",tempha->base0);
     base1=MStrPrint("0x%X",tempha->base1);
@@ -121,7 +121,7 @@ U0 RegularInstallWiz()
       Free(st);
     } while (!(0<=unit<=1));
   }
-  LinkedLstDel(root);
+  LinkedLstDel(head);
   XTalkWait(task,"%s\n%s\n%C\n",base0,base1,'0'+unit);
   DrvRep;
   do {
diff --git a/Misc/OSTestSuite.CPP b/Misc/OSTestSuite.CPP
index a42d25e..f122b65 100644
--- a/Misc/OSTestSuite.CPP
+++ b/Misc/OSTestSuite.CPP
@@ -6,7 +6,7 @@ U0 TSStart()
 U0 TS()
 {
   progress4=ts_num++;
-  progress4_max=167;
+  progress4_max=168;
   *progress4_desc=0;
 }
 U0 TSEnd()
@@ -977,6 +977,14 @@ U0 Do()
 
 */
 
+U0 DoRateCores()
+{
+  CTask *task=User;
+  XTalkWait(task,"#include \"::/Demo/MultiCore/RateCores\";\n");
+  Sleep(750);
+  XTalk(task,"Exit;\n");
+}
+
 U0 DoMPPrint()
 {
   CTask *task=User;
@@ -2305,6 +2313,7 @@ U0 OSTestSuite()
   TS; DoClouds;
   TS; if (mp_cnt>1) DoRadixSort;
   TS; if (mp_cnt>1 && DrvIsWritable(':')) DoLoadTest;
+  TS; if (mp_cnt>1) DoRateCores;
   TS; if (mp_cnt>1) DoMPPrint;
   TS; if (mp_cnt>1) DoLock;
   TS; if (mp_cnt>1) DoInterrupts;
diff --git a/StartOS.CPP b/StartOS.CPP
index e88f997..0ceaf64 100644
--- a/StartOS.CPP
+++ b/StartOS.CPP
@@ -17,7 +17,7 @@ HashTablePurge(adam_task->hash_table);
 
 #help_index "Misc"
 //Use Dbg("Type 'G;'"); to debug before window mgr is running.
-public F64 os_version=4.090;//Operating system version.
+public F64 os_version=4.100;//Operating system version.
 
 #include "/Adam/MakeAdam"