DIRECTORY AlpineEnvironment, Atom, DB, DBCommon, DBDefs, DBModel, DBStats, Rope; DBImpl: CEDAR MONITOR IMPORTS DBModel, DBStats, DB EXPORTS DB = BEGIN OPEN DBCommon, DBDefs; ROPE: TYPE = Rope.ROPE; Initialize: PUBLIC ENTRY PROC[nCachePages: NAT, cacheFileName: ROPE] = { ENABLE UNWIND => NULL; DBModel.Initialize[nCachePages, cacheFileName]; RETURN}; OpenTransaction: PUBLIC ENTRY PROC[segment: Segment, useTrans: TransactionHandle] RETURNS[trans: TransactionHandle, schemaInvalid: BOOL] = { ENABLE UNWIND => DBStats.Stopping[OpenTransaction]; DBStats.Starting[OpenTransaction]; [trans, schemaInvalid] _ DBModel.OpenTransaction[segment, useTrans]; DBStats.Stopping[OpenTransaction] }; MarkTransaction: PUBLIC ENTRY PROC[trans: TransactionHandle] = { ENABLE UNWIND => DBStats.Stopping[MarkTransaction]; DBModel.MarkTransaction[trans]; DBStats.Stopping[MarkTransaction] }; AbortTransaction: PUBLIC ENTRY PROC[trans: TransactionHandle] = { ENABLE UNWIND => DBStats.Stopping[AbortTransaction]; DBModel.AbortTransaction[trans]; DBStats.Stopping[AbortTransaction] }; CloseTransaction: PUBLIC ENTRY PROC[trans: TransactionHandle] = { ENABLE UNWIND => DBStats.Stopping[CloseTransaction]; DBModel.CloseTransaction[trans]; DBStats.Stopping[CloseTransaction] }; DeclareSegment: PUBLIC ENTRY PROC[filePath: ROPE, segment: Segment, number: SegmentIndex, lock: AlpineEnvironment.LockOption, readonly: BOOL, createIfNotFound: BOOL, nPagesInitial, nPagesPerExtent: INT] = { ENABLE UNWIND => NULL; DBModel.DeclareSegment[filePath, segment, number, lock, readonly, createIfNotFound, nPagesInitial, nPagesPerExtent] }; EraseSegment: PUBLIC ENTRY PROC[segment: Segment, useTrans: TransactionHandle] RETURNS [trans: TransactionHandle] = { ENABLE UNWIND => NULL; RETURN[DBModel.OpenTransaction[segment: segment, useTrans: useTrans, eraseAfterOpen: TRUE].trans] }; GetSegmentInfo: PUBLIC ENTRY PROC[segment: Segment] RETURNS [filePath: ROPE, readOnly: BOOL] = { ENABLE UNWIND => NULL; [filePath, readOnly] _ DBModel.GetSegmentInfo[segment] }; SegmentsForTransaction: PUBLIC PROC[trans: TransactionHandle] RETURNS [segments: SegmentList] = { segments _ IF trans = NIL THEN NIL ELSE trans.segments }; DeclareDomain: PUBLIC ENTRY PROC [name: ROPE, segment: Segment] RETURNS [d: Domain] = { ENABLE UNWIND => DBStats.Stopping[DeclareDomain]; IF NOT DBModel.initialized THEN ERROR Error[DatabaseNotInitialized]; d _ DBModel.DeclareDomain[name, segment]; DBStats.Stopping[DeclareDomain] }; LookupDomain: PUBLIC ENTRY PROC [name: ROPE, segment: Segment] RETURNS [d: Domain] = { ENABLE UNWIND => DBStats.Stopping[LookupDomain]; IF NOT DBModel.initialized THEN ERROR Error[DatabaseNotInitialized]; d _ DBModel.LookupDomain[name, segment]; DBStats.Stopping[LookupDomain] }; DestroyDomain: PUBLIC ENTRY PROC [d: Domain] = { ENABLE UNWIND => DBStats.Stopping[DestroyDomain]; DBModel.DestroyDomain[d]; DBStats.Stopping[DestroyDomain] }; DomainInfo: PUBLIC ENTRY PROC[d: Domain] RETURNS[name: ROPE, segment: DBCommon.Segment] = TRUSTED { ENABLE UNWIND => NULL; IF d.key # DBModel.CacheKey[d.segment] THEN ERROR Error[IllegalDomain]; segment _ d.segment; name _ d.name }; DomainsByName: PUBLIC ENTRY PROC [segment: Segment, lowName, highName: ROPE, start: FirstLast] RETURNS[ds: DomainSet] = { ENABLE UNWIND => NULL; ds _ DBModel.DomainsByName[segment, lowName, highName, start] }; NextDomain: PUBLIC ENTRY PROC [ds: DomainSet] RETURNS [d: Domain] = { ENABLE UNWIND => NULL; d _ DBModel.NextDomain[ds] }; PrevDomain: PUBLIC ENTRY PROC [ds: DomainSet] RETURNS [d: Domain] = { ENABLE UNWIND => NULL; d _ DBModel.PrevDomain[ds] }; ReleaseDomainSet: PUBLIC ENTRY PROC [ds: DomainSet] = { ENABLE UNWIND => NULL; DBModel.ReleaseDomainSet[ds] }; DeclareSubType: PUBLIC ENTRY PROC [of, is: Domain] = { ENABLE UNWIND => NULL; DBModel.DeclareSubType[of, is] }; DestroySubType: PUBLIC ENTRY PROC [of, is: Domain] = { ENABLE UNWIND => NULL; DBModel.DestroySubType[of, is] }; SuperType: PUBLIC ENTRY PROC [d: Domain] RETURNS[super: Domain] = { ENABLE UNWIND => NULL; RETURN[DBModel.SuperType[d]] }; SubTypes: PUBLIC ENTRY PROC [d: Domain] RETURNS[subs: DomainSet] = { ENABLE UNWIND => NULL; RETURN[DBModel.SubTypes[d]] }; TypeForDomain: PUBLIC ENTRY PROC[d: Domain] RETURNS[type: TypeCode] = { ENABLE UNWIND => NULL; RETURN[DBModel.TypeForDomain[d]] }; DeclareRelation: PUBLIC ENTRY PROC [name: ROPE, segment: Segment, fields: DB.FieldSpec, keys: LIST OF Index] RETURNS [r: Relation] = { ENABLE UNWIND => DBStats.Stopping[DeclareRelation]; DBStats.Starting[DeclareRelation]; r _ DBModel.DeclareRelation[name, segment, fields, keys]; DBStats.Stopping[DeclareRelation] }; LookupRelation: PUBLIC ENTRY PROC [name: ROPE, segment: Segment] RETURNS [r: Relation] = { ENABLE UNWIND => DBStats.Stopping[LookupRelation]; DBStats.Starting[LookupRelation]; r _ DBModel.LookupRelation[name, segment]; DBStats.Stopping[LookupRelation] }; DestroyRelation: PUBLIC ENTRY PROC [r: Relation] = { ENABLE UNWIND => DBStats.Stopping[DestroyRelation]; DBStats.Starting[DestroyRelation]; DBModel.DestroyRelation[r]; DBStats.Stopping[DestroyRelation] }; RelationInfo: PUBLIC ENTRY PROC [r: Relation] RETURNS[name: ROPE, segment: DBCommon.Segment] = TRUSTED { ENABLE UNWIND => NULL; IF r.key # DBModel.CacheKey[r.segment] THEN ERROR Error[IllegalRelation]; segment _ r.segment; name _ r.name }; RelationsByName: PUBLIC ENTRY PROC [segment: Segment, lowName, highName: ROPE, start: FirstLast] RETURNS[rs: RelationSet] = { ENABLE UNWIND => NULL; rs _ DBModel.RelationsByName[segment, lowName, highName, start] }; NextRelation: PUBLIC ENTRY PROC [rs: RelationSet] RETURNS [r: Relation] = { ENABLE UNWIND => NULL; r _ DBModel.NextRelation[rs] }; PrevRelation: PUBLIC ENTRY PROC [rs: RelationSet] RETURNS [r: Relation] = { ENABLE UNWIND => NULL; r _ DBModel.PrevRelation[rs] }; ReleaseRelationSet: PUBLIC ENTRY PROC [rs: RelationSet] = { ENABLE UNWIND => NULL; DBModel.ReleaseRelationSet[rs] }; NameToField: PUBLIC ENTRY PROC [r: Relation, name: ROPE] RETURNS[exists: BOOL, pos: CARDINAL] = { ENABLE UNWIND => NULL; [exists, pos] _ DBModel.NameToField[r: r, name: name] }; FieldCount: PUBLIC ENTRY PROC[r: Relation] RETURNS[count: CARDINAL] = { ENABLE UNWIND => NULL; count _ DBModel.FieldCount [r: r] }; FieldInfo: PUBLIC ENTRY PROC [r: Relation, pos: CARDINAL] RETURNS [field: DB.Field] = { ENABLE UNWIND => NULL; field _ DBModel.FieldInfo[r, pos] }; DeclareIndex: PUBLIC ENTRY PROC [r: Relation, index: Index] = { ENABLE UNWIND => DBStats.Stopping[DeclareIndex]; DBStats.Starting[DeclareIndex]; DBModel.DeclareIndex[r, index]; DBStats.Stopping[DeclareIndex] }; DestroyIndex: PUBLIC ENTRY PROC [r: Relation, index: Index] = { ENABLE UNWIND => DBStats.Stopping[DestroyIndex]; DBStats.Starting[DestroyIndex]; DBModel.DestroyIndex[r, index]; DBStats.Stopping[DestroyIndex] }; Keys: PUBLIC ENTRY PROC[r: Relation] RETURNS[keys: LIST OF Index] = { keys _ DBModel.Keys[r] }; Indices: PUBLIC ENTRY PROC[r: Relation] RETURNS[indices: LIST OF Index] = { indices _ DBModel.Indices[r] }; DeclareEntity: PUBLIC ENTRY PROC[d: Domain, name: ROPE] RETURNS[e: Entity] = { ENABLE UNWIND => DBStats.Stopping[DeclareEntity]; DBStats.Starting[DeclareEntity]; e _ DBModel.DeclareEntity[d, name]; DBStats.Stopping[DeclareEntity]}; LookupEntity: PUBLIC ENTRY PROC[d: Domain, name: ROPE] RETURNS[e: Entity] = { ENABLE UNWIND => DBStats.Stopping[LookupEntity]; DBStats.Starting[LookupEntity]; e _ DBModel.LookupEntity[d, name]; DBStats.Stopping[LookupEntity] }; CreateRelship: PUBLIC ENTRY PROC[r: Relation, init: ValueSequence] RETURNS[t: Relship] = { ENABLE UNWIND => DBStats.Stopping[CreateRelship]; DBStats.Starting[CreateRelship]; t _ DBModel.CreateRelship[r, init]; DBStats.Stopping[CreateRelship] }; LookupRelship: PUBLIC ENTRY PROC[r: Relation, key: Index, val: ValueSequence] RETURNS[t: Relship] = { ENABLE UNWIND => DBStats.Stopping[LookupRelship]; DBStats.Starting[LookupRelship]; t _ DBModel.LookupRelship[r, key, val]; DBStats.Stopping[LookupRelship] }; oneLittleValueSequence: ValueSequence _ NEW[ValueSequenceObject[1]]; LookupWithSimpleKey: PUBLIC ENTRY PROC[r: Relation, key: Index, val: Value] RETURNS[t: Relship] = TRUSTED { ENABLE UNWIND => DBStats.Stopping[LookupRelship]; DBStats.Starting[LookupRelship]; IF key.fields.count # 1 THEN ERROR DB.Error[MismatchedAttributeValueType]; oneLittleValueSequence[0] _ val; t _ DBModel.LookupRelship[r, key, oneLittleValueSequence]; DBStats.Stopping[LookupRelship] }; DestroyEntity: PUBLIC ENTRY PROC[e: Entity] = { ENABLE UNWIND => DBStats.Stopping[DestroyEntity]; DBStats.Starting[DestroyEntity]; DBModel.DestroyEntity[e]; DBStats.Stopping[DestroyEntity] }; DestroyRelship: PUBLIC ENTRY PROC[t: Relship] = { ENABLE UNWIND => DBStats.Stopping[DestroyRelship]; DBStats.Starting[DestroyRelship]; DBModel.DestroyRelship[t]; DBStats.Stopping[DestroyRelship] }; SetF: PUBLIC ENTRY PROC[t: Relship, field: CARDINAL, v: Value] = { ENABLE UNWIND => DBStats.Stopping[SetF]; DBStats.Starting[SetF]; DBModel.SetF[t, field, v]; DBStats.Stopping[SetF] }; GetF: PUBLIC ENTRY PROC[t: Relship, field: CARDINAL] RETURNS [v: Value _ [null[]]] = TRUSTED { ENABLE UNWIND => DBStats.Stopping[GetF]; DBStats.Starting[GetF]; v _ DBModel.GetF[t, field]; DBStats.Stopping[GetF] }; SetP: PUBLIC ENTRY PROC[e: Entity, r: Relation, field: CARDINAL, v: Value] = { ENABLE UNWIND => DBStats.Stopping[SetP]; DBStats.Starting[SetP]; DBModel.SetP[e, r, field, v]; DBStats.Stopping[SetP] }; GetP: PUBLIC ENTRY PROC[e: Entity, r: Relation, field: CARDINAL] RETURNS[v: Value_ [null[]]] = TRUSTED { ENABLE UNWIND => DBStats.Stopping[GetP]; DBStats.Starting[GetP]; v _ DBModel.GetP[e, r, field]; DBStats.Stopping[GetP] }; DomainEq: PUBLIC PROC [d1, d2: Domain] RETURNS[BOOL] = { RETURN[DBModel.DomainEq[d1, d2]] }; RelationEq: PUBLIC PROC [r1, r2: Relation] RETURNS[BOOL] = { RETURN[DBModel.RelationEq[r1, r2]] }; AttributeEq: PUBLIC PROC [a1, a2: Attribute] RETURNS[BOOL] = { RETURN[DBModel.AttributeEq[a1, a2]] }; NullDomain: PUBLIC PROC [d: Domain] RETURNS[BOOLEAN] = { RETURN[DBModel.NullDomain[d]] }; NullRelation: PUBLIC PROC [r: Relation] RETURNS[BOOLEAN] = { RETURN[DBModel.NullRelation[r]] }; EntityInfo: PUBLIC ENTRY PROC [e: Entity] RETURNS [name: ROPE, domain: Domain] = { ENABLE UNWIND => NULL; [name, domain] _ DBModel.EntityInfo[e] }; RelationOf: PUBLIC ENTRY PROC[t: Relship] RETURNS [Relation] = { ENABLE UNWIND => NULL; RETURN[DBModel.RelationOf[t]] }; RelationSubset: PUBLIC ENTRY PROC[r: Relation, index: Index, constraint: Constraint, start: FirstLast] RETURNS [rs: RelshipSet] = { ENABLE UNWIND => DBStats.Stopping[RelationSubset]; DBStats.Starting[RelationSubset]; rs _ DBModel.RelationSubset[r, index, constraint, start]; DBStats.Stopping[RelationSubset] }; NextRelship: PUBLIC ENTRY PROC[rs: RelshipSet] RETURNS [t: Relship] = { ENABLE UNWIND => DBStats.Stopping[NextRelship]; DBStats.Starting[NextRelship]; t _ DBModel.NextRelship[rs]; DBStats.Stopping[NextRelship] }; PrevRelship: PUBLIC ENTRY PROC[rs: RelshipSet] RETURNS [t: Relship] = { ENABLE UNWIND => DBStats.Stopping[PrevRelship]; DBStats.Starting[PrevRelship]; t _ DBModel.PrevRelship[rs]; DBStats.Stopping[PrevRelship] }; ReleaseRelshipSet: PUBLIC ENTRY PROC [rs: RelshipSet] = {ENABLE UNWIND => NULL; DBModel.ReleaseRelshipSet[rs]}; DomainSubset: PUBLIC ENTRY PROC[d: Domain, lowName, highName: ROPE, start: FirstLast] RETURNS [es: EntitySet] = { ENABLE UNWIND => DBStats.Stopping[DomainSubset]; DBStats.Starting[DomainSubset]; es _ DBModel.DomainSubset[d, lowName, highName, start]; DBStats.Stopping[DomainSubset]; RETURN[es] }; NextEntity: PUBLIC ENTRY PROC[es: EntitySet] RETURNS [e: Entity] = { ENABLE UNWIND => DBStats.Stopping[NextEntity]; DBStats.Starting[NextEntity]; e _ DBModel.NextEntity[es]; DBStats.Stopping[NextEntity]; }; PrevEntity: PUBLIC ENTRY PROC[es: EntitySet] RETURNS [e: Entity] = { ENABLE UNWIND => DBStats.Stopping[PrevEntity]; DBStats.Starting[PrevEntity]; e _ DBModel.PrevEntity[es]; DBStats.Stopping[PrevEntity]; }; ReleaseEntitySet: PUBLIC ENTRY PROC[es: EntitySet] = { ENABLE UNWIND => NULL; DBModel.ReleaseEntitySet[es]}; RelshipsForEntity: PUBLIC ENTRY PROC [e: Entity] RETURNS [rs: RelshipSet] = { ENABLE UNWIND => NULL; RETURN[DBModel.RelshipsForEntity[e]] }; RelshipsWithEntityField: PUBLIC ENTRY PROC[r: Relation, field: CARDINAL, val: Entity] RETURNS[rs: RelshipSet] = { ENABLE UNWIND => NULL; RETURN[DBModel.RelshipsWithEntityField[r, field, val]] }; RelationsOf: PUBLIC ENTRY PROC[d: Domain] RETURNS[rs: RelationSet] = { ENABLE UNWIND => NULL; rs _ DBModel.RelationsOf[d] }; L2VS: PUBLIC PROC[vals: LIST OF Value] RETURNS[seq: ValueSequence] = TRUSTED { length: CARDINAL _ 0; IF vals = NIL THEN RETURN[NIL]; FOR vL: LIST OF Value _ vals, vL.rest UNTIL vL = NIL DO length _ length + 1 ENDLOOP; seq _ NEW[ValueSequenceObject[length]]; length _ 0; FOR vL: LIST OF Value _ vals, vL.rest UNTIL vL = NIL DO seq[length] _ vL.first; length _ length + 1 ENDLOOP }; L2FS: PUBLIC PROC[vals: LIST OF DB.Field] RETURNS[seq: DB.FieldSpec] = TRUSTED { length: CARDINAL _ 0; IF vals = NIL THEN RETURN[NIL]; FOR vL: LIST OF DB.Field _ vals, vL.rest UNTIL vL = NIL DO length _ length + 1 ENDLOOP; seq _ NEW[DB.FieldSpecObject[length]]; length _ 0; FOR vL: LIST OF DB.Field _ vals, vL.rest UNTIL vL = NIL DO seq[length] _ vL.first; length _ length + 1 ENDLOOP }; L2F: PUBLIC PROC[vals: LIST OF CARDINAL] RETURNS[seq: FieldSequence] = TRUSTED { length: CARDINAL _ 0; IF vals = NIL THEN RETURN[NIL]; FOR vL: LIST OF CARDINAL _ vals, vL.rest UNTIL vL = NIL DO length _ length + 1 ENDLOOP; seq _ NEW[FieldSequenceObject[length]]; length _ 0; FOR vL: LIST OF CARDINAL _ vals, vL.rest UNTIL vL = NIL DO seq[length] _ vL.first; length _ length + 1 ENDLOOP }; L2C: PUBLIC PROC[vals: LIST OF ValueConstraint] RETURNS[seq: Constraint] = TRUSTED { length: CARDINAL _ 0; IF vals = NIL THEN RETURN[NIL]; FOR vL: LIST OF DBDefs.ValueConstraint _ vals, vL.rest UNTIL vL = NIL DO length _ length + 1 ENDLOOP; seq _ NEW[ConstraintObject[length]]; length _ 0; FOR vL: LIST OF ValueConstraint _ vals, vL.rest UNTIL vL = NIL DO seq[length] _ vL.first; length _ length + 1 ENDLOOP }; Error: PUBLIC SIGNAL [code: DB.ErrorCode] = CODE; Aborted: PUBLIC ERROR = CODE; Failure: PUBLIC ERROR [what: ATOM, info: ROPE] = CODE; InternalError: PUBLIC ERROR = CODE; { DBStats.Initialize[] } END.  File: DBImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Purpose: Monitored interface to DB, to keep only one client in database system at a time. Contains one ENTRY per DB procedure (except those that need not be monitored, like Eq). The procs simply call the internal procs in the DBModel*Impls. Created by Haugeland and Cattell, April 1982 Last edited by: Rick Cattell on November 2, 1983 10:13 am Willie-Sue, February 22, 1985 9:20:26 am PST Donahue, March 10, 1986 8:49:40 am PST Widom, September 13, 1985 2:56:52 pm PDT Part 1: Global top-level operations Open a new transaction onto an empty database Part 2: Schema-definition and -interrogation operations Part 3: Primitive operations Part 4: Aggregate operations Miscellaneous operations Errors Initialization Κƒ˜šœ™Jšœ Οmœ1™<—Jšœ ΟkœFžœžœ~™ςJšœ,™,šœ™Jšœ)™)Jšœ,™,Icode™&Jšœ(™(—J˜šž ˜ Jšœ˜Jšœ˜Jšžœ˜J˜ J˜J˜Jšœ˜Jšœ˜J˜—šœžœž˜Jšžœ˜Jšžœžœ˜ J˜—Jšžœžœ˜J˜Jšžœžœžœ˜head1šœ#™#š Οn œžœžœžœžœžœ˜Fšœžœžœžœ˜J˜/Jšžœ˜J˜——š Ÿœžœžœžœ0žœ*žœ˜Ššœžœžœ&˜5Jšœ"˜"JšœD˜DJšœ$˜$J˜——šŸœžœžœžœ˜@Jšžœžœ&˜3Jšœ˜Jšœ$˜$J˜—šŸœžœžœžœ˜AJšžœžœ'˜4Jšœ ˜ Jšœ%˜%J˜—šŸœžœžœžœ˜AJšžœžœ'˜4J˜ šœ%˜%J˜——šŸœžœžœžœ žœXžœžœ"žœ˜Μšœžœžœžœ˜šœv˜vJ˜———š Ÿ œžœžœžœ0žœ˜sJšœ.™.šœžœžœžœ˜JšžœOžœ ˜dJ˜——šŸœžœžœžœžœ žœ žœ˜^šœžœžœžœ˜Jšœ9˜9——J˜šŸœžœžœžœ˜_Jš œ žœ žœžœžœžœ˜;——šœ7™7š Ÿ œžœžœžœžœžœ˜WJšžœžœ$˜1Jšžœžœžœžœ˜DJšœ)˜)Jšœ"˜"—J˜š Ÿ œžœžœžœžœžœ˜VJšžœžœ#˜0Jšžœžœžœžœ˜DJšœ(˜(Jšœ!˜!—J˜šŸ œžœžœžœ˜0Jšžœžœ$˜1Jšœ˜Jšœ"˜"J˜—šŸ œžœžœžœ žœžœžœ˜cJšžœžœžœ˜Jšžœ%žœžœ˜GJ˜Jšœ˜J˜—š Ÿ œžœžœžœ'žœžœ˜yJšžœžœžœ˜Jšœ@˜@J˜—š Ÿ œžœžœžœžœ˜EJšžœžœžœ˜Jšœ˜J˜—š Ÿ œžœžœžœžœ˜EJšžœžœžœ˜Jšœ˜J˜—šŸœžœžœžœ˜5Jšœžœžœžœ!˜8J˜—šŸœžœžœžœ˜4Jšœžœžœžœ#˜:J˜—šŸœžœžœžœ˜4Jšœžœžœžœ#˜:J˜—š Ÿ œžœžœžœ žœ˜AJš œžœžœžœžœ˜8J˜—š Ÿœžœžœžœ žœ˜BJš œžœžœžœžœ˜7J˜—š Ÿ œžœžœžœ žœ˜FJš œžœžœžœžœ˜<—J˜šŸœžœžœžœžœžœžœžœžœ˜†Jšžœžœ&˜3Jšœ"˜"Jšœ9˜9šœ$˜$J˜——š Ÿœžœžœžœžœžœ˜ZJšžœžœ%˜2Jšœ!˜!Jšœ*˜*Jšœ#˜#—J˜šŸœžœžœžœ˜4Jšžœžœ&˜3Jšœ"˜"Jšœ˜Jšœ$˜$J˜—šŸ œžœžœžœžœžœžœ˜hJšžœžœžœ˜Jšžœ%žœžœ˜IJ˜Jšœ˜J˜—š Ÿœžœžœžœ'žœžœ˜}Jšžœžœžœ˜JšœB˜BJ˜—š Ÿ œžœžœžœžœ˜KJšžœžœžœ˜Jšœ˜J˜—š Ÿ œžœžœžœžœ˜KJšžœžœžœ˜Jšœ˜J˜—šŸœžœžœžœ˜9Jšœžœžœžœ#˜:J˜—šŸ œžœžœžœžœžœ žœžœ˜_Jšœžœžœžœ:˜Q—J˜š Ÿ œžœžœžœžœžœ˜GJšžœžœžœ&˜;—J˜š Ÿ œžœžœžœžœžœ˜WJšžœžœžœ˜Jšœ$˜$——˜šŸ œžœžœžœ ˜?Jšžœžœ#˜0Jšœ˜Jšœ˜Jšœ!˜!—J˜šŸ œžœžœžœ ˜?Jšžœžœ#˜0Jšœ˜Jšœ˜Jšœ!˜!—J˜šŸœžœžœžœžœžœžœ ˜EJšœ˜—J˜šŸœžœžœžœžœ žœžœ ˜KJšœ˜——šœ™š Ÿ œžœžœžœžœžœ ˜Lšœžœžœ$˜3Jšœ ˜ J˜#J˜!J˜——š Ÿ œžœžœžœžœžœ ˜Kšœžœžœ#˜2Jšœ˜J˜"Jšœ!˜!J˜——š Ÿ œžœžœžœ"žœ˜Xšœžœžœ$˜3Jšœ ˜ J˜#Jšœ"˜"J˜——š Ÿ œžœžœžœ-žœ˜cšœžœžœ$˜3Jšœ ˜ Jšœ'˜'Jšœ"˜"J˜——Jšœ(žœ˜DJ˜š Ÿœžœžœžœ%žœžœ˜kJšžœžœ$˜1Jšœ ˜ Jšžœžœžœžœ%˜JJšœ ˜ Jšœ:˜:Jšœ"˜"—J˜šŸ œžœžœžœ˜/Jšžœžœ$˜1Jšœ ˜ Jšœ˜Jšœ"˜"J˜—šŸœžœžœžœ˜1Jšžœžœ%˜2Jšœ!˜!Jšœ˜Jšœ#˜#J˜—š Ÿœžœžœžœžœ˜BJšžœžœ˜(Jšœ˜Jšœ˜Jšœ˜J˜—šŸœžœžœžœžœžœžœ˜^Jšžœžœ˜(Jšœ˜Jšœ˜Jšœ˜—J˜š Ÿœžœžœžœ žœ˜NJšžœžœ˜(Jšœ˜Jšœ˜Jšœ˜—J˜šŸœžœžœžœ žœžœžœ˜hJšžœžœ˜(Jšœ˜Jšœ˜Jšœ˜—J˜š Ÿœžœžœžœžœ˜8Jšžœ˜#J˜—š Ÿ œžœžœžœžœ˜Jšžœ ˜&J˜—š Ÿ œžœžœ žœžœ˜8Jšžœ˜ —J˜š Ÿ œžœžœžœžœ˜šœžœžœžœ˜Jšžœ˜ ——šœ™š ŸœžœžœžœEžœ˜ƒšžœžœ%˜2Jšœ!˜!Jšœ9˜9˜#J˜———š Ÿ œžœžœžœžœ˜Ešœžœžœ#˜2J˜J˜J˜ J˜——š Ÿ œžœžœžœžœ˜Ešœžœžœ#˜2J˜J˜J˜ J˜——šŸœžœžœžœ˜7Jšœžœžœžœ!˜7J˜—š Ÿ œžœžœžœžœžœ˜qJšžœžœ#˜0J˜Jšœ7˜7J˜Jšžœ˜ J˜—š Ÿ œžœžœžœžœ˜Bšœžœžœ"˜1J˜J˜J˜J˜J˜——š Ÿ œžœžœžœžœ˜Bšœžœžœ"˜1J˜J˜J˜J˜J˜——šŸœžœžœžœ˜4Jšœžœžœžœ ˜7J˜—š Ÿœžœžœžœ žœ˜KJš œžœžœžœžœ!˜@—J˜š Ÿœžœžœžœžœžœ˜qJšžœžœžœžœ3˜P—J˜š Ÿ œžœžœžœ žœ˜DJšœžœžœžœ ˜7——headšœ™šŸœžœžœžœžœžœžœ˜NJšœžœ˜Jš žœžœžœžœžœ˜š žœžœžœžœžœž˜7Jšœ˜Jšžœ˜—Jšœžœ˜'Jšœ ˜ š žœžœžœžœžœž˜7Jšœ˜Jšœ˜Jšž˜—Jšœ˜—J˜šŸœžœžœžœžœžœžœžœžœ˜PJšœžœ˜Jš žœžœžœžœžœ˜š žœžœžœžœžœžœž˜:Jšœ˜Jšžœ˜—Jšœžœžœ˜&Jšœ ˜ š žœžœžœžœžœžœž˜:Jšœ˜Jšœ˜Jšž˜—Jšœ˜—J˜šŸœž œžœžœžœžœžœ˜PJšœžœ˜Jš žœžœžœžœžœ˜š žœžœžœžœžœžœž˜:Jšœ˜Jšžœ˜—Jšœžœ˜'Jšœ ˜ š žœžœžœžœžœžœž˜:Jšœ˜Jšœ˜Jšž˜—Jšœ˜—J˜šŸœžœžœžœžœžœžœ˜TJšœžœ˜Jš žœžœžœžœžœ˜š žœžœžœ(žœžœž˜HJšœ˜Jšžœ˜—Jšœžœ˜$Jšœ ˜ š žœžœžœ!žœžœž˜AJšœ˜Jšœ˜Jšž˜—Jšœ˜——™Jšœžœžœžœ˜1Jšœ žœžœžœ˜Jš œ žœžœžœžœžœ˜6Jšœžœžœžœ˜#—™J˜—J˜Jšžœ˜J˜J˜—…—8 NΓ