DIRECTORY Basics, Dragon, DragOpsCross, IFUPLAInstrDecode, PLAOps; IFUPLAInstrDecodeImpl1: CEDAR PROGRAM IMPORTS IFUPLAInstrDecode, PLAOps EXPORTS IFUPLAInstrDecode = BEGIN OPEN IFUPLAInstrDecode, PLAOps; instr, temp: BoolExpr; m: InstrDecodeOut; DelayedRet: InstrDecodeOut = [ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, -- so we can recognize first cycle of RET condEffect0: bubble ]; GenInstrDecodePLA1: PUBLIC GenInstrDecodePLAProc = { GenInstrDecodePLAExceptions: PROC = { OPEN DOC: DragOpsCross; T: BOOL = TRUE; all: Dragon.Byte _ ByteTopSig[8]; BEX: TYPE = BoolExpr; ifuSLim: BEX _ BE[m:[alpha: all], d:[alpha: DOC.ProcessorRegister[ifuSLimit ].ORD]]; ifuYgL: BEX _ BE[m:[alpha: all], d:[alpha: DOC.ProcessorRegister[ifuYoungestL ].ORD]]; ifuYgPC: BEX _ BE[m:[alpha: all], d:[alpha: DOC.ProcessorRegister[ifuYoungestPC ].ORD]]; ifuElL: BEX _ BE[m:[alpha: all], d:[alpha: DOC.ProcessorRegister[ifuEldestL ].ORD]]; ifuElPC: BEX _ BE[m:[alpha: all], d:[alpha: DOC.ProcessorRegister[ifuEldestPC ].ORD]]; ifuAddr: BoolExpr _ BE[m:[alpha: 360B], d:[alpha: 360B]]; -- last 16 reset: BoolExpr _ BE[m:[reset: TRUE], d:[reset: TRUE]]; userMode0: BoolExpr _ BE[m:[userMode0: TRUE], d:[userMode0: TRUE]]; pop0ping: BoolExpr _ BE[m:[popPending: TRUE], d:[popPending: TRUE]]; push0ing: BoolExpr _ BE[m:[pushPending: TRUE], d:[pushPending: TRUE]]; state0: BoolExpr _ BE[m:[state: ByteTopSig[8]], d:[state: 0]]; current0: BoolExpr _ state0; Set[ s: state0, out: [instStarting0: TRUE] ]; Set[s: reset, out: [ nextMacro: hold, microCycleNext: next, protMicroCycle: TRUE, pcNext: fromPCBus, pcBusSrc: trapGen, lSource: [ zero, zero ], sSource: [ l, zero ], aluOp: UAdd, -- clears EU carry flag aReg: constantZero, bReg: constantZero, flagSrc: clear ]]; current _ BE[m: [reset: TRUE], d:[reset: FALSE]]; Set[s: current, m:[state: ByteTopSig[8]], d:[state: 112 -- Resetting -- ], out: [ nextMacro: hold, microCycleNext: next, protMicroCycle: TRUE, pcNext: fromPCBus, pcBusSrc: trapGen, lSource: [ zero, zero ], sSource: [ l, zero ], aluOp: UAdd, -- clears EU carry flag aReg: constantZero, bReg: constantZero, flagSrc: clear ]]; Set[s: current, m:[state: ByteTopSig[8]], d:[state: 113 -- Reset finished -- ], out: [ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: pc, lSource: [ zero, one ], sSource: [ l, zero ], aluOp: UAdd, -- clears EU carry flag aReg: constantZero, bReg: constantZero ]]; Set[s: current, m:[state: ByteTopSig[8]], d:[state: 116 -- trap0 -- ], out: [ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: trapGen, flagSrc: clear, lSource: [ l3, zero ], sSource: [ s3, zero ] ]]; Set[s: current, m:[state: ByteTopSig[8]],d:[state: 120 -- cJump -- ], out: [ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: pipe3, flagSrc: lev3, lSource: [ l3, zero ], -- should be 2, but 2 = 3 for cJump sSource: [ s2, zero ] ]]; -- S of instr AFTER CJump Set[s: current, m:[state: ByteTopSig[1]], d:[state: 128 -- bubble --], out: Delayed]; current _ And[current, BE[m: [state: ByteTopSig[2]], d:[state: 0]]]; Set[s: current, m:[instReady: TRUE], d:[instReady: FALSE], out: Delayed]; current _ And[current, BE[m: [instReady: TRUE], d: [instReady: TRUE]]]; instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dRET]]]; Set[s: And[instr, Or[pop0ping, push0ing]], out: [ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, -- so we can recognize first cycle of RET condEffect0: bubble]]; Set[s: And[instr, Not[Or[pop0ping, push0ing]] ], out: [ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: stack, flagSrc: stack, lSource: [ zero, stack ], sSource: [ l, alpha ], pop0: TRUE ]]; instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dRETN]]]; Set[s: And[instr, Or[pop0ping, push0ing]], out: [ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, -- so we can recognize first cycle of RET condEffect0: bubble ]]; Set[s: And[instr, Not[Or[pop0ping, push0ing]] ], out: [ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: stack, flagSrc: stack, lSource: [ zero, stack ], pop0: TRUE ]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dALS], out:[lSource: [s, alpha]]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dASL], out:[sSource: [l, alpha]]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dAL], out:[lSource: [l, alpha]]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dAS], out:[sSource: [s, alpha]]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dDIS], out:[popSa: TRUE]]; instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dLIP]]]; Set[s: And[instr, Not[ifuAddr]], out: [ bReg: [ zero, alpha ], cReg: [ s, offset, one ], pushSc: TRUE ] ]; instr _ And[instr, ifuAddr]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 0], out:[ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, pushSc: TRUE ] ]; -- aborts if EU stack overflow Set[s: And[instr, userMode0, state0, ifuElPC], out: [condSel: ModeFault] ]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 1], out:NoOpMicro]; -- wait Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 2], out:NoOpMicro]; -- wait Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 3], out: [ nextMacro: hold, bReg: fromIfuXBus, pcNext: fromPCBus, microCycleNext: next, kIsRtOp0: TRUE, cReg: [ s, offset, zero ] ] ]; instr _ And[instr, BE[m:[state: ByteTopSig[8]], d:[state: 4]]]; Set[s: And[instr, ifuSLim], out: [x1ASrcSLimit:T ]]; Set[s: And[instr, ifuYgL], out: [x1ASrcStack:T, xBusStackL:T ]]; Set[s: And[instr, ifuYgPC], out: [x1ASrcStack:T ]]; Set[s: And[instr, ifuElL], out: [x1ASrcStack:T, xBusStackEldest:T, xBusStackL:T ]]; Set[s: And[instr, ifuElPC], out: [x1ASrcStack:T, xBusStackEldest:T ]]; Set[s: And[instr, ifuYgL], out: [x1ASrcStackL:T]]; Set[s: And[instr, ifuYgPC], out: [x1ASrcStackP:T]]; Set[s: And[instr, ifuElL], out: [x1ASrcStackL:T]]; Set[s: And[instr, ifuElPC], out: [x1ASrcStackP:T]]; instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dSIP]]]; Set[s: And[instr, userMode0, state0], out: [condSel: ModeFault] ]; -- trap if userMode0 Set[s: And[instr, Not[ifuAddr]], out: [ bReg: abStackTop, cReg: [ zero, alpha ], popSb: TRUE ] ]; Set[s: instr, m: [alpha: ByteTopSig[8]], d: [alpha: DragOpsCross.ProcessorRegister[euField].ORD], out: [cIsField0: TRUE ] ]; instr _ And[instr, ifuAddr]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 0], out:[ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, bReg: abStackTop, popSb: TRUE, cReg: toIfuXBus, kPadsIn0: TRUE ] ]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 1], out:NoOpMicro]; -- wait Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 2], out:NoOpMicro]; -- wait temp _ And[instr, BE[m:[state: ByteTopSig[8]], d:[state: 3]]]; Set[s: temp, out: NoOpMicro]; Set[s: And[temp, ifuSLim], out: [x1ADstSLimit:T ]]; Set[s: And[temp, ifuYgL], out: [x1ADstStack:T, xBusStackL:T ]]; Set[s: And[temp, ifuYgPC], out: [x1ADstStack:T ]]; Set[s: And[temp, ifuElL], out: [x1ADstStack: T, xBusStackEldest:T, xBusStackL:T ]]; Set[s: And[temp, ifuElPC], out: [x1ADstStack:T, xBusStackEldest:T ]]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 4], out:[ ]]}; GenInstrDecodePLAXfers: PROC = { src0: BoolExpr _ BE[m:[alpha: 300B], d:[alpha: 0B]]; src1: BoolExpr _ BE[m:[alpha: 300B], d:[alpha: 100B]]; srTop: BoolExpr _ BE[m:[alpha: 200B], d:[alpha: 200B]]; srPop: BoolExpr _ BE[m:[alpha: 300B], d:[alpha: 300B]]; opt: BoolExpr _ BE[m:[alpha: 040B], d:[alpha: 040B]]; aux: BoolExpr _ BE[m:[alpha: 020B], d:[alpha: 020B]]; m _ [ aReg: abStackTop, x2ALitSource: alpha, popSa: TRUE, aluOp: VSub, condEffect0: macroJump, condSel: EZ, nextMacro: get, pcPipeSrc: offSetPC ]; -- pcOffSetSrc: betaS Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJEBB], out:m]; m.condSel _ NE; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJNEBB], out:m]; m _ [ aReg: abStackTop, x2ALitSource: alpha, popSa: TRUE, aluOp: VSub, condEffect0: macroJump, condSel: EZ, nextMacro: jump, pcNext: fromPCBus, pcBusSrc: offSetPC, -- pcOffSetSrc: betaS pcPipeSrc: seqPC ]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJNEBBJ], out:m]; m.condSel _ NE; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJEBBJ], out:m]; instr _ And[current, BE[m:[op: InstrTopSig[4]], d:[op: dRJEB]]]; -- RJ*B and RJ*BJ Set[s:current, m:[op: InstrTopSig[5]], d:[op: dRJEB], out:[ -- RJ*B aluOp: VSub, condSelIsOp57: TRUE, condEffect0: macroJump, nextMacro: get, pcPipeSrc: offSetPC ] ]; -- pcOffSetSrc: betaS Set[s:current, m:[op: InstrTopSig[5]], d:[op: dRJEBJ], out:[ -- RJ*BJ aluOp: VSub, condSelIsOp57: TRUE, condEffect0: macroJump, nextMacro: jump, pcNext: fromPCBus, pcBusSrc: offSetPC, -- pcOffSetSrc: betaS pcPipeSrc: seqPC] ]; Set[s: And[ src0, instr], out:[aReg:[ cBase, offset, zero ]]]; Set[s: And[ src1, instr], out:[aReg:[ cBase, offset, one ]]]; Set[s: And[ srTop, instr], out:[aReg:[ s, offset, zero ]]]; Set[s: And[ Not[opt], aux, instr], out:[bReg:[ aBase, alpha47 ]]]; Set[s: And[ Not[opt], Not[aux], instr], out:[bReg:[ l, alpha47 ]]]; Set[s: And[opt, instr], m:[alpha: 010B], d:[alpha: 000B], out:[bReg:[ cBase, alpha47 ]]]; Set[s: And[opt, instr], m:[alpha: 004B], d:[alpha: 000B], out:[bReg:[ cBase, alpha47 ]]]; Set[s: And[opt, instr], m:[alpha: 015B], d:[alpha: 014B], out:[bReg:[ s, offset, zero ]]]; Set[s: And[opt, instr], m:[alpha: 015B], d:[alpha: 015B], out:[bReg:[ s, offset, minus1 ]]]; Set[s: And[srPop, instr], out:[popSa: TRUE]]; Set[s: And[opt, instr], m:[alpha: 016B], d:[alpha: 016B], out:[popSb: TRUE]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJ1], out: DefaultMicro]; -- to mark as ~Xops Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJ2], out: DefaultMicro]; -- to mark as ~Xops Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJ3], out: DefaultMicro]; -- to mark as ~Xops Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJ5], out: DefaultMicro]; -- to mark as ~Xops instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dJSR]]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 0], out:[ -- toIfuXBus _ [S] nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, bReg: abStackTop, cReg: toIfuXBus, kPadsIn0: TRUE ]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 1], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 2], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 3], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 4], out:[ -- S _ S-1 nextMacro: jump, pcNext: fromPCBus, pcBusSrc: offSetPC, -- pcOffSetSrc: xA, popSa: TRUE ]]; instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dJSD]]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 0], out:[ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, bReg: abStackTop, cReg: toIfuXBus, kPadsIn0: TRUE ]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 1], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 2], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 3], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 4], out:[ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: x, popSa: TRUE ]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJB], out:[ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: offSetPC ]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJDB], out:[ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: offSetPC ]]; -- pcOffSetSrc: alphaBetaS Set[s:current, m:[op: InstrTopSig[8]], d:[op: dJQB], out:[ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: alpBetGamDel ]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dLFC], out:[ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: offSetPC, -- pcOffSetSrc: alphaBetaS, pcPipeSrc: seqPC, push0: TRUE ]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dDFC], out:[ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: alpBetGamDel, pcPipeSrc: seqPC, push0: TRUE ]]; Set[s:current, m:[op: InstrTopSig[8]], d:[op: dKFC], out:[ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: xopGen, pcPipeSrc: seqPC, push0: TRUE, flagSrc: clear ]]; instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dSFC]]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 0], out:[ -- toIfuXBus _ [S] nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, bReg: abStackTop, cReg: toIfuXBus, kPadsIn0: TRUE ]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 1], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 2], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 3], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 4], out:[ -- S _ S-1 nextMacro: jump, pcNext: fromPCBus, pcBusSrc: x, pcPipeSrc: seqPC, popSa: TRUE, push0: TRUE ]]; instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dSFCI]]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 0], out:[ -- toIfuXBus _ [S]^ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, bReg: abStackTop, cReg: toIfuXBus, kPadsIn0: TRUE, dPCmnd: Fetch, dPCmndIsRd0: TRUE ]]; Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 1], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 2], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 3], out:NoOpMicro]; -- wait Set[s:instr, m:[state: ByteTopSig[8]], d:[state: 4], out:[ -- S _ S-1 nextMacro: jump, pcNext: fromPCBus, pcBusSrc: x, pcPipeSrc: seqPC, push0: TRUE ]] }; current _ old; GenInstrDecodePLAExceptions[]; GenInstrDecodePLAXfers[]}; END. êIFUPLAInstrDecodeImpl1.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Last edited by TWilliams, August 27, 1984 4:58:00 pm PDT Last edited by Herrmann, August 14, 1985 12:57:15 pm PDT Last edited by Curry, September 13, 1986 7:41:31 pm PDT McCreight, February 27, 1986 3:51:08 pm PST Set InstStarting bit Do Exceptions Note: Reset must be asserted for at least three machine cycles. Not An Exception Instruction not ready Returns must wait for push0 or pop0. Today (October 25, 1985 11:54:04 am PDT) Russ Atkinson promised to make stack underflow illegal (by altering the PC of the bottom frame to point to a trap handler), so trapping an empty instruction stack is no longer necessary. instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dRETK]]]; Set[s: And[instr, userMode0, state0], out: [condSel: ModeFault]]; -- OR it in Set[s: And[instr, state0], out: [ nextMacro: hold, pcNext: fromPCBus, microCycleNext: next, bReg: abStackTop, cReg: toIfuXBus, kPadsIn0: TRUE, flagSrc: stack, lSource: [ zero, stack ], sSource: [ l, alpha ]] ]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 1], out: NoOpMicro]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 1], out: [pop0: TRUE]]; ... just add it in. This pop0 logically belongs with state 3, but can be piped ahead because the pop0 doesn't actually happen until three cycles later. This allows a return following a RETK to proceed without wait states. Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 2], out: NoOpMicro]; Set[s: instr, m:[state: ByteTopSig[8]], d:[state: 3], out: [ nextMacro: jump, pcNext: fromPCBus, pcBusSrc: stack, x1ADstStatus: TRUE]]; ... x1ADstStatus is not pipelined, so it's generated at stage 0B to apply to the destination register address that has reached stage 3B. Note: We formerly trapped ALS if the stack was empty. Russ Atkinson now (and has done for some time) guarantees that to be impossible. EMM October 25, 1985 11:26:44 am PDT. ALS Look for the case of a Call - ALS sequence broken by a Reschedule which returns with an empty IStack. ALS (L_S+alpha) => that the stack is expected to contain some local values which (if IStack is empty) have been swapped out. instr _ And[current, BE[m:[op: InstrTopSig[8]], d:[op: dALS]] ]; Set[s: And[instr, pop0ping], out: Delayed]; Set[s: And[instr, Not[pop0ping], empty, Not[push0ing]], out: Trap]; LIP check addr to determine if IFU or EU. EU has no special conditions. Unfortunately, LIP from an IFU register sometimes has early side effects, including pop0ping the control stack. Therefore its last microinstruction must not experience any pipeline interference. OR's in with other bits, protects just LIP IFUEldestPC Set[s: And[instr, BE[m:[state: ByteTopSig[8]], d:[state: 3], ifuStat]], out: [x2ASrcStatus0: TRUE]]; -- add in register-specific bits, on time Add in register-specific bits, one cycle delayed SIP Register-specific bits, to be broadcast in phase 1A Set[s: And[temp, ifuStat], out: [x1ADstStatus:T ]]; This final state is necessary because a RET instruction can follow a SIP to IFUYoungestPC or IFUYoungestL, and perhaps in other cases as well. Used in RR and RJB instructions dRJ*B and dRJ*BJ - Bit 4 distinguishes between them Main Body AReg BReg Stack Êj˜šÐbl™Jšœ Ïmœ1™JšœŸœŸœŸœ˜EJ˜JšœŸœŸœŸœ˜EJšœŸœŸœŸœ˜FJšœŸœ,˜CJ˜J˜Jš ™J˜Jšœ%Ÿœ˜-J˜Jš  ™ J™Jšœ?™?J˜šœ˜Jšœ˜Jšœ˜JšœŸœ˜Jšœ˜Jšœ˜J˜Jšœ˜Jšœ¡˜&Jšœ˜Jšœ˜Jšœ˜J˜—Jš œŸœ Ÿœ Ÿœ˜1J˜šœ8¡œ ˜QJšœ˜Jšœ˜JšœŸœ˜Jšœ˜Jšœ˜J˜Jšœ˜Jšœ¡˜&Jšœ˜Jšœ˜Jšœ˜J˜—šœ8¡œ ˜WJšœ˜Jšœ˜Jšœ˜J˜Jšœ˜Jšœ¡˜%Jšœ˜Jšœ˜J˜J˜—šœ8¡ œ ˜MJšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜—J˜J˜šœ7¡ œ ˜MJšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ¡#˜˜>JšœG˜GJšœ>˜>JšœT˜TJšœK˜KJšœ2˜2Jšœ3˜3Jšœ2˜2Jšœ3˜3J˜J™Jš ™Jš œŸœ  œ˜?šœC¡˜WJ˜—šœ'˜'Jšœ˜Jšœ˜JšœŸœ˜J˜—šœ ˜ JšœNŸœ˜SJšœŸœ˜J˜—Jšœ˜J™šœ2 œ˜;Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ Ÿœ˜Jšœ˜Jšœ Ÿœ˜—Jšœ2 œ¡˜NJšœ2 œ¡˜NJšœŸœ% œ˜>Jšœ˜J™Jšœ3™3Jšœ?™?Jšœ>˜>JšœG˜GJšœ=˜=JšœT˜TJšœK˜KJ™Jš¡Ž™ŽJšœ2 œ ˜@—J˜J˜š¢œŸœ˜!J™Jšœ™JšœŸœ!˜6JšœŸœ#˜8JšœŸœ#˜9JšœŸœ#˜9JšœŸœ#˜7JšœŸœ#˜7J˜˜Jšœ˜Jšœ˜JšœŸœ˜ Jšœ ˜ J˜Jšœ Ÿœ˜ Jšœ˜Jšœ¡˜,—šœ=˜=Jšœ Ÿœ˜—Jšœ>˜>J˜˜Jšœ˜Jšœ˜JšœŸœ˜ Jšœ ˜ J˜Jšœ Ÿœ˜ Jšœ˜Jšœ˜Jšœ¡˜)Jšœ˜Jšœ˜—šœ?˜?Jšœ Ÿœ˜—Jšœ>˜>J˜Jš œ$™4JšœŸœ  œ¡˜Rš  ™ šœ. œ ¡£˜CJšœ ˜ JšœŸœ˜Jšœ˜Jšœ˜Jšœ¡˜.—šœ. œ ¡£˜EJšœ ˜ JšœŸœ˜J˜Jšœ˜Jšœ˜Jšœ¡˜)Jšœ˜——š ™JšœF˜FJšœE˜EJšœC˜C—š ™JšœH˜HJšœJ˜JJšœY˜YJšœY˜YJšœ\˜\Jšœ\˜\—š ™Jšœ/Ÿœ˜6JšœFŸœ˜M—J˜Jšœ. œ¡˜[Jšœ. œ¡˜[Jšœ. œ¡˜[Jšœ. œ¡˜[J˜Jš œŸœ  œ˜?šœ;¡˜MJšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ Ÿœ˜—JšœE¡˜LJšœE¡˜LJšœE¡˜Lšœ:¡ ˜EJšœ˜Jšœ˜Jšœ¡˜(JšœŸœ˜—J˜Jš œŸœ  œ˜?šœ:˜:Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ Ÿœ˜—JšœE¡˜LJšœE¡˜LJšœE¡˜Lšœ:˜:Jšœ˜Jšœ˜Jšœ ˜ Jšœ Ÿœ˜—J˜šœ. œ˜9Jšœ˜Jšœ˜Jšœ˜—J˜šœ. œ˜:Jšœ˜Jšœ˜Jšœ¡œ ˜1—J˜šœ. œ˜:Jšœ˜Jšœ˜Jšœ˜—J˜šœ. œ˜:Jšœ˜Jšœ˜Jšœ¡˜0Jšœ˜JšœŸœ˜—J˜šœ. œ˜:Jšœ˜Jšœ˜Jšœ˜Jšœ˜JšœŸœ˜—J˜šœ. œ˜:Jšœ˜Jšœ˜Jšœ˜Jšœ˜JšœŸœ˜ Jšœ˜—J˜J˜JšœŸœ  œ˜?šœ1 œ ¡˜MJšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ Ÿœ˜—Jšœ1 œ¡˜LJšœ1 œ¡˜LJšœ1 œ¡˜Lšœ1 œ¡ ˜EJšœ˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ Ÿœ˜JšœŸœ˜—J˜Jš œŸœ  œ˜@šœ1 œ ¡˜NJšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ Ÿœ˜Jšœ˜Jšœ Ÿœ˜—Jšœ1 œ¡˜LJšœ1 œ¡˜LJšœ1 œ¡˜Lšœ1 œ¡ ˜EJšœ˜Jšœ˜Jšœ ˜ Jšœ˜JšœŸœ˜—J˜Jšœ˜Jšœ˜Jšœ˜—J˜JšŸœ˜˜J˜———…—5^Q²