
    h5M                        S SK r S SKrS SKrS SKrS SKrSSKJr  SSKJr  SSKJr  S\	" \5      ;  a"  \R                  \l        \R                  \l        SrSrS	rS
 r " S S\5      rS rS r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S 5      r " S! S"5      r0 S#\" \R@                  5      _S$\" \RB                  5      _S%\" \RD                  5      _S&\" \RF                  5      _S'\" \RH                  5      _S(\" \RJ                  5      _S)\" \RL                  5      _S*\" \RN                  5      _S+\" \RP                  5      _S,\" 5       _S-\" \RR                  5      _S.\" \RT                  5      _S/\" \RV                  \" 5       5      _S0\" \RX                  5      _S1\" 5       _S2\" \RZ                  5      _S3\" \R\                  5      _0 S4\" \R^                  5      _S5\" \R`                  5      _S6\" \Rb                  5      _S7\" \Rd                  5      _S8\" \Rf                  5      _S9\" \Rh                  5      _S:\" \Rj                  5      _S;\" \Rl                  5      _S<\" \Rn                  5      _S=\" \Rp                  5      _S>\" \Rr                  5      _S?\" \Rt                  5      _S@\" \Rv                  5      _SA\" \Rx                  5      _SB\" \Rz                  5      _SC\" \R|                  5      _SD\" \R~                  5      _E0 SE\" \R                  5      _SF\" \R                  5      _SG\" \R                  5      _SH\" \R                  5      _SI\" \R                  5      _SJ\" \R                  5      _SK\" \R                  5      _SL\" \R                  5      _SM\" \R                  5      _SN\" \R                  5      _SO\" \R                  5      _SP\" \R                  5      _SQ\" \R                  5      _SR\" \R                  5      _SS\" \R                  5      _ST\" \R                  \" 5       5      _SU\" \R                  \" 5       5      _E\" \R                  \" 5       5      \" \R                  \" 5       5      \" \R                  \" 5       5      \" \R                  \" 5       5      \" \R                  5      \" \R                  5      \" \R                  5      \" \R                  5      \" \R                  5      \" \R                  5      \" \R                  5      \" \R                  5      \" \R                  5      \" \R                  \" 5       5      \" \R                  5      SV.Er_SW r`S]SX jraSY rbS^SZ jrcS[ rdS\ reg)_    N   magic)pb)pb2dictencodebytes         c                     U S-
  US-
  -  S-   $ Nr    )xys     6/usr/lib/python3/dist-packages/pycriu/images/images.pyround_upr   >   s    !eA!#$    c                       \ rS rSrS rSrg)MagicExceptionB   c                     Xl         g Nr   )selfr   s     r   __init__MagicException.__init__C   s    
r   r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r   r   B   s    r   r   c                 T    [         R                  " [        R                  U 5      5      $ )z(A helper function to decode base64 data.)base64decodebytesstrencode)datas    r   decode_base64_datar'   G   s    cjj.//r   c                 t    U R                  [        R                  " [        R	                  U5      5      5        g)z9A helper function to write base64 encoded data to a file.N)writer"   r#   r$   r%   )fr&   s     r   write_base64_datar+   L   s"    GGFszz$/01r   c                   H    \ rS rSrSrSS jrSS jrSS jrS rS r	S	 r
S
rg)entry_handlerS   zd
Generic class to handle loading/dumping criu images
entries from/to bin format to/from dict(json).
Nc                     Xl         X l        g)z-
Sets payload class and extra handler class.
N)payloadextra_handler)r   r0   r1   s      r   r   entry_handler.__init__Y   s     *r   c                    / n 0 nU R                  5       nUR                  S5      n[        U5      S:X  a   U$ [        R                  " SU5      u  nUR                  UR                  U5      5        [        R                  " Xb5      nU R                  (       aR  U(       a-  S n	U R                  R                  X5      n
SU	" U
5      -  US'   OU R                  R                  X5      US'   UR                  U5        M  )z
Convert criu image entries from binary format to dict(json).
Takes a file-like object and returns a list with entries in
dict(json) format.
r
   r   ic                 r    S H-  nU S:  a  [        U 5      U :X  a  SX4-  s  $ SX4-  s  $ U S-  n M/     SU -  $ )N) KMGTPEZg      @z%d%sBz%.1f%sBz%.1fYB)int)numunits     r   human_readable*entry_handler.load.<locals>.human_readablex   sN    $KD"V|#&s8s?+2c[+@$@+4{+B$B6MC %L  (#~-r   z... <%s>extra)r0   readlenstructunpackParseFromStringr   r1   skiploadappend)r   r*   pretty
