ࡱ> n! Յ]'UՌ뵷PNG  IHDRF='PLTE  2/*fU<:6USP%#jgc]xDA-sGɍNhB`Դx /Ҳ~_m;#]=Z@f^tvj<7aaϙܲ7#kWljiRGڼQ8iI2$oxkQ K,{gjmYRjۅa^.t-\SeԖFD+#uZ˺8 Us=>ي]țTA*g x*<QQ:Mw,˶UuݦMK}q2ҭ"&3zRJ@Xt &m:\***HD%O59ygsc jR<39Q*7zLa<<**Y2U1MQ\OIXRl$A e* oD׵FqBmNbJ-BM21<ĕr",Km)?j(TzgBCBv{Ic޴oJ,",w#Qђr6 K=bi [0@rV&Rgx[1+7`mEݗ7]td0dTi5g;ěun|MW҄4|6s ΞD@AVjV#ITrdB!*dG!]bry1w~=Rz&kt-H5^dS΋H<{}ߐ1*u/? ۛwoBmA& LD,ˊ1SE_^=xrzPb AsE)ɶk.$"z89yؓ߂%,ãXr>Oӫ/"2Oc~\GG &0y$i>jY0F*n˙_ˉ|}Y‚X3ag񥈐Xq,`;o><3c/0Ai0B.Ja!S_^0hkD S? z$ KLwo /ꃾ,|2nKטAM YyD,mDH˯ {e AE_a)R?].釋zF0v SG6T(_cܤ ,>x[-šӰ{UwH*B5v7L3vW~`l뫷p'El Em!`RXؗW( >>aޠDoZ <ټ.ED+x4 g!F3҂Sqۯ~`8;k&''pN\fktd^J&x5 EZsÜŞlJ33P@7PbenxC gG;y9} bÿ s=HM}xũs4ER\G;tTd d۰H=;-;g5l0(:؟0v=ΰw;'d8dGM*vR,6hHV|pfm+6TdO# !H3)N]9cV8ϟ\9˽Oϱ<!V!ĶUsgU߼+`]s ]gΪ1-Rqk[sg~J#!ES0kGXzE6!Lmj.2MnzzfzfW>?噽susKRkU.ϯ笡gX:/]~,6wv,|kx<)4G:nw 5sf?U[֖n%RXLa-~ }#6O5o6$A(m88<Z7RZ*TRO3Z:1PK;*|9L&8sij98OمW, )ݸ8äa|@W^1Z3N?M+`NXq6;iUZTcaW/Y|l_J qaxɤiҒxu+MbK9Uji})MaΫBV\2 YGA,(6qNS1eR 98=1"$e_?e3wIԍ*cBVGk8f&NdWbv$N:Qdvx_^݇=7fMcqyAOz=x(z;˗Gn^|L?*A$mތ{" k${i7y>t| rTBmY%;@<Ӣ*W +RP \fxAFvC9H3g6b+ڱ, K/ .M^Ԛ3b2ߔ.D _U.g# *8(/2u%:(T` yg#w6$}PQq:t8PL07Uل=]*%λ30۝bdrBEƌ['e姩N\њ|J Ln*qloB('ڀ[2ڡߝj%6Q{܋P+DW"[,xyŨ7UVp5*MjBu:T++^ml ;s+}%cczBZIENDB``!wIIsxhL >@}B (xڵUklU>33;߽ЂFPD l*ڥEQ e`Kv1`H" #` bC !#()S@}Ufrܹsws{4 2ɡB4$]hrFICN!|s\O W m%SwxwukW`0:Ea>u'tS"[-)ңx+',u@Y׊f>CI)BzU+vk=u*[zgN[T!IGOV͌ƙ!*(A6%e%rEqyIYiRCTC4[oqyҬ?Ub}B#"+aǎ9GbyoMӈ됦I1aGJg|Gwrn4FViWhj)>"?Zgi+.vP,-ܭ[yXB 8å#iާ;8,cքAգU{]^\XBc#%hrc5O!N/L}9 %xM_f!?a Kxx j\0cs;+wn^vt8wY3+Zk;j=XsEk0õ%e]C%,ϵ؋Bv 9$C"eX.lcu-g̾@9vIt6`S%$Sl~x;埣mk2>WpS:?FW5~'O0&/tdͶf~V{2,:BtmaA:~ {t3`0H?\nV`!UCw)k^hW} !p#xmJAƿݽ$ 6 UDZ h'81M ־/A|k X:;~s;ow-L4Yps2!Jr;1)K2OHOoƣc9.מFuRy缚nQ tDtXXJE薞5.CI LZ{5ڢ%YC~7<)!G~PO8[̀aQt'H^عI)b2F2*҂x׎0m?)R$`Yg;s?(   +0% Visio Visio.Drawing.60.Microsoft Visio Drawing/ 0DArialca.(0(z[ 0 DVerdanaa.(0(z[ 0 " DWingdings.(0(z[ 0 0DETH Light.(0(z[ 0 @DHelvetica.(0(z[ 0  "PDSymbolca.(0(z[ 0 @ .  @n?" dd@  @@`` @Q  +$ !"%& ./I012 3447$9 <ADEFGH!I!Ob$Յ]'UՌ뵷) b$X* Nѧk湖n) 2$wIIsxhL2$Cw)k^hW}] 0AA@>`@2 ʚ;k8ʚ;g4dd@z[ 0"ppp@ <4ddddl 0. <4BdBdl< 0<4!d!dl< 080___PPT10 pp?4- February 6, 2003O  =5FSCOOPLI for .NET: a library for concurrent object-oriented programmingG7LVolkan Arslan, Piotr Nienaltowski Chair of Software Engineering, ETH Zurich  MZ"+H ,OverviewqMotivation The SCOOP model for concurrent OO programming SCOOPLI library Implementation for .NET Conclusions :  .       Motivation Extend a pure, strongly typed, object-oriented language with a simple, general and powerful concurrency and distribution model 8 $The SCOOP modelSimple Concurrent Object-Oriented Programming High-level concurrency mechanism Full use of inheritance and other object-oriented techniques (genericity, agents, & ) Applicable to many physical setups: multiprocessing, multithreading, distributed execution, etc. Minimal extension of Eiffel one new keyword separate Based on Design by Contract"! new semantics for preconditions !"   "6O>   !Two-level implementation of SCOOP!YSCOOP can be implemented in several environments Microsoft .NET is our reference platformZZY Asynchronous callsFundamental scheme of the O-O computation: feature call x.f(a) Caller and callee handled by different processors Asynchronous semanticsVtZZ92897  Processors 3Processor is an autonomous thread of control capable of supporting the sequential execution of instructions on one or more objects Principal new concept introduced by SCOOP Not to be confused with a physical CPU! It can be implemented as: piece of hardware (computer, CPU), process, thread, AppDomain, etc.HD ymD:   Access control policyTarget of a separate call must be a formal argument of the enclosing routine store (buffer: separate BUFFER; value: INTEGER) is -- Store value in buffer. do buffer.put (value) end ... buf: separate BUFFER create buf.make store (buf, 10) -- instead of buf.put (10) In order to obtain exclusive access to a separate object, use the attached entity as an argument of the corresponding call, as in store (buf, 10). nMZZZZM  M4 %       !%From preconditions to wait-conditions&&%RContracts in Eiffel store (buffer: BUFFER; value: INTEGER) is -- Store value in buffer. require buffer_not_full: not buffer.is_full do buffer.put (value) ensure buffer_not_empty: not buffer.is_empty end ... store (buf, 10) If buffer is separate, correctness condition buffer_not_full becomes wait condition (ZZVZZ' + * .  &SynchronizationNo special mechanism is required for a client to resynchronize with its supplier after a separate call. The client will wait if and only if it needs: x.f x.g (a) y.f ... value:=x.some_query This mechanism is called wait by necessity.0,h./d  ,SCOOPLI libraryThe library relies on two concepts: separate client separate supplier Separate client is handled by a different processor than each of its separate suppliers. SCOOPLI uses multiple inheritance to provide separateness: $Z#ZZ$" Y -  = #Use of SCOOPLI (1/2).%+Feature separate_execute of SEPARATE_CLIENT,,separate_execute (requested_objects: TUPLE [SEPARATE_SUPPLIER]; action: PROCEDURE [ANY, TUPLE]; wait_condition: FUNCTION [ANY, TUPLE, BOOLEAN]) Formal arguments: requested_objects Denotes the (tuple of) objects on which exclusive locks should be acquired before calling action. action Denotes the routine to be called on the separate client object; action corresponds to the routine that  wraps separate calls wait_condition Denotes the boolean function representing the wait condition for the call`JZTZZRZ9Te~K5 71(Use of SCOOPLI (1/2)$Use of SCOOPLI (2/2)/&,Feature separate_routine of SEPARATE_CLIENT -+separate_routine (supplier: SEPARATE_SUPPLIER; procedure: PROCEDURE [ANY, TUPLE]) Formal arguments: supplier Denotes the separate supplier object on which the separate call to procedure is made procedure Denotes the routine to be called on the separate supplier object>T2)Use of SCOOPLI (2/2)0')Feature separate_value of SEPARATE_CLIENT**separate_value (supplier: SEPARATE_SUPPLIER; function: FUNCTION [ANY, TUPLE, ANY]): ANY Formal arguments: Supplier Denotes the separate supplier object on which the separate call to function is made. Function Denotes the function to be evaluated. Return value is of type ANY4o  3*Use of SCOOPLI (2/2)SCOOPLI for .NETMapping of SCOOP concepts to .NET constructs Processors AppDomains Namespace System.Runtime.Remoting Use of multithreading Single feature calls on separate objects, thus one thread per AppDomain Namespace System.Threading ThreadPool-;c -  G      b:  V   Distributed executionProcessors (AppDomains) located on different machines .NET takes care of the  dirty work Marshalling Minimal cost of inter-AppDomain callsBZZ2ZY1, f <CCF  Concurrency Control FileLocation of processors does not need to be specified at compile time On-the-fly specification with CCF creation local_nodes: system "susi" (1): "c:\prog\appl1\appl1.exe" "ruth" (1): "c:\prog\appl2\appl2.dll" "schlemmer" (2): "c:\prog\appl3\appl3.dll" endhgZZgPp %' ' Conclusions SCOOP model is simple yet powerful Full concurrency Full use of object-oriented techniques One keyword separate Based on Design by Contract"! Several platforms SCOOPLI library SCOOP-based syntax Separate clients, separate suppliers .NET as reference platform Processors mapped to AppDomains Distributed execution with .NET Remoting#}9I"C  H    , !Future research(Extension of access control policy multiple locking of separate objects based on the concept of pure functions SCOOP for real-time systems specifying timing constraints adding priorities to the duel mechanism Implementation Use of agents and delegates Porting of SCOOPLI to .NET CF using threads#ZMZZFZZHZ#=F         ,  ,$ Questions ? Thank you !D    y  ` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dd@ >`p?dd@ @` n?" dd@   @@``PR    @ ` ` p>> @ _(    6 "IdV  T Click to edit Master title style! !$  0\ "'  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     SA  0즤 "G   52nd Microsoft Rotor Workshop, Pisa, April 23-25, 2003N6  2     0 ",,  \*   0T " m   > \  C &Ao_logo"[qZB  c $D"f   C 0Aethlogo-140"gH  0޽h ? 3380___PPT10.}`E se 0 zrD (  D D 0H P   H P*   D 0H    H R*  d D c $ ?  H D 0H  0 H RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S D 6H _P  H P*   D 6H _  H R*  H D 0޽h ? 3380___PPT10.Bu4- February 6, 2003  $(  r  S <  r  S =% t4E   H  0޽h ? 33___PPT10i.t +D=' = @B +b   `P(  r  S IdV     S 'Y<$D 0  H  0޽h ? 33J B ___PPT10" .;+YD ' = @B D ' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* :%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*;K%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Ld%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*eq%(+  0\(  x  c $<IdV     c $8'Y<$D 0  H  0޽h ? 33___PPT10.;+{#jDb' = @B D' = @BA?%,( < +O%,( < +DT' =%(%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+x  p &(  r  S IdV     B% z  >     <H 'Y<$D 0  H  0޽h ? 33___PPT10b.1M+P!wD6' = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* .%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* .O%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* O%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* !%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* !:%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* :W%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* Wy%(+%    * O (   r  S @Id,     S <'`<$D 0   +9&9  3  c"$,$D 0N   S X99?+9&9J   # "`+%1J   # ̙"`368J   # ̙"`o38J   # "`38J !  # "` 3%8NB " S D 1 3NB # S D13NB $ S Dq1r3NB % S D"1"3 &  C & "`+%&5  SCOOP platform-independent6CC   '  3 "`&5(8 V.NET"A   (  3 "`638  .NET Compact FrameworkFCCC   )  3  "`&5 8 WPOSIX"A   *  3 | "` &5$8 T& "A  H  0޽h ? 33___PPT10.@+#D' = @B Du' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* 1%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* 1Z%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+j   xp (  x  c $Id,     c $'C<$D 0    <A ?33fff?i8 $D 0H  0޽h ? 33  ___PPT10r .@+<5DF ' = @B D ' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*A%(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Bt%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+  \(  x  c $)Id,     c $*'<$D 0  H  0޽h ? 33___PPT10b.@+YD6' = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$/%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*/4%(+  P\(  x  c $4Id,     c $5'Y<$@ 0  H  0޽h ? 33nf___PPT10F.@+ED' = @B D' = @BA?%,( < +O%,( < +D| ' =%(D$ ' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*M%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*M%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+  @\(  x  c $xKId,     c $tLj'Y<$@ 0  H  0޽h ? 33___PPT10.@+ED' = @B D=' = @BA?%,( < +O%,( < +D8' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*?%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*?[%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*[g%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*g%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*R%(+  B(  ~  s *+B#style.visibility<*h%(D ' =%(D ' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*i%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+B  ( ` (  x  c $dyId,     c $`z'Y <$D 0  T %n 3  c"$  ,$D 0N  S X99?%nJ2  # "`%g J2  # "`6 nJ2  # "`g ZB  s *D>6g  ZB  s *D>g q    3 $"`S%g  " SEPARATE_ SUPPLIER0#!C #    3 "` g  p X<CA     3 "`o zn x SEPARATE_X< C A  H  0޽h ? 33___PPT10.@+|^Dn' = @B D)' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$4%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*4F%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*G%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+   7/(  x  c $8IdV    '  #"' X  <?# '   separate_execute ([x, y], agent r (x, y), agent r_precondition) r_precondition: BOOLEAN is do Result := not x.is_empty and y.count > 5 end -- separate_execute defined in -- class SEPARATE_CLIENT -- client class inherits from -- class SEPARATE_CLIENT !& + x3+' d  @`  <?''#  # r (x, y) -- x and y are separate r (x: separate X; y: separate Y) is require not x.is_empty y.count > 5 i > 0 -- i non-separate do ... end 3 ,3 38x :  @`D  <?# ' L x: SEPARATE_X -- SEPARATE_X inherits from X and -- SEPARATE_SUPPLIER 6M<3L  @`&  <?'# ' * x: separate X x: X -- class X is separate:+3*  @`  <?#  qSCOOPLI  @`   <?'#  kSCOOP  @``B   0o ?'# `B   0o ?'# `B   0o ?''ZB   s *1 ?# # `B  0o ?`B  0o ?# `B  0o ?'''`B  0o ?'`B  0o ?'''`B  0o ?'`B  0o ?# ZB  s *1 ?'''ZB  s *1 ?'H  0޽h ? 33___PPT10i. `+D=' = @B +  @\(  x  c $`IdY     c $\'<$@ 0  H  0޽h ? 33___PPT10. `+ED' = @B DU' = @BA?%,( < +O%,( < +DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*J%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Jl%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*l%(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+&  =5p$(  $x $ c $IdV    ' $# #"' X $ <?# '   separate_execute ([x, y], agent r (x, y), agent r_precondition) r_precondition: BOOLEAN is do Result := not x.is_empty and y.count > 5 end -- separate_execute defined in -- class SEPARATE_CLIENT -- client class inherits from -- class SEPARATE_CLIENT !& + x3+' d  @` $ <?''#  # r (x, y) -- x and y are separate r (x: separate X; y: separate Y) is require not x.is_empty y.count > 5 i > 0 -- i non-separate do ... end 3 ,3 38x :  @`D $ <?# ' L x: SEPARATE_X -- SEPARATE_X inherits from X and -- SEPARATE_SUPPLIER 6M<3L  @`& $ <$?'# ' * x: separate X x: X -- class X is separate:+3*  @` $ <?#  qSCOOPLI  @`  $ <$?'#  kSCOOP  @``B  $ 0o ?'# `B  $ 0o ?'# `B  $ 0o ?''ZB  $ s *1 ?# # `B $ 0o ?`B $ 0o ?# `B $ 0o ?'''`B $ 0o ?'`B $ 0o ?'''`B $ 0o ?'`B $ 0o ?# ZB $ s *1 ?'''ZB $ s *1 ?'H $ 0޽h ? 33___PPT10i. `+D=' = @B +  p #((  r " S $IdV  $ v  3 #"&yd(' $^  < ?"`0! $ separate_routine (x, agent x.f (a))F% 8   @`)  <$ ?"`!0  x.f (a) -- a is expanded.3&  @`  <PB$?0  C[ if separate_integer_value (x, agent x.g (a)) > 0 then ... v\;8*  @`1  <,Y$? 0  if x.count > 0 then ... D &  @`Q   <i$?0S    i := separate_integer_value (x, agent x.h (a)) -- use function corresponding to returned type: -- boolean_value, integer_value, real_value, -- double_value, char_valueT  3  9       @`|   <(v$?S 0  ^ i := x.h (a) -- h is function and returns -- expanded value -- res is non-separate 8_M38@  @`g   <$?0S  ) res ?= separate_value (x, agent x.g (a))F* J   @`   <t$?0S  _ res := x.g (a) -- g is function and returns -- reference value -- res is non-separate.`P3JA  @`   <$?0! qSCOOPLI  @`  <$?0! kSCOOP  @``B  0o ?0ZB  s *1 ?!!ZB  s *1 ?S S ZB  s *1 ?  `B  0o ?0`B  0o ?!ZB  s *1 ?00`B  0o ?!ZB  s *1 ?`B  0o ?0`B  0o ?!`B  0o ?!`B  0o ?S `B  0o ?S `B  0o ?S `B  0o ?S  `B  0o ? `B   0o ? `B ! 0o ?0H  0޽h ? 33___PPT10i. DQ+D=' = @B +   P\(  x  c $0$IdY  $   c $$'<$D 0 $ H  0޽h ? 33  ___PPT10r . `+YDF ' = @B D ' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Ug%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*g%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+   (.(  (x ( c $$IdV  $ v  (3 #"&yd(' $^ ( < ?"`0! $ separate_routine (x, agent x.f (a))F% 8   @`) ( <$ ?"`!0  x.f (a) -- a is expanded.3&  @` ( <$?0  C[ if separate_integer_value (x, agent x.g (a)) > 0 then ... v\;8*  @`1 ( <$? 0  if x.count > 0 then ... D &  @`Q ( <?0S    i := separate_integer_value (x, agent x.h (a)) -- use function corresponding to returned type: -- boolean_value, integer_value, real_value, -- double_value, char_valueT  3  9       @`|  ( < ?S 0  ^ i := x.h (a) -- h is function and returns -- expanded value -- res is non-separate 8_M38@  @`g  ( <`?0S  ) res ?= separate_value (x, agent x.g (a))F* J   @`  ( <)?0S  _ res := x.g (a) -- g is function and returns -- reference value -- res is non-separate.`P3JA  @`  ( <2?0! qSCOOPLI  @`  ( <;?0! kSCOOP  @``B ( 0o ?0ZB ( s *1 ?!!ZB ( s *1 ?S S ZB ( s *1 ?  `B ( 0o ?0`B ( 0o ?!ZB ( s *1 ?00`B ( 0o ?!ZB ( s *1 ?`B ( 0o ?0`B ( 0o ?!`B ( 0o ?!`B ( 0o ?S `B ( 0o ?S `B ( 0o ?S `B ( 0o ?S  `B ( 0o ? `B ( 0o ? `B  ( 0o ?0H ( 0޽h ? 33___PPT10i. DQ+D=' = @B +   ` \(   x   c $DIdY      c $T'<$D 0  H   0޽h ? 33  ___PPT10 . `+YD ' = @B D= ' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* [%(D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* ]o%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* o%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+   ,.(  ,x , c $UIdV   v  ,3 #"&yd(' ^ , <\f ?"`0! $ separate_routine (x, agent x.f (a))F% 8   @`) , <q ?"`!0  x.f (a) -- a is expanded.3&  @` , <܀?0  C[ if separate_integer_value (x, agent x.count) > 0 then ... v\;8*  @`1 , < ? 0  if x.count > 0 then ... D &  @`Q , <w?0S    i := separate_integer_value (x, agent x.h (a)) -- use function corresponding to returned type: -- boolean_value, integer_value, real_value, -- double_value, char_valueT  3  9       @`|  , <?S 0  ^ i := x.h (a) -- h is function and returns -- expanded value -- res is non-separate 8_M38@  @`g  , <?0S  ) res ?= separate_value (x, agent x.g (a))F* J   @`  , <D?0S  _ res := x.g (a) -- g is function and returns -- reference value -- res is non-separate.`P3JA  @`  , <?0! qSCOOPLI  @`  , <?0! kSCOOP  @``B , 0o ?0ZB , s *1 ?!!ZB , s *1 ?S S ZB , s *1 ?  `B , 0o ?0`B , 0o ?!ZB , s *1 ?00`B , 0o ?!ZB , s *1 ?`B , 0o ?0`B , 0o ?!`B , 0o ?!`B , 0o ?S `B , 0o ?S `B , 0o ?S `B , 0o ?S  `B , 0o ? `B , 0o ? `B  , 0o ?0H , 0޽h ? 33___PPT10i. DQ+D=' = @B +   \(  x  c $Id,     c $d'Y,<$@ 0  H  0޽h ? 33  ___PPT10f .@+ED: ' = @B D ' = @BA?%,( < +O%,( < +DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*-%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*-E%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Eg%(D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*h~%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*~%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(+U  H(  x  c $@Id,     c $<'Y`<$D 0   - s *t"`J ,$@ 0 f Computer1 " 2     . s *"`*j ,$@ 0 p AppDomain1 , 2     / s *H"`  ,$@ 0 \o1   2   0 s *H"`  ,$@  0 \o2   2   1 s * H"` ,$@  0 f Computer2 " 2     2 s *H"` *j*,$@  0 p AppDomain2 , 2     3 s *`H"` ,$@  0 \o3   2   4 s *<H"` ,$@  0 \o9   2   5 s * H"`p@ ,$@ 0 iComputer3 " 2    6 s *d$H"` 6 ,$@ 0 p AppDomain3 , 2     7 s *)H"`c # 3 O ,$@ 0 \o4   2   8 s *.H"`c O ,$@ 0 \o5   2    9 s *h3H"`) cH,$@ 0 p AppDomain4 , 2     : s *<9H"`  ,$@ 0 \o6   2   ; s *@>H"` ` p ,$@ 0 \o7   2   < s *DCH"`  ,$@ 0 \o8   2  B = 0DjJ ZZ ,$@ 0B > 0DjJ M ,$@ 0B ?@ s *DjJ M M v,$@ 0B @@ s *DjJvM v,$@ 0B A 0DjJ6 6 ,$@ 0B B@ 0DjJF && ,$@ 0B C@ 0DjJ 3  ,$@ 0 D 0KHV - ,$ 0 To9.f 2   E 0PH [ ,$ 0 To1.g 2   F 0MH A x ,$ 0 Xo6.f(o3) 2    G 0pXH)  ,$  0 U o8.g 2   H 0X\H ` X ,$! 0 To4.f 2  H  0޽h ? 33::___PPT10k:.@+9D5' = @B Db5' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*6%(DL' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*6Z%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Zf%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*f%(D -' =%(D,' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*-%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*.%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*/%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*0%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*1%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*2%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*3%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*4%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*5%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*6%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*7%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*8%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*9%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*:%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*;%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*=%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*>%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*?%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*@%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*A%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*B%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*C%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*E%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*F%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*G%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*H%(++0+-H ++0+.H ++0+/H ++0+0H ++0+1H ++0+2H ++0+3H ++0+4H ++0+5H ++0+6H ++0+7H ++0+8H ++0+9H ++0+:H ++0+;H ++0+<H ++0+DH ++0+EH ++0+FH ++0+GH ++0+HH +   \(  x  c $HId,  H   c $ܳH'Y <$@ 0 H H  0޽h ? 33jb___PPT10B.@+ED' = @B D ' = @BA?%,( < +O%,( < +D ' =%(D ' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Eg%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*gp%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*p}%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*}%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+N  \(  x  c $HId,  H   c $H'+<$D 0 H H  0޽h ? 33*"___PPT10.@+YD' = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#4%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*4[%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*[p%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*p%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$M%(+  \(  x  c $4Id,     c $0'+<$@ 0  H  0޽h ? 33___PPT10b.@+ED6' = @B D' = @BA?%,( < +O%,( < +D' =%(Dh' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#o%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*p%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*)%(+}   $(   r   S PHIdV  H r   S $H' H H   0޽h ? 33___PPT10i. S4+D=' = @B +BFx] @ן (jݠGՀWp"Q6xk[“zTkֻg6mVm3o|739C{@Ub2YXl"{dFQE<`Bz \+a7F}~R$T5K[i$MY Քj[?M@ة!pK?iObd(׶ "Q *C=bјZ3"=s_M<./h$Ԥ׺ }G\'3e,Lw,ј@ >p7==7n%p+` pp ppk`6m/o/}'`X   pW0A ;p X1P?Q <}ÀˁccG#a$( 4*'N2a%O<SOC`%p:sxE@.KG<@ S}h! ZoD5Fu,`E`+F`2 ʧeI/4Hڦմ|c&. n3]&m{k[ WkR>visiy}@_zX\1E;:-3d_/_C-Gn?N9^h,Iq8(.5&iT"=/Aڕ\X᱔p==^"ztG #l`?ԉ]>Nu֒UuZ^FAF=x\yqy[/V/^ x90Wx-rπ?/[?9ꂇ;Xw-:^Ljȑ/;|lG&($UW PiU^@50vaسJ,'} ucUEmlXGSӾ+b`*Fn_謙4|*i=q+!LV˫ dɳI\yӕ'Ϡݝt=Ed3hV 5~ǿj+(`a!5gNd"=?7ƍA 7FnNJE$R<7rsڸv̕h+'I:^"9v}N:vTٳ_ jGAEFg8 T' I^ 1~%c2&9CApbp*N؀EaÙW)A3!p n) 9CM8&E$3ZJ278xTM%z<0N`Arc0 R"Qq 丁t&P&c|vR*?c*VWyFםް5Veқ9N`pt H@B<@L AV>SETG{ɴc= &a` [ dh')at*hdQ/~udX U0 p8FxƖ1x(A B}>'،0v PafdwUGc.1A<7%.&& ͗yxzE8Q*Oz%c8̌ l1r4M+e2 ,qE .3AcUL@'5~u]|"?Ja$ NAc-dF<nykd3'GzȂgS@eoO?,8y6mz[ȂgNgydlN<`ށB&AM_AilG/:$} MSA+g˪EG,dN ׊昑\gM '7nufvJh:fYAqqqa>Vo|GB+L?>jDhIczTE A ,Tk:/1*A̻n4QY7@}Mҡ7(L5V^^^+G@d**Er:V{yBӘ~4$L4F^a C$x̚ \e,I5qș cJ54BCV V!MkWV5 ~s†Ȃ^`X9A*e?'̤,YuV[0x`T V/V3|Z`U$e6L0aè<#W hv&:T%ױ TA@2\%hN 9ColZpm*,*Ase0: Uy7g>% UUR1Tݖ&=ɫ{1̵$憷ηF{L}v[m @P'C,8y.<_4'%}/wȂ璻<C*c9hFNd]_mtﯮtj+Wxp~k$cI%*);0z-}E'U ^7ςqn7xWk3yFlI k^;] NX1>7s*QajH{&l "3O 8H  Up d. { dV)eqX^u'OL<=zz9STņ`b^Ɲˤbbܘ~T* 2_f'uzÂ8F4c^l(̻op2  ('bqXp{:|yfpy&NxfOUðW\l^kĂ:@K{`51fOM\-pRXpZम<-pI]?d[j'o)NYڂ*΂J?ZI84Ο:-p5 `kƏj-8y\MqQݻ'莻ѣJ Nj<ڵ;{o)S' S^cǶw'' ~/q&M֧LoSS B~Jʕ+{R<7iƛfj4'5{[#y'dBM/j|6g+v'jÞMSb]pr[pRsz 9w1}=\hML*!L|ĩ'/?F-82< >UΠ;`H7&kI;ZpROAo|b88As5Opǂ:6:NbhU?j~;<@bD3ްuu 9x5So'[p2}ә~"̭WÀa%ׄ?-8yyK\tm]p?aIuzpxԃW ˕jcjחvTsŕ?-p;V`'yT:j-p5 RA<}8?n-p ~K NW m_XpZK NW;෽j,8y \pRO? .Qv|*NQ $cT?Ƥb9ƨveNC82'''qɾ*gHbigܪ c?>~\*y370ck!N%拎 t s g>*Yu/=!]q"8ZB/g`q09U>S=c#،`[Q81/$y5Nwj\ws Dc>0PBP\5SZ~/ߕĨ>JPVV觟~B3kzt49ZF 4@ZCW?ыGTNQƣ>ꏆ JVIYD^}.4h `T!eMDw \pӈޔ"I:e|8"9uWdW6~SZ+QHSx,8V),mxODB\Ho|_RZXV37vՃP@NaA~p0 ?qK^"-BU,$RM97ZAz17荶z#J;޸<]I+ oaX9\YNX0w|͹ r 9XC9/euwuu9d6֑=Չrqpj=u0oXGUspXW"V흊-.:Z] epLݢAv3\3\f֛* W3\:l: cubPa0vF'#kff!E2>me}{CFcFXSFsFKFkFJ0 쳐C9ρ79f?s[/qFW!^ rTtHPuÌhvnc9+V6tEb͊Dn^r@D|Z;5G59O Y!rHsxag:wM{{+rJ^IAˢNH#M9H! 989"?hpȓ._isJ+W /pciWi9p->Ωݒ_ԍMllSm>~VIܡ-uˤ4/Hp&x_$LͽdSn_NcxGp0mfv^92TK T$GQOԷxH%YV"t鮏;ʻ0Jb[âD:B>PԶѩ 1;h25 =%Ց#Ⱦ1ðPC1\;=;7{w5(]0S(K?I}I'! TwLKB RÚD[UDU4ڦ3z;bp|ouF*44R-=AW}\m{|dc'wق|1d 搫maqKʄ_$*#e`Ylll,}llY;w ](7V(OVim=ɕzaZO*mCK_(+N*B:]k<w2e2E9G(w(ѷJPUTTUr,JVUBf]Py%jWwef~y1vfIHM&M3Of[ jnh 5\v`핡\s3A;}||]_{R{U{O^ֺ% a._{P6o^Y w Ɍ.EV"wnFChf<(U@y:}D;-)ճEGBO*iU6fإ2^[u`Qsv@> 5Y>ooM.X[cGކ11R622\3 O HHyP0V%(PǨTj(j,Da0^8Iؒ\'%D9bh+y|WCѰq_n<"(E}EoR`ص D#2Q/Q|jj|2ʄXr+F$onLn*q[`sG*9*sh{l7 gopkӟOضRh}(E4GZMtXD"E#i/yO2L͒3$H%q !d>%wMH؈o$7rvm qw G>*hu/?Bdv6[6ˢ7qݓ(Rl QQ:C>JW[NO.xՄt9*2N[>F0}pppGeBktz ;pEZr*aDqr|4*1^Bmt*U$qi)q O>2NHFm8&I7EXfLPPI1I#٭z{j6$# oj] uk{"#хMҘ1h@vV07BhrWv7 W_}  x*! \D.ҷuO;XCu9qeБQن@[{{SthL5,{76 5jUvEXDZ*s]@p;$|Ԧ}йֱ.$W$΋փPT`QַYSV4EvQ0*Q qɔ"E12UEA%W$Ǥ=J,MLMLOOVN 5Z$R1FhlӦm[Ti{nnMy&vX ĊA n>dFӅl9M~o6 ll"bBX1}&;} 6FG)uTVrJY"K|_Br[o %`$B u#}wuv[V/$E]=ԫrAS&{of*,`ٙ* =hZS\q &k=ROh!j rzc?Dۣh|1uB1/|BCOhoU`_ 4ݛz|a !D7P,H|*In$ HBC!SU9moU)rA؈-6jmEĒ~u-l$q7 4;;Sol../)"Hp$rSrԝB ߼Lo<$sC|+.VieKĝ' i,oYcʞRXR-?5ϻN|H/M7 ԟOˇ!.8G>p)v`y'YD=4,gEQ僓IYIÙU "*0HQCb# t\]C d-wZGh\Ks46NpYZp"e 9`B Xr;~zri1/>si#F2a^Y0+ΟmEt[GG8,~G|>.o]e hʃWpg}?8L6oVcq5@8'o"+,!և$p>@,(ȟ&]*&&LC4;a-Md%wF/-zԓRҟt1EJ7ÿSeu\4Odd[6B4{{Q ~bmBNe4ÞOП,KbQlZ? ,>gGk+GGX,2Uwa$D~K+l_׀w~ɍHB:5K?m r{>sbFmC r`>Tw#΀([g3Ki->i?:z}d5 Kn4%q$yB!Sv[Po3Q9nsE46c٧sXDې'E^=$1-2K9 B.|"[A,"@,⛐qюַZ9H!PdQ# _<|7bhS%cz)1!>ޘM>XaynmYB;F놜` h;ICnMh]?n2O|}+o \™*ڹۗ( UPfSvPVJn mh醋SIW$s^ MXa㓩TSMJԡV# bIԩ6RR]SUsqrAk'>X4UͶowͫ(+RgW ]c@K;}%w^K!X d 5q‹%mC g"X8&ko\m(]tw[3:<ұPmO\[%,v 4LEƮn6 $DU7qcWB/})r IR,97aKn[jARTݺPnԾkm Ii2m<{)qPv]ώ>r?0* 6e=NKsO.^^mOnlr ދ]2r/ e߮zu$)Q'-:s"d/- =&_("[- :iA ,O3Ou7O;F*l]"OYx }!d$QC/lדnoӘG߮%$Rm v5aٞ|F*H4yt)k5bS\1_+CT[sUG#lU|Vj7Ȏ-&fJ~6dNn(U#F2}3&fvK3{;(w7Ղ=?e23~@@MMffc Z|)hjǺ8^ -j-9Z*#_p]/q%}ɯu~邅Bfd]e蠁9F RddS(_V  œ\A;42A>GN2H+QeOd!Q4L2rdV=|K6{}ַ&,u#W@f9J%zUx/}3RPώu$!9v4ϑ.ec]n&b{ sG'w<ƝO=|JtRtj~gI=#v0jq|jc`[iB x9_ȑvӷ4=]15&n\jDc>޻ܲ!ʨC.$/U#eH/y39u }sTۯmǖ4;-6Oԃ1 fFLLg&eč6o&q.`od&'DCL+!C2M' -Z8z5bz72*߅,.D4腐#ؒd !ڶE z+ZmI 3BϼYS(wŖ=J̊1}f͹Y1":P2(TNȱaW{A] MQ='}) A~nqA2O^WoVLԻWB]2&t3E8^~ȑ(VK£vְ<3פ7+%(>7V^ ;=xp03»rJ\YOQĒ8Z)Fě|GwUę1[b'q[|J*/W$Ik` tQ$%Jlv) <h26  4Oh&IA8#@BUL\$+IvĻ8HZW\$+I߆C*IdT%IGVɌJD,$ u$$d?H$9 +InD[I$}Tp4Ŗ )[k?$~=8$ *IFyNy+@ұROA"e$443L.}>lp{h ҷeҵK[vbӶ߭|nuÜM~(Po7s7`]n?66x>zχ4!)m׫"_ubŞ~KD?)m|5jCrtEkg4XNBI | ɿbx垄h.U[LT[Y~k߇[UYmDװw!R.w \rJm`8zW0^n?-.)$,lGSm}Ϭ$=))EvX߹hB_v=oJ}E;V%$ZmwnWƩ6zBy08~cN+&X75*>W;_'z`Go`bטBcCCk; 6ğzc8۝4AMRw"`B]zcI_,ʡQQ6Mv@ߖ 'w$d9qJ`p¾ý}ƝDrga ꯝ?Nzc!Ĵ[Nۂv٢I1pO>kFR[z)y:9P#0 }d:_+–a<@[/@o؛f$PF!Q^K1ːY)xEw^deӒɭFAh BMy>L/(9}{.3m:ԮioyOۂ/9c ѯLܦU}Wp||)Zhڠ{'myy?BcbuH<2x: Xݳ . .,Dn4QAC&s5j5hcԈT jBPk;%3>_b4_ѽ5]UsRRk2>8 p1W,BUJ@@sY( qXq.+CҪ # ?*bGEC%H?_=ux>K6?i>d?ߘ0*n#[ 6-: lI`uN We*HCV| <|!W y<; pfG"D$#5;gyGF`/ӎY??&ϘcCx Zb}=X@+7| AT^C< A0'/p? G|"@I.sb;+CT]zoxFsg_(p|6-8;le7fgGopY'v${*$cLU楨&xA̎7)YulK=Ete G7|q>CogISc"C&'E%EM 󘸰a1iqt4oVՍzBT0yxqnwv_}=jW;&N_lCa q@ȾHONǾ5oUQ 7hGp]idggjcl>u\; flӁ!XXH?sL9 !La27|^"k xs3,@_:=b|&.`~8I1(G츀iX9ʯP$sV8 R&`Ȟ}ZDBܵ&_Uq@yf )ïTޑ8w@].߂7Q}Ds'wMsm_ШЈ.hqcqf< #mL+{41}Sc2&Dݳ[b'17K%\_e-=}$W2aY>C̵m *Z6XǛß#3!R֭%d-|g{634c^/p1>!w#btߍl=|!wV c#KRTf #ތ]M*u_+8h1o/je&P€l<9HSW\R6}D}.+^#ͽI2#Q]itGgՍ:;틻VPN75 })i`۸q}_b/H<{,YV$i8_tD=jYSukCW7{Ԗחx:xAxQ+;Px.*'U.낫M̓ ("\iֹP06%WٚHɔCͭgf*N~Gz0aZu})7js%VWpIw]3TXY~M~ew`s,|ng.TSDM /!~E;_|U yĵܠi4 q]W"v nˑ4%幯]Eʍ[ҝnuUD^P5jǤ&o~byeѲ 9Q~EsbC}Y5]x^v,w}MwrJT<=rF]#OƉ\>?q(ݶ3}AVrm:B/]thUԢ(Et,Y6j`źGLN~w.}5S+ s o|I6[{,+u%W\>NS-TZE|Elz6?<7k{r/(0pJoӤ%@C֥[s?me[ʎ~uʽTnH=pGMV4>W& LVdgd2G&51qS_G$dmExs&ld]~#̚ Cψr]{^pLAyq2Kɮ1E%QkuP3 G+unf`&g:iy=J_d#Eγgd?[J !,q"2 87وoIE@G;BhyKrb::L &DoݓrGM*İ``{EU+JB"ܓaIX^ Npw SOS;&c??wnOƘ=LGU~:c r9f aOEO "-{]PI1G" &Wg' X5h;'Xz׷\gY{5)fB__a"eĢx+yKa] Lޔ20]0Y߻eᩭ N~:>Mn`NN:7JlJiecn\&Rx킆斥4XJ-֫6Tk:3HiMȡz:nӷJ?fݨP"7R;e0όTx_G _-A[T=;p5_#5 ouŗ;ˑc㬇(N8:7P0Zȑ}KG*/vbpI16HSMNs#B=@tjj5ǒ4=Q&նgUE. WPzx]9H_ȓmH4(ؓ ~"& 烱7H : o'ͭD,ERJB'6?QA”ЌyLX@$hDJV6 \l}OiYilxk>8;pW7j8Ņ1'0d/lYL/}pN g,3f, h`d-¼HVb&#^ ,xc~r,EG.Ұ垳 ۀ|Z/be'rbCq/Fc=da/ZGEϖvҁ$c|(Jzۂ[ F?1_*ʀ?Tx@}cd@UKxPtڻUkmb~q`x#5`Z2Kŀ@#] EIor ٰhخ%`DF~t,/Ed6*(_+F&kqE(FHuȳjtpQ1.ʇ—-M6s@ #>] d f1~LJ bpŀy[Kk{G?_~YkpO?~r`{?PS f{J0*N pwH7\)`z#@ N?|,K.`W,| -c.? Ө8eOh+'0T hp    ,4Chair of Software EngineeringtDepartment of Computer ScienceepaVolkane115Microsoft PowerPointr S@{5M@ g%@7h iGSg  )'    """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___www4'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwýý޼mmgmsÒsݒ¼sޒݻ¶n޻ü½՜.+,0    (0 8 sOn-screen Show.Swiss Federal Institute of Technology, Zurichix} !ArialVerdana Wingdings ETH Light HelveticaSymbolseMicrosoft Visio DrawingGSCOOPLI for .NET: a library for concurrent object-oriented programming Overview MotivationThe SCOOP model"Two-level implementation of SCOOPAsynchronous calls ProcessorsAccess control policy&From preconditions to wait-conditionsSynchronizationSCOOPLI libraryUse of SCOOPLI (1/2),Feature separate_execute of SEPARATE_CLIENTUse of SCOOPLI (1/2)Use of SCOOPLI (2/2)-Feature separate_routine of SEPARATE_CLIENT Use of SCOOPLI (2/2)*Feature separate_value of SEPARATE_CLIENTUse of SCOOPLI (2/2)SCOOPLI for .NETDistributed executionCCF Concurrency Control File ConclusionsFuture research Questions ?  Fonts UsedDesign TemplateEmbedded OLE Servers Slide Titles_sJVolkanVolkan  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesCurrent UserSummaryInformation(aUPowerPoint Document( DocumentSummaryInformation8Root EntrydO)?oPicturesCurrent UserVSummaryInformation(aU*_sAntonio CisterninoAntonio Cisternino