--Rope.mesa,"Thick"stringdefinitions--RussAtkinson,August27,198211:51am--TableofContents:--***Part1:Basicoperationsanddefinitions--***Part2:Extendedoperationsanddefinitions--***Part3:Miscellaneousdefinitions--ARopeis(nominally)animmutableobjectcontaingasequenceofcharactersindexedstartingat0forSizecharacters.Therepresentationallowscertainoperationstobeperformedwithoutcopyingallofthecharactersattheexpenseofaddingadditionalnodestotheobject.--NOTE:thebitpatternofthetextvariantisGUARANTEEDtobeconsistentwiththebuilt-inCedartypeTEXT,althoughthetypeswillnotagreeeitheratcompile-timeorruntime.ThismeansthatonecanuseobjectsoftypeTextorTEXTinterchangeablyprovidedthattheruntimetypeisnotexamined,andprovidedthatthecompilercanbefooled(viaLOOPHOLE).SinceREFTEXTisroughlycompatiblewithMesaLONGSTRING,thisisameansforpassingRoperefstoPilotroutinesthatexpectLONGSTRING.ForshortSTRINGyouareonyourown(seeConvertUnsafe).DIRECTORYEnvironmentUSING[Comparison];Rope:CEDARDEFINITIONS--***Part1:Basicoperationsanddefinitions***--=BEGINROPE:TYPE=REFRopeRep;NoRope:ERROR;--signalledifropeisinvalidvariant--usuallyindicatessevereillnessintheworld--Note:BoundsFault=Runtime.BoundsFault--ItisraisedbymanyoftheRopeoperationsCat:PROC[r1,r2,r3,r4,r5,r6:ROPE_NIL]RETURNS[ROPE];--returnstheconcatenationofuptosixropes(limitbasedonevalstackdepth)--BoundsFaultoccursiftheresultgetstoolargeConcat:PROC[base,rest:ROPE_NIL]RETURNS[ROPE];--thetwo-rope(faster)versionofCat--BoundsFaultoccursiftheresultgetstoolargeCompare:PROC[s1,s2:ROPE,case:BOOL_TRUE]RETURNS[Environment.Comparison];--basedonCHARcollatingsequence--case=>caseofcharactersissignificantEqual:PROC[s1,s2:ROPE,case:BOOL_TRUE]RETURNS[BOOL];--contentsequalityofs1ands2--case=>caseofcharactersissignificant1���pî	ìïb&îc	îwîÅî”
î
yï`€îøî?îfîîCî ‰î$Hî
yï]5îðîºî^î
yï[îðî…î–îDîî	îiî 
î
yïYéîðî…î–îDîG	îÂî"f
î
yïXCîðî…î–îDîû
î
yïTøîð�î
rîïî[
î”îˆî"'î&î+•�î,Êî2jî4
	î:}î?€îDpîF�îGIî
yïSRî
r
î¾î‚
î 5î$Lî(Í	î/Hî0ìî2¼î9î=îîBåîDàîFƒî
yïQ¬	îèîîÙîèîŒîó	î&Aî*î+©î-õî
yïNaîðîïî;îCîæî‰îÕî œî%2î&ž	î1!î2Æî4•	î:Éî=Äî@îDÓî
yïL»î
^îúî™îåîNîãî"Gî%æî)´î+Yî3Nî5î:ëî=ûîB#îDõîGƒî
yïKîÙîKîïîÔîîËîî(¿î."î0ôî3@î8Hî;-î<™î>üîEmî
yïIpîÜî­îùîuîîÒî"Õî%	î/€î38î6‰î:Íî<9îA$	îGìî
yïGÊî!î½îî î�î@î"hî$î)Pî,Íî/dî1	î4[î9‚î<Tî@î
yïF$îËîaîËî½î Tî"§î$›î'¶î*î-Hqî
yïBÙrîïA3
qîÒïA3�î·ïA3rîïA3�îdïA3î
yï=çqî§ï=ç�îrï=çî"
rpîï:œ�îûï:œ�îøîŽîžîÑî{	îöî!™
î(#î*¸rîï7P�qî
fï7P�îï7Prqîï4�îUï4rî’ï4�qîï4�îIï4rîçï4�qîÌï4�î ï4rî|ï4�î…ï4îï0¹qîŽï0¹�îGï0¹rîŸï0¹�pîï/�îûï/�îøî•îëîïî[îÃrpîï-n�îûï-n�îøî–î*î#î2î Øî#$rpîï*"�îûï*"�îøîÅ
î¹�îžrpîï(}�îûï(}�îøîˆîóîßî¹îhîîWî Õ	rsîï%1�îtï%1rî
žï%1�qîœï%1�îCï%1rî(ï%1�îŒï%1îî®î¿îÐîáqîï%1�îèï%1rî"ï%1�qî$ï%1�î%ï%1rî&'ï%1�qî'ï%1�î'âï%1rî-�ï%1�qî-cï%1rî0tï%1�î0×ï%1�pîŠï#‹�î
ï#‹�îî˜îäîzîî!î"³î$æî(oî,î/Ñî1Äî4‘î8rpîŠï!æ�î
ï!æ�î
îõî%î{îÇî!î$Cî&˜rsîïš�îtïšrîºïš�qî·ïš�î_ïšrîDïš�î§ïš	qî°ïš�î„ïšrî+ïš�qî¸ïš�î  ïšrî!Ãïš�qî"«ïš�î#ïšrî(œïš�qî(ÿïšrî,ïš�î,sïš�pîŠïô�î
ïô�îîMîÒî|îî ´rpîŠïO�î
ïO�î
îõî%î{îÇî!î$Cî&˜rsîï�îtïrîÎï�qîËï�îsïrîï]î‹qî½ï]�î‘ï]rîÎï]�î«ï]qîï]�îÌï]rî¨ï]�qî4ï]�îîï]rî"`ï]�qî#Hï]�î$ï]rî)9ï]�î)œï]pîŠï¸�î
ï¸�îîµî©îPîØrpîŠï�î
ï�îîïî…îtî	î‡îò
rsîïÆ�îiïÆrîèïÆ�qîåïÆ�îïÆrîrïÆ�îÕïÆîçqîïÆ�îíïÆrî*ïÆ�îïÆqînïÆ�î 'ïÆrî#ïÆ�qî$ïÆ�î%IïÆrî'¼ïÆ�qî(£ïÆ�î)wïÆrî.”ïÆ�qî.÷ïÆrî2#ïÆ�î2†ïÆ�pîŠï!�î
ï!�îîMîeî	îÂîerpîŠï{�î
ï{�îîïî…îtî	î‡îò
tî)Èïö��������Ã��������TVm$^������������������������������������������������������������������������������������������������������������������������������Fetch:PROC[base:ROPE,index:INT_0]RETURNS[c:CHAR];--fetchesindexedcharacterfromgivenropes--BoundsFaultoccursifindexis>=theropesizeFind:PROC[s1,s2:ROPE,pos1:INT_0,case:BOOL_TRUE]RETURNS[INT];--likeIndex,returnspositionins1wheres2occurs(startslookingatpos1)--returns-1ifnotfound--case=>caseofcharactersissignificantIndex:PROC[s1:ROPE,pos1:INT_0,s2:ROPE,case:BOOL_TRUE]RETURNS[INT];--ReturnsthesmallestcharacterpositionNsuchthat--s2occursins1atNandN>=pos1.Ifs2doesnot--occurins1atorafterpos1,s1.lengthisreturned.--case=>caseofcharactersissignificantIsEmpty:PROC[r:ROPE]RETURNS[BOOL];--returnsLength[r]=0Length:PROC[base:ROPE]RETURNS[INT];--returnsthelengthoftherope(Length[NIL]=0)Replace:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,with:ROPE_NIL]RETURNS[ROPE];--returnsropewithgivenrangereplacedbynew--BoundsFaultoccursifrangeinvalidorresulttoolongSize:PROC[base:ROPE]RETURNS[INT];--Size[base]=Length[base]Substr:PROC[base:ROPE,start:INT_0,len:INT_MaxLen]RETURNS[ROPE];--returnsasubropeofthebase--BoundsFaultoccursiftherangegivenisnotvalid--characterconversions(RRAsez:whyaretheyhere?)Control:PROC[ch:CHAR]RETURNS[CHAR]=INLINE{RETURN[IFchIN['A..'Z]THENch-controlOffsetELSEch]};Upper:PROC[ch:CHAR]RETURNS[CHAR]=INLINE{RETURN[IFchIN['a..'z]THENch-caseOffsetELSEch]};Lower:PROC[ch:CHAR]RETURNS[CHAR]=INLINE{RETURN[IFchIN['A..'Z]THENch+caseOffsetELSEch]};Letter:PROC[ch:CHAR]RETURNS[BOOL]=INLINE{RETURN[chIN['A..'Z]ORchIN['a..'z]]};Digit:PROC[ch:CHAR]RETURNS[BOOL]=INLINE{2���rsîïb!�î^ïb!rîÝïb!�qîÛïb!�îƒïb!rîhïb!�îËïb!qî_ïb!�î3ïb!rîpïb!�îLïb!qîïb!�îúïb!rî"ïb!�î#“ïb!qî%*ïb!�î%þïb!rî+ïb!�î+ïb!qî-ïb!�î-âïb!rî0pïb!�î0Óïb!�pîŠï`{�î
ï`{�îîvîyîdî ¢î$.rpîŠï^Õ�î
ï^Õ�î
îõî%î{î3î Ÿî#5î%î(…rsîï[Š�î^ï[Šrî,ï[Š�qî*ï[Š�îÑï[Šrî·ï[Š�îï[Šî+qî]ï[Š�î1ï[Šrînï[Š�îKï[Šqîÿï[Š�îiï[Šrî!uï[Š�î#ï[Šî$qî'öï[Š�î(¯ï[Šrî+‹ï[Š�qî-ï[Š�î-Ñï[Šrî0Dï[Š�qî1+ï[Š�î1ÿï[Šrî7ï[Š�qî7ï[Šrî9‹ï[Š�î9îï[Š�pîŠïYä�î
ïYä�îî­îõîî›î Aî!úî%Ýî'–î+Åî/áî4Âî6grpîŠïX>�î
ïX>�îî˜îFîœî�rpîŠïV˜�î
ïV˜�îîïî…îtî	î‡îò
rsîïSM�îïSMrîÑïSM�qîÏïSM�îwïSMrî
’ïQ§qî(ïQ§�îüïQ§rî9ïQ§�îïQ§qîÊïQ§�î4ïQ§rî?ïQ§�îÌïQ§îYqî‹ïQ§�î _ïQ§rî"ïQ§�î#yïQ§qî&áïQ§�î'šïQ§rî*vïQ§�qî,ïQ§�î,¼ïQ§rî/.ïQ§�qî0ïQ§�î0êïQ§rî6ïQ§�qî6jïQ§rî8vïQ§�î8ÙïQ§�pîŠïP�î
ïP�îîî^î‚î mî%|�î'î*1rpîŠïN\�î
ïN\�îîºîéîîHîí�î…î)�îÀî!Vî%Lî&Úî(“î+—rpîŠïL¶�î
ïL¶�îî¬îRîî°îiîœîî$¹î&$rpîŠïK�î
ïK�îîïî…îtî	î‡îò
rsîïGÅ�îïGÅrî_ïGÅ�qî\ïGÅ�îïGÅrîéïGÅ�îLïGÅqîÎïGÅ�î¢ïGÅrîßïGÅ�qîÇïGÅ�î›ïGÅrî ¸ïGÅ�qî!ïGÅrî$FïGÅ�î$©ïGÅ�pîŠïF�î
ïF�îî˜î§�îŒ�rsîïBÓ�îiïBÓrî®ïBÓ�qî¬ïBÓ�îSïBÓrî8ïBÓ�îœïBÓqî/ïBÓ�îïBÓrîAïBÓ�qî(ïBÓ�îüïBÓrî"ïBÓ�qî"|ïBÓrî$ˆïBÓ�î$ëïBÓ�pîŠïA.�î
ïA.�îî˜îäîî¦îòîöî(›�î*€rsîï=â�îï=ârî3ï=â�qî1ï=â�îØï=ârî
’ï<<qî‰ï<<�î]ï<<rîšï<<�îwï<<qî�ï<<�îjï<<rîuï<<�îï<<îqî!\ï<<�î!Æï<<rî#Ñï<<�î%^ï<<î+:qî.Îï<<�î/¢ï<<rî2Iï<<�qî3Öï<<�î4¿ï<<rî5âï<<�qî
’ï:—�îfï:—rî„ï:—�qîçï:—rîøï:—�î[ï:—�pîŠï8ñ�î
ï8ñ�îî˜îœî˜î$îçî%4î'rpîŠï7K�î
ï7K�î
îõî%î{î>î#¦î%_î)î+lrsîï4��î^ï4�rîï4��qîþï4��î¦ï4�rî‹ï4��îîï4�qî‚ï4��îVï4�rî“ï4��qî{ï4��îOï4�rî lï4��qî Ïï4�rî"Úï4��î#>ï4��pîŠï2Z�î
ï2Z�î…	îÛ�îÀrsîï/�î^ï/rîVï/�qîTï/�îüï/rîáï/�îDï/qîØï/�î¬ï/rîéï/�îÅï/qîNï/�î¸ï/rî!Äï/�î#Qï/î$Þqî'ªï/�î(ï/rî* ï/�î+­ï/qî1“ï/�î2gï/rî7„ï/�qî7èï/rî:ùï/�î;\ï/�pîŠï-i�î
ï-i�îî˜�îÍîÃîfî²rpîŠï+Ã�î
ï+Ã�î
îõî%î{îÇî!Šî%î&‚î(årpîï(w�îûï(w�îøîã
îîýî ´î#‚î%Öî(Èrsîï%,�îtï%,rîï%,�qîï%,�î¬ï%,rî‘ï%,�îôï%,qîTï%,�îï%,rî¬ï%,�qî”ï%,�îhï%,rî!…ï%,�qî!èï%,rî%@ï%,�î&(ï%,�qî(
ï%,�î(wï%,rî,Žï%,�qîŠï#†�î
^ï#†rîÜï#†�qî?ï#†rîÌï#†�îgï#†�qî²ï#†�îï#†�rînï#†�îÑï#†qîï#†�îÁï#†rî³ï#†�î Mï#†�î!™�î"–qî*èï#†�î+¡ï#†rî.ï#†�î.·ï#†îŠï!àsîï•�î•ï•rîï•�qîï•�îÄï•rîªï•�î
ï•qîlï•�î7ï•rîÅï•�qî¬ï•�î€ï•rî ï•�qî!�ï•rî$Yï•�î%@ï•�qî'&ï•�î'ï•rî+¦ï•�qîŠïï�î
^ïïrîÜïï�qî?ïïrîÌïï�îgïï�qî²ïï�îïï�rînïï�îÑïïqîXïï�îïïrîïï�îïï�î é�î!æ	qî(sïï�î)-ïïrî+¨ïï�î,CïïîŠïIsîïþ�îiïþrî5ïþ�qî3ïþ�îÚïþrî¿ïþ�î#ïþqî‚ïþ�îMïþrîÛïþ�qîÂïþ�î–ïþrî ³ïþ�qî!ïþrî$oïþ�î%Vïþ�qî';ïþ�î'¥ïþrî+¼ïþ�qîŠïX�î
^ïXrîÜïX�qî?ïXrîÌïX�îgïX�qî²ïX�îïX�rînïX�îÑïXqîïX�îÁïXrî³ïX�î MïX�î!™�î#~	qî*ïX�î*ÄïXrî-?ïX�î-ÚïXîŠï²sîïg�îiïgrî*ïg�qî(ïg�îÐïgrîµïg�îïgqîxïg�îBïgrîÐïg�qî·ïg�î‹ïgrî ©ïg�qî!ïgrî$7ïg�î%ïg�qî'ïg�î'mïgrî+„ïg�qîŠïÁ�î
^ïÁrîÜïÁ�î?ïÁqî%ïÁ�îïÁ�rîáïÁ�îDïÁqî{ïÁ�îWïÁ�rî•ïÁ�î0ïÁ�qî{ïÁ�îåïÁ�rî 7ïÁ�î šïÁîŠïsîï
Ð�î•ï
Ðrî…ï
Ð�qî‚ï
Ð�î*ï
Ðrîï
Ð�îrï
ÐqîÒï
Ð�îï
Ðrî*ï
Ð�qîï
Ð�îæï
Ðrî ï
Ð�qî fï
Ðrî#‘ï
Ð�î$yï
Ð�qî&^ï
Ð�î&Çï
Ðrî*Þï
Ð�tî)Èïö�ÿ�������·��������TVm$ö������������������������������������������������������������������������������������������RETURN[chIN['0..'9]]};--***Part2:Extendedoperationsanddefinitions***--Run:PROC[s1:ROPE,pos1:INT_0,s2:ROPE,pos2:INT_0,case:BOOL_TRUE]RETURNS[INT];--ReturnslargestnumberofcharsNsuchthats1startingatpos1--isequaltos2startingatpos2forNchars.Moreformally:--FORiIN[0..N):s1[pos1+i]=s2[pos2+i]--Ifcaseistrue,thencasematters.Match:PROC[pattern,object:ROPE,case:BOOL_TRUE]RETURNS[BOOL];--ReturnsTRUEiffobjectmatchesthepattern,wherethepatternmaycontain--*toindicatethat0ormorecharacterswillmatch.--Ifcaseistrue,thencasematters.SkipTo:PROC[s:ROPE,pos:INT_0,skip:ROPE]RETURNS[INT];--ReturnthelowestpositionNinssuchthats[N]isintheskiprope--andN>=pos.Ifnosuchcharacteroccursins,thenreturns.length.SkipOver:PROC[s:ROPE,pos:INT_0,skip:ROPE]RETURNS[INT];--ReturnthelowestpositionNinssuchthats[N]isNOTintheskiprope--andN>=pos.Ifnosuchcharacteroccursins,thenreturns.length.Map:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,action:ActionType]RETURNS[BOOL];--Appliestheactiontothegivenrangeofcharactersintherope--ReturnsTRUEwhensomeactionreturnsTRUE--BoundsFaultoccursonattemptingtofetchacharacternotintheropeTranslate:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,translator:TranslatorType_NIL]RETURNS[new:ROPE];--appliesthetranslationtogetanewrope--iftheresultingsize>0,thennewdoesnotsharewiththeoriginalrope!--iftranslator=NIL,theidentitytranslationisperformedFlatten:PROC[base:ROPE,start:INT_0,len:INT_MaxLen]RETURNS[Text];--Returnsaflatropefromthegivenrangeofcharacters--BoundsFaultoccursiftheresultinglengthwouldbe>LAST[NAT]FromProc:PROC[len:INT,p:PROCRETURNS[CHAR],maxPiece:INT_MaxLen]RETURNS[ROPE];--returnsanewropegivenaproctoapplyforeachCHARFromRefText:PROC[s:REFREADONLYTEXT]RETURNS[Text];--makesaropefromaREFREADONLYTEXT--causescopyingToRefText:PROC[base:ROPE]RETURNS[REFTEXT];--makesaREFTEXTfromarope3���rqîŠïb!�î
^ïb!rîÜïb!�î?ïb!qî%ïb!�îïb!�rîáïb!�îDïb!îŠï`{îï]/�pîŠï]/�î
ï]/�îî–î§îÙîÝ	î"Xî$û
î+…î.rsîïYä�îïYärî
õïYä�qîóïYä�îšïYärîïX>qî¬ïX>�î€ïX>rî½ïX>�îšïX>qîNïX>�î¸ïX>rîÄïX>�îQïX>îÝqî ïX>�î äïX>rî#!ïX>�î#ýïX>qî'²ïX>�î(ïX>rî*'ïX>�î+´ïX>î-Aqî0©ïX>�î1bïX>rî4>ïX>�qî5ËïX>�î6„ïX>rî8öïX>�qîïV˜�îëïV˜rîïV˜�qîkïV˜rîvïV˜�îÚïV˜�pîŠïTó�î
ïTó�îîîmîRîöî!‹�î##î&@î)î*Êî/ºî1_rpîŠïSM�î
ïSM�îîlîî±îjîZîÿî î"@�î#Øî(Iî+òrpîŠïQ§�î
ïQ§�î	î{�îcî•îï	î Ý�î"Â	rpîŠïP�î
ïP�îîî}îéîîîrsîïL¶�îâïL¶rîlïL¶�qîjïL¶�îïL¶rî÷ïL¶�îZïL¶îqqîïL¶�î×ïL¶rî!ïL¶�î!ñïL¶qî%XïL¶�î&ïL¶rî(íïL¶�qî*zïL¶�î+3ïL¶rî-¦ïL¶�qî.ïL¶�î/aïL¶rî4~ïL¶�qî4âïL¶rî8
ïL¶�î8pïL¶�pîŠïK�î
ïK�îîî‚îFî5î"fî$²î)®î-î/Üî4î7orpîŠïIj�î
ïIj�î�î5îÚîêî¼�îñî©î	î%ƒî(rpîŠïGÅ�î
ïGÅ�îîî}îéîîîrsîïDy�î^ïDyrîÜïDy�qîÙïDy�îïDyrîfïDy�îÉïDyqîKïDy�îïDyrî\ïDy�î9ïDyqî=ïDy�î§ïDyrî²ïDy�î!?ïDyî"Ìqî&3ïDy�î'ïDyrî)EïDy�qî*,ïDy�î+�ïDyrî0ïDy�qî0€ïDyrî2ŒïDy�î2ïïDy�pîŠïBÓ�î
ïBÓ�îîîÙîèî÷�îŽî!4�î"=î%Zî(,î+$î,î.6î0‚î3erpîŠïA.�î
ïA.�îî¤�î<îÒîî¥î™îµî$¡î(Ðî*vî+×î.âî2õrsîï=â�î^ï=ârîï=â�qîï=â�î¶ï=ârî›ï=â�îþï=âqî€ï=â�îTï=ârî‘ï=â�înï=âqîrï=â�îÜï=ârî çï=â�î"tï=âî$qî'hï=â�î(<ï=ârî*zï=â�qî+aï=â�î,5ï=ârî1Rï=â�qî1µï=ârî3Áï=â�î4$ï=â�pîŠï<<�î
ï<<�îîîÙîèî÷�îŽî!4�î"=î%Zî(,î+$î,î0"î1Èî4î6÷rpîŠï:—�î
ï:—�îî¤�î<îÒîî¥î™îµî$¡î(Ðî*vî+×î.âî2õrsîï7K�îâï7KrîCï7K�qî@ï7K�îèï7Krîï5¥qîï5¥�îâï5¥rîï5¥�îûï5¥qî„ï5¥�îîï5¥rîúï5¥�î‡ï5¥îqî!àï5¥�î"Jï5¥rî$Vï5¥�î%ãï5¥î+¾î0P
qîï4��îëï4�rîï4��qîkï4�rî–ï4��îùï4��pîŠï2Z�î
ï2Z�îîÉîî'îÌîî ¤î$fî&
	î,yî.î0krpîŠï0´�î
ï0´�îîî‚îîmî"î'rpîŠï/�î
ï/�î
îõî%î	î"Ñî$vî'Ë�î)�î.ëî1Oî2ôî5Arsîï+Ã�îuï+Ãrî&ï+Ã�qî$ï+Ã�îËï+Ãrîï*qîï*�îâï*rîï*�îûï*qî„ï*�îîï*rîúï*�î‡ï*îqî!àï*�î"Jï*rî$Vï*�î%ãï*î+¾
î2V
î;ò�qî=ï*�î>gï*rî?Šï*�qîï(w�îëï(wrîï(w�îkï(wqîÒï(w�î¦ï(wrîãï(w�îGï(w�pîŠï&Ò�î
ï&Ò�îî|îÈ
î‰î.în�î £î#hrpîŠï%,�î
ï%,�îîWî£î-îÎ�îîîšî"`î%dî'Çî+\î.Xî0¤î5¥rpîŠï#†�î
ï#†�îîW	î{�î`îÞî*î"
î(Æî*2rsîï ;�î^ï ;rîÄï ;�qîÂï ;�îjï ;rîOï ;�î²ï ;qîFï ;�îï ;rîWï ;�î3ï ;qî½ï ;�î &ï ;rî"2ï ;�î#¿ï ;î%Lqî(ï ;�î(‚ï ;rî*Žï ;�î,ï ;qî2ï ;�î2Õï ;rî7òï ;�î8Vï ;pîŠï•�î
ï•�îî�îFî½îÁîÿîKî"×î&šî(=	rpîŠïï�î
ïï�î
îõî%î{îÇî#Qî'oî+\î-+�î.`rsîï¤�î^ï¤rî}ï¤�qî{ï¤�î#ï¤rî
’ïþqîÂïþ�î,ïþrîÎïþ�îªïþqîoïþ�îïþîürîíïþ�qîPïþrî"©ïþ�î#ïþ�î#èqî*€ïþ�î*êïþrî,õïþ�î.‚ïþqî4iïþ�î5=ïþrî:Zïþ�qî:½ïþrî=Îïþ�î>1ïþ�pîŠïX�î
ïX�îî˜�îÍî’î–î"�îWî![î#�î&žî(Æî+írsîï
�î^ï
	rîï
�qîï
�î5ï
rîï
�î}ï
qîÿï
�îÓï
î¯î#±rî&°ï
�qî'—ï
�î(kï
rî-‰ï
�î-ìï
pîŠïg�î
ïg�îî2�îfîjî¨�îÝî.î&ÌrpîŠïÁ�î
ïÁ�îî0rsîïv�îuïvrîïv�qî
ïv�î´ïvrî™ïv�îýïvqîïv�îdïvrî¡ïv�qî‰ïv�î]ïvrî$zïv�qî$Ýïvî'rî*ïv�î*ðïv�pîŠï
Ð�î
ï
Ð�îî2�îfî¸îüî9�întî)Èï�ÿ�������ù��������TVm$Š����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--causescopyingFromChar:PROC[c:CHAR]RETURNS[Text];--makesaropefromacharacterMakeRope:PROC[base:REF,size:INT,fetch:FetchType,map:MapType_NIL,pieceMap:PieceMapType_NIL]RETURNS[ROPE];--Returnsaropeusinguser-suppliedproceduresanddata--theuserproceduresMUSTsurviveaslongastheropedoes!PieceMap:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,action:PieceActionType,mapUser:BOOL_TRUE]RETURNS[BOOL];--Appliestheactiontothegivensubropeinpieces(maxof1piece/Substr,--2pieces/Concat,3pieces/Replace,either1piece/MakeRopeoruseuser's--routine).ReturnsTRUEwhensomeactionreturnsTRUE.--BoundsFaultoccursonattemptingtofetchacharacternotintheropeContainingPiece:PROC[ref:ROPE,index:INT_0]RETURNS[base:ROPE,start:INT,len:INT];--Findthelargestpiececontaingthegivenindexsuchthattheresultis--eitheratextoranobjectvariant.--(NIL,0,0)isreturnediftheindexisNOTinthegivenropeBalance:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,flat:INT_FlatMax]RETURNS[ROPE];--Returnsabalancedrope,possiblywithmuchcopyingofcomponents--flat_MIN[MAX[flat,FlatMax],LAST[NAT]]--len_MIN[MAX[len,0],Size[base]-start]--start<0ORstart>Size[base]=>boundsfault--theresultingmaxDepthwillbelimitedby2+log2[len/flat]VerifyStructure:PROC[s:ROPE]RETURNS[leaves,nodes,maxDepth:INT];--traversethestructureofthegivenrope;returnthenumberofleaves,--nodesandthemaxdepthoftheropeextracheckingisperformedtoverify--invariantsaleafisatextorobjectvariantanodeisanon-NIL,--non-leafvariantsharedleavesandnodesaremultiplycountedVerifyFailed:ERROR;--occurswhenVerifyStructurefindsabadegg--shouldnothappen,ofcourse--***Part3:Miscellaneousdefinitions***--controlOffset:NAT=100B;caseOffset:NAT='a-'A;FetchType:TYPE=PROC[data:REF,index:INT]RETURNS[CHAR];--typeoffetchroutineusedtomakeauserropeMapType:TYPE=PROC[base:REF,start,len:INT,action:ActionType]RETURNS[quit:BOOL_FALSE];4���rpîŠïb4�î
ïb4�îî0rsîï^è�î^ï^èrî”ï^è�qî’ï^è�î9ï^èrîï^è�îï^èqîï^è�îåï^èrîrï^è�qîZï^è�î.ï^èrî"Kï^è�î"®ï^èpîŠï]C�î
ï]C�îî2�îfîjî¨�îÝrsîïY÷�îâïY÷rîïY÷�qî�ïY÷�î§ïY÷rîïXQqîïXQ�îâïXQrîTïXQ�î0ïXQqîUïXQ�î¿ïXQrî`ïXQ�î=ïXQî*	î&hî)üî0G�qî1ÔïXQ�î2¼ïXQrî3ßïXQ�î›ïV¬îkîÐ�qî ]ïV¬�î!EïV¬rî"hïV¬�qî#PïV¬�î$$ïV¬rî)AïV¬�qî)¤ïV¬rî,µïV¬�î-ïV¬�pîŠïU�î
ïU�îî�îFîJîâî"ó	î)£î,FrpîŠïS`�î
ïS`�îîMî1	îáî‘î#î$Çî'Îî)‡î+Óî.×rsîïP�îiïPrî~ïP�qî{ïP�î#ïPrîïNoqîïNo�îâïNorîïNo�îûïNoqî„ïNo�îîïNorîúïNo�î‡ïNoîqî!àïNo�î"JïNorî$VïNo�î%ãïNoî+¾î0Pî›ïLÉqîüïLÉ�îµïLÉrî‘ïLÉ�qîïLÉ�î×ïLÉrîIïLÉ�qî0ïLÉ�îïLÉrî$"ïLÉ�qî$…ïLÉrî'°ïLÉ�î(ïLÉ�pîŠïK#�î
ïK#�îîÉîî'îÌîî ¤î%™î'?î+,î.·î0Z�î1rpîŠïI~�î
ïI~�î�î5
îS�î‡î#î&Ý�î(
î2‹î4Dî6¤rpîŠïGØ�î
ïGØ�îîùî
îzî üî$eî(wî-rpîŠïF2�î
ïF2�î
îõî%î	î"Ñî$vî'Ë�î)�î.ëî1Oî2ôî5ArsîïBç�îtïBç
rî<ïBç�qî9ïBç�îáïBçrîïAAqîïAA�îîïAArî,ïAA�îïAAqîLïAA�î¶ïAArîÂïAA�îOïAAqîæïAA�îºïAArî$ØïAA�î%;ïAAqî(ÎïAA�î)¢ïAArî+àïAA�î,¼ïAAqî0EïAA�î0¯ïAArî2QïAA�î3-ïAAqî5úïAA�î6dïAArî8ïAA�î8iïAA�pîŠï?›�î
ï?›�îî4î€îÛîDî Åî#î&î*Uî-rî0Dî2î6GrpîŠï=õ�î
ï=õ�îîÏ�îîÊîƒîvîerpîŠï<P�î
ï<P�îîøî…î3îŸîýîSîŸî#Xî$Ãî(Vî)üî,Hî/Ôrsîï9�îtï9rî>ï9�qî<ï9�îãï9rîï7^qîï7^�îâï7^rîï7^�îûï7^qî„ï7^�îîï7^rîúï7^�î‡ï7^îqî!àï7^�î"Jï7^rî$Vï7^�î%ãï7^î+¾qî.­ï7^�î/ï7^rî1"ï7^�î2¯ï7^qîï5¹�îëï5¹rîï5¹�qîkï5¹rî|ï5¹�îßï5¹�pîŠï4�î
ï4�îî�îFîãî@î"Jî%Eî(ôî-ëî/	rpîŠï2m�î
ï2m�îîx�îåî!Õ	rpîŠï0Ç�î
ï0Ç�îîB�î¯îírpîŠï/"�î
ï/"�îî�îS�îˆîî;�îp	î Åî#[î'ðrpîŠï-|�î
ï-|�îîMî×îtî	î Ùî%Xî'2rsîï*0�îtï*0
rî®ï*0�qî¬ï*0�îSï*0rî8ï*0�î›ï*0qîï*0�îñï*0rî/ï*0�qîï*0�îêï*0rî%ï*0�î%jï*0î)Ïî.qî5]ï*0�î5Æï*0rî7hï*0�î7Ëï*0�pîŠï(‹�î
ï(‹�îîîOîðî“îßî"lî%éî)üî,Hî1-î2ÑrpîŠï&å�î
ï&å�îîÃîgî³îÅîrîî!aî$eî'ðî-›î/î5_î7rpîŠï%?�î
ï%?�î	î=�îqîî�î³îzî3î#!î'·�î(ìî,*î-–�î.ÊrpîŠï#™�î
ï#™�îîIîßî$î î"µî&wî(Ëî.rîï Nqîóï N�î¬ï Nrîï N�pî
ï¨�î
‡ï¨�î…îµî7îÄî#
�î$Bî&×rpî
ï�î
‡ï�î…îËî.î2îÖrîï·�pîŠï·�î
ï·�îî–î§îÙî
î%î'¯rîïk
qîLïk�î4ïkrî+ïk�îïkîïÆ
qîˆïÆ�îpïÆrîgïÆ�îLïÆîÎ�îËsîïz�î^ïzrîÌïz�qîÊïz�îƒïzrî!ïz�qîïz�î®ïzrî“ïz�îöïzqîtïz�î Hïzrî!»ïz�î"—ïzqî&Ûïz�î'Eïzrî(çïz�qî)Îïz�î*¢ïzrî/¿ïz�qî0"ïzrî3{ïz�î3Þïz�pîŠïÔ�î
ïÔ�îîæî‰îßî‚î’î7î"ã�î$î&ýrsîï‰�îâï‰rî2ï‰�qî/ï‰�îéï‰rî‡ï‰�qî
ï
ã�î
¶ï
ãrî›ï
ã�îþï
ãqî’ï
ã�îfï
ãrîØï
ã�î´ï
ãîqîéï
ã�îSï
ãrîõï
ã�î Ñï
ãî%c
qî-Fï
ã�î.ï
ãrî37ï
ã�î3šï
ãqî6øï
ã�î7±ï
ãrî:ï
ã�qî<ï
ã�î<Óï
ãrî?·ï
ã�î@ï
ã�tî)Èïö����������������TVm$Ó������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--typeofuserroutineusedtomapoverasubrope--returnsTRUEifsomeactionreturnsTRUEActionType:TYPE=PROC[c:CHAR]RETURNS[quit:BOOL_FALSE];--typeofroutineappliedwhenmapping--returnsTRUEtoquitfromMapTranslatorType:TYPE=PROC[old:CHAR]RETURNS[new:CHAR];--typeofroutinesuppliedtoTranslatePieceMapType:TYPE=PROC[base:REF,start,len:INT,action:PieceActionType]RETURNS[quit:BOOL_FALSE];--typeofroutineusedtopiecewisemapoverasubrope--returnsTRUEifsomeactionreturnsTRUEPieceActionType:TYPE=PROC[base:ROPE,start:INT,len:INT]RETURNS[quit:BOOL_FALSE];--typeofroutineappliedwhenmappingpieces--returnsTRUEtoquitfromPieceMapRopeRep:PRIVATETYPE=RECORD[SELECTtag:*FROMtext=>[length:NAT,text:PACKEDSEQUENCEmax:CARDINALOFCHAR],node=>[SELECTcase:*FROMsubstr=>[size:INT,base:ROPE,start:INT,depth:INTEGER],concat=>[size:INT,base,rest:ROPE,pos:INT,depth:INTEGER],replace=>[size:INT,base,replace:ROPE,start,oldPos,newPos:INT,depth:INTEGER],object=>[size:INT,base:REF,fetch:FetchType,map:MapType,pieceMap:PieceMapType]ENDCASE]ENDCASE];MaxLen:INT=LAST[INT];FlatMax:CARDINAL=24;Text:TYPE=REFTextRep;--thesmall,flatvarianthandleTextRep:TYPE=RopeRep[text];--usefulforcreatingnewtextvariantsEND.Forthosewhocare,thisistheofficialexplanationoftheRopeRepvariants:Note:NILisallowedasavalidROPE.Note:ALLintegercomponentsoftherepresentationmustbenon-negative.SELECTx:xFROMtext=>{--[0..x.length)istherangeofcharindexes--[0..x.max)isthenumberofcharsofstoragereserved--allRopeoperationscreatingnewtextobjectsinitx.length=x.max5���rpîŠïb&�î
ïb&�îîæî‰înîî!îÆî!Áî$¯�î%ärpîŠï`€�î
ï`€�îî˜îî^îÈîÚî$qrsîï]5�îtï]5rî\ï]5�qîYï]5�îï]5rî°ï]5�qî•ï]5�î=ï]5rî"ï]5�î…ï]5qîï]5�îéï]5rî!vï]5�qî"^ï]5�î#2ï]5rî(Oï]5�î(²ï]5qî,ï]5�î,Éï]5rî/¤ï]5�qî11ï]5�î1êï]5rî4Ïï]5�î52ï]5�pîŠï[�î
ï[�îîæî‰î,îÓîUrpîŠïYé�î
ïYé�îî˜îî­îrî¯rsîïVž�îuïVžrî¯ïVž�qî­ïVž�îfïVžrîïVž�qîéïVž�î‘ïVžrîvïVž�îÙïVžqî!¼ïVž�î"‡ïVžrî%ïVž�qî%üïVž�î&ÐïVžrî+íïVž�î,PïVžqî/¸ïVž�î0ƒïVžrî3ïVž�î3sïVž�pîŠïTø�î
ïTø�îîæî‰î,îcîrsîïQ¬�îiïQ¬
rîmïQ¬�qîjïQ¬�î#ïQ¬rîÁïQ¬�qî
’ïP�î:ïPrîïP�î‚ïPqîïP�îêïPrî\ïP�î9ïPî¡qînïP�î×ïPrî yïP�î!VïPî%çqî›ïNa�îoïNarîŒïNa�îïïNaqîMïNa�îïNarîâïNa�qîoïNa�î(ïNarî!ïNa�î!pïNa�pîŠïL»�î
ïL»�îîæî‰î,î<îáî!³î$®î'�î(ÒrpîŠïK�î
ïK�îî˜îî^îÈîÚî$qrsîïGÊ�îiïGÊ
rî–ïGÊ�qî”ïGÊ�îMïGÊrîëïGÊ�qî
’ïF$�î:ïF$rîïF$�î‚ïF$qîïF$�îêïF$rî'ïF$�îïF$qîïF$�î÷ïF$rî˜ïF$�îuïF$qî"BïF$�î"¬ïF$rî$MïF$�qî%5ïF$�î&	ïF$rî+&ïF$�î+‰ïF$qî.æïF$�î/ ïF$rî2{ïF$�qî4ïF$�î4ÁïF$rî7¦ïF$�î8	ïF$�pîŠïD~�î
ïD~�îîæî‰î,îÓîUî$ÒrpîŠïBÙ�î
ïBÙ�îî˜îî­îrî¯rîï?qî%ï?�îÌï?î…rîÜï?�qîŠï=ç�î
^ï=çrî
’ï<B�qî
õï<B�î•ï<Brî®ï<B�îï<Bîp�qî¥ï<B�î^ï<Brîï:œî×îlqî‚ï:œ�îkï:œrîøï:œ�îÔï:œqî ï:œ�î ­ï:œî%;rî+äï:œ�î-ï:œqî/bï:œ�î0,ï:œî6î8rî;Zï:œ�î;½ï:œ�îï8öî’î'�qîŠï8ö�î*ï8örîCï8ö�îÞï8öî«�qîßï8ö�î˜ï8örîÎï7PîÜîrqîúï7P�îcï7Prî!ï7P�î!âï7Pqî%uï7P�î&Iï7Prî(‡ï7P�î)cï7Pqî,ìï7P�î-Vï7Prî.øï7P�î/Ôï7Pqî4;ï7P�î4¥ï7Prî9{ï7P�î9Þï7P�îÎï5«îî´qî<ï5«�î¦ï5«rî!Gï5«�î"$ï5«î%—qî(±ï5«�î)…ï5«rî+Âï5«�î,Ÿï5«qî/£ï5«�î0
ï5«rî1®ï5«�î~ï4qîäï4�îNï4rî$$ï4�î$‡ï4�îÎï2_îŒî"qîªï2_�î ï2_rî!µï2_�î"’ï2_î&qî+<ï2_�î,ï2_rî.Mï2_�îï0¹îjî#=qî(¶ï0¹�î)ï0¹rî*Áï0¹�î+žï0¹qî0ï0¹�î0nï0¹rî5Dï0¹�î5§ï0¹�îÎï/îçî}qîï/�înï/rî!ï/�î!íï/qî%€ï/�î&Tï/rî'Çï/�î(£ï/î,	î~ï-nîî$´î+„qîÎï+È�îˆï+ÈrîLï+È�qîï*"�îØï*"rîï*"�î�ï*"�îï&×qî~ï&×�îèï&×rîóï&×�qîØï&×�î’ï&×rî½ï&×�qî ï&×rî,ï&×�îï&×�îï%1qî‰ï%1�îTï%1rî*ï%1�îï%1îï#‹qî+ï#‹�îäï#‹rî‚ï#‹�qîgï#‹�î;ï#‹rîï#‹�îÿï#‹pî6ï#‹�î°ï#‹�î­î ùî$çî']î+órîï!æqî ï!æ�îYï!ærî÷ï!æ�îÜï!æ
pî zï!æ�î óï!æ�î!ñî%àî(î-8î/ýî2Ärqîïš�î:ïšrî	ïš�î
yï©î
$îÃîÇîî¯îîzî"
î)€î+9î-™î3Ãî
yï]qîhï]�îQï]rîÞï]�îAï]�îJî_î
�î7qîžï]�îrï]rî ¯ï]�î
yïqîhï�î<ïrîï�î{ïî´	îaîî!y
î*pî-Øî/ÉqîïÆ�î ïÆrî:ïÆ�îêïÆ�îè�qîïÆ�îÕïÆrîŠï!îAî×�pî‡ï!�îï!�îþî„îïî<î"þî$¢î'²rpî0ï{�îªï{�î§	î îŒîØî!½î#aî&öî(™î-Brpîï
Õ�î™ï
Õ�î–î‘î	îŠî!»î$€î'Fî+¹î.2î3o�î5Ttî)Èïý�ÿ�������Å��������TVm$‰������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������--x.length<=x.maxisrequired--thebitpatternofthetextISIDENTICALtoTEXTandStringBody!!!!};node=>{SELECTx:xFROMsubstr=>{--[0..x.size)istherangeofcharindexes--x.basecontainscharsindexedby[0..x.size)--[0..x.size)inx==>[x.start..x.start+x.size)inx.base--Size[x.base]>=x.start+x.base};concat=>{--[0..x.size)istherangeofcharindexes--x.basecontainscharsindexedby[0..x.pos)--[0..x.pos)inx==>[0..x.pos)inx.base--x.restcontainsthecharsindexedby[x.pos..x.size)--[x.pos..x.size)inx==>[0..x.size-x.pos)inx.base--x.pos=Size[x.base]ANDx.size=x.pos+Size[x.rest]};replace=>{--[0..x.size)istherangeofcharindexes--x.basecontainscharsindexedby[0..x.start),[x.newPos..x.size)--[0..x.start)inx==>[0..x.start)inx.base--[x.newPos..x.size)inx==>[x.oldPos..Size[x.base])inx.base--x.restcontainsthecharsindexedby[x.start..x.newPos)--[x.start..x.newPos)inx=>[0..x.newPos-x.start)inx.base--x.size>=x.newPos>=x.startANDx.oldPos>=x.start--x.size-x.newPos=Size[x.base]-x.oldPos};object=>{--[0..x.size)istherangeofcharindexes--x.baseifthedataneededbytheuser-suppliedoperations--x.fetch[x.base,i]shouldfetchtheithcharANDx.fetch#NIL--x.map[x.base,st,len,action]--implementsMap[x,st,len,action]--x.pieceMap[x.base,st,len,action]shouldbehave--implementsPieceMap[x,st,len,action,TRUE]--itisOKtohavex.map=NILORx.pieceMap=NIL};ENDCASE=>ERRORNoRope}ENDCASE=>ERRORNoRope};6��rpîïb&�î™ïb&�î–îÓîiîšîrpîï`€�î™ï`€�î–îâîêîî1î}î Cî"?î*éî,Žî0Òî3u
rîï^ÚîŠï]5îüî
ï[�qî
¾ï[�î^ï[rîwï[�î'ï[qîÕï[�îŽï[rî›ïYéî©î
ïXC�pî
¾ïXC�î8ïXC�î5
î>îªîöî¹î\î!mrpî
’ïVž�îïVž�î	î-îîî!î"ô
rpî
’ïTø�îïTø�î
îîÁ�îîî+,î,Òrpî
’ïSR�îïSR�î	î~îîP�î6rî
’ïQ¬îŠïPîÚî
ïNa�pî
¾ïNa�î8ïNa�î5
î>îªîöî¹î\î!mrpî
’ïL»�îïL»�î	î-îîî!î"ô	rpî
’ïK�îïK�î	îãî‰�îÔîÊ	î"›î$Arpî
’ïIp�îïIp�î	îÀîîaîöî"ùî$Órpî
’ïGÊ�îïGÊ�îîoî�î`îVî(Üî*‚rpî
’ïF$�îïF$�î	î’�îwîìî•î#U�î%:î(Ã�î*¨rî
’ïD~îŠïBÙîHî
ïA3�pî
¾ïA3�î8ïA3�î5
î>îªîöî¹î\î!mrpî
’ï?�îï?�î	î-îîî!î"ôî)Ñrpî
’ï=ç�îï=ç�îî—î=�îˆî~î$î%©rpî
’ï<B�îï<B�îîæîŒ�îØî!Îî/Úî1€rpî
’ï:œ�îï:œ�î	îÀîîaîöî"ùî$Órpî
’ï8ö�îï8ö�îîcî�îTî éî-dî/
rpî
’ï7P�îï7P�î	îÊî_î`îõî"2î%Ûî+^î-ôrpî
’ï5«�îï5«�î	îÊ�îÈîÈ�î­î#"�î$ rî
’ï4îŠï2_î£î
ï0¹�pî
¾ï0¹�î8ï0¹�î5
î>îªîöî¹î\î!mrpî
’ï/�îï/�î	î-îƒîÏîÕîIî #î"oî*€	rpî
’ï-n�îï-n�î	îäî9îî Õî#!î%5î(Fî+ïî0d�î2Irpî
’ï+È�îï+È�î	î‰îZîórpî
’ï*"�îï*"�î	î"îèî¹î Rrpî
’ï(}�îï(}�î	î«î|îî#•î'Ûrpî
’ï&×�îï&×�î	î"
îî Ôî#mî'×rpî
’ï%1�îï%1�î	îaîÍîmîî9îS�î8î"^î$ô	î,0�î.rî
’ï#‹qîŠï!ærîrï!æ�îÒï!æ�qîï!æ�îÀï!ærî‚ï!æ�î¥ï!æqîŠï @�î
Cï @rîrï @�îÒï @�qîï @�îÀï @rî‚ï @�î¥ï @tî)Èïý�ÿ�������0��������TVm$����������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿ	HELVETICA������������þŸ����ÿ
TIMESROMAN����������þŸ����ÿ
TIMESROMAN�����������þŸ����ÿ
TIMESROMAN�����������þæ�����ÿ
TIMESROMAN����������þŸ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?����
�-�����ø����
�«���'�	�“���0��R��6���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j/�9��7���š)l��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ	Rope.mesa��������������������������������������������������������������������������16-Dec-82 16:25:16���������������������������������������������������������������������������������������������������������������������������������������������������������