no_payloadentriesentrypbuffbufsizerA   pl_sizes              r   rJ   entry_handler.load`   s     E LLNE&&)C3x1}4 3 MM#s+ED!!!&&,/OOE2E !!. #0055a?G%/.2I%IE'N%)%7%7%<%<Q%FE'NNN5!? r   c                 P    [         R                  " U5      nU R                  X25      $ )z4
Same as load(), but takes a string as an argument.
ioBytesIOrJ   r   srL   r*   s       r   loadsentry_handler.loads   s      JJqMyy##r   c                    U H  nUR                  SS5      nU R                  5       n[        R                  " X55        UR	                  5       n[        U5      nUR                  [        R                  " SU5      5        UR                  U5        U R                  (       d  M  U(       d  M  U R                  R                  XBU5        M     g)z
Convert criu image entries from dict(json) format to binary.
Takes a list of entries and a file-like object to write entries
in binary format to.
rC   Nr4   )popr0   r   dict2pbSerializeToStringrE   r)   rF   packr1   dump)r   rN   r*   rO   rC   rP   pb_strrR   s           r   rb   entry_handler.dump   s     EIIgt,E LLNEOOE),,.Fv;DGGFKKT*+GGFO !!!ee""''%8 r   c                 p    [         R                  " S5      nU R                  X5        UR                  5       $ )zN
Same as dump(), but doesn't take file-like object and just
returns a string.
r6   rW   rX   rb   rD   r   rN   r*   s      r   dumpsentry_handler.dumps   s(    
 JJrN		'vvxr   c                     Sn UR                  S5      n[        U5      S:X  a   U$ [        R                  " SU5      u  nUR	                  US5        US-  nMU  )z9
Counts the number of top-level object in the image file
r   r
   r4   r   )rD   rE   rF   rG   seek)r   r*   rN   rQ   rR   s        r   countentry_handler.count   s]     &&)C3x1}
 	 MM#s+EDFF4OqLG r   )r1   r0   r   FFF)r   r   r   r   __doc__r   rJ   r[   rb   rh   rl   r    r   r   r   r-   r-   S   s&    
+)V$9*r   r-   c                   >    \ rS rSrSrS
S jrSS jrS rS rS r	Sr
g	)pagemap_handler   z
Special entry handler for pagemap.img, which is unique in a way
that it has a header of pagemap_head type followed by entries
of pagemap_entry type.
c                 b   / n[         R                  " 5       n UR                  S5      n[        U5      S:X  a   U$ [        R
                  " SU5      u  nUR                  UR                  U5      5        UR                  [        R                  " XR5      5        [         R                  " 5       nM  )Nr
   r   r4   )
r   pagemap_headrD   rE   rF   rG   rH   rK   r   pagemap_entry)r   r*   rL   rM   rN   rP   rQ   rR   s           r   rJ   pagemap_handler.load   s    !&&)C3x1}  MM#s+ED!!!&&,/NN7??59:$$&E r   c                 P    [         R                  " U5      nU R                  X25      $ r   rV   rY   s       r   r[   pagemap_handler.loads       JJqMyy##r   c                 :   [         R                  " 5       nU H  n[        R                  " XC5        UR	                  5       n[        U5      nUR                  [        R                  " SU5      5        UR                  U5        [         R                  " 5       nM     g )Nr4   )
r   ru   r   r_   r`   rE   r)   rF   ra   rv   r   rN   r*   rP   itemrc   rR   s          r   rb   pagemap_handler.dump   sk    !DOOD(,,.Fv;DGGFKKT*+GGFO$$&E r   c                 p    [         R                  " S5      nU R                  X5        UR                  5       $ Nr6   rf   rg   s      r   rh   pagemap_handler.dumps   &    JJrN		'vvxr   c                 <    [        S 5      R                  U5      S-
  $ r   )r-   rl   )r   r*   s     r   rl   pagemap_handler.count   s    T"((+a//r   r   Nrn   ro   )r   r   r   r   rp   rJ   r[   rb   rh   rl   r    r   r   r   rr   rr      s      $	'
0r   rr   c                   4    \ rS rSrSS jrS	S jrS rS rSrg)
ghost_file_handler   c                 6   / n[         R                  " 5       nUR                  S5      n[        R                  " SU5      u  nUR                  UR                  U5      5        [        R                  " XR5      nUR                  (       Ga   UR                  U5         [         R                  " 5       n	UR                  S5      n[        U5      S:X  a   U$ [        R                  " SU5      u  nU	R                  UR                  U5      5        [        R                  " X5      n
U(       a+  UR                  U	R                  [        R                  5        OA[        R                  " UR                  U	R                  5      5      R!                  S5      U
S'   UR                  U
5        GM  U(       a!  UR                  S[        R"                  5        O6[        R                  " UR                  5       5      R!                  S5      US'   UR                  U5        U$ )Nr
   r4   r   utf-8rC   )r   ghost_file_entryrD   rF   rG   rH   r   chunksrK   ghost_chunk_entryrE   rk   osSEEK_CURr"   r   decodeSEEK_END)r   r*   rL   rM   rN   gfrQ   rR   g_entrygcrO   s              r   rJ   ghost_file_handler.load   s{     "ffQic3'
166$<(//"-999NN7#))+ffQis8q=   c3/""166$<03FF2662;;/%+%7%7rvv%G%N%Nw%WE'Nu%  q"++&#)#5#5affh#?#F#Fw#O NN7#r   c                 P    [         R                  " U5      nU R                  X25      $ r   rV   rY   s       r   r[   ghost_file_handler.loads  rz   r   c                    [         R                  " 5       nUR                  S5      n[        R                  " XC5        UR                  5       n[        U5      nUR                  [        R                  " SU5      5        UR                  U5        UR                  (       a  U H  n[         R                  " 5       n[        R                  " XC5        UR                  5       n[        U5      nUR                  [        R                  " SU5      5        UR                  U5        [        X$S   5        M     g [        X$S   5        g )Nr   r4   rC   )r   r   r^   r   r_   r`   rE   r)   rF   ra   r   r   r+   r|   s          r   rb   ghost_file_handler.dump  s    ##%{{1~$((*6{	C&'	<<,,.,0026{C./!!']3   ag/r   c                 p    [         R                  " S5      nU R                  X5        UR                  5       $ r   rf   rg   s      r   rh   ghost_file_handler.dumps-  r   r   r   Nrn   ro   )	r   r   r   r   rJ   r[   rb   rh   r    r   r   r   r   r      s    B$0*r   r   c                   &    \ rS rSrS rS rS rSrg)pipes_data_extra_handleri9  c                     UR                   nUR                  U5      n[        R                  " U5      R	                  S5      $ Nr   )bytesrD   r"   r   r   r   r*   ploadrR   r&   s        r   rJ   pipes_data_extra_handler.load:  s4    {{vvd|!!$'..w77r   c                 <    [        U5      nUR                  U5        g r   r'   r)   r   rC   r*   r   r&   s        r   rb   pipes_data_extra_handler.dump?      !%(	r   c                 n    UR                  UR                  [        R                  5        UR                  $ r   rk   r   r   r   r   r*   r   s      r   rI   pipes_data_extra_handler.skipC  "    	u{{BKK({{r   r   Nr   r   r   r   rJ   rb   rI   r    r   r   r   r   r   9      8
r   r   c                   &    \ rS rSrS rS rS rSrg)sk_queues_extra_handleriH  c                     UR                   nUR                  U5      n[        R                  " U5      R	                  S5      $ r   )lengthrD   r"   r   r   r   s        r   rJ   sk_queues_extra_handler.loadI  s4    ||vvd|!!$'..w77r   c                 <    [        U5      nUR                  U5        g r   r   )r   rC   r*   _unusedr&   s        r   rb   sk_queues_extra_handler.dumpN  r   r   c                 n    UR                  UR                  [        R                  5        UR                  $ r   )rk   r   r   r   r   s      r   rI   sk_queues_extra_handler.skipR  s"    	u||R[[)||r   r   Nr   r   r   r   r   r   H  s    8
r   r   c                   &    \ rS rSrS rS rS rSrg)tcp_stream_extra_handleriW  c                    0 nUR                  UR                  5      nUR                  UR                  5      n[        R                  " U5      R                  S5      US'   [        R                  " U5      R                  S5      US'   U$ )Nr   inqoutq)rD   inq_lenoutq_lenr"   r   r   )r   r*   rP   dr   r   s         r   rJ   tcp_stream_extra_handler.loadX  sn    ffU]]#vvenn%%%c*11':%&&t,33G<&	r   c                     [        US   5      n[        US   5      nUR                  U5        UR                  U5        g )Nr   r   r   )r   rC   r*   r   r   r   s         r   rb   tcp_stream_extra_handler.dumpc  s4     u.!%-0		r   c                 t    UR                  S[        R                  5        UR                  UR                  -   $ )Nr   )rk   r   r   r   r   )r   r*   rP   s      r   rI   tcp_stream_extra_handler.skipj  s'    	q"++}}u~~--r   r   Nr   r   r   r   r   r   W  s    	.r   r   c                   &    \ rS rSrS rS rS rSrg)bpfmap_data_extra_handlerio  c                     UR                   UR                  -   nUR                  U5      n[        R                  " U5      R                  S5      $ r   )
keys_bytesvalues_bytesrD   r"   r   r   r   s        r   rJ   bpfmap_data_extra_handler.loadp  sA    %"4"44vvd|!!$'..w77r   c                 R    [         R                  " U5      nUR                  U5        g r   )r"   r#   r)   r   s        r   rb   bpfmap_data_extra_handler.dumpu  s    !!%(	r   c                 n    UR                  UR                  [        R                  5        UR                  $ r   r   r   s      r   rI   bpfmap_data_extra_handler.skipy  r   r   r   Nr   r   r   r   r   r   o  r   r   r   c                   ,    \ rS rSrS rS rS rS rSrg)ipc_sem_set_handleri~  c                    [         R                   " U5      n[        US   -  n[        U[        5      nU R	                  5       nUR                  UR                  U5      5        UR                  XT-
  S5        UR                  5       $ )Nnsemsr   )	r   
sizeof_u16r   
sizeof_u64_get_sem_array	frombytesrD   rk   tolist)r   r*   rP   rO   rR   roundedrZ   s          r   rJ   ipc_sem_set_handler.load  sh    &E'N*4,!	AFF4L!	w~q!xxzr   c                 N   [         R                   " U5      n[        US   -  n[        U[        5      nU R	                  5       nUR                  U5        [        U5      US   :w  a  [        S5      eUR                  UR                  5       5        UR                  SXe-
  -  5        g )Nr   zNumber of semaphores mismatch    )
r   r   r   r   r   fromlistrE   	Exceptionr)   tobytes)r   rC   r*   rP   rO   rR   r   rZ   s           r   rb   ipc_sem_set_handler.dump  s    &E'N*4,!	

5q6U7^#;<<				()r   c                     [         R                   " U5      n[        US   -  nUR                  [        U[        5      [
        R                  5        U$ )Nr   )r   r   rk   r   r   r   r   )r   r*   rP   rO   rR   s        r   rI   ipc_sem_set_handler.skip  s<    &E'N*	xj)2;;7r   c                 p    [         R                   " S5      nUR                  [        :w  a  [        S5      eU$ )NHzArray size mismatch)arrayitemsizer   r   )r   rZ   s     r   r   "ipc_sem_set_handler._get_sem_array  s-    KK::#122r   r   N)	r   r   r   r   rJ   rb   rI   r   r    r   r   r   r   r   ~  s    	*r   r   c                   0    \ rS rSrS rS rS rSS jrSrg)	ipc_msg_queue_handleri  c                 ,    U R                  X5      u  p4U$ r   _read_messages)r   r*   rP   messages_s        r   rJ   ipc_msg_queue_handler.load  s    ))!3r   c                    [        S[        U5      S5       H  n[        R                  " 5       n[        R
                  " X   U5        UR                  5       n[        U5      nUR                  [        R                  " SU5      5        UR                  U5        [        UR                  [        5      n[        XS-      5      n	UR                  U	S UR                   5        UR                  SXR                  -
  -  5        M     g )Nr   r	   r4   r   r   )rangerE   r   ipc_msgr   r_   r`   r)   rF   ra   r   msizer   r'   )
r   rC   r*   rP   r4   msgmsg_strrR   r   r&   s
             r   rb   ipc_msg_queue_handler.dump  s    q#e*a(A**,COOEHc*++-Gw<DGGFKKT*+GGGsyy*5G%eEl3DGGD#))$%GGEWyy012 )r   c                 *    U R                  XSS9u  p4U$ )NT)	skip_datar   )r   r*   rP   r   pl_lens        r   rI   ipc_msg_queue_handler.skip  s    ''D'A	r   c                    [         R                   " U5      n/ nSn[        SUS   5       GH\  nUR                  S5      n[        U5      S:X  a    XV4$ [        R
                  " SU5      u  n	[        R                  " 5       n
U
R                  UR                  U	5      5        [        U
R                  [        5      nXiU
R                  -   -  nU(       a"  UR                  U[        R                  5        M  UR                  U
R                  5      nUR                  XR                  -
  S5        UR                  [         R                   " U
5      5        UR                  [         R"                  " U5      R%                  S5      5        GM_     XV4$ )Nr   qnumr
   r4   r   r   )r   r   rD   rE   rF   rG   r   r   rH   r   r   r   rk   r   r   rK   r"   r   r   )r   r*   rP   r   rO   r   r   r   rQ   rR   r   r   r&   s                r   r   $ipc_msg_queue_handler._read_messages  s)   &q%-(A&&)C3x1}  MM#s+ED**,Ct-syy*5GSYY&&Fw,vvcii(w*A. 45 2 24 8 ? ? HI! )$ r   r   Nro   )	r   r   r   r   rJ   rb   rI   r   r    r   r   r   r   r     s    3 r   r   c                   &    \ rS rSrS rS rS rSrg)ipc_shm_handleri  c                     [         R                   " U5      nUS   nUR                  U5      n[        U[        5      nUR	                  Xd-
  S5        [
        R                  " U5      R                  S5      $ )NrR   r   r   )r   rD   r   
sizeof_u32rk   r"   r   r   )r   r*   rP   rO   rR   r&   r   s          r   rJ   ipc_shm_handler.load  s^    &V}vvd|4,	w~q!!!$'..w77r   c                     [         R                   " U5      nUS   n[        R                  " U5      n[        U[        5      nUR                  US U 5        UR                  SXu-
  -  5        g )NrR   r   )r   r"   r#   r   r  r)   )r   rC   r*   rP   rO   rR   r&   r   s           r   rb   ipc_shm_handler.dump  sZ    &V}!!%(4,	Ud	()r   c                     [         R                   " U5      nUS   n[        U[        5      nUR                  U[        R
                  5        U$ )NrR   )r   r   r  rk   r   r   )r   r*   rP   rO   rR   r   s         r   rI   ipc_shm_handler.skip  s<    &V}4,	w$r   r   Nr   r   r   r   r   r     s    8*r   r   	INVENTORYCOREIDSCREDSUTSNSTIMENSPIDNSIPC_VARFS
GHOST_FILEMMCGROUP
TCP_STREAMSTATSPAGEMAPPSTREE	REG_FILESNS_FILESEVENTFD_FILEEVENTPOLL_FILEEVENTPOLL_TFDSIGNALFDTIMERFDINOTIFY_FILE
INOTIFY_WDFANOTIFY_FILEFANOTIFY_MARKVMASPIPESFIFOSIGACT
NETLINK_SKREMAP_FPATHMNTS	TTY_FILESTTY_INFOTTY_DATARLIMITTUNFILE	EXT_FILESIRMAP_CACHE
FILE_LOCKSFDINFOUNIXSKINETSKPACKETSKITIMERSPOSIX_TIMERSNETDEV
PIPES_DATA	FIFO_DATA)	SK_QUEUES	IPCNS_SHM	IPCNS_SEM	IPCNS_MSGNETNSUSERNSSECCOMPAUTOFSFILESCPUINFO
MEMFD_FILEMEMFD_INODEBPFMAP_FILEBPFMAP_DATAAPPARMORc                    [         R                  " SU R                  S5      5      u  nU[        R                  S   [        R                  S   4;   a(  [         R                  " SU R                  S5      5      u  n [        R
                  U   n [        U   nX#4$ ! [         a    [        U5      ef = f! [         a    [        SU-   5      ef = f)Nr4   r
   
IMG_COMMONIMG_SERVICEz&No handler found for image with magic )	rF   rG   rD   r   by_nameby_valr   r   handlers)r*   	img_magicmhandlers       r   
__rhandlerrR  1  s    sAFF1I.JIU]]<0]]=13 3]]3q	2
	(LL#F1+ :  (Y''(
  F@1DEEFs   <B 	B5 B25Cc                 V    0 n[        U 5      u  pEXCS'   UR                  XU5      US'   U$ )z
Convert criu image from binary format to dict(json).
Takes a file-like object to read criu image from.
Returns criu image in dict(json) format.
r   rN   )rR  rJ   )r*   rL   rM   imagerP  rQ  s         r   rJ   rJ   E  s5     EAJA'N||Az:E)Lr   c                 T    0 n[        U 5      u  p#X!S'   UR                  U 5      US'   U$ )Nr   rl   )rR  rl   )r*   resrP  rQ  s       r   inforW  U  s0    
CAJAL==#CLJr   c                 D    [         R                  " U 5      n[        X!5      $ )z%
Same as load(), but takes a string.
rV   )rZ   rL   r*   s      r   r[   r[   `  s     	

1A?r   c                    U S   n[         R                  U S      nUS:w  au  US;   a8  UR                  [        R                  " S[         R                  S   5      5        O7UR                  [        R                  " S[         R                  S   5      5        UR                  [        R                  " SU5      5         [
        U   nUR                  U S   U5        g	! [         a    [        S5      ef = f)
z|
Convert criu image from dict(json) format to binary.
Takes an image in dict(json) format and file-like
object to write to.
r   r  )r  r/  r4   rK  rJ  z*No handler found for image with such magicrN   N)r   rL  r)   rF   ra   rN  r   rb   )imgr*   rP  	magic_valrQ  s        r   rb   rb   h  s     	GAc'l+I 	K((GGFKKU]]=%ABCGGFKKU]]<%@ABGGFKKY'(F1+ LLY#  FDEEFs   >	C C3c                 d    [         R                  " S5      n[        X5        UR                  5       $ )z?
Same as dump(), but takes only an image and returns
a string.
r   )rW   rX   rb   getvalue)rZ  r*   s     r   rh   rh     s$    
 	

3AL::<r   rn   ro   )frW   r"   rF   r   r   r6   r   r   r   direncodestringr   decodestringr#   r   r  r   r   r   r   r'   r+   r-   rr   r   r   r   r   r   r   r   r   inventory_entry
core_entrytask_kobj_ids_entrycreds_entryutsns_entrytimens_entrypidns_entryipc_var_entryfs_entrymm_entrycgroup_entrytcp_stream_entrystats_entrypstree_entryreg_file_entryns_file_entryeventfd_file_entryeventpoll_file_entryeventpoll_tfd_entrysignalfd_entrytimerfd_entryinotify_file_entryinotify_wd_entryfanotify_file_entryfanotify_mark_entry	vma_entry
pipe_entry
fifo_entrysa_entrynetlink_sk_entryremap_file_path_entry	mnt_entrytty_file_entrytty_info_entrytty_data_entryrlimit_entrytunfile_entryext_file_entryirmap_cache_entryfile_lock_entryfdinfo_entryunix_sk_entryinet_sk_entrypacket_sock_entryitimer_entryposix_timer_entrynet_device_entrypipe_data_entrysk_packet_entryipc_shm_entryipc_sem_entryipc_msg_entrynetns_entryuserns_entryseccomp_entryautofs_entry
file_entrycpuinfo_entrymemfd_file_entrymemfd_inode_entrybpfmap_file_entrybpfmap_data_entryapparmor_entryrN  rR  rJ   rW  r[   rb   rh   r   r   r   <module>r     s  P 
   	    F#,,F,,F 


%Y 
0
2k k^,0 ,0`> >N  . .0  D,  , ^ 2Fr112F
M"--(F 
=//0F ]2>>*	F
 ]2>>*F mBOO,F ]2>>*F }R--.F 	-
$F $&F 	-
$F mBOO,F - 3 3 8 :<F ]2>>*F   !F" mBOO,#F$ r001%F& b../'F( M""7"78)F* mB$;$;<+F, ]2#9#9:-F. b//0/F0 }R--.1F2 M""7"783F4 - 3 345F6 ]2#9#9:7F8 ]2#9#9:9F: M",,';F< ]2==)=F> M"--(?F@ mBKK(AFB - 3 34CFD =!9!9:EFF M",,'GFH r001IFJ b//0KFL b//0MFN mBOO,OFP }R--.QFR r001SFT =!5!56UFV - 2 23WFX mBOO,YFZ mB,,-[F\ mB,,-]F^ b223_F` }R__-aFb M""6"67cFd mB//0eFf - 2 2 8 :<gFj r113K3MNkFl r113J3LMr//1BCr//1D1FGr//1F1HI2>>*BOO,R--.BOO,2==)R--. 3 34 !5!56 !5!56 !5!5!:!<>b//0KFR( $6r   