Index: /branches/fault_tolerance/communication/dspin_dhccp_param/caba/metadata/dspin_dhccp_param.sd
===================================================================
--- /branches/fault_tolerance/communication/dspin_dhccp_param/caba/metadata/dspin_dhccp_param.sd	(revision 724)
+++ /branches/fault_tolerance/communication/dspin_dhccp_param/caba/metadata/dspin_dhccp_param.sd	(revision 724)
@@ -0,0 +1,4 @@
+Module('caba:dspin_dhccp_param',
+	   classname = 'soclib::caba::DspinDhccpParam',
+	   header_files = ['../source/include/dspin_dhccp_param.h',]
+)
Index: /branches/fault_tolerance/communication/dspin_dhccp_param/caba/source/include/dspin_dhccp_param.h
===================================================================
--- /branches/fault_tolerance/communication/dspin_dhccp_param/caba/source/include/dspin_dhccp_param.h	(revision 724)
+++ /branches/fault_tolerance/communication/dspin_dhccp_param/caba/source/include/dspin_dhccp_param.h	(revision 724)
@@ -0,0 +1,405 @@
+/* -*- c++ -*-
+ * File         : dspin_dhccp_param.h
+ * Date         : 01/03/2013
+ * Copyright    : UPMC / LIP6
+ * Authors      : Cesar Fuguet
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ */
+
+
+#ifndef DSPIN_DHCCP_PARAMS_H
+#define DSPIN_DHCCP_PARAMS_H
+
+#include <inttypes.h>
+#include <assert.h>
+
+namespace soclib { namespace caba {
+
+/*
+ * L1 cache to Memory Cache command packets
+ *
+ * CLEANUP
+ *
+ * flit 1
+ * ----------------------------------------------------------------------------------------------
+ * EOP:0 |    DEST    |   SRCID   | NLINE MSB(2 bits)| X | WAY_INDEX(2 bits) | TYPE:0b1X | BC:0
+ *       |  (10 bits) | (14 bits) |                  |   |                   |           |
+ * ----------------------------------------------------------------------------------------------
+ *                                                                                 | X: 0 DATA  |
+ *                                                                                 |    1 INST  |
+ * flit 2
+ * ----------------------------------------------------------------------------------------------
+ * EOP:1 |                                                                         NLINE(32 bits)
+ * ----------------------------------------------------------------------------------------------
+ *
+ * MULTICAST ACKNOWLEDGEMENT
+ *
+ * flit 1
+ * ----------------------------------------------------------------------------------------------
+ * EOP:1 |     DEST(10 bits)     |       X(15 bits)       | UPDT_INDEX(4 bits) | TYPE:0b00 | BC:0
+ * ----------------------------------------------------------------------------------------------
+ */
+
+/*
+ * M2P command packets
+ *
+ * MULTICAST UPDATE
+ *
+ * flit 1
+ * ----------------------------------------------------------------------------------------------
+ * EOP:0 | DEST(14 bits) | X(4 bits) | MEMC_ID(14 bits) | UPDT_INDEX(4 bits) | TYPE:0b0X   | BC:0
+ * ----------------------------------------------------------------------------------------------
+ *                                                                           | X: 0 DATA   |
+ *                                                                           |    1 INST   |
+ * flit 2
+ * ----------------------------------------------------------------------------------------------
+ * EOP:0 | X | WORD_INDEX(4 bits)  |                                             NLINE (34 bits)
+ * ----------------------------------------------------------------------------------------------
+ *
+ * flit 3
+ * ----------------------------------------------------------------------------------------------
+ * EOP:0 | X(3 bits)  | BE(4 bits) |                                              WDATA(32 bits)
+ * ----------------------------------------------------------------------------------------------
+ *
+ * flit N
+ * ----------------------------------------------------------------------------------------------
+ * EOP:1 | X(3 bits)  | BE(4 bits) |                                              WDATA(32 bits)
+ * ----------------------------------------------------------------------------------------------
+ *
+ * MULTICAST INVALIDATE
+ *
+ * flit 1
+ * ----------------------------------------------------------------------------------------------
+ * EOP:0 | DEST(14 bits) | X(4 bits) | MEMC_ID(14 bits) | UPDT_INDEX(4 bits) | TYPE:0b1X  | BC:0
+ * ----------------------------------------------------------------------------------------------
+ *                                                                           | X: 0 DATA  |
+ *                                                                           |    1 INST  |
+ * flit 2
+ * ----------------------------------------------------------------------------------------------
+ * EOP:1 | X(5 bits) |                                                           NLINE (34 bits)
+ * ----------------------------------------------------------------------------------------------
+ *
+ * BROADCAST INVALIDATE
+ *
+ * flit 1
+ *       | BOUNDING BOX(20 bits)            |
+ * ----------------------------------------------------------------------------------------------
+ * EOP:0 | XMIN   | XMAX   | YMIN   | YMAX  | MEMC_ID(14 bits) | NETWORK_RESERVED(4 bits) | BC:1
+ * ----------------------------------------------------------------------------------------------
+ *
+ * flit 2
+ * ----------------------------------------------------------------------------------------------
+ * EOP:1 |        X(5 bits)       |                                              NLINE (34 bits)
+ * ----------------------------------------------------------------------------------------------
+ *
+ * M2P clack commands
+ *
+ * CLEANUP ACKNOWLEDGEMENT
+ *
+ * flit 1
+ * ----------------------------------------------------------------------------------------------
+ * EOP:1 | DEST(14 bits) | X(5 bits) | SET_INDEX(16 bits) | WAY_INDEX(2 bits) | TYPE:0bX   | BC:0
+ * ----------------------------------------------------------------------------------------------
+ *                                                                            | X: 0 CLACK |
+ *                                                                            |      DATA  |
+ *                                                                            |    1 CLACK |
+ *                                                                            |      INST  |
+ *
+ */
+
+/*
+ * Utility MACROS
+ */
+#define GET_FIELD(x,y)\
+    case y: return ((x >> y##_SHIFT) & y##_MASK)
+
+#define SET_FIELD(x,y,z)\
+    case z: x |= ((y & z##_MASK) << z##_SHIFT);break
+
+class DspinDhccpParam
+{
+  public:
+
+    static const uint8_t  m2p_flit_width               = 40;
+    static const uint8_t  p2m_flit_width               = 33;
+    static const uint8_t  clack_flit_width             = 40;
+
+    static const uint8_t  UPDT_INDEX_WIDTH             = 4;
+    static const uint8_t  NLINE_WIDTH                  = 34;
+    static const uint8_t  SRCID_WIDTH                  = 14;
+    static const uint8_t  GLOBALID_WIDTH               = 10;
+    static const uint8_t  WORD_INDEX_WIDTH             = 4;
+    static const uint8_t  BE_WIDTH                     = 4;
+    static const uint8_t  DATA_WIDTH                   = 32;
+    static const uint8_t  SET_INDEX_WIDTH              = 6;
+    static const uint8_t  WAY_INDEX_WIDTH              = 2;
+    static const uint8_t  BROADCAST_BOX_WIDTH          = 20;
+    static const uint8_t  M2P_TYPE_WIDTH               = 2;
+    static const uint8_t  P2M_TYPE_WIDTH               = 2;
+    static const uint8_t  CLACK_TYPE_WIDTH             = 1;
+
+    static const uint8_t  P2M_TYPE_SHIFT               = 1;
+    static const uint64_t P2M_TYPE_MASK                = ((1ULL<<P2M_TYPE_WIDTH)-1);
+    static const uint8_t  P2M_EOP_SHIFT                = 32;
+    static const uint64_t P2M_EOP_MASK                 = 1;
+    static const uint8_t  P2M_BC_SHIFT                 = 0;
+    static const uint64_t P2M_BC_MASK                  = 1;
+
+    static const uint8_t  CLEANUP_DEST_SHIFT           = 22;
+    static const uint64_t CLEANUP_DEST_MASK            = ((1ULL<<GLOBALID_WIDTH)-1);
+    static const uint8_t  CLEANUP_SRCID_SHIFT          = 8;
+    static const uint64_t CLEANUP_SRCID_MASK           = ((1ULL<<SRCID_WIDTH)-1);
+    static const uint8_t  CLEANUP_NLINE_MSB_SHIFT      = 6;
+    static const uint64_t CLEANUP_NLINE_MSB_MASK       = ((1ULL<< 2)-1);
+    static const uint8_t  CLEANUP_WAY_INDEX_SHIFT      = 3;
+    static const uint64_t CLEANUP_WAY_INDEX_MASK       = ((1ULL<<WAY_INDEX_WIDTH)-1);
+    static const uint8_t  CLEANUP_NLINE_LSB_SHIFT      = 0;
+    static const uint64_t CLEANUP_NLINE_LSB_MASK       = ((1ULL<<32)-1);
+
+    static const uint8_t  MULTI_ACK_DEST_SHIFT         = CLEANUP_DEST_SHIFT;
+    static const uint64_t MULTI_ACK_DEST_MASK          = CLEANUP_DEST_MASK;
+    static const uint8_t  MULTI_ACK_UPDT_INDEX_SHIFT   = 3;
+    static const uint64_t MULTI_ACK_UPDT_INDEX_MASK    = ((1ULL<<UPDT_INDEX_WIDTH)-1);
+
+    static const uint8_t  M2P_TYPE_SHIFT               = 1;
+    static const uint64_t M2P_TYPE_MASK                = ((1ULL<<M2P_TYPE_WIDTH)-1);
+    static const uint8_t  M2P_EOP_SHIFT                = 39;
+    static const uint64_t M2P_EOP_MASK                 = 1;
+    static const uint8_t  M2P_BC_SHIFT                 = 0;
+    static const uint64_t M2P_BC_MASK                  = 1;
+
+    static const uint8_t  MULTI_INVAL_DEST_SHIFT       = 25;
+    static const uint64_t MULTI_INVAL_DEST_MASK        = ((1ULL<<SRCID_WIDTH)-1);
+    static const uint8_t  MULTI_INVAL_SRCID_SHIFT      = 7;
+    static const uint64_t MULTI_INVAL_SRCID_MASK       = ((1ULL<<SRCID_WIDTH)-1);
+    static const uint8_t  MULTI_INVAL_UPDT_INDEX_SHIFT = 3;
+    static const uint64_t MULTI_INVAL_UPDT_INDEX_MASK  = ((1ULL<<UPDT_INDEX_WIDTH)-1);
+    static const uint8_t  MULTI_INVAL_NLINE_SHIFT      = 0;
+    static const uint64_t MULTI_INVAL_NLINE_MASK       = ((1ULL<<NLINE_WIDTH)-1);
+
+    static const uint8_t  MULTI_UPDT_DEST_SHIFT        = MULTI_INVAL_DEST_SHIFT;
+    static const uint64_t MULTI_UPDT_DEST_MASK         = MULTI_INVAL_DEST_MASK;
+    static const uint8_t  MULTI_UPDT_SRCID_SHIFT       = MULTI_INVAL_SRCID_SHIFT;
+    static const uint64_t MULTI_UPDT_SRCID_MASK        = MULTI_INVAL_SRCID_MASK;
+    static const uint8_t  MULTI_UPDT_UPDT_INDEX_SHIFT  = MULTI_INVAL_UPDT_INDEX_SHIFT;
+    static const uint64_t MULTI_UPDT_UPDT_INDEX_MASK   = MULTI_INVAL_UPDT_INDEX_MASK;
+    static const uint8_t  MULTI_UPDT_WORD_INDEX_SHIFT  = 34;
+    static const uint64_t MULTI_UPDT_WORD_INDEX_MASK   = ((1ULL<<WORD_INDEX_WIDTH)-1);
+    static const uint8_t  MULTI_UPDT_NLINE_SHIFT       = MULTI_INVAL_NLINE_SHIFT;
+    static const uint64_t MULTI_UPDT_NLINE_MASK        = MULTI_INVAL_NLINE_MASK;
+    static const uint8_t  MULTI_UPDT_BE_SHIFT          = 32;
+    static const uint64_t MULTI_UPDT_BE_MASK           = ((1ULL<<BE_WIDTH)-1);
+    static const uint8_t  MULTI_UPDT_DATA_SHIFT        = 0;
+    static const uint64_t MULTI_UPDT_DATA_MASK         = ((1ULL<<DATA_WIDTH)-1);
+
+    static const uint8_t  BROADCAST_BOX_SHIFT          = 19;
+    static const uint64_t BROADCAST_BOX_MASK           = ((1ULL<<BROADCAST_BOX_WIDTH)-1);
+    static const uint8_t  BROADCAST_SRCID_SHIFT        = 5;
+    static const uint64_t BROADCAST_SRCID_MASK         = MULTI_INVAL_SRCID_MASK;
+    static const uint8_t  BROADCAST_NLINE_SHIFT        = 0;
+    static const uint64_t BROADCAST_NLINE_MASK         = MULTI_INVAL_NLINE_MASK;
+
+    static const uint8_t  CLACK_TYPE_SHIFT             = 1;
+    static const uint64_t CLACK_TYPE_MASK              = ((1ULL<<CLACK_TYPE_WIDTH)-1);
+    static const uint8_t  CLACK_EOP_SHIFT              = 39;
+    static const uint64_t CLACK_EOP_MASK               = 1;
+    static const uint8_t  CLACK_BC_SHIFT               = 0;
+    static const uint64_t CLACK_BC_MASK                = 1;
+    static const uint8_t  CLACK_DEST_SHIFT             = 25;
+    static const uint64_t CLACK_DEST_MASK              = ((1ULL<<SRCID_WIDTH)-1);
+    static const uint8_t  CLACK_SET_SHIFT              = 4;
+    static const uint64_t CLACK_SET_MASK               = ((1ULL<<SET_INDEX_WIDTH)-1);
+    static const uint8_t  CLACK_WAY_SHIFT              = 2;
+    static const uint64_t CLACK_WAY_MASK               = ((1ULL<<WAY_INDEX_WIDTH)-1);
+
+    /*
+     * P2M command types
+     */
+    enum
+    {
+      TYPE_MULTI_ACK    = 0,
+      TYPE_CLEANUP      = 2,
+      TYPE_CLEANUP_DATA = TYPE_CLEANUP,
+      TYPE_CLEANUP_INST = 3
+    };
+
+    /*
+     * M2P command types
+     */
+    enum
+    {
+      TYPE_MULTI_UPDT       = 0,
+      TYPE_MULTI_UPDT_DATA  = TYPE_MULTI_UPDT,
+      TYPE_MULTI_UPDT_INST  = 1,
+      TYPE_MULTI_INVAL      = 2,
+      TYPE_MULTI_INVAL_DATA = TYPE_MULTI_INVAL,
+      TYPE_MULTI_INVAL_INST = 3
+    };
+
+    /*
+     * CLACK command types
+     */
+    enum
+    {
+      TYPE_CLACK      = 0,
+      TYPE_CLACK_DATA = TYPE_CLACK,
+      TYPE_CLACK_INST = 1
+    };
+
+    enum flit_field_e
+    {
+      P2M_TYPE,
+      P2M_EOP,
+      P2M_BC,
+
+      CLEANUP_DEST,
+      CLEANUP_SRCID,
+      CLEANUP_NLINE_MSB,
+      CLEANUP_WAY_INDEX,
+      CLEANUP_NLINE_LSB,
+
+      MULTI_ACK_DEST,
+      MULTI_ACK_UPDT_INDEX,
+
+      M2P_TYPE,
+      M2P_EOP,
+      M2P_BC,
+
+      MULTI_INVAL_DEST,
+      MULTI_INVAL_SRCID,
+      MULTI_INVAL_UPDT_INDEX,
+      MULTI_INVAL_NLINE,
+
+      MULTI_UPDT_DEST,
+      MULTI_UPDT_SRCID,
+      MULTI_UPDT_UPDT_INDEX,
+      MULTI_UPDT_WORD_INDEX,
+      MULTI_UPDT_NLINE,
+      MULTI_UPDT_BE,
+      MULTI_UPDT_DATA,
+
+      CLACK_TYPE,
+
+      CLACK_DEST,
+      CLACK_SET,
+      CLACK_WAY,
+
+      BROADCAST_BOX,
+      BROADCAST_SRCID,
+      BROADCAST_NLINE
+    };
+
+    static uint64_t dspin_get(uint64_t flit, flit_field_e field)
+    {
+      switch(field)
+      {
+        GET_FIELD(flit,P2M_TYPE);
+        GET_FIELD(flit,P2M_EOP);
+        GET_FIELD(flit,P2M_BC);
+        GET_FIELD(flit,CLEANUP_DEST);
+        GET_FIELD(flit,CLEANUP_SRCID);
+        GET_FIELD(flit,CLEANUP_NLINE_MSB);
+        GET_FIELD(flit,CLEANUP_WAY_INDEX);
+        GET_FIELD(flit,CLEANUP_NLINE_LSB);
+        GET_FIELD(flit,MULTI_ACK_DEST);
+        GET_FIELD(flit,MULTI_ACK_UPDT_INDEX);
+        GET_FIELD(flit,M2P_TYPE);
+        GET_FIELD(flit,M2P_EOP);
+        GET_FIELD(flit,M2P_BC);
+        GET_FIELD(flit,MULTI_INVAL_DEST);
+        GET_FIELD(flit,MULTI_INVAL_SRCID);
+        GET_FIELD(flit,MULTI_INVAL_UPDT_INDEX);
+        GET_FIELD(flit,MULTI_INVAL_NLINE);
+        GET_FIELD(flit,MULTI_UPDT_DEST);
+        GET_FIELD(flit,MULTI_UPDT_SRCID);
+        GET_FIELD(flit,MULTI_UPDT_UPDT_INDEX);
+        GET_FIELD(flit,MULTI_UPDT_WORD_INDEX);
+        GET_FIELD(flit,MULTI_UPDT_NLINE);
+        GET_FIELD(flit,MULTI_UPDT_BE);
+        GET_FIELD(flit,MULTI_UPDT_DATA);
+        GET_FIELD(flit,CLACK_TYPE);
+        GET_FIELD(flit,CLACK_DEST);
+        GET_FIELD(flit,CLACK_SET);
+        GET_FIELD(flit,CLACK_WAY);
+        GET_FIELD(flit,BROADCAST_BOX);
+        GET_FIELD(flit,BROADCAST_SRCID);
+        GET_FIELD(flit,BROADCAST_NLINE);
+
+        default: assert(false && "Incorrect DHCCP DSPIN field");
+      }
+    }
+
+    static void dspin_set(uint64_t &flit, uint64_t value, flit_field_e field)
+    {
+      switch(field)
+      {
+        SET_FIELD(flit,value,P2M_TYPE);
+        SET_FIELD(flit,value,P2M_EOP);
+        SET_FIELD(flit,value,P2M_BC);
+        SET_FIELD(flit,value,CLEANUP_DEST);
+        SET_FIELD(flit,value,CLEANUP_SRCID);
+        SET_FIELD(flit,value,CLEANUP_NLINE_MSB);
+        SET_FIELD(flit,value,CLEANUP_WAY_INDEX);
+        SET_FIELD(flit,value,CLEANUP_NLINE_LSB);
+        SET_FIELD(flit,value,MULTI_ACK_DEST);
+        SET_FIELD(flit,value,MULTI_ACK_UPDT_INDEX);
+        SET_FIELD(flit,value,M2P_TYPE);
+        SET_FIELD(flit,value,M2P_EOP);
+        SET_FIELD(flit,value,M2P_BC);
+        SET_FIELD(flit,value,MULTI_INVAL_DEST);
+        SET_FIELD(flit,value,MULTI_INVAL_SRCID);
+        SET_FIELD(flit,value,MULTI_INVAL_UPDT_INDEX);
+        SET_FIELD(flit,value,MULTI_INVAL_NLINE);
+        SET_FIELD(flit,value,MULTI_UPDT_DEST);
+        SET_FIELD(flit,value,MULTI_UPDT_SRCID);
+        SET_FIELD(flit,value,MULTI_UPDT_UPDT_INDEX);
+        SET_FIELD(flit,value,MULTI_UPDT_WORD_INDEX);
+        SET_FIELD(flit,value,MULTI_UPDT_NLINE);
+        SET_FIELD(flit,value,MULTI_UPDT_BE);
+        SET_FIELD(flit,value,MULTI_UPDT_DATA);
+        SET_FIELD(flit,value,CLACK_TYPE);
+        SET_FIELD(flit,value,CLACK_DEST);
+        SET_FIELD(flit,value,CLACK_SET);
+        SET_FIELD(flit,value,CLACK_WAY);
+        SET_FIELD(flit,value,BROADCAST_BOX);
+        SET_FIELD(flit,value,BROADCAST_SRCID);
+        SET_FIELD(flit,value,BROADCAST_NLINE);
+
+        default: assert(false && "Incorrect DHCCP DSPIN field");
+      }
+    }
+};
+
+#undef GET_FIELD
+#undef SET_FIELD
+
+}} // end namespace soclib::caba
+
+#endif
+// Local Variables:
+// tab-width: 2
+// c-basic-offset: 2
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=2:tabstop=2:softtabstop=2
Index: /branches/fault_tolerance/lib/generic_cache_tsar/include/generic_cache.h
===================================================================
--- /branches/fault_tolerance/lib/generic_cache_tsar/include/generic_cache.h	(revision 724)
+++ /branches/fault_tolerance/lib/generic_cache_tsar/include/generic_cache.h	(revision 724)
@@ -0,0 +1,1033 @@
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6
+ *         Alain Greiner <alain.greiner@lip6.fr> July 2008
+ *
+ * Maintainers: alain
+ */
+
+////////////////////////////////////////////////////////////////////////////////
+// File         : generic_cache.h
+// Date         : 07/01/2012
+// Authors      : Alain Greiner
+/////////////////////////////////////////////////////////////////////////////////
+// This object is a generic, set associative, cache.
+// Each slot can be in three states: VALID, EMPTY or ZOMBI.
+// The ZOMBI state is used by cache coherence protocols to indicate
+// a pending cleanup request.
+// Hit if ( (matching tag) and (state == VALID).
+// The replacement policy is pseudo-LRU. The victim selection process cannot
+// fail if the ZOMBI state is not used. 
+// But it can fail if all ways are in ZOMBI state.
+/////////////////////////////////////////////////////////////////////////////////
+// Implementation note
+// The DATA part is implemented as an uint32_t array[nways*nsets*nwords].
+// The DIRECTORY part is implemented as an uint32_t array[nways*nsets].
+// All methods requiring a dual port RAM or cache modification using
+// an associative search have been deprecated.
+/////////////////////////////////////////////////////////////////////////////////
+// Constructor parameters are :
+// - std::string    &name
+// - size_t         nways   : number of associativity levels 
+// - size_t         nsets   : number of sets
+// - size_t         nwords  : number of words in a cache line
+// The nways, nsets, nwords parameters must be power of 2
+// The nsets parameter cannot be larger than 1024
+// The nways parameter cannot be larger than 16
+// The nwords parameter cannot be larger than 64
+/////////////////////////////////////////////////////////////////////////////////
+// Template parameter is :
+// - addr_t : address format to access the cache 
+/////////////////////////////////////////////////////////////////////////////////
+
+#ifndef SOCLIB_GENERIC_CACHE_H
+#define SOCLIB_GENERIC_CACHE_H
+
+#include <systemc>
+#include <cassert>
+#include "arithmetics.h"
+#include "static_assert.h"
+#include "mapping_table.h"
+#include <cstring>
+
+namespace soclib { 
+
+enum cache_slot_state_e
+{
+    CACHE_SLOT_STATE_EMPTY,
+    CACHE_SLOT_STATE_VALID,
+    CACHE_SLOT_STATE_ZOMBI,
+};
+
+//////////////////////////
+template<typename addr_t>
+class GenericCache 
+//////////////////////////
+{
+    typedef uint32_t    data_t;
+    typedef uint32_t    be_t;
+
+    data_t              *r_data ;
+    addr_t               *r_tag ;
+    int                 *r_state;
+    bool                *r_lru ;
+
+    size_t              m_ways;	
+    size_t              m_sets;	
+    size_t              m_words;
+
+    const soclib::common::AddressMaskingTable<addr_t>  m_x ;
+    const soclib::common::AddressMaskingTable<addr_t>  m_y ;
+    const soclib::common::AddressMaskingTable<addr_t>  m_z ;
+
+    //////////////////////////////////////////////////////////////
+    inline data_t &cache_data(size_t way, size_t set, size_t word)
+    {
+        return r_data[(way*m_sets*m_words)+(set*m_words)+word];
+    }
+
+    //////////////////////////////////////////////
+    inline addr_t &cache_tag(size_t way, size_t set)
+    {
+        return r_tag[(way*m_sets)+set];
+    }
+
+    //////////////////////////////////////////////
+    inline bool &cache_lru(size_t way, size_t set)
+    {
+        return r_lru[(way*m_sets)+set];
+    }
+
+    //////////////////////////////////////////////
+    inline int &cache_state(size_t way, size_t set)
+    {
+        return r_state[(way*m_sets)+set];
+    }
+
+    /////////////////////////////////////////////////
+    inline void cache_set_lru(size_t way, size_t set)
+    {
+	    size_t way2;
+
+        cache_lru(way, set) = true;
+
+	    for (way2 = 0; way2 < m_ways; way2++ ) 
+        {
+	        if (cache_lru(way2, set) == false) return;
+	    }
+ 	    // all lines are new -> they all become old 
+	    for (way2 = 0; way2 < m_ways; way2++ ) 
+        {
+	        cache_lru(way2, set) = false;
+	    }
+    }
+
+    ////////////////////////////////
+    inline data_t be2mask( be_t be )
+    {
+        data_t mask = 0;
+        if ( (be & 0x1) == 0x1 ) mask = mask | 0x000000FF;
+        if ( (be & 0x2) == 0x2 ) mask = mask | 0x0000FF00;
+        if ( (be & 0x4) == 0x4 ) mask = mask | 0x00FF0000;
+        if ( (be & 0x8) == 0x8 ) mask = mask | 0xFF000000;
+        return mask;
+    }
+
+public:
+
+    //////////////////////////////////////////
+    GenericCache(   const std::string   &name,
+                    size_t              nways, 
+                    size_t              nsets, 
+                    size_t              nwords)
+        : m_ways(nways),
+          m_sets(nsets),
+          m_words(nwords),
+
+#define l2 soclib::common::uint32_log2
+
+          m_x( l2(nwords), l2(sizeof(data_t))),
+          m_y( l2(nsets), l2(nwords) + l2(sizeof(data_t))),
+          m_z( 8*sizeof(addr_t) - l2(nsets) - l2(nwords) - l2(sizeof(data_t)),
+               l2(nsets) + l2(nwords) + l2(sizeof(data_t)))
+#undef l2
+    {
+        assert(IS_POW_OF_2(nways));
+        assert(IS_POW_OF_2(nsets));
+        assert(IS_POW_OF_2(nwords));
+        assert(nwords);
+        assert(nsets);
+        assert(nways);
+        assert(nwords <= 64);
+        assert(nsets <= 1024);
+        assert(nways <= 16);
+
+#ifdef GENERIC_CACHE_DEBUG
+std::cout << "constructing " << name << std::endl
+          << "- nways  = " << nways << std::endl
+          << "- nsets  = " << nsets << std::endl
+          << "- nwords = " << nwords << std::endl
+          << " m_x: " << m_x 
+          << " m_y: " << m_y
+          << " m_z: " << m_z
+          << std::endl;
+#endif
+
+        r_data    = new data_t[nways*nsets*nwords];
+        r_tag     = new addr_t[nways*nsets];
+        r_state   = new int[nways*nsets];
+        r_lru     = new bool[nways*nsets];
+    }
+
+    ////////////////
+    ~GenericCache()
+    {
+        delete [] r_data;
+        delete [] r_tag;
+        delete [] r_state;
+        delete [] r_lru;
+    }
+
+    ////////////////////
+    inline void reset( )
+    {
+        std::memset(r_data, 0, sizeof(*r_data)*m_ways*m_sets*m_words);
+        std::memset(r_tag, 0, sizeof(*r_tag)*m_ways*m_sets);
+        std::memset(r_state, CACHE_SLOT_STATE_EMPTY, sizeof(*r_state)*m_ways*m_sets);
+        std::memset(r_lru, 0, sizeof(*r_lru)*m_ways*m_sets);
+    }
+
+    /////////////////////////////////////////////////////////////////////
+    // Read a single 32 bits word.
+    // returns true if (matching tag) and (state == VALID) 
+    // Both data & directory are accessed. 
+    /////////////////////////////////////////////////////////////////////
+    inline bool read( addr_t 	ad, 
+                      data_t* 	dt)
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set))  
+                   && (cache_state(way, set) == CACHE_SLOT_STATE_VALID) )
+            {
+                *dt = cache_data(way, set, word);
+                cache_set_lru(way, set);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // Read a single 32 bits word.
+    // returns true if (matching tag) and (state == VALID) 
+    // Both data & directory are accessed. 
+    // The selected way, set and word index are returned in case of hit.
+    /////////////////////////////////////////////////////////////////////
+    inline bool read( addr_t 	ad, 
+                      data_t* 	dt,
+                      size_t*   selway,
+                      size_t*   selset,
+                      size_t*   selword) 
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) and
+                 (cache_state(way, set) == CACHE_SLOT_STATE_VALID) )
+            {
+                *selway  = way;
+                *selset  = set;
+                *selword = word;
+                *dt = cache_data(way, set, word);
+                cache_set_lru(way, set);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // Read a single 32 bits word when the ZOMBI state is used.
+    // Both data and directory are accessed.
+    // returns the access status in the state argument:
+    // - VALID : (matching tag) and (state == VALID) 
+    // - ZOMBI : (matching tag) and (state == ZOMBI) 
+    // - MISS  : no matching tag or EMPTY state
+    // If VALID or ZOMBI, the data, the way, set and word index are 
+    // returned in the other arguments.
+    ////////////////////////////////////////////////////////////////////
+    inline void read( addr_t    ad,
+                      data_t*   dt,
+                      size_t*   selway,
+                      size_t*   selset,
+                      size_t*   selword,
+                      int*      state ) 
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        // default return values 
+        *state   = CACHE_SLOT_STATE_EMPTY;
+        *selway  = 0;
+        *selset  = 0;
+        *selword = 0;
+        *dt      = 0;
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( tag == cache_tag(way, set) )  // matching tag
+            {
+
+                if ( cache_state(way, set) == CACHE_SLOT_STATE_VALID )
+                {
+                    *state   = CACHE_SLOT_STATE_VALID;
+                    *selway  = way;
+                    *selset  = set;
+                    *selword = word;
+                    *dt      = cache_data(way, set, word);
+                    cache_set_lru(way, set);
+                }
+                else if ( cache_state(way, set) == CACHE_SLOT_STATE_ZOMBI )
+                {
+                    *state   = CACHE_SLOT_STATE_ZOMBI;
+                    *selway  = way;
+                    *selset  = set;
+                    *selword = word;
+                }
+            }
+        }
+    }
+              
+    ////////////////////////////////////////////////////////////////////
+    // Read a single 32 bits word, without LRU update.
+    // returns true if (matching tag) and (state == VALID) 
+    // Both data & directory are accessed. 
+    // The selected way, set and word index are returned in case of hit.
+    /////////////////////////////////////////////////////////////////////
+    inline bool read_neutral( addr_t 	ad, 
+	            		      data_t* 	dt,
+			                  size_t*   selway,
+			                  size_t*   selset,
+			                  size_t*   selword) 
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set))  
+                   && (cache_state(way, set) == CACHE_SLOT_STATE_VALID) )
+            {
+                *selway  = way;
+                *selset  = set;
+                *selword = word;
+                *dt = cache_data(way, set, word);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+    // Read one or two 32 bits word.
+    // Both data & directory are accessed. 
+    // Hit if (matching tag) and (valid == true) and (zombi == false) 
+    // If the addressed word is not the last in the cache line,
+    // two successive words are returned.
+    // The selected way, set and first word index are returned in case of hit.
+    // This function is used by the cc_vcache to get a 64 bits page table entry.
+    /////////////////////////////////////////////////////////////////////////////
+    inline bool read( addr_t 	ad, 
+                      data_t* 	dt, 
+                      data_t*	dt_next,
+                      size_t*	selway,
+                      size_t*	selset,
+                      size_t*   selword)
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set))   
+                   && (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                *dt      = cache_data(way, set, word);
+                if ( word+1 < m_words) 
+                {
+                    *dt_next = cache_data(way, set, word+1);
+                }
+                *selway  = way;
+                *selset  = set;
+                *selword = word;
+                cache_set_lru(way, set);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // Read one or two 32 bits word.
+    // Both data and directory are accessed.
+    // returns the access status in the state argument:
+    // - VALID : (matching tag) and (state == VALID) 
+    // - ZOMBI : (matching tag) and (state == ZOMBI) 
+    // - MISS  : no matching tag or EMPTY state
+    // If VALID or ZOMBI, the data, the way, set and word index are 
+    // returned in the other arguments.
+    ////////////////////////////////////////////////////////////////////
+    inline void read( addr_t    ad,
+                      data_t*   dt,
+                      data_t*   dt_next,
+                      size_t*   selway,
+                      size_t*   selset,
+                      size_t*   selword,
+                      int*      state ) 
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        // default return values 
+        *state   = CACHE_SLOT_STATE_EMPTY;
+        *selway  = 0;
+        *selset  = 0;
+        *selword = 0;
+        *dt      = 0;
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( tag == cache_tag(way, set) )  // matching tag
+            {
+
+                if ( cache_state(way, set) == CACHE_SLOT_STATE_VALID )
+                {
+                    *state   = CACHE_SLOT_STATE_VALID;
+                    *selway  = way;
+                    *selset  = set;
+                    *selword = word;
+                    *dt      = cache_data(way, set, word);
+                    if ( word+1 < m_words) 
+                    {
+                        *dt_next = cache_data(way, set, word+1);
+                    } else {
+			assert(false && "can't request 2 words at end of line");
+		    }
+                    cache_set_lru(way, set);
+                }
+                else if ( cache_state(way, set) == CACHE_SLOT_STATE_ZOMBI )
+                {
+                    *state   = CACHE_SLOT_STATE_ZOMBI;
+                    *selway  = way;
+                    *selset  = set;
+                    *selword = word;
+                }
+            }
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // Checks the cache state for a given address.
+    // Only the directory is accessed. 
+    // returns true if (matching tag) and (state == VALID) 
+    // The selected way, set and first word index are returned in case of hit.
+    // This function can be used when we need to access the directory
+    // while we write in the data part with a different address in the same cycle.
+    ///////////////////////////////////////////////////////////////////////////////
+    inline bool hit(  addr_t 	ad, 
+                      size_t*	selway,
+                      size_t*	selset,
+                      size_t*   selword)
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) 
+                   && (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                *selway  = way;
+                *selset  = set;
+                *selword = word;
+                cache_set_lru(way, set);
+                return true;
+            }
+        }
+        return false;
+    }
+  
+    ///////////////////////////////////////////////////////////////////////////////
+    // Checks the cache state for a given address, when the ZOMBI state is used.
+    // Only the directory is accessed. 
+    // Returns the access status in the state argument:
+    // - VALID if (matching tag) and (state == VALID) 
+    // - ZOMBI if (matching tag) and (state == ZOMBI) 
+    // - EMPTY if no match or (state == EMPTY)
+    // The selected way, set and first word index are returned if not empty.
+    // This function can be used when we need to access the directory
+    // while we write in the data part with a different address in the same cycle.
+    ///////////////////////////////////////////////////////////////////////////////
+    inline void read_dir(  addr_t 	ad, 
+                           int*     state,
+                           size_t*	way,
+                           size_t*	set,
+                           size_t*  word)
+    {
+        const addr_t      ad_tag  = m_z[ad];
+        const size_t      ad_set  = m_y[ad];
+        const size_t      ad_word = m_x[ad];
+
+        for ( size_t _way = 0; _way < m_ways; _way++ ) 
+        {
+            if ( (ad_tag == cache_tag(_way, ad_set) ) and 
+                 (cache_state(_way, ad_set) != CACHE_SLOT_STATE_EMPTY) ) 
+            {
+                *state = cache_state(_way, ad_set);
+                *way   = _way;
+                *set   = ad_set;
+                *word  = ad_word;
+                return;
+            }
+        }
+        
+        // return value if not (VALID or ZOMBI)
+        *state = CACHE_SLOT_STATE_EMPTY;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // Checks the cache state for a slot (set,way), when the ZOMBI state is used.
+    // Only the directory is accessed. 
+    // Returns the access status and the tag value in the state and tag argument.
+    ///////////////////////////////////////////////////////////////////////////////
+    inline void read_dir(  size_t 	way,
+                           size_t 	set,
+                           addr_t*   tag,
+                           int*     state )
+    {
+        *state = cache_state(way, set);
+        *tag   = cache_tag(way, set);
+    }
+
+    ////////////////////////////////////////////
+    inline addr_t get_tag(size_t way, size_t set)
+    {
+        return cache_tag(way, set);
+    }
+
+    ///////////////////////////////////////////////////////////////////
+    // This function writes a complete 32 bits word
+    // It does not use the directory and cannot miss.
+    //////////////////////////////////////////////////////////////////
+    inline void write(size_t 	way, 
+                      size_t 	set, 
+                      size_t 	word, 
+                      data_t 	data)
+    {
+        cache_data(way, set, word) = data;
+        cache_set_lru(way, set);
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    // this function writes up to 4 bytes, taking into account the byte enable.
+    // It does not use the directory and cannot miss.
+    ////////////////////////////////////////////////////////////////////////////
+    inline void write(size_t 	way, 
+                      size_t 	set, 
+                      size_t 	word, 
+                      data_t 	data, 
+                      be_t 	    be)
+    {
+        data_t mask = be2mask(be);
+        data_t prev = cache_data(way, set, word);
+        cache_data(way, set, word) = (mask & data) | (~mask & prev);
+        cache_set_lru(way, set);
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+    // This function invalidates a cache line identified by the set and way.
+    // It returns true if the line was valid, and returns the line index.
+    //////////////////////////////////////////////////////////////////////////
+    inline bool inval(size_t 	way, 
+                      size_t 	set, 
+                      addr_t* 	nline)
+    {
+        if ( cache_state(way,set) == CACHE_SLOT_STATE_VALID ) 
+        {
+            cache_state(way,set) = CACHE_SLOT_STATE_EMPTY;
+            *nline = (data_t)cache_tag(way,set)* m_sets + set;
+            return true;
+        }
+        return false;
+    }
+
+    //////////////////////////////////////////////////////////////////////////////////
+    // This function selects a victim slot in an associative set.
+    // It cannot fail, as a slot in ZOMBI state is considered EMPTY.
+    // - we search first an EMPTY slot 
+    // - if no EMPTY slot, we search an OLD slot, using lru
+    // It returns the line index (Z + Y fields), the selected slot way and set, 
+    // and a Boolean indicating that a cleanup is requested.
+    //////////////////////////////////////////////////////////////////////////////////
+    inline bool victim_select(addr_t 	ad, 
+                              addr_t* 	victim, 
+                              size_t*   way, 
+                              size_t*   set)
+    {
+        bool   found   = false;
+        bool   cleanup = false;
+
+        *set = m_y[ad];
+        *way = 0;
+
+        // Search first empty slot 
+        for ( size_t _way = 0 ; _way < m_ways && !found ; _way++ )
+        {
+            if ( cache_state(_way, *set) != CACHE_SLOT_STATE_VALID )  // empty
+            {
+                found   = true;
+                cleanup = false;
+                *way    = _way;
+            }
+        }
+
+        // If no empty slot, search first  old slot (lru == false) 
+        if ( !found )
+        { 
+            for ( size_t _way = 0 ; _way < m_ways && !found ; _way++ )
+            {
+                if ( not cache_lru(_way, *set) )
+                {
+                    found   = true;
+                    cleanup = true;
+                    *way    = _way;
+                }
+            }
+        }
+
+        assert(found && "all ways can't be new at the same time");
+        *victim = (addr_t)((cache_tag(*way,*set) * m_sets) + *set);
+        return cleanup;
+    }
+
+    //////////////////////////////////////////////////////////////////////////////////
+    // This function selects a victim slot in an associative set.
+    // It can fail if all ways are in ZOMBI state.
+    // - we search first an EMPTY slot
+    // - if no empty slot, we search an OLD slot not in ZOMBI state,
+    // - if not found, we take the first not ZOMBI slot.
+    // It returns the line index (Z + Y fields), the selected slot way and set, 
+    // and two Boolean indicating success and a required cleanup.
+    //////////////////////////////////////////////////////////////////////////////////
+    inline void read_select(addr_t 	  ad, 
+                            addr_t*   victim, 
+                            size_t*   way, 
+                            size_t*   set,
+                            bool*     found,
+                            bool*     cleanup )
+    {
+        size_t _set = m_y[ad];
+
+        *found = false;
+
+        // Search first empty slot 
+        for ( size_t _way = 0 ; _way < m_ways && !(*found) ; _way++ )
+        {
+            if ( cache_state(_way, _set) == CACHE_SLOT_STATE_EMPTY )
+            {
+                *found   = true;
+                *cleanup = false;
+                *way     = _way;
+                *set     = m_y[ad];
+                return;
+            }
+        }
+        // Search first not zombi old slot 
+        for ( size_t _way = 0 ; _way < m_ways && !(*found) ; _way++ )
+        {
+            if ( not cache_lru(_way, _set) and 
+                 (cache_state(_way, _set) != CACHE_SLOT_STATE_ZOMBI) )
+            {
+                *found   = true;
+                *cleanup = true;
+                *way     = _way;
+                *set     = m_y[ad];
+                *victim  = cache_tag(*way,_set) * m_sets + _set;
+                return;
+            }
+        }
+        // Search first not zombi slot
+        for ( size_t _way = 0 ; _way < m_ways && !(*found) ; _way++ )
+        {
+            if ( cache_state(_way, _set) != CACHE_SLOT_STATE_ZOMBI) 
+            {
+                *found   = true;
+                *cleanup = true;
+                *way    = _way;
+                *set     = m_y[ad];
+                *victim  = cache_tag(*way,_set) * m_sets + _set;
+                return;
+            }
+        }
+
+        // no slot found...
+        *found   = false;
+        *cleanup = false;
+    }
+
+    //////////////////////////////////////////////////////////////////
+    // This function update the directory part of a slot
+    // identified by the way & set.
+    //////////////////////////////////////////////////////////////////
+    inline void victim_update_tag( addr_t 	ad, 
+                                   size_t 	way, 
+                                   size_t 	set )
+    {
+        addr_t  tag     = m_z[ad];
+
+        cache_tag(way, set)   = tag;
+        cache_state(way, set) = CACHE_SLOT_STATE_VALID;
+        cache_set_lru(way, set);
+    }
+
+    //////////////////////////////////////////////////////////////////
+    // This function write the directory part of a slot
+    // identified by the way & set, when using the ZOMBI state.
+    //////////////////////////////////////////////////////////////////
+    inline void write_dir( addr_t 	ad, 
+                           size_t 	way, 
+                           size_t 	set,
+                           int      state)
+    {
+        addr_t  tag     = m_z[ad];
+
+        assert( ( (state == CACHE_SLOT_STATE_VALID) or 
+                  (state == CACHE_SLOT_STATE_ZOMBI) or
+                  (state == CACHE_SLOT_STATE_EMPTY) ) and
+        "illegal slot state argument in Generic Cache write_dir()");
+
+        assert( (way < m_ways) and
+        "too large way index argument in Generic Cache write_dir()");
+
+        assert( (set < m_sets) and
+        "too large set index argument in Generic Cache write_dir()");
+
+        cache_tag(way, set)   = tag;
+        cache_state(way, set) = state;
+
+        if ( state == CACHE_SLOT_STATE_VALID ) cache_set_lru(way, set);
+    }
+
+    //////////////////////////////////////////////////////////////////
+    // This function change the state of a slot
+    // identified by the way & set, when using the ZOMBI state.
+    // It does not affect the tag
+    //////////////////////////////////////////////////////////////////
+    inline void write_dir( size_t 	way, 
+                           size_t 	set,
+                           int      state)
+    {
+        assert( ( (state == CACHE_SLOT_STATE_VALID) or 
+                  (state == CACHE_SLOT_STATE_ZOMBI) or
+                  (state == CACHE_SLOT_STATE_EMPTY) ) and
+        "illegal slot state argument in Generic Cache write_dir()");
+
+        assert( (way < m_ways) and
+        "too large way index argument in Generic Cache write_dir()");
+
+        assert( (set < m_sets) and
+        "too large set index argument in Generic Cache write_dir()");
+
+        cache_state(way, set) = state;
+
+        if ( state == CACHE_SLOT_STATE_VALID ) cache_set_lru(way, set);
+    }
+
+    ///////////////////////////////////////////////////////////////////
+    // This function writes a full cache line in one single cycle.
+    // The target slot is identified by the way & set arguments.
+    // Both DATA and DIRECTORY are written
+    ///////////////////////////////////////////////////////////////////
+    inline void update(addr_t 	ad, 
+                       size_t 	way, 
+                       size_t 	set, 
+                       data_t* 	buf)
+    {
+        addr_t tag = m_z[ad];
+
+        cache_tag(way, set)   = tag;
+        cache_state(way, set) = CACHE_SLOT_STATE_VALID;
+        cache_set_lru(way, set);
+        for ( size_t word = 0 ; word < m_words ; word++ ) 
+        {
+            cache_data(way, set, word) = buf[word] ;
+        }
+    }
+
+    ///////////////////////////
+    void fileTrace(FILE* file)
+    {
+        for( size_t nway = 0 ; nway < m_ways ; nway++) 
+        {
+            for( size_t nset = 0 ; nset < m_sets ; nset++) 
+            {
+                fprintf(file, "%d / ", (int)cache_state(nway, nset));
+                fprintf(file, "way %d / ", (int)nway);
+                fprintf(file, "set %d / ", (int)nset);
+                fprintf(file, "@ = %08zX / ", 
+                        ((cache_tag(nway, nset)*m_sets+nset)*m_words*4));
+                for( size_t nword = m_words ; nword > 0 ; nword--) 
+                {
+                    unsigned int data = cache_data(nway, nset, nword-1);
+                    fprintf(file, "%08X ", data );
+                }
+                fprintf(file, "\n");
+            }
+        }
+    }
+
+    ////////////////////////
+    inline void printTrace()
+    {
+        for ( size_t way = 0; way < m_ways ; way++ ) 
+        {
+            for ( size_t set = 0 ; set < m_sets ; set++ )
+            {
+                addr_t addr = (((addr_t)cache_tag(way,set))*m_words*m_sets+m_words*set)*4;
+                std::cout << std::dec << cache_state(way, set) 
+                          << " | way " << way 
+                          << " | set " << set 
+                          << std::hex << " | @ " << addr;
+
+                for ( size_t word = 0 ; word < m_words ; word++ )
+                {
+                    std::cout << " | " << cache_data(way,set,word) ;
+                }
+                std::cout << std::endl ;
+            }
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // This function is deprecated as it is difficult to implement in 1 cycle.
+    ///////////////////////////////////////////////////////////////////////////
+    __attribute__((deprecated))
+    inline bool inval(addr_t 	ad)
+    {
+        bool              hit = false;
+        const addr_t      tag = m_z[ad];
+        const size_t      set = m_y[ad];
+
+        for ( size_t way = 0 ; way < m_ways && !hit ; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) and
+                 (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                hit                   = true;
+                cache_state(way, set) = CACHE_SLOT_STATE_EMPTY;
+                cache_lru(way, set)   = false;
+            }
+        }
+        return hit;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////
+    // This function is deprecated as it is difficult to implement in 1 cycle.
+    ////////////////////////////////////////////////////////////////////////////////
+    __attribute__((deprecated))
+    inline bool inval( addr_t 	ad, 
+                       size_t* 	selway, 
+                       size_t* 	selset )
+    {
+        bool            hit = false;
+        const addr_t    tag = m_z[ad];
+        const size_t    set = m_y[ad];
+
+        for ( size_t way = 0 ; way < m_ways && !hit ; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) and 
+                 (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                hit                   = true;
+                cache_state(way, set) = CACHE_SLOT_STATE_EMPTY;
+                cache_lru(way, set)   = false;
+                *selway             = way;
+                *selset             = set;
+            }
+        }
+        return hit;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////
+    // This function is deprecated as the directory must be a dual port RAM...
+    ////////////////////////////////////////////////////////////////////////////////
+    __attribute__((deprecated))
+    inline bool update( addr_t 	ad, 
+                        data_t* buf, 
+                        addr_t* victim )
+    {
+        size_t set, way;
+        bool   cleanup = victim_select(ad, victim, &way, &set);
+        victim_update_tag (ad, way, set);
+
+        for ( size_t word = 0 ; word < m_words ; word++ ) {
+            cache_data(way, set, word) = buf[word] ;
+        }
+
+        return cleanup;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    // this function is deprecated, as it is difficult to implement in 1 cycle. 
+    ////////////////////////////////////////////////////////////////////////////
+    __attribute__((deprecated))
+    inline bool write(addr_t 	ad, 
+                      data_t 	dt)
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) and
+                 (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                cache_data(way, set, word) = dt;
+                cache_set_lru(way, set);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    // this function is deprecated, as it is difficult to implement in 1 cycle. 
+    ////////////////////////////////////////////////////////////////////////////
+    __attribute__((deprecated))
+    inline bool write(addr_t 	ad, 
+                      data_t 	dt, 
+                      be_t 	be)
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) and 
+                 (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                data_t mask = be2mask(be);
+                data_t prev = cache_data(way, set, word);
+                cache_data(way, set, word) = (mask & dt) | (~mask & prev);
+                cache_set_lru(way, set);
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    /////////////////////////////////////////////////////////////////////////////
+    // this function is deprecated, as it is difficult to implement in 1 cycle. 
+    /////////////////////////////////////////////////////////////////////////////
+    __attribute__((deprecated))
+    inline bool write(addr_t 	ad, 
+                      data_t 	dt, 
+                      size_t* 	nway)
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) and
+                 (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                cache_data(way, set, word) = dt;
+                cache_set_lru(way, set);
+                *nway = way;
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+    // this function is deprecated, as it is difficult to implement in 1 cycle. 
+    /////////////////////////////////////////////////////////////////////////////
+    __attribute__((deprecated))
+    inline bool write(addr_t 	ad, 
+                      data_t 	dt, 
+                      size_t* 	nway, 
+                      be_t 	be)
+    {
+        const addr_t      tag  = m_z[ad];
+        const size_t      set  = m_y[ad];
+        const size_t      word = m_x[ad];
+
+        for ( size_t way = 0; way < m_ways; way++ ) 
+        {
+            if ( (tag == cache_tag(way, set)) and 
+                 (cache_state(way, set) == CACHE_SLOT_STATE_VALID) ) 
+            {
+                data_t mask = be2mask(be);
+                data_t prev = cache_data(way, set, word);
+                cache_data(way, set, word) = (mask & dt) | (~mask & prev);
+                cache_set_lru(way, set);
+                *nway = way;
+                return true;
+            }
+        }
+        return false;
+    }
+    
+};
+
+} // namespace soclib
+
+#endif
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/lib/generic_cache_tsar/metadata/generic_cache.sd
===================================================================
--- /branches/fault_tolerance/lib/generic_cache_tsar/metadata/generic_cache.sd	(revision 724)
+++ /branches/fault_tolerance/lib/generic_cache_tsar/metadata/generic_cache.sd	(revision 724)
@@ -0,0 +1,15 @@
+
+# -*- python -*-
+
+__version__ = "$Revision: 917 $"
+
+Module('caba:generic_cache_tsar',
+	classname = 'soclib::GenericCache',
+	header_files = ['../include/generic_cache.h',],
+	   tmpl_parameters = [
+	parameter.Type('addr_t'),
+	],
+	uses = [Uses('common:mapping_table'),
+			Uses('common:address_masking_table',
+				 data_t = parameter.Reference('addr_t')),],
+)
Index: /branches/fault_tolerance/lib/generic_llsc_global_table/include/generic_llsc_global_table.h
===================================================================
--- /branches/fault_tolerance/lib/generic_llsc_global_table/include/generic_llsc_global_table.h	(revision 724)
+++ /branches/fault_tolerance/lib/generic_llsc_global_table/include/generic_llsc_global_table.h	(revision 724)
@@ -0,0 +1,533 @@
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Alexandre JOANNOU <alexandre.joannou@lip6.fr>
+ *
+ */
+
+#ifndef SOCLIB_GENERIC_LLSC_GLOBAL_TABLE_H
+#define SOCLIB_GENERIC_LLSC_GLOBAL_TABLE_H
+
+#include <cassert>
+#include <cstring>
+#include <cmath>
+#include <iostream>
+#include <iomanip>
+#include <stdint.h>
+
+#define RESERVATION_LIFE_SPAN 1
+
+namespace soclib
+{
+
+//////////////////////////
+//TODO switch to this
+/*
+template
+<
+size_t          nb_slots,   // max number of concerned shared resources
+typename        key_t,      // key type => max number of key; TODO wich one ?
+unsigned int    t_network,  // max number of cycle spent in the network when responding to a client (or more)
+unsigned int    t_inter_op, // min number of cycle between 2 reservation operation (or less but > 0)
+typename        addr_t      // ressource identifier type
+>
+*/
+template
+<
+size_t          nb_slots,   // desired number of slots
+unsigned int    nb_procs,   // number of processors in the system
+unsigned int    life_span,  // registratioÃ§n life span (in # of LL operations)
+typename        addr_t      // address type
+>
+class GenericLLSCGlobalTable
+////////////////////////////
+{
+    private :
+
+    const std::string           name              ; // component name
+
+    uint32_t                    r_key  [nb_slots] ; // array of key
+    addr_t                      r_addr [nb_slots] ; // array of addresses
+    bool                        r_val  [nb_slots] ; // array of valid bits
+
+    uint32_t                    r_next_key        ; // value of the next key
+    uint64_t                    r_block_mask      ; // mask for the slots blocks
+    uint64_t                    r_last_counter    ; // mask for the slots blocks
+    size_t                      r_write_ptr       ; // index of next slot to replace
+    size_t                      r_last_empty      ; // index of last empty slot used
+
+    mutable uint32_t            m_cpt_evic        ; // number of eviction in the table
+    mutable uint32_t            m_cpt_ll          ; // number of ll accesses to the table
+    mutable uint32_t            m_cpt_ll_update   ; // number of ll accesses to the table that trigger an update TODO check that
+    mutable uint32_t            m_cpt_sc          ; // number of sc accesses to the table
+    mutable uint32_t            m_cpt_sc_success  ; // number of sc accesses to the table that are successful
+    mutable uint32_t            m_cpt_check       ; // number of check accesses to the table
+    mutable uint32_t            m_cpt_sw          ; // number of sw accesses to the table
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline void upNextKey()
+    //  This function generates a new value for the next key
+    {
+        // generating a new key in r_next_key
+        r_next_key++;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    /*
+    inline void updateVictimSlot()
+    //  This function selects the next slot to be evicted
+    //  This is done by updating the value of r_write_ptr
+    {
+        // updates the position of the next slot to be replaced
+
+        static unsigned int count = 0;
+
+
+        // for each slot, check if it actually is the slot to replace
+        // this is done by checking count % 2^(i+1) == (2^i)-1
+        // 2^(i+1) being the period
+        // (2^i)-1 being the first apparition
+        // NB : the -1 in (2^i)-1 is here because of the 0 indexed array
+
+        for (size_t i = 0 ; i < nb_slots; i++)
+            if (count % (int)pow(2,i+1) == pow(2,i)-1)
+                r_write_ptr = i;
+
+        count = (count + 1) % (int) pow(2,nb_slots);    // mustn't go further than 2^nb_slots
+                                                        // or (2^nb_slots)+1 for a 1 indexed array
+                                                        // 2^32 = periodicity of slot #31
+    }
+    */
+    ////////////////////////////////////////////////////////////////////////////
+    inline void updateVictimSlot()
+    //  This function selects the next slot to be evicted
+    //  This is done by updating the value of r_write_ptr
+    {
+        uint64_t new_counter;
+        uint64_t xor_counter;
+
+        new_counter = newCounter(r_block_mask, r_last_counter);
+        xor_counter = new_counter ^ r_last_counter;
+
+        for (size_t i = nb_slots - 1; i >= 0; --i)
+        {
+            if(xor_counter & (1 << i))
+            {
+                r_write_ptr = i;
+                break;
+            }
+        }
+
+        r_last_counter = new_counter;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline uint64_t newCounter(const uint64_t& mask,
+                               const uint64_t& counter) const
+    // This function generates the new counter //TODO comment more
+    {
+        return ((((~counter) & (counter << 1)) & mask) | (counter + 1));
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline void init_block_mask()
+    //TODO
+    //This function selects the block mask to be used
+    //Need to provide another way to do that ?
+    {
+        /*
+        //try to dynamically compute the block mask ...
+        #define L2 soclib::common::uint32_log2
+        unsigned int budget = nb_slots - (L2(nb_procs) + 1); //TODO +1?
+        #undef L2
+        */
+
+        switch(nb_slots)
+        {
+            case 12:
+            r_block_mask = (uint64_t)0x000ULL;
+            break;
+            case 16 :
+            r_block_mask = (uint64_t)0xA800ULL;
+            break;
+            case 20 :
+            r_block_mask = (uint64_t)0xD5500ULL;
+            break;
+            case 24 :
+            r_block_mask = (uint64_t)0xDB5540ULL;
+            break;
+            case 28 :
+            r_block_mask = (uint64_t)0xEEDAAA0ULL;
+            break;
+            case 32 :
+            r_block_mask = (uint64_t)0xF776D550ULL;
+            break;
+            case 36 :
+            r_block_mask = (uint64_t)0xFBDDDB550ULL;
+            break;
+            case 40 :
+            r_block_mask = (uint64_t)0xFDF7BB6D50ULL;
+            break;
+            case 44 :
+            r_block_mask = (uint64_t)0xFEFBDEEDAA8ULL;
+            break;
+            case 48 :
+            r_block_mask = (uint64_t)0xFF7EFBDDDAA8ULL;
+            break;
+            case 52 :
+            r_block_mask = (uint64_t)0xFFBFBF7BBB6A8ULL;
+            break;
+            case 56 :
+            r_block_mask = (uint64_t)0xFFDFEFDF7BB6A8ULL;
+            break;
+            case 60 :
+            r_block_mask = (uint64_t)0xFFF7FDFDF7BB6A8ULL;
+            break;
+            case 64 :
+            r_block_mask = (uint64_t)0xFFFBFF7FBF7BB6A8ULL;
+            break;
+            default:
+            assert(false && "nb_slots must be either 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60 or 64");
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline int nextEmptySlot() const
+    //  This function returns :
+    //  - the position of the first next empty slot in the table
+    //    (starting from the last empty slot used)
+    //    and updates the r_last_empty_slot register
+    //  - -1 if the table is full
+    {
+        uint64_t i; 
+        for(i = 0; i < nb_slots; i++)
+        {
+            if (!r_val[i]) return i;
+        }
+
+        return -1;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline int hitAddr(const addr_t ad) const
+    //  HIT on the address only
+    //  This function takes an addr_t ad
+    //  It returns :
+    //  - the position of the first HIT in the table
+    //  - -1 in case of MISS
+    //  NB : HIT = (slot addr == ad) AND (slot is valid)
+    {
+        // checking all slots
+        for (size_t i = 0; i < nb_slots; i++)
+        {
+            // if HIT, returning its position
+            if(ad == r_addr[i] && r_val[i]) return i;
+        }
+
+        // MISS
+        return -1;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline int hitAddrKey(const addr_t ad, const uint32_t key) const
+    //  HIT on the address AND the on the signature
+    //  This function takes an addr_t ad and a uint32_t key
+    //  It returns :
+    //  - the position of the first HIT in the table
+    //  - -1 in case of MISS
+    //  NB : HIT = (slot addr == ad) AND (slot key == key)
+    //                               AND (slot is valid)
+    {
+        // checking all slots
+        for (size_t i = 0; i < nb_slots; i++)
+        {
+            // if HIT, returning its position
+            if(ad == r_addr[i] && key == r_key[i] && r_val[i]) return i;
+        }
+
+        // MISS
+        return -1;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline void reset()
+    {
+        // init the table
+        init();
+
+        // init stat counters
+        m_cpt_evic          = 0;
+        m_cpt_ll            = 0;
+        m_cpt_ll_update     = 0;
+        m_cpt_sc            = 0;
+        m_cpt_sc_success    = 0;
+        m_cpt_check         = 0;
+        m_cpt_sw            = 0;
+    }
+
+
+    public:
+
+    ////////////////////////////////////////////////////////////////////////////
+    GenericLLSCGlobalTable( const std::string   &n = "llsc_global_table" )
+    :   name(n)
+    {
+        assert(nb_procs > 1); 
+        init();
+        init_block_mask();
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    ~GenericLLSCGlobalTable()
+    {
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    //  This function initializes the table (all slots empty)
+    inline void init()
+    {
+        // making all slots available by reseting all valid bits
+        std::memset(r_val,  0, sizeof(*r_val) * nb_slots);
+        std::memset(r_addr, 0, sizeof(*r_addr) * nb_slots);
+        std::memset(r_key,  0, sizeof(*r_key) * nb_slots);
+
+        // init registers
+        r_next_key          = 0;
+        r_last_counter      = 0; //TODO static in updateVictimSlot() ?
+        r_write_ptr         = 0;
+        r_last_empty        = 0;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline uint32_t ll(const addr_t ad)
+    //  This method registers an LL in the table and returns the key associated
+    //  with the registration
+    {
+        // increment the ll access counter (for stats)
+        m_cpt_ll++;
+
+        // hit addr ?
+        // YES
+        //      enough time left ?
+        //      YES
+        //          use this registration, return key
+        //      NO
+        //          update this registration with a new key, return new key
+        // NO
+        //      table has an empty slot ?
+        //      YES
+        //              select empty slot
+        //      NO
+        //              select victim slot (r_write_ptr)
+        //              update next victim
+        //      open registration on selected slot
+        //      update next key
+        //      return the registration key
+
+        //  Is the address found in the table ?
+        int pos = hitAddr(ad);
+
+        //  Yes, then return the associated key
+        if (pos >= 0)
+        {
+#if RESERVATION_LIFE_SPAN == 0
+            return r_key[pos];
+#else
+            uint32_t absdiff = ( r_key[pos] > r_next_key) ?
+                                 r_key[pos] - r_next_key  :
+                                 r_next_key - r_key[pos];
+
+            if(absdiff < life_span) return r_key[pos];
+
+            r_key[pos] = r_next_key;
+            upNextKey();
+            m_cpt_ll_update++;
+
+            return r_key[pos];
+#endif
+        }
+
+        //  No, then try to find an empty slot
+        pos = nextEmptySlot();
+
+        //  If there is no empty slot,
+        //  evict an existing registration
+        if (pos == -1)
+        {
+            //  update the victim slot for the next eviction
+            updateVictimSlot();
+
+            //  get the position of the evicted registration
+            pos = r_write_ptr;
+
+            // increment the eviction counter (for stats)
+            m_cpt_evic++;
+        }
+
+        // get the key for the new registration
+        uint32_t key    = r_next_key;
+        //  update the registration slot
+        r_key[pos]      = key   ;
+        r_addr[pos]     = ad    ;
+        r_val[pos]      = true  ;
+        //  compute the next key
+        upNextKey();
+
+        // return the key of the new registration
+        return key;
+
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline bool sc(const addr_t ad, const uint32_t key)
+    //  This method checks if there is a valid registration for the SC (ad &&
+    //  key) and, in case of hit,invalidates the registration and returns true
+    //  (returns false otherwise)
+    //
+    //  The return value can be used to tell if the SC is atomic
+    {
+        // increment the sc access counter (for stats)
+        m_cpt_sc++;
+        // hit addr && hit key ?
+        // NO
+        //      return miss
+        // YES
+        //      inval registration and return hit
+
+        //  Is there a valid registration in the table ?
+        int pos = hitAddrKey(ad, key);
+        if(pos >= 0)
+        {
+            // increment the sc success counter (for stats)
+            m_cpt_sc_success++;
+            // invalidate the registration
+            r_val[pos] = false;
+            // return the success of the sc operation
+            return true;
+        }
+        else
+        {
+            // return the failure of the sc operation
+            return false;
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline bool check(const addr_t ad, const uint32_t key) const
+    //  This method checks if there is a valid registration for the SC (ad &&
+    //  key)
+    //  The return value can be used to tell if the SC is atomic
+    {
+        // increment the check access counter (for stats)
+        m_cpt_check++;
+
+        return (hitAddrKey(ad, key) >= 0);
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    /*
+    inline void sw(const addr_t ad)
+    //  This method checks if there is a valid registration for the given
+    //  address and, in case of hit, invalidates the registration
+    {
+        // increment the sw access counter (for stats)
+        m_cpt_sw++;
+        // hit addr ?
+        // YES
+        //      inval registration
+        // NO
+        //      nothing
+
+        //  Is there a registration for the given address ?
+        int pos = hitAddr(ad);
+        //  If there is one, invalidate it
+        if(pos >= 0) r_val[pos] = false;
+    }
+    */
+    inline void sw(const addr_t ad_min, const addr_t ad_max)
+    //  This method checks if there is / are valid registration(s) for the given
+    //  range and, in case of hit(s), invalidates the registration(s)
+    {
+        // increment the sw access counter (for stats)
+        m_cpt_sw++;
+        // hit range ?
+        // YES
+        //      inval registration(s)
+        // NO
+        //      nothing
+
+        // for every address in the given range ...
+        for (addr_t i = ad_min; i <= ad_max; i+=4)
+        {
+            //  Is there a registration for the given address ?
+            int pos = hitAddr(i);
+
+            //  If there is one, invalidate it
+            if (pos >= 0)
+            {
+                r_val[pos] = false;
+            }
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    /*
+    void fileTrace(FILE* file)
+    {
+    }
+    */
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline void print_trace(std::ostream& out = std::cout)
+    {
+        for ( size_t i = 0; i < nb_slots ; i++ )
+        {
+            out << std::setw(3)   << std::setfill(' ') << std::dec << i
+                << std::noshowbase
+                << " VLD_RX = "   << r_val[i]
+                << std::uppercase
+                << " ADR_RX = 0x" << std::setw(8) << std::setfill('0') << std::hex << (r_addr[i] >> 2)
+                << " SGN_RX = 0x" << std::setw(8) << std::setfill('0') << std::hex << r_key[i]
+                << std::endl;
+        }
+        out << "NEXT_SGN_RX = 0x" << std::setw(8) << std::setfill('0') << std::hex << r_next_key     << std::endl
+            << "CNT_RX = 0x"      << std::setw(8) << std::setfill('0') << std::hex << r_last_counter << std::endl;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    inline void print_stats(std::ostream& out = std::cout)
+    {
+        out << "# of ll accesses : " << m_cpt_ll            << std::endl
+            << "# of ll updates  : " << m_cpt_ll_update     << std::endl
+            << "# of sc accesses : " << m_cpt_sc            << std::endl
+            << "# of sc success  : " << m_cpt_sc_success    << std::endl
+            << "# of sw accesses : " << m_cpt_sw            << std::endl
+            << "# of evictions   : " << m_cpt_evic          << std::endl ;
+    }
+
+};
+
+} // end namespace soclib
+
+#endif
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/lib/generic_llsc_global_table/metadata/generic_llsc_global_table.sd
===================================================================
--- /branches/fault_tolerance/lib/generic_llsc_global_table/metadata/generic_llsc_global_table.sd	(revision 724)
+++ /branches/fault_tolerance/lib/generic_llsc_global_table/metadata/generic_llsc_global_table.sd	(revision 724)
@@ -0,0 +1,13 @@
+# -*- python -*-
+
+Module(
+    'caba:generic_llsc_global_table',
+    classname       = 'soclib::GenericLLSCGlobalTable',
+    header_files    = ['../include/generic_llsc_global_table.h'],
+    tmpl_parameters = 
+        [
+            parameter.Int('nb_slots', min = 2, max = 64, default = 32),
+            parameter.Int('nb_procs', min = 2, max = 4096, default = 4095), # default should be 4096, but soclib-cc problem
+            parameter.Type('addr_t', default = 'sc_dt::sc_uint<40>')
+        ]
+)
Index: /branches/fault_tolerance/modules/dspin_router_tsar/caba/metadata/dspin_router_tsar.sd
===================================================================
--- /branches/fault_tolerance/modules/dspin_router_tsar/caba/metadata/dspin_router_tsar.sd	(revision 724)
+++ /branches/fault_tolerance/modules/dspin_router_tsar/caba/metadata/dspin_router_tsar.sd	(revision 724)
@@ -0,0 +1,30 @@
+# -*- python -*-
+
+Module('caba:dspin_router_tsar',
+	classname = 'soclib::caba::DspinRouterTsar',
+	tmpl_parameters = [ parameter.Int('flit_width'), ],
+	header_files = ['../source/include/dspin_router_tsar.h',],
+	implementation_files = ['../source/src/dspin_router_tsar.cpp',],
+	ports = [
+		Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+		Port('caba:clock_in', 'p_clk', auto = 'clock'),
+	    Port('caba:dspin_output', 'p_out', 5, dspin_data_size = parameter.Reference('flit_width')),
+	    Port('caba:dspin_input', 'p_in', 5, dspin_data_size = parameter.Reference('flit_width')),
+	],
+	instance_parameters = [
+	    parameter.Int('x'),
+	    parameter.Int('y'),
+	    parameter.Int('x_width'),
+	    parameter.Int('y_width'),
+	    parameter.Int('in_fifo_depth'),
+	    parameter.Int('out_fifo_depth'),
+	    parameter.Int('cluster_iob0'),
+	    parameter.Int('cluster_iob1'),
+	    parameter.Int('l_width'),
+	    parameter.Int('iob_local_id'),
+	],
+	uses = [
+	    Uses('caba:base_module'),
+	    Uses('caba:generic_fifo'),
+	],
+)
Index: /branches/fault_tolerance/modules/dspin_router_tsar/caba/source/include/dspin_router_tsar.h
===================================================================
--- /branches/fault_tolerance/modules/dspin_router_tsar/caba/source/include/dspin_router_tsar.h	(revision 724)
+++ /branches/fault_tolerance/modules/dspin_router_tsar/caba/source/include/dspin_router_tsar.h	(revision 724)
@@ -0,0 +1,157 @@
+/* -*- c++ -*-
+  *
+  * File : dspin_router_tsar.h
+  * Copyright (c) UPMC, Lip6
+  * Authors : Alain Greiner 
+  *
+  * SOCLIB_LGPL_HEADER_BEGIN
+  * 
+  * This file is part of SoCLib, GNU LGPLv2.1.
+  * 
+  * SoCLib is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as published
+  * by the Free Software Foundation; version 2.1 of the License.
+  * 
+  * SoCLib is distributed in the hope that it will be useful, but
+  * WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  * 
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with SoCLib; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  * 02110-1301 USA
+  * 
+  * SOCLIB_LGPL_HEADER_END
+  *
+  */
+
+////////////////////////////////////////////////////////////////////////////////
+// This component implements a variant of the standard (SocLib) DSPIN router:
+// The routing function has been modified to handle the special case of
+// cluster_iob0 (containing component IOB0) and cluster_iob1 (containing
+// component IOB1). In those two cluster, the response router must decode
+// both the SRCID global bits AND the SRCID local bits to distinguish
+// between the IOB and MEMC initiators.
+// This component contains the following modifications:
+// - 4 extra constructor arguments,
+// - 6 new member variables
+// - a modified routing function
+//////////////////////////////////////////////////////////////////////////////// 
+
+#ifndef DSPIN_ROUTER_TSAR_H_
+#define DSPIN_ROUTER_TSAR_H_
+
+#include <systemc>
+#include "caba_base_module.h"
+#include "generic_fifo.h"
+#include "dspin_interface.h"
+#include "alloc_elems.h"
+
+namespace soclib { namespace caba {
+
+using namespace sc_core;
+
+template<int flit_width>
+class DspinRouterTsar
+: public soclib::caba::BaseModule
+{
+	// Port indexing
+	enum 
+    {
+		DSPIN_NORTH	= 0,
+		DSPIN_SOUTH	= 1,
+		DSPIN_EAST	= 2,
+		DSPIN_WEST	= 3,
+		DSPIN_LOCAL	= 4,
+	};
+
+    // Input Port FSM
+    enum 
+    {
+        INFSM_IDLE,
+        INFSM_REQ,
+        INFSM_ALLOC,
+    };
+
+    protected:
+    SC_HAS_PROCESS(DspinRouterTsar);
+
+    public:
+
+	// ports
+	sc_in<bool>                 p_clk;
+	sc_in<bool>                 p_resetn;
+	DspinInput<flit_width>      *p_in;
+	DspinOutput<flit_width>	    *p_out;
+
+	// constructor
+	DspinRouterTsar(
+                sc_module_name name, 
+                const size_t   x,              // x coordinate
+                const size_t   y,              // y cordinate
+                const size_t   x_width,        // x field width in first flit
+                const size_t   y_width,        // y field width in first flit
+                const size_t   in_fifo_depth,  // input fifo depth
+                const size_t   out_fifo_depth, // output fifo depth
+                const bool     is_iob0,        // cluster containing IOB0
+                const bool     is_iob1,        // cluster containing IOB0
+                const bool     is_rsp,         // only response router is modified
+                const size_t   l_width);       // local srcid width
+    private:
+
+    // define the FIFO flit
+    typedef struct internal_flit_s 
+    {
+        sc_uint<flit_width>  data;
+        bool                 eop;
+    } internal_flit_t;
+    
+    // registers
+	sc_signal<bool>				*r_alloc_out;
+	sc_signal<size_t>           *r_index_out;
+    sc_signal<int>              *r_fsm_in;
+	sc_signal<size_t>           *r_index_in;
+
+	// fifos
+	soclib::caba::GenericFifo<internal_flit_t>*  r_fifo_in;
+	soclib::caba::GenericFifo<internal_flit_t>*  r_fifo_out;
+
+	// structural parameters
+	size_t	                    m_local_x;
+	size_t	                    m_local_y;
+	size_t	                    m_x_width;
+	size_t	                    m_x_shift;
+	size_t	                    m_x_mask;
+	size_t	                    m_y_width;
+	size_t	                    m_y_shift;
+	size_t	                    m_y_mask;
+	size_t	                    m_l_width;
+	size_t	                    m_l_shift;
+	size_t	                    m_l_mask;
+    bool                        m_is_iob0;
+    bool                        m_is_iob1;
+    bool                        m_is_rsp;
+
+    // methods 
+    void    transition();
+    void    genMoore();
+    size_t  route( sc_uint<flit_width> data );
+
+    public:
+
+    void    print_trace();
+};
+
+}} // end namespace
+               
+#endif // DSPIN_ROUTER_TSAR_H_
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/dspin_router_tsar/caba/source/src/dspin_router_tsar.cpp
===================================================================
--- /branches/fault_tolerance/modules/dspin_router_tsar/caba/source/src/dspin_router_tsar.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/dspin_router_tsar/caba/source/src/dspin_router_tsar.cpp	(revision 724)
@@ -0,0 +1,373 @@
+/* -*- c++ -*-
+  *
+  * File : dspin_router_tsar.cpp
+  * Copyright (c) UPMC, Lip6
+  * Authors : Alain Greiner, Abbas Sheibanyrad, Ivan Miro, Zhen Zhang
+  *
+  * SOCLIB_LGPL_HEADER_BEGIN
+  * 
+  * This file is part of SoCLib, GNU LGPLv2.1.
+  * 
+  * SoCLib is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as published
+  * by the Free Software Foundation; version 2.1 of the License.
+  * 
+  * SoCLib is distributed in the hope that it will be useful, but
+  * WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  * 
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with SoCLib; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  * 02110-1301 USA
+  *
+  * SOCLIB_LGPL_HEADER_END
+  *
+  */
+
+////////////////////////////////////////////////////////////////////////////////
+// This component implements a variant of the standard (SocLib)  DSPIN router:
+// The routing function has been modified to handle the special case of
+// cluster_iob0 (containing component IOB0) and cluster_iob1 (containing
+// component IOB1). In those two cluster, the response router must decode
+// both the SRCID global bits AND the SRCID local bits to distinguish
+// between the IOB and MEMC initiators.
+// This component contains the following modifications:
+// - 4 new constructor arguments
+// - 6 new member variables
+// - a modified routing function
+//////////////////////////////////////////////////////////////////////////////// 
+
+#include "../include/dspin_router_tsar.h"
+
+namespace soclib { namespace caba {
+
+using namespace soclib::common;
+using namespace soclib::caba;
+
+#define tmpl(x) template<int flit_width> x DspinRouterTsar<flit_width>
+
+    ////////////////////////////////////////////////
+    //              constructor
+    ////////////////////////////////////////////////
+    tmpl(/**/)::DspinRouterTsar( 
+                sc_module_name name, 
+                const size_t   x,              // x coordinate
+                const size_t   y,              // y cordinate
+                const size_t   x_width,        // x field width in first flit
+                const size_t   y_width,        // y field width in first flit
+                const size_t   in_fifo_depth,  // input fifo depth
+                const size_t   out_fifo_depth, // output fifo depth
+
+                const bool     is_iob0,        // cluster contains iob0
+                const bool     is_iob1,        // cluster contains iob1
+                const bool     is_rsp,         // only response router is modified
+                const size_t   l_width)        // local field srcid width 
+	: soclib::caba::BaseModule(name),
+
+      p_clk( "p_clk" ),
+      p_resetn( "p_resetn" ),
+      p_in( alloc_elems<DspinInput<flit_width> >("p_in", 5) ),
+      p_out( alloc_elems<DspinOutput<flit_width> >("p_out", 5) ),
+
+	  r_alloc_out( alloc_elems<sc_signal<bool> >("r_alloc_out", 5)),
+	  r_index_out( soclib::common::alloc_elems<sc_signal<size_t> >("r_index_out", 5)),
+	  r_fsm_in( alloc_elems<sc_signal<int> >("r_fsm_in", 5)),
+	  r_index_in( alloc_elems<sc_signal<size_t> >("r_index_in", 5)),
+
+      m_local_x( x ),
+      m_local_y( y ),
+
+      m_x_width( x_width ),
+      m_x_shift( flit_width - x_width ),
+      m_x_mask( (0x1 << x_width) - 1 ),
+
+      m_y_width( y_width ),
+      m_y_shift( flit_width - x_width - y_width ),
+      m_y_mask( (0x1 << y_width) - 1 ),
+
+      m_l_width( l_width ),
+      m_l_shift( flit_width - x_width - y_width - l_width ),
+      m_l_mask( (0x1 << l_width) - 1 ),
+
+      m_is_iob0( is_iob0 ),
+      m_is_iob1( is_iob1 ),
+      m_is_rsp( is_rsp )
+
+    {
+        std::cout << "  - Building DspinRouterTsar : " << name << std::endl;
+
+	    SC_METHOD (transition);
+	    dont_initialize();
+	    sensitive << p_clk.pos();
+
+   	    SC_METHOD (genMoore);
+	    dont_initialize();
+	    sensitive  << p_clk.neg();
+
+	    r_fifo_in  = (GenericFifo<internal_flit_t>*)
+	                 malloc(sizeof(GenericFifo<internal_flit_t>)*5);
+	    r_fifo_out = (GenericFifo<internal_flit_t>*)
+	                 malloc(sizeof(GenericFifo<internal_flit_t>)*5);
+
+	    for( size_t i = 0 ; i < 5 ; i++ )
+        {
+		    std::ostringstream stri;
+		    stri << "r_in_fifo_" << i;
+	        new(&r_fifo_in[i])  
+                GenericFifo<internal_flit_t >(stri.str(), in_fifo_depth);
+
+		    std::ostringstream stro;
+		    stro << "r_out_fifo_" << i;
+	        new(&r_fifo_out[i]) 
+                GenericFifo<internal_flit_t >(stro.str(), out_fifo_depth);
+	    }
+    } //  end constructor
+
+    //////////////////////////////////////////////////
+    tmpl(size_t)::route( sc_uint<flit_width> data )
+    {
+        size_t xdest = (size_t)(data >> m_x_shift) & m_x_mask;
+        size_t ydest = (size_t)(data >> m_y_shift) & m_y_mask;
+        size_t ldest = (size_t)(data >> m_l_shift) & m_l_mask;
+
+        if      (xdest < m_local_x ) return DSPIN_WEST;
+        else if (xdest > m_local_x ) return DSPIN_EAST; 
+        else if (ydest < m_local_y ) return DSPIN_SOUTH;
+        else if (ydest > m_local_y ) return DSPIN_NORTH;
+        else    // handling IOB0 & IOB1 special cases
+        {
+            if      (m_is_rsp and m_is_iob0 and (ldest > 0xA)) return DSPIN_WEST;
+            else if (m_is_rsp and m_is_iob1 and (ldest > 0xA)) return DSPIN_EAST;
+            else                                               return DSPIN_LOCAL;
+        }
+    } // end route()
+
+    /////////////////////////
+    tmpl(void)::print_trace()
+    {
+        const char* port_name[] = {"NORTH","SOUTH","EAST ","WEST ","LOCAL"};
+
+        std::cout << "DSPIN_ROUTER " << name() << std::hex; 
+        for ( size_t out=0 ; out<5 ; out++)  // loop on output ports
+        {
+            if ( r_alloc_out[out].read() )
+            {
+                int in = r_index_out[out];
+                std::cout << " / " << port_name[in] << " -> " << port_name[out] ;
+            }   
+        }
+        std::cout << std::endl;
+    }
+
+    ////////////////////////
+    tmpl(void)::transition()
+    {
+        // Long wires connecting input and output ports
+        size_t              req_in[5];         // input ports  -> output ports
+        size_t              get_out[5];        // output ports -> input ports
+        bool                put_in[5];         // input ports  -> output ports
+        internal_flit_t     flit_in[5];        // input ports  -> output ports
+
+        // control signals for the input fifos
+	    bool                fifo_in_write[5];
+	    bool                fifo_in_read[5];	
+	    internal_flit_t     fifo_in_wdata[5];
+
+        // control signals for the output fifos
+	    bool                fifo_out_write[5];
+	    bool                fifo_out_read[5];
+	    internal_flit_t     fifo_out_wdata[5];
+
+	    // Reset 
+	    if ( p_resetn == false ) 
+        {
+	        for(size_t i = 0 ; i < 5 ; i++) 
+            {
+		        r_alloc_out[i] = false;
+		        r_index_out[i] = 0;
+		        r_index_in[i]  = 0;
+		        r_fsm_in[i]    = INFSM_IDLE;
+		        r_fifo_in[i].init();
+		        r_fifo_out[i].init();
+	        }
+            return;
+        }
+
+	    // fifos signals default values
+	    for(size_t i = 0 ; i < 5 ; i++) 
+        {
+		    fifo_in_read[i]        = false;
+		    fifo_in_write[i]       = p_in[i].write.read();
+		    fifo_in_wdata[i].data  = p_in[i].data.read();
+		    fifo_in_wdata[i].eop   = p_in[i].eop.read();
+         
+		    fifo_out_read[i]       = p_out[i].read.read();
+		    fifo_out_write[i]      = false;
+	    }
+
+        // loop on the output ports:
+        // compute get_out[j] depending on the output port state
+        // and combining fifo_out[j].wok and r_alloc_out[j]
+        for ( size_t j = 0 ; j < 5 ; j++ )
+        {
+		    if( r_alloc_out[j].read() and (r_fifo_out[j].wok()) ) 
+            {
+                get_out[j] = r_index_out[j].read();
+            }
+            else
+            {                       
+                get_out[j] = 0xFFFFFFFF;  
+            }
+        }
+
+        // loop on the input ports :
+        // The port state is defined by r_fsm_in[i], r_index_in[i] 
+        // The req_in[i] computation implements the X-FIRST algorithm.
+        // Both put_in[i] and req_in[i] depend on the input port state.
+
+        for ( size_t i = 0 ; i < 5 ; i++ )
+        {
+            switch ( r_fsm_in[i].read() )
+            {
+                case INFSM_IDLE:    // no output port allocated
+                {
+                    put_in[i] = false;
+                    if ( r_fifo_in[i].rok() ) // packet available in input fifo
+                    {
+                        req_in[i]       = route( r_fifo_in[i].read().data );
+                        r_index_in[i]   = req_in[i];
+                        r_fsm_in[i]     = INFSM_REQ;
+                    }
+                    else
+                    {
+                        req_in[i] = 0xFFFFFFFF;  // no request
+                    }
+                    break;
+                }
+                case INFSM_REQ:   // waiting output port allocation
+                {
+                    flit_in[i] = r_fifo_in[i].read();
+                    put_in[i]  = r_fifo_in[i].rok();
+                    req_in[i]  = r_index_in[i];
+                    if ( get_out[r_index_in[i].read()] == i ) // first flit transfered
+                    {
+                        if ( r_fifo_in[i].read().eop ) r_fsm_in[i] = INFSM_IDLE;
+                        else                           r_fsm_in[i] = INFSM_ALLOC;
+                    }
+                    break;
+                }
+                case INFSM_ALLOC:  // output port allocated
+                {
+                    flit_in[i] = r_fifo_in[i].read();
+                    put_in[i] = r_fifo_in[i].rok();
+                    req_in[i] = 0xFFFFFFFF;                 // no request
+                    if ( r_fifo_in[i].read().eop and r_fifo_in[i].rok() and 
+                         (get_out[r_index_in[i].read()] == i) ) // last flit transfered 
+                    {
+                        r_fsm_in[i] = INFSM_IDLE;
+                    }
+                    break;
+                }
+            } // end switch
+        } // end for input ports
+                                   
+        // loop on the output ports :
+	    // The r_alloc_out[j] and r_index_out[j] computation
+        // implements the round-robin allocation policy.
+        // These two registers implement a 10 states FSM.
+	    for( size_t j = 0 ; j < 5 ; j++ ) 
+        {
+		    if( not r_alloc_out[j].read() )  // not allocated: possible new allocation
+            {
+		        for( size_t k = r_index_out[j].read() + 1 ; 
+                     k < (r_index_out[j] + 6) ; k++) 
+                { 
+			        size_t i = k % 5;
+
+			        if( req_in[i] == j ) 
+                    {
+			            r_alloc_out[j] = true;
+			            r_index_out[j] = i;
+                        break;
+                    }
+		        } // end loop on input ports
+		    } 
+            else                            // allocated: possible desallocation
+            {
+		        if ( flit_in[r_index_out[j]].eop and
+                     r_fifo_out[j].wok() and 
+                     put_in[r_index_out[j]] ) 
+                {
+			        r_alloc_out[j] = false;
+                }
+		    }
+		} // end loop on output ports
+
+        // loop on input ports :
+	    // fifo_in_read[i] computation (get data from fifo_in[i]
+        // (computed here because it depends on get_out[])
+	    for( size_t i = 0 ; i < 5 ; i++ ) 
+        {
+		    if ( r_fsm_in[i].read() != INFSM_IDLE ) 
+            {
+                fifo_in_read[i] = (get_out[r_index_in[i].read()] == i);
+            }
+            else
+            {
+                fifo_in_read[i] = false;
+            }
+	    }  // end loop on input ports
+
+        // loop on the output ports :
+        // The fifo_out_write[j] and fifo_out_wdata[j] computation
+        // implements the output port mux.
+	    for( size_t j = 0 ; j < 5 ; j++ ) 
+        {
+		    if( r_alloc_out[j] )  // output port allocated
+            {
+		        fifo_out_write[j] = put_in[r_index_out[j]];
+		        fifo_out_wdata[j]  = flit_in[r_index_out[j]];
+            }
+        }  // end loop on the output ports
+
+	    //  FIFOS update
+	    for(size_t i = 0 ; i < 5 ; i++) 
+        {
+		    r_fifo_in[i].update(fifo_in_read[i],
+                                fifo_in_write[i],
+                                fifo_in_wdata[i]);
+		    r_fifo_out[i].update(fifo_out_read[i],
+                                 fifo_out_write[i],
+                                 fifo_out_wdata[i]);
+	    }
+    } // end transition
+
+    ////////////////////////////////
+    //      genMoore
+    ////////////////////////////////
+    tmpl(void)::genMoore()
+    {
+        for(size_t i = 0 ; i < 5 ; i++) 
+        { 
+            // input ports : READ signals
+	        p_in[i].read = r_fifo_in[i].wok();
+      
+            // output ports : DATA & WRITE signals
+	        p_out[i].data  = r_fifo_out[i].read().data; 
+	        p_out[i].eop   = r_fifo_out[i].read().eop; 
+	        p_out[i].write = r_fifo_out[i].rok();
+        }
+    } // end genMoore
+
+}} // end namespace
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/sdmmc/caba/metadata/sdmmc.sd
===================================================================
--- /branches/fault_tolerance/modules/sdmmc/caba/metadata/sdmmc.sd	(revision 724)
+++ /branches/fault_tolerance/modules/sdmmc/caba/metadata/sdmmc.sd	(revision 724)
@@ -0,0 +1,33 @@
+
+# -*- python -*-
+
+Module('caba:sdmmc',
+	classname = 'soclib::caba::SdMMC',
+
+        header_files = [
+            '../source/include/sdmmc.h', 
+        ],
+
+        implementation_files = [
+            '../source/src/sdmmc.cpp',
+        ],
+
+        ports = [
+		    Port('caba:bit_in', 'p_spi_clk'),
+		    Port('caba:bit_in', 'p_spi_ss'),
+		    Port('caba:bit_in', 'p_spi_mosi'),
+		    Port('caba:bit_out', 'p_spi_miso'),
+		    Port('caba:bit_in',   'p_resetn', auto = 'resetn'),
+		    Port('caba:clock_in', 'p_clk', auto = 'clock'), 
+		],
+
+        uses = [
+		    Uses('caba:base_module'),
+		],
+
+        instance_parameters = [
+        	parameter.String('filename'),
+		parameter.Int('latency'),
+        ],
+
+)
Index: /branches/fault_tolerance/modules/sdmmc/caba/source/include/sdmmc.h
===================================================================
--- /branches/fault_tolerance/modules/sdmmc/caba/source/include/sdmmc.h	(revision 724)
+++ /branches/fault_tolerance/modules/sdmmc/caba/source/include/sdmmc.h	(revision 724)
@@ -0,0 +1,138 @@
+
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         manuel.bouyer@lip6.fr october 2013
+ *
+ * Maintainers: bouyer
+ */
+
+//////////////////////////////////////////////////////////////////////////////////////
+// This component is a SD/MMC block device.
+//
+// This component can perform data transfers between one single file belonging 
+// to the host system and a SPI controller.
+// The file name is an argument of the constructor.
+//
+
+#ifndef SOCLIB_SDMMC_H
+#define SOCLIB_SDMMC_H
+
+#include <stdint.h>
+#include <systemc>
+#include <unistd.h>
+#include "caba_base_module.h"
+
+namespace soclib {
+namespace caba {
+
+using namespace sc_core;
+
+class SdMMC
+	: public caba::BaseModule
+{
+private:
+
+    // Registers
+    int               spi_fsm;   	 // SPI state register
+    int		      spi_shiftreg;	// data shift in/out
+    int		      spi_bitcount;
+    int		      spi_clk;
+    int		      spi_mosi_previous; // sampled MOSI value
+
+    uint8_t	      command;
+    uint32_t	      args;
+    uint8_t	      cmdcrc;
+    int               m_fd;           	 // File descriptor
+    uint64_t          m_device_size;  	 // Total number of blocks
+    const uint32_t    m_latency;      	 // device latency
+
+    uint8_t	      m_databuf[1 /* reponse */ + 1 /* data tocken */ + 512 /* data block */ + 2 /* CRC */ ];
+    uint32_t	      m_datalen_snd; // data size to be sent to host
+    uint32_t          m_datalen_rcv; // data size expected from host
+    uint32_t	      m_data_idx;
+    bool	      m_acmd; // next command will be acmd
+    int		      m_sdstate; // sdcard internal state
+
+    // sd states
+    enum {
+	SD_IDLE = 0,
+	SD_READY = 1,
+    };
+
+    // methods
+    void genMealy();
+
+    void handle_sdmmc_cmd(uint8_t, uint32_t);
+    void handle_sdmmc_write(uint8_t, uint32_t);
+
+    //  Master FSM states
+    enum {
+    S_IDLE               = 0,
+    S_RECEIVE_CMD        = 1,
+    S_RECEIVE_ARGS_START = 2,
+    S_RECEIVE_ARGS       = 3,
+    S_RECEIVE_CRC        = 4,
+    S_RECEIVE_DATA_WAIT  = 5,
+    S_RECEIVE_DATA       = 6,
+    S_SEND_DATA      	 = 7,
+    };
+
+protected:
+
+    SC_HAS_PROCESS(SdMMC);
+
+public:
+
+    // ports
+    sc_in<bool> 					      p_clk;
+    sc_in<bool> 					      p_resetn;
+    sc_in<bool> 					      p_spi_ss;
+    sc_in<bool> 					      p_spi_clk;
+    sc_in<bool> 					      p_spi_mosi;
+    sc_out<bool> 					      p_spi_miso;
+
+    void print_trace();
+
+    // Constructor   
+    SdMMC(
+	sc_module_name                      name,
+        const std::string                   &filename,
+        const uint32_t	                    latency = 0);
+
+    ~SdMMC();
+
+};
+
+}}
+
+#endif /* SOCLIB_SDMMC_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/sdmmc/caba/source/src/sdmmc.cpp
===================================================================
--- /branches/fault_tolerance/modules/sdmmc/caba/source/src/sdmmc.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/sdmmc/caba/source/src/sdmmc.cpp	(revision 724)
@@ -0,0 +1,549 @@
+/*
+ -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         manuel.bouyer@lip6.fr october 2013
+ *
+ * Maintainers: bouyer
+ */
+
+#include <stdint.h>
+#include <errno.h>
+#include <cstring>
+#include <iostream>
+#include <fcntl.h>
+#include <cassert>
+#include "sdmmc.h"
+
+namespace soclib { namespace caba {
+
+using namespace soclib::caba;
+
+////////////////////////
+void SdMMC::genMealy()
+{
+    if(p_resetn.read() == false) 
+    {
+        spi_fsm  = S_IDLE;
+	m_acmd	   = false;	 
+	m_sdstate  = SD_IDLE;
+        return;
+    } 
+    if (p_spi_ss.read()) {
+	if (spi_fsm != S_IDLE) {
+		std::cerr << name() << " deselect but not idle, state "
+		<< std::dec << spi_fsm << " last cmd " << (int)command
+		<< " args " << std::hex << args << std::dec
+		<< " bitcount " << (int)spi_bitcount
+		<< " idx " << m_data_idx << " len_snd " << m_datalen_snd
+		<< " len_rcv " << m_datalen_rcv << std::endl;
+	}
+	spi_fsm  = S_IDLE;
+	spi_clk = p_spi_clk;
+	spi_mosi_previous = p_spi_mosi;
+	return;
+    }
+
+    switch(spi_fsm) {
+    case S_IDLE:
+	if (p_spi_clk.read() == 1 && spi_clk == 0) {
+		// rising edge
+		command = (command << 1) | spi_mosi_previous;
+		spi_bitcount = 6;
+		spi_fsm = S_RECEIVE_CMD;
+	}
+        break;
+    case S_RECEIVE_CMD:
+	if (p_spi_clk.read() == 1 && spi_clk == 0) {
+		// rising edge
+		command = (command << 1) | spi_mosi_previous;
+		if (spi_bitcount == 0) {
+			if ((command & 0x80) == 0) {
+				spi_fsm = S_RECEIVE_ARGS_START;
+			} else {
+#ifdef SOCLIB_MODULE_DEBUG0
+				std::cout << name() << " S_RECEIVE_CMD " << std::hex << (int)command << std::endl;
+#endif
+				spi_fsm = S_IDLE;
+			}
+		} else {
+		    spi_bitcount = spi_bitcount - 1;
+		}
+	}
+	break;
+    case S_RECEIVE_ARGS_START:
+	if (p_spi_clk.read() == 1 && spi_clk == 0) {
+		// rising edge
+		args = (args << 1) | spi_mosi_previous;
+		spi_bitcount = 30;
+		spi_fsm = S_RECEIVE_ARGS;
+	}
+        break;
+    case S_RECEIVE_ARGS:
+	if (p_spi_clk.read() == 1 && spi_clk == 0) {
+		// rising edge
+		args = (args << 1) | spi_mosi_previous;
+		if (spi_bitcount == 0) {
+			spi_bitcount = 7;
+			spi_fsm = S_RECEIVE_CRC;
+		} else {
+		    spi_bitcount = spi_bitcount - 1;
+		}
+	}
+        break;
+    case S_RECEIVE_CRC:
+	if (p_spi_clk.read() == 1 && spi_clk == 0) {
+		// rising edge
+		cmdcrc = (cmdcrc << 1) | spi_mosi_previous;
+		if (spi_bitcount == 0) {
+			handle_sdmmc_cmd(command, args);
+			spi_bitcount = 0; // SEND_DATA will reset it
+			spi_fsm = S_SEND_DATA;
+			m_data_idx = 0;
+		} else {
+			spi_bitcount = spi_bitcount - 1;
+		}
+	}
+	break;
+	
+    case S_SEND_DATA:
+	if (p_spi_clk.read() == 0 && spi_clk == 1) {
+		// falling edge
+		if (spi_bitcount == 0) {
+			if (m_data_idx != m_datalen_snd) {	
+				spi_shiftreg = m_databuf[m_data_idx];
+				spi_bitcount = 7;
+				spi_fsm = S_SEND_DATA;
+				m_data_idx++;
+#ifdef SOCLIB_MODULE_DEBUG0
+		        std::cout << name() << " S_SEND_DATA " << std::dec << m_datalen_snd << " idx " << m_data_idx << " " << std::hex << (uint32_t)m_databuf[m_data_idx] << std::endl;
+#endif
+			} else if (m_datalen_rcv != 0) {
+				spi_fsm = S_RECEIVE_DATA_WAIT;
+				spi_bitcount = 7;
+				m_data_idx = 0;
+			} else {
+				spi_fsm = S_IDLE;
+			}
+		} else {
+			spi_bitcount = spi_bitcount - 1;
+			spi_shiftreg = spi_shiftreg << 1;
+		}
+	}
+	break;
+    case S_RECEIVE_DATA_WAIT:
+	if (p_spi_clk.read() == 1 && spi_clk == 0) {
+	    // rising edge
+	    uint8_t s_data;
+	    s_data = (m_databuf[0] << 1) | spi_mosi_previous;
+	    m_databuf[0] = s_data;
+	    if (spi_bitcount == 0) {
+#ifdef SOCLIB_MODULE_DEBUG
+	std::cout << name() << " S_RECEIVE_DATA_WAIT " << std::dec << (int)s_data << std::endl;
+#endif
+		    spi_bitcount = 7;
+		    if (s_data == 0xfe) { // data start token
+			spi_fsm = S_RECEIVE_DATA;
+			m_data_idx = 1;
+		    } else {
+#ifdef SOCLIB_MODULE_DEBUG
+			std::cout << name() << " S_RECEIVE_DATA_WAIT " << std::hex << (int)s_data << std::endl;
+#endif
+			spi_fsm = S_RECEIVE_DATA_WAIT;
+		}
+	    } else {
+	        spi_bitcount = spi_bitcount - 1;
+	    }
+	}
+	break;
+	case S_RECEIVE_DATA:
+	    if (p_spi_clk.read() == 1 && spi_clk == 0) {
+		// rising edge
+		m_databuf[m_data_idx] = (m_databuf[m_data_idx] << 1) | spi_mosi_previous;
+		if (spi_bitcount == 0) {
+		    m_data_idx++;
+		    if (m_data_idx != m_datalen_rcv) {
+		    	spi_fsm = S_RECEIVE_DATA;
+		    	spi_bitcount = 7;
+		    } else {
+		        handle_sdmmc_write(command, args);
+		        if (m_datalen_snd > 0) {
+		            spi_bitcount = 0; // SEND_DATA will reset it
+		            spi_fsm = S_SEND_DATA;
+		            m_data_idx = 0;
+		        } else {
+		            spi_fsm = S_IDLE;
+		        }
+		    }
+		} else {
+			spi_bitcount = spi_bitcount - 1;
+		}
+	    }
+	    break;
+    }
+
+//// now genrate output signal
+
+    switch(spi_fsm) {
+    case S_IDLE:
+	p_spi_miso = !p_spi_ss.read();
+        break;
+    case S_SEND_DATA:
+	p_spi_miso = (spi_shiftreg & 0x80) != 0;
+	break;
+    default:
+	p_spi_miso = !p_spi_ss.read();
+        break;
+    }
+    spi_clk = p_spi_clk.read();
+    spi_mosi_previous = p_spi_mosi;
+} // end GenMealy()
+
+
+//////////////////////
+void SdMMC::handle_sdmmc_cmd(uint8_t cmd, uint32_t data)
+{
+	m_datalen_rcv = 0;
+	m_databuf[0] = 0x04; // illegal command
+	m_datalen_snd = 1;
+
+	if (m_sdstate == SD_IDLE)
+		m_databuf[0] |= 0x01; // idle
+
+	if ((cmd & 0x40) == 0) {
+		//illegal command
+		return;
+	}
+	cmd &= 0x3f;
+	if (m_acmd) {
+#ifdef SOCLIB_MODULE_DEBUG0
+	std::cout << name() << " new acmd " << std::dec << (int)cmd << " args " << std::hex << data << " crc " << (int)cmdcrc << std::endl;
+#endif
+	    m_acmd = false;
+	    switch (cmd) {
+	    case 41:
+		m_databuf[0] = 0x0; // card ready
+		m_datalen_snd = 1;
+		m_sdstate = SD_READY;
+		break;
+	    case 51:
+		// send SCR
+		m_databuf[ 0] = (m_sdstate == SD_IDLE) ? 0x1 : 0x0; // R1
+		m_databuf[ 1] = 0xfe; // data token
+		m_databuf[ 2] = 0x00; // SCR_STRUCTURE / SD_SPEC
+		m_databuf[ 3] = 0x05; // DATA_STAT_AFTER_ERASE, SD_SECURITY, SD_BUS_WIDTHS
+		m_databuf[ 4] = 0;    // SD_SPEC3, EX_SECURITY, SD_SPEC4
+		m_databuf[ 5] = 0;    // CMD_SUPPORT
+		m_databuf[ 6] = 0;    // vendor specific
+		m_databuf[ 7] = 0;    // vendor specific
+		m_databuf[ 8] = 0;    // vendor specific
+		m_databuf[ 9] = 0;    // vendor specific
+		m_databuf[10] = 0x0;  // CRC16
+		m_databuf[11] = 0x0;  // CRC16
+		m_datalen_snd = 12;
+		break;
+	    default:
+		std::cout << name() << " unknown acmd " << std::dec
+		    << (int)cmd << std::endl;
+		break; // return illegal command
+	    }
+	} else {
+#ifdef SOCLIB_MODULE_DEBUG0
+	std::cout << name() << " new cmd " << std::dec << (int)cmd << " args " << std::hex << data << " crc " << (int)cmdcrc << std::endl;
+#endif
+	    switch (cmd) {
+	    case 0:
+		m_databuf[0] = 0x1;
+		m_datalen_snd = 1;
+		m_sdstate = SD_IDLE;
+		break;
+	    case 8:
+		// reply with illegal command for now
+		break;
+	    case 9:
+	      {
+		// send CSD
+		// we use a block len of 1024
+		uint32_t csize = ((m_device_size + (512 * 1024) - 1) / (512 * 1024)) - 1;
+		m_databuf[ 0]  = (m_sdstate == SD_IDLE) ? 0x1 : 0x0; // R1
+		m_databuf[ 1]  = 0xfe; // data token
+		m_databuf[ 2]  = 0x00; // CSD_STRUCTURE
+		m_databuf[ 3]  = 0xe;  // TAAC
+		m_databuf[ 4]  = 0;    // NSAC
+		m_databuf[ 5]  = 0x32; // TRAN_SPEED
+		m_databuf[ 6]  = 0x5b; // CCC_H
+		m_databuf[ 7]  = 0x5a; // CCC_L + READ_BL_LEN
+		m_databuf[ 8]  = 0x80; // READ_BL_PARTIAL, R/W_BLK_MISALIGN, DSR_IMP
+		m_databuf[ 8] |= (csize >> 10) & 0x03; // CSIZE[12-11]
+		m_databuf[ 9]  = (csize >>  2) & 0xff; // CSIZE[10-2]
+		m_databuf[10]  = (csize <<  6) & 0xc0; // CSIZE[1-0]
+		m_databuf[10] |= 0;    // R_CURR_MIN, R_CURR_MAX
+		m_databuf[11]  = 0x3;  // W_CURR_MIN, W_CURR_MAX, CSIZE_MULT[2-1];
+		m_databuf[12]  = 0xff; // CSIZE_MULT[1], ERASE_BLK_EN, ERASE_SECTOR_SIZE[6-1]
+		m_databuf[13]  = 0x80; // ERASE_SECTOR_SIZE[0]. WP_GRP_SIZE
+		m_databuf[14]  = 0x0a; // WP_GRP_ENABLE, R2W_FACTOR, WRITE_BL_LEN[2-3]
+		m_databuf[15]  = 0x40; // WRITE_BL_LEN[0-1], WR_BL_PARTIAL
+		m_databuf[16]  = 0;    // FILE_FORMAT
+		m_databuf[17]  = 0x1;  // CRC7
+		m_databuf[18]  = 0x0;  // CRC16
+		m_databuf[19]  = 0x0;  // CRC16
+		m_datalen_snd  = 20;
+		break;
+	      }
+	    case 10:
+		// send CID
+		m_databuf[ 0] = (m_sdstate == SD_IDLE) ? 0x1 : 0x0; // R1
+		m_databuf[ 1] = 0xfe; // data token
+		m_databuf[ 2] = 0xda; // MID
+		m_databuf[ 3] = 'P';  // OID
+		m_databuf[ 4] = '6';  // OID
+		m_databuf[ 5] = 's';  // PNM
+		m_databuf[ 6] = 'o';  // PNM
+		m_databuf[ 7] = 'c';  // PNM
+		m_databuf[ 8] = 's';  // PNM
+		m_databuf[ 9] = 'd';  // PNM
+		m_databuf[10] = 0x01; // PRV
+		m_databuf[11] = 0xde; // PSN
+		m_databuf[12] = 0xad; // PSN
+		m_databuf[13] = 0xbe; // PSN
+		m_databuf[14] = 0xef; // PSN
+		m_databuf[15] = 10;   // MDT
+		m_databuf[16] = 13;   // MDT
+		m_databuf[17] = 0x1;  // CRC7
+		m_databuf[18] = 0x0;  // CRC16
+		m_databuf[19] = 0x0;  // CRC16
+		m_datalen_snd = 20;
+		break;
+	    case 16:
+		// set block size
+		if (m_sdstate != SD_IDLE && data == 512) {
+			m_databuf[0] = 0x00;
+			m_datalen_snd = 1;
+		} // else illegal command
+		break;
+	    case 17:
+	      {
+		int ret;
+		// read data block
+		if (m_sdstate == SD_IDLE) {
+			// return illegal command
+			return;
+		}
+		if (data >= m_device_size) {
+			std::cerr << name() << " read: request " << data
+			    << " past end of file " << m_device_size << std::endl;
+			m_databuf[0] = 0x00; // R1 OK
+			m_databuf[1] = 0x08; // error tocken "out of range"
+			m_datalen_snd = 2;
+			return;
+		}
+		do {
+			if (lseek(m_fd, data, SEEK_SET) < 0) {
+				std::cerr << name() << " lseek: " <<
+				  strerror(errno) << std::endl;
+				m_databuf[0] = 0x00; // R1 OK
+				m_databuf[1] = 0x02; // error tocken "CC err"
+				m_datalen_snd = 2;
+				return;
+			}
+			ret = read(m_fd, &m_databuf[2], 512);
+		} while (ret < 0 && errno == EINTR);
+		if (ret < 0) {
+			std::cerr << name() << " read: " <<
+			  strerror(errno) << std::endl;
+			m_databuf[0] = 0x00; // R1 OK
+			m_databuf[1] = 0x04; // error tocken "card ECC failed"
+			m_datalen_snd = 2;
+			return;
+		}
+		m_databuf[514] = m_databuf[515] = 0; // XXX CRC
+		m_databuf[0] = 0x0; // R1
+		m_databuf[1] = 0xfe; // start block tocken
+		m_datalen_snd = 516;
+		break;
+	      }
+	    case 24:
+	      {
+		// write data block
+		if (m_sdstate == SD_IDLE) {
+			// return illegal command
+			return;
+		}
+#ifdef SOCLIB_MODULE_DEBUG
+	std::cout << name() << " new cmd write " << std::dec << (int)cmd << " args " << std::hex << data << std::endl;
+#endif
+		m_databuf[0] = 0x0; // R1
+		m_datalen_snd = 1;
+		m_datalen_rcv = 512 + 2 + 1; // data + tocken + CRC
+		break;
+	      }
+	    case 55:
+		// app-specific command follow
+		m_acmd = true;
+		m_databuf[0] = (m_sdstate == SD_IDLE) ? 0x1 : 0x0;
+		m_datalen_snd = 1;
+		break;
+	    case 58:
+		// send OCR
+		m_databuf[4] = (m_sdstate == SD_IDLE) ? 0x1 : 0x0; // R1
+		m_databuf[3] = 0x80; // power up complete, SDSC
+		m_databuf[2] = 0xff; // all voltages supported
+		m_databuf[1] = 0x00; 
+		m_databuf[0] = 0x00; 
+		m_datalen_snd = 5;
+		break;
+	    default:
+		std::cout << name() << " unknown cmd " << std::dec
+		    << (int)cmd << std::endl;
+		break; // return illegal command
+	    }
+	}
+}
+
+void SdMMC::handle_sdmmc_write(uint8_t cmd, uint32_t data)
+{
+	m_datalen_rcv = 0;
+	cmd &= 0x3f;
+#ifdef SOCLIB_MODULE_DEBUG
+	std::cout << name() << " cmd write " << std::dec << (int)cmd << " args " << std::hex << data << std::endl;
+#endif
+	switch(cmd) {
+	    case 24:
+	      {
+		int ret;
+		// write data block
+		assert(m_sdstate != SD_IDLE && "can't write in idle state");
+		if (data >= m_device_size) {
+			std::cerr << name() << " write: request " << data
+			    << " past end of file " << m_device_size << std::endl;
+			m_databuf[0] = 0xd; // write error
+			m_datalen_snd = 1;
+			return;
+		}
+		do {
+			if (lseek(m_fd, data, SEEK_SET) < 0) {
+				std::cerr << name() << " lseek: " <<
+				  strerror(errno) << std::endl;
+				m_databuf[0] = 0xd; // write error
+				m_datalen_snd = 1;
+				return;
+			}
+			ret = write(m_fd, &m_databuf[1], 512);
+		} while (ret < 0 && errno == EINTR);
+		if (ret < 0) {
+			std::cerr << name() << " write: " <<
+			  strerror(errno) << std::endl;
+			m_databuf[0] = 0xd; // write error
+			m_datalen_snd = 1;
+			return;
+		}
+		m_databuf[0] = 0x5; // write complete
+		m_databuf[1] = 0x0; // busy
+		m_datalen_snd = 2;
+		break;
+	      }
+	    default:
+		std::cerr << name() << " unkown write cmd " << std::dec <<
+		    (int)cmd << std::endl;
+		m_databuf[0] = 0xd; // write error;
+		m_datalen_snd = 1;
+	}
+	return;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+SdMMC::SdMMC( sc_core::sc_module_name              name, 
+                                const std::string                    &filename,
+                                const uint32_t                       latency)
+
+: caba::BaseModule(name),
+	m_latency(latency),
+	p_clk("p_clk"),
+	p_resetn("p_resetn"),
+	p_spi_ss("p_spi_ss"),
+	p_spi_clk("p_spi_clk"),
+	p_spi_mosi("p_spi_mosi"),
+	p_spi_miso("p_spi_miso")
+{
+    std::cout << "  - Building SdMMC " << name << std::endl;
+
+    SC_METHOD(genMealy);
+    dont_initialize();
+    sensitive << p_clk.neg();
+    sensitive << p_resetn;
+    sensitive << p_spi_ss;
+    sensitive << p_spi_clk;
+
+    m_fd = ::open(filename.c_str(), O_RDWR);
+    if ( m_fd < 0 ) 
+    {
+	    std::cout << "Error in component SdMMC : " << name 
+	              << " Unable to open file " << filename << std::endl;
+	    exit(1);
+    }
+    m_device_size = lseek(m_fd, 0, SEEK_END);
+
+} // end constructor
+
+SdMMC::~SdMMC()
+{
+}
+
+
+//////////////////////////
+void SdMMC::print_trace()
+{
+	const char* spi_str[] = 
+    {
+		"S_IDLE",
+                "S_RECEIVE_CMD",
+                "S_RECEIVE_ARGS_START",
+                "S_RECEIVE_ARGS",
+                "S_RECEIVE_CRC",
+                "S_RECEIVE_DATA_START",
+                "S_RECEIVE_DATA",
+                "S_SEND_DATA",
+                "S_NOP",
+	};
+	if (spi_clk != p_spi_clk.read()) {
+	std::cout << name() << " SPI_FSM : " << spi_str[spi_fsm] 
+	    << std::dec
+	    << " clk " << spi_clk << "->" << p_spi_clk << " ss " << p_spi_ss
+	    << " mosi " << p_spi_mosi << " miso " << p_spi_miso
+	    << std::endl;
+	std::cout << "         spi_shiftreg: " << std::hex << (int)spi_shiftreg
+	    << " spi_bitcount: " << (int)spi_bitcount
+	    << std::endl;
+        }
+}
+}} // end namespace
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_block_device_tsar/caba/metadata/vci_block_device_tsar.sd
===================================================================
--- /branches/fault_tolerance/modules/vci_block_device_tsar/caba/metadata/vci_block_device_tsar.sd	(revision 724)
+++ /branches/fault_tolerance/modules/vci_block_device_tsar/caba/metadata/vci_block_device_tsar.sd	(revision 724)
@@ -0,0 +1,51 @@
+
+# -*- python -*-
+
+Module('caba:vci_block_device_tsar',
+	   classname = 'soclib::caba::VciBlockDeviceTsar',
+
+        tmpl_parameters = [ 
+           parameter.Module('vci_param',  default = 'caba:vci_param'), 
+        ],
+
+        header_files = [
+            '../source/include/vci_block_device_tsar.h', 
+        ],
+
+        interface_files = [
+            '../../include/soclib/block_device_tsar.h', 
+        ],
+
+        implementation_files = [
+            '../source/src/vci_block_device_tsar.cpp',
+        ],
+
+        ports = [
+		    Port('caba:vci_target', 'p_vci_target'),
+		    Port('caba:vci_initiator', 'p_vci_initiator'),
+		    Port('caba:bit_out', 'p_irq'),
+		    Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+		    Port('caba:clock_in', 'p_clk', auto = 'clock'), 
+		],
+
+        uses = [
+		    Uses('caba:base_module'),
+            Uses('common:mapping_table'),
+		],
+
+        instance_parameters = [
+        	parameter.Module('mt', typename = 'common:mapping_table', auto = 'env:mapping_table'),
+        	parameter.IntTab('srcid'),
+        	parameter.IntTab('tgtid'),
+        	parameter.String('filename'),
+		    parameter.Int('block_size', default=512),
+		    parameter.Int('burst_size', default=64),
+		    parameter.Int('latency',    default=0),
+        ],
+
+	    extensions = [
+		    'dsx:addressable=tgtid',
+		    'dsx:max_segments=1',
+		    'dsx:get_ident=tgtid:p_vci_target:mt,srcid:p_vci_initiator:mt',
+		],
+)
Index: /branches/fault_tolerance/modules/vci_block_device_tsar/caba/source/include/vci_block_device_tsar.h
===================================================================
--- /branches/fault_tolerance/modules/vci_block_device_tsar/caba/source/include/vci_block_device_tsar.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_block_device_tsar/caba/source/include/vci_block_device_tsar.h	(revision 724)
@@ -0,0 +1,251 @@
+
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         alain.greiner@lip6.fr april 2011
+ *
+ * Maintainers: alain
+ */
+
+//////////////////////////////////////////////////////////////////////////////////////
+// This component is a simplified disk controller with a VCI interface.
+// It supports only 32 or 64 bits VCI DATA width, but all addressable registers
+// contain 32 bits words. It supports VCI addresss lartger than 32 bits.
+//
+// This component can perform data transfers between one single file belonging 
+// to the host system and a buffer in the memory of the virtual prototype.
+// The file name is an argument of the constructor.
+// This component has a DMA capability, and is both a target and an initiator.
+// The block size (bytes), and the burst size (bytes) must be power of 2.
+// The burst size is typically a cache line. 
+// The memory buffer is not constrained to be aligned on a burst boundary,
+// but must be aligned on a 32 bits word boundary. 
+// Both read and write transfers are supported. An IRQ is optionally
+// asserted when the transfer is completed. 
+//
+// As a target this block device controler contains 9 32 bits memory mapped registers,
+// taking 36 bytes in the address space.
+// - BLOCK_DEVICE_BUFFER        0x00 (read/write)  Memory buffer base address (LSB bits)
+// - BLOCK_DEVICE_COUNT         0x04 (read/write)  Number of blocks to be transfered.
+// - BLOCK_DEVICE_LBA           0x08 (read/write)  Index of first block in the file.
+// - BLOCK_DEVICE_OP            0x0C (write-only)  Writing here starts the operation.
+// - BLOCK_DEVICE_STATUS        0x10 (read-only)   Block Device status.
+// - BLOCK_DEVICE_IRQ_ENABLE    0x14 (read/write)  IRQ enabled if non zero.
+// - BLOCK_DEVICE_SIZE          0x18 (read-only)   Number of addressable blocks.
+// - BLOCK_DEVICE_BLOCK_SIZE    0x1C (read_only)   Block size in bytes.
+// - BLOCK_DEVICE_BUFFER_EXT    0x20 (read_only)   Memory buffer base address (MSB bits)
+//
+// The following operations codes are supported: 
+// - BLOCK_DEVICE_NOOP          No operation
+// - BLOCK_DEVICE_READ          From block device to memory
+// - BLOCK_DEVICE_WRITE         From memory to block device 
+//
+// The BLOCK_DEVICE_STATUS is actually defined by the initiator FSM state.
+// The following values are defined for device status:
+// -BLOCK_DEVICE_IDLE           0
+// -BLOCK_DEVICE_BUSY           1
+// -BLOCK_DEVICE_READ_SUCCESS   2
+// -BLOCK_DEVICE_WRITE_SUCCESS  3
+// -BLOCK_DEVICE_READ_ERROR     4
+// -BLOCK_DEVICE_WRITE_ERROR    5
+//
+// In the 4 states READ_ERROR, READ_SUCCESS, WRITE_ERROR, WRITE_SUCCESS,
+// the IRQ is asserted (if it is enabled).
+// A read access to the BLOCK_DEVICE_STATUS in these 4 states reset 
+// the initiator FSM state to IDLE, and acknowledge the IRQ.
+// Any write access to registers BUFFER, COUNT, LBA, OP is ignored
+// if the device is not IDLE.
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef SOCLIB_VCI_BLOCK_DEVICE_TSAR_H
+#define SOCLIB_VCI_BLOCK_DEVICE_TSAR_H
+
+#include <stdint.h>
+#include <systemc>
+#include <unistd.h>
+#include "caba_base_module.h"
+#include "mapping_table.h"
+#include "vci_initiator.h"
+#include "vci_target.h"
+
+namespace soclib {
+namespace caba {
+
+using namespace sc_core;
+
+template<typename vci_param>
+class VciBlockDeviceTsar
+	: public caba::BaseModule
+{
+private:
+
+    // Registers
+    sc_signal<int>            	       r_target_fsm;   	   // target fsm state register
+    sc_signal<int>                     r_initiator_fsm;    // initiator fsm state register
+    sc_signal<bool>                    r_irq_enable;   	   // default value is true
+    sc_signal<uint32_t>                r_nblocks;      	   // number of blocks in transfer
+    sc_signal<uint64_t>                r_buf_address;  	   // memory buffer address 
+    sc_signal<uint32_t>                r_lba;          	   // first block index
+    sc_signal<bool>                    r_read;         	   // requested operation
+    sc_signal<uint32_t>                r_index;        	   // word index in local buffer
+    sc_signal<uint32_t>                r_latency_count;    // latency counter 
+    sc_signal<uint32_t>                r_words_count;      // word counter (in a burst)
+    sc_signal<uint32_t>                r_burst_count;      // burst counter (in a block)
+    sc_signal<uint32_t>                r_block_count;  	   // block counter (in a transfer)
+    sc_signal<uint32_t>                r_burst_offset;     // number of non aligned words
+    sc_signal<uint32_t>                r_burst_nwords;     // number of words in a burst
+    sc_signal<bool>                    r_go;           	   // command from T_FSM to M_FSM
+
+    sc_signal<typename vci_param::srcid_t >	r_srcid;   // save srcid
+    sc_signal<typename vci_param::trdid_t >	r_trdid;   // save trdid
+    sc_signal<typename vci_param::pktid_t >	r_pktid;   // save pktid
+    sc_signal<typename vci_param::data_t >	r_tdata;   // save wdata
+
+    uint32_t*                          r_local_buffer; 	   // capacity is one block 
+
+    // structural parameters
+    std::list<soclib::common::Segment> m_seglist;
+    uint32_t                           m_srcid;        	   // initiator index
+    int                                m_fd;           	   // File descriptor
+    uint64_t                           m_device_size;  	   // Total number of blocks
+    const uint32_t                     m_words_per_block;  // number of words in a block
+    const uint32_t                     m_words_per_burst;  // number of words in a burst
+    const uint32_t                     m_bursts_per_block; // number of bursts in a block
+    const uint32_t                     m_latency;      	   // device latency
+
+    // methods
+    void transition();
+    void genMoore();
+
+    //  Master FSM states
+    enum {
+    M_IDLE              = 0,
+
+    M_READ_BLOCK        = 1,
+    M_READ_BURST        = 2,
+    M_READ_CMD          = 3,
+    M_READ_RSP          = 4,
+    M_READ_SUCCESS      = 5,
+    M_READ_ERROR        = 6,
+
+    M_WRITE_BURST       = 7,
+    M_WRITE_CMD         = 8,
+    M_WRITE_RSP         = 9,
+    M_WRITE_BLOCK       = 10,
+    M_WRITE_SUCCESS     = 11,
+    M_WRITE_ERROR       = 12,
+    };
+
+    // Target FSM states
+    enum {
+    T_IDLE              = 0,
+    T_WRITE_BUFFER      = 1,
+    T_READ_BUFFER       = 2,
+    T_WRITE_BUFFER_EXT  = 3,
+    T_READ_BUFFER_EXT   = 4,
+    T_WRITE_COUNT       = 5,
+    T_READ_COUNT        = 6,
+    T_WRITE_LBA         = 7,
+    T_READ_LBA          = 8,
+    T_WRITE_OP          = 9,
+    T_READ_STATUS       = 10,
+    T_WRITE_IRQEN       = 11,
+    T_READ_IRQEN        = 12,
+    T_READ_SIZE         = 13,
+    T_READ_BLOCK        = 14,
+    T_READ_ERROR        = 15,
+    T_WRITE_ERROR       = 16,
+    };
+
+    // Error codes values
+    enum {
+    VCI_READ_OK		= 0,
+    VCI_READ_ERROR	= 1,
+    VCI_WRITE_OK	= 2,
+    VCI_WRITE_ERROR	= 3,
+    };
+
+    /* transaction type, pktid field */
+    enum transaction_type_e
+    {
+      // b3 unused
+      // b2 READ / NOT READ
+      // Si READ
+      //  b1 DATA / INS
+      //  b0 UNC / MISS
+      // Si NOT READ
+      //  b1 accÃšs table llsc type SW / other
+      //  b2 WRITE/CAS/LL/SC
+      TYPE_READ_DATA_UNC          = 0x0,
+      TYPE_READ_DATA_MISS         = 0x1,
+      TYPE_READ_INS_UNC           = 0x2,
+      TYPE_READ_INS_MISS          = 0x3,
+      TYPE_WRITE                  = 0x4,
+      TYPE_CAS                    = 0x5,
+      TYPE_LL                     = 0x6,
+      TYPE_SC                     = 0x7
+    };
+
+protected:
+
+    SC_HAS_PROCESS(VciBlockDeviceTsar);
+
+public:
+
+    // ports
+    sc_in<bool> 					      p_clk;
+    sc_in<bool> 					      p_resetn;
+    soclib::caba::VciInitiator<vci_param> p_vci_initiator;
+    soclib::caba::VciTarget<vci_param>    p_vci_target;
+    sc_out<bool> 					      p_irq;
+
+    void print_trace();
+
+    // Constructor   
+    VciBlockDeviceTsar(
+		sc_module_name                      name,
+		const soclib::common::MappingTable 	&mt,
+		const soclib::common::IntTab 		&srcid,
+		const soclib::common::IntTab 		&tgtid,
+        const std::string                   &filename,
+        const uint32_t 	                    block_size = 512,
+        const uint32_t 	                    burst_size = 64,
+        const uint32_t	                    latency = 0);
+
+    ~VciBlockDeviceTsar();
+
+};
+
+}}
+
+#endif /* SOCLIB_VCI_BLOCK_DEVICE_TSAR_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_block_device_tsar/caba/source/src/vci_block_device_tsar.cpp
===================================================================
--- /branches/fault_tolerance/modules/vci_block_device_tsar/caba/source/src/vci_block_device_tsar.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/vci_block_device_tsar/caba/source/src/vci_block_device_tsar.cpp	(revision 724)
@@ -0,0 +1,917 @@
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         alain.greiner@lip6.fr april 2011
+ *
+ * Maintainers: alain
+ */
+
+#include <stdint.h>
+#include <iostream>
+#include <fcntl.h>
+#include "vci_block_device_tsar.h"
+#include "block_device_tsar.h"
+
+#define DEBUG_BDEV   0
+
+namespace soclib { namespace caba {
+
+#define tmpl(t) template<typename vci_param> t VciBlockDeviceTsar<vci_param>
+
+using namespace soclib::caba;
+using namespace soclib::common;
+
+////////////////////////
+tmpl(void)::transition()
+{
+    if(p_resetn.read() == false) 
+    {
+        r_initiator_fsm   = M_IDLE;
+        r_target_fsm      = T_IDLE;
+        r_irq_enable      = true;
+        r_go              = false;
+        return;
+    } 
+
+    //////////////////////////////////////////////////////////////////////////////
+    // The Target FSM controls the following registers:
+    // r_target_fsm, r_irq_enable, r_nblocks, r_buf adress, r_lba, r_go, r_read
+    //////////////////////////////////////////////////////////////////////////////
+
+    switch(r_target_fsm) {
+    ////////////
+    case T_IDLE:
+    {
+        if ( p_vci_target.cmdval.read() ) 
+        { 
+            r_srcid = p_vci_target.srcid.read();
+            r_trdid = p_vci_target.trdid.read();
+            r_pktid = p_vci_target.pktid.read();
+            sc_dt::sc_uint<vci_param::N> address = p_vci_target.address.read();
+
+            bool found = false;
+            std::list<soclib::common::Segment>::iterator seg;
+            for ( seg = m_seglist.begin() ; seg != m_seglist.end() ; seg++ ) 
+            {
+                if ( seg->contains(address) ) found = true;
+            }
+ 
+            bool                  read    = (p_vci_target.cmd.read() == vci_param::CMD_READ);
+            uint32_t              cell    = (uint32_t)((address & 0x3F)>>2);
+
+            if     ( !read && not found )                         r_target_fsm = T_WRITE_ERROR;
+            else if(  read && not found )                         r_target_fsm = T_READ_ERROR;
+            else if( !read && not p_vci_target.eop.read() )       r_target_fsm = T_WRITE_ERROR;
+            else if(  read && not p_vci_target.eop.read() )       r_target_fsm = T_READ_ERROR;
+            else if( !read && (cell == BLOCK_DEVICE_BUFFER) )     r_target_fsm = T_WRITE_BUFFER;
+            else if(  read && (cell == BLOCK_DEVICE_BUFFER) )     r_target_fsm = T_READ_BUFFER;
+            else if( !read && (cell == BLOCK_DEVICE_BUFFER_EXT) ) r_target_fsm = T_WRITE_BUFFER_EXT;
+            else if(  read && (cell == BLOCK_DEVICE_BUFFER_EXT) ) r_target_fsm = T_READ_BUFFER_EXT;
+            else if( !read && (cell == BLOCK_DEVICE_COUNT) )      r_target_fsm = T_WRITE_COUNT;
+            else if(  read && (cell == BLOCK_DEVICE_COUNT) )      r_target_fsm = T_READ_COUNT;
+            else if( !read && (cell == BLOCK_DEVICE_LBA) )        r_target_fsm = T_WRITE_LBA;
+            else if(  read && (cell == BLOCK_DEVICE_LBA) )        r_target_fsm = T_READ_LBA;
+            else if( !read && (cell == BLOCK_DEVICE_OP) )         r_target_fsm = T_WRITE_OP;
+            else if(  read && (cell == BLOCK_DEVICE_STATUS) )     r_target_fsm = T_READ_STATUS;
+            else if( !read && (cell == BLOCK_DEVICE_IRQ_ENABLE) ) r_target_fsm = T_WRITE_IRQEN;
+            else if(  read && (cell == BLOCK_DEVICE_IRQ_ENABLE) ) r_target_fsm = T_READ_IRQEN;
+            else if(  read && (cell == BLOCK_DEVICE_SIZE) )       r_target_fsm = T_READ_SIZE;
+            else if(  read && (cell == BLOCK_DEVICE_BLOCK_SIZE) ) r_target_fsm = T_READ_BLOCK;
+
+            // get write data value for both 32 bits and 64 bits data width
+            if( (vci_param::B == 8) and (p_vci_target.be.read() == 0xF0) ) 
+                r_tdata = (uint32_t)(p_vci_target.wdata.read()>>32);
+            else
+                r_tdata = p_vci_target.wdata.read();
+        }
+        break;
+    }
+    ////////////////////
+    case T_WRITE_BUFFER:
+    {
+	    if (p_vci_target.rspack.read() ) 
+        {
+            if (r_initiator_fsm.read() == M_IDLE)
+            {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_BUFFER> value = " << r_tdata.read() << std::endl;
+#endif
+                r_buf_address = (uint64_t)r_tdata.read();
+                r_target_fsm  = T_IDLE;
+	        }
+        }
+        break;
+    }
+    ////////////////////////
+    case T_WRITE_BUFFER_EXT:
+    {
+        if (p_vci_target.rspack.read() ) 
+        {
+            if (r_initiator_fsm.read() == M_IDLE)
+            {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_BUFFER_EXT> value = " << r_tdata.read() << std::endl;
+#endif
+                r_buf_address = r_buf_address.read() + (((uint64_t)r_tdata.read())<<32);
+                r_target_fsm  = T_IDLE;
+            }
+        }
+        break;
+    }
+    ///////////////////
+    case T_WRITE_COUNT:
+    {
+        if (p_vci_target.rspack.read() ) 
+        {
+            if (r_initiator_fsm.read() == M_IDLE)
+            {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_COUNT> value = " << r_tdata.read() << std::endl;
+#endif
+                r_nblocks    = (uint32_t)r_tdata.read();
+                r_target_fsm = T_IDLE;
+            }
+        }
+        break;
+    }
+    /////////////////
+    case T_WRITE_LBA:
+    {
+        if (p_vci_target.rspack.read() ) 
+        {
+            if (r_initiator_fsm.read() == M_IDLE) 
+            {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_LBA> value = " << r_tdata.read() << std::endl;
+#endif
+                r_lba        = (uint32_t)r_tdata.read();
+                r_target_fsm = T_IDLE;
+            }
+        }
+        break;
+    }
+    ////////////////
+    case T_WRITE_OP:
+    {
+        if ( p_vci_target.rspack.read() )  
+        {
+            if ( ((uint32_t)r_tdata.read() == BLOCK_DEVICE_READ) and
+                 (r_initiator_fsm.read() == M_IDLE) )
+            {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_LBA> value = READ" << std::endl;
+#endif
+                r_read = true;
+                r_go   = true;
+            }
+            else if ( ((uint32_t)r_tdata.read() == BLOCK_DEVICE_WRITE) and
+                      (r_initiator_fsm.read() == M_IDLE) )
+            {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_LBA> value = WRITE" << std::endl;
+#endif
+                r_read = false;
+                r_go   = true;
+            }
+            else
+            {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_LBA> value = SOFT RESET" << std::endl;
+#endif
+                r_go   = false;
+            }
+            r_target_fsm = T_IDLE;
+        }
+        break;
+    }
+    ///////////////////
+    case T_WRITE_IRQEN:
+    {
+        if ( p_vci_target.rspack.read() ) 
+        {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_TGT WRITE_IRQEN> value = " << r_tdata.read() << std::endl;
+#endif
+            r_target_fsm = T_IDLE;
+            r_irq_enable = (r_tdata.read() != 0);
+        }
+        break;
+    }
+    ///////////////////
+    case T_READ_BUFFER:
+    case T_READ_BUFFER_EXT:
+    case T_READ_COUNT:
+    case T_READ_LBA:
+    case T_READ_IRQEN:
+    case T_READ_SIZE:
+    case T_READ_BLOCK:
+    case T_READ_ERROR:
+    case T_WRITE_ERROR:
+    {
+        if ( p_vci_target.rspack.read() ) r_target_fsm = T_IDLE;
+        break;
+    }
+    ///////////////////
+    case T_READ_STATUS:
+    {
+        if ( p_vci_target.rspack.read() ) 
+        {
+            r_target_fsm = T_IDLE;
+            if( (r_initiator_fsm == M_READ_SUCCESS ) ||
+                (r_initiator_fsm == M_READ_ERROR   ) ||
+                (r_initiator_fsm == M_WRITE_SUCCESS) ||
+                (r_initiator_fsm == M_WRITE_ERROR  ) ) r_go = false;
+        }
+        break;
+    }
+    } // end switch target fsm
+	
+    //////////////////////////////////////////////////////////////////////////////
+    // The initiator FSM executes a loop, transfering one block per iteration.
+    // Each block is split in bursts, and the number of bursts depends
+    // on the memory buffer alignment on a burst boundary:
+    // - If buffer aligned, all burst have the same length (m_words_per burst)
+    //   and the number of bursts is (m_bursts_per_block).
+    // - If buffer not aligned, the number of bursts is (m_bursts_per_block + 1)
+    //   and first and last burst are shorter, because all words in a burst 
+    //   must be contained in a single cache line.
+    //   first burst => nwords = m_words_per_burst - offset
+    //   last  burst => nwords = offset
+    //   other burst => nwords = m_words_per_burst
+    //////////////////////////////////////////////////////////////////////////////
+
+    switch( r_initiator_fsm.read() ) {
+    ////////////
+    case M_IDLE: 	// check buffer alignment to compute the number of bursts
+    {
+        if ( r_go.read() ) 
+        {
+            r_index         = 0;
+            r_block_count   = 0;
+            r_burst_count   = 0;
+            r_words_count   = 0;
+            r_latency_count = m_latency;
+
+            // compute r_burst_offset (zero when buffer aligned)
+            r_burst_offset = (uint32_t)((r_buf_address.read()>>2) % m_words_per_burst);
+
+            // start tranfer
+            if ( r_read.read() ) 	r_initiator_fsm = M_READ_BLOCK;
+            else                    r_initiator_fsm = M_WRITE_BURST;
+        }
+        break;
+    } 
+    //////////////////
+    case M_READ_BLOCK:  // read one block from disk after waiting m_latency cycles
+    {
+        if ( r_latency_count.read() == 0 )
+        {
+            r_latency_count = m_latency;
+            ::lseek(m_fd, (r_lba + r_block_count)*m_words_per_block*4, SEEK_SET);
+            if( ::read(m_fd, r_local_buffer, m_words_per_block*4) < 0 )  
+            {
+                r_initiator_fsm = M_READ_ERROR;
+            }
+            else   
+            {
+                r_burst_count   = 0;
+                r_words_count   = 0;
+                r_initiator_fsm = M_READ_BURST;
+            }
+
+////////////////////////////////////////////////////////////////////////////////////////
+//std::cout << "***** Block content after read for lba " 
+//          << std::hex << r_lba.read() << " **************" << std::endl;
+//for ( size_t line=0 ; line<16 ; line++ )
+//{
+//    for ( size_t word=0 ; word<8 ; word++ )
+//    {
+//        std::cout << std::hex << r_local_buffer[line*8 + word] << " ";
+//    }
+//    std::cout << std::endl;
+//}
+//std::cout << "**********************************************************" << std::endl;
+////////////////////////////////////////////////////////////////////////////////////////
+
+        }
+        else
+        {
+            r_latency_count = r_latency_count.read() - 1;
+        }
+        break;
+    }
+    //////////////////
+    case M_READ_BURST:  // Compute the number of words and the number of flits in the burst
+                        // The number of flits can be smaller than the number of words 
+                        // in case of 8 bytes flits...
+    {
+        uint32_t nwords;
+        uint32_t offset = r_burst_offset.read();
+
+        if ( offset )                  // buffer not aligned
+        {
+            if ( r_burst_count.read() == 0 ) nwords = m_words_per_burst - offset;
+            else if ( r_burst_count.read() == m_bursts_per_block ) nwords = offset;
+            else nwords = m_words_per_burst;
+        }
+        else                           // buffer aligned
+        {
+            nwords = m_words_per_burst;
+        }
+
+        r_burst_nwords  = nwords;
+        r_initiator_fsm = M_READ_CMD;
+        break;
+    }
+    ////////////////
+    case M_READ_CMD:	// Send a multi-flits VCI WRITE command
+    {
+        if ( p_vci_initiator.cmdack.read() )
+        {
+            uint32_t nwords = r_burst_nwords.read() - r_words_count.read();
+
+            if ( vci_param::B == 4 )    // one word per flit 
+            {
+                if ( nwords <= 1 )      // last flit
+                {
+                    r_initiator_fsm = M_READ_RSP;
+                    r_words_count = 0;
+                }
+                else                    // not the last flit
+                {
+                    r_words_count = r_words_count.read() + 1;
+                }
+
+                // compute next word address and next local buffer index
+                r_buf_address = r_buf_address.read() + 4;
+                r_index       = r_index.read() + 1;
+            }
+            else                        // 2 words per flit
+            {
+                if ( nwords <= 2 )      // last flit
+                {
+                    r_initiator_fsm = M_READ_RSP;
+                    r_words_count = 0;
+                }
+                else                    // not the last flit
+                {
+                    r_words_count = r_words_count.read() + 2;
+                }
+                    
+                // compute next word address and next local buffer index
+                if ( nwords == 1 )
+                {
+                    r_buf_address = r_buf_address.read() + 4;
+                    r_index       = r_index.read() + 1;
+                }
+                else
+                {
+                    r_buf_address = r_buf_address.read() + 8;
+                    r_index       = r_index.read() + 2;
+                }
+            }
+        }
+        break;
+    }
+    ////////////////
+    case M_READ_RSP: 	// Wait a single flit VCI WRITE response
+    {
+        if ( p_vci_initiator.rspval.read() )
+        {
+            bool aligned = (r_burst_offset.read() == 0);
+
+            if ( (p_vci_initiator.rerror.read()&0x1) != 0 ) 
+            {
+                r_initiator_fsm = M_READ_ERROR;
+            }
+            else if ( (not aligned and (r_burst_count.read() == m_bursts_per_block)) or 
+                      (aligned and (r_burst_count.read() == (m_bursts_per_block-1))) )
+            {
+                if ( r_block_count.read() == (r_nblocks.read()-1) ) // last burst of last block 
+                {
+                    r_initiator_fsm = M_READ_SUCCESS;
+                }
+                else                                              // last burst not last block
+                {
+                    r_index          = 0;
+                    r_burst_count    = 0;
+                    r_block_count    = r_block_count.read() + 1;
+                    r_initiator_fsm  = M_READ_BLOCK;
+                }
+            }
+            else                                                // not the last burst
+            {
+                r_burst_count = r_burst_count.read() + 1;
+                r_initiator_fsm = M_READ_BURST;
+            }
+        }
+        break;
+    }
+    ///////////////////
+    case M_READ_SUCCESS:
+    case M_READ_ERROR:
+    {
+        if( !r_go ) r_initiator_fsm = M_IDLE;
+        break;
+    }
+    ///////////////////
+    case M_WRITE_BURST:  // Compute the number of words in the burst
+    {
+        uint32_t nwords;
+        uint32_t offset = r_burst_offset.read();
+
+        if ( offset )                  // buffer not aligned
+        {
+            if ( r_burst_count.read() == 0 ) nwords = m_words_per_burst - offset;
+            else if ( r_burst_count.read() == m_bursts_per_block ) nwords = offset;
+            else nwords = m_words_per_burst;
+        }
+        else                           // buffer aligned
+        {
+            nwords = m_words_per_burst;
+        }
+
+        r_burst_nwords  = nwords;
+        r_initiator_fsm =  M_WRITE_CMD;
+        break;
+    }
+    /////////////////
+    case M_WRITE_CMD:	// This is actually a single flit VCI READ command
+    {
+	    if ( p_vci_initiator.cmdack.read() ) r_initiator_fsm = M_WRITE_RSP;
+        break;
+    }
+    /////////////////
+    case M_WRITE_RSP:	// This is actually a multi-words VCI READ response
+    {
+        if ( p_vci_initiator.rspval.read() )
+        {
+            bool aligned = (r_burst_offset.read() == 0);
+
+            if ( (vci_param::B == 8) and (r_burst_nwords.read() > 1) )
+            {
+                r_local_buffer[r_index.read()]   = (uint32_t)p_vci_initiator.rdata.read();
+                r_local_buffer[r_index.read()+1] = (uint32_t)(p_vci_initiator.rdata.read()>>32);
+                r_index = r_index.read() + 2;
+            }
+            else
+            {
+                r_local_buffer[r_index.read()]   = (uint32_t)p_vci_initiator.rdata.read();
+                r_index = r_index.read() + 1;
+            }
+
+            if ( p_vci_initiator.reop.read() )  // last flit of the burst
+            {
+	            r_words_count  = 0;
+                r_buf_address = r_buf_address.read() + (r_burst_nwords.read()<<2); 
+
+	            if( (p_vci_initiator.rerror.read()&0x1) != 0 ) 
+                {
+                    r_initiator_fsm = M_WRITE_ERROR;
+                }
+                else if ( (not aligned and (r_burst_count.read() == m_bursts_per_block)) or 
+                     (aligned and (r_burst_count.read() == (m_bursts_per_block-1))) ) // last burst
+                {
+                    r_initiator_fsm  = M_WRITE_BLOCK;
+                }
+                else                                          // not the last burst
+                {
+                    r_burst_count = r_burst_count.read() + 1;
+                    r_initiator_fsm = M_WRITE_BURST;
+                }
+            }
+            else
+            {
+	            r_words_count = r_words_count.read() + 1;
+            }
+        }
+        break;
+    }
+    ///////////////////
+    case M_WRITE_BLOCK:		// write a block to disk after waiting m_latency cycles
+    {
+        if ( r_latency_count == 0 )
+        {
+
+////////////////////////////////////////////////////////////////////////////////////////
+//std::cout << "***** Block content before write for lba " 
+//          << std::hex << r_lba.read() << " ***********" << std::endl;
+//for ( size_t line=0 ; line<16 ; line++ )
+//{
+//    for ( size_t word=0 ; word<8 ; word++ )
+//    {
+//        std::cout << std::hex << r_local_buffer[line*8 + word] << " ";
+//    }
+//    std::cout << std::endl;
+//}
+//std::cout << "**********************************************************" << std::endl;
+////////////////////////////////////////////////////////////////////////////////////////
+
+            r_latency_count = m_latency;
+            ::lseek(m_fd, (r_lba + r_block_count)*m_words_per_block*4, SEEK_SET);
+            if( ::write(m_fd, r_local_buffer, m_words_per_block*4) < 0 )
+            {
+                r_initiator_fsm = M_WRITE_ERROR; 
+            }
+            else if ( r_block_count.read() == r_nblocks.read() - 1 ) 
+            {
+                r_initiator_fsm = M_WRITE_SUCCESS; 
+            }
+            else
+            {
+                r_burst_count    = 0;
+                r_index          = 0;
+                r_block_count    = r_block_count.read() + 1;
+                r_initiator_fsm  = M_WRITE_BURST;
+            }
+        } 
+        else
+        {
+            r_latency_count = r_latency_count - 1;
+        }
+        break;
+    }
+    /////////////////////
+    case M_WRITE_SUCCESS:
+    case M_WRITE_ERROR:
+    {
+        if( !r_go ) r_initiator_fsm = M_IDLE;
+        break;
+    }
+    } // end switch r_initiator_fsm
+}  // end transition
+
+//////////////////////
+tmpl(void)::genMoore()
+{
+    // p_vci_target port   
+    p_vci_target.rsrcid = (sc_dt::sc_uint<vci_param::S>)r_srcid.read();
+    p_vci_target.rtrdid = (sc_dt::sc_uint<vci_param::T>)r_trdid.read();
+    p_vci_target.rpktid = (sc_dt::sc_uint<vci_param::P>)r_pktid.read();
+    p_vci_target.reop   = true;
+
+    switch(r_target_fsm) {
+    case T_IDLE:
+        p_vci_target.cmdack = true;
+        p_vci_target.rspval = false;
+        p_vci_target.rdata  = 0;
+        break;
+    case T_READ_STATUS:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        if     (r_initiator_fsm == M_IDLE)          p_vci_target.rdata = BLOCK_DEVICE_IDLE;
+        else if(r_initiator_fsm == M_READ_SUCCESS)  p_vci_target.rdata = BLOCK_DEVICE_READ_SUCCESS;
+        else if(r_initiator_fsm == M_WRITE_SUCCESS) p_vci_target.rdata = BLOCK_DEVICE_WRITE_SUCCESS;
+        else if(r_initiator_fsm == M_READ_ERROR)   	p_vci_target.rdata = BLOCK_DEVICE_READ_ERROR;
+        else if(r_initiator_fsm == M_WRITE_ERROR)  	p_vci_target.rdata = BLOCK_DEVICE_WRITE_ERROR;
+        else                                    	p_vci_target.rdata = BLOCK_DEVICE_BUSY;
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_BUFFER:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = (uint32_t)r_buf_address.read();
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_BUFFER_EXT:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = (uint32_t)(r_buf_address.read()>>32);
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_COUNT:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = r_nblocks.read();
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_LBA:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = r_lba.read();
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_IRQEN:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = r_irq_enable.read();
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_SIZE:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = m_device_size;
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_BLOCK:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = m_words_per_block*4;
+        p_vci_target.rerror = VCI_READ_OK;
+        break;
+    case T_READ_ERROR:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = 0;
+        p_vci_target.rerror = VCI_READ_ERROR;
+        break;
+    case T_WRITE_ERROR:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = 0;
+        p_vci_target.rerror = VCI_WRITE_ERROR;
+        break;
+    default:
+        p_vci_target.cmdack = false;
+        p_vci_target.rspval = true;
+        p_vci_target.rdata  = 0;
+        p_vci_target.rerror = VCI_WRITE_OK;
+        break;
+    } // end switch target fsm
+
+    // p_vci_initiator port
+    p_vci_initiator.srcid  = (sc_dt::sc_uint<vci_param::S>)m_srcid;
+    p_vci_initiator.trdid  = 0;
+    p_vci_initiator.contig = true;
+    p_vci_initiator.cons   = false;
+    p_vci_initiator.wrap   = false;
+    p_vci_initiator.cfixed = false;
+    p_vci_initiator.clen   = 0;
+
+    switch (r_initiator_fsm) {
+    case M_WRITE_CMD:		// It is actually a single flit VCI read command
+        p_vci_initiator.rspack  = false;
+        p_vci_initiator.cmdval  = true;
+        p_vci_initiator.address = (sc_dt::sc_uint<vci_param::N>)r_buf_address.read();
+        p_vci_initiator.cmd     = vci_param::CMD_READ;
+        p_vci_initiator.pktid   = TYPE_READ_DATA_UNC; 
+        p_vci_initiator.wdata   = 0;
+        p_vci_initiator.be      = 0;
+        p_vci_initiator.plen    = (sc_dt::sc_uint<vci_param::K>)(r_burst_nwords.read()<<2);
+        p_vci_initiator.eop     = true;
+        break;
+    case M_READ_CMD:		// It is actually a multi-words VCI WRITE command 
+        p_vci_initiator.rspack  = false;
+        p_vci_initiator.cmdval  = true;
+        p_vci_initiator.address = (sc_dt::sc_uint<vci_param::N>)r_buf_address.read(); 
+        p_vci_initiator.cmd     = vci_param::CMD_WRITE;
+        p_vci_initiator.pktid   = TYPE_WRITE;
+        p_vci_initiator.plen    = (sc_dt::sc_uint<vci_param::K>)(r_burst_nwords.read()<<2);
+        if ( (vci_param::B == 8) and ((r_burst_nwords.read() - r_words_count.read()) > 1) )  
+        {
+            p_vci_initiator.wdata = ((uint64_t)r_local_buffer[r_index.read()  ]) +
+                                   (((uint64_t)r_local_buffer[r_index.read()+1]) << 32); 
+            p_vci_initiator.be    = 0xFF;
+            p_vci_initiator.eop   = ( (r_burst_nwords.read() - r_words_count.read()) <= 2 );
+        }
+        else
+        {
+            p_vci_initiator.wdata = r_local_buffer[r_index.read()];
+            p_vci_initiator.be    = 0xF;
+            p_vci_initiator.eop   = ( r_words_count.read() == (r_burst_nwords.read() - 1) );
+        }
+        break;
+    case M_READ_RSP:
+    case M_WRITE_RSP:
+        p_vci_initiator.rspack  = true;
+        p_vci_initiator.cmdval  = false;
+        break;
+    default:
+        p_vci_initiator.rspack  = false;
+        p_vci_initiator.cmdval  = false;
+        break;
+    }
+
+    // IRQ signal
+    if ( ((r_initiator_fsm == M_READ_SUCCESS)  ||
+	      (r_initiator_fsm == M_WRITE_SUCCESS) ||
+          (r_initiator_fsm == M_READ_ERROR)    ||
+          (r_initiator_fsm == M_WRITE_ERROR) ) &&  
+         r_irq_enable.read() ) 
+    {
+
+#if DEBUG_BDEV
+std::cout << "  <BDEV_INI send IRQ>" << std::endl;
+#endif
+		p_irq = true;
+    } 
+    else 
+    {
+        p_irq = false;
+    }
+} // end GenMoore()
+
+//////////////////////////////////////////////////////////////////////////////
+tmpl(/**/)::VciBlockDeviceTsar( sc_core::sc_module_name              name, 
+                                const soclib::common::MappingTable   &mt,
+                                const soclib::common::IntTab         &srcid,
+                                const soclib::common::IntTab         &tgtid,
+                                const std::string                    &filename,
+                                const uint32_t                       block_size,
+                                const uint32_t                       burst_size,
+                                const uint32_t                       latency)
+
+: caba::BaseModule(name),
+	m_seglist(mt.getSegmentList(tgtid)),
+	m_srcid(mt.indexForId(srcid)),
+	m_words_per_block(block_size/4),
+	m_words_per_burst(burst_size/4),
+	m_bursts_per_block(block_size/burst_size),
+	m_latency(latency),
+	p_clk("p_clk"),
+	p_resetn("p_resetn"),
+	p_vci_initiator("p_vci_initiator"),
+	p_vci_target("p_vci_target"),
+	p_irq("p_irq") 
+{
+    std::cout << "  - Building VciBlockDeviceTsar " << name << std::endl;
+
+	SC_METHOD(transition);
+    dont_initialize();
+    sensitive << p_clk.pos();
+
+	SC_METHOD(genMoore);
+    dont_initialize();
+    sensitive << p_clk.neg();
+
+    size_t nbsegs = 0;
+    std::list<soclib::common::Segment>::iterator seg;
+    for ( seg = m_seglist.begin() ; seg != m_seglist.end() ; seg++ ) 
+    {
+        nbsegs++;
+        
+	    if ( (seg->baseAddress() & 0x0000003F) != 0 ) 
+	    {
+		    std::cout << "Error in component VciBlockDeviceTsar : " << name 
+		              << "The base address of segment " << seg->name()
+                      << " must be multiple of 64 bytes" << std::endl;
+		    exit(1);
+	    }
+	    if ( seg->size() < 64 ) 
+	    {
+		    std::cout << "Error in component VciBlockDeviceTsar : " << name 
+	                  << "The size of segment " << seg->name()
+                      << " cannot be smaller than 64 bytes" << std::endl;
+		    exit(1);
+	    }
+        std::cout << "    => segment " << seg->name()
+                  << " / base = " << std::hex << seg->baseAddress()
+                  << " / size = " << seg->size() << std::endl; 
+    }
+
+    if( nbsegs == 0 )
+    {
+		std::cout << "Error in component VciBlockDeviceTsar : " << name
+		          << " No segment allocated" << std::endl;
+		exit(1);
+    }
+
+    if( (block_size != 128)  && 
+        (block_size != 256)  && 
+        (block_size != 512)  && 
+        (block_size != 1024) &&
+        (block_size != 2048) && 
+        (block_size != 4096) )
+	{
+		std::cout << "Error in component VciBlockDeviceTsar : " << name
+		          << " The block size must be 128, 256, 512, 1024, 2048 or 4096 bytes"
+                  << std::endl;
+		exit(1);
+	}
+
+    if( (burst_size != 8 ) && 
+		(burst_size != 16) && 
+		(burst_size != 32) && 
+		(burst_size != 64) )
+	{
+		std::cout << "Error in component VciBlockDeviceTsar : " << name 
+		          << " The burst size must be 8, 16, 32 or 64 bytes" << std::endl;
+		exit(1);
+	}
+
+	if ( (vci_param::B != 4) and (vci_param::B != 8) )
+	{
+		std::cout << "Error in component VciBlockDeviceTsar : " << name              
+		          << " The VCI data fields must have 32 bits or 64 bits" << std::endl;
+		exit(1);
+	}
+
+	m_fd = ::open(filename.c_str(), O_RDWR);
+	if ( m_fd < 0 ) 
+	{
+		std::cout << "Error in component VciBlockDeviceTsar : " << name 
+		          << " Unable to open file " << filename << std::endl;
+		exit(1);
+	}
+	m_device_size = lseek(m_fd, 0, SEEK_END) / block_size;
+
+	if ( m_device_size > ((uint64_t)1<<vci_param::N ) ) 
+	{
+		std::cout << "Error in component VciBlockDeviceTsar" << name 
+		          << " The file " << filename
+		          << " has more blocks than addressable with the VCI address" << std::endl;
+		exit(1);
+	}
+
+	r_local_buffer = new uint32_t[m_words_per_block];
+
+} // end constructor
+
+/////////////////////////////////
+tmpl(/**/)::~VciBlockDeviceTsar()
+{
+    delete [] r_local_buffer;
+}
+
+
+//////////////////////////
+tmpl(void)::print_trace()
+{
+	const char* initiator_str[] = 
+    {
+		"INI_IDLE",
+
+		"INI_READ_BLOCK",
+		"INI_READ_BURST",
+		"INI_READ_CMD",
+		"INI_READ_RSP",
+		"INI_READ_SUCCESS",
+		"INI_READ_ERROR",
+
+		"INI_WRITE_BURST",
+		"INI_WRITE_CMD",
+		"INI_WRITE_RSP",
+		"INI_WRITE_BLOCK",
+		"INI_WRITE_SUCCESS",
+		"INI_WRITE_ERROR",
+	};
+	const char* target_str[] = 
+    {
+		"TGT_IDLE",
+		"TGT_WRITE_BUFFER",
+		"TGT_READ_BUFFER",
+		"TGT_WRITE_BUFFER_EXT",
+		"TGT_READ_BUFFER_EXT",
+		"TGT_WRITE_COUNT",
+		"TGT_READ_COUNT",
+		"TGT_WRITE_LBA",
+		"TGT_READ_LBA",
+		"TGT_WRITE_OP",
+		"TGT_READ_STATUS",
+		"TGT_WRITE_IRQEN",
+		"TGT_READ_IRQEN",
+		"TGT_READ_SIZE",
+		"TGT_READ_BLOCK",
+		"TGT_READ_ERROR",
+		"TGT_WRITE_ERROR ",
+	};
+
+	std::cout << "BDEV " << name()
+              << " : " << target_str[r_target_fsm.read()] 
+		      << " / " << initiator_str[r_initiator_fsm.read()] 
+              << " / buf = " << std::hex << r_buf_address.read()
+              << " / lba = " << std::hex << r_lba.read()
+		      << " / block_count = " << std::dec << r_block_count.read() 
+		      << " / burst_count = " << r_burst_count.read() 
+		      << " / word_count = " << r_words_count.read() <<std::endl; 
+}
+
+}} // end namespace
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_block_device_tsar/include/soclib/block_device_tsar.h
===================================================================
--- /branches/fault_tolerance/modules/vci_block_device_tsar/include/soclib/block_device_tsar.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_block_device_tsar/include/soclib/block_device_tsar.h	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         alain greiner
+ *
+ * Maintainers: alain
+ */
+#ifndef BLOCK_DEVICE_TSAR_REGS_H
+#define BLOCK_DEVICE_TSAR_REGS_H
+
+enum SoclibBlockDeviceRegisters {
+    BLOCK_DEVICE_BUFFER,
+    BLOCK_DEVICE_LBA,
+    BLOCK_DEVICE_COUNT,
+    BLOCK_DEVICE_OP,
+    BLOCK_DEVICE_STATUS,
+    BLOCK_DEVICE_IRQ_ENABLE,
+    BLOCK_DEVICE_SIZE,
+    BLOCK_DEVICE_BLOCK_SIZE,
+    BLOCK_DEVICE_BUFFER_EXT,
+};
+
+enum SoclibBlockDeviceOp {
+    BLOCK_DEVICE_NOOP,
+    BLOCK_DEVICE_READ,
+    BLOCK_DEVICE_WRITE,
+};
+
+enum SoclibBlockDeviceStatus {
+    BLOCK_DEVICE_IDLE,
+    BLOCK_DEVICE_BUSY,
+    BLOCK_DEVICE_READ_SUCCESS,
+    BLOCK_DEVICE_WRITE_SUCCESS,
+    BLOCK_DEVICE_READ_ERROR,
+    BLOCK_DEVICE_WRITE_ERROR,
+};
+
+#endif /* BLOCK_DEVICE_TSAR_REGS_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/metadata/vci_cc_vcache_wrapper.sd
===================================================================
--- /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/metadata/vci_cc_vcache_wrapper.sd	(revision 724)
+++ /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/metadata/vci_cc_vcache_wrapper.sd	(revision 724)
@@ -0,0 +1,73 @@
+
+# -*- python -*-
+
+Module('caba:vci_cc_vcache_wrapper',
+	    classname = 'soclib::caba::VciCcVCacheWrapper',
+
+	    tmpl_parameters = [
+            parameter.Module('vci_param', default = 'caba:vci_param'),
+            parameter.Int('dspin_in_width'),
+            parameter.Int('dspin_out_width'),
+	        parameter.Module('iss_t')
+        ],
+
+	    header_files = [ '../source/include/vci_cc_vcache_wrapper.h' ],
+
+	    implementation_files = [ '../source/src/vci_cc_vcache_wrapper.cpp' ],
+
+	    uses = [
+            Uses('caba:base_module'),
+            Uses('common:mapping_table'),
+	        Uses('common:iss2'),
+	        Uses('caba:multi_write_buffer'),
+	        Uses('caba:generic_fifo'),
+	        Uses('caba:generic_cache_tsar',
+                addr_t = parameter.StringExt('sc_dt::sc_uint<%d> ', 
+                parameter.Reference('addr_size'))),
+            Uses('caba:generic_tlb', 
+                addr_t = parameter.StringExt('sc_dt::sc_uint<%d> ', 
+                parameter.Reference('addr_size'))),
+            Uses('common:address_masking_table', 
+                data_t = parameter.StringExt('sc_dt::sc_uint<%d> ', 
+                parameter.Reference('addr_size'))
+            ),
+			Uses('caba:dspin_dhccp_param'),
+        ],
+
+	    ports = [
+            Port('caba:vci_initiator', 'p_vci'),
+            Port('caba:dspin_input', 'p_dspin_m2p', 
+                  dspin_data_size = parameter.Reference('dspin_in_width')),
+            Port('caba:dspin_output', 'p_dspin_p2m', 
+                  dspin_data_size = parameter.Reference('dspin_out_width')),
+            Port('caba:dspin_input', 'p_dspin_clack', 
+                  dspin_data_size = parameter.Reference('dspin_in_width')),
+	        Port('caba:bit_in','p_irq', parameter.Constant('n_irq')),
+	        Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+	        Port('caba:clock_in', 'p_clk', auto = 'clock')
+        ],
+
+	    instance_parameters = [
+            parameter.Int('proc_id'),
+	        parameter.Module('mt', 'common:mapping_table'),
+	        parameter.Module('mc', 'common:mapping_table'),
+	        parameter.IntTab('initiator_rw_index'),
+	        parameter.IntTab('initiator_c_index'),
+	        parameter.IntTab('target_index'),
+    	    parameter.Int('itlb_ways'),
+    	    parameter.Int('itlb_sets'),
+    	    parameter.Int('dtlb_ways'),
+    	    parameter.Int('dtlb_sets'),
+    	    parameter.Int('icache_ways'),
+    	    parameter.Int('icache_sets'),
+    	    parameter.Int('icache_words'),
+    	    parameter.Int('dcache_ways'),
+    	    parameter.Int('dcache_sets'),
+    	    parameter.Int('dcache_words'),
+    	    parameter.Int('wbuf_nlines'),
+    	    parameter.Int('wbuf_nwords'),
+    	    parameter.Int('max_frozen_cycles')
+        ],
+)
+
+
Index: /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h
===================================================================
--- /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h	(revision 724)
@@ -0,0 +1,799 @@
+/* -*- c++ -*-
+ *
+ * File : vci_cc_vcache_wrapper.h
+ * Copyright (c) UPMC, Lip6, SoC
+ * Authors : Alain GREINER, Yang GAO
+ * Date : 27/11/2011
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Maintainers: cesar.fuguet-tortolero@lip6.fr
+ *              alexandre.joannou@lip6.fr
+ */
+
+#ifndef SOCLIB_CABA_VCI_CC_VCACHE_WRAPPER_H
+#define SOCLIB_CABA_VCI_CC_VCACHE_WRAPPER_H
+
+#include <inttypes.h>
+#include <systemc>
+#include "caba_base_module.h"
+#include "multi_write_buffer.h"
+#include "generic_fifo.h"
+#include "generic_tlb.h"
+#include "generic_cache.h"
+#include "vci_initiator.h"
+#include "dspin_interface.h"
+#include "dspin_dhccp_param.h"
+#include "mapping_table.h"
+#include "static_assert.h"
+#include "iss2.h"
+
+#define LLSC_TIMEOUT    10000
+
+namespace soclib {
+namespace caba {
+
+using namespace sc_core;
+
+////////////////////////////////////////////
+template<typename vci_param, 
+         size_t   dspin_in_width,
+         size_t   dspin_out_width,
+         typename iss_t>
+class VciCcVCacheWrapper
+////////////////////////////////////////////
+    : public soclib::caba::BaseModule
+{
+
+    typedef typename vci_param::fast_addr_t  paddr_t;
+
+    enum icache_fsm_state_e 
+    {
+        ICACHE_IDLE,
+        // handling XTN processor requests
+        ICACHE_XTN_TLB_FLUSH,
+        ICACHE_XTN_CACHE_FLUSH,
+        ICACHE_XTN_CACHE_FLUSH_GO,
+        ICACHE_XTN_TLB_INVAL,
+        ICACHE_XTN_CACHE_INVAL_VA,
+        ICACHE_XTN_CACHE_INVAL_PA,
+        ICACHE_XTN_CACHE_INVAL_GO,
+        // handling tlb miss
+        ICACHE_TLB_WAIT,
+        // handling cache miss
+        ICACHE_MISS_SELECT,
+        ICACHE_MISS_CLEAN,
+        ICACHE_MISS_WAIT,
+        ICACHE_MISS_DATA_UPDT,
+        ICACHE_MISS_DIR_UPDT,
+        // handling unc read
+        ICACHE_UNC_WAIT,
+        // handling coherence requests
+        ICACHE_CC_CHECK,
+        ICACHE_CC_UPDT,
+        ICACHE_CC_INVAL,
+    };
+
+    enum dcache_fsm_state_e 
+    {
+        DCACHE_IDLE,
+        // handling itlb & dtlb miss
+        DCACHE_TLB_MISS,
+        DCACHE_TLB_PTE1_GET,
+        DCACHE_TLB_PTE1_SELECT,
+        DCACHE_TLB_PTE1_UPDT,
+        DCACHE_TLB_PTE2_GET,
+        DCACHE_TLB_PTE2_SELECT,
+        DCACHE_TLB_PTE2_UPDT,
+        DCACHE_TLB_LR_UPDT,
+        DCACHE_TLB_LR_WAIT,
+        DCACHE_TLB_RETURN,
+	    // handling processor XTN requests
+        DCACHE_XTN_SWITCH,
+        DCACHE_XTN_SYNC,
+        DCACHE_XTN_IC_INVAL_VA,
+        DCACHE_XTN_IC_FLUSH,
+        DCACHE_XTN_IC_INVAL_PA,
+        DCACHE_XTN_IC_PADDR_EXT,
+        DCACHE_XTN_IT_INVAL,
+        DCACHE_XTN_DC_FLUSH,
+        DCACHE_XTN_DC_FLUSH_GO,
+        DCACHE_XTN_DC_INVAL_VA,
+        DCACHE_XTN_DC_INVAL_PA,
+        DCACHE_XTN_DC_INVAL_END,
+        DCACHE_XTN_DC_INVAL_GO,
+        DCACHE_XTN_DT_INVAL,
+        //handling dirty bit update
+        DCACHE_DIRTY_GET_PTE,
+        DCACHE_DIRTY_WAIT,
+	    // handling processor miss requests
+        DCACHE_MISS_SELECT,
+        DCACHE_MISS_CLEAN,
+        DCACHE_MISS_WAIT,
+        DCACHE_MISS_DATA_UPDT,
+        DCACHE_MISS_DIR_UPDT,
+        // handling processor unc, ll and sc requests
+        DCACHE_UNC_WAIT,
+        DCACHE_LL_WAIT,
+        DCACHE_SC_WAIT,
+        // handling coherence requests
+        DCACHE_CC_CHECK,
+        DCACHE_CC_UPDT,
+        DCACHE_CC_INVAL,
+        // handling TLB inval (after a coherence or XTN request)
+        DCACHE_INVAL_TLB_SCAN,
+    };
+
+    enum cmd_fsm_state_e 
+    {
+        CMD_IDLE,
+        CMD_INS_MISS,
+        CMD_INS_UNC,
+        CMD_DATA_MISS,
+        CMD_DATA_UNC_READ,
+        CMD_DATA_UNC_WRITE,
+        CMD_DATA_WRITE,
+        CMD_DATA_LL,
+        CMD_DATA_SC,
+        CMD_DATA_CAS,
+    };
+
+    enum rsp_fsm_state_e 
+    {
+        RSP_IDLE,
+        RSP_INS_MISS,
+        RSP_INS_UNC,
+        RSP_DATA_MISS,
+        RSP_DATA_UNC,
+        RSP_DATA_LL,
+        RSP_DATA_WRITE,
+    };
+
+    enum cc_receive_fsm_state_e 
+    {
+        CC_RECEIVE_IDLE,
+        CC_RECEIVE_BRDCAST_HEADER,
+        CC_RECEIVE_BRDCAST_NLINE,
+        CC_RECEIVE_INS_INVAL_HEADER,
+        CC_RECEIVE_INS_INVAL_NLINE,
+        CC_RECEIVE_INS_UPDT_HEADER,
+        CC_RECEIVE_INS_UPDT_NLINE,
+        CC_RECEIVE_DATA_INVAL_HEADER,
+        CC_RECEIVE_DATA_INVAL_NLINE,
+        CC_RECEIVE_DATA_UPDT_HEADER,
+        CC_RECEIVE_DATA_UPDT_NLINE,
+        CC_RECEIVE_INS_UPDT_DATA,
+        CC_RECEIVE_DATA_UPDT_DATA,
+    };
+
+    enum cc_send_fsm_state_e 
+    {
+        CC_SEND_IDLE,
+        CC_SEND_CLEANUP_1,
+        CC_SEND_CLEANUP_2,
+        CC_SEND_MULTI_ACK,
+    };
+
+    /* transaction type, pktid field */
+    enum transaction_type_e
+    {
+        // b3 unused
+        // b2 READ / NOT READ
+        // if READ
+        //  b1 DATA / INS
+        //  b0 UNC / MISS
+        // else
+        //  b1 accÃšs table llsc type SW / other
+        //  b2 WRITE/CAS/LL/SC
+        TYPE_DATA_UNC               = 0x0,
+        TYPE_READ_DATA_MISS         = 0x1,
+        TYPE_READ_INS_UNC           = 0x2,
+        TYPE_READ_INS_MISS          = 0x3,
+        TYPE_WRITE                  = 0x4,
+        TYPE_CAS                    = 0x5,
+        TYPE_LL                     = 0x6,
+        TYPE_SC                     = 0x7
+    };
+
+    /* SC return values */
+    enum sc_status_type_e
+    {
+        SC_SUCCESS  =   0x00000000,
+        SC_FAIL     =   0x00000001
+    };
+
+    // cc_send_type
+    typedef enum 
+    {
+        CC_TYPE_CLEANUP,
+        CC_TYPE_MULTI_ACK,
+    } cc_send_t;
+
+    // cc_receive_type
+    typedef enum 
+    {
+        CC_TYPE_CLACK,
+        CC_TYPE_BRDCAST,
+        CC_TYPE_INVAL,
+        CC_TYPE_UPDT,
+    } cc_receive_t;
+
+    // TLB Mode : ITLB / DTLB / ICACHE / DCACHE
+    enum 
+    {
+        INS_TLB_MASK    = 0x8,
+        DATA_TLB_MASK   = 0x4,
+        INS_CACHE_MASK  = 0x2,
+        DATA_CACHE_MASK = 0x1,
+    };
+
+    // Error Type
+    enum mmu_error_type_e
+    {
+        MMU_NONE                      = 0x0000, // None
+        MMU_WRITE_PT1_UNMAPPED 	      = 0x0001, // Write & Page fault on PT1
+        MMU_WRITE_PT2_UNMAPPED 	      = 0x0002, // Write & Page fault on PT2
+        MMU_WRITE_PRIVILEGE_VIOLATION = 0x0004, // Write & Protected access in user mode
+        MMU_WRITE_ACCES_VIOLATION     = 0x0008, // Write to non writable page
+        MMU_WRITE_UNDEFINED_XTN       = 0x0020, // Write & undefined external access
+        MMU_WRITE_PT1_ILLEGAL_ACCESS  = 0x0040, // Write & Bus Error accessing PT1
+        MMU_WRITE_PT2_ILLEGAL_ACCESS  = 0x0080, // Write & Bus Error accessing PT2
+        MMU_WRITE_DATA_ILLEGAL_ACCESS = 0x0100, // Write & Bus Error in cache access
+        MMU_READ_PT1_UNMAPPED 	      = 0x1001, // Read & Page fault on PT1
+        MMU_READ_PT2_UNMAPPED 	      = 0x1002, // Read & Page fault on PT2
+        MMU_READ_PRIVILEGE_VIOLATION  = 0x1004, // Read & Protected access in user mode
+        MMU_READ_EXEC_VIOLATION       = 0x1010, // Read & Exec access to a non exec page
+        MMU_READ_UNDEFINED_XTN 	      = 0x1020, // Read & Undefined external access
+        MMU_READ_PT1_ILLEGAL_ACCESS   = 0x1040, // Read & Bus Error accessing PT1
+        MMU_READ_PT2_ILLEGAL_ACCESS   = 0x1080, // Read & Bus Error accessing PT2
+        MMU_READ_DATA_ILLEGAL_ACCESS  = 0x1100, // Read & Bus Error in cache access
+    };
+
+    // miss types for data cache
+    enum dcache_miss_type_e
+    {
+        PTE1_MISS,
+        PTE2_MISS,
+        PROC_MISS,
+    };
+
+//    enum transaction_type_d_e
+//    {
+//        // b0 : 1 if cached
+//        // b1 : 1 if instruction
+//        TYPE_DATA_UNC     = 0x0,
+//        TYPE_DATA_MISS    = 0x1,
+//        TYPE_INS_UNC      = 0x2,
+//        TYPE_INS_MISS     = 0x3,
+//    };
+
+public:
+    sc_in<bool>                                p_clk;
+    sc_in<bool>                                p_resetn;
+    sc_in<bool>                                p_irq[iss_t::n_irq];
+    soclib::caba::VciInitiator<vci_param>      p_vci;
+    soclib::caba::DspinInput<dspin_in_width>   p_dspin_m2p;
+    soclib::caba::DspinOutput<dspin_out_width> p_dspin_p2m;
+    soclib::caba::DspinInput<dspin_in_width>   p_dspin_clack;
+
+private:
+
+    // STRUCTURAL PARAMETERS
+    soclib::common::AddressDecodingTable<uint64_t, bool> m_cacheability_table;
+
+    const size_t                        m_srcid;
+    const size_t                        m_cc_global_id;
+    const size_t                        m_nline_width;
+    const size_t  						m_itlb_ways;
+    const size_t  						m_itlb_sets;
+    const size_t  						m_dtlb_ways;
+    const size_t  						m_dtlb_sets;
+    const size_t  						m_icache_ways;
+    const size_t  						m_icache_sets;
+    const paddr_t 						m_icache_yzmask;
+    const size_t  						m_icache_words;
+    const size_t  						m_dcache_ways;
+    const size_t  						m_dcache_sets;
+    const paddr_t 						m_dcache_yzmask;
+    const size_t  						m_dcache_words;
+    const size_t                        m_x_width;
+    const size_t                        m_y_width;
+    const size_t                        m_proc_id;
+    const uint32_t						m_max_frozen_cycles;
+    const size_t  						m_paddr_nbits;
+    uint32_t                            m_debug_start_cycle;
+    bool                                m_debug_ok;
+
+    uint32_t                            m_dcache_paddr_ext_reset;
+    uint32_t                            m_icache_paddr_ext_reset;
+
+    ////////////////////////////////////////
+    // Communication with processor ISS
+    ////////////////////////////////////////
+    typename iss_t::InstructionRequest  m_ireq;
+    typename iss_t::InstructionResponse m_irsp;
+    typename iss_t::DataRequest         m_dreq;
+    typename iss_t::DataResponse        m_drsp;
+
+    /////////////////////////////////////////////
+    // debug variables 
+    /////////////////////////////////////////////
+    bool                                m_debug_previous_i_hit;
+    bool                                m_debug_previous_d_hit;
+    bool                                m_debug_icache_fsm;
+    bool                                m_debug_dcache_fsm;
+    bool                                m_debug_cmd_fsm;
+
+    ///////////////////////////////
+    // Software visible REGISTERS
+    ///////////////////////////////
+    sc_signal<uint32_t>     r_mmu_ptpr;             	// page table pointer register
+    sc_signal<uint32_t>     r_mmu_mode;             	// mmu mode register
+    sc_signal<uint32_t>     r_mmu_word_lo;          	// mmu misc data low
+    sc_signal<uint32_t>     r_mmu_word_hi;          	// mmu misc data hight
+    sc_signal<uint32_t>     r_mmu_ibvar;      	    	// mmu bad instruction address
+    sc_signal<uint32_t>     r_mmu_dbvar;              	// mmu bad data address
+    sc_signal<uint32_t>     r_mmu_ietr;                 // mmu instruction error type
+    sc_signal<uint32_t>     r_mmu_detr;                 // mmu data error type
+    uint32_t	            r_mmu_params;		        // read-only
+    uint32_t	            r_mmu_release;		        // read_only
+
+
+    //////////////////////////////
+    // ICACHE FSM REGISTERS
+    //////////////////////////////
+    sc_signal<int>          r_icache_fsm;               // state register
+    sc_signal<int>          r_icache_fsm_save;          // return state for coherence op
+    sc_signal<paddr_t>      r_icache_vci_paddr;      	// physical address
+    sc_signal<uint32_t>     r_icache_vaddr_save;        // virtual address from processor
+
+    // icache miss handling
+    sc_signal<size_t>       r_icache_miss_way;		    // selected way for cache update
+    sc_signal<size_t>       r_icache_miss_set;		    // selected set for cache update
+    sc_signal<size_t>       r_icache_miss_word;		    // word index ( cache update)
+    sc_signal<bool>         r_icache_miss_inval;        // coherence request matching a miss
+    sc_signal<bool>         r_icache_miss_clack;        // waiting for a cleanup acknowledge
+
+    // coherence request handling
+    sc_signal<size_t>       r_icache_cc_way;		    // selected way for cc update/inval
+    sc_signal<size_t>       r_icache_cc_set;		    // selected set for cc update/inval
+    sc_signal<size_t>       r_icache_cc_word;		    // word counter for cc update
+    sc_signal<bool>         r_icache_cc_need_write;     // activate the cache for writing
+
+    // coherence clack handling
+    sc_signal<bool>         r_icache_clack_req;         // clack request
+    sc_signal<size_t>       r_icache_clack_way;		    // clack way
+    sc_signal<size_t>       r_icache_clack_set;		    // clack set
+
+    // icache flush handling
+    sc_signal<size_t>       r_icache_flush_count;	    // slot counter used for cache flush
+
+    // communication between ICACHE FSM and VCI_CMD FSM
+    sc_signal<bool>         r_icache_miss_req;           // cached read miss
+    sc_signal<bool>         r_icache_unc_req;            // uncached read miss
+
+    // communication between ICACHE FSM and DCACHE FSM
+    sc_signal<bool>	        r_icache_tlb_miss_req;       // (set icache/reset dcache)
+    sc_signal<bool>         r_icache_tlb_rsp_error;      // tlb miss response error
+
+    // Filp-Flop in ICACHE FSM for saving the cleanup victim request
+    sc_signal<bool>         r_icache_cleanup_victim_req; 
+    sc_signal<paddr_t>      r_icache_cleanup_victim_nline;
+
+    // communication between ICACHE FSM and CC_SEND FSM
+    sc_signal<bool>         r_icache_cc_send_req;           // ICACHE cc_send request
+    sc_signal<int>          r_icache_cc_send_type;          // ICACHE cc_send request type
+    sc_signal<paddr_t>      r_icache_cc_send_nline;         // ICACHE cc_send nline
+    sc_signal<size_t>       r_icache_cc_send_way;           // ICACHE cc_send way
+    sc_signal<size_t>       r_icache_cc_send_updt_tab_idx;  // ICACHE cc_send update table index
+
+    // Physical address extension for data access
+    sc_signal<uint32_t>     r_icache_paddr_ext;             // CP2 register (if vci_address > 32)
+
+    ///////////////////////////////
+    // DCACHE FSM REGISTERS
+    ///////////////////////////////
+    sc_signal<int>          r_dcache_fsm;               // state register
+    sc_signal<int>          r_dcache_fsm_cc_save;       // return state for coherence op
+    sc_signal<int>          r_dcache_fsm_scan_save;     // return state for tlb scan op
+    // registers written in P0 stage (used in P1 stage)
+    sc_signal<bool>         r_dcache_wbuf_req;          // WBUF must be written in P1 stage
+    sc_signal<bool>         r_dcache_updt_req;          // DCACHE must be updated in P1 stage
+    sc_signal<uint32_t>     r_dcache_save_vaddr;        // virtual address (from proc)
+    sc_signal<uint32_t>     r_dcache_save_wdata;        // write data (from proc)
+    sc_signal<uint32_t>     r_dcache_save_be;           // byte enable (from proc)
+    sc_signal<paddr_t>      r_dcache_save_paddr;        // physical address
+    sc_signal<size_t>       r_dcache_save_cache_way;	// selected way (from dcache)
+    sc_signal<size_t>       r_dcache_save_cache_set;	// selected set (from dcache)
+    sc_signal<size_t>       r_dcache_save_cache_word;	// selected word (from dcache)
+    // registers used by the Dirty bit sub-fsm
+    sc_signal<paddr_t>      r_dcache_dirty_paddr;       // PTE physical address
+    sc_signal<size_t>       r_dcache_dirty_way;	        // way to invalidate in dcache
+    sc_signal<size_t>       r_dcache_dirty_set;	        // set to invalidate in dcache
+
+    // communication between DCACHE FSM and VCI_CMD FSM
+    sc_signal<paddr_t>      r_dcache_vci_paddr;		    // physical address for VCI command
+    sc_signal<uint32_t>     r_dcache_vci_wdata;		    // write unc data for VCI command
+    sc_signal<bool>         r_dcache_vci_miss_req;      // read miss request
+    sc_signal<bool>         r_dcache_vci_unc_req;       // uncacheable request (read/write)
+    sc_signal<uint32_t>     r_dcache_vci_unc_be;        // uncacheable byte enable
+    sc_signal<uint32_t>     r_dcache_vci_unc_write;     // uncacheable data write request
+    sc_signal<bool>         r_dcache_vci_cas_req;       // atomic write request CAS
+    sc_signal<uint32_t>     r_dcache_vci_cas_old;       // previous data value for a CAS
+    sc_signal<uint32_t>     r_dcache_vci_cas_new;       // new data value for a CAS
+    sc_signal<bool>         r_dcache_vci_ll_req;        // atomic read request LL
+    sc_signal<bool>         r_dcache_vci_sc_req;        // atomic write request SC
+    sc_signal<uint32_t>     r_dcache_vci_sc_data;       // SC data (command)
+
+    // register used for XTN inval
+    sc_signal<size_t>       r_dcache_xtn_way;		    // selected way (from dcache)
+    sc_signal<size_t>       r_dcache_xtn_set;		    // selected set (from dcache)
+
+    // handling dcache miss
+    sc_signal<int>	        r_dcache_miss_type;		    // depending on the requester
+    sc_signal<size_t>       r_dcache_miss_word;		    // word index for cache update
+    sc_signal<size_t>       r_dcache_miss_way;		    // selected way for cache update
+    sc_signal<size_t>       r_dcache_miss_set;		    // selected set for cache update
+    sc_signal<bool>         r_dcache_miss_inval;        // coherence request matching a miss
+    sc_signal<bool>         r_dcache_miss_clack;        // waiting for a cleanup acknowledge
+
+    // handling coherence requests
+    sc_signal<size_t>       r_dcache_cc_way;		    // selected way for cc update/inval
+    sc_signal<size_t>       r_dcache_cc_set;		    // selected set for cc update/inval
+    sc_signal<size_t>       r_dcache_cc_word;		    // word counter for cc update
+    sc_signal<bool>         r_dcache_cc_need_write;     // activate the cache for writing
+
+    // coherence clack handling
+    sc_signal<bool>         r_dcache_clack_req;         // clack request
+    sc_signal<size_t>       r_dcache_clack_way;		    // clack way
+    sc_signal<size_t>       r_dcache_clack_set;		    // clack set
+
+    // dcache flush handling
+    sc_signal<size_t>       r_dcache_flush_count;	    // slot counter used for cache flush
+
+    // ll response handling
+    sc_signal<size_t>       r_dcache_ll_rsp_count;	    // flit counter used for ll rsp
+
+    // used by the TLB miss sub-fsm
+    sc_signal<uint32_t>     r_dcache_tlb_vaddr;		    // virtual address for a tlb miss
+    sc_signal<bool>         r_dcache_tlb_ins;		    // target tlb (itlb if true)
+    sc_signal<paddr_t>      r_dcache_tlb_paddr;		    // physical address of pte
+    sc_signal<uint32_t>     r_dcache_tlb_pte_flags;	    // pte1 or first word of pte2
+    sc_signal<uint32_t>     r_dcache_tlb_pte_ppn;	    // second word of pte2
+    sc_signal<size_t>       r_dcache_tlb_cache_way;	    // selected way in dcache
+    sc_signal<size_t>       r_dcache_tlb_cache_set;	    // selected set in dcache
+    sc_signal<size_t>       r_dcache_tlb_cache_word;	// selected word in dcache
+    sc_signal<size_t>       r_dcache_tlb_way;		    // selected way in tlb
+    sc_signal<size_t>       r_dcache_tlb_set;		    // selected set in tlb
+
+    // ITLB and DTLB invalidation
+    sc_signal<paddr_t>      r_dcache_tlb_inval_line;	// line index
+    sc_signal<size_t>       r_dcache_tlb_inval_set;     // tlb set counter
+
+    // communication between DCACHE FSM and ICACHE FSM
+    sc_signal<bool>         r_dcache_xtn_req;           // xtn request (caused by processor)
+    sc_signal<int>          r_dcache_xtn_opcode;        // xtn request type
+
+    // Filp-Flop in DCACHE FSM for saving the cleanup victim request
+    sc_signal<bool>         r_dcache_cleanup_victim_req; 
+    sc_signal<paddr_t>      r_dcache_cleanup_victim_nline;
+
+    // communication between DCACHE FSM and CC_SEND FSM
+    sc_signal<bool>         r_dcache_cc_send_req;           // DCACHE cc_send request
+    sc_signal<int>          r_dcache_cc_send_type;          // DCACHE cc_send request type
+    sc_signal<paddr_t>      r_dcache_cc_send_nline;         // DCACHE cc_send nline
+    sc_signal<size_t>       r_dcache_cc_send_way;           // DCACHE cc_send way
+    sc_signal<size_t>       r_dcache_cc_send_updt_tab_idx;  // DCACHE cc_send update table index
+
+    // dcache directory extension
+    bool                    *r_dcache_in_tlb;               // copy exist in dtlb or itlb
+    bool                    *r_dcache_contains_ptd;         // cache line contains a PTD
+
+    // Physical address extension for data access
+    sc_signal<uint32_t>     r_dcache_paddr_ext;             // CP2 register (if vci_address > 32)
+
+    ///////////////////////////////////
+    // VCI_CMD FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>          r_vci_cmd_fsm;
+    sc_signal<size_t>       r_vci_cmd_min;      	        // used for write bursts
+    sc_signal<size_t>       r_vci_cmd_max;      	        // used for write bursts
+    sc_signal<size_t>       r_vci_cmd_cpt;    		        // used for write bursts
+    sc_signal<bool>         r_vci_cmd_imiss_prio;	        // round-robin between imiss & dmiss
+
+    ///////////////////////////////////
+    // VCI_RSP FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>          r_vci_rsp_fsm;
+    sc_signal<size_t>       r_vci_rsp_cpt;
+    sc_signal<bool>         r_vci_rsp_ins_error;
+    sc_signal<bool>         r_vci_rsp_data_error;
+    GenericFifo<uint32_t>   r_vci_rsp_fifo_icache;	        // response FIFO to ICACHE FSM
+    GenericFifo<uint32_t>   r_vci_rsp_fifo_dcache;	        // response FIFO to DCACHE FSM
+
+    ///////////////////////////////////
+    //  CC_SEND FSM REGISTER
+    ///////////////////////////////////
+    sc_signal<int>          r_cc_send_fsm;                  // state register
+    sc_signal<bool>         r_cc_send_last_client;          // 0 dcache / 1 icache
+
+    ///////////////////////////////////
+    //  CC_RECEIVE FSM REGISTER
+    ///////////////////////////////////
+    sc_signal<int>          r_cc_receive_fsm;               // state register
+    sc_signal<bool>         r_cc_receive_data_ins;          // request to : 0 dcache / 1 icache
+
+    // communication between CC_RECEIVE FSM and ICACHE/DCACHE FSM
+    sc_signal<size_t>       r_cc_receive_word_idx;          // word index
+    GenericFifo<uint32_t>   r_cc_receive_updt_fifo_be;
+    GenericFifo<uint32_t>   r_cc_receive_updt_fifo_data;
+    GenericFifo<bool>       r_cc_receive_updt_fifo_eop;
+
+    // communication between CC_RECEIVE FSM and ICACHE FSM
+    sc_signal<bool>         r_cc_receive_icache_req;        // cc_receive to icache request
+    sc_signal<int>          r_cc_receive_icache_type;       // cc_receive type of request
+    sc_signal<size_t>       r_cc_receive_icache_way;        // cc_receive to icache way
+    sc_signal<size_t>       r_cc_receive_icache_set;        // cc_receive to icache set
+    sc_signal<size_t>       r_cc_receive_icache_updt_tab_idx;  // cc_receive update table index
+    sc_signal<paddr_t>      r_cc_receive_icache_nline;	    // cache line physical address
+
+    // communication between CC_RECEIVE FSM and DCACHE FSM
+    sc_signal<bool>         r_cc_receive_dcache_req;        // cc_receive to dcache request
+    sc_signal<int>          r_cc_receive_dcache_type;       // cc_receive type of request
+    sc_signal<size_t>       r_cc_receive_dcache_way;        // cc_receive to dcache way
+    sc_signal<size_t>       r_cc_receive_dcache_set;        // cc_receive to dcache set
+    sc_signal<size_t>       r_cc_receive_dcache_updt_tab_idx;  // cc_receive update table index
+    sc_signal<paddr_t>      r_cc_receive_dcache_nline;	    // cache line physical address
+
+    ///////////////////////////////////
+    //  DSPIN CLACK INTERFACE REGISTER
+    ///////////////////////////////////
+    sc_signal<bool>         r_dspin_clack_req;
+    sc_signal<uint64_t>     r_dspin_clack_flit;
+    
+    //////////////////////////////////////////////////////////////////
+    // processor, write buffer, caches , TLBs
+    //////////////////////////////////////////////////////////////////
+
+    iss_t                       r_iss;
+    MultiWriteBuffer<paddr_t>	r_wbuf;
+    GenericCache<paddr_t>   	r_icache;
+    GenericCache<paddr_t>    	r_dcache;
+    GenericTlb<paddr_t>       	r_itlb;
+    GenericTlb<paddr_t>     	r_dtlb;
+
+    //////////////////////////////////////////////////////////////////
+    // llsc registration buffer
+    //////////////////////////////////////////////////////////////////
+
+    sc_signal<paddr_t>                     r_dcache_llsc_paddr;
+    sc_signal<uint32_t>                    r_dcache_llsc_key;
+    sc_signal<uint32_t>                    r_dcache_llsc_count;
+    sc_signal<bool>                        r_dcache_llsc_valid;
+
+    ////////////////////////////////
+    // Activity counters
+    ////////////////////////////////
+    uint32_t m_cpt_dcache_data_read;        // DCACHE DATA READ
+    uint32_t m_cpt_dcache_data_write;       // DCACHE DATA WRITE
+    uint32_t m_cpt_dcache_dir_read;         // DCACHE DIR READ
+    uint32_t m_cpt_dcache_dir_write;        // DCACHE DIR WRITE
+
+    uint32_t m_cpt_icache_data_read;        // ICACHE DATA READ
+    uint32_t m_cpt_icache_data_write;       // ICACHE DATA WRITE
+    uint32_t m_cpt_icache_dir_read;         // ICACHE DIR READ
+    uint32_t m_cpt_icache_dir_write;        // ICACHE DIR WRITE
+
+    uint32_t m_cpt_frz_cycles;	            // number of cycles where the cpu is frozen
+    uint32_t m_cpt_total_cycles;	        // total number of cycles
+
+    // Cache activity counters
+    uint32_t m_cpt_data_read;               // total number of read data
+    uint32_t m_cpt_data_write;              // total number of write data
+    uint32_t m_cpt_data_miss;               // number of read miss
+    uint32_t m_cpt_ins_miss;                // number of instruction miss
+    uint32_t m_cpt_unc_read;                // number of read uncached
+    uint32_t m_cpt_write_cached;            // number of cached write
+    uint32_t m_cpt_ins_read;                // number of instruction read
+    uint32_t m_cpt_ins_spc_miss;            // number of speculative instruction miss
+
+    uint32_t m_cost_write_frz;              // number of frozen cycles related to write buffer
+    uint32_t m_cost_data_miss_frz;          // number of frozen cycles related to data miss
+    uint32_t m_cost_unc_read_frz;           // number of frozen cycles related to uncached read
+    uint32_t m_cost_ins_miss_frz;           // number of frozen cycles related to ins miss
+
+    uint32_t m_cpt_imiss_transaction;       // number of VCI instruction miss transactions
+    uint32_t m_cpt_dmiss_transaction;       // number of VCI data miss transactions
+    uint32_t m_cpt_unc_transaction;         // number of VCI uncached read transactions
+    uint32_t m_cpt_write_transaction;       // number of VCI write transactions
+    uint32_t m_cpt_icache_unc_transaction;
+
+    uint32_t m_cost_imiss_transaction;      // cumulated duration for VCI IMISS transactions
+    uint32_t m_cost_dmiss_transaction;      // cumulated duration for VCI DMISS transactions
+    uint32_t m_cost_unc_transaction;        // cumulated duration for VCI UNC transactions
+    uint32_t m_cost_write_transaction;      // cumulated duration for VCI WRITE transactions
+    uint32_t m_cost_icache_unc_transaction; // cumulated duration for VCI IUNC transactions
+    uint32_t m_length_write_transaction;    // cumulated length for VCI WRITE transactions
+
+    // TLB activity counters
+    uint32_t m_cpt_ins_tlb_read;            // number of instruction tlb read
+    uint32_t m_cpt_ins_tlb_miss;            // number of instruction tlb miss
+    uint32_t m_cpt_ins_tlb_update_acc;      // number of instruction tlb update
+    uint32_t m_cpt_ins_tlb_occup_cache;     // number of instruction tlb occupy data cache line
+    uint32_t m_cpt_ins_tlb_hit_dcache;      // number of instruction tlb hit in data cache
+
+    uint32_t m_cpt_data_tlb_read;           // number of data tlb read
+    uint32_t m_cpt_data_tlb_miss;           // number of data tlb miss
+    uint32_t m_cpt_data_tlb_update_acc;     // number of data tlb update
+    uint32_t m_cpt_data_tlb_update_dirty;   // number of data tlb update dirty
+    uint32_t m_cpt_data_tlb_hit_dcache;     // number of data tlb hit in data cache
+    uint32_t m_cpt_data_tlb_occup_cache;    // number of data tlb occupy data cache line
+    uint32_t m_cpt_tlb_occup_dcache;
+
+    uint32_t m_cost_ins_tlb_miss_frz;       // number of frozen cycles related to instruction tlb miss
+    uint32_t m_cost_data_tlb_miss_frz;      // number of frozen cycles related to data tlb miss
+    uint32_t m_cost_ins_tlb_update_acc_frz;    // number of frozen cycles related to instruction tlb update acc
+    uint32_t m_cost_data_tlb_update_acc_frz;   // number of frozen cycles related to data tlb update acc
+    uint32_t m_cost_data_tlb_update_dirty_frz; // number of frozen cycles related to data tlb update dirty
+    uint32_t m_cost_ins_tlb_occup_cache_frz;   // number of frozen cycles related to instruction tlb miss operate in dcache
+    uint32_t m_cost_data_tlb_occup_cache_frz;  // number of frozen cycles related to data tlb miss operate in dcache
+
+    uint32_t m_cpt_itlbmiss_transaction;       // number of itlb miss transactions
+    uint32_t m_cpt_itlb_ll_transaction;        // number of itlb ll acc transactions
+    uint32_t m_cpt_itlb_sc_transaction;        // number of itlb sc acc transactions
+    uint32_t m_cpt_dtlbmiss_transaction;       // number of dtlb miss transactions
+    uint32_t m_cpt_dtlb_ll_transaction;        // number of dtlb ll acc transactions
+    uint32_t m_cpt_dtlb_sc_transaction;        // number of dtlb sc acc transactions
+    uint32_t m_cpt_dtlb_ll_dirty_transaction;  // number of dtlb ll dirty transactions
+    uint32_t m_cpt_dtlb_sc_dirty_transaction;  // number of dtlb sc dirty transactions
+
+    uint32_t m_cost_itlbmiss_transaction;       // cumulated duration for VCI instruction TLB miss transactions
+    uint32_t m_cost_itlb_ll_transaction;        // cumulated duration for VCI instruction TLB ll acc transactions
+    uint32_t m_cost_itlb_sc_transaction;        // cumulated duration for VCI instruction TLB sc acc transactions
+    uint32_t m_cost_dtlbmiss_transaction;       // cumulated duration for VCI data TLB miss transactions
+    uint32_t m_cost_dtlb_ll_transaction;        // cumulated duration for VCI data TLB ll acc transactions
+    uint32_t m_cost_dtlb_sc_transaction;        // cumulated duration for VCI data TLB sc acc transactions
+    uint32_t m_cost_dtlb_ll_dirty_transaction;  // cumulated duration for VCI data TLB ll dirty transactions
+    uint32_t m_cost_dtlb_sc_dirty_transaction;  // cumulated duration for VCI data TLB sc dirty transactions
+
+    // coherence activity counters
+    uint32_t m_cpt_cc_update_icache;            // number of coherence update instruction commands
+    uint32_t m_cpt_cc_update_dcache;            // number of coherence update data commands
+    uint32_t m_cpt_cc_inval_icache;             // number of coherence inval instruction commands
+    uint32_t m_cpt_cc_inval_dcache;             // number of coherence inval data commands
+    uint32_t m_cpt_cc_broadcast;                // number of coherence broadcast commands
+
+    uint32_t m_cost_updt_data_frz;              // number of frozen cycles related to coherence update data packets
+    uint32_t m_cost_inval_ins_frz;              // number of frozen cycles related to coherence inval instruction packets
+    uint32_t m_cost_inval_data_frz;             // number of frozen cycles related to coherence inval data packets
+    uint32_t m_cost_broadcast_frz;              // number of frozen cycles related to coherence broadcast packets
+
+    uint32_t m_cpt_cc_cleanup_ins;              // number of coherence cleanup packets
+    uint32_t m_cpt_cc_cleanup_data;             // number of coherence cleanup packets
+
+    uint32_t m_cpt_icleanup_transaction;        // number of instruction cleanup transactions
+    uint32_t m_cpt_dcleanup_transaction;        // number of instructinumber of data cleanup transactions
+    uint32_t m_cost_icleanup_transaction;       // cumulated duration for VCI instruction cleanup transactions
+    uint32_t m_cost_dcleanup_transaction;       // cumulated duration for VCI data cleanup transactions
+
+    uint32_t m_cost_ins_tlb_inval_frz;      // number of frozen cycles related to checking ins tlb invalidate
+    uint32_t m_cpt_ins_tlb_inval;           // number of ins tlb invalidate
+
+    uint32_t m_cost_data_tlb_inval_frz;     // number of frozen cycles related to checking data tlb invalidate
+    uint32_t m_cpt_data_tlb_inval;          // number of data tlb invalidate
+
+    // FSM activity counters
+    uint32_t m_cpt_fsm_icache     [64];
+    uint32_t m_cpt_fsm_dcache     [64];
+    uint32_t m_cpt_fsm_cmd        [64];
+    uint32_t m_cpt_fsm_rsp        [64];
+    uint32_t m_cpt_fsm_cc_receive [64];
+    uint32_t m_cpt_fsm_cc_send    [64];
+
+    uint32_t m_cpt_stop_simulation;		// used to stop simulation if frozen
+    bool     m_monitor_ok;		        // used to debug cache output  
+    uint32_t m_monitor_base;		    
+    uint32_t m_monitor_length;		    
+
+protected:
+    SC_HAS_PROCESS(VciCcVCacheWrapper);
+
+public:
+    VciCcVCacheWrapper(
+        sc_module_name                      name,
+        const int                           proc_id,
+        const soclib::common::MappingTable  &mtd,
+        const soclib::common::IntTab        &srcid,
+        const size_t                        cc_global_id,
+        const size_t                        itlb_ways,
+        const size_t                        itlb_sets,
+        const size_t                        dtlb_ways,
+        const size_t                        dtlb_sets,
+        const size_t                        icache_ways,
+        const size_t                        icache_sets,
+        const size_t                        icache_words,
+        const size_t                        dcache_ways,
+        const size_t                        dcache_sets,
+        const size_t                        dcache_words,
+        const size_t                        wbuf_nlines,
+        const size_t                        wbuf_nwords,
+        const size_t                        x_width,
+        const size_t                        y_width,
+        const uint32_t                      max_frozen_cycles,
+        const uint32_t                      debug_start_cycle,
+        const bool                          debug_ok );
+
+    ~VciCcVCacheWrapper();
+
+    void print_cpi();
+    void print_stats();
+    void clear_stats();
+    void print_trace(size_t mode = 0);
+    void cache_monitor(paddr_t addr);
+    void start_monitor(paddr_t,paddr_t);
+    void stop_monitor();
+    inline void iss_set_debug_mask(uint v) 
+    {
+	    r_iss.set_debug_mask(v);
+    }
+
+    /////////////////////////////////////////////////////////////
+    // Set the m_dcache_paddr_ext_reset attribute
+    //
+    // The r_dcache_paddr_ext register will be initialized after
+    // reset with the m_dcache_paddr_ext_reset value
+    /////////////////////////////////////////////////////////////
+    inline void set_dcache_paddr_ext_reset(uint32_t v)
+    {
+        m_dcache_paddr_ext_reset = v;
+    }
+
+    /////////////////////////////////////////////////////////////
+    // Set the m_icache_paddr_ext_reset attribute
+    //
+    // The r_icache_paddr_ext register will be initialized after
+    // reset with the m_icache_paddr_ext_reset value
+    /////////////////////////////////////////////////////////////
+    inline void set_icache_paddr_ext_reset(uint32_t v)
+    {
+        m_icache_paddr_ext_reset = v;
+    }
+
+private:
+    void transition();
+    void genMoore();
+
+    soclib_static_assert((int)iss_t::SC_ATOMIC == (int)vci_param::STORE_COND_ATOMIC);
+    soclib_static_assert((int)iss_t::SC_NOT_ATOMIC == (int)vci_param::STORE_COND_NOT_ATOMIC);
+};
+
+}}
+
+#endif /* SOCLIB_CABA_VCI_CC_VCACHE_WRAPPER_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp
===================================================================
--- /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp	(revision 724)
@@ -0,0 +1,6422 @@
+/* -*- c++ -*-
+ * File : vci_cc_vcache_wrapper.cpp
+ * Copyright (c) UPMC, Lip6, SoC
+ * Authors : Alain GREINER, Yang GAO
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Maintainers: cesar.fuguet-tortolero@lip6.fr
+ *              alexandre.joannou@lip6.fr
+ */
+
+#include <cassert>
+#include "arithmetics.h"
+#include "../include/vci_cc_vcache_wrapper.h"
+
+#define DEBUG_DCACHE		1
+#define DEBUG_ICACHE		1
+#define DEBUG_CMD   		0
+
+namespace soclib {
+namespace caba {
+
+namespace {
+const char *icache_fsm_state_str[] = {
+        "ICACHE_IDLE",
+
+        "ICACHE_XTN_TLB_FLUSH",
+        "ICACHE_XTN_CACHE_FLUSH",
+        "ICACHE_XTN_CACHE_FLUSH_GO",
+        "ICACHE_XTN_TLB_INVAL",
+        "ICACHE_XTN_CACHE_INVAL_VA",
+        "ICACHE_XTN_CACHE_INVAL_PA",
+        "ICACHE_XTN_CACHE_INVAL_GO",
+
+        "ICACHE_TLB_WAIT",
+
+        "ICACHE_MISS_SELECT",
+        "ICACHE_MISS_CLEAN",
+        "ICACHE_MISS_WAIT",
+        "ICACHE_MISS_DATA_UPDT",
+        "ICACHE_MISS_DIR_UPDT",
+
+        "ICACHE_UNC_WAIT",
+
+        "ICACHE_CC_CHECK",
+        "ICACHE_CC_UPDT",
+        "ICACHE_CC_INVAL",
+    };
+
+const char *dcache_fsm_state_str[] = {
+        "DCACHE_IDLE",
+
+        "DCACHE_TLB_MISS",
+        "DCACHE_TLB_PTE1_GET",
+        "DCACHE_TLB_PTE1_SELECT",
+        "DCACHE_TLB_PTE1_UPDT",
+        "DCACHE_TLB_PTE2_GET",
+        "DCACHE_TLB_PTE2_SELECT",
+        "DCACHE_TLB_PTE2_UPDT",
+        "DCACHE_TLB_LR_UPDT",
+        "DCACHE_TLB_LR_WAIT",
+        "DCACHE_TLB_RETURN",
+
+        "DCACHE_XTN_SWITCH",
+        "DCACHE_XTN_SYNC",
+        "DCACHE_XTN_IC_INVAL_VA",
+        "DCACHE_XTN_IC_FLUSH",
+        "DCACHE_XTN_IC_INVAL_PA",
+        "DCACHE_XTN_IC_PADDR_EXT",
+        "DCACHE_XTN_IT_INVAL",
+        "DCACHE_XTN_DC_FLUSH",
+        "DCACHE_XTN_DC_FLUSH_GO",
+        "DCACHE_XTN_DC_INVAL_VA",
+        "DCACHE_XTN_DC_INVAL_PA",
+        "DCACHE_XTN_DC_INVAL_END",
+        "DCACHE_XTN_DC_INVAL_GO",
+        "DCACHE_XTN_DT_INVAL",
+
+        "DCACHE_DIRTY_GET_PTE",
+        "DCACHE_DIRTY_WAIT",
+
+        "DCACHE_MISS_SELECT",
+        "DCACHE_MISS_CLEAN",
+        "DCACHE_MISS_WAIT",
+        "DCACHE_MISS_DATA_UPDT",
+        "DCACHE_MISS_DIR_UPDT",
+
+        "DCACHE_UNC_WAIT",
+        "DCACHE_LL_WAIT",
+        "DCACHE_SC_WAIT",
+
+        "DCACHE_CC_CHECK",
+        "DCACHE_CC_UPDT",
+        "DCACHE_CC_INVAL",
+
+        "DCACHE_INVAL_TLB_SCAN",
+    };
+
+const char *cmd_fsm_state_str[] = {
+        "CMD_IDLE",
+        "CMD_INS_MISS",
+        "CMD_INS_UNC",
+        "CMD_DATA_MISS",
+        "CMD_DATA_UNC_READ",
+        "CMD_DATA_UNC_WRITE",
+        "CMD_DATA_WRITE",
+        "CMD_DATA_LL",
+        "CMD_DATA_SC",
+        "CMD_DATA_CAS",
+    };
+
+const char *vci_pktid_type_str[] = {
+        "TYPE_DATA_UNC",
+        "TYPE_READ_DATA_MISS",            
+        "TYPE_READ_INS_UNC",          
+        "TYPE_READ_INS_MISS",
+        "TYPE_WRITE",
+        "TYPE_CAS",
+        "TYPE_LL",
+        "TYPE_SC",
+    };
+
+const char *vci_cmd_type_str[] = {
+        "NOP or STORE_COND",
+        "READ",
+        "WRITE",
+        "LOCKED_READ"
+    };
+
+const char *rsp_fsm_state_str[] = {
+        "RSP_IDLE",
+        "RSP_INS_MISS",
+        "RSP_INS_UNC",
+        "RSP_DATA_MISS",
+        "RSP_DATA_UNC",
+        "RSP_DATA_LL",
+        "RSP_DATA_WRITE",
+    };
+
+const char *cc_receive_fsm_state_str[] = {
+        "CC_RECEIVE_IDLE",
+        "CC_RECEIVE_BRDCAST_HEADER",
+        "CC_RECEIVE_BRDCAST_NLINE",
+        "CC_RECEIVE_INS_INVAL_HEADER",
+        "CC_RECEIVE_INS_INVAL_NLINE",
+        "CC_RECEIVE_INS_UPDT_HEADER",
+        "CC_RECEIVE_INS_UPDT_NLINE",
+        "CC_RECEIVE_INS_UPDT_DATA",
+        "CC_RECEIVE_DATA_INVAL_HEADER",
+        "CC_RECEIVE_DATA_INVAL_NLINE",
+        "CC_RECEIVE_DATA_UPDT_HEADER",
+        "CC_RECEIVE_DATA_UPDT_NLINE",
+        "CC_RECEIVE_DATA_UPDT_DATA",
+    };
+
+const char *cc_send_fsm_state_str[] = {
+        "CC_SEND_IDLE",
+        "CC_SEND_CLEANUP_1",
+        "CC_SEND_CLEANUP_2",
+        "CC_SEND_MULTI_ACK",
+    };
+}
+
+#define tmpl(...) \
+   template<typename vci_param, \
+            size_t   dspin_in_width, \
+            size_t   dspin_out_width, \
+            typename iss_t> __VA_ARGS__ \
+   VciCcVCacheWrapper<vci_param, dspin_in_width, dspin_out_width, iss_t>
+
+using namespace soclib::common;
+
+/////////////////////////////////
+tmpl(/**/)::VciCcVCacheWrapper(
+    sc_module_name 			name,
+    const int 				proc_id,
+    const MappingTable 	    &mtd,
+    const IntTab 	        &srcid,
+    const size_t 	        cc_global_id,
+    const size_t 			itlb_ways,
+    const size_t 			itlb_sets,
+    const size_t 			dtlb_ways,
+    const size_t 			dtlb_sets,
+    const size_t 			icache_ways,
+    const size_t 			icache_sets,
+    const size_t 			icache_words,
+    const size_t 			dcache_ways,
+    const size_t 			dcache_sets,
+    const size_t 			dcache_words,
+    const size_t 			wbuf_nlines,
+    const size_t 			wbuf_nwords,
+    const size_t			x_width,
+    const size_t			y_width,
+    const uint32_t			max_frozen_cycles,
+    const uint32_t			debug_start_cycle,
+    const bool				debug_ok )
+    : soclib::caba::BaseModule(name),
+
+      p_clk("p_clk"),
+      p_resetn("p_resetn"),
+      p_vci("p_vci"),
+      p_dspin_m2p("p_dspin_m2p"),
+      p_dspin_p2m("p_dspin_p2m"),
+      p_dspin_clack("p_dspin_clack"),
+
+      m_cacheability_table( mtd.getCacheabilityTable() ),
+      m_srcid( mtd.indexForId(srcid) ),
+      m_cc_global_id( cc_global_id ),
+      m_nline_width( vci_param::N - (uint32_log2(dcache_words)) - 2 ),
+      m_itlb_ways( itlb_ways ),
+      m_itlb_sets( itlb_sets ),
+      m_dtlb_ways( dtlb_ways ),
+      m_dtlb_sets( dtlb_sets ),
+      m_icache_ways( icache_ways ),
+      m_icache_sets( icache_sets ),
+      m_icache_yzmask( (~0)<<(uint32_log2(icache_words) + 2) ),
+      m_icache_words( icache_words ),
+      m_dcache_ways( dcache_ways ),
+      m_dcache_sets( dcache_sets ),
+      m_dcache_yzmask( (~0)<<(uint32_log2(dcache_words) + 2) ),
+      m_dcache_words( dcache_words ),
+      m_x_width( x_width ),
+      m_y_width( y_width ),
+      m_proc_id( proc_id ),
+      m_max_frozen_cycles( max_frozen_cycles ),
+      m_paddr_nbits( vci_param::N ),
+      m_debug_start_cycle( debug_start_cycle ),
+      m_debug_ok( debug_ok ),
+      m_dcache_paddr_ext_reset(0),
+      m_icache_paddr_ext_reset(0),
+
+      r_mmu_ptpr("r_mmu_ptpr"),
+      r_mmu_mode("r_mmu_mode"),
+      r_mmu_word_lo("r_mmu_word_lo"),
+      r_mmu_word_hi("r_mmu_word_hi"),
+      r_mmu_ibvar("r_mmu_ibvar"),
+      r_mmu_dbvar("r_mmu_dbvar"),
+      r_mmu_ietr("r_mmu_ietr"),
+      r_mmu_detr("r_mmu_detr"),
+
+      r_icache_fsm("r_icache_fsm"),
+      r_icache_fsm_save("r_icache_fsm_save"),
+      r_icache_vci_paddr("r_icache_vci_paddr"),
+      r_icache_vaddr_save("r_icache_vaddr_save"),
+
+      r_icache_miss_way("r_icache_miss_way"),
+      r_icache_miss_set("r_icache_miss_set"),
+      r_icache_miss_word("r_icache_miss_word"),
+      r_icache_miss_inval("r_icache_miss_inval"),
+      r_icache_miss_clack("r_icache_miss_clack"),
+
+      r_icache_cc_way("r_icache_cc_way"),
+      r_icache_cc_set("r_icache_cc_set"),
+      r_icache_cc_word("r_icache_cc_word"),
+      r_icache_cc_need_write("r_icache_cc_need_write"),
+
+      r_icache_flush_count("r_icache_flush_count"),
+
+      r_icache_miss_req("r_icache_miss_req"),
+      r_icache_unc_req("r_icache_unc_req"),
+
+      r_icache_tlb_miss_req("r_icache_tlb_read_req"),
+      r_icache_tlb_rsp_error("r_icache_tlb_rsp_error"),
+
+      r_icache_cleanup_victim_req("r_icache_cleanup_victim_req"),
+      r_icache_cleanup_victim_nline("r_icache_cleanup_victim_nline"),
+
+      r_icache_cc_send_req("r_icache_cc_send_req"),
+      r_icache_cc_send_type("r_icache_cc_send_type"),
+      r_icache_cc_send_nline("r_icache_cc_send_nline"),
+      r_icache_cc_send_way("r_icache_cc_send_way"),
+      r_icache_cc_send_updt_tab_idx("r_icache_cc_send_updt_tab_idx"),
+
+      r_dcache_fsm("r_dcache_fsm"),
+      r_dcache_fsm_cc_save("r_dcache_fsm_cc_save"),
+      r_dcache_fsm_scan_save("r_dcache_fsm_scan_save"),
+
+      r_dcache_wbuf_req("r_dcache_wbuf_req"),
+      r_dcache_updt_req("r_dcache_updt_req"),
+      r_dcache_save_vaddr("r_dcache_save_vaddr"),
+      r_dcache_save_wdata("r_dcache_save_wdata"),
+      r_dcache_save_be("r_dcache_save_be"),
+      r_dcache_save_paddr("r_dcache_save_paddr"),
+      r_dcache_save_cache_way("r_dcache_save_cache_way"),
+      r_dcache_save_cache_set("r_dcache_save_cache_set"),
+      r_dcache_save_cache_word("r_dcache_save_cache_word"),
+
+      r_dcache_dirty_paddr("r_dcache_dirty_paddr"),
+      r_dcache_dirty_way("r_dcache_dirty_way"),
+      r_dcache_dirty_set("r_dcache_dirty_set"),
+
+      r_dcache_vci_paddr("r_dcache_vci_paddr"),
+      r_dcache_vci_wdata("r_dcache_vci_wdata"),
+      r_dcache_vci_miss_req("r_dcache_vci_miss_req"),
+      r_dcache_vci_unc_req("r_dcache_vci_unc_req"),
+      r_dcache_vci_unc_be("r_dcache_vci_unc_be"),
+      r_dcache_vci_unc_write("r_dcache_vci_unc_write"),
+      r_dcache_vci_cas_req("r_dcache_vci_cas_req"),
+      r_dcache_vci_cas_old("r_dcache_vci_cas_old"),
+      r_dcache_vci_cas_new("r_dcache_vci_cas_new"),
+      r_dcache_vci_ll_req("r_dcache_vci_ll_req"),
+      r_dcache_vci_sc_req("r_dcache_vci_sc_req"),
+      r_dcache_vci_sc_data("r_dcache_vci_sc_data"),
+
+      r_dcache_xtn_way("r_dcache_xtn_way"),
+      r_dcache_xtn_set("r_dcache_xtn_set"),
+
+      r_dcache_miss_type("r_dcache_miss_type"),
+      r_dcache_miss_word("r_dcache_miss_word"),
+      r_dcache_miss_way("r_dcache_miss_way"),
+      r_dcache_miss_set("r_dcache_miss_set"),
+      r_dcache_miss_inval("r_dcache_miss_inval"),
+
+      r_dcache_cc_way("r_dcache_cc_way"),
+      r_dcache_cc_set("r_dcache_cc_set"),
+      r_dcache_cc_word("r_dcache_cc_word"),
+      r_dcache_cc_need_write("r_dcache_cc_need_write"),
+
+      r_dcache_flush_count("r_dcache_flush_count"),
+
+      r_dcache_ll_rsp_count("r_dcache_ll_rsp_count"),
+
+      r_dcache_tlb_vaddr("r_dcache_tlb_vaddr"),
+      r_dcache_tlb_ins("r_dcache_tlb_ins"),
+      r_dcache_tlb_pte_flags("r_dcache_tlb_pte_flags"),
+      r_dcache_tlb_pte_ppn("r_dcache_tlb_pte_ppn"),
+      r_dcache_tlb_cache_way("r_dcache_tlb_cache_way"),
+      r_dcache_tlb_cache_set("r_dcache_tlb_cache_set"),
+      r_dcache_tlb_cache_word("r_dcache_tlb_cache_word"),
+      r_dcache_tlb_way("r_dcache_tlb_way"),
+      r_dcache_tlb_set("r_dcache_tlb_set"),
+
+      r_dcache_tlb_inval_line("r_dcache_tlb_inval_line"),
+      r_dcache_tlb_inval_set("r_dcache_tlb_inval_set"),
+
+      r_dcache_xtn_req("r_dcache_xtn_req"),
+      r_dcache_xtn_opcode("r_dcache_xtn_opcode"),
+
+      r_dcache_cleanup_victim_req("r_dcache_cleanup_victim_req"),
+      r_dcache_cleanup_victim_nline("r_dcache_cleanup_victim_nline"),
+    
+      r_dcache_cc_send_req("r_dcache_cc_send_req"),
+      r_dcache_cc_send_type("r_dcache_cc_send_type"),
+      r_dcache_cc_send_nline("r_dcache_cc_send_nline"),
+      r_dcache_cc_send_way("r_dcache_cc_send_way"),
+      r_dcache_cc_send_updt_tab_idx("r_dcache_cc_send_updt_tab_idx"),
+
+      r_vci_cmd_fsm("r_vci_cmd_fsm"),
+      r_vci_cmd_min("r_vci_cmd_min"),
+      r_vci_cmd_max("r_vci_cmd_max"),
+      r_vci_cmd_cpt("r_vci_cmd_cpt"),
+      r_vci_cmd_imiss_prio("r_vci_cmd_imiss_prio"),
+
+      r_vci_rsp_fsm("r_vci_rsp_fsm"),
+      r_vci_rsp_cpt("r_vci_rsp_cpt"),
+      r_vci_rsp_ins_error("r_vci_rsp_ins_error"),
+      r_vci_rsp_data_error("r_vci_rsp_data_error"),
+      r_vci_rsp_fifo_icache("r_vci_rsp_fifo_icache", 2),	// 2 words depth
+      r_vci_rsp_fifo_dcache("r_vci_rsp_fifo_dcache", 2),	// 2 words depth
+
+      r_cc_send_fsm("r_cc_send_fsm"),
+      r_cc_send_last_client("r_cc_send_last_client"),
+
+      r_cc_receive_fsm("r_cc_receive_fsm"),
+      r_cc_receive_data_ins("r_cc_receive_data_ins"),
+      r_cc_receive_word_idx("r_cc_receive_word_idx"),
+      r_cc_receive_updt_fifo_be("r_cc_receive_updt_fifo_be", 2),	// 2 words depth
+      r_cc_receive_updt_fifo_data("r_cc_receive_updt_fifo_data", 2),	// 2 words depth
+      r_cc_receive_updt_fifo_eop("r_cc_receive_updt_fifo_eop", 2),	// 2 words depth
+
+      r_cc_receive_icache_req("r_cc_receive_icache_req"),
+      r_cc_receive_icache_type("r_cc_receive_icache_type"),
+      r_cc_receive_icache_way("r_cc_receive_icache_way"),
+      r_cc_receive_icache_set("r_cc_receive_icache_set"),
+      r_cc_receive_icache_updt_tab_idx("r_cc_receive_icache_updt_tab_idx"),
+      r_cc_receive_icache_nline("r_cc_receive_icache_nline"),
+
+      r_cc_receive_dcache_req("r_cc_receive_dcache_req"),
+      r_cc_receive_dcache_type("r_cc_receive_dcache_type"),
+      r_cc_receive_dcache_way("r_cc_receive_dcache_way"),
+      r_cc_receive_dcache_set("r_cc_receive_dcache_set"),
+      r_cc_receive_dcache_updt_tab_idx("r_cc_receive_dcache_updt_tab_idx"),
+      r_cc_receive_dcache_nline("r_cc_receive_dcache_nline"),
+
+      r_iss(this->name(), proc_id),
+      r_wbuf("wbuf", wbuf_nwords, wbuf_nlines, dcache_words ),
+      r_icache("icache", icache_ways, icache_sets, icache_words),
+      r_dcache("dcache", dcache_ways, dcache_sets, dcache_words),
+      r_itlb("itlb", proc_id, itlb_ways,itlb_sets,vci_param::N),
+      r_dtlb("dtlb", proc_id, dtlb_ways,dtlb_sets,vci_param::N)
+{
+    std::cout << "  - Building VciCcVcacheWrapper : " << name << std::endl;
+
+    assert( ((icache_words*vci_param::B) < (1<<vci_param::K)) and
+             "Need more PLEN bits.");
+
+    assert( (vci_param::T > 2) and ((1<<(vci_param::T-1)) >= (wbuf_nlines)) and
+             "Need more TRDID bits.");
+
+    assert( (icache_words == dcache_words) and
+             "icache_words and dcache_words parameters must be equal");
+
+    assert( (itlb_sets == dtlb_sets) and
+             "itlb_sets and dtlb_sets parameters must be etqual");
+
+    assert( (itlb_ways == dtlb_ways) and
+             "itlb_ways and dtlb_ways parameters must be etqual");
+
+    r_mmu_params = (uint32_log2(m_dtlb_ways)   << 29)   | (uint32_log2(m_dtlb_sets)   << 25) |
+                   (uint32_log2(m_dcache_ways) << 22)   | (uint32_log2(m_dcache_sets) << 18) |
+                   (uint32_log2(m_itlb_ways)   << 15)   | (uint32_log2(m_itlb_sets)   << 11) |
+                   (uint32_log2(m_icache_ways) << 8)    | (uint32_log2(m_icache_sets) << 4)  |
+                   (uint32_log2(m_icache_words<<2));
+
+    r_mmu_release = (uint32_t)(1 << 16) | 0x1;
+
+    r_dcache_in_tlb       = new bool[dcache_ways*dcache_sets];
+    r_dcache_contains_ptd = new bool[dcache_ways*dcache_sets];
+
+    SC_METHOD(transition);
+    dont_initialize();
+    sensitive << p_clk.pos();
+
+    SC_METHOD(genMoore);
+    dont_initialize();
+    sensitive << p_clk.neg();
+
+    typename iss_t::CacheInfo cache_info;
+    cache_info.has_mmu = true;
+    cache_info.icache_line_size = icache_words*sizeof(uint32_t);
+    cache_info.icache_assoc = icache_ways;
+    cache_info.icache_n_lines = icache_sets;
+    cache_info.dcache_line_size = dcache_words*sizeof(uint32_t);
+    cache_info.dcache_assoc = dcache_ways;
+    cache_info.dcache_n_lines = dcache_sets;
+    r_iss.setCacheInfo(cache_info);
+}
+
+/////////////////////////////////////
+tmpl(/**/)::~VciCcVCacheWrapper()
+/////////////////////////////////////
+{
+    delete [] r_dcache_in_tlb;
+    delete [] r_dcache_contains_ptd;
+}
+
+////////////////////////
+tmpl(void)::print_cpi()
+////////////////////////
+{
+    std::cout << name() << " CPI = "
+        << (float)m_cpt_total_cycles/(m_cpt_total_cycles - m_cpt_frz_cycles) << std::endl ;
+}
+
+////////////////////////////////////
+tmpl(void)::print_trace(size_t mode)
+////////////////////////////////////
+{
+    // b0 : write buffer trace
+    // b2 : dcache trace
+    // b3 : icache trace
+    // b4 : dtlb trace
+    // b5 : itlb trace
+
+    std::cout << std::dec << "PROC " << name() << std::endl;
+
+    std::cout << "  " << m_ireq << std::endl;
+    std::cout << "  " << m_irsp << std::endl;
+    std::cout << "  " << m_dreq << std::endl;
+    std::cout << "  " << m_drsp << std::endl;
+
+    std::cout << "  " << icache_fsm_state_str[r_icache_fsm.read()]
+              << " | " << dcache_fsm_state_str[r_dcache_fsm.read()]
+              << " | " << cmd_fsm_state_str[r_vci_cmd_fsm.read()]
+              << " | " << rsp_fsm_state_str[r_vci_rsp_fsm.read()]
+              << " | " << cc_receive_fsm_state_str[r_cc_receive_fsm.read()]
+              << " | " << cc_send_fsm_state_str[r_cc_send_fsm.read()]
+              << " | MMU = " << r_mmu_mode.read();
+
+    if (r_dcache_updt_req.read() ) std::cout << " | P1_UPDT";
+    if (r_dcache_wbuf_req.read() ) std::cout << " | P1_WBUF";
+    std::cout << std::endl;
+
+    if(mode & 0x01)
+    {
+        if ( r_icache_miss_req.read()     ) std::cout << "  IMISS_REQ" << std::endl;
+        if ( r_icache_unc_req.read()      ) std::cout << "  IUNC_REQ" << std::endl;
+        if ( r_dcache_vci_miss_req.read() ) std::cout << "  DMISS_REQ" << std::endl;
+        if ( r_dcache_vci_unc_req.read()  ) std::cout << "  DUNC_REQ" << std::endl;
+
+        r_wbuf.printTrace((mode>>1)&1);
+    }
+    if(mode & 0x04)
+    {
+        std::cout << "  Data Cache" << std::endl;
+        r_dcache.printTrace();
+    }
+    if(mode & 0x08)
+    {
+        std::cout << "  Instruction Cache" << std::endl;
+        r_icache.printTrace();
+    }
+    if(mode & 0x10)
+    {
+        std::cout << "  Data TLB" << std::endl;
+        r_dtlb.printTrace();
+    }
+    if(mode & 0x20)
+    {
+        std::cout << "  Instruction TLB" << std::endl;
+        r_itlb.printTrace();
+    }
+}
+
+//////////////////////////////////////////
+tmpl(void)::cache_monitor( paddr_t addr )
+//////////////////////////////////////////
+{
+    bool        cache_hit;
+    size_t	    cache_way = 0;
+    size_t	    cache_set = 0;
+    size_t	    cache_word = 0;
+    uint32_t	cache_rdata = 0;
+
+    cache_hit = r_dcache.read_neutral( addr,
+                                       &cache_rdata,
+                                       &cache_way,
+                                       &cache_set,
+                                       &cache_word );
+
+    if ( cache_hit != m_debug_previous_d_hit )
+    {
+        std::cout << "Monitor PROC " << name()
+                  << " DCACHE at cycle " << std::dec << m_cpt_total_cycles
+                  << " / HIT = " << cache_hit 
+                  << " / PADDR = " << std::hex << addr
+                  << " / DATA = " << cache_rdata 
+                  << " / WAY = " << cache_way << std::endl;
+	    m_debug_previous_d_hit = cache_hit;
+    }
+
+    cache_hit = r_icache.read_neutral( addr,
+                                       &cache_rdata,
+                                       &cache_way,
+                                       &cache_set,
+                                       &cache_word );
+
+    if ( cache_hit != m_debug_previous_i_hit )
+    {
+        std::cout << "Monitor PROC " << name()
+                  << " ICACHE at cycle " << std::dec << m_cpt_total_cycles
+                  << " / HIT = " << cache_hit 
+                  << " / PADDR = " << std::hex << addr
+                  << " / DATA = " << cache_rdata 
+                  << " / WAY = " << cache_way << std::endl;
+	    m_debug_previous_i_hit = cache_hit;
+    }
+}
+
+/*
+////////////////////////
+tmpl(void)::print_stats()
+////////////////////////
+{
+    float run_cycles = (float)(m_cpt_total_cycles - m_cpt_frz_cycles);
+    std::cout << name() << std::endl
+        << "- CPI                    = " << (float)m_cpt_total_cycles/run_cycles << std::endl
+        << "- READ RATE              = " << (float)m_cpt_read/run_cycles << std::endl
+        << "- WRITE RATE             = " << (float)m_cpt_write/run_cycles << std::endl
+        << "- IMISS_RATE             = " << (float)m_cpt_ins_miss/m_cpt_ins_read << std::endl
+        << "- DMISS RATE             = " << (float)m_cpt_data_miss/(m_cpt_read-m_cpt_unc_read) << std::endl
+        << "- INS MISS COST          = " << (float)m_cost_ins_miss_frz/m_cpt_ins_miss << std::endl
+        << "- DATA MISS COST         = " << (float)m_cost_data_miss_frz/m_cpt_data_miss << std::endl
+        << "- WRITE COST             = " << (float)m_cost_write_frz/m_cpt_write << std::endl
+        << "- UNC COST               = " << (float)m_cost_unc_read_frz/m_cpt_unc_read << std::endl
+        << "- UNCACHED READ RATE     = " << (float)m_cpt_unc_read/m_cpt_read << std::endl
+        << "- CACHED WRITE RATE      = " << (float)m_cpt_write_cached/m_cpt_write << std::endl
+        << "- INS TLB MISS RATE      = " << (float)m_cpt_ins_tlb_miss/m_cpt_ins_tlb_read << std::endl
+        << "- DATA TLB MISS RATE     = " << (float)m_cpt_data_tlb_miss/m_cpt_data_tlb_read << std::endl
+        << "- ITLB MISS COST         = " << (float)m_cost_ins_tlb_miss_frz/m_cpt_ins_tlb_miss << std::endl
+        << "- DTLB MISS COST         = " << (float)m_cost_data_tlb_miss_frz/m_cpt_data_tlb_miss << std::endl
+        << "- ITLB UPDATE ACC COST   = " << (float)m_cost_ins_tlb_update_acc_frz/m_cpt_ins_tlb_update_acc << std::endl
+        << "- DTLB UPDATE ACC COST   = " << (float)m_cost_data_tlb_update_acc_frz/m_cpt_data_tlb_update_acc << std::endl
+        << "- DTLB UPDATE DIRTY COST = " << (float)m_cost_data_tlb_update_dirty_frz/m_cpt_data_tlb_update_dirty << std::endl
+        << "- ITLB HIT IN DCACHE RATE= " << (float)m_cpt_ins_tlb_hit_dcache/m_cpt_ins_tlb_miss << std::endl
+        << "- DTLB HIT IN DCACHE RATE= " << (float)m_cpt_data_tlb_hit_dcache/m_cpt_data_tlb_miss << std::endl
+        << "- DCACHE FROZEN BY ITLB  = " << (float)m_cost_ins_tlb_occup_cache_frz/m_cpt_dcache_frz_cycles << std::endl
+        << "- DCACHE FOR TLB %       = " << (float)m_cpt_tlb_occup_dcache/(m_dcache_ways*m_dcache_sets) << std::endl
+        << "- NB CC BROADCAST        = " << m_cpt_cc_broadcast << std::endl
+        << "- NB CC UPDATE DATA      = " << m_cpt_cc_update_data << std::endl
+        << "- NB CC INVAL DATA       = " << m_cpt_cc_inval_data << std::endl
+        << "- NB CC INVAL INS        = " << m_cpt_cc_inval_ins << std::endl
+        << "- CC BROADCAST COST      = " << (float)m_cost_broadcast_frz/m_cpt_cc_broadcast << std::endl
+        << "- CC UPDATE DATA COST    = " << (float)m_cost_updt_data_frz/m_cpt_cc_update_data << std::endl
+        << "- CC INVAL DATA COST     = " << (float)m_cost_inval_data_frz/m_cpt_cc_inval_data << std::endl
+        << "- CC INVAL INS COST      = " << (float)m_cost_inval_ins_frz/m_cpt_cc_inval_ins << std::endl
+        << "- NB CC CLEANUP DATA     = " << m_cpt_cc_cleanup_data << std::endl
+        << "- NB CC CLEANUP INS      = " << m_cpt_cc_cleanup_ins << std::endl
+        << "- IMISS TRANSACTION      = " << (float)m_cost_imiss_transaction/m_cpt_imiss_transaction << std::endl
+        << "- DMISS TRANSACTION      = " << (float)m_cost_dmiss_transaction/m_cpt_dmiss_transaction << std::endl
+        << "- UNC TRANSACTION        = " << (float)m_cost_unc_transaction/m_cpt_unc_transaction << std::endl
+        << "- WRITE TRANSACTION      = " << (float)m_cost_write_transaction/m_cpt_write_transaction << std::endl
+        << "- WRITE LENGTH           = " << (float)m_length_write_transaction/m_cpt_write_transaction << std::endl
+        << "- ITLB MISS TRANSACTION  = " << (float)m_cost_itlbmiss_transaction/m_cpt_itlbmiss_transaction << std::endl
+        << "- DTLB MISS TRANSACTION  = " << (float)m_cost_dtlbmiss_transaction/m_cpt_dtlbmiss_transaction << std::endl;
+}
+
+////////////////////////
+tmpl(void)::clear_stats()
+////////////////////////
+{
+    m_cpt_dcache_data_read  = 0;
+    m_cpt_dcache_data_write = 0;
+    m_cpt_dcache_dir_read   = 0;
+    m_cpt_dcache_dir_write  = 0;
+    m_cpt_icache_data_read  = 0;
+    m_cpt_icache_data_write = 0;
+    m_cpt_icache_dir_read   = 0;
+    m_cpt_icache_dir_write  = 0;
+
+    m_cpt_frz_cycles        = 0;
+    m_cpt_dcache_frz_cycles = 0;
+    m_cpt_total_cycles      = 0;
+
+    m_cpt_read         = 0;
+    m_cpt_write        = 0;
+    m_cpt_data_miss    = 0;
+    m_cpt_ins_miss     = 0;
+    m_cpt_unc_read     = 0;
+    m_cpt_write_cached = 0;
+    m_cpt_ins_read     = 0;
+
+    m_cost_write_frz     = 0;
+    m_cost_data_miss_frz = 0;
+    m_cost_unc_read_frz  = 0;
+    m_cost_ins_miss_frz  = 0;
+
+    m_cpt_imiss_transaction      = 0;
+    m_cpt_dmiss_transaction      = 0;
+    m_cpt_unc_transaction        = 0;
+    m_cpt_write_transaction      = 0;
+    m_cpt_icache_unc_transaction = 0;
+
+    m_cost_imiss_transaction      = 0;
+    m_cost_dmiss_transaction      = 0;
+    m_cost_unc_transaction        = 0;
+    m_cost_write_transaction      = 0;
+    m_cost_icache_unc_transaction = 0;
+    m_length_write_transaction    = 0;
+
+    m_cpt_ins_tlb_read       = 0;
+    m_cpt_ins_tlb_miss       = 0;
+    m_cpt_ins_tlb_update_acc = 0;
+
+    m_cpt_data_tlb_read         = 0;
+    m_cpt_data_tlb_miss         = 0;
+    m_cpt_data_tlb_update_acc   = 0;
+    m_cpt_data_tlb_update_dirty = 0;
+    m_cpt_ins_tlb_hit_dcache    = 0;
+    m_cpt_data_tlb_hit_dcache   = 0;
+    m_cpt_ins_tlb_occup_cache   = 0;
+    m_cpt_data_tlb_occup_cache  = 0;
+
+    m_cost_ins_tlb_miss_frz          = 0;
+    m_cost_data_tlb_miss_frz         = 0;
+    m_cost_ins_tlb_update_acc_frz    = 0;
+    m_cost_data_tlb_update_acc_frz   = 0;
+    m_cost_data_tlb_update_dirty_frz = 0;
+    m_cost_ins_tlb_occup_cache_frz   = 0;
+    m_cost_data_tlb_occup_cache_frz  = 0;
+
+    m_cpt_itlbmiss_transaction      = 0;
+    m_cpt_itlb_ll_transaction       = 0;
+    m_cpt_itlb_sc_transaction       = 0;
+    m_cpt_dtlbmiss_transaction      = 0;
+    m_cpt_dtlb_ll_transaction       = 0;
+    m_cpt_dtlb_sc_transaction       = 0;
+    m_cpt_dtlb_ll_dirty_transaction = 0;
+    m_cpt_dtlb_sc_dirty_transaction = 0;
+
+    m_cost_itlbmiss_transaction      = 0;
+    m_cost_itlb_ll_transaction       = 0;
+    m_cost_itlb_sc_transaction       = 0;
+    m_cost_dtlbmiss_transaction      = 0;
+    m_cost_dtlb_ll_transaction       = 0;
+    m_cost_dtlb_sc_transaction       = 0;
+    m_cost_dtlb_ll_dirty_transaction = 0;
+    m_cost_dtlb_sc_dirty_transaction = 0;
+
+    m_cpt_cc_update_data = 0;
+    m_cpt_cc_inval_ins   = 0;
+    m_cpt_cc_inval_data  = 0;
+    m_cpt_cc_broadcast   = 0;
+
+    m_cost_updt_data_frz  = 0;
+    m_cost_inval_ins_frz  = 0;
+    m_cost_inval_data_frz = 0;
+    m_cost_broadcast_frz  = 0;
+
+    m_cpt_cc_cleanup_data = 0;
+    m_cpt_cc_cleanup_ins  = 0;
+}
+
+*/
+
+/////////////////////////
+tmpl(void)::transition()
+/////////////////////////
+{
+    if ( not p_resetn.read() )
+    {
+        r_iss.reset();
+        r_wbuf.reset();
+        r_icache.reset();
+        r_dcache.reset();
+        r_itlb.reset();
+        r_dtlb.reset();
+
+        r_dcache_fsm      = DCACHE_IDLE;
+        r_icache_fsm      = ICACHE_IDLE;
+        r_vci_cmd_fsm     = CMD_IDLE;
+        r_vci_rsp_fsm     = RSP_IDLE;
+        r_cc_receive_fsm  = CC_RECEIVE_IDLE;
+        r_cc_send_fsm     = CC_SEND_IDLE;
+
+        // reset data physical address extension
+        r_dcache_paddr_ext = m_dcache_paddr_ext_reset;
+
+        // reset inst physical address extension
+        r_icache_paddr_ext = m_icache_paddr_ext_reset;
+
+        // reset dcache directory extension
+        for (size_t i=0 ; i< m_dcache_ways*m_dcache_sets ; i++)
+        {
+            r_dcache_in_tlb[i]       = false;
+            r_dcache_contains_ptd[i] = false;
+        }
+
+        // Response FIFOs and cleanup buffer
+        r_vci_rsp_fifo_icache.init();
+        r_vci_rsp_fifo_dcache.init();
+
+        // ICACHE & DCACHE activated
+        // ITLB & DTLB desactivated
+        r_mmu_mode = 0x3;
+
+	    // No request from ICACHE FSM to CMD FSM
+        r_icache_miss_req          = false;
+        r_icache_unc_req           = false;
+
+        // No request from ICACHE_FSM to DCACHE FSM
+        r_icache_tlb_miss_req      = false;
+
+        // No request from ICACHE_FSM to CC_SEND FSM
+        r_icache_cc_send_req       = false;
+        r_icache_cleanup_victim_req = false;
+
+        r_icache_clack_req         = false;
+
+        // No pending write in pipeline
+        r_dcache_wbuf_req          = false;
+        r_dcache_updt_req          = false;
+
+        // No request from DCACHE_FSM to CMD_FSM
+        r_dcache_vci_miss_req      = false;
+        r_dcache_vci_unc_req       = false;
+        r_dcache_vci_cas_req       = false;
+        r_dcache_vci_ll_req        = false;
+        r_dcache_vci_sc_req        = false;
+
+        // No processor XTN request pending
+        r_dcache_xtn_req           = false;
+
+        // No request from DCACHE FSM to CC_SEND FSM
+        r_dcache_cc_send_req       = false;
+        r_dcache_cleanup_victim_req = false;
+
+        r_dcache_clack_req         = false;
+
+        // No request from CC_RECEIVE FSM to ICACHE/DCACHE FSMs
+        r_cc_receive_icache_req    = false;
+        r_cc_receive_dcache_req    = false;
+
+        // last cc_send client was dcache
+        r_cc_send_last_client      = false;
+
+        // No pending cleanup after a replacement
+        r_icache_miss_clack        = false;
+        r_dcache_miss_clack        = false;
+
+        // No signalisation of a coherence request matching a pending miss
+        r_icache_miss_inval        = false;
+        r_dcache_miss_inval        = false;
+
+        r_dspin_clack_req          = false;
+
+        // No signalisation  of errors
+        r_vci_rsp_ins_error        = false;
+        r_vci_rsp_data_error       = false;
+
+        // Debug variables
+        m_debug_previous_i_hit     = false;
+        m_debug_previous_d_hit     = false;
+        m_debug_icache_fsm	       = false;
+        m_debug_dcache_fsm	       = false;
+        m_debug_cmd_fsm 	       = false;
+
+        // activity counters
+        m_cpt_dcache_data_read  = 0;
+        m_cpt_dcache_data_write = 0;
+        m_cpt_dcache_dir_read   = 0;
+        m_cpt_dcache_dir_write  = 0;
+        m_cpt_icache_data_read  = 0;
+        m_cpt_icache_data_write = 0;
+        m_cpt_icache_dir_read   = 0;
+        m_cpt_icache_dir_write  = 0;
+
+        m_cpt_frz_cycles        = 0;
+        m_cpt_total_cycles      = 0;
+        m_cpt_stop_simulation   = 0;
+
+        m_cpt_data_miss         = 0;
+        m_cpt_ins_miss          = 0;
+        m_cpt_unc_read          = 0;
+        m_cpt_write_cached      = 0;
+        m_cpt_ins_read          = 0;
+
+        m_cost_write_frz        = 0;
+        m_cost_data_miss_frz    = 0;
+        m_cost_unc_read_frz     = 0;
+        m_cost_ins_miss_frz     = 0;
+
+        m_cpt_imiss_transaction = 0;
+        m_cpt_dmiss_transaction = 0;
+        m_cpt_unc_transaction   = 0;
+        m_cpt_write_transaction = 0;
+        m_cpt_icache_unc_transaction = 0;
+
+        m_cost_imiss_transaction      = 0;
+        m_cost_dmiss_transaction      = 0;
+        m_cost_unc_transaction        = 0;
+        m_cost_write_transaction      = 0;
+        m_cost_icache_unc_transaction = 0;
+        m_length_write_transaction    = 0;
+
+        m_cpt_ins_tlb_read       = 0;
+        m_cpt_ins_tlb_miss       = 0;
+        m_cpt_ins_tlb_update_acc = 0;
+
+        m_cpt_data_tlb_read         = 0;
+        m_cpt_data_tlb_miss         = 0;
+        m_cpt_data_tlb_update_acc   = 0;
+        m_cpt_data_tlb_update_dirty = 0;
+        m_cpt_ins_tlb_hit_dcache    = 0;
+        m_cpt_data_tlb_hit_dcache   = 0;
+        m_cpt_ins_tlb_occup_cache   = 0;
+        m_cpt_data_tlb_occup_cache  = 0;
+
+        m_cost_ins_tlb_miss_frz          = 0;
+        m_cost_data_tlb_miss_frz         = 0;
+        m_cost_ins_tlb_update_acc_frz    = 0;
+        m_cost_data_tlb_update_acc_frz   = 0;
+        m_cost_data_tlb_update_dirty_frz = 0;
+        m_cost_ins_tlb_occup_cache_frz   = 0;
+        m_cost_data_tlb_occup_cache_frz  = 0;
+
+    	m_cpt_ins_tlb_inval       = 0;
+    	m_cpt_data_tlb_inval      = 0;
+    	m_cost_ins_tlb_inval_frz  = 0;
+    	m_cost_data_tlb_inval_frz = 0;
+
+        m_cpt_cc_broadcast   = 0;
+
+   	    m_cost_updt_data_frz  = 0;
+   	    m_cost_inval_ins_frz  = 0;
+   	    m_cost_inval_data_frz = 0;
+   	    m_cost_broadcast_frz  = 0;
+
+   	    m_cpt_cc_cleanup_data = 0;
+   	    m_cpt_cc_cleanup_ins  = 0;
+
+        m_cpt_itlbmiss_transaction      = 0;
+        m_cpt_itlb_ll_transaction       = 0;
+        m_cpt_itlb_sc_transaction       = 0;
+        m_cpt_dtlbmiss_transaction      = 0;
+        m_cpt_dtlb_ll_transaction       = 0;
+        m_cpt_dtlb_sc_transaction       = 0;
+        m_cpt_dtlb_ll_dirty_transaction = 0;
+        m_cpt_dtlb_sc_dirty_transaction = 0;
+
+        m_cost_itlbmiss_transaction      = 0;
+        m_cost_itlb_ll_transaction       = 0;
+        m_cost_itlb_sc_transaction       = 0;
+        m_cost_dtlbmiss_transaction      = 0;
+        m_cost_dtlb_ll_transaction       = 0;
+        m_cost_dtlb_sc_transaction       = 0;
+        m_cost_dtlb_ll_dirty_transaction = 0;
+        m_cost_dtlb_sc_dirty_transaction = 0;
+/*
+        m_cpt_dcache_frz_cycles = 0;
+        m_cpt_read              = 0;
+        m_cpt_write             = 0;
+   	    m_cpt_cc_update_data = 0;
+   	    m_cpt_cc_inval_ins   = 0;
+   	    m_cpt_cc_inval_data  = 0;
+*/
+
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_icache      [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_dcache      [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_cmd         [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_rsp         [i]   = 0;
+
+        // init the llsc reservation buffer
+        r_dcache_llsc_valid = false;
+        m_monitor_ok = false;
+
+        return;
+    }
+
+    // Response FIFOs default values
+    bool       vci_rsp_fifo_icache_get   = false;
+    bool       vci_rsp_fifo_icache_put   = false;
+    uint32_t   vci_rsp_fifo_icache_data  = 0;
+
+    bool       vci_rsp_fifo_dcache_get   = false;
+    bool       vci_rsp_fifo_dcache_put   = false;
+    uint32_t   vci_rsp_fifo_dcache_data  = 0;
+
+    // updt fifo
+    bool       cc_receive_updt_fifo_get  = false;
+    bool       cc_receive_updt_fifo_put  = false;
+    uint32_t   cc_receive_updt_fifo_be   = 0;
+    uint32_t   cc_receive_updt_fifo_data = 0;
+    bool       cc_receive_updt_fifo_eop  = false;
+
+#ifdef INSTRUMENTATION
+    m_cpt_fsm_dcache  [r_dcache_fsm.read() ] ++;
+    m_cpt_fsm_icache  [r_icache_fsm.read() ] ++;
+    m_cpt_fsm_cmd     [r_vci_cmd_fsm.read()] ++;
+    m_cpt_fsm_rsp     [r_vci_rsp_fsm.read()] ++;
+    m_cpt_fsm_tgt     [r_tgt_fsm.read()    ] ++;
+    m_cpt_fsm_cleanup [r_cleanup_cmd_fsm.read()] ++;
+#endif
+
+    m_cpt_total_cycles++;
+
+    m_debug_icache_fsm = m_debug_icache_fsm ||
+        ((m_cpt_total_cycles > m_debug_start_cycle) and m_debug_ok);
+    m_debug_dcache_fsm = m_debug_dcache_fsm ||
+        ((m_cpt_total_cycles > m_debug_start_cycle) and m_debug_ok);
+    m_debug_cmd_fsm = m_debug_cmd_fsm ||
+        ((m_cpt_total_cycles > m_debug_start_cycle) and m_debug_ok);
+
+    /////////////////////////////////////////////////////////////////////
+    // Get data and instruction requests from processor
+    ///////////////////////////////////////////////////////////////////////
+
+    r_iss.getRequests(m_ireq, m_dreq);
+
+    ////////////////////////////////////////////////////////////////////////////////////
+    //      ICACHE_FSM
+    //
+    // 1/ Coherence operations
+    //    They are handled as interrupts generated by the CC_RECEIVE FSM.
+    //    - There is a coherence request when r_tgt_icache_req is set.
+    //    They are taken in IDLE, MISS_WAIT, MISS_DIR_UPDT, UNC_WAIT, states.
+    //    - There is a cleanup ack request when r_cleanup_icache_req is set.
+    //    They are taken in IDLE, MISS_SELECT, MISS_CLEAN, MISS_WAIT,
+    //    MISS_DATA_UPDT, MISS_DIR_UPDT and UNC_WAIT states.
+    //    - For both types of requests, actions associated to the pre-empted state
+    //    are not executed. The DCACHE FSM goes to the proper sub-FSM (CC_CHECK
+    //    or CC_CLACK) to execute the requested coherence operation, and returns
+    //    to the pre-empted state.
+    //
+    // 2/ Processor requests
+    //    They are taken in IDLE state only. In case of cache miss, or uncacheable
+    //    instruction, the ICACHE FSM request a VCI transaction to CMD FSM,
+    //    using the r_icache_miss_req or r_icache_unc_req flip-flops. These
+    //    flip-flops are reset when the transaction starts.
+    //    - In case of miss the ICACHE FSM  goes to the ICACHE_MISS_SELECT state
+    //    to select a slot and possibly request a cleanup transaction to the CC_SEND FSM.
+    //    It goes next to the ICACHE_MISS_WAIT state waiting a response from RSP FSM,
+    //    The availability of the missing cache line is signaled by the response fifo,
+    //    and the cache update is done (one word per cycle) in the ICACHE_MISS_DATA_UPDT
+    //    and ICACHE_MISS_DIR_UPDT states.
+    //    - In case of uncacheable instruction, the ICACHE FSM goes to ICACHE_UNC_WAIT
+    //    to wait the response from the RSP FSM, through the response fifo.
+    //    The missing instruction is directly returned to processor in this state.
+    //
+    // 3/ TLB miss
+    //    In case of tlb miss, the ICACHE FSM request to the DCACHE FSM to update the
+    //    ITLB using the r_icache_tlb_miss_req flip-flop and the r_icache_tlb_miss_vaddr
+    //    register, and goes to the ICACHE_TLB_WAIT state.
+    //    The tlb update is entirely done by the DCACHE FSM (who becomes the owner
+    //    of ITLB until the update is completed, and reset r_icache_tlb_miss_req
+    //    to signal the completion.
+    //
+    // 4/ XTN requests
+    //    The DCACHE FSM signals XTN processor requests to ICACHE_FSM
+    //    using the r_dcache_xtn_req flip-flop.
+    //    The request opcode and the address to be invalidated are transmitted
+    //    in the r_dcache_xtn_opcode and r_dcache_save_wdata registers respectively.
+    //    The r_dcache_xtn_req flip-flop is reset by the ICACHE_FSM when the operation
+    //    is completed.
+    //
+    // 5/ Error Handling
+    //    The r_vci_rsp_ins_error flip-flop is set by the RSP FSM in case of bus error
+    //    in a cache miss or uncacheable read VCI transaction. Nothing is written
+    //    in the response fifo. This flip-flop is reset by the ICACHE-FSM.
+    ////////////////////////////////////////////////////////////////////////////////////////
+
+    // default value for m_irsp
+    m_irsp.valid       = false;
+    m_irsp.error       = false;
+    m_irsp.instruction = 0;
+
+    switch( r_icache_fsm.read() )
+    {
+    /////////////////
+    case ICACHE_IDLE:	// In this state, we handle processor requests, XTN requests,
+                        // and coherence requests with a fixed priority:
+                        // 1/ Coherence requests                        => ICACHE_CC_CHECK
+                        // 2/ XTN processor requests (from DCACHE FSM)  => ICACHE_XTN_*
+                        // 3/ tlb miss                                  => ICACHE_TLB_WAIT
+                        // 4/ cacheable read miss                       => ICACHE_MISS_SELECT
+                        // 5/ uncacheable read miss                     => ICACHE_UNC_REQ
+    {
+        // coherence clack interrupt
+        if ( r_icache_clack_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        // coherence interrupt
+        if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read())
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        // XTN requests sent by DCACHE FSM
+        // These request are not executed in this IDLE state (except XTN_INST_PADDR_EXT),
+        // because they require access to icache or itlb, that are already accessed
+        if ( r_dcache_xtn_req.read() )
+        {
+            if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_PTPR )
+            {
+                r_icache_fsm         = ICACHE_XTN_TLB_FLUSH;
+            }
+            else if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_ICACHE_FLUSH)
+            {
+                r_icache_flush_count = 0;
+                r_icache_fsm         = ICACHE_XTN_CACHE_FLUSH;
+            }
+            else if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_ITLB_INVAL)
+            {
+                r_icache_fsm         = ICACHE_XTN_TLB_INVAL;
+            }
+            else if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_ICACHE_INVAL)
+            {
+                r_icache_fsm         = ICACHE_XTN_CACHE_INVAL_VA;
+            }
+            else if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_MMU_ICACHE_PA_INV)
+            {
+                if (sizeof(paddr_t) <= 32)
+                {
+                    assert(r_mmu_word_hi.read() == 0 &&
+                    "illegal XTN request in ICACHE: high bits should be 0 for 32bit paddr");
+                    r_icache_vci_paddr = (paddr_t)r_mmu_word_lo.read();
+                }
+                else
+                {
+                    r_icache_vci_paddr = (paddr_t)r_mmu_word_hi.read() << 32 |
+                                         (paddr_t)r_mmu_word_lo.read();
+                }
+                r_icache_fsm = ICACHE_XTN_CACHE_INVAL_PA;
+            }
+            else if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_INST_PADDR_EXT)
+            {
+                r_icache_paddr_ext = r_dcache_save_wdata.read(); 
+                r_dcache_xtn_req   = false;
+            }
+            else
+            {
+               assert( false and
+               "undefined XTN request received by ICACHE FSM");
+            }
+            break;
+        } // end if xtn_req
+
+        // processor request
+        if ( m_ireq.valid )
+        {
+            bool	    cacheable;
+            paddr_t	    paddr;
+            bool        tlb_hit = false;
+            pte_info_t  tlb_flags;
+            size_t      tlb_way;
+            size_t      tlb_set;
+            paddr_t     tlb_nline;
+            uint32_t    cache_inst = 0;
+            size_t      cache_way;
+            size_t      cache_set;
+            size_t      cache_word;
+            int         cache_state = CACHE_SLOT_STATE_EMPTY;
+
+            // We register processor request
+            r_icache_vaddr_save = m_ireq.addr;
+
+            // sytematic itlb access (if activated)
+            if ( r_mmu_mode.read() & INS_TLB_MASK )
+            {
+
+#ifdef INSTRUMENTATION
+m_cpt_itlb_read++;
+#endif
+                tlb_hit = r_itlb.translate( m_ireq.addr,
+                                            &paddr,
+                                            &tlb_flags,
+                                            &tlb_nline, // unused
+                                            &tlb_way,   // unused
+                                            &tlb_set ); // unused
+            }
+            else
+            {
+                if (vci_param::N > 32)
+                {
+                    paddr =  (paddr_t)m_ireq.addr |
+                            ((paddr_t)r_icache_paddr_ext.read() << 32);
+                }
+                else
+                {
+                    paddr = (paddr_t)m_ireq.addr;
+                }
+            }
+
+            // systematic icache access (if activated)
+            if ( r_mmu_mode.read() & INS_CACHE_MASK )
+            {
+
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_data_read++;
+m_cpt_icache_dir_read++;
+#endif
+                r_icache.read( paddr,
+                               &cache_inst,
+                               &cache_way,
+                               &cache_set,
+                               &cache_word,
+                               &cache_state );
+            }
+
+            // We compute cacheability and check access rights:
+            // - If MMU activated : cacheability is defined by the C bit in the PTE,
+            //   and the access rights are defined by the U and X bits in the PTE.
+            // - If MMU not activated : cacheability is defined by the segment table,
+            //   and there is no access rights checking
+
+            if ( not (r_mmu_mode.read() & INS_TLB_MASK) ) 	// tlb not activated:
+            {
+                // cacheability
+                if ( not (r_mmu_mode.read() & INS_CACHE_MASK) ) cacheable = false;
+                else     cacheable = m_cacheability_table[(uint64_t)m_ireq.addr];
+            }
+            else						        // itlb activated
+            {
+                if ( tlb_hit )	// ITLB hit
+                {
+                    // cacheability
+                    if ( not (r_mmu_mode.read() & INS_CACHE_MASK) ) cacheable = false;
+                    else  cacheable = tlb_flags.c;
+
+                    // access rights checking
+                    if ( not tlb_flags.u && (m_ireq.mode == iss_t::MODE_USER) )
+                    {
+                        r_mmu_ietr          = MMU_READ_PRIVILEGE_VIOLATION;
+                        r_mmu_ibvar         = m_ireq.addr;
+                        m_irsp.valid        = true;
+                        m_irsp.error        = true;
+                        m_irsp.instruction  = 0;
+                        break;
+                    }
+                    else if ( not tlb_flags.x )
+                    {
+                        r_mmu_ietr          = MMU_READ_EXEC_VIOLATION;
+                        r_mmu_ibvar         = m_ireq.addr;
+                        m_irsp.valid        = true;
+                        m_irsp.error        = true;
+                        m_irsp.instruction  = 0;
+                        break;
+                    }
+                }
+                else           // ITLB miss
+                {
+
+#ifdef INSTRUMENTATION
+m_cpt_itlb_miss++;
+#endif
+                    r_icache_fsm          = ICACHE_TLB_WAIT;
+                    r_icache_tlb_miss_req = true;
+                    break;
+                }
+            } // end if itlb activated
+
+            // physical address registration
+            r_icache_vci_paddr   = paddr;
+
+            // Finally, we send the response to processor, and compute next state
+            if ( cacheable )
+            {
+                if (cache_state == CACHE_SLOT_STATE_EMPTY)	    // cache miss
+                {
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_miss++;
+#endif
+                    // we request a VCI transaction
+                    r_icache_fsm      = ICACHE_MISS_SELECT;
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+std::cout << "  <PROC " << name() << " ICACHE_IDLE> READ MISS in icache" 
+          << " : PADDR = " << std::hex << paddr << std::endl;
+#endif
+                   r_icache_miss_req = true;
+                }
+                else if (cache_state == CACHE_SLOT_STATE_ZOMBI )	// pending cleanup
+                {
+                    // stalled until cleanup is acknowledged
+                    r_icache_fsm       = ICACHE_IDLE;
+                }
+                else			                            // cache hit
+                {
+
+#ifdef INSTRUMENTATION
+m_cpt_ins_read++;
+#endif
+                    // return instruction to processor
+                    m_irsp.valid       = true;
+                    m_irsp.instruction = cache_inst;
+                    r_icache_fsm       = ICACHE_IDLE;
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+std::cout << "  <PROC " << name() << " ICACHE_IDLE> READ HIT in icache" 
+          << " : PADDR = " << std::hex << paddr
+          << " / INST  = " << cache_inst << std::endl;
+#endif
+                }
+            }
+            else             	// non cacheable read
+            {
+                r_icache_unc_req  = true;
+                r_icache_fsm      = ICACHE_UNC_WAIT;
+
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_IDLE> READ UNCACHEABLE in icache" 
+              << " : PADDR = " << std::hex << paddr << std::endl;
+}
+#endif
+            }
+        }    // end if m_ireq.valid
+        break;
+    }
+    /////////////////////
+    case ICACHE_TLB_WAIT:	// Waiting the itlb update by the DCACHE FSM after a tlb miss
+                            // the itlb is udated by the DCACHE FSM, as well as the
+                            // r_mmu_ietr and r_mmu_ibvar registers in case of error.
+                            // the itlb is not accessed by ICACHE FSM until DCACHE FSM
+                            // reset the r_icache_tlb_miss_req flip-flop
+                            // external coherence request are accepted in this state.
+    {
+        // coherence clack interrupt
+        if ( r_icache_clack_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        // coherence interrupt
+        if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read())
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        if ( m_ireq.valid ) m_cost_ins_tlb_miss_frz++;
+
+        // DCACHE FSM signals response by reseting the request flip-flop
+        if ( not r_icache_tlb_miss_req.read() )
+        {
+            if ( r_icache_tlb_rsp_error.read() ) // error reported : tlb not updated
+            {
+                r_icache_tlb_rsp_error = false;
+                m_irsp.error             = true;
+                m_irsp.valid             = true;
+                r_icache_fsm             = ICACHE_IDLE;
+            }
+            else				// tlb updated : return to IDLE state
+            {
+                r_icache_fsm  = ICACHE_IDLE;
+            }
+        }
+        break;
+    }
+    //////////////////////////
+    case ICACHE_XTN_TLB_FLUSH:   	// invalidate in one cycle all non global TLB entries
+    {
+        r_itlb.flush();
+        r_dcache_xtn_req     = false;
+        r_icache_fsm         = ICACHE_IDLE;
+        break;
+    }
+    ////////////////////////////
+    case ICACHE_XTN_CACHE_FLUSH:	// Invalidate sequencially all cache lines, using
+                                    // r_icache_flush_count as a slot counter,
+                                	// looping in this state until all slots are visited.
+                                    // It can require two cycles per slot:
+                                    // We test here the slot state, and make the actual inval
+                                    // (if line is valid) in ICACHE_XTN_CACHE_FLUSH_GO state.
+                       		        // A cleanup request is generated for each valid line
+    {
+        // coherence clack interrupt
+        if ( r_icache_clack_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read())
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        if ( not r_icache_cc_send_req.read() ) // blocked until previous cc_send request is sent
+        {
+            int       state;
+            paddr_t   tag;
+            size_t	  way = r_icache_flush_count.read()/m_icache_sets;
+            size_t	  set = r_icache_flush_count.read()%m_icache_sets;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_read++;
+#endif
+            r_icache.read_dir( way,
+                               set,
+                               &tag,
+                               &state );
+
+            if ( state == CACHE_SLOT_STATE_VALID )    // inval required
+            {
+                // request cleanup
+                r_icache_cc_send_req   = true;
+                r_icache_cc_send_nline = tag * m_icache_sets + set;
+                r_icache_cc_send_way   = way;
+                r_icache_cc_send_type  = CC_TYPE_CLEANUP;
+
+                // goes to ICACHE_XTN_CACHE_FLUSH_GO to make inval
+                r_icache_miss_way     = way;
+                r_icache_miss_set     = set;
+                r_icache_fsm          = ICACHE_XTN_CACHE_FLUSH_GO;
+            }
+            else if ( r_icache_flush_count.read() ==
+                      (m_icache_sets*m_icache_ways - 1) )  // last slot
+            {
+            	r_dcache_xtn_req = false;
+                m_drsp.valid     = true;
+            	r_icache_fsm 	 = ICACHE_IDLE;
+            }
+
+            // saturation counter, to have the same last slot condition
+            // in ICACHE_XTN_CACHE_FLUSH and ICACHE_XTN_CACHE_FLUSH_GO states
+            if ( r_icache_flush_count.read() < (m_icache_sets*m_icache_ways - 1) )
+            {
+                r_icache_flush_count = r_icache_flush_count.read() + 1;
+            }
+        }
+        break;
+    }
+    ///////////////////////////////
+    case ICACHE_XTN_CACHE_FLUSH_GO:	    // Switch slot state to ZOMBI for an XTN flush
+    {
+        size_t	  way = r_icache_miss_way.read();
+        size_t	  set = r_icache_miss_set.read();
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_write++;
+#endif
+
+        r_icache.write_dir( way,
+                            set,
+                            CACHE_SLOT_STATE_ZOMBI );
+
+        if ( r_icache_flush_count.read() ==
+                      (m_icache_sets*m_icache_ways - 1) )  // last slot
+        {
+         	r_dcache_xtn_req = false;
+            m_drsp.valid     = true;
+         	r_icache_fsm 	 = ICACHE_IDLE;
+        }
+        else
+        {
+            r_icache_fsm         = ICACHE_XTN_CACHE_FLUSH;
+        }
+        break;
+    }
+
+    //////////////////////////
+    case ICACHE_XTN_TLB_INVAL: 		// invalidate one TLB entry selected by the virtual address
+        				            // stored in the r_dcache_save_wdata register
+    {
+        r_itlb.inval(r_dcache_save_wdata.read());
+        r_dcache_xtn_req     = false;
+        r_icache_fsm         = ICACHE_IDLE;
+        break;
+    }
+    ///////////////////////////////
+    case ICACHE_XTN_CACHE_INVAL_VA:	// Selective cache line invalidate with virtual address
+                                    // requires 3 cycles (in case of hit on itlb and icache).
+					                // In this state, access TLB to translate virtual address
+        				            // stored in the r_dcache_save_wdata register.
+    {
+        paddr_t 	paddr;
+        bool    	hit;
+
+        // read physical address in TLB when MMU activated
+        if ( r_mmu_mode.read() & INS_TLB_MASK ) 	// itlb activated
+        {
+
+#ifdef INSTRUMENTATION
+m_cpt_itlb_read++;
+#endif
+            hit = r_itlb.translate(r_dcache_save_wdata.read(),
+                                   &paddr);
+        }
+        else 						// itlb not activated
+        {
+            paddr 	= (paddr_t)r_dcache_save_wdata.read();
+            hit 	= true;
+        }
+
+        if ( hit )		// continue the selective inval process
+        {
+            r_icache_vci_paddr    = paddr;
+            r_icache_fsm          = ICACHE_XTN_CACHE_INVAL_PA;
+        }
+        else			// miss : send a request to DCACHE FSM
+        {
+
+#ifdef INSTRUMENTATION
+m_cpt_itlb_miss++;
+#endif
+            r_icache_tlb_miss_req = true;
+	        r_icache_vaddr_save   = r_dcache_save_wdata.read();
+            r_icache_fsm          = ICACHE_TLB_WAIT;
+        }
+        break;
+    }
+    ///////////////////////////////
+    case ICACHE_XTN_CACHE_INVAL_PA:	// selective invalidate cache line with physical address
+                                    // require 2 cycles. In this state, we read directory
+                                    // with address stored in r_icache_vci_paddr register.
+    {
+        int         state;
+        size_t		way;
+        size_t		set;
+        size_t		word;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_read++;
+#endif
+        r_icache.read_dir(r_icache_vci_paddr.read(),
+                          &state,
+                          &way,
+                          &set,
+                          &word);
+
+        if ( state == CACHE_SLOT_STATE_VALID )	// inval to be done
+        {
+            r_icache_miss_way = way;
+            r_icache_miss_set = set;
+            r_icache_fsm      = ICACHE_XTN_CACHE_INVAL_GO;
+        }
+        else		// miss : acknowlege the XTN request and return
+        {
+            r_dcache_xtn_req = false;
+            r_icache_fsm     = ICACHE_IDLE;
+        }
+        break;
+    }
+    ///////////////////////////////
+    case ICACHE_XTN_CACHE_INVAL_GO:  // Switch slot to ZOMBI state for an XTN inval
+    {
+        if ( not r_icache_cc_send_req.read() )  // blocked until previous cc_send request not sent
+        {
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_write++;
+#endif
+            r_icache.write_dir( r_icache_miss_way.read(),
+                                r_icache_miss_set.read(),
+                                CACHE_SLOT_STATE_ZOMBI );
+
+            // request cleanup
+            r_icache_cc_send_req   = true;
+            r_icache_cc_send_nline = r_icache_vci_paddr.read() / (m_icache_words<<2);
+            r_icache_cc_send_way   = r_icache_miss_way.read();
+            r_icache_cc_send_type  = CC_TYPE_CLEANUP;
+
+            // acknowledge the XTN request and return
+            r_dcache_xtn_req      = false;
+            r_icache_fsm          = ICACHE_IDLE;
+        }
+        break;
+    }
+    ////////////////////////
+    case ICACHE_MISS_SELECT:       // Try to select a slot in associative set,
+                                   // Waiting in this state if no slot available.
+                                   // If a victim slot has been choosen and the r_icache_cc_send_req is false, 
+                                   // we send the cleanup request in this state. 
+                                   // If not, a r_icache_cleanup_victim_req flip-flop is
+                                   // utilized for saving this cleanup request, and it will be sent later
+                                   // in state ICACHE_MISS_WAIT or ICACHE_MISS_UPDT_DIR. 
+                                   // The r_icache_miss_clack flip-flop is set
+                                   // when a cleanup is required
+    {
+        if (m_ireq.valid) m_cost_ins_miss_frz++;
+
+        // coherence clack interrupt
+        if ( r_icache_clack_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        // coherence interrupt
+        if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read())
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+
+        bool        found;
+        bool        cleanup;
+        size_t  	way;
+        size_t  	set;
+        paddr_t 	victim;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_read++;
+#endif
+        r_icache.read_select(r_icache_vci_paddr.read(),
+                             &victim,
+                             &way,
+                             &set,
+                             &found,
+                             &cleanup );
+        if ( not found )
+        {
+            break;
+        }
+        else
+        {
+            r_icache_miss_way     = way;
+            r_icache_miss_set     = set;
+
+            if ( cleanup )
+            {
+                if ( not r_icache_cc_send_req.read() )
+                {
+                    r_icache_cc_send_req    = true;
+                    r_icache_cc_send_nline  = victim;
+                    r_icache_cc_send_way    = way;
+                    r_icache_cc_send_type   = CC_TYPE_CLEANUP;    
+                }
+                else
+                {
+                    r_icache_cleanup_victim_req   = true;
+                    r_icache_cleanup_victim_nline = victim;
+                }
+
+                r_icache_miss_clack           = true;
+                r_icache_fsm                  = ICACHE_MISS_CLEAN;
+            }
+            else
+            {
+                r_icache_fsm          = ICACHE_MISS_WAIT;
+            }
+
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_MISS_SELECT> Select a slot:" << std::dec
+              << " / WAY = " << way
+              << " / SET = " << set;
+    if (cleanup) std::cout << " / VICTIM = " << std::hex << victim << std::endl;
+    else         std::cout << std::endl;
+}
+#endif
+        }
+        break;
+    }
+    ///////////////////////
+    case ICACHE_MISS_CLEAN:	         // switch the slot to zombi state
+    {
+        if (m_ireq.valid) m_cost_ins_miss_frz++;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_write++;
+#endif
+        r_icache.write_dir( r_icache_miss_way.read(),
+                            r_icache_miss_set.read(),
+                            CACHE_SLOT_STATE_ZOMBI);
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_MISS_CLEAN> Switch to ZOMBI state" << std::dec
+              << " / WAY = " << r_icache_miss_way.read()
+              << " / SET = " << r_icache_miss_set.read() << std::endl;
+}
+#endif
+
+        r_icache_fsm = ICACHE_MISS_WAIT;
+        break;
+    }
+    //////////////////////
+    case ICACHE_MISS_WAIT:	  // waiting response from VCI_RSP FSM
+    {
+        if (m_ireq.valid) m_cost_ins_miss_frz++;
+
+        // send cleanup victim request
+        if ( r_icache_cleanup_victim_req.read() and not r_icache_cc_send_req.read() )
+        {
+            r_icache_cc_send_req        = true;
+            r_icache_cc_send_nline      = r_icache_cleanup_victim_nline;
+            r_icache_cc_send_way        = r_icache_miss_way;
+            r_icache_cc_send_type       = CC_TYPE_CLEANUP; 
+            r_icache_cleanup_victim_req = false;
+        }   
+
+        // coherence clack interrupt
+        if ( r_icache_clack_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+        
+        // coherence interrupt
+        if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read() and not r_icache_cleanup_victim_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_ins_error.read() ) // bus error
+        {
+            r_mmu_ietr          = MMU_READ_DATA_ILLEGAL_ACCESS;
+            r_mmu_ibvar         = r_icache_vaddr_save.read();
+            m_irsp.valid        = true;
+            m_irsp.error        = true;
+            r_vci_rsp_ins_error = false;
+            r_icache_fsm        = ICACHE_IDLE;
+        }
+        else if ( r_vci_rsp_fifo_icache.rok() ) // response available
+        {
+            r_icache_miss_word = 0;
+            r_icache_fsm       = ICACHE_MISS_DATA_UPDT;
+        }
+        break;
+    }
+    ///////////////////////////
+    case ICACHE_MISS_DATA_UPDT:	  // update the cache (one word per cycle)
+    {
+        if ( m_ireq.valid ) m_cost_ins_miss_frz++;
+
+        if ( r_vci_rsp_fifo_icache.rok() )	// response available
+        {
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_data_write++;
+#endif
+            r_icache.write( r_icache_miss_way.read(),
+                            r_icache_miss_set.read(),
+                            r_icache_miss_word.read(),
+                            r_vci_rsp_fifo_icache.read() );
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_MISS_DATA_UPDT> Write one word:"
+              << " WDATA = " << std::hex << r_vci_rsp_fifo_icache.read()
+              << " WAY = " << r_icache_miss_way.read()
+              << " SET = " << r_icache_miss_set.read()
+              << " WORD = " << r_icache_miss_word.read() << std::endl;
+}
+#endif
+            vci_rsp_fifo_icache_get = true;
+            r_icache_miss_word = r_icache_miss_word.read() + 1;
+
+            if ( r_icache_miss_word.read() == m_icache_words-1 ) 	// last word
+            {
+                r_icache_fsm = ICACHE_MISS_DIR_UPDT;
+            }
+        }
+        break;
+    }
+    //////////////////////////
+    case ICACHE_MISS_DIR_UPDT:	// Stalled if a victim line has been evicted,
+                                // and the cleanup ack has not been received,
+                                // as indicated by r_icache_miss_clack.
+                                // - If no matching coherence request (r_icache_miss_inval)
+                                //   switch directory slot to VALID state.
+                                // - If matching coherence request, switch directory slot
+                                //   to ZOMBI state, and send a cleanup request.
+    {
+        if ( m_ireq.valid ) m_cost_ins_miss_frz++;
+
+        // send cleanup victim request
+        if ( r_icache_cleanup_victim_req.read() and not r_icache_cc_send_req.read() )
+        {
+            r_icache_cc_send_req        = true;
+            r_icache_cc_send_nline      = r_icache_cleanup_victim_nline;
+            r_icache_cc_send_way        = r_icache_miss_way;
+            r_icache_cc_send_type       = CC_TYPE_CLEANUP; 
+            r_icache_cleanup_victim_req = false;
+        }   
+
+        // coherence clack interrupt
+        if ( r_icache_clack_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        // coherence interrupt
+        if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read() and not r_icache_cleanup_victim_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        if ( not r_icache_miss_clack.read() ) // waiting cleanup acknowledge for victim line
+        {
+            if ( r_icache_miss_inval )    // Switch slot to ZOMBI state, and new cleanup
+            {
+                if ( not r_icache_cc_send_req.read() )
+                {
+                    r_icache_miss_inval    = false;
+                    // request cleanup
+                    r_icache_cc_send_req   = true;
+                    r_icache_cc_send_nline = r_icache_vci_paddr.read() / (m_icache_words<<2);
+                    r_icache_cc_send_way   = r_icache_miss_way.read();
+                    r_icache_cc_send_type  = CC_TYPE_CLEANUP;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_write++;
+#endif
+                    r_icache.write_dir( r_icache_vci_paddr.read(),
+                                        r_icache_miss_way.read(),
+                                        r_icache_miss_set.read(),
+                                        CACHE_SLOT_STATE_ZOMBI );
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_MISS_DIR_UPDT> Switch cache slot to ZOMBI state"
+              << " PADDR = " << std::hex << r_icache_vci_paddr.read()
+              << " WAY = " << std::dec << r_icache_miss_way.read()
+              << " SET = " << r_icache_miss_set.read() << std::endl;
+}
+#endif
+                }
+                else
+                    break;
+            }
+            else                          // Switch slot to VALID state
+            {
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_write++;
+#endif
+                r_icache.write_dir( r_icache_vci_paddr.read(),
+                                    r_icache_miss_way.read(),
+                                    r_icache_miss_set.read(),
+                                    CACHE_SLOT_STATE_VALID );
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_MISS_DIR_UPDT> Switch cache slot to VALID state"
+              << " PADDR = " << std::hex << r_icache_vci_paddr.read()
+              << " WAY = " << std::dec << r_icache_miss_way.read()
+              << " SET = " << r_icache_miss_set.read() << std::endl;
+}
+#endif
+            }
+
+            r_icache_fsm = ICACHE_IDLE;
+        }
+        break;
+    }
+    ////////////////////
+    case ICACHE_UNC_WAIT:	// waiting a response to an uncacheable read from VCI_RSP FSM
+    {
+        // coherence clack interrupt
+        if ( r_icache_clack_req.read() )
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        // coherence interrupt
+        if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read())
+        {
+            r_icache_fsm = ICACHE_CC_CHECK;
+            r_icache_fsm_save = r_icache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_ins_error.read() ) // bus error
+        {
+            r_mmu_ietr          = MMU_READ_DATA_ILLEGAL_ACCESS;
+            r_mmu_ibvar         = m_ireq.addr;
+            r_vci_rsp_ins_error = false;
+            m_irsp.valid        = true;
+            m_irsp.error        = true;
+            r_icache_fsm        = ICACHE_IDLE;
+        }
+        else if (r_vci_rsp_fifo_icache.rok() ) // instruction available
+        {
+            vci_rsp_fifo_icache_get = true;
+            r_icache_fsm            = ICACHE_IDLE;
+            if ( m_ireq.valid and
+                (m_ireq.addr == r_icache_vaddr_save.read()) ) // request unmodified
+            {
+                m_irsp.valid       = true;
+                m_irsp.instruction = r_vci_rsp_fifo_icache.read();
+            }
+        }
+        break;
+    }
+    /////////////////////
+    case ICACHE_CC_CHECK:   	// This state is the entry point of a sub-fsm
+                                // handling coherence requests.
+                                // if there is a matching pending miss, it is
+                                // signaled in the r_icache_miss_inval flip-flop.
+                                // The return state is defined in r_icache_fsm_save.
+    {
+        paddr_t  paddr = r_cc_receive_icache_nline.read() * m_icache_words * 4;
+        paddr_t  mask  = ~((m_icache_words<<2)-1);
+
+        // CLACK handler
+        // We switch the directory slot to EMPTY state
+        // and reset r_icache_miss_clack if the cleanup ack
+        // is matching a pending miss.
+        if ( r_icache_clack_req.read() )
+        {
+
+            if ( m_ireq.valid ) m_cost_ins_miss_frz++;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_write++;
+#endif
+            r_icache.write_dir( 0,
+                                r_icache_clack_way.read(),
+                                r_icache_clack_set.read(),
+                                CACHE_SLOT_STATE_EMPTY);
+
+            if ( (r_icache_miss_set.read() == r_icache_clack_set.read()) and
+                 (r_icache_miss_way.read() == r_icache_clack_way.read()) )
+            {
+                r_icache_miss_clack = false;
+            }
+
+            r_icache_clack_req = false;
+
+            // return to cc_save state
+            r_icache_fsm = r_icache_fsm_save.read();
+
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+        << " ICACHE_CC_CHECK>  CC_TYPE_CLACK slot returns to empty state"
+        << " set = " << r_icache_clack_set.read()
+        << " / way = " << r_icache_clack_way.read() << std::endl;
+}
+#endif
+
+            break;
+        }
+
+        assert ( not r_icache_cc_send_req.read() and "CC_SEND must be available in ICACHE_CC_CHECK");
+
+        // Match between MISS address and CC address
+        if (r_cc_receive_icache_req.read() and
+          ((r_icache_fsm_save.read() == ICACHE_MISS_SELECT  )  or
+           (r_icache_fsm_save.read() == ICACHE_MISS_WAIT    )  or
+           (r_icache_fsm_save.read() == ICACHE_MISS_DIR_UPDT)) and
+          ((r_icache_vci_paddr.read() & mask) == (paddr & mask)) ) // matching
+        {
+            // signaling the matching
+            r_icache_miss_inval     = true;
+
+            // in case of update, go to CC_UPDT
+            // JUST TO POP THE FIFO
+            if (r_cc_receive_icache_type.read() == CC_TYPE_UPDT)
+            {
+                r_icache_fsm        = ICACHE_CC_UPDT;
+                r_icache_cc_word    = r_cc_receive_word_idx.read();
+
+                // just pop the fifo , don't write in icache
+                r_icache_cc_need_write = false;
+            }
+            // the request is dealt with
+            else
+            {
+                r_cc_receive_icache_req = false;
+                r_icache_fsm          = r_icache_fsm_save.read();
+            }
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_CC_CHECK> Coherence request matching a pending miss:"
+              << " PADDR = " << std::hex << paddr << std::endl;
+}
+#endif
+        }
+
+        // CC request handler
+
+        int	        state = 0;
+        size_t 	    way = 0;
+        size_t 	    set = 0;
+        size_t 	    word = 0;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_read++;
+#endif
+        r_icache.read_dir(paddr,
+                          &state,
+                          &way,
+                          &set,
+                          &word);
+
+        r_icache_cc_way = way;
+        r_icache_cc_set = set;
+
+        if ( state == CACHE_SLOT_STATE_VALID)            // hit
+        {
+            // need to update the cache state
+            if (r_cc_receive_icache_type.read() == CC_TYPE_UPDT)  // hit update
+            {
+                r_icache_cc_need_write = true;
+                r_icache_fsm           = ICACHE_CC_UPDT;
+                r_icache_cc_word       = r_cc_receive_word_idx.read();
+            }
+            else if ( r_cc_receive_icache_type.read() == CC_TYPE_INVAL ) // hit inval
+            {
+                r_icache_fsm           = ICACHE_CC_INVAL;
+            }
+        }
+        else                                      // miss
+        {
+            // multicast acknowledgement required in case of update
+            if(r_cc_receive_icache_type.read() == CC_TYPE_UPDT)
+            {
+                r_icache_fsm           = ICACHE_CC_UPDT;
+                r_icache_cc_word       = r_cc_receive_word_idx.read();
+
+                // just pop the fifo , don't write in icache
+                r_icache_cc_need_write = false;
+            }
+            else // No response needed
+            {
+                r_cc_receive_icache_req = false;
+                r_icache_fsm            = r_icache_fsm_save.read();
+            }
+        }
+        break;
+    }
+    /////////////////////
+    case ICACHE_CC_INVAL:  	// hit inval : switch slot to ZOMBI state
+    {
+        assert (not r_icache_cc_send_req.read() &&
+                "ERROR in ICACHE_CC_INVAL: the r_icache_cc_send_req "
+                "must not be set");
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_dir_read++;
+#endif
+
+        // Switch slot state to ZOMBI and send CLEANUP command 
+        r_icache.write_dir( r_icache_cc_way.read(),
+                            r_icache_cc_set.read(),
+                            CACHE_SLOT_STATE_ZOMBI );
+
+        // coherence request completed
+        r_icache_cc_send_req   = true;
+        r_icache_cc_send_nline = r_cc_receive_icache_nline.read();
+        r_icache_cc_send_way   = r_icache_cc_way.read();
+        r_icache_cc_send_type  = CC_TYPE_CLEANUP;
+
+        r_icache_fsm           = r_icache_fsm_save.read();
+
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+std::cout << "  <PROC " << name()
+          << " ICACHE_CC_INVAL> slot returns to ZOMBI state"
+          << " set = " << r_icache_cc_set.read()
+          << " / way = " << r_icache_cc_way.read() << std::endl;
+}
+#endif
+
+        break;
+    }
+    ////////////////////
+    case ICACHE_CC_UPDT:	// hit update : write one word per cycle
+    {
+        assert (not r_icache_cc_send_req.read() &&
+                "ERROR in ICACHE_CC_UPDT: the r_icache_cc_send_req "
+                "must not be set");
+
+        if ( not r_cc_receive_updt_fifo_be.rok() ) break;
+
+
+        size_t  word  = r_icache_cc_word.read();
+        size_t  way   = r_icache_cc_way.read();
+        size_t  set   = r_icache_cc_set.read();
+
+        if (r_icache_cc_need_write.read())
+        {
+            r_icache.write( way,
+                            set,
+                            word,
+                            r_cc_receive_updt_fifo_data.read(),
+                            r_cc_receive_updt_fifo_be.read() );
+
+            r_icache_cc_word = word+1;
+
+#ifdef INSTRUMENTATION
+m_cpt_icache_data_write++;
+#endif
+
+#if DEBUG_ICACHE
+if ( m_debug_icache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " ICACHE_CC_UPDT> Write one word "
+              << " set = " << r_icache_cc_set.read()
+              << " / way = " << r_icache_cc_way.read()
+              << " / word = " << r_icache_cc_word.read() << std::endl;
+}
+#endif
+        }
+
+        if ( r_cc_receive_updt_fifo_eop.read() )	// last word
+        {
+            // no need to write in the cache anymore
+            r_icache_cc_need_write        = false;
+
+            // coherence request completed
+            r_cc_receive_icache_req       = false;
+
+            // request multicast acknowledgement
+            r_icache_cc_send_req          = true;
+            r_icache_cc_send_nline        = r_cc_receive_icache_nline.read();
+            r_icache_cc_send_updt_tab_idx = r_cc_receive_icache_updt_tab_idx.read();
+            r_icache_cc_send_type         = CC_TYPE_MULTI_ACK;
+
+            r_icache_fsm                  = r_icache_fsm_save.read();
+        }
+        //consume fifo if not eop
+        cc_receive_updt_fifo_get  = true;
+
+        break;
+    }
+
+    } // end switch r_icache_fsm
+
+    ////////////////////////////////////////////////////////////////////////////////////
+    //      DCACHE FSM
+    //
+    // 1/ Coherence operations
+    //    They are handled as interrupts generated by the CC_RECEIVE FSM.
+    //    - There is a coherence request when r_tgt_dcache_req is set.
+    //    They are taken in IDLE, MISS_WAIT, MISS_DIR_UPDT, UNC_WAIT, LL_WAIT
+    //    and SC_WAIT states.
+    //    - There is a cleanup acknowledge request when r_cleanup_dcache_req is set.
+    //    They are taken in IDLE, MISS_SELECT, MISS_CLEAN, MISS_WAIT, MISS_DATA_UPDT,
+    //    MISS_DIR_UPDT, UNC_WAIT, LL_WAIT, SC_WAIT states.
+    //    - For both types of requests, actions associated to the pre-empted state
+    //    are not executed. The DCACHE FSM goes to the proper sub-FSM (CC_CHECK
+    //    or CC_CLACK) to execute the requested coherence operation, and returns
+    //    to the pre-empted state.
+    //
+    // 2/ TLB miss
+    //    The page tables are generally cacheable.
+    //    In case of miss in itlb or dtlb, the tlb miss is handled by a dedicated
+    //    sub-fsm (DCACHE_TLB_MISS state), that handle possible miss in DCACHE,
+    //    this sub-fsm implement the table-walk...
+    //
+    // 3/ processor requests
+    //    Processor requests are taken in IDLE state only.
+    //    The IDLE state implements a two stages pipe-line to handle write bursts:
+    //    - Both DTLB and DCACHE are accessed in stage P0 (if processor request valid).
+    //    - The registration in wbuf and the dcache update is done in stage P1
+    //      (if the processor request is a write).
+    //    The two r_dcache_wbuf_req and r_dcache_updt_req flip-flops define
+    //    the operations that must be done in P1 stage, and the access type
+    //    (read or write) to the DATA part of DCACHE depends on r_dcache_updt_req.
+    //    READ requests are delayed if a cache update is requested.
+    //    WRITE or SC requests can require a PTE Dirty bit update (in memory),
+    //    that is done (before handling the processor request) by a dedicated sub-fsm.
+    //    If a PTE is modified, both the itlb and dtlb are selectively, but sequencially
+    //    cleared by a dedicated sub_fsm (DCACHE_INVAL_TLB_SCAN state).
+    //
+    // 4/ Atomic instructions LL/SC
+    //    The LL/SC address are non cacheable (systematic access to memory).
+    //    The llsc buffer contains a registration for an active LL/SC operation
+    //    (with an address, a registration key, an aging counter and a valid bit).
+    //    - LL requests from the processor are transmitted as a one flit VCI command
+    //      (CMD_LOCKED_READ as CMD, and TYPE_LL as PKTID value). PLEN must
+    //      be 8 as the response is 2 flits long (data and registration key)
+    //    - SC requests from the processor are systematically transmitted to the
+    //      memory cache as 2 flits VCI command (CMD_STORE_COND as CMD, and TYPE_SC
+    //      as PKTID value).  The first flit contains the registration key, the second
+    //      flit contains the data to write in case of success.
+    //      The cache is not updated, as this is done in case of success by the
+    //      coherence transaction.
+    //
+    // 5/ Non cacheable access:
+    //    This component implement a strong order between non cacheable access
+    //    (read or write) : A new non cacheable VCI transaction starts only when
+    //    the previous non cacheable transaction is completed. After send the VCI
+    //    transaction, the DCACHE FSM wait for the respone in the DCACHE_UNC_WAIT state.
+    //    So the processor is blocked until the respone arrives in CACHE L1.
+    //
+    // 6/ Error handling:
+    //    When the MMU is not activated, Read Bus Errors are synchronous events,
+    //    Some Write Bus Errors are synchronous events when the request is a non cacheable access 
+    //    but some Write Bus Errors are asynchronous events when the request is cacheable access 
+    //    (processor is not frozen).
+    //    - If a Read Bus Error or a Non Cacheable Write Bus Error is detected, the VCI_RSP FSM sets the
+    //      r_vci_rsp_data_error flip-flop, without writing any data in the
+    //      r_vci_rsp_fifo_dcache FIFO, and the synchronous error is signaled
+    //      by the DCACHE FSM.
+    //    - If a Cacheable Write Bus Error is detected, the VCI_RSP_FSM signals 
+    //    the asynchronous error using the setWriteBerr() method.
+    //    When the MMU is activated bus error are rare events, as the MMU
+    //    checks the physical address before the VCI transaction starts.
+    ////////////////////////////////////////////////////////////////////////////////////////
+
+    // default value for m_drsp
+    m_drsp.valid = false;
+    m_drsp.error = false;
+    m_drsp.rdata = 0;
+
+    switch ( r_dcache_fsm.read() )
+    {
+    case DCACHE_IDLE: // There are 10 conditions to exit the IDLE state :
+                      // 1) ITLB/DTLB inval request (update)  => DCACHE_INVAL_TLB_SCAN
+                      // 2) Coherence request (TGT FSM)       => DCACHE_CC_CHECK
+                      // 3) ITLB miss request (ICACHE FSM)    => DCACHE_TLB_MISS
+                      // 4) XTN request (processor)           => DCACHE_XTN_*
+                      // 5) DTLB miss (processor)             => DCACHE_TLB_MISS
+                      // 6) Dirty bit update (processor)      => DCACHE_DIRTY_GET_PTE
+                      // 7) Cacheable read miss (processor)   => DCACHE_MISS_SELECT
+                      // 8) Uncacheable read (processor)      => DCACHE_UNC_WAIT
+                      // 9) LL access (processor)             => DCACHE_LL_WAIT
+                      // 10) SC access (processor)            => DCACHE_SC_WAIT
+                      //
+                      // There is a fixed priority to handle requests to DCACHE:
+                      //    1/ the ITLB/DTLB invalidate requests
+                      //    2/ the coherence requests,
+                      //    3/ the processor requests (including DTLB miss),
+                      //    4/ the ITLB miss requests,
+                      // The address space processor request are handled as follows:
+                      // - WRITE request is blocked if the Dirty bit mus be set.
+                      // If DTLB hit, the P1 stage is activated (writes WBUF, and
+                      // updates DCACHE if DCACHE hit) & processor request acknowledged.
+                      // - READ request generate a simultaneouss access to  DCACHE.DATA
+                      // and DCACHE.DIR, but is delayed if DCACHE update required.
+                      //
+                      // There is 4 configurations defining the access type to
+                      // DTLB, DCACHE.DATA, and DCACHE.DIR, depending on the
+                      // dreq.valid (dreq) and r_dcache_updt_req (updt) signals:
+                      //    dreq / updt / DTLB  / DCACHE.DIR / DCACHE.DATA /
+                      //     0   /  0   / NOP   / NOP        / NOP         /
+                      //     0   /  1   / NOP   / NOP        / WRITE       /
+                      //     1   /  0   / READ  / READ       / NOP         /
+                      //     1   /  1   / READ  / READ       / WRITE       /
+                      // Those two registers are set at each cycle from the 3 signals
+                      // updt_request, wbuf_request, wbuf_write_miss.
+    {
+        paddr_t     paddr;                          // physical address
+        pte_info_t 	tlb_flags;
+        size_t     	tlb_way;
+        size_t     	tlb_set;
+        paddr_t    	tlb_nline = 0;
+        size_t		cache_way;
+        size_t		cache_set;
+        size_t		cache_word;
+        uint32_t	cache_rdata = 0;
+        bool	    tlb_hit = false;
+        int	        cache_state = CACHE_SLOT_STATE_EMPTY;
+
+        bool        tlb_inval_required = false;     // request TLB inval after cache update
+        bool        wbuf_write_miss    = false;     // miss a WBUF write request
+        bool        updt_request       = false;     // request DCACHE update in P1 stage
+        bool        wbuf_request       = false;     // request WBUF write in P1 stage
+
+        // physical address computation : systematic DTLB access if activated)
+        if ( m_dreq.valid )
+        {
+            if ( r_mmu_mode.read() & DATA_TLB_MASK )  // DTLB activated
+            {
+                tlb_hit = r_dtlb.translate( m_dreq.addr,
+                                            &paddr,
+                                            &tlb_flags,
+                                            &tlb_nline,
+                                            &tlb_way,
+                                            &tlb_set );
+#ifdef INSTRUMENTATION
+m_cpt_dtlb_read++;
+#endif
+            }
+            else                                    // identity mapping
+            {
+                paddr = (paddr_t)m_dreq.addr;
+                // we take into account the paddr extension
+                if (vci_param::N > 32) 
+                    paddr = paddr | ((paddr_t)(r_dcache_paddr_ext.read()) << 32);
+            }
+        } // end physical address computation
+
+        // systematic DCACHE access depending on r_dcache_updt_req (if activated)
+        if ( r_mmu_mode.read() & DATA_CACHE_MASK)
+        {
+            if ( m_dreq.valid and r_dcache_updt_req.read() ) // read DIR and write DATA
+            {
+                r_dcache.read_dir( paddr,
+                                   &cache_state,
+                                   &cache_way,
+                                   &cache_set,
+                                   &cache_word );
+
+                r_dcache.write( r_dcache_save_cache_way.read(),
+                                r_dcache_save_cache_set.read(),
+                                r_dcache_save_cache_word.read(),
+                                r_dcache_save_wdata.read(),
+                                r_dcache_save_be.read() );
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_read++;
+m_cpt_dcache_data_write++;
+#endif
+            }
+            else if ( m_dreq.valid and not r_dcache_updt_req.read() ) // read DIR and DATA
+            {
+                r_dcache.read( paddr,
+                               &cache_rdata,
+                               &cache_way,
+                               &cache_set,
+                               &cache_word,
+                               &cache_state );
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_read++;
+m_cpt_dcache_data_read++;
+#endif
+            }
+            else if ( not m_dreq.valid and r_dcache_updt_req.read() ) // write DATA
+            {
+                r_dcache.write( r_dcache_save_cache_way.read(),
+                                r_dcache_save_cache_set.read(),
+                                r_dcache_save_cache_word.read(),
+                                r_dcache_save_wdata.read(),
+                                r_dcache_save_be.read() );
+#ifdef INSTRUMENTATION
+m_cpt_dcache_data_write++;
+#endif
+            }
+        } // end dcache access
+
+        // DCACHE update in P1 stage can require ITLB / DTLB inval or flush
+        if ( r_dcache_updt_req.read() )
+        {
+            size_t way = r_dcache_save_cache_way.read();
+            size_t set = r_dcache_save_cache_set.read();
+
+            if ( r_dcache_in_tlb[way*m_dcache_sets+set] )
+            {
+                tlb_inval_required       = true;
+	            r_dcache_tlb_inval_set   = 0;
+	            r_dcache_tlb_inval_line  = r_dcache_save_paddr.read()>>
+                                           (uint32_log2(m_dcache_words<<2));
+	            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
+            }
+            else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )
+            {
+                r_itlb.reset();
+                r_dtlb.reset();
+	            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+            }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name() << " DCACHE_IDLE>"
+          << " Cache update in P1 stage" << std::dec
+          << " / WAY = " << r_dcache_save_cache_way.read()
+          << " / SET = " << r_dcache_save_cache_set.read()
+          << " / WORD = " << r_dcache_save_cache_word.read() << std::hex
+          << " / WDATA = " << r_dcache_save_wdata.read()
+          << " / BE = " << r_dcache_save_be.read() << std::endl;
+#endif
+        } // end test TLB inval
+
+        // Try WBUF update in P1 stage
+        // Miss if the write request is non cacheable, and there is a pending
+        // non cacheable write, or if the write buffer is full.
+        if ( r_dcache_wbuf_req.read() )
+        {
+            bool wok = r_wbuf.write( r_dcache_save_paddr.read(),
+                                     r_dcache_save_be.read(),
+                                     r_dcache_save_wdata.read(),
+                                     true);
+#ifdef INSTRUMENTATION
+m_cpt_wbuf_write++;
+#endif
+            if ( not wok ) // miss if write buffer full
+            {
+                wbuf_write_miss = true;
+            }
+        } // end WBUF update
+
+        // Computing the response to processor,
+        // and the next value for r_dcache_fsm
+
+        // itlb/dtlb invalidation self-request
+        if ( tlb_inval_required )
+        {
+            r_dcache_fsm_scan_save = r_dcache_fsm.read();
+            r_dcache_fsm           = DCACHE_INVAL_TLB_SCAN;
+        }
+
+        // coherence clack request (from DSPIN CLACK)
+        else if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+        }
+        // coherence request (from CC_RECEIVE FSM)
+        else if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+        }
+
+        // processor request (READ, WRITE, LL, SC, XTN_READ, XTN_WRITE)
+        // we don't take the processor request, and registers
+        // are frozen in case of wbuf_write_miss
+        else if ( m_dreq.valid and not wbuf_write_miss )
+        {
+            // register processor request and DCACHE response
+            r_dcache_save_vaddr      = m_dreq.addr;
+            r_dcache_save_be         = m_dreq.be;
+            r_dcache_save_wdata      = m_dreq.wdata;
+            r_dcache_save_paddr      = paddr;
+            r_dcache_save_cache_way  = cache_way;
+            r_dcache_save_cache_set  = cache_set;
+            r_dcache_save_cache_word = cache_word;
+
+            // READ XTN requests from processor
+            // They are executed in this DCACHE_IDLE state.
+            // The processor must not be in user mode
+            if (m_dreq.type == iss_t::XTN_READ)
+            {
+                int xtn_opcode = (int)m_dreq.addr/4;
+
+                // checking processor mode:
+                if (m_dreq.mode  == iss_t::MODE_USER)
+                {
+                    r_mmu_detr   = MMU_READ_PRIVILEGE_VIOLATION;
+                    r_mmu_dbvar  = m_dreq.addr;
+                    m_drsp.valid = true;
+                    m_drsp.error = true;
+                    m_drsp.rdata = 0;
+                    r_dcache_fsm = DCACHE_IDLE;
+                }
+                else
+                {
+                    switch( xtn_opcode )
+                    {
+                    case iss_t::XTN_INS_ERROR_TYPE:
+                        m_drsp.rdata = r_mmu_ietr.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_DATA_ERROR_TYPE:
+                        m_drsp.rdata = r_mmu_detr.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_INS_BAD_VADDR:
+                        m_drsp.rdata = r_mmu_ibvar.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_DATA_BAD_VADDR:
+                        m_drsp.rdata = r_mmu_dbvar.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_PTPR:
+                        m_drsp.rdata = r_mmu_ptpr.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_TLB_MODE:
+                        m_drsp.rdata = r_mmu_mode.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_MMU_PARAMS:
+                        m_drsp.rdata = r_mmu_params;
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_MMU_RELEASE:
+                        m_drsp.rdata = r_mmu_release;
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_MMU_WORD_LO:
+                        m_drsp.rdata = r_mmu_word_lo.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_MMU_WORD_HI:
+                        m_drsp.rdata = r_mmu_word_hi.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_DATA_PADDR_EXT:
+                        m_drsp.rdata = r_dcache_paddr_ext.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    case iss_t::XTN_INST_PADDR_EXT:
+                        m_drsp.rdata = r_icache_paddr_ext.read();
+                        m_drsp.valid = true;
+                        m_drsp.error = false;
+                        break;
+
+                    default:
+                        r_mmu_detr = MMU_READ_UNDEFINED_XTN;
+                        r_mmu_dbvar  = m_dreq.addr;
+                        m_drsp.valid = true;
+                        m_drsp.error = true;
+                        m_drsp.rdata = 0;
+                        break;
+                    } // end switch xtn_opcode
+                } // end else
+            } // end if XTN_READ
+
+            // Handling WRITE XTN requests from processor.
+            // They are not executed in this DCACHE_IDLE state
+            // if they require access to the caches or the TLBs
+            // that are already accessed.
+            // Caches can be invalidated or flushed in user mode,
+            // and the sync instruction can be executed in user mode
+            else if (m_dreq.type == iss_t::XTN_WRITE)
+            {
+                int xtn_opcode      = (int)m_dreq.addr/4;
+                r_dcache_xtn_opcode = xtn_opcode;
+
+                // checking processor mode:
+                if ( (m_dreq.mode  == iss_t::MODE_USER) &&
+                     (xtn_opcode != iss_t::XTN_SYNC) &&
+                     (xtn_opcode != iss_t::XTN_DCACHE_INVAL) &&
+                     (xtn_opcode != iss_t::XTN_DCACHE_FLUSH) &&
+                     (xtn_opcode != iss_t::XTN_ICACHE_INVAL) &&
+                     (xtn_opcode != iss_t::XTN_ICACHE_FLUSH) )
+                {
+                    r_mmu_detr   = MMU_WRITE_PRIVILEGE_VIOLATION;
+                    r_mmu_dbvar  = m_dreq.addr;
+                    m_drsp.valid = true;
+                    m_drsp.error = true;
+                    m_drsp.rdata = 0;
+                    r_dcache_fsm = DCACHE_IDLE;
+                }
+                else
+                {
+                    switch( xtn_opcode )
+                    {
+                    case iss_t::XTN_PTPR:   			// itlb & dtlb must be flushed
+                        r_dcache_xtn_req = true;
+                        r_dcache_fsm     = DCACHE_XTN_SWITCH;
+                        break;
+
+                    case iss_t::XTN_TLB_MODE:			// no cache or tlb access
+                        r_mmu_mode       = m_dreq.wdata;
+                        m_drsp.valid     = true;
+                        r_dcache_fsm     = DCACHE_IDLE;
+                        break;
+
+                    case iss_t::XTN_DTLB_INVAL:     		// dtlb access
+                        r_dcache_fsm     = DCACHE_XTN_DT_INVAL;
+                        break;
+
+                    case iss_t::XTN_ITLB_INVAL:     		// itlb access
+                        r_dcache_xtn_req = true;
+                        r_dcache_fsm     = DCACHE_XTN_IT_INVAL;
+                        break;
+
+                    case iss_t::XTN_DCACHE_INVAL:   		// dcache, dtlb & itlb access
+                        r_dcache_fsm     = DCACHE_XTN_DC_INVAL_VA;
+                        break;
+
+                    case iss_t::XTN_MMU_DCACHE_PA_INV:  	// dcache, dtlb & itlb access
+                        r_dcache_fsm     = DCACHE_XTN_DC_INVAL_PA;
+                        if (sizeof(paddr_t) <= 32)
+                        {
+                            assert(r_mmu_word_hi.read() == 0 &&
+                            "high bits should be 0 for 32bit paddr");
+                            r_dcache_save_paddr = (paddr_t)r_mmu_word_lo.read();
+                        }
+                        else
+                        {
+                            r_dcache_save_paddr = (paddr_t)r_mmu_word_hi.read() << 32 |
+                                                  (paddr_t)r_mmu_word_lo.read();
+                        }
+                        break;
+
+                    case iss_t::XTN_DCACHE_FLUSH:   	       // itlb and dtlb must be reset
+                        r_dcache_flush_count = 0;
+                        r_dcache_fsm     = DCACHE_XTN_DC_FLUSH;
+                        break;
+
+                    case iss_t::XTN_ICACHE_INVAL:   		// icache and itlb access
+                        r_dcache_xtn_req = true;
+                        r_dcache_fsm     = DCACHE_XTN_IC_INVAL_VA;
+                        break;
+
+                    case iss_t::XTN_MMU_ICACHE_PA_INV:		// icache access
+                        r_dcache_xtn_req = true;
+                        r_dcache_fsm     = DCACHE_XTN_IC_INVAL_PA;
+                        break;
+
+                    case iss_t::XTN_ICACHE_FLUSH:   		// icache access
+                        r_dcache_xtn_req = true;
+                        r_dcache_fsm     = DCACHE_XTN_IC_FLUSH;
+                        break;
+
+                    case iss_t::XTN_SYNC:           		// wait until write buffer empty
+                        r_dcache_fsm     = DCACHE_XTN_SYNC;
+                        break;
+
+                    case iss_t::XTN_MMU_WORD_LO: 		// no cache or tlb access
+                        r_mmu_word_lo    = m_dreq.wdata;
+                        m_drsp.valid     = true;
+                        r_dcache_fsm     = DCACHE_IDLE;
+                        break;
+
+                    case iss_t::XTN_MMU_WORD_HI: 		// no cache or tlb access
+                        r_mmu_word_hi    = m_dreq.wdata;
+                        m_drsp.valid     = true;
+                        r_dcache_fsm     = DCACHE_IDLE;
+                        break;
+
+                    case iss_t::XTN_MMU_LL_RESET:      // no cache or tlb access
+                        r_dcache_llsc_valid = false;
+                        m_drsp.valid     = true;
+                        r_dcache_fsm     = DCACHE_IDLE;
+                    break;
+
+                    case iss_t::XTN_DATA_PADDR_EXT:     // no cache or tlb access
+                        r_dcache_paddr_ext = m_dreq.wdata;
+                        m_drsp.valid       = true;
+                        r_dcache_fsm       = DCACHE_IDLE;
+                    break;
+
+                    case iss_t::XTN_INST_PADDR_EXT:     // no cache or tlb access
+                        r_dcache_xtn_req = true;
+                        r_dcache_fsm     = DCACHE_XTN_IC_PADDR_EXT;
+                    break;
+
+                    case iss_t::XTN_ICACHE_PREFETCH:        // not implemented : no action
+                    case iss_t::XTN_DCACHE_PREFETCH:        // not implemented : no action
+                        m_drsp.valid     = true;
+                        r_dcache_fsm     = DCACHE_IDLE;
+                    break;
+
+                    case iss_t::XTN_DEBUG_MASK:     // debug mask
+                        m_debug_dcache_fsm = ((m_dreq.wdata & 0x1) != 0);
+                        m_debug_icache_fsm = ((m_dreq.wdata & 0x2) != 0);
+                        m_debug_cmd_fsm = ((m_dreq.wdata & 0x4) != 0);
+                        m_drsp.valid = true;
+                        r_dcache_fsm = DCACHE_IDLE;
+                        break;
+
+                    default:
+                        r_mmu_detr   = MMU_WRITE_UNDEFINED_XTN;
+                        r_mmu_dbvar  = m_dreq.addr;
+                        m_drsp.valid = true;
+                        m_drsp.error = true;
+                        r_dcache_fsm = DCACHE_IDLE;
+                        break;
+                    } // end switch xtn_opcode
+                } // end else
+            } // end if XTN_WRITE
+
+            // Handling processor requests to address space (READ/WRITE/LL/SC)
+            // The dtlb and dcache can be activated or not.
+            // We compute the cacheability, and check processor request validity:
+            // - If DTLB not activated : cacheability is defined by the segment table,
+            //   and there is no access rights checking.
+            // - If DTLB activated : cacheability is defined by the C bit in the PTE,
+            //   and the U & W bits of the PTE are checked, as well as the DTLB hit.
+            //   Jumps to the TLB_MISS sub-fsm in case of dtlb miss.
+            else
+            {
+                bool	    valid_req;
+                bool	    cacheable;
+
+                if ( not (r_mmu_mode.read() & DATA_TLB_MASK) )		// dtlb not activated
+                {
+                    valid_req     = true;
+
+                    if ( not (r_mmu_mode.read() & DATA_CACHE_MASK) ) cacheable = false;
+                    else cacheable = m_cacheability_table[(uint64_t)m_dreq.addr];
+                }
+                else 							                   // dtlb activated
+                {
+                    if ( tlb_hit )					// tlb hit
+                    {
+                        // cacheability
+                        if ( not (r_mmu_mode.read() & DATA_CACHE_MASK) ) cacheable = false;
+                        else cacheable = tlb_flags.c;
+
+                        // access rights checking
+                        if ( not tlb_flags.u and (m_dreq.mode == iss_t::MODE_USER))
+                        {
+                            if ( (m_dreq.type == iss_t::DATA_READ) or
+                                 (m_dreq.type == iss_t::DATA_LL) )
+                            {
+                                r_mmu_detr = MMU_READ_PRIVILEGE_VIOLATION;
+                            }
+                            else
+                            {
+                                r_mmu_detr = MMU_WRITE_PRIVILEGE_VIOLATION;
+                            }
+                            valid_req    = false;
+                            r_mmu_dbvar  = m_dreq.addr;
+                            m_drsp.valid = true;
+                            m_drsp.error = true;
+                            m_drsp.rdata = 0;
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name() << " DCACHE_IDLE>"
+          << " HIT in dtlb, but privilege violation" << std::endl;
+#endif
+                        }
+                        else if ( not tlb_flags.w and
+                                  ((m_dreq.type == iss_t::DATA_WRITE) or
+                                   (m_dreq.type == iss_t::DATA_SC)) )
+                        {
+                            r_mmu_detr   = MMU_WRITE_ACCES_VIOLATION;
+                            valid_req    = false;
+                            r_mmu_dbvar  = m_dreq.addr;
+                            m_drsp.valid = true;
+                            m_drsp.error = true;
+                            m_drsp.rdata = 0;
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name() << " DCACHE_IDLE>"
+          << " HIT in dtlb, but writable violation" << std::endl;
+#endif
+                        }
+                        else
+                        {
+                            valid_req    = true;
+                        }
+                    }
+                    else						// tlb miss
+                    {
+                        valid_req            = false;
+                        r_dcache_tlb_vaddr   = m_dreq.addr;
+                        r_dcache_tlb_ins     = false;
+                        r_dcache_fsm         = DCACHE_TLB_MISS;
+                    }
+                }    // end DTLB activated
+
+                if ( valid_req ) 	// processor request is valid (after MMU check)
+                {
+                    // READ request
+                    // The read requests are taken only if there is no cache update.
+                    // We request a VCI transaction to CMD FSM if miss or uncachable
+
+                    if ( ((m_dreq.type == iss_t::DATA_READ))
+                          and not r_dcache_updt_req.read() )
+                    {
+                        if ( cacheable )           	// cacheable read
+                        {
+                            if ( cache_state == CACHE_SLOT_STATE_EMPTY )   // cache miss
+                            {
+#ifdef INSTRUMENTATION
+m_cpt_dcache_miss++;
+#endif
+                                // request a VCI DMISS transaction
+                                r_dcache_vci_paddr    = paddr;
+                                r_dcache_vci_miss_req = true;
+                                r_dcache_miss_type    = PROC_MISS;
+                                r_dcache_fsm          = DCACHE_MISS_SELECT;
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name() << " DCACHE_IDLE>"
+          << " READ MISS in dcache" 
+          << " / PADDR = " << std::hex << paddr << std::endl;
+#endif
+                            }
+                            else if (cache_state == CACHE_SLOT_STATE_ZOMBI ) // pending cleanup
+                            {
+                                // stalled until cleanup is acknowledged
+                                r_dcache_fsm   = DCACHE_IDLE;
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name() << " DCACHE_IDLE>"
+          << " Pending cleanup, stalled until cleanup acknowledge"
+          << " / PADDR = " << std::hex << paddr << std::endl;
+#endif
+                            }
+                            else                                      // cache hit
+                            {
+#ifdef INSTRUMENTATION
+m_cpt_data_read++;
+#endif
+                                // returns data to processor
+                                m_drsp.valid   = true;
+                                m_drsp.error   = false;
+                                m_drsp.rdata   = cache_rdata;
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name() << " DCACHE_IDLE>"
+          << " READ HIT in dcache" 
+          << " : PADDR = " << std::hex << paddr 
+          << " / DATA  = " << std::hex << cache_rdata << std::endl;
+#endif
+                            }
+                        }
+                        else					// uncacheable read
+                        {
+                            r_dcache_vci_paddr      = paddr;
+                            r_dcache_vci_unc_be     = m_dreq.be;
+                            r_dcache_vci_unc_write  = false;
+                            r_dcache_vci_unc_req    = true;
+                            r_dcache_fsm            = DCACHE_UNC_WAIT;
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name() << " DCACHE_IDLE>"
+          << " READ UNCACHEABLE in dcache" 
+          << " / PADDR = " << std::hex << paddr << std::endl;
+#endif
+                        }
+                    } // end READ
+
+                    // LL request (non cachable)
+                    // We request a VCI LL transaction to CMD FSM and register
+                    // the LL/SC operation in llsc buffer.
+                    else if (m_dreq.type == iss_t::DATA_LL)
+                    {
+                        // register paddr in LLSC buffer
+                        r_dcache_llsc_paddr = paddr;
+                        r_dcache_llsc_count = LLSC_TIMEOUT;
+                        r_dcache_llsc_valid = true;
+
+                        // request an LL VCI transaction and go to DCACHE_LL_WAIT state
+                        r_dcache_vci_ll_req   = true;
+                        r_dcache_vci_paddr    = paddr;
+                        r_dcache_ll_rsp_count = 0;
+                        r_dcache_fsm          = DCACHE_LL_WAIT;
+
+                    }// end LL
+
+                    // WRITE request:
+                    // If the TLB is activated and the PTE Dirty bit is not set, we stall
+                    // the processor and set the Dirty bit before handling the write request,
+                    // going to the DCACHE_DIRTY_GT_PTE state.
+                    // If we don't need to set the Dirty bit, we can acknowledge
+                    // the processor request, as the write arguments (including the
+                    // physical address) are registered in r_dcache_save registers,
+                    // and the write will be done in the P1 pipeline stage.
+                    else if ( m_dreq.type == iss_t::DATA_WRITE )
+                    {
+                        if ( (r_mmu_mode.read() & DATA_TLB_MASK )
+                              and not tlb_flags.d )		// Dirty bit must be set
+                        {
+                            // The PTE physical address is obtained from the nline value (dtlb),
+                            // and from the virtual address (word index)
+                            if ( tlb_flags.b )	// PTE1
+                            {
+                                r_dcache_dirty_paddr = (paddr_t)(tlb_nline*(m_dcache_words<<2)) |
+                                                       (paddr_t)((m_dreq.addr>>19) & 0x3c);
+                            }
+                            else		// PTE2
+                            {
+                                r_dcache_dirty_paddr = (paddr_t)(tlb_nline*(m_dcache_words<<2)) |
+                                                       (paddr_t)((m_dreq.addr>>9) & 0x38);
+                            }
+                            r_dcache_fsm      = DCACHE_DIRTY_GET_PTE;
+                        }
+                        else					// Write request accepted
+                        {
+#ifdef INSTRUMENTATION
+m_cpt_data_write++;
+#endif
+                            // cleaning llsc buffer if address matching
+                            if ( paddr == r_dcache_llsc_paddr.read() )
+                                r_dcache_llsc_valid = false;
+
+                            if (not cacheable) 
+                            {                            
+                                r_dcache_vci_paddr      = paddr;
+                                r_dcache_vci_wdata      = m_dreq.wdata;
+                                r_dcache_vci_unc_write  = true;
+                                r_dcache_vci_unc_be     = m_dreq.be;
+                                r_dcache_vci_unc_req    = true;
+                                r_dcache_fsm            = DCACHE_UNC_WAIT;
+                            }
+                            else
+                            {
+                                // response to processor
+                                m_drsp.valid        = true;
+                                // activating P1 stage
+                                wbuf_request = true;
+                                updt_request = (cache_state == CACHE_SLOT_STATE_VALID);
+                            }
+                        }
+                    } // end WRITE
+
+                    // SC request:
+                    // If the TLB is activated and the PTE Dirty bit is not set, we stall
+                    // the processor and set the Dirty bit before handling the write request,
+                    // going to the DCACHE_DIRTY_GT_PTE state.
+                    // If we don't need to set the Dirty bit, we test the llsc buffer:
+                    // If failure, we send a negative response to processor.
+                    // If success, we request a SC transaction to CMD FSM and go
+                    // to DCACHE_SC_WAIT state.
+                    // We don't check a possible write hit in dcache, as the cache update
+                    // is done by the coherence transaction induced by the SC...
+                    else if ( m_dreq.type == iss_t::DATA_SC )
+                    {
+                        if ( (r_mmu_mode.read() & DATA_TLB_MASK )
+                              and not tlb_flags.d )			// Dirty bit must be set
+                        {
+                            // The PTE physical address is obtained from the nline value (dtlb),
+                            // and the word index (virtual address)
+                            if ( tlb_flags.b )	// PTE1
+                            {
+                                r_dcache_dirty_paddr = (paddr_t)(tlb_nline*(m_dcache_words<<2)) |
+                                                       (paddr_t)((m_dreq.addr>>19) & 0x3c);
+                            }
+                            else			// PTE2
+                            {
+                                r_dcache_dirty_paddr = (paddr_t)(tlb_nline*(m_dcache_words<<2)) |
+                                                       (paddr_t)((m_dreq.addr>>9) & 0x38);
+                            }
+                            r_dcache_fsm           = DCACHE_DIRTY_GET_PTE;
+                            m_drsp.valid = false;
+                            m_drsp.error = false;
+                            m_drsp.rdata = 0;
+                        }
+                        else					// SC request accepted
+                        {
+#ifdef INSTRUMENTATION
+m_cpt_data_sc++;
+#endif
+                            // checking local success
+                            if( r_dcache_llsc_valid.read() and
+                                (r_dcache_llsc_paddr.read() == paddr) )  // local success
+                            {
+                                // request an SC CMD and go to DCACHE_SC_WAIT state
+                                r_dcache_vci_paddr   = paddr;
+                                r_dcache_vci_sc_req  = true;
+                                r_dcache_vci_sc_data = m_dreq.wdata;
+                                r_dcache_fsm         = DCACHE_SC_WAIT;
+                            }
+                            else                                          // local fail
+                            {
+	                            m_drsp.valid = true;
+	                            m_drsp.error = false;
+	                            m_drsp.rdata = 0x1;
+                            }
+                        }
+                    } // end SC
+                } // end valid_req
+            }  // end if read/write/ll/sc request
+        } // end processor request
+
+        // itlb miss request
+    	else if ( r_icache_tlb_miss_req.read() and not wbuf_write_miss )
+        {
+            r_dcache_tlb_ins    = true;
+            r_dcache_tlb_vaddr  = r_icache_vaddr_save.read();
+            r_dcache_fsm        = DCACHE_TLB_MISS;
+        }
+
+        // Computing requests for P1 stage : r_dcache_wbuf_req & r_dcache_updt_req
+        r_dcache_updt_req = updt_request;
+        r_dcache_wbuf_req = wbuf_request or
+                            (r_dcache_wbuf_req.read() and wbuf_write_miss);
+        break;
+    }
+    /////////////////////
+    case DCACHE_TLB_MISS: // This is the entry point for the sub-fsm handling all tlb miss.
+                          // Input arguments are:
+                          // - r_dcache_tlb_vaddr
+                          // - r_dcache_tlb_ins (true when itlb miss)
+                          // The sub-fsm access the dcache to find the missing TLB entry,
+                          // and activates the cache miss procedure in case of miss.
+                          // It bypass the first level page table access if possible.
+                          // It uses atomic access to update the R/L access bits
+                          // in the page table if required.
+                          // It directly updates the itlb or dtlb, and writes into the
+                          // r_mmu_ins_* or r_mmu_data* error reporting registers.
+    {
+        uint32_t	ptba = 0;
+        bool		bypass;
+        paddr_t		pte_paddr;
+
+        // evaluate bypass in order to skip first level page table access
+        if ( r_dcache_tlb_ins.read() )				// itlb miss
+        {
+            bypass = r_itlb.get_bypass(r_dcache_tlb_vaddr.read(), &ptba);
+        }
+        else							// dtlb miss
+        {
+            bypass = r_dtlb.get_bypass(r_dcache_tlb_vaddr.read(), &ptba);
+        }
+
+        if ( not bypass )     // Try to read PTE1/PTD1 in dcache
+        {
+            pte_paddr = (((paddr_t)r_mmu_ptpr.read()) << (INDEX1_NBITS+2)) |
+                        ((((paddr_t)r_dcache_tlb_vaddr.read()) >> PAGE_M_NBITS) << 2);
+            r_dcache_tlb_paddr = pte_paddr;
+            r_dcache_fsm       = DCACHE_TLB_PTE1_GET;
+        }
+        else                  // Try to read PTE2 in dcache
+        {
+            pte_paddr = (paddr_t)ptba << PAGE_K_NBITS |
+                        (paddr_t)(r_dcache_tlb_vaddr.read()&PTD_ID2_MASK)>>(PAGE_K_NBITS-3);
+            r_dcache_tlb_paddr = pte_paddr;
+            r_dcache_fsm       = DCACHE_TLB_PTE2_GET;
+        }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    if ( r_dcache_tlb_ins.read() )
+        std::cout << "  <PROC " << name() << " DCACHE_TLB_MISS> ITLB miss";
+    else
+        std::cout << "  <PROC " << name() << " DCACHE_TLB_MISS> DTLB miss";
+    std::cout << " / VADDR = " << std::hex << r_dcache_tlb_vaddr.read()
+              << " / ptpr  = " << (((paddr_t)r_mmu_ptpr.read()) << (INDEX1_NBITS+2))
+              << " / BYPASS = " << bypass
+              << " / PTE_ADR = " << pte_paddr << std::endl;
+}
+#endif
+
+        break;
+    }
+    /////////////////////////
+    case DCACHE_TLB_PTE1_GET:	// try to read a PT1 entry in dcache
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        uint32_t 	entry;
+        size_t		way;
+        size_t		set;
+        size_t		word;
+        int         cache_state;
+        r_dcache.read( r_dcache_tlb_paddr.read(),
+                       &entry,
+                       &way,
+                       &set,
+                       &word,
+                       &cache_state );
+#ifdef INSTRUMENTATION
+m_cpt_dcache_data_read++;
+m_cpt_dcache_dir_read++;
+#endif
+        if ( cache_state == CACHE_SLOT_STATE_VALID )   // hit in dcache
+        {
+            if ( not (entry & PTE_V_MASK) )	// unmapped
+            {
+                if ( r_dcache_tlb_ins.read() )
+                {
+                    r_mmu_ietr             = MMU_READ_PT1_UNMAPPED;
+                    r_mmu_ibvar            = r_dcache_tlb_vaddr.read();
+                    r_icache_tlb_miss_req  = false;
+                    r_icache_tlb_rsp_error = true;
+                }
+                else
+                {
+                    r_mmu_detr             = MMU_READ_PT1_UNMAPPED;
+                    r_mmu_dbvar            = r_dcache_tlb_vaddr.read();
+                    m_drsp.valid             = true;
+                    m_drsp.error             = true;
+                }
+                r_dcache_fsm          = DCACHE_IDLE;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE1_GET> HIT in dcache, but unmapped"
+              << std::hex << " / paddr = " << r_dcache_tlb_paddr.read()
+              << std::dec << " / way = " << way
+              << std::dec << " / set = " << set
+              << std::dec << " / word = " << word
+              << std::hex << " / PTE1 = " << entry << std::endl;
+}
+#endif
+
+            }
+            else if( entry & PTE_T_MASK ) 	//  PTD : me must access PT2
+            {
+                // mark the cache line ac containing a PTD
+                r_dcache_contains_ptd[m_dcache_sets*way+set] = true;
+
+                // register bypass
+                if ( r_dcache_tlb_ins.read() )		// itlb
+                {
+                    r_itlb.set_bypass(r_dcache_tlb_vaddr.read(),
+                                      entry & ((1 << (m_paddr_nbits-PAGE_K_NBITS)) - 1),
+                                      r_dcache_tlb_paddr.read() / (m_icache_words<<2) );
+                }
+                else					// dtlb
+                {
+                    r_dtlb.set_bypass(r_dcache_tlb_vaddr.read(),
+                                      entry & ((1 << (m_paddr_nbits-PAGE_K_NBITS)) - 1),
+                                      r_dcache_tlb_paddr.read() / (m_dcache_words<<2) );
+                }
+                r_dcache_tlb_paddr =
+                    (paddr_t)(entry & ((1<<(m_paddr_nbits-PAGE_K_NBITS))-1)) << PAGE_K_NBITS |
+                    (paddr_t)(((r_dcache_tlb_vaddr.read() & PTD_ID2_MASK) >> PAGE_K_NBITS) << 3);
+                r_dcache_fsm       = DCACHE_TLB_PTE2_GET;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE1_GET> HIT in dcache"
+              << std::hex << " / paddr = " << r_dcache_tlb_paddr.read()
+              << std::dec << " / way = " << way
+              << std::dec << " / set = " << set
+              << std::dec << " / word = " << word
+              << std::hex << " / PTD = " << entry << std::endl;
+}
+#endif
+            }
+            else			//  PTE1 :  we must update the TLB
+            {
+                r_dcache_in_tlb[m_icache_sets*way+set] = true;
+                r_dcache_tlb_pte_flags  = entry;
+                r_dcache_tlb_cache_way  = way;
+                r_dcache_tlb_cache_set  = set;
+                r_dcache_tlb_cache_word = word;
+                r_dcache_fsm            = DCACHE_TLB_PTE1_SELECT;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE1_GET> HIT in dcache"
+              << std::hex << " / paddr = " << r_dcache_tlb_paddr.read()
+              << std::dec << " / way = " << way
+              << std::dec << " / set = " << set
+              << std::dec << " / word = " << word
+              << std::hex << " / PTE1 = " << entry << std::endl;
+}
+#endif
+            }
+        }
+        else if ( cache_state == CACHE_SLOT_STATE_ZOMBI ) // pending cleanup
+        {
+            // stalled until cleanup is acknowledged
+            r_dcache_fsm   = DCACHE_TLB_PTE1_GET;
+        }
+        else		// we must load the missing cache line in dcache
+        {
+            r_dcache_vci_miss_req  = true;
+            r_dcache_vci_paddr     = r_dcache_tlb_paddr.read();
+            r_dcache_save_paddr    = r_dcache_tlb_paddr.read();
+            r_dcache_miss_type     = PTE1_MISS;
+            r_dcache_fsm           = DCACHE_MISS_SELECT;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE1_GET> MISS in dcache:"
+              << " PTE1 address = " << std::hex << r_dcache_tlb_paddr.read() << std::endl;
+}
+#endif
+        }
+        break;
+    }
+    ////////////////////////////
+    case DCACHE_TLB_PTE1_SELECT:	// select a slot for PTE1
+    {
+        size_t 	way;
+        size_t 	set;
+
+        if ( r_dcache_tlb_ins.read() )
+        {
+            r_itlb.select( r_dcache_tlb_vaddr.read(),
+                           true,  // PTE1
+                           &way,
+                           &set );
+#ifdef INSTRUMENTATION
+m_cpt_itlb_read++;
+#endif
+        }
+        else
+        {
+            r_dtlb.select( r_dcache_tlb_vaddr.read(),
+                           true,  // PTE1
+                           &way,
+                           &set );
+#ifdef INSTRUMENTATION
+m_cpt_dtlb_read++;
+#endif
+        }
+        r_dcache_tlb_way = way;
+        r_dcache_tlb_set = set;
+        r_dcache_fsm     = DCACHE_TLB_PTE1_UPDT;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    if ( r_dcache_tlb_ins.read() )
+        std::cout << "  <PROC " << name() 
+                  << " DCACHE_TLB_PTE1_SELECT> Select a slot in ITLB:";
+    else
+        std::cout << "  <PROC " << name() 
+                  << ".DCACHE_TLB_PTE1_SELECT> Select a slot in DTLB:";
+        std::cout << " way = " << std::dec << way
+                  << " / set = " << set << std::endl;
+}
+#endif
+        break;
+    }
+    //////////////////////////
+    case DCACHE_TLB_PTE1_UPDT:	// write a new PTE1 in tlb after testing the L/R bit
+                                // - if L/R bit already set, exit the sub-fsm.
+                                // - if not, we update the page table but we dont write
+                                //   neither in DCACHE, nor in TLB, as this will be done by
+                                //   the coherence mechanism.
+    {
+        paddr_t	  nline    = r_dcache_tlb_paddr.read() >> (uint32_log2(m_dcache_words)+2);
+        uint32_t  pte      = r_dcache_tlb_pte_flags.read();
+        bool	  pt_updt  = false;
+        bool	  local    = true;
+
+        // We should compute the access locality:
+        // The PPN MSB bits define the destination cluster index.
+        // The m_srcid MSB bits define the source cluster index.
+        // The number of bits to compare depends on the number of clusters,
+        // and can be obtained in the mapping table.
+        // As long as this computation is not done, all access are local.
+
+        if ( local )						// local access
+        {
+            if ( not ((pte & PTE_L_MASK) == PTE_L_MASK) ) // we must set the L bit
+            {
+                pt_updt                = true;
+                r_dcache_vci_cas_old    = pte;
+                r_dcache_vci_cas_new    = pte | PTE_L_MASK;
+                pte                    = pte | PTE_L_MASK;
+                r_dcache_tlb_pte_flags = pte;
+            }
+        }
+        else 							// remote access
+        {
+            if ( not ((pte & PTE_R_MASK) == PTE_R_MASK) ) // we must set the R bit
+            {
+                pt_updt                = true;
+                r_dcache_vci_cas_old    = pte;
+                r_dcache_vci_cas_new    = pte | PTE_R_MASK;
+                pte                    = pte | PTE_R_MASK;
+                r_dcache_tlb_pte_flags = pte;
+            }
+        }
+
+        if ( not pt_updt )					// update TLB and return
+        {
+            if ( r_dcache_tlb_ins.read() )
+            {
+                r_itlb.write( true,		// 2M page
+                              pte,
+                              0,		// argument unused for a PTE1
+                              r_dcache_tlb_vaddr.read(),
+                              r_dcache_tlb_way.read(),
+                              r_dcache_tlb_set.read(),
+                              nline );
+#ifdef INSTRUMENTATION
+m_cpt_itlb_write++;
+#endif
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE1_UPDT> write PTE1 in ITLB"
+              << " / set = " << std::dec << r_dcache_tlb_set.read()
+              << " / way = " << r_dcache_tlb_way.read() << std::endl;
+    r_itlb.printTrace();
+}
+#endif
+            }
+            else
+            {
+                r_dtlb.write( true,		// 2M page
+                              pte,
+                              0,		// argument unused for a PTE1
+                              r_dcache_tlb_vaddr.read(),
+                              r_dcache_tlb_way.read(),
+                              r_dcache_tlb_set.read(),
+                              nline );
+#ifdef INSTRUMENTATION
+m_cpt_dtlb_write++;
+#endif
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE1_UPDT> write PTE1 in DTLB"
+              << " / set = " << std::dec << r_dcache_tlb_set.read()
+              << " / way = " << r_dcache_tlb_way.read() << std::endl;
+    r_dtlb.printTrace();
+}
+#endif
+            }
+            r_dcache_fsm = DCACHE_TLB_RETURN;
+        }
+        else                            // update page table but not TLB
+        {
+            r_dcache_fsm = DCACHE_TLB_LR_UPDT;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE1_UPDT> L/R bit update required"
+              << std::endl;
+}
+#endif
+        }
+        break;
+    }
+    /////////////////////////
+    case DCACHE_TLB_PTE2_GET:	// Try to get a PTE2 (64 bits) in the dcache
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        uint32_t 	pte_flags;
+        uint32_t 	pte_ppn;
+        size_t   	way;
+        size_t   	set;
+        size_t		word;
+        int         cache_state;
+
+        r_dcache.read( r_dcache_tlb_paddr.read(),
+                       &pte_flags,
+                       &pte_ppn,
+                       &way,
+                       &set,
+                       &word,
+                       &cache_state );
+#ifdef INSTRUMENTATION
+m_cpt_dcache_data_read++;
+m_cpt_dcache_dir_read++;
+#endif
+        if ( cache_state == CACHE_SLOT_STATE_VALID )   // hit in dcache
+        {
+            if ( not (pte_flags & PTE_V_MASK) )	// unmapped
+            {
+                if ( r_dcache_tlb_ins.read() )
+                {
+                    r_mmu_ietr             = MMU_READ_PT2_UNMAPPED;
+                    r_mmu_ibvar            = r_dcache_tlb_vaddr.read();
+                    r_icache_tlb_miss_req  = false;
+                    r_icache_tlb_rsp_error = true;
+                }
+                else
+                {
+                    r_mmu_detr             = MMU_READ_PT2_UNMAPPED;
+                    r_mmu_dbvar            = r_dcache_tlb_vaddr.read();
+                    m_drsp.valid           = true;
+                    m_drsp.error           = true;
+                }
+                r_dcache_fsm               = DCACHE_IDLE;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_PTE2_GET> HIT in dcache, but PTE unmapped"
+              << " PTE_FLAGS = " << std::hex << pte_flags
+              << " PTE_PPN = " << std::hex << pte_ppn << std::endl;
+}
+#endif
+            }
+            else				// mapped : we must update the TLB
+            {
+                r_dcache_in_tlb[m_dcache_sets*way+set] = true;
+                r_dcache_tlb_pte_flags  = pte_flags;
+                r_dcache_tlb_pte_ppn    = pte_ppn;
+                r_dcache_tlb_cache_way  = way;
+                r_dcache_tlb_cache_set  = set;
+                r_dcache_tlb_cache_word = word;
+                r_dcache_fsm            = DCACHE_TLB_PTE2_SELECT;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE2_GET> HIT in dcache:"
+              << " PTE_FLAGS = " << std::hex << pte_flags
+              << " PTE_PPN = " << std::hex << pte_ppn << std::endl;
+}
+#endif
+             }
+        }
+        else if ( cache_state == CACHE_SLOT_STATE_ZOMBI ) // pending cleanup
+        {
+            // stalled until cleanup is acknowledged
+            r_dcache_fsm   = DCACHE_TLB_PTE2_GET;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name() 
+              << " DCACHE_TLB_PTE2_GET> ZOMBI in dcache: waiting cleanup ack"
+              << std::endl;
+}
+#endif
+        }
+        else            // we must load the missing cache line in dcache
+        {
+            r_dcache_fsm          = DCACHE_MISS_SELECT;
+            r_dcache_vci_miss_req = true;
+            r_dcache_vci_paddr    = r_dcache_tlb_paddr.read();
+            r_dcache_save_paddr   = r_dcache_tlb_paddr.read();
+            r_dcache_miss_type    = PTE2_MISS;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_PTE2_GET> MISS in dcache:"
+              << " PTE address = " << std::hex << r_dcache_tlb_paddr.read() << std::endl;
+}
+#endif
+        }
+        break;
+    }
+    ////////////////////////////
+    case DCACHE_TLB_PTE2_SELECT:    // select a slot for PTE2
+    {
+        size_t way;
+        size_t set;
+
+        if ( r_dcache_tlb_ins.read() )
+        {
+            r_itlb.select( r_dcache_tlb_vaddr.read(),
+                           false,	// PTE2
+                           &way,
+                           &set );
+#ifdef INSTRUMENTATION
+m_cpt_itlb_read++;
+#endif
+        }
+        else
+        {
+            r_dtlb.select( r_dcache_tlb_vaddr.read(),
+                           false,	// PTE2
+                           &way,
+                           &set );
+#ifdef INSTRUMENTATION
+m_cpt_dtlb_read++;
+#endif
+        }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    if ( r_dcache_tlb_ins.read() )
+        std::cout << "  <PROC " << name()
+                  << " DCACHE_TLB_PTE2_SELECT> Select a slot in ITLB:";
+    else
+        std::cout << "  <PROC " << name()
+                  << " DCACHE_TLB_PTE2_SELECT> Select a slot in DTLB:";
+        std::cout << " way = " << std::dec << way
+                  << " / set = " << set << std::endl;
+}
+#endif
+        r_dcache_tlb_way = way;
+        r_dcache_tlb_set = set;
+        r_dcache_fsm     = DCACHE_TLB_PTE2_UPDT;
+        break;
+    }
+    //////////////////////////
+    case DCACHE_TLB_PTE2_UPDT:	// write a new PTE2 in tlb after testing the L/R bit
+                                // - if L/R bit already set, exit the sub-fsm.
+                                // - if not, we update the page table but we dont write
+                                //   neither in DCACHE, nor in TLB, as this will be done by
+                                //   the coherence mechanism.
+    {
+        paddr_t	        nline     = r_dcache_tlb_paddr.read() >> (uint32_log2(m_dcache_words)+2);
+        uint32_t        pte_flags = r_dcache_tlb_pte_flags.read();
+        uint32_t        pte_ppn   = r_dcache_tlb_pte_ppn.read();
+        bool            pt_updt   = false;
+        bool            local     = true;
+
+        // We should compute the access locality:
+        // The PPN MSB bits define the destination cluster index.
+        // The m_srcid MSB bits define the source cluster index.
+        // The number of bits to compare depends on the number of clusters,
+        // and can be obtained in the mapping table.
+        // As long as this computation is not done, all access are local.
+
+        if ( local )						// local access
+        {
+            if ( not ((pte_flags & PTE_L_MASK) == PTE_L_MASK) ) // we must set the L bit
+            {
+                pt_updt                = true;
+                r_dcache_vci_cas_old   = pte_flags;
+                r_dcache_vci_cas_new   = pte_flags | PTE_L_MASK;
+                pte_flags              = pte_flags | PTE_L_MASK;
+		        r_dcache_tlb_pte_flags = pte_flags;
+            }
+        }
+        else                                                    // remote access
+        {
+            if ( not ((pte_flags & PTE_R_MASK) == PTE_R_MASK) ) // we must set the R bit
+            {
+                pt_updt                = true;
+                r_dcache_vci_cas_old   = pte_flags;
+                r_dcache_vci_cas_new   = pte_flags | PTE_R_MASK;
+                pte_flags              = pte_flags | PTE_R_MASK;
+		        r_dcache_tlb_pte_flags = pte_flags;
+            }
+        }
+
+        if ( not pt_updt )                       // update TLB
+        {
+            if ( r_dcache_tlb_ins.read() )
+            {
+                r_itlb.write( false,	// 4K page
+                              pte_flags,
+                              pte_ppn,
+                              r_dcache_tlb_vaddr.read(),
+                              r_dcache_tlb_way.read(),
+                              r_dcache_tlb_set.read(),
+                              nline );
+#ifdef INSTRUMENTATION
+m_cpt_itlb_write++;
+#endif
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_PTE2_UPDT> write PTE2 in ITLB"
+              << " / set = " << std::dec << r_dcache_tlb_set.read()
+              << " / way = " << r_dcache_tlb_way.read() << std::endl;
+    r_itlb.printTrace();
+}
+#endif
+            }
+            else
+            {
+                r_dtlb.write( false,	// 4K page
+                              pte_flags,
+                              pte_ppn,
+                              r_dcache_tlb_vaddr.read(),
+                              r_dcache_tlb_way.read(),
+                              r_dcache_tlb_set.read(),
+                              nline );
+#ifdef INSTRUMENTATION
+m_cpt_dtlb_write++;
+#endif
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_PTE2_UPDT> write PTE2 in DTLB"
+              << " / set = " << std::dec << r_dcache_tlb_set.read()
+              << " / way = " << r_dcache_tlb_way.read() << std::endl;
+    r_dtlb.printTrace();
+}
+#endif
+
+            }
+            r_dcache_fsm = DCACHE_TLB_RETURN;
+        }
+        else                                   // update page table but not TLB
+        {
+            r_dcache_fsm = DCACHE_TLB_LR_UPDT; 	// dcache and page table update
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_PTE2_UPDT> L/R bit update required" << std::endl;
+}
+#endif
+        }
+        break;
+    }
+    ////////////////////////
+    case DCACHE_TLB_LR_UPDT:        // request a CAS transaction to update L/R bit
+    {
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_LR_UPDT> Update dcache: (L/R) bit" << std::endl;
+}
+#endif
+        // r_dcache_vci_cas_old & r_dcache_vci_cas_new registers are already set
+        r_dcache_vci_paddr = r_dcache_tlb_paddr.read();
+
+        // checking llsc reservation buffer
+        if ( r_dcache_llsc_paddr.read() == r_dcache_tlb_paddr.read() )
+            r_dcache_llsc_valid = false;
+
+        // request a CAS CMD and go to DCACHE_TLB_LR_WAIT state
+        r_dcache_vci_cas_req = true;
+        r_dcache_fsm         = DCACHE_TLB_LR_WAIT;
+        break;
+    }
+    ////////////////////////
+    case DCACHE_TLB_LR_WAIT:		// Waiting the response to SC transaction for DIRTY bit.
+                                    // We consume the response in rsp FIFO,
+                                    // and exit the sub-fsm, but we don't
+                                    // analyse the response, because we don't
+                                    // care if the L/R bit update is not done.
+                                    // We must take the coherence requests because
+                                    // there is a risk of dead-lock
+
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_data_error.read() ) 	// bus error
+        {
+            std::cout << "BUS ERROR in DCACHE_TLB_LR_WAIT state" << std::endl;
+            std::cout << "This should not happen in this state" << std::endl;
+            exit(0);
+        }
+        else if ( r_vci_rsp_fifo_dcache.rok() ) // response available
+        {
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_LR_WAIT> SC response received" << std::endl;
+}
+#endif
+            vci_rsp_fifo_dcache_get = true;
+            r_dcache_fsm            = DCACHE_TLB_RETURN;
+        }
+        break;
+    }
+    ///////////////////////
+    case DCACHE_TLB_RETURN:		// return to caller depending on tlb miss type
+    {
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_TLB_RETURN> TLB MISS completed" << std::endl;
+}
+#endif
+        if ( r_dcache_tlb_ins.read() ) r_icache_tlb_miss_req = false;
+        r_dcache_fsm = DCACHE_IDLE;
+        break;
+    }
+    ///////////////////////
+    case DCACHE_XTN_SWITCH:		// The r_ptpr registers must be written,
+                                // and both itlb and dtlb must be flushed.
+                                // Caution : the itlb miss requests must be taken
+                                // to avoid dead-lock in case of simultaneous ITLB miss
+                                // Caution : the clack and cc requests must be taken
+                                // to avoid dead-lock
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // itlb miss request
+        if ( r_icache_tlb_miss_req.read() )
+        {
+            r_dcache_tlb_ins    = true;
+            r_dcache_tlb_vaddr  = r_icache_vaddr_save.read();
+            r_dcache_fsm        = DCACHE_TLB_MISS;
+            break;
+        }
+
+        if ( not r_dcache_xtn_req.read() )
+        {
+            r_dtlb.flush();
+            r_mmu_ptpr   = m_dreq.wdata;
+            r_dcache_fsm = DCACHE_IDLE;
+            m_drsp.valid = true;
+        }
+        break;
+    }
+    /////////////////////
+    case DCACHE_XTN_SYNC:		// waiting until write buffer empty
+                                // The coherence request must be taken
+                                // as there is a risk of dead-lock
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( r_wbuf.empty() )
+        {
+            m_drsp.valid   = true;
+            r_dcache_fsm = DCACHE_IDLE;
+        }
+        break;
+    }
+    ////////////////////////
+    case DCACHE_XTN_IC_FLUSH:       // Waiting completion of an XTN request to the ICACHE FSM
+    case DCACHE_XTN_IC_INVAL_VA:    // Caution : the itlb miss requests must be taken
+    case DCACHE_XTN_IC_INVAL_PA:    // because the XTN_ICACHE_INVAL request to icache
+    case DCACHE_XTN_IC_PADDR_EXT:   // can generate an itlb miss,
+    case DCACHE_XTN_IT_INVAL:       // and because it can exist a simultaneous ITLB miss
+
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // itlb miss request
+        if ( r_icache_tlb_miss_req.read() )
+        {
+            r_dcache_tlb_ins    = true;
+            r_dcache_tlb_vaddr  = r_icache_vaddr_save.read();
+            r_dcache_fsm        = DCACHE_TLB_MISS;
+            break;
+        }
+
+        // test if XTN request to icache completed
+        if ( not r_dcache_xtn_req.read() )
+        {
+            r_dcache_fsm = DCACHE_IDLE;
+            m_drsp.valid = true;
+        }
+        break;
+    }
+    /////////////////////////
+    case DCACHE_XTN_DC_FLUSH:	// Invalidate sequencially all cache lines, using
+                                // r_dcache_flush_count as a slot counter,
+                                // looping in this state until all slots have been visited.
+                                // It can require two cycles per slot:
+                                // We test here the slot state, and make the actual inval
+                                // (if line is valid) in DCACHE_XTN_DC_FLUSH_GO state.
+                                // A cleanup request is generated for each valid line.
+                                // returns to IDLE and flush TLBs when last slot
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( not r_dcache_cc_send_req.read() ) // blocked until previous cc_send request is sent
+        {
+            int       state;
+            paddr_t   tag;
+            size_t    way = r_dcache_flush_count.read()/m_dcache_sets;
+            size_t    set = r_dcache_flush_count.read()%m_dcache_sets;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_read++;
+#endif
+            r_dcache.read_dir( way,
+                               set,
+                               &tag,
+                               &state );
+
+            if ( state == CACHE_SLOT_STATE_VALID )         // inval required
+            {
+                // request cleanup
+                r_dcache_cc_send_req   = true;
+                r_dcache_cc_send_nline = tag * m_dcache_sets + set;
+                r_dcache_cc_send_way   = way;
+                r_dcache_cc_send_type  = CC_TYPE_CLEANUP;
+
+                // goes to DCACHE_XTN_DC_FLUSH_GO to inval directory
+                r_dcache_miss_way     = way;
+                r_dcache_miss_set     = set;
+                r_dcache_fsm          = DCACHE_XTN_DC_FLUSH_GO;
+            }
+            else if ( r_dcache_flush_count.read() ==
+                      (m_dcache_sets*m_dcache_ways - 1) )  // last slot
+            {
+                r_dtlb.reset();
+                r_itlb.reset();
+                r_dcache_fsm = DCACHE_IDLE;
+                m_drsp.valid = true;
+            }
+
+            // saturation counter
+            if ( r_dcache_flush_count.read() < (m_dcache_sets*m_dcache_ways - 1) )
+                r_dcache_flush_count = r_dcache_flush_count.read() + 1;
+        }
+        break;
+    }
+    ////////////////////////////
+    case DCACHE_XTN_DC_FLUSH_GO:    // Switch the cache slot to ZOMBI state
+                                    // and reset directory extension.
+                                    // returns to IDLE and flush TLBs when last slot
+    {
+        size_t way = r_dcache_miss_way.read();
+        size_t set = r_dcache_miss_set.read();
+
+        r_dcache_in_tlb[m_dcache_sets*way+set]       = false;
+        r_dcache_contains_ptd[m_dcache_sets*way+set] = false;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_write++;
+#endif
+        r_dcache.write_dir( way,
+                            set,
+                            CACHE_SLOT_STATE_ZOMBI );
+
+        if ( r_dcache_flush_count.read() ==
+             (m_dcache_sets*m_dcache_ways - 1) )  // last slot
+        {
+            r_dtlb.reset();
+            r_itlb.reset();
+            r_dcache_fsm = DCACHE_IDLE;
+            m_drsp.valid = true;
+        }
+        else
+        {
+            r_dcache_fsm = DCACHE_XTN_DC_FLUSH;
+        }
+        break;
+    }
+    /////////////////////////
+    case DCACHE_XTN_DT_INVAL: 	// handling processor XTN_DTLB_INVAL request
+    {
+        r_dtlb.inval(r_dcache_save_wdata.read());
+        r_dcache_fsm        = DCACHE_IDLE;
+        m_drsp.valid          = true;
+        break;
+    }
+    ////////////////////////////
+    case DCACHE_XTN_DC_INVAL_VA:  // selective cache line invalidate with virtual address
+                                  // requires 3 cycles: access tlb, read cache, inval cache
+                               	  // we compute the physical address in this state
+    {
+        paddr_t paddr;
+        bool    hit;
+
+        if ( r_mmu_mode.read() & DATA_TLB_MASK ) 	// dtlb activated
+        {
+
+#ifdef INSTRUMENTATION
+m_cpt_dtlb_read++;
+#endif
+            hit = r_dtlb.translate( r_dcache_save_wdata.read(),
+                                    &paddr );
+        }
+        else 						// dtlb not activated
+        {
+            paddr = (paddr_t)r_dcache_save_wdata.read();
+            if (vci_param::N > 32) 
+                paddr = paddr | ((paddr_t)(r_dcache_paddr_ext.read()) << 32);
+            hit   = true;
+        }
+
+        if ( hit )		// tlb hit
+        {
+            r_dcache_save_paddr = paddr;
+            r_dcache_fsm      = DCACHE_XTN_DC_INVAL_PA;
+        }
+        else			// tlb miss
+       	{
+
+#ifdef INSTRUMENTATION
+m_cpt_dtlb_miss++;
+#endif
+            r_dcache_tlb_ins    = false;		// dtlb
+            r_dcache_tlb_vaddr  = r_dcache_save_wdata.read();
+            r_dcache_fsm        = DCACHE_TLB_MISS;
+        }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_XTN_DC_INVAL_VA> Compute physical address" << std::hex
+              << " / VADDR = " << r_dcache_save_wdata.read()
+              << " / PADDR = " << paddr << std::endl;
+}
+#endif
+
+        break;
+    }
+    ////////////////////////////
+    case DCACHE_XTN_DC_INVAL_PA:  // selective cache line invalidate with physical address
+                                  // requires 2 cycles: read cache / inval cache
+                                  // In this state we read dcache.
+    {
+        size_t		way;
+        size_t		set;
+        size_t		word;
+        int         state;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_read++;
+#endif
+        r_dcache.read_dir( r_dcache_save_paddr.read(),
+                           &state,
+                           &way,
+                           &set,
+                           &word );
+
+        if ( state == CACHE_SLOT_STATE_VALID )	// inval to be done
+        {
+            r_dcache_xtn_way = way;
+            r_dcache_xtn_set = set;
+            r_dcache_fsm      = DCACHE_XTN_DC_INVAL_GO;
+        }
+        else		// miss : nothing to do
+        {
+            r_dcache_fsm      = DCACHE_IDLE;
+            m_drsp.valid      = true;
+        }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_XTN_DC_INVAL_PA> Test hit in dcache" << std::hex
+              << " / PADDR = " << r_dcache_save_paddr.read() << std::dec
+              << " / HIT = " << (state == CACHE_SLOT_STATE_VALID)
+              << " / SET = " << set
+              << " / WAY = " << way << std::endl;
+}
+#endif
+        break;
+    }
+    ////////////////////////////
+    case DCACHE_XTN_DC_INVAL_GO:  // In this state, we invalidate the cache line
+        			              // Blocked if previous cleanup not completed
+                                  // Test if itlb or dtlb inval is required
+    {
+        if ( not r_dcache_cc_send_req.read() ) // blocked until previous cc_send request is sent
+        {
+            size_t	way        = r_dcache_xtn_way.read();
+            size_t	set        = r_dcache_xtn_set.read();
+            paddr_t nline      = r_dcache_save_paddr.read() / (m_dcache_words<<2);
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_write++;
+#endif
+            r_dcache.write_dir( way,
+                                set,
+                                CACHE_SLOT_STATE_ZOMBI );
+
+            // request cleanup
+            r_dcache_cc_send_req   = true;
+            r_dcache_cc_send_nline = nline;
+            r_dcache_cc_send_way   = way;
+            r_dcache_cc_send_type  = CC_TYPE_CLEANUP;
+
+            // possible itlb & dtlb invalidate
+            if ( r_dcache_in_tlb[way*m_dcache_sets+set] )
+            {
+                r_dcache_tlb_inval_line = nline;
+                r_dcache_tlb_inval_set  = 0;
+                r_dcache_fsm_scan_save  = DCACHE_XTN_DC_INVAL_END;
+                r_dcache_fsm            = DCACHE_INVAL_TLB_SCAN;
+                r_dcache_in_tlb[way*m_dcache_sets+set] = false;
+            }
+            else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )
+            {
+                r_itlb.reset();
+                r_dtlb.reset();
+                r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+                r_dcache_fsm = DCACHE_IDLE;
+                m_drsp.valid = true;
+            }
+            else
+            {
+                r_dcache_fsm = DCACHE_IDLE;
+                m_drsp.valid = true;
+            }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_XTN_DC_INVAL_GO> Actual dcache inval" << std::hex
+              << " / PADDR = " << r_dcache_save_paddr.read() << std::endl;
+}
+#endif
+	    }
+        break;
+    }
+    //////////////////////////////
+    case DCACHE_XTN_DC_INVAL_END:  	// send response to processor XTN request
+    {
+        r_dcache_fsm = DCACHE_IDLE;
+        m_drsp.valid = true;
+        break;
+    }
+    ////////////////////////
+    case DCACHE_MISS_SELECT:       // Try to select a slot in associative set,
+                                   // Waiting in this state if no slot available.
+                                   // If a victim slot has been choosen and the r_icache_cc_send_req is false, 
+                                   // we send the cleanup request in this state. 
+                                   // If not, a r_icache_cleanup_victim_req flip-flop is
+                                   // utilized for saving this cleanup request, and it will be sent later
+                                   // in state ICACHE_MISS_WAIT or ICACHE_MISS_UPDT_DIR. 
+                                   // The r_icache_miss_clack flip-flop is set
+                                   // when a cleanup is required
+    {
+        if ( m_dreq.valid) m_cost_data_miss_frz++;
+
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        bool     found = false;
+        bool     cleanup = false;
+        size_t   way = 0;
+        size_t   set = 0;
+        paddr_t  victim = 0;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_read++;
+#endif
+        r_dcache.read_select( r_dcache_save_paddr.read(),
+                              &victim,
+                              &way,
+                              &set,
+                              &found,
+                              &cleanup );
+
+        if (  not found )
+        {
+            break;
+        }
+        else
+        {
+            r_dcache_miss_way = way;
+            r_dcache_miss_set = set;
+
+            if ( cleanup )
+            {
+                if ( not r_dcache_cc_send_req.read() )
+                {
+                    r_dcache_cc_send_req    = true;
+                    r_dcache_cc_send_nline  = victim;
+                    r_dcache_cc_send_way    = way;
+                    r_dcache_cc_send_type   = CC_TYPE_CLEANUP;    
+
+                }
+                else
+                {
+                    r_dcache_cleanup_victim_req   = true;
+                    r_dcache_cleanup_victim_nline = victim;
+                }
+
+                r_dcache_miss_clack           = true;
+                r_dcache_fsm                  = DCACHE_MISS_CLEAN;
+            }
+            else
+            {
+                r_dcache_fsm          = DCACHE_MISS_WAIT;
+            }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_MISS_SELECT> Select a slot:" << std::dec
+              << " / WAY = "   << way
+              << " / SET = "   << set
+              << " / PADDR = " << std::hex << r_dcache_save_paddr.read();
+    if(cleanup) std::cout << " / VICTIM = " << (victim*m_dcache_words*4) << std::endl;
+    else        std::cout << std::endl;
+}
+#endif
+        } // end found
+        break;
+    }
+    ///////////////////////
+    case DCACHE_MISS_CLEAN:		// switch the slot to ZOMBI state
+                                // and possibly request itlb or dtlb invalidate
+    {
+        if ( m_dreq.valid) m_cost_data_miss_frz++;
+
+        size_t  way   = r_dcache_miss_way.read();
+        size_t  set   = r_dcache_miss_set.read();
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_read++;
+#endif
+        r_dcache.write_dir( way,
+                            set,
+                            CACHE_SLOT_STATE_ZOMBI );
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_MISS_CLEAN> Switch to ZOMBI state" << std::dec
+              << " / way = "   << way
+              << " / set = "   << set << std::endl;
+}
+#endif
+        // if selective itlb & dtlb invalidate are required
+        // the miss response is not handled before invalidate completed
+        if ( r_dcache_in_tlb[way*m_dcache_sets+set] )
+        {
+            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
+
+            if( not r_dcache_cleanup_victim_req.read() )
+                r_dcache_tlb_inval_line  = r_dcache_cc_send_nline.read();
+            else
+                r_dcache_tlb_inval_line = r_dcache_cleanup_victim_nline.read();
+
+            r_dcache_tlb_inval_set   = 0;
+            r_dcache_fsm_scan_save   = DCACHE_MISS_WAIT;
+            r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
+        }
+        else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )
+        {
+            r_itlb.reset();
+            r_dtlb.reset();
+            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+            r_dcache_fsm = DCACHE_MISS_WAIT;
+        }
+        else
+        {
+            r_dcache_fsm = DCACHE_MISS_WAIT;
+        }
+        break;
+    }
+    //////////////////////
+    case DCACHE_MISS_WAIT:	// waiting the response to a miss request from VCI_RSP FSM
+                            // This state is in charge of error signaling
+                            // There is 5 types of error depending on the requester
+    {
+        if ( m_dreq.valid) m_cost_data_miss_frz++;
+
+        // send cleanup victim request
+        if ( r_dcache_cleanup_victim_req.read() and not r_dcache_cc_send_req.read() )
+        {
+            r_dcache_cc_send_req        = true;
+            r_dcache_cc_send_nline      = r_dcache_cleanup_victim_nline;
+            r_dcache_cc_send_way        = r_dcache_miss_way;
+            r_dcache_cc_send_type       = CC_TYPE_CLEANUP; 
+            r_dcache_cleanup_victim_req = false;
+        }   
+
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and 
+             not r_dcache_cc_send_req.read() and 
+             not r_dcache_cleanup_victim_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_data_error.read() ) 			// bus error
+        {
+            switch ( r_dcache_miss_type.read() )
+            {
+                case PROC_MISS:
+                {
+                    r_mmu_detr            = MMU_READ_DATA_ILLEGAL_ACCESS;
+                    r_mmu_dbvar           = r_dcache_save_vaddr.read();
+                    m_drsp.valid            = true;
+                    m_drsp.error            = true;
+                    r_dcache_fsm          = DCACHE_IDLE;
+                    break;
+                }
+                case PTE1_MISS:
+                {
+                    if ( r_dcache_tlb_ins.read() )
+                    {
+                        r_mmu_ietr              = MMU_READ_PT1_ILLEGAL_ACCESS;
+                        r_mmu_ibvar             = r_dcache_tlb_vaddr.read();
+                        r_icache_tlb_miss_req   = false;
+                        r_icache_tlb_rsp_error  = true;
+                    }
+                    else
+                    {
+                        r_mmu_detr              = MMU_READ_PT1_ILLEGAL_ACCESS;
+                        r_mmu_dbvar             = r_dcache_tlb_vaddr.read();
+                        m_drsp.valid              = true;
+                        m_drsp.error              = true;
+                    }
+                    r_dcache_fsm                = DCACHE_IDLE;
+                    break;
+                }
+                case PTE2_MISS:
+                {
+                    if ( r_dcache_tlb_ins.read() )
+                    {
+                        r_mmu_ietr              = MMU_READ_PT2_ILLEGAL_ACCESS;
+                        r_mmu_ibvar             = r_dcache_tlb_vaddr.read();
+                        r_icache_tlb_miss_req   = false;
+                        r_icache_tlb_rsp_error  = true;
+                    }
+                    else
+                    {
+                        r_mmu_detr              = MMU_READ_PT2_ILLEGAL_ACCESS;
+                        r_mmu_dbvar             = r_dcache_tlb_vaddr.read();
+                        m_drsp.valid              = true;
+                        m_drsp.error              = true;
+                    }
+                    r_dcache_fsm                = DCACHE_IDLE;
+                    break;
+                }
+            } // end switch type
+            r_vci_rsp_data_error = false;
+        }
+        else if ( r_vci_rsp_fifo_dcache.rok() )		// valid response available
+        {
+            r_dcache_miss_word = 0;
+	        r_dcache_fsm       = DCACHE_MISS_DATA_UPDT;
+        }
+        break;
+    }
+    //////////////////////////
+    case DCACHE_MISS_DATA_UPDT:	  // update the dcache (one word per cycle)
+    {
+        if ( m_dreq.valid) m_cost_data_miss_frz++;
+
+        if ( r_vci_rsp_fifo_dcache.rok() )	// one word available
+        {
+#ifdef INSTRUMENTATION
+m_cpt_dcache_data_write++;
+#endif
+                r_dcache.write( r_dcache_miss_way.read(),
+                                r_dcache_miss_set.read(),
+                                r_dcache_miss_word.read(),
+                                r_vci_rsp_fifo_dcache.read() );
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_MISS_DATA_UPDT> Write one word:"
+              << " / DATA = "  << std::hex << r_vci_rsp_fifo_dcache.read()
+              << " / WAY = "   << std::dec << r_dcache_miss_way.read()
+              << " / SET = "   << r_dcache_miss_set.read()
+              << " / WORD = "  << r_dcache_miss_word.read() << std::endl;
+}
+#endif
+            vci_rsp_fifo_dcache_get = true;
+            r_dcache_miss_word = r_dcache_miss_word.read() + 1;
+
+            if ( r_dcache_miss_word.read() == (m_dcache_words-1) ) // last word
+            {
+                r_dcache_fsm = DCACHE_MISS_DIR_UPDT;
+            }
+        }
+        break;
+    }
+    //////////////////////////
+    case DCACHE_MISS_DIR_UPDT:  // Stalled if a victim line has been evicted
+                                // and the cleanup ack has not been received,
+                                // as indicated by the r_dcache_miss clack.
+                                // - If no matching coherence request (r_dcache_inval_miss)
+                                //   switch directory slot to VALID state.
+                                // - If matching coherence request, switch directory slot
+                                //   to ZOMBI state, and send a cleanup request.
+    {
+        if ( m_dreq.valid) m_cost_data_miss_frz++;
+
+        // send cleanup victim request
+        if ( r_dcache_cleanup_victim_req.read() and not r_dcache_cc_send_req.read() )
+        {
+            r_dcache_cc_send_req        = true;
+            r_dcache_cc_send_nline      = r_dcache_cleanup_victim_nline;
+            r_dcache_cc_send_way        = r_dcache_miss_way;
+            r_dcache_cc_send_type       = CC_TYPE_CLEANUP; 
+            r_dcache_cleanup_victim_req = false;
+        }   
+
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and 
+             not r_dcache_cc_send_req.read() and 
+             not r_dcache_cleanup_victim_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( not r_dcache_miss_clack.read() )  // waiting cleanup acknowledge
+        {
+            if ( r_dcache_miss_inval.read() ) // switch slot to ZOMBI state, and new cleanup
+            {
+                if ( not r_dcache_cc_send_req.read() ) // blocked until previous request sent
+                {
+                    r_dcache_miss_inval     = false;
+                    // request cleanup
+                    r_dcache_cc_send_req   = true;
+                    r_dcache_cc_send_nline = r_dcache_save_paddr.read()/(m_dcache_words<<2);
+                    r_dcache_cc_send_way   = r_dcache_miss_way.read();
+                    r_dcache_cc_send_type  = CC_TYPE_CLEANUP;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_write++;
+#endif
+                    r_dcache.write_dir( r_dcache_save_paddr.read(),
+                                        r_dcache_miss_way.read(),
+                                        r_dcache_miss_set.read(),
+                                        CACHE_SLOT_STATE_ZOMBI );
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name()
+          << " DCACHE_MISS_DIR_UPDT> Switch slot to ZOMBI state"
+          << " PADDR = " << std::hex << r_dcache_save_paddr.read()
+          << " / WAY = "   << std::dec << r_dcache_miss_way.read()
+          << " / SET = "   << r_dcache_miss_set.read() << std::endl;
+#endif
+                }
+                else
+                    break;
+            }
+            else                              // switch slot to VALID state
+            {
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_write++;
+#endif
+                r_dcache.write_dir( r_dcache_save_paddr.read(),
+                                    r_dcache_miss_way.read(),
+                                    r_dcache_miss_set.read(),
+                                    CACHE_SLOT_STATE_VALID );
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+std::cout << "  <PROC " << name()
+          << " DCACHE_MISS_DIR_UPDT> Switch slot to VALID state"
+          << " PADDR = " << std::hex << r_dcache_save_paddr.read()
+          << " / WAY = "   << std::dec << r_dcache_miss_way.read()
+          << " / SET = "   << r_dcache_miss_set.read() << std::endl;
+#endif
+                // reset directory extension
+                size_t way = r_dcache_miss_way.read();
+                size_t set = r_dcache_miss_set.read();
+                r_dcache_in_tlb[way*m_dcache_sets+set] = false;
+                r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+            }
+            if      (r_dcache_miss_type.read()==PTE1_MISS) r_dcache_fsm = DCACHE_TLB_PTE1_GET;
+            else if (r_dcache_miss_type.read()==PTE2_MISS) r_dcache_fsm = DCACHE_TLB_PTE2_GET;
+            else                                           r_dcache_fsm = DCACHE_IDLE;
+        }
+        break;
+    }
+    /////////////////////
+    case DCACHE_UNC_WAIT:  // waiting a response to an uncacheable read
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_data_error.read() ) 	// bus error
+        {
+            if(r_dcache_vci_unc_write.read())
+                r_mmu_detr           = MMU_WRITE_DATA_ILLEGAL_ACCESS;
+            else
+                r_mmu_detr           = MMU_READ_DATA_ILLEGAL_ACCESS;
+                
+            r_mmu_dbvar          = m_dreq.addr;
+            r_vci_rsp_data_error = false;
+            m_drsp.error         = true;
+            m_drsp.valid         = true;
+            r_dcache_fsm         = DCACHE_IDLE;
+            break;
+        }
+	    else if ( r_vci_rsp_fifo_dcache.rok() )     // data available
+	    {
+            // consume data
+            vci_rsp_fifo_dcache_get = true;
+            r_dcache_fsm            = DCACHE_IDLE;
+
+            // acknowledge the processor request if it has not been modified
+            if ( m_dreq.valid and (m_dreq.addr == r_dcache_save_vaddr.read()) )
+            {
+	            m_drsp.valid        = true;
+                m_drsp.error        = false;
+	            m_drsp.rdata        = r_vci_rsp_fifo_dcache.read();
+            }
+	    }
+        break;
+    }
+    /////////////////////
+    case DCACHE_LL_WAIT:    // waiting VCI response to a LL transaction
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_data_error.read() ) 	// bus error
+        {
+            r_mmu_detr           = MMU_READ_DATA_ILLEGAL_ACCESS;
+            r_mmu_dbvar          = m_dreq.addr;
+            r_vci_rsp_data_error = false;
+            m_drsp.error         = true;
+            m_drsp.valid         = true;
+            r_dcache_fsm         = DCACHE_IDLE;
+            break;
+        }
+	    else if ( r_vci_rsp_fifo_dcache.rok() )     // data available
+	    {
+            // consume data
+            vci_rsp_fifo_dcache_get = true;
+
+            if(r_dcache_ll_rsp_count.read() == 0) // first flit
+            {
+                // set key value in llsc reservation buffer
+                r_dcache_llsc_key     = r_vci_rsp_fifo_dcache.read();
+                r_dcache_ll_rsp_count = r_dcache_ll_rsp_count.read() + 1 ;
+            }
+            else                                  // last flit
+            {
+                // acknowledge the processor request if it has not been modified
+                if ( m_dreq.valid and (m_dreq.addr == r_dcache_save_vaddr.read()) )
+                {
+                    m_drsp.valid        = true;
+                    m_drsp.error        = false;
+                    m_drsp.rdata        = r_vci_rsp_fifo_dcache.read();
+                }
+                r_dcache_fsm = DCACHE_IDLE;
+            }
+	    }
+        break;
+    }
+    ////////////////////
+    case DCACHE_SC_WAIT:	// waiting VCI response to a SC transaction
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_data_error.read() ) 		// bus error
+        {
+            r_mmu_detr           = MMU_READ_DATA_ILLEGAL_ACCESS;
+            r_mmu_dbvar          = m_dreq.addr;
+            r_vci_rsp_data_error = false;
+            m_drsp.error         = true;
+            m_drsp.valid         = true;
+            r_dcache_fsm         = DCACHE_IDLE;
+            break;
+        }
+	    else if ( r_vci_rsp_fifo_dcache.rok() ) // response available
+	    {
+            // consume response
+            vci_rsp_fifo_dcache_get = true;
+            m_drsp.valid            = true;
+            m_drsp.rdata            = r_vci_rsp_fifo_dcache.read();
+            r_dcache_fsm            = DCACHE_IDLE;
+	    }
+        break;
+    }
+    //////////////////////////
+    case DCACHE_DIRTY_GET_PTE:		// This sub_fsm set the PTE Dirty bit in memory
+                                    // before handling a processor WRITE or SC request
+                                    // Input argument is r_dcache_dirty_paddr
+                                    // In this first state, we get PTE value in dcache
+                                    // and post a CAS request to CMD FSM
+    {
+        // get PTE in dcache
+        uint32_t pte;
+        size_t   way;
+        size_t   set;
+        size_t   word; // unused
+        int      state;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_data_read++;
+m_cpt_dcache_dir_read++;
+#endif
+        r_dcache.read( r_dcache_dirty_paddr.read(),
+                       &pte,
+                       &way,
+                       &set,
+                       &word,
+                       &state );
+
+        assert( (state == CACHE_SLOT_STATE_VALID) and
+        "error in DCACHE_DIRTY_TLB_SET: the PTE should be in dcache" );
+
+        // request CAS transaction to CMD_FSM
+        r_dcache_dirty_way  = way;
+        r_dcache_dirty_set  = set;
+
+        // check llsc reservation buffer
+        if (r_dcache_llsc_paddr.read() == r_dcache_dirty_paddr.read() )
+            r_dcache_llsc_valid = false;
+
+        // request a CAS CMD and go to DCACHE_DIRTY_WAIT state
+        r_dcache_vci_cas_req = true;
+        r_dcache_vci_paddr   = r_dcache_dirty_paddr.read();
+        r_dcache_vci_cas_old = pte;
+        r_dcache_vci_cas_new = pte | PTE_D_MASK;
+        r_dcache_fsm         = DCACHE_DIRTY_WAIT;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_DIRTY_GET_PTE> CAS request" << std::hex
+              << " / PTE_PADDR = " << r_dcache_dirty_paddr.read()
+              << " / PTE_VALUE = " << pte << std::dec
+              << " / SET = " << set
+              << " / WAY = " << way << std::endl;
+}
+#endif
+        break;
+    }
+    ///////////////////////
+    case DCACHE_DIRTY_WAIT:         // wait completion of CAS for PTE Dirty bit,
+                                    // and return to IDLE state when response is received.
+                                    // we don't care if the CAS is a failure:
+                                    // - if the CAS is a success, the coherence mechanism
+                                    //   updates the local copy.
+                                    // - if the CAS is a failure, we just retry the write.
+    {
+        // coherence clack request (from DSPIN CLACK)
+        if ( r_dcache_clack_req.read() )
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        // coherence request (from CC_RECEIVE FSM)
+        if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read())
+        {
+            r_dcache_fsm = DCACHE_CC_CHECK;
+            r_dcache_fsm_cc_save = r_dcache_fsm.read();
+            break;
+        }
+
+        if ( r_vci_rsp_data_error.read() )      // bus error
+        {
+            std::cout << "BUS ERROR in DCACHE_DIRTY_WAIT state" << std::endl;
+            std::cout << "This should not happen in this state" << std::endl;
+            exit(0);
+        }
+        else if ( r_vci_rsp_fifo_dcache.rok() ) // response available
+        {
+            vci_rsp_fifo_dcache_get = true;
+            r_dcache_fsm            = DCACHE_IDLE;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_DIRTY_WAIT> CAS completed" << std::endl;
+}
+#endif
+        }
+        break;
+    }
+    /////////////////////
+    case DCACHE_CC_CHECK:   // This state is the entry point for the sub-FSM
+                            // handling coherence requests for DCACHE.
+                            // If there is a matching pending miss on the modified cache
+                            // line this is signaled in the r_dcache_miss inval flip-flop.
+                            // If the updated (or invalidated) cache line has copies in TLBs
+                            // these TLB copies are invalidated.
+                            // The return state is defined in r_dcache_fsm_cc_save
+    {
+        paddr_t  paddr = r_cc_receive_dcache_nline.read() * m_dcache_words * 4;
+        paddr_t  mask = ~((m_dcache_words<<2)-1);
+
+        // CLACK handler
+        // We switch the directory slot to EMPTY state and reset
+        // r_dcache_miss_clack if the cleanup ack is matching a pending miss.
+        if ( r_dcache_clack_req.read() )
+        {
+            if ( m_dreq.valid ) m_cost_data_miss_frz++;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_write++;
+#endif
+            r_dcache.write_dir( 0,
+                                r_dcache_clack_way.read(),
+                                r_dcache_clack_set.read(),
+                                CACHE_SLOT_STATE_EMPTY);
+
+            if ( (r_dcache_miss_set.read() == r_dcache_clack_set.read()) and
+                 (r_dcache_miss_way.read() == r_dcache_clack_way.read()) )
+            {
+                  r_dcache_miss_clack = false;
+            }
+
+            r_dcache_clack_req = false;
+
+            // return to cc_save state
+            r_dcache_fsm = r_dcache_fsm_cc_save.read() ;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_CC_CHECK> CLACK for PADDR " << paddr
+              << " Switch slot to EMPTY state : "
+              << " set = " << r_dcache_clack_set.read()
+              << " / way = " << r_dcache_clack_way.read() << std::endl;
+}
+#endif
+            break;
+        }
+
+        assert ( not r_dcache_cc_send_req.read() and 
+        "CC_SEND must be available in DCACHE_CC_CHECK" );
+
+        // Match between MISS address and CC address
+        if (r_cc_receive_dcache_req.read() and 
+          ((r_dcache_fsm_cc_save == DCACHE_MISS_SELECT  )  or
+           (r_dcache_fsm_cc_save == DCACHE_MISS_WAIT    )  or
+           (r_dcache_fsm_cc_save == DCACHE_MISS_DIR_UPDT)) and
+          ((r_dcache_vci_paddr.read() & mask) == (paddr & mask))) // matching
+        {
+            // signaling matching
+            r_dcache_miss_inval = true;
+
+            // in case of update, go to CC_UPDT
+            // JUST TO POP THE FIFO
+            if (r_cc_receive_dcache_type.read() == CC_TYPE_UPDT)
+            {
+                r_dcache_fsm        = DCACHE_CC_UPDT;
+                r_dcache_cc_word    = r_cc_receive_word_idx.read();
+
+                // just pop the fifo , don't write in icache
+                r_dcache_cc_need_write = false;
+            }
+            // the request is dealt with
+            else
+            {
+                r_cc_receive_dcache_req = false;
+                r_dcache_fsm            = r_dcache_fsm_cc_save.read();
+            }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_CC_CHECK> Coherence request matching a pending miss:"
+              << " PADDR = " << std::hex << paddr << std::endl;
+}
+#endif
+        }
+
+        // CC request handler
+       
+        int    state = 0;
+        size_t way   = 0;
+        size_t set   = 0;
+        size_t word  = 0;
+
+#ifdef INSTRUMENTATION
+m_cpt_dcache_dir_read++;
+#endif
+        r_dcache.read_dir( paddr,
+                           &state,
+                           &way,
+                           &set,
+                           &word ); // unused
+
+        r_dcache_cc_way = way;
+        r_dcache_cc_set = set;
+
+        if ( state == CACHE_SLOT_STATE_VALID) // hit
+        {
+            // need to update the cache state
+            if (r_cc_receive_dcache_type.read() == CC_TYPE_UPDT) // hit update
+            {
+                r_dcache_cc_need_write = true;
+                r_dcache_fsm           = DCACHE_CC_UPDT;
+                r_dcache_cc_word       = r_cc_receive_word_idx.read();
+            }
+            else if ( r_cc_receive_dcache_type.read() == CC_TYPE_INVAL ) // hit inval
+            {
+                r_dcache_fsm           = DCACHE_CC_INVAL;
+            }
+        }
+        else                                  // miss
+        {
+            // multicast acknowledgement required in case of update
+            if(r_cc_receive_dcache_type.read() == CC_TYPE_UPDT)
+            {
+                r_dcache_fsm           = DCACHE_CC_UPDT;
+                r_dcache_cc_word       = r_cc_receive_word_idx.read();
+
+                // just pop the fifo , don't write in icache
+                r_dcache_cc_need_write = false;
+            }
+            else // No response needed
+            {
+                r_cc_receive_dcache_req = false;
+                r_dcache_fsm            = r_dcache_fsm_cc_save.read();
+            }
+        }
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_CC_CHECK> Coherence request received:"
+              << " PADDR = " << std::hex << paddr
+              << " / TYPE = " << std::dec << r_cc_receive_dcache_type.read()
+              << " / HIT = " << (state == CACHE_SLOT_STATE_VALID) << std::endl;
+}
+#endif
+
+        break;
+    }
+    /////////////////////
+    case DCACHE_CC_INVAL: // hit inval: switch slot to ZOMBI state and send a
+                          // CLEANUP after possible invalidation of copies in
+                          // TLBs
+    {
+        size_t way    = r_dcache_cc_way.read();
+        size_t set    = r_dcache_cc_set.read();
+
+        if ( r_dcache_in_tlb[way*m_dcache_sets+set] )       // selective TLB inval
+        {
+            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
+            r_dcache_tlb_inval_line  = r_cc_receive_dcache_nline.read();
+            r_dcache_tlb_inval_set   = 0;
+            r_dcache_fsm_scan_save   = r_dcache_fsm.read();
+            r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
+            break;
+        }
+
+        if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) // TLB flush
+        {
+            r_itlb.reset();
+            r_dtlb.reset();
+            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_CC_INVAL> Flush DTLB & ITLB" << std::endl;
+}
+#endif
+        }
+
+        assert (not r_dcache_cc_send_req.read() &&
+                "ERROR in DCACHE_CC_INVAL: the r_dcache_cc_send_req "
+                "must not be set");
+
+        // Switch slot state to ZOMBI and send CLEANUP command 
+        r_dcache.write_dir( way,
+                            set,
+                            CACHE_SLOT_STATE_ZOMBI );
+
+        // coherence request completed
+        r_cc_receive_dcache_req = false;
+        r_dcache_cc_send_req    = true;
+        r_dcache_cc_send_nline  = r_cc_receive_dcache_nline.read();
+        r_dcache_cc_send_way    = r_dcache_cc_way.read();
+        r_dcache_cc_send_type   = CC_TYPE_CLEANUP;
+        r_dcache_fsm            = r_dcache_fsm_cc_save.read();
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+        << " DCACHE_CC_INVAL> Switch slot to EMPTY state:" << std::dec
+        << " / WAY = " << way
+        << " / SET = " << set << std::endl;
+}
+#endif
+        break;
+    }
+    ///////////////////
+    case DCACHE_CC_UPDT:        // hit update: write one word per cycle,
+                                // after possible invalidation of copies in TLBs
+    {
+        size_t word       = r_dcache_cc_word.read();
+        size_t way        = r_dcache_cc_way.read();
+        size_t set        = r_dcache_cc_set.read();
+
+        if ( r_dcache_in_tlb[way*m_dcache_sets+set] )       // selective TLB inval
+        {
+            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
+            r_dcache_tlb_inval_line = r_cc_receive_dcache_nline.read();
+            r_dcache_tlb_inval_set  = 0;
+            r_dcache_fsm_scan_save  = r_dcache_fsm.read();
+            r_dcache_fsm            = DCACHE_INVAL_TLB_SCAN;
+
+            break;
+        }
+
+        if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) // TLB flush
+        {
+            r_itlb.reset();
+            r_dtlb.reset();
+            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_CC_UPDT> Flush DTLB & ITLB" << std::endl;
+}
+#endif
+        }
+
+        assert (not r_dcache_cc_send_req.read() &&
+                "ERROR in DCACHE_CC_INVAL: the r_dcache_cc_send_req "
+                "must not be set");
+        
+        if ( not r_cc_receive_updt_fifo_be.rok() ) break;
+
+        if (r_dcache_cc_need_write.read())
+        {
+        
+#ifdef INSTRUMENTATION
+m_cpt_dcache_data_write++;
+#endif
+            r_dcache.write( way,
+                            set,
+                            word,
+                            r_cc_receive_updt_fifo_data.read(),
+                            r_cc_receive_updt_fifo_be.read() );
+
+            r_dcache_cc_word = word + 1;
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm )
+{
+    std::cout << "  <PROC " << name()
+              << " DCACHE_CC_UPDT> Write one word" << std::dec
+              << " / WAY = " << way
+              << " / SET = " << set
+              << " / WORD = " << word
+              << " / VALUE = " << std::hex << r_cc_receive_updt_fifo_data.read() << std::endl;
+}
+#endif
+        }
+
+        if ( r_cc_receive_updt_fifo_eop.read() )  // last word
+        {
+            // no need to write in the cache anymore
+            r_dcache_cc_need_write = false;
+
+            // coherence request completed
+            r_cc_receive_dcache_req = false;
+
+            // request multicast acknowledgement
+            r_dcache_cc_send_req          = true;
+            r_dcache_cc_send_nline        = r_cc_receive_dcache_nline.read();
+            r_dcache_cc_send_updt_tab_idx = r_cc_receive_dcache_updt_tab_idx.read();
+            r_dcache_cc_send_type         = CC_TYPE_MULTI_ACK;
+
+            r_dcache_fsm                  = r_dcache_fsm_cc_save.read();
+        }
+
+        //consume fifo if not eop
+        cc_receive_updt_fifo_get  = true;
+
+        break;
+    }
+    ///////////////////////////
+    case DCACHE_INVAL_TLB_SCAN:     	// Scan sequencially all sets for both ITLB & DTLB
+                                        // It makes assumption: m_itlb_sets == m_dtlb_sets
+                                        // All ways are handled in parallel.
+                                        // We enter this state when a DCACHE line is modified,
+                                        // and there is a copy in itlb or dtlb.
+                                        // It can be caused by:
+                                        // - a coherence inval or updt transaction,
+                                        // - a line inval caused by a cache miss
+                                        // - a processor XTN inval request,
+                                        // - a WRITE hit,
+                                        // - a Dirty bit update
+                                        // Input arguments are:
+                                        // - r_dcache_tlb_inval_line
+                                        // - r_dcache_tlb_inval_set
+                                        // - r_dcache_fsm_scan_save
+    {
+        paddr_t	line = r_dcache_tlb_inval_line.read();
+        size_t  set  = r_dcache_tlb_inval_set.read();
+        size_t  way;
+        bool    ok;
+
+        for ( way = 0 ; way < m_itlb_ways ; way++ )
+        {
+            ok = r_itlb.inval( line, way, set );
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm and ok )
+{
+    std::cout << "  <PROC " << name()
+              << ".DCACHE_INVAL_TLB_SCAN> Invalidate ITLB entry:" << std::hex
+              << " line = " << line << std::dec
+              << " / set = " << set
+              << " / way = " << way << std::endl;
+}
+#endif
+        }
+
+        for ( way = 0 ; way < m_dtlb_ways ; way++ )
+        {
+            ok = r_dtlb.inval( line, way, set );
+
+#if DEBUG_DCACHE
+if ( m_debug_dcache_fsm and ok )
+std::cout << "  <PROC " << name() << " DCACHE_INVAL_TLB_SCAN>"
+          << " Invalidate DTLB entry" << std::hex
+          << " / line = " << line << std::dec
+          << " / set = " << set
+          << " / way = " << way << std::endl;
+#endif
+        }
+
+        // return to the calling state when TLB inval completed
+        if ( r_dcache_tlb_inval_set.read() == (m_dtlb_sets-1) )
+        {
+            r_dcache_fsm = r_dcache_fsm_scan_save.read();
+        }
+        r_dcache_tlb_inval_set = r_dcache_tlb_inval_set.read() + 1;
+        break;
+    }
+    } // end switch r_dcache_fsm
+
+    ///////////////// wbuf update ///////////////////////////////////////////////////////
+    r_wbuf.update();
+
+    ///////////////// llsc update ///////////////////////////////////////////////////////
+    if (r_dcache_llsc_valid.read()) r_dcache_llsc_count = r_dcache_llsc_count.read() - 1;
+    if (r_dcache_llsc_count.read() == 1) r_dcache_llsc_valid = false;
+
+    //////////////// test processor frozen //////////////////////////////////////////////
+    // The simulation exit if the number of consecutive frozen cycles
+    // is larger than the m_max_frozen_cycles (constructor parameter)
+    if ( (m_ireq.valid and not m_irsp.valid) or (m_dreq.valid and not m_drsp.valid) )
+    {
+        m_cpt_frz_cycles++; 		// used for instrumentation
+        m_cpt_stop_simulation++;	// used for debug
+        if ( m_cpt_stop_simulation > m_max_frozen_cycles )
+        {
+            std::cout << std::dec << "ERROR in CC_VCACHE_WRAPPER " << name() << std::endl
+                      << " stop at cycle " << m_cpt_total_cycles << std::endl
+                      << " frozen since cycle " << m_cpt_total_cycles - m_max_frozen_cycles
+                      << std::endl;
+                      r_iss.dump();
+            exit(1);
+        }
+    }
+    else
+    {
+        m_cpt_stop_simulation = 0;
+    }
+
+    /////////// execute one iss cycle /////////////////////////////////
+    {
+    uint32_t it = 0;
+    for (size_t i=0; i<(size_t)iss_t::n_irq; i++) if(p_irq[i].read()) it |= (1<<i);
+    r_iss.executeNCycles(1, m_irsp, m_drsp, it);
+    }
+
+    ////////////////////////////////////////////////////////////////////////////
+    // The VCI_CMD FSM controls the following ressources:
+    // - r_vci_cmd_fsm
+    // - r_vci_cmd_min
+    // - r_vci_cmd_max
+    // - r_vci_cmd_cpt
+    // - r_vci_cmd_imiss_prio
+    // - wbuf (reset)
+    // - r_icache_miss_req (reset)
+    // - r_icache_unc_req (reset)
+    // - r_dcache_vci_miss_req (reset)
+    // - r_dcache_vci_unc_req (reset)
+    // - r_dcache_vci_ll_req (reset)
+    // - r_dcache_vci_sc_req (reset in case of local sc fail)
+    // - r_dcache_vci_cas_req (reset)
+    //
+    // This FSM handles requests from both the DCACHE FSM & the ICACHE FSM.
+    // There are 8 request types, with the following priorities :
+    // 1 - Data Read Miss         : r_dcache_vci_miss_req and miss in the write buffer
+    // 2 - Data Read Uncachable   : r_dcache_vci_unc_req
+    // 3 - Instruction Miss       : r_icache_miss_req and miss in the write buffer
+    // 4 - Instruction Uncachable : r_icache_unc_req
+    // 5 - Data Write             : r_wbuf.rok()
+    // 6 - Data Linked Load       : r_dcache_vci_ll_req
+    // 7 - Data Store Conditionnal: r_dcache_vci_sc_req
+    // 8 - Compare And Swap       : r_dcache_vci_cas_req
+    //
+    // As we want to support several simultaneous VCI transactions, the VCI_CMD_FSM
+    // and the VCI_RSP_FSM are fully desynchronized.
+    //
+    // VCI formats:
+    // According to the VCI advanced specification, all read requests packets
+    // (data Uncached, Miss data, instruction Uncached, Miss instruction)
+    // are one word packets.
+    // For write burst packets, all words are in the same cache line,
+    // and addresses must be contiguous (the BE field is 0 in case of "holes").
+    // The sc command packet implements actually a compare-and-swap mechanism
+    // and the packet contains two flits.
+    ////////////////////////////////////////////////////////////////////////////////////
+
+
+    switch ( r_vci_cmd_fsm.read() )
+    {
+        //////////////
+        case CMD_IDLE:
+        {
+            // DCACHE read requests (r_dcache_vci_miss_req or r_dcache_vci_ll_req), and
+            // ICACHE read requests (r_icache_miss_req) require both a write_buffer access
+            // to check a possible pending write on the same cache line.
+            // As there is only one possible access per cycle to write buffer, we implement
+            // a round-robin priority between DCACHE and ICACHE for this access,
+            // using the r_vci_cmd_imiss_prio flip-flop.
+
+            size_t      wbuf_min;
+            size_t      wbuf_max;
+
+            bool dcache_miss_req = r_dcache_vci_miss_req.read() and
+                 ( not r_icache_miss_req.read() or not r_vci_cmd_imiss_prio.read() );
+
+            bool dcache_ll_req   = r_dcache_vci_ll_req.read() and
+                 ( not r_icache_miss_req.read() or not r_vci_cmd_imiss_prio.read() );
+
+            bool dcache_sc_req   = r_dcache_vci_sc_req.read() and
+                 ( not r_icache_miss_req.read() or not r_vci_cmd_imiss_prio.read() );
+
+            bool dcache_cas_req   = r_dcache_vci_cas_req.read() and
+                 ( not r_icache_miss_req.read() or not r_vci_cmd_imiss_prio.read() );
+
+            bool icache_miss_req = r_icache_miss_req.read() and
+                 ( not (r_dcache_vci_miss_req.read() or
+                        r_dcache_vci_ll_req.read()   or
+                        r_dcache_vci_cas_req.read()  or
+                        r_dcache_vci_sc_req.read())
+                     or r_vci_cmd_imiss_prio.read() );
+
+            // 1 - Data unc write
+            if ( r_dcache_vci_unc_req.read() and r_dcache_vci_unc_write.read())
+            {
+                r_vci_cmd_fsm        = CMD_DATA_UNC_WRITE;
+                r_dcache_vci_unc_req = false;
+//                m_cpt_dunc_transaction++;
+            }
+            // 2 data read miss
+            else if ( dcache_miss_req and r_wbuf.miss(r_dcache_vci_paddr.read()) )
+            {
+                r_vci_cmd_fsm         = CMD_DATA_MISS;
+                r_dcache_vci_miss_req = false;
+                r_vci_cmd_imiss_prio  = true;
+//                m_cpt_dmiss_transaction++;
+            }
+            // 3 - Data Read Uncachable
+            else if ( r_dcache_vci_unc_req.read() and not r_dcache_vci_unc_write.read() )
+            {
+                r_vci_cmd_fsm        = CMD_DATA_UNC_READ;
+                r_dcache_vci_unc_req = false;
+//                m_cpt_dunc_transaction++;
+            }
+            // 4 - Data Linked Load
+            else if ( dcache_ll_req and r_wbuf.miss(r_dcache_vci_paddr.read()))
+            {
+                r_vci_cmd_fsm         = CMD_DATA_LL;
+                r_dcache_vci_ll_req   = false;
+                r_vci_cmd_imiss_prio  = true;
+//              m_cpt_ll_transaction++;
+            }
+            // 5 - Instruction Miss
+            else if ( icache_miss_req and r_wbuf.miss(r_icache_vci_paddr.read()) )
+            {
+                r_vci_cmd_fsm        = CMD_INS_MISS;
+                r_icache_miss_req    = false;
+                r_vci_cmd_imiss_prio = false;
+//                m_cpt_imiss_transaction++;
+            }
+            // 6 - Instruction Uncachable
+            else if ( r_icache_unc_req.read() )
+            {
+                r_vci_cmd_fsm       = CMD_INS_UNC;
+                r_icache_unc_req    = false;
+//                m_cpt_iunc_transaction++;
+            }
+            // 7 - Data Write
+            else if ( r_wbuf.rok(&wbuf_min, &wbuf_max) )
+            {
+                r_vci_cmd_fsm       = CMD_DATA_WRITE;
+                r_vci_cmd_cpt       = wbuf_min;
+                r_vci_cmd_min       = wbuf_min;
+                r_vci_cmd_max       = wbuf_max;
+//                m_cpt_write_transaction++;
+//                m_length_write_transaction += (wbuf_max-wbuf_min+1);
+            }
+            // 8 - Data Store Conditionnal
+            else if ( dcache_sc_req and r_wbuf.miss(r_dcache_vci_paddr.read()) )
+            {
+                r_vci_cmd_fsm           = CMD_DATA_SC;
+                r_dcache_vci_sc_req     = false;
+                r_vci_cmd_imiss_prio    = true;
+                r_vci_cmd_cpt           = 0;
+//              m_cpt_sc_transaction++;
+            }
+            // 9 - Compare And Swap
+            else if ( dcache_cas_req and r_wbuf.miss(r_dcache_vci_paddr.read()) )
+            {
+                r_vci_cmd_fsm           = CMD_DATA_CAS;
+                r_dcache_vci_cas_req    = false;
+                r_vci_cmd_imiss_prio    = true;
+                r_vci_cmd_cpt           = 0;
+//              m_cpt_cas_transaction++;
+            }
+
+#if DEBUG_CMD
+if ( m_debug_cmd_fsm )
+{
+std::cout << "  <PROC " << name() << " CMD_IDLE>"
+          << " / dmiss_req = " << dcache_miss_req
+          << " / imiss_req = " << icache_miss_req
+          << std::endl;
+}
+#endif
+            break;
+        }
+        ////////////////////
+        case CMD_DATA_WRITE:
+        {
+            if ( p_vci.cmdack.read() )
+            {
+                r_vci_cmd_cpt = r_vci_cmd_cpt + 1;
+                if (r_vci_cmd_cpt == r_vci_cmd_max) // last flit sent
+                {
+                    r_vci_cmd_fsm = CMD_IDLE ;
+                    r_wbuf.sent() ;
+                }
+            }
+            break;
+        }
+        /////////////////
+        case CMD_DATA_SC:
+        case CMD_DATA_CAS:
+        {
+            // The CAS and SC VCI commands contain two flits
+            if ( p_vci.cmdack.read() )
+            {
+               r_vci_cmd_cpt = r_vci_cmd_cpt + 1;
+               if (r_vci_cmd_cpt == 1) r_vci_cmd_fsm = CMD_IDLE ;
+            }
+            break;
+        }
+        //////////////////
+        case CMD_INS_MISS:
+        case CMD_INS_UNC:
+        case CMD_DATA_MISS:
+        case CMD_DATA_UNC_READ:
+        case CMD_DATA_UNC_WRITE:
+        case CMD_DATA_LL:
+        {
+            // all read VCI commands contain one single flit
+            if ( p_vci.cmdack.read() ) {
+                r_vci_cmd_fsm = CMD_IDLE;
+            }
+            break;
+        }
+
+    } // end  switch r_vci_cmd_fsm
+
+    //////////////////////////////////////////////////////////////////////////
+    // The VCI_RSP FSM controls the following ressources:
+    // - r_vci_rsp_fsm:
+    // - r_vci_rsp_fifo_icache (push)
+    // - r_vci_rsp_fifo_dcache (push)
+    // - r_vci_rsp_data_error (set)
+    // - r_vci_rsp_ins_error (set)
+    // - r_vci_rsp_cpt
+    // - r_dcache_vci_sc_req (reset when SC response recieved)
+    //
+    // As the VCI_RSP and VCI_CMD are fully desynchronized to support several
+    // simultaneous VCI transactions, this FSM uses the VCI RPKTID field
+    // to identify the transactions.
+    //
+    // VCI vormat:
+    // This component checks the response packet length and accepts only
+    // single word packets for write response packets.
+    //
+    // Error handling:
+    // This FSM analyzes the VCI error code and signals directly the Write Bus Error.
+    // In case of Read Data Error, the VCI_RSP FSM sets the r_vci_rsp_data_error
+    // flip_flop and the error is signaled by the DCACHE FSM.
+    // In case of Instruction Error, the VCI_RSP FSM sets the r_vci_rsp_ins_error
+    // flip_flop and the error is signaled by the ICACHE FSM.
+    // In case of Cleanup Error, the simulation stops with an error message...
+    //////////////////////////////////////////////////////////////////////////
+
+    switch ( r_vci_rsp_fsm.read() )
+    {
+    //////////////
+    case RSP_IDLE:
+    {
+        if ( p_vci.rspval.read() )
+        {
+            r_vci_rsp_cpt = 0;
+
+            if      ( (p_vci.rpktid.read() & 0x7) ==  TYPE_DATA_UNC  )
+            {
+                r_vci_rsp_fsm = RSP_DATA_UNC;
+            }
+            else if ( (p_vci.rpktid.read() & 0x7) ==  TYPE_READ_DATA_MISS )
+            {
+                r_vci_rsp_fsm = RSP_DATA_MISS;
+            }
+            else if ( (p_vci.rpktid.read() & 0x7) ==  TYPE_READ_INS_UNC   )
+            {
+                r_vci_rsp_fsm = RSP_INS_UNC;
+            }
+            else if ( (p_vci.rpktid.read() & 0x7) ==  TYPE_READ_INS_MISS  )
+            {
+                r_vci_rsp_fsm = RSP_INS_MISS;
+            }
+            else if ( (p_vci.rpktid.read() & 0x7) ==  TYPE_WRITE          )
+            {
+                r_vci_rsp_fsm = RSP_DATA_WRITE;
+            }
+            else if ( (p_vci.rpktid.read() & 0x7) ==  TYPE_CAS            )
+            {
+                r_vci_rsp_fsm = RSP_DATA_UNC;
+            }
+            else if ( (p_vci.rpktid.read() & 0x7) ==  TYPE_LL             )
+            {
+                r_vci_rsp_fsm = RSP_DATA_LL;
+            }
+            else if ( (p_vci.rpktid.read() & 0x7) == TYPE_SC             )
+            {
+                r_vci_rsp_fsm = RSP_DATA_UNC;
+            }
+            else
+            {
+                assert(false and "Unexpected VCI response");
+            }
+        }
+        break;
+    }
+        //////////////////
+        case RSP_INS_MISS:
+        {
+            if ( p_vci.rspval.read() )
+            {
+                if ( (p_vci.rerror.read()&0x1) != 0 )  // error reported
+                {
+                    r_vci_rsp_ins_error = true;
+                    if ( p_vci.reop.read() ) r_vci_rsp_fsm = RSP_IDLE;
+                }
+                else                                        // no error reported
+                {
+                    if ( r_vci_rsp_fifo_icache.wok() )
+                    {
+                        if ( r_vci_rsp_cpt.read() >= m_icache_words )
+                        {
+                            std::cout << "ERROR in VCI_CC_VCACHE " << name()
+                                      << " VCI response packet too long "
+                                      << " for instruction miss" << std::endl;
+                            exit(0);
+                        }
+                        r_vci_rsp_cpt                 = r_vci_rsp_cpt.read() + 1;
+                        vci_rsp_fifo_icache_put       = true,
+                        vci_rsp_fifo_icache_data      = p_vci.rdata.read();
+                        if ( p_vci.reop.read() )
+                        {
+                            if ( r_vci_rsp_cpt.read() != (m_icache_words - 1) )
+                            {
+                                std::cout << "ERROR in VCI_CC_VCACHE " << name()
+                                          << " VCI response packet too short" 
+                                          << " for instruction miss" << std::endl;
+                                exit(0);
+                            }
+                            r_vci_rsp_fsm    = RSP_IDLE;
+                        }
+                    }
+                }
+            }
+            break;
+        }
+        /////////////////
+        case RSP_INS_UNC:
+        {
+            if (p_vci.rspval.read() )
+            {
+                assert( p_vci.reop.read() and
+                "illegal VCI response packet for uncachable instruction");
+
+                if ( (p_vci.rerror.read()&0x1) != 0 )  // error reported
+                {
+                    r_vci_rsp_ins_error = true;
+                    r_vci_rsp_fsm = RSP_IDLE;
+                }
+                else                                         // no error reported
+                {
+                    if ( r_vci_rsp_fifo_icache.wok())
+                    {
+                        vci_rsp_fifo_icache_put       = true;
+                        vci_rsp_fifo_icache_data      = p_vci.rdata.read();
+                        r_vci_rsp_fsm = RSP_IDLE;
+                    }
+                }
+            }
+            break;
+        }
+        ///////////////////
+        case RSP_DATA_MISS:
+        {
+            if ( p_vci.rspval.read() )
+            {
+                if ( (p_vci.rerror.read()&0x1) != 0 )  // error reported
+                {
+                    r_vci_rsp_data_error = true;
+                    if ( p_vci.reop.read() ) r_vci_rsp_fsm = RSP_IDLE;
+                }
+                else                                        // no error reported
+                {
+                    if ( r_vci_rsp_fifo_dcache.wok() )
+                    {
+                        assert( (r_vci_rsp_cpt.read() < m_dcache_words) and
+                        "The VCI response packet for data miss is too long");
+
+                        r_vci_rsp_cpt                 = r_vci_rsp_cpt.read() + 1;
+                        vci_rsp_fifo_dcache_put       = true,
+                        vci_rsp_fifo_dcache_data      = p_vci.rdata.read();
+                        if ( p_vci.reop.read() )
+                        {
+                            assert( (r_vci_rsp_cpt.read() == m_dcache_words - 1) and
+                            "The VCI response packet for data miss is too short");
+
+                            r_vci_rsp_fsm     = RSP_IDLE;
+                        }
+                    }
+                }
+            }
+            break;
+        }
+        //////////////////
+        case RSP_DATA_UNC:
+        {
+            if (p_vci.rspval.read() )
+            {
+                assert( p_vci.reop.read() and
+                "illegal VCI response packet for uncachable read data");
+
+                if ( (p_vci.rerror.read()&0x1) != 0 )  // error reported
+                {
+                    r_vci_rsp_data_error = true;
+                    r_vci_rsp_fsm = RSP_IDLE;
+                }
+                else                                         // no error reported
+                {
+                    if ( r_vci_rsp_fifo_dcache.wok())
+                    {
+                        vci_rsp_fifo_dcache_put       = true;
+                        vci_rsp_fifo_dcache_data      = p_vci.rdata.read();
+                        r_vci_rsp_fsm = RSP_IDLE;
+                    }
+                }
+            }
+            break;
+        }
+        /////////////////
+        case RSP_DATA_LL:
+        {
+            if ( p_vci.rspval.read() )
+            {
+                if ( (p_vci.rerror.read()&0x1) != 0 )  // error reported
+                {
+                    r_vci_rsp_data_error = true;
+                    r_vci_rsp_fsm = RSP_IDLE;
+                    break;
+                }
+                if (r_vci_rsp_cpt.read() == 0) //first flit
+                {
+                    if(r_vci_rsp_fifo_dcache.wok())
+                    {
+                        assert(!p_vci.reop.read() &&
+                            "illegal VCI response packet for LL");
+                        vci_rsp_fifo_dcache_put  = true;
+                        vci_rsp_fifo_dcache_data = p_vci.rdata.read();
+                        r_vci_rsp_cpt            = r_vci_rsp_cpt.read() + 1;
+                    }
+                    break;
+                }
+                else // last flit
+                {
+                    if(r_vci_rsp_fifo_dcache.wok())
+                    {
+                        assert(p_vci.reop.read() &&
+                            "illegal VCI response packet for LL");
+                        vci_rsp_fifo_dcache_put  = true;
+                        vci_rsp_fifo_dcache_data = p_vci.rdata.read();
+                        r_vci_rsp_fsm            = RSP_IDLE;
+                    }
+                    break;
+                }
+            }
+            break;
+        }
+        ////////////////////
+        case RSP_DATA_WRITE:
+        {
+            if (p_vci.rspval.read())
+            {
+                assert( p_vci.reop.read() and
+                "a VCI response packet must contain one flit for a write transaction");
+
+                r_vci_rsp_fsm = RSP_IDLE;
+                uint32_t   wbuf_index = p_vci.rtrdid.read();
+                r_wbuf.completed(wbuf_index);
+                if ( (p_vci.rerror.read()&0x1) != 0 ) r_iss.setWriteBerr();
+            }
+            break;
+        }
+    } // end switch r_vci_rsp_fsm
+
+    /////////////////////////////////////////////////////////////////////////////////////
+    // The CC_SEND FSM is in charge of sending cleanups and the multicast
+    // acknowledgements on the coherence network. It has two clients (DCACHE FSM
+    // and ICACHE FSM) that are served with a round-robin priority.
+    // The CC_SEND FSM resets the r_*cache_cc_send_req request flip-flops as
+    // soon as the request has been sent.
+    /////////////////////////////////////////////////////////////////////////////////////
+    switch ( r_cc_send_fsm.read() )
+    {
+        ///////////////////////////
+        case CC_SEND_IDLE:
+        {
+            ///////////////////////////////////////////////////////
+            // handling round robin between icache and dcache :  //
+            // we first check for the last client and listen for //
+            // a request of the other, then update the client    //
+            // r_cc_send_last_client : 0 dcache / 1 icache
+            ///////////////////////////////////////////////////////
+            bool update_last_client = r_cc_send_last_client.read();
+            if ( r_cc_send_last_client.read() == 0 ) // last client was dcache
+            {
+                if (r_icache_cc_send_req.read()) // request from icache
+                    update_last_client = 1; // update last client to icache
+            }
+            else // last client was icache
+            {
+                if (r_dcache_cc_send_req.read()) // request from dcache
+                    update_last_client = 0; // update last client to dcache
+            }
+            r_cc_send_last_client = update_last_client;
+
+            // if there is an actual request
+            if (r_dcache_cc_send_req.read() or r_icache_cc_send_req.read())
+            {
+                // the new client is dcache and has a cleanup request
+                if      ( (update_last_client == 0) and 
+                          (r_dcache_cc_send_type.read() == CC_TYPE_CLEANUP))
+                    r_cc_send_fsm = CC_SEND_CLEANUP_1;
+                // the new client is dcache and has a multi acknowledgement request
+                else if ( (update_last_client == 0) and 
+                          (r_dcache_cc_send_type.read() == CC_TYPE_MULTI_ACK))
+                    r_cc_send_fsm = CC_SEND_MULTI_ACK;
+                // the new client is icache and has a cleanup request
+                else if ( (update_last_client == 1) and 
+                          (r_icache_cc_send_type.read() == CC_TYPE_CLEANUP))
+                    r_cc_send_fsm = CC_SEND_CLEANUP_1;
+                // the new client is icache and has a multi acknowledgement request
+                else if ( (update_last_client == 1) and
+                        (r_icache_cc_send_type.read() == CC_TYPE_MULTI_ACK))
+                    r_cc_send_fsm = CC_SEND_MULTI_ACK;
+            }
+            break;
+        }
+        ///////////////////////////
+        case CC_SEND_CLEANUP_1:
+        {
+            // wait for the first flit to be consumed
+            if (p_dspin_p2m.read.read())
+                r_cc_send_fsm = CC_SEND_CLEANUP_2;
+
+            break;
+        }
+        ///////////////////////////
+        case CC_SEND_CLEANUP_2:
+        {
+            // wait for the second flit to be consumed
+            if (p_dspin_p2m.read.read())
+            {
+                if (r_cc_send_last_client.read() == 0) // dcache active request
+                    r_dcache_cc_send_req = false; // reset dcache request
+                else // icache active request
+                    r_icache_cc_send_req = false; // reset icache request
+
+                // go back to idle state
+                r_cc_send_fsm = CC_SEND_IDLE;
+            }
+            break;
+        }
+        ///////////////////////////
+        case CC_SEND_MULTI_ACK:
+        {
+            // wait for the flit to be consumed
+            if(p_dspin_p2m.read.read())
+            {
+                if(r_cc_send_last_client.read() == 0) // dcache active request
+                    r_dcache_cc_send_req = false; // reset dcache request
+                else // icache active request
+                    r_icache_cc_send_req = false; // reset icache request
+                // go back to idle state
+                r_cc_send_fsm = CC_SEND_IDLE;
+            }
+            break;
+        }
+    } // end switch CC_SEND FSM
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //  CC_RECEIVE  FSM
+    // This FSM receive all coherence packets on a DSPIN40 port.
+    // There is 5 packet types:
+    // - CC_DATA_INVAL : DCACHE invalidate request
+    // - CC_DATA_UPDT  : DCACHE update request (multi-words)
+    // - CC_INST_INVAL : ICACHE invalidate request
+    // - CC_INST_UPDT  : ICACHE update request (multi-words)
+    // - CC_BROADCAST  : Broadcast invalidate request (both DCACHE & ICACHE)
+    //////////////////////////////////////////////////////////////////////////////
+    switch( r_cc_receive_fsm.read() )
+    {
+        /////////////////////
+        case CC_RECEIVE_IDLE:
+        {
+            // a coherence request has arrived
+            if (p_dspin_m2p.write.read())
+            {
+                // initialize dspin received data
+                uint64_t receive_data = p_dspin_m2p.data.read();
+                // initialize coherence packet type
+                uint64_t receive_type = DspinDhccpParam::dspin_get(receive_data,
+                                            DspinDhccpParam::M2P_TYPE);
+                // test for a broadcast
+                if (DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::M2P_BC))
+                {
+                    r_cc_receive_fsm = CC_RECEIVE_BRDCAST_HEADER;
+                }
+                // test for a multi updt
+                else if (receive_type == DspinDhccpParam::TYPE_MULTI_UPDT_DATA) 
+                {
+                    r_cc_receive_fsm = CC_RECEIVE_DATA_UPDT_HEADER;
+                }
+                else if (receive_type == DspinDhccpParam::TYPE_MULTI_UPDT_INST)
+                {
+                    r_cc_receive_fsm = CC_RECEIVE_INS_UPDT_HEADER;
+                }
+                // test for a multi inval
+                else if (receive_type == DspinDhccpParam::TYPE_MULTI_INVAL_DATA)
+                {
+                    r_cc_receive_fsm = CC_RECEIVE_DATA_INVAL_HEADER;
+                }
+                else
+                {
+                    r_cc_receive_fsm = CC_RECEIVE_INS_INVAL_HEADER;
+                }
+            }
+            break;
+        }
+        ///////////////////////////////
+        case CC_RECEIVE_BRDCAST_HEADER:
+        {
+            // no actual data in the HEADER, just skip to second flit
+            r_cc_receive_fsm = CC_RECEIVE_BRDCAST_NLINE;
+            break;
+        }
+        //////////////////////////////
+        case CC_RECEIVE_BRDCAST_NLINE:
+        {
+            // initialize dspin received data
+            uint64_t receive_data = p_dspin_m2p.data.read();
+            // wait for both dcache and icache to take the request
+            // TODO maybe we need to wait for both only to leave the state, but
+            // not to actually post a request to an available cache => need a
+            // flip_flop to check that ?
+            if (not (r_cc_receive_icache_req.read()) and 
+                not (r_cc_receive_dcache_req.read()) and
+                (p_dspin_m2p.write.read()))
+            {
+                // request dcache to handle the BROADCAST
+                r_cc_receive_dcache_req = true;
+                r_cc_receive_dcache_nline  = DspinDhccpParam::dspin_get(receive_data,
+                                             DspinDhccpParam::BROADCAST_NLINE);
+                r_cc_receive_dcache_type = CC_TYPE_INVAL;
+                // request icache to handle the BROADCAST
+                r_cc_receive_icache_req = true;
+                r_cc_receive_icache_nline  = DspinDhccpParam::dspin_get(receive_data,
+                                             DspinDhccpParam::BROADCAST_NLINE);
+                r_cc_receive_icache_type = CC_TYPE_INVAL;
+                // get back to idle state
+                r_cc_receive_fsm = CC_RECEIVE_IDLE;
+                break;
+            }
+            // keep waiting for the caches to accept the request
+            break;
+        }
+        /////////////////////////////
+        case CC_RECEIVE_DATA_INVAL_HEADER:
+        {
+            // sample updt tab index in the HEADER, then skip to second flit
+            r_cc_receive_fsm = CC_RECEIVE_DATA_INVAL_NLINE;
+            break;
+        }
+        /////////////////////////////
+        case CC_RECEIVE_INS_INVAL_HEADER:
+        {
+            // sample updt tab index in the HEADER, then skip to second flit
+            r_cc_receive_fsm = CC_RECEIVE_INS_INVAL_NLINE;
+            break;
+        }
+        ////////////////////////////
+        case CC_RECEIVE_DATA_INVAL_NLINE:
+        {
+            // sample nline in the second flit
+            uint64_t receive_data = p_dspin_m2p.data.read();
+            // for data INVAL, wait for dcache to take the request
+            if (p_dspin_m2p.write.read()           and 
+                not r_cc_receive_dcache_req.read() )
+            {
+                // request dcache to handle the INVAL
+                r_cc_receive_dcache_req = true;
+                r_cc_receive_dcache_nline = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_INVAL_NLINE);
+                r_cc_receive_dcache_type = CC_TYPE_INVAL;
+                // get back to idle state
+                r_cc_receive_fsm = CC_RECEIVE_IDLE;
+                break;
+            }
+            break;
+        }
+        //////////////////////////////
+        case CC_RECEIVE_INS_INVAL_NLINE:
+        {
+            // sample nline in the second flit
+            uint64_t receive_data = p_dspin_m2p.data.read();
+            // for ins INVAL, wait for icache to take the request
+            if (p_dspin_m2p.write.read()           and 
+                not r_cc_receive_icache_req.read() )
+            {
+                // request icache to handle the INVAL
+                r_cc_receive_icache_req = true;
+                r_cc_receive_icache_nline = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_INVAL_NLINE);
+                r_cc_receive_icache_type = CC_TYPE_INVAL;
+                // get back to idle state
+                r_cc_receive_fsm = CC_RECEIVE_IDLE;
+                break;
+            }
+            break;
+        }
+        ////////////////////////////
+        case CC_RECEIVE_DATA_UPDT_HEADER:
+        {
+            // sample updt tab index in the HEADER, than skip to second flit
+            uint64_t receive_data = p_dspin_m2p.data.read();
+            // for data INVAL, wait for dcache to take the request and fifo to
+            // be empty
+            if (not r_cc_receive_dcache_req.read())
+            {
+                r_cc_receive_dcache_updt_tab_idx  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_UPDT_INDEX);
+                r_cc_receive_fsm = CC_RECEIVE_DATA_UPDT_NLINE;
+                break;
+            }
+            break;
+        }
+        ////////////////////////////
+        case CC_RECEIVE_INS_UPDT_HEADER:
+        {
+            // sample updt tab index in the HEADER, than skip to second flit
+            uint64_t receive_data = p_dspin_m2p.data.read();
+            // for ins INVAL, wait for icache to take the request and fifo to be
+            // empty
+            if (not r_cc_receive_icache_req.read())
+            {
+                r_cc_receive_icache_updt_tab_idx  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_UPDT_INDEX);
+                r_cc_receive_fsm = CC_RECEIVE_INS_UPDT_NLINE;
+                break;
+            }
+            // keep waiting for the correct cache to accept the request
+            break;
+        }
+        ///////////////////////////
+        case CC_RECEIVE_DATA_UPDT_NLINE:
+        {
+            // sample nline and word index in the second flit
+            uint64_t receive_data = p_dspin_m2p.data.read();
+            // for data INVAL, wait for dcache to take the request and fifo to
+            // be empty
+            if ( r_cc_receive_updt_fifo_be.empty() and
+                 p_dspin_m2p.write.read() )
+            {
+                r_cc_receive_dcache_req = true;
+                r_cc_receive_dcache_nline  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_NLINE);
+                r_cc_receive_word_idx  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_WORD_INDEX);
+                r_cc_receive_dcache_type = CC_TYPE_UPDT;
+                // get back to idle state
+                r_cc_receive_fsm = CC_RECEIVE_DATA_UPDT_DATA;
+                break;
+            }
+            break;
+        }
+        ////////////////////////////
+        case CC_RECEIVE_INS_UPDT_NLINE:
+        {
+            // sample nline and word index in the second flit
+            uint64_t receive_data = p_dspin_m2p.data.read();
+            // for ins INVAL, wait for icache to take the request and fifo to be
+            // empty
+            if ( r_cc_receive_updt_fifo_be.empty() and
+                 p_dspin_m2p.write.read() )
+            {
+                r_cc_receive_icache_req = true;
+                r_cc_receive_icache_nline  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_NLINE);
+                r_cc_receive_word_idx  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_WORD_INDEX);
+                r_cc_receive_icache_type = CC_TYPE_UPDT;
+                // get back to idle state
+                r_cc_receive_fsm = CC_RECEIVE_INS_UPDT_DATA;
+                break;
+            }
+            break;
+        }
+        //////////////////////////
+        case CC_RECEIVE_DATA_UPDT_DATA:
+        {
+            // wait for the fifo
+            if (r_cc_receive_updt_fifo_be.wok() and (p_dspin_m2p.write.read()))
+            {
+                uint64_t receive_data = p_dspin_m2p.data.read();
+                bool     receive_eop  = p_dspin_m2p.eop.read();
+                cc_receive_updt_fifo_be   = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_BE);
+                cc_receive_updt_fifo_data = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_DATA);
+                cc_receive_updt_fifo_eop  = receive_eop;
+                cc_receive_updt_fifo_put  = true;
+                if ( receive_eop ) r_cc_receive_fsm = CC_RECEIVE_IDLE;
+            }
+            break;
+        }
+        //////////////////////////
+        case CC_RECEIVE_INS_UPDT_DATA:
+        {
+            // wait for the fifo
+            if (r_cc_receive_updt_fifo_be.wok() and (p_dspin_m2p.write.read()))
+            {
+                uint64_t receive_data = p_dspin_m2p.data.read();
+                bool     receive_eop  = p_dspin_m2p.eop.read();
+                cc_receive_updt_fifo_be   = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_BE);
+                cc_receive_updt_fifo_data = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_DATA);
+                cc_receive_updt_fifo_eop  = receive_eop;
+                cc_receive_updt_fifo_put  = true;
+                if ( receive_eop ) r_cc_receive_fsm = CC_RECEIVE_IDLE;
+            }
+            break;
+        }
+
+    } // end switch CC_RECEIVE FSM
+
+    ///////////////// DSPIN CLACK interface ///////////////
+    
+    uint64_t clack_type = DspinDhccpParam::dspin_get(r_dspin_clack_flit.read(),
+                                                     DspinDhccpParam::CLACK_TYPE);
+
+    size_t clack_way  = DspinDhccpParam::dspin_get(r_dspin_clack_flit.read(),
+                                                   DspinDhccpParam::CLACK_WAY);
+
+    size_t clack_set  = DspinDhccpParam::dspin_get(r_dspin_clack_flit.read(),
+                                                   DspinDhccpParam::CLACK_SET);
+
+    bool dspin_clack_get      = false;
+    bool dcache_clack_request = (clack_type == DspinDhccpParam::TYPE_CLACK_DATA);
+    bool icache_clack_request = (clack_type == DspinDhccpParam::TYPE_CLACK_INST);
+
+    if (r_dspin_clack_req.read())
+    {
+        // CLACK DATA: Send request to DCACHE FSM
+        if (dcache_clack_request and not r_dcache_clack_req.read()){
+            r_dcache_clack_req = true;
+            r_dcache_clack_way = clack_way & ((1ULL<<(uint32_log2(m_dcache_ways)))-1);
+            r_dcache_clack_set = clack_set & ((1ULL<<(uint32_log2(m_dcache_sets)))-1);
+            dspin_clack_get    = true;
+        }
+
+        // CLACK INST: Send request to ICACHE FSM
+        else if (icache_clack_request and not r_icache_clack_req.read()){
+            r_icache_clack_req = true;
+            r_icache_clack_way = clack_way & ((1ULL<<(uint32_log2(m_dcache_ways)))-1);
+            r_icache_clack_set = clack_set & ((1ULL<<(uint32_log2(m_icache_sets)))-1);
+            dspin_clack_get    = true;
+        }
+    }
+    else
+    {
+        dspin_clack_get = true;
+    }
+
+    if (dspin_clack_get)
+    {
+        r_dspin_clack_req  = p_dspin_clack.write.read();
+        r_dspin_clack_flit = p_dspin_clack.data.read();
+    }
+
+    ///////////////// Response FIFOs update  //////////////////////
+    r_vci_rsp_fifo_icache.update(vci_rsp_fifo_icache_get,
+                                 vci_rsp_fifo_icache_put,
+                                 vci_rsp_fifo_icache_data);
+
+    r_vci_rsp_fifo_dcache.update(vci_rsp_fifo_dcache_get,
+                                 vci_rsp_fifo_dcache_put,
+                                 vci_rsp_fifo_dcache_data);
+
+    ///////////////// updt FIFO update  //////////////////////
+    //TODO check this
+    r_cc_receive_updt_fifo_be.update(cc_receive_updt_fifo_get,
+                                 cc_receive_updt_fifo_put,
+                                 cc_receive_updt_fifo_be);
+    r_cc_receive_updt_fifo_data.update(cc_receive_updt_fifo_get,
+                                 cc_receive_updt_fifo_put,
+                                 cc_receive_updt_fifo_data);
+    r_cc_receive_updt_fifo_eop.update(cc_receive_updt_fifo_get,
+                                 cc_receive_updt_fifo_put,
+                                 cc_receive_updt_fifo_eop);
+
+} // end transition()
+
+///////////////////////
+tmpl(void)::genMoore()
+///////////////////////
+{
+
+    // VCI initiator command on the direct network
+    // it depends on the CMD FSM state
+
+    bool is_sc_or_cas  = (r_vci_cmd_fsm.read() == CMD_DATA_CAS) or
+                         (r_vci_cmd_fsm.read() == CMD_DATA_SC );
+
+    p_vci.pktid  = 0;
+    p_vci.srcid  = m_srcid;
+    p_vci.cons   = is_sc_or_cas; 
+    p_vci.contig = not is_sc_or_cas; 
+    p_vci.wrap   = false;
+    p_vci.clen   = 0;
+    p_vci.cfixed = false;
+
+    if ( m_monitor_ok ) {
+        if ( p_vci.cmdack.read() == true and p_vci.cmdval == true) {
+            if (((p_vci.address.read()) >= m_monitor_base) and 
+                ((p_vci.address.read()) < m_monitor_base + m_monitor_length) ) {
+                std::cout << "CC_VCACHE Monitor " << name() << std::hex
+                          << " Access type = " << vci_cmd_type_str[p_vci.cmd.read()] 
+                          << " Pktid type = " << vci_pktid_type_str[p_vci.pktid.read()]
+                          << " : address = " << p_vci.address.read()
+                          << " / be = " << p_vci.be.read(); 
+                if ( p_vci.cmd.read() == vci_param::CMD_WRITE ) {
+                    std::cout << " / data = " << p_vci.wdata.read();
+                }
+                std::cout << std::dec << std::endl;
+            }
+        }
+    }
+
+    switch ( r_vci_cmd_fsm.read() ) {
+
+    case CMD_IDLE:
+        p_vci.cmdval  = false;
+        p_vci.address = 0;
+        p_vci.wdata   = 0;
+        p_vci.be      = 0;
+        p_vci.trdid   = 0;
+        p_vci.pktid   = 0;
+        p_vci.plen    = 0;
+        p_vci.cmd     = vci_param::CMD_NOP;
+        p_vci.eop     = false;
+        break;
+
+    case CMD_INS_MISS:
+        p_vci.cmdval  = true;
+        p_vci.address = r_icache_vci_paddr.read() & m_icache_yzmask;
+        p_vci.wdata   = 0;
+        p_vci.be      = 0xF;
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_READ_INS_MISS;
+        p_vci.plen    = m_icache_words<<2;
+        p_vci.cmd     = vci_param::CMD_READ;
+        p_vci.eop     = true;
+        break;
+
+    case CMD_INS_UNC:
+        p_vci.cmdval  = true;
+        p_vci.address = r_icache_vci_paddr.read() & ~0x3;
+        p_vci.wdata   = 0;
+        p_vci.be      = 0xF;
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_READ_INS_UNC;
+        p_vci.plen    = 4;
+        p_vci.cmd     = vci_param::CMD_READ;
+        p_vci.eop     = true;
+        break;
+
+    case CMD_DATA_MISS:
+        p_vci.cmdval  = true;
+        p_vci.address = r_dcache_vci_paddr.read() & m_dcache_yzmask;
+        p_vci.wdata   = 0;
+        p_vci.be      = 0xF;
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_READ_DATA_MISS;
+        p_vci.plen    = m_dcache_words << 2;
+        p_vci.cmd     = vci_param::CMD_READ;
+        p_vci.eop     = true;
+        break;
+
+    case CMD_DATA_UNC_READ:
+        p_vci.cmdval  = true;
+        p_vci.address = r_dcache_vci_paddr.read() & ~0x3;
+        p_vci.wdata   = 0;
+        p_vci.be      = r_dcache_vci_unc_be.read();
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_DATA_UNC;
+        p_vci.plen    = 4;
+        p_vci.cmd     = vci_param::CMD_READ;
+        p_vci.eop     = true;
+        break;
+
+    case CMD_DATA_UNC_WRITE:
+        p_vci.cmdval  = true;
+        p_vci.address = r_dcache_vci_paddr.read() & ~0x3;
+        p_vci.wdata   = r_dcache_vci_wdata.read();
+        p_vci.be      = r_dcache_vci_unc_be.read();
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_DATA_UNC;
+        p_vci.plen    = 4;
+        p_vci.cmd     = vci_param::CMD_WRITE;
+        p_vci.eop     = true;
+        break;
+
+    case CMD_DATA_WRITE:
+        p_vci.cmdval  = true;
+        p_vci.address = r_wbuf.getAddress(r_vci_cmd_cpt.read()) & ~0x3;
+        p_vci.wdata   = r_wbuf.getData(r_vci_cmd_cpt.read());
+        p_vci.be      = r_wbuf.getBe(r_vci_cmd_cpt.read());
+        p_vci.trdid   = r_wbuf.getIndex();
+        p_vci.pktid   = TYPE_WRITE;
+        p_vci.plen    = (r_vci_cmd_max.read() - r_vci_cmd_min.read() + 1) << 2;
+        p_vci.cmd     = vci_param::CMD_WRITE;
+        p_vci.eop     = (r_vci_cmd_cpt.read() == r_vci_cmd_max.read());
+        break;
+
+    case CMD_DATA_LL:
+        p_vci.cmdval  = true;
+        p_vci.address = r_dcache_vci_paddr.read() & ~0x3;
+        p_vci.wdata   = 0;
+        p_vci.be      = 0xF;
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_LL;
+        p_vci.plen    = 8;
+        p_vci.cmd     = vci_param::CMD_LOCKED_READ;
+        p_vci.eop     = true;
+        break;
+
+    case CMD_DATA_SC:
+        p_vci.cmdval  = true;
+        p_vci.address = r_dcache_vci_paddr.read() & ~0x3;
+        if ( r_vci_cmd_cpt.read() == 0 ) p_vci.wdata = r_dcache_llsc_key.read();
+        else                             p_vci.wdata = r_dcache_vci_sc_data.read();
+        p_vci.be      = 0xF;
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_SC;
+        p_vci.plen    = 8;
+        p_vci.cmd     = vci_param::CMD_NOP;
+        p_vci.eop     = (r_vci_cmd_cpt.read() == 1);
+        break;
+
+    case CMD_DATA_CAS:
+        p_vci.cmdval  = true;
+        p_vci.address = r_dcache_vci_paddr.read() & ~0x3;
+        if ( r_vci_cmd_cpt.read() == 0 ) p_vci.wdata = r_dcache_vci_cas_old.read();
+        else                             p_vci.wdata = r_dcache_vci_cas_new.read();
+        p_vci.be      = 0xF;
+        p_vci.trdid   = 0;
+        p_vci.pktid   = TYPE_CAS;
+        p_vci.plen    = 8;
+        p_vci.cmd     = vci_param::CMD_NOP;
+        p_vci.eop     = (r_vci_cmd_cpt.read() == 1);
+        break;
+    } // end switch r_vci_cmd_fsm
+
+    // VCI initiator response on the direct network
+    // it depends on the VCI_RSP FSM
+
+    switch (r_vci_rsp_fsm.read() )
+    {
+        case RSP_DATA_WRITE : p_vci.rspack = true; break;
+        case RSP_INS_MISS   : p_vci.rspack = r_vci_rsp_fifo_icache.wok(); break;
+        case RSP_INS_UNC    : p_vci.rspack = r_vci_rsp_fifo_icache.wok(); break;
+        case RSP_DATA_MISS  : p_vci.rspack = r_vci_rsp_fifo_dcache.wok(); break;
+        case RSP_DATA_UNC   : p_vci.rspack = r_vci_rsp_fifo_dcache.wok(); break;
+        case RSP_DATA_LL    : p_vci.rspack = r_vci_rsp_fifo_dcache.wok(); break;
+        case RSP_IDLE       : p_vci.rspack = false; break;
+    } // end switch r_vci_rsp_fsm
+
+    
+    // Send coherence packets on DSPIN P2M 
+    // it depends on the CC_SEND FSM 
+
+    uint64_t dspin_send_data = 0;
+    switch ( r_cc_send_fsm.read() )
+    {
+        //////////////////
+        case CC_SEND_IDLE:
+        {
+            p_dspin_p2m.write = false;
+            break;
+        }
+        ///////////////////////
+        case CC_SEND_CLEANUP_1:
+        {
+            // initialize dspin send data
+//            DspinDhccpParam::dspin_set(dspin_send_data,
+//                                       0,
+//                                       DspinDhccpParam::P2M_EOP);
+            DspinDhccpParam::dspin_set(dspin_send_data,
+                                       m_cc_global_id,
+                                       DspinDhccpParam::CLEANUP_SRCID);
+            DspinDhccpParam::dspin_set(dspin_send_data,
+                                       0,
+                                       DspinDhccpParam::P2M_BC);
+
+            if(r_cc_send_last_client.read() == 0) // dcache active request
+            {
+                uint64_t dest = (uint64_t) r_dcache_cc_send_nline.read() 
+                                >> (m_nline_width - m_x_width - m_y_width) 
+                                << (DspinDhccpParam::GLOBALID_WIDTH - m_x_width - m_y_width);
+ 
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           dest,
+                                           DspinDhccpParam::CLEANUP_DEST);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           (r_dcache_cc_send_nline.read() & 0x300000000ULL)>>32,
+                                           DspinDhccpParam::CLEANUP_NLINE_MSB);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           r_dcache_cc_send_way.read(),
+                                           DspinDhccpParam::CLEANUP_WAY_INDEX);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           DspinDhccpParam::TYPE_CLEANUP_DATA,
+                                           DspinDhccpParam::P2M_TYPE);
+            }
+            else                                // icache active request
+            {
+                uint64_t dest = (uint64_t) r_icache_cc_send_nline.read() 
+                                >> (m_nline_width - m_x_width - m_y_width) 
+                                << (DspinDhccpParam::GLOBALID_WIDTH - m_x_width - m_y_width);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           dest,
+                                           DspinDhccpParam::CLEANUP_DEST);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           (r_icache_cc_send_nline.read() & 0x300000000ULL)>>32,
+                                           DspinDhccpParam::CLEANUP_NLINE_MSB);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           r_icache_cc_send_way.read(),
+                                           DspinDhccpParam::CLEANUP_WAY_INDEX);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           DspinDhccpParam::TYPE_CLEANUP_INST,
+                                           DspinDhccpParam::P2M_TYPE);
+            }
+            // send flit
+            p_dspin_p2m.data  = dspin_send_data;
+            p_dspin_p2m.write = true;
+            p_dspin_p2m.eop   = false;
+            break;
+        }
+        ///////////////////////
+        case CC_SEND_CLEANUP_2:
+        {
+            // initialize dspin send data
+//            DspinDhccpParam::dspin_set(dspin_send_data,
+//                                       1,
+//                                       DspinDhccpParam::P2M_EOP);
+
+            if(r_cc_send_last_client.read() == 0) // dcache active request
+            {
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           r_dcache_cc_send_nline.read() & 0xFFFFFFFFULL,
+                                           DspinDhccpParam::CLEANUP_NLINE_LSB);
+            }
+            else                                  // icache active request
+            {
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           r_icache_cc_send_nline.read() & 0xFFFFFFFFULL,
+                                           DspinDhccpParam::CLEANUP_NLINE_LSB);
+            }
+            // send flit
+            p_dspin_p2m.data  = dspin_send_data;
+            p_dspin_p2m.write = true;
+            p_dspin_p2m.eop   = true;
+            break;
+        }
+        ///////////////////////
+        case CC_SEND_MULTI_ACK:
+        {
+            // initialize dspin send data
+//            DspinDhccpParam::dspin_set(dspin_send_data,
+//                                       1,
+//                                       DspinDhccpParam::P2M_EOP);
+            DspinDhccpParam::dspin_set(dspin_send_data,
+                                       0,
+                                       DspinDhccpParam::P2M_BC);
+            DspinDhccpParam::dspin_set(dspin_send_data,
+                                       DspinDhccpParam::TYPE_MULTI_ACK,
+                                       DspinDhccpParam::P2M_TYPE);
+
+            if(r_cc_send_last_client.read() == 0) // dcache active request
+            {
+                uint64_t dest = (uint64_t) r_dcache_cc_send_nline.read() 
+                                >> (m_nline_width - m_x_width - m_y_width) 
+                                << (DspinDhccpParam::GLOBALID_WIDTH - m_x_width - m_y_width);
+ 
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           dest,
+                                           DspinDhccpParam::MULTI_ACK_DEST);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           r_dcache_cc_send_updt_tab_idx.read(),
+                                           DspinDhccpParam::MULTI_ACK_UPDT_INDEX);
+            }
+            else                                    // icache active request
+            {
+                uint64_t dest = (uint64_t) r_icache_cc_send_nline.read() 
+                                >> (m_nline_width - m_x_width - m_y_width) 
+                                << (DspinDhccpParam::GLOBALID_WIDTH - m_x_width - m_y_width);
+ 
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           dest,
+                                           DspinDhccpParam::MULTI_ACK_DEST);
+
+                DspinDhccpParam::dspin_set(dspin_send_data,
+                                           r_icache_cc_send_updt_tab_idx.read(),
+                                           DspinDhccpParam::MULTI_ACK_UPDT_INDEX);
+            }
+            // send flit
+            p_dspin_p2m.data  = dspin_send_data;
+            p_dspin_p2m.write = true;
+            p_dspin_p2m.eop   = true;
+
+            break;
+        }
+    } // end switch CC_SEND FSM
+
+    // Receive coherence packets
+    // It depends on the CC_RECEIVE FSM 
+    switch( r_cc_receive_fsm.read() )
+    {
+        /////////////////////
+        case CC_RECEIVE_IDLE:
+        {
+            p_dspin_m2p.read = false;
+            break;
+        }
+        ///////////////////////////////
+        case CC_RECEIVE_BRDCAST_HEADER:
+        {
+            p_dspin_m2p.read = true;
+            break;
+        }
+        //////////////////////////////
+        case CC_RECEIVE_BRDCAST_NLINE:
+        {
+            // TODO maybe we need to wait for both only to leave the state, but
+            // not to actually post a request to an available cache => need a
+            // flip_flop to check that ?
+            if (not (r_cc_receive_icache_req.read()) and not (r_cc_receive_dcache_req.read()))
+                p_dspin_m2p.read = true;
+            else
+                p_dspin_m2p.read = false;
+            break;
+        }
+        /////////////////////////////
+        case CC_RECEIVE_DATA_INVAL_HEADER:
+        case CC_RECEIVE_INS_INVAL_HEADER:
+        {
+            p_dspin_m2p.read = true;
+            break;
+        }
+        ////////////////////////////
+        case CC_RECEIVE_DATA_INVAL_NLINE:
+        {
+            p_dspin_m2p.read = not r_cc_receive_dcache_req.read();
+            break;
+        }
+        case CC_RECEIVE_INS_INVAL_NLINE:
+        {
+            p_dspin_m2p.read = not r_cc_receive_icache_req.read();
+            break;
+        }
+        ///////////////////////////
+        case CC_RECEIVE_DATA_UPDT_HEADER:
+        {
+            if (not r_cc_receive_dcache_req.read())
+                p_dspin_m2p.read = true;
+            else
+                p_dspin_m2p.read = false;
+            break;
+        }
+        ////////////////////////////
+        case CC_RECEIVE_INS_UPDT_HEADER:
+        {
+            if ( not r_cc_receive_icache_req.read()) 
+                p_dspin_m2p.read = true;
+            else
+                p_dspin_m2p.read = false;
+            break;
+        }
+        ///////////////////////////
+        case CC_RECEIVE_DATA_UPDT_NLINE:
+        case CC_RECEIVE_INS_UPDT_NLINE:
+        {
+            if(r_cc_receive_updt_fifo_be.empty())
+                p_dspin_m2p.read = true;
+            else
+                p_dspin_m2p.read = false;
+            break;
+        }
+        ///////////////////////////
+        case CC_RECEIVE_DATA_UPDT_DATA:
+        case CC_RECEIVE_INS_UPDT_DATA:
+        {
+            if (r_cc_receive_updt_fifo_be.wok())
+                p_dspin_m2p.read = true;
+            else
+                p_dspin_m2p.read = false;
+            break;
+        }
+    } // end switch CC_RECEIVE FSM
+
+
+    int clack_type = DspinDhccpParam::dspin_get(r_dspin_clack_flit.read(),
+                                                DspinDhccpParam::CLACK_TYPE);
+
+    bool dspin_clack_get      = false;
+    bool dcache_clack_request = (clack_type == DspinDhccpParam::TYPE_CLACK_DATA);
+    bool icache_clack_request = (clack_type == DspinDhccpParam::TYPE_CLACK_INST);
+
+    if (r_dspin_clack_req.read())
+    {
+        // CLACK DATA: wait if pending request to DCACHE FSM
+        if (dcache_clack_request and not r_dcache_clack_req.read())
+        {
+            dspin_clack_get = true;
+        }
+
+        // CLACK INST: wait if pending request to ICACHE FSM
+        else if (icache_clack_request and not r_icache_clack_req.read())
+        {
+            dspin_clack_get = true;
+        }
+    }
+    else
+    {
+        dspin_clack_get = true;
+    }
+
+    p_dspin_clack.read = dspin_clack_get; 
+} // end genMoore
+
+tmpl(void)::start_monitor(paddr_t base, paddr_t length)
+// This version of monitor print both Read and Write request
+{
+    m_monitor_ok        = true;
+    m_monitor_base      = base;
+    m_monitor_length    = length;
+}
+
+tmpl(void)::stop_monitor()
+{
+    m_monitor_ok        = false;
+}
+
+}}
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/metadata/vci_ethernet.sd
===================================================================
--- /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/metadata/vci_ethernet.sd	(revision 724)
+++ /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/metadata/vci_ethernet.sd	(revision 724)
@@ -0,0 +1,35 @@
+
+# -*- python -*-
+
+Module('caba:vci_ethernet_tsar',
+	   classname = 'soclib::caba::VciEthernet',
+	   tmpl_parameters = [
+	parameter.Module('vci_param',  default = 'caba:vci_param'),
+	],
+	   header_files = ['../source/include/vci_ethernet.h',
+					],
+    interface_files = [
+					   '../../include/soclib/ethernet.h'
+					   ],
+	   implementation_files = ['../source/src/vci_ethernet.cpp',],
+	   ports = [
+	Port('caba:vci_target', 'p_vci_target'),
+	Port('caba:vci_initiator', 'p_vci_initiator'),
+	Port('caba:bit_out', 'p_irq'),
+	Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+	Port('caba:clock_in', 'p_clk', auto = 'clock'),
+	],
+	   uses = [
+	Uses('caba:base_module'),
+	Uses('caba:vci_target_fsm', default_target = 'true', support_llsc = 'false'),
+	Uses('caba:vci_initiator_simple_read_req'),
+	Uses('caba:vci_initiator_simple_write_req'),
+	Uses('caba:vci_initiator_fsm'),
+	],
+	instance_parameters = [
+        parameter.Module('mt', typename = 'common:mapping_table'),
+        parameter.IntTab('srcid'),
+        parameter.IntTab('tgtid'),
+        parameter.String('filename'),
+        ],
+)
Index: /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/include/vci_ethernet.h
===================================================================
--- /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	(revision 724)
@@ -0,0 +1,149 @@
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) Telecom ParisTech
+ *         Alexandre Becoulet <alexandre.becoulet@enst.fr>, 2012
+ *
+ * Maintainers: becoulet
+ *
+ * Maintainers: nipo
+ */
+
+#ifndef SOCLIB_VCI_ETHERNET_H
+#define SOCLIB_VCI_ETHERNET_H
+
+#include <stdint.h>
+#include <systemc>
+
+#include <linux/if_tun.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <net/if.h>
+#include <netinet/in.h>
+
+#include "vci_target_fsm.h"
+#include "vci_initiator_fsm.h"
+#include "caba_base_module.h"
+#include "mapping_table.h"
+
+#define VCI_ETHERNET_FIFO_SIZE 8
+#define VCI_ETHERNET_MAX_PKT_SIZE 1500
+
+namespace soclib {
+namespace caba {
+
+using namespace sc_core;
+
+template<typename vci_param>
+class VciEthernet
+	: public caba::BaseModule
+{
+private:
+    soclib::caba::VciTargetFsm<vci_param, true> m_vci_target_fsm;
+    soclib::caba::VciInitiatorFsm<vci_param> m_vci_init_fsm;
+    typedef typename soclib::caba::VciInitiatorReq<vci_param> req_t;
+
+    bool on_write(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be);
+    bool on_read(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data);
+    void read_finish( req_t *req );
+    void write_finish( req_t *req );
+    void transition();
+    void genMoore();
+    void cleanup_fifos();
+
+    struct fifo_entry_t
+    {
+        uint32_t addr;
+        uint32_t size;
+        uint32_t status;
+        uint8_t *data;
+        int dma_offset;
+        union {
+            VciInitSimpleReadReq<vci_param> *rd_req;
+            VciInitSimpleWriteReq<vci_param> *wr_req;
+        };
+    };
+
+    int _rx_start;    //< index of first available rx buffer
+    int _rx_free;     //< number of yet unused rx buffers
+    int _rx_done;     //< number of rx buffers ready to pop
+    int _rx_count;    //< total number of rx buffers
+
+    int _tx_start;    //< index of first tx buffer
+    int _tx_waiting;  //< number of yet unprocessed tx buffers
+    int _tx_done;     //< number of tx buffers ready to pop
+    int _tx_count;    //< total number of tx buffers
+
+    int _link_check_counter;
+
+    bool _dma_busy;
+    bool _link_up;
+    bool _link_changed;
+
+    fifo_entry_t _tx_fifo[VCI_ETHERNET_FIFO_SIZE];
+    fifo_entry_t _rx_fifo[VCI_ETHERNET_FIFO_SIZE];
+
+    uint32_t _tx_size; //< next tx buffer size
+    uint32_t _rx_size; //< next rx buffer size
+
+    bool _rx_irq_en;
+    bool _tx_irq_en;
+    bool _link_irq_en;
+    bool _soft_reset;
+
+	int _fd;
+    uint8_t _mac[6];
+
+    struct ifreq _tap_ifr;
+
+	inline void ended(int status);
+
+protected:
+    SC_HAS_PROCESS(VciEthernet);
+
+public:
+    sc_in<bool> p_clk;
+    sc_in<bool> p_resetn;
+    soclib::caba::VciTarget<vci_param> p_vci_target;
+    soclib::caba::VciInitiator<vci_param> p_vci_initiator;
+    sc_out<bool> p_irq;
+
+	VciEthernet(sc_module_name name, const soclib::common::MappingTable &mt,
+                const soclib::common::IntTab &srcid, const soclib::common::IntTab &tgtid,
+                const std::string &if_name = "soclib0");
+
+	~VciEthernet();
+};
+
+}}
+
+#endif /* SOCLIB_VCI_ETHERNET_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/src/.tags
===================================================================
--- /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/src/.tags	(revision 724)
+++ /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/src/.tags	(revision 724)
@@ -0,0 +1,137 @@
+!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
+!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
+!_TAG_PROGRAM_AUTHOR	Darren Hiebert	/dhiebert@users.sourceforge.net/
+!_TAG_PROGRAM_NAME	Exuberant Ctags	//
+!_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
+!_TAG_PROGRAM_VERSION	5.9~svn20110310	//
+CHUNCK_SIZE	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	41;"	d	file:
+SC_HAS_PROCESS	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    SC_HAS_PROCESS(VciEthernet);$/;"	p	class:soclib::caba::VciEthernet	access:protected	signature:(VciEthernet)
+SOCLIB_VCI_ETHERNET_H	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	32;"	d
+VCI_ETHERNET_FIFO_SIZE	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	48;"	d
+VCI_ETHERNET_MAX_PKT_SIZE	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	49;"	d
+VciEthernet	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	VciEthernet(sc_module_name name, const soclib::common::MappingTable &mt,$/;"	p	class:soclib::caba::VciEthernet	access:public	signature:(sc_module_name name, const soclib::common::MappingTable &mt, const soclib::common::IntTab &srcid, const soclib::common::IntTab &tgtid, const std::string &if_name = Ó)
+VciEthernet	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^class VciEthernet$/;"	c	namespace:soclib::caba	inherits:caba::BaseModule
+_dma_busy	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _dma_busy;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_fd	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	int _fd;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_link_changed	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _link_changed;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_link_check_counter	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _link_check_counter;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_link_irq_en	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _link_irq_en;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_link_up	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _link_up;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_mac	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    uint8_t _mac[6];$/;"	m	class:soclib::caba::VciEthernet	access:private
+_rx_count	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_count;    \/\/< total number of rx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+_rx_done	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_done;     \/\/< number of rx buffers ready to pop$/;"	m	class:soclib::caba::VciEthernet	access:private
+_rx_fifo	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    fifo_entry_t _rx_fifo[VCI_ETHERNET_FIFO_SIZE];$/;"	m	class:soclib::caba::VciEthernet	access:private
+_rx_free	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_free;     \/\/< number of yet unused rx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+_rx_irq_en	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _rx_irq_en;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_rx_size	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    uint32_t _rx_size; \/\/< next rx buffer size$/;"	m	class:soclib::caba::VciEthernet	access:private
+_rx_start	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_start;    \/\/< index of first available rx buffer$/;"	m	class:soclib::caba::VciEthernet	access:private
+_soft_reset	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _soft_reset;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_tap_ifr	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    struct ifreq _tap_ifr;$/;"	m	class:soclib::caba::VciEthernet	typeref:struct:soclib::caba::VciEthernet::ifreq	access:private
+_tx_count	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_count;    \/\/< total number of tx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+_tx_done	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_done;     \/\/< number of tx buffers ready to pop$/;"	m	class:soclib::caba::VciEthernet	access:private
+_tx_fifo	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    fifo_entry_t _tx_fifo[VCI_ETHERNET_FIFO_SIZE];$/;"	m	class:soclib::caba::VciEthernet	access:private
+_tx_irq_en	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _tx_irq_en;$/;"	m	class:soclib::caba::VciEthernet	access:private
+_tx_size	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    uint32_t _tx_size; \/\/< next tx buffer size$/;"	m	class:soclib::caba::VciEthernet	access:private
+_tx_start	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_start;    \/\/< index of first tx buffer$/;"	m	class:soclib::caba::VciEthernet	access:private
+_tx_waiting	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_waiting;  \/\/< number of yet unprocessed tx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+addr	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint32_t addr;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+caba	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^namespace caba {$/;"	n	namespace:soclib
+caba	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^namespace soclib { namespace caba {$/;"	n	namespace:soclib	file:
+cleanup_fifos	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void cleanup_fifos();$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:()
+data	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint8_t *data;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+dma_offset	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        int dma_offset;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+ended	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	inline void ended(int status);$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:(int status)
+fifo_entry_t	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    struct fifo_entry_t$/;"	s	class:soclib::caba::VciEthernet	access:private
+genMoore	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void genMoore();$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:()
+m_vci_init_fsm	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciInitiatorFsm<vci_param> m_vci_init_fsm;$/;"	m	class:soclib::caba::VciEthernet	access:private
+m_vci_target_fsm	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciTargetFsm<vci_param, true> m_vci_target_fsm;$/;"	m	class:soclib::caba::VciEthernet	access:private
+on_read	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool on_read(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data);$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data)
+on_write	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool on_write(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be);$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be)
+p_clk	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    sc_in<bool> p_clk;$/;"	m	class:soclib::caba::VciEthernet	access:public
+p_irq	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    sc_out<bool> p_irq;$/;"	m	class:soclib::caba::VciEthernet	access:public
+p_resetn	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    sc_in<bool> p_resetn;$/;"	m	class:soclib::caba::VciEthernet	access:public
+p_vci_initiator	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciInitiator<vci_param> p_vci_initiator;$/;"	m	class:soclib::caba::VciEthernet	access:public
+p_vci_target	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciTarget<vci_param> p_vci_target;$/;"	m	class:soclib::caba::VciEthernet	access:public
+rd_req	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^            VciInitSimpleReadReq<vci_param> *rd_req;$/;"	m	union:soclib::caba::VciEthernet::fifo_entry_t::__anon1	access:public
+read_finish	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void read_finish( req_t *req );$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:( req_t *req )
+req_t	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    typedef typename soclib::caba::VciInitiatorReq<vci_param> req_t;$/;"	t	class:soclib::caba::VciEthernet	access:private
+size	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint32_t size;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+soclib	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^namespace soclib {$/;"	n
+soclib	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^namespace soclib { namespace caba {$/;"	n	file:
+soclib::caba	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^namespace caba {$/;"	n	namespace:soclib
+soclib::caba	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^namespace soclib { namespace caba {$/;"	n	namespace:soclib	file:
+soclib::caba::VciEthernet	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^class VciEthernet$/;"	c	namespace:soclib::caba	inherits:caba::BaseModule
+soclib::caba::VciEthernet::SC_HAS_PROCESS	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    SC_HAS_PROCESS(VciEthernet);$/;"	p	class:soclib::caba::VciEthernet	access:protected	signature:(VciEthernet)
+soclib::caba::VciEthernet::VciEthernet	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	VciEthernet(sc_module_name name, const soclib::common::MappingTable &mt,$/;"	p	class:soclib::caba::VciEthernet	access:public	signature:(sc_module_name name, const soclib::common::MappingTable &mt, const soclib::common::IntTab &srcid, const soclib::common::IntTab &tgtid, const std::string &if_name = Ó)
+soclib::caba::VciEthernet::_dma_busy	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _dma_busy;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_fd	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	int _fd;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_link_changed	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _link_changed;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_link_check_counter	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _link_check_counter;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_link_irq_en	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _link_irq_en;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_link_up	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _link_up;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_mac	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    uint8_t _mac[6];$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_rx_count	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_count;    \/\/< total number of rx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_rx_done	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_done;     \/\/< number of rx buffers ready to pop$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_rx_fifo	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    fifo_entry_t _rx_fifo[VCI_ETHERNET_FIFO_SIZE];$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_rx_free	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_free;     \/\/< number of yet unused rx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_rx_irq_en	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _rx_irq_en;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_rx_size	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    uint32_t _rx_size; \/\/< next rx buffer size$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_rx_start	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _rx_start;    \/\/< index of first available rx buffer$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_soft_reset	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _soft_reset;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_tap_ifr	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    struct ifreq _tap_ifr;$/;"	m	class:soclib::caba::VciEthernet	typeref:struct:soclib::caba::VciEthernet::ifreq	access:private
+soclib::caba::VciEthernet::_tx_count	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_count;    \/\/< total number of tx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_tx_done	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_done;     \/\/< number of tx buffers ready to pop$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_tx_fifo	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    fifo_entry_t _tx_fifo[VCI_ETHERNET_FIFO_SIZE];$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_tx_irq_en	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool _tx_irq_en;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_tx_size	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    uint32_t _tx_size; \/\/< next tx buffer size$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_tx_start	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_start;    \/\/< index of first tx buffer$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::_tx_waiting	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    int _tx_waiting;  \/\/< number of yet unprocessed tx buffers$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::cleanup_fifos	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void cleanup_fifos();$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:()
+soclib::caba::VciEthernet::ended	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	inline void ended(int status);$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:(int status)
+soclib::caba::VciEthernet::fifo_entry_t	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    struct fifo_entry_t$/;"	s	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::fifo_entry_t::__anon1::rd_req	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^            VciInitSimpleReadReq<vci_param> *rd_req;$/;"	m	union:soclib::caba::VciEthernet::fifo_entry_t::__anon1	access:public
+soclib::caba::VciEthernet::fifo_entry_t::__anon1::wr_req	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^            VciInitSimpleWriteReq<vci_param> *wr_req;$/;"	m	union:soclib::caba::VciEthernet::fifo_entry_t::__anon1	access:public
+soclib::caba::VciEthernet::fifo_entry_t::addr	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint32_t addr;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+soclib::caba::VciEthernet::fifo_entry_t::data	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint8_t *data;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+soclib::caba::VciEthernet::fifo_entry_t::dma_offset	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        int dma_offset;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+soclib::caba::VciEthernet::fifo_entry_t::size	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint32_t size;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+soclib::caba::VciEthernet::fifo_entry_t::status	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint32_t status;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+soclib::caba::VciEthernet::genMoore	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void genMoore();$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:()
+soclib::caba::VciEthernet::m_vci_init_fsm	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciInitiatorFsm<vci_param> m_vci_init_fsm;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::m_vci_target_fsm	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciTargetFsm<vci_param, true> m_vci_target_fsm;$/;"	m	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::on_read	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool on_read(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data);$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data)
+soclib::caba::VciEthernet::on_write	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    bool on_write(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be);$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be)
+soclib::caba::VciEthernet::p_clk	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    sc_in<bool> p_clk;$/;"	m	class:soclib::caba::VciEthernet	access:public
+soclib::caba::VciEthernet::p_irq	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    sc_out<bool> p_irq;$/;"	m	class:soclib::caba::VciEthernet	access:public
+soclib::caba::VciEthernet::p_resetn	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    sc_in<bool> p_resetn;$/;"	m	class:soclib::caba::VciEthernet	access:public
+soclib::caba::VciEthernet::p_vci_initiator	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciInitiator<vci_param> p_vci_initiator;$/;"	m	class:soclib::caba::VciEthernet	access:public
+soclib::caba::VciEthernet::p_vci_target	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    soclib::caba::VciTarget<vci_param> p_vci_target;$/;"	m	class:soclib::caba::VciEthernet	access:public
+soclib::caba::VciEthernet::read_finish	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void read_finish( req_t *req );$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:( req_t *req )
+soclib::caba::VciEthernet::req_t	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    typedef typename soclib::caba::VciInitiatorReq<vci_param> req_t;$/;"	t	class:soclib::caba::VciEthernet	access:private
+soclib::caba::VciEthernet::transition	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void transition();$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:()
+soclib::caba::VciEthernet::write_finish	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void write_finish( req_t *req );$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:( req_t *req )
+soclib::caba::VciEthernet::~VciEthernet	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	~VciEthernet();$/;"	p	class:soclib::caba::VciEthernet	access:public	signature:()
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(\/**\/)::VciEthernet(sc_module_name name, const MappingTable &mt,$/;"	f	namespace:soclib::caba	signature:( )
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(\/**\/)::~VciEthernet()$/;"	f	namespace:soclib::caba	signature:( )
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(bool)::on_read(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data)$/;"	f	namespace:soclib::caba	signature:(bool)
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(bool)::on_write(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be)$/;"	f	namespace:soclib::caba	signature:(bool)
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::cleanup_fifos()$/;"	f	namespace:soclib::caba	signature:(void)
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::genMoore()$/;"	f	namespace:soclib::caba	signature:(void)
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::read_finish( req_t *req )$/;"	f	namespace:soclib::caba	signature:(void)
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::transition()$/;"	f	namespace:soclib::caba	signature:(void)
+soclib::caba::tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::write_finish( req_t *req )$/;"	f	namespace:soclib::caba	signature:(void)
+status	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^        uint32_t status;$/;"	m	struct:soclib::caba::VciEthernet::fifo_entry_t	access:public
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(\/**\/)::VciEthernet(sc_module_name name, const MappingTable &mt,$/;"	f	namespace:soclib::caba	signature:( )
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(\/**\/)::~VciEthernet()$/;"	f	namespace:soclib::caba	signature:( )
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(bool)::on_read(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data)$/;"	f	namespace:soclib::caba	signature:(bool)
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(bool)::on_write(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be)$/;"	f	namespace:soclib::caba	signature:(bool)
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::cleanup_fifos()$/;"	f	namespace:soclib::caba	signature:(void)
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::genMoore()$/;"	f	namespace:soclib::caba	signature:(void)
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::read_finish( req_t *req )$/;"	f	namespace:soclib::caba	signature:(void)
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::transition()$/;"	f	namespace:soclib::caba	signature:(void)
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	/^    tmpl(void)::write_finish( req_t *req )$/;"	f	namespace:soclib::caba	signature:(void)
+tmpl	/home/lambert/Documents/stage/almos-tsarv5/tsar_almos_generic_xbar_mono/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	47;"	d	file:
+transition	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void transition();$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:()
+wr_req	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^            VciInitSimpleWriteReq<vci_param> *wr_req;$/;"	m	union:soclib::caba::VciEthernet::fifo_entry_t::__anon1	access:public
+write_finish	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^    void write_finish( req_t *req );$/;"	p	class:soclib::caba::VciEthernet	access:private	signature:( req_t *req )
+~VciEthernet	/home/lambert/Documents/Stage/almos-tsarv5/tsar_almos_generic_xbar_mono_vci_ethernet/vci_ethernet_tsar/caba/source/include/vci_ethernet.h	/^	~VciEthernet();$/;"	p	class:soclib::caba::VciEthernet	access:public	signature:()
Index: /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp
===================================================================
--- /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/vci_ethernet_tsar/caba/source/src/vci_ethernet.cpp	(revision 724)
@@ -0,0 +1,478 @@
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) Telecom ParisTech
+ *         Alexandre Becoulet <alexandre.becoulet@enst.fr>, 2012
+ *
+ * Maintainers: becoulet
+ */
+
+#include <unistd.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+
+#include <iostream>
+
+#include "register.h"
+#include "../include/vci_ethernet.h"
+#include "ethernet.h"
+
+#define CHUNCK_SIZE (64) // Width of a cache line
+#define CHUNCK_MASK ((~0ULL) << (6)) // MASK of a cache line
+
+//#define SOCLIB_MODULE_DEBUG
+
+namespace soclib { namespace caba {
+
+#define tmpl(t) template<typename vci_param> t VciEthernet<vci_param>
+
+    tmpl(bool)::on_write(int seg, typename vci_param::addr_t addr, typename vci_param::data_t data, int be)
+    {
+        int cell = (int)addr / vci_param::B;
+
+#ifdef SOCLIB_MODULE_DEBUG
+        std::cout 
+            << name()
+            << ": write config register "
+            << cell
+            << " with data 0x"
+            << std::hex << data
+            << std::dec 
+            << std::endl;
+#endif
+
+        fifo_entry_t *f;
+
+        switch ((enum SoclibEthernetRegisters)cell)
+        {
+            case ETHERNET_TX_SIZE:
+                _tx_size = std::min((int)data, VCI_ETHERNET_MAX_PKT_SIZE);
+                return true;
+
+            case ETHERNET_TX_FIFO:
+                if (_tx_count >= VCI_ETHERNET_FIFO_SIZE) {
+                    std::cout << name() << ": TX fifo full, can not push more packets!" << std::endl;
+                    return false;
+                }
+
+                f = _tx_fifo + (_tx_start + _tx_count++) % VCI_ETHERNET_FIFO_SIZE;
+                _tx_waiting++;
+
+                f->addr = data;
+                f->size = _tx_size;
+                f->status = 0;
+                f->data = (uint8_t*)malloc(_tx_size);
+                return true;
+
+            case ETHERNET_RX_SIZE:
+                _rx_size = std::min((int)data, VCI_ETHERNET_MAX_PKT_SIZE);
+                return true;
+
+            case ETHERNET_RX_FIFO:
+                if (_rx_count >= VCI_ETHERNET_FIFO_SIZE) {
+                    std::cout << name() << ": RX fifo full, can not push more packet buffers!" << std::endl;
+                    return false;
+                }
+
+                f = _rx_fifo + (_rx_start + _rx_count++) % VCI_ETHERNET_FIFO_SIZE;
+                _rx_free++;
+
+                f->addr = data;
+                f->size = _rx_size;
+                f->status = 0;
+                f->data = (uint8_t*)malloc(_rx_size);
+                return true;
+
+            case ETHERNET_CTRL:
+                if (data & ETHERNET_CTRL_RESET)
+                    _soft_reset = true;
+                if (data & ETHERNET_CTRL_TX_IRQ)
+                    _tx_irq_en = true;
+                else
+                    _tx_irq_en = false;
+                if (data & ETHERNET_CTRL_RX_IRQ) 
+                    _rx_irq_en = true;
+                else
+                    _rx_irq_en = false;
+                if (data & ETHERNET_CTRL_LINK_IRQ)
+                    _link_irq_en = true;
+                else
+                    _link_irq_en = false;
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    tmpl(bool)::on_read(int seg, typename vci_param::addr_t addr, typename vci_param::data_t &data)
+    {
+        int cell = (int)addr / vci_param::B;
+
+#ifdef SOCLIB_MODULE_DEBUG
+        std::cout 
+            << name()
+            << ": read config register "
+            << cell
+            << std::endl;
+#endif
+
+        fifo_entry_t *f;
+
+        switch ((enum SoclibEthernetRegisters)cell) {
+            case ETHERNET_TX_FIFO:
+                if (_tx_done == 0) {
+                    data = 0;
+                } else {
+                    f = _tx_fifo + _tx_start++ % VCI_ETHERNET_FIFO_SIZE;
+                    _tx_count--;
+                    _tx_done--;
+                    data = f->status;
+                    free(f->data);
+                }
+                return true;
+
+            case ETHERNET_RX_SIZE:
+                if (_rx_done == 0) {
+                    data = 0;
+                } else {
+                    f = _rx_fifo + _rx_start % VCI_ETHERNET_FIFO_SIZE;
+                    data = f->size;
+                }
+                return true;
+
+            case ETHERNET_RX_FIFO:
+                if (_rx_done == 0) {
+                    data = 0;
+                } else {
+                    f = _rx_fifo + _rx_start++ % VCI_ETHERNET_FIFO_SIZE;
+                    _rx_count--;
+                    _rx_done--;
+                    free(f->data);
+                    data = f->status;
+                }
+                return true;
+
+            case ETHERNET_STATUS:
+                data = 0;
+                _link_changed = false;
+                if (_link_up)
+                    data |= ETHERNET_ST_LINK_UP;
+                if (_rx_done > 0)
+                    data |= ETHERNET_ST_RX_DONE;
+                if (_tx_done > 0)
+                    data |= ETHERNET_ST_TX_DONE;
+                return true;
+
+            case ETHERNET_FIFO_SIZE:
+                data = VCI_ETHERNET_FIFO_SIZE;
+                return true;
+
+            case ETHERNET_MAC_LOW:
+                data = _mac[0] | (_mac[1] << 8) | (_mac[2] << 16) | (_mac[3] << 24);
+                return true;
+
+            case ETHERNET_MAC_HIGH:
+                data = _mac[4] | (_mac[5] << 8);
+                return true;
+
+            default:
+                return false;
+        }
+    }
+
+    tmpl(void)::write_finish( req_t *req )
+    {
+        fifo_entry_t *f = _rx_fifo + (_rx_start + _rx_count - _rx_free - 1) % VCI_ETHERNET_FIFO_SIZE;
+
+        assert(req == f->rd_req);
+        delete req;
+
+        if (req->failed()) {
+            std::cout << name() << ": RX dma write error for packet @" << f->addr << std::endl;
+            f->status = ETHERNET_RX_DMA_ERR;
+            _rx_done++;
+            _dma_busy = false;
+
+        } else if ((unsigned)f->dma_offset >= f->size) {
+#ifdef SOCLIB_MODULE_DEBUG
+            std::cout << name() << ": RX dma done for packet @" << f->addr << std::endl;
+#endif
+            f->status = ETHERNET_RX_DONE;
+            _rx_done++;
+            _dma_busy = false;
+
+        } else {
+            int chunck_size = std::min((unsigned)CHUNCK_SIZE, f->size - f->dma_offset);
+            f->wr_req = new VciInitSimpleWriteReq<vci_param>(f->addr + f->dma_offset, f->data + f->dma_offset, chunck_size);
+            f->dma_offset += chunck_size;
+            f->wr_req->setDone(this, ON_T(write_finish));
+            f->wr_req->setPacket(0x4);
+            m_vci_init_fsm.doReq(f->wr_req);
+        }
+    }
+
+    tmpl(void)::read_finish( req_t *req )
+    {
+        fifo_entry_t *f = _tx_fifo + (_tx_start + _tx_count - _tx_waiting - 1) % VCI_ETHERNET_FIFO_SIZE;
+
+        assert(req == f->rd_req);
+        delete req;
+
+        if (req->failed()) {
+            std::cout << name() << ": TX dma read error for packet @" << f->addr << std::endl;
+            f->status = ETHERNET_TX_DMA_ERR;
+            _tx_done++;
+            _dma_busy = false;
+
+        } else if ((unsigned)f->dma_offset >= f->size) {
+#ifdef SOCLIB_MODULE_DEBUG
+            std::cout << name() << ": TX dma done for packet @" << f->addr << std::endl;
+#endif
+            f->status = ETHERNET_TX_DONE;
+
+            if (!_link_up || ::write(_fd, f->data, f->size) != f->size) {
+                std::cout << name() << ": TX tap write error for packet @" << f->addr << std::endl;
+                f->status = ETHERNET_TX_PHY_ERR;
+                _link_check_counter = 1;
+            }
+
+            _tx_done++;
+            _dma_busy = false;
+
+        } else {
+            int chunck_size = std::min((unsigned)CHUNCK_SIZE, f->size - f->dma_offset);
+            f->rd_req = new VciInitSimpleReadReq<vci_param>(f->data + f->dma_offset, f->addr + f->dma_offset, chunck_size);
+            f->dma_offset += chunck_size;
+            f->rd_req->setDone(this, ON_T(read_finish));
+            m_vci_init_fsm.doReq(f->rd_req);
+        }
+    }
+
+    tmpl(void)::cleanup_fifos()
+    {
+        for (int i = 0; i < _rx_count; i++) {
+            fifo_entry_t *f = _rx_fifo + (_rx_start + i) % VCI_ETHERNET_FIFO_SIZE;
+            free(f->data);
+        }
+
+        for (int i = 0; i < _tx_count; i++) {
+            fifo_entry_t *f = _tx_fifo + (_tx_start + i) % VCI_ETHERNET_FIFO_SIZE;
+            free(f->data);
+        }
+    }
+
+    tmpl(void)::transition()
+    {
+        if (!p_resetn || _soft_reset) {
+            m_vci_target_fsm.reset();
+            m_vci_init_fsm.reset();
+            _soft_reset = false;
+
+            cleanup_fifos();
+
+            _rx_start = _rx_free = _rx_done = _rx_count = 0;
+            _tx_start = _tx_waiting = _tx_done = _tx_count = 0;
+            _rx_irq_en = _tx_irq_en = _link_irq_en = false;        
+            _link_check_counter = 1;
+            _link_changed = _link_up = false;
+            _dma_busy = false;
+            return;
+        }
+
+        if (_fd >= 0 && --_link_check_counter <= 0) {
+            _link_check_counter = 100000;
+
+            int sock = socket(AF_INET, SOCK_DGRAM, 0);
+
+            if (sock >= 0) {
+                if (ioctl(sock, SIOCGIFFLAGS, &_tap_ifr) < 0) {
+                    std::cout << name() << ": link status check error: " << _tap_ifr.ifr_flags << std::endl;
+                } else if (_link_up != !!(_tap_ifr.ifr_flags & IFF_UP)) {
+                    _link_up = !_link_up;
+                    _link_changed = true;
+#ifdef SOCLIB_MODULE_DEBUG
+                    std::cout << name() << ": link status changed to: " << (_link_up ? "up" : "down") << std::endl;
+#endif
+                }
+                close(sock);
+            }
+        }
+
+        if (!_dma_busy) {
+
+            if (_tx_waiting > 0) {
+
+                fifo_entry_t *f = _tx_fifo + (_tx_start + _tx_count - _tx_waiting--) % VCI_ETHERNET_FIFO_SIZE;
+
+                // start DMA read
+                int chunck_size = std::min((unsigned)CHUNCK_SIZE, f->size);
+                if ((f->addr & CHUNCK_MASK) != ((f->addr + chunck_size) & CHUNCK_MASK)) {
+                    chunck_size = ((f->addr & CHUNCK_MASK) + CHUNCK_SIZE) - f->addr;
+                }
+                f->rd_req = new VciInitSimpleReadReq<vci_param>(f->data, f->addr, chunck_size);
+                f->dma_offset = chunck_size;
+                f->rd_req->setDone(this, ON_T(read_finish));
+                m_vci_init_fsm.doReq(f->rd_req);
+                _dma_busy = true;
+
+#ifdef SOCLIB_MODULE_DEBUG
+                std::cout << name() << ": started TX dma read @" << f->addr << ", " << f->size << " bytes " << std::endl;
+#endif
+            } else if (_rx_free > 0 && _link_up) {
+
+                fifo_entry_t *f = _rx_fifo + (_rx_start + _rx_count - _rx_free) % VCI_ETHERNET_FIFO_SIZE;
+                int rd = ::read(_fd, f->data, f->size);
+
+                if (rd < 0 && errno != EAGAIN) {
+                    f->status = ETHERNET_RX_PHY_ERR;
+                    _rx_done++;
+                    std::cout << name() << ": tap read error on RX" << std::endl;
+                    _link_check_counter = 1;
+
+                }  else if (rd > 0) {
+                    if (_rx_free > 0) {
+                        f->size = rd;
+                        _rx_free--;
+
+                        // start DMA write
+                        int chunck_size = std::min((unsigned)CHUNCK_SIZE, f->size);
+                        if ((f->addr & CHUNCK_MASK) != ((f->addr + chunck_size) & CHUNCK_MASK)) {
+                            chunck_size = ((f->addr & CHUNCK_MASK) + CHUNCK_SIZE) - f->addr;
+                        }
+                        f->wr_req = new VciInitSimpleWriteReq<vci_param>(f->addr, f->data, chunck_size);
+                        f->dma_offset = chunck_size;
+                        f->wr_req->setDone(this, ON_T(write_finish));
+                        f->wr_req->setPacket(0x4);
+                        m_vci_init_fsm.doReq(f->wr_req);
+                        _dma_busy = true;
+
+#ifdef SOCLIB_MODULE_DEBUG
+                        std::cout << name() << ": started RX dma write @" << f->addr << ", " << f->size << " bytes " << std::endl;
+#endif
+                    }
+                    else {
+                        std::cout << name() << ": No rx buffer free so paquet is dropped" << std::endl;
+                    }
+                }
+            }
+        }
+
+        m_vci_target_fsm.transition();
+        m_vci_init_fsm.transition();
+    }
+
+    tmpl(void)::genMoore()
+    {
+        m_vci_target_fsm.genMoore();
+        m_vci_init_fsm.genMoore();
+
+        p_irq = (_rx_irq_en && _rx_done > 0) || (_tx_irq_en && _tx_done > 0) || (_link_changed && _link_irq_en);
+    }
+
+    tmpl(/**/)::VciEthernet(sc_module_name name, const MappingTable &mt,
+            const IntTab &srcid, const IntTab &tgtid,
+            const std::string &if_name)
+        : caba::BaseModule(name),
+        m_vci_target_fsm(p_vci_target, mt.getSegmentList(tgtid)),
+        m_vci_init_fsm(p_vci_initiator, mt.indexForId(srcid)),
+        p_clk("clk"),
+        p_resetn("resetn"),
+        p_vci_target("vci_target"),
+        p_vci_initiator("vci_initiator"),
+        p_irq("irq")
+    {
+        m_vci_target_fsm.on_read_write(on_read, on_write);
+        _fd = open("/dev/net/tun", O_RDWR);
+
+        if ( _fd < 0 ) {
+            std::cerr << name << ": Unable to open /dev/net/tun" << std::endl;
+        } else {
+            int flags = fcntl(_fd, F_GETFL, 0);
+            fcntl(_fd, F_SETFL, flags | O_NONBLOCK);
+
+            memset((void*)&_tap_ifr, 0, sizeof(_tap_ifr));
+            _tap_ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
+            strncpy(_tap_ifr.ifr_name, if_name.c_str(), IFNAMSIZ);
+
+
+            if (ioctl(_fd, TUNSETIFF, (void *) &_tap_ifr) < 0) {
+                close(_fd);
+                _fd = -1;
+                std::cerr << name << ": Unable to setup tap interface, check privileges."
+#ifdef __linux__
+                    << " (try: sudo setcap cap_net_admin=eip ./system.x)"
+#endif
+                    << std::endl;
+            }
+            flags = 2;
+            if (ioctl(_fd, TUNSETDEBUG, (void *) &flags) < 0) {
+                std::cerr << "Warning couldn't use debug option for TAP" << std::endl;
+            }
+
+        /*    ioctl(_fd, SIOCGIFHWADDR, &_tap_ifr);
+            memcpy(_mac, _tap_ifr.ifr_hwaddr.sa_data, 6);*/
+              srand(time(0) * getpid());
+                _mac[0] = 0x00;
+                _mac[1] = 0x16;
+                _mac[2] = 0x3e;
+                _mac[3] = rand();
+                _mac[4] = rand();
+                _mac[5] = rand();
+        }
+
+        _link_check_counter = 1;
+        _rx_start = _rx_free = _rx_done = _rx_count = 0;
+        _tx_start = _tx_waiting = _tx_done = _tx_count = 0;
+        _dma_busy = false;
+        _link_up = false;
+
+        SC_METHOD(transition);
+        dont_initialize();
+        sensitive << p_clk.pos();
+
+        SC_METHOD(genMoore);
+        dont_initialize();
+        sensitive << p_clk.neg();
+    }
+
+    tmpl(/**/)::~VciEthernet()
+    {
+        cleanup_fifos();
+
+        if (_fd >= 0)
+            close(_fd);
+    }
+
+}}
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_ethernet_tsar/doc/README
===================================================================
--- /branches/fault_tolerance/modules/vci_ethernet_tsar/doc/README	(revision 724)
+++ /branches/fault_tolerance/modules/vci_ethernet_tsar/doc/README	(revision 724)
@@ -0,0 +1,10 @@
+This files describes the differences between vci_ethernet_tsar and
+vci_ethernet
+
+* Added f->wr_req->setPacket(0x4); for every Write command from vci_ethernet in
+  order to respect overloading of vci CMD in pktid of Tsar architecture
+
+* Added overlapping detection in read and write vci CMD. First, vci CMD is now
+  made at maximum with the boundary of a cache line (64 alignement)
+
+* Added set and reset for IRQ lines enable
Index: /branches/fault_tolerance/modules/vci_ethernet_tsar/include/soclib/ethernet.h
===================================================================
--- /branches/fault_tolerance/modules/vci_ethernet_tsar/include/soclib/ethernet.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_ethernet_tsar/include/soclib/ethernet.h	(revision 724)
@@ -0,0 +1,83 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) Telecom ParisTech
+ *         Alexandre Becoulet <alexandre.becoulet@enst.fr>, 2012
+ *
+ * Maintainers: becoulet
+ */
+
+#ifndef ETHERNET_REGS_H
+#define ETHERNET_REGS_H
+
+enum SoclibEthernetRegisters {
+    ETHERNET_TX_SIZE  = 0,       /*< on write: set size of packet to send for next adress push */
+    ETHERNET_TX_FIFO  = 1,       /*< on write: push address and size of packet to send on tx fifo,
+                                     on read:  pop status of sent packet from tx fifo. 0 if empty */
+    ETHERNET_RX_SIZE  = 2,       /*< on write: set size of rx buffer for next adress push,
+                                     on read:  get size of last rx packet, 0 if empty. */
+    ETHERNET_RX_FIFO  = 3,       /*< on write: push address and size of buffer on rx fifo,
+                                     on read:  pop status of last rx packet. 0 if empty */
+    ETHERNET_STATUS   = 4,       /*< on read:  contains device status flags */
+    ETHERNET_CTRL     = 4,       /*< on write: device control actions */
+    ETHERNET_FIFO_SIZE = 5,      /*< contains size of TX & RX FIFOs */
+    ETHERNET_MAC_LOW   = 6,      /*< contains mac address bytes 0, 1, 2 and 3 */
+    ETHERNET_MAC_HIGH  = 7,      /*< contains mac address bytes 4 and 5 */
+};
+
+enum SoclibEthernetRxStatus {
+	ETHERNET_RX_EMPTY = 0,
+	ETHERNET_RX_DONE = 1,
+	ETHERNET_RX_DMA_ERR = 2,
+	ETHERNET_RX_PHY_ERR = 3,
+};
+
+enum SoclibEthernetTxStatus {
+	ETHERNET_TX_EMPTY = 0,
+	ETHERNET_TX_DONE = 1,
+	ETHERNET_TX_DMA_ERR = 2,
+	ETHERNET_TX_PHY_ERR = 3,
+};
+
+enum SoclibEthernetStatus {
+	ETHERNET_ST_LINK_UP = 1,
+	ETHERNET_ST_TX_DONE = 2,     /*< The ETHERNET_TX_FIFO register content is valid */
+	ETHERNET_ST_RX_DONE = 4,     /*< The ETHERNET_RX_FIFO register content is valid */
+};
+
+enum SoclibEthernetCtrl {
+	ETHERNET_CTRL_RESET  = 1,     //< fifos become empty, disable interrupts
+	ETHERNET_CTRL_TX_IRQ = 2,     //< enable TX irq when written to 1
+	ETHERNET_CTRL_RX_IRQ = 4,     //< enable RX irq when written to 1
+	ETHERNET_CTRL_LINK_IRQ = 8,   //< enable link status change irq when written to 1
+};
+
+#endif /* ETHERNET_REGS_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_io_bridge/caba/metadata/vci_io_bridge.sd
===================================================================
--- /branches/fault_tolerance/modules/vci_io_bridge/caba/metadata/vci_io_bridge.sd	(revision 724)
+++ /branches/fault_tolerance/modules/vci_io_bridge/caba/metadata/vci_io_bridge.sd	(revision 724)
@@ -0,0 +1,66 @@
+
+# -*- python -*-
+
+__id__ = "$Id: vci_io_bridge.sd 20 2012-6-11 $"
+
+Module('caba:vci_io_bridge',
+    classname = 'soclib::caba::VciIoBridge',
+
+    tmpl_parameters = [
+        parameter.Module('vci_param_int',
+                          default = 'caba:vci_param',
+                          cell_size = parameter.Reference('iob_cell_size_int')),
+        parameter.Module('vci_param_ext',
+                          default = 'caba:vci_param',
+                          cell_size = parameter.Reference('iob_cell_size_ext')),
+    ],
+
+    header_files =         [
+        '../source/include/vci_io_bridge.h',
+        '../source/include/transaction_tab_io.h'
+    ],
+
+    implementation_files = [ '../source/src/vci_io_bridge.cpp' ],
+
+    uses = [ Uses('caba:base_module'),
+        Uses('common:mapping_table'),
+        Uses('caba:generic_fifo'),
+        Uses('caba:generic_tlb',
+              addr_t = parameter.StringExt('sc_dt::sc_uint<%d> ',
+              parameter.Reference('addr_size'))),
+        Uses('common:address_decoding_table',
+              input_t  = 'unsigned long',
+              output_t = 'bool'),
+        Uses('common:address_decoding_table',
+              input_t  = 'unsigned long',
+              output_t = 'int'),
+    ],
+
+    ports = [
+        Port('caba:vci_initiator', 'p_vci_ini_ram'),
+        Port('caba:vci_target',    'p_vci_tgt_iox'),
+        Port('caba:vci_initiator', 'p_vci_ini_iox'),
+        Port('caba:vci_target',    'p_vci_tgt_int'),
+        Port('caba:vci_initiator', 'p_vci_ini_int'),
+        Port('caba:bit_in','p_irq', 32),
+        Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+        Port('caba:clock_in', 'p_clk', auto = 'clock'),
+    ],
+
+    instance_parameters = [
+        parameter.Module('mt_ext', 'common:mapping_table'),
+        parameter.Module('mt_int', 'common:mapping_table'),
+        parameter.Module('mt_iox', 'common:mapping_table'),
+        parameter.IntTab('int_tgtid'),
+        parameter.IntTab('int_srcid'),
+        parameter.IntTab('iox_tgtid'),
+        parameter.IntTab('iox_srcid'),
+        parameter.IntTab('ext_srcid'),
+        parameter.Int('dcache_words'),
+        parameter.Int('iotlb_ways'),
+        parameter.Int('iotlb_sets'),
+        parameter.Int('debug_start_cycle'),
+        parameter.Bool('debug_ok'),
+    ],
+)
+
Index: /branches/fault_tolerance/modules/vci_io_bridge/caba/source/include/transaction_tab_io.h
===================================================================
--- /branches/fault_tolerance/modules/vci_io_bridge/caba/source/include/transaction_tab_io.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_io_bridge/caba/source/include/transaction_tab_io.h	(revision 724)
@@ -0,0 +1,227 @@
+#ifndef IOB_TRANSACTION_H_
+#define IOB_TRANSACTION_H_
+ 
+#include <inttypes.h>
+#include <systemc>
+#include <cassert>
+#include "arithmetics.h"
+
+#define DEBUG_IOB_TRANSACTION 0
+
+////////////////////////////////////////////////////////////////////////
+//                  A transaction tab entry         
+////////////////////////////////////////////////////////////////////////
+
+class TransactionTabIOEntry {
+  typedef uint32_t size_t;
+
+ public:
+  bool   valid;          // valid entry
+  size_t srcid;          // initiator requesting the transaction
+  size_t trdid;          // thread ID of transaction
+
+  /////////////////////////////////////////////////////////////////////
+  // The init() function initializes the entry 
+  /////////////////////////////////////////////////////////////////////
+  void init()
+  {
+    valid = false;
+  }
+
+  ////////////////////////////////////////////////////////////////////
+  // The copy() function copies an existing entry
+  // Its arguments are :
+  // - source : the transaction tab entry to copy
+  ////////////////////////////////////////////////////////////////////
+  void copy(const TransactionTabIOEntry &source)
+  {
+    valid = source.valid;
+    srcid = source.srcid;
+    trdid = source.trdid;
+  }
+
+  ////////////////////////////////////////////////////////////////////
+  // The print() function prints the entry 
+  ////////////////////////////////////////////////////////////////////
+  void print(){
+    std::cout << "   valid = " << valid << std::hex
+              << " / srcid = " << srcid
+              << " / trdid = " << trdid << std::dec
+              << std::endl;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  //        Constructors
+  /////////////////////////////////////////////////////////////////////
+
+  TransactionTabIOEntry()
+  {
+    valid = false;
+  }
+
+  TransactionTabIOEntry(const TransactionTabIOEntry &source){
+    valid = source.valid;
+    srcid = source.srcid;
+    trdid = source.trdid;
+  }
+
+}; // end class TransactionTabIOEntry
+
+////////////////////////////////////////////////////////////////////////
+//                  The transaction tab                              
+////////////////////////////////////////////////////////////////////////
+class TransactionTabIO{
+ private:
+  const size_t size_tab;          // The size of the tab
+
+ public:
+  TransactionTabIOEntry *tab;     // The transaction tab
+
+  ////////////////////////////////////////////////////////////////////
+  //        Constructors
+  ////////////////////////////////////////////////////////////////////
+  TransactionTabIO(size_t n_entries) : size_tab(n_entries)
+  {
+    tab = new TransactionTabIOEntry[size_tab];
+  }
+
+  ~TransactionTabIO()
+  {
+    delete [] tab;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The size() function returns the size of the tab
+  /////////////////////////////////////////////////////////////////////
+  const size_t& size()
+  {
+    return size_tab;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The init() function initializes the transaction tab entries
+  /////////////////////////////////////////////////////////////////////
+  void init()
+  {
+    for ( size_t index = 0; index < size_tab; index++)
+    {
+      tab[index].init();
+    }
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The print() function prints a transaction tab entry
+  // Arguments :
+  // - index : the index of the entry to print
+  /////////////////////////////////////////////////////////////////////
+  void print(const size_t index)
+  {
+    assert( (index < size_tab) && "Invalid Transaction Tab Entry");
+    tab[index].print();
+    return;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The printTrace() function prints all transaction tab entries
+  /////////////////////////////////////////////////////////////////////
+  void printTrace()
+  {
+    for (size_t index = 0; index < size_tab; index++)
+    {
+      tab[index].print();
+    }
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The read() function returns a transaction tab entry.
+  // Arguments :
+  // - index : the index of the entry to read
+  /////////////////////////////////////////////////////////////////////
+  TransactionTabIOEntry& read(const size_t index)
+  {
+    assert( (index < size_tab) && "Invalid Transaction Tab Entry");
+    return tab[index];
+  }
+  
+  /////////////////////////////////////////////////////////////////////
+  // The readSrcid() function returns the srcid field of a transaction tab entry.
+  // Arguments :
+  // - index : the index of the entry to read
+  /////////////////////////////////////////////////////////////////////
+  size_t readSrcid(const size_t index)
+  {
+    assert( (index < size_tab) && "Invalid Transaction Tab Entry");
+    return tab[index].srcid;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The readTrdid() function returns the trdid field of a transaction tab entry.
+  // Arguments :
+  // - index : the index of the entry to read
+  /////////////////////////////////////////////////////////////////////
+  size_t readTrdid(const size_t index)
+  {
+    assert( (index < size_tab) && "Invalid Transaction Tab Entry");
+    return tab[index].trdid;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The full() function returns the state of the transaction tab
+  // Arguments :
+  // - index : (return argument) the index of an empty entry 
+  // The function returns true if the transaction tab is full
+  /////////////////////////////////////////////////////////////////////
+  bool full(size_t &index)
+  {
+    for(size_t i=0; i<size_tab; i++)
+    {
+      if(!tab[i].valid)
+      {
+        index = i;
+        return false;   
+      }
+    }
+    return true;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The set() function registers a transaction (read or write)
+  // to the XRAM in the transaction tab.
+  // Arguments :
+  // - index : index in the transaction tab
+  // - srcid : srcid of the initiator that caused the transaction
+  // - trdid : trdid of the initiator that caused the transaction
+  /////////////////////////////////////////////////////////////////////
+  void set(const size_t index,
+           const size_t srcid,
+           const size_t trdid) 
+  {
+    assert( (index < size_tab) && "Invalid Transaction Tab Entry");
+    tab[index].valid = true;
+    tab[index].srcid = srcid;
+    tab[index].trdid = trdid;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The erase() function erases an entry in the transaction tab.
+  // Arguments :
+  // - index : the index of the request in the transaction tab
+  /////////////////////////////////////////////////////////////////////
+  void erase(const size_t index)
+  {
+    assert( (index < size_tab) && "Invalid Transaction Tab Entry");
+    tab[index].valid = false;
+  }
+}; // end class TransactionTabIO
+
+#endif
+
+// Local Variables:
+// tab-width: 2
+// c-basic-offset: 2
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=2:tabstop=2:softtabstop=2
+
Index: /branches/fault_tolerance/modules/vci_io_bridge/caba/source/include/vci_io_bridge.h
===================================================================
--- /branches/fault_tolerance/modules/vci_io_bridge/caba/source/include/vci_io_bridge.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_io_bridge/caba/source/include/vci_io_bridge.h	(revision 724)
@@ -0,0 +1,526 @@
+/* -*- c++ -*-
+ * File : vci_io_bridge.h
+ * Copyright (c) UPMC, Lip6, SoC
+ * Date : 16/04/2012
+ * Authors: Cassio Fraga, Alain Greiner
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ */
+/////////////////////////////////////////////////////////////////////////////////
+// This TSAR component is a bridge to access external peripherals
+// connected to an external I/O bus (such as Hypertransport or PCIe).
+// It connects three VCI networks:
+//
+// - INT network : to receive both configuration requests from processors
+//                 or software driven data access to peripherals.
+// - RAM network : to send DMA transactions initiated by peripherals
+//                 directly to the RAM (or L3 caches).
+// - IOX network : to receive DMA transactions from peripherals, or to send
+//                 configuration or data transactions to peripherals.
+//
+// It supports two types of transactions from peripherals:
+//   - DMA transactions to the RAM network,
+//   - WTI transactions to the INT network.
+// Regarding transactions initiated by external peripherals, it provides
+// an - optional - IOMMU service : the 32 bits virtual address is translated
+// to a (up to) 40 bits physical address by a standard SoCLib generic TLB.
+// In case of TLB MISS, the DMA transaction is stalled until the TLB is updated.
+// In case of page fault or read_only violation (illegal access), a VCI error
+// is returned to the faulty peripheral, and a IOMMU WTI is sent.
+/////////////////////////////////////////////////////////////////////////////////
+//   General Constraints:
+//
+// - All VCI fields have the same widths on the RAM and IOX networks,
+//   and the VCI DATA field is 64 bits.
+// - Only the VCI DATA field differ between INT and IOX/RAM networks,
+//   as the VCI DATA field is 32 bits.
+// - The common VCI ADDRESS width cannot be larger than 64 bits.
+// - All VCI transactions must be included in a single cache line.
+// - Page Tables must have the format required by the SoCLib generic_tlb.
+// - IO's segments must be the same in INT and IOX networks
+// - Write operations on IOMMU configuration registers (PTPR, ACTIVE) are
+//   delayed until DMA_TLB FSM is IDLE. It should, preferably, be done before
+//   starting any transfers. Pseudo register INVAL may be modified any time.
+////////////////////////////////////////////////////////////////////////////////
+
+
+///////TODO List///////////////////////////////////////////////////////////////
+// - Ne pas garder tous les champs WRITE CMD dans les FIFO a chaque flit
+//   (seulement 'data' et 'be')
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef SOCLIB_CABA_VCI_IO_BRIDGE_H
+#define SOCLIB_CABA_VCI_IO_BRIDGE_H
+
+#include <inttypes.h>
+#include <systemc>
+#include "caba_base_module.h"
+#include "generic_fifo.h"
+#include "generic_tlb.h"
+#include "mapping_table.h"
+#include "address_decoding_table.h"
+#include "address_masking_table.h"
+#include "static_assert.h"
+#include "vci_initiator.h"
+#include "vci_target.h"
+#include "transaction_tab_io.h"
+#include "../../../include/soclib/io_bridge.h"
+
+namespace soclib {
+namespace caba {
+
+using namespace soclib::common;
+
+///////////////////////////////////////////////////////////////////////////////////
+template<typename vci_param_int,
+         typename vci_param_ext>
+class VciIoBridge
+///////////////////////////////////////////////////////////////////////////////////
+    : public soclib::caba::BaseModule
+{
+    // Data and be fields have different widths on INT and EXT/IOC networks
+    typedef typename vci_param_ext::data_t          ext_data_t;
+    typedef typename vci_param_int::data_t          int_data_t;
+    typedef typename vci_param_ext::be_t            ext_be_t;
+    typedef typename vci_param_int::be_t            int_be_t;
+
+    // Other fields must be equal
+    typedef typename vci_param_int::fast_addr_t     vci_addr_t;
+    typedef typename vci_param_int::srcid_t         vci_srcid_t;
+    typedef typename vci_param_int::trdid_t         vci_trdid_t;
+    typedef typename vci_param_int::pktid_t         vci_pktid_t;
+    typedef typename vci_param_int::plen_t          vci_plen_t;
+    typedef typename vci_param_int::cmd_t           vci_cmd_t;
+    typedef typename vci_param_int::contig_t        vci_contig_t;
+    typedef typename vci_param_int::eop_t           vci_eop_t;
+    typedef typename vci_param_int::const_t         vci_cons_t;
+    typedef typename vci_param_int::wrap_t          vci_wrap_t;
+    typedef typename vci_param_int::clen_t          vci_clen_t;
+    typedef typename vci_param_int::cfixed_t        vci_cfixed_t;
+    typedef typename vci_param_int::rerror_t        vci_rerror_t;
+
+    enum
+    {
+        CACHE_LINE_MASK    = 0xFFFFFFFFC0LL,
+        PPN1_MASK          = 0x0007FFFF,
+        PPN2_MASK          = 0x0FFFFFFF,
+        K_PAGE_OFFSET_MASK = 0x00000FFF,
+        M_PAGE_OFFSET_MASK = 0x001FFFFF,
+        PTE2_LINE_OFFSET   = 0x00007000, // bits 12,13,14.
+        PTE1_LINE_OFFSET   = 0x01E00000, // bits 21,22,23,24
+    };
+
+    // States for DMA_CMD FSM (from IOX to RAM)
+    enum dma_cmd_fsm_state
+    {
+        DMA_CMD_IDLE,
+        DMA_CMD_DMA_REQ,
+        DMA_CMD_WTI_IOX_REQ,
+        DMA_CMD_ERR_WAIT_EOP,
+        DMA_CMD_ERR_WTI_REQ,
+        DMA_CMD_ERR_RSP_REQ,
+        DMA_CMD_TLB_MISS_WAIT,
+    };
+
+    // States for DMA_RSP FSM
+    enum dma_rsp_fsm_state
+    {
+        DMA_RSP_IDLE_DMA,
+        DMA_RSP_IDLE_WTI,
+        DMA_RSP_IDLE_ERR,
+        DMA_RSP_PUT_DMA,
+        DMA_RSP_PUT_WTI,
+        DMA_RSP_PUT_ERR,
+    };
+
+    // States for TLB_MISS FSM
+    enum dma_tlb_fsm_state
+    {
+        TLB_IDLE,
+        TLB_MISS,
+        TLB_PTE1_GET,
+        TLB_PTE1_SELECT,
+        TLB_PTE1_UPDT,
+        TLB_PTE2_GET,
+        TLB_PTE2_SELECT,
+        TLB_PTE2_UPDT,
+        TLB_WAIT,
+        TLB_RETURN,
+        TLB_INVAL_CHECK,
+    };
+
+    // States for CONFIG_CMD FSM
+    enum config_cmd_fsm_state
+    {
+        CONFIG_CMD_IDLE,
+        CONFIG_CMD_WAIT,
+        CONFIG_CMD_HI,
+        CONFIG_CMD_LO,
+        CONFIG_CMD_PUT,
+        CONFIG_CMD_RSP,
+    };
+
+    // states for CONFIG_RSP FSM
+    enum config_rsp_fsm_state
+    {
+        CONFIG_RSP_IDLE_IOX,
+        CONFIG_RSP_IDLE_LOC,
+        CONFIG_RSP_PUT_LO,
+        CONFIG_RSP_PUT_HI,
+        CONFIG_RSP_PUT_UNC,
+        CONFIG_RSP_PUT_LOC,
+
+    };
+
+    // States for MISS_WTI_RSP FSM
+    enum miss_wti_rsp_state
+    {
+        MISS_WTI_RSP_IDLE,
+        MISS_WTI_RSP_WTI_IOX,
+        MISS_WTI_RSP_WTI_MMU,
+        MISS_WTI_RSP_MISS,
+    };
+
+    // PKTID values for TLB MISS and WTI transactions
+    enum pktid_values_e
+    {
+        PKTID_MISS    = 0x0,  // TSAR code for read data uncached
+        PKTID_WTI_IOX = 0x4,  // TSAR code for write
+        PKTID_WTI_MMU = 0xC,  // TSAR code for write
+    };
+
+    // Miss types for iotlb
+    enum tlb_miss_type_e
+    {
+        PTE1_MISS,
+        PTE2_MISS,
+    };
+
+public:
+    sc_in<bool>                               p_clk;
+    sc_in<bool>                               p_resetn;
+
+    soclib::caba::VciInitiator<vci_param_ext> p_vci_ini_ram;
+
+    soclib::caba::VciTarget<vci_param_ext>    p_vci_tgt_iox;
+    soclib::caba::VciInitiator<vci_param_ext> p_vci_ini_iox;
+
+    soclib::caba::VciTarget<vci_param_int>    p_vci_tgt_int;
+    soclib::caba::VciInitiator<vci_param_int> p_vci_ini_int;
+
+private:
+    const size_t                              m_words;
+
+    // INT & IOX Networks
+    std::list<soclib::common::Segment>        m_int_seglist;
+    const vci_srcid_t                         m_int_srcid;      // SRCID on INT network
+    std::list<soclib::common::Segment>        m_iox_seglist;
+    const vci_srcid_t                         m_iox_srcid;      // SRCID on IOX network
+
+    // INT & RAM srcid masking table
+    const AddressMaskingTable<uint32_t>       m_srcid_gid_mask;
+    const AddressMaskingTable<uint32_t>       m_srcid_lid_mask;
+
+    // TLB parameters
+    const size_t                              m_iotlb_ways;
+    const size_t                              m_iotlb_sets;
+
+    // debug variables
+    uint32_t                                  m_debug_start_cycle;
+    bool                                      m_debug_ok;
+    bool                                      m_debug_activated;
+
+    ///////////////////////////////
+    // MEMORY MAPPED REGISTERS
+    ///////////////////////////////
+    sc_signal<uint32_t>         r_iommu_ptpr;           // page table pointer
+    sc_signal<bool>             r_iommu_active;         // iotlb mode
+    sc_signal<uint32_t>         r_iommu_bvar;           // bad vaddr
+    sc_signal<uint32_t>         r_iommu_etr;            // error type
+    sc_signal<uint32_t>         r_iommu_bad_id;         // faulty srcid
+    sc_signal<bool>             r_iommu_wti_enable;     // enable IOB WTI
+    sc_signal<uint32_t>         r_iommu_wti_addr_lo;    // IOMMU WTI paddr (32 lsb)
+    sc_signal<uint32_t>         r_iommu_wti_addr_hi;    // IOMMU WTI paddr (32 msb)
+
+    ///////////////////////////////////
+    // DMA_CMD FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>              r_dma_cmd_fsm;
+    sc_signal<vci_addr_t>       r_dma_cmd_paddr;                // output paddr
+
+    sc_signal<bool>             r_dma_cmd_to_miss_wti_cmd_req;
+    sc_signal<vci_addr_t>       r_dma_cmd_to_miss_wti_cmd_addr;
+    sc_signal<vci_cmd_t>        r_dma_cmd_to_miss_wti_cmd_cmd;
+    sc_signal<vci_srcid_t>      r_dma_cmd_to_miss_wti_cmd_srcid;
+    sc_signal<vci_trdid_t>      r_dma_cmd_to_miss_wti_cmd_trdid;
+    sc_signal<vci_trdid_t>      r_dma_cmd_to_miss_wti_cmd_pktid;
+    sc_signal<int_data_t>       r_dma_cmd_to_miss_wti_cmd_wdata;
+
+    sc_signal<bool>             r_dma_cmd_to_dma_rsp_req;
+    sc_signal<vci_srcid_t>      r_dma_cmd_to_dma_rsp_rsrcid;
+    sc_signal<vci_trdid_t>      r_dma_cmd_to_dma_rsp_rtrdid;
+    sc_signal<vci_pktid_t>      r_dma_cmd_to_dma_rsp_rpktid;
+    sc_signal<vci_rerror_t>     r_dma_cmd_to_dma_rsp_rerror;
+    sc_signal<ext_data_t>       r_dma_cmd_to_dma_rsp_rdata;
+
+    sc_signal<bool>             r_dma_cmd_to_tlb_req;
+    sc_signal<uint32_t>         r_dma_cmd_to_tlb_vaddr;         // input vaddr
+
+    ///////////////////////////////////
+    // DMA_RSP FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>              r_dma_rsp_fsm;
+
+    ///////////////////////////////////
+    // CONFIG_CMD FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>              r_config_cmd_fsm;
+
+    sc_signal<bool>             r_config_cmd_to_tlb_req;
+    sc_signal<uint32_t>         r_config_cmd_to_tlb_vaddr;
+
+    sc_signal<bool>             r_config_cmd_to_config_rsp_req;
+    sc_signal<bool>             r_config_cmd_to_config_rsp_rerror;
+    sc_signal<int_data_t>       r_config_cmd_to_config_rsp_rdata;
+    sc_signal<vci_srcid_t>      r_config_cmd_to_config_rsp_rsrcid;
+    sc_signal<vci_trdid_t>      r_config_cmd_to_config_rsp_rtrdid;
+    sc_signal<vci_pktid_t>      r_config_cmd_to_config_rsp_rpktid;
+
+    sc_signal<ext_data_t>       r_config_cmd_wdata;
+    sc_signal<ext_be_t>         r_config_cmd_be;
+    sc_signal<vci_plen_t>       r_config_cmd_cmd;
+    sc_signal<vci_addr_t>       r_config_cmd_address;
+    sc_signal<vci_srcid_t>      r_config_cmd_srcid;
+    sc_signal<vci_trdid_t>      r_config_cmd_trdid;
+    sc_signal<vci_pktid_t>      r_config_cmd_pktid;
+    sc_signal<vci_plen_t>       r_config_cmd_plen;
+    sc_signal<vci_clen_t>       r_config_cmd_clen;
+    sc_signal<vci_cons_t>       r_config_cmd_cons;
+    sc_signal<vci_contig_t>     r_config_cmd_contig;
+    sc_signal<vci_cfixed_t>     r_config_cmd_cfixed;
+    sc_signal<vci_wrap_t>       r_config_cmd_wrap;
+    sc_signal<vci_eop_t>        r_config_cmd_eop;
+
+    TransactionTabIO            m_iox_transaction_tab;
+
+    ///////////////////////////////////
+    // CONFIG_RSP FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>              r_config_rsp_fsm;
+    sc_signal<vci_srcid_t>      r_config_rsp_rsrcid;
+    sc_signal<vci_trdid_t>      r_config_rsp_rtrdid;
+
+    ///////////////////////////////////
+    // TLB FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>              r_tlb_fsm;                  // state register
+    sc_signal<bool>             r_waiting_transaction;      // Flag for returning from
+    sc_signal<int>              r_tlb_miss_type;
+    sc_signal<bool>             r_tlb_miss_error;
+
+    sc_signal<vci_addr_t>       r_tlb_paddr;                // physical address of pte
+    sc_signal<uint32_t>         r_tlb_pte_flags;            // pte1 or first word of pte2
+    sc_signal<uint32_t>         r_tlb_pte_ppn;              // second word of pte2
+    sc_signal<size_t>           r_tlb_way;                  // selected way in tlb
+    sc_signal<size_t>           r_tlb_set;                  // selected set in tlb
+
+    uint32_t*                   r_tlb_buf_data;             // prefetch buffer for PTEs
+    sc_signal<bool>             r_tlb_buf_valid;            // one valit flag for all PTEs
+    sc_signal<vci_addr_t>       r_tlb_buf_tag;              // cache line number
+    sc_signal<vci_addr_t>       r_tlb_buf_vaddr;            // vaddr for first PTE
+    sc_signal<bool>             r_tlb_buf_big_page;         // ???
+
+    sc_signal<bool>             r_tlb_to_miss_wti_cmd_req;
+
+    ///////////////////////////////////
+    // MISS_WTI_RSP FSM REGISTERS
+    ///////////////////////////////////
+    sc_signal<int>              r_miss_wti_rsp_fsm;
+    sc_signal<bool>             r_miss_wti_rsp_error_wti;   // VCI error on WTI
+    sc_signal<bool>             r_miss_wti_rsp_error_miss;  // VCI error on MISS
+    sc_signal<size_t>           r_miss_wti_rsp_count;       // flits counter
+
+    sc_signal<bool>             r_miss_wti_rsp_to_dma_rsp_req;
+    sc_signal<vci_rerror_t>     r_miss_wti_rsp_to_dma_rsp_rerror;
+    sc_signal<vci_srcid_t>      r_miss_wti_rsp_to_dma_rsp_rsrcid;
+    sc_signal<vci_trdid_t>      r_miss_wti_rsp_to_dma_rsp_rtrdid;
+    sc_signal<vci_pktid_t>      r_miss_wti_rsp_to_dma_rsp_rpktid;
+
+
+    /////////////////////////////////////////////////////
+    //  ALLOCATORS for CONFIG_RSP fifo & DMA_RSP fifo
+    /////////////////////////////////////////////////////
+    sc_signal<bool>             r_alloc_fifo_config_rsp_local;
+
+
+    //////////////////////////////////////////////////////////////////
+    // IOTLB
+    //////////////////////////////////////////////////////////////////
+    GenericTlb<vci_addr_t>      r_iotlb;
+
+
+    /////////////////////////
+    // FIFOs
+    /////////////////////////
+
+    // ouput FIFO to VCI INI port on RAM network (VCI command)
+    GenericFifo<vci_addr_t>     m_dma_cmd_addr_fifo;
+    GenericFifo<vci_srcid_t>    m_dma_cmd_srcid_fifo;
+    GenericFifo<vci_trdid_t>    m_dma_cmd_trdid_fifo;
+    GenericFifo<vci_pktid_t>    m_dma_cmd_pktid_fifo;
+    GenericFifo<ext_be_t>       m_dma_cmd_be_fifo;
+    GenericFifo<vci_cmd_t>      m_dma_cmd_cmd_fifo;
+    GenericFifo<vci_contig_t>   m_dma_cmd_contig_fifo;
+    GenericFifo<ext_data_t>     m_dma_cmd_data_fifo;
+    GenericFifo<vci_eop_t>      m_dma_cmd_eop_fifo;
+    GenericFifo<vci_cons_t>     m_dma_cmd_cons_fifo;
+    GenericFifo<vci_plen_t>     m_dma_cmd_plen_fifo;
+    GenericFifo<vci_wrap_t>     m_dma_cmd_wrap_fifo;
+    GenericFifo<vci_cfixed_t>   m_dma_cmd_cfixed_fifo;
+    GenericFifo<vci_clen_t>     m_dma_cmd_clen_fifo;
+
+    // output FIFO to VCI TGT port on IOX network (VCI response)
+    GenericFifo<ext_data_t>     m_dma_rsp_data_fifo;
+    GenericFifo<vci_srcid_t>    m_dma_rsp_rsrcid_fifo;
+    GenericFifo<vci_trdid_t>    m_dma_rsp_rtrdid_fifo;
+    GenericFifo<vci_pktid_t>    m_dma_rsp_rpktid_fifo;
+    GenericFifo<vci_eop_t>      m_dma_rsp_reop_fifo;
+    GenericFifo<vci_rerror_t>   m_dma_rsp_rerror_fifo;
+
+    // output FIFO to VCI INI port on IOX network (VCI command)
+    GenericFifo<vci_addr_t>     m_config_cmd_addr_fifo;
+    GenericFifo<vci_srcid_t>    m_config_cmd_srcid_fifo;
+    GenericFifo<vci_trdid_t>    m_config_cmd_trdid_fifo;
+    GenericFifo<vci_pktid_t>    m_config_cmd_pktid_fifo;
+    GenericFifo<ext_be_t>       m_config_cmd_be_fifo;
+    GenericFifo<vci_cmd_t>      m_config_cmd_cmd_fifo;
+    GenericFifo<vci_contig_t>   m_config_cmd_contig_fifo;
+    GenericFifo<ext_data_t>     m_config_cmd_data_fifo;
+    GenericFifo<vci_eop_t>      m_config_cmd_eop_fifo;
+    GenericFifo<vci_cons_t>     m_config_cmd_cons_fifo;
+    GenericFifo<vci_plen_t>     m_config_cmd_plen_fifo;
+    GenericFifo<vci_wrap_t>     m_config_cmd_wrap_fifo;
+    GenericFifo<vci_cfixed_t>   m_config_cmd_cfixed_fifo;
+    GenericFifo<vci_clen_t>     m_config_cmd_clen_fifo;
+
+    // output FIFO to VCI TGT port on INT network (VCI response)
+    GenericFifo<int_data_t>     m_config_rsp_data_fifo;
+    GenericFifo<vci_srcid_t>    m_config_rsp_rsrcid_fifo;
+    GenericFifo<vci_trdid_t>    m_config_rsp_rtrdid_fifo;
+    GenericFifo<vci_pktid_t>    m_config_rsp_rpktid_fifo;
+    GenericFifo<vci_eop_t>      m_config_rsp_reop_fifo;
+    GenericFifo<vci_rerror_t>   m_config_rsp_rerror_fifo;
+
+    // output FIFO to VCI_INI port on INT network (VCI command)
+    GenericFifo<vci_addr_t>     m_miss_wti_cmd_addr_fifo;
+    GenericFifo<vci_srcid_t>    m_miss_wti_cmd_srcid_fifo;
+    GenericFifo<vci_trdid_t>    m_miss_wti_cmd_trdid_fifo;
+    GenericFifo<vci_pktid_t>    m_miss_wti_cmd_pktid_fifo;
+    GenericFifo<int_be_t>       m_miss_wti_cmd_be_fifo;
+    GenericFifo<vci_cmd_t>      m_miss_wti_cmd_cmd_fifo;
+    GenericFifo<vci_contig_t>   m_miss_wti_cmd_contig_fifo;
+    GenericFifo<int_data_t>     m_miss_wti_cmd_data_fifo;
+    GenericFifo<vci_eop_t>      m_miss_wti_cmd_eop_fifo;
+    GenericFifo<vci_cons_t>     m_miss_wti_cmd_cons_fifo;
+    GenericFifo<vci_plen_t>     m_miss_wti_cmd_plen_fifo;
+    GenericFifo<vci_wrap_t>     m_miss_wti_cmd_wrap_fifo;
+    GenericFifo<vci_cfixed_t>   m_miss_wti_cmd_cfixed_fifo;
+    GenericFifo<vci_clen_t>     m_miss_wti_cmd_clen_fifo;
+
+    ////////////////////////////////
+    // Activity counters
+    ////////////////////////////////
+
+    uint32_t m_cpt_total_cycles;            // total number of cycles
+
+    // TLB activity counters
+    uint32_t m_cpt_iotlb_read;              // number of iotlb read
+    uint32_t m_cpt_iotlb_miss;              // number of iotlb miss
+    uint32_t m_cost_iotlb_miss;             // number of wait cycles (not treatment itself)
+    uint32_t m_cpt_iotlbmiss_transaction;   // number of tlb miss transactions
+    uint32_t m_cost_iotlbmiss_transaction;  // cumulated duration tlb miss transactions
+
+    //Transaction Tabs (TRTs) activity counters
+    uint32_t m_cpt_trt_dma_full;            // DMA TRT full when a new command arrives
+    uint32_t m_cpt_trt_dma_full_cost;       // total number of cycles blocked
+    uint32_t m_cpt_trt_config_full;         // Config TRT full when a new command arrives
+    uint32_t m_cpt_trt_config_full_cost;    // total number of cycles blocked
+
+    // FSM activity counters
+    // unused on print_stats
+    uint32_t m_cpt_fsm_dma_cmd          [32];
+    uint32_t m_cpt_fsm_dma_rsp          [32];
+    uint32_t m_cpt_fsm_tlb              [32];
+    uint32_t m_cpt_fsm_config_cmd       [32];
+    uint32_t m_cpt_fsm_config_rsp       [32];
+    uint32_t m_cpt_fsm_miss_wti_rsp     [32];
+
+protected:
+
+    SC_HAS_PROCESS(VciIoBridge);
+
+public:
+
+    VciIoBridge(
+        sc_module_name                      insname,
+        const soclib::common::MappingTable  &mt_ext,      // external network
+        const soclib::common::MappingTable  &mt_int,      // internal network
+        const soclib::common::MappingTable  &mt_iox,      // iox network
+        const soclib::common::IntTab        &int_tgtid,   // INT network TGTID
+        const soclib::common::IntTab        &int_srcid,   // INT network SRCID
+        const soclib::common::IntTab        &iox_tgtid,   // IOX network TGTID
+        const soclib::common::IntTab        &iox_srcid,   // IOX network SRCID
+        const size_t                        dcache_words,
+        const size_t                        iotlb_ways,
+        const size_t                        iotlb_sets,
+        const uint32_t                      debug_start_cycle,
+        const bool                          debug_ok );
+
+    ~VciIoBridge();
+
+    void print_stats();
+    void clear_stats();
+    void print_trace(size_t mode = 0);
+
+
+private:
+
+    bool is_wti( vci_addr_t paddr );
+    void transition();
+    void genMoore();
+};
+
+}}
+
+#endif /* SOCLIB_CABA_VCI_CC_VCACHE_WRAPPER_V4_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
+
+
+
Index: /branches/fault_tolerance/modules/vci_io_bridge/caba/source/src/vci_io_bridge.cpp
===================================================================
--- /branches/fault_tolerance/modules/vci_io_bridge/caba/source/src/vci_io_bridge.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/vci_io_bridge/caba/source/src/vci_io_bridge.cpp	(revision 724)
@@ -0,0 +1,2667 @@
+/* -*- c++ -*-
+ * File : vci_io_bridge.cpp
+ * Copyright (c) UPMC, Lip6, SoC
+ * Authors: Cassio Fraga, Alain Greiner
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ */
+
+#include <cassert>
+#include "arithmetics.h"
+#include "alloc_elems.h"
+#include "../include/vci_io_bridge.h"
+
+
+//////   debug services   ///////////////////////////////////////////////////////
+// All debug messages are conditionned by two variables:
+// - compile time : DEBUG_*** : defined below
+// - execution time : m_debug_***  : defined by constructor arguments
+//    m_debug_activated = (m_debug_ok) and (m_cpt_cycle > m_debug_start_cycle)
+/////////////////////////////////////////////////////////////////////////////////
+
+#define DEBUG_DMA_CMD           1
+#define DEBUG_DMA_RSP           1
+#define DEBUG_TLB_MISS          1
+#define DEBUG_CONFIG_CMD        1
+#define DEBUG_CONFIG_RSP        1
+#define DEBUG_MISS_WTI_CMD      1
+
+namespace soclib {
+namespace caba {
+
+namespace {
+
+const char *dma_cmd_fsm_state_str[] =
+    {
+        "DMA_CMD_IDLE",
+        "DMA_CMD_DMA_REQ",
+        "DMA_CMD_WTI_IOX_REQ",
+        "DMA_CMD_ERR_WAIT_EOP",
+        "DMA_CMD_ERR_WTI_REQ",
+        "DMA_CMD_ERR_RSP_REQ",
+        "DMA_CMD_TLB_MISS_WAIT",
+    };
+
+const char *dma_rsp_fsm_state_str[] =
+    {
+        "DMA_RSP_IDLE_DMA",
+        "DMA_RSP_IDLE_WTI",
+        "DMA_RSP_IDLE_ERR",
+        "DMA_RSP_PUT_DMA",
+        "DMA_RSP_PUT_WTI",
+        "DMA_RSP_PUT_ERR",
+    };
+
+const char *tlb_fsm_state_str[] =
+    {
+        "TLB_IDLE",
+        "TLB_MISS",
+        "TLB_PTE1_GET",
+        "TLB_PTE1_SELECT",
+        "TLB_PTE1_UPDT",
+        "TLB_PTE2_GET",
+        "TLB_PTE2_SELECT",
+        "TLB_PTE2_UPDT",
+        "TLB_WAIT",
+        "TLB_RETURN",
+        "TLB_INVAL_CHECK",
+    };
+
+const char *config_cmd_fsm_state_str[] =
+    {
+        "CONFIG_CMD_IDLE",
+        "CONFIG_CMD_WAIT",
+        "CONFIG_CMD_HI",
+        "CONFIG_CMD_LO",
+        "CONFIG_CMD_PUT",
+        "CONFIG_CMD_RSP",
+    };
+
+const char *config_rsp_fsm_state_str[] =
+    {
+        "CONFIG_RSP_IDLE_IOX",
+        "CONFIG_RSP_IDLE_LOC",
+        "CONFIG_RSP_PUT_LO",
+        "CONFIG_RSP_PUT_HI",
+        "CONFIG_RSP_PUT_UNC",
+        "CONFIG_RSP_PUT_LOC",
+    };
+
+const char *miss_wti_rsp_state_str[] =
+    {
+        "MISS_WTI_RSP_IDLE",
+        "MISS_WTI_RSP_WTI_IOX",
+        "MISS_WTI_RSP_WTI_MMU",
+        "MISS_WTI_RSP_MISS",
+    };
+}
+
+#define tmpl(...)  template<typename vci_param_int,typename vci_param_ext> __VA_ARGS__ VciIoBridge<vci_param_int,vci_param_ext>
+
+////////////////////////
+tmpl(/**/)::VciIoBridge(
+    sc_module_name                      name,
+    const soclib::common::MappingTable  &mt_ext,
+    const soclib::common::MappingTable  &mt_int,
+    const soclib::common::MappingTable  &mt_iox,
+    const soclib::common::IntTab        &int_tgtid,     // INT network TGTID
+    const soclib::common::IntTab        &int_srcid,     // INT network SRCID
+    const soclib::common::IntTab        &iox_tgtid,     // IOX network TGTID
+    const soclib::common::IntTab        &iox_srcid,     // IOX network SRCID
+    const size_t                        dcache_words,
+    const size_t                        iotlb_ways,
+    const size_t                        iotlb_sets,
+    const uint32_t                      debug_start_cycle,
+    const bool                          debug_ok)
+    : soclib::caba::BaseModule(name),
+
+      p_clk("p_clk"),
+      p_resetn("p_resetn"),
+      p_vci_ini_ram("p_vci_ini_ram"),
+      p_vci_tgt_iox("p_vci_tgt_iox"),
+      p_vci_ini_iox("p_vci_ini_iox"),
+      p_vci_tgt_int("p_vci_tgt_int"),
+      p_vci_ini_int("p_vci_ini_int"),
+
+      m_words( dcache_words ),
+
+      // INT & IOX Network
+      m_int_seglist( mt_int.getSegmentList( int_tgtid )),
+      m_int_srcid( mt_int.indexForId( int_srcid )),
+      m_iox_seglist( mt_iox.getSegmentList( iox_tgtid )),
+      m_iox_srcid( mt_iox.indexForId( iox_srcid )),
+
+      m_srcid_gid_mask( mt_int.getSrcidLevelBits()[0],  // use global bits
+                        mt_int.getSrcidLevelBits()[1]), // drop local bits
+      m_srcid_lid_mask( mt_int.getSrcidLevelBits()[1],  // use local bits
+                        0),
+
+      m_iotlb_ways(iotlb_ways),
+      m_iotlb_sets(iotlb_sets),
+
+      m_debug_start_cycle(debug_start_cycle),
+      m_debug_ok(debug_ok),
+
+      // addressable registers
+      r_iommu_ptpr("r_iommu_ptpr"),
+      r_iommu_active("r_iommu_active"),
+      r_iommu_bvar("r_iommu_bvar"),
+      r_iommu_etr("r_iommu_etr"),
+      r_iommu_bad_id("r_iommu_bad_id"),
+      r_iommu_wti_enable("r_iommu_wti_enable"),
+      r_iommu_wti_addr_lo("r_iommu_wti_addr_lo"),
+
+      // DMA_CMD FSM registers
+      r_dma_cmd_fsm("r_dma_cmd_fsm"),
+      r_dma_cmd_paddr("r_dma_cmd_paddr"),
+
+      r_dma_cmd_to_miss_wti_cmd_req("r_dma_cmd_to_miss_wti_cmd_req"),
+      r_dma_cmd_to_miss_wti_cmd_addr("r_dma_cmd_to_miss_wti_cmd_addr"),
+      r_dma_cmd_to_miss_wti_cmd_srcid("r_dma_cmd_to_miss_wti_cmd_srcid"),
+      r_dma_cmd_to_miss_wti_cmd_trdid("r_dma_cmd_to_miss_wti_cmd_trdid"),
+      r_dma_cmd_to_miss_wti_cmd_pktid("r_dma_cmd_to_miss_wti_cmd_pktid"),
+      r_dma_cmd_to_miss_wti_cmd_wdata("r_dma_cmd_to_miss_wti_cmd_wdata"),
+
+      r_dma_cmd_to_dma_rsp_req("r_dma_cmd_to_dma_rsp_req"),
+      r_dma_cmd_to_dma_rsp_rsrcid("r_dma_cmd_to_dma_rsp_rsrcid"),
+      r_dma_cmd_to_dma_rsp_rtrdid("r_dma_cmd_to_dma_rsp_rtrdid"),
+      r_dma_cmd_to_dma_rsp_rpktid("r_dma_cmd_to_dma_rsp_rpktid"),
+
+      r_dma_cmd_to_tlb_req("r_dma_cmd_to_tlb_req"),
+      r_dma_cmd_to_tlb_vaddr("r_dma_cmd_to_tlb_vaddr"),
+
+      //DMA_RSP FSM registers
+      r_dma_rsp_fsm("r_dma_rsp_fsm"),
+
+      // CONFIG_CMD FSM registers
+      r_config_cmd_fsm("r_config_cmd_fsm"),
+
+      r_config_cmd_to_tlb_req("r_config_cmd_to_tlb_req"),
+      r_config_cmd_to_tlb_vaddr("r_config_cmd_to_tlb_vaddr"),
+
+      r_config_cmd_to_config_rsp_req("r_config_cmd_to_config_rsp_req"),
+      r_config_cmd_to_config_rsp_rerror("r_config_cmd_to_config_rsp_rerror"),
+      r_config_cmd_to_config_rsp_rdata("r_config_cmd_to_config_rsp_rdata"),
+      r_config_cmd_to_config_rsp_rsrcid("r_config_cmd_to_config_rsp_rsrcid"),
+      r_config_cmd_to_config_rsp_rtrdid("r_config_cmd_to_config_rsp_rtrdid"),
+      r_config_cmd_to_config_rsp_rpktid("r_config_cmd_to_config_rsp_rpktid"),
+
+      r_config_cmd_wdata("r_config_cmd_wdata"),
+      r_config_cmd_be("r_config_cmd_be"),
+      r_config_cmd_cmd("r_config_cmd_wdata"),
+      r_config_cmd_address("r_config_cmd_address"),
+      r_config_cmd_srcid("r_config_cmd_srcid"),
+      r_config_cmd_trdid("r_config_cmd_trdid"),
+      r_config_cmd_pktid("r_config_cmd_pktid"),
+      r_config_cmd_plen("r_config_cmd_plen"),
+      r_config_cmd_clen("r_config_cmd_clen"),
+      r_config_cmd_cons("r_config_cmd_cons"),
+      r_config_cmd_contig("r_config_cmd_contig"),
+      r_config_cmd_cfixed("r_config_cmd_cfixed"),
+      r_config_cmd_wrap("r_config_cmd_wrap"),
+      r_config_cmd_eop("r_config_cmd_eop"),
+
+      // ID translation table used by CONFIG_CMD and CONFIG_RSP FSMs
+      m_iox_transaction_tab(1),
+
+      // CONFIG_RSP FSM registers
+      r_config_rsp_fsm("r_config_rsp_fsm"),
+      r_config_rsp_rsrcid("r_config_rsp_rsrcid"),
+      r_config_rsp_rtrdid("r_config_rsp_rtrdid"),
+
+      // TLB FSM registers
+      r_tlb_fsm("r_tlb_fsm"),
+      r_waiting_transaction("r_waiting_transaction"),
+      r_tlb_miss_type("r_tlb_miss_type"),
+      r_tlb_miss_error("r_tlb_miss_error"),
+
+      r_tlb_paddr("r_tlb_paddr"),
+      r_tlb_pte_flags("r_tlb_pte_flags"),
+      r_tlb_pte_ppn("r_tlb_pte_ppn"),
+      r_tlb_way("r_tlb_way"),
+      r_tlb_set("r_tlb_set"),
+
+      r_tlb_buf_valid("r_tlb_buf_valid"),
+      r_tlb_buf_tag("r_tlb_buf_tag"),
+      r_tlb_buf_vaddr("r_tlb_buf_vaddr"),
+      r_tlb_buf_big_page("r_tlb_buf_big_page"),
+
+      r_tlb_to_miss_wti_cmd_req("r_tlb_to_miss_wti_cmd_req"),
+
+      // MISS_WTI_RSP FSM registers
+      r_miss_wti_rsp_fsm("r_miss_wti_rsp_fsm"),
+      r_miss_wti_rsp_error_wti("r_miss_wti_rsp_error_wti"),
+      r_miss_wti_rsp_error_miss("r_miss_wti_rsp_error_miss"),
+      r_miss_wti_rsp_count("r_miss_wti_rsp_count"),
+
+      r_miss_wti_rsp_to_dma_rsp_req("r_miss_wti_rsp_to_dma_rsp_req"),
+      r_miss_wti_rsp_to_dma_rsp_rerror("r_miss_wti_rsp_to_dma_rsp_rerror"),
+      r_miss_wti_rsp_to_dma_rsp_rsrcid("r_miss_wti_rsp_to_dma_rsp_rsrcid"),
+      r_miss_wti_rsp_to_dma_rsp_rtrdid("r_miss_wti_rsp_to_dma_rsp_rtrdid"),
+      r_miss_wti_rsp_to_dma_rsp_rpktid("r_miss_wti_rsp_to_dma_rsp_rpktid"),
+
+      // TLB for IOMMU
+      r_iotlb("iotlb", 0, iotlb_ways, iotlb_sets, vci_param_int::N),
+
+      // DMA_CMD FIFOs
+      m_dma_cmd_addr_fifo("m_dma_cmd_addr_fifo",2),
+      m_dma_cmd_srcid_fifo("m_dma_cmd_srcid_fifo",2),
+      m_dma_cmd_trdid_fifo("m_dma_cmd_trdid_fifo",2),
+      m_dma_cmd_pktid_fifo("m_dma_cmd_pktid_fifo",2),
+      m_dma_cmd_be_fifo("m_dma_cmd_be_fifo",2),
+      m_dma_cmd_cmd_fifo("m_dma_cmd_cmd_fifo",2),
+      m_dma_cmd_contig_fifo("m_dma_cmd_contig_fifo",2),
+      m_dma_cmd_data_fifo("m_dma_cmd_data_fifo",2),
+      m_dma_cmd_eop_fifo("m_dma_cmd_eop_fifo",2),
+      m_dma_cmd_cons_fifo("m_dma_cmd_cons_fifo",2),
+      m_dma_cmd_plen_fifo("m_dma_cmd_plen_fifo",2),
+      m_dma_cmd_wrap_fifo("m_dma_cmd_wrap_fifo",2),
+      m_dma_cmd_cfixed_fifo("m_dma_cmd_cfixed_fifo",2),
+      m_dma_cmd_clen_fifo("m_dma_cmd_clen_fifo",2),
+
+      // DMA_RSP FIFOs
+      m_dma_rsp_data_fifo("m_dma_rsp_data_fifo",2),
+      m_dma_rsp_rsrcid_fifo("m_dma_rsp_rsrcid_fifo",2),
+      m_dma_rsp_rtrdid_fifo("m_dma_rsp_rtrdid_fifo",2),
+      m_dma_rsp_rpktid_fifo("m_dma_rsp_rpktid_fifo",2),
+      m_dma_rsp_reop_fifo("m_dma_rsp_reop_fifo",2),
+      m_dma_rsp_rerror_fifo("m_dma_rsp_rerror_fifo",2),
+
+      // CONFIG_CMD FIFOs
+      m_config_cmd_addr_fifo("m_config_cmd_addr_fifo",2),
+      m_config_cmd_srcid_fifo("m_config_cmd_srcid_fifo",2),
+      m_config_cmd_trdid_fifo("m_config_cmd_trdid_fifo",2),
+      m_config_cmd_pktid_fifo("m_config_cmd_pktid_fifo",2),
+      m_config_cmd_be_fifo("m_config_cmd_be_fifo",2),
+      m_config_cmd_cmd_fifo("m_config_cmd_cmd_fifo",2),
+      m_config_cmd_contig_fifo("m_config_cmd_contig_fifo",2),
+      m_config_cmd_data_fifo("m_config_cmd_data_fifo",2),
+      m_config_cmd_eop_fifo("m_config_cmd_eop_fifo",2),
+      m_config_cmd_cons_fifo("m_config_cmd_cons_fifo",2),
+      m_config_cmd_plen_fifo("m_config_cmd_plen_fifo",2),
+      m_config_cmd_wrap_fifo("m_config_cmd_wrap_fifo",2),
+      m_config_cmd_cfixed_fifo("m_config_cmd_cfixed_fifo",2),
+      m_config_cmd_clen_fifo("m_config_cmd_clen_fifo",2),
+
+      // CONFIG_RSP FIFOs
+      m_config_rsp_data_fifo("m_config_rsp_data_fifo",2),
+      m_config_rsp_rsrcid_fifo("m_config_rsp_rsrcid_fifo",2),
+      m_config_rsp_rtrdid_fifo("m_config_rsp_rtrdid_fifo",2),
+      m_config_rsp_rpktid_fifo("m_config_rsp_rpktid_fifo",2),
+      m_config_rsp_reop_fifo("m_config_rsp_reop_fifo",2),
+      m_config_rsp_rerror_fifo("m_config_rsp_rerror_fifo",2),
+
+      // MISS_WTI_CMD FIFOs
+      m_miss_wti_cmd_addr_fifo("m_miss_wti_cmd_addr_fifo",2),
+      m_miss_wti_cmd_srcid_fifo("m_miss_wti_cmd_srcid_fifo",2),
+      m_miss_wti_cmd_trdid_fifo("m_miss_wti_cmd_trdid_fifo",2),
+      m_miss_wti_cmd_pktid_fifo("m_miss_wti_cmd_pktid_fifo",2),
+      m_miss_wti_cmd_be_fifo("m_miss_wti_cmd_be_fifo",2),
+      m_miss_wti_cmd_cmd_fifo("m_miss_wti_cmd_cmd_fifo",2),
+      m_miss_wti_cmd_contig_fifo("m_miss_wti_cmd_contig_fifo",2),
+      m_miss_wti_cmd_data_fifo("m_miss_wti_cmd_data_fifo",2),
+      m_miss_wti_cmd_eop_fifo("m_miss_wti_cmd_eop_fifo",2),
+      m_miss_wti_cmd_cons_fifo("m_miss_wti_cmd_cons_fifo",2),
+      m_miss_wti_cmd_plen_fifo("m_miss_wti_cmd_plen_fifo",2),
+      m_miss_wti_cmd_wrap_fifo("m_miss_wti_cmd_wrap_fifo",2),
+      m_miss_wti_cmd_cfixed_fifo("m_miss_wti_cmd_cfixed_fifo",2),
+      m_miss_wti_cmd_clen_fifo("m_miss_wti_cmd_clen_fifo",2)
+{
+    std::cout << "  - Building VciIoBridge : " << name << std::endl;
+
+    // checking segments on INT network
+    assert ( ( not m_int_seglist.empty() ) and
+    "VCI_IO_BRIDGE ERROR : no segment allocated on INT network");
+
+    std::list<soclib::common::Segment>::iterator int_seg;
+    for ( int_seg = m_int_seglist.begin() ; int_seg != m_int_seglist.end() ; int_seg++ )
+    {
+        std::cout << "    => segment " << int_seg->name()
+                  << " / base = " << std::hex << int_seg->baseAddress()
+                  << " / size = " << int_seg->size()
+                  << " / special = " << int_seg->special() << std::endl;
+    }
+
+    // checking segments on IOX network
+    assert ( ( not m_iox_seglist.empty() ) and
+    "VCI_IO_BRIDGE ERROR : no segment allocated on IOX network");
+
+    std::list<soclib::common::Segment>::iterator iox_seg;
+    for ( iox_seg = m_iox_seglist.begin() ; iox_seg != m_iox_seglist.end() ; iox_seg++ )
+    {
+        std::cout << "    => segment " << iox_seg->name()
+                  << " / base = " << std::hex << iox_seg->baseAddress()
+                  << " / size = " << iox_seg->size() << std::endl;
+    }
+
+    assert( (vci_param_int::N == vci_param_ext::N) and
+    "VCI_IO_BRIDGE ERROR: VCI ADDRESS widths must be equal on the 3 networks");
+
+    assert( (vci_param_int::N <=  64) and
+    "VCI_IO_BRIDGE ERROR: VCI ADDRESS width cannot be bigger than 64 bits");
+
+    assert( (vci_param_int::B == 4) and
+    "VCI_IO_BRIDGE ERROR: VCI DATA width must be 32 bits on internal network");
+
+    assert( (vci_param_ext::B == 8) and
+    "VCI_IO_BRIDGE ERROR: VCI DATA width must be 64 bits on external network");
+
+    assert( (vci_param_int::S == vci_param_ext::S) and
+            "VCI_IO_BRIDGE ERROR: SRCID widths must be equal on the 3 networks");
+
+    // Cache line buffer
+    r_tlb_buf_data = new uint32_t[dcache_words];
+
+    SC_METHOD(transition);
+    dont_initialize();
+    sensitive << p_clk.pos();
+
+    SC_METHOD(genMoore);
+    dont_initialize();
+    sensitive << p_clk.neg();
+
+ }
+
+/////////////////////////////////////
+tmpl(/**/)::~VciIoBridge()
+/////////////////////////////////////
+{
+    delete [] r_tlb_buf_data;
+}
+
+////////////////////////////////////
+tmpl(void)::print_trace(size_t mode)
+////////////////////////////////////
+{
+    // b0 : IOTLB trace
+
+    std::cout << std::dec << "IO_BRIDGE " << name() << std::endl;
+
+    std::cout << "  "  << dma_cmd_fsm_state_str[r_dma_cmd_fsm.read()]
+              << " | " << dma_rsp_fsm_state_str[r_dma_rsp_fsm.read()]
+              << " | " << tlb_fsm_state_str[r_tlb_fsm.read()]
+              << " | " << config_cmd_fsm_state_str[r_config_cmd_fsm.read()]
+              << " | " << config_rsp_fsm_state_str[r_config_rsp_fsm.read()]
+              << " | " << miss_wti_rsp_state_str[r_miss_wti_rsp_fsm.read()]
+              << std::endl;
+
+    if(mode & 0x01)
+    {
+        std::cout << "  IOTLB" << std::endl;
+        r_iotlb.printTrace();
+    }
+
+    if(mode & 0x02)
+    {
+        std::cout << "  IOX TRANSACTION TAB" << std::endl;
+        m_iox_transaction_tab.printTrace();
+    }
+}
+
+////////////////////////
+tmpl(void)::print_stats()
+////////////////////////
+{
+    std::cout << name()
+        << "\n- IOTLB MISS RATE                                = "
+        << (float)m_cpt_iotlb_miss/m_cpt_iotlb_read
+        << "\n- IOTLB MISS COST                                = "
+        << (float)m_cost_iotlb_miss/m_cpt_iotlb_miss
+        << "\n- IOTLB MISS TRANSACTION COST                    = "
+        << (float)m_cost_iotlbmiss_transaction/m_cpt_iotlbmiss_transaction
+        << "\n- IOTLB MISS TRANSACTION RATE (OVER ALL MISSES)  = "
+        << (float)m_cpt_iotlbmiss_transaction/m_cpt_iotlb_miss
+        << std::endl;
+}
+
+////////////////////////
+tmpl(void)::clear_stats()
+////////////////////////
+{
+    m_cpt_iotlb_read                = 0;
+    m_cpt_iotlb_miss                = 0;
+    m_cost_iotlb_miss               = 0;
+    m_cpt_iotlbmiss_transaction     = 0;
+    m_cost_iotlbmiss_transaction    = 0;
+}
+
+////////////////////////////////////
+tmpl(bool)::is_wti(vci_addr_t paddr)
+////////////////////////////////////
+{
+    std::list<soclib::common::Segment>::iterator seg;
+    for ( seg  = m_iox_seglist.begin() ;
+          seg != m_iox_seglist.end()   ;
+          seg++ )
+    {
+        if ( seg->contains(paddr) ) return seg->special();
+    }
+    return false;
+}
+
+/////////////////////////
+tmpl(void)::transition()
+/////////////////////////
+{
+    if ( not p_resetn.read() )
+    {
+        r_dma_cmd_fsm      = DMA_CMD_IDLE;
+        r_dma_rsp_fsm      = DMA_RSP_IDLE_DMA;
+        r_tlb_fsm          = TLB_IDLE;
+        r_config_cmd_fsm   = CONFIG_CMD_IDLE;
+        r_config_rsp_fsm   = CONFIG_RSP_IDLE_IOX;
+        r_miss_wti_rsp_fsm = MISS_WTI_RSP_IDLE;
+
+        r_tlb_buf_valid    = false;
+        r_iommu_active     = false;
+        r_iommu_wti_enable = false;
+
+        // initializing translation table
+        m_iox_transaction_tab.init();
+
+        // initializing FIFOs
+        m_dma_cmd_addr_fifo.init();
+        m_dma_cmd_srcid_fifo.init();
+        m_dma_cmd_trdid_fifo.init();
+        m_dma_cmd_pktid_fifo.init();
+        m_dma_cmd_be_fifo.init();
+        m_dma_cmd_cmd_fifo.init();
+        m_dma_cmd_contig_fifo.init();
+        m_dma_cmd_data_fifo.init();
+        m_dma_cmd_eop_fifo.init();
+        m_dma_cmd_cons_fifo.init();
+        m_dma_cmd_plen_fifo.init();
+        m_dma_cmd_wrap_fifo.init();
+        m_dma_cmd_cfixed_fifo.init();
+        m_dma_cmd_clen_fifo.init();
+
+        m_dma_rsp_rsrcid_fifo.init();
+        m_dma_rsp_rtrdid_fifo.init();
+        m_dma_rsp_rpktid_fifo.init();
+        m_dma_rsp_data_fifo.init();
+        m_dma_rsp_rerror_fifo.init();
+        m_dma_rsp_reop_fifo.init();
+
+        m_config_cmd_addr_fifo.init();
+        m_config_cmd_srcid_fifo.init();
+        m_config_cmd_trdid_fifo.init();
+        m_config_cmd_pktid_fifo.init();
+        m_config_cmd_be_fifo.init();
+        m_config_cmd_cmd_fifo.init();
+        m_config_cmd_contig_fifo.init();
+        m_config_cmd_data_fifo.init();
+        m_config_cmd_eop_fifo.init();
+        m_config_cmd_cons_fifo.init();
+        m_config_cmd_plen_fifo.init();
+        m_config_cmd_wrap_fifo.init();
+        m_config_cmd_cfixed_fifo.init();
+        m_config_cmd_clen_fifo.init();
+
+        m_miss_wti_cmd_addr_fifo.init();
+        m_miss_wti_cmd_srcid_fifo.init();
+        m_miss_wti_cmd_trdid_fifo.init();
+        m_miss_wti_cmd_pktid_fifo.init();
+        m_miss_wti_cmd_be_fifo.init();
+        m_miss_wti_cmd_cmd_fifo.init();
+        m_miss_wti_cmd_contig_fifo.init();
+        m_miss_wti_cmd_data_fifo.init();
+        m_miss_wti_cmd_eop_fifo.init();
+        m_miss_wti_cmd_cons_fifo.init();
+        m_miss_wti_cmd_plen_fifo.init();
+        m_miss_wti_cmd_wrap_fifo.init();
+        m_miss_wti_cmd_cfixed_fifo.init();
+        m_miss_wti_cmd_clen_fifo.init();
+
+        m_config_rsp_rsrcid_fifo.init();
+        m_config_rsp_rtrdid_fifo.init();
+        m_config_rsp_rpktid_fifo.init();
+        m_config_rsp_data_fifo.init();
+        m_config_rsp_rerror_fifo.init();
+        m_config_rsp_reop_fifo.init();
+
+        // SET/RESET Communication flip-flops
+        r_dma_cmd_to_miss_wti_cmd_req  = false;
+        r_dma_cmd_to_dma_rsp_req       = false;
+        r_dma_cmd_to_tlb_req           = false;
+        r_config_cmd_to_tlb_req        = false;
+        r_config_cmd_to_config_rsp_req = false;
+        r_tlb_to_miss_wti_cmd_req      = false;
+        r_miss_wti_rsp_to_dma_rsp_req  = false;
+
+        // error flip_flops
+        r_miss_wti_rsp_error_miss      = false;
+        r_miss_wti_rsp_error_wti       = false;
+
+        // Debug variable
+        m_debug_activated              = false;
+
+        // activity counters
+        m_cpt_total_cycles             = 0;
+        m_cpt_iotlb_read               = 0;
+        m_cpt_iotlb_miss               = 0;
+        m_cpt_iotlbmiss_transaction    = 0;
+        m_cost_iotlbmiss_transaction   = 0;
+
+        m_cpt_trt_dma_full             = 0;
+        m_cpt_trt_dma_full_cost        = 0;
+        m_cpt_trt_config_full          = 0;
+        m_cpt_trt_config_full_cost     = 0;
+
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_dma_cmd            [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_dma_rsp            [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_tlb                [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_config_cmd         [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_config_rsp         [i]   = 0;
+        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_miss_wti_rsp       [i]   = 0;
+
+        return;
+    }
+
+    // default values for the 5 FIFOs
+    bool            dma_cmd_fifo_put          = false;
+    bool            dma_cmd_fifo_get          = p_vci_ini_ram.cmdack.read();
+    vci_srcid_t     dma_cmd_fifo_srcid        = 0;
+
+    bool            dma_rsp_fifo_put          = false;
+    bool            dma_rsp_fifo_get          = p_vci_tgt_iox.rspack.read();
+    vci_rerror_t    dma_rsp_fifo_rerror       = 0;
+    vci_srcid_t     dma_rsp_fifo_rsrcid       = 0;
+    vci_trdid_t     dma_rsp_fifo_rtrdid       = 0;
+    vci_pktid_t     dma_rsp_fifo_rpktid       = 0;
+    ext_data_t      dma_rsp_fifo_rdata        = 0;
+    bool            dma_rsp_fifo_reop         = false;
+
+    bool            config_cmd_fifo_put       = false;
+    bool            config_cmd_fifo_get       = p_vci_ini_iox.cmdack.read();
+
+    bool            config_rsp_fifo_put       = false;
+    bool            config_rsp_fifo_get       = p_vci_tgt_int.rspack.read();
+    vci_rerror_t    config_rsp_fifo_rerror    = 0;
+    vci_srcid_t     config_rsp_fifo_rsrcid    = 0;
+    vci_trdid_t     config_rsp_fifo_rtrdid    = 0;
+    vci_pktid_t     config_rsp_fifo_rpktid    = 0;
+    ext_data_t      config_rsp_fifo_rdata     = 0;
+    bool            config_rsp_fifo_reop      = false;
+
+    bool            miss_wti_cmd_fifo_put     = false;
+    bool            miss_wti_cmd_fifo_get     = p_vci_ini_int.cmdack.read();
+    vci_addr_t      miss_wti_cmd_fifo_address = 0;
+    vci_cmd_t       miss_wti_cmd_fifo_cmd     = 0;
+    vci_srcid_t     miss_wti_cmd_fifo_srcid   = 0;
+    vci_trdid_t     miss_wti_cmd_fifo_trdid   = 0;
+    vci_pktid_t     miss_wti_cmd_fifo_pktid   = 0;
+    int_data_t      miss_wti_cmd_fifo_wdata   = 0;
+
+#ifdef INSTRUMENTATION
+    m_cpt_fsm_dma_cmd           [r_dma_cmd_fsm.read()] ++;
+    m_cpt_fsm_dma_rsp           [r_dma_rsp_fsm.read() ] ++;
+    m_cpt_fsm_tlb               [r_tlb_fsm.read() ] ++;
+    m_cpt_fsm_config_cmd        [r_config_cmd_fsm.read() ] ++;
+    m_cpt_fsm_config_rsp        [r_config_rsp_fsm.read() ] ++;
+    m_cpt_fsm_miss_wti_rsp      [r_miss_wti_rsp_fsm.read() ] ++;
+#endif
+
+    m_cpt_total_cycles++;
+
+    m_debug_activated  = (m_cpt_total_cycles > m_debug_start_cycle) and m_debug_ok;
+
+    //////////////////////////////////////////////////////////////////////////////
+    // The DMA_CMD_FSM handles transactions requested by peripherals.
+    // - it can be DMA transactions to RAM network (DMA_REQ state).
+    // - it can be WTI transactions to INT network (EXT_WTI_REQ state).
+    // It makes the address translation if IOMMU is activated, requesting
+    // the TLB_MISS FSM in case of TLB miss (TLB_MISS_WAIT state).
+    // When the IOMMU is activated, a DMA request can fail in two cases:
+    // - write to a read-only address : detected in IDLE state
+    // - virtual address unmapped     : detected in MISS_WAIT state
+    // In both cases of violation, the DMA_CMD FSM makes the following actions :
+    // 1. register the error in r_iommu_*** registers
+    // 2. wait the faulty command EOP (ERR_WAIT_EOP state)
+    // 3. request a IOMMU WTI to MISS_WTI FSM, (ERR_WTI_REQ state)
+    // 4. request a response error to DMA_RSP FSM (ERR_RSP_REQ state)
+    ///////////////////////////////////////////////////////////////////////////////
+
+    switch( r_dma_cmd_fsm.read() )
+    {
+    //////////////////
+    case DMA_CMD_IDLE:  // wait a DMA or WTI VCI transaction and route it
+                        // after an IOMMU translation if IOMMU activated.
+                        // no VCI flit is consumed in this state
+    {
+        if ( p_vci_tgt_iox.cmdval.read() )
+        {
+            if ( not r_iommu_active.read() )    // tlb not activated
+            {
+                // save paddr address
+                r_dma_cmd_paddr = p_vci_tgt_iox.address.read();
+
+                // analyse paddr for WTI/DMA routing
+                // WTI requests must be single flit (READ or WRITE)
+                if ( is_wti( p_vci_tgt_iox.address.read() ) )
+                {
+                    assert( p_vci_tgt_iox.eop.read() and
+                    "ERROR in VCI_IOB illegal VCI WTI command from IOX network");
+
+                    r_dma_cmd_fsm = DMA_CMD_WTI_IOX_REQ;
+                }
+                else
+                {
+                    r_dma_cmd_fsm = DMA_CMD_DMA_REQ;
+                }
+
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_IDLE> DMA command"
+          << " : address = " << std::hex << p_vci_tgt_iox.address.read()
+          << " / srcid = " << p_vci_tgt_iox.srcid.read()
+          << " / wdata = " << std::hex << p_vci_tgt_iox.wdata.read()
+          << " / plen = " << std::dec << p_vci_tgt_iox.plen.read()
+          << " / eop = " << p_vci_tgt_iox.eop.read() << std::endl;
+#endif
+            }
+            else if (r_tlb_fsm.read() == TLB_IDLE ||
+                     r_tlb_fsm.read() == TLB_WAIT )   // tlb access possible
+            {
+                vci_addr_t  iotlb_paddr;
+                pte_info_t  iotlb_flags;
+                size_t      iotlb_way;
+                size_t      iotlb_set;
+                vci_addr_t  iotlb_nline;
+                bool        iotlb_hit;
+
+#ifdef INSTRUMENTATION
+m_cpt_iotlb_read++;
+#endif
+                iotlb_hit = r_iotlb.translate(p_vci_tgt_iox.address.read(),
+                                              &iotlb_paddr,
+                                              &iotlb_flags,
+                                              &iotlb_nline,  // unused
+                                              &iotlb_way,    // unused
+                                              &iotlb_set );  // unused
+
+                if ( iotlb_hit )                                 // tlb hit
+                {
+                    if ( not iotlb_flags.w and    // access right violation
+                        (p_vci_tgt_iox.cmd.read() == vci_param_ext::CMD_WRITE) )
+                    {
+                        // register error
+                        r_iommu_etr      = MMU_WRITE_ACCES_VIOLATION;
+                        r_iommu_bvar     = p_vci_tgt_iox.address.read();
+                        r_iommu_bad_id   = p_vci_tgt_iox.srcid.read();
+
+                        // prepare response error request to DMA_RSP FSM
+                        r_dma_cmd_to_dma_rsp_rsrcid = p_vci_tgt_iox.srcid.read();
+                        r_dma_cmd_to_dma_rsp_rtrdid = p_vci_tgt_iox.trdid.read();
+                        r_dma_cmd_to_dma_rsp_rpktid = p_vci_tgt_iox.pktid.read();
+
+                        // jumps IOMMU error sequence
+                        r_dma_cmd_fsm = DMA_CMD_ERR_WAIT_EOP;
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_IDLE> TLB HIT but writable violation" << std::endl;
+#endif
+                    }
+                    else                         // no access rights violation
+                    {
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_IDLE> TLB HIT" << std::endl;
+#endif
+                        // save paddr address
+                        r_dma_cmd_paddr = iotlb_paddr;
+
+                        // analyse address for WTI/DMA routing
+                        if ( is_wti( iotlb_paddr ) )
+                        {
+                            assert( p_vci_tgt_iox.eop.read() and
+                                   (p_vci_tgt_iox.cmd == vci_param_int::CMD_WRITE) and
+                            "ERROR in VCI_IOB illegal VCI WTI command from IOX network");
+
+                            r_dma_cmd_fsm = DMA_CMD_WTI_IOX_REQ;
+                        }
+                        else
+                        {
+                            r_dma_cmd_fsm = DMA_CMD_DMA_REQ;
+                        }
+                    }
+                }
+                else                                             // TLB miss
+                {
+
+#ifdef INSTRUMENTATION
+m_cpt_iotlb_miss++;
+#endif
+                    // register virtual address, and send request to TLB FSM
+                    r_dma_cmd_to_tlb_vaddr = p_vci_tgt_iox.address.read();
+                    r_dma_cmd_to_tlb_req   = true;
+                    r_dma_cmd_fsm          = DMA_CMD_TLB_MISS_WAIT;
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_IDLE> TLB MISS" << std::endl;
+#endif
+                } // end tlb miss
+            } // end if tlb_activated
+        } // end if cmdval
+        break;
+    }
+    /////////////////////
+    case DMA_CMD_DMA_REQ:    // put a flit in DMA_CMD FIFO
+                             // if contig, VCI address must be incremented
+                             // after initial translation by IOMMU.
+                             // flit is consumed if DMA_CMD FIFO not full
+    {
+        if ( p_vci_tgt_iox.cmdval && m_dma_cmd_addr_fifo.wok() )
+        {
+            // SRCID in RAM network is the concatenation of the IO bridge
+            // cluster id with the DMA peripheral local id
+            assert((m_srcid_gid_mask[p_vci_tgt_iox.srcid.read()] == 0) &&
+                    "error: external DMA peripherals global id must be 0");
+
+            dma_cmd_fifo_srcid = (m_srcid_gid_mask.mask() & m_int_srcid) |
+                                 p_vci_tgt_iox.srcid.read();
+            dma_cmd_fifo_put   = true;
+
+            if ( p_vci_tgt_iox.contig.read() )
+            {
+                r_dma_cmd_paddr = r_dma_cmd_paddr.read() + vci_param_ext::B;
+            }
+
+            if ( p_vci_tgt_iox.eop.read() )
+            {
+                r_dma_cmd_fsm = DMA_CMD_IDLE;
+            }
+
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_FIFO_PUT_CMD> Push into DMA_CMD fifo:"
+          << " address = " << std::hex << r_dma_cmd_paddr.read()
+          << " srcid = " << dma_cmd_fifo_srcid
+          << " wdata = " << p_vci_tgt_iox.wdata.read()
+          << " plen = " << std::dec << p_vci_tgt_iox.plen.read()
+          << " eop = " << std::dec << p_vci_tgt_iox.eop.read() << std::endl;
+#endif
+        }
+        break;
+    }
+    /////////////////////////
+    case DMA_CMD_WTI_IOX_REQ:    // post a WTI_IOX request to MISS_WTI FSM
+                                 // if no prending previous request
+                                 // command arguments are stored in dedicated registers
+                                 // VCI flit is consumed if no previous request
+    {
+        if ( not r_dma_cmd_to_miss_wti_cmd_req.read() )  // no previous pending request
+        {
+            // SRCID in INT network for WTI transactions is the concatenation
+            // of the IO bridge cluster id with the DMA peripheral local id
+            assert((m_srcid_gid_mask[p_vci_tgt_iox.srcid.read()] == 0) &&
+                    "error: external DMA peripherals global id must be 0");
+
+            vci_srcid_t wti_srcid = (m_srcid_gid_mask.mask() & m_int_srcid) | 
+                                    p_vci_tgt_iox.srcid.read();
+
+            r_dma_cmd_to_miss_wti_cmd_req   = true;
+            r_dma_cmd_to_miss_wti_cmd_addr  = p_vci_tgt_iox.address.read();
+            r_dma_cmd_to_miss_wti_cmd_cmd   = p_vci_tgt_iox.cmd.read();
+            r_dma_cmd_to_miss_wti_cmd_wdata = (uint32_t)p_vci_tgt_iox.wdata.read();
+            r_dma_cmd_to_miss_wti_cmd_srcid = wti_srcid;
+            r_dma_cmd_to_miss_wti_cmd_trdid = p_vci_tgt_iox.trdid.read();
+            r_dma_cmd_to_miss_wti_cmd_pktid = PKTID_WTI_IOX;
+
+            r_dma_cmd_fsm = DMA_CMD_IDLE;
+
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_WTI_IOX_REQ> request WTI transaction from ext peripheral"
+          << " : address = " << std::hex << r_dma_cmd_paddr.read()
+          << " / srcid = " << wti_srcid
+          << " / wdata = " << p_vci_tgt_iox.wdata.read() << std::endl;
+#endif
+        }
+        break;
+    }
+    //////////////////////////
+    case DMA_CMD_ERR_WAIT_EOP:   // wait EOP before requesting WTI & error response
+                                 // VCI flit is always consumed
+    {
+        if ( p_vci_tgt_iox.eop.read() ) r_dma_cmd_fsm = DMA_CMD_ERR_WTI_REQ;
+
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_WAIT_EOP> wait EOP for faulty DMA command" << std::endl;
+#endif
+        break;
+    }
+
+    /////////////////////////
+    case DMA_CMD_ERR_WTI_REQ:    // post a WTI_MMU request to MISS_WTI_CMD FSM
+                                 // if no prending previous request
+                                 // response arguments are stored in dedicated registers
+                                 // no VCI flit is consumed
+    {
+        if ( not r_dma_cmd_to_miss_wti_cmd_req.read() )  // no pending previous request
+        {
+            r_dma_cmd_to_miss_wti_cmd_req   = true;
+            r_dma_cmd_to_miss_wti_cmd_addr  = (vci_addr_t)r_iommu_wti_addr_lo.read() |
+                                              (((vci_addr_t)r_iommu_wti_addr_hi.read())<<32);
+            r_dma_cmd_to_miss_wti_cmd_wdata = 0;
+            r_dma_cmd_to_miss_wti_cmd_srcid = m_int_srcid;
+            r_dma_cmd_to_miss_wti_cmd_trdid = 0;
+            r_dma_cmd_to_miss_wti_cmd_pktid = PKTID_WTI_MMU;
+
+            r_dma_cmd_fsm            = DMA_CMD_ERR_RSP_REQ;
+
+#if DEBUG_DMA_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_CMD_ERR_WTI_REQ> request an IOMMU WTI" << std::endl;
+#endif
+        }
+        break;
+    }
+    /////////////////////////
+    case DMA_CMD_ERR_RSP_REQ:    // post an error response request to DMA_RSP FSM
+                                 // if no prending previous request
+                                 // response arguments are stored in dedicated registers
+                                 // no VCI flit is consumed
+    {
+        if ( not r_dma_cmd_to_dma_rsp_req.read() )  // no pending previous request
+        {
+            r_dma_cmd_to_dma_rsp_req    = true;
+            r_dma_cmd_to_dma_rsp_rerror = 0x1;
+            r_dma_cmd_to_dma_rsp_rdata  = 0;
+        }
+        break;
+    }
+    ///////////////////////////
+    case DMA_CMD_TLB_MISS_WAIT:  // waiting completion of a TLB miss
+                                 // we must test a possible page fault error...
+    {
+        if ( not r_dma_cmd_to_tlb_req.read() ) // TLB miss completed
+        {
+            if ( r_tlb_miss_error.read() )   // Error reported by TLB FSM
+            {
+                r_iommu_etr     = MMU_READ_PT2_UNMAPPED;
+                r_iommu_bvar    = r_dma_cmd_to_tlb_vaddr.read();
+                r_iommu_bad_id  = p_vci_tgt_iox.srcid.read();
+                r_dma_cmd_fsm   = DMA_CMD_ERR_WAIT_EOP;
+            }
+            else                            // No error
+            {
+                r_dma_cmd_fsm   = DMA_CMD_IDLE;
+            }
+        }
+        break;
+    }
+    } // end switch DMA_CMD FSM
+
+    ////////////////////////////////////////////////////////////////////////////////
+    // The DMA_RSP_FSM controls access to the DMA_RSP FIFO to the IOX network.
+    // There exist 3 "clients" to send VCI responses on the IOX network:
+    // - request from p_vci_ini_ram    : normal DMA response from RAM network,
+    // - request from MISS_WTI_RSP FSM : normal WTI response from INT network,
+    // - request from DMA_CMD FSM      : bad address error response
+    // This FSM implements a round robin priority, with a "dead cycle" between
+    // two transactions. It could be optimized if throughput is critical...
+    ////////////////////////////////////////////////////////////////////////////////
+
+    // does nothing if FIFO is full
+    if ( m_dma_rsp_rerror_fifo.wok() )
+    {
+        switch( r_dma_rsp_fsm.read() )
+        {
+            //////////////////////
+            case DMA_RSP_IDLE_DMA:  // normal DMA response has highest priority
+            {
+                if     (p_vci_ini_ram.rspval.read())          r_dma_rsp_fsm = DMA_RSP_PUT_DMA;
+                else if(r_miss_wti_rsp_to_dma_rsp_req.read()) r_dma_rsp_fsm = DMA_RSP_PUT_WTI;
+                else if(r_dma_cmd_to_dma_rsp_req.read())      r_dma_rsp_fsm = DMA_RSP_PUT_ERR;
+                break;
+            }
+            //////////////////////
+            case DMA_RSP_IDLE_WTI:  // normal WTI response has highest priority
+            {
+                if     (r_miss_wti_rsp_to_dma_rsp_req.read()) r_dma_rsp_fsm = DMA_RSP_PUT_WTI;
+                else if(r_dma_cmd_to_dma_rsp_req.read())      r_dma_rsp_fsm = DMA_RSP_PUT_ERR;
+                else if(p_vci_ini_ram.rspval.read())          r_dma_rsp_fsm = DMA_RSP_PUT_DMA;
+                break;
+            }
+            //////////////////////
+            case DMA_RSP_IDLE_ERR:  // error  response has highest priority
+            {
+                if     (r_dma_cmd_to_dma_rsp_req.read())      r_dma_rsp_fsm = DMA_RSP_PUT_ERR;
+                else if(p_vci_ini_ram.rspval.read())          r_dma_rsp_fsm = DMA_RSP_PUT_DMA;
+                else if(r_miss_wti_rsp_to_dma_rsp_req.read()) r_dma_rsp_fsm = DMA_RSP_PUT_WTI;
+                break;
+            }
+            ///////////////////////
+            case DMA_RSP_PUT_DMA:  // put one flit of the DMA response into FIFO
+            {
+                dma_rsp_fifo_put    = true;
+                dma_rsp_fifo_rerror = p_vci_ini_ram.rerror.read();
+                dma_rsp_fifo_rdata  = p_vci_ini_ram.rdata.read();
+                dma_rsp_fifo_rsrcid = m_srcid_lid_mask[p_vci_ini_ram.rsrcid.read()];
+                dma_rsp_fifo_rtrdid = p_vci_ini_ram.rtrdid.read();
+                dma_rsp_fifo_rpktid = p_vci_ini_ram.rpktid.read();
+                dma_rsp_fifo_reop   = p_vci_ini_ram.reop.read();
+
+                // update priority
+                if ( p_vci_ini_ram.reop.read() ) r_dma_rsp_fsm = DMA_RSP_IDLE_WTI;
+
+#if DEBUG_DMA_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_RSP_PUT_DMA> Push DMA response into DMA_RSP FIFO"
+          << std::hex
+          << " : rsrcid = " << m_srcid_lid_mask[p_vci_ini_ram.rsrcid.read()]
+          << " / rtrdid = " << p_vci_ini_ram.rtrdid.read()
+          << " / rpktid = " << p_vci_ini_ram.rpktid.read()
+          << " / rdata = "  << p_vci_ini_ram.rdata.read()
+          << " / rerror = " << p_vci_ini_ram.rerror.read()
+          << " / reop = "   << p_vci_ini_ram.reop.read() << std::endl;
+#endif
+                break;
+            }
+            ///////////////////////
+            case DMA_RSP_PUT_WTI:  // put single flit WTI response into FIFO
+            {
+                dma_rsp_fifo_put    = true;
+                dma_rsp_fifo_rerror = r_miss_wti_rsp_to_dma_rsp_rerror.read();
+                dma_rsp_fifo_rdata  = 0;
+                dma_rsp_fifo_rsrcid = 
+                    m_srcid_lid_mask[r_miss_wti_rsp_to_dma_rsp_rsrcid.read()];
+                dma_rsp_fifo_rtrdid = r_miss_wti_rsp_to_dma_rsp_rtrdid.read();
+                dma_rsp_fifo_rpktid = r_miss_wti_rsp_to_dma_rsp_rpktid.read();
+                dma_rsp_fifo_reop   = true;
+
+                // acknowledge request
+                r_miss_wti_rsp_to_dma_rsp_req = false;
+
+                // update priority
+                r_dma_rsp_fsm = DMA_RSP_IDLE_ERR;
+
+#if DEBUG_DMA_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_RSP_PUT_WTI> Push WTI response into DMA_RSP FIFO"
+          << std::hex
+          << " : rsrcid = " << m_srcid_lid_mask[r_miss_wti_rsp_to_dma_rsp_rsrcid.read()]
+          << " / rtrdid = " << r_miss_wti_rsp_to_dma_rsp_rtrdid.read()
+          << " / rpktid = " << r_miss_wti_rsp_to_dma_rsp_rpktid.read()
+          << " / rdata = "  << 0
+          << " / rerror = " << r_miss_wti_rsp_to_dma_rsp_rerror.read()
+          << " / reop = "   << true << std::endl;
+#endif
+                break;
+            }
+            ///////////////////////
+            case DMA_RSP_PUT_ERR:  // put sinfle flit error response into FIFO
+            {
+                dma_rsp_fifo_put    = true;
+                dma_rsp_fifo_rerror = 0x1;
+                dma_rsp_fifo_rdata  = 0;
+                dma_rsp_fifo_rsrcid = r_dma_cmd_to_dma_rsp_rsrcid.read();
+                dma_rsp_fifo_rtrdid = r_dma_cmd_to_dma_rsp_rtrdid.read();
+                dma_rsp_fifo_rpktid = r_dma_cmd_to_dma_rsp_rpktid.read();
+                dma_rsp_fifo_reop   = true;
+
+                // acknowledge request
+                r_dma_cmd_to_dma_rsp_req = false;
+
+                // update priority
+                r_dma_rsp_fsm = DMA_RSP_PUT_DMA;
+
+#if DEBUG_DMA_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB DMA_RSP_PUT_DMA> Push IOMMU ERROR response into DMA_RSP FIFO"
+          << " : rsrcid = " << std::hex << r_dma_cmd_to_dma_rsp_rsrcid.read()
+          << " / rtrdid = " << r_dma_cmd_to_dma_rsp_rtrdid.read()
+          << " / rpktid = " << r_dma_cmd_to_dma_rsp_rpktid.read()
+          << " / rdata = "  << 0
+          << " / rerror = " << r_dma_cmd_to_dma_rsp_rerror.read()
+          << " / reop = "   << true << std::endl;
+#endif
+                break;
+            }
+        } // end switch DMA_RSP FSM
+    }  // end if FIFO full
+
+
+    //////////////////////////////////////////////////////////////////////////////////
+    // The TLB FSM handles the TLB miss requests from DMA_CMD FSM,
+    // and the PTE inval request (from CONFIG_CMD FSM).
+    // PTE inval request have highest priority. In case of TLB miss,
+    // this fsm searchs the requested PTE on the prefetch buffer.
+    // In case of buffer miss,  it request the MISS_WTI FSM to access the memory.
+    // It bypass the first level page table access if possible.
+    // It reset the r_dma_cmd_to_tlb_req flip-flop to signal TLB miss completion.
+    // An unexpected, but possible page fault is signaled in r_tlb_miss_error flip_flop.
+    ////////////////////////////////////////////////////////////////////////////////////
+
+    switch (r_tlb_fsm.read())
+    {
+    //////////////
+    case TLB_IDLE:   // In case of TLB miss request, chek the prefetch buffer first
+                     // PTE inval request are handled as unmaskable interrupts
+    {
+        if ( r_config_cmd_to_tlb_req.read() ) // Request for a PTE invalidation
+        {
+            r_config_cmd_to_tlb_req  = false;
+            r_waiting_transaction    = false;
+            r_tlb_fsm                = TLB_INVAL_CHECK;
+        }
+
+        else if ( r_dma_cmd_to_tlb_req.read() )   // request for a TLB Miss
+        {
+            // Checking prefetch buffer
+            if( not r_tlb_buf_big_page )     // small page => PTE2
+            {
+                if( r_tlb_buf_valid &&         // Hit on prefetch buffer
+                    (r_tlb_buf_vaddr.read() ==
+                    (r_dma_cmd_to_tlb_vaddr.read()& ~PTE2_LINE_OFFSET & ~K_PAGE_OFFSET_MASK)))
+                {
+                    size_t   pte_offset = (r_dma_cmd_to_tlb_vaddr.read()& PTE2_LINE_OFFSET)>>12;
+                    uint32_t pte_flags  = r_tlb_buf_data[2*pte_offset];
+                    uint32_t pte_ppn    = r_tlb_buf_data[2*pte_offset+1];
+
+                    // Bit valid checking
+                    if ( not ( pte_flags & PTE_V_MASK) )    // unmapped
+                    {
+                        std::cout << "VCI_IO_BRIDGE ERROR : " << name()
+                                  << " Page Table entry unmapped" << std::endl;
+
+                        r_tlb_miss_error = true;
+                        r_dma_cmd_to_tlb_req    = false;
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_IDLE> PTE2 Unmapped" << std::hex
+          << " / paddr = " << r_tlb_paddr.read()
+          << " / PTE_FLAGS = " << pte_flags
+          << " / PTE_PPN = " << pte_ppn << std::endl;
+#endif
+                        break;
+                    }
+
+                    // valid PTE2 : we must update the TLB
+                    r_tlb_pte_flags = pte_flags;
+                    r_tlb_pte_ppn   = pte_ppn;
+                    r_tlb_fsm       = TLB_PTE2_SELECT;
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_IDLE> Hit on prefetch buffer: PTE2" << std::hex
+          << " / PTE_FLAGS = " << pte_flags
+          << " / PTE_PPN = " << pte_ppn << std::endl;
+#endif
+                    break;
+                }
+            }
+            else                             // big page => PTE1
+            {
+                if( r_tlb_buf_valid &&         // Hit on prefetch buffer
+                    (r_tlb_buf_vaddr.read() ==
+                    (r_dma_cmd_to_tlb_vaddr.read()& ~PTE1_LINE_OFFSET & ~M_PAGE_OFFSET_MASK )))
+                {
+                    size_t   pte_offset = (r_dma_cmd_to_tlb_vaddr.read()& PTE1_LINE_OFFSET)>>21;
+                    uint32_t pte_flags  = r_tlb_buf_data[pte_offset];
+
+                    // Bit valid checking
+                    if ( not ( pte_flags & PTE_V_MASK) )    // unmapped
+                    {
+                        std::cout << "VCI_IO_BRIDGE ERROR : " << name()
+                                  << " Page Table entry unmapped" << std::endl;
+
+                        r_tlb_miss_error = true;
+                        r_dma_cmd_to_tlb_req    = false;
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_IDLE> PTE1 Unmapped" << std::hex
+          << " / paddr = " << r_tlb_paddr.read()
+          << " / PTE = " << pte_flags << std::endl;
+#endif
+                        break;
+                    }
+
+                    // valid PTE1 : we must update the TLB
+                    r_tlb_pte_flags = pte_flags;
+                    r_tlb_fsm       = TLB_PTE1_SELECT;
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_PTE1_GET> Hit on prefetch buffer: PTE1" << std::hex
+          << " / paddr = " << r_tlb_paddr.read()
+          << std::hex << " / PTE1 = " << pte_flags << std::endl;
+#endif
+                    break;
+                }
+            }
+
+            // prefetch buffer miss
+            r_tlb_fsm = TLB_MISS;
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_IDLE> Miss on prefetch buffer"
+          << std::hex << " / vaddr = " << r_dma_cmd_to_tlb_vaddr.read() << std::endl;
+#endif
+        }
+        break;
+    }
+    //////////////
+    case TLB_MISS: // handling tlb miss
+    {
+        uint32_t    ptba = 0;
+        bool        bypass;
+        vci_addr_t  pte_paddr;
+
+#ifdef INSTRUMENTATION
+m_cpt_iotlbmiss_transaction++;
+#endif
+        // evaluate bypass in order to skip first level page table access
+        bypass = r_iotlb.get_bypass(r_dma_cmd_to_tlb_vaddr.read(), &ptba);
+
+        // Request MISS_WTI_FSM a transaction on INT Network
+        if ( not bypass )     // Read PTE1/PTD1 in XRAM
+        {
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_MISS> Read PTE1/PTD1 in memory" << std::endl;
+#endif
+            pte_paddr = (vci_addr_t)((r_iommu_ptpr.read()) << (INDEX1_NBITS+2)) |
+                        (vci_addr_t)((r_dma_cmd_to_tlb_vaddr.read() >> PAGE_M_NBITS) << 2);
+            r_tlb_paddr = pte_paddr;
+
+            r_tlb_to_miss_wti_cmd_req = true;
+            r_tlb_miss_type           = PTE1_MISS;
+            r_tlb_fsm                 = TLB_WAIT;
+        }
+        else                  // Read PTE2 in XRAM
+        {
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_MISS> Read PTE2 in memory" << std::endl;
+#endif
+            //&PTE2 = PTBA + IX2 * 8
+            pte_paddr = (vci_addr_t)ptba << PAGE_K_NBITS |
+                        (vci_addr_t)(r_dma_cmd_to_tlb_vaddr.read()&PTD_ID2_MASK)>>(PAGE_K_NBITS-3);
+
+            r_tlb_paddr = pte_paddr;
+
+            r_tlb_to_miss_wti_cmd_req = true;
+            r_tlb_miss_type           = PTE2_MISS;
+            r_tlb_fsm                 = TLB_WAIT;
+        }
+
+        break;
+    }
+    //////////////////
+    case TLB_PTE1_GET:  // Try to read a PT1 entry in the miss buffer
+    {
+
+        uint32_t  entry;
+
+        vci_addr_t line_number  = (vci_addr_t)((r_tlb_paddr.read())&(CACHE_LINE_MASK));
+        size_t word_position = (size_t)( ((r_tlb_paddr.read())&(~CACHE_LINE_MASK))>>2 );
+
+        // Hit test. Just to verify.
+        // Hit must happen, since we've just finished its' miss transaction
+        bool hit = (r_tlb_buf_valid && (r_tlb_buf_tag.read()== line_number) );
+        assert(hit and "Error: No hit on prefetch buffer after Miss Transaction");
+
+        entry = r_tlb_buf_data[word_position];
+
+        // Bit valid checking
+        if ( not ( entry & PTE_V_MASK) )    // unmapped
+        {
+            //must not occur!
+            std::cout << "IOMMU ERROR " << name() << "TLB_IDLE state" << std::endl
+                      << "The Page Table entry ins't valid (unmapped)" << std::endl;
+
+            r_tlb_miss_error       = true;
+            r_dma_cmd_to_tlb_req   = false;
+            r_tlb_fsm              = TLB_IDLE;
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+{
+    std::cout << name()
+              << "  <IOB DMA_PTE1_GET> First level entry Unmapped"
+              << std::hex << " / paddr = " << r_tlb_paddr.read()
+              << std::hex << " / PTE = " << entry << std::endl;
+}
+#endif
+                    break;
+        }
+
+        if( entry & PTE_T_MASK )    //  PTD : me must access PT2
+        {
+            // register bypass
+            r_iotlb.set_bypass( r_dma_cmd_to_tlb_vaddr.read(),
+                                entry & ((1 << (vci_param_int::N-PAGE_K_NBITS)) - 1),
+                                0); //nline, unused
+
+            // &PTE2 = PTBA + IX2 * 8
+            // ps: PAGE_K_NBITS corresponds also to the size of a second level page table
+            r_tlb_paddr = (vci_addr_t)(entry & ((1<<(vci_param_int::N-PAGE_K_NBITS))-1)) << PAGE_K_NBITS |
+                                (vci_addr_t)(((r_dma_cmd_to_tlb_vaddr.read() & PTD_ID2_MASK) >> PAGE_K_NBITS) << 3);
+
+            r_tlb_to_miss_wti_cmd_req = true;
+            r_tlb_miss_type           = PTE2_MISS;
+            r_tlb_fsm                 = TLB_WAIT;
+
+#ifdef INSTRUMENTATION
+m_cpt_iotlbmiss_transaction++;
+#endif
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_PTE1_GET> Success. Search PTE2" << std::hex
+          << " / PADDR = " << r_tlb_paddr.read()
+          << " / PTD = " << entry << std::endl;
+#endif
+        }
+        else            //  PTE1 :  we must update the IOTLB
+                        //  Should not occur if working only with small pages
+        {
+            r_tlb_pte_flags   = entry;
+            r_tlb_fsm  = TLB_PTE1_SELECT;
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_PTE1_GET> Success. Big page"
+          << std::hex << " / paddr = " << r_tlb_paddr.read()
+          << std::hex << " / PTE1 = " << entry << std::endl;
+#endif
+        }
+        break;
+    }
+    /////////////////////
+    case TLB_PTE1_SELECT:   // select a slot for PTE1
+    {
+        size_t  way;
+        size_t  set;
+
+        r_iotlb.select(  r_dma_cmd_to_tlb_vaddr.read(),
+                        true,  // PTE1
+                        &way,
+                        &set );
+#ifdef INSTRUMENTATION
+m_cpt_iotlb_read++;
+#endif
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_PTE1_SELECT> Select a slot in TLB"
+          << " / way = " << std::dec << way
+          << " / set = " << set << std::endl;
+#endif
+        r_tlb_way = way;
+        r_tlb_set = set;
+        r_tlb_fsm     = TLB_PTE1_UPDT;
+        break;
+    }
+    ///////////////////
+    case TLB_PTE1_UPDT:     // write a new PTE1 in tlb
+                            // not necessary to treat the L/R bit
+    {
+        uint32_t  pte   = r_tlb_pte_flags.read();
+
+        r_tlb_paddr = (vci_addr_t)( ((r_tlb_pte_flags.read() & PPN1_MASK) << 21)
+                        | (r_dma_cmd_to_tlb_vaddr.read()& M_PAGE_OFFSET_MASK) );
+
+        // update TLB
+        r_iotlb.write( true,        // 2M page
+                      pte,
+                      0,        // argument unused for a PTE1
+                      r_dma_cmd_to_tlb_vaddr.read(),
+                      r_tlb_way.read(),
+                      r_tlb_set.read(),
+                      0 );      //we set nline = 0
+
+#ifdef INSTRUMENTATION
+m_cpt_iotlb_write++;
+#endif
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+{
+std::cout << name()
+          << "  <IOB TLB_PTE1_UPDT> write PTE1 in TLB"
+          << " / set = " << std::dec << r_tlb_set.read()
+          << " / way = " << r_tlb_way.read() << std::endl;
+r_iotlb.printTrace();
+}
+#endif
+        // next state
+        r_tlb_fsm = TLB_RETURN; // exit sub-fsm
+        break;
+    }
+    //////////////////
+    case TLB_PTE2_GET:  // Try to read a PTE2 (64 bits) in the miss buffer
+    {
+        uint32_t    pte_flags;
+        uint32_t    pte_ppn;
+
+        vci_addr_t line_number  = (vci_addr_t)((r_tlb_paddr.read())&(CACHE_LINE_MASK));
+        size_t word_position = (size_t)( ((r_tlb_paddr.read())&(~CACHE_LINE_MASK))>>2 );
+
+
+        // Hit test. Just to verify.
+        bool hit = (r_tlb_buf_valid && (r_tlb_buf_tag.read()== line_number) );
+        assert(hit and "Error: No hit on prefetch buffer after Miss Transaction");
+        pte_flags= r_tlb_buf_data[word_position];
+        pte_ppn= r_tlb_buf_data[word_position+1]; //because PTE2 is 2 words long
+        // Bit valid checking
+        if ( not ( pte_flags & PTE_V_MASK) )    // unmapped
+        {
+            //must not occur!
+            std::cout << "IOMMU ERROR " << name() << "TLB_IDLE state" << std::endl
+                      << "The Page Table entry ins't valid (unmapped)" << std::endl;
+
+            r_tlb_miss_error       = true;
+            r_dma_cmd_to_tlb_req         = false;
+            r_tlb_fsm             = TLB_IDLE;
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_PTE2_GET> PTE2 Unmapped" << std::hex
+          << " / PADDR = " << r_tlb_paddr.read()
+          << " / PTE = " << pte_flags << std::endl;
+#endif
+            break;
+        }
+
+        r_tlb_pte_flags       = pte_flags;
+        r_tlb_pte_ppn         = pte_ppn;
+        r_tlb_fsm           = TLB_PTE2_SELECT;
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_PTE2_GET> Mapped" << std::hex
+          << " / PTE_FLAGS = " << pte_flags
+          << " / PTE_PPN = " << pte_ppn << std::endl;
+#endif
+        break;
+    }
+    ////////////////////////////
+    case TLB_PTE2_SELECT:    // select a slot for PTE2
+    {
+        size_t way;
+        size_t set;
+
+        r_iotlb.select( r_dma_cmd_to_tlb_vaddr.read(),
+                        false,  // PTE2
+                        &way,
+                        &set );
+#ifdef INSTRUMENTATION
+m_cpt_iotlb_read++;
+#endif
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_PTE2_SELECT> Select a slot in IOTLB:"
+          << " way = " << std::dec << way
+          << " / set = " << set << std::endl;
+#endif
+        r_tlb_way = way;
+        r_tlb_set = set;
+        r_tlb_fsm     = TLB_PTE2_UPDT;
+        break;
+    }
+    ///////////////////
+    case TLB_PTE2_UPDT:         // write a new PTE2 in tlb
+                                // not necessary to treat the L/R bit
+    {
+        uint32_t        pte_flags = r_tlb_pte_flags.read();
+        uint32_t        pte_ppn   = r_tlb_pte_ppn.read();
+
+        r_tlb_paddr = (vci_addr_t)( ((r_tlb_pte_ppn.read() & PPN2_MASK) << 12)
+                        | (r_dma_cmd_to_tlb_vaddr.read()& K_PAGE_OFFSET_MASK) );
+
+        // update TLB for a PTE2
+        r_iotlb.write( false,   // 4K page
+                       pte_flags,
+                       pte_ppn,
+                       r_dma_cmd_to_tlb_vaddr.read(),
+                       r_tlb_way.read(),
+                       r_tlb_set.read(),
+                       0 );     // nline = 0
+#ifdef INSTRUMENTATION
+m_cpt_iotlb_write++;
+#endif
+
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+{
+std::cout << name()
+          << "  <IOB TLB_PTE2_UPDT> write PTE2 in IOTLB"
+          << " / set = " << std::dec << r_tlb_set.read()
+          << " / way = " << r_tlb_way.read() << std::endl;
+r_iotlb.printTrace();
+}
+#endif
+        // next state
+        r_tlb_fsm = TLB_RETURN;
+        break;
+    }
+    //////////////
+    case TLB_WAIT:   // waiting completion of a miss transaction from MISS_WTI FSM
+                     // PTE inval request are handled as unmaskable interrupts
+    {
+        if ( r_config_cmd_to_tlb_req.read() ) // Request for a PTE invalidation
+        {
+            r_config_cmd_to_tlb_req = false;
+            r_waiting_transaction   = true;
+            r_tlb_fsm               = TLB_INVAL_CHECK;
+        }
+
+#ifdef INSTRUMENTATION
+m_cost_iotlbmiss_transaction++;
+#endif
+        if ( not r_tlb_to_miss_wti_cmd_req.read() ) //  Miss transaction completed
+        {
+            if ( r_miss_wti_rsp_error_miss.read() ) // bus error reported
+            {
+                r_miss_wti_rsp_error_miss = false;
+                r_tlb_miss_error          = true;
+                r_dma_cmd_to_tlb_req      = false;
+                r_tlb_fsm                 = TLB_IDLE;
+            }
+            else if(r_tlb_miss_type == PTE1_MISS)
+            {
+                r_tlb_fsm = TLB_PTE1_GET;
+            }
+            else
+            {
+                r_tlb_fsm = TLB_PTE2_GET;
+            }
+        }
+        break;
+    }
+    ////////////////
+    case TLB_RETURN:   // reset r_dma_cmd_to_tlb_req to signal TLB miss completion
+                       // possible errors are signaled through r_tlb_miss_error
+    {
+#if DEBUG_TLB_MISS
+if ( m_debug_activated )
+std::cout << name()
+          << "  <IOB TLB_RETURN> IOTLB MISS completed" << std::endl;
+#endif
+        r_dma_cmd_to_tlb_req  = false;
+        r_tlb_fsm = TLB_IDLE;
+        break;
+    }
+    /////////////////////
+    case TLB_INVAL_CHECK:   // request from CONFIG_FSM to invalidate all PTE in a given line
+                            // checks the necessity to invalidate prefetch buffer
+    {
+        // If a transaction is pending, no need to invalidate the prefetch
+        // We can ignore it, since we'll replace the line.
+        // The new line is necessarily up-to-date
+        if(!r_waiting_transaction.read() && r_tlb_buf_valid)
+        {
+            if(!r_tlb_buf_big_page)
+            {
+               if( r_tlb_buf_vaddr.read() ==
+                   (r_config_cmd_to_tlb_vaddr.read()& ~PTE2_LINE_OFFSET) )
+                // The virtual address corresponds to one entry on the buffer line
+                {
+                    r_tlb_buf_valid = false;   //change here for individual invalidation
+                }
+            }
+            else    // First level entries on buffer. Unused if only small pages
+            {
+               if( r_tlb_buf_vaddr.read() ==
+                   (r_config_cmd_to_tlb_vaddr.read()& ~PTE1_LINE_OFFSET) )
+                // The virtual address corresponds to one entry on the buffer line
+                {
+                    r_tlb_buf_valid = false;   //change here for individual invalidation
+                }
+            }
+        }
+
+        // Invalidation on IOTLB
+        r_iotlb.inval(r_config_cmd_to_tlb_vaddr.read());
+
+        if(r_waiting_transaction.read()) r_tlb_fsm =TLB_WAIT;
+        else r_tlb_fsm = TLB_IDLE;
+        break;
+    }
+    } //end switch r_tlb_fsm
+
+    ////////////////////////////////////////////////////////////////////////////////
+    // The CONFIG_CMD_FSM handles the VCI commands from the INT network.
+    // - it can be single flit config transactions
+    // - it can be multi-flits data transactions to ROM (read) or FBF (write).
+    // The write burst transactions must be serialised from 32 to 64 bits width.
+    // The configuration requests can be local (IO_BRIDGE config registers)
+    // or remote (config registers of peripherals on IOX network).
+    // - The local configuration segment is identified by the "special" atribute
+    //   in the mapping table.
+    // - All configuration requests are checked against segmentation violation.
+    // - In case of local config request, or in case of segmentation violation,
+    //   the FSM send a response request to CONFIG_RSP FSM.
+    // - In case of remote transaction, it put the VCI command in CONFIG_CMD fifo,
+    //   and this require two cycles per IOX flit in case of write burst.
+    ///////////////////////////////////////////////////////////////////////////////
+
+    switch( r_config_cmd_fsm.read() )
+    {
+    /////////////////////
+    case CONFIG_CMD_IDLE:   // A VCI INT command is always consumed in this state
+    {
+        if ( p_vci_tgt_int.cmdval.read() )
+        {
+
+#if DEBUG_CONFIG_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB CONFIG_CMD_IDLE> ### Config Command received" << std::endl
+          << "  address = " << std::hex << p_vci_tgt_int.address.read()
+          << " / srcid = " << p_vci_tgt_int.srcid.read()
+          << " / trdid = " << p_vci_tgt_int.trdid.read()
+          << " / pktid = " << p_vci_tgt_int.pktid.read()
+          << " / wdata = " << std::hex << p_vci_tgt_int.wdata.read()
+          << " / be = " << p_vci_tgt_int.be.read()
+          << " / plen = " << std::dec << p_vci_tgt_int.plen.read()
+          << " / eop = " << p_vci_tgt_int.eop.read() << std::endl;
+#endif
+            vci_addr_t paddr = p_vci_tgt_int.address.read();
+            bool       read  = (p_vci_tgt_int.cmd.read() == vci_param_int::CMD_READ);
+            uint32_t   cell  = (uint32_t)((paddr & 0x1FF)>>2);
+            bool       eop   = p_vci_tgt_int.eop.read();
+            bool       high  = (paddr & 0x4);
+            ext_data_t wdata = (ext_data_t)p_vci_tgt_int.wdata.read();
+            ext_be_t   be    = (ext_be_t)p_vci_tgt_int.be.read();
+
+            // chek segments
+            std::list<soclib::common::Segment>::iterator seg;
+            bool found   = false;
+            bool special = false;
+            for ( seg = m_int_seglist.begin() ;
+                  seg != m_int_seglist.end() and not found ; seg++ )
+            {
+                if ( seg->contains(paddr) )
+                {
+                   found   = true;
+                   special = seg->special();
+                }
+            }
+
+            if ( found and special )  // IO_BRIDGE itself
+            {
+                bool rerror = false;
+                int_data_t rdata;
+
+                assert( (be == 0xF) and
+                "ERROR in vci_io_bridge : BE must be 0xF for a config access");
+
+                assert( ( eop ) and
+                "ERROR in vci_io_bridge : local config access must be one flit");
+
+                if ( not read && (cell == IOB_IOMMU_PTPR) )       // WRITE PTPR
+                {
+                    r_iommu_ptpr = (uint32_t)wdata;
+                }
+                else if ( read && (cell == IOB_IOMMU_PTPR) )      // READ PTPR
+                {
+                    rdata = r_iommu_ptpr.read();
+                }
+                else if( not read && (cell == IOB_WTI_ENABLE))  // WRITE WTI_ENABLE
+                {
+                    r_iommu_wti_enable = wdata;
+                }
+                else if( read && (cell == IOB_WTI_ENABLE))       // READ WTI ENABLE
+                {
+                    rdata = r_iommu_wti_enable.read();
+                }
+                else if( read && (cell == IOB_IOMMU_BVAR))        // READ BVAR
+                {
+                    rdata = r_iommu_bvar.read();
+                }
+                else if( read && (cell == IOB_IOMMU_ETR))          // READ ETR
+                {
+                    rdata = r_iommu_etr.read();
+                }
+                else if( read && (cell == IOB_IOMMU_BAD_ID))      // READ BAD_ID
+                {
+                    rdata = r_iommu_bad_id.read();
+                }
+                else if( not read && (cell == IOB_INVAL_PTE))     // WRITE INVAL_PTE
+                {
+                    r_config_cmd_to_tlb_req   = true;
+                    r_config_cmd_to_tlb_vaddr = (uint32_t)wdata;
+                }
+                else if( not read && (cell == IOB_WTI_ADDR_LO)) // WRITE WTI_PADDR_LO
+                {
+                    r_iommu_wti_addr_lo = (vci_addr_t)wdata;
+                }
+                else if( read && (cell == IOB_WTI_ADDR_LO))    // READ WTI_PADDR_LO
+                {
+                    rdata = r_iommu_wti_addr_lo.read();
+                }
+                else if( not read && (cell == IOB_WTI_ADDR_HI)) // WRITE WTI_PADDR_HI
+                {
+                    r_iommu_wti_addr_hi = (vci_addr_t)wdata;
+                }
+                else if( read && (cell == IOB_WTI_ADDR_HI))    // READ WTI_PADDR_HI
+                {
+                    rdata = r_iommu_wti_addr_hi.read();
+                }
+                else   // Error: Wrong address, or invalid operation.
+                {
+                    rerror = true;
+                }
+                r_config_cmd_to_config_rsp_rerror = rerror;
+                r_config_cmd_to_config_rsp_rdata  = rdata;
+                r_config_cmd_to_config_rsp_rsrcid = p_vci_tgt_int.srcid.read();
+                r_config_cmd_to_config_rsp_rtrdid = p_vci_tgt_int.trdid.read();
+                r_config_cmd_to_config_rsp_rpktid = p_vci_tgt_int.pktid.read();
+                r_config_cmd_fsm                  = CONFIG_CMD_RSP;
+            }
+            else if ( found )                            // remote peripheral
+            {
+                // buffer VCI command
+                r_config_cmd_address = p_vci_tgt_int.address.read();
+                r_config_cmd_pktid   = p_vci_tgt_int.pktid.read();
+                r_config_cmd_plen    = p_vci_tgt_int.plen.read();
+                r_config_cmd_cmd     = p_vci_tgt_int.cmd.read();
+                r_config_cmd_cons    = p_vci_tgt_int.cons.read();
+                r_config_cmd_clen    = p_vci_tgt_int.clen.read();
+                r_config_cmd_wrap    = p_vci_tgt_int.wrap.read();
+                r_config_cmd_contig  = p_vci_tgt_int.contig.read();
+                r_config_cmd_cfixed  = p_vci_tgt_int.cfixed.read();
+                r_config_cmd_eop     = eop;
+                r_config_cmd_wdata   = (wdata << (high ? 32 : 0));
+                r_config_cmd_be      = (be << (high ? 4 : 0));
+
+                size_t tab_index;
+                if (m_iox_transaction_tab.full(tab_index))
+                {
+#ifdef INSTRUMENTATION
+m_cpt_trt_config_full++;
+#endif
+
+                    // wait for an empty slot in the IOX transaction table.
+                    // buffer SRCID and TRDID of VCI command to store them
+                    // later in IOX transaction table.
+                    r_config_cmd_srcid = p_vci_tgt_int.srcid.read();
+                    r_config_cmd_trdid = p_vci_tgt_int.trdid.read();
+                    r_config_cmd_fsm   = CONFIG_CMD_WAIT;
+                    break;
+                }
+
+                // TRDID in IOX interconnect is the translation table index
+                r_config_cmd_trdid = tab_index;
+
+                // create new entry in IOX transaction table
+                m_iox_transaction_tab.set( tab_index,
+                        p_vci_tgt_int.srcid.read(),
+                        p_vci_tgt_int.trdid.read());
+
+                if (eop) r_config_cmd_fsm = CONFIG_CMD_PUT;
+                else     r_config_cmd_fsm = CONFIG_CMD_HI;
+
+#if DEBUG_CONFIG_CMD
+if( m_debug_activated )
+{
+std::cout << name()
+          << "  <IOB CONFIG_CMD_IDLE> ### new entry in IOX transaction table"
+          << std::endl;
+m_iox_transaction_tab.printTrace();
+}
+#endif
+
+            }
+            else if ( eop )                                   // out of segment address
+            {
+                r_config_cmd_to_config_rsp_rerror = true;
+                r_config_cmd_to_config_rsp_rdata  = 0;
+                r_config_cmd_to_config_rsp_rsrcid = p_vci_tgt_int.srcid.read();
+                r_config_cmd_to_config_rsp_rtrdid = p_vci_tgt_int.trdid.read();
+                r_config_cmd_to_config_rsp_rpktid = p_vci_tgt_int.pktid.read();
+                r_config_cmd_fsm                  = CONFIG_CMD_RSP;
+            }
+        } // end if cmdval
+        break;
+    }
+    /////////////////////
+    case CONFIG_CMD_WAIT:
+    {
+        // wait for an empty slot in the translation table.
+        size_t tab_index;
+        if (m_iox_transaction_tab.full(tab_index))
+        {
+#ifdef INSTRUMENTATION
+m_cpt_trt_config_full_cost++;
+#endif
+            break;
+        }
+
+        // create new entry in IOX transaction table
+        m_iox_transaction_tab.set( tab_index,
+                r_config_cmd_srcid.read(),
+                r_config_cmd_trdid.read());
+
+        // TRDID in IOX interconnect is the translation table index
+        r_config_cmd_trdid = tab_index;
+        if (r_config_cmd_eop.read()) r_config_cmd_fsm = CONFIG_CMD_PUT;
+        else                         r_config_cmd_fsm = CONFIG_CMD_HI;
+
+#if DEBUG_CONFIG_CMD
+if( m_debug_activated )
+{
+std::cout << name()
+          << "  <IOB CONFIG_CMD_WAIT> ### new entry in IOX transaction table"
+          << std::endl;
+m_iox_transaction_tab.printTrace();
+}
+#endif
+        break;
+    }
+    /////////////////////
+    case CONFIG_CMD_HI:  // consume the second flit for a multi-flits write
+    {
+        if ( p_vci_tgt_int.cmdval.read() )
+        {
+            vci_addr_t paddr = p_vci_tgt_int.address.read();
+            bool       high  = ((paddr & 0x4) == 0x4);
+            bool       eop   = p_vci_tgt_int.eop.read();
+
+            assert( (paddr == r_config_cmd_address.read() + 4) and high and
+            "ERROR in vci_io_bridge : addresses must be contiguous in write burst" );
+
+            r_config_cmd_wdata = r_config_cmd_wdata.read() |
+                                 ((ext_data_t)p_vci_tgt_int.wdata.read()<<32);
+            r_config_cmd_be    = r_config_cmd_be.read() |
+                                 ((ext_be_t)p_vci_tgt_int.be.read()<<4);
+            r_config_cmd_eop   = eop;
+            r_config_cmd_fsm   = CONFIG_CMD_PUT;
+        }
+        break;
+    }
+    /////////////////////
+    case CONFIG_CMD_LO:  // consume the first flit for a multi-flits write
+    {
+        if ( p_vci_tgt_int.cmdval.read() )
+        {
+            vci_addr_t paddr = p_vci_tgt_int.address.read();
+            bool       high  = ((paddr & 0x4) == 0x4);
+            bool       eop   = p_vci_tgt_int.eop.read();
+
+            assert( (paddr == r_config_cmd_address.read() + 4) and !high and
+            "ERROR in vci_io_bridge : addresses must be contiguous in write burst" );
+
+            r_config_cmd_address = p_vci_tgt_int.address.read();
+            r_config_cmd_wdata   = (ext_data_t)p_vci_tgt_int.wdata.read();
+            r_config_cmd_be      = (ext_be_t)p_vci_tgt_int.be.read();
+            r_config_cmd_eop     = eop;
+
+            if (eop) r_config_cmd_fsm = CONFIG_CMD_PUT;
+            else     r_config_cmd_fsm = CONFIG_CMD_HI;
+        }
+        break;
+    }
+    ////////////////////
+    case CONFIG_CMD_PUT:   // post a command to CONFIG_CMD fifo (to IOX network)
+    {
+        config_cmd_fifo_put = true;
+
+        if ( m_config_cmd_addr_fifo.wok() )
+        {
+
+#if DEBUG_CONFIG_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB CONFIG_CMD_PUT> Transmit VCI command to IOX network"
+          << " : address = " << std::hex << r_config_cmd_address.read()
+          << " / srcid = " << m_iox_srcid
+          << " / trdid = " << r_config_cmd_trdid.read()
+          << " / eop = " << r_config_cmd_eop.read()
+          << std::endl;
+#endif
+            if (r_config_cmd_eop.read()) r_config_cmd_fsm = CONFIG_CMD_IDLE;
+            else                         r_config_cmd_fsm = CONFIG_CMD_LO;
+        }
+        break;
+    }
+    ////////////////////
+    case CONFIG_CMD_RSP:   // Post a request to CONFIG_RSP FSM,
+                           // if no previous pending request.
+                           // r_config_cmd_to_config_rsp_rerror
+                           // has been set in IDLE state.
+    {
+        if ( not r_config_cmd_to_config_rsp_req.read() )
+        {
+            r_config_cmd_to_config_rsp_req = true;
+
+#if DEBUG_CONFIG_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB CONFIG_CMD_RSP> Request a response to CONFIG_RSP FSM"
+          << " / error = " << r_config_cmd_to_config_rsp_rerror.read() << std::endl;
+#endif
+            r_config_cmd_fsm = CONFIG_CMD_IDLE;
+        }
+        break;
+    }
+    } // end switch CONFIG_CMD FSM
+
+    //////////////////////////////////////////////////////////////////////////////
+    // The CONFIG_RSP_FSM controls access to the CONFIG_RSP FIFO to INT network.
+    // It implements a round robin priority between 2 clients FSMs :
+    // - CONFIG_CMD : response to a local config command.
+    // - CONFIG_RSP : responses from peripherals on IOX network
+    // Regarding the responses from IOX network it handles both single flit
+    // config responses, and multi-flits read responses (ROM), where data must
+    // be serialised (64 bits -> 32 bits).
+    // Note: We use the VCI RPKTID field to distinguish between read cached
+    // (multi-flits response) and others (single flit response).
+    // The VCI response flit is only consumed in the PUT_UNC or PUT_HI states.
+    //////////////////////////////////////////////////////////////////////////////
+
+    // does nothing if FIFO full
+    if ( m_config_rsp_rerror_fifo.wok() )
+    {
+        switch( r_config_rsp_fsm.read() )
+        {
+            /////////////////////////
+            case CONFIG_RSP_IDLE_IOX:  // IOX requests have highest priority
+                                       // no flit on IOX network is consumed
+            {
+                if ( p_vci_ini_iox.rspval.read() )  // IOX request
+                {
+                    // recover srcid and trdid from the IOX transaction table
+                    size_t tab_index = (size_t)p_vci_ini_iox.rtrdid.read();
+                    r_config_rsp_rsrcid = m_iox_transaction_tab.readSrcid(tab_index);
+                    r_config_rsp_rtrdid = m_iox_transaction_tab.readTrdid(tab_index);
+
+                    // erase entry
+                    m_iox_transaction_tab.erase(tab_index);
+
+                    if ( (p_vci_ini_iox.rpktid.read() & 0x5) == 0x1 )   // multi-flits
+                    {
+                        r_config_rsp_fsm   = CONFIG_RSP_PUT_LO;
+                    }
+                    else                                                // single flit
+                    {
+                        r_config_rsp_fsm   = CONFIG_RSP_PUT_UNC;
+                    }
+#if DEBUG_CONFIG_RSP
+if( m_debug_activated )
+{
+std::cout << name()
+          << "  <IOB CONFIG_RSP_IDLE_IOX> ### remove entry in transaction table"
+          << std::endl;
+m_iox_transaction_tab.printTrace();
+}
+#endif
+                }
+                else if ( r_config_cmd_to_config_rsp_req.read() ) // LOCAL request
+                {
+                    r_config_rsp_fsm = CONFIG_RSP_PUT_LOC;
+                }
+                break;
+            }
+            /////////////////////////
+            case CONFIG_RSP_IDLE_LOC:  // LOCAL requests have highest priority
+                                       // no flit on IOX network is consumed
+            {
+                if ( r_config_cmd_to_config_rsp_req.read() ) // LOCAL request
+                {
+                    r_config_rsp_fsm = CONFIG_RSP_PUT_LOC;
+                }
+                else if ( p_vci_ini_iox.rspval.read() ) // IOX request
+                {
+                    // recover srcid and trdid from the IOX transaction table
+                    size_t tab_index = (size_t)p_vci_ini_iox.rtrdid.read();
+                    r_config_rsp_rsrcid = m_iox_transaction_tab.readSrcid(tab_index);
+                    r_config_rsp_rtrdid = m_iox_transaction_tab.readTrdid(tab_index);
+
+                    // erase entry
+                    m_iox_transaction_tab.erase(tab_index);
+
+                    if ( (p_vci_ini_iox.rpktid.read() & 0x5) == 0x1 )   // multi-flits
+                    {
+                        r_config_rsp_fsm   = CONFIG_RSP_PUT_LO;
+                    }
+                    else                                                // single flit
+                    {
+                        r_config_rsp_fsm   = CONFIG_RSP_PUT_UNC;
+                    }
+#if DEBUG_CONFIG_RSP
+if( m_debug_activated )
+{
+std::cout << name()
+          << "  <IOB CONFIG_RSP_IDLE_IOX> ### remove entry in transaction table"
+          << std::endl;
+m_iox_transaction_tab.printTrace();
+}
+#endif
+                }
+                break;
+            }
+            ////////////////////////
+            case CONFIG_RSP_PUT_LO:   // put 32 low bits into CONFIG_RSP fifo
+                                       // no flit on IOX network is consumed
+            {
+                config_rsp_fifo_put    = true;
+                config_rsp_fifo_rerror = p_vci_ini_iox.rerror.read();
+                config_rsp_fifo_rdata  = (uint32_t)p_vci_ini_iox.rdata.read();
+                config_rsp_fifo_rsrcid = r_config_rsp_rsrcid.read();
+                config_rsp_fifo_rtrdid = r_config_rsp_rtrdid.read();
+                config_rsp_fifo_rpktid = p_vci_ini_iox.rpktid.read();
+                config_rsp_fifo_reop   = false;
+
+                r_config_rsp_fsm   = CONFIG_RSP_PUT_HI;
+
+#if DEBUG_CONFIG_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB CONFIG_RSP_PUT_LO> Push multi-flit response into CONFIG_RSP FIFO"
+          << " / rsrcid = " << std::hex << r_config_rsp_rsrcid.read()
+          << " / rtrdid = " << r_config_rsp_rtrdid.read()
+          << " / rpktid = " << p_vci_ini_iox.rpktid.read()
+          << " / rdata = " << (uint32_t)p_vci_ini_iox.rdata.read()
+          << " / reop  = " << false
+          << " / rerror = " << p_vci_ini_iox.rerror.read() << std::endl;
+#endif
+                break;
+            }
+            ///////////////////////
+            case CONFIG_RSP_PUT_HI:    // put 32 high bits into CONFIG_RSP fifo
+                                   // flit on IOX network is consumed
+            {
+                config_rsp_fifo_put    = true;
+                config_rsp_fifo_rerror = p_vci_ini_iox.rerror.read();
+                config_rsp_fifo_rdata  = (uint32_t)(p_vci_ini_iox.rdata.read() >> 32);
+                config_rsp_fifo_rsrcid = r_config_rsp_rsrcid.read();
+                config_rsp_fifo_rtrdid = r_config_rsp_rtrdid.read();
+                config_rsp_fifo_rpktid = p_vci_ini_iox.rpktid.read();
+                config_rsp_fifo_reop   = p_vci_ini_iox.reop.read();
+
+                if( p_vci_ini_iox.reop.read() ) r_config_rsp_fsm = CONFIG_RSP_IDLE_LOC;
+                else                            r_config_rsp_fsm = CONFIG_RSP_PUT_LO;
+
+#if DEBUG_CONFIG_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB CONFIG_RSP_PUT_HI> Push multi-flit response into CONFIG_RSP FIFO"
+          << " / rsrcid = " << std::hex << r_config_rsp_rsrcid.read()
+          << " / rtrdid = " << r_config_rsp_rtrdid.read()
+          << " / rpktid = " << p_vci_ini_iox.rpktid.read()
+          << " / rdata = " << (uint32_t)(p_vci_ini_iox.rdata.read() >> 32)
+          << " / reop  = " << p_vci_ini_iox.reop.read()
+          << " / rerror = " << p_vci_ini_iox.rerror.read() << std::endl;
+#endif
+                break;
+            }
+            ////////////////////////
+            case CONFIG_RSP_PUT_UNC:   // put single flit into CONFIG_RSP fifo
+                                       // flit on IOX network is consumed
+            {
+                assert(  p_vci_ini_iox.reop.read() and
+                "ERROR in vci_io_bridge : a remote config response should be one flit");
+
+                config_rsp_fifo_put    = true;
+                config_rsp_fifo_rerror = p_vci_ini_iox.rerror.read();
+                config_rsp_fifo_rdata  = (uint32_t)p_vci_ini_iox.rdata.read();
+                config_rsp_fifo_rsrcid = r_config_rsp_rsrcid.read();
+                config_rsp_fifo_rtrdid = r_config_rsp_rtrdid.read();
+                config_rsp_fifo_rpktid = p_vci_ini_iox.rpktid.read();
+                config_rsp_fifo_reop   = true;
+
+                // update priority
+                r_config_rsp_fsm   = CONFIG_RSP_IDLE_LOC;
+
+#if DEBUG_CONFIG_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB CONFIG_RSP_PUT_UNC> Push single flit response into CONFIG_RSP FIFO"
+          << " / rsrcid = " << std::hex << r_config_rsp_rsrcid.read()
+          << " / rtrdid = " << r_config_rsp_rtrdid.read()
+          << " / rpktid = " << p_vci_ini_iox.rpktid.read()
+          << " / rdata = " << (uint32_t)p_vci_ini_iox.rdata.read()
+          << " / reop  = " << true
+          << " / rerror = " << p_vci_ini_iox.rerror.read() << std::endl;
+#endif
+                break;
+            }
+            ////////////////////////
+            case CONFIG_RSP_PUT_LOC:   // put single flit into CONFIG_RSP fifo
+                                       // no flit on IOX network is consumed
+            {
+                config_rsp_fifo_put    = true;
+                config_rsp_fifo_rerror = r_config_cmd_to_config_rsp_rerror.read();
+                config_rsp_fifo_rdata  = r_config_cmd_to_config_rsp_rdata.read();
+                config_rsp_fifo_rsrcid = r_config_cmd_to_config_rsp_rsrcid.read();
+                config_rsp_fifo_rtrdid = r_config_cmd_to_config_rsp_rtrdid.read();
+                config_rsp_fifo_rpktid = r_config_cmd_to_config_rsp_rpktid.read();
+                config_rsp_fifo_reop   = true;
+
+                // acknowledge request
+                r_config_cmd_to_config_rsp_req = false;
+
+                // update priority
+                r_config_rsp_fsm   = CONFIG_RSP_IDLE_IOX;
+
+#if DEBUG_CONFIG_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB CONFIG_RSP_PUT_UNC> Push single flit response into CONFIG_RSP FIFO"
+          << " / rsrcid = " << std::hex << r_config_cmd_to_config_rsp_rsrcid.read()
+          << " / rtrdid = " << r_config_cmd_to_config_rsp_rtrdid.read()
+          << " / rpktid = " << r_config_cmd_to_config_rsp_rpktid.read()
+          << " / rdata = "  << r_config_cmd_to_config_rsp_rdata.read()
+          << " / reop  = "  << true
+          << " / rerror = " << r_config_cmd_to_config_rsp_rerror.read() << std::endl;
+#endif
+                break;
+            }
+        } // end switch CONFIG_RSP FSM
+    } // end if FIFO full
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    // The MISS_WTI_CMD component is a combinational switch that push one single flit
+    // VCI command in the MISS_WTI FIFO to INT Network, depending on two clients :
+    // 1. MISS requests from TLB_MISS FSM :
+    //    These requests have highest priority because a TLB MISS is a blocking event
+    //    for the DMA FSM. The r_tlb_to_miss_wti_cmd_req flip-flop is reset by the
+    //    MISS_WTI_RSP FSM only when the response is received.
+    // 2. WTI requests from DMA_CMD FSM :
+    //    These requestsare non blocking events, and the r_dma_cmd_to_miss_wti_cmd_req
+    //    flip-flop is reset as soon as the WTI command has been sent.
+    //    There is two types of WTI requests:
+    //    - external WTI from peripherals on IOX network.
+    //    - internal WTI caused by illegal DMA requests.
+    ////////////////////////////////////////////////////////////////////////////////////
+
+    if ( r_tlb_to_miss_wti_cmd_req.read() and
+         m_miss_wti_cmd_addr_fifo.wok() )                   // put MISS READ
+    {
+        miss_wti_cmd_fifo_put     = true;
+        miss_wti_cmd_fifo_address = r_tlb_paddr.read();
+        miss_wti_cmd_fifo_wdata   = 0;
+        miss_wti_cmd_fifo_cmd     = vci_param_int::CMD_READ;
+        miss_wti_cmd_fifo_pktid   = PKTID_MISS;
+        miss_wti_cmd_fifo_srcid   = m_int_srcid;
+        miss_wti_cmd_fifo_trdid   = 0;
+
+#if DEBUG_MISS_WTI_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB MISS_WTI_CMD_WTI> push MISS TLB command into MISS_WTI FIFO"
+          << " / PADDR = " << miss_wti_cmd_fifo_address << std::endl;
+#endif
+
+    }
+    else if ( r_dma_cmd_to_miss_wti_cmd_req.read() and
+              m_miss_wti_cmd_addr_fifo.wok() )               // put WTI READ / WRITE
+    {
+        r_dma_cmd_to_miss_wti_cmd_req = false;
+
+        miss_wti_cmd_fifo_put     = true;
+        miss_wti_cmd_fifo_cmd     = r_dma_cmd_to_miss_wti_cmd_cmd.read();
+        miss_wti_cmd_fifo_address = r_dma_cmd_to_miss_wti_cmd_addr.read();
+        miss_wti_cmd_fifo_wdata   = r_dma_cmd_to_miss_wti_cmd_wdata.read();
+        miss_wti_cmd_fifo_srcid   = r_dma_cmd_to_miss_wti_cmd_srcid.read();
+        miss_wti_cmd_fifo_trdid   = r_dma_cmd_to_miss_wti_cmd_trdid.read();
+        miss_wti_cmd_fifo_pktid   = r_dma_cmd_to_miss_wti_cmd_pktid.read();
+
+#if DEBUG_MISS_WTI_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB MISS_WTI_CMD_WTI> push WTI command into MISS_WTI FIFO"
+          << " / CMD = " << miss_wti_cmd_fifo_cmd
+          << " / PADDR = " << miss_wti_cmd_fifo_address << std::endl;
+#endif
+
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    // The MISS_WTI_RSP FSM handles VCI responses from the INT network:
+    // - for a TLB MISS (multi-flits read transaction), the cache line
+    //   is written in r_tlb_buf_data[], and r_tlb_to_miss_wti_cmd_req flip-flop is reset.
+    // - for a WTI_IOX (single flit write transaction), the response must be
+    //   forwarded to the source peripheral on the INT network
+    // - for a WTI_MMU (single flit write transaction), there is nothing to do.
+    //
+    // TODO VCI addressing errors for TLB MISS or for WTI_MMU (i.e. kernel errors...)
+    // are registered in the r_miss_wti_rsp_error_miss & r_miss_wti_rsp_error_wti
+    // flip-flops, and simulation stops... They could be signaled to OS by a WTI.
+    ////////////////////////////////////////////////////////////////////////////////////
+
+    switch ( r_miss_wti_rsp_fsm.read() )
+    {
+        ///////////////////////
+        case MISS_WTI_RSP_IDLE:   // waiting a VCI response
+                                  // no VCI flit is consumed
+        {
+            if ( p_vci_ini_int.rspval.read() )
+            {
+                if ( p_vci_ini_int.rpktid.read() == PKTID_WTI_IOX )
+                {
+                    r_miss_wti_rsp_fsm   = MISS_WTI_RSP_WTI_IOX;
+                }
+                else if ( p_vci_ini_int.rpktid.read() == PKTID_WTI_MMU )
+                {
+                    r_miss_wti_rsp_fsm   = MISS_WTI_RSP_WTI_MMU;
+                }
+                else if ( p_vci_ini_int.rpktid.read() == PKTID_MISS )
+                {
+                    r_miss_wti_rsp_fsm   = MISS_WTI_RSP_MISS;
+                    r_miss_wti_rsp_count = 0;
+                }
+                else
+                {
+                    assert ( false and
+                    "VCI_IO_BRIDGE ERROR : illegal response type on INT network");
+                }
+            }
+            break;
+        }
+        //////////////////////////
+        case MISS_WTI_RSP_WTI_IOX:   // Handling response to a peripheral WTI
+                                     // consume VCI flit and transfer response
+                                     // to DMA_RSP FSM in dedicated registers
+                                     // if no pending previous request.
+        {
+            assert( p_vci_ini_int.reop.read() and
+            "VCI_IO_BRIDGE ERROR: WTI_IOX response should have one single flit" );
+
+            if ( not r_miss_wti_rsp_to_dma_rsp_req.read() ) // no previous pending request
+            {
+                r_miss_wti_rsp_to_dma_rsp_req    = true;
+                r_miss_wti_rsp_to_dma_rsp_rerror = p_vci_ini_int.rerror.read();
+                r_miss_wti_rsp_to_dma_rsp_rsrcid = p_vci_ini_int.rsrcid.read();
+                r_miss_wti_rsp_to_dma_rsp_rtrdid = p_vci_ini_int.rtrdid.read();
+                r_miss_wti_rsp_to_dma_rsp_rpktid = p_vci_ini_int.rpktid.read();
+
+                r_miss_wti_rsp_fsm = MISS_WTI_RSP_IDLE;
+
+#if DEBUG_MISS_WTI_RSP
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB MISS_WTI_RSP_WTI_IOX> Transfer response to a WTI_IOX" << std::endl;
+#endif
+            }
+            break;
+        }
+        //////////////////////////
+        case MISS_WTI_RSP_WTI_MMU:   // Handling response to an iommu WTI
+                                     // consume VCI flit and test VCI error.
+        {
+            assert( p_vci_ini_int.reop.read() and
+            "VCI_IO_BRIDGE ERROR: WTI_MMU response should have one single flit" );
+
+            if ( (p_vci_ini_int.rerror.read()&0x1) != 0 )  // error reported
+            {
+                // set the specific error flip-flop
+                r_miss_wti_rsp_error_wti = true;
+                assert( false and
+                "VCI_IO_BRIDGE ERROR: VCI error response for a WTI_MMU transaction");
+            }
+
+#if DEBUG_MISS_WTI_RSP
+if( m_debug_activated )
+std::cout << name()
+          << " <IOB MISS_WTI_RSP_WTI_MMU> Receive response to a WTI_MMU" << std::endl;
+#endif
+            break;
+        }
+        ///////////////////////
+        case MISS_WTI_RSP_MISS:   // Handling response to a TLB MISS
+                                  // write cache line in r_tlb_buf buffer
+                                  // and analyse possible VCI error
+                                  // VCI flit is consumed.
+        {
+            if ( p_vci_ini_int.rspval.read() )
+            {
+                if ( (p_vci_ini_int.rerror.read()&0x1) != 0 )  // error reported
+                {
+                    // set the specific error flip-flop
+                    r_miss_wti_rsp_error_miss = true;
+                    assert( false and
+                    "VCI_IO_BRIDGE ERROR: VCI error response for a TLB MISS transaction");
+
+                }
+                else                                           // no error
+                {
+
+#if DEBUG_MISS_WTI_CMD
+if( m_debug_activated )
+std::cout << name()
+          << "  <IOB MISS_WTI_RSP_MISS> Receive response to a TLB MISS"
+          << " / Count = " << r_miss_wti_rsp_count.read()
+          << " / Data = " << std::hex << p_vci_ini_int.rdata.read() << std::endl;
+#endif
+                    r_tlb_buf_data[r_miss_wti_rsp_count.read()] = p_vci_ini_int.rdata.read();
+                }
+
+                if ( p_vci_ini_int.reop.read() )               // last flit
+                {
+                    bool eop = p_vci_ini_int.eop.read();
+                    assert(((eop == (r_miss_wti_rsp_count.read() == (m_words-1)))) and
+                    "VCI_IO_BRIDGE ERROR: invalid length for a TLB MISS response");
+
+                    r_miss_wti_rsp_count      = 0;
+                    r_miss_wti_rsp_fsm        = MISS_WTI_RSP_IDLE;
+                    r_tlb_to_miss_wti_cmd_req = false;
+                }
+                else                                           // not the last flit
+                {
+                    r_miss_wti_rsp_count = r_miss_wti_rsp_count.read() + 1;
+                }
+            }
+            break;
+        }
+    } // end  switch r_miss_wti_rsp_fsm
+
+
+    ///////////////////////////////////////////////////////////
+    // DMA_CMD fifo update
+    // writer : DMA_CMD FSM
+    ///////////////////////////////////////////////////////////
+
+    m_dma_cmd_addr_fifo.update(   dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  r_dma_cmd_paddr.read() );   // address translation
+    m_dma_cmd_cmd_fifo.update(    dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.cmd.read() );
+    m_dma_cmd_contig_fifo.update( dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.contig.read() );
+    m_dma_cmd_cons_fifo.update(   dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.cons.read() );
+    m_dma_cmd_plen_fifo.update(   dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.plen.read() );
+    m_dma_cmd_wrap_fifo.update(   dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.wrap.read() );
+    m_dma_cmd_cfixed_fifo.update( dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.cfixed.read() );
+    m_dma_cmd_clen_fifo.update(   dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.clen.read() );
+    m_dma_cmd_srcid_fifo.update(  dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  dma_cmd_fifo_srcid );
+    m_dma_cmd_trdid_fifo.update(  dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.trdid.read() );
+    m_dma_cmd_pktid_fifo.update(  dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.pktid.read() );
+    m_dma_cmd_data_fifo.update(   dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.wdata.read() );
+    m_dma_cmd_be_fifo.update(     dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.be.read() );
+    m_dma_cmd_eop_fifo.update(    dma_cmd_fifo_get,
+                                  dma_cmd_fifo_put,
+                                  p_vci_tgt_iox.eop.read() );
+
+    //////////////////////////////////////////////////////////////
+    // DMA_RSP fifo update
+    // writer : DMA_RSP FSM
+    //////////////////////////////////////////////////////////////
+
+    m_dma_rsp_data_fifo.update(   dma_rsp_fifo_get,
+                                  dma_rsp_fifo_put,
+                                  dma_rsp_fifo_rdata );
+    m_dma_rsp_rsrcid_fifo.update( dma_rsp_fifo_get,
+                                  dma_rsp_fifo_put,
+                                  dma_rsp_fifo_rsrcid );
+    m_dma_rsp_rtrdid_fifo.update( dma_rsp_fifo_get,
+                                  dma_rsp_fifo_put,
+                                  dma_rsp_fifo_rtrdid );
+    m_dma_rsp_rpktid_fifo.update( dma_rsp_fifo_get,
+                                  dma_rsp_fifo_put,
+                                  dma_rsp_fifo_rpktid );
+    m_dma_rsp_reop_fifo.update(   dma_rsp_fifo_get,
+                                  dma_rsp_fifo_put,
+                                  dma_rsp_fifo_reop );
+    m_dma_rsp_rerror_fifo.update( dma_rsp_fifo_get,
+                                  dma_rsp_fifo_put,
+                                  dma_rsp_fifo_rerror );
+
+    ////////////////////////////////////////////////////////////////
+    // CONFIG_CMD fifo update
+    // writer : CONFIG_CMD FSM
+    ////////////////////////////////////////////////////////////////
+
+    m_config_cmd_addr_fifo.update(   config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_address.read() );
+    m_config_cmd_cmd_fifo.update(    config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_cmd.read() );
+    m_config_cmd_contig_fifo.update( config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_contig.read() );
+    m_config_cmd_cons_fifo.update(   config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_cons.read() );
+    m_config_cmd_plen_fifo.update(   config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_plen.read() );
+    m_config_cmd_wrap_fifo.update(   config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_wrap.read() );
+    m_config_cmd_cfixed_fifo.update( config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_cfixed.read() );
+    m_config_cmd_clen_fifo.update(   config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_clen.read() );
+    m_config_cmd_trdid_fifo.update(  config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_trdid.read() );
+    m_config_cmd_pktid_fifo.update(  config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_pktid.read() );
+    m_config_cmd_data_fifo.update(   config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_wdata.read() );
+    m_config_cmd_be_fifo.update(     config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_be.read() );
+    m_config_cmd_eop_fifo.update(    config_cmd_fifo_get,
+                                     config_cmd_fifo_put,
+                                     r_config_cmd_eop.read() );
+
+    //////////////////////////////////////////////////////////////////////////
+    // CONFIG_RSP fifo update
+    // writer : CONFIG_RSP FSM
+    //////////////////////////////////////////////////////////////////////////
+
+    m_config_rsp_data_fifo.update(   config_rsp_fifo_get,
+                                     config_rsp_fifo_put,
+                                     config_rsp_fifo_rdata );
+    m_config_rsp_rsrcid_fifo.update( config_rsp_fifo_get,
+                                     config_rsp_fifo_put,
+                                     config_rsp_fifo_rsrcid );
+    m_config_rsp_rtrdid_fifo.update( config_rsp_fifo_get,
+                                     config_rsp_fifo_put,
+                                     config_rsp_fifo_rtrdid );
+    m_config_rsp_rpktid_fifo.update( config_rsp_fifo_get,
+                                     config_rsp_fifo_put,
+                                     config_rsp_fifo_rpktid );
+    m_config_rsp_reop_fifo.update(   config_rsp_fifo_get,
+                                     config_rsp_fifo_put,
+                                     config_rsp_fifo_reop );
+    m_config_rsp_rerror_fifo.update( config_rsp_fifo_get,
+                                     config_rsp_fifo_put,
+                                     config_rsp_fifo_rerror );
+
+    ////////////////////////////////////////////////////////////////
+    // MISS_WTI_CMD fifo update
+    // One writer : MISS_WTI switch
+    ////////////////////////////////////////////////////////////////
+
+    m_miss_wti_cmd_addr_fifo.update(   miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       miss_wti_cmd_fifo_address );
+    m_miss_wti_cmd_cmd_fifo.update(    miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       miss_wti_cmd_fifo_cmd );
+    m_miss_wti_cmd_contig_fifo.update( config_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       true );
+    m_miss_wti_cmd_cons_fifo.update(   miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       false );
+    m_miss_wti_cmd_plen_fifo.update(   miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       4 );
+    m_miss_wti_cmd_wrap_fifo.update(   miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       false );
+    m_miss_wti_cmd_cfixed_fifo.update( config_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       false );
+    m_miss_wti_cmd_clen_fifo.update(   miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       0 );
+    m_miss_wti_cmd_srcid_fifo.update(  miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       miss_wti_cmd_fifo_srcid );
+    m_miss_wti_cmd_trdid_fifo.update(  miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       miss_wti_cmd_fifo_trdid );
+    m_miss_wti_cmd_pktid_fifo.update(  miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       miss_wti_cmd_fifo_pktid );
+    m_miss_wti_cmd_data_fifo.update(   miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       miss_wti_cmd_fifo_wdata );
+    m_miss_wti_cmd_be_fifo.update(     miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       0xF );
+    m_miss_wti_cmd_eop_fifo.update(    miss_wti_cmd_fifo_get,
+                                       miss_wti_cmd_fifo_put,
+                                       true );
+
+} // end transition()
+
+//////////////////////////////////////////////////////////////////////////
+tmpl(void)::genMoore()
+//////////////////////////////////////////////////////////////////////////
+{
+    /////////////////  p_vci_ini_ram  /////////////////////////////
+
+    // VCI initiator command on RAM network
+    // directly the content of the dma_cmd FIFO
+    p_vci_ini_ram.cmdval  = m_dma_cmd_addr_fifo.rok();
+    p_vci_ini_ram.address = m_dma_cmd_addr_fifo.read();
+    p_vci_ini_ram.be      = m_dma_cmd_be_fifo.read();
+    p_vci_ini_ram.cmd     = m_dma_cmd_cmd_fifo.read();
+    p_vci_ini_ram.contig  = m_dma_cmd_contig_fifo.read();
+    p_vci_ini_ram.wdata   = m_dma_cmd_data_fifo.read();
+    p_vci_ini_ram.eop     = m_dma_cmd_eop_fifo.read();
+    p_vci_ini_ram.cons    = m_dma_cmd_cons_fifo.read();
+    p_vci_ini_ram.plen    = m_dma_cmd_plen_fifo.read();
+    p_vci_ini_ram.wrap    = m_dma_cmd_wrap_fifo.read();
+    p_vci_ini_ram.cfixed  = m_dma_cmd_cfixed_fifo.read();
+    p_vci_ini_ram.clen    = m_dma_cmd_clen_fifo.read();
+    p_vci_ini_ram.trdid   = m_dma_cmd_trdid_fifo.read();
+    p_vci_ini_ram.pktid   = m_dma_cmd_pktid_fifo.read();
+    p_vci_ini_ram.srcid   = m_dma_cmd_srcid_fifo.read();
+
+    // VCI initiator response on the RAM Network
+    // depends on the DMA_RSP FSM state
+    p_vci_ini_ram.rspack = m_dma_rsp_data_fifo.wok() and
+                           (r_dma_rsp_fsm.read() == DMA_RSP_PUT_DMA);
+
+    /////////////////  p_vci_tgt_iox  /////////////////////////////
+
+    // VCI target response on IOX network is
+    // directly the content of the DMA_RSP FIFO
+    p_vci_tgt_iox.rspval  = m_dma_rsp_data_fifo.rok();
+    p_vci_tgt_iox.rsrcid  = m_dma_rsp_rsrcid_fifo.read();
+    p_vci_tgt_iox.rtrdid  = m_dma_rsp_rtrdid_fifo.read();
+    p_vci_tgt_iox.rpktid  = m_dma_rsp_rpktid_fifo.read();
+    p_vci_tgt_iox.rdata   = m_dma_rsp_data_fifo.read();
+    p_vci_tgt_iox.rerror  = m_dma_rsp_rerror_fifo.read();
+    p_vci_tgt_iox.reop    = m_dma_rsp_reop_fifo.read();
+
+    // VCI target command ack on IOX network
+    // depends on the DMA_CMD FSM state
+    switch ( r_dma_cmd_fsm.read() )
+    {
+        case DMA_CMD_IDLE:
+             p_vci_tgt_iox.cmdack  = false;
+             break;
+        case DMA_CMD_DMA_REQ:
+             p_vci_tgt_iox.cmdack  = m_dma_cmd_addr_fifo.wok();
+             break;
+        case DMA_CMD_WTI_IOX_REQ:
+             p_vci_tgt_iox.cmdack  = not r_dma_cmd_to_miss_wti_cmd_req.read();
+             break;
+        case DMA_CMD_ERR_WTI_REQ:
+             p_vci_tgt_iox.cmdack  = false;
+             break;
+        case DMA_CMD_ERR_WAIT_EOP:
+             p_vci_tgt_iox.cmdack  = true;
+             break;
+        case DMA_CMD_ERR_RSP_REQ:
+             p_vci_tgt_iox.cmdack  = false;
+             break;
+        case DMA_CMD_TLB_MISS_WAIT:
+             p_vci_tgt_iox.cmdack  = false;
+             break;
+    }
+
+    //////////////////  p_vci_ini_iox  /////////////////////////////
+
+    // VCI initiator command on IOX network is
+    // directly the content of the CONFIG_CMD FIFO
+    p_vci_ini_iox.cmdval  = m_config_cmd_addr_fifo.rok();
+    p_vci_ini_iox.address = m_config_cmd_addr_fifo.read();
+    p_vci_ini_iox.be      = m_config_cmd_be_fifo.read();
+    p_vci_ini_iox.cmd     = m_config_cmd_cmd_fifo.read();
+    p_vci_ini_iox.contig  = m_config_cmd_contig_fifo.read();
+    p_vci_ini_iox.wdata   = m_config_cmd_data_fifo.read();
+    p_vci_ini_iox.eop     = m_config_cmd_eop_fifo.read();
+    p_vci_ini_iox.cons    = m_config_cmd_cons_fifo.read();
+    p_vci_ini_iox.plen    = m_config_cmd_plen_fifo.read();
+    p_vci_ini_iox.wrap    = m_config_cmd_wrap_fifo.read();
+    p_vci_ini_iox.cfixed  = m_config_cmd_cfixed_fifo.read();
+    p_vci_ini_iox.clen    = m_config_cmd_clen_fifo.read();
+    p_vci_ini_iox.trdid   = m_config_cmd_trdid_fifo.read();
+    p_vci_ini_iox.pktid   = m_config_cmd_pktid_fifo.read();
+    p_vci_ini_iox.srcid   = m_iox_srcid;
+
+    // VCI initiator response on IOX Network
+    // it depends on the CONFIG_RSP FSM state
+    p_vci_ini_iox.rspack = m_config_rsp_data_fifo.wok() and
+                           ( (r_config_rsp_fsm.read() == CONFIG_RSP_PUT_UNC) or
+                             (r_config_rsp_fsm.read() == CONFIG_RSP_PUT_HI) );
+
+    /////////////////  p_vci_tgt_int  ////////////////////////////////
+
+    // VCI target response on INT network
+    // directly the content of the CONFIG_RSP FIFO
+    p_vci_tgt_int.rspval  = m_config_rsp_data_fifo.rok();
+    p_vci_tgt_int.rsrcid  = m_config_rsp_rsrcid_fifo.read();
+    p_vci_tgt_int.rtrdid  = m_config_rsp_rtrdid_fifo.read();
+    p_vci_tgt_int.rpktid  = m_config_rsp_rpktid_fifo.read();
+    p_vci_tgt_int.rdata   = m_config_rsp_data_fifo.read();
+    p_vci_tgt_int.rerror  = m_config_rsp_rerror_fifo.read();
+    p_vci_tgt_int.reop    = m_config_rsp_reop_fifo.read();
+
+    // VCI target command ack on INT network
+    // it depends on the CONFIG_CMD FSM state
+    switch ( r_config_cmd_fsm.read() )
+    {
+    case CONFIG_CMD_IDLE:
+        p_vci_tgt_int.cmdack = true;
+        break;
+    case CONFIG_CMD_WAIT:
+        p_vci_tgt_int.cmdack = false;
+        break;
+    case CONFIG_CMD_HI:
+        p_vci_tgt_int.cmdack = true;
+        break;
+    case CONFIG_CMD_LO:
+        p_vci_tgt_int.cmdack = true;
+        break;
+    case CONFIG_CMD_PUT:
+        p_vci_tgt_int.cmdack = false;
+        break;
+    case CONFIG_CMD_RSP:
+        p_vci_tgt_int.cmdack = false;
+        break;
+    }
+
+    /////////////////  p_vci_ini_int  ////////////////////////////////
+
+    // VCI initiator command  on INT network
+    // directly the content of the MISS_WTI_CMD FIFO
+    p_vci_ini_int.cmdval  = m_miss_wti_cmd_addr_fifo.rok();
+    p_vci_ini_int.address = m_miss_wti_cmd_addr_fifo.read();
+    p_vci_ini_int.be      = m_miss_wti_cmd_be_fifo.read();
+    p_vci_ini_int.cmd     = m_miss_wti_cmd_cmd_fifo.read();
+    p_vci_ini_int.contig  = m_miss_wti_cmd_contig_fifo.read();
+    p_vci_ini_int.wdata   = m_miss_wti_cmd_data_fifo.read();
+    p_vci_ini_int.eop     = m_miss_wti_cmd_eop_fifo.read();
+    p_vci_ini_int.cons    = m_miss_wti_cmd_cons_fifo.read();
+    p_vci_ini_int.plen    = m_miss_wti_cmd_plen_fifo.read();
+    p_vci_ini_int.wrap    = m_miss_wti_cmd_wrap_fifo.read();
+    p_vci_ini_int.cfixed  = m_miss_wti_cmd_cfixed_fifo.read();
+    p_vci_ini_int.clen    = m_miss_wti_cmd_clen_fifo.read();
+    p_vci_ini_int.trdid   = m_miss_wti_cmd_trdid_fifo.read();
+    p_vci_ini_int.pktid   = m_miss_wti_cmd_pktid_fifo.read();
+    p_vci_ini_int.srcid   = m_miss_wti_cmd_srcid_fifo.read();
+
+    // VCI initiator response on INT network
+    // It depends on the MISS_WTI_RSP FSM state
+
+    if ( r_miss_wti_rsp_fsm.read() == MISS_WTI_RSP_IDLE )
+    {
+        p_vci_ini_int.rspack = false;
+    }
+    else if ( r_miss_wti_rsp_fsm.read() == MISS_WTI_RSP_WTI_IOX )
+    {
+        p_vci_ini_int.rspack = not r_miss_wti_rsp_to_dma_rsp_req.read();
+    }
+    else  //  MISS_WTI_RSP_MISS or MISS_WTI_RESP_WTI_MMU
+    {
+        p_vci_ini_int.rspack = true;
+    }
+
+} // end genMoore
+
+}}
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/vci_io_bridge/include/soclib/io_bridge.h
===================================================================
--- /branches/fault_tolerance/modules/vci_io_bridge/include/soclib/io_bridge.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_io_bridge/include/soclib/io_bridge.h	(revision 724)
@@ -0,0 +1,71 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         alain greiner
+ *
+ * Maintainers: alain
+ */
+#ifndef IO_BRIDGE_REGS_H
+#define IO_BRIDGE_REGS_H
+
+// IOB Configuration registers
+// Minimal required segment size = 64 bytes (16 words)
+enum 
+{
+    IOB_IOMMU_PTPR       = 0,     // R/W  : Page Table Pointer Register
+    IOB_IOMMU_ACTIVE     = 1,     // R/W  : IOMMU activated if not 0
+    IOB_IOMMU_BVAR       = 2,     // R    : Bad Virtual Address
+    IOB_IOMMU_ETR        = 3,     // R    : Error type
+    IOB_IOMMU_BAD_ID     = 4,     // R    : Faulty peripheral Index (SRCID)
+    IOB_INVAL_PTE        = 5,     // W    : Invalidate PTE (using virtual address)
+    IOB_WTI_ENABLE       = 6,     // R/W  : Enable WTI (both IOB and external IRQs)
+    IOB_WTI_ADDR_LO      = 7,     // R/W  : IOB WTI address (32 LSB bits)
+    IOB_WTI_ADDR_HI      = 8,     // R/W  : IOB WTI address (32 MSB bits)
+    /**/
+    IOB_SPAN             = 16,                                
+};
+
+    
+// IOMMU Error Type
+enum mmu_error_type_e 
+{
+    MMU_NONE                      = 0x0000, // None
+    MMU_WRITE_ACCES_VIOLATION     = 0x0008, // Write access to non writable page 
+    MMU_WRITE_PT1_ILLEGAL_ACCESS  = 0x0040, // Write Bus Error accessing Table 1
+    MMU_READ_PT1_UNMAPPED 	      = 0x1001, // Read  Page fault on Page Table 1 
+    MMU_READ_PT2_UNMAPPED 	      = 0x1002, // Read  Page fault on Page Table 2 
+    MMU_READ_PT1_ILLEGAL_ACCESS   = 0x1040, // Read  Bus Error in Table1 access 
+    MMU_READ_PT2_ILLEGAL_ACCESS   = 0x1080, // Read  Bus Error in Table2 access
+    MMU_READ_DATA_ILLEGAL_ACCESS  = 0x1100, // Read  Bus Error in cache access 
+};
+
+#endif /* IO_BRIDGE_REGS_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_iox_network/caba/metadata/vci_iox_network.sd
===================================================================
--- /branches/fault_tolerance/modules/vci_iox_network/caba/metadata/vci_iox_network.sd	(revision 724)
+++ /branches/fault_tolerance/modules/vci_iox_network/caba/metadata/vci_iox_network.sd	(revision 724)
@@ -0,0 +1,44 @@
+
+# -*- python -*-
+
+Module('caba:vci_iox_network',
+	classname = 'soclib::caba::VciIoxNetwork',
+
+    tmpl_parameters = [
+	    parameter.Module('vci_param',  default = 'caba:vci_param'),
+	],
+
+    header_files = [
+        '../source/include/vci_iox_network.h',
+    ],
+
+    implementation_files = [
+        '../source/src/vci_iox_network.cpp',
+    ],
+
+    ports = [
+	    Port('caba:vci_initiator', 'p_to_local_tgt', parameter.Reference('nb_local_tgt')),
+	    Port('caba:vci_target',    'p_to_local_ini', parameter.Reference('nb_local_ini')),
+	    Port('caba:vci_initiator', 'p_to_global_tgt', parameter.Reference('nb_global_tgt')),
+	    Port('caba:vci_target',    'p_to_global_ini', parameter.Reference('nb_global_ini')),
+		Port('caba:bit_in',        'p_resetn', auto = 'resetn'),
+		Port('caba:clock_in',      'p_clk', auto = 'clock'),
+	],
+
+    instance_parameters = [
+        parameter.Module('mt', typename = 'common:mapping_table'),
+        parameter.Int('cluster_id'),
+        parameter.Int('nb_local_tgt'),
+        parameter.Int('nb_local_ini'),
+        parameter.Int('nb_global_tgt'),
+        parameter.Int('nb_global_ini'),
+	],
+
+    uses = [
+		Uses('caba:base_module'),
+		Uses('common:mapping_table'),
+		Uses('common:address_decoding_table', input_t = 'uint64_t', output_t = 'size_t'),
+		Uses('common:address_decoding_table', input_t = 'uint32_t', output_t = 'size_t'),
+		Uses('caba:vci_buffers'),
+	],
+)
Index: /branches/fault_tolerance/modules/vci_iox_network/caba/source/include/vci_iox_network.h
===================================================================
--- /branches/fault_tolerance/modules/vci_iox_network/caba/source/include/vci_iox_network.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_iox_network/caba/source/include/vci_iox_network.h	(revision 724)
@@ -0,0 +1,129 @@
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         Alain Greiner <nipo@ssji.net>, 2013
+ *
+ * Maintainers: alain
+ */
+
+////////////////////////////////////////////////////////////////////////////////
+// This component emulates an external IO bus such as PCIe or Hypertransport,
+// but respect the VCI protocol. It can be attached to one OR SEVERAL clusters,
+// using a vci_io_bridge component.
+// It is considered as a local interconnect, for the ADDRESS or SRCID
+// decoding tables: 
+// - the CMD routing_table decodes the local field of the VCI ADDRESS 
+//   to return the local target port
+// - The RSP routing_table decodes the local field of the VCI SRCID
+//   to return the initator port 
+// It is implemented as two independant crossbars, for VCI commands and 
+// VCI responses respectively.
+// - The CMD crossbar has nb_ini input ports, and nb_tgt output ports,
+//   including the ports to the vci_io_bridge component(s).
+// - The RSP crossbar has nb_tgt input ports, and nb_ini output ports.
+//   including the ports to the vci_io_bridge component(s).
+// For both crossbars, output ports allocation policy is round robin.
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef VCI_IOX_NETWORK_H
+#define VCI_IOX_NETWORK_H
+
+#include <systemc>
+#include "caba_base_module.h"
+#include "vci_initiator.h"
+#include "vci_target.h"
+#include "vci_buffers.h"
+#include "mapping_table.h"
+#include "address_decoding_table.h"
+
+namespace soclib { namespace caba {
+
+using namespace sc_core;
+using namespace soclib::common;
+
+template<typename pkt_t> class IoXbar;
+
+///////////////////////////////////////
+template<typename vci_param>
+class VciIoxNetwork
+///////////////////////////////////////
+    : public BaseModule
+{
+
+public:
+
+    sc_in<bool>                              p_clk;
+    sc_in<bool>                              p_resetn;
+    VciInitiator<vci_param>*                 p_to_tgt;
+    VciTarget<vci_param>*                    p_to_ini;
+
+private:
+
+    typedef IoXbar<VciCmdBuffer<vci_param> > cmd_xbar_t;
+    typedef IoXbar<VciRspBuffer<vci_param> > rsp_xbar_t;
+
+    size_t                                   m_nb_tgt;
+    size_t                                   m_nb_ini;
+
+    VciInitiator<vci_param>**                m_ports_to_target;
+    VciTarget<vci_param>**                   m_ports_to_initiator;
+
+  	rsp_xbar_t*                              m_rsp_xbar;  // RSP crossbar
+  	cmd_xbar_t*                              m_cmd_xbar;  // CMD crossbar
+
+    AddressDecodingTable<uint64_t,size_t>    m_cmd_rt;    // routing table for CMD
+    AddressDecodingTable<uint32_t,size_t>    m_rsp_rt;    // routing table for RSP
+
+    void transition();
+
+    void genMealy_cmd_val();
+    void genMealy_cmd_ack();
+    void genMealy_rsp_val();
+    void genMealy_rsp_ack();
+
+protected:
+    SC_HAS_PROCESS(VciIoxNetwork);
+
+public:
+    void print_trace();
+
+    VciIoxNetwork( sc_module_name                      name,
+				   const soclib::common::MappingTable  &mt,
+				   size_t                              nb_tgt,
+				   size_t                              nb_ini );
+
+    ~VciIoxNetwork();
+};
+
+}}
+
+#endif 
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/vci_iox_network/caba/source/src/vci_iox_network.cpp
===================================================================
--- /branches/fault_tolerance/modules/vci_iox_network/caba/source/src/vci_iox_network.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/vci_iox_network/caba/source/src/vci_iox_network.cpp	(revision 724)
@@ -0,0 +1,360 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         Alain Greiner <alain.greiner@lip6.fr> 2013
+ *
+ * Maintainers: alain
+ */
+
+////////////////////////////////////////////////////////////////////////////////
+// This component emulates an external IO bus such as PCIe or Hypertransport,
+// but respect the VCI protocol. It can be attached to one OR SEVERAL clusters,
+// using a vci_io_bridge component.
+// It is considered as a local interconnect, for the ADDRESS or SRCID
+// decoding tables: 
+// - the CMD routing_table decodes the local field of the VCI ADDRESS 
+//   to return the local target port
+// - The RSP routing_table decodes the local field of the VCI SRCID
+//   to return the initator port 
+// It is implemented as two independant crossbars, for VCI commands and 
+// VCI responses respectively.
+// - The CMD crossbar has nb_ini input ports, and nb_tgt output ports,
+//   including the ports to the vci_io_bridge component(s).
+// - The RSP crossbar has nb_tgt input ports, and nb_ini output ports.
+//   including the ports to the vci_io_bridge component(s).
+// For both crossbars, output ports allocation policy is round robin.
+////////////////////////////////////////////////////////////////////////////////
+
+#include <systemc>
+#include <cassert>
+#include "vci_buffers.h"
+#include "../include/vci_iox_network.h"
+#include "alloc_elems.h"
+
+namespace soclib { namespace caba {
+
+using soclib::common::alloc_elems;
+using soclib::common::dealloc_elems;
+
+using namespace sc_core;
+
+///////////////////////////////////////////////////////////////////////////////////
+// The IoXbar class is instanciated twice, to implement the CMD & RSP XBARs
+///////////////////////////////////////////////////////////////////////////////////
+template<typename pkt_t> class IoXbar
+{
+    // pkt_t type must be VciCmdBuffer<vci_param> or VciRspBuffer<vci_param>
+    // the two following types can be found in these two classes
+
+    typedef typename pkt_t::input_port_t    input_port_t;
+    typedef typename pkt_t::output_port_t   output_port_t;
+
+    const bool            m_is_cmd;         // CMD XBAR if true
+    const size_t          m_inputs;         // number of inputs 
+    const size_t          m_outputs;        // number of outputs 
+    void*                 m_rt;             // pointer on routing table (CMD or RSP)
+
+    sc_signal<bool>*      r_out_allocated;  // for each output: allocation state 
+    sc_signal<size_t>*    r_out_origin;     // for each output: input port index
+    sc_signal<bool>*      r_in_allocated;   // for each input: allocation state 
+    sc_signal<size_t>*    r_in_dest;        // for each input: output port index
+
+public:
+    ///////////////////////
+    IoXbar( bool   is_cmd, 
+            size_t nb_inputs,
+            size_t nb_outputs,
+            void*  rt )
+    : m_is_cmd( is_cmd ),
+      m_inputs( nb_inputs ),
+      m_outputs( nb_outputs ),
+      m_rt ( rt )
+    {
+        r_out_allocated = new sc_signal<bool>[nb_outputs];
+        r_out_origin    = new sc_signal<size_t>[nb_outputs];
+        r_in_allocated  = new sc_signal<bool>[nb_inputs];
+        r_in_dest       = new sc_signal<size_t>[nb_inputs];
+    }
+
+    ////////////
+    void reset()
+    {
+        for (size_t i=0 ; i<m_outputs ; ++i) 
+        {
+            r_out_origin[i]    = 0;
+            r_out_allocated[i] = false;
+        }
+        for (size_t i=0 ; i<m_inputs ; ++i) 
+        {
+            r_in_dest[i]      = 0;
+            r_in_allocated[i] = false;
+        }
+    }
+
+    //////////////////
+    void print_trace()
+    {
+        if ( m_is_cmd )
+        {
+            std::cout << "IOX_CMD_XBAR : " << std::dec;
+            for( size_t out=0 ; out<m_outputs ; out++)
+            {
+                if( r_out_allocated[out].read() ) 
+                {
+                    std::cout << "ini " << r_out_origin[out].read() 
+                              << " => tgt " << out << " | ";
+                }
+            }
+        }
+        else
+        {
+            std::cout << "IOX_RSP_XBAR : " << std::dec;
+            for( size_t out=0 ; out<m_outputs ; out++)
+            {
+                if( r_out_allocated[out].read() ) 
+                {
+                    std::cout << "tgt " << r_out_origin[out].read() 
+                              << " => ini " << out << " | ";
+                }
+            }
+        }
+        std::cout << std::endl;
+    }
+
+    ///////////////////////////////////////////
+    void transition( input_port_t  **input_port, 
+                     output_port_t **output_port )
+    {
+        // loop on the output ports
+        for ( size_t out = 0; out < m_outputs; out++) 
+        {
+            if ( r_out_allocated[out].read() )          // possible desallocation
+            {
+                if ( output_port[out]->toPeerEnd() )    
+                {
+                    size_t in = r_out_origin[out].read();
+                    r_out_allocated[out] = false;
+                    r_in_allocated[in]   = false;
+                }
+            } 
+            else                                        // possible allocation
+            {
+                // loop on the intput ports
+                bool found = false;
+                for(size_t x = 0 ; (x < m_inputs) and not found ; x++) 
+                {
+                    size_t in = (x + r_out_origin[out] + 1) % m_inputs;
+                    if ( input_port[in]->getVal() )
+                    {
+                        size_t req;       // requested output port index
+                        if ( m_is_cmd ) 
+                        {
+                            AddressDecodingTable<uint64_t, size_t>* rt = 
+                               (AddressDecodingTable<uint64_t, size_t>*)m_rt;
+                            req = rt->get_value((uint64_t)(input_port[in]->address.read())); 
+                        }
+                        else            
+                        {
+                            AddressDecodingTable<uint32_t, size_t>* rt = 
+                               (AddressDecodingTable<uint32_t, size_t>*)m_rt;
+                            req = rt->get_value((uint32_t)(input_port[in]->rsrcid.read())); 
+                        }
+                        // allocate the output port if requested
+                        if ( out == req )
+                        {
+                            r_out_allocated[out] = true;
+                            r_in_allocated[in]   = true;
+                            r_out_origin[out]    = in;
+                            r_in_dest[in]        = out;
+                            found                = true;
+                        }
+                    }
+                }  // end loop inputs
+            }
+        }  // end loop outputs
+    } // end transition
+
+    //////////////////////////////////////////////
+    void genMealy_ack( input_port_t  **input_port,
+                       output_port_t **output_port )
+    {
+        for ( size_t in = 0 ; in < m_inputs ; in++ )
+        {
+            size_t out = r_in_dest[in].read();
+            bool   ack = r_in_allocated[in].read() and output_port[out]->getAck();
+            input_port[in]->setAck(ack);
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+    void genMealy_val( input_port_t  **input_port, 
+                       output_port_t **output_port )
+    {
+        for( size_t out = 0 ; out < m_outputs ; out++) 
+        {
+            if (r_out_allocated[out]) 
+            {
+                size_t in = r_out_origin[out];
+                pkt_t tmp;
+                tmp.readFrom(*input_port[in]);
+                tmp.writeTo(*output_port[out]);
+            } 
+            else 
+            {
+                output_port[out]->setVal(false);
+            }
+        }
+    } 
+
+}; // end class IoXbar
+
+
+///////////////////////////////////////////////////////////////////////////////////
+#define tmpl(x) template<typename vci_param> x VciIoxNetwork<vci_param>
+///////////////////////////////////////////////////////////////////////////////////
+
+/////////////////////////
+tmpl(void)::print_trace()
+{
+    m_cmd_xbar->print_trace();
+    m_rsp_xbar->print_trace();
+}
+
+////////////////////////
+tmpl(void)::transition()
+{
+    if ( ! p_resetn.read() ) 
+    {
+        m_cmd_xbar->reset();
+        m_rsp_xbar->reset();
+        return;
+    }
+
+    m_cmd_xbar->transition( m_ports_to_initiator, m_ports_to_target );
+    m_rsp_xbar->transition( m_ports_to_target, m_ports_to_initiator );
+}
+
+//////////////////////////////
+tmpl(void)::genMealy_cmd_val()
+{
+    m_cmd_xbar->genMealy_val( m_ports_to_initiator, m_ports_to_target );
+}
+
+//////////////////////////////
+tmpl(void)::genMealy_cmd_ack()
+{
+    m_cmd_xbar->genMealy_ack( m_ports_to_initiator, m_ports_to_target );
+}
+
+//////////////////////////////
+tmpl(void)::genMealy_rsp_val()
+{
+    m_rsp_xbar->genMealy_val( m_ports_to_target, m_ports_to_initiator );
+}
+
+//////////////////////////////
+tmpl(void)::genMealy_rsp_ack()
+{
+    m_rsp_xbar->genMealy_ack( m_ports_to_target, m_ports_to_initiator );
+}
+
+///////////////////////////////////////////////////////////////////////////
+tmpl(/**/)::VciIoxNetwork( sc_core::sc_module_name             name,
+                           const soclib::common::MappingTable  &mt,
+                           size_t                              nb_tgt,
+                           size_t                              nb_ini )
+           : BaseModule(name),
+           p_clk("clk"),
+           p_resetn("resetn"),
+           p_to_tgt(soclib::common::alloc_elems<VciInitiator<vci_param> >(
+                          "p_to_tgt", nb_tgt)),
+           p_to_ini(soclib::common::alloc_elems<VciTarget<vci_param> >(
+                          "p_to_ini", nb_ini)),
+
+           m_nb_tgt( nb_tgt ),
+           m_nb_ini( nb_ini ),
+
+           m_cmd_rt( mt.getLocalIndexFromAddress(0) ),
+           m_rsp_rt( mt.getLocalIndexFromSrcid(0) )
+{
+    std::cout << "    Building VciIoxNetwork : " << name << std::endl;
+
+    SC_METHOD(transition);
+    dont_initialize();
+    sensitive << p_clk.pos();
+
+    SC_METHOD(genMealy_cmd_val);        // controls to targets CMDVAL
+    dont_initialize();
+    sensitive << p_clk.neg();
+    for ( size_t i=0; i<nb_ini; ++i )   sensitive << p_to_ini[i];
+
+    SC_METHOD(genMealy_cmd_ack);        // controls to intiators CMDACK
+    dont_initialize();
+    sensitive << p_clk.neg();
+    for ( size_t i=0; i<nb_tgt; ++i )   sensitive << p_to_tgt[i];
+
+    SC_METHOD(genMealy_rsp_val);        // controls to initiators RSPVAL
+    dont_initialize();
+    sensitive << p_clk.neg();
+    for ( size_t i=0; i<nb_tgt; ++i )   sensitive << p_to_tgt[i];
+
+    SC_METHOD(genMealy_rsp_ack);        // controls to targets RSPACK
+    dont_initialize();
+    sensitive << p_clk.neg();
+    for ( size_t i=0; i<nb_ini; ++i )   sensitive << p_to_ini[i];
+
+    // constructing CMD & RSP XBARs
+    m_rsp_xbar = new rsp_xbar_t( false,         // RSP XBAR
+                                 nb_tgt,
+                                 nb_ini,
+                                 &m_rsp_rt );
+
+    m_cmd_xbar = new cmd_xbar_t( true,          // CMD XBAR
+                                 nb_ini,
+                                 nb_tgt,
+                                 &m_cmd_rt );
+
+    // constructing  CMD & RSP XBARs input & output ports (pointers)
+    m_ports_to_initiator = new VciTarget<vci_param>*[nb_ini];
+    for (size_t g = 0 ; g < nb_ini ; g++) m_ports_to_initiator[g] = &p_to_ini[g];
+
+    m_ports_to_target = new VciInitiator<vci_param>*[nb_tgt];
+    for (size_t g = 0 ; g < nb_tgt ; g++) m_ports_to_target[g] = &p_to_tgt[g];
+}
+
+////////////////////////////
+tmpl(/**/)::~VciIoxNetwork()
+{
+    soclib::common::dealloc_elems(p_to_ini, m_nb_ini);
+    soclib::common::dealloc_elems(p_to_tgt, m_nb_tgt);
+}
+
+}}
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/vci_mem_cache/caba/metadata/vci_mem_cache.sd
===================================================================
--- /branches/fault_tolerance/modules/vci_mem_cache/caba/metadata/vci_mem_cache.sd	(revision 724)
+++ /branches/fault_tolerance/modules/vci_mem_cache/caba/metadata/vci_mem_cache.sd	(revision 724)
@@ -0,0 +1,77 @@
+
+# -*- python -*-
+
+__id__ = "$Id: vci_mem_cache.sd 295 2013-02-14 15:05:05Z cfuguet $"
+__version__ = "$Revision: 295 $"
+
+Module('caba:vci_mem_cache',
+        classname = 'soclib::caba::VciMemCache',
+
+        tmpl_parameters = [
+            parameter.Module('vci_param_int', default = 'caba:vci_param',
+                cell_size = parameter.Reference('memc_cell_size_int')
+            ),
+            parameter.Module('vci_param_ext', default = 'caba:vci_param',
+                cell_size = parameter.Reference('memc_cell_size_ext')
+            ),
+            parameter.Int('dspin_in_width'),
+            parameter.Int('dspin_out_width'),
+        ],
+
+        header_files = [
+            '../source/include/vci_mem_cache.h',
+            '../source/include/xram_transaction.h',
+            '../source/include/mem_cache_directory.h',
+            '../source/include/update_tab.h'
+        ],
+
+        interface_files = [
+            '../../include/soclib/mem_cache.h', 
+        ],
+
+        implementation_files = [
+            '../source/src/vci_mem_cache.cpp'
+        ],
+
+        uses = [
+            Uses('caba:base_module'),
+            Uses('common:loader'),
+            Uses('common:mapping_table'),
+            Uses('caba:generic_fifo'),
+            Uses('caba:generic_llsc_global_table'),
+            Uses('caba:dspin_dhccp_param')
+        ],
+
+        ports = [
+            Port('caba:clock_in'     , 'p_clk'      , auto = 'clock' ),
+            Port('caba:bit_in'       , 'p_resetn'   , auto = 'resetn'),
+            Port('caba:vci_target'   , 'p_vci_tgt'),
+            Port('caba:vci_initiator', 'p_vci_ixr'),
+            Port('caba:dspin_input',
+                'p_dspin_p2m',
+                dspin_data_size = parameter.Reference('dspin_in_width')
+            ),
+            Port('caba:dspin_output',
+                'p_dspin_m2p',
+                dspin_data_size = parameter.Reference('dspin_out_width')
+            ),
+            Port('caba:dspin_output',
+                'p_dspin_clack',
+                dspin_data_size = parameter.Reference('dspin_out_width')
+            ),
+        ],
+
+        instance_parameters = [
+            parameter.Module('mtp', 'common:mapping_table'),
+            parameter.Module('mtc', 'common:mapping_table'),
+            parameter.Module('mtx', 'common:mapping_table'),
+            parameter.IntTab('vci_ixr_index'),
+            parameter.IntTab('vci_ini_index'),
+            parameter.IntTab('vci_tgt_index'),
+            parameter.IntTab('vci_tgt_index_cleanup'),
+            parameter.Int   ('nways'),
+            parameter.Int   ('nsets'),
+            parameter.Int   ('nwords'),
+            parameter.Int   ('heap_size'),
+        ],
+)
Index: /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/mem_cache_directory.h
===================================================================
--- /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/mem_cache_directory.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/mem_cache_directory.h	(revision 724)
@@ -0,0 +1,737 @@
+#ifndef SOCLIB_CABA_MEM_CACHE_DIRECTORY_H
+#define SOCLIB_CABA_MEM_CACHE_DIRECTORY_H 
+
+#include <inttypes.h>
+#include <systemc>
+#include <cassert>
+#include "arithmetics.h"
+
+//#define RANDOM_EVICTION
+
+namespace soclib { namespace caba {
+
+  using namespace sc_core;
+
+  ////////////////////////////////////////////////////////////////////////
+  //                    A LRU entry 
+  ////////////////////////////////////////////////////////////////////////
+  class LruEntry {
+
+    public:
+
+      bool recent;            
+
+      void init()
+      {
+        recent=false;
+      }
+
+  }; // end class LruEntry
+
+  ////////////////////////////////////////////////////////////////////////
+  //                    An Owner
+  ////////////////////////////////////////////////////////////////////////
+  class Owner{
+    
+    public:
+    // Fields
+      bool      inst;       // Is the owner an ICache ?
+      size_t    srcid;      // The SRCID of the owner
+
+    ////////////////////////
+    // Constructors
+    ////////////////////////
+      Owner(bool   i_inst,
+            size_t i_srcid)
+      {
+        inst    = i_inst;
+        srcid   = i_srcid;
+      }
+
+      Owner(const Owner &a)
+      {
+        inst    = a.inst;
+        srcid   = a.srcid;
+      }
+
+      Owner()
+      {
+        inst    = false;
+        srcid   = 0;
+      }
+      // end constructors
+
+  }; // end class Owner
+
+
+  ////////////////////////////////////////////////////////////////////////
+  //                    A directory entry                               
+  ////////////////////////////////////////////////////////////////////////
+  class DirectoryEntry {
+
+    typedef uint32_t tag_t;
+
+    public:
+
+    bool    valid;                  // entry valid
+    bool    is_cnt;                 // directory entry is in counter mode
+    bool    dirty;                  // entry dirty
+    bool    lock;                   // entry locked
+    tag_t   tag;                    // tag of the entry
+    size_t  count;                  // number of copies
+    Owner   owner;                  // an owner of the line 
+    size_t  ptr;                    // pointer to the next owner
+
+    DirectoryEntry()
+    {
+      valid         = false;
+      is_cnt        = false;
+      dirty         = false;
+      lock          = false;
+      tag           = 0;
+      count         = 0;
+      owner.inst    = 0;
+      owner.srcid   = 0;
+      ptr           = 0;
+    }
+
+    DirectoryEntry(const DirectoryEntry &source)
+    {
+      valid         = source.valid;
+      is_cnt        = source.is_cnt;
+      dirty         = source.dirty;
+      lock          = source.lock;
+      tag           = source.tag;
+      count         = source.count;
+      owner         = source.owner;
+      ptr           = source.ptr;
+    }          
+
+    /////////////////////////////////////////////////////////////////////
+    // The init() function initializes the entry 
+    /////////////////////////////////////////////////////////////////////
+    void init()
+    {
+      valid     = false;
+      is_cnt    = false;
+      dirty     = false;
+      lock      = false;
+      count     = 0;
+    }
+
+    /////////////////////////////////////////////////////////////////////
+    // The copy() function copies an existing source entry to a target 
+    /////////////////////////////////////////////////////////////////////
+    void copy(const DirectoryEntry &source)
+    {
+      valid	    = source.valid;
+      is_cnt    = source.is_cnt;
+      dirty	    = source.dirty;
+      lock	    = source.lock;
+      tag	    = source.tag;
+      count     = source.count;
+      owner     = source.owner;
+      ptr       = source.ptr;
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // The print() function prints the entry 
+    ////////////////////////////////////////////////////////////////////
+    void print()
+    {
+      std::cout << "Valid = " << valid 
+                << " ; IS COUNT = " << is_cnt 
+                << " ; Dirty = " << dirty 
+                << " ; Lock = " << lock 
+                << " ; Tag = " << std::hex << tag << std::dec 
+                << " ; Count = " << count 
+                << " ; Owner = " << owner.srcid 
+                << " " << owner.inst 
+                << " ; Pointer = " << ptr << std::endl;
+    }
+
+  }; // end class DirectoryEntry
+
+  ////////////////////////////////////////////////////////////////////////
+  //                       The directory  
+  ////////////////////////////////////////////////////////////////////////
+  class CacheDirectory {
+
+    typedef sc_dt::sc_uint<40> addr_t;
+    typedef uint32_t data_t;
+    typedef uint32_t tag_t;
+
+    private:
+
+    // Directory constants
+    size_t					m_ways;
+    size_t					m_sets;
+    size_t					m_words;
+    size_t					m_width;
+    uint32_t                lfsr;
+
+    // the directory & lru tables
+    DirectoryEntry 				**m_dir_tab;
+    LruEntry	 				**m_lru_tab;
+
+    public:
+
+    ////////////////////////
+    // Constructor
+    ////////////////////////
+    CacheDirectory( size_t ways, size_t sets, size_t words, size_t address_width)	 
+    {
+      m_ways  = ways; 
+      m_sets  = sets;
+      m_words = words;
+      m_width = address_width;
+      lfsr = -1;
+
+      m_dir_tab = new DirectoryEntry*[sets];
+      for ( size_t i=0; i<sets; i++ ) {
+        m_dir_tab[i] = new DirectoryEntry[ways];
+        for ( size_t j=0 ; j<ways ; j++) m_dir_tab[i][j].init();
+      }
+      m_lru_tab = new LruEntry*[sets];
+      for ( size_t i=0; i<sets; i++ ) {
+        m_lru_tab[i] = new LruEntry[ways];
+        for ( size_t j=0 ; j<ways ; j++) m_lru_tab[i][j].init();
+      }
+    } // end constructor
+
+    /////////////////
+    // Destructor
+    /////////////////
+    ~CacheDirectory()
+    {
+      for(size_t i=0 ; i<m_sets ; i++){
+        delete [] m_dir_tab[i];
+        delete [] m_lru_tab[i];
+      }
+      delete [] m_dir_tab;
+      delete [] m_lru_tab;
+    } // end destructor
+
+    /////////////////////////////////////////////////////////////////////
+    // The read() function reads a directory entry. In case of hit, the
+    // LRU is updated.
+    // Arguments :
+    // - address : the address of the entry 
+    // - way : (return argument) the way of the entry in case of hit
+    // The function returns a copy of a (valid or invalid) entry  
+    /////////////////////////////////////////////////////////////////////
+    DirectoryEntry read(const addr_t &address, size_t &way)
+    {
+
+#define L2 soclib::common::uint32_log2
+        const size_t set = (size_t)(address >> (L2(m_words) + 2)) & (m_sets - 1);
+        const tag_t  tag = (tag_t)(address >> (L2(m_sets) + L2(m_words) + 2));
+#undef L2
+
+        bool hit       = false;
+        for ( size_t i=0 ; i<m_ways ; i++ ) 
+        {
+            bool equal = ( m_dir_tab[set][i].tag == tag );
+            bool valid = m_dir_tab[set][i].valid;
+            hit        = equal && valid;
+            if ( hit ) 
+            {			
+                way = i;
+                break;
+            } 
+        }
+        if ( hit ) 
+        {
+            m_lru_tab[set][way].recent = true;
+            return DirectoryEntry(m_dir_tab[set][way]);
+        } 
+        else 
+        {
+            return DirectoryEntry();
+        }
+    } // end read()
+
+    /////////////////////////////////////////////////////////////////////
+    // The inval function invalidate an entry defined by the set and
+    // way arguments. 
+    /////////////////////////////////////////////////////////////////////
+    void inval( const size_t &way, const size_t &set )
+    {
+        m_dir_tab[set][way].init();
+    }
+
+    /////////////////////////////////////////////////////////////////////
+    // The read_neutral() function reads a directory entry, without
+    // changing the LRU
+    // Arguments :
+    // - address : the address of the entry 
+    // The function returns a copy of a (valid or invalid) entry  
+    /////////////////////////////////////////////////////////////////////
+    DirectoryEntry read_neutral( const addr_t &address, 
+                                 size_t*      ret_way,
+                                 size_t*      ret_set )
+    {
+
+#define L2 soclib::common::uint32_log2
+        size_t set = (size_t)(address >> (L2(m_words) + 2)) & (m_sets - 1);
+        tag_t  tag = (tag_t)(address >> (L2(m_sets) + L2(m_words) + 2));
+#undef L2
+
+        for ( size_t way = 0 ; way < m_ways ; way++ ) 
+        {
+            bool equal = ( m_dir_tab[set][way].tag == tag );
+            bool valid = m_dir_tab[set][way].valid;
+            if ( equal and valid )
+            {
+                *ret_set = set;
+                *ret_way = way; 
+                return DirectoryEntry(m_dir_tab[set][way]);
+            }
+        } 
+        return DirectoryEntry();
+    } // end read_neutral()
+
+    /////////////////////////////////////////////////////////////////////
+    // The write function writes a new entry, 
+    // and updates the LRU bits if necessary.
+    // Arguments :
+    // - set : the set of the entry
+    // - way : the way of the entry
+    // - entry : the entry value
+    /////////////////////////////////////////////////////////////////////
+    void write( const size_t         &set, 
+                const size_t         &way, 
+                const DirectoryEntry &entry)
+    {
+      assert( (set<m_sets) 
+          && "Cache Directory write : The set index is invalid");
+      assert( (way<m_ways) 
+          && "Cache Directory write : The way index is invalid");
+
+      // update Directory
+      m_dir_tab[set][way].copy(entry);
+
+      // update LRU bits
+      bool all_recent = true;
+      for ( size_t i=0 ; i<m_ways ; i++ ) 
+      {
+          if ( i != way ) all_recent = m_lru_tab[set][i].recent && all_recent;
+      }
+      if ( all_recent ) 
+      {
+          for( size_t i=0 ; i<m_ways ; i++ ) m_lru_tab[set][i].recent = false;
+      } 
+      else 
+      {
+          m_lru_tab[set][way].recent = true;
+      }
+    } // end write()
+
+    /////////////////////////////////////////////////////////////////////
+    // The print() function prints a selected directory entry
+    // Arguments :
+    // - set : the set of the entry to print
+    // - way : the way of the entry to print
+    /////////////////////////////////////////////////////////////////////
+    void print(const size_t &set, const size_t &way)
+    {
+      std::cout << std::dec << " set : " << set << " ; way : " << way << " ; " ;
+      m_dir_tab[set][way].print();
+    } // end print()
+
+    /////////////////////////////////////////////////////////////////////
+    // The select() function selects a directory entry to evince.
+    // Arguments :
+    // - set   : (input argument) the set to modify
+    // - way   : (return argument) the way to evince
+    /////////////////////////////////////////////////////////////////////
+    DirectoryEntry select(const size_t &set, size_t &way)
+    {
+        assert( (set < m_sets) 
+          && "Cache Directory : (select) The set index is invalid");
+
+        // looking for an empty slot
+        for(size_t i=0; i<m_ways; i++)
+        {
+            if( not m_dir_tab[set][i].valid )
+            {
+                way=i;
+                return DirectoryEntry(m_dir_tab[set][way]);
+            }
+        }
+
+#ifdef RANDOM_EVICTION
+        lfsr = (lfsr >> 1) ^ ((-(lfsr & 1)) & 0xd0000001);
+        way = lfsr % m_ways;
+        return DirectoryEntry(m_dir_tab[set][way]);
+#endif
+
+        // looking for a not locked and not recently used entry
+        for(size_t i=0; i<m_ways; i++)
+        {
+            if((not m_lru_tab[set][i].recent) && (not m_dir_tab[set][i].lock) )
+            {
+                way=i;
+                return DirectoryEntry(m_dir_tab[set][way]);
+            }
+        }
+
+        // looking for a locked not recently used entry
+        for(size_t i=0; i<m_ways; i++)
+        {
+            if( (not m_lru_tab[set][i].recent) && (m_dir_tab[set][i].lock))
+            {
+                way=i;
+                return DirectoryEntry(m_dir_tab[set][way]);
+            }
+        }
+
+        // looking for a recently used entry not locked
+        for(size_t i=0; i<m_ways; i++)
+        {
+            if( (m_lru_tab[set][i].recent) && (not m_dir_tab[set][i].lock))
+            {
+                way=i;
+                return DirectoryEntry(m_dir_tab[set][way]);
+            }
+        }
+
+        // select way 0 (even if entry is locked and recently used)
+        way = 0;
+        return DirectoryEntry(m_dir_tab[set][0]);
+    } // end select()
+
+    /////////////////////////////////////////////////////////////////////
+    // 		Global initialisation function
+    /////////////////////////////////////////////////////////////////////
+    void init()
+    {
+      for ( size_t set=0 ; set<m_sets ; set++ ) 
+      {
+        for ( size_t way=0 ; way<m_ways ; way++ ) 
+        {
+          m_dir_tab[set][way].init();
+          m_lru_tab[set][way].init();
+        }
+      }
+    } // end init()
+
+  }; // end class CacheDirectory
+
+  ///////////////////////////////////////////////////////////////////////
+  //                    A Heap Entry
+  ///////////////////////////////////////////////////////////////////////
+  class HeapEntry{
+
+    public:
+    // Fields of the entry
+      Owner     owner;
+      size_t    next;
+
+    ////////////////////////
+    // Constructor
+    ////////////////////////
+      HeapEntry()
+      :owner(false,0)
+      {
+        next = 0;
+      } // end constructor
+
+    ////////////////////////
+    // Constructor
+    ////////////////////////
+      HeapEntry(const HeapEntry &entry)
+      {
+        owner.inst  = entry.owner.inst;
+        owner.srcid = entry.owner.srcid;
+        next           = entry.next;
+      } // end constructor
+
+    /////////////////////////////////////////////////////////////////////
+    // The copy() function copies an existing source entry to a target 
+    /////////////////////////////////////////////////////////////////////
+      void copy(const HeapEntry &entry)
+      {
+        owner.inst     = entry.owner.inst;
+        owner.srcid    = entry.owner.srcid;
+        next           = entry.next;
+      } // end copy()
+
+    ////////////////////////////////////////////////////////////////////
+    // The print() function prints the entry 
+    ////////////////////////////////////////////////////////////////////
+      void print(){
+        std::cout 
+        << " -- owner.inst     : " << std::dec << owner.inst << std::endl
+        << " -- owner.srcid    : " << std::dec << owner.srcid << std::endl
+        << " -- next           : " << std::dec << next << std::endl;
+
+      } // end print()
+
+  }; // end class HeapEntry
+
+  ////////////////////////////////////////////////////////////////////////
+  //                        The Heap 
+  ////////////////////////////////////////////////////////////////////////
+  class HeapDirectory{
+    
+    private:
+    // Registers and the heap
+      size_t    ptr_free;
+      bool      full;
+      HeapEntry *m_heap_tab;
+
+    // Constants for debugging purpose
+      size_t    tab_size;
+
+    public:
+    ////////////////////////
+    // Constructor
+    ////////////////////////
+      HeapDirectory(uint32_t size){
+        assert(size>0 && "Memory Cache, HeapDirectory constructor : invalid size");
+        ptr_free    = 0;
+        full        = false;
+        m_heap_tab  = new HeapEntry[size];
+        tab_size    = size;
+      } // end constructor
+
+    /////////////////
+    // Destructor
+    /////////////////
+      ~HeapDirectory(){
+        delete [] m_heap_tab;
+      } // end destructor
+
+    /////////////////////////////////////////////////////////////////////
+    // 		Global initialisation function
+    /////////////////////////////////////////////////////////////////////
+      void init(){
+        ptr_free=0;
+        full=false;
+        for(size_t i=0; i< tab_size-1;i++){
+          m_heap_tab[i].next = i+1;
+        }
+        m_heap_tab[tab_size-1].next = tab_size-1;
+        return;
+      }
+
+    /////////////////////////////////////////////////////////////////////
+    // The print() function prints a selected directory entry
+    // Arguments :
+    // - ptr : the pointer to the entry to print
+    /////////////////////////////////////////////////////////////////////
+      void print(const size_t &ptr){
+        std::cout << "Heap, printing the entry : " << std::dec << ptr << std::endl;
+        m_heap_tab[ptr].print();
+      } // end print()
+
+    /////////////////////////////////////////////////////////////////////
+    // The print_list() function prints a list from selected directory entry
+    // Arguments :
+    // - ptr : the pointer to the first entry to print
+    /////////////////////////////////////////////////////////////////////
+      void print_list(const size_t &ptr){
+        bool end = false;
+        size_t ptr_temp = ptr;
+        std::cout << "Heap, printing the list from : " << std::dec << ptr << std::endl;
+        while(!end){
+            m_heap_tab[ptr_temp].print();
+            if(ptr_temp == m_heap_tab[ptr_temp].next) end = true;
+            ptr_temp = m_heap_tab[ptr_temp].next;
+        } 
+      } // end print_list()
+
+    /////////////////////////////////////////////////////////////////////
+    // The is_full() function return true if the heap is full.
+    /////////////////////////////////////////////////////////////////////
+      bool is_full(){
+        return full;
+      } // end is_full()
+
+    /////////////////////////////////////////////////////////////////////
+    // The next_free_ptr() function returns the pointer 
+    // to the next free entry.
+    /////////////////////////////////////////////////////////////////////
+      size_t next_free_ptr(){
+        return ptr_free;
+      } // end next_free_ptr()
+
+    /////////////////////////////////////////////////////////////////////
+    // The next_free_entry() function returns 
+    // a copy of the next free entry.
+    /////////////////////////////////////////////////////////////////////
+      HeapEntry next_free_entry(){
+        return HeapEntry(m_heap_tab[ptr_free]);
+      } // end next_free_entry()
+   
+    /////////////////////////////////////////////////////////////////////
+    // The write_free_entry() function modify the next free entry.
+    // Arguments :
+    // - entry : the entry to write
+    /////////////////////////////////////////////////////////////////////
+      void write_free_entry(const HeapEntry &entry){
+        m_heap_tab[ptr_free].copy(entry);
+      } // end write_free_entry()
+
+    /////////////////////////////////////////////////////////////////////
+    // The write_free_ptr() function writes the pointer
+    // to the next free entry
+    /////////////////////////////////////////////////////////////////////
+      void write_free_ptr(const size_t &ptr){
+        assert( (ptr<tab_size) && "HeapDirectory error : try to write a wrong free pointer");
+        ptr_free = ptr;
+      } // end write_free_ptr()
+
+    /////////////////////////////////////////////////////////////////////
+    // The set_full() function sets the full bit (to true).
+    /////////////////////////////////////////////////////////////////////
+      void set_full(){
+        full = true;
+      } // end set_full()
+
+    /////////////////////////////////////////////////////////////////////
+    // The unset_full() function unsets the full bit (to false).
+    /////////////////////////////////////////////////////////////////////
+      void unset_full(){
+        full = false;
+      } // end unset_full()
+
+    /////////////////////////////////////////////////////////////////////
+    // The read() function returns a copy of
+    // the entry pointed by the argument
+    // Arguments :
+    //  - ptr : the pointer to the entry to read
+    /////////////////////////////////////////////////////////////////////
+      HeapEntry read(const size_t &ptr){
+        assert( (ptr<tab_size) && "HeapDirectory error : try to write a wrong free pointer");
+        return HeapEntry(m_heap_tab[ptr]);
+      } // end read()
+
+    /////////////////////////////////////////////////////////////////////
+    // The write() function writes an entry in the heap
+    // Arguments :
+    //  - ptr : the pointer to the entry to replace
+    //  - entry : the entry to write
+    /////////////////////////////////////////////////////////////////////
+      void write(const size_t &ptr, const HeapEntry &entry){
+        assert( (ptr<tab_size) && "HeapDirectory error : try to write a wrong free pointer");
+        m_heap_tab[ptr].copy(entry);
+      } // end write()
+
+  }; // end class HeapDirectory
+
+  ////////////////////////////////////////////////////////////////////////
+  //                        Cache Data 
+  ////////////////////////////////////////////////////////////////////////
+  class CacheData 
+  {
+    private:
+      const uint32_t m_sets;
+      const uint32_t m_ways;
+      const uint32_t m_words;
+
+      uint32_t *** m_cache_data;
+
+    public:
+
+      ///////////////////////////////////////////////////////
+      CacheData(uint32_t ways, uint32_t sets, uint32_t words)
+        : m_sets(sets), m_ways(ways), m_words(words) 
+      {
+          m_cache_data = new uint32_t ** [ways];
+          for ( size_t i=0 ; i < ways ; i++ ) 
+          {
+              m_cache_data[i] = new uint32_t * [sets];
+          }
+          for ( size_t i=0; i<ways; i++ ) 
+          {
+              for ( size_t j=0; j<sets; j++ ) 
+              {
+                  m_cache_data[i][j] = new uint32_t [words];
+              }
+          }
+      }
+      ////////////
+      ~CacheData() 
+      {
+          for(size_t i=0; i<m_ways ; i++)
+          {
+              for(size_t j=0; j<m_sets ; j++)
+              {
+                  delete [] m_cache_data[i][j];
+              }
+          }
+          for(size_t i=0; i<m_ways ; i++)
+          {
+              delete [] m_cache_data[i];
+          }
+          delete [] m_cache_data;
+      }
+      //////////////////////////////////////////
+      uint32_t read ( const uint32_t &way,
+                      const uint32_t &set,
+                      const uint32_t &word) const 
+      {
+          assert((set  < m_sets ) && "Cache data error: Trying to read a wrong set" );
+          assert((way  < m_ways ) && "Cache data error: Trying to read a wrong way" );
+          assert((word < m_words) && "Cache data error: Trying to read a wrong word");
+
+          return m_cache_data[way][set][word];
+      }
+      //////////////////////////////////////////
+      void read_line( const uint32_t &way,
+                      const uint32_t &set,
+                      sc_core::sc_signal<uint32_t> * cache_line)
+      {
+          assert((set < m_sets ) && "Cache data error: Trying to read a wrong set" );
+          assert((way < m_ways ) && "Cache data error: Trying to read a wrong way" );
+
+          for (uint32_t word=0; word<m_words; word++)
+              cache_line[word].write(m_cache_data[way][set][word]);
+      }
+      /////////////////////////////////////////
+      void write ( const uint32_t &way,
+                   const uint32_t &set,
+                   const uint32_t &word,
+                   const uint32_t &data,
+                   const uint32_t &be = 0xF) 
+      {
+
+          assert((set  < m_sets ) && "Cache data error: Trying to write a wrong set" );
+          assert((way  < m_ways ) && "Cache data error: Trying to write a wrong way" );
+          assert((word < m_words) && "Cache data error: Trying to write a wrong word");
+          assert((be  <= 0xF    ) && "Cache data error: Trying to write a wrong be");
+
+          if (be == 0x0) return;
+
+          if (be == 0xF) 
+          {
+              m_cache_data[way][set][word] = data; 
+              return;
+          }
+
+          uint32_t mask = 0;
+          if  (be & 0x1) mask = mask | 0x000000FF;
+          if  (be & 0x2) mask = mask | 0x0000FF00;
+          if  (be & 0x4) mask = mask | 0x00FF0000;
+          if  (be & 0x8) mask = mask | 0xFF000000;
+
+          m_cache_data[way][set][word] = 
+              (data & mask) | (m_cache_data[way][set][word] & ~mask);
+      }
+  }; // end class CacheData
+
+}} // end namespaces
+
+#endif
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/update_tab.h
===================================================================
--- /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/update_tab.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/update_tab.h	(revision 724)
@@ -0,0 +1,444 @@
+#ifndef UPDATE_TAB_H_
+#define UPDATE_TAB_H_
+
+#include <inttypes.h>
+#include <systemc>
+#include <cassert>
+#include "arithmetics.h"
+
+////////////////////////////////////////////////////////////////////////
+//                  An update tab entry    
+////////////////////////////////////////////////////////////////////////
+class UpdateTabEntry {
+
+  typedef uint32_t size_t;
+  typedef sc_dt::sc_uint<40> addr_t;
+
+  public:
+
+  bool 	    valid;      // It is a valid pending transaction
+  bool	    update;     // It is an update transaction
+  bool      brdcast;    // It is a broadcast invalidate
+  bool      rsp;        // Response to the initiator required
+  bool      ack;        // Acknowledge to the CONFIG FSM required
+  size_t 	srcid;      // The srcid of the initiator which wrote the data
+  size_t 	trdid;      // The trdid of the initiator which wrote the data
+  size_t 	pktid;      // The pktid of the initiator which wrote the data
+  addr_t	nline;	    // The identifier of the cache line
+  size_t 	count;      // The number of acknowledge responses to receive
+
+  UpdateTabEntry()
+  {
+    valid	= false;
+    update  = false;
+    brdcast = false;
+    rsp     = false;
+    ack     = false;
+    srcid	= 0;
+    trdid	= 0;
+    pktid	= 0;
+    nline	= 0;
+    count	= 0;
+  }
+
+  UpdateTabEntry(bool   i_valid, 
+                 bool   i_update,
+                 bool   i_brdcast,
+                 bool   i_rsp,
+                 bool   i_ack,
+                 size_t i_srcid, 
+                 size_t i_trdid, 
+                 size_t i_pktid, 
+                 addr_t i_nline,
+                 size_t i_count) 
+  {
+    valid	= i_valid;
+    update	= i_update;
+    brdcast = i_brdcast;
+    rsp     = i_rsp;
+    ack     = i_ack;
+    srcid	= i_srcid;
+    trdid	= i_trdid;
+    pktid	= i_pktid;
+    nline	= i_nline;
+    count	= i_count;
+  }
+
+  UpdateTabEntry(const UpdateTabEntry &source)
+  {
+    valid   = source.valid;
+    update  = source.update;
+    brdcast = source.brdcast;
+    rsp     = source.rsp;
+    ack     = source.ack;
+    srcid   = source.srcid;
+    trdid   = source.trdid;
+    pktid   = source.pktid;
+    nline   = source.nline;
+    count   = source.count;
+  }
+
+  ////////////////////////////////////////////////////
+  // The init() function initializes the entry 
+  ///////////////////////////////////////////////////
+  void init()
+  {
+    valid  = false;
+    update = false;
+    brdcast= false;
+    rsp    = false;
+    ack    = false;
+    srcid  = 0;
+    trdid  = 0;
+    pktid  = 0;
+    nline  = 0;
+    count  = 0;
+  }
+
+  ////////////////////////////////////////////////////////////////////
+  // The copy() function copies an existing entry
+  // Its arguments are :
+  // - source : the update tab entry to copy
+  ////////////////////////////////////////////////////////////////////
+  void copy(const UpdateTabEntry &source)
+  {
+    valid  = source.valid;
+    update = source.update;
+    brdcast= source.brdcast;
+    rsp    = source.rsp;
+    ack    = source.ack  ;
+    srcid  = source.srcid;
+    trdid  = source.trdid;
+    pktid  = source.pktid;
+    nline  = source.nline;
+    count  = source.count;
+  }
+
+  ////////////////////////////////////////////////////////////////////
+  // The print() function prints the entry  
+  ////////////////////////////////////////////////////////////////////
+  void print()
+  {
+    std::cout << " val = " << std::dec << valid 
+              << " / updt = " << update 
+              << " / bc = " << brdcast
+              << " / rsp = " << rsp 
+              << " / ack = " << ack   
+              << " / count = " << count
+              << " / srcid = " << std::hex << srcid 
+              << " / trdid = " << trdid   
+              << " / pktid = " << pktid
+              << " / nline = " << nline  << std::endl;
+  }
+};
+
+////////////////////////////////////////////////////////////////////////
+//                        The update tab             
+////////////////////////////////////////////////////////////////////////
+class UpdateTab{
+
+  typedef uint64_t addr_t;
+
+  private:
+  size_t                      size_tab;
+  std::vector<UpdateTabEntry> tab;
+
+  public:
+
+  UpdateTab()
+    : tab(0)
+  {
+    size_tab=0;
+  }
+
+  UpdateTab(size_t size_tab_i)
+    : tab(size_tab_i)
+  {
+    size_tab=size_tab_i;
+  }
+
+  ////////////////////////////////////////////////////////////////////
+  // The size() function returns the size of the tab  
+  ////////////////////////////////////////////////////////////////////
+  const size_t size()
+  {
+    return size_tab;
+  }
+
+  ////////////////////////////////////////////////////////////////////
+  // The print() function diplays the tab content 
+  ////////////////////////////////////////////////////////////////////
+  void print()
+  {
+    std::cout << "UPDATE TABLE Content" << std::endl;
+    for(size_t i=0; i<size_tab; i++) 
+    {
+      std::cout << "[" << std::dec << i << "] ";
+      tab[i].print();
+    }
+    return;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The init() function initializes the tab 
+  /////////////////////////////////////////////////////////////////////
+  void init()
+  {
+    for ( size_t i=0; i<size_tab; i++) tab[i].init();
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The reads() function reads an entry 
+  // Arguments :
+  // - entry : the entry to read
+  // This function returns a copy of the entry.
+  /////////////////////////////////////////////////////////////////////
+  UpdateTabEntry read (size_t entry)
+  {
+    assert(entry<size_tab && "Bad Update Tab Entry");
+    return UpdateTabEntry(tab[entry]);
+  }
+
+  ///////////////////////////////////////////////////////////////////////////
+  // The set() function writes an entry in the Update Table
+  // Arguments :
+  // - update : transaction type (bool)
+  // - srcid : srcid of the initiator
+  // - trdid : trdid of the initiator
+  // - pktid : pktid of the initiator
+  // - count : number of expected responses
+  // - index : (return argument) index of the selected entry
+  // This function returns true if the write successed (an entry was empty).
+  ///////////////////////////////////////////////////////////////////////////
+  bool set(const bool	update,
+           const bool   brdcast,
+           const bool   rsp,
+           const bool   ack,
+           const size_t srcid,
+           const size_t trdid,
+           const size_t pktid,
+           const addr_t nline,
+           const size_t count,
+           size_t       &index)
+  {
+    for ( size_t i=0 ; i<size_tab ; i++ ) 
+    {
+      if( !tab[i].valid ) 
+      {
+        tab[i].valid		= true;
+        tab[i].update		= update;
+        tab[i].brdcast      = brdcast;
+        tab[i].rsp          = rsp;
+        tab[i].ack          = ack;
+        tab[i].srcid		= (size_t) srcid;
+        tab[i].trdid		= (size_t) trdid;
+        tab[i].pktid		= (size_t) pktid;
+        tab[i].nline		= (addr_t) nline;
+        tab[i].count		= (size_t) count;
+        index			    = i;
+        return true;
+      }
+    }
+    return false;
+  } // end set()
+
+  /////////////////////////////////////////////////////////////////////
+  // The decrement() function decrements the counter for a given entry.
+  // Arguments :
+  // - index   : the index of the entry
+  // - counter : (return argument) value of the counter after decrement
+  // This function returns true if the entry is valid.
+  /////////////////////////////////////////////////////////////////////
+  bool decrement( const size_t index,
+                  size_t &counter ) 
+  {
+    assert((index<size_tab) && "Bad Update Tab Entry");
+    if ( tab[index].valid ) 
+    {
+      tab[index].count--;
+      counter = tab[index].count;
+      return true;
+    } 
+    else 
+    {
+      return false;
+    }
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The is_full() function returns true if the table is full
+  /////////////////////////////////////////////////////////////////////
+  bool is_full()
+  {
+    for(size_t i = 0 ; i < size_tab ; i++)
+    {
+      if(!tab[i].valid) return false;
+    }
+    return true;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The is_not_empty() function returns true if the table is not empty
+  /////////////////////////////////////////////////////////////////////
+  bool is_not_empty()
+  {
+    for(size_t i = 0 ; i < size_tab ; i++)
+    {
+      if(tab[i].valid) return true;
+    }
+    return false;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The need_rsp() function returns the need of a response
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  bool need_rsp(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].rsp;	
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The need_ack() function returns the need of an acknowledge
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  bool need_ack(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].ack;	
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The is_brdcast() function returns the transaction type
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  bool is_brdcast(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].brdcast;	
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The is_update() function returns the transaction type
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  bool is_update(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].update;	
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The srcid() function returns the srcid value
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  size_t srcid(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].srcid;	
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The trdid() function returns the trdid value
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  size_t trdid(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].trdid;	
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The pktid() function returns the pktid value
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  size_t pktid(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].pktid;	
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The nline() function returns the nline value
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////
+  addr_t nline(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    return tab[index].nline;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The search_inval() function returns the index of the entry in UPT
+  // Arguments :
+  // - nline : the line number of the entry in the directory
+  /////////////////////////////////////////////////////////////////////
+  bool search_inval(const addr_t nline,size_t &index)
+  {
+    size_t i ;
+
+    for (i = 0 ; i < size_tab ; i++)
+    {
+      if ( (tab[i].nline == nline) and tab[i].valid and not tab[i].update )
+      {
+        index = i ;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The read_nline() function returns the index of the entry in UPT
+  // Arguments :
+  // - nline : the line number of the entry in the directory
+  /////////////////////////////////////////////////////////////////////
+  bool read_nline(const addr_t nline,size_t &index) 
+  {
+    size_t i ;
+
+    for (i = 0 ; i < size_tab ; i++)
+    {
+      if ( (tab[i].nline == nline) and tab[i].valid )
+      {
+        index = i ;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /////////////////////////////////////////////////////////////////////
+  // The clear() function erases an entry of the tab
+  // Arguments :
+  // - index : the index of the entry
+  /////////////////////////////////////////////////////////////////////       
+  void clear(const size_t index)
+  {
+    assert(index<size_tab && "Bad Update Tab Entry");
+    tab[index].valid=false;
+    return;	
+  }
+
+};
+
+#endif
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/vci_mem_cache.h
===================================================================
--- /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/vci_mem_cache.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/vci_mem_cache.h	(revision 724)
@@ -0,0 +1,1015 @@
+/* -*- c++ -*-
+ * File         : vci_mem_cache.h
+ * Date         : 26/10/2008
+ * Copyright    : UPMC / LIP6
+ * Authors      : Alain Greiner / Eric Guthmuller
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Maintainers: alain.greiner@lip6.fr 
+ *              eric.guthmuller@polytechnique.edu
+ *              cesar.fuguet-tortolero@lip6.fr
+ *              alexandre.joannou@lip6.fr
+ */
+
+#ifndef SOCLIB_CABA_MEM_CACHE_H
+#define SOCLIB_CABA_MEM_CACHE_H
+
+#include <inttypes.h>
+#include <systemc>
+#include <list>
+#include <cassert>
+#include "arithmetics.h"
+#include "alloc_elems.h"
+#include "caba_base_module.h"
+#include "vci_target.h"
+#include "vci_initiator.h"
+#include "generic_fifo.h"
+#include "mapping_table.h"
+#include "int_tab.h"
+#include "generic_llsc_global_table.h"
+#include "mem_cache_directory.h"
+#include "xram_transaction.h"
+#include "update_tab.h"
+#include "dspin_interface.h"
+#include "dspin_dhccp_param.h"
+
+#define TRT_ENTRIES      4      // Number of entries in TRT
+#define UPT_ENTRIES      4      // Number of entries in UPT
+#define IVT_ENTRIES      4      // Number of entries in IVT
+#define HEAP_ENTRIES     1024   // Number of entries in HEAP
+
+namespace soclib {  namespace caba {
+
+  using namespace sc_core;
+
+  template<typename vci_param_int, 
+           typename vci_param_ext,
+           size_t   dspin_in_width,
+           size_t   dspin_out_width>
+    class VciMemCache
+    : public soclib::caba::BaseModule
+    {
+      typedef typename vci_param_int::fast_addr_t  addr_t;
+      typedef typename sc_dt::sc_uint<64>          wide_data_t;
+      typedef uint32_t                             data_t;
+      typedef uint32_t                             tag_t;
+      typedef uint32_t                             be_t;
+      typedef uint32_t                             copy_t;
+
+      /* States of the TGT_CMD fsm */
+      enum tgt_cmd_fsm_state_e
+      {
+        TGT_CMD_IDLE,
+        TGT_CMD_READ,
+        TGT_CMD_WRITE,
+        TGT_CMD_CAS,
+        TGT_CMD_CONFIG,
+        TGT_CMD_ERROR
+      };
+
+      /* States of the TGT_RSP fsm */
+      enum tgt_rsp_fsm_state_e
+      {
+        TGT_RSP_READ_IDLE,
+        TGT_RSP_WRITE_IDLE,
+        TGT_RSP_CAS_IDLE,
+        TGT_RSP_XRAM_IDLE,
+        TGT_RSP_MULTI_ACK_IDLE,
+        TGT_RSP_CLEANUP_IDLE,
+        TGT_RSP_TGT_CMD_IDLE,
+        TGT_RSP_CONFIG_IDLE,
+        TGT_RSP_READ,
+        TGT_RSP_WRITE,
+        TGT_RSP_CAS,
+        TGT_RSP_XRAM,
+        TGT_RSP_MULTI_ACK,
+        TGT_RSP_CLEANUP,
+        TGT_RSP_TGT_CMD,
+        TGT_RSP_CONFIG
+      };
+
+      /* States of the DSPIN_TGT fsm */
+      enum cc_receive_fsm_state_e
+      {
+        CC_RECEIVE_IDLE,
+        CC_RECEIVE_CLEANUP,
+        CC_RECEIVE_CLEANUP_EOP,
+        CC_RECEIVE_MULTI_ACK
+      };
+
+      /* States of the CC_SEND fsm */
+      enum cc_send_fsm_state_e
+      {
+        CC_SEND_XRAM_RSP_IDLE,
+        CC_SEND_WRITE_IDLE,
+        CC_SEND_CAS_IDLE,
+        CC_SEND_CONFIG_IDLE,
+        CC_SEND_XRAM_RSP_BRDCAST_HEADER,
+        CC_SEND_XRAM_RSP_BRDCAST_NLINE,
+        CC_SEND_XRAM_RSP_INVAL_HEADER,
+        CC_SEND_XRAM_RSP_INVAL_NLINE,
+        CC_SEND_WRITE_BRDCAST_HEADER,
+        CC_SEND_WRITE_BRDCAST_NLINE,
+        CC_SEND_WRITE_UPDT_HEADER,
+        CC_SEND_WRITE_UPDT_NLINE,
+        CC_SEND_WRITE_UPDT_DATA,
+        CC_SEND_CAS_BRDCAST_HEADER,
+        CC_SEND_CAS_BRDCAST_NLINE,
+        CC_SEND_CAS_UPDT_HEADER,
+        CC_SEND_CAS_UPDT_NLINE,
+        CC_SEND_CAS_UPDT_DATA,
+        CC_SEND_CAS_UPDT_DATA_HIGH,
+        CC_SEND_CONFIG_INVAL_HEADER,
+        CC_SEND_CONFIG_INVAL_NLINE,
+        CC_SEND_CONFIG_BRDCAST_HEADER,
+        CC_SEND_CONFIG_BRDCAST_NLINE
+      };
+
+      /* States of the MULTI_ACK fsm */
+      enum multi_ack_fsm_state_e
+      {
+        MULTI_ACK_IDLE,
+        MULTI_ACK_UPT_LOCK,
+        MULTI_ACK_UPT_CLEAR,
+        MULTI_ACK_WRITE_RSP
+      };
+
+      /* States of the CONFIG fsm */
+      enum config_fsm_state_e
+      {
+        CONFIG_IDLE,
+        CONFIG_LOOP,
+        CONFIG_WAIT,
+        CONFIG_RSP,
+        CONFIG_DIR_REQ,
+        CONFIG_DIR_ACCESS,
+        CONFIG_IVT_LOCK,
+        CONFIG_BC_SEND,
+        CONFIG_INVAL_SEND,
+        CONFIG_HEAP_REQ,
+        CONFIG_HEAP_SCAN,
+        CONFIG_HEAP_LAST,
+        CONFIG_TRT_LOCK,
+        CONFIG_TRT_SET,
+        CONFIG_PUT_REQ
+      };
+
+      /* States of the READ fsm */
+      enum read_fsm_state_e
+      {
+        READ_IDLE,
+        READ_DIR_REQ,
+        READ_DIR_LOCK,
+        READ_DIR_HIT,
+        READ_HEAP_REQ,
+        READ_HEAP_LOCK,
+        READ_HEAP_WRITE,
+        READ_HEAP_ERASE,
+        READ_HEAP_LAST,
+        READ_RSP,
+        READ_TRT_LOCK,
+        READ_TRT_SET,
+        READ_TRT_REQ
+      };
+
+      /* States of the WRITE fsm */
+      enum write_fsm_state_e
+      {
+        WRITE_IDLE,
+        WRITE_NEXT,
+        WRITE_DIR_REQ,
+        WRITE_DIR_LOCK,
+        WRITE_DIR_HIT,
+        WRITE_UPT_LOCK,
+        WRITE_UPT_HEAP_LOCK,
+        WRITE_UPT_REQ,
+        WRITE_UPT_NEXT,
+        WRITE_UPT_DEC,
+        WRITE_RSP,
+        WRITE_MISS_TRT_LOCK,
+        WRITE_MISS_TRT_DATA,
+        WRITE_MISS_TRT_SET,
+        WRITE_MISS_XRAM_REQ,
+        WRITE_BC_DIR_READ,
+        WRITE_BC_TRT_LOCK,
+        WRITE_BC_IVT_LOCK,
+        WRITE_BC_DIR_INVAL,
+        WRITE_BC_CC_SEND,
+        WRITE_BC_XRAM_REQ,
+        WRITE_WAIT
+      };
+
+      /* States of the IXR_RSP fsm */
+      enum ixr_rsp_fsm_state_e
+      {
+        IXR_RSP_IDLE,
+        IXR_RSP_TRT_ERASE,
+        IXR_RSP_TRT_READ
+      };
+
+      /* States of the XRAM_RSP fsm */
+      enum xram_rsp_fsm_state_e
+      {
+        XRAM_RSP_IDLE,
+        XRAM_RSP_TRT_COPY,
+        XRAM_RSP_TRT_DIRTY,
+        XRAM_RSP_DIR_LOCK,
+        XRAM_RSP_DIR_UPDT,
+        XRAM_RSP_DIR_RSP,
+        XRAM_RSP_IVT_LOCK,
+        XRAM_RSP_INVAL_WAIT,
+        XRAM_RSP_INVAL,
+        XRAM_RSP_WRITE_DIRTY,
+        XRAM_RSP_HEAP_REQ,
+        XRAM_RSP_HEAP_ERASE,
+        XRAM_RSP_HEAP_LAST,
+        XRAM_RSP_ERROR_ERASE,
+        XRAM_RSP_ERROR_RSP
+      };
+
+      /* States of the IXR_CMD fsm */
+      enum ixr_cmd_fsm_state_e
+      {
+        IXR_CMD_READ_IDLE,
+        IXR_CMD_WRITE_IDLE,
+        IXR_CMD_CAS_IDLE,
+        IXR_CMD_XRAM_IDLE,
+        IXR_CMD_CONFIG_IDLE,
+        IXR_CMD_READ_TRT,
+        IXR_CMD_WRITE_TRT,
+        IXR_CMD_CAS_TRT,
+        IXR_CMD_XRAM_TRT,
+        IXR_CMD_CONFIG_TRT,
+        IXR_CMD_READ_SEND,
+        IXR_CMD_WRITE_SEND,
+        IXR_CMD_CAS_SEND,
+        IXR_CMD_XRAM_SEND,
+        IXR_CMD_CONFIG_SEND
+      };
+
+      /* States of the CAS fsm */
+      enum cas_fsm_state_e
+      {
+        CAS_IDLE,
+        CAS_DIR_REQ,
+        CAS_DIR_LOCK,
+        CAS_DIR_HIT_READ,
+        CAS_DIR_HIT_COMPARE,
+        CAS_DIR_HIT_WRITE,
+        CAS_UPT_LOCK,
+        CAS_UPT_HEAP_LOCK,
+        CAS_UPT_REQ,
+        CAS_UPT_NEXT,
+        CAS_BC_TRT_LOCK,
+        CAS_BC_IVT_LOCK,
+        CAS_BC_DIR_INVAL,
+        CAS_BC_CC_SEND,
+        CAS_BC_XRAM_REQ,
+        CAS_RSP_FAIL,
+        CAS_RSP_SUCCESS,
+        CAS_MISS_TRT_LOCK,
+        CAS_MISS_TRT_SET,
+        CAS_MISS_XRAM_REQ,
+        CAS_WAIT
+      };
+
+      /* States of the CLEANUP fsm */
+      enum cleanup_fsm_state_e
+      {
+        CLEANUP_IDLE,
+        CLEANUP_GET_NLINE,
+        CLEANUP_DIR_REQ,
+        CLEANUP_DIR_LOCK,
+        CLEANUP_DIR_WRITE,
+        CLEANUP_HEAP_REQ,
+        CLEANUP_HEAP_LOCK,
+        CLEANUP_HEAP_SEARCH,
+        CLEANUP_HEAP_CLEAN,
+        CLEANUP_HEAP_FREE,
+        CLEANUP_IVT_LOCK,
+        CLEANUP_IVT_DECREMENT,
+        CLEANUP_IVT_CLEAR,
+        CLEANUP_WRITE_RSP,
+        CLEANUP_SEND_CLACK
+      };
+
+      /* States of the ALLOC_DIR fsm */
+      enum alloc_dir_fsm_state_e
+      {
+        ALLOC_DIR_RESET,
+        ALLOC_DIR_READ,
+        ALLOC_DIR_WRITE,
+        ALLOC_DIR_CAS,
+        ALLOC_DIR_CLEANUP,
+        ALLOC_DIR_XRAM_RSP,
+        ALLOC_DIR_CONFIG
+      };
+
+      /* States of the ALLOC_TRT fsm */
+      enum alloc_trt_fsm_state_e
+      {
+        ALLOC_TRT_READ,
+        ALLOC_TRT_WRITE,
+        ALLOC_TRT_CAS,
+        ALLOC_TRT_XRAM_RSP,
+        ALLOC_TRT_IXR_RSP,
+        ALLOC_TRT_IXR_CMD,
+        ALLOC_TRT_CONFIG
+      };
+
+      /* States of the ALLOC_UPT fsm */
+      enum alloc_upt_fsm_state_e
+      {
+        ALLOC_UPT_WRITE,
+        ALLOC_UPT_CAS,
+        ALLOC_UPT_MULTI_ACK
+      };
+
+      /* States of the ALLOC_IVT fsm */
+      enum alloc_ivt_fsm_state_e
+      {
+        ALLOC_IVT_WRITE,
+        ALLOC_IVT_XRAM_RSP,
+        ALLOC_IVT_CLEANUP,
+        ALLOC_IVT_CAS,
+        ALLOC_IVT_CONFIG
+      };
+
+      /* States of the ALLOC_HEAP fsm */
+      enum alloc_heap_fsm_state_e
+      {
+        ALLOC_HEAP_RESET,
+        ALLOC_HEAP_READ,
+        ALLOC_HEAP_WRITE,
+        ALLOC_HEAP_CAS,
+        ALLOC_HEAP_CLEANUP,
+        ALLOC_HEAP_XRAM_RSP,
+        ALLOC_HEAP_CONFIG
+      };
+
+      /* transaction type, pktid field */
+      enum transaction_type_e
+      {
+          // b3 unused
+          // b2 READ / NOT READ
+          // Si READ
+          //  b1 DATA / INS
+          //  b0 UNC / MISS
+          // Si NOT READ
+          //  b1 accÃšs table llsc type SW / other
+          //  b2 WRITE/CAS/LL/SC
+          TYPE_READ_DATA_UNC          = 0x0,
+          TYPE_READ_DATA_MISS         = 0x1,
+          TYPE_READ_INS_UNC           = 0x2,
+          TYPE_READ_INS_MISS          = 0x3,
+          TYPE_WRITE                  = 0x4,
+          TYPE_CAS                    = 0x5,
+          TYPE_LL                     = 0x6,
+          TYPE_SC                     = 0x7
+      };
+
+      /* SC return values */
+      enum sc_status_type_e
+      {
+          SC_SUCCESS  =   0x00000000,
+          SC_FAIL     =   0x00000001
+      };
+
+      // debug variables 
+      bool                 m_debug;
+      bool                 m_debug_previous_valid;
+      size_t               m_debug_previous_count;
+      bool                 m_debug_previous_dirty;
+      data_t *             m_debug_previous_data;
+      data_t *             m_debug_data;
+
+      // instrumentation counters
+      uint32_t     m_cpt_cycles;         // Counter of cycles
+      uint32_t     m_cpt_reset_count;    // Cycle at which the counters were last reset
+
+      // Counters accessible in software (not yet but eventually)
+      uint32_t     m_cpt_read_local;     // Number of local READ transactions
+      uint32_t     m_cpt_read_remote;    // number of remote READ transactions
+      uint32_t     m_cpt_read_cost;      // Number of (flits * distance) for READs
+
+      uint32_t     m_cpt_write_local;    // Number of local WRITE transactions
+      uint32_t     m_cpt_write_remote;   // number of remote WRITE transactions
+      uint32_t     m_cpt_write_flits_local;  // number of flits for local WRITEs
+      uint32_t     m_cpt_write_flits_remote; // number of flits for remote WRITEs
+      uint32_t     m_cpt_write_cost;     // Number of (flits * distance) for WRITEs
+
+      uint32_t     m_cpt_ll_local;       // Number of local LL transactions
+      uint32_t     m_cpt_ll_remote;      // number of remote LL transactions
+      uint32_t     m_cpt_ll_cost;        // Number of (flits * distance) for LLs
+
+      uint32_t     m_cpt_sc_local;       // Number of local SC transactions
+      uint32_t     m_cpt_sc_remote;      // number of remote SC transactions
+      uint32_t     m_cpt_sc_cost;        // Number of (flits * distance) for SCs
+
+      uint32_t     m_cpt_cas_local;      // Number of local SC transactions
+      uint32_t     m_cpt_cas_remote;     // number of remote SC transactions
+      uint32_t     m_cpt_cas_cost;       // Number of (flits * distance) for SCs
+
+      uint32_t     m_cpt_update;         // Number of requests causing an UPDATE
+      uint32_t     m_cpt_update_local;   // Number of local UPDATE transactions
+      uint32_t     m_cpt_update_remote;  // Number of remote UPDATE transactions
+      uint32_t     m_cpt_update_cost;    // Number of (flits * distance) for UPDT
+
+      uint32_t     m_cpt_minval;         // Number of requests causing M_INV
+      uint32_t     m_cpt_minval_local;   // Number of local M_INV transactions
+      uint32_t     m_cpt_minval_remote;  // Number of remote M_INV transactions
+      uint32_t     m_cpt_minval_cost;    // Number of (flits * distance) for M_INV
+
+      uint32_t     m_cpt_binval;         // Number of BROADCAST INVAL
+
+      uint32_t     m_cpt_cleanup_local;  // Number of local CLEANUP transactions
+      uint32_t     m_cpt_cleanup_remote; // Number of remote CLEANUP transactions
+      uint32_t     m_cpt_cleanup_cost;   // Number of (flits * distance) for CLEANUPs
+
+      // Counters not accessible by software
+      uint32_t     m_cpt_read_miss;      // Number of MISS READ
+      uint32_t     m_cpt_write_miss;     // Number of MISS WRITE
+      uint32_t     m_cpt_write_dirty;    // Cumulated length for WRITE transactions
+      uint32_t     m_cpt_write_broadcast;// Number of BROADCAST INVAL because of writes
+
+      uint32_t     m_cpt_trt_rb;         // Read blocked by a hit in trt
+      uint32_t     m_cpt_trt_full;       // Transaction blocked due to a full trt
+
+      uint32_t     m_cpt_get;
+      uint32_t     m_cpt_put;
+
+      size_t       m_prev_count;
+
+      protected:
+
+      SC_HAS_PROCESS(VciMemCache);
+
+      public:
+      sc_in<bool>                                 p_clk;
+      sc_in<bool>                                 p_resetn;
+      sc_out<bool>                                p_irq;
+      soclib::caba::VciTarget<vci_param_int>      p_vci_tgt;
+      soclib::caba::VciInitiator<vci_param_ext>   p_vci_ixr;
+      soclib::caba::DspinInput<dspin_in_width>    p_dspin_p2m;
+      soclib::caba::DspinOutput<dspin_out_width>  p_dspin_m2p;
+      soclib::caba::DspinOutput<dspin_out_width>  p_dspin_clack;
+
+#if MONITOR_MEMCACHE_FSM == 1
+      sc_out<int> p_read_fsm; 
+      sc_out<int> p_write_fsm; 
+      sc_out<int> p_xram_rsp_fsm; 
+      sc_out<int> p_cas_fsm; 
+      sc_out<int> p_cleanup_fsm; 
+      sc_out<int> p_config_fsm; 
+      sc_out<int> p_alloc_heap_fsm; 
+      sc_out<int> p_alloc_dir_fsm; 
+      sc_out<int> p_alloc_trt_fsm; 
+      sc_out<int> p_alloc_upt_fsm; 
+      sc_out<int> p_alloc_ivt_fsm; 
+      sc_out<int> p_tgt_cmd_fsm; 
+      sc_out<int> p_tgt_rsp_fsm; 
+      sc_out<int> p_ixr_cmd_fsm; 
+      sc_out<int> p_ixr_rsp_fsm; 
+      sc_out<int> p_cc_send_fsm; 
+      sc_out<int> p_cc_receive_fsm; 
+      sc_out<int> p_multi_ack_fsm; 
+#endif
+
+      VciMemCache(
+          sc_module_name name,                                // Instance Name
+          const soclib::common::MappingTable &mtp,            // Mapping table INT network
+          const soclib::common::MappingTable &mtx,            // Mapping table RAM network
+          const soclib::common::IntTab       &srcid_x,        // global index RAM network
+          const soclib::common::IntTab       &tgtid_d,        // global index INT network
+          const size_t                       x_width,         // X width in platform
+          const size_t                       y_width,         // Y width in platform
+          const size_t                       nways,           // Number of ways per set
+          const size_t                       nsets,           // Number of sets
+          const size_t                       nwords,          // Number of words per line
+          const size_t                       max_copies,      // max number of copies
+          const size_t                       heap_size=HEAP_ENTRIES,
+          const size_t                       trt_lines=TRT_ENTRIES, 
+          const size_t                       upt_lines=UPT_ENTRIES,     
+          const size_t                       ivt_lines=IVT_ENTRIES,     
+          const size_t                       debug_start_cycle=0,
+          const bool                         debug_ok=false );
+
+      ~VciMemCache();
+
+      void reset_counters();
+      void print_stats(bool activity_counters = true, bool stats = true);
+      void print_trace( size_t detailed = 0 );
+      void cache_monitor(addr_t addr);
+      void start_monitor(addr_t addr, addr_t length);
+      void stop_monitor();
+
+      private:
+
+      void transition();
+      void genMoore();
+      void check_monitor(addr_t addr, data_t data, bool read);
+
+      uint32_t req_distance(uint32_t req_srcid);
+      bool is_local_req(uint32_t req_srcid);
+      int  read_instrumentation(uint32_t regr, uint32_t & rdata);
+
+      // Component attributes
+      std::list<soclib::common::Segment> m_seglist;          // segments allocated 
+      size_t                             m_nseg;             // number of segments
+      soclib::common::Segment            **m_seg;            // array of segments pointers
+      size_t                             m_seg_config;       // config segment index
+      const size_t                       m_srcid_x;          // global index on RAM network
+      const size_t                       m_initiators;       // Number of initiators
+      const size_t                       m_heap_size;        // Size of the heap
+      const size_t                       m_ways;             // Number of ways in a set
+      const size_t                       m_sets;             // Number of cache sets
+      const size_t                       m_words;            // Number of words in a line
+      size_t                             m_x_self;           // X self coordinate
+      size_t                             m_y_self;           // Y self coordinate
+      const size_t                       m_x_width;          // number of x bits in platform
+      const size_t                       m_y_width;          // number of y bits in platform
+      size_t                             m_debug_start_cycle;
+      bool                               m_debug_ok;
+      uint32_t                           m_trt_lines;
+      TransactionTab                     m_trt;              // xram transaction table
+      uint32_t                           m_upt_lines;
+      UpdateTab                          m_upt;              // pending update
+      UpdateTab                          m_ivt;              // pending invalidate
+      CacheDirectory                     m_cache_directory;  // data cache directory
+      CacheData                          m_cache_data;       // data array[set][way][word]
+      HeapDirectory                      m_heap;             // heap for copies
+      size_t                             m_max_copies;       // max number of copies in heap
+      GenericLLSCGlobalTable
+      < 32  ,    // number of slots
+        4096,    // number of processors in the system
+        8000,    // registration life (# of LL operations)
+        addr_t >                         m_llsc_table;       // ll/sc registration table
+
+      // adress masks
+      const soclib::common::AddressMaskingTable<addr_t>   m_x;
+      const soclib::common::AddressMaskingTable<addr_t>   m_y;
+      const soclib::common::AddressMaskingTable<addr_t>   m_z;
+      const soclib::common::AddressMaskingTable<addr_t>   m_nline;
+
+      // broadcast address
+      uint32_t                           m_broadcast_boundaries;
+
+      // configuration interface constants
+      const uint32_t m_config_addr_mask;
+      const uint32_t m_config_regr_width;
+      const uint32_t m_config_func_width;
+      const uint32_t m_config_regr_idx_mask;
+      const uint32_t m_config_func_idx_mask;
+
+      // Fifo between TGT_CMD fsm and READ fsm
+      GenericFifo<addr_t>    m_cmd_read_addr_fifo;
+      GenericFifo<size_t>    m_cmd_read_length_fifo;
+      GenericFifo<size_t>    m_cmd_read_srcid_fifo;
+      GenericFifo<size_t>    m_cmd_read_trdid_fifo;
+      GenericFifo<size_t>    m_cmd_read_pktid_fifo;
+
+      // Fifo between TGT_CMD fsm and WRITE fsm
+      GenericFifo<addr_t>    m_cmd_write_addr_fifo;
+      GenericFifo<bool>      m_cmd_write_eop_fifo;
+      GenericFifo<size_t>    m_cmd_write_srcid_fifo;
+      GenericFifo<size_t>    m_cmd_write_trdid_fifo;
+      GenericFifo<size_t>    m_cmd_write_pktid_fifo;
+      GenericFifo<data_t>    m_cmd_write_data_fifo;
+      GenericFifo<be_t>      m_cmd_write_be_fifo;
+
+      // Fifo between TGT_CMD fsm and CAS fsm
+      GenericFifo<addr_t>    m_cmd_cas_addr_fifo;
+      GenericFifo<bool>      m_cmd_cas_eop_fifo;
+      GenericFifo<size_t>    m_cmd_cas_srcid_fifo;
+      GenericFifo<size_t>    m_cmd_cas_trdid_fifo;
+      GenericFifo<size_t>    m_cmd_cas_pktid_fifo;
+      GenericFifo<data_t>    m_cmd_cas_wdata_fifo;
+
+      // Fifo between CC_RECEIVE fsm and CLEANUP fsm
+      GenericFifo<uint64_t>  m_cc_receive_to_cleanup_fifo;
+      
+      // Fifo between CC_RECEIVE fsm and MULTI_ACK fsm
+      GenericFifo<uint64_t>  m_cc_receive_to_multi_ack_fifo;
+
+      // Buffer between TGT_CMD fsm and TGT_RSP fsm
+      // (segmentation violation response request)
+      sc_signal<bool>     r_tgt_cmd_to_tgt_rsp_req;
+
+      sc_signal<uint32_t> r_tgt_cmd_to_tgt_rsp_rdata;
+      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_error;
+      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_srcid;
+      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_trdid;
+      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_pktid;
+
+      sc_signal<addr_t>   r_tgt_cmd_config_addr;
+      sc_signal<size_t>   r_tgt_cmd_config_cmd;
+
+      //////////////////////////////////////////////////
+      // Registers controlled by the TGT_CMD fsm
+      //////////////////////////////////////////////////
+
+      sc_signal<int>         r_tgt_cmd_fsm;
+
+      ///////////////////////////////////////////////////////
+      // Registers controlled by the CONFIG fsm
+      ///////////////////////////////////////////////////////
+
+      sc_signal<int>      r_config_fsm;               // FSM state
+      sc_signal<bool>     r_config_lock;              // lock protecting exclusive access
+      sc_signal<int>      r_config_cmd;               // config request type  
+      sc_signal<addr_t>   r_config_address;           // target buffer physical address
+      sc_signal<size_t>   r_config_srcid;             // config request srcid
+      sc_signal<size_t>   r_config_trdid;             // config request trdid
+      sc_signal<size_t>   r_config_pktid;             // config request pktid
+      sc_signal<size_t>   r_config_cmd_lines;         // number of lines to be handled
+      sc_signal<size_t>   r_config_rsp_lines;         // number of lines not completed
+      sc_signal<size_t>   r_config_dir_way;           // DIR: selected way
+      sc_signal<bool>     r_config_dir_lock;          // DIR: locked entry
+      sc_signal<size_t>   r_config_dir_count;         // DIR: number of copies
+      sc_signal<bool>     r_config_dir_is_cnt;        // DIR: counter mode (broadcast)
+      sc_signal<size_t>   r_config_dir_copy_srcid;    // DIR: first copy SRCID
+      sc_signal<bool>     r_config_dir_copy_inst;     // DIR: first copy L1 type
+      sc_signal<size_t>   r_config_dir_ptr;           // DIR: index of next copy in HEAP
+      sc_signal<size_t>   r_config_heap_next;         // current pointer to scan HEAP
+      sc_signal<size_t>   r_config_trt_index;         // selected entry in TRT
+      sc_signal<size_t>   r_config_ivt_index;         // selected entry in IVT 
+
+      // Buffer between CONFIG fsm and IXR_CMD fsm
+      sc_signal<bool>     r_config_to_ixr_cmd_req;    // valid request
+      sc_signal<size_t>   r_config_to_ixr_cmd_index;  // TRT index
+
+      // Buffer between CONFIG fsm and TGT_RSP fsm (send a done response to L1 cache)
+      sc_signal<bool>     r_config_to_tgt_rsp_req;    // valid request
+      sc_signal<bool>     r_config_to_tgt_rsp_error;  // error response
+      sc_signal<size_t>   r_config_to_tgt_rsp_srcid;  // Transaction srcid
+      sc_signal<size_t>   r_config_to_tgt_rsp_trdid;  // Transaction trdid
+      sc_signal<size_t>   r_config_to_tgt_rsp_pktid;  // Transaction pktid
+
+      // Buffer between CONFIG fsm and CC_SEND fsm (multi-inval / broadcast-inval)
+      sc_signal<bool>     r_config_to_cc_send_multi_req;    // multi-inval request
+      sc_signal<bool>     r_config_to_cc_send_brdcast_req;  // broadcast-inval request
+      sc_signal<addr_t>   r_config_to_cc_send_nline;        // line index
+      sc_signal<size_t>   r_config_to_cc_send_trdid;        // UPT index
+      GenericFifo<bool>   m_config_to_cc_send_inst_fifo;    // fifo for the L1 type
+      GenericFifo<size_t> m_config_to_cc_send_srcid_fifo;   // fifo for owners srcid
+
+      ///////////////////////////////////////////////////////
+      // Registers controlled by the READ fsm
+      ///////////////////////////////////////////////////////
+
+      sc_signal<int>      r_read_fsm;                 // FSM state
+      sc_signal<size_t>   r_read_copy;                // Srcid of the first copy
+      sc_signal<size_t>   r_read_copy_cache;          // Srcid of the first copy
+      sc_signal<bool>     r_read_copy_inst;           // Type of the first copy
+      sc_signal<tag_t>    r_read_tag;                 // cache line tag (in directory)
+      sc_signal<bool>     r_read_is_cnt;              // is_cnt bit (in directory)
+      sc_signal<bool>     r_read_lock;                // lock bit (in directory)
+      sc_signal<bool>     r_read_dirty;               // dirty bit (in directory)
+      sc_signal<size_t>   r_read_count;               // number of copies
+      sc_signal<size_t>   r_read_ptr;                 // pointer to the heap
+      sc_signal<data_t> * r_read_data;                // data (one cache line)
+      sc_signal<size_t>   r_read_way;                 // associative way (in cache)
+      sc_signal<size_t>   r_read_trt_index;           // Transaction Table index
+      sc_signal<size_t>   r_read_next_ptr;            // Next entry to point to
+      sc_signal<bool>     r_read_last_free;           // Last free entry
+      sc_signal<addr_t>   r_read_ll_key;              // LL key from llsc_global_table
+
+      // Buffer between READ fsm and IXR_CMD fsm 
+      sc_signal<bool>     r_read_to_ixr_cmd_req;      // valid request
+      sc_signal<size_t>   r_read_to_ixr_cmd_index;    // TRT index
+
+      // Buffer between READ fsm and TGT_RSP fsm (send a hit read response to L1 cache)
+      sc_signal<bool>     r_read_to_tgt_rsp_req;      // valid request
+      sc_signal<size_t>   r_read_to_tgt_rsp_srcid;    // Transaction srcid
+      sc_signal<size_t>   r_read_to_tgt_rsp_trdid;    // Transaction trdid
+      sc_signal<size_t>   r_read_to_tgt_rsp_pktid;    // Transaction pktid
+      sc_signal<data_t> * r_read_to_tgt_rsp_data;     // data (one cache line)
+      sc_signal<size_t>   r_read_to_tgt_rsp_word;     // first word of the response
+      sc_signal<size_t>   r_read_to_tgt_rsp_length;   // length of the response
+      sc_signal<addr_t>   r_read_to_tgt_rsp_ll_key;   // LL key from llsc_global_table
+
+      ///////////////////////////////////////////////////////////////
+      // Registers controlled by the WRITE fsm
+      ///////////////////////////////////////////////////////////////
+
+      sc_signal<int>      r_write_fsm;                // FSM state
+      sc_signal<addr_t>   r_write_address;            // first word address
+      sc_signal<size_t>   r_write_word_index;         // first word index in line
+      sc_signal<size_t>   r_write_word_count;         // number of words in line
+      sc_signal<size_t>   r_write_srcid;              // transaction srcid
+      sc_signal<size_t>   r_write_trdid;              // transaction trdid
+      sc_signal<size_t>   r_write_pktid;              // transaction pktid
+      sc_signal<data_t> * r_write_data;               // data (one cache line)
+      sc_signal<be_t>   * r_write_be;                 // one byte enable per word
+      sc_signal<bool>     r_write_byte;               // (BE != 0X0) and (BE != 0xF)
+      sc_signal<bool>     r_write_is_cnt;             // is_cnt bit (in directory)
+      sc_signal<bool>     r_write_lock;               // lock bit (in directory)
+      sc_signal<tag_t>    r_write_tag;                // cache line tag (in directory)
+      sc_signal<size_t>   r_write_copy;               // first owner of the line
+      sc_signal<size_t>   r_write_copy_cache;         // first owner of the line
+      sc_signal<bool>     r_write_copy_inst;          // is this owner a ICache ?
+      sc_signal<size_t>   r_write_count;              // number of copies
+      sc_signal<size_t>   r_write_ptr;                // pointer to the heap
+      sc_signal<size_t>   r_write_next_ptr;           // next pointer to the heap
+      sc_signal<bool>     r_write_to_dec;             // need to decrement update counter
+      sc_signal<size_t>   r_write_way;                // way of the line
+      sc_signal<size_t>   r_write_trt_index;          // index in Transaction Table
+      sc_signal<size_t>   r_write_upt_index;          // index in Update Table
+      sc_signal<bool>     r_write_sc_fail;            // sc command failed
+      sc_signal<data_t>   r_write_sc_key;             // sc command key
+      sc_signal<bool>     r_write_bc_data_we;         // Write enable for data buffer
+
+      // Buffer between WRITE fsm and TGT_RSP fsm (acknowledge a write command from L1)
+      sc_signal<bool>     r_write_to_tgt_rsp_req;     // valid request
+      sc_signal<size_t>   r_write_to_tgt_rsp_srcid;   // transaction srcid
+      sc_signal<size_t>   r_write_to_tgt_rsp_trdid;   // transaction trdid
+      sc_signal<size_t>   r_write_to_tgt_rsp_pktid;   // transaction pktid
+      sc_signal<bool>     r_write_to_tgt_rsp_sc_fail; // sc command failed
+
+      // Buffer between WRITE fsm and IXR_CMD fsm 
+      sc_signal<bool>     r_write_to_ixr_cmd_req;     // valid request
+      sc_signal<size_t>   r_write_to_ixr_cmd_index;   // TRT index 
+
+      // Buffer between WRITE fsm and CC_SEND fsm (Update/Invalidate L1 caches)
+      sc_signal<bool>     r_write_to_cc_send_multi_req;     // valid multicast request
+      sc_signal<bool>     r_write_to_cc_send_brdcast_req;   // valid brdcast request
+      sc_signal<addr_t>   r_write_to_cc_send_nline;         // cache line index
+      sc_signal<size_t>   r_write_to_cc_send_trdid;         // index in Update Table
+      sc_signal<data_t> * r_write_to_cc_send_data;          // data (one cache line)
+      sc_signal<be_t>   * r_write_to_cc_send_be;            // word enable
+      sc_signal<size_t>   r_write_to_cc_send_count;         // number of words in line
+      sc_signal<size_t>   r_write_to_cc_send_index;         // index of first word in line
+      GenericFifo<bool>   m_write_to_cc_send_inst_fifo;     // fifo for the L1 type
+      GenericFifo<size_t> m_write_to_cc_send_srcid_fifo;    // fifo for srcids
+
+      // Buffer between WRITE fsm and MULTI_ACK fsm (Decrement UPT entry)
+      sc_signal<bool>     r_write_to_multi_ack_req;       // valid request
+      sc_signal<size_t>   r_write_to_multi_ack_upt_index; // index in update table
+
+      /////////////////////////////////////////////////////////
+      // Registers controlled by MULTI_ACK fsm
+      //////////////////////////////////////////////////////////
+
+      sc_signal<int>      r_multi_ack_fsm;       // FSM state
+      sc_signal<size_t>   r_multi_ack_upt_index; // index in the Update Table
+      sc_signal<size_t>   r_multi_ack_srcid;     // pending write srcid
+      sc_signal<size_t>   r_multi_ack_trdid;     // pending write trdid
+      sc_signal<size_t>   r_multi_ack_pktid;     // pending write pktid
+      sc_signal<addr_t>   r_multi_ack_nline;     // pending write nline
+
+      // Buffer between MULTI_ACK fsm and TGT_RSP fsm (complete write/update transaction)
+      sc_signal<bool>     r_multi_ack_to_tgt_rsp_req;   // valid request
+      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_srcid; // Transaction srcid
+      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_trdid; // Transaction trdid
+      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_pktid; // Transaction pktid
+
+      ///////////////////////////////////////////////////////
+      // Registers controlled by CLEANUP fsm
+      ///////////////////////////////////////////////////////
+
+      sc_signal<int>      r_cleanup_fsm;           // FSM state
+      sc_signal<size_t>   r_cleanup_srcid;         // transaction srcid
+      sc_signal<bool>     r_cleanup_inst;          // Instruction or Data ?
+      sc_signal<size_t>   r_cleanup_way_index;     // L1 Cache Way index
+      sc_signal<addr_t>   r_cleanup_nline;         // cache line index
+
+
+      sc_signal<copy_t>   r_cleanup_copy;          // first copy
+      sc_signal<copy_t>   r_cleanup_copy_cache;    // first copy
+      sc_signal<size_t>   r_cleanup_copy_inst;     // type of the first copy
+      sc_signal<copy_t>   r_cleanup_count;         // number of copies
+      sc_signal<size_t>   r_cleanup_ptr;           // pointer to the heap
+      sc_signal<size_t>   r_cleanup_prev_ptr;      // previous pointer to the heap
+      sc_signal<size_t>   r_cleanup_prev_srcid;    // srcid of previous heap entry
+      sc_signal<size_t>   r_cleanup_prev_cache_id; // srcid of previous heap entry
+      sc_signal<bool>     r_cleanup_prev_inst;     // inst bit of previous heap entry
+      sc_signal<size_t>   r_cleanup_next_ptr;      // next pointer to the heap
+      sc_signal<tag_t>    r_cleanup_tag;           // cache line tag (in directory)
+      sc_signal<bool>     r_cleanup_is_cnt;        // inst bit (in directory)
+      sc_signal<bool>     r_cleanup_lock;          // lock bit (in directory)
+      sc_signal<bool>     r_cleanup_dirty;         // dirty bit (in directory)
+      sc_signal<size_t>   r_cleanup_way;           // associative way (in cache)
+
+      sc_signal<size_t>   r_cleanup_write_srcid;   // srcid of write rsp
+      sc_signal<size_t>   r_cleanup_write_trdid;   // trdid of write rsp
+      sc_signal<size_t>   r_cleanup_write_pktid;   // pktid of write rsp
+
+      sc_signal<bool>     r_cleanup_need_rsp;      // write response required
+      sc_signal<bool>     r_cleanup_need_ack;      // config acknowledge required
+
+      sc_signal<size_t>   r_cleanup_index;         // index of the INVAL line (in the UPT)
+
+      // Buffer between CLEANUP fsm and TGT_RSP fsm (acknowledge a write command from L1)
+      sc_signal<bool>     r_cleanup_to_tgt_rsp_req;   // valid request
+      sc_signal<size_t>   r_cleanup_to_tgt_rsp_srcid; // transaction srcid
+      sc_signal<size_t>   r_cleanup_to_tgt_rsp_trdid; // transaction trdid
+      sc_signal<size_t>   r_cleanup_to_tgt_rsp_pktid; // transaction pktid
+
+      ///////////////////////////////////////////////////////
+      // Registers controlled by CAS fsm
+      ///////////////////////////////////////////////////////
+
+      sc_signal<int>      r_cas_fsm;              // FSM state
+      sc_signal<data_t>   r_cas_wdata;            // write data word
+      sc_signal<data_t> * r_cas_rdata;            // read data word
+      sc_signal<uint32_t> r_cas_lfsr;             // lfsr for random introducing
+      sc_signal<size_t>   r_cas_cpt;              // size of command
+      sc_signal<copy_t>   r_cas_copy;             // Srcid of the first copy
+      sc_signal<copy_t>   r_cas_copy_cache;       // Srcid of the first copy
+      sc_signal<bool>     r_cas_copy_inst;        // Type of the first copy
+      sc_signal<size_t>   r_cas_count;            // number of copies
+      sc_signal<size_t>   r_cas_ptr;              // pointer to the heap
+      sc_signal<size_t>   r_cas_next_ptr;         // next pointer to the heap
+      sc_signal<bool>     r_cas_is_cnt;           // is_cnt bit (in directory)
+      sc_signal<bool>     r_cas_dirty;            // dirty bit (in directory)
+      sc_signal<size_t>   r_cas_way;              // way in directory
+      sc_signal<size_t>   r_cas_set;              // set in directory
+      sc_signal<data_t>   r_cas_tag;              // cache line tag (in directory)
+      sc_signal<size_t>   r_cas_trt_index;        // Transaction Table index
+      sc_signal<size_t>   r_cas_upt_index;        // Update Table index
+      sc_signal<data_t> * r_cas_data;             // cache line data
+
+      // Buffer between CAS fsm and IXR_CMD fsm 
+      sc_signal<bool>     r_cas_to_ixr_cmd_req;   // valid request
+      sc_signal<size_t>   r_cas_to_ixr_cmd_index; // TRT index 
+
+      // Buffer between CAS fsm and TGT_RSP fsm
+      sc_signal<bool>     r_cas_to_tgt_rsp_req;   // valid request
+      sc_signal<data_t>   r_cas_to_tgt_rsp_data;  // read data word
+      sc_signal<size_t>   r_cas_to_tgt_rsp_srcid; // Transaction srcid
+      sc_signal<size_t>   r_cas_to_tgt_rsp_trdid; // Transaction trdid
+      sc_signal<size_t>   r_cas_to_tgt_rsp_pktid; // Transaction pktid
+
+      // Buffer between CAS fsm and CC_SEND fsm (Update/Invalidate L1 caches)
+      sc_signal<bool>     r_cas_to_cc_send_multi_req;     // valid request
+      sc_signal<bool>     r_cas_to_cc_send_brdcast_req;   // brdcast request
+      sc_signal<addr_t>   r_cas_to_cc_send_nline;         // cache line index
+      sc_signal<size_t>   r_cas_to_cc_send_trdid;         // index in Update Table
+      sc_signal<data_t>   r_cas_to_cc_send_wdata;         // data (one word)
+      sc_signal<bool>     r_cas_to_cc_send_is_long;       // it is a 64 bits CAS
+      sc_signal<data_t>   r_cas_to_cc_send_wdata_high;    // data high (one word)
+      sc_signal<size_t>   r_cas_to_cc_send_index;         // index of the word in line
+      GenericFifo<bool>   m_cas_to_cc_send_inst_fifo;     // fifo for the L1 type
+      GenericFifo<size_t> m_cas_to_cc_send_srcid_fifo;    // fifo for srcids
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by the IXR_RSP fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_ixr_rsp_fsm;                // FSM state
+      sc_signal<size_t>   r_ixr_rsp_trt_index;          // TRT entry index
+      sc_signal<size_t>   r_ixr_rsp_cpt;                // word counter
+
+      // Buffer between IXR_RSP fsm and CONFIG fsm  (response from the XRAM)
+      sc_signal<bool>     r_ixr_rsp_to_config_ack;      // one single bit   
+
+      // Buffer between IXR_RSP fsm and XRAM_RSP fsm  (response from the XRAM)
+      sc_signal<bool>   * r_ixr_rsp_to_xram_rsp_rok;    // one bit per TRT entry
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by the XRAM_RSP fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_xram_rsp_fsm;               // FSM state
+      sc_signal<size_t>   r_xram_rsp_trt_index;         // TRT entry index
+      TransactionTabEntry r_xram_rsp_trt_buf;           // TRT entry local buffer
+      sc_signal<bool>     r_xram_rsp_victim_inval;      // victim line invalidate
+      sc_signal<bool>     r_xram_rsp_victim_is_cnt;     // victim line inst bit
+      sc_signal<bool>     r_xram_rsp_victim_dirty;      // victim line dirty bit
+      sc_signal<size_t>   r_xram_rsp_victim_way;        // victim line way
+      sc_signal<size_t>   r_xram_rsp_victim_set;        // victim line set
+      sc_signal<addr_t>   r_xram_rsp_victim_nline;      // victim line index
+      sc_signal<copy_t>   r_xram_rsp_victim_copy;       // victim line first copy
+      sc_signal<copy_t>   r_xram_rsp_victim_copy_cache; // victim line first copy
+      sc_signal<bool>     r_xram_rsp_victim_copy_inst;  // victim line type of first copy
+      sc_signal<size_t>   r_xram_rsp_victim_count;      // victim line number of copies
+      sc_signal<size_t>   r_xram_rsp_victim_ptr;        // victim line pointer to the heap
+      sc_signal<data_t> * r_xram_rsp_victim_data;       // victim line data
+      sc_signal<size_t>   r_xram_rsp_ivt_index;         // IVT entry index
+      sc_signal<size_t>   r_xram_rsp_next_ptr;          // Next pointer to the heap
+      sc_signal<bool>     r_xram_rsp_rerror_irq;        // WRITE MISS rerror irq
+      sc_signal<bool>     r_xram_rsp_rerror_irq_enable; // WRITE MISS rerror irq enable
+      sc_signal<addr_t>   r_xram_rsp_rerror_address;    // WRITE MISS rerror address
+      sc_signal<size_t>   r_xram_rsp_rerror_rsrcid;     // WRITE MISS rerror srcid
+
+      // Buffer between XRAM_RSP fsm and TGT_RSP fsm  (response to L1 cache)
+      sc_signal<bool>     r_xram_rsp_to_tgt_rsp_req;    // Valid request
+      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_srcid;  // Transaction srcid
+      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_trdid;  // Transaction trdid
+      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_pktid;  // Transaction pktid
+      sc_signal<data_t> * r_xram_rsp_to_tgt_rsp_data;   // data (one cache line)
+      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_word;   // first word index
+      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_length; // length of the response
+      sc_signal<bool>     r_xram_rsp_to_tgt_rsp_rerror; // send error to requester
+      sc_signal<addr_t>   r_xram_rsp_to_tgt_rsp_ll_key; // LL key from llsc_global_table
+
+      // Buffer between XRAM_RSP fsm and CC_SEND fsm (Inval L1 Caches)
+      sc_signal<bool>     r_xram_rsp_to_cc_send_multi_req;     // Valid request
+      sc_signal<bool>     r_xram_rsp_to_cc_send_brdcast_req;   // Broadcast request
+      sc_signal<addr_t>   r_xram_rsp_to_cc_send_nline;         // cache line index;
+      sc_signal<size_t>   r_xram_rsp_to_cc_send_trdid;         // index of UPT entry
+      GenericFifo<bool>   m_xram_rsp_to_cc_send_inst_fifo;     // fifo for the L1 type
+      GenericFifo<size_t> m_xram_rsp_to_cc_send_srcid_fifo;    // fifo for srcids
+
+      // Buffer between XRAM_RSP fsm and IXR_CMD fsm 
+      sc_signal<bool>     r_xram_rsp_to_ixr_cmd_req;   // Valid request
+      sc_signal<size_t>   r_xram_rsp_to_ixr_cmd_index; // TRT index 
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by the IXR_CMD fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_ixr_cmd_fsm;
+      sc_signal<size_t>   r_ixr_cmd_word;              // word index for a put
+      sc_signal<size_t>   r_ixr_cmd_trdid;             // TRT index value     
+      sc_signal<addr_t>   r_ixr_cmd_address;           // address to XRAM
+      sc_signal<data_t> * r_ixr_cmd_wdata;             // cache line buffer
+      sc_signal<bool>     r_ixr_cmd_get;               // transaction type (PUT/GET)
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by TGT_RSP fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_tgt_rsp_fsm;
+      sc_signal<size_t>   r_tgt_rsp_cpt;
+      sc_signal<bool>     r_tgt_rsp_key_sent;
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by CC_SEND fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_cc_send_fsm;
+      sc_signal<size_t>   r_cc_send_cpt;
+      sc_signal<bool>     r_cc_send_inst;
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by CC_RECEIVE fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_cc_receive_fsm;
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by ALLOC_DIR fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_alloc_dir_fsm;
+      sc_signal<unsigned> r_alloc_dir_reset_cpt;
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by ALLOC_TRT fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_alloc_trt_fsm;
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by ALLOC_UPT fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_alloc_upt_fsm;
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by ALLOC_IVT fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_alloc_ivt_fsm;
+
+      ////////////////////////////////////////////////////
+      // Registers controlled by ALLOC_HEAP fsm
+      ////////////////////////////////////////////////////
+
+      sc_signal<int>      r_alloc_heap_fsm;
+      sc_signal<unsigned> r_alloc_heap_reset_cpt;
+    }; // end class VciMemCache
+
+}}
+
+#endif
+
+// Local Variables:
+// tab-width: 2
+// c-basic-offset: 2
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=2:tabstop=2:softtabstop=2
+
Index: /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/xram_transaction.h
===================================================================
--- /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/xram_transaction.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_mem_cache/caba/source/include/xram_transaction.h	(revision 724)
@@ -0,0 +1,474 @@
+#ifndef XRAM_TRANSACTION_H_
+#define XRAM_TRANSACTION_H_
+
+#include <inttypes.h>
+#include <systemc>
+#include <cassert>
+#include "arithmetics.h"
+
+#define DEBUG_XRAM_TRANSACTION 0
+
+////////////////////////////////////////////////////////////////////////
+//                  A transaction tab entry         
+////////////////////////////////////////////////////////////////////////
+
+class TransactionTabEntry 
+{
+    typedef sc_dt::sc_uint<64>    wide_data_t;
+    typedef sc_dt::sc_uint<40>    addr_t;
+    typedef uint32_t              data_t;
+    typedef uint32_t              be_t;
+
+    public:
+    bool 		        valid;     	    // entry valid 
+    bool 		        xram_read; 	    // read request to XRAM
+    addr_t   	        nline;    	    // index (zy) of the requested line
+    size_t 	            srcid;     	    // processor requesting the transaction
+    size_t 	            trdid;     	    // processor requesting the transaction
+    size_t 	            pktid;     	    // processor requesting the transaction
+    bool 		        proc_read;	    // read request from processor
+    size_t 	            read_length;    // length of the read (for the response)
+    size_t 	            word_index;    	// index of the first read word (for response)
+    std::vector<data_t> wdata;          // write buffer (one cache line)
+    std::vector<be_t>   wdata_be;    	// be for each data in the write buffer
+    bool                rerror;         // error returned by xram
+    data_t              ll_key;         // LL key returned by the llsc_global_table
+    bool                config;         // transaction required by CONFIG FSM
+
+    /////////////////////////////////////////////////////////////////////
+    // The init() function initializes the entry 
+    /////////////////////////////////////////////////////////////////////
+    void init()
+    {
+        valid		= false;
+        rerror      = false;
+        config      = false;
+    }
+
+    /////////////////////////////////////////////////////////////////////
+    // The alloc() function initializes the vectors of an entry
+    // The "n_words" argument is the number of words in a cache line.
+    /////////////////////////////////////////////////////////////////////
+    void alloc(size_t n_words)
+    {
+        wdata_be.reserve( (int)n_words );
+        wdata.reserve( (int)n_words );
+        for(size_t i=0; i<n_words; i++)
+        {
+            wdata_be.push_back(0);
+            wdata.push_back(0);
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // The copy() function copies an existing entry
+    ////////////////////////////////////////////////////////////////////
+    void copy(const TransactionTabEntry &source)
+    {
+        valid	    = source.valid;
+        xram_read 	= source.xram_read;
+        nline	    = source.nline;
+        srcid	    = source.srcid;
+        trdid	    = source.trdid;
+        pktid	    = source.pktid;
+        proc_read 	= source.proc_read;
+        read_length = source.read_length;
+        word_index	= source.word_index;
+        wdata_be.assign(source.wdata_be.begin(),source.wdata_be.end());
+        wdata.assign(source.wdata.begin(),source.wdata.end());
+        rerror      = source.rerror;
+        ll_key      = source.ll_key;
+        config      = source.config;
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // The print() function prints the entry identified by "index". 
+    ////////////////////////////////////////////////////////////////////
+    void print( size_t index, size_t mode )
+    {
+        std::cout << "  TRT[" << std::dec << index << "] "
+                  << " valid = " << valid
+                  << " / error = " << rerror 
+                  << " / get = " << xram_read 
+                  << " / config = " << config << std::hex
+                  << " / address = " << nline*4*wdata.size()
+                  << " / srcid = " << srcid << std::endl;
+        if ( mode )
+        {
+            std::cout << "        trdid = " << trdid
+                      << " / pktid = " << pktid << std::dec 
+                      << " / proc_read = " << proc_read 
+                      << " / read_length = " << read_length
+                      << " / word_index  = " << word_index << std::hex 
+                      << " / ll_key = " << ll_key << std::endl;
+            std::cout << "        wdata = ";
+            for(size_t i=0; i<wdata.size() ; i++)
+            {
+                std::cout << std::hex << wdata[i] << " / ";
+            }
+            std::cout << std::endl;
+        }
+    }
+
+    /////////////////////////////////////////////////////////////////////
+    // 		Constructors
+    /////////////////////////////////////////////////////////////////////
+
+    TransactionTabEntry()
+    {
+        wdata_be.clear();
+        wdata.clear();
+        valid  = false;
+        rerror = false;
+        config = false;
+    }
+
+    TransactionTabEntry(const TransactionTabEntry &source)
+    {
+        valid	    = source.valid;
+        xram_read	= source.xram_read;
+        nline	    = source.nline;
+        srcid	    = source.srcid;
+        trdid	    = source.trdid;
+        pktid	    = source.pktid;
+        proc_read	= source.proc_read;
+        read_length = source.read_length;
+        word_index	= source.word_index;
+        wdata_be.assign(source.wdata_be.begin(),source.wdata_be.end());
+        wdata.assign(source.wdata.begin(),source.wdata.end());	
+        rerror      = source.rerror;
+        ll_key      = source.ll_key;
+        config      = source.config;
+    }
+
+}; // end class TransactionTabEntry
+
+////////////////////////////////////////////////////////////////////////
+//                  The transaction tab                              
+////////////////////////////////////////////////////////////////////////
+class TransactionTab
+{
+    typedef sc_dt::sc_uint<64>    wide_data_t;
+    typedef sc_dt::sc_uint<40>    addr_t;
+    typedef uint32_t              data_t;
+    typedef uint32_t              be_t;
+
+    private:
+    const std::string tab_name;                // the name for logs
+    size_t            size_tab;                // the size of the tab
+
+    data_t be_to_mask(be_t be)
+    {
+        data_t ret = 0;
+        if ( be&0x1 ) {
+            ret = ret | 0x000000FF;
+        }
+        if ( be&0x2 ) {
+            ret = ret | 0x0000FF00;
+        }
+        if ( be&0x4 ) {
+            ret = ret | 0x00FF0000;
+        }
+        if ( be&0x8 ) {
+            ret = ret | 0xFF000000;
+        }
+        return ret;
+    }
+
+    public:
+    TransactionTabEntry *tab;       // The transaction tab
+
+    ////////////////////////////////////////////////////////////////////
+    //		Constructors
+    ////////////////////////////////////////////////////////////////////
+    TransactionTab()
+    {
+        size_tab=0;
+        tab=NULL;
+    }
+
+    TransactionTab(const std::string &name,
+                   size_t            n_entries, 
+                   size_t            n_words )
+    : tab_name( name ),
+      size_tab( n_entries ) 
+    {
+        tab = new TransactionTabEntry[size_tab];
+        for ( size_t i=0; i<size_tab; i++) 
+        {
+            tab[i].alloc(n_words);
+        }
+    }
+
+    ~TransactionTab()
+    {
+        delete [] tab;
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The size() function returns the size of the tab
+    /////////////////////////////////////////////////////////////////////
+    size_t size()
+    {
+        return size_tab;
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The init() function initializes the transaction tab entries
+    /////////////////////////////////////////////////////////////////////
+    void init()
+    {
+        for ( size_t i=0; i<size_tab; i++) 
+        {
+            tab[i].init();
+        }
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The print() function prints TRT content.
+    // Detailed content if detailed argument is non zero.
+    /////////////////////////////////////////////////////////////////////
+    void print( size_t detailed = 0 )
+    {
+        std::cout << "  < TRT content in " <<  tab_name << " >" << std::endl;
+        for ( size_t id = 0 ; id < size_tab ; id++ )
+        {
+            tab[id].print( id , detailed );
+        }
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The read() function returns a transaction tab entry.
+    // Arguments :
+    // - index : the index of the entry to read
+    /////////////////////////////////////////////////////////////////////
+    TransactionTabEntry read(const size_t index)
+    {
+        assert( (index < size_tab) and 
+        "MEMC ERROR: Invalid Transaction Tab Entry");
+
+        return tab[index];
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The full() function returns the state of the transaction tab
+    // Arguments :
+    // - index : (return argument) the index of an empty entry 
+    // The function returns true if the transaction tab is full
+    /////////////////////////////////////////////////////////////////////
+    bool full(size_t &index)
+    {
+        for(size_t i=0; i<size_tab; i++)
+        {
+            if(!tab[i].valid)
+            {
+                index=i;
+                return false;	
+            }
+        }
+        return true;
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The hit_read() function checks if an XRAM read transaction exists 
+    // for a given cache line.
+    // Arguments :
+    // - index : (return argument) the index of the hit entry, if there is 
+    // - nline : the index (zy) of the requested line
+    // The function returns true if a read request has already been sent
+    //////////////////////////////////////////////////////////////////////
+    bool hit_read(const addr_t nline,size_t &index)
+    {
+        for(size_t i=0; i<size_tab; i++)
+        {
+            if((tab[i].valid && (nline==tab[i].nline)) && (tab[i].xram_read)) 
+            {
+                index=i;
+                return true;	
+            }
+        }
+        return false;
+    }
+    ///////////////////////////////////////////////////////////////////////
+    // The hit_write() function looks if an XRAM write transaction exists 
+    // for a given line.
+    // Arguments :
+    // - nline : the index (zy) of the requested line
+    // The function returns true if a write request has already been sent
+    ///////////////////////////////////////////////////////////////////////
+    bool hit_write(const addr_t nline)
+    {
+        for(size_t i=0; i<size_tab; i++)
+        {
+            if(tab[i].valid && (nline==tab[i].nline) && !(tab[i].xram_read)) 
+            {
+                return true;	
+            }
+        }
+        return false;
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The write_data_mask() function writes a vector of data (a line).
+    // The data is written only if the corresponding bits are set
+    // in the be vector. 
+    // Arguments :
+    // - index : the index of the request in the transaction tab
+    // - be   : vector of be 
+    // - data : vector of data
+    /////////////////////////////////////////////////////////////////////
+    void write_data_mask(const size_t index, 
+            const std::vector<be_t> &be, 
+            const std::vector<data_t> &data) 
+    {
+        assert( (index < size_tab) and
+        "MEMC ERROR: The selected entry is out of range in TRT write_data_mask()");
+
+        assert( (be.size()==tab[index].wdata_be.size()) and
+        "MEMC ERROR: Bad be size in TRT write_data_mask()");
+
+        assert( (data.size()==tab[index].wdata.size()) and
+        "MEMC ERROR: Bad data size in TRT write_data_mask()");
+
+        for(size_t i=0; i<tab[index].wdata_be.size() ; i++) 
+        {
+            tab[index].wdata_be[i] = tab[index].wdata_be[i] | be[i];
+            data_t mask = be_to_mask(be[i]);
+            tab[index].wdata[i] = (tab[index].wdata[i] & ~mask) | (data[i] & mask);
+        }
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The set() function registers a transaction (read or write)
+    // to the XRAM in the transaction tab.
+    // Arguments :
+    // - index : index in the transaction tab
+    // - xram_read : transaction type (read or write a cache line)
+    // - nline : the index (zy) of the cache line
+    // - srcid : srcid of the initiator that caused the transaction
+    // - trdid : trdid of the initiator that caused the transaction
+    // - pktid : pktid of the initiator that caused the transaction
+    // - proc_read : does the initiator want a copy
+    // - read_length : length of read (in case of processor read)
+    // - word_index : index in the line (in case of single word read)
+    // - data : the data to write (in case of write)
+    // - data_be : the mask of the data to write (in case of write)
+    // - ll_key  : the ll key (if any) returned by the llsc_global_table
+    // - config  : transaction required by config FSM
+    /////////////////////////////////////////////////////////////////////
+    void set(const size_t index,
+            const bool xram_read,
+            const addr_t nline,
+            const size_t srcid,
+            const size_t trdid,
+            const size_t pktid,
+            const bool proc_read,
+            const size_t read_length,
+            const size_t word_index,
+            const std::vector<be_t> &data_be,
+            const std::vector<data_t> &data, 
+            const data_t ll_key = 0,
+            const bool config = false) 
+    {
+        assert( (index < size_tab) and
+        "MEMC ERROR: The selected entry is out of range in TRT set()");
+
+        assert( (data_be.size()==tab[index].wdata_be.size()) and 
+        "MEMC ERROR: Bad data_be argument in TRT set()");
+
+        assert( (data.size()==tab[index].wdata.size()) and 
+        "MEMC ERROR: Bad data argument in TRT set()");
+
+        tab[index].valid	        = true;
+        tab[index].xram_read        = xram_read;
+        tab[index].nline	        = nline;
+        tab[index].srcid	        = srcid;
+        tab[index].trdid	        = trdid;
+        tab[index].pktid	        = pktid;
+        tab[index].proc_read	    = proc_read;
+        tab[index].read_length	    = read_length;
+        tab[index].word_index	    = word_index;
+        tab[index].ll_key   	    = ll_key;
+        tab[index].config           = config;
+        for(size_t i=0; i<tab[index].wdata.size(); i++) 
+        {
+            tab[index].wdata_be[i]    = data_be[i];
+            tab[index].wdata[i]       = data[i];
+        }
+    }
+
+    /////////////////////////////////////////////////////////////////////
+    // The write_rsp() function writes two 32 bits words of the response 
+    // to a XRAM read transaction.
+    // The BE field in TRT is taken into account.
+    // Arguments :
+    // - index : index of the entry in TRT
+    // - word  : index of the 32 bits word in the line
+    // - data  : 64 bits value (first data right)
+    /////////////////////////////////////////////////////////////////////
+    void write_rsp(const size_t      index,
+                   const size_t      word,
+                   const wide_data_t data,
+                   const bool        rerror)
+    {
+        data_t  value;
+        data_t  mask;
+
+        assert( (index < size_tab) and
+        "MEMC ERROR: The selected entry is out of range in TRT write_rsp()");
+
+        assert( (word < tab[index].wdata_be.size()) and 
+        "MEMC ERROR: Bad word index in TRT write_rsp()");
+
+        assert( (tab[index].valid) and
+        "MEMC ERROR: TRT entry not valid in TRT write_rsp()");
+
+        assert( (tab[index].xram_read ) and
+        "MEMC ERROR: TRT entry is not a GET in TRT write_rsp()");
+
+        if ( rerror )
+        {
+            tab[index].rerror = true;
+            return;
+        }
+
+        // first 32 bits word
+        value = (data_t)data;
+        mask  = be_to_mask(tab[index].wdata_be[word]);
+        tab[index].wdata[word] = (tab[index].wdata[word] & mask) | (value & ~mask);
+
+        // second 32 bits word
+        value = (data_t)(data>>32);
+        mask  = be_to_mask(tab[index].wdata_be[word+1]);
+        tab[index].wdata[word+1] = (tab[index].wdata[word+1] & mask) | (value & ~mask);
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The erase() function erases an entry in the transaction tab.
+    // Arguments :
+    // - index : the index of the request in the transaction tab
+    /////////////////////////////////////////////////////////////////////
+    void erase(const size_t index)
+    {
+        assert( (index < size_tab) and 
+        "MEMC ERROR: The selected entry is out of range in TRT erase()");
+
+        tab[index].valid	= false;
+        tab[index].rerror   = false;
+    }
+    /////////////////////////////////////////////////////////////////////
+    // The is_config() function returns the config flag value.
+    // Arguments :
+    // - index : the index of the entry in the transaction tab
+    /////////////////////////////////////////////////////////////////////
+    bool is_config(const size_t index)
+    {
+        assert( (index < size_tab) and
+        "MEMC ERROR: The selected entry is out of range in TRT is_config()");
+
+        return tab[index].config;
+    }
+}; // end class TransactionTab
+
+#endif
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp
===================================================================
--- /branches/fault_tolerance/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp	(revision 724)
@@ -0,0 +1,9045 @@
+/* -*- c++ -*-
+ *
+ * File       : vci_mem_cache.cpp
+ * Date       : 30/10/2008
+ * Copyright  : UPMC / LIP6
+ * Authors    : Alain Greiner / Eric Guthmuller
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Maintainers: alain.greiner@lip6.fr
+ *              eric.guthmuller@polytechnique.edu
+ *              cesar.fuguet-tortolero@lip6.fr
+ *              alexandre.joannou@lip6.fr
+ */
+
+
+#include "../include/vci_mem_cache.h"
+#include "mem_cache.h"
+
+//////   debug services   /////////////////////////////////////////////////////////////
+// All debug messages are conditionned by two variables:
+// - compile time   : DEBUG_MEMC_*** : defined below
+// - execution time : m_debug  = (m_debug_ok) and (m_cpt_cycle > m_debug_start_cycle)
+///////////////////////////////////////////////////////////////////////////////////////
+
+#define DEBUG_MEMC_GLOBAL    0 // synthetic trace of all FSMs
+#define DEBUG_MEMC_CONFIG    1 // detailed trace of CONFIG FSM
+#define DEBUG_MEMC_READ      1 // detailed trace of READ FSM
+#define DEBUG_MEMC_WRITE     1 // detailed trace of WRITE FSM
+#define DEBUG_MEMC_CAS       1 // detailed trace of CAS FSM
+#define DEBUG_MEMC_IXR_CMD   1 // detailed trace of IXR_CMD FSM
+#define DEBUG_MEMC_IXR_RSP   1 // detailed trace of IXR_RSP FSM
+#define DEBUG_MEMC_XRAM_RSP  1 // detailed trace of XRAM_RSP FSM
+#define DEBUG_MEMC_CC_SEND   1 // detailed trace of CC_SEND FSM
+#define DEBUG_MEMC_MULTI_ACK 1 // detailed trace of MULTI_ACK FSM
+#define DEBUG_MEMC_TGT_CMD   1 // detailed trace of TGT_CMD FSM
+#define DEBUG_MEMC_TGT_RSP   1 // detailed trace of TGT_RSP FSM
+#define DEBUG_MEMC_CLEANUP   1 // detailed trace of CLEANUP FSM
+
+#define RANDOMIZE_CAS        1
+
+namespace soclib { namespace caba {
+
+    const char *tgt_cmd_fsm_str[] =
+    {
+        "TGT_CMD_IDLE",
+        "TGT_CMD_READ",
+        "TGT_CMD_WRITE",
+        "TGT_CMD_CAS",
+        "TGT_CMD_CONFIG",
+        "TGT_CMD_ERROR"
+    };
+    const char *tgt_rsp_fsm_str[] =
+    {
+        "TGT_RSP_READ_IDLE",
+        "TGT_RSP_WRITE_IDLE",
+        "TGT_RSP_CAS_IDLE",
+        "TGT_RSP_XRAM_IDLE",
+        "TGT_RSP_MULTI_ACK_IDLE",
+        "TGT_RSP_CLEANUP_IDLE",
+        "TGT_RSP_TGT_CMD_IDLE",
+        "TGT_RSP_CONFIG_IDLE",
+        "TGT_RSP_READ",
+        "TGT_RSP_WRITE",
+        "TGT_RSP_CAS",
+        "TGT_RSP_XRAM",
+        "TGT_RSP_MULTI_ACK",
+        "TGT_RSP_CLEANUP",
+        "TGT_RSP_TGT_CMD",
+        "TGT_RSP_CONFIG"
+    };
+    const char *cc_receive_fsm_str[] =
+    {
+        "CC_RECEIVE_IDLE",
+        "CC_RECEIVE_CLEANUP",
+        "CC_RECEIVE_CLEANUP_EOP",
+        "CC_RECEIVE_MULTI_ACK"
+    };
+    const char *cc_send_fsm_str[] =
+    {
+        "CC_SEND_XRAM_RSP_IDLE",
+        "CC_SEND_WRITE_IDLE",
+        "CC_SEND_CAS_IDLE",
+        "CC_SEND_CONFIG_IDLE",
+        "CC_SEND_XRAM_RSP_BRDCAST_HEADER",
+        "CC_SEND_XRAM_RSP_BRDCAST_NLINE",
+        "CC_SEND_XRAM_RSP_INVAL_HEADER",
+        "CC_SEND_XRAM_RSP_INVAL_NLINE",
+        "CC_SEND_WRITE_BRDCAST_HEADER",
+        "CC_SEND_WRITE_BRDCAST_NLINE",
+        "CC_SEND_WRITE_UPDT_HEADER",
+        "CC_SEND_WRITE_UPDT_NLINE",
+        "CC_SEND_WRITE_UPDT_DATA",
+        "CC_SEND_CAS_BRDCAST_HEADER",
+        "CC_SEND_CAS_BRDCAST_NLINE",
+        "CC_SEND_CAS_UPDT_HEADER",
+        "CC_SEND_CAS_UPDT_NLINE",
+        "CC_SEND_CAS_UPDT_DATA",
+        "CC_SEND_CAS_UPDT_DATA_HIGH",
+        "CC_SEND_CONFIG_INVAL_HEADER",
+        "CC_SEND_CONFIG_INVAL_NLINE",
+        "CC_SEND_CONFIG_BRDCAST_HEADER",
+        "CC_SEND_CONFIG_BRDCAST_NLINE"
+    };
+    const char *multi_ack_fsm_str[] =
+    {
+        "MULTI_ACK_IDLE",
+        "MULTI_ACK_UPT_LOCK",
+        "MULTI_ACK_UPT_CLEAR",
+        "MULTI_ACK_WRITE_RSP"
+    };
+    const char *config_fsm_str[] =
+    {
+        "CONFIG_IDLE",
+        "CONFIG_LOOP",
+        "CONFIG_WAIT",
+        "CONFIG_RSP",
+        "CONFIG_DIR_REQ",
+        "CONFIG_DIR_ACCESS",
+        "CONFIG_IVT_LOCK",
+        "CONFIG_BC_SEND",
+        "CONFIG_INVAL_SEND",
+        "CONFIG_HEAP_REQ",
+        "CONFIG_HEAP_SCAN",
+        "CONFIG_HEAP_LAST",
+        "CONFIG_TRT_LOCK",
+        "CONFIG_TRT_SET",
+        "CONFIG_PUT_REQ"
+    };
+    const char *read_fsm_str[] =
+    {
+        "READ_IDLE",
+        "READ_DIR_REQ",
+        "READ_DIR_LOCK",
+        "READ_DIR_HIT",
+        "READ_HEAP_REQ",
+        "READ_HEAP_LOCK",
+        "READ_HEAP_WRITE",
+        "READ_HEAP_ERASE",
+        "READ_HEAP_LAST",
+        "READ_RSP",
+        "READ_TRT_LOCK",
+        "READ_TRT_SET",
+        "READ_TRT_REQ"
+    };
+    const char *write_fsm_str[] =
+    {
+        "WRITE_IDLE",
+        "WRITE_NEXT",
+        "WRITE_DIR_REQ",
+        "WRITE_DIR_LOCK",
+        "WRITE_DIR_HIT",
+        "WRITE_UPT_LOCK",
+        "WRITE_UPT_HEAP_LOCK",
+        "WRITE_UPT_REQ",
+        "WRITE_UPT_NEXT",
+        "WRITE_UPT_DEC",
+        "WRITE_RSP",
+        "WRITE_MISS_TRT_LOCK",
+        "WRITE_MISS_TRT_DATA",
+        "WRITE_MISS_TRT_SET",
+        "WRITE_MISS_XRAM_REQ",
+        "WRITE_BC_DIR_READ",
+        "WRITE_BC_TRT_LOCK",
+        "WRITE_BC_IVT_LOCK",
+        "WRITE_BC_DIR_INVAL",
+        "WRITE_BC_CC_SEND",
+        "WRITE_BC_XRAM_REQ",
+        "WRITE_WAIT"
+    };
+    const char *ixr_rsp_fsm_str[] =
+    {
+        "IXR_RSP_IDLE",
+        "IXR_RSP_TRT_ERASE",
+        "IXR_RSP_TRT_READ"
+    };
+    const char *xram_rsp_fsm_str[] =
+    {
+        "XRAM_RSP_IDLE",
+        "XRAM_RSP_TRT_COPY",
+        "XRAM_RSP_TRT_DIRTY",
+        "XRAM_RSP_DIR_LOCK",
+        "XRAM_RSP_DIR_UPDT",
+        "XRAM_RSP_DIR_RSP",
+        "XRAM_RSP_IVT_LOCK",
+        "XRAM_RSP_INVAL_WAIT",
+        "XRAM_RSP_INVAL",
+        "XRAM_RSP_WRITE_DIRTY",
+        "XRAM_RSP_HEAP_REQ",
+        "XRAM_RSP_HEAP_ERASE",
+        "XRAM_RSP_HEAP_LAST",
+        "XRAM_RSP_ERROR_ERASE",
+        "XRAM_RSP_ERROR_RSP"
+    };
+    const char *ixr_cmd_fsm_str[] =
+    {
+        "IXR_CMD_READ_IDLE",
+        "IXR_CMD_WRITE_IDLE",
+        "IXR_CMD_CAS_IDLE",
+        "IXR_CMD_XRAM_IDLE",
+        "IXR_CMD_CONFIG_IDLE",
+        "IXR_CMD_READ_TRT",
+        "IXR_CMD_WRITE_TRT",
+        "IXR_CMD_CAS_TRT",
+        "IXR_CMD_XRAM_TRT",
+        "IXR_CMD_CONFIG_TRT",
+        "IXR_CMD_READ_SEND",
+        "IXR_CMD_WRITE_SEND",
+        "IXR_CMD_CAS_SEND",
+        "IXR_CMD_XRAM_SEND",
+        "IXR_CMD_CONFIG_SEND"
+    };
+    const char *cas_fsm_str[] =
+    {
+        "CAS_IDLE",
+        "CAS_DIR_REQ",
+        "CAS_DIR_LOCK",
+        "CAS_DIR_HIT_READ",
+        "CAS_DIR_HIT_COMPARE",
+        "CAS_DIR_HIT_WRITE",
+        "CAS_UPT_LOCK",
+        "CAS_UPT_HEAP_LOCK",
+        "CAS_UPT_REQ",
+        "CAS_UPT_NEXT",
+        "CAS_BC_TRT_LOCK",
+        "CAS_BC_IVT_LOCK",
+        "CAS_BC_DIR_INVAL",
+        "CAS_BC_CC_SEND",
+        "CAS_BC_XRAM_REQ",
+        "CAS_RSP_FAIL",
+        "CAS_RSP_SUCCESS",
+        "CAS_MISS_TRT_LOCK",
+        "CAS_MISS_TRT_SET",
+        "CAS_MISS_XRAM_REQ",
+        "CAS_WAIT"
+    };
+    const char *cleanup_fsm_str[] =
+    {
+        "CLEANUP_IDLE",
+        "CLEANUP_GET_NLINE",
+        "CLEANUP_DIR_REQ",
+        "CLEANUP_DIR_LOCK",
+        "CLEANUP_DIR_WRITE",
+        "CLEANUP_HEAP_REQ",
+        "CLEANUP_HEAP_LOCK",
+        "CLEANUP_HEAP_SEARCH",
+        "CLEANUP_HEAP_CLEAN",
+        "CLEANUP_HEAP_FREE",
+        "CLEANUP_IVT_LOCK",
+        "CLEANUP_IVT_DECREMENT",
+        "CLEANUP_IVT_CLEAR",
+        "CLEANUP_WRITE_RSP",
+        "CLEANUP_SEND_CLACK"
+    };
+    const char *alloc_dir_fsm_str[] =
+    {
+        "ALLOC_DIR_RESET",
+        "ALLOC_DIR_READ",
+        "ALLOC_DIR_WRITE",
+        "ALLOC_DIR_CAS",
+        "ALLOC_DIR_CLEANUP",
+        "ALLOC_DIR_XRAM_RSP",
+        "ALLOC_DIR_CONFIG"
+    };
+    const char *alloc_trt_fsm_str[] =
+    {
+        "ALLOC_TRT_READ",
+        "ALLOC_TRT_WRITE",
+        "ALLOC_TRT_CAS",
+        "ALLOC_TRT_XRAM_RSP",
+        "ALLOC_TRT_IXR_RSP",
+        "ALLOC_TRT_IXR_CMD",
+        "ALLOC_TRT_CONFIG"
+    };
+    const char *alloc_upt_fsm_str[] =
+    {
+        "ALLOC_UPT_WRITE",
+        "ALLOC_UPT_CAS",
+        "ALLOC_UPT_MULTI_ACK"
+    };
+    const char *alloc_ivt_fsm_str[] =
+    {
+        "ALLOC_IVT_WRITE",
+        "ALLOC_IVT_XRAM_RSP",
+        "ALLOC_IVT_CLEANUP",
+        "ALLOC_IVT_CAS",
+        "ALLOC_IVT_CONFIG"
+    };
+    const char *alloc_heap_fsm_str[] =
+    {
+        "ALLOC_HEAP_RESET",
+        "ALLOC_HEAP_READ",
+        "ALLOC_HEAP_WRITE",
+        "ALLOC_HEAP_CAS",
+        "ALLOC_HEAP_CLEANUP",
+        "ALLOC_HEAP_XRAM_RSP",
+        "ALLOC_HEAP_CONFIG"
+    };
+
+#define tmpl(x) \
+    template<typename vci_param_int, \
+    typename vci_param_ext, \
+    size_t dspin_in_width,  \
+    size_t dspin_out_width> x \
+    VciMemCache<vci_param_int, vci_param_ext, dspin_in_width, dspin_out_width>
+
+    using namespace soclib::common;
+
+    ////////////////////////////////
+    //  Constructor
+    ////////////////////////////////
+
+    tmpl(/**/)::VciMemCache(
+            sc_module_name      name,
+            const MappingTable  &mtp,              // mapping table for direct network
+            const MappingTable  &mtx,              // mapping table for external network
+            const IntTab        &srcid_x,          // global index on external network
+            const IntTab        &tgtid_d,          // global index on direct network
+            const size_t        x_width,           // number of x bits in platform
+            const size_t        y_width,           // number of x bits in platform
+            const size_t        nways,             // number of ways per set
+            const size_t        nsets,             // number of associative sets
+            const size_t        nwords,            // number of words in cache line
+            const size_t        max_copies,        // max number of copies in heap
+            const size_t        heap_size,         // number of heap entries
+            const size_t        trt_lines,         // number of TRT entries
+            const size_t        upt_lines,         // number of UPT entries
+            const size_t        ivt_lines,         // number of IVT entries
+            const size_t        debug_start_cycle,
+            const bool          debug_ok)
+
+        : soclib::caba::BaseModule(name),
+
+        p_clk( "p_clk" ),
+        p_resetn( "p_resetn" ),
+        p_irq ( "p_irq" ),
+        p_vci_tgt( "p_vci_tgt" ),
+        p_vci_ixr( "p_vci_ixr" ),
+        p_dspin_p2m( "p_dspin_p2m" ),
+        p_dspin_m2p( "p_dspin_m2p" ),
+        p_dspin_clack( "p_dspin_clack" ),
+
+        m_seglist(mtp.getSegmentList(tgtid_d)),
+        m_nseg(0),
+        m_srcid_x( mtx.indexForId(srcid_x)),
+        m_initiators(1 << vci_param_int::S),
+        m_heap_size(heap_size),
+        m_ways(nways),
+        m_sets(nsets),
+        m_words(nwords),
+        m_x_width(x_width),
+        m_y_width(y_width),
+        m_debug_start_cycle(debug_start_cycle),
+        m_debug_ok(debug_ok),
+        m_trt_lines(trt_lines),
+        m_trt(this->name(), trt_lines, nwords),
+        m_upt_lines(upt_lines),
+        m_upt(upt_lines),
+        m_ivt(ivt_lines),
+        m_cache_directory(nways, nsets, nwords, vci_param_int::N),
+        m_cache_data(nways, nsets, nwords),
+        m_heap(m_heap_size),
+        m_max_copies(max_copies),
+        m_llsc_table(),
+
+#define L2 soclib::common::uint32_log2
+        m_x(L2(m_words), 2),
+        m_y(L2(m_sets), L2(m_words) + 2),
+        m_z(vci_param_int::N - L2(m_sets) - L2(m_words) - 2, L2(m_sets) + L2(m_words) + 2),
+        m_nline(vci_param_int::N - L2(m_words) - 2, L2(m_words) + 2),
+#undef L2
+
+        // XMIN(5 bits) / XMAX(5 bits) / YMIN(5 bits) / YMAX(5 bits)
+        //   0b00000    /   0b11111    /   0b00000    /   0b11111
+        m_broadcast_boundaries(0x7C1F),
+
+        // CONFIG interface
+        m_config_addr_mask((1<<12)-1),
+
+        m_config_regr_width(7),
+        m_config_func_width(3),
+        m_config_regr_idx_mask((1<<m_config_regr_width)-1),
+        m_config_func_idx_mask((1<<m_config_func_width)-1),
+
+        //  FIFOs
+        m_cmd_read_addr_fifo("m_cmd_read_addr_fifo", 4),
+        m_cmd_read_length_fifo("m_cmd_read_length_fifo", 4),
+        m_cmd_read_srcid_fifo("m_cmd_read_srcid_fifo", 4),
+        m_cmd_read_trdid_fifo("m_cmd_read_trdid_fifo", 4),
+        m_cmd_read_pktid_fifo("m_cmd_read_pktid_fifo", 4),
+
+        m_cmd_write_addr_fifo("m_cmd_write_addr_fifo",8),
+        m_cmd_write_eop_fifo("m_cmd_write_eop_fifo",8),
+        m_cmd_write_srcid_fifo("m_cmd_write_srcid_fifo",8),
+        m_cmd_write_trdid_fifo("m_cmd_write_trdid_fifo",8),
+        m_cmd_write_pktid_fifo("m_cmd_write_pktid_fifo",8),
+        m_cmd_write_data_fifo("m_cmd_write_data_fifo",8),
+        m_cmd_write_be_fifo("m_cmd_write_be_fifo",8),
+
+        m_cmd_cas_addr_fifo("m_cmd_cas_addr_fifo",4),
+        m_cmd_cas_eop_fifo("m_cmd_cas_eop_fifo",4),
+        m_cmd_cas_srcid_fifo("m_cmd_cas_srcid_fifo",4),
+        m_cmd_cas_trdid_fifo("m_cmd_cas_trdid_fifo",4),
+        m_cmd_cas_pktid_fifo("m_cmd_cas_pktid_fifo",4),
+        m_cmd_cas_wdata_fifo("m_cmd_cas_wdata_fifo",4),
+
+        m_cc_receive_to_cleanup_fifo("m_cc_receive_to_cleanup_fifo", 4),
+        m_cc_receive_to_multi_ack_fifo("m_cc_receive_to_multi_ack_fifo", 4),
+
+        r_tgt_cmd_fsm("r_tgt_cmd_fsm"),
+
+        r_config_fsm( "r_config_fsm" ),
+
+        m_config_to_cc_send_inst_fifo( "m_config_to_cc_send_inst_fifo", 8 ),
+        m_config_to_cc_send_srcid_fifo( "m_config_to_cc_send_srcid_fifo", 8 ),
+
+        r_read_fsm( "r_read_fsm" ),
+
+        r_write_fsm( "r_write_fsm" ),
+
+        m_write_to_cc_send_inst_fifo("m_write_to_cc_send_inst_fifo",8),
+        m_write_to_cc_send_srcid_fifo("m_write_to_cc_send_srcid_fifo",8),
+
+        r_multi_ack_fsm("r_multi_ack_fsm"),
+
+        r_cleanup_fsm("r_cleanup_fsm"),
+
+        r_cas_fsm("r_cas_fsm"),
+
+        m_cas_to_cc_send_inst_fifo("m_cas_to_cc_send_inst_fifo",8),
+        m_cas_to_cc_send_srcid_fifo("m_cas_to_cc_send_srcid_fifo",8),
+
+        r_ixr_rsp_fsm("r_ixr_rsp_fsm"),
+        r_xram_rsp_fsm("r_xram_rsp_fsm"),
+
+        m_xram_rsp_to_cc_send_inst_fifo("m_xram_rsp_to_cc_send_inst_fifo",8),
+        m_xram_rsp_to_cc_send_srcid_fifo("m_xram_rsp_to_cc_send_srcid_fifo",8),
+
+        r_ixr_cmd_fsm("r_ixr_cmd_fsm"),
+
+        r_tgt_rsp_fsm("r_tgt_rsp_fsm"),
+
+        r_cc_send_fsm("r_cc_send_fsm"),
+        r_cc_receive_fsm("r_cc_receive_fsm"),
+
+        r_alloc_dir_fsm("r_alloc_dir_fsm"),
+        r_alloc_dir_reset_cpt("r_alloc_dir_reset_cpt"),
+        r_alloc_trt_fsm("r_alloc_trt_fsm"),
+        r_alloc_upt_fsm("r_alloc_upt_fsm"),
+        r_alloc_ivt_fsm("r_alloc_ivt_fsm"),
+        r_alloc_heap_fsm("r_alloc_heap_fsm"),
+        r_alloc_heap_reset_cpt("r_alloc_heap_reset_cpt")
+#if MONITOR_MEMCACHE_FSM == 1
+        ,
+        p_read_fsm("p_read_fsm"), 
+        p_write_fsm("p_write_fsm"), 
+        p_xram_rsp_fsm("p_xram_rsp_fsm"), 
+        p_cas_fsm("p_cas_fsm"), 
+        p_cleanup_fsm("p_cleanup_fsm"), 
+        p_config_fsm("p_config_fsm"), 
+        p_alloc_heap_fsm("p_alloc_heap_fsm"), 
+        p_alloc_dir_fsm("p_alloc_dir_fsm"), 
+        p_alloc_trt_fsm("p_alloc_trt_fsm"), 
+        p_alloc_upt_fsm("p_alloc_upt_fsm"), 
+        p_alloc_ivt_fsm("p_alloc_ivt_fsm"), 
+        p_tgt_cmd_fsm("p_tgt_cmd_fsm"), 
+        p_tgt_rsp_fsm("p_tgt_rsp_fsm"), 
+        p_ixr_cmd_fsm("p_ixr_cmd_fsm"), 
+        p_ixr_rsp_fsm("p_ixr_rsp_fsm"), 
+        p_cc_send_fsm("p_cc_send_fsm"), 
+        p_cc_receive_fsm("p_cc_receive_fsm"),
+        p_multi_ack_fsm("p_multi_ack_fsm")
+#endif
+        {
+            std::cout << "  - Building VciMemCache : " << name << std::endl;
+
+            assert(IS_POW_OF_2(nsets));
+            assert(IS_POW_OF_2(nwords));
+            assert(IS_POW_OF_2(nways));
+            assert(nsets);
+            assert(nwords);
+            assert(nways);
+
+            // check Transaction table size
+            assert((uint32_log2(trt_lines) <= vci_param_ext::T) and
+                    "MEMC ERROR : Need more bits for VCI TRDID field");
+
+            // check internal and external data width
+            assert( (vci_param_int::B == 4 ) and
+                    "MEMC ERROR : VCI internal data width must be 32 bits");
+
+            assert( (vci_param_ext::B == 8) and
+                    "MEMC ERROR : VCI external data width must be 64 bits");
+
+            // Check coherence between internal & external addresses
+            assert( (vci_param_int::N == vci_param_ext::N) and
+                    "MEMC ERROR : VCI internal & external addresses must have the same width");
+
+            // Get the segments associated to the MemCache
+            std::list<soclib::common::Segment>::iterator seg;
+            size_t i = 0;
+
+            for (seg = m_seglist.begin(); seg != m_seglist.end(); seg++)
+            {
+                std::cout << "    => segment " << seg->name()
+                    << " / base = " << std::hex << seg->baseAddress()
+                    << " / size = " << seg->size() << std::endl;
+                m_nseg++;
+            }
+
+            assert( (m_nseg > 0) and
+                    "MEMC ERROR : At least one segment must be mapped to this component");
+
+            m_seg = new soclib::common::Segment*[m_nseg];
+
+            for (seg = m_seglist.begin(); seg != m_seglist.end(); seg++)
+            {
+                if (seg->special() ) m_seg_config = i;
+                m_seg[i] = & (*seg);
+                i++;
+            }
+
+            addr_t gid = m_seg[0]->baseAddress() >> (vci_param_int::N - x_width - y_width);
+            m_x_self = (gid >> m_y_width) & ((1 << m_x_width) - 1);
+            m_y_self =  gid               & ((1 << m_y_width) - 1);
+
+            // Allocation for IXR_RSP FSM
+            r_ixr_rsp_to_xram_rsp_rok  = new sc_signal<bool>[m_trt_lines];
+
+            // Allocation for XRAM_RSP FSM
+            r_xram_rsp_victim_data     = new sc_signal<data_t>[nwords];
+            r_xram_rsp_to_tgt_rsp_data = new sc_signal<data_t>[nwords];
+
+            // Allocation for READ FSM
+            r_read_data                = new sc_signal<data_t>[nwords];
+            r_read_to_tgt_rsp_data     = new sc_signal<data_t>[nwords];
+
+            // Allocation for WRITE FSM
+            r_write_data               = new sc_signal<data_t>[nwords];
+            r_write_be                 = new sc_signal<be_t>[nwords];
+            r_write_to_cc_send_data    = new sc_signal<data_t>[nwords];
+            r_write_to_cc_send_be      = new sc_signal<be_t>[nwords];
+
+            // Allocation for CAS FSM
+            r_cas_data                 = new sc_signal<data_t>[nwords];
+            r_cas_rdata                = new sc_signal<data_t>[2];
+
+            // Allocation for IXR_CMD FSM
+            r_ixr_cmd_wdata            = new sc_signal<data_t>[nwords];
+
+            // Allocation for debug
+            m_debug_previous_data      = new data_t[nwords];
+            m_debug_data               = new data_t[nwords];
+
+            SC_METHOD(transition);
+            dont_initialize();
+            sensitive << p_clk.pos();
+
+            SC_METHOD(genMoore);
+            dont_initialize();
+            sensitive << p_clk.neg();
+        } // end constructor
+
+
+    /////////////////////////////////////////////////////
+    tmpl(void)::cache_monitor(addr_t addr)
+    /////////////////////////////////////////////////////
+    {
+        size_t way = 0;
+        size_t set = 0;
+        DirectoryEntry entry = m_cache_directory.read_neutral(addr, &way, &set);
+
+        // read data and compute data_change
+        bool data_change = false;
+        if (entry.valid)
+        {
+            for (size_t word = 0; word<m_words; word++)
+            {
+                m_debug_data[word] = m_cache_data.read(way, set, word);
+                if (m_debug_previous_valid and 
+                        (m_debug_data[word] != m_debug_previous_data[word]))
+                {
+                    data_change = true;
+                }
+            }
+        }
+
+        // print values if any change
+        if ((entry.valid != m_debug_previous_valid) or
+                (entry.valid and (entry.count != m_debug_previous_count)) or
+                (entry.valid and (entry.dirty != m_debug_previous_dirty)) or data_change)
+        {
+            std::cout << "Monitor MEMC " << name()
+                << " at cycle " << std::dec << m_cpt_cycles
+                << " for address " << std::hex << addr
+                << " / VAL = " << std::dec << entry.valid
+                << " / WAY = " << way
+                << " / COUNT = " << entry.count 
+                << " / DIRTY = " << entry.dirty
+                << " / DATA_CHANGE = " << data_change 
+                << std::endl;
+            std::cout << std::hex << "     /0:" << m_debug_data[0]
+                << "/1:" << m_debug_data[1]
+                << "/2:" << m_debug_data[2]
+                << "/3:" << m_debug_data[3]
+                << "/4:" << m_debug_data[4]
+                << "/5:" << m_debug_data[5]
+                << "/6:" << m_debug_data[6]
+                << "/7:" << m_debug_data[7]
+                << "/8:" << m_debug_data[8]
+                << "/9:" << m_debug_data[9]
+                << "/A:" << m_debug_data[10]
+                << "/B:" << m_debug_data[11]
+                << "/C:" << m_debug_data[12]
+                << "/D:" << m_debug_data[13]
+                << "/E:" << m_debug_data[14]
+                << "/F:" << m_debug_data[15]
+                << std::endl;
+        }
+
+        // register values
+        m_debug_previous_count = entry.count;
+        m_debug_previous_valid = entry.valid;
+        m_debug_previous_dirty = entry.dirty;
+        for (size_t word = 0; word < m_words; word++) 
+            m_debug_previous_data[word] = m_debug_data[word];
+    }
+
+    
+    /////////////////////////////////////////////////////
+    tmpl(uint32_t)::req_distance(uint32_t req_srcid)
+    /////////////////////////////////////////////////////
+    {
+        const uint32_t srcid_width = vci_param_int::S;
+
+        uint8_t req_x = (req_srcid >> (srcid_width - m_x_width));
+        uint8_t req_y = (req_srcid >> (srcid_width - m_x_width - m_y_width)) & ((1 << m_y_width) - 1);
+
+        return abs(m_x_self - req_x) + abs(m_y_self - req_y);
+    }
+
+
+    /////////////////////////////////////////////////////
+    tmpl(bool)::is_local_req(uint32_t req_srcid)
+    /////////////////////////////////////////////////////
+    {
+        return req_distance(req_srcid) == 0;
+    }
+
+    /////////////////////////////////////////////////////
+    tmpl(int)::read_instrumentation(uint32_t regr, uint32_t & rdata)
+    /////////////////////////////////////////////////////
+    {
+        int error = 0;
+
+        switch(regr)
+        {
+            ///////////////////////////////////////////////////////
+            //       DIRECT instrumentation registers            //
+            // Registers of 32 bits and therefore only LO is     //
+            // implemented.                                      //
+            //                                                   //
+            // The HI may be used in future implementations      //
+            ///////////////////////////////////////////////////////
+
+            // LOCAL
+
+            case MEMC_LOCAL_READ_LO   : rdata = m_cpt_read_local        ; break;
+            case MEMC_LOCAL_WRITE_LO  : rdata = m_cpt_write_flits_local ; break;
+            case MEMC_LOCAL_LL_LO     : rdata = m_cpt_ll_local          ; break;
+            case MEMC_LOCAL_SC_LO     : rdata = m_cpt_sc_local          ; break;
+            case MEMC_LOCAL_CAS_LO    : rdata = m_cpt_cas_local         ; break;
+            case MEMC_LOCAL_READ_HI   :
+            case MEMC_LOCAL_WRITE_HI  :
+            case MEMC_LOCAL_LL_HI     :
+            case MEMC_LOCAL_SC_HI     :
+            case MEMC_LOCAL_CAS_HI    : rdata = 0; break;
+
+            // REMOTE
+
+            case MEMC_REMOTE_READ_LO  : rdata = m_cpt_read_remote        ; break;
+            case MEMC_REMOTE_WRITE_LO : rdata = m_cpt_write_flits_remote ; break;
+            case MEMC_REMOTE_LL_LO    : rdata = m_cpt_ll_remote          ; break;
+            case MEMC_REMOTE_SC_LO    : rdata = m_cpt_sc_remote          ; break;
+            case MEMC_REMOTE_CAS_LO   : rdata = m_cpt_cas_remote         ; break;
+            case MEMC_REMOTE_READ_HI  :
+            case MEMC_REMOTE_WRITE_HI :
+            case MEMC_REMOTE_LL_HI    :
+            case MEMC_REMOTE_SC_HI    :
+            case MEMC_REMOTE_CAS_HI   : rdata = 0; break;
+
+            // COST
+
+            case MEMC_COST_READ_LO    : rdata = m_cpt_read_cost ; break;
+            case MEMC_COST_WRITE_LO   : rdata = m_cpt_write_cost; break;
+            case MEMC_COST_LL_LO      : rdata = m_cpt_ll_cost   ; break;
+            case MEMC_COST_SC_LO      : rdata = m_cpt_sc_cost   ; break;
+            case MEMC_COST_CAS_LO     : rdata = m_cpt_cas_cost  ; break;
+            case MEMC_COST_READ_HI    :
+            case MEMC_COST_WRITE_HI   :
+            case MEMC_COST_LL_HI      :
+            case MEMC_COST_SC_HI      :
+            case MEMC_COST_CAS_HI     : rdata = 0; break;
+
+            ///////////////////////////////////////////////////////
+            //       COHERENCE instrumentation registers         //
+            // Registers of 32 bits and therefore only LO is     //
+            // implemented.                                      //
+            //                                                   //
+            // The HI may be used in future implementations      //
+            ///////////////////////////////////////////////////////
+
+            // LOCAL
+
+            case MEMC_LOCAL_MUPDATE_LO  : rdata = m_cpt_update_local ; break;
+            case MEMC_LOCAL_MINVAL_LO   : rdata = m_cpt_minval_local ; break;
+            case MEMC_LOCAL_CLEANUP_LO  : rdata = m_cpt_cleanup_local; break;
+            case MEMC_LOCAL_MUPDATE_HI  :
+            case MEMC_LOCAL_MINVAL_HI   :
+            case MEMC_LOCAL_CLEANUP_HI  : rdata = 0; break;
+
+            // REMOTE
+
+            case MEMC_REMOTE_MUPDATE_LO : rdata = m_cpt_update_remote ; break;
+            case MEMC_REMOTE_MINVAL_LO  : rdata = m_cpt_minval_remote ; break;
+            case MEMC_REMOTE_CLEANUP_LO : rdata = m_cpt_cleanup_remote; break;
+            case MEMC_REMOTE_MUPDATE_HI :
+            case MEMC_REMOTE_MINVAL_HI  :
+            case MEMC_REMOTE_CLEANUP_HI : rdata = 0; break;
+
+            // COST
+
+            case MEMC_COST_MUPDATE_LO   : rdata = m_cpt_update_cost   ; break;
+            case MEMC_COST_MINVAL_LO    : rdata = m_cpt_minval_cost   ; break;
+            case MEMC_COST_CLEANUP_LO   : rdata = m_cpt_cleanup_cost  ; break;
+            case MEMC_COST_MUPDATE_HI   :
+            case MEMC_COST_MINVAL_HI    :
+            case MEMC_COST_CLEANUP_HI   : rdata = 0; break;
+
+            // TOTAL
+
+            case MEMC_TOTAL_MUPDATE_LO  : rdata = m_cpt_update ; break;
+            case MEMC_TOTAL_MINVAL_LO   : rdata = m_cpt_minval ; break;
+            case MEMC_TOTAL_BINVAL_LO   : rdata = m_cpt_binval ; break;
+            case MEMC_TOTAL_MUPDATE_HI  :
+            case MEMC_TOTAL_MINVAL_HI   :
+            case MEMC_TOTAL_BINVAL_HI   : rdata = 0; break;
+
+            // unknown register
+
+            default                     : error = 1;
+        }
+
+        return error;
+    }
+
+    //////////////////////////////////////////////////
+    tmpl(void)::print_trace( size_t detailed )
+    //////////////////////////////////////////////////
+    {
+        std::cout << "MEMC " << name() << std::endl;
+        std::cout << "  "  << tgt_cmd_fsm_str[r_tgt_cmd_fsm.read()]
+            << " | " << tgt_rsp_fsm_str[r_tgt_rsp_fsm.read()]
+            << " | " << read_fsm_str[r_read_fsm.read()]
+            << " | " << write_fsm_str[r_write_fsm.read()]
+            << " | " << cas_fsm_str[r_cas_fsm.read()]
+            << " | " << config_fsm_str[r_config_fsm.read()]
+            << " | " << cleanup_fsm_str[r_cleanup_fsm.read()] << std::endl;
+        std::cout << "  "  << cc_send_fsm_str[r_cc_send_fsm.read()]
+            << " | " << cc_receive_fsm_str[r_cc_receive_fsm.read()]
+            << " | " << multi_ack_fsm_str[r_multi_ack_fsm.read()]
+            << " | " << ixr_cmd_fsm_str[r_ixr_cmd_fsm.read()]
+            << " | " << ixr_rsp_fsm_str[r_ixr_rsp_fsm.read()]
+            << " | " << xram_rsp_fsm_str[r_xram_rsp_fsm.read()] << std::endl;
+        std::cout << "  "  << alloc_dir_fsm_str[r_alloc_dir_fsm.read()]
+            << " | " << alloc_trt_fsm_str[r_alloc_trt_fsm.read()]
+            << " | " << alloc_upt_fsm_str[r_alloc_upt_fsm.read()]
+            << " | " << alloc_ivt_fsm_str[r_alloc_ivt_fsm.read()]
+            << " | " << alloc_heap_fsm_str[r_alloc_heap_fsm.read()] << std::endl;
+
+        if ( detailed ) m_trt.print(0);
+    }
+
+    
+    /////////////////////////////////////////
+    tmpl(void)::reset_counters()
+    /////////////////////////////////////////
+    {
+        m_cpt_reset_count        = m_cpt_cycles;
+        m_cpt_read_local         = 0;
+        m_cpt_read_remote        = 0;
+        m_cpt_read_cost          = 0;
+        m_cpt_write_local        = 0;
+        m_cpt_write_remote       = 0;
+        m_cpt_write_flits_local  = 0;
+        m_cpt_write_flits_remote = 0;
+        m_cpt_write_cost         = 0;
+        m_cpt_ll_local           = 0;
+        m_cpt_ll_remote          = 0;
+        m_cpt_ll_cost            = 0;
+        m_cpt_sc_local           = 0;
+        m_cpt_sc_remote          = 0;
+        m_cpt_sc_cost            = 0;
+        m_cpt_cas_local          = 0;
+        m_cpt_cas_remote         = 0;
+        m_cpt_cas_cost           = 0;
+        m_cpt_update             = 0;
+        m_cpt_update_local       = 0;
+        m_cpt_update_remote      = 0;
+        m_cpt_update_cost        = 0;
+        m_cpt_minval             = 0;
+        m_cpt_minval_local       = 0;
+        m_cpt_minval_remote      = 0;
+        m_cpt_minval_cost        = 0;
+        m_cpt_binval             = 0;
+        m_cpt_cleanup_local      = 0;
+        m_cpt_cleanup_remote     = 0;
+        m_cpt_cleanup_cost       = 0;
+        m_cpt_read_miss          = 0;
+        m_cpt_write_miss         = 0;
+        m_cpt_write_dirty        = 0;
+        m_cpt_trt_rb             = 0;
+        m_cpt_trt_full           = 0;
+        m_cpt_get                = 0;
+        m_cpt_put                = 0;
+    }
+
+    /////////////////////////////////////////
+    tmpl(void)::print_stats(bool activity_counters, bool stats)
+    /////////////////////////////////////////
+    {
+        std::cout << "**********************************" << std::dec << std::endl;
+        std::cout << "*** MEM_CACHE " << name() << std::endl;
+        std::cout << "**********************************" << std::dec << std::endl;
+        if (activity_counters) {
+            std::cout << "----------------------------------" << std::dec << std::endl;
+            std::cout << "---     Activity Counters      ---" << std::dec << std::endl;
+            std::cout << "----------------------------------" << std::dec << std::endl;
+            std::cout
+                << "[000] COUNTERS RESET AT CYCLE   = " << m_cpt_reset_count << std::endl
+                << "[001] NUMBER OF CYCLES          = " << m_cpt_cycles << std::endl
+                << std::endl
+                << "[002] LOCAL READ                = " << m_cpt_read_local << std::endl
+                << "[003] REMOTE READ               = " << m_cpt_read_remote << std::endl
+                << "[004] READ COST (FLITS * DIST)  = " << m_cpt_read_cost << std::endl
+                << std::endl
+                << "[005] LOCAL WRITE               = " << m_cpt_write_local << std::endl
+                << "[006] REMOTE WRITE              = " << m_cpt_write_remote << std::endl
+                << "[007] WRITE FLITS LOCAL         = " << m_cpt_write_flits_local << std::endl
+                << "[008] WRITE FLITS REMOTE        = " << m_cpt_write_flits_remote << std::endl
+                << "[009] WRITE COST (FLITS * DIST) = " << m_cpt_write_cost << std::endl
+                << std::endl
+                << "[010] LOCAL LL                  = " << m_cpt_ll_local << std::endl
+                << "[011] REMOTE LL                 = " << m_cpt_ll_remote << std::endl
+                << "[012] LL COST (FLITS * DIST)    = " << m_cpt_ll_cost << std::endl
+                << std::endl
+                << "[013] LOCAL SC                  = " << m_cpt_sc_local << std::endl
+                << "[014] REMOTE SC                 = " << m_cpt_sc_remote << std::endl
+                << "[015] SC COST (FLITS * DIST)    = " << m_cpt_sc_cost << std::endl
+                << std::endl
+                << "[016] LOCAL CAS                 = " << m_cpt_cas_local << std::endl
+                << "[017] REMOTE CAS                = " << m_cpt_cas_remote << std::endl
+                << "[018] CAS COST (FLITS * DIST)   = " << m_cpt_cas_cost << std::endl
+                << std::endl
+                << "[019] REQUESTS TRIG. UPDATE     = " << m_cpt_update << std::endl
+                << "[020] LOCAL UPDATE              = " << m_cpt_update_local << std::endl
+                << "[021] REMOTE UPDATE             = " << m_cpt_update_remote << std::endl
+                << "[022] UPDT COST (FLITS * DIST)  = " << m_cpt_update_cost << std::endl
+                << std::endl
+                << "[023] REQUESTS TRIG. M_INV      = " << m_cpt_minval << std::endl
+                << "[024] LOCAL M_INV               = " << m_cpt_minval_local << std::endl
+                << "[025] REMOTE M_INV              = " << m_cpt_minval_remote << std::endl
+                << "[026] M_INV COST (FLITS * DIST) = " << m_cpt_minval_cost << std::endl
+                << std::endl
+                << "[027] BROADCAT INVAL            = " << m_cpt_binval << std::endl
+                << std::endl
+                << "[028] LOCAL CLEANUP             = " << m_cpt_cleanup_local << std::endl
+                << "[029] REMOTE CLEANUP            = " << m_cpt_cleanup_remote << std::endl
+                << "[030] CLNUP COST (FLITS * DIST) = " << m_cpt_cleanup_cost << std::endl
+                << std::endl
+                << std::endl
+                << "[031] READ MISS                 = " << m_cpt_read_miss << std::endl
+                << "[032] WRITE MISS                = " << m_cpt_write_miss << std::endl
+                << "[033] WRITE DIRTY               = " << m_cpt_write_dirty << std::endl
+                << "[034] RD BLOCKED BY HIT IN TRT  = " << m_cpt_trt_rb << std::endl
+                << "[035] TRANS BLOCKED BY FULL TRT = " << m_cpt_trt_full << std::endl
+                << "[036] PUT (UNIMPLEMENTED)       = " << m_cpt_put << std::endl
+                << "[037] GET (UNIMPLEMENTED)       = " << m_cpt_get << std::endl
+                << "[038] WRITE BROADCAST           = " << m_cpt_write_broadcast << std::endl
+                << std::endl;
+        }
+
+        if (stats) {
+            std::cout << "----------------------------------" << std::dec << std::endl;
+            std::cout << "---      Calculated Stats      ---" << std::dec << std::endl;
+            std::cout << "----------------------------------" << std::dec << std::endl;
+            std::cout
+                << "[100] READ TOTAL            = " << m_cpt_read_local + m_cpt_read_remote << std::endl
+                << "[101] READ RATE             = " << (double) (m_cpt_read_local + m_cpt_read_remote) / m_cpt_cycles << std::endl
+                << "[102] LOCAL READ RATE       = " << (double) m_cpt_read_local / m_cpt_cycles << std::endl
+                << "[103] REMOTE READ RATE      = " << (double) m_cpt_read_remote / m_cpt_cycles << std::endl
+                << "[104] READ MISS RATE        = " << (double) m_cpt_read_miss / (m_cpt_read_local + m_cpt_read_remote) << std::endl
+                << std::endl
+                << "[105] WRITE TOTAL           = " << m_cpt_write_local + m_cpt_write_remote << std::endl
+                << "[106] WRITE RATE            = " << (double) (m_cpt_write_local + m_cpt_write_remote) / m_cpt_cycles << std::endl
+                << "[107] LOCAL WRITE RATE      = " << (double) m_cpt_write_local / m_cpt_cycles << std::endl
+                << "[108] REMOTE WRITE RATE     = " << (double) m_cpt_write_remote / m_cpt_cycles << std::endl
+                << "[109] WRITE MISS RATE       = " << (double) m_cpt_write_miss / (m_cpt_write_local + m_cpt_write_remote) << std::endl
+                << "[110] WRITE BURST TOTAL     = " << m_cpt_write_flits_local + m_cpt_write_flits_remote << std::endl
+                << "[111] WRITE BURST AVERAGE   = " << (double) (m_cpt_write_flits_local + m_cpt_write_flits_remote) / (m_cpt_write_local + m_cpt_write_remote) << std::endl
+                << "[112] LOCAL WRITE BURST AV. = " << (double) m_cpt_write_flits_local / (m_cpt_write_local + m_cpt_write_remote) << std::endl
+                << "[113] REMOTE WRITE BURST AV = " << (double) m_cpt_write_flits_remote / (m_cpt_write_local + m_cpt_write_remote) << std::endl
+                << std::endl
+                << "[114] UPDATE RATE                = " << (double) m_cpt_update / m_cpt_cycles << std::endl
+                << "[115] AV. UPDATE PER UP REQ      = " << (double) (m_cpt_update_local + m_cpt_update_remote) / m_cpt_update << std::endl
+                << "[116] AV. LOC UPDT PER UP REQ    = " << (double) m_cpt_update_local / m_cpt_update << std::endl
+                << "[117] AV. REMOTE UPDT PER UP REQ = " << (double) m_cpt_update_remote / m_cpt_update << std::endl
+                << std::endl
+                << "[118] INVAL MULTICAST RATE  = " << (double) m_cpt_minval / m_cpt_cycles << std::endl
+                << "[119] AVE. INVAL PER M_INV  = " << (double) (m_cpt_minval_local + m_cpt_minval_remote) / m_cpt_minval << std::endl
+                << "[120] AV. LOC INV PER M_INV = " << (double) m_cpt_minval_local / m_cpt_minval << std::endl
+                << "[121] AV. REM INV PER M_INV = " << (double) m_cpt_minval_remote / m_cpt_minval << std::endl
+                << std::endl
+                << "[122] INVAL BROADCAST RATE  = " << (double) m_cpt_binval / m_cpt_cycles << std::endl
+                << "[123] WRITE DIRTY RATE      = " << (double) m_cpt_write_dirty / m_cpt_cycles << std::endl
+                << std::endl
+                << "[124] CLEANUP RATE          = " << (double) (m_cpt_cleanup_local + m_cpt_cleanup_remote) / m_cpt_cycles << std::endl
+                << "[125] LOCAL CLEANUP RATE    = " << (double) m_cpt_cleanup_local / m_cpt_cycles << std::endl
+                << "[126] REMOTE CLEANUP RATE   = " << (double) m_cpt_cleanup_remote / m_cpt_cycles << std::endl
+                << "[127] LL RATE               = " << (double) (m_cpt_ll_local + m_cpt_ll_remote) / m_cpt_cycles << std::endl
+                << "[128] LOCAL LL RATE         = " << (double) m_cpt_ll_local / m_cpt_cycles << std::endl
+                << "[129] REMOTE LL RATE        = " << (double) m_cpt_ll_remote / m_cpt_cycles << std::endl
+                << "[130] SC RATE               = " << (double) (m_cpt_sc_local + m_cpt_sc_remote) / m_cpt_cycles << std::endl
+                << "[131] LOCAL SC RATE         = " << (double) m_cpt_sc_local / m_cpt_cycles << std::endl
+                << "[132] REMOTE SC RATE        = " << (double) m_cpt_sc_remote / m_cpt_cycles << std::endl
+                << "[133] CAS RATE              = " << (double) (m_cpt_cas_local + m_cpt_cas_remote) / m_cpt_cycles << std::endl
+                << "[134] LOCAL CAS RATE        = " << (double) m_cpt_cas_local / m_cpt_cycles << std::endl
+                << "[135] REMOTE CAS RATE       = " << (double) m_cpt_cas_remote / m_cpt_cycles << std::endl
+                << std::endl
+                << std::endl;
+        }
+    }
+
+
+    /////////////////////////////////
+    tmpl(/**/)::~VciMemCache()
+    /////////////////////////////////
+    {
+        delete [] m_seg;
+
+        delete [] r_ixr_rsp_to_xram_rsp_rok;
+        delete [] r_xram_rsp_victim_data;
+        delete [] r_xram_rsp_to_tgt_rsp_data;
+
+        delete [] r_read_data;
+        delete [] r_read_to_tgt_rsp_data;
+
+        delete [] r_write_data;
+        delete [] r_write_be;
+        delete [] r_write_to_cc_send_data;
+        delete [] r_write_to_cc_send_be;
+
+        delete [] r_cas_data;
+        delete [] r_cas_rdata;
+
+        delete [] r_ixr_cmd_wdata;
+        delete [] m_debug_previous_data;
+        delete [] m_debug_data;
+
+        //print_stats();
+    }
+
+    //////////////////////////////////
+    tmpl(void) ::transition()
+    //////////////////////////////////
+    {
+        using soclib::common::uint32_log2;
+
+        // RESET
+        if (! p_resetn.read())
+        {
+
+            // Initializing FSMs
+            r_tgt_cmd_fsm    = TGT_CMD_IDLE;
+            r_config_fsm     = CONFIG_IDLE;
+            r_tgt_rsp_fsm    = TGT_RSP_READ_IDLE;
+            r_cc_send_fsm    = CC_SEND_XRAM_RSP_IDLE;
+            r_cc_receive_fsm = CC_RECEIVE_IDLE;
+            r_multi_ack_fsm  = MULTI_ACK_IDLE;
+            r_read_fsm       = READ_IDLE;
+            r_write_fsm      = WRITE_IDLE;
+            r_cas_fsm        = CAS_IDLE;
+            r_cleanup_fsm    = CLEANUP_IDLE;
+            r_alloc_dir_fsm  = ALLOC_DIR_RESET;
+            r_alloc_heap_fsm = ALLOC_HEAP_RESET;
+            r_alloc_trt_fsm  = ALLOC_TRT_READ;
+            r_alloc_upt_fsm  = ALLOC_UPT_WRITE;
+            r_alloc_ivt_fsm  = ALLOC_IVT_WRITE;
+            r_ixr_rsp_fsm    = IXR_RSP_IDLE;
+            r_xram_rsp_fsm   = XRAM_RSP_IDLE;
+            r_ixr_cmd_fsm    = IXR_CMD_READ_IDLE;
+
+            m_debug                = false;
+            m_debug_previous_valid = false;
+            m_debug_previous_dirty = false;
+            m_debug_previous_count = 0;
+
+            //  Initializing Tables
+            m_trt.init();
+            m_upt.init();
+            m_ivt.init();
+            m_llsc_table.init();
+
+            // initializing FIFOs and communication Buffers
+
+            m_cmd_read_addr_fifo.init();
+            m_cmd_read_length_fifo.init();
+            m_cmd_read_srcid_fifo.init();
+            m_cmd_read_trdid_fifo.init();
+            m_cmd_read_pktid_fifo.init();
+
+            m_cmd_write_addr_fifo.init();
+            m_cmd_write_eop_fifo.init();
+            m_cmd_write_srcid_fifo.init();
+            m_cmd_write_trdid_fifo.init();
+            m_cmd_write_pktid_fifo.init();
+            m_cmd_write_data_fifo.init();
+
+            m_cmd_cas_addr_fifo.init()  ;
+            m_cmd_cas_srcid_fifo.init() ;
+            m_cmd_cas_trdid_fifo.init() ;
+            m_cmd_cas_pktid_fifo.init() ;
+            m_cmd_cas_wdata_fifo.init() ;
+            m_cmd_cas_eop_fifo.init()   ;
+
+            r_config_cmd       = MEMC_CMD_NOP;
+            r_config_lock      = false;
+
+            m_config_to_cc_send_inst_fifo.init();
+            m_config_to_cc_send_srcid_fifo.init();
+
+            r_tgt_cmd_to_tgt_rsp_req = false;
+
+            r_read_to_tgt_rsp_req = false;
+            r_read_to_ixr_cmd_req = false;
+
+            r_write_to_tgt_rsp_req          = false;
+            r_write_to_ixr_cmd_req          = false;
+            r_write_to_cc_send_multi_req    = false;
+            r_write_to_cc_send_brdcast_req  = false;
+            r_write_to_multi_ack_req        = false;
+
+            m_write_to_cc_send_inst_fifo.init();
+            m_write_to_cc_send_srcid_fifo.init();
+
+            r_cleanup_to_tgt_rsp_req      = false;
+
+            m_cc_receive_to_cleanup_fifo.init();
+
+            r_multi_ack_to_tgt_rsp_req    = false;
+
+            m_cc_receive_to_multi_ack_fifo.init();
+
+            r_cas_to_tgt_rsp_req          = false;
+            r_cas_cpt                     = 0    ;
+            r_cas_lfsr                    = -1   ;
+            r_cas_to_ixr_cmd_req          = false;
+            r_cas_to_cc_send_multi_req    = false;
+            r_cas_to_cc_send_brdcast_req  = false;
+
+            m_cas_to_cc_send_inst_fifo.init();
+            m_cas_to_cc_send_srcid_fifo.init();
+
+            for (size_t i = 0; i < m_trt_lines ; i++)
+            {
+                r_ixr_rsp_to_xram_rsp_rok[i] = false;
+            }
+
+            r_xram_rsp_to_tgt_rsp_req          = false;
+            r_xram_rsp_to_cc_send_multi_req    = false;
+            r_xram_rsp_to_cc_send_brdcast_req  = false;
+            r_xram_rsp_to_ixr_cmd_req          = false;
+            r_xram_rsp_trt_index               = 0;
+            r_xram_rsp_rerror_irq              = false;
+            r_xram_rsp_rerror_irq_enable       = false;
+
+            m_xram_rsp_to_cc_send_inst_fifo.init();
+            m_xram_rsp_to_cc_send_srcid_fifo.init();
+
+            r_alloc_dir_reset_cpt  = 0;
+            r_alloc_heap_reset_cpt = 0;
+
+            r_tgt_rsp_key_sent  = false;
+
+            // Activity counters
+            m_cpt_cycles             = 0;
+            m_cpt_reset_count        = 0;
+            m_cpt_read_local         = 0;
+            m_cpt_read_remote        = 0;
+            m_cpt_read_cost          = 0;
+            m_cpt_write_local        = 0;
+            m_cpt_write_remote       = 0;
+            m_cpt_write_flits_local  = 0;
+            m_cpt_write_flits_remote = 0;
+            m_cpt_write_cost         = 0;
+            m_cpt_ll_local           = 0;
+            m_cpt_ll_remote          = 0;
+            m_cpt_ll_cost            = 0;
+            m_cpt_sc_local           = 0;
+            m_cpt_sc_remote          = 0;
+            m_cpt_sc_cost            = 0;
+            m_cpt_cas_local          = 0;
+            m_cpt_cas_remote         = 0;
+            m_cpt_cas_cost           = 0;
+            m_cpt_update             = 0;
+            m_cpt_update_local       = 0;
+            m_cpt_update_remote      = 0;
+            m_cpt_update_cost        = 0;
+            m_cpt_minval             = 0;
+            m_cpt_minval_local       = 0;
+            m_cpt_minval_remote      = 0;
+            m_cpt_minval_cost        = 0;
+            m_cpt_binval             = 0;
+            m_cpt_cleanup_local      = 0;
+            m_cpt_cleanup_remote     = 0;
+            m_cpt_cleanup_cost       = 0;
+
+            m_cpt_read_miss       = 0;
+            m_cpt_write_miss      = 0;
+            m_cpt_write_dirty     = 0;
+            m_cpt_write_broadcast = 0;
+            m_cpt_trt_rb          = 0;
+            m_cpt_trt_full        = 0;
+            m_cpt_get             = 0;
+            m_cpt_put             = 0;
+
+            return;
+        }
+
+        bool   cmd_read_fifo_put = false;
+        bool   cmd_read_fifo_get = false;
+
+        bool   cmd_write_fifo_put = false;
+        bool   cmd_write_fifo_get = false;
+
+        bool   cmd_cas_fifo_put = false;
+        bool   cmd_cas_fifo_get = false;
+
+        bool   cc_receive_to_cleanup_fifo_get = false;
+        bool   cc_receive_to_cleanup_fifo_put = false;
+
+        bool   cc_receive_to_multi_ack_fifo_get = false;
+        bool   cc_receive_to_multi_ack_fifo_put = false;
+
+        bool   write_to_cc_send_fifo_put   = false;
+        bool   write_to_cc_send_fifo_get   = false;
+        bool   write_to_cc_send_fifo_inst  = false;
+        size_t write_to_cc_send_fifo_srcid = 0;
+
+        bool   xram_rsp_to_cc_send_fifo_put   = false;
+        bool   xram_rsp_to_cc_send_fifo_get   = false;
+        bool   xram_rsp_to_cc_send_fifo_inst  = false;
+        size_t xram_rsp_to_cc_send_fifo_srcid = 0;
+
+        bool   config_rsp_lines_incr          = false;
+        bool   config_rsp_lines_cleanup_decr  = false;
+        bool   config_rsp_lines_ixr_rsp_decr  = false;
+ 
+        bool   config_to_cc_send_fifo_put   = false;
+        bool   config_to_cc_send_fifo_get   = false;
+        bool   config_to_cc_send_fifo_inst  = false;
+        size_t config_to_cc_send_fifo_srcid = 0;
+
+        bool   cas_to_cc_send_fifo_put   = false;
+        bool   cas_to_cc_send_fifo_get   = false;
+        bool   cas_to_cc_send_fifo_inst  = false;
+        size_t cas_to_cc_send_fifo_srcid = 0;
+
+        m_debug = (m_cpt_cycles > m_debug_start_cycle) and m_debug_ok;
+
+#if DEBUG_MEMC_GLOBAL
+        if (m_debug)
+        {
+            std::cout
+                << "---------------------------------------------"           << std::dec << std::endl
+                << "MEM_CACHE "            << name()
+                << " ; Time = "            << m_cpt_cycles                                << std::endl
+                << " - TGT_CMD FSM    = "  << tgt_cmd_fsm_str[r_tgt_cmd_fsm.read()]       << std::endl
+                << " - TGT_RSP FSM    = "  << tgt_rsp_fsm_str[r_tgt_rsp_fsm.read()]       << std::endl
+                << " - CC_SEND FSM  = "    << cc_send_fsm_str[r_cc_send_fsm.read()]       << std::endl
+                << " - CC_RECEIVE FSM  = " << cc_receive_fsm_str[r_cc_receive_fsm.read()] << std::endl
+                << " - MULTI_ACK FSM  = "  << multi_ack_fsm_str[r_multi_ack_fsm.read()]   << std::endl
+                << " - READ FSM       = "  << read_fsm_str[r_read_fsm.read()]             << std::endl
+                << " - WRITE FSM      = "  << write_fsm_str[r_write_fsm.read()]           << std::endl
+                << " - CAS FSM        = "  << cas_fsm_str[r_cas_fsm.read()]               << std::endl
+                << " - CLEANUP FSM    = "  << cleanup_fsm_str[r_cleanup_fsm.read()]       << std::endl
+                << " - IXR_CMD FSM    = "  << ixr_cmd_fsm_str[r_ixr_cmd_fsm.read()]       << std::endl
+                << " - IXR_RSP FSM    = "  << ixr_rsp_fsm_str[r_ixr_rsp_fsm.read()]       << std::endl
+                << " - XRAM_RSP FSM   = "  << xram_rsp_fsm_str[r_xram_rsp_fsm.read()]     << std::endl
+                << " - ALLOC_DIR FSM  = "  << alloc_dir_fsm_str[r_alloc_dir_fsm.read()]   << std::endl
+                << " - ALLOC_TRT FSM  = "  << alloc_trt_fsm_str[r_alloc_trt_fsm.read()]   << std::endl
+                << " - ALLOC_UPT FSM  = "  << alloc_upt_fsm_str[r_alloc_upt_fsm.read()]   << std::endl
+                << " - ALLOC_HEAP FSM = "  << alloc_heap_fsm_str[r_alloc_heap_fsm.read()] << std::endl;
+        }
+#endif
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    TGT_CMD FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The TGT_CMD_FSM controls the incoming VCI command pakets from the processors,
+        // and dispatch these commands to the proper FSM through dedicated FIFOs.
+        //
+        // There are 5 types of commands accepted in the XRAM segment:
+        // - READ   : A READ request has a length of 1 VCI flit. It can be a single word
+        //            or an entire cache line, depending on the PLEN value => READ FSM
+        // - WRITE  : A WRITE request has a maximum length of 16 flits, and can only
+        //            concern words in a same line => WRITE FSM
+        // - CAS    : A CAS request has a length of 2 flits or 4 flits => CAS FSM
+        // - LL     : An LL request has a length of 1 flit => READ FSM
+        // - SC     : An SC request has a length of 2 flits. First flit contains the
+        //            acces key, second flit the data to write => WRITE FSM.
+        //
+        // The READ/WRITE commands accepted in the configuration segment are targeting
+        // configuration or status registers. They must contain one single flit.
+        // - For almost all addressable registers, the response is returned immediately. 
+        // - For MEMC_CMD_TYPE, the response is delayed until the operation is completed.
+        ////////////////////////////////////////////////////////////////////////////////////
+
+
+        switch (r_tgt_cmd_fsm.read())
+        {
+            //////////////////
+            case TGT_CMD_IDLE:     // waiting a VCI command (RAM or CONFIG)
+                if (p_vci_tgt.cmdval)
+                {
+#if DEBUG_MEMC_TGT_CMD
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " TGT_CMD_IDLE> Receive command from srcid "
+                            << std::hex << p_vci_tgt.srcid.read()
+                            << " / address " << std::hex << p_vci_tgt.address.read() << std::endl;
+#endif
+                    // checking segmentation violation
+                    addr_t   address = p_vci_tgt.address.read();
+                    uint32_t plen    = p_vci_tgt.plen.read();
+                    bool     config  = false;
+
+                    for (size_t seg_id = 0; (seg_id < m_nseg) ; seg_id++)
+                    {
+                        if (m_seg[seg_id]->contains(address) &&
+                                m_seg[seg_id]->contains(address + plen - vci_param_int::B))
+                        {
+                            if (m_seg[seg_id]->special()) config = true;
+                        }
+                    }
+
+                    if (config)                     /////////// configuration command
+                    {
+                        if (!p_vci_tgt.eop.read()) r_tgt_cmd_fsm = TGT_CMD_ERROR;
+                        else                       r_tgt_cmd_fsm = TGT_CMD_CONFIG;
+                    }
+                    else                            //////////// memory access 
+                    {
+                        if (p_vci_tgt.cmd.read() == vci_param_int::CMD_READ)
+                        {
+                            // check that the pktid is either :
+                            // TYPE_READ_DATA_UNC
+                            // TYPE_READ_DATA_MISS
+                            // TYPE_READ_INS_UNC
+                            // TYPE_READ_INS_MISS
+                            // ==> bit2 must be zero with the TSAR encoding
+                            // ==> mask = 0b0100 = 0x4
+                            assert(((p_vci_tgt.pktid.read() & 0x4) == 0x0) and
+                                    "The type specified in the pktid field is incompatible with the READ CMD");
+                            r_tgt_cmd_fsm = TGT_CMD_READ;
+                        }
+                        else if (p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)
+                        {
+                            // check that the pktid is TYPE_WRITE
+                            // ==> TYPE_WRITE = X100 with the TSAR encoding
+                            // ==> mask = 0b0111 = 0x7
+                            assert((((p_vci_tgt.pktid.read() & 0x7) == 0x4)  or ((p_vci_tgt.pktid.read() & 0x7) == 0x0)) and
+                                    "The type specified in the pktid field is incompatible with the WRITE CMD");
+                            r_tgt_cmd_fsm = TGT_CMD_WRITE;
+                        }
+                        else if (p_vci_tgt.cmd.read() == vci_param_int::CMD_LOCKED_READ)
+                        {
+                            // check that the pktid is TYPE_LL
+                            // ==> TYPE_LL = X110 with the TSAR encoding
+                            // ==> mask = 0b0111 = 0x7
+                            assert(((p_vci_tgt.pktid.read() & 0x7) == 0x6) and
+                                    "The type specified in the pktid field is incompatible with the LL CMD");
+                            r_tgt_cmd_fsm = TGT_CMD_READ;
+                        }
+                        else if (p_vci_tgt.cmd.read() == vci_param_int::CMD_NOP)
+                        {
+                            // check that the pktid is either :
+                            // TYPE_CAS
+                            // TYPE_SC
+                            // ==> TYPE_CAS = X101 with the TSAR encoding
+                            // ==> TYPE_SC  = X111 with the TSAR encoding
+                            // ==> mask = 0b0101 = 0x5
+                            assert(((p_vci_tgt.pktid.read() & 0x5) == 0x5) and
+                                    "The type specified in the pktid field is incompatible with the NOP CMD");
+
+                            if ((p_vci_tgt.pktid.read() & 0x7) == TYPE_CAS) r_tgt_cmd_fsm = TGT_CMD_CAS;
+                            else                                            r_tgt_cmd_fsm = TGT_CMD_WRITE; 
+                        }
+                        else
+                        {
+                            r_tgt_cmd_fsm = TGT_CMD_ERROR;
+                        }
+                    }
+                }
+                break;
+
+                ///////////////////
+            case TGT_CMD_ERROR:  // response error must be sent
+
+                // wait if pending request
+                if (r_tgt_cmd_to_tgt_rsp_req.read()) break;
+
+                // consume all the command packet flits before sending response error
+                if (p_vci_tgt.cmdval and p_vci_tgt.eop)
+                {
+                    r_tgt_cmd_to_tgt_rsp_srcid = p_vci_tgt.srcid.read();
+                    r_tgt_cmd_to_tgt_rsp_trdid = p_vci_tgt.trdid.read();
+                    r_tgt_cmd_to_tgt_rsp_pktid = p_vci_tgt.pktid.read();
+                    r_tgt_cmd_to_tgt_rsp_req   = true;
+                    r_tgt_cmd_to_tgt_rsp_error = 1;
+                    r_tgt_cmd_fsm              = TGT_CMD_IDLE;
+
+#if DEBUG_MEMC_TGT_CMD
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " TGT_CMD_ERROR> Segmentation violation:"
+                            << " address = " << std::hex << p_vci_tgt.address.read()
+                            << " / srcid = " << p_vci_tgt.srcid.read()
+                            << " / trdid = " << p_vci_tgt.trdid.read()
+                            << " / pktid = " << p_vci_tgt.pktid.read()
+                            << " / plen = " << std::dec << p_vci_tgt.plen.read() << std::endl;
+#endif
+
+                }
+                break;
+
+                ////////////////////
+            case TGT_CMD_CONFIG:    // execute config request and return response
+                {
+                    ///////////////////////////////////////////////////////////
+                    //  Decoding CONFIG interface commands                   //
+                    //                                                       //
+                    //  VCI ADDRESS                                          //
+                    //  ================================================     //
+                    //  GLOBAL | LOCAL | ... | FUNC_IDX | REGS_IDX | 00      //
+                    //   IDX   |  IDX  |     | (3 bits) | (7 bits) |         //
+                    //  ================================================     //
+                    //                                                       //
+                    //  For instrumentation : FUNC_IDX = 0b001               //
+                    //                                                       //
+                    //  REGS_IDX                                             //
+                    //  ============================================         //
+                    //       Z     |    Y      |    X     |   W              //
+                    //    (1 bit)  | (2 bits)  | (3 bits) | (1 bit)          //
+                    //  ============================================         //
+                    //                                                       //
+                    //  Z : DIRECT / COHERENCE                               //
+                    //  Y : SUBTYPE ( LOCAL, REMOTE, OTHER )                 //
+                    //  X : REGISTER INDEX                                   //
+                    //  W : HI / LO                                          //
+                    //                                                       //
+                    //  For configuration: FUNC_IDX = 0b000                  //
+                    //                                                       //
+                    //  REGS_IDX                                             //
+                    //  ============================================         //
+                    //             RESERVED             |    X     |         //
+                    //             (4 bits)             | (3 bits) |         //
+                    //  ============================================         //
+                    //                                                       //
+                    //  X : REGISTER INDEX                                   //
+                    //                                                       //
+                    //  For WRITE MISS error signaling: FUNC = 0x010         //
+                    //                                                       //
+                    //  REGS_IDX                                             //
+                    //  ============================================         //
+                    //             RESERVED             |    X     |         //
+                    //             (4 bits)             | (3 bits) |         //
+                    //  ============================================         //
+                    //                                                       //
+                    //  X : REGISTER INDEX                                   //
+                    //                                                       //
+                    ///////////////////////////////////////////////////////////
+
+                    addr_t addr_lsb = p_vci_tgt.address.read() &
+                                      m_config_addr_mask;
+
+                    addr_t cell = (addr_lsb / vci_param_int::B);
+
+                    size_t regr = cell &
+                                  m_config_regr_idx_mask;
+
+                    size_t func = (cell >> m_config_regr_width) &
+                                  m_config_func_idx_mask;
+
+                    bool     need_rsp; 
+                    int      error;  
+                    uint32_t rdata = 0;         // default value
+                    uint32_t wdata = p_vci_tgt.wdata.read();
+
+                    switch(func)
+                    {
+                        // memory operation
+                        case MEMC_CONFIG:
+                        {
+                            if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_READ)         // get lock
+                                    and (regr == MEMC_LOCK))
+                            {
+                                rdata            = (uint32_t) r_config_lock.read();
+                                need_rsp         = true;
+                                error            = 0;
+                                r_config_lock    = true;
+                            }
+                            else if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)  // release lock
+                                    and (regr == MEMC_LOCK))
+                            {
+                                need_rsp      = true;
+                                error         = 0;
+                                r_config_lock = false;
+                            }
+                            else if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)   // set addr_lo
+                                    and (regr == MEMC_ADDR_LO))
+                            {
+                                assert( ((wdata % (m_words * vci_param_int::B)) == 0) and
+                                        "VCI_MEM_CACHE CONFIG ERROR: The buffer must be aligned on a cache line");
+
+                                need_rsp         = true;
+                                error            = 0;
+                                r_config_address = (r_config_address.read() & 0xFFFFFFFF00000000LL) |
+                                    ((addr_t)wdata);
+                            }
+                            else if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)   // set addr_hi
+                                    and (regr == MEMC_ADDR_HI))
+
+                            {
+                                need_rsp         = true;
+                                error            = 0;
+                                r_config_address = (r_config_address.read() & 0x00000000FFFFFFFFLL) |
+                                    (((addr_t) wdata) << 32);
+                            }
+                            else if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)   // set buf_lines
+                                    and (regr == MEMC_BUF_LENGTH))
+                            {
+                                need_rsp         = true;
+                                error            = 0;
+                                size_t lines     = wdata / (m_words << 2);
+                                if (wdata % (m_words << 2)) lines++;
+                                r_config_cmd_lines = lines;
+                                r_config_rsp_lines = 0;
+                            }
+                            else if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)   // set cmd type
+                                    and (regr == MEMC_CMD_TYPE))
+                            {
+                                need_rsp         = false;
+                                error            = 0;
+                                r_config_cmd     = wdata;
+
+                                // prepare delayed response from CONFIG FSM
+                                r_config_srcid   = p_vci_tgt.srcid.read();
+                                r_config_trdid   = p_vci_tgt.trdid.read();
+                                r_config_pktid   = p_vci_tgt.pktid.read();
+                            }
+                            else
+                            {
+                                need_rsp         = true;
+                                error            = 1;
+                            }
+
+                            break;
+                        }
+
+                        // instrumentation registers
+                        case MEMC_INSTRM:
+                        {
+                            need_rsp = true;
+
+                            if (p_vci_tgt.cmd.read() == vci_param_int::CMD_READ)
+                            {
+                                error = read_instrumentation(regr, rdata);
+                            }
+                            else
+                            {
+                                error = 1;
+                            }
+
+                            break;
+                        }
+
+                        // xram GET bus error registers
+                        case MEMC_RERROR:
+                        {
+                            need_rsp = true;
+                            error    = 0;
+
+                            if (p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)
+                            {
+                                switch (regr)
+                                {
+                                    case MEMC_RERROR_IRQ_ENABLE:
+                                        r_xram_rsp_rerror_irq_enable =
+                                            (p_vci_tgt.wdata.read() != 0);
+
+                                        break;
+                                        
+                                    default:
+                                        error = 1;
+                                        break;
+                                }
+                            }
+                            else if (p_vci_tgt.cmd.read() == vci_param_int::CMD_READ)
+                            {
+                                switch (regr)
+                                {
+                                    case MEMC_RERROR_SRCID:
+                                        rdata = (uint32_t)
+                                            r_xram_rsp_rerror_rsrcid.read();
+
+                                        break;
+
+                                    case MEMC_RERROR_ADDR_LO:
+                                        rdata = (uint32_t)
+                                            (r_xram_rsp_rerror_address.read()) &
+                                            ((1ULL<<32)-1);
+
+                                        break;
+
+                                    case MEMC_RERROR_ADDR_HI:
+                                        rdata = (uint32_t)
+                                            (r_xram_rsp_rerror_address.read() >> 32) &
+                                            ((1ULL<<32)-1);
+
+                                        break;
+
+                                    case MEMC_RERROR_IRQ_RESET:
+                                        if (not r_xram_rsp_rerror_irq.read()) break;
+
+                                        r_xram_rsp_rerror_irq = false;
+
+                                        break;
+
+                                    case MEMC_RERROR_IRQ_ENABLE:
+                                        rdata = (uint32_t)
+                                            (r_xram_rsp_rerror_irq_enable.read()) ? 1 : 0;
+
+                                        break;
+
+                                    default:
+                                        error = 1;
+                                        break;
+                                }
+                            }
+                            else
+                            {
+                                error = 1;
+                            }
+
+                            break;
+                        }
+
+                        //unknown function
+                        default:
+                        {
+                            need_rsp = true;
+                            error    = 1;
+
+                            break;
+                        }
+                    }
+
+                    if (need_rsp)
+                    {
+                        // blocked if previous pending request to TGT_RSP FSM
+                        if (r_tgt_cmd_to_tgt_rsp_req.read()) break;
+
+                        r_tgt_cmd_to_tgt_rsp_srcid = p_vci_tgt.srcid.read();
+                        r_tgt_cmd_to_tgt_rsp_trdid = p_vci_tgt.trdid.read();
+                        r_tgt_cmd_to_tgt_rsp_pktid = p_vci_tgt.pktid.read();
+                        r_tgt_cmd_to_tgt_rsp_req   = true;
+                        r_tgt_cmd_to_tgt_rsp_error = error;
+                        r_tgt_cmd_to_tgt_rsp_rdata = rdata;
+                    }
+
+                    r_tgt_cmd_fsm = TGT_CMD_IDLE;
+
+#if DEBUG_MEMC_TGT_CMD
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " TGT_CMD_CONFIG> Configuration request:"
+                            << " address = " << std::hex << p_vci_tgt.address.read()
+                            << " / func = " << func
+                            << " / regr = " << regr
+                            << " / rdata = " << rdata
+                            << " / wdata = " << p_vci_tgt.wdata.read()
+                            << " / need_rsp = " << need_rsp
+                            << " / error = " << error << std::endl;
+#endif
+                    break;
+                }
+                //////////////////
+            case TGT_CMD_READ:    // Push a read request into read fifo
+
+                // check that the read does not cross a cache line limit.
+                if (((m_x[(addr_t) p_vci_tgt.address.read()] + (p_vci_tgt.plen.read() >> 2)) > 16) and
+                        (p_vci_tgt.cmd.read() != vci_param_int::CMD_LOCKED_READ))
+                {
+                    std::cout << "VCI_MEM_CACHE ERROR " << name() << " TGT_CMD_READ state"
+                        << " illegal address/plen for VCI read command" << std::endl;
+                    exit(0);
+                }
+                // check single flit
+                if (!p_vci_tgt.eop.read())
+                {
+                    std::cout << "VCI_MEM_CACHE ERROR " << name() << " TGT_CMD_READ state"
+                        << " read command packet must contain one single flit" << std::endl;
+                    exit(0);
+                } 
+                // check plen for LL
+                if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_LOCKED_READ) and 
+                        (p_vci_tgt.plen.read() != 8))
+                {
+                    std::cout << "VCI_MEM_CACHE ERROR " << name() << " TGT_CMD_READ state"
+                        << " ll command packets must have a plen of 8" << std::endl;
+                    exit(0);
+                }
+
+                if (p_vci_tgt.cmdval and m_cmd_read_addr_fifo.wok())
+                {
+
+#if DEBUG_MEMC_TGT_CMD
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " TGT_CMD_READ> Push into read_fifo:"
+                            << " address = " << std::hex << p_vci_tgt.address.read()
+                            << " / srcid = " << p_vci_tgt.srcid.read()
+                            << " / trdid = " << p_vci_tgt.trdid.read()
+                            << " / pktid = " << p_vci_tgt.pktid.read()
+                            << " / plen = " << std::dec << p_vci_tgt.plen.read() << std::endl;
+#endif
+                    cmd_read_fifo_put = true;
+                    // <Activity counters>
+                    if (p_vci_tgt.cmd.read() == vci_param_int::CMD_LOCKED_READ) {
+                        if (is_local_req(p_vci_tgt.srcid.read())) m_cpt_ll_local++;
+                        else                                      m_cpt_ll_remote++;
+                        m_cpt_ll_cost += req_distance(p_vci_tgt.srcid.read()); // LL on a single word
+                    }
+                    else {
+                        if (is_local_req(p_vci_tgt.srcid.read())) m_cpt_read_local++;
+                        else                                      m_cpt_read_remote++;
+                        m_cpt_read_cost += req_distance(p_vci_tgt.srcid.read());
+                    }
+                    // </Activity counters>
+                    r_tgt_cmd_fsm = TGT_CMD_IDLE;
+                }
+                break;
+
+                ///////////////////
+            case TGT_CMD_WRITE:
+                if (p_vci_tgt.cmdval and m_cmd_write_addr_fifo.wok())
+                {
+
+#if DEBUG_MEMC_TGT_CMD
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " TGT_CMD_WRITE> Push into write_fifo:"
+                            << " address = " << std::hex << p_vci_tgt.address.read()
+                            << " / srcid = " << p_vci_tgt.srcid.read()
+                            << " / trdid = " << p_vci_tgt.trdid.read()
+                            << " / pktid = " << p_vci_tgt.pktid.read()
+                            << " / wdata = " << p_vci_tgt.wdata.read()
+                            << " / be = " << p_vci_tgt.be.read()
+                            << " / plen = " << std::dec << p_vci_tgt.plen.read() << std::endl;
+#endif
+                    cmd_write_fifo_put = true;
+                    // <Activity counters>
+                    if (p_vci_tgt.cmd.read() == vci_param_int::CMD_NOP) {
+                        m_cpt_sc_cost += req_distance(p_vci_tgt.srcid.read());
+                    }
+                    else {
+                        if (is_local_req(p_vci_tgt.srcid.read())) m_cpt_write_flits_local++;
+                        else                                      m_cpt_write_flits_remote++;
+                        m_cpt_write_cost += req_distance(p_vci_tgt.srcid.read());
+                    }
+                    // </Activity counters>
+
+                    if (p_vci_tgt.eop) {
+                        // <Activity counters>
+                        if (p_vci_tgt.cmd.read() == vci_param_int::CMD_NOP) {
+                            if (is_local_req(p_vci_tgt.srcid.read())) m_cpt_sc_local++;
+                            else                                      m_cpt_sc_remote++;
+
+                        }
+                        else {
+                            if (is_local_req(p_vci_tgt.srcid.read())) m_cpt_write_local++;
+                            else                                      m_cpt_write_remote++;
+                        }
+                        // </Activity counters>
+                        r_tgt_cmd_fsm = TGT_CMD_IDLE;
+                    }
+                }
+                break;
+
+                /////////////////
+            case TGT_CMD_CAS:
+                if ((p_vci_tgt.plen.read() != 8) and (p_vci_tgt.plen.read() != 16))
+                {
+                    std::cout << "VCI_MEM_CACHE ERROR " << name() << " TGT_CMD_CAS state"
+                        << "illegal format for CAS command " << std::endl;
+                    exit(0);
+                }
+
+                if (p_vci_tgt.cmdval and m_cmd_cas_addr_fifo.wok())
+                {
+
+#if DEBUG_MEMC_TGT_CMD
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " TGT_CMD_CAS> Pushing command into cmd_cas_fifo:"
+                            << " address = " << std::hex << p_vci_tgt.address.read()
+                            << " srcid = " << p_vci_tgt.srcid.read()
+                            << " trdid = " << p_vci_tgt.trdid.read()
+                            << " pktid = " << p_vci_tgt.pktid.read()
+                            << " wdata = " << p_vci_tgt.wdata.read()
+                            << " be = " << p_vci_tgt.be.read()
+                            << " plen = " << std::dec << p_vci_tgt.plen.read() << std::endl;
+#endif
+                    cmd_cas_fifo_put = true;
+                    if (p_vci_tgt.eop) {
+                        // <Activity counters>
+                        if (is_local_req(p_vci_tgt.srcid.read())) m_cpt_cas_local++;
+                        else                                      m_cpt_cas_remote++;
+                        m_cpt_cas_cost += req_distance(p_vci_tgt.srcid.read());
+                        // </Activity counters>
+                        r_tgt_cmd_fsm = TGT_CMD_IDLE;
+                    }
+                }
+                break;
+        } // end switch tgt_cmd_fsm
+
+        /////////////////////////////////////////////////////////////////////////
+        //    MULTI_ACK FSM
+        /////////////////////////////////////////////////////////////////////////
+        // This FSM controls the response to the multicast update requests sent 
+        // by the memory cache to the L1 caches and update the UPT.
+        //
+        // - The FSM decrements the proper entry in UPT,
+        //   and clear the UPT entry when all responses have been received.
+        // - If required, it sends a request to the TGT_RSP FSM to complete
+        //   a pending  write transaction.
+        //
+        // All those multi-ack packets are one flit packet.
+        // The index in the UPT is defined in the TRDID field.
+        ////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "multi_ack_fsm" << std::endl;
+
+        switch(r_multi_ack_fsm.read())
+        {
+            ////////////////////
+            case MULTI_ACK_IDLE:
+                {
+                    bool multi_ack_fifo_rok = m_cc_receive_to_multi_ack_fifo.rok();
+
+                    // No CC_RECEIVE FSM request and no WRITE FSM request
+                    if (not multi_ack_fifo_rok and not r_write_to_multi_ack_req.read())
+                        break;
+
+                    uint8_t updt_index;
+
+                    // handling WRITE FSM request to decrement update table response
+                    // counter if no CC_RECEIVE FSM request
+                    if (not multi_ack_fifo_rok)
+                    {
+                        updt_index               = r_write_to_multi_ack_upt_index.read();
+                        r_write_to_multi_ack_req = false;
+                    }
+                    // Handling CC_RECEIVE FSM request
+                    else
+                    {
+                        uint64_t flit = m_cc_receive_to_multi_ack_fifo.read();
+                        updt_index    = DspinDhccpParam::dspin_get(flit,
+                                DspinDhccpParam::MULTI_ACK_UPDT_INDEX);
+
+                        cc_receive_to_multi_ack_fifo_get = true;
+                    }
+
+                    assert((updt_index < m_upt.size()) and
+                            "VCI_MEM_CACHE ERROR in MULTI_ACK_IDLE : "
+                            "index too large for UPT");
+
+                    r_multi_ack_upt_index = updt_index;
+                    r_multi_ack_fsm       = MULTI_ACK_UPT_LOCK;
+
+#if DEBUG_MEMC_MULTI_ACK
+                    if (m_debug)
+                    {
+                        if (multi_ack_fifo_rok)
+                        {
+                            std::cout << "  <MEMC " << name()
+                                << " MULTI_ACK_IDLE> Response for UPT entry "
+                                << (size_t)updt_index << std::endl;
+                        }
+                        else
+                        {
+                            std::cout << "  <MEMC " << name()
+                                << " MULTI_ACK_IDLE> Write FSM request to decrement UPT entry "
+                                << updt_index << std::endl;
+                        }
+                    }
+#endif
+                    break;
+                }
+
+                ////////////////////////
+            case MULTI_ACK_UPT_LOCK:
+                {
+                    // get lock to the UPDATE table
+                    if (r_alloc_upt_fsm.read() != ALLOC_UPT_MULTI_ACK) break;
+
+                    // decrement the number of expected responses
+                    size_t count = 0;
+                    bool valid   = m_upt.decrement(r_multi_ack_upt_index.read(), count);
+
+                    if (not valid)
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name()
+                            << " MULTI_ACK_UPT_LOCK state" << std::endl
+                            << "unsuccessful access to decrement the UPT" << std::endl;
+                        exit(0);
+                    }
+
+                    if (count == 0)
+                    {
+                        r_multi_ack_fsm = MULTI_ACK_UPT_CLEAR;
+                    }
+                    else
+                    {
+                        r_multi_ack_fsm = MULTI_ACK_IDLE;
+                    }
+
+#if DEBUG_MEMC_MULTI_ACK
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " MULTI_ACK_UPT_LOCK> Decrement the responses counter for UPT:"
+                            << " entry = "       << r_multi_ack_upt_index.read()
+                            << " / rsp_count = " << std::dec << count << std::endl;
+#endif
+                    break;
+                }
+
+                /////////////////////////
+            case MULTI_ACK_UPT_CLEAR:   // Clear UPT entry / Test if rsp or ack required
+                {
+                    if (r_alloc_upt_fsm.read() != ALLOC_UPT_MULTI_ACK)
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name()
+                            << " MULTI_ACK_UPT_CLEAR state"
+                            << " bad UPT allocation" << std::endl;
+                        exit(0);
+                    }
+
+                    r_multi_ack_srcid = m_upt.srcid(r_multi_ack_upt_index.read());
+                    r_multi_ack_trdid = m_upt.trdid(r_multi_ack_upt_index.read());
+                    r_multi_ack_pktid = m_upt.pktid(r_multi_ack_upt_index.read());
+                    r_multi_ack_nline = m_upt.nline(r_multi_ack_upt_index.read());
+                    bool need_rsp     = m_upt.need_rsp(r_multi_ack_upt_index.read());
+
+                    // clear the UPT entry
+                    m_upt.clear(r_multi_ack_upt_index.read());
+
+                    if      ( need_rsp ) r_multi_ack_fsm = MULTI_ACK_WRITE_RSP;
+                    else                 r_multi_ack_fsm = MULTI_ACK_IDLE;
+
+#if DEBUG_MEMC_MULTI_ACK
+                    if (m_debug)
+                        std::cout <<  "  <MEMC " << name()
+                            << " MULTI_ACK_UPT_CLEAR> Clear UPT entry "
+                            << std::dec << r_multi_ack_upt_index.read() << std::endl;
+#endif
+                    break;
+                }
+                /////////////////////////
+            case MULTI_ACK_WRITE_RSP:     // Post a response request to TGT_RSP FSM
+                // Wait if pending request 
+                {
+                    if (r_multi_ack_to_tgt_rsp_req.read()) break;
+
+                    r_multi_ack_to_tgt_rsp_req   = true;
+                    r_multi_ack_to_tgt_rsp_srcid = r_multi_ack_srcid.read();
+                    r_multi_ack_to_tgt_rsp_trdid = r_multi_ack_trdid.read();
+                    r_multi_ack_to_tgt_rsp_pktid = r_multi_ack_pktid.read();
+                    r_multi_ack_fsm              = MULTI_ACK_IDLE;
+
+#if DEBUG_MEMC_MULTI_ACK
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " MULTI_ACK_WRITE_RSP>"
+                            << " Request TGT_RSP FSM to send a response to srcid "
+                            << std::hex << r_multi_ack_srcid.read() << std::endl;
+#endif
+                    break;
+                }
+        } // end switch r_multi_ack_fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    CONFIG FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The CONFIG FSM handles the VCI configuration requests (INVAL & SYNC).
+        // The target buffer can have any size, and there is one single command for
+        // all cache lines covered by the target buffer.
+        //
+        // An INVAL or SYNC configuration operation is defined by the following registers:
+        // - bool      r_config_cmd        : INVAL / SYNC / NOP
+        // - uint64_t  r_config_address    : buffer base address
+        // - uint32_t  r_config_cmd_lines  : number of lines to be handled
+        // - uint32_t  r_config_rsp_lines  : number of lines not completed
+        //
+        // For both INVAL and SYNC commands, the CONFIG FSM contains the loop handling 
+        // all cache lines covered by the buffer. The various lines of a given buffer
+        // can be pipelined: the CONFIG FSM does not wait the response for line (n) to send
+        // the command for line (n+1). It decrements the r_config_cmd_lines counter until 
+        // the last request has been registered in TRT (for a SYNC), or in IVT (for an INVAL).
+        // The r_config_rsp_lines counter contains the number of expected responses from
+        // CLEANUP FSM (inval) or from IXR_RSP FSM (sync). This register is incremented by
+        // the CONFIG FSM (each time a transaction is requested), and decremented by the
+        // CLEANUP or IXR_RSP FSMs(each time a response is received. As this register can
+        // be concurently accessed by those three FSMs, it is implemented as an [incr/decr]
+        // counter.
+        //
+        // - INVAL request:
+        //   For each line, it access to the DIR. 
+        //   In case of miss, it does nothing, and a response is requested to TGT_RSP FSM. 
+        //   In case of hit, with no copies in L1 caches, the line is invalidated and
+        //   a response is requested to TGT_RSP FSM.
+        //   If there is copies, a multi-inval, or a broadcast-inval coherence transaction
+        //   is launched and registered in UPT. The multi-inval transaction completion
+        //   is signaled by the CLEANUP FSM by decrementing the r_config_rsp_lines counter.
+        //   The CONFIG INVAL response is sent only when the last line has been invalidated.
+        //   There is no PUT transaction to XRAM, even if the invalidated line is dirty...
+        //   TODO : The target buffer address must be aligned on a cache line boundary.
+        //   This constraint can be released, but it requires to make 2 PUT transactions
+        //   for the first and the last line...
+        // 
+        // - SYNC request:
+        //   For each line, it access to the DIR. 
+        //   In case of miss, it does nothing, and a response is requested to TGT_RSP FSM. 
+        //   In case of hit, a PUT transaction is registered in TRT and a request is sent
+        //   to IXR_CMD FSM. The IXR_RSP FSM decrements the r_config_rsp_lines counter
+        //   when a PUT response is received.
+        //   The CONFIG SYNC response is sent only when the last PUT response is received.
+        //
+        // From the software point of view, a configuration request is a sequence
+        // of 6 atomic accesses in an uncached segment. A dedicated lock is used 
+        // to handle only one configuration command at a given time:
+        // - Read  MEMC_LOCK       : Get the lock
+        // - Write MEMC_ADDR_LO    : Set the buffer address LSB
+        // - Write MEMC_ADDR_HI    : Set the buffer address MSB
+        // - Write MEMC_BUF_LENGTH : set buffer length (bytes)
+        // - Write MEMC_CMD_TYPE   : launch the actual operation
+        // - WRITE MEMC_LOCK       : release the lock
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "config_fsm" << std::endl;
+
+        switch( r_config_fsm.read())
+        {
+            /////////////////
+            case CONFIG_IDLE:  // waiting a config request 
+            {
+                if (r_config_cmd.read() != MEMC_CMD_NOP )  
+                {
+                    r_config_fsm    = CONFIG_LOOP;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+    std::cout << "  <MEMC " << name() << " CONFIG_IDLE> Config Request received" 
+              << " / address = " << std::hex << r_config_address.read()
+              << " / lines = " << std::dec << r_config_cmd_lines.read()
+              << " / type = " << r_config_cmd.read() << std::endl;
+#endif
+                }
+                break;
+            }
+            /////////////////
+            case CONFIG_LOOP:   // test if last line to be handled
+            {
+                if (r_config_cmd_lines.read() == 0 )
+                {
+                    r_config_cmd = MEMC_CMD_NOP;
+                    r_config_fsm = CONFIG_WAIT;
+                }
+                else
+                {
+                    r_config_fsm = CONFIG_DIR_REQ;
+                }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_LOOP>" 
+          << " / address = " << std::hex << r_config_address.read()    
+          << " / lines not handled = " << std::dec << r_config_cmd_lines.read() 
+          << " / command = " << r_config_cmd.read() << std::endl;
+#endif
+                break;
+            }
+            /////////////////
+            case CONFIG_WAIT:   // wait completion (last response) 
+            {
+                if (r_config_rsp_lines.read() == 0 )  // last response received
+                {
+                    r_config_fsm = CONFIG_RSP;
+                }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_WAIT>" 
+          << " / lines to do = " << std::dec << r_config_rsp_lines.read() << std::endl;
+#endif
+                break;
+            }
+            ////////////////
+            case CONFIG_RSP:  // request TGT_RSP FSM to return response 
+            {
+                if (not r_config_to_tgt_rsp_req.read())
+                {
+                    r_config_to_tgt_rsp_srcid  = r_config_srcid.read();
+                    r_config_to_tgt_rsp_trdid  = r_config_trdid.read();
+                    r_config_to_tgt_rsp_pktid  = r_config_pktid.read();
+                    r_config_to_tgt_rsp_error  = false;
+                    r_config_to_tgt_rsp_req    = true;
+                    r_config_fsm               = CONFIG_IDLE;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_RSP> Request TGT_RSP FSM to send response:"
+          << " error = " << r_config_to_tgt_rsp_error.read()
+          << " / rsrcid = " << std::hex << r_config_srcid.read()
+          << " / rtrdid = " << std::hex << r_config_trdid.read()
+          << " / rpktid = " << std::hex << r_config_pktid.read() << std::endl;
+#endif
+                }
+                break;
+            }
+            ////////////////////
+            case CONFIG_DIR_REQ:  // Request directory lock
+            {
+                if (r_alloc_dir_fsm.read() == ALLOC_DIR_CONFIG )
+                {
+                    r_config_fsm = CONFIG_DIR_ACCESS;
+                }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_DIR_REQ>"
+          << " Request DIR access" << std::endl;
+#endif
+                break;
+            }
+            ///////////////////////
+            case CONFIG_DIR_ACCESS:   // Access directory and decode config command
+            {
+                assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CONFIG) and
+                "MEMC ERROR in CONFIG_DIR_ACCESS state: bad DIR allocation");
+
+                size_t way = 0;
+                DirectoryEntry entry = m_cache_directory.read(r_config_address.read(), way);
+
+                r_config_dir_way        = way;
+                r_config_dir_copy_inst  = entry.owner.inst;
+                r_config_dir_copy_srcid = entry.owner.srcid;
+                r_config_dir_is_cnt     = entry.is_cnt;
+                r_config_dir_lock       = entry.lock;
+                r_config_dir_count      = entry.count;
+                r_config_dir_ptr        = entry.ptr;
+
+                if (entry.valid and                            // hit & inval command
+                   (r_config_cmd.read() == MEMC_CMD_INVAL)) 
+                {
+                    r_config_fsm       = CONFIG_IVT_LOCK;
+                }
+                else if (entry.valid and                       // hit & sync command
+                         entry.dirty and
+                         (r_config_cmd.read() == MEMC_CMD_SYNC))
+                { 
+                    r_config_fsm       = CONFIG_TRT_LOCK;
+                }
+                else                                            // miss : return to LOOP 
+                {
+                    r_config_cmd_lines = r_config_cmd_lines.read() - 1;
+                    r_config_address   = r_config_address.read() + (m_words<<2);
+                    r_config_fsm       = CONFIG_LOOP;
+                }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_DIR_ACCESS> Accessing directory: "
+          << " address = " << std::hex << r_config_address.read()
+          << " / hit = " << std::dec << entry.valid
+          << " / dirty = " << entry.dirty
+          << " / count = " << entry.count
+          << " / is_cnt = " << entry.is_cnt << std::endl;
+#endif
+                break;
+            }
+            /////////////////////
+            case CONFIG_TRT_LOCK:      // enter this state in case of SYNC command
+                                       // to a dirty cache line 
+                                       // keep DIR lock, and try to get TRT lock
+                                       // return to LOOP state if TRT full
+                                       // reset dirty bit in DIR and register a PUT
+                                       // transaction in TRT if not full.
+            {
+                assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CONFIG) and
+                "MEMC ERROR in CONFIG_TRT_LOCK state: bad DIR allocation");
+
+                if (r_alloc_trt_fsm.read() == ALLOC_TRT_CONFIG )
+                {
+                    size_t index = 0;
+                    bool   wok   = not m_trt.full(index);
+
+                    if (not wok )
+                    {
+                        r_config_fsm = CONFIG_LOOP;
+                    }
+                    else
+                    {
+                        size_t          way = r_config_dir_way.read();
+                        size_t          set = m_y[r_config_address.read()];
+
+                        // reset dirty bit in DIR
+                        DirectoryEntry  entry;
+                        entry.valid       = true;
+                        entry.dirty       = false;
+                        entry.tag         = m_z[r_config_address.read()];
+                        entry.is_cnt      = r_config_dir_is_cnt.read();
+                        entry.lock        = r_config_dir_lock.read();
+                        entry.ptr         = r_config_dir_ptr.read();
+                        entry.count       = r_config_dir_count.read();
+                        entry.owner.inst  = r_config_dir_copy_inst.read();
+                        entry.owner.srcid = r_config_dir_copy_srcid.read();
+                        m_cache_directory.write( set, way, entry );
+
+                        r_config_trt_index = index;
+                        r_config_fsm       = CONFIG_TRT_SET;
+                    }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_TRT_LOCK> Access TRT: "
+          << " wok = " << std::dec << wok
+          << " index = " << index << std::endl;
+#endif
+                }
+                break;
+            }
+            ////////////////////
+            case CONFIG_TRT_SET:       // read data in cache
+            // and post a PUT request in TRT
+            {
+                assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CONFIG) and
+                "MEMC ERROR in CONFIG_TRT_SET state: bad DIR allocation");
+
+                assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_CONFIG) and
+                "MEMC ERROR in CONFIG_TRT_SET state: bad TRT allocation");
+
+                // read data into cache
+                size_t              way = r_config_dir_way.read();
+                size_t              set = m_y[r_config_address.read()];
+                std::vector<data_t> data_vector;
+                data_vector.clear();
+                for(size_t word=0; word<m_words; word++) 
+                {
+                    uint32_t data = m_cache_data.read( way, set, word );
+                    data_vector.push_back( data );
+                }
+
+                // post the PUT request in TRT
+                m_trt.set( r_config_trt_index.read(),
+                           false,                               // PUT transaction
+                           m_nline[r_config_address.read()],    // line index
+                           0,                                   // srcid:       unused
+                           0,                                   // trdid:       unused
+                           0,                                   // pktid:       unused
+                           false,                               // not proc_read
+                           0,                                   // read_length: unused
+                           0,                                   // word_index:  unused
+                           std::vector<be_t>(m_words,0xF),      // byte-enable: unused 
+                           data_vector,                         // data to be written
+                           0,                                   // ll_key:      unused
+                           true );                              // requested by config FSM
+                config_rsp_lines_incr = true;
+                r_config_fsm          = CONFIG_PUT_REQ;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_TRT_SET> PUT request in TRT:"
+          << " address = " << std::hex << r_config_address.read()
+          << " index = " << std::dec << r_config_trt_index.read() << std::endl;
+#endif
+                break;
+            }
+            ////////////////////
+            case CONFIG_PUT_REQ:       // post PUT request to IXR_CMD_FSM
+            {
+                if (not r_config_to_ixr_cmd_req.read())
+                {
+                    r_config_to_ixr_cmd_req   = true;
+                    r_config_to_ixr_cmd_index = r_config_trt_index.read();
+
+                    // prepare next iteration
+                    r_config_cmd_lines        = r_config_cmd_lines.read() - 1;
+                    r_config_address          = r_config_address.read() + (m_words<<2);
+                    r_config_fsm              = CONFIG_LOOP;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_PUT_REQ> post PUT request to IXR_CMD_FSM"
+          << " / address = " << std::hex << r_config_address.read() << std::endl; 
+#endif
+                }
+                break;
+            }
+            /////////////////////
+            case CONFIG_IVT_LOCK:  // enter this state in case of INVAL command
+                                   // Keep DIR lock and Try to get IVT lock.
+                                   // Return to LOOP state if IVT full.
+                                   // Register inval in IVT, and invalidate the
+                                   // directory if IVT not full. 
+            {
+                assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CONFIG) and
+                "MEMC ERROR in CONFIG_IVT_LOCK state: bad DIR allocation");
+
+                if (r_alloc_ivt_fsm.read() == ALLOC_IVT_CONFIG )
+                {
+                    size_t set        = m_y[(addr_t)(r_config_address.read())];
+                    size_t way        = r_config_dir_way.read();
+
+                    if (r_config_dir_count.read() == 0 )  // inval DIR and return to LOOP
+                    {
+                        m_cache_directory.inval( way, set );
+                        r_config_cmd_lines  = r_config_cmd_lines.read() - 1;
+                        r_config_address    = r_config_address.read() + (m_words<<2);
+                        r_config_fsm        = CONFIG_LOOP;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_IVT_LOCK>"
+          << " No copies in L1 : inval DIR entry"  << std::endl;
+#endif
+                    }
+                    else    // try to register inval in IVT
+                    {
+                        bool        wok       = false;
+                        size_t      index     = 0;
+                        bool        broadcast = r_config_dir_is_cnt.read();
+                        size_t      srcid     = r_config_srcid.read();
+                        size_t      trdid     = r_config_trdid.read();
+                        size_t      pktid     = r_config_pktid.read();
+                        addr_t      nline     = m_nline[(addr_t)(r_config_address.read())];
+                        size_t      nb_copies = r_config_dir_count.read();
+
+                        wok = m_ivt.set( false,       // it's an inval transaction
+                                         broadcast,   
+                                         false,       // no response required
+                                         true,        // acknowledge required
+                                         srcid,
+                                         trdid,
+                                         pktid,
+                                         nline,
+                                         nb_copies,
+                                         index );
+
+                        if (wok )  // IVT success => inval DIR slot
+                        {
+                            m_cache_directory.inval( way, set );
+                            r_config_ivt_index    = index;
+                            config_rsp_lines_incr = true;
+                            if (broadcast )  r_config_fsm = CONFIG_BC_SEND;
+                            else             r_config_fsm = CONFIG_INVAL_SEND;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_IVT_LOCK>"
+          << " Inval DIR entry and register inval in IVT"
+          << " / index = " << std::dec << index
+          << " / broadcast = " << broadcast << std::endl;
+#endif
+                        }
+                        else       // IVT full => release both DIR and IVT locks
+                        {
+                            r_config_fsm = CONFIG_LOOP;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_IVT_LOCK>"
+          << " IVT full : release DIR & IVT locks and retry" << std::endl;
+#endif
+                        }
+                    }
+                }
+                break;
+            }
+            ////////////////////
+            case CONFIG_BC_SEND:    // Post a broadcast inval request to CC_SEND FSM
+            {
+                if (not r_config_to_cc_send_multi_req.read() and 
+                    not r_config_to_cc_send_brdcast_req.read())
+                {
+                    // post bc inval request
+                    r_config_to_cc_send_multi_req   = false;
+                    r_config_to_cc_send_brdcast_req = true;
+                    r_config_to_cc_send_trdid = r_config_ivt_index.read();
+                    r_config_to_cc_send_nline = m_nline[(addr_t)(r_config_address.read())];
+
+                    // prepare next iteration
+                    r_config_cmd_lines        = r_config_cmd_lines.read() - 1;
+                    r_config_address          = r_config_address.read() + (m_words << 2);
+                    r_config_fsm              = CONFIG_LOOP;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_BC_SEND>"
+          << " Post a broadcast inval request to CC_SEND FSM" 
+          << " / address = " << r_config_address.read() <<std::endl;
+#endif
+                }
+                break;
+            }
+            ///////////////////////
+            case CONFIG_INVAL_SEND:    // Post a multi inval request to CC_SEND FSM
+            {
+                if (not r_config_to_cc_send_multi_req.read() and 
+                    not r_config_to_cc_send_brdcast_req.read())
+                {
+                    // post multi inval request
+                    r_config_to_cc_send_multi_req   = true;
+                    r_config_to_cc_send_brdcast_req = false;
+                    r_config_to_cc_send_trdid = r_config_ivt_index.read();
+                    r_config_to_cc_send_nline = m_nline[(addr_t)(r_config_address.read())];
+
+                    // post data into FIFO
+                    config_to_cc_send_fifo_srcid = r_config_dir_copy_srcid.read();
+                    config_to_cc_send_fifo_inst  = r_config_dir_copy_inst.read();
+                    config_to_cc_send_fifo_put   = true;
+
+                    if (r_config_dir_count.read() == 1 )  // one copy
+                    {
+                        // prepare next iteration
+                        r_config_cmd_lines  = r_config_cmd_lines.read() - 1;
+                        r_config_address    = r_config_address.read() + (m_words << 2);
+                            r_config_fsm    = CONFIG_LOOP;
+                    }
+                    else                                   // several copies
+                    {
+                        r_config_fsm = CONFIG_HEAP_REQ;
+                    }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_INVAL_SEND>"
+          << " Post multi inval request to CC_SEND FSM" 
+          << " / address = " << std::hex << r_config_address.read() 
+          << " / copy = " << r_config_dir_copy_srcid.read() 
+          << " / inst = " << std::dec << r_config_dir_copy_inst.read() << std::endl;
+#endif
+                }
+                break;
+            }
+            /////////////////////
+            case CONFIG_HEAP_REQ:  // Try to get access to Heap
+            {
+                if (r_alloc_heap_fsm.read() == ALLOC_HEAP_CONFIG )
+                {
+                    r_config_fsm       = CONFIG_HEAP_SCAN;
+                    r_config_heap_next = r_config_dir_ptr.read();
+                }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_HEAP_REQ>"
+          << " Requesting HEAP lock" << std::endl;
+#endif
+                break;
+            }
+            //////////////////////
+            case CONFIG_HEAP_SCAN:      // scan HEAP and send inval to CC_SEND FSM
+            {
+                HeapEntry entry = m_heap.read( r_config_heap_next.read());
+                bool last_copy  = (entry.next == r_config_heap_next.read()); 
+
+                config_to_cc_send_fifo_srcid = entry.owner.srcid;
+                config_to_cc_send_fifo_inst  = entry.owner.inst;
+                // config_to_cc_send_fifo_last  = last_copy;
+                config_to_cc_send_fifo_put   = true;
+
+                if (m_config_to_cc_send_inst_fifo.wok()) // inval request accepted
+                {
+                    r_config_heap_next = entry.next;
+                    if (last_copy ) r_config_fsm = CONFIG_HEAP_LAST;
+                }
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_HEAP_SCAN>"
+          << " Post multi inval request to CC_SEND FSM" 
+          << " / address = " << std::hex << r_config_address.read() 
+          << " / copy = " << entry.owner.srcid 
+          << " / inst = " << std::dec << entry.owner.inst << std::endl;
+#endif
+                break;
+            }
+            //////////////////////
+            case CONFIG_HEAP_LAST:      // HEAP housekeeping
+            {
+                size_t free_pointer = m_heap.next_free_ptr();
+                HeapEntry last_entry;
+                last_entry.owner.srcid = 0;
+                last_entry.owner.inst  = false;
+
+                if (m_heap.is_full())
+                {
+                    last_entry.next = r_config_dir_ptr.read();
+                    m_heap.unset_full();
+                }
+                else
+                { 
+                   last_entry.next = free_pointer;
+                }
+
+                m_heap.write_free_ptr( r_config_dir_ptr.read());
+                m_heap.write( r_config_heap_next.read(), last_entry );
+
+                // prepare next iteration
+                r_config_cmd_lines          = r_config_cmd_lines.read() - 1;
+                r_config_address            = r_config_address.read() + (m_words<<2);
+                r_config_fsm                = CONFIG_LOOP;
+
+#if DEBUG_MEMC_CONFIG
+if (m_debug)
+std::cout << "  <MEMC " << name() << " CONFIG_HEAP_LAST>"
+          << " Heap housekeeping" << std::endl;
+#endif
+                break;
+            }
+        }  // end switch r_config_fsm
+
+        
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    READ FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The READ FSM controls the VCI read  and ll requests.
+        // It takes the lock protecting the cache directory to check the cache line status:
+        // - In case of HIT
+        //   The fsm copies the data (one line, or one single word)
+        //   in the r_read_to_tgt_rsp buffer. It waits if this buffer is not empty.
+        //   The requesting initiator is registered in the cache directory.
+        //   If the number of copy is larger than 1, the new copy is registered
+        //   in the HEAP.
+        //   If the number of copy is larger than the threshold, the HEAP is cleared,
+        //   and the corresponding line switches to the counter mode.
+        // - In case of MISS
+        //   The READ fsm takes the lock protecting the transaction tab.
+        //   If a read transaction to the XRAM for this line already exists,
+        //   or if the transaction tab is full, the fsm is stalled.
+        //   If a TRT entry is free, the READ request is registered in TRT,
+        //   it is consumed in the request FIFO, and transmited to the IXR_CMD FSM.
+        //   The READ FSM returns in the IDLE state as the read transaction will be
+        //   completed when the missing line will be received.
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "read_fsm" << std::endl;
+
+        switch(r_read_fsm.read())
+        {
+            ///////////////
+            case READ_IDLE:  // waiting a read request
+                {
+                    if (m_cmd_read_addr_fifo.rok())
+                    {
+
+#if DEBUG_MEMC_READ
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " READ_IDLE> Read request"
+                                << " : address = " << std::hex << m_cmd_read_addr_fifo.read()
+                                << " / srcid = " << m_cmd_read_srcid_fifo.read()
+                                << " / trdid = " << m_cmd_read_trdid_fifo.read()
+                                << " / pktid = " << m_cmd_read_pktid_fifo.read()
+                                << " / nwords = " << std::dec << m_cmd_read_length_fifo.read() << std::endl;
+#endif
+                        r_read_fsm = READ_DIR_REQ;
+                    }
+                    break;
+                }
+                //////////////////
+            case READ_DIR_REQ:  // Get the lock to the directory
+                {
+                    if (r_alloc_dir_fsm.read() == ALLOC_DIR_READ)
+                    {
+                        r_read_fsm = READ_DIR_LOCK;
+                    }
+
+#if DEBUG_MEMC_READ
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " READ_DIR_REQ> Requesting DIR lock " << std::endl;
+#endif
+                    break;
+                }
+
+                ///////////////////
+            case READ_DIR_LOCK:  // check directory for hit / miss
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_READ) and
+                            "MEMC ERROR in READ_DIR_LOCK state: Bad DIR allocation");
+
+                    size_t way = 0;
+                    DirectoryEntry entry = m_cache_directory.read(m_cmd_read_addr_fifo.read(), way);
+
+                    // access the global table ONLY when we have an LL cmd
+                    if ((m_cmd_read_pktid_fifo.read() & 0x7) == TYPE_LL)   
+                    {
+                        r_read_ll_key   = m_llsc_table.ll(m_cmd_read_addr_fifo.read());
+                    }
+                    r_read_is_cnt     = entry.is_cnt;
+                    r_read_dirty      = entry.dirty;
+                    r_read_lock       = entry.lock;
+                    r_read_tag        = entry.tag;
+                    r_read_way        = way;
+                    r_read_count      = entry.count;
+                    r_read_copy       = entry.owner.srcid;
+                    r_read_copy_inst  = entry.owner.inst;
+                    r_read_ptr        = entry.ptr; // pointer to the heap
+
+                    // check if this is a cached read, this means pktid is either
+                    // TYPE_READ_DATA_MISS 0bX001 with TSAR encoding
+                    // TYPE_READ_INS_MISS  0bX011 with TSAR encoding
+                    bool cached_read = (m_cmd_read_pktid_fifo.read() & 0x1);
+                    if (entry.valid)    // hit
+                    {
+                        // test if we need to register a new copy in the heap
+                        if (entry.is_cnt or (entry.count == 0) or !cached_read)
+                        {
+                            r_read_fsm = READ_DIR_HIT;
+                        }
+                        else
+                        {
+                            r_read_fsm = READ_HEAP_REQ;
+                        }
+                    }
+                    else      // miss
+                    {
+                        r_read_fsm = READ_TRT_LOCK;
+                    }
+
+#if DEBUG_MEMC_READ
+                    if (m_debug)
+                    {
+                        std::cout << "  <MEMC " << name() << " READ_DIR_LOCK> Accessing directory: "
+                            << " address = " << std::hex << m_cmd_read_addr_fifo.read()
+                            << " / hit = " << std::dec << entry.valid
+                            << " / count = " <<std::dec << entry.count
+                            << " / is_cnt = " << entry.is_cnt;
+                        if ((m_cmd_read_pktid_fifo.read() & 0x7) == TYPE_LL) std::cout << " / LL access" << std::endl;
+                        else                                                std::cout << std::endl;
+                    }
+#endif
+                    break;
+                }
+                //////////////////
+            case READ_DIR_HIT:    //  read data in cache & update the directory
+                //  we enter this state in 3 cases:
+                //  - the read request is uncachable
+                //  - the cache line is in counter mode
+                //  - the cache line is valid but not replicated
+
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_READ) and
+                            "MEMC ERROR in READ_DIR_HIT state: Bad DIR allocation");
+
+                    // check if this is an instruction read, this means pktid is either
+                    // TYPE_READ_INS_UNC   0bX010 with TSAR encoding
+                    // TYPE_READ_INS_MISS  0bX011 with TSAR encoding
+                    bool inst_read    = ((m_cmd_read_pktid_fifo.read() & 0x2) != 0);
+                    // check if this is a cached read, this means pktid is either
+                    // TYPE_READ_DATA_MISS 0bX001 with TSAR encoding
+                    // TYPE_READ_INS_MISS  0bX011 with TSAR encoding
+                    bool cached_read  = (m_cmd_read_pktid_fifo.read() & 0x1);
+                    bool is_cnt       = r_read_is_cnt.read();
+
+                    // read data in the cache
+                    size_t set        = m_y[(addr_t)(m_cmd_read_addr_fifo.read())];
+                    size_t way        = r_read_way.read();
+
+                    m_cache_data.read_line(way, set, r_read_data);
+
+                    // update the cache directory
+                    DirectoryEntry entry;
+                    entry.valid   = true;
+                    entry.is_cnt  = is_cnt;
+                    entry.dirty   = r_read_dirty.read();
+                    entry.tag     = r_read_tag.read();
+                    entry.lock    = r_read_lock.read();
+                    entry.ptr     = r_read_ptr.read();
+
+                    if (cached_read)   // Cached read => we must update the copies
+                    {
+                        if (!is_cnt)  // Not counter mode
+                        {
+                            entry.owner.srcid    = m_cmd_read_srcid_fifo.read();
+                            entry.owner.inst     = inst_read;
+                            entry.count          = r_read_count.read() + 1;
+                        }
+                        else  // Counter mode
+                        {
+                            entry.owner.srcid    = 0;
+                            entry.owner.inst     = false;
+                            entry.count          = r_read_count.read() + 1;
+                        }
+                    }
+                    else            // Uncached read
+                    {
+                        entry.owner.srcid     = r_read_copy.read();
+                        entry.owner.inst      = r_read_copy_inst.read();
+                        entry.count           = r_read_count.read();
+                    }
+
+#if DEBUG_MEMC_READ
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " READ_DIR_HIT> Update directory entry:"
+                            << " addr = " << std::hex << m_cmd_read_addr_fifo.read()
+                            << " / set = " << std::dec << set
+                            << " / way = " << way
+                            << " / owner_id = " << std::hex << entry.owner.srcid
+                            << " / owner_ins = " << std::dec << entry.owner.inst
+                            << " / count = " << entry.count
+                            << " / is_cnt = " << entry.is_cnt << std::endl;
+#endif
+                    m_cache_directory.write(set, way, entry);
+                    r_read_fsm    = READ_RSP;
+                    break;
+                }
+                ///////////////////
+            case READ_HEAP_REQ:    // Get the lock to the HEAP directory
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_READ)
+                    {
+                        r_read_fsm = READ_HEAP_LOCK;
+                    }
+
+#if DEBUG_MEMC_READ
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " READ_HEAP_REQ>"
+                            << " Requesting HEAP lock " << std::endl;
+#endif
+                    break;
+                }
+
+                ////////////////////
+            case READ_HEAP_LOCK:   // read data in cache, update the directory
+                // and prepare the HEAP update
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_READ)
+                    {
+                        // enter counter mode when we reach the limit of copies or the heap is full
+                        bool go_cnt = (r_read_count.read() >= m_max_copies) or m_heap.is_full();
+
+                        // read data in the cache
+                        size_t set = m_y[(addr_t)(m_cmd_read_addr_fifo.read())];
+                        size_t way = r_read_way.read();
+
+                        m_cache_data.read_line(way, set, r_read_data);
+
+                        // update the cache directory
+                        DirectoryEntry entry;
+                        entry.valid  = true;
+                        entry.is_cnt = go_cnt;
+                        entry.dirty  = r_read_dirty.read();
+                        entry.tag    = r_read_tag.read();
+                        entry.lock   = r_read_lock.read();
+                        entry.count  = r_read_count.read() + 1;
+
+                        if (not go_cnt)         // Not entering counter mode
+                        {
+                            entry.owner.srcid    = r_read_copy.read();
+                            entry.owner.inst     = r_read_copy_inst.read();
+                            entry.ptr            = m_heap.next_free_ptr();   // set pointer on the heap
+                        }
+                        else                // Entering Counter mode
+                        {
+                            entry.owner.srcid    = 0;
+                            entry.owner.inst     = false;
+                            entry.ptr            = 0;
+                        }
+
+                        m_cache_directory.write(set, way, entry);
+
+                        // prepare the heap update (add an entry, or clear the linked list)
+                        if (not go_cnt)      // not switching to counter mode
+                        {
+                            // We test if the next free entry in the heap is the last
+                            HeapEntry heap_entry = m_heap.next_free_entry();
+                            r_read_next_ptr      = heap_entry.next;
+                            r_read_last_free     = (heap_entry.next == m_heap.next_free_ptr());
+
+                            r_read_fsm           = READ_HEAP_WRITE; // add an entry in the HEAP
+                        }
+                        else            // switching to counter mode
+                        {
+                            if (r_read_count.read() >1)              // heap must be cleared
+                            {
+                                HeapEntry next_entry = m_heap.read(r_read_ptr.read());
+                                r_read_next_ptr      = m_heap.next_free_ptr();
+                                m_heap.write_free_ptr(r_read_ptr.read());
+
+                                if (next_entry.next == r_read_ptr.read())    // last entry
+                                {
+                                    r_read_fsm = READ_HEAP_LAST;    // erase the entry
+                                }
+                                else                                        // not the last entry
+                                {
+                                    r_read_ptr = next_entry.next;
+                                    r_read_fsm = READ_HEAP_ERASE;   // erase the list
+                                }
+                            }
+                            else  // the heap is not used / nothing to do
+                            {
+                                r_read_fsm = READ_RSP;
+                            }
+                        }
+
+#if DEBUG_MEMC_READ
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " READ_HEAP_LOCK> Update directory:"
+                                << " tag = " << std::hex << entry.tag
+                                << " set = " << std::dec << set
+                                << " way = " << way
+                                << " count = " << entry.count
+                                << " is_cnt = " << entry.is_cnt << std::endl;
+#endif
+                    }
+                    else
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name() << " READ_HEAP_LOCK"
+                            << "Bad HEAP allocation"   << std::endl;
+                        exit(0);
+                    }
+                    break;
+                }
+                /////////////////////
+            case READ_HEAP_WRITE:       // add an entry in the heap
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_READ)
+                    {
+                        HeapEntry heap_entry;
+                        heap_entry.owner.srcid    = m_cmd_read_srcid_fifo.read();
+                        heap_entry.owner.inst     = ((m_cmd_read_pktid_fifo.read() & 0x2) != 0);
+
+                        if (r_read_count.read() == 1)  // creation of a new linked list
+                        {
+                            heap_entry.next         = m_heap.next_free_ptr();
+                        }
+                        else                         // head insertion in existing list
+                        {
+                            heap_entry.next         = r_read_ptr.read();
+                        }
+                        m_heap.write_free_entry(heap_entry);
+                        m_heap.write_free_ptr(r_read_next_ptr.read());
+                        if (r_read_last_free.read())  m_heap.set_full();
+
+                        r_read_fsm = READ_RSP;
+
+#if DEBUG_MEMC_READ
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " READ_HEAP_WRITE> Add an entry in the heap:"
+                                << " owner_id = " << std::hex << heap_entry.owner.srcid
+                                << " owner_ins = " << std::dec << heap_entry.owner.inst << std::endl;
+#endif
+                    }
+                    else
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name() << " READ_HEAP_WRITE"
+                            << "Bad HEAP allocation" << std::endl;
+                        exit(0);
+                    }
+                    break;
+                }
+                /////////////////////
+            case READ_HEAP_ERASE:
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_READ)
+                    {
+                        HeapEntry next_entry = m_heap.read(r_read_ptr.read());
+                        if (next_entry.next == r_read_ptr.read())
+                        {
+                            r_read_fsm = READ_HEAP_LAST;
+                        }
+                        else
+                        {
+                            r_read_ptr = next_entry.next;
+                            r_read_fsm = READ_HEAP_ERASE;
+                        }
+                    }
+                    else
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name() << " READ_HEAP_ERASE"
+                            << "Bad HEAP allocation" << std::endl;
+                        exit(0);
+                    }
+                    break;
+                }
+
+                ////////////////////
+            case READ_HEAP_LAST:
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_READ)
+                    {
+                        HeapEntry last_entry;
+                        last_entry.owner.srcid    = 0;
+                        last_entry.owner.inst     = false;
+
+                        if (m_heap.is_full())
+                        {
+                            last_entry.next       = r_read_ptr.read();
+                            m_heap.unset_full();
+                        }
+                        else
+                        {
+                            last_entry.next       = r_read_next_ptr.read();
+                        }
+                        m_heap.write(r_read_ptr.read(),last_entry);
+                        r_read_fsm = READ_RSP;
+                    }
+                    else
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name() << " READ_HEAP_LAST"
+                            << "Bad HEAP allocation" << std::endl;
+                        exit(0);
+                    }
+                    break;
+                }
+                //////////////
+            case READ_RSP:    //  request the TGT_RSP FSM to return data
+                {
+                    if (!r_read_to_tgt_rsp_req)
+                    {
+                        for(size_t i=0 ; i<m_words ; i++)  r_read_to_tgt_rsp_data[i] = r_read_data[i];
+                        r_read_to_tgt_rsp_word   = m_x[(addr_t) m_cmd_read_addr_fifo.read()];
+                        r_read_to_tgt_rsp_length = m_cmd_read_length_fifo.read();
+                        r_read_to_tgt_rsp_srcid  = m_cmd_read_srcid_fifo.read();
+                        r_read_to_tgt_rsp_trdid  = m_cmd_read_trdid_fifo.read();
+                        r_read_to_tgt_rsp_pktid  = m_cmd_read_pktid_fifo.read();
+                        r_read_to_tgt_rsp_ll_key = r_read_ll_key.read();
+                        cmd_read_fifo_get        = true;
+                        r_read_to_tgt_rsp_req    = true;
+                        r_read_fsm               = READ_IDLE;
+
+#if DEBUG_MEMC_READ
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " READ_RSP> Request TGT_RSP FSM to return data:"
+                                << " rsrcid = " << std::hex << m_cmd_read_srcid_fifo.read()
+                                << " / address = " << std::hex << m_cmd_read_addr_fifo.read()
+                                << " / nwords = " << std::dec << m_cmd_read_length_fifo.read() << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ///////////////////
+            case READ_TRT_LOCK: // read miss : check the Transaction Table
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_READ)
+                    {
+                        size_t      index     = 0;
+                        addr_t      addr      = (addr_t) m_cmd_read_addr_fifo.read();
+                        bool        hit_read  = m_trt.hit_read(m_nline[addr], index);
+                        bool        hit_write = m_trt.hit_write(m_nline[addr]);
+                        bool        wok       = not m_trt.full(index);
+
+                        if (hit_read or !wok or hit_write)    // line already requested or no space
+                        {
+                            if (!wok)                    m_cpt_trt_full++;
+                            if (hit_read or hit_write)   m_cpt_trt_rb++;
+                            r_read_fsm = READ_IDLE;
+                        }
+                        else                  // missing line is requested to the XRAM
+                        {
+                            m_cpt_read_miss++;
+                            r_read_trt_index = index;
+                            r_read_fsm       = READ_TRT_SET;
+                        }
+
+#if DEBUG_MEMC_READ
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " READ_TRT_LOCK> Check TRT:"
+                                << " hit_read = " << hit_read
+                                << " / hit_write = " << hit_write
+                                << " / full = " << !wok << std::endl;
+#endif
+                    }
+                    break;
+                }
+                //////////////////
+            case READ_TRT_SET:      // register get transaction in TRT
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_READ)
+                    {
+                        m_trt.set( r_read_trt_index.read(),
+                                true,      // GET 
+                                m_nline[(addr_t)(m_cmd_read_addr_fifo.read())],
+                                m_cmd_read_srcid_fifo.read(),
+                                m_cmd_read_trdid_fifo.read(),
+                                m_cmd_read_pktid_fifo.read(),
+                                true,      // proc read
+                                m_cmd_read_length_fifo.read(),
+                                m_x[(addr_t)(m_cmd_read_addr_fifo.read())],
+                                std::vector<be_t> (m_words,0),
+                                std::vector<data_t> (m_words,0),
+                                r_read_ll_key.read());
+#if DEBUG_MEMC_READ
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " READ_TRT_SET> Set a GET in TRT:"
+                                << " address = " << std::hex << m_cmd_read_addr_fifo.read()
+                                << " / srcid = " << std::hex << m_cmd_read_srcid_fifo.read() << std::endl;
+#endif
+                        r_read_fsm = READ_TRT_REQ;
+                    }
+                    break;
+                }
+
+                //////////////////
+            case READ_TRT_REQ:   // consume the read request in FIFO and send it to IXR_CMD_FSM
+                {
+                    if (not r_read_to_ixr_cmd_req)
+                    {
+                        cmd_read_fifo_get       = true;
+                        r_read_to_ixr_cmd_req   = true;
+                        r_read_to_ixr_cmd_index = r_read_trt_index.read();
+                        r_read_fsm              = READ_IDLE;
+
+#if DEBUG_MEMC_READ
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " READ_TRT_REQ> Request GET transaction for address "
+                                << std::hex << m_cmd_read_addr_fifo.read() << std::endl;
+#endif
+                    }
+                    break;
+                }
+        } // end switch read_fsm
+
+        ///////////////////////////////////////////////////////////////////////////////////
+        //    WRITE FSM
+        ///////////////////////////////////////////////////////////////////////////////////
+        // The WRITE FSM handles the write bursts and sc requests sent by the processors.
+        // All addresses in a burst must be in the same cache line.
+        // A complete write burst is consumed in the FIFO & copied to a local buffer.
+        // Then the FSM takes the lock protecting the cache directory, to check
+        // if the line is in the cache.
+        //
+        // - In case of HIT, the cache is updated.
+        //   If there is no other copy, an acknowledge response is immediately
+        //   returned to the writing processor.
+        //   If the data is cached by other processors, a coherence transaction must
+        //   be launched (sc requests always require a coherence transaction):
+        //   It is a multicast update if the line is not in counter mode: the processor
+        //   takes the lock protecting the Update Table (UPT) to register this transaction.
+        //   If the UPT is full, it releases the lock(s) and retry. Then, it sends
+        //   a multi-update request to all owners of the line (but the writer),
+        //   through the CC_SEND FSM. In case of coherence transaction, the WRITE FSM
+        //   does not respond to the writing processor, as this response will be sent by
+        //   the MULTI_ACK FSM when all update responses have been received.
+        //   It is a broadcast invalidate if the line is in counter mode: The line
+        //   should be erased in memory cache, and written in XRAM with a PUT transaction,
+        //   after registration in TRT.
+        //
+        // - In case of MISS, the WRITE FSM takes the lock protecting the transaction
+        //   table (TRT). If a read transaction to the XRAM for this line already exists,
+        //   it writes in the TRT (write buffer). Otherwise, if a TRT entry is free,
+        //   the WRITE FSM register a new transaction in TRT, and sends a GET request
+        //   to the XRAM. If the TRT is full, it releases the lock, and waits.
+        //   Finally, the WRITE FSM returns an aknowledge response to the writing processor.
+        /////////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "write_fsm" << std::endl;
+
+        switch(r_write_fsm.read())
+        {
+            ////////////////
+            case WRITE_IDLE:  // copy first word of a write burst in local buffer
+                {
+                    if (not m_cmd_write_addr_fifo.rok()) break;
+
+                    // consume a word in the FIFO & write it in the local buffer
+                    cmd_write_fifo_get  = true;
+                    size_t index        = m_x[(addr_t)(m_cmd_write_addr_fifo.read())];
+
+                    r_write_address     = (addr_t)(m_cmd_write_addr_fifo.read());
+                    r_write_word_index  = index;
+                    r_write_word_count  = 0;
+                    r_write_data[index] = m_cmd_write_data_fifo.read();
+                    r_write_srcid       = m_cmd_write_srcid_fifo.read();
+                    r_write_trdid       = m_cmd_write_trdid_fifo.read();
+                    r_write_pktid       = m_cmd_write_pktid_fifo.read();
+
+                    // if SC command, get the SC key
+                    if ((m_cmd_write_pktid_fifo.read() & 0x7) == TYPE_SC)
+                    {
+                        assert( not m_cmd_write_eop_fifo.read() &&
+                                "MEMC ERROR in WRITE_IDLE state: "
+                                "invalid packet format for SC command");
+
+                        r_write_sc_key = m_cmd_write_data_fifo.read();
+                    }
+
+                    // initialize the be field for all words
+                    for(size_t word=0 ; word<m_words ; word++)
+                    {
+                        if (word == index) r_write_be[word] = m_cmd_write_be_fifo.read();
+                        else               r_write_be[word] = 0x0;
+                    }
+
+                    if (m_cmd_write_eop_fifo.read())
+                    {
+                        r_write_fsm = WRITE_DIR_REQ;
+                    }
+                    else
+                    {
+                        r_write_fsm = WRITE_NEXT;
+                    }
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " WRITE_IDLE> Write request "
+                            << " srcid = " << std::hex << m_cmd_write_srcid_fifo.read()
+                            << " / address = " << std::hex << m_cmd_write_addr_fifo.read()
+                            << " / data = " << m_cmd_write_data_fifo.read() << std::endl;
+#endif
+                    break;
+                }
+                ////////////////
+            case WRITE_NEXT:  // copy next word of a write burst in local buffer
+                {
+                    if (not m_cmd_write_addr_fifo.rok()) break;
+
+                    // check that the next word is in the same cache line
+                    assert((m_nline[(addr_t)(r_write_address.read())] == 
+                            m_nline[(addr_t)(m_cmd_write_addr_fifo.read())]) &&
+                            "MEMC ERROR in WRITE_NEXT state: Illegal write burst");
+
+                    size_t index = m_x[(addr_t)(m_cmd_write_addr_fifo.read())];
+                    bool   is_sc = ((m_cmd_write_pktid_fifo.read() & 0x7) == TYPE_SC);
+
+                    // check that SC command has constant address
+                    assert((not is_sc or (index == r_write_word_index)) &&
+                            "MEMC ERROR in WRITE_NEXT state: "
+                            "the address must be constant on a SC command");
+
+                    // check that SC command has two flits
+                    assert((not is_sc or m_cmd_write_eop_fifo.read()) &&
+                            "MEMC ERROR in WRITE_NEXT state: "
+                            "invalid packet format for SC command");
+
+                    // consume a word in the FIFO & write it in the local buffer
+                    cmd_write_fifo_get  = true;
+
+                    r_write_be[index]   = m_cmd_write_be_fifo.read();
+                    r_write_data[index] = m_cmd_write_data_fifo.read();
+
+                    // the first flit of a SC command is the reservation key and
+                    // therefore it must not be counted as a data to write
+                    if (not is_sc)
+                    {
+                        r_write_word_count = r_write_word_count.read() + 1;
+                    }
+
+                    if (m_cmd_write_eop_fifo.read()) r_write_fsm = WRITE_DIR_REQ;
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " WRITE_NEXT> Write another word in local buffer"
+                            << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////
+            case WRITE_DIR_REQ: // Get the lock to the directory
+                                // and access the llsc_global_table
+                {
+                    if (r_alloc_dir_fsm.read() != ALLOC_DIR_WRITE ) break;
+
+                    if ((r_write_pktid.read() & 0x7) == TYPE_SC)
+                    {
+                        // test address and key match of the SC command on the
+                        // LL/SC table without removing reservation. The reservation
+                        // will be erased after in this FSM. 
+                        bool sc_success = m_llsc_table.check(r_write_address.read(),
+                                                             r_write_sc_key.read());
+
+                        r_write_sc_fail     = not sc_success;
+
+                        if (not sc_success) r_write_fsm = WRITE_RSP;
+                        else                r_write_fsm = WRITE_DIR_LOCK;
+                    }
+                    else
+                    {
+                        // write burst 
+#define L2 soclib::common::uint32_log2
+                        addr_t min = r_write_address.read();
+                        addr_t max = r_write_address.read() +
+                                    (r_write_word_count.read() << L2(vci_param_int::B));
+#undef L2
+
+                        m_llsc_table.sw(min, max);
+
+                        r_write_fsm = WRITE_DIR_LOCK;
+                    }
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " WRITE_DIR_REQ> Requesting DIR lock "
+                            << std::endl;
+#endif
+                    break;
+                }
+                ////////////////////
+            case WRITE_DIR_LOCK:     // access directory to check hit/miss
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_WRITE) and
+                            "MEMC ERROR in ALLOC_DIR_LOCK state: Bad DIR allocation");
+
+                    size_t  way = 0;
+                    DirectoryEntry entry(m_cache_directory.read(r_write_address.read(), way));
+
+                    if (entry.valid)    // hit
+                    {
+                        // copy directory entry in local buffer in case of hit
+                        r_write_is_cnt     = entry.is_cnt;
+                        r_write_lock       = entry.lock;
+                        r_write_tag        = entry.tag;
+                        r_write_copy       = entry.owner.srcid;
+                        r_write_copy_inst  = entry.owner.inst;
+                        r_write_count      = entry.count;
+                        r_write_ptr        = entry.ptr;
+                        r_write_way        = way;
+
+                        if (entry.is_cnt and entry.count) r_write_fsm = WRITE_BC_DIR_READ;
+                        else                              r_write_fsm = WRITE_DIR_HIT;
+                    }
+                    else  // miss
+                    {
+                        r_write_fsm = WRITE_MISS_TRT_LOCK;
+                    }
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                    {
+                        std::cout << "  <MEMC " << name() << " WRITE_DIR_LOCK> Check the directory: "
+                            << " address = " << std::hex << r_write_address.read()
+                            << " / hit = " << std::dec << entry.valid
+                            << " / count = " << entry.count
+                            << " / is_cnt = " << entry.is_cnt ;
+                        if ((r_write_pktid.read() & 0x7) == TYPE_SC)
+                            std::cout << " / SC access" << std::endl;
+                        else
+                            std::cout << " / SW access" << std::endl;
+                    }
+#endif
+                    break;
+                }
+                ///////////////////
+            case WRITE_DIR_HIT:    // update the cache directory with Dirty bit
+                // and update data cache
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_WRITE) and
+                            "MEMC ERROR in ALLOC_DIR_HIT state: Bad DIR allocation");
+
+                    DirectoryEntry entry;
+                    entry.valid          = true;
+                    entry.dirty          = true;
+                    entry.tag            = r_write_tag.read();
+                    entry.is_cnt         = r_write_is_cnt.read();
+                    entry.lock           = r_write_lock.read();
+                    entry.owner.srcid    = r_write_copy.read();
+                    entry.owner.inst     = r_write_copy_inst.read();
+                    entry.count          = r_write_count.read();
+                    entry.ptr            = r_write_ptr.read();
+
+                    size_t set           = m_y[(addr_t)(r_write_address.read())];
+                    size_t way           = r_write_way.read();
+
+                    // update directory
+                    m_cache_directory.write(set, way, entry);
+
+                    // owner is true when the  the first registered copy is the writer itself
+                    bool owner = ( (r_write_copy.read() == r_write_srcid.read())
+                            and not r_write_copy_inst.read());
+
+                    // no_update is true when there is no need for coherence transaction
+                    bool no_update = ( (r_write_count.read() == 0) or
+                            (owner and (r_write_count.read() == 1) and 
+                             ((r_write_pktid.read() & 0x7) != TYPE_SC)));
+
+                    // write data in the cache if no coherence transaction
+                    if (no_update)
+                    {
+                        // SC command but zero copies 
+                        if ((r_write_pktid.read() & 0x7) == TYPE_SC)
+                        {
+                            m_llsc_table.sc(r_write_address.read(),
+                                            r_write_sc_key.read());
+                        }
+
+                        for(size_t word=0 ; word<m_words ; word++)
+                        {
+                            m_cache_data.write( way, 
+                                    set, 
+                                    word, 
+                                    r_write_data[word].read(), 
+                                    r_write_be[word].read());
+                        }
+                    }
+
+                    if (owner and not no_update and ((r_write_pktid.read() & 0x7) != TYPE_SC))
+                    {
+                        r_write_count = r_write_count.read() - 1;
+                    }
+
+                    if (no_update)     // Write transaction completed
+                    {
+                        r_write_fsm = WRITE_RSP;
+                    }
+                    else              // coherence update required
+                    {
+                        if (!r_write_to_cc_send_multi_req.read() and
+                                !r_write_to_cc_send_brdcast_req.read())
+                        {
+                            r_write_fsm = WRITE_UPT_LOCK;
+                        }
+                        else
+                        {
+                            r_write_fsm = WRITE_WAIT;
+                        }
+                    }
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                    {
+                        if (no_update)
+                        {
+                            std::cout << "  <MEMC " << name() 
+                                << " WRITE_DIR_HIT> Write into cache / No coherence transaction" << std::endl;
+                        }
+                        else
+                        {
+                            std::cout << "  <MEMC " << name() << " WRITE_DIR_HIT> Coherence update required:"
+                                << " is_cnt = " << r_write_is_cnt.read()
+                                << " nb_copies = " << std::dec << r_write_count.read() << std::endl;
+                            if (owner) std::cout << "       ... but the first copy is the writer" << std::endl;
+                        }
+                    }
+#endif
+                    break;
+                }
+                ////////////////////
+            case WRITE_UPT_LOCK:  // Try to register the update request in UPT
+                {
+                    if (r_alloc_upt_fsm.read() == ALLOC_UPT_WRITE)
+                    {
+                        bool        wok        = false;
+                        size_t      index      = 0;
+                        size_t      srcid      = r_write_srcid.read();
+                        size_t      trdid      = r_write_trdid.read();
+                        size_t      pktid      = r_write_pktid.read();
+                        addr_t      nline      = m_nline[(addr_t)(r_write_address.read())];
+                        size_t      nb_copies  = r_write_count.read();
+                        size_t      set        = m_y[(addr_t)(r_write_address.read())];
+                        size_t      way        = r_write_way.read();
+
+                        wok = m_upt.set( true,  // it's an update transaction
+                                false, // it's not a broadcast
+                                true,  // response required
+                                false, // no acknowledge required
+                                srcid,    
+                                trdid,
+                                pktid,
+                                nline,
+                                nb_copies,
+                                index);
+
+                        if (wok )       // write data in cache
+                        {
+                            
+                            if ((r_write_pktid.read() & 0x7) == TYPE_SC)
+                            {
+                                m_llsc_table.sc(r_write_address.read(),
+                                                r_write_sc_key.read());
+                            }
+
+                            for(size_t word=0 ; word<m_words ; word++)
+                            {
+                                m_cache_data.write( way,
+                                        set,
+                                        word,
+                                        r_write_data[word].read(),
+                                        r_write_be[word].read());
+                            }
+                        }
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug and wok)
+                        {
+                            std::cout << "  <MEMC " << name() 
+                                << " WRITE_UPT_LOCK> Register the multicast update in UPT / "
+                                << " nb_copies = " << r_write_count.read() << std::endl;
+                        }
+#endif
+                        r_write_upt_index = index;
+                        // releases the lock protecting UPT and the DIR if no entry...
+                        if (wok) r_write_fsm = WRITE_UPT_HEAP_LOCK;
+                        else    r_write_fsm = WRITE_WAIT;
+                    }
+                    break;
+                }
+
+                /////////////////////////
+            case WRITE_UPT_HEAP_LOCK:   // get access to heap
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_WRITE)
+                    {
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() 
+                                << " WRITE_UPT_HEAP_LOCK> Get acces to the HEAP" << std::endl;
+#endif
+                        r_write_fsm = WRITE_UPT_REQ;
+                    }
+                    break;
+                }
+
+                //////////////////
+            case WRITE_UPT_REQ:    // prepare the coherence transaction for the CC_SEND FSM
+                // and write the first copy in the FIFO
+                // send the request if only one copy
+                {
+                    assert(not r_write_to_cc_send_multi_req.read()   and
+                            not r_write_to_cc_send_brdcast_req.read() and
+                            "Error in VCI_MEM_CACHE : pending multicast or broadcast\n"
+                            "transaction in WRITE_UPT_REQ state"
+                          );
+
+                    r_write_to_cc_send_brdcast_req  = false;
+                    r_write_to_cc_send_trdid        = r_write_upt_index.read();
+                    r_write_to_cc_send_nline        = m_nline[(addr_t)(r_write_address.read())];
+                    r_write_to_cc_send_index        = r_write_word_index.read();
+                    r_write_to_cc_send_count        = r_write_word_count.read();
+
+                    for(size_t i=0; i<m_words ; i++) r_write_to_cc_send_be[i]=r_write_be[i].read();
+
+                    size_t min = r_write_word_index.read();
+                    size_t max = r_write_word_index.read() + r_write_word_count.read();
+                    for(size_t i=min ; i<=max ; i++) r_write_to_cc_send_data[i] = r_write_data[i];
+
+                    if ((r_write_copy.read() != r_write_srcid.read()) or
+                       ((r_write_pktid.read() & 0x7) == TYPE_SC)      or
+                         r_write_copy_inst.read())
+                    {
+                        // put the first srcid in the fifo
+                        write_to_cc_send_fifo_put     = true;
+                        write_to_cc_send_fifo_inst    = r_write_copy_inst.read();
+                        write_to_cc_send_fifo_srcid   = r_write_copy.read();
+                        if (r_write_count.read() == 1)
+                        {
+                            r_write_fsm = WRITE_IDLE;
+                            r_write_to_cc_send_multi_req = true;
+                        }
+                        else
+                        {
+                            r_write_fsm = WRITE_UPT_NEXT;
+                            r_write_to_dec = false;
+
+                        }
+                    }
+                    else
+                    {
+                        r_write_fsm = WRITE_UPT_NEXT;
+                        r_write_to_dec = false;
+                    }
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                    {
+                        std::cout
+                            << "  <MEMC "    << name()
+                            << " WRITE_UPT_REQ> Post first request to CC_SEND FSM"
+                            << " / srcid = " << std::dec << r_write_copy.read()
+                            << " / inst = "  << std::dec << r_write_copy_inst.read() << std::endl;
+
+                        if (r_write_count.read() == 1)
+                            std::cout << "         ... and this is the last" << std::endl;
+                    }
+#endif
+                    break;
+                }
+
+                ///////////////////
+            case WRITE_UPT_NEXT:
+                {
+                    // continue the multi-update request to CC_SEND fsm
+                    // when there is copies in the heap.
+                    // if one copy in the heap is the writer itself
+                    // the corresponding SRCID should not be written in the fifo,
+                    // but the UPT counter must be decremented.
+                    // As this decrement is done in the WRITE_UPT_DEC state,
+                    // after the last copy has been found, the decrement request
+                    // must be  registered in the r_write_to_dec flip-flop.
+
+                    HeapEntry entry = m_heap.read(r_write_ptr.read());
+
+                    bool dec_upt_counter;
+
+                    // put the next srcid in the fifo
+                    if ((entry.owner.srcid != r_write_srcid.read()) or 
+                       ((r_write_pktid.read() & 0x7) == TYPE_SC)    or
+                         entry.owner.inst)
+                    {
+                        dec_upt_counter                = false;
+                        write_to_cc_send_fifo_put      = true;
+                        write_to_cc_send_fifo_inst     = entry.owner.inst;
+                        write_to_cc_send_fifo_srcid    = entry.owner.srcid;
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                        {
+                            std::cout << "  <MEMC " << name() << " WRITE_UPT_NEXT> Post another request to CC_SEND FSM"
+                                << " / heap_index = " << std::dec << r_write_ptr.read()
+                                << " / srcid = " << std::dec << r_write_copy.read()
+                                << " / inst = "  << std::dec << r_write_copy_inst.read() << std::endl;
+                            if (entry.next == r_write_ptr.read())
+                                std::cout << "        ... and this is the last" << std::endl;
+                        }
+#endif
+                    }
+                    else                                // the UPT counter must be decremented
+                    {
+                        dec_upt_counter = true;
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                        {
+                            std::cout << "  <MEMC " << name() << " WRITE_UPT_NEXT> Skip one entry in heap matching the writer"
+                                << " / heap_index = " << std::dec << r_write_ptr.read()
+                                << " / srcid = " << std::dec << r_write_copy.read()
+                                << " / inst = "  << std::dec << r_write_copy_inst.read() << std::endl;
+                            if (entry.next == r_write_ptr.read())
+                                std::cout << "        ... and this is the last" << std::endl;
+                        }
+#endif
+                    }
+
+                    // register the possible UPT decrement request
+                    r_write_to_dec = dec_upt_counter or r_write_to_dec.read();
+
+                    if (not m_write_to_cc_send_inst_fifo.wok())
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name() << " WRITE_UPT_NEXT state" << std::endl
+                            << "The write_to_cc_send_fifo should not be full" << std::endl
+                            << "as the depth should be larger than the max number of copies" << std::endl;
+                        exit(0);
+                    }
+
+                    r_write_ptr = entry.next;
+
+                    if (entry.next == r_write_ptr.read())    // last copy
+                    {
+                        r_write_to_cc_send_multi_req = true;
+                        if (r_write_to_dec.read() or dec_upt_counter)  r_write_fsm = WRITE_UPT_DEC;
+                        else                                          r_write_fsm = WRITE_IDLE;
+                    }
+                    break;
+                }
+
+                //////////////////
+            case WRITE_UPT_DEC:
+                {
+                    // If the initial writer has a copy, it should not
+                    // receive an update request, but the counter in the
+                    // update table must be decremented by the MULTI_ACK FSM.
+
+                    if (!r_write_to_multi_ack_req.read())
+                    {
+                        r_write_to_multi_ack_req = true;
+                        r_write_to_multi_ack_upt_index = r_write_upt_index.read();
+                        r_write_fsm = WRITE_IDLE;
+                    }
+                    break;
+                }
+
+                ///////////////
+            case WRITE_RSP:  // Post a request to TGT_RSP FSM to acknowledge the write
+                // In order to increase the Write requests throughput,
+                // we don't wait to return in the IDLE state to consume
+                // a new request in the write FIFO
+                {
+                    if (not r_write_to_tgt_rsp_req.read())
+                    {
+                        // post the request to TGT_RSP_FSM
+                        r_write_to_tgt_rsp_req     = true;
+                        r_write_to_tgt_rsp_srcid   = r_write_srcid.read();
+                        r_write_to_tgt_rsp_trdid   = r_write_trdid.read();
+                        r_write_to_tgt_rsp_pktid   = r_write_pktid.read();
+                        r_write_to_tgt_rsp_sc_fail = r_write_sc_fail.read();
+
+                        // try to get a new write request from the FIFO
+                        if (not m_cmd_write_addr_fifo.rok())
+                        {
+                            r_write_fsm = WRITE_IDLE;
+                        }
+                        else
+                        {
+                            // consume a word in the FIFO & write it in the local buffer
+                            cmd_write_fifo_get  = true;
+                            size_t index        = m_x[(addr_t) (m_cmd_write_addr_fifo.read())];
+
+                            r_write_address     = (addr_t) (m_cmd_write_addr_fifo.read());
+                            r_write_word_index  = index;
+                            r_write_word_count  = 0;
+                            r_write_data[index] = m_cmd_write_data_fifo.read();
+                            r_write_srcid       = m_cmd_write_srcid_fifo.read();
+                            r_write_trdid       = m_cmd_write_trdid_fifo.read();
+                            r_write_pktid       = m_cmd_write_pktid_fifo.read();
+
+                            // if SC command, get the SC key
+                            if ((m_cmd_write_pktid_fifo.read() & 0x7) == TYPE_SC)
+                            {
+                                assert( not m_cmd_write_eop_fifo.read() &&
+                                        "MEMC ERROR in WRITE_RSP state: "
+                                        "invalid packet format for SC command");
+
+                                r_write_sc_key = m_cmd_write_data_fifo.read();
+                            } 
+
+                            // initialize the be field for all words
+                            for(size_t word=0 ; word<m_words ; word++)
+                            {
+                                if (word == index) r_write_be[word] = m_cmd_write_be_fifo.read();
+                                else               r_write_be[word] = 0x0;
+                            }
+
+                            if (m_cmd_write_eop_fifo.read())
+                            {
+                                r_write_fsm = WRITE_DIR_REQ;
+                            }
+                            else
+                            {
+                                r_write_fsm = WRITE_NEXT;
+                            }
+                        }
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                        {
+                            std::cout << "  <MEMC " << name() << " WRITE_RSP> Post a request to TGT_RSP FSM"
+                                << " : rsrcid = " << std::hex << r_write_srcid.read() << std::endl;
+                            if (m_cmd_write_addr_fifo.rok())
+                            {
+                                std::cout << "                    New Write request: "
+                                    << " srcid = " << std::hex << m_cmd_write_srcid_fifo.read()
+                                    << " / address = " << m_cmd_write_addr_fifo.read()
+                                    << " / data = " << m_cmd_write_data_fifo.read() << std::endl;
+                            }
+                        }
+#endif
+                    }
+                    break;
+                }
+
+                /////////////////////////
+            case WRITE_MISS_TRT_LOCK: // Miss : check Transaction Table
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_WRITE)
+                    {
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " WRITE_MISS_TRT_LOCK> Check the TRT" << std::endl;
+#endif
+                        size_t  hit_index = 0;
+                        size_t  wok_index = 0;
+                        addr_t  addr  = (addr_t) r_write_address.read();
+                        bool    hit_read  = m_trt.hit_read(m_nline[addr], hit_index);
+                        bool    hit_write = m_trt.hit_write(m_nline[addr]);
+                        bool    wok       = not m_trt.full(wok_index);
+
+                        // wait an empty entry in TRT
+                        if(not hit_read and (not wok or hit_write))
+                        {
+                            r_write_fsm       = WRITE_WAIT;
+                            m_cpt_trt_full++;
+
+                            break;
+                        }
+
+                        if ((r_write_pktid.read() & 0x7) == TYPE_SC)
+                        {
+                            m_llsc_table.sc(r_write_address.read(),
+                                            r_write_sc_key.read());
+                        }
+
+                        // register the modified data in TRT
+                        if (hit_read)
+                        {
+                            r_write_trt_index = hit_index;
+                            r_write_fsm       = WRITE_MISS_TRT_DATA;
+                            m_cpt_write_miss++;
+                            break;
+                        }
+
+                        // set a new entry in TRT
+                        if (wok and not hit_write)
+                        {
+                            r_write_trt_index = wok_index;
+                            r_write_fsm       = WRITE_MISS_TRT_SET;
+                            m_cpt_write_miss++;
+                            break;
+                        }
+
+                        assert(false && "VCI_MEM_CACHE ERROR: this part must not be reached");
+                    }
+                    break;
+                }
+
+                ////////////////
+            case WRITE_WAIT:  // release the locks protecting the shared ressources
+                {
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " WRITE_WAIT> Releases the locks before retry" << std::endl;
+#endif
+                    r_write_fsm = WRITE_DIR_REQ;
+                    break;
+                }
+
+                ////////////////////////
+            case WRITE_MISS_TRT_SET:  // register a new transaction in TRT (Write Buffer)
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_WRITE)
+                    {
+                        std::vector<be_t>   be_vector;
+                        std::vector<data_t> data_vector;
+                        be_vector.clear();
+                        data_vector.clear();
+                        for(size_t i=0; i<m_words; i++)
+                        {
+                            be_vector.push_back(r_write_be[i]);
+                            data_vector.push_back(r_write_data[i]);
+                        }
+                        m_trt.set(r_write_trt_index.read(),
+                                true,     // read request to XRAM
+                                m_nline[(addr_t)(r_write_address.read())],
+                                r_write_srcid.read(),
+                                r_write_trdid.read(),
+                                r_write_pktid.read(),
+                                false,      // not a processor read
+                                0,        // not a single word
+                                0,            // word index
+                                be_vector,
+                                data_vector);
+                        r_write_fsm = WRITE_MISS_XRAM_REQ;
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " WRITE_MISS_TRT_SET> Set a new entry in TRT" << std::endl;
+#endif
+                    }
+                    break;
+                }
+
+                /////////////////////////
+            case WRITE_MISS_TRT_DATA: // update an entry in TRT (used as a Write Buffer)
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_WRITE)
+                    {
+                        std::vector<be_t> be_vector;
+                        std::vector<data_t> data_vector;
+                        be_vector.clear();
+                        data_vector.clear();
+                        for(size_t i=0; i<m_words; i++)
+                        {
+                            be_vector.push_back(r_write_be[i]);
+                            data_vector.push_back(r_write_data[i]);
+                        }
+                        m_trt.write_data_mask( r_write_trt_index.read(),
+                                be_vector,
+                                data_vector );
+                        r_write_fsm = WRITE_RSP;
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " WRITE_MISS_TRT_DATA> Modify an existing entry in TRT" << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////////////
+            case WRITE_MISS_XRAM_REQ: // send a GET request to IXR_CMD FSM
+                {
+                    if (not r_write_to_ixr_cmd_req.read())
+                    {
+                        r_write_to_ixr_cmd_req   = true;
+                        r_write_to_ixr_cmd_index = r_write_trt_index.read();
+                        r_write_fsm              = WRITE_RSP;
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() 
+                                      << " WRITE_MISS_XRAM_REQ> Post a GET request to the"
+                                      << " IXR_CMD FSM" << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ///////////////////////
+            case WRITE_BC_DIR_READ:  // enter this state if a broadcast-inval is required
+                                     // the cache line must be erased in mem-cache, and written
+                                     // into XRAM.
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_WRITE) and
+                            "MEMC ERROR in WRITE_BC_DIR_READ state: Bad DIR allocation");
+
+                    // write enable signal for data buffer.
+                    r_write_bc_data_we = true;
+
+                    r_write_fsm = WRITE_BC_TRT_LOCK;
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " WRITE_BC_DIR_READ>"
+                                  << " Read the cache to complete local buffer" << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////
+            case WRITE_BC_TRT_LOCK:     // get TRT lock to check TRT not full
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_WRITE) and
+                            "MEMC ERROR in WRITE_BC_TRT_LOCK state: Bad DIR allocation");
+
+                    // We read the cache and complete the buffer. As the DATA cache uses a
+                    // synchronous RAM, the read DATA request has been performed in the
+                    // WRITE_BC_DIR_READ state but the data is available in this state.
+                    if (r_write_bc_data_we.read())
+                    {
+                        size_t set  = m_y[(addr_t)(r_write_address.read())];
+                        size_t way  = r_write_way.read();
+                        for(size_t word=0 ; word<m_words ; word++)
+                        {
+                            data_t mask = 0;
+                            if (r_write_be[word].read() & 0x1) mask = mask | 0x000000FF;
+                            if (r_write_be[word].read() & 0x2) mask = mask | 0x0000FF00;
+                            if (r_write_be[word].read() & 0x4) mask = mask | 0x00FF0000;
+                            if (r_write_be[word].read() & 0x8) mask = mask | 0xFF000000;
+
+                            // complete only if mask is not null (for energy consumption)
+                            r_write_data[word] =
+                                (r_write_data[word].read()         &  mask) |
+                                (m_cache_data.read(way, set, word) & ~mask);
+                        }
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout 
+                                << "  <MEMC "  << name()
+                                << " WRITE_BC_TRT_LOCK> Complete data buffer" << std::endl;
+#endif
+                    }
+
+                    if (r_alloc_trt_fsm.read() != ALLOC_TRT_WRITE)
+                    {
+                        // if we loop in this state, the data does not need to be
+                        // rewritten (for energy consuption)
+                        r_write_bc_data_we = false;
+                        break;
+                    }
+
+                    size_t wok_index = 0;
+                    bool wok = not m_trt.full(wok_index);
+                    if (wok )       
+                    {
+                        r_write_trt_index = wok_index;
+                        r_write_fsm       = WRITE_BC_IVT_LOCK;
+                    }
+                    else  // wait an empty slot in TRT
+                    {
+                        r_write_fsm       = WRITE_WAIT;
+                    }
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                        std::cout << "  <MEMC "  << name()
+                                  << " WRITE_BC_TRT_LOCK> Check TRT : wok = " << wok
+                                  << " / index = " << wok_index << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////
+            case WRITE_BC_IVT_LOCK:      // get IVT lock and register BC transaction in IVT
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_WRITE) and
+                            "MEMC ERROR in WRITE_BC_IVT_LOCK state: Bad DIR allocation");
+
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_WRITE) and
+                            "MEMC ERROR in WRITE_BC_IVT_LOCK state: Bad TRT allocation");
+
+                    if (r_alloc_ivt_fsm.read() == ALLOC_IVT_WRITE)
+                    {
+                        bool        wok       = false;
+                        size_t      index     = 0;
+                        size_t      srcid     = r_write_srcid.read();
+                        size_t      trdid     = r_write_trdid.read();
+                        size_t      pktid     = r_write_pktid.read();
+                        addr_t      nline     = m_nline[(addr_t)(r_write_address.read())];
+                        size_t      nb_copies = r_write_count.read();
+
+                        wok = m_ivt.set(false,  // it's an inval transaction
+                                true,   // it's a broadcast
+                                true,   // response required
+                                false,  // no acknowledge required
+                                srcid,
+                                trdid,
+                                pktid,
+                                nline,
+                                nb_copies,
+                                index);
+#if DEBUG_MEMC_WRITE
+                        if (m_debug and wok )
+                            std::cout << "  <MEMC " << name() << " WRITE_BC_IVT_LOCK> Register broadcast inval in IVT"
+                                << " / nb_copies = " << r_write_count.read() << std::endl;
+#endif
+                        r_write_upt_index = index;
+
+                        if (wok ) r_write_fsm = WRITE_BC_DIR_INVAL;
+                        else      r_write_fsm = WRITE_WAIT;
+                    }
+                    break;
+                }
+                ////////////////////////
+            case WRITE_BC_DIR_INVAL:    // Register a put transaction in TRT
+                // and invalidate the line in directory
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_WRITE) and
+                            "MEMC ERROR in WRITE_BC_DIR_INVAL state: Bad DIR allocation");
+
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_WRITE) and
+                            "MEMC ERROR in WRITE_BC_DIR_INVAL state: Bad TRT allocation");
+
+                    assert( (r_alloc_ivt_fsm.read() == ALLOC_IVT_WRITE) and
+                            "MEMC ERROR in WRITE_BC_DIR_INVAL state: Bad IVT allocation");
+
+                    // register PUT request in TRT
+                    std::vector<data_t> data_vector;
+                    data_vector.clear();
+                    for(size_t i=0; i<m_words; i++) data_vector.push_back(r_write_data[i].read());
+                    m_trt.set( r_write_trt_index.read(),
+                            false,             // PUT request
+                            m_nline[(addr_t)(r_write_address.read())],
+                            0,                 // unused
+                            0,                 // unused
+                            0,                 // unused
+                            false,             // not a processor read
+                            0,                 // unused
+                            0,                 // unused
+                            std::vector<be_t> (m_words,0),
+                            data_vector );
+
+                    // invalidate directory entry
+                    DirectoryEntry entry;
+                    entry.valid         = false;
+                    entry.dirty         = false;
+                    entry.tag           = 0;
+                    entry.is_cnt        = false;
+                    entry.lock          = false;
+                    entry.owner.srcid   = 0;
+                    entry.owner.inst    = false;
+                    entry.ptr           = 0;
+                    entry.count         = 0;
+                    size_t set          = m_y[(addr_t)(r_write_address.read())];
+                    size_t way          = r_write_way.read();
+
+                    m_cache_directory.write(set, way, entry);
+
+                    if ((r_write_pktid.read() & 0x7) == TYPE_SC)
+                    {
+                        m_llsc_table.sc(r_write_address.read(),
+                                        r_write_sc_key.read());
+                    }
+
+#if DEBUG_MEMC_WRITE
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " WRITE_BC_DIR_INVAL> Inval DIR and register in TRT:"
+                            << " address = " << r_write_address.read() << std::endl;
+#endif
+                    r_write_fsm = WRITE_BC_CC_SEND;
+                    break;
+                }
+
+                //////////////////////
+            case WRITE_BC_CC_SEND:    // Post a coherence broadcast request to CC_SEND FSM
+                {
+                    if (!r_write_to_cc_send_multi_req.read() and !r_write_to_cc_send_brdcast_req.read())
+                    {
+                        r_write_to_cc_send_multi_req   = false;
+                        r_write_to_cc_send_brdcast_req = true;
+                        r_write_to_cc_send_trdid       = r_write_upt_index.read();
+                        r_write_to_cc_send_nline       = m_nline[(addr_t)(r_write_address.read())];
+                        r_write_to_cc_send_index       = 0;
+                        r_write_to_cc_send_count       = 0;
+
+                        for(size_t i=0; i<m_words ; i++)  // Ã  quoi sert ce for? (AG)
+                        {
+                            r_write_to_cc_send_be[i]=0;
+                            r_write_to_cc_send_data[i] = 0;
+                        }
+                        r_write_fsm = WRITE_BC_XRAM_REQ;
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " WRITE_BC_CC_SEND> Post a broadcast request to CC_SEND FSM" << std::endl;
+#endif
+                    }
+                    break;
+                }
+
+                ///////////////////////
+            case WRITE_BC_XRAM_REQ:   // Post a PUT request to IXR_CMD FSM
+                {
+                    if (not r_write_to_ixr_cmd_req.read())
+                    {
+                        r_write_to_ixr_cmd_req     = true;
+                        r_write_to_ixr_cmd_index   = r_write_trt_index.read();
+                        r_write_fsm = WRITE_IDLE;
+
+#if DEBUG_MEMC_WRITE
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " WRITE_BC_XRAM_REQ> Post a put request to IXR_CMD FSM" << std::endl;
+#endif
+                    }
+                    break;
+                }
+        } // end switch r_write_fsm
+
+        ///////////////////////////////////////////////////////////////////////
+        //    IXR_CMD FSM
+        ///////////////////////////////////////////////////////////////////////
+        // The IXR_CMD fsm controls the command packets to the XRAM :
+        // It handles requests from 5 FSMs with a round-robin priority:
+        //  READ > WRITE > CAS > XRAM_RSP > CONFIG
+        //
+        // - It sends a single flit VCI read to the XRAM in case of
+        //   GET request posted by the READ, WRITE or CAS FSMs. 
+        // - It sends a multi-flit VCI write in case of PUT request posted by
+        //   the XRAM_RSP, WRITE, CAS, or CONFIG FSMs.
+        //
+        // For each client, there is three steps:
+        // - IXR_CMD_*_IDLE : round-robin allocation to a client
+        // - IXR_CMD_*_TRT  : access to TRT for address and data
+        // - IXR_CMD_*_SEND : send the PUT or GET VCI command
+        //
+        // The address and data to be written (for a PUT) are stored in TRT.
+        // The trdid field contains always the TRT entry index.
+        ////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "ixr_cmd_fsm" << std::endl;
+
+        switch(r_ixr_cmd_fsm.read())
+        {
+            ///////////////////////
+            case IXR_CMD_READ_IDLE:
+                {
+                    if     (r_write_to_ixr_cmd_req.read())      r_ixr_cmd_fsm = IXR_CMD_WRITE_TRT;
+                    else if (r_cas_to_ixr_cmd_req.read())        r_ixr_cmd_fsm = IXR_CMD_CAS_TRT;
+                    else if (r_xram_rsp_to_ixr_cmd_req.read())   r_ixr_cmd_fsm = IXR_CMD_XRAM_TRT;
+                    else if (r_config_to_ixr_cmd_req.read())     r_ixr_cmd_fsm = IXR_CMD_CONFIG_TRT;
+                    else if (r_read_to_ixr_cmd_req.read())       r_ixr_cmd_fsm = IXR_CMD_READ_TRT;
+                    break;
+                }
+                ////////////////////////
+            case IXR_CMD_WRITE_IDLE:
+                {
+                    if     (r_cas_to_ixr_cmd_req.read())        r_ixr_cmd_fsm = IXR_CMD_CAS_TRT;
+                    else if (r_xram_rsp_to_ixr_cmd_req.read())   r_ixr_cmd_fsm = IXR_CMD_XRAM_TRT;
+                    else if (r_config_to_ixr_cmd_req.read())     r_ixr_cmd_fsm = IXR_CMD_CONFIG_TRT;
+                    else if (r_read_to_ixr_cmd_req.read())       r_ixr_cmd_fsm = IXR_CMD_READ_TRT;
+                    else if (r_write_to_ixr_cmd_req.read())      r_ixr_cmd_fsm = IXR_CMD_WRITE_TRT;
+                    break;
+                }
+                //////////////////////
+            case IXR_CMD_CAS_IDLE:
+                {
+                    if     (r_xram_rsp_to_ixr_cmd_req.read())   r_ixr_cmd_fsm = IXR_CMD_XRAM_TRT;
+                    else if (r_config_to_ixr_cmd_req.read())     r_ixr_cmd_fsm = IXR_CMD_CONFIG_TRT;
+                    else if (r_read_to_ixr_cmd_req.read())       r_ixr_cmd_fsm = IXR_CMD_READ_TRT;
+                    else if (r_write_to_ixr_cmd_req.read())      r_ixr_cmd_fsm = IXR_CMD_WRITE_TRT;
+                    else if (r_cas_to_ixr_cmd_req.read())        r_ixr_cmd_fsm = IXR_CMD_CAS_TRT;
+                    break;
+                }
+                ///////////////////////
+            case IXR_CMD_XRAM_IDLE:
+                {
+                    if     (r_config_to_ixr_cmd_req.read())     r_ixr_cmd_fsm = IXR_CMD_CONFIG_TRT;
+                    else if (r_read_to_ixr_cmd_req.read())       r_ixr_cmd_fsm = IXR_CMD_READ_TRT;
+                    else if (r_write_to_ixr_cmd_req.read())      r_ixr_cmd_fsm = IXR_CMD_WRITE_TRT;
+                    else if (r_cas_to_ixr_cmd_req.read())        r_ixr_cmd_fsm = IXR_CMD_CAS_TRT;
+                    else if (r_xram_rsp_to_ixr_cmd_req.read())   r_ixr_cmd_fsm = IXR_CMD_XRAM_TRT;
+                    break;
+                }
+                /////////////////////////
+            case IXR_CMD_CONFIG_IDLE:
+                {
+                    if     (r_read_to_ixr_cmd_req.read())       r_ixr_cmd_fsm = IXR_CMD_READ_TRT;
+                    else if (r_write_to_ixr_cmd_req.read())      r_ixr_cmd_fsm = IXR_CMD_WRITE_TRT;
+                    else if (r_cas_to_ixr_cmd_req.read())        r_ixr_cmd_fsm = IXR_CMD_CAS_TRT;
+                    else if (r_xram_rsp_to_ixr_cmd_req.read())   r_ixr_cmd_fsm = IXR_CMD_XRAM_TRT;
+                    else if (r_config_to_ixr_cmd_req.read())     r_ixr_cmd_fsm = IXR_CMD_CONFIG_TRT;
+                    break;
+                }
+
+                //////////////////////
+            case IXR_CMD_READ_TRT:       // access TRT for a GET
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_CMD )
+                    {
+                        TransactionTabEntry entry = m_trt.read( r_read_to_ixr_cmd_index.read());
+                        r_ixr_cmd_address = entry.nline * (m_words<<2);
+                        r_ixr_cmd_trdid   = r_read_to_ixr_cmd_index.read();
+                        r_ixr_cmd_get     = true;
+                        r_ixr_cmd_word    = 0;
+                        r_ixr_cmd_fsm     = IXR_CMD_READ_SEND;
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_READ_TRT> TRT access"
+                                << " index = " << std::dec << r_read_to_ixr_cmd_index.read()
+                                << " / address = " << std::hex << (entry.nline*(m_words<<2)) << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ///////////////////////
+            case IXR_CMD_WRITE_TRT:       // access TRT for a PUT or a GET
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_CMD )
+                    {
+                        TransactionTabEntry entry = m_trt.read( r_write_to_ixr_cmd_index.read());
+                        r_ixr_cmd_address = entry.nline * (m_words<<2);
+                        r_ixr_cmd_trdid   = r_write_to_ixr_cmd_index.read();
+                        r_ixr_cmd_get     = entry.xram_read;
+                        r_ixr_cmd_word    = 0;
+                        r_ixr_cmd_fsm     = IXR_CMD_WRITE_SEND;
+
+                        // Read data from TRT if PUT transaction
+                        if (not entry.xram_read)
+                        {
+                            for( size_t i=0 ; i<m_words ; i++ ) r_ixr_cmd_wdata[i] = entry.wdata[i];
+                        }
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_WRITE_TRT> TRT access"
+                                << " index = " << std::dec << r_write_to_ixr_cmd_index.read()
+                                << " / address = " << std::hex << (entry.nline*(m_words<<2)) << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////////
+            case IXR_CMD_CAS_TRT:       // access TRT for a PUT or a GET 
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_CMD )
+                    {
+                        TransactionTabEntry entry = m_trt.read( r_cas_to_ixr_cmd_index.read());
+                        r_ixr_cmd_address = entry.nline * (m_words<<2);
+                        r_ixr_cmd_trdid   = r_cas_to_ixr_cmd_index.read();
+                        r_ixr_cmd_get     = entry.xram_read;
+                        r_ixr_cmd_word    = 0;
+                        r_ixr_cmd_fsm     = IXR_CMD_CAS_SEND;
+
+                        // Read data from TRT if PUT transaction
+                        if (not entry.xram_read)
+                        {
+                            for( size_t i=0 ; i<m_words ; i++ ) r_ixr_cmd_wdata[i] = entry.wdata[i];
+                        }
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_CAS_TRT> TRT access"
+                                << " index = " << std::dec << r_cas_to_ixr_cmd_index.read()
+                                << " / address = " << std::hex << (entry.nline*(m_words<<2)) << std::endl;
+#endif
+                    }
+                    break;
+                }
+                //////////////////////
+            case IXR_CMD_XRAM_TRT:       // access TRT for a PUT 
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_CMD )
+                    {
+                        TransactionTabEntry entry = m_trt.read( r_xram_rsp_to_ixr_cmd_index.read());
+                        r_ixr_cmd_address = entry.nline * (m_words<<2);
+                        r_ixr_cmd_trdid   = r_xram_rsp_to_ixr_cmd_index.read();
+                        r_ixr_cmd_get     = false;
+                        r_ixr_cmd_word    = 0;
+                        r_ixr_cmd_fsm     = IXR_CMD_XRAM_SEND;
+                        for( size_t i=0 ; i<m_words ; i++ ) r_ixr_cmd_wdata[i] = entry.wdata[i];
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_XRAM_TRT> TRT access"
+                                << " index = " << std::dec << r_xram_rsp_to_ixr_cmd_index.read()
+                                << " / address = " << std::hex << (entry.nline*(m_words<<2)) << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ////////////////////////
+            case IXR_CMD_CONFIG_TRT:       // access TRT for a PUT
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_CMD )
+                    {
+                        TransactionTabEntry entry = m_trt.read( r_config_to_ixr_cmd_index.read());
+                        r_ixr_cmd_address = entry.nline * (m_words<<2);
+                        r_ixr_cmd_trdid   = r_config_to_ixr_cmd_index.read();
+                        r_ixr_cmd_get     = false;
+                        r_ixr_cmd_word    = 0;
+                        r_ixr_cmd_fsm     = IXR_CMD_CONFIG_SEND;
+                        for( size_t i=0 ; i<m_words ; i++ ) r_ixr_cmd_wdata[i] = entry.wdata[i];
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_CONFIG_TRT> TRT access"
+                                << " index = " << std::dec << r_config_to_ixr_cmd_index.read()
+                                << " / address = " << std::hex << (entry.nline*(m_words<<2)) << std::endl;
+#endif
+                    }
+                    break;
+                }
+
+                ///////////////////////
+            case IXR_CMD_READ_SEND:      // send a get from READ FSM
+                {
+                    if (p_vci_ixr.cmdack)
+                    {
+                        r_ixr_cmd_fsm         = IXR_CMD_READ_IDLE;
+                        r_read_to_ixr_cmd_req = false;
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_READ_SEND> GET request:" << std::hex
+                                << " address = " << r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2) << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ////////////////////////
+            case IXR_CMD_WRITE_SEND:     // send a put or get from WRITE FSM
+                {
+                    if (p_vci_ixr.cmdack)
+                    {
+                        if (not r_ixr_cmd_get.read())   // PUT
+                        {
+                            if (r_ixr_cmd_word.read() == (m_words - 2))
+                            {
+                                r_ixr_cmd_fsm          = IXR_CMD_WRITE_IDLE;
+                                r_write_to_ixr_cmd_req = false;
+                            }
+                            else
+                            {
+                                r_ixr_cmd_word = r_ixr_cmd_word.read() + 2;
+                            }
+
+#if DEBUG_MEMC_IXR_CMD
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " IXR_CMD_WRITE_SEND> PUT request:" << std::hex
+                                    << " address = " << r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2) << std::endl;
+#endif
+                        }
+                        else                                  // GET
+                        {
+                            r_ixr_cmd_fsm          = IXR_CMD_WRITE_IDLE;
+                            r_write_to_ixr_cmd_req = false;
+
+#if DEBUG_MEMC_IXR_CMD
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " IXR_CMD_WRITE_SEND> GET request:" << std::hex
+                                    << " address = " << r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2) << std::endl;
+#endif
+                        }
+                    }
+                    break;
+                }
+                //////////////////////
+            case IXR_CMD_CAS_SEND:      // send a put or get command from CAS FSM
+                {
+                    if (p_vci_ixr.cmdack)
+                    {
+                        if (not r_ixr_cmd_get.read()) // PUT
+                        {
+                            if (r_ixr_cmd_word.read() == (m_words - 2))
+                            {
+                                r_ixr_cmd_fsm        = IXR_CMD_CAS_IDLE;
+                                r_cas_to_ixr_cmd_req = false;
+                            }
+                            else
+                            {
+                                r_ixr_cmd_word = r_ixr_cmd_word.read() + 2;
+                            }
+
+#if DEBUG_MEMC_IXR_CMD
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " IXR_CMD_CAS_SEND> PUT request:" << std::hex
+                                    << " address = " << r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2) << std::endl;
+#endif
+                        }
+                        else                            // GET
+                        {
+                            r_ixr_cmd_fsm        = IXR_CMD_CAS_IDLE;
+                            r_cas_to_ixr_cmd_req = false;
+
+#if DEBUG_MEMC_IXR_CMD
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " IXR_CMD_CAS_SEND> GET request:" << std::hex
+                                    << " address = " << r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2) << std::endl;
+#endif
+                        }
+                    }
+                    break;
+                }
+                ///////////////////////
+            case IXR_CMD_XRAM_SEND:     // send a put from XRAM_RSP FSM
+                {
+                    if (p_vci_ixr.cmdack.read())
+                    {
+                        if (r_ixr_cmd_word.read() == (m_words - 2))
+                        {
+                            r_ixr_cmd_fsm = IXR_CMD_XRAM_IDLE;
+                            r_xram_rsp_to_ixr_cmd_req = false;
+                        }
+                        else
+                        {
+                            r_ixr_cmd_word = r_ixr_cmd_word.read() + 2;
+                        }
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_XRAM_SEND> PUT request:" << std::hex
+                                << " address = " << r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2) << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////////////
+            case IXR_CMD_CONFIG_SEND:     // send a put from CONFIG FSM
+                {
+                    if (p_vci_ixr.cmdack.read())
+                    {
+                        if (r_ixr_cmd_word.read() == (m_words - 2))
+                        {
+                            r_ixr_cmd_fsm = IXR_CMD_CONFIG_IDLE;
+                            r_config_to_ixr_cmd_req = false;
+                        }
+                        else
+                        {
+                            r_ixr_cmd_word = r_ixr_cmd_word.read() + 2;
+                        }
+
+#if DEBUG_MEMC_IXR_CMD
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " IXR_CMD_CONFIG_SEND> PUT request:" << std::hex
+                                << " address = " << r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2) << std::endl;
+#endif
+                    }
+                    break;
+                }
+        } // end switch r_ixr_cmd_fsm
+
+        ////////////////////////////////////////////////////////////////////////////
+        //                IXR_RSP FSM
+        ////////////////////////////////////////////////////////////////////////////
+        // The IXR_RSP FSM receives the response packets from the XRAM,
+        // for both PUT transaction, and GET transaction.
+        //
+        // - A response to a PUT request is a single-cell VCI packet.
+        // The TRT index is contained in the RTRDID field.
+        // The FSM takes the lock protecting the TRT, and the corresponding
+        // entry is erased. If an acknowledge was required (in case of software SYNC)
+        // the r_config_rsp_lines counter is decremented.  
+        //
+        // - A response to a GET request is a multi-cell VCI packet.
+        // The TRT index is contained in the RTRDID field.
+        // The N cells contain the N words of the cache line in the RDATA field.
+        // The FSM takes the lock protecting the TRT to store the line in the TRT
+        // (taking into account the write requests already stored in the TRT).
+        // When the line is completely written, the r_ixr_rsp_to_xram_rsp_rok[index]  
+        // signal is set to inform the XRAM_RSP FSM.
+        ///////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "ixr_rsp_fsm" << std::endl;
+
+        switch(r_ixr_rsp_fsm.read())
+        {
+            //////////////////
+            case IXR_RSP_IDLE:  // test transaction type: PUT/GET
+                {
+                    if (p_vci_ixr.rspval.read())
+                    {
+                        r_ixr_rsp_cpt       = 0;
+                        r_ixr_rsp_trt_index = p_vci_ixr.rtrdid.read();
+
+                        if (p_vci_ixr.reop.read() and not
+                            p_vci_ixr.rerror.read())   // PUT
+                        {
+                            r_ixr_rsp_fsm = IXR_RSP_TRT_ERASE;
+
+#if DEBUG_MEMC_IXR_RSP
+if (m_debug)
+std::cout << "  <MEMC " << name()
+          << " IXR_RSP_IDLE> Response from XRAM to a put transaction" << std::endl;
+#endif
+                        }
+                        else                       // GET 
+                        {
+                            r_ixr_rsp_fsm = IXR_RSP_TRT_READ;
+
+#if DEBUG_MEMC_IXR_RSP
+if (m_debug)
+std::cout << "  <MEMC " << name()
+          << " IXR_RSP_IDLE> Response from XRAM to a get transaction" << std::endl;
+#endif
+                        }
+                    }
+                    break;
+                }
+            ////////////////////////
+            case IXR_RSP_TRT_ERASE:   // erase the entry in the TRT
+                                      // decrease the line counter if config request
+            {
+                if (r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_RSP)
+                {
+                    size_t index = r_ixr_rsp_trt_index.read(); 
+
+                    if (m_trt.is_config(index))     // it's a config transaction
+                    {
+                        config_rsp_lines_ixr_rsp_decr = true;
+                    }
+
+                    m_trt.erase(index);
+                    r_ixr_rsp_fsm = IXR_RSP_IDLE;
+
+#if DEBUG_MEMC_IXR_RSP
+if (m_debug)
+std::cout << "  <MEMC " << name() << " IXR_RSP_TRT_ERASE> Erase TRT entry "
+          << r_ixr_rsp_trt_index.read() << std::endl;
+#endif
+                }
+                break;
+            }
+            //////////////////////
+            case IXR_RSP_TRT_READ:    // write a 64 bits data word in TRT
+            {
+                if ((r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_RSP) and  p_vci_ixr.rspval)
+                {
+                    size_t      index    = r_ixr_rsp_trt_index.read();
+                    size_t      word     = r_ixr_rsp_cpt.read();
+                    bool        eop      = p_vci_ixr.reop.read();
+                    wide_data_t data     = p_vci_ixr.rdata.read();
+                    bool        rerror   = ((p_vci_ixr.rerror.read() & 0x1) == 1);
+
+                    assert(((eop == (word == (m_words-2))) or rerror) and
+                    "MEMC ERROR in IXR_RSP_TRT_READ state : invalid response from XRAM");
+
+                    m_trt.write_rsp( index, word, data, rerror );
+
+                    r_ixr_rsp_cpt = word + 2;
+
+                    if (eop )
+                    {
+                        r_ixr_rsp_to_xram_rsp_rok[r_ixr_rsp_trt_index.read()] = true;
+                        r_ixr_rsp_fsm = IXR_RSP_IDLE;
+                    }
+
+#if DEBUG_MEMC_IXR_RSP
+if (m_debug)
+std::cout << "  <MEMC " << name() << " IXR_RSP_TRT_READ> Writing 2 words in TRT : "
+          << " index = " << std::dec << index
+          << " / word = " << word
+          << " / data = " << std::hex << data << std::endl;
+#endif
+                }
+                break;
+            }
+        } // end swich r_ixr_rsp_fsm
+
+        ////////////////////////////////////////////////////////////////////////////
+        //                XRAM_RSP FSM
+        ////////////////////////////////////////////////////////////////////////////
+        // The XRAM_RSP FSM handles the incoming cache lines after an XRAM GET.
+        // The cache line has been written in the TRT by the IXR_CMD_FSM.
+        // As the IXR_RSP FSM and the XRAM_RSP FSM are running in parallel,
+        // there is as many flip-flops r_ixr_rsp_to_xram_rsp_rok[i] as the number 
+        // of entries in the TRT, that are handled with a round-robin priority...
+        //
+        // The FSM takes the lock protecting TRT, and the lock protecting DIR.
+        // The selected TRT entry is copied in the local buffer r_xram_rsp_trt_buf.
+        // It selects a cache slot and save the victim line in another local buffer
+        // r_xram_rsp_victim_***.
+        // It writes the line extracted from TRT in the cache.
+        // If it was a read MISS, the XRAM_RSP FSM send a request to the TGT_RSP
+        // FSM to return the cache line to the registered processor.
+        // If there is no empty slot, a victim line is evicted, and
+        // invalidate requests are sent to the L1 caches containing copies.
+        // If this line is dirty, the XRAM_RSP FSM send a request to the IXR_CMD
+        // FSM to save the victim line to the XRAM, and register the write transaction
+        // in the TRT (using the entry previously used by the read transaction).
+        ///////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "xram_rsp_fsm" << std::endl;
+
+        switch(r_xram_rsp_fsm.read())
+        {
+            ///////////////////
+            case XRAM_RSP_IDLE: // scan the XRAM responses / select a TRT index (round robin)
+                {
+                    size_t old   = r_xram_rsp_trt_index.read();
+                    size_t lines = m_trt_lines;
+                    for(size_t i=0 ; i<lines ; i++)
+                    {
+                        size_t index = (i+old+1) %lines;
+                        if (r_ixr_rsp_to_xram_rsp_rok[index])
+                        {
+                            r_xram_rsp_trt_index             = index;
+                            r_ixr_rsp_to_xram_rsp_rok[index] = false;
+                            r_xram_rsp_fsm                   = XRAM_RSP_DIR_LOCK;
+
+#if DEBUG_MEMC_XRAM_RSP
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " XRAM_RSP_IDLE>"
+                                    << " Available cache line in TRT:"
+                                    << " index = " << std::dec << index << std::endl;
+#endif
+                            break;
+                        }
+                    }
+                    break;
+                }
+                ///////////////////////
+            case XRAM_RSP_DIR_LOCK: // Takes the DIR lock and the TRT lock
+                // Copy the TRT entry in a local buffer
+                {
+                    if ((r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP) and
+                            (r_alloc_trt_fsm.read() == ALLOC_TRT_XRAM_RSP))
+                    {
+                        // copy the TRT entry in the r_xram_rsp_trt_buf local buffer
+                        size_t  index = r_xram_rsp_trt_index.read();
+                        r_xram_rsp_trt_buf.copy( m_trt.read(index));
+                        r_xram_rsp_fsm = XRAM_RSP_TRT_COPY;
+
+#if DEBUG_MEMC_XRAM_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " XRAM_RSP_DIR_LOCK>"
+                                << " Get access to DIR and TRT" << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ///////////////////////
+            case XRAM_RSP_TRT_COPY: // Select a victim cache line
+                // and copy it in a local buffer
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP) and
+                            "MEMC ERROR in XRAM_RSP_TRT_COPY state: Bad DIR allocation");
+
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_XRAM_RSP) and
+                            "MEMC ERROR in XRAM_RSP_TRT_COPY state: Bad TRT allocation");
+
+                    // selects & extracts a victim line from cache
+                    size_t way = 0;
+                    size_t set = m_y[(addr_t)(r_xram_rsp_trt_buf.nline * m_words * 4)];
+
+                    DirectoryEntry victim(m_cache_directory.select(set, way));
+
+                    bool inval = (victim.count and victim.valid) ;
+
+                    // copy the victim line in a local buffer (both data dir)
+                    m_cache_data.read_line(way, set, r_xram_rsp_victim_data);
+
+                    r_xram_rsp_victim_copy      = victim.owner.srcid;
+                    r_xram_rsp_victim_copy_inst = victim.owner.inst;
+                    r_xram_rsp_victim_count     = victim.count;
+                    r_xram_rsp_victim_ptr       = victim.ptr;
+                    r_xram_rsp_victim_way       = way;
+                    r_xram_rsp_victim_set       = set;
+                    r_xram_rsp_victim_nline     = (addr_t)victim.tag*m_sets + set;
+                    r_xram_rsp_victim_is_cnt    = victim.is_cnt;
+                    r_xram_rsp_victim_inval     = inval ;
+                    r_xram_rsp_victim_dirty     = victim.dirty;
+
+                    if (not r_xram_rsp_trt_buf.rerror ) r_xram_rsp_fsm = XRAM_RSP_IVT_LOCK;
+                    else                                r_xram_rsp_fsm = XRAM_RSP_ERROR_ERASE;
+
+#if DEBUG_MEMC_XRAM_RSP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " XRAM_RSP_TRT_COPY>"
+                            << " Select a victim slot: "
+                            << " way = " << std::dec << way
+                            << " / set = " << set
+                            << " / inval_required = " << inval << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////
+            case XRAM_RSP_IVT_LOCK:   // Keep DIR and TRT locks and take the IVT lock 
+                // to check a possible pending inval
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP) and
+                            "MEMC ERROR in XRAM_RSP_IVT_LOCK state: Bad DIR allocation");
+
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_XRAM_RSP) and
+                            "MEMC ERROR in XRAM_RSP_IVT_LOCK state: Bad TRT allocation");
+
+                    if (r_alloc_ivt_fsm == ALLOC_IVT_XRAM_RSP)
+                    {
+                        size_t index = 0;
+                        if (m_ivt.search_inval(r_xram_rsp_trt_buf.nline, index))  // pending inval
+                        {
+                            r_xram_rsp_fsm = XRAM_RSP_INVAL_WAIT;
+
+#if DEBUG_MEMC_XRAM_RSP
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " XRAM_RSP_IVT_LOCK>"
+                                    << " Get acces to IVT, but line invalidation registered"
+                                    << " / address = " << std::hex << r_xram_rsp_trt_buf.nline*m_words*4
+                                    << " / index = " << std::dec << index << std::endl;
+#endif
+
+                        }
+                        else if (m_ivt.is_full() and r_xram_rsp_victim_inval.read()) // IVT full
+                        {
+                            r_xram_rsp_fsm = XRAM_RSP_INVAL_WAIT;
+
+#if DEBUG_MEMC_XRAM_RSP
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " XRAM_RSP_IVT_LOCK>"
+                                    << " Get acces to IVT, but inval required and IVT full" << std::endl;
+#endif
+                        }
+                        else
+                        {
+                            r_xram_rsp_fsm = XRAM_RSP_DIR_UPDT;
+
+#if DEBUG_MEMC_XRAM_RSP
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " XRAM_RSP_IVT_LOCK>"
+                                    << " Get acces to IVT / no pending inval request" << std::endl;
+#endif
+                        }
+                    }
+                    break;
+                }
+                /////////////////////////
+            case XRAM_RSP_INVAL_WAIT: // release all locks and returns to DIR_LOCK to retry
+                {
+
+#if DEBUG_MEMC_XRAM_RSP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " XRAM_RSP_INVAL_WAIT>"
+                            << " Release all locks and retry" << std::endl;
+#endif
+                    r_xram_rsp_fsm = XRAM_RSP_DIR_LOCK;
+                    break;
+                }
+                ///////////////////////
+            case XRAM_RSP_DIR_UPDT:   // updates the cache (both data & directory),
+                // erases the TRT entry if victim not dirty,
+                // and set inval request in IVT if required
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP) and
+                            "MEMC ERROR in XRAM_RSP_DIR_UPDT state: Bad DIR allocation");
+
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_XRAM_RSP) and
+                            "MEMC ERROR in XRAM_RSP_DIR_UPDT state: Bad TRT allocation");
+
+                    assert( (r_alloc_ivt_fsm.read() == ALLOC_IVT_XRAM_RSP) and
+                            "MEMC ERROR in XRAM_RSP_DIR_UPDT state: Bad IVT allocation");
+
+                    // check if this is an instruction read, this means pktid is either
+                    // TYPE_READ_INS_UNC   0bX010 with TSAR encoding
+                    // TYPE_READ_INS_MISS  0bX011 with TSAR encoding
+                    bool inst_read = (r_xram_rsp_trt_buf.pktid & 0x2) and r_xram_rsp_trt_buf.proc_read;
+
+                    // check if this is a cached read, this means pktid is either
+                    // TYPE_READ_DATA_MISS 0bX001 with TSAR encoding
+                    // TYPE_READ_INS_MISS  0bX011 with TSAR encoding
+                    bool cached_read = (r_xram_rsp_trt_buf.pktid & 0x1) and r_xram_rsp_trt_buf.proc_read;
+
+                    bool dirty = false;
+
+                    // update cache data
+                    size_t set   = r_xram_rsp_victim_set.read();
+                    size_t way   = r_xram_rsp_victim_way.read();
+
+                    for(size_t word=0; word<m_words ; word++)
+                    {
+                        m_cache_data.write(way, set, word, r_xram_rsp_trt_buf.wdata[word]);
+                        dirty = dirty or (r_xram_rsp_trt_buf.wdata_be[word] != 0);
+                    }
+
+                    // update cache directory
+                    DirectoryEntry entry;
+                    entry.valid   = true;
+                    entry.is_cnt  = false;
+                    entry.lock    = false;
+                    entry.dirty   = dirty;
+                    entry.tag     = r_xram_rsp_trt_buf.nline / m_sets;
+                    entry.ptr     = 0;
+                    if (cached_read)
+                    {
+                        entry.owner.srcid   = r_xram_rsp_trt_buf.srcid;
+                        entry.owner.inst    = inst_read;
+                        entry.count         = 1;
+                    }
+                    else
+                    {
+                        entry.owner.srcid    = 0;
+                        entry.owner.inst     = 0;
+                        entry.count          = 0;
+                    }
+                    m_cache_directory.write(set, way, entry);
+
+                    // register invalid request in IVT for victim line if required
+                    if (r_xram_rsp_victim_inval.read())
+                    {
+                        bool   broadcast    = r_xram_rsp_victim_is_cnt.read();
+                        size_t index        = 0;
+                        size_t count_copies = r_xram_rsp_victim_count.read();
+
+                        bool   wok = m_ivt.set(false,      // it's an inval transaction
+                                broadcast,  // set broadcast bit
+                                false,      // no response required 
+                                false,      // no acknowledge required 
+                                0,          // srcid
+                                0,          // trdid
+                                0,          // pktid
+                                r_xram_rsp_victim_nline.read(),
+                                count_copies,
+                                index);
+
+                        r_xram_rsp_ivt_index = index;
+
+                        assert( wok and
+                                "MEMC ERROR in XRAM_RSP_DIR_UPDT state: IVT should not be full"); 
+                    }
+
+#if DEBUG_MEMC_XRAM_RSP
+                    if (m_debug)
+                    {
+                        std::cout << "  <MEMC " << name() << " XRAM_RSP_DIR_UPDT>"
+                            << " Cache update: "
+                            << " way = " << std::dec << way
+                            << " / set = " << set
+                            << " / owner_id = " << std::hex << entry.owner.srcid
+                            << " / owner_ins = " << std::dec << entry.owner.inst
+                            << " / count = " << entry.count
+                            << " / is_cnt = " << entry.is_cnt << std::endl;
+                        if (r_xram_rsp_victim_inval.read())
+                            std::cout << "                           Invalidation request for address "
+                                << std::hex << r_xram_rsp_victim_nline.read()*m_words*4
+                                << " / broadcast = " << r_xram_rsp_victim_is_cnt.read() << std::endl;
+                    }
+#endif
+
+                    // If the victim is not dirty, we don't need to reuse the TRT entry for
+                    // another PUT transaction, and we can erase the TRT entry
+                    if (not r_xram_rsp_victim_dirty.read())
+                    {
+                        m_trt.erase(r_xram_rsp_trt_index.read());
+                    }
+
+                    // Next state
+                    if (r_xram_rsp_victim_dirty.read())       r_xram_rsp_fsm = XRAM_RSP_TRT_DIRTY;
+                    else if (r_xram_rsp_trt_buf.proc_read)    r_xram_rsp_fsm = XRAM_RSP_DIR_RSP;
+                    else if (r_xram_rsp_victim_inval.read())  r_xram_rsp_fsm = XRAM_RSP_INVAL;
+                    else                                     r_xram_rsp_fsm = XRAM_RSP_IDLE;
+                    break;
+                }
+                ////////////////////////
+            case XRAM_RSP_TRT_DIRTY:  // set the TRT entry (PUT to XRAM) if the victim is dirty
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_XRAM_RSP)
+                    {
+                        std::vector<data_t> data_vector;
+                        data_vector.clear();
+                        for(size_t i=0; i<m_words; i++)
+                        {
+                            data_vector.push_back(r_xram_rsp_victim_data[i].read());
+                        }
+                        m_trt.set( r_xram_rsp_trt_index.read(),
+                                false,                             // PUT
+                                r_xram_rsp_victim_nline.read(),    // line index
+                                0,                                 // unused
+                                0,                                 // unused
+                                0,                                 // unused
+                                false,                             // not proc_read
+                                0,                                 // unused
+                                0,                                 // unused
+                                std::vector<be_t>(m_words,0xF),                         
+                                data_vector);
+
+#if DEBUG_MEMC_XRAM_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " XRAM_RSP_TRT_DIRTY>"
+                                << " Set TRT entry for the put transaction"
+                                << " / address = " << (r_xram_rsp_victim_nline.read()*m_words*4) << std::endl;
+#endif
+                        if (r_xram_rsp_trt_buf.proc_read)         r_xram_rsp_fsm = XRAM_RSP_DIR_RSP;
+                        else if (r_xram_rsp_victim_inval.read())  r_xram_rsp_fsm = XRAM_RSP_INVAL;
+                        else                                     r_xram_rsp_fsm = XRAM_RSP_WRITE_DIRTY;
+                    }
+                    break;
+                }
+                //////////////////////
+            case XRAM_RSP_DIR_RSP:     // Request a response to TGT_RSP FSM
+                {
+                    if (not r_xram_rsp_to_tgt_rsp_req.read())
+                    {
+                        r_xram_rsp_to_tgt_rsp_srcid = r_xram_rsp_trt_buf.srcid;
+                        r_xram_rsp_to_tgt_rsp_trdid = r_xram_rsp_trt_buf.trdid;
+                        r_xram_rsp_to_tgt_rsp_pktid = r_xram_rsp_trt_buf.pktid;
+                        for(size_t i=0; i < m_words; i++)
+                        {
+                            r_xram_rsp_to_tgt_rsp_data[i] = r_xram_rsp_trt_buf.wdata[i];
+                        }
+                        r_xram_rsp_to_tgt_rsp_word   = r_xram_rsp_trt_buf.word_index;
+                        r_xram_rsp_to_tgt_rsp_length = r_xram_rsp_trt_buf.read_length;
+                        r_xram_rsp_to_tgt_rsp_ll_key = r_xram_rsp_trt_buf.ll_key;
+                        r_xram_rsp_to_tgt_rsp_rerror = false;
+                        r_xram_rsp_to_tgt_rsp_req    = true;
+
+                        if (r_xram_rsp_victim_inval.read())      r_xram_rsp_fsm = XRAM_RSP_INVAL;
+                        else if (r_xram_rsp_victim_dirty.read()) r_xram_rsp_fsm = XRAM_RSP_WRITE_DIRTY;
+                        else                                    r_xram_rsp_fsm = XRAM_RSP_IDLE;
+
+#if DEBUG_MEMC_XRAM_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " XRAM_RSP_DIR_RSP>"
+                                << " Request the TGT_RSP FSM to return data:"
+                                << " rsrcid = " << std::hex << r_xram_rsp_trt_buf.srcid
+                                << " / address = " << std::hex << r_xram_rsp_trt_buf.nline*m_words*4
+                                << " / nwords = " << std::dec << r_xram_rsp_trt_buf.read_length << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ////////////////////
+            case XRAM_RSP_INVAL:  // send invalidate request to CC_SEND FSM
+                {
+                    if (!r_xram_rsp_to_cc_send_multi_req.read() and
+                            !r_xram_rsp_to_cc_send_brdcast_req.read())
+                    {
+                        bool multi_req = !r_xram_rsp_victim_is_cnt.read();
+                        bool last_multi_req  = multi_req and (r_xram_rsp_victim_count.read() == 1);
+                        bool not_last_multi_req = multi_req and (r_xram_rsp_victim_count.read() != 1);
+
+                        r_xram_rsp_to_cc_send_multi_req    = last_multi_req;
+                        r_xram_rsp_to_cc_send_brdcast_req  = r_xram_rsp_victim_is_cnt.read();
+                        r_xram_rsp_to_cc_send_nline        = r_xram_rsp_victim_nline.read();
+                        r_xram_rsp_to_cc_send_trdid        = r_xram_rsp_ivt_index;
+                        xram_rsp_to_cc_send_fifo_srcid     = r_xram_rsp_victim_copy.read();
+                        xram_rsp_to_cc_send_fifo_inst      = r_xram_rsp_victim_copy_inst.read();
+                        xram_rsp_to_cc_send_fifo_put       = multi_req;
+                        r_xram_rsp_next_ptr                = r_xram_rsp_victim_ptr.read();
+
+                        if (r_xram_rsp_victim_dirty)  r_xram_rsp_fsm = XRAM_RSP_WRITE_DIRTY;
+                        else if (not_last_multi_req)  r_xram_rsp_fsm = XRAM_RSP_HEAP_REQ;
+                        else                         r_xram_rsp_fsm = XRAM_RSP_IDLE;
+
+#if DEBUG_MEMC_XRAM_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " XRAM_RSP_INVAL>"
+                                << " Send an inval request to CC_SEND FSM"
+                                << " / address = " << r_xram_rsp_victim_nline.read()*m_words*4 << std::endl;
+#endif
+                    }
+                    break;
+                }
+                //////////////////////////
+            case XRAM_RSP_WRITE_DIRTY:  // send a write request to IXR_CMD FSM
+                {
+                    if (not r_xram_rsp_to_ixr_cmd_req.read())
+                    {
+                        r_xram_rsp_to_ixr_cmd_req = true;
+                        r_xram_rsp_to_ixr_cmd_index = r_xram_rsp_trt_index.read();
+
+                        m_cpt_write_dirty++;
+
+                        bool multi_req = not r_xram_rsp_victim_is_cnt.read() and 
+                            r_xram_rsp_victim_inval.read();
+                        bool not_last_multi_req = multi_req and (r_xram_rsp_victim_count.read() != 1);
+
+                        if (not_last_multi_req)   r_xram_rsp_fsm = XRAM_RSP_HEAP_REQ;
+                        else                     r_xram_rsp_fsm = XRAM_RSP_IDLE;
+
+#if DEBUG_MEMC_XRAM_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " XRAM_RSP_WRITE_DIRTY>"
+                                << " Send the put request to IXR_CMD FSM"
+                                << " / address = " << r_xram_rsp_victim_nline.read()*m_words*4 << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////////////
+            case XRAM_RSP_HEAP_REQ:    // Get the lock to the HEAP
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_XRAM_RSP)
+                    {
+                        r_xram_rsp_fsm = XRAM_RSP_HEAP_ERASE;
+                    }
+
+#if DEBUG_MEMC_XRAM_RSP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " XRAM_RSP_HEAP_REQ>"
+                            << " Requesting HEAP lock" << std::endl;
+#endif
+                    break;
+                }
+                /////////////////////////
+            case XRAM_RSP_HEAP_ERASE: // erase the copies and send invalidations
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_XRAM_RSP)
+                    {
+                        HeapEntry entry = m_heap.read(r_xram_rsp_next_ptr.read());
+
+                        xram_rsp_to_cc_send_fifo_srcid    = entry.owner.srcid;
+                        xram_rsp_to_cc_send_fifo_inst  = entry.owner.inst;
+                        xram_rsp_to_cc_send_fifo_put   = true;
+                        if (m_xram_rsp_to_cc_send_inst_fifo.wok())
+                        {
+                            r_xram_rsp_next_ptr = entry.next;
+                            if (entry.next == r_xram_rsp_next_ptr.read())   // last copy
+                            {
+                                r_xram_rsp_to_cc_send_multi_req = true;
+                                r_xram_rsp_fsm = XRAM_RSP_HEAP_LAST;
+                            }
+                            else
+                            {
+                                r_xram_rsp_fsm = XRAM_RSP_HEAP_ERASE;
+                            }
+                        }
+                        else
+                        {
+                            r_xram_rsp_fsm = XRAM_RSP_HEAP_ERASE;
+                        }
+
+#if DEBUG_MEMC_XRAM_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " XRAM_RSP_HEAP_ERASE>"
+                                << " Erase copy:"
+                                << " srcid = " << std::hex << entry.owner.srcid
+                                << " / inst = " << std::dec << entry.owner.inst << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////////////
+            case XRAM_RSP_HEAP_LAST:  // last copy
+                {
+                    if (r_alloc_heap_fsm.read() != ALLOC_HEAP_XRAM_RSP)
+                    {
+                        std::cout << "VCI_MEM_CACHE ERROR " << name() << " XRAM_RSP_HEAP_LAST"
+                            << " bad HEAP allocation" << std::endl;
+                        exit(0);
+                    }
+                    size_t free_pointer = m_heap.next_free_ptr();
+
+                    HeapEntry last_entry;
+                    last_entry.owner.srcid    = 0;
+                    last_entry.owner.inst     = false;
+                    if (m_heap.is_full())
+                    {
+                        last_entry.next     = r_xram_rsp_next_ptr.read();
+                        m_heap.unset_full();
+                    }
+                    else
+                    {
+                        last_entry.next     = free_pointer;
+                    }
+
+                    m_heap.write_free_ptr(r_xram_rsp_victim_ptr.read());
+                    m_heap.write(r_xram_rsp_next_ptr.read(),last_entry);
+
+                    r_xram_rsp_fsm = XRAM_RSP_IDLE;
+
+#if DEBUG_MEMC_XRAM_RSP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " XRAM_RSP_HEAP_LAST>"
+                            << " Heap housekeeping" << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////////
+            case XRAM_RSP_ERROR_ERASE:  // erase TRT entry in case of error
+                {
+                    m_trt.erase(r_xram_rsp_trt_index.read());
+
+                    // Next state
+                    if (r_xram_rsp_trt_buf.proc_read)
+                    {
+                        r_xram_rsp_fsm = XRAM_RSP_ERROR_RSP;
+                    }
+                    else
+                    {
+                        // Trigger an interruption to signal a bus error from
+                        // the XRAM because a processor WRITE MISS (XRAM GET
+                        // transaction and not processor read).
+                        //
+                        // To avoid deadlocks we do not wait an error to be
+                        // acknowledged before signaling another one.
+                        // Therefore, when there is an active error, and other
+                        // errors arrive, these are not considered 
+
+                        if (!r_xram_rsp_rerror_irq.read() && r_xram_rsp_rerror_irq_enable.read()
+                                && r_xram_rsp_trt_buf.xram_read )
+                        {
+                            r_xram_rsp_rerror_irq     = true;
+                            r_xram_rsp_rerror_address = r_xram_rsp_trt_buf.nline * m_words * 4;
+                            r_xram_rsp_rerror_rsrcid  = r_xram_rsp_trt_buf.srcid;
+
+#if DEBUG_MEMC_XRAM_RSP
+                            if (m_debug)
+                                std::cout
+                                    << "  <MEMC " << name() << " XRAM_RSP_ERROR_ERASE>"
+                                    << " Triggering interrupt to signal WRITE MISS bus error"
+                                    << " / irq_enable = " << r_xram_rsp_rerror_irq_enable.read()
+                                    << " / nline = "      << r_xram_rsp_trt_buf.nline
+                                    << " / rsrcid = "     << r_xram_rsp_trt_buf.srcid
+                                    << std::endl;
+#endif
+                        }
+
+                        r_xram_rsp_fsm = XRAM_RSP_IDLE;
+                    }
+
+#if DEBUG_MEMC_XRAM_RSP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " XRAM_RSP_ERROR_ERASE>"
+                            << " Error reported by XRAM / erase the TRT entry" << std::endl;
+#endif
+                    break;
+                }
+                ////////////////////////
+            case XRAM_RSP_ERROR_RSP:     // Request an error response to TGT_RSP FSM
+                {
+                    if (!r_xram_rsp_to_tgt_rsp_req.read())
+                    {
+                        r_xram_rsp_to_tgt_rsp_srcid  = r_xram_rsp_trt_buf.srcid;
+                        r_xram_rsp_to_tgt_rsp_trdid  = r_xram_rsp_trt_buf.trdid;
+                        r_xram_rsp_to_tgt_rsp_pktid  = r_xram_rsp_trt_buf.pktid;
+                        for(size_t i=0; i < m_words; i++)
+                        {
+                            r_xram_rsp_to_tgt_rsp_data[i] = r_xram_rsp_trt_buf.wdata[i];
+                        }
+                        r_xram_rsp_to_tgt_rsp_word   = r_xram_rsp_trt_buf.word_index;
+                        r_xram_rsp_to_tgt_rsp_length = r_xram_rsp_trt_buf.read_length;
+                        r_xram_rsp_to_tgt_rsp_rerror = true;
+                        r_xram_rsp_to_tgt_rsp_req    = true;
+
+                        r_xram_rsp_fsm = XRAM_RSP_IDLE;
+
+#if DEBUG_MEMC_XRAM_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " XRAM_RSP_ERROR_RSP> Request a response error to TGT_RSP FSM:"
+                                << " srcid = " << std::dec << r_xram_rsp_trt_buf.srcid << std::endl;
+#endif
+                    }
+                    break;
+                }
+        } // end swich r_xram_rsp_fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    CLEANUP FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The CLEANUP FSM handles the cleanup request from L1 caches.
+        // It accesses the cache directory and the heap to update the list of copies.
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        switch(r_cleanup_fsm.read())
+        {
+            //////////////////
+            case CLEANUP_IDLE: // Get first DSPIN flit of the CLEANUP command
+                {
+                    if (not m_cc_receive_to_cleanup_fifo.rok()) break;
+
+                    uint64_t flit = m_cc_receive_to_cleanup_fifo.read();
+
+                    uint32_t srcid = DspinDhccpParam::dspin_get(flit, 
+                            DspinDhccpParam::CLEANUP_SRCID);
+
+                    uint8_t type = DspinDhccpParam::dspin_get(flit, 
+                            DspinDhccpParam::P2M_TYPE);
+
+                    r_cleanup_way_index = DspinDhccpParam::dspin_get(flit, 
+                            DspinDhccpParam::CLEANUP_WAY_INDEX);
+
+                    r_cleanup_nline = DspinDhccpParam::dspin_get(flit, 
+                            DspinDhccpParam::CLEANUP_NLINE_MSB) << 32;
+
+                    r_cleanup_inst  = (type == DspinDhccpParam::TYPE_CLEANUP_INST);
+                    r_cleanup_srcid = srcid;
+
+                    assert((srcid < m_initiators) and
+                            "MEMC ERROR in CLEANUP_IDLE state : illegal SRCID value");
+
+                    cc_receive_to_cleanup_fifo_get = true;
+                    r_cleanup_fsm                  = CLEANUP_GET_NLINE;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CLEANUP_IDLE> Cleanup request:" << std::hex
+                            << " owner_id = "   << srcid
+                            << " / owner_ins = "  << (type == DspinDhccpParam::TYPE_CLEANUP_INST) << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////
+            case CLEANUP_GET_NLINE:  // GET second DSPIN flit of the cleanup command
+                {
+                    if (not m_cc_receive_to_cleanup_fifo.rok()) break;
+
+                    uint64_t flit = m_cc_receive_to_cleanup_fifo.read();
+
+                    addr_t nline = r_cleanup_nline.read() |
+                        DspinDhccpParam::dspin_get(flit, DspinDhccpParam::CLEANUP_NLINE_LSB);
+
+                    cc_receive_to_cleanup_fifo_get = true;
+                    r_cleanup_nline                = nline;
+                    r_cleanup_fsm                  = CLEANUP_DIR_REQ;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC "         << name()
+                            << " CLEANUP_GET_NLINE> Cleanup request:"
+                            << " address = " << std::hex << nline * m_words * 4 << std::endl;
+#endif
+                    break;
+                }
+                /////////////////////
+            case CLEANUP_DIR_REQ:   // Get the lock to the directory
+                {
+                    if (r_alloc_dir_fsm.read() != ALLOC_DIR_CLEANUP) break;
+
+                    r_cleanup_fsm = CLEANUP_DIR_LOCK;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CLEANUP_DIR_REQ> Requesting DIR lock" << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////
+            case CLEANUP_DIR_LOCK:    // test directory status
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_DIR_LOCK: bad DIR allocation");
+
+                    // Read the directory
+                    size_t way = 0;
+                    addr_t cleanup_address = r_cleanup_nline.read() * m_words * 4;
+                    DirectoryEntry entry   = m_cache_directory.read(cleanup_address , way);
+                    r_cleanup_is_cnt       = entry.is_cnt;
+                    r_cleanup_dirty        = entry.dirty;
+                    r_cleanup_tag          = entry.tag;
+                    r_cleanup_lock         = entry.lock;
+                    r_cleanup_way          = way;
+                    r_cleanup_count        = entry.count;
+                    r_cleanup_ptr          = entry.ptr;
+                    r_cleanup_copy         = entry.owner.srcid;
+                    r_cleanup_copy_inst    = entry.owner.inst;
+
+                    if (entry.valid)      // hit : the copy must be cleared
+                    {
+                        assert( (entry.count > 0) and
+                                "MEMC ERROR in CLEANUP_DIR_LOCK state, CLEANUP on valid entry with no copies");
+
+                        if ((entry.count == 1) or (entry.is_cnt))   // no access to the heap
+                        {
+                            r_cleanup_fsm = CLEANUP_DIR_WRITE;
+                        }
+                        else                                       // access to the heap
+                        {
+                            r_cleanup_fsm = CLEANUP_HEAP_REQ;
+                        }
+                    }
+                    else                // miss : check IVT for a pending inval
+                    {
+                        r_cleanup_fsm = CLEANUP_IVT_LOCK;
+                    }
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CLEANUP_DIR_LOCK> Test directory status: "
+                            << std::hex << " address = " << cleanup_address
+                            << " / hit = "        << entry.valid
+                            << " / dir_id = "     << entry.owner.srcid
+                            << " / dir_ins = "    << entry.owner.inst
+                            << " / search_id = "  << r_cleanup_srcid.read()
+                            << " / search_ins = " << r_cleanup_inst.read()
+                            << " / count = "      << entry.count
+                            << " / is_cnt = "     << entry.is_cnt << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////
+            case CLEANUP_DIR_WRITE:      // Update the directory entry without heap access
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_DIR_LOCK: bad DIR allocation");
+
+                    size_t way         = r_cleanup_way.read();
+                    size_t set         = m_y[(addr_t)(r_cleanup_nline.read()*m_words*4)];
+                    bool   match_srcid = (r_cleanup_copy.read() == r_cleanup_srcid.read());
+                    bool   match_inst  = (r_cleanup_copy_inst.read() == r_cleanup_inst.read());
+                    bool   match       = match_srcid and match_inst;
+
+                    assert( (r_cleanup_is_cnt.read() or match) and
+                            "MEMC ERROR in CLEANUP_DIR_LOCK: illegal CLEANUP on valid entry");
+
+                    // update the cache directory (for the copies)
+                    DirectoryEntry entry;
+                    entry.valid       = true;
+                    entry.is_cnt      = r_cleanup_is_cnt.read();
+                    entry.dirty       = r_cleanup_dirty.read();
+                    entry.tag         = r_cleanup_tag.read();
+                    entry.lock        = r_cleanup_lock.read();
+                    entry.ptr         = r_cleanup_ptr.read();
+                    entry.count       = r_cleanup_count.read() - 1;
+                    entry.owner.srcid = 0;
+                    entry.owner.inst  = 0;
+
+                    m_cache_directory.write(set, way, entry);
+
+                    r_cleanup_fsm = CLEANUP_SEND_CLACK;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CLEANUP_DIR_WRITE> Update directory:"
+                            << std::hex << " address = "   << r_cleanup_nline.read() * m_words * 4
+                            << " / dir_id = "  << entry.owner.srcid
+                            << " / dir_ins = " << entry.owner.inst
+                            << " / count = "   << entry.count
+                            << " / is_cnt = "  << entry.is_cnt << std::endl;
+#endif
+
+                    break;
+                }
+                //////////////////////
+            case CLEANUP_HEAP_REQ:         // get the lock to the HEAP directory
+                {
+                    if (r_alloc_heap_fsm.read() != ALLOC_HEAP_CLEANUP) break;
+
+                    r_cleanup_fsm = CLEANUP_HEAP_LOCK;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CLEANUP_HEAP_REQ> HEAP lock acquired " << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////
+            case CLEANUP_HEAP_LOCK:      // two cases are handled in this state :
+                // 1. the matching copy is directly in the directory
+                // 2. the matching copy is the first copy in the heap
+                {
+                    assert( (r_alloc_heap_fsm.read() == ALLOC_HEAP_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_HEAP_LOCK state: bad HEAP allocation");
+
+                    size_t way            = r_cleanup_way.read();
+                    size_t set            = m_y[(addr_t)(r_cleanup_nline.read() *m_words*4)];
+
+                    HeapEntry heap_entry  = m_heap.read(r_cleanup_ptr.read());
+                    bool last             = (heap_entry.next == r_cleanup_ptr.read());
+
+                    // match_dir computation
+                    bool match_dir_srcid  = (r_cleanup_copy.read()      == r_cleanup_srcid.read());
+                    bool match_dir_inst   = (r_cleanup_copy_inst.read() == r_cleanup_inst.read());
+                    bool match_dir        = match_dir_srcid  and match_dir_inst;
+
+                    // match_heap computation
+                    bool match_heap_srcid = (heap_entry.owner.srcid == r_cleanup_srcid.read());
+                    bool match_heap_inst  = (heap_entry.owner.inst  == r_cleanup_inst.read());
+                    bool match_heap       = match_heap_srcid and match_heap_inst;
+
+                    r_cleanup_prev_ptr    = r_cleanup_ptr.read();
+                    r_cleanup_prev_srcid  = heap_entry.owner.srcid;
+                    r_cleanup_prev_inst   = heap_entry.owner.inst;
+
+                    assert( (not last or match_dir or match_heap) and
+                            "MEMC ERROR in CLEANUP_HEAP_LOCK state: hit but no copy found");
+
+                    assert( (not match_dir or not match_heap) and
+                            "MEMC ERROR in CLEANUP_HEAP_LOCK state: two matching copies found");
+
+                    DirectoryEntry dir_entry;
+                    dir_entry.valid          = true;
+                    dir_entry.is_cnt         = r_cleanup_is_cnt.read();
+                    dir_entry.dirty          = r_cleanup_dirty.read();
+                    dir_entry.tag            = r_cleanup_tag.read();
+                    dir_entry.lock           = r_cleanup_lock.read();
+                    dir_entry.count          = r_cleanup_count.read()-1;
+
+                    // the matching copy is registered in the directory and
+                    // it must be replaced by the first copy registered in
+                    // the heap. The corresponding entry must be freed
+                    if (match_dir)
+                    {
+                        dir_entry.ptr            = heap_entry.next;
+                        dir_entry.owner.srcid    = heap_entry.owner.srcid;
+                        dir_entry.owner.inst     = heap_entry.owner.inst;
+                        r_cleanup_next_ptr       = r_cleanup_ptr.read();
+                        r_cleanup_fsm            = CLEANUP_HEAP_FREE;
+                    }
+
+                    // the matching copy is the first copy in the heap
+                    // It must be freed and the copy registered in directory
+                    // must point to the next copy in heap
+                    else if (match_heap)
+                    {
+                        dir_entry.ptr            = heap_entry.next;
+                        dir_entry.owner.srcid    = r_cleanup_copy.read();
+                        dir_entry.owner.inst     = r_cleanup_copy_inst.read();
+                        r_cleanup_next_ptr       = r_cleanup_ptr.read();
+                        r_cleanup_fsm            = CLEANUP_HEAP_FREE;
+                    }
+
+                    // The matching copy is in the heap, but is not the first copy
+                    // The directory entry must be modified to decrement count
+                    else
+                    {
+                        dir_entry.ptr            = r_cleanup_ptr.read();
+                        dir_entry.owner.srcid    = r_cleanup_copy.read();
+                        dir_entry.owner.inst     = r_cleanup_copy_inst.read();
+                        r_cleanup_next_ptr       = heap_entry.next;
+                        r_cleanup_fsm            = CLEANUP_HEAP_SEARCH;
+                    }
+
+                    m_cache_directory.write(set,way,dir_entry);
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CLEANUP_HEAP_LOCK> Checks matching:"
+                            << " address = "      << r_cleanup_nline.read() * m_words * 4
+                            << " / dir_id = "     << r_cleanup_copy.read()
+                            << " / dir_ins = "    << r_cleanup_copy_inst.read()
+                            << " / heap_id = "    << heap_entry.owner.srcid
+                            << " / heap_ins = "   << heap_entry.owner.inst
+                            << " / search_id = "  << r_cleanup_srcid.read()
+                            << " / search_ins = " << r_cleanup_inst.read() << std::endl;
+#endif
+                    break;
+                }
+                ////////////////////////
+            case CLEANUP_HEAP_SEARCH:     // This state is handling the case where the copy
+                // is in the heap, but not the first in linked list
+                {
+                    assert( (r_alloc_heap_fsm.read() == ALLOC_HEAP_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_HEAP_LOCK state: bad HEAP allocation");
+
+                    HeapEntry heap_entry  = m_heap.read(r_cleanup_next_ptr.read());
+
+                    bool last             = (heap_entry.next        == r_cleanup_next_ptr.read());
+                    bool match_heap_srcid = (heap_entry.owner.srcid == r_cleanup_srcid.read());
+                    bool match_heap_inst  = (heap_entry.owner.inst  == r_cleanup_inst.read());
+                    bool match_heap       = match_heap_srcid and match_heap_inst;
+
+                    assert( (not last or match_heap) and
+                            "MEMC ERROR in CLEANUP_HEAP_SEARCH state: no copy found");
+
+                    // the matching copy must be removed
+                    if (match_heap)
+                    {
+                        // re-use ressources
+                        r_cleanup_ptr = heap_entry.next;
+                        r_cleanup_fsm = CLEANUP_HEAP_CLEAN;
+                    }
+                    // test the next in the linked list
+                    else
+                    {
+                        r_cleanup_prev_ptr      = r_cleanup_next_ptr.read();
+                        r_cleanup_prev_srcid    = heap_entry.owner.srcid;
+                        r_cleanup_prev_inst     = heap_entry.owner.inst;
+                        r_cleanup_next_ptr      = heap_entry.next;
+                        r_cleanup_fsm           = CLEANUP_HEAP_SEARCH;
+                    }
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                    {
+                        if (not match_heap)
+                        {
+                            std::cout
+                                << "  <MEMC " << name()
+                                << " CLEANUP_HEAP_SEARCH> Matching copy not found, search next:"
+                                << std::endl;
+                        }
+                        else
+                        {
+                            std::cout
+                                << "  <MEMC " << name()
+                                << " CLEANUP_HEAP_SEARCH> Matching copy found:"
+                                << std::endl;
+                        }
+                        std::cout
+                            << " address = "      << r_cleanup_nline.read() * m_words * 4
+                            << " / heap_id = "    << heap_entry.owner.srcid
+                            << " / heap_ins = "   << heap_entry.owner.inst
+                            << " / search_id = "  << r_cleanup_srcid.read()
+                            << " / search_ins = " << r_cleanup_inst.read()
+                            << " / last = "       << last
+                            << std::endl;
+                    }
+#endif
+                    break;
+                }
+                ////////////////////////
+            case CLEANUP_HEAP_CLEAN:    // remove a copy in the linked list
+                {
+                    assert( (r_alloc_heap_fsm.read() == ALLOC_HEAP_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_HEAP_LOCK state: bad HEAP allocation");
+
+                    HeapEntry heap_entry;
+                    heap_entry.owner.srcid    = r_cleanup_prev_srcid.read();
+                    heap_entry.owner.inst     = r_cleanup_prev_inst.read();
+                    bool last = (r_cleanup_next_ptr.read() == r_cleanup_ptr.read());
+
+                    if (last)     // this is the last entry of the list of copies
+                    {
+                        heap_entry.next = r_cleanup_prev_ptr.read();
+                    }
+                    else          // this is not the last entry
+                    {
+                        heap_entry.next = r_cleanup_ptr.read();
+                    }
+
+                    m_heap.write(r_cleanup_prev_ptr.read(), heap_entry);
+
+                    r_cleanup_fsm = CLEANUP_HEAP_FREE;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CLEANUP_HEAP_SEARCH>"
+                            << " Remove the copy in the linked list" << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////
+            case CLEANUP_HEAP_FREE:   // The heap entry pointed by r_cleanup_next_ptr is freed
+                // and becomes the head of the list of free entries
+                {
+                    assert( (r_alloc_heap_fsm.read() == ALLOC_HEAP_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_HEAP_LOCK state: bad HEAP allocation");
+
+                    HeapEntry heap_entry;
+                    heap_entry.owner.srcid    = 0;
+                    heap_entry.owner.inst     = false;
+
+                    if (m_heap.is_full())
+                    {
+                        heap_entry.next = r_cleanup_next_ptr.read();
+                    }
+                    else
+                    {
+                        heap_entry.next = m_heap.next_free_ptr();
+                    }
+
+                    m_heap.write(r_cleanup_next_ptr.read(),heap_entry);
+                    m_heap.write_free_ptr(r_cleanup_next_ptr.read());
+                    m_heap.unset_full();
+
+                    r_cleanup_fsm = CLEANUP_SEND_CLACK;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CLEANUP_HEAP_FREE>"
+                            << " Update the list of free entries" << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////
+            case CLEANUP_IVT_LOCK:   // get the lock protecting the IVT to search a pending
+                // invalidate transaction matching the cleanup 
+                {
+                    if (r_alloc_ivt_fsm.read() != ALLOC_IVT_CLEANUP) break;
+
+                    size_t index = 0;
+                    bool   match_inval;
+
+                    match_inval = m_ivt.search_inval(r_cleanup_nline.read(), index);
+
+                    if (not match_inval )     // no pending inval in IVT
+                    {
+                        r_cleanup_fsm = CLEANUP_SEND_CLACK;
+
+#if DEBUG_MEMC_CLEANUP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " CLEANUP_IVT_LOCK>" 
+                                << " Unexpected cleanup with no corresponding IVT entry:"
+                                << " address = " << std::hex << (r_cleanup_nline.read()*4*m_words) << std::endl;
+#endif
+                    }
+                    else                     // pending inval in IVT
+                    {
+                        r_cleanup_write_srcid = m_ivt.srcid(index);
+                        r_cleanup_write_trdid = m_ivt.trdid(index);
+                        r_cleanup_write_pktid = m_ivt.pktid(index);
+                        r_cleanup_need_rsp    = m_ivt.need_rsp(index);
+                        r_cleanup_need_ack    = m_ivt.need_ack(index);
+                        r_cleanup_index       = index;
+                        r_cleanup_fsm         = CLEANUP_IVT_DECREMENT;
+
+#if DEBUG_MEMC_CLEANUP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " CLEANUP_IVT_LOCK>"
+                                << " Cleanup matching pending invalidate transaction on IVT:"
+                                << " address = " << std::hex << (r_cleanup_nline.read()*m_words*4) 
+                                << " / ivt_entry = " << index << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ///////////////////////////
+            case CLEANUP_IVT_DECREMENT: // decrement response counter in IVT matching entry
+                // and test if last 
+                {
+                    assert( (r_alloc_ivt_fsm.read() == ALLOC_IVT_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_IVT_DECREMENT state: Bad IVT allocation");
+
+                    size_t count = 0;
+                    m_ivt.decrement(r_cleanup_index.read(), count);
+
+                    if (count == 0)  r_cleanup_fsm = CLEANUP_IVT_CLEAR;
+                    else            r_cleanup_fsm = CLEANUP_SEND_CLACK ;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CLEANUP_IVT_DECREMENT>"
+                            << " Decrement response counter in IVT:"
+                            << " IVT_index = " << r_cleanup_index.read()
+                            << " / rsp_count = " << count << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////
+            case CLEANUP_IVT_CLEAR:    // Clear IVT entry 
+                // Acknowledge CONFIG FSM if required 
+                {
+                    assert( (r_alloc_ivt_fsm.read() == ALLOC_IVT_CLEANUP) and
+                            "MEMC ERROR in CLEANUP_IVT_CLEAR state : bad IVT allocation");
+
+                    m_ivt.clear(r_cleanup_index.read());
+
+                    if (r_cleanup_need_ack.read())
+                    {
+                        assert( (r_config_rsp_lines.read() > 0) and
+                                "MEMC ERROR in CLEANUP_IVT_CLEAR state");
+
+                        config_rsp_lines_cleanup_decr = true;
+                    }
+
+                    if (r_cleanup_need_rsp.read()) r_cleanup_fsm = CLEANUP_WRITE_RSP;
+                    else                           r_cleanup_fsm = CLEANUP_SEND_CLACK;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC "      << name()
+                            << " CLEANUP_IVT_CLEAR> Clear entry in IVT:"
+                            << " IVT_index = " << r_cleanup_index.read() << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////
+            case CLEANUP_WRITE_RSP:    // response to a previous write on the direct network
+                // wait if pending request to the TGT_RSP FSM
+                {
+                    if (r_cleanup_to_tgt_rsp_req.read()) break;
+
+                    // no pending request
+                    r_cleanup_to_tgt_rsp_req     = true;
+                    r_cleanup_to_tgt_rsp_srcid   = r_cleanup_write_srcid.read();
+                    r_cleanup_to_tgt_rsp_trdid   = r_cleanup_write_trdid.read();
+                    r_cleanup_to_tgt_rsp_pktid   = r_cleanup_write_pktid.read();
+                    r_cleanup_fsm                = CLEANUP_SEND_CLACK;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CLEANUP_WRITE_RSP>"
+                            << " Send a response to a previous write request: "
+                            << " rsrcid = "   << std::hex << r_cleanup_write_srcid.read()
+                            << " / rtrdid = " << r_cleanup_write_trdid.read()
+                            << " / rpktid = " << r_cleanup_write_pktid.read() << std::endl;
+#endif
+                    break;
+                }
+                ////////////////////////
+            case CLEANUP_SEND_CLACK:  // acknowledgement to a cleanup command
+                // on the coherence CLACK network.
+                {
+                    if (not p_dspin_clack.read) break;
+
+                    r_cleanup_fsm = CLEANUP_IDLE;
+
+#if DEBUG_MEMC_CLEANUP
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CLEANUP_SEND_CLACK> Send the response to a cleanup request:"
+                            << " address = "   << std::hex << r_cleanup_nline.read()*m_words*4
+                            << " / way = "   << std::dec << r_cleanup_way.read()
+                            << " / srcid = " << std::hex << r_cleanup_srcid.read() 
+                            << std::endl;
+#endif
+                    break;
+                }
+        } // end switch cleanup fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    CAS FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The CAS FSM handles the CAS (Compare And Swap) atomic commands.
+        //
+        // This command contains two or four flits:
+        // - In case of 32 bits atomic access, the first flit contains the value read
+        // by a previous READ instruction, the second flit contains the value to be writen.
+        // - In case of 64 bits atomic access, the 2 first flits contains the value read
+        // by a previous READ instruction, the 2 next flits contains the value to be writen.
+        //
+        // The target address is cachable. If it is replicated in other L1 caches
+        // than the writer, a coherence operation is done.
+        //
+        // It access the directory to check hit / miss.
+        // - In case of miss, the CAS FSM must register a GET transaction in TRT.
+        //   If a read transaction to the XRAM for this line already exists,
+        //   or if the transaction table is full, it goes to the WAIT state
+        //   to release the locks and try again. When the GET transaction has been
+        //   launched, it goes to the WAIT state and try again.
+        //   The CAS request is not consumed in the FIFO until a HIT is obtained.
+        // - In case of hit...
+        ///////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "cas_fsm" << std::endl;
+
+        switch(r_cas_fsm.read())
+        {
+            ////////////
+            case CAS_IDLE:     // fill the local rdata buffers
+                {
+                    if (m_cmd_cas_addr_fifo.rok())
+                    {
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " CAS_IDLE> CAS command: " << std::hex
+                                << " srcid = " <<  std::dec << m_cmd_cas_srcid_fifo.read()
+                                << " addr = " << std::hex << m_cmd_cas_addr_fifo.read()
+                                << " wdata = " << m_cmd_cas_wdata_fifo.read()
+                                << " eop = " << std::dec << m_cmd_cas_eop_fifo.read()
+                                << " cpt  = " << std::dec << r_cas_cpt.read() << std::endl;
+#endif
+                        if (m_cmd_cas_eop_fifo.read())
+                        {
+                            r_cas_fsm = CAS_DIR_REQ;
+                        }
+                        else  // we keep the last word in the FIFO
+                        {
+                            cmd_cas_fifo_get = true;
+                        }
+
+                        // We fill the two buffers
+                        if (r_cas_cpt.read() < 2)    // 32 bits access
+                            r_cas_rdata[r_cas_cpt.read()] = m_cmd_cas_wdata_fifo.read();
+
+                        if ((r_cas_cpt.read() == 1) and m_cmd_cas_eop_fifo.read())
+                            r_cas_wdata = m_cmd_cas_wdata_fifo.read();
+
+                        assert( (r_cas_cpt.read() <= 3) and  // no more than 4 flits...
+                                "MEMC ERROR in CAS_IDLE state: illegal CAS command");
+
+                        if (r_cas_cpt.read() ==2)
+                            r_cas_wdata = m_cmd_cas_wdata_fifo.read();
+
+                        r_cas_cpt = r_cas_cpt.read() +1;
+                    }
+                    break;
+                }
+                /////////////////
+            case CAS_DIR_REQ:
+                {
+                    if (r_alloc_dir_fsm.read() == ALLOC_DIR_CAS)
+                    {
+                        r_cas_fsm = CAS_DIR_LOCK;
+                    }
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CAS_DIR_REQ> Requesting DIR lock " << std::endl;
+#endif
+                    break;
+                }
+                /////////////////
+            case CAS_DIR_LOCK:  // Read the directory
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CAS) and
+                            "MEMC ERROR in CAS_DIR_LOCK: Bad DIR allocation");
+
+                    size_t way = 0;
+                    DirectoryEntry entry(m_cache_directory.read(m_cmd_cas_addr_fifo.read(), way));
+
+                    r_cas_is_cnt     = entry.is_cnt;
+                    r_cas_dirty      = entry.dirty;
+                    r_cas_tag        = entry.tag;
+                    r_cas_way        = way;
+                    r_cas_copy       = entry.owner.srcid;
+                    r_cas_copy_inst  = entry.owner.inst;
+                    r_cas_ptr        = entry.ptr;
+                    r_cas_count      = entry.count;
+
+                    if (entry.valid)  r_cas_fsm = CAS_DIR_HIT_READ;
+                    else             r_cas_fsm = CAS_MISS_TRT_LOCK;
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CAS_DIR_LOCK> Directory acces"
+                            << " / address = " << std::hex << m_cmd_cas_addr_fifo.read()
+                            << " / hit = " << std::dec << entry.valid
+                            << " / count = " << entry.count
+                            << " / is_cnt = " << entry.is_cnt << std::endl;
+#endif
+
+                    break;
+                }
+                /////////////////////
+            case CAS_DIR_HIT_READ:  // update directory for lock and dirty bit
+                // and check data change in cache
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CAS) and
+                            "MEMC ERROR in CAS_DIR_HIT_READ: Bad DIR allocation");
+
+                    size_t way  = r_cas_way.read();
+                    size_t set  = m_y[(addr_t)(m_cmd_cas_addr_fifo.read())];
+
+                    // update directory (lock & dirty bits)
+                    DirectoryEntry entry;
+                    entry.valid          = true;
+                    entry.is_cnt         = r_cas_is_cnt.read();
+                    entry.dirty          = true;
+                    entry.lock           = true;
+                    entry.tag            = r_cas_tag.read();
+                    entry.owner.srcid    = r_cas_copy.read();
+                    entry.owner.inst     = r_cas_copy_inst.read();
+                    entry.count          = r_cas_count.read();
+                    entry.ptr            = r_cas_ptr.read();
+
+                    m_cache_directory.write(set, way, entry);
+
+                    // Store data from cache in buffer to do the comparison in next state
+                    m_cache_data.read_line(way, set, r_cas_data);
+
+                    r_cas_fsm = CAS_DIR_HIT_COMPARE;
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CAS_DIR_HIT_READ> Read data from "
+                            << " cache and store it in buffer" << std::endl;
+#endif
+                    break;
+                }
+                ////////////////////////
+            case CAS_DIR_HIT_COMPARE:
+                {
+                    size_t word = m_x[(addr_t)(m_cmd_cas_addr_fifo.read())];
+
+                    // check data change
+                    bool ok = (r_cas_rdata[0].read() == r_cas_data[word].read());
+
+                    if (r_cas_cpt.read() == 4)     // 64 bits CAS
+                        ok &= (r_cas_rdata[1] == r_cas_data[word+1]);
+
+                    // to avoid livelock, force the atomic access to fail pseudo-randomly
+                    bool forced_fail = ((r_cas_lfsr % (64) == 0) and RANDOMIZE_CAS);
+                    r_cas_lfsr = (r_cas_lfsr >> 1) ^ ((- (r_cas_lfsr & 1)) & 0xd0000001);
+
+                    if (ok and not forced_fail) r_cas_fsm = CAS_DIR_HIT_WRITE; 
+                    else                       r_cas_fsm = CAS_RSP_FAIL; 
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CAS_DIR_HIT_COMPARE> Compare old and new data"
+                            << " / expected value = " << std::hex << r_cas_rdata[0].read()
+                            << " / actual value = "   << std::hex << r_cas_data[word].read()
+                            << " / forced_fail = "    << std::dec << forced_fail << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////
+            case CAS_DIR_HIT_WRITE:    // test if a CC transaction is required
+                // write data in cache if no CC request
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CAS) and
+                            "MEMC ERROR in CAS_DIR_HIT_WRITE: Bad DIR allocation");
+
+                    // The CAS is a success => sw access to the llsc_global_table
+                    m_llsc_table.sw(m_cmd_cas_addr_fifo.read(), m_cmd_cas_addr_fifo.read());
+
+                    // test coherence request
+                    if (r_cas_count.read())   // replicated line
+                    {
+                        if (r_cas_is_cnt.read())
+                        {
+                            r_cas_fsm = CAS_BC_TRT_LOCK;    // broadcast invalidate required
+
+#if DEBUG_MEMC_CAS
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " CAS_DIR_HIT_WRITE>"
+                                    << " Broacast Inval required" 
+                                    << " / copies = " << r_cas_count.read() << std::endl;
+#endif
+                        }
+                        else if (not r_cas_to_cc_send_multi_req.read() and
+                                not r_cas_to_cc_send_brdcast_req.read())
+                        {
+                            r_cas_fsm = CAS_UPT_LOCK;       // multi update required
+
+#if DEBUG_MEMC_CAS
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " CAS_DIR_HIT_WRITE>"
+                                    << " Multi Inval required" 
+                                    << " / copies = " << r_cas_count.read() << std::endl;
+#endif
+                        }
+                        else
+                        {
+                            r_cas_fsm = CAS_WAIT;
+
+#if DEBUG_MEMC_CAS
+                            if (m_debug)
+                                std::cout << "  <MEMC " << name() << " CAS_DIR_HIT_WRITE>"
+                                    << " CC_SEND FSM busy: release all locks and retry" << std::endl;
+#endif
+                        }
+                    }
+                    else                    // no copies
+                    {
+                        size_t way  = r_cas_way.read();
+                        size_t set  = m_y[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                        size_t word = m_x[(addr_t)(m_cmd_cas_addr_fifo.read())];
+
+                        // cache update
+                        m_cache_data.write(way, set, word, r_cas_wdata.read());
+                        if (r_cas_cpt.read() == 4)
+                            m_cache_data.write(way, set, word+1, m_cmd_cas_wdata_fifo.read());
+
+                        r_cas_fsm = CAS_RSP_SUCCESS;
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " CAS_DIR_HIT_WRITE> Update cache:"
+                                << " way = " << std::dec << way
+                                << " / set = " << set
+                                << " / word = " << word
+                                << " / value = " << r_cas_wdata.read()
+                                << " / count = " << r_cas_count.read()
+                                << " / global_llsc_table access" << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////
+            case CAS_UPT_LOCK:  // try to register the transaction in UPT
+                // and write data in cache if successful registration
+                // releases locks to retry later if UPT full
+                {
+                    if (r_alloc_upt_fsm.read() == ALLOC_UPT_CAS)
+                    {
+                        bool        wok        = false;
+                        size_t      index      = 0;
+                        size_t      srcid      = m_cmd_cas_srcid_fifo.read();
+                        size_t      trdid      = m_cmd_cas_trdid_fifo.read();
+                        size_t      pktid      = m_cmd_cas_pktid_fifo.read();
+                        addr_t      nline      = m_nline[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                        size_t      nb_copies  = r_cas_count.read();
+
+                        wok = m_upt.set( true,    // it's an update transaction
+                                false,   // it's not a broadcast
+                                true,    // response required  
+                                false,   // no acknowledge required
+                                srcid,
+                                trdid,
+                                pktid,
+                                nline,
+                                nb_copies,
+                                index);
+                        if (wok)   // coherence transaction registered in UPT
+                        {
+                            // cache update
+                            size_t way  = r_cas_way.read();
+                            size_t set  = m_y[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                            size_t word = m_x[(addr_t)(m_cmd_cas_addr_fifo.read())];
+
+                            m_cache_data.write(way, set, word, r_cas_wdata.read());
+                            if (r_cas_cpt.read() ==4)
+                                m_cache_data.write(way, set, word+1, m_cmd_cas_wdata_fifo.read());
+
+                            r_cas_upt_index = index;
+                            r_cas_fsm = CAS_UPT_HEAP_LOCK;
+                        }
+                        else       //  releases the locks protecting UPT and DIR UPT full
+                        {
+                            r_cas_fsm = CAS_WAIT;
+                        }
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " CAS_UPT_LOCK> Register multi-update transaction in UPT"
+                                << " / wok = " << wok
+                                << " / address  = " << std::hex << nline*m_words*4
+                                << " / count = " << nb_copies << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////
+            case CAS_WAIT:   // release all locks and retry from beginning
+                {
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CAS_WAIT> Release all locks" << std::endl;
+#endif
+                    r_cas_fsm = CAS_DIR_REQ;
+                    break;
+                }
+                //////////////////////
+            case CAS_UPT_HEAP_LOCK:  // lock the heap
+                {
+                    if (r_alloc_heap_fsm.read() == ALLOC_HEAP_CAS)
+                    {
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                        {
+                            std::cout << "  <MEMC " << name()
+                                << " CAS_UPT_HEAP_LOCK> Get access to the heap" << std::endl;
+                        }
+#endif
+                        r_cas_fsm = CAS_UPT_REQ;
+                    }
+                    break;
+                }
+                ////////////////
+            case CAS_UPT_REQ:  // send a first update request to CC_SEND FSM
+                {
+                    assert((r_alloc_heap_fsm.read() == ALLOC_HEAP_CAS) and
+                            "VCI_MEM_CACHE ERROR : bad HEAP allocation");
+
+                    if (!r_cas_to_cc_send_multi_req.read() and !r_cas_to_cc_send_brdcast_req.read())
+                    {
+                        r_cas_to_cc_send_brdcast_req  = false;
+                        r_cas_to_cc_send_trdid        = r_cas_upt_index.read();
+                        r_cas_to_cc_send_nline        = m_nline[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                        r_cas_to_cc_send_index        = m_x[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                        r_cas_to_cc_send_wdata        = r_cas_wdata.read();
+
+                        if (r_cas_cpt.read() == 4)
+                        {
+                            r_cas_to_cc_send_is_long    = true;
+                            r_cas_to_cc_send_wdata_high = m_cmd_cas_wdata_fifo.read();
+                        }
+                        else
+                        {
+                            r_cas_to_cc_send_is_long    = false;
+                            r_cas_to_cc_send_wdata_high = 0;
+                        }
+
+                        // We put the first copy in the fifo
+                        cas_to_cc_send_fifo_put     = true;
+                        cas_to_cc_send_fifo_inst    = r_cas_copy_inst.read();
+                        cas_to_cc_send_fifo_srcid   = r_cas_copy.read();
+                        if (r_cas_count.read() == 1)  // one single copy
+                        {
+                            r_cas_fsm = CAS_IDLE;   // Response will be sent after receiving
+                            // update responses
+                            cmd_cas_fifo_get            = true;
+                            r_cas_to_cc_send_multi_req = true;
+                            r_cas_cpt = 0;
+                        }
+                        else      // several copies
+                        {
+                            r_cas_fsm = CAS_UPT_NEXT;
+                        }
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                        {
+                            std::cout << "  <MEMC " << name() << " CAS_UPT_REQ> Send the first update request to CC_SEND FSM "
+                                << " / address = " << std::hex << m_cmd_cas_addr_fifo.read()
+                                << " / wdata = " << std::hex << r_cas_wdata.read()
+                                << " / srcid = " << std::dec << r_cas_copy.read()
+                                << " / inst = " << std::dec << r_cas_copy_inst.read() << std::endl;
+                        }
+#endif
+                    }
+                    break;
+                }
+                /////////////////
+            case CAS_UPT_NEXT:     // send a multi-update request to CC_SEND FSM
+                {
+                    assert((r_alloc_heap_fsm.read() == ALLOC_HEAP_CAS)
+                            and "VCI_MEM_CACHE ERROR : bad HEAP allocation");
+
+                    HeapEntry entry = m_heap.read(r_cas_ptr.read());
+                    cas_to_cc_send_fifo_srcid    = entry.owner.srcid;
+                    cas_to_cc_send_fifo_inst     = entry.owner.inst;
+                    cas_to_cc_send_fifo_put = true;
+
+                    if (m_cas_to_cc_send_inst_fifo.wok())   // request accepted by CC_SEND FSM
+                    {
+                        r_cas_ptr = entry.next;
+                        if (entry.next == r_cas_ptr.read())    // last copy
+                        {
+                            r_cas_to_cc_send_multi_req = true;
+                            r_cas_fsm = CAS_IDLE;   // Response will be sent after receiving
+                            // all update responses
+                            cmd_cas_fifo_get = true;
+                            r_cas_cpt        = 0;
+                        }
+                    }
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                    {
+                        std::cout << "  <MEMC " << name() << " CAS_UPT_NEXT> Send the next update request to CC_SEND FSM "
+                            << " / address = " << std::hex << m_cmd_cas_addr_fifo.read()
+                            << " / wdata = " << std::hex << r_cas_wdata.read()
+                            << " / srcid = " << std::dec << entry.owner.srcid
+                            << " / inst = " << std::dec << entry.owner.inst << std::endl;
+                    }
+#endif
+                    break;
+                }
+                /////////////////////
+            case CAS_BC_TRT_LOCK:      // get TRT lock to check TRT not full 
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CAS) and
+                            "MEMC ERROR in CAS_BC_TRT_LOCK state: Bas DIR allocation");
+
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_CAS)
+                    {
+                        size_t wok_index = 0;
+                        bool   wok       = !m_trt.full(wok_index);
+                        if (wok )
+                        {
+                            r_cas_trt_index = wok_index;
+                            r_cas_fsm       = CAS_BC_IVT_LOCK;
+                        }
+                        else
+                        {
+                            r_cas_fsm       = CAS_WAIT;
+                        }
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " CAS_BC_TRT_LOCK> Check TRT"
+                                << " : wok = " << wok << " / index = " << wok_index << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////////
+            case CAS_BC_IVT_LOCK:  // get IVT lock and register BC transaction in IVT
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CAS) and
+                            "MEMC ERROR in CAS_BC_IVT_LOCK state: Bas DIR allocation");
+
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_CAS) and
+                            "MEMC ERROR in CAS_BC_IVT_LOCK state: Bas TRT allocation");
+
+                    if (r_alloc_ivt_fsm.read() == ALLOC_IVT_CAS )
+                    {
+                        // register broadcast inval transaction in IVT
+                        bool        wok       = false;
+                        size_t      index     = 0;
+                        size_t      srcid     = m_cmd_cas_srcid_fifo.read();
+                        size_t      trdid     = m_cmd_cas_trdid_fifo.read();
+                        size_t      pktid     = m_cmd_cas_pktid_fifo.read();
+                        addr_t      nline     = m_nline[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                        size_t      nb_copies = r_cas_count.read();
+
+                        wok = m_ivt.set( false,  // it's an inval transaction
+                                true,   // it's a broadcast
+                                true,   // response required
+                                false,  // no acknowledge required
+                                srcid,
+                                trdid,
+                                pktid,
+                                nline,
+                                nb_copies,
+                                index);
+#if DEBUG_MEMC_CAS
+                        if (m_debug and wok )
+                            std::cout << "  <MEMC " << name() << " CAS_BC_IVT_LOCK> Register broadcast inval in IVT"
+                                << " / copies = " << r_cas_count.read() << std::endl;
+#endif
+                        r_cas_upt_index = index;
+                        if (wok ) r_cas_fsm = CAS_BC_DIR_INVAL;   
+                        else      r_cas_fsm = CAS_WAIT;
+                    }
+                    break;
+                }
+                //////////////////////
+            case CAS_BC_DIR_INVAL:  // Register PUT transaction in TRT, 
+                // and inval the DIR entry
+                {
+                    assert( (r_alloc_dir_fsm.read() == ALLOC_DIR_CAS) and
+                            "MEMC ERROR in CAS_BC_DIR_INVAL state: Bad DIR allocation");
+
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_CAS) and
+                            "MEMC ERROR in CAS_BC_DIR_INVAL state: Bad TRT allocation");
+
+                    assert( (r_alloc_ivt_fsm.read() == ALLOC_IVT_CAS) and
+                            "MEMC ERROR in CAS_BC_DIR_INVAL state: Bad IVT allocation");
+
+                    // set TRT
+                    std::vector<data_t> data_vector;
+                    data_vector.clear();
+                    size_t word = m_x[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                    for(size_t i=0; i<m_words; i++)
+                    {
+                        if (i == word)                                        // first modified word
+                            data_vector.push_back( r_cas_wdata.read());     
+                        else if ((i == word+1) and (r_cas_cpt.read() == 4))   // second modified word
+                            data_vector.push_back( m_cmd_cas_wdata_fifo.read());
+                        else                                                 // unmodified words
+                            data_vector.push_back( r_cas_data[i].read());
+                    }
+                    m_trt.set( r_cas_trt_index.read(),
+                            false,    // PUT request 
+                            m_nline[(addr_t)(m_cmd_cas_addr_fifo.read())],
+                            0,
+                            0,
+                            0,
+                            false,    // not a processor read
+                            0,
+                            0,
+                            std::vector<be_t> (m_words,0),
+                            data_vector );
+
+                    // invalidate directory entry
+                    DirectoryEntry entry;
+                    entry.valid         = false;
+                    entry.dirty         = false;
+                    entry.tag           = 0;
+                    entry.is_cnt        = false;
+                    entry.lock          = false;
+                    entry.count         = 0;
+                    entry.owner.srcid   = 0;
+                    entry.owner.inst    = false;
+                    entry.ptr           = 0;
+                    size_t set          = m_y[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                    size_t way          = r_cas_way.read();
+
+                    m_cache_directory.write(set, way, entry);
+
+                    r_cas_fsm = CAS_BC_CC_SEND;
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CAS_BC_DIR_INVAL> Inval DIR & register in TRT:"
+                            << " address = " << m_cmd_cas_addr_fifo.read() << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////
+            case CAS_BC_CC_SEND:  // Request the broadcast inval to CC_SEND FSM
+                {
+                    if (not r_cas_to_cc_send_multi_req.read() and
+                            not r_cas_to_cc_send_brdcast_req.read())
+                    {
+                        r_cas_to_cc_send_multi_req    = false;
+                        r_cas_to_cc_send_brdcast_req  = true;
+                        r_cas_to_cc_send_trdid        = r_cas_upt_index.read();
+                        r_cas_to_cc_send_nline        = m_nline[(addr_t)(m_cmd_cas_addr_fifo.read())];
+                        r_cas_to_cc_send_index        = 0;
+                        r_cas_to_cc_send_wdata        = 0;
+
+                        r_cas_fsm = CAS_BC_XRAM_REQ;
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " CAS_BC_CC_SEND> Post a broadcast request to CC_SEND FSM" << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ////////////////////
+            case CAS_BC_XRAM_REQ: // request the IXR FSM to start a PUT transaction
+                {
+                    if (not r_cas_to_ixr_cmd_req.read())
+                    {
+                        r_cas_to_ixr_cmd_req     = true;
+                        r_cas_to_ixr_cmd_index   = r_cas_trt_index.read();
+                        r_cas_fsm                = CAS_IDLE;
+                        cmd_cas_fifo_get         = true;
+                        r_cas_cpt                = 0;
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " CAS_BC_XRAM_REQ> Request a PUT transaction to IXR_CMD FSM" << std::hex
+                                << " / address = " << (addr_t) m_cmd_cas_addr_fifo.read()
+                                << " / trt_index = " << r_cas_trt_index.read() << std::endl;
+#endif
+                    }
+                    break;
+                }
+                /////////////////
+            case CAS_RSP_FAIL:  // request TGT_RSP FSM to send a failure response
+                {
+                    if (not r_cas_to_tgt_rsp_req.read())
+                    {
+                        cmd_cas_fifo_get       = true;
+                        r_cas_cpt              = 0;
+                        r_cas_to_tgt_rsp_req   = true;
+                        r_cas_to_tgt_rsp_data  = 1;
+                        r_cas_to_tgt_rsp_srcid = m_cmd_cas_srcid_fifo.read();
+                        r_cas_to_tgt_rsp_trdid = m_cmd_cas_trdid_fifo.read();
+                        r_cas_to_tgt_rsp_pktid = m_cmd_cas_pktid_fifo.read();
+                        r_cas_fsm              = CAS_IDLE;
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " CAS_RSP_FAIL> Request TGT_RSP to send a failure response" << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ////////////////////
+            case CAS_RSP_SUCCESS:  // request TGT_RSP FSM to send a success response
+                {
+                    if (not r_cas_to_tgt_rsp_req.read())
+                    {
+                        cmd_cas_fifo_get       = true;
+                        r_cas_cpt              = 0;
+                        r_cas_to_tgt_rsp_req   = true;
+                        r_cas_to_tgt_rsp_data  = 0;
+                        r_cas_to_tgt_rsp_srcid = m_cmd_cas_srcid_fifo.read();
+                        r_cas_to_tgt_rsp_trdid = m_cmd_cas_trdid_fifo.read();
+                        r_cas_to_tgt_rsp_pktid = m_cmd_cas_pktid_fifo.read();
+                        r_cas_fsm              = CAS_IDLE;
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name()
+                                << " CAS_RSP_SUCCESS> Request TGT_RSP to send a success response" << std::endl;
+#endif
+                    }
+                    break;
+                }
+                ///////////////////////
+            case CAS_MISS_TRT_LOCK:         // cache miss : request access to transaction Table
+                {
+                    if (r_alloc_trt_fsm.read() == ALLOC_TRT_CAS)
+                    {
+                        size_t   index = 0;
+                        bool hit_read  = m_trt.hit_read(
+                                m_nline[(addr_t) m_cmd_cas_addr_fifo.read()],index);
+                        bool hit_write = m_trt.hit_write(
+                                m_nline[(addr_t) m_cmd_cas_addr_fifo.read()]);
+                        bool wok       = not m_trt.full(index);
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " CAS_MISS_TRT_LOCK> Check TRT state"
+                                << " / hit_read = "  << hit_read
+                                << " / hit_write = " << hit_write
+                                << " / wok = " << wok
+                                << " / index = " << index << std::endl;
+#endif
+
+                        if (hit_read or !wok or hit_write)    // missing line already requested or TRT full
+                        {
+                            r_cas_fsm = CAS_WAIT;
+                        }
+                        else
+                        {
+                            r_cas_trt_index = index;
+                            r_cas_fsm       = CAS_MISS_TRT_SET;
+                        }
+                    }
+                    break;
+                }
+                //////////////////////
+            case CAS_MISS_TRT_SET: // register the GET transaction in TRT
+                {
+                    assert( (r_alloc_trt_fsm.read() == ALLOC_TRT_CAS) and
+                            "MEMC ERROR in CAS_MISS_TRT_SET state: Bad TRT allocation");
+
+                    std::vector<be_t> be_vector;
+                    std::vector<data_t> data_vector;
+                    be_vector.clear();
+                    data_vector.clear();
+                    for(size_t i=0; i<m_words; i++)
+                    {
+                        be_vector.push_back(0);
+                        data_vector.push_back(0);
+                    }
+
+                    m_trt.set( r_cas_trt_index.read(),
+                            true,     // GET 
+                            m_nline[(addr_t) m_cmd_cas_addr_fifo.read()],
+                            m_cmd_cas_srcid_fifo.read(),
+                            m_cmd_cas_trdid_fifo.read(),
+                            m_cmd_cas_pktid_fifo.read(),
+                            false,    // write request from processor
+                            0,
+                            0,
+                            std::vector<be_t>(m_words,0),                         
+                            std::vector<data_t>(m_words,0));                         
+
+                    r_cas_fsm = CAS_MISS_XRAM_REQ;
+
+#if DEBUG_MEMC_CAS
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name() << " CAS_MISS_TRT_SET> Register GET transaction in TRT" 
+                            << " / address = " << std::hex << (addr_t)m_cmd_cas_addr_fifo.read()
+                            << " / trt_index = " << std::dec << r_cas_trt_index.read() << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////
+            case CAS_MISS_XRAM_REQ:  // request the IXR_CMD FSM a GET request
+                {
+                    if (not r_cas_to_ixr_cmd_req.read())
+                    {
+                        r_cas_to_ixr_cmd_req        = true;
+                        r_cas_to_ixr_cmd_index      = r_cas_trt_index.read();
+                        r_cas_fsm                   = CAS_WAIT;
+
+#if DEBUG_MEMC_CAS
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " CAS_MISS_XRAM_REQ> Request a GET transaction"
+                                << " / address = " << std::hex << (addr_t) m_cmd_cas_addr_fifo.read()
+                                << " / trt_index = " << std::dec << r_cas_trt_index.read() << std::endl;
+#endif
+                    }
+                    break;
+                }
+        } // end switch r_cas_fsm
+
+
+        //////////////////////////////////////////////////////////////////////////////
+        //    CC_SEND FSM
+        //////////////////////////////////////////////////////////////////////////////
+        // The CC_SEND fsm controls the DSPIN initiator port on the coherence
+        // network, used to update or invalidate cache lines in L1 caches.
+        //
+        // It implements a round-robin priority between the four possible client FSMs
+        //     XRAM_RSP > CAS > WRITE > CONFIG 
+        //
+        // Each FSM can request the next services:
+        // - r_xram_rsp_to_cc_send_multi_req : multi-inval
+        //   r_xram_rsp_to_cc_send_brdcast_req : broadcast-inval
+        // - r_write_to_cc_send_multi_req : multi-update
+        //   r_write_to_cc_send_brdcast_req : broadcast-inval
+        // - r_cas_to_cc_send_multi_req : multi-update
+        //   r_cas_to_cc_send_brdcast_req : broadcast-inval
+        // - r_config_to_cc_send_multi_req : multi-inval
+        //   r_config_to_cc_send_brdcast_req : broadcast-inval
+        //   
+        // An inval request is a double DSPIN flit command containing:
+        // 1. the index of the line to be invalidated.
+        //
+        // An update request is a multi-flit DSPIN command containing:
+        // 1. the index of the cache line to be updated.
+        // 2. the index of the first modified word in the line.
+        // 3. the data to update
+        ///////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "cc_send_fsm" << std::endl;
+
+        switch(r_cc_send_fsm.read())
+        {
+            /////////////////////////
+            case CC_SEND_CONFIG_IDLE:    // XRAM_RSP FSM has highest priority
+                {
+                    // XRAM_RSP
+                    if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
+                            r_xram_rsp_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_xram_rsp_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_BRDCAST_HEADER;
+                        break;
+                    }
+                    // CAS
+                    if (m_cas_to_cc_send_inst_fifo.rok() or
+                            r_cas_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_UPDT_HEADER;
+                        break;
+                    }
+                    if (r_cas_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_BRDCAST_HEADER;
+                        break;
+                    }
+                    // WRITE
+                    if (m_write_to_cc_send_inst_fifo.rok() or
+                            r_write_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_UPDT_HEADER;
+                        break;
+                    }
+                    if (r_write_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_BRDCAST_HEADER;
+                        break;
+                    }
+                    // CONFIG
+                    if (r_config_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_config_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_BRDCAST_HEADER;
+                        break;
+                    }
+                    break;
+                }
+                ////////////////////////
+            case CC_SEND_WRITE_IDLE:     // CONFIG FSM has highest priority
+                {
+                    // CONFIG
+                    if (r_config_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_config_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_BRDCAST_HEADER;
+                        break;
+                    }
+                    // XRAM_RSP
+                    if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
+                            r_xram_rsp_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_xram_rsp_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_BRDCAST_HEADER;
+                        break;
+                    }
+                    // CAS
+                    if (m_cas_to_cc_send_inst_fifo.rok() or
+                            r_cas_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_UPDT_HEADER;
+                        break;
+                    }
+                    if (r_cas_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_BRDCAST_HEADER;
+                        break;
+                    }
+                    // WRITE
+                    if (m_write_to_cc_send_inst_fifo.rok() or
+                            r_write_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_UPDT_HEADER;
+                        break;
+                    }
+                    if (r_write_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_BRDCAST_HEADER;
+                        break;
+                    }
+                    break;
+                }
+                ///////////////////////////
+            case CC_SEND_XRAM_RSP_IDLE:   // CAS FSM has highest priority
+                {
+                    // CAS
+                    if (m_cas_to_cc_send_inst_fifo.rok() or
+                            r_cas_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_UPDT_HEADER;
+                        break;
+                    }
+                    if (r_cas_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_BRDCAST_HEADER;
+                        break;
+                    }
+                    // WRITE
+                    if (m_write_to_cc_send_inst_fifo.rok() or
+                            r_write_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_UPDT_HEADER;
+                        break;
+                    }
+
+                    if (r_write_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_BRDCAST_HEADER;
+                        break;
+                    }
+                    // CONFIG
+                    if (r_config_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_config_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_BRDCAST_HEADER;
+                        break;
+                    }
+                    // XRAM_RSP
+                    if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
+                            r_xram_rsp_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_xram_rsp_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_BRDCAST_HEADER;
+                        break;
+                    }
+                    break;
+                }
+                //////////////////////
+            case CC_SEND_CAS_IDLE:   // CLEANUP FSM has highest priority
+                {
+                    if (m_write_to_cc_send_inst_fifo.rok() or
+                            r_write_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_UPDT_HEADER;
+                        break;
+                    }
+                    if (r_write_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_WRITE_BRDCAST_HEADER;
+                        break;
+                    }
+                    // CONFIG
+                    if (r_config_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_config_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CONFIG_BRDCAST_HEADER;
+                        break;
+                    }
+                    if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
+                            r_xram_rsp_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_INVAL_HEADER;
+                        break;
+                    }
+                    if (r_xram_rsp_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_BRDCAST_HEADER;
+                        break;
+                    }
+                    if (m_cas_to_cc_send_inst_fifo.rok() or
+                            r_cas_to_cc_send_multi_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_UPDT_HEADER;
+                        break;
+                    }
+                    if (r_cas_to_cc_send_brdcast_req.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_BRDCAST_HEADER;
+                        break;
+                    }
+                    break;
+                }
+                /////////////////////////////////
+            case CC_SEND_CONFIG_INVAL_HEADER:   // send first flit multi-inval (from CONFIG FSM)
+                {
+                    if (m_config_to_cc_send_inst_fifo.rok())
+                    {
+                        if (not p_dspin_m2p.read) break;
+                        // <Activity Counters>
+                        if (is_local_req(m_config_to_cc_send_srcid_fifo.read()))
+                        {
+                            m_cpt_minval_local++;
+                        }
+                        else
+                        {
+                            m_cpt_minval_remote++;
+                            m_cpt_minval_cost += req_distance(m_config_to_cc_send_srcid_fifo.read());
+                        }
+                        // </Activity Counters>
+                        r_cc_send_fsm = CC_SEND_CONFIG_INVAL_NLINE;
+                        break;
+                    }
+                    if (r_config_to_cc_send_multi_req.read()) r_config_to_cc_send_multi_req = false;
+                    // <Activity Counters>
+                    m_cpt_minval++;
+                    // </Activity Counters>
+                    r_cc_send_fsm = CC_SEND_CONFIG_IDLE;
+                    break;
+                }
+                ////////////////////////////////
+            case CC_SEND_CONFIG_INVAL_NLINE:    // send second flit multi-inval (from CONFIG FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    config_to_cc_send_fifo_get = true;
+                    r_cc_send_fsm = CC_SEND_CONFIG_INVAL_HEADER;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_CONFIG_INVAL_NLINE> multi-inval for line "
+                            << std::hex << r_config_to_cc_send_nline.read() << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////////////////
+            case CC_SEND_CONFIG_BRDCAST_HEADER:   // send first flit BC-inval (from CONFIG FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    r_cc_send_fsm = CC_SEND_CONFIG_BRDCAST_NLINE;
+                    break;
+                }
+                //////////////////////////////////
+            case CC_SEND_CONFIG_BRDCAST_NLINE:    // send second flit BC-inval (from CONFIG FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    // <Activity Counters>
+                    m_cpt_binval++;
+                    // </Activity Counters>
+                    r_config_to_cc_send_brdcast_req = false;
+                    r_cc_send_fsm = CC_SEND_CONFIG_IDLE;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_CONFIG_BRDCAST_NLINE> BC-Inval for line "
+                            << std::hex << r_config_to_cc_send_nline.read() << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////////////////
+            case CC_SEND_XRAM_RSP_INVAL_HEADER:   // send first flit multi-inval (from XRAM_RSP FSM)
+                {
+                    if (m_xram_rsp_to_cc_send_inst_fifo.rok())
+                    {
+                        if (not p_dspin_m2p.read) break;
+                        // <Activity Counters>
+                        if (is_local_req(m_xram_rsp_to_cc_send_srcid_fifo.read()))
+                        {
+                            m_cpt_minval_local++;
+                        }
+                        else
+                        {
+                            m_cpt_minval_remote++;
+                            m_cpt_minval_cost += req_distance(m_xram_rsp_to_cc_send_srcid_fifo.read());
+                        }
+                        // </Activity Counters>
+                        r_cc_send_fsm = CC_SEND_XRAM_RSP_INVAL_NLINE;
+                        break;
+                    }
+                    if (r_xram_rsp_to_cc_send_multi_req.read()) r_xram_rsp_to_cc_send_multi_req = false;
+                    // <Activity Counters>
+                    m_cpt_minval++;
+                    // </Activity Counters>
+                    r_cc_send_fsm = CC_SEND_XRAM_RSP_IDLE;
+                    break;
+                }
+                //////////////////////////////////
+            case CC_SEND_XRAM_RSP_INVAL_NLINE:   // send second flit multi-inval (from XRAM_RSP FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    xram_rsp_to_cc_send_fifo_get = true;
+                    r_cc_send_fsm = CC_SEND_XRAM_RSP_INVAL_HEADER;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_XRAM_RSP_INVAL_NLINE> Multicast-Inval for line "
+                            << std::hex << r_xram_rsp_to_cc_send_nline.read() << std::endl;
+#endif
+                    break;
+                }
+                /////////////////////////////////////
+            case CC_SEND_XRAM_RSP_BRDCAST_HEADER:  // send first flit broadcast-inval (from XRAM_RSP FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    r_cc_send_fsm = CC_SEND_XRAM_RSP_BRDCAST_NLINE;
+                    break;
+                }
+                ////////////////////////////////////
+            case CC_SEND_XRAM_RSP_BRDCAST_NLINE:   // send second flit broadcast-inval (from XRAM_RSP FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    // <Activity Counters>
+                    m_cpt_binval++;
+                    // </Activity Counters>
+                    r_xram_rsp_to_cc_send_brdcast_req = false;
+                    r_cc_send_fsm = CC_SEND_XRAM_RSP_IDLE;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_XRAM_RSP_BRDCAST_NLINE> BC-Inval for line "
+                            << std::hex << r_xram_rsp_to_cc_send_nline.read() << std::endl;
+#endif
+                    break;
+                }
+                //////////////////////////////////
+            case CC_SEND_WRITE_BRDCAST_HEADER:   // send first flit broadcast-inval (from WRITE FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    r_cc_send_fsm = CC_SEND_WRITE_BRDCAST_NLINE;
+                    break;
+                }
+                /////////////////////////////////
+            case CC_SEND_WRITE_BRDCAST_NLINE:   // send second flit broadcast-inval (from WRITE FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+
+                    // <Activity Counters>
+                    m_cpt_binval++;
+                    m_cpt_write_broadcast++;
+                    // </Activity Counters>
+
+                    r_write_to_cc_send_brdcast_req = false;
+                    r_cc_send_fsm = CC_SEND_WRITE_IDLE;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_WRITE_BRDCAST_NLINE> BC-Inval for line "
+                            << std::hex << r_write_to_cc_send_nline.read() << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////////////
+            case CC_SEND_WRITE_UPDT_HEADER:   // send first flit for a multi-update (from WRITE FSM)
+                {
+                    if (m_write_to_cc_send_inst_fifo.rok())
+                    {
+                        if (not p_dspin_m2p.read) break;
+                        // <Activity Counters>
+                        if (is_local_req(m_write_to_cc_send_srcid_fifo.read()))
+                        {
+                            m_cpt_update_local++;
+                        }
+                        else
+                        {
+                            m_cpt_update_remote++;
+                            m_cpt_update_cost += req_distance(m_write_to_cc_send_srcid_fifo.read());
+                        }
+                        // </Activity Counters>
+
+                        r_cc_send_fsm = CC_SEND_WRITE_UPDT_NLINE;
+                        break;
+                    }
+
+                    if (r_write_to_cc_send_multi_req.read())
+                    {
+                        r_write_to_cc_send_multi_req = false;
+                    }
+
+                    // <Activity Counters>
+                    m_cpt_update++;
+                    // </Activity Counters>
+                    r_cc_send_fsm = CC_SEND_WRITE_IDLE;
+                    break;
+                }
+                //////////////////////////////
+            case CC_SEND_WRITE_UPDT_NLINE:   // send second flit for a multi-update (from WRITE FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+
+                    r_cc_send_cpt = 0;
+                    r_cc_send_fsm = CC_SEND_WRITE_UPDT_DATA;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_WRITE_UPDT_NLINE> Multicast-Update for address "
+                            << r_write_to_cc_send_nline.read()*m_words*4 << std::endl;
+#endif
+                    break;
+                }
+                /////////////////////////////
+            case CC_SEND_WRITE_UPDT_DATA:   // send data flits for multi-update (from WRITE FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    if (r_cc_send_cpt.read() == r_write_to_cc_send_count.read())
+                    {
+                        write_to_cc_send_fifo_get = true;
+                        r_cc_send_fsm = CC_SEND_WRITE_UPDT_HEADER;
+                        break;
+                    }
+
+                    r_cc_send_cpt = r_cc_send_cpt.read() + 1;
+                    break;
+                }
+                ////////////////////////////////
+            case CC_SEND_CAS_BRDCAST_HEADER:   // send first flit  broadcast-inval (from CAS FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    r_cc_send_fsm = CC_SEND_CAS_BRDCAST_NLINE;
+                    break;
+                }
+                ///////////////////////////////
+            case CC_SEND_CAS_BRDCAST_NLINE:   // send second flit broadcast-inval (from CAS FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    // <Activity Counters>
+                    m_cpt_binval++;
+                    // </Activity Counters>
+
+                    r_cas_to_cc_send_brdcast_req = false;
+                    r_cc_send_fsm = CC_SEND_CAS_IDLE;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_CAS_BRDCAST_NLINE> Broadcast-Inval for address: "
+                            << r_cas_to_cc_send_nline.read()*m_words*4 << std::endl;
+#endif
+                    break;
+                }
+                /////////////////////////////
+            case CC_SEND_CAS_UPDT_HEADER:   // send first flit for a multi-update (from CAS FSM)
+                {
+                    if (m_cas_to_cc_send_inst_fifo.rok())
+                    {
+                        if (not p_dspin_m2p.read) break;
+                        // <Activity Counters>
+                        if (is_local_req(m_cas_to_cc_send_srcid_fifo.read()))
+                        {
+                            m_cpt_update_local++;
+                        }
+                        else
+                        {
+                            m_cpt_update_remote++;
+                            m_cpt_update_cost += req_distance(m_cas_to_cc_send_srcid_fifo.read());
+                        }
+                        // </Activity Counters>
+                        r_cc_send_fsm = CC_SEND_CAS_UPDT_NLINE;
+                        break;
+                    }
+
+                    // no more packets to send for the multi-update
+                    if (r_cas_to_cc_send_multi_req.read())
+                    {
+                        r_cas_to_cc_send_multi_req = false;
+                    }
+
+                    // <Activity Counters>
+                    m_cpt_update++;
+                    // </Activity Counters>
+                    r_cc_send_fsm = CC_SEND_CAS_IDLE;
+                    break;
+                }
+                ////////////////////////////
+            case CC_SEND_CAS_UPDT_NLINE:   // send second flit for a multi-update (from CAS FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    r_cc_send_cpt = 0;
+                    r_cc_send_fsm = CC_SEND_CAS_UPDT_DATA;
+
+#if DEBUG_MEMC_CC_SEND
+                    if (m_debug)
+                        std::cout << "  <MEMC " << name()
+                            << " CC_SEND_CAS_UPDT_NLINE> Multicast-Update for address "
+                            << r_cas_to_cc_send_nline.read()*m_words*4 << std::endl;
+#endif
+                    break;
+                }
+                ///////////////////////////
+            case CC_SEND_CAS_UPDT_DATA:   // send first data for a multi-update (from CAS FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+
+                    if (r_cas_to_cc_send_is_long.read())
+                    {
+                        r_cc_send_fsm = CC_SEND_CAS_UPDT_DATA_HIGH;
+                        break;
+                    }
+
+                    cas_to_cc_send_fifo_get = true;
+                    r_cc_send_fsm = CC_SEND_CAS_UPDT_HEADER;
+                    break;
+                }
+                ////////////////////////////////
+            case CC_SEND_CAS_UPDT_DATA_HIGH:   // send second data for multi-update (from CAS FSM)
+                {
+                    if (not p_dspin_m2p.read) break;
+                    cas_to_cc_send_fifo_get = true;
+                    r_cc_send_fsm = CC_SEND_CAS_UPDT_HEADER;
+                    break;
+                }
+        }
+        // end switch r_cc_send_fsm
+
+        //////////////////////////////////////////////////////////////////////////////
+        //    CC_RECEIVE FSM
+        //////////////////////////////////////////////////////////////////////////////
+        // The CC_RECEIVE fsm controls the DSPIN target port on the coherence
+        // network.
+        //////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "cc_receive_fsm" << std::endl;
+
+        switch(r_cc_receive_fsm.read())
+        {
+            /////////////////////
+            case CC_RECEIVE_IDLE:
+                {
+                    if (not p_dspin_p2m.write) break;
+
+                    uint8_t type =
+                        DspinDhccpParam::dspin_get(
+                                p_dspin_p2m.data.read(),
+                                DspinDhccpParam::P2M_TYPE);
+
+                    if ((type == DspinDhccpParam::TYPE_CLEANUP_DATA) or
+                            (type == DspinDhccpParam::TYPE_CLEANUP_INST))
+                    {
+                        r_cc_receive_fsm = CC_RECEIVE_CLEANUP;
+                        break;
+                    }
+
+                    if (type == DspinDhccpParam::TYPE_MULTI_ACK)
+                    {
+                        r_cc_receive_fsm = CC_RECEIVE_MULTI_ACK;
+                        break;
+                    }
+
+                    assert(false and
+                            "VCI_MEM_CACHE ERROR in CC_RECEIVE : "
+                            "Illegal type in coherence request");
+
+                    break;
+                }
+                ////////////////////////
+            case CC_RECEIVE_CLEANUP:
+                {
+                    // write first CLEANUP flit in CC_RECEIVE to CLEANUP fifo
+
+                    if (not p_dspin_p2m.write or not m_cc_receive_to_cleanup_fifo.wok())
+                        break;
+
+                    assert(not p_dspin_p2m.eop.read() and
+                            "VCI_MEM_CACHE ERROR in CC_RECEIVE : "
+                            "CLEANUP command must have two flits");
+
+                    cc_receive_to_cleanup_fifo_put = true;
+                    r_cc_receive_fsm               = CC_RECEIVE_CLEANUP_EOP;
+
+                    // <Activity Counters>
+                    uint32_t srcid = DspinDhccpParam::dspin_get(
+                            p_dspin_p2m.data.read(), 
+                            DspinDhccpParam::CLEANUP_SRCID);
+
+                    if (is_local_req(srcid)) {
+                        m_cpt_cleanup_local++;
+                    }
+                    else {
+                        m_cpt_cleanup_remote++;
+                        m_cpt_cleanup_cost += req_distance(srcid);
+                    }
+                    // </Activity Counters>
+
+                    break;
+                }
+                ////////////////////////////
+            case CC_RECEIVE_CLEANUP_EOP:
+                {
+                    // write second CLEANUP flit in CC_RECEIVE to CLEANUP fifo
+
+                    if (not p_dspin_p2m.write or not m_cc_receive_to_cleanup_fifo.wok())
+                        break;
+
+                    assert(p_dspin_p2m.eop.read() and
+                            "VCI_MEM_CACHE ERROR in CC_RECEIVE : "
+                            "CLEANUP command must have two flits");
+
+                    cc_receive_to_cleanup_fifo_put = true;
+                    r_cc_receive_fsm               = CC_RECEIVE_IDLE;
+
+                    break;
+                }
+
+                //////////////////////////
+            case CC_RECEIVE_MULTI_ACK:
+                {
+                    // write MULTI_ACK flit in CC_RECEIVE to MULTI_ACK fifo
+
+                    // wait for a WOK in the CC_RECEIVE to MULTI_ACK fifo
+                    if (not p_dspin_p2m.write or not m_cc_receive_to_multi_ack_fifo.wok())
+                        break;
+
+                    assert(p_dspin_p2m.eop.read() and
+                            "VCI_MEM_CACHE ERROR in CC_RECEIVE : "
+                            "MULTI_ACK command must have one flit");
+
+                    cc_receive_to_multi_ack_fifo_put = true;
+                    r_cc_receive_fsm                 = CC_RECEIVE_IDLE;
+                    break;
+                }
+        }
+
+        //////////////////////////////////////////////////////////////////////////
+        //    TGT_RSP FSM
+        //////////////////////////////////////////////////////////////////////////
+        // The TGT_RSP fsm sends the responses on the VCI target port
+        // with a round robin priority between eigth requests :
+        // - r_config_to_tgt_rsp_req
+        // - r_tgt_cmd_to_tgt_rsp_req
+        // - r_read_to_tgt_rsp_req
+        // - r_write_to_tgt_rsp_req
+        // - r_cas_to_tgt_rsp_req
+        // - r_cleanup_to_tgt_rsp_req
+        // - r_xram_rsp_to_tgt_rsp_req
+        // - r_multi_ack_to_tgt_rsp_req
+        //
+        // The ordering is :
+        //   config >tgt_cmd > read > write > cas > xram > multi_ack > cleanup
+        //////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "tgt_rsp_fsm" << std::endl;
+
+        switch(r_tgt_rsp_fsm.read())
+        {
+            /////////////////////////
+            case TGT_RSP_CONFIG_IDLE:  // tgt_cmd requests have the highest priority
+                {
+                    if (r_tgt_cmd_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    else if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    else if (r_write_to_tgt_rsp_req)     r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    else if (r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS;
+                    else if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    else if (r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
+                    else if (r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    else if (r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    break;
+                }
+                //////////////////////////
+            case TGT_RSP_TGT_CMD_IDLE: // read requests have the highest priority
+                {
+                    if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    else if (r_write_to_tgt_rsp_req)     r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    else if (r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS;
+                    else if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    else if (r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
+                    else if (r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    else if (r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    else if (r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    break;
+                }
+                ///////////////////////
+            case TGT_RSP_READ_IDLE: // write requests have the highest priority
+                {
+                    if (r_write_to_tgt_rsp_req)          r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    else if (r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS;
+                    else if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    else if (r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
+                    else if (r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    else if (r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    else if (r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    else if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    break;
+                }
+                ////////////////////////
+            case TGT_RSP_WRITE_IDLE: // cas requests have the highest priority
+                {
+                    if (r_cas_to_tgt_rsp_req)            r_tgt_rsp_fsm = TGT_RSP_CAS;
+                    else if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    else if (r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
+                    else if (r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    else if (r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    else if (r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    else if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    else if (r_write_to_tgt_rsp_req)     r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    break;
+                }
+                ///////////////////////
+            case TGT_RSP_CAS_IDLE: // xram_rsp requests have the highest priority
+                {
+                    if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    else if (r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK   ;
+                    else if (r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    else if (r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    else if (r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    else if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    else if (r_write_to_tgt_rsp_req)     r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    else if (r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS  ;
+                    break;
+                }
+                ///////////////////////
+            case TGT_RSP_XRAM_IDLE: // multi ack requests have the highest priority
+                {
+
+                    if (r_multi_ack_to_tgt_rsp_req)      r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK   ;
+                    else if (r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    else if (r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    else if (r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    else if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    else if (r_write_to_tgt_rsp_req)     r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    else if (r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS  ;
+                    else if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    break;
+                }
+                ////////////////////////////
+            case TGT_RSP_MULTI_ACK_IDLE: // cleanup requests have the highest priority
+                {
+                    if (r_cleanup_to_tgt_rsp_req)        r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    else if (r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    else if (r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    else if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    else if (r_write_to_tgt_rsp_req)     r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    else if (r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS  ;
+                    else if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    else if (r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
+                    break;
+                }
+                //////////////////////////
+            case TGT_RSP_CLEANUP_IDLE: // tgt cmd requests have the highest priority
+                {
+                    if (r_config_to_tgt_rsp_req)         r_tgt_rsp_fsm = TGT_RSP_CONFIG;
+                    else if (r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
+                    else if (r_read_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_READ;
+                        r_tgt_rsp_cpt = r_read_to_tgt_rsp_word.read();
+                    }
+                    else if (r_write_to_tgt_rsp_req)     r_tgt_rsp_fsm = TGT_RSP_WRITE;
+                    else if (r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS  ;
+                    else if (r_xram_rsp_to_tgt_rsp_req)
+                    {
+                        r_tgt_rsp_fsm = TGT_RSP_XRAM;
+                        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
+                    }
+                    else if (r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK   ;
+                    else if (r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
+                    break;
+                }
+                ////////////////////
+            case TGT_RSP_CONFIG:  // send the response for a config transaction
+                {
+                    if (p_vci_tgt.rspack )
+                    {
+                        r_config_to_tgt_rsp_req = false;
+                        r_tgt_rsp_fsm           = TGT_RSP_CONFIG_IDLE;
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug )
+                        {
+                            std::cout
+                                << "  <MEMC " << name()
+                                << " TGT_RSP_CONFIG>  Config transaction completed response"
+                                << " / rsrcid = " << std::hex << r_config_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_config_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_config_to_tgt_rsp_pktid.read()
+                                << std::endl;
+                        }
+#endif
+                    }
+                    break;
+                }
+                /////////////////////
+            case TGT_RSP_TGT_CMD: // send the response for a configuration access
+                {
+                    if (p_vci_tgt.rspack )
+                    {
+                        r_tgt_cmd_to_tgt_rsp_req = false;
+                        r_tgt_rsp_fsm            = TGT_RSP_TGT_CMD_IDLE;
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug )
+                        {
+                            std::cout
+                                << "  <MEMC " << name()
+                                << " TGT_RSP_TGT_CMD> Send response for a configuration access"
+                                << " / rsrcid = " << std::hex << r_tgt_cmd_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_tgt_cmd_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_tgt_cmd_to_tgt_rsp_pktid.read()
+                                << " / error = " << r_tgt_cmd_to_tgt_rsp_error.read()
+                                << std::endl;
+                        }
+#endif
+                    }
+                    break;
+                }
+                //////////////////
+            case TGT_RSP_READ:    // send the response to a read
+                {
+                    if (p_vci_tgt.rspack )
+                    {
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug )
+                        {
+                            std::cout
+                                << "  <MEMC " << name() << " TGT_RSP_READ> Read response"
+                                << " / rsrcid = " << std::hex << r_read_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_read_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_read_to_tgt_rsp_pktid.read()
+                                << " / rdata = " << r_read_to_tgt_rsp_data[r_tgt_rsp_cpt.read()].read()
+                                << " / cpt = " << std::dec << r_tgt_rsp_cpt.read() << std::endl;
+                        }
+#endif
+
+                        uint32_t last_word_idx = r_read_to_tgt_rsp_word.read() +
+                            r_read_to_tgt_rsp_length.read() - 1;
+                        bool     is_last_word  = (r_tgt_rsp_cpt.read() == last_word_idx);
+                        bool     is_ll         = ((r_read_to_tgt_rsp_pktid.read() & 0x7) == TYPE_LL);
+
+                        if ((is_last_word              and not is_ll) or
+                                (r_tgt_rsp_key_sent.read() and is_ll))
+                        {
+                            // Last word in case of READ or second flit in case if LL
+                            r_tgt_rsp_key_sent    = false;
+                            r_read_to_tgt_rsp_req = false;
+                            r_tgt_rsp_fsm         = TGT_RSP_READ_IDLE;
+                        }
+                        else
+                        {
+                            if (is_ll)
+                            {
+                                r_tgt_rsp_key_sent = true;                // Send second flit of ll
+                            }
+                            else
+                            {
+                                r_tgt_rsp_cpt = r_tgt_rsp_cpt.read() + 1; // Send next word of read
+                            }
+                        }
+                    }
+                    break;
+                }
+                //////////////////
+            case TGT_RSP_WRITE:   // send the write acknowledge
+                {
+                    if (p_vci_tgt.rspack)
+                    {
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " TGT_RSP_WRITE> Write response"
+                                << " / rsrcid = " << std::hex << r_write_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_write_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_write_to_tgt_rsp_pktid.read() << std::endl;
+#endif
+                        r_tgt_rsp_fsm = TGT_RSP_WRITE_IDLE;
+                        r_write_to_tgt_rsp_req = false;
+                    }
+                    break;
+                }
+                /////////////////////
+            case TGT_RSP_CLEANUP:   // pas clair pour moi (AG)
+                {
+                    if (p_vci_tgt.rspack)
+                    {
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " TGT_RSP_CLEANUP> Cleanup response"
+                                << " / rsrcid = " << std::hex << r_cleanup_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_cleanup_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_cleanup_to_tgt_rsp_pktid.read() << std::endl;
+#endif
+                        r_tgt_rsp_fsm = TGT_RSP_CLEANUP_IDLE;
+                        r_cleanup_to_tgt_rsp_req = false;
+                    }
+                    break;
+                }
+                /////////////////
+            case TGT_RSP_CAS:    // send one atomic word response
+                {
+                    if (p_vci_tgt.rspack)
+                    {
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " TGT_RSP_CAS> CAS response"
+                                << " / rsrcid = " << std::hex << r_cas_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_cas_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_cas_to_tgt_rsp_pktid.read() << std::endl;
+#endif
+                        r_tgt_rsp_fsm = TGT_RSP_CAS_IDLE;
+                        r_cas_to_tgt_rsp_req = false;
+                    }
+                    break;
+                }
+                //////////////////
+            case TGT_RSP_XRAM:    // send the response after XRAM access
+                {
+                    if (p_vci_tgt.rspack )
+                    {
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug )
+                            std::cout << "  <MEMC " << name() << " TGT_RSP_XRAM> Response following XRAM access"
+                                << " / rsrcid = " << std::hex << r_xram_rsp_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_xram_rsp_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_xram_rsp_to_tgt_rsp_pktid.read()
+                                << " / rdata = " << r_xram_rsp_to_tgt_rsp_data[r_tgt_rsp_cpt.read()].read()
+                                << " / cpt = " << std::dec << r_tgt_rsp_cpt.read() << std::endl;
+#endif
+                        uint32_t last_word_idx = r_xram_rsp_to_tgt_rsp_word.read() +
+                            r_xram_rsp_to_tgt_rsp_length.read() - 1;
+                        bool     is_last_word  = (r_tgt_rsp_cpt.read() == last_word_idx);
+                        bool     is_ll         = ((r_xram_rsp_to_tgt_rsp_pktid.read() & 0x7) == TYPE_LL);
+                        bool     is_error      = r_xram_rsp_to_tgt_rsp_rerror.read();
+
+                        if (((is_last_word or is_error) and not is_ll) or
+                                (r_tgt_rsp_key_sent.read() and     is_ll))
+                        {
+                            // Last word sent in case of READ or second flit sent in case if LL
+                            r_tgt_rsp_key_sent        = false;
+                            r_xram_rsp_to_tgt_rsp_req = false;
+                            r_tgt_rsp_fsm             = TGT_RSP_XRAM_IDLE;
+                        }
+                        else
+                        {
+                            if (is_ll)
+                            {
+                                r_tgt_rsp_key_sent = true;                     // Send second flit of ll
+                            }
+                            else
+                            {
+                                r_tgt_rsp_cpt      = r_tgt_rsp_cpt.read() + 1; // Send next word of read
+                            }
+                        }
+                    }
+                    break;
+                }
+                ///////////////////////
+            case TGT_RSP_MULTI_ACK:    // send the write response after coherence transaction
+                {
+                    if (p_vci_tgt.rspack)
+                    {
+
+#if DEBUG_MEMC_TGT_RSP
+                        if (m_debug)
+                            std::cout << "  <MEMC " << name() << " TGT_RSP_MULTI_ACK> Write response after coherence transaction"
+                                << " / rsrcid = " << std::hex << r_multi_ack_to_tgt_rsp_srcid.read()
+                                << " / rtrdid = " << r_multi_ack_to_tgt_rsp_trdid.read()
+                                << " / rpktid = " << r_multi_ack_to_tgt_rsp_pktid.read() << std::endl;
+#endif
+                        r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK_IDLE;
+                        r_multi_ack_to_tgt_rsp_req = false;
+                    }
+                    break;
+                }
+        } // end switch tgt_rsp_fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    ALLOC_UPT FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The ALLOC_UPT FSM allocates the access to the Update Table (UPT),
+        // with a round robin priority between three FSMs, with the following order:
+        //  WRITE -> CAS -> MULTI_ACK
+        // - The WRITE FSM initiates update transaction and sets a new entry in UPT.
+        // - The CAS FSM does the same thing as the WRITE FSM.
+        // - The MULTI_ACK FSM complete those trasactions and erase the UPT entry.
+        // The resource is always allocated.
+        /////////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "alloc_upt_fsm" << std::endl;
+
+        switch(r_alloc_upt_fsm.read())
+        {
+            /////////////////////////
+            case ALLOC_UPT_WRITE:         // allocated to WRITE FSM
+                if (r_write_fsm.read() != WRITE_UPT_LOCK)
+                {
+                    if (r_cas_fsm.read() == CAS_UPT_LOCK)
+                        r_alloc_upt_fsm = ALLOC_UPT_CAS;
+
+                    else if (r_multi_ack_fsm.read() == MULTI_ACK_UPT_LOCK)
+                        r_alloc_upt_fsm = ALLOC_UPT_MULTI_ACK;
+                }
+                break;
+
+                /////////////////////////
+            case ALLOC_UPT_CAS:           // allocated to CAS FSM
+                if (r_cas_fsm.read() != CAS_UPT_LOCK)
+                {
+                    if (r_multi_ack_fsm.read() == MULTI_ACK_UPT_LOCK)
+                        r_alloc_upt_fsm = ALLOC_UPT_MULTI_ACK;
+
+                    else if (r_write_fsm.read() == WRITE_UPT_LOCK)
+                        r_alloc_upt_fsm = ALLOC_UPT_WRITE;
+                }
+                break;
+
+                /////////////////////////
+            case ALLOC_UPT_MULTI_ACK:     // allocated to MULTI_ACK FSM
+                if (r_multi_ack_fsm.read() != MULTI_ACK_UPT_LOCK)
+                {
+                    if (r_write_fsm.read() == WRITE_UPT_LOCK)
+                        r_alloc_upt_fsm = ALLOC_UPT_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_UPT_LOCK)
+                        r_alloc_upt_fsm = ALLOC_UPT_CAS;
+                }
+                break;
+        } // end switch r_alloc_upt_fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    ALLOC_IVT FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The ALLOC_IVT FSM allocates the access to the Invalidate Table (IVT),
+        // with a round robin priority between five FSMs, with the following order:
+        //  WRITE -> XRAM_RSP -> CLEANUP -> CAS -> CONFIG
+        // - The WRITE FSM initiates broadcast invalidate transactions and sets a new entry
+        //   in IVT.
+        // - The CAS FSM does the same thing as the WRITE FSM.
+        // - The XRAM_RSP FSM initiates broadcast/multicast invalidate transaction and sets
+        //   a new entry in the IVT
+        // - The CONFIG FSM does the same thing as the XRAM_RSP FSM 
+        // - The CLEANUP FSM complete those trasactions and erase the IVT entry.
+        // The resource is always allocated.
+        /////////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "alloc_ivt_fsm" << std::endl;
+
+        switch(r_alloc_ivt_fsm.read())
+        {
+            /////////////////////
+            case ALLOC_IVT_WRITE:            // allocated to WRITE FSM
+                if (r_write_fsm.read() != WRITE_BC_IVT_LOCK)
+                {
+                    if (r_xram_rsp_fsm.read() == XRAM_RSP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_XRAM_RSP;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CLEANUP;
+
+                    else if (r_cas_fsm.read() == CAS_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CAS;
+
+                    else if (r_config_fsm.read() == CONFIG_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
+                }
+                break;
+
+                ////////////////////////
+            case ALLOC_IVT_XRAM_RSP:         // allocated to XRAM_RSP FSM
+                if (r_xram_rsp_fsm.read() != XRAM_RSP_IVT_LOCK)
+                {
+                    if (r_cleanup_fsm.read() == CLEANUP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CLEANUP;
+
+                    else if (r_cas_fsm.read() == CAS_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CAS;
+
+                    else if (r_config_fsm.read() == CONFIG_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
+
+                    else if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_WRITE;
+                }
+                break;
+
+                ///////////////////////
+            case ALLOC_IVT_CLEANUP:          // allocated to CLEANUP FSM
+                if ((r_cleanup_fsm.read() != CLEANUP_IVT_LOCK     ) and
+                        (r_cleanup_fsm.read() != CLEANUP_IVT_DECREMENT))
+                {
+                    if (r_cas_fsm.read() == CAS_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CAS;
+
+                    else if (r_config_fsm.read() == CONFIG_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
+
+                    else if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_WRITE;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_XRAM_RSP;
+                }
+                break;
+
+                //////////////////////////
+            case ALLOC_IVT_CAS:              // allocated to CAS FSM
+                if (r_cas_fsm.read() != CAS_BC_IVT_LOCK)
+                {
+                    if (r_config_fsm.read() == CONFIG_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
+
+                    else if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_WRITE;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_XRAM_RSP;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CLEANUP;
+                }
+                break;
+
+                //////////////////////////
+            case ALLOC_IVT_CONFIG:           // allocated to CONFIG FSM
+                if (r_config_fsm.read() != CONFIG_IVT_LOCK)
+                {
+                    if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_WRITE;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_XRAM_RSP;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CLEANUP;
+
+                    else if (r_cas_fsm.read() == CAS_BC_IVT_LOCK)
+                        r_alloc_ivt_fsm = ALLOC_IVT_CAS;
+                }
+                break;
+
+        } // end switch r_alloc_ivt_fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    ALLOC_DIR FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The ALLOC_DIR FSM allocates the access to the directory and
+        // the data cache with a round robin priority between 6 user FSMs :
+        // The cyclic ordering is CONFIG > READ > WRITE > CAS > CLEANUP > XRAM_RSP
+        // The ressource is always allocated.
+        /////////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "alloc_dir_fsm" << std::endl;
+
+        switch(r_alloc_dir_fsm.read())
+        {
+            /////////////////////
+            case ALLOC_DIR_RESET: // Initializes the directory one SET per cycle.
+                // All the WAYS of a SET initialized in parallel
+
+                r_alloc_dir_reset_cpt.write(r_alloc_dir_reset_cpt.read() + 1);
+
+                if (r_alloc_dir_reset_cpt.read() == (m_sets - 1))
+                {
+                    m_cache_directory.init();
+                    r_alloc_dir_fsm = ALLOC_DIR_READ;
+                }
+                break;
+
+                //////////////////////
+            case ALLOC_DIR_CONFIG:    // allocated to CONFIG FSM
+                if ((r_config_fsm.read()    != CONFIG_DIR_REQ) and
+                        (r_config_fsm.read()    != CONFIG_DIR_ACCESS) and
+                        (r_config_fsm.read()    != CONFIG_TRT_LOCK) and
+                        (r_config_fsm.read()    != CONFIG_TRT_SET) and
+                        (r_config_fsm.read()    != CONFIG_IVT_LOCK))
+                {
+                    if (r_read_fsm.read() == READ_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_READ;
+
+                    else if (r_write_fsm.read() == WRITE_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_DIR_LOCK)
+                        r_alloc_dir_fsm = ALLOC_DIR_XRAM_RSP;
+                }
+                break;
+
+                ////////////////////
+            case ALLOC_DIR_READ:    // allocated to READ FSM
+                if (((r_read_fsm.read()      != READ_DIR_REQ)   and
+                            (r_read_fsm.read()      != READ_DIR_LOCK)   and
+                            (r_read_fsm.read()      != READ_TRT_LOCK)   and
+                            (r_read_fsm.read()      != READ_HEAP_REQ))
+                        or
+                        ((r_read_fsm.read()       == READ_TRT_LOCK)   and
+                         (r_alloc_trt_fsm.read()  == ALLOC_TRT_READ)))
+                {
+                    if (r_write_fsm.read() == WRITE_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_DIR_LOCK)
+                        r_alloc_dir_fsm = ALLOC_DIR_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CONFIG;
+                }
+                break;
+
+                /////////////////////
+            case ALLOC_DIR_WRITE:    // allocated to WRITE FSM
+                if (((r_write_fsm.read()       != WRITE_DIR_REQ)  and
+                            (r_write_fsm.read()       != WRITE_DIR_LOCK)  and
+                            (r_write_fsm.read()       != WRITE_BC_DIR_READ)  and
+                            (r_write_fsm.read()       != WRITE_DIR_HIT)  and
+                            (r_write_fsm.read()       != WRITE_BC_TRT_LOCK)  and
+                            (r_write_fsm.read()       != WRITE_BC_IVT_LOCK)  and
+                            (r_write_fsm.read()       != WRITE_MISS_TRT_LOCK)  and
+                            (r_write_fsm.read()       != WRITE_UPT_LOCK)  and
+                            (r_write_fsm.read()       != WRITE_UPT_HEAP_LOCK))
+                        or
+                        ((r_write_fsm.read()      == WRITE_UPT_HEAP_LOCK)  and
+                         (r_alloc_heap_fsm.read() == ALLOC_HEAP_WRITE))
+                        or
+                        ((r_write_fsm.read()      == WRITE_MISS_TRT_LOCK)  and
+                         (r_alloc_trt_fsm.read()  == ALLOC_TRT_WRITE)))
+                {
+                    if (r_cas_fsm.read() == CAS_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_DIR_LOCK)
+                        r_alloc_dir_fsm = ALLOC_DIR_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_READ;
+                }
+                break;
+
+                ///////////////////
+            case ALLOC_DIR_CAS:    // allocated to CAS FSM
+                if (((r_cas_fsm.read()         != CAS_DIR_REQ)  and
+                            (r_cas_fsm.read()         != CAS_DIR_LOCK)  and
+                            (r_cas_fsm.read()         != CAS_DIR_HIT_READ)  and
+                            (r_cas_fsm.read()         != CAS_DIR_HIT_COMPARE)  and
+                            (r_cas_fsm.read()         != CAS_DIR_HIT_WRITE)  and
+                            (r_cas_fsm.read()         != CAS_BC_TRT_LOCK)  and
+                            (r_cas_fsm.read()         != CAS_BC_IVT_LOCK)  and
+                            (r_cas_fsm.read()         != CAS_MISS_TRT_LOCK)  and
+                            (r_cas_fsm.read()         != CAS_UPT_LOCK)  and
+                            (r_cas_fsm.read()         != CAS_UPT_HEAP_LOCK))
+                        or
+                        ((r_cas_fsm.read()        == CAS_UPT_HEAP_LOCK)  and
+                         (r_alloc_heap_fsm.read() == ALLOC_HEAP_CAS))
+                        or
+                        ((r_cas_fsm.read()        == CAS_MISS_TRT_LOCK)  and
+                         (r_alloc_trt_fsm.read()  == ALLOC_TRT_CAS)))
+                {
+                    if (r_cleanup_fsm.read() == CLEANUP_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_DIR_LOCK)
+                        r_alloc_dir_fsm = ALLOC_DIR_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_READ;
+
+                    else if (r_write_fsm.read() == WRITE_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_WRITE;
+                }
+                break;
+
+                ///////////////////////
+            case ALLOC_DIR_CLEANUP:    // allocated to CLEANUP FSM
+                if ((r_cleanup_fsm.read() != CLEANUP_DIR_REQ) and
+                        (r_cleanup_fsm.read() != CLEANUP_DIR_LOCK) and
+                        (r_cleanup_fsm.read() != CLEANUP_HEAP_REQ) and
+                        (r_cleanup_fsm.read() != CLEANUP_HEAP_LOCK))
+                {
+                    if (r_xram_rsp_fsm.read() == XRAM_RSP_DIR_LOCK)
+                        r_alloc_dir_fsm = ALLOC_DIR_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_READ;
+
+                    else if (r_write_fsm.read() == WRITE_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CAS;
+                }
+                break;
+
+                ////////////////////////
+            case ALLOC_DIR_XRAM_RSP:    // allocated to XRAM_RSP FSM
+                if ((r_xram_rsp_fsm.read() != XRAM_RSP_DIR_LOCK) and
+                        (r_xram_rsp_fsm.read() != XRAM_RSP_TRT_COPY) and
+                        (r_xram_rsp_fsm.read() != XRAM_RSP_IVT_LOCK))
+                {
+                    if (r_config_fsm.read() == CONFIG_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_READ;
+
+                    else if (r_write_fsm.read() == WRITE_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_DIR_REQ)
+                        r_alloc_dir_fsm = ALLOC_DIR_CLEANUP;
+                }
+                break;
+
+        } // end switch alloc_dir_fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    ALLOC_TRT FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The ALLOC_TRT fsm allocates the access to the Transaction Table (write buffer)
+        // with a round robin priority between 7 user FSMs :
+        // The priority is READ > WRITE > CAS > IXR_CMD > XRAM_RSP > IXR_RSP > CONFIG
+        // The ressource is always allocated.
+        ///////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "alloc_trt_fsm" << std::endl;
+
+        switch(r_alloc_trt_fsm.read())
+        {
+            ////////////////////
+            case ALLOC_TRT_READ:
+                if (r_read_fsm.read() != READ_TRT_LOCK)
+                {
+                    if ((r_write_fsm.read() == WRITE_MISS_TRT_LOCK) or
+                            (r_write_fsm.read() == WRITE_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_WRITE;
+
+                    else if ((r_cas_fsm.read() == CAS_MISS_TRT_LOCK) or
+                            (r_cas_fsm.read() == CAS_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_CAS;
+
+                    else if ((r_ixr_cmd_fsm.read() == IXR_CMD_READ_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_WRITE_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CAS_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_XRAM_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CONFIG_TRT))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_CMD;
+
+                    else if ((r_xram_rsp_fsm.read()  == XRAM_RSP_DIR_LOCK) and
+                            (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP))
+                        r_alloc_trt_fsm = ALLOC_TRT_XRAM_RSP;
+
+                    else if ((r_ixr_rsp_fsm.read() == IXR_RSP_TRT_ERASE) or
+                            (r_ixr_rsp_fsm.read() == IXR_RSP_TRT_READ))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_TRT_LOCK ) 
+                        r_alloc_trt_fsm = ALLOC_TRT_CONFIG;
+                }
+                break;
+
+                /////////////////////
+            case ALLOC_TRT_WRITE:
+                if ((r_write_fsm.read() != WRITE_MISS_TRT_LOCK) and
+                        (r_write_fsm.read() != WRITE_BC_TRT_LOCK) and
+                        (r_write_fsm.read() != WRITE_BC_IVT_LOCK))
+                {
+                    if ((r_cas_fsm.read() == CAS_MISS_TRT_LOCK) or
+                            (r_cas_fsm.read() == CAS_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_CAS;
+
+                    else if ((r_ixr_cmd_fsm.read() == IXR_CMD_READ_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_WRITE_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CAS_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_XRAM_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CONFIG_TRT))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_CMD;
+
+                    else if ((r_xram_rsp_fsm.read()  == XRAM_RSP_DIR_LOCK) and
+                            (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP))
+                        r_alloc_trt_fsm = ALLOC_TRT_XRAM_RSP;
+
+                    else if ((r_ixr_rsp_fsm.read() == IXR_RSP_TRT_ERASE) or
+                            (r_ixr_rsp_fsm.read() == IXR_RSP_TRT_READ))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_TRT_LOCK ) 
+                        r_alloc_trt_fsm = ALLOC_TRT_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_TRT_LOCK)
+                        r_alloc_trt_fsm = ALLOC_TRT_READ;
+                }
+                break;
+
+                ///////////////////
+            case ALLOC_TRT_CAS:
+                if ((r_cas_fsm.read() != CAS_MISS_TRT_LOCK) and
+                        (r_cas_fsm.read() != CAS_BC_TRT_LOCK) and
+                        (r_cas_fsm.read() != CAS_BC_IVT_LOCK))
+                {
+                    if ((r_ixr_cmd_fsm.read() == IXR_CMD_READ_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_WRITE_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CAS_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_XRAM_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CONFIG_TRT))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_CMD;
+
+                    else if ((r_xram_rsp_fsm.read()  == XRAM_RSP_DIR_LOCK) and
+                             (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP))
+                        r_alloc_trt_fsm = ALLOC_TRT_XRAM_RSP;
+
+                    else if ((r_ixr_rsp_fsm.read() == IXR_RSP_TRT_ERASE) or
+                            (r_ixr_rsp_fsm.read() == IXR_RSP_TRT_READ))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_TRT_LOCK ) 
+                        r_alloc_trt_fsm = ALLOC_TRT_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_TRT_LOCK)
+                        r_alloc_trt_fsm = ALLOC_TRT_READ;
+
+                    else if ((r_write_fsm.read() == WRITE_MISS_TRT_LOCK) or
+                            (r_write_fsm.read() == WRITE_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_WRITE;
+                }
+                break;
+
+                ///////////////////////
+            case ALLOC_TRT_IXR_CMD:
+                if ((r_ixr_cmd_fsm.read() != IXR_CMD_READ_TRT) and
+                        (r_ixr_cmd_fsm.read() != IXR_CMD_WRITE_TRT) and
+                        (r_ixr_cmd_fsm.read() != IXR_CMD_CAS_TRT) and
+                        (r_ixr_cmd_fsm.read() != IXR_CMD_XRAM_TRT) and
+                        (r_ixr_cmd_fsm.read() != IXR_CMD_CONFIG_TRT))
+                {
+                    if ((r_xram_rsp_fsm.read()  == XRAM_RSP_DIR_LOCK) and
+                            (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP))
+                        r_alloc_trt_fsm = ALLOC_TRT_XRAM_RSP;
+
+                    else if ((r_ixr_rsp_fsm.read() == IXR_RSP_TRT_ERASE) or
+                            (r_ixr_rsp_fsm.read() == IXR_RSP_TRT_READ))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_TRT_LOCK ) 
+                        r_alloc_trt_fsm = ALLOC_TRT_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_TRT_LOCK)
+                        r_alloc_trt_fsm = ALLOC_TRT_READ;
+
+                    else if ((r_write_fsm.read() == WRITE_MISS_TRT_LOCK) or
+                            (r_write_fsm.read() == WRITE_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_WRITE;
+
+                    else if ((r_cas_fsm.read() == CAS_MISS_TRT_LOCK) or
+                            (r_cas_fsm.read() == CAS_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_CAS;
+                }
+                break;
+
+                ////////////////////////
+            case ALLOC_TRT_XRAM_RSP:
+                if (((r_xram_rsp_fsm.read()  != XRAM_RSP_DIR_LOCK)  or
+                            (r_alloc_dir_fsm.read() != ALLOC_DIR_XRAM_RSP)) and
+                        (r_xram_rsp_fsm.read()  != XRAM_RSP_TRT_COPY)  and
+                        (r_xram_rsp_fsm.read()  != XRAM_RSP_DIR_UPDT)  and
+                        (r_xram_rsp_fsm.read()  != XRAM_RSP_IVT_LOCK))
+                {
+                    if ((r_ixr_rsp_fsm.read() == IXR_RSP_TRT_ERASE) or
+                            (r_ixr_rsp_fsm.read() == IXR_RSP_TRT_READ))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_TRT_LOCK ) 
+                        r_alloc_trt_fsm = ALLOC_TRT_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_TRT_LOCK)
+                        r_alloc_trt_fsm = ALLOC_TRT_READ;
+
+                    else if ((r_write_fsm.read() == WRITE_MISS_TRT_LOCK) or
+                            (r_write_fsm.read() == WRITE_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_WRITE;
+
+                    else if ((r_cas_fsm.read() == CAS_MISS_TRT_LOCK) or
+                            (r_cas_fsm.read() == CAS_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_CAS;
+
+                    else if ((r_ixr_cmd_fsm.read() == IXR_CMD_READ_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_WRITE_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CAS_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_XRAM_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CONFIG_TRT))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_CMD;
+
+                }
+                break;
+
+                ///////////////////////
+            case ALLOC_TRT_IXR_RSP:
+                if ((r_ixr_rsp_fsm.read() != IXR_RSP_TRT_ERASE) and
+                        (r_ixr_rsp_fsm.read() != IXR_RSP_TRT_READ))
+                {
+                    if (r_config_fsm.read() == CONFIG_TRT_LOCK)
+                        r_alloc_trt_fsm = ALLOC_TRT_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_TRT_LOCK)
+                        r_alloc_trt_fsm = ALLOC_TRT_READ;
+
+                    else if ((r_write_fsm.read() == WRITE_MISS_TRT_LOCK) or
+                            (r_write_fsm.read() == WRITE_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_WRITE;
+
+                    else if ((r_cas_fsm.read() == CAS_MISS_TRT_LOCK) or
+                            (r_cas_fsm.read() == CAS_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_CAS;
+
+                    else if ((r_ixr_cmd_fsm.read() == IXR_CMD_READ_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_WRITE_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CAS_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_XRAM_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CONFIG_TRT))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_CMD;
+
+                    else if ((r_xram_rsp_fsm.read()  == XRAM_RSP_DIR_LOCK) and
+                            (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP))
+                        r_alloc_trt_fsm = ALLOC_TRT_XRAM_RSP;
+                }
+                break;
+
+                //////////////////////
+            case ALLOC_TRT_CONFIG:
+                if ((r_config_fsm.read() != CONFIG_TRT_LOCK) and
+                        (r_config_fsm.read() != CONFIG_TRT_SET))
+                {
+                    if (r_read_fsm.read() == READ_TRT_LOCK)
+                        r_alloc_trt_fsm = ALLOC_TRT_READ;
+
+                    else if ((r_write_fsm.read() == WRITE_MISS_TRT_LOCK) or
+                            (r_write_fsm.read() == WRITE_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_WRITE;
+
+                    else if ((r_cas_fsm.read() == CAS_MISS_TRT_LOCK) or
+                            (r_cas_fsm.read() == CAS_BC_TRT_LOCK))
+                        r_alloc_trt_fsm = ALLOC_TRT_CAS;
+
+                    else if ((r_ixr_cmd_fsm.read() == IXR_CMD_READ_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_WRITE_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CAS_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_XRAM_TRT) or
+                            (r_ixr_cmd_fsm.read() == IXR_CMD_CONFIG_TRT))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_CMD;
+
+                    else if ((r_xram_rsp_fsm.read()  == XRAM_RSP_DIR_LOCK) and
+                            (r_alloc_dir_fsm.read() == ALLOC_DIR_XRAM_RSP))
+                        r_alloc_trt_fsm = ALLOC_TRT_XRAM_RSP;
+
+                    else if ((r_ixr_rsp_fsm.read() == IXR_RSP_TRT_ERASE) or
+                            (r_ixr_rsp_fsm.read() == IXR_RSP_TRT_READ))
+                        r_alloc_trt_fsm = ALLOC_TRT_IXR_RSP;
+                }
+                break;
+
+        } // end switch alloc_trt_fsm
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    ALLOC_HEAP FSM
+        ////////////////////////////////////////////////////////////////////////////////////
+        // The ALLOC_HEAP FSM allocates the access to the heap
+        // with a round robin priority between 6 user FSMs :
+        // The cyclic ordering is READ > WRITE > CAS > CLEANUP > XRAM_RSP > CONFIG
+        // The ressource is always allocated.
+        /////////////////////////////////////////////////////////////////////////////////////
+
+        //std::cout << std::endl << "alloc_heap_fsm" << std::endl;
+
+        switch (r_alloc_heap_fsm.read())
+        {
+            ////////////////////
+            case ALLOC_HEAP_RESET:
+                // Initializes the heap one ENTRY each cycle.
+
+                r_alloc_heap_reset_cpt.write(r_alloc_heap_reset_cpt.read() + 1);
+
+                if (r_alloc_heap_reset_cpt.read() == (m_heap_size - 1))
+                {
+                    m_heap.init();
+
+                    r_alloc_heap_fsm = ALLOC_HEAP_READ;
+                }
+                break;
+
+                ////////////////////
+            case ALLOC_HEAP_READ:
+                if ((r_read_fsm.read() != READ_HEAP_REQ) and
+                        (r_read_fsm.read() != READ_HEAP_LOCK) and
+                        (r_read_fsm.read() != READ_HEAP_ERASE))
+                {
+                    if (r_write_fsm.read() == WRITE_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CONFIG;
+                }
+                break;
+
+                /////////////////////
+            case ALLOC_HEAP_WRITE:
+                if ((r_write_fsm.read() != WRITE_UPT_HEAP_LOCK) and
+                        (r_write_fsm.read() != WRITE_UPT_REQ) and
+                        (r_write_fsm.read() != WRITE_UPT_NEXT))
+                {
+                    if (r_cas_fsm.read() == CAS_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_READ;
+                }
+                break;
+
+                ////////////////////
+            case ALLOC_HEAP_CAS:
+                if ((r_cas_fsm.read() != CAS_UPT_HEAP_LOCK) and
+                        (r_cas_fsm.read() != CAS_UPT_REQ) and
+                        (r_cas_fsm.read() != CAS_UPT_NEXT))
+                {
+                    if (r_cleanup_fsm.read() == CLEANUP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_READ;
+
+                    else if (r_write_fsm.read() == WRITE_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_WRITE;
+                }
+                break;
+
+                ///////////////////////
+            case ALLOC_HEAP_CLEANUP:
+                if ((r_cleanup_fsm.read() != CLEANUP_HEAP_REQ) and
+                        (r_cleanup_fsm.read() != CLEANUP_HEAP_LOCK) and
+                        (r_cleanup_fsm.read() != CLEANUP_HEAP_SEARCH) and
+                        (r_cleanup_fsm.read() != CLEANUP_HEAP_CLEAN))
+                {
+                    if (r_xram_rsp_fsm.read() == XRAM_RSP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_XRAM_RSP;
+
+                    else if (r_config_fsm.read() == CONFIG_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_READ;
+
+                    else if (r_write_fsm.read() == WRITE_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CAS;
+                }
+                break;
+
+                ////////////////////////
+            case ALLOC_HEAP_XRAM_RSP:
+                if ((r_xram_rsp_fsm.read() != XRAM_RSP_HEAP_REQ) and
+                        (r_xram_rsp_fsm.read() != XRAM_RSP_HEAP_ERASE))
+                {
+                    if (r_config_fsm.read() == CONFIG_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CONFIG;
+
+                    else if (r_read_fsm.read() == READ_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_READ;
+
+                    else if (r_write_fsm.read() == WRITE_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CLEANUP;
+
+                }
+                break;
+
+                ///////////////////////
+            case ALLOC_HEAP_CONFIG:
+                if ((r_config_fsm.read() != CONFIG_HEAP_REQ) and
+                        (r_config_fsm.read() != CONFIG_HEAP_SCAN))
+                {
+                    if (r_read_fsm.read() == READ_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_READ;
+
+                    else if (r_write_fsm.read() == WRITE_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_WRITE;
+
+                    else if (r_cas_fsm.read() == CAS_UPT_HEAP_LOCK)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CAS;
+
+                    else if (r_cleanup_fsm.read() == CLEANUP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_CLEANUP;
+
+                    else if (r_xram_rsp_fsm.read() == XRAM_RSP_HEAP_REQ)
+                        r_alloc_heap_fsm = ALLOC_HEAP_XRAM_RSP;
+                }
+                break;
+
+        } // end switch alloc_heap_fsm
+
+        //std::cout << std::endl << "fifo_update" << std::endl;
+
+        /////////////////////////////////////////////////////////////////////
+        //    TGT_CMD to READ FIFO
+        /////////////////////////////////////////////////////////////////////
+
+        m_cmd_read_addr_fifo.update(   cmd_read_fifo_get, cmd_read_fifo_put, 
+                p_vci_tgt.address.read());
+        m_cmd_read_length_fifo.update( cmd_read_fifo_get, cmd_read_fifo_put, 
+                p_vci_tgt.plen.read() >> 2 );
+        m_cmd_read_srcid_fifo.update(  cmd_read_fifo_get, cmd_read_fifo_put, 
+                p_vci_tgt.srcid.read());
+        m_cmd_read_trdid_fifo.update(  cmd_read_fifo_get, cmd_read_fifo_put, 
+                p_vci_tgt.trdid.read());
+        m_cmd_read_pktid_fifo.update(  cmd_read_fifo_get, cmd_read_fifo_put, 
+                p_vci_tgt.pktid.read());
+
+        /////////////////////////////////////////////////////////////////////
+        //    TGT_CMD to WRITE FIFO
+        /////////////////////////////////////////////////////////////////////
+
+        m_cmd_write_addr_fifo.update(  cmd_write_fifo_get, cmd_write_fifo_put,
+                (addr_t)p_vci_tgt.address.read());
+        m_cmd_write_eop_fifo.update(   cmd_write_fifo_get, cmd_write_fifo_put,
+                p_vci_tgt.eop.read());
+        m_cmd_write_srcid_fifo.update( cmd_write_fifo_get, cmd_write_fifo_put,
+                p_vci_tgt.srcid.read());
+        m_cmd_write_trdid_fifo.update( cmd_write_fifo_get, cmd_write_fifo_put,
+                p_vci_tgt.trdid.read());
+        m_cmd_write_pktid_fifo.update( cmd_write_fifo_get, cmd_write_fifo_put,
+                p_vci_tgt.pktid.read());
+        m_cmd_write_data_fifo.update(  cmd_write_fifo_get, cmd_write_fifo_put,
+                p_vci_tgt.wdata.read());
+        m_cmd_write_be_fifo.update(    cmd_write_fifo_get, cmd_write_fifo_put,
+                p_vci_tgt.be.read());
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    TGT_CMD to CAS FIFO
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        m_cmd_cas_addr_fifo.update(  cmd_cas_fifo_get, cmd_cas_fifo_put,
+                (addr_t)p_vci_tgt.address.read());
+        m_cmd_cas_eop_fifo.update(   cmd_cas_fifo_get, cmd_cas_fifo_put,
+                p_vci_tgt.eop.read());
+        m_cmd_cas_srcid_fifo.update( cmd_cas_fifo_get, cmd_cas_fifo_put,
+                p_vci_tgt.srcid.read());
+        m_cmd_cas_trdid_fifo.update( cmd_cas_fifo_get, cmd_cas_fifo_put,
+                p_vci_tgt.trdid.read());
+        m_cmd_cas_pktid_fifo.update( cmd_cas_fifo_get, cmd_cas_fifo_put,
+                p_vci_tgt.pktid.read());
+        m_cmd_cas_wdata_fifo.update( cmd_cas_fifo_get, cmd_cas_fifo_put,
+                p_vci_tgt.wdata.read());
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    CC_RECEIVE to CLEANUP FIFO
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        m_cc_receive_to_cleanup_fifo.update( cc_receive_to_cleanup_fifo_get,
+                cc_receive_to_cleanup_fifo_put, 
+                p_dspin_p2m.data.read());
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    CC_RECEIVE to MULTI_ACK FIFO
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        m_cc_receive_to_multi_ack_fifo.update( cc_receive_to_multi_ack_fifo_get,
+                cc_receive_to_multi_ack_fifo_put, 
+                p_dspin_p2m.data.read());
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    WRITE to CC_SEND FIFO
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        m_write_to_cc_send_inst_fifo.update( write_to_cc_send_fifo_get, 
+                write_to_cc_send_fifo_put,
+                write_to_cc_send_fifo_inst );
+        m_write_to_cc_send_srcid_fifo.update( write_to_cc_send_fifo_get, 
+                write_to_cc_send_fifo_put,
+                write_to_cc_send_fifo_srcid );
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    CONFIG to CC_SEND FIFO
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        m_config_to_cc_send_inst_fifo.update( config_to_cc_send_fifo_get, 
+                config_to_cc_send_fifo_put,
+                config_to_cc_send_fifo_inst );
+        m_config_to_cc_send_srcid_fifo.update( config_to_cc_send_fifo_get, 
+                config_to_cc_send_fifo_put,
+                config_to_cc_send_fifo_srcid );
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    XRAM_RSP to CC_SEND FIFO
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        m_xram_rsp_to_cc_send_inst_fifo.update( xram_rsp_to_cc_send_fifo_get, 
+                xram_rsp_to_cc_send_fifo_put,
+                xram_rsp_to_cc_send_fifo_inst );
+        m_xram_rsp_to_cc_send_srcid_fifo.update( xram_rsp_to_cc_send_fifo_get, 
+                xram_rsp_to_cc_send_fifo_put,
+                xram_rsp_to_cc_send_fifo_srcid );
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //    CAS to CC_SEND FIFO
+        ////////////////////////////////////////////////////////////////////////////////////
+
+        m_cas_to_cc_send_inst_fifo.update( cas_to_cc_send_fifo_get, 
+                cas_to_cc_send_fifo_put,
+                cas_to_cc_send_fifo_inst );
+        m_cas_to_cc_send_srcid_fifo.update( cas_to_cc_send_fifo_get, 
+                cas_to_cc_send_fifo_put,
+                cas_to_cc_send_fifo_srcid );
+        m_cpt_cycles++;
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        //            Update r_config_rsp_lines counter.
+        // The three sources of (increment / decrement) are CONFIG / CLEANUP / IXR_RSP FSMs
+        ////////////////////////////////////////////////////////////////////////////////////
+        if ( config_rsp_lines_incr and not 
+             (config_rsp_lines_cleanup_decr or config_rsp_lines_ixr_rsp_decr) )
+        {
+            r_config_rsp_lines = r_config_rsp_lines.read() + 1;
+        }
+        if ( not config_rsp_lines_incr and  
+             (config_rsp_lines_cleanup_decr or config_rsp_lines_ixr_rsp_decr) )
+        {
+            r_config_rsp_lines = r_config_rsp_lines.read() - 1;
+        }
+
+    } // end transition()
+
+    /////////////////////////////
+    tmpl(void)::genMoore()
+        /////////////////////////////
+    {
+#if MONITOR_MEMCACHE_FSM == 1
+        p_read_fsm.write        (r_read_fsm.read()       );
+        p_write_fsm.write       (r_write_fsm.read()      );
+        p_xram_rsp_fsm.write    (r_xram_rsp_fsm.read()   );
+        p_cas_fsm.write         (r_cas_fsm.read()        );
+        p_cleanup_fsm.write     (r_cleanup_fsm.read()    );
+        p_config_fsm.write      (r_config_fsm.read()     );
+        p_alloc_heap_fsm.write  (r_alloc_heap_fsm.read() );
+        p_alloc_dir_fsm.write   (r_alloc_dir_fsm.read()  );
+        p_alloc_trt_fsm.write   (r_alloc_trt_fsm.read()  );
+        p_alloc_upt_fsm.write   (r_alloc_upt_fsm.read()  );
+        p_alloc_ivt_fsm.write   (r_alloc_ivt_fsm.read()  );
+        p_tgt_cmd_fsm.write     (r_tgt_cmd_fsm.read()    );
+        p_tgt_rsp_fsm.write     (r_tgt_rsp_fsm.read()    );
+        p_ixr_cmd_fsm.write     (r_ixr_cmd_fsm.read()    );
+        p_ixr_rsp_fsm.write     (r_ixr_rsp_fsm.read()    );
+        p_cc_send_fsm.write     (r_cc_send_fsm.read()    );
+        p_cc_receive_fsm.write  (r_cc_receive_fsm.read() );
+        p_multi_ack_fsm.write   (r_multi_ack_fsm.read()  );
+#endif
+
+        ////////////////////////////////////////////////////////////
+        // Command signals on the p_vci_ixr port
+        ////////////////////////////////////////////////////////////
+
+        // DATA width is 8 bytes
+        // The following values are not transmitted to XRAM
+        //   p_vci_ixr.be 
+        //   p_vci_ixr.pktid  
+        //   p_vci_ixr.cons 
+        //   p_vci_ixr.wrap 
+        //   p_vci_ixr.contig 
+        //   p_vci_ixr.clen 
+        //   p_vci_ixr.cfixed 
+
+        p_vci_ixr.plen    = 64;
+        p_vci_ixr.srcid   = m_srcid_x;
+        p_vci_ixr.trdid   = r_ixr_cmd_trdid.read();
+        p_vci_ixr.address = (addr_t)r_ixr_cmd_address.read() + (r_ixr_cmd_word.read()<<2);
+        p_vci_ixr.be      = 0xFF; 
+        p_vci_ixr.pktid   = 0;
+        p_vci_ixr.cons    = false;
+        p_vci_ixr.wrap    = false;
+        p_vci_ixr.contig  = true;
+        p_vci_ixr.clen    = 0;
+        p_vci_ixr.cfixed  = false;
+
+        if ((r_ixr_cmd_fsm.read() == IXR_CMD_READ_SEND) or
+                (r_ixr_cmd_fsm.read() == IXR_CMD_WRITE_SEND) or
+                (r_ixr_cmd_fsm.read() == IXR_CMD_CAS_SEND) or
+                (r_ixr_cmd_fsm.read() == IXR_CMD_XRAM_SEND) or
+                (r_ixr_cmd_fsm.read() == IXR_CMD_CONFIG_SEND))
+        {
+            p_vci_ixr.cmdval  = true;
+
+            if (r_ixr_cmd_get.read())  // GET
+            {
+                p_vci_ixr.cmd     = vci_param_ext::CMD_READ;
+                p_vci_ixr.wdata   = 0;
+                p_vci_ixr.eop     = true;
+            }
+            else                         // PUT
+            {
+                size_t word       = r_ixr_cmd_word.read();
+                p_vci_ixr.cmd     = vci_param_ext::CMD_WRITE;
+                p_vci_ixr.wdata   = ((wide_data_t)(r_ixr_cmd_wdata[word].read()))  |
+                    ((wide_data_t)(r_ixr_cmd_wdata[word+1].read()) << 32);
+                p_vci_ixr.eop     = (word == (m_words-2));
+            }
+        }
+        else
+        {
+            p_vci_ixr.cmdval = false;
+        }
+
+        ////////////////////////////////////////////////////
+        // Response signals on the p_vci_ixr port
+        ////////////////////////////////////////////////////
+
+        if ((r_ixr_rsp_fsm.read() == IXR_RSP_TRT_READ) or
+                (r_ixr_rsp_fsm.read() == IXR_RSP_TRT_ERASE))
+        { 
+            p_vci_ixr.rspack = (r_alloc_trt_fsm.read() == ALLOC_TRT_IXR_RSP);
+        }
+        else // r_ixr_rsp_fsm == IXR_RSP_IDLE
+        {
+            p_vci_ixr.rspack = false;
+        }
+
+        ////////////////////////////////////////////////////
+        // Command signals on the p_vci_tgt port
+        ////////////////////////////////////////////////////
+
+        switch((tgt_cmd_fsm_state_e) r_tgt_cmd_fsm.read())
+        {
+            case TGT_CMD_IDLE:
+                p_vci_tgt.cmdack = false;
+                break;
+
+            case TGT_CMD_CONFIG:
+            {
+                addr_t addr_lsb = p_vci_tgt.address.read() &
+                                  m_config_addr_mask;
+
+                addr_t cell = (addr_lsb / vci_param_int::B);
+
+                size_t regr = cell &
+                              m_config_regr_idx_mask;
+
+                size_t func = (cell >> m_config_regr_width) &
+                              m_config_func_idx_mask;
+
+                switch(func)
+                {
+                    case MEMC_CONFIG:
+                        if ((p_vci_tgt.cmd.read() == vci_param_int::CMD_WRITE)
+                                and (regr == MEMC_CMD_TYPE))
+                        {
+                            p_vci_tgt.cmdack = true;
+                        }
+                        else
+                        {
+                            p_vci_tgt.cmdack = not r_tgt_cmd_to_tgt_rsp_req.read();
+                        }
+                        break;
+
+                    default:
+                        p_vci_tgt.cmdack = not r_tgt_cmd_to_tgt_rsp_req.read();
+                        break;
+                }
+
+                break;
+            }
+            case TGT_CMD_ERROR:
+                p_vci_tgt.cmdack = not r_tgt_cmd_to_tgt_rsp_req.read();
+                break;
+
+            case TGT_CMD_READ:
+                p_vci_tgt.cmdack = m_cmd_read_addr_fifo.wok();
+                break;
+
+            case TGT_CMD_WRITE:
+                p_vci_tgt.cmdack = m_cmd_write_addr_fifo.wok();
+                break;
+
+            case TGT_CMD_CAS:
+                p_vci_tgt.cmdack = m_cmd_cas_addr_fifo.wok();
+                break;
+        }
+
+        ////////////////////////////////////////////////////
+        // Response signals on the p_vci_tgt port
+        ////////////////////////////////////////////////////
+
+        switch(r_tgt_rsp_fsm.read())
+        {
+            case TGT_RSP_CONFIG_IDLE:
+            case TGT_RSP_TGT_CMD_IDLE:
+            case TGT_RSP_READ_IDLE:
+            case TGT_RSP_WRITE_IDLE:
+            case TGT_RSP_CAS_IDLE:
+            case TGT_RSP_XRAM_IDLE:
+            case TGT_RSP_MULTI_ACK_IDLE:
+            case TGT_RSP_CLEANUP_IDLE:
+                {
+                    p_vci_tgt.rspval  = false;
+                    p_vci_tgt.rsrcid  = 0;
+                    p_vci_tgt.rdata   = 0;
+                    p_vci_tgt.rpktid  = 0;
+                    p_vci_tgt.rtrdid  = 0;
+                    p_vci_tgt.rerror  = 0;
+                    p_vci_tgt.reop    = false;
+                    break;
+                }
+            case TGT_RSP_CONFIG:
+                {
+                    p_vci_tgt.rspval  = true;
+                    p_vci_tgt.rdata   = 0;
+                    p_vci_tgt.rsrcid  = r_config_to_tgt_rsp_srcid.read();
+                    p_vci_tgt.rtrdid  = r_config_to_tgt_rsp_trdid.read();
+                    p_vci_tgt.rpktid  = r_config_to_tgt_rsp_pktid.read();
+                    p_vci_tgt.rerror  = r_config_to_tgt_rsp_error.read();
+                    p_vci_tgt.reop    = true;
+
+                    break;
+                }
+            case TGT_RSP_TGT_CMD:
+                {
+                    p_vci_tgt.rspval  = true;
+                    p_vci_tgt.rdata   = r_tgt_cmd_to_tgt_rsp_rdata.read();
+                    p_vci_tgt.rsrcid  = r_tgt_cmd_to_tgt_rsp_srcid.read();
+                    p_vci_tgt.rtrdid  = r_tgt_cmd_to_tgt_rsp_trdid.read();
+                    p_vci_tgt.rpktid  = r_tgt_cmd_to_tgt_rsp_pktid.read();
+                    p_vci_tgt.rerror  = r_tgt_cmd_to_tgt_rsp_error.read();
+                    p_vci_tgt.reop    = true;
+
+                    break;
+                }
+            case TGT_RSP_READ:
+                {
+                    uint32_t last_word_idx = r_read_to_tgt_rsp_word.read() + r_read_to_tgt_rsp_length - 1;
+                    bool     is_last_word  = (r_tgt_rsp_cpt.read() == last_word_idx);
+                    bool     is_ll         = ((r_read_to_tgt_rsp_pktid.read() & 0x7) == TYPE_LL);
+
+                    p_vci_tgt.rspval  = true;
+
+                    if (is_ll and not r_tgt_rsp_key_sent.read())
+                    {
+                        // LL response first flit
+                        p_vci_tgt.rdata = r_read_to_tgt_rsp_ll_key.read();
+                    }
+                    else
+                    {
+                        // LL response second flit or READ response
+                        p_vci_tgt.rdata = r_read_to_tgt_rsp_data[r_tgt_rsp_cpt.read()].read();
+                    }
+
+                    p_vci_tgt.rsrcid  = r_read_to_tgt_rsp_srcid.read();
+                    p_vci_tgt.rtrdid  = r_read_to_tgt_rsp_trdid.read();
+                    p_vci_tgt.rpktid  = r_read_to_tgt_rsp_pktid.read();
+                    p_vci_tgt.rerror  = 0;
+                    p_vci_tgt.reop    = (is_last_word and not is_ll) or (r_tgt_rsp_key_sent.read() and is_ll);
+                    break;
+                }
+
+            case TGT_RSP_WRITE:
+                p_vci_tgt.rspval   = true;
+                if (((r_write_to_tgt_rsp_pktid.read() & 0x7) == TYPE_SC) and r_write_to_tgt_rsp_sc_fail.read())
+                    p_vci_tgt.rdata  = 1;
+                else
+                    p_vci_tgt.rdata  = 0;
+                p_vci_tgt.rsrcid   = r_write_to_tgt_rsp_srcid.read();
+                p_vci_tgt.rtrdid   = r_write_to_tgt_rsp_trdid.read();
+                p_vci_tgt.rpktid   = r_write_to_tgt_rsp_pktid.read();
+                p_vci_tgt.rerror   = 0;
+                p_vci_tgt.reop     = true;
+                break;
+
+            case TGT_RSP_CLEANUP:
+                p_vci_tgt.rspval   = true;
+                p_vci_tgt.rdata    = 0;
+                p_vci_tgt.rsrcid   = r_cleanup_to_tgt_rsp_srcid.read();
+                p_vci_tgt.rtrdid   = r_cleanup_to_tgt_rsp_trdid.read();
+                p_vci_tgt.rpktid   = r_cleanup_to_tgt_rsp_pktid.read();
+                p_vci_tgt.rerror   = 0; // Can be a CAS rsp
+                p_vci_tgt.reop     = true;
+                break;
+
+            case TGT_RSP_CAS:
+                p_vci_tgt.rspval   = true;
+                p_vci_tgt.rdata    = r_cas_to_tgt_rsp_data.read();
+                p_vci_tgt.rsrcid   = r_cas_to_tgt_rsp_srcid.read();
+                p_vci_tgt.rtrdid   = r_cas_to_tgt_rsp_trdid.read();
+                p_vci_tgt.rpktid   = r_cas_to_tgt_rsp_pktid.read();
+                p_vci_tgt.rerror   = 0;
+                p_vci_tgt.reop     = true;
+                break;
+
+            case TGT_RSP_XRAM:
+                {
+                    uint32_t last_word_idx = r_xram_rsp_to_tgt_rsp_word.read() + r_xram_rsp_to_tgt_rsp_length.read() - 1;
+                    bool     is_last_word  = (r_tgt_rsp_cpt.read() == last_word_idx);
+                    bool     is_ll         = ((r_xram_rsp_to_tgt_rsp_pktid.read() & 0x7) == TYPE_LL);
+                    bool     is_error      = r_xram_rsp_to_tgt_rsp_rerror.read();
+
+                    p_vci_tgt.rspval  = true;
+
+                    if (is_ll and not r_tgt_rsp_key_sent.read()) {
+                        // LL response first flit
+                        p_vci_tgt.rdata = r_xram_rsp_to_tgt_rsp_ll_key.read();
+                    }
+                    else {
+                        // LL response second flit or READ response
+                        p_vci_tgt.rdata = r_xram_rsp_to_tgt_rsp_data[r_tgt_rsp_cpt.read()].read();
+                    }
+
+                    p_vci_tgt.rsrcid  = r_xram_rsp_to_tgt_rsp_srcid.read();
+                    p_vci_tgt.rtrdid  = r_xram_rsp_to_tgt_rsp_trdid.read();
+                    p_vci_tgt.rpktid  = r_xram_rsp_to_tgt_rsp_pktid.read();
+                    p_vci_tgt.rerror  = is_error;
+                    p_vci_tgt.reop    = (((is_last_word or is_error) and not is_ll) or
+                            (r_tgt_rsp_key_sent.read() and     is_ll));
+                    break;
+                }
+
+            case TGT_RSP_MULTI_ACK:
+                p_vci_tgt.rspval   = true;
+                p_vci_tgt.rdata    = 0; // Can be a CAS or SC rsp
+                p_vci_tgt.rsrcid   = r_multi_ack_to_tgt_rsp_srcid.read();
+                p_vci_tgt.rtrdid   = r_multi_ack_to_tgt_rsp_trdid.read();
+                p_vci_tgt.rpktid   = r_multi_ack_to_tgt_rsp_pktid.read();
+                p_vci_tgt.rerror   = 0;
+                p_vci_tgt.reop     = true;
+                break;
+        } // end switch r_tgt_rsp_fsm
+
+        ////////////////////////////////////////////////////////////////////
+        //  p_irq port
+        //
+        //  WRITE MISS response error signaling
+        ////////////////////////////////////////////////////////////////////
+
+        p_irq =
+            r_xram_rsp_rerror_irq.read() &&
+            r_xram_rsp_rerror_irq_enable.read();
+
+        ////////////////////////////////////////////////////////////////////
+        //  p_dspin_m2p port (CC_SEND FSM)
+        ////////////////////////////////////////////////////////////////////
+
+        p_dspin_m2p.write = false;
+        p_dspin_m2p.eop   = false;
+        p_dspin_m2p.data  = 0;
+
+        switch(r_cc_send_fsm.read())
+        {
+            ///////////////////////////
+            case CC_SEND_CONFIG_IDLE:
+            case CC_SEND_XRAM_RSP_IDLE:
+            case CC_SEND_WRITE_IDLE:
+            case CC_SEND_CAS_IDLE:
+                {
+                    break;
+                }
+                ////////////////////////////////
+            case CC_SEND_CONFIG_INVAL_HEADER:
+                {
+                    uint8_t multi_inval_type;
+                    if (m_config_to_cc_send_inst_fifo.read())
+                    {
+                        multi_inval_type = DspinDhccpParam::TYPE_MULTI_INVAL_INST;
+                    }
+                    else
+                    {
+                        multi_inval_type = DspinDhccpParam::TYPE_MULTI_INVAL_DATA;
+                    }
+
+                    uint64_t flit = 0;
+                    uint64_t dest = m_config_to_cc_send_srcid_fifo.read() <<
+                        (DspinDhccpParam::SRCID_WIDTH - vci_param_int::S);
+
+                    DspinDhccpParam::dspin_set( flit,
+                            dest,
+                            DspinDhccpParam::MULTI_INVAL_DEST);
+
+                    DspinDhccpParam::dspin_set( flit,
+                            r_config_to_cc_send_trdid.read(),
+                            DspinDhccpParam::MULTI_INVAL_UPDT_INDEX);
+
+                    DspinDhccpParam::dspin_set( flit,
+                            multi_inval_type,
+                            DspinDhccpParam::M2P_TYPE);
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+                ////////////////////////////////
+            case CC_SEND_CONFIG_INVAL_NLINE:
+                {
+                    uint64_t flit = 0;
+                    DspinDhccpParam::dspin_set( flit,
+                            r_config_to_cc_send_nline.read(),
+                            DspinDhccpParam::MULTI_INVAL_NLINE);
+                    p_dspin_m2p.eop   = true;
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+                ///////////////////////////////////
+            case CC_SEND_XRAM_RSP_INVAL_HEADER:
+                {
+                    if (not m_xram_rsp_to_cc_send_inst_fifo.rok()) break;
+
+                    uint8_t multi_inval_type;
+                    if (m_xram_rsp_to_cc_send_inst_fifo.read())
+                    {
+                        multi_inval_type = DspinDhccpParam::TYPE_MULTI_INVAL_INST;
+                    }
+                    else
+                    {
+                        multi_inval_type = DspinDhccpParam::TYPE_MULTI_INVAL_DATA;
+                    }
+
+                    uint64_t flit = 0;
+                    uint64_t dest = m_xram_rsp_to_cc_send_srcid_fifo.read() <<
+                        (DspinDhccpParam::SRCID_WIDTH - vci_param_int::S);
+
+                    DspinDhccpParam::dspin_set( flit,
+                            dest,
+                            DspinDhccpParam::MULTI_INVAL_DEST);
+
+                    DspinDhccpParam::dspin_set( flit,
+                            r_xram_rsp_to_cc_send_trdid.read(),
+                            DspinDhccpParam::MULTI_INVAL_UPDT_INDEX);
+
+                    DspinDhccpParam::dspin_set( flit,
+                            multi_inval_type,
+                            DspinDhccpParam::M2P_TYPE);
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+
+                //////////////////////////////////
+            case CC_SEND_XRAM_RSP_INVAL_NLINE:
+                {
+                    uint64_t flit = 0;
+
+                    DspinDhccpParam::dspin_set( flit,
+                            r_xram_rsp_to_cc_send_nline.read(),
+                            DspinDhccpParam::MULTI_INVAL_NLINE);
+                    p_dspin_m2p.eop   = true;
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+
+                /////////////////////////////////////
+            case CC_SEND_CONFIG_BRDCAST_HEADER:
+            case CC_SEND_XRAM_RSP_BRDCAST_HEADER:
+            case CC_SEND_WRITE_BRDCAST_HEADER:
+            case CC_SEND_CAS_BRDCAST_HEADER:
+                {
+                    uint64_t flit = 0;
+
+                    DspinDhccpParam::dspin_set( flit,
+                            m_broadcast_boundaries,
+                            DspinDhccpParam::BROADCAST_BOX);
+
+                    DspinDhccpParam::dspin_set( flit,
+                            1ULL,
+                            DspinDhccpParam::M2P_BC);
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+                ////////////////////////////////////
+            case CC_SEND_XRAM_RSP_BRDCAST_NLINE:
+                {
+                    uint64_t flit = 0;
+                    DspinDhccpParam::dspin_set( flit,
+                            r_xram_rsp_to_cc_send_nline.read(),
+                            DspinDhccpParam::BROADCAST_NLINE);
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.eop   = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+                //////////////////////////////////
+            case CC_SEND_CONFIG_BRDCAST_NLINE:
+                {
+                    uint64_t flit = 0;
+                    DspinDhccpParam::dspin_set( flit,
+                            r_config_to_cc_send_nline.read(),
+                            DspinDhccpParam::BROADCAST_NLINE);
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.eop   = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+                /////////////////////////////////
+            case CC_SEND_WRITE_BRDCAST_NLINE:
+                {
+                    uint64_t flit = 0;
+                    DspinDhccpParam::dspin_set( flit,
+                            r_write_to_cc_send_nline.read(),
+                            DspinDhccpParam::BROADCAST_NLINE);
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.eop   = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+                ///////////////////////////////
+            case CC_SEND_CAS_BRDCAST_NLINE:
+                {
+                    uint64_t flit = 0;
+                    DspinDhccpParam::dspin_set( flit,
+                            r_cas_to_cc_send_nline.read(),
+                            DspinDhccpParam::BROADCAST_NLINE);
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.eop   = true;
+                    p_dspin_m2p.data  = flit;
+                    break;
+                }
+                ///////////////////////////////
+            case CC_SEND_WRITE_UPDT_HEADER:
+                {
+                    if (not m_write_to_cc_send_inst_fifo.rok()) break;
+
+                    uint8_t multi_updt_type;
+                    if (m_write_to_cc_send_inst_fifo.read())
+                    {
+                        multi_updt_type = DspinDhccpParam::TYPE_MULTI_UPDT_INST;
+                    }
+                    else
+                    {
+                        multi_updt_type = DspinDhccpParam::TYPE_MULTI_UPDT_DATA;
+                    }
+
+                    uint64_t flit = 0;
+                    uint64_t dest =
+                        m_write_to_cc_send_srcid_fifo.read() <<
+                        (DspinDhccpParam::SRCID_WIDTH - vci_param_int::S);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            dest,
+                            DspinDhccpParam::MULTI_UPDT_DEST);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_write_to_cc_send_trdid.read(),
+                            DspinDhccpParam::MULTI_UPDT_UPDT_INDEX);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            multi_updt_type,
+                            DspinDhccpParam::M2P_TYPE);
+
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+
+                    break;
+                }
+                //////////////////////////////
+            case CC_SEND_WRITE_UPDT_NLINE:
+                {
+                    uint64_t flit = 0;
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_write_to_cc_send_index.read(),
+                            DspinDhccpParam::MULTI_UPDT_WORD_INDEX);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_write_to_cc_send_nline.read(),
+                            DspinDhccpParam::MULTI_UPDT_NLINE);
+
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+
+                    break;
+                }
+                /////////////////////////////
+            case CC_SEND_WRITE_UPDT_DATA:
+                {
+
+                    uint8_t multi_updt_cpt  =
+                        r_cc_send_cpt.read() + r_write_to_cc_send_index.read();
+
+                    uint8_t  multi_updt_be   = r_write_to_cc_send_be[multi_updt_cpt].read();
+                    uint32_t multi_updt_data = r_write_to_cc_send_data[multi_updt_cpt].read();
+
+                    uint64_t flit = 0;
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            multi_updt_be,
+                            DspinDhccpParam::MULTI_UPDT_BE);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            multi_updt_data,
+                            DspinDhccpParam::MULTI_UPDT_DATA);
+
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.eop   = (r_cc_send_cpt.read() == r_write_to_cc_send_count.read());
+                    p_dspin_m2p.data  = flit;
+
+                    break;
+                }
+                ////////////////////////////
+            case CC_SEND_CAS_UPDT_HEADER:
+                {
+                    if (not m_cas_to_cc_send_inst_fifo.rok()) break;
+
+                    uint8_t multi_updt_type;
+                    if (m_cas_to_cc_send_inst_fifo.read())
+                    {
+                        multi_updt_type = DspinDhccpParam::TYPE_MULTI_UPDT_INST;
+                    }
+                    else
+                    {
+                        multi_updt_type = DspinDhccpParam::TYPE_MULTI_UPDT_DATA;
+                    }
+
+                    uint64_t flit = 0;
+                    uint64_t dest =
+                        m_cas_to_cc_send_srcid_fifo.read() <<
+                        (DspinDhccpParam::SRCID_WIDTH - vci_param_int::S);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            dest,
+                            DspinDhccpParam::MULTI_UPDT_DEST);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_cas_to_cc_send_trdid.read(),
+                            DspinDhccpParam::MULTI_UPDT_UPDT_INDEX);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            multi_updt_type,
+                            DspinDhccpParam::M2P_TYPE);
+
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+
+                    break;
+                }
+                ////////////////////////////
+            case CC_SEND_CAS_UPDT_NLINE:
+                {
+                    uint64_t flit = 0;
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_cas_to_cc_send_index.read(),
+                            DspinDhccpParam::MULTI_UPDT_WORD_INDEX);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_cas_to_cc_send_nline.read(),
+                            DspinDhccpParam::MULTI_UPDT_NLINE);
+
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.data  = flit;
+
+                    break;
+                }
+                ///////////////////////////
+            case CC_SEND_CAS_UPDT_DATA:
+                {
+                    uint64_t flit = 0;
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            0xF,
+                            DspinDhccpParam::MULTI_UPDT_BE);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_cas_to_cc_send_wdata.read(),
+                            DspinDhccpParam::MULTI_UPDT_DATA);
+
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.eop   = not r_cas_to_cc_send_is_long.read();
+                    p_dspin_m2p.data  = flit;
+
+                    break;
+                }
+                ////////////////////////////////
+            case CC_SEND_CAS_UPDT_DATA_HIGH:
+                {
+                    uint64_t flit = 0;
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            0xF,
+                            DspinDhccpParam::MULTI_UPDT_BE);
+
+                    DspinDhccpParam::dspin_set(
+                            flit,
+                            r_cas_to_cc_send_wdata_high.read(),
+                            DspinDhccpParam::MULTI_UPDT_DATA);
+
+                    p_dspin_m2p.write = true;
+                    p_dspin_m2p.eop   = true;
+                    p_dspin_m2p.data  = flit;
+
+                    break;
+                }
+        }
+
+        ////////////////////////////////////////////////////////////////////
+        //  p_dspin_clack port (CLEANUP FSM)
+        ////////////////////////////////////////////////////////////////////
+
+        if (r_cleanup_fsm.read() == CLEANUP_SEND_CLACK)
+        {
+            uint8_t cleanup_ack_type;
+            if (r_cleanup_inst.read())
+            {
+                cleanup_ack_type = DspinDhccpParam::TYPE_CLACK_INST;
+            }
+            else
+            {
+                cleanup_ack_type = DspinDhccpParam::TYPE_CLACK_DATA;
+            }
+
+            uint64_t flit = 0;
+            uint64_t dest = r_cleanup_srcid.read() <<
+                (DspinDhccpParam::SRCID_WIDTH - vci_param_int::S);
+
+            DspinDhccpParam::dspin_set(
+                    flit,
+                    dest,
+                    DspinDhccpParam::CLACK_DEST);
+
+            DspinDhccpParam::dspin_set(
+                    flit,
+                    r_cleanup_nline.read(),
+                    DspinDhccpParam::CLACK_SET);
+
+            DspinDhccpParam::dspin_set(
+                    flit,
+                    r_cleanup_way_index.read(),
+                    DspinDhccpParam::CLACK_WAY);
+
+            DspinDhccpParam::dspin_set(
+                    flit,
+                    cleanup_ack_type,
+                    DspinDhccpParam::CLACK_TYPE);
+
+            p_dspin_clack.eop   = true;
+            p_dspin_clack.write = true;
+            p_dspin_clack.data  = flit;
+        }
+        else
+        {
+            p_dspin_clack.write = false;
+            p_dspin_clack.eop   = false;
+            p_dspin_clack.data  = 0;
+        }
+
+        ///////////////////////////////////////////////////////////////////
+        //  p_dspin_p2m port (CC_RECEIVE FSM)
+        ///////////////////////////////////////////////////////////////////
+        //
+        switch(r_cc_receive_fsm.read())
+        {
+            case CC_RECEIVE_IDLE:
+                {
+                    p_dspin_p2m.read = false;
+                    break;
+                }
+            case CC_RECEIVE_CLEANUP:
+            case CC_RECEIVE_CLEANUP_EOP:
+                {
+                    p_dspin_p2m.read = m_cc_receive_to_cleanup_fifo.wok();
+                    break;
+                }
+            case CC_RECEIVE_MULTI_ACK:
+                {
+                    p_dspin_p2m.read = m_cc_receive_to_multi_ack_fifo.wok();
+                    break;
+                }
+        }
+        // end switch r_cc_send_fsm
+    } // end genMoore()
+
+}
+} // end name space
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Index: /branches/fault_tolerance/modules/vci_mem_cache/include/soclib/mem_cache.h
===================================================================
--- /branches/fault_tolerance/modules/vci_mem_cache/include/soclib/mem_cache.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_mem_cache/include/soclib/mem_cache.h	(revision 724)
@@ -0,0 +1,200 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         alain greiner
+ *
+ * Maintainers: alain
+ */
+#ifndef MEM_CACHE_REGS_H
+#define MEM_CACHE_REGS_H
+
+enum SoclibMemCacheFunc
+{
+    MEMC_CONFIG = 0,
+    MEMC_INSTRM = 1,
+    MEMC_RERROR = 2,
+
+    MEMC_FUNC_SPAN = 0x200
+};
+
+enum SoclibMemCacheConfigRegs
+{
+    MEMC_LOCK,
+    MEMC_ADDR_LO,
+    MEMC_ADDR_HI,
+    MEMC_BUF_LENGTH,
+    MEMC_CMD_TYPE
+};
+
+enum SoclibMemCacheConfigCmd
+{
+    MEMC_CMD_NOP,
+    MEMC_CMD_INVAL,
+    MEMC_CMD_SYNC
+};
+
+///////////////////////////////////////////////////////////
+//  Decoding CONFIG interface commands                   //
+//                                                       //
+//  VCI ADDRESS                                          //
+//  ================================================     //
+//  GLOBAL | LOCAL | ... | FUNC_IDX | REGS_IDX | 00      //
+//   IDX   |  IDX  |     | (3 bits) | (7 bits) |         //
+//  ================================================     //
+//                                                       //
+//  For instrumentation: FUNC_IDX = 0b001                //
+//                                                       //
+//  REGS_IDX                                             //
+//  ============================================         //
+//       Z     |    Y      |    X     |   W              //
+//    (1 bit)  | (2 bits)  | (3 bits) | (1 bit)          //
+//  ============================================         //
+//                                                       //
+//  For configuration: FUNC_IDX = 0b000                  //
+//                                                       //
+//  REGS_IDX                                             //
+//  ============================================         //
+//             RESERVED             |    X     |         //
+//             (4 bits)             | (3 bits) |         //
+//  ============================================         //
+//                                                       //
+//  X : REGISTER INDEX                                   //
+//                                                       //
+//  For WRITE MISS error signaling: FUNC = 0x010         //
+//                                                       //
+//  REGS_IDX                                             //
+//  ============================================         //
+//             RESERVED             |    X     |         //
+//             (4 bits)             | (3 bits) |         //
+//  ============================================         //
+//                                                       //
+//  X : REGISTER INDEX                                   //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+enum SoclibMemCacheInstrRegs {
+    ///////////////////////////////////////////////////////
+    //          DIRECT instrumentation registers         //
+    ///////////////////////////////////////////////////////
+
+    // LOCAL
+
+    MEMC_LOCAL_READ_LO   = 0x00,
+    MEMC_LOCAL_READ_HI   = 0x01,
+    MEMC_LOCAL_WRITE_LO  = 0x02,
+    MEMC_LOCAL_WRITE_HI  = 0x03,
+    MEMC_LOCAL_LL_LO     = 0x04,
+    MEMC_LOCAL_LL_HI     = 0x05,
+    MEMC_LOCAL_SC_LO     = 0x06,
+    MEMC_LOCAL_SC_HI     = 0x07,
+    MEMC_LOCAL_CAS_LO    = 0x08,
+    MEMC_LOCAL_CAS_HI    = 0x09,
+
+    // REMOTE
+
+    MEMC_REMOTE_READ_LO  = 0x10,
+    MEMC_REMOTE_READ_HI  = 0x11,
+    MEMC_REMOTE_WRITE_LO = 0x12,
+    MEMC_REMOTE_WRITE_HI = 0x13,
+    MEMC_REMOTE_LL_LO    = 0x14,
+    MEMC_REMOTE_LL_HI    = 0x15,
+    MEMC_REMOTE_SC_LO    = 0x16,
+    MEMC_REMOTE_SC_HI    = 0x17,
+    MEMC_REMOTE_CAS_LO   = 0x18,
+    MEMC_REMOTE_CAS_HI   = 0x19,
+
+    // COST
+
+    MEMC_COST_READ_LO    = 0x20,
+    MEMC_COST_READ_HI    = 0x21,
+    MEMC_COST_WRITE_LO   = 0x22,
+    MEMC_COST_WRITE_HI   = 0x23,
+    MEMC_COST_LL_LO      = 0x24,
+    MEMC_COST_LL_HI      = 0x25,
+    MEMC_COST_SC_LO      = 0x26,
+    MEMC_COST_SC_HI      = 0x27,
+    MEMC_COST_CAS_LO     = 0x28,
+    MEMC_COST_CAS_HI     = 0x29,
+
+    ///////////////////////////////////////////////////////
+    //       COHERENCE instrumentation registers         //
+    ///////////////////////////////////////////////////////
+
+    // LOCAL
+
+    MEMC_LOCAL_MUPDATE_LO  = 0x40,
+    MEMC_LOCAL_MUPDATE_HI  = 0x41,
+    MEMC_LOCAL_MINVAL_LO   = 0x42,
+    MEMC_LOCAL_MINVAL_HI   = 0x43,
+    MEMC_LOCAL_CLEANUP_LO  = 0x44,
+    MEMC_LOCAL_CLEANUP_HI  = 0x45,
+
+    // REMOTE
+
+    MEMC_REMOTE_MUPDATE_LO = 0x50,
+    MEMC_REMOTE_MUPDATE_HI = 0x51,
+    MEMC_REMOTE_MINVAL_LO  = 0x52,
+    MEMC_REMOTE_MINVAL_HI  = 0x53,
+    MEMC_REMOTE_CLEANUP_LO = 0x54,
+    MEMC_REMOTE_CLEANUP_HI = 0x55,
+
+    // COST
+
+    MEMC_COST_MUPDATE_LO   = 0x60,
+    MEMC_COST_MUPDATE_HI   = 0x61,
+    MEMC_COST_MINVAL_LO    = 0x62,
+    MEMC_COST_MINVAL_HI    = 0x63,
+    MEMC_COST_CLEANUP_LO   = 0x64,
+    MEMC_COST_CLEANUP_HI   = 0x65,
+
+    // TOTAL
+
+    MEMC_TOTAL_MUPDATE_LO  = 0x68,
+    MEMC_TOTAL_MUPDATE_HI  = 0x69,
+    MEMC_TOTAL_MINVAL_LO   = 0x6A,
+    MEMC_TOTAL_MINVAL_HI   = 0x6B,
+    MEMC_TOTAL_BINVAL_LO   = 0x6C,
+    MEMC_TOTAL_BINVAL_HI   = 0x6D,
+};
+
+enum SoclibMemCacheRerrorRegs
+{
+    MEMC_RERROR_ADDR_LO = 0,
+    MEMC_RERROR_ADDR_HI,
+    MEMC_RERROR_SRCID, 
+    MEMC_RERROR_IRQ_RESET,
+    MEMC_RERROR_IRQ_ENABLE
+};
+
+#define MEMC_REG(func,idx) ((func<<7)|idx) 
+
+#endif /* MEM_CACHE_REGS_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_spi/caba/metadata/vci_spi.sd
===================================================================
--- /branches/fault_tolerance/modules/vci_spi/caba/metadata/vci_spi.sd	(revision 724)
+++ /branches/fault_tolerance/modules/vci_spi/caba/metadata/vci_spi.sd	(revision 724)
@@ -0,0 +1,53 @@
+
+# -*- python -*-
+
+Module('caba:vci_spi',
+	   classname = 'soclib::caba::VciSpi',
+
+        tmpl_parameters = [ 
+           parameter.Module('vci_param',  default = 'caba:vci_param'), 
+        ],
+
+        header_files = [
+            '../source/include/vci_spi.h', 
+        ],
+
+        interface_files = [
+            '../../include/soclib/vcispi.h', 
+        ],
+
+        implementation_files = [
+            '../source/src/vci_spi.cpp',
+        ],
+
+        ports = [
+		    Port('caba:vci_target', 'p_vci_target'),
+		    Port('caba:vci_initiator', 'p_vci_initiator'),
+		    Port('caba:bit_out', 'p_irq'),
+		    Port('caba:bit_out', 'p_spi_clk'),
+		    Port('caba:bit_out', 'p_spi_ss'),
+		    Port('caba:bit_out', 'p_spi_mosi'),
+		    Port('caba:bit_in',  'p_spi_miso'),
+		    Port('caba:bit_in',   'p_resetn', auto = 'resetn'),
+		    Port('caba:clock_in', 'p_clk', auto = 'clock'), 
+		],
+
+        uses = [
+		    Uses('caba:base_module'),
+                    Uses('common:mapping_table'),
+		    Uses('caba:generic_fifo'),
+		],
+
+        instance_parameters = [
+        	parameter.Module('mt', typename = 'common:mapping_table', auto = 'env:mapping_table'),
+        	parameter.IntTab('srcid'),
+        	parameter.IntTab('tgtid'),
+		parameter.Int('burst_size'),
+        ],
+
+	    extensions = [
+		    'dsx:addressable=tgtid',
+		    'dsx:max_segments=1',
+		    'dsx:get_ident=tgtid:p_vci_target:mt,srcid:p_vci_initiator:mt',
+		],
+)
Index: /branches/fault_tolerance/modules/vci_spi/caba/source/include/vci_spi.h
===================================================================
--- /branches/fault_tolerance/modules/vci_spi/caba/source/include/vci_spi.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_spi/caba/source/include/vci_spi.h	(revision 724)
@@ -0,0 +1,222 @@
+
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         manuel.bouyer@lip6.fr october 2013
+ *
+ * Maintainers: bouyer
+ */
+
+//////////////////////////////////////////////////////////////////////////////////////
+// This component is a SPI controller with a VCI interface
+// It supports only 32 or 64 bits VCI DATA width, but all addressable registers
+// contain 32 bits words. It supports VCI addresss lartger than 32 bits.
+//
+// This component can perform data transfers between one single file belonging 
+// to the host system and a buffer in the memory of the virtual prototype.
+// The file name is an argument of the constructor.
+// This component has a DMA capability, and is both a target and an initiator.
+// The burst size (bytes) must be power of 2.
+// The burst size is typically a cache line. 
+// The memory buffer must be aligned to a a burst boundary.
+// Both read and write transfers are supported. An IRQ is optionally
+// asserted when the transfer is completed. 
+//
+
+#ifndef SOCLIB_VCI_SPI_H
+#define SOCLIB_VCI_SPI_H
+
+#include <stdint.h>
+#include <systemc>
+#include <unistd.h>
+#include "caba_base_module.h"
+#include "mapping_table.h"
+#include "vci_initiator.h"
+#include "vci_target.h"
+#include "generic_fifo.h"
+
+namespace soclib {
+namespace caba {
+
+using namespace sc_core;
+
+template<typename vci_param>
+class VciSpi
+	: public caba::BaseModule
+{
+private:
+
+    // Registers
+    sc_signal<int>            	       r_target_fsm;   	   // target fsm state register
+    sc_signal<int>                     r_initiator_fsm;    // initiator fsm state register
+    sc_signal<int>		       r_spi_fsm;	   // spi engine state
+    sc_signal<uint64_t>                r_txrx[2];      	   // data in/out
+    sc_signal<uint32_t>                r_divider;      	   // SPI clk divider
+    sc_signal<uint8_t>                 r_ss;      	   // SPI slave select
+    sc_signal<bool>                    r_ctrl_cpol;	// clock polarity
+    sc_signal<bool>                    r_ctrl_cpha;	// clock phase
+    sc_signal<bool>                    r_ctrl_ie;	// interrupt enable
+    sc_signal<uint8_t>                 r_ctrl_char_len; // number of bits in xfer
+    sc_signal<uint64_t>                r_buf_address;  // memory buffer address 
+    sc_signal<uint32_t>		       r_dma_count;   // DMA burst count
+    sc_signal<bool>		       r_read;	      // DMA read/write
+
+    sc_signal<uint32_t>		       r_burst_word;  // DMA burst word count
+    sc_signal<bool>                    r_dma_error;   // DMA error
+
+    sc_signal<bool>                    r_spi_bsy;    // SPI shifter busy
+    sc_signal<uint32_t>		       r_spi_bit_count;
+    sc_signal<uint32_t>	               r_spi_word_count;
+    sc_signal<uint32_t>		       r_spi_clk_counter;
+    sc_signal<bool>		       r_spi_clk;
+    sc_signal<bool>		       r_spi_clk_previous;
+    sc_signal<bool>		       r_spi_clk_ignore;
+    sc_signal<bool>		       r_spi_out;
+    sc_signal<bool>		       r_spi_done;
+    sc_signal<bool>		       r_irq;
+
+    GenericFifo<typename vci_param::data_t> r_dma_fifo_read; // buffer data from SPI to network
+    GenericFifo<typename vci_param::data_t> r_dma_fifo_write;// buffer data from network to SPI
+
+    sc_signal<typename vci_param::srcid_t >	r_srcid;   // save srcid
+    sc_signal<typename vci_param::trdid_t >	r_trdid;   // save trdid
+    sc_signal<typename vci_param::pktid_t >	r_pktid;   // save pktid
+
+    sc_signal<typename vci_param::data_t >	r_rdata;   // save reply
+
+    // structural parameters
+    std::list<soclib::common::Segment> m_seglist;
+    uint32_t                           m_srcid;        	   // initiator index
+    const uint32_t                     m_burst_size;       // number of words in a burst
+    const uint32_t                     m_words_per_burst;  // number of words in a burst
+    const uint32_t                     m_byte2burst_shift; // log2(burst_size)
+
+    // methods
+    void transition();
+    void genMoore();
+
+    //  Master FSM states
+    enum {
+    M_IDLE              = 0,
+    M_READ_WAIT         = 1,
+    M_READ_CMD          = 2,
+    M_READ_RSP          = 3,
+    M_INTR              = 4,
+    M_WRITE_WAIT        = 5,
+    M_WRITE_CMD         = 6,
+    M_WRITE_RSP         = 7,
+    M_WRITE_END         = 8
+    };
+
+    // Target FSM states
+    enum {
+    T_IDLE              = 0,
+    T_RSP_READ		= 1,
+    T_RSP_WRITE		= 2,
+    T_ERROR_READ	= 3,
+    T_ERROR_WRITE	= 4
+    };
+
+    // SPI FSM states
+    enum {
+    S_IDLE		= 0,
+    S_DMA_RECEIVE	= 1,
+    S_DMA_SEND_START	= 2,
+    S_DMA_SEND		= 3,
+    S_DMA_SEND_END	= 4,
+    S_XMIT		= 5,
+    };
+
+    // Error codes values
+    enum {
+    VCI_READ_OK		= 0,
+    VCI_READ_ERROR	= 1,
+    VCI_WRITE_OK	= 2,
+    VCI_WRITE_ERROR	= 3,
+    };
+
+    /* transaction type, pktid field */
+    enum transaction_type_e
+    {
+      // b3 unused
+      // b2 READ / NOT READ
+      // Si READ
+      //  b1 DATA / INS
+      //  b0 UNC / MISS
+      // Si NOT READ
+      //  b1 accÃšs table llsc type SW / other
+      //  b2 WRITE/CAS/LL/SC
+      TYPE_READ_DATA_UNC          = 0x0,
+      TYPE_READ_DATA_MISS         = 0x1,
+      TYPE_READ_INS_UNC           = 0x2,
+      TYPE_READ_INS_MISS          = 0x3,
+      TYPE_WRITE                  = 0x4,
+      TYPE_CAS                    = 0x5,
+      TYPE_LL                     = 0x6,
+      TYPE_SC                     = 0x7
+    };
+
+protected:
+
+    SC_HAS_PROCESS(VciSpi);
+
+public:
+
+    // ports
+    sc_in<bool> 					      p_clk;
+    sc_in<bool> 					      p_resetn;
+    sc_out<bool> 					      p_irq;
+    soclib::caba::VciInitiator<vci_param> p_vci_initiator;
+    soclib::caba::VciTarget<vci_param>    p_vci_target;
+    sc_out<bool> 					      p_spi_ss;
+    sc_out<bool> 					      p_spi_clk;
+    sc_out<bool> 					      p_spi_mosi;
+    sc_in<bool> 					      p_spi_miso;
+
+    void print_trace();
+
+    // Constructor   
+    VciSpi(
+	sc_module_name                      name,
+	const soclib::common::MappingTable  &mt,
+	const soclib::common::IntTab 	    &srcid,
+	const soclib::common::IntTab 	    &tgtid,
+        const uint32_t 	                    burst_size = 64);
+
+    ~VciSpi();
+
+};
+
+}}
+
+#endif /* SOCLIB_VCI_SPI_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_spi/caba/source/src/vci_spi.cpp
===================================================================
--- /branches/fault_tolerance/modules/vci_spi/caba/source/src/vci_spi.cpp	(revision 724)
+++ /branches/fault_tolerance/modules/vci_spi/caba/source/src/vci_spi.cpp	(revision 724)
@@ -0,0 +1,799 @@
+/* -*- c++ -*-
+ *
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *	 manuel.bouyer@lip6.fr october 2013
+ *
+ * Maintainers: bouyer
+ */
+
+#include <stdint.h>
+#include <iostream>
+#include <arithmetics.h>
+#include <fcntl.h>
+#include "vci_spi.h"
+#include "vcispi.h"
+
+namespace soclib { namespace caba {
+
+#define tmpl(t) template<typename vci_param> t VciSpi<vci_param>
+
+using namespace soclib::caba;
+using namespace soclib::common;
+
+////////////////////////
+tmpl(void)::transition()
+{
+
+    bool s_dma_bsy = (r_initiator_fsm != M_IDLE);
+    if(p_resetn.read() == false) 
+    {
+	r_initiator_fsm   = M_IDLE;
+	r_target_fsm      = T_IDLE;
+	r_spi_fsm	  = S_IDLE;
+	r_ss	          = 0;
+	r_divider	  = 0xffff;
+	r_ctrl_char_len   = 0;
+	r_ctrl_ie	  = false;
+	r_ctrl_cpol       = false;
+	r_ctrl_cpha       = false;
+	r_spi_bsy         = false;
+	r_dma_count       = 0;
+	r_dma_error       = false;
+	r_spi_clk_counter = 0xffff;
+	r_spi_clk	  = 0;
+	r_spi_done        = false;
+
+	r_irq		  = false;
+	r_read		  = false;
+
+	r_dma_fifo_read.init();
+	r_dma_fifo_write.init();
+
+	return;
+    } 
+
+    //////////////////////////////////////////////////////////////////////////////
+    // The Target FSM controls the following registers:
+    // r_target_fsm, r_irq_enable, r_nblocks, r_buf adress, r_lba, r_go, r_read
+    //////////////////////////////////////////////////////////////////////////////
+
+    if (r_spi_done)
+	r_spi_bsy = false;
+
+    switch(r_target_fsm) {
+    ////////////
+    case T_IDLE:
+    {
+	if ( p_vci_target.cmdval.read() ) 
+	{ 
+	    r_srcid = p_vci_target.srcid.read();
+	    r_trdid = p_vci_target.trdid.read();
+	    r_pktid = p_vci_target.pktid.read();
+	    uint32_t wdata = p_vci_target.wdata.read();
+	    sc_dt::sc_uint<vci_param::N> address = p_vci_target.address.read();
+
+	    bool found = false;
+	    std::list<soclib::common::Segment>::iterator seg;
+	    for ( seg = m_seglist.begin() ; seg != m_seglist.end() ; seg++ ) 
+	    {
+		if ( seg->contains(address) ) found = true;
+	    }
+ 
+
+	    if (not found) {
+		if (p_vci_target.cmd.read() == vci_param::CMD_WRITE)
+	    	    r_target_fsm = T_ERROR_WRITE;
+		else
+	    	    r_target_fsm = T_ERROR_READ;
+	    } else if (p_vci_target.cmd.read() != vci_param::CMD_READ &&
+		       p_vci_target.cmd.read() != vci_param::CMD_WRITE) {
+	    	r_target_fsm = T_ERROR_READ;
+	    } else {
+		bool     write  = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) & !r_spi_bsy &!s_dma_bsy;
+		uint32_t cell   = (uint32_t)((address & 0x3F)>>2);
+		switch(cell) {
+		case SPI_DATA_TXRX0:
+		    r_rdata = r_txrx[0] & (uint64_t)0x00000000ffffffffULL;
+		    if (write) {
+			r_txrx[0] =
+			   (r_txrx[0] & (uint64_t)0xffffffff00000000ULL) |
+			   ((uint64_t)wdata);
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_DATA_TXRX1:
+		    r_rdata = r_txrx[0] >> 32;
+		    if (write) {
+			r_txrx[0] =
+			    (r_txrx[0] & (uint64_t)0x00000000ffffffffULL) |
+			    ((uint64_t)wdata << 32);
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_DATA_TXRX2:
+		    r_rdata = r_txrx[1] & (uint64_t)0x00000000ffffffffULL;
+		    if (write) {
+			r_txrx[1] =
+			   (r_txrx[1] & (uint64_t)0xffffffff00000000ULL) |
+			   ((uint64_t)wdata);
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_DATA_TXRX3:
+		    r_rdata = r_txrx[1] >> 32;
+		    if (write) {
+		        r_txrx[1] =
+			    (r_txrx[1] & (uint64_t)0x00000000ffffffffULL) |
+			    ((uint64_t)wdata << 32);
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_CTRL:
+		{
+		    uint32_t data = 0;
+		    if (r_ctrl_cpol.read()) 
+			data |= SPI_CTRL_CPOL;
+		    if (r_ctrl_cpha.read()) 
+			data |= SPI_CTRL_CPHA;
+		    if (r_ctrl_ie.read()) 
+			data |= SPI_CTRL_IE_EN;
+		    if (r_spi_bsy.read()) 
+			data |= SPI_CTRL_GO_BSY;
+		    if (s_dma_bsy) 
+			data |= SPI_CTRL_DMA_BSY;
+		    if (r_dma_error) 
+			data |= SPI_CTRL_DMA_ERR;
+		    data |= (uint32_t)r_ctrl_char_len.read();
+		    r_rdata = data;
+		    if (write) {
+			r_ctrl_cpol = ((wdata & SPI_CTRL_CPOL) != 0);
+			r_ctrl_cpha = ((wdata & SPI_CTRL_CPHA) != 0);
+			r_ctrl_ie  = ((wdata & SPI_CTRL_IE_EN) != 0);
+			if (wdata & SPI_CTRL_GO_BSY) 
+				r_spi_bsy = true;
+			r_ctrl_char_len = (wdata & SPI_CTRL_CHAR_LEN_MASK);
+#ifdef SOCLIB_MODULE_DEBUG
+			if ((wdata & SPI_CTRL_GO_BSY) != 0) {
+			    std::cout << name() << " start xfer " << std::dec << (int)r_ctrl_char_len.read() << " data " << std::hex << r_txrx[1] << " " << r_txrx[0] << std::endl;
+			}
+#endif
+		    } else {
+			r_irq = false;
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		}
+		case SPI_DIVIDER:
+		    r_rdata = r_divider.read();
+		    if (write) {
+#ifdef SOCLIB_MODULE_DEBUG
+		        std::cout << name() << " divider set to " << std::dec << wdata << std::endl;
+#endif
+			r_divider = wdata;
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_SS:
+		    r_rdata = r_ss.read();
+		    if (write) {
+			r_ss = wdata;
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_DMA_BASE:
+		    r_rdata = r_buf_address.read();
+		    if (write) {
+			r_buf_address = (r_buf_address & (uint64_t)0xffffffff00000000) | wdata;
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_DMA_BASEH:
+		    r_rdata = r_buf_address >> 32;
+		    if (write) {
+			r_buf_address = (r_buf_address & (uint64_t)0x00000000ffffffff) | ((uint64_t)wdata << 32);
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		case SPI_DMA_COUNT:
+		    r_rdata = (r_dma_count.read() << m_byte2burst_shift) |
+			r_read;
+		    if (write) {
+			r_read = (wdata & 0x1);
+			r_dma_count = wdata >> m_byte2burst_shift;
+			r_ctrl_char_len = vci_param::B * 8;
+		    }
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_RSP_WRITE : T_RSP_READ;
+		    break;
+		default:
+		    r_target_fsm = (p_vci_target.cmd.read() == vci_param::CMD_WRITE) ? T_ERROR_WRITE : T_ERROR_READ;
+		    break;
+		}
+	    }
+	}
+	break;
+    }
+    ////////////////////
+    case T_RSP_READ:
+    case T_RSP_WRITE:
+    case T_ERROR_READ:
+    case T_ERROR_WRITE:
+	if (p_vci_target.rspack.read() ) {
+	    r_target_fsm  = T_IDLE;
+	}
+	break;
+    } // end switch target fsm
+
+
+	
+
+    //////////////////////////////////////////////////////////////////////////////
+    // the SPI FSM controls SPI signals
+    //////////////////////////////////////////////////////////////////////////////
+    if (r_spi_bsy == false)
+	r_spi_done = false;
+    switch (r_spi_fsm) {
+    case S_IDLE:
+	r_spi_clk_counter = r_divider.read();
+	r_spi_clk = 0;
+	r_spi_clk_previous = r_ctrl_cpha;
+	r_spi_clk_ignore = r_ctrl_cpha;
+	r_spi_bit_count = r_ctrl_char_len;
+	if (r_dma_count != 0) {
+		if (r_read.read())
+			r_spi_fsm = S_DMA_SEND_START;
+		else
+			r_spi_fsm = S_DMA_RECEIVE;
+	} else if (r_spi_bsy.read() && !r_spi_done.read()) {
+	    r_spi_fsm = S_XMIT;
+	    r_spi_out = (r_txrx[(r_ctrl_char_len -1)/ 64] >> ((r_ctrl_char_len - 1) % 64)) & (uint64_t)0x0000000000000001ULL;
+	}
+	break;
+    case S_DMA_RECEIVE:
+    {
+	r_spi_clk_counter = r_divider.read();
+	r_spi_clk = 0;
+	r_spi_clk_previous = r_ctrl_cpha;
+	r_spi_clk_ignore = r_ctrl_cpha;
+	r_spi_bit_count = r_ctrl_char_len;
+	if (r_initiator_fsm != M_WRITE_RSP || !p_vci_initiator.rspval.read()) {
+	    if (r_dma_fifo_write.rok()) {
+	        typename vci_param::data_t v = r_dma_fifo_write.read();
+	        r_dma_fifo_write.simple_get();
+	        r_txrx[0] = v;
+	        r_spi_out = (v >> ((vci_param::B * 8) - 1)) & 0x1;
+	        r_spi_fsm = S_XMIT;
+	    } else if (r_initiator_fsm == M_WRITE_END) {
+	        r_spi_fsm = S_IDLE;
+	    }
+	}
+	break;
+    }
+    case S_DMA_SEND_START:
+	r_spi_word_count = (r_dma_count << (m_byte2burst_shift - 2)) - 1;
+	r_spi_out = 1;
+	r_txrx[0] = 0xffffffff;
+	r_spi_fsm = S_XMIT;
+	break;
+    case S_DMA_SEND:
+	r_spi_out = 1;
+	r_spi_clk_counter = r_divider.read();
+	r_spi_clk = 0;
+	r_spi_clk_previous = r_ctrl_cpha;
+	r_spi_clk_ignore = r_ctrl_cpha;
+	r_spi_bit_count = r_ctrl_char_len;
+	if (r_initiator_fsm != M_READ_CMD) {
+	    if (r_dma_fifo_read.wok()) {
+	        r_dma_fifo_read.simple_put(
+		    (typename vci_param::data_t)r_txrx[0]);
+	        r_spi_word_count = r_spi_word_count - 1;
+		r_txrx[0] = 0xffffffff;
+	        if ( r_spi_word_count == 0 ) {
+		    r_spi_fsm = S_DMA_SEND_END;
+	        } else {
+		    r_spi_fsm = S_XMIT;
+	        }
+	    }
+	}
+	break;
+    case S_DMA_SEND_END:
+	if (r_initiator_fsm == M_IDLE)
+		r_spi_fsm = S_IDLE;
+	break;
+    case S_XMIT:
+      {
+	bool s_clk_sample;
+	// on clock transition, sample input line, and shift data
+	s_clk_sample = r_spi_clk ^ r_ctrl_cpha;
+	if (!r_spi_clk_ignore) {
+	    if (r_spi_clk_previous == 0 && s_clk_sample == 1) {
+		// low to high transition: shift and sample
+		r_txrx[1] = (r_txrx[1] << 1) | (r_txrx[0] >> 63);
+		r_txrx[0] = (r_txrx[0] << 1) | p_spi_miso;
+		r_spi_bit_count = r_spi_bit_count - 1;
+	    } else if (r_spi_clk_previous == 1 && s_clk_sample == 0) {
+		// high to low transition: change output, or stop
+		if (r_spi_bit_count == 0) {
+		    if (r_initiator_fsm != M_IDLE) {
+			if (r_read)
+			    r_spi_fsm = S_DMA_SEND;
+			else
+			    r_spi_fsm = S_DMA_RECEIVE;
+		    } else {
+		        r_spi_fsm = S_IDLE;
+		        r_irq = r_ctrl_ie;
+		        r_spi_done = true;
+		    }
+#ifdef SOCLIB_MODULE_DEBUG0
+		    std::cout << name() << " end xfer " << std::dec << (int)r_ctrl_char_len.read() << " data " << std::hex << r_txrx[1] << " " << r_txrx[0] << std::endl;
+#endif
+		} else {
+		    r_spi_out = (r_txrx[(r_ctrl_char_len -1)/ 64] >> ((r_ctrl_char_len - 1) % 64)) & (uint64_t)0x0000000000000001ULL;
+		}
+	    }
+	}
+	r_spi_clk_previous = s_clk_sample;
+	// generate the SPI clock
+	if (r_spi_clk_counter.read() == 0) {
+	    r_spi_clk_counter = r_divider.read();
+	    r_spi_clk = !r_spi_clk.read();
+	    r_spi_clk_ignore = false;
+	} else {
+	    r_spi_clk_counter = r_spi_clk_counter.read() - 1;
+	}
+	break;
+      }
+    }
+    //////////////////////////////////////////////////////////////////////////////
+    // The initiator FSM executes a loop, transfering one burst per iteration.
+    // data comes from or goes to fifos, the other end of the fifos is
+    // feed by or eaten by the SPI fsm.
+    //////////////////////////////////////////////////////////////////////////////
+
+    switch( r_initiator_fsm.read() ) {
+    ////////////
+    case M_IDLE: 	// check buffer alignment to compute the number of bursts
+    {
+	if ( r_dma_count != 0 )
+	{
+	    // start transfer
+	    if ( r_read.read() )    r_initiator_fsm = M_READ_WAIT;
+	    else		    r_initiator_fsm = M_WRITE_WAIT;
+	}
+	break;
+    }
+    case M_READ_WAIT:  // wait for the FIFO to be full
+	if (!r_dma_fifo_read.wok()) {
+		r_burst_word = m_words_per_burst - 1;
+		r_initiator_fsm = M_READ_CMD;
+	}
+	break;
+    ////////////////
+    case M_READ_CMD:	// Send a multi-flits VCI WRITE command
+    {
+	if ( p_vci_initiator.cmdack.read() )
+	{
+	    if ( r_burst_word == 0 )      // last flit
+	    {
+		r_initiator_fsm = M_READ_RSP;
+	    }
+	    else		    // not the last flit
+	    {
+		r_burst_word = r_burst_word.read() - 1;
+	    }
+
+	    r_dma_fifo_read.simple_get(); // consume one fifo word
+	    // compute next word address
+	    r_buf_address = r_buf_address.read() + vci_param::B;
+	}
+	break;
+    }
+    ////////////////
+    case M_READ_RSP: 	// Wait a single flit VCI WRITE response
+    {
+	if ( p_vci_initiator.rspval.read() )
+	{
+	    if ( (p_vci_initiator.rerror.read()&0x1) != 0 ) 
+	    {
+	        r_burst_word = 0;
+		r_dma_count = 0;
+		r_dma_error = true;
+	        r_initiator_fsm = M_INTR;
+#ifdef SOCLIB_MODULE_DEBUG
+		std::cout << "vci_bd M_READ_ERROR" << std::endl;
+#endif
+	    }
+	    else if ( r_spi_fsm == S_DMA_SEND_END ) // last burst
+	    {
+		r_dma_count = 0;
+		r_initiator_fsm = M_INTR;
+		r_dma_error = false;
+#ifdef SOCLIB_MODULE_DEBUG
+		std::cout << "vci_bd M_READ_SUCCESS" << std::endl;
+#endif
+	    }
+	    else // keep on reading
+	    {
+		r_dma_count = r_dma_count - 1;
+		r_initiator_fsm  = M_READ_WAIT;
+	    }
+	}
+	break;
+    }
+    ///////////////////
+    case M_INTR: 
+	r_initiator_fsm = M_IDLE;
+	r_irq = true;
+	break;
+    ///////////////////
+    case M_WRITE_WAIT:  // wait for the FIFO to be empty
+	if (!r_dma_fifo_write.rok()) {
+	    r_burst_word = m_words_per_burst - 1;
+	    r_dma_count = r_dma_count - 1;
+	    r_initiator_fsm = M_WRITE_CMD;
+	}
+	break;
+    /////////////////
+    case M_WRITE_CMD:	// This is actually a single flit VCI READ command
+    {
+	if ( p_vci_initiator.cmdack.read() ) r_initiator_fsm = M_WRITE_RSP;
+	break;
+    }
+    /////////////////
+    case M_WRITE_RSP:	// This is actually a multi-words VCI READ response
+    {
+	if ( p_vci_initiator.rspval.read() )
+	{
+	    typename vci_param::data_t v = p_vci_initiator.rdata.read();
+	    typename vci_param::data_t f = 0;
+	    // byte-swap
+	    for (int i = 0; i < (vci_param::B * 8); i += 8) {
+		f |= ((v >> i) & 0xff) << ((vci_param::B * 8) - 8 - i);
+	    }
+	    r_dma_fifo_write.simple_put(f);
+	    r_burst_word = r_burst_word.read() - 1;
+	    if ( p_vci_initiator.reop.read() )  // last flit of the burst
+	    {
+		r_buf_address = r_buf_address.read() + m_burst_size;
+
+		if( (p_vci_initiator.rerror.read()&0x1) != 0 ) 
+		{
+		    r_dma_count = 0;
+		    r_dma_error = 1;
+		    r_initiator_fsm = M_WRITE_END;
+#ifdef SOCLIB_MODULE_DEBUG
+		    std::cout << "vci_bd M_WRITE_ERROR" << std::endl;
+#endif
+		}
+		else if ( r_dma_count.read() == 0) // last burst
+		{
+		    r_dma_error = 0;
+		    r_initiator_fsm  = M_WRITE_END;
+		}
+		else					  // not the last burst
+		{
+		    r_initiator_fsm = M_WRITE_WAIT;
+		}
+	    }
+	}
+	break;
+    }
+    /////////////////
+    case M_WRITE_END:	// wait for the write to be complete
+    {
+	if (r_spi_fsm == S_IDLE) { // write complete
+	    r_initiator_fsm  = M_INTR;
+	}
+	break;
+    }
+  } // end switch r_initiator_fsm
+}  // end transition
+
+//////////////////////
+tmpl(void)::genMoore()
+{
+    // p_vci_target port   
+    p_vci_target.rsrcid = (sc_dt::sc_uint<vci_param::S>)r_srcid.read();
+    p_vci_target.rtrdid = (sc_dt::sc_uint<vci_param::T>)r_trdid.read();
+    p_vci_target.rpktid = (sc_dt::sc_uint<vci_param::P>)r_pktid.read();
+    p_vci_target.reop   = true;
+
+    switch(r_target_fsm) {
+    case T_IDLE:
+	p_vci_target.cmdack = true;
+	p_vci_target.rspval = false;
+	p_vci_target.rdata  = 0;
+	break;
+    case T_RSP_READ:
+	p_vci_target.cmdack = false;
+	p_vci_target.rspval = true;
+	p_vci_target.rdata = r_rdata;
+	p_vci_target.rerror = VCI_READ_OK;
+	break;
+    case T_RSP_WRITE:
+	p_vci_target.cmdack = false;
+	p_vci_target.rspval = true;
+	p_vci_target.rdata  = 0;
+	p_vci_target.rerror = VCI_WRITE_OK;
+	break;
+    case T_ERROR_READ:
+	p_vci_target.cmdack = false;
+	p_vci_target.rspval = true;
+	p_vci_target.rdata  = 0;
+	p_vci_target.rerror = VCI_READ_ERROR;
+	break;
+    case T_ERROR_WRITE:
+	p_vci_target.cmdack = false;
+	p_vci_target.rspval = true;
+	p_vci_target.rdata  = 0;
+	p_vci_target.rerror = VCI_WRITE_ERROR;
+	break;
+    } // end switch target fsm
+
+    // p_vci_initiator port
+    p_vci_initiator.srcid  = (sc_dt::sc_uint<vci_param::S>)m_srcid;
+    p_vci_initiator.trdid  = 0;
+    p_vci_initiator.contig = true;
+    p_vci_initiator.cons   = false;
+    p_vci_initiator.wrap   = false;
+    p_vci_initiator.cfixed = false;
+    p_vci_initiator.clen   = 0;
+
+    switch (r_initiator_fsm) {
+    case M_WRITE_CMD:		// It is actually a single flit VCI read command
+	p_vci_initiator.rspack  = false;
+	p_vci_initiator.cmdval  = true;
+	p_vci_initiator.address = (sc_dt::sc_uint<vci_param::N>)r_buf_address.read();
+	p_vci_initiator.cmd     = vci_param::CMD_READ;
+	p_vci_initiator.pktid   = TYPE_READ_DATA_UNC; 
+	p_vci_initiator.wdata   = 0;
+	p_vci_initiator.be      = 0;
+	p_vci_initiator.plen    = (sc_dt::sc_uint<vci_param::K>)(m_burst_size);
+	p_vci_initiator.eop     = true;
+	break;
+    case M_READ_CMD:		// It is actually a multi-words VCI WRITE command 
+    {
+	typename vci_param::data_t v = 0;
+	typename vci_param::data_t f;
+	p_vci_initiator.rspack  = false;
+	p_vci_initiator.cmdval  = true;
+	p_vci_initiator.address = (sc_dt::sc_uint<vci_param::N>)r_buf_address.read();
+	p_vci_initiator.cmd     = vci_param::CMD_WRITE;
+	p_vci_initiator.pktid   = TYPE_WRITE;
+	p_vci_initiator.plen    = (sc_dt::sc_uint<vci_param::K>)(m_burst_size);
+	f = r_dma_fifo_read.read();
+	// byte-swap
+	for (int i = 0; i < (vci_param::B * 8); i += 8) {
+		v |= ((f >> i) & 0xff) << ((vci_param::B * 8) - 8 - i);
+	}
+	p_vci_initiator.wdata = v;
+	p_vci_initiator.eop   = ( r_burst_word.read() == 0);
+	if (vci_param::B == 8)
+	{
+	    p_vci_initiator.be    = 0xFF;
+	}
+	else
+	{
+	    p_vci_initiator.be    = 0xF;
+	}
+	break;
+    }
+    case M_READ_RSP:
+    case M_WRITE_RSP:
+	p_vci_initiator.rspack  = true;
+	p_vci_initiator.cmdval  = false;
+	break;
+    default:
+	p_vci_initiator.rspack  = false;
+	p_vci_initiator.cmdval  = false;
+	break;
+    }
+
+    // SPI signals
+    p_spi_ss = ((r_ss & 0x1) == 0);
+    switch(r_spi_fsm) {
+    default:
+	p_spi_mosi = r_spi_out;
+	p_spi_clk = 0;
+	break;
+    case S_XMIT:
+      {
+	bool s_clk_sample = r_spi_clk ^ r_ctrl_cpha;
+	p_spi_clk = r_spi_clk ^ r_ctrl_cpol;
+	if (s_clk_sample == 0) {
+	    // clock low: get data directly from shift register
+	    // as r_spi_out may be delayed by one clock cycle
+	    p_spi_mosi = (r_txrx[(r_ctrl_char_len -1)/ 64] >> ((r_ctrl_char_len - 1) % 64)) & (uint64_t)0x0000000000000001ULL;
+	} else {
+	    // clock high: get data from saved value, as the shift register
+	    // may have changed
+	    p_spi_mosi = r_spi_out;
+	}
+	break;
+      }
+    }
+
+    // IRQ signal
+    p_irq = r_irq;
+} // end GenMoore()
+
+//////////////////////////////////////////////////////////////////////////////
+tmpl(/**/)::VciSpi( sc_core::sc_module_name	      name, 
+				const soclib::common::MappingTable   &mt,
+				const soclib::common::IntTab	 &srcid,
+				const soclib::common::IntTab	 &tgtid,
+				const uint32_t		       burst_size)
+
+: caba::BaseModule(name),
+	m_seglist(mt.getSegmentList(tgtid)),
+	m_srcid(mt.indexForId(srcid)),
+	m_burst_size(burst_size),
+	m_words_per_burst(burst_size / vci_param::B),
+	m_byte2burst_shift(soclib::common::uint32_log2(burst_size)),
+	p_clk("p_clk"),
+	p_resetn("p_resetn"),
+	p_vci_initiator("p_vci_initiator"),
+	p_vci_target("p_vci_target"),
+	p_irq("p_irq"),
+	p_spi_ss("p_spi_ss"),
+	p_spi_clk("p_spi_clk"),
+	p_spi_mosi("p_spi_mosi"),
+	p_spi_miso("p_spi_miso"),
+
+	r_dma_fifo_read("r_dma_fifo_read", burst_size / vci_param::B), // one cache line
+	r_dma_fifo_write("r_dma_fifo_read", burst_size / vci_param::B) // one cache line
+{
+    std::cout << "  - Building VciSpi " << name << std::endl;
+
+	SC_METHOD(transition);
+    dont_initialize();
+    sensitive << p_clk.pos();
+
+	SC_METHOD(genMoore);
+    dont_initialize();
+    sensitive << p_clk.neg();
+
+    size_t nbsegs = 0;
+    std::list<soclib::common::Segment>::iterator seg;
+    for ( seg = m_seglist.begin() ; seg != m_seglist.end() ; seg++ ) 
+    {
+	nbsegs++;
+	
+	    if ( (seg->baseAddress() & 0x0000003F) != 0 ) 
+	    {
+		    std::cout << "Error in component VciSpi : " << name 
+			      << "The base address of segment " << seg->name()
+		      << " must be multiple of 64 bytes" << std::endl;
+		    exit(1);
+	    }
+	    if ( seg->size() < 64 ) 
+	    {
+		    std::cout << "Error in component VciSpi : " << name 
+			  << "The size of segment " << seg->name()
+		      << " cannot be smaller than 64 bytes" << std::endl;
+		    exit(1);
+	    }
+	std::cout << "    => segment " << seg->name()
+		  << " / base = " << std::hex << seg->baseAddress()
+		  << " / size = " << seg->size() << std::endl; 
+    }
+
+    if( nbsegs == 0 )
+    {
+		std::cout << "Error in component VciSpi : " << name
+			  << " No segment allocated" << std::endl;
+		exit(1);
+    }
+
+    if( (burst_size != 8 ) && 
+		(burst_size != 16) && 
+		(burst_size != 32) && 
+		(burst_size != 64) )
+	{
+		std::cout << "Error in component VciSpi : " << name 
+			  << " The burst size must be 8, 16, 32 or 64 bytes" << std::endl;
+		exit(1);
+	}
+
+	if ( (vci_param::B != 4) and (vci_param::B != 8) )
+	{
+		std::cout << "Error in component VciSpi : " << name	      
+			  << " The VCI data fields must have 32 bits or 64 bits" << std::endl;
+		exit(1);
+	}
+
+} // end constructor
+
+tmpl(/**/)::~VciSpi()
+{
+}
+
+
+//////////////////////////
+tmpl(void)::print_trace()
+{
+	const char* initiator_str[] = 
+    {
+		"M_IDLE",
+
+		"M_READ_WAIT",
+		"M_READ_CMD",
+		"M_READ_RSP",
+		"M_INTR",
+
+		"M_WRITE_WAIT",
+		"M_WRITE_CMD",
+		"M_WRITE_RSP",
+		"M_WRITE_END",
+	};
+	const char* target_str[] = 
+        {
+		"T_IDLE",
+		"T_RSP_READ",
+		"T_RSP_WRITE",
+		"T_ERROR_READ",
+		"T_ERROR_WRITE",
+	};
+	const char* spi_str[] = 
+        {
+		"S_IDLE",
+		"S_DMA_RECEIVE",
+		"S_DMA_SEND_START",
+		"S_DMA_SEND",
+		"S_DMA_SEND_END",
+		"S_XMIT",
+	};
+
+	std::cout << name() << " _TGT : " << target_str[r_target_fsm.read()] 
+	    << std::endl;
+	std::cout << name() << " _SPI : " << spi_str[r_spi_fsm.read()] 
+	    << " clk_counter " << r_spi_clk_counter.read()
+	    << " r_spi_bit_count " << r_spi_bit_count.read() 
+	    << " r_spi_bsy " << (int)r_spi_bsy.read() << std::endl;
+	std::cout << name() << " _SPI : "
+	    << " r_spi_clk " << r_spi_clk.read()
+	    << " cpol " << r_ctrl_cpol.read()
+	    << " cpha " << r_ctrl_cpha.read()
+	    << " r_spi_clk_ignore " << r_spi_clk_ignore.read()
+	    << " r_txrx 0x" << std::hex
+	    << r_txrx[1].read() << " " << r_txrx[0].read()
+
+	    << std::endl;
+	std::cout << name() << "  _INI : " << initiator_str[r_initiator_fsm.read()] 
+	  << "  buf = " << std::hex << r_buf_address.read()
+	  << "  burst = " << r_burst_word.read() 
+	  << "  count = " << r_dma_count.read() 
+	  << "  spi_count = " << r_spi_word_count.read() 
+	  <<std::endl; 
+}
+
+}} // end namespace
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/modules/vci_spi/include/soclib/vcispi.h
===================================================================
--- /branches/fault_tolerance/modules/vci_spi/include/soclib/vcispi.h	(revision 724)
+++ /branches/fault_tolerance/modules/vci_spi/include/soclib/vcispi.h	(revision 724)
@@ -0,0 +1,64 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ * 
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         manuel bouyer
+ *
+ * Maintainers: bouyer
+ */
+#ifndef SPISD_H
+#define SPISD_H
+
+enum SoclibBlockDeviceRegisters {
+    SPI_DATA_TXRX0,
+    SPI_DATA_TXRX1,
+    SPI_DATA_TXRX2,
+    SPI_DATA_TXRX3,
+    SPI_CTRL,
+    SPI_DIVIDER,
+    SPI_SS,
+    SPI_DMA_BASE,
+    SPI_DMA_BASEH,
+    SPI_DMA_COUNT
+};
+
+#define SPI_CTRL_DMA_ERR	(1 << 17) /* R   DMA error                    */
+#define SPI_CTRL_DMA_BSY	(1 << 16) /* R   DMA in progress              */
+#define SPI_CTRL_CPOL		(1 << 15) /* R/W Clock polarity               */
+#define SPI_CTRL_CPHA		(1 << 14) /* R/W Clock phase                  */
+#define SPI_CTRL_IE_EN		(1 << 12) /* R/W Interrupt Enable             */
+// 9-11 reserved
+#define SPI_CTRL_GO_BSY		(1 << 8 ) /* R/W Start the transfer           */
+#define SPI_CTRL_CHAR_LEN_MASK	(0xFF   ) /* R/W Bits transmited in 1 transfer*/
+
+#define SPI_DMA_COUNT_READ	(1 << 0) /* operation is a read (else write) */
+
+#endif /* SPISD_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/platforms/almos-tsar-mipsel/Makefile
===================================================================
--- /branches/fault_tolerance/platforms/almos-tsar-mipsel/Makefile	(revision 724)
+++ /branches/fault_tolerance/platforms/almos-tsar-mipsel/Makefile	(revision 724)
@@ -0,0 +1,6 @@
+simul.x: top.cpp top.desc
+	soclib-cc -P -p top.desc -I. -o simul.x -j8
+
+clean:
+	soclib-cc -x -p top.desc -I.
+	rm -rf *.o *.x term*
Index: /branches/fault_tolerance/platforms/almos-tsar-mipsel/soclib.conf
===================================================================
--- /branches/fault_tolerance/platforms/almos-tsar-mipsel/soclib.conf	(revision 724)
+++ /branches/fault_tolerance/platforms/almos-tsar-mipsel/soclib.conf	(revision 724)
@@ -0,0 +1,18 @@
+
+config.lib_systemcass_openmp_mine = Library(
+	parent = config.systemc,
+	dir = "/users/outil/nbsdtsar/systemcass-optim",
+	libdir = "%(dir)s/lib-linux",
+	cflags = config.systemc.cflags+['-fopenmp']+['-O3']+['-DUSE_OPENMP=1'],
+	libs = ['-ldl', '-lm', '-lpthread', '-L%(libdir)s', '-lsystemc', '-rdynamic', '-fopenmp'],
+)
+
+config.systemcass_openmp_mine = BuildEnv(
+	parent = config.systemc_64,
+	libraries = [ config.lib_systemcass_openmp_mine ],
+	repos = "/dsk/l1/misc/almaless/soclib-cc/head/systemcass-optim",
+	cache_file = "/dsk/l1/misc/almaless/soclib-cc/head/systemcass-optim/soclib_cc.cache",
+	toolchain = config.toolchain_64,
+)
+
+config.default = config.systemcass_openmp_mine
Index: /branches/fault_tolerance/platforms/almos-tsar-mipsel/top.cpp
===================================================================
--- /branches/fault_tolerance/platforms/almos-tsar-mipsel/top.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/almos-tsar-mipsel/top.cpp	(revision 724)
@@ -0,0 +1,960 @@
+/////////////////////////////////////////////////////////////////////////
+// File: top.cpp 
+// Author: Alain Greiner 
+// Copyright: UPMC/LIP6
+// Date : may 2013
+// This program is released under the GNU public license
+/////////////////////////////////////////////////////////////////////////
+// This file define a generic TSAR architecture.
+// The physical address space is 40 bits.
+//
+// The number of clusters cannot be larger than 256.
+// The number of processors per cluster cannot be larger than 8.
+// 
+// - It uses four dspin_local_crossbar per cluster as local interconnect 
+// - It uses two virtual_dspin routers per cluster as global interconnect
+// - It uses the vci_cc_vcache_wrapper 
+// - It uses the vci_mem_cache
+// - It contains one vci_xicu per cluster.
+// - It contains one vci_multi_dma per cluster.
+// - It contains one vci_simple_ram per cluster to model the L3 cache.
+//
+// The communication between the MemCache and the Xram is 64 bits.
+//
+// All clusters are identical, but the cluster 0 (called io_cluster), 
+// contains 6 extra components:
+// - the boot rom (BROM)
+// - the disk controller (BDEV)
+// - the multi-channel network controller (MNIC)
+// - the multi-channel chained buffer dma controller (CDMA)
+// - the multi-channel tty controller (MTTY)
+// - the frame buffer controller (FBUF)
+//
+// It is build with one single component implementing a cluster,
+// defined in files tsar_xbar_cluster.* (with * = cpp, h, sd)
+//
+// The IRQs are connected to XICUs as follow:
+// - The IRQ_IN[0] to IRQ_IN[7] ports are not used in all clusters.
+// - The DMA IRQs are connected to IRQ_IN[8] to IRQ_IN[15] in all clusters.
+// - The TTY IRQs are connected to IRQ_IN[16] to IRQ_IN[30] in I/O cluster.
+// - The BDEV IRQ is connected to IRQ_IN[31] in I/O cluster.
+// 
+// Some hardware parameters are used when compiling the OS, and are used 
+// by this top.cpp file. They must be defined in the hard_config.h file :
+// - CLUSTER_X        : number of clusters in a row (power of 2)
+// - CLUSTER_Y        : number of clusters in a column (power of 2)
+// - CLUSTER_SIZE     : size of the segment allocated to a cluster
+// - NB_PROCS_MAX     : number of processors per cluster (power of 2)
+// - NB_DMA_CHANNELS  : number of DMA channels per cluster (< 9)
+// - NB_TTY_CHANNELS  : number of TTY channels in I/O cluster (< 16)
+// - NB_NIC_CHANNELS  : number of NIC channels in I/O cluster (< 9)
+// 
+// Some other hardware parameters are not used when compiling the OS,
+// and can be directly defined in this top.cpp file:
+// - XRAM_LATENCY     : external ram latency 
+// - MEMC_WAYS        : L2 cache number of ways
+// - MEMC_SETS        : L2 cache number of sets
+// - L1_IWAYS     
+// - L1_ISETS    
+// - L1_DWAYS   
+// - L1_DSETS  
+// - FBUF_X_SIZE      : width of frame buffer (pixels)
+// - FBUF_Y_SIZE      : heigth of frame buffer (lines)
+// - BDEV_SECTOR_SIZE : block size for block drvice
+// - BDEV_IMAGE_NAME  : file pathname for block device 
+// - NIC_RX_NAME      : file pathname for NIC received packets
+// - NIC_TX_NAME      : file pathname for NIC transmited packets
+// - NIC_TIMEOUT      : max number of cycles before closing a container
+/////////////////////////////////////////////////////////////////////////
+// General policy for 40 bits physical address decoding:
+// All physical segments base addresses are multiple of 1 Mbytes
+// (=> the 24 LSB bits = 0, and the 16 MSB bits define the target) 
+// The (x_width + y_width) MSB bits (left aligned) define
+// the cluster index, and the LADR bits define the local index:
+//      | X_ID  | Y_ID  |---| LADR |     OFFSET          |
+//      |x_width|y_width|---|  8   |       24            |
+/////////////////////////////////////////////////////////////////////////
+// General policy for 14 bits SRCID decoding:
+// Each component is identified by (x_id, y_id, l_id) tuple.
+//      | X_ID  | Y_ID  |---| L_ID |
+//      |x_width|y_width|---|  6   |
+/////////////////////////////////////////////////////////////////////////
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+#include <stdint.h>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "tsar_xbar_cluster.h"
+#include "alloc_elems.h"
+
+///////////////////////////////////////////////////
+//               Parallelisation
+///////////////////////////////////////////////////
+#if USE_OPENMP
+#include <omp.h>
+#endif
+
+//  cluster index (computed from x,y coordinates)
+#define cluster(x,y)   (y + ymax * x)
+
+#define min(x, y) (x < y ? x : y)
+
+///////////////////////////////////////////////////////////
+//          DSPIN parameters           
+///////////////////////////////////////////////////////////
+#define dspin_cmd_width      39
+#define dspin_rsp_width      32
+
+///////////////////////////////////////////////////////////
+//          VCI parameters           
+///////////////////////////////////////////////////////////
+#define vci_cell_width_int    4
+#define vci_cell_width_ext    8
+#define vci_address_width     32
+#define vci_plen_width        8
+#define vci_rerror_width      1
+#define vci_clen_width        1
+#define vci_rflag_width       1
+#define vci_srcid_width       14
+#define vci_pktid_width       4
+#define vci_trdid_width       4
+#define vci_wrplen_width      1
+
+////////////////////////////////////////////////////////////
+//    Main Hardware Parameters values         
+////////////////////////////////////////////////////////////
+#define CLUSTER_X             1
+#define CLUSTER_Y             1
+#define NB_CLUSTERS           1
+#define NB_PROCS_MAX          4
+#define NB_DMA_CHANNELS       1
+#define NB_TTY_CHANNELS       4
+#define NB_IOC_CHANNELS       1
+#define NB_NIC_CHANNELS       1
+#define NB_CMA_CHANNELS       0
+#define USE_XICU              1
+#define IOMMU_ACTIVE          0
+
+////////////////////////////////////////////////////////////
+//    Secondary Hardware Parameters         
+////////////////////////////////////////////////////////////
+#define XRAM_LATENCY          0
+
+#define MEMC_WAYS             16
+#define MEMC_SETS             256
+
+#define L1_IWAYS              4
+#define L1_ISETS              64
+#define L1_DWAYS              4
+#define L1_DSETS              64
+
+#define FBUF_X_SIZE           512
+#define FBUF_Y_SIZE           512
+
+#define BDEV_SECTOR_SIZE      4096
+#define BDEV_IMAGE_NAME       "hdd-img.bin"
+
+#define NIC_RX_NAME           "rx_packets.txt"
+#define NIC_TX_NAME           "tx_packets.txt"
+#define NIC_TIMEOUT           10000
+
+#define NORTH                 0
+#define SOUTH                 1
+#define EAST                  2
+#define WEST                  3
+
+////////////////////////////////////////////////////////////
+//    Software to be loaded in ROM/RAM         
+////////////////////////////////////////////////////////////
+#define soft_name       "bootloader.bin",\
+                        "kernel-soclib.bin@0xbfc10000:D",\
+                        "arch-info.bin@0xBFC08000:D"
+
+////////////////////////////////////////////////////////////
+//     DEBUG Parameters default values         
+////////////////////////////////////////////////////////////
+#define MAX_FROZEN_CYCLES     100000000
+
+////////////////////////////////////////////////////////////////////
+//     TGTID definition in direct space
+// For all components:  global TGTID = global SRCID = cluster_index
+////////////////////////////////////////////////////////////////////
+#define MEMC_TGTID      0
+#define XICU_TGTID      1
+#define MDMA_TGTID      2
+#define MTTY_TGTID      3
+#define FBUF_TGTID      4
+#define BDEV_TGTID      5
+#define MNIC_TGTID      6
+#define BROM_TGTID      7
+#define CDMA_TGTID      8
+#define SIMH_TGTID      9
+
+/////////////////////////////////////////////////////////
+//    Physical segments definition
+/////////////////////////////////////////////////////////
+// There is 3 segments replicated in all clusters
+// and 5 specific segments in the "IO" cluster 
+// (containing address 0xBF000000)
+/////////////////////////////////////////////////////////
+// Physical Address Decoding: 8 GID + 8 LID + 16 offset.
+/////////////////////////////////////////////////////////
+#define RAM_BASE        0x00000000      
+#define RAM_SIZE        0x00C00000
+
+#define BROM_BASE       0xBFC00000      
+#define BROM_SIZE       0x00100000
+
+#define FBUF_BASE       0xBFD00000      
+#define FBUF_SIZE       0x00200000
+
+#define XICU_BASE       0x00F00000      
+#define XICU_SIZE       0x00002000
+
+#define BDEV_BASE       0xBFF10000
+#define BDEV_SIZE       0x00000100
+
+#define MTTY_BASE       0xBFF20000      
+#define MTTY_SIZE       0x00000100
+
+#define MDMA_BASE       0x00F30000
+#define MDMA_SIZE       0x00001000 * NB_DMA_CHANNELS  // 4 Kbytes per channel
+
+#define MEMC_BASE       0x00F40000      
+#define MEMC_SIZE       0x00001000
+
+#define SIMH_BASE       0xBFF50000
+#define SIMH_SIZE       0x00001000
+
+#define CDMA_BASE       0xBFF60000      
+#define CDMA_SIZE       0x00000100
+
+#define MNIC_BASE       0xB0F80000
+#define MNIC_SIZE       0x00080000   // 512 Kbytes (for 8 channels)
+
+bool stop_called = false;
+
+/////////////////////////////////
+int _main(int argc, char *argv[])
+{
+   using namespace sc_core;
+   using namespace soclib::caba;
+   using namespace soclib::common;
+
+   uint64_t ncycles          = 0xFFFFFFFFFFFFFFFF; // simulated cycles
+   char     disk_name[256]   = BDEV_IMAGE_NAME;    // pathname to the disk image
+   char     nic_rx_name[256] = NIC_RX_NAME;        // pathname to the rx packets file
+   char     nic_tx_name[256] = NIC_TX_NAME;        // pathname to the tx packets file
+   ssize_t  threads_nr       = 1;                  // simulator's threads number
+   bool     debug_ok         = false;              // trace activated
+   size_t   debug_period     = 1;                  // trace period
+   size_t   debug_memc_id    = 0;                  // index of memc to be traced 
+   size_t   debug_proc_id    = 0;                  // index of proc to be traced
+   uint32_t debug_from       = 0;                  // trace start cycle
+   uint32_t frozen_cycles    = MAX_FROZEN_CYCLES;  // monitoring frozen processor
+   size_t   xmax             = CLUSTER_X;          // number of clusters in a row
+   size_t   ymax             = CLUSTER_Y;          // number of clusters in a column
+   size_t   nprocs           = NB_PROCS_MAX;		   // number of processors per cluster
+   size_t   xfb              = FBUF_X_SIZE;	      // frameBuffer column number
+   size_t   yfb              = FBUF_Y_SIZE;        // frameBuffer lines number
+   size_t   fb_mode          = 420;
+   size_t   ram_size         = RAM_SIZE;
+   size_t   blk_size         = BDEV_SECTOR_SIZE;
+   size_t   l1_i_ways        = L1_IWAYS;
+   size_t   l1_d_ways        = L1_DWAYS;
+   size_t   l1_i_sets        = L1_ISETS;
+   size_t   l1_d_sets        = L1_DSETS;
+   size_t   memc_sets        = MEMC_SETS;
+   size_t   memc_ways        = MEMC_WAYS;
+   size_t   xram_latency     = XRAM_LATENCY;
+   size_t   xicu_base        = XICU_BASE;
+   size_t   mdma_base        = MDMA_BASE;
+   size_t   memc_base        = MEMC_BASE;
+   bool     isRamSizeSet     = false;
+   size_t   cluster_io_id;                         // index of cluster containing IOs
+   struct   timeval t1,t2;
+   uint64_t ms1,ms2;
+
+   ////////////// command line arguments //////////////////////
+   if (argc > 1)
+   {
+      for (int n = 1; n < argc; n = n + 2)
+      {
+         if ((strcmp(argv[n], "-NCYCLES") == 0) && (n + 1 < argc))
+         {
+            ncycles = atoi(argv[n + 1]);
+         }
+         else if( (strcmp(argv[n],"-NPROCS") == 0) && (n+1<argc) )
+         {
+            nprocs = atoi(argv[n+1]);
+            assert( ((nprocs == 1) || (nprocs == 2) || (nprocs == 4)) &&
+                    "NPROCS must be equal to 1, 2, or 4");
+         }
+         else if ((strcmp(argv[n], "-THREADS") == 0) && ((n + 1) < argc))
+         {
+            threads_nr = atoi(argv[n + 1]);
+            threads_nr = (threads_nr < 1) ? 1 : threads_nr;
+         }
+         else if( (strcmp(argv[n],"-XMAX") == 0) && (n+1<argc) )
+         {
+            xmax = atoi(argv[n+1]);
+            assert( ((xmax == 1) || (xmax == 2) || (xmax == 4) || (xmax == 8) || (xmax == 16)) 
+                         && "The XMAX parameter must be 2, 4, 8, or 16" );
+         }
+         else if( (strcmp(argv[n],"-YMAX") == 0) && (n+1<argc) )
+         {
+            ymax = atoi(argv[n+1]);
+            assert( ((ymax == 1) || (ymax == 2) || (ymax == 4) || (ymax == 8) || (ymax == 16)) 
+                         && "The YMAX parameter must be 2, 4, 8, or 16" );
+         }
+         else if((strcmp(argv[n], "-MEMSZ") == 0) && (n+1 < argc))
+         {
+            ram_size = atoi(argv[n+1]);
+            isRamSizeSet = true;
+         }
+         else if((strcmp(argv[n], "-MCWAYS") == 0) && (n+1 < argc))
+         {
+            memc_ways = atoi(argv[n+1]);
+         }
+         else if((strcmp(argv[n], "-MCSETS") == 0) && (n+1 < argc))
+         {
+            memc_sets = atoi(argv[n+1]);
+         }
+         else if((strcmp(argv[n], "-L1_IWAYS") == 0) && (n+1 < argc))
+         {
+            l1_i_ways = atoi(argv[n+1]);
+         }
+         else if((strcmp(argv[n], "-L1_ISETS") == 0) && (n+1 < argc))
+	      {
+            l1_i_sets = atoi(argv[n+1]);
+         }
+         else if((strcmp(argv[n], "-L1_DWAYS") == 0) && (n+1 < argc))
+	      {
+            l1_d_ways = atoi(argv[n+1]);
+         }
+         else if((strcmp(argv[n], "-L1_DSETS") == 0) && (n+1 < argc))
+	      {
+            l1_d_sets = atoi(argv[n+1]);
+         }
+         else if((strcmp(argv[n], "-XLATENCY") == 0) && (n+1 < argc))
+	      {
+            xram_latency = atoi(argv[n+1]);
+         }
+         else if( (strcmp(argv[n],"-XFB") == 0) && (n+1<argc) )
+         {
+            xfb = atoi(argv[n+1]);
+         }
+         else if( (strcmp(argv[n],"-YFB") == 0) && (n+1<argc) )
+         {
+            yfb = atoi(argv[n+1]);
+         }
+         else if( (strcmp(argv[n], "-FBMODE") == 0) && (n+1 < argc))
+         {
+            fb_mode = atoi(argv[n+1]);
+         }
+         else if ((strcmp(argv[n], "-SOFT") == 0) && (n + 1 < argc))
+         {
+            std::cerr << "Warning: -SOFT is useless when using Almos, ignored" << std::endl;
+         }
+         else if ((strcmp(argv[n],"-DISK") == 0) && (n + 1 < argc))
+         {
+            strcpy(disk_name, argv[n + 1]);
+         }
+         else if( (strcmp(argv[n],"-BLKSZ") == 0) && (n+1<argc) )
+         {
+            blk_size = atoi(argv[n+1]);
+            assert(((blk_size % 512) == 0) && "BDEV: Block size must be multiple of 512 bytes");
+         }
+         else if ((strcmp(argv[n],"-DEBUG") == 0) && (n + 1 < argc))
+         {
+            debug_ok = true;
+            debug_from = atoi(argv[n + 1]);
+         }
+         else if ((strcmp(argv[n], "-MEMCID") == 0) && (n + 1 < argc))
+         {
+            debug_memc_id = atoi(argv[n + 1]);
+            assert((debug_memc_id < (xmax * ymax)) && 
+                   "debug_memc_id larger than xmax * ymax" );
+         }
+         else if ((strcmp(argv[n], "-PROCID") == 0) && (n + 1 < argc))
+         {
+            debug_proc_id = atoi(argv[n + 1]);
+            assert((debug_proc_id < (xmax * ymax * nprocs)) && 
+                   "debug_proc_id larger than XMAX * ymax * NB_PROCS");
+         }
+         else if ((strcmp(argv[n], "-FROZEN") == 0) && (n + 1 < argc))
+         {
+            frozen_cycles = atoi(argv[n + 1]);
+         }
+         else if ((strcmp(argv[n], "-PERIOD") == 0) && (n + 1 < argc))
+         {
+            debug_period = atoi(argv[n + 1]);
+         }
+         else
+         {
+            std::cout << "   Arguments are (key,value) couples." << std::endl;
+            std::cout << "   The order is not important." << std::endl;
+            std::cout << "   Accepted arguments are :" << std::endl << std::endl;
+            std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
+            std::cout << "     -NPROCS number_of_processors_per_cluster" << std::endl;
+            std::cout << "     -THREADS simulator's openmp threads number" << std::endl;
+            std::cout << "     -XMAX number_of_clusters_in_a_row" << std::endl;
+            std::cout << "     -YMAX number_of_clusters_in_a_column" << std::endl;
+            std::cout << "     -MCWAYS memory_cache_number_of_ways" << std::endl;
+            std::cout << "     -MCSETS memory_cache_number_of_sets" << std::endl;
+            std::cout << "     -L1_IWAYS L1_instruction_cache_number_of_ways" << std::endl;
+            std::cout << "     -L1_ISETS L1_instruction_cache_number_of_sets" << std::endl;
+            std::cout << "     -L1_DWAYS L1_data_cache_number_of_ways" << std::endl;
+            std::cout << "     -XLATENCY external_ram_latency_value" << std::endl;
+            std::cout << "     -XFB fram_buffer_number_of_pixels" << std::endl;
+            std::cout << "     -YFB fram_buffer_number_of_lines" << std::endl;
+            std::cout << "     -FBMODE fram buffer subsampling integer value "
+               "(YUV:420,YUV:422,RGB:0,RGB:16,RGB:32,RGBPAL:256)" << std::endl;
+            std::cout << "     -MEMSZ per-cluster memory size ( <= 12 MB when using Almos)" << std::endl;
+            std::cout << "     -L1_DSETS L1_data_cache_number_of_sets" << std::endl;
+            std::cout << "     -SOFT pathname_for_embedded_soft (GIET only)" << std::endl;
+            std::cout << "     -DISK pathname_for_disk_image" << std::endl;
+            std::cout << "     -BLKSZ sector size in bytes ( must be multiple of 512 bytes )" << std::endl;
+            std::cout << "     -DEBUG debug_start_cycle" << std::endl;
+            std::cout << "     -FROZEN max_number_of_lines" << std::endl;
+            std::cout << "     -PERIOD number_of_cycles between trace" << std::endl;
+            std::cout << "     -MEMCID index_memc_to_be_traced" << std::endl;
+            std::cout << "     -PROCID index_proc_to_be_traced" << std::endl;
+            exit(0);
+         }
+      }
+   }
+
+    // checking hardware parameters
+    assert( ( (xmax == 1) or (xmax == 2) or (xmax == 4) or
+              (xmax == 8) or (xmax == 16) ) and
+              "The XMAX parameter must be 1, 2, 4, 8 or 16" );
+
+    assert( ( (ymax == 1) or (ymax == 2) or (ymax == 4) or
+              (ymax == 8) or (ymax == 16) ) and
+              "The YMAX parameter must be 1, 2, 4, 8 or 16" );
+
+    assert( ( (nprocs == 1) or (nprocs == 2) or
+              (nprocs == 4) or (nprocs == 8) ) and
+             "The nprocs parameter must be 1, 2, 4 or 8" );
+
+    assert( (NB_DMA_CHANNELS < 9) and
+            "The NB_DMA_CHANNELS parameter must be smaller than 9" );
+
+    assert( (NB_TTY_CHANNELS < 15) and
+            "The NB_TTY_CHANNELS parameter must be smaller than 15" );
+
+    assert( (NB_NIC_CHANNELS < 9) and
+            "The NB_NIC_CHANNELS parameter must be smaller than 9" );
+
+    assert( (vci_address_width == 32) and
+            "VCI address width with ALMOS must be 32 bits" );
+
+    std::cout << std::endl;
+    std::cout << " - XMAX             = " << xmax << std::endl;
+    std::cout << " - YMAX             = " << ymax << std::endl;
+    std::cout << " - NPROCS           = " << nprocs <<  std::endl;
+    std::cout << " - NB_DMA_CHANNELS  = " << NB_DMA_CHANNELS <<  std::endl;
+    std::cout << " - NB_TTY_CHANNELS  = " << NB_TTY_CHANNELS <<  std::endl;
+    std::cout << " - NB_NIC_CHANNELS  = " << NB_NIC_CHANNELS <<  std::endl;
+    std::cout << " - MEMC_WAYS        = " << memc_ways << std::endl;
+    std::cout << " - MEMC_SETS        = " << memc_sets << std::endl;
+    std::cout << " - RAM_SIZE         = " << ram_size << std::endl;
+    std::cout << " - RAM_LATENCY      = " << xram_latency << std::endl;
+    std::cout << " - MAX_FROZEN       = " << frozen_cycles << std::endl;
+    std::cout << "[PROCS] " << nprocs * xmax * ymax << std::endl;
+
+    std::cout << std::endl;
+    // Internal and External VCI parameters definition
+    typedef soclib::caba::VciParams<vci_cell_width_int,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_int;
+
+    typedef soclib::caba::VciParams<vci_cell_width_ext,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_ext;
+
+#if USE_OPENMP
+   omp_set_dynamic(false);
+   omp_set_num_threads(threads_nr);
+   std::cerr << "Built with openmp version " << _OPENMP << std::endl;
+#endif
+
+   // Define parameters depending on mesh size
+   size_t   x_width;
+   size_t   y_width;
+
+   if      (xmax == 1) x_width = 0;
+   else if (xmax == 2) x_width = 1;
+   else if (xmax <= 4) x_width = 2;
+   else if (xmax <= 8) x_width = 3;
+   else                x_width = 4;
+
+   if      (ymax == 1) y_width = 0;
+   else if (ymax == 2) y_width = 1;
+   else if (ymax <= 4) y_width = 2;
+   else if (ymax <= 8) y_width = 3;
+   else                y_width = 4;
+
+   if((xmax == 1) && (ymax == 1))
+   {
+      cluster_io_id = 0;
+      ram_size      = (isRamSizeSet == true) ? ram_size : 0x8000000;
+      xicu_base     = 0x80f00000;
+      memc_base     = 0x80f40000;
+      mdma_base     = 0x80f30000;
+   }
+   else
+      cluster_io_id = 0xbfc00000 >> (vci_address_width - x_width - y_width); // index of cluster containing IOs
+
+   /////////////////////
+   //  Mapping Tables
+   /////////////////////
+
+   // internal network
+   MappingTable maptabd(vci_address_width,
+                        IntTab(x_width + y_width, 16 - x_width - y_width), 
+                        IntTab(x_width + y_width, vci_srcid_width - x_width - y_width), 
+                        0x00FFFF0000);
+
+   for (size_t x = 0; x < xmax; x++)
+   {
+      for (size_t y = 0; y < ymax; y++)
+      {
+         sc_uint<vci_address_width> offset;
+         offset = (sc_uint<vci_address_width>)cluster(x,y) 
+                   << (vci_address_width-x_width-y_width);
+
+         std::ostringstream    si;
+         si << "seg_xicu_" << x << "_" << y;
+         maptabd.add(Segment(si.str(), xicu_base + offset, XICU_SIZE, 
+                  IntTab(cluster(x,y),XICU_TGTID), false));
+
+         std::ostringstream    sd;
+         sd << "seg_mdma_" << x << "_" << y;
+         maptabd.add(Segment(sd.str(), mdma_base + offset, MDMA_SIZE, 
+                  IntTab(cluster(x,y),MDMA_TGTID), false));
+
+         std::ostringstream    sh;
+         sh << "seg_ram_" << x << "_" << y;
+         maptabd.add(Segment(sh.str(), RAM_BASE + offset, ram_size, 
+                  IntTab(cluster(x,y),MEMC_TGTID), true));
+
+         std::ostringstream    sconf;
+         sconf << "seg_memc_config_" << x << "_" << y;
+         maptabd.add(Segment(sconf.str(), memc_base + offset, MEMC_SIZE, 
+                             IntTab(cluster(x,y),MEMC_TGTID), true, true));
+
+         if ( cluster(x,y) == cluster_io_id )
+         {
+            maptabd.add(Segment("seg_mtty", MTTY_BASE, MTTY_SIZE, 
+                        IntTab(cluster(x,y),MTTY_TGTID), false));
+            maptabd.add(Segment("seg_fbuf", FBUF_BASE, FBUF_SIZE, 
+                        IntTab(cluster(x,y),FBUF_TGTID), false));
+            maptabd.add(Segment("seg_bdev", BDEV_BASE, BDEV_SIZE, 
+                        IntTab(cluster(x,y),BDEV_TGTID), false));
+            maptabd.add(Segment("seg_brom", BROM_BASE, BROM_SIZE, 
+                        IntTab(cluster(x,y),BROM_TGTID), true));
+            maptabd.add(Segment("seg_mnic", MNIC_BASE, MNIC_SIZE, 
+                        IntTab(cluster(x,y),MNIC_TGTID), false));
+            maptabd.add(Segment("seg_cdma", CDMA_BASE, CDMA_SIZE, 
+                        IntTab(cluster(x,y),CDMA_TGTID), false));
+            maptabd.add(Segment("seg_simh", SIMH_BASE, SIMH_SIZE, 
+                        IntTab(cluster(x,y),SIMH_TGTID), false));
+         }
+      }
+   }
+   std::cout << maptabd << std::endl;
+
+   // external network
+   MappingTable maptabx(vci_address_width, 
+                        IntTab(x_width+y_width), 
+                        IntTab(x_width+y_width), 
+                        0x00FFFF0000ULL);
+
+   for (size_t x = 0; x < xmax; x++)
+   {
+      for (size_t y = 0; y < ymax ; y++)
+      { 
+
+         sc_uint<vci_address_width> offset;
+         offset = (sc_uint<vci_address_width>)cluster(x,y) 
+                   << (vci_address_width-x_width-y_width);
+
+         std::ostringstream sh;
+         sh << "x_seg_memc_" << x << "_" << y;
+
+         maptabx.add(Segment(sh.str(), RAM_BASE + offset, 
+                     ram_size, IntTab(cluster(x,y)), false));
+      }
+   }
+   std::cout << maptabx << std::endl;
+
+   ////////////////////
+   // Signals
+   ///////////////////
+
+   std::cout << "Clock  .. ";
+   sc_clock           signal_clk("clk");
+   std::cout << ". [OK]" << std::endl;
+   sc_signal<bool>    signal_resetn("resetn");
+
+   // Horizontal inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>*** signal_dspin_h_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_inc", xmax-1, ymax, 3);
+
+   DspinSignals<dspin_cmd_width>*** signal_dspin_h_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_dec", xmax-1, ymax, 3);
+
+   DspinSignals<dspin_rsp_width>*** signal_dspin_h_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_inc", xmax-1, ymax, 2);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_h_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_dec", xmax-1, ymax, 2);
+
+   // Vertical inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>*** signal_dspin_v_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_inc", xmax, ymax-1, 3);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_v_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_dec", xmax, ymax-1, 3);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_v_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_inc", xmax, ymax-1, 2);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_v_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_dec", xmax, ymax-1, 2);
+
+   // Mesh boundaries DSPIN signals
+   DspinSignals<dspin_cmd_width>**** signal_dspin_false_cmd_in =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_cmd_in" , xmax, ymax, 4, 3);
+   DspinSignals<dspin_cmd_width>**** signal_dspin_false_cmd_out =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_cmd_out", xmax, ymax, 4, 3);
+   DspinSignals<dspin_rsp_width>**** signal_dspin_false_rsp_in =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_false_rsp_in" , xmax, ymax, 4, 2);
+   DspinSignals<dspin_rsp_width>**** signal_dspin_false_rsp_out =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_false_rsp_out", xmax, ymax, 4, 2);
+
+   ////////////////////////////
+   //      Loader    
+   ////////////////////////////
+
+   soclib::common::Loader loader(soft_name);
+
+   typedef soclib::common::GdbServer<soclib::common::Mips32ElIss> proc_iss;
+   proc_iss::set_loader(loader);
+
+   ////////////////////////////
+   // Clusters construction
+   ////////////////////////////
+
+   TsarXbarCluster<dspin_cmd_width,
+                   dspin_rsp_width,
+                   vci_param_int,
+                   vci_param_ext>*          clusters[xmax][ymax];
+
+#if USE_OPENMP
+#pragma omp parallel
+    {
+#pragma omp for
+#endif
+        for (size_t i = 0; i  < (xmax * ymax); i++)
+        {
+            size_t x = i / ymax;
+            size_t y = i % ymax;
+
+#if USE_OPENMP
+#pragma omp critical
+            {
+#endif
+            std::cout << std::endl;
+            std::cout << "Cluster_" << x << "_" << y << std::endl;
+            std::cout << std::endl;
+
+            std::ostringstream sc;
+            sc << "cluster_" << x << "_" << y;
+            clusters[x][y] = new TsarXbarCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>
+            (
+                sc.str().c_str(),
+                nprocs,
+                NB_TTY_CHANNELS,  
+                NB_DMA_CHANNELS, 
+                x,
+                y,
+                cluster(x,y),
+                maptabd,
+                maptabx,
+                x_width,
+                y_width,
+                vci_srcid_width - x_width - y_width,   // l_id width,
+                MEMC_TGTID,
+                XICU_TGTID,
+                MDMA_TGTID,
+                FBUF_TGTID,
+                MTTY_TGTID,
+                BROM_TGTID,
+                MNIC_TGTID,
+                CDMA_TGTID,
+                BDEV_TGTID,
+                SIMH_TGTID,
+                memc_ways,
+                memc_sets,
+                l1_i_ways,
+                l1_i_sets,
+                l1_d_ways,
+                l1_d_sets,
+                xram_latency,
+                (cluster(x,y) == cluster_io_id),
+                xfb,
+                yfb,
+                disk_name,
+                blk_size,
+                NB_NIC_CHANNELS,
+                nic_rx_name,
+                nic_tx_name,
+                NIC_TIMEOUT,
+                NB_CMA_CHANNELS,
+                loader,
+                frozen_cycles,
+                debug_from   ,
+                debug_ok and (cluster(x,y) == debug_memc_id),
+                debug_ok and (cluster(x,y) == debug_proc_id) 
+            );
+
+#if USE_OPENMP
+            } // end critical
+#endif
+        } // end for
+#if USE_OPENMP
+    }
+#endif
+
+   ///////////////////////////////////////////////////////////////
+   //     Net-list 
+   ///////////////////////////////////////////////////////////////
+
+   // Clock & RESET
+   for (size_t x = 0; x < (xmax); x++){
+      for (size_t y = 0; y < ymax; y++){
+         clusters[x][y]->p_clk                         (signal_clk);
+         clusters[x][y]->p_resetn                      (signal_resetn);
+      }
+   }
+
+   // Inter Clusters horizontal connections
+   if (xmax > 1){
+      for (size_t x = 0; x < (xmax-1); x++){
+         for (size_t y = 0; y < ymax; y++){
+            for (size_t k = 0; k < 3; k++){
+               clusters[x][y]->p_cmd_out[EAST][k]      (signal_dspin_h_cmd_inc[x][y][k]);
+               clusters[x+1][y]->p_cmd_in[WEST][k]     (signal_dspin_h_cmd_inc[x][y][k]);
+               clusters[x][y]->p_cmd_in[EAST][k]       (signal_dspin_h_cmd_dec[x][y][k]);
+               clusters[x+1][y]->p_cmd_out[WEST][k]    (signal_dspin_h_cmd_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               clusters[x][y]->p_rsp_out[EAST][k]      (signal_dspin_h_rsp_inc[x][y][k]);
+               clusters[x+1][y]->p_rsp_in[WEST][k]     (signal_dspin_h_rsp_inc[x][y][k]);
+               clusters[x][y]->p_rsp_in[EAST][k]       (signal_dspin_h_rsp_dec[x][y][k]);
+               clusters[x+1][y]->p_rsp_out[WEST][k]    (signal_dspin_h_rsp_dec[x][y][k]);
+            }
+         }
+      }
+   }
+   std::cout << std::endl << "Horizontal connections established" << std::endl;   
+
+   // Inter Clusters vertical connections
+   if (ymax > 1) {
+      for (size_t y = 0; y < (ymax-1); y++){
+         for (size_t x = 0; x < xmax; x++){
+            for (size_t k = 0; k < 3; k++){
+               clusters[x][y]->p_cmd_out[NORTH][k]     (signal_dspin_v_cmd_inc[x][y][k]);
+               clusters[x][y+1]->p_cmd_in[SOUTH][k]    (signal_dspin_v_cmd_inc[x][y][k]);
+               clusters[x][y]->p_cmd_in[NORTH][k]      (signal_dspin_v_cmd_dec[x][y][k]);
+               clusters[x][y+1]->p_cmd_out[SOUTH][k]   (signal_dspin_v_cmd_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               clusters[x][y]->p_rsp_out[NORTH][k]     (signal_dspin_v_rsp_inc[x][y][k]);
+               clusters[x][y+1]->p_rsp_in[SOUTH][k]    (signal_dspin_v_rsp_inc[x][y][k]);
+               clusters[x][y]->p_rsp_in[NORTH][k]      (signal_dspin_v_rsp_dec[x][y][k]);
+               clusters[x][y+1]->p_rsp_out[SOUTH][k]   (signal_dspin_v_rsp_dec[x][y][k]);
+            }
+         }
+      }
+   }
+   std::cout << "Vertical connections established" << std::endl;
+
+   // East & West boundary cluster connections
+   for (size_t y = 0; y < ymax; y++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[0][y]->p_cmd_in[WEST][k]        (signal_dspin_false_cmd_in[0][y][WEST][k]);
+         clusters[0][y]->p_cmd_out[WEST][k]       (signal_dspin_false_cmd_out[0][y][WEST][k]);
+         clusters[xmax-1][y]->p_cmd_in[EAST][k]   (signal_dspin_false_cmd_in[xmax-1][y][EAST][k]);
+         clusters[xmax-1][y]->p_cmd_out[EAST][k]  (signal_dspin_false_cmd_out[xmax-1][y][EAST][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[0][y]->p_rsp_in[WEST][k]        (signal_dspin_false_rsp_in[0][y][WEST][k]);
+         clusters[0][y]->p_rsp_out[WEST][k]       (signal_dspin_false_rsp_out[0][y][WEST][k]);
+         clusters[xmax-1][y]->p_rsp_in[EAST][k]   (signal_dspin_false_rsp_in[xmax-1][y][EAST][k]);
+         clusters[xmax-1][y]->p_rsp_out[EAST][k]  (signal_dspin_false_rsp_out[xmax-1][y][EAST][k]);
+      }
+   }
+
+   // North & South boundary clusters connections
+   for (size_t x = 0; x < xmax; x++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[x][0]->p_cmd_in[SOUTH][k]       (signal_dspin_false_cmd_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_cmd_out[SOUTH][k]      (signal_dspin_false_cmd_out[x][0][SOUTH][k]);
+         clusters[x][ymax-1]->p_cmd_in[NORTH][k]  (signal_dspin_false_cmd_in[x][ymax-1][NORTH][k]);
+         clusters[x][ymax-1]->p_cmd_out[NORTH][k] (signal_dspin_false_cmd_out[x][ymax-1][NORTH][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[x][0]->p_rsp_in[SOUTH][k]       (signal_dspin_false_rsp_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_rsp_out[SOUTH][k]      (signal_dspin_false_rsp_out[x][0][SOUTH][k]);
+         clusters[x][ymax-1]->p_rsp_in[NORTH][k]  (signal_dspin_false_rsp_in[x][ymax-1][NORTH][k]);
+         clusters[x][ymax-1]->p_rsp_out[NORTH][k] (signal_dspin_false_rsp_out[x][ymax-1][NORTH][k]);
+      }
+   }
+   std::cout << "North, South, West, East connections established" << std::endl;
+   std::cout << std::endl;
+
+
+   ////////////////////////////////////////////////////////
+   //   Simulation
+   ///////////////////////////////////////////////////////
+
+   sc_start(sc_core::sc_time(0, SC_NS));
+   signal_resetn = false;
+
+   // network boundaries signals
+   for (size_t x = 0; x < xmax ; x++){
+      for (size_t y = 0; y < ymax ; y++){
+         for (size_t a = 0; a < 4; a++){
+            for (size_t k = 0; k < 3; k++){
+               signal_dspin_false_cmd_in [x][y][a][k].write = false;
+               signal_dspin_false_cmd_in [x][y][a][k].read  = true;
+               signal_dspin_false_cmd_out[x][y][a][k].write = false;
+               signal_dspin_false_cmd_out[x][y][a][k].read  = true;
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               signal_dspin_false_rsp_in [x][y][a][k].write = false;
+               signal_dspin_false_rsp_in [x][y][a][k].read  = true;
+               signal_dspin_false_rsp_out[x][y][a][k].write = false;
+               signal_dspin_false_rsp_out[x][y][a][k].read  = true;
+            }
+         }
+      }
+   }
+
+#define STATS_CYCLES 10000000
+
+   sc_start(sc_core::sc_time(1, SC_NS));
+   signal_resetn = true;
+
+   uint64_t n = 0;
+   
+   while (!stop_called) {
+   	if (gettimeofday(&t1, NULL) != 0) {
+   		perror("gettimeofday");
+   		return EXIT_FAILURE;
+   	}
+   	sc_start(STATS_CYCLES);
+   	n += STATS_CYCLES;
+   	if (gettimeofday(&t2, NULL) != 0) {
+   		perror("gettimeofday");
+   		return EXIT_FAILURE;
+   	}
+   	ms1 = (uint64_t)t1.tv_sec * 1000ULL + (uint64_t)t1.tv_usec / 1000;
+   	ms2 = (uint64_t)t2.tv_sec * 1000ULL + (uint64_t)t2.tv_usec / 1000;
+   	std::cerr << "cycle " << n 
+                << " platform clock frequency " 
+                << (double)STATS_CYCLES / (double)(ms2 - ms1) 
+                << "Khz" << std::endl;
+   }
+   
+   // Free memory
+   for (size_t i = 0; i  < (xmax * ymax); i++)
+   {
+      size_t x = i / ymax;
+      size_t y = i % ymax;
+      delete clusters[x][y];
+   }
+
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_h_cmd_inc, xmax - 1, ymax, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_h_cmd_dec, xmax - 1, ymax, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_h_rsp_inc, xmax - 1, ymax, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_h_rsp_dec, xmax - 1, ymax, 2);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_v_cmd_inc, xmax, ymax - 1, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_v_cmd_dec, xmax, ymax - 1, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_v_rsp_inc, xmax, ymax - 1, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_v_rsp_dec, xmax, ymax - 1, 2);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_false_cmd_in, xmax, ymax, 4, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_false_cmd_out, xmax, ymax, 4, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_false_rsp_in, xmax, ymax, 4, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_false_rsp_out, xmax, ymax, 4, 2);
+
+   return EXIT_SUCCESS;
+}
+
+
+void handler(int dummy = 0) {
+   stop_called = true;
+   sc_stop();
+}
+
+void voidhandler(int dummy = 0) {}
+
+int sc_main (int argc, char *argv[])
+{
+   signal(SIGINT, handler);
+   signal(SIGPIPE, voidhandler);
+
+   try {
+      return _main(argc, argv);
+   } catch (std::exception &e) {
+      std::cout << e.what() << std::endl;
+   } catch (...) {
+      std::cout << "Unknown exception occured" << std::endl;
+      throw;
+   }
+   return 1;
+}
+
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
Index: /branches/fault_tolerance/platforms/almos-tsar-mipsel/top.desc
===================================================================
--- /branches/fault_tolerance/platforms/almos-tsar-mipsel/top.desc	(revision 724)
+++ /branches/fault_tolerance/platforms/almos-tsar-mipsel/top.desc	(revision 724)
@@ -0,0 +1,46 @@
+
+# -*- python -*-
+
+# internal VCI parameters values
+vci_cell_size_int   = 4
+vci_cell_size_ext   = 8
+
+vci_plen_size       = 8
+vci_addr_size       = 32
+vci_rerror_size     = 1
+vci_clen_size       = 1
+vci_rflag_size      = 1
+vci_srcid_size      = 14
+vci_pktid_size      = 4
+vci_trdid_size      = 4
+vci_wrplen_size     = 1
+
+# DSPIN network parameters values
+dspin_cmd_flit_size     = 39
+dspin_rsp_flit_size     = 32
+
+todo = Platform('caba', 'top.cpp',
+
+	uses = [
+            Uses('caba:tsar_xbar_cluster_almos', 
+                  vci_data_width_int = vci_cell_size_int,
+                  vci_data_width_ext = vci_cell_size_ext,
+                  dspin_cmd_width    = dspin_cmd_flit_size,
+                  dspin_rsp_width    = dspin_rsp_flit_size),
+
+	        Uses('common:elf_file_loader'),
+            Uses('common:plain_file_loader'),
+           ],
+
+    # default VCI parameters (global variables)
+    cell_size   = vci_cell_size_int,  
+	plen_size   = vci_plen_size,
+	addr_size   = vci_addr_size,
+	rerror_size = vci_rerror_size,
+	clen_size   = vci_clen_size,
+	rflag_size  = vci_rflag_size,
+	srcid_size  = vci_srcid_size,
+	pktid_size  = vci_pktid_size,
+	trdid_size  = vci_trdid_size,
+	wrplen_size = vci_wrplen_size,
+)
Index: /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd
===================================================================
--- /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd	(revision 724)
+++ /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd	(revision 724)
@@ -0,0 +1,107 @@
+
+# -*- python -*-
+
+Module('caba:tsar_xbar_cluster_almos', 
+    classname = 'soclib::caba::TsarXbarCluster',
+   tmpl_parameters = [
+      parameter.Int('dspin_cmd_width'),
+      parameter.Int('dspin_rsp_width'),
+        parameter.Module('vci_param_int', default = 'caba:vci_param',
+                          cell_size = parameter.Reference('vci_data_width_int')),
+        parameter.Module('vci_param_ext', default = 'caba:vci_param',
+                          cell_size = parameter.Reference('vci_data_width_ext')),
+        ],
+
+   header_files = [ '../source/include/tsar_xbar_cluster.h', 
+        ],
+
+   implementation_files = [ '../source/src/tsar_xbar_cluster.cpp', 
+        ],
+
+   uses = [
+      Uses('caba:base_module'),
+      Uses('common:mapping_table'),
+      Uses('common:iss2'),
+              
+      Uses('caba:vci_cc_vcache_wrapper', 
+              cell_size       = parameter.Reference('vci_data_width_int'),
+              dspin_in_width  = parameter.Reference('dspin_cmd_width'),
+              dspin_out_width = parameter.Reference('dspin_rsp_width'),
+              iss_t           = 'common:gdb_iss', 
+              gdb_iss_t       = 'common:mips32el'),
+
+      Uses('caba:vci_mem_cache',
+              memc_cell_size_int = parameter.Reference('vci_data_width_int'),
+              memc_cell_size_ext = parameter.Reference('vci_data_width_ext'),
+              dspin_in_width  = parameter.Reference('dspin_rsp_width'),
+              dspin_out_width = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:vci_simple_rom',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_simple_ram',
+              cell_size       = parameter.Reference('vci_data_width_ext')),
+
+      Uses('caba:vci_simple_ram',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_xicu',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:dspin_local_crossbar', 
+              flit_width      = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:dspin_local_crossbar', 
+              flit_width      = parameter.Reference('dspin_rsp_width')),
+
+      Uses('caba:virtual_dspin_router', 
+              flit_width      = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:virtual_dspin_router', 
+              flit_width      = parameter.Reference('dspin_rsp_width')),
+
+      Uses('caba:vci_multi_tty',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_framebuffer',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_multi_nic',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_chbuf_dma',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_block_device_tsar',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_multi_dma',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_dspin_target_wrapper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_dspin_initiator_wrapper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_simhelper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('common:elf_file_loader'),
+      ],
+
+   ports = [
+      Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+      Port('caba:clock_in', 'p_clk', auto = 'clock'),
+      Port('caba:dspin_output', 'p_cmd_out', [4, 3], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+      Port('caba:dspin_input', 'p_cmd_in', [4, 3], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+      Port('caba:dspin_output', 'p_rsp_out', [4, 2], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')), 
+      Port('caba:dspin_input', 'p_rsp_in', [4, 2], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')),
+      ],
+)
+
+
Index: /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h
===================================================================
--- /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h	(revision 724)
+++ /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h	(revision 724)
@@ -0,0 +1,292 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_xbar_cluster.h
+// Author: Alain Greiner
+// Copyright: UPMC/LIP6
+// Date : march 2013
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef SOCLIB_CABA_TSAR_XBAR_CLUSTER_H
+#define SOCLIB_CABA_TSAR_XBAR_CLUSTER_H
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "mips32.h"
+#include "vci_simple_ram.h"
+#include "vci_simple_rom.h"
+#include "vci_xicu.h"
+#include "dspin_local_crossbar.h"
+#include "vci_dspin_initiator_wrapper.h"
+#include "vci_dspin_target_wrapper.h"
+#include "virtual_dspin_router.h"
+#include "vci_multi_tty.h"
+#include "vci_multi_nic.h"
+#include "vci_chbuf_dma.h"
+#include "vci_block_device_tsar.h"
+#include "vci_framebuffer.h"
+#include "vci_multi_dma.h"
+#include "vci_mem_cache.h"
+#include "vci_cc_vcache_wrapper.h"
+#include "vci_simhelper.h"
+
+namespace soclib { namespace caba {
+
+///////////////////////////////////////////////////////////////////////////
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext>  class TsarXbarCluster
+///////////////////////////////////////////////////////////////////////////
+    : public soclib::caba::BaseModule
+{
+    public:
+
+    // Used in destructor
+    size_t n_procs;
+
+    // Ports
+    sc_in<bool>                                     p_clk;
+    sc_in<bool>                                     p_resetn;
+    soclib::caba::DspinOutput<dspin_cmd_width>      **p_cmd_out;
+    soclib::caba::DspinInput<dspin_cmd_width>       **p_cmd_in;
+    soclib::caba::DspinOutput<dspin_rsp_width>      **p_rsp_out;
+    soclib::caba::DspinInput<dspin_rsp_width>       **p_rsp_in;
+
+    // interrupt signals
+    sc_signal<bool>         signal_false;
+    sc_signal<bool>         signal_irq_memc;
+    sc_signal<bool>         signal_proc_it[8];
+    sc_signal<bool>         signal_irq_mdma[8];
+    sc_signal<bool>         signal_irq_mtty[23];
+    sc_signal<bool>         signal_irq_mnic_rx[8];  // unused
+    sc_signal<bool>         signal_irq_mnic_tx[8];  // unused
+    sc_signal<bool>         signal_irq_chbuf[8];  // unused
+    sc_signal<bool>         signal_irq_bdev;
+
+    // DSPIN signals between DSPIN routers and local_crossbars
+    DspinSignals<dspin_cmd_width>   signal_dspin_cmd_l2g_d;
+    DspinSignals<dspin_cmd_width>   signal_dspin_cmd_g2l_d;
+    DspinSignals<dspin_cmd_width>   signal_dspin_m2p_l2g_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_m2p_g2l_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_clack_l2g_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_clack_g2l_c;
+    DspinSignals<dspin_rsp_width>   signal_dspin_rsp_l2g_d;
+    DspinSignals<dspin_rsp_width>   signal_dspin_rsp_g2l_d;
+    DspinSignals<dspin_rsp_width>   signal_dspin_p2m_l2g_c;
+    DspinSignals<dspin_rsp_width>   signal_dspin_p2m_g2l_c;
+
+    // Direct VCI signals to VCI/DSPIN wrappers
+    VciSignals<vci_param_int>       signal_vci_ini_proc[8];
+    VciSignals<vci_param_int>       signal_vci_ini_mdma;
+    VciSignals<vci_param_int>       signal_vci_ini_bdev;
+    VciSignals<vci_param_int>       signal_vci_ini_chbuf;
+
+    VciSignals<vci_param_int>       signal_vci_tgt_memc;
+    VciSignals<vci_param_int>       signal_vci_tgt_xicu;
+    VciSignals<vci_param_int>       signal_vci_tgt_mdma;
+    VciSignals<vci_param_int>       signal_vci_tgt_mtty;
+    VciSignals<vci_param_int>       signal_vci_tgt_bdev;
+    VciSignals<vci_param_int>       signal_vci_tgt_brom;
+    VciSignals<vci_param_int>       signal_vci_tgt_fbuf;
+    VciSignals<vci_param_int>       signal_vci_tgt_mnic;
+    VciSignals<vci_param_int>       signal_vci_tgt_chbuf;
+    VciSignals<vci_param_int>       signal_vci_tgt_simh;
+
+    // Direct DSPIN signals to local crossbars
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_proc_i[8];
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_proc_i[8];
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_mdma_i;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_mdma_i;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_bdev_i;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_bdev_i;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_chbuf_i;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_chbuf_i;
+
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_memc_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_memc_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_xicu_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_xicu_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_mdma_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_mdma_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_mtty_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_mtty_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_bdev_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_bdev_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_brom_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_brom_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_fbuf_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_fbuf_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_mnic_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_mnic_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_chbuf_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_chbuf_t;
+    DspinSignals<dspin_cmd_width>     signal_dspin_cmd_simh_t;
+    DspinSignals<dspin_rsp_width>     signal_dspin_rsp_simh_t;
+
+    // Coherence DSPIN signals to local crossbar
+    DspinSignals<dspin_cmd_width>     signal_dspin_m2p_memc;
+    DspinSignals<dspin_cmd_width>     signal_dspin_clack_memc;
+    DspinSignals<dspin_rsp_width>     signal_dspin_p2m_memc;
+    DspinSignals<dspin_cmd_width>     signal_dspin_m2p_proc[8];
+    DspinSignals<dspin_cmd_width>     signal_dspin_clack_proc[8];
+    DspinSignals<dspin_rsp_width>     signal_dspin_p2m_proc[8];
+
+    // external RAM to MEMC VCI signal
+    VciSignals<vci_param_ext>         signal_vci_xram;
+
+    // Components
+
+    VciCcVCacheWrapper<vci_param_int,
+                       dspin_cmd_width,
+                       dspin_rsp_width,
+                       GdbServer<Mips32ElIss> >*  proc[8];
+
+    VciDspinInitiatorWrapper<vci_param_int,
+                             dspin_cmd_width,
+                             dspin_rsp_width>*    wi_proc[8];
+
+    VciMemCache<vci_param_int,
+                vci_param_ext,
+                dspin_rsp_width,
+                dspin_cmd_width>*                 memc;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_memc;
+
+    VciXicu<vci_param_int>*                       xicu;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_xicu;
+
+    VciMultiDma<vci_param_int>*                   mdma;
+
+    VciDspinInitiatorWrapper<vci_param_int,
+                             dspin_cmd_width,
+                             dspin_rsp_width>*    wi_mdma;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_mdma;
+
+    VciSimpleRam<vci_param_ext>*                  xram;
+
+    VciSimpleRom<vci_param_int>*                  brom;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_brom;
+
+    VciMultiTty<vci_param_int>*                   mtty;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_mtty;
+
+    VciSimhelper<vci_param_int>*                  simhelper;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_simhelper;
+
+
+    VciFrameBuffer<vci_param_int>*                fbuf;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_fbuf;
+
+    VciMultiNic<vci_param_int>*                   mnic;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_mnic;
+
+    VciChbufDma<vci_param_int>*                   chbuf;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_chbuf;
+
+    VciDspinInitiatorWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wi_chbuf;
+
+    VciBlockDeviceTsar<vci_param_int>*            bdev;
+
+    VciDspinInitiatorWrapper<vci_param_int,
+                             dspin_cmd_width,
+                             dspin_rsp_width>*    wi_bdev;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_bdev;
+
+    DspinLocalCrossbar<dspin_cmd_width>*          xbar_cmd_d;
+    DspinLocalCrossbar<dspin_rsp_width>*          xbar_rsp_d;
+    DspinLocalCrossbar<dspin_cmd_width>*          xbar_m2p_c;
+    DspinLocalCrossbar<dspin_rsp_width>*          xbar_p2m_c;
+    DspinLocalCrossbar<dspin_cmd_width>*          xbar_clack_c;
+
+    VirtualDspinRouter<dspin_cmd_width>*          router_cmd;
+    VirtualDspinRouter<dspin_rsp_width>*          router_rsp;
+
+    TsarXbarCluster( sc_module_name                     insname,
+                     size_t                             nb_procs,      // processors
+                     size_t                             nb_ttys,       // TTY terminals
+                     size_t                             nb_dmas,       //  DMA channels
+                     size_t                             x,             // x coordinate
+                     size_t                             y,             // y coordinate
+                     size_t                             cluster,       // y + ymax*x
+                     const soclib::common::MappingTable &mtd,          // internal
+                     const soclib::common::MappingTable &mtx,          // external
+                     size_t                             x_width,       // x field bits
+                     size_t                             y_width,       // y field bits
+                     size_t                             l_width,       // l field bits
+                     size_t                             tgtid_memc,
+                     size_t                             tgtid_xicu,
+                     size_t                             tgtid_mdma,
+                     size_t                             tgtid_fbuf,
+                     size_t                             tgtid_mtty,
+                     size_t                             tgtid_brom,
+                     size_t                             tgtid_mnic,
+                     size_t                             tgtid_chbuf,
+                     size_t                             tgtid_bdev,
+                     size_t                             tgtid_simh,
+                     size_t                             memc_ways,
+                     size_t                             memc_sets,
+                     size_t                             l1_i_ways,
+                     size_t                             l1_i_sets,
+                     size_t                             l1_d_ways,
+                     size_t                             l1_d_sets,
+                     size_t                             xram_latency,  // external ram
+                     bool                               io,            // I/O cluster
+                     size_t                             xfb,           // fbf pixels
+                     size_t                             yfb,           // fbf lines
+                     char*                              disk_name,     // virtual disk
+                     size_t                             block_size,    // block size
+                     size_t                             nic_channels,  // number channels
+                     char*                              nic_rx_name,   // filename rx
+                     char*                              nic_tx_name,   // filename tx
+                     uint32_t                           nic_timeout,   // cycles
+                     size_t                             chbufdma_channels,  // number channels
+                     const Loader                       &loader,
+                     uint32_t                           frozen_cycles,
+                     uint32_t                           start_debug_cycle,
+                     bool                               memc_debug_ok,
+                     bool                               proc_debug_ok);
+
+    ~TsarXbarCluster();
+
+};
+}}
+
+#endif
Index: /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp
===================================================================
--- /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/almos-tsar-mipsel/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp	(revision 724)
@@ -0,0 +1,903 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_xbar_cluster.cpp
+// Author: Alain Greiner
+// Copyright: UPMC/LIP6
+// Date : march 2011
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+// This file define a TSAR cluster architecture with virtual memory:
+// - It uses two virtual_dspin_router as distributed global interconnect
+// - It uses four dspin_local_crossbar as local interconnect
+// - It uses the vci_cc_vcache_wrapper
+// - It uses the vci_mem_cache
+// - It contains a private RAM with a variable latency to emulate the L3 cache
+// - It can contains 1, 2 or 4 processors
+// - Each processor has a private dma channel (vci_multi_dma)
+// - It uses the vci_xicu interrupt controller
+// - The peripherals MTTY, BDEV, FBUF, MNIC and BROM are in cluster (0,0)
+// - The Multi-TTY component controls up to 15 terminals.
+// - Each Multi-DMA component controls up to 8 DMA channels.
+// - The DMA IRQs are connected to IRQ_IN[8]...IRQ_IN[15]
+// - The TTY IRQs are connected to IRQ_IN[16]...IRQ_IN[30]
+// - The BDEV IRQ is connected to IRQ_IN[31]
+//////////////////////////////////////////////////////////////////////////////////
+
+#include "../include/tsar_xbar_cluster.h"
+
+
+namespace soclib {
+namespace caba  {
+
+////////////////////////////////////////////////////////////////////////////////////
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext> TsarXbarCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>::TsarXbarCluster(
+////////////////////////////////////////////////////////////////////////////////////
+         sc_module_name                     insname,
+         size_t                             nb_procs,
+         size_t                             nb_ttys,
+         size_t                             nb_dmas,
+         size_t                             x_id,
+         size_t                             y_id,
+         size_t                             cluster_id,
+         const soclib::common::MappingTable &mtd,
+         const soclib::common::MappingTable &mtx,
+         size_t                             x_width,
+         size_t                             y_width,
+         size_t                             l_width,
+         size_t                             tgtid_memc,
+         size_t                             tgtid_xicu,
+         size_t                             tgtid_mdma,
+         size_t                             tgtid_fbuf,
+         size_t                             tgtid_mtty,
+         size_t                             tgtid_brom,
+         size_t                             tgtid_mnic,
+         size_t                             tgtid_chbuf,
+         size_t                             tgtid_bdev,
+         size_t                             tgtid_simh,
+         size_t                             memc_ways,
+         size_t                             memc_sets,
+         size_t                             l1_i_ways,
+         size_t                             l1_i_sets,
+         size_t                             l1_d_ways,
+         size_t                             l1_d_sets,
+         size_t                             xram_latency,
+         bool                               io,
+         size_t                             xfb,
+         size_t                             yfb,
+         char*                              disk_name,
+         size_t                             block_size,
+         size_t                             nic_channels,
+         char*                              nic_rx_name,
+         char*                              nic_tx_name,
+         uint32_t                           nic_timeout,
+         size_t                             chbufdma_channels,
+         const Loader                      &loader,
+         uint32_t                           frozen_cycles,
+         uint32_t                           debug_start_cycle,
+         bool                               memc_debug_ok,
+         bool                               proc_debug_ok)
+            : soclib::caba::BaseModule(insname),
+            p_clk("clk"),
+            p_resetn("resetn")
+
+{
+
+    n_procs = nb_procs;
+
+    // Vectors of ports definition
+    p_cmd_in  = alloc_elems<DspinInput<dspin_cmd_width> >  ("p_cmd_in",  4, 3);
+    p_cmd_out = alloc_elems<DspinOutput<dspin_cmd_width> > ("p_cmd_out", 4, 3);
+    p_rsp_in  = alloc_elems<DspinInput<dspin_rsp_width> >  ("p_rsp_in",  4, 2);
+    p_rsp_out = alloc_elems<DspinOutput<dspin_rsp_width> > ("p_rsp_out", 4, 2);
+
+    /////////////////////////////////////////////////////////////////////////////
+    // Components definition
+    /////////////////////////////////////////////////////////////////////////////
+
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        std::ostringstream sproc;
+        sproc << "proc_" << x_id << "_" << y_id << "_" << p;
+        proc[p] = new VciCcVCacheWrapper<vci_param_int,
+                                         dspin_cmd_width,
+                                         dspin_rsp_width,
+                                         GdbServer<Mips32ElIss> >(
+                      sproc.str().c_str(),
+                      cluster_id * nb_procs + p,      // GLOBAL PROC_ID
+                      mtd,                            // Mapping Table
+                      IntTab(cluster_id,p),           // SRCID
+                      (cluster_id << l_width) + p,    // CC_GLOBAL_ID
+                      8,                              // ITLB ways
+                      8,                              // ITLB sets
+                      8,                              // DTLB ways
+                      8,                              // DTLB sets
+                      l1_i_ways,l1_i_sets, 16,        // ICACHE size
+                      l1_d_ways,l1_d_sets, 16,        // DCACHE size
+                      4,                              // WBUF nlines
+                      4,                              // WBUF nwords
+                      x_width,
+                      y_width,
+                      frozen_cycles,                  // max frozen cycles
+                      debug_start_cycle,
+                      proc_debug_ok);
+
+        std::ostringstream swip;
+        swip << "wi_proc_" << x_id << "_" << y_id << "_" << p;
+        wi_proc[p] = new VciDspinInitiatorWrapper<vci_param_int,
+                                                  dspin_cmd_width,
+                                                  dspin_rsp_width>(
+                     swip.str().c_str(),
+                     x_width + y_width + l_width);
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream smemc;
+    smemc << "memc_" << x_id << "_" << y_id;
+    memc = new VciMemCache<vci_param_int,
+                           vci_param_ext,
+                           dspin_rsp_width,
+                           dspin_cmd_width>(
+                     smemc.str().c_str(),
+                     mtd,                                // Mapping Table direct space
+                     mtx,                                // Mapping Table external space
+                     IntTab(cluster_id),                 // SRCID external space
+                     IntTab(cluster_id, tgtid_memc),     // TGTID direct space
+                     //(cluster_id << l_width) + nb_procs, // CC_GLOBAL_ID
+                     x_width,                            // Number of x bits in platform
+                     y_width,                            // Number of y bits in platform
+                     memc_ways, memc_sets, 16,           // CACHE SIZE
+                     3,                                  // MAX NUMBER OF COPIES
+                     4096,                               // HEAP SIZE
+                     8,                                  // TRANSACTION TABLE DEPTH
+                     8,                                  // UPDATE TABLE DEPTH
+                     8,                                  // INVALIDATE TABLE DEPTH
+                     debug_start_cycle,
+                     memc_debug_ok);
+
+    wt_memc = new VciDspinTargetWrapper<vci_param_int,
+                                        dspin_cmd_width,
+                                        dspin_rsp_width>(
+                     "wt_memc",
+                     x_width + y_width + l_width);
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream sxram;
+    sxram << "xram_" << x_id << "_" << y_id;
+    xram = new VciSimpleRam<vci_param_ext>(
+                     sxram.str().c_str(),
+                     IntTab(cluster_id),
+                     mtx,
+                     loader,
+                     xram_latency);
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream sxicu;
+    sxicu << "xicu_" << x_id << "_" << y_id;
+    xicu = new VciXicu<vci_param_int>(
+                     sxicu.str().c_str(),
+                     mtd,                               // mapping table
+                     IntTab(cluster_id, tgtid_xicu),    // TGTID_D
+                     nb_procs,                          // number of timer IRQs
+                     32,                                // number of hard IRQs
+                     32,                                // number of soft IRQs
+                     nb_procs);                         // number of output IRQs
+
+    wt_xicu = new VciDspinTargetWrapper<vci_param_int,
+                                        dspin_cmd_width,
+                                        dspin_rsp_width>(
+                     "wt_xicu",
+                     x_width + y_width + l_width);
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream smdma;
+    smdma << "mdma_" << x_id << "_" << y_id;
+    mdma = new VciMultiDma<vci_param_int>(
+                     smdma.str().c_str(),
+                     mtd,
+                     IntTab(cluster_id, nb_procs),        // SRCID
+                     IntTab(cluster_id, tgtid_mdma),      // TGTID
+                     64,                                  // burst size
+                     nb_dmas);                            // number of IRQs
+
+    wt_mdma = new VciDspinTargetWrapper<vci_param_int,
+                                        dspin_cmd_width,
+                                        dspin_rsp_width>(
+                     "wt_mdma",
+                     x_width + y_width + l_width);
+
+    wi_mdma = new VciDspinInitiatorWrapper<vci_param_int,
+                                           dspin_cmd_width,
+                                           dspin_rsp_width>(
+                     "wi_mdma",
+                     x_width + y_width + l_width);
+
+    /////////////////////////////////////////////////////////////////////////////
+    size_t nb_direct_initiators      = nb_procs + 1;
+    size_t nb_direct_targets         = 3;
+    if (io)
+    {
+        nb_direct_initiators         = nb_procs + 3;
+        nb_direct_targets            = 10;
+    }
+
+    xbar_cmd_d = new DspinLocalCrossbar<dspin_cmd_width>(
+                     "xbar_cmd_d",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     nb_direct_initiators,         // number of local of sources
+                     nb_direct_targets,            // number of local dests 
+                     2, 2,                         // fifo depths  
+                     true,                         // CMD
+                     true,                         // use local routing table 
+                     false );                      // no broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    xbar_rsp_d = new DspinLocalCrossbar<dspin_rsp_width>(
+                     "xbar_rsp_d",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     nb_direct_targets,            // number of local sources
+                     nb_direct_initiators,         // number of local dests
+                     2, 2,                         // fifo depths  
+                     false,                        // RSP
+                     false,                        // don't use local routing table 
+                     false );                      // no broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    xbar_m2p_c = new DspinLocalCrossbar<dspin_cmd_width>(
+                     "xbar_m2p_c",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local targets 
+                     2, 2,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // don't use local routing table
+                     true );                       // broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    xbar_p2m_c = new DspinLocalCrossbar<dspin_rsp_width>(
+                     "xbar_p2m_c",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, 0,          // l_width unused on p2m network
+                     nb_procs,                     // number of local sources
+                     1,                            // number of local dests
+                     2, 2,                         // fifo depths
+                     false,                        // RSP
+                     false,                        // don't use local routing table
+                     false );                      // no broadcast 
+
+    /////////////////////////////////////////////////////////////////////////////
+    xbar_clack_c = new DspinLocalCrossbar<dspin_cmd_width>(
+                     "xbar_clack_c",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local targets 
+                     1, 1,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // don't use local routing table
+                     false);                       // broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    router_cmd = new VirtualDspinRouter<dspin_cmd_width>(
+                     "router_cmd",
+                     x_id,y_id,                    // coordinate in the mesh
+                     x_width, y_width,             // x & y fields width
+                     3,                            // nb virtual channels
+                     4,4);                         // input & output fifo depths
+
+    /////////////////////////////////////////////////////////////////////////////
+    router_rsp = new VirtualDspinRouter<dspin_rsp_width>(
+                     "router_rsp",
+                     x_id,y_id,                    // coordinates in mesh
+                     x_width, y_width,             // x & y fields width
+                     2,                            // nb virtual channels
+                     4,4);                         // input & output fifo depths
+
+    // IO cluster components
+    if (io)
+    {
+        /////////////////////////////////////////////
+        brom = new VciSimpleRom<vci_param_int>(
+                     "brom",
+                     IntTab(cluster_id, tgtid_brom),
+                     mtd,
+                     loader);
+
+        wt_brom = new VciDspinTargetWrapper<vci_param_int,
+                                            dspin_cmd_width,
+                                            dspin_rsp_width>(
+                     "wt_brom",
+                     x_width + y_width + l_width);
+
+        /////////////////////////////////////////////
+        fbuf = new VciFrameBuffer<vci_param_int>(
+                     "fbuf",
+                     IntTab(cluster_id, tgtid_fbuf),
+                     mtd,
+                     xfb, yfb);
+
+        wt_fbuf = new VciDspinTargetWrapper<vci_param_int,
+                                            dspin_cmd_width,
+                                            dspin_rsp_width>(
+                     "wt_fbuf",
+                     x_width + y_width + l_width);
+
+        /////////////////////////////////////////////
+        bdev = new VciBlockDeviceTsar<vci_param_int>(
+                     "bdev",
+                     mtd,
+                     IntTab(cluster_id, nb_procs + 1),
+                     IntTab(cluster_id, tgtid_bdev),
+                     disk_name,
+                     block_size,
+                     64);            // burst size
+
+        wt_bdev = new VciDspinTargetWrapper<vci_param_int,
+                                            dspin_cmd_width,
+                                            dspin_rsp_width>(
+                     "wt_bdev",
+                     x_width + y_width + l_width);
+
+        wi_bdev = new VciDspinInitiatorWrapper<vci_param_int,
+                                               dspin_cmd_width,
+                                               dspin_rsp_width>(
+                     "wi_bdev",
+                     x_width + y_width + l_width);
+
+        int mac = 0xBEEF0000;
+        mnic = new VciMultiNic<vci_param_int>(
+                     "mnic",
+                     IntTab(cluster_id, tgtid_mnic),
+                     mtd,
+                     nic_channels,
+                     nic_rx_name,
+                     nic_tx_name,
+                     mac,             // mac_4 address
+                     0xBABE );           // mac_2 address
+
+        wt_mnic = new VciDspinTargetWrapper<vci_param_int,
+                                           dspin_cmd_width,
+                                           dspin_rsp_width>(
+                    "wt_mnic",
+                    x_width + y_width + l_width);
+
+        /////////////////////////////////////////////
+        chbuf = new VciChbufDma<vci_param_int>(
+                     "chbuf_dma",
+                     mtd,
+                     IntTab(cluster_id, nb_procs + 2),
+                     IntTab(cluster_id, tgtid_chbuf),
+                     64,
+                     chbufdma_channels); 
+
+        wt_chbuf = new VciDspinTargetWrapper<vci_param_int,
+                                            dspin_cmd_width,
+                                            dspin_rsp_width>(
+                     "wt_chbuf",
+                     x_width + y_width + l_width);
+
+        wi_chbuf = new VciDspinInitiatorWrapper<vci_param_int,
+                                            dspin_cmd_width,
+                                            dspin_rsp_width>(
+                     "wi_chbuf",
+                     x_width + y_width + l_width);
+
+        /////////////////////////////////////////////
+        std::vector<std::string> vect_names;
+        for (size_t tid = 0; tid < nb_ttys; tid++)
+        {
+            std::ostringstream term_name;
+            term_name <<  "tty" << tid;
+            vect_names.push_back(term_name.str().c_str());
+        }
+        mtty = new VciMultiTty<vci_param_int>(
+                     "mtty",
+                     IntTab(cluster_id, tgtid_mtty),
+                     mtd,
+                     vect_names);
+
+        wt_mtty = new VciDspinTargetWrapper<vci_param_int,
+                                            dspin_cmd_width,
+                                            dspin_rsp_width>(
+                     "wt_mtty",
+                     x_width + y_width + l_width);
+
+        simhelper = new VciSimhelper<vci_param_int>(
+                     "sim_helper",
+                     IntTab(cluster_id, tgtid_simh),
+                     mtd);
+
+        wt_simhelper = new VciDspinTargetWrapper<vci_param_int,
+                                                 dspin_cmd_width,
+                                                 dspin_rsp_width>(
+                     "wt_simhelper",
+                     x_width + y_width + l_width);
+    }
+
+    ////////////////////////////////////
+    // Connections are defined here
+    ////////////////////////////////////
+
+    //////////////////////// CMD ROUTER and RSP ROUTER
+    router_cmd->p_clk                        (this->p_clk);
+    router_cmd->p_resetn                     (this->p_resetn);
+    router_rsp->p_clk                        (this->p_clk);
+    router_rsp->p_resetn                     (this->p_resetn);
+
+    for (int i = 0; i < 4; i++)
+    {
+        for (int k = 0; k < 3; k++)
+        {
+            router_cmd->p_out[i][k]          (this->p_cmd_out[i][k]);
+            router_cmd->p_in[i][k]           (this->p_cmd_in[i][k]);
+        }
+
+        for (int k = 0; k < 2; k++)
+        {
+            router_rsp->p_out[i][k]          (this->p_rsp_out[i][k]);
+            router_rsp->p_in[i][k]           (this->p_rsp_in[i][k]);
+        }
+    }
+
+    router_cmd->p_out[4][0]                  (signal_dspin_cmd_g2l_d);
+    router_cmd->p_out[4][1]                  (signal_dspin_m2p_g2l_c);
+    router_cmd->p_out[4][2]                  (signal_dspin_clack_g2l_c);
+    router_cmd->p_in[4][0]                   (signal_dspin_cmd_l2g_d);
+    router_cmd->p_in[4][1]                   (signal_dspin_m2p_l2g_c);
+    router_cmd->p_in[4][2]                   (signal_dspin_clack_l2g_c);
+
+    router_rsp->p_out[4][0]                  (signal_dspin_rsp_g2l_d);
+    router_rsp->p_out[4][1]                  (signal_dspin_p2m_g2l_c);
+    router_rsp->p_in[4][0]                   (signal_dspin_rsp_l2g_d);
+    router_rsp->p_in[4][1]                   (signal_dspin_p2m_l2g_c);
+
+
+    std::cout << "  - CMD & RSP routers connected" << std::endl;
+
+    ///////////////////// CMD DSPIN  local crossbar direct
+    xbar_cmd_d->p_clk                            (this->p_clk);
+    xbar_cmd_d->p_resetn                         (this->p_resetn);
+    xbar_cmd_d->p_global_out                     (signal_dspin_cmd_l2g_d);
+    xbar_cmd_d->p_global_in                      (signal_dspin_cmd_g2l_d);
+
+    xbar_cmd_d->p_local_out[tgtid_memc]          (signal_dspin_cmd_memc_t);
+    xbar_cmd_d->p_local_out[tgtid_xicu]          (signal_dspin_cmd_xicu_t);
+    xbar_cmd_d->p_local_out[tgtid_mdma]          (signal_dspin_cmd_mdma_t);
+
+    xbar_cmd_d->p_local_in[nb_procs]             (signal_dspin_cmd_mdma_i);
+
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_cmd_d->p_local_in[p]                (signal_dspin_cmd_proc_i[p]);
+
+    if (io)
+    {
+        xbar_cmd_d->p_local_out[tgtid_mtty]      (signal_dspin_cmd_mtty_t);
+        xbar_cmd_d->p_local_out[tgtid_brom]      (signal_dspin_cmd_brom_t);
+        xbar_cmd_d->p_local_out[tgtid_bdev]      (signal_dspin_cmd_bdev_t);
+        xbar_cmd_d->p_local_out[tgtid_fbuf]      (signal_dspin_cmd_fbuf_t);
+        xbar_cmd_d->p_local_out[tgtid_mnic]      (signal_dspin_cmd_mnic_t);
+        xbar_cmd_d->p_local_out[tgtid_chbuf]     (signal_dspin_cmd_chbuf_t);
+        xbar_cmd_d->p_local_out[tgtid_simh]      (signal_dspin_cmd_simh_t);
+
+        xbar_cmd_d->p_local_in[nb_procs + 1]     (signal_dspin_cmd_bdev_i);
+        xbar_cmd_d->p_local_in[nb_procs + 2]     (signal_dspin_cmd_chbuf_i);
+    }
+
+    std::cout << "  - Command Direct crossbar connected" << std::endl;
+
+    //////////////////////// RSP DSPIN  local crossbar direct
+    xbar_rsp_d->p_clk                            (this->p_clk);
+    xbar_rsp_d->p_resetn                         (this->p_resetn);
+    xbar_rsp_d->p_global_out                     (signal_dspin_rsp_l2g_d);
+    xbar_rsp_d->p_global_in                      (signal_dspin_rsp_g2l_d);
+
+    xbar_rsp_d->p_local_in[tgtid_memc]           (signal_dspin_rsp_memc_t);
+    xbar_rsp_d->p_local_in[tgtid_xicu]           (signal_dspin_rsp_xicu_t);
+    xbar_rsp_d->p_local_in[tgtid_mdma]           (signal_dspin_rsp_mdma_t);
+
+    xbar_rsp_d->p_local_out[nb_procs]            (signal_dspin_rsp_mdma_i);
+
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_rsp_d->p_local_out[p]               (signal_dspin_rsp_proc_i[p]);
+
+    if (io)
+    {
+        xbar_rsp_d->p_local_in[tgtid_mtty]       (signal_dspin_rsp_mtty_t);
+        xbar_rsp_d->p_local_in[tgtid_brom]       (signal_dspin_rsp_brom_t);
+        xbar_rsp_d->p_local_in[tgtid_bdev]       (signal_dspin_rsp_bdev_t);
+        xbar_rsp_d->p_local_in[tgtid_fbuf]       (signal_dspin_rsp_fbuf_t);
+        xbar_rsp_d->p_local_in[tgtid_mnic]       (signal_dspin_rsp_mnic_t);
+        xbar_rsp_d->p_local_in[tgtid_chbuf]      (signal_dspin_rsp_chbuf_t);
+        xbar_rsp_d->p_local_in[tgtid_simh]       (signal_dspin_rsp_simh_t);
+
+        xbar_rsp_d->p_local_out[nb_procs + 1]    (signal_dspin_rsp_bdev_i);
+        xbar_rsp_d->p_local_out[nb_procs + 2]    (signal_dspin_rsp_chbuf_i);
+    }
+
+    std::cout << "  - Response Direct crossbar connected" << std::endl;
+
+    ////////////////////// M2P DSPIN local crossbar coherence
+    xbar_m2p_c->p_clk                            (this->p_clk);
+    xbar_m2p_c->p_resetn                         (this->p_resetn);
+    xbar_m2p_c->p_global_out                     (signal_dspin_m2p_l2g_c);
+    xbar_m2p_c->p_global_in                      (signal_dspin_m2p_g2l_c);
+    xbar_m2p_c->p_local_in[0]                    (signal_dspin_m2p_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_m2p_c->p_local_out[p]               (signal_dspin_m2p_proc[p]);
+
+    std::cout << "  - M2P Coherence crossbar connected" << std::endl;
+
+    ////////////////////// CLACK DSPIN local crossbar coherence
+    xbar_clack_c->p_clk                          (this->p_clk);
+    xbar_clack_c->p_resetn                       (this->p_resetn);
+    xbar_clack_c->p_global_out                   (signal_dspin_clack_l2g_c);
+    xbar_clack_c->p_global_in                    (signal_dspin_clack_g2l_c);
+    xbar_clack_c->p_local_in[0]                  (signal_dspin_clack_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_clack_c->p_local_out[p]             (signal_dspin_clack_proc[p]);
+
+    std::cout << "  - Clack Coherence crossbar connected" << std::endl;
+
+    ////////////////////////// P2M DSPIN local crossbar coherence
+    xbar_p2m_c->p_clk                            (this->p_clk);
+    xbar_p2m_c->p_resetn                         (this->p_resetn);
+    xbar_p2m_c->p_global_out                     (signal_dspin_p2m_l2g_c);
+    xbar_p2m_c->p_global_in                      (signal_dspin_p2m_g2l_c);
+    xbar_p2m_c->p_local_out[0]                   (signal_dspin_p2m_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_p2m_c->p_local_in[p]                (signal_dspin_p2m_proc[p]);
+
+    std::cout << "  - P2M Coherence crossbar connected" << std::endl;
+
+
+    //////////////////////////////////// Processors
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        proc[p]->p_clk                      (this->p_clk);
+        proc[p]->p_resetn                   (this->p_resetn);
+        proc[p]->p_vci                      (signal_vci_ini_proc[p]);
+        proc[p]->p_dspin_m2p                (signal_dspin_m2p_proc[p]);
+        proc[p]->p_dspin_p2m                (signal_dspin_p2m_proc[p]);
+        proc[p]->p_dspin_clack              (signal_dspin_clack_proc[p]);
+        proc[p]->p_irq[0]                   (signal_proc_it[p]);
+        for ( size_t j = 1 ; j < 6 ; j++)
+        {
+            proc[p]->p_irq[j]               (signal_false);
+        }
+
+        wi_proc[p]->p_clk                   (this->p_clk);
+        wi_proc[p]->p_resetn                (this->p_resetn);
+        wi_proc[p]->p_dspin_cmd             (signal_dspin_cmd_proc_i[p]);
+        wi_proc[p]->p_dspin_rsp             (signal_dspin_rsp_proc_i[p]);
+        wi_proc[p]->p_vci                   (signal_vci_ini_proc[p]);
+    }
+
+    std::cout << "  - Processors connected" << std::endl;
+
+    ///////////////////////////////////// XICU
+    xicu->p_clk                        (this->p_clk);
+    xicu->p_resetn                     (this->p_resetn);
+    xicu->p_vci                        (signal_vci_tgt_xicu);
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        xicu->p_irq[p]                 (signal_proc_it[p]);
+    }
+
+#if 1
+    if(io)
+    {
+        xicu->p_hwi[0]             (signal_irq_bdev);
+        xicu->p_hwi[1]             (signal_irq_mdma[0]);
+
+        for(size_t i=0; i<4; i++)
+            xicu->p_hwi[2+i]        (signal_irq_mtty[i]);
+        
+        xicu->p_hwi[6]           (signal_irq_memc);
+    }
+    else
+    {
+        xicu->p_hwi[1]             (signal_irq_mdma[0]);
+        xicu->p_hwi[2]             (signal_irq_memc);
+    }
+
+    for(size_t i=0; i < 32; i++)
+    {
+        if((io && (i > 6)) || (!io && ((i == 0) || (i > 2))))
+            xicu->p_hwi[i] (signal_false);
+    }
+#else
+    for (size_t i = 0; i < 32; i++)
+    {
+        if (io) // I/O cluster
+        {
+            if      (i < 8)                  xicu->p_hwi[i] (signal_false);
+            else if (i < (8 + nb_dmas))      xicu->p_hwi[i] (signal_irq_mdma[i - 8]);
+            else if (i < 16)                 xicu->p_hwi[i] (signal_false);
+            else if (i < (16 + nb_ttys))     xicu->p_hwi[i] (signal_irq_mtty[i - 16]);
+            else if (i < 31)                 xicu->p_hwi[i] (signal_false);
+            else                             xicu->p_hwi[i] (signal_irq_bdev);
+        }
+        else      // other clusters
+        {
+            if      (i < 8)                  xicu->p_hwi[i] (signal_false);
+            else if (i < (8 + nb_dmas))      xicu->p_hwi[i] (signal_irq_mdma[i - 8]);
+            else                             xicu->p_hwi[i] (signal_false);
+        }
+    }
+#endif
+
+    // wrapper XICU
+    wt_xicu->p_clk                     (this->p_clk);
+    wt_xicu->p_resetn                  (this->p_resetn);
+    wt_xicu->p_dspin_cmd               (signal_dspin_cmd_xicu_t);
+    wt_xicu->p_dspin_rsp               (signal_dspin_rsp_xicu_t);
+    wt_xicu->p_vci                     (signal_vci_tgt_xicu);
+
+    std::cout << "  - XICU connected" << std::endl;
+
+    //////////////////////////////////////////////// MEMC
+    memc->p_clk                        (this->p_clk);
+    memc->p_resetn                     (this->p_resetn);
+    memc->p_vci_ixr                    (signal_vci_xram);
+    memc->p_vci_tgt                    (signal_vci_tgt_memc);
+    memc->p_dspin_p2m                  (signal_dspin_p2m_memc);
+    memc->p_dspin_m2p                  (signal_dspin_m2p_memc);
+    memc->p_dspin_clack                (signal_dspin_clack_memc);
+    memc->p_irq                        (signal_irq_memc);
+
+    // wrapper MEMC
+    wt_memc->p_clk                     (this->p_clk);
+    wt_memc->p_resetn                  (this->p_resetn);
+    wt_memc->p_dspin_cmd               (signal_dspin_cmd_memc_t);
+    wt_memc->p_dspin_rsp               (signal_dspin_rsp_memc_t);
+    wt_memc->p_vci                     (signal_vci_tgt_memc);
+
+    std::cout << "  - MEMC connected" << std::endl;
+
+    /////////////////////////////////////////////// XRAM
+    xram->p_clk                        (this->p_clk);
+    xram->p_resetn                     (this->p_resetn);
+    xram->p_vci                        (signal_vci_xram);
+
+    std::cout << "  - XRAM connected" << std::endl;
+
+    ////////////////////////////////////////////// MDMA
+    mdma->p_clk                        (this->p_clk);
+    mdma->p_resetn                     (this->p_resetn);
+    mdma->p_vci_target                 (signal_vci_tgt_mdma);
+    mdma->p_vci_initiator              (signal_vci_ini_mdma);
+    for (size_t i = 0; i < nb_dmas; i++)
+        mdma->p_irq[i]                 (signal_irq_mdma[i]);
+
+    // wrapper tgt MDMA
+    wt_mdma->p_clk                     (this->p_clk);
+    wt_mdma->p_resetn                  (this->p_resetn);
+    wt_mdma->p_dspin_cmd               (signal_dspin_cmd_mdma_t);
+    wt_mdma->p_dspin_rsp               (signal_dspin_rsp_mdma_t);
+    wt_mdma->p_vci                     (signal_vci_tgt_mdma);
+
+    // wrapper ini MDMA
+    wi_mdma->p_clk                     (this->p_clk);
+    wi_mdma->p_resetn                  (this->p_resetn);
+    wi_mdma->p_dspin_cmd               (signal_dspin_cmd_mdma_i);
+    wi_mdma->p_dspin_rsp               (signal_dspin_rsp_mdma_i);
+    wi_mdma->p_vci                     (signal_vci_ini_mdma);
+
+    std::cout << "  - MDMA connected" << std::endl;
+
+    /////////////////////////////// Components in I/O cluster
+
+    if (io)
+    {
+        // BDEV
+        bdev->p_clk                    (this->p_clk);
+        bdev->p_resetn                 (this->p_resetn);
+        bdev->p_irq                    (signal_irq_bdev);
+        bdev->p_vci_target             (signal_vci_tgt_bdev);
+        bdev->p_vci_initiator          (signal_vci_ini_bdev);
+
+        // wrapper tgt BDEV
+        wt_bdev->p_clk                 (this->p_clk);
+        wt_bdev->p_resetn              (this->p_resetn);
+        wt_bdev->p_dspin_cmd           (signal_dspin_cmd_bdev_t);
+        wt_bdev->p_dspin_rsp           (signal_dspin_rsp_bdev_t);
+        wt_bdev->p_vci                 (signal_vci_tgt_bdev);
+
+        // wrapper ini BDEV
+        wi_bdev->p_clk                 (this->p_clk);
+        wi_bdev->p_resetn              (this->p_resetn);
+        wi_bdev->p_dspin_cmd           (signal_dspin_cmd_bdev_i);
+        wi_bdev->p_dspin_rsp           (signal_dspin_rsp_bdev_i);
+        wi_bdev->p_vci                 (signal_vci_ini_bdev);
+
+        std::cout << "  - BDEV connected" << std::endl;
+
+        // FBUF
+        fbuf->p_clk                    (this->p_clk);
+        fbuf->p_resetn                 (this->p_resetn);
+        fbuf->p_vci                    (signal_vci_tgt_fbuf);
+
+        // wrapper tgt FBUF
+        wt_fbuf->p_clk                 (this->p_clk);
+        wt_fbuf->p_resetn              (this->p_resetn);
+        wt_fbuf->p_dspin_cmd           (signal_dspin_cmd_fbuf_t);
+        wt_fbuf->p_dspin_rsp           (signal_dspin_rsp_fbuf_t);
+        wt_fbuf->p_vci                 (signal_vci_tgt_fbuf);
+
+        std::cout << "  - FBUF connected" << std::endl;
+
+        // MNIC
+        mnic->p_clk                    (this->p_clk);
+        mnic->p_resetn                 (this->p_resetn);
+        mnic->p_vci                    (signal_vci_tgt_mnic);
+        for (size_t i = 0; i < nic_channels; i++)
+        {
+            mnic->p_rx_irq[i]          (signal_irq_mnic_rx[i]);
+            mnic->p_tx_irq[i]          (signal_irq_mnic_tx[i]);
+        }
+
+        // wrapper tgt MNIC
+        wt_mnic->p_clk                 (this->p_clk);
+        wt_mnic->p_resetn              (this->p_resetn);
+        wt_mnic->p_dspin_cmd           (signal_dspin_cmd_mnic_t);
+        wt_mnic->p_dspin_rsp           (signal_dspin_rsp_mnic_t);
+        wt_mnic->p_vci                 (signal_vci_tgt_mnic);
+
+        std::cout << "  - MNIC connected" << std::endl;
+
+        // CHBUF
+        chbuf->p_clk                    (this->p_clk);
+        chbuf->p_resetn                 (this->p_resetn);
+        chbuf->p_vci_target             (signal_vci_tgt_chbuf);
+        chbuf->p_vci_initiator          (signal_vci_ini_chbuf);
+        for (size_t i = 0; i < chbufdma_channels; i++)
+        {
+            chbuf->p_irq[i]          (signal_irq_chbuf[i]);
+        }
+
+        // wrapper tgt CHBUF
+        wt_chbuf->p_clk                 (this->p_clk);
+        wt_chbuf->p_resetn              (this->p_resetn);
+        wt_chbuf->p_dspin_cmd           (signal_dspin_cmd_chbuf_t);
+        wt_chbuf->p_dspin_rsp           (signal_dspin_rsp_chbuf_t);
+        wt_chbuf->p_vci                 (signal_vci_tgt_chbuf);
+
+        // wrapper ini CHBUF
+        wi_chbuf->p_clk                 (this->p_clk);
+        wi_chbuf->p_resetn              (this->p_resetn);
+        wi_chbuf->p_dspin_cmd           (signal_dspin_cmd_chbuf_i);
+        wi_chbuf->p_dspin_rsp           (signal_dspin_rsp_chbuf_i);
+        wi_chbuf->p_vci                 (signal_vci_ini_chbuf);
+
+        std::cout << "  - CHBUF connected" << std::endl;
+
+        // BROM
+        brom->p_clk                    (this->p_clk);
+        brom->p_resetn                 (this->p_resetn);
+        brom->p_vci                    (signal_vci_tgt_brom);
+
+        // wrapper tgt BROM
+        wt_brom->p_clk                 (this->p_clk);
+        wt_brom->p_resetn              (this->p_resetn);
+        wt_brom->p_dspin_cmd           (signal_dspin_cmd_brom_t);
+        wt_brom->p_dspin_rsp           (signal_dspin_rsp_brom_t);
+        wt_brom->p_vci                 (signal_vci_tgt_brom);
+
+        std::cout << "  - BROM connected" << std::endl;
+
+        // MTTY
+        mtty->p_clk                    (this->p_clk);
+        mtty->p_resetn                 (this->p_resetn);
+        mtty->p_vci                    (signal_vci_tgt_mtty);
+        for (size_t i = 0; i < nb_ttys; i++)
+        {
+            mtty->p_irq[i]             (signal_irq_mtty[i]);
+        }
+
+        // wrapper tgt MTTY
+        wt_mtty->p_clk                 (this->p_clk);
+        wt_mtty->p_resetn              (this->p_resetn);
+        wt_mtty->p_dspin_cmd           (signal_dspin_cmd_mtty_t);
+        wt_mtty->p_dspin_rsp           (signal_dspin_rsp_mtty_t);
+        wt_mtty->p_vci                 (signal_vci_tgt_mtty);
+
+
+        // Sim Helper
+        simhelper->p_clk               (this->p_clk);
+        simhelper->p_resetn            (this->p_resetn);
+        simhelper->p_vci               (signal_vci_tgt_simh);
+        
+        // wrapper tgt Sim Helper
+        wt_simhelper->p_clk            (this->p_clk);
+        wt_simhelper->p_resetn         (this->p_resetn);
+        wt_simhelper->p_dspin_cmd      (signal_dspin_cmd_simh_t);
+        wt_simhelper->p_dspin_rsp      (signal_dspin_rsp_simh_t);
+        wt_simhelper->p_vci            (signal_vci_tgt_simh);
+
+        std::cout << "  - MTTY connected" << std::endl;
+   }
+} // end constructor
+
+
+
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext> TsarXbarCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>::~TsarXbarCluster() {
+
+    dealloc_elems<DspinInput<dspin_cmd_width> > (p_cmd_in, 4, 3);
+    dealloc_elems<DspinOutput<dspin_cmd_width> >(p_cmd_out, 4, 3);
+    dealloc_elems<DspinInput<dspin_rsp_width> > (p_rsp_in, 4, 2);
+    dealloc_elems<DspinOutput<dspin_rsp_width> >(p_rsp_out, 4, 2);
+
+    for (size_t p = 0; p < n_procs; p++)
+    {
+        delete proc[p];
+        delete wi_proc[p];
+    }
+
+    delete memc;
+    delete wt_memc;
+    delete xram;
+    delete xicu;
+    delete wt_xicu;
+    delete mdma;
+    delete wt_mdma;
+    delete wi_mdma;
+    delete xbar_cmd_d;
+    delete xbar_rsp_d;
+    delete xbar_m2p_c;
+    delete xbar_p2m_c;
+    delete xbar_clack_c;
+    delete router_cmd;
+    delete router_rsp;
+    if (brom != NULL)
+    {
+        delete brom;
+        delete wt_brom;
+        delete fbuf;
+        delete wt_fbuf;
+        delete bdev;
+        delete wt_bdev;
+        delete wi_bdev;
+        delete mnic;
+        delete wt_mnic;
+        delete chbuf;
+        delete wt_chbuf;
+        delete wi_chbuf;
+        delete mtty;
+        delete wt_mtty;
+        delete simhelper;
+        delete wt_simhelper;
+    }
+}
+
+
+}}
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
+
+
Index: /branches/fault_tolerance/platforms/linux_monocluster/.gdbinit
===================================================================
--- /branches/fault_tolerance/platforms/linux_monocluster/.gdbinit	(revision 724)
+++ /branches/fault_tolerance/platforms/linux_monocluster/.gdbinit	(revision 724)
@@ -0,0 +1,136 @@
+define connect
+    target remote localhost:2346
+end
+
+# useful macros for Linux
+define dmesg
+        set $__log_buf = $arg0
+        set $log_start = $arg1
+        set $log_end = $arg2
+        set $x = $log_start
+        echo "
+        while ($x < $log_end)
+                set $c = (char)(($__log_buf)[$x++])
+                printf "%c" , $c
+        end
+        echo "\n
+end
+document dmesg
+dmesg __log_buf log_start log_end
+Print the content of the kernel message buffer
+end
+
+define thread_info
+    set $th = (struct thread_info*)$gp
+    echo "thread_info="
+    print /x *$th
+end
+define task_struct
+    set $th = (struct thread_info*)$gp
+    set $ts = (struct task_struct*)$th->task
+    echo "task_struct="
+    print /x *$ts
+end
+define active_mm
+    set $th = (struct thread_info*)$gp
+    set $ts = (struct task_struct*)$th->task
+    set $amm = (struct mm_struct*)$ts->active_mm
+    echo "active_mm="
+    print /x *$amm
+end
+define pgd
+    set $th = (struct thread_info*)$gp
+    set $ts = (struct task_struct*)$th->task
+    set $ms = (struct mm_struct*)$ts->active_mm
+    set $pg = (pgd_t*)$ms->pgd
+    echo "pgd="
+    print /x {pgd_t[2048]}$pg
+end
+
+define task_struct_header
+    printf "Address      PID State     [User_EPC] [User-SP]  Kernel-SP  device comm\n"
+end
+
+define task_struct_show
+    # task_struct addr and PID
+    printf "0x%08X %5d", $arg0, $arg0->pid
+    # Place a '<' marker on the current task
+    #  if ($arg0 == current)
+    # For PowerPC, register r2 points to the "current" task
+    if ($arg0 == $r2)
+        printf "<"
+    else
+        printf " "
+    end
+    # State
+    if ($arg0->state == 0)
+        printf "Running   "
+    else
+        if ($arg0->state == 1)
+            printf "Sleeping  "
+        else
+            if ($arg0->state == 2)
+                printf "Disksleep "
+            else
+                if ($arg0->state == 4)
+                    printf "Zombie    "
+                else
+                    if ($arg0->state == 8)
+                        printf "sTopped   "
+                    else
+                        if ($arg0->state == 16)
+                            printf "Wpaging   "
+                        else
+                            printf "%2d       ", $arg0->state
+                        end
+                    end
+                end
+            end
+        end
+    end
+    # User PC
+    set $pt_regs = (struct pt_regs*)($arg0->stack + 0x2000 - sizeof(struct pt_regs))
+    if ($pt_regs->cp0_epc)
+        printf "0x%08X ", $pt_regs->cp0_epc
+    else
+        printf "           "
+    end
+    if ($pt_regs->regs[29])
+        printf "0x%08X ", $pt_regs->regs[29]
+    else
+        printf "           "
+    end
+    # Display the kernel stack pointer
+    set $th = (struct thread_info*)$arg0->stack
+    printf "0x%08X ", $th->ksp
+    # device
+    if ($arg0->signal->tty)
+        printf "%s   ", $arg0->signal->tty->name
+    else
+        printf "(none) "
+    end
+    # comm
+    printf "%s\n", $arg0->comm
+end
+
+define find_next_task
+    # Given a task address, find the next task in the linked list
+    set $t = (struct task_struct *)$arg0
+    set $offset=((char *)&$t->tasks - (char *)$t)
+    set $t=(struct task_struct *)((char *)$t->tasks.next- (char *)$offset)
+end
+
+define ps
+    # Print column headers
+    task_struct_header
+    set $t=&init_task
+    task_struct_show $t
+    find_next_task $t
+    # Walk the list
+    while &init_task!=$t
+        # Display useful info about each task
+        task_struct_show $t
+        find_next_task $t
+    end
+end
+
Index: /branches/fault_tolerance/platforms/linux_monocluster/Makefile
===================================================================
--- /branches/fault_tolerance/platforms/linux_monocluster/Makefile	(revision 724)
+++ /branches/fault_tolerance/platforms/linux_monocluster/Makefile	(revision 724)
@@ -0,0 +1,84 @@
+# where is soclib?
+#
+SOCLIB_DIR=$(shell soclib-cc --getpath)
+
+# name definitions
+#
+SOCLIB_DESC=desc.py
+SOCLIB_TOP=top.cpp
+SIMULATOR_BINARY=system.x
+SIMULATOR_CMD=./$(SIMULATOR_BINARY) --nobanner
+
+# extra arguments for compilation
+#
+#SOCLIB_CC_ARGS=-v
+SOCLIB_CC_ARGS+=-b common:mips32
+
+# extra arguments for execution
+#
+# gdb
+# - F: start the simulation in a frozen state so it can be attached with a gdb
+#   client
+# - X: disable automatic break whenever an exception is caught, the exception
+#   handler will be called transparently
+# - S: make the simulation stop and wait for a gdb attachment whenever an
+#   exception is caught
+# - C: dump a trace of every inter-functions branch
+# - T: exit the simulator on trap exception
+# - Z: same as C but display only function's entrypoint
+# - W: disable automatic break whenever a watchpoint is hit, just report it on
+#   stderr (watchpoints can be defined using SOCLIB_GDB_WATCH)
+SIMULATOR_GDB=
+ifeq ("$(origin GDB)", "command line")
+    ifeq ($(GDB), 1)
+    	SIMULATOR_GDB=SOCLIB_GDB=FCX
+    else
+    	SIMULATOR_GDB=SOCLIB_GDB=$(GDB)
+    endif
+endif
+# ncpus
+SIMULATOR_NCPUS=4
+ifeq ("$(origin NCPUS)", "command line")
+	SIMULATOR_NCPUS=$(NCPUS)
+endif
+# vmlinux
+SIMULATOR_VMLINUX=./vmlinux
+ifeq ("$(origin VMLINUX)", "command line")
+	SIMULATOR_VMLINUX=$(VMLINUX)
+endif
+# dsk
+SIMULATOR_DSK=
+ifeq ("$(origin DSK)", "command line")
+	SIMULATOR_DSK=--dsk $(DSK)
+endif
+# trace
+SIMULATOR_TRACE=
+ifeq ("$(origin TRACE)", "command line")
+	SIMULATOR_TRACE=--trace $(TRACE)
+endif
+# ncycles
+SIMULATOR_NCYCLES=
+ifeq ("$(origin NCYCLES)", "command line")
+	SIMULATOR_NCYCLES=--ncycles $(NCYCLES)
+endif
+
+# recipes
+all: $(SIMULATOR_BINARY)
+
+$(SIMULATOR_BINARY): $(SOCLIB_DESC) $(SOCLIB_TOP)
+	soclib-cc $(SOCLIB_CC_ARGS) -P -p $(SOCLIB_DESC) -o $(SIMULATOR_BINARY)
+
+run_tsar_boot: all tsar_boot.bin
+	$(SIMULATOR_GDB) $(SIMULATOR_CMD) --ncpus $(SIMULATOR_NCPUS) --rom tsar_boot.bin $(SIMULATOR_DSK) $(SIMULATOR_TRACE) $(SIMULATOR_NCYCLES)
+
+run_dummy_boot: all
+	$(SIMULATOR_GDB) $(SIMULATOR_CMD) --ncpus $(SIMULATOR_NCPUS) --rom $(SIMULATOR_VMLINUX) $(SIMULATOR_DSK) --dummy-boot $(SIMULATOR_TRACE) $(SIMULATOR_NCYCLES)
+
+cscope.out:
+	soclib-cc -p $(SOCLIB_DESC) --tags
+
+clean:
+	soclib-cc -P -p $(SOCLIB_DESC) -x -o $(SIMULATOR_BINARY)
+	rm -f $(SIMULATOR_BINARY) *.o vci*
+
+.PHONY: $(SIMULATOR_BINARY)
Index: /branches/fault_tolerance/platforms/linux_monocluster/README
===================================================================
--- /branches/fault_tolerance/platforms/linux_monocluster/README	(revision 724)
+++ /branches/fault_tolerance/platforms/linux_monocluster/README	(revision 724)
@@ -0,0 +1,61 @@
+April 2014, Joel Porquet
+
+This platform is known for being able to run Linux.
+
+----
+Pre-requisites:
+
+* A working version of SoCLib (r2558)
+    - the command `soclib-cc --getpath` should return where SoCLib is installed
+* A working version of TSAR (r668)
+    - TSAR directory should be properly added to SoCLib's configuration: either
+      globally, or through the `soclib.conf` file present in this directory (in
+      which case, the environment variable `TSARDIR` should be defined to point
+      on TSAR directory)
+
+
+----
+Targets of the Makefile:
+
+* clean: clean the compilation files
+* all (or none): compile the simulation system
+* run_tsar_boot: runs the simulation system using a boot loader (in this case,
+  you want to use a blockdevice image that contains the kernel: see `DSK`
+  option below)
+* run_dummy_boot: runs the simulation system using directly Linux instead of a
+  boot loader (i.e. Linux is already loaded in RAM before execution).
+
+
+----
+Options for running:
+
+These options apply when using either `run_tsar_boot` or `run_dummy_boot`
+targets. Example: `make run_dummy_boot GDB=1 VMLINUX=../vmlinux DSK=dsk.img`
+
+* GDB=1|[FXSCTZW]: options to the GDB server (1 means FCX which is a good
+  default)
+* NCPUS=[1-4]: number of processors (the default is 4)
+* DSK=[pathname]: path to a filesystem to use with the BlockDevice component
+  (also implies creating a system with such a component, other the component is
+  deactivated)
+* TRACE=[number]: enables tracing the simulation starting from a certain cycle
+* NCYCLES=[number]: runs the simulation for a certain number of cycles
+
+    Only for run_dummy_boot:
+    * VMLINUX=[pathname]: path to Linux `vmlinux` image
+
+
+----
+Using GDB server:
+
+A file named `.gdbinit` contains a few macros that can be useful for debugging
+Linux when using the GDB server.
+
+* connect: connect to the GDB server that runs within the simulation
+* dmesg: print the content of the kernel message buffer
+* thread_info: print the thread_info structure of the current task
+* task_struct: print the task_struct structure of the current task
+* active_mm: print the active_mm structure of the current task
+* pgd: print the content of the page table of the current task
+* ps: print the list of running tasks
+
Index: /branches/fault_tolerance/platforms/linux_monocluster/desc.py
===================================================================
--- /branches/fault_tolerance/platforms/linux_monocluster/desc.py	(revision 724)
+++ /branches/fault_tolerance/platforms/linux_monocluster/desc.py	(revision 724)
@@ -0,0 +1,47 @@
+dspin_cmd_flit_size     = 39
+dspin_rsp_flit_size     = 32
+cell_size               = 4
+
+todo = Platform('caba', 'top.cpp',
+        uses = [
+            Uses('caba:vci_cc_vcache_wrapper',
+                dspin_in_width = dspin_cmd_flit_size,
+                dspin_out_width = dspin_rsp_flit_size,
+                iss_t = 'common:mips32el'),
+            Uses('caba:vci_cc_vcache_wrapper',
+                dspin_in_width = dspin_cmd_flit_size,
+                dspin_out_width = dspin_rsp_flit_size,
+                iss_t = 'common:gdb_iss',
+                gdb_iss_t = 'common:mips32el'),
+            Uses('caba:vci_simple_ram'),
+            Uses('caba:vci_simple_ram', cell_size = 8),
+            Uses('caba:vci_xicu'),
+            Uses('caba:vci_multi_tty'),
+            Uses('caba:vci_block_device_tsar'),
+            Uses('caba:vci_framebuffer'),
+            Uses('caba:vci_mem_cache',
+                memc_cell_size_int = cell_size,
+                memc_cell_size_ext = 8,
+                dspin_out_width = dspin_cmd_flit_size,
+                dspin_in_width = dspin_rsp_flit_size,
+                ),
+            Uses('caba:dspin_local_crossbar',
+                flit_width      =  dspin_cmd_flit_size),
+            Uses('caba:dspin_local_crossbar',
+                flit_width      = dspin_rsp_flit_size),
+            Uses('caba:vci_local_crossbar',
+                cell_size       = cell_size),
+            Uses('common:elf_file_loader'),
+            ],
+        cell_size = cell_size,
+        plen_size = 8,
+        addr_size = 32,
+        rerror_size = 1,
+        clen_size = 1,
+        rflag_size = 1,
+        srcid_size = 14,
+        pktid_size = 4,
+        trdid_size = 4,
+        wrplen_size = 1
+        )
+
Index: /branches/fault_tolerance/platforms/linux_monocluster/segmentation.h
===================================================================
--- /branches/fault_tolerance/platforms/linux_monocluster/segmentation.h	(revision 724)
+++ /branches/fault_tolerance/platforms/linux_monocluster/segmentation.h	(revision 724)
@@ -0,0 +1,24 @@
+#ifndef _SEGMENTATION_H
+#define _SEGMENTATION_H
+
+#define MEMC_BASE   0x00000000
+#define MEMC_SIZE   0x10000000 // 256Mb
+
+#define BOOT_BASE   0xbfc00000
+#define BOOT_SIZE   0x00040000
+
+#define XICU_BASE   0x10000000
+#define XICU_SIZE   0x00001000 // 1 page
+
+#define MTTY_BASE   0x14000000
+#define MTTY_SIZE   0x0000000c // 3 mapped-registers
+
+#define BD_BASE     0x1c000000
+#define BD_SIZE     0x00000040 // 9 mapped-registers
+
+#define FB_XSIZE    640
+#define FB_YSIZE    480
+#define FB_BASE     0x20000000
+#define FB_SIZE     (FB_XSIZE * FB_YSIZE * 2)
+
+#endif
Index: /branches/fault_tolerance/platforms/linux_monocluster/soclib.conf
===================================================================
--- /branches/fault_tolerance/platforms/linux_monocluster/soclib.conf	(revision 724)
+++ /branches/fault_tolerance/platforms/linux_monocluster/soclib.conf	(revision 724)
@@ -0,0 +1,5 @@
+#config.default.toolchain.set("cflags", config.default.toolchain.cflags + ['-ggdb'])
+
+import os
+config.addDescPath(os.environ['TSARDIR'] + "/trunk")
+
Index: /branches/fault_tolerance/platforms/linux_monocluster/top.cpp
===================================================================
--- /branches/fault_tolerance/platforms/linux_monocluster/top.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/linux_monocluster/top.cpp	(revision 724)
@@ -0,0 +1,623 @@
+/*
+ * global config
+ */
+
+#define CONFIG_GDB_SERVER
+
+/*
+ * headers
+ */
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <cstdlib>
+#include <cstdarg>
+#include <inttypes.h>
+#include <limits.h>
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+#ifdef CONFIG_GDB_SERVER
+#include "gdbserver.h"
+#endif
+
+#include "mapping_table.h"
+
+#include "mips32.h"
+#include "vci_mem_cache.h"
+#include "vci_cc_vcache_wrapper.h"
+#include "vci_block_device_tsar.h"
+
+#include "vci_simple_ram.h"
+#include "vci_multi_tty.h"
+#include "vci_xicu.h"
+#include "vci_framebuffer.h"
+
+#include "dspin_local_crossbar.h"
+#include "vci_local_crossbar.h"
+
+/*
+ * pf global config
+ */
+
+using namespace sc_core;
+using namespace soclib::caba;
+using namespace soclib::common;
+
+#define    cell_width            4
+#define    cell_width_ext        8
+#define    address_width         32
+#define    plen_width            8
+#define    error_width           1
+#define    clen_width            1
+#define    rflag_width           1
+#define    srcid_width           14
+#define    pktid_width           4
+#define    trdid_width           4
+#define    wrplen_width          1
+
+#define    dspin_cmd_width     39
+#define    dspin_rsp_width     32
+
+typedef VciParams<cell_width,
+        plen_width,
+        address_width,
+        error_width,
+        clen_width,
+        rflag_width,
+        srcid_width,
+        pktid_width,
+        trdid_width,
+        wrplen_width> vci_param;
+
+typedef VciParams<cell_width_ext,
+        plen_width,
+        address_width,
+        error_width,
+        clen_width,
+        rflag_width,
+        srcid_width,
+        pktid_width,
+        trdid_width,
+        wrplen_width> vci_param_ext;
+
+/*
+ * segmentation
+ */
+
+#include "segmentation.h"
+
+
+/*
+ * default parameters
+ */
+
+struct param_s {
+    size_t nr_cpus;
+    char *rom_path;
+    bool dsk;
+    char *dsk_path;
+    bool dummy_boot;
+    bool framebuffer;
+    bool trace_enabled;
+    size_t trace_start_cycle;
+    uint64_t ncycles;
+};
+
+#define PARAM_INITIALIZER   \
+{                           \
+    .nr_cpus = 1,           \
+    .rom_path = NULL,       \
+    .dsk = false,           \
+    .dsk_path = NULL,       \
+    .dummy_boot = false,    \
+    .framebuffer = false,   \
+    .trace_enabled = false, \
+    .trace_start_cycle = 0, \
+    .ncycles = 0,           \
+}
+
+static inline void print_param(const struct param_s &param)
+{
+    std::cout << std::endl;
+    std::cout << "simulation parameters:" << std::endl;
+    std::cout << "  nr_cpus     = " << param.nr_cpus << std::endl;
+    std::cout << "  rom         = " << param.rom_path << std::endl;
+    std::cout << "  dummy boot  = " << param.dummy_boot << std::endl;
+    std::cout << "  framebuffer = " << param.framebuffer << std::endl;
+    std::cout << "  dsk         = " << param.dsk << std::endl;
+    if (param.dsk)
+        std::cout << "    dsk_path  = " << param.dsk_path << std::endl;
+    std::cout << "  trace       = " << param.trace_enabled << std::endl;
+    if (param.trace_enabled)
+        std::cout << "    start cyc = " << param.trace_start_cycle << std::endl;
+    if (param.ncycles > 0)
+        std::cout << "    ncycles   = " << param.ncycles << std::endl;
+
+    std::cout << std::endl;
+}
+
+#define MAX_FROZEN_CYCLES 500000
+
+/*
+ * arguments parsing
+ */
+
+void args_parse(unsigned int argc, char *argv[], struct param_s &param)
+{
+    for (size_t n = 1; n < argc; n = n + 2)
+    {
+        if ((strcmp(argv[n], "--ncpus") == 0) && ((n + 1) < argc))
+        {
+            assert((param.nr_cpus = atoi(argv[n + 1]))
+                    && "insufficient memory");
+        }
+        else if ((strcmp(argv[n], "--rom") == 0) && ((n + 1) < argc))
+        {
+            assert((param.rom_path = strdup(argv[n + 1]))
+                    && "insufficient memory");
+        }
+        else if ((strcmp(argv[n], "--dsk") == 0) && ((n + 1) < argc))
+        {
+            param.dsk = true;
+            assert((param.dsk_path = strdup(argv[n + 1]))
+                    && "insufficient memory");
+        }
+        else if (strcmp(argv[n], "--dummy-boot") == 0)
+        {
+            param.dummy_boot = true;
+            /* we don't have an extra argument */
+            n = n - 1;
+        }
+        else if (strcmp(argv[n], "--framebuffer") == 0)
+        {
+            param.framebuffer = true;
+            /* we don't have an extra argument */
+            n = n - 1;
+        }
+        else if ((strcmp(argv[n], "--trace") == 0) && ((n + 1) < argc))
+        {
+            param.trace_enabled = true;
+            param.trace_start_cycle = atoi(argv[n + 1]);
+        }
+        else if ((strcmp(argv[n], "--ncycles") == 0) && ((n + 1) < argc))
+        {
+            param.ncycles = atoll(argv[n + 1]);
+        }
+        else
+        {
+            std::cout << "Error: don't understand option " << argv[n] << std::endl;
+            std::cout << "Accepted arguments are :" << std::endl;
+            std::cout << "--ncpus pathname" << std::endl;
+            std::cout << "--rom pathname" << std::endl;
+            std::cout << "[--dsk pathname]" << std::endl;
+            std::cout << "[--dummy-boot]" << std::endl;
+            std::cout << "[--framebuffer]" << std::endl;
+            std::cout << "[--trace trace_start_cycle]" << std::endl;
+            std::cout << "[--ncycles simulation_cycles]" << std::endl;
+            exit(0);
+        }
+    }
+
+    /* check parameters */
+    assert((param.nr_cpus <= 4) && "cannot support more than 4 cpus");
+    assert(param.rom_path && "--rom is not optional");
+
+    print_param(param);
+}
+
+
+/*
+ * netlist
+ */
+
+int _main(int argc, char *argv[])
+{
+#ifdef _OPENMP
+    omp_set_dynamic(false);
+    omp_set_num_threads(5);
+    std::cerr << "Built with openmp version " << _OPENMP << std::endl;
+#endif
+
+    struct param_s param = PARAM_INITIALIZER;
+
+    /* parse arguments */
+    args_parse(argc, argv, param);
+
+    /*
+     * mapping tables
+     */
+
+    /* data mapping table */
+    MappingTable maptabp(32, IntTab(0, 16), IntTab(0, srcid_width), 0xF0000000);
+
+    /* ram */
+    maptabp.add(Segment("mc_m", MEMC_BASE, MEMC_SIZE, IntTab(0, 0), true));
+    maptabp.add(Segment("boot", BOOT_BASE, BOOT_SIZE, IntTab(0, 1), true));
+
+    /* uncached peripherals */
+    maptabp.add(Segment("xicu", XICU_BASE, XICU_SIZE, IntTab(0, 2), false));
+    maptabp.add(Segment("tty",  MTTY_BASE, MTTY_SIZE, IntTab(0, 3), false));
+    maptabp.add(Segment("bd",   BD_BASE,   BD_SIZE,   IntTab(0, 4), false));
+    maptabp.add(Segment("fb",   FB_BASE,   FB_SIZE,   IntTab(0, 5), false));
+
+    std::cout << maptabp << std::endl;
+
+    /* xram mapping table */
+    MappingTable maptabx(32, IntTab(8), IntTab(8), 0x30000000);
+    maptabx.add(Segment("xram", MEMC_BASE, MEMC_SIZE, IntTab(0), false));
+
+    std::cout << maptabx << std::endl;
+
+    /*
+     * components
+     */
+
+    Loader loader;
+    loader.load_file(param.rom_path);
+
+#ifdef CONFIG_GDB_SERVER
+    typedef GdbServer<Mips32ElIss> proc_iss;
+    proc_iss::set_loader(loader);
+#else
+    typedef Mips32ElIss proc_iss;
+#endif
+
+    if (param.dummy_boot == true)
+    {
+        /* boot linux image directly */
+        uint64_t entry_addr = loader.get_entry_point_address();
+        std::cout << "setResetAdress: " << std::hex << entry_addr << std::endl << std::endl;
+        proc_iss::setResetAddress(entry_addr);
+    }
+
+    VciCcVCacheWrapper<vci_param, dspin_cmd_width, dspin_rsp_width, proc_iss > **proc;
+    proc = new VciCcVCacheWrapper<vci_param, dspin_cmd_width, dspin_rsp_width,
+         proc_iss >*[param.nr_cpus];
+    for (size_t i = 0; i < param.nr_cpus; i++)
+    {
+        std::ostringstream o;
+        o << "ccvache" << "[" << i << "]";
+        proc[i] = new VciCcVCacheWrapper<vci_param, dspin_cmd_width,
+            dspin_rsp_width, proc_iss >(
+                o.str().c_str(),    // name
+                i,                  // proc_id
+                maptabp,            // direct space
+                IntTab(0, i),       // srcid_d
+                i,                  // cc_global_id
+                8, 8,               // itlb size
+                8, 8,               // dtlb size
+                4, 64, 16,          // icache size
+                4, 64, 16,          // dcache size
+                4, 4,               // wbuf size
+                0, 0,               // x, y Width
+                MAX_FROZEN_CYCLES,  // max frozen cycles
+                param.trace_start_cycle,
+                param.trace_enabled);
+    }
+
+    VciSimpleRam<vci_param_ext> xram("xram", IntTab(0), maptabx, loader);
+
+    VciSimpleRam<vci_param> rom("rom", IntTab(0, 1), maptabp, loader);
+
+    VciMemCache<vci_param, vci_param_ext, dspin_rsp_width, dspin_cmd_width>
+        memc("memc",
+                maptabp,        // direct space
+                maptabx,        // xram space
+                IntTab(0),      // xram srcid
+                IntTab(0, 0),   // direct tgtid
+                0, 0,           // x, y width
+                16, 256, 16,    // cache size
+                3,              // max copies
+                4096, 8, 8, 8,  // HEAP size, TRT size, UPT size, IVT size
+                param.trace_start_cycle, param.trace_enabled);
+
+    VciXicu<vci_param> xicu("xicu", maptabp, IntTab(0, 2),
+            param.nr_cpus,  // #timers
+            3,              // #input hw irqs
+            param.nr_cpus,  // #ipis
+            param.nr_cpus); // #output irqs
+
+    VciMultiTty<vci_param> mtty("mtty", IntTab(0, 3), maptabp, "vcitty0", NULL);
+
+    VciBlockDeviceTsar<vci_param> *bd = NULL;
+    if (param.dsk == true)
+        bd = new VciBlockDeviceTsar<vci_param>("bd", maptabp,
+                IntTab(0, param.nr_cpus),   // srcid
+                IntTab(0, 4),               // tgtid
+                param.dsk_path);            // filename
+
+    VciFrameBuffer<vci_param> *fb = NULL;
+    if (param.framebuffer == true)
+        fb = new VciFrameBuffer<vci_param>("fb", IntTab(0, 5), maptabp,
+                FB_XSIZE, FB_YSIZE,     // window size
+                FbController::RGB_16);  // color type
+
+    /*
+     * Interconnects
+     */
+
+    /* data network */
+    VciLocalCrossbar<vci_param> xbar_d("xbar_d",
+            maptabp,        // mapping table
+            0,              // cluster coordinates
+            param.nr_cpus + 1, // #src
+            6,              // #dst
+            1);             // default target
+
+    /* coherence */
+    DspinLocalCrossbar<dspin_cmd_width> xbar_m2p_c("xbar_m2p_c",
+            maptabp,
+            0, 0,
+            0, 0,
+            srcid_width,
+            1, param.nr_cpus,
+            2, 2,
+            true,
+            false,
+            true);
+    DspinLocalCrossbar<dspin_rsp_width> xbar_p2m_c("xbar_p2m_c",
+            maptabp,
+            0, 0,
+            0, 0,
+            0,
+            param.nr_cpus, 1,
+            2, 2,
+            false,
+            false,
+            false);
+    DspinLocalCrossbar<dspin_cmd_width> xbar_clack_c("xbar_clack_c",
+            maptabp,
+            0, 0,
+            0, 0,
+            srcid_width,
+            1, param.nr_cpus,
+            1, 1,
+            true,
+            false,
+            false);
+
+    /*
+     * signals
+     */
+
+    /* clk and resetn */
+    sc_clock signal_clk ("clk");
+    sc_signal<bool> signal_resetn("resetn");
+
+    /* irq lines */
+    sc_signal<bool> **signal_proc_irq =
+        alloc_elems<sc_signal<bool> >("proc_irq", param.nr_cpus, proc_iss::n_irq);
+    sc_signal<bool> signal_mtty_irq("mtty_irq");
+    sc_signal<bool> signal_bd_irq("bd_irq");
+    sc_signal<bool> signal_memc_irq("memc_irq");
+
+    /* vci */
+    VciSignals<vci_param> *signal_vci_proc =
+        alloc_elems<VciSignals<vci_param> >("vci_proc", param.nr_cpus);
+    VciSignals<vci_param> signal_vci_ini_bd ("vci_ini_bd");
+
+    VciSignals<vci_param> signal_vci_memc ("vci_memc");
+    VciSignals<vci_param> signal_vci_rom ("vci_rom");
+    VciSignals<vci_param> signal_vci_xicu ("vci_xicu");
+    VciSignals<vci_param> signal_vci_tty ("vci_tty");
+    VciSignals<vci_param> signal_vci_tgt_bd ("vci_tgt_bd");
+    VciSignals<vci_param> signal_vci_fb ("vci_fb");
+
+    VciSignals<vci_param_ext> signal_vci_xram ("vci_xram");
+
+    /* fake signals for in/out of cluster */
+    VciSignals<vci_param> signal_vci_from_out("vci_from_out");
+    VciSignals<vci_param> signal_vci_to_out("vci_to_out");
+
+    /* Coherence DSPIN signals to local crossbar */
+    DspinSignals<dspin_cmd_width> signal_dspin_m2p_l2g;
+    DspinSignals<dspin_cmd_width> signal_dspin_m2p_g2l;
+    DspinSignals<dspin_rsp_width> signal_dspin_p2m_l2g;
+    DspinSignals<dspin_rsp_width> signal_dspin_p2m_g2l;
+    DspinSignals<dspin_cmd_width> signal_dspin_clack_l2g;
+    DspinSignals<dspin_cmd_width> signal_dspin_clack_g2l;
+
+    DspinSignals<dspin_cmd_width> signal_dspin_m2p_memc;
+    DspinSignals<dspin_cmd_width> signal_dspin_clack_memc;
+    DspinSignals<dspin_rsp_width> signal_dspin_p2m_memc;
+    DspinSignals<dspin_cmd_width> *signal_dspin_m2p_proc =
+        alloc_elems<DspinSignals<dspin_cmd_width> >("dspin_m2p_proc", param.nr_cpus);
+    DspinSignals<dspin_cmd_width> *signal_dspin_clack_proc =
+        alloc_elems<DspinSignals<dspin_cmd_width> >("dspin_clack_proc", param.nr_cpus);
+    DspinSignals<dspin_rsp_width> *signal_dspin_p2m_proc =
+        alloc_elems<DspinSignals<dspin_rsp_width> >("dspin_p2m_proc", param.nr_cpus);
+
+    /*
+     * netlist
+     */
+
+    /* components */
+    for (size_t i = 0; i < param.nr_cpus; i++)
+    {
+        proc[i]->p_clk(signal_clk);
+        proc[i]->p_resetn(signal_resetn);
+        for (size_t j = 0; j < proc_iss::n_irq; j++)
+            proc[i]->p_irq[j](signal_proc_irq[i][j]);
+        proc[i]->p_vci(signal_vci_proc[i]);
+        proc[i]->p_dspin_m2p(signal_dspin_m2p_proc[i]);
+        proc[i]->p_dspin_p2m(signal_dspin_p2m_proc[i]);
+        proc[i]->p_dspin_clack(signal_dspin_clack_proc[i]);
+    }
+
+    memc.p_clk(signal_clk);
+    memc.p_resetn(signal_resetn);
+    memc.p_irq(signal_memc_irq);
+    memc.p_vci_tgt(signal_vci_memc);
+    memc.p_dspin_p2m(signal_dspin_p2m_memc);
+    memc.p_dspin_m2p(signal_dspin_m2p_memc);
+    memc.p_dspin_clack(signal_dspin_clack_memc);
+    memc.p_vci_ixr(signal_vci_xram);
+
+    rom.p_clk(signal_clk);
+    rom.p_resetn(signal_resetn);
+    rom.p_vci(signal_vci_rom);
+
+    xicu.p_resetn(signal_resetn);
+    xicu.p_clk(signal_clk);
+    xicu.p_vci(signal_vci_xicu);
+    xicu.p_hwi[0](signal_mtty_irq);
+    xicu.p_hwi[1](signal_bd_irq);
+    xicu.p_hwi[2](signal_memc_irq);
+    for (size_t i = 0; i < param.nr_cpus; i++)
+        xicu.p_irq[i](signal_proc_irq[i][0]);
+
+    mtty.p_clk(signal_clk);
+    mtty.p_resetn(signal_resetn);
+    mtty.p_vci(signal_vci_tty);
+    mtty.p_irq[0](signal_mtty_irq);
+
+    if (param.dsk == true)
+    {
+        bd->p_clk(signal_clk);
+        bd->p_resetn(signal_resetn);
+        bd->p_vci_target(signal_vci_tgt_bd);
+        bd->p_vci_initiator(signal_vci_ini_bd);
+        bd->p_irq(signal_bd_irq);
+    }
+
+    if (param.framebuffer == true)
+    {
+        fb->p_clk(signal_clk);
+        fb->p_resetn(signal_resetn);
+        fb->p_vci(signal_vci_fb);
+    }
+
+    xram.p_clk(signal_clk);
+    xram.p_resetn(signal_resetn);
+    xram.p_vci(signal_vci_xram);
+
+    /* interconnects */
+    xbar_d.p_clk(signal_clk);
+    xbar_d.p_resetn(signal_resetn);
+    xbar_d.p_target_to_up(signal_vci_from_out);
+    xbar_d.p_initiator_to_up(signal_vci_to_out);
+    for (size_t i = 0; i < param.nr_cpus; i++)
+        xbar_d.p_to_initiator[i](signal_vci_proc[i]);
+    xbar_d.p_to_initiator[param.nr_cpus](signal_vci_ini_bd);
+    xbar_d.p_to_target[0](signal_vci_memc);
+    xbar_d.p_to_target[1](signal_vci_rom);
+    xbar_d.p_to_target[2](signal_vci_xicu);
+    xbar_d.p_to_target[3](signal_vci_tty);
+    xbar_d.p_to_target[4](signal_vci_tgt_bd);
+    xbar_d.p_to_target[5](signal_vci_fb);
+
+    xbar_m2p_c.p_clk(signal_clk);
+    xbar_m2p_c.p_resetn(signal_resetn);
+    xbar_m2p_c.p_global_out(signal_dspin_m2p_l2g);
+    xbar_m2p_c.p_global_in(signal_dspin_m2p_g2l);
+    xbar_m2p_c.p_local_in[0](signal_dspin_m2p_memc);
+    for (size_t i = 0; i < param.nr_cpus; i++)
+        xbar_m2p_c.p_local_out[i](signal_dspin_m2p_proc[i]);
+
+    xbar_clack_c.p_clk(signal_clk);
+    xbar_clack_c.p_resetn(signal_resetn);
+    xbar_clack_c.p_global_out(signal_dspin_clack_l2g);
+    xbar_clack_c.p_global_in(signal_dspin_clack_g2l);
+    xbar_clack_c.p_local_in[0](signal_dspin_clack_memc);
+    for (size_t i = 0; i < param.nr_cpus; i++)
+        xbar_clack_c.p_local_out[i](signal_dspin_clack_proc[i]);
+
+    xbar_p2m_c.p_clk(signal_clk);
+    xbar_p2m_c.p_resetn(signal_resetn);
+    xbar_p2m_c.p_global_out(signal_dspin_p2m_l2g);
+    xbar_p2m_c.p_global_in(signal_dspin_p2m_g2l);
+    xbar_p2m_c.p_local_out[0](signal_dspin_p2m_memc);
+    for (size_t i = 0; i < param.nr_cpus; i++)
+        xbar_p2m_c.p_local_in[i](signal_dspin_p2m_proc[i]);
+
+    /*
+     * simulation
+     */
+
+    for (size_t i = 0; i < param.nr_cpus; i++)
+        proc[i]->iss_set_debug_mask(0);
+
+    sc_start(sc_time(0, SC_NS));
+    signal_resetn = false;
+
+    sc_start(sc_time(1, SC_NS));
+    signal_resetn = true;
+
+    /* network boundaries initialization */
+    signal_dspin_m2p_l2g.write = false;
+    signal_dspin_m2p_l2g.read = true;
+    signal_dspin_m2p_g2l.write = false;
+    signal_dspin_m2p_g2l.read = true;
+
+    if (param.ncycles > 0)
+    {
+        for (size_t n = 1; n < param.ncycles; n++)
+        {
+            if (param.trace_enabled and (n > param.trace_start_cycle))
+            {
+                std::cout << "****************** cycle " << std::dec << n
+                    << " ************************************************" << std::endl;
+
+                proc[0]->print_trace();
+                memc.print_trace();
+
+                signal_vci_proc[0].print_trace("signal_vci_proc[0]");
+                signal_vci_memc.print_trace("signal_vci_memc");
+
+                signal_dspin_m2p_memc.print_trace("signal_m2p_memc");
+                signal_dspin_clack_memc.print_trace("signal_clack_memc");
+                signal_dspin_p2m_memc.print_trace("signal_p2m_memc");
+                for (size_t i = 0; i < param.nr_cpus; i++)
+                {
+                    std::ostringstream o;
+                    o << "signal_m2p_proc" << "[" << i << "]";
+                    signal_dspin_m2p_proc[i].print_trace(o.str().c_str());
+                }
+            }
+            sc_start(sc_core::sc_time(1, SC_NS));
+        }
+    } else {
+        uint64_t n;
+        struct timeval t1, t2;
+
+        gettimeofday(&t1, NULL);
+
+        for (n = 1; ; n++) {
+            /* stats display */
+            if ((n % 5000000) == 0) {
+                gettimeofday(&t2, NULL);
+
+                uint64_t ms1 = (uint64_t)t1.tv_sec * 1000ULL +
+                    (uint64_t)t1.tv_usec / 1000;
+                uint64_t ms2 = (uint64_t)t2.tv_sec * 1000ULL +
+                    (uint64_t)t2.tv_usec / 1000;
+                std::cerr << "platform clock frequency "
+                    << (double)5000000 / (double)(ms2 - ms1) << "Khz" << std::endl;
+
+                gettimeofday(&t1, NULL);
+            }
+
+            sc_start(sc_core::sc_time(1, SC_NS));
+        };
+    }
+
+    return EXIT_SUCCESS;
+
+}
+
+int sc_main (int argc, char *argv[])
+{
+    try {
+        return _main(argc, argv);
+    } catch (std::exception &e) {
+        std::cout << e.what() << std::endl;
+    } catch (...) {
+        std::cout << "Unknown exception occured" << std::endl;
+        throw;
+    }
+    return EXIT_FAILURE;
+}
+
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/Makefile
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/Makefile	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/Makefile	(revision 724)
@@ -0,0 +1,9 @@
+simul.x: top.cpp top.desc
+	soclib-cc -P -p top.desc -I. -o simul.x
+
+clean:
+	soclib-cc -x -p top.desc -I.
+	rm -rf *.o *.x tty* term*
+
+.PHONY:simul.x
+
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/arch.py
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/arch.py	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/arch.py	(revision 724)
@@ -0,0 +1,329 @@
+#!/usr/bin/env python
+
+from mapping import *
+
+#######################################################################################
+#   file   : arch.py  (for the tsar_generic_iob architecture)
+#   date   : may 2014
+#   author : Alain Greiner
+#######################################################################################
+#  This file contains a mapping generator for the "tsar_generic_iob" platform. 
+#  This includes both the hardware architecture (clusters, processors, peripherals,
+#  physical space segmentation) and the mapping of all kernel objects (global vsegs).
+#  This platform includes 6 external peripherals, accessible through two IO_Bridge
+# components located in cluster [0,0] and cluster [x_size-1, y_size-1].
+# Available peripherals are: TTY, BDV, FBF, ROM, NIC, CMA.
+#
+#  The "constructor" parameters are:
+#  - x_size         : number of clusters in a row
+#  - y_size         : number of clusters in a column
+#  - nb_procs       : number of processors per cluster
+#
+#  The "hidden" platform parameters are:
+#  - nb_ttys        : number of TTY channels
+#  - nb_nics        : number of NIC channels
+#  - fbf_width      : frame_buffer width = frame_buffer heigth
+#  - x_io           : cluster_io x coordinate
+#  - y_io           : cluster_io y coordinate
+#  - x_width        : number of bits for x coordinate
+#  - y_width        : number of bits for y coordinate
+#  - paddr_width    : number of bits for physical address
+#  - irq_per_proc   : number of input IRQs per processor
+#  - use_ramdisk    : use a ramdisk when True
+#  - peri_increment : address increment for replicated peripherals
+####################################################################################
+
+########################
+def arch( x_size    = 2,
+          y_size    = 2,
+          nb_procs  = 2 ):
+
+    ### define architecture constants
+
+    nb_ttys        = 1
+    nb_nics        = 2 
+    fbf_width      = 1024
+    x_io           = 0
+    y_io           = 0
+    x_width        = 4
+    y_width        = 4
+    paddr_width    = 40
+    irq_per_proc   = 4
+    use_ramdisk    = False
+    peri_increment = 0x10000
+                 
+    ### parameters checking
+
+    assert( nb_procs <= 4 )
+
+    assert( (x_size == 1) or (x_size == 2) or (x_size == 4) 
+             or (y_size == 8) or (x_size == 16) )
+
+    assert( (y_size == 1) or (y_size == 2) or (y_size == 4) 
+             or (y_size == 8) or (y_size == 16) )
+
+    assert( nb_ttys == 1 )
+
+    assert( ((x_io == 0) and (y_io == 0)) or
+            ((x_io == x_size-1) and (y_io == y_size-1)) )
+
+    platform_name  = 'tsar_iob_%d_%d_%d' % ( x_size, y_size, nb_procs )
+    
+    ### define physical segments
+
+    ram_base = 0x0000000000
+    ram_size = 0x4000000                   # 64 Mbytes
+
+    xcu_base = 0x00B0000000 
+    xcu_size = 0x1000                      # 4 Kbytes 
+
+    dma_base = 0x00B1000000
+    dma_size = 0x1000 * nb_procs           # 4 Kbytes * nb_procs
+
+    mmc_base = 0x00B2000000 
+    mmc_size = 0x1000                      # 4 Kbytes
+
+    offset_io = ((x_io << y_width) + y_io) << (paddr_width - x_width - y_width)
+
+    bdv_base  = 0x00B3000000 + offset_io
+    bdv_size  = 0x1000                     # 4kbytes
+
+    tty_base  = 0x00B4000000 + offset_io
+    tty_size  = 0x4000                     # 16 Kbytes
+
+    nic_base  = 0x00B5000000 + offset_io
+    nic_size  = 0x80000                    # 512 kbytes
+
+    cma_base  = 0x00B6000000 + offset_io
+    cma_size  = 0x1000 * 2 * nb_nics       # 4 kbytes * 2 * nb_nics
+
+    fbf_base  = 0x00B7000000 + offset_io
+    fbf_size  = fbf_width * fbf_width      # fbf_width * fbf_width bytes
+
+    pic_base  = 0x00B8000000 + offset_io
+    pic_size  = 0x1000                     # 4 Kbytes
+
+    iob_base  = 0x00BE000000 + offset_io
+    iob_size  = 0x1000                     # 4kbytes
+
+    rom_base  = 0x00BFC00000 + offset_io
+    rom_size  = 0x4000                     # 16 Kbytes
+
+    ### define  bootloader vsegs base addresses
+
+    boot_mapping_vbase   = 0x00000000      # ident
+    boot_mapping_size    = 0x00010000      # 64 Kbytes
+
+    boot_code_vbase      = 0x00010000      # ident
+    boot_code_size       = 0x00020000      # 128 Kbytes 
+  
+    boot_data_vbase      = 0x00030000      # ident
+    boot_data_size       = 0x00010000      # 64 Kbytes
+
+    boot_buffer_vbase    = 0x00040000      # ident
+    boot_buffer_size     = 0x00060000      # 384 Kbytes
+
+    boot_stack_vbase     = 0x000A0000      # ident
+    boot_stack_size      = 0x00050000      # 320 Kbytes
+
+    ### define kernel vsegs base addresses
+
+    kernel_code_vbase    = 0x80000000            
+    kernel_code_size     = 0x00020000      # 128 Kbytes
+
+    kernel_data_vbase    = 0x80020000
+    kernel_data_size     = 0x00060000      # 384 Kbytes
+
+    kernel_uncdata_vbase = 0x80080000
+    kernel_uncdata_size  = 0x00040000      # 256 Kbytes
+
+    kernel_init_vbase    = 0x800C0000
+    kernel_init_size     = 0x00010000      # 64 Kbytes
+
+    kernel_sched_vbase   = 0xF0000000            # distributed in all clusters
+    kernel_sched_size    = 0x1000 * nb_procs     # 4 kbytes per processor
+
+    ### create mapping
+
+    mapping = Mapping( name           = platform_name, 
+                       x_size         = x_size,        
+                       y_size         = y_size,        
+                       procs_max      = nb_procs,      
+                       x_width        = x_width,       
+                       y_width        = y_width,       
+                       paddr_width    = paddr_width,   
+                       coherence      = True,          
+                       irq_per_proc   = irq_per_proc,  
+                       use_ramdisk    = use_ramdisk,  
+                       x_io           = x_io,          
+                       y_io           = y_io,
+                       peri_increment = peri_increment )         
+
+    ###  external peripherals (accessible in cluster[0,0] only for this mapping)
+
+    iob = mapping.addPeriph( 'IOB', base = iob_base, size = iob_size, ptype = 'IOB' )
+
+    bdv = mapping.addPeriph( 'BDV', base = bdv_base, size = bdv_size, ptype = 'IOC', subtype = 'BDV' )
+
+    tty = mapping.addPeriph( 'TTY', base = tty_base, size = tty_size, ptype = 'TTY', channels = nb_ttys )
+
+    nic = mapping.addPeriph( 'NIC', base = nic_base, size = nic_size, ptype = 'NIC', channels = nb_nics ) 
+
+    cma = mapping.addPeriph( 'CMA', base = cma_base, size = cma_size, ptype = 'CMA', channels = 2*nb_nics )
+
+    fbf = mapping.addPeriph( 'FBF', base = fbf_base, size = fbf_size, ptype = 'FBF', arg = fbf_width )
+
+    rom = mapping.addPeriph( 'ROM', base = rom_base, size = rom_size, ptype = 'ROM' )
+
+    pic = mapping.addPeriph( 'PIC', base = pic_base, size = pic_size, ptype = 'PIC', channels = 32 )
+
+    mapping.addIrq( pic, index = 0, isrtype = 'ISR_NIC_RX', channel = 0 )
+    mapping.addIrq( pic, index = 1, isrtype = 'ISR_NIC_RX', channel = 1 )
+
+    mapping.addIrq( pic, index = 2, isrtype = 'ISR_NIC_TX', channel = 0 )
+    mapping.addIrq( pic, index = 3, isrtype = 'ISR_NIC_TX', channel = 1 )
+
+    mapping.addIrq( pic, index = 4, isrtype = 'ISR_CMA'   , channel = 0 )
+    mapping.addIrq( pic, index = 5, isrtype = 'ISR_CMA'   , channel = 1 )
+    mapping.addIrq( pic, index = 6, isrtype = 'ISR_CMA'   , channel = 2 )
+    mapping.addIrq( pic, index = 7, isrtype = 'ISR_CMA'   , channel = 3 )
+
+    mapping.addIrq( pic, index = 8, isrtype = 'ISR_BDV'   , channel = 0 )
+
+    mapping.addIrq( pic, index = 9, isrtype = 'ISR_TTY_RX', channel = 0 )
+
+    ### hardware components replicated in all clusters   
+
+    for x in xrange( x_size ):
+        for y in xrange( y_size ):
+            cluster_xy = (x << y_width) + y;
+            offset     = cluster_xy << (paddr_width - x_width - y_width)
+
+            ram = mapping.addRam( 'RAM', base = ram_base + offset, size = ram_size )
+
+            mmc = mapping.addPeriph( 'MMC', base = mmc_base + offset, size = mmc_size, 
+                                     ptype = 'MMC' )
+
+            dma = mapping.addPeriph( 'DMA', base = dma_base + offset, size = dma_size, 
+                                     ptype = 'DMA', channels = nb_procs ) 
+
+            xcu = mapping.addPeriph( 'XCU', base = xcu_base + offset, size = xcu_size, 
+                                     ptype = 'XCU', channels = nb_procs * irq_per_proc, arg = 16 )
+
+            # MMC IRQ replicated in all clusters
+            mapping.addIrq( xcu, index = 0, isrtype = 'ISR_MMC' )
+
+            # processors
+            for p in xrange ( nb_procs ):
+                mapping.addProc( x, y, p )
+
+    ### global vsegs for boot_loader / identity mapping
+
+    mapping.addGlobal( 'seg_boot_mapping'  , boot_mapping_vbase  , boot_mapping_size  , 'C_W_', 
+                       vtype = 'BLOB'  , x = 0, y = 0, pseg = 'RAM', identity = True )
+
+    mapping.addGlobal( 'seg_boot_code'     , boot_code_vbase     , boot_code_size     , 'CXW_', 
+                       vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
+
+    mapping.addGlobal( 'seg_boot_data'     , boot_data_vbase     , boot_data_size     , 'C_W_', 
+                       vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
+
+    mapping.addGlobal( 'seg_boot_buffer'   , boot_buffer_vbase   , boot_buffer_size   , 'C_W_', 
+                       vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
+
+    mapping.addGlobal( 'seg_boot_stack'    , boot_stack_vbase    , boot_stack_size    , 'C_W_', 
+                       vtype = 'BUFFER', x = 0, y = 0, pseg = 'RAM', identity = True )
+
+    ### global vsegs for kernel   
+
+    mapping.addGlobal( 'seg_kernel_code'   , kernel_code_vbase   , kernel_code_size   , 'CXW_', 
+                       vtype = 'ELF'   , x = 0, y = 0, pseg = 'RAM', binpath = 'build/kernel/kernel.elf' )
+
+    mapping.addGlobal( 'seg_kernel_data'   , kernel_data_vbase   , kernel_data_size   , 'C_W_', 
+                       vtype = 'ELF'   , x = 0, y = 0, pseg = 'RAM', binpath = 'build/kernel/kernel.elf' )
+
+    mapping.addGlobal( 'seg_kernel_uncdata', kernel_uncdata_vbase, kernel_uncdata_size, '__W_', 
+                       vtype = 'ELF'   , x = 0, y = 0, pseg = 'RAM', binpath = 'build/kernel/kernel.elf' )
+
+    mapping.addGlobal( 'seg_kernel_init'   , kernel_init_vbase   , kernel_init_size   , 'CXW_', 
+                       vtype = 'ELF'   , x = 0, y = 0, pseg = 'RAM', binpath = 'build/kernel/kernel.elf' )
+
+    ### global vsegs for external peripherals / identity mapping
+
+    mapping.addGlobal( 'seg_iob', iob_base, iob_size, '__W_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'IOB', identity = True )
+
+    mapping.addGlobal( 'seg_bdv', bdv_base, bdv_size, '__W_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'BDV', identity = True )
+
+    mapping.addGlobal( 'seg_tty', tty_base, tty_size, '__W_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'TTY', identity = True )
+
+    mapping.addGlobal( 'seg_nic', nic_base, nic_size, '__W_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'NIC', identity = True )
+
+    mapping.addGlobal( 'seg_cma', cma_base, cma_size, '__W_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'CMA', identity = True )
+
+    mapping.addGlobal( 'seg_fbf', fbf_base, fbf_size, '__W_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'FBF', identity = True )
+
+    mapping.addGlobal( 'seg_pic', pic_base, pic_size, '__W_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'PIC', identity = True )
+
+    mapping.addGlobal( 'seg_rom', rom_base, rom_size, 'CXW_', 
+                       vtype = 'PERI', x = 0, y = 0, pseg = 'ROM', identity = True )
+
+    ### Global vsegs for replicated peripherals, and for schedulers 
+    ### name is indexed by (x,y), base address is incremented by (cluster_xy * peri_increment)
+
+    for x in xrange( x_size ):
+        for y in xrange( y_size ):
+            cluster_xy = (x << y_width) + y;
+            offset     = cluster_xy * peri_increment
+
+            mapping.addGlobal( 'seg_xcu_%d_%d' %(x,y), xcu_base + offset, xcu_size,
+                               '__W_', vtype = 'PERI' , x = x , y = y , pseg = 'XCU' )
+
+            mapping.addGlobal( 'seg_dma_%d_%d' %(x,y), dma_base + offset, dma_size,
+                               '__W_', vtype = 'PERI' , x = x , y = y , pseg = 'DMA' )
+
+            mapping.addGlobal( 'seg_mmc_%d_%d' %(x,y), mmc_base + offset, mmc_size,
+                               '__W_', vtype = 'PERI' , x = x , y = y , pseg = 'MMC' )
+
+            mapping.addGlobal( 'seg_sched_%d_%d' %(x,y), kernel_sched_vbase + offset, kernel_sched_size,
+                               'C_W_', vtype = 'SCHED', x = x , y = y , pseg = 'RAM' )
+
+    ### return mapping ###
+
+    return mapping
+
+################################# platform test #######################################################
+
+if __name__ == '__main__':
+
+    mapping = genmap( x_size    = 2,
+                      y_size    = 2,
+                      nb_procs  = 2,
+                      nb_ttys   = 1,
+                      nb_nics   = 2, 
+                      fbf_width = 128,
+                      x_io      = 0,
+                      y_io      = 0 )
+
+#   print mapping.netbsd_dts()
+
+    print mapping.xml()
+
+#   print mapping.giet_vsegs()
+                     
+
+# Local Variables:
+# tab-width: 4;
+# c-basic-offset: 4;
+# c-file-offsets:((innamespace . 0)(inline-open . 0));
+# indent-tabs-mode: nil;
+# End:
+#
+# vim: filetype=python:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/giet_vm
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/giet_vm	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/giet_vm	(revision 724)
@@ -0,0 +1,1 @@
+link ../../../giet_vm
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/top.cpp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/top.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/top.cpp	(revision 724)
@@ -0,0 +1,1571 @@
+///////////////////////////////////////////////////////////////////////////////
+// File: top.cpp  (for tsar_generic_iob platform)
+// Author: Alain Greiner
+// Copyright: UPMC/LIP6
+// Date : august 2013
+// This program is released under the GNU public license
+///////////////////////////////////////////////////////////////////////////////
+// This file define a generic TSAR architecture with an IO network emulating
+// an external bus (i.e. Hypertransport) to access 7 external peripherals:
+//
+// - BROM : boot ROM
+// - FBUF : Frame Buffer
+// - MTTY : multi TTY (up to 15 channels)
+// - MNIC : Network controller (up to 2 channels)
+// - CDMA : Chained Buffer DMA controller (up to 4 channels)
+// - BDEV : Dlock Device controler (1 channel)
+// - IOPI : HWI to SWI translator.
+//
+// The internal physical address space is 40 bits, and the cluster index
+// is defined by the 8 MSB bits, using a fixed format: X is encoded on 4 bits,
+// Y is encodes on 4 bits, whatever the actual mesh size.
+// => at most 16 * 16 clusters. Each cluster contains up to 4 processors.
+//
+// It contains 3 networks:
+//
+// 1) the "INT" network supports Read/Write transactions
+//    between processors and L2 caches or peripherals.
+//    (VCI ADDDRESS = 40 bits / VCI DATA width = 32 bits)
+//    It supports also coherence transactions between L1 & L2 caches.
+// 3) the "RAM" network emulates the 3D network between L2 caches
+//    and L3 caches, and is implemented as a 2D mesh between the L2 caches,
+//    the two IO bridges and the physical RAMs disributed in all clusters.
+//    (VCI ADDRESS = 40 bits / VCI DATA = 64 bits)
+// 4) the IOX network connects the two IO bridge components to the
+//    7 external peripheral controllers.
+//    (VCI ADDDRESS = 40 bits / VCI DATA width = 64 bits)
+//
+// The external peripherals HWI IRQs are translated to WTI IRQs by the
+// external IOPIC component, that must be configured by the OS to route
+// these WTI ITQS to one or several internal XICU components.
+// The total number of channels for the external peripherals (MTTY, MNIC, CDMA
+// IOC or HBA) is limited by the IOPIC 32 HWI inputs:..
+// - IOPIC HWI[1:0]     connected to IRQ_NIC_RX[1:0]
+// - IOPIC HWI[3:2]     connected to IRQ_NIC_TX[1:0]
+// - IOPIC HWI[7:4]     connected to IRQ_CMA_TX[3:0]]
+// - IOPIC HWI[8]       connected to IRQ_BDEV
+// - IOPIC HWI[15:9]    unused       (grounded)
+// - IOPIC HWI[23:16]   connected to IRQ_TTY_RX[7:0]]
+// - IOPIC HWI[31:24]   connected to IRQ_TTY_TX[7:0]]   TBD
+//
+// Besides the external peripherals, each cluster contains on XICU component,
+// and one multi channels DMA component.
+// The XICU component is mainly used to handle WTI IRQs, as only 2 HWI IRQs
+// are connected to XICU in each cluster:
+// - IRQ_IN[0] : MMC
+// - IRQ_IN[1] : DMA channel 0
+// - IRQ_IN[2] : DMA channel 1
+// - IRQ_IN[3] : DMA channel 2
+// - IRQ_IN[4] : DMA channel 3
+//
+// All clusters are identical, but cluster(0,0) and cluster(XMAX-1,YMAX-1)
+// contain an extra IO bridge component. These IOB0 & IOB1 components are
+// connected to the three networks (INT, RAM, IOX).
+//
+// - It uses two dspin_local_crossbar per cluster to implement the
+//   local interconnect correponding to the INT network.
+// - It uses three dspin_local_crossbar per cluster to implement the
+//   local interconnect correponding to the coherence INT network.
+// - It uses two virtual_dspin_router per cluster to implement
+//   the INT network (routing both the direct and coherence trafic).
+// - It uses two dspin_router per cluster to implement the RAM network.
+// - It uses the vci_cc_vcache_wrapper.
+// - It uses the vci_mem_cache.
+// - It contains one vci_xicu and one vci_multi_dma per cluster.
+// - It contains one vci_simple ram per cluster to model the L3 cache.
+//
+// The TsarIobCluster component is defined in files
+// tsar_iob_cluster.* (with * = cpp, h, sd)
+//
+// The main hardware parameters must be defined in the hard_config.h file :
+// - X_SIZE           : number of clusters in a row
+// - Y_SIZE           : number of clusters in a column
+// - NB_PROCS_MAX     : number of processors per cluster (power of 2)
+// - NB_TTY_CHANNELS  : number of TTY channels in I/O network (must be 1)
+// - NB_NIC_CHANNELS  : number of NIC channels in I/O network (up to 2)
+// - NB_CMA_CHANNELS  : number of CMA channels in I/O network (up to 4)
+// - FBUF_X_SIZE      : width of frame buffer (pixels)
+// - FBUF_Y_SIZE      : heigth of frame buffer (lines)
+// - XCU_NB_INPUTS    : number of HWIs = number of WTIs = number of PTIs
+//
+// Some secondary hardware parameters must be defined in this top.cpp file:
+// - XRAM_LATENCY     : external ram latency
+// - MEMC_WAYS        : L2 cache number of ways
+// - MEMC_SETS        : L2 cache number of sets
+// - L1_IWAYS
+// - L1_ISETS
+// - L1_DWAYS
+// - L1_DSETS
+// - BDEV_IMAGE_NAME  : file pathname for block device
+// - NIC_RX_NAME      : file pathname for NIC received packets
+// - NIC_TX_NAME      : file pathname for NIC transmited packets
+// - NIC_TIMEOUT      : max number of cycles before closing a container
+//
+// General policy for 40 bits physical address decoding:
+// All physical segments base addresses are multiple of 1 Mbytes
+// (=> the 24 LSB bits = 0, and the 16 MSB bits define the target)
+// The (x_width + y_width) MSB bits (left aligned) define
+// the cluster index, and the LADR bits define the local index:
+//      |X_ID|Y_ID|  LADR  |     OFFSET          |
+//      |  4 |  4 |   8    |       24            |
+//
+// General policy for 14 bits SRCID decoding:
+// Each component is identified by (x_id, y_id, l_id) tuple.
+//      |X_ID|Y_ID| L_ID |
+//      |  4 |  4 |  6   |
+/////////////////////////////////////////////////////////////////////////
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+#include <stdint.h>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+
+#include "tsar_iob_cluster.h"
+#include "vci_chbuf_dma.h"
+#include "vci_multi_tty.h"
+#include "vci_multi_nic.h"
+#include "vci_simple_rom.h"
+#include "vci_block_device_tsar.h"
+#include "vci_framebuffer.h"
+#include "vci_iox_network.h"
+#include "vci_iox_network.h"
+#include "vci_iopic.h"
+
+#include "alloc_elems.h"
+
+///////////////////////////////////////////////////
+//      OS
+///////////////////////////////////////////////////
+#define USE_ALMOS 0
+
+#define almos_bootloader_pathname "bootloader.bin"
+#define almos_kernel_pathname     "kernel-soclib.bin@0xbfc10000:D"
+#define almos_archinfo_pathname   "arch-info.bin@0xBFC08000:D"
+
+///////////////////////////////////////////////////
+//               Parallelisation
+///////////////////////////////////////////////////
+#define USE_OPENMP               0
+
+#if USE_OPENMP
+#include <omp.h>
+#endif
+
+///////////////////////////////////////////////////////////
+//          DSPIN parameters
+///////////////////////////////////////////////////////////
+
+#define dspin_int_cmd_width   39
+#define dspin_int_rsp_width   32
+
+#define dspin_ram_cmd_width   64
+#define dspin_ram_rsp_width   64
+
+///////////////////////////////////////////////////////////
+//         VCI fields width  for the 3 VCI networks
+///////////////////////////////////////////////////////////
+
+#define vci_cell_width_int    4
+#define vci_cell_width_ext    8
+
+#define vci_plen_width        8
+#define vci_address_width     40
+#define vci_rerror_width      1
+#define vci_clen_width        1
+#define vci_rflag_width       1
+#define vci_srcid_width       14
+#define vci_pktid_width       4
+#define vci_trdid_width       4
+#define vci_wrplen_width      1
+
+////////////////////////////////////////////////////////////
+//    Main Hardware Parameters values
+//////////////////////i/////////////////////////////////////
+
+#include "hard_config.h"
+
+////////////////////////////////////////////////////////////
+//    Secondary Hardware Parameters values
+//////////////////////i/////////////////////////////////////
+
+#define XMAX                  X_SIZE
+#define YMAX                  Y_SIZE
+
+#define XRAM_LATENCY          0
+
+#define MEMC_WAYS             16
+#define MEMC_SETS             256
+
+#define L1_IWAYS              4
+#define L1_ISETS              64
+
+#define L1_DWAYS              4
+#define L1_DSETS              64
+
+#define BDEV_IMAGE_NAME       "../../../giet_vm/hdd/virt_hdd.dmg"
+
+#define NIC_RX_NAME           "giet_vm/nic/rx_packets.txt"
+#define NIC_TX_NAME           "giet_vm/nic/tx_packets.txt"
+#define NIC_TIMEOUT           10000
+
+#define NORTH                 0
+#define SOUTH                 1
+#define EAST                  2
+#define WEST                  3
+
+#define cluster(x,y)   ((y) + ((x) << 4))
+
+////////////////////////////////////////////////////////////
+//    Software to be loaded in ROM & RAM
+//////////////////////i/////////////////////////////////////
+
+#define BOOT_SOFT_NAME        "../../softs/tsar_boot/preloader.elf"
+
+// Activate Distributed Boot
+// When this is activated, every processor boots with its physical address
+// extension register initialized to its cluster index (X_LOCAL, Y_LOCAL). To
+// support this feature, a distributed ROM is implemented in each cluster.
+
+#ifndef DISTRIBUTED_BOOT
+#define DISTRIBUTED_BOOT false
+#endif
+
+////////////////////////////////////////////////////////////
+//     DEBUG Parameters default values
+//////////////////////i/////////////////////////////////////
+
+#define MAX_FROZEN_CYCLES     200000
+
+/////////////////////////////////////////////////////////
+//    Physical segments definition
+/////////////////////////////////////////////////////////
+
+// Replicated RAMs : address is incremented by a cluster offset
+//     offset  = cluster(x,y) << (address_width-x_width-y_width);
+
+#define SEG_RAM_BASE          0x0000000000
+#define SEG_RAM_SIZE          0x0004000000   // 64 Mbytes
+
+////////////////////////////////////////////////////////////////////////
+//          SRCID definition
+////////////////////////////////////////////////////////////////////////
+// All initiators are in the same indexing space (14 bits).
+// The SRCID is structured in two fields:
+// - The 10 MSB bits define the cluster index (left aligned)
+// - The 4  LSB bits define the local index.
+// Two different initiators cannot have the same SRCID, but a given
+// initiator can have two alias SRCIDs:
+// - Internal initiators (procs, mdma) are replicated in all clusters,
+//   and each initiator has one single SRCID.
+// - External initiators (bdev, cdma) are not replicated, but can be
+//   accessed in 2 clusters : cluster_iob0 and cluster_iob1.
+//   They have the same local index, but two different cluster indexes.
+//
+// As cluster_iob0 and cluster_iob1 contain both internal initiators
+// and external initiators, they must have different local indexes.
+// Consequence: For a local interconnect, the INI_ID port index
+// is NOT equal to the SRCID local index, and the local interconnect
+// must make a translation: SRCID => INI_ID
+////////////////////////////////////////////////////////////////////////
+
+#define PROC_LOCAL_SRCID             0x0    // from 0 to 7
+#define MDMA_LOCAL_SRCID             0x8
+#define IOBX_LOCAL_SRCID             0x9
+#define MEMC_LOCAL_SRCID             0xA
+#define CDMA_LOCAL_SRCID             0xB
+#define BDEV_LOCAL_SRCID             0xC
+#define IOPI_LOCAL_SRCID             0xD
+
+///////////////////////////////////////////////////////////////////////
+//     TGT_ID and INI_ID port indexing for INT local interconnect
+///////////////////////////////////////////////////////////////////////
+
+#define INT_MEMC_TGT_ID              0
+#define INT_XICU_TGT_ID              1
+#define INT_MDMA_TGT_ID              2
+#define INT_BROM_TGT_ID              3
+#define INT_IOBX_TGT_ID              4
+
+#define INT_PROC_INI_ID              0   // from 0 to (NB_PROCS_MAX-1)
+#define INT_MDMA_INI_ID              (NB_PROCS_MAX)
+#define INT_IOBX_INI_ID              (NB_PROCS_MAX+1)
+
+///////////////////////////////////////////////////////////////////////
+//     TGT_ID and INI_ID port indexing for RAM local interconnect
+///////////////////////////////////////////////////////////////////////
+
+#define RAM_XRAM_TGT_ID              0
+
+#define RAM_MEMC_INI_ID              0
+#define RAM_IOBX_INI_ID              1
+
+///////////////////////////////////////////////////////////////////////
+//     TGT_ID and INI_ID port indexing for I0X local interconnect
+///////////////////////////////////////////////////////////////////////
+
+#define IOX_FBUF_TGT_ID              0
+#define IOX_BDEV_TGT_ID              1
+#define IOX_MNIC_TGT_ID              2
+#define IOX_CDMA_TGT_ID              3
+#define IOX_MTTY_TGT_ID              4
+#define IOX_IOPI_TGT_ID              5
+#define IOX_IOB0_TGT_ID              6
+#define IOX_IOB1_TGT_ID              7
+
+#define IOX_BDEV_INI_ID              0
+#define IOX_CDMA_INI_ID              1
+#define IOX_IOPI_INI_ID              2
+#define IOX_IOB0_INI_ID              3
+#define IOX_IOB1_INI_ID              4
+
+////////////////////////////////////////////////////////////////////////
+int _main(int argc, char *argv[])
+////////////////////////////////////////////////////////////////////////
+{
+   using namespace sc_core;
+   using namespace soclib::caba;
+   using namespace soclib::common;
+
+
+   char     soft_name[256]   = BOOT_SOFT_NAME;             // pathname: binary code
+   size_t   ncycles          = 1000000000;                 // simulated cycles
+   char     disk_name[256]   = BDEV_IMAGE_NAME;            // pathname: disk image
+   char     nic_rx_name[256] = NIC_RX_NAME;                // pathname: rx packets file
+   char     nic_tx_name[256] = NIC_TX_NAME;                // pathname: tx packets file
+   ssize_t  threads_nr       = 1;                          // simulator's threads number
+   bool     debug_ok         = false;                      // trace activated
+   size_t   debug_period     = 1;                          // trace period
+   size_t   debug_memc_id    = 0xFFFFFFFF;                 // index of traced memc
+   size_t   debug_proc_id    = 0xFFFFFFFF;                 // index of traced proc
+   size_t   debug_xram_id    = 0xFFFFFFFF;                 // index of traced xram
+   bool     debug_iob        = false;                      // trace iob0 & iob1 when true
+   uint32_t debug_from       = 0;                          // trace start cycle
+   uint32_t frozen_cycles    = MAX_FROZEN_CYCLES;          // monitoring frozen processor
+   size_t   cluster_iob0     = cluster(0,0);               // cluster containing IOB0
+   size_t   cluster_iob1     = cluster(XMAX-1,YMAX-1);     // cluster containing IOB1
+   size_t   x_width          = 4;                          // at most 256 clusters
+   size_t   y_width          = 4;                          // at most 256 clusters
+
+   assert( (X_WIDTH == 4) and (Y_WIDTH == 4) and
+   "ERROR: we must have X_WIDTH == Y_WIDTH == 4");
+
+   ////////////// command line arguments //////////////////////
+   if (argc > 1)
+   {
+      for (int n = 1; n < argc; n = n + 2)
+      {
+         if ((strcmp(argv[n],"-NCYCLES") == 0) && (n+1<argc))
+         {
+            ncycles = atoi(argv[n+1]);
+         }
+         else if ((strcmp(argv[n],"-SOFT") == 0) && (n+1<argc) )
+         {
+            strcpy(soft_name, argv[n+1]);
+         }
+         else if ((strcmp(argv[n],"-DEBUG") == 0) && (n+1<argc) )
+         {
+            debug_ok = true;
+            debug_from = atoi(argv[n+1]);
+         }
+         else if ((strcmp(argv[n],"-DISK") == 0) && (n+1<argc) )
+         {
+            strcpy(disk_name, argv[n+1]);
+         }
+         else if ((strcmp(argv[n],"-MEMCID") == 0) && (n+1<argc) )
+         {
+            debug_memc_id = atoi(argv[n+1]);
+            size_t x = debug_memc_id >> 4;
+            size_t y = debug_memc_id & 0xF;
+            if( (x>=XMAX) || (y>=YMAX) )
+            {
+                std::cout << "MEMCID parameter does'nt fit XMAX/YMAX" << std::endl;
+                exit(0);
+            }
+         }
+         else if ((strcmp(argv[n],"-XRAMID") == 0) && (n+1<argc) )
+         {
+            debug_xram_id = atoi(argv[n+1]);
+            size_t x = debug_xram_id >> 4;
+            size_t y = debug_xram_id & 0xF;
+            if( (x>=XMAX) || (y>=YMAX) )
+            {
+                std::cout << "XRAMID parameter does'nt fit XMAX/YMAX" << std::endl;
+                exit(0);
+            }
+         }
+         else if ((strcmp(argv[n],"-IOB") == 0) && (n+1<argc) )
+         {
+            debug_iob = atoi(argv[n+1]);
+         }
+         else if ((strcmp(argv[n],"-PROCID") == 0) && (n+1<argc) )
+         {
+            debug_proc_id     = atoi(argv[n+1]);
+            size_t cluster_xy = debug_proc_id / NB_PROCS_MAX ;
+            size_t x          = cluster_xy >> 4;
+            size_t y          = cluster_xy & 0xF;
+            if( (x>=XMAX) || (y>=YMAX) )
+            {
+                std::cout << "PROCID parameter does'nt fit XMAX/YMAX" << std::endl;
+                exit(0);
+            }
+         }
+         else if ((strcmp(argv[n], "-THREADS") == 0) && ((n+1) < argc))
+         {
+            threads_nr = atoi(argv[n+1]);
+            threads_nr = (threads_nr < 1) ? 1 : threads_nr;
+         }
+         else if ((strcmp(argv[n], "-FROZEN") == 0) && (n+1 < argc))
+         {
+            frozen_cycles = atoi(argv[n+1]);
+         }
+         else if ((strcmp(argv[n], "-PERIOD") == 0) && (n+1 < argc))
+         {
+            debug_period = atoi(argv[n+1]);
+         }
+         else
+         {
+            std::cout << "   Arguments are (key,value) couples." << std::endl;
+            std::cout << "   The order is not important." << std::endl;
+            std::cout << "   Accepted arguments are :" << std::endl << std::endl;
+            std::cout << "     -SOFT pathname_for_embedded_soft" << std::endl;
+            std::cout << "     -DISK pathname_for_disk_image" << std::endl;
+            std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
+            std::cout << "     -DEBUG debug_start_cycle" << std::endl;
+            std::cout << "     -THREADS simulator's threads number" << std::endl;
+            std::cout << "     -FROZEN max_number_of_lines" << std::endl;
+            std::cout << "     -PERIOD number_of_cycles between trace" << std::endl;
+            std::cout << "     -MEMCID index_memc_to_be_traced" << std::endl;
+            std::cout << "     -XRAMID index_xram_to_be_traced" << std::endl;
+            std::cout << "     -PROCID index_proc_to_be_traced" << std::endl;
+            std::cout << "     -IOB    non_zero_value" << std::endl;
+            exit(0);
+         }
+      }
+   }
+
+   // checking hardware parameters
+   assert( (XMAX <= 16) and
+           "The XMAX parameter cannot be larger than 16" );
+
+   assert( (YMAX <= 16) and
+           "The YMAX parameter cannot be larger than 16" );
+
+   assert( (NB_PROCS_MAX <= 8) and
+           "The NB_PROCS_MAX parameter cannot be larger than 8" );
+
+   assert( (NB_DMA_CHANNELS <= 4) and
+           "The NB_DMA_CHANNELS parameter cannot be larger than 4" );
+
+   assert( (NB_TTY_CHANNELS == 1) and
+           "The NB_TTY_CHANNELS parameter must be 1" );
+
+   assert( (NB_NIC_CHANNELS == 2) and
+           "The NB_NIC_CHANNELS parameter must be 2" );
+
+   std::cout << std::endl << std::dec
+             << " - XMAX            = " << XMAX << std::endl
+             << " - YMAX            = " << YMAX << std::endl
+             << " - NB_PROCS_MAX    = " << NB_PROCS_MAX <<  std::endl
+             << " - NB_TTY_CHANNELS = " << NB_TTY_CHANNELS <<  std::endl
+             << " - NB_DMA_CHANNELS = " << NB_DMA_CHANNELS <<  std::endl
+             << " - NB_NIC_CHANNELS = " << NB_NIC_CHANNELS <<  std::endl
+             << " - MEMC_WAYS       = " << MEMC_WAYS << std::endl
+             << " - MEMC_SETS       = " << MEMC_SETS << std::endl
+             << " - RAM_LATENCY     = " << XRAM_LATENCY << std::endl
+             << " - MAX_FROZEN      = " << frozen_cycles << std::endl
+             << " - DEBUG_PROCID    = " << debug_proc_id << std::endl
+             << " - DEBUG_MEMCID    = " << debug_memc_id << std::endl
+             << " - DEBUG_XRAMID    = " << debug_xram_id << std::endl;
+
+   std::cout << std::endl;
+
+#if USE_OPENMP
+   omp_set_dynamic(false);
+   omp_set_num_threads(threads_nr);
+   std::cerr << "Built with openmp version " << _OPENMP << std::endl;
+#endif
+
+   // Define VciParams objects
+   typedef soclib::caba::VciParams<vci_cell_width_int,
+                                   vci_plen_width,
+                                   vci_address_width,
+                                   vci_rerror_width,
+                                   vci_clen_width,
+                                   vci_rflag_width,
+                                   vci_srcid_width,
+                                   vci_pktid_width,
+                                   vci_trdid_width,
+                                   vci_wrplen_width> vci_param_int;
+
+   typedef soclib::caba::VciParams<vci_cell_width_ext,
+                                   vci_plen_width,
+                                   vci_address_width,
+                                   vci_rerror_width,
+                                   vci_clen_width,
+                                   vci_rflag_width,
+                                   vci_srcid_width,
+                                   vci_pktid_width,
+                                   vci_trdid_width,
+                                   vci_wrplen_width> vci_param_ext;
+
+   /////////////////////////////////////////////////////////////////////
+   // INT network mapping table
+   // - two levels address decoding for commands
+   // - two levels srcid decoding for responses
+   // - NB_PROCS_MAX + 2 (MDMA, IOBX) local initiators per cluster
+   // - 4 local targets (MEMC, XICU, MDMA, IOBX) per cluster
+   /////////////////////////////////////////////////////////////////////
+   MappingTable maptab_int( vci_address_width,
+                            IntTab(x_width + y_width, 16 - x_width - y_width),
+                            IntTab(x_width + y_width, vci_srcid_width - x_width - y_width),
+                            0x00FF000000);
+
+   for (size_t x = 0; x < XMAX; x++)
+   {
+      for (size_t y = 0; y < YMAX; y++)
+      {
+         uint64_t offset = ((uint64_t)cluster(x,y))
+                              << (vci_address_width-x_width-y_width);
+         bool config    = true;
+         bool cacheable = true;
+
+         // the four following segments are defined in all clusters
+
+         std::ostringstream    smemc_conf;
+         smemc_conf << "int_seg_memc_conf_" << x << "_" << y;
+         maptab_int.add(Segment(smemc_conf.str(), SEG_MMC_BASE+offset, SEG_MMC_SIZE,
+                     IntTab(cluster(x,y), INT_MEMC_TGT_ID), not cacheable, config ));
+
+         std::ostringstream    smemc_xram;
+         smemc_xram << "int_seg_memc_xram_" << x << "_" << y;
+         maptab_int.add(Segment(smemc_xram.str(), SEG_RAM_BASE+offset, SEG_RAM_SIZE,
+                     IntTab(cluster(x,y), INT_MEMC_TGT_ID), cacheable));
+
+         std::ostringstream    sxicu;
+         sxicu << "int_seg_xicu_" << x << "_" << y;
+         maptab_int.add(Segment(sxicu.str(), SEG_XCU_BASE+offset, SEG_XCU_SIZE,
+                     IntTab(cluster(x,y), INT_XICU_TGT_ID), not cacheable));
+
+         std::ostringstream    smdma;
+         smdma << "int_seg_mdma_" << x << "_" << y;
+         maptab_int.add(Segment(smdma.str(), SEG_DMA_BASE+offset, SEG_DMA_SIZE,
+                     IntTab(cluster(x,y), INT_MDMA_TGT_ID), not cacheable));
+
+         std::ostringstream    sbrom;
+         sbrom << "int_seg_brom_" << x << "_" << y;
+         maptab_int.add(Segment(sbrom.str(), SEG_ROM_BASE+offset, SEG_ROM_SIZE,
+                     IntTab(cluster(x,y), INT_BROM_TGT_ID), cacheable));
+
+         // the following segments are only defined in cluster_iob0 or in cluster_iob1
+
+         if ( (cluster(x,y) == cluster_iob0) or (cluster(x,y) == cluster_iob1) )
+         {
+            std::ostringstream    siobx;
+            siobx << "int_seg_iobx_" << x << "_" << y;
+            maptab_int.add(Segment(siobx.str(), SEG_IOB_BASE+offset, SEG_IOB_SIZE,
+                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable, config ));
+
+            std::ostringstream    stty;
+            stty << "int_seg_mtty_" << x << "_" << y;
+            maptab_int.add(Segment(stty.str(), SEG_TTY_BASE+offset, SEG_TTY_SIZE,
+                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
+
+            std::ostringstream    sfbf;
+            sfbf << "int_seg_fbuf_" << x << "_" << y;
+            maptab_int.add(Segment(sfbf.str(), SEG_FBF_BASE+offset, SEG_FBF_SIZE,
+                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
+
+            std::ostringstream    sbdv;
+            sbdv << "int_seg_bdev_" << x << "_" << y;
+            maptab_int.add(Segment(sbdv.str(), SEG_IOC_BASE+offset, SEG_IOC_SIZE,
+                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
+
+            std::ostringstream    snic;
+            snic << "int_seg_mnic_" << x << "_" << y;
+            maptab_int.add(Segment(snic.str(), SEG_NIC_BASE+offset, SEG_NIC_SIZE,
+                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
+
+            std::ostringstream    sdma;
+            sdma << "int_seg_cdma_" << x << "_" << y;
+            maptab_int.add(Segment(sdma.str(), SEG_CMA_BASE+offset, SEG_CMA_SIZE,
+                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
+
+            std::ostringstream    spic;
+            spic << "int_seg_iopi_" << x << "_" << y;
+            maptab_int.add(Segment(spic.str(), SEG_PIC_BASE+offset, SEG_PIC_SIZE,
+                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
+         }
+
+         // This define the mapping between the SRCIDs
+         // and the port index on the local interconnect.
+
+         maptab_int.srcid_map( IntTab( cluster(x,y), MDMA_LOCAL_SRCID ),
+                               IntTab( cluster(x,y), INT_MDMA_INI_ID ) );
+
+         maptab_int.srcid_map( IntTab( cluster(x,y), IOBX_LOCAL_SRCID ),
+                               IntTab( cluster(x,y), INT_IOBX_INI_ID ) );
+
+         maptab_int.srcid_map( IntTab( cluster(x,y), IOPI_LOCAL_SRCID ),
+                               IntTab( cluster(x,y), INT_IOBX_INI_ID ) );
+
+         for ( size_t p = 0 ; p < NB_PROCS_MAX ; p++ )
+         maptab_int.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+p ),
+                               IntTab( cluster(x,y), INT_PROC_INI_ID+p ) );
+      }
+   }
+   std::cout << "INT network " << maptab_int << std::endl;
+
+    /////////////////////////////////////////////////////////////////////////
+    // RAM network mapping table
+    // - two levels address decoding for commands
+    // - two levels srcid decoding for responses
+    // - 2 local initiators (MEMC, IOBX) per cluster
+    //   (IOBX component only in cluster_iob0 and cluster_iob1)
+    // - 1 local target (XRAM) per cluster
+    ////////////////////////////////////////////////////////////////////////
+    MappingTable maptab_ram( vci_address_width,
+                             IntTab(x_width+y_width, 0),
+                             IntTab(x_width+y_width, vci_srcid_width - x_width - y_width),
+                             0x00FF000000);
+
+    for (size_t x = 0; x < XMAX; x++)
+    {
+        for (size_t y = 0; y < YMAX ; y++)
+        {
+            uint64_t offset = ((uint64_t)cluster(x,y))
+                                << (vci_address_width-x_width-y_width);
+
+            std::ostringstream sxram;
+            sxram << "ext_seg_xram_" << x << "_" << y;
+            maptab_ram.add(Segment(sxram.str(), SEG_RAM_BASE+offset,
+                           SEG_RAM_SIZE, IntTab(cluster(x,y), RAM_XRAM_TGT_ID), false));
+        }
+    }
+
+    // This define the mapping between the initiators SRCID
+    // and the port index on the RAM local interconnect.
+    // External initiator have two alias SRCID (iob0 / iob1)
+
+    maptab_ram.srcid_map( IntTab( cluster_iob0, CDMA_LOCAL_SRCID ),
+                          IntTab( cluster_iob0, RAM_IOBX_INI_ID ) );
+
+    maptab_ram.srcid_map( IntTab( cluster_iob1, CDMA_LOCAL_SRCID ),
+                          IntTab( cluster_iob1, RAM_IOBX_INI_ID ) );
+
+    maptab_ram.srcid_map( IntTab( cluster_iob0, BDEV_LOCAL_SRCID ),
+                          IntTab( cluster_iob0, RAM_IOBX_INI_ID ) );
+
+    maptab_ram.srcid_map( IntTab( cluster_iob1, BDEV_LOCAL_SRCID ),
+                          IntTab( cluster_iob1, RAM_IOBX_INI_ID ) );
+
+    maptab_ram.srcid_map( IntTab( cluster_iob0, IOPI_LOCAL_SRCID ),
+                          IntTab( cluster_iob0, RAM_IOBX_INI_ID ) );
+
+    maptab_ram.srcid_map( IntTab( cluster_iob1, IOPI_LOCAL_SRCID ),
+                          IntTab( cluster_iob1, RAM_IOBX_INI_ID ) );
+
+    maptab_ram.srcid_map( IntTab( cluster_iob0, MEMC_LOCAL_SRCID ),
+                          IntTab( cluster_iob0, RAM_MEMC_INI_ID ) );
+
+    maptab_ram.srcid_map( IntTab( cluster_iob1, MEMC_LOCAL_SRCID ),
+                          IntTab( cluster_iob1, RAM_MEMC_INI_ID ) );
+
+    std::cout << "RAM network " << maptab_ram << std::endl;
+
+    ///////////////////////////////////////////////////////////////////////
+    // IOX network mapping table
+    // - two levels address decoding for commands (9, 7) bits
+    // - two levels srcid decoding for responses
+    // - 5 initiators (IOB0, IOB1, BDEV, CDMA, IOPI)
+    // - 9 targets (IOB0, IOB1, BDEV, CDMA, MTTY, FBUF, BROM, MNIC, IOPI)
+    //
+    // Address bit 32 is used to determine if a command must be routed to
+    // IOB0 or IOB1.
+    ///////////////////////////////////////////////////////////////////////
+    MappingTable maptab_iox(
+          vci_address_width,
+          IntTab(x_width + y_width - 1, 16 - x_width - y_width + 1),
+          IntTab(x_width + y_width    , vci_param_ext::S - x_width - y_width),
+          0x00FF000000);
+
+    // External peripherals segments
+    // When there is more than one cluster, external peripherals can be accessed
+    // through two segments, depending on the used IOB (IOB0 or IOB1).
+
+    const uint64_t iob0_base = ((uint64_t)cluster_iob0)
+       << (vci_address_width - x_width - y_width);
+
+    maptab_iox.add(Segment("iox_seg_mtty_0", SEG_TTY_BASE + iob0_base, SEG_TTY_SIZE,
+                   IntTab(0, IOX_MTTY_TGT_ID), false));
+    maptab_iox.add(Segment("iox_seg_fbuf_0", SEG_FBF_BASE + iob0_base, SEG_FBF_SIZE,
+                   IntTab(0, IOX_FBUF_TGT_ID), false));
+    maptab_iox.add(Segment("iox_seg_bdev_0", SEG_IOC_BASE + iob0_base, SEG_IOC_SIZE,
+                   IntTab(0, IOX_BDEV_TGT_ID), false));
+    maptab_iox.add(Segment("iox_seg_mnic_0", SEG_NIC_BASE + iob0_base, SEG_NIC_SIZE,
+                   IntTab(0, IOX_MNIC_TGT_ID), false));
+    maptab_iox.add(Segment("iox_seg_cdma_0", SEG_CMA_BASE + iob0_base, SEG_CMA_SIZE,
+                   IntTab(0, IOX_CDMA_TGT_ID), false));
+    maptab_iox.add(Segment("iox_seg_iopi_0", SEG_PIC_BASE + iob0_base, SEG_PIC_SIZE,
+                   IntTab(0, IOX_IOPI_TGT_ID), false));
+
+    if ( cluster_iob0 != cluster_iob1 )
+    {
+       const uint64_t iob1_base = ((uint64_t)cluster_iob1)
+          << (vci_address_width - x_width - y_width);
+
+        maptab_iox.add(Segment("iox_seg_mtty_1", SEG_TTY_BASE + iob1_base, SEG_TTY_SIZE,
+                   IntTab(0, IOX_MTTY_TGT_ID), false));
+        maptab_iox.add(Segment("iox_seg_fbuf_1", SEG_FBF_BASE + iob1_base, SEG_FBF_SIZE,
+                   IntTab(0, IOX_FBUF_TGT_ID), false));
+        maptab_iox.add(Segment("iox_seg_bdev_1", SEG_IOC_BASE + iob1_base, SEG_IOC_SIZE,
+                   IntTab(0, IOX_BDEV_TGT_ID), false));
+        maptab_iox.add(Segment("iox_seg_mnic_1", SEG_NIC_BASE + iob1_base, SEG_NIC_SIZE,
+                   IntTab(0, IOX_MNIC_TGT_ID), false));
+        maptab_iox.add(Segment("iox_seg_cdma_1", SEG_CMA_BASE + iob1_base, SEG_CMA_SIZE,
+                   IntTab(0, IOX_CDMA_TGT_ID), false));
+        maptab_iox.add(Segment("iox_seg_iopi_1", SEG_PIC_BASE + iob1_base, SEG_PIC_SIZE,
+                   IntTab(0, IOX_IOPI_TGT_ID), false));
+    }
+
+    // If there is more than one cluster, external peripherals
+    // can access RAM through two segments (IOB0 / IOB1).
+    // As IOMMU is not activated, addresses are 40 bits (physical addresses),
+    // and the choice depends on address bit A[32].
+    for (size_t x = 0; x < XMAX; x++)
+    {
+        for (size_t y = 0; y < YMAX ; y++)
+        {
+            const bool wti       = true;
+            const bool cacheable = true;
+
+            const uint64_t offset = ((uint64_t)cluster(x,y))
+                << (vci_address_width-x_width-y_width);
+
+            const uint64_t xicu_base = SEG_XCU_BASE + offset;
+
+            if ( (y & 0x1) == 0 ) // use IOB0
+            {
+                std::ostringstream sxcu0;
+                sxcu0 << "iox_seg_xcu0_" << x << "_" << y;
+                maptab_iox.add(Segment(sxcu0.str(), xicu_base, SEG_XCU_SIZE,
+                            IntTab(0, IOX_IOB0_TGT_ID), not cacheable, wti));
+
+                std::ostringstream siob0;
+                siob0 << "iox_seg_ram0_" << x << "_" << y;
+                maptab_iox.add(Segment(siob0.str(), offset, SEG_XCU_BASE,
+                            IntTab(0, IOX_IOB0_TGT_ID), not cacheable, not wti));
+            }
+            else                  // USE IOB1
+            {
+                std::ostringstream sxcu1;
+                sxcu1 << "iox_seg_xcu1_" << x << "_" << y;
+                maptab_iox.add(Segment(sxcu1.str(), xicu_base, SEG_XCU_SIZE,
+                            IntTab(0, IOX_IOB1_TGT_ID), not cacheable, wti));
+
+                std::ostringstream siob1;
+                siob1 << "iox_seg_ram1_" << x << "_" << y;
+                maptab_iox.add(Segment(siob1.str(), offset, SEG_XCU_BASE,
+                            IntTab(0, IOX_IOB1_TGT_ID), not cacheable, not wti));
+            }
+        }
+    }
+
+    // This define the mapping between the external initiators (SRCID)
+    // and the port index on the IOX local interconnect.
+
+    maptab_iox.srcid_map( IntTab( 0, CDMA_LOCAL_SRCID ) ,
+                          IntTab( 0, IOX_CDMA_INI_ID  ) );
+    maptab_iox.srcid_map( IntTab( 0, BDEV_LOCAL_SRCID ) ,
+                          IntTab( 0, IOX_BDEV_INI_ID  ) );
+    maptab_iox.srcid_map( IntTab( 0, IOPI_LOCAL_SRCID ) ,
+                          IntTab( 0, IOX_IOPI_INI_ID  ) );
+    maptab_iox.srcid_map( IntTab( 0, IOX_IOB0_INI_ID  ) ,
+                          IntTab( 0, IOX_IOB0_INI_ID  ) );
+
+    if ( cluster_iob0 != cluster_iob1 )
+    {
+        maptab_iox.srcid_map( IntTab( 0, IOX_IOB1_INI_ID ) ,
+                              IntTab( 0, IOX_IOB1_INI_ID ) );
+    }
+
+    std::cout << "IOX network " << maptab_iox << std::endl;
+
+    ////////////////////
+    // Signals
+    ///////////////////
+
+    sc_clock                          signal_clk("clk");
+    sc_signal<bool>                   signal_resetn("resetn");
+
+    sc_signal<bool>                   signal_irq_false;
+    sc_signal<bool>                   signal_irq_bdev;
+    sc_signal<bool>                   signal_irq_mtty_rx;
+    sc_signal<bool>                   signal_irq_mnic_rx[NB_NIC_CHANNELS];
+    sc_signal<bool>                   signal_irq_mnic_tx[NB_NIC_CHANNELS];
+    sc_signal<bool>                   signal_irq_cdma[NB_CMA_CHANNELS];
+
+    // VCI signals for IOX network
+    VciSignals<vci_param_ext>         signal_vci_ini_iob0("signal_vci_ini_iob0");
+    VciSignals<vci_param_ext>         signal_vci_ini_iob1("signal_vci_ini_iob1");
+    VciSignals<vci_param_ext>         signal_vci_ini_bdev("signal_vci_ini_bdev");
+    VciSignals<vci_param_ext>         signal_vci_ini_cdma("signal_vci_ini_cdma");
+    VciSignals<vci_param_ext>         signal_vci_ini_iopi("signal_vci_ini_iopi");
+
+    VciSignals<vci_param_ext>         signal_vci_tgt_iob0("signal_vci_tgt_iob0");
+    VciSignals<vci_param_ext>         signal_vci_tgt_iob1("signal_vci_tgt_iob1");
+    VciSignals<vci_param_ext>         signal_vci_tgt_mtty("signal_vci_tgt_mtty");
+    VciSignals<vci_param_ext>         signal_vci_tgt_fbuf("signal_vci_tgt_fbuf");
+    VciSignals<vci_param_ext>         signal_vci_tgt_mnic("signal_vci_tgt_mnic");
+    VciSignals<vci_param_ext>         signal_vci_tgt_bdev("signal_vci_tgt_bdev");
+    VciSignals<vci_param_ext>         signal_vci_tgt_cdma("signal_vci_tgt_cdma");
+    VciSignals<vci_param_ext>         signal_vci_tgt_iopi("signal_vci_ini_iopi");
+
+   // Horizontal inter-clusters INT network DSPIN
+   DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_h_inc =
+      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_h_inc", XMAX-1, YMAX, 3);
+   DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_h_dec =
+      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_h_dec", XMAX-1, YMAX, 3);
+   DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_h_inc =
+      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_h_inc", XMAX-1, YMAX, 2);
+   DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_h_dec =
+      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_h_dec", XMAX-1, YMAX, 2);
+
+   // Vertical inter-clusters INT network DSPIN
+   DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_v_inc =
+      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_v_inc", XMAX, YMAX-1, 3);
+   DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_v_dec =
+      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_v_dec", XMAX, YMAX-1, 3);
+   DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_v_inc =
+      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_v_inc", XMAX, YMAX-1, 2);
+   DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_v_dec =
+      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_v_dec", XMAX, YMAX-1, 2);
+
+   // Mesh boundaries INT network DSPIN
+   DspinSignals<dspin_int_cmd_width>**** signal_dspin_false_int_cmd_in =
+      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cmd_in", XMAX, YMAX, 4, 3);
+   DspinSignals<dspin_int_cmd_width>**** signal_dspin_false_int_cmd_out =
+      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cmd_out", XMAX, YMAX, 4, 3);
+   DspinSignals<dspin_int_rsp_width>**** signal_dspin_false_int_rsp_in =
+      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_rsp_in", XMAX, YMAX, 4, 2);
+   DspinSignals<dspin_int_rsp_width>**** signal_dspin_false_int_rsp_out =
+      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_rsp_out", XMAX, YMAX, 4, 2);
+
+
+   // Horizontal inter-clusters RAM network DSPIN
+   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_h_inc =
+      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_h_inc", XMAX-1, YMAX);
+   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_h_dec =
+      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_h_dec", XMAX-1, YMAX);
+   DspinSignals<dspin_ram_rsp_width>** signal_dspin_ram_rsp_h_inc =
+      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_h_inc", XMAX-1, YMAX);
+   DspinSignals<dspin_ram_rsp_width>** signal_dspin_ram_rsp_h_dec =
+      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_h_dec", XMAX-1, YMAX);
+
+   // Vertical inter-clusters RAM network DSPIN
+   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_v_inc =
+      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_v_inc", XMAX, YMAX-1);
+   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_v_dec =
+      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_v_dec", XMAX, YMAX-1);
+   DspinSignals<dspin_ram_rsp_width>** signal_dspin_ram_rsp_v_inc =
+      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_v_inc", XMAX, YMAX-1);
+   DspinSignals<dspin_ram_rsp_width>** signal_dspin_ram_rsp_v_dec =
+      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_v_dec", XMAX, YMAX-1);
+
+   // Mesh boundaries RAM network DSPIN
+   DspinSignals<dspin_ram_cmd_width>*** signal_dspin_false_ram_cmd_in =
+      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_false_ram_cmd_in", XMAX, YMAX, 4);
+   DspinSignals<dspin_ram_cmd_width>*** signal_dspin_false_ram_cmd_out =
+      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_false_ram_cmd_out", XMAX, YMAX, 4);
+   DspinSignals<dspin_ram_rsp_width>*** signal_dspin_false_ram_rsp_in =
+      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_false_ram_rsp_in", XMAX, YMAX, 4);
+   DspinSignals<dspin_ram_rsp_width>*** signal_dspin_false_ram_rsp_out =
+      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_false_ram_rsp_out", XMAX, YMAX, 4);
+
+   ////////////////////////////
+   //      Loader
+   ////////////////////////////
+
+#if USE_ALMOS
+   soclib::common::Loader loader(almos_bootloader_pathname,
+                                 almos_archinfo_pathname,
+                                 almos_kernel_pathname);
+#else
+   soclib::common::Loader loader(soft_name);
+#endif
+
+   typedef soclib::common::GdbServer<soclib::common::Mips32ElIss> proc_iss;
+   proc_iss::set_loader(loader);
+
+   ////////////////////////////////////////
+   //  Instanciated Hardware Components
+   ////////////////////////////////////////
+
+   std::cout << std::endl << "External Bus and Peripherals" << std::endl << std::endl;
+
+   const size_t nb_iox_initiators = (cluster_iob0 != cluster_iob1) ? 5 : 4;
+   const size_t nb_iox_targets = (cluster_iob0 != cluster_iob1) ? 8 : 7;
+
+   // IOX network
+   VciIoxNetwork<vci_param_ext>* iox_network;
+   iox_network = new VciIoxNetwork<vci_param_ext>( "iox_network",
+                                                   maptab_iox,
+                                                   nb_iox_targets,
+                                                   nb_iox_initiators );
+
+   // Network Controller
+   VciMultiNic<vci_param_ext>*  mnic;
+   mnic = new VciMultiNic<vci_param_ext>( "mnic",
+                                          IntTab(0, IOX_MNIC_TGT_ID),
+                                          maptab_iox,
+                                          NB_NIC_CHANNELS,
+                                          0,           // mac_4 address
+                                          0,           // mac_2 address
+                                          nic_rx_name,
+                                          nic_tx_name);
+
+   // Frame Buffer
+   VciFrameBuffer<vci_param_ext>*  fbuf;
+   fbuf = new VciFrameBuffer<vci_param_ext>( "fbuf",
+                                             IntTab(0, IOX_FBUF_TGT_ID),
+                                             maptab_iox,
+                                             FBUF_X_SIZE, FBUF_Y_SIZE );
+
+   // Block Device
+   // for AHCI
+   // std::vector<std::string> filenames;
+   // filenames.push_back(disk_name);            // one single disk
+   VciBlockDeviceTsar<vci_param_ext>*  bdev;
+   bdev = new VciBlockDeviceTsar<vci_param_ext>( "bdev",
+                                                  maptab_iox,
+                                                  IntTab(0, BDEV_LOCAL_SRCID),
+                                                  IntTab(0, IOX_BDEV_TGT_ID),
+                                                  disk_name,
+                                                  512,        // block size
+                                                  64,         // burst size (bytes)
+                                                  0 );        // disk latency
+
+   // Chained Buffer DMA controller
+   VciChbufDma<vci_param_ext>*  cdma;
+   cdma = new VciChbufDma<vci_param_ext>( "cdma",
+                                          maptab_iox,
+                                          IntTab(0, CDMA_LOCAL_SRCID),
+                                          IntTab(0, IOX_CDMA_TGT_ID),
+                                          64,          // burst size (bytes)
+                                          2*NB_NIC_CHANNELS );
+   // Multi-TTY controller
+   std::vector<std::string> vect_names;
+   for( size_t tid = 0 ; tid < NB_TTY_CHANNELS ; tid++ )
+   {
+      std::ostringstream term_name;
+         term_name <<  "term" << tid;
+         vect_names.push_back(term_name.str().c_str());
+      }
+      VciMultiTty<vci_param_ext>*  mtty;
+      mtty = new VciMultiTty<vci_param_ext>( "mtty",
+                                             IntTab(0, IOX_MTTY_TGT_ID),
+                                             maptab_iox,
+                                             vect_names);
+
+   // IOPIC
+   VciIopic<vci_param_ext>* iopi;
+   iopi = new VciIopic<vci_param_ext>( "iopi",
+                                       maptab_iox,
+                                       IntTab(0, IOPI_LOCAL_SRCID),
+                                       IntTab(0, IOX_IOPI_TGT_ID),
+                                       32 );        // number of input HWI
+   // Clusters
+   TsarIobCluster<vci_param_int,
+                  vci_param_ext,
+                  dspin_int_cmd_width,
+                  dspin_int_rsp_width,
+                  dspin_ram_cmd_width,
+                  dspin_ram_rsp_width>* clusters[XMAX][YMAX];
+
+#if USE_OPENMP
+#pragma omp parallel
+    {
+#pragma omp for
+#endif
+        for(size_t i = 0; i  < (XMAX * YMAX); i++)
+        {
+            size_t x = i / YMAX;
+            size_t y = i % YMAX;
+
+#if USE_OPENMP
+#pragma omp critical
+            {
+#endif
+            std::cout << std::endl;
+            std::cout << "Cluster_" << std::dec << x << "_" << y << std::endl;
+            std::cout << std::endl;
+
+            const bool is_iob0 = (cluster(x,y) == cluster_iob0);
+            const bool is_iob1 = (cluster(x,y) == cluster_iob1);
+            const bool is_io_cluster = is_iob0 || is_iob1;
+
+            const int iox_iob_ini_id = is_iob0 ?
+                IOX_IOB0_INI_ID :
+                IOX_IOB1_INI_ID ;
+            const int iox_iob_tgt_id = is_iob0 ?
+                IOX_IOB0_TGT_ID :
+                IOX_IOB1_TGT_ID ;
+
+            std::ostringstream sc;
+            sc << "cluster_" << x << "_" << y;
+            clusters[x][y] = new TsarIobCluster<vci_param_int,
+                                                vci_param_ext,
+                                                dspin_int_cmd_width,
+                                                dspin_int_rsp_width,
+                                                dspin_ram_cmd_width,
+                                                dspin_ram_rsp_width>
+            (
+                sc.str().c_str(),
+                NB_PROCS_MAX,
+                NB_DMA_CHANNELS,
+                x,
+                y,
+                XMAX,
+                YMAX,
+
+                maptab_int,
+                maptab_ram,
+                maptab_iox,
+
+                x_width,
+                y_width,
+                vci_srcid_width - x_width - y_width,            // l_id width,
+
+                INT_MEMC_TGT_ID,
+                INT_XICU_TGT_ID,
+                INT_MDMA_TGT_ID,
+                INT_BROM_TGT_ID,
+                INT_IOBX_TGT_ID,
+
+                INT_PROC_INI_ID,
+                INT_MDMA_INI_ID,
+                INT_IOBX_INI_ID,
+
+                RAM_XRAM_TGT_ID,
+
+                RAM_MEMC_INI_ID,
+                RAM_IOBX_INI_ID,
+
+                is_io_cluster,
+                iox_iob_tgt_id,
+                iox_iob_ini_id,
+
+                MEMC_WAYS,
+                MEMC_SETS,
+                L1_IWAYS,
+                L1_ISETS,
+                L1_DWAYS,
+                L1_DSETS,
+                XRAM_LATENCY,
+                XCU_NB_INPUTS,
+
+                DISTRIBUTED_BOOT,
+
+                loader,
+
+                frozen_cycles,
+                debug_from,
+                debug_ok and (cluster(x,y) == debug_memc_id),
+                debug_ok and (cluster(x,y) == debug_proc_id),
+                debug_ok and debug_iob
+            );
+
+#if USE_OPENMP
+            } // end critical
+#endif
+        } // end for
+#if USE_OPENMP
+    }
+#endif
+
+    std::cout << std::endl;
+
+    ///////////////////////////////////////////////////////////////////////////////
+    //     Net-list
+    ///////////////////////////////////////////////////////////////////////////////
+
+    // IOX network connexion
+    iox_network->p_clk                                   (signal_clk);
+    iox_network->p_resetn                                (signal_resetn);
+    iox_network->p_to_ini[IOX_IOB0_INI_ID]               (signal_vci_ini_iob0);
+    iox_network->p_to_ini[IOX_BDEV_INI_ID]               (signal_vci_ini_bdev);
+    iox_network->p_to_ini[IOX_CDMA_INI_ID]               (signal_vci_ini_cdma);
+    iox_network->p_to_ini[IOX_IOPI_INI_ID]               (signal_vci_ini_iopi);
+
+    iox_network->p_to_tgt[IOX_IOB0_TGT_ID]               (signal_vci_tgt_iob0);
+    iox_network->p_to_tgt[IOX_MTTY_TGT_ID]               (signal_vci_tgt_mtty);
+    iox_network->p_to_tgt[IOX_FBUF_TGT_ID]               (signal_vci_tgt_fbuf);
+    iox_network->p_to_tgt[IOX_MNIC_TGT_ID]               (signal_vci_tgt_mnic);
+    iox_network->p_to_tgt[IOX_BDEV_TGT_ID]               (signal_vci_tgt_bdev);
+    iox_network->p_to_tgt[IOX_CDMA_TGT_ID]               (signal_vci_tgt_cdma);
+    iox_network->p_to_tgt[IOX_IOPI_TGT_ID]               (signal_vci_tgt_iopi);
+
+    if (cluster_iob0 != cluster_iob1)
+    {
+        iox_network->p_to_ini[IOX_IOB1_INI_ID]           (signal_vci_ini_iob1);
+        iox_network->p_to_tgt[IOX_IOB1_TGT_ID]           (signal_vci_tgt_iob1);
+    }
+
+    // BDEV connexion
+    bdev->p_clk                                          (signal_clk);
+    bdev->p_resetn                                       (signal_resetn);
+    bdev->p_irq                                          (signal_irq_bdev);
+    bdev->p_vci_target                                   (signal_vci_tgt_bdev);
+    bdev->p_vci_initiator                                (signal_vci_ini_bdev);
+
+    std::cout << "  - BDEV connected" << std::endl;
+
+    // FBUF connexion
+    fbuf->p_clk                                          (signal_clk);
+    fbuf->p_resetn                                       (signal_resetn);
+    fbuf->p_vci                                          (signal_vci_tgt_fbuf);
+
+    std::cout << "  - FBUF connected" << std::endl;
+
+    // MNIC connexion
+    mnic->p_clk                                          (signal_clk);
+    mnic->p_resetn                                       (signal_resetn);
+    mnic->p_vci                                          (signal_vci_tgt_mnic);
+    for ( size_t i=0 ; i<NB_NIC_CHANNELS ; i++ )
+    {
+         mnic->p_rx_irq[i]                               (signal_irq_mnic_rx[i]);
+         mnic->p_tx_irq[i]                               (signal_irq_mnic_tx[i]);
+    }
+
+    std::cout << "  - MNIC connected" << std::endl;
+
+    // MTTY connexion
+    mtty->p_clk                                          (signal_clk);
+    mtty->p_resetn                                       (signal_resetn);
+    mtty->p_vci                                          (signal_vci_tgt_mtty);
+    mtty->p_irq[0]                                       (signal_irq_mtty_rx);
+
+    std::cout << "  - MTTY connected" << std::endl;
+
+    // CDMA connexion
+    cdma->p_clk                                          (signal_clk);
+    cdma->p_resetn                                       (signal_resetn);
+    cdma->p_vci_target                                   (signal_vci_tgt_cdma);
+    cdma->p_vci_initiator                                (signal_vci_ini_cdma);
+    for ( size_t i=0 ; i<(NB_NIC_CHANNELS*2) ; i++)
+    {
+        cdma->p_irq[i]                                   (signal_irq_cdma[i]);
+    }
+
+    std::cout << "  - CDMA connected" << std::endl;
+
+    // IOPI connexion
+    iopi->p_clk                                          (signal_clk);
+    iopi->p_resetn                                       (signal_resetn);
+    iopi->p_vci_target                                   (signal_vci_tgt_iopi);
+    iopi->p_vci_initiator                                (signal_vci_ini_iopi);
+    for ( size_t i=0 ; i<32 ; i++)
+    {
+       if     (i < NB_NIC_CHANNELS)    iopi->p_hwi[i] (signal_irq_mnic_rx[i]);
+       else if(i < 2 )                 iopi->p_hwi[i] (signal_irq_false);
+       else if(i < 2+NB_NIC_CHANNELS)  iopi->p_hwi[i] (signal_irq_mnic_tx[i-2]);
+       else if(i < 4 )                 iopi->p_hwi[i] (signal_irq_false);
+       else if(i < 4+NB_CMA_CHANNELS)  iopi->p_hwi[i] (signal_irq_cdma[i-4]);
+       else if(i < 8)                  iopi->p_hwi[i] (signal_irq_false);
+       else if(i == 8)                 iopi->p_hwi[i] (signal_irq_bdev);
+       else if(i == 9)                 iopi->p_hwi[i] (signal_irq_mtty_rx);
+       else                            iopi->p_hwi[i] (signal_irq_false);
+    }
+
+    std::cout << "  - IOPIC connected" << std::endl;
+
+
+    // IOB0 cluster connexion to IOX network
+    (*clusters[0][0]->p_vci_iob_iox_ini) (signal_vci_ini_iob0);
+    (*clusters[0][0]->p_vci_iob_iox_tgt) (signal_vci_tgt_iob0);
+
+    // IOB1 cluster connexion to IOX network
+    // (only when there is more than 1 cluster)
+    if ( cluster_iob0 != cluster_iob1 )
+    {
+        (*clusters[XMAX-1][YMAX-1]->p_vci_iob_iox_ini) (signal_vci_ini_iob1);
+        (*clusters[XMAX-1][YMAX-1]->p_vci_iob_iox_tgt) (signal_vci_tgt_iob1);
+    }
+
+    // All clusters Clock & RESET connexions
+    for ( size_t x = 0; x < (XMAX); x++ )
+    {
+        for (size_t y = 0; y < YMAX; y++)
+        {
+            clusters[x][y]->p_clk     (signal_clk);
+            clusters[x][y]->p_resetn  (signal_resetn);
+        }
+    }
+
+   // Inter Clusters horizontal connections
+   if (XMAX > 1)
+   {
+      for (size_t x = 0; x < (XMAX-1); x++)
+      {
+         for (size_t y = 0; y < YMAX; y++)
+         {
+            for (size_t k = 0; k < 3; k++)
+            {
+               clusters[x][y]->p_dspin_int_cmd_out[EAST][k]      (signal_dspin_int_cmd_h_inc[x][y][k]);
+               clusters[x+1][y]->p_dspin_int_cmd_in[WEST][k]     (signal_dspin_int_cmd_h_inc[x][y][k]);
+               clusters[x][y]->p_dspin_int_cmd_in[EAST][k]       (signal_dspin_int_cmd_h_dec[x][y][k]);
+               clusters[x+1][y]->p_dspin_int_cmd_out[WEST][k]    (signal_dspin_int_cmd_h_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++)
+            {
+               clusters[x][y]->p_dspin_int_rsp_out[EAST][k]      (signal_dspin_int_rsp_h_inc[x][y][k]);
+               clusters[x+1][y]->p_dspin_int_rsp_in[WEST][k]     (signal_dspin_int_rsp_h_inc[x][y][k]);
+               clusters[x][y]->p_dspin_int_rsp_in[EAST][k]       (signal_dspin_int_rsp_h_dec[x][y][k]);
+               clusters[x+1][y]->p_dspin_int_rsp_out[WEST][k]    (signal_dspin_int_rsp_h_dec[x][y][k]);
+            }
+
+            clusters[x][y]->p_dspin_ram_cmd_out[EAST]      (signal_dspin_ram_cmd_h_inc[x][y]);
+            clusters[x+1][y]->p_dspin_ram_cmd_in[WEST]     (signal_dspin_ram_cmd_h_inc[x][y]);
+            clusters[x][y]->p_dspin_ram_cmd_in[EAST]       (signal_dspin_ram_cmd_h_dec[x][y]);
+            clusters[x+1][y]->p_dspin_ram_cmd_out[WEST]    (signal_dspin_ram_cmd_h_dec[x][y]);
+            clusters[x][y]->p_dspin_ram_rsp_out[EAST]      (signal_dspin_ram_rsp_h_inc[x][y]);
+            clusters[x+1][y]->p_dspin_ram_rsp_in[WEST]     (signal_dspin_ram_rsp_h_inc[x][y]);
+            clusters[x][y]->p_dspin_ram_rsp_in[EAST]       (signal_dspin_ram_rsp_h_dec[x][y]);
+            clusters[x+1][y]->p_dspin_ram_rsp_out[WEST]    (signal_dspin_ram_rsp_h_dec[x][y]);
+         }
+      }
+   }
+
+   std::cout << std::endl << "Horizontal connections established" << std::endl;
+
+   // Inter Clusters vertical connections
+   if (YMAX > 1)
+   {
+      for (size_t y = 0; y < (YMAX-1); y++)
+      {
+         for (size_t x = 0; x < XMAX; x++)
+         {
+            for (size_t k = 0; k < 3; k++)
+            {
+               clusters[x][y]->p_dspin_int_cmd_out[NORTH][k]     (signal_dspin_int_cmd_v_inc[x][y][k]);
+               clusters[x][y+1]->p_dspin_int_cmd_in[SOUTH][k]    (signal_dspin_int_cmd_v_inc[x][y][k]);
+               clusters[x][y]->p_dspin_int_cmd_in[NORTH][k]      (signal_dspin_int_cmd_v_dec[x][y][k]);
+               clusters[x][y+1]->p_dspin_int_cmd_out[SOUTH][k]   (signal_dspin_int_cmd_v_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++)
+            {
+               clusters[x][y]->p_dspin_int_rsp_out[NORTH][k]     (signal_dspin_int_rsp_v_inc[x][y][k]);
+               clusters[x][y+1]->p_dspin_int_rsp_in[SOUTH][k]    (signal_dspin_int_rsp_v_inc[x][y][k]);
+               clusters[x][y]->p_dspin_int_rsp_in[NORTH][k]      (signal_dspin_int_rsp_v_dec[x][y][k]);
+               clusters[x][y+1]->p_dspin_int_rsp_out[SOUTH][k]   (signal_dspin_int_rsp_v_dec[x][y][k]);
+            }
+
+            clusters[x][y]->p_dspin_ram_cmd_out[NORTH]     (signal_dspin_ram_cmd_v_inc[x][y]);
+            clusters[x][y+1]->p_dspin_ram_cmd_in[SOUTH]    (signal_dspin_ram_cmd_v_inc[x][y]);
+            clusters[x][y]->p_dspin_ram_cmd_in[NORTH]      (signal_dspin_ram_cmd_v_dec[x][y]);
+            clusters[x][y+1]->p_dspin_ram_cmd_out[SOUTH]   (signal_dspin_ram_cmd_v_dec[x][y]);
+            clusters[x][y]->p_dspin_ram_rsp_out[NORTH]     (signal_dspin_ram_rsp_v_inc[x][y]);
+            clusters[x][y+1]->p_dspin_ram_rsp_in[SOUTH]    (signal_dspin_ram_rsp_v_inc[x][y]);
+            clusters[x][y]->p_dspin_ram_rsp_in[NORTH]      (signal_dspin_ram_rsp_v_dec[x][y]);
+            clusters[x][y+1]->p_dspin_ram_rsp_out[SOUTH]   (signal_dspin_ram_rsp_v_dec[x][y]);
+         }
+      }
+   }
+
+   std::cout << "Vertical connections established" << std::endl;
+
+   // East & West boundary cluster connections
+   for (size_t y = 0; y < YMAX; y++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[0][y]->p_dspin_int_cmd_in[WEST][k]          (signal_dspin_false_int_cmd_in[0][y][WEST][k]);
+         clusters[0][y]->p_dspin_int_cmd_out[WEST][k]         (signal_dspin_false_int_cmd_out[0][y][WEST][k]);
+         clusters[XMAX-1][y]->p_dspin_int_cmd_in[EAST][k]     (signal_dspin_false_int_cmd_in[XMAX-1][y][EAST][k]);
+         clusters[XMAX-1][y]->p_dspin_int_cmd_out[EAST][k]    (signal_dspin_false_int_cmd_out[XMAX-1][y][EAST][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[0][y]->p_dspin_int_rsp_in[WEST][k]          (signal_dspin_false_int_rsp_in[0][y][WEST][k]);
+         clusters[0][y]->p_dspin_int_rsp_out[WEST][k]         (signal_dspin_false_int_rsp_out[0][y][WEST][k]);
+         clusters[XMAX-1][y]->p_dspin_int_rsp_in[EAST][k]     (signal_dspin_false_int_rsp_in[XMAX-1][y][EAST][k]);
+         clusters[XMAX-1][y]->p_dspin_int_rsp_out[EAST][k]    (signal_dspin_false_int_rsp_out[XMAX-1][y][EAST][k]);
+      }
+
+     clusters[0][y]->p_dspin_ram_cmd_in[WEST]       (signal_dspin_false_ram_cmd_in[0][y][WEST]);
+     clusters[0][y]->p_dspin_ram_cmd_out[WEST]      (signal_dspin_false_ram_cmd_out[0][y][WEST]);
+     clusters[0][y]->p_dspin_ram_rsp_in[WEST]       (signal_dspin_false_ram_rsp_in[0][y][WEST]);
+     clusters[0][y]->p_dspin_ram_rsp_out[WEST]      (signal_dspin_false_ram_rsp_out[0][y][WEST]);
+
+     clusters[XMAX-1][y]->p_dspin_ram_cmd_in[EAST]  (signal_dspin_false_ram_cmd_in[XMAX-1][y][EAST]);
+     clusters[XMAX-1][y]->p_dspin_ram_cmd_out[EAST] (signal_dspin_false_ram_cmd_out[XMAX-1][y][EAST]);
+     clusters[XMAX-1][y]->p_dspin_ram_rsp_in[EAST]  (signal_dspin_false_ram_rsp_in[XMAX-1][y][EAST]);
+     clusters[XMAX-1][y]->p_dspin_ram_rsp_out[EAST] (signal_dspin_false_ram_rsp_out[XMAX-1][y][EAST]);
+   }
+
+   std::cout << "East & West boundaries established" << std::endl;
+
+   // North & South boundary clusters connections
+   for (size_t x = 0; x < XMAX; x++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[x][0]->p_dspin_int_cmd_in[SOUTH][k]         (signal_dspin_false_int_cmd_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_dspin_int_cmd_out[SOUTH][k]        (signal_dspin_false_int_cmd_out[x][0][SOUTH][k]);
+         clusters[x][YMAX-1]->p_dspin_int_cmd_in[NORTH][k]    (signal_dspin_false_int_cmd_in[x][YMAX-1][NORTH][k]);
+         clusters[x][YMAX-1]->p_dspin_int_cmd_out[NORTH][k]   (signal_dspin_false_int_cmd_out[x][YMAX-1][NORTH][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[x][0]->p_dspin_int_rsp_in[SOUTH][k]         (signal_dspin_false_int_rsp_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_dspin_int_rsp_out[SOUTH][k]        (signal_dspin_false_int_rsp_out[x][0][SOUTH][k]);
+         clusters[x][YMAX-1]->p_dspin_int_rsp_in[NORTH][k]    (signal_dspin_false_int_rsp_in[x][YMAX-1][NORTH][k]);
+         clusters[x][YMAX-1]->p_dspin_int_rsp_out[NORTH][k]   (signal_dspin_false_int_rsp_out[x][YMAX-1][NORTH][k]);
+      }
+
+      clusters[x][0]->p_dspin_ram_cmd_in[SOUTH]       (signal_dspin_false_ram_cmd_in[x][0][SOUTH]);
+      clusters[x][0]->p_dspin_ram_cmd_out[SOUTH]      (signal_dspin_false_ram_cmd_out[x][0][SOUTH]);
+      clusters[x][0]->p_dspin_ram_rsp_in[SOUTH]       (signal_dspin_false_ram_rsp_in[x][0][SOUTH]);
+      clusters[x][0]->p_dspin_ram_rsp_out[SOUTH]      (signal_dspin_false_ram_rsp_out[x][0][SOUTH]);
+
+      clusters[x][YMAX-1]->p_dspin_ram_cmd_in[NORTH]  (signal_dspin_false_ram_cmd_in[x][YMAX-1][NORTH]);
+      clusters[x][YMAX-1]->p_dspin_ram_cmd_out[NORTH] (signal_dspin_false_ram_cmd_out[x][YMAX-1][NORTH]);
+      clusters[x][YMAX-1]->p_dspin_ram_rsp_in[NORTH]  (signal_dspin_false_ram_rsp_in[x][YMAX-1][NORTH]);
+      clusters[x][YMAX-1]->p_dspin_ram_rsp_out[NORTH] (signal_dspin_false_ram_rsp_out[x][YMAX-1][NORTH]);
+   }
+
+   std::cout << "North & South boundaries established" << std::endl << std::endl;
+
+   ////////////////////////////////////////////////////////
+   //   Simulation
+   ///////////////////////////////////////////////////////
+
+   sc_start(sc_core::sc_time(0, SC_NS));
+
+   signal_resetn = false;
+   signal_irq_false = false;
+
+   // network boundaries signals
+   for (size_t x = 0; x < XMAX ; x++)
+   {
+      for (size_t y = 0; y < YMAX ; y++)
+      {
+         for (size_t a = 0; a < 4; a++)
+         {
+            for (size_t k = 0; k < 3; k++)
+            {
+               signal_dspin_false_int_cmd_in[x][y][a][k].write = false;
+               signal_dspin_false_int_cmd_in[x][y][a][k].read = true;
+               signal_dspin_false_int_cmd_out[x][y][a][k].write = false;
+               signal_dspin_false_int_cmd_out[x][y][a][k].read = true;
+            }
+
+            for (size_t k = 0; k < 2; k++)
+            {
+               signal_dspin_false_int_rsp_in[x][y][a][k].write = false;
+               signal_dspin_false_int_rsp_in[x][y][a][k].read = true;
+               signal_dspin_false_int_rsp_out[x][y][a][k].write = false;
+               signal_dspin_false_int_rsp_out[x][y][a][k].read = true;
+            }
+
+            signal_dspin_false_ram_cmd_in[x][y][a].write = false;
+            signal_dspin_false_ram_cmd_in[x][y][a].read = true;
+            signal_dspin_false_ram_cmd_out[x][y][a].write = false;
+            signal_dspin_false_ram_cmd_out[x][y][a].read = true;
+
+            signal_dspin_false_ram_rsp_in[x][y][a].write = false;
+            signal_dspin_false_ram_rsp_in[x][y][a].read = true;
+            signal_dspin_false_ram_rsp_out[x][y][a].write = false;
+            signal_dspin_false_ram_rsp_out[x][y][a].read = true;
+         }
+      }
+   }
+
+    sc_start(sc_core::sc_time(1, SC_NS));
+    signal_resetn = true;
+
+
+    // simulation loop
+    struct timeval t1,t2;
+    gettimeofday(&t1, NULL);
+
+    for (size_t n = 1; n < ncycles; n++)
+    {
+        // stats display
+        if( (n % 1000000) == 0)
+        {
+            gettimeofday(&t2, NULL);
+
+            uint64_t ms1 = (uint64_t) t1.tv_sec  * 1000ULL +
+                           (uint64_t) t1.tv_usec / 1000;
+            uint64_t ms2 = (uint64_t) t2.tv_sec  * 1000ULL +
+                           (uint64_t) t2.tv_usec / 1000;
+            std::cerr << "### cycle = " << n
+                      << " / frequency = "
+                      << (double) 1000000 / (double) (ms2 - ms1) << "Khz"
+                      << std::endl;
+
+            gettimeofday(&t1, NULL);
+        }
+
+        // Monitor a specific address for one L1 cache
+        // clusters[1][1]->proc[0]->cache_monitor(0x50090ULL);
+
+        // Monitor a specific address for one L2 cache
+        // clusters[0][0]->memc->cache_monitor( 0x170000ULL);
+
+        // Monitor a specific address for one XRAM
+        // if (n == 3000000) clusters[0][0]->xram->start_monitor( 0x170000ULL , 64);
+
+        if (debug_ok and (n > debug_from) and (n % debug_period == 0))
+        {
+            std::cout << "****************** cycle " << std::dec << n ;
+            std::cout << " ************************************************" << std::endl;
+
+            // trace proc[debug_proc_id]
+            if ( debug_proc_id != 0xFFFFFFFF )
+            {
+                size_t l          = debug_proc_id % NB_PROCS_MAX ;
+                size_t cluster_xy = debug_proc_id / NB_PROCS_MAX ;
+                size_t x          = cluster_xy >> 4;
+                size_t y          = cluster_xy & 0xF;
+
+                clusters[x][y]->proc[l]->print_trace(1);
+                std::ostringstream proc_signame;
+                proc_signame << "[SIG]PROC_" << x << "_" << y << "_" << l ;
+                clusters[x][y]->signal_int_vci_ini_proc[l].print_trace(proc_signame.str());
+
+                clusters[x][y]->xicu->print_trace(l);
+                std::ostringstream xicu_signame;
+                xicu_signame << "[SIG]XICU_" << x << "_" << y;
+                clusters[x][y]->signal_int_vci_tgt_xicu.print_trace(xicu_signame.str());
+
+//              clusters[x][y]->mdma->print_trace();
+//              std::ostringstream mdma_signame;
+//              mdma_signame << "[SIG]MDMA_" << x << "_" << y;
+//              clusters[x][y]->signal_int_vci_tgt_mdma.print_trace(mdma_signame.str());
+
+                if( clusters[x][y]->signal_proc_it[l].read() )
+                    std::cout << "### IRQ_PROC_" << std::dec
+                              << x << "_" << y << "_" << l << " ACTIVE" << std::endl;
+            }
+
+            // trace memc[debug_memc_id]
+            if ( debug_memc_id != 0xFFFFFFFF )
+            {
+                size_t x = debug_memc_id >> 4;
+                size_t y = debug_memc_id & 0xF;
+
+                clusters[x][y]->memc->print_trace(0);
+                std::ostringstream smemc_tgt;
+                smemc_tgt << "[SIG]MEMC_TGT_" << x << "_" << y;
+                clusters[x][y]->signal_int_vci_tgt_memc.print_trace(smemc_tgt.str());
+                std::ostringstream smemc_ini;
+                smemc_ini << "[SIG]MEMC_INI_" << x << "_" << y;
+                clusters[x][y]->signal_ram_vci_ini_memc.print_trace(smemc_ini.str());
+
+                clusters[x][y]->xram->print_trace();
+                std::ostringstream sxram_tgt;
+                sxram_tgt << "[SIG]XRAM_TGT_" << x << "_" << y;
+                clusters[x][y]->signal_ram_vci_tgt_xram.print_trace(sxram_tgt.str());
+            }
+
+
+            // trace XRAM and XRAM network routers in cluster[debug_xram_id]
+            if ( debug_xram_id != 0xFFFFFFFF )
+            {
+                size_t x = debug_xram_id >> 4;
+                size_t y = debug_xram_id & 0xF;
+
+                clusters[x][y]->xram->print_trace();
+                std::ostringstream sxram_tgt;
+                sxram_tgt << "[SIG]XRAM_TGT_" << x << "_" << y;
+                clusters[x][y]->signal_ram_vci_tgt_xram.print_trace(sxram_tgt.str());
+
+                clusters[x][y]->ram_router_cmd->print_trace();
+                clusters[x][y]->ram_router_rsp->print_trace();
+            }
+
+            // trace iob, iox and external peripherals
+            if ( debug_iob )
+            {
+                clusters[0][0]->iob->print_trace();
+                clusters[XMAX-1][YMAX-1]->iob->print_trace();
+//              clusters[0][0]->signal_int_vci_tgt_iobx.print_trace( "[SIG]IOB0_INT_TGT");
+//              clusters[0][0]->signal_int_vci_ini_iobx.print_trace( "[SIG]IOB0_INT_INI");
+//              clusters[0][0]->signal_ram_vci_ini_iobx.print_trace( "[SIG]IOB0_RAM_INI");
+
+                signal_vci_ini_iob0.print_trace("[SIG]IOB0_IOX_INI");
+                signal_vci_tgt_iob0.print_trace("[SIG]IOB0_IOX_TGT");
+
+//              cdma->print_trace();
+//              signal_vci_tgt_cdma.print_trace("[SIG]IOX_CDMA_TGT");
+//              signal_vci_ini_cdma.print_trace("[SIG]IOX_CDMA_INI");
+
+//              mtty->print_trace();
+//              signal_vci_tgt_mtty.print_trace("[SIG]IOX_MTTY_TGT");
+
+                bdev->print_trace();
+                signal_vci_tgt_bdev.print_trace("[SIG]BDEV_TGT");
+                signal_vci_ini_bdev.print_trace("[SIG]BDEV_INI");
+
+                mnic->print_trace();
+                signal_vci_tgt_mnic.print_trace("[SIG]MNIC_TGT");
+
+//              fbuf->print_trace();
+//              signal_vci_tgt_fbuf.print_trace("[SIG]FBUF");
+
+                iopi->print_trace();
+                signal_vci_ini_iopi.print_trace("[SIG]IOPI_INI");
+                signal_vci_tgt_iopi.print_trace("[SIG]IOPI_TGT");
+                iox_network->print_trace();
+
+                // interrupts
+                if (signal_irq_bdev)       std::cout << "### IRQ_BDEV ACTIVE"       << std::endl;
+                if (signal_irq_mtty_rx)    std::cout << "### IRQ_MTTY ACTIVE"       << std::endl;
+                if (signal_irq_mnic_rx[0]) std::cout << "### IRQ_MNIC_RX[0] ACTIVE" << std::endl;
+                if (signal_irq_mnic_rx[1]) std::cout << "### IRQ_MNIC_RX[1] ACTIVE" << std::endl;
+                if (signal_irq_mnic_tx[0]) std::cout << "### IRQ_MNIC_TX[0] ACTIVE" << std::endl;
+                if (signal_irq_mnic_tx[1]) std::cout << "### IRQ_MNIC_TX[1] ACTIVE" << std::endl;
+            }
+        }
+
+        sc_start(sc_core::sc_time(1, SC_NS));
+    }
+    return EXIT_SUCCESS;
+}
+
+int sc_main (int argc, char *argv[])
+{
+   try {
+      return _main(argc, argv);
+   } catch (std::exception &e) {
+      std::cout << e.what() << std::endl;
+   } catch (...) {
+      std::cout << "Unknown exception occured" << std::endl;
+      throw;
+   }
+   return 1;
+}
+
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
+
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/top.desc
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/top.desc	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/top.desc	(revision 724)
@@ -0,0 +1,86 @@
+
+# -*- python -*-
+
+# VCI parameters 
+vci_cell_size_int   = 4
+vci_cell_size_ext   = 8
+
+vci_plen_size       = 8
+vci_addr_size       = 40
+vci_rerror_size     = 1
+vci_clen_size       = 1
+vci_rflag_size      = 1
+vci_srcid_size      = 14
+vci_pktid_size      = 4
+vci_trdid_size      = 4
+vci_wrplen_size     = 1
+
+# internal DSPIN network parameters 
+int_dspin_cmd_flit_size = 39
+int_dspin_rsp_flit_size = 32
+
+# external DSPIN network parameters
+ram_dspin_cmd_flit_size = 64
+ram_dspin_rsp_flit_size = 64
+
+todo = Platform('caba', 'top.cpp',
+
+	uses = [
+            # cluster
+            Uses('caba:tsar_iob_cluster', 
+                  vci_data_width_int  = vci_cell_size_int,
+                  vci_data_width_ext  = vci_cell_size_ext, 
+                  dspin_int_cmd_width = int_dspin_cmd_flit_size,
+                  dspin_int_rsp_width = int_dspin_rsp_flit_size,
+                  dspin_ram_cmd_width = ram_dspin_cmd_flit_size,
+                  dspin_ram_rsp_width = ram_dspin_rsp_flit_size),
+                  
+            # IOX Network
+            Uses('caba:vci_iox_network', 
+                  cell_size = vci_cell_size_ext),
+
+            # ROM
+            Uses('caba:vci_simple_rom', 
+                  cell_size   = vci_cell_size_ext),
+
+            # Frame Buffer
+            Uses('caba:vci_framebuffer', 
+                  cell_size = vci_cell_size_ext),
+
+            # Block Device
+            Uses('caba:vci_block_device_tsar', 
+                  cell_size = vci_cell_size_ext),
+
+            # NIC 
+            Uses('caba:vci_multi_nic', 
+                  cell_size = vci_cell_size_ext),
+
+            # Chained DMA
+            Uses('caba:vci_chbuf_dma', 
+                  cell_size = vci_cell_size_ext),
+
+            # TTY
+            Uses('caba:vci_multi_tty', 
+                  cell_size = vci_cell_size_ext),
+
+            # IOPIC
+            Uses('caba:vci_iopic', 
+                  cell_size = vci_cell_size_ext),
+
+	        Uses('common:elf_file_loader'),
+            Uses('common:plain_file_loader'),
+           ],
+
+    # default VCI parameters (global variables)
+    cell_size   = vci_cell_size_int,  
+	plen_size   = vci_plen_size,
+	addr_size   = vci_addr_size,
+	rerror_size = vci_rerror_size,
+	clen_size   = vci_clen_size,
+	rflag_size  = vci_rflag_size,
+	srcid_size  = vci_srcid_size,
+	pktid_size  = vci_pktid_size,
+	trdid_size  = vci_trdid_size,
+	wrplen_size = vci_wrplen_size,
+
+)
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd	(revision 724)
@@ -0,0 +1,136 @@
+
+# -*- python -*-
+
+Module('caba:tsar_iob_cluster',
+    classname = 'soclib::caba::TsarIobCluster',
+
+    tmpl_parameters = [
+        parameter.Module('vci_param_int', default = 'caba:vci_param', 
+                          cell_size = parameter.Reference('vci_data_width_int')),
+        parameter.Module('vci_param_ext', default = 'caba:vci_param', 
+                          cell_size = parameter.Reference('vci_data_width_ext')),
+        parameter.Int('dspin_int_cmd_width'),
+        parameter.Int('dspin_int_rsp_width'),
+        parameter.Int('dspin_ram_cmd_width'),
+        parameter.Int('dspin_ram_rsp_width'),
+    ],
+
+    header_files = [ 
+        '../source/include/tsar_iob_cluster.h', 
+    ],
+
+    implementation_files = [ 
+        '../source/src/tsar_iob_cluster.cpp', 
+    ],
+
+    uses = [
+        Uses('caba:base_module'),
+        Uses('common:mapping_table'),
+        Uses('common:iss2'),
+        Uses('common:elf_file_loader'),
+
+        # internal network components
+        Uses('caba:vci_cc_vcache_wrapper', 
+              cell_size          = parameter.Reference('vci_data_width_int'),
+              dspin_in_width     = parameter.Reference('dspin_int_cmd_width'),
+              dspin_out_width    = parameter.Reference('dspin_int_rsp_width'),
+              iss_t              = 'common:gdb_iss', 
+              gdb_iss_t          = 'common:mips32el'),
+
+        Uses('caba:vci_mem_cache',
+              memc_cell_size_int = parameter.Reference('vci_data_width_int'),
+              memc_cell_size_ext = parameter.Reference('vci_data_width_ext'),
+              dspin_in_width     = parameter.Reference('dspin_int_rsp_width'),
+              dspin_out_width    = parameter.Reference('dspin_int_cmd_width')),
+
+        Uses('caba:vci_xicu',
+              cell_size          = parameter.Reference('vci_data_width_int')),
+
+        Uses('caba:vci_multi_dma',
+              cell_size          = parameter.Reference('vci_data_width_int')),
+
+        Uses('caba:vci_simple_rom',
+              cell_size          = parameter.Reference('vci_data_width_int')),
+
+        Uses('caba:vci_local_crossbar', 
+              cell_size          = parameter.Reference('vci_data_width_int')),
+
+        Uses('caba:dspin_local_crossbar', 
+              flit_width         = parameter.Reference('dspin_int_cmd_width')),
+
+        Uses('caba:dspin_local_crossbar', 
+              flit_width         = parameter.Reference('dspin_int_rsp_width')),
+
+        Uses('caba:dspin_local_crossbar', 
+              flit_width         = parameter.Reference('dspin_ram_cmd_width')),
+
+        Uses('caba:dspin_local_crossbar', 
+              flit_width         = parameter.Reference('dspin_ram_rsp_width')),
+
+        Uses('caba:vci_dspin_initiator_wrapper', 
+              cell_size          = parameter.Reference('vci_data_width_int'),
+              dspin_cmd_width    = parameter.Reference('dspin_int_cmd_width'),
+              dspin_rsp_width    = parameter.Reference('dspin_int_rsp_width')),
+
+        Uses('caba:vci_dspin_target_wrapper',
+              cell_size          = parameter.Reference('vci_data_width_int'),
+              dspin_cmd_width    = parameter.Reference('dspin_int_cmd_width'),
+              dspin_rsp_width    = parameter.Reference('dspin_int_rsp_width')),
+
+        Uses('caba:virtual_dspin_router', 
+              flit_width         = parameter.Reference('dspin_int_cmd_width')),
+
+        Uses('caba:virtual_dspin_router', 
+              flit_width         = parameter.Reference('dspin_int_rsp_width')),
+
+        # RAM network components
+        Uses('caba:vci_dspin_initiator_wrapper', 
+              cell_size          = parameter.Reference('vci_data_width_ext'),
+              dspin_cmd_width    = parameter.Reference('dspin_ram_cmd_width'),
+              dspin_rsp_width    = parameter.Reference('dspin_ram_rsp_width')),
+
+        Uses('caba:vci_dspin_target_wrapper',
+              cell_size          = parameter.Reference('vci_data_width_ext'),
+              dspin_cmd_width    = parameter.Reference('dspin_ram_cmd_width'),
+              dspin_rsp_width    = parameter.Reference('dspin_ram_rsp_width')),
+
+        Uses('caba:dspin_router', 
+              flit_width         = parameter.Reference('dspin_ram_cmd_width')),
+
+        Uses('caba:dspin_router', 
+              flit_width         = parameter.Reference('dspin_ram_rsp_width')),
+
+        Uses('caba:vci_simple_ram',
+              cell_size          = parameter.Reference('vci_data_width_ext')),
+
+        # IOX network components
+        Uses('caba:vci_io_bridge', 
+              iob_cell_size_int  = parameter.Reference('vci_data_width_int'),
+              iob_cell_size_ext  = parameter.Reference('vci_data_width_ext')),
+        ],
+
+    ports = [
+        Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+        Port('caba:clock_in', 'p_clk', auto = 'clock'),
+
+        Port('caba:dspin_output', 'p_int_cmd_out', [4, 3], 
+              dspin_data_size = parameter.Reference('dspin_int_cmd_width')),
+        Port('caba:dspin_input', 'p_int_cmd_in', [4, 3], 
+              dspin_data_size = parameter.Reference('dspin_int_cmd_width')),
+        Port('caba:dspin_output', 'p_int_rsp_out', [4, 2], 
+              dspin_data_size = parameter.Reference('dspin_int_rsp_width')), 
+        Port('caba:dspin_input', 'p_int_rsp_in', [4, 2], 
+              dspin_data_size = parameter.Reference('dspin_int_rsp_width')),
+
+        Port('caba:dspin_output', 'p_ram_cmd_out', [4], 
+              dspin_data_size = parameter.Reference('dspin_ram_cmd_width')),
+        Port('caba:dspin_input', 'p_ram_cmd_in', [4], 
+              dspin_data_size = parameter.Reference('dspin_ram_cmd_width')),
+        Port('caba:dspin_output', 'p_ram_rsp_out', [4], 
+              dspin_data_size = parameter.Reference('dspin_ram_rsp_width')), 
+        Port('caba:dspin_input', 'p_ram_rsp_in', [4], 
+              dspin_data_size = parameter.Reference('dspin_ram_rsp_width')),
+        ],
+)
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h	(revision 724)
@@ -0,0 +1,265 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_iob_cluster.h
+// Author: Alain Greiner 
+// Copyright: UPMC/LIP6
+// Date : april 2013
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef SOCLIB_CABA_TSAR_IOB_CLUSTER_H
+#define SOCLIB_CABA_TSAR_IOB_CLUSTER_H
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "mips32.h"
+#include "vci_simple_ram.h"
+#include "vci_xicu.h"
+#include "vci_local_crossbar.h"
+#include "dspin_local_crossbar.h"
+#include "vci_dspin_initiator_wrapper.h"
+#include "vci_dspin_target_wrapper.h"
+#include "dspin_router.h"
+#include "virtual_dspin_router.h"
+#include "vci_multi_dma.h"
+#include "vci_mem_cache.h"
+#include "vci_cc_vcache_wrapper.h"
+#include "vci_io_bridge.h"
+#include "vci_simple_rom.h"
+
+namespace soclib { namespace caba   {
+
+///////////////////////////////////////////////////////////////////////////
+template<typename vci_param_int, 
+         typename vci_param_ext,
+         size_t   dspin_int_cmd_width, 
+         size_t   dspin_int_rsp_width,
+         size_t   dspin_ram_cmd_width,
+         size_t   dspin_ram_rsp_width>
+class TsarIobCluster 
+///////////////////////////////////////////////////////////////////////////
+    : public soclib::caba::BaseModule
+{
+
+  public:
+
+    // Ports
+    sc_in<bool>                                        p_clk;
+    sc_in<bool>                                        p_resetn;
+
+    // Thes two ports are used to connect IOB to IOX nework in top cell
+    soclib::caba::VciInitiator<vci_param_ext>*         p_vci_iob_iox_ini;
+    soclib::caba::VciTarget<vci_param_ext>*            p_vci_iob_iox_tgt; 
+
+    // These arrays of ports are used to connect the INT & RAM networks in top cell
+    soclib::caba::DspinOutput<dspin_int_cmd_width>**   p_dspin_int_cmd_out;
+    soclib::caba::DspinInput<dspin_int_cmd_width>**    p_dspin_int_cmd_in;
+    soclib::caba::DspinOutput<dspin_int_rsp_width>**   p_dspin_int_rsp_out;
+    soclib::caba::DspinInput<dspin_int_rsp_width>**    p_dspin_int_rsp_in;
+
+    soclib::caba::DspinOutput<dspin_ram_cmd_width>*    p_dspin_ram_cmd_out;
+    soclib::caba::DspinInput<dspin_ram_cmd_width>*     p_dspin_ram_cmd_in;
+    soclib::caba::DspinOutput<dspin_ram_rsp_width>*    p_dspin_ram_rsp_out;
+    soclib::caba::DspinInput<dspin_ram_rsp_width>*     p_dspin_ram_rsp_in;
+
+    // interrupt signals
+    sc_signal<bool>                       signal_false;
+    sc_signal<bool>                       signal_proc_it[8];
+    sc_signal<bool>                       signal_irq_mdma[8];
+    sc_signal<bool>                       signal_irq_memc;
+    
+    // INT network DSPIN signals between DSPIN routers and DSPIN local_crossbars
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cmd_l2g_d; 
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cmd_g2l_d; 
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_l2g_c;
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_g2l_c; 
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_l2g_c;
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_g2l_c;
+    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_l2g_d; 
+    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_g2l_d; 
+    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_l2g_c;
+    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_g2l_c;
+
+    // INT network VCI signals between VCI components and VCI local crossbar
+    VciSignals<vci_param_int>             signal_int_vci_ini_proc[8]; 
+    VciSignals<vci_param_int>             signal_int_vci_ini_mdma; 
+    VciSignals<vci_param_int>             signal_int_vci_ini_iobx; 
+
+    VciSignals<vci_param_int>             signal_int_vci_tgt_memc;
+    VciSignals<vci_param_int>             signal_int_vci_tgt_xicu;
+    VciSignals<vci_param_int>             signal_int_vci_tgt_mdma;
+    VciSignals<vci_param_int>             signal_int_vci_tgt_brom;
+    VciSignals<vci_param_int>             signal_int_vci_tgt_iobx;
+
+    VciSignals<vci_param_int>             signal_int_vci_l2g;
+    VciSignals<vci_param_int>             signal_int_vci_g2l;
+
+    // Coherence DSPIN signals between DSPIN local crossbars and CC components 
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_memc;
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_memc;
+    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_memc;
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_proc[8];
+    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_proc[8];
+    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_proc[8];
+
+    // RAM network VCI signals between VCI components and VCI/DSPIN wrappers
+    VciSignals<vci_param_ext>             signal_ram_vci_ini_memc;
+    VciSignals<vci_param_ext>             signal_ram_vci_ini_iobx;
+    VciSignals<vci_param_ext>             signal_ram_vci_tgt_xram;
+
+    // RAM network DSPIN signals between VCI/DSPIN wrappers, RAM dspin crossbar
+    // and routers 
+    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_xram_t;
+    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_xram_t;
+    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_memc_i;
+    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_memc_i;
+    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_iob_i;
+    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_iob_i;
+    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_xbar;
+    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_xbar;
+    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_false;
+    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_false;
+  
+    //////////////////////////////////////
+    // Hardwate Components (pointers)
+    //////////////////////////////////////
+    VciCcVCacheWrapper<vci_param_int, 
+                       dspin_int_cmd_width,
+                       dspin_int_rsp_width,
+                       GdbServer<Mips32ElIss> >*      proc[8];
+
+    VciMemCache<vci_param_int,
+                vci_param_ext, 
+                dspin_int_rsp_width, 
+                dspin_int_cmd_width>*                 memc;
+
+    VciDspinInitiatorWrapper<vci_param_ext,
+                             dspin_ram_cmd_width,
+                             dspin_ram_rsp_width>*    memc_ram_wi;
+
+    VciXicu<vci_param_int>*                           xicu;
+
+    VciMultiDma<vci_param_int>*                       mdma;
+
+    VciSimpleRom<vci_param_int>*                      brom;
+
+    VciLocalCrossbar<vci_param_int>*                  int_xbar_d;
+    
+    VciDspinInitiatorWrapper<vci_param_int,
+                             dspin_int_cmd_width,
+                             dspin_int_rsp_width>*    int_wi_gate_d;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_int_cmd_width,
+                          dspin_int_rsp_width>*       int_wt_gate_d;
+
+    DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_m2p_c;
+    DspinLocalCrossbar<dspin_int_rsp_width>*          int_xbar_p2m_c;
+    DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_clack_c;
+
+    VirtualDspinRouter<dspin_int_cmd_width>*          int_router_cmd;
+    VirtualDspinRouter<dspin_int_rsp_width>*          int_router_rsp;
+
+    VciSimpleRam<vci_param_ext>*                      xram;
+
+    VciDspinTargetWrapper<vci_param_ext,
+                          dspin_ram_cmd_width,
+                          dspin_ram_rsp_width>*       xram_ram_wt;
+    
+    DspinRouter<dspin_ram_cmd_width>*                 ram_router_cmd;
+    DspinRouter<dspin_ram_rsp_width>*                 ram_router_rsp;
+
+    DspinLocalCrossbar<dspin_ram_cmd_width>*          ram_xbar_cmd;
+    DspinLocalCrossbar<dspin_ram_rsp_width>*          ram_xbar_rsp;
+    
+
+    // IO Network Components (not instanciated in all clusters)
+
+    VciIoBridge<vci_param_int,
+                vci_param_ext>*                       iob;
+
+    VciDspinInitiatorWrapper<vci_param_ext,
+                             dspin_ram_cmd_width,
+                             dspin_ram_rsp_width>*    iob_ram_wi;
+
+    // cluster constructor
+    TsarIobCluster( sc_module_name                     insname,
+                    size_t                             nb_procs,   
+                    size_t                             nb_dmas,  
+                    size_t                             x,             // x coordinate
+                    size_t                             y,             // y coordinate
+                    size_t                             xmax,
+                    size_t                             ymax,
+
+                    const soclib::common::MappingTable &mt_int,
+                    const soclib::common::MappingTable &mt_ext,
+                    const soclib::common::MappingTable &mt_iox,
+
+                    size_t                             x_width,       // x field  bits
+                    size_t                             y_width,       // y field  bits
+                    size_t                             l_width,       // l field  bits
+
+                    size_t                             int_memc_tgt_id,
+                    size_t                             int_xicu_tgt_id,
+                    size_t                             int_mdma_tgt_id,
+                    size_t                             int_brom_tgt_id,
+                    size_t                             int_iobx_tgt_id,
+                    size_t                             int_proc_ini_id,
+                    size_t                             int_mdma_ini_id,
+                    size_t                             int_iobx_ini_id,
+
+                    size_t                             ram_xram_tgt_id,
+                    size_t                             ram_memc_ini_id,
+                    size_t                             ram_iobx_ini_id,
+
+                    bool                               is_io,
+                    size_t                             iox_iobx_tgt_id,
+                    size_t                             iox_iobx_ini_id,
+
+                    size_t                             memc_ways,
+                    size_t                             memc_sets,
+                    size_t                             l1_i_ways,
+                    size_t                             l1_i_sets, 
+                    size_t                             l1_d_ways,
+                    size_t                             l1_d_sets,   
+                    size_t                             xram_latency, 
+                    size_t                             xcu_nb_inputs,
+
+                    bool                               distboot,
+
+                    const Loader                       &loader,       // loader for XRAM
+
+                    uint32_t                           frozen_cycles, 
+                    uint32_t                           start_debug_cycle,
+                    bool                               memc_debug_ok, 
+                    bool                               proc_debug_ok, 
+                    bool                               iob0_debug_ok ); 
+
+  protected:
+
+    SC_HAS_PROCESS(TsarIobCluster);
+
+    void init();
+ 
+
+};
+
+}}
+
+#endif
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
+//
Index: /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp	(revision 724)
@@ -0,0 +1,663 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_iob_cluster.cpp
+// Author: Alain Greiner 
+// Copyright: UPMC/LIP6
+// Date : april 2013
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+// Cluster(0,0) & Cluster(xmax-1,ymax-1) contains the IOB0 & IOB1 components.
+// These two clusters contain 6 extra components:
+// - 1 vci_io_bridge (connected to the 3 networks.
+// - 3 vci_dspin_wrapper for the IOB.
+// - 2 dspin_local_crossbar for commands and responses. 
+//////////////////////////////////////////////////////////////////////////////
+
+#include "../include/tsar_iob_cluster.h"
+
+#define tmpl(x) \
+   template<typename vci_param_int      , typename vci_param_ext,\
+            size_t   dspin_int_cmd_width, size_t   dspin_int_rsp_width,\
+            size_t   dspin_ram_cmd_width, size_t   dspin_ram_rsp_width>\
+            x TsarIobCluster<\
+                  vci_param_int      , vci_param_ext,\
+                  dspin_int_cmd_width, dspin_int_rsp_width,\
+                  dspin_ram_cmd_width, dspin_ram_rsp_width>
+
+namespace soclib { namespace caba  {
+
+//////////////////////////////////////////////////////////////////////////
+//                 Constructor
+//////////////////////////////////////////////////////////////////////////
+tmpl(/**/)::TsarIobCluster(
+//////////////////////////////////////////////////////////////////////////
+                    sc_module_name                     insname,
+                    size_t                             nb_procs,
+                    size_t                             nb_dmas,
+                    size_t                             x_id,
+                    size_t                             y_id,
+                    size_t                             xmax,
+                    size_t                             ymax,
+
+                    const soclib::common::MappingTable &mt_int,
+                    const soclib::common::MappingTable &mt_ram, 
+                    const soclib::common::MappingTable &mt_iox, 
+
+                    size_t                             x_width,
+                    size_t                             y_width,
+                    size_t                             l_width,
+
+                    size_t                             int_memc_tgt_id, // local index
+                    size_t                             int_xicu_tgt_id, // local index
+                    size_t                             int_mdma_tgt_id, // local index
+                    size_t                             int_brom_tgt_id, // local index
+                    size_t                             int_iobx_tgt_id, // local index
+
+                    size_t                             int_proc_ini_id, // local index
+                    size_t                             int_mdma_ini_id, // local index
+                    size_t                             int_iobx_ini_id, // local index
+
+                    size_t                             ram_xram_tgt_id, // local index
+                    size_t                             ram_memc_ini_id, // local index
+                    size_t                             ram_iobx_ini_id, // local index
+
+                    bool                               is_io,           // is IO cluster (IOB)?
+                    size_t                             iox_iobx_tgt_id, // local_index
+                    size_t                             iox_iobx_ini_id, // local index
+
+                    size_t                             memc_ways,
+                    size_t                             memc_sets,
+                    size_t                             l1_i_ways,
+                    size_t                             l1_i_sets,
+                    size_t                             l1_d_ways,
+                    size_t                             l1_d_sets,
+                    size_t                             xram_latency,
+                    size_t                             xcu_nb_inputs,
+
+                    bool                               distboot,
+
+                    const Loader                       &loader,
+
+                    uint32_t                           frozen_cycles,
+                    uint32_t                           debug_start_cycle,
+                    bool                               memc_debug_ok,
+                    bool                               proc_debug_ok,
+                    bool                               iob_debug_ok )
+    : soclib::caba::BaseModule(insname),
+      p_clk("clk"),
+      p_resetn("resetn")
+{
+    assert( (x_id < xmax) and (y_id < ymax) and "Illegal cluster coordinates");
+
+    size_t cluster_id = (x_id<<4) + y_id;
+
+    // Vectors of DSPIN ports for inter-cluster communications
+    p_dspin_int_cmd_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_cmd_in", 4, 3);
+    p_dspin_int_cmd_out = alloc_elems<DspinOutput<dspin_int_cmd_width> >("p_int_cmd_out", 4, 3);
+    p_dspin_int_rsp_in  = alloc_elems<DspinInput<dspin_int_rsp_width> >("p_int_rsp_in", 4, 2);
+    p_dspin_int_rsp_out = alloc_elems<DspinOutput<dspin_int_rsp_width> >("p_int_rsp_out", 4, 2);
+
+    p_dspin_ram_cmd_in  = alloc_elems<DspinInput<dspin_ram_cmd_width> >("p_ext_cmd_in", 4);
+    p_dspin_ram_cmd_out = alloc_elems<DspinOutput<dspin_ram_cmd_width> >("p_ext_cmd_out", 4);
+    p_dspin_ram_rsp_in  = alloc_elems<DspinInput<dspin_ram_rsp_width> >("p_ext_rsp_in", 4);
+    p_dspin_ram_rsp_out = alloc_elems<DspinOutput<dspin_ram_rsp_width> >("p_ext_rsp_out", 4);
+
+    // VCI ports from IOB to IOX network (only in IO clusters)
+    if ( is_io )
+    {
+        p_vci_iob_iox_ini = new soclib::caba::VciInitiator<vci_param_ext>;
+        p_vci_iob_iox_tgt = new soclib::caba::VciTarget<vci_param_ext>; 
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+    //    Hardware components
+    /////////////////////////////////////////////////////////////////////////////
+
+    ////////////  PROCS
+    for (size_t p = 0; p < nb_procs; p++)
+    { 
+        std::ostringstream s_proc;
+        s_proc << "proc_" << x_id << "_" << y_id << "_" << p;
+        proc[p] = new VciCcVCacheWrapper<vci_param_int,
+                                         dspin_int_cmd_width,
+                                         dspin_int_rsp_width,
+                                         GdbServer<Mips32ElIss> >(
+                      s_proc.str().c_str(),
+                      cluster_id*nb_procs + p,        // GLOBAL PROC_ID
+                      mt_int,                         // Mapping Table INT network
+                      IntTab(cluster_id,p),           // SRCID
+                      (cluster_id << l_width) + p,    // CC_GLOBAL_ID
+                      8,                              // ITLB ways
+                      8,                              // ITLB sets
+                      8,                              // DTLB ways
+                      8,                              // DTLB sets
+                      l1_i_ways, l1_i_sets, 16,       // ICACHE size
+                      l1_d_ways, l1_d_sets, 16,       // DCACHE size
+                      4,                              // WBUF nlines
+                      4,                              // WBUF nwords
+                      x_width,
+                      y_width,
+                      frozen_cycles,                  // max frozen cycles
+                      debug_start_cycle,
+                      proc_debug_ok);
+
+        // initialize physical address extension with cluster ID when using
+        // distributed boot
+        if (distboot)
+        {
+            proc[p]->set_dcache_paddr_ext_reset(cluster_id);
+            proc[p]->set_icache_paddr_ext_reset(cluster_id);
+        }
+    }
+
+    ///////////  MEMC    
+    std::ostringstream s_memc;
+    s_memc << "memc_" << x_id << "_" << y_id;
+    memc = new VciMemCache<vci_param_int,
+                           vci_param_ext,
+                           dspin_int_rsp_width,
+                           dspin_int_cmd_width>(
+                     s_memc.str().c_str(),
+                     mt_int,                              // Mapping Table INT network
+                     mt_ram,                              // Mapping Table RAM network
+                     IntTab(cluster_id, ram_memc_ini_id), // SRCID RAM network
+                     IntTab(cluster_id, int_memc_tgt_id), // TGTID INT network
+                     x_width,                             // number of bits for x coordinate
+                     y_width,                             // number of bits for y coordinate
+                     memc_ways, memc_sets, 16,            // CACHE SIZE
+                     3,                                   // MAX NUMBER OF COPIES
+                     4096,                                // HEAP SIZE
+                     8,                                   // TRANSACTION TABLE DEPTH
+                     8,                                   // UPDATE TABLE DEPTH
+                     8,                                   // INVALIDATE TABLE DEPTH
+                     debug_start_cycle,
+                     memc_debug_ok );
+
+    std::ostringstream s_wi_memc;
+    s_wi_memc << "memc_wi_" << x_id << "_" << y_id;
+    memc_ram_wi = new VciDspinInitiatorWrapper<vci_param_ext,
+                                               dspin_ram_cmd_width,
+                                               dspin_ram_rsp_width>(
+                     s_wi_memc.str().c_str(),
+                     x_width + y_width + l_width);
+
+    ///////////   XICU
+    std::ostringstream s_xicu;
+    s_xicu << "xicu_" << x_id << "_" << y_id;
+    xicu = new VciXicu<vci_param_int>(
+                     s_xicu.str().c_str(),
+                     mt_int,                              // mapping table INT network
+                     IntTab(cluster_id, int_xicu_tgt_id), // TGTID direct space
+                     xcu_nb_inputs,                       // number of timer IRQs
+                     xcu_nb_inputs,                       // number of hard IRQs
+                     xcu_nb_inputs,                       // number of soft IRQs
+                     16);                                 // number of output IRQs
+
+    ////////////  MDMA
+    std::ostringstream s_mdma;
+    s_mdma << "mdma_" << x_id << "_" << y_id;
+    mdma = new VciMultiDma<vci_param_int>(
+                     s_mdma.str().c_str(),
+                     mt_int,
+                     IntTab(cluster_id, nb_procs),        // SRCID
+                     IntTab(cluster_id, int_mdma_tgt_id), // TGTID
+                     64,                                  // burst size
+                     nb_dmas);                            // number of IRQs
+
+    ///////////   DISTRIBUTED BOOT ROM
+    std::ostringstream s_brom;
+    s_brom << "brom_" << x_id << "_" << y_id;
+    brom = new VciSimpleRom<vci_param_int>(
+                     s_brom.str().c_str(),
+                     IntTab(cluster_id, int_brom_tgt_id),
+                     mt_int,
+                     loader,
+                     x_width + y_width);                  // msb drop bits
+
+    ///////////  Direct LOCAL_XBAR(S)
+    size_t nb_direct_initiators = is_io ? nb_procs + 2 : nb_procs + 1;
+    size_t nb_direct_targets    = is_io ? 5 : 4;
+
+    std::ostringstream s_int_xbar_d;
+    s_int_xbar_d << "int_xbar_cmd_d_" << x_id << "_" << y_id;
+    int_xbar_d = new VciLocalCrossbar<vci_param_int>(
+                     s_int_xbar_d.str().c_str(),
+                     mt_int,                       // mapping table
+                     cluster_id,                   // cluster id
+                     nb_direct_initiators,         // number of local initiators
+                     nb_direct_targets,            // number of local targets 
+                     0 );                          // default target
+
+    std::ostringstream s_int_dspin_ini_wrapper_gate_d;
+    s_int_dspin_ini_wrapper_gate_d << "int_dspin_ini_wrapper_gate_d_"
+                                   << x_id << "_" << y_id;
+    int_wi_gate_d = new VciDspinInitiatorWrapper<vci_param_int,
+                                           dspin_int_cmd_width,
+                                           dspin_int_rsp_width>(
+                     s_int_dspin_ini_wrapper_gate_d.str().c_str(),
+                     x_width + y_width + l_width);
+
+    std::ostringstream s_int_dspin_tgt_wrapper_gate_d;
+    s_int_dspin_tgt_wrapper_gate_d << "int_dspin_tgt_wrapper_gate_d_"
+                                   << x_id << "_" << y_id;
+    int_wt_gate_d = new VciDspinTargetWrapper<vci_param_int,
+                                        dspin_int_cmd_width,
+                                        dspin_int_rsp_width>(
+                     s_int_dspin_tgt_wrapper_gate_d.str().c_str(),
+                     x_width + y_width + l_width);
+
+    ////////////  Coherence LOCAL_XBAR(S)
+    std::ostringstream s_int_xbar_m2p_c;
+    s_int_xbar_m2p_c << "int_xbar_m2p_c_" << x_id << "_" << y_id;
+    int_xbar_m2p_c = new DspinLocalCrossbar<dspin_int_cmd_width>(
+                     s_int_xbar_m2p_c.str().c_str(),
+                     mt_int,                       // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,    // several dests
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local dests 
+                     2, 2,                         // fifo depths  
+                     true,                         // pseudo CMD
+                     false,                        // no routing table
+                     true );                       // broacast
+
+    std::ostringstream s_int_xbar_p2m_c;
+    s_int_xbar_p2m_c << "int_xbar_p2m_c_" << x_id << "_" << y_id;
+    int_xbar_p2m_c = new DspinLocalCrossbar<dspin_int_rsp_width>(
+                     s_int_xbar_p2m_c.str().c_str(),
+                     mt_int,                       // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, 0,          // only one dest
+                     nb_procs,                     // number of local sources
+                     1,                            // number of local dests
+                     2, 2,                         // fifo depths  
+                     false,                        // pseudo RSP
+                     false,                        // no routing table
+                     false );                      // no broacast 
+
+    std::ostringstream s_int_xbar_clack_c;
+    s_int_xbar_clack_c << "int_xbar_clack_c_" << x_id << "_" << y_id;
+    int_xbar_clack_c = new DspinLocalCrossbar<dspin_int_cmd_width>(
+                     s_int_xbar_clack_c.str().c_str(),
+                     mt_int,                       // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local targets 
+                     1, 1,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // no routing table
+                     false);                       // broadcast
+
+    //////////////  INT ROUTER(S)
+    std::ostringstream s_int_router_cmd;
+    s_int_router_cmd << "router_cmd_" << x_id << "_" << y_id;
+    int_router_cmd = new VirtualDspinRouter<dspin_int_cmd_width>(
+                     s_int_router_cmd.str().c_str(),
+                     x_id,y_id,                    // coordinate in the mesh
+                     x_width, y_width,             // x & y fields width
+                     3,                            // nb virtual channels
+                     4,4);                         // input & output fifo depths
+
+    std::ostringstream s_int_router_rsp;
+    s_int_router_rsp << "router_rsp_" << x_id << "_" << y_id;
+    int_router_rsp = new VirtualDspinRouter<dspin_int_rsp_width>(
+                     s_int_router_rsp.str().c_str(),
+                     x_id,y_id,                    // router coordinates in mesh
+                     x_width, y_width,             // x & y fields width
+                     2,                            // nb virtual channels
+                     4,4);                         // input & output fifo depths
+
+    //////////////  XRAM
+    std::ostringstream s_xram;
+    s_xram << "xram_" << x_id << "_" << y_id;
+    xram = new VciSimpleRam<vci_param_ext>(
+                     s_xram.str().c_str(),
+                     IntTab(cluster_id, ram_xram_tgt_id),
+                     mt_ram,
+                     loader,
+                     xram_latency);
+
+    std::ostringstream s_wt_xram;
+    s_wt_xram << "xram_wt_" << x_id << "_" << y_id;
+    xram_ram_wt = new VciDspinTargetWrapper<vci_param_ext,
+                                            dspin_ram_cmd_width,
+                                            dspin_ram_rsp_width>(
+                     s_wt_xram.str().c_str(),
+                     x_width + y_width + l_width);
+
+    /////////////  RAM ROUTER(S)
+    std::ostringstream s_ram_router_cmd;
+    s_ram_router_cmd << "ram_router_cmd_" << x_id << "_" << y_id;
+    ram_router_cmd = new DspinRouter<dspin_ram_cmd_width>(
+                     s_ram_router_cmd.str().c_str(),
+                     x_id, y_id,                     // router coordinates in mesh
+                     x_width,                        // x field width in first flit
+                     y_width,                        // y field width in first flit
+                     4, 4);                          // input & output fifo depths
+
+    std::ostringstream s_ram_router_rsp;
+    s_ram_router_rsp << "ram_router_rsp_" << x_id << "_" << y_id;
+    ram_router_rsp = new DspinRouter<dspin_ram_rsp_width>(
+                     s_ram_router_rsp.str().c_str(),
+                     x_id, y_id,                     // coordinates in mesh
+                     x_width,                        // x field width in first flit
+                     y_width,                        // y field width in first flit
+                     4, 4);                          // input & output fifo depths
+
+
+    ////////////////////// I/O  CLUSTER ONLY    ///////////////////////
+    if ( is_io )
+    {
+        ///////////  IO_BRIDGE
+        std::ostringstream s_iob;
+        s_iob << "iob_" << x_id << "_" << y_id;   
+        iob = new VciIoBridge<vci_param_int,
+                              vci_param_ext>(  
+                     s_iob.str().c_str(),
+                     mt_ram,                                // EXT network maptab
+                     mt_int,                                // INT network maptab
+                     mt_iox,                                // IOX network maptab
+                     IntTab( cluster_id, int_iobx_tgt_id ), // INT TGTID
+                     IntTab( cluster_id, int_iobx_ini_id ), // INT SRCID
+                     IntTab( 0         , iox_iobx_tgt_id ), // IOX TGTID
+                     IntTab( 0         , iox_iobx_ini_id ), // IOX SRCID
+                     16,                                    // cache line words
+                     8,                                     // IOTLB ways
+                     8,                                     // IOTLB sets
+                     debug_start_cycle,
+                     iob_debug_ok );
+        
+        std::ostringstream s_iob_ram_wi;
+        s_iob_ram_wi << "iob_ram_wi_" << x_id << "_" << y_id;   
+        iob_ram_wi = new VciDspinInitiatorWrapper<vci_param_ext,
+                                                  dspin_ram_cmd_width,
+                                                  dspin_ram_rsp_width>(
+                     s_iob_ram_wi.str().c_str(),
+                     vci_param_int::S);
+
+        std::ostringstream s_ram_xbar_cmd;
+        s_ram_xbar_cmd << "s_ram_xbar_cmd_" << x_id << "_" << y_id;
+        ram_xbar_cmd = new DspinLocalCrossbar<dspin_ram_cmd_width>(
+              s_ram_xbar_cmd.str().c_str(), // name
+              mt_ram,                       // mapping table
+              x_id, y_id,                   // x, y
+              x_width, y_width, l_width,    // x_width, y_width, l_width
+              2, 0,                         // local inputs, local outputs
+              2, 2,                         // in fifo, out fifo depths
+              true,                         // is cmd ?
+              false,                        // use routing table ?
+              false);                       // support broadcast ?
+
+        std::ostringstream s_ram_xbar_rsp;
+        s_ram_xbar_rsp << "s_ram_xbar_rsp_" << x_id << "_" << y_id;
+        ram_xbar_rsp = new DspinLocalCrossbar<dspin_ram_rsp_width>(
+              s_ram_xbar_rsp.str().c_str(), // name
+              mt_ram,                       // mapping table
+              x_id, y_id,                   // x, y
+              x_width, y_width, l_width,    // x_width, y_width, l_width
+              0, 2,                         // local inputs, local outputs
+              2, 2,                         // in fifo, out fifo depths
+              false,                        // is cmd ?
+              true,                         // use routing table ?
+              false);                       // support broadcast ?
+    } // end if IO
+
+    ////////////////////////////////////
+    // Connections are defined here
+    ////////////////////////////////////
+
+    // on coherence network : local srcid[proc] in [0...nb_procs-1]
+    //                      : local srcid[memc] = nb_procs
+ 
+    //////////////////////// internal CMD & RSP routers
+    int_router_cmd->p_clk                        (this->p_clk);
+    int_router_cmd->p_resetn                     (this->p_resetn);
+    int_router_rsp->p_clk                        (this->p_clk);
+    int_router_rsp->p_resetn                     (this->p_resetn);
+
+    for (int i = 0; i < 4; i++)
+    {
+        for(int k = 0; k < 3; k++)
+        {
+            int_router_cmd->p_out[i][k]          (this->p_dspin_int_cmd_out[i][k]);
+            int_router_cmd->p_in[i][k]           (this->p_dspin_int_cmd_in[i][k]);
+        }
+
+        for(int k = 0; k < 2; k++)
+        {
+            int_router_rsp->p_out[i][k]          (this->p_dspin_int_rsp_out[i][k]);
+            int_router_rsp->p_in[i][k]           (this->p_dspin_int_rsp_in[i][k]);
+        }
+    }
+
+    // local ports
+    int_router_cmd->p_out[4][0]                  (signal_int_dspin_cmd_g2l_d);
+    int_router_cmd->p_out[4][1]                  (signal_int_dspin_m2p_g2l_c);
+    int_router_cmd->p_out[4][2]                  (signal_int_dspin_clack_g2l_c);
+    int_router_cmd->p_in[4][0]                   (signal_int_dspin_cmd_l2g_d);
+    int_router_cmd->p_in[4][1]                   (signal_int_dspin_m2p_l2g_c);
+    int_router_cmd->p_in[4][2]                   (signal_int_dspin_clack_l2g_c);
+    
+    int_router_rsp->p_out[4][0]                  (signal_int_dspin_rsp_g2l_d);
+    int_router_rsp->p_out[4][1]                  (signal_int_dspin_p2m_g2l_c);
+    int_router_rsp->p_in[4][0]                   (signal_int_dspin_rsp_l2g_d);
+    int_router_rsp->p_in[4][1]                   (signal_int_dspin_p2m_l2g_c);
+
+    ///////////////////// CMD DSPIN  local crossbar direct
+    int_xbar_d->p_clk                                 (this->p_clk);
+    int_xbar_d->p_resetn                              (this->p_resetn);
+    int_xbar_d->p_initiator_to_up                     (signal_int_vci_l2g);
+    int_xbar_d->p_target_to_up                        (signal_int_vci_g2l);
+
+    int_xbar_d->p_to_target[int_memc_tgt_id]          (signal_int_vci_tgt_memc);
+    int_xbar_d->p_to_target[int_xicu_tgt_id]          (signal_int_vci_tgt_xicu);
+    int_xbar_d->p_to_target[int_mdma_tgt_id]          (signal_int_vci_tgt_mdma);
+    int_xbar_d->p_to_target[int_brom_tgt_id]          (signal_int_vci_tgt_brom);
+    int_xbar_d->p_to_initiator[int_mdma_ini_id]       (signal_int_vci_ini_mdma);
+    for (size_t p = 0; p < nb_procs; p++)
+       int_xbar_d->p_to_initiator[int_proc_ini_id + p] (signal_int_vci_ini_proc[p]);
+
+    if ( is_io )
+    {
+       int_xbar_d->p_to_target[int_iobx_tgt_id]        (signal_int_vci_tgt_iobx);
+       int_xbar_d->p_to_initiator[int_iobx_ini_id]     (signal_int_vci_ini_iobx);
+    }
+
+    int_wi_gate_d->p_clk                         (this->p_clk);
+    int_wi_gate_d->p_resetn                      (this->p_resetn);
+    int_wi_gate_d->p_vci                         (signal_int_vci_l2g);
+    int_wi_gate_d->p_dspin_cmd                   (signal_int_dspin_cmd_l2g_d);
+    int_wi_gate_d->p_dspin_rsp                   (signal_int_dspin_rsp_g2l_d);
+
+    int_wt_gate_d->p_clk                         (this->p_clk);
+    int_wt_gate_d->p_resetn                      (this->p_resetn);
+    int_wt_gate_d->p_vci                         (signal_int_vci_g2l);
+    int_wt_gate_d->p_dspin_cmd                   (signal_int_dspin_cmd_g2l_d);
+    int_wt_gate_d->p_dspin_rsp                   (signal_int_dspin_rsp_l2g_d);
+    
+    ////////////////////// M2P DSPIN local crossbar coherence
+    int_xbar_m2p_c->p_clk                        (this->p_clk);
+    int_xbar_m2p_c->p_resetn                     (this->p_resetn);
+    int_xbar_m2p_c->p_global_out                 (signal_int_dspin_m2p_l2g_c);
+    int_xbar_m2p_c->p_global_in                  (signal_int_dspin_m2p_g2l_c);
+    int_xbar_m2p_c->p_local_in[0]                (signal_int_dspin_m2p_memc);
+    for (size_t p = 0; p < nb_procs; p++) 
+        int_xbar_m2p_c->p_local_out[p]           (signal_int_dspin_m2p_proc[p]);
+
+    ////////////////////////// P2M DSPIN local crossbar coherence
+    int_xbar_p2m_c->p_clk                        (this->p_clk);
+    int_xbar_p2m_c->p_resetn                     (this->p_resetn);
+    int_xbar_p2m_c->p_global_out                 (signal_int_dspin_p2m_l2g_c);
+    int_xbar_p2m_c->p_global_in                  (signal_int_dspin_p2m_g2l_c);
+    int_xbar_p2m_c->p_local_out[0]               (signal_int_dspin_p2m_memc);
+    for (size_t p = 0; p < nb_procs; p++) 
+        int_xbar_p2m_c->p_local_in[p]            (signal_int_dspin_p2m_proc[p]);
+
+    ////////////////////// CLACK DSPIN local crossbar coherence
+    int_xbar_clack_c->p_clk                      (this->p_clk);
+    int_xbar_clack_c->p_resetn                   (this->p_resetn);
+    int_xbar_clack_c->p_global_out               (signal_int_dspin_clack_l2g_c);
+    int_xbar_clack_c->p_global_in                (signal_int_dspin_clack_g2l_c);
+    int_xbar_clack_c->p_local_in[0]              (signal_int_dspin_clack_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        int_xbar_clack_c->p_local_out[p]         (signal_int_dspin_clack_proc[p]);
+
+    //////////////////////////////////// Processors
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        proc[p]->p_clk                           (this->p_clk);
+        proc[p]->p_resetn                        (this->p_resetn);
+        proc[p]->p_vci                           (signal_int_vci_ini_proc[p]);
+        proc[p]->p_dspin_m2p                     (signal_int_dspin_m2p_proc[p]);
+        proc[p]->p_dspin_p2m                     (signal_int_dspin_p2m_proc[p]);
+        proc[p]->p_dspin_clack                   (signal_int_dspin_clack_proc[p]);
+
+        for ( size_t j = 0 ; j < 6 ; j++)
+        {
+            if ( j < 4 ) proc[p]->p_irq[j]       (signal_proc_it[4*p + j]);
+            else         proc[p]->p_irq[j]       (signal_false);
+        }
+    }
+
+    ///////////////////////////////////// XICU
+    xicu->p_clk                                  (this->p_clk);
+    xicu->p_resetn                               (this->p_resetn);
+    xicu->p_vci                                  (signal_int_vci_tgt_xicu);
+    for ( size_t i=0 ; i < 16  ; i++)
+    {
+        xicu->p_irq[i]                           (signal_proc_it[i]);
+    }
+    for ( size_t i=0 ; i < xcu_nb_inputs ; i++)
+    {
+        if      ( i == 0 )       xicu->p_hwi[i]  (signal_irq_memc);
+        else if ( i <= nb_dmas ) xicu->p_hwi[i]  (signal_irq_mdma[i-1]);
+        else                     xicu->p_hwi[i]  (signal_false);
+    }                     
+
+    ///////////////////////////////////// MEMC
+    memc->p_clk                                  (this->p_clk);
+    memc->p_resetn                               (this->p_resetn);
+    memc->p_vci_ixr                              (signal_ram_vci_ini_memc);
+    memc->p_vci_tgt                              (signal_int_vci_tgt_memc);
+    memc->p_dspin_p2m                            (signal_int_dspin_p2m_memc);
+    memc->p_dspin_m2p                            (signal_int_dspin_m2p_memc);
+    memc->p_dspin_clack                          (signal_int_dspin_clack_memc);
+    memc->p_irq                                  (signal_irq_memc);
+
+    // wrapper to RAM network
+    memc_ram_wi->p_clk                           (this->p_clk);
+    memc_ram_wi->p_resetn                        (this->p_resetn);
+    memc_ram_wi->p_dspin_cmd                     (signal_ram_dspin_cmd_memc_i);
+    memc_ram_wi->p_dspin_rsp                     (signal_ram_dspin_rsp_memc_i);
+    memc_ram_wi->p_vci                           (signal_ram_vci_ini_memc);
+
+    //////////////////////////////////// XRAM
+    xram->p_clk                                  (this->p_clk);
+    xram->p_resetn                               (this->p_resetn);
+    xram->p_vci                                  (signal_ram_vci_tgt_xram);
+
+    // wrapper to RAM network
+    xram_ram_wt->p_clk                           (this->p_clk);
+    xram_ram_wt->p_resetn                        (this->p_resetn);
+    xram_ram_wt->p_dspin_cmd                     (signal_ram_dspin_cmd_xram_t);
+    xram_ram_wt->p_dspin_rsp                     (signal_ram_dspin_rsp_xram_t);
+    xram_ram_wt->p_vci                           (signal_ram_vci_tgt_xram);
+
+    /////////////////////////////////// MDMA
+    mdma->p_clk                                  (this->p_clk);
+    mdma->p_resetn                               (this->p_resetn);
+    mdma->p_vci_target                           (signal_int_vci_tgt_mdma);
+    mdma->p_vci_initiator                        (signal_int_vci_ini_mdma);
+    for (size_t i=0 ; i<nb_dmas ; i++)
+        mdma->p_irq[i]                           (signal_irq_mdma[i]);
+
+    /////////////////////////////////// BROM
+    brom->p_clk                                  (this->p_clk);
+    brom->p_resetn                               (this->p_resetn);
+    brom->p_vci                                  (signal_int_vci_tgt_brom);
+
+    //////////////////////////// RAM network CMD & RSP routers
+    ram_router_cmd->p_clk                        (this->p_clk);
+    ram_router_cmd->p_resetn                     (this->p_resetn);
+    ram_router_rsp->p_clk                        (this->p_clk);
+    ram_router_rsp->p_resetn                     (this->p_resetn);
+    for( size_t n=0 ; n<4 ; n++)
+    {
+        ram_router_cmd->p_out[n]                 (this->p_dspin_ram_cmd_out[n]);
+        ram_router_cmd->p_in[n]                  (this->p_dspin_ram_cmd_in[n]);
+        ram_router_rsp->p_out[n]                 (this->p_dspin_ram_rsp_out[n]);
+        ram_router_rsp->p_in[n]                  (this->p_dspin_ram_rsp_in[n]);
+    }
+
+    ram_router_cmd->p_out[4]                     (signal_ram_dspin_cmd_xram_t);
+    ram_router_rsp->p_in[4]                      (signal_ram_dspin_rsp_xram_t);
+
+    if ( is_io )
+    {
+       ram_router_cmd->p_in[4]                   (signal_ram_dspin_cmd_xbar);
+       ram_router_rsp->p_out[4]                  (signal_ram_dspin_rsp_xbar);
+    }
+    else
+    {
+       ram_router_cmd->p_in[4]                   (signal_ram_dspin_cmd_memc_i);
+       ram_router_rsp->p_out[4]                  (signal_ram_dspin_rsp_memc_i);
+    }
+   
+    ///////////////////////// IOB exists only in cluster_iob0 & cluster_iob1. 
+    if ( is_io )
+    {
+        // IO bridge
+        iob->p_clk                                 (this->p_clk);
+        iob->p_resetn                              (this->p_resetn);
+        iob->p_vci_ini_iox                         (*(this->p_vci_iob_iox_ini));
+        iob->p_vci_tgt_iox                         (*(this->p_vci_iob_iox_tgt));
+        iob->p_vci_tgt_int                         (signal_int_vci_tgt_iobx);
+        iob->p_vci_ini_int                         (signal_int_vci_ini_iobx);
+        iob->p_vci_ini_ram                         (signal_ram_vci_ini_iobx);
+
+        // initiator wrapper to RAM network
+        iob_ram_wi->p_clk                          (this->p_clk);
+        iob_ram_wi->p_resetn                       (this->p_resetn);
+        iob_ram_wi->p_dspin_cmd                    (signal_ram_dspin_cmd_iob_i);
+        iob_ram_wi->p_dspin_rsp                    (signal_ram_dspin_rsp_iob_i);
+        iob_ram_wi->p_vci                          (signal_ram_vci_ini_iobx);
+
+        // crossbar between MEMC and IOB to RAM network
+        ram_xbar_cmd->p_clk                        (this->p_clk);
+        ram_xbar_cmd->p_resetn                     (this->p_resetn);
+        ram_xbar_cmd->p_global_out                 (signal_ram_dspin_cmd_xbar);
+        ram_xbar_cmd->p_global_in                  (signal_ram_dspin_cmd_false);
+        ram_xbar_cmd->p_local_in[ram_memc_ini_id]  (signal_ram_dspin_cmd_memc_i);
+        ram_xbar_cmd->p_local_in[ram_iobx_ini_id]  (signal_ram_dspin_cmd_iob_i);
+
+        ram_xbar_rsp->p_clk                        (this->p_clk);
+        ram_xbar_rsp->p_resetn                     (this->p_resetn);
+        ram_xbar_rsp->p_global_out                 (signal_ram_dspin_rsp_false);
+        ram_xbar_rsp->p_global_in                  (signal_ram_dspin_rsp_xbar);
+        ram_xbar_rsp->p_local_out[ram_memc_ini_id] (signal_ram_dspin_rsp_memc_i);
+        ram_xbar_rsp->p_local_out[ram_iobx_ini_id] (signal_ram_dspin_rsp_iob_i);
+    }
+
+   SC_METHOD(init);
+} // end constructor
+
+tmpl(void)::init()
+{
+    signal_ram_dspin_cmd_false.write = false;
+    signal_ram_dspin_cmd_false.read = true;
+    signal_ram_dspin_rsp_false.write = false;
+    signal_ram_dspin_rsp_false.read = true;
+} // end init
+
+}}
+
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/platforms/tsar_generic_leti/Makefile
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_leti/Makefile	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_leti/Makefile	(revision 724)
@@ -0,0 +1,6 @@
+simul.x: top.cpp top.desc
+	soclib-cc -P -p top.desc -I. -o simul.x
+
+clean:
+	soclib-cc -x -p top.desc -I.
+	rm -rf *.o *.x term* tty* ext* temp
Index: /branches/fault_tolerance/platforms/tsar_generic_leti/soclib.conf
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_leti/soclib.conf	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_leti/soclib.conf	(revision 724)
@@ -0,0 +1,1 @@
+
Index: /branches/fault_tolerance/platforms/tsar_generic_leti/top.cpp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_leti/top.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_leti/top.cpp	(revision 724)
@@ -0,0 +1,1422 @@
+/////////////////////////////////////////////////////////////////////////
+// File: top.cpp (for tsar_generic_leti)
+// Author: Alain Greiner 
+// Copyright: UPMC/LIP6
+// Date : february 2014
+// This program is released under the GNU public license
+/////////////////////////////////////////////////////////////////////////
+// This file define a generic TSAR architecture, fully compatible
+// with the VLSI Hardware prototype developped by CEA-LETI and LIP6
+// in the framework of the SHARP project.
+// 
+// The processor is a MIPS32 processor wrapped in a GDB server
+// (this is defined in the tsar_xbar_cluster).
+// 
+// It does not use an external ROM, as the boot code is (pre)loaded
+// in cluster (0,0) memory at address 0x0.
+//
+// The physical address space is 40 bits.
+// The 8 address MSB bits define the cluster index.
+//
+// The main hardware parameters are the mesh size (X_SIZE & Y_SIZE),
+// and the number of processors per cluster (NB_PROCS_MAX).
+// The number of clusters cannot be larger than 128.
+// The number of processors per cluster cannot be larger than 4.
+// 
+// Each cluster contains:
+// - 5 dspin_local_crossbar (local interconnect)
+// - 5 dspin_router (global interconnect)
+// - up to 4 vci_cc_vcache wrapping a MIPS32 processor
+// - 1 vci_mem_cache
+// - 1 vci_xicu
+// - 1 vci_simple_ram (to model the L3 cache).
+//
+// Each processor receives 4 consecutive IRQ lines from the local XICU.
+//
+// In all clusters, the MEMC IRQ line (signaling a late write error)
+// is connected to XICU HWI[8]
+// The cluster (0,0) contains two "backup" peripherals:
+// - one block device controller, whose IRQ is connected to XICU HWI[9].
+// - one single channel TTY controller, whose IRQ is connected to XICU HWI[10].
+//
+// The cluster internal architecture is defined in file tsar_leti_cluster,
+// that must be considered as an extension of this top.cpp file.
+//
+// Besides the hardware components in clusters, "external" peripherals 
+// are connected to an external IO bus (implemented as a vci_local_crossbar):
+// - one disk controller 
+// - one multi-channel ethernet controller 
+// - one multi-channel chained buffer dma controller
+// - one multi-channel tty controller 
+// - one frame buffer controller 
+// - one 32 channels iopic controller
+//
+// This IOBUS is connected to the north  port of the DIR_CMD 
+// and DIR_RSP routers, in cluster(X_SIZE-1, Y_SIZE-1).
+// For all external peripherals, the hardware interrupts (HWI) are
+// translated to write interrupts (WTI) by the iopic component:
+// - IOPIC HWI[1:0]     connected to IRQ_NIC_RX[1:0]
+// - IOPIC HWI[3:2]     connected to IRQ_NIC_TX[1:0]      
+// - IOPIC HWI[7:4]     connected to IRQ_CMA_TX[3:0]]
+// - IOPIC HWI[8]       connected to IRQ_BDEV
+// - IOPIC HWI[15:9]    unused       (grounded)
+// - IOPIC HWI[23:16]   connected to IRQ_TTY_RX[7:0]]
+// - IOPIC HWI[31:24]   connected to IRQ_TTY_TX[7:0]]
+////////////////////////////////////////////////////////////////////////////
+// The following parameters must be defined in the hard_config.h file :
+// - X_WIDTH          : number of bits for x coordinate (must be 4)
+// - Y_WIDTH          : number of bits for y coordinate (must be 4)
+// - X_SIZE           : number of clusters in a row (1,2,4,8,16)
+// - Y_SIZE           : number of clusters in a column (1,2,4,8)
+// - NB_PROCS_MAX     : number of processors per cluster (1, 2 or 4)
+// - NB_CMA_CHANNELS  : number of CMA channels in I/0 cluster (4 max)
+// - NB_TTY_CHANNELS  : number of TTY channels in I/O cluster (8 max)
+// - NB_NIC_CHANNELS  : number of NIC channels in I/O cluster (2 max)
+// 
+// Some other hardware parameters are not used when compiling the OS,
+// and are only defined in this top.cpp file:
+// - XRAM_LATENCY     : external ram latency 
+// - MEMC_WAYS        : L2 cache number of ways
+// - MEMC_SETS        : L2 cache number of sets
+// - L1_IWAYS         : L1 cache instruction number of ways
+// - L1_ISETS         : L1 cache instruction number of sets
+// - L1_DWAYS         : L1 cache data number of ways
+// - L1_DSETS         : L1 cache data number of sets
+// - FBUF_X_SIZE      : width of frame buffer (pixels)
+// - FBUF_Y_SIZE      : heigth of frame buffer (lines)
+// - BDEV_IMAGE_NAME  : file pathname for block device 
+// - NIC_RX_NAME      : file pathname for NIC received packets
+// - NIC_TX_NAME      : file pathname for NIC transmited packets
+// - NIC_MAC4         : MAC address
+// - NIC_MAC2         : MAC address
+/////////////////////////////////////////////////////////////////////////
+// General policy for 40 bits physical address decoding:
+// All physical segments base addresses are multiple of 1 Mbytes
+// (=> the 24 LSB bits = 0, and the 16 MSB bits define the target) 
+// The (X_WIDTH + Y_WIDTH) MSB bits (left aligned) define
+// the cluster index, and the LADR bits define the local index:
+//      |X_ID|Y_ID|  LADR |     OFFSET          |
+//      |  4 |  4 |   8   |       24            |
+/////////////////////////////////////////////////////////////////////////
+// General policy for 14 bits SRCID decoding:
+// Each component is identified by (x_id, y_id, l_id) tuple.
+//      |X_ID|Y_ID| L_ID |
+//      |  4 |  4 |  6   |
+/////////////////////////////////////////////////////////////////////////
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+#include <stdint.h>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "tsar_leti_cluster.h"
+#include "vci_local_crossbar.h"
+#include "vci_dspin_initiator_wrapper.h"
+#include "vci_dspin_target_wrapper.h"
+#include "vci_multi_tty.h"
+#include "vci_multi_nic.h"
+#include "vci_chbuf_dma.h"
+#include "vci_block_device_tsar.h"
+#include "vci_framebuffer.h"
+#include "vci_iopic.h"
+#include "alloc_elems.h"
+
+//////////////////////////////////////////////////////////////////////////////////////////
+//    Parameters depending on the OS and software application         
+//    - path to hard_config file
+//    - path to binary code for the RAM loader
+//    - path to disk image for RAMDISK loader
+//    - path to disk image for IOC device
+//////////////////////////////////////////////////////////////////////////////////////////
+
+#define USE_GIET_VM     1
+#define USE_GIET_TSAR   0
+
+#if ( USE_GIET_VM and USE_GIET_TSAR )
+#error "Can't use Two different OS"
+#endif
+
+#if ( (not USE_GIET_VM) and (not USE_GIET_TSAR) )
+#error "You need to specify one OS"
+#endif
+
+#if USE_GIET_TSAR
+#include                         "hard_config.h"
+#define BINARY_PATH_FOR_LOADER   "../../softs/soft_transpose_giet/bin.soft"
+#define DISK_IMAGE_PATH_FOR_IOC  "../../softs/soft_transpose_giet/images.raw"
+#define RAMDISK_PATH_FOR_LOADER  DISK_IMAGE_PATH_FOR_IOC "@0x00800000:"
+#endif
+
+#if USE_GIET_VM
+#include                         "hard_config.h"
+#define BINARY_PATH_FOR_LOADER   "../../softs/tsar_boot/preloader.elf"
+#define DISK_IMAGE_PATH_FOR_IOC  "../../../giet_vm/hdd/virt_hdd.dmg"        
+#define RAMDISK_PATH_FOR_LOADER  DISK_IMAGE_PATH_FOR_IOC "@0x02000000:"
+#endif
+
+///////////////////////////////////////////////////
+//               Parallelisation
+///////////////////////////////////////////////////
+#define USE_OPENMP _OPENMP
+
+#if USE_OPENMP
+#include <omp.h>
+#endif
+
+///////////////////////////////////////////////////
+//  cluster index (from x,y coordinates)
+///////////////////////////////////////////////////
+
+#define cluster(x,y)   ((y) + ((x) << Y_WIDTH))
+
+///////////////////////////////////////////////////////////
+//          DSPIN parameters           
+///////////////////////////////////////////////////////////
+
+#define dspin_cmd_width      39
+#define dspin_rsp_width      32
+
+///////////////////////////////////////////////////////////
+//          VCI parameters           
+///////////////////////////////////////////////////////////
+
+#define vci_cell_width_int    4
+#define vci_cell_width_ext    8
+#define vci_address_width     40
+#define vci_plen_width        8
+#define vci_rerror_width      1
+#define vci_clen_width        1
+#define vci_rflag_width       1
+#define vci_srcid_width       14
+#define vci_pktid_width       4
+#define vci_trdid_width       4
+#define vci_wrplen_width      1
+
+
+/////////////////////////////////////////////////////////////////////////////////////////
+//    Secondary Hardware Parameters         
+/////////////////////////////////////////////////////////////////////////////////////////
+
+#define RESET_ADDRESS         0x0
+
+#define MAX_TTY_CHANNELS      8
+#define MAX_CMA_CHANNELS      4
+#define MAX_NIC_CHANNELS      2
+
+#define XRAM_LATENCY          0
+#define XRAM_SIZE             0x04000000    // 64 Mbytes per cluster
+
+#define MEMC_WAYS             16
+#define MEMC_SETS             256
+
+#define L1_IWAYS              4
+#define L1_ISETS              64
+
+#define L1_DWAYS              4
+#define L1_DSETS              64
+
+#define FBUF_X_SIZE           128
+#define FBUF_Y_SIZE           128
+
+#define NIC_MAC4              0XBABEF00D
+#define NIC_MAC2              0xBEEF
+#define NIC_RX_NAME           "/dev/null"
+#define NIC_TX_NAME           "/dev/null"
+
+#define NORTH                 0
+#define SOUTH                 1
+#define EAST                  2
+#define WEST                  3
+
+///////////////////////////////////////////////////////////////////////////////////////
+//     DEBUG Parameters default values         
+///////////////////////////////////////////////////////////////////////////////////////
+
+#define MAX_FROZEN_CYCLES     500000
+
+///////////////////////////////////////////////////////////////////////////////////////
+//     LOCAL TGTID & SRCID definition 
+// For all components:  global TGTID = global SRCID = cluster_index
+///////////////////////////////////////////////////////////////////////////////////////
+
+#define MEMC_TGTID            0
+#define XICU_TGTID            1
+#define MTTY_TGTID            2
+#define BDEV_TGTID            3
+#define FBUF_TGTID            4
+#define MNIC_TGTID            5
+#define CDMA_TGTID            6
+#define IOPI_TGTID            7
+
+#define BDEV_SRCID            NB_PROCS_MAX
+#define CDMA_SRCID            NB_PROCS_MAX + 1
+#define IOPI_SRCID            NB_PROCS_MAX + 2
+
+//////////////////////////////////////////////////////////////////////////////////////
+//    Physical segments definition
+//////////////////////////////////////////////////////////////////////////////////////
+// - 3 segments are replicated in all clusters
+// - 2 segments are only in cluster[0,0] 
+// - 4 segments are only in cluster [X_SIZE-1,Y_SIZE] 
+// The following values are for segments in cluster 0,
+// and these 32 bits values must be concatenate with the cluster 
+// index (on 8 bits) to obtain the 40 bits address.
+//////////////////////////////////////////////////////////////////////////////////////
+
+// in cluster [0,0] & [X_SIZE-1,Y_SIZE] 
+
+#define MTTY_BASE    0xF4000000
+#define MTTY_SIZE    0x00001000   // 4 Kbytes
+
+#define BDEV_BASE    0xF2000000
+#define BDEV_SIZE    0x00001000   // 4 Kbytes
+
+// in cluster [X_SIZE-1,Y_SIZE]
+
+#define FBUF_BASE    0xF3000000
+#define FBUF_SIZE    (FBUF_X_SIZE * FBUF_Y_SIZE * 2)
+
+#define MNIC_BASE    0xF7000000
+#define MNIC_SIZE    0x00800000   // 512 Kbytes (for 8 channels)
+
+#define CDMA_BASE    0xF8000000
+#define CDMA_SIZE    0x00004000 * NB_CMA_CHANNELS
+
+#define IOPI_BASE    0xF9000000
+#define IOPI_SIZE    0x00001000   // 4 Kbytes 
+
+// replicated segments : address is extended to 40 bits by cluster_xy
+
+#define MEMC_BASE    0x00000000
+#define MEMC_SIZE    XRAM_SIZE
+
+#define MCFG_BASE    0xE0000000
+#define MCFG_SIZE    0x00001000   // 4 Kbytes
+
+#define XICU_BASE    0xF0000000
+#define XICU_SIZE    0x00001000   // 4 Kbytes
+
+bool stop_called = false;
+
+/////////////////////////////////
+int _main(int argc, char *argv[])
+{
+   using namespace sc_core;
+   using namespace soclib::caba;
+   using namespace soclib::common;
+
+   uint32_t ncycles           = 0xFFFFFFFF; // max simulated cycles
+   size_t   threads           = 1;          // simulator's threads number
+   bool     trace_ok          = false;      // trace activated
+   uint32_t trace_from        = 0;          // trace start cycle
+   bool     trace_proc_ok     = false;      // detailed proc trace activated
+   size_t   trace_memc_ok     = false;      // detailed memc trace activated
+   size_t   trace_memc_id     = 0;          // index of memc to be traced 
+   size_t   trace_proc_id     = 0;          // index of proc to be traced
+   uint32_t frozen_cycles     = MAX_FROZEN_CYCLES;
+   char     soft_name[256]    = BINARY_PATH_FOR_LOADER;
+   char     disk_name[256]    = DISK_IMAGE_PATH_FOR_IOC;
+   char     ramdisk_name[256] = RAMDISK_PATH_FOR_LOADER;
+   struct   timeval t1,t2;
+   uint64_t ms1,ms2;
+
+   ////////////// command line arguments //////////////////////
+   if (argc > 1)
+   {
+      for (int n = 1; n < argc; n = n + 2)
+      {
+         if ((strcmp(argv[n], "-NCYCLES") == 0) && (n + 1 < argc))
+         {
+            ncycles = (uint64_t) strtol(argv[n + 1], NULL, 0);
+         }
+         else if ((strcmp(argv[n],"-DEBUG") == 0) && (n + 1 < argc))
+         {
+            trace_ok = true;
+            trace_from = (uint32_t) strtol(argv[n + 1], NULL, 0);
+         }
+         else if ((strcmp(argv[n], "-MEMCID") == 0) && (n + 1 < argc))
+         {
+            trace_memc_ok = true;
+            trace_memc_id = (size_t) strtol(argv[n + 1], NULL, 0);
+            size_t x = trace_memc_id >> Y_WIDTH;
+            size_t y = trace_memc_id & ((1<<Y_WIDTH)-1);
+
+            assert( (x < X_SIZE) and (y < (Y_SIZE)) and
+                  "MEMCID parameter refers a not valid memory cache");
+         }
+         else if ((strcmp(argv[n], "-PROCID") == 0) && (n + 1 < argc))
+         {
+            trace_proc_ok = true;
+            trace_proc_id = (size_t) strtol(argv[n + 1], NULL, 0);
+            size_t cluster_xy = trace_proc_id / NB_PROCS_MAX ;
+            size_t x          = cluster_xy >> Y_WIDTH;
+            size_t y          = cluster_xy & ((1<<Y_WIDTH)-1);
+            size_t l          = trace_proc_id % NB_PROCS_MAX ;
+
+            assert( (x < X_SIZE) and (y < Y_SIZE) and (l < NB_PROCS_MAX) and
+                  "PROCID parameter refers a not valid processor");
+         }
+         else if ((strcmp(argv[n], "-SOFT") == 0) && ((n + 1) < argc))
+         {
+            strcpy(soft_name, argv[n + 1]); 
+         }
+         else if ((strcmp(argv[n], "-DISK") == 0) && ((n + 1) < argc))
+         {
+            strcpy(disk_name, argv[n + 1]);
+         }
+         else if ((strcmp(argv[n], "-RAMDISK") == 0) && ((n + 1) < argc))
+         {
+            strcpy(ramdisk_name, argv[n + 1]); 
+         }
+         else if ((strcmp(argv[n], "-THREADS") == 0) && ((n + 1) < argc))
+         {
+            threads = (size_t) strtol(argv[n + 1], NULL, 0);
+            threads = (threads < 1) ? 1 : threads;
+         }
+         else if ((strcmp(argv[n], "-FROZEN") == 0) && (n + 1 < argc))
+         {
+            frozen_cycles = (uint32_t) strtol(argv[n + 1], NULL, 0);
+         }
+         else
+         {
+            std::cout << "   Arguments are (key,value) couples." << std::endl;
+            std::cout << "   The order is not important." << std::endl;
+            std::cout << "   Accepted arguments are :" << std::endl << std::endl;
+            std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
+            std::cout << "     -DEBUG debug_start_cycle" << std::endl;
+            std::cout << "     -SOFT path to soft" << std::endl;
+            std::cout << "     -DISK path to disk image" << std::endl;
+            std::cout << "     -RAMDISK path to ramdisk image" << std::endl;
+            std::cout << "     -THREADS simulator's threads number" << std::endl;
+            std::cout << "     -FROZEN max_number_of_lines" << std::endl;
+            std::cout << "     -PERIOD number_of_cycles between trace" << std::endl;
+            std::cout << "     -MEMCID index_memc_to_be_traced" << std::endl;
+            std::cout << "     -PROCID index_proc_to_be_traced" << std::endl;
+            exit(0);
+         }
+      }
+   }
+
+    // checking hardware parameters
+    assert( ((X_SIZE==1) or (X_SIZE==2) or (X_SIZE==4) or (X_SIZE==8) or (X_SIZE==16)) and 
+            "Illegal X_SIZE parameter" );
+
+    assert( ((Y_SIZE==1) or (Y_SIZE==2) or (Y_SIZE==4) or (Y_SIZE==8)) and 
+            "Illegal Y_SIZE parameter" );
+
+    assert( (NB_PROCS_MAX <= 4) and
+            "Illegal NB_PROCS_MAX parameter" );
+
+    assert( (NB_CMA_CHANNELS <= MAX_CMA_CHANNELS) and
+            "The NB_CMA_CHANNELS parameter cannot be larger than 4" );
+
+    assert( (NB_TTY_CHANNELS <= MAX_TTY_CHANNELS) and
+            "The NB_TTY_CHANNELS parameter cannot be larger than 8" );
+
+    assert( (NB_NIC_CHANNELS <= MAX_NIC_CHANNELS) and
+            "The NB_NIC_CHANNELS parameter cannot be larger than 2" );
+
+    assert( (vci_address_width == 40) and
+            "VCI address width with the GIET must be 40 bits" );
+
+    assert( (X_WIDTH == 4) and (Y_WIDTH == 4) and
+            "ERROR: you must have X_WIDTH == Y_WIDTH == 4");
+ 
+    std::cout << std::endl;
+
+    std::cout << " - X_SIZE           = " << X_SIZE << std::endl;
+    std::cout << " - Y_SIZE           = " << Y_SIZE << std::endl;
+    std::cout << " - NB_PROCS_MAX     = " << NB_PROCS_MAX <<  std::endl;
+    std::cout << " - NB_DMA_CHANNELS  = " << NB_DMA_CHANNELS <<  std::endl;
+    std::cout << " - NB_TTY_CHANNELS  = " << NB_TTY_CHANNELS <<  std::endl;
+    std::cout << " - NB_NIC_CHANNELS  = " << NB_NIC_CHANNELS <<  std::endl;
+    std::cout << " - MEMC_WAYS        = " << MEMC_WAYS << std::endl;
+    std::cout << " - MEMC_SETS        = " << MEMC_SETS << std::endl;
+    std::cout << " - RAM_LATENCY      = " << XRAM_LATENCY << std::endl;
+    std::cout << " - MAX_FROZEN       = " << frozen_cycles << std::endl;
+    std::cout << " - MAX_CYCLES       = " << ncycles << std::endl;
+    std::cout << " - RESET_ADDRESS    = " << RESET_ADDRESS << std::endl;
+    std::cout << " - SOFT_FILENAME    = " << soft_name << std::endl;
+    std::cout << " - DISK_IMAGENAME   = " << disk_name << std::endl;
+    std::cout << " - RAMDISK_FILENAME = " << ramdisk_name << std::endl;
+    std::cout << " - OPENMP THREADS   = " << threads << std::endl;
+
+    std::cout << std::endl;
+
+    // Internal and External VCI parameters definition
+    typedef soclib::caba::VciParams<vci_cell_width_int,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_int;
+
+    typedef soclib::caba::VciParams<vci_cell_width_ext,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_ext;
+
+#if USE_OPENMP
+   omp_set_dynamic(false);
+   omp_set_num_threads(threads);
+   std::cerr << "Built with openmp version " << _OPENMP << std::endl;
+#endif
+
+
+   ///////////////////////////////////////
+   //  Direct Network Mapping Table
+   ///////////////////////////////////////
+
+   MappingTable maptabd(vci_address_width, 
+                        IntTab(X_WIDTH + Y_WIDTH, 16 - X_WIDTH - Y_WIDTH), 
+                        IntTab(X_WIDTH + Y_WIDTH, vci_srcid_width - X_WIDTH - Y_WIDTH), 
+                        0x00FF000000ULL);
+
+   // replicated segments
+   for (size_t x = 0; x < X_SIZE; x++)
+   {
+      for (size_t y = 0; y < (Y_SIZE) ; y++)
+      {
+         sc_uint<vci_address_width> offset;
+         offset = ((sc_uint<vci_address_width>)cluster(x,y)) << 32;
+
+         std::ostringstream    si;
+         si << "seg_xicu_" << x << "_" << y;
+         maptabd.add(Segment(si.str(), XICU_BASE + offset, XICU_SIZE, 
+                  IntTab(cluster(x,y),XICU_TGTID), false));
+
+         std::ostringstream    sd;
+         sd << "seg_mcfg_" << x << "_" << y;
+         maptabd.add(Segment(sd.str(), MCFG_BASE + offset, MCFG_SIZE, 
+                  IntTab(cluster(x,y),MEMC_TGTID), false));
+
+         std::ostringstream    sh;
+         sh << "seg_memc_" << x << "_" << y;
+         maptabd.add(Segment(sh.str(), MEMC_BASE + offset, MEMC_SIZE, 
+                  IntTab(cluster(x,y),MEMC_TGTID), true));
+      }
+   }
+
+   // segments for peripherals in cluster(0,0)
+   maptabd.add(Segment("seg_tty0", MTTY_BASE, MTTY_SIZE, 
+               IntTab(cluster(0,0),MTTY_TGTID), false));
+
+   maptabd.add(Segment("seg_ioc0", BDEV_BASE, BDEV_SIZE, 
+               IntTab(cluster(0,0),BDEV_TGTID), false));
+
+   // segments for peripherals in cluster_io (X_SIZE-1,Y_SIZE)
+   sc_uint<vci_address_width> offset;
+   offset = ((sc_uint<vci_address_width>)cluster(X_SIZE-1,Y_SIZE)) << 32;
+
+   maptabd.add(Segment("seg_mtty", MTTY_BASE + offset, MTTY_SIZE, 
+               IntTab(cluster(X_SIZE-1, Y_SIZE),MTTY_TGTID), false));
+
+   maptabd.add(Segment("seg_fbuf", FBUF_BASE + offset, FBUF_SIZE, 
+               IntTab(cluster(X_SIZE-1, Y_SIZE),FBUF_TGTID), false));
+
+   maptabd.add(Segment("seg_bdev", BDEV_BASE + offset, BDEV_SIZE, 
+               IntTab(cluster(X_SIZE-1, Y_SIZE),BDEV_TGTID), false));
+
+   maptabd.add(Segment("seg_mnic", MNIC_BASE + offset, MNIC_SIZE, 
+               IntTab(cluster(X_SIZE-1, Y_SIZE),MNIC_TGTID), false));
+
+   maptabd.add(Segment("seg_cdma", CDMA_BASE + offset, CDMA_SIZE, 
+               IntTab(cluster(X_SIZE-1, Y_SIZE),CDMA_TGTID), false));
+
+   maptabd.add(Segment("seg_iopi", IOPI_BASE + offset, IOPI_SIZE, 
+               IntTab(cluster(X_SIZE-1, Y_SIZE),IOPI_TGTID), false));
+
+   std::cout << maptabd << std::endl;
+
+    /////////////////////////////////////////////////
+    // Ram network mapping table
+    /////////////////////////////////////////////////
+
+    MappingTable maptabx(vci_address_width, 
+                         IntTab(X_WIDTH+Y_WIDTH), 
+                         IntTab(X_WIDTH+Y_WIDTH), 
+                         0x00FF000000ULL);
+
+    for (size_t x = 0; x < X_SIZE; x++)
+    {
+        for (size_t y = 0; y < (Y_SIZE) ; y++)
+        { 
+            sc_uint<vci_address_width> offset;
+            offset = (sc_uint<vci_address_width>)cluster(x,y) 
+                      << (vci_address_width-X_WIDTH-Y_WIDTH);
+
+            std::ostringstream sh;
+            sh << "x_seg_memc_" << x << "_" << y;
+
+            maptabx.add(Segment(sh.str(), MEMC_BASE + offset, 
+                     MEMC_SIZE, IntTab(cluster(x,y)), false));
+        }
+    }
+    std::cout << maptabx << std::endl;
+
+    ////////////////////
+    // Signals
+    ///////////////////
+
+    sc_clock                          signal_clk("clk");
+    sc_signal<bool>                   signal_resetn("resetn");
+
+    // IRQs from external peripherals
+    sc_signal<bool>                   signal_irq_bdev;
+    sc_signal<bool>                   signal_irq_mnic_rx[NB_NIC_CHANNELS];
+    sc_signal<bool>                   signal_irq_mnic_tx[NB_NIC_CHANNELS];
+    sc_signal<bool>                   signal_irq_mtty_rx[NB_TTY_CHANNELS];
+//  sc_signal<bool>                   signal_irq_mtty_tx[NB_TTY_CHANNELS];
+    sc_signal<bool>                   signal_irq_cdma[NB_CMA_CHANNELS];
+    sc_signal<bool>                   signal_irq_false;
+
+   // Horizontal inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>** signal_dspin_h_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_inc", X_SIZE-1, Y_SIZE);
+   DspinSignals<dspin_cmd_width>** signal_dspin_h_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_dec", X_SIZE-1, Y_SIZE);
+
+   DspinSignals<dspin_rsp_width>** signal_dspin_h_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_inc", X_SIZE-1, Y_SIZE);
+   DspinSignals<dspin_rsp_width>** signal_dspin_h_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_dec", X_SIZE-1, Y_SIZE);
+
+   DspinSignals<dspin_cmd_width>** signal_dspin_h_m2p_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_m2p_inc", X_SIZE-1, Y_SIZE);
+   DspinSignals<dspin_cmd_width>** signal_dspin_h_m2p_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_m2p_dec", X_SIZE-1, Y_SIZE);
+
+   DspinSignals<dspin_rsp_width>** signal_dspin_h_p2m_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_p2m_inc", X_SIZE-1, Y_SIZE);
+   DspinSignals<dspin_rsp_width>** signal_dspin_h_p2m_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_p2m_dec", X_SIZE-1, Y_SIZE);
+
+   DspinSignals<dspin_cmd_width>** signal_dspin_h_cla_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cla_inc", X_SIZE-1, Y_SIZE);
+   DspinSignals<dspin_cmd_width>** signal_dspin_h_cla_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cla_dec", X_SIZE-1, Y_SIZE);
+
+   // Vertical inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>** signal_dspin_v_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_inc", X_SIZE, Y_SIZE-1);
+   DspinSignals<dspin_cmd_width>** signal_dspin_v_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_dec", X_SIZE, Y_SIZE-1);
+
+   DspinSignals<dspin_rsp_width>** signal_dspin_v_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_inc", X_SIZE, Y_SIZE-1);
+   DspinSignals<dspin_rsp_width>** signal_dspin_v_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_dec", X_SIZE, Y_SIZE-1);
+
+   DspinSignals<dspin_cmd_width>** signal_dspin_v_m2p_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_m2p_inc", X_SIZE, Y_SIZE-1);
+   DspinSignals<dspin_cmd_width>** signal_dspin_v_m2p_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_m2p_dec", X_SIZE, Y_SIZE-1);
+
+   DspinSignals<dspin_rsp_width>** signal_dspin_v_p2m_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_p2m_inc", X_SIZE, Y_SIZE-1);
+   DspinSignals<dspin_rsp_width>** signal_dspin_v_p2m_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_p2m_dec", X_SIZE, Y_SIZE-1);
+
+   DspinSignals<dspin_cmd_width>** signal_dspin_v_cla_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cla_inc", X_SIZE, Y_SIZE-1);
+   DspinSignals<dspin_cmd_width>** signal_dspin_v_cla_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cla_dec", X_SIZE, Y_SIZE-1);
+
+   // Mesh boundaries DSPIN signals (Most of those signals are not used...)
+   DspinSignals<dspin_cmd_width>*** signal_dspin_bound_cmd_in =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_bound_cmd_in" , X_SIZE, Y_SIZE, 4);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_bound_cmd_out =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_bound_cmd_out", X_SIZE, Y_SIZE, 4);
+
+   DspinSignals<dspin_rsp_width>*** signal_dspin_bound_rsp_in =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_bound_rsp_in" , X_SIZE, Y_SIZE, 4);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_bound_rsp_out =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_bound_rsp_out", X_SIZE, Y_SIZE, 4);
+
+   DspinSignals<dspin_cmd_width>*** signal_dspin_bound_m2p_in =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_bound_m2p_in" , X_SIZE, Y_SIZE, 4);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_bound_m2p_out =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_bound_m2p_out", X_SIZE, Y_SIZE, 4);
+
+   DspinSignals<dspin_rsp_width>*** signal_dspin_bound_p2m_in =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_bound_p2m_in" , X_SIZE, Y_SIZE, 4);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_bound_p2m_out =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_bound_p2m_out", X_SIZE, Y_SIZE, 4);
+
+   DspinSignals<dspin_cmd_width>*** signal_dspin_bound_cla_in =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_bound_cla_in" , X_SIZE, Y_SIZE, 4);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_bound_cla_out =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_bound_cla_out", X_SIZE, Y_SIZE, 4);
+
+   // VCI signals for iobus and peripherals
+   VciSignals<vci_param_int>    signal_vci_ini_bdev("signal_vci_ini_bdev");
+   VciSignals<vci_param_int>    signal_vci_ini_cdma("signal_vci_ini_cdma");
+   VciSignals<vci_param_int>    signal_vci_ini_iopi("signal_vci_ini_iopi");
+
+   VciSignals<vci_param_int>*   signal_vci_ini_proc = 
+       alloc_elems<VciSignals<vci_param_int> >("signal_vci_ini_proc", NB_PROCS_MAX );
+
+   VciSignals<vci_param_int>    signal_vci_tgt_memc("signal_vci_tgt_memc");
+   VciSignals<vci_param_int>    signal_vci_tgt_xicu("signal_vci_tgt_xicu");
+   VciSignals<vci_param_int>    signal_vci_tgt_bdev("signal_vci_tgt_bdev");
+   VciSignals<vci_param_int>    signal_vci_tgt_mtty("signal_vci_tgt_mtty");
+   VciSignals<vci_param_int>    signal_vci_tgt_fbuf("signal_vci_tgt_fbuf");
+   VciSignals<vci_param_int>    signal_vci_tgt_mnic("signal_vci_tgt_mnic");
+   VciSignals<vci_param_int>    signal_vci_tgt_cdma("signal_vci_tgt_cdma");
+   VciSignals<vci_param_int>    signal_vci_tgt_iopi("signal_vci_tgt_iopi");
+
+   VciSignals<vci_param_int>    signal_vci_cmd_to_noc("signal_vci_cmd_to_noc");
+   VciSignals<vci_param_int>    signal_vci_cmd_from_noc("signal_vci_cmd_from_noc");
+   
+   ////////////////////////////
+   //      Loader    
+   ////////////////////////////
+
+#if USE_IOC_RDK
+   soclib::common::Loader loader( soft_name, ramdisk_name );
+#else
+   soclib::common::Loader loader( soft_name );
+#endif
+   loader.memory_default(0xAA);
+
+   ///////////////////////////
+   //  processor iss
+   ///////////////////////////
+
+   typedef soclib::common::GdbServer<soclib::common::Mips32ElIss> proc_iss;
+   proc_iss::set_loader( loader );
+
+   //////////////////////////////////////////////////////////////
+   // mesh construction: only (X_SIZE) * (Y_SIZE) clusters
+   //////////////////////////////////////////////////////////////
+
+   TsarLetiCluster<dspin_cmd_width,
+                   dspin_rsp_width,
+                   vci_param_int,
+                   vci_param_ext>*          clusters[X_SIZE][Y_SIZE];
+
+#if USE_OPENMP
+#pragma omp parallel
+    {
+#pragma omp for
+#endif
+        for (size_t i = 0; i  < (X_SIZE * (Y_SIZE)); i++)
+        {
+            size_t x = i / (Y_SIZE);
+            size_t y = i % (Y_SIZE);
+
+#if USE_OPENMP
+#pragma omp critical
+            {
+#endif
+            std::cout << std::endl;
+            std::cout << "Cluster_" << std::dec << x << "_" << y 
+                      << " with cluster_xy = " << std::hex << cluster(x,y) << std::endl;
+            std::cout << std::endl;
+
+            std::ostringstream cluster_name;
+            cluster_name <<  "cluster_" << std::dec << x << "_" << y;
+
+            clusters[x][y] = new TsarLetiCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>
+            (
+                cluster_name.str().c_str(),
+                NB_PROCS_MAX,
+                x,
+                y,
+                cluster(x,y),
+                maptabd,
+                maptabx,
+                RESET_ADDRESS,
+                X_WIDTH,
+                Y_WIDTH,
+                vci_srcid_width - X_WIDTH - Y_WIDTH,   // l_id width,
+                MEMC_TGTID,
+                XICU_TGTID,
+                MTTY_TGTID,
+                BDEV_TGTID,
+                disk_name,
+                MEMC_WAYS,
+                MEMC_SETS,
+                L1_IWAYS,
+                L1_ISETS,
+                L1_DWAYS,
+                L1_DSETS,
+                XRAM_LATENCY,
+                loader,
+                frozen_cycles,
+                trace_from,
+                trace_proc_ok, 
+                trace_proc_id,
+                trace_memc_ok, 
+                trace_memc_id
+            );
+
+#if USE_OPENMP
+            } // end critical
+#endif
+        } // end for
+#if USE_OPENMP
+    }
+#endif
+
+    //////////////////////////////////////////////////////////////////
+    // IO bus and external peripherals in cluster[X_SIZE-1,Y_SIZE]
+    // - 6 local targets    : FBF, TTY, CMA, NIC, PIC, IOC
+    // - 3 local initiators : IOC, CMA, PIC
+    // There is no PROC, no MEMC and no XICU in this cluster,
+    // but the crossbar has (NB_PROCS_MAX + 3) intiators and
+    // 8 targets, in order to use the same SRCID and TGTID space
+    // (same mapping table for the internal components, 
+    //  and for the external peripherals) 
+    //////////////////////////////////////////////////////////////////
+
+    std::cout << std::endl;
+    std::cout << " Building IO cluster (external peripherals)" << std::endl;
+    std::cout << std::endl;
+  
+    size_t cluster_io = cluster(X_SIZE-1, Y_SIZE);
+
+    //////////// vci_local_crossbar  
+    VciLocalCrossbar<vci_param_int>*
+    iobus = new VciLocalCrossbar<vci_param_int>(
+                "iobus",
+                maptabd,                      // mapping table
+                cluster_io,                   // cluster_xy
+                NB_PROCS_MAX + 3,             // number of local initiators
+                8,                            // number of local targets
+                BDEV_TGTID );                 // default target index
+
+    //////////// vci_framebuffer                        
+    VciFrameBuffer<vci_param_int>*
+    fbuf = new VciFrameBuffer<vci_param_int>(
+                "fbuf",
+                IntTab(cluster_io, FBUF_TGTID),
+                maptabd,
+                FBUF_X_SIZE, FBUF_Y_SIZE );
+
+    ////////////  vci_block_device               
+    VciBlockDeviceTsar<vci_param_int>*
+    bdev = new VciBlockDeviceTsar<vci_param_int>(
+                "bdev",
+                maptabd,
+                IntTab(cluster_io, BDEV_SRCID),
+                IntTab(cluster_io, BDEV_TGTID),
+                disk_name,
+                512,                          // block size
+                64 );                         // burst size
+
+    //////////// vci_multi_nic               
+    VciMultiNic<vci_param_int>*
+    mnic = new VciMultiNic<vci_param_int>(
+             "mnic",
+                IntTab(cluster_io, MNIC_TGTID),
+                maptabd,
+                NB_NIC_CHANNELS,
+                NIC_MAC4,
+                NIC_MAC2,
+                NIC_RX_NAME,
+                NIC_TX_NAME );
+
+    ///////////// vci_chbuf_dma                   
+    VciChbufDma<vci_param_int>*
+    cdma = new VciChbufDma<vci_param_int>(
+                "cdma",
+                maptabd,
+                IntTab(cluster_io, CDMA_SRCID),
+                IntTab(cluster_io, CDMA_TGTID),
+                64,                          // burst size
+                NB_CMA_CHANNELS ); 
+
+    ////////////// vci_multi_tty
+    std::vector<std::string> vect_names;
+    for (size_t id = 0; id < NB_TTY_CHANNELS; id++)
+    {
+        std::ostringstream term_name;
+        term_name <<  "ext_" << id;
+        vect_names.push_back(term_name.str().c_str());
+    }
+
+    VciMultiTty<vci_param_int>* 
+    mtty = new VciMultiTty<vci_param_int>(
+                "mtty",
+                IntTab(cluster_io, MTTY_TGTID),
+                maptabd,
+                vect_names );
+
+    ///////////// vci_iopic
+    VciIopic<vci_param_int>*
+    iopic = new VciIopic<vci_param_int>(
+                "iopic",
+                maptabd,
+                IntTab(cluster_io, IOPI_SRCID),
+                IntTab(cluster_io, IOPI_TGTID),
+                32,
+                5000 );
+
+    ////////////// vci_dspin wrappers 
+    VciDspinTargetWrapper<vci_param_int, dspin_cmd_width, dspin_rsp_width>*
+    wt_iobus = new VciDspinTargetWrapper<vci_param_int, dspin_cmd_width, dspin_rsp_width>(
+                "wt_bdev",
+                vci_srcid_width );
+
+    VciDspinInitiatorWrapper<vci_param_int, dspin_cmd_width, dspin_rsp_width>*
+    wi_iobus = new VciDspinInitiatorWrapper<vci_param_int, dspin_cmd_width, dspin_rsp_width>(
+                "wi_bdev",
+                vci_srcid_width );
+
+    ///////////////////////////////////////////////////////////////
+    //     Net-list 
+    ///////////////////////////////////////////////////////////////
+
+    // iobus 
+    iobus->p_clk                       (signal_clk);  
+    iobus->p_resetn                    (signal_resetn);
+
+    iobus->p_target_to_up              (signal_vci_cmd_from_noc);
+    iobus->p_initiator_to_up           (signal_vci_cmd_to_noc);
+
+    iobus->p_to_target[MEMC_TGTID]     (signal_vci_tgt_memc);
+    iobus->p_to_target[XICU_TGTID]     (signal_vci_tgt_xicu);
+    iobus->p_to_target[MTTY_TGTID]     (signal_vci_tgt_mtty);
+    iobus->p_to_target[FBUF_TGTID]     (signal_vci_tgt_fbuf);
+    iobus->p_to_target[MNIC_TGTID]     (signal_vci_tgt_mnic);
+    iobus->p_to_target[BDEV_TGTID]     (signal_vci_tgt_bdev);
+    iobus->p_to_target[CDMA_TGTID]     (signal_vci_tgt_cdma);
+    iobus->p_to_target[IOPI_TGTID]     (signal_vci_tgt_iopi);
+
+    for( size_t p=0 ; p<NB_PROCS_MAX ; p++ )
+    {
+        iobus->p_to_initiator[p]       (signal_vci_ini_proc[p]);
+    }
+    iobus->p_to_initiator[BDEV_SRCID]  (signal_vci_ini_bdev);
+    iobus->p_to_initiator[CDMA_SRCID]  (signal_vci_ini_cdma);
+    iobus->p_to_initiator[IOPI_SRCID]  (signal_vci_ini_iopi);
+
+    std::cout << "  - IOBUS connected" << std::endl;
+
+    // block_device
+    bdev->p_clk                        (signal_clk);
+    bdev->p_resetn                     (signal_resetn);
+    bdev->p_vci_target                 (signal_vci_tgt_bdev);
+    bdev->p_vci_initiator              (signal_vci_ini_bdev);
+    bdev->p_irq                        (signal_irq_bdev);
+
+    std::cout << "  - BDEV connected" << std::endl;
+
+    // frame_buffer
+    fbuf->p_clk                        (signal_clk);
+    fbuf->p_resetn                     (signal_resetn);
+    fbuf->p_vci                        (signal_vci_tgt_fbuf);
+
+    std::cout << "  - FBUF connected" << std::endl;
+
+    // multi_nic
+    mnic->p_clk                        (signal_clk);
+    mnic->p_resetn                     (signal_resetn);
+    mnic->p_vci                        (signal_vci_tgt_mnic);
+    for ( size_t i=0 ; i<NB_NIC_CHANNELS ; i++ )
+    {
+         mnic->p_rx_irq[i]             (signal_irq_mnic_rx[i]);
+         mnic->p_tx_irq[i]             (signal_irq_mnic_tx[i]);
+    }
+
+    std::cout << "  - MNIC connected" << std::endl;
+
+    // chbuf_dma
+    cdma->p_clk                        (signal_clk);
+    cdma->p_resetn                     (signal_resetn);
+    cdma->p_vci_target                 (signal_vci_tgt_cdma);
+    cdma->p_vci_initiator              (signal_vci_ini_cdma);
+    for ( size_t i=0 ; i<NB_CMA_CHANNELS ; i++)
+    {
+        cdma->p_irq[i]                 (signal_irq_cdma[i]);
+    }
+
+    std::cout << "  - CDMA connected" << std::endl;
+
+    // multi_tty
+    mtty->p_clk                        (signal_clk);
+    mtty->p_resetn                     (signal_resetn);
+    mtty->p_vci                        (signal_vci_tgt_mtty);
+    for ( size_t i=0 ; i<NB_TTY_CHANNELS ; i++ )
+    {
+        mtty->p_irq[i]              	(signal_irq_mtty_rx[i]);
+    }
+
+    std::cout << "  - MTTY connected" << std::endl;
+
+    // iopic
+    // NB_NIC_CHANNELS <= 2
+    // NB_CMA_CHANNELS <= 4
+    // NB_TTY_CHANNELS <= 8
+    iopic->p_clk                       (signal_clk);
+    iopic->p_resetn                    (signal_resetn);
+    iopic->p_vci_target                (signal_vci_tgt_iopi);
+    iopic->p_vci_initiator             (signal_vci_ini_iopi);
+    for ( size_t i=0 ; i<32 ; i++)
+    {
+       if     (i < NB_NIC_CHANNELS)    iopic->p_hwi[i] (signal_irq_mnic_rx[i]);
+       else if(i < 2 )                 iopic->p_hwi[i] (signal_irq_false);
+       else if(i < 2+NB_NIC_CHANNELS)  iopic->p_hwi[i] (signal_irq_mnic_tx[i-2]);
+       else if(i < 4 )                 iopic->p_hwi[i] (signal_irq_false);
+       else if(i < 4+NB_CMA_CHANNELS)  iopic->p_hwi[i] (signal_irq_cdma[i-4]);
+       else if(i < 8)                  iopic->p_hwi[i] (signal_irq_false);
+       else if(i == 8)                 iopic->p_hwi[i] (signal_irq_bdev);
+       else if(i < 16)                 iopic->p_hwi[i] (signal_irq_false);
+       else if(i < 16+NB_TTY_CHANNELS) iopic->p_hwi[i] (signal_irq_mtty_rx[i-16]);
+       else if(i < 24)                 iopic->p_hwi[i] (signal_irq_false);
+       else if(i < 24+NB_TTY_CHANNELS) iopic->p_hwi[i] (signal_irq_false);
+//     else if(i < 24+NB_TTY_CHANNELS) iopic->p_hwi[i] (signal_irq_mtty_tx[i-24]);
+       else                            iopic->p_hwi[i] (signal_irq_false);
+    }
+
+    std::cout << "  - IOPIC connected" << std::endl;
+
+    // vci/dspin wrappers
+    wi_iobus->p_clk                    (signal_clk);
+    wi_iobus->p_resetn                 (signal_resetn);
+    wi_iobus->p_vci                    (signal_vci_cmd_to_noc);
+    wi_iobus->p_dspin_cmd              (signal_dspin_bound_cmd_in[X_SIZE-1][Y_SIZE-1][NORTH]);
+    wi_iobus->p_dspin_rsp              (signal_dspin_bound_rsp_out[X_SIZE-1][Y_SIZE-1][NORTH]);
+
+    // vci/dspin wrappers
+    wt_iobus->p_clk                    (signal_clk);
+    wt_iobus->p_resetn                 (signal_resetn);
+    wt_iobus->p_vci                    (signal_vci_cmd_from_noc);
+    wt_iobus->p_dspin_cmd              (signal_dspin_bound_cmd_out[X_SIZE-1][Y_SIZE-1][NORTH]);
+    wt_iobus->p_dspin_rsp              (signal_dspin_bound_rsp_in[X_SIZE-1][Y_SIZE-1][NORTH]);
+
+    // Clock & RESET for clusters
+    for (size_t x = 0; x < (X_SIZE); x++)
+    {
+        for (size_t y = 0; y < (Y_SIZE); y++)
+        {
+            clusters[x][y]->p_clk                    (signal_clk);
+            clusters[x][y]->p_resetn                 (signal_resetn);
+        }
+    }
+
+    // Inter Clusters horizontal connections
+    if (X_SIZE > 1)
+    {
+        for (size_t x = 0; x < (X_SIZE-1); x++)
+        {
+            for (size_t y = 0; y < (Y_SIZE); y++)
+            {
+                clusters[x][y]->p_cmd_out[EAST]      (signal_dspin_h_cmd_inc[x][y]);
+                clusters[x+1][y]->p_cmd_in[WEST]     (signal_dspin_h_cmd_inc[x][y]);
+                clusters[x][y]->p_cmd_in[EAST]       (signal_dspin_h_cmd_dec[x][y]);
+                clusters[x+1][y]->p_cmd_out[WEST]    (signal_dspin_h_cmd_dec[x][y]);
+
+                clusters[x][y]->p_rsp_out[EAST]      (signal_dspin_h_rsp_inc[x][y]);
+                clusters[x+1][y]->p_rsp_in[WEST]     (signal_dspin_h_rsp_inc[x][y]);
+                clusters[x][y]->p_rsp_in[EAST]       (signal_dspin_h_rsp_dec[x][y]);
+                clusters[x+1][y]->p_rsp_out[WEST]    (signal_dspin_h_rsp_dec[x][y]);
+
+                clusters[x][y]->p_m2p_out[EAST]      (signal_dspin_h_m2p_inc[x][y]);
+                clusters[x+1][y]->p_m2p_in[WEST]     (signal_dspin_h_m2p_inc[x][y]);
+                clusters[x][y]->p_m2p_in[EAST]       (signal_dspin_h_m2p_dec[x][y]);
+                clusters[x+1][y]->p_m2p_out[WEST]    (signal_dspin_h_m2p_dec[x][y]);
+
+                clusters[x][y]->p_p2m_out[EAST]      (signal_dspin_h_p2m_inc[x][y]);
+                clusters[x+1][y]->p_p2m_in[WEST]     (signal_dspin_h_p2m_inc[x][y]);
+                clusters[x][y]->p_p2m_in[EAST]       (signal_dspin_h_p2m_dec[x][y]);
+                clusters[x+1][y]->p_p2m_out[WEST]    (signal_dspin_h_p2m_dec[x][y]);
+
+                clusters[x][y]->p_cla_out[EAST]      (signal_dspin_h_cla_inc[x][y]);
+                clusters[x+1][y]->p_cla_in[WEST]     (signal_dspin_h_cla_inc[x][y]);
+                clusters[x][y]->p_cla_in[EAST]       (signal_dspin_h_cla_dec[x][y]);
+                clusters[x+1][y]->p_cla_out[WEST]    (signal_dspin_h_cla_dec[x][y]);
+            }
+        }
+    }
+    std::cout << std::endl << "Horizontal connections done" << std::endl;   
+
+    // Inter Clusters vertical connections
+    if (Y_SIZE > 1) 
+    {
+        for (size_t y = 0; y < (Y_SIZE-1); y++)
+        {
+            for (size_t x = 0; x < X_SIZE; x++)
+            {
+                clusters[x][y]->p_cmd_out[NORTH]     (signal_dspin_v_cmd_inc[x][y]);
+                clusters[x][y+1]->p_cmd_in[SOUTH]    (signal_dspin_v_cmd_inc[x][y]);
+                clusters[x][y]->p_cmd_in[NORTH]      (signal_dspin_v_cmd_dec[x][y]);
+                clusters[x][y+1]->p_cmd_out[SOUTH]   (signal_dspin_v_cmd_dec[x][y]);
+
+                clusters[x][y]->p_rsp_out[NORTH]     (signal_dspin_v_rsp_inc[x][y]);
+                clusters[x][y+1]->p_rsp_in[SOUTH]    (signal_dspin_v_rsp_inc[x][y]);
+                clusters[x][y]->p_rsp_in[NORTH]      (signal_dspin_v_rsp_dec[x][y]);
+                clusters[x][y+1]->p_rsp_out[SOUTH]   (signal_dspin_v_rsp_dec[x][y]);
+
+                clusters[x][y]->p_m2p_out[NORTH]     (signal_dspin_v_m2p_inc[x][y]);
+                clusters[x][y+1]->p_m2p_in[SOUTH]    (signal_dspin_v_m2p_inc[x][y]);
+                clusters[x][y]->p_m2p_in[NORTH]      (signal_dspin_v_m2p_dec[x][y]);
+                clusters[x][y+1]->p_m2p_out[SOUTH]   (signal_dspin_v_m2p_dec[x][y]);
+
+                clusters[x][y]->p_p2m_out[NORTH]     (signal_dspin_v_p2m_inc[x][y]);
+                clusters[x][y+1]->p_p2m_in[SOUTH]    (signal_dspin_v_p2m_inc[x][y]);
+                clusters[x][y]->p_p2m_in[NORTH]      (signal_dspin_v_p2m_dec[x][y]);
+                clusters[x][y+1]->p_p2m_out[SOUTH]   (signal_dspin_v_p2m_dec[x][y]);
+
+                clusters[x][y]->p_cla_out[NORTH]     (signal_dspin_v_cla_inc[x][y]);
+                clusters[x][y+1]->p_cla_in[SOUTH]    (signal_dspin_v_cla_inc[x][y]);
+                clusters[x][y]->p_cla_in[NORTH]      (signal_dspin_v_cla_dec[x][y]);
+                clusters[x][y+1]->p_cla_out[SOUTH]   (signal_dspin_v_cla_dec[x][y]);
+            }
+        }
+    }
+    std::cout << std::endl << "Vertical connections done" << std::endl;
+
+    // East & West boundary cluster connections
+    for (size_t y = 0; y < (Y_SIZE); y++)
+    {
+        clusters[0][y]->p_cmd_in[WEST]           (signal_dspin_bound_cmd_in[0][y][WEST]);
+        clusters[0][y]->p_cmd_out[WEST]          (signal_dspin_bound_cmd_out[0][y][WEST]);
+        clusters[X_SIZE-1][y]->p_cmd_in[EAST]    (signal_dspin_bound_cmd_in[X_SIZE-1][y][EAST]);
+        clusters[X_SIZE-1][y]->p_cmd_out[EAST]   (signal_dspin_bound_cmd_out[X_SIZE-1][y][EAST]);
+
+        clusters[0][y]->p_rsp_in[WEST]           (signal_dspin_bound_rsp_in[0][y][WEST]);
+        clusters[0][y]->p_rsp_out[WEST]          (signal_dspin_bound_rsp_out[0][y][WEST]);
+        clusters[X_SIZE-1][y]->p_rsp_in[EAST]    (signal_dspin_bound_rsp_in[X_SIZE-1][y][EAST]);
+        clusters[X_SIZE-1][y]->p_rsp_out[EAST]   (signal_dspin_bound_rsp_out[X_SIZE-1][y][EAST]);
+
+        clusters[0][y]->p_m2p_in[WEST]           (signal_dspin_bound_m2p_in[0][y][WEST]);
+        clusters[0][y]->p_m2p_out[WEST]          (signal_dspin_bound_m2p_out[0][y][WEST]);
+        clusters[X_SIZE-1][y]->p_m2p_in[EAST]    (signal_dspin_bound_m2p_in[X_SIZE-1][y][EAST]);
+        clusters[X_SIZE-1][y]->p_m2p_out[EAST]   (signal_dspin_bound_m2p_out[X_SIZE-1][y][EAST]);
+
+        clusters[0][y]->p_p2m_in[WEST]           (signal_dspin_bound_p2m_in[0][y][WEST]);
+        clusters[0][y]->p_p2m_out[WEST]          (signal_dspin_bound_p2m_out[0][y][WEST]);
+        clusters[X_SIZE-1][y]->p_p2m_in[EAST]    (signal_dspin_bound_p2m_in[X_SIZE-1][y][EAST]);
+        clusters[X_SIZE-1][y]->p_p2m_out[EAST]   (signal_dspin_bound_p2m_out[X_SIZE-1][y][EAST]);
+
+        clusters[0][y]->p_cla_in[WEST]           (signal_dspin_bound_cla_in[0][y][WEST]);
+        clusters[0][y]->p_cla_out[WEST]          (signal_dspin_bound_cla_out[0][y][WEST]);
+        clusters[X_SIZE-1][y]->p_cla_in[EAST]    (signal_dspin_bound_cla_in[X_SIZE-1][y][EAST]);
+        clusters[X_SIZE-1][y]->p_cla_out[EAST]   (signal_dspin_bound_cla_out[X_SIZE-1][y][EAST]);
+    }
+
+    std::cout << std::endl << "West & East boundaries connections done" << std::endl;
+
+    // North & South boundary clusters connections
+    for (size_t x = 0; x < X_SIZE; x++)
+    {
+        clusters[x][0]->p_cmd_in[SOUTH]          (signal_dspin_bound_cmd_in[x][0][SOUTH]);
+        clusters[x][0]->p_cmd_out[SOUTH]         (signal_dspin_bound_cmd_out[x][0][SOUTH]);
+        clusters[x][Y_SIZE-1]->p_cmd_in[NORTH]   (signal_dspin_bound_cmd_in[x][Y_SIZE-1][NORTH]);
+        clusters[x][Y_SIZE-1]->p_cmd_out[NORTH]  (signal_dspin_bound_cmd_out[x][Y_SIZE-1][NORTH]);
+
+        clusters[x][0]->p_rsp_in[SOUTH]          (signal_dspin_bound_rsp_in[x][0][SOUTH]);
+        clusters[x][0]->p_rsp_out[SOUTH]         (signal_dspin_bound_rsp_out[x][0][SOUTH]);
+        clusters[x][Y_SIZE-1]->p_rsp_in[NORTH]   (signal_dspin_bound_rsp_in[x][Y_SIZE-1][NORTH]);
+        clusters[x][Y_SIZE-1]->p_rsp_out[NORTH]  (signal_dspin_bound_rsp_out[x][Y_SIZE-1][NORTH]);
+
+        clusters[x][0]->p_m2p_in[SOUTH]          (signal_dspin_bound_m2p_in[x][0][SOUTH]);
+        clusters[x][0]->p_m2p_out[SOUTH]         (signal_dspin_bound_m2p_out[x][0][SOUTH]);
+        clusters[x][Y_SIZE-1]->p_m2p_in[NORTH]   (signal_dspin_bound_m2p_in[x][Y_SIZE-1][NORTH]);
+        clusters[x][Y_SIZE-1]->p_m2p_out[NORTH]  (signal_dspin_bound_m2p_out[x][Y_SIZE-1][NORTH]);
+
+        clusters[x][0]->p_p2m_in[SOUTH]          (signal_dspin_bound_p2m_in[x][0][SOUTH]);
+        clusters[x][0]->p_p2m_out[SOUTH]         (signal_dspin_bound_p2m_out[x][0][SOUTH]);
+        clusters[x][Y_SIZE-1]->p_p2m_in[NORTH]   (signal_dspin_bound_p2m_in[x][Y_SIZE-1][NORTH]);
+        clusters[x][Y_SIZE-1]->p_p2m_out[NORTH]  (signal_dspin_bound_p2m_out[x][Y_SIZE-1][NORTH]);
+
+        clusters[x][0]->p_cla_in[SOUTH]          (signal_dspin_bound_cla_in[x][0][SOUTH]);
+        clusters[x][0]->p_cla_out[SOUTH]         (signal_dspin_bound_cla_out[x][0][SOUTH]);
+        clusters[x][Y_SIZE-1]->p_cla_in[NORTH]   (signal_dspin_bound_cla_in[x][Y_SIZE-1][NORTH]);
+        clusters[x][Y_SIZE-1]->p_cla_out[NORTH]  (signal_dspin_bound_cla_out[x][Y_SIZE-1][NORTH]);
+    }
+
+    std::cout << std::endl << "North & South boundaries connections done" << std::endl;
+
+    std::cout << std::endl;
+
+    ////////////////////////////////////////////////////////
+    //   Simulation
+    ///////////////////////////////////////////////////////
+
+    sc_start(sc_core::sc_time(0, SC_NS));
+    signal_resetn    = false;
+    signal_irq_false = false;
+
+    // set network boundaries signals default values
+    // for all boundary clusters but the IO cluster
+    for (size_t x = 0; x < X_SIZE ; x++)
+    {
+        for (size_t y = 0; y < Y_SIZE ; y++)
+        {
+            for (size_t face = 0; face < 4; face++)
+            {
+                if ( (x != X_SIZE-1) or (y != Y_SIZE-1) or (face != NORTH) )
+                {
+                    signal_dspin_bound_cmd_in [x][y][face].write = false;
+                    signal_dspin_bound_cmd_in [x][y][face].read  = true;
+                    signal_dspin_bound_cmd_out[x][y][face].write = false;
+                    signal_dspin_bound_cmd_out[x][y][face].read  = true;
+
+                    signal_dspin_bound_rsp_in [x][y][face].write = false;
+                    signal_dspin_bound_rsp_in [x][y][face].read  = true;
+                    signal_dspin_bound_rsp_out[x][y][face].write = false;
+                    signal_dspin_bound_rsp_out[x][y][face].read  = true;
+                }
+
+                signal_dspin_bound_m2p_in [x][y][face].write = false;
+                signal_dspin_bound_m2p_in [x][y][face].read  = true;
+                signal_dspin_bound_m2p_out[x][y][face].write = false;
+                signal_dspin_bound_m2p_out[x][y][face].read  = true;
+
+                signal_dspin_bound_p2m_in [x][y][face].write = false;
+                signal_dspin_bound_p2m_in [x][y][face].read  = true;
+                signal_dspin_bound_p2m_out[x][y][face].write = false;
+                signal_dspin_bound_p2m_out[x][y][face].read  = true;
+
+                signal_dspin_bound_cla_in [x][y][face].write = false;
+                signal_dspin_bound_cla_in [x][y][face].read  = true;
+                signal_dspin_bound_cla_out[x][y][face].write = false;
+                signal_dspin_bound_cla_out[x][y][face].read  = true;
+            }
+        }
+    }
+
+    // set default values for VCI signals connected to unused ports on iobus 
+    signal_vci_tgt_memc.rspval = false;
+    signal_vci_tgt_xicu.rspval = false;
+    for ( size_t p = 0 ; p < NB_PROCS_MAX ; p++ ) signal_vci_ini_proc[p].cmdval = false;
+
+    sc_start(sc_core::sc_time(1, SC_NS));
+    signal_resetn = true;
+
+    if (gettimeofday(&t1, NULL) != 0) 
+    {
+        perror("gettimeofday");
+        return EXIT_FAILURE;
+    }
+
+    // variable used for IRQ trace
+    bool prev_irq_bdev = false;
+    bool prev_irq_mtty_rx[8];
+    bool prev_irq_proc[16][16][4];
+
+    for( size_t x = 0 ; x<8  ; x++ ) prev_irq_mtty_rx[x] = false;
+
+    for( size_t x = 0 ; x<16 ; x++ )
+    for( size_t y = 0 ; y<16 ; y++ )
+    for( size_t i = 0 ; i<4  ; i++ ) prev_irq_proc[x][y][i] = false;
+
+    for (uint64_t n = 1; n < ncycles && !stop_called; n++)
+    {
+        // Monitor a specific address for L1 & L2 caches
+        // clusters[0][0]->proc[0]->cache_monitor(0x110002C078ULL);
+        // clusters[1][1]->memc->cache_monitor(0x110002c078ULL);
+
+        // stats display
+        if( (n % 5000000) == 0)
+        {
+
+            if (gettimeofday(&t2, NULL) != 0) 
+            {
+                perror("gettimeofday");
+                return EXIT_FAILURE;
+            }
+
+            ms1 = (uint64_t) t1.tv_sec * 1000ULL + (uint64_t) t1.tv_usec / 1000;
+            ms2 = (uint64_t) t2.tv_sec * 1000ULL + (uint64_t) t2.tv_usec / 1000;
+            std::cerr << "platform clock frequency " 
+                      << (double) 5000000 / (double) (ms2 - ms1) << "Khz" << std::endl;
+
+            if (gettimeofday(&t1, NULL) != 0) 
+            {
+                perror("gettimeofday");
+                return EXIT_FAILURE;
+            }
+        }
+
+        // trace display
+        if ( trace_ok and (n > trace_from) )
+        {
+            std::cout << "****************** cycle " << std::dec << n ;
+            std::cout << " ************************************************" << std::endl;
+
+            size_t l = 0;
+            size_t x = 0;
+            size_t y = 0;
+
+            if ( trace_proc_ok )
+            {
+                l = trace_proc_id % NB_PROCS_MAX ;
+                x = (trace_proc_id / NB_PROCS_MAX) >> Y_WIDTH ;
+                y = (trace_proc_id / NB_PROCS_MAX) & ((1<<Y_WIDTH) - 1);
+
+                std::ostringstream proc_signame;
+                proc_signame << "[SIG]PROC_" << x << "_" << y << "_" << l ;
+                clusters[x][y]->proc[l]->print_trace(1);
+                clusters[x][y]->signal_vci_ini_proc[l].print_trace(proc_signame.str());
+
+                std::ostringstream xicu_signame;
+                xicu_signame << "[SIG]XICU_" << x << "_" << y ;
+                clusters[x][y]->xicu->print_trace(0);
+                clusters[x][y]->signal_vci_tgt_xicu.print_trace(xicu_signame.str());
+            }
+
+            if ( trace_memc_ok )
+            {
+                x = trace_memc_id >> Y_WIDTH;
+                y = trace_memc_id & ((1<<Y_WIDTH) - 1);
+
+                std::ostringstream smemc;
+                smemc << "[SIG]MEMC_" << x << "_" << y;
+                std::ostringstream sxram;
+                sxram << "[SIG]XRAM_" << x << "_" << y;
+
+                clusters[x][y]->memc->print_trace();
+                clusters[x][y]->signal_vci_tgt_memc.print_trace(smemc.str());
+                clusters[x][y]->signal_vci_xram.print_trace(sxram.str());
+            }   
+
+            // trace coherence signals
+            // clusters[0][0]->signal_dspin_m2p_proc[0].print_trace("[CC_M2P_0_0]");
+            // clusters[0][1]->signal_dspin_m2p_proc[0].print_trace("[CC_M2P_0_1]");
+            // clusters[1][0]->signal_dspin_m2p_proc[0].print_trace("[CC_M2P_1_0]");
+            // clusters[1][1]->signal_dspin_m2p_proc[0].print_trace("[CC_M2P_1_1]");
+
+            // clusters[0][0]->signal_dspin_p2m_proc[0].print_trace("[CC_P2M_0_0]");
+            // clusters[0][1]->signal_dspin_p2m_proc[0].print_trace("[CC_P2M_0_1]");
+            // clusters[1][0]->signal_dspin_p2m_proc[0].print_trace("[CC_P2M_1_0]");
+            // clusters[1][1]->signal_dspin_p2m_proc[0].print_trace("[CC_P2M_1_1]");
+
+            // trace xbar(s) m2p
+            // clusters[0][0]->xbar_m2p->print_trace();
+            // clusters[1][0]->xbar_m2p->print_trace();
+            // clusters[0][1]->xbar_m2p->print_trace();
+            // clusters[1][1]->xbar_m2p->print_trace();
+        
+            // trace router(s) m2p
+            // clusters[0][0]->router_m2p->print_trace();
+            // clusters[1][0]->router_m2p->print_trace();
+            // clusters[0][1]->router_m2p->print_trace();
+            // clusters[1][1]->router_m2p->print_trace();
+        
+            // trace external ioc
+            bdev->print_trace();
+            signal_vci_tgt_bdev.print_trace("[SIG]BDEV_TGT");
+            signal_vci_ini_bdev.print_trace("[SIG]BDEV_INI");
+
+            // trace external iopic
+            iopic->print_trace();
+            signal_vci_tgt_iopi.print_trace("[SIG]IOPI_TGT");
+            signal_vci_ini_iopi.print_trace("[SIG]IOPI_INI");
+
+            // trace internal tty
+            // clusters[0][0]->mtty->print_trace();
+            // clusters[0][0]->signal_vci_tgt_mtty.print_trace("[SIG]MTTY");
+
+        }  // end trace
+
+        if (0)
+        {
+            // trace BDV interrupts events
+            if ( signal_irq_bdev.read() != prev_irq_bdev ) 
+            {
+                prev_irq_bdev = signal_irq_bdev.read();
+                std::cout << std::dec << "@@@ IRQ_BDEV = " << signal_irq_bdev.read()
+                          << " at cycle " << n << std::endl;
+            }
+        
+            // trace TTY interrupts events
+            for ( size_t x = 0 ; x < 8 ; x++ )
+            {
+                if ( signal_irq_mtty_rx[x].read() != prev_irq_mtty_rx[x] ) 
+                {
+                    prev_irq_mtty_rx[x] = signal_irq_mtty_rx[x].read();
+                    std::cout << std::dec << "@@@ IRQ_MTTY["<<x<<"] = " 
+                              << signal_irq_mtty_rx[x].read()
+                              << " at cycle " << n << std::endl;
+                }
+            }
+
+            // trace processor interrupts events
+            for ( size_t x = 0 ; x < X_SIZE ; x++ )
+            for ( size_t y = 0 ; y < Y_SIZE ; y++ )
+            for ( size_t i = 0 ; i < NB_PROCS_MAX ; i++ )
+            {
+                if ( clusters[x][y]->signal_proc_irq[i] != prev_irq_proc[x][y][i] )
+                { 
+                    prev_irq_proc[x][y][i] = clusters[x][y]->signal_proc_irq[i];
+                    std::cout << std::dec << "@@@ IRQ_PROC["<<x<<","<<y<<","<<i<<"] = "
+                              << clusters[x][y]->signal_proc_irq[i]
+                              << " at cycle " << n << std::endl;
+                }
+            }
+
+            // trace VCI transactions on IOPIC and XCU(0,0)
+            signal_vci_tgt_iopi.print_trace("@@@ IOPI_TGT");
+            signal_vci_ini_iopi.print_trace("@@@ IOPI_INI");
+            clusters[0][0]->signal_vci_tgt_xicu.print_trace("@@@ XCU_0_0");
+        }
+
+        sc_start(sc_core::sc_time(1, SC_NS));
+    }
+    // Free memory
+    for (size_t i = 0 ; i  < (X_SIZE * Y_SIZE) ; i++)
+    {
+        size_t x = i / (Y_SIZE);
+        size_t y = i % (Y_SIZE);
+        delete clusters[x][y];
+    }
+
+    return EXIT_SUCCESS;
+}
+
+
+void handler(int dummy = 0) 
+{
+   stop_called = true;
+   sc_stop();
+}
+
+void voidhandler(int dummy = 0) {}
+
+int sc_main (int argc, char *argv[])
+{
+   signal(SIGINT, handler);
+   signal(SIGPIPE, voidhandler);
+
+   try {
+      return _main(argc, argv);
+   } catch (std::exception &e) {
+      std::cout << e.what() << std::endl;
+   } catch (...) {
+      std::cout << "Unknown exception occured" << std::endl;
+      throw;
+   }
+   return 1;
+}
+
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
Index: /branches/fault_tolerance/platforms/tsar_generic_leti/top.desc
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_leti/top.desc	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_leti/top.desc	(revision 724)
@@ -0,0 +1,78 @@
+
+# -*- python -*-
+
+# internal VCI parameters values
+vci_cell_size_int   = 4
+vci_cell_size_ext   = 8
+
+vci_plen_size       = 8
+vci_addr_size       = 40
+vci_rerror_size     = 1
+vci_clen_size       = 1
+vci_rflag_size      = 1
+vci_srcid_size      = 14
+vci_pktid_size      = 4
+vci_trdid_size      = 4
+vci_wrplen_size     = 1
+
+# DSPIN network parameters values
+dspin_cmd_flit_size     = 39
+dspin_rsp_flit_size     = 32
+
+todo = Platform('caba', 'top.cpp',
+
+	uses = [
+            Uses('caba:tsar_leti_cluster', 
+                  vci_data_width_int = vci_cell_size_int,
+                  vci_data_width_ext = vci_cell_size_ext,
+                  dspin_cmd_width    = dspin_cmd_flit_size,
+                  dspin_rsp_width    = dspin_rsp_flit_size),
+
+            Uses('caba:vci_dspin_target_wrapper',
+                  cell_size = vci_cell_size_int,
+                  dspin_cmd_width    = dspin_cmd_flit_size,
+                  dspin_rsp_width    = dspin_rsp_flit_size),
+                  
+            Uses('caba:vci_dspin_initiator_wrapper',
+                  cell_size = vci_cell_size_int,
+                  dspin_cmd_width    = dspin_cmd_flit_size,
+                  dspin_rsp_width    = dspin_rsp_flit_size),
+                  
+            Uses('caba:vci_local_crossbar',
+                  cell_size = vci_cell_size_int),
+
+            Uses('caba:vci_framebuffer',
+                  cell_size = vci_cell_size_int),
+
+            Uses('caba:vci_multi_nic',
+                  cell_size = vci_cell_size_int),
+
+            Uses('caba:vci_chbuf_dma',
+                  cell_size = vci_cell_size_int),
+
+            Uses('caba:vci_block_device_tsar',
+                  cell_size = vci_cell_size_int),
+
+            Uses('caba:vci_multi_tty',
+                  cell_size = vci_cell_size_int),
+
+            Uses('caba:vci_iopic',
+                  cell_size = vci_cell_size_int),
+
+	        Uses('common:elf_file_loader'),
+
+            Uses('common:plain_file_loader'),
+           ],
+
+    # default VCI parameters (global variables)
+    cell_size   = vci_cell_size_int,  
+	plen_size   = vci_plen_size,
+	addr_size   = vci_addr_size,
+	rerror_size = vci_rerror_size,
+	clen_size   = vci_clen_size,
+	rflag_size  = vci_rflag_size,
+	srcid_size  = vci_srcid_size,
+	pktid_size  = vci_pktid_size,
+	trdid_size  = vci_trdid_size,
+	wrplen_size = vci_wrplen_size,
+)
Index: /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/metadata/tsar_leti_cluster.sd
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/metadata/tsar_leti_cluster.sd	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/metadata/tsar_leti_cluster.sd	(revision 724)
@@ -0,0 +1,106 @@
+
+# -*- python -*-
+
+Module('caba:tsar_leti_cluster', 
+    classname = 'soclib::caba::TsarLetiCluster',
+   tmpl_parameters = [
+      parameter.Int('dspin_cmd_width'),
+      parameter.Int('dspin_rsp_width'),
+        parameter.Module('vci_param_int', default = 'caba:vci_param',
+                          cell_size = parameter.Reference('vci_data_width_int')),
+        parameter.Module('vci_param_ext', default = 'caba:vci_param',
+                          cell_size = parameter.Reference('vci_data_width_ext')),
+        ],
+
+   header_files = [ '../source/include/tsar_leti_cluster.h', 
+        ],
+
+   implementation_files = [ '../source/src/tsar_leti_cluster.cpp', 
+        ],
+
+   uses = [
+      Uses('caba:base_module'),
+      Uses('common:mapping_table'),
+      Uses('common:iss2'),
+              
+      Uses('caba:vci_cc_vcache_wrapper', 
+              cell_size       = parameter.Reference('vci_data_width_int'),
+              dspin_in_width  = parameter.Reference('dspin_cmd_width'),
+              dspin_out_width = parameter.Reference('dspin_rsp_width'),
+              iss_t           = 'common:gdb_iss', 
+              gdb_iss_t       = 'common:mips32el'),
+
+      Uses('caba:vci_mem_cache',
+              memc_cell_size_int = parameter.Reference('vci_data_width_int'),
+              memc_cell_size_ext = parameter.Reference('vci_data_width_ext'),
+              dspin_in_width  = parameter.Reference('dspin_rsp_width'),
+              dspin_out_width = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:vci_simple_ram',
+              cell_size       = parameter.Reference('vci_data_width_ext')),
+
+      Uses('caba:vci_xicu',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_local_crossbar', 
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:dspin_local_crossbar', 
+              flit_width      = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:dspin_local_crossbar', 
+              flit_width      = parameter.Reference('dspin_rsp_width')),
+
+      Uses('caba:dspin_router', 
+              flit_width      = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:dspin_router', 
+              flit_width      = parameter.Reference('dspin_rsp_width')),
+
+      Uses('caba:vci_multi_tty',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_block_device_tsar',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_dspin_target_wrapper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_dspin_initiator_wrapper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('common:elf_file_loader'),
+      ],
+
+   ports = [
+      Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+      Port('caba:clock_in', 'p_clk', auto = 'clock'),
+
+      Port('caba:dspin_output', 'p_cmd_out', [4], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+      Port('caba:dspin_input', 'p_cmd_in', [4], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+
+      Port('caba:dspin_output', 'p_rsp_out', [4], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')), 
+      Port('caba:dspin_input', 'p_rsp_in', [4], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')),
+
+      Port('caba:dspin_output', 'p_m2p_out', [4], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')), 
+      Port('caba:dspin_input', 'p_m2p_in', [4], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+
+      Port('caba:dspin_output', 'p_p2m_out', [4], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')), 
+      Port('caba:dspin_input', 'p_p2m_in', [4], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')),
+
+      Port('caba:dspin_output', 'p_cla_out', [4], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')), 
+      Port('caba:dspin_input', 'p_cla_in', [4], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+      ],
+)
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/source/include/tsar_leti_cluster.h
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/source/include/tsar_leti_cluster.h	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/source/include/tsar_leti_cluster.h	(revision 724)
@@ -0,0 +1,193 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_leti_cluster.h
+// Author: Alain Greiner
+// Copyright: UPMC/LIP6
+// Date : march 2013
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef SOCLIB_CABA_TSAR_LETI_CLUSTER_H
+#define SOCLIB_CABA_TSAR_LETI_CLUSTER_H
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "mips32.h"
+#include "vci_simple_ram.h"
+#include "vci_xicu.h"
+#include "vci_local_crossbar.h"
+#include "dspin_local_crossbar.h"
+#include "vci_dspin_initiator_wrapper.h"
+#include "vci_dspin_target_wrapper.h"
+#include "dspin_router.h"
+#include "vci_multi_tty.h"
+#include "vci_block_device_tsar.h"
+#include "vci_mem_cache.h"
+#include "vci_cc_vcache_wrapper.h"
+
+namespace soclib { namespace caba {
+
+///////////////////////////////////////////////////////////////////////////
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext>  class TsarLetiCluster
+///////////////////////////////////////////////////////////////////////////
+    : public soclib::caba::BaseModule
+{
+    public:
+
+    // Used in destructor
+    size_t m_nprocs;
+
+    // Ports
+    sc_in<bool>                                     p_clk;
+    sc_in<bool>                                     p_resetn;
+
+    soclib::caba::DspinOutput<dspin_cmd_width>      *p_cmd_out;
+    soclib::caba::DspinInput<dspin_cmd_width>       *p_cmd_in;
+
+    soclib::caba::DspinOutput<dspin_rsp_width>      *p_rsp_out;
+    soclib::caba::DspinInput<dspin_rsp_width>       *p_rsp_in;
+
+    soclib::caba::DspinOutput<dspin_cmd_width>      *p_m2p_out;
+    soclib::caba::DspinInput<dspin_cmd_width>       *p_m2p_in;
+
+    soclib::caba::DspinOutput<dspin_rsp_width>      *p_p2m_out;
+    soclib::caba::DspinInput<dspin_rsp_width>       *p_p2m_in;
+
+    soclib::caba::DspinOutput<dspin_cmd_width>      *p_cla_out;
+    soclib::caba::DspinInput<dspin_cmd_width>       *p_cla_in;
+
+    // interrupt signals
+    sc_signal<bool>         signal_false;
+    sc_signal<bool>         signal_proc_irq[16];
+    sc_signal<bool>         signal_irq_mtty;
+    sc_signal<bool>         signal_irq_memc;
+    sc_signal<bool>         signal_irq_bdev;
+
+    // DSPIN signals between DSPIN routers and local_crossbars
+    DspinSignals<dspin_cmd_width>   signal_dspin_cmd_l2g_d;
+    DspinSignals<dspin_cmd_width>   signal_dspin_cmd_g2l_d;
+    DspinSignals<dspin_rsp_width>   signal_dspin_rsp_l2g_d;
+    DspinSignals<dspin_rsp_width>   signal_dspin_rsp_g2l_d;
+    DspinSignals<dspin_cmd_width>   signal_dspin_m2p_l2g_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_m2p_g2l_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_clack_l2g_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_clack_g2l_c;
+    DspinSignals<dspin_rsp_width>   signal_dspin_p2m_l2g_c;
+    DspinSignals<dspin_rsp_width>   signal_dspin_p2m_g2l_c;
+
+    // Direct VCI signals
+    VciSignals<vci_param_int>       signal_vci_ini_proc[4];
+    VciSignals<vci_param_int>       signal_vci_ini_mdma;
+    VciSignals<vci_param_int>       signal_vci_ini_bdev;
+    VciSignals<vci_param_int>       signal_vci_ini_chbuf;
+
+    VciSignals<vci_param_int>       signal_vci_tgt_memc;
+    VciSignals<vci_param_int>       signal_vci_tgt_xicu;
+    VciSignals<vci_param_int>       signal_vci_tgt_mdma;
+    VciSignals<vci_param_int>       signal_vci_tgt_mtty;
+    VciSignals<vci_param_int>       signal_vci_tgt_bdev;
+    VciSignals<vci_param_int>       signal_vci_tgt_fbuf;
+    VciSignals<vci_param_int>       signal_vci_tgt_mnic;
+    VciSignals<vci_param_int>       signal_vci_tgt_chbuf;
+    VciSignals<vci_param_int>       signal_vci_tgt_simh;
+
+    VciSignals<vci_param_int>       signal_vci_g2l;
+    VciSignals<vci_param_int>       signal_vci_l2g;
+
+    // Coherence DSPIN signals to local crossbar
+    DspinSignals<dspin_cmd_width>     signal_dspin_m2p_memc;
+    DspinSignals<dspin_cmd_width>     signal_dspin_clack_memc;
+    DspinSignals<dspin_rsp_width>     signal_dspin_p2m_memc;
+    DspinSignals<dspin_cmd_width>     signal_dspin_m2p_proc[4];
+    DspinSignals<dspin_cmd_width>     signal_dspin_clack_proc[4];
+    DspinSignals<dspin_rsp_width>     signal_dspin_p2m_proc[4];
+
+    // external RAM to MEMC VCI signal
+    VciSignals<vci_param_ext>         signal_vci_xram;
+
+    // Components
+
+    VciCcVCacheWrapper<vci_param_int,
+                       dspin_cmd_width,
+                       dspin_rsp_width,
+                       GdbServer<Mips32ElIss> >*  proc[4];
+
+    VciMemCache<vci_param_int,
+                vci_param_ext,
+                dspin_rsp_width,
+                dspin_cmd_width>*                 memc;
+
+    VciXicu<vci_param_int>*                       xicu;
+
+    VciSimpleRam<vci_param_ext>*                  xram;
+
+    VciMultiTty<vci_param_int>*                   mtty;
+
+    VciBlockDeviceTsar<vci_param_int>*            bdev;
+
+    VciLocalCrossbar<vci_param_int>*              xbar_cmd;
+
+    VciDspinInitiatorWrapper<vci_param_int,
+                             dspin_cmd_width,
+                             dspin_rsp_width>*    wi_gate;
+
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_gate;
+
+    DspinLocalCrossbar<dspin_cmd_width>*          xbar_m2p;
+    DspinLocalCrossbar<dspin_rsp_width>*          xbar_p2m;
+    DspinLocalCrossbar<dspin_cmd_width>*          xbar_cla;
+
+    DspinRouter<dspin_cmd_width>*                 router_cmd;
+    DspinRouter<dspin_rsp_width>*                 router_rsp;
+    DspinRouter<dspin_cmd_width>*                 router_m2p;
+    DspinRouter<dspin_rsp_width>*                 router_p2m;
+    DspinRouter<dspin_cmd_width>*                 router_cla;
+
+    TsarLetiCluster( sc_module_name                     insname,
+                     size_t                             nb_procs,      // processors
+                     size_t                             x,             // x coordinate
+                     size_t                             y,             // y coordinate
+                     size_t                             cluster,       // y + ymax*x
+                     const soclib::common::MappingTable &mtd,          // internal
+                     const soclib::common::MappingTable &mtx,          // external
+                     uint32_t                           reset_address, // boot address
+                     size_t                             x_width,       // x field bits
+                     size_t                             y_width,       // y field bits
+                     size_t                             l_width,       // l field bits
+                     size_t                             tgtid_memc,
+                     size_t                             tgtid_xicu,
+                     size_t                             tgtid_mtty,
+                     size_t                             tgtid_bdev,
+                     const char*                        disk_pathname,
+                     size_t                             memc_ways,
+                     size_t                             memc_sets,
+                     size_t                             l1_i_ways,
+                     size_t                             l1_i_sets,
+                     size_t                             l1_d_ways,
+                     size_t                             l1_d_sets,
+                     size_t                             xram_latency,  // external ram
+                     const Loader                       &loader,
+                     uint32_t                           frozen_cycles,
+                     uint32_t                           trace_start_cycle,
+                     bool                               trace_proc_ok,
+                     uint32_t                           trace_proc_id,
+                     bool                               trace_memc_ok,
+                     uint32_t                           trace_memc_id );
+
+    ~TsarLetiCluster();
+
+};
+}}
+
+#endif
Index: /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/source/src/tsar_leti_cluster.cpp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/source/src/tsar_leti_cluster.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_leti/tsar_leti_cluster/caba/source/src/tsar_leti_cluster.cpp	(revision 724)
@@ -0,0 +1,588 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_leti_cluster.cpp
+// Author: Alain Greiner
+// Copyright: UPMC/LIP6
+// Date : february 2014
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+
+#include "../include/tsar_leti_cluster.h"
+
+namespace soclib {
+namespace caba  {
+
+////////////////////////////////////////////////////////////////////////////////////
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext> TsarLetiCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>::TsarLetiCluster(
+////////////////////////////////////////////////////////////////////////////////////
+         sc_module_name                     insname,
+         size_t                             nb_procs,
+         size_t                             x_id,
+         size_t                             y_id,
+         size_t                             cluster_xy,
+         const soclib::common::MappingTable &mtd,
+         const soclib::common::MappingTable &mtx,
+         uint32_t                           reset_address,
+         size_t                             x_width,
+         size_t                             y_width,
+         size_t                             l_width,
+         size_t                             tgtid_memc,
+         size_t                             tgtid_xicu,
+         size_t                             tgtid_mtty,
+         size_t                             tgtid_bdev,
+         const char*                        disk_pathname,
+         size_t                             memc_ways,
+         size_t                             memc_sets,
+         size_t                             l1_i_ways,
+         size_t                             l1_i_sets,
+         size_t                             l1_d_ways,
+         size_t                             l1_d_sets,
+         size_t                             xram_latency,
+         const Loader                      &loader,
+         uint32_t                           frozen_cycles,
+         uint32_t                           trace_start_cycle,
+         bool                               trace_proc_ok,
+         uint32_t                           trace_proc_id,
+         bool                               trace_memc_ok,
+         uint32_t                           trace_memc_id )
+            : soclib::caba::BaseModule(insname),
+            m_nprocs(nb_procs),
+            p_clk("clk"),
+            p_resetn("resetn")
+
+{
+    /////////////////////////////////////////////////////////////////////////////
+    // Vectors of ports definition and allocation
+    /////////////////////////////////////////////////////////////////////////////
+
+    p_cmd_in  = alloc_elems<DspinInput<dspin_cmd_width> >  ("p_cmd_in",  4);
+    p_cmd_out = alloc_elems<DspinOutput<dspin_cmd_width> > ("p_cmd_out", 4);
+
+    p_rsp_in  = alloc_elems<DspinInput<dspin_rsp_width> >  ("p_rsp_in",  4);
+    p_rsp_out = alloc_elems<DspinOutput<dspin_rsp_width> > ("p_rsp_out", 4);
+
+    p_m2p_in  = alloc_elems<DspinInput<dspin_cmd_width> >  ("p_m2p_in",  4);
+    p_m2p_out = alloc_elems<DspinOutput<dspin_cmd_width> > ("p_m2p_out", 4);
+
+    p_p2m_in  = alloc_elems<DspinInput<dspin_rsp_width> >  ("p_p2m_in",  4);
+    p_p2m_out = alloc_elems<DspinOutput<dspin_rsp_width> > ("p_p2m_out", 4);
+
+    p_cla_in  = alloc_elems<DspinInput<dspin_cmd_width> >  ("p_cla_in",  4);
+    p_cla_out = alloc_elems<DspinOutput<dspin_cmd_width> > ("p_cla_out", 4);
+
+    /////////////////////////////////////////////////////////////////////////////
+    // Components definition and allocation
+    /////////////////////////////////////////////////////////////////////////////
+
+    // The processor is a MIPS32 wrapped in the GDB server
+    // the reset address is defined by the reset_address argument
+    typedef GdbServer<Mips32ElIss> mips_iss;
+    mips_iss::setResetAddress( reset_address );
+
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        uint32_t global_proc_id  = cluster_xy * nb_procs + p;
+        uint32_t global_cc_id    = (cluster_xy << l_width) + p;
+        bool     trace_ok        = trace_proc_ok and (trace_proc_id == global_proc_id);
+
+        std::ostringstream sproc;
+        sproc << "proc_" << x_id << "_" << y_id << "_" << p;
+        proc[p] = new VciCcVCacheWrapper<vci_param_int,
+                                         dspin_cmd_width,
+                                         dspin_rsp_width,
+                                         mips_iss >(
+                      sproc.str().c_str(),
+                      global_proc_id,                 // GLOBAL PROC_ID
+                      mtd,                            // Mapping Table
+                      IntTab(cluster_xy,p),           // SRCID
+                      global_cc_id,                   // GLOBAL_CC_ID
+                      8,                              // ITLB ways
+                      8,                              // ITLB sets
+                      8,                              // DTLB ways
+                      8,                              // DTLB sets
+                      l1_i_ways,l1_i_sets, 16,        // ICACHE size
+                      l1_d_ways,l1_d_sets, 16,        // DCACHE size
+                      4,                              // WBUF nlines
+                      4,                              // WBUF nwords
+                      x_width,
+                      y_width,
+                      frozen_cycles,                  // max frozen cycles
+                      trace_start_cycle,
+                      trace_ok );
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+    bool trace_ok = trace_memc_ok and (trace_memc_id == cluster_xy);
+    std::ostringstream smemc;
+    smemc << "memc_" << x_id << "_" << y_id;
+    memc = new VciMemCache<vci_param_int,
+                           vci_param_ext,
+                           dspin_rsp_width,
+                           dspin_cmd_width>(
+                     smemc.str().c_str(),
+                     mtd,                                // Mapping Table direct space
+                     mtx,                                // Mapping Table external space
+                     IntTab(cluster_xy),                 // SRCID external space
+                     IntTab(cluster_xy, tgtid_memc),     // TGTID direct space
+                     x_width,                            // Number of x bits in platform
+                     y_width,                            // Number of y bits in platform
+                     memc_ways, memc_sets, 16,           // CACHE SIZE
+                     3,                                  // MAX NUMBER OF COPIES
+                     4096,                               // HEAP SIZE
+                     8,                                  // TRANSACTION TABLE DEPTH
+                     8,                                  // UPDATE TABLE DEPTH
+                     8,                                  // INVALIDATE TABLE DEPTH
+                     trace_start_cycle,
+                     trace_ok );
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream sxram;
+    sxram << "xram_" << x_id << "_" << y_id;
+    xram = new VciSimpleRam<vci_param_ext>(
+                     sxram.str().c_str(),
+                     IntTab(cluster_xy),
+                     mtx,
+                     loader,
+                     xram_latency);
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream sxicu;
+    sxicu << "xicu_" << x_id << "_" << y_id;
+    xicu = new VciXicu<vci_param_int>(
+                     sxicu.str().c_str(),
+                     mtd,                               // mapping table
+                     IntTab(cluster_xy, tgtid_xicu),    // TGTID_D
+                     16,                                // number of timer IRQs
+                     16,                                // number of hard IRQs
+                     16,                                // number of soft IRQs
+                     16 );                              // number of output IRQs
+
+    /////////////////////////////////////////////////////////////////////////////
+    size_t nb_initiators = nb_procs;
+    size_t nb_targets    = 2;
+
+    if ((x_id == 0) and (y_id == 0))  // cluster(0,0)
+    {
+        nb_initiators = nb_procs + 1;
+        nb_targets    = 4;
+    }
+
+    std::ostringstream s_xbar_cmd;
+    xbar_cmd = new VciLocalCrossbar<vci_param_int>(
+                     s_xbar_cmd.str().c_str(),
+                     mtd,                          // mapping table
+                     cluster_xy,                   // cluster id
+                     nb_initiators,                // number of local initiators
+                     nb_targets,                   // number of local targets 
+                     0 );                          // default target
+
+    wi_gate = new VciDspinInitiatorWrapper<vci_param_int,
+                                           dspin_cmd_width,
+                                           dspin_rsp_width>(
+                     "wi_gate",
+                     x_width + y_width + l_width);
+
+    wt_gate = new VciDspinTargetWrapper<vci_param_int,
+                                        dspin_cmd_width,
+                                        dspin_rsp_width>(
+                     "wt_gate",
+                     x_width + y_width + l_width);
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_xbar_m2p;
+    s_xbar_m2p << "xbar_m2p_" << x_id << "_" << y_id;
+    xbar_m2p = new DspinLocalCrossbar<dspin_cmd_width>(
+                     s_xbar_m2p.str().c_str(),
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local dests 
+                     2, 2,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // don't use local routing table
+                     true );                       // broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_xbar_p2m;
+    s_xbar_p2m << "xbar_p2m_" << x_id << "_" << y_id;
+    xbar_p2m = new DspinLocalCrossbar<dspin_rsp_width>(
+                     s_xbar_p2m.str().c_str(),
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, 0,          // l_width unused on p2m network
+                     nb_procs,                     // number of local sources
+                     1,                            // number of local dests
+                     2, 2,                         // fifo depths
+                     false,                        // RSP
+                     false,                        // don't use local routing table
+                     false );                      // no broadcast 
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_xbar_cla;
+    s_xbar_cla << "xbar_cla_" << x_id << "_" << y_id;
+    xbar_cla = new DspinLocalCrossbar<dspin_cmd_width>(
+                     s_xbar_cla.str().c_str(),
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local dests 
+                     2, 2,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // don't use local routing table
+                     false);                       // no broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_router_cmd;
+    s_router_cmd << "router_cmd_" << x_id << "_" << y_id;
+    router_cmd = new DspinRouter<dspin_cmd_width>(
+                     s_router_cmd.str().c_str(),
+                     x_id,y_id,                    // coordinate in the mesh
+                     x_width, y_width,             // x & y fields width
+                     4,4);                         // input & output fifo depths
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_router_rsp;
+    s_router_rsp << "router_rsp_" << x_id << "_" << y_id;
+    router_rsp = new DspinRouter<dspin_rsp_width>(
+                     s_router_rsp.str().c_str(),
+                     x_id,y_id,                    // coordinates in mesh
+                     x_width, y_width,             // x & y fields width
+                     4,4);                         // input & output fifo depths
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_router_m2p;
+    s_router_m2p << "router_m2p_" << x_id << "_" << y_id;
+    router_m2p = new DspinRouter<dspin_cmd_width>(
+                     s_router_m2p.str().c_str(),
+                     x_id,y_id,                    // coordinate in the mesh
+                     x_width, y_width,             // x & y fields width
+                     4,4,                          // input & output fifo depths
+                     true);                        // broadcast supported
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_router_p2m;
+    s_router_p2m << "router_p2m_" << x_id << "_" << y_id;
+    router_p2m = new DspinRouter<dspin_rsp_width>(
+                     s_router_p2m.str().c_str(),
+                     x_id,y_id,                    // coordinates in mesh
+                     x_width, y_width,             // x & y fields width
+                     4,4);                         // input & output fifo depths
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream s_router_cla;
+    s_router_cla << "router_cla_" << x_id << "_" << y_id;
+    router_cla = new DspinRouter<dspin_cmd_width>(
+                     s_router_cla.str().c_str(),
+                     x_id,y_id,                    // coordinate in the mesh
+                     x_width, y_width,             // x & y fields width
+                     4,4);                         // input & output fifo depths
+
+    // backup BDV and TTY peripherals in cluster(0,0)
+    bdev = NULL;
+    mtty = NULL;
+    if ((x_id == 0) and (y_id == 0))
+    {
+        /////////////////////////////////////////////
+        bdev = new VciBlockDeviceTsar<vci_param_int>(
+                     "bdev",
+                     mtd,
+                     IntTab(cluster_xy, nb_procs),
+                     IntTab(cluster_xy, tgtid_bdev),
+                     disk_pathname,
+                     512,
+                     64 );            // burst size
+
+        /////////////////////////////////////////////
+        mtty = new VciMultiTty<vci_param_int>(
+                     "mtty",
+                     IntTab(cluster_xy, tgtid_mtty),
+                     mtd,
+                     "tty_backup", NULL );
+    }
+
+    std::cout << std::endl;
+
+    ////////////////////////////////////
+    // Connections are defined here
+    ////////////////////////////////////
+
+    //////////////////////// ROUTERS
+    router_cmd->p_clk                      (this->p_clk);
+    router_cmd->p_resetn                   (this->p_resetn);
+    router_rsp->p_clk                      (this->p_clk);
+    router_rsp->p_resetn                   (this->p_resetn);
+    router_m2p->p_clk                      (this->p_clk);
+    router_m2p->p_resetn                   (this->p_resetn);
+    router_p2m->p_clk                      (this->p_clk);
+    router_p2m->p_resetn                   (this->p_resetn);
+    router_cla->p_clk                      (this->p_clk);
+    router_cla->p_resetn                   (this->p_resetn);
+
+    // loop on N/S/E/W ports
+    for (size_t i = 0; i < 4; i++)
+    {
+        router_cmd->p_out[i]               (this->p_cmd_out[i]);
+        router_cmd->p_in[i]                (this->p_cmd_in[i]);
+
+        router_rsp->p_out[i]               (this->p_rsp_out[i]);
+        router_rsp->p_in[i]                (this->p_rsp_in[i]);
+
+        router_m2p->p_out[i]               (this->p_m2p_out[i]);
+        router_m2p->p_in[i]                (this->p_m2p_in[i]);
+
+        router_p2m->p_out[i]               (this->p_p2m_out[i]);
+        router_p2m->p_in[i]                (this->p_p2m_in[i]);
+
+        router_cla->p_out[i]               (this->p_cla_out[i]);
+        router_cla->p_in[i]                (this->p_cla_in[i]);
+    }
+
+    router_cmd->p_out[4]                   (signal_dspin_cmd_g2l_d);
+    router_cmd->p_in[4]                    (signal_dspin_cmd_l2g_d);
+
+    router_rsp->p_out[4]                   (signal_dspin_rsp_g2l_d);
+    router_rsp->p_in[4]                    (signal_dspin_rsp_l2g_d);
+
+    router_m2p->p_out[4]                   (signal_dspin_m2p_g2l_c);
+    router_m2p->p_in[4]                    (signal_dspin_m2p_l2g_c);
+
+    router_p2m->p_out[4]                   (signal_dspin_p2m_g2l_c);
+    router_p2m->p_in[4]                    (signal_dspin_p2m_l2g_c);
+
+    router_cla->p_out[4]                   (signal_dspin_clack_g2l_c);
+    router_cla->p_in[4]                    (signal_dspin_clack_l2g_c);
+
+    std::cout << "  - routers connected" << std::endl;
+
+    ///////////////////// CMD DSPIN  local crossbar direct
+    xbar_cmd->p_clk                            (this->p_clk);
+    xbar_cmd->p_resetn                         (this->p_resetn);
+    xbar_cmd->p_initiator_to_up                (signal_vci_l2g);
+    xbar_cmd->p_target_to_up                   (signal_vci_g2l);
+
+    xbar_cmd->p_to_target[tgtid_memc]          (signal_vci_tgt_memc);
+    xbar_cmd->p_to_target[tgtid_xicu]          (signal_vci_tgt_xicu);
+
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_cmd->p_to_initiator[p]            (signal_vci_ini_proc[p]);
+
+    if ((x_id == 0) and (y_id == 0))  // cluster(0,0)
+    {
+        xbar_cmd->p_to_target[tgtid_mtty]      (signal_vci_tgt_mtty);
+        xbar_cmd->p_to_target[tgtid_bdev]      (signal_vci_tgt_bdev);
+        xbar_cmd->p_to_initiator[nb_procs]     (signal_vci_ini_bdev);
+    }
+
+    wi_gate->p_clk                             (this->p_clk);
+    wi_gate->p_resetn                          (this->p_resetn);
+    wi_gate->p_vci                             (signal_vci_l2g);
+    wi_gate->p_dspin_cmd                       (signal_dspin_cmd_l2g_d);
+    wi_gate->p_dspin_rsp                       (signal_dspin_rsp_g2l_d);
+
+    wt_gate->p_clk                             (this->p_clk);
+    wt_gate->p_resetn                          (this->p_resetn);
+    wt_gate->p_vci                             (signal_vci_g2l);
+    wt_gate->p_dspin_cmd                       (signal_dspin_cmd_g2l_d);
+    wt_gate->p_dspin_rsp                       (signal_dspin_rsp_l2g_d);
+
+    std::cout << "  - CMD & RSP Direct crossbar connected" << std::endl;
+
+    ////////////////////// M2P DSPIN local crossbar coherence
+    xbar_m2p->p_clk                            (this->p_clk);
+    xbar_m2p->p_resetn                         (this->p_resetn);
+    xbar_m2p->p_global_out                     (signal_dspin_m2p_l2g_c);
+    xbar_m2p->p_global_in                      (signal_dspin_m2p_g2l_c);
+    xbar_m2p->p_local_in[0]                    (signal_dspin_m2p_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_m2p->p_local_out[p]               (signal_dspin_m2p_proc[p]);
+
+    std::cout << "  - M2P Coherence crossbar connected" << std::endl;
+
+    ////////////////////////// P2M DSPIN local crossbar coherence
+    xbar_p2m->p_clk                            (this->p_clk);
+    xbar_p2m->p_resetn                         (this->p_resetn);
+    xbar_p2m->p_global_out                     (signal_dspin_p2m_l2g_c);
+    xbar_p2m->p_global_in                      (signal_dspin_p2m_g2l_c);
+    xbar_p2m->p_local_out[0]                   (signal_dspin_p2m_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_p2m->p_local_in[p]                (signal_dspin_p2m_proc[p]);
+
+    std::cout << "  - P2M Coherence crossbar connected" << std::endl;
+
+    ////////////////////// CLACK DSPIN local crossbar coherence
+    xbar_cla->p_clk                          (this->p_clk);
+    xbar_cla->p_resetn                       (this->p_resetn);
+    xbar_cla->p_global_out                   (signal_dspin_clack_l2g_c);
+    xbar_cla->p_global_in                    (signal_dspin_clack_g2l_c);
+    xbar_cla->p_local_in[0]                  (signal_dspin_clack_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_cla->p_local_out[p]             (signal_dspin_clack_proc[p]);
+
+    std::cout << "  - CLA Coherence crossbar connected" << std::endl;
+
+    //////////////////////////////////// Processors
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        proc[p]->p_clk                      (this->p_clk);
+        proc[p]->p_resetn                   (this->p_resetn);
+        proc[p]->p_vci                      (signal_vci_ini_proc[p]);
+        proc[p]->p_dspin_m2p                (signal_dspin_m2p_proc[p]);
+        proc[p]->p_dspin_p2m                (signal_dspin_p2m_proc[p]);
+        proc[p]->p_dspin_clack              (signal_dspin_clack_proc[p]);
+
+        for ( size_t j = 0 ; j < 6 ; j++)
+        {
+            if ( j < 4 ) proc[p]->p_irq[j]  (signal_proc_irq[4*p + j]);
+            else         proc[p]->p_irq[j]  (signal_false);
+        }
+    }
+
+    std::cout << "  - Processors connected" << std::endl;
+
+    ///////////////////////////////////// XICU
+    xicu->p_clk                        (this->p_clk);
+    xicu->p_resetn                     (this->p_resetn);
+    xicu->p_vci                        (signal_vci_tgt_xicu);
+
+    for (size_t i = 0 ; i < 16  ; i++)
+    {
+        xicu->p_irq[i]                 (signal_proc_irq[i]);
+    }
+
+    for (size_t i = 0; i < 16; i++)
+    {
+        if ((x_id == 0) and (y_id == 0)) // cluster (0,0)
+        {
+            if      (i == 8)           xicu->p_hwi[i] (signal_irq_memc);
+            else if (i == 9)           xicu->p_hwi[i] (signal_irq_bdev);
+            else if (i == 10)          xicu->p_hwi[i] (signal_irq_mtty);
+            else                       xicu->p_hwi[i] (signal_false);
+        }
+        else                             // other clusters
+        {
+            if (i == 1)                xicu->p_hwi[i] (signal_irq_memc);
+            else                       xicu->p_hwi[i] (signal_false);
+        }
+    }
+
+    std::cout << "  - XICU connected" << std::endl;
+
+    //////////////////////////////////////////////// MEMC
+    memc->p_clk                        (this->p_clk);
+    memc->p_resetn                     (this->p_resetn);
+    memc->p_irq                        (signal_irq_memc);
+    memc->p_vci_ixr                    (signal_vci_xram);
+    memc->p_vci_tgt                    (signal_vci_tgt_memc);
+    memc->p_dspin_p2m                  (signal_dspin_p2m_memc);
+    memc->p_dspin_m2p                  (signal_dspin_m2p_memc);
+    memc->p_dspin_clack                (signal_dspin_clack_memc);
+
+    std::cout << "  - MEMC connected" << std::endl;
+
+    /////////////////////////////////////////////// XRAM
+    xram->p_clk                        (this->p_clk);
+    xram->p_resetn                     (this->p_resetn);
+    xram->p_vci                        (signal_vci_xram);
+
+    std::cout << "  - XRAM connected" << std::endl;
+
+    /////////////////////////////// Extra Components in cluster(0,0)
+
+    if ((x_id == 0) and (y_id == 0))
+    {
+        // BDEV
+        bdev->p_clk                    (this->p_clk);
+        bdev->p_resetn                 (this->p_resetn);
+        bdev->p_irq                    (signal_irq_bdev);
+        bdev->p_vci_target             (signal_vci_tgt_bdev);
+        bdev->p_vci_initiator          (signal_vci_ini_bdev);
+
+        std::cout << "  - BDEV connected" << std::endl;
+
+        // MTTY (single channel)
+        mtty->p_clk                    (this->p_clk);
+        mtty->p_resetn                 (this->p_resetn);
+        mtty->p_vci                    (signal_vci_tgt_mtty);
+        mtty->p_irq[0]                 (signal_irq_mtty);
+
+        std::cout << "  - MTTY connected" << std::endl;
+    }
+} // end constructor
+
+
+
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext> TsarLetiCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>::~TsarLetiCluster() {
+
+    dealloc_elems<DspinInput<dspin_cmd_width> > (p_cmd_in, 4);
+    dealloc_elems<DspinOutput<dspin_cmd_width> >(p_cmd_out, 4);
+
+    dealloc_elems<DspinInput<dspin_rsp_width> > (p_rsp_in, 4);
+    dealloc_elems<DspinOutput<dspin_rsp_width> >(p_rsp_out, 4);
+
+    dealloc_elems<DspinInput<dspin_cmd_width> > (p_m2p_in, 4);
+    dealloc_elems<DspinOutput<dspin_cmd_width> >(p_m2p_out, 4);
+
+    dealloc_elems<DspinInput<dspin_rsp_width> > (p_p2m_in, 4);
+    dealloc_elems<DspinOutput<dspin_rsp_width> >(p_p2m_out, 4);
+
+    dealloc_elems<DspinInput<dspin_cmd_width> > (p_cla_in, 4);
+    dealloc_elems<DspinOutput<dspin_cmd_width> >(p_cla_out, 4);
+
+    for (size_t p = 0; p < m_nprocs ; p++)
+    {
+        if ( proc[p] ) delete proc[p];
+    }
+
+    delete memc;
+    delete xram;
+    delete xicu;
+    delete xbar_cmd;
+    delete xbar_m2p;
+    delete xbar_p2m;
+    delete xbar_cla;
+    delete router_cmd;
+    delete router_rsp;
+    delete router_m2p;
+    delete router_p2m;
+    delete router_cla;
+    delete wi_gate;
+    delete wt_gate;
+
+    if ( bdev )
+    {
+        delete bdev;
+    }
+
+    if ( mtty )
+    {
+        delete mtty;
+    }
+}
+
+
+}}
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/Makefile
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/Makefile	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/Makefile	(revision 724)
@@ -0,0 +1,8 @@
+simul.x: top.cpp top.desc
+	soclib-cc -P -p top.desc -I. -o simul.x
+
+clean:
+	soclib-cc -x -p top.desc -I.
+	rm -rf *.o *.x term*
+
+.PHONY: simul.x
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/counter_defs.py
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/counter_defs.py	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/counter_defs.py	(revision 724)
@@ -0,0 +1,177 @@
+
+individual_metrics = [ 'req_trig_update', 'local_update', 'remote_update', 'update_cost', 'req_trig_m_inv', 'local_m_inv', 'remote_m_inv', 'm_inv_cost', 'broadcast', 'total_update', 'total_m_inv' ]
+grouped_metrics = [ 'update_cost', 'm_inv_cost' ]
+stacked_metrics = [ 'nonwrite_broadcast', 'write_broadcast', 'local_m_inv', 'remote_m_inv', 'local_update', 'remote_update' ]
+
+m_app_name = {}
+m_app_name['mandel'] = "Mandelbrot"
+m_app_name['filter'] = "Filter"
+m_app_name['filt_ga'] = "Filter (opt.)"
+m_app_name['histogram'] = "Histogram"
+m_app_name['kmeans'] = "Kmeans"
+m_app_name['barnes'] = "Barnes"
+m_app_name['fmm'] = "FMM"
+m_app_name['ocean'] = "Ocean"
+m_app_name['raytrace'] = "Raytrace"
+m_app_name['radiosity'] = "Radiosity"
+m_app_name['waters'] = "Water Sp."
+m_app_name['watern'] = "Water Nsq."
+m_app_name['cholesky'] = "Cholesky"
+m_app_name['lu'] = "LU"
+m_app_name['fft'] = "FFT"
+m_app_name['radix'] = "Radix"
+m_app_name['fft_ga'] = "FFT"
+m_app_name['radix_ga'] = "Radix"
+
+m_metric_id = {}
+m_metric_tag = {}
+m_metric_tag['counter_reset']      = "[000]"
+m_metric_tag['ncycles']            = "[001]"
+m_metric_tag['local_read']         = "[002]"
+m_metric_tag['remote_read']        = "[003]"
+m_metric_tag['read_cost']          = "[004]"
+m_metric_tag['local_write']        = "[005]"
+m_metric_tag['remote_write']       = "[006]"
+m_metric_tag['write_flits_local']  = "[007]"
+m_metric_tag['write_flits_remote'] = "[008]"
+m_metric_tag['write_cost']         = "[009]"
+m_metric_tag['local_ll']           = "[010]"
+m_metric_tag['remote_ll']          = "[011]"
+m_metric_tag['ll_cost']            = "[012]"
+m_metric_tag['local_sc']           = "[013]"
+m_metric_tag['remote_sc']          = "[014]"
+m_metric_tag['sc_cost']            = "[015]"
+m_metric_tag['local_cas']          = "[016]"
+m_metric_tag['remote_cas']         = "[017]"
+m_metric_tag['cas_cost']           = "[018]"
+m_metric_tag['req_trig_update']    = "[019]"
+m_metric_tag['local_update']       = "[020]"
+m_metric_tag['remote_update']      = "[021]"
+m_metric_tag['update_cost']        = "[022]"
+m_metric_tag['req_trig_m_inv']     = "[023]"
+m_metric_tag['local_m_inv']        = "[024]"
+m_metric_tag['remote_m_inv']       = "[025]"
+m_metric_tag['m_inv_cost']         = "[026]"
+m_metric_tag['broadcast']          = "[027]"
+m_metric_tag['local_cleanup']      = "[028]"
+m_metric_tag['remote_cleanup']     = "[029]"
+m_metric_tag['cleanup_cost']       = "[030]"
+m_metric_tag['nb_read_miss']       = "[031]"
+m_metric_tag['write_miss']         = "[032]"
+m_metric_tag['write_dirty']        = "[033]"
+m_metric_tag['read_hit_trt']       = "[034]" # Reads blocked by a hit in the TRT
+m_metric_tag['trans_full_trt']     = "[035]" # Transactions blocked because the TRT is full
+m_metric_tag['put']                = "[036]"
+m_metric_tag['get']                = "[037]"
+m_metric_tag['write_broadcast']    = "[038]"
+
+m_metric_tag['total_read']         = "[040]"
+m_metric_tag['total_write']        = "[041]"
+m_metric_tag['total_ll']           = "[042]"
+m_metric_tag['total_sc']           = "[043]"
+m_metric_tag['total_cas']          = "[044]"
+m_metric_tag['total_update']       = "[045]"
+m_metric_tag['total_m_inv']        = "[046]"
+m_metric_tag['total_cleanup']      = "[047]"
+m_metric_tag['total_direct']       = "[048]"
+
+m_metric_tag['nonwrite_broadcast'] = "[050]"
+m_metric_tag['broadcast_cost']     = "[051]"
+m_metric_tag['direct_cost']        = "[052]"
+m_metric_tag['total_stacked']      = "|060]"
+
+all_metrics = m_metric_tag.keys()
+all_tags = m_metric_tag.values()
+
+m_metric_name = {}
+m_metric_name['counter_reset']      = "Counters reset at cycle"
+m_metric_name['ncycles']            = "Number of Cycles"
+m_metric_name['local_read']         = "Number of Local Reads (Miss in L1)"
+m_metric_name['remote_read']        = "Number of Remote Reads (Miss in L1)"
+m_metric_name['read_cost']          = "Read Cost"
+m_metric_name['local_write']        = "Number of Local Writes"
+m_metric_name['remote_write']       = "Number of Remote Writes"
+m_metric_name['write_flits_local']  = "Number of Local Write Flits"
+m_metric_name['write_flits_remote'] = "Number of Remote Write Flits"
+m_metric_name['write_cost']         = "Write Cost"
+m_metric_name['local_ll']           = "Number of Local LL"
+m_metric_name['remote_ll']          = "Number of Remote LL"
+m_metric_name['ll_cost']            = "LL Cost"
+m_metric_name['local_sc']           = "Number of Local SC"
+m_metric_name['remote_sc']          = "Number of Remote SC"
+m_metric_name['sc_cost']            = "SC Cost"
+m_metric_name['local_cas']          = "Number of Local CAS"
+m_metric_name['remote_cas']         = "Number of Remote CAS"
+m_metric_name['cas_cost']           = "CAS Cost"
+m_metric_name['req_trig_update']    = "Number of Requests Triggering an Update"
+m_metric_name['local_update']       = "Number of Local Updates"
+m_metric_name['remote_update']      = "Number of Remote Updates"
+m_metric_name['update_cost']        = "Update Cost"
+m_metric_name['req_trig_m_inv']     = "Number of Requests Triggering a M.inv"
+m_metric_name['local_m_inv']        = "Number of Local Multi Inval"
+m_metric_name['remote_m_inv']       = "Number of Remote Multi Inval"
+m_metric_name['m_inv_cost']         = "Multi Inval Cost"
+m_metric_name['broadcast']          = "Number of Broadcasts"
+m_metric_name['broadcast']          = "Total Number of Broadcasts"
+m_metric_name['local_cleanup']      = "Number of Local Cleanups"
+m_metric_name['remote_cleanup']     = "Number of Remote Cleanups"
+m_metric_name['cleanup_cost']       = "Cleanup Cost"
+m_metric_name['nb_read_miss']       = "Number of Read Miss (in L2)"
+m_metric_name['write_miss']         = "Number of Write Miss (in L2)"
+m_metric_name['write_dirty']        = "Number of Write Dirty (from L2 to Memory)"
+m_metric_name['read_hit_trt']       = "Number of Reads Blocked by a Hit in TRT" # Reads blocked by a hit in the TRT
+m_metric_name['trans_full_trt']     = "Number of Transactions Blocked because the TRT is Full" # Transactions blocked because the TRT is full
+m_metric_name['put']                = "Number of PUT to Memory"
+m_metric_name['get']                = "Number of GET from Memory"
+m_metric_name['write_broadcast']    = "Number of Broadcasts Trig. by Writes"
+
+m_metric_name['total_read']         = "Total Number of Reads"
+m_metric_name['total_write']        = "Total Number of Writes"
+m_metric_name['total_ll']           = "Total Number of LL"
+m_metric_name['total_sc']           = "Total Number of SC"
+m_metric_name['total_cas']          = "Total Number of CAS"
+m_metric_name['total_update']       = "Total Number of Updates"
+m_metric_name['total_m_inv']        = "Total Number of Multi Inval"
+m_metric_name['total_cleanup']      = "Total Number of Cleanups"
+m_metric_name['total_direct']       = "Total Number of Direct Requests"
+m_metric_name['nonwrite_broadcast'] = "Number of Broadcasts not Trig. by Writes"
+m_metric_name['broadcast_cost']     = "Broadcast Cost"
+m_metric_name['direct_cost']        = "Direct Requests Cost"
+m_metric_name['total_stacked']      = "??" # Normalization factor
+
+
+
+m_metric_norm = {} # "N" (None), P (#procs), C (#cycles), W (#writes), R (#reads), D (#direct req -- R ou W), n (value with n proc(s))
+m_metric_norm['req_trig_update']   = "C"
+m_metric_norm['local_update']      = "C"
+m_metric_norm['remote_update']     = "C"
+m_metric_norm['update_cost']       = "C"
+m_metric_norm['req_trig_m_inv']    = "C"
+m_metric_norm['local_m_inv']       = "C"
+m_metric_norm['remote_m_inv']      = "C"
+m_metric_norm['m_inv_cost']        = "C"
+m_metric_norm['broadcast']         = "C"
+m_metric_norm['total_update']      = "C"
+m_metric_norm['total_m_inv']       = "C"
+
+m_norm_factor_name = {}
+m_norm_factor_name['N']   = ""
+m_norm_factor_name['P']   = "Normalized w.r.t.\\nthe Number of Processors"
+m_norm_factor_name['C']   = "Normalized w.r.t.\\nthe Number of Cycles (x 1000)"
+m_norm_factor_name['W']   = "Normalized w.r.t.\\nthe Number of Writes"
+m_norm_factor_name['R']   = "Normalized w.r.t.\\nthe Number of Reads"
+m_norm_factor_name['D']   = "Normalized w.r.t.\\nthe Number of Direct Requests"
+m_norm_factor_name['1']   = "Normalized w.r.t.\\nthe Value on 1 Processor"
+m_norm_factor_name['4']   = "Normalized w.r.t.\\nthe Value on 4 Processors"
+m_norm_factor_name['8']   = "Normalized w.r.t.\\nthe Value on 8 Processors"
+m_norm_factor_name['16']  = "Normalized w.r.t.\\nthe Value on 16 Processors"
+m_norm_factor_name['32']  = "Normalized w.r.t.\\nthe Value on 32 Processors"
+m_norm_factor_name['64']  = "Normalized w.r.t.\\nthe Value on 64 Processors"
+m_norm_factor_name['128'] = "Normalized w.r.t.\\nthe Value on 128 Processors"
+m_norm_factor_name['256'] = "Normalized w.r.t.\\nthe Value on 256 Processors"
+
+
+
+colors = [ "\"#008000\"", "\"#000080\"", "\"#BADC98\"", "\"#BA98DC\"", "\"#98DCBA\"", "\"#98BADC\"", "\"#BA9876\"", "\"#BA7698\"", "\"#98BA76\"", "\"#9876BA\"", "\"#76BA98\"", "\"#7698BA\"" ]
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/create_graphs.py
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/create_graphs.py	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/create_graphs.py	(revision 724)
@@ -0,0 +1,527 @@
+#!/usr/bin/python
+
+import subprocess
+import os
+import re
+
+
+
+apps = [ 'histogram', 'mandel', 'filter', 'radix_ga', 'fft_ga', 'kmeans' ]
+nb_procs = [ 1, 4, 8, 16, 32, 64, 128, 256 ]
+
+top_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")
+scripts_path = os.path.join(top_path, 'scripts')
+counter_defs_name = os.path.join(scripts_path, "counter_defs.py")
+
+exec(file(counter_defs_name))
+
+gen_dir = 'generated'
+graph_dir = 'graph'
+template_dir = 'templates'
+data_dir = 'data'
+
+log_init_name = 'log_init_'
+log_term_name = 'log_term_'
+
+coherence_tmpl = os.path.join(scripts_path, template_dir, 'coherence_template.gp') # 1 graph per appli
+speedup_tmpl   = os.path.join(scripts_path, template_dir, 'speedup_template.gp')
+metric_tmpl    = os.path.join(scripts_path, template_dir, 'metric_template.gp') # 1 graph per metric
+stacked_tmpl   = os.path.join(scripts_path, template_dir, 'stacked_template.gp')
+
+
+
+def create_file(name, content):
+   file = open(name, 'w')
+   file.write(content)
+   file.close()
+   
+def is_numeric(s):
+   try:
+      float(s)
+      return True
+   except ValueError:
+      return False
+
+def get_x_y(nb_procs):
+   x = 1
+   y = 1
+   to_x = True
+   while (x * y * 4 < nb_procs):
+      if to_x:
+         x = x * 2
+      else:
+         y = y * 2
+      to_x = not to_x
+   return x, y
+
+
+
+# We first fill the m_metric_id table
+for metric in all_metrics:
+   for tag in all_tags:
+      if m_metric_tag[metric] == tag:
+         m_metric_id[tag] = metric
+         break
+
+
+# We start by processing all the log files
+# Term files are processed for exec time only
+# Init files are processed for all metrics
+exec_time = {}
+metrics_val = {}
+for app in apps:
+   exec_time[app] = {}
+   metrics_val[app] = {}
+   for i in nb_procs:
+      metrics_val[app][i] = {}
+      log_init_file = os.path.join(scripts_path, data_dir, app + '_' + log_init_name + str(i))
+      log_term_file = os.path.join(scripts_path, data_dir, app + '_' + log_term_name + str(i))
+
+      # Term
+      lines = open(log_term_file, 'r')
+      for line in lines:
+         tokens = line[:-1].split()
+         if len(tokens) > 0 and tokens[0] == "[ELAPSED2]":
+            exec_time[app][i] = int(tokens[len(tokens) - 1])
+
+      # Init files
+      lines = open(log_init_file, 'r')
+      for line in lines:
+         tokens = line[:-1].split()
+         if len(tokens) == 0:
+            continue
+         tag = tokens[0]
+         value = tokens[len(tokens) - 1]
+         pattern = re.compile('\[0[0-9][0-9]\]')
+         if pattern.match(tag):
+            metric = m_metric_id[tag]
+            if (not metrics_val[app][i].has_key(metric) or tag == "[000]" or tag == "[001]"):
+               # We don't add cycles of all Memcaches (they must be the same for all)
+               metrics_val[app][i][metric] = int(value)
+            else:
+               metrics_val[app][i][metric] += int(value)
+            
+# We make a 2nd pass to fill the derived fields, e.g. nb_total_updates
+for app in apps:
+   for i in nb_procs:
+      x, y = get_x_y(i)
+      metrics_val[app][i]['total_read']     = metrics_val[app][i]['local_read']    + metrics_val[app][i]['remote_read']
+      metrics_val[app][i]['total_write']    = metrics_val[app][i]['local_write']   + metrics_val[app][i]['remote_write']
+      metrics_val[app][i]['total_ll']       = metrics_val[app][i]['local_ll']      + metrics_val[app][i]['remote_ll']
+      metrics_val[app][i]['total_sc']       = metrics_val[app][i]['local_sc']      + metrics_val[app][i]['remote_sc']
+      metrics_val[app][i]['total_cas']      = metrics_val[app][i]['local_cas']     + metrics_val[app][i]['remote_cas']
+      metrics_val[app][i]['total_update']   = metrics_val[app][i]['local_update']  + metrics_val[app][i]['remote_update']
+      metrics_val[app][i]['total_m_inv']    = metrics_val[app][i]['local_m_inv']   + metrics_val[app][i]['remote_m_inv']
+      metrics_val[app][i]['total_cleanup']  = metrics_val[app][i]['local_cleanup'] + metrics_val[app][i]['remote_cleanup']
+      metrics_val[app][i]['total_direct']   = metrics_val[app][i]['total_read']    + metrics_val[app][i]['total_write']
+      metrics_val[app][i]['direct_cost']    = metrics_val[app][i]['read_cost']     + metrics_val[app][i]['write_cost']
+      metrics_val[app][i]['broadcast_cost'] = metrics_val[app][i]['broadcast'] * (x * y - 1)
+      if metrics_val[app][i]['broadcast'] < metrics_val[app][i]['write_broadcast']:
+         # test to patch a bug in mem_cache
+         metrics_val[app][i]['nonwrite_broadcast'] = 0
+      else:
+         metrics_val[app][i]['nonwrite_broadcast'] = metrics_val[app][i]['broadcast'] - metrics_val[app][i]['write_broadcast']
+
+      metrics_val[app][i]['total_stacked'] = 0
+      for stacked_metric in stacked_metrics:
+         metrics_val[app][i]['total_stacked'] += metrics_val[app][i][stacked_metric]
+
+            
+print "mkdir -p", os.path.join(scripts_path, gen_dir)
+subprocess.call([ 'mkdir', '-p', os.path.join(scripts_path, gen_dir) ])
+
+print "mkdir -p", os.path.join(scripts_path, graph_dir)
+subprocess.call([ 'mkdir', '-p', os.path.join(scripts_path, graph_dir) ])
+
+############################################################
+### Graph 1 : Coherence traffic Cost per application     ###
+############################################################
+
+for app in apps:
+    
+   data_coherence_name = os.path.join(scripts_path, gen_dir, app + '_coherence.dat')
+   gp_coherence_name   = os.path.join(scripts_path, gen_dir, app + '_coherence.gp')
+
+   # Creating the data file
+   width = 15
+   content = ""
+   
+   for metric in [ '#nb_procs' ] + grouped_metrics:
+      content += metric + " "
+      nb_spaces = width - len(metric)
+      content += nb_spaces * ' '
+   content += "\n"
+
+   for i in nb_procs:
+      content += "%-15d " % i
+      for metric in grouped_metrics:
+         val = float(metrics_val[app][i][metric]) / exec_time[app][i] * 1000
+         content += "%-15f " % val
+      content += "\n"
+   
+   create_file(data_coherence_name, content)
+
+   # Creating the gp file
+   template_file = open(coherence_tmpl, 'r')
+   template = template_file.read()
+   
+   plot_str = ""
+   col = 2
+   for metric in grouped_metrics:
+      if metric != grouped_metrics[0]:
+         plot_str += ", \\\n    "
+      plot_str += "\"" + data_coherence_name + "\" using ($1):($" + str(col) + ") lc rgb " + colors[col - 2] + " title \"" + m_metric_name[metric] + "\" with linespoint"
+      col += 1
+   gp_commands = template % dict(app_name = m_app_name[app], nb_procs = nb_procs[-1] + 1, plot_str = plot_str, svg_name = os.path.join(graph_dir, app + '_coherence'))
+   
+   create_file(gp_coherence_name, gp_commands)
+   
+   # Calling gnuplot
+   print "gnuplot", gp_coherence_name
+   subprocess.call([ 'gnuplot', gp_coherence_name ])
+
+
+############################################################
+### Graph 2 : Speedup per Application                    ###
+############################################################
+
+for app in apps:
+
+   data_speedup_name   = os.path.join(scripts_path, gen_dir, app + '_speedup.dat')
+   gp_speedup_name     = os.path.join(scripts_path, gen_dir, app + '_speedup.gp')
+   
+   # Creating data file
+   width = 15
+   content = "#nb_procs"
+   nb_spaces = width - len(content)
+   content += nb_spaces * ' '
+   content += "speedup\n"
+
+   for i in nb_procs:
+      content += "%-15d " % i
+      val = exec_time[app][i]
+      content += "%-15f\n" % (exec_time[app][1] / float(val))
+
+   plot_str = "\"" + data_speedup_name + "\" using ($1):($2) lc rgb \"#654387\" title \"Speedup\" with linespoint"
+   
+   create_file(data_speedup_name, content)
+   
+   # Creating the gp file
+   template_file = open(speedup_tmpl, 'r')
+   template = template_file.read()
+   
+   gp_commands = template % dict(appli = m_app_name[app], nb_procs = nb_procs[-1] + 1, plot_str = plot_str, svg_name = os.path.join(graph_dir, app + '_speedup'))
+   
+   create_file(gp_speedup_name, gp_commands)
+   
+   # Calling gnuplot
+   print "gnuplot", gp_speedup_name
+   subprocess.call([ 'gnuplot', gp_speedup_name ])
+
+
+############################################################
+### Graph 3 : All speedups on the same Graph             ###
+############################################################
+
+# This graph uses the same template as the graph 2
+
+data_speedup_name = os.path.join(scripts_path, gen_dir, 'all_speedup.dat')
+gp_speedup_name   = os.path.join(scripts_path, gen_dir, 'all_speedup.gp')
+
+# Creating data file
+width = 15
+content = "#nb_procs"
+nb_spaces = width - len(content)
+content += (nb_spaces + 1) * ' '
+for app in apps:
+   content += app + " "
+   content += (width - len(app)) * " "
+content += "\n"
+
+for i in nb_procs:
+   content += "%-15d " % i
+   for app in apps:
+      val = exec_time[app][i]
+      content += "%-15f " % (exec_time[app][1] / float(val))
+   content += "\n"
+
+create_file(data_speedup_name, content)
+
+# Creating gp file
+template_file = open(speedup_tmpl, 'r')
+template = template_file.read()
+
+plot_str = ""
+col = 2
+for app in apps:
+   if app != apps[0]:
+      plot_str += ", \\\n     "
+   plot_str += "\"" + data_speedup_name + "\" using ($1):($" + str(col) + ") lc rgb %s title \"" % (colors[col - 2])  + m_app_name[app] + "\" with linespoint"
+   col += 1
+
+gp_commands = template % dict(appli = "All Applications", nb_procs = nb_procs[-1] + 1, plot_str = plot_str, svg_name = os.path.join(graph_dir, 'all_speedup'))
+   
+create_file(gp_speedup_name, gp_commands)
+   
+# Calling gnuplot
+print "gnuplot", gp_speedup_name
+subprocess.call([ 'gnuplot', gp_speedup_name ])
+
+
+############################################################
+### Graph 4 : Graph per metric                           ###
+############################################################
+
+# The following section creates the graphs grouped by measure (e.g. #broadcasts)
+# The template file cannot be easily created otherwise it would not be generic
+# in many ways. This is why it is mainly created here.
+# Graphs are created for metric in the "individual_metrics" list
+
+for metric in individual_metrics:
+   data_metric_name = os.path.join(scripts_path, gen_dir, metric + '.dat')
+   gp_metric_name   = os.path.join(scripts_path, gen_dir, metric + '.gp')
+
+   # Creating the gp file
+   # Setting xtics, i.e. number of procs for each application
+   xtics_str = "("
+   first = True
+   xpos = 1
+   app_labels = ""
+   for num_appli in range(0, len(apps)):
+      for i in nb_procs:
+         if not first:
+            xtics_str += ", "
+         first = False
+         if i == nb_procs[0]:
+            xpos_first = xpos
+         xtics_str += "\"%d\" %.1f" % (i, xpos)
+         xpos_last = xpos
+         xpos += 1.5
+      xpos += 0.5
+      app_name_xpos = float((xpos_first + xpos_last)) / 2
+      app_labels += "set label \"%s\" at first %f,character 1 center font\"Times,12\"\n" % (m_app_name[apps[num_appli]], app_name_xpos)
+   xtics_str += ")"
+
+   xmax_val = xpos + 0.5
+
+   # Writing the lines of "plot"
+   plot_str = ""
+   xpos = 0
+   first = True
+   column = 2
+   for i in range(0, len(nb_procs)):
+      if not first:
+         plot_str += ", \\\n    "
+      first = False
+      plot_str += "\"%s\" using ($1+%.1f):($%d) lc rgb %s notitle with boxes" % (data_metric_name, xpos, column, colors[i])
+      column += 1
+      xpos += 1.5
+
+   template_file = open(metric_tmpl, 'r')
+   template = template_file.read()
+
+   gp_commands = template % dict(xtics_str = xtics_str, app_labels = app_labels, ylabel_str = m_metric_name[metric], norm_factor_str = m_norm_factor_name[m_metric_norm[metric]], xmax_val = xmax_val, plot_str = plot_str, svg_name = os.path.join(graph_dir, metric))
+
+   create_file(gp_metric_name, gp_commands)
+   
+   # Creating the data file
+   width = 15
+   content = "#x_pos"
+   nb_spaces = width - len(content)
+   content += nb_spaces * ' '
+   for i in nb_procs:
+      content += "%-15d" % i
+   content += "\n"
+
+   x_pos = 1
+   for app in apps:
+      # Computation of x_pos
+      content += "%-15f" % x_pos
+      x_pos += len(nb_procs) * 1.5 + 0.5
+      for i in nb_procs:
+         if m_metric_norm[metric] == "N":
+            content += "%-15d" % (metrics_val[app][i][metric])
+         elif m_metric_norm[metric] == "P":
+            content += "%-15f" % (float(metrics_val[app][i][metric]) / i)
+         elif m_metric_norm[metric] == "C":
+            content += "%-15f" % (float(metrics_val[app][i][metric]) / exec_time[app][i] * 1000)
+         elif m_metric_norm[metric] == "W":
+            content += "%-15f" % (float(metrics_val[app][i][metric]) / float(metrics_val[app][i]['total_write'])) # Number of writes
+         elif m_metric_norm[metric] == "R":
+            content += "%-15f" % (float(metrics_val[app][i][metric]) / float(metrics_val[app][i]['total_read'])) # Number of reads
+         elif m_metric_norm[metric] == "D":
+            content += "%-15f" % (float(metrics_val[app][i][metric]) / float(metrics_val[app][i]['total_direct'])) # Number of req.
+         elif is_numeric(m_metric_norm[metric]):
+            content += "%-15f" % (float(metrics_val[app][i][metric]) / float(metrics_val[app][int(m_metric_norm[metric])][metric]))
+         else:
+            assert(False)
+
+      app_name = m_app_name[app]
+      content += "#" + app_name + "\n"
+   
+   create_file(data_metric_name, content)
+
+   # Calling gnuplot
+   print "gnuplot", gp_metric_name
+   subprocess.call([ 'gnuplot', gp_metric_name ])
+
+
+############################################################
+### Graph 5 : Stacked histogram with counters            ###
+############################################################
+
+# The following section creates a stacked histogram containing
+# the metrics in the "stacked_metric" list
+# It is normalized per application w.r.t the values on 256 procs
+
+data_stacked_name = os.path.join(scripts_path, gen_dir, 'stacked.dat')
+gp_stacked_name   = os.path.join(scripts_path, gen_dir, 'stacked.gp')
+
+norm_factor_value = 256
+
+# Creating the gp file
+template_file = open(stacked_tmpl, 'r')
+template = template_file.read()
+
+xtics_str = "("
+first = True
+xpos = 1
+app_labels = ""
+for num_appli in range(0, len(apps)):
+   for i in nb_procs:
+      if not first:
+         xtics_str += ", "
+      first = False
+      if i == nb_procs[0]:
+         xpos_first = xpos
+      xtics_str += "\"%d\" %d -1" % (i, xpos)
+      xpos_last = xpos
+      xpos += 1
+   xpos += 1
+   app_name_xpos = float((xpos_first + xpos_last)) / 2
+   app_labels += "set label \"%s\" at first %f,character 1 center font\"Times,12\"\n" % (m_app_name[apps[num_appli]], app_name_xpos)
+xtics_str += ")"
+
+plot_str = "newhistogram \"\""
+n = 1
+for stacked_metric in stacked_metrics:
+   plot_str += ", \\\n    " + "'" + data_stacked_name + "'" + " using " + str(n) + " lc rgb " + colors[n] + " title \"" + m_metric_name[stacked_metric] + "\""
+   n += 1
+
+ylabel_str = "Breakdown of Coherence Traffic Normalized w.r.t. \\nthe Values on %d Processors" % norm_factor_value
+content = template % dict(svg_name = os.path.join(graph_dir, 'stacked'), xtics_str = xtics_str, plot_str = plot_str, ylabel_str = ylabel_str, app_labels = app_labels)
+
+create_file(gp_stacked_name, content)
+
+# Creating the data file
+# Values are normalized by application, w.r.t. the number of requests for a given number of procs
+content = "#"
+for stacked_metric in stacked_metrics:
+   content += stacked_metric
+   content += ' ' + ' ' * (15 - len(stacked_metric))
+content += "\n"
+for app in apps:
+   if app != apps[0]:
+      for i in range(0, len(stacked_metrics)):
+         content += "%-15f" % 0.0
+      content += "\n"
+   for i in nb_procs:
+      for stacked_metric in stacked_metrics:
+         content += "%-15f" % (float(metrics_val[app][i][stacked_metric]) / metrics_val[app][norm_factor_value]['total_stacked'])
+      content += "\n"
+
+create_file(data_stacked_name, content)
+# Calling gnuplot
+print "gnuplot", gp_stacked_name
+subprocess.call([ 'gnuplot', gp_stacked_name ])
+
+
+
+#################################################################################
+### Graph 6 : Stacked histogram with coherence cost compared to r/w cost      ###
+#################################################################################
+
+# The following section creates pairs of stacked histograms, normalized w.r.t. the first one.
+# The first one contains the cost of reads and writes, the second contains the cost
+# of m_inv, m_up and broadcasts (extrapolated)
+
+data_cost_filename = os.path.join(scripts_path, gen_dir, 'relative_cost.dat')
+gp_cost_filename   = os.path.join(scripts_path, gen_dir, 'relative_cost.gp')
+
+direct_cost_metrics = [ 'read_cost', 'write_cost' ]
+coherence_cost_metrics = ['update_cost', 'm_inv_cost', 'broadcast_cost' ]
+
+# Creating the gp file
+template_file = open(stacked_tmpl, 'r')
+template = template_file.read()
+
+xtics_str = "("
+first = True
+xpos = 1.5
+app_labels = ""
+for num_appli in range(0, len(apps)):
+   first_proc = True
+   for i in nb_procs:
+      if i > 4:
+         if not first:
+            xtics_str += ", "
+         first = False
+         if first_proc:
+            first_proc = False
+            xpos_first = xpos
+         xtics_str += "\"%d\" %f -1" % (i, xpos)
+         xpos_last = xpos
+         xpos += 3
+   app_name_xpos = float((xpos_first + xpos_last)) / 2
+   app_labels += "set label \"%s\" at first %f,character 1 center font\"Times,12\"\n" % (m_app_name[apps[num_appli]], app_name_xpos)
+   xpos += 1
+xtics_str += ")"
+
+plot_str = "newhistogram \"\""
+n = 1
+for cost_metric in direct_cost_metrics + coherence_cost_metrics:
+   plot_str += ", \\\n    " + "'" + data_cost_filename + "'" + " using " + str(n) + " lc rgb " + colors[n] + " title \"" + m_metric_name[cost_metric] + "\""
+   n += 1
+
+ylabel_str = "Coherence Cost Compared to Direct Requests Cost,\\nNormalized per Application for each Number of Processors"
+content = template % dict(svg_name = os.path.join(graph_dir, 'rel_cost'), xtics_str = xtics_str, plot_str = plot_str, ylabel_str = ylabel_str, app_labels = app_labels)
+
+create_file(gp_cost_filename, content)
+
+# Creating the data file
+# Values are normalized by application, w.r.t. the number of requests for a given number of procs
+content = "#"
+for cost_metric in direct_cost_metrics:
+   content += cost_metric
+   content += ' ' + ' ' * (15 - len(cost_metric))
+for cost_metric in coherence_cost_metrics:
+   content += cost_metric
+   content += ' ' + ' ' * (15 - len(cost_metric))
+content += "\n"
+for app in apps:
+   if app != apps[0]:
+      for i in range(0, len(direct_cost_metrics) + len(coherence_cost_metrics)):
+         content += "%-15f" % 0.0
+      content += "\n"
+   for i in nb_procs:
+      if i > 4:
+         for cost_metric in direct_cost_metrics:
+            content += "%-15f" % (float(metrics_val[app][i][cost_metric]) / metrics_val[app][i]['direct_cost'])
+         for cost_metric in coherence_cost_metrics:
+            content += "%-15f" % 0.0
+         content += "\n"
+         for cost_metric in direct_cost_metrics:
+            content += "%-15f" % 0.0
+         for cost_metric in coherence_cost_metrics:
+            content += "%-15f" % (float(metrics_val[app][i][cost_metric]) / metrics_val[app][i]['direct_cost'])
+         content += "\n"
+         for i in range(0, len(direct_cost_metrics) + len(coherence_cost_metrics)):
+            content += "%-15f" % 0.0
+         content += "\n"
+
+create_file(data_cost_filename, content)
+# Calling gnuplot
+print "gnuplot", gp_cost_filename
+subprocess.call([ 'gnuplot', gp_cost_filename ])
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/gen_arch_info_large.sh
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/gen_arch_info_large.sh	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/gen_arch_info_large.sh	(revision 724)
@@ -0,0 +1,236 @@
+#! /bin/bash
+
+#--------------------------------------------------------------------
+# File      : gen_arch_info_large.sh
+#--------------------------------------------------------------------
+
+NB_TTY=4
+TTY_CHANNEL_SIZE=0x10
+TTY_SIZE=0x1000
+
+DMA_SIZE=0x1000
+XICU_SIZE=0x1000
+BDEV_SIZE=0x1000
+# FrameBuffer size
+#FB_SIZE=0x80000
+FB_SIZE=0x200000
+
+MEMC_TGTID=0
+XICU_TGTID=1
+MDMA_TGTID=2
+MTTY_TGTID=3
+BDEV_TGTID=4
+MNIC_TGTID=5
+BROM_TGTID=6
+CDMA_TGTID=7
+SIMH_TGTID=8
+FBUF_TGTID=9
+
+
+# Physical address width
+ADDR_WIDTH=32
+
+# Default values
+DEFAULT_X_MAX=8
+DEFAULT_Y_MAX=8
+DEFAULT_CPU_PER_CLUSTER=4
+
+function mymin()
+{
+   if test $1 -lt $2 ; then
+      echo "$1"
+   else
+      echo "$2"
+   fi
+}
+
+#------------------------
+
+X_MAX=${1-$DEFAULT_X_MAX}
+Y_MAX=${2-$DEFAULT_Y_MAX}
+NPROCS=$DEFAULT_CPU_PER_CLUSTER
+
+#------------------------
+CLUSTER_INC=$((0x80000000 / (X_MAX * Y_MAX) * 2))
+MAX_MEMC_SIZE=$((0x40000000 / (X_MAX * Y_MAX)))
+size=$(mymin $MAX_MEMC_SIZE $((0x04000000)))
+MEMC_SIZE=$(printf "0x%X" $size)
+
+
+print_comments()
+{
+    date=$(date "+%c")
+    echo "# TSAR hardware description in BIB (Boot Information Block) format"
+    echo "# This file is autogenerated by the command: $0 $X_MAX $Y_MAX $NPROCS $BSCPU"
+    echo "# It is ready to be passed to info2bib utility so the binary format can be generated"
+    echo " "
+    echo "# $USER on $HOSTNAME $date" 
+    echo " "
+    echo " "
+}
+
+print_header()
+{
+    echo "[HEADER]"
+    echo "        REVISION=1"
+    echo "        ARCH=SOCLIB-TSAR"
+    echo "        XMAX=$X_MAX"
+    echo "        YMAX=$Y_MAX"
+    echo "        CPU_NR=$NPROCS"
+    echo "        BSCPU=$BSCPU"
+    echo "        BSTTY=$BSTTY"
+    echo "        BSDMA=$BSDMA"
+    echo " "
+    echo " "
+}
+
+print_cluster()
+{
+    offset=$1
+    cid=$2
+    memc_base=$(printf "0x%X" $offset)
+    memc_size=$(printf "0x%X" $MEMC_SIZE)
+    xicu_base=$(printf "0x%X" $((offset + (CLUSTER_INC / 2) + (XICU_TGTID << 19))))
+    dma_base=$(printf "0x%X" $((offset  + (CLUSTER_INC / 2) + (MDMA_TGTID << 19))))
+    
+    echo "[CLUSTER]"
+    echo "         CID="$cid
+    echo "         CPU_NR="$NPROCS
+    echo "         DEV_NR=3"
+    echo "         DEVID=RAM       BASE=$memc_base         SIZE=$memc_size     IRQ=-1"
+    echo "         DEVID=XICU      BASE=$xicu_base         SIZE=$DMA_SIZE         IRQ=-1"
+    echo "         DEVID=DMA       BASE=$dma_base         SIZE=$XICU_SIZE         IRQ=8"
+    echo " "
+    echo " "
+}
+
+print_io_cluster()
+{
+    offset=$1
+    cid=$2
+    memc_base=$(printf "0x%X" $offset)
+    memc_size=$(printf "0x%X" $MEMC_SIZE)
+    xicu_base=$(printf "0x%X" $((offset + (CLUSTER_INC / 2) + (XICU_TGTID << 19))))
+    dma_base=$(printf "0x%X" $((offset  + (CLUSTER_INC / 2) + (MDMA_TGTID << 19))))
+    bdev_base=$(printf "0x%X" $((offset + (CLUSTER_INC / 2) + (BDEV_TGTID << 19))))
+    tty_base=$(printf "0x%X" $((offset  + (CLUSTER_INC / 2) + (MTTY_TGTID << 19))))
+    fbf_base=$(printf "0x%X" $((offset  + (CLUSTER_INC / 2) + (FBUF_TGTID << 19))))
+
+    echo "[CLUSTER]"
+    echo "         CID="$cid
+    echo "         CPU_NR="$NPROCS
+    echo "         DEV_NR=9"
+    echo "         DEVID=RAM       BASE=$memc_base         SIZE=$memc_size     IRQ=-1"
+    echo "         DEVID=XICU      BASE=$xicu_base         SIZE=$XICU_SIZE         IRQ=-1"
+    echo "         DEVID=DMA       BASE=$dma_base         SIZE=$DMA_SIZE         IRQ=8"
+    echo "         DEVID=BLKDEV    BASE=$bdev_base         SIZE=$BDEV_SIZE         IRQ=31"
+    ntty=0
+    irq=16
+    while test $ntty -lt $NB_TTY
+    do
+       tty_base_i=$(printf "0x%X" $((tty_base + ntty * TTY_CHANNEL_SIZE)))
+       echo "         DEVID=TTY       BASE=$tty_base_i         SIZE=$TTY_CHANNEL_SIZE           IRQ=$irq"
+       irq=$((irq + 1))
+       ntty=$((ntty + 1))
+    done
+    echo "         DEVID=FB        BASE=$fbf_base         SIZE=$FB_SIZE        IRQ=-1"
+    echo " "
+    echo " "
+}
+
+# Derive X_WIDTH form X_MAX
+case $X_MAX in
+    1)      X_WIDTH=0
+   ;;
+
+    2)      X_WIDTH=1
+	;;
+    
+    [3-4])  X_WIDTH=2
+	;;
+
+    [5-8])  X_WIDTH=3
+	;;
+
+    *)      X_WIDTH=4
+	;;
+esac
+
+# Derive Y_WIDTH form Y_MAX
+case $Y_MAX in
+    1)      Y_WIDTH=0
+   ;;
+
+
+    2)      Y_WIDTH=1
+	;;
+    
+    [3-4])  Y_WIDTH=2
+	;;
+
+    [5-8])  Y_WIDTH=3
+	;;
+
+    *)      Y_WIDTH=4
+	;;
+esac
+
+x=0; y=0
+io_cid=$((0xbf >> (8 - X_WIDTH - Y_WIDTH)))
+BSCPU=$(($io_cid * $NPROCS))
+
+break_loop=0
+while test $x -lt $X_MAX
+do
+   while test $y -lt $Y_MAX
+   do
+      cid=$((x * Y_MAX + y))  
+      offset=$((cid  << (ADDR_WIDTH - X_WIDTH - Y_WIDTH)))
+
+      if [ $cid -eq $io_cid ]
+      then
+         BSDMA=$(printf "0x%X" $((offset  + (CLUSTER_INC / 2) + (MDMA_TGTID << 19))))
+         BSTTY=$(printf "0x%X" $((offset  + (CLUSTER_INC / 2) + (MTTY_TGTID << 19))))
+         break_loop=1
+         break
+      else
+         BSDMA="error"
+      fi
+
+      y=$((y + 1))
+   done
+   if test $break_loop -eq 1 ; then
+      break
+   fi
+   y=0
+   x=$((x + 1))
+done
+
+# Generate the description
+print_comments "$0"
+print_header
+
+x=0; y=0
+while test $x -lt $X_MAX
+do
+   while test $y -lt $Y_MAX
+   do
+      cid=$((x * Y_MAX + y))  
+      offset=$((cid  << (ADDR_WIDTH - X_WIDTH - Y_WIDTH)))
+
+      if [ $cid -eq $io_cid ]
+      then
+         print_io_cluster $offset $cid
+      else
+         print_cluster $offset $cid
+      fi
+
+      y=$((y + 1))
+   done
+   y=0
+   x=$((x + 1))
+done 
+
+#-------------------------------------------------------------------------#
+#                                End of script                            #
+#-------------------------------------------------------------------------#
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/run_simus.py
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/run_simus.py	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/run_simus.py	(revision 724)
@@ -0,0 +1,351 @@
+#!/usr/bin/python
+
+import subprocess
+import os
+import sys
+
+#TODO: recopier les fichiers d'entrees dans le script en fonction de l'appli selectionnee
+# Par exemple, tk14.O pour LU, img.raw pour ep_filter, etc.
+
+data_dir = 'data'
+log_init_name = 'log_init_'
+log_term_name = 'log_term_'
+
+
+nb_procs = [ 4 ]
+#nb_procs = [ 1, 4, 8, 16, 32, 64, 128, 256 ]
+rerun_stats = True
+use_omp = False
+
+#apps = [ 'histogram', 'mandel', 'filter', 'radix_ga', 'fft_ga', 'kmeans' ]
+#apps = [ 'histogram', 'mandel', 'filter', 'radix_ga', 'fft_ga' ]
+apps = [ 'filt_ga' ]
+
+
+all_apps = [ 'mandel', 'filter', 'filt_ga', 'histogram', 'kmeans', 'barnes', 'fmm', 'ocean', 'raytrace', 'radiosity', 'waters', 'watern', 'cholesky', 'lu', 'fft', 'radix', 'fft_ga', 'radix_ga', 'kmeans' ]
+splash2 = [ 'barnes', 'fmm', 'ocean', 'radiosity', 'raytrace', 'watern', 'waters', 'cholesky', 'lu', 'fft', 'radix' ]
+splash2_ga = [ 'radix_ga', 'fft_ga' ]
+
+
+config_name = os.path.join(os.path.dirname(os.path.realpath(__file__)), "config.py")
+if not os.path.isfile(config_name):
+   help_str = '''
+You should create a file named config.py in this directory with the following definitions:
+ - apps_dir:      path to almos-tsar-mipsel/apps directory
+ - almos_src_dir: path to almos source directory (for kernel and bootloader binaries)
+ - hdd_img_name:  path to the hdd image to use
+*** Stopping execution
+'''
+   print help_str
+   sys.exit()
+
+exec(file(config_name))
+
+top_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")
+
+splash2_dir    = os.path.join(apps_dir, 'splash2/codes')
+splash2_ga_dir = os.path.join(apps_dir, 'splash2_ga')
+
+scripts_path       = os.path.join(top_path, 'scripts')
+almos_path         = os.path.join(top_path, 'almos')
+arch_info_name     = os.path.join(almos_path, "arch-info-gen.info")
+arch_info_bib_name = os.path.join(almos_path, 'arch-info.bib')
+hdd_img_file_name  = os.path.join(almos_path, "hdd-img.bin")
+shrc_file_name     = os.path.join(almos_path, "shrc")
+hard_config_name   = os.path.join(almos_path, "hard_config.h")
+
+topcell_name = "top.cpp"
+
+
+splash_app_dir = {}
+splash_app_dir['barnes'] = 'apps/barnes'
+splash_app_dir['fmm'] = 'apps/fmm'
+splash_app_dir['ocean'] = 'apps/ocean/contiguous_partitions'
+splash_app_dir['raytrace'] = 'apps/raytrace'
+splash_app_dir['radiosity'] = 'apps/radiosity'
+#splash_app_dir['volrend'] = 'apps/volrend'
+splash_app_dir['watern'] = 'apps/water-nsquared'
+splash_app_dir['waters'] = 'apps/water-spatial'
+
+splash_app_dir['cholesky'] = 'kernels/cholesky'
+splash_app_dir['fft'] = 'kernels/fft'
+splash_app_dir['lu'] = 'kernels/lu/contiguous_blocks'
+splash_app_dir['radix'] = 'kernels/radix'
+
+splash_ga_app_dir = {}
+splash_ga_app_dir['radix_ga'] = 'apps/radix'
+splash_ga_app_dir['fft_ga'] = 'apps/fft'
+
+
+def get_x_y(nb_procs):
+   x = 1
+   y = 1
+   to_x = True
+   while (x * y * 4 < nb_procs):
+      if to_x:
+         x = x * 2
+      else:
+         y = y * 2
+      to_x = not to_x
+   return x, y
+
+
+
+def gen_hard_config(x, y, hard_config):
+   header = '''
+/* Generated from run_simus.py */
+
+#ifndef _HD_CONFIG_H
+#define _HD_CONFIG_H
+
+#define	 X_SIZE              %(x)d
+#define	 Y_SIZE              %(y)d
+#define	 NB_CLUSTERS         %(nb_clus)d
+#define	 NB_PROCS_MAX        4
+#define	 NB_TASKS_MAX        8
+
+#define	 NB_TIM_CHANNELS     32
+#define	 NB_DMA_CHANNELS     1
+
+#define	 NB_TTY_CHANNELS     4
+#define	 NB_IOC_CHANNELS     1
+#define	 NB_NIC_CHANNELS     0
+#define	 NB_CMA_CHANNELS     0
+
+#define	 USE_XICU            1
+#define	 IOMMU_ACTIVE        0
+
+#define   IRQ_PER_PROCESSOR   1
+
+#endif //_HD_CONFIG_H
+''' % dict(x = x, y = y, nb_clus = x * y)
+   file = open(hard_config, 'w')
+   file.write(header)
+   file.close()
+
+
+def gen_arch_info(x, y, arch_info, arch_info_bib):
+   old_path = os.getcwd()
+   print "cd", scripts_path
+   os.chdir(scripts_path)
+   print "./gen_arch_info_large.sh", str(x), str(y), ">", arch_info
+   output = subprocess.Popen([ './gen_arch_info_large.sh', str(x), str(y) ], stdout = subprocess.PIPE).communicate()[0]
+   os.chdir(almos_path)
+   file = open(arch_info, 'w')
+   file.write(output)
+   file.close()
+   print "./info2bib -i", arch_info, "-o", arch_info_bib
+   subprocess.call([ './info2bib', '-i', arch_info, '-o', arch_info_bib ])
+   print "cd", old_path
+   os.chdir(old_path)
+   
+
+def gen_sym_links():
+   old_path = os.getcwd()
+   print "cd", almos_path
+   os.chdir(almos_path)
+
+   target = os.path.join(almos_src_dir, 'tools/soclib-bootloader/bootloader-tsar-mipsel.bin')
+   link_name = 'bootloader-tsar-mipsel.bin'
+   if not os.path.isfile(link_name):
+      print "ln -s", target, link_name
+      os.symlink(target, link_name)
+
+   target = os.path.join(almos_src_dir, 'kernel/obj.tsar/almix-tsar-mipsel.bin')
+   link_name = 'kernel-soclib.bin'
+   if not os.path.isfile(link_name):
+      print "ln -s", target, link_name
+      os.symlink(target, link_name)
+
+   target = hdd_img_name
+   link_name = 'hdd-img.bin'
+   if not os.path.isfile(link_name):
+      print "ln -s", target, link_name
+      os.symlink(target, link_name)
+
+   os.chdir(old_path)
+
+
+
+def compile_app(app_name, nprocs):
+
+   if app_name in splash2:
+      app_dir_name = os.path.join(splash2_dir, splash_app_dir[app_name])
+   elif app_name in splash2_ga:
+      app_dir_name = os.path.join(splash2_ga_dir, splash_ga_app_dir[app_name])
+   else:
+      app_dir_name = os.path.join(apps_dir, app_name)
+
+   old_path = os.getcwd()
+   print "cd", app_dir_name
+   os.chdir(app_dir_name)
+
+   # Compilation process is different in splash and other apps
+   if app_name in splash2:
+      print "make clean"
+      subprocess.call([ 'make', 'clean' ])
+
+      print "rm Makefile"
+      subprocess.call([ 'rm', 'Makefile' ])
+
+      print "ln -s Makefile.soclib Makefile"
+      subprocess.call([ 'ln', '-s', 'Makefile.soclib', 'Makefile' ])
+
+      print "make"
+      subprocess.call([ 'make' ])
+
+   elif app_name in splash2_ga:
+      print "make clean"
+      subprocess.call([ 'make', 'clean' ])
+
+      print "make"
+      subprocess.call([ 'make' ])
+
+   else:
+      print "make clean"
+      subprocess.call([ 'make', 'clean' ])
+ 
+      print "make TARGET=tsar"
+      subprocess.call([ 'make', 'TARGET=tsar' ])
+   
+   # Creation/Modification du shrc de almos
+   if (app_name == "boot_only"):
+      shrc = "exec -p 0 /bin/boot_onl\n"
+   elif (app_name == "mandel"):
+      shrc = "exec -p 0 /bin/mandel -n%(nproc)d\n" % dict(nproc = nprocs)
+   elif (app_name == "filter"):
+      #shrc = "exec -p 0 /bin/filter /etc/imgs.raw 512 512\n"
+      shrc = "exec -p 0 /bin/filter -l1024 -c1024 -n%(nproc)d /etc/img.raw\n" % dict(nproc = nprocs)
+   elif (app_name == "filt_ga"):
+      shrc = "exec -p 0 /bin/filt_ga -n%(nproc)d -i /etc/img.raw\n" % dict(nproc = nprocs)
+   elif (app_name == "histogram"):
+      shrc = "exec -p 0 /bin/histogra -n%(nproc)d /etc/histo.bmp\n" % dict(nproc = nprocs)
+   elif (app_name == "kmeans"):
+      shrc = "exec -p 0 /bin/kmeans -n %(nproc)d -p %(npoints)d\n" % dict(nproc = nprocs, npoints = 10000) # default npoints = 100000
+   elif (app_name == "showimg"):
+      shrc = "exec -p 0 /bin/showimg -p1 -i /etc/lena.sgi -o /dev/fb0\n"
+   elif (app_name == "barnes"):
+      shrc = "exec -p 0 /bin/barnes -n%(nproc)d -b%(nbody)d\n" % dict(nproc = nprocs, nbody = 1024)
+   elif (app_name == "fmm"):
+      shrc = "exec -p 0 /bin/fmm -n%(nproc)d -p%(nparticles)d\n" % dict(nproc = nprocs, nparticles = 1024)
+   elif (app_name == "ocean"):
+      shrc = "exec -p 0 /bin/ocean -n%(nproc)d -m%(gridsize)d\n" % dict(nproc = nprocs, gridsize = 66)
+   elif (app_name == "radiosity"):
+      shrc = "exec -p 0 /bin/radiosit -n %(nproc)d -batch\n" % dict(nproc = nprocs)
+   elif (app_name == "raytrace"):
+      shrc = "exec -p 0 /bin/raytrace -n%(nproc)d /etc/tea.env\n" % dict(nproc = nprocs)
+   elif (app_name == "watern"):
+      shrc = "exec -p 0 /bin/watern -n%(nproc)d -m512\n" % dict(nproc = nprocs)
+   elif (app_name == "waters"):
+      shrc = "exec -p 0 /bin/waters -n%(nproc)d -m512\n" % dict(nproc = nprocs)
+   elif (app_name == "cholesky"):
+      shrc = "exec -p 0 /bin/cholesky -n%(nproc)d /etc/tk14.O\n" % dict(nproc = nprocs)
+   elif (app_name == "fft"):
+      shrc = "exec -p 0 /bin/fft -n%(nproc)d -m10\n" % dict(nproc = nprocs)
+   elif (app_name == "lu"):
+      shrc = "exec -p 0 /bin/lu -n%(nproc)d -m512\n" % dict(nproc = nprocs)
+   elif (app_name == "radix"):
+      shrc = "exec -p 0 /bin/radix -n%(nproc)d -k1024\n" % dict(nproc = nprocs) # test : 1024 ; simu : 65536
+   elif (app_name == "radix_ga"):
+      shrc = "exec -p 0 /bin/radix_ga -p%(nproc)d -n262144\n" % dict(nproc = nprocs) # p = proc, n = num_keys
+   elif (app_name == "fft_ga"):
+      shrc = "exec -p 0 /bin/fft_ga -P%(nproc)d -M16\n" % dict(nproc = nprocs)
+   else:
+      assert(False)
+   
+   file = open(shrc_file_name, 'w')
+   file.write(shrc)
+   file.close()
+
+   # Copie du binaire et du shrc dans l'image disque
+   print "mcopy -o -i", hdd_img_file_name, shrc_file_name, "::/etc/"
+   subprocess.call([ 'mcopy', '-o', '-i', hdd_img_file_name, shrc_file_name, '::/etc/' ])
+   print "mcopy -o -i", hdd_img_file_name, app_name, "::/bin/"
+   subprocess.call([ 'mcopy', '-o', '-i', hdd_img_file_name, app_name, '::/bin/' ])
+
+   print "cd", old_path
+   os.chdir(old_path)
+# end of compile_app
+
+
+print "mkdir -p", os.path.join(scripts_path, data_dir)
+subprocess.call([ 'mkdir', '-p', os.path.join(scripts_path, data_dir) ])
+
+gen_sym_links()
+
+for i in nb_procs:
+   x, y = get_x_y(i)
+   nthreads = min(4, x * y)
+   gen_hard_config(x, y, hard_config_name)
+   gen_arch_info(x, y, arch_info_name, arch_info_bib_name)
+
+   print "cd", top_path
+   os.chdir(top_path)
+   print "touch", topcell_name
+   subprocess.call([ 'touch', topcell_name ])
+   print "make"
+   subprocess.call([ 'make' ])
+   
+   for app in apps:
+      print "cd", top_path
+      os.chdir(top_path)
+
+      compile_app(app, i)
+
+      # Launch simulation
+      if use_omp:
+         print "./simul.x -THREADS", nthreads, ">", os.path.join(scripts_path, data_dir, app + '_' + log_init_name + str(i))
+         output = subprocess.Popen([ './simul.x', '-THREADS', str(nthreads) ], stdout = subprocess.PIPE).communicate()[0]
+      else:
+         print "./simul.x >", os.path.join(scripts_path, data_dir, app + '_' + log_init_name + str(i))
+         output = subprocess.Popen([ './simul.x' ], stdout = subprocess.PIPE).communicate()[0]
+
+
+      # Write simulation results to data directory
+      print "cd", scripts_path
+      os.chdir(scripts_path)
+      filename = os.path.join(data_dir, app + '_' + log_init_name + str(i))
+      file = open(filename, 'w')
+      file.write(output)
+      file.close()
+
+      filename = os.path.join(scripts_path, data_dir, app + '_' + log_term_name + str(i))
+      print "mv", os.path.join(top_path, 'term1'), filename
+      subprocess.call([ 'mv', os.path.join(top_path, 'term1'), filename ])
+
+      if rerun_stats:
+         start2_found = False
+         end_found = False
+         for line in open(filename):
+            if "[START2]" in line:
+               start2 = line.split()[-1]
+               start2_found = True
+            if "[END]" in line:
+               end = line.split()[-1]
+               end_found = True
+         assert(start2_found and end_found)
+         
+         print "cd", top_path
+         os.chdir(top_path)
+
+         # Relauching simulation with reset and dump of counters
+         if use_omp:
+            print "./simul.x -THREADS", nthreads, "--reset-counters %s --dump-counters %s >" % (start2, end), os.path.join(scripts_path, data_dir, app + '_' + log_init_name + str(i))
+            output = subprocess.Popen([ './simul.x', '-THREADS', str(nthreads), '--reset-counters', start2, '--dump-counters', end ], stdout = subprocess.PIPE).communicate()[0]
+         else:
+            print "./simul.x --reset-counters %s --dump-counters %s >" % (start2, end), os.path.join(scripts_path, data_dir, app + '_' + log_init_name + str(i))
+            output = subprocess.Popen([ './simul.x', '--reset-counters', start2, '--dump-counters', end ], stdout = subprocess.PIPE).communicate()[0]
+         
+         # Write simulation results (counters) to data directory
+         print "cd", scripts_path
+         os.chdir(scripts_path)
+         filename = os.path.join(data_dir, app + '_' + log_init_name + str(i))
+         file = open(filename, 'w')
+         file.write(output)
+         file.close()
+ 
+
+## End of simulations
+
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/coherence_template.gp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/coherence_template.gp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/coherence_template.gp	(revision 724)
@@ -0,0 +1,24 @@
+
+set terminal svg size 500 400 fixed
+set output "%(svg_name)s.svg"
+
+set ylabel "Coherence Cost for Application %(app_name)s\nNormalized w.r.t. the Number of Cycles (x 1000)" font "Times,12"
+set xlabel "Number of Cores" font "Times,12"
+
+set grid noxtics
+set grid nomxtics
+set grid nomx2tics
+set grid ytics
+set grid mytics
+
+#set logscale x 2
+#set logscale y 2
+set xrange [8:256]
+#set yrange [0:30]
+
+set key inside left top Left reverse
+
+
+plot %(plot_str)s
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/metric_template.gp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/metric_template.gp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/metric_template.gp	(revision 724)
@@ -0,0 +1,34 @@
+
+set terminal svg size 1000 400 fixed
+set output "%(svg_name)s.svg"
+
+set xtics nomirror out scale 0,0 rotate by 0 font "Times,10"
+
+set xtics %(xtics_str)s
+# Creates something like:
+#set xtics ("1" 1, "4" 2, "8" 3, "16" 4, "32" 5, "64" 6, "128" 7, "256" 8, "1" 9.5, "4" 10.5, "8" 11.5, "16" 12.5, "32" 13.5, "64" 14.5, "128" 15.5, "256" 16.5, "1" 18, ...)
+
+set ylabel "%(ylabel_str)s %(norm_factor_str)s" font "Times,12"
+set xlabel " "
+
+%(app_labels)s
+
+set xrange [0:%(xmax_val)d]
+
+#set mytics 0.1
+
+set grid noxtics
+set grid nomxtics
+set grid nomx2tics
+set grid ytics
+set grid mytics
+
+
+set key inside left top Left reverse
+
+set boxwidth 1
+set style fill solid border -1
+
+plot %(plot_str)s
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/speedup_template.gp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/speedup_template.gp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/speedup_template.gp	(revision 724)
@@ -0,0 +1,24 @@
+
+set terminal svg size 500 400 fixed
+set output "%(svg_name)s.svg"
+
+set ylabel "Speedup for %(appli)s" font "Times,12"
+set xlabel "Number of Cores" font "Times,12"
+
+set xrange [1:%(nb_procs)d]
+set yrange [1:130]
+
+set grid noxtics
+set grid nomxtics
+set grid nomx2tics
+set grid ytics
+set grid mytics
+
+set logscale x 2
+set logscale y 2
+
+set key inside left top Left reverse
+
+plot %(plot_str)s
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/stacked_template.gp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/stacked_template.gp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/scripts/templates/stacked_template.gp	(revision 724)
@@ -0,0 +1,37 @@
+
+set terminal svg size 1500 500 fixed
+set output "%(svg_name)s.svg"
+
+# border 3 -> bords en bas et a gauche (2 derniers bits à 1)
+set border 3 front linetype -1 linewidth 1.000
+set boxwidth 1 absolute
+set style fill solid 1.00 border -1
+
+# front : devant les autres objets (courbes) ; fc : fillcolor
+#set style rectangle front fc lt -3 fillstyle solid 1.00 border -1
+set style rectangle front fc lt 2 fillstyle solid 1.00 border -1
+set grid noxtics nomxtics ytics mytics noztics nomztics nox2tics nomx2tics noy2tics nomy2tics nocbtics nomcbtics
+
+# Lignes derriere le graphique. 2e type de ligne pour les lignes verticales ?
+set grid layerdefault linetype 0 linewidth 1.000, linetype 0 linewidth 1.000
+
+# Legende des traits ou batons
+set key outside right Left reverse invert center
+#set key inside vertical left Left reverse invert enhanced autotitles columnhead nobox
+set style histogram rowstacked title offset character 2, 0.25, 0
+set datafile missing '-'
+set style data histograms
+
+# border : ne croise pas l'axe ; in : a l'interieur ; scale : taille (major,minor) ; offset : offset du texte
+set xtics border in scale 0.0,0.0 nomirror rotate by 0 offset character 0,0 font "Times,10"
+set ytics border out scale 1,0.5 nomirror norotate offset character 0,0
+
+set xtics %(xtics_str)s
+
+set xlabel " "
+set ylabel "%(ylabel_str)s" font "Times,14" 
+
+%(app_labels)s
+
+plot %(plot_str)s
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/soclib.conf
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/soclib.conf	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/soclib.conf	(revision 724)
@@ -0,0 +1,1 @@
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/top.cpp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/top.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/top.cpp	(revision 724)
@@ -0,0 +1,1140 @@
+/////////////////////////////////////////////////////////////////////////
+// File: top.cpp 
+// Author: Alain Greiner 
+// Copyright: UPMC/LIP6
+// Date : may 2013
+// This program is released under the GNU public license
+/////////////////////////////////////////////////////////////////////////
+// This file define a generic TSAR architecture.
+// The physical address space is 40 bits.
+//
+// The number of clusters cannot be larger than 256.
+// The number of processors per cluster cannot be larger than 8.
+// 
+// - It uses four dspin_local_crossbar per cluster as local interconnect 
+// - It uses two virtual_dspin routers per cluster as global interconnect
+// - It uses the vci_cc_vcache_wrapper 
+// - It uses the vci_mem_cache
+// - It contains one vci_xicu per cluster.
+// - It contains one vci_multi_dma per cluster.
+// - It contains one vci_simple_ram per cluster to model the L3 cache.
+//
+// The communication between the MemCache and the Xram is 64 bits.
+//
+// All clusters are identical, but the cluster 0 (called io_cluster), 
+// contains 6 extra components:
+// - the boot rom (BROM)
+// - the disk controller (BDEV)
+// - the multi-channel network controller (MNIC)
+// - the multi-channel chained buffer dma controller (CDMA)
+// - the multi-channel tty controller (MTTY)
+// - the frame buffer controller (FBUF)
+//
+// It is build with one single component implementing a cluster,
+// defined in files tsar_xbar_cluster.* (with * = cpp, h, sd)
+//
+// The IRQs are connected to XICUs as follow:
+// - The IRQ_IN[0] to IRQ_IN[7] ports are not used in all clusters.
+// - The DMA IRQs are connected to IRQ_IN[8] to IRQ_IN[15] in all clusters.
+// - The TTY IRQs are connected to IRQ_IN[16] to IRQ_IN[30] in I/O cluster.
+// - The BDEV IRQ is connected to IRQ_IN[31] in I/O cluster.
+// 
+// Some hardware parameters are used when compiling the OS, and are used 
+// by this top.cpp file. They must be defined in the hard_config.h file :
+// - CLUSTER_X        : number of clusters in a row (power of 2)
+// - CLUSTER_Y        : number of clusters in a column (power of 2)
+// - CLUSTER_SIZE     : size of the segment allocated to a cluster
+// - NB_PROCS_MAX     : number of processors per cluster (power of 2)
+// - NB_DMA_CHANNELS  : number of DMA channels per cluster (< 9)
+// - NB_TTY_CHANNELS  : number of TTY channels in I/O cluster (< 16)
+// - NB_NIC_CHANNELS  : number of NIC channels in I/O cluster (< 9)
+// 
+// Some other hardware parameters are not used when compiling the OS,
+// and can be directly defined in this top.cpp file:
+// - XRAM_LATENCY     : external ram latency 
+// - MEMC_WAYS        : L2 cache number of ways
+// - MEMC_SETS        : L2 cache number of sets
+// - L1_IWAYS     
+// - L1_ISETS    
+// - L1_DWAYS   
+// - L1_DSETS  
+// - FBUF_X_SIZE      : width of frame buffer (pixels)
+// - FBUF_Y_SIZE      : heigth of frame buffer (lines)
+// - BDEV_SECTOR_SIZE : block size for block drvice
+// - BDEV_IMAGE_NAME  : file pathname for block device 
+// - NIC_RX_NAME      : file pathname for NIC received packets
+// - NIC_TX_NAME      : file pathname for NIC transmited packets
+// - NIC_TIMEOUT      : max number of cycles before closing a container
+/////////////////////////////////////////////////////////////////////////
+// General policy for 40 bits physical address decoding:
+// All physical segments base addresses are multiple of 1 Mbytes
+// (=> the 24 LSB bits = 0, and the 16 MSB bits define the target) 
+// The (x_width + y_width) MSB bits (left aligned) define
+// the cluster index, and the LADR bits define the local index:
+//      | X_ID  | Y_ID  |---| LADR |     OFFSET          |
+//      |x_width|y_width|---|  8   |       24            |
+/////////////////////////////////////////////////////////////////////////
+// General policy for 14 bits SRCID decoding:
+// Each component is identified by (x_id, y_id, l_id) tuple.
+//      | X_ID  | Y_ID  |---| L_ID |
+//      |x_width|y_width|---|  6   |
+/////////////////////////////////////////////////////////////////////////
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+#include <stdint.h>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "alloc_elems.h"
+#include "tsar_xbar_cluster.h"
+
+#define USE_ALMOS 1
+//#define USE_GIET 
+
+#ifdef USE_ALMOS
+#ifdef USE_GIET
+#error "Can't use Two different OS"
+#endif
+#endif
+
+#ifndef USE_ALMOS
+#ifndef USE_GIET
+#error "You need to specify one OS"
+#endif
+#endif
+
+#ifdef USE_ALMOS
+   #define PREFIX_OS "almos/"
+   #include "almos/hard_config.h"
+#endif
+#ifdef USE_GIET
+   #define PREFIX_OS "giet_vm/"
+#endif
+
+///////////////////////////////////////////////////
+//               Parallelisation
+///////////////////////////////////////////////////
+
+#define USE_OPENMP 0
+
+#if USE_OPENMP
+#include <omp.h>
+#endif
+
+//  cluster index (computed from x,y coordinates)
+#ifdef USE_ALMOS
+   #define cluster(x,y)   (y + x * Y_SIZE)
+#else
+   #define cluster(x,y)   (y + (x << Y_WIDTH))
+#endif
+
+
+#define min(x, y) (x < y ? x : y)
+
+///////////////////////////////////////////////////////////
+//          DSPIN parameters           
+///////////////////////////////////////////////////////////
+
+#define dspin_cmd_width      39
+#define dspin_rsp_width      32
+
+///////////////////////////////////////////////////////////
+//          VCI parameters           
+///////////////////////////////////////////////////////////
+
+#define vci_cell_width_int    4
+#define vci_cell_width_ext    8
+
+#ifdef USE_ALMOS
+#define vci_address_width     32
+#endif
+#ifdef USE_GIET
+#define vci_address_width     40
+#endif
+#define vci_plen_width        8
+#define vci_rerror_width      1
+#define vci_clen_width        1
+#define vci_rflag_width       1
+#define vci_srcid_width       14
+#define vci_pktid_width       4
+#define vci_trdid_width       4
+#define vci_wrplen_width      1
+
+////////////////////////////////////////////////////////////
+//    Secondary Hardware Parameters         
+//////////////////////i/////////////////////////////////////
+
+
+#define XRAM_LATENCY          0
+
+#define MEMC_WAYS             16
+#define MEMC_SETS             256
+
+#define L1_IWAYS              4
+#define L1_ISETS              64
+
+#define L1_DWAYS              4
+#define L1_DSETS              64
+
+#ifdef USE_ALMOS
+#define FBUF_X_SIZE           1024
+#define FBUF_Y_SIZE           1024
+#endif
+#ifdef USE_GIET
+#define FBUF_X_SIZE           128
+#define FBUF_Y_SIZE           128
+#endif
+
+#ifdef USE_GIET
+#define BDEV_SECTOR_SIZE      512
+#define BDEV_IMAGE_NAME       PREFIX_OS"display/images.raw"
+#endif
+#ifdef USE_ALMOS
+#define BDEV_SECTOR_SIZE      4096
+#define BDEV_IMAGE_NAME       PREFIX_OS"hdd-img.bin"
+#endif
+
+#define NIC_RX_NAME           PREFIX_OS"nic/rx_packets.txt"
+#define NIC_TX_NAME           PREFIX_OS"nic/tx_packets.txt"
+#define NIC_TIMEOUT           10000
+
+#define NORTH                 0
+#define SOUTH                 1
+#define EAST                  2
+#define WEST                  3
+
+////////////////////////////////////////////////////////////
+//    Software to be loaded in ROM & RAM         
+//////////////////////i/////////////////////////////////////
+
+#ifdef USE_ALMOS
+#define soft_name       PREFIX_OS"bootloader-tsar-mipsel.bin",\
+                        PREFIX_OS"kernel-soclib.bin@0xbfc10000:D",\
+                        PREFIX_OS"arch-info.bib@0xBFC08000:D"
+#endif
+#ifdef USE_GIET
+#define soft_pathname   PREFIX_OS"soft.elf"
+#endif
+
+////////////////////////////////////////////////////////////
+//     DEBUG Parameters default values         
+//////////////////////i/////////////////////////////////////
+
+#define MAX_FROZEN_CYCLES     100000000
+
+
+////////////////////////////////////////////////////////////////////
+//     TGTID definition in direct space
+// For all components:  global TGTID = global SRCID = cluster_index
+////////////////////////////////////////////////////////////////////
+
+#define MEMC_TGTID      0
+#define XICU_TGTID      1
+#define MDMA_TGTID      2
+#define MTTY_TGTID      3
+#define BDEV_TGTID      4
+#define MNIC_TGTID      5
+#define BROM_TGTID      6
+#define CDMA_TGTID      7
+#define SIMH_TGTID      8
+#define FBUF_TGTID      9
+
+
+/////////////////////////////////////////////////////////
+//    Physical segments definition
+/////////////////////////////////////////////////////////
+// There is 3 segments replicated in all clusters
+// and 5 specific segments in the "IO" cluster 
+// (containing address 0xBF000000)
+/////////////////////////////////////////////////////////
+
+#ifdef USE_GIET
+   // specific segments in "IO" cluster : absolute physical address
+   #define BROM_BASE    0x00BFC00000
+   #define BROM_SIZE    0x0000100000   // 1 Mbytes
+
+   #define FBUF_BASE    0x00B2000000
+   #define FBUF_SIZE    (FBUF_X_SIZE * FBUF_Y_SIZE * 2)
+
+   #define BDEV_BASE    0x00B3000000
+   #define BDEV_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MTTY_BASE    0x00B4000000
+   #define MTTY_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MNIC_BASE    0x00B5000000
+   #define MNIC_SIZE    0x0000080000   // 512 Kbytes (for 8 channels)
+
+   #define CDMA_BASE    0x00B6000000
+   #define CDMA_SIZE    0x0000004000 * NB_CMA_CHANNELS
+
+   // replicated segments : address is incremented by a cluster offset
+   //     offset  = cluster(x,y) << (address_width-x_width-y_width);
+
+   #define MEMC_BASE    0x0000000000
+   #define MEMC_SIZE    0x0010000000   // 256 Mbytes per cluster
+
+   #define XICU_BASE    0x00B0000000
+   #define XICU_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MDMA_BASE    0x00B1000000
+   #define MDMA_SIZE    0x0000001000 * NB_DMA_CHANNELS  // 4 Kbytes per channel
+
+   #define SIMH_BASE    0x00B7000000
+   #define SIMH_SIZE    0x0000001000
+#endif
+
+#ifdef USE_ALMOS
+   // 2^19 is the offset for the local id (8 bits for global ID :
+   // 1 bit for Memcache or Peripheral, 4 for local peripheral id)
+   // (Almos supports 32 bits physical addresses)
+
+   #define CLUSTER_INC (0x80000000ULL / (X_SIZE * Y_SIZE) * 2)
+
+   #define CLUSTER_IO_INC (cluster_io_id * CLUSTER_INC)
+   #define MEMC_MAX_SIZE (0x40000000 / (X_SIZE * Y_SIZE)) // 0x40000000 : valeur totale souhaitÃ©e (ici : 1Go)
+
+   #define BROM_BASE    0x00BFC00000
+   #define BROM_SIZE    0x0000100000 // 1 Mbytes
+
+   #define MEMC_BASE    0x0000000000
+   #define MEMC_SIZE    min(0x04000000, MEMC_MAX_SIZE)
+
+   #define XICU_BASE    (CLUSTER_INC >> 1) + (XICU_TGTID << 19)
+   #define XICU_SIZE    0x0000001000 // 4 Kbytes
+   
+   #define MDMA_BASE    (CLUSTER_INC >> 1) + (MDMA_TGTID << 19)
+   #define MDMA_SIZE    (0x0000001000 * NB_DMA_CHANNELS) // 4 Kbytes per channel  
+
+   #define BDEV_BASE    (CLUSTER_INC >> 1) + (BDEV_TGTID << 19) + (CLUSTER_IO_INC)
+   #define BDEV_SIZE    0x0000001000 // 4 Kbytes
+
+   #define MTTY_BASE    (CLUSTER_INC >> 1) + (MTTY_TGTID << 19) + (CLUSTER_IO_INC)
+   #define MTTY_SIZE    0x0000001000 // 4 Kbytes
+
+   #define FBUF_BASE    (CLUSTER_INC >> 1) + (FBUF_TGTID << 19) + (CLUSTER_IO_INC)
+   #define FBUF_SIZE    (FBUF_X_SIZE * FBUF_Y_SIZE * 2) // Should be 0x80000
+
+   #define MNIC_BASE    (CLUSTER_INC >> 1) + (MNIC_TGTID << 19) + (CLUSTER_IO_INC)
+   #define MNIC_SIZE    0x0000080000
+
+   #define CDMA_BASE    (CLUSTER_INC >> 1) + (CDMA_TGTID << 19) + (CLUSTER_IO_INC)
+   #define CDMA_SIZE    (0x0000004000 * NB_CMA_CHANNELS)
+
+   #define SIMH_BASE    (CLUSTER_INC >> 1) + (SIMH_TGTID << 19) + (CLUSTER_IO_INC)
+   #define SIMH_SIZE    0x0000001000
+#endif
+
+bool stop_called = false;
+
+/////////////////////////////////
+int _main(int argc, char *argv[])
+{
+   using namespace sc_core;
+   using namespace soclib::caba;
+   using namespace soclib::common;
+
+#ifdef USE_GIET
+   char     soft_name[256]    = soft_pathname;      // pathname to binary code
+#endif
+   const int64_t max_cycles   = 5000000;             // Maximum number of cycles simulated in one sc_start call
+   int64_t ncycles            = 0x7FFFFFFFFFFFFFFF;  // simulated cycles
+   char     disk_name[256]    = BDEV_IMAGE_NAME;    // pathname to the disk image
+   char     nic_rx_name[256]  = NIC_RX_NAME;        // pathname to the rx packets file
+   char     nic_tx_name[256]  = NIC_TX_NAME;        // pathname to the tx packets file
+   ssize_t  threads_nr        = 1;                  // simulator's threads number
+   bool     debug_ok          = false;              // trace activated
+   size_t   debug_period      = 1;                  // trace period
+   size_t   debug_memc_id     = 0;                  // index of memc to be traced 
+   size_t   debug_proc_id     = 0;                  // index of proc to be traced
+   int64_t  debug_from        = 0;                  // trace start cycle
+   int64_t  frozen_cycles     = MAX_FROZEN_CYCLES;  // monitoring frozen processor
+   size_t   cluster_io_id;                         // index of cluster containing IOs
+   int64_t  reset_counters    = -1;
+   int64_t  dump_counters     = -1;
+   bool     do_reset_counters = false;
+   bool     do_dump_counters  = false;
+   struct   timeval t1, t2;
+   uint64_t ms1, ms2;
+
+   ////////////// command line arguments //////////////////////
+   if (argc > 1)
+   {
+      for (int n = 1; n < argc; n = n + 2)
+      {
+         if ((strcmp(argv[n], "-NCYCLES") == 0) && (n + 1 < argc))
+         {
+            ncycles = (int64_t) strtol(argv[n + 1], NULL, 0);
+         }
+         else if ((strcmp(argv[n], "-SOFT") == 0) && (n + 1 < argc))
+         {
+#ifdef USE_ALMOS
+            assert( 0 && "Can't define almos soft name" );
+#endif
+#ifdef USE_GIET
+            strcpy(soft_name, argv[n + 1]);
+#endif
+         }
+         else if ((strcmp(argv[n],"-DISK") == 0) && (n + 1 < argc))
+         {
+            strcpy(disk_name, argv[n + 1]);
+         }
+         else if ((strcmp(argv[n],"-DEBUG") == 0) && (n + 1 < argc))
+         {
+            debug_ok = true;
+            debug_from = (int64_t) strtol(argv[n + 1], NULL, 0);
+         }
+         else if ((strcmp(argv[n], "-MEMCID") == 0) && (n + 1 < argc))
+         {
+            debug_memc_id = (size_t) strtol(argv[n + 1], NULL, 0);
+#ifdef USE_ALMOS
+            assert((debug_memc_id < (X_SIZE * Y_SIZE)) &&
+                   "debug_memc_id larger than X_SIZE * Y_SIZE" );
+#else
+            size_t x = debug_memc_id >> Y_WIDTH;
+            size_t y = debug_memc_id & ((1<<Y_WIDTH)-1);
+
+            assert( (x <= X_SIZE) and (y <= Y_SIZE) &&
+                  "MEMCID parameter refers a not valid memory cache");
+#endif
+         }
+         else if ((strcmp(argv[n], "-PROCID") == 0) && (n + 1 < argc))
+         {
+            debug_proc_id = (size_t) strtol(argv[n + 1], NULL, 0);
+#ifdef USE_ALMOS
+            assert((debug_proc_id < (X_SIZE * Y_SIZE * NB_PROCS_MAX)) && 
+                   "debug_proc_id larger than X_SIZE * Y_SIZE * NB_PROCS");
+#else
+            size_t cluster_xy = debug_proc_id / NB_PROCS_MAX ;
+            size_t x          = cluster_xy >> Y_WIDTH;
+            size_t y          = cluster_xy & ((1<<Y_WIDTH)-1);
+
+            assert( (x <= X_SIZE) and (y <= Y_SIZE) &&
+                  "PROCID parameter refers a not valid processor");
+#endif
+         }
+         else if ((strcmp(argv[n], "-THREADS") == 0) && ((n + 1) < argc))
+         {
+            threads_nr = (ssize_t) strtol(argv[n + 1], NULL, 0);
+            threads_nr = (threads_nr < 1) ? 1 : threads_nr;
+         }
+         else if ((strcmp(argv[n], "-FROZEN") == 0) && (n + 1 < argc))
+         {
+            frozen_cycles = (int64_t) strtol(argv[n + 1], NULL, 0);
+         }
+         else if ((strcmp(argv[n], "-PERIOD") == 0) && (n + 1 < argc))
+         {
+            debug_period = (size_t) strtol(argv[n + 1], NULL, 0);
+         }
+         else if ((strcmp(argv[n], "--reset-counters") == 0) && (n + 1 < argc))
+         {
+            reset_counters = (int64_t) strtol(argv[n + 1], NULL, 0);
+            do_reset_counters = true;
+         }
+         else if ((strcmp(argv[n], "--dump-counters") == 0) && (n + 1 < argc))
+         {
+            dump_counters = (int64_t) strtol(argv[n + 1], NULL, 0);
+            do_dump_counters = true;
+         }
+         else
+         {
+            std::cout << "   Arguments are (key,value) couples." << std::endl;
+            std::cout << "   The order is not important." << std::endl;
+            std::cout << "   Accepted arguments are :" << std::endl << std::endl;
+            std::cout << "     -SOFT pathname_for_embedded_soft" << std::endl;
+            std::cout << "     -DISK pathname_for_disk_image" << std::endl;
+            std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
+            std::cout << "     -DEBUG debug_start_cycle" << std::endl;
+            std::cout << "     -THREADS simulator's threads number" << std::endl;
+            std::cout << "     -FROZEN max_number_of_lines" << std::endl;
+            std::cout << "     -PERIOD number_of_cycles between trace" << std::endl;
+            std::cout << "     -MEMCID index_memc_to_be_traced" << std::endl;
+            std::cout << "     -PROCID index_proc_to_be_traced" << std::endl;
+            exit(0);
+         }
+      }
+   }
+
+    // checking hardware parameters
+    assert( ( (X_SIZE == 1) or (X_SIZE == 2) or (X_SIZE == 4) or
+              (X_SIZE == 8) or (X_SIZE == 16) ) and
+              "The X_SIZE parameter must be 1, 2, 4, 8 or 16" );
+
+    assert( ( (Y_SIZE == 1) or (Y_SIZE == 2) or (Y_SIZE == 4) or
+              (Y_SIZE == 8) or (Y_SIZE == 16) ) and
+              "The Y_SIZE parameter must be 1, 2, 4, 8 or 16" );
+
+    assert( ( (NB_PROCS_MAX == 1) or (NB_PROCS_MAX == 2) or
+              (NB_PROCS_MAX == 4) or (NB_PROCS_MAX == 8) ) and
+             "The NB_PROCS_MAX parameter must be 1, 2, 4 or 8" );
+
+    assert( (NB_DMA_CHANNELS < 9) and
+            "The NB_DMA_CHANNELS parameter must be smaller than 9" );
+
+    assert( (NB_TTY_CHANNELS < 15) and
+            "The NB_TTY_CHANNELS parameter must be smaller than 15" );
+
+    assert( (NB_NIC_CHANNELS < 9) and
+            "The NB_NIC_CHANNELS parameter must be smaller than 9" );
+
+#ifdef USE_GIET
+    assert( (vci_address_width == 40) and
+            "VCI address width with the GIET must be 40 bits" );
+#endif
+
+#ifdef USE_ALMOS
+    assert( (vci_address_width == 32) and
+            "VCI address width with ALMOS must be 32 bits" );
+#endif
+
+
+    std::cout << std::endl;
+    std::cout << " - X_SIZE             = " << X_SIZE << std::endl;
+    std::cout << " - Y_SIZE             = " << Y_SIZE << std::endl;
+    std::cout << " - NB_PROCS_MAX     = " << NB_PROCS_MAX <<  std::endl;
+    std::cout << " - NB_DMA_CHANNELS  = " << NB_DMA_CHANNELS <<  std::endl;
+    std::cout << " - NB_TTY_CHANNELS  = " << NB_TTY_CHANNELS <<  std::endl;
+    std::cout << " - NB_NIC_CHANNELS  = " << NB_NIC_CHANNELS <<  std::endl;
+    std::cout << " - MEMC_WAYS        = " << MEMC_WAYS << std::endl;
+    std::cout << " - MEMC_SETS        = " << MEMC_SETS << std::endl;
+    std::cout << " - RAM_LATENCY      = " << XRAM_LATENCY << std::endl;
+    std::cout << " - MAX_FROZEN       = " << frozen_cycles << std::endl;
+
+    std::cout << std::endl;
+    // Internal and External VCI parameters definition
+    typedef soclib::caba::VciParams<vci_cell_width_int,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_int;
+
+    typedef soclib::caba::VciParams<vci_cell_width_ext,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_ext;
+
+#if USE_OPENMP
+   omp_set_dynamic(false);
+   omp_set_num_threads(threads_nr);
+   std::cerr << "Built with openmp version " << _OPENMP << std::endl;
+#endif
+
+   // Define parameters depending on mesh size
+   size_t   x_width;
+   size_t   y_width;
+
+#ifdef USE_ALMOS
+   if      (X_SIZE == 1) x_width = 0;
+   else if (X_SIZE == 2) x_width = 1;
+   else if (X_SIZE <= 4) x_width = 2;
+   else if (X_SIZE <= 8) x_width = 3;
+   else                x_width = 4;
+
+   if      (Y_SIZE == 1) y_width = 0;
+   else if (Y_SIZE == 2) y_width = 1;
+   else if (Y_SIZE <= 4) y_width = 2;
+   else if (Y_SIZE <= 8) y_width = 3;
+   else                y_width = 4;
+
+#else
+   size_t x_width = X_WIDTH;
+   size_t y_width = Y_WIDTH;
+
+   assert( (X_WIDTH <= 4) and (Y_WIDTH <= 4) and
+           "Up to 256 clusters");
+
+   assert( (X_SIZE <= (1 << X_WIDTH)) and (Y_SIZE <= (1 << Y_WIDTH)) and
+           "The X_WIDTH and Y_WIDTH parameter are insufficient");
+
+#endif
+
+   // index of cluster containing IOs
+   cluster_io_id = 0x00bfc00000ULL >> (vci_address_width - x_width - y_width);
+
+
+   /////////////////////
+   //  Mapping Tables
+   /////////////////////
+
+   // internal network
+   MappingTable maptabd(vci_address_width, 
+                        IntTab(x_width + y_width, 16 - x_width - y_width), 
+                        IntTab(x_width + y_width, vci_srcid_width - x_width - y_width), 
+                        0x00FF800000);
+
+   for (size_t x = 0; x < X_SIZE; x++)
+   {
+      for (size_t y = 0; y < Y_SIZE; y++)
+      {
+         sc_uint<vci_address_width> offset;
+         offset = (sc_uint<vci_address_width>)cluster(x,y) 
+                   << (vci_address_width-x_width-y_width);
+
+         std::ostringstream    si;
+         si << "seg_xicu_" << x << "_" << y;
+         maptabd.add(Segment(si.str(), XICU_BASE + offset, XICU_SIZE, 
+                  IntTab(cluster(x,y),XICU_TGTID), false));
+
+         std::ostringstream    sd;
+         sd << "seg_mdma_" << x << "_" << y;
+         maptabd.add(Segment(sd.str(), MDMA_BASE + offset, MDMA_SIZE, 
+                  IntTab(cluster(x,y),MDMA_TGTID), false));
+
+         std::ostringstream    sh;
+         sh << "seg_memc_" << x << "_" << y;
+         maptabd.add(Segment(sh.str(), MEMC_BASE + offset, MEMC_SIZE, 
+                  IntTab(cluster(x,y),MEMC_TGTID), true));
+
+         if ( cluster(x,y) == cluster_io_id )
+         {
+            maptabd.add(Segment("seg_mtty", MTTY_BASE, MTTY_SIZE, 
+                        IntTab(cluster(x,y),MTTY_TGTID), false));
+            maptabd.add(Segment("seg_fbuf", FBUF_BASE, FBUF_SIZE, 
+                        IntTab(cluster(x,y),FBUF_TGTID), false));
+            maptabd.add(Segment("seg_bdev", BDEV_BASE, BDEV_SIZE, 
+                        IntTab(cluster(x,y),BDEV_TGTID), false));
+            maptabd.add(Segment("seg_brom", BROM_BASE, BROM_SIZE, 
+                        IntTab(cluster(x,y),BROM_TGTID), true));
+            maptabd.add(Segment("seg_mnic", MNIC_BASE, MNIC_SIZE, 
+                        IntTab(cluster(x,y),MNIC_TGTID), false));
+            maptabd.add(Segment("seg_cdma", CDMA_BASE, CDMA_SIZE, 
+                        IntTab(cluster(x,y),CDMA_TGTID), false));
+            maptabd.add(Segment("seg_simh", SIMH_BASE, SIMH_SIZE, 
+                        IntTab(cluster(x,y),SIMH_TGTID), false));
+         }
+      }
+   }
+   std::cout << maptabd << std::endl;
+
+   // external network
+   MappingTable maptabx(vci_address_width, 
+                        IntTab(x_width+y_width), 
+                        IntTab(x_width+y_width), 
+                        0xFFFF000000ULL);
+
+   for (size_t x = 0; x < X_SIZE; x++)
+   {
+      for (size_t y = 0; y < Y_SIZE ; y++)
+      { 
+
+         sc_uint<vci_address_width> offset;
+         offset = (sc_uint<vci_address_width>)cluster(x,y) 
+                   << (vci_address_width-x_width-y_width);
+
+         std::ostringstream sh;
+         sh << "x_seg_memc_" << x << "_" << y;
+
+         maptabx.add(Segment(sh.str(), MEMC_BASE + offset, 
+                     MEMC_SIZE, IntTab(cluster(x,y)), false));
+      }
+   }
+   std::cout << maptabx << std::endl;
+
+   ////////////////////
+   // Signals
+   ///////////////////
+
+   sc_clock           signal_clk("clk");
+   sc_signal<bool>    signal_resetn("resetn");
+
+   // Horizontal inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>*** signal_dspin_h_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_inc", X_SIZE-1, Y_SIZE, 3);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_h_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_dec", X_SIZE-1, Y_SIZE, 3);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_h_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_inc", X_SIZE-1, Y_SIZE, 2);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_h_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_dec", X_SIZE-1, Y_SIZE, 2);
+
+   // Vertical inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>*** signal_dspin_v_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_inc", X_SIZE, Y_SIZE-1, 3);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_v_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_dec", X_SIZE, Y_SIZE-1, 3);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_v_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_inc", X_SIZE, Y_SIZE-1, 2);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_v_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_dec", X_SIZE, Y_SIZE-1, 2);
+
+   // Mesh boundaries DSPIN signals
+   DspinSignals<dspin_cmd_width>**** signal_dspin_false_cmd_in =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_cmd_in" , X_SIZE, Y_SIZE, 4, 3);
+   DspinSignals<dspin_cmd_width>**** signal_dspin_false_cmd_out =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_cmd_out", X_SIZE, Y_SIZE, 4, 3);
+   DspinSignals<dspin_rsp_width>**** signal_dspin_false_rsp_in =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_false_rsp_in" , X_SIZE, Y_SIZE, 4, 2);
+   DspinSignals<dspin_rsp_width>**** signal_dspin_false_rsp_out =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_false_rsp_out", X_SIZE, Y_SIZE, 4, 2);
+
+
+   ////////////////////////////
+   //      Loader    
+   ////////////////////////////
+
+   soclib::common::Loader loader(soft_name);
+
+   typedef soclib::common::GdbServer<soclib::common::Mips32ElIss> proc_iss;
+   proc_iss::set_loader(loader);
+
+   ////////////////////////////
+   // Clusters construction
+   ////////////////////////////
+
+   TsarXbarCluster<dspin_cmd_width,
+                   dspin_rsp_width,
+                   vci_param_int,
+                   vci_param_ext>*          clusters[X_SIZE][Y_SIZE];
+
+#if USE_OPENMP
+#pragma omp parallel
+    {
+#pragma omp for
+#endif
+        for (size_t i = 0; i  < (X_SIZE * Y_SIZE); i++)
+        {
+            size_t x = i / Y_SIZE;
+            size_t y = i % Y_SIZE;
+
+#if USE_OPENMP
+#pragma omp critical
+            {
+#endif
+            std::cout << std::endl;
+            std::cout << "Cluster_" << x << "_" << y << std::endl;
+            std::cout << std::endl;
+
+            std::ostringstream sc;
+            sc << "cluster_" << x << "_" << y;
+            clusters[x][y] = new TsarXbarCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>
+            (
+                sc.str().c_str(),
+                NB_PROCS_MAX,
+                NB_TTY_CHANNELS,  
+                NB_DMA_CHANNELS, 
+                x,
+                y,
+                cluster(x,y),
+                maptabd,
+                maptabx,
+                x_width,
+                y_width,
+                vci_srcid_width - x_width - y_width,   // l_id width,
+                MEMC_TGTID,
+                XICU_TGTID,
+                MDMA_TGTID,
+                FBUF_TGTID,
+                MTTY_TGTID,
+                BROM_TGTID,
+                MNIC_TGTID,
+                CDMA_TGTID,
+                BDEV_TGTID,
+                SIMH_TGTID,
+                MEMC_WAYS,
+                MEMC_SETS,
+                L1_IWAYS,
+                L1_ISETS,
+                L1_DWAYS,
+                L1_DSETS,
+                IRQ_PER_PROCESSOR,
+                XRAM_LATENCY,
+                (cluster(x,y) == cluster_io_id),
+                FBUF_X_SIZE,
+                FBUF_Y_SIZE,
+                disk_name,
+                BDEV_SECTOR_SIZE,
+                NB_NIC_CHANNELS,
+                nic_rx_name,
+                nic_tx_name,
+                NIC_TIMEOUT,
+                NB_CMA_CHANNELS,
+                loader,
+                frozen_cycles,
+                debug_from,
+                debug_ok and (cluster(x,y) == debug_memc_id),
+                debug_ok and (cluster(x,y) == debug_proc_id) 
+            );
+
+#if USE_OPENMP
+            } // end critical
+#endif
+        } // end for
+#if USE_OPENMP
+    }
+#endif
+
+   ///////////////////////////////////////////////////////////////
+   //     Net-list 
+   ///////////////////////////////////////////////////////////////
+
+   // Clock & RESET
+   for (size_t x = 0; x < (X_SIZE); x++){
+      for (size_t y = 0; y < Y_SIZE; y++){
+         clusters[x][y]->p_clk                         (signal_clk);
+         clusters[x][y]->p_resetn                      (signal_resetn);
+      }
+   }
+
+   // Inter Clusters horizontal connections
+   if (X_SIZE > 1){
+      for (size_t x = 0; x < (X_SIZE-1); x++){
+         for (size_t y = 0; y < Y_SIZE; y++){
+            for (size_t k = 0; k < 3; k++){
+               clusters[x][y]->p_cmd_out[EAST][k]      (signal_dspin_h_cmd_inc[x][y][k]);
+               clusters[x+1][y]->p_cmd_in[WEST][k]     (signal_dspin_h_cmd_inc[x][y][k]);
+               clusters[x][y]->p_cmd_in[EAST][k]       (signal_dspin_h_cmd_dec[x][y][k]);
+               clusters[x+1][y]->p_cmd_out[WEST][k]    (signal_dspin_h_cmd_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               clusters[x][y]->p_rsp_out[EAST][k]      (signal_dspin_h_rsp_inc[x][y][k]);
+               clusters[x+1][y]->p_rsp_in[WEST][k]     (signal_dspin_h_rsp_inc[x][y][k]);
+               clusters[x][y]->p_rsp_in[EAST][k]       (signal_dspin_h_rsp_dec[x][y][k]);
+               clusters[x+1][y]->p_rsp_out[WEST][k]    (signal_dspin_h_rsp_dec[x][y][k]);
+            }
+         }
+      }
+   }
+   std::cout << std::endl << "Horizontal connections established" << std::endl;   
+
+   // Inter Clusters vertical connections
+   if (Y_SIZE > 1) {
+      for (size_t y = 0; y < (Y_SIZE-1); y++){
+         for (size_t x = 0; x < X_SIZE; x++){
+            for (size_t k = 0; k < 3; k++){
+               clusters[x][y]->p_cmd_out[NORTH][k]     (signal_dspin_v_cmd_inc[x][y][k]);
+               clusters[x][y+1]->p_cmd_in[SOUTH][k]    (signal_dspin_v_cmd_inc[x][y][k]);
+               clusters[x][y]->p_cmd_in[NORTH][k]      (signal_dspin_v_cmd_dec[x][y][k]);
+               clusters[x][y+1]->p_cmd_out[SOUTH][k]   (signal_dspin_v_cmd_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               clusters[x][y]->p_rsp_out[NORTH][k]     (signal_dspin_v_rsp_inc[x][y][k]);
+               clusters[x][y+1]->p_rsp_in[SOUTH][k]    (signal_dspin_v_rsp_inc[x][y][k]);
+               clusters[x][y]->p_rsp_in[NORTH][k]      (signal_dspin_v_rsp_dec[x][y][k]);
+               clusters[x][y+1]->p_rsp_out[SOUTH][k]   (signal_dspin_v_rsp_dec[x][y][k]);
+            }
+         }
+      }
+   }
+   std::cout << "Vertical connections established" << std::endl;
+
+   // East & West boundary cluster connections
+   for (size_t y = 0; y < Y_SIZE; y++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[0][y]->p_cmd_in[WEST][k]        (signal_dspin_false_cmd_in[0][y][WEST][k]);
+         clusters[0][y]->p_cmd_out[WEST][k]       (signal_dspin_false_cmd_out[0][y][WEST][k]);
+         clusters[X_SIZE-1][y]->p_cmd_in[EAST][k]   (signal_dspin_false_cmd_in[X_SIZE-1][y][EAST][k]);
+         clusters[X_SIZE-1][y]->p_cmd_out[EAST][k]  (signal_dspin_false_cmd_out[X_SIZE-1][y][EAST][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[0][y]->p_rsp_in[WEST][k]        (signal_dspin_false_rsp_in[0][y][WEST][k]);
+         clusters[0][y]->p_rsp_out[WEST][k]       (signal_dspin_false_rsp_out[0][y][WEST][k]);
+         clusters[X_SIZE-1][y]->p_rsp_in[EAST][k]   (signal_dspin_false_rsp_in[X_SIZE-1][y][EAST][k]);
+         clusters[X_SIZE-1][y]->p_rsp_out[EAST][k]  (signal_dspin_false_rsp_out[X_SIZE-1][y][EAST][k]);
+      }
+   }
+
+   // North & South boundary clusters connections
+   for (size_t x = 0; x < X_SIZE; x++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[x][0]->p_cmd_in[SOUTH][k]       (signal_dspin_false_cmd_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_cmd_out[SOUTH][k]      (signal_dspin_false_cmd_out[x][0][SOUTH][k]);
+         clusters[x][Y_SIZE-1]->p_cmd_in[NORTH][k]  (signal_dspin_false_cmd_in[x][Y_SIZE-1][NORTH][k]);
+         clusters[x][Y_SIZE-1]->p_cmd_out[NORTH][k] (signal_dspin_false_cmd_out[x][Y_SIZE-1][NORTH][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[x][0]->p_rsp_in[SOUTH][k]       (signal_dspin_false_rsp_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_rsp_out[SOUTH][k]      (signal_dspin_false_rsp_out[x][0][SOUTH][k]);
+         clusters[x][Y_SIZE-1]->p_rsp_in[NORTH][k]  (signal_dspin_false_rsp_in[x][Y_SIZE-1][NORTH][k]);
+         clusters[x][Y_SIZE-1]->p_rsp_out[NORTH][k] (signal_dspin_false_rsp_out[x][Y_SIZE-1][NORTH][k]);
+      }
+   }
+   std::cout << "North, South, West, East connections established" << std::endl;
+   std::cout << std::endl;
+
+
+   ////////////////////////////////////////////////////////
+   //   Simulation
+   ///////////////////////////////////////////////////////
+
+   sc_start(sc_core::sc_time(0, SC_NS));
+   signal_resetn = false;
+
+   // network boundaries signals
+   for (size_t x = 0; x < X_SIZE ; x++){
+      for (size_t y = 0; y < Y_SIZE ; y++){
+         for (size_t a = 0; a < 4; a++){
+            for (size_t k = 0; k < 3; k++){
+               signal_dspin_false_cmd_in [x][y][a][k].write = false;
+               signal_dspin_false_cmd_in [x][y][a][k].read  = true;
+               signal_dspin_false_cmd_out[x][y][a][k].write = false;
+               signal_dspin_false_cmd_out[x][y][a][k].read  = true;
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               signal_dspin_false_rsp_in [x][y][a][k].write = false;
+               signal_dspin_false_rsp_in [x][y][a][k].read  = true;
+               signal_dspin_false_rsp_out[x][y][a][k].write = false;
+               signal_dspin_false_rsp_out[x][y][a][k].read  = true;
+            }
+         }
+      }
+   }
+
+   sc_start(sc_core::sc_time(1, SC_NS));
+   signal_resetn = true;
+
+   if (debug_ok) {
+      #if USE_OPENMP
+         assert(false && "OPEN MP should not be used with debug because of its traces");
+      #endif
+
+      if (gettimeofday(&t1, NULL) != 0) {
+         perror("gettimeofday");
+         return EXIT_FAILURE;
+      }
+
+      for (int64_t n = 1; n < ncycles && !stop_called; n++)
+      {
+         // Monitor a specific address for L1 & L2 caches
+         //clusters[0][0]->proc[0]->cache_monitor(0x800002c000ULL);
+         //clusters[1][0]->memc->copies_monitor(0x800002C000ULL);
+
+         if ((n % max_cycles) == 0)
+         {
+
+            if (gettimeofday(&t2, NULL) != 0) 
+            {
+               perror("gettimeofday");
+               return EXIT_FAILURE;
+            }
+
+            ms1 = (uint64_t) t1.tv_sec * 1000ULL + (uint64_t) t1.tv_usec / 1000;
+            ms2 = (uint64_t) t2.tv_sec * 1000ULL + (uint64_t) t2.tv_usec / 1000;
+            std::cerr << "platform clock frequency " << (double) 5000000 / (double) (ms2 - ms1) << "Khz" << std::endl;
+
+            if (gettimeofday(&t1, NULL) != 0) 
+            {
+               perror("gettimeofday");
+               return EXIT_FAILURE;
+            }
+         }
+
+
+         if (n == reset_counters) {
+            for (size_t x = 0; x < (X_SIZE); x++) {
+               for (size_t y = 0; y < Y_SIZE; y++) {
+                  clusters[x][y]->memc->reset_counters();
+               }
+            }
+         }
+
+         if (n == dump_counters) {
+            for (size_t x = 0; x < (X_SIZE); x++) {
+               for (size_t y = 0; y < Y_SIZE; y++) {
+                  clusters[x][y]->memc->print_stats(true, false);
+               }
+            }
+         }
+
+         if (debug_ok and (n > debug_from) and (n % debug_period == 0))
+         {
+            std::cout << "****************** cycle " << std::dec << n ;
+            std::cout << " ************************************************" << std::endl;
+
+            // trace proc[debug_proc_id] 
+            size_t l = debug_proc_id % NB_PROCS_MAX ;
+            size_t y = (debug_proc_id / NB_PROCS_MAX) % Y_SIZE ;
+            size_t x = debug_proc_id / (Y_SIZE * NB_PROCS_MAX) ;
+
+            std::ostringstream proc_signame;
+            proc_signame << "[SIG]PROC_" << x << "_" << y << "_" << l ;
+            std::ostringstream p2m_signame;
+            p2m_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " P2M" ;
+            std::ostringstream m2p_signame;
+            m2p_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " M2P" ;
+
+            //clusters[x][y]->signal_vci_ini_proc[l].print_trace(proc_signame.str());
+            //clusters[x][y]->signal_dspin_p2m_proc[l].print_trace(p2m_signame.str());
+            //clusters[x][y]->signal_dspin_m2p_proc[l].print_trace(m2p_signame.str());
+
+            //clusters[x][y]->signal_dspin_cmd_l2g_d.print_trace("[SIG]L2G CMD");
+            //clusters[x][y]->signal_dspin_cmd_g2l_d.print_trace("[SIG]G2L CMD");
+            //clusters[x][y]->signal_dspin_rsp_l2g_d.print_trace("[SIG]L2G RSP");
+            //clusters[x][y]->signal_dspin_rsp_g2l_d.print_trace("[SIG]G2L RSP");
+
+            // trace memc[debug_memc_id] 
+            x = debug_memc_id / Y_SIZE;
+            y = debug_memc_id % Y_SIZE;
+
+            std::ostringstream smemc;
+            smemc << "[SIG]MEMC_" << x << "_" << y;
+            std::ostringstream sxram;
+            sxram << "[SIG]XRAM_" << x << "_" << y;
+            std::ostringstream sm2p;
+            sm2p << "[SIG]MEMC_" << x << "_" << y << " M2P" ;
+            std::ostringstream sp2m;
+            sp2m << "[SIG]MEMC_" << x << "_" << y << " P2M" ;
+
+            //clusters[x][y]->memc->print_trace();
+            //clusters[x][y]->signal_vci_tgt_memc.print_trace(smemc.str());
+            //clusters[x][y]->signal_vci_xram.print_trace(sxram.str());
+            //clusters[x][y]->signal_dspin_p2m_memc.print_trace(sp2m.str());
+            //clusters[x][y]->signal_dspin_m2p_memc.print_trace(sm2p.str());
+
+            // trace replicated peripherals
+            //clusters[1][1]->mdma->print_trace();
+            //clusters[1][1]->signal_vci_tgt_mdma.print_trace("[SIG]MDMA_TGT_1_1");
+            //clusters[1][1]->signal_vci_ini_mdma.print_trace("[SIG]MDMA_INI_1_1");
+
+
+            // trace external peripherals
+            //size_t io_x   = cluster_io_id / Y_SIZE;
+            //size_t io_y   = cluster_io_id % Y_SIZE;
+
+            //clusters[io_x][io_y]->brom->print_trace();
+            //clusters[io_x][io_y]->signal_vci_tgt_brom.print_trace("[SIG]BROM");
+
+            //clusters[io_x][io_y]->bdev->print_trace();
+            //clusters[io_x][io_y]->signal_vci_tgt_bdev.print_trace("[SIG]BDEV_TGT");
+            //clusters[io_x][io_y]->signal_vci_ini_bdev.print_trace("[SIG]BDEV_INI");
+         }
+
+         sc_start(sc_core::sc_time(1, SC_NS));
+      }
+   }
+   else {
+      int64_t n = 0;
+      while (!stop_called) {
+         if (gettimeofday(&t1, NULL) != 0) {
+            perror("gettimeofday");
+            return EXIT_FAILURE;
+         }
+         int64_t nb_cycles = max_cycles;
+         if (do_reset_counters) {
+            nb_cycles = min(nb_cycles, reset_counters - n);
+         }
+         if (do_dump_counters) {
+            nb_cycles = min(nb_cycles, dump_counters - n);
+         }
+
+         sc_start(sc_core::sc_time(nb_cycles, SC_NS));
+         n += nb_cycles;
+
+         if (do_reset_counters && n == reset_counters) {
+            // Reseting counters
+            for (size_t x = 0; x < (X_SIZE); x++) {
+               for (size_t y = 0; y < Y_SIZE; y++) {
+                  clusters[x][y]->memc->reset_counters();
+               }
+            }
+            do_reset_counters = false;
+         }
+
+         if (do_dump_counters && n == dump_counters) {
+            // Dumping counters
+            for (size_t x = 0; x < (X_SIZE); x++) {
+               for (size_t y = 0; y < Y_SIZE; y++) {
+                  clusters[x][y]->memc->print_stats(true, false);
+               }
+            }
+            do_dump_counters = false;
+         }
+
+
+         if (gettimeofday(&t2, NULL) != 0) {
+            perror("gettimeofday");
+            return EXIT_FAILURE;
+         }
+         ms1 = (uint64_t) t1.tv_sec * 1000ULL + (uint64_t) t1.tv_usec / 1000;
+         ms2 = (uint64_t) t2.tv_sec * 1000ULL + (uint64_t) t2.tv_usec / 1000;
+         std::cerr << std::dec << "cycle " << n << " platform clock frequency " << (double) nb_cycles / (double) (ms2 - ms1) << "Khz" << std::endl;
+      }
+   }
+
+   
+   // Free memory
+   for (size_t i = 0; i  < (X_SIZE * Y_SIZE); i++)
+   {
+      size_t x = i / Y_SIZE;
+      size_t y = i % Y_SIZE;
+      delete clusters[x][y];
+   }
+
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_h_cmd_inc, X_SIZE - 1, Y_SIZE, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_h_cmd_dec, X_SIZE - 1, Y_SIZE, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_h_rsp_inc, X_SIZE - 1, Y_SIZE, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_h_rsp_dec, X_SIZE - 1, Y_SIZE, 2);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_v_cmd_inc, X_SIZE, Y_SIZE - 1, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_v_cmd_dec, X_SIZE, Y_SIZE - 1, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_v_rsp_inc, X_SIZE, Y_SIZE - 1, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_v_rsp_dec, X_SIZE, Y_SIZE - 1, 2);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_false_cmd_in, X_SIZE, Y_SIZE, 4, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_false_cmd_out, X_SIZE, Y_SIZE, 4, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_false_rsp_in, X_SIZE, Y_SIZE, 4, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_false_rsp_out, X_SIZE, Y_SIZE, 4, 2);
+
+   return EXIT_SUCCESS;
+}
+
+
+void handler(int dummy = 0) {
+   stop_called = true;
+   sc_stop();
+}
+
+void voidhandler(int dummy = 0) {}
+
+int sc_main (int argc, char *argv[])
+{
+   signal(SIGINT, handler);
+   signal(SIGPIPE, voidhandler);
+
+   try {
+      return _main(argc, argv);
+   } catch (std::exception &e) {
+      std::cout << e.what() << std::endl;
+   } catch (...) {
+      std::cout << "Unknown exception occured" << std::endl;
+      throw;
+   }
+   return 1;
+}
+
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/top.desc
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/top.desc	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/top.desc	(revision 724)
@@ -0,0 +1,46 @@
+
+# -*- python -*-
+
+# internal VCI parameters values
+vci_cell_size_int   = 4
+vci_cell_size_ext   = 8
+
+vci_plen_size       = 8
+vci_addr_size       = 32
+vci_rerror_size     = 1
+vci_clen_size       = 1
+vci_rflag_size      = 1
+vci_srcid_size      = 14
+vci_pktid_size      = 4
+vci_trdid_size      = 4
+vci_wrplen_size     = 1
+
+# DSPIN network parameters values
+dspin_cmd_flit_size     = 39
+dspin_rsp_flit_size     = 32
+
+todo = Platform('caba', 'top.cpp',
+
+    uses = [
+            Uses('caba:tsar_xbar_cluster', 
+                  vci_data_width_int = vci_cell_size_int,
+                  vci_data_width_ext = vci_cell_size_ext,
+                  dspin_cmd_width    = dspin_cmd_flit_size,
+                  dspin_rsp_width    = dspin_rsp_flit_size),
+
+            Uses('common:elf_file_loader'),
+            Uses('common:plain_file_loader'),
+           ],
+
+    # default VCI parameters (global variables)
+    cell_size   = vci_cell_size_int,  
+    plen_size   = vci_plen_size,
+    addr_size   = vci_addr_size,
+    rerror_size = vci_rerror_size,
+    clen_size   = vci_clen_size,
+    rflag_size  = vci_rflag_size,
+    srcid_size  = vci_srcid_size,
+    pktid_size  = vci_pktid_size,
+    trdid_size  = vci_trdid_size,
+    wrplen_size = vci_wrplen_size,
+)
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd	(revision 724)
@@ -0,0 +1,110 @@
+
+# -*- python -*-
+
+Module('caba:tsar_xbar_cluster', 
+   classname = 'soclib::caba::TsarXbarCluster',
+   tmpl_parameters = [
+      parameter.Int('dspin_cmd_width'),
+      parameter.Int('dspin_rsp_width'),
+        parameter.Module('vci_param_int', default = 'caba:vci_param',
+                          cell_size = parameter.Reference('vci_data_width_int')),
+        parameter.Module('vci_param_ext', default = 'caba:vci_param',
+                          cell_size = parameter.Reference('vci_data_width_ext')),
+        ],
+
+   header_files = [ '../source/include/tsar_xbar_cluster.h', 
+        ],
+
+   implementation_files = [ '../source/src/tsar_xbar_cluster.cpp', 
+        ],
+
+   uses = [
+      Uses('caba:base_module'),
+      Uses('common:mapping_table'),
+      Uses('common:iss2'),
+              
+      Uses('caba:vci_cc_vcache_wrapper', 
+              cell_size       = parameter.Reference('vci_data_width_int'),
+              dspin_in_width  = parameter.Reference('dspin_cmd_width'),
+              dspin_out_width = parameter.Reference('dspin_rsp_width'),
+              iss_t           = 'common:gdb_iss', 
+              gdb_iss_t       = 'common:mips32el'),
+
+      Uses('caba:vci_mem_cache',
+              memc_cell_size_int = parameter.Reference('vci_data_width_int'),
+              memc_cell_size_ext = parameter.Reference('vci_data_width_ext'),
+              dspin_in_width  = parameter.Reference('dspin_rsp_width'),
+              dspin_out_width = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:vci_simple_rom',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_simple_ram',
+              cell_size       = parameter.Reference('vci_data_width_ext')),
+
+      Uses('caba:vci_simple_ram',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_xicu',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_local_crossbar', 
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:dspin_local_crossbar', 
+              flit_width      = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:dspin_local_crossbar', 
+              flit_width      = parameter.Reference('dspin_rsp_width')),
+
+      Uses('caba:virtual_dspin_router', 
+              flit_width      = parameter.Reference('dspin_cmd_width')),
+
+      Uses('caba:virtual_dspin_router', 
+              flit_width      = parameter.Reference('dspin_rsp_width')),
+
+      Uses('caba:vci_multi_tty',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_framebuffer',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_multi_nic',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_chbuf_dma',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_block_device_tsar',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_multi_dma',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_dspin_target_wrapper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_dspin_initiator_wrapper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('caba:vci_simhelper',
+              cell_size       = parameter.Reference('vci_data_width_int')),
+
+      Uses('common:elf_file_loader'),
+      ],
+
+   ports = [
+      Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
+      Port('caba:clock_in', 'p_clk', auto = 'clock'),
+      Port('caba:dspin_output', 'p_cmd_out', [4, 3], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+      Port('caba:dspin_input', 'p_cmd_in', [4, 3], 
+              dspin_data_size = parameter.Reference('dspin_cmd_width')),
+      Port('caba:dspin_output', 'p_rsp_out', [4, 2], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')), 
+      Port('caba:dspin_input', 'p_rsp_in', [4, 2], 
+              dspin_data_size = parameter.Reference('dspin_rsp_width')),
+      ],
+)
+
+
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h	(revision 724)
@@ -0,0 +1,217 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_xbar_cluster.h
+// Author: Alain Greiner
+// Copyright: UPMC/LIP6
+// Date : march 2013
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef SOCLIB_CABA_TSAR_XBAR_CLUSTER_H
+#define SOCLIB_CABA_TSAR_XBAR_CLUSTER_H
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "mips32.h"
+#include "vci_simple_ram.h"
+#include "vci_simple_rom.h"
+#include "vci_xicu.h"
+#include "dspin_local_crossbar.h"
+#include "vci_local_crossbar.h"
+#include "vci_dspin_initiator_wrapper.h"
+#include "vci_dspin_target_wrapper.h"
+#include "virtual_dspin_router.h"
+#include "vci_multi_tty.h"
+#include "vci_multi_nic.h"
+#include "vci_chbuf_dma.h"
+#include "vci_block_device_tsar.h"
+#include "vci_framebuffer.h"
+#include "vci_multi_dma.h"
+#include "vci_mem_cache.h"
+#include "vci_cc_vcache_wrapper.h"
+#include "vci_simhelper.h"
+
+namespace soclib { namespace caba {
+
+///////////////////////////////////////////////////////////////////////////
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext>  class TsarXbarCluster
+///////////////////////////////////////////////////////////////////////////
+    : public soclib::caba::BaseModule
+{
+    public:
+
+    // Used in destructor
+    size_t n_procs;
+
+    // Ports
+    sc_in<bool>                                     p_clk;
+    sc_in<bool>                                     p_resetn;
+    soclib::caba::DspinOutput<dspin_cmd_width>      **p_cmd_out;
+    soclib::caba::DspinInput<dspin_cmd_width>       **p_cmd_in;
+    soclib::caba::DspinOutput<dspin_rsp_width>      **p_rsp_out;
+    soclib::caba::DspinInput<dspin_rsp_width>       **p_rsp_in;
+
+    // interrupt signals
+    sc_signal<bool>         signal_false;
+    sc_signal<bool>         signal_proc_it[8 * 6]; // 6 = Number of IRQs in the MIPS
+    sc_signal<bool>         signal_irq_mdma[8];
+    sc_signal<bool>         signal_irq_mtty[23];
+    sc_signal<bool>         signal_irq_mnic_rx[8];  // unused
+    sc_signal<bool>         signal_irq_mnic_tx[8];  // unused
+    sc_signal<bool>         signal_irq_chbuf[8];  // unused
+    sc_signal<bool>         signal_irq_memc;
+    sc_signal<bool>         signal_irq_bdev;
+
+    // DSPIN signals between DSPIN routers and local_crossbars
+    DspinSignals<dspin_cmd_width>   signal_dspin_cmd_l2g_d;
+    DspinSignals<dspin_cmd_width>   signal_dspin_cmd_g2l_d;
+    DspinSignals<dspin_cmd_width>   signal_dspin_m2p_l2g_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_m2p_g2l_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_clack_l2g_c;
+    DspinSignals<dspin_cmd_width>   signal_dspin_clack_g2l_c;
+    DspinSignals<dspin_rsp_width>   signal_dspin_rsp_l2g_d;
+    DspinSignals<dspin_rsp_width>   signal_dspin_rsp_g2l_d;
+    DspinSignals<dspin_rsp_width>   signal_dspin_p2m_l2g_c;
+    DspinSignals<dspin_rsp_width>   signal_dspin_p2m_g2l_c;
+
+    // Direct VCI signals to VCI/DSPIN wrappers
+    VciSignals<vci_param_int>       signal_vci_g2l_d;
+    VciSignals<vci_param_int>       signal_vci_l2g_d;
+
+    VciSignals<vci_param_int>       signal_vci_ini_proc[8];
+    VciSignals<vci_param_int>       signal_vci_ini_mdma;
+    VciSignals<vci_param_int>       signal_vci_ini_bdev;
+    VciSignals<vci_param_int>       signal_vci_ini_chbuf;
+
+    VciSignals<vci_param_int>       signal_vci_tgt_memc;
+    VciSignals<vci_param_int>       signal_vci_tgt_xicu;
+    VciSignals<vci_param_int>       signal_vci_tgt_mdma;
+    VciSignals<vci_param_int>       signal_vci_tgt_mtty;
+    VciSignals<vci_param_int>       signal_vci_tgt_bdev;
+    VciSignals<vci_param_int>       signal_vci_tgt_brom;
+    VciSignals<vci_param_int>       signal_vci_tgt_fbuf;
+    VciSignals<vci_param_int>       signal_vci_tgt_mnic;
+    VciSignals<vci_param_int>       signal_vci_tgt_chbuf;
+    VciSignals<vci_param_int>       signal_vci_tgt_simh;
+
+
+    // Coherence DSPIN signals to local crossbar
+    DspinSignals<dspin_cmd_width>     signal_dspin_m2p_memc;
+    DspinSignals<dspin_cmd_width>     signal_dspin_clack_memc;
+    DspinSignals<dspin_rsp_width>     signal_dspin_p2m_memc;
+    DspinSignals<dspin_cmd_width>     signal_dspin_m2p_proc[8];
+    DspinSignals<dspin_cmd_width>     signal_dspin_clack_proc[8];
+    DspinSignals<dspin_rsp_width>     signal_dspin_p2m_proc[8];
+
+    // external RAM to MEMC VCI signal
+    VciSignals<vci_param_ext>         signal_vci_xram;
+
+    // Components
+
+    VciCcVCacheWrapper<vci_param_int,
+                       dspin_cmd_width,
+                       dspin_rsp_width,
+                       GdbServer<Mips32ElIss> >*  proc[8];
+
+
+    VciMemCache<vci_param_int,
+                vci_param_ext,
+                dspin_rsp_width,
+                dspin_cmd_width>*                 memc;
+
+    VciXicu<vci_param_int>*                       xicu;
+
+    VciMultiDma<vci_param_int>*                   mdma;
+
+    VciSimpleRam<vci_param_ext>*                  xram;
+
+    VciSimpleRom<vci_param_int>*                  brom;
+
+    VciMultiTty<vci_param_int>*                   mtty;
+
+    VciSimhelper<vci_param_int>*                  simhelper;
+
+    VciFrameBuffer<vci_param_int>*                fbuf;
+
+    VciMultiNic<vci_param_int>*                  mnic;
+
+    VciChbufDma<vci_param_int>*                   chbuf;
+
+    VciBlockDeviceTsar<vci_param_int>*            bdev;
+
+    VciLocalCrossbar<vci_param_int>*              xbar_d;
+    VciDspinInitiatorWrapper<vci_param_int,
+                             dspin_cmd_width,
+                             dspin_rsp_width>*    wi_xbar_d;
+    VciDspinTargetWrapper<vci_param_int,
+                          dspin_cmd_width,
+                          dspin_rsp_width>*       wt_xbar_d;
+
+    DspinLocalCrossbar<dspin_cmd_width>*          xbar_m2p_c;
+    DspinLocalCrossbar<dspin_rsp_width>*          xbar_p2m_c;
+    DspinLocalCrossbar<dspin_cmd_width>*          xbar_clack_c;
+
+    VirtualDspinRouter<dspin_cmd_width>*          router_cmd;
+    VirtualDspinRouter<dspin_rsp_width>*          router_rsp;
+
+    TsarXbarCluster( sc_module_name                     insname,
+                     size_t                             nb_procs,      // processors
+                     size_t                             nb_ttys,       // TTY terminals
+                     size_t                             nb_dmas,       //  DMA channels
+                     size_t                             x,             // x coordinate
+                     size_t                             y,             // y coordinate
+                     size_t                             cluster,       // y + ymax*x
+                     const soclib::common::MappingTable &mtd,          // internal
+                     const soclib::common::MappingTable &mtx,          // external
+                     size_t                             x_width,       // x field bits
+                     size_t                             y_width,       // y field bits
+                     size_t                             l_width,       // l field bits
+                     size_t                             tgtid_memc,
+                     size_t                             tgtid_xicu,
+                     size_t                             tgtid_mdma,
+                     size_t                             tgtid_fbuf,
+                     size_t                             tgtid_mtty,
+                     size_t                             tgtid_brom,
+                     size_t                             tgtid_mnic,
+                     size_t                             tgtid_chbuf,
+                     size_t                             tgtid_bdev,
+                     size_t                             tgtid_simh,
+                     size_t                             memc_ways,
+                     size_t                             memc_sets,
+                     size_t                             l1_i_ways,
+                     size_t                             l1_i_sets,
+                     size_t                             l1_d_ways,
+                     size_t                             l1_d_sets,
+                     size_t                             irq_per_processor,
+                     size_t                             xram_latency,  // external ram
+                     bool                               io,            // I/O cluster
+                     size_t                             xfb,           // fbf pixels
+                     size_t                             yfb,           // fbf lines
+                     char*                              disk_name,     // virtual disk
+                     size_t                             block_size,    // block size
+                     size_t                             nic_channels,  // number channels
+                     char*                              nic_rx_name,   // filename rx
+                     char*                              nic_tx_name,   // filename tx
+                     uint32_t                           nic_timeout,   // cycles
+                     size_t                             chbufdma_channels,  // number channels
+                     const Loader                       &loader,
+                     uint32_t                           frozen_cycles,
+                     uint32_t                           start_debug_cycle,
+                     bool                               memc_debug_ok,
+                     bool                               proc_debug_ok);
+
+    ~TsarXbarCluster();
+
+};
+}}
+
+#endif
Index: /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp	(revision 724)
@@ -0,0 +1,683 @@
+//////////////////////////////////////////////////////////////////////////////
+// File: tsar_xbar_cluster.cpp
+// Author: Alain Greiner
+// Copyright: UPMC/LIP6
+// Date : march 2011
+// This program is released under the GNU public license
+//////////////////////////////////////////////////////////////////////////////
+// This file define a TSAR cluster architecture with virtual memory:
+// - It uses two virtual_dspin_router as distributed global interconnect
+// - It uses four dspin_local_crossbar as local interconnect
+// - It uses the vci_cc_vcache_wrapper
+// - It uses the vci_mem_cache
+// - It contains a private RAM with a variable latency to emulate the L3 cache
+// - It can contains 1, 2 or 4 processors
+// - Each processor has a private dma channel (vci_multi_dma)
+// - It uses the vci_xicu interrupt controller
+// - The peripherals MTTY, BDEV, FBUF, MNIC and BROM are in cluster (0,0)
+// - The Multi-TTY component controls up to 15 terminals.
+// - Each Multi-DMA component controls up to 8 DMA channels.
+// - The DMA IRQs are connected to IRQ_IN[8]...IRQ_IN[15]
+// - The TTY IRQs are connected to IRQ_IN[16]...IRQ_IN[30]
+// - The BDEV IRQ is connected to IRQ_IN[31]
+//////////////////////////////////////////////////////////////////////////////////
+
+#include "../include/tsar_xbar_cluster.h"
+
+
+namespace soclib {
+namespace caba  {
+
+////////////////////////////////////////////////////////////////////////////////////
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext> TsarXbarCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>::TsarXbarCluster(
+////////////////////////////////////////////////////////////////////////////////////
+         sc_module_name                     insname,
+         size_t                             nb_procs,
+         size_t                             nb_ttys,
+         size_t                             nb_dmas,
+         size_t                             x_id,
+         size_t                             y_id,
+         size_t                             cluster_id,
+         const soclib::common::MappingTable &mtd,
+         const soclib::common::MappingTable &mtx,
+         size_t                             x_width,
+         size_t                             y_width,
+         size_t                             l_width,
+         size_t                             tgtid_memc,
+         size_t                             tgtid_xicu,
+         size_t                             tgtid_mdma,
+         size_t                             tgtid_fbuf,
+         size_t                             tgtid_mtty,
+         size_t                             tgtid_brom,
+         size_t                             tgtid_mnic,
+         size_t                             tgtid_chbuf,
+         size_t                             tgtid_bdev,
+         size_t                             tgtid_simh,
+         size_t                             memc_ways,
+         size_t                             memc_sets,
+         size_t                             l1_i_ways,
+         size_t                             l1_i_sets,
+         size_t                             l1_d_ways,
+         size_t                             l1_d_sets,
+         size_t                             irq_per_processor,
+         size_t                             xram_latency,
+         bool                               io,
+         size_t                             xfb,
+         size_t                             yfb,
+         char*                              disk_name,
+         size_t                             block_size,
+         size_t                             nic_channels,
+         char*                              nic_rx_name,
+         char*                              nic_tx_name,
+         uint32_t                           nic_timeout,
+         size_t                             chbufdma_channels,
+         const Loader &                     loader,
+         uint32_t                           frozen_cycles,
+         uint32_t                           debug_start_cycle,
+         bool                               memc_debug_ok,
+         bool                               proc_debug_ok)
+            : soclib::caba::BaseModule(insname),
+            p_clk("clk"),
+            p_resetn("resetn")
+
+{
+
+    n_procs = nb_procs;
+
+    // Vectors of ports definition
+    p_cmd_in  = alloc_elems<DspinInput<dspin_cmd_width> >  ("p_cmd_in",  4, 3);
+    p_cmd_out = alloc_elems<DspinOutput<dspin_cmd_width> > ("p_cmd_out", 4, 3);
+    p_rsp_in  = alloc_elems<DspinInput<dspin_rsp_width> >  ("p_rsp_in",  4, 2);
+    p_rsp_out = alloc_elems<DspinOutput<dspin_rsp_width> > ("p_rsp_out", 4, 2);
+
+    /////////////////////////////////////////////////////////////////////////////
+    // Components definition
+    /////////////////////////////////////////////////////////////////////////////
+
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        std::ostringstream sproc;
+        sproc << "proc_" << x_id << "_" << y_id << "_" << p;
+        proc[p] = new VciCcVCacheWrapper<vci_param_int,
+                                         dspin_cmd_width,
+                                         dspin_rsp_width,
+                                         GdbServer<Mips32ElIss> >(
+                      sproc.str().c_str(),
+                      cluster_id * nb_procs + p,      // GLOBAL PROC_ID
+                      mtd,                            // Mapping Table
+                      IntTab(cluster_id,p),           // SRCID
+                      (cluster_id << l_width) + p,    // CC_GLOBAL_ID
+                      8,                              // ITLB ways
+                      8,                              // ITLB sets
+                      8,                              // DTLB ways
+                      8,                              // DTLB sets
+                      l1_i_ways,l1_i_sets, 16,        // ICACHE size
+                      l1_d_ways,l1_d_sets, 16,        // DCACHE size
+                      4,                              // WBUF nlines
+                      4,                              // WBUF nwords
+                      x_width,
+                      y_width,
+                      frozen_cycles,                  // max frozen cycles
+                      debug_start_cycle,
+                      proc_debug_ok);
+
+    }
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream smemc;
+    smemc << "memc_" << x_id << "_" << y_id;
+    memc = new VciMemCache<vci_param_int,
+                           vci_param_ext,
+                           dspin_rsp_width,
+                           dspin_cmd_width>(
+                     smemc.str().c_str(),
+                     mtd,                                // Mapping Table direct space
+                     mtx,                                // Mapping Table external space
+                     IntTab(cluster_id),                 // SRCID external space
+                     IntTab(cluster_id, tgtid_memc),     // TGTID direct space
+                     //(cluster_id << l_width) + nb_procs, // CC_GLOBAL_ID
+                     x_width,                            // Number of x bits in platform
+                     y_width,                            // Number of y bits in platform
+                     memc_ways, memc_sets, 16,           // CACHE SIZE
+                     3,                                  // MAX NUMBER OF COPIES
+                     4096,                               // HEAP SIZE
+                     8,                                  // TRANSACTION TABLE DEPTH
+                     8,                                  // UPDATE TABLE DEPTH
+                     8,                                  // INVALIDATE TABLE DEPTH
+                     debug_start_cycle,
+                     memc_debug_ok);
+
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream sxram;
+    sxram << "xram_" << x_id << "_" << y_id;
+    xram = new VciSimpleRam<vci_param_ext>(
+                     sxram.str().c_str(),
+                     IntTab(cluster_id),
+                     mtx,
+                     loader,
+                     xram_latency);
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream sxicu;
+    sxicu << "xicu_" << x_id << "_" << y_id;
+    xicu = new VciXicu<vci_param_int>(
+                     sxicu.str().c_str(),
+                     mtd,                               // mapping table
+                     IntTab(cluster_id, tgtid_xicu),    // TGTID_D
+                     nb_procs,                          // number of timer IRQs
+                     32,                                // number of hard IRQs
+                     32,                                // number of soft IRQs
+                     nb_procs*irq_per_processor);                         // number of output IRQs
+
+
+    /////////////////////////////////////////////////////////////////////////////
+    std::ostringstream smdma;
+    smdma << "mdma_" << x_id << "_" << y_id;
+    mdma = new VciMultiDma<vci_param_int>(
+                     smdma.str().c_str(),
+                     mtd,
+                     IntTab(cluster_id, nb_procs),        // SRCID
+                     IntTab(cluster_id, tgtid_mdma),      // TGTID
+                     64,                                  // burst size
+                     nb_dmas);                            // number of IRQs
+
+
+    /////////////////////////////////////////////////////////////////////////////
+    size_t nb_direct_initiators      = nb_procs + 1;
+    size_t nb_direct_targets         = 3;
+    if (io)
+    {
+        nb_direct_initiators         = nb_procs + 3;
+        nb_direct_targets            = 10;
+    }
+
+    std::ostringstream sxbar;
+    sxbar << "xbar_" << x_id << "_" << y_id;
+    xbar_d = new VciLocalCrossbar<vci_param_int>(
+                     sxbar.str().c_str(),
+                     mtd,                             // mapping table
+                     //x_id, y_id,                    // cluster coordinates
+                     cluster_id,
+                     nb_direct_initiators,            // number of local of sources
+                     nb_direct_targets,               // number of local dests 
+                     tgtid_memc);                     // Default target
+
+    ////////////// vci_dspin wrappers 
+    std::ostringstream swtxbar;
+    swtxbar << "wt_xbar_" << x_id << "_" << y_id;
+    wt_xbar_d = new VciDspinTargetWrapper<vci_param_int, dspin_cmd_width, dspin_rsp_width>(
+                swtxbar.str().c_str(),
+                x_width + y_width + l_width );
+
+    std::ostringstream swixbar;
+    swixbar << "wi_xbar_" << x_id << "_" << y_id;
+    wi_xbar_d = new VciDspinInitiatorWrapper<vci_param_int, dspin_cmd_width, dspin_rsp_width>(
+                swixbar.str().c_str(),
+                x_width + y_width + l_width );
+
+    /////////////////////////////////////////////////////////////////////////////
+    xbar_m2p_c = new DspinLocalCrossbar<dspin_cmd_width>(
+                     "xbar_m2p_c",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local targets 
+                     2, 2,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // don't use local routing table
+                     true );                       // broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    xbar_p2m_c = new DspinLocalCrossbar<dspin_rsp_width>(
+                     "xbar_p2m_c",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, 0,          // l_width unused on p2m network
+                     nb_procs,                     // number of local sources
+                     1,                            // number of local dests
+                     2, 2,                         // fifo depths
+                     false,                        // RSP
+                     false,                        // don't use local routing table
+                     false );                      // no broadcast 
+
+    /////////////////////////////////////////////////////////////////////////////
+    xbar_clack_c = new DspinLocalCrossbar<dspin_cmd_width>(
+                     "xbar_clack_c",
+                     mtd,                          // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local targets 
+                     1, 1,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // don't use local routing table
+                     false);                       // broadcast
+
+    /////////////////////////////////////////////////////////////////////////////
+    router_cmd = new VirtualDspinRouter<dspin_cmd_width>(
+                     "router_cmd",
+                     x_id,y_id,                    // coordinate in the mesh
+                     x_width, y_width,             // x & y fields width
+                     3,                            // nb virtual channels
+                     4,4);                         // input & output fifo depths
+
+    /////////////////////////////////////////////////////////////////////////////
+    router_rsp = new VirtualDspinRouter<dspin_rsp_width>(
+                     "router_rsp",
+                     x_id,y_id,                    // coordinates in mesh
+                     x_width, y_width,             // x & y fields width
+                     2,                            // nb virtual channels
+                     4,4);                         // input & output fifo depths
+
+    // IO cluster components
+    if (io)
+    {
+        /////////////////////////////////////////////
+        brom = new VciSimpleRom<vci_param_int>(
+                     "brom",
+                     IntTab(cluster_id, tgtid_brom),
+                     mtd,
+                     loader);
+
+        /////////////////////////////////////////////
+        fbuf = new VciFrameBuffer<vci_param_int>(
+                     "fbuf",
+                     IntTab(cluster_id, tgtid_fbuf),
+                     mtd,
+                     xfb, yfb);
+
+        /////////////////////////////////////////////
+        bdev = new VciBlockDeviceTsar<vci_param_int>(
+                     "bdev",
+                     mtd,
+                     IntTab(cluster_id, nb_procs + 1),
+                     IntTab(cluster_id, tgtid_bdev),
+                     disk_name,
+                     block_size,
+                     64);            // burst size
+
+        int mac = 0xBEEF0000;
+        mnic = new VciMultiNic<vci_param_int>(
+                     "mnic",
+                     IntTab(cluster_id, tgtid_mnic),
+                     mtd,
+                     nic_channels,
+                     mac,             // mac_4 address
+                     0xBABE,          // mac_2 address
+                     nic_rx_name,
+                     nic_tx_name);
+
+
+
+        /////////////////////////////////////////////
+        chbuf = new VciChbufDma<vci_param_int>(
+                     "chbuf_dma",
+                     mtd,
+                     IntTab(cluster_id, nb_procs + 2),
+                     IntTab(cluster_id, tgtid_chbuf),
+                     64,
+                     chbufdma_channels); 
+
+        /////////////////////////////////////////////
+        std::vector<std::string> vect_names;
+        for (size_t tid = 0; tid < nb_ttys; tid++)
+        {
+            std::ostringstream term_name;
+            term_name <<  "term" << tid;
+            vect_names.push_back(term_name.str().c_str());
+        }
+        mtty = new VciMultiTty<vci_param_int>(
+                     "mtty",
+                     IntTab(cluster_id, tgtid_mtty),
+                     mtd,
+                     vect_names);
+
+        simhelper = new VciSimhelper<vci_param_int>(
+                     "sim_helper",
+                     IntTab(cluster_id, tgtid_simh),
+                     mtd);
+    }
+
+    ////////////////////////////////////
+    // Connections are defined here
+    ////////////////////////////////////
+
+    //////////////////////// CMD ROUTER and RSP ROUTER
+    router_cmd->p_clk                        (this->p_clk);
+    router_cmd->p_resetn                     (this->p_resetn);
+    router_rsp->p_clk                        (this->p_clk);
+    router_rsp->p_resetn                     (this->p_resetn);
+
+    for (int i = 0; i < 4; i++)
+    {
+        for (int k = 0; k < 3; k++)
+        {
+            router_cmd->p_out[i][k]          (this->p_cmd_out[i][k]);
+            router_cmd->p_in[i][k]           (this->p_cmd_in[i][k]);
+        }
+
+        for (int k = 0; k < 2; k++)
+        {
+            router_rsp->p_out[i][k]          (this->p_rsp_out[i][k]);
+            router_rsp->p_in[i][k]           (this->p_rsp_in[i][k]);
+        }
+    }
+
+    router_cmd->p_out[4][0]                  (signal_dspin_cmd_g2l_d);
+    router_cmd->p_out[4][1]                  (signal_dspin_m2p_g2l_c);
+    router_cmd->p_out[4][2]                  (signal_dspin_clack_g2l_c);
+    router_cmd->p_in[4][0]                   (signal_dspin_cmd_l2g_d);
+    router_cmd->p_in[4][1]                   (signal_dspin_m2p_l2g_c);
+    router_cmd->p_in[4][2]                   (signal_dspin_clack_l2g_c);
+
+    router_rsp->p_out[4][0]                  (signal_dspin_rsp_g2l_d);
+    router_rsp->p_out[4][1]                  (signal_dspin_p2m_g2l_c);
+    router_rsp->p_in[4][0]                   (signal_dspin_rsp_l2g_d);
+    router_rsp->p_in[4][1]                   (signal_dspin_p2m_l2g_c);
+
+
+    std::cout << "  - CMD & RSP routers connected" << std::endl;
+
+    wi_xbar_d->p_clk                         (this->p_clk);
+    wi_xbar_d->p_resetn                      (this->p_resetn);
+    wi_xbar_d->p_vci                         (signal_vci_l2g_d);
+    wi_xbar_d->p_dspin_cmd                   (signal_dspin_cmd_l2g_d);
+    wi_xbar_d->p_dspin_rsp                   (signal_dspin_rsp_g2l_d);
+
+    std::cout << "  - Wrapper Ini VCI2DSPIN Direct connected" << std::endl;
+
+    wt_xbar_d->p_clk                         (this->p_clk);
+    wt_xbar_d->p_resetn                      (this->p_resetn);
+    wt_xbar_d->p_vci                         (signal_vci_g2l_d);
+    wt_xbar_d->p_dspin_cmd                   (signal_dspin_cmd_g2l_d);
+    wt_xbar_d->p_dspin_rsp                   (signal_dspin_rsp_l2g_d);
+
+    std::cout << "  - Wrapper Tgt VCI2DSPIN Direct connected" << std::endl;
+
+    ///////////////////// CMD VCI  local crossbar direct
+    xbar_d->p_clk                            (this->p_clk);
+    xbar_d->p_resetn                         (this->p_resetn);
+    xbar_d->p_target_to_up                   (signal_vci_g2l_d);
+    xbar_d->p_initiator_to_up                (signal_vci_l2g_d);
+
+    xbar_d->p_to_target[tgtid_memc]          (signal_vci_tgt_memc);
+    xbar_d->p_to_target[tgtid_xicu]          (signal_vci_tgt_xicu);
+    xbar_d->p_to_target[tgtid_mdma]          (signal_vci_tgt_mdma);
+
+    xbar_d->p_to_initiator[nb_procs]         (signal_vci_ini_mdma);
+
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_d->p_to_initiator[p]            (signal_vci_ini_proc[p]);
+
+    if (io)
+    {
+        xbar_d->p_to_target[tgtid_mtty]      (signal_vci_tgt_mtty);
+        xbar_d->p_to_target[tgtid_brom]      (signal_vci_tgt_brom);
+        xbar_d->p_to_target[tgtid_bdev]      (signal_vci_tgt_bdev);
+        xbar_d->p_to_target[tgtid_fbuf]      (signal_vci_tgt_fbuf);
+        xbar_d->p_to_target[tgtid_mnic]      (signal_vci_tgt_mnic);
+        xbar_d->p_to_target[tgtid_chbuf]     (signal_vci_tgt_chbuf);
+        xbar_d->p_to_target[tgtid_simh]      (signal_vci_tgt_simh);
+
+        xbar_d->p_to_initiator[nb_procs + 1] (signal_vci_ini_bdev);
+        xbar_d->p_to_initiator[nb_procs + 2] (signal_vci_ini_chbuf);
+    }
+
+    std::cout << "  - Direct crossbar connected" << std::endl;
+
+    ////////////////////// M2P DSPIN local crossbar coherence
+    xbar_m2p_c->p_clk                            (this->p_clk);
+    xbar_m2p_c->p_resetn                         (this->p_resetn);
+    xbar_m2p_c->p_global_out                     (signal_dspin_m2p_l2g_c);
+    xbar_m2p_c->p_global_in                      (signal_dspin_m2p_g2l_c);
+    xbar_m2p_c->p_local_in[0]                    (signal_dspin_m2p_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_m2p_c->p_local_out[p]               (signal_dspin_m2p_proc[p]);
+
+    std::cout << "  - M2P Coherence crossbar connected" << std::endl;
+
+    ////////////////////// CLACK DSPIN local crossbar coherence
+    xbar_clack_c->p_clk                          (this->p_clk);
+    xbar_clack_c->p_resetn                       (this->p_resetn);
+    xbar_clack_c->p_global_out                   (signal_dspin_clack_l2g_c);
+    xbar_clack_c->p_global_in                    (signal_dspin_clack_g2l_c);
+    xbar_clack_c->p_local_in[0]                  (signal_dspin_clack_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_clack_c->p_local_out[p]             (signal_dspin_clack_proc[p]);
+
+    std::cout << "  - Clack Coherence crossbar connected" << std::endl;
+
+    ////////////////////////// P2M DSPIN local crossbar coherence
+    xbar_p2m_c->p_clk                            (this->p_clk);
+    xbar_p2m_c->p_resetn                         (this->p_resetn);
+    xbar_p2m_c->p_global_out                     (signal_dspin_p2m_l2g_c);
+    xbar_p2m_c->p_global_in                      (signal_dspin_p2m_g2l_c);
+    xbar_p2m_c->p_local_out[0]                   (signal_dspin_p2m_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        xbar_p2m_c->p_local_in[p]                (signal_dspin_p2m_proc[p]);
+
+    std::cout << "  - P2M Coherence crossbar connected" << std::endl;
+
+
+    //////////////////////////////////// Processors
+    for (size_t p = 0; p < nb_procs; p++)
+    {
+        proc[p]->p_clk                      (this->p_clk);
+        proc[p]->p_resetn                   (this->p_resetn);
+        proc[p]->p_vci                      (signal_vci_ini_proc[p]);
+        proc[p]->p_dspin_m2p                (signal_dspin_m2p_proc[p]);
+        proc[p]->p_dspin_p2m                (signal_dspin_p2m_proc[p]);
+        proc[p]->p_dspin_clack              (signal_dspin_clack_proc[p]);
+
+        for ( size_t i = 0; i < irq_per_processor; i++)
+        {
+            proc[p]->p_irq[i]               (signal_proc_it[p*irq_per_processor + i]);
+        }
+        for ( size_t j = irq_per_processor; j < 6; j++) // 6 = number of irqs in the MIPS
+        {
+            proc[p]->p_irq[j]               (signal_false);
+        }
+
+    }
+
+    std::cout << "  - Processors connected" << std::endl;
+
+    ///////////////////////////////////// XICU
+    xicu->p_clk                        (this->p_clk);
+    xicu->p_resetn                     (this->p_resetn);
+    xicu->p_vci                        (signal_vci_tgt_xicu);
+    for (size_t p = 0; p < nb_procs * irq_per_processor; p++)
+    {
+        xicu->p_irq[p]                 (signal_proc_it[p]);
+    }
+    for (size_t i = 0; i < 32; i++)
+    {
+        if (io) // I/O cluster
+        {
+            if      (i < 8)                  xicu->p_hwi[i] (signal_false);
+            else if (i < (8 + nb_dmas))      xicu->p_hwi[i] (signal_irq_mdma[i - 8]);
+            else if (i < 16)                 xicu->p_hwi[i] (signal_false);
+            else if (i < (16 + nb_ttys))     xicu->p_hwi[i] (signal_irq_mtty[i - 16]);
+            else if (i < 30)                 xicu->p_hwi[i] (signal_false);
+            else if (i < 31)                 xicu->p_hwi[i] (signal_irq_memc);
+            else                             xicu->p_hwi[i] (signal_irq_bdev);
+        }
+        else      // other clusters
+        {
+            if      (i < 8)                  xicu->p_hwi[i] (signal_false);
+            else if (i < (8 + nb_dmas))      xicu->p_hwi[i] (signal_irq_mdma[i - 8]);
+            else if (i < 30)                 xicu->p_hwi[i] (signal_false);
+            else if (i < 31)                 xicu->p_hwi[i] (signal_irq_memc);
+            else                             xicu->p_hwi[i] (signal_false);
+        }
+    }
+
+    std::cout << "  - XICU connected" << std::endl;
+
+    //////////////////////////////////////////////// MEMC
+    memc->p_clk                        (this->p_clk);
+    memc->p_resetn                     (this->p_resetn);
+    memc->p_irq                        (signal_irq_memc);
+    memc->p_vci_ixr                    (signal_vci_xram);
+    memc->p_vci_tgt                    (signal_vci_tgt_memc);
+    memc->p_dspin_p2m                  (signal_dspin_p2m_memc);
+    memc->p_dspin_m2p                  (signal_dspin_m2p_memc);
+    memc->p_dspin_clack                (signal_dspin_clack_memc);
+
+    std::cout << "  - MEMC connected" << std::endl;
+
+    /////////////////////////////////////////////// XRAM
+    xram->p_clk                        (this->p_clk);
+    xram->p_resetn                     (this->p_resetn);
+    xram->p_vci                        (signal_vci_xram);
+
+    std::cout << "  - XRAM connected" << std::endl;
+
+    ////////////////////////////////////////////// MDMA
+    mdma->p_clk                        (this->p_clk);
+    mdma->p_resetn                     (this->p_resetn);
+    mdma->p_vci_target                 (signal_vci_tgt_mdma);
+    mdma->p_vci_initiator              (signal_vci_ini_mdma);
+    for (size_t i = 0; i < nb_dmas; i++)
+        mdma->p_irq[i]                 (signal_irq_mdma[i]);
+
+    std::cout << "  - MDMA connected" << std::endl;
+
+    /////////////////////////////// Components in I/O cluster
+
+    if (io)
+    {
+        // BDEV
+        bdev->p_clk                    (this->p_clk);
+        bdev->p_resetn                 (this->p_resetn);
+        bdev->p_irq                    (signal_irq_bdev);
+        bdev->p_vci_target             (signal_vci_tgt_bdev);
+        bdev->p_vci_initiator          (signal_vci_ini_bdev);
+
+        std::cout << "  - BDEV connected" << std::endl;
+
+        // FBUF
+        fbuf->p_clk                    (this->p_clk);
+        fbuf->p_resetn                 (this->p_resetn);
+        fbuf->p_vci                    (signal_vci_tgt_fbuf);
+
+        std::cout << "  - FBUF connected" << std::endl;
+
+        // MNIC
+        mnic->p_clk                    (this->p_clk);
+        mnic->p_resetn                 (this->p_resetn);
+        mnic->p_vci                    (signal_vci_tgt_mnic);
+        for (size_t i = 0; i < nic_channels; i++)
+        {
+            mnic->p_rx_irq[i]          (signal_irq_mnic_rx[i]);
+            mnic->p_tx_irq[i]          (signal_irq_mnic_tx[i]);
+        }
+
+        std::cout << "  - MNIC connected" << std::endl;
+
+        // CHBUF
+        chbuf->p_clk                    (this->p_clk);
+        chbuf->p_resetn                 (this->p_resetn);
+        chbuf->p_vci_target             (signal_vci_tgt_chbuf);
+        chbuf->p_vci_initiator          (signal_vci_ini_chbuf);
+        for (size_t i = 0; i < chbufdma_channels; i++)
+        {
+            chbuf->p_irq[i]          (signal_irq_chbuf[i]);
+        }
+
+        std::cout << "  - CHBUF connected" << std::endl;
+
+        // BROM
+        brom->p_clk                    (this->p_clk);
+        brom->p_resetn                 (this->p_resetn);
+        brom->p_vci                    (signal_vci_tgt_brom);
+
+        std::cout << "  - BROM connected" << std::endl;
+
+        // MTTY
+        mtty->p_clk                    (this->p_clk);
+        mtty->p_resetn                 (this->p_resetn);
+        mtty->p_vci                    (signal_vci_tgt_mtty);
+        for (size_t i = 0; i < nb_ttys; i++)
+        {
+            mtty->p_irq[i]             (signal_irq_mtty[i]);
+        }
+
+        std::cout << "  - MTTY connected" << std::endl;
+
+
+        // Sim Helper
+        simhelper->p_clk               (this->p_clk);
+        simhelper->p_resetn            (this->p_resetn);
+        simhelper->p_vci               (signal_vci_tgt_simh);
+        
+        std::cout << "  - SIMH connected" << std::endl;
+   }
+} // end constructor
+
+
+
+template<size_t dspin_cmd_width,
+         size_t dspin_rsp_width,
+         typename vci_param_int,
+         typename vci_param_ext> TsarXbarCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>::~TsarXbarCluster() {
+
+    dealloc_elems<DspinInput<dspin_cmd_width> > (p_cmd_in, 4, 3);
+    dealloc_elems<DspinOutput<dspin_cmd_width> >(p_cmd_out, 4, 3);
+    dealloc_elems<DspinInput<dspin_rsp_width> > (p_rsp_in, 4, 2);
+    dealloc_elems<DspinOutput<dspin_rsp_width> >(p_rsp_out, 4, 2);
+
+    for (size_t p = 0; p < n_procs; p++)
+    {
+        delete proc[p];
+    }
+
+    delete memc;
+    delete xram;
+    delete xicu;
+    delete mdma;
+    delete xbar_d;
+    delete wt_xbar_d;
+    delete wi_xbar_d;
+    delete xbar_m2p_c;
+    delete xbar_p2m_c;
+    delete xbar_clack_c;
+    delete router_cmd;
+    delete router_rsp;
+    if (brom != NULL)
+    {
+        delete brom;
+        delete fbuf;
+        delete bdev;
+        delete mnic;
+        delete chbuf;
+        delete mtty;
+        delete simhelper;
+    }
+}
+
+
+}}
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
+
+
Index: /branches/fault_tolerance/platforms/tsar_mono_mmu/Makefile
===================================================================
--- /branches/fault_tolerance/platforms/tsar_mono_mmu/Makefile	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_mono_mmu/Makefile	(revision 724)
@@ -0,0 +1,7 @@
+simul.x: top.cpp top.desc
+	soclib-cc -j8 -P -p top.desc -I. -o simul.x
+
+clean:
+	soclib-cc -x -p top.desc -I.
+	rm -rf *.o *.x tty*
+
Index: /branches/fault_tolerance/platforms/tsar_mono_mmu/top.cpp
===================================================================
--- /branches/fault_tolerance/platforms/tsar_mono_mmu/top.cpp	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_mono_mmu/top.cpp	(revision 724)
@@ -0,0 +1,531 @@
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <cstdlib>
+#include <cstdarg>
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+#include "mapping_table.h"
+#include "mips32.h"
+#include "vci_simple_ram.h"
+#include "vci_multi_tty.h"
+#include "vci_mem_cache.h"
+#include "vci_cc_vcache_wrapper.h"
+#include "vci_logger.h"
+#include "vci_xicu.h"
+#include "vci_multi_dma.h"
+#include "vci_simhelper.h"
+#include "dspin_local_crossbar.h"
+#include "vci_dspin_initiator_wrapper.h"
+#include "vci_dspin_target_wrapper.h"
+
+	// Define VCI parameters
+#define    cell_width            4
+#define    cell_width_ext        8
+#define    address_width         32
+#define    plen_width            8
+#define    error_width           1
+#define    clen_width            1
+#define    rflag_width           1
+#define    srcid_width           14
+#define    pktid_width           4
+#define    trdid_width           4
+#define    wrplen_width          1
+
+#define    dspin_cmd_width	 39
+#define    dspin_rsp_width	 32
+//   segments definition in direct space
+
+#define    XICU_BASE    0xd8200000
+#define    XICU_SIZE    0x00001000
+
+#define    MDMA_BASE    0xe8000000
+#define    MDMA_SIZE    0x00000014
+
+#define    MTTY_BASE    0xd0200000
+#define    MTTY_SIZE    0x00000010
+
+#define    EXIT_BASE    0xe0000000
+#define    EXIT_SIZE    0x00000010
+
+#define    BOOT_BASE    0xbfc00000
+#define    BOOT_SIZE    0x00040000
+
+#define    MEMC_BASE    0x00000000
+#define    MEMC_SIZE    0x02000000
+
+int _main(int argc, char *argv[])
+{
+	using namespace sc_core;
+	// Avoid repeating these everywhere
+	using soclib::common::IntTab;
+	using soclib::common::Segment;
+	using namespace soclib::caba;
+#ifdef _OPENMP
+	omp_set_dynamic(false);
+	omp_set_num_threads(1);
+	std::cerr << "Built with openmp version " << _OPENMP << std::endl;
+#endif
+	char	soft_name[256]  = "test.elf";   // pathname to binary code
+	size_t	ncycles = 1000000000;   // max number of simulation cycles
+
+	bool    trace_ok = false;
+	size_t  from_cycle = 0;		// debug start cycle
+	size_t  max_frozen = 100000;	// max number of frozen cycles
+
+    /////////////// command line arguments ////////////////
+    if (argc > 1)
+    {
+        for( int n=1 ; n<argc ; n=n+2 )
+        {
+            if( (strcmp(argv[n],"-NCYCLES") == 0) && (n+1<argc) )
+            {
+                ncycles = atoi(argv[n+1]);
+            }
+            else if( (strcmp(argv[n],"-SOFT") == 0) && (n+1<argc) )
+            {
+                strcpy(soft_name, argv[n+1]);
+            }
+            else if( (strcmp(argv[n],"-TRACE") == 0) && (n+1<argc) )
+            {
+                trace_ok = true;
+                from_cycle = atoi(argv[n+1]);
+            }
+            else if( (strcmp(argv[n],"-MAXFROZEN") == 0) && (n+1<argc) )
+            {
+                max_frozen = atoi(argv[n+1]);
+            }
+            else
+            {
+                std::cout << "   Arguments on the command line are (key,value) couples." << std::endl;
+                std::cout << "   The order is not important." << std::endl;
+                std::cout << "   Accepted arguments are :" << std::endl << std::endl;
+                std::cout << "     -SOFT pathname_for_embedded_soft" << std::endl;
+                std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
+                std::cout << "     -TRACE debug_start_cycle" << std::endl;
+                exit(0);
+            }
+        }
+    }
+
+	typedef soclib::caba::VciParams<cell_width,
+					plen_width,
+					address_width,
+					error_width,
+					clen_width,
+					rflag_width,
+					srcid_width,
+					pktid_width,
+					trdid_width,
+					wrplen_width> vci_param;
+	typedef soclib::caba::VciParams<cell_width_ext,
+					plen_width,
+					address_width,
+					error_width,
+					clen_width,
+					rflag_width,
+					srcid_width,
+					pktid_width,
+					trdid_width,
+					wrplen_width> vci_param_ext;
+	typedef soclib::common::Mips32ElIss proc_iss;
+
+	// Direct DSPIN signals to local crossbars
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_proc0_i;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_proc0_i;
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_dma_i;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_dma_i;
+
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_memc_t;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_memc_t;
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_xicu_t;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_xicu_t;
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_dma_t;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_dma_t;
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_tty_t;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_tty_t;
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_rom_t;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_rom_t;
+	DspinSignals<dspin_cmd_width>     signal_dspin_cmd_simh_t;
+	DspinSignals<dspin_rsp_width>     signal_dspin_rsp_simh_t;
+
+	// Coherence DSPIN signals to local crossbar
+	DspinSignals<dspin_cmd_width>	signal_dspin_cmd_l2g_c;
+	DspinSignals<dspin_cmd_width>	signal_dspin_cmd_g2l_c;
+	DspinSignals<dspin_rsp_width>	signal_dspin_rsp_l2g_c;
+	DspinSignals<dspin_rsp_width>	signal_dspin_rsp_g2l_c;
+	DspinSignals<dspin_cmd_width>	signal_dspin_m2p_l2g_c;
+	DspinSignals<dspin_cmd_width>	signal_dspin_m2p_g2l_c;
+	DspinSignals<dspin_rsp_width>	signal_dspin_p2m_l2g_c;
+	DspinSignals<dspin_rsp_width>	signal_dspin_p2m_g2l_c;
+	DspinSignals<dspin_cmd_width>	signal_dspin_clack_l2g_c;
+	DspinSignals<dspin_cmd_width>	signal_dspin_clack_g2l_c;
+
+	DspinSignals<dspin_cmd_width>	signal_dspin_m2p_memc;
+	DspinSignals<dspin_cmd_width>	signal_dspin_clack_memc;
+	DspinSignals<dspin_rsp_width>	signal_dspin_p2m_memc;
+	DspinSignals<dspin_cmd_width>	signal_dspin_m2p_proc[1];
+	DspinSignals<dspin_cmd_width>	signal_dspin_clack_proc[1];
+	DspinSignals<dspin_rsp_width>	signal_dspin_p2m_proc[1];
+
+	// Mapping table
+
+	soclib::common::MappingTable maptabp(32, IntTab(0, 16), IntTab(0, srcid_width), 0xF0000000);
+	
+	maptabp.add(Segment("mc_m" , MEMC_BASE , MEMC_SIZE , IntTab(0, 0), true));
+	maptabp.add(Segment("boot", BOOT_BASE, BOOT_SIZE, IntTab(0, 1), true));
+	maptabp.add(Segment("tty"  , MTTY_BASE  , MTTY_SIZE  , IntTab(0, 2), false));
+	maptabp.add(Segment("xicu" , XICU_BASE , XICU_SIZE , IntTab(0, 3), false));
+	maptabp.add(Segment("dma", MDMA_BASE, MDMA_SIZE, IntTab(0, 4), false));
+	maptabp.add(Segment("simh", EXIT_BASE, EXIT_SIZE, IntTab(0, 5), false));
+
+	std::cout << maptabp << std::endl;
+
+	soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x30000000);
+	maptabx.add(Segment("xram" , MEMC_BASE , MEMC_SIZE , IntTab(0), false));
+	
+	
+	std::cout << maptabx << std::endl;
+
+	// Signals
+
+	sc_clock	signal_clk ("clk");
+	sc_signal<bool> signal_resetn("resetn");
+
+	sc_signal<bool> signal_proc0_it0("signal_proc0_it0");
+	sc_signal<bool> signal_proc0_it1("signal_proc0_it1");
+	sc_signal<bool> signal_proc0_it2("signal_proc0_it2");
+	sc_signal<bool> signal_proc0_it3("signal_proc0_it3");
+	sc_signal<bool> signal_proc0_it4("signal_proc0_it4");
+	sc_signal<bool> signal_proc0_it5("signal_proc0_it5");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0
+	    ("vci_ini_rw_proc0");
+	soclib::caba::VciSignals<vci_param> signal_vci_tty
+	    ("signal_vci_tty");
+	soclib::caba::VciSignals<vci_param> signal_vci_simh
+	    ("signal_vci_simh");
+
+	soclib::caba::VciSignals<vci_param> signal_vci_xicu
+	    ("signal_vci_xicu");
+	soclib::caba::VciSignals<vci_param> signal_vci_dmai
+	    ("signal_vci_dmai");
+	soclib::caba::VciSignals<vci_param> signal_vci_dmat
+	    ("signal_vci_dmat");
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom
+	    ("vci_tgt_rom");
+
+	soclib::caba::VciSignals<vci_param_ext> signal_vci_ixr_memc
+	    ("vci_ixr_memc");
+	soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc
+	    ("vci_tgt_memc");
+	sc_signal<bool> signal_icu_irq0("signal_icu_irq0");
+	sc_signal<bool> signal_icu_irq1("signal_icu_irq1");
+	sc_signal<bool> signal_icu_irq2("signal_icu_irq2");
+
+	soclib::common::Loader loader("test.elf");
+
+        //                                  init_rw   init_c   tgt
+	soclib::caba::VciCcVCacheWrapper<vci_param, dspin_cmd_width, dspin_rsp_width, proc_iss > *proc0;
+	soclib::caba::VciSimpleRam<vci_param> *rom;
+	soclib::caba::VciSimpleRam<vci_param_ext> *xram;
+	soclib::caba::VciMemCache<vci_param, vci_param_ext, dspin_rsp_width, dspin_cmd_width> *memc;
+	soclib::caba::VciXicu<vci_param> *vcixicu;
+	soclib::caba::VciMultiTty<vci_param> *vcitty;
+	soclib::caba::VciSimhelper<vci_param> *vcisimh;
+	soclib::caba::VciMultiDma<vci_param> *vcidma;
+	DspinLocalCrossbar<dspin_cmd_width>* xbar_cmd_d;
+	DspinLocalCrossbar<dspin_rsp_width>* xbar_rsp_d;
+	DspinLocalCrossbar<dspin_cmd_width>* xbar_m2p_c;
+	DspinLocalCrossbar<dspin_rsp_width>* xbar_p2m_c;
+	DspinLocalCrossbar<dspin_cmd_width>* xbar_clack_c;
+
+	proc0 = new soclib::caba::VciCcVCacheWrapper<vci_param, dspin_cmd_width, dspin_rsp_width, proc_iss >
+	  ("proc0", 0, maptabp, IntTab(0, 0), 0,
+	    8,8,8,8,4,64,16,4,64,16,4, 4, 0, 0, max_frozen, from_cycle, trace_ok);
+	VciDspinInitiatorWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wi_proc0("wi_proc0", srcid_width);
+
+	vcisimh = new soclib::caba::VciSimhelper<vci_param>
+	  ("vcisimh",	IntTab(0, 5), maptabp);
+	VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wt_simh("wt_simh", srcid_width);
+
+	vcidma = new soclib::caba::VciMultiDma<vci_param>
+	  ("vcidma", maptabp, IntTab(0, 1), IntTab(0, 4), 64, 1);//(1<<(vci_param::K-1)));
+	VciDspinInitiatorWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wi_dma("wi_dma", srcid_width);
+	VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wt_dma("wt_dma", srcid_width);
+
+	vcitty = new soclib::caba::VciMultiTty<vci_param>
+	  ("vcitty",	IntTab(0, 2), maptabp, "vcitty0", NULL);
+	VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wt_tty("wt_tty", srcid_width);
+
+	rom = new soclib::caba::VciSimpleRam<vci_param>
+	  ("rom", IntTab(0, 1), maptabp, loader);
+	VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wt_rom("wt_rom", srcid_width);
+
+	vcixicu = new soclib::caba::VciXicu<vci_param>
+	  ("vcixicu", maptabp, IntTab(0, 3), 4 /* npti */, 2 /* nhwi */, 4 /* nwti */, 6 /* nirq */);
+	VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wt_xicu("wt_xicu", srcid_width);
+
+	xram = new soclib::caba::VciSimpleRam<vci_param_ext>
+	  ("xram", IntTab(0), maptabx, loader);
+	memc = new soclib::caba::VciMemCache<vci_param, vci_param_ext, dspin_rsp_width, dspin_cmd_width>
+	  ("memc",maptabp,maptabx,IntTab(0),IntTab(0, 0), 0, 0,16,256,16, 3, 4096, 8, 8, 8, from_cycle, trace_ok);
+	VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
+	    wt_memc("wt_memc", srcid_width);
+
+	xbar_cmd_d = new DspinLocalCrossbar<dspin_cmd_width>(
+		"xbar_cmd_d",
+		maptabp,			// mapping table
+		0, 0,				// cluster coordinates
+		0, 0, srcid_width,
+		2,				// number of local of sources
+		6,				// number of local dests
+		2, 2,			 	// fifo depths
+		true,			 	// CMD
+		true,				 // use local routing table
+		false );			// no broadcast
+
+	xbar_rsp_d = new DspinLocalCrossbar<dspin_rsp_width>(
+		"xbar_rsp_d",
+		maptabp,			// mapping table
+		0, 0,				// cluster coordinates
+		0, 0, srcid_width,
+		6,				// number of local sources
+		2,			 	// number of local dests
+		2, 2,			 	// fifo depths
+		false,				// RSP
+		false,				// don't use local routing table
+		false );			// no broadcast
+
+	xbar_m2p_c = new DspinLocalCrossbar<dspin_cmd_width>(
+		"xbar_m2p_c", maptabp, 0, 0, 0, 0, srcid_width,
+		1, 1, 2, 2, true, false, true);
+	xbar_p2m_c =  new DspinLocalCrossbar<dspin_rsp_width>(
+		"xbar_p2m_c", maptabp, 0, 0, 0, 0, 0,
+		1, 1, 2, 2, false, false, false);
+	xbar_clack_c = new DspinLocalCrossbar<dspin_cmd_width>(
+		"xbar_clack_c", maptabp, 0, 0, 0, 0, srcid_width,
+		1, 1, 1, 1, true, false, false);
+#ifdef VCI_LOGGER_ON_L1
+	soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp);
+#endif
+#ifdef VCI_LOGGER_ON_ROM
+	soclib::caba::VciLogger<vci_param> vci_logger1("vci_logger1",maptabp);
+#endif
+#ifdef VCI_LOGGER_ON_L1_TGT
+	soclib::caba::VciLogger<vci_param> vci_logger2("vci_logger2",maptabp);
+#endif
+	proc0->p_clk(signal_clk);
+	proc0->p_resetn(signal_resetn);
+	proc0->p_irq[0](signal_proc0_it0);
+	proc0->p_irq[1](signal_proc0_it1);
+	proc0->p_irq[2](signal_proc0_it2);
+	proc0->p_irq[3](signal_proc0_it3);
+	proc0->p_irq[4](signal_proc0_it4);
+	proc0->p_irq[5](signal_proc0_it5);
+	proc0->p_vci(signal_vci_ini_rw_proc0);
+	proc0->p_dspin_m2p(signal_dspin_m2p_proc[0]);
+	proc0->p_dspin_p2m(signal_dspin_p2m_proc[0]);
+	proc0->p_dspin_clack(signal_dspin_clack_proc[0]);
+	wi_proc0.p_clk(signal_clk);
+	wi_proc0.p_resetn(signal_resetn);
+	wi_proc0.p_vci(signal_vci_ini_rw_proc0);
+	wi_proc0.p_dspin_cmd(signal_dspin_cmd_proc0_i);
+	wi_proc0.p_dspin_rsp(signal_dspin_rsp_proc0_i);
+
+	rom->p_clk(signal_clk);
+	rom->p_resetn(signal_resetn);
+	rom->p_vci(signal_vci_tgt_rom);
+	wt_rom.p_clk(signal_clk);
+	wt_rom.p_resetn(signal_resetn);
+	wt_rom.p_vci(signal_vci_tgt_rom);
+	wt_rom.p_dspin_cmd(signal_dspin_cmd_rom_t);
+	wt_rom.p_dspin_rsp(signal_dspin_rsp_rom_t);
+
+	vcixicu->p_resetn(signal_resetn);
+	vcixicu->p_clk(signal_clk);
+	vcixicu->p_vci(signal_vci_xicu);
+	vcixicu->p_hwi[0](signal_icu_irq0);
+	vcixicu->p_hwi[1](signal_icu_irq1);
+	vcixicu->p_hwi[2](signal_icu_irq2);
+	vcixicu->p_irq[0](signal_proc0_it0);
+	vcixicu->p_irq[1](signal_proc0_it1);
+	vcixicu->p_irq[2](signal_proc0_it2);
+	vcixicu->p_irq[3](signal_proc0_it3);
+	vcixicu->p_irq[4](signal_proc0_it4);
+	vcixicu->p_irq[5](signal_proc0_it5);
+	wt_xicu.p_clk(signal_clk);
+	wt_xicu.p_resetn(signal_resetn);
+	wt_xicu.p_vci(signal_vci_xicu);
+	wt_xicu.p_dspin_cmd(signal_dspin_cmd_xicu_t);
+	wt_xicu.p_dspin_rsp(signal_dspin_rsp_xicu_t);
+
+	vcidma->p_clk(signal_clk);
+	vcidma->p_resetn(signal_resetn);
+	vcidma->p_irq[0](signal_icu_irq1);
+	vcidma->p_vci_target(signal_vci_dmat);
+	vcidma->p_vci_initiator(signal_vci_dmai);
+	wt_dma.p_clk(signal_clk);
+	wt_dma.p_resetn(signal_resetn);
+	wt_dma.p_vci(signal_vci_dmat);
+	wt_dma.p_dspin_cmd(signal_dspin_cmd_dma_t);
+	wt_dma.p_dspin_rsp(signal_dspin_rsp_dma_t);
+	wi_dma.p_clk(signal_clk);
+	wi_dma.p_resetn(signal_resetn);
+	wi_dma.p_vci(signal_vci_dmai);
+	wi_dma.p_dspin_cmd(signal_dspin_cmd_dma_i);
+	wi_dma.p_dspin_rsp(signal_dspin_rsp_dma_i);
+
+
+#ifdef VCI_LOGGER_ON_L1
+  vci_logger0.p_clk(signal_clk);
+  vci_logger0.p_resetn(signal_resetn);
+  vci_logger0.p_vci(signal_vci_ini_rw_proc0);
+#endif
+
+#ifdef VCI_LOGGER_ON_ROM
+  vci_logger1.p_clk(signal_clk);
+  vci_logger1.p_resetn(signal_resetn);
+  vci_logger1.p_vci(signal_vci_tgt_rom);
+#endif
+
+#ifdef VCI_LOGGER_ON_L1_TGT
+  vci_logger2.p_clk(signal_clk);
+  vci_logger2.p_resetn(signal_resetn);
+#endif
+
+	vcitty->p_clk(signal_clk);
+	vcitty->p_resetn(signal_resetn);
+	vcitty->p_vci(signal_vci_tty);
+	vcitty->p_irq[0](signal_icu_irq0);
+	wt_tty.p_clk(signal_clk);
+	wt_tty.p_resetn(signal_resetn);
+	wt_tty.p_vci(signal_vci_tty);
+	wt_tty.p_dspin_cmd(signal_dspin_cmd_tty_t);
+	wt_tty.p_dspin_rsp(signal_dspin_rsp_tty_t);
+
+	vcisimh->p_clk(signal_clk);
+	vcisimh->p_resetn(signal_resetn);
+	vcisimh->p_vci(signal_vci_simh);
+	wt_simh.p_clk(signal_clk);
+	wt_simh.p_resetn(signal_resetn);
+	wt_simh.p_vci(signal_vci_simh);
+	wt_simh.p_dspin_cmd(signal_dspin_cmd_simh_t);
+	wt_simh.p_dspin_rsp(signal_dspin_rsp_simh_t);
+
+	memc->p_clk(signal_clk);
+	memc->p_resetn(signal_resetn);
+	memc->p_irq(signal_icu_irq2);
+	memc->p_vci_tgt(signal_vci_tgt_memc);
+	memc->p_dspin_p2m(signal_dspin_p2m_memc);
+	memc->p_dspin_m2p(signal_dspin_m2p_memc);
+	memc->p_dspin_clack(signal_dspin_clack_memc);
+	memc->p_vci_ixr(signal_vci_ixr_memc);
+	wt_memc.p_clk(signal_clk);
+	wt_memc.p_resetn(signal_resetn);
+	wt_memc.p_vci(signal_vci_tgt_memc);
+	wt_memc.p_dspin_cmd(signal_dspin_cmd_memc_t);
+	wt_memc.p_dspin_rsp(signal_dspin_rsp_memc_t);
+
+	xram->p_clk(signal_clk);
+	xram->p_resetn(signal_resetn);
+	xram->p_vci(signal_vci_ixr_memc);
+	
+
+	xbar_cmd_d->p_clk(signal_clk);
+	xbar_cmd_d->p_resetn(signal_resetn);
+	xbar_rsp_d->p_clk(signal_clk);
+	xbar_rsp_d->p_resetn(signal_resetn);
+	xbar_m2p_c->p_clk(signal_clk);
+	xbar_m2p_c->p_resetn(signal_resetn);
+	xbar_clack_c->p_clk(signal_clk);
+	xbar_clack_c->p_resetn(signal_resetn);
+	xbar_p2m_c->p_clk(signal_clk);
+	xbar_p2m_c->p_resetn(signal_resetn);
+
+	xbar_cmd_d->p_global_out(signal_dspin_cmd_l2g_c);
+	xbar_cmd_d->p_global_in(signal_dspin_cmd_g2l_c);
+	xbar_rsp_d->p_global_out(signal_dspin_rsp_l2g_c);
+	xbar_rsp_d->p_global_in(signal_dspin_rsp_g2l_c);
+	xbar_m2p_c->p_global_out(signal_dspin_m2p_l2g_c);
+	xbar_m2p_c->p_global_in(signal_dspin_m2p_g2l_c);
+	xbar_clack_c->p_global_out(signal_dspin_clack_l2g_c);
+	xbar_clack_c->p_global_in(signal_dspin_clack_g2l_c);
+	xbar_p2m_c->p_global_out(signal_dspin_p2m_l2g_c);
+	xbar_p2m_c->p_global_in(signal_dspin_p2m_g2l_c);
+
+	xbar_cmd_d->p_local_in[0](signal_dspin_cmd_proc0_i);
+	xbar_cmd_d->p_local_in[1](signal_dspin_cmd_dma_i);
+	xbar_cmd_d->p_local_out[0](signal_dspin_cmd_memc_t);
+	xbar_cmd_d->p_local_out[1](signal_dspin_cmd_rom_t);
+	xbar_cmd_d->p_local_out[2](signal_dspin_cmd_tty_t);
+	xbar_cmd_d->p_local_out[3](signal_dspin_cmd_xicu_t);
+	xbar_cmd_d->p_local_out[4](signal_dspin_cmd_dma_t);
+	xbar_cmd_d->p_local_out[5](signal_dspin_cmd_simh_t);
+
+	xbar_rsp_d->p_local_out[0](signal_dspin_rsp_proc0_i);
+	xbar_rsp_d->p_local_out[1](signal_dspin_rsp_dma_i);
+	xbar_rsp_d->p_local_in[0](signal_dspin_rsp_memc_t);
+	xbar_rsp_d->p_local_in[1](signal_dspin_rsp_rom_t);
+	xbar_rsp_d->p_local_in[2](signal_dspin_rsp_tty_t);
+	xbar_rsp_d->p_local_in[3](signal_dspin_rsp_xicu_t);
+	xbar_rsp_d->p_local_in[4](signal_dspin_rsp_dma_t);
+	xbar_rsp_d->p_local_in[5](signal_dspin_rsp_simh_t);
+
+	xbar_m2p_c->p_local_in[0](signal_dspin_m2p_memc);
+	xbar_m2p_c->p_local_out[0](signal_dspin_m2p_proc[0]);
+
+	xbar_clack_c->p_local_in[0](signal_dspin_clack_memc);
+	xbar_clack_c->p_local_out[0](signal_dspin_clack_proc[0]);
+
+	xbar_p2m_c->p_local_out[0](signal_dspin_p2m_memc);
+	xbar_p2m_c->p_local_in[0](signal_dspin_p2m_proc[0]);
+
+	sc_start(sc_core::sc_time(0, SC_NS));
+	signal_resetn = false;
+
+	sc_start(sc_core::sc_time(1, SC_NS));
+	signal_resetn = true;
+
+
+	for ( size_t n=1 ; n<ncycles ; n++ )
+	{
+		if ( trace_ok and (n > from_cycle) )
+		{
+		    std::cout << "****************** cycle " << std::dec << n
+			      << " ************************************************" << std::endl;
+		    proc0->print_trace();
+		    memc->print_trace();
+		    signal_vci_ini_rw_proc0.print_trace("signal_vci_ini_rw_proc0");
+		    signal_vci_tgt_memc.print_trace("signal_vci_tgt_memc");
+		    signal_vci_ixr_memc.print_trace("signal_vci_ixr_memc");
+		}
+		sc_start(sc_core::sc_time(1, SC_NS));
+	}
+	return EXIT_FAILURE;
+
+}
+
+int sc_main (int argc, char *argv[])
+{
+	try {
+		return _main(argc, argv);
+	} catch (std::exception &e) {
+		std::cout << e.what() << std::endl;
+	} catch (...) {
+		std::cout << "Unknown exception occured" << std::endl;
+		throw;
+	}
+	return 1;
+}
+
Index: /branches/fault_tolerance/platforms/tsar_mono_mmu/top.desc
===================================================================
--- /branches/fault_tolerance/platforms/tsar_mono_mmu/top.desc	(revision 724)
+++ /branches/fault_tolerance/platforms/tsar_mono_mmu/top.desc	(revision 724)
@@ -0,0 +1,53 @@
+
+# -*- python -*-
+
+dspin_cmd_flit_size     = 39
+dspin_rsp_flit_size     = 32
+cell_size               = 4
+
+todo = Platform('caba', 'top.cpp',
+                uses = [
+	Uses('caba:vci_cc_vcache_wrapper',
+	    dspin_in_width = dspin_cmd_flit_size,
+	    dspin_out_width = dspin_rsp_flit_size,
+	    iss_t = 'common:mips32el'),
+	Uses('caba:vci_simple_ram'),
+	Uses('caba:vci_simple_ram', cell_size = 8),
+	Uses('caba:vci_multi_tty'),
+        Uses('caba:vci_xicu'),
+        Uses('caba:vci_multi_dma'),
+	Uses('caba:vci_simhelper'),
+        Uses('caba:vci_logger'),
+	Uses('caba:vci_mem_cache',
+	    memc_cell_size_int = cell_size,
+	    memc_cell_size_ext = 8,
+	    dspin_out_width = dspin_cmd_flit_size,
+	    dspin_in_width = dspin_rsp_flit_size,
+	),
+	Uses('caba:dspin_local_crossbar',
+	    flit_width      =  dspin_cmd_flit_size),
+	Uses('caba:dspin_local_crossbar',
+	    flit_width      = dspin_rsp_flit_size),
+	Uses('caba:vci_dspin_target_wrapper',
+	    dspin_cmd_width = dspin_cmd_flit_size,
+	    dspin_rsp_width = dspin_rsp_flit_size,
+	    cell_size       = cell_size),
+	Uses('caba:vci_dspin_initiator_wrapper',
+	    dspin_cmd_width = dspin_cmd_flit_size,
+	    dspin_rsp_width = dspin_rsp_flit_size,
+	    cell_size       = cell_size),
+	Uses('common:elf_file_loader'),
+
+	],
+	cell_size = cell_size,
+	plen_size = 8,
+	addr_size = 32,
+	rerror_size = 1,
+	clen_size = 1,
+	rflag_size = 1,
+	srcid_size = 14,
+	pktid_size = 4,
+	trdid_size = 4,
+	wrplen_size = 1
+)
+
Index: /branches/fault_tolerance/softs/giet_tsar/block_device.h
===================================================================
--- /branches/fault_tolerance/softs/giet_tsar/block_device.h	(revision 724)
+++ /branches/fault_tolerance/softs/giet_tsar/block_device.h	(revision 724)
@@ -0,0 +1,68 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         Nicolas Pouillon <nipo@ssji.net>, 2007
+ *
+ * Maintainers: nipo
+ */
+#ifndef BLOCK_DEVICE_REGS_H
+#define BLOCK_DEVICE_REGS_H
+
+enum SoclibBlockDeviceRegisters {
+    BLOCK_DEVICE_BUFFER,
+    BLOCK_DEVICE_LBA,
+    BLOCK_DEVICE_COUNT,
+    BLOCK_DEVICE_OP,
+    BLOCK_DEVICE_STATUS,
+    BLOCK_DEVICE_IRQ_ENABLE,
+    BLOCK_DEVICE_SIZE,
+    BLOCK_DEVICE_BLOCK_SIZE,
+    BLOCK_DEVICE_BUFFER_EXT,
+};
+
+enum SoclibBlockDeviceOp {
+    BLOCK_DEVICE_NOOP,
+    BLOCK_DEVICE_READ,
+    BLOCK_DEVICE_WRITE,
+};
+
+enum SoclibBlockDeviceStatus {
+    BLOCK_DEVICE_IDLE,
+    BLOCK_DEVICE_BUSY,
+    BLOCK_DEVICE_READ_SUCCESS,
+    BLOCK_DEVICE_WRITE_SUCCESS,
+    BLOCK_DEVICE_READ_ERROR,
+    BLOCK_DEVICE_WRITE_ERROR,
+    BLOCK_DEVICE_ERROR,
+};
+
+#endif /* BLOCK_DEVICE_REGS_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/giet_tsar/giet.S
===================================================================
--- /branches/fault_tolerance/softs/giet_tsar/giet.S	(revision 724)
+++ /branches/fault_tolerance/softs/giet_tsar/giet.S	(revision 724)
@@ -0,0 +1,445 @@
+/********************************************************************************
+*	File : giet.S
+*	Author : Alain Greiner
+*	Date : 15/01/2014
+*********************************************************************************
+* This is a very simple Interrupts/Exception/Traps handler for a generic 
+* multi-clusters / multi-processors TSAR architecture (up to 256 clusters,
+* up to 4  processors per cluster). 
+* The physical address is 40 bits, and the 8 MSB bits A[39:32] define the
+* cluster index.
+********************************************************************************/
+
+#include "hard_config.h"
+
+    .section .giet,"ax",@progbits
+    .align 2
+    .global _interrupt_vector   
+
+    .extern seg_xcu_base
+    .extern seg_tty_base
+
+    .extern _procid
+    .extern _proctime
+    .extern _tty_write
+    .extern _tty_read
+    .extern _tty_read_irq
+    .extern _locks_read
+    .extern _locks_write
+    .extern _exit
+    .extern _fb_sync_write
+    .extern _fb_sync_read
+    .extern _ioc_write
+    .extern _ioc_read
+    .extern _ioc_completed
+    .extern _itoa_hex
+    .extern _barrier_init
+    .extern _barrier_wait
+
+    .ent _giet
+
+/****************************************************************
+*    Cause Table (indexed by the Cause register)
+****************************************************************/
+tab_causes:
+    .word _int_handler  /* 0000 : external interrupt */
+    .word _cause_ukn    /* 0001 : undefined exception */
+    .word _cause_ukn    /* 0010 : undefined exception */
+    .word _cause_ukn    /* 0011 : undefined exception */
+    .word _cause_adel   /* 0100 : illegal address read exception */
+    .word _cause_ades   /* 0101 : illegal address write exception */
+    .word _cause_ibe    /* 0110 : instruction bus error exception */
+    .word _cause_dbe    /* 0111 : data bus error exception */
+    .word _sys_handler  /* 1000 : system call */
+    .word _cause_bp     /* 1001 : breakpoint exception */
+    .word _cause_ri     /* 1010 : illegal codop exception */
+    .word _cause_cpu    /* 1011 : illegal coprocessor access */
+    .word _cause_ovf    /* 1100 : arithmetic overflow exception */
+    .word _cause_ukn    /* 1101 : undefined exception */
+    .word _cause_ukn    /* 1110 : undefined exception */
+    .word _cause_ukn    /* 1111 : undefined exception */
+
+    .space 320
+
+/****************************************************************
+*    Entry point (base + 0x180)
+****************************************************************/
+_giet:
+    mfc0    $27,    $13             /* Cause Register analysis */
+    la      $26,    seg_kcode_base  /* $26 <= tab_causes */
+    andi    $27,    $27,    0x3c
+    addu    $26,    $26,    $27     /* $26 <= &tab_causes[XCODE] */
+    lw      $26,    ($26)
+    jr      $26                     /* Jump to tab_causes[XCODE] */
+
+    .end _giet
+
+/****************************************************************
+*   System Call Handler
+*
+* As the GIET_TSAR does not support system calls, 
+* an error message is displayed on TTY0, the program is killed.
+****************************************************************/
+    .ent _sys_handler
+
+_sys_handler:
+    la      $4,     _msg_uknsyscall /* $4 <= message address */
+    li      $5,    36               /* $5 <= message length */
+    li      $6,    0                /* $6 <= TTY0 */
+    jal     _tty_write              /* print unknown message */
+    nop
+
+    la      $4,     _msg_epc        /* $4 <= message address */
+    li      $5,    8                /* $5 <= message length */
+    li      $6,    0                /* $6 <= TTY0 */
+    jal     _tty_write              /* print EPC message */
+    nop
+
+    mfc0    $4,     $14             /* $4 <= EPC */
+    la      $5,     _itoa_buffer    /* $5 <= buffer address */ 
+    addiu   $5,     $5,     2       /* skip the 0x prefix */
+    jal     _itoa_hex               /* fill the buffer */
+    nop
+
+    la      $4,     _itoa_buffer    /* $4 <= buffer address */
+    li      $5,     10              /* $5 <= buffer length */
+    li      $6,    0                /* $6 <= TTY0 */
+    jal     _tty_write              /* print EPC value */
+    nop
+
+    j       _exit                   /* end of program */ 
+
+_itoa_buffer: .ascii "0x00000000"
+
+    .align 2
+
+    .end _sys_handler
+
+/****************************************************************
+*   Interrupt Handler
+* This simple interrupt handler cannot be interrupted.
+* It uses the SoCLib VCI_XICU component.
+* It makes the assumption that there is only one interrupt per
+* entry in the interrupt vector (it can be PTI, HWI, or WTI).
+* In case of a multi-clusters architecture, it exist one XCU 
+* per cluster, and the base address of the ICU segment depends 
+* on both the cluster_xy and the proc_id:
+* - base_address = seg_xcu_base + (32*local_id) + (4G*cluster_xy)
+* - cluster_xy = proc_id / NB_PROCS_MAX
+* - local_id   = proc_id % NB_PROCS_MAX
+* If no active interrupt is found in the PRIO register,
+* nothing is done.
+* The interrupt vector (32 ISR addresses array stored at
+* _interrupt_vector address) is initialised with the default
+* ISR address. The actual ISR addresses are supposed to be written
+* in the interrupt vector array by the boot code.
+* All non persistant registers, such as $1 to $15, and $24 to $25,
+* as well as register $31 and EPC, are saved in the interrupted
+* program stack, before calling the Interrupt Service Routine.
+* These registers can be used by the ISR code.
+***************************************************************/
+    .ent _int_handler
+
+_int_handler:
+    addiu   $29,    $29,    -23*4   /* stack space reservation */
+    .set noat
+    sw      $1,     4*4($29)        /* save $1 */
+    .set at
+    sw      $2,     4*5($29)        /* save $2 */
+    sw      $3,     4*6($29)        /* save $3 */
+    sw      $4,     4*7($29)        /* save $4 */
+    sw      $5,     4*8($29)        /* save $5 */
+    sw      $6,     4*9($29)        /* save $6 */
+    sw      $7,     4*10($29)       /* save $7 */
+    sw      $8,     4*11($29)       /* save $8 */
+    sw      $9,     4*12($29)       /* save $9 */
+    sw      $10,    4*13($29)       /* save $10 */
+    sw      $11,    4*14($29)       /* save $11 */
+    sw      $12,    4*15($29)       /* save $12 */
+    sw      $13,    4*16($29)       /* save $13 */
+    sw      $14,    4*17($29)       /* save $14 */
+    sw      $15,    4*18($29)       /* save $15 */
+    sw      $24,    4*19($29)       /* save $24 */
+    sw      $25,    4*20($29)       /* save $25 */
+    sw      $31,    4*21($29)       /* save $31 */
+    mfc0    $27,    $14
+    sw      $27,    4*22($29)       /* save EPC */ 
+
+    /* XICU PRIO register address computation         */
+    /* It depends on both the cluster_xy & local_id,  */
+    /* and we must use the physical address extension */
+    mfc0    $10,    $15,    1        /* $10 <= proc_id                                 */
+    andi    $10,    $10,    0x3FF    /* at most 1024 processors                        */ 
+    li      $11,    NB_PROCS_MAX
+    divu    $10,    $11
+    mflo    $12                      /* $12 <= cluster_xy                              */
+    mfhi    $13                      /* $13 <= local_id                                */
+    la      $14,    seg_xcu_base     /* $14 <= seg_xcu_base                            */
+
+    li      $7,     0b011110000000   /* $7 <= PRIO offset                              */
+    sll     $8,     $13,    2        /* $8 <= local_id*4                               */
+    addu    $9,     $7,     $8       /* $9 <= PRIO offset + local_id*4                 */
+    addu    $26,    $9,     $14      /* $26 <= seg_icu_base + PRIO offset + local_id*4 */
+
+    /* XCU[cluster_xy] access to get PRIO register value                               */
+    mtc2    $12,    $24              /* set PADDR extension                            */
+    lw      $15,    ($26)            /* $15 <= PRIO register value                     */
+    mtc2    $0,     $24              /* reset PADDR extension                          */
+
+    /* test PTI, then HWI, then WTI                                                    */
+    andi    $27,    $15,    0x1      /* test bit T in PRIO register                    */
+    bne     $27,    $0,     _int_PTI /* branch to PTI handler                          */
+    andi    $27,    $15,    0x2      /* test bit W in PRIO register                    */
+    bne     $27,    $0,     _int_HWI /* branch to HWI handler                          */
+    andi    $27,    $15,    0x4      /* test bit W in PRIO register                    */
+    bne     $27,    $0,     _int_WTI /* branch to WTI handler                          */
+    
+    /* exit interrupt handler: restore registers */
+_int_restore:
+    .set noat
+    lw      $1,     4*4($29)
+    .set at
+    lw      $2,     4*5($29) 
+    lw      $3,     4*6($29) 
+    lw      $4,     4*7($29)
+    lw      $5,     4*8($29) 
+    lw      $6,     4*9($29)
+    lw      $7,     4*10($29) 
+    lw      $8,     4*11($29)
+    lw      $9,     4*12($29)
+    lw      $10,    4*13($29)
+    lw      $11,    4*14($29)
+    lw      $12,    4*15($29)
+    lw      $13,    4*16($29)
+    lw      $14,    4*17($29)
+    lw      $15,    4*18($29)
+    lw      $24,    4*19($29)
+    lw      $25,    4*20($29)
+    lw      $31,    4*21($29)
+    lw      $27,    4*22($29)        /* get EPC */ 
+    addiu   $29,    $29,    23*4     /* restore SP */
+    mtc0    $27,    $14              /* restore EPC */
+    eret                             /* exit GIET */
+
+    /* The PTI handler get PTI index, */
+    /* acknowledge the PTI register   */
+    /* and call the corresponding ISR */
+_int_PTI:
+    srl     $26,    $15,    6        /* $26 <= PRIO >> 6             */
+    andi    $26,    $26,    0x7C     /* $26 <= PTI_INDEX * 4         */
+    addi    $27,    $14,    0x180    /* $27 <= &PTI_ACK[0]           */
+    add     $27,    $27,    $26      /* $27 <= &PTI_ACK[PTI_INDEX]   */
+    lw      $0,     ($27)            /* acknowledge XICU PTI         */
+    la      $27,    _interrupt_vector
+    addu    $26,    $26,    $27
+    lw      $26,    ($26)            /* read ISR address             */ 
+    jalr    $26                      /* call ISR                     */
+    nop
+    j       _int_restore             /* return from INT handler      */
+    nop
+
+    /* The HWI handler get HWI index  */
+    /* and call the corresponding ISR */
+_int_HWI:
+    srl     $26,    $15,    14       /* $26 <= PRIO >> 14            */
+    andi    $26,    $26,    0x7C     /* $26 <= HWI_INDEX * 4         */
+    la      $27,    _interrupt_vector
+    addu    $26,    $26,    $27      /* $26 <= &ISR[HWI_INDEX        */
+    lw      $26,    ($26)            /* read ISR address             */ 
+    jalr    $26                      /* call ISR                     */
+    nop
+    j       _int_restore             /* return from INT handler      */
+    nop
+
+    /* The WTI handler get WTI index, */
+    /* acknowledge the WTI register   */
+    /* and call the corresponding ISR */
+_int_WTI:
+    srl     $26,    $15,    22       /* $26 <= PRIO >> 22            */
+    andi    $26,    $26,    0x7C     /* $26 <= WTI_INDEX * 4         */
+    add     $27,    $14,    $26      /* $27 <= &WTI_REG[WTI_INDEX]   */
+    lw      $0,     ($27)            /* acknowledge XICU WTI         */
+    la      $27,    _interrupt_vector
+    addu    $26,    $26,    $27      /* $26 <= &ISR[WTI_INDEX]       */
+    lw      $26,    ($26)            /* read ISR address             */ 
+    jalr    $26                      /* call ISR                     */
+    nop
+    j       _int_restore             /* return from INT handler */
+    nop
+    
+/* The default ISR is called when no specific ISR has been installed */
+/* in the interrupt vector. It simply displays a message on TTY0     */
+
+isr_default:
+    addiu   $29,    $29,    -20     /* get space in stack */
+    sw      $31,    16($29)         /* to save the return address */ 
+    la      $4,     _msg_default    /* $4 <= string address */
+    addi    $5,     $0,     36      /* $5 <= string length */
+    li      $6,     0               /* $6 <= TTY0 */
+    jal     _tty_write 
+    lw      $31,    16($29)         /* restore return address */ 
+    addiu   $29,    $29,    20      /* free space */
+    jr      $31                     /* returns to interrupt handler */
+
+/****************************************************************
+*  Interrupt Vector Table (indexed by interrupt index)
+*  32 words corresponding to 32 ISR addresses 
+****************************************************************/
+_interrupt_vector:
+    .word isr_default   /* ISR 0 */
+    .word isr_default   /* ISR 1 */
+    .word isr_default   /* ISR 2 */
+    .word isr_default   /* ISR 3 */
+    .word isr_default   /* ISR 4 */
+    .word isr_default   /* ISR 5 */
+    .word isr_default   /* ISR 6 */
+    .word isr_default   /* ISR 7 */
+    .word isr_default   /* ISR 8 */
+    .word isr_default   /* ISR 9 */
+    .word isr_default   /* ISR 10 */
+    .word isr_default   /* ISR 11 */
+    .word isr_default   /* ISR 12 */
+    .word isr_default   /* ISR 13 */
+    .word isr_default   /* ISR 14 */
+    .word isr_default   /* ISR 15 */
+    .word isr_default   /* ISR 16 */
+    .word isr_default   /* ISR 17 */
+    .word isr_default   /* ISR 18 */
+    .word isr_default   /* ISR 19 */
+    .word isr_default   /* ISR 20 */
+    .word isr_default   /* ISR 21 */
+    .word isr_default   /* ISR 22 */
+    .word isr_default   /* ISR 23 */
+    .word isr_default   /* ISR 24 */
+    .word isr_default   /* ISR 25 */
+    .word isr_default   /* ISR 26 */
+    .word isr_default   /* ISR 27 */
+    .word isr_default   /* ISR 28 */
+    .word isr_default   /* ISR 29 */
+    .word isr_default   /* ISR 30 */
+    .word isr_default   /* ISR 31 */
+
+    .end _int_handler
+
+/****************************************************************
+*    Exception Handler
+* Same code for all fatal exceptions :
+* Print the exception type and the values of EPC & BAR
+* on the TTY correspondintg to the processor PROCID,
+* and the user program is killed.
+****************************************************************/
+    .ent _exc_handler
+
+_exc_handler:
+_cause_bp:
+_cause_ukn:
+_cause_ri:
+_cause_ovf:
+_cause_adel:
+_cause_ades:
+_cause_ibe:
+_cause_dbe:
+_cause_cpu:
+    mfc0    $26,    $13             /* $26 <= CR */
+    andi    $26,    $26,    0x3C    /* $26 <= _cause_index * 4 */
+    la      $27,    _mess_causes    /* mess_cause table base address */
+    addu    $27,    $26,    $27     /* $26 <= message base address */
+
+    /* take the lock on TTY0 */
+    li      $4,     0
+    jal     _tty_get_lock
+    nop
+
+    /* display exception type */
+    lw      $4,     ($27)           /* $4 <= message address */
+    li      $5,     36              /* $5 <= message length */
+    li      $6,     0               /* $6 <= TTY0 */
+    jal     _tty_write               
+    nop
+
+    /* display EPC value */
+    la      $4,     _msg_epc        /* $4 <= message address */
+    li      $5,     8               /* $5 <= message length */
+    li      $6,     0               /* $6 <= TTY0 */
+    jal     _tty_write            
+    nop
+    
+    mfc0    $4,     $14             /* $4 <= EPC value */
+    la      $5,     _itoa_buffer    /* $5 <= buffer address */
+    addiu   $5,     $5,     2       /* skip 0x prefix */
+    jal     _itoa_hex               /* fill buffer */
+    nop
+
+    la      $4,     _itoa_buffer    /* $4 <= buffer address */
+    li      $5,     10              /* $5 <= buffer length */
+    li      $6,     0               /* $6 <= TTY0 */
+    jal     _tty_write
+    nop
+
+    /* display BAR value */ 
+    la      $4,     _msg_bar        /* $4 <= message address */
+    li      $5,     8               /* $5 <= message length */
+    li      $6,     0               /* $6 <= TTY0 */
+    jal     _tty_write
+    nop
+
+    mfc0    $4,     $8              /* $4 <= BAR value */
+    la      $5,     _itoa_buffer    /* $5 <= buffer address */ 
+    addiu   $5,     $5,     2       /* skip 0x prefix */ 
+    jal     _itoa_hex               /* fill buffer */
+    nop
+
+    la      $4,     _itoa_buffer    /* $4 <= message address */
+    li      $5,     10              /* $5 <= message length */
+    li      $6,     0               /* $6 <= TTY0 */
+    jal     _tty_write 
+    nop
+
+    
+    /* release the lock on TTY0 */
+    li      $4,     0
+    jal     _tty_get_lock
+    nop
+
+    j       _exit                   /* kill user program */
+
+/* Exceptions Messages table (indexed by XCODE)  */
+_mess_causes:
+    .word _msg_ukncause
+    .word _msg_ukncause
+    .word _msg_ukncause
+    .word _msg_ukncause
+    .word _msg_adel
+    .word _msg_ades
+    .word _msg_ibe
+    .word _msg_dbe
+    .word _msg_ukncause
+    .word _msg_bp
+    .word _msg_ri
+    .word _msg_cpu
+    .word _msg_ovf
+    .word _msg_ukncause
+    .word _msg_ukncause
+    .word _msg_ukncause
+
+/********************************************************************
+*    All messages
+* Messages length are fixed : 8 or 36 characters...
+********************************************************************/
+_msg_bar:        .asciiz "\nBAR  = "
+_msg_epc:        .asciiz "\nEPC  = "
+_msg_default:    .asciiz "\n\n  !!! Default ISR  !!!           \n"
+_msg_uknsyscall: .asciiz "\n\n  !!! Undefined System Call !!!  \n"
+_msg_ukncause:   .asciiz "\n\nException : strange unknown cause\n"
+_msg_adel:       .asciiz "\n\nException : illegal read address \n"
+_msg_ades:       .asciiz "\n\nException : illegal write address\n"
+_msg_ibe:        .asciiz "\n\nException : inst bus error       \n"
+_msg_dbe:        .asciiz "\n\nException : data bus error       \n"
+_msg_bp:         .asciiz "\n\nException : breakpoint           \n"
+_msg_ri:         .asciiz "\n\nException : reserved instruction \n"
+_msg_ovf:        .asciiz "\n\nException : arithmetic overflow  \n"
+_msg_cpu:        .asciiz "\n\nException : illegal coproc access\n"
+
+    .end _exc_handler
+
+
Index: /branches/fault_tolerance/softs/giet_tsar/mips32_registers.h
===================================================================
--- /branches/fault_tolerance/softs/giet_tsar/mips32_registers.h	(revision 724)
+++ /branches/fault_tolerance/softs/giet_tsar/mips32_registers.h	(revision 724)
@@ -0,0 +1,91 @@
+/********************************************************************************/
+/*    File : mips32_registers.h                        */
+/*    Author : Alain Greiner                            */
+/*    Date : 26/03/2012                            */
+/********************************************************************************/
+/*     We define mnemonics for MIPS32 registers                          */
+/********************************************************************************/
+
+#ifndef _MIPS32_REGISTER_H
+#define _MIPS32_REGISTER_H
+
+/* processor registers */
+
+#define zero  $0
+#define at    $1
+#define v0    $2
+#define v1    $3
+#define a0    $4
+#define a1    $5
+#define a2    $6
+#define a3    $7
+#define t0    $8
+#define t1    $9
+#define t2    $10
+#define t3    $11
+#define t4    $12
+#define t5    $13
+#define t6    $14
+#define t7    $15
+#define s0    $16
+#define s1    $17
+#define s2    $18
+#define s3    $19
+#define s4    $20
+#define s5    $21
+#define s6    $22
+#define s7    $23
+#define t8    $24
+#define t9    $25
+#define k0    $26
+#define k1    $27
+#define gp    $28
+#define sp    $29
+#define fp    $30
+#define ra    $31
+
+/* CP0 registers */
+
+#define CP0_BVAR       $8
+#define CP0_TIME       $9
+#define CP0_SR         $12
+#define CP0_CR         $13
+#define CP0_EPC        $14
+#define CP0_PROCID     $15,1
+#define CP0_EBASE      $15,1
+#define CP0_SCHED      $4,2
+
+/* CP2 registers */
+
+#define CP2_PTPR             $0 
+#define CP2_MODE             $1
+#define CP2_ICACHE_FLUSH     $2
+#define CP2_DCACHE_FLUSH     $3
+#define CP2_ITLB_INVAL       $4 
+#define CP2_DTLB_INVAL       $5 
+#define CP2_ICACHE_INVAL     $6 
+#define CP2_DCACHE_INVAL     $7
+#define CP2_ICACHE_PREFETCH  $8 
+#define CP2_DCACHE_PREFETCH  $9 
+#define CP2_SYNC             $10 
+#define CP2_IETR             $11 
+#define CP2_DETR             $12 
+#define CP2_IBVAR            $13
+#define CP2_DBVAR            $14
+#define CP2_PARAMS           $15 
+#define CP2_RELEASE          $16 
+#define CP2_DATA_LO          $17     
+#define CP2_DATA_HI          $18         
+#define CP2_ICACHE_INVAL_PA  $19         
+#define CP2_DCACHE_INVAL_PA  $20 
+#define CP2_PADDR_EXT        $24
+#endif
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/giet_tsar/reset.S
===================================================================
--- /branches/fault_tolerance/softs/giet_tsar/reset.S	(revision 724)
+++ /branches/fault_tolerance/softs/giet_tsar/reset.S	(revision 724)
@@ -0,0 +1,152 @@
+/********************************************************************************
+*	File : reset.S
+*	Author : Alain Greiner
+*	Date : 15/01/2014
+*********************************************************************************
+* This is a boot code for a generic multi-clusters / multi-processors
+* TSAR architecture (up to 256 clusters / up to 4  processors per cluster). 
+* The physical address is 40 bits, and the 8 MSB bits A[39:32] define the
+* cluster index.
+*
+* As we don't want to use the virtual memory, the physical address is 
+* equal to  the virtual address (identity mapping) and all processors stacks
+* and code segments are allocated in the physical memory bank in cluster 0. 
+*
+* Both the reset base address and the kernel base address must be redefined
+* to use a physical memory bank smaller than 2 Gbytes.
+*
+* There is one XCU iand one MMC per cluster.
+*
+* There is one IOPIC component in cluster_io.
+*
+* There is two sets of peripherals:
+*
+* 1) A block device and a single channel TTY controller are available 
+*    in cluster(0,0).
+*
+* 2) Other peripherals (including another Blockdevice, a multi-channels TTY 
+*    contrÃŽler, a Frame buffer) are located in cluster_io.
+*    For those externals peripherals, hardware interrupts (HWI) are translated
+*    to software interrupts (WTI) by and IOPIC component, that is programmed
+*    to route all SWI to to processor 0 in cluster (0,0).
+*
+* The boot sequence is the following:
+*   - Each processor initializes the stack pointer ($29) depending on proc_id.
+*   - Each processor initializes the CP0 EBASE register
+*	- Only processor 0 initializes the Interrupt vector.
+*	- Only processor 0 initializes the IOPIC component.
+*   - Each processor initializes its private XCU mask.
+*	- Each processor initializes the Status Register (SR) 
+*	- Each processor jumps to the same main address in kernel mode...
+********************************************************************************/
+
+#include "hard_config.h"
+#include "mips32_registers.h"
+
+	.section .reset,"ax",@progbits
+
+	.extern	seg_stack_base
+	.extern	seg_xcu_base
+	.extern	seg_pic_base
+    .extern seg_kcode_base
+	.extern _interrupt_vector
+	.extern _ioc_isr
+	.extern _mmc_isr
+    .extern _tty_isr
+    .extern main
+
+	.globl  reset	 			
+	.ent	reset
+	.align	2
+
+reset:
+       	.set noreorder
+
+/* each proc computes  proc_id, lpid, cluster_xy */
+    mfc0    $26,    CP0_PROCID
+    andi    $26,    $26,    0x3FF	    /* at most 1024 processors */
+    move    $10,    $26                 /* $10 <= proc_id  */
+    li      $27,    NB_PROCS_MAX
+    divu    $26,    $27
+    mfhi    $11                         /* $11 <= lpid */
+    mflo    $12                         /* $12 <= cluster_xy */
+
+/* each proc initializes stack pointer (64K per processor) */
+    la      $27,    seg_stack_base
+    addi    $26,    $10,    1		    /* $26 <= (proc_id + 1)           */
+    sll     $26,    $26,    14          /* $26 <= (proc_id + 1) * 16K     */
+    addu    $29,    $27,    $26		    /* $29 <= seg_stack_base(proc_id) */
+
+/* each proc initializes CP0 EBASE register */
+    la      $26,    seg_kcode_base
+    mtc0    $26,    CP0_EBASE           /* CP0_EBASE <= seg_kcode_base */
+
+/* only proc (0,0,0) initializes interrupt vector for IOC, TTY, MMC     */
+    bne	    $10,    $0,    reset_xcu
+    nop
+
+    la      $26,    _interrupt_vector   /* interrupt vector address                */
+    la      $27,    _mmc_isr 
+    sw      $27,    32($26)             /* interrupt_vector[8] <= _mmc_isr         */
+    la      $27,    _ioc_isr 
+    sw      $27,    36($26)             /* interrupt_vector[9] <= _ioc_isr         */
+    la      $27,    _tty_isr 
+    sw      $27,    40($26)             /* interrupt_vector[10] <= _tty_isr        */
+
+/* only proc (0,0,0) initializes IOPIC : IOPIC_ADDRESS[i] <= &XICU[0].WTI_REG[i]   */
+
+    li      $26,    USE_EXT_IO
+    beq     $26,    $0,     reset_xcu   /* IOPIC not initialised if not USE_EXT_IO */
+
+    li      $20,    X_SIZE
+    addi    $20,    $20,    -1
+    sll     $20,    $20,    4
+    li      $21,    Y_SIZE
+    add     $22,    $20,    $21         /* $22 <= cluster(X_SIZE-1, Y_SIZE)        */
+
+    mtc2    $22,    CP2_PADDR_EXT       /* CP2_PADDR_EXT <= cluster_io             */
+
+    li      $24,    16                  /* $24  iteration (de)counter              */
+    la      $27,    seg_xcu_base        /* $27 <= &(XICU[0].WTI_REG[0])            */
+    la      $26,    seg_pic_base        /* $26 <= &IOPIC_ADDRESS[0]                */
+
+reset_loop:
+    sw      $27,    0($26)              /* IOPIC_ADDRESS[i] <= &XICU[0].WTI_REG[i] */
+    addi    $24,    $24,    -1          /* decrement iteration index               */
+    addi    $27,    $27,     4          /* $27 <= &(XICU[0].WTI_REG[i++]           */
+    addi    $26,    $26,     16         /* $26 <= &IOPIC_ADDRESS[i++]              */
+    bne     $24,    $0, reset_loop
+    nop
+
+    mtc2    $0,     CP2_PADDR_EXT       /* CP2_PADDR_EXT <= zero                   */
+   
+reset_xcu:
+
+/* only proc (x,y,0) receive IRQs and initialise HWI and WTI XICU masks */
+    bne     $11,    $0,     reset_end
+    nop
+    la      $26,    seg_xcu_base
+    li      $27,    0b010010000000      /* offset for MSK_HWI_ENABLE[lpid == 0]    */
+    addu    $24,    $26,    $27         /* $24 <= &HWI_MASK                        */
+    li      $25,    0x0700		        /* TTY:HWI[10]  IOC:HWI[9]  MEMC:HWI[8]    */
+    sw      $25,    0($24)              /* set HWI mask                            */
+
+    li      $27,    0b011010000000      /* offset for MSK_WTI_ENABLE[lpid == 0]    */
+    addu    $24,    $26,    $27         /* $24 <= $WTI_MASK                        */
+    li      $25,    0xFFFFFFFF          /* all WTI enabled                         */
+    sw      $25,    0($24)              /* set WTI mask                            */
+
+reset_end:
+
+/* initializes SR register */
+    li	    $26,    0x0000FF01		
+    mtc0    $26,    $12			        /* SR <= kernel mode / IRQ enable */
+
+/* jumps to main in kernel mode */
+    la	    $26,    main
+    jr      $26
+    nop
+
+    .end	reset
+
+    .set reorder
Index: /branches/fault_tolerance/softs/giet_tsar/stdio.c
===================================================================
--- /branches/fault_tolerance/softs/giet_tsar/stdio.c	(revision 724)
+++ /branches/fault_tolerance/softs/giet_tsar/stdio.c	(revision 724)
@@ -0,0 +1,1346 @@
+////////////////////////////////////////////////////////////////////////////////////////
+// File : stdio.c
+// Written by Alain Greiner 
+// Date : janvier 2014 
+//
+// This file defines various functions that can be used by applications to access
+// peripherals, for the TSAR multi-processors multi_clusters architecture.
+// There is NO separation between application code and system code, as the
+// application are running in kernel mode without system calls.
+// This basic GIET does not support virtual memory, and does not support multi-tasking.
+//
+// The supported peripherals are:
+// - the SoClib multi_tty
+// - The SoCLib frame_buffer
+// - The SoCLib block_device
+//
+// The following parameters must be defined in the hard_config.h file.
+// - X_SIZE          : number of clusters in a row
+// - Y_SIZE          : number of clusters in a column
+// - X_WIDTH         : number of bits for X field in proc_id
+// - Y_WIDTH         : number of bits for Y field in proc_id
+// - NB_PROCS_MAX    : max number of processor per cluster
+// - NB_TTY_CHANNELS : max number of TTY channels
+// - USE_EXT_IO      : use external peripherals if not zero
+//
+// The follobing base addresses must be defined in the ldscript
+// - seg_tty_base
+// - seg_fbf_base
+// - seg_ioc_base
+////////////////////////////////////////////////////////////////////////////////////////
+
+#include "stdio.h"
+
+#if !defined(NB_PROCS_MAX)
+#error: you must define NB_PROCS_MAX in the hard_config.h file
+#endif
+
+#if !defined(USE_EXT_IO)
+#error: you must define USE_EXT_IO in the hard_config.h file
+#endif
+
+#if !defined(X_SIZE)
+#error: you must define X_SIZE in the hard_config.h file
+#endif
+
+#if !defined(Y_SIZE)
+#error: you must define Y_SIZE in the hard_config.h file
+#endif
+
+#if !defined(X_WIDTH)
+#error: you must define X_WIDTH in the hard_config.h file
+#endif
+
+#if (X_WIDTH != 4)
+#error: The X_WIDTH parameter must be equal to 4
+#endif
+
+#if !defined(Y_WIDTH)
+#error: you must define X_WIDTH in the hard_config.h file
+#endif
+
+#if (X_WIDTH != 4)
+#error: The Y_WIDTH parameter must be equal to 4
+#endif
+
+#if !defined(NB_TTY_CHANNELS)
+#error: you must define NB_TTY_CHANNELS in the hard_config.h file
+#endif
+
+
+
+
+#define NB_LOCKS      256
+#define NB_BARRIERS   16
+
+#define in_drivers __attribute__((section (".drivers")))
+#define in_unckdata __attribute__((section (".unckdata")))
+
+//////////////////////////////////////////////////////////////
+// various informations that must be defined in ldscript
+//////////////////////////////////////////////////////////////
+
+struct plouf;
+
+extern struct plouf seg_tty_base;
+extern struct plouf seg_fbf_base;
+extern struct plouf seg_ioc_base;
+extern struct plouf seg_mmc_base;
+extern struct plouf seg_ramdisk_base;
+
+////////////////////////////////////////////////////////////////////////////////////////
+//  Global uncachable variables for synchronization between drivers and ISRs
+////////////////////////////////////////////////////////////////////////////////////////
+
+in_unckdata int volatile    _ioc_lock    = 0;
+in_unckdata int volatile    _ioc_done    = 0;
+in_unckdata int volatile    _ioc_status;
+
+in_unckdata char volatile   _tty_get_buf[NB_TTY_CHANNELS];
+in_unckdata int volatile    _tty_get_full[NB_TTY_CHANNELS] = { [0 ... NB_TTY_CHANNELS-1] = 0 };
+
+////////////////////////////////////////////////////////////////////////////////////////
+//  Global uncachable variables for inter-task barriers
+////////////////////////////////////////////////////////////////////////////////////////
+
+in_unckdata int volatile    _barrier_value[NB_BARRIERS]  = { [0 ... NB_BARRIERS-1] = 0 };
+in_unckdata int volatile    _barrier_count[NB_BARRIERS]  = { [0 ... NB_BARRIERS-1] = 0 };
+in_unckdata int volatile    _barrier_lock[NB_BARRIERS]   = { [0 ... NB_BARRIERS-1] = 0 };
+
+////////////////////////////////////////////////////////////////////////////////////////
+//  Global uncachable variables for spin_locks using LL/C instructions
+////////////////////////////////////////////////////////////////////////////////////////
+
+in_unckdata int volatile    _spin_lock[NB_LOCKS] =    { [0 ... NB_LOCKS-1] = 0 };
+
+////////////////////////////////////////////////////////////////////////////////////////
+// Memcopy taken from MutekH.
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers void* _memcpy( void*        _dst, 
+                          const void*  _src, 
+                          unsigned int size )
+{
+    unsigned int *dst = _dst;
+    const unsigned int *src = _src;
+    if ( ! ((unsigned int)dst & 3) && ! ((unsigned int)src & 3) )
+    {
+        while (size > 3) 
+        {
+            *dst++ = *src++;
+            size -= 4;
+        }
+    }
+
+    unsigned char *cdst = (unsigned char*)dst;
+    unsigned char *csrc = (unsigned char*)src;
+
+    while (size--) 
+    {
+        *cdst++ = *csrc++;
+    }
+    return _dst;
+}
+////////////////////////////////////////////////////////////////////////////////////////
+// Memcopy using extended addresses
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers void  _extended_memcpy( unsigned int dst_cluster,
+                                   unsigned int dst_address,
+                                   unsigned int src_cluster,
+                                   unsigned int src_address,
+                                   unsigned int length )
+{
+    if ( (dst_address & 0x3) || (src_address & 0x3) || (length & 0x3) )
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _extended_memcpy()" );
+        _tty_release_lock( 0 );
+        _exit();
+    }
+
+    unsigned int i;
+    unsigned int word;
+
+    for ( i = 0 ; i < length ; i = i+4 )
+    {
+        word = _word_extended_read( src_cluster, (src_address + i) );
+        _word_extended_write( dst_cluster, (dst_address + i), word );
+    }
+}
+////////////////////////////////////////////////////////////////////////////////////////
+// Access CP0 and returns processor ident
+// No more than 1024 processors...
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers unsigned int _procid()
+{
+    unsigned int ret;
+    asm volatile( "mfc0 %0, $15, 1": "=r"(ret) );
+    return (ret & 0x3FF);
+}
+////////////////////////////////////////////////////////////////////////////////////////
+// Access CP0 and returns processor time
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers unsigned int _proctime()
+{
+    unsigned int ret;
+    asm volatile( "mfc0 %0, $9": "=r"(ret) );
+    return ret;
+}
+////////////////////////////////////////////////////////////////////////////////////////
+// Returns the number of processsors controled by the GIET
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers unsigned int _procnumber()
+{
+    return (unsigned int)(NB_PROCS_MAX * X_SIZE * Y_SIZE);
+}
+////////////////////////////////////////////////////////////////////////////////////////
+// Returns pseudo-random number
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers unsigned int _rand()
+{
+    unsigned int x = _proctime();
+    if((x & 0xF) > 7)
+        return (x*x & 0xFFFF);
+    else
+        return (x*x*x & 0xFFFF);
+}
+////////////////////////////////////////////////////////////////////////////////////////
+// Access CP0 and mask IRQs
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _it_mask()
+{
+    int tmp;
+    asm volatile("mfc0  %0, $12"    : "=r" (tmp) );
+    asm volatile("ori   %0, %0, 1"  : "=r" (tmp) );
+    asm volatile("mtc0  %0, $12"    : "=r" (tmp) );
+}
+////////////////////////////////////////////////////////////////////////////////////////
+// Access CP0 and enable IRQs
+////////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _it_enable()
+{
+    int tmp;
+    asm volatile("mfc0  %0, $12"    : "=r" (tmp) );
+    asm volatile("addi  %0, %0, -1" : "=r" (tmp) );
+    asm volatile("mtc0  %0, $12"    : "=r" (tmp) );
+}
+//////////////////////////////////////////////////////////////////////
+// Invalidate all cache lines corresponding to a memory buffer.
+// This is used by the block_device driver.
+/////////////////////////////////////////////////////////////////////////
+in_drivers void _dcache_buf_invalidate(const void * buffer, size_t size)
+{
+    size_t i;
+    size_t dcache_line_size;
+
+    // retrieve dcache line size from config register (bits 12:10)
+    asm volatile("mfc0 %0, $16, 1" : "=r" (dcache_line_size));
+
+    dcache_line_size = 2 << ((dcache_line_size>>10) & 0x7);
+
+    // iterate on lines to invalidate each one of them
+    for ( i=0; i<size; i+=dcache_line_size )
+        asm volatile(" cache %0, %1"
+                :
+                :"i" (0x11), "R" (*((char*)buffer+i)));
+}
+
+////////////////////////////////////////////////////////////////////////////
+// This function makes a physical read access to a 32 bits word in memory, 
+// after a temporary paddr extension.
+////////////////////////////////////////////////////////////////////////////
+in_drivers unsigned int _word_extended_read( unsigned int  cluster,
+                                             unsigned int  address )
+{
+    unsigned int value;
+    asm volatile(
+            "li      $3,        0xFFFFFFFE    \n"
+            "mfc0    $2,        $12           \n"
+            "and     $3,        $2, $3        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ disabled     */
+
+            "mtc2    %2,        $24           \n"     /* PADDR_EXT <= msb */   
+            "lw      %0,        0(%1)         \n"     /* value <= *paddr  */
+            "mtc2    $0,        $24           \n"     /* PADDR_EXT <= 0   */
+
+            "li      $3,        0x00000001    \n"
+            "mfc0    $2,        $12           \n"
+            "or      $3,        $3, $2        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ enabled      */
+            : "=r" (value)
+            : "r" (address), "r" (cluster)
+            : "$2", "$3" );
+    return value;
+}
+////////////////////////////////////////////////////////////////////////////
+// This function makes a physical read access to a single byte in memory, 
+// after a temporary paddr extension.
+////////////////////////////////////////////////////////////////////////////
+in_drivers unsigned char _byte_extended_read( unsigned int  cluster,
+                                              unsigned int  address )
+{
+    unsigned int value;
+    asm volatile(
+            "li      $3,        0xFFFFFFFE    \n"
+            "mfc0    $2,        $12           \n"
+            "and     $3,        $2, $3        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ disabled     */
+
+            "mtc2    %2,        $24           \n"     /* PADDR_EXT <= msb */   
+            "lb      %0,        0(%1)         \n"     /* value <= *paddr  */
+            "mtc2    $0,        $24           \n"     /* PADDR_EXT <= 0   */
+
+            "li      $3,        0x00000001    \n"
+            "mfc0    $2,        $12           \n"
+            "or      $3,        $3, $2        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ enabled      */
+            : "=r" (value)
+            : "r" (address), "r" (cluster)
+            : "$2", "$3" );
+    return (unsigned char)value;
+}
+////////////////////////////////////////////////////////////////////////////
+// This function makes a physical write access to a 32 bits word in memory, 
+// after a temporary DTLB address extension.
+////////////////////////////////////////////////////////////////////////////
+in_drivers void _word_extended_write( unsigned int  cluster, 
+                                      unsigned int  address,
+                                      unsigned int  word ) 
+{
+    asm volatile(
+            "li      $3,        0xFFFFFFFE    \n"
+            "mfc0    $2,        $12           \n"
+            "and     $3,        $2, $3        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ disabled     */
+
+            "mtc2    %2,        $24           \n"     /* PADDR_EXT <= msb */   
+            "sw      %0,        0(%1)         \n"     /* *paddr <= value  */
+            "mtc2    $0,        $24           \n"     /* PADDR_EXT <= 0   */   
+
+            "li      $3,        0x00000001    \n"
+            "mfc0    $2,        $12           \n"
+            "or      $3,        $2, $3        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ enabled      */
+            :
+            : "r" (word), "r" (address), "r" (cluster)
+            : "$2", "$3");
+}
+////////////////////////////////////////////////////////////////////////////
+// This function makes a physical write access to single byte in memory, 
+// after a temporary DTLB de-activation and address extension.
+////////////////////////////////////////////////////////////////////////////
+in_drivers void _byte_extended_write( unsigned int  cluster, 
+                                      unsigned int  address,
+                                      unsigned char byte ) 
+{
+    asm volatile(
+            "li      $3,        0xFFFFFFFE    \n"
+            "mfc0    $2,        $12           \n"
+            "and     $3,        $2, $3        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ disabled     */
+
+            "mtc2    %2,        $24           \n"     /* PADDR_EXT <= msb */   
+            "sb      %0,        0(%1)         \n"     /* *paddr <= value  */
+            "mtc2    $0,        $24           \n"     /* PADDR_EXT <= 0   */   
+
+            "li      $3,        0x00000001    \n"
+            "mfc0    $2,        $12           \n"
+            "or      $3,        $2, $3        \n"
+            "mtc0    $3,        $12           \n"     /* IRQ enabled      */
+            :
+            : "r" (byte), "r" (address), "r" (cluster)
+            : "$2", "$3");
+}
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Exit (suicide) after printing message on TTY0 
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _exit()
+{
+    unsigned int proc_id = _procid();
+    unsigned int l       = proc_id % NB_PROCS_MAX;
+    unsigned int x       = (proc_id / NB_PROCS_MAX) >> Y_WIDTH;
+    unsigned int y       = (proc_id / NB_PROCS_MAX) & ((1<<Y_WIDTH) - 1);
+
+    _tty_get_lock( 0 );
+    _tty_puts("\n !!! exit proc[");
+    _tty_putd( x );
+    _tty_puts(",");
+    _tty_putd( y );
+    _tty_puts(",");
+    _tty_putd( l );
+    _tty_puts("]  !!!\n");
+    _tty_release_lock( 0 );
+
+    while(1) asm volatile("nop");   // infinite loop...
+}
+
+/////////////////////////////////////////////////////////////////////////
+// convert a 32 bits unsigned int to a string of 10 decimal characters.
+/////////////////////////////////////////////////////////////////////////
+in_drivers void _itoa_dec(unsigned val, char* buf)
+{
+    const char  DecTab[] = "0123456789";
+    unsigned int i;
+    for( i=0 ; i<10 ; i++ )
+    {
+        if( (val!=0) || (i==0) ) buf[9-i] = DecTab[val % 10];
+        else                     buf[9-i] = 0x20;
+        val /= 10;
+    }
+}
+//////////////////////////////////////////////////////////////////////////
+// convert a 32 bits unsigned int to a string of 8 hexadecimal characters.
+///////////////////////////////////////////////////////////////////////////
+in_drivers void _itoa_hex(unsigned int val, char* buf)
+{
+    const char  HexaTab[] = "0123456789ABCD";
+    unsigned int i;
+    for( i=0 ; i<8 ; i++ )
+    {
+        buf[7-i] = HexaTab[val % 16];
+        val /= 16;
+    }
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+// VCI MULTI_TTY
+///////////////////////////////////////////////////////////////////////////////////////
+//  The total number of TTY terminals is defined by NB_TTY_CHANNELS.
+//  - If there is only one terminal, it is supposed to be shared, and used by
+//    all processors: a lock must be taken before display.
+//  - If there is several terminals, and the number of processors is smaller 
+//    than the number of terminals, there is one terminal per processor, but 
+//    the TTY index is not equal to the proc_id, due to cluster indexing policy:
+//    proc_id = cluster_xy * NB_PROCS_MAX + local_id (with cluster_xy = x << Y_WIDTH + y)
+//    tty_id  = cluster_id * NB_PROCS_MAX + local_id (with cluster_id = x * Y_SIZE + y)
+//  - If the computed tty_id is larger than NB_TTY_CHANNELS, an error is returned.
+///////////////////////////////////////////////////////////////////////////////////////
+//  If USE_EXT_IO is set, we use the TTY controler implemented in cluster_io
+//  (x = X_SIZE-1 / y = Y_SIZE), which requires and extended address access. 
+//  If USE_EXT_IO not set, we use the single channel TTY contrÃŽler in cluster (0,0).
+///////////////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Write one or several characters directly from a fixed length user buffer
+// to the TTY_WRITE register of the TTY controler.
+// The channel index must be checked by the calling function.
+// This is a non blocking call : it test the TTY_STATUS register.
+// If the TTY_STATUS_WRITE bit is set, the transfer stops and the function
+// returns  the number of characters that have been actually written.
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers int _tty_write( char*           buffer, 
+                           unsigned int    length, 
+                           unsigned int    channel )
+{
+    unsigned int    base       = (unsigned int)&seg_tty_base + channel*TTY_SPAN*4;
+    unsigned int    nwritten   = 0;
+    unsigned int    cluster_io = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+    unsigned int    status;
+    unsigned int	i;
+
+    for ( i=0 ; i < length ; i++ )
+    {
+        if( USE_EXT_IO )    // extended addressing to reach cluster_io
+        {
+            status = _word_extended_read( cluster_io, base + TTY_STATUS*4 );
+            if ( (status & 0x2) == 0x2 ) break;
+            else
+            {
+                _byte_extended_write( cluster_io, base + TTY_WRITE*4 , buffer[i] );
+                nwritten++;
+            }
+        }
+        else                // direct addressing to cluster(0,0)
+        {
+            char* tty = (char*)base;
+            if ( (tty[TTY_STATUS*4] & 0x2) == 0x2 )  break;
+            else
+            {
+                tty[TTY_WRITE*4] = buffer[i]; // write character
+                nwritten++;
+            }
+        }
+    }
+
+    return nwritten;
+}
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Fetch one character directly from the TTY_READ register of the TTY controler,
+// and writes this character to the user buffer.
+// The channel index must be checked by the calling function.
+// This is a non blocking call : it returns 0 if the register is empty,
+// and returns 1 if the register is full.
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers int _tty_read( char*          buffer, 
+                          unsigned int   channel )
+{
+    unsigned int    base       = (unsigned int)&seg_tty_base + channel*TTY_SPAN*4;
+    unsigned int    cluster_io = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+    unsigned int    status;
+
+    if( USE_EXT_IO )
+    {
+        status = _word_extended_read( cluster_io, base + TTY_STATUS*4 );
+        if ( (status & 0x1) == 0x1 )
+        {
+            buffer[0] = (char)_word_extended_read( cluster_io, base + TTY_READ*4 );
+            return 1;
+        }
+        else
+        {
+            return 0;
+        }
+    }
+    else
+    {
+        char* tty = (char*)base;
+
+        if((tty[TTY_STATUS*4] & 0x1) == 0x1)
+        {
+            buffer[0] = tty[TTY_READ*4];
+            return 1;
+        }
+        else
+        {
+            return 0;
+        }
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// This function displays a string on TTY0.
+// The string must be terminated by a NUL character.
+//////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_puts( char* string )
+{
+    int length = 0;
+    while (string[length] != 0) length++;
+    _tty_write( string, length, 0 );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// This function displays a 32 bits unsigned int as an hexa string on TTY0.
+///////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_putx(unsigned int val) 
+{
+    static const char HexaTab[] = "0123456789ABCDEF";
+    char buf[11];
+    unsigned int c;
+
+    buf[0] = '0';
+    buf[1] = 'x';
+    buf[10] = 0;
+
+    for (c = 0; c < 8; c++) 
+    { 
+        buf[9 - c] = HexaTab[val & 0xF];
+        val = val >> 4;
+    }
+    _tty_puts( buf );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// This function displays a 32 bits unsigned int as a decimal string on TTY0.
+///////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_putd( unsigned int val ) 
+{
+    static const char DecTab[] = "0123456789";
+    char buf[11];
+    unsigned int i;
+    unsigned int first;
+
+    buf[10] = 0;
+
+    for (i = 0; i < 10; i++) 
+    {
+        if ((val != 0) || (i == 0)) 
+        {
+            buf[9 - i] = DecTab[val % 10];
+            first = 9 - i;
+        }
+        else 
+        {
+            break;
+        }
+        val /= 10;
+    }
+    _tty_puts( &buf[first] );
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// This function try to take the hardwired lock protecting exclusive access 
+// to TTY terminal identified by the channel argument.
+// It returns only when the lock has been successfully taken.
+//////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_get_lock( unsigned int channel )
+{
+    if ( USE_EXT_IO )  // extended addressing to cluster_io
+    {
+        unsigned int    cluster_io = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+        unsigned int    address    = (unsigned int)&seg_tty_base 
+                                     + ((TTY_CONFIG + channel*TTY_SPAN)*4);
+        while ( _word_extended_read( cluster_io, address ) ) asm volatile("nop");
+    }
+    else               // direct addressing to cluster(0,0)
+    {
+        unsigned int* tty = (unsigned int *) &seg_tty_base;
+        while ( tty[channel * TTY_SPAN + TTY_CONFIG] ) asm volatile("nop"); 
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// This function releases the hardwired lock protecting exclusive access 
+// to TTY terminal identified by the channel argument.
+//////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_release_lock( unsigned int channel )
+{
+    if ( USE_EXT_IO )  // extended addressing to cluster_io
+    {
+        unsigned int    cluster_io = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+        unsigned int    address    = (unsigned int)&seg_tty_base 
+                                     + ((TTY_CONFIG + channel*TTY_SPAN)*4);
+        _word_extended_write( cluster_io, address, 0 );
+    }
+    else               // direct addressing to cluster(0,0)
+    {
+        unsigned int* tty_address = (unsigned int *) &seg_tty_base;
+        tty_address[channel * TTY_SPAN + TTY_CONFIG] = 0;
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// This function fetch a single ascii character from a terminal
+// implicitely defined by the processor ID.
+// It is a blocking function.
+//////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_getc( char* buf )
+{
+    unsigned int proc_id = _procid();
+    unsigned int channel;
+    unsigned int l;
+    unsigned int x;
+    unsigned int y;
+
+    // check TTY channel
+    l           = (proc_id % NB_PROCS_MAX);
+    x           = (proc_id / NB_PROCS_MAX) >> Y_WIDTH; 
+    y           = (proc_id / NB_PROCS_MAX) & ((1<<Y_WIDTH) - 1);
+    channel = (x * Y_SIZE + y) * NB_PROCS_MAX + l;
+    if (channel >= NB_TTY_CHANNELS )
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _tty_getc(): TTY index too large\n" );
+        _tty_release_lock( 0 );
+        _exit();
+    }
+
+    while( _tty_read( buf, channel ) == 0 ) asm volatile("nop");
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//  Fetch a string of decimal characters (most significant digit first)
+//  to build a 32 bits unsigned int.
+//  The terminal index is implicitely defined by the processor ID.
+//  This is a blocking function.
+//  The decimal characters are written in a 32 characters buffer
+//  until a <LF> or <CR> character is read.
+//  The <DEL> character is interpreted, and previous characters can be
+//  cancelled. All others characters are ignored.
+//  When the <LF> or <CR> character is received, the string is converted 
+//  to an unsigned int value. If the number of decimal digit is too large
+//  for the 32 bits range, the zero value is returned.
+//////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_getw( unsigned int* word_buffer )
+{
+    char          buf[32];
+    char          byte;
+    char          cancel_string[3] = { 0x08, 0x20, 0x08 };
+    char          zero             = 0x30;
+    unsigned int  save = 0;
+    unsigned int  val = 0;
+    unsigned int  done = 0;
+    unsigned int  overflow = 0;
+    unsigned int  max = 0;
+    unsigned int  proc_id = _procid();
+    unsigned int  i;
+    unsigned int  channel;
+    unsigned int  x;
+    unsigned int  y;
+    unsigned int  l;
+
+    // check TTY channel
+    l           = (proc_id % NB_PROCS_MAX);
+    x           = (proc_id / NB_PROCS_MAX) >> Y_WIDTH; 
+    y           = (proc_id / NB_PROCS_MAX) & ((1<<Y_WIDTH) - 1);
+    channel = (x * Y_SIZE + y) * NB_PROCS_MAX + l;
+    if (channel >= NB_TTY_CHANNELS )
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _tty_getw(): TTY index too large\n" );
+        _tty_release_lock( 0 );
+        _exit();
+    }
+
+    while( done == 0 )
+    {
+        _tty_read( &byte, channel );
+
+        if (( byte > 0x2F) && (byte < 0x3A))  // decimal character
+        {
+            buf[max] = byte;
+            max++;
+            _tty_write( &byte, 1, channel );
+        }
+        else if ( (byte == 0x0A) || (byte == 0x0D) ) // LF or CR character
+        {
+            done = 1;
+        }
+        else if ( byte == 0x7F )        // DEL character
+        {
+            if (max > 0)
+            {
+                max--;          // cancel the character
+                _tty_write( cancel_string, 3, channel );
+            }
+        }
+    } // end while
+
+    // string conversion
+    for( i=0 ; i<max ; i++ )
+    {
+        val = val*10 + (buf[i] - 0x30);
+        if (val < save) overflow = 1;
+        save = val;
+    }
+    if (overflow == 0)
+    {
+        *word_buffer = val;     // return decimal value
+    }
+    else
+    {
+        for( i=0 ; i<max ; i++)     // cancel the string
+        {
+            _tty_write( cancel_string, 3, channel );
+        }
+        _tty_write( &zero, 1, channel );
+        *word_buffer = 0;       // return 0 value
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//  This function is a simplified version of the mutek_printf() function.
+//  It takes the TTY lock on the selected channel for exclusive access.
+//  Only a limited number of formats are supported:
+//  - %d : signed decimal
+//  - %u : unsigned decimal
+//  - %x : hexadecimal
+//  - %c : char
+//  - %s : string
+//////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_printf( char *format, ...)
+{
+    va_list ap;
+    va_start( ap, format );
+
+    unsigned int channel;
+    unsigned int x;
+    unsigned int y;
+    unsigned int proc_id = _procid();
+
+    // compute TTY channel :
+    // if the number of TTY channels is smaller 
+    // than the number of clusters, use TTY_0_0
+    // else, TTY channel <= cluster index
+    if ( NB_TTY_CHANNELS < (X_SIZE * Y_SIZE) )
+    {
+        channel = 0;
+    }
+    else
+    {
+        x           = (proc_id / NB_PROCS_MAX) >> Y_WIDTH; 
+        y           = (proc_id / NB_PROCS_MAX) & ((1<<Y_WIDTH) - 1);
+        channel     = (x * Y_SIZE + y);
+    }
+
+    // take the TTY lock 
+    _tty_get_lock( channel );
+
+printf_text:
+
+    while (*format) 
+    {
+        unsigned int i;
+        for (i = 0; format[i] && format[i] != '%'; i++)
+            ;
+        if (i) 
+        {
+            _tty_write( format, i, channel );
+            format += i;
+        }
+        if (*format == '%') 
+        {
+            format++;
+            goto printf_arguments;
+        }
+    } // end while
+
+    va_end( ap );
+
+    // release lock
+    _tty_release_lock( 0 );
+
+    return;
+
+printf_arguments:
+
+    {
+        int                 val = va_arg(ap, long);
+        char                buf[20];
+        char*               pbuf;
+        unsigned int        len = 0;
+        static const char   HexaTab[] = "0123456789ABCDEF";
+        unsigned int        i;
+
+        switch (*format++) {
+            case ('c'):             // char conversion
+                len = 1;
+                buf[0] = val;
+                pbuf = buf;
+                break;
+            case ('d'):             // decimal signed integer
+                if (val < 0) 
+                {
+                    val = -val;
+                    _tty_write( "_" , 1, channel );
+                }
+            case ('u'):             // decimal unsigned integer
+                for( i=0 ; i<10 ; i++) 
+                {
+                    buf[9-i] = HexaTab[val % 10];
+                    if (!(val /= 10)) break;
+                }
+                len =  i+1;
+                pbuf = &buf[9-i];
+                break;
+            case ('x'):             // hexadecimal integer
+                _tty_write( "0x", 2, channel );
+                for( i=0 ; i<8 ; i++) 
+                {
+                    buf[7-i] = HexaTab[val % 16U];
+                    if (!(val /= 16U)) break;
+                }
+                len =  i+1;
+                pbuf = &buf[7-i];
+                break;
+            case ('s'):             // string
+                {
+                    char *str = (char*)val;
+                    while ( str[len] ) len++;
+                    pbuf = (char*)val;
+                }
+                break;
+            default:
+                goto printf_text;
+        } // end switch
+
+        _tty_write( pbuf, len, channel );
+        goto printf_text;
+    }
+} // end printf()
+
+//////////////////////////////////////////////////////////////////////////////////////
+//  These functions are the ISRs that must be executed when an IRQ is activated
+//  by the TTY: _tty_isr_XX is associated to TTY channel [XX].
+//  It save the character in the communication buffer _tty_get_buf[XX],
+//  and set the set/reset variable _tty_get_full[XX].
+//  A character is lost if the buffer is full when the ISR is executed.
+//////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _tty_isr_indexed(size_t index)
+{
+    if ( USE_EXT_IO )   // extended addressing to TTY in cluster_io
+    {
+        unsigned int  cluster = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+        unsigned int  base    = (unsigned int)&seg_tty_base +
+                                ((index*TTY_SPAN + TTY_READ)*4); 
+
+        _tty_get_buf[index] = (char)_word_extended_read( cluster, base );
+    }
+    else                // direct addressing to TTY in cluster(0,0)
+    {
+        char* tty = (char*)&seg_tty_base + index*TTY_SPAN*4;
+
+        _tty_get_buf[index] = tty[TTY_READ*4];	// save character and reset IRQ
+    }
+    _tty_get_full[index] = 1;               // signals character available
+}
+
+in_drivers void _tty_isr()    { _tty_isr_indexed(0); }
+
+in_drivers void _tty_isr_00() { _tty_isr_indexed(0); }
+in_drivers void _tty_isr_01() { _tty_isr_indexed(1); }
+in_drivers void _tty_isr_02() { _tty_isr_indexed(2); }
+in_drivers void _tty_isr_03() { _tty_isr_indexed(3); }
+in_drivers void _tty_isr_04() { _tty_isr_indexed(4); }
+in_drivers void _tty_isr_05() { _tty_isr_indexed(5); }
+in_drivers void _tty_isr_06() { _tty_isr_indexed(6); }
+in_drivers void _tty_isr_07() { _tty_isr_indexed(7); }
+in_drivers void _tty_isr_08() { _tty_isr_indexed(8); }
+in_drivers void _tty_isr_09() { _tty_isr_indexed(9); }
+in_drivers void _tty_isr_10() { _tty_isr_indexed(10); }
+in_drivers void _tty_isr_11() { _tty_isr_indexed(11); }
+in_drivers void _tty_isr_12() { _tty_isr_indexed(12); }
+in_drivers void _tty_isr_13() { _tty_isr_indexed(13); }
+in_drivers void _tty_isr_14() { _tty_isr_indexed(14); }
+in_drivers void _tty_isr_15() { _tty_isr_indexed(15); }
+in_drivers void _tty_isr_16() { _tty_isr_indexed(16); }
+in_drivers void _tty_isr_17() { _tty_isr_indexed(17); }
+in_drivers void _tty_isr_18() { _tty_isr_indexed(18); }
+in_drivers void _tty_isr_19() { _tty_isr_indexed(19); }
+in_drivers void _tty_isr_20() { _tty_isr_indexed(20); }
+in_drivers void _tty_isr_21() { _tty_isr_indexed(21); }
+in_drivers void _tty_isr_22() { _tty_isr_indexed(22); }
+in_drivers void _tty_isr_23() { _tty_isr_indexed(23); }
+in_drivers void _tty_isr_24() { _tty_isr_indexed(24); }
+in_drivers void _tty_isr_25() { _tty_isr_indexed(25); }
+in_drivers void _tty_isr_26() { _tty_isr_indexed(26); }
+in_drivers void _tty_isr_27() { _tty_isr_indexed(27); }
+in_drivers void _tty_isr_28() { _tty_isr_indexed(28); }
+in_drivers void _tty_isr_29() { _tty_isr_indexed(29); }
+in_drivers void _tty_isr_30() { _tty_isr_indexed(30); }
+in_drivers void _tty_isr_31() { _tty_isr_indexed(31); }
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+//   BLOCK_DEVICE (IOC)
+//////////////////////////////////////////////////////////////////////////////////////////
+// The block size is 512 bytes.
+// The functions below use the three variables _ioc_lock _ioc_done, 
+// and _ioc_status for synchronisation.
+// - As the IOC component can be used by several programs running in parallel,
+// the _ioc_lock variable guaranties exclusive access to the device.
+// The _ioc_read() and _ioc_write() functions use atomic LL/SC to get the lock.
+// and set _ioc_lock to a non zero value. 
+// The _ioc_write() and _ioc_read() functions are blocking, polling the _ioc_lock
+// variable until the device is available.
+// - When the tranfer is completed, the ISR routine activated by the IOC IRQ
+// set the _ioc_done variable to a non-zero value. Possible address errors detected
+// by the IOC peripheral are reported by the ISR in the _ioc_status variable.
+// The _ioc_completed() function is polling the _ioc_done variable, waiting for
+// tranfer conpletion. When the completion is signaled, the _ioc_completed() function
+// reset the _ioc_done variable to zero, and releases the _ioc_lock variable.
+///////////////////////////////////////////////////////////////////////////////////////
+//  If USE_EXT_IO is set, we use the IOC controler implemented in cluster_io
+//  (x = X_SIZE-1 / y = Y_SIZE), which requires and extended address access. 
+//  If USE_EXT_IO not set, we use the IOC contrÃŽler in cluster (0,0).
+//
+//  If USE_RAMDISK is set, we access a "virtual" block device controler  implemented 
+//  as a memory-mapped segment in cluster [0,0] at address seg_ramdisk_base.
+//  The tranfer being fully synchronous, the IOC interrupt is not activated.
+///////////////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////////////
+// This blocking function is used by the _ioc_read() and _ioc_write() functions 
+// to get _ioc_lock using LL/SC.
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _ioc_get_lock()
+{
+    register unsigned int*	plock = (unsigned int*)&_ioc_lock;			
+
+    asm volatile ("_ioc_llsc:			    \n"
+                  "ll   $2,    0(%0)		    \n"	// $2 <= _ioc_lock
+                  "bnez $2,    _ioc_llsc	    \n" // retry  if busy
+                  "li   $3,    1   		    \n"	// prepare argument for sc  
+                  "sc   $3,    0(%0)       	    \n" // try to set _ioc_busy
+                  "beqz $3,    _ioc_llsc   	    \n" // retry if not atomic 
+                  ::"r"(plock):"$2","$3");
+}
+
+//////////////////////////////////////////////////////////////////////////////////////
+// Transfer data from a memory buffer to the block_device.
+// - lba    : first block index on the disk
+// - buffer : base address of the memory buffer
+// - count  : number of blocks to be transfered
+// - ext    : cluster index for the memory buffer
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _ioc_write( size_t   lba, 
+                            void*    buffer, 
+                            size_t   count,
+                            size_t   ext )
+{
+    // get the lock
+    _ioc_get_lock();
+
+    if ( USE_RAMDISK )  // we use an extended_memcpy
+    {
+        unsigned int  src_address = (unsigned int)buffer;
+        unsigned int  src_cluster = ext;
+        unsigned int  dst_address = (unsigned int)&seg_ramdisk_base + lba*512;
+        unsigned int  dst_cluster = 0;
+
+        _extended_memcpy( dst_cluster,
+                          dst_address,
+                          src_cluster,
+                          src_address,
+                          count*512 );
+        
+        _ioc_status = BLOCK_DEVICE_WRITE_SUCCESS;
+        _ioc_done   = 1;
+    }
+    else if ( USE_EXT_IO )   // extended addressing to cluster_io
+    {
+        unsigned int    cluster = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+        unsigned int    base    = (unsigned int)&seg_ioc_base;
+
+        _word_extended_write( cluster, base + BLOCK_DEVICE_BUFFER*4,     (unsigned int)buffer );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_BUFFER_EXT*4, ext );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_COUNT*4,      count );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_LBA*4,        lba );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_IRQ_ENABLE*4, 1 );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_OP*4,         BLOCK_DEVICE_WRITE );
+    }
+    else                // direct addressing to cluster(0,0)
+    {
+        unsigned int* ioc = (unsigned int*)&seg_ioc_base;
+
+        ioc[BLOCK_DEVICE_BUFFER]     = (unsigned int)buffer;
+        ioc[BLOCK_DEVICE_BUFFER_EXT] = ext;
+        ioc[BLOCK_DEVICE_COUNT]      = count;
+        ioc[BLOCK_DEVICE_LBA]        = lba;
+        ioc[BLOCK_DEVICE_IRQ_ENABLE] = 1;
+        ioc[BLOCK_DEVICE_OP]         = BLOCK_DEVICE_WRITE;
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Transfer data from a file on the block device to a memory buffer.
+// - lba    : first block index on the disk
+// - buffer : base address of the memory buffer
+// - count  : number of blocks to be transfered
+// - ext    : cluster index for the memory buffer
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _ioc_read( size_t   lba, 
+                           void*    buffer, 
+                           size_t   count,
+                           size_t   ext )
+{
+    // get the lock
+    _ioc_get_lock();
+
+    if ( USE_RAMDISK )  // we use an extended_memcpy
+    {
+        unsigned int  dst_address = (unsigned int)buffer;
+        unsigned int  dst_cluster = ext;
+        unsigned int  src_address = (unsigned int)&seg_ramdisk_base + lba*512;
+        unsigned int  src_cluster = 0;
+
+        _extended_memcpy( dst_cluster,
+                          dst_address,
+                          src_cluster,
+                          src_address,
+                          count*512 );
+
+        _ioc_status = BLOCK_DEVICE_READ_SUCCESS;
+        _ioc_done   = 1;
+    }
+    else if ( USE_EXT_IO )   // extended addressing to cluster_io
+    {
+        unsigned int    cluster = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+        unsigned int    base    = (unsigned int)&seg_ioc_base;
+
+        _word_extended_write( cluster, base + BLOCK_DEVICE_BUFFER*4,     (unsigned int)buffer );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_BUFFER_EXT*4, ext );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_COUNT*4,      count );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_LBA*4,        lba );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_IRQ_ENABLE*4, 1 );
+        _word_extended_write( cluster, base + BLOCK_DEVICE_OP*4,         BLOCK_DEVICE_READ );
+    }
+    else                // direct addressing to cluster(0,0)
+    {
+        unsigned int* ioc = (unsigned int*)&seg_ioc_base;
+
+        ioc[BLOCK_DEVICE_BUFFER]     = (unsigned int)buffer;
+        ioc[BLOCK_DEVICE_BUFFER_EXT] = ext;
+        ioc[BLOCK_DEVICE_COUNT]      = count;
+        ioc[BLOCK_DEVICE_LBA]        = lba;
+        ioc[BLOCK_DEVICE_IRQ_ENABLE] = 1;
+        ioc[BLOCK_DEVICE_OP]         = BLOCK_DEVICE_READ;
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////////////
+// This blocking function cheks completion of an I/O transfer and reports errors.
+// It returns 0 if the transfer is successfully completed.
+// It returns -1 if an error has been reported.
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _ioc_completed()
+{
+    // waiting for completion
+    while (_ioc_done == 0)  asm volatile("nop"); 
+    
+    // reset synchronisation variables
+    _ioc_done = 0;
+    _ioc_lock = 0;
+
+    if( (_ioc_status != BLOCK_DEVICE_READ_SUCCESS) &&
+        (_ioc_status != BLOCK_DEVICE_WRITE_SUCCESS) )
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _ioc_completed()\n");
+        _tty_release_lock( 0 );
+        _exit();
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////////////
+//  This ISR must be executed when an IRQ is activated by IOC to signal completion.
+//  It acknowledge the IRQ using the ioc base address, save the status in _ioc_status,
+//  and set the _ioc_done variable to signal completion.
+//  This variable is defined in the drivers.c file.
+//////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _ioc_isr()
+{
+    if ( USE_EXT_IO )  // extended addressing to cluster_io
+    {
+        unsigned int    cluster = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;
+        unsigned int    base    = (unsigned int)&seg_ioc_base;
+
+        _ioc_status = _word_extended_read( cluster, base + BLOCK_DEVICE_STATUS*4 );
+    }
+    else               // direct addressing to cluster(Ã ,0)
+    {
+        unsigned int* ioc = (unsigned int*)&seg_ioc_base;
+    
+        _ioc_status = ioc[BLOCK_DEVICE_STATUS];	// save status & reset IRQ
+    }
+    _ioc_done   = 1;	   // signals completion
+}
+
+//////////////////////////////////////////////////////////////////////////////////////
+//  FRAME_BUFFER
+//////////////////////////////////////////////////////////////////////////////////////
+// The _fb_sync_write & _fb_sync_read functions use a memcpy strategy to implement 
+// the transfer between a data buffer and the frame buffer.
+// They are blocking until completion of the transfer.
+//////////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////////////
+//  _fb_sync_write()
+// Transfer data from an user buffer to the frame_buffer device with a memcpy.
+// - offset : offset (in bytes) in the frame buffer
+// - buffer : base address of the memory buffer
+// - length : number of bytes to be transfered
+// - ext    : cluster_xy for the user buffer
+//////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _fb_sync_write( unsigned int  offset, 
+                                unsigned int  buffer, 
+                                unsigned int  length,
+                                unsigned int  ext )
+{
+    unsigned int  src_address = buffer;
+    unsigned int  src_cluster = ext;
+    unsigned int  dst_address = (unsigned int)&seg_fbf_base + offset;
+    unsigned int  dst_cluster = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;  // cluster_xy for I/O
+
+    _extended_memcpy( dst_cluster,
+                      dst_address,
+                      src_cluster,
+                      src_address,
+                      length );
+}
+
+///////////////////////////////////////////////////////////////////////////////////////
+//  _fb_sync_read()
+// Transfer data from the frame_buffer device to an user buffer with a memcpy.
+// - offset : offset (in bytes) in the frame buffer
+// - buffer : base address of the memory buffer
+// - length : number of bytes to be transfered
+// - ext    : cluster_xy for the user buffer
+//////////////////////////////////////////////////////////////////////////////////////
+in_drivers void  _fb_sync_read( unsigned int  offset, 
+                                unsigned int  buffer, 
+                                unsigned int  length,
+                                unsigned int  ext )
+{
+    unsigned int  dst_address = buffer;
+    unsigned int  dst_cluster = ext;
+    unsigned int  src_address = (unsigned int)&seg_fbf_base + offset;
+    unsigned int  src_cluster = ((X_SIZE-1)<<Y_WIDTH) + Y_SIZE;  // cluster_xy for I/O
+
+    _extended_memcpy( dst_cluster,
+                      dst_address,
+                      src_cluster,
+                      src_address,
+                      length );
+}
+
+//////////////////////////////////////////////////////////////////////////////////////
+//  This ISR must be executed when an IRQ is activated by MEMC to signal
+//  an error detected by the TSAR memory cache after a write transaction.
+//  It displays an error message on the TTY terminal allocated to the processor
+//  executing the ISR.
+//////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _mmc_isr()
+{
+    int*         mmc_address = (int*)&seg_mmc_base;
+    unsigned int cluster_xy  = _procid() / NB_PROCS_MAX;
+    
+    _tty_printf( "WRITE ERROR signaled by Memory Cache in cluster %x\n", cluster_xy );
+}
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Release a software spin-lock 
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _release_lock(size_t index)
+
+{
+    if( index >= NB_LOCKS ) 
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _release_lock()" );
+        _tty_release_lock( 0 );
+        _exit();
+    }
+    
+    _spin_lock[index] = 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Try to take a software spin-lock.
+// This is a blocking call, as there is a busy-waiting loop,
+// until the lock is granted to the requester.
+// There is an internal delay of about 100 cycles between
+// two successive lock read, to avoid bus saturation.
+///////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _get_lock(size_t index)
+{
+    if( index >= NB_LOCKS )
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _get_lock()" );
+        _tty_release_lock( 0 );
+        _exit();
+    }
+
+    register int   delay = ((_proctime() +_procid()) & 0xF) << 4;
+    register int * plock = (int *) &_spin_lock[index];			
+
+    asm volatile ("_locks_llsc:		        \n"
+                  "ll   $2,    0(%0)		\n"     // $2 <= _locks_lock
+                  "bnez $2,    _locks_delay	\n"     // random delay if busy
+                  "li   $3,    1            \n"     // prepare argument for sc  
+                  "sc   $3,    0(%0)       	\n" 	// try to set _locks_busy
+                  "bnez $3,    _locks_ok    \n"     // exit if atomic 
+                  "_locks_delay:            \n"
+                  "move $4,    %1           \n"     // $4 <= delay
+                  "_locks_loop:             \n"
+                  "addi $4,    $4,    -1    \n"     // $4 <= $4 - 1
+                  "beqz $4,    _locks_loop  \n"     // test end delay
+                  "j           _locks_llsc  \n"     // retry
+                  "_locks_ok:			\n"
+                  ::"r"(plock),"r"(delay):"$2","$3","$4");
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////
+// This function makes a cooperative initialisation of the barrier:
+// - barrier_count[index] <= N
+// - barrier_lock[index]  <= 0
+// All tasks try to initialize the barrier, but the initialisation 
+// is done by only one task, using LL/SC instructions.
+// This cooperative initialisation is questionnable, 
+// because the barrier can ony be initialised once...
+//////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _barrier_init(unsigned int index, unsigned int value)
+{
+
+    register int* pinit 	= (int*)&_barrier_value[index];
+    register int* pcount 	= (int*)&_barrier_count[index];
+    register int* plock  	= (int*)&_barrier_lock[index];
+
+    if ( index >= NB_BARRIERS )
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _barrier_init()" );
+        _tty_release_lock( 0 );
+        _exit();
+    }
+
+    // parallel initialisation using atomic instructions LL/SC
+    asm volatile ("_barrier_init_test:          	\n"
+                  "ll   $2,     0(%0)           	\n"	// read barrier_value 
+                  "bnez $2,     _barrier_init_done	\n"
+                  "move $3,     %3			        \n"
+                  "sc   $3,     0(%0)    	      	\n"	// try to write barrier_value
+                  "beqz $3,     _barrier_init_test	\n"
+                  "move $3,	%3			            \n" 
+                  "sw   $3,	0(%1)			        \n"	// barrier_count <= barrier_value
+                  "move $3, $0                      \n" // 
+                  "sw   $3,	0(%2)			        \n"	// barrier_lock <= 0
+                  "_barrier_init_done:			\n"
+                  ::"r"(pinit),"r"(pcount),"r"(plock),"r"(value):"$2","$3");
+}
+
+//////////////////////////////////////////////////////////////////////////////////////
+// This blocking function uses a busy_wait technics (on the barrier_lock value), 
+// because the GIET does not support dynamic scheduling/descheduling of tasks. 
+// The barrier state is actually defined by two variables:
+// _barrier_count[index] define the number of particpants that are waiting
+// _barrier_lock[index] define the bool variable whose value is polled 
+// The last participant change the value of _barrier_lock[index] to release the barrier...
+// There is at most 16 independant barriers, and an error is returned
+// if the barrier index is larger than 15.
+//////////////////////////////////////////////////////////////////////////////////////
+in_drivers void _barrier_wait(unsigned int index)
+{
+    register int* 	pcount 		= (int*)&_barrier_count[index];		
+    register int  	count;
+
+    int 	       lock 		= _barrier_lock[index];		
+
+    if ( index >= NB_BARRIERS )
+    {
+        _tty_get_lock( 0 );
+        _tty_puts( "ERROR in _barrier_wait()" );
+        _tty_release_lock( 0 );
+        _exit();
+    }
+    
+    // parallel decrement _barrier_count[index] using atomic instructions LL/SC
+    // input : pointer on _barrier_count[index]
+    // output : count = _barrier_count[index] (before decrementation)
+    asm volatile ("_barrier_decrement:          		\n"
+                  "ll   %0,     0(%1)           		\n"
+                  "addi $3,     %0,     -1      		\n"
+                  "sc   $3,     0(%1)           		\n"
+                  "beqz $3,     _barrier_decrement		\n"
+                  :"=&r"(count)
+                  :"r"(pcount)
+                  :"$2","$3");
+
+    // the last task re-initializes the barrier_ count variable
+    // and the barrier_lock variable, waking up all other waiting tasks
+
+    if ( count == 1 ) 	 // last task
+    {
+        _barrier_count[index] = _barrier_value[index];
+        asm volatile( "sync" );
+        _barrier_lock[index]   = (lock == 0) ? 1 : 0;
+    }
+    else 		// other tasks
+    {
+        while ( lock == _barrier_lock[index] ) 	asm volatile("nop");
+    }
+} 
+
+
+// Local Variables:
+// tab-width: 4;
+// c-basic-offset: 4;
+// c-file-offsets:((innamespace . 0)(inline-open . 0));
+// indent-tabs-mode: nil;
+// End:
+//
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/giet_tsar/stdio.h
===================================================================
--- /branches/fault_tolerance/softs/giet_tsar/stdio.h	(revision 724)
+++ /branches/fault_tolerance/softs/giet_tsar/stdio.h	(revision 724)
@@ -0,0 +1,137 @@
+////////////////////////////////////////////////////////////////////////////////////////
+// File : stdio.h
+// Written by Alain Greiner 
+// Date : 17/01/2014
+//
+// This file define varions functions that can be used by applications to access
+// peripherals, or other ressources such as processor registers, spin_locks
+// or synchronisation barriers.
+// It is dedicated for the TSAR multi-processors multi_clusters architecture.
+// There is NO separation between application code and system code.
+// This basic GIET does not use the virtual memory, and does nort support multi-tasking.
+//
+//The supported peripherals are:
+//- the SoClib multi_tty
+//- The SoCLib frame_buffer
+//- The SoCLib block_device
+//
+//The following parameters must be defined in the hard_config.h file.
+//- X_SIZE          : number of clusters in a row
+//- Y_SIZE          : number of clusters in a column
+//- X_WIDTH         : number of bits for X field in proc_id
+//- Y_WIDTH         : number of bits for Y field in proc_id
+//- NB_PROCS_MAX    : max number of processor per cluster
+//- NB_TTY_CHANNELS : max number of TTY channels
+//
+//The follobing base addresses must be defined in the ldscript
+//- seg_tty_base
+//- seg_fbf_base
+//- seg_ioc_base
+////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _GIET_STDIO_H_
+#define _GIET_STDIO_H_
+
+#include "tty.h"
+#include "block_device.h"
+#include "hard_config.h"
+#include <stdarg.h>
+
+typedef unsigned int    size_t;
+
+// global variables defined in stdio.c
+
+extern  int volatile	_ioc_lock;
+extern  int volatile	_ioc_done;
+extern  int volatile	_ioc_status;
+
+extern  char volatile	_tty_get_buf[];
+extern  int volatile	_tty_get_full[];
+
+extern int volatile     _barrier_value[];
+extern int volatile     _barrier_count[];
+extern int volatile     _barrier_lock[];
+
+extern int volatile     _spin_lock[];
+
+// functions defined in stdio.c
+
+void*           _memcpy( void* dst, const void* src, size_t size );
+
+void            _extended_memcpy( unsigned int dst_cluster,
+                                  unsigned int dst_address,
+                                  unsigned int src_cluster,
+                                  unsigned int src_address,
+                                  unsigned int length );
+unsigned int 	_procid();
+unsigned int 	_proctime();
+unsigned int 	_procnumber();
+
+unsigned int    _rand();
+
+void            _it_mask();
+void            _it_enable();
+
+void            _dcache_buf_invalidate( const void* buffer, size_t size );
+
+void            _exit();
+
+void            _itoa_dec( unsigned int val, char* buf );
+void            _itoa_hex( unsigned int val, char* buf );
+
+int             _tty_write( char* buffer, size_t length, size_t channel );
+int             _tty_read( char* buffer, size_t channel );
+void            _tty_puts( char* string );
+void            _tty_putd( unsigned int val );
+void            _tty_putx( unsigned int val );
+void            _tty_get_lock( size_t channel );
+void            _tty_release_lock( size_t channel );
+void            _tty_getc( char* buffer );
+void            _tty_getw( unsigned int* buffer );
+void            _tty_printf( char* format, ... );
+void            _tty_isr();
+
+void            _ioc_get_lock();
+void            _ioc_write( size_t lba, void* buffer, size_t count, size_t ext );
+void            _ioc_read (size_t lba, void* buffer, size_t count, size_t ext );
+void            _ioc_completed();
+void            _ioc_isr();
+
+void            _mmc_isr();
+
+void            _fb_sync_write( unsigned int offset, 
+                                unsigned int buffer,
+                                unsigned int length,
+                                unsigned int ext );
+void            _fb_sync_read(  unsigned int offset, 
+                                unsigned int buffer,
+                                unsigned int length,
+                                unsigned int ext );
+
+void            _release_lock( size_t lock_index );
+void            _get_lock( size_t lock_index );
+
+void            _barrier_init(size_t index, size_t count);
+void            _barrier_wait(size_t index);
+
+unsigned char   _byte_extended_read(  unsigned int   cluster, 
+                                      unsigned int   address );
+unsigned int    _word_extended_read(  unsigned int   cluster, 
+                                      unsigned int   address );
+void            _word_extended_write( unsigned int   cluster, 
+                                      unsigned int   address, 
+                                      unsigned int   word );
+void            _byte_extended_write( unsigned int   cluster, 
+                                      unsigned int   address, 
+                                      unsigned char  byte );
+#endif
+
+// Local Variables:
+// tab-width: 4;
+// c-basic-offset: 4;
+// c-file-offsets:((innamespace . 0)(inline-open . 0));
+// indent-tabs-mode: nil;
+// End:
+//
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/giet_tsar/tty.h
===================================================================
--- /branches/fault_tolerance/softs/giet_tsar/tty.h	(revision 724)
+++ /branches/fault_tolerance/softs/giet_tsar/tty.h	(revision 724)
@@ -0,0 +1,23 @@
+#ifndef TTY_REGS_H
+#define TTY_REGS_H
+
+enum SoclibTtyRegisters {
+    TTY_WRITE   = 0,
+    TTY_STATUS  = 1,
+    TTY_READ    = 2,
+    TTY_CONFIG  = 3,
+    /**/
+    TTY_SPAN    = 4,
+};
+
+#endif
+
+// Local Variables:
+// tab-width: 4;
+// c-basic-offset: 4;
+// c-file-offsets:((innamespace . 0)(inline-open . 0));
+// indent-tabs-mode: nil;
+// End:
+//
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/soft_filter_giet/Makefile
===================================================================
--- /branches/fault_tolerance/softs/soft_filter_giet/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/soft_filter_giet/Makefile	(revision 724)
@@ -0,0 +1,47 @@
+
+LD = mipsel-unknown-elf-ld
+CC = mipsel-unknown-elf-gcc
+AS = mipsel-unknown-elf-as
+DU = mipsel-unknown-elf-objdump
+
+OBJS = reset.o \
+	giet.o \
+	isr.o \
+	drivers.o \
+	stdio.o \
+	main.o
+
+CFLAGS = -Wall -g -mno-gpopt -ffreestanding -fomit-frame-pointer -mips32 -ggdb
+
+GIET =	../giet_tsar
+
+bin.soft: $(OBJS) ldscript
+	$(LD) -o $@ -T ldscript $(OBJS)
+	$(DU) -D $@ > $@.txt
+
+reset.o: $(GIET)/reset.s
+	$(AS) -g -mips32 -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+giet.o: $(GIET)/giet.s
+	$(AS) -g -mips32 -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+isr.o: $(GIET)/isr.c
+	$(CC) $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+stdio.o: $(GIET)/stdio.c
+	$(CC) $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+drivers.o: $(GIET)/drivers.c
+	$(CC) $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+main.o: main.c
+	$(CC) $(CFLAGS) -I$(GIET) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+clean:
+	rm -f *.o bin.soft *.txt core *~ proc* term* temp
Index: /branches/fault_tolerance/softs/soft_filter_giet/ldscript
===================================================================
--- /branches/fault_tolerance/softs/soft_filter_giet/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/soft_filter_giet/ldscript	(revision 724)
@@ -0,0 +1,90 @@
+/**********************************************************
+	File : ldscript 
+	Author : Alain Greiner
+	Date : March 2011  
+**********************************************************/
+
+/* definition of various hardware parameters.
+These variables are referenced in the drivers.c file,
+and must be defined, even if the corresponding
+peripherals are not present in the architecture */
+
+NB_CLUSTERS = 4;		/* number of clusters */
+NB_PROCS    = 4;		/* number of processors per cluster */
+NB_TASKS    = 1;		/* number of tasks per processor */
+NB_TIMERS   = 1;		/* max number of timers per processor */
+NB_LOCKS    = 8;		/* number of spin_locks */
+
+/* definition of the base address for all segments 
+The peripherals base addresses are referenced by the
+software drivers and must be defined, even if the 
+peripherals are not present in the architecture */
+
+seg_code_base   = 0x00000000;       /* le code utilisateur */ 
+seg_data_base   = 0x00100000;       /* les données utilisateur */
+
+seg_heap_base   = 0x00300000;       /* le tas utilisateur */
+seg_stack_base  = 0x00800000;       /* la pile utilisateur */
+
+seg_kcode_base  = 0x80000000;       /* le code du système */
+seg_kdata_base  = 0x80100000;       /* les donnees du système */
+seg_kunc_base   = 0x80200000;       /* les données non cachées du système */
+
+seg_icu_base    = 0x00F00000;       /* controleur ICU */
+seg_tty_base    = 0xBFF20000;       /* controleur TTY */
+seg_dma_base    = 0x00F30000;       /* controleur DMA */
+
+seg_reset_base  = 0xBFC00000;       /* le code de boot */
+seg_fb_base     = 0xBFD00000;       /* controleur FRAME BUFFER */
+seg_ioc_base    = 0xBFF10000;       /* controleur I/O */
+
+seg_timer_base  = 0x00F0000;       /* controleur TIMER */
+seg_gcd_base    = 0xBFF50000;       /* controleur GCD */
+
+/* Grouping sections into segments */
+
+SECTIONS
+{
+   . = seg_kcode_base;
+   seg_kcode : {
+      *(.giet)
+      *(.switch)
+      *(.drivers)
+      *(.isr)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.kdata)
+   } 
+   . = seg_kunc_base;
+   seg_kunc : {
+      *(.unckdata)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.ksave)
+   } 
+   . = seg_code_base;
+   seg_code : {
+      *(.text)
+   } 
+   . = seg_reset_base;
+   seg_reset : {
+      *(.reset)
+   } 
+   . = seg_data_base;
+   seg_data : {
+      *(.rodata)
+      . = ALIGN(4);
+      *(.rodata.*)
+      . = ALIGN(4);
+      *(.data)
+      . = ALIGN(4);
+      *(.sdata)
+      . = ALIGN(4);
+      *(.bss)
+      *(COMMON)
+      *(.sbss)
+   } 
+}
+
Index: /branches/fault_tolerance/softs/soft_filter_giet/main.c
===================================================================
--- /branches/fault_tolerance/softs/soft_filter_giet/main.c	(revision 724)
+++ /branches/fault_tolerance/softs/soft_filter_giet/main.c	(revision 724)
@@ -0,0 +1,631 @@
+
+#include "limits.h"
+#include "stdio.h"
+
+#include "../giet_tsar/block_device.h"
+
+////////////////////////////////////
+// Image parameters
+
+#define NB_CLUSTER_MAX 256
+#define PIXEL_SIZE     2
+#define NL             1024
+#define NP             1024
+
+#define NB_PIXELS      ((NP) * (NL))
+#define FRAME_SIZE     ((NB_PIXELS) * (PIXEL_SIZE))
+
+#define PRINTF(...)      ({ if (proc_id == 0) { tty_printf(__VA_ARGS__); } })
+
+#define TA(c,l,p)  (A[c][((NP) * (l)) + (p)])
+#define TB(c,p,l)  (B[c][((NL) * (p)) + (l)])
+#define TC(c,l,p)  (C[c][((NP) * (l)) + (p)])
+#define TD(c,l,p)  (D[c][((NP) * (l)) + (p)])
+#define TZ(c,l,p)  (Z[c][((NP) * (l)) + (p)])
+
+#define max(x,y) ((x) > (y) ? (x) : (y))
+#define min(x,y) ((x) < (y) ? (x) : (y))
+
+///////////////////////////////////////////
+// tricks to read parameters from ldscript
+///////////////////////////////////////////
+
+struct plaf;
+
+extern struct plouf seg_ioc_base;
+extern struct plaf seg_heap_base;
+extern struct plaf NB_PROCS;
+extern struct plaf NB_CLUSTERS;
+
+
+// Required when initializing an array all at once
+static void *memcpy(void *_dst, const void *_src, unsigned int size){
+   unsigned int *dst = _dst;
+   const unsigned int *src = _src;
+   if (! ((unsigned int)dst & 3) && ! ((unsigned int)src & 3)){
+      while (size > 3){
+         *dst++ = *src++;
+         size -= 4;
+      }
+   }
+
+   unsigned char *cdst = (unsigned char*)dst;
+   unsigned char *csrc = (unsigned char*)src;
+
+   while (size--){
+      *cdst++ = *csrc++;
+   }
+   return _dst;
+}
+
+
+
+
+
+
+
+
+void main(){
+
+   //////////////////////////////////
+   // convolution kernel parameters
+   // The content of this section is
+   // Philips proprietary information.
+   ///////////////////////////////////
+
+   int   vnorm  = 115;
+   int   vf[35] = { 1, 1, 2, 2, 2,
+                    2, 3, 3, 3, 4,
+                    4, 4, 4, 5, 5,
+                    5, 5, 5, 5, 5,
+                    5, 5, 4, 4, 4,
+                    4, 3, 3, 3, 2,
+                    2, 2, 2, 1, 1 };
+
+   int hrange = 100;
+   int hnorm  = 201;
+
+   unsigned int date = 0;
+
+   int c; // cluster index for loops
+   int l; // line index for loops
+   int p; // pixel index for loops
+   int x; // filter index for loops
+
+   const unsigned int proc_id       = procid();                      // processor id
+   const unsigned int nlocal_procs  = (int) &NB_PROCS;               // number of processors per cluster
+   const unsigned int nclusters     = (int) &NB_CLUSTERS;            // number of clusters
+   const unsigned int local_id      = proc_id % nlocal_procs;        // local task id
+   const unsigned int cluster_id    = proc_id / nlocal_procs;        // cluster task id
+   const unsigned int base          = (unsigned int) &seg_heap_base; // base address for shared buffers
+   const unsigned int increment     = 0x80000000 / nclusters * 2;    // cluster increment
+   const unsigned int nglobal_procs = nclusters * nlocal_procs;      // number of tasks
+   const unsigned int npixels       = NB_PIXELS;                     // Number of pixel per frame
+   const unsigned int frame_size    = FRAME_SIZE;                    // Size of 1 frame (in bytes)
+   const unsigned int * ioc_address = (unsigned int *) &seg_ioc_base;
+   const unsigned int block_size    = ioc_address[BLOCK_DEVICE_BLOCK_SIZE];
+   const unsigned int nblocks       = frame_size / block_size;       // number of blocks per frame
+
+   const unsigned int lines_per_task     = NL / nglobal_procs; // number of lines per task
+   const unsigned int lines_per_cluster  = NL / nclusters;     // number of lines per cluster
+   const unsigned int pixels_per_task    = NP / nglobal_procs; // number of columns per task
+   const unsigned int pixels_per_cluster = NP / nclusters;     // number of columns per cluster
+
+   int first, last;
+
+   PRINTF("\n*** Processor %d entering main at cycle %d ***\n\n", proc_id, proctime());
+
+
+   /////////////////////////
+   // parameters checking //
+   /////////////////////////
+   
+
+   if ((nlocal_procs != 1) && (nlocal_procs != 2) && (nlocal_procs != 4)){
+      PRINTF("NB_PROCS must be 1, 2 or 4\n");
+      exit();
+   }
+
+   ////////////////////////////////////////////////////////////////////////
+   // Warning: NB_CLUSTERS must be at least 4 because of the heap size;  //
+   //          if there are less clusters, the heap mixes with the stack //
+   //          (the total heap size must be at least 0x01000000)         //
+   ////////////////////////////////////////////////////////////////////////
+   if ((nclusters !=  4) && (nclusters !=  8) && (nclusters != 16) && 
+         (nclusters != 32) && (nclusters != 64) && (nclusters !=128) && (nclusters != 256)){
+      PRINTF("NB_CLUSTERS must be a power of 2 between 4 and 256\n");
+      exit();
+   }
+
+   if (proc_id >= nglobal_procs){
+      PRINTF("processor id %d larger than NB_CLUSTERS*NB_PROCS\n", proc_id);
+      exit();
+   }
+
+   if (NL % nclusters != 0){
+      PRINTF("NB_CLUSTERS must be a divider of NL");
+      exit();
+   }
+
+   if (NP % nclusters != 0){
+      PRINTF("NB_CLUSTERS must be a divider of NP");
+      exit();
+   }
+
+
+   // Arrays of pointers on the shared, distributed buffers  
+   // containing the images (sized for the worst case : 256 clusters)
+   unsigned short * A[NB_CLUSTER_MAX];
+   int *            B[NB_CLUSTER_MAX];
+   int *            C[NB_CLUSTER_MAX];
+   int *            D[NB_CLUSTER_MAX];
+   unsigned char *  Z[NB_CLUSTER_MAX];
+
+   // Arrays of pointers on the instrumentation arrays
+   // These arrays are indexed by the cluster index (sized for the worst case : 256 clusters)
+   // each pointer points on the base adress of an array of 4 (NPROCS max) unsigned int
+   unsigned int * LOAD_START[NB_CLUSTER_MAX];
+   unsigned int * LOAD_END[NB_CLUSTER_MAX];
+   unsigned int * VERT_START[NB_CLUSTER_MAX];
+   unsigned int * VERT_END[NB_CLUSTER_MAX];
+   unsigned int * HORI_START[NB_CLUSTER_MAX];
+   unsigned int * HORI_END[NB_CLUSTER_MAX];
+   unsigned int * DISP_START[NB_CLUSTER_MAX];
+   unsigned int * DISP_END[NB_CLUSTER_MAX];
+
+   // The shared, distributed buffers addresses are computed
+   // from the seg_heap_base value defined in the ldscript file
+   // and from the cluster increment = 4Gbytes/nclusters.
+   // These arrays of pointers are identical and
+   // replicated in the stack of each task 
+   for (c = 0; c < nclusters; c++){
+      unsigned int offset = base + increment * c;
+      A[c] = (unsigned short *) (offset);
+      B[c] = (int *)            (offset + frame_size * 1 / nclusters); // We increment by 2 * frame_size
+      C[c] = (int *)            (offset + frame_size * 3 / nclusters); // because sizeof(int) = 2*sizeof(short)
+      D[c] = (int *)            (offset + frame_size * 5 / nclusters); // so an array of frame_size elements of type
+      Z[c] = (unsigned char *)  (offset + frame_size * 7 / nclusters); // int can contain the equivalent of 2 frames
+
+      offset = base + increment * c + frame_size * 8 / nclusters;
+      LOAD_START[c] = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 0);
+      LOAD_END[c]   = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 1);
+      VERT_START[c] = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 2);
+      VERT_END[c]   = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 3);
+      HORI_START[c] = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 4);
+      HORI_END[c]   = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 5);
+      DISP_START[c] = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 6);
+      DISP_END[c]   = (unsigned int *) (offset + nlocal_procs * sizeof(unsigned int) * 7);
+   }
+
+   PRINTF("NB_CLUSTERS     = %d\n", nclusters); 
+   PRINTF("NB_LOCAL_PROCS  = %d\n", nlocal_procs); 
+   PRINTF("NB_GLOBAL_PROCS = %d\n", nglobal_procs);
+   PRINTF("NB_PIXELS       = %d\n", npixels);
+   PRINTF("PIXEL_SIZE      = %d\n", PIXEL_SIZE);
+   PRINTF("FRAME_SIZE      = %d\n", frame_size);
+   PRINTF("BLOCK_SIZE      = %d\n", block_size);
+   PRINTF("NB_BLOCKS       = %d\n\n", nblocks);
+
+
+   PRINTF("*** Starting barrier init at cycle %d ***\n", proctime());
+
+   //  barriers initialization
+   barrier_init(0, nglobal_procs);
+   barrier_init(1, nglobal_procs);
+   barrier_init(2, nglobal_procs);
+   barrier_init(3, nglobal_procs);
+
+   PRINTF("*** Completing barrier init at cycle %d ***\n", proctime());
+
+
+   ////////////////////////////////////////////////////////
+   // pseudo parallel load from disk to A[c] buffers
+   // only task running on processor with (local_id==0) does it
+   // nblocks/nclusters are loaded in each cluster
+   ////////////////////////////////////////////////////////
+
+   if (local_id == 0){
+      int p;
+      date  = proctime();
+      PRINTF("\n*** Starting load at cycle %d\n", date);
+      for (p = 0; p < nlocal_procs; p++){
+         LOAD_START[cluster_id][p] = date;
+      }
+
+      if (ioc_read(nblocks*cluster_id/nclusters, A[cluster_id], nblocks/nclusters)){
+         PRINTF("echec ioc_read\n");
+         exit(1);
+      }
+      if (ioc_completed()){
+         PRINTF("echec ioc_completed\n");
+         exit(1);
+      }
+
+      date  = proctime();
+      PRINTF("*** Completing load at cycle %d\n", date);
+      for (p = 0; p < nlocal_procs; p++){
+         LOAD_END[cluster_id][p] = date;
+      }
+   }
+
+   barrier_wait(0);
+
+
+   ////////////////////////////////////////////////////////
+   // parallel horizontal filter : 
+   // B <= transpose(FH(A))
+   // D <= A - FH(A)
+   // Each task computes (NL/nglobal_procs) lines 
+   // The image must be extended :
+   // if (z<0)    TA(cluster_id,l,z) == TA(cluster_id,l,0)
+   // if (z>NP-1) TA(cluster_id,l,z) == TA(cluster_id,l,NP-1)
+   ////////////////////////////////////////////////////////
+
+   date  = proctime();
+   PRINTF("\n*** Starting horizontal filter at cycle %d\n", date);
+   HORI_START[cluster_id][local_id] = date;
+
+   // l = absolute line index / p = absolute pixel index  
+   // first & last define which lines are handled by a given task(cluster_id,local_id)
+
+   first = (cluster_id * nlocal_procs + local_id) * lines_per_task;
+   last  = first + lines_per_task;
+
+   for (l = first; l < last; l++){
+      // src_c and src_l are the cluster index and the line index for A & D
+      int src_c = l / lines_per_cluster;
+      int src_l = l % lines_per_cluster;
+
+      // We use the specific values of the horizontal ep-filter for optimisation:
+      // sum(p) = sum(p-1) + TA[p+hrange] - TA[p-hrange-1]
+      // To minimize the number of tests, the loop on pixels is split in three domains 
+
+      int sum_p = (hrange + 2) * TA(src_c, src_l, 0);
+      for (x = 1; x < hrange; x++){
+         sum_p = sum_p + TA(src_c, src_l, x);
+      }
+
+      // first domain : from 0 to hrange
+      for (p = 0; p < hrange + 1; p++){
+         // dst_c and dst_p are the cluster index and the pixel index for B
+         int dst_c = p / pixels_per_cluster;
+         int dst_p = p % pixels_per_cluster;
+         sum_p = sum_p + (int) TA(src_c, src_l, p + hrange) - (int) TA(src_c, src_l, 0);
+         TB(dst_c, dst_p, l) = sum_p / hnorm;
+         TD(src_c, src_l, p) = (int) TA(src_c, src_l, p) - sum_p / hnorm;
+      }
+      // second domain : from (hrange+1) to (NP-hrange-1)
+      for (p = hrange + 1; p < NP - hrange; p++){
+         // dst_c and dst_p are the cluster index and the pixel index for B
+         int dst_c = p / pixels_per_cluster;
+         int dst_p = p % pixels_per_cluster;
+         sum_p = sum_p + (int) TA(src_c, src_l, p + hrange) - (int) TA(src_c, src_l, p - hrange - 1);
+         TB(dst_c, dst_p, l) = sum_p / hnorm;
+         TD(src_c, src_l, p) = (int) TA(src_c, src_l, p) - sum_p / hnorm;
+      }
+      // third domain : from (NP-hrange) to (NP-1)
+      for (p = NP - hrange; p < NP; p++){
+         // dst_c and dst_p are the cluster index and the pixel index for B
+         int dst_c = p / pixels_per_cluster;
+         int dst_p = p % pixels_per_cluster;
+         sum_p = sum_p + (int) TA(src_c, src_l, NP - 1) - (int) TA(src_c, src_l, p - hrange - 1);
+         TB(dst_c, dst_p, l) = sum_p / hnorm;
+         TD(src_c, src_l, p) = (int) TA(src_c, src_l, p) - sum_p / hnorm;
+      }
+
+      PRINTF(" - line %d computed at cycle %d\n", l, proctime());
+   }
+
+   date  = proctime();
+   PRINTF("*** Completing horizontal filter at cycle %d\n", date);
+   HORI_END[cluster_id][local_id] = date;
+
+   barrier_wait(1);
+
+
+   //////////////////////////////////////////////////////////
+   // parallel vertical filter : 
+   // C <= transpose(FV(B))
+   // Each task computes (NP/nglobal_procs) columns
+   // The image must be extended :
+   // if (l<0)    TB(cluster_id,p,x) == TB(cluster_id,p,0)
+   // if (l>NL-1)   TB(cluster_id,p,x) == TB(cluster_id,p,NL-1)
+   //////////////////////////////////////////////////////////
+
+   date  = proctime();
+   PRINTF("\n*** starting vertical filter at cycle %d\n", date);
+   VERT_START[cluster_id][local_id] = date;
+
+   // l = absolute line index / p = absolute pixel index
+   // first & last define which pixels are handled by a given task(cluster_id,local_id)
+
+   first = (cluster_id * nlocal_procs + local_id) * pixels_per_task;
+   last  = first + pixels_per_task;
+
+   for (p = first; p < last; p++){
+      // src_c and src_p are the cluster index and the pixel index for B
+      int src_c = p / pixels_per_cluster;
+      int src_p = p % pixels_per_cluster;
+
+      int sum_l;
+
+      // We use the specific values of the vertical ep-filter
+      // To minimize the number of tests, the NL lines are split in three domains 
+
+      // first domain : explicit computation for the first 18 values
+      for (l = 0; l < 18; l++){
+         // dst_c and dst_l are the cluster index and the line index for C
+         int dst_c = l / lines_per_cluster;
+         int dst_l = l % lines_per_cluster;
+
+         for (x = 0, sum_l = 0; x < 35; x++){
+            sum_l = sum_l + vf[x] * TB(src_c, src_p, max(l - 17 + x,0) );
+         }
+         TC(dst_c, dst_l, p) = sum_l / vnorm;
+      }
+      // second domain
+      for (l = 18; l < NL - 17; l++){
+         // dst_c and dst_l are the cluster index and the line index for C
+         int dst_c = l / lines_per_cluster;
+         int dst_l = l % lines_per_cluster;
+
+         sum_l = sum_l + TB(src_c, src_p, l + 4)
+            + TB(src_c, src_p, l + 8)
+            + TB(src_c, src_p, l + 11)
+            + TB(src_c, src_p, l + 15)
+            + TB(src_c, src_p, l + 17)
+            - TB(src_c, src_p, l - 5)
+            - TB(src_c, src_p, l - 9)
+            - TB(src_c, src_p, l - 12)
+            - TB(src_c, src_p, l - 16)
+            - TB(src_c, src_p, l - 18);
+         TC(dst_c, dst_l, p) = sum_l / vnorm;
+      }
+      // third domain
+      for (l = NL - 17; l < NL; l++){
+         // dst_c and dst_l are the cluster index and the line index for C
+         int dst_c = l / lines_per_cluster;
+         int dst_l = l % lines_per_cluster;
+
+         sum_l = sum_l + TB(src_c, src_p, min(l + 4, NL - 1))
+            + TB(src_c, src_p, min(l + 8, NL - 1))
+            + TB(src_c, src_p, min(l + 11, NL - 1))
+            + TB(src_c, src_p, min(l + 15, NL - 1))
+            + TB(src_c, src_p, min(l + 17, NL - 1))
+            - TB(src_c, src_p, l - 5)
+            - TB(src_c, src_p, l - 9)
+            - TB(src_c, src_p, l - 12)
+            - TB(src_c, src_p, l - 16)
+            - TB(src_c, src_p, l - 18);
+         TC(dst_c, dst_l, p) = sum_l / vnorm;
+      }
+      PRINTF(" - column %d computed at cycle %d\n", p, proctime());
+   }
+
+   date  = proctime();
+   PRINTF("*** Completing vertical filter at cycle %d\n", date);
+   VERT_END[cluster_id][local_id] = date;
+
+   barrier_wait(2);
+
+
+   ////////////////////////////////////////////////////////////////
+   // final computation and parallel display 
+   // Z <= D + C
+   // Each processor use its private DMA channel to display 
+   // the resulting image, line  per line (one byte per pixel).
+   // Eah processor computes & displays (NL/nglobal_procs) lines. 
+   ////////////////////////////////////////////////////////////////
+
+   date  = proctime();
+   PRINTF("\n*** Starting display at cycle %d\n", date);
+   DISP_START[cluster_id][local_id] = date;
+
+   first = local_id * lines_per_task;
+   last  = first + lines_per_task;
+
+   for (l = first; l < last; l++){
+      for (p = 0; p < NP; p++){
+         TZ(cluster_id,l,p) = (unsigned char) (((TD(cluster_id,l,p) + TC(cluster_id,l,p)) >> 8) & 0xFF);
+      }
+      fb_write(NP * (cluster_id * lines_per_cluster + l), &TZ(cluster_id,l,0), NP);
+   }
+
+   date  = proctime();
+   PRINTF("*** Completing display at cycle %d\n", date);
+   DISP_END[cluster_id][local_id] = date;
+
+   barrier_wait(3);
+
+   
+   /////////////////////////////////////////////////////////
+   // Instrumentation (done by processor 0 in cluster 0)   
+   /////////////////////////////////////////////////////////
+
+   if (proc_id == 0){
+      date  = proctime();
+      PRINTF("\n*** Starting Instrumentation at cycle %d\n\n", date);
+
+      int cc, pp;
+      unsigned int min_load_start = INT_MAX;
+      unsigned int max_load_start = 0;
+      unsigned int min_load_ended = INT_MAX;
+      unsigned int max_load_ended = 0;
+
+      unsigned int min_hori_start = INT_MAX;
+      unsigned int max_hori_start = 0;
+      unsigned int min_hori_ended = INT_MAX;
+      unsigned int max_hori_ended = 0;
+
+      unsigned int min_vert_start = INT_MAX;
+      unsigned int max_vert_start = 0;
+      unsigned int min_vert_ended = INT_MAX;
+      unsigned int max_vert_ended = 0;
+
+      unsigned int min_disp_start = INT_MAX;
+      unsigned int max_disp_start = 0;
+      unsigned int min_disp_ended = INT_MAX;
+      unsigned int max_disp_ended = 0;
+
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++ ){
+            if (LOAD_START[cc][pp] < min_load_start){
+               min_load_start = LOAD_START[cc][pp];
+            }
+            if (LOAD_START[cc][pp] > max_load_start){
+               max_load_start = LOAD_START[cc][pp];
+            }
+            if (LOAD_END[cc][pp] < min_load_ended){
+               min_load_ended = LOAD_END[cc][pp];
+            }
+            if (LOAD_END[cc][pp] > max_load_ended){
+               max_load_ended = LOAD_END[cc][pp];
+            }
+
+            if (HORI_START[cc][pp] < min_hori_start){
+               min_hori_start = HORI_START[cc][pp];
+            }
+            if (HORI_START[cc][pp] > max_hori_start){
+               max_hori_start = HORI_START[cc][pp];
+            }
+            if (HORI_END[cc][pp] < min_hori_ended){
+               min_hori_ended = HORI_END[cc][pp];
+            }
+            if (HORI_END[cc][pp] > max_hori_ended){
+               max_hori_ended = HORI_END[cc][pp];
+            }
+
+            if (VERT_START[cc][pp] < min_vert_start){
+               min_vert_start = VERT_START[cc][pp];
+            }
+            if (VERT_START[cc][pp] > max_vert_start){
+               max_vert_start = VERT_START[cc][pp];
+            }
+            if (VERT_END[cc][pp] < min_vert_ended){
+               min_vert_ended = VERT_END[cc][pp];
+            }
+            if (VERT_END[cc][pp] > max_vert_ended){
+               max_vert_ended = VERT_END[cc][pp];
+            }
+
+            if (DISP_START[cc][pp] < min_disp_start){
+               min_disp_start = DISP_START[cc][pp];
+            }
+            if (DISP_START[cc][pp] > max_disp_start){
+               max_disp_start = DISP_START[cc][pp];
+            }
+            if (DISP_END[cc][pp] < min_disp_ended){
+               min_disp_ended = DISP_END[cc][pp];
+            }
+            if (DISP_END[cc][pp] > max_disp_ended){
+               max_disp_ended = DISP_END[cc][pp];
+            }
+         }
+      }
+      PRINTF(" - LOAD_START : min = %d / max = %d / med = %d / delta = %d\n",
+            min_load_start, max_load_start, (min_load_start+max_load_start) / 2, max_load_start-min_load_start);
+      PRINTF(" - LOAD_END   : min = %d / max = %d / med = %d / delta = %d\n",
+            min_load_ended, max_load_ended, (min_load_ended+max_load_ended) / 2, max_load_ended-min_load_ended);
+
+      PRINTF(" - HORI_START : min = %d / max = %d / med = %d / delta = %d\n",
+            min_hori_start, max_hori_start, (min_hori_start+max_hori_start) / 2, max_hori_start-min_hori_start);
+      PRINTF(" - HORI_END   : min = %d / max = %d / med = %d / delta = %d\n",
+            min_hori_ended, max_hori_ended, (min_hori_ended+max_hori_ended) / 2, max_hori_ended-min_hori_ended);
+
+      PRINTF(" - VERT_START : min = %d / max = %d / med = %d / delta = %d\n",
+            min_vert_start, max_vert_start, (min_vert_start+max_vert_start) / 2, max_vert_start-min_vert_start);
+      PRINTF(" - VERT_END   : min = %d / max = %d / med = %d / delta = %d\n",
+            min_vert_ended, max_vert_ended, (min_vert_ended+max_vert_ended) / 2, max_vert_ended-min_vert_ended);
+
+      PRINTF(" - DISP_START : min = %d / max = %d / med = %d / delta = %d\n",
+            min_disp_start, max_disp_start, (min_disp_start+max_disp_start) / 2, max_disp_start-min_disp_start);
+      PRINTF(" - DISP_END   : min = %d / max = %d / med = %d / delta = %d\n",
+            min_disp_ended, max_disp_ended, (min_disp_ended+max_disp_ended) / 2, max_disp_ended-min_disp_ended);
+
+      PRINTF(" - BARRIER LOAD/HORI = %d\n", min_hori_start - max_load_ended);
+      PRINTF(" - BARRIER HORI/VERT = %d\n", min_vert_start - max_hori_ended);
+      PRINTF(" - BARRIER VERT/DISP = %d\n", min_disp_start - max_vert_ended);
+
+      PRINTF(" - LOAD              = %d\n", max_load_ended);
+      PRINTF(" - FILTER            = %d\n", max_vert_ended - max_load_ended);
+      PRINTF(" - DISPLAY           = %d\n", max_disp_ended - max_vert_ended);
+
+      PRINTF("\nBEGIN LOAD_START\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, LOAD_START[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+
+      PRINTF("\nBEGIN LOAD_END\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, LOAD_END[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+
+      PRINTF("\nBEGIN HORI_START\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, HORI_START[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+
+      PRINTF("\nBEGIN HORI_END\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, HORI_END[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+
+      PRINTF("\nBEGIN VERT_START\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, VERT_START[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+
+      PRINTF("\nBEGIN VERT_END\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++ ){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, VERT_END[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+
+      PRINTF("\nBEGIN DISP_START\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, DISP_START[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+
+      PRINTF("\nBEGIN DISP_END\n");
+      for (cc = 0; cc < nclusters; cc++){
+         for (pp = 0; pp < nlocal_procs; pp++){
+            PRINTF("cluster= %d proc= %d date= %d\n", cc, pp, DISP_END[cc][pp]);  
+         }
+      }
+      PRINTF("END\n");
+   }
+
+   while(1);
+
+} // end main()
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
+
+
Index: /branches/fault_tolerance/softs/soft_filter_giet/philips_image.raw
===================================================================
--- /branches/fault_tolerance/softs/soft_filter_giet/philips_image.raw	(revision 724)
+++ /branches/fault_tolerance/softs/soft_filter_giet/philips_image.raw	(revision 724)
@@ -0,0 +1,55839 @@
+           
+            
+ 
+                      
+                        
+ 
+                  
+                                             
+                                                          
+                                                                                                                                                                                                                                                                               
+                                                                                                                                                                                                                                           
+                                          
+ 
+                                                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                                                                 
+                    
+                                
+                                                           
+   
+                           
+ 
+ 
+                                            
+                                      
+                                              
+             
+   
+                                                           
+                                          
+ 
+                                                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+            
+                          
+        
+    
+                                               
+             
+   
+             
+         
+              
+               
+        
+                  
+   
+   
+       
+        
+ 
+            
+       
+       
+   
+                               
+   
+  
+ 
+   
+       
+               
+ 
+  
+        
+                  
+                                    
+                                       
+         
+            
+       
+    
+       
+             
+ 
+                                                        
+                                  
+                                                                                                                      
+                                      
+                                                                                                                                                                                                           
+                                                                                   
+        
+                
+   
+ 
+                                   
+  
+ 
+                                                              
+     
+                               
+         
+       
+            
+        
+    
+ 
+                        
+                                     
+ 
+  
+        
+                       
+                     
+ 
+ 
+      
+                  
+               
+              
+          
+                     
+  
+ 
+  
+          
+                                                                                            
+                                                                                                                                                               
+                                                                                                                                                                                                                                                                                                        
+                                                                           
+                                                                                             
+                                                                                                            
+                                                                                                                                              
+                                                                                                                                                                                                              
+                                         
+             
+                                                                                                                                                                                                                                                                                                                                                                                                          
+                                                                                                                                                                                                                      
+                                                                                                                                                                                                                                                                                                                   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+                                                                                                                                                                                        
+                                                                                                              
+  
+ 
+  	                                   
+                    
+                                                                                                   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                   
+                
+   
+ 
+                                                                                                                                                                                                                                                                                                                                       
+                                                                                                                                 
+                                                                                                                      
+                           
+                                                                                                                                                                                                                                                                                                                          
+   
+                                         
+                            
+                                                      
+                                                                                                                                                                                                                                                  
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                                                                
+          
+                                            
+     
+                             
+ 
+   
+   
+           
+ 
+                                                     
+      
+  
+                                                                                                                                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+                                                                          
+                                
+                      
+                                                                  
+                  
+                   
+        
+ 
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                            
+                                                                                                                                                                                                                                                                                                        
+                                                                                                                                             
+                                                                
+                                   
+ 
+                        
+  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                                                                                                   
+ 
+                                             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
+                    
+    
+           
+                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+ 
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+      
+     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+       
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
+                                  
+                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+                    
+                          
+ 
+       
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                                                                  
+   
+ 
+        
+           
+            
+               
+ 
+     
+ 
+                                          
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+                                                           
+              
+                    
+                          
+              
+ 
+       
+     
+               
+        
+       
+          
+    
+                
+    
+           
+                                                
+        
+              
+                
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+                                                                                           
+         
+                    
+    
+              
+    
+                          
+  
+   
+        
+     
+   
+  
+    
+       
+             
+    
+          
+ 
+      
+        
+      
+ 
+      
+  
+                                  
+ 
+                                                      
+                                                                                                                 
+                                                                                                                                                                                                                                                                                                                           
+                                                                
+                                                                    
+                                          
+                 
+                                                 
+ 
+     
+         
+            
+    
+                               
+ 
+   
+                   
+       
+  
+            
+     
+  
+ 
+                     
+ 
+    
+         
+     
+    
+   
+      
+                
+     
+        
+       
+  
+      
+   
+          
+                                                                     
+                                                                          
+             
+                                                                               
+                            
+                                                                                                                                                                                                                                                        
+      
+                                                                                                         
+              
+                                                
+     
+                                                           
+          
+      
+                    
+  
+ 
+ 
+       
+    
+ 
+  
+     
+         
+ 
+                               
+  
+     
+              
+ 
+             
+       
+           
+           
+            
+     
+     
+        
+            
+                                                               
+                                
+                                                                                                                                                 
+                    
+                                                                                                                                             
+                           
+                                      
+                              
+                                                                                                         
+                                        
+            
+     
+                  
+                   
+                                                       
+                                  
+ 
+          
+      
+       
+ 
+                            
+                  
+     
+          
+  
+           
+ 
+         
+ 
+ 
+       
+   
+ 
+   
+     
+     
+           
+  
+               
+         
+              
+                                              
+                                                                                                                                                                                 
+                                                                                                                                                                                     
+                   
+                     
+                          
+                
+ 
+                                                               
+                                          
+                              
+                     
+                                        
+                  
+      
+                  
+                     
+              
+                         
+ 
+     
+     
+      
+ 
+         
+ 
+                           
+    
+                     
+   
+ 
+   
+     
+                 
+                      
+                    
+          
+ 
+   
+                                   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                            
+           
+    
+       
+                                                                      
+ 
+                         
+           
+                                
+                 
+      
+       
+         
+ 
+    
+                                                                                            
+ 
+        
+                      
+                                                                                         
+      
+                                                                                             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+                                                                                                                                                                                              
+ 
+                               
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                                                                  
+         
+           
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+             
+                                                 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+                              
+ 
+               
+ 
+  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+                              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+                                                                 
+ 
+                   
+            
+   
+             
+  
+                  
+   
+            
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                                                                                                                                                           
+        
+                               
+    
+                          
+       
+     
+            
+                                
+                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+           
+                     
+                              
+      
+                                                           
+                  
+          
+ 
+                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                                                   
+                                                                                                         
+       
+            
+    
+           
+   
+       
+               
+            
+ 
+         
+ 
+  
+            
+                                                                            
+     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                              
+ 
+                                  
+          
+   
+                  
+           
+              
+    
+ 
+              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                                            
+    
+      
+         
+                      
+          
+                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                           
+                                            
+ 
+                       
+                           
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+       
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+         
+                                                                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                    
+                                                         
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
+                
+                  
+                                         
+                  
+             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+   
+  
+      
+    
+                        
+              
+                          
+  
+                
+          
+ 
+                                
+     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+                                                                                                                                                                                                                               
+          
+  
+ 
+        
+     
+       
+        
+      
+   
+    
+      
+    
+  
+    
+      
+  
+ 
+ 
+                                  
+                             
+               
+                   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+                                            
+        
+                            
+         
+    
+ 
+  
+     
+      
+  
+          
+       
+  
+    
+ 
+   
+ 
+   
+       
+ 
+  
+          
+  
+ 
+                      
+        
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                                                                                                                                                                                                                                                           
+           
+                                                                    
+                           
+  
+  
+ 
+   
+    
+      
+       
+    
+    
+         
+    
+    
+      
+ 
+ 
+  
+        
+ 
+ 
+     
+ 
+    
+ 
+ 
+ 
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+ 
+ 
+           
+    
+ 
+        
+ 
+     
+               
+           
+ 
+  
+       
+   
+   
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+   
+       
+ 
+       
+ 
+  
+     
+     
+                      
+    
+                    
+ 
+ 
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+ 
+ 
+          
+ 
+  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+       
+     
+         
+   
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+ 
+              
+                                 
+             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+                                                        
+  
+ 
+    
+                                                        
+ 
+                              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+    
+                      
+                          
+                                 
+                           
+                                
+        
+   
+    
+    
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+                 
+                     
+   
+           
+       
+    
+          
+  
+   
+  
+                                   
+     
+                  
+                                                                        
+ 
+                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                               
+                                                                                                                                                                                                 
+                                                   
+  
+    
+        
+     
+    
+   
+            
+         
+    
+    
+        
+        
+          
+     
+ 
+     
+            
+ 
+       
+  
+      
+ 
+       
+      
+   
+ 
+    
+                                         
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                                                          
+                                                   
+ 
+                                                   
+    
+      
+          
+    
+                              
+    
+     
+ 
+ 
+         
+            
+ 
+  
+     
+  
+ 
+   
+ 
+ 
+ 
+        
+ 
+    
+  
+         
+     
+           
+  
+   
+  
+ 
+           
+    
+   
+ 
+ 
+ 
+ 
+           
+          
+   
+                 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+                                    
+  
+  
+                               
+                      
+ 
+                       
+    
+  
+      
+ 
+              
+ 
+         
+ 
+ 
+  
+      
+           
+    
+     
+ 
+     
+   
+    
+ 
+  
+                           
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+ 
+      
+           
+          
+ 
+     
+           
+            
+   
+    
+          
+  
+                
+   
+   
+   
+ 
+       
+  
+ 
+     
+ 
+  
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+        
+ 
+                           
+                                   
+      
+      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+                              
+                       
+ 
+                 
+     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+               
+                   
+   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+                                                                                                                                                                                                                                                                                                                                                                 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+           
+                             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                                
+   
+ 
+                
+                                                                                                                                                                                                                                                                                                                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                             
+                       
+  
+  
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+                                    
+ 
+                  
+    
+ 
+ 
+            
+   
+ 
+ 
+ 
+   
+       
+      
+ 
+    
+   
+ 
+ 
+ 
+  
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                           
+    
+ 
+            
+ 
+       
+   
+   
+   
+            
+     
+ 
+  
+  
+   
+ 
+  
+ 
+ 
+      
+       
+    
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
+                 
+    
+    
+  
+ 
+   
+ 
+ 
+             
+  
+               
+            
+   
+  
+   
+ 
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                            
+                
+ 
+     
+            
+  
+      
+ 
+                               
+ 
+ 
+       
+                
+   
+    
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+                   
+              
+ 
+                         
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                                          
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+             
+                                                                                                  
+                                                                                                                                                                                                                                                                                                                                                                    
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+                                     
+                             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                                          
+                                 
+                           
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+        
+                                                                                                                                                                                                                                                                                
+                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+                                            
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                              
+       
+                 
+       
+    
+    
+    
+                       
+            
+                                                                                                                                                                                                                                                                               
+                                      
+                                                     
+                         
+                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+    
+     
+ 
+      
+ 
+            
+    
+             
+   
+    
+   
+                                                             
+                                                                                                                                                                                                                                                                                                                                                                                         
+                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+ 
+        
+ 
+ 
+                  
+       
+ 
+     
+   
+      
+  
+  
+   
+ 
+      
+ 
+   
+ 
+ 
+    
+ 
+ 
+                                                                                                                                                                                                                                                             
+                                       
+ 
+              
+         
+                                                       
+                                            
+   
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+      
+ 
+ 
+             
+ 
+     
+   
+ 
+ 
+   
+   
+       
+  
+ 
+  
+ 
+   
+ 
+   
+ 
+ 
+       
+ 
+ 
+                                                                                                                    
+  
+      
+         
+             
+                   
+ 
+    
+     
+      
+  
+ 
+                             
+             
+     
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+     
+ 
+      
+        
+  
+ 
+         
+ 
+       
+      
+    
+      
+        
+     
+                
+               
+     
+     
+                     
+                                                  
+          
+           
+                                         
+                                                                                                                                                                                                                                                                                                                                                        
+                                                    
+           
+ 
+ 
+ 
+    
+  
+     
+    
+ 
+    
+     
+   
+     
+     
+ 
+   
+  
+ 
+ 
+ 
+   
+ 
+    
+ 
+ 
+       
+ 
+ 
+                                                                                                        
+       
+ 
+ 
+   #     
+  ! 
+     
+  ! 
+ 
+   ! 
+ ! 
+       
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   ! " 
+    
+ 
+ " 
+    
+        "   
+   !  
+ 
+ ! !     !    % #         ! 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+ !  
+   
+  
+ 
+  
+ 
+ 
+ 
+        !   
+ 
+ 
+ 
+ 
+ 
+    #  # ! # & ( " 
+   
+ $ $    
+  
+ "   
+ 
+ 
+ 
+ !      
+ 
+   ! ! 
+ ! ! 
+ 
+ !  " 
+  
+  
+   
+     
+ 
+   
+ 
+ 
+  
+  
+  
+ 
+   
+   
+   
+ 
+   
+     
+ 
+   
+  
+     
+  
+   
+   
+  
+   
+ 
+ 
+      
+  
+    ! ! 
+           
+ 
+   
+ 
+  
+        
+ 
+     
+ ! 
+ 
+ 
+  
+ 
+       
+  
+ ! 
+    
+   
+ 
+ 
+ 
+ 
+   
+   
+ 
+ 
+      
+   
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+                
+          
+   
+    
+   
+     
+          
+      
+      
+    
+       
+ 
+             
+              
+                                                                                                  
+                                                                                                                                                                                                                                           
+         
+   
+         
+               
+ 
+                     
+          
+       
+ 
+ 
+                                                                                                         
+  
+  
+   
+ $ " ( ' ' $ ! # $ $ $ " $ $ ( % ! & $ $ % ) ' $ ' # ! $ $ ' ) ) " & & # % ' $ % & # % % $ $ ) ' ! # $ $ $ & % ' $ $ "  & ) ) ' , % ' , ) # # $ # $ ! " $ # !    # # # $     ! ! # ( " $ % % $ % $ % # # ! # " $ % # % $ # " $ ' ( ) ' $ ' & % ' ( ( ( ' & ' * + + ' * * ' ) & # ' $ " ( ( ( % & ( $ & & ) ' # $ & & " ' " $ $ ) ( ( ( % % % $ # & # $ % $ " 
+   # # ! #     " # ! # # 
+ ! $   # " ! " " % " % ! " " 
+ 
+ 
+ 
+ % $ ! !    " "   
+ 
+    
+ 
+   
+ 
+ ! # "     ! 
+  
+   ! "          ! " " " $ ! !      !   ! 
+ 
+ 
+ !   !  
+  " 
+ 
+    
+  $ % "  
+ 
+ # " ! " 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+     "   
+ ! 
+  ! "  ! 
+   
+ 
+  "   !   ! " ! " # " " 
+   ! 
+   # #  
+ ! ! " 
+ 
+      
+  
+ 
+ 
+ 
+ 
+ 
+      !   
+ 
+ 
+ 
+ 
+ 
+ 
+  !   
+  # ! 
+   
+   
+ 
+ 
+ 
+  
+   
+ "   
+ 
+ 
+ 
+ 
+    
+ ! !   
+ 
+ 
+    
+ 
+    
+ !  !   ! 
+ ! !  
+ 
+   !  
+ 
+  
+   
+ 
+ 
+ 
+ 
+  
+  " 
+      
+  
+       
+ 
+ 
+ 
+    
+ 
+  
+                      
+               
+ 
+ 
+    
+            
+                
+  
+ 
+      
+  
+                                                                 
+                                                                                                                                                       
+ 
+                                      
+                                              
+ 
+  
+                                                                                                     
+   
+ ! # % $ ! # ! & & ) , , + - + , * + ' ) * - 1 , + , + ( ) , . , + , * ( , ) + , + + - + ) . ) + & ' % ( * + , ) * & % $ ' - + + + * ' ' . . * * 3 . ) , * ) & ( ) ' , , , ) & * ( ( ' * * ' + ' ( & + ) & & ( ( $ . ) ' ' ' % ) ( + * ) ( , ) ( , ' , + - , . , / - 1 4 0 - - 4 1 , / . / 7 4 1 / 0 * - * / . / . + 0 0 . , . 0 - * 0 , * 3 4 2 - - 3 5 6 + * , , , 0 . , , + * & ( ' + ' + + / , - * / + ( ( ) * , - - ' ) , + , + ' + ' ( * ) ' ) & & % ( ' & ( $ # & ) ' % $ & ( ( & % & & ' ' ) & ' ) % % $ % ' ( + & $ % ) ) $ & " $ % $ ' ' % % $ ' ( % $ % ( * ( $ % % % & ' ) ( + ' % ( ) , - ) & $ & $ & & $ & ( & $ % * # ) ' & ( " ) ' ) & * + ) , + ) * ) + & ) + + * * * * $ ( & * * ) * + ' ' + * % $ ( ( ' ' $ # ' % ( & " $ % ' ( % ( ( ) & , & ' # % # & ' $ % ) ( - # ' $ ( ) " & & & & % ' & $ ' $ $ " # ' " ) % % ! % $ % $ ! ' $ $ ' * ( & ' ) ' % $ " " % # $ " # & % % # " % % ! 
+ $ & ! % & & ' ' $ # 
+ 
+    " $ # !     " $ ! " 
+   
+ # " "    $ # # " " ! 
+  " # " " # 
+ ! #       
+ 
+ 
+ 
+ 
+ 
+     ! 
+    
+ ! $ % ! ! 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    $   
+ 
+ 
+   
+ 
+ ! #       
+ 
+   " !  !     
+ 
+ " "     
+ ! 
+ 
+  
+    
+ 
+ 
+   
+ 
+       !      
+  
+  
+ 
+ 
+  
+  !    
+  
+ 
+ 
+ 
+ 
+   
+ 
+  
+    
+   
+  
+ 
+  
+ 
+    
+     
+                    ! 
+   
+  
+ 
+     
+             
+                                                                                                                                                                                
+         
+  
+             
+      
+                 
+                                                                 
+ 
+ 
+ # % # ( ) ' # % ( - - / 1 1 3 5 0 / / 0 / 5 7 5 7 3 2 4 0 1 1 0 / 1 / / 1 0 . . / 0 * / , . , , ) + * . + 0 1 / 1 0 5 / ) - - 3 7 3 / / * / 1 6 0 3 / . - ) & * - 1 / 1 / - , 2 , - , - . 1 / + + / + ) ( ) % % + / / 1 0 * - , + / - 0 5 1 + - . 1 6 6 6 5 2 3 / 1 7 3 2 4 7 9 7 3 8 4 8 = 4 4 6 7 3 6 8 7 4 5 8 ; 5 5 ; 5 9 7 9 = ; 8 9 6 9 < < 3 9 7 6 : < 5 6 : 9 8 6 8 9 7 9 6 1 0 0 0 5 : 3 4 8 1 2 2 3 1 . . 5 0 1 3 5 4 1 , . 6 2 , / - 1 2 / 0 3 3 3 / . - * * , - . 1 0 3 - / 0 3 2 . - 0 1 0 . 0 / 7 . 0 0 , / 1 / . / 1 . 0 1 , - 1 1 / 0 3 3 . 3 4 / + - 4 1 3 / 3 / / / 0 2 3 1 / 5 / 1 2 - - , / , 3 3 2 4 / 4 3 + , ) ) 0 2 - . / 1 7 / / 2 1 3 7 1 3 5 8 7 3 / . 3 6 / 0 0 0 / 3 3 3 1 4 2 + 0 / 2 1 5 / / . 0 3 2 * - , / , . 0 0 1 2 1 5 1 - 6 5 0 3 1 3 - , / 3 - - 3 . + + ' - ' * - - + - , - / * , , + + 0 - . + * ( - / 0 2 + 2 , - * / 2 4 / 4 . ( ) * . ) / + + - + , . / + ( ) ( ( 0 * * ) * ( - + + * % ) ' ' - * * ( & ) + $ ( , ) & ) ' % + , & ' * , ( , + , $ ' ) - - ' * ' ) ) & ) ' % ! # $ $ & ( % $ & & ' $   $ & * 0 ) % " % & % & & & % # & ( ( + ( ( $ $ % ( & ' ) ( $ % * % ( ( % % ! ' ' ) $ * ) ( ' ' & ) ( % ' ( "   # " % $ " # % $ ( % & % % & $ ) ( ' * , # ' # # $ # ' % % ! & ' # # $ * % & # $ % " % " $ % ' % ! # " "   ! ! $ " 
+ "   " 
+ !  ! 
+ 
+ 
+ " # !     !     ! "   ! ! $ ! 
+  
+ 
+ " $ 
+     
+      
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+  
+ 
+ 
+      
+    
+  
+     
+ 
+    
+         
+ 
+      
+  
+ 
+    
+ 
+       
+ 
+     
+ 
+               
+                                                                                                                                                                                                             
+ 
+ # & % & ! ( ' - * * 0 9 4 1 8 5 2 6 7 7 8 9 9 7 8 8 8 8 8 ; = 6 9 7 7 7 2 1 0 6 3 2 5 4 0 1 1 2 0 . 3 0 1 5 3 2 7 8 4 8 2 0 2 1 4 6 6 ; : 5 3 7 5 4 0 1 4 2 2 / 0 / 0 5 3 1 0 / / 4 4 3 + / 7 6 1 1 0 3 0 + 6 2 ( / 2 6 1 . 5 4 7 7 4 2 , 1 7 5 3 3 1 0 7 > 9 ; > 9 6 7 < < : 9 @ ? ? ; ? C ; > 9 9 7 ? 5 8 8 ; = = : A 8 9 > @ D A A C @ G D > F B ? @ E = C @ E < C E C C D B > 9 @ > @ A ; > C H = ; ; 9 C < 9 9 2 6 5 A ; < > = 9 5 > A ; : : 9 6 ; 9 7 8 = B 7 3 4 5 6 7 < 7 5 8 8 9 < @ 8 7 5 < : 4 ; 9 8 : 8 8 ; ; 9 8 : = 8 : ; 9 7 < 8 9 ; 5 5 7 ; : 6 > F : ; 8 < < < : < 9 9 ; ? = : 8 8 < 8 : 8 ; 5 3 8 4 C = ? : ; 9 4 5 0 . 4 5 5 : 7 3 7 @ @ C : < 9 B 9 @ < @ @ C < ; : = B A : = C > ; ? ? ; 7 : : 6 > : ; 7 8 @ = > 9 7 > : ; : ; < ; 8 ; < @ < 7 9 = > ? > ? : 8 5 8 9 9 5 7 8 5 5 6 8 ; 9 9 8 6 6 ; ? ? 9 6 3 < 7 6 2 5 9 7 6 5 ; : ; 7 : = 8 < 9 9 9 8 2 7 7 : 3 3 : 7 2 7 7 3 5 7 7 4 2 1 3 7 7 3 1 7 3 8 7 5 1 4 / . 0 4 1 + , - 2 3 . 0 4 2 0 0 / + 2 1 9 1 3 1 5 7 3 4 3 3 2 . 0 2 1 , 2 2 3 0 2 , + ) / / + 2 1 1 + - . , . , / 3 6 2 , / , + * , / 2 1 1 0 3 - 5 1 1 1 * / 1 , / 4 1 / 6 2 / 1 - 1 1 0 - 2 / 1 2 0 6 . - - 1 . / 3 2 * . / , 1 1 2 . . 0 1 5 0 , . , + , 3 1 0 4 1 0 0 + + , 0 / 0 . 0 - / + - + 1 - + ) - , 0 + - , ( + * , ) ( & ) & # ) % # & " ' $ % ' % " " ' # ( % $ $ ' ) # % " # ) & % & % $ ) % % * . ' # $ $ % ' ) $ $ $ $ ! %   # ! # $   ! $ ! 
+  # " $ !  # 
+   # # # 
+   !   % ! ! # $ # " !  "    !    # ! !   " !   
+ "     $ # #   $ !     $ ! 
+     !   
+  " ! #   "   
+ !   
+  
+ 
+ 
+ 
+ 
+   "      
+ 
+                                                                              
+                                                                                                                     
+    
+   % $ ' , ( , / - 4 1 5 5 6 3 < 8 2 9 9 9 7 > = < < 8 9 ? > > ? E > A C = 9 : ? = ? 9 8 ; 7 : 9 7 7 8 : 8 9 7 9 2 : = ? < 7 4 4 5 9 ; @ C = @ ? : 9 ? 8 0 7 7 4 ; 9 7 1 3 4 5 5 7 9 5 9 4 2 3 4 3 7 6 1 4 1 6 7 4 - 4 1 : 3 / 4 7 7 4 < 8 8 4 ; : 9 8 = > = ; : = = C F A @ A C I C H G F ? F @ ? > = C F D D C E D M @ G D C I L I F O N M S O I P J S O K G L L G P O G F G J K B E @ @ C J E A C K E D P C F H > A ? @ = G I F D ? D D H I F C @ C L F C @ A C F = @ = @ C A E E < C F @ C A B B D D @ > B B G A @ C F E @ < A C : D G F J I C A G @ = ? A A B J M F @ C A D E ? E B A G I I D @ B G B D D @ D @ = > E > D E F ? > ? = = B A @ B D H G L M O I H B J F H K M E H S I L E F H K D L L J H H K E I E D I E D E D C ? F E C E D A ? = B D D C F G F < B L G C @ H E ? B B A ? ; A @ D < = C A : < @ C F H F J H ? < @ @ > ? B A E F F ? > A B > B < D H A D = 9 A A F ? B @ D > A ; = B = ? ? < ; ; = 9 9 C ; : ? > : > = 9 = < ? ; 7 6 6 ; < : ; ; 8 < < 9 8 ; 8 ? < > ; ? < < = = ? < 8 8 ; < 9 5 : < 7 6 5 9 9 < 8 7 8 6 5 9 6 4 8 6 4 9 ; < ? 9 4 7 0 2 7 9 8 8 A > 7 7 9 8 > = 9 9 5 4 7 ; 7 5 < A < 8 8 8 8 5 7 7 6 6 6 = = ? 9 5 9 8 4 6 : 7 7 < 4 9 8 ? : 7 ; = 6 5 7 7 5 2 4 6 5 5 9 9 7 8 3 2 7 9 < ; 5 ; ; 6 3 2 : : 4 0 6 7 6 9 ; < . - 4 - / 1 - ) + / ' + + , ( ' + * + - * - , 0 - 4 5 ) , + - + 1 0 / / , , 2 1 , . , * , / * / * ( ) , . + , ' / ( + % & ) * , , ( ) ) & ) & $ ( * % ( & ' ( ' ' # $ % ) & ' $ , % ( $ " ( % % ( # ! & ( ' ( # % ( $   $ ( % ) $ % $ ) ' ) $ & * ' # ! ' & $ # ! # % & # ' % & % # ! ! " ( ! % " " % # % ) % ! ! 
+  
+                                                                                                                      
+                                                                            
+ 
+ " ' * ) , ) * 1 3 8 5 4 7 > D > B = ? A > ; > C G A F A D > > A D H ? < B G C A @ @ ? > A B = 9 ; < 8 @ < = D > @ = 7 > < ? = ? @ > B C A F : > ? ; : @ A 9 = : < : ; @ : < 5 A : 9 8 : @ : : 9 8 : < 7 7 8 ; 4 4 7 : 4 8 = < 5 = < ? < 9 B B ? < 9 B A ? B = ? ? C D G C P D J I I G G G K G I K I H C F L M M R R R T M T M K U R N P S W Y ] Z X _ X V X U S T V ^ ^ Y T [ V N S Q T N O P P N O J L G L P P K O J H J I C H Q R R R S M M P M J J K R J J Q I K L K L K O E E L K I F I I O P L J M N H I G K J K P P L O H K G I K U X R Q N P O N L M N O J O P M S Q O P K J L L O T W O N N Q P O O M L J J M F K Q M M M K K K A J K I J U U X W R [ \ ] T X S Y P T P O Q [ X Q W X ] Y X O Q T R S N R S T T U Q R R K K G J M I N P N L F A Q N K K F M S L M O S P K M H G K C K L G N E G F L L H G B D M R P S O L E I J H I H K O L L L G I E L I I I M K N K K I Q M S K S M I N E I H J J G B J D A K F H G F @ E J C B A < E @ = = A = = ? E D M G @ @ C @ @ B ? @ A C B A D E @ > B E C G F A B < H A A A C ; A = ? A B = < ; : ? ? B = > ; @ C C B ? 8 : ; < < C J I D C D ? B A C J A = ; C C @ B B E D E E A @ > B B I @ A B G F @ B B > > = < = = A ; ? E > @ I ? > @ @ < 9 : : = > D @ ? C F @ A F A G H E B > ; : @ B B : 4 = A ; > 9 ; 9 9 = 1 . 1 0 4 1 - ) + , + ) 0 1 2 0 4 / 2 4 5 5 5 8 4 4 0 4 4 3 4 3 3 1 2 4 3 7 0 2 3 8 / . 3 5 + 1 0 1 - - / 1 1 / / 0 5 1 7 . / - / 0 0 - - + / ) + . 0 . + * ( , - - + , * , . / * % ( - * + ' , , - - , ) ) ) , ) ) . / - ) + & - ) ' * . * + ( ( , & ( & ' ' ( / ( ) ( & * * ( ( + + ) ' + - * ) & % ) % % # " "                                                                                                                                                                                                  
+    $ ' & ' / / 4 5 3 ; 8 6 9 B F H D B G C G C F C C D G G G @ F L H K D B @ E J J J H A E L A ? ; = ? @ @ B A E A C D @ A ? E F C H H B A D G @ > B A > > B = > ; ; C G D ? D < = ? B < ? @ @ > = 9 < = < < 8 ? ; < = 8 ; : > B B ? > ? C A D B E E A F F E D ? H H C J J M O L Q Q M K H J O T T O S P W P V P T R T X X V Y S Y ] \ X S _ d h b a a _ ` b _ d _ ] [ _ b ] Z \ \ T T Y W [ V ] X U Y W T S [ Z Z Y T X W R X P Q Y U Z Z Y W U S Y V T W X Q O T S P V R P O Q T O U O O K Q S W ` X U Q U S V [ R O Z T S O Q Y S S [ X U ^ \ [ W U S Z U Y ] ] N S \ V W Z V V R Z _ V R R T W W U Y \ ^ W Y S S Q T V N T Q R T T U X U W R Z [ ] ] a a [ \ g _ a ^ [ c Z \ ] ] b a b Z ] \ d c _ \ b b d _ Z _ c _ b ` ] ` ] P Q T U Y P W V W T P P W S U T W W ` U S S \ P S Y R Q X N P X P Q N S N R Y X U R Q V S W ] X O J X N H P Y S P N P Y P P R S S U M Q X [ Y U V ] P V S T V V _ K P U S T T Q S U V R S M N Q N O P H G G H N C G M M E D M L K P K F E I J I A F I N L F F J G I H G H N T W N C A E F D L K F L F B C K G H B C H A G E G E E E G D L D E E E J M O S M M R H I K H M N J P L H J L K N D K L I F C J P I H N M H E I G D H I D G K H I D E H E D J H I C I @ H E D L I L K E K L O O K I Q R L J I @ F F D J E C D F A A 8 = 9 < 9 1 1 2 3 8 3 1 7 9 5 6 3 7 7 6 6 7 9 : 7 : > < = A @ : : < 9 : 6 5 2 3 5 8 9 < 6 1 ; 9 6 : : 4 8 8 4 4 7 9 = : 7 7 4 : ? 5 8 7 5 / 4 2 0 2 1 3 2 / . 5 5 2 1 + 0 2 2 1 5 4 4 1 6 1 ( . - , / 0 0 - / 0 0 . + ) 2 . 0 1 / 3 . 0 0 0 0 / / + , - 4 1 / + , 0 - / 0 1 . 0 0 ) , . / , - 0 3 / / 0 , * + - ) ) + * % ' # 
+ 
+                                                                                                                                                                                              
+ 
+   $ ' + - 3 , 4 5 : ? > = B E H K O I O L Q K N J E F P M I N G Q K M L K E F M F G M F C B ? F A K I G H H D H > G G D J I K M O Q O D C F C B G C D @ A > A @ @ @ B > ? ? F A @ D D C A @ C ? A @ A ; ; A @ = : < @ ; : @ ? E C E ? C G I F D G I M J L H K L I M K O M Q V S V Y T S R T O W T R W V Y Z O M Z T _ ^ W Y ^ _ e e ` b c m g d m r p i e h h h j g u p a f g d ` g _ \ \ Z ] [ ^ d [ b [ _ b V X \ a b _ ] _ [ f e \ ^ ] c ] [ c g f c _ Y \ ] Z Z W ^ g ^ ^ Y U Y [ Y a [ [ ^ X a Y c \ X T ] _ b b g _ V Z [ _ _ Y \ \ Z b \ Y ^ Y [ [ \ Y [ Z W \ b b ` d c c d f d ` ] W ^ f c b a h _ ^ T [ ] [ Y \ R V Y e X X Y X b a ` _ i c c j q g a h e n j f e e c d e k i e q j c b f c ] f f j j c _ c j f e i ` h W R W a f X ` ] c b ^ ^ [ X ] [ b \ \ b [ ] [ [ \ c b d [ X U _ X Z Y X Y _ _ _ X [ ^ \ ] X ^ U Z Y ] V U S a ^ X U ] X X ^ d ^ _ Y [ ^ c b ` g ] _ [ a ^ _ Y T \ _ Y U V U T [ ^ c \ Z X S \ U [ \ W R P U S S H M R Z Q R X R Q V W M S M P M M R M Q O T S P Q Q Q M O T Y Z X V M K H K Q V O U T T P T L J R K M O L K J K O P M K K M E F J P S O Y Y W T L O L N T [ S U V T T W R P N R X Q Q S S \ P T R W L I J Q L T U L T Y R R R P J J U T V S N L K R J L V K S P J N O S X U Q O X Q K M Q R K H I H @ A C A > 9 8 3 9 9 4 3 4 4 5 9 ? > @ = @ = = ; 8 8 @ D E B A A C A ? @ ; < 9 : E ? : ; 9 ? ? = > < ; @ = = ? = : 8 < > @ B A > > C ? = 9 A @ A : ; 9 9 9 9 3 : ; 7 6 5 : < 6 8 5 9 6 3 7 : 6 9 4 6 9 5 . 0 1 2 9 2 0 0 3 5 5 1 / 5 6 5 . 0 / 2 6 8 2 6 2 4 4 6 2 : : 0 3 2 1 6 8 4 / - 1 / + / / 4 , , . . + 0 / 1 0 1 2 , * . + ( ) % ! 
+                                               
+                                                                                                                                                " % ( & , 1 1 4 7 9 ; ; ? B D H J O P Q S S S W O Q O M K I K M O N K K L O G I I K G K I H I G J J I O K H E D F G F F H L O H Q K R T N R I H E L N I F B A D C A G J H B ? I L B J J L E I G E E H E C A @ < C A A D < A B = = F H J L L H P Q O O P U R T U R O S R ` Y ^ ] Z U X X Y ] \ W W ] a _ g _ b [ ` b \ c k c ` m i r p u m m n j q y ~ { t t u z t x p s r t r l h j l i n j ` b k l j h c j m h e [ c i c c e d d g m g f f k ` c i e s p j a j _ l h a g j k d g c ^ _ a k d e c c _ a g h d d g g i d l j g e f g _ _ h h c a ` ` g e a g c c d a i o k b f ` i k i j d ^ e ` f r o r j h f c d X f c b ` c e d m k e d f n p m f o r k q u y m u t z v t o o u o v s u s ~ u l l s k d l o q n e h s r k c h j p l \ d i i e d h l n h f ` ^ c _ i g d n d c h _ ^ m o l i c _ e l j c ^ a a f h _ g e f j _ e ^ e e b a e c c j m f f \ Y d f _ i b g i b ] c l i ` d k g e d c \ a g \ ^ ] f c a l ` c e a c ] ` b Z \ a _ [ Z X X [ \ V ] W Y Z \ \ W \ U U U X W T U Z ] Y Z ^ Z T S [ W X ^ X ] Z \ [ Y b _ Y W V W W Z X S X Q U V W X S T T U T N J M S J L S a R P S X [ U \ ] X [ Y T T \ [ U Z V W W \ d ^ ` U Y Y Y X W ^ Z V R O V _ ] _ b _ [ _ [ [ P N R Y W W T V S \ Z W \ Z W X V Q X W a \ W W X W W U \ Y N E H B 7 ; 6 6 = 9 2 5 3 3 4 4 3 9 > = @ B C @ @ ? 8 4 7 9 < C H B B C G A I D > @ A E F C @ B A F J F E I C D C D H F D < E B E F C E A C = @ < ? @ B > @ B C @ > > A C : : C ? ; < : 8 = > ; @ < < 8 9 7 9 < 5 9 7 : = 9 2 5 3 6 4 2 6 : ; 5 0 3 3 : B : 9 9 8 4 6 = ; : : 4 3 8 2 8 ; 9 : 1 6 5 1 2 4 5 8 6 4 3 6 9 7 6 = 8 2 / , 1 1 1 * ' #                                                                                                                                                                                               
+   ' * - 4 5 6 = 9 < = D I J H H K M V W V U S P R Q O T P U W Q W Y Q K L L L U P R Q K J M K L I K G K M N O J P K T V K N O M T N Q M O J H M K H K E G C I J K J H I N N J N L G M Q N J H G H L Q K I K C = C J E F J O I F I N I S S R P Z Q M S [ S X X W W Y V [ [ [ d g ] b b X Z ] \ f e ] f e h l g m i d i l g n r x w w {  x t  ~  |     y      ~   y u v u y y z o l o s p s m t u u r k r p d g j o n p n p l o n o o l w z s s k n p t n l m w q h i i e g q k l j j m i g k q h o o q p l r l o p j o f d j o k e m j u r k i q k i u u q r s j f l n l l h j i i j u r p s j h h g d s s o h i s m m z x l u q p m r {  |  { q  z  
+ 
+ 
+     { y   z  x x { n o s y v x r w | w r v y t u m m k u q z r q q q m p j g h g j g t r u n m m m s v w n j m w y o j j f k p l e h b k c n n k j n m n v j i s t m g g l x o m l m y o n g k m g j j m j m g g m h k j l n l l h l g l i s m s i k g d j j k \ b d c d _ a f d c d c a Y \ [ e _ d b _ h f a e _ ] j d c a _ h h f ` k f c i a b [ Y g d i a X T W Z Y _ ^ Q V Y V ^ ] W W [ P T \ ` T W Y \ a b f b e f b Z T _ a a _ \ e ] _ b b f c ] ] ` ] ^ ^ ` ` a \ ] d c d d e a ] ` ` X W Z c [ Y X ] a d ` ^ _ b \ c g _ d a ` a a ` Z X X T O J B A A B 8 < : ; = A = 8 8 ; < 9 9 : < F H C D E < C = 8 < B E K V M M L O D K I D G E J N J K J G J M N F I I I I P Q J L C G F C B C D I B G > B H D C B = D G C @ E E @ A A C C > ? A A ; B A @ A > < ? = : : < ; 7 < @ < ; ; > < @ @ : ? ; 7 2 7 7 ; A > : 8 9 : 8 ? = < > 7 6 ; < = > = ? 4 : < : 7 3 8 ; 8 6 8 7 7 8 8 7 ; : 6 2 1 7 4 0 * , ! 
+                     
+                                    
+   
+                                 
+                                                                                               
+ " $ + - 4 6 4 : ; > B D L M L J L M X S W V ^ V [ W [ Y [ [ X V [ ` Z T M S T R R W R S T V S V U R N M L R P U T V R Q W O W T Q O U R G L L M M S G C K H G H G N Q H I H O O P P F G X P P E J T H L H Q Q H G J I H F K R M N S P Q Q X T W ` W M Y _ ] ^ [ [ ] a b f i f b ` _ i f b _ h d m n d m l h n m q l p n u q r z } z z u y w           } w }    
+   
+          { x } }  
+ { u  x z ~ t q { | v y y u w s z ~   v u q v y v x o s u u v ~ r x } w u p y y ~ x x w t o u w w z u u m y { z | p w r x  u o p v s p p w t t m r w  | t p t s v ~ z w r u } u t ~ u w s q o v r n n l k t n p t p r u u { {   
+ 
+   }                   { } z z x {   
+    
+ 
+   v w y z v |   z u { t u z p n o s } } w v v { } x { }  x | }  | s w w z x x s w r x | o p u z y p s y { r x t p n w w | y u u y  w |  u s o r x y y q o t v p z x q u w p h p p w s m i k m l k i s l g a l p j o g o n n o i p j h d ] j a j h j j j d k r k f h f f i i n m d e o o n k k k j m k h l i \ [ \ [ b ] [ _ \ a a _ [ ^ ^ ` b p j a k d a i j h k s n g ] a i l g f m p b f ` d f i k k j n _ ] i g n k a g i c c g k k b f j g i e b \ c f o j g e a j h k m q h g _ a c _ X Z U P H ? C < = C @ ; B ? ; D A < ; ? @ @ = C D J L P Q O L O M I L O Q O [ X V N T M K F K Q L O X X O T U O R U V R I D P O Q Q O J H D H L K ? H L J J J E F > ? B H J E C I E A C B I K I C G E I B G I F > A @ > @ ? D = 9 < = = @ C D F ? > ; @ @ ? > ? < ? = ; 9 ; > A A B = C < ; 7 < > 6 < @ A < : @ ; 7 9 ; : > = ? < 6 5 9 < < : = : 9 : 3 . * ' " "                   
+                                             
+                
+                                                                                                            
+  $ ' + 2 5 2 ; > @ G B K P Q J P S S \ ] [ _ a ^ V Y _ ] h _ Y ] X Z U K T U R P R R P Y ` T R W ` X W N Q M R V P Y W R R Z W S O P Q M M M I K R I H K M J J H M K N K R Q P K M D H Q O Q O L N I J D G K K L N J H J L M O T V V Z W T X \ _ Y W ] ` ` \ ] ` \ b h i l d i k i f q m h e g m o q u n p o q m l v | } w y { | |  
+  }                        
+ 
+               ~ ~  t  
+  ~ z  v u  ~        y  t } |  }  t } |   u { u | z  x |   } x z  y 
+  |   }  { z ~  } } } w { { { ~ q } } {  }   
+ ~    {    |    
+ ~ y x y z  { q t | s z { z   x              
+                
+      
+                 x w y } }  } w z t v x x } y  |    ~  { } z ~ } ~     |  z ~ v r { x w  w } { z r y s | z |  z      
+    z r z   y | y     y x  y s } y   u t y u r z t  y t k { w q w n w u s s o n k g j k m c e m v o k j p q t g h o j f l s s m g r r m v x n x w t q p j i ] d o n j c d i r g ` _ c g f k r j j k i j j n | u m u v u i y s t j l r x s j j m s j j r x k e m n w q g r r k j o k k i m l l n k k m m u x v x l k k q u u r h p k Z d [ R T M K C C F A G G D F K G B J M I L F K M Q M I L R X _ T M M R V T T Z X ` Z _ S V X Y U [ Z _ Y W T U W Z U Q W X T Q K T T T M O K M J P S R J O P R S J L I I J N G F M I G F I G J E N J E H F H B J K N C E @ A C C ? > < B C ; C H F H ? B F J K @ C B B = ? H > ; B I I ? > C A ? A B ? @ A ? > B F D ? < = < = E G E @ < 8 < @ < : < = ; ; ; = 3 . % ) "                               
+   
+      
+              
+ 
+                  
+                 
+  
+                                                                                                " ) $ ' + 0 8 ; @ ? H G P R S P T P T Y ^ \ ` b c Z Y ^ W Z W Z d X X Z O O U T S S U Y W Z P U W X P T K N M U S R S Q P Q P T T K O J L M M I L J L Q O L K G E H M I I M H Q Q O L J U P L F K M N H H L O K T K O M L M O K T Y V W \ Z [ X W ` _ Z Y [ ] d c ^ d o o p i m t l i i k i m i r p p v z r q w x v   ~                   
+ 
+    ¡                   |       {    
+ }  y   ~   z     
+  } } {  z     |      
+         {     ~             t    
+ |  
+                  
+  z } }     } y  ~  z   
+                  ª ¢      ¡                ~             z x |      { }  { ~  
+      
+   z     } z       } x  { ~ | ~      ~    } {           x {   }   
+  y  }    | p }    |  { r y   r x w y } y u p { y { x w o p j s y v o o v } z t u q y ~ v r s v q o q r q n q w w | w u p z l l v w q d j n m k f e l m e ` e h s r x z x p p v w s s | z u p } y l m s w s ~ x   s o i w s r v r | r t u u x t p t n s v y y w w s s t n w w p s x  y q l t p m p q j j f ` [ P O L O A G K N K N U S R R U S R T S W X [ a Y T Z W W ^ b ` [ Y ^ i ] ] \ ^ d [ b [ ^ ` a b ` _ _ [ W S S Z \ Y [ Y ^ W N M T X T O Y U V O P Q R O V U V S L N L O L K T K K U M H K O S O S M M G J N J K R L J I E E K K F D C F D K F E D F @ E H F C F E J C E F E D E N F K ? = ? @ G I C C J K F I B A G A > B C > A D A A @ = : < > @ > B ? ; = = 2 / / & # 
+                      
+                 
+ 
+          
+              
+        
+   
+  
+  
+  
+ 
+     
+ 
+                                                                                                 
+ 
+ ! $ + + - 0 9 < @ = G B L S W X W V Y Y ^ ` ` \ [ W Z ` ` \ W ^ [ \ [ Y Y X V U Y S M T S U L S U W Q T P O J P K I O U M N O Q Q N K J J M I I Q I H M T N I I G I D D H N P O J E L P U P L L L H Q I G F L J L I N M K E P L O Q R [ X Z Z R S X [ T Z _ [ b _ c j a k r n q h i l p t r m o p o y y x v z | x                                                      
+      { r }         
+ }    
+   
+                        { }               
+                      
+          |                         ¬     £ «                                            
+    
+       
+  }         
+                       
+          |   
+        ~    } }  |  u  y x    ~ } z ~  | z x ~  w | v y { u s z   z  z z z ~ x   { } r u s r w z {  v p u w { y w y | q p q q q l n m j i r u z y | | y 
+ { ~ | ~ z  z |  u   { t | y s w v { w x { y x  ~ w  | r z t ~ y t s v t w x  z  z  ~ z r }  r w   w s | { w n l s j c d U V R I J S S K G P X X W Y W U W Z ` \ a a g d d h e f h b _ c c [ b b i d e ` e i b e i n e a _ b _ ] Z U Z X \ W U W X ^ \ Z U Z W T V \ Y X S O U W W Z [ V Y U P O I P M U T L Q J Q P O T U Q S S I P Q S U S M J F J Q P S O M H K M I J G J J F K K I G O K J H K H I G G D H F A B F F D C H J H P H E F G G B G C D < ? F B B @ C A @ B G G D ? < > ; 5 2 0 ) $                           
+  
+                  
+     
+                    
+ 
+      
+          
+  
+ 
+                                                                                               
+ 
+ ) / / 2 3 7 ; ? ? G H M W ] [ U O T ^ Z Y b [ a X c a a _ [ Q Z [ X [ ^ R V W T P M K K N T S X S M Q O S S M J L O O I L O Q Q J K M J M J K K R K J G M I B H Q E C E F K H K K N K U M L L P K O O M I I E G K K N Q M P O M T R X U U W V S [ _ W Z T ] ` f b e c b j f j g p n h p u n p j n | | { | x     ~                                     
+                     |   z           
+  
+       |     
+             
+ |                
+                      
+   
+    
+ 
+  ~    
+        ¥     ¬      ¡ £      ¡ £                                               
+       
+        
+                          
+       }   |                     u { t   
+    
+  y { } ~   z y r p | p x w | |   z    s w       | |  }  z v } } z  u u v p n x p k t o j e i p w | { z }       w  | ~     { {  { w   |  | {     z   u z  u { { | t u u {  |  ~ 
+  u t y z t | }  } {  w t m l h W Y W O J L S J U _ \ T Z S Z ] a [ ] Z \ d b d \ g \ _ i c f ] c _ c i e e e f b c [ c p b ` i g e Z ] W a b Z ] e ` _ Z V T ] \ Z ] Z Z Y V V P T X ] U U Y Z Y Z R W W X P N J S Q R M I J J Z N S S T R Q M M S U T W O L I M R P O W Q I I M I K K I F E H J J C C C C E I H G E F D D H F B D E B > E H J H D A D D H G J C B 9 = E A ? ? C @ C D A I E G < < A 3 2 0 * !               
+   
+                  
+   
+   
+      
+  
+        
+         
+ 
+    
+ 
+ 
+           
+ 
+  
+  
+ 
+                                                                                               
+ 
+ ! ' - 0 1 8 9 < A H L M Y X \ V Y T X T X \ W \ Z Z ] [ ] Z S U W ] _ Y W M T Y S W S O T R Y R W T S S O V R U U T Q N G H V X X L L M N N O E L M K Q F G G A C G F A A C K K O N Q L Q M S M N J M L Q O K Q N J H J O J R Q P Q O R U S \ [ U Z W V b a c c _ ^ f j k j g l g t o q m z r v v p { u {  { 
+   
+ z  
+      }                              
+                   
+ 
+         |              |                             
+  
+                                   
+  y y        € €       £      ¥ ¥     ¡ €                                               
+    z        ~   
+                           
+       {   
+             
+  
+   
+         
+   
+ { u }     ~ w x z x { v y y | |  w z 
+           {  x z    } ~ x t x t t v v u u q t l n m v t w r x w x    { |   z   ~ ~  ~  } u }     z |    y    { x z s    z y x }   z ~    y   }  } { | y w i d d ^ W R Y Z P O O S U ^ X ` X ^ T [ ] d c ] ^ ] a ` Z Z a \ [ g h m n h l j h j g e a e d _ e _ _ a d e ^ ^ d c g c ^ Z a ` a c Y ] d \ [ \ Y _ Y X U [ T U V Z Y \ W W Y T P Q O M P P P P P P J K J O U Q P M P R S V R U V N R U M M J H H U L J I D E F E J B A C D I E A = A ? E E @ > = D D E C C @ E F @ D C F I A @ > ? C A E F ? = ? A F H H H I M J E C E D A A ? 7 8 8 * &               
+           
+ 
+            
+             
+       
+                 
+               
+ 
+                                                                                               
+ # ( ( 1 2 4 : 8 = B I K O \ ^ d Z W T T Z ] U R Z Y Z Y _ a U Y ] Z W T R M U O R S P O Q J J S S N T N Q R N O K F P U K J Q U T M L I S L O L L E P P I E H G F G D D D J M K K H Q H N N J J H K K H P N M N L O F G H P M O R S Z T U U W W Y \ \ \ ` c l l j d a m l l h l f l l u w t r v w p |   
+  
+    {        
+                    
+                                        y { }       ~                              } 
+        }                             
+  ~  |       ¡           £   ¢                                                        ~                   
+                                     
+                          | }  } s | z | 
+ x  ~   ~  } w   }  
+   z   } ~ z z  ~ { ~   x r { { ~ u q { y u z z w x s r p t o t r r t t v ~ { t  y w x    v ~ | x ~  } | } }   | }     
+ } x    w x u  w w x }  z w     
+ 
+ 
+ }   z ~ v u q l h Y ` ` [ W N R V V Q W _ \ \ Z \ [ ] V a b d b ] [ \ \ b a e j g b c i f j n f k a c h g ] h g \ X _ g c a Z X U Z _ ] [ ^ ` _ \ \ ` ` \ X [ X X Z [ Y [ [ \ [ Z S W V W Z Y W T T T P J S V Q Q J L R K G M U O G N M P S L R U L F L R T N L D M L J E G C B F B @ ? @ ? B ? A @ A A < A D B A @ E C @ @ D > < A > ? B B < @ = D D E E B D C > @ B H E L H L J J C A H C J B @ 5 ; 7 + $ 
+                          
+  
+                
+                      
+ 
+               
+                                                                                                        
+   ' - 1 6 5 8 ? ? B G Q R a d a Z Y [ V T ] Z _ \ e f \ ^ a ^ Q U Q K P M M R Q Q O N K N O N Z R N P S R L I N M H K M I J R S R L G M N I M I J J O M I J E I M J J F G G P N N M M P M R U N G E M U K O M E L P E F G Q U T X X ] \ ] ] Z V T U a ` c j f o g c c m t u s k p u p t x w w  v |  x                  ¡                     ¢            €                      ~ |  }       
+                                 ~     
+ ~                 z       | }     
+   t }                ¥      ¢                      ¥          š                                            
+  
+            }                                     ~       
+ z       ~  { z    
+ t x ~ }    } y {  {     } y   { {   
+  y u x l r y r w w z  u o n q r n y v w ~  v v |     { 
+   y  
+ { 
+  { y  ~   u {       }    ~ v y  { v z        
+ 
+    } t x r h i b Z [ W ] _ ] Q P X W Y ] _ V [ b ^ X \ _ Z [ \ ` j d g Z c h m e f m a h b h \ ^ \ X _ c a ^ Y b a W U [ ` Z Y Y P L V Z c Y ] c _ [ [ T U \ V V S W W ^ [ [ d _ [ R T W W U W S Z Z Z T Q N U U O L J Q R O M R M K P R P P Q M Q M M E P N N N D J D J E G J @ C F @ : > ? A = D A A @ E F J G G E H G F C A B ? @ G @ > A C < @ ; ? D D F A B B F E F C D J M L J K L I P G C @ A < B 9 5 )   
+                                                         
+ 
+                    
+           
+                                                                                                 
+ % + 1 2 7 ? A C F M W Z Z Z Z b _ ] ] _ Z _ ` a f g b ` Z ^ Y T [ O O O O S M R Q R S Q J Q Q N [ S U S T N N O I J I K L N S Q M I J O N M K E K M M E K J I H M N ? G R M D J M M J U P K K N K Q T K M M I P G G F H L S U [ Y \ U \ ` _ a Z \ a c b e n s l k i p z { s n r u s t u v y | v | y      
+                                                  ¡                  }   |            
+                            
+  
+    
+                       
+ ~         y 
+  
+      ¥           €  £ §   ¡         ¢  ¡                               
+          
+               
+                       
+                                           | } ~   z 
+      |    p z  }  s ~   y z v y   
+   z }  |        { { {  y u y   s l j m n s y   | | }       { } }        y v { {  x }   |    
+ z w { } z { { { | y       
+ }   } {  l q j c ^ Z Z Z W R a ` [ T S V U \ [ T Z a ^ a h m d a c e f f a ^ ` c f a b e ] Z _ e \ V \ Z ^ g ` ] W \ _ X \ [ Z X W Z Y S \ _ X Y U \ ` ` W S S S Z W Q V W ^ c Z [ X U W Z Z V V W S T X U P U O R T S T R O O Q I J L I L J O P H H H J I H S H I B F D @ ? C I C = 7 = A D G C J G L J I E E H K H E L M K L J F @ B F I I H A = A ? < : @ C B = < A H L I K G I I G L I H P J G C E D A @ : 3 ) #                                                                                                                                                                                          
+   ( , - 2 7 9 A H M M W ] ^ [ Z d b U ] ^ U ` a ` \ X ] Z T U Y \ S T T T P Q M T Q Q T P R N P K Q N O R S O U R L Q L K D I M K I K O Q I N N N N N P F C D G L H E @ D J L H M L I N M K I O K G H N N O J G J G D D J N T Q W U Z W [ \ \ e W _ c h d e n s v n r { t v { o o u }  {     u    
+     
+                                                ¡                  {   z z }  
+              
+                                      
+                                ¡            ¡ € ¥ ¢   ¡ ¡                               ¢            
+                                 
+                       |     
+         
+  
+   
+      
+  z      {    y | }   ~ 
+  n t v } ~      x z z {   { { w |        
+  ~  { z y  q u ~ p j i q o q z   y z  |       ~ }  } }     } y | ~ 
+ 
+    u { w | } z z  z u {   u s       }  ~ t l p o d ] Y \ [ V Y [ U Q Y W V U S S V h [ V ^ g c ` a f b ] d g b _ X S W Z R S S U T T S Q Q V a [ [ [ [ _ ] [ \ Y [ a ` \ ` d \ X W [ Y X Z [ W X X W T X ] ] Y [ X X a U Q X U W ] Z Z V R O K O Q L Q M M L K O T S R L H P Q K I A G I J J A F G C J I E @ H J E > = C G G A @ C H Q K K F K G L K I G M K D K Q R H I E E I P I E I A > G H B @ F C = : C @ B H F H I A L D F F H Q K I G F E H A 7 3 + ! 
+                                                                                          
+                                                                                               
+ $ % + , 6 5 : @ G L R Q V X Y _ b [ Z ^ ^ [ ] ` a Y X W T S V U W V O R V S Q M W V V R N S Q T S U Q J P K R R O Q P J I H L I F K K L Q O M J J N Q O D H E H K D H J G K J D E H L M F F M Q T J K M P Q S J J P I J O S Q T R S X X \ Z ` ` X _ e f j d h q t p r w r w y x q { v x x {  z                                                                          
+ z } 
+   |  ~    
+             
+                                  
+                                € € ¢                 ¡    ¢              ¢ §                   ¢                                                                 
+             | 
+ ~  
+  
+  
+     
+ |    ~ w {   | }  }    y w | w v x       
+    ~   y  w  ~ ~  } |     w  t { z { y o | t v q o p u       } |       
+   {    }  s q      | y | u { z z y | { t    x    v |    | s k h ^ Z U W S V [ Q T Q W T R Q T W V S Z g c Y Z [ Y W Y U ] ^ b _ Z Q N O Q P I M K I P Q Q W N ^ _ _ Y X ] _ b a V W [ b ` [ Y g W [ \ ^ X [ _ X W S V R S M W Y \ \ S T ^ W V W V S U T V X V S N W L N N R S R L M S S V M O Q N G M G H G C K E @ B @ E K L @ D E H E I G E B E H L E I I C C C L Q L I C I L D M L M E G N F N L F F K D G E G D D D H D A F E C ? A D C H K E @ B G H N K E I O M D 8 : / #                                                                                            
+                                                                                               " " # * 1 6 5 : ? A H I O S Z \ Z c a T Y _ _ ^ Y W U Y U Y U U W Y X U W Q Q Q L L O Y S Q L R N P K M N L G J G K K M J H K R O M P L L N N J J L M M R Q S F J O L M I L I H I J M M L G J K P O H H R Q T P J L O Q N T U U U Z Y W W X \ Y b b _ a \ _ e m s o r l n m r x z z x z }  ~ q ~  x  
+                               
+     €    £                                 ~     
+ x }                
+   
+       
+ 
+                  
+                   
+     
+             Š ¡ §   €     ¢ € § €      Š     ¢          ¥   £  ¢                                                                                           
+   
+  
+ 
+          
+ 
+  
+   
+     x 
+  u    ~ } | y v { } y  {  {    ~   z }    }    | { w y  t } } x w y | o q r q o z z {  y ~    x     w     z u   { | | x {   } 
+  
+ ~ y x { z y x 
+  | 
+  } {    x u z u q l q e [ U O Q P S M V R U J Q R T T S J M [ ] _ \ Z X N L X V Z X X ` X \ R M P Q M P K G I P S _ \ Y b b h b ^ d Z c ` [ [ ] _ ^ [ Y \ X Y T T ^ Z [ P N U T \ X S V T a \ O M W X R L O M O M N O R O N T O M G Q J M S L P M K K M I Q L H I A @ @ C B C C @ G F G B G J H K G N O H G B J I F J K A E K K K B ? C K H O M O K Q G E H I B H F G I I L L M K I D A A D @ C D F I F M C @ H I K D P Q E I M F < = 4 & "                                            
+                                                                                                                                             #   % , / 5 < : 9 H F L U X X [ [ d X V Z [ Z [ T W R V R ] V Y Q Q R T \ S S S S J N S L G O N P I L L L K P K O K F N N R Q J O P K N K L K N M N O N P M L F E L K J K O M H M N O G G F F H M I K Q J P T G G L M O K Q T X Z X Z Z [ Y ` V a ` _ \ e k o o s t m { y w x w x ~ z u x | w q |   
+                                                                         }     
+     
+              {           |                                        
+  |   
+ 
+       ¢   £ ¡    ¡    ¢  ¢    ¢         £                  ¡                                        }           
+                          
+                 }     
+ 
+     
+    z y  
+      y |  ~  }  } { x z    v   }  s {  }  
+   x   ~ } } | r | { { y   x t k i n o n r |   r {   u ~ ~ ~ | }    
+  w   
+ {   }       } v   v ~ z }  ~ } 
+ y   v  y u e e i \ V V X K H M M L G M O Q T V Z U S T N L N U R W Q [ d Y X V [ X [ ` \ ` ` a Z Z W ] [ W N O P Q X [ U V Z g Y U ] ` ] V Z \ ` ^ W U X V U U Y T X \ Y S P N V V [ Q Q S T Q K G X T N H G D F K L J H M J J H D D K H C > E B D J J H B ? ; A A ; > A H C J F G B J P J M G E F I H C E H N J K L K T I E D F L G E J E > G I H G P H A C B C H B H G D M L I H E F A A A H I H D H I H K B D J D C L N G M I B : : 1 $ 
+ 
+                                                                                                                                                                                         $ % - 1 < > 8 @ G O K S V W X Y _ Z X ` ] _ ] V Z T Y T U T S T S R S V N M R O H H M M O N R N I P P I N O I O R T M O V V U P Q J K M G P R O S O P P M H G K K J I M P L K O L P G D H H P Q M I M O P P M P N K P O L X V [ T U X [ Z V Q X b d ^ c l t q m r t q x { u u s t | r w | y y                                                                             }  z          
+   
+            
+                    
+           
+             { y 
+     z             £    ¥ ¢           ¢ € ¥     £ £   š   ¥                                                   ~                                                     
+                 ~        } }       z { | }   v }   ~ ~    |   
+   {   x z q s |   } y v  l t n k o q x v   |   { }    {    
+ { } }  |   
+   
+    { x y ~    x | } z v  { y q l m g i ] R Y Q L L E K G K N Q M L M L L T V U T R R S U Z _ ` X X b W Z V [ ` b ^ \ a g i b ] Z \ ` ] R J H H P T S S ] Y X V R \ S T U Y X X T P Q L J O T N Q T S T S I L N K C ? H D F G C D B > ? ? @ : 8 B D E F C = > A C E B ; 5 : < 8 ? D F A : 8 < : 7 : : C E L R H E A J K E H O F D D A G C C H I H E P H H B A F A @ M H D F I E E R G J F H L I G G G G N E H L H A ? L M J J D E I D C K B B H J F G F G L H E @ 9 3 % 
+                                                                                                                                                                                       
+ 
+ ! # * / 1 6 : = > D P T W R Z [ ^ _ U \ ` [ ` b X X U R V U O U Q Y Y P R T O T N O S N T U K N P P Q I J P S T Q L W I R O S P L Q L N M J S O O K O N J P M H H F F N P R P I C C H I G H H L H K O Q R M F N S L R W X S R S [ T R W _ a V V ] i ] b f l x q n p v z w y w u x    y x                                               ¡                                         
+                                                  
+    
+         
+                    €  ¢ § §         Š     « ¡   ¥ Š        ¡       ¡                                                                                       z                    ~   
+ 
+      ~    }      ~      }     ~ | } {   ~   | y | w | z z } z y ~ t s | y u t j r u w {                  |         
+   z u { x w } | x   | x { w k i f [ P N L G E C G 8 : A D B B M F J M O V U Y [ \ W X Z ^ _ c d X ` a Z c ] _ U \ ` ^ b a l d a ^ \ _ ^ Z W V O K O Q Q R O Q U Q W V Q I L T O H F J O E I F C B B B F E D B ? C @ ? D < ; C = ? : : 8 9 ; 9 ; 7 ; < ; 6 5 6 ? 7 : = < 9 4 6 6 5 8 = : < 7 ; ; 2 ; @ @ ? ; B E B F @ D B H J H C H C G C E C K M H L G B B C B = D I I G C @ E F E E K E B J K G G G F C F G F J A E J P P H E G E A E I H G J M D C D D H ? K E ; 0 ) 
+                                                                                                                                                                                        
+   " ) - 4 8 9 ; ? F I P P P [ [ ] Y W W S U Z W T J Q N P L O T T S U S U S R P M O O Q S Q K M K P M J K M P P R J L K T M Q P N S Q K K B O O P S S R P P J O M J F I L F F E F K I H P M O I D J Q O K J D L N P Q W U R P T \ V W W Z X W ` i b e e g r q l h o | ~   ~ z                                                ¢                              
+       
+ 
+                       
+           
+                                                        ¢      ¢     €    š               ¡       ¥               £                     
+             ~                                                               x   {        { x   |     |  ~ } v    }  } y |     | r t { | v w x z | | x q m } x s p k q q t ~    ~ 
+  
+   }     { |     
+   
+ ~   }  z { z } y v y v | w q p h d W U K F @ ; > B 9 2 < : ; B J E I I N O X V W V f d ] ^ a g i d c c ` ` ^ ^ e f ] d X [ Z b b f b b i f W ^ ^ a ^ R Q N O J I G H J K G H D D H L @ @ C E D 9 A > < = 9 ; B @ = ; @ > @ @ ? = > @ ? 8 9 : = 9 @ 9 7 < ; ; 9 6 6 8 5 7 0 6 8 : 5 4 3 8 4 4 4 3 3 9 : 6 5 = 7 8 > < < 7 : > = > B I ? A A : A @ D L H E C D D D H K D C D A C D D E G H D D M G A C I H I H D C F B B H E A E M N M H D G B M J G D L T K I G C @ A C D 9 0 ' 
+                                                                          
+               
+ 
+                                                                                              
+ " % ' * 1 3 5 > @ H H O L P V U W T P O T U \ T T M U I B F Q O O P J T Q R R P O N O S L P O O K F F K O M G P P N Q Q R L P R R P O G M K M H J P P P N O K L L K K N J L H H I J J J K K M P I G M N K P M F N P O Z W T O V _ ] [ _ ] V \ c d e b e f m n k f n w |         
+                                                             £                                                                                                                   €       £ ¢ ¢                                                                          }                             
+                  }  
+ ~           z r }         ~ { z   x }   ~ r }   }    u x |    w ~ } z u y  u y v z t v y r k p u z q q k q v } y } { y z  }    
+   y | }  { 
+     }      ~ {   y r x  r o a b \ U N F B A = : : 8 3 / 1 7 > F N I R U X U V \ b a d c f c h f g f ` ^ c e ` ] \ h d f c ] Y a d _ Z Y [ ` ^ \ ] W [ [ V O M L G F ; A A = < : A ; ? @ ? = > ? B : = < ; 8 < > ? < @ < 7 < < < = ; ; : ; ; : ; = ? < 3 < @ ? ; 9 < @ @ 8 ; 7 : 4 8 7 8 9 9 3 2 3 2 4 ; 9 7 5 9 8 ; 9 : 6 : 5 8 9 ? < = ; : ; : ; = = F D ? @ > G C E G J C @ B D I I C @ B D B < = E < A ? D B B = E E E I M D G K F H E C K F J D H E F M G M E H H G B A 9 5 / # 
+                                             
+   
+    
+             
+  
+                
+      
+                                                                                              
+ ! & & - 2 / 2 < ? F H L Q P T Q \ L N N R X Q R N P G M J K S O Q M G Q P Q O M K K M O L K U L G G J M K C L N P V O P P L F L M P L L R L M H H M S P N K P K H P K G J I C K G D J K B = D D E M O L R J J K O Q S W ] Y W Z \ ^ [ _ ` a Z b f l n ` g d h n q m { x     | z z     
+                          ¡                                 §  Š   €       
+        
+                               
+         
+                  
+    ~        ~  |   
+                                                                                                     
+                              
+ 
+               
+      
+          w          }    z } |   y { ~       
+ { | { | z {   | w v  ~ y y z t   y y v o j m k q r w }   ~ z } ~       |  | r     | ~ } | ~ ~ x { w u x z y k i l b \ W G B ; = A ? ; 4 ; ; : 6 3 3 4 7 @ Q Z V c _ ` b ^ e h ` ` f _ i ^ g k e ` ^ e i a c c g c p a X W \ b \ R X X U S M R I E I D G G C F B A = 8 < < < < = : ; @ @ @ @ D A ; : 9 = ; A > < < 9 = ? > = : 9 = 4 ; ? ; < 7 9 8 = : ? : 9 : < ; < 8 = 6 5 1 9 > 6 : 5 0 1 7 6 3 7 5 6 6 9 8 8 3 6 7 : 3 8 8 9 6 5 : 5 3 7 9 ; 8 = 8 ; 9 8 = 8 < A G A E A ? H J G C D B B ; ? = < > > A B @ > B D E B H G E G H G H D D F D C I A D G K J E N J F C < : 5 * " 
+                                               
+                  
+                   
+ 
+   
+ 
+                                                                                              
+  " * . 3 4 3 9 = @ A P P X T O V Q U R S O W Q R M N M P N L Q Q J J O K J K M P M L J P J L J O N N L E H N H R U O P I E M K J O L M U S K M N W P O P N O L L F K H N J B I J L L L I I J I J M J N M L I J Q T a ] Z ] V _ g [ Z _ c j f c g p p r j g e o x v x z ~ | {  |       | ~                                        ¢             £       £                                                  
+                
+         
+ v x  { } }   z  w  }                                                                     
+                               
+ 
+   
+  }   ~            
+                     
+      
+    
+ 
+   ~ 
+  |        |     {    | {     } x    ~ z }  }  
+ 
+   w  } y   
+ w x y r   y } y } z } r h j n p r { x v w |   { x  z  
+   } z  x z x } u } } |    x z ~ v q n q r c T S J G B B = > ? D ? : A = ? A @ ; : 8 ? J U ` d a b ` e g l p l i h e g f m m e b d ` X a h f _ _ ` X M T V S O L K L D H @ A = ? = 9 = < 8 = @ ? > ; = @ < 5 : 9 : > B C < @ C D ? > A 9 ? > = : : @ E : 8 E B = > < = 9 A < 6 7 ? < = @ : ? @ @ = 8 : 9 7 = < = 8 7 1 / 1 : 8 4 1 2 5 3 7 9 9 9 9 5 8 4 5 7 8 4 5 5 4 7 4 1 8 7 3 6 6 7 ; < < @ ; D @ A A C > G E B C A = : B D C @ H @ > A < < < A @ @ H H G G D E ? = D A B B B J H B A L H K D A ; 7 0 *                                                       
+                                
+ 
+  
+                                                                                                
+ 
+ $ ) 0 6 4 : < < ? D O S U W T O R [ T U O S M O O J L J S N Q S M P I E D L O R M I D U O N M H D I K H M P L O N N O P N I G M K J H I P P R M U Q H N I J P N G M P G K O K J M L M J J L M K L O L M J E K O P \ W X [ X V a [ a b d ` e h i k x k h g c l r t l w z z {                                ¢                                   ¢                                              
+                                    x } ~    z         }                   ¡  €     §    ¢          ¢                                                                                              
+            
+           ~    y    
+  
+   |         x   | { w  } z  x {  { { 
+  
+   s v r {   ~ x } ~ | v t r m k { } u | z s  } z 
+     u y  {   z z z r r  | u    v o w x k b U V N F F D B > < A E C E G I F C H F O G @ ; J N [ l g g b d e g i s m n h a a i b ] d a d ^ W Y ] X R N L F D @ G C A F > A : ? = 8 9 9 5 3 < A 7 ? : ? ? > > @ @ = 9 7 = = @ C F > ? = A G @ > ? A = A > = B > @ E E D @ @ < ? @ B F ; < > : ? ? A @ D @ < 6 5 6 ; ? @ < : : 8 6 = @ < 6 7 5 6 8 = 8 8 = : 9 5 6 6 5 / 2 2 8 4 5 7 6 5 6 3 8 < 5 3 6 8 6 5 7 9 : > ? > A @ C B F D C B G A A ? > C > B D A B B B E E @ A A : ? G G E A B G D C E D K J I > 9 1 - ( !         
+                                                
+          
+ 
+                  
+ 
+   
+                                                                                             
+ 
+  $ ' + 2 7 < C > B R S P S T Z Y U R P T O J J K L M L L J O H L L R Q C B E H M L K K L M M G K J N O U L M M J J R O T R Q J L Q L O N W T P O R P N M L N L K L P J G L F H G I M O N M Q P H O L N K N I Q Q P R Y ^ b ` Z b f b e b c _ f h o n j f d r l t t r y                                    ¢            ¡                          ¡            
+                     ¥          
+                                    |                                                                                                                                            
+        
+         y   
+              
+         {  }   
+ ~ x ~  z }  y w  |      
+   
+   z v { m u x y w x v { z q m r x r p t t   x  | } w 
+  }   | 
+     x z } y v  y z | ~ z m g a ` N A B E E B A G A < = B H I J R P H I V ] ] Z M H R ] f c c e k g d g e i d ` ` ] W Y _ Y V M T Q N J H C ? A @ ? : ; > : > ? = @ 9 < ; 5 8 5 3 0 8 < 8 : 9 9 @ < A = = ; @ D A B A C D ; 9 < D E = = < 8 ? A B G J @ ? B E B B = A B C ? @ B @ A > @ = ? A ? A ; @ ? 8 = : 6 = @ > 6 > = = 9 9 8 ; = 7 ? = : : : 9 2 0 : 5 5 7 5 ; 8 : 7 8 2 5 4 5 1 2 0 1 6 2 6 3 1 4 5 ? ? ? = ; > C E ? A > A = > @ ? @ E H D B < @ > D A A B ; E I @ @ B C H G C E I I E H = 5 0 - ( "                                                                 
+                         
+                                                                                              
+ 
+ # * / 3 8 9 < ? G Q S M P R Q \ Y T M T N N L K O H O M J I M O N I E K M G F G O I J N J H H N N O O T S P P L P M L T T P M P U R O N X S L O O M Q P O T U H O T K L K E I F J O H Q M L L J O K K P L J P S S P Y ^ ^ T [ a g d f a d d c m s q n g g t u w u u { ~ } ~                                                                                           
+     
+                       ~      
+                   
+     
+        
+           ¢       ¡              ¡ š                                             
+ 
+    
+                     
+                                       
+ }           }           |       
+      ~ } { y   
+ ~   { }  
+  {  
+         } { t z u z s z | { w s p t u x r }  |  { }   }   }     |        { z { { y t k Y T J L H F B F A C H D D K D J Q S W U S Q U a g c [ U V Z \ b ] d d ` e ` ` _ f [ U Q N N P R M E < > > : ; = 7 6 8 9 < @ = = 8 > ; @ : ; < 9 3 4 2 8 2 6 7 3 8 < 8 ; ? 9 < F A @ B E D C B I E > C J G D C > ? @ A E E D > ? D L G D D G A C @ D A C D B C B < ; < D B ? = 9 ? 9 : B : 8 : > @ A 9 ; ? ? @ < @ @ : = 8 ? 5 3 9 7 ; 9 4 2 5 4 9 : 5 9 7 6 0 2 3 2 8 5 5 0 / 1 3 8 2 9 > 9 ; ; ? < > ? < = < @ C @ C B A : : @ ? ? B @ ; B > C = D D ? B H H D G L D H ? : 2 , ' 
+                                                                                  
+       
+                                 
+                                                               ! ! ( 1 6 7 6 7 ? I M N O O O Q S O K K R M G N U S O J F K J I F G D F Q O H G N S I K I J H P Q N O L M U I T R U Q M Q Q M M N Q T N J S P P W T P P O W N R I L Q P O K I G J L P N S S G H K R S P K M G N P L P W U W Y ] \ b _ ] h i l k d q r p j r o p { v w } z  ~                                                      
+                           | 
+     |                                                                    
+ 
+                                           £                  |     
+ |      ~  y |  |                              {          ~                           ~ y                 }    w { u v  }  
+ z         z w  x  z  | y { } |  x      w }  ~ { y x t z x r t n u   w x s  
+ ~  ~  { w y ~      ~ {   z |      u v o l e \ W S J L K F K I C I G K K K I L O Z Y a Z \ W W \ b ` a Z ] X _ ^ a ^ a ^ X Q Q N R P K J B ? A D E B ? B E 9 7 : 9 9 6 = > = : 8 8 8 9 9 : 7 7 8 5 6 7 3 1 4 8 7 9 5 : C E ; @ C B A @ @ D ; E D ; = ? G F G H E B B B H E E E A @ B A H I D E G E E E E E B D C A > ? C A = ? ? = > A @ B = < = = > = @ D @ > < 9 B ; 9 < 9 6 9 ? 9 ? = 8 9 9 8 5 9 9 < 5 6 2 6 2 1 4 6 7 2 4 9 3 2 0 4 3 3 4 8 4 ; = : = ? @ ? E > > > ? ? ? < B B G D A F @ ? B = A ? B A H C G B E E > > 5 ) ' 
+                                                                               
+           
+                                                                                              
+ " # ' ( / 4 : 5 ? @ @ H L J O R Q O I L R R I J K O N I F J H F I D G J D D G H J P L M P L S W R L L M I Q O P V V O F M P K M Q S S P K N U Z W X O L M S P G G O P P N I L M L I K F J R P G P M G P P Q P R S U X W W c a ` ^ ] a a h q j q o x v n i v j l u x y  y  z              
+                                            ¢             ¡                                                     
+    ~ 
+   
+   }                                 ¡            š                 ¡                  }  }      {  ~     
+ | y w |         } ~    
+                       
+   
+   
+ ~             
+ 
+  
+     ~ z }  |   v {      y       ~   | | x | z | | } }       } { z  
+ {  { z w v { | y  } } ~ } 
+  ~ | ~ y x z  ~ u x | o u t z x l w w }     u s y v s  w    } } ~  } u x  | t q k g ` a Z R R Q F K K E B G K J N T Q P R P U Z Z Z a _ X Y ` b ` e W X Y Y Y ] Z R S O K M E @ D ? ? < ? ? ? ; ? ; A B 7 7 7 ? = @ ; @ < 9 = ; : 7 = ? 9 < ; 8 8 8 B 9 8 5 4 8 ; ? D ? 9 < < = A C @ K K G F B > C L H J G J B G D J I G @ B G G E J H E M J J K G M J I H D : @ G H E B A @ F C ? C B @ C @ @ > = B C A D = > ? H B ? : 8 < ; ; = ; 9 6 : < ; 7 7 5 7 6 5 4 1 8 6 2 7 7 6 3 2 7 . 2 1 / 3 : 6 / 8 4 9 ; @ = > < : > ? 8 ; ; < > > G C = : = ; : = = 7 ? B > F D C D < 8 7 - %                                                                                                                                                                                         
+ ! # # ' , 5 ; 5 ; = < A I M N P L J M M S M O M H J N K L I M J @ A F D E G E K L K L F M L O Q P P I J N N V U P P S O H K R H Q ] M T Q R U S S T K J E J R J E G M I K N T R K O K I I N L M O Q P R H J N Q Q S Z b ` a \ b ` e a b f n s q n t w s o b t t u ~ | v y  |            
+ 
+ 
+                                                           ¡                                                                        
+     z      
+     ~         ¬        ¡     ¡             ¡              
+   } z        r x        v z |  ~ } x   x z z z    
+                
+                             
+             z r  
+    ~ |   }  }  
+  y | } y v }  y  
+ 
+      | | }  ~  } x } w t q r   
+   
+   z x s x x y  q   | { p s i m o s { z {   | v | {   
+    
+   t r w o k a ] _ c U X U O O S N H L P N O M Q O X T X Z T ] \ _ ] Z \ W ^ ` _ \ Y X T R G L N N J ? D A = C C < A ? < A > ? 9 ; = 9 = 9 9 8 7 9 = < 7 @ < > = A = @ ? C : @ @ < ; : ? < : 9 : : ; ; ? < 8 > @ B > A C I L E K G B G I F H J L I I M O K I M G L Q Q J F H J H P N J Q H I H D A D G G I A H N F K H G G D ? @ B ? C ? > I F A > G H G B = < B > > : : ; : < > 9 ; 7 7 8 6 3 2 6 : 8 6 5 7 3 2 6 9 3 9 ; 0 0 0 9 0 . / 6 = 7 ? = ; 6 7 9 < 7 9 : ; A @ C D ? A @ ? @ F ? @ ? > E F A > ; ; 4 + & #                                                                                         
+                                                                                                
+ % ' 0 4 3 9 7 < < : H J J N R H J P Q M I Q K E C K J K M L L C C D G I P C M P R F B J M L P O M H T S Q V ] W T W N P K J K L U T V V S U S S O K I I Z X K E K M K H T T U P L H N M M K K J P T M J J Q U T U ^ Z b a \ \ _ e d f g d q v o m r t t q h x | { |  y    }                         Š                                                            ~                                   
+       
+    
+               
+                                        ¢                    
+  
+ ~  
+ v  | }   ~ } w   w z   ~ } y w {   | z   z n |  
+                               
+ |               
+     
+         w ~   {    
+        ~ |  
+  { u { v        
+ } | }   ~  } ~ v } t x         {  z p v w u v z x | x w v k o | | x   } v q s { x  
+   z    t k d l ` _ T _ _ f a R O N X Z K I L O V Y [ [ ^ \ ] Y V W X _ a \ V Z U S M M G G D D @ = < C B ? > ? : > 9 ; > > ? : ; 8 A 7 < ? : : 3 9 A ? : 8 5 8 = ; A A @ > G E A C G I F C = B @ > @ ; < C @ A : : B G C @ > D H J J K H F H J K I K L O J N O O G J I J Q N I G J K H K G F E D H E E G C D I K G E N M K E B @ @ C ; > < E D H F G G ? G D B B @ ; = < C ; ; ? < = = B A ? A = : 8 7 > < : : 8 5 4 7 8 9 4 5 5 4 3 2 4 / ) 3 5 4 9 8 5 7 2 5 7 9 7 4 7 ; : B B @ 8 @ = > : > B ? ? > C C B > B ? 3 + (                                                                                                                                                                                           
+ $ ( ) 3 9 7 9 A = ? J L O O Q Q M O I H G J I A G H F J K H E G G F M I N J J H H F E N S N Q S X S T W N P T W Z Q N O V N K N O X \ W O J I N R M M M S Q G E M O K N O L K S Q T T N P Q O J Q N I N O Q U X W _ _ ] _ c ` Z b b f r k s p l v y w y m l v  x y  z  z {           
+                                                                   
+        
+                 ~     
+                 
+                
+              
+                                  ¥            |    
+       z {     { w } } } { }  { |   z x ~    z w s s u { {  z    }                          }    
+ 
+           
+     {                     w  
+    ~   ~  z    y |    
+       y    ~           { v t r p u q q z w w u t m w x } | | z w z n j s z {   ~ p w s l ` W Y _ S T U ] c ` b X ] Q U Y L V T \ d _ a ` \ b ^ V U Q R Y S N I H F G @ C @ @ B > > ; < ? B = D = ; : : < < C > ? > ; : : : : = A = < : : = 8 ; A = 9 A D D ? = A @ E D F F D ? @ D D E D @ D > @ < > < ? A A C E G J F L L H M G M O Q P P E L H J I K H J M S E G O J G I K H ? B C B C I G B K H E E L H B D D E A B A D C D D I H E M E G E E = 8 < = < ? ? B C B @ @ A C F E A 9 8 8 > ; > : 8 7 4 6 8 > 8 6 3 5 6 ; 7 1 / 5 2 5 6 1 4 . / 1 2 7 3 8 5 8 7 = ; ; ? = ? < 8 9 @ B < ; B ? B C @ : : - # 
+                     
+                              
+     
+                           
+                                                                                                       # * - 4 < 8 8 < = ? I L J L M N S O N H G N C F J E E J K G B C D H K H K U U K I M J P V P Q T R O N Q P P Z Z R Q R Q T S O M K O O S P I T O L I Q P Q O M I K Q N O T O L J M P O N L S Q P S M K I P M U U W a _ _ c l b ` ` d i j q x p i p m p w u x |   x   {     y                  ¡  ¡ ¢                                                     
+                               
+  } 
+         |      
+  
+               
+                                                          |       
+    |  |  } | u z  y   u v p t { y } z x   | t v x ~ ~        |           
+           
+       ~    
+ 
+         ~           
+        } y }  ~ { ~      }  ~ z | v z ~        x t }  
+    w w  
+        z x { { t u t z s } v t t t w s u r n v z q y m o r u p v w j _ d h ] X Y Y Y R \ T [ _ Q S V Z X T [ V \ \ ] \ a ] Q N U T N N H K K H B D E ? @ 9 C = = = > : 7 < ; = : 9 = B ; 6 A A = C ? > > < ? > > ; B > A @ : E < B > : @ < A ? ? ; D ? B A D J K C H F F D H I O H @ @ : = = @ ? = C C E M Q M E B I N Q O Q O F A H L H H G M K H K H F E I I L H D C G J H E B C @ I H L C > < F E K D B ? @ G C ? @ @ > B = B D K ? = = > ? A > F B = C = 9 ? C E > ? B A > ? ? = 9 7 6 < ; 9 6 8 7 6 5 5 5 9 1 1 1 3 6 0 / / 0 2 0 9 8 9 5 1 5 8 = = @ B ? = 8 > = > = ? B ? E B < 4 4 / !                     
+                              
+ 
+                              
+                                                                                                        
+ " ( , 7 : 5 : 9 : = H L M N P R M N K H K J H L L B C D D C C B C H Q H O P Q O N O M K U R K Q M L L L K Q V Z S P Q Q R U P P M P U S O O R L O U N S V N K L M M K P T R P P Q O P L L O U T S L M L J W Q \ W e ^ b j p i k ] b e i t k m k o v x u y x z z  |        }                    ¥ ¡                                                                              ~           
+ 
+                            ~                                                          
+          
+ } z  } { y | x r t u q z ~  y x { t y m q w ~ y w r { m t x z z   t ~  | {                
+     
+ ~ 
+ z |           
+    |             y    x   
+  |   |  }    |   } u w  ~ r  }   y u z x } ~ ~  x  }   o x y x     ~   
+ z z s t s s o t n j j h o t s t y s v t  y q w q r g d \ Y W U P P T U T Z V W b Z Z T T U V S T U T Q W R M J P E C I D D A C F F A ; @ @ A = ; = 5 9 8 7 5 8 > E ; < ? > @ > < > @ @ B @ : ? < ; @ < < < > D = B = 9 ; < ; @ D D D C A E F B B J P K G H C G O P N O H G C ? ? D C A G B B ? D F A @ @ ? F F K K G H J I J C G F L H B F I H G C K P K F F D C B C C > C D ? F B C A > @ D @ @ ? ? H F E > @ ? B C > C D ? < ; ? A 7 > E ; @ = 8 6 A A F < ? E A ? D D ; = ; 9 ; C : : < 5 7 A ; 6 5 8 2 4 1 3 / 0 0 5 2 0 5 3 5 7 . 2 < = ; < B ? = 9 : > ? < B ? @ C B = : 5 + ! 
+                                       
+              
+ 
+   
+                                                                                                                               
+ 
+ # % + 3 4 6 7 < > < @ I P M J P O M G G H N N I K G B E K B E E G H P K M L L P N O N N Q R R Q T Q O M H L O Q U L R O Q Q L Q O M T M R O L P N P I Q T H H O P I H U V K L S U T Q S M M K O O S O L W ] Z _ [ a [ Y a h n k ` j f f k j e m w { x t | |  x      }                                                                               
+ 
+                                   ~ |           ~        }       {               
+                    ¡                 
+         
+ 
+ ~ z | z     ~ z } } u z x x x |   s   w u l s v   u s } w y x u ~ |  v w  x z     
+                   
+  
+        x z    { } } v   
+        ~ }    
+      z    ~  z |   } x   { u v w    | y q u } x { z z w w   { x y 
+ x z  { z x y w z v n o q s o r x r k l t y v s x }  } i ` g ` d X S Z [ U T P R Y U V T T _ U T R W \ W S L N M H C D D = C C C ? C @ ? @ A B > : A @ A D A ; 9 8 : 8 : ; 7 < < 9 : @ : ? ? @ = < @ = = = B ? A E ? < @ G ? : < = A B > B A D I H D E I I H H E I O R M G I O N P Q I K K I C ? D C G E D ; = G ? = C = A B G I L K G E H G N L L K B E C J I H O L G I @ A B H D B = B B B < F G C = < @ D F A > D C H = C B ? B @ ? D A D ? ; = A > ? ? = @ 9 @ C > = ? B @ = = B C ? = @ > ? E > ? : < < = ; 9 : 8 4 4 0 3 2 6 6 5 2 1 1 1 1 / 3 7 : 5 9 5 ; 8 < > 9 A C H = 9 B C 9 ; ; 6 * ! 
+      
+                                                  
+             
+                
+    
+ 
+                                                                                               
+ % + - 5 7 9 ? = > A A L S P N L K L C E G I G I G I ? D D @ B E G G K I O T Q L M E O W T P O S U Q M J L O Q J Y P Q R S T I L O R Q N M K Q W Q P S S U K O K M M K U N L P O Q O W M L O M T X S S R Y ] ] Z ^ _ ] Z e g ` h j r p r n k p q |  { s  }  v }  } }   }                                                                             ~                                       } 
+     ~      {         ~ 
+    }                                  ¢  ¢   ¡ ¥           
+      
+        z  } z     } z ~ y x   z x x t q w y s k p s q | z x w x w { w z   | u x    
+                             
+    } t       ~ }    
+   ~ }   } z    } ~     
+   ~ | y   z |     y } { | {  
+ }  y z z ~   } u u | y y t  w y y w v s z u p p y x u r l j r x o p r s t w q w i ` X T M \ X V T X R S X O R R V X P P X L P L P N I B E @ < > @ ; = < E A ? < = 9 ; < < ; < 9 = > ? 7 8 ? : ; ; 8 7 8 > > : : : = @ A A @ D < ? E C C A D B D D E L M G ? < B G K H D C J M M H M I M G K G L T N L K K I H H Q J P P J D H O C B G G ? ? ? 4 = F ? E A F A B B F K H E J O K H G F H J J M M I E @ A > B ? B ? < H C A ? B D C B = @ D A A A @ @ > < B ? = C C ? A < ? < = = ? A 8 ? @ ? @ ; = C = ; < > 5 6 ; ; D = < @ A A @ = 9 9 8 : : : : < : : < 9 9 6 3 6 4 1 / - 0 1 2 1 2 3 6 8 7 6 < < 7 : ? E : 8 ? D 9 ; ; 3 ' $ 
+                         
+           
+ 
+  
+                         
+                     
+  
+                                                                                                  
+ " + - 1 3 ; ; < A @ E G M M T M L J G K F G D G D F E F C C E D H R Q L R Y T Q S S O O R O U U O O O G O P X R X Y V Q Q T L J O R O P K J N S W M U I I N M F F M N R K H O K J N T O U M V P Z [ c Y X Q Y e d e g g p s o _ r l i q t q x s y } ~ v | x        z y                                                                           
+   
+                                  |    
+        
+  
+       
+   
+  |               
+                     £   ¡ €                  y ~ |   
+    y } u x   r r u { z { t x w  u u r r v p r p z t t s x t v s r v { y y x         ~  
+   
+           ~    
+     z    
+  z | 
+  y        
+  |  y     z ~        y z w x   ~ | { v u }     x y |  |  { { v  z z   ~ s p x x w r x x | } z u w } z s o y u { } k o ~ u y y u q j j ` Z [ O S S P V P O T W S T V T K L L Q N N O H A B = D A < > ? @ 7 B ? < > ; < < ; < : ? D = B = 7 7 < ; : < : ; = : ? < < ? ; ; 9 = A I B E @ F D B D D J C B A F I K L M I C > K T P I I J P P N P K P J P M G G F E J O P K I D C D L N E G H J H D G K E E ? < > G @ C H < : ; : A E E A J G I H G B D C F A I H ? A D ? A 9 < : C B G A E L C J D < A < @ G ? B @ ; 9 ; = > E = > @ = ; > D B < A > < 7 : < ; @ F ? 6 : 8 4 9 ; ; > = ; ; 8 9 ? 8 ; 8 5 9 9 5 4 B 9 < @ < 8 = = 5 3 4 7 / 2 2 2 4 5 3 0 7 7 9 8 6 8 7 ? > < < : = ; = ; / , # 
+           
+                                                      
+                        
+ 
+                                                                                                " + 1 2 1 3 7 9 ? ? B J M K P T R H K I H J G H I C I G F K N G J O O Q R T U T Y S N O O P S O S Q Q S M O O U W S O O O O Q J N P Q O R I J O Q N J J N G E H I P P Q J I L I P P R W b V T S Q W _ b _ \ b _ g e j o s o i l n k n v s s t x w | ~ v | t    
+   
+  z                                                £                         z                                     
+              }                            }   ~                                    
+  {    y |  z     ~ } y u x y u t w }  x  t u y x q s x x } u r j n r x u w r | v p y p r x }  ~ z w      }   
+    
+                 
+    ~  x x ~    
+     
+    {  ~            z  z } ~   ~ u x    }  { ~ u | w x   u y x   w y   | q u y { t s u | } v r  ~ o q k i n m m i o r r m i p m V T Q R M R T T T R M Q U S P R P M E B C ? E B C B 9 : > : = = = > A ? < I ? ? ; = C < = = ; @ : = C 9 : ; < > @ = < = 5 9 : B C B E C > @ G E A I H C ? ? G N N M J L G F Q P L L O M K T S N Q S P P L H J I K J J K F D K J H E L H G M J L I K G B A K I L Q K K A > D A ? G 7 9 = 9 D ? B C C C B > E = C B A ? D E > @ C ; > = ? ; = ; : F B > A B C ? @ ? A = ? D > @ ? 8 = D ? = : ; : ; C C A : < = < : 9 : < = A D 7 8 < 9 : B ; = @ @ 9 ; : 9 7 : 8 6 3 ; ; 9 ; = ? = ? 7 ; < 9 < 8 9 4 2 3 5 3 / ( + 0 2 1 1 5 2 5 7 9 9 ; 6 : > > 9 0 , $ 
+                                      
+                    
+       
+ 
+                     
+ 
+  
+                                                                                               # % / 2 . 0 8 6 8 = D D H M E J M I L G E G G D I D L G H B J S G O S I V S I N L N R Y P L R R P O T Q V P N U V S P R Q S R S O M Q V O K L N L R S Q P M K B E F N R J N N P L P U W S b V Y U P U Y ` ^ f m f ` a g l j k l v m o p r t o o { y v r  y y ~ {  { x    z              }         £       
+           Š                              | }      
+                          
+     
+            }       x                         
+                                     
+   u v } z |  ~  | z ~  | o z y z u m p x w p t t r u } m q u q z u t n p k r v y t n t s q t t x ~ y s v | }  } ~ } ~        
+       
+ | }          
+   
+  
+   ~         
+        ~    } 
+     | {   ~ y     x t y v y s z y |  | y z v  { v ~ } x v p { w w | {  {  t x z o r m o u q m j h f ` Y P V V U P H O I O T Y T K L K J H B D D > 8 ; ; 9 A > < ? = = = ? < @ > > ? G 9 ? @ < > C B < ? A : ; ? B @ : : 9 B @ ? > = A 9 @ B F H E D M G D J I G G J L H G I O V R O K N P M K Q O Y L K Q N P O R K M K K N E O M P K P I M L G L J C D D B C B F G D D A @ N N E L G @ E B C E C > C B ; < > @ : : 9 ; ? @ A = @ C D A D C B = : ; > ; A : @ = B D E A @ ? 8 8 A = = @ < ? A ? > = ? B ; ; @ @ : < ? > : = = < : < A @ > : 7 7 7 8 6 ; @ ? ? D A @ ? 9 7 ; > : < < > 8 ; = D C B < 7 = : 7 9 ; 9 7 4 4 5 5 ) / 7 0 . + 0 . 4 2 7 3 8 4 7 6 : 6 3 -                                         
+                
+    
+                          
+                                                                                                    
+  % ( ( ) / 3 9 ; = ? @ E H J M M M L L J M J E D F C D G E K O J O N J Q L J K P K Q R Q O L P P H N R Q T P X S O L O O R M O P R W T T P M K M N P P P I O J I K F A D P M L L M S U U Z V R U S S X W ^ j k e c a g p e m k p m g l i g p y v u t z { t ~ } z }  z    u t }      
+                                
+                       ¡                                                  } 
+ 
+           
+   ~      { z      
+ ~                                              |     ~ { { z   ~ x | { } x s v v r p o l t v r s u r x ~ t t s n q o { r t u m q u x s x w t h u w ~ t y }  } ~ u { ~   v }     | 
+        y {                | y    }   ~      
+ 
+ 
+ }     
+    |  | ~ {   }    t |  } w o s | v { t   ~ t | } z w } v } p v v w {  x  y w y u p l s t k b _ ] W U T [ S Q P M O N I J K L O L E A ; > 8 8 7 7 6 6 6 7 7 6 : : = > ? @ @ < ; @ : D C : : < ; @ ? A < B @ = ? > ; : = = C I H A B B = B D G E I K L J I P I N K H T P T P P Q S U U O P N K R S U U J K K N P H M G P N O Q H M S R I K E H K O Q J E ? C ? D E D G H B E A E B E G C @ D D @ G G @ ? = = ? = = : 8 ; = ; > @ < < ? E > < = = 5 @ < > ; = ? E D F A B ? : = 7 5 : = : D 8 ? > A A < @ @ > > = E ? > A @ ? @ < = ; 8 ; = = ; 4 8 9 9 2 8 > 9 ; A > 8 ; = ? : @ < @ B D < ; ; @ : 8 ; ; : 5 1 4 > : 9 6 9 6 3 + , - 3 / 1 3 2 5 2 4 2 7 7 4 ; 9 3 3 ) $ "                                                                 
+                        
+                                                                                               
+   ' ' * / 7 7 = > = = @ J R I E E E J O L E F G B @ D E G L I G L J R N L N S V M M R M Q M M L M I O L P X U W W U W Q P R S Q S N N M N R M S I J Q Q T O M O K I J I L O N N O W Q T P R Q [ X T \ a e n c h i o o m l u n o x l k p q m t w v | w y x u { | 
+ 
+  z |                                                                                
+                                   } {       
+   
+   }                                                 ¡              |   
+ ~  z | u t r v x x v { u q t z z r o p r u { y  q w s t p s t | q s x r y p r t y }  v { l p v x y o y }  s v ~  x s x      }    z  
+   | ~  }               {             ~ | ~  { {       { ~   z  | z z { y x v { { { y y  u z x  
+  u z | r w x p { } t y w x  t w w x { u r f h a [ Q O O K M V S ] S K J L M E = = ; @ < 9 6 4 8 5 4 5 7 4 8 9 1 9 3 @ D ? = A B A ? B < < D E B = ; < B B B A C B D G A > ; ? D K G D F B D G K J H G M I O M O M G G R M Q S X P R R V J L U S P S R P O R G N M F C B D D J M O Q P O M L N F J D J I K C E C L C ? H I H B F F @ F G F A G I @ D D C B ; C > D B @ B > A ; = 9 < 5 = < > > 9 : 6 ; : A ? D 8 8 = B A < B @ = ? > < > ; : 7 = 9 : : ? 9 6 : : ? ; ? < A @ = = > = : @ = 5 8 > : : ; > 9 : 9 ; : 6 5 < ? : > D = ; 9 ; 7 5 > : ; ; < ; ; B D ? 4 2 5 ; = = @ ; < 3 . , - 0 . 2 2 2 4 6 3 3 8 2 8 5 9 3 , , %                                                                                                                                                                                          ! ' ( / . / 6 8 < > ? @ D K L Q L H M K R S J H H E G F B F I H G G K J J G P P O H O Q L R L I O H H L O R P O V W U P R T O M R N S O L P P J O I Q Q M L O T U N M M G I I O N N U R U U Y W R W \ j e c j f i k v x u l t r s t n l t t q u y o | x  { {   ~ 
+  | ~                               ¢                  ¢                        
+ 
+                 
+  
+                      ~ }        | |             
+             } ~                                        x  
+  } w u w w t } y w q v w t p z q w v x q n o { { ~ y s s t q s w t s g o i r r w   z x t o z n p x t u y | { t  v q t w x ~       
+ 
+                
+    { | 
+  
+  
+   ~ 
+ |        ~ y s y   } }  y w | } { y } | ~ s |  v  ~ |  z w x u s x |  t z y o  z t s n v t x z z u { q u y m f c _ Q P N O L E G K L Q G E ? > = ; < 7 = < 8 7 8 9 5 0 3 2 4 0 4 7 6 : 9 9 = ? B @ B C @ D D F C C ? < 9 ; C D H G F C C = C B F A B C D D C @ @ B L P J J W U Q P Y Q K O J Q P P Q N Q K M F H K O R P M R O Q L L F D K J I J I H H T J L I H D D F G K C E B L I P E G G I C F D K E D H H B F B F ? C C C ? C ? D E B ; A G ? D @ < < : = B 9 = = ? < ; > C @ A B = < > A @ D B @ ? ? > B ? ; : < < ; = = : 6 9 = ; : : < : : 8 = 9 7 ; ; ; 8 ? ; > > 8 8 6 < < 8 6 7 9 9 @ < > 8 : = < A 9 ; > A A ? < 9 > = @ B 8 6 9 ; 8 ; 7 6 7 0 3 / 1 4 5 3 3 3 9 8 8 9 2 6 5 6 2 * ) " 
+                                                                                                                                                                                        
+ ! " ( 1 0 0 4 5 5 : @ C I E K O L K H H P K L K I I I I D L L O I G G K M H Q P U N O M I Q K J E L M J J L N M S S P M O R N H S S L O Q N Q Q N W U L T J N P O H G N Q G M L L M S T T Y U V Z [ _ a a k j j q v v q n j s x q t q j w x r  { }  z y } x y  z u u u } 
+   
+                                                                                            
+      
+                   |      {                       
+ |                                     v x x | |    } z u |  r q { y w  y z q q m u } w t w u } y w w x u j p u p z r o i f p r u z w v q p r s p r w x |  } | v t x | }   ~                }         
+  ~ ~       
+ ~     
+     { | m x }  y z | z   w ~ u  
+ 
+ } u  ~ }  |  z w { } y y s z w s }  u } x x w u v  z |  s t f b ^ ] U S U P N I J D C @ D C > : < ; 7 6 0 8 : 5 9 4 4 ; 6 2 2 4 3 - 6 5 1 5 9 = B 8 : > C A D C B ? ? ? < ; ; @ = B A D H C D D G I B B D D @ H B H D C L K Q U N N P N M Y T P I L S S M J C L O K H K C I L L J Q L O K H K I E ; C J N L O O J L D K D E H J I D H E I H J K M N C C G E B G @ C E @ E E J C G D I H G ? B F F C H D E C H H B < ; = ; : 9 > : C C B C A H A B @ B : @ ; @ C < A ; A : : A : > 8 B 8 9 @ = : 8 ; 9 9 2 6 5 3 4 9 7 7 : @ ? = D @ 9 : 9 < > 9 < 8 9 7 8 9 ? : 5 6 < 7 : 9 ; = > 8 : ? < : > 8 : ; : 5 : 9 ; ; 8 2 4 8 7 9 4 7 < B : 5 4 2 4 7 3 0 ' (   
+                                                           
+                        
+                                                                                                     
+   $ % + . 5 2 2 8 9 @ C I B J H G O I K E D J J D C B B J K H L K M P K Q P H O Q T Q L Q S M L N I E H M Q L H J U N P P W R J P N P P O S P J P R S N S P Q Q V R O P T R R U Q S P T Y [ S V Z _ a c g i q g t s t n v r  y { p s p v z r | | z |  } | x ~ | x | } } }         
+                                                                  
+                                                    |                                ¡                €             } u r ~ | |  } }  { }   r r  {  w  } w r o n | v { | s r p r z u r k n l r p m o p w n s s u s x t t m x o v  z {   x v u y   } { } }  {     
+  }            }     
+  |            {   
+   { o ~   }  ~  ~  | { u  ~  x { }   x | {  {    y t z  v y  {  r u y o w x y u u o d a Q Q T O J K E D 8 : > 7 6 8 : 5 5 4 ; = 6 4 8 ; 9 = 8 8 : ? < 9 < 5 0 2 9 8 8 < = ? ; < A > = ? ; D E C : : ; B F E I K E C H K H K G K G G B B H F I K P Q O T T S R R S U R I N O J T V K O I E H J G K H J O X H R M L C H M J E D L O I F K K J H C J G J J K H M J B B C G F H H L M F C C D A H A C H E ? H F D B D D E H I C F F H D > A B ? ? < : 9 8 @ 9 < < : A C B @ C < ? C A @ = ; A < : A C ; 8 ; > ? 9 < 4 = B C A ; > 8 3 3 7 7 7 9 B 9 9 ; @ 8 9 > < : ; < < : 5 9 : 9 = : ; ; 8 4 8 8 9 = < 9 B < < 7 7 < < : : 8 A > 4 8 A < 9 8 8 2 7 ; : 6 < > = 8 = < 7 6 / 3 0 ) ' !                                                                                                                                                                                         
+ ! # % , - 3 5 6 8 ; : > ? G L M L P K N C H C L L M M K M K G G R R N C I O P Q L P Q M M R M P R N G J S Q T I R Q N N L S N P M N T W V Q T O N L L K S M J P W X Z V R R W T Y W T T ] a Y V Z ] l ` b l p j r t u g v y 
+ z z y r s w  t w 
+   w  t  { ~ y y } |                 
+ 
+  |    
+ 
+                                                                        
+     
+         
+    
+                  ~ |                                     ¡    £             |  u w }   y z | } |     x   | y z y w  y p k j s { r o s t  v k i j l q p r o p s o t x r x  x s p p s p y | t y x r z  {   y x ~ ~ 
+ }          
+   
+  ~        ~ 
+             
+    
+   y }       { y z   z | |  | } w ~ ~ w } {  z x ~   y   { z s } w w w v z x x u i b Y Q W K C B C ? = ; ; 6 4 : 7 4 6 : 2 4 6 = 9 @ < = : 9 : B ; < ? < ; ; ? ; A @ ; 9 7 < < 9 = ; > ; : B J C B @ C @ H H N E J I E K M M Q L F F R J K L P L \ V T R W V V P P O R M Q O O T T V N O N K L J K I I M L M M M J F E O H G F I K M H I J J Q M E C G G H J L H F H J K F F K F K F D B B B ? B J L K E ; B D G D F C G I G F D D E @ G F B < A D = 8 3 ; ; E G ; A A > B B C D @ = @ D B H < ? @ ; 8 8 9 ; ? < > 8 = = = < A ? ; 6 > ; > > : > : 4 = 9 = ? 8 > > = 6 > > ; ; ; : 8 < 9 = : 8 = = : > < : > ; > 9 7 4 6 > > 9 ; 9 : 8 : < ; 9 0 4 6 8 : 8 8 : : : @ > 8 3 9 1 . + $ !                                                                                                                                                                                        
+ 
+ " ' ( - / 0 5 6 7 : ? A D I I G Q N I I L K F H J O K V L O R M Q R L J L H M T S Q K M L L O H P M I J J O R J R O M J Q S W T O T O U V X R S S M W U M P L N U T U R Z V \ ] Y W W Z ] _ X V ] b k c f k m o l r o j q u v  { s o t r r w { 
+  ~ z | z  z { } y { }  |                
+             
+                                                                  
+   
+                              |  }   z                            £                       } } w v | |   } z  
+  } y   | | u s w | t p | q m r s w y t q { q y t u o o o r s r i o u m n t u p k q w s w w p  z u r u z z x w    ~ {   w  ~   x ~         } w  
+ |     {     
+ 
+    }            ~    { y w } }        {      ~ t y t x  }  { ~  z z } q x ~ t l h c [ W X O O P ? 5 3 7 6 ; = 8 3 5 6 8 = 6 9 8 8 8 : < < B @ ? > > F ? B ? A D E D I D ? > ; < : = ? ; > 9 = = C D A H G E M P P K M M G L M O S U Q N K O G R L U R R K S X M Q V S K O Q M M S R O Q T P R H K J I M J M G I I J O I J G Q J E E I G N I E N G H G A E N K L Q F > E N H F B ? F G L D D A B B D ? I G C F E = = @ B E B F ; @ B > B I L L G A C G C E @ > 9 8 = @ = > > C = 9 > C > < < B A A ; ? A @ @ D = 8 @ = ; ? = ? ; ? ? @ ; 4 > ; A C ; 6 4 : ; 8 9 > ; 9 @ ? 7 ; @ ? : = ; 9 7 8 ; 9 < ; ; < = 5 : 7 8 8 5 7 > ; ; 7 < > 8 5 7 ; : < > 6 7 3 3 1 : 8 < ; : > > < 7 6 5 . + ( 
+                                                                                                                                                                                          ! # ' . / - 1 1 ; ? E I E G C G S O R I P S L G K T M M L I L Q M K J O S P K L L I J V R K K P P M M O F J N S R U Q O S U S Q P K K U V X T P X [ S R H T O S O W Q V ] Z W Z V S V Z [ _ a \ b j f g l q s v s p q s u y t  |  y s r s w y ~     z  | z w { {  
+                | 
+                                                                                
+  
+ ~     w            }    ~                                
+          ¢                        w x y ~ y   ~ 
+ 
+ { } | {  ~ p q o t w w q n s v r v s u y z w w m q u q u r u t s v t s p p n w p n l j v v w w z |   x s t t u z 
+  { w s } z ~ s z y | w 
+ 
+         z w }   { } u w  |    { } { z z               v  t | {     | z   y 
+    | t x  z p   |  | u w z { s z z i _ T R M M J G D @ 6 . ) 1 2 9 5 4 5 6 1 1 < 7 < < 9 ; 5 9 : = B G @ B > = ? A ? G G E G C E D B < > B : 8 ; : ; < ? = > M D F T R N Q P K K S P J L P P M Q K J J N P R P I S P K O O P M I P O R K P O R X S H L K N K M N M F D I D K I H H G F L O H J H J G K G D E L N J G J G D A B C A @ A > G E L K B D B E @ > B G L H E C @ D J D B B B H F A C B F G C A C H B @ < @ : 9 < < < @ @ @ = 8 < 8 ; 9 A @ @ B ; ; ? ? = ? @ 8 9 7 : B @ < 9 > @ = 8 7 9 < < > < : 7 < @ ; B < = 7 6 < 7 8 @ < 9 < 5 7 7 9 : 5 7 ? 9 : ; 4 6 1 3 3 2 6 6 < 7 2 < = ; 8 4 6 9 7 ; ; 3 1 , - 0 6 < = = : ; 8 8 7 1 2 * $ # 
+                                                                                                                                                                                        
+  ! # * 0 0 0 1 8 @ H C E G K E H M L L K J J B E K M J K H M K L M J J S S O K N O P O S K L P O P M N L K K M N U M J K Q W O O H M U Y Y V T P W V P S P G L Z V V U V T R V W U Z Z X Z ^ a k h i g i h s q w t v r x x t q t |  w { } u  } }         { }                
+                                                         
+                                 
+  }            
+ 
+             
+   
+      
+ } }        ~                                  
+ { x y y z |   {   s w } { o w p p p p q k r w r x y o r o r i r r q n k n r j s l p p p r q w n m o n n q z y p r q w y w w w } p u u y t p  r w o w r k q   
+           ~ o     } | x {   |  w  z  
+   } z       
+    u r  y { y s t y x   z  | } x w r p z v o r | t w { t v y v l f e J O K D A ? D D < 6 0 + * - / / - 2 : 7 6 5 1 3 ; > D = = < > ? D A D K F G F H B B E G I G C C D D I H H : > ; > ? ; ; F K J G Q N J S U R Q R Q M T V Z P O P O P Q M P N Q K J O O N I L N Q N L H F L H M M L R L K G E N L L G H K G H B H D G F M D H D H L J E D J O H D C B < @ C E < D E ? A D ; @ D A A @ A ? > F C F G @ @ B D F B B E D A @ E E > ; ? E D E ? A ; 6 @ ; 8 ? A ; < 8 9 9 : 7 < G < ? C ; = : ; < = 5 5 B 9 ; 8 5 = = 7 < @ @ ? ; 7 < < ; = 8 6 > : : 9 : ? @ : : = 5 3 ? @ > 8 8 : : 6 ; 3 9 8 8 7 7 5 8 8 4 3 3 6 5 ; : 5 ? < 4 ; 8 6 4 ; 6 8 2 1 0 1 1 7 7 : : = 8 @ 9 : 4 / & " !                                                                        
+     
+            
+  
+                                                                                               
+   $ + * 2 / 4 : ; A C E I H J D K H L I K I J J O K J L L K J F H O O Q S P M K K R S P N M Q Q P M P T P P H N X M S R Q R M W R M P M N P R S O K P T L Q Q T Z Y Y _ T Y ] W X ^ ] Z d ^ f g j s p w r r r z z y t  x y k | | } ~ |  } ~ { t        ~   |    
+       
+   
+        
+                                               
+                                     ~ |             y             
+         ~ | z t }   |                           ©           { w x } z }  
+ o y }  } ~ s n r r v p { w w u u o n r q u c j m q x t o p k q x u m j j l j v n i n p f k t v y q x z p ~ { x u } w p x {  w  z u x y x w x |  { {   
+   
+     | 
+      {    ~ w   
+ 
+ |  }  | | {     x }   u s  { ~ | u } x z z  s w  w y t x z y r p k u  p r u p n m a M H ; 6 ; ; : = = > : 5 1 / , / 0 0 1 5 6 ; 4 = 9 7 7 @ ? B E B A C G I F L M G L M G D H K J L M K M H L P J E J F A = < E G J P K L L P Q Q V V Y \ W W U P K R M N O I Q Q M R M N S O U H L M J O N H H I H J N M H B I H I I K J C B I O H J J G I D A I I E > K O C G A C @ @ @ F @ @ D D 9 @ C C D I > A A C G ? C A @ A A E E C @ < @ > D A D E B < > B H B A E I B : = < = < = B 9 = < @ ; = @ < ? @ @ 8 ; 7 8 ; 8 < @ ; 9 : < 8 < 9 ; 6 7 = B : ? = = < 9 ; : B 9 : = : : < 9 ; ? 8 < < 8 6 < D ? 7 9 @ < 3 4 4 4 7 2 3 9 8 : 3 6 2 6 ; : 9 : @ : ; 7 9 9 8 : 5 7 < 6 3 8 3 4 : 9 ; ; : : < = = : 5 + # # 
+                                                                                                                                                                                         
+  % ) ' - 1 4 7 8 @ D H I J H H C I E G R P M L K N S L H E J J M Q T R Q M M K J U V M S M N O M J P T K L M N U P V Q R Q L T S L P S T P S O Q G Q V O T N S Z X X X T b d _ R X W ^ Y ` ` d o n s s p q q w w { } { | w r y y u |  ~   | y        }                                                                             
+                      
+           |           
+           
+          
+      }    t |                                   v } t u u  | {  t o s  z w m g n y q w n s l q r p v n n p s h j q w t g d l j l p s m k q m k q l m l h g n x z | w | u t { | t l u t w x s u } y  w v u x } x w ~  p r z w      z { }     {  u     z    z v  x z  x w | }  }   z } w w | y   z w s w v v w } t z | p y p r l o j u y t t p a X I H = 6 5 5 6 2 8 5 : 4 7 9 4 3 0 2 3 6 4 8 7 7 8 9 8 @ 9 ; > ? @ E = B G K L P N P S F H D G L Q N N U L J L P M F H F E B D B C G G F L H K M U N R W T Q T P I J M L P N I R O J R Q Q T N S L L K J L M F G M J P F H F G F M D E G E J A @ H C E C G G C B G D B B D F C A ; = C E = ? < 8 ? A @ @ @ A H F D ? A G B > B ? < : B F A B H E I D C A B B 9 A ? A ; 8 = E E @ B : = < < = = @ A A 9 < A ; 7 ? ? ; ; : 9 : 7 : : = : : = 9 : 6 4 B 9 7 < ; : @ ? < : 6 7 = 9 : > : ; 9 6 7 ; 8 / 8 : 8 5 6 3 7 5 4 8 7 7 5 5 4 / 0 2 7 = 6 5 5 : 9 @ C > : 4 7 3 5 ; < 6 6 : 8 < < : 4 0 7 6 2 3 9 7 8 > @ ? 9 3 ) " 
+                     
+      
+                          
+ 
+            
+                      
+  
+ 
+                                                                                              
+ "  ' + + . 1 6 7 5 7 ? C E H K D I F D C J R N I H I I N L M F E I L J Q H L P K Q R X P R P M O J I M I I S T T Q I R P X V T R P M J N U S Q Q N M N S N Q R Q Q ] X V [ _ _ \ Z _ ^ a ] a ` g l o u t m i k s y z x w  z t v u r q w    v z z | ~    ~  |  
+    }                                                                               
+                   ~   ~        
+       ~      
+           y ~  ~       
+ | y }                                 
+ }   { ~ { x v y y z u y v p v l o t q s p i e j l m x p n m m i l r  x j k j r l m m l o o i m h j h j j o l f r w w s q s { n i h o v v p y z x t w | y t u |  x  z v w u z |     u u }  x { ~   y }  ~  ~ ~  | w z     } z w x  z  ~  } w   ~ | w y w u w v y o v r v u s y q g t s p w v g ^ O E ? 7 ; 9 4 2 1 2 / + 5 8 2 7 3 7 0 / . 2 6 0 4 7 @ : 9 9 ? 8 > B > D G A C J D I K N N N M P K L L I P O O U R S R S L F G N M I F B E < = H I A J L D K M I F E G L H E M M N H M T I G I G H O S P L D M R I I L O L K B M G I M K E D @ B H B E F H @ D G F D D G G A > D C F > A D E C A @ ? = > B C C A ? D < F B = B C B B < B A A D > B D ? A ? B < ; = ; ; > : 8 < ? = ; < 8 ; = < @ ? 7 9 ? > : 6 < > : > = : 6 = ; 5 7 < 7 ; 7 : = : 5 5 8 = = ; ; 9 1 5 < : > 8 3 2 5 7 < 4 8 9 5 7 7 9 5 5 9 5 6 3 4 6 4 3 1 3 6 7 8 2 + / 0 0 3 1 3 : > 7 7 4 5 5 1 7 3 3 1 5 ; 7 6 5 9 9 < 4 2 5 7 . 4 7 3 : < 8 8 7 . . (              
+             
+ 
+ 
+            
+              
+          
+ 
+ 
+      
+       
+ 
+       
+   
+ 
+ 
+                                                                                               
+  ' ) , 0 / 1 3 7 : > > E D M H D B H H J L I J I O P N K M J F F D I P O N K K S R M L O I L L I L K L I S R V N O X V [ T W V L Q R T W U R O L R N N Y [ Z S P W U V U \ Y V ^ a a b [ g d h k m n q q l o s v v x v w z } x { w } y          } 
+ ~ |                                                          ¢ ¡         
+ } w           
+     
+          
+         ~ |               z y y         } }  x       }       
+  ~  w  
+                              
+  }  | }  | w x x y { v s w t t k k v t m l h h i k o x u p g o h h h u q k i k p k j h e k s q l h d h e k q j i g u w r e l i r v r r w v y  t { t v u u t w p m t v ~ { v z { s }   | p 
+ 
+ |  | y   x y { w }  w |  
+      } } z z { ~  x y z v t s u x v n t v r q w r x x z v r u u q p v n g Y I ; : 9 3 4 2 4 6 1 0 / 3 , 2 8 7 ; 2 - 2 0 5 5 7 4 : ; < < ? 7 = A D I H H M P I R F K L M T O Q R Q P N P N M V O P V Y U O J L T Q O K N E B E F G I D C B < @ B = @ D B C C K G H I I K K F B H E K J L L H G H F B H M F J D G B D B H H D B A G E F A @ F H G D E F L F A A D ? H B B ? A G @ E ? A ? < = D C 6 = 9 < > > B F A A D B = ? C < A D D ? = C A A > : ? > ; B ; > 7 ; 9 ; ? > ; < ; < 8 : : = 9 = : < 8 8 9 : < : 4 3 7 < 8 7 5 8 ? 7 7 ; 9 6 : ? : ; 7 ; 9 < 1 5 3 9 8 4 6 4 ; 4 2 / 5 8 7 7 : 8 8 : 8 5 5 . 5 3 9 7 4 2 3 6 1 5 7 8 8 < 6 9 4 7 7 4 6 0 2 2 6 8 9 3 2 5 7 : 6 1 . 0 , . 2 4 8 7 ; 9 8 0 ) #                  
+   
+ 
+    
+ 
+ 
+         
+       
+          
+ 
+        
+  
+ 
+ 
+     
+  
+ 
+ 
+ 
+    
+      
+ 
+  
+ 
+ 
+                                                                                              
+ 
+ " & * - 2 0 6 5 : ; ? = = B H G ? F H B D N I D I J H K H H E H K M G G P V P M U R K O S P R I J P H H K R T R O S U Z Q R T L Q M O R T S W P S T R [ ^ Y \ W Y ] W X Y a W Y ] b b a ` j j h o n q v s p j w s s u z u   | } y v w z      z | 
+ { z {      ~             
+ 
+           
+                                       
+ |                 
+            
+ }                   
+           
+         
+      
+                                           z x z  ~  {  | w  { u w y y k p x n l s s p h u r { z o k j n g d l m k l t j i v o g d k p o o d c q j d n q k k u w r m p m } q t r k r z z w y n v r z v q q s z u x } | t r }  } | u   p s w x y | t u x    p } { 
+     v   z  y | w v y t u u w s w n o r q o p p s r z } y s y  k i ` R E < 6 6 3 2 1 , 0 2 / 4 0 / 2 1 5 1 2 6 4 6 4 2 1 5 9 9 ? ? > A : B A K K H J P R X Z R G P R Q S Q Y S M S T Q S N P Q P Q M O F L M K O Q Q V S L C G @ D @ > ; < < @ < : A B = B ? ? A H H D G F E H E D G J N H E H A F L J L D A D A J E E H B H F E B D F B ? D C H E I I D D G G E E E A D C ? A B @ A < ? > > < @ D < B @ : B D B = @ > ? = = 9 A = @ C B B ? @ 3 ; > > B @ ; = : 8 9 : < < : 5 7 8 < ; ? < C : > 9 : : 2 4 4 9 6 0 4 8 8 7 ; > ; < 8 9 8 9 > < < 9 = : ; = 9 ; = A 2 4 6 . 7 3 6 3 4 = 6 1 4 6 6 ; ; 5 5 3 9 5 3 6 3 7 1 5 1 5 . 7 7 6 1 7 5 6 9 5 4 1 3 2 6 3 : 6 7 9 4 < 8 5 4 5 2 0 5 2 4 4 5 7 4 2 *   
+                        
+  
+ 
+ 
+              
+     
+                   
+     
+   
+ 
+    
+  
+ 
+ 
+     
+ 
+ 
+ 
+                                                                                                 " # * - - 0 0 8 > > A F @ D G E ? D D G H G H G @ F ? A C H H F M Q F I I O K M T L M K I J S Q Q Y S O M G N S O Q Y Y T Q O N U R L K P Y V M L S T U W V [ Y V Z Y ] Y \ ] a ^ ^ f d b f j k i l t u n m p u m s p |   
+ | w s w  } | y ~  ~ } { z u y u w    
+                                                                 
+ 
+      
+                         ~ 
+ 
+          }       ~           x {      ~                                              y    
+ { |    
+ } { ~ y m s t z v o z o g e q p k p s t y k q l l i j i i m r w p m q j r j m i i p h j t i k r u f l q m t q q w y u r t j q r t z u q k k n q s n s  v u   p z ~ | 
+ x |  
+ | t s  ~   | z   z y   | x   s u z { w q t v v x s | o t y j l j z p p m o n x x  { s m t h Z J E ; 7 2 2 1 / / , , 1 . . 0 0 / 4 9 ; 3 3 5 4 6 2 3 4 : 6 = < > A > C G J O J M Q S O Q V P R V Q N Q [ X R L Q W M Q P S R P Q J I F L R M L L P P X P G H A > A < < > ; ; 5 4 ; B ? = = @ ; F > = B D L H C A K R G H D D F L L J J D C D C F E D G H E E H G E G D C @ @ A B E G B E F G C E J H @ : > @ ? C D D @ ? 9 9 A @ > C A C ? B B @ > ? > G < ; = ; > B > = > > 4 8 < 7 = C < < < 3 8 < 6 : 9 9 4 4 ; 8 ? > > 8 = < 9 9 7 2 3 4 6 1 3 9 5 3 < < ; 6 8 3 8 : 5 3 6 9 7 7 ; = 7 6 9 8 4 / 7 1 6 5 6 5 6 3 2 6 ; 8 8 6 6 7 5 2 0 3 . 3 4 3 5 5 4 8 2 7 4 1 1 6 4 4 4 5 3 4 5 2 3 8 7 < 6 3 6 = < 3 5 5 2 0 1 / / 0 5 6 3 0 (    
+                        
+  
+                                
+           
+                 
+ 
+ 
+ 
+ 
+                                                                                               !   # & - + 0 5 6 = B C F A C I D D E @ H N N H I E C G H D D E K L N L E J F L P P I J L K S S L Q Y R G Q O P V O O T ^ S V O P Q T O L R \ T O P P U Q R X [ Y U S O [ U X ] ] _ c g c b j j k j l t u t j v z w x x v y | | } } t | ~    |  w  { v r r } } u                   |  
+            
+                                       ~      
+         
+ 
+              } } 
+    
+ 
+   { |   
+      {                   |           
+   
+                      ¢      x  } z ~  
+ } | x  q y x w u o o o k k s p o d g r k k o m i r k j p h j r f a m p j p o u s n l g k t o i q o v p q g t { j n l i o q o x i l j k p w u r j q h q m r r v q w { } n z z  ~ ~ |   { }  y ~ z { w {  {  x  { x x { t y |   { y w r t u x z }  x u i i r n r t r r l s r h j ^ Y H E 6 7 6 0 0 . , , + - ) 6 3 1 / 1 2 2 4 6 1 2 5 9 5 3 9 6 ? < @ A = D C H I M Q O K O R R Z X T U [ X Z W [ U M Q I S N Q O R M D A J M P N L T N N Q T O Z U R M O E D > A ; ; 2 5 < G @ = = A ; > 7 5 < ? C > D ? D F G F E G E E J F H D I I < C D @ E D D H I @ C E A J E B A F I ? B E C @ A @ E G A ? 8 ? D A E E @ > ? D @ A < ? C < = @ > E B ? ? B < < > = ; < 9 ? E ? > 6 7 : 9 ? : 9 8 6 8 ; ; < : @ = 7 < 6 9 ; A 8 9 < < ; 3 0 0 4 5 0 2 7 : 5 8 5 9 3 5 8 8 9 9 : 2 8 7 5 7 7 4 2 > 6 3 7 4 1 3 4 1 1 4 5 1 - . 4 3 7 1 0 5 3 2 1 0 2 7 7 2 2 0 8 5 3 5 1 7 1 4 3 2 7 / 3 6 4 4 9 7 9 : 8 3 5 : 5 8 8 : 1 / 1 0 3 7 ; 5 - ( !                              
+                  
+  
+                              
+          
+   
+                                                                                              
+ !  ! # . 0 7 5 : > = @ B A K C A H L H I H H H L N E ? D C F O J H G M G K P V Q I J O P Q O T V Q S N N H S O U T P N V P O K M W Q K O T T S K S X T P V ^ [ T S Y R d c _ b l d c f i g o h j i r { y v { y {   } v z  } } | z           x w | x } y       
+                                                          
+                                 ~    y  
+   
+                 
+    { |        
+    y       z  
+                                   
+      y q t x y y | t h i s s l k q i f l h j g m r i i i m v o h i h d e l _ c e v p k h j s l f ` j i r z u m q s k p l m l m r r t p o o u x t k o { z r m n r x z u w x  | y  | |  } z  {  ~  z u x  | | |    { z w s y { |   } x z u y    u w v t o p v q s t v n d a P E = ; 9 8 / 3 2 0 - 1 + * . * , 7 6 6 6 3 7 6 4 5 5 5 9 8 1 9 = 5 = 9 @ B G H M N H P W U O T S V ` Y V \ ] X Y [ b ^ W U R S Q U O K J B @ H Q P R P U T R Q O M S L T M I I G G H G > ? A A D C ; ; < 4 8 7 : 6 A > < ? = A C ? A A C A G C F G D K H C F A H D A D C F B B H > D A C = G D > > E F ? @ B D E ? ; 8 ? F F C B F ? = E G F > > A < 8 9 < < ? : ? < : = = 8 8 B ; ; ? A A < : ; 7 ; < 8 5 5 7 8 5 5 7 : E D 4 2 5 : ; ; < ; 9 4 6 / 1 6 4 3 6 5 8 : 6 > ; 2 4 7 7 : 8 9 5 3 5 8 9 4 5 0 7 1 3 6 4 6 4 8 6 , 1 , 2 0 * 4 5 5 2 8 7 2 0 8 1 1 2 2 5 5 1 7 5 0 4 0 ; < 9 < 8 2 4 6 7 7 6 : 5 : 6 = 9 6 ; 6 3 3 8 8 3 5 4 2 3 9 6 - ) $ 
+                                                                  
+                      
+   
+                                                                                              
+  # ( ( , 0 4 0 7 6 5 ? ? > H F B C K H I G C B F K K @ @ ? H N I H K O J N R M I L I H M M N T O L T S M N X P S Y S S R R Q R R X R P T T T V S W X [ U X W V Z [ _ ` ] c i c ` i ` ` a e r j l r r x x u { | x { w { z y | x x t z | } 
+  z  ~     y   ~ } 
+       
+              
+                                                                    
+                    
+   
+                       
+     |       } }   
+                              ~        x s t { x m p v v k l w s o q q k l q j l k g o h i g d h p m e j h g m ` m n n r b n m q m k i l k q s u p o r e k n n q k o o m m p m r z x k m w v | s q } | x x w v  w { z | y {  ~    }  ~  w z   } ~ { 
+ } p u u ~ ~ s   ~ y s w v v z } o p t q n s k t t j ` U K F > ; 4 : 8 6 1 2 5 3 1 0 2 / 5 / / 9 8 6 8 9 6 0 6 3 : 9 4 8 9 9 = ? D J G K Q P P T R T [ b _ e ] W \ ^ ] U ^ W S Y ^ [ S S N O Q R L K G D G O O R N P Q U R I L O N R L M K H J E M H I F C J K G A ? @ 9 9 3 3 > F A > < < = ; 9 = A ? ? B G E ? F M B > B B @ E H D D C D D C B C F A ? C B ; B G ? > ? B G > = < ; > C = < B E = @ E H D D A > < ; = > = < ? ? ? > : = = = F C > = > B @ 9 9 8 = 9 1 5 8 6 2 8 5 9 : < @ 9 5 / 3 8 : 9 8 6 4 6 0 1 1 6 : 4 8 ; 6 : 7 8 5 7 ; < 9 9 4 5 4 : 9 6 4 3 3 1 8 5 5 7 3 3 4 9 3 0 - 2 2 4 3 2 5 8 6 3 4 2 3 6 4 1 . 0 4 0 3 3 9 3 6 : = 8 9 : 5 3 7 5 8 5 5 6 7 6 7 : 8 7 : ; 6 6 4 2 3 3 6 8 7 1 2 + " !                                                                                     
+     
+                                                                                                ! ! % ( + / + 6 3 5 = ? ? ; ? F B C B C E F G G G D F @ B ? G K G G J M H O J F J L F L L N K O L M S P Q O Q N Y W W T S Z Z U P T R O Q Q W X X V ^ V [ b _ Z Z _ c _ a g f g g b [ \ d m q p q | p | v v t y y t t |    | { x y   { } ~     | w   {      } ~                                                                  
+          
+          ~                     
+       | |             ~    
+                                          
+ 
+ ~   ~   | |   | ~ w q w m v v q r s t k m q w s m p m q l m e l o e g m n k g e l k q q s s j c i f c p p n l g h p q v q t l l s j i q u r k n w z o s u s t s s s s p p s z } v x  } z s } w y     }   ~ { r u ~ { t x { }  q p p s v x {  | x } w { y z u r m u q p n n j b U L D ; : ; 9 7 2 1 1 0 4 0 1 0 . 0 . 8 1 5 8 5 2 4 7 = 9 ; : > ; < 6 > > > ? G K M P P Q T Y [ Z ^ e h a ` [ Y Z Z V W V W W X Y P Q Q U P L C G I N M O T U M I R L L I O N L F N G E G H C E H G O I J O I B G ? @ = C 8 : < : < ; 6 7 9 ; < @ > < > : ? < ? @ D > F E B D G J E A A B A B E B B ? B C @ A ; : ? D F D D ? 9 B B B = = @ ; ; E @ E @ B < @ > ; A @ B @ A : 8 ? < < > = @ @ B = D B = 9 E : 7 ; 6 ; 5 < 6 : 8 6 5 < ; 9 4 5 6 6 5 0 4 8 4 4 3 8 : < 7 : 9 = 9 3 8 : 6 6 7 7 8 8 5 3 5 6 4 6 5 5 4 / 2 3 4 8 7 7 8 5 7 8 3 1 1 6 6 4 5 9 4 4 6 0 2 2 3 / 0 2 1 3 6 3 6 5 2 4 9 6 8 ; 9 7 3 6 7 4 1 7 6 8 5 8 4 5 ? > < = : 9 5 2 2 2 1 1 1 1 ' % 
+                                                                                                                                                                                          # ' ( / 0 0 4 1 5 : > A 9 A D B K J D K D D H E J O I B F C L G H K H F K C M P N V P O U N J K M R S S P K R S O N Y Y V U R X W Y X Q Q R S Z ^ Z V W Y a ] Z ] c h j f f d b j n i f i k s u  x u u y |  ~ ~ |  z   z z z t u ~  ~       {  }      
+ t z                                                                        
+                       
+                   v  
+ { |                       z   
+                                    } | | } z |  r x x | t u q q m y t r l u w o t q p m u n i k s t l m q o x r k e j o i n n f h k d k o y z n m s x h v p r x m n w k l o z p l r w o m u y  y y v x s p s { u s u y y x t   v v      } x {   | w w r } 
+ | q x r { y    } v w z  u j s s l p q p _ N I F B < 5 8 8 8 8 < 4 0 8 2 0 2 0 / 1 1 2 ; 8 4 3 8 6 9 6 9 ? @ B @ A = E F I I I Q U [ ] R P U \ e W ` d a a \ Y _ [ X [ [ U U [ X ^ P Q T L N K K B H Q L J Q O I D K O M M P I M J G @ C D I I L I L H K J J N J M H K K H H B A < ; < ; 7 7 7 ; 9 8 8 9 ; @ @ ? C I @ D @ E H E C > = ? = = @ C @ C D ? B C < : @ D H J H G D @ G B ; = B A A 9 < ? = D A A = ? ; < 9 ? ? : 5 8 = ; : ; < < : : < C B ? 8 B : 4 4 7 9 : 8 9 8 7 9 7 ; 8 : 7 5 1 1 / 3 8 8 6 5 8 8 : 8 : 6 8 3 ; 6 4 9 3 7 7 6 5 4 5 3 4 5 2 4 2 1 . 0 7 2 4 6 : 5 8 - 5 4 : 3 , 2 3 : 3 0 7 9 9 4 3 2 9 8 5 3 5 8 6 5 8 8 6 8 7 : 9 8 6 7 5 6 2 8 4 8 8 3 ; 1 0 4 6 : < ; : 9 8 1 0 - 0 - 0 . , $                                                                                                                                                                                         
+ 
+ # $ + , 0 0 4 : ; 9 @ B = B C I K E E F C I E A J M D > > K L G H I E D H K G H N Q O J O M S S P U Z W M J M M U T Q R O U Y Y Y Y X V T X [ ] ] b a Y ^ d a Z ] f e u p i o j l g k l n r x {    s } { z ~ {      w } ~ ~ |        ~  z     
+   
+       
+   
+     
+  
+     
+                                                                                              
+                 
+   
+                                         {     } w x | s w u n k x u { u n s u n s m h r q r m p i v t t j j k o p l n m k c m j k m t l l b n c i j w o q r k e h s y q x h m m p k m n l t x p s j o x w w v u q t s p p j k w | r n x } | w  |     } u } 
+  ~ w z u v } { | w | x {  y x } ~ w } } { w y j i l ^ T I ; = : < 7 7 7 8 5 9 9 3 3 8 2 2 3 5 0 2 3 4 9 7 6 6 6 7 < 8 4 6 ? A ? D E L U T W U W Z ` ` V S X ] ^ d ] ] [ a \ b c U Q T T Y Q V Y U P U R M O J I K K J O N P H K E L O M H C F I L I I L F I J I K M L I M K K K O N M J H E F D A ; ? : < = 8 7 9 : : 8 9 9 @ B < 6 A C A E F B B @ > @ B ; < E > @ = A A A @ ? = H E D A : ? B E F > ? > < ? B ; < ? B < > @ ; 7 9 = ; @ : 8 C ; 9 : > ; 9 7 9 ; 9 9 9 7 5 5 5 5 7 7 9 4 4 4 6 8 9 9 3 5 3 7 3 3 1 4 1 4 3 4 4 9 4 8 8 9 6 2 7 3 6 < 9 6 4 7 7 1 6 5 / 6 5 6 3 8 3 2 3 5 5 > 5 5 7 5 6 6 7 7 4 : 5 5 9 5 8 5 8 2 2 1 4 5 9 5 5 4 4 5 6 8 8 > : = = 3 3 4 : 8 : 8 : : ; < 7 1 5 8 3 9 9 7 4 ; 3 , 0 - / - . + $ "                                                                                                                                                                                          $ $ * + + 1 5 5 6 7 > C @ > F I G G M B H K J E D G F ; B C O O L J D G L F H I H I M Q L N U T Z N U X T Q L T [ Z R M S R Q T ] S U Y \ ^ Z _ _ \ _ ] ] _ g b \ [ h o l o i h r l b d f i n w y x u v { 
+ u ~    { }    } ~    ~ 
+ 
+   }   
+      
+                         
+                                                                       
+       
+                      
+         y      | { x ~   
+                                  z {  } { v z   } y s l r w o v o n m l j k k m h j f g e p m m g i k j k d j p f d o o j k s q n e i h f i n l p o l i b p q r i b f k k p f n c q { r m t w s t o r o q p m v z  r v y q t u t u    |  ~ }  { t  y p } 
+ x z } z y z { x ~ } w { y  x x { {  q f Y K H B A : : 6 7 2 6 5 3 6 : 7 0 9 5 5 1 3 3 1 8 ; 8 < : < 7 ; 7 8 > B < ? H E J O L W S a [ _ ` e [ [ T Y [ [ \ ` [ \ b Z ] _ X P Q W R M V ] T O K U K N F J I F K L Q K H I H P Q F D D D C I K H J B E I G F J O M M J H H J L I H D D K E D @ ? @ > = : 5 5 6 8 7 4 ; 9 ; = 7 : : A B > > ? < > = < = A @ : 9 7 ; > 9 > A < @ ? ? A B ? : : : : A = 9 < : ; ; A ? ; = 8 : ; ; = 9 = 5 9 9 7 5 8 < ; 9 6 4 2 4 2 7 4 3 7 2 0 6 8 8 8 7 1 5 7 8 3 / + , + * / 0 1 / 8 4 5 1 1 1 / 5 7 - 0 4 7 6 7 : ; 7 6 1 4 2 5 3 7 4 1 6 4 3 2 4 2 5 7 7 < 5 3 1 5 6 : 8 7 8 5 4 2 4 3 2 4 4 3 2 9 8 5 7 2 4 5 5 7 7 8 ; ? ? 9 ; 6 1 6 ; ; > @ = > 7 4 6 2 6 5 ; 6 5 : 9 5 / + + . - )    
+                                                                                                                                                                                         # " & ) - 1 0 1 7 : = = = E M G D E F I D C C F C H I E D C I K J H I E H I H M N K M O N L Q T U P I T _ W Q S X S S S X U V [ W R S W \ \ Y ] \ Z V W ^ e c ^ ] ` i j l e j b c f p j k n j o r  { t {   {   z { y }   ~  
+        t {     z           {                  
+    
+           
+                          
+         z z                         
+                }   
+   
+       w     ~    | x x                                           x z t | z ~ { w l v t n i g o w q m k h p e l n m j l p l a i r l f f j l n g j o m d j n f b i h i m o l m d j j i r r j d _ i s m q g i q i n { q | t k l s t u t o u t t z y | v g p z p s z      v | | v t } s   ~ | w | } | w }  z |  ~ y z m l i ` X R Q C ? B C : 9 9 7 4 8 6 3 / 9 5 1 1 7 7 4 3 / 3 5 8 ? @ ; : > @ > A A P N Q X V Q T Y R Z a a Z [ ^ U X U T Z ^ ^ Z Z ` [ ` Z \ Y [ T Z Y V T X V U P L L J F J I E K O L M I N K K G A F C G G L E E H H C H F D K H J K L I M K G J H F F E B G G J I B E > : : 6 5 4 2 : 5 : 7 : ; : 7 : 9 = ; : : 3 1 : < : : ; 5 8 4 = = ; 8 5 3 : 9 < 9 : 8 8 9 : < 9 9 8 < : 7 6 5 5 = ; 8 9 < < ; ; : 5 ; 5 7 5 7 7 5 9 8 3 1 6 6 9 5 9 4 3 7 4 3 . 2 0 5 3 1 , . 0 , , . - . - 5 ; 4 1 3 0 - 3 / - - , 5 4 6 : 4 5 8 . 4 7 7 6 4 2 , - - 0 5 6 4 1 6 5 4 5 - / 9 9 9 7 9 7 3 2 2 3 1 . 3 3 0 4 7 8 2 6 4 4 9 7 5 : 4 7 6 ; 8 6 3 9 6 5 8 8 : < : 6 9 1 / 6 5 7 5 8 9 8 4 3 0 - - + ) " 
+                                                                                                                                                                                         
+ 
+ # % ( ) . 5 1 0 3 : ; B G J C C H C D E @ C B D G D E F H I K J G D F I I C E I O H O L M O V U T L T V R P S V V P Q V T Q Q P O Q X W W [ Z ^ [ Y Z ] c e Y ] a h k m e a a \ j g i p m m o s ~ u t w { y z   { s {  
+      ~  
+  
+  w {        ~ }                                                             
+                    
+                   
+                              | y    { }    ~ }   } |                                ~   ~  z x y v x r u v o q s q m l h n r p f c d o h l j i i g o n c h j j i o d f j f ` f c d e m j l m i p r j q j i h l q u q h c g g u k d g j o r k l v w r r r m x p r r r w t y x { { k p s x z z { z   { z   ~ } y z w 
+ z } | | y z y | w r { z p m i [ Z S G E @ D B > E @ 6 8 7 4 5 6 7 1 2 < 3 4 1 / 2 5 2 0 3 4 < A C B D @ E E F L S T X X b b X \ \ _ _ ^ \ Y Z X V S N \ ] Y V U _ [ Y X U R S U Y U S K O R P L K F J H K M K J P I G I M H J J > E E G H O G G E G O L J L K C D H H H G F K H E F C D C H G G J C J A ; = 7 6 3 6 2 6 8 : 8 < 5 2 2 2 9 ; 8 8 7 9 8 8 6 4 6 7 8 7 6 7 5 8 4 5 8 9 5 4 : 7 9 < < 4 3 4 4 3 6 9 2 5 : 6 6 < ; 6 9 = 3 : 3 7 8 5 1 4 2 4 : = > 0 5 < ; < ; 5 ? 9 4 4 2 3 / 3 4 3 1 2 - . , * , . 6 3 4 3 - 2 1 / - ( ) * ( , 1 2 5 / 1 6 1 4 4 3 6 5 2 , 0 , 4 2 1 7 6 3 3 0 2 1 5 7 4 9 9 5 2 3 0 , . 1 1 2 4 0 3 0 5 / < 8 5 : 7 5 5 4 9 3 5 2 1 / 4 . 6 5 2 : 7 4 3 5 1 1 8 : = = ; 4 4 8 ; ; 5 / ( # 
+                                                                                   
+         
+                                                                                             
+   $ $ ' ) + . 4 1 0 5 ? ; < = C B B C E G H C C C D D F B @ E E K K J J G E E H I I P O P O J L R R R R K L R V V O W R Q Q P R Q P S P T V V \ \ ` ^ ] ^ e g b ` h k g n r e d ] ^ m a e q q o r y w w } ~  }     ~  {             | z { v ~ |    }   
+ 
+     
+   
+                                                 } z    
+   
+             
+  
+               }  
+ 
+           
+   z            ~    | z   x z 
+  
+  |  ~ |                               }   
+ 
+  | { w t o u v t r | r q q y h j g n m i l k k i k a b ` k j g d f g k l l c e n k e ^ k j i m p r p k m q m i s o n j i u o l h i h u m j j j i n f f q v r q r o t s r p l v r w x w q l t t | p x z y   ~  | { 
+   s w } y t w | q   z z x t g Z Y L G I L A ? 5 ; B = 8 ; 9 ; < < 6 5 6 9 : 0 2 6 1 1 5 4 / 3 ; ; @ H O D D B G P S U Z ] c c V Z Q T Z [ W X a Y W V T ] U W U X U T U U Z X N M P S O N K N J L H G F C @ I C H O J I I I C G H E F E H B B I K F E D B I J E K E J I L H E @ E K I G H > B > G D B C @ A B ? A = ? A < 9 > 7 7 8 4 7 4 3 3 5 0 : 8 9 2 3 4 3 6 0 1 5 7 9 7 8 : 7 : ? ; 3 : ? 8 > : ; 4 : 6 5 8 = < 9 : @ = < @ = : 7 4 4 2 4 5 6 1 1 5 2 = 9 7 < 7 8 9 F > ; 5 7 = ; 3 / 2 3 5 2 4 4 0 3 0 2 . , 0 4 1 / / , 0 5 7 0 / / - , 1 - - 1 - 3 . / 2 6 2 / 4 4 / 0 . * . 4 5 4 6 7 3 2 . 1 / 2 3 8 1 1 6 6 0 0 3 1 1 3 2 3 1 6 3 6 4 2 1 7 6 3 4 7 1 1 / - 0 2 6 5 7 5 5 3 1 8 7 4 1 4 0 = : 8 4 4 6 7 5 1 0 ' "                                                                
+                       
+    
+  
+                                                                                              
+  " & * , - / 1 1 8 ; 4 ? @ ? C D A E G @ C I H G E E A B B G B D E K N G E D D O P M K H L H O S M K D L N R U X U Q S I P Q U ^ X W Q V R S X b ` b d e l c d j j f i f c i f e f a i g c r t y x y }  } ~   y  y         {     z y   }   
+     } ~    |  
+          
+        
+                                       
+     }       
+           { x         z 
+   ~ 
+       
+  {                }    } ~    
+   }   }                        
+         ~       |  s v u t s m m i l l j o k m h j h n p n j q h ] f p | o b b b l g c j o g m c c m o p m r t r k i e o k g c f e n o m p i e d u t m t p k g h c s r n m l s m o k s l t q n s s n m t u u m t w    ~ y z y    { y z | { o n s u x x w f c R N G D @ G ; < @ 8 = = 9 ; ; 9 ; 6 : 6 3 8 9 9 3 4 5 4 7 8 4 ; 6 ? ? D I I L L I O Q _ c [ [ [ ^ T P S T X T T W S U Y Q [ b \ Y Q W U N M S R P O K K K J O M I I B I F C A E H F A D F I D D C G I F G G J J B G G G K B C G F @ H G F E I B ? < > C B F E ? < > > > A ? A = = ? B ; ; @ < C = 6 5 8 ; 9 4 5 2 3 1 0 2 3 2 0 1 0 2 3 4 4 7 3 2 3 ; 8 2 > B 9 > < 9 : A 9 9 > ? 8 = ? ; : > ; = ? < < 4 2 : 8 4 5 7 0 , 8 7 : = ; < : = 6 : < 7 9 5 3 6 3 1 4 2 - 3 1 / 0 0 2 0 1 , 2 0 2 1 2 / 1 1 2 4 4 2 1 0 1 0 , * - . - / 1 2 2 0 / 3 3 - 3 - + - . - . 2 8 1 1 0 3 3 2 1 3 2 0 3 2 1 1 5 2 2 2 1 2 3 2 3 1 1 2 0 4 8 1 3 3 4 2 2 2 2 / 2 8 6 4 3 . 2 2 4 2 2 6 1 6 8 6 3 8 2 4 1 4 2 , #                                              
+                
+     
+                
+ 
+       
+ 
+ 
+ 
+ 
+                                                                                               
+   " , + - - . 2 8 9 4 : ; ; A B ? D L A ? B ? I D C G F C B C C F C B C E F B I F D H K P O J L L O R L M M O U P R L I O R X Z W W \ _ ] T ^ f b h c ] f c ` g e i e d c j b c d ` d g l s q q v y w  ~   {  { w       ~  ~     w } | { 
+            | | 
+              
+                              
+ 
+        }  
+      
+   
+              |   |         }                   
+        
+     
+  { ~   } x }    ~ x ~ {                      
+            ~ { x } w u q p z w n n s k f k i k f l j l e g m i j n k d r q p h \ c f g f f h a e g k j c l o k d j g j m g e j i e c f o u p k h k c q t i i n g i h m q o n r f q o k j q t u o o l l p m { w y q v | x 
+   x } t  w y   v  t x u t q j _ ] L L G H C ; ? C : ; ; 5 7 7 9 : 9 < D 9 ? 3 1 8 ; 8 4 ; 6 9 9 5 9 = > < E F J O P Q U U T V Y \ \ U W R P P Q S Q [ X S P Y V S W [ Y P R Q I Q \ \ Q Q P Q L M N M K D F D E C A D E H E E A A > < B = B G J E F D C D D B E G C @ H C D C C B E K C E B @ G C C @ > ? > ; ? = < B @ @ A ? A ; @ F D ; > 6 ; B B @ 6 4 2 / / . 4 3 2 1 4 2 4 ; 2 4 2 9 @ < 9 8 = 7 9 : : 8 ; 9 = C A : 7 8 9 6 8 = 9 ; 9 : . < : 8 9 5 4 1 0 1 4 7 ; ; : ; 7 4 4 : 9 5 : 8 7 1 1 2 0 3 5 / 4 0 - - 3 2 5 2 5 8 4 0 3 3 4 0 4 3 3 6 6 4 2 / + , * / 0 6 2 / 0 2 4 1 1 / . - 1 , , , 0 2 / 0 , . 3 1 2 0 * - 0 0 2 0 / . . 1 . / 4 6 4 1 4 4 1 0 . / . 1 2 0 2 1 5 1 2 4 4 / 3 / 2 3 4 1 2 9 4 5 1 / 6 * 2 . , 2 3 , &              
+           
+  
+ 
+          
+          
+     
+       
+ 
+ 
+                  
+ 
+ 
+ 
+  
+   
+    
+ 
+ 
+                                                                                               
+ 
+ ! % * , + . 1 8 : < @ @ 7 = B D ; B @ E J D E G G B D I M I E D C E B E A B F G E J H W X M O R O M P R K P U R W W R ^ X X [ T U V c a Z a b b d [ ^ e ` p h h d d k g h d d b a b f q x x x x v w y   z     
+     |        u z {     
+         
+ }     |                                                 z     }                     
+             
+       x |              
+  
+       } | x y {  
+ |     z                                   |  | x y x u o t { p o m r p i h m g h k g n i e l h b b p n n s m j ] _ d j ` c ` Z Z a s l c e g f a _ i e j d f s k a g o p m m h d t i n l m k m n b i m h p l j h e m q p j k n l n f r s p w v r p s x w y t } {  s q { v  }  z t { s ` ] U L F C B A E = = 9 ? : 9 ; 5 5 9 > 8 7 A < ; 8 3 8 < : 5 0 8 8 : ; 6 5 ? H K J R S V U [ _ [ [ Y Z V Y Q T P X Z W T W ^ _ W O M O R N Q T R R M S U S P P J O P M N K H M P J B @ D F D I H C F F A @ < E A C B ? B A C C E C B D F @ @ G A B B @ B G C @ < 9 B C @ D ? ? ? > A ; 9 = ? @ C @ B @ B C B < < C > = > B B B ; 7 3 0 0 2 3 2 . 8 < : : 6 8 5 : : B A ; < 6 6 9 9 < > B ? @ < 9 1 : : 9 7 7 9 < : < 9 B 8 6 8 : 9 3 4 5 2 0 6 8 5 6 5 5 9 : 4 4 4 5 - + , 5 / / + 1 1 0 2 - . 4 4 5 2 4 4 < 2 3 4 / 7 4 6 5 6 4 4 0 . . / 1 1 3 2 . 1 3 6 + 0 . . , + . 3 1 . 1 0 / / 2 5 3 1 1 ) / . + 1 / 0 5 . 4 . 4 3 3 * - 1 : 6 , 0 1 0 0 . 5 2 1 0 2 4 2 . 1 - 3 6 4 1 / 0 5 2 2 3 + 1 3 0 6 / , 0 ( )                  
+             
+  
+              
+   
+         
+  
+  
+ 
+      
+ 
+       
+ 
+   
+    
+  
+  
+   
+                                                                                                # $ ) ' , . , / 3 8 ; ? = > A I A ; ? H D D I D I H H @ M Q D = I J K B D @ > H I J P L L O T Q S U K G P P S V S [ U U ] U W [ Z Z ^ a d f d [ b f \ d i k r n h j m u j ` g k m e d m v y  x |  } {   |    ~            
+    }           y   
+ }           {   
+                                      
+       }                   } } |     
+     
+            
+          
+         ~   ~  y z    ~ ~   | {                                   z   z s y } s p r h m o o p m h k j m g f k e n p b e i j d g f h g i a i i a i c _ d d i k l p m g e b e i l h d n k f g g o n p j h j p l j k d k r v r s s k v p t h g m s s p r m k m j r p p q n u r } | v y   | v w | }   ~ v s j [ K C G D D @ @ < > > @ 8 : ; ; < 5 8 < < ? ? ? B B 9 9 : > 8 : 6 9 ; = ; = : J T Q [ _ Y X [ Z ^ ` _ ` ] \ Y W X W U V Z X X U U T P N L Q Q N O M X W P M M V U S Q S M T M D K I ? @ E G I I J C ? < = 9 = ? G F J E @ ; = E D H I F ? F F D C D D G B C I ? A < ? ? ? B D C A < C > ? 9 ; @ : @ = ; @ ? B > B : = = > : = < > @ 9 4 / / 0 / - 2 5 5 9 7 9 ; : A @ 9 : @ 8 6 = ; 7 : < B = 4 6 6 1 5 ; ; 5 3 6 9 4 6 = ? > = = 8 : 9 : 4 5 7 3 6 0 2 5 6 8 0 3 / 3 0 - + 1 1 1 / . 3 7 5 6 0 * 2 6 4 4 9 7 3 7 5 0 . 2 4 1 3 0 5 7 1 1 3 / 4 . / 4 5 5 2 7 0 4 3 / 3 3 1 - 3 3 , - - 1 / 4 2 , . / 1 0 + + 1 0 5 2 5 1 3 4 1 / 0 3 9 1 - / / / - 3 : 6 . . 2 . 5 2 2 0 4 6 5 3 / 1 7 8 4 4 0 2 4 9 0 - . / * & 
+                        
+ 
+                        
+      
+                  
+ 
+      
+         
+ 
+ 
+ 
+                                                                                              
+    " # ) * 0 / / 3 < = ; : 9 > @ @ ? B B = < I F M K O L G I @ @ K D E > D B I I M L O V N K J I M K M N L N T W S X T S Z X ] Z W Z a ] a n i f a f g m i n j o f g l o m d j o k f e l o p   ~ |  {        
+ 
+ 
+   
+  |         
+ 
+        ~ } }   y       }                                          
+   { z                         w  } }   z     { ~       
+      
+   
+  ~ 
+   
+        { ~      }    z { z x z                                      } v i x x x r m j p k e f c f l j l j g l g m q j g m h d _ i m i n e b _ f h i b c c ] d i d d b g e f h o p f l p d b a h n u s p m j p o n f f i s q i m t t r o g d j k x q n w r f m m s l j o q t w { w v t x  { r t w w | p h ` U J H D C ; ; 9 : 9 7 ? D A = @ : < 9 = 4 < 9 : @ ; : 9 : < > = : : < > @ E M O \ Y Y Y W V W X X ^ a \ Z U W X U S W V S W X R S U S R X J K N J N Q [ X U M M K N S S L P T M B E E @ @ A N D ? F A E ? = D E G C G D A E D E I H C I N F J E J E H I D D C F A < = < ? > = C B B F C I D > < < > @ = < > = E ? : @ = @ B C ? : ? ? 9 < 4 - . . , 2 - / 6 9 5 9 6 ; B < : ; = 8 : : ; = ; = ; : 8 5 8 7 : 9 : 7 5 6 8 8 6 = < : > ? 8 3 3 7 8 4 . 1 - - 3 . 0 1 0 1 4 0 0 / 6 / 3 5 0 / 1 4 2 7 2 1 1 1 5 ; 8 2 1 2 / . 5 6 4 4 0 5 6 , 3 5 / / 2 1 / 8 6 5 1 2 6 4 1 / 3 3 4 4 / . . . 6 1 9 5 3 / 2 1 5 1 0 0 1 2 2 0 3 4 / 2 1 / 5 3 3 4 5 3 2 . 1 2 / 2 . 2 1 4 5 2 0 0 6 3 2 1 0 4 4 6 2 2 7 1 4 . 2 0 1 . ' 
+ 
+                                                         
+       
+               
+        
+ 
+                                                                                                 
+ 
+ " $ ' # * 2 0 1 8 7 9 @ ; ? F C @ B C B : = J M H J H I B G D E D @ G I A G P L K Q K I M L F M S S P M P R S R U P R W S U Z X Z [ V U ^ k h d c ] j m f g e e c i k g j j g g b h o v p q w  z v ~  |  {                 }     
+        {            
+    
+                                         x  
+     
+ 
+             
+          
+    |                     }    
+        ~ ~          
+ ~  z                                       | s v u r n r t n p q i j h l s o o m o n m n g l h l i ` d q m j i g c d q k j f f e g b f e h a i j q q l m w r p n l g h o j d c h k k j j g m l q o j o n n s p k m g g w t l s n l i i j k d g o w x x | z z u u p u t v b _ T P M I B E G ? ; 7 5 9 ; : > D = = : @ : ; 7 8 C 9 7 < 9 : 9 : = : = @ > < E O Q \ ` ` Y Y S X [ [ X X \ a X U O T X X S W X S Q R S N O M S V P P X I N R S T R P O R N R X R K K C E B = < B C D F < B ? C H E = @ F > G I E F C H I J E H K F K G L I C D C E @ D @ B F A B < ? C D > A = B @ A = ; 9 ? = = < ? ? @ B = 8 : A > @ = @ B : < 4 5 < 1 1 3 1 - 0 5 7 5 8 = C ; > = > < > 8 = 7 9 < 9 @ 9 7 ? ? = = 8 5 6 8 = 7 8 9 : ; < : 8 4 3 5 4 6 2 - 3 ' - / 3 3 6 8 6 3 0 2 8 1 2 5 0 5 6 / 3 6 5 9 1 2 4 5 . 0 6 2 1 4 0 2 1 / 4 4 3 1 7 2 4 0 6 5 5 4 . 4 1 2 2 7 0 7 3 3 5 2 . 1 - 1 1 2 1 / 1 . 1 2 3 3 / 5 2 4 5 0 1 - - 2 / / 2 3 . 1 9 4 4 1 0 2 4 5 4 1 4 1 / 3 . . 1 / / 2 4 6 2 3 9 / 3 1 3 2 1 1 0 1 *                                                                              
+              
+ 
+ 
+                                                                                              
+ 
+ # ! % $ + ) . 0 5 : : B < < F A = A C D A G H I F M L L D D E H H E E L @ G P L I M D G J F G J R U S P L W V R T K H Z S S Z [ e [ [ [ _ d g g d a c e ` h h k i f m q d h e h f k o w o q v w q u z u y |     ~  | 
+ ~         } z     { ~      w }    
+       
+                            
+          
+       w  } 
+    
+           
+    
+              z                   
+   ~ x 
+           }            
+                        
+              p q w o v n t w s o w p p s h g r o r g f j i k q q c d f j p i l m g Z b i h l i e d f _ a h q l d j r u m m s l n b h j k h f h h i g i ` i i o g o h c l p q q n h q d m m j k w t m h i m j j k q q q z s }  p x m p l ^ S J I I J G D E F D @ : : = < ; = = = = : 8 A = < A D @ ; 8 8 9 < B C < ? B E M W d ` a _ a Y X S X W Z Z Z X W S V Q P X X U S M R O O Q P N R S Y P P X N K M T U K H N O O Q S M L K F F A A = G D B G ? = ; @ B @ C D H @ F J H H F B C G G K N D F D D @ C ? @ C F ? ? = C C = ? F D C = > > E D = C A C = < 9 > < ; ? B @ > 5 ; ? > : C > ? @ 8 ; < 9 1 0 4 1 1 4 3 6 8 ; @ C @ < 5 9 A 6 ; 6 7 9 7 C 9 9 : @ 9 7 : ; 9 < ; : ; ; 7 8 4 5 5 3 3 7 7 8 9 3 0 / 5 / . . / 0 5 7 ; 7 9 : 6 5 6 4 7 7 0 3 4 6 8 5 4 5 1 3 5 4 1 0 5 3 3 / 2 / 3 2 5 4 4 2 5 8 8 . - / / 1 0 3 1 3 2 . 1 3 8 3 5 . * . 1 . / / 0 - - 1 / 2 2 4 2 / , 0 - / . 1 2 5 / 2 6 : 5 1 2 4 4 4 3 5 2 4 0 2 / 4 3 2 3 6 3 7 1 1 / 1 4 6 3 1 5 0 0 , ) # !                                                                                       
+ 
+                                                                                                  # ! # % + ) / , 4 3 9 4 ; ; < ? < A @ D G D H H K D H J I F D G B D G F F A H D D J F @ F Q F G Q Q S Q Q M R V P W U L T P Z Y _ a d h \ b a _ i k p j c b j ` d s m r q l g i l j o w s } v m q r |  { z { y  
+  } | {              ~  y     |  | {  
+  
+    
+ 
+   
+ 
+   } 
+      
+                }  
+  
+         
+     w {    
+ 
+   ~        
+         
+                       z             ~     { |   } |  z x    {                                    ~      x z u m t r r v t k o j t r l l j f m q r r q l i a i j _ j l n e g j a b a m e i d l c ` e p o o f g l g e n h m e f ` f c c f f h j k i j m e f l h j d f h u q l i p i p l f a h r m r j e o p k k s s x s w z i k b W R M J E F G @ D E F B > @ ? ? > @ > > 8 > 9 8 7 : @ ? ; A ? C B @ @ B D D A D Q X W ] g g f a h ] \ ] Z T S Z ] Z _ Z N O Q Q T Y V L P K R U U T R R T K Q P P S U S Q I O R Q P L R O M F C D E B = @ @ @ ; < @ C D B B G F E A B L C B H F @ ? I G B ? @ C F C D ? A A D A > ; A @ ? < A A 9 = B H @ A @ ? @ ? ? ? = > ; = ? ; > 5 8 ; ; 2 9 A > @ 9 : = : 9 6 4 / 3 7 5 1 5 7 8 ; 6 1 8 8 : @ 6 > 6 9 @ @ B C ; 7 : 5 ; 8 ? 9 8 ; 7 4 5 4 6 3 1 2 1 1 5 6 1 3 3 7 3 3 7 5 3 4 3 1 6 : 5 6 1 5 7 3 9 8 < 0 1 3 - 6 4 / 5 7 2 5 7 1 . 5 8 7 5 3 1 2 / 7 4 4 2 0 4 5 4 1 . 5 1 2 2 5 2 3 1 . 3 : 7 5 1 / ( 0 - - - 1 + . ( 1 0 , 2 . . . * 0 0 0 - / 0 7 4 8 6 2 4 1 2 6 6 3 4 0 / 2 4 3 3 1 3 3 1 5 3 1 / . / 1 0 / 1 7 - 1 0 *   
+                                                                                                                                                                                         
+   
+ $ + . , + . 4 3 5 5 ; < = = > F A < C C C J A C I H D G F H H G M N B B K F N H F B M O Q L L I S N M O P T O P U W X X ] ^ [ \ _ b _ [ b g k p n ` h i m i l r i q o l p k r t u w o x t x x v } y }    | } | x w        }   } y y 
+     z      { ~ | 
+     
+         
+            
+   
+                     }    
+  ~                       } {    
+     {                      
+        z z w }    } v   | }   z                                      }    ~ w r s r t p y k o r x t p u o j h r n o r n q s l g b j l o a e d c f g h j h c g i i j k s i p j i m h k g l f f h g e k c h m p p j d l f i e k h m q u i h l m w p o l g a k h d k m k u z r o s w u m m p [ U N P J C A C E D < < > @ @ ? B B A ? > ? @ > = ? ? ; ; = ? @ : > C ? B F B C D J R f ` ` ` k e T ] \ W ] ` X V N Q X ` X X I O W P N M [ W L J R P R P M K S L P R R N Q G E I L M Q R U P S K G E G H = @ ; ? A ; B J H E K A @ F D I E D G L C C E B C @ @ D G J K C ? > ? B @ A > < A ? 8 @ C C < = > B D H A ? < = B A = < ; = > = < 7 ? @ < @ : ; < ; ; < < ; : < 5 2 0 1 2 8 7 2 3 6 ; 9 < 8 : < 9 7 5 4 > < ; ; : 7 8 = > = < 5 9 7 5 . 4 3 9 4 6 3 0 0 6 8 4 3 3 7 8 7 9 1 9 7 5 4 3 5 3 6 0 3 ; 8 : 3 8 6 9 1 2 6 2 1 2 7 2 7 9 1 1 5 8 3 7 2 3 0 0 3 4 1 . 2 2 2 2 / 2 6 / 1 5 3 / 1 / 0 0 5 2 / 2 / , 1 . 0 2 0 1 . / 1 , + 4 1 , + / 0 2 , / 4 7 7 1 3 2 5 7 5 3 . 2 1 3 2 0 3 3 3 - 5 2 0 4 3 5 0 / 2 1 3 2 4 0 2 2 1 - * "                                                                                                                                                                                            " $ ( - + 0 3 5 2 3 7 9 > ? B A ? B ? D E C E D F L I E E H F C G S J B B J K R J G F M K J S O R K J N X S S U U T T V [ ] ] \ [ ^ b d d ` g g l i \ _ j h k d h f g i j n k i m p z x   {  | z }   
+   
+  z   
+     y  {  {  y |     { } ~   
+         }         
+                                     ~ x 
+   
+                  
+           } }   
+ 
+        |    
+             
+  }  } v }   |     y ~ z w w { y {                          }    
+       } 
+ y  w v l n m { p k l p s j i r d m r h h q n l l p i c m n i j d p k l e b j p c n f l h b j q i e p h f o r j e m a f h j h h i j p m f d j i j g n h l q l l i r m t q s p i m m l d d c p t o r p s o n i a V K I E F I @ < ? > ? ? ? = A C B B C C D < ; A H B C C B B D @ @ A A H H C H E D T a a d e c Y ^ ] V Y S R U \ [ R L J P Y V R L M H O S Q M O L Q V Q S U P N R Q Q P N I M M I H K K L Q P L S K L E F G F C ? > > B J M D A G E H I C G G C B G G @ @ A A = B D B G = A ? @ ; E C 8 = = < ? C D D ? > = C E D C B F ? ? ? = < 8 ? @ < : ; @ = = = A = 8 < < @ C 9 7 ; 5 7 9 , / 0 5 2 6 8 8 8 7 > : 8 7 7 < 5 2 5 < < 8 < ? = 5 : ? 8 5 1 1 0 1 2 8 5 2 4 2 7 1 6 6 4 / 2 4 : > ; 9 8 4 8 8 6 2 3 9 8 9 1 5 9 2 1 2 4 3 1 / / 4 1 . 1 7 6 0 2 8 5 2 3 1 / 0 / . 1 5 4 4 1 1 / 0 3 2 2 1 4 / 3 4 - 5 0 1 2 1 3 7 0 3 1 3 0 3 0 1 - 1 3 . , - 2 - 1 2 2 4 , 4 9 9 / 1 3 6 4 4 . 3 0 5 1 0 / - 5 3 1 . . 0 / 2 2 / 4 7 6 . 8 ; 7 0 7 1 * ) ! 
+                                                                                                                                                                                         
+  
+ # % ( ) . 3 5 : : = @ @ I B H B @ ? C @ @ H E G L G G E K G B C L G > C I D D I G J L O N U R U U Q R T S O Q Y Y Y W [ ] a a _ a _ d ` f _ e n i a j e l k b k p p l g d h l q v v  { z  | u y   ~  | ~     ~     ~ ~  w { x   } { ~ {  } |   }        ~                                               
+   }       
+                      }                          
+     }  z x x } u v { ~     |  s p x u |  u {                      
+ 
+   { 
+          }  v z u u q o k s o l n k k r j i i d m e h l j j p i l o p i ` e k m j f a d l g e l i n j d e m r g g f c j g i a l a d j h _ o o f i ^ ] g e m h e j i l g d i m k q p k i i g j m m h k d o l r l h f ` X W P P E E ? ? E A > > : = ? ? D E B C @ A < = : = @ I G : D F F F D H G F G > C L N U ] c ` g b ] Z R U W [ X T R Y T U U P T T J M N H D O Q U N M R O K M T N R N N P M L F I L O O O N O P Q N G I I K C @ A ? ? B D B E L H A D G H I J E I C F E G ? C ? H ? = D = ? F @ E D ? @ > ? ; @ A > B B = < = D ? = C @ B @ C A < ; ; 9 ; @ @ A = ; < ; @ : A = 7 = : A ? 9 : 9 2 6 4 . 1 - 3 0 2 8 4 7 4 4 ; 9 3 3 ; 8 8 8 = 8 2 : 9 9 : 7 8 1 3 1 / . / 0 6 6 0 7 2 8 6 2 4 2 3 5 4 3 8 8 A 9 3 6 6 3 6 1 9 4 3 6 5 5 3 7 2 2 8 3 3 1 5 4 / 1 0 0 1 . 0 5 2 4 3 0 - 1 0 / 0 5 3 1 0 - / 1 / 1 1 2 0 3 3 - / . + 1 0 . 0 0 . / - * / - + - 3 . . ) - ) ) 1 / 1 / - 9 7 8 0 / / 2 3 7 7 7 / / 2 5 2 0 0 1 / . / 2 0 / 2 / 3 8 5 2 2 7 4 / 3 4 ) & "   
+                                                                                                                                                                                        
+  
+ $ " % + . 1 8 9 8 ? C @ F D A @ B ? E ? B H E E I G G H K H G A N I H G H E F H H L H M J P Q Q P O U Y R N O Z [ Y W ` a c b ` _ b a ` e ` e f d j d g f j m q m q g h i p s r { z  {    q t u y w ~ } {          }   | x    z z } z { x }     |     ~ |                                              }   
+       
+  { | 
+         ~      
+     }    }   
+    
+   
+    
+           
+  ~ |   
+ } |    y x 
+    x z y t x y }                          
+          y { } | v y r s u v u l q p j k j i p k l k n u q o h q l k c g i d d c s i l e _ e e h k d b m g j d a k g e c ` _ g e i k f d g g a h o j d c Z \ b i m a d m i ` h n o l n y k g h g h n l o k k e e b \ T R L E L I H B = A ; ? ? = C A = A @ D > C C D @ < @ @ A = @ ? 9 = H C E A G K K I A L Y [ ` ^ _ ^ Z [ R W T X Z Z U R U Z Y S T L N S T O K C D F P M @ M Q K L H D G E H L M M P L J P H F K N J L N G D D F D ? = ; ? ? @ F D D I @ @ @ C A E C @ C D E = B > ? < E B ; C @ C E A @ ? > A @ C @ = ; : = < = ? ? E = = B > ? ? ? ; < : < : ; > > : 9 9 ; = G ? ? < 6 4 9 ? : ; < : 5 4 / 2 9 7 3 3 2 2 2 1 1 4 6 4 1 2 8 : 8 6 6 7 3 7 8 4 8 7 9 5 3 , - 0 5 5 1 3 5 4 3 2 - 0 5 4 5 7 3 3 : 4 4 8 2 2 7 8 1 2 5 4 4 1 0 1 5 7 . 0 4 7 2 2 5 1 5 5 1 2 2 2 2 4 9 7 / 0 3 3 0 4 2 5 2 5 0 1 3 / - , 3 5 - . , 1 / + , - / + , - . . / 0 1 , - , - , * - , + - 3 0 / , / 7 3 2 2 0 4 0 5 4 / 3 - / 3 0 / 1 , 0 - / 1 , / 4 2 - 1 5 5 1 2 4 . - . . ) %    
+                                                                                                                                                                                          
+ $ $ ' * . 1 3 7 8 B = = D H D G D C A D I J D ? G G E G D G E A K J I D H K I F I H J I I L T T T U P V Q R V Y Z U ^ b e b a ^ ` f d h j c ` d f i f i c k r h l l g d f r f l v v v x |  z r x r o u z v t x   ~  
+   } } {      z t s v y ~            
+   ~   
+ 
+                                        
+    
+            
+  }     }  
+  }    ~    ~  z    | {        z  
+  
+            ~  }  z ~   z   } } u z x t s v | }                     
+      
+    z      z x u m l r t w u p n o o k g f q h h m r j m m e h j g b c e h b i i r k k c k l l j l b e i l g i e m i f ` b i k h e d i Y ] b f d m d c h a d d e i b f m n j j h d i l w i i l d ` g g g k g X V O U I H E < > = @ B A A ? ; B A C D B < @ > : B @ @ D C > G > > = A D A A ? @ ? C D D J O U ^ Y ] Y X \ S Z R Y R X V U R N R W R U L M J M M R G H K I O H G P S L L N I C J K I D D D K J J J D J L L G J M D C A D ? ; > ; C @ @ A D C A = D G @ @ H G A C @ = = < : 7 A = = = < ? @ ? B = ; B B C @ ; 7 4 : ; A ? @ @ < > = : 9 7 9 = ? = @ > 6 8 8 @ @ ? = = B > B ; 8 3 < 7 0 7 6 7 3 2 1 / . 2 6 2 0 / / 2 3 2 4 8 5 7 7 ; 8 5 7 : ; 8 8 6 1 4 5 0 , , ( 1 2 , 0 0 0 2 3 0 1 0 8 0 1 4 6 3 5 4 4 0 0 2 6 3 2 6 1 - . . 7 . 0 / . 2 2 - / , 0 2 2 . 0 1 7 1 5 3 2 2 , 0 4 4 / 1 2 7 4 3 3 4 6 4 0 3 0 1 3 / . 1 / 1 . . 0 0 0 3 . . , , * , 1 + 3 0 * / . / ) , / 2 / 2 5 1 / 0 + 3 - 3 / 0 2 0 . 0 2 2 1 + . , + * , - 2 0 . 2 2 / , * 3 3 . 2 + )  ! 
+                                                                       
+                   
+                                                                                                 ! & ' ( + + 0 . 5 7 9 ? = = A A @ J ? E C E I E G F B > D G D @ ? B ? @ D D G F B H K N L R W M P X U M N U T T Z ^ V [ Z c _ Y ] b ` _ b j d ^ d k d j g c f m k g g p t i q l q r r x  z u r w { s v q t p w u   w v }  { | y    y {  }  s w } z v ~   {      | }   
+   ~             
+                    } x  | y    |  ~          {       |    ~    |    {   | |  y  z  } ~  |        z | } 
+        | x y   |  |  u x  } |  
+ y w u q j p ~                          
+          { | y u n r r q t o i j l m o h n h b h m m p n k j e i e f d i f f g e ` g e h g e i k j m g h a c f ` e k j m h h f n l c c e e ] [ f j g e a e d c b c h d d k d m l j k n k t l m o o j d n i c P L P H G ? B @ > B C ; ? A A = = E @ @ E G ; : @ A C > > D C > ? A B C B A > A D D H P Q N T R X \ ] S W [ W V Y R R T V O P R Q P P M M H N F D J J J K O J K N N K M I O J E J I E F G G B H E B E H K D B @ D H G ? @ @ ? H B B A D D N F B C @ C C = < ? A D A C ? : = @ ; : = B F A < < @ > > : = > ; @ > ? > A A : ; C > A ; ; = 9 9 < C D = @ < 6 4 5 : > B @ < ; : : 6 : 5 7 4 1 5 8 2 2 2 3 1 + 4 6 3 - * 1 3 + 0 1 0 1 4 = ; 1 4 2 2 7 5 4 2 . / , . * + + ( . * ) * * . 2 / - ( 0 2 . 2 3 2 , / 0 / - 1 0 5 4 0 2 0 - . - . / 2 1 0 3 . 3 - * * 0 * 1 0 4 1 1 3 5 0 8 3 3 1 2 2 8 2 0 0 / / / , ( , / 0 / 0 * 0 0 4 / - , - 1 / , * * ) + . . - , - ) + 6 / + 2 - 2 0 / * + , 0 ) . 2 / 2 - . 1 4 - / 0 , . - 1 0 0 / . - 0 1 / 0 , . 0 2 + ' + ) ) #                                              
+                    
+                        
+   
+ 
+ 
+                                                                                                  " $ # & - . 0 9 7 : : 9 A = > > = E D H D C C D F B H C I D G K F C K D E J G K O S P O O T P S W P P P S R W T Z X X \ c _ X Z c e Z ^ g b a c i Y a e j f j g f e h n j ` g n k r z { u o s r { r o t u o k p o t s  ~ x w q n y v t v x ~ ~ } r x | y x   r x |    ~  | ~     }    
+  }       }  
+  
+ {     ~     }  
+    { y 
+  ~ { } z       
+ 
+ { {       x  x w z ~     |   
+  | | x t w s  u {       ~      z }    |  { w x z  y  }     v    |  | t l v y w x            { { z               ~       ~ ~  | q t x l p n p m m u x p m m d i g c e l j m l q k _ [ ^ k a a e k d d f g d e d c h i f i f e ` c a l d c l j h ` a ` e f h c c h ` _ l g h e d c c ` e j g b f d g k e h g c b f m b ^ [ Q J E G I E = @ < = ? A D A @ = 8 @ C ? D 9 @ C : 7 C D B C B F B B ? @ D @ F E E B A L R W \ V W Y Y Y ] O Q N U U X S R X U S O M S K G M J L H K L I G H C F O L O L G I O I B G K G C I L D I G F F F A G D = ? D F L < = A @ B B G M H C G D B D E ? A F A > > < < < < 8 : ; C < = > B A 9 < A @ A > : ? = < A = = @ ; : 3 : = @ B ? < 5 8 < ? ? ; ? < 4 9 6 ; 9 7 < 9 7 > : ; 5 4 6 : 4 / 1 . 3 1 4 7 2 7 4 3 1 1 3 - - , / / . 4 2 1 0 / - / / - / . 2 0 + , * * 1 ) ( + ) * ) * / + ) / . , 0 / . + * + - 0 . * 3 4 2 2 0 2 2 2 . 0 2 , 0 0 0 - / , + - / 1 0 / 2 3 2 5 / 2 3 4 / - 1 - . 5 3 3 0 0 , , , * + - . . . 4 1 / , . * - . - 1 , * + - / - ( ' - - 0 + ' - / . / , * - + , , . 4 1 0 - / 0 / - + + ' + * , . 0 0 - ( * / 3 2 7 . . 2 2 + - ) , ) # ! 
+                     
+ 
+ 
+  
+          
+   
+          
+  
+            
+                    
+  
+ 
+    
+  
+                                                                                                
+ $ # & ' / - 1 4 5 4 9 = ? @ A < C E F G @ D E E ? B I H H D I P I B E H F G K G I K E N N T Q R O O T U N N S S Q \ X V \ Y W W [ Y [ _ \ ^ ] g f ] ^ ] f c i k g j a h i g b i g r t s j j s u t q q r p i p o r u x w z t q o q q z y r r h m t u q v q u  t s u t y v { z x |   y w y w  
+   y { ~   } z t o w z    x x  z z x   ~ y       x } }  | v t    } | {   | v } { u z x } x y x s s ~  | |    } ~ { | w x } } x {  x { z y   w {    ~ w z w z      x ~   y   | x ~ | { } } { x y x r m w  { |   |        { | w   {                  
+     z u u y s s o p t u q j k n j h g g i m f i g i k h g e ^ g d ^ d j g j m g b ` d ] f a e i j l b a l e f b f m d b ] a k d c ` a f b d g c b b g ^ ^ \ g g a e n r n n e g f f c h b S I H A > A = = < : = ; : A ? B C = ? : = @ < @ ; < E = @ A C K L B H G @ @ ? = B G L O Q W R [ V Z U ` T P S U S Q S W R R \ T O L P F D M G H I L M P L E G @ C G I L L E G F I J F H H E F D M E D E G C I D > D H ? = B F A ? @ ? 9 @ C D E D K C D J H ? ? > @ = < @ = > < ? : ; : : C ? C = 9 < ; : = : < : ; B ; = = > < 7 7 1 6 9 9 ; ; 9 8 9 > 9 4 5 : 8 1 8 4 : ; : < 9 7 9 ? > 7 1 8 9 6 4 / 0 1 2 ; 6 2 4 5 0 3 1 7 - + / 0 ) - , , - - / . 3 . - ) + 0 - * / 0 . * ) ) - - + ( + 0 , & , + - 1 - + + ) / * 1 . * 1 5 3 - + + 0 2 / 4 - / 0 / / 0 / . 0 - 5 2 1 - 0 1 . 3 3 4 2 3 1 - - / 1 - 3 0 - 2 . . ( + * * - * * . - & & * ( / - - * + - * ' 1 * & ( * , * ) ( 0 1 - , . ( - . / , 0 3 , ) * + 1 + - - ) ' ( 1 * , / 3 3 - + , 0 5 3 / 1 1 2 + 2 , + % "                         
+  
+            
+       
+ 
+        
+         
+ 
+ 
+       
+ 
+  
+ 
+  
+  
+    
+ 
+   
+   	 
+ 
+                                                                                               
+   & ' ( ( / 1 1 ; 9 6 = @ = @ = @ I I C G B K G I B A B G F C A E B B C C C E G L K E E N I M P I I N Q T N U R K L P U \ X Y W U X Y Z [ X c ` e g j c b _ [ ^ [ _ e b ` i a d j m l n t t q u q o v y x p e m q p w { r u q w r p j y x u s c j r p w w n l v s w } n p p   { } x y | t { y x | z  { z | z  
+  } v ~ w ~ { | { u u y |  y   z y } ~   }  v p v x t t u  | ~ ~ r p u u v u s | u w | y | x q n v  } u z | z w t o r w u 
+  } ~  z r w u z | o t z { y { x y s r x  w y | ~ t | v y   y u s } t v   z o t w p o t p s 
+  
+       | | | |    
+    
+           
+       | s s r t t n g h l m h l p m i k h p m a b l n g h ` ` e f e _ d i e d m i d e g W a i \ \ \ f ] ` a _ ` b ] ^ _ e ^ b i c ` d a j c ` h e ` h i l b i k d _ d j c b e a b c a ] W L K D @ C < @ 9 : 8 9 = ; ; @ : D @ B B < A < ? A B @ @ < G E E I I E M @ A D C A B J U X ^ g a _ ] W R [ V U U V Q S M O X U Y W M L N J K Q G J E K K K G A ? ? B N H G K E E A > > G F K H I B L H F F K G F C ? F A ? > B D A ; > ; ; @ E C A ? A = ? A C C A C > ; = B < < < = ; @ = > = ; 8 8 7 < ; : 8 ? @ < ; < D : 9 : 4 3 6 2 8 ; 9 9 < : 7 4 7 8 3 5 6 7 7 7 8 8 8 ; 7 7 6 7 > < 7 1 7 6 / 5 2 3 1 6 9 8 5 7 4 2 0 1 5 0 0 / - ( % - / / - , - + - ( * ) ) ' * - . ) - ) ' , ) ' ' & ( ( ' ) ) + ( ) ) ( ( ) . * / , - - - , , ) - 3 / 0 . - 5 3 / 4 1 1 * 0 3 0 , , , & , , . 0 4 / - * ) - * + + + , 0 / + * + ( , 0 * % * - + ( * & ' , - ( ' ) + # , ( * , - ) ) - * - * / - ( + ' 0 , + , , , + * , * 0 . , * ( . , * + . 1 1 . 0 0 8 . - 1 / + 0 / 4 ( - * #  
+                       
+    
+    
+  
+   
+      
+      
+   
+ 
+      
+ 
+ 
+   
+    
+      
+    
+ 
+ 
+  
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+                                                                                               
+ % & ( # ) ) - / 4 < 8 ; @ B B > B B B E E B G ? ? ? ? ? D A @ @ C ? ? 8 A B G H B I D D B H E I G K T P M N N K K P T Z ^ W O S M X [ X Z ^ X Y b _ d _ \ ` [ \ Y ] a a i ^ c b o j j j p t r m k i k x w o h f r k k q o o v y u r s t p u w r r w q p p p r r l q q j r p  w { x u t v r s t w u }  } y x } |   y } | t }  v v ~ | ~ }  y v | x x s t } } v y v p s q v w z  z t w y s o { x s r v s w z u w t r n n x v y x { p n l j l v t v   w } x j s u x y q r p t { | z q n q w w w r s u o j q t y y r s u y w r v y m h i m j o x y v | |  |    
+  ~  
+  z w { |       v |   | | ~  ~ | y  w } u u n q u k q q d d i f q j i k l m l k j k j r i h [ _ c e g d \ Y a c d j b \ Y _ ^ \ c b Z Y c R ^ [ \ [ c ^ Z \ ^ ` b d h g i ] d a c d g a i j j j l l \ _ f c ` e b ^ \ Y U M F H @ ; 8 ; 9 : 7 9 : 9 ? A 9 ; ? A E < ; @ < @ > G F A > B G F C F H I G B D K S J M U [ X [ a [ _ Y X V P R W S P K P O L P R N S L R S S F J F E H E I F A A D @ @ I E B G B G H @ E D C E A B D > @ F L D E B B F H A D A C B C < 9 < ? @ @ A G ? B > ? 7 : ; ? > < < < : : : < = = < 9 9 ; ; 8 7 9 : < 4 = ; 7 9 8 9 ; 5 8 4 9 5 < 7 8 9 ; ; < < : 8 8 6 4 . 7 > < 9 6 5 6 9 8 < ; < 9 8 8 1 1 4 0 3 6 5 7 6 : ; 4 3 1 / 0 . / , - ) & " % ) + + * + ( - * + / + ' ) * ' ) ( & + , / , ) & % % & ) & ) ) & ( ( ' % + - * ) ( ) , + ) * * / - + - / , 1 . 2 1 / 2 - / 1 - . ) ) ) . / / . * 3 0 . 2 . ( 0 2 * ( + - , - , ) + / ) ' ( * - * 1 ( $ % + ) . ) * ' $ % * - , ( * + + + , / ' ) / , / * * 1 0 - . ) ' + 1 . . * + . + - / 1 4 , , + 0 4 0 * , 0 3 0 - 4 1 3 / % "      
+    
+        
+                         
+ 
+ 
+              
+ 
+ 
+ 
+      
+ 
+      
+   
+ 
+     
+    
+ 
+ 
+ 
+ 	                                                                                               
+ ! ! & % ) / * 1 4 6 : < ; 8 A A ? C C B C A @ A B A C @ C < : > > > > 9 > E G < = J D D = E J A E I K M J H I O N N X X Z T Q S N M R W [ V W [ d ] _ ] [ Z b d \ [ \ b a d \ l q m j h j k o q m f j q p p k j r h k m o p { x t n j l t q s k t q n l n o m p o q o v z u s u s p m m l u s x s w { x }  y w y ~ x u { s |  
+  w w y }  z u s s q w s r t { p n m n w p x x p p m e u s p s m v x s r u z o q q n s l m p y s u q l p l k h i r q q {  t r l j i z { x u f o t o d e i n e e p p p n r q n w r q o k r q w r q n l g f g f m r q w  }  x } z y {  u    x o u     } |      z    w u v  } ~ p q n r q l i g k d q j h f f g f g n d n o k g h k ] _ c ` l c d a ] ^ b d ` a _ \ _ b b c X ^ d a g ] ^ c _ d _ ^ Y ^ a e ` b _ _ d c d ` d c i a g e f b ` e ^ Y ] \ \ W M K D ; : < 7 6 6 8 : 4 9 ; : 8 ; < ; 8 ; < A ; < > C : @ E B @ C I J H F I G G H C J U ] Z Z ] Y X _ U R S S O Q Q P S O O G J I P O R M K K K Q N E D A I K M I H B D A C E G A < D B B @ A C E F K C E B ? D G I G @ > B I I G @ ; ? A : ; > A < A 9 9 ? C D = ? < > : < : 5 : : 9 : ; 7 = ? @ < : : < > : < 9 = 9 6 ; 4 = 6 8 6 8 : 9 8 9 ; : 7 7 5 5 6 9 5 5 6 4 3 2 8 : 9 7 6 5 : ; = 9 7 8 : ; 6 1 1 , 0 5 4 : 5 7 = = 6 3 3 0 / 0 - , - ) '  $ ( ) ( ) ' ) , , * 2 + ' & * / / 0 , 3 4 4 2 . - - * & - * * & ' ) ) ( & * ' * + % ) ' * + ( + * ) + ( , * + + 0 5 / . 1 1 . . , ) ( + 1 0 , , ) 0 0 . - ) + - * * . - 0 3 . * * ) ) * , - ) + & - ( ( $ ' ( ) * ( + + - * - + * * , - & , , ) , , ( ( ( . - 0 * ( + + / - ) , - - - * / * . , * ( ' 0 * + + . 1 5 5 3 / 0 + % " 
+         
+             
+ 
+ 
+            
+      
+       
+     
+      
+ 
+      
+ 
+  
+           
+ 
+  
+  
+     
+ 
+                                                                                                
+     " + , , 1 , 3 3 9 ; 7 : ; ; @ ? B C E C @ : A 8 > = : = C : A @ C > E ? = > F I I B A A A I G D H L D G Q S V Y X Q L M W N O M W ` ] W W S \ \ ^ \ X _ a ` d Y c e f c e p o m j q x v m k n e h q o i x r f f p j m y y s k k b m j j c o i k q l l h i w o q r p i o m t q l m t v v u l i n s u u s t  y u t } u u u x { z { y t o p r u y v y w l k w s m p o q o q p q l d ` j n i k p o l { r o h n s e h u k m n s q k r r t r u q u u q q { v k g o k l u r y x d q r m e b p m j j m p t p r s q m e i m l q r t m r m l d g g m z { p | 
+   x z  { ~ y r x  z y r t     z u z }      |  x u ~ | v 
+ { { w t u p q p q h i h j g h j e b m g o m ` c b ` d i ] ` e X ^ i ^ ] c a ` a X \ d ] ` ^ a ] f ^ a a b e _ ^ Y [ \ a \ [ a b a ` a ` c _ f f e b e b ] d d c [ Q R Q O J D B 5 7 : : : 5 6 : 4 1 9 = < = ; = ; ; ? C ; > C @ @ A A E E A K I M O N M F F I K U ` c \ c _ a Y S W Q H K T X O Q R T T J N F O L G H F H G K C E F D G G C D A ? > @ C K C A D < B B @ C E H I K I F I J H B H G B ? C I K C 8 9 @ @ 4 ; D B < > 7 9 @ C G A @ 9 > = @ : 9 : = F > 9 > : = > = ? ; 8 C > > : @ ; > : 7 : : 9 9 5 8 9 7 8 ; ; : : 8 3 8 6 7 5 7 6 8 7 : : 4 5 2 5 : = : ? 7 5 8 4 1 0 - . 0 2 , . 1 3 5 3 1 4 4 - , + 0 , ( + ) ' % & & ' ( % , - - / . 0 , ( 0 . / 4 5 , / 1 6 / 0 . . - / - * , + . ) ' - + ' + + % ( * - - ) + * # ( * - / ) ' ) 3 4 + / . , + , . - . * - / 2 0 4 0 / . - * * , 0 - - 3 - ' * ) - / ) , - , * ) + + ) ( ( % ' ' ) ( / / ) ( , * . ( ( ) ) , , / - * / 0 ) , ) ( - , , ' + . + ) ( - * / * 0 , . % , , ) ) * ) 0 3 0 - . 1 - ( $        
+                       
+                
+               
+ 
+              
+ 
+  
+   
+        
+ 
+ 
+                                                                                               
+ 
+ # % ' ' + . - / 5 4 8 : 8 7 ; 9 = 8 : ; A @ @ B @ ? 9 4 < @ G C @ D @ ; A C > > E C I I F H I I G B F L J M P S R ] U S P P N Q P R ` _ Y U Y Z \ W V W ] [ V a i b h l e g h l c t s r l q l k o r s r f j | t k d m k j n o n n q j j l k g k q l p u m q l k s n p o n o i s l q m i n o r h m n u s z y }  v m x | ~ y q u { w p v y s s w | { | t v q n u  z o r r q m l j f b n p s x l p q o n s q r q n k j q i m | m g l s m q q p o v q p u k o h i k j l r m s r k o h j o h k o n s m t j o t s q l f e i e k t r o l o o i m u q y w t | | u r {     w z v w y v v ~  z   w x { ~  ~ v } } y z | r {  v w   z | t k n o o n l m j t n k c h w l g k d e b a i e ` ` a Z \ ` [ h ` a \ ] _ b b [ ^ [ ] ` ^ R X c a l ] W \ _ b ` [ ` ` X ` ` f e e ` _ _ _ m b c ] d V U V J H J > ? @ ; 9 = ; 5 9 5 2 8 9 3 7 5 ; ; > ? > 8 9 ? ? @ C B < A ? D > D K G M O L P P Q T V Z d ] Z ] a U P M S W N P T R U T Q L N G J L L J E K E K H H H C E A H H @ A C = : ? G B C E A C C G = C J = A H M K E C K C E G D H A D F A A : < = > C D C = > = < ? ? @ B 9 : ; : @ ; = B @ B > : 7 5 > ? < ? @ 9 @ A ; 8 ; = = 5 A < ; ; 8 6 5 7 ; 9 8 ? A 4 4 : 9 2 9 7 ; : 8 8 9 ? 3 3 : 5 : < : 7 3 8 ; 3 5 4 0 0 0 5 . , 1 3 4 / / / . , , , - + ( , / / ) ) ' ' ) & ) , / / 4 3 . / , / . 0 5 / * 0 * 3 , 0 2 6 2 2 - / / ( , , 0 / + - - , . / & ( ) + . $ ( , ( , % + . 3 0 3 . , ) - 4 2 5 0 , 6 , 3 1 - . - ( - + ( ) , + + , / / . * . + ' ( . + ) % * 2 - . * ' ) + - + 2 / * + 0 - 0 + $ * ) * ( . / % - / . 0 . . / , 0 + - 0 1 * , - 1 1 * + , 0 + 0 / / ' * + , 0 - / - * ( * % $              
+                                                                      
+          
+                                                                                             
+   
+ # ) ( ( + / - 4 8 4 7 7 6 7 7 < > = ; = A @ = ? ? B : ? = F E E C C = ? D B B E B B K F H H E G H H L J I R U O W [ U R P U X Y T \ ] ] Z Z _ Z ] Z Y Y ^ _ e d g d i b f i h d o o n q p p r j l m l k c n k e h r n t s j g j p l j q l l l h o k p i g l q p o o o p j l o n t r f j s q m t s r q n o q r z x w } } q j n n l i t s s u x v q q l n m r p t x s q q m k l m j i l n p n o p m i o r u ~ u j k k t n n n t n i k q p l d u p u t h g g k k l g c i r s i k q o m l g d i b l g n l i k r n p s o t m b o k n i o q c _ h q w w v | { w q n y y x w x z ~ v { y x }  {  { t w t   } y u u t t r r w | x w x t u z n h q u q m d c s s l i b b g m h p l g f e m c ` ` f c ] b d d ^ b c b b d ] T V _ Y Z ] ^ ^ ] e c b a Z a [ Z ] ] Z _ f e f b c b a d g h b \ ` Z M K M O @ @ : 5 : : 7 3 8 4 : 5 2 2 6 7 8 5 ; C @ D @ : ; > > C F G @ A ? C C N N L O M T [ \ W ] ^ X \ \ T W ] U R T Q Q R O S S \ W O K I J L I K G B K K A C F I E F B J D @ ? ? ? E H D D I G C C H A B D G D C D D F D D E B G I D E A D A @ < : ; < ? C F G @ C H < C > = 9 : A @ ? @ 9 ; B = ? ? ; 9 6 < @ @ ? = ; @ ? ; ; 8 : : 8 ; = > : : : < = ; = = 9 ? 8 5 4 6 8 9 6 : 6 2 3 : : = 6 6 : 7 < 9 6 3 4 : ? ; 4 / 3 7 5 2 0 - 2 / / 1 - * - 0 1 0 , * / . ) ( + , + , 3 + 4 2 . 2 5 0 1 3 5 3 0 0 1 / . / 7 0 1 2 1 0 / 0 - , * + . 4 - - . . . 0 - + , * - - ( ( + ) + & & ) , , 0 1 / - 2 3 . / 4 3 7 1 3 1 , + - ( * - + 1 / * + - 1 * - * ' ' ) * ( * / * * - , + ( ' & , + - . . . + 1 - - * * + - - * ) - , , - , . . . . + 0 * , 0 , + - / 0 1 ' ' * . , , - * - * . , , 1 1 4 + - ( ' # 
+                       
+                                     
+                            
+                                                                                                   
+   $ ) ' + , 0 , 2 8 ? < 8 8 9 4 7 ; : : B > A > ; < = > < ? C C D E ? > < = ? > A A = D I F G G @ G J H G M P S Q M P P O R X U W V X b Z Y W ] ] ] ] Z Z Y \ Y ] b _ _ e ^ i g ` e i s n n o n e l l o o n i k a b m o o l g n r n p f m k i j b d r k f k r l n o m j v o l p q k m s i r m g q l p t k p u z z y u t p j i j n f k r o u n s u s v h l l m o t n k j e f q p i p p l s q f q v m n k t q q q k k i h h n m o o q i p k d g u n u r o p o r p i l g d j e i i p p i l m h e i e f o g g l f o m o u r h j h g t q k b ^ ^ e q u v y {   o q s u  q v { x y  w u |    } v q r s x y r u q l r t p j o n m s v l n ` ` g h g j e \ \ b i i f e ` ` _ ] b e i g f c \ Y c h ` j d _ \ a \ Z a e ^ _ Y ^ Y d ^ _ a a f d b Z a ] \ \ ` c b ^ j f d a g i ` \ b b Y S Q F E G E @ < : 7 5 3 4 ; 5 6 : 7 9 4 7 9 9 7 ; < B ? C C C A @ > ? G K F I G G L I N T U W [ ] Z V _ X V Y \ ` Y U W Q S N Q R I L U W T N J J M U R J M I J E D @ H G H F G = C D @ A @ E F D B D H E D G C D D H A > B D E G G D B A K E ? A D @ B ; ; A ; = B G I B C I B E @ < ? B @ > ? ? = = C > > C < ? A D > ? C ? B @ : : < : 6 : = < ; @ ; ; ; < = E 8 < 6 8 9 : 4 8 5 6 4 4 7 5 8 9 6 : : ; = @ : 4 5 5 4 7 8 8 4 2 7 5 5 2 1 / 1 2 1 / , ) - 1 / 0 - * 2 0 3 / 0 , 1 2 4 / / 4 2 2 3 1 / 5 5 6 6 1 1 3 3 2 6 4 1 2 / / , 1 1 . + . 0 0 / 5 4 0 . 3 , , . - 2 , / ) / ) * & % ' ( * 0 1 + . - 2 1 / 1 / 0 - 5 - + * , - - - + - - . 2 . ) + - % ' ' * + + - + - - - / - ( / , - 2 2 . - 1 3 . 0 0 . ' * , 4 0 0 1 , . , - 0 2 ) , - - / 0 . , 1 2 - . 1 , , + 1 / / 3 / + . . - . 0 1 . - * , + %                                                                                                                                                                                           
+ 
+ # # % * * , . . 0 < = 9 7 9 > : 9 ; > < : ; < ; 8 : < : < A D B I I ? 8 9 E F A @ = = H H C J J F A H J B M O L M R P Q R X V W Q Y \ U X Y W ^ [ [ W Z X X Y U _ c c c i a e a b i f f k m e i i j o k i f l m e d f o h b k l q j n p s k f k k j k f s o k n k f g n o m g o l i j l h j t s n l i u p q | x u v t q r i m l l h i p o q m t s | | q r p l s r n l a g h n p f i l h n g h i g n l s q n h o r c d q p p m l i d j l i i i l n o n k g n s s q l k j l h e i l r m l o k f d ` g i e m j i k g q p h k p e h t m h ^ [ _ c r q m r | y ~ o u x s v s q h p q s u z { y  } r q u | t q t l y r e o n m k l p o s o l i h c d b ^ c e ] [ ` b h a _ ^ ] _ ] ] Y ] a ] X \ \ \ ` _ a \ X X X Y \ a f \ c ] ] Z a g \ ^ b X [ [ ] b c a \ ^ c ] [ ^ e g i i h c \ V W N O M C = ; B ; < 8 9 2 0 3 4 5 = ; ; : 8 8 7 ; : 8 : > A G A C C D F G F L K M G M R X W Z X T V Z W V ] [ ] [ X ] Y P R R R Q Q T M Q R O T O G K K N O K J J M F C G H D J H E D ; @ D C C E M F B H J H C > D I F F C = @ B C A D A E E C C ? A E < @ : < = E A B B = 8 < < ? D < @ < ? = < = A ? @ E ; B L C @ A B C B > ; B ? : : < < ? 8 @ < 7 < 4 9 = = > : 8 8 = 8 ; : 5 : 7 6 9 8 ; 8 9 9 8 8 ; 5 5 = : : 5 5 6 4 6 9 7 3 4 1 1 / / 0 - * 2 , + ( , 0 2 2 3 1 3 3 5 6 3 1 5 5 3 0 . 2 2 2 0 3 / 3 9 8 / 3 1 5 : 2 1 5 2 2 1 1 2 8 5 0 ) . 4 / / 6 4 - 1 4 0 . 0 0 1 - / 0 - + / ( & ' ) - - - * + - , . / + * . - - , . + - 0 , / + ) * ) ' ) + * . , * , . 1 , 0 * 1 * * 0 - + / 2 0 - / . & - 4 , , - - * , , - 1 1 1 , + 1 * , / ) + ) + / . , - / 5 4 , 2 , 0 - - / 1 4 / ) + * + 0 , / / . - - ( & 
+                                                                                                                                                                                         
+    & & & + ) & ) . 2 3 8 9 5 : 8 9 = ; > A : 9 : ; : ; < > < = ? @ C A < @ = ? D > = ? C F D > I D B D K I H I R O O T W N N T P Q W V a ] \ V U Z Y a U [ T \ _ [ ] _ ^ ` a b f e c l h h l e e u n r m j h j k a a e k r l h b j r n l s h k k o m q e g q m f k k i i n p h d h d k o r p j h y v j e e i x y q j v m p p i o q h l p n m d j r u u n o p q q o m n r q o j v m j b j m h j k q i j l v v n d i p e k m i k k i u i g t o j j o l e a b k l n m o k k k e f j m g r j o r e h m g h h j t n h n k o i e l o l l l l c _ b d j o p y m y w w r q s s x v o o q s p m s v t | q k t t { t j t o m n e m j o m h h j g k h ` b ^ a ] _ a \ W ^ Y \ Y Y ` [ ] ] ] ^ Y S U \ [ X Z Z V ] [ W V Y _ _ [ Z Z \ d ] U Z \ \ Z f _ ] U Y [ ] ` c a ` a Z ^ d c k l a d S V T N D E D : 4 6 6 ; 6 9 9 / 2 3 8 9 7 = 9 7 : ; : < 9 : ; 8 A C E G H I J M L I L M N W \ Z b [ Y Y X ^ \ ^ ` X ^ _ Y Q S O N R W O S V T P R Q Z Q J G C G P K J K K H K A D F C E H D ? D E @ E F G J H H L A K C E J H @ G @ A G A C C G E I @ @ A @ D B : = A > A ? @ ; ? ; = @ > B ? < > = C A ? A A < @ : : D E @ > ? > B B ? = < 7 : < B > : : 6 9 ? 7 9 8 9 : 7 ; 6 < 6 3 : ; 4 ; 6 9 : ; 7 4 7 8 3 2 : 5 < 9 8 : 8 : 3 4 4 2 6 3 , . 0 1 . - - - , , * + / - 0 4 5 6 6 3 4 2 8 7 5 2 2 2 0 3 0 6 1 0 1 5 3 2 2 0 . 1 0 . . . 0 . 0 - 3 1 2 . 2 3 - 1 3 , , 1 3 - - . - . 3 4 2 1 - / * + - 0 - - ( * * + + ( ) ' 0 4 0 / + / 2 7 3 5 1 . - + * * + - - * , , . - - 0 0 * 1 - + , 1 3 4 4 2 * , 2 + ( * / . 0 / , 1 . 0 4 , / 3 - / / + 4 / + - . / . , . 2 5 / , / , 1 . 0 0 2 4 - . / - - 2 / 0 0 , + , ' % 
+                                                                                                                                                                                           
+ $ ( # - + ( ' 1 2 6 8 5 : ? ; 9 7 : < ? > 9 ; = : 5 ? A A 7 ? A > C ; @ D : ; @ < = A D @ D F E @ E J N B C P O P P I H H M Q S W Y \ Z V S W ] ^ [ X [ Z Z b c \ Z Z [ ` a m j ` c d k c _ ` n q o h h k m g d c f j m k d c l o m p q m k i g p l q k r l q l q m s l h i f a o x s s r o o v s j i k i p m s n k o l m o u o k l q u m p k e m j j p q t m s t q n u w l p u q e c m m g g o r i o l k t l l n j n f e i q q i e b j f q k k k g ` a e b l k f g n l i h l f m o m i k a b h h c j i l p b g k e e f d q n d a b ` _ \ i g n w t q v y s s j l s n n m q t r n o r k o m l n k p l k k q t f e ] f m f c h g b c k b Z _ b a Y ` ] ` _ U \ ] T X ^ R T S W X \ V S Y X T U U P W T X \ X W T X X X [ ] X R ] ` ] ^ _ _ _ ^ W U Z ] b a b e ] \ i a Z ] X X M D E D D A > : 3 2 5 9 3 9 6 6 : 7 3 4 2 7 9 7 = 8 : 7 8 9 < = < C D M E J K R O S Q \ ] _ _ ^ d a Z T Y [ Y X V [ \ Y X X \ P T W T S P Q P S V S R P M L I K N J D J E C C C C C A C D = ? B I B B C H I E G L A F K E G B < F B F D A B @ ? D G J @ > C A = 8 : < G ? @ > < A ? : ? A A @ A ? > @ < ; ? < A > > B C < > ; A : B ? @ = < ; = @ A A ; < > 9 : 8 8 < = 5 4 > 5 7 8 5 9 9 3 ; 7 : 7 : 9 6 7 : 5 7 : : : 9 1 5 4 4 5 6 3 1 / 0 0 / 3 . - 4 0 . - + , 2 3 . 0 4 3 4 4 2 4 / 6 3 1 0 0 . 2 0 / / 0 4 0 9 ; 5 / / . . 0 6 4 5 3 0 4 - / 0 1 7 5 4 - / - * . 5 2 3 0 - 1 . / 3 3 4 / 0 - / / 5 1 , * * ( ( + ( ) + 1 0 * 0 0 / - * 0 - 0 , * ) ) + , + . + * , - 0 0 . . 2 1 2 , - . / 1 2 ) * + / - - . - - 3 1 / 1 - . 4 3 2 1 0 1 / , 0 0 ) 0 0 1 5 / / 0 5 . / , ) + , 2 1 3 - . 2 - 2 1 + * . / . * - $ 
+ 
+                                                                                                                                                                                            ! " $ * ( , - 0 9 5 6 5 7 8 > < = 7 9 ; < 9 : 8 8 < ? < 8 4 ; > A A G @ A @ C ? > = ? C C A C G I C B @ @ D O K L M F J O U U W V X V U S T V ] a Y Z [ [ _ g c X Y ] Z \ b i c [ d j h h _ _ c i m c f l j ` k f i c e g h g j k h f h j g f i j k i j n n g l l h h n o i e h m j h l l m u u o h l f i g m q s j q m s t j j s k r m k s y k h i n x l f i h j l m m t l m h a c i p r g g g q j f f k j q h n k s e i c e ` e e a e a i o h b _ g d _ b _ ` f g j d o k k i k j o g e f k l f k k l d g e n l _ g g a i d e [ ` Z Z b e e r p o p p t g r q i j h r s s v n c g m d h ` h i f l h f b e g g ` _ _ ` ^ _ e _ c a d a X ] ` ] [ ` b Z W T \ [ Q X V R R R T R W R P Z ] S Y X U V Q O U V W R S R N ] Y V Y [ Z Z X X Y ^ a ^ [ X \ Y ^ b ] ^ a \ X J R S K E @ B A : 8 : < 3 4 ; 7 3 7 3 6 < ; 3 5 7 8 ; : < < 5 6 : > = ? = A B F M T U Y Y ^ _ c [ \ V V d d [ \ Q Y V T O K P T Q T Y R V Q L P O K H N S Q I K N J A H J E H G C D E @ B H H ? @ @ = > G H < D H D I K I B = A > D < = ? C E B @ A @ @ A C F = B B ? 8 1 < ? F 9 7 ? : @ B A ? G @ G > A B E ? 6 = 8 > = @ ? A < : ? @ : = ? = @ : = @ A 9 < = < 6 ; 9 ; 3 : 9 6 4 : 6 6 8 6 = 8 = < < : 8 : 7 6 < ; = 5 7 8 7 6 6 2 . 0 5 / 4 1 . 2 0 0 2 + 2 4 4 0 5 2 6 4 4 0 . / 0 6 3 0 2 / 3 / 4 5 4 6 , + - / . 1 4 6 3 3 , , 3 0 0 3 / 3 2 8 9 - 5 3 4 6 3 4 0 , 5 / 1 0 / / - 2 / / 1 / 3 0 . / 1 0 1 - 1 1 1 0 + ) & ' ( 0 / + - + . - ) ) . * , - + + * , + ( ) , - , 1 1 / + . - , 2 0 , - - . / + ' % + . 2 2 , - / ) + / , / 4 3 2 0 2 1 4 - 0 / - 0 . . 1 1 + . / / 0 . - 0 + 0 1 / ) * . / 1 5 1 + + , - - ( ! 
+                                                                                                                                                                                          
+ 
+   ! " $ * * * / 4 7 6 8 2 7 ; = ; ? 4 7 > ; : ; 7 7 7 ? = 8 4 : ? A = @ B ? = = @ ? A C E ? G A A E J D A ? C H P L M M Q O R U T T T T O N S X U Y X \ b W W ^ Y Z T U W Y b b Z \ e h h c a a ] ` e a d i e ^ a c f f b a h k d h l d g l d l j k m l i q h l q m j b j h g i _ c f f m h h y l h d i c _ c h i m k p k q i n j q j n q s q j i m v m p s m k k e o p n l i m m g a j n c q l h i k h d h d l h e j o h k c _ \ i b ` g g f d d ^ a c e \ \ d _ d c e l n i d f b g e h e k g g k p p h d i d d k e k r c e \ e c ^ \ c ` d l n f i s m q n i g g i d o r i k o k h f f b Y b d b j e e b h a g h c b ^ [ ` a e _ d a ` X \ [ [ \ X ] V W Y W W O Y U [ N N S P V K L P U P V T T R Q S R T U R M R T T ^ [ V [ ^ X V U U Z Y ] Z [ [ Y [ \ \ W W K L E I H C @ = C 9 9 4 8 5 5 3 6 8 5 4 7 5 7 ; : 6 5 ; : 9 8 5 8 7 @ @ ; ; @ ? E G S ^ W Z ] ] e e T W U \ Y V T Y Z X R P H J O R X N T J K M S P I U O L H M K M M B D J I I G G M I E D C = B C : > 9 ? H B A B B A B G C B C A @ > < @ D E K E B @ C A E C A < ? = 5 7 9 : : = 7 ; < B A E B E F ? = ? ? ? < A < : 7 : C A ? ? < < ? = ? : ; 8 > ; = > < : 8 = 9 5 8 6 5 5 8 4 7 8 < < 4 ; : @ = C ; 8 8 6 : 5 4 8 9 7 2 1 4 1 0 1 , , , . , 4 - , , 2 1 0 - / . 4 5 7 8 0 4 . 4 1 , 0 0 1 / 3 3 / . 6 8 5 2 . - / 0 , 0 / 1 5 3 2 3 4 . 1 0 - 4 7 6 1 2 6 4 2 2 1 0 / 2 2 3 2 2 - - 1 5 3 . 1 / 3 . , . 0 0 1 - 1 . , / - ) ( - + - + # , . / + ( ( ( + - * * . * - + - ( * + - / - + + ( , , - . - , , 2 / + ) ( , + . . * , - ) - - , 2 0 ) - - 0 5 1 , * - - 4 2 3 1 - , 0 0 3 1 . - 1 1 . . - 0 * - , , + 0 - ( * - * % ! 
+                                                                                                                                                                                            
+ # & $ $ ) - 0 4 6 1 . 3 7 8 @ @ : ; D G C B B ; = = D E C = B E B ? B D A A E A B C F B D D B ? F B F D @ J L N P K P M P N S Q T Q N Q L X [ R M U U a ] U \ _ ] X P R [ ] Z ^ [ d c g h ` ] c ` d h a a Z ^ Z _ f g j e b c b j h i g b f g l c e k b g e j m m f c l o u j c d e g f i g n p n g n l j ` i n n o f c h e o k q h l k q l r j m m h p t q p g d r r d h i l h i j h h e i g f b ` h b a _ g l g e h g g c _ ] a c g c k j a c b e e d ` ` ^ f ` c g d b ^ a f i b ] d e ` c j m k q f h h c a i a n j a b ^ Y _ X Y _ e l g h a b h k l j k b g j e j g b g i e c g Z Z j d d ^ c ` ] ] ] ] ] b a b ] a ` X _ _ \ b ^ T V Z Y V V Z T N P O Q M W U W R P M M L G T P O Q T L P Q N R Q M S S I F V T X W U W X Y T [ ` Q U R U R Q X X S P L ? > 9 8 7 < : 7 9 3 1 2 3 6 2 2 1 9 7 7 3 5 2 4 7 5 8 5 3 7 7 7 @ ? : 8 B ? > A H R [ b ^ S U \ W X ] U S X [ W S V X S P Q I L L S Y R Q R K K F L J I M Q K E G B K J B ? H J E G G H D D F D C C E ; E > D H B B A H E 9 ? ? = E A = 9 ? A F H G D A E G E D < ? ; 8 9 5 7 = 9 ; 4 4 < ; = @ < > @ = ? < @ > = : A > ; 8 ? = @ C ? > 9 8 : ; : 8 6 B A > ; = ; < 4 8 ; 9 7 6 8 8 5 8 3 > 9 5 3 5 5 ; ? 9 5 4 1 8 3 7 5 4 3 0 3 2 2 2 - - 2 . . . - * / ( 2 2 4 3 - 0 3 6 0 4 3 3 1 2 1 / - 0 / 2 - - , - 5 2 / 2 / , 0 / ( * , + / 1 3 2 2 1 / 0 1 1 3 2 5 5 2 1 - / 4 * - 1 6 5 0 , * - 2 0 5 / / 2 - / - / 0 4 0 0 / 2 / 3 0 + ( . ( - + ) & + * & ) % % ( * % ) ) + - * + + $ ) , - * ) * ) * / . 0 + ' - 1 - + / 2 ) + + ) , - * . . ) + 0 , ) , / 0 / ) . 0 0 . 1 0 . , ) , 2 0 3 - 0 / 0 3 ( ' , - - + , 1 + 0 - * ) 0 ( ! ! 
+                                                    
+     
+                  
+   
+          
+    
+                                                                                              
+  " " # # ) . , . 0 4 3 3 3 < : < @ @ < ? > A @ C @ C ; B E G @ @ C C = : B < > E J E G F D F A : A A A I F A G K S Q O Q K K S O M O O M S K \ ^ X R O V W \ U U U R Y _ [ Z Y [ a a \ b d e d f ^ ] a d _ a ` ` Z \ i l g h f d b c a m ` a f c c a a g c d ] e e i _ ] b c c e i l l s k k j m l b i m m g f i i j u j j e g i m l g i p o h m g a i n j j g e h a f e e g c c f m c i f e b e f d g i c g d m h _ _ m m i j _ \ a \ [ _ i a a b ] ` ` e a Y _ c _ ^ c b d c c e j ] a f h Z f i d g j g i b g b d c _ ^ e _ Z Z U W U U a b g i f _ e ` Y c [ a a b c [ _ Y \ ^ a e a \ Y f e b [ _ \ Z Y [ W W \ ] b Z Y T [ W ] ` X W T W \ W U X U V O N O K L L S P Q O J G F N N O L S N M J M L M J L N R I I N N T T U P S Q N P N O Q P O M Q F J B > > 9 5 9 7 5 1 1 2 3 , - . / 2 4 2 / 9 5 6 / 4 5 2 : 4 4 5 8 6 7 < < < ? = = C D I O S [ V Y V S S Y W U W S U X W R N R K K O I L I R V O K L F K I G K I K L M G @ D H H E B D G C J C J I D D E C ; ; = > < B D A ? B D > C B ? < E F C C ? < @ C E A D E G G E ? > 9 : 8 3 6 < 4 8 6 5 8 < = ? B < ; ? ? @ > < : > < > < 7 7 9 < ; 5 = 6 < > 3 7 8 7 8 ; ; > @ 8 8 5 : 9 < : < < 8 6 8 3 8 8 9 3 3 3 4 7 5 7 7 2 1 2 0 0 . - 1 + / . + - ) 0 , . ' + 0 1 + - 8 2 1 1 2 3 7 2 4 3 / / - 4 1 . / , + + + 1 - - 1 0 / 0 - - * * ) ) ' * ) ( , 3 - 0 0 4 0 / + . . 1 1 , / 5 2 / 0 7 1 0 0 + . - + . / , - 0 . - , , 3 . 1 * 3 3 + . , + - , + * , * + ( $ & & % $ ) % ) ' ( * , - % ' ( * + * ( ) + ) / / - , + , - ) + * + * ' ' + , * ( ( + - . + * , * - , 0 ) * / 2 + , , 0 + + + , . / , + , * + - - + * ( - , 0 + - / - 1 - ) " " 
+                                          
+                                 
+       
+       
+ 
+ 
+                                                                                                 ! " # ! * . - / / 3 5 7 1 9 7 ; 9 @ ; : ; = B > ? C 9 : @ G B = C F D B C = > A B @ @ A D ? F A F D D F I B E K R O P S I L Q P L P Q T T S W V Y U R [ S X U S U V V U Y X W \ ] [ ] _ ] d b d d ^ _ \ c a c e U ] a i d a _ g b ` e b a ^ ^ d ^ c \ e a ] a d e ^ ^ ] ` i \ \ g g k i f k j e c c c g h e b h ` h g e c d e k m e b f h m e q l c f c l i c _ g f a c l f f ` d h e d g f d f d e k e a ` c f g \ f b e e f ] ] d ` d ] ` [ f d ` i c c b _ g i i ` ` _ d c d g _ \ ] f c ^ g g m h m j d ] ] c b c \ g f ] Y W P Q R U X [ _ a Z T W X T ] [ Z Z \ _ [ _ V W ^ U W [ \ _ ` ` [ W ] U Y W ^ U V X ` [ ^ [ ] [ Z [ _ S Y Z b [ S U U L N N U Q J H M J M U J C H L I H I M Q N I G I N M M P J H M O N N J J C I N J N H I J J M A @ D : ? ; 3 2 2 0 / 0 / 0 . ) , + - , 0 0 4 3 / 3 6 1 2 / . 3 ; 2 1 5 7 = < < A < B G I S T T X V Y [ U M K T R S O L Q P L M Q O O N P J K G F I K N O H < A H C F F F D M G ? C E G H C G E A F F C J A A @ @ 8 = A = 9 ? B B > = @ A G ; > ? B ? > G > > ? = > < ? ? E @ ? : 4 6 9 6 1 : 8 5 9 5 9 9 < = D < ; 9 : 9 ? < = 8 : = 5 ; < 7 6 : : 5 ; 5 = 7 4 6 7 9 7 ; : 7 7 8 4 6 6 6 7 9 < 5 7 5 7 7 2 2 2 3 5 4 2 1 8 4 4 - , * + - ) ( - , ) , % , * * ( * ) , 0 . / 0 / 0 2 2 . 4 2 2 1 2 - , - / - - , * ' / * / * ) . 0 - - , . * * * # " % ) ' ( / - * . , ( ) + 1 0 1 - . - - 0 , . / , / 0 0 , - ( * ( * / , / . ) ) / + - 1 , . * * . + - * + + ( ' % % & ( ) & & % , + ( * & ) ( ( - ) * % % & ) ) ' & - + * ' ) ( ' ) & - ( * ( + % + . * + . * + * * . / 0 * - , . 3 + ( + * ( , ) / 0 ) % , - ' ( , * + , * . - 0 . - , , 0 . ' ! ! 
+              
+               
+                   
+   
+               
+                  
+       
+ 
+                                                                                              
+ 
+     # $ ( , + - - / 3 4 4 ; < < = A ? 7 ; < ; > @ A 9 8 B C = = @ C @ > ? C C C @ A B ; > C B F J = E C @ G E L H M N Q M N L S M O N Q R M S T ] X W X L W Q S T \ X S V V ` ] Y Z [ ] Z ] \ a c Z _ V c ` ] X X [ _ c b [ Z T ] c W e c ] _ _ _ [ \ b ` b [ k l b ` ^ c g b d b ` a ` h j b d ] ` e g i a ^ f i d _ ` f d \ _ e ^ e e b k g g m k i g \ c ] g j g a ` d c a _ ] k c d a d X [ b c e ] Y \ T ` f b Z Z ^ b a \ Z e c \ ` g k ` ] d c ` [ X a a ] ^ Y e _ \ ] c b a ] a b e f l ] c k e _ ] ] [ Z _ c ^ \ W O U O K H P Y Y X V Y [ T Y X X ^ \ Z U S ^ [ X V S X R V O R V ] X Y X X ] V W Y S Q Q V [ Y \ V W Y T Y R O [ O P V W N L J J K P J H J P I K E E O R E F J E L G J E B L H J I E G E N M O J I J G J M H ? C D ? D > ; 7 7 1 4 2 1 1 , . / + - / ) - 0 / + . . 0 + + 0 5 0 0 . 0 4 7 4 / 5 6 9 = ; D F H S O O X T T R P L S M E S R W T P Q N F J H C E Q R H J H G C B J N H E A C @ B B B B G C @ ? = ? ? C @ E F C = ? > ? B C C < = @ : @ E B @ < < < D @ B C D = > ; = > : A @ D C = < ? @ < 5 5 5 1 1 5 6 : < 6 3 3 9 < > < < ; ; 7 : = 9 ; 7 ; > = ? ; 6 8 : 9 < 6 2 5 5 4 7 4 7 7 7 8 6 0 1 : 1 2 2 5 < 8 6 6 8 2 6 4 2 0 8 / 7 - , . 0 . , , + - ) + + , . + + ) ) ) ' ' - * ) / . / , . * , . ( . - . 0 . + 0 ) + , * % ' ) . - / * * , , / - ( ) + * % ! ! ' - $ % ' * ) ' + ) ) * , ( + * / + , * ) - * ( / 1 / + . + , , ) , + ( ( + ( - . , + / * , * * / ( ( - * ( * ( + , * ) & ' ( 0 ' # & ) + ( & ( ( ( " # % ) ( + % , , ) % ' ' , ' & % * ' % * & ' . / + ) * ' + + * ) 2 ' $ * % ) & & & ' ' * % ) / ) ) * - ( * ) * + + ( ' + . , - * * - , ( #                          
+         
+     
+ 
+   
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+      
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+        
+  
+ 
+   
+ 
+ 
+                                                                                                 
+   " # ' ) ) * , . 3 2 3 7 9 : : = ; ; ? < @ @ @ C B 4 9 > ? A F D A @ B G G J D @ @ > B > @ F H D @ A C J H C H I O T M I V P M P P M M U S R W S M T Q T W V Q T Y Y T T Y V U [ ] _ ` a b a h \ d ` e a ] \ _ ` ^ \ U T W Q \ S U ] _ [ c ] [ S a ` ] a a c o j c b e h c ` \ c h e g m ` a \ Z d _ a k _ _ c b ` a d d \ ^ ` c a _ ` l g a d n k l ] b X f h k e h a c g c \ i f a c d _ c ` Z a ] Y X R U [ d [ R \ a b Y ] X ^ e \ Z \ Z ] d g c \ b d _ Y X W ` ` X _ h e _ X ] [ \ b ` b b b a X Z a V ] V W U R J K P K P K K Q S W O U U R Q U Q S U X V Y Z X O P U Q S U N S Q O H Q [ S V \ Z R Y M R V W S T U S S N R N M S T M Q R N J H K G G I O C G J H D H J G D D H B J E H E E O D G L E G @ @ H I D C C G @ > < : < 9 8 3 2 3 9 - 0 , - 1 - * ' * , , + + ) , - + * . 1 . 0 , . 4 4 1 1 3 3 3 4 5 : : D D I J Q T T P R R M P L L I M K P O Q P J P M H D G G I I H J C B B F J B C D J E F F ? F J D A B ? ; : ? B ? ; D B B ? 9 : E > ; B @ : 6 ; 8 7 8 @ > 9 = A @ ; ? 8 7 A ? @ ? ; C = > ? < < 8 : 4 2 5 3 0 5 < ; ; > 8 8 7 1 3 7 : = 9 ; 6 ; 9 8 7 7 8 < 8 4 7 7 : 6 : 9 8 6 ; 8 5 1 9 . 3 7 6 4 2 6 3 8 3 2 4 ; 5 ; 4 4 4 0 , 0 . / . 3 . + + - * & ( # * * + & * ( ) * ' * , ( & - ) , . / * / . ) + + # ' ) & * - - - * + + . * - ' , 0 3 , / , + , / - + , ' ( ) " # & ) $ % ( * % & + - ) ( " ' ) ) - + ' ) ) - - , . + * , + - + ) + ' * * ( ) ( * * * - ) + $ ' 1 ' ( * ( + * % * + , * ) % & * $ " ' * * ' ' ) & ( & # , ( ) $ % ( ( ! "   $ & & ' % ) ) ) & $ " % ' * * + * ' . , , - ) ( ) ( & * & * & * * * # ) + * $ + , & + . / + ) % ' , ( ) ' - . + $ ' 
+       
+     
+       
+ 
+   
+ 
+    
+ 
+ 
+ 
+    
+  
+ 
+  
+ 
+          
+ 
+      
+    
+  
+    
+  
+ 
+ 
+ 
+      
+            
+ 
+ 	          
+                                                                                     
+  
+  ! * ' , + / 5 2 2 8 4 2 8 = 6 4 : < ; : = 9 = C 9 = C @ < @ B B @ < B @ I F = B G @ ? E @ F E B E D E B F I B E J L I P T R L L N O M Y R Q R S T U V T Y Y T S ] X V P ] W Y b f d d i b m _ b c _ b b ` ^ [ c ] Z ] W Z Y X P O \ W X W ^ T V ^ b Z \ [ g ] X [ ^ f g _ ^ ^ b g d g _ a i _ [ f _ \ _ Y \ c c b _ b ^ \ ] e [ a a a h c a g d b _ a _ a ` c b d a h c ^ b i _ [ ] d [ ] a ^ W W Z _ \ ^ X ] _ \ ] Y W Y b Z W X [ ^ [ ^ W \ f a b ^ b c [ X W \ _ ^ [ c [ _ Z Z Z _ [ \ X b \ _ X S Z X Z Q O Q P O K R H M N W T U R O R M V L M O Y O R O S \ T N S S S U Q Q R P S Q R Y Q R R Q M S Q M O V Q Q J Q O L N O Q P Q Q S Q P H G N L D H D D E G D B D I K G A A D J G G G H G @ D K B B @ A ? A B 8 ; < 7 6 4 0 5 6 0 / , + 0 ) + - / ( ) ( * ( * + ) & ( + , , , + * ( 2 . ) / 2 , - 4 7 5 9 ; > C B H F G J M Q P H M K L O I G K E I K S M H H E ? H D G E J A I D C A C I C E D @ E ? > D E G H A A < > < @ C = ; ? B C < 5 6 > 7 5 5 : 7 3 > < 9 < @ A 6 : : > 7 9 < > > ? 9 : = = > ? < : 7 : 9 5 3 5 3 2 8 8 7 ; 6 = < 0 0 1 < 9 2 7 8 7 5 9 ; 2 3 5 5 4 / 5 ; : 9 : 8 : 4 : 4 1 4 6 1 1 3 6 6 5 5 3 5 1 1 5 7 3 5 1 2 3 / / - 0 1 3 0 - ) * ' ) & ( # + , - * ) * $ $ ' $ + + & + - + . + + ) + ( , $ ( * + , - . / - - 1 0 * * ( % + / 1 / / , - . 0 - / . ) . . - " % ' ( % + $ ! + + & ' ) ( $ $ ' ' ) % ) / / ) $ ' $ , * ( ( , ( ( * ( ) ) & ( % ' ( + * ' & ' ( * % ' + ( - ) * * ( & ( + * - % " % $ # # $ # ( ( % $ ' % & $ # ! $ $   ! % # " $ ' * * $ & ' $ ) & & ) ( + . . . * ) & ' ' ' ) , + + % , ' * & , / + + ( ( % * - ) - , * % ' ' ( ' & + ( # % #      
+   
+ 
+     
+    
+   
+         
+ 
+   
+ 
+  
+  
+          
+ 
+   
+  
+ 
+    
+ 
+ 
+  
+      
+   
+   
+              
+ 	                     
+                                                                            
+   ' ' ' ' + ) + 4 5 6 : 6 7 8 ; ; 8 < > 9 @ 8 7 7 A ? < A > C C @ @ A > = A B ? B H G @ = D B E F B A H J D G H D G H K R S R T M O Q T Q U V Y P V R S Z U S W R V W Y P W V Z U a ` X d c ` b [ a \ Z ^ b a ` ] ^ [ a a c b W T R Z U R V R X L S Z [ W ] Z ] T R U d d \ b Z _ _ a d c c d b c a a ] _ ] [ V _ e e X ] _ d b d \ f e _ d _ _ b ^ _ ` _ ] ` W _ d ^ ^ b [ _ Y _ a Z c [ Y Y ^ Z X V Z X [ \ O Z \ _ Z V T \ Z _ _ W W ^ ^ ] a ` c e Z Z \ ^ Y T U ^ a W ^ ^ Z ` _ V U [ S Q V ] Z X R Q V Z T L K L L J D G D G I U P T O R U U T Q N G U O L M S W R N R S Q J L L N G O P Q R M S O R N Q K K K N L M P O N L K N S O P P R N J G M K H @ E C C @ H K J I E B @ B B C E = C B B ? = > C A @ = : 9 9 8 5 5 6 3 4 / / 5 2 * , - & * ' ( ) * ) % ( ) ' ) * * , + * - * ' 0 + * ( - ' * , . 9 6 5 4 ? G B N D J E C D G J H E D L G N F E E ? K N J L I K E D = C E ? E E B F E @ @ C C B @ ? ; 9 < I H G F D E ? B @ F ; 9 < B C < : : < = ? ; 8 8 5 8 ? ; 8 ? @ = : @ 5 > : @ C 9 : < ; 9 ; > < > 5 3 8 8 4 1 5 7 ; : < 7 7 : 5 7 8 7 7 3 = 6 3 : 4 5 4 7 5 5 2 3 4 3 3 3 5 8 6 < 5 4 2 1 8 4 1 0 2 0 3 3 6 3 3 0 1 6 / 7 5 3 3 / - 0 2 1 / 5 3 - * . , , ) ' ) + % ' , , * + 0 ) & * * ( ) # ) ) - * 0 + * ( + & ' , , 0 1 0 1 / 0 / 1 1 . & ' - - - - 2 0 + * / / - / + * ( - 0 ' " & + & - + ( + + - ) + $ & " # * & ( , ' ) , % & ' * , * ( * * + ( ) & , ( % $ ) % ' ) ) % $ * ' + ) % ( - ( # ) % ) ) ( + & ( $ # " & & $ # $ ( ' & * ' " %   ! $ ! ! # # ( $ $ # ( + + ( & $ % - ( ( + - * + * ' * ( ( & & & ( ' & ( ( & & ' + + * ( ' - ( ) % # ' * * ( ( ' ( ( * ) * $ ( # 
+        
+        
+       
+ 
+               
+  
+     
+       
+ 
+       
+ 
+      
+ 
+           
+      
+ 
+  
+ 
+ 
+ 
+                    
+                     
+                                                         ' # ' * ' / / . / 5 9 = 4 8 = C ; 8 4 ? ; 9 9 8 @ > : @ ? ? C B B C E 6 @ B C ? A C ? B ? > C B ? > F D G ? K E F I K G J S P Q Q K M T T S U V U T W T T O L Y Z W [ W W [ \ \ X c a ] e f ` _ _ [ Y c e h ` W ] [ Z Y X e b Z Z Z U ` X _ \ _ U Q U R [ X ` ` [ Z R g b ] _ c _ ^ a c ` ` [ _ Y Z ^ _ c _ c [ ] e h \ W Y ` b a ^ n d \ _ [ a ` [ ] \ ` Z Y U [ \ V Z Y U V T _ \ \ _ P ] e ] Y R S X S W ` S R ] ^ ` ] ^ _ Y [ e a c Z [ Y X \ ^ [ _ [ \ Z W X _ [ \ Y [ ] ` ` \ U R U ^ U R S X W L Q M L V N O J K H H H F J J T V T T U V W L R P M S K L Q K R T P M Q M M B M K G L J K M Q M I N Q P L W N M J L J N M J > B G I K K K N G E E H E @ D B A G D H H E C ? ? : = < B = 8 8 @ 8 4 3 6 7 9 < 7 , 3 / 0 ) . 1 ) ( , + + ) ( & ( ) ' ) % ) % / . * ( % & ' ) * - + & ' ( + + , ' ) , - 2 7 5 9 < @ C ? C B ? A = = F C D @ A D I C I C F C I D L H D H ? C < G H I E D A K G ? G E @ E A C > < > F C B A J ? ; ; C C < 8 D > : = : : : : 9 ; 6 : : < @ > A < < ? < ; 7 ; : < > 7 ; > = = : ; = 7 9 5 6 4 5 ; 4 7 5 7 3 5 8 8 4 ; 8 9 > 9 8 5 < : 5 9 9 5 2 8 6 4 5 2 . 4 / 4 4 9 6 ; 8 2 1 2 4 0 . - 3 5 6 6 4 0 1 6 4 ; 8 3 / / 0 + , 1 + 1 1 * ) + + + ) % & * * ' , 0 5 5 3 3 , ) ( + - * ( - / + , + - ' + / + - , + 1 / . , + . . . ) ( - . . 1 / / . * + 2 - / + / - ( ) + . # # ' ) ) ) * * . + * * - * $ % + ( % $ & ( ( & ( * + ) ) * ( & ( * ' + + ) ! $ ( ( , ) ' , . + * ( . - ) * * ' ' & # ( + * ' ( % # $ % ' ' % " ( . % $ ( ( & " % & &   # & ' % # * % , ' & ' % # ) $ ' ' + + - + ( ( , & ' * ( % ) ) $ $ + ' ( - ( ' * ) + , * ( " & ( + , * & * ( % ( % % &        
+                      
+  
+               
+ 
+ 
+ 
+       
+   
+                               
+ 
+ 
+ 
+                                                                                                
+  $ % & & * + / 1 1 8 : 9 4 7 < 9 @ = : 6 7 9 ; = A 8 8 B > D < = = ? D B B B ? A C A H C A ? B ? B @ E I G I L E H M P D O U R N L Q M U R X X T T V T W U W Q V ] V S V X \ Z \ ] ` h _ g ` _ c _ ` \ ` b ` k ` _ ^ _ \ j a k X \ _ ] _ a a ] X Z Y Z Y W X U V \ \ W c _ ` _ Z \ ^ c b \ [ ` c ^ ] ] \ ` [ e X ` ` c c [ \ ] W \ X \ Z ] _ ` ^ ^ X Z \ X V Z ] V S U ] ^ \ Y V X V Q Y Z Y \ [ ] X X Y U \ ^ Y Y a X Q W b _ Z Z _ ] b \ ` ^ W W ] ^ _ [ ` \ \ b d ] ^ Y X Q [ V X S S R Y W S P Q O M R K I R L M K G J F D D I K R Y X L N O R L M R K L M R P K L S I D M I R K I K I L M P N Q M K F H O J O K I P J H E F J D G G I L Q Q D G C > ? @ A @ = A > < @ C B ? 8 9 4 6 4 8 7 5 2 1 2 0 0 2 1 3 3 3 / 3 - + ( . * & ) ( $ ) % ) * / ( ( ( ( & ( * * ) ' * , * ( + . + ( $ * . - 1 + . 1 1 2 3 : ; < < A @ D = = ? < B D E B C D C K D E B J I H L E E E @ @ @ F E E G E @ B G D B > B B ? H A C B ? A A > @ A ? 9 ; @ > ? ? > @ ; ? 9 < 7 5 8 < : 9 @ ; = ; @ 8 < = > > = A : : A = < ; ? B = 9 8 7 4 5 9 7 < 8 9 ? 8 8 4 6 5 ; ; = 6 5 ; 9 9 8 ? 1 5 7 ; A 9 8 6 4 9 4 4 8 5 1 / 5 4 5 < / 1 0 . 6 2 4 5 5 3 5 6 0 2 3 2 4 3 5 / - + / - 2 , - - + - 0 / 0 + + - + 1 / 6 1 8 3 / 1 ) * 1 . . , , / 1 / 0 / + - + + - 0 0 1 / , , - + , ) + - - / 4 0 1 - , 1 . 0 , - . - ( * ) + * 0 * ' * ( ) * ) + . + , ( * ( & * , . ' ! $ ( & % * - , * ' ' ( & # $ % , 0 . ) % ' + / - ( , * ) ) - ) ( ) & ' + ' ' ) , * . - ' & & ) & ( % * ) * * & $ ) ' , + - - , " $ % ) , ' & ' ' ' & ' $ ) ' $ " ' ( / ( % , , / , * , , + ' * , & + ( * * - , ) ) ' , + , * - , ' ) * ' , % ( ) $ ' ) 
+                          
+       
+              
+                                                                                                                                               ' ' ' ) ) + - 0 8 8 7 ; 9 < = : < : 6 = < A ? = > 7 : ? C G B = D B B ? ? D D E F E E B I D E E H J I G P Q G H G L X K M L O I R O S T P T T U ` X V U \ b _ ` d [ W T V [ \ a ] a ` V _ ] h e h j a _ a d i b d d a ` e ` _ ^ Z ^ b ^ b b \ Z \ \ ^ [ S X [ R V Z X Z _ b \ c ] ] ^ ` W Z a ] \ X ` ` [ Y f \ [ \ e f ` [ Y X V V ] X Z a d b Z X V Y Z \ Y X W [ W ^ b [ [ \ ^ U W V ] c ` a Z Y R V Z ] S Z ] _ X X \ ] \ \ U W Y a b a _ _ U _ a ^ c ] ` ^ \ c ^ S R V _ Z V W S S Q P S L N L N K M I J K N K H G D ? H E N M K S U L M Q L G S P O R H M O M O H G M P L L O K J Q Y T T X R O Q K K H J K M L N H J G E K I D K H F G H D @ D ; 9 < C < < < 1 : < : 8 4 9 0 1 0 0 3 1 1 3 2 . 0 , 0 / 1 ) + * , ( ) * + - * * ' ( + ( ( ( ( ) & , ) % & ' & ( ' + * 0 + / / - - ( - 0 / 1 0 : ; < 9 ; = > > ? C C A ? : ? ? A A F ? F A F A @ ? @ A D D G @ E F B D C I C D E G J F G > > ? A K D A E A @ < : = > 9 ; = < < = = A = A > ; ; < < 7 8 3 8 7 7 : = ; C @ 7 ; > D = < > ? < < > < = 9 : = : 8 8 : 3 4 6 ; 9 : B < 5 : 7 8 8 @ : 8 = : 6 > < > : 7 = = = > 8 8 6 7 7 7 7 9 3 2 5 2 6 2 3 4 6 8 8 6 5 2 4 0 5 : ; 4 < 4 5 1 2 , - - , , 2 + - 1 , , , - - - 4 . 0 2 / 7 1 2 4 2 . - , / 4 1 / / 0 2 , ( - , 4 2 . 0 0 / - 0 0 + - 1 1 5 - . 1 1 - 1 1 / 1 4 / 2 0 - . . , ) 3 . ) - + , - * + ) % ) * & + ( - - * , + + + ) ' + ' % * . ' ( , ) ( ' * + & 1 / , ( , / + 0 - * ) ) ) & ' * * ) + - 0 ) ( & ' ' * ( ( + ' ) + ( * + . + * % ' + , * * ( ( , & & ) + . ) , ) % " & ' ' $ ) ' ' ' ( - ) ) , - 1 , , * - 1 0 ) ( ' ( ( ' ) . . * + ( . 1 , 0 + ) ' ) ' ( . ) - $ * ' " 
+ 
+                                                                                                                                                                                           
+ ! ! " & % ) + - 2 4 8 6 7 < ? > : 8 = 9 A ? E F > < C > ? C C E ? = @ E B @ C > L F J G B H O D H E M F L N G L L I K Q S Q M Q M V S N T V R Y W Y Z V W ] _ ` ` ^ e ] Y _ X [ ] b g a ] c c e i c b d e b _ f d b e f e f Z Z ` Y Z b a ] S ^ a ] \ Y W T K Q X Y [ X Z ] ` ^ a ` [ ^ _ ] \ Y W V T b d c c \ ` b [ c g ` Y \ W X [ Z W X Z X Y U T T S \ T [ X X [ ` c W ] [ [ Z X X Z S \ Z d [ Z M X W Z Z [ \ Y b ` \ \ U X W T Z a _ a \ d _ \ ^ W ^ W Y \ Y [ T Q S X Q T P S O I R X R J O S N N K M F L F N J A D B F I N J E N N O S U Q H V W M R E P W N L K H H O K I O M F J S N M K Q U V O K I G J Q K B D H @ A = @ @ D D @ < < = : = 9 6 : 9 5 1 3 4 3 4 3 3 . 1 - . 2 - 1 . , - - ( ( * - . * % + ) ) ( ) ' ) ) * / - ( , . ' & ' + + . + ) ( + ( , * , , + / + , - 1 / + 4 / 4 5 > : ? > 8 8 = = D C C A D D G D I ? > ; ? A C D E ? : > @ C D H B C F > G I F @ E I G ? ? @ B = ? F ? C C ? < B A F @ 9 9 = ? @ @ 9 ; < < 8 < = ? = = : B 8 6 5 < @ ? B : ; @ @ < > > 8 = = @ E B ; 9 : 7 7 7 8 7 2 6 9 8 6 : 7 < ; 9 ; = < C < 4 ; 7 A ; ? < = 9 9 ; = A < ; : < 4 7 6 4 . 2 3 0 4 4 9 4 0 5 = 9 = 4 9 7 5 9 8 6 3 4 7 2 - * , / ) . / + 0 . 3 / . ) . / 2 0 7 4 - 2 3 5 3 2 0 0 2 / 2 3 0 3 / / . 1 - / 4 4 2 0 / 1 1 1 1 0 1 5 1 . ) + ) 2 , 1 . 0 3 0 4 3 1 . 0 5 3 - 1 , , ) - * * ( , ' $ ) ( $ ' ( , - 1 / * ' . / / ( % & + , - ( * * ) ( , ' / - ) , * + - - * / + ( ) , * ) ( * + , , , + ' ) + ' + % ' ( + + + ( % + , ) + & ( * ( # ' ' % + * & - / + ' ( ' ) ' ' ' * * & ) ' & & ) * * , , , ( * ( / - - , ) * * + / - - 2 . + ( + . . * * ' ( ( % & ' - , ' * ) " $ 
+                                                                                                                                                                                             " $ # % # & ( + 0 0 6 < 7 4 8 8 = > @ ; A ? = @ B > @ A < > < B ? > G D C F D A E I E F I F N H E C K B J M N L O U P P X S U U [ \ U Q Q [ X Z U V Z [ ] _ Y [ Y [ ` Y Y ` V W X Z f _ ] ] X e g a ^ ` _ ^ c ` ^ b ] ` l d b a ` Z U _ c ] Y [ Z Y \ Y V V O [ ] [ ] V X b _ _ ] _ Z a _ ` X Z T \ Z X b b g c \ a a ] f Z ` T T X ^ U \ S Y Z U U [ ^ Y ^ X ` ] a \ ^ ^ ` b ^ Q Q U ] T U Z ^ ` a X X _ ` Z Y ] b X \ b ] [ U X ] Z a d f ^ V Z _ \ b W ^ Z Q S U U [ R O R K O K K I G K N K I E N Q L N M A P M L O C H F E A G N S R N N P P S P Q L K H H N T I L M F L N L H O T N J N K L G K H L D H D H J G D = @ > @ ; ; < ; > ? 9 3 3 7 6 4 4 5 1 1 1 / - 2 0 / / 1 . 0 - , 0 ( - + ' , ) $ ' ' ) * ( ) + ' % * & * ) ) # ) , , . . ) % & * * , * ' + - + , , ) + ) ( ) + - 0 2 1 6 0 9 ? < 8 > F < B A = @ B A B C C @ C > B < > @ A A G G D @ B = > A F D @ @ = I E D ? ? H B : = C @ < A = ? C @ A E B ? D C @ < B = D > ? ? A 9 : A D = < 9 @ D ; 5 < D ? ? C C @ ; D = C = < : > = @ @ < 9 9 5 1 < : 7 2 : @ < ; ? ; 8 = = 7 > ; ; 8 7 9 9 : A @ < D : 8 < = = 5 ; 8 < 7 8 4 4 3 9 9 5 4 5 7 7 5 9 8 ; = 6 = 4 4 4 / , 1 / 4 . , 1 0 . / , . . , / . + * - - / , 4 : 6 3 / 3 6 5 6 5 4 8 6 3 3 1 1 - - / 1 + 2 / 3 0 0 / 2 / . , - + 1 / - ( - * - - + 0 1 0 / 0 3 0 , / , / 0 0 * / * . . , , ( ( ) ) + ) ) + - 0 , + - , , 0 0 1 , ' ) + , & % - . ( , ) ( & + - , * . * ( * * ' & & ' ) ) ( , + . , ) - * & ( ' & & * ( ) * % ( ' ( ( ( ' ) + ) $ ) * ' / * ' - - ) . ) - . ( + / ( ) ' ) ' + ' & - * , & * + , * , * + ( ' + ( ) 2 , , 0 ) & ' ' + ' ) ) % ( * , * ( , ) - . ( ' % 
+                                                                                                                                                                                           
+  " " " & ' ' * . 0 5 : < > < 4 < ? ? > = 9 > @ C C = A > A < = ? C F E C D C E I K G I C J L J I J M H K M R R U S J P M P U U [ W S P X ^ _ Y V S Z b ^ ] W [ Z W R S S Y V [ Z ] [ ` a Z X c c a a [ ] a _ T ^ [ ` ] d c n k a X ] b b Y Y [ X Y [ a Z a U Y ] b \ U [ X Y W [ \ ^ _ ] Z \ T \ ^ ` [ ] ` b d _ d ^ W c a _ [ \ Z a ] Y T V [ Z V Z X T Y R Q T X Z \ Y e c \ V [ Z [ U X \ S U U ` Z W X U X Y X ] Y Y Z ] W Y Z ^ ^ T [ ` Z W _ T [ e Z X R M P Q O M P Q P R O N R S M J K P M O N J I F L H L E J @ D B E G D N P P O N J K T O N M P L L J G I H E F J J K G N S M O L L K K I @ B A B B ? D < 8 7 8 5 < 8 7 4 > ? 7 3 4 2 4 2 1 4 0 0 0 + / + * * , , , . - / ( + , + ( ) ) " " $ ) * ' * , + & ' ) % & ( ) ) ) ' ) . 0 * , ) ) % * / * + % ( - * , - , - / / 4 : @ ? B < 8 : > > B A ? > ? ; B A C @ ? C > < = ? @ C < D ; C D @ > D @ C C C F A @ A @ = < : A I C < : = 7 A = 7 < B @ A B = = ? ? < > A > > < A ? @ < ? ; ; > ? : 9 = < 5 > G @ 7 B ? B > ; : A B < 9 ; ; ; = A : 7 6 3 0 8 6 5 9 < 9 9 ? < : 7 9 9 : ? = 6 8 9 4 4 < < < @ 7 = < ; 7 9 : 7 = 7 9 7 7 : 7 7 7 9 7 9 7 8 2 6 ; 7 5 3 3 0 0 1 3 0 + . * / , , . / 0 . - 1 3 . 1 , . 0 1 3 5 8 3 4 4 1 5 6 7 2 2 3 5 4 4 0 / + 2 5 3 + , 2 3 0 2 / 5 5 0 , * 0 3 / 1 1 0 3 0 - . + . 0 / / . . 5 + ( - + . + - ( , + - . , ) % , - * - + ) - . , , & + / 3 . 1 2 ' ( + ) ) ' , * * + , + ( * , + ) ( / - * - * * * ) , 1 - . - * & ) + * , ) ( ) ) ) * ' & % ( ) % ) ( * - & ( * ' ( * ) ) , - ' + * - / , - / - ) * + + ) - * + + ' $ + , , ( ( ) ' ) , ) ) ) + * ' * + * , * , ) - , - + + - ' ) - - - , $ % $                                                                                                                                                                                              
+ " % ' , & % ) 1 1 7 = ; ? < > > 9 > < > B A @ > E ? @ > A E ? @ D D F E F J E D G J J C E G M M P L L N P P U ^ U Z U L R L O U W Z W [ W Y W [ ` [ Z \ Y ] \ [ Z Y S O S U ` [ ` Z a _ ] ] ] b _ a _ f ] \ W Y ^ \ ` Z [ c a _ ] j c _ [ ^ \ ] Z ` f \ a Z _ ^ c Z T Z ` [ W X Z X X X W T W W X ] ] W X _ d _ b [ Y ^ _ a ^ ` X _ X X Z W T X X Y W Z Z T N Q V P Z [ \ [ ] ^ \ ^ \ Y Y [ U Y Z a ^ U ` W Z X W Y Z \ T [ X X \ [ X W V Y S U T X X [ Y R S K J L M G M L I U K K S R K J M S P N Q J I G H E I H G @ ? D @ H K O T S N O M O P G K M I L I Q E I J P L M J J F J N O E E E I G > @ B ; > = < 9 ; = 5 0 0 4 7 6 6 5 3 2 6 3 1 / 4 4 0 - - , * + / ) ) * ' . - ) * * - - ( ( ) % ( % & ( * , + . ) ( , + % ( ( ) ) % + * * ) + + * * $ ( ) , * ' 1 + + * , * 3 3 7 9 = A A @ = > < < = C < A A D = = < > > > B ? < @ A @ C < D ? C A A @ A E D B B A ? @ ? @ < > ? > F ? > ; 9 4 ; ? 7 ? D > > = : < : 8 9 : < : : > ; ? @ ? > ? 7 : < 7 5 < A < < B ? ? @ D ; 4 : > ? A B ; ? 9 : ; = ; : 5 , 1 5 = A : : 5 6 : 9 ; < : 5 8 ; 8 3 = : < < : : = = ; > 7 6 7 < > = 9 1 ; 3 7 4 3 5 ; < 8 8 7 7 7 6 3 3 4 7 , , - 0 ) . 1 + , - , ) - , / - / 1 1 4 1 / / 4 1 8 5 6 4 7 3 6 5 7 6 3 1 2 2 0 4 3 . 1 6 3 5 / - 0 / 4 1 2 6 1 0 2 , . 2 3 1 . / 3 1 4 0 0 . / / + - 3 2 . 3 / * . 0 - ' * ( , ( * ) ' ) * , * ) ' , - / ) % + . + - 2 0 ) ( - , * & ' ' , + * + ( , + ( ) ) - . + + , ( * ' ) - + 1 + 0 + * ) * * ' ( . , + , ( & ( * - * % % * 0 ( % ) % ) ( % . ( ) & * ' - - + + , + ' - , , , + * , ) ' " ' - / + * , + + ) ) % ) ( ) ( ) ( $ ( * , ) ( ( ) ) ) , + ' ) / ( $ & %   
+                                                                                                                                                                                          
+    ! " ( * ' ' ) - 2 4 9 = ? > > ; < A > @ H D : ; ; ; < > ? = ? A B E D E G I A D H J G G J G M W Z S T P N O W T W ^ W R O M U _ Y Y X [ [ ` \ c [ \ Y Y T \ [ \ [ \ U Q V Y ] ` \ [ ^ a \ c e b _ a ^ e h e a X b ` ^ ] [ \ ` a b b a \ a _ ` ^ a W X \ \ X U W \ X Z _ Z Z W X [ \ Y ^ \ a X X [ ` Z \ ` c U Z ^ ^ \ \ ] ` [ W Y [ U V [ X T Z \ W W ` Y Y Y ] X W V b [ [ ^ ` [ Z [ [ S X Z Y Y Y ` c c \ X Y Y \ [ S M V [ c S W X T S V U S W U T N N L K L P K H M G L M H J H O J K I K O L M O O K N G G D E E D D K J M J H S L I L L M M K I J I L K J J J L J E M O M N L E C ? C ; ; A < 7 6 7 4 4 3 6 2 5 : 2 - 3 0 6 1 1 2 . + . 0 , 3 0 0 + - , ) + . ' ) , & ) ( ( ( ) * ) ( + ) ) * ' ' ) + , ) , , ) ) * ) * % * + ' * * ) - ) . . ( % ' ( + / / - 3 1 / 8 5 9 = : : = < ; ; 9 @ B B ? A > > ? D > A A @ @ ? A = ; @ A @ < < = < 8 > @ C F > B = ? : C A B @ < = A E A = 7 9 ; 6 7 = 8 = ? = 8 < 8 9 < = > 9 6 4 7 A 5 = > 8 : @ ; 7 7 : 7 : C < 8 5 : @ : = 8 : ; < ? = ? < ; < = 5 9 : 4 0 2 0 6 8 ? > = 5 < A < 6 9 3 5 5 6 8 9 : 9 < 6 = < < 8 7 < = 8 8 : ? ? < 8 ; 9 7 8 4 4 9 = 8 8 6 2 5 1 3 5 1 3 0 , - - / + 2 ) , + ( + 0 0 , , 0 2 3 4 4 4 0 4 4 4 4 7 4 6 2 4 0 1 3 . 0 2 0 2 1 0 3 4 4 / 2 5 4 / 1 2 1 4 6 . 2 3 / 1 , 1 1 1 . 2 1 1 - + / 4 2 / 1 1 / . 0 2 0 ( ) ) * * ( ' , - ( * ( ( ) ) ) % * * + ( % ) . + * , , , + / 5 - ( ) & + - ) . ' + - + ( ) , - * ( - - + * ) * + ) * ) * ' # ( % # * ) - ( * % % ) ' + + ' ) ) * * + , ( ) * , ) % ( ' & + ) * * ) & ' ' ' % $ ' & ' * ' $ # & ) ( ' ' ) & ( ' & % * ' . - , ' $ $ - - , * % ) ' ( / ' * ) * ( ( ( & " 
+                                                                                                                                                                                             !   $ $ % ) , / 1 0 2 9 < = 9 : ? ; ; < : D A > ; < @ > C A ? = > C L G C I G I D B D F F I B H N X T R N I P T U Y a ] W Y S R Y V \ ] [ \ ^ ` ` _ Y [ ^ T ^ ^ X Y Y W [ X [ \ \ Z [ [ d b a ` a [ ] ^ e d Y [ ` e [ W Z ^ [ [ [ b Z ` a [ Z ` a V U X \ \ X [ V [ X ] \ ` U W Y ] ] V \ \ _ \ ^ g b X W ^ ] [ \ a [ X W W X W ^ [ Y X W \ ] W ] e Y Y \ ] Z Z X W W X W Y ^ ] \ ] c \ Y S T V V W V Y _ \ \ ^ Y W [ Z U U [ ` Z S S U V T W X Q R O P V K I J M M I K L K N M J I H L C I F C I G G J G L M G D C C B D D D B H G C G H H M H J I I E E J O O M K L J H F J K D G E = = < > 6 6 8 2 1 5 3 / - 0 0 / * 1 0 + . 0 . - / - , , + * ( * + ( ' ' ( - + , ) % ( * * + ) * ( ( - ( + ( ( ( ' ' % % ) & ' , - ) & ' ( & ) ( $ & ' ) ( ) + ' ' & + * 0 / 2 4 5 5 3 7 @ C > 9 : > > : < ? ? A = < 9 ? : 9 < @ ? A A ? B < = ; A = ? = = : ? : < A B A = A C = @ D = ? 8 9 ; @ = A 9 9 : 4 9 > ; 5 ? 9 < ; 8 < 9 : < : 8 8 4 6 = : : : 9 < 9 ; < : 4 5 > A < > < A A = ; = ? ; < @ ; B = 7 ; 8 9 5 6 = 2 / : : 4 4 : = > 8 8 8 7 4 4 4 5 5 < 8 = 5 9 5 = > > 5 9 6 = 8 9 ; 7 8 = 8 6 8 8 8 9 7 3 8 4 2 . / 2 / 4 1 , - / 2 - ) , ' + . , / . 0 6 5 5 / 1 0 1 . 1 4 1 / / 2 0 6 5 0 / . 0 1 0 . 0 / 1 - , 2 / 1 0 / 1 5 2 1 2 + 2 2 4 - 3 3 - 1 0 0 0 + - / 1 ) + , ) - / / + / 0 + , 1 - 0 ) + * , * - . 2 ) ' ' , - ) & $ + & & & , - ( + + , ( + * - * - ( + " + ) ) + ' , + ( - ) ) . ( & . . - ) * + ) ) ( & ' % $ % ( ' ' ( * ' * & ( , ' ) , ( + / - , , , ( & & ) ' ) # ' % ' * ' ( * ) * % & % ) & % * ( ( & % % * * ( & , ' ' ( ) % ' % ( * ) ) & & , * * & # # ' ' ( * ) + , , ' ( ( " 
+                                                                 
+   
+                                                                                                                       
+   % # $ ( % . 0 . . 5 5 : > ? > < @ = > B A B = ? = A A @ B A B D C C D A B A I A D H H F K E H Q Y X T R P N P S X Z V T Q U W R T [ X ] Z Y ] \ Y Y c [ Q U [ Y U [ ] c ] [ Z Z ] _ \ \ \ Y ^ ] U X [ ^ [ V ` g c Y ` X W \ b a Z c U X Y \ ` [ ` Y \ b a Z a Z Y Z \ ] ` ` b Y [ e [ X ^ _ a ` a \ W \ a Y ` Z Y X [ V Z a \ [ ] ] Y Z Y Y T Z X R ] ` U R R X ] V W T X V X Y [ [ W Y Z X O Q Z W V V Z [ U N X ] ] U R U \ U P P Q N T T P S M M J M K K J H J H G J E K K H L K F H G B B @ @ O M H @ B @ E C A A C @ D H E D A E F I F P J L J O I H L B J E D I F C B B < ? 7 6 4 4 6 2 5 3 2 4 , , , / 0 - / - + 0 . ' ) ) . - , * , , + ) , + + " ( # * - & ( ( + ) * * + ( ( & - & ( ' ) * - ( ' # # & ( ( ( % ) , % # ' ) + ) ( * + & ) - ) ' . 1 1 7 0 6 : = : 9 < 8 ; ; : A B @ 7 : 9 A @ A : > > 8 9 ; = = ? ? = ; : ; C > : ; ; 9 9 6 8 < = < ; > : ? G G A 9 7 7 8 > 7 8 5 8 5 4 : : 9 8 ; 3 5 7 7 6 4 8 7 7 2 5 1 : ; = : 6 4 9 4 = 6 2 6 / 7 7 8 6 8 8 ? = < : : @ 8 9 9 ; 9 < 8 9 3 4 1 6 2 6 8 7 8 4 8 ; 4 5 5 4 0 7 9 4 9 7 2 5 8 7 7 4 4 9 9 7 6 ; : ; ; : 7 3 6 4 6 9 3 4 : 2 0 2 2 - 0 / - 2 4 3 , , - . - ) ( , . 0 . 0 0 5 9 2 8 3 0 , 3 / / 2 0 4 . , - . 4 1 , 0 4 0 1 2 / , / / , + 0 0 4 0 3 0 . 1 3 / 0 - 3 2 / / . * - / . 1 + - - ( / / 0 , . , . * - / , + * - . + 0 , + , * 0 + ' ' / , * " & ) # * ' * , . , , * * * * * 0 * . + ( & ' * + - ( & , - + ) * - ' * , - + * ' * ) * & ) ( & ( ( , ) ( ( ) ' * + 0 + ( + * - * ) , ) ) ( ) ( ( + ( ) * % # ' & * , + ' ' * , ' & ' * ( * ' % ) , + ( * - ) + ' ' + ) ( ' ' % ( % " ) & ' & " $ . , . + ' * + + ( ' % "                                                                              
+                                                                                                               
+ ! % ' & % . 0 . 3 6 3 < > > < < @ 9 ; > < : 9 : = 9 ? C C A D A > > C B ? @ D B C I L H K K I Q M S P T R U V S T Z Z Y W X Z [ U U U W X U V T U ] [ [ Z Q Y Y P W Z b Z V _ Y \ Z [ [ X S T U ] Z [ ] V \ \ ] _ ] ^ Z _ V W e U ] \ Z [ \ [ [ ] X X Z ] ^ \ X [ ] [ \ Z e b ] ] Z V U a ^ a [ ] Z X X W _ [ Z _ ] ^ [ Y U \ Z [ Z Z [ a g W [ [ V X W V W W X W V Z W Z W X X \ W Y [ X U O S W S Q V R T X T Z _ U P Y R Q P S P R O N K M J I P I K D D J K J N L G K D K M I E I I J D G D D C F D @ B B D @ ? = ? B A B @ G G K K E B H E C C H = I K F @ 7 < A ? > : 7 9 7 1 4 / 2 2 3 3 . / / / , 2 1 + * & * * - , ( ' ( ) + & & ) , ' # ' & ( % ) " ' * ( & ' + ' & ' '   ! $ , * * ' ( % ' ) $ $ ( ( & ( $ ! ' ( % % & ' & * ) * ) % ) ) + 0 3 1 7 < 5 : : = : 9 : ; 8 : = < > ; = : > @ C ? = @ ; 9 ; 8 8 9 ? A < 3 9 > = 8 7 ; 9 < = = = 8 < : : ? 7 < > ; 8 6 5 7 6 8 9 4 : ; ; : 8 9 8 7 3 9 4 / 4 4 : 4 3 6 5 4 ; : < : 4 4 4 6 5 4 4 3 4 7 6 2 0 4 4 2 5 7 6 5 3 8 4 5 8 4 < < 9 4 2 2 3 5 5 7 7 4 3 8 8 : : < 8 8 3 9 ; 6 5 5 2 0 3 ; 5 7 5 5 1 1 3 5 8 9 8 5 5 0 4 5 3 4 0 4 5 2 4 + . / , , . , * 3 2 ( - ) ) % + 0 0 / - 3 . 1 5 . 2 , 1 + . 4 2 . / 1 0 . / . * - . 4 3 3 6 2 2 + / 5 , - , / 0 1 0 1 0 0 / . , + - . - / ) + 0 * , ) ( + . . , , % * , * ( ) - * ' * ' ( . . . ) , * ) , , * ) * + ' & # ' & ) ( ( ( + + - ' ' - % ( ) ) + , + % " ' * / ( ) * , + ( ) ) , ( ) ) , - ) + + + * ( ' ) * ) + ) ) ( ) ( % , ( & ( * ' ( ) * - - % ( ' & & % & & & ! # & ( + * - ( ' ( , & % & * + * + ) - + ) ) & ( $ . , ) & ) ) & " " ' ! # & , + ) % $ ' * ( & $ $ ' $ $ $ " ! 
+                 
+    
+             
+                          
+               
+    
+       
+ 
+  
+ 
+  
+                                                                                                 
+   # ! # - / 1 2 5 7 6 8 8 5 ; < : ? : = 4 : C A > ? D B = ? = A ? A C E > B @ I R Q E D J H K P T P T R T R S Y X U O O R U V R V Y X \ R U U T _ R X ] Y U \ U Z \ W T R Z V Z X ` \ Z ^ U W X \ X W b a U Z [ ] ^ Z W Y \ c S \ ^ ^ W T R Z _ \ U U X \ W V X ` _ T V Z ` W X Q S X Y X [ U R ^ _ X X \ ` W Z ^ c g ^ T Z Q X U X Y \ _ [ T ^ Z U T O V Y T U Q U N U W R T ] U [ O R O W V T Z \ Y T S V Z X ] T L R K H I I O N M K H B I E M H H F C D I M F D E K H J I G G H I H J E C ? A C D @ C @ < @ = = > D ? < B H J J J H G B D ? @ @ = ; < < ; : 5 7 7 5 7 4 3 , * 1 / , - 1 2 / . , & + ( ( ) " & ' ) ' * % & ' % $ & & * ) ) ' % $ % ' ' # ( $ ( $ ( $ % % % $ % % ( . $ # ' ( ( # ) & & ( & " % $ # # ( & % % ) ( ) - + ( + / . 0 1 1 3 8 : 7 7 8 < 7 ; ; 9 ? 9 8 5 8 8 < 9 > A < < > = 5 7 ; 8 : ; 9 C 6 ; ? = = 6 3 9 8 9 9 < : ; : = ; : 4 7 9 7 < 6 7 6 6 : 5 2 : 7 = 7 9 3 / 6 8 : 6 1 1 6 7 5 8 9 5 2 4 5 3 5 3 5 5 / 3 3 5 0 7 ; 9 4 4 2 3 3 2 0 0 6 5 7 4 9 6 4 8 5 : 5 3 1 0 8 8 4 7 3 5 < 6 7 = = 2 / 4 6 5 9 6 8 6 2 6 6 7 ; : 3 / 9 : ; < 9 5 0 4 3 1 3 2 3 2 1 0 5 1 , . ( ) ) / , + + + ' * - - + - . - 1 2 3 / 2 0 / 3 2 2 + 1 1 3 4 0 / 0 0 2 0 * / . 2 7 1 2 / . 0 . 1 * 1 - + - , ( , . . . * * / , ( * + . / 1 * ' ( ( + * - / 1 ) * - ) ) + , $ & / ' ( + + ) ) , - , ' ' / ( & ' , ) % # # ! $ & % ' ) + ( % ( & ' % ' * ) % % " % ' * ' ) ' ' ' & ' - ) ) ) & ( ) ( ( $ % - ) ( & ) ) ( + * % ' ' & % ) ) % & ' ' # $ % & # & % # % " # * & # " & + * ( - , * ' ' ' $ & ) ' $ * - * / ) , ( & ( % + * ) . & ! # % * & $ # $ % % % ' " %   " " " % # ' ' % & 
+                         
+ 
+                         
+         
+             
+        
+      
+   
+  
+                                                                                                 
+ $ # ' ( * / - 2 : 7 2 8 9 < 5 6 7 < = ? ; @ @ @ B < = ? @ > = A = A B C A ? @ E G H I K H M Q O N L X O U Q S P W L N S U P R M S T [ b ] [ Y V ] S X U U Y X V Q S U U N O T [ Y V S \ ^ V V b [ Y [ ` ] S X X ] X V W Y _ [ Y Y [ W Q V W Z Y ^ X S W V W Q Y Z V Q T Z ] Y W W U \ Z N S V R Z U [ W \ Z Y W ] b \ [ X V N Q T W Y Y P W ] N Y T R R O S U V S X N P O Q U Y S W P X P W U R T P U Q Y X X U N G L K D K J H E J H F I A E M E @ ? D @ F E J H I F K D J F J G F @ : H A D A C F D @ @ C = ; = < = A E C H E C F C B = B @ 7 < < 8 8 6 7 4 6 2 / 0 3 4 3 + * , ) * ( , * ) - + & # & " ) ( # " & # ( ' $ % $ ! % # # # % + ' . ) ) # & % ' % ) $ # % & " # ( ' + & * " % ' - ( " & $ $ % " " $ % ( + , ' ( ( * + . / - 0 2 8 6 5 8 4 8 < ; 7 8 7 = = : ; 8 > 7 < 6 1 3 < 8 9 ? ; 9 9 = 9 = < 7 < : 9 7 9 > : 7 7 9 8 9 7 5 : < : 9 ; 9 9 5 / 4 9 9 ; 8 5 7 : 4 0 / 2 5 7 8 5 0 4 4 3 3 0 . 0 3 6 6 3 < 1 1 3 6 4 6 2 2 0 / 3 5 0 0 4 6 4 6 0 1 5 1 3 4 3 3 / 7 5 7 - 1 1 1 2 - 2 8 4 8 7 7 4 6 9 8 3 8 ; 4 0 0 5 1 9 3 4 1 1 4 4 7 6 / 2 2 5 1 7 6 6 5 2 1 / 1 0 3 4 0 / / / ( + + * % ' ' % ( ) * ' + 0 1 / 0 / ) - 2 2 2 2 2 + . 2 1 0 , 1 / 5 1 0 0 + 0 4 1 + 0 ) - - + 3 . . , + , , * , , * + + ) - . , - + * ) ' * + , - ) + ( 1 ) , ' , * + , + ) ) * * ) & ) , ( + ) ' & & ' * ( , & + . + , , " ' % " ' ' % * * * % $ # ' ) * . - * - ' + ' ( % % $ % ' ' ) ( * & " ' * ) ( & ( ' & % ) ' $ * * ) + $ ) & % ' ( % * * ' # # # ( + ' ( # ! % % ! ! % & $ " # & $ # # ' * * * ' ( + ( ( # 
+ # ! $ * ' + $ ( % ) ) * ) + * ) & ' & ( ' $ % % $ " $ $ " " $ $ # $ % " # ! # 
+    
+ 
+     
+  
+   
+ 
+     
+ 
+  
+               
+ 
+           
+  
+    
+ 
+ 
+    
+   
+      
+ 
+  
+        
+     
+   
+ 
+                                                                                                 ! # " & * , - - 3 3 2 7 6 < 8 8 6 8 < @ = = = ? : A < ; ; 9 6 7 : = ? E B E ? ? H H F N I K L Q K P M U R T R U Q M P Q M O R P P Y ` Z S T Q R T R Z S S M O R Z Z T T V Q V T X Z U T V U T Y a [ U Y _ Z X Y W Y U X Z Z U V [ T Z _ V V W U \ T U T V O T V U \ R W W U Z U W Y U T W R V Y Z Y [ Z Z b ` Z Y ^ ^ _ ^ [ X S O R S S T Q U ` [ X Z Y W T W U S W V T U K M W S Y Q O N L U S Q R N Q T S Q K N L D C H I B G J G I G @ @ A B O E D @ D C B E J C B C D F D A B D G F @ A C @ : > A @ @ @ @ ? < ? 9 8 A ? C F D B ? < : 8 @ ; 3 4 6 2 7 7 1 0 2 1 - ) . + * ) # ( % ( ( * # $ ) ) ) # % % % # 
+ " " $ # ' & ' " 
+ & ! $   # $ % ' * $ % ' ( ( % % $  ' # $ ' ' ' % $ # & ' ) % * % # " ' ' ( " ( , ) * , - ) * + 2 / 0 4 4 3 : 7 : < 7 ; ; 9 5 4 3 7 ; ; 7 9 3 4 ; 9 4 2 8 4 : : 9 8 7 < : : : 1 5 3 2 4 9 8 9 4 6 8 < > 9 3 ; > 5 6 8 5 6 9 8 5 5 8 5 8 7 3 3 1 3 1 1 2 / 2 1 1 2 / / 3 2 3 1 - 2 4 7 4 0 0 2 7 8 3 2 4 - , , 2 / / 4 2 9 7 5 5 3 / 3 7 2 3 4 8 6 / , 1 - 0 / / 3 9 > 7 9 4 3 3 0 9 ; 6 5 3 3 5 3 / 4 9 8 4 9 3 1 5 : 6 6 6 4 2 5 2 2 / 8 5 5 / . . 2 * * . , + & ( % ) ( ) % ' - , ) - 4 0 1 3 / / 4 , 1 3 3 - . 1 0 0 + , 2 , . 4 0 + * * + + / + , , , , + / 2 / + . * ' . / , , + ) / 2 . ( * * + ) $ * . ) , + ( * - - ) + 0 - * . - ) + ' ' ( + ) ) ' * * ( ( ) $ & ( ' & * * ( ) ) # ' ' & * + , + ) & ( ( + ) , , + * ( % ' + % $  # " # & ' * + ) $ ( ) % % ) ( ' ( % & ' & + * ' ( $ + % ' ' $ ' ) ! % " # # & ( % % ' $ ' %  % $ % " $ # * ( ( % ) & & # ( ) ( ( % & % " $ ) , ( * " # ' ' ( ( % ) ' & ' ' ) & ( ) ) $ ( # & % # ( ' ( ' ( ) ( " #              
+   
+                  
+       
+            
+   
+    
+   
+   
+      
+  
+ 
+  
+       
+ 
+     
+   
+                                                                                                 
+ ! " % * , + - 1 3 0 7 8 : = = ? : ; ; ; ? < > > A ? < ? 8 7 @ < ; A G C H F D J J E F J L J I Q R M S W T U V X U O S \ Z T W W W _ V N P O Y X O N O S L N W S U W ^ U S T T T Z V U M M Y [ \ Z \ Y \ d Z W V \ [ Z [ X T S X X ] Z T U U W Z U T S S M [ V ] Y W [ V T ] _ ] V Z U Y T W [ [ e ` \ Y _ b ] ^ _ ` \ T [ \ X M R R M W R U [ T \ ] W U ] Y W R X \ W Z R R X V Q R Q M Q Y P W T O P J Q L L H C D G K J K J E E I B @ C C B E F F ? B B D D F ; A D ? @ ? A C ? F E ? @ @ @ = ? = @ @ C ? : 6 ; > = B > A D D < 7 : 8 3 4 / . 6 4 1 4 - * 1 1 . + ( , / & # $ * ( + + - & ( ' ) $ # & " # " # " # $ # ' % $ $ % ' " " #   $ % # $ " ( ' ( & % ' " # ) $ & % ( ' & ' # ( ' ) ) ( ' $ % - - - ' ( 2 * . 0 4 2 0 2 3 3 5 5 7 3 2 6 8 < 5 5 > ; 9 6 6 6 7 ; 3 7 3 3 8 : 5 4 5 8 7 ; 9 9 9 7 : 9 7 : : 2 6 1 8 ; < 2 5 ; ; 9 6 5 9 8 5 2 3 8 3 2 8 3 7 7 6 8 2 2 1 0 4 5 0 3 2 4 5 / 1 / 3 4 1 / 1 / . 0 3 1 . 3 2 4 2 4 1 5 0 , . . 0 1 0 3 4 5 : 3 2 0 0 1 / 3 3 8 3 / - ) , , 0 + 5 4 8 6 2 8 0 1 1 - 2 0 1 6 3 2 4 0 1 < 7 1 7 > 8 1 1 6 4 3 9 6 5 1 / 2 4 4 1 / / 1 , & ( ( ' , + * ' ) ) - * * . / 0 / 0 1 / 3 5 1 , * / / 0 + 2 4 - 0 0 / 0 0 / . 1 3 1 , * , / * + / / 0 . * - 0 - / + / 2 - * ) + * - / / ) * * * ) - + , - * & ( ( ( + ) * . * ) ( , , ' & ( ' ) ( ) % ' ' # * , ) ) ' ) * ) ( * ( ( ( % & # % % ) * , ) ) # & * ) ) % * * ' * % # % ! ) & ) # $ ( ) ( * % ! # * ' # $ $ % % ) ' ' ) % " ) + & ' % # ' ' # $   " & % $ # # ( ' % ' ) ) + ' & & $ / & ( ( ( ( # % % % ' ) & & % " " # * * ' % " ' ) & % # % ( ) & & " + ( - - ' * ' ) $ $ ' ' ( ( * ( $ % "  
+                 
+        
+                              
+  
+    
+             
+   
+ 
+             
+                                                                                                 
+ 
+  " $ ( ) / - 1 1 5 8 9 8 8 : = 8 ; 4 7 9 < @ > @ ? < @ < B B ? ? @ D < @ G G H K I E D M M Q M Q P N R K H Q M R S V W V S U W _ Z S X U S S Y R Q S X R P I P V U U R Q P R N T P V S U X _ \ W W V X ] \ X X \ Y X Z W R Q R X S S V S W W Y O R X T S W Y [ W Y Y \ [ W Z W W Z X Y W T U X ] Y Z [ ^ _ X ^ a a \ X R S O Q O T S L O Z ] ] Z X Z T \ V S W [ Z U S M Q S T S V P X Y R X R L F J J J K D C A A I G C E G E F D B B @ E E ? A B ? < > @ B B E H @ @ B ? ? A = ? > > A @ 8 > @ = 9 A ? 8 8 2 2 3 7 8 6 6 < 7 6 1 2 3 / / 0 - 2 - - - 0 + - / + * % ' ( ( ' ) ( ' & ' ) # + ( % $ ' !  $ % $ # ( % " & ) ( ! % % % #   ! % ' ( $ ! ( ' # ' # , ( ) & & $ + ) ) + ) % ) 1 * ( + * ' , 4 * 0 5 / 3 / . 1 3 6 5 7 5 3 9 < 7 5 4 4 9 3 : 7 < 8 < 9 6 4 4 7 0 5 7 8 5 2 = < ; 3 6 8 3 4 < 4 ; 7 5 9 ; 5 9 4 6 ; 8 0 4 2 3 5 8 6 5 2 : 7 2 6 4 3 5 4 7 4 5 4 3 4 3 , . 2 2 2 2 3 2 1 1 5 3 0 / . 1 / - . , , 2 2 2 4 1 3 4 3 1 * 1 , 1 1 1 . 1 0 4 0 2 2 0 5 0 1 5 2 0 + . / , . + + 1 1 2 5 3 3 1 - 1 0 . 1 0 3 3 . - . 2 6 2 0 4 8 3 / 2 4 1 2 3 7 4 + , / - . ( ) ) , , ' * ' # % ) * % # # . . - 0 / 3 1 - 3 1 0 2 5 . , + , 0 . 1 0 . . 5 3 - / 1 + , . / 1 , ( , / . 2 1 / . + . 0 0 - - * 0 , * ' ' * 2 3 + ) * ( + - 2 - + ' + - ) * ) & ( - / & ( & & * % ( ( " % ) ) ( % $ ' * . + + % * & ) * % # $ + & % $ ' ) & % * ) % $ $ ' ( + ' ( ) ' ) ) # # ( * * * , % ) ( & % ! !   # & ( $ $ ' ( , % ( & * ' & % ! # $ % % & % $   " & & ( % " ( ' ) * ) ' ) " ( & + ) * $ ( + ) ' & & ( ( ( * ) " & % ) ' % & ) , & ' ( ( ' ) ) * ) % # # & ( % ( ( ' % ( $ % ' & + % ! # ' " 
+                            
+ 
+            
+       
+       
+                      
+ 
+       
+ 
+   
+   
+ 	                                                                                               
+   ! $ $ & * 0 1 / 2 7 8 : 8 = 8 D C ; 8 < ? = = : A ? > A A B A @ > D @ @ B I E G M I G F L M K K T U W W M E L I O L Q T T S T V Z T T Y T M R T [ R Q R L L Q R R V O P P Q S N Q T P O X S Y Y Y W U W Z W W X ` V ^ \ U U W Q W P T Z _ X R V V X ] [ P T Y Z Y X S Y V V U W ] Y \ T V Y [ T U X T ^ ] ^ Y a ` _ ] Z V R S S T V T M R _ [ _ Y M Q V U Q T P U Z U \ T O T Q R X P ] \ T I L D C B F G N J I > A B E I G D J M H D C @ A E F @ A ? = @ B H G G > @ ? A @ E B ? C 9 = D B @ @ ? = 7 9 < 7 4 8 3 6 1 4 4 2 3 1 3 4 2 0 0 , - . , * * 0 - ) - * , + % " $ * ' ' ( ) ' ( # * & % ! $ " 
+     % ' " $ & $ & ' ' $ # ' ' $ ( ( ( ( ' % ) ' * % ( ( - . ) + + - ( ( ( * , * + , 0 1 3 / , - / 1 1 . / 1 3 5 7 < 7 8 7 4 5 ; ? 7 5 = : 5 6 < < ; : < < ; 9 8 0 8 7 > 8 7 4 4 9 8 4 7 ; 8 ; A 7 8 8 7 5 < = 7 6 7 4 6 0 5 7 3 8 = 3 4 4 4 3 3 7 6 4 3 / 5 6 8 8 4 2 6 3 4 3 1 : 3 0 3 6 2 5 4 1 2 3 2 1 3 0 - * / 3 8 4 3 1 0 4 1 . / - - 1 1 7 1 3 8 3 9 5 1 9 1 5 0 3 6 0 2 0 0 / . 2 1 3 1 4 4 3 4 2 3 5 / 2 2 0 0 / . , 7 4 2 7 3 5 / / / - 0 2 3 5 5 . - - ) + + , ( ( , ) / , ) * & * ) ) + 0 0 - 1 2 1 0 2 / 4 . ( 2 1 1 / 0 1 / . 0 - 6 7 3 0 3 / . - / 0 / / + ) - / 3 / - / , , 0 0 0 - * ( * ) - , - 4 2 * ) / + * 0 4 - . * + * + * + ) . , + , , ) # ( % - ) ) ( ' / . # & ( ( + ( ( - , % ( - ( % + ) , + ( . $ % $ ) ( & % $ ' ) + & * ) + $ & * ( * ) - % ' + 0 / % $ % % ' % ( + ( % ) $ % $ " ) ' & & % ' % ' $ % ( & % ! ' & ( , ' $ $ ( ) * ) ' & ( & % * ) & & * + % ' ' ) * ' ' + ' ( - ( % ) ' * $ ' ( * &   ( * * + ( % % # & $ ) ' # % % % ' & & & - ( & " & # 
+                                             
+            
+                
+                
+                                                                                                    
+  % % % & , / + . 0 6 7 ; = < B B > ; > ; @ A ; 9 = F = ? B A B C E E @ @ G L J B H K G M P Q H O N U T S K H J O I O R T U S U U U Q T U Q M Q S X T S T X K P Q S V T T W T R R U S P P S R ] S Z Z Y \ \ Z X T Y W \ ` Z Y U Z _ Z T Z Y W Z W W T X Z U O Q W Z ] U X V Y X U W ] \ T _ \ a ` X S W ] ] Z \ d R Y Y Y W V R Y U Z [ L O Y \ ^ [ O T P S T R W Y X V S R U T W J I I Q R V G B G I A @ E J H C = F H E A A D @ I I E @ B > ? F D B D ? @ @ B E C > ? H B C C @ = A 9 > ? A > < : 9 7 2 2 3 4 3 5 0 . 1 / 0 . / 0 / 2 / - / , * + * , 0 ( ) + ) - * ( ( ' ( , % % & ) # ! ( & ) ' # # " " $ " % # * ( ' ( ( & ' % ( ' , * 1 * ) * ) , * . ' ( , . - / / . / + , , ) - 2 . / 1 ; ; . - / 4 6 4 3 2 2 5 3 7 ; : 3 8 7 7 9 ; 9 8 9 7 ; 8 < : 4 ; 9 ; ; 9 6 7 7 9 7 6 ; 6 2 : = 7 9 : < 8 @ 9 5 8 ; 3 > 9 : 5 6 0 2 3 4 4 4 6 8 / 7 ; 8 7 5 3 3 1 1 3 4 9 3 5 2 . 5 7 7 6 1 3 4 2 2 / - 1 2 2 0 5 1 1 1 6 . + 0 2 / - 0 3 2 0 2 3 0 , - 0 0 5 4 2 7 1 2 0 9 < 0 3 1 2 2 / 3 . . 3 6 8 4 : 2 1 1 . 1 1 7 3 . 0 / 0 2 + * 0 3 2 3 5 0 4 0 / / / / , 2 - 4 1 1 / - 0 + , ( , / . / , * * + / 2 + 1 3 1 . , - 0 0 2 0 / 0 1 4 3 0 / 3 0 / 0 2 / / 2 2 1 1 0 - . , . . 0 / 3 7 2 3 . , . - ) - 1 1 , , * 0 / . , / / 0 0 3 . + ) + / , - / / + - - - - 0 . * + ( / * - * / + % * % % * ( ) , * ' * , . . ) ) + ) * - ( , - - ( $ ) ) & * ) $ % % - , % * # % ) ( ) ' ( ( ) * & ) ) + ' # & ' ) & & ) ) ! % ' & % ( ) ) ' ) % % + ' ( * ) & $ $ ( % ( & & % $ % + & % & ( & ( + * % ' ' + ( ' ) ( + ( ' * + ' ' . * ' + * , ' " & + % ( ( ( + + + ) *   $ & & ) ) & & & * ' ) ' & % % % (    
+                                                         
+                                                                                                                                     " # ( ( % , 0 * . 0 8 7 9 ? = > ? 9 9 ? A @ = 8 6 ? > @ ? @ C A C < B ? B J J F G G K P P O K D K U T P V Q J H J H I S S O R S ] ] P T S T X S X X V S Y Y S U M S V U ] X X Y W S Y [ Y S [ V ` [ X Y X R R W U ] X R V T X S [ [ _ V X Y [ \ V X Y \ W Y Y Y ] ] _ \ U \ c a X T [ Y X _ T \ U ^ U T Z ^ ] _ d V Y V T T T L N W [ ^ Y R R Z U X U X W U X Y Y Z T T O P O T L K J I I K K H A B @ F D J I H C D E C G D E B B F C @ = B A A C F B H C @ @ A F E < < ? = A > B D A @ = ? < < 7 8 5 1 / 2 / , - 3 3 1 / 0 1 + , ) , / 0 * ) * , 0 + * / * * & ' - ( & $ # " " # ! ( ( & # & ' * ' & $ % ( * ) ) ' . ) ) & % & - + * + * + , ) + 3 * ( ' - + , 0 / 0 - . 4 4 3 - / + 0 5 5 8 2 5 4 2 5 7 ? ; < 6 4 3 9 9 5 6 3 4 7 4 7 ; 6 7 8 8 5 5 : = 9 < 4 5 8 9 5 3 5 2 8 7 3 8 7 7 7 ; 8 < 6 6 8 ; 9 = 7 2 6 : 1 6 ; 8 8 4 2 7 8 ; : 2 0 9 4 9 9 8 3 5 5 4 3 7 6 5 6 2 / 2 6 5 9 3 8 0 1 0 0 1 2 4 , 0 1 5 , / 7 / - 0 1 2 4 7 3 1 , - . + 0 . 2 + 3 1 3 3 * - . 7 9 3 4 / * 0 * 2 1 / 6 2 8 7 7 2 / / . / 0 0 0 5 5 3 0 - * - 3 3 4 / 5 0 3 2 . , 0 , , . * + . , . ) , & + + , * - . , . 5 3 4 3 * , 3 6 3 2 2 / - - 1 1 0 / 0 1 0 1 0 1 . 1 / 4 . / 1 0 1 - - . + + - , . 5 7 0 , . / . ( & , + - , + . ( , , / . . * , 1 2 , - / 0 * + * ) / , / 0 * , . , . - + + ( + + * , ' ' ( - , ) . . - 1 . + , - ( ' ' , ( % * - / ) ) & ' ' % ) ' , * + ( ' ' & / + ' % * ( + $ ' % * & ( * + & ' & ' * ) * ( ( ' ' ' + ) & ( $ % ' ( ' $ ( % ( ) % ) ) ) ) % # & % ) * % ( ) " ' + + ' & & ( & ' ' * * , , $ & ) ' + % & * ' ( ( ) ' ' ( ) * ( ) , + - ( # % + + * ( # '   $ * + ( - * ( " $ " 
+ 
+                                                                                   
+                                                                                                         
+ $ ! $ $ & + 0 - 2 1 5 7 9 ; 8 : = : @ B = ? < < > < < G B M I C G < C C F I D E F M M O M P S L O K P P Q S H J M G J Q U T Q X [ ^ S T R T V O Y Z Q R Z T Q V P Q Q X S U T P X X U Y S T Q T ` \ V Z S S Q P L O _ Z Y Q V Z W X [ V Y T T S X Z T Z R V Z V Z Y R R R ^ Z S V W ` ] O V R W V S X V V Z Y [ [ T R U V T Y S O R U U U R R T W S P P S S V U Y W V T Y T L O I K L H A > ? D E A @ I H F I D ? > E C C A A D F > A B A ? D = ? E G B > < ; C D A A < ; = > ? = A = ? : 4 6 4 3 2 - - + , / * , 3 1 0 , / . / ( ( , - . / % + ) * * ( ' % ' ' & $ ! # # $ $ "   % $ & ! ' %   # " % % % % ( ' % & ) ' ( " % ) + ' + - / - ( / 1 0 , 0 - / 4 2 4 4 6 4 2 4 4 7 5 1 2 5 7 < : 6 ; : 6 7 7 9 9 9 8 : 6 6 8 7 9 9 8 5 8 8 ; 5 3 2 7 6 7 ; ; 8 8 ; 8 4 8 : 4 0 4 3 4 2 0 3 6 3 6 5 3 8 4 8 7 / : 5 7 3 / 4 8 8 8 5 / 4 ; : 8 ; 0 2 1 2 7 3 3 1 4 4 2 2 1 3 5 1 0 . 3 2 / 4 4 : 4 , / 4 8 7 1 ( 1 2 / . * 0 0 0 3 4 2 6 1 3 , / . , - 5 / 2 / 0 / / 1 0 * / 0 1 1 / , + 1 / , . 4 . . 3 1 / / , . . 2 2 / 2 8 5 / 0 1 / - , - / . . 1 . + + * , % ' ' * * , ( ( ) ' ) % * + * / 2 / 0 2 4 5 2 / . 2 - . - . + , / / / 1 , 1 / 2 3 1 / 0 - + 1 5 0 + 0 . 0 / - . 2 + ) + 4 1 . * 0 - , / , - - - - + . . / 0 - . - 0 - , / . - . - * / . 0 - - 0 . + + * , * , ) ( ( ' ' % ( * ' ' * + + , + - , ) + ' . + + * ) % ' * , / , ) ) % & ( & $ ) # ' ) & ' ( ) ' ' ( ' ( ( ' & ( ) * ( ' & + % % # " # ( ) $ # $ % & ' ( ( ' % ' & & ) & % * * % ' * $ # ! % % ' ( ' ' ' & & * . ' $ # ( ' % + ' * * % ) ' & % ) + ( % & % ' ( * ) & ) & $ # # # ( * % " " & ' & ) & + # $ % ) ' $ ) ' & % ! 
+                                                                                             
+                                                                                                 ! ! " $ ( ' , 0 0 5 6 4 4 7 ; < ; 8 9 ? @ = > @ ; @ > C G J K L I C H I I F F G E O P R O P P Q S N R O K N I F L M P N U N Q X P W X S O R T P T [ ` X Z R V O K U R O S S R V Y V W Y R S R O V W Q X M N Q T P K Q V Y R T T T U W R Z W O \ [ X T Z W T X S S U X Z Z U U R [ Z Z ] Y R R R Y S W X a Y \ [ V b Y Y P U T R V Q Q V T N P U T X X P W S Q N Z e Y U W W K L M K B H B ? ? E B B B D I E @ A E D B @ G @ A B B < < B > A B @ G K C ; ? < 9 C = A A @ 9 : 5 9 7 5 6 7 6 , / / / * - - - , - , * * + 2 . * ( ( % * ) ) . * % ( ' * ' $ " $ & $ & $   $ & ( $ #   ! "   ! ! " ! $ & & ' + % & & " + * % ) % ( , . ( ) * / * / 0 0 3 0 . / 4 4 5 9 7 9 9 7 4 ; : 9 : ; 7 5 6 9 6 : C 9 : : 7 4 5 : ; 6 9 9 6 : ? : : ; < 8 / 8 9 6 2 4 < : 7 6 8 7 6 6 5 3 2 8 2 2 9 4 3 5 4 5 4 4 8 : 9 3 . 2 3 5 2 8 6 5 5 3 4 / 3 9 8 : 8 . / 1 / 8 2 3 0 3 / 0 - . 4 / 0 0 3 3 . 0 3 4 6 8 2 2 0 / 3 6 . . 2 1 1 1 / / / / 1 2 1 - 0 + - + ' * 0 0 2 0 ) + , - 2 - . . / / ) * , 1 - ( / 0 4 , , , - , ) 0 0 5 + 2 1 0 / . * - * + ' ) + * ' * ) ' ( ) ( ) ! ( * & ' $ % ' ) ( $ , ' / 3 - * - 7 7 , - + / + * - / . - 0 , / 1 4 / / / 6 2 1 . ' * ) 0 - 0 + + 1 1 / / . 0 , * + 0 + , ( , . 3 0 ) . + ) - ) . 0 2 , 0 , 0 ) , 1 - * ) , , - ( ( , , + ) & 1 - ) / , , ) , ( * ) " % & , # ( ( ) - ( ( - * + ) + % * * ) % & - + * , & % # % ' ) ( ' $ ( ( & % ( # # ' ( & ( % ( * , ) ' * & ( ( & % " " $ & ) $ %   # % ( * + & & & ! # ) ( % $ ( ' ' ( # ' % * % " $ " % & % ' ( , & & ' ( % ( % + & - ( ) , ' ) ) ) # # " $ % & ' ( & & ( ( & ' " & $ $ % " * ( $ $ ' * ' & ) $ + # % # $ "   
+                                                                                         
+                  
+                                                                                  
+ 
+ 
+ ! % & % % + 1 2 1 0 3 7 4 : < < : 7 8 : > < = < B ; A D F E I F H I F I J L D F N P M N P L L M O U L H K G I I R T N L M L R L O X T U M M S P X Y Q O O U M L O O R Y V U R P R V P Q P P Y V R T S Q M L Q V Q Y X \ X U U Y Y U P W U N W X U U W P V T Z W S W S W Y ] ] Y W R Q Z U [ W Y S T \ ^ [ ] V Y Z T \ Y T T V V U N W Q O O J M R W S T T P T Q W \ X K H L N L E A J A @ ? E C D A A C B > 8 ? ? B @ ? E B > > 9 ? @ = D > D B D ? > B @ < = > = ; > < 5 4 3 6 4 0 5 4 0 1 ' . * * , * * , ) * * , 1 , % ( % $ ( ( ( * & % ' & ' $ % # $ ( ( % $ # $ ' ' ' $ # $ ) * ) "   " $ # # ' ( ' ( ( ( + ) * + $ , 0 . ) ) / / 1 1 4 4 7 ; ; 8 5 : 7 < 9 8 9 8 7 ; 8 ; ? ; 9 8 6 4 4 5 8 ; ; 8 4 4 1 4 5 < 4 4 9 6 6 5 7 5 8 ; 8 8 5 5 3 3 5 < 7 7 : 9 8 7 6 8 7 5 7 8 9 1 4 3 4 4 / 4 5 ; 5 2 3 6 3 0 5 8 3 7 5 8 4 3 4 7 8 7 5 2 2 2 0 / 4 2 0 4 / 5 - 5 3 4 6 3 7 4 1 , . 2 5 7 . . 1 5 / 0 , - 1 0 / 3 3 . . 0 / 3 + ' * , * * * & ( * / - ) ' , + ( , / , * * ' ( + 0 . . 0 , . 0 , ) . ) + - 0 / + - * + , - ) ) . + ( ( * ) ( ( ( ( ) ) # % * ' ' ' ' ' * ( * . / - . / 4 3 2 . 3 . / * ( , + ( + * . 1 5 . 1 1 - - , 0 1 / 0 + * , ( 0 . + . 0 0 - / 1 / 1 * , - 1 . - ) + / 0 / - + / ( + ' 3 1 * , - ( ) ' , 0 . - + , - . ( * , * + ) + , - ' , + ( ' , * + ) ( , % + ( # & % ' ( ' , . ' ( ) % ( ) ) % * 0 ( ( ) ' + ' ' * $ * % % ' ) - . ( " $ $ ' ) # & % ' * $ ) * - , * ( ' ' ! # & % ( ) % ' & - - * ' " ( 
+ $ * $ # % ' ' ' $ # ' % ( ) & ) % % + ' % ) + % ' % + ' $ ' ( ) ( & % % & ) * ' ' $ % * ' ( ) ) % % & ' ) ' & $ # % # & & " $ $ % ( $ ( ) ) * % & & $    
+                                                                                              
+                                                                                               " "  % ' & * 1 . 2 3 4 0 8 8 < = ; < = ? < ; D > E C D C E I J B K J K D D C D H M O M Q T U Z P K P N M O N O O M N L O H G T S U O N R J K Q V X P M P S T H M P R T N R T T H Q U V R S W W W T S M R Q L Q W V P Y U V X Z R R S V T R Z ^ X R T V X X \ \ W Q [ Y U R R ] U Q T O R Z X U R R T O P V Z X T Y V T P R S W Z S T P O H L J E O T L U S Q S R T S T O I D A A = > C B G A D G H E F B > D = = > A B C C @ > ? @ < < > A B @ C B A ? = 6 7 ; 9 9 < 7 9 6 8 4 2 1 0 . 1 - . . - * ) ' + + , + * + ' * & ' % ' & % $ # $ ' ( ' ( #  ' % & % # ! $ ! ! & & % & & ( ' $ % " # % " # ' % $ ' - ( $ ( * 1 , ) , 0 2 ( , 2 5 / 4 7 : < < < 9 ? 9 7 ; > ; 4 ; 9 4 2 7 9 4 6 5 8 7 6 6 ; : < 0 4 ; 9 ; 5 4 3 8 7 6 8 = 7 5 4 6 4 4 5 7 4 7 5 7 4 6 5 9 8 5 6 3 6 1 2 5 4 1 4 5 8 3 . 4 7 2 7 6 0 / 9 6 1 . / 3 : 5 5 6 0 2 1 1 0 1 0 4 4 8 9 0 4 5 3 3 - . 0 - 0 0 + 0 / + - 0 0 2 5 * . 2 0 + * 1 1 / , / - / * , ( & + ( ' ) ( - ( + , ' ) ' ' * ) , * - + * & ' & & ' . - / * . . ) ! * + ( * , ' ) ' * ( ) ( ( & ( . * ( ' % ) + . ' ' , ' $ % - % , ) ) + ( 0 . + / , / + 0 6 4 - * + , - * * & % + / * - 3 1 + + . 3 ) * 2 / * + ) * + ) * - + , 1 . 0 . . / * * . . 1 , * ) - 3 , ' , * , + ) 2 2 . , - ' ( , + , . . * + , * ( ( * / , - ( * * ( * ( ' ) ) - ) ( - - * , * ) # $ " # % % * ( % ' ' $ $ # ' , + * ) % ' * & % % # $ % & + ( + ( % $ $ % " % ! % % ) ( * ( ( * $ $ ' & ' % ' % ( ' & " & ' + ) $ & ( % % $ ' ' ( " ' & ) & ( ) ( ( $ $ & & + * ' $ $ # $ & % ' % !   & ) & ' # " & ' $ $ $ ( ( $ ( ) ' ) ) $ ' * % % & ' % ' ) & *   " & $ * " # & ' $ & ' ( " 
+ 
+  
+                                     
+         
+                                                                                                                                              
+ "    $ $ ' / - 1 5 2 4 : ; 4 < < 6 9 ? @ = : 9 = C E 9 A C ? E ? G E G C C B G J M M O Q S S S O G L O I M J I M K J L M M J O L P P K O J Q R W Q L M R R X P O N M J I L M K M S T U T O M P T V X S M M M Q S P N S S W V S Q P T O P V U Y W K K X V U Z Z V W \ \ Y R W ] W Y W U W V M R W U T U N S U U N S U [ T N R S R U L P K R Q O I F J P P K W R U M Q U T C = D B > ? @ E H > B D @ E A D ? A A 9 = B @ ; ? = 9 = = 9 @ A @ > F D @ = : 8 2 2 7 8 3 7 1 / 2 2 / 2 ) ( ) * ( ( ( * ( ( $ % ) ( * ' ( ) ( ' $   & % $ ! ! % " ' $ $   & $ " & # " 
+ ! #   $ % % ! # % $ "   " ! % % # ' ( ! * - % $ & , . - + + / 2 2 5 7 6 4 1 3 : 9 ? ? 8 8 8 3 3 ; < 3 4 6 5 > : 9 5 3 0 4 8 3 4 6 3 8 ; 6 : = 8 8 3 8 : 5 9 4 > 6 1 6 4 / 1 4 < 8 2 2 5 3 7 1 4 3 4 0 4 3 1 / 0 0 0 2 1 5 2 / 3 6 5 0 2 4 2 0 1 - / 2 7 8 4 2 . / / 2 8 3 5 - / 3 1 / / 5 7 / - * + 0 / / , + / , / 1 / , / 2 , + , ' ) , - + / ) 1 ' ( ( ' ) ' ' ' & % ' $ & % % & ' & ( * ) ) ) ) ( & ) $ % ' " ( + ( + . % % ! $ ) ) ' * ' % * ' # ( % * % & ' % # # ' * ' % & * , $ " # ( - * + - ' + 1 . * * ' ) - 1 / + % ( ) , + ) ( ' - ) . ( , , / . 1 + 1 - / / - - . ) ( ' ) - + * * / $ + 0 - . * * * , , * + - * / ) * * * , % ( ( + . / , ( & ( - * - ) ) * ( # ( & + * ( ) ) ) ) ( ) ' , , * ' ) ) ( ( # ( ' ( & ) # ( " % # ( ) ' * $ " ' & + + % % " # ( ( + ( ( # ' $ & & % $ ( # # ' #     % # + & ' ' & ' ' " + * + ( $ $ $ # $ # % & ( $ $ # $ % % % ( % # # ' & # $ # ( ( %   # * ( ' % % # # # % % ( # ( % $ ' ' % # # % # & ' & ' & $ $ ( * $ & # % % ( & ' $ '   # ' * & ' ( " $ ( $  # $ $ & # % !    
+ 
+                                                    
+      
+                     
+ 
+       
+ 
+   
+ 
+                                                                                                
+  ! # $ ( ' + - ( , 4 4 ; : 7 7 : 8 : 8 < = < < @ F C < ; @ @ C E J G C B D I G I L J M K H N P F L M L E D G J J R M J J Y M P I I R M L E M R U R P N T Q P L Q Q K I L M R R T Q O P V V R N T Z ] V R S Q L P S O [ S \ _ W U V O K N W [ U U P K S X Q U S U O S T P Q U T P R S [ Z U X O R T P O O U R T S O P P S Q M O S P N N M U L I I P K N S W V Q K J K J H A E I A < ? > @ ? ? ? 8 < = B ? E D @ @ A = ; ; = 6 5 5 : ? > ? @ B @ C < 8 9 7 3 5 0 2 , / / / - - . , - ) $ % ( * ) # ' & ! 
+ ( ( ( % & $ & * $ # $ $ # #   # " $ $ # # # % " !   
+ 
+ $ % " # & # ( % $ $ % $ ( & $ # $ ' ' & & + ' ' - 0 3 3 / - 2 2 9 : 6 ; = 9 9 : > < = 8 4 7 3 5 : 8 3 1 4 6 : 6 6 5 1 0 2 3 4 3 5 5 8 9 2 4 5 4 5 8 ; 9 2 8 5 5 4 0 3 1 7 / 2 3 7 0 5 7 5 3 2 . 1 3 3 6 1 0 5 3 4 , 0 / 1 0 3 2 2 0 , 1 6 6 1 2 . - 0 3 1 / * 0 1 3 0 1 3 2 0 + / 1 / / 2 . / - , 0 / / 2 0 0 - . - - + ( ) 1 0 ' * * & + - ( ( / ) ( ' ) ' + % # & " % $ * & # ! & (   ! ' % % ' ( ' % $ & ' ) " $ $ % & $ % & % $ # # & ( $ % & % $ % # ' #  " # $ % &   ! % $ - ) % ' ' ) - ( * + ) + ) ' ' % % & . / * * * / 0 - ) # ' ) . , ( % ) , ) . / ( ) % . + 0 , - ' % * , ) * ( * , & , + + , * ) , , , , - ) + - , ' ( ) ) ( . + , + - , + ) * ) 2 + + & ( % ( & * * - * ( + * ) ( ( ( ' , $ & % ) ' % $ ( # & ( * ( $ $ & ' & ( ) ( ' ) ) ( + ' ' * $ & & ' $ ' ' $ $ ! " ' " 
+ ! " ' & $ # 
+   $ # & & % # % $ ' ' ( * ' ' # $   " $ # ' & # & # ' $ ( % ( $ & & % # % " " $ " " ' ) ' * $ $ % ' + $ $ ( $ ' # & & ) " % % ( $ " ) $ $ & % # ) " "   ! % # ) & ( ! & % " ' % ' $ ( $ % , & # % % ' % %  !  ! 
+ 
+                        
+ 
+    
+   
+ 
+            
+             
+    
+    
+         
+      
+           
+                          
+                                                                       
+   & ( ! + + , 1 + 6 8 6 ; : 3 8 ; ; 9 9 : 7 = @ > = ? 8 ; < D C F D B F M H J M M G K H I G O I G K K J J O R O I L L M O M L K O O J N J O O Q L O K P L J Q Q M T L T U M Q T R M M T R P V T R U Q R R S R P U O Q S S U T Q S O M U U T Z P Q O O R T Q P P T \ V O W Q Y W S W S U W W O P V S O Z P Q X X T W V O P T N L T T N R P Q P N O P J L V W L J D C E ? D B E @ @ > > 4 > @ A < < @ = < A @ B < 9 8 @ < A = 8 9 > ; < C C ? 9 < 3 4 1 / . 0 ( + , 1 0 ( ) + ) ( / + ' ! " ' % %   $ # 
+ # % ( % & " ' ( & # # # " #   " $ % ! # # #   ! ! ! "   # " ! % $ # ( ( * $ $   ( ( , ) . + , * ( * + . 4 1 : 6 - 1 3 7 : = = 2 6 9 : < 8 4 : 7 5 7 7 9 5 3 : 6 2 2 9 9 2 1 / 2 4 4 7 6 4 3 4 6 8 7 5 4 5 8 5 / 4 6 / 3 0 / 2 0 4 1 4 5 6 3 7 2 1 3 3 1 - 1 / / 2 4 0 0 1 / 0 4 . / / , . * . 3 1 5 4 2 5 4 0 . - 1 / / 2 . - 0 4 1 0 / 1 4 1 0 0 2 5 + + 1 1 / + / 0 * * . * ( % % ) ( $ ( ) & & ' $ $ & & & # " $ ' % # " ! $ " $ % $  " # % ' $ $ ( " % & % $ ' % " $ $ " # # $ ! " $ % ! " % % " $ " 
+  # " " $ !     ! % % ! $ $ # * * ' ' & * - + ( ( * + , - * ! % ' ( * ' ( ( ' ) ) + % & ' / , ) ) * , ' * * * $ $ ( ( , ) * ) ) * + ' * ( ( ' ( + - - / * * + ' * / 0 , , * & $ ' % ( , ) ( ) ( ( , * ' ) % ( ) , ' - * , ' $ ' ' ' ' ) ( ( & $   ) + % ( ' # ' " & " # ( # % # % ( $ & ( ' % # # ) ( ' ( ' & ' $ & ' & ' ( & ! $ " % & & %   $ ' & % " 
+ ! ! $ & ( & & % & ' * * ) ) ' ' ' #   ! 
+ ! % !   ' & " " " ! "  # " # # % # $ " % ' ' % $ " ! $ &   % ' % * & $ % ' & $ ! ! % & # $ %   " $ $ $ $ # $ % % # # ! $ $ $   % # $ " % ! # " & # $ % # % & % % ! & 
+                                    
+  
+                  
+           
+                                                                  
+  
+                                                              # & * - . . - 3 7 : 9 ; 6 5 8 < ? : < ? = B B F @ ; D C ? @ G J E J P M I H G F J L O T Q R O J S K H I H N J B I P N O I L S O I I G I J J Q P J M J H P I J K K P K P Q R R J R R Q S O N K M L R U Q R X U M I I P K Q P S R N P Q U X W Q L M P P K K M N Q V V ^ U Q T P Q P V T T T O W [ Q Q S R P S T R Q R S N L N N R L J P M J L K M R Q O I H E > B > = @ A @ B @ ; ? : ; < < : > ? > < A B = 6 7 6 ; > @ : 6 ; ? B 6 < 8 7 5 4 / , 1 + , . + ( 1 - * $ % % # * & % 
+   % # " % $ " # % $ % ( &  $ # # $   ! " ! 
+ ! "    "     !   % ! ! " # % " % , ) ( $ ' $ * ' ' + * ) - - . ) - 2 3 7 9 7 5 4 = 8 5 9 8 0 1 : 9 5 2 3 5 1 8 ; @ 5 / 4 6 : 5 1 2 5 2 2 3 1 / 2 7 5 4 3 0 1 1 . 7 6 8 4 5 2 / 4 6 1 . , 0 0 4 1 0 3 / 5 3 1 1 3 3 3 3 3 2 2 0 1 4 0 2 . * , / 1 0 - 2 2 + + 0 0 5 . - 0 1 - - 6 3 / 3 0 . . 1 / . 0 0 1 , , . 1 - , 0 . 6 / / - - ' ' ' ) ( ' & " ( ) & # # ' % % ' ' ' (   # # " " " " !    $ " " " ! % ! # % #   ! & ! $ % & & $ ' ' " % # # $ " # " # "   $ " ' "  $ "      
+ " ! " ! " $ % + * + ) & + ( * ) ( ( $ ) ( - * ' ' ' ) + ( * % % % ) ) + % $ $ * ( ' * * + ( ) ' $ * * * , , * * - * ) ) - . ' & ' ) + ( ( % % ( . ( . . ) + % ) ) & ( ' ( + ) ) * ) ( * , ) ) + ( & # % ( - ) & ' $ ' $ $ ) & ' / + $ ( $ ( * ) % % ' ( # ! # #   " % & $ % ) # % % $ # ( ' ! # $ $ * ) ) ( ( $ $ ' " $ % $  " 
+ " # % % # !  & $ " & ( ' " $ # ! $ ' $ & ! $ % & '  
+ " # # $ % & $ % # "   $ # % # " ! " ! $ ( ( ' % " % % # 
+ $ # & ' ( & #   " ! " $ ' $ $ ' $   % # " ! ' ( % & $ # $ ! # ' ' $  $ " # $ " $   ! # & & * %     " " ! 
+  
+         
+           
+  
+        
+   
+     
+ 
+       
+             
+                                  
+                                                                                                
+ 
+ # $ ! % ( . , - . 5 ; 7 7 : 8 : : ? 9 : < ? < > > A D ; : 9 C ? A D D D J G J F C H C I H K R T J I N O K I N K H J K O J G K J J K E J G L L O Q R I L O H N Q M Q K K N Q O J K L O W O Q O P O O O R M N M S U N J N P P T T R P X Z U V Q J Q O T L R P K G J S O T V Q R T Q U X Y S T N T \ ^ T N O L H M T Q O L R L P K J F I Q K R R J E E L K H I G A C @ > > = < > ; ; > < ? < > ; ? ; ; ; < : : B = > = : 8 8 8 6 8 7 7 3 1 / / / 1 + , * , * + - ( ) ( # $ ( $ 
+ % " #   " " #   &   ! " $ % # ! " 
+ "   !     $ $ # # # " 
+    
+  !  # ' " % # # $ $ $ ' + & $ ' , - , ) 0 . ) / 4 6 0 2 4 5 4 8 6 2 7 8 : 3 0 1 2 6 7 5 1 7 4 4 4 7 6 9 3 0 3 7 4 7 4 1 3 6 4 4 4 3 3 2 . / 1 0 1 9 3 5 ; 6 2 5 4 0 3 6 8 / . , 1 0 1 / 1 . 5 5 5 - / 0 1 1 3 4 1 7 2 2 3 0 3 0 / 4 / 2 1 3 - - - / 0 / + . - 0 , - 0 1 - + , 4 / 0 / 2 / . 1 0 . * - + & ' * ) * . + * % " ' % % & ' % ! # # !  $ $ ! $ # $ % $ ! % $ " " ! # ! ! ! " % % ! % # ( ) $ $ % ( % " # & ) ' & % % $ & ' " % %  "   " # " $ $ % * & $  % !   
+ ! $ " ' ) ' % * + ' ' ( $ , ( # & * + ( ( ) ' ( * ' & ( % $ ' ' ' & % & ( * * & & ' " # + & ' $ & + ( ( + % ) * , ( ( + ( ' ( ( ' ( ( ( $ $ ( & ( * ( ( ( % ) ( , & ' + + ( * - ) ) ' . + * & ' % $ $ ( & &   % ( * $ % % & ' # % # & 0 - + ) ( ' & * % % " $ ' $ % # & ( % % ( % % ) & $ $ # ! % & # ' $ # " " " " #   "   
+ " # ! % ! ! # " " % + & # # "    % # # ! # $ $ # % ! $ # ! ( ' # % $ ' +    $ $ # % # & ( $ * ( $ # ' % + $ " $ # ! " " ) & ! " " # # # & ( $ " % $ $ !   " & & & % ! ! 
+ ! $ $ % " $ ' % " $ & % ' ' % % " % #     " %  " 
+ 
+         
+ 
+             
+   
+           
+     
+  
+                  
+            
+         
+     
+   
+ 
+                                                                                                
+   " % # ( * * - / 0 3 7 4 8 7 3 9 5 < 8 8 6 @ < B @ A ? = ? ? C B B C B @ H D > H R O H E F M Q P H M K O M G G L O H H I F G E K H E E N I O H Q T R L F L K L L N P M L K N Q G K E E J M O P T P J M M Q J R M M K P Q S S O U R R [ Z V T V S T Y S S V M L I R T R K S R W V X R O N R Q P H R Q T R S M K M P Q P V R P K H J F I K H I L G J E C ? D B C D D < < 7 9 ; : 8 7 < D ? : 7 < < : 7 9 : : < : = = < 2 6 1 3 4 / 2 3 0 ) - - ) ' , ) + , * * $ ' ' ( % ' ' * ! " & " " $ # 
+  ! " #   ! !   ! $      
+ 
+   "  # #   # #   
+ ! ! " 
+ !   " ' ! ! ' + * + ( * . , ) ) + * / . 7 4 . 1 8 4 4 5 4 7 0 4 3 8 2 5 3 - 0 0 1 3 1 1 4 7 6 6 6 7 / 9 6 4 4 9 5 4 1 / 1 2 2 1 / 3 5 8 5 2 . 2 3 4 4 0 6 0 0 4 3 4 . 3 4 / 0 / + . 2 7 2 2 1 3 4 0 - 3 / 3 1 / 7 5 5 4 5 1 4 . 1 2 1 7 0 2 0 - + 4 / / / . + / / * / 2 , . - 4 / . 2 . 1 2 - 1 3 / ( , ) % * % + , ) % ( % ' % & * ' %   ' ' % # ' # "   $ ! % # #     # ! % # # & % " # $ & # ( ) ' + * - ( ' ' ( * % ) ) & ) ( - * ' ( ( + ( + ( # $ $ & - * ( * , &   " 
+  
+ " & # ( * * ) % % & & # ' * ) ) % . 0 % + $ & ) % " % % ( ' % & ( * ( ' $ # $ $ "   " $ ( ' ) ' & & $ ' * * ' $ ( ( + % ( ' , , ' % # * * + * . * ) # ' ) * & ) ) - , % ' $ ( % - + ) # ' # & $ & ' # $ ) * ) # ) $ $ % ' " " * , ) & + * ' ' ( & ( ( $ %  " % # * ' ' * $ " % ( % # " # $ * % % ' $ # $ $ ' % ! # % ! " !   $ ! !   ' ) ' % ' " # & # & $ $ % " ! # $ " %   $ # ! ! $ # " " % %  ! $ $   " % ' + % ( ! ! # & % ) # ! % $ $ ! # % " " $ $ ) ' ' ( ' !  # " ! $ % & ( % ! # ! # ! ! 
+ # % ! ' # ' # % $ $ % * $ % ! $ $ $ $ #  ! "  
+                                    
+   
+       
+   
+ 
+         
+   
+  
+           
+ 
+        
+ 
+ 
+    
+ 
+ 
+ 
+                                                                                                " ! $ ' ( , + - / 0 . 4 9 = : 9 ; : ; > 8 = : ? @ > > < E > A ? D F @ ; F F I K I H O S L O Q S Q L S R R Q M J G M Q J G H G H D H L G I G L U N L K L L M J K R I I R O L K I L M P H J J K Q R T T K M M M L V I L H P X T S N R Q R T M M Q L L S Q N Q P L N M M P R Q Q R Z U Q N L O U L T J T T U T T M I K M M N P S O I M L J K K I F H F H M E > A @ A C = : : = : = = > = > A = 8 8 < : 7 ; @ ? = < 6 7 9 7 0 3 - , , - 1 - * ) ( . + % ( ) & * ' % " # % ' & % ) ) " #   " # & %  
+ 
+     $   # " #  !  " ! ! 
+    # !   
+ 
+ 
+ 
+   ! ! $ $ " ( ' ' + + ( ) , / * + . - , * 5 9 5 2 6 5 6 9 2 9 7 0 3 3 7 1 0 0 6 6 7 4 9 6 6 7 5 5 6 3 9 7 6 7 6 2 8 5 : 8 1 5 4 4 3 1 2 0 4 0 7 1 / 4 2 4 5 4 2 4 6 2 7 1 3 4 4 1 3 3 1 1 6 7 2 2 / 3 0 1 . , 0 2 4 8 . 2 5 3 0 2 * 2 0 3 0 0 4 2 2 , , / / + / 2 0 4 3 2 . - * - . 0 / - , 1 2 1 / / / ( ( $ & * ( & % ' ( ' ) + ) ) $ & % # # % $   # ( $ ' # ! % ( & $ # ! ' ! ( ( * ' * ' % # & ( ) , - ' . . ) , , ) ) , . 2 - ' ) + ' ( $ + , * ) ( ' ) * , + + % ) * * # ' $ # $ ' # #   % ( ) ( & & % ' % ( ' ) ) ) / ' ' % ( ' ( % & ( % & $ ) + * & & + + " & + % $ ' * $ $ ( * + * ( , ' % $ % & * - + ) ' % & & % ) , ) ) ( * ( ' % * ' ' & ' ) ( ) ) & ' & ( % ) * & ' ' ' ) ) ) # ( - - ' ) ' % % ' ' % * 0 & ) ) ( ( % ' ) ) % ' & #   $   ' ) # ! $ # ( ) * ' ) # % % & ( # % & " & , $ % % ( % $ # $ "   ! # ' ! $ # # & " % ( % % % % # " ! " $ # % !    #   $ # ' ' & # " & ! " # % % & # #     & & & ) % # $ $ # # ' $ &  & % % % " ' $ $ ! # &   # ' ' $ " $ & % ! $ # $ # ) ' ' % # ! ( " % % % ( & %   ' " $ #   
+  "   
+              
+ 
+ 
+            
+   
+                        
+    
+       
+   
+ 
+         
+  
+      
+  
+ 
+  
+                                                                                                  $ & % % * + , - 0 2 8 4 5 > < C E > : = ; ; A C @ C = E D @ > D I C D A A G L N F H J T W S U K P Q K P T S O G E N O M H M H I O K G G J R O L M J J J A J N Q J I P L L P P O P M M M L J K R V R P L S S R Y S M K Y d Y R N U U R W Q M R O P P R R P P L V Q N P T P S U X Q P P Q R S N P M Q S O M R J T W R S Q O L O L M F M K K E I J G F C A ; @ 9 ; ? ? @ = : @ ? < ; 9 ; > @ : ; : < > B @ < ? 8 0 2 7 3 + . 2 / / - + , * + + ( ( ' ( $ % ) & $ ( & ' ' ' ' & % # # " ' % ! ! # " # 
+   
+ ! $ # ! 
+ 
+ " " $  "   ! " " #  !    " " 
+ 
+ ! ! $ $ & % * , - . . 0 1 - - 4 3 0 5 4 8 5 8 8 7 8 : 3 5 4 3 1 5 9 6 7 8 8 5 5 9 < 7 2 8 4 7 8 2 9 5 7 6 4 0 4 4 8 9 2 1 4 1 9 2 5 3 1 0 / 0 6 2 0 3 7 4 . 3 5 / 3 0 5 7 7 3 : 6 3 2 . 8 5 0 , 2 2 - . / - 4 3 2 / - 1 2 1 1 + / / / + / 6 2 2 3 - 0 0 2 / / / + . - . / 0 , + ) ) * , . + , , * , * ( % , + % $ # % ) ( # ( % & ' # " % # ! " #   # " $ #   " ( ( $ % ! # % / 1 3 / 1 . , & ) ' / , , * , , + . ( + ) - . , - + - * ) / ( ) * / , ) ( % ' ) % ' ( * & ' ) ( * ( & #   % # " % ) & & " % ' & & & . $ ( + ' * ( ' ( + ) ( ) ) ' % - + * ( * ' , + % ) % ( ' * ' & ) - * ' $ + $ % ) ( ' ' % . - % % ' # $ ) ( $ ( % ' $ & ( * , * % & ' ' ' * ( + + * ) + ( % & ) ( , % % & ' * & % ( & ( ) ( % ' + ' & & & " ' - ) , % % ! $ % # ( $ ( ( ' % $ ' ( $ & ) ( # & * ' % + ' ( * ) ( ' % ( ( & % % ' " " " & # & # ) ( # ' ' % $ ( % ( % $     "   ! $ "   # ' ( ' & ) ( $ " !        " $ # # ! $ # " % % $ & " ' % % & # $ " & ( ! 
+ #   ! !     # " " & &  
+ % % ' % ) % ( % ' & # $   $ $ ! # ! # ' # $ % ' # % # "   
+ 
+ 
+                                                                
+                          
+ 
+ 
+                                                                                                
+   # " ) ( ( ' / / 4 2 1 4 ; ; > ? > : ? 8 > = A : ? = = C E C E D A E F A A E I I J L L N R W N J N K Q P M R M H O P Q H I J L I L K I I I K K K K L P L H N N N R M K N I N Q L N H J P X K L Q S Q I Q P U T S S Q Q S Q O M M R U Y Q O M R T M N S R O S W Z O P O J J S O P S M Q U T Q Q N M P V J L Q S N R P U R S O K P K K L H H @ E B ? ; ? @ > B = = = A ; @ < @ : 7 6 : A : 8 ? ? < A 9 6 ; ; 6 / + - 3 . . / 0 , - ) - + * ( ' ' # * % ' ) ) & $ ! " % % % ' # $ # $ % # " $ # $ ! " 
+ " # ! # #  
+ 
+ 
+     ! " $   " # # " 
+ 
+   % " ! 
+   " " * % ! % % ) 2 1 2 1 , / 9 9 7 1 8 3 1 5 5 9 6 4 5 3 2 5 3 0 4 5 7 3 7 / 3 6 7 6 5 6 4 5 7 ; > 7 5 4 < 8 8 4 0 5 2 - 3 6 5 4 2 5 3 0 2 1 0 4 4 4 7 6 / 3 4 2 4 8 5 4 2 3 8 7 1 1 4 7 2 1 1 2 / / , 1 3 3 5 0 2 1 0 2 1 2 1 , / / / 0 3 1 0 0 - - . . + - - - * . 0 1 , * * ( . 3 - . / - ) ( % + * + ) * % ) % ' $ # " " $ ) $ # & %   $   % ( ' & ' $ ( ( ' ) % ( % # ' , + , , , - ) % + * + + - ) ' ) * , - - ' ( , * ) ' ' ' ) + & + . ' , - ( * * , ) * ' + ) * ' & & + ' " $ ' $ ( ' # # " " & ' ' ( & ) $ ( ( ' ( $ & $ ' ( # ( + & ' ' ) ( * ( + * + - + * % ' ( ( ' ( ) # % % ' & ) * ' $ ' ) % ' " * $ # ' * ( + % ' ' ' $ ) $ ' ( ( ) * $ ) ' ( ) & - ( & ' $ $ ( ) + ) # * & $ & & $ $ ) . ( ' ' ' ' ( # % & # + + + ( $ ! $ ) ' & ( + & % ! # ) ' $ ( % ) % ' + - * ) $ ( * ) ' ) % $ * % ' ) $ $ " ' $ # ! % & %   # ( " " $ " % ' ' % ! " " $ % # $ ! % ( # % & ' # % # ! # #  % $   # % " & " ! % # # & % & ' & ' ) % # $ % &  # " !   # & " ( & #     $ & # $   % $ * , " # $ ! # $ # # $ & # & " $ $ $ $ " " !                                                                           
+  
+             
+     
+                                                                                               
+  % 
+ $ ( ' + , + 1 5 1 4 7 8 5 < = 6 < B > ; @ 7 A ; B C ? C E B F E B @ E H L C H J H P M R P O T Q Z X S P O K K P R K L J N K L H P G K Q M M Q Q N I M O M L M O O O M N R K G M M O V Q Q O T L O U R R U U P M V U T M P K M X Q N R P W S Q O Q I P R ] S Q L M R T P K N M L M U V N V W M R T O P T U U P W S P U U N J F E J I H F D F A C > @ F D ; > A @ A C 8 6 8 < 5 = D = A ; = < = = 7 5 5 5 0 / . 0 / - 4 - ' ) * - $ & * . & " ' # $ ) , ' $ # # % % % ' $ $   # % ( $ $ ! # $     #   #   
+ ! 
+   ' %   # "    !  %  
+ " # 
+ 
+ # % % ' " & ( ' + 3 / 2 3 1 6 7 5 4 - 4 3 4 3 3 4 6 7 : 7 5 5 5 4 5 7 8 5 7 3 1 0 5 7 5 5 5 5 7 8 8 ; 8 8 ; 9 5 6 8 3 3 4 5 4 9 3 1 2 1 / 4 6 2 2 . 6 9 5 / 5 1 2 8 4 ; 3 2 3 4 2 1 0 1 5 0 1 2 2 3 0 3 3 4 4 7 0 4 4 3 7 1 7 3 / 2 2 . - - 1 / 0 0 0 3 / . 0 0 0 2 , / / ( - - / 2 / * * , + * . ' % ) ) ) ' , ) $ $ & ! # # ' ' $ ( % & $ ' $ % ) ) * % * , , ' * % ' % % ( ) + - , ) - 0 , + / , * - ( * ( + . 0 0 0 ) * * ( $ % ( . , ) + ( * + + . ( , , + * ( % % ) - * - , ) , $ ! # % & $ $ ! ! $ % ( + ' + & & ) ' & & ) + ' ) ( & ( ) , ) ( ( * + * ) , ( % ' ) + & # $ ( # $ # ( . ) * ) % ' & . ( & # ) % % ) ' ' * ) ' ) # $ ) ' ( $ * * ( , ) ' % % ) ( + & $ % ( ' ( * ' ( + ) & ( * * ' % ( ( " & ) & * ) + ( * ) ) ) $ % % ( ) ' ' % $ % & $ # % & ' ( * & % ( ' % $ ' & % % ' ( $ & % # % % % % # $ & % " ! $ ) ) % & " ! # $ & $ # " $   ! # ! " $ # ( & ( & # $ ' ' ' * ( % ! " % # " * ' & ' ) $ ) ( % # $ % & % " * * # $ ) & ) " $ # " # & & % $ & ' $ # # & ' $ " ' ( ( % # ' & #   $ & # " $ & " ! " " " ! % "                                                                                                                                                                                                  
+ ! ! ' * , / * * . 8 9 8 ; @ 9 8 : ; > A B ? < = @ E E A A @ @ F H H G D D G L J G H L N K I R S S S Q P Q P P Q O N P M L O L I O L N P P Q K M M M F O O R L G Q S G H O P N M K J O X R R H Q S O R V S N S V O N L N Q Q M J P W P U S R R W P Q Q R [ U X O P L P P S N J Q L N M P P L O R P P U P P S R W Y U S Y R M J B A ? C I F F D ? @ A A E @ ? 9 7 @ ; > A = ; = < : = A = ? = 7 6 4 4 6 6 2 / / , - / / ) + . - ' ) ( ) ) , ) , % * # " & ' # % ! % ' ' % # % % $ % " ! # ! # " # !  
+ "  
+ ! ! !    ! # #   ! 
+ 
+ 
+    ! ! $  !   ! " # $ $   $ $ ( - - 1 1 / 4 7 7 5 3 2 3 7 5 2 2 3 8 7 8 5 6 ; 5 2 5 6 ; 8 4 / 2 / 3 0 7 6 4 4 0 4 4 < 3 7 5 0 5 7 9 3 2 7 : 5 7 4 9 2 . / . 2 5 0 0 6 5 3 2 / . 1 4 4 3 3 / 2 / 2 0 / 3 0 3 1 1 - 1 1 5 3 0 1 6 5 3 0 - 0 2 3 5 2 1 5 2 / , 0 - 3 4 5 1 / . 2 2 0 . 0 / + * 2 / - , + + - * % ( ' ' ( ( * ' & % % # " # " & $ # % $ % $ ( ' & & . , . - ( ' + * * + + & * + , * + ) ) + , . + + - + . + , ) * * , ) , , - ( & * - # % ) / ( - + . ( ) . * + - ) ( ' , 1 % / - ) + + + * & ' & ( % !  " $ % * & & * ) $ % ( ( ( ( & & % $ $ ' ( ( ' % ' ( ) ' ) ( ) ' ) ) & $ " % & $ # " ' * $ ( ) * * ( ) ) , & ) & + ) ( ' ( ' & ( # ' ) & ( ' $ & * , ) & ( " ) . * & % $ % ) , ( * ' " ( * ' ( + % % $ ( ( ( + $ & ' % * ( * ( % ( ' ' ) + ( & % # * ( ' ' + ) * ) ' 0 & * ' # + & & ( $ ! # # % % ( ' ( ' % ' ' ' ' # ! # ( ( & " % " $ ( ) % !   " # 
+ # " & % $ $ # % " $ ) % ' ) ( ) ! # ( ( ! &   $ * & # & $ # ' ) * ' # " & $ $ % ) & & " $ * & $ ! % ! # " " & ) $ & + & # & % $ # $ # ' ' $ & $ $ ' % ' ) $ $ ' & $ "   !  ! 
+                                                                           
+                 
+                                                                                              
+  
+   $ % ' - - 0 - 4 6 < ; 8 = < ; > : @ ? A C C B ; @ E B > A A G < A G E L J G N H F D K R S S M P M P M O U M L O S P Q T K N P Q P Q R Q U Q O L F E O Q S J G J R L G O Q R M M I I T N P P J S T X R Q U T S P G I M O M M P R O R P O P P S Q S W S \ U U Z U L R Y W O O U W N N K K L G Q Q R V S V I Q S P Y R M K B F G C ? B G F = A > @ ? @ A A @ ? ; ; : A > ? = ; < ; ; > < > 8 1 6 2 3 5 6 - . . * * , , ' * + ( ( ) ) # ( ' ( + ) & % " & ' " ' $ % # % & # $ ! " %   
+ ! !  " " 
+   
+    
+  $ !    " ! "   !   
+      %    ! ! ! # ! " % % & + $ * - - / . - 1 3 4 2 4 5 6 7 ; 7 1 3 : 4 8 6 5 7 7 3 7 5 4 6 7 4 6 3 5 8 4 : 7 4 9 9 8 7 5 0 5 5 5 9 8 / 4 2 6 8 5 0 : 0 9 6 1 8 6 ; 8 2 3 3 0 2 2 3 4 1 2 0 / 0 4 1 / - 0 5 1 2 - 3 1 2 6 . / 3 8 5 5 / . 3 5 5 2 . 1 4 5 / 0 2 . 1 5 1 / 2 3 0 / . . 2 + * * + , + + * ( * ) ( ) ' ) % ( & ) %   " $ ! $ # # % % # ' ( , 0 . ) ) + - / 3 - & ) * . ( ' ( % + , + ) / / 1 - - - , ( ( . - * ) ) 1 0 - / + ' * ) ) - ' * ( , + , ) * * & ( + , * . 4 - , - % + - * ) ( ) ( ( * ) ) $ # $ ( ' " $ ( # % % % # & ' & % # & ' # % ( ) ( ( ) % * + % ) $ ( ) ) ( ' % $ ( $ " %  ( % % , + * ' % * ( ( ( * ' ' ( ) + , ) # $ $ ( & ) & * ( ' * ) & * - # ' ' ' ( ' # ' ( ) + % ( & % ) $ ) ( % ) ( ) ) , ( % ) ' & , ( ) + ( ( * / - ) + ) ' ' ' ' * ) , ) ' ( % ( $ ! ' ' ( # % ( % $ ( $ $ & # % ' ( % ( + % ' & # $ $ % ' # & " # $ " % $ % # $ # # ! $ & ' # # % ! " # ( $ ' ' ' % ! % ) ) $ & $ # ' & & ' * # ( ) % ' ' ' ' ' ( ( $ % % ( & ' ( % $ $ $ % $ % & ' ) " ' * + ( $ $ % # $ $ # $ % # ' ) & % " # # % % " 
+ $ #  
+                                                                                                                                                                                            
+    " ( ' + ) + 4 7 6 = 9 8 : 7 < < = = > = F G C A > D G C = B @ A E J K J O L K F E J K L T P P P P P J J P V R O V R P R O O L N L Q M N V S L J Q F L M L H E I R N O Z P L S O N R O N M S N L S T U O M J O N V L W U L M Q O N Q Q L W Q T T V T Z [ W U [ Q K N V M N Q P N Q S Q O H I M M P U M M I P T N M M G H E E F B A @ C A @ ? F < > < > G D E < @ = ; 8 A 9 A > < : < 8 8 : 0 / 1 . / , . , - ) . / * , ) % + + ( ( $ % ' ' % % " ! # ' & ( & $ " ! " $ #   # # "  ! & ! !   ! 
+  ! !  
+ " #  "      ! 
+ ! ! " #     % !  
+   " " % ( ' ' % ( . , . / + , ) . 3 6 4 3 > ? = 8 3 3 9 6 3 1 5 6 6 7 4 4 2 1 6 4 9 9 4 : 5 7 4 8 : 8 = 8 7 3 8 : 5 5 1 2 6 2 4 1 0 5 5 4 6 6 0 2 / 5 4 4 5 3 2 3 - 3 / . 6 9 4 3 3 . 3 5 1 7 6 0 2 7 7 / 2 / . 0 1 . 0 1 0 1 1 3 3 1 1 0 . / 0 4 / . 1 . 0 2 7 / / - 0 - / - ' * & ) ) $ + ( , ' # # ' ' % $ # ( " % % # % ! % ' * + + / 3 - / ( + . - ) + - ) & + , + * ) ) ( - ) * - / 3 / 1 2 . , ) , + ( - . 1 / , ( ) ) & + ( * * + + * . ) ) ' * ) + ( ) ) . / + - ) * ( . - ) ( ' ) % ( ' * ) ( & ( ) % & % ! ' & " ' ' # % # " ! $ " ( ) ' ' ( * ) & & ) * & ' ( ) ) ) + ( * ' $ & $ + * ) ' ' ( ) , * ' ( & ( ( % ( ' * + ( & (  $ ' ( ( * ' + - ' & ) * % $ ) ( ) $ $ $ ) . ) ' " + , ) * & ' ( ( % ' ) ' # % ) # & % ( + ) ' ) , + ) ' ( & & ( , & % ) ' ( ( & ' % % & & % ) % ( ( # # % % # & ) $ # % % + ( & % ' ( # % $ % & % % & # $ # $ % & ' ' & # " % & &   $ # ! $ $ & % $ $ & & " ) ( $ ! " $ ' ) & ' % " ' * * ' " % ' ' & $ ' ' & ( ( ' & # ' * ) % #   & ' % ! * . ( ' " # & & $ # " " "   " ' & " " $ ! ! # " # $ $ 
+ 
+ 
+                                                                                                                                                                                            
+ " ! % * ( ( , . 3 2 : ; 6 7 7 ; D D A E @ < C A ? ? A A ? D C C E D C C F H J P P I N Q L O O R K K K L K I J P L Q S N K J M I I E J Q N R Q M O M M N N J O L L K H R R N N H N K R P S S R S O N P R L O L Q Q P P X T T M P R N Q Q O O R S M N S Q M R W S M H K S Q R V O S V W W T N Q Q S O P N Q O O N K G K J E H G E B B A A ; ; > > < ? > < A A ? > @ @ ; < < 9 : > = 8 7 3 2 . 5 1 3 + % ' & , % ( ( ) + * $ ' & $ , ) # $ $ # & #   ! # ! " ! ! " 
+ " !  ! $ $     ! #   !   
+ 
+ ! ! 
+ "  ! " ! 
+    !  
+ 
+ 
+ 
+       ! !   ! 
+ ! ! % & ' ( ) % & ' ( ) ( ( ' , 0 . 1 0 5 8 2 0 - 0 4 7 4 6 5 2 5 4 4 3 1 6 4 6 8 4 1 8 9 7 2 3 5 6 6 : 7 3 3 7 5 - 4 5 4 3 5 4 0 6 7 2 4 5 5 2 1 5 6 6 3 1 2 3 2 2 / 0 2 2 2 4 . + . 0 7 3 / 0 2 1 4 2 3 1 0 2 . - - , . 6 / , . 3 1 1 3 / 0 / 3 0 + - , 1 4 / - + ( ) ( & ' , + + ' ( * * & $ ! ! ' ) # $ ! # % # $ $   ! $ % ( * 1 . , / , + ) - ' " ( ' ' * ' ) ' ) ( ) % / / + 3 * , - . / - 0 + ) ( * , , / / - ) ) ' ' ) ) ' ' - ' % ' ' + . + ) * , + + ' $ % ( % * + + ) * , + , & ' * , ( ) ) ) ) ' $ ( $ & % % # % ! " " % % ( % * * & ' * * & ' % ) , ' % ' & ' ( ' # ' % & $ & % % % % ' ) ) ' & & ( * * ) ) + ) ( + * ' ' # % % & % ( ( & * . ) ( ' # # & ) ' ) ' % + - ' ' $ ) ) ' ( & % * # ' & ( % ' ( * # $ " $ ' ' ( ( # ' * * , & $ % + & % ) % ' * ( ( ' & % ( $ ( * ( ) ( ! + ( " & $ # ' ' ) ( * % * ( $   # ! & ( & % ' & ( ( % ( - & " # # " % # % # $ & ' # # $ ! # ( " " ) + % $ $ % ( % ' # % ) % ( % ' $   $ $ $ ' ' ' ' % & % $ ' & ' ( ' $ $ ! ( + % ! ) ) % $ $ ' # ' ' " !   " ( # $ & # ! ! %   ! !   # $ ! 
+ 
+                                                                                                                                                                                            
+   " ) % ) . + , 2 5 ; 9 > > : > H H B A A = = > < D C A G J K E E A A I J P I P I E H O O K S M K L I N O N K O P U E K I L J I F I M R P I Q N I I K U N O Q J I I I S O M J J P J Q Q P M Q N P O O S O P I M O R U O N P N U Q I H N M Q W M N R R N M R O R U K L Q N P Q O L O V V L K T T Y S O N K H M K F B I J L F ? D @ @ < B < 5 9 9 9 9 : ; @ 9 9 7 ? ? ; ; 7 < 6 7 3 1 - / - , + , + % $ ' ' & ( # & ( * % # % $ ! #   # # $ # % " # " " # !    # $ " ! !   # $ $  !     " !   
+  
+    "   
+ 
+ 
+   # 
+   
+   
+ 
+ 
+ 
+ " "   
+ " ! " % ' ( ) ( % % & % % & ' ' - ) ( ' * / - . ( - 0 1 6 1 6 4 0 / 0 3 4 4 4 5 3 8 0 1 6 6 9 2 1 8 5 9 4 3 . 2 2 / 1 2 - . 2 0 ) . 1 6 4 / . . 3 1 2 3 3 2 5 / 6 3 / / 1 2 1 2 3 , - ) - 2 3 1 + , 1 - 1 / 2 / - 0 1 1 , 3 3 + , + / / , , / - 0 . . . 1 0 0 / . * ' ' ) ( * + * ' $ & $ & " $ 
+ & $  ' $ 
+ ! ! $ % ( * $ & ( & $ & - + , / * + , / * & ' & ( , & ) " ) + ( ) - , - + + ) - + * * , , - * * , 0 6 0 / - * ' ) + ' ( % ' ( . ( * * , ) , + & ) ) ( # * * & ' + % * - & . ( ) ' & ) ' & ) * % ) ' 0 , ' $ % " # "  ! % ( ' % % ' ( ( ( ' $ ( % ' * ' ' ) % ( % ( $ $ % % # " & # & $  ' + ' " & & ) ( % $ * , ' $ ) ) ( ( ' # 
+ ! $ ( $ , % # & # # # $ ' ' + " $ ' , ' ( $ & # % ' # ) & ) & % $ % ' ) ( # " # # $ $ & $   " ) ) * * & * ) * ) ( % % ) ' % ( ( $ # % ' $ & % (   # # ! ' $ $ & % % ) $ $ ( ! '  "   ! % ( % & ) , ' $ ' ( % & " ! # ! " $ & % "   
+ % $ # ' $   
+ " # ! ' $ $ ' $ # $ ' + * ' " $ % $ " ! $ !  $ " ' - ' * ' % ' % ( ) % # $ & ) # % % $ # ' & % " " & & " # & ( ) % # $ " # " # #     !  
+                  
+                                                                                                                                                                            
+ ! % $ ) ( + , 0 6 9 ? = < ; @ = A K F E A > = A G G @ C D F E A E A I J J L F G G E N R O R Q P O I M I M L R L S J J I H G L O J D G E J O L M J K T M S R L G E S P S Q M P R O T Q K U O M I J O V O P K O \ Q M O Q Q Q P R U K N U Q U O R P J N M S L L U O L N Q S W U N O R O Q V S P U S Q L H K J E E A E J G C A = ? D E < ; ; ; : B 8 : 9 < < ; = < ; 8 ; 8 6 . . , 2 ) , ( - - ) & % % # $ ! # # $ $ * " " $ ) '  ! " ! # " #   
+ ! ! " " " % ! 
+ 
+ 
+ 
+ 
+ "    # " #   
+ # ! " !   
+   ! 
+ 
+ 
+ 
+     ! " 
+   
+  
+ 
+   " # $  # " & & # % # $ " " ! # $ ) $ + * , * * , ) % * * ) , * 0 2 3 2 3 / 5 3 8 7 2 . 4 4 4 2 3 5 0 / 7 7 1 4 8 5 2 . 4 4 3 / 1 2 4 2 1 / - 1 6 0 , 7 2 0 / 3 3 2 2 / 4 - 3 3 0 / - . 3 / - 0 , , / 0 1 - * - - - , 0 + + . , - 1 3 - , 1 . - - / 0 0 , ' & 0 . 0 - , ' ' ' ) ) " * ( ) ( % ' % ' ! ! # " & ! # ( $ $ ! ! " & * % * & ' & ' + ' * ) ) + , * ' % ' - ( ( ' * % ( * ) * - , ) + - ' & * + . 0 . ) ) * , - , , ) ' ( ) ' ) * ) * + ( * , ( * , & ( # ) % ) ' $ % % $ ( ) ) ( ( ( & $ % ' % ' ' # ( ( & ( $ ) - % # ' ' & $ 
+  # & ' ! ! ( ) , + ' ' & % ' $ " % ' * ' " & ( ( ( % $   " # ( ' ! " % ' ( & # # % # ! % % % % $ # ) $ $ # % " $ ( ' & % " # % $ % ' & ( # % # % ' #   ' $ #   ! # % # & % # " # ( ( ( % $ + + % % & ! 
+ % ( # % " $ & & % % % " " % % & #  % ' $ ! $ $ ( % $     $ $ " " & $ % ( % # ' ' & & #   " & " " " % ) ) ' # # $ % % % # #   ! $ % !   % " % ' & % # ! % # $ % & % #   $ ' ' ( $ $ " # $ ( # " !   " !   $ % $ ) $ # # # " ) $ & $ $ $ # ' ' # ! ) ( $ $ ( & ! ! " # ' ' ( ( % $ ( $ $ " !     
+  
+                  
+                
+     
+        
+      
+                         
+ 
+                                                                                                               " % & ' + - - 1 0 1 7 ; ; @ A A > D B ? B = < C E G A @ B E > @ A @ I B D E I M K N N R M V N O L H K L J J I I K O K J I D F J I I H I K G J L O J K J K O K I A M H K R L T Q L X U O U M K J K O T J I J J S R N K K K O P M S N R O I S P L K G K L V R S N J J N N R P N T P O J L P O M N M G F E J I G E A E G B : < > ; < @ B < : B A < : = < 9 8 7 5 A 9 7 9 5 , + + ) * - ( ) + - & & # & $ # ' % #   " # $ " % $ "  
+ " 
+ " " # 
+    
+ 
+   ! ! ! 
+ 
+ 
+ 
+ 
+    
+ 
+    
+    
+     #   
+  
+ 
+   % !   ! 
+   
+ 
+ 
+ ! (     ! ! ( # " $ # " 
+ ! ! # % ! & ) ) ( , * * & % - * ) ( ( , , 0 . , 1 1 6 6 1 , 1 1 / 4 / 2 0 / 2 0 3 3 0 3 / . 0 3 / 3 5 1 ; 5 1 1 0 - . 1 1 2 / - 0 0 . 2 : 4 0 0 0 1 0 0 / 4 1 . + 0 , / 1 2 0 , , * + . . 0 * / + - , 1 0 - * , . / - 1 2 / ) & $ * / , * % ( ( ' & # # * " $ $ ! & ! " " ! "   "     " " & % & + ( & ) * & * % ( % & ) & * + & ( * ) ' * ) $ % + % % $ & ( ( + * ( . ) & * + ) ( * ( ( , ( * ( * ' ) & & ( , * + + * ' * - ) , ( & ! $ ( $ & & ) ) # $ ) ' ) ( ' ) %   # % & % " $ # $ & % $ % ' % & ( # % $ #  $ # % $ " # ( + * ( # # " % $ #    & $  $ % ) # " # # ) & ! $ # ! ( ! % ' & ' $ " ! " % # " " & % # $ # # ! % ' & % $ # $   # " $ ' # # # $ # # $ # # # &   # # " # " $   % ! $ & $  # ' " & "    # ) & # # # $ " & % % $  % " # & " # % & ( # % " # $     & # % %  " " $ ( ( $ % & # # ! "  ! ! & ! " ! $ #   $ " $   % % % " " ! 
+ 
+   %   % $ ! " "   $ $ ' ) # % % ( % ( $ ! # # ' ' # & 
+ $ " $ % ! " ! %   " # ! & & ! " $ & $   " ! % #  ! ( ) ' # % %  $ $ # $ & ) $ $ & # " ! " $ ! ! 
+                                                                  
+                            
+                                                                                                
+   " # * ' - - / / 1 1 9 B 8 < A > @ ? D @ ? A = > A G ? B H A A F E D E E > A B E F O O S S R N O S K L K K K M Q M G D H H I J D J F H G H G J M L C N L I G J E G E K Q L I Q L L Q M Q P G K N H I O L I M P M K N K I I Q Q O S V K M L M R P I I J O R T P O O K I M S P N T O L O P P L K D J M F F C @ H B A = A = < : 9 > = > A 8 = = A < 9 6 8 8 = > : = 7 1 . + ) % ' , $ ' % ! # $ ( " ! & & $ !     " "      " " 
+   # !  " " # 
+ 
+  
+ 
+ # "    " 
+ 
+ 
+   
+ 
+  
+ 
+  
+ 
+   
+ 
+ ! " # "    
+ 
+ ! !  
+    ! 
+ 
+ 
+   
+  ! ! $    
+ $ " " ! " "  !     # % % % & ' ' $ * & &   # % ( + ' , * ' . 0 / . 1 3 2 / , 0 - + 3 3 2 3 - + * 1 2 4 - 2 7 2 3 0 3 1 / / 1 / 2 1 2 3 3 . 0 2 3 3 1 0 - / 2 0 3 . 0 3 1 . / / 1 0 / * 1 + + / - 1 0 / - + ) , / , , , , + * + 0 , * & * ( + ) ( % % ' % ' ( % $ # # # ! $ ! "  
+    
+ !     $ & % & ' ' $ ) ' ) ) $ ( ) ) + & ( * $ ' ) ) & ( & ) $ ( ' & ' ( ) ( * & $ * ' & ' ( $ ' ) ( * - * ) ) & ) * ( ( & & * + + + & + , ( ' % * $ ' % $ & % ' ) % # ' * % * % & ' ! # " ' # "   ' # # $ " ( ) ) # "   $ # & #     % & % & % * ' ( # % % & ' $ # $ " #  " # ' $ ' ( ' ( ' # ! %   #   # $ " $ ! # ! 
+ % " ! % $ # " $ " " 
+ ) & ! % % "     " & # % # % " !  $ $ " # % ( $ ! ' # 
+ $ " ! "   % ! 
+ " ! 
+ "   $ & " ( # ! " ' # ! "   $   $ $ "   #  !   " ' #    " $ !  # ! & $  
+ 
+ # & % " " " # # ! 
+ & " $ %   " # # % #   #   
+ "   !  " !     #  ! ! ! % & $ & ' & ( " # $ ' % % ) $ % ' % % # # " # " & " $ "  ! " " $ !   # # # % $ " " $ !     " # % %   
+ %     ! $   " ! ! $ " % #   '   ! 
+ ! 
+                                                    
+                           
+              
+                              
+                                                                  
+ 
+ ! & $ + ) , / 5 4 6 8 8 < : = ? ; @ ; > B @ B C A C @ @ @ ? > A F J G D E A C K N I J O P S M Q P K K M K J J J S M C G M P K E G H I H L L O K J I J N M G H H L J H H N K N L M L M N I O L J K I O L L L L L J M H J Q N Q Q L J J H J G N L J M I J K L O L M K K K M O H P Q M L I L L H F K I C G ? B A B A 9 @ < @ 9 7 : @ 9 9 9 6 : = 8 8 : 8 8 7 6 2 1 - - , , % % ( ( " % % $ $ " " 
+ " # % # !    
+   !   ! " 
+ 
+ 
+ 
+ ! 
+ 
+ 
+   
+ 
+ 
+        
+   
+ 
+  
+ 
+ 
+   
+  
+ 
+ 
+ #    
+ 
+ 
+ 
+ 
+  !  ! ! !     
+  
+   
+ !    
+      "   
+ 
+  " " " "  #   
+   
+ #   $ % ' & # " " !  % ' $ ' $ % * % & * * & - - 2 1 2 - 3 - 0 0 1 0 * , - 0 0 - 2 . . 2 0 0 / / / 1 . , 1 + - 0 1 2 4 5 3 1 / / 0 0 / 0 2 0 + . 0 / 1 2 2 + - 2 , - , ) 3 . / * - ( , . , , , + ) - / ) + ( , ) % ) + ' & % $ $ $ # # + # $ ! "     
+        
+   % % & ' & ( $ # ( & ' ) % * ) % ( ) ' ) ( ) ' $ ' " ! % " ' ' % & ) % " ' ' ' % % , - * * ( & & & * ) ( ) % ( ( ' + ) + . ( & ' , ( * ( & ) & & # # ( ' $ & ' $ $ % ( ' ' ) $ " ! $ # " $ $ & $ " & " % ) ( " % ' % $ # $ % % # !   # & $ % ' % $ $ % % $ ! ! "     # " " # % ) " $ " ) # # % ! #   ! " % " % % " $ $ ' $ !   $ " % ! $ !   % ( $ # # '       !  # 
+ #     ! !  $ $ % % # # % & ( ! ' # % " " # ! # % $ "   " $ # # ! " 
+   % $ 
+   ! !   %   
+ ! ! ! " " ! " "    # # #   
+    & ! "  " " ! $ # % % $   
+ $ ( & $ " ! $ & # ' # ' # !   "   
+  ! ! 
+   "   # "   $ % % ) ( # $ & & $ $ & $ % ! $ ! ! #   " " $ " ' # # # ! #   $ $ # !   & ( $ ! " % # % " " # ' ! # ! 
+  # 
+ 
+ " $   " $   "  ! "    $ %   
+ 
+                            
+      
+                 
+                       
+          
+        
+                                                                                                  
+  & % + + , . 0 2 8 5 7 < < @ > = E ; 9 B < E C C B B ? C B ? A D B A B I I C G M F I G M O K L F M U N P N N R Q P G I M N F C G G E K D I T I G J H I K G L L J N N I D J K N G J I M G L N L J L I L S J J H J J J M T M L I H I G K M J H L O O K I K P O J M Q L P L O M F K O Q G N I G H K L F C M H B C A > 8 > : ; 8 : < ? ; 9 : ? 8 8 8 9 : : 4 3 0 - * $ ( ) " $ % ' ) & # $ ( # " " ! $ " ! & $     
+ 
+  
+ " 
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   
+  
+    $ 
+ 
+   
+   
+ 
+ $ " 
+ 
+   
+ 
+  
+  $  " #        ! 
+ 
+  
+   
+ 
+ 
+ 
+  
+   
+ "  
+   #   
+ 
+ # # 
+ 
+  
+ ! " $ !    
+ # #   # & & * " % $ % $ $ & # ( * ( , 2 / 3 - 0 . 6 0 + - - 1 1 . . ) * , 2 + , , 0 , / . + & - / 0 / / 0 5 2 . + ' / 1 2 1 - + * ( - . 6 + ( * 0 0 - * , - * 0 ) / 1 - 0 - ) * + , - , ( ' % % ' $ & * + ( " " # " ! " % " # 
+   % $   ! 
+ 
+     $ % % ' ) # # & & # % ' * ) ) ( & ' ) ) & + * ) - ' %   % & $ " $ $   & & # ( & ) % % % & ( ) , ) * ( $ * + / + + * & ) ' ( ' ) % $ $ % % + * $ # " $ $ #   # $ $ #   ' $ # $ # $ !   ( % " % & " # ( % $  # $ ! % # $ ! & % ( $       " ' ' # $ % $ " 
+ # #   # " # " ' " # ' ' ( # # % % " $ ! # $ 
+ "   ! $ $    ! # & " & #  " # ! $ " # !     ! 
+ !  !  # " 
+ $   !     # ! " $ # ! $     !     $ ! "     !   # ! ! "  % % 
+ !   ! !   ' # ! !  ! $ $ "    ! 
+ & " # " ! 
+   % $ " $  # # !   
+ ! !   # ! $  # ! 
+   $ % # # ! !  " $ ! $ $  % $    
+ ! $ "   " " % #  % & % $ $ & $ ! % $ ' % " " # " # ' ( ! " $ % " % # # % # "  " ! " " " " $ % ! # # $ % & ! # !   # !   "   ! " " # % $ " ! $   !   " ! % ' 
+                        
+                    
+                            
+     
+   
+              
+ 
+                                                                                                  "   % % - + / / . 1 5 5 : 9 > = = ? C 7 7 @ @ C @ @ 9 B C ? B ? @ < : ? F B D B F P C I J O K H I J M Q S O N I P I M J M J F B E E L M D @ I T K I I J J F K K N N O M H @ I F G L J Q J D P K L J K K O M H M I I I F F Q F G K G J G I K M H J L N J P Q N R L L L J I R Q K L M N L I K H O H H @ @ B E ? B B D B : ; = : : ; B @ ? < ; : 6 8 < 8 < 5 2 * ) + ' $ & & % # # $ ! # $  $ % # ! #   $ ! " !   
+    
+ 
+ 
+   
+      " "  
+    ! 
+ 
+  
+ 
+   
+  
+ 
+ "    " 
+ 
+    
+ ! ! 
+  #   
+     & % 
+ ! 
+ 
+  
+  
+  " 
+ 
+ 
+   
+ 
+    
+ 
+  
+ 
+   
+    " 
+ 
+  
+ 
+ 
+ ! 
+     " !  ! # ! " ! # % '   $ & % ) ( & & ) ) - / - 0 1 / . 1 - 2 1 . + ) ) * / 0 / - / ( , / - - . - / * * - ) . + + + - 0 * . , / ) * / . - . + ) * + , , ' ' * * * , 1 / ) - ) & + - - ' # % % "   " $ & * %   " $   !   " "  
+ 
+ #   
+   
+ 
+   % % & # * ' & ( % ( % * ( ( $ ) + * ' % & ' & ' % ' $ % & " " # # $ % ' $ ' % $ & ) % ' $ % $ ' , , ) $ ( ( % ( ) ( % % $ # % & ) % & # $ " % $ !   ! $ $ $ " # $  #  " " $ $ $ # ! ' % $ $  # ' $ #   
+ ! "     " % $ ! % " % "   "   
+ 
+ " "   % $     # #   ! % # # $ #     ! "     '   ! # " #    
+ "  " !  
+    #  "   "    
+ "    
+ "  
+ 
+ 
+  
+     "   " #   "   
+ 
+   "   " !    
+   
+ !  
+  !   "  
+ 
+ ! ! !  #   
+   " # % " $    # " "   
+   
+ " ! ! &      $  
+      
+ " # 
+ ! # ! ! !    ! " ! # " "     "   ! # " "   
+ !    
+ 
+   ! !   " $ $ #     % % & % + ( ! "  # % $ # # 
+ # # # 
+ ! # '  # ! & $ $ # ! " " " 
+ ! $ " " ! ! " $  !   # " " $   " #   # #    ! $ ! " # !  $ # " # 
+   
+                      
+ 
+ 
+     
+      
+           
+ 
+      
+   
+                
+         
+ 
+ 
+     
+  
+   
+         
+                           
+                                                            
+ 
+  ! % ) ' + ) - 4 1 7 7 9 : ; @ > : ? ? 8 > C = > : C A > < < @ @ = > I D L F J I F F G L E K H B I M L N I H M H J B H H K K M J I I D C G N E D H J H D M H L I C A D I G D @ G M I J J J I O M N I S P P G E F L E I L G I G N K I M I I I K H N E F H F V H G I M L V R O Q P I H I O J P I ? E B D B > @ > ; @ < ; ; : 9 = @ D > = 9 9 7 5 4 . 1 / - * ' ' ( ! # % ' ! % #   ! ! # " ! 
+ 
+ #  "  ! 
+  
+ ! 
+ 
+    
+ " 
+ 
+ !   
+ ! 
+     
+ "    
+ 
+  
+    " "  
+ !  
+ 
+     " 
+ 
+     " " #    
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+     
+ 
+  
+   
+ 
+ 
+   
+  
+ 
+ 
+  
+  # $ $ " # $ " " $ $       $ $ " & % " & $ ( * ( * ) 1 / , * 0 1 . 1 / - , - 0 2 + / ( + / - . / , 1 + , 3 - / . ) + , . , , 0 + . * ) - , . , ) , * ) - * ( ' & + . - ( ' ' % ( ' ' ( & & ( #  " $ " # # & !   # 
+ 
+  ! 
+ 
+ 
+ 
+ $  
+  
+  ! & & # $ & $ % & $ # ' % $ % & $ * # ) % # $ & ' & % $ ! % % ) " $ " " & $ % ) ' ' ( & % ! %   % ( ' $ # # ( & $ ( ' ! " # + ( $ * ( ' $ % " % $  # ' % (     # # ! $ ' ! % # % " ! $ ' ) #   ! " ! " " ! ! " 
+   ! $ # " # " ! " " 
+    
+ 
+   # "     
+   " #    " % 
+  % $ " !   # $ 
+ " $   $     ! #  " 
+  !     
+ 
+  
+ 
+       ! ! 
+  
+ 
+  
+ 
+ 
+     
+  ! 
+ 
+  # 
+   
+  
+ 
+   
+ !   # 
+   
+ 
+ "  
+ 
+ "   $ 
+  !   ! 
+ 
+ !    "   
+   " " # "   
+  
+    
+      # 
+ 
+ " $  
+ 
+ 
+  
+     " " !   
+  
+ 
+       
+ 
+   
+  & # ! ! 
+          
+  !  
+ !   ! 
+   " ! $ $ $ " ' % % " $  ! ( ! & " !  $ "   %     #    " % # % " " # !   "         # "       # & ! 
+ ! & $     
+     $  
+ # " " 
+ ! 
+  ! #  
+     
+    
+        
+ 
+ 
+   
+  
+         
+ 
+      
+       
+      
+      
+      
+     
+ 
+ 
+ 
+   
+     
+     
+       
+                                                                                                
+  ! # & ( ) - , - 8 7 : 9 ; @ 7 < > = ? B = > E B @ G D > > E C D C G A K I P P D F I O L I L M J I P K L M J F K P K E D L L M F H I F ? C G J N M M D C D J D I C @ @ H I H H G H N H J M L O N L O D M R N I L G G K C F J K I J I I J J I D I I G B D M Q O F L K Q N J L L K K J K N M G I G D E I D A ? @ < 9 9 7 = > ; = ; @ B A ? 6 6 4 3 1 - , + , * % ' $ ! ' ( & % "   ! !   ! !     
+ 
+ 
+  
+ !    
+ ! $ 
+ ! 
+ 
+  " ! 
+   % ! 
+         
+ 
+ 
+     
+ ! " "  #    !    
+    ! !     !     "     
+    " ! 
+     
+ 
+  
+ 
+ 
+ 
+ ! 
+  
+ 
+   
+ 
+   
+ 
+ 
+   
+ 
+     
+    "   
+   ! !   
+   % ! ! " # # ( ( * & ) * * ( ( - ( ( * + + + . 1 / 0 - , , + - ( ( - / - 4 2 / * 0 0 0 - + ' 0 1 ) , . . 1 0 , , ( , * * . , ) ' / - ( # ' ) + % & ( ' & " " $ $ $ ) # ! 
+ ! " # " 
+    "   
+    
+   ! # ! " ) ( ' & $ ( & ' * ' # $ % & ( & & # " $ ' * - ( & $ & % " % $   # & & $ " #   " & $ % * * # ' ' " % # $ ' ' % % # % % ' ) * % " $ ) ( ) - * ( ) ) ( & " !   $ % $ ! # # % % $ ' $ & !    # " ! # ) %     ! " $   % " ! " & &   "   # # # " 
+  
+    ! $ ! ! "       
+      # 
+ !   # & "   
+ ! !  " !    !   %   
+   #     
+    
+ 
+     " " $ # 
+ " ! !    ! 
+  
+   
+    
+ " ! 
+ 
+    ! $ " ! !   " 
+ 
+ %   
+ 
+   " 
+   
+ "  
+ 
+  
+ !   "      $       ! 
+ 
+ 
+ 
+ 
+ ! &  
+ !   
+  # " "  
+  " # " % "     !       
+ 
+ 
+ ! # !   #   
+    
+ "   !    !    % ! " $ $ % ' "  " % " $ % # 
+ $ ! ! ! !   " $  "  
+ 
+ # $ $  ! #   
+     
+ $ " 
+ 
+ 
+ 
+ 
+ ! ! " " # "  !       
+ # " $ % " ! " ! #   " "       
+    
+              
+               
+ 
+              
+ 
+     
+      
+   
+ 
+          
+  
+                 
+                                                                                                
+   # # " ' ( ( , 1 4 1 3 7 9 > < = < ? B B @ C D @ D H J D ? C E I E C C J E J J M I O Q U D D C F O L O I P K K I J K E F H J L H P H G F E B E O O I H F N J F D I H A G E F I O I M L N N K O R I E G H O J J R G G I I F K J G H I K K H H H M F K O K P L H E K M L K F G M J J L I I G H F A B C E D E I J @ > < < = : B ; = 9 8 ; 4 5 3 0 1 / + ' ) ) ( $ $ $ $   % ' " ! #   "  # % 
+  
+ 
+   
+   
+   
+  ! # ! " #      
+   %   
+ 
+ #   !   ! 
+     # # &   % !  " "   
+ ! #  ! !  
+    $ % $ 
+ %   
+  
+      
+     
+ 
+  
+  !  ! 
+     
+      
+   
+ 
+ 
+ 
+ 
+      
+ 
+   !  ! " $   "    $ 
+  & ( % % % ' # & # % ' / ' * & % ' * . . , - - ) - 3 0 + ) , / , 1 , + - & - - / * * - ( ) + , 0 / - ) ) * , ( ) - 1 , % - + ' & & % % - & % # ! ! # !  $ % " !      % %     
+ 
+ ! 
+     
+   
+ ! % ' ( ' ) ' ( + ) & ( ) & & # + % % # $ ! $ % ) ' + $ $ % & ) $ ' # " & ) ' & % & % ! # $ " $ $ 
+ # % % $ ) % & ( ' $ $ $ & $ % ' % % & ' ( ' % % $ # $ $ ( # " ! # $ % ' # & % " $ # % # # $ $  " % $ # $   # "   # " $   ! #   $ ' $ # # #   # ! ! ! " ! 
+ "  !   # ! "  
+ # !       ! ! " $     
+ $ !  " "   ! 
+ !   
+      
+     ! 
+ 
+  % 
+   $ 
+   
+   % 
+ 
+    " " 
+ " " #     # !    # 
+    
+ $     
+  ! 
+   
+   ! !   # ! 
+ "  
+ 
+ ! 
+ 
+     
+  
+  
+ 
+ $ $  
+  
+ 
+  ! ! 
+ 
+  
+ 
+    
+   
+ 
+  
+ 
+ ! ! #  ! ! ! "      
+ 
+ 
+  
+ 
+  ! 
+ 
+ !      # ! !     ! ! 
+ 
+   % $ $ '   ! %   ! # " & # # #   " $ " # !     $ 
+ $ "   % 
+ " # ! % " " "   
+     
+ 
+    ! " "  " ! ! # # " " # #  
+ # " # $ & " #    
+                   
+    
+                                   
+   
+                    
+                                                                                                             
+ # $ ' " + ' * + 5 3 6 < > ; @ 9 @ ; = C > D @ : ; > B @ D > D E E F J E B F M P P Q O T Q J L F F I N J C Q M L E G J J G H D K K M I G N O P M K J G E M Q L I F J G C F G E M M G L F M I O R T O E I L K L K O P O H C J K L G M K I K K L J L N M O J I D H C J N Q L F I N K J N Q N K I E E B C K C H G C 9 : : : ? 9 < : @ 8 : 8 : 2 / 0 2 - ) ) , % % $ ' " " #   ! " !    !  ! 
+ #   
+      " !     !    !   ! 
+ 
+ 
+ 
+   
+ $   
+ ! !    " ! # "   ! $ ! & % % % # # ! " !          !   " $ % ! % $   
+ 
+ 
+     !  
+   
+ 
+ 
+  
+     !  
+ 
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+ 
+  
+  
+ ! 
+ 
+ 
+ 
+  
+ " ! "   $ % # # ! ! 
+  " ' % " ' % " & & $ # & ) $ " & . - ( , + * ' * 0 . - * * . , 0 , . , * + . + * * + $ ( . & ( 1 - + ( , ' ( - , . ' # # % ' ' & % $ ) ' %  
+ " $   # ! #         % $ 
+    
+ 
+ "    
+ 
+ # # $ % ' - * ' ' & + ( ( % ) ) & + & $ ( ' ) $ % % ( * + $ % ' % % ! ' # % ' ' * % # * * & $ & # % $ " $ % % $ % ( & # $ ! $ $ ) # % ' " % & $ % ( % $ " % & ' $ " % " $ ' $ ) ' % ( $ & $ % # # $ % " % % " % $ " ! # $ $ #    " ! ! ' # $ %  # $ & ! 
+ % % ! !  
+ 
+  ! % %   # '   %  "     ! "   " ! # ! #  
+   
+ # $ # 
+   
+ 
+  # " 
+   " $  ! % ! " "  "  
+  $ " ' %  
+ $   
+ ! " $ ! $ ! !   
+ " # 
+  
+  ! ! 
+ !  ! ! # !  
+   
+ 
+        
+ ! 
+ 
+     
+  
+ 
+     
+  " !  
+ 
+  
+ 
+   
+  
+   ! 
+ 
+  
+  
+ 
+  !  
+    
+ 
+ 
+  
+ 
+ 
+  " ! 
+ 
+  
+       
+ 
+ !   "    " 
+ % " % " $ # !     # !  % " ! % # 
+   
+ # ! " ! " ! " " % # "  "   
+ " # "        $  
+ #   ! ! 
+ # " $ ! $ $ " & $   ! $   !  " ! $ ! 
+ 
+ 
+               
+     
+    
+        
+ 
+                   
+       
+                      
+                                                                                                             
+ " # & & , * / + 4 7 < < < > > @ = 9 > ? = A C C C A = ? A B D > E B J I A E L N Q P N S Q I M F F M J K I I J I L G G H I I J F R J L L U O Q H E K H H N K O D K J D B I H G R M B D I J M K T O O E J N L P P H O N L I P N Q N I O H J L M J E J H K J L I M H K Q V L M I H H H R N K G H I J B A B @ ? A < < 8 > ; 7 = @ = < 7 8 7 3 . . , * * * ' * #   # % " $ ! " ! " % " ! " # !  
+   $ #   
+ !  $ " 
+ !   !          
+ 
+ #  $ " # " %    " $ # & " ! $ $ ( ' % ' & ! # ! ( ( * & & # $ % % & % % ' % # $ & " #    !  " "   
+     
+ 
+        
+ 
+ 
+ !     
+  
+ 
+ 
+ 
+  
+ ! 
+    !  ! ! 
+   ! !   ! 
+ " !  ! " % ( ' % & $ % # ! " % " % & ( + * + & ( ' & * * * * ' * * ( ( * / - ) , + ' ( * + + - ( * ( ( % & $ ' ' ( ' ) ) " ' ( % & $ " $ # # $ ! " $ & $ % $ $   !  # ! % " "  "   "  
+   # ' ' $ % % ( ' * ' $ ( ' ) * ' * ) ( ' ' ( ( ( * % & & $ * * ) ' ( ' ( $ & ' ' " & $ ' % * * * $ $ $ ' % ' ' ! # & $ ' $ # ) % ' & ! ' % & " & ' $ & & # % # # $ % # # % " $ & " ' ' % ' ' & * # $ $ & & ) * ( ' ' ! " % % #     # %   # # %   " % 
+ % % ! #   ' % & $ " 
+ 
+   " # " $ ! # ! ! # # " 
+     
+   $ 
+ 
+   
+   
+ " 
+ ! & %   # $ $ # " # "   $ % 
+   !    ! ! ! " ( & % ! # !    ! " !  # ! ! 
+ !  
+ 
+  $      !   ! $ 
+ ! " ! ! !    
+ 
+ 
+ " 
+ 
+ ! ! " !   ! 
+ 
+ 
+ 
+  
+     
+ 
+ ! "   ! ! 
+ 
+ 
+ 
+    
+ 
+      !  
+   
+   
+ !         
+  ! # ! " ! 
+ ! 
+  
+ 
+ ! " " !        
+  
+ ! " " ! " # $ # $ $ $ "   # ' $ ! ! !   " 
+ ! % $ " # " ! # $    
+  #    "  " % % $ '     "   " # 
+ % ( ' (   # $ # ! ! !  & $ 
+ 
+ ! 
+ 
+                                        
+                  
+ 
+      
+                                                                                                                            
+ " & # % / / + , 1 7 8 5 4 = A ? > = = = @ = B D I B B @ C C E C B D B F E G J P I L F E O R J G G J K G E @ I C H G B L H E G L R P I N O I F C C D B E J I F A I E B A M J I K O M K D O K M H H H H E L O M P N J J G I M M L E L I E D K G K I P I F K K L J I J N O K H L M N K I I I G B F A F C > ? A 9 ; : ; 9 9 ; ; 9 B 8 3 8 0 - - ( ( ) % & % ! # ' & " "   ! "   " !   $ $   "    
+  !   $ # # # $ "   " " ' # 
+ 
+     # ! " " ' & % % " # ' % % ( % ( & ) & ) ( $ $ ) % & , ( & * & % ) ) ( ) * ) * ) " ' & # % # ) " #   
+ # # # !  & ! #  ! " ! ! $   ! 
+   "   #   
+   
+  
+ 
+ 
+ !   #  !   # "  "   ! 
+ $  
+ # $ #       #  " ! # ! ! " $ ) $ ) % & ' ' ( % " ( % # ) ) $ ' ( ' % * ' ) ) ( ' & ' % ( ( ' ) $ # % # & % % $ ! $ # % & $ ! $ $ #  " # ' " ! 
+ " " ! 
+ " " 
+ 
+ " #   # "     $ ' - ( $ ' ( . , ) ( ' $ ) ) % ) & ) * # ( & , ) ' % $ ' ' & * ' " % & " ' $ % + & $ & % ( ) ) % ( ( % + & # % $ ' ' # ' % ' ' ( ( % $ & $ $ ! & ' ( $ & $ $ $ " $ $ # $ % ' # !   $ ) ' ( ) ' ( !    " ! $ $   & # " $ $ & $ # # ! !   " # % 
+  " ' # $  " ( % % %   ! "  ! ! # ! " " ! 
+ 
+ " # #   
+   
+ $ "    !  
+     ! ! ! !    # & ! $ " !    
+ 
+   "   
+ ! ! $ " " ! $ $ # $ ! %    ! ! # ! 
+ " "   
+ 
+          ! 
+  
+ ! " 
+ !     ! ! ! "     ! ! "   $ "  
+ 
+ 
+ 
+ !  
+   "   # " ! !   !     # "    
+  
+ "  ! 
+ " 
+ 
+  
+ !  
+ 
+ 
+ 
+  # " ! # ! " !    ! $ $ ! " !    
+ ' "        ! $ $ # % ' #       ' * " $ $ " #         !       $ & "  ! ! ! !  !   !   $ ! #  " # 
+ $ # ! ! " & !   " ! $ ! " '     $ " "  # !                
+                     
+              
+          
+                              
+  
+                                                                                                      & $ ) , , + / 3 7 8 7 @ B < @ > A > B @ A C B @ A A @ ? D B D F I I A F H K G E H R M L J J J P L H G I F C D O J H J G K I I H H C G L H F E C A D M K G E B P C C D F P G I K K I J K G M M N H D F L J N L I F I J J S I H J J H J G J E H K S L S I M G D I K I G K F K N H L F C K B = B H B ; ? @ A @ ? > 9 7 8 B ? : : 7 4 4 2 , , + % ) % # $   $ & $    ! $ %  " % " # % $ ' &   ! "  ! # ! $ $ #   $ $ # $ % ! ! "   " " % & " & & ( * & & + , + ) + ( * , ( ( ( ( ) , - . . % & * + + , . , - - + * ( + , % % ' ( ( # # $   ' # % # "     "       " # # # " ! 
+ ! " #     ! 
+ " " #   ! % ! 
+ 
+     
+     ! !     "   " 
+ 
+    
+   & $ " %   # ! # $ % # $ ( # $ % ' % ' ( & & ( % ( ' ( ( ( % ( % ' % % ! & ' & ' $ # $ % ' ! # % ! ! $ $ $ & $ %  !  ! "   "  " ! ! $     # ! ! 
+ ! 
+ ! $ & & ( + % $ ) + + + ' ' ) & ) ) ( ) * ' & ) - ' / * + & ' $ ) % ( & # & ' # % ( ( & * + & % % ( + $ ) * $ ) ' ' # % ' % $ ( , ) $ ( & + ' ' ' $ $ & ( # $ % " $ " ( ) ' $ ( ' ) ' #   % % % % ' % # !  ! #   # # ! # % $ # " ! 
+   " ! 
+ # & # ! ! # # ! ! 
+ $ '   # ! !   # % & $ $ "   
+   
+ ! ! $ # # 
+ 
+ " %   " 
+  
+ $ $ #    " # $ $ ! " !   # "   !             # " #   
+ ! $ # "   ! ! # " % #      $ ! " 
+        
+     
+ ! !     
+ 
+ 
+    !   $ !    "  ! "   "    
+ # " ! # ! ! 
+ !    
+ 
+ 
+ 
+  " # !    
+ 
+ !  
+  " 
+ !  
+  
+ 
+ 
+  
+      
+ # "   ! ! " " # "   " " 
+ 
+      "    
+ ! % % ! 
+ !  % ! " ' ! " #  " ! " "     $ " 
+  
+ ! % % # " 
+  " $ # % &        ! " $ #  % " $ $  ! $   " " 
+ " % $  " $ $ " ! 
+  
+                                                     
+                                       
+                                                                                                 
+  " & * ) / 0 4 8 6 8 4 < < @ A = : = = A B A E D G = < B K G B E I G D I I R M J Q K K J E J M G L N J K I L H K K D M J N H I G I I H M O M H M I F L G J H I H J G K I O F F J M M L I O P L H K I O O N J E I L E I I G J N J J K M H K O L L N S Q O O D C E J I F D I J K M J K D H B = H L F ? B @ D D @ A < 9 5 9 : ; 5 3 / 1 / - / * % ' % ) & # # ! # " # $ " % "   " " $ # " % & $ " ! 
+ ! " !  # " " "   ' # ' % & ( % $ ) $ ' ( & & ( + ) ( ) * - - 0 / 0 . * - + , * / 0 4 1 * - - / 0 5 5 7 4 4 0 1 * / 3 . + + * + ) ( & $ ( ) ) & ' "   % % ! "   %  %   " # 
+ $ # # " !   
+ 
+ #   " 
+  # 
+ 
+        !      
+ # & & ! $ "   " " ! ( % $ %   ' # # # " % & # " & % ( ' $ & # $ " % $ # # & ( $ ' $ ( & # $ & # ! ' # ) & ' $ # $ #  "  ! ! # % " & "   ! !        
+   "    $   $ ! % $ ( ) & & ' * ( & ' , * $ ( ( ( & ) ' ' ' ) ( % % . ) ) ( & % % & ' ( & # % % % ' % * ) ) ( + ( & ) ( + * + ' ! # $ $ % ) ( ' $ ( , $ $ ' " ) ' $ % ' ' ) ( % ) ' & $ $ # ' * * & # $ # $   # " ! % + + ' % % % ' % # % % ! " ' + $ ( ! # # " % # $ " " ! " # "  ! " # #  ! !   $ ' ( $ & ' #         
+ ! $ " !   ! 
+ $ $ ! $ ! !   # "   ! % ' # ' & " " &   # ! !   
+   # ! ! " & ! $ # 
+ 
+  #    # "  
+ # $ $ ! " 
+ ! !   ! 
+     " ! !    ! 
+  
+  
+ 
+ " ! ! #    ! " ! "   !  ! !  ! "   $ %     
+       
+ ! % $ $ # #     
+   ! 
+ "  
+ 
+      
+  
+ ! 
+ "  " !   
+    
+ "    " " %     #   
+ 
+  ! % 
+     " ! 
+  " # '   " " ! & $ # # "   ! 
+ "  ! 
+ 
+   # $ " ! & " # %   ! ' % " 
+  # # % #   $   ! " $ ( $ $ %   " # " #     # $ #   ! 
+                                                                                              
+                                                                                                
+   % * - . + 6 6 6 4 7 : > > @ C A @ = E > ? B = H A H F H J B E K D D K K J O O M K I I G I L L L U P J G G P K L N J K M K O P J M I O P S E B H M D H M I I D J F H G I M M J K L K I J Q F L O L N M K J E G M M J J H O S K R L I Q J K O O K M O P S J H M G I G C L F D H R P F D C E F J E B ? ? B F D 7 9 8 7 5 8 : 0 2 - . + ) + ' # * % % % # # $   !  " $ ! " $ % # $ # ! ! & $ " ' ! " # ' % " % % $ # ) % % ) * ( ) ' & $ , - 0 + . - + / - - / / 1 1 1 4 / - 4 - . ) , 1 . . 3 2 . - 2 3 4 0 0 1 0 - 4 1 / / 3 , - , , + - ( + ( ( * & & " ' ' # ! ! $ $ %     ! # # % "   
+ 
+   " 
+ !     " 
+ 
+ 
+ " $ "       
+ 
+ 
+ "   # "       % % # ' $ ! % # ! $ # & $   " ' $ % " # % % " $ # $ % ' $ " " & ! # # & & ( % $  " $ $ # # # !   ! # %   
+ !  "  
+     " " "     
+ " # !     ' # # % ) ) & ) , ' ( ) ' ) % & $ ' ' ' ' & ) , ) ' * * & ( % % ' ( ) ' $ % # $ ' * % & & ' ' ) ) & + * ' ) ( ' ) & ' # ) # # $ ( ( ( # # % % & & ' ' % & & ( ' ( % $ $ % ! ( ' $ ( ' * % # $ # % 
+ #   # $ ( ( # " $ " $ $ % % $ $  $ % ' & ' & $ $ # # " " # # $ $ ! 
+   # & # ! " # ' # # $ ' $ # ! " & $ "   " % % ! # ! " # " 
+  $   " " $ &   " " $ # # $ # & # $ " #      !  # & "  
+ $ 
+ 
+   
+   ! % #  "     #   #   #   
+ 
+    ! 
+   !   
+ " # 
+  
+ 
+ " " # " # #   !   ! % 
+ 
+  !  
+ " ! " 
+  "   ! 
+ " 
+   !  "   $       !  "  "   
+ 
+ 
+  
+    
+ 
+ 
+    ! % "   
+ 
+ 
+ 
+  
+ 
+ " " ! !   !   " # ! $   
+    # !   ! # " ! " #  !     ! $ ) % $ " # ! ! #  
+ 
+   
+ $ # " !       
+   ! ! % #     $ # ! !   # $ ! ! ' ' ! " $ " !   ! % "  
+ $ $ " 
+ 
+                                           
+                                               
+                                                                                                       " ) * . / 1 8 : : 3 6 < : > @ A B E > C < @ G @ C E D G H H I C G J G K K J M Q G M G F G N P K J O J M M J O M M Q G I F D K J H J G J G P I C B L J G F J D H E K J H N O K M K P N E H K D M O N M I I L K I N K O K H J O H O N K H F M L K J N K O I J H I G E G F I J I E M Q G B F J I D L H ? : A < : 8 8 : 9 5 8 4 / + , ' + ) % % # " & % "   $ ! "   ! $ " $ % ' $ # % % ' % " ( # " ' # $ ' $ $ & " # $ % * ( ) % ( ) ) , ' . . / . 0 1 2 . 3 4 1 / 3 . 2 3 0 , 2 / 3 / . 2 0 / 1 0 2 2 2 2 1 - - 3 / 1 3 7 4 3 3 . - / , , - - 0 - . , ( ( & ) ' % ( ' % ) % & ! ! $ % % #    ! $ !   !   " $ "  " "     
+    !  
+   !   !    
+ 
+ " # " ! " ! ! $ " $ ! ! " ! $ % % % " # % & # % ' & " % % !  # ' % $ % & $ " # ! " % ' " " " !  
+ " " # ! " ! "   "   ! " ! " !  $ # ! $ $ ( * - * ( * ' ( % ) % % * ' ) ' ( & % % & & * / ' * * , + ( - ( + ) * * & * & $ ' # # ' ' % $ $ ) * & ' % ( ( ( % " ) ) & $ ! % $ ' ) & % ' & % ' ' ) ( & ( - * % %   % % ! & & # ! ( # " $ % & " # $ $   " $ $ # # $ % !  % & % % % # # $ % ' ( & % $ # $ ' $ # ' # % ! " # % # # '   ! $ ! " % % * %   # & & ! ! ! $ %  
+ 
+ " % %      "  # ! $ # % $ !    " $ # % # ! $ #  $ " ! 
+ $ & # !   $ % " " " " % ! " ! "   # $  
+ # 
+ !  $  ! % !     !     ! ! !    
+ % ! # "   
+ !     ! 
+ 
+ !   ! " ! 
+ 
+ 
+ ! 
+ 
+ #   
+  " 
+   !   
+  " " 
+   
+     
+ 
+ 
+  
+            
+ ! !  
+ 
+ 
+ 
+ 
+    
+ 
+    
+ 
+   ! !   "    ! " " #  % # $ ! ! ! ! % " " # $ ! " # $ ! ! $   !    
+ "   ! ! ! " #  "   $ " # "  $   
+ 
+ $   !   % $ $ $ ' % #  " #      "                                                                                                                                                                                                 
+ ! % ( & , - / 5 6 5 5 9 = ; > D B C @ > A = @ C E C B @ B C F H F F I C K K F H I I I H D D L O K K P H D I K G Q K F = G E B A I M I F D ? G O K ? G F E B @ G C L T P J H O S N J R S K I F J O P Q H I H F G E K M K H G D I E I N L N J M K I H M N O H H G C G F I K L I J J M O F A D F C B E = C ? ; : 8 7 5 8 2 - 1 / - ( , ' ' & $ $ %   
+ # ( ! " " & &   $ " & # "   # # & & # % $ # ! ' & % # % ) # $ # $ $ ) ) ) ( ( * ) . - / , / 2 / 2 3 1 3 5 0 1 3 - 1 1 4 - 2 1 . / 0 - - 6 4 0 2 3 5 5 1 / , . 3 / . 1 3 1 1 4 - / 0 2 / / , 3 4 / - . + + - , . * ' ' % ( %   #  $  % "    ! " " " 
+ 
+   
+ 
+  
+   
+ 
+   ! !   
+ 
+  !   ! !   
+ # !   
+  !     
+ & % "   # " !  & !   ' $ $ % ( " $ ! ! ! $ # " " " $ " ! # $   ! % %       !    ! "   " " ! ! !     !  # 
+ $   " " ( ' ) - * ' * ( ( % & % & & $ ' $ " & ( % ' ' ) , * ) + ) + + + ) ) ( ( ( ( & * ( ) % " # ) ) * ) $ # ( $ ( & ( - ( ! " & ( $ ! # ) % % ( ! ( * ' ' ' ( $ % % & * ( # $ ! $ % # ' %  ! $ ! % # ! & ! !   " $ " #   ! $ % " ! # " % # & & " $ $ $ ' ( $ " " % # $ !   % # # " 
+ 
+ " # & ) #   
+ $ " # $ * & ! $ " & % " ! !    ! 
+     " # " % " $ !   $ " "  ! !   "      $ # # ! " # " 
+    $ ! ! % ' ! # ! " #  " ! ! # # ! 
+  $ ! "   !   !    
+   
+ # ! " " 
+ ! 
+ 
+ 
+  !   
+  
+ 
+ 
+      
+ 
+    
+ 
+ 
+ 
+     !   ! ! 
+ " # " 
+ 
+ 
+ 
+       
+ 
+  
+   
+  
+  
+ 
+   
+ 
+ 
+ 
+ 
+   
+ 
+ # 
+  
+ 
+  !   
+  ! 
+ 
+  "   "    " " ! ! " # " 
+ !    "  # " !  $ " " ! ! "    
+  
+  !    !   ! !   "   #  
+ 
+ &  
+    
+ " " & #  # $   # &   !    !    !   
+                                                  
+         
+                                 
+ 
+                                                                                                ! " ! # # * + + / 2 4 2 < < = C G E @ : ? D = ? B C D B A C G D E D G H F J K J K F L L E H F H E L M L G E L O J I J B B D G D F I N I H E H @ J J E K K H I N G A J O O H L J K L G J F H F F J L I P N J I D G J K M I F J H O L K I D K M K O P L K K I J H K F J N K I L M P F H C D H I B > > A @ = @ @ = = : 4 4 + / + + * ) ( % % # & # #  
+ 
+ #      $ $ !    "   
+   # (   ' % # % #   " ' ' # % % ' ' ) ( ) * + + & + 0 + . / 1 1 4 1 , - 0 0 / 2 - / 1 . 3 1 . + , * + , / , - 3 4 0 4 2 8 5 4 - 0 1 4 0 + * 0 . . 3 1 0 ) - . . / - 0 / ) , , * 0 , . + ( ) # # $ " % & % !  "   $ 
+ ! ! #  
+ 
+ 
+    
+    
+ ! 
+ 
+   
+ 
+  !       " 
+ 
+ 
+ 
+     
+ # ! " # " " "   
+ $ # # % " # % ' & $ !  ! " ! # !  $ ! "   '     
+ ! 
+  ! $    " ! 
+ 
+ #    $  ! ! "     !   # ' ' ' ( ' ' & & * ) % # ' ' # ! $ ' ' ) ' ( % ) $ ( ( # $ ' $ # ( & ' * # % * ( &   $ $ % ' ) ) & $ % ( ( ) ( & ! ' # # # 
+ % ( $ " # % '   # " $ % " $ ( " " % $ % ( % $ % ' $ " & & # # ! " ! "   ' ' # $ $   " " ! % # "   % $ $ " " # % % $ % " ! ) ( #  $   ' ! !  # $ # !  " " " % $ ! ! #  # & " % & " # 
+  ! "   " ! #     "  
+ 
+ ! # $ $   ! " " ! $ #   # ! ! % ! ! "  " !      
+ 
+ " ! 
+ % " "    # " 
+ 
+ 
+ ! " #  
+ 
+ # $ #       !  
+    ! ! !     
+  
+ 
+ 
+   ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  " 
+ 
+   
+ 
+ 
+     " ! " %   ! 
+ 
+     
+ ! 
+  
+   
+ 
+ 
+  
+ ! 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+    
+   
+ 
+ 
+  # $ # 
+   " ! 
+ 
+   "    ! 
+ # ! " $ "   "   "   
+  
+  
+ # 
+  " 
+ 
+    "    
+ " $    !   
+  
+ ! % 
+ 
+   ! $ 
+ 
+ 
+  !  # % $ " ! ! # " # #   " ! # $    
+                                                                     
+ 
+ 
+   
+      
+          
+                                                                                                   
+ 
+   " ! $ * / * + 2 3 4 8 : < < ; @ < @ F C > > ? C E = B > L I ? ? A E C C G L P E I I E B A L I L M I K E I I C H I C I J G H K I M N H D D C J D A K J G J K J D I I M F J I L K K I I L K E D A G H J F K I G F M G E G K H M P K H H L F J O L L F G F I E J H O P H N N P K H H I G @ ? B A > ? : 8 7 > 8 8 4 0 , / - $ + % "   " # ! # 
+ "  
+ 
+ ! !    ! "  $ !    # ! ! #   & % # % $   % # " ) ) & ' ) * * - 1 / * + , / 0 1 1 4 3 2 4 . , / . . - . , . + 3 5 / , + , - , - / - 0 4 3 2 2 4 7 6 2 . 3 1 3 . , / , / 0 - - . / * * + ' - + ) + - + . . ) , - , + ) ' ( & % 
+ ! ! & " # !   
+ "   
+ 
+    
+   
+ 
+     
+     
+    
+ 
+ 
+ 
+   # % 
+  #   
+ 
+ ! " "   
+ 
+   
+   
+ # " ! "           # 
+   
+ 
+   
+  
+   
+   
+  
+ 
+ 
+   # " " ! ! ! & & # ! " $ % & ( & " # ) ( " $ $ ' ' * ) , & & # $ ' ( & $ & ' ) % # " # $ $ % # ' )   # ) ' $ $ % " ' % # % $ $ ' # ) ) ' % % $ $ % $   % ' $ " ! ' )   # % ' ! " " # # $ ! # ( $ # $ ! & % ( % # " ' " & # ! $ " $ & ! $ $ " ! !   ! $ % "    # ! % ! # %  
+ " # " 
+   
+   
+    # $ " " # # # $ " " " "  ! ! ' ! " ! $ ' ! 
+ ! ' # " # ! ! # 
+   
+ 
+ 
+    #   !   " ! # " & $ !   !       " 
+ 
+    
+ 
+   !      # 
+  
+  "   
+ 
+   %   
+  !   ! ! 
+ 
+   ! $ " ! ! 
+  
+ 
+   
+ 
+ ! 
+ 
+   
+ 
+ 
+  
+   
+ 
+ 
+ 
+    
+ 
+  
+  ! "   
+ 
+ 
+ 
+    
+  
+   
+ 
+ 
+ 
+       
+  ! 
+ 
+   ! 
+    " 
+ 
+  
+  
+ 
+  # ! !     
+ ! 
+ 
+ 
+ 
+ " " ! $ #  
+   ! 
+ 
+ ! ! 
+   
+ 
+     
+ 
+ 
+        " 
+ !     
+  $   
+ 
+       
+ " " !   ! !  ! ! # ! " ! ' " 
+ 
+   ! !                             
+                                  
+   
+ 
+    
+     
+       
+         
+ 
+ 
+ 
+                                                                                                 
+ " ! ) ( / - 3 1 4 8 8 9 9 = : : ; @ @ < = ; = < < A G C E B B C G A E C D J H H O J H C K D G C H I J N R K H J C C E F F B C C C A H K A @ E D G H J E L H G I J J I I I E I I K I J M S H J J K G C H I H B C J H J F N F N E C H L H C I K J N D I I L L L M M K H L I G M M C F G C > @ A G F < = 6 7 9 7 1 0 * * ( ' & ( & " ! $ # ! 
+ 
+  ! 
+ ! " # " 
+ 
+ 
+ # " $ & " & ! 
+   & $ & $ % # % & $ ( - - . , 0 0 + / ) - - , , / 2 0 7 9 3 1 0 / 1 . / - - , / 5 - 2 / - - 0 / ( - - / , 6 4 3 / 6 4 3 1 0 4 3 1 - 0 6 - ( , . - / . 3 * / 0 ' , , , / ) * - ( - , - , , - - ( $ ! !  % $ " ! " 
+ 
+ 
+     !     
+ 
+ 
+ 
+ 
+ 
+ ! ! " 
+       
+ 
+ 
+ ! 
+ 
+    
+  $   
+ 
+  
+   
+  #  " "     
+   " 
+ 
+  
+  !  
+       
+      
+  
+   
+ " $ " # % # ' ' ( ( ( * & ) ( & ( * # $ ) ( # ( ) ' , * ) ) * $ " ' + * & ' % % ' ' ) % " $ ' $ % ' % ' ( ( ) ' & " % % % ) ' ' $ &   " # * . ) $ & ' # # ! % # # # % & % * ' & # % " # $ % ( % ) ' % ) $ & ' & " " ' % ' ' $ #     $ " % $ # " 
+ " ! 
+ # " #       % ( " " $ # $ $ " # ! (  "   
+ "     ! ! !  ! $ $   ! #   $ ! ! #    
+ # & $ % ! $ "   !    
+ 
+ 
+ " 
+ 
+ 
+    ! ! # " !  # # ! ! 
+ 
+ 
+   
+ 
+ # "  
+ 
+  
+ $ ! 
+ 
+  
+  
+  !   
+ 
+ 
+ "   
+     
+ 
+ ! !   
+ 
+ ! #   
+ 
+ ! ! !  
+ 
+ 
+   
+ ! 
+ !   
+ 
+ 
+  
+ "  
+ 
+      
+    
+ !     
+  
+ 
+  
+ 
+ 
+   
+ 
+  
+ 
+    
+   
+ 
+ 
+  
+  !   
+ 
+       
+ 
+     
+  ! ! 
+ 
+ 
+ 
+ 
+ 
+ !   
+ 
+      
+ ! ! ! ! 
+ 
+ " ! !  
+  " ! 
+ 
+ 
+  
+  
+ 
+     !      
+  
+ !   
+      
+ !     
+ 
+ 
+ 
+  # $ 
+  ! ! ! " " 
+ 
+ 
+ # ! 
+ 
+                                     
+        
+                   
+  
+          
+           
+ 
+ 
+  
+  
+                                                                                                
+   ! % & ' * , - 2 9 9 > < 9 7 7 : > @ : 8 F G @ @ > < < @ E B A A = ? D @ B G F K J G L J N K D A E G H I I F E C F E I G I G F ? ? > @ A F F E I J D I I B J C C H H G G O L J I N K L J Q G D I G K J Q I H D ? D H F L C G N I F I J M H J M J K D H F K O P P A F H I F L H G C D @ @ = A C D @ < @ 3 0 / - / + & $ & !   " #  ! " ! " 
+ 
+ 
+ ! 
+ 
+ !   
+ ! ! 
+ # " " 
+    " "   $ % $ # ( $ # & ( , ) . . + . 3 7 - / - + + , 1 . 5 2 1 3 6 3 4 0 , , - . / 2 . . . ( * . + , * , , , 0 / / 4 0 4 3 3 / . 0 1 / . + 1 - * - - ) . ) - * , , + 0 . + . . + + + ( , + * , , - - ) ( , % ' ! $ "    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+    
+  
+  
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+ 
+ 
+ ! 
+ 
+ 
+ 
+   
+  
+ 
+ 
+ ! ! "  
+  
+ 
+    ! 
+  
+ 
+   
+  
+  " 
+ !   
+   
+    
+ 
+ ! & % & & ) * ( ( ' + ( $ ) ) $ ( ( ) ' ' " $ % $ ) ) & % # ) ( " ( % & ( ( $ % & # ( % # % ( # $ & % % % * * "  $ $ $ ! ' ) ' # '       " ) + ! " $ ! #   
+ " !   # ' ' ) ' $ # # ) % ' # & ' $ ) ' ' $ # " "   " ! % $ '   ! ! ! ! $ $   " ! !  " # #   & "    $ #     $ " # !    #  "    
+ 
+   !      
+ # & " #   #     " $ !           ! " !  
+  
+ 
+ 
+  
+ ! 
+ !   
+ ! 
+     
+   " # "    
+       " $ " ! " 
+ !  
+  
+ 
+  
+ 
+ 
+ 
+ 
+ "  
+ 
+     
+   !   !   "  !  !         
+   
+ 
+  
+   !  
+ 
+ 
+    
+   
+ 
+   
+ 
+ !       
+ "  ! 
+ 
+ 
+ "           
+ 
+   
+ 
+ 
+  
+   
+ 
+ 
+   
+   
+ 
+ 
+    
+ 
+ 
+  
+ 
+  
+  
+ 
+  
+ !    " 
+ "   
+ 
+   
+   
+ # 
+  ! ! 
+ 
+ 
+ 
+          
+   !    
+ 
+  
+      
+ 
+ 
+    !       
+  
+ ! 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ " 
+ 
+                       
+       
+ 
+       
+    
+                
+      
+             
+      
+           
+                                                                                                  ! $ ' $ ( * + 2 8 5 = ; @ ? ; > > B < < C = D B I D C A : < E G B D D D D J I E E J O J F I ? ? E G H I G B < C F H H O E H A B @ F E B I H F J B C E I D G F J M ? M M M L M G M K F I L G > C E J J J K H F D E B D I E G J H E G F J J G L O I I G H E D B I = C F K G L L E A B A B E ? ? ? : : 5 2 - + * ' $ ( # $   !   " $ ! 
+ 
+ ! ! 
+     ! ! 
+ 
+ 
+  
+ 
+ 
+ " " ! # 
+ " " # % & ! $ % % ' - , 0 - 0 3 / 7 0 3 . + ( + / . . 2 0 * - 2 1 4 2 . 2 - 4 2 . 1 - - , / . , / / ) 1 , * . 0 0 0 0 0 5 2 / - 5 / / - - , * , * / ' - ( ( * - ( % ( . . - / + + - - * - + ( ) , , , + * + *   # "  
+     
+ 
+    
+   
+   
+ 
+  
+ 
+   
+  
+    
+ 
+  
+  "  
+   
+ 
+ 
+   
+ 
+ 
+   
+ 
+       
+  
+ 
+ 
+   
+ 
+   !  
+ !  ! 
+  " 
+ 
+     " # $ % # ) ' ' % & ( ' ' % * ) ( ( + * ) # " # $ # ) $ # # ) $ ' # # , ) ) $ ' + % !   % # # $ " ! ' 
+ " & % # ! " % ! %  " $ % % & # " !  $ "     
+ "    " " " # + & " $ # # $ ! $ & $ &   ! ( ' $ # & $ "   $ ! ! % $ ! 
+ 
+ 
+  ! % ' " " ! " $    !   ! 
+ 
+ 
+  
+ !   
+     
+ 
+   !  
+  
+ 
+ 
+      # "  % $ " 
+ 
+ 
+ 
+ " 
+ 
+  " ! 
+ 
+ 
+ 
+ ! !    ! 
+  
+ 
+ ! 
+ 
+  
+    
+ # 
+ 
+   
+      
+ 
+ !   " $ $  $ "   
+     !   
+ ! ! 
+ !    
+ 
+ ! 
+ 
+ 
+ !   #       
+ 
+   
+ 
+  
+    
+  
+    
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+ 
+ 
+  
+ ! # 
+      
+  
+ 
+  
+ 
+   
+ 
+  
+ 
+  
+  
+  
+ 
+ 
+ 
+   
+ 
+ 
+   
+ 
+ 
+ 
+    
+     
+   
+ 
+  
+ 
+  
+      
+  
+ 
+     
+  
+ 
+    
+ 
+ 
+      " 
+ #   
+ 
+ 
+  
+  
+ 
+  
+ 
+ 
+ ! 
+ 
+ 
+ 
+   
+    
+ 
+ 
+  
+ 
+ !     "       
+   ! 
+ 
+   
+   
+ 
+  
+                                                             
+    
+ 
+                         
+   
+ 
+                                                                                                
+ 
+ # # ! ! & , * . ; 9 ; 7 = @ ? ; = C ? = @ A B D B @ ? @ A D D C A D @ ? E C C B G @ D E D C B B D C I J J D = = B D B A A = A I H H I G H B D H D C C H I I L K J F F F I D J O K G H F F E F E E L J G E E H I H D J K E H B E I G D H C A H K @ C G J F F C F D G J I G I H J H D B > ? @ A < ; 6 . - + ( + "   % % %  ! $ !   # !   " % 
+  
+     
+ 
+ ! & #  " "    $  % $ % ' * # & * ' + 0 - , 2 0 , - 2 1 0 ) 1 , , , 1 / / * - - 4 2 / / . - * 1 + * 0 - ) * , * ) . - + . 1 2 , 0 / 1 + , / . . . , , , 0 + ) * . - + * * * * * ) . - % , / + + / , / , + - ( * - + - + * ) * ' $ $ "    ! !    
+ 
+  
+  
+    
+     
+                
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+     
+ 
+ 
+       
+ 
+     
+ ! 
+    " ! !  & % ) " ' ' & * % % % % % * ) & % & ' # # ! # # ! # ' & ' ' $ %   # # * ( $ ' % $ $ $  
+ % % % #   & % %   ' # !   ' & )  # $ # # % % ! 
+  #   ! " ! % " "  # " & " % " & ' $ " $ " "   " " ! " # & $ #   $ 
+ $ $ $ "         
+ 
+   " " " ! % ! 
+ ! " $ 
+  
+  
+   
+ 
+     " 
+ 
+ !   
+  " 
+   
+            " $    ! # !  ! # "         
+  
+       
+ 
+  
+  
+  ! !  # 
+ 
+ 
+  !       
+  
+     ! ! 
+ 
+  
+ !       
+ 
+ ! 
+  
+  
+ 
+ !    !     
+ 
+ 
+ 
+ 
+ ! 
+      
+ 
+ 
+ 
+       
+    
+ 
+ 
+  
+    
+  
+  " 
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+   
+   
+ 
+ 
+   
+  
+  
+  
+ 
+    
+         
+ 
+     
+  
+      
+ 
+   
+ 
+    
+  
+   
+   
+ " "  
+ 
+    
+  
+  
+ 
+ 
+ 
+ ! 
+  
+ 
+ 
+   
+ 
+  
+      
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ ! 
+ 
+ !  
+            
+     
+          
+     
+ 
+    
+    
+   
+   
+      
+    
+  
+     
+         
+               
+    
+  
+ 
+ 
+ 
+                                                                                                
+   ' $ " % ' + 2 2 2 4 5 : ? = > = A > < > ; = > A < : > A = > E ? @ E @ D I B B D E D E G E C C B A C J F I B B F E H > > A C D N K F J D H C G D K K E I J J K L F J B H I E G E ? E G F H F H E H G H I L K J L H I L K L M @ D H G H K F B F G G L J I @ I C E C @ D F C C C = G F A ? > B ? : ; 3 . - / ( ' # ! # "   
+ "   ! 
+    $    
+ 
+ 
+ 
+ 
+ " ! # # # " % ! 
+ ! $ " ) ( ( & ' ' + ' + 2 , + 0 0 - - / / - . * . * * ( - 3 . ( + ' 2 - , / . 3 . - - + 2 / - ( * + + ) + 1 , 2 0 / - - 2 , - 0 0 2 / + * , * ' , + 1 - - , ) - ) + * , ) ' , . . ) ) - . / ' ' * * ) * + + + ( * % ( & % ' % $ !   " 
+ 
+  
+ 
+     
+ 
+     
+ 
+  
+ 
+       
+ 
+ 
+     
+ 
+    
+ 
+    
+   
+   
+ 
+  
+ 
+ 
+    
+ 
+ 
+    !   $ "   $ # $ # % # ) * # ' ) " & ! $ # & $ ) & ! # & & $ $ # % ! % " & & $ ) " '   ! $ # %   " " ! ! " % & ' % ! " 
+ ! & ) # " " # ( " $       " #   # ! & % " " 
+ "     ! " 
+    " "   %   " # "   # "   !       " ' !      ! $   " # # 
+ # % 
+ 
+   
+ 
+  # ! ! # " "    ! " " ! 
+  
+ 
+   
+  
+ #   ! $ #   
+ 
+    
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+ !    
+ 
+   "  ! $  
+ $ !   
+ 
+  
+  
+ 
+ 
+ 
+  
+ 
+      
+ 
+          
+  
+ 
+  
+ 
+ 
+        
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+    
+ 
+    
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+    
+ 
+  
+  
+    
+ 
+ 
+    
+       
+   
+  
+ 
+                  
+ 
+ 
+   
+   
+    
+ 
+ 
+ 
+ 
+ 
+        
+ 
+  
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+    
+     
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  !  
+  
+ 
+ 
+  
+ 
+ 
+     
+ 
+   !  
+     
+ 
+       
+   
+         
+     
+  
+ 
+   
+ 
+    
+   
+ 
+     
+     
+   
+ 
+                 
+ 
+           
+    
+    
+  
+ 
+ 
+                                                                                                    ! ! $ ( * / . 3 3 4 = : ; > 9 ; ? A > ? > ? ? B ? ; > = > A G B D @ A B C B B F B ? B A E J A E G G F H C A H K C I B C F D G I D J L E I F K G L I H G J L E E J C I G O E G I G @ ? A C I E K J I M M I H I E K H J O D G M D I K G G A E H H G I G ? I I G I I G K J M C C @ @ A < < = = < 9 / 0 ) ( + ( ' ' ( $ $ #  
+ % 
+ !   
+ 
+ ! 
+  ! # ! ! ! " ! # !     & % " # % $ & ) ( ' , - * , * + * 0 0 0 + / / / . 0 + . * - , 2 0 / - ' 0 , . , - 2 0 / 3 * , 0 / / , 0 + , 0 1 . 3 . - / - 1 / 1 1 / 0 . ) , & ' ( - / . ) + ) + - , / + - + ) , 0 + ( * - , ) ( + , * % * + . - * ) + ' * & ) . ) # ( ( " 
+  
+ 
+    
+ 
+   
+ 
+ 
+ 
+             
+  
+  
+  
+  
+ 
+   
+    
+     
+  
+ 
+ 
+ 
+ 
+  
+ 
+   
+ ! " ' ' " # $ $ ' ' ( & ' ' & % !  ! # & % # $ " & & " # % $ " " ) ' ' $ ) % ' * $ " 
+     " ' $ " $ $ $ # $ # % ) " $   " ! % "  # $ # " " ! " ! ' #     # & # 
+  
+   $  !   $ # " # "   ! !   #  # " $    
+ ! ! " $ ! ! $ # 
+ !   & # % % " %  
+   !     # ! # " ! % ! ! 
+ # ! ! ! 
+  
+ " $ &    " " " ! ! !   ! 
+ 
+ 
+ 
+  !     
+ 
+ 
+ 
+   !   
+ 
+  #  
+   
+ " $    
+ 
+ 
+  
+   !  
+ "   
+ 
+   
+    
+  
+    
+ 
+ 
+    
+     
+ 
+     
+ 
+   
+   
+ 
+ 
+ 
+   
+   
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+    
+   
+ 
+ 
+  
+ 
+ 
+    
+ 
+  
+   
+ 
+  
+ 
+ 
+  
+   
+ 
+      
+  
+                      
+    
+ 
+ 
+   
+   
+ 
+ 
+    
+  
+ 
+  
+      
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    
+  
+       
+ 
+  ! 
+ 
+  
+ 
+    
+ 
+      
+ 
+  
+   
+ "         
+  
+ !  
+ 
+ "   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+                               
+ 
+               
+                     
+  
+                                                                    
+                                                       
+   ! - * , 0 0 4 5 : = 9 ; ; = B = = = A D C F C A B @ A E D @ D G F C B A B C K J I C @ C B @ F H C C H J O G H C ? ; ? H I M J E F K I M F L J J K G F K I K I H M J C C I K P N H ? F C B E I E A G K M G K H L I E J D K H K H O H I J H J G K D ? = F F B G J I J I E A E @ A C : 8 ? ? : . . ) ) ' ( # * $ ) ( & $ 
+   ! %    
+    ! " # $ " # !   " & " ! & % ' % & ) + ( * - 2 1 4 0 , / 1 2 3 1 2 0 7 - 0 / . . + 0 5 2 , , + , , ) , + , . - . ) ) , 1 2 + . - , 3 2 3 - 1 - . - , 0 2 3 , - . - , + , + - + , , , + ' * 2 ( + + + ( ' ( / + + . + + , + . ) . , * + + . ) + . + / , - - / ' ) ( " 
+ 
+  
+   
+ 
+ 
+ 
+ 
+   
+ 
+  
+   
+ 
+  
+    
+    
+ 
+ 
+ 
+  
+ 
+ 
+    
+  
+    
+           
+  " " 
+ 
+ 
+   "   ' ' ' * * ( & ) $ $ $ $ ' % #    % % " $ ) $ ' ) '   $ ! ! $ ' ' & % * % ) ( & $ & $ # ) ' ) # * ( # % % " % ( ( # ( # ( ( ' " )   $ "  " " " $  
+   $ !     '  $ " $ % $ # #   $ " # # # # $ # " $ % "   ! !      ! # # #   ! ! $ % % # # (   
+ 
+   " " ! 
+   ! $     
+ ! &        ! " $ " # $ #  " ! %     " "  
+ # "   
+ 
+ 
+ !        
+ 
+ 
+ !  
+     
+  ! # #  
+ " 
+ 
+ "    
+  
+   
+   
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+  
+  ! 
+ 
+ 
+    
+ ! 
+     
+  
+ !  
+      
+ 
+  
+ 
+    
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+    
+  
+ 
+     
+  
+ 
+ 
+  
+  
+ 
+ " 
+    
+   
+   
+ 
+ 
+  
+ 
+  
+ 
+      
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+  
+ $ " 
+ $      
+ 
+  
+ !  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ ! !    
+   
+      
+     
+ 
+   
+   " "     
+  
+ 
+      
+  "  
+    
+ 
+ 
+  
+  
+            
+                      
+                                                              
+                                                                                               
+ 
+ 
+   % ) - + 1 1 3 9 > = = @ ? A A A ; < @ D G C E A ? A C A E D G @ @ N H E D F K B L N B F D H P E = @ E I E I K G H E D I M N M I G P O L G K L K I I J E F G F @ N I G L E F D E G H A E C F J M H G N P K L H O H I J L J L I H L G K I K J I K B @ C F H C I I F H I G B B B G G A D < 8 0 ' * + $ % ' " % $ % # # & % 
+ ! $ 
+ 
+   ! 
+ 
+ " ! " # ! # % # % ! " # ' $ ' & ( + / 0 4 2 1 0 1 4 . 0 1 / 2 . 4 0 0 + 0 2 . / 1 2 / - . . . * 2 1 + . / / - / , * ) 1 0 , . * / - + - 1 . / 2 + 2 0 3 / , . 5 4 . 0 - ) , / - . , * ) ) , % ' ) ( * ) % , ( . 0 + . - - , + / . - , * - * + , / , 0 , * / . ) + ' %   "   
+  
+ 
+   
+   
+    
+ 
+  
+ 
+      
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+   $ $     " 
+ 
+ 
+ ! !   % ' ) ) ( ) ( % + ( ( " ! % $ # $ % ' % % % ' ' & + ( " "     " , ( * % & # ( * * ) $ ' # $ " " " % ' # $ $ # ' ' ( (   % & & # ( ' ! ! ! ! % & $       # # $ $ % ! # % % & & ' #   ! " " $ ! " # # " "   " !   !     
+   $ ' $ # " $ # # # # !    
+    ! 
+   ! ! 
+ # %  "   # !  "   " " ! " # ! " " 
+ ! 
+ "           ! ! ! " 
+  $ " $ " # % ! !     
+ ! " #  $ !   
+   " 
+ " 
+   # 
+ 
+ 
+ 
+ 
+ 
+ 
+ "  
+ 
+ 
+ 
+     
+   ! 
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+ 
+      
+ 
+ 
+ !  
+ 
+  
+  ! 
+   
+   
+ !  " 
+  ! 
+ 
+   
+ 
+  
+ "        
+ 
+  
+   
+ 
+   
+  
+  
+    "       
+    
+  
+  
+    
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ !      
+ 
+    
+   
+ 
+ 
+  !  
+ 
+      
+ !      
+ 
+   
+ 
+    
+ 
+ 
+  
+    
+ 
+   
+ 
+ ! 
+   ! 
+ 
+ 
+     
+ 
+ "     
+   
+    
+ 
+  
+ 
+  
+ 
+      
+                                        
+                                            
+                                                                                                   
+   " $ % ( , 1 - 0 5 < 9 @ @ < A D = @ A @ D B B @ A ? C E @ E C E A G D B C E J M H E C E F G H H E C D J B E G L D H E G J E K M H E F G A E I L L L K K D D J F C K K L I I H E G I E E H J K I H G F H E I K J K G G G N F G B J J F I J L M L I F D D H D E I H J I G B G B E ? A C B 4 0 * ' * . ) ) # $ # $ ! # 
+ $ !  "  !   ! ! 
+     ! "  "  
+ ! # ! # ' ) " ' ) + - 4 3 2 1 4 / 2 / 1 2 / 2 4 0 1 3 1 1 2 . 5 0 1 - 1 , + 2 1 - 0 . - 0 1 . 1 1 - + . . - ) , . 1 * , . / + , 0 2 3 / / - 2 3 2 4 - 0 0 - * 0 - - / , + ) * * , * & $ $ ( ( ) - , 0 + , + + 2 0 5 2 . % + . , - 1 0 / ) ( . - - , ( & # & !  
+  
+ 
+     
+   
+   
+   
+ 
+ 
+   
+ 
+  
+  ! ! !   
+  
+ "   
+  
+  
+ 
+ 
+ 
+   ! !   
+ 
+  
+   
+   " $ & $ & ( & ) ) ' ' ) ' , % $ $ % ' % ' % & # ( ( ' ( ' % # $ # ! * ( * + $ ( % ( $ % ! $ % $ ' ' # % # # $ # ! " # $ # ' $ % & " " # $ " !   # ( ' ' " " #   $ $ # " " 
+ % & $ # # & " " # " # # % ' # ! & # ( #   !   # " ! # ! $ " $ # $ # $ # "  " " "   " "   " $ $ $ # #   # $        # ! ! % &    " ! " ! ! " !    ! 
+    " ! "  " ! $ " !    #   
+        ! " " # ! 
+ 
+   
+ "     
+     
+ 
+      $ 
+ 
+ 
+       
+      
+   " "   ! 
+         
+ ! 
+ 
+  
+   
+  
+ 
+ 
+ ! ! 
+ 
+ 
+ 
+ 
+ ! 
+ 
+ 
+        
+ 
+  ! ! 
+ 
+   "   
+ 
+  
+ " 
+ 
+ 
+     ! 
+   
+ 
+ 
+ " 
+ 
+   
+ 
+   
+ " 
+ 
+ 
+   
+    
+ 
+    ! 
+ 
+ 
+ 
+      
+ 
+  ! 
+  
+   
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+   
+ 
+  
+ 
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+     
+   
+ 
+   
+  ! 
+   
+ 
+    
+ !    
+ 
+     
+ "  !  
+     
+ 
+ 
+   
+ 
+ 
+   
+                                                                                                                                                                                             
+  $ " ' * , / 0 3 2 > = @ < @ : = 7 ? < @ @ ? @ A = ? A A B C C B G C B < ; C H K E A D G K L H I F C D C H B G Q H C D E C D I M M Q H I H I C J E D L L I E G F L J I K K H L H H H H H I M J J F J H I H H O J L I C F I D K G G F J F J O K H G S L F F F L J I J H F H D ? A = > > < 1 * ) ) ( ) # % & $ % "   
+   ! $ ! #     " " #   ! & $     # ! " % # % # * - ( * , - . 1 < 4 0 3 0 2 / / 4 . 0 1 4 3 * - 1 0 2 3 6 0 / / - / 3 . / - ) * . / , - * 0 / / - * , . . 2 0 / 1 1 1 0 0 / 3 - - . 1 3 1 3 / - + + ) + . * / - 3 . 1 . . ) ( + ) ( . ) ) , * ) - 1 - + + / . + ' + 3 / * & - 0 ) ( . - . - , * ( % # 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ ! 
+ 
+   
+     
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ !  
+   
+       
+ 
+ 
+   # " $ ( ' + + * ' * + , ) ' ( ' & # ! " & ' , ) $ ' ' + ( & ' ' # $ # $ ) $ $ ( ( ) * % # " # % " * ( $ $ " ! " & $    " # %   # ' # &   ' # $ % $ & % $ ! " $ $   # !  " ! $ $ %   $ # ! " $ $ & ' $ " #  ! # $ ' "      ! " ! " !   $ $ ! "   # & & #     " # % ! 
+ " & " $ "   ! # "   
+ 
+ " ! "    ! 
+ !   " # " ! ! 
+ 
+   
+ 
+  
+ " 
+ # $ " !      ! # 
+ !  
+  #    # $ #    
+ 
+   ! $ # # " 
+ 
+   !   !     ! 
+    ! 
+ 
+ 
+ $ ! 
+     ! 
+   
+   
+ 
+ 
+   
+ 
+ 
+   
+  
+   " # " !   
+  
+ % 
+  
+  
+ $   
+   
+ 
+ 
+     
+  
+ 
+  
+ 
+    
+ 
+      
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+       
+ !        
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+   
+   
+ 
+         
+ 
+  
+ 
+ 
+  
+  $ " 
+  
+ 
+  ! 
+  
+ 
+     
+ 
+ 
+ 
+   "   
+   
+ 
+ 
+ 
+ 
+ ! 
+ 
+   
+  $  
+      ! 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ ! ! 
+                                                                                               
+                           
+                                                                         
+ 
+  # ' ( , / 2 9 6 8 5 ; ? A ? : = < 9 @ ? < D B = > C ? C ? < @ A > = = @ E E D H C G H M P J D ? @ A H I E F E E I J L F F J I K M I < @ A E M H G D G M G H D L J I L P I I I E E G I G E H J L K G N E G E K F D H C H E J B G F G G E H H J D G L J F H I K L C D G D A = = > = 2 2 - ) ( ' & ! " ! " " ! ! ! # 
+   " % !  ! % " !   ! "   ! ( " # ' & ' ) ) - 1 . / . 0 - - 2 1 1 5 0 1 . 1 2 2 1 2 1 0 . / 1 4 0 0 1 , 0 , . + . 2 0 0 , , - 0 . . ) - / 2 , ( . . . . / 0 3 8 . . / . 0 0 , . 1 2 . , . / . ' ) ' ) + . - , / . / ( & + - ) & ' ( + ) ' & + / - 1 + , ( ( % ' * * , ) / / * , , - - * ) + ( ' %  
+ 
+ 
+ 
+  
+    
+  
+  
+    
+ 
+ 
+  
+ ! 
+  
+    
+  
+  ! "    
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+     
+ "   # ' $ # $ ( * ) ( & * % & ' # % # & ) % % * ' & ) % % % & ' # $ % ' # % $ # ! % ' * % ' ' " " # % ' $ & " # % # $ ( % * $ " ! ! ! # #    % ' $ ' & $ $ "  $ % ! " " ! "  ! " # 
+ " $ %   !   " % & ' & " " % ' # %   $       !   ! % & $ !   # " ' "       # ' $     #  ! " 
+ 
+ % ! ! !    
+        "   
+   "   % ! !  
+ 
+ 
+  
+  
+ & !   
+ "  
+     
+   ! 
+ !        '  
+ 
+ 
+ 
+ 
+ 
+    # 
+ 
+ 
+      
+ " 
+ 
+  $   
+  
+ 
+ 
+ 
+ !     ! 
+ 
+  
+   
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ !    
+ 
+ ! ! 
+   
+ 
+  
+ 
+  
+  
+ 
+ 
+  
+ 
+    ! 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ !  
+   
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+   " 
+ 
+ 
+     
+   
+  
+    
+ 
+ 
+     
+ 
+ ! 
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  !   
+  
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+  
+ 
+   
+      
+ 
+   #   
+  
+ 
+ 
+  
+ 
+    
+  
+ 
+  
+ 
+ 
+    
+  
+ 
+  
+ 
+ "      
+ 
+ 
+                                                                                                        
+                                                                                       
+   
+ " % & & - 1 0 8 5 3 6 8 9 ? ; 6 ? : < = > ? B D > 9 B B D B = > F C > F E O G G H K L M H K G H D @ A R H F B B H F L M D E I N K K E F ; D E H G F E E H B E C H M L G I G I G C D M P K F G G G @ A N B ? E C ? B E E C C G = C C G D G D K H C H F J D D E I E J J J A A A > = 7 - + ' % " * ' ! 
+ ! ! % # " # " # $ 
+ # ! 
+ ! # $   " # % # $ % ( # " % " ! % * 3 ) ( , . , 0 / / 0 1 . 2 4 4 2 0 . 1 2 . / . 0 0 / / - 0 0 . - * - 1 / 2 , + + - + - , - , - / , , * - - . . 3 - - , / 0 . 0 . / 0 , + - ( + ( ' ) ( ( + / 2 - ( + - . - , ) ( ( ' ( ( * , ) - * ( / ' + + , , * ( ) + * 0 / ) & + + , + * ) ) ) &   
+ 
+   
+  
+ 
+    
+ 
+ 
+   
+  
+ 
+ 
+  
+      
+  
+ 
+  ! " 
+    
+   
+  
+     
+ 
+      $ ! #   " % ' ' ( # ( $ $ & & ' " ) ( $ ( " # $ # #  ' " & " % ( ( ) & " " % # ' " # % * # ' # # $ $ # " " $  $ & & & "  ! 
+   " ) # " # " % $     "   " "   "  
+ 
+   ! !  
+      !  
+  ! !   ! "   ! ! % ! # " ! #      " 
+   ! " "         
+ 
+ " ! $ " ! "  ! ! !     ! 
+ ! %  
+     ! !   
+ 
+ 
+ 
+   # % !      !  
+ 
+ 
+ 
+ 
+ 
+  
+    
+  
+ 
+ 
+    
+ 
+ 
+   
+   
+ 
+ 
+ 
+ 
+  
+   
+ 
+     
+ 
+ 
+ 
+       
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+    
+ " " 
+  
+    
+ 
+  
+   
+  
+ 
+  
+      "     
+    
+  
+ 
+    
+   
+ 
+ 
+ 
+    
+ 
+  
+    
+    
+    
+  
+  
+       
+     
+ 
+  
+        
+     
+     
+  
+ 
+   
+ 
+  
+ 
+ 
+        
+   
+ 
+ 
+ 
+ 
+      
+  
+   
+ 
+     
+ 
+  
+    
+  
+  
+ 
+ 
+ 
+  
+     
+   
+  
+ 
+ 
+ 
+ 
+   
+  
+  
+ 
+ 
+                                                                               
+                                                                                                                    
+  " $ ( ( , / . 0 1 7 ; 4 < : ; : : @ B ? = ? : > ? < F A I F ; ? J B J I H N F H E M O M L M D G F I G J K G E C F E P N F N K K O G J J L I F M L M G E E D D I M G D C C E @ D D F A G I I F F F E E L F F I G H G ? J H A I G D @ G K J F K K G I I D K K H E H G H C A A ; ; 4 1 - & ( # $ $ " " ! " " ( & " " ' "   ! % $ % !   $ $ $ " ! % $   # # ! - - ) 0 2 0 0 1 2 . 4 0 , / * 0 1 2 3 4 7 2 1 0 4 0 0 2 0 0 , - 2 . - / / ( - . 0 - * 2 * . , * * . . ) / . * * * / . 3 0 / - - , 5 1 + 0 . 3 . + - , + + * ( , , * . + % ) + ) / , * ' + ' ) ' ' * - ( ( ) , - + + ( * , ( ) + ) * * + ) , ( ( * , ( - ' * + # %     #   
+ 
+        
+  
+  
+ 
+ 
+ 
+   
+ 
+  
+  
+  
+ ! # !  
+   ! ! 
+ 
+        
+ 
+ 
+  ! !   , ) + ) ) ) & # & & ' " $ & ' & & & & ( & ' ' & $ % # # % ( & $ $ # $ " " $ $ & * % $ # % $ ! % $ " % % $   & ' % ! # 
+ ! & % ! 
+           $  ! # ! " "   
+ " " ! #   !     "      " " 
+ " !    
+ %    " $   #   !    
+  
+    
+ ! # 
+ 
+ !   % $   " # ! " " 
+ ! 
+ 
+ # 
+   $ !   #   
+ "     ! " "   "   % "   " ! " !  
+ 
+    
+      
+ 
+ !  
+  
+ 
+ ! $ " 
+ 
+   
+   $ " 
+  
+   
+ 
+   
+ 
+ 
+     
+ 
+  
+ ! 
+ 
+  
+  
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+       
+ 
+  
+ 
+ 
+ 
+  ! ! 
+ 
+   
+ 
+    
+ 
+    
+  
+   
+  
+       
+ 
+   
+       
+ 
+        
+    
+     
+     
+     
+ 
+  
+ 
+  
+    
+   
+ 
+ "     
+   " 
+          
+ 
+   
+ 
+ 
+      
+ 
+ 
+     
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+     
+ 
+     
+ 
+ 
+   
+  
+ " 
+ 
+ 
+   
+  
+ 
+ 
+ 
+ 
+  
+                                  
+                      
+                       
+      
+ 
+                                                                                                          
+ # " $ . ) ( , 1 1 9 = < ? = ; = = 9 B @ A E < A ? > ? B C D C B I ; B B D G I F K O J K M F G I O I F E I D C D E J D F J L G K K K I N J G M L G K H H C E G J K C ? ? A C H L F D ? G C E K G = D F E D M L M L I A I F E B G I B B D B C D E @ J C B K I I E C E E @ > > < 8 5 - - ) " " %   
+ $ # # $ $ $   " !  ! 
+    ! " " " $ " $ $ % $ & % % ( + / . - , - 2 2 . * / 1 1 . / - 1 0 0 1 2 0 1 3 2 0 3 3 2 0 - . . - ' . . ) ) / 0 , , 2 . , + + ( * / * , / * * - - . 4 * 0 / , 1 3 - , . * / + + , / - ) ( - + * ) ( ) ) ' 0 ( ' ) * - . + & % % + / ( ' ) ) * , , ( ) * # * * - ( * + * * ( % & ) ( + & * ' ) & ' & $ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+     
+ 
+ 
+ 
+  
+ !   
+   # 
+    ! "   
+  " 
+ 
+ 
+ 
+ 
+ 
+ 
+    !   
+     # $ % ' ' & & * ( # # # & & # $ % ! # % # & ' % $ $ # ! $ $ $ # # !   # ! $ $ " " # $ # " $ !  " ! " !   
+ " % % !     $ ! "   #     
+         # $ " "   
+  " 
+      #    " 
+ ! " " " % ! !   " ! $ ! " !  
+     "   ! " # 
+ 
+  !        
+ 
+ " 
+ !    " 
+ 
+ 
+      ! ! 
+ 
+ 
+     & $ " 
+ 
+   
+   " ! # ! ! !    
+ 
+ ! 
+ !  
+   
+ 
+ 
+ 
+ 
+     
+ ! 
+ 
+   
+  
+   
+  
+  
+ 
+     
+ !     
+    "  
+   
+   
+ 
+ 
+ 
+ 
+     
+  
+ 
+ 
+   
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+     
+    ! 
+ 
+    
+ 
+   
+       
+              
+   
+ 
+ 
+   
+         
+ 
+     
+  
+      
+     
+  
+ 
+      
+ 
+  
+ 
+ 
+ 
+      
+           
+ 
+ 
+     
+    
+   
+ 
+ 
+  
+ 
+ 
+  
+  
+    
+    
+  
+ 
+    
+    
+ 
+   
+ 
+     
+        
+ 
+                                
+   
+      
+                         
+           
+                   
+                                                     
+                                             # ! & , & % + 3 4 ; 7 < @ > : : @ < < : @ I C @ B B A C ? B B B E B ? A ? C D C F M K L K E E H G E C G D C ? A C E D H A H L K G H G K D F I K H H H D H B C I H G J F G @ G H I K M C H I K E > F J G F K L O M E E H L M J F K D ? > G H G @ D C E G E I D A C G G ? < ; 0 . . * ' ( " " #  
+ #    ! ! ! 
+   !   
+   ! ! %    !   % % & & * ' * / / . 3 0 / / + / + / 0 / / 2 - 4 2 2 1 3 2 4 . + , / - . . - - , + + 2 - , - / - / . - , , , ( ) ) 3 * + - ) $ ) 0 / 2 - 4 , ' + 0 , 0 ) + - 0 , ) * ) ( + + & ( & % - - - * & ' ) * - ' - ( ) ' + / ' ) + ' ( ' ' ) ( + * / ) ( & ( $ * $ % % * % + - ' # # & & $ & & $   
+      
+ 
+          
+ 
+ 
+  
+ ! $ ) % # ( $ "   
+ 
+   
+ 
+ !        
+   
+ 
+  % $ ( & $ ' + $ $ "  % $ % $ ! # " # " # # & " "  " # # % # "   & ' " ! # % # ! " % " ! ! ! "   ! !    
+ # # ! 
+ 
+       
+ 
+ 
+    !   
+     " " 
+ 
+ " # ! 
+ 
+ 
+ " 
+   ! 
+   ! "   "     $ "  
+   ! # " % # 
+ 
+ 
+   ! $ !  !     
+   ! ! 
+ 
+  
+ 
+ 
+     
+   
+  
+ $   
+ 
+ 
+ "  
+   
+ 
+  #  
+ 
+ 
+ 
+    
+ 
+      
+   
+  
+ 
+ 
+ 
+  
+  
+ 
+  
+  
+ 
+ 
+ 
+   
+ 
+ 
+   
+  
+ 
+  
+ 
+  
+ 
+ 
+  " 
+  
+    
+             
+   
+        
+  
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+   
+                  
+       
+ 
+ 
+    
+ 
+    
+                 
+              
+ 
+   
+             
+          
+         
+ 
+  
+   
+ 
+        
+ 
+    
+       
+         
+ 
+     
+   
+        
+ 
+            
+        
+        
+      
+      
+      
+  
+       
+    
+       
+ 
+         
+ 
+   
+    
+  
+    
+  
+   
+ 
+                                
+                                                                 
+ ! # ! ' - + 0 6 9 8 = 9 7 ? @ ? @ B @ : > D ; E C A ? A ? A E @ B > @ C A D F A I K L D E E ? C H H D G D I F C E H > F D K I H B C I @ = E J L G H > D K K L F G C H K A E I A K U O H D L I D E I D G I K P L H K F G K K P P E B @ @ F M I B J E M A D @ I C H K C 8 8 4 / & ) + ' $ # %     ! #   
+ 
+   ! 
+ 
+  
+ 
+  !   
+ &    ' % % % % - , * * ) - - 4 1 2 , . , + - 0 0 , / 1 4 4 1 1 3 / ) ) ) . - , , , 0 ) 1 . * / + . , . , / 1 . / , 0 + * ( , . ) ) . - ) , - 3 - / - / - + * + ) ) - * * , + + , . , & & + ' , . + + ' % ( ( - ) & - * * ( ) $ ) + , - ' * ( ' * - / , ( $ ( ( ) ( ) " ' ( ) $ ( ' ' & & $ & $ "   
+    
+ 
+    
+   
+      
+   
+  " $ , $ ' ) ' " # # 
+ 
+ 
+        
+ 
+    
+    # - ' # ' ' % % & % " & ' #    " " ' % % ' "  ! % $ ! ! "      $ $ ! $ " #   ! ! !  #      !   $ %   ! #   
+ ! 
+     
+    " " 
+ 
+    
+ "   
+          " ! 
+ 
+        #   #    
+  " "   " $ ! 
+   
+   
+ 
+ 
+ 
+ 
+ " 
+   
+  
+   
+ 
+   
+ # 
+ 
+ ! 
+     
+   
+   
+ ! %    
+  
+ 
+ 
+ 
+  ! 
+ 
+  
+   
+ 
+ 
+  
+  
+     
+ 
+   
+  
+   
+ 
+  
+  
+     
+ 
+ 
+ 
+  
+ 
+  
+     
+ 
+  
+  
+ 
+ 
+ 
+   
+ 
+  
+   
+      
+    
+       
+   
+       
+      
+   
+        
+      
+  
+        
+     
+     
+     
+        
+      
+                                                                    
+      
+ 
+         
+         
+                       
+    
+ 
+      
+     
+   
+     
+ 
+   
+  
+  
+ 
+     
+      
+      
+       
+  
+   
+  
+   
+ 
+  
+     
+ 
+ 
+ 
+   
+                                                                                                
+ 
+  " # % ' * 0 1 8 : C ? > = 6 ? = < @ > : 9 : D F E B ? @ B C A ? @ C = C C @ E E K C E E F H D I G B B : F > ? B A A C F F F E F I K J G I E J F G E D D G F I L J G E C H D ? D F F E H G C B F F B G G I N N G E H D K J I H L G B @ F J J B O I J B E F E H C A ? < 1 0 + % ' , ' " $ !     " # !  
+  
+   
+ "   
+   %   !  $ ) , * ( 0 1 3 , . + , . 0 , , . , 2 2 , / 2 - . 1 / 3 . . 0 0 * - - 1 . * * + 2 / 2 , + 2 * - 0 1 . * , 0 . - / 0 , ) ( * + . 0 1 0 / , , . - , ( + , / + 0 + ) + + 0 , + . . - ) % + ( ) , ) ( ' " " ) + ) % , + / + ( & ' ( ( ( ) ' ' * , ) . - , , ( + * , ' " % * ' * * ) ' $ % ' % ( % #    
+ 
+    
+   
+ !     
+    
+   
+   " $ & ' ' % % ' % !  
+ 
+  
+  
+ 
+  !  
+ 
+ 
+ 
+ 
+ ! ( #  $ ' ! $ "   # % #  
+ " # !   $ $ #    # ' $ " " $ 
+ 
+  $  $ " # ! # "      ! !   # !  ! ! 
+   "   
+   
+ 
+ 
+   !   % #  !  
+   
+   " 
+ 
+ 
+    # "   
+ 
+     !    
+ 
+ 
+   %  # !  
+  
+ " 
+ !   
+  
+ 
+ 
+ 
+  
+ 
+  !  
+ !  
+ 
+  
+ 
+  !     "   
+ 
+ 
+   
+  
+ 
+  
+ ! 
+ 
+ 
+  
+ 
+    
+       
+     
+ 
+ 
+ "   
+ 
+ 
+      
+ 
+   
+  
+  
+ 
+  
+             
+  
+   
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   
+  
+             
+ 
+        
+       
+  
+     
+                       
+  
+                  
+        
+                 
+ 
+                    
+   
+ 
+               
+   
+     
+         
+                 
+          
+       
+ 
+ 
+    
+   
+ 
+ 
+ 
+ 
+         
+ 
+      
+      
+ 
+   
+ 
+ 
+  
+    
+  
+     
+  
+ 
+ 
+  
+ 
+   
+      
+    
+ 
+  
+ 
+  
+ 
+ 
+  
+ 
+ 	 
+                                                                                                  
+ 
+ " $ ( , ) - 0 5 > ? < ? > 6 > @ ? @ C A ; = A C B B E @ > A F B ? A @ C D B F L I D C D G L D F F G D A H G A F E E E F I E C F E F A H J F H G E H H I H I G G G H F D E A C E C F G I K D G F F E G F I J J F I E I J A J J I D I C H K D G E F H D K @ I I H A : 3 0 / ' ' & & # # !      
+     ! 
+ 
+         # 
+ 
+  % " 
+ # " & ' - . . 2 / 1 - / - 2 . / + + 0 . + - - 0 0 0 3 / / 0 , - 0 1 , 2 . , / . 0 ) - 0 + * 1 0 / / + - * * - / - 1 - - - , - , + 1 * , , , / , . - * - * * + + 0 - * ) * / * + - , , * + * * * * # , ) , + + ) & + ) + . * + ( ( ( % ( * ( ( % * ) * , - ( * + 0 + ' ' ) & # + * ) + ' ' ( ( * , & ( " !  
+    
+ 
+ 
+     
+   
+  
+   
+   " # ' ' ' " ! ( ( # !   
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+ 
+ # $ # & " " ' $ % & " !   " $ $   $ % $ $ $  " & % # $ ) & !  $  " ! !   ! & # " ! ! % " #     !  !  
+  
+ ! 
+ 
+     
+ "   
+   
+       ! 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ ! ! 
+ 
+  #    "      
+ !   ! ! " $ 
+ 
+  
+ ! "  
+ 
+   
+ 
+ 
+ 
+     !   "      
+     
+ 
+    
+ 
+   
+        
+ 
+       
+ !  
+ 
+  
+ "   
+ 
+  
+ 
+  
+  
+     
+ 
+ 
+    
+ 
+ 
+    
+ 
+     
+ 
+  
+ 
+ 
+ 
+  
+  
+ 
+ ! 
+  
+ 
+      
+  
+    
+      
+            
+ 
+ 
+  
+      
+ 
+     
+     
+   
+        
+           
+    
+ 
+    
+     
+  
+ 
+   
+                 
+         
+ 
+ 
+            
+ 
+        
+ 
+  
+        
+        
+                
+ 
+  
+ 
+      
+  
+      
+ 
+ 
+             
+             
+       
+           
+ 
+  
+    
+   
+ 
+   
+      
+         
+        
+   
+ 
+   
+ 
+  
+ 
+     
+ 
+ 
+ 
+ 
+ 	                                                                                                 
+ " ! $ ( ) - 2 - 0 4 8 9 : : 7 ? @ A @ D J H < = ? = ? A F B D A B A ; < F D F N K H K G G E K K J F E C J G G B F C G H I I L E D C C C G I A E I O K I M K I F B D B I H E C C J K E I H F H J K M M G E H C G J E N I I F M I A B H H K E E E E I K O N E G H G = 8 7 - ) * % ' $ " $ ! " "       
+ !   $   ! & " ! " ' # " " $ & ( - , 1 4 0 2 4 / 3 4 0 1 + ' / + ) - * / 1 - . - - - - . / + / 0 - / 0 0 0 * * / - + ( . 3 1 , + / ) ) + + / . - 0 , / , 1 / . + , - 0 / . * / / 0 0 / 1 + * 0 , - / , * 3 , * * * ' * + * % ( , - * , * ' ( + + ( ) - ( ) + * ) ) , ) + + , . , . , * % * ' # % ) ( + * * ) ' . , ' ) - ( ' % "   
+  
+   
+           
+  
+   ! ! * % % ( '  ) ' & $ ! " 
+    
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  " % & ) # & & $ " $ # # $ # !   # # # % # % & $ $ # & $ " !   # ! #  
+    ! "   # # ' !     # " " ! " " 
+     #   % ! 
+     
+ 
+   
+ 
+  
+ 
+ 
+   
+  ! ! 
+ ! ! 
+ 
+ !   " !   
+ 
+ "   " $ #  
+ 
+   #  
+ 
+ " # " "   # 
+   
+ ! 
+ 
+  !   ! 
+    "   
+    
+  # 
+ 
+   ! " $ 
+ 
+ 
+  
+    
+    
+ 
+ 
+  
+   
+    
+ 
+ 
+  
+ 
+ 
+ 
+  
+  ! 
+   
+ 
+ 
+  
+ 
+ 
+    
+       
+ 
+  
+  
+ 
+ 
+  
+ 
+ 
+ 
+    
+ 
+  
+           
+ 
+ 
+          
+ 
+          
+ 
+   
+        
+           
+                  
+         
+ 
+  
+      
+          
+ 
+ 
+       
+            
+    
+           
+       
+       
+     
+ 
+ 
+         
+  
+          
+  
+     
+                        
+  
+           
+           
+     
+ 
+ 
+              
+      
+ 
+             
+   
+  
+        
+  
+ 
+                                                                                                 ! $ $ % + ( . / 2 / 2 7 : ; > ? B B C @ ? B @ < ; > = ? ? D D H F E E B G D I I K E F J L K I L M G I F B > B H H H E E K J J H G C E B F J G B H J J E H I J J A G K O H S H L F D D E D C ? A N K H G H D G F H E G H L I L H H D H K M G H B E K D J O K G K H @ 9 6 7 - * ) ' % $ # $ $ # " "  
+ 
+     
+  # #    ! & ! " ' & + ' + / . 0 6 5 1 1 2 0 / 5 0 0 . 0 . / / + 0 0 / - 1 ) . 1 0 2 2 , . 1 1 2 0 6 0 0 . 1 1 / * - / , , + 3 0 / / - - 2 - + 4 - . . 3 0 4 0 1 2 2 4 / . - / 0 2 / + . 0 - 2 - + * . ' ) + . - - . 1 ( ' / + & & ' ) ( * * - , - ) * - ' - + * ( ) . . , , + ( , ( & & ) & ) - & * 0 0 + ) * * * , ( + & $ # "   
+ 
+   
+ 
+    
+    
+  
+ 
+    !   % & % % $ & $ " ' ) % " ! #   
+      
+ 
+ 
+   
+   ! "   ( $ # % & + ) "   $ ! ! " # # # $ " " $ # # & # $ % $ % ! % # # ' %   ! 
+ # % ! " " ! ! " # !  
+     
+ 
+ 
+ $ ! ! ! ! $   
+ ! 
+     
+  
+ #     
+   ! # !   
+ " 
+ " $   !   !  # # '   ! & #   !    " # $ "   "   # # " ! 
+     $ % ! ! " "   "  
+  
+ 
+ ! 
+ " 
+  
+   ! # $ ! 
+ 
+ "  ! "   
+      ! ! 
+ 
+ !  !   
+ ! 
+   !         
+  
+ 
+  
+   !  
+ 
+ 
+    
+  
+ 
+    
+ 
+ 
+ 
+ 
+   
+    
+     
+   
+   
+     
+ 
+  
+  
+ 
+   
+      
+   
+   
+ 
+   
+     
+ 
+ 
+         
+    
+    
+  
+    
+  
+  
+   
+  
+ 
+ 
+ 
+         
+    
+ 
+         
+ 
+         
+   
+   
+ 
+ 
+   
+ 
+ 
+    
+ 
+  
+   
+ 
+          
+      
+     
+ 
+ 
+ 
+  
+ 
+    
+ 
+    
+ 
+         
+  
+   
+ 
+ 
+                                    
+                 
+    
+             
+ 
+   
+                  
+ 
+    
+       
+                                                                                                 " " ' ) , , / 4 4 5 : ? 9 9 ? B @ ? A > @ @ = B ? B C C D D D H I L G J A G H K K J K D J L D F K J K I G C D I L I H I K M J H L N G I I H M G G E K D I N J G H G I J I P I J H G D B @ ? A F H J C L H B C I J D G H M K I G I N K M P H J A F L J J L H D D A ; 5 - 1 , ( * ( ( # & " %  " %  
+ 
+ " ! $ $ # ! '   " "   ! % + * . / . / 0 3 2 1 / 2 3 1 0 / / 1 0 5 . - / 3 . 1 , . + + / 1 4 3 0 - 2 1 / 3 9 + 1 2 2 / 1 - 3 0 0 / * 0 / ) , + . . - 0 * ( 2 0 - / 2 0 5 1 . - , + , . / 3 0 . 1 1 4 / - * + , * - ' 1 , 1 * , * ' , ' ' ) ) , * , * , ( ) ) - , , . * * & * , ' + . - * 0 , , ) ) ( ) - + * & , + - ) ) , ' # * ) + $ % " ! ! 
+ ! 
+ 
+ 
+  
+ 
+  "  
+  
+ 
+   $ " # ( ' ( ) & % # ' ' & ( # "   
+ " ! 
+ 
+ 
+ 
+ 
+ 
+      " # ( ) ' $ ( & ) % % ' # & & ' $ ( % % # # #   % # " ( $ # ' ' % " ) & $   " ! # $ "   
+ " " " # " "   " " " !    $ " ! # % $   !   " " # ! " 
+ 
+ 
+ ! # !   ! " " % " $ # #  " # "   $   # $   
+  ! ! % 
+  " " ! ! $ ! !    
+ #   "   !     ! 
+ 
+ 
+ 
+ # " 
+  $     
+ !  
+ 
+  # $       
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+   " #  
+ 
+  
+  !      
+  
+  ! 
+  
+ "   
+ 
+  
+  
+ 
+ 
+ 
+ 
+ !  
+  
+ 
+   
+ 
+ 
+  
+ 
+  
+   
+  
+   
+  
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+  
+ " 
+    
+  
+ 
+ 
+    
+    
+  
+ 
+   
+           
+    
+   
+ # 
+ 
+ 
+ 
+     
+       
+  
+  
+ 
+          
+      
+   
+   
+   
+   
+ 
+  
+     
+      
+ 
+   
+   
+ 
+   
+ 
+  
+   
+                   
+    
+  
+  
+ 
+ 
+    
+ 
+   
+        
+   
+ 
+  
+   
+ 
+ 
+  
+   
+ 
+                                             
+                                        
+ 
+  
+       
+                                                                                                  
+   !   ' & , 0 4 4 : A B > A = @ F B D ? @ G A E A A C I G H E ? F E D J P K H K L I D D H H F B G E L L J J F J J N P N I J H L M K H J D G Q D H G K G G H L K P K I I H L O O K J H K G A B B D M J G F D F H I C A F N H F F G N R N M S H H I K J C Q I F = ; 3 1 / . ' ) " ! " $ $ ! " $ # $ " #    " % % # # %   $ ' % ( / , + 2 3 0 2 2 5 7 0 2 0 . - 1 , . 8 4 8 3 4 4 5 1 1 1 + , . 5 3 2 5 1 / 2 2 - 3 1 0 / / / 1 2 0 - 1 / / - 2 . * + + * / . / - - 0 4 1 - 0 0 5 1 0 , 1 , 3 2 0 0 1 . + / / / - - , + + + + 0 2 / , . . . , . , ( , * + + ) / 0 0 , , - , + 0 , ) + . , ' ( + , + + + . + + / , * ' ' * . * ) ' + * + + * ( ' & " !  
+ 
+    
+ 
+ 
+ !     
+ 
+  
+   
+ # % & ) & * ( & ( ( $ ' $ % #  & #   # #    " " !   
+ "  ! ' & $ & & # % " & % # * & & ' '   # % ' ' 
+ $ " % ( $  # ( ( # $ % ( # $ % ( ( $ $ $ % # $ % # ! ! # % ' & # " ' & " " ' &   ! " # $ & ! " !  ! ! " " " ! % " ! ! $ # !  
+ $ $   ! $    ! 
+ ! % ! # &      $ ! # " % $ 
+   
+  # !     ! $ ! ! 
+ 
+ 
+ ! # $ # ! ! 
+ 
+    "         
+ 
+ # !  
+ 
+           !  
+ ! 
+    ! % " #  ! "   
+     "   
+ 
+ #   ! 
+ 
+ " 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ " !       
+   
+  
+ 
+  !  
+  
+ 
+ 
+ 
+ 
+     
+   
+ 
+  
+  
+   
+ 
+  
+ 
+ 
+ "   
+       
+ 
+   
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+   
+ 
+ 
+    
+  
+ 
+ 
+ 
+   
+       
+  
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+          
+   
+      
+ 
+     
+ 
+    
+ 
+  
+   
+ 
+     
+  
+  
+ 
+  
+   
+ !          
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+  
+ 
+    
+                                                                                            
+   
+                                                                                              
+  
+ " $ # ( % ( / , . : > < @ < > A ? < D A A < @ @ > A B D A E F D F E D D J M J G J I J M I N M B J I I H H C E K H L K L L N K L Q M G M J I I H F B B F E I H O K F J G B L O R M J I I I D @ F C L K A G G ? F E I H E O I A G M J F I I P O J L M K E O J A 7 / / 1 ) + ' %    % ( $ # ! $   " ( " % " # # " $ # "  # + ) + 0 / 2 . 2 3 1 4 8 4 3 1 1 1 3 . / 2 7 7 2 2 3 4 2 1 . 2 2 - - 3 3 0 3 5 5 1 1 ) 2 / 0 / 1 0 . , . 2 1 2 - - 2 . ) - / ) + + - , , - 4 1 5 1 0 / + 0 / / 0 - , . + / . * , - / ) + - * , * ) + , . 0 + , * ( - / / * ( / , + ) + / - . - , / - - ( + ' + ( + + , . . - - 0 2 . * - + ' + , 0 , ( * * ( ) , ) ' ' % " " ! 
+  
+ 
+  
+ 
+ 
+ 
+ 
+  
+     !  
+   ' / ) + ) * ( + % $ & $ & ) ( ) # 
+          !  !  $ $ % % ! % ) % + ( $ % ' # $ # & $ & % ' !  ! $ & $ "  ' % & ' ' # % # % " # % % % ( " " # % # # $ ! " # % $ % $ % $ % % & % $   !   ! !   & ! "  ' & ' " # "    # # ' #  " $ $ 
+     "  " # $ % " # " 
+ 
+ " $ " $ $   ! " # " ! ! $ 
+     "    # $ ' # " ! "   
+ 
+ "  "        ! !     
+ 
+ ! 
+ 
+     
+     
+  " 
+ # "  #  
+  # 
+   " 
+     "  % % ! ! !    !   
+ 
+  $    
+ 
+ 
+  
+  
+    % "   
+   " 
+ 
+ 
+      ! 
+ 
+ 
+ 
+ 
+ 
+  
+    
+ " 
+  
+ 
+ !   
+ 
+  "   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+     
+ 
+ 
+ 
+   
+ 
+ 
+    
+ 
+ ! 
+ 
+  
+ 
+ 
+     
+       
+ 
+ 
+ 
+ 
+  
+ 
+ 
+       
+   
+ 
+   ! 
+ 
+ 
+  
+    
+ 
+    
+  
+ 
+ 
+ 
+  
+ 
+     
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+      
+    
+  ! 
+  
+   
+ 
+ 
+  
+  
+  
+  
+  
+   
+ 
+  
+     
+ 
+ 
+                                                                                                                                                                                                
+  # " $ ) ( * * . 5 < 9 = < B C < = ? D A @ ; 9 ? ? > @ ? A D A @ E D E D G L I H F H D I I I G K J I G J H L J I J K K H K N H K O O L O M F G F H J H J J J M J K E C F I N O L G E E I F C C @ J J G F D A E E O J G N L H R Q M G I G N K J N N I H G D ; 4 / / - , , ) % # & % # $ $ $   $ ! ( %    $ " # ' & $ $ ) + , - - 0 / 1 3 4 4 6 5 2 , 0 1 / 7 / - 0 7 7 5 6 5 : 4 2 1 4 5 3 9 6 5 / 0 0 5 / , - . 2 , * - 1 0 - + - - / - . , . . + . ) + * . 1 / 5 0 0 3 4 2 + ) , / / 1 1 . - + - , 2 . + , , * + & ( * , 1 . , . * , , ) ( / , + * + . * ( - , . 1 , , ) + . , * ( ) ) + . ' , / , * , - , / ) % ' + + * * ' ) ' * , * - * * & % " #   
+   
+ 
+ 
+  
+ 
+ 
+  
+ 
+     
+    ' * + ' ) ) * ) ) $ % / ' # ( & % ! " ! " 
+ 
+ #    # # # " # ' & * * , $ ' $ % " ! $ ' ' % # ' % # % % & ' # # % ( # # $ ( % % ) ( # $ & ' ' ' ! ' % $ $ $ & $ "   " "   $ &  $ & # ! # $ # # " " ! ! ! " $ & $ $ #   # 
+ " $ " ' $ " ! "   ! #   ! $ $  " & $ " " " ! " # #   ' & " ! " $ !      " " !      $ " ! " " ! # " ! ! " " ! 
+   ! 
+ !  
+ 
+  !  
+ 
+ ! ! " 
+  
+ ! "  
+ 
+ 
+ ! # !   " 
+ 
+  
+ 
+ ! 
+ 
+  
+ 
+ ! $ "       ! 
+  
+ 
+ !  
+ 
+ ! 
+ 
+ 
+ 
+ "  !      
+ 
+ 
+ ! 
+     
+ 
+ 
+ ! 
+   !   
+ 
+   
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+ 
+  "  
+  
+ 
+  
+ 
+ 
+ 
+  
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+   
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   ! 
+ 
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+    
+  
+    
+     
+ 
+ 
+  
+    "    
+ 
+ 
+   
+  
+  
+ 
+  
+     
+ 
+ 
+  
+ 
+    
+     
+  
+ 
+   
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+     
+    
+ 
+ 
+  
+    
+ 
+   
+ 
+  
+   
+  
+    
+ "                                                                                                                                                                                                 % $ & ( + ) * 3 4 : 8 : = ; = ? C ? D > > = = ? < @ ? = < = > D H @ F H B B C H G D J I G G H G E J K O L F H J I L H J N H I L M J Q M L E D G K H M N H H K K K F C D L K P K E M J B G I E C G P I E E A H O N L I H P K K J G K I L O K I K G H G @ = 8 7 + - . * + ) % ! % ' 
+   " # % $ " " ! # $ #  # $ ( , ) % , 7 5 . 0 0 4 4 2 3 2 3 2 4 2 0 2 / / . 3 4 4 2 1 , 1 2 4 , 1 8 2 4 4 4 1 / - 2 0 0 . / + ( ) . 2 1 / 1 4 . / , . , / 1 0 1 , + / . 0 . 0 / 2 3 7 / / . / - + . 0 - , / 2 1 3 + . + * * ) + , * + - . * , , / % * ) . + + + ) ' + 2 . , - / - ) ' . 0 . ) * ) + 0 - ) * , ( * , * ) , ) ( * , * . * + ' , ( ( ) & ' . % $ # ! 
+ 
+ 
+ 
+  
+  
+  
+ 
+ 
+  
+   " ! 
+  ! ) ( ' * % * ) $ # # - ( ) ( ( $ " & %     
+       ! ! # % * ( & $ ' & & ' # ! !  " ! # # $ $ # $ # $ # & %   $ $ # " # # & ( & # & % $ % & " ! " " $ " ' # $ " # ! ! # # ! # % " " # ! ! # " " ' " #  " & $ " # # # #   $ % % " # " !   " $ " # % # !  &   # ! $ ! # #    $ % $  
+  ! 
+ % 
+ # $  ! 
+ 
+ !   # # " $ " " !   # !        "    ! #   
+ 
+ %  " !     !    " 
+ 
+ 
+     
+ $ !  
+ 
+ 
+ "  
+   !     !   " 
+    
+ 
+  
+ 
+ 
+ 
+   
+    
+   
+   " "   #  
+   #   
+    
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+     
+ 
+        
+ 
+ 
+      
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+    
+ 
+   
+ 
+  ! 
+          
+ 
+     
+   
+      
+ 
+   "   
+ !  
+ !  
+ 
+ 
+  
+ 
+  
+   
+ 
+  
+   
+    
+     
+ 
+  
+   
+ 
+ 
+       
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     !  
+  
+ 
+ 
+   
+ 
+  
+ 
+ 
+ 
+     
+ 
+  
+ 
+   
+ 
+ 
+  
+                                                                                                                                                                                               
+ # " ' & ) , 1 . / 5 4 7 = : @ E ? = ? ? @ C = @ B B ? C > C C G D D D K C B F G I E K K M I F B B I I J I F D J J P J I K J G L T Q L M J C H I M I H L D C H E K L L F J K Q K E F H J J C K I J P K H G A E I K L P N O L O K J K F E O J G B F C G @ 7 8 1 * + % # ' ) ( ! " $   !      $ % " !   
+ ! % ) ) ( * 0 6 4 1 3 1 3 / 2 5 3 3 4 7 5 / 3 . . 3 2 5 7 3 . , 0 / 5 . 0 5 1 2 0 + - . / . + + , + * + , + 4 2 , , 2 - 0 - - , . 0 . , ) - - 2 3 1 0 1 0 0 / + 1 / , + , - 0 0 0 / 0 / - / 0 , * ( + . * ( . + , . - 0 + + + * - ) * , ' ' + 2 / ( + ( ( ( - ) & ( * , - ) , + ' + + ( * ' / - ' % ' ( , % ) ) ) ( ) ' * ) ( * * ) & # " 
+ 
+ !  
+   
+ 
+   
+  
+ 
+ 
+      $   " $ + % ' & & % ' $ , & $ & ( ! "   #  
+ 
+ 
+ 
+  
+  "  " ( # $ # # & % ' * # "   % % $ ! " & ( $ % % $ # " " $ $ " # " & # % " # # ! " " $ " ' " " ! $ # % # " " # # $   !   $ " 
+ " ! 
+ 
+ 
+   " ! # $ $ $ ! " # % # $ $ " & '   "  !   ! $ # $ !    ! 
+ !   # ' $ " !       # "   
+ ! 
+ ! ' !   ! " ! " #   # %     " "  " $ # $ "     " # ! 
+    $ " 
+         ! "  " 
+ ! "   #   !      
+  !  
+   " "    ! 
+   
+   
+   
+  "    
+ 
+ 
+  
+  
+ 
+ 
+ # " 
+     
+ ! 
+  
+ 
+ 
+ 
+  
+ 
+   
+   
+ 
+  
+ 
+ 
+ 
+  
+ 
+    
+   
+ 
+  
+ 
+ 
+   
+ 
+   
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+   
+  
+ 
+  
+     
+  
+ 
+ 
+   
+  
+   
+ 
+   
+  
+  
+ 
+ 
+  
+  
+ 
+   
+ 
+ 
+     
+  
+   ! ! ! 
+     
+ 
+     
+  
+    
+ 
+ 
+ 
+ 
+     
+ 
+ 
+    
+ 
+  
+  
+    
+ 
+   
+    
+  
+ 
+ 
+   
+   
+ 
+  
+ 
+ 
+    
+ 
+     
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+  
+ 
+                                                                                                                                                                                               
+ " #  ' - + + 2 6 5 9 < ; 8 D B @ > B = A D E > E D = D H E C D E F G L D D J E L B G F E E H J G D J N N H F I G N M F M L I M O J D F K G K N I J L G G J H D H H H J G N L H L E H I H E F L J I H J H C C I Q H M M M E G I H E H E L F O G H @ ; ; 3 / . ' $ ' # $ $ $   # " "   $ # # ! $ $ 
+  " 
+ 
+ # % % ) + 3 5 3 4 1 1 1 3 . / 5 1 3 4 6 2 4 4 , - + / 3 1 / 0 , / 0 1 0 / 2 - 1 1 . - , / 1 1 . . ( * * . + 0 4 + , / . / , . - , / . , - + , 0 , * 1 * ( - 0 ) ( + , * + ) * - 0 / - / , , ) ) , & % & ) * , . ) * ( * * 0 * ' ) ( % % % & ) . + ) , % & & * ) ( ) . - ) & + $ ) ( ) * * ' - + ) ' ) % ( ' * # ( * ' % , * ( ( ( & ( $   
+  
+ 
+ 
+    
+   
+ 
+    
+     
+ 
+ 
+   % & # " & % % & # & & % & ' % % $ " % ! 
+ 
+   
+ 
+ 
+ 
+  " # $ $ ! " * & & $ $ $  & % $ ! # $ # # $ " ' % $ " ' % ' # $ % % # " # & ( & " ! #     ! # % ! $ ' ! 
+ 
+ # $ "     % ! 
+    
+    # " 
+ "   & "   ! ! #     ! # !        $ % % 
+ 
+ "   " 
+ 
+ !   # " " # !  
+    
+   
+   
+ 
+  
+ ! 
+ 
+       " # " ! # 
+   " 
+ 
+ !   
+ 
+    
+ 
+   
+ ! # 
+    
+  # " 
+ 
+  ! 
+ 
+ 
+   
+ 
+  
+ 
+ 
+  
+ 
+ " "   "  
+  
+ 
+ 
+  
+ # !  
+  
+ 
+ 
+     
+ 
+ 
+   
+ 
+   
+ ! ! 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ !   
+ 
+   
+ 
+ 
+ 
+ 
+   
+     
+ 
+      
+ 
+  
+  
+   
+  
+     
+    
+  
+ 
+  
+    
+     
+ 
+   
+  
+                
+ 
+  
+  
+    
+  
+  
+ 
+ 
+     
+ 
+ 
+    
+     
+    
+  
+  
+ 
+ 
+                
+    
+   
+ 
+  
+  
+     
+  
+ 
+ 
+ 
+ 
+    
+ 
+                                                           
+                                                                                       
+                                                   
+ 
+      * , . , . 5 3 5 = 8 5 < ? < > C B @ : < < A < ? ? E @ @ G A G L J A A E D H G H E B ? D G C F I C H K N D I J B F @ F B E E G E I I F H H K K G I E D F F H I G C K K J I I C G D C E C J H E H C E I E H O O K F K L G E I C E G F C J H A = 2 1 . * '   # ! " #   # " # " 
+  # & " !   
+   !     ! # ' ' 0 5 3 3 3 / / 2 4 1 / , 2 2 . 6 0 3 5 1 . . 0 0 + . 8 3 0 - / 3 0 * 0 / 1 - . ) ) + + . + + ' & + - ) - 1 - + ' * / - * / - , , ) ) & + ) ) * . ) + % ( ( ( ) & & $ ) + ) * + 2 + ' * % , / % % % ' + * + * & * ( & & ( % % ) & + " ( ( * ) & - ( & $ ) ' & ) ) ) + ( ' " $ ( & % ( ' ) % ) + ( ( % & & $ # ) ( & & * * * ) & $ $ # 
+      
+   
+ 
+    
+ 
+   
+ !     " % % # % % # ( ( % % % % ! % & ' # 
+ 
+ ! 
+ 
+ 
+   
+  
+  & # % % % # ' " ! 
+     $ & # $ ' & " " ! "  ! " # #   "   # (     $ $ # $ !   
+  ! 
+       
+   ! 
+   "   $ !  
+ 
+ !  % #  "     
+ 
+ " 
+  
+  
+ 
+   # !   # " "  
+ 
+ "  
+ 
+   !    
+ % % 
+ "  
+  "   
+  
+ !   
+ 
+  
+  !    
+ 
+ !    
+  
+ 
+ 
+ 
+  
+      
+   
+ 
+ 
+   
+   
+     
+  
+ 
+   
+ 
+ 
+  
+     
+   ! 
+       
+ 
+ ! 
+  
+    
+  
+   
+   
+ 
+     
+  
+ 
+  
+   
+ 
+    
+   
+   
+   
+   
+ 
+ 
+   
+     
+  
+ 
+ 
+   
+     
+  
+ 
+                        
+          
+ 
+  
+                        
+           
+                                    
+ 
+      
+       
+ 
+           
+ 
+ 
+   
+                     
+                           
+     
+          
+ 
+                                                                                                                                       
+ 
+ 
+ 
+ # ( ( * - - 3 3 9 7 9 = ; > : < A B 9 6 ; @ > @ = > @ @ > B = @ I H A C C D A D F C @ F E C B I E F D D E K J G = D F K E D B D I B C ? C F C H H J H H C @ J G B ? I H J I F E F F H @ H K K H H B G G M E I E C C H K E C C B C B F F D B < 8 5 0 ( ' % "   "    
+  
+ ! # ! 
+   $   
+ 
+ 
+    # 
+ " + * , / 5 1 2 0 2 1 3 4 , - 1 3 . 0 0 , ( , / / 0 * + + / 3 1 2 * 0 2 1 . , - 2 2 0 + . + ) ' * . ' ( / 3 3 * - + . + ( ' ' & + * - , + & $ ' ' 1 / - + + ( & ' ) & * % ( ( ( % * ) * # $ ' ' * & ' ' % # - + ( * ) - ( * ( $ # $ $ ' + ' % $ % + ' + ( ( ( ' ' ' + * ) ) , ( ( & ( - % ( + ( ( ' ' ) ) & ( $ & # ( ( ) ' % ( ) % # # $ ! 
+ 
+ 
+        
+ 
+        
+      $ % "  # % ' ( % ! # " ' ( % !   
+ ! 
+ 
+ 
+ 
+   ! 
+   % ' % ! ! % #     ! ! # !   " $ $ " !   !   " # ! #   
+ " # # 
+ 
+ 
+ $ #  " ! " 
+         
+      ! "    !  
+  " 
+ ! $ 
+ ! 
+ 
+ 
+ 
+  
+ "  
+ 
+ 
+    #  ! "  
+ 
+   # "   
+ !   
+  
+      
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+      
+ 
+  
+ 
+    
+ 
+  
+ 
+   
+       
+ 
+ 
+ 
+   
+     
+  
+     
+         
+  
+   
+ 
+   
+   
+ 
+ 
+  
+ 
+  
+     
+     
+  
+   !    
+                                               
+                                 
+                      
+    
+ 
+               
+             
+                        
+ 
+       
+          
+            
+                  
+     
+    
+      
+ 
+ 
+        
+ 
+    
+                  
+     
+    
+ 
+ 
+ 
+ 
+                 
+                                                                                                   
+  # ' ( * * - / , 4 : > : 6 < ; 8 > > A ; 8 ; : B G A ? < ? @ A < B D A E C B B B H D > A @ @ A H E J H A B B G F H E C ? ? @ A E I O G D E G H A I I E L G B @ G I C B E E F E E D A I D @ H J I L E F G D G B G A E > E C O E A B A D M E ? ; 3 4 / , ( $ $ " !   $  ! 
+ 
+  $     "  
+ 
+ 
+  
+ 
+ $ # ' ( . + 0 0 0 5 5 5 / / - 0 / 0 / 2 3 - 2 0 - ' - / ) + - + 4 / 0 - , 0 - - / / 2 - + * - / . / ( - ( * - 2 . . ) + - / , / ) ) ) + ' % ' % ) ' ( , . * * + & $ * ' ) ) & ( ' ' & ' + * & ( * ' ' ( ) * & & * & . - + , ' ( % & ' # ' & % % & # & . ( ( # # ( , & ) , * * , * + + ) - * & % % ' % * ' % ( & & # $ & ' * ( % ( ' % % & % ! 
+    
+      
+     
+ 
+  
+ 
+  
+ " % ! !   ( ( ( " % ' &  ! ! ! # #   ! 
+ 
+      
+ 
+ 
+ 
+ 
+ # % !   % $ #    ! !    
+ 
+ #    ! $    "   #  
+  ! "   
+ ! #  ! 
+ 
+ 
+ !    
+ 
+ 
+ ! 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+   #     
+ " 
+  
+   
+ 
+ 
+  
+   # 
+ !         
+   
+  
+ 
+       
+ 
+ 
+ $   
+  
+ 
+     
+ ! 
+ 
+ 
+ 
+  
+ 
+ " 
+ 
+    
+  
+  
+ 
+ ! ! 
+       
+ 
+ 
+  
+ 
+    
+ 
+     
+     
+  
+       ! 
+ 
+    
+  
+                           
+     
+ 
+                                           
+  
+         
+                  
+                                                           
+ 
+                
+ 
+ 
+        
+                           
+                     
+   
+ 
+   
+           
+     
+ 
+       
+    
+               
+     
+ 
+           
+         
+ 
+ 
+                          
+                                               
+  
+                       
+  # & * , + 1 , 0 9 : 8 6 6 8 < < A ; 9 8 ; = ? A < 9 ; @ @ C B > D G H ? < C D H C H B H G I J I B F B ? D E B ? F D > @ D B D H F F B G C E G K L E C E E E C D N H K B C D > > B D C C D F B B F I H I E L D C C J K E D J F B H H H G @ 6 3 1 ) ) # & #   " "   "   
+ 
+ " " $ "  
+    
+ 
+ 
+ ! ! # ) ' - + 2 6 , . / 0 - / + 0 3 3 ) - 5 / - . ) ' ) , + + - . 4 / . . + * + 0 . - , , ' ( ' , / - % & , , + + , - + ) , . * , ' - + ) * & $ # ' % ' * - / ' ' & % + * & & % ) $ $ ' ) $ & ' , ( * * % ' ( & % & # ' ) ' ( # $ ( $ & # ' ' * & & ( ) / ' & $ " & % ( % % % * ( $ # ' ' * ' $ ' ( * % % # & ' * % # ( ( & % % " % $ % ' $ % "  
+  
+ 
+ 
+     
+ 
+            # ! # " $ $ $ $ " ' % &      
+ 
+ 
+   ! 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+   
+    ! 
+ ' " " $                !    !  
+ 
+ "   
+ ! 
+ ! " 
+  ! 
+  ! 
+ 
+ 
+      
+  
+       
+ 
+    
+  
+ 
+  
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+  ! 
+  
+ !   " 
+ 
+    
+ 
+  
+    $ "  
+ 
+ 
+ 
+  
+ 
+ 
+  
+      
+ 
+   
+    
+  
+ 
+ 
+ 
+       
+           
+          
+ 
+    
+               
+                                              
+                                         
+        
+                               
+                                                                                                             
+ 
+ 
+  
+ 
+ 
+   
+ 
+  
+  
+ 
+  
+ 
+ 
+  
+ 
+  
+        
+   
+ 
+ 
+    
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+   
+ 
+ 
+    
+    
+ 
+  
+ 
+ 
+ 
+                                                                                                
+     ( ' ( * * 0 3 5 6 : : 7 7 ; < 7 = 9 < D B C B ? > : ; > > A > D A @ D C B G C A B E D E E I B A B E J H C I F C E C G E ? D C E ? G E I B K K L H A D G I C I C L G G E H E E B B G D C F H H ? C C @ I M I F D H N N B = A B C G D C E 4 1 5 3 + & ' $ ' $   
+ " #   !  
+ #   
+ " # % 
+     " % ) - 0 2 8 2 . - 3 4 - . 0 0 - / + , . . 1 0 + ) * ) * - 2 + - 0 1 0 - , + * + - - , ' * & ) * , * % ) ' * , - % * + - * % ) + * , ' ( ) $ ( $ ( % + ) * + * - ) ( ) ( ( % $ * ' , ' ) ) $ % & * - ) $ ( ' ) + ' ' ( ' ( & % % " & ( $ ' , ) & ' ' , % # ) & ( % " ( & ( ( ( & $ ( % % ) ' ( & ( $   & ( % % ' ' # ( # ' ' $   % & * & # " %   
+         
+ 
+ 
+       
+     ! " " "   ! ( & $ # % % % # ! 
+ ! #     
+ !        
+ 
+ !  !   # %  ! $  " " ! # 
+ 
+ 
+  
+  %   
+ 
+      
+ ! !  
+     
+ 
+ 
+  
+ 
+     
+      " 
+ 
+  
+ 
+  ! 
+ 
+    
+ 
+   
+ 
+  !  !   
+  
+ 
+  
+  
+ 
+ 
+ 
+  
+ 
+ !  !  
+ 
+   
+ 
+ 
+ 
+      
+ 
+  
+ 
+ 
+   
+   
+ 
+   
+           
+ 
+    
+      
+ 
+          
+   
+  
+ 
+           
+        
+              
+     
+         
+    
+  
+                                                 
+                                                                                                                            
+                                
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+   
+ 
+ 
+  
+ 
+ 
+  
+    
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+    
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+  
+     
+ 
+ 
+     
+  
+    
+  
+ 
+ 
+                                                                                                
+    $ & ' + + ) 1 5 2 7 ; 9 : < ? < 7 < < ? D G J > < > ? < < B < C G C ? ? @ > C = C B G B G F G H C D F H G D G D H H I H H E @ G E H M H > G E G J B C G L H G F E D C G G C C E F C E M G L D G F B I D D J D E C G F L C B H C E A E B ? 5 2 5 ( * ( ' ) % #   
+ 
+   ! " ! 
+ 
+ 
+ ! $ ' ! 
+ " $ % - - 1 3 / 1 1 2 / . 1 * 5 0 / 2 + , 1 / , 3 1 * . / + - - - + / - 4 0 2 0 * + , 0 . - ) * - ( - * * 0 - ( * . - * , * - / ) * ( ) ( % * - + & $ & ( * * ( ) * ) ' ( . / ( ) % & # ) & + * ' ( $ $ , ( $ ) ' + ( ' ) ) ( ( ) % % " % * ( * ) % * & ' ( & $ ) ) + % ( ) ) * ' ) ) * ( & * ) ' ( & + ' & % & $ % ) ) % & ( ' ' ' & $ * * ' % # # $ !    
+       
+     
+   
+  
+ " " ! ! "  $ % # & % $  % " $   ! ! " ! 
+   
+ 
+        
+ 
+ 
+    '  ' # ! ( % !    %   
+   
+    
+    "     " " !  
+   ! 
+ "     
+ 
+ 
+ ! 
+     
+  !  
+  
+  
+ 
+  
+ 
+ 
+ 
+ 
+   
+  
+ 
+ 
+  
+  
+    
+    ! ! "   
+ 
+     ! # 
+ 
+  
+    
+     
+ 
+   "    
+       
+   
+  
+ 
+ 
+ 
+ 
+ 
+                 
+    
+ 
+    
+    
+ 
+ 
+         
+         
+     
+ 
+ 
+  
+   
+        
+   
+                                                                                                                                                                                 
+            
+            
+ 
+ 
+    
+  
+    
+ 
+ 
+ 
+   
+ 
+    
+ 
+ 
+  
+      
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+  
+ 
+    
+  
+ 
+    
+  
+  
+  
+ 
+          
+ 
+   
+ 
+ 
+                                                                                                 ! ! $ # + - + 4 4 3 7 6 = 6 6 9 : ; : 7 ; > A > E ; @ H > > B D F G > D E B H E G B D E B D > F I K I D F F I E D D G C G E D D @ @ G N H F F H G E E E @ F F I K G I F G J D C K H F H L H F H C G H F H D D D K H C E E F F F H E H A @ ; ; 3 / + , ( + % ( ' " 
+    ! # ! $ #   "   !   !   
+ % ( ) 2 . 3 2 0 2 5 , 0 2 0 , + / 2 1 / - 2 / / 3 2 . 3 , - 1 4 / . 3 / / / 1 / - , 2 * - , * . . - - - , + + ( . 2 ) , , ' * / + + - , ( ) ) , . ) ) ) ) * , , + , . , * * ' ( & % & * + ) * % ( ) ' + , * ) * ( ' ( ( , ) ( $ ( ' ( ' ( ) ) ( ' ( ( ) ) & ( ' % ( ' . ( & ' % % , * ( & & $ + ) ' % ' ) + $ ) ' & % & ( $ $ & % ' ( ) ( ) ' ' # " % ! !   
+       
+   
+     
+ 
+   ! & # % " % )   % $ " ! $ % % "   " $ !    #   
+ 
+  
+ 
+    
+  $ $ # ! ! ! " " 
+ #   ! " 
+ # 
+ 
+ " " # " %  
+     " % " 
+ 
+ 
+ 
+ ! "    # ! 
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  " 
+    
+  
+     
+    
+   
+  
+     
+    
+  ! 
+ 
+ 
+   
+   " 
+ 
+ 
+ "  
+ 
+     
+ 
+   !  
+   
+        
+ 
+  
+ 
+   
+ 
+ 
+       
+    
+   
+    ! 
+ 
+  
+ 
+ 
+ 
+  
+ 
+     
+   
+  
+ 
+      
+ 
+ 
+   
+         
+ 
+       
+ 
+  
+   
+                    
+       
+                                        
+      
+    
+       
+                           
+    
+           
+            
+ 
+            
+                                                             
+   
+      
+ 
+ 
+ 
+       
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   
+  
+    
+       
+  
+      
+ 
+  
+   
+ 
+ 
+      
+     
+ 
+  
+                                                                                                  
+   $ $ # $ ( , . 0 4 4 6 : = 7 7 9 7 > A > < : @ > = C A D C D B F B C F E B F M H C J F F F D O J G G H K K G H B I F E H K I H H H I H D E G G F K E B A L H K I G F G K F G H J M F J O G D H F B G J J H C B H J K D B L M H K G I ? ? 4 3 4 - ) * $ ( $ % ! 
+  " $ ' # $ "  
+ 
+         " $ & + 2 3 5 4 1 3 2 3 4 4 2 + * / . 5 5 / / . . / / . / . - 2 1 - 0 * 1 - . - - 0 . - + * , 1 . . 0 - , / - ( % & ) , 0 * * + % + , ' ( + * ( , + 0 - + - / / . - + ' , , ' * * * + # # ( ' * ( ( ( ' ) , , ' 1 / ( * ( ) ) * ) ) ) + ) ' ( ( % $ * ) ( ) ) + % " ( ' # ) + ( ' ' $ + * + + ( $ ' & $ # & * - % * & % & % ' % $ % ( ( ' ) ) + * ( & % ( $ 
+  
+       
+ 
+  
+ 
+    
+ 
+   # ' " # ! % & $ ( # " $ % $ " "   ! #   % " #      
+ 
+ 
+  
+ 
+ 
+ $ ( % 
+  $ % (   $   ! $ $ !     % ! " ! $ 
+ $ "   " # 
+ 
+        !  # 
+ 
+  # 
+ 
+ 
+  
+ 
+ #    ! 
+ 
+ ! 
+ ! # # 
+ 
+       
+ # 
+  
+ 
+ 
+   
+  
+ 
+   
+   
+ " 
+ !  
+   $ "  
+ 
+    !   
+ 
+  
+      ! 
+   
+ 
+    
+ 
+   
+  
+          
+ 
+  
+    
+ 
+  
+        
+  
+ 
+ 
+ 
+ 
+     
+  
+ 
+        
+ 
+  
+   
+  
+        
+ 
+ 
+    
+ 
+ 
+   
+  
+ 
+  
+  
+                          
+   
+ 
+                                                                   
+                                             
+                                                
+         
+          
+             
+ 
+  
+  
+              
+    
+ 
+  
+  
+      
+        
+ 
+       
+ 
+     
+ 
+ 
+      
+  
+ 
+                                                                                                
+  ! ! $ % + + / , 5 3 < ; < : ; : = = > A > ; = A H G B B C C B C E G F E A F D B B H D H D K E I I D A M N M H C H D J M M K F H K S K G G G E A E A A B L F G E H I I H I G L G K J K L G @ > C A F D L L J C @ H H F F J H G E A < ; 9 4 2 . , ) & & ( $ $ " " ! 
+   # & $  
+  
+ " # & & # ) - 0 2 3 6 4 0 / 6 1 7 7 2 2 / - . 2 0 , - 1 / 2 0 1 . 2 4 0 / 2 / + + + . 2 + + / + + - . 0 2 0 , , - 0 0 , ) ) , ( ) ) - 1 - ) 1 + * + + 0 , , 1 0 ) , / , , ) * , * * - * ) * ) & % * ( , * ( + ) ) , + ) - . ( + + , + / , + 0 , + ' ' & $ ' ) & ' ( ( + , ( * ) $ # % ( ( ) ' * & ' ( ) ( * ' , ' % ( ( ' & ( % ( * ) $ $ $ ' ' ) ( ' ( & ( ( ' ' % $ $  
+ 
+ 
+ 
+   
+        
+  
+  ! " % & $ & ( * ) ( # $ ' & $ %   " ' % $ ' $ "  
+    
+ 
+ 
+ 
+    " $ $    & # & ! 
+ ! # # ! % # " '   " "   "   $ ! " # " ! ! 
+  !    
+ "   # ! 
+ ! 
+   
+   
+ ! " & ! 
+  " ! ! "   " $   
+     
+      " ! 
+  
+  " !     # " # ! ! ! # ! 
+ 
+ !   " " 
+    
+  
+ 
+  
+ 
+ 
+ 
+ ! "  
+ 
+ 
+ 
+ ! ! # 
+ 
+    
+ 
+ 
+  
+        
+   
+ 
+ 
+ 
+ 
+ 
+ 
+      
+  
+ 
+ 
+ 
+ 
+ 
+    
+  
+    ! 
+ 
+       
+         
+   
+ 
+ 
+  
+ 
+ 
+  
+  
+  
+ 
+  
+ 
+     
+              
+  
+   
+   
+    
+    
+ 
+ 
+    
+ 
+                                                 
+       
+     
+  
+ 
+      
+      
+                     
+ 
+ 
+              
+                  
+ 
+        
+   
+                 
+                              
+    
+      
+      
+  
+  
+                    
+       
+   
+       
+ 
+                                                                                                   " # % ( / . / 0 5 < = B B < : : > ? ? H @ = < @ C D B @ C A D C A D I F G L Q G C B = M G I C D F I D F N P J I H I L O O J J L J W L F E E D H F D F C D I H G I H K L G J E L J N O H H G D H H C G Q K J A F F K I M N D I E < 4 7 7 1 1 , ) ' % * ) ( & % # $ " # ( & " " 
+ 
+   !   % ( , ( - 6 9 8 1 4 5 6 6 5 7 1 / 6 0 1 . / 1 4 0 2 + + 0 0 , 0 1 , 3 7 6 2 , , 1 4 , + * ( + 1 . * 0 3 1 + ) - 2 . , . * 2 + , 1 1 + ) + . * 1 / / ) , , 2 2 - . - + + , - + + ( ( + . , ( , / * , ) * ( & ) ) 0 & / , , , - & ) , . , 0 % ' & ' ' ) ( * ) & $ ) , , , + * * ( ) ' + ' % ' ( ) & ' ) + ) + + * ' & ) ( * ' ) , / + * ) ' 0 - ( $ * ( ( ) ' + ' & $ !   
+ 
+ 
+  
+  
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+ " " " $ ' % $ ( + ' ) % ) & & # $ # # ' ) $ # # " " ! " $  
+ # # " ! 
+   $ "  # % ) ! 
+ " " ' # $ # % % $ % # "  # $ # # !   " "     " # "  ! " " !   ! 
+   
+   # ' $ $ ! ! ! # # $ "   " %     ! !    $ ! ! !  $ & "  
+ $ " 
+ 
+ ! % ! ! 
+ " 
+    " $   #     
+  
+ 
+ 
+   #     # 
+ 
+ $ 
+       #     
+ 
+ 
+       
+ !  
+ 
+  
+   #  
+ ! ! 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   
+   
+    
+ 
+   
+ 
+  
+ 
+ 
+     "  
+  
+    
+  
+  
+   
+   
+ 
+ ! 
+ 
+ 
+ 
+  
+ 
+ 
+     
+ 
+ 
+           
+ 
+       
+   
+ 
+ 
+    
+  
+  
+ 
+       
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+            
+ 
+           
+    
+     
+       
+  
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+ 
+   
+   
+    
+  
+  
+   
+           
+             
+    
+ 
+     
+     
+      
+ 
+      
+  
+ 
+                                                                
+                           
+                                                                                                                
+  ! # & ' . . 2 2 4 7 8 > = = 9 ; 8 A B C A C A = B @ D C C C G A F D I G H I G C @ F E G D A G J C I N G F M K J E L I O N L M M L O J G D C G H N M J H G L M I H I M J D H J M L K O J F D G B H C E K N K G H I H I H M D I B = 3 4 2 + ' . ) ' ' ( ' ' & $ " # ! " $ (   # ! ! % " $ # * , . / 6 : 5 4 4 4 8 ; : 4 4 , 1 3 0 4 0 1 2 0 1 . 0 2 - , - 1 2 3 5 3 2 . + - * . 3 1 ) + / 2 / 0 / 1 2 / 1 2 2 0 , , 1 1 3 , 0 ( * + , * * , + / , ) . - , / 0 2 - . * ( ' * * - , - - - + * * * ) ( ) ( * 0 + 0 . / / ) ' ) ( + 0 1 , * ' ) ) - * ( ' * ) ) ) $ + ( - - ) - ) + ) ' ) & ( ' % ) * * ( ( ' ) ( ) ' * ' ) ( ) + , * ' + * ' + ) & % ) ) - * ' "   ! # 
+  
+    
+ 
+   
+  
+    
+ !    ' $ ' % % ' ' ' ' + ( ( % $ % # % ' " $ # # # & " % $ 
+ 
+      " ! $ % # $ ! # & " $ " % $ # " ! & & $ 
+ 
+ ! " " # " " " $ ! 
+   # % " ! # "     ! 
+ !    " % !       " $ & $ $ " #   % '    " $   ! 
+ " !   # # # # ! # & # !    # $ # " # # " $ ! $  # $    " $ '    
+ 
+     "  ! # " 
+   ! 
+ !        
+  
+  ! 
+ 
+      
+ !    " 
+  
+      
+ 
+ 
+  ! 
+ " " 
+  ! !  
+ 
+  
+ ! ! 
+ 
+    
+    
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+    
+ 
+ " 
+ 
+ 
+ 
+ ! 
+ 
+ 
+  
+ 
+ 
+  
+  
+ 
+    
+  
+   
+  
+ 
+ 
+  
+        
+ 
+ 
+  
+  
+  
+    
+  
+    
+  
+   
+ 
+  
+ 
+  
+ 
+ 
+  
+          
+ 
+   
+  
+        
+ 
+       
+ 
+ 
+ 
+    
+     
+  
+ 
+  
+ 
+    "     
+  
+ ! 
+   
+    
+ 
+                      
+  
+ 
+  
+     
+     
+  
+  
+    
+ 
+   
+  
+ 
+ 
+      
+ 
+   
+                                                                                                                                                                                                 !   ! $ & ( , . / 3 5 5 8 ; < ? < : > > @ > > D ? < @ = = @ A B A E I ? D E J H H E A B D G J C G I E E I I D J I P K J J L I M N G O J F B G H N L P N J G H L K G F H J I E I K D K J G H O O O N K H G I G C F H H H I L D D A = 8 1 0 - + , ' ( ( ) $ ( % # # " $ # # % # 
+ ! 
+ $ ' & ! % + / 0 1 4 6 . 2 4 7 6 5 9 2 0 / 4 1 / 3 5 4 4 3 7 7 4 . / 5 - 1 1 / 5 1 0 . + - , / / , , 0 2 1 3 . - / 4 0 0 2 6 1 , / 0 / / / 1 / / / , - & & , , , + ' - 0 . 1 0 * ) * * . + - , * - * ) + + ( ) ' , ( ) + , + / 0 2 * + - ) * + 0 / + ' * , - + * * + - , ( ' + . + * ' + 0 - * ( , ) ( ' ' % ) * ) ) ( ( + ) % ' ) * + , + & + * & ' ( * ) ( # ( ( ' * , ' # ! 
+ 
+ 
+  
+ 
+ 
+ 
+   
+ 
+   
+ 
+        ' $ " & ( ( $ * + ( ) & % ( # $ ' % ( ' " ! ! ! ! !    
+  
+ 
+ " # ! "  # " % 
+ $ " % ! % ! $  ! " % " $ 
+ " # ! 
+  
+    $ $ " # #  !    # # "  
+   
+ ! !  " " $ " $ # ! # & !  " "   % $ # " 
+ " # ! #  $ " ! $ # $ " ! 
+ 
+ " 
+ 
+  "  ! "   
+    "   ! ! " "    
+ !        
+     ! 
+ ! 
+   
+ 
+   
+ 
+ 
+ 
+ 
+  
+   ! 
+ 
+ ! 
+  ! !   ! &   !     
+ 
+  
+ 
+ "   
+ "   
+ 
+   
+  ! 
+ ! 
+ 
+   
+   ! 
+ 
+  
+ 
+ ! 
+ 
+   
+ 
+    
+ 
+ 
+ 
+   
+ 
+  
+        
+     
+      
+  
+   
+ 
+     
+    
+  
+   
+   
+ 
+  
+          
+ 
+   " 
+ 
+   
+ 
+   
+     
+ 
+    
+   
+    
+   
+     
+   
+              
+  
+            
+ 
+  
+       
+ 
+        
+      
+         
+                   
+    
+    
+ 
+ 
+   
+                                                                                             
+                                                                                                             
+  # # ( ( ) / 3 2 4 8 < ; > G @ ; : ? < 9 = ; : = C A @ @ = @ D D A < A D E K K C ; D C @ E G G F H I D J I H M O L G J I E H P I M Q E A A H I M P M L N D D J D H E J I H P Q F K G H I Q H M C I H F O H E G D E K F H F C > 9 7 5 - / / + ( & ( # " " # " " $ " $ # # " "   " " & ' + / 1 4 0 4 4 3 5 2 9 3 3 2 9 0 4 2 / / 1 1 1 4 3 1 1 4 2 / , / 0 1 0 2 . . , - 0 , 3 * , - - 1 1 / / - , . / 2 / 2 ) 0 1 / + , / 1 1 1 + 0 + ) ' * ( , ) ) , 0 0 1 , . ) ( . . . 1 . * ) * * , - ) ( + ) ) . + , ( 1 . * , * + ) / ) + & & % ' - * ' * + + ) * ' + + * * % ) ) & ( ) * + . ( # ( ( . + ' ( ) , + . ) ) & % * ( ) % ( * ' ( $ , - , ) ( * + * ) % # $    
+   
+  
+ 
+  
+ 
+   
+ 
+  " ' $ ' % ( * ( ( * + $ & ' $ $ ' % ' ' + * "    
+     
+ 
+ 
+ 
+ 
+ 
+   # " $ % # %   $ # " # " # ! %    " ! % & " " $ ! !   
+  ! # % " " " $   
+ # # & # " & "     
+ ! 
+ ! ! " 
+ ' !  " " 
+ ! "  $ % ' " #   #   
+     " $ ! 
+   
+ 
+   $ 
+ " " # 
+  # # %   " ! 
+   !  !    
+    ! 
+ 
+ ! " " #   
+ 
+ 
+ 
+ " 
+  
+ 
+ 
+   
+  !    
+   
+   
+   " " # 
+ 
+ 
+       
+ 
+   
+   
+ 
+  
+     
+ 
+ " " ! 
+ 
+ 
+ 
+  
+ 
+  
+  ! 
+ 
+    
+    
+ 
+ 
+  
+     
+   
+      
+  
+  
+      
+ 
+ 
+    
+  
+  
+ 
+ 
+    
+     
+  
+         
+   !   
+  
+      
+   
+  
+                
+   
+    
+             
+ 
+      
+ 
+      
+  
+ 
+  
+ 
+ 
+ 
+    
+       
+ 
+ 
+     
+ 
+            
+ 
+   
+ 
+   
+ 
+       
+  
+   
+   
+     
+ 
+  
+  
+                                                                                                                       
+                                                                               
+ 
+ ! $ ( - , . . 6 ; ; 8 = < : 9 ; = : 8 6 : = 5 : = ? @ A = ; @ C @ D D B A C G > D E B A B F @ G M E F P E N H F B F E C J H J J O C C H D F K K H B B E I J D E D J H H N K E S I I N H J M B H E G K F B E D I K H D A B 8 8 3 0 . + * ( ' ' ' %   ! $ & $ $ % ! " 
+   % " 
+ " & # % 1 / 3 7 1 5 5 5 7 8 5 6 : 3 - 0 8 1 0 / 1 0 0 8 / , . + 0 0 * ) . 0 . + . 0 2 1 / + 3 . . . 0 . / . , , - , - 0 / , & - , - ) . + 0 / - . , * * ' + 0 2 & ) . / . 1 - , + - + ) . + + * ' - / ' ) ( ) * ) % - ( ( * - 2 + * ' , ) , ( & ' ( ( & ) ( % ' ' ) ' ) ( + ( # ' ' ( ) ( ( ' ' * * + ) ) ) * * & % ' ) * ( ( ) + ' * * & * ) * ( * ' ' ( + * ( ( - - ( & & ! 
+ 
+  
+ 
+  
+   
+ 
+ 
+    
+ 
+   ! $ $ # % ' * ' # & % $ % & % ' ( % ( % ' ( $ $ # # $ !   
+   
+ 
+ 
+ 
+ 
+ # ' % % " % # & % !  ! !   
+ # ! % & "  # $ # " ! 
+  ! $ $ !    
+ 
+  
+ ! " % $ !  
+ ! "        # " " # 
+   
+   % # " #  $ $ ! 
+ 
+  
+ 
+   ! $ 
+ 
+ 
+  
+   
+   
+       ! # ! 
+ 
+ 
+ 
+ 
+ 
+ 
+   #  
+ 
+ 
+ " "   ! " $ 
+  
+ 
+ 
+ 
+ ! #     
+ 
+   
+ 
+ 
+ 
+ 
+ ! ! 
+ ! 
+ 
+ 
+ 
+ ! 
+  
+  
+   " ! 
+   
+   
+ 
+ 
+ 
+   
+   
+      
+     
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+   
+ 
+ 
+ 
+  
+ 
+       
+    
+    
+             
+       
+ 
+ 
+   
+    
+ 
+    
+   
+   
+ 
+        
+    
+               
+        
+   
+ 
+     
+         
+ 
+         
+           
+    
+      
+   
+                      
+              
+  
+ 
+    
+  
+ 
+   
+                                                                                      
+                                                                                                             
+   
+ ! $ ) ) ) - 5 6 5 9 5 : 7 = < < 9 8 = = ? ? 9 8 9 8 ; E > = B C D D B B D : ? @ = G B > C D E A D G K N J H E C D ? D L R I F C ? B J F G D G L G F H E L K J D G H D H H H A P P L O I K P K J I M J @ ? D D H K N H C 9 6 1 0 ( - - ' ( ' $ & ' 
+ " % # % # & ! % ! # $ &    % ) - 0 4 3 8 5 4 1 1 2 2 1 1 / . ) , 1 1 , 0 4 / 0 3 , + * + 4 3 . + 2 0 0 1 2 3 2 0 . + / - , , + ( + + . + 0 0 + + , + * ) + - / - + , , / / ) ( 1 + . . . ) . + ) + . . + / , , - - , + ) + + ) ( & ) * . - ) - ) ( * * ( + - ( + ) + ) ( * * ( - ' + + % % + ( . , + ) ( % ) ' / ' % ' ' & & ( * & ) ( & # ( ( . ( ' & * * ' & ' ' % & ) ( ( ) & % ( , ' % - ) ) & " !         
+ 
+ 
+ 
+ 
+ 
+ 
+ # 
+ 
+ 
+   # " % ( & $ " ( # # # % $ & ' % % ' $ " " # " # # "   
+ ! 
+ 
+ 
+ 
+ 
+        $ !   $ # # " ! $ % "  $ " ' 
+  " $ ! % !  
+ " #  ! ! ! " 
+ " #    # # "  !       ! " ! %   
+ 
+  " 
+ ! 
+ 
+ 
+ 
+  ! 
+  ! " 
+ ! " " 
+   
+   
+ 
+    
+   
+ 
+   
+ ! " # "   
+ 
+ 
+ ! 
+  ! 
+       
+    
+ #   
+ 
+ 
+ 
+ !   "  
+    
+ 
+  
+ ! 
+ 
+ 
+ 
+     ! 
+ 
+ 
+    
+      ! ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ !  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+   
+  
+ 
+ 
+  
+   
+   
+ 
+    
+ 
+  
+   
+   
+    
+ 
+  
+      
+   
+   
+    
+                
+ 
+  
+  
+   
+          
+ 
+                          
+         
+        
+  
+ 
+             
+     
+                             
+  
+ 
+                    
+  
+   
+ 
+                                 
+                                                                                                  
+                                                                   
+ 
+ 
+ " & . - - 4 2 4 9 5 6 7 7 1 9 ; = < ; : 9 ; 7 8 < = C @ @ D B B B A A ? ? B < > A B F C J @ A C ? F F P F I M J F J I N J E B C C B F E A E L D H K E I J E F F I B I D C C H I H C E D L G H J G D J B G F I E A D ? 5 0 / - ' * & ( $ % $ $ & #  " # $ $ $ !   ! ! % % # % ' - 0 2 . . 5 4 7 4 8 3 1 1 5 0 0 / / 3 2 / 3 5 3 + - * 3 - , . 1 3 , / - 1 5 2 / / + * 1 1 1 / 2 ) ) - ) - / / / - ) * , ( ( * , - , - - * , , , , / - . . + + * ) + / ) . + ( + ( . * ) ) ) , + - ' ' ' * , * + * ) ' & * + + ' ( & ' ( * ) , + ) ) * * ' ( # ' ( ) * , + ( & ) ' ) ) + % ' & & ( ) & ) + % ( ) * ) ' + + # # ) * ) * $ % ' ' ( ) " $ & * ' $ ' * * $ $ # 
+  
+ 
+   
+   
+ 
+ 
+   
+ # !       ' % # ! " % ! $ $ $ % " 
+   # % " !     # ! # ! " $ ! 
+  
+ 
+ ! 
+        # "  " # " $ $ " % " # # " # 
+  # & ! " ! !     $       $   ! "         
+  
+   $   ! $ "   
+ # ! 
+   %     
+ 
+    
+ 
+  ! 
+   ! # %    
+ 
+ 
+ 
+ 
+   
+  
+ 
+    "  
+  
+ ! 
+ 
+ 
+ 
+   
+   
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   !  
+  
+ 
+ 
+  
+  
+ 
+  
+      
+ "     
+ 
+  
+ 
+    
+ 
+  
+ 
+ 
+ 
+   
+  
+ 
+  
+ 
+  
+    
+  
+ 
+ 
+   
+ 
+ 
+       
+ 
+ 
+   
+ 
+  
+ 
+    
+ 
+  
+                   
+        
+     
+              
+ 
+      
+                                  
+   
+ 
+ 
+          
+    
+  
+ 
+  
+ 
+                    
+                      
+      
+                   
+                                                                                                            
+                                                         
+                                        
+   " # ' - , 0 1 1 1 7 6 7 ; 8 3 9 8 6 8 ; : 7 9 7 : 7 ; ? > = B D = ? = < 9 A E E C C ? E A A ; = B A @ F J G R O F E H H M J H F G C D G H L J F H B F H I E C E D E I M G G I N I E K L F E C H D E F K B B G G H = 7 ; 1 , * * & % # ( ( '   "     # & ! $ "  !   # ! " % % % + 2 6 1 / 7 5 5 1 6 0 / 0 5 6 1 . 0 3 3 4 4 6 3 0 + - - - - / - 3 . / 1 1 / 0 1 1 * 0 0 1 2 1 , * , + % * * . - ) ) - ( ) ) , + + ' . 0 - * ( , . , 1 , - + , ) ( , 1 * + - ( + ( * , - ( - + . 0 ) ) - ) ( ( * . , & & * + ) ) % % & ' ' * * - * ' ' ( ' ) ) , ( ' % ' $ ' ( ' ' + ) * ) ' ' + * % & ( ( ' ' % ( , ) ( $ ! " ) ) ' * * % % ' ' % % ' % * ) " $ ' ' $ & !  
+     
+   ! 
+  
+ 
+     ! 
+ "   ! & & $ " & " ' ( % $ " 
+   ' & $ $ $ & " $ ! #     "   
+   
+ 
+   
+ 
+    
+ ! "   
+ " $   " " ) #    ! # $ ! " ! 
+  !  !  "  
+ !     #  
+ 
+ 
+ 
+ 
+   !  $ " !   ! 
+  "  
+ 
+ #  
+  
+ 
+  ! 
+ 
+ 
+ ! !   
+  # " !  
+ 
+ 
+    ! 
+ " 
+  
+ 
+ 
+ "     
+   
+  
+ 
+ 
+   
+   
+   
+  
+ 
+  !  
+  
+    
+ 
+        
+ !   
+ 
+  
+ 
+     
+ 
+   
+ 
+     
+ 
+ 
+ 
+ 
+ " 
+   
+  
+ 
+   
+  
+     
+ 
+         
+     
+ 
+ 
+     
+ 
+ 
+  
+ 
+  
+    
+      
+              
+     
+      
+       
+ 
+                                           
+ 
+    
+  
+     
+       
+    
+               
+                       
+                                                
+                
+              
+  
+   
+ 
+            
+   
+  
+  
+ 
+    
+                    
+     
+   
+ 
+                                                                                                 
+ ! ! " $ * , / 0 3 1 2 6 0 4 : 5 4 6 3 2 6 = 4 1 5 7 5 : ; E ? A ; 9 > @ @ ? > @ F D E C ? 9 @ < = @ E C E E I N M F K F G J I D D A E E D K J H J L H H O E L Q L J G H H G L K K L C D K F I E B E C C F E B C E A 8 ; 6 3 + ) , % ! " # # & "  
+    % '     % " '    # ( $ & + - / 8 : 4 3 4 6 6 4 2 1 2 2 1 3 2 3 3 1 2 4 1 4 2 0 . - . + - 2 1 - 0 , + , 2 . 0 / , - ) , 1 . - , ( - ) + * * + - 0 ( ( ) . + * ) , . , 0 + ( * . * ( * + + * , - - + ) ' ) , ( ( + ) ( / ) + . ) ) ( % ' * ) , + ' ( ' ) , ( ( ( # ' + * + ) ) + & ) ' ' ) + ' * ' ( & % ) ' + % % ( ) + + ) ' & & ( ' & ( % * ( ) + - ( + ( % # % * % $ ) ' $ $ ' ) + % 
+ ! ' $ " $ & 
+ 
+ 
+ 
+    
+      
+   
+ 
+ 
+ 
+  
+ # " $ ' # " !  # $ & $ $ " # " % $ ! # ! $ " " ' " ! 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+   $      "  
+ " % " ! " ! $ #     " 
+ !   
+    "  
+ "   
+ 
+ 
+ !   !   "  !   " &    
+ %  
+ 
+ !  
+ 
+ 
+ 
+ !    ! " " 
+ 
+ 
+ 
+       
+  
+ 
+ 
+ $ ! #    
+  
+ " 
+ 
+ ! #    
+        
+ 
+ 
+  
+   
+ 
+  
+ 
+   
+ 
+ 
+ 
+   
+ 
+   
+  
+  
+     
+ 
+     
+    
+   
+ 
+    
+ 
+ 
+   
+ 
+ 
+   
+ 
+   
+                
+       
+ 
+ 
+    
+   
+   
+  
+ 
+    
+ 
+                                  
+    
+                                      
+ 
+      
+ 
+                                                                                                                     
+   
+        
+ 
+     
+  
+              
+     
+ 
+    
+   
+ 
+    
+        
+        
+   
+    
+                                                                                                
+ 
+     
+ " ( ( + 0 / 1 0 8 5 5 2 5 7 3 3 5 = 9 3 3 2 2 5 9 = ; = B ; = ? ; = ? = > E F D B < ; D A ? ; @ = ? B J D C G D D P I I C @ > C I D E H E H O M P G C G L O J F E K E D O M J D H L D B B B E ? C I J E G G = > 9 5 5 + ( & " 
+ # ! ! $ ! & " !  " # " # " # ! ! "   # # % , . . 2 5 5 / 4 4 5 6 1 3 0 . . / 1 1 / & ( 1 3 8 3 / - , 3 2 * - - 0 1 + - - 4 . * - + , , * / 3 ) * + - * * * * / + . , ( + , ) - + + * + / + ( ' + ( ( ' ) ' + ' ( - , & ) / % ' ' & ' , . % ) ( & - ) & ) ) % ' $ ( , * ) ' , % ' ' # $ + ( & ' $ % ' ( ( ' & ' ( % ) + $ % ( ( ( ( * , ' - ( ) $ $ ' & $ " $ "   % & ' 
+ % ) ! % ( ( % % ' " " ' & ' " % $ % ( & % % " $ %   
+   
+    
+ 
+ 
+     
+   
+ ! # ! ! " "   ! # # # & "   # ! # % # 
+ "   " $ # !          
+ 
+   
+   
+ #     "   
+ 
+   #  ! 
+   
+   
+ 
+ " $ " 
+ 
+ ! !          
+ 
+ ! # 
+ !     
+   ! %         
+ 
+ 
+ 
+ 
+ " 
+ 
+     " 
+   
+   
+ 
+ 
+ ! ! 
+  
+ 
+  !   ! # ! 
+  
+ 
+  
+ 
+ !   
+  
+  
+           
+ 
+ 
+ 
+   
+ 
+  
+    
+  
+   
+ 
+   
+  
+  
+   
+  
+ 
+  
+   
+ 
+     
+ 
+  
+ 
+    
+   
+          
+   
+       
+                       
+                                                                     
+                           
+                                                 
+                                                  
+ 
+ 
+  
+ 
+  
+     
+       
+  
+   
+ 
+   
+ 
+   
+  
+ 
+   
+    
+    
+ 
+ 
+ 
+ 
+  
+  
+      
+   
+ 
+   
+           
+ 
+ 
+  
+    
+                                                                                                 
+  ! "   # * , 0 , 0 - 2 4 ; 7 5 6 7 2 6 1 8 3 7 3 7 8 7 < : 8 ; A B 8 = : ? ? < @ D B H D B B C ; : = > < < B ? C D F A C F J E @ = @ A B E J F L H H I I I A L U M R L K M E J J C H I E I H E E M M C G J H E K E B = 9 : 2 ( ) ' ! % ! " $ ' ( # ! # 
+  # $ " ! ! " "   ! ( + . 2 4 / 7 3 5 5 5 8 2 . 5 / , - + - 5 5 3 / ) . 0 3 1 4 2 , - , * . 1 - 1 + ' + / / * * , - , + ) + , - + / / , ( ) - , + - - * ) / + ) , / / + , , - ) * ) ) * ' ( , ( * - , . . ( + + ) - / - ( % & ' ) ) , ( + $ " " ( * * , ( ( ) + ( ' ( + - ) ' # & ' % * * % * & % ' ( # + ) ' % $ & * + ) ) $ $ % % % & $ # ' ( ' ' ! ! 
+ % " $ % * % & $ $ " % ' % 
+ & & % % & % & % !    !      
+  
+ 
+     
+   %  " $ #   % " % # ! " # &   # " ' $ $ !  ' " # & # "       
+ 
+ 
+ 
+ 
+ 
+    % # !   $ " 
+ ! ! !   " $ 
+   
+   
+ 
+   
+ ! !   
+ 
+  
+ 
+       
+ 
+  !    #   ! 
+ 
+   
+ " !  
+ 
+    
+ 
+       
+ 
+   "   
+ 
+ 
+ 
+ 
+ ! 
+    
+ 
+ 
+ 
+ 
+ 
+ ! 
+    
+ 
+   
+  
+       
+    
+   
+ 
+   
+   
+ 
+ 
+ 
+  
+          
+ 
+ 
+ 
+  
+    
+ 
+   
+  
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+ 
+ 
+    
+ 
+            
+   
+    
+               
+ 
+ 
+ 
+                                                   
+       
+                
+         
+                                                                                                                      
+        
+         
+  
+      
+   
+ 
+       
+ 
+     
+   
+ 
+ 
+  
+ 
+ 
+  
+    
+  
+    
+ 
+      
+ 
+    
+   
+    
+   
+ 
+                                                                                                     ! " # % ( - . / 3 1 2 5 8 6 7 9 6 : 6 6 5 ; 7 8 8 0 9 < = A D @ < > @ @ ; > G A ? : A C C : 9 = @ > ; < ? A ? ? < G E F D J A B ? ? D A I G L G G H F E D H L L L J I J J K J H E H E H F D M L E H G L G C G D @ < 8 7 0 ) ' ' & ' ! % ' $ % 
+ 
+ 
+   ! ! !       ! $ " ( , 3 1 3 3 4 4 2 4 2 3 6 6 6 3 0 , - . 0 3 / 0 , , 1 0 0 0 2 + ) 0 0 2 1 / . * - - . * , , * 1 * * * . ( , * * + - * , 1 + ) + , 2 + * - , , . / * . 1 * . * - . + ) ( * % * 1 , / / ) ) + ' + , ) ( % ' $ + ) ) % % $ % % + ( ' + ) + + ) ) ( ) + ) + ) & & ( & % $ ) ) & % ' + ' ' % % & ' ' * * ( $ ) + $ " ' & & # $ * ( ( & % ! ) ) % ' * * ' ' ' ' ' $ $ ! # ( $ ' ' ' % $   
+ 
+ 
+  
+     
+ 
+ 
+       
+ " ! ! % $ $ ' " ! % ' % $ " ! "   & ' 
+ ! "   
+   # # & !    
+ 
+    
+    
+      ! ! " $ $ 
+    " !  !           ! ! 
+ !  
+  
+    
+   
+ 
+ ! 
+     "  ! 
+ 
+ #   ! ! 
+   
+ !   ! 
+ 
+  
+    !   
+  
+ " 
+ 
+  
+   ! 
+    
+ " 
+     
+ 
+   
+  
+       
+ 
+ 
+ 
+   
+ 
+  
+    
+     
+ 
+      
+  
+ 
+ 
+  
+   
+     
+ 
+ 
+ "  
+ 
+ 
+ 
+ 
+ 
+   
+     
+   
+       
+      
+    
+          
+         
+                                                                        
+                                  
+                                                                                                       
+    
+         
+       
+   
+     
+  
+ 
+ 
+  
+ 
+      
+ 
+      
+ 
+  
+ 
+    
+      
+ 
+  
+   
+   
+ 
+  
+  
+ 
+ 
+ 
+                                                                                                 
+ " " " % % ' , 1 / 0 4 / 0 4 6 9 8 7 7 7 6 8 @ > 9 7 / 7 9 9 > ? A > : D D ? < B C C 8 = > E @ < : @ ? < 9 ? @ B A @ D F C @ C J J E D D G J L M K F E I L E I E E H H C H G J H H D F C K L K G K H I H O L F G F A ; < 8 1 - - ( " % % # % & "     # ! # &   #   " 
+ " $ & ( / 2 2 6 6 1 . 0 1 2 4 3 4 5 6 1 , 0 , 2 0 . 0 , . + 0 , . . 0 ( + . 1 3 . - - 3 1 3 - , 0 - + . ) , - - - 4 . * . - - . - * ) + . - 2 . * . - / * + 2 ( . * + - / + ( ' ' * ) * ) - . - . . * - - * ' ' ( , * ) & + & ' ' & ' ' ' ( ( + ) , + ( % ' , ' % $ ) $ & ' ' ' % & & ) ) $ % & & / ' ( + ( # ) ' # % ' + + ) $ # * - ) ( # % * ' ) ' , # + * ) ( % $ # ! % $ ) * ( ' ) ! 
+   
+       
+ 
+  
+ 
+ 
+   
+ !      # # % $ % % $ $ % $ ! !  & # $   
+ # ! $ % ! 
+ 
+ '   ! 
+   
+ 
+    
+ 
+     
+ 
+ %   " # 
+ 
+     # " ! "    
+ !   "   
+  
+ 
+ ! 
+  "         $   
+ 
+         ! " $ 
+ 
+ 
+ 
+  
+ ! "  
+  # $  
+ 
+ 
+       ! 
+ 
+ 
+  
+  
+ 
+   
+ 
+   
+ 
+ 
+    "   
+ 
+   
+ 
+ 
+ 
+ 
+  
+ ! " 
+    
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ !  
+ 
+      
+    
+  
+ 
+ 
+ 
+ 
+  
+ 
+                 
+   
+ 
+  
+ 
+           
+ 
+   
+    
+ 
+  
+                     
+                      
+      
+      
+ 
+        
+                                                                                                         
+                                    
+               
+      
+ 
+   
+   
+   
+     
+ 
+  
+ 
+  
+ 
+        
+  
+ 
+ 
+ 
+      
+       
+  
+ 
+ 
+ 
+  
+    
+ 
+  
+  
+ 
+ 
+ 
+                                                                                                  
+  
+ ! % , % # ) 1 0 , 1 5 4 6 8 ; 6 2 4 : : 9 < 9 7 6 6 5 : ; : < A : = F D A = ? B @ A > A G A A ; B G H A @ D E = @ F E @ B G I K J H P H D G M J E D O I J H G I F F F G I I H K L J D H T P O H N A I K E E I G C ? < 6 1 0 + ( ) $ "   #   $ # " # " " ' !   !       $ , 3 4 6 1 4 . / 8 2 1 4 4 4 0 0 - - , 0 3 2 1 1 - 2 1 3 1 2 0 , . / 0 2 3 0 , - 0 , - * , 4 . 0 ) / , + + / - / / 0 ) ( , . / ( + - / , + - 3 1 ) ( ) , * * * . + + * , * , * , ' ' ) ( 0 0 * ' + - * ) ) + * - . ) , ( ) ( - . * , ) + ( , , ( & $ * # ' ' % , % $ * $ % & * , ' & ' ( ' & ( ) ) ) ) ) ( & # ) ) ( ' $ ! % $ ' + $ & ' ( & ( % $ ' ' ( ( % & ' % % $ % ) + $ % $   
+   
+  
+      
+   
+    
+ 
+     % % ! # ) ' # # " " 
+ !   ! " % % $ # % % $ ! " "     " " 
+   
+ 
+        
+  " "  ! " 
+ 
+ " !  ! 
+   
+ 
+ ! # 
+    "     !   ! "     "   ! !     
+ " 
+ 
+  " %   
+ 
+ 
+ 
+ 
+ ! #  
+   " " 
+ ! 
+  $ ! !     
+ 
+ 
+ 
+ 
+      
+  
+ 
+ 
+    
+ 
+    
+ 
+     ! 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+   
+    ! 
+ 
+  
+ 
+    
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+   
+  
+    
+        
+     
+   
+               
+ 
+ 
+    
+  
+ 
+ 
+ 
+                      
+                        
+       
+  
+ 
+                                       
+                
+                                  
+                                      
+                           
+     
+    
+                          
+          
+      
+ 
+      
+     
+      
+   
+       
+   
+ 
+                                                                                                
+ 
+ 
+ 
+ $ ) ) % ) , 0 - 0 2 3 6 6 ; : 5 6 8 : 7 ? < 5 5 5 9 : ? : ? = 9 > @ A @ A F @ : A > B @ < D > A C A < A F E C D D A ? @ B J B C F B D C M J J G N P I N J K K M K N H G I K I J K F J I F K G C G C H @ D @ C H B 2 3 - , ) * , & # !      !   " % " $ $ "  ! & ' ' + / 1 / 0 5 4 0 2 7 2 / 0 2 7 2 0 0 / * 0 5 3 + / 4 3 / . - 2 / / ) - + + 0 . . + / / 0 + . 1 / - , / - / - - 2 1 2 + - / & ( ( - - , , ) / , * . * + - . - 0 + + ( , ' + + . * ' ' ' - + - 0 + ) & ' & ) ( * % ) ( ) $ * ' & ) , ) * ) ( ) * ) ' % , + ) # & ) ( ) ( ' + ( & $ ( ) ) ) ' # " & ' + ( ( & $ ( ) , ) % $ % ( * ) ( * % & ( , + , ) ' ' ' & % ' ' $ $ ' % + ' % & ( $ " ! %   
+  
+ 
+ 
+ 
+      
+   
+  
+   # ! $ & & % $ & % ! ! !   ! # '   # & & ' $ $ " !    # & " "      
+ 
+ 
+ 
+    
+ ! 
+ 
+  !    !    ! !      " 
+   
+ ! ! $ " "   !    
+ # ! 
+   
+ " # & $  
+ 
+   !     
+ 
+ 
+ #     
+ ! ! 
+ ! " ! 
+ 
+ " 
+ 
+   
+ 
+ 
+  
+ 
+   
+   
+  
+  
+ 
+ ! ! 
+ 
+  
+ 
+ 
+  
+ 
+ 
+     
+ 
+ 
+  
+ 
+  
+   
+    
+ ! 
+ 
+ 
+  
+   
+ 
+     
+ 
+      
+   
+   
+  
+ 
+   
+ 
+  
+        
+ 
+    
+                 
+   
+ 
+  
+ 
+   
+ 
+               
+  
+         
+      
+                        
+                                                                                      
+                          
+ 
+      
+                                                   
+              
+               
+           
+ 
+ 
+   
+                                                                                                                 
+ 
+ 
+ % & ! " % % ) , - , 1 5 4 8 ; 8 ; 8 : 8 5 6 : 5 5 6 5 @ = > = < 9 ; @ 9 ? @ @ @ @ = = 8 : > 9 ; A ? C ? > @ D E C > ? D < A @ F @ = B H K I E B N I A G L M N J I H G H H L G B C H E C D J H A = B B A E K F < < : 6 2 * ( * , ' % $ ! % # "     " " !   ! # " $ ' + - 1 3 / 1 4 9 7 ; 8 2 7 0 2 5 2 1 0 / - . 3 . - - - , , - / . , + / - + 1 3 0 + - 3 / + 0 0 0 + / , + , 2 / 0 - + 2 / . / * + ) * - ) ) , , 0 , , 2 - - + . * . ) , , * & ' * , * + + . ( + . / ( ' ' & * - ) ' ' ' * ( ' ' ) ) ' ) * * * , ' ' - + 1 + & ' ( ( " ' ( ' , / ' ' ) ) ( + ' % & ( $ $ * & % % ( ( * ( & & # % , ) ( , , ( ( % ) * ( ) * , ) # & % ' & ' # $ & & ) % $  
+   
+    
+ 
+  
+ 
+  
+  
+ 
+ 
+  
+ 
+ ! ! " $ ! #     " # $ %   #   % " $ ! ! # " % $  ! 
+ ! #     
+ 
+ 
+  
+   
+ 
+  
+  
+ 
+ 
+ 
+  !  
+ 
+   #   
+  
+ ! 
+ 
+ 
+   " " " % "  
+ 
+ 
+    
+  ! " "   # ! " &    ! !   
+ 
+ 
+   
+ 
+ 
+ % ! # 
+ 
+  
+  
+  
+  
+      
+    
+  
+ 
+ 
+ 
+   
+ 
+   
+ 
+ 
+ 
+     
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ # 
+    
+    
+  
+  !  
+  
+ 
+  
+  
+  
+ 
+ 
+  
+ 
+   
+    
+ 
+  
+ 
+ 
+  
+   
+  
+ 
+  
+     
+  
+ 
+ 
+                 
+ 
+       
+  
+   
+ 
+  
+  
+     
+            
+    
+   
+  
+    
+ 
+   
+          
+        
+                
+   
+               
+      
+ 
+ 
+    
+                                                     
+                                                                                                         
+           
+               
+                                                                                                  
+  
+ # $ $ # & ) ( . 0 - 4 5 0 4 5 5 5 : 9 7 6 6 7 : 4 6 6 < : : A = < > A < @ ; ; @ ? > < : ; B > = ? < B A > B @ < A > A @ ? > A D F = G K I H F C I C A B E @ J B G I J K I K D E = A C ? A D G F H E G D E < H B @ ; 9 . , + ) ( ( * ( ( " # # #     "   % ! % & + 6 , 2 , 3 7 9 6 4 7 6 2 7 1 0 3 5 6 3 4 0 1 3 4 , 0 * , 0 . + / 0 0 - 1 - , / . 2 1 3 . , . - 0 / 2 2 0 . - , , - , ) * , , ) + / - * - , . / * + , ) ) + ' * , ( ) - . - ' . . * * + * - / - % ' ' ' * + ) * $ ' ' ) + $ ' + , + ' ( . ( ' ' ) $ & ( ( & % $ ' % + * ( ( ) , * $ * ) ) + " ( , * % & $ & & ! % & % $ ' + * ( " # ' ) & * & ( & ' ) ) ( ( ' & ' % + % # ( ' $ % % $ "   
+  
+   
+ 
+  
+ 
+     
+    
+    ! ! # ' ( # "   & # ! " % # ( $ %  
+  $ ) ' # # " ! $ 
+  
+ ! ! 
+ 
+ 
+ 
+ 
+ ! 
+     
+ 
+ " 
+  
+ 
+ ! # % ! 
+   ! 
+ 
+  !    
+  ! 
+ 
+  " " 
+ 
+ 
+   
+   
+ ! !  "   
+ !   " "   
+   
+   $     
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+   
+  
+ !   
+ 
+   !    
+ 
+   
+  
+ 
+ !   
+  
+ 
+ 
+    
+ 
+ 
+  
+ 
+    
+         
+  
+   
+ "   
+ 
+    
+ 
+     
+  
+   
+       
+     
+  
+        
+ 
+       
+ 
+   
+  
+   
+ 
+   
+   
+ 
+ 
+     
+      
+      
+   
+    
+    
+ 
+        
+  
+  
+  
+             
+   
+                 
+ 
+      
+                      
+        
+ 
+                                          
+ 
+             
+                                                                                                                                                                                                                  
+  $ # % & ' ) , / 0 2 8 9 / 1 3 . 1 8 2 9 3 6 9 8 5 4 ; 8 9 < = ? B ? D A A D A = 7 ? @ @ @ > B ; = > ? C > A D C @ B @ F G ; ? A ? ; @ B B D > C A A = @ G I D B D A D H @ I G A > A E > ? = F B D E B B A ? < A D < 5 , . - + , ) ) + ) "   ' # $   ! $  ! $ $ # * + 0 0 1 3 3 7 8 0 4 3 2 2 6 4 - . 6 6 4 0 0 0 1 / 1 . 0 0 1 3 * * / . 0 0 / 2 1 , 3 3 / - / 0 . 2 . / 4 0 0 ) * , - - ( & * , - , 1 - . * + * ' , + ( + * ( ' % ( & ) * - * ) , . 0 ) + ) ) , + + ) $ $ % ) + 0 ) & ( ) " # ( * * ' % % ) . , ) % & ( % ( * ) ' $ $ ' & ) ( - 0 + * * ) ) ( , ( + , ' % ' ' ( % $ ! ( ( % $ $ & # % & % $ * & $ % % * * % $ % + * ' $ & ' & # & ( # "     ! 
+ 
+           
+ 
+   
+ 
+ $ " # $ % % # "   & " "   $ % ) % % # # " # $ " # $ ! # !    # $ ! !  
+ " 
+ 
+ 
+   
+   ! 
+ 
+   
+   
+ 
+ " $ %   
+ 
+ "   
+ # #     
+ 
+   ! !    
+ ! ! 
+    
+   " #   
+  
+ 
+     
+ !   
+ 
+  "  
+      
+ 
+ 
+ 
+ 
+  
+   
+ 
+   
+ 
+    
+ 
+ 
+ 
+  
+ 
+ 
+ !        
+ 
+ 
+    
+   
+    
+ 
+   
+  " 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+   
+        
+  
+ 
+       
+                 
+  
+ 
+ 
+   
+  
+ 
+  
+  
+ 
+          
+           
+ 
+                 
+          
+    
+      
+          
+                                              
+                           
+              
+                                                                                         
+                                                                                                                                               
+ 
+ "  # # # * ( + ( 2 3 2 6 8 1 0 3 1 1 5 5 8 : 7 5 5 6 2 : 5 8 : < ; ? A C B = @ ; ; 8 E ? 7 ; ; = 9 @ : : < < > ? > = G D H C < 9 B ? < ? ? E A ; @ C C @ C E G D @ C A E > @ B ? C E D ? : ; = B E C D E D D > ; = 9 < 9 4 / 2 . , * + + * & ! $ ! & ! $ 
+   " % & # * 5 5 2 3 : 6 4 3 2 2 4 - / 6 6 3 1 3 5 0 / 3 3 4 3 / - / 1 - - ) * + 0 , 2 2 1 0 0 3 / + . ) , - 2 / / 1 . , + . - ) . + ) * / - - . - , , - ( * * ) & * ( ) ) + * $ * , ( ( * 0 0 / 0 + , ' * , + + ) * * ) , / , * * ) # % ' * - , ( $ & & ( * ( & % ' - * + % " % & ) * $ ) ) ' % ) * ) ( ) % , % $ ' ) * ' * & " & + + " & ' & $ * ' ( ( + % ' % $ * ) ' & % ( # ! & & " ! % % + # % $  ! 
+ 
+   
+   
+ 
+  
+  
+  
+ 
+   & % # % " $ " " # " " ' " $ & $ ! ! ! # " " "   $ !  # ' # ! % %   # !   
+  
+ 
+   
+  
+      
+ 
+ 
+  
+ # 
+   
+  
+ 
+   
+ ! ! 
+   
+  
+ 
+  
+   
+ 
+  
+ ! 
+ 
+   "    " " "      
+ " 
+     "  
+ 
+  
+  
+ 
+    
+   
+      
+ 
+  
+   
+  
+     
+     
+ 
+ 
+ 
+  
+ 
+  
+  
+           
+ 
+ 
+  
+ 
+ 
+ 
+ 
+    
+  
+ 
+  
+   
+  
+ 
+   
+      
+       
+  !       
+     
+  
+ 
+ 
+ 
+      
+ 
+ 
+ 
+     
+                 
+     
+ 
+  
+            
+        
+ 
+  
+              
+   
+                                 
+                         
+      
+   
+                      
+ 
+     
+                    
+                                                                                                                                                 
+                                                                       ! 
+ 
+ ! "   % & * - 2 2 - 2 4 2 1 1 0 3 6 : 7 : 8 6 6 5 3 7 5 8 7 < ; : < = G C < 8 D B @ > ; 8 < B A ; = ; < : @ ? > @ B D B A 9 8 > = B C D ? > A B > B C G < @ G A I G A @ @ D C D B B = > ? < < B D K H I G B @ C C B @ 7 3 3 1 + . ) ' ) ) ) $ # 
+  # ! # $ $ * + - 5 9 6 7 > : 4 0 1 1 7 7 1 1 5 3 0 2 4 4 1 2 7 / 4 3 . + - / - - . - + + / 2 - 1 ) / , ) * * + - 1 / . - 2 , , / + , , ) * - ) + - . + - 0 4 / ) , / ) ' & ( ( - + & & + + , , + + - + ) * , - - * + ' ) ) - - / + , % & ( ' $ ) % * ( # % & ) ( ' * * ( * ( ' ' ( ( * * ) & ( * ' ' ' . + + ) ' ' ( ' & $ ( * $ # " ' % & ( & * + # ' ( ' - , * ' % & ' ) + ) ) ) % & ( % % $ $ # % $ ' " # #  
+  
+   
+ 
+ 
+  
+  
+ 
+ 
+   ! % ' ' % ( $ #  ! ! $ % % ( $ % % " ! # # $ % " &   ! $ # " # $ " " "   
+    
+ 
+ 
+ 
+  
+ 
+    
+ 
+  
+ 
+   !   
+            ! # 
+      
+ 
+ # # # 
+   
+    ! " ! $ "   #    !   $ "  
+ !    
+ 
+       " 
+ 
+   
+ 
+ "  # 
+ 
+ 
+     "   
+  
+ 
+ 
+   
+ 
+      
+ 
+  
+   
+ 
+ 
+    
+ 
+ 
+  
+  
+ ! 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+   
+  
+  
+     
+  
+    
+ 
+ ! 
+    
+ 
+ 
+        
+ 
+ 
+ 
+       
+    
+        
+              
+ 
+        
+     
+    
+   
+     
+ 
+  
+       
+ 
+ 
+       
+                        
+  
+    
+  
+         
+               
+      
+              
+      
+  
+         
+    
+                    
+                                                                                                                                            
+                                                                        
+ #   !   " * + + , 0 / 1 / 5 8 0 / 1 2 4 7 7 3 > 6 5 9 7 4 : 9 6 ; : = > < @ C < = ? F @ = > ; @ D @ 8 : A = @ > > ; < > ; = ? > ; A D B C ? C ; A ; < C ? B @ B C E G C = 9 = > = @ B A D ? ; ? C D A F > B C B > A D @ @ < ; 7 3 0 + $ ' & ' ' ' $ 
+ ! # ! $ % & , - / 9 = 3 7 < > 5 4 7 2 4 5 5 5 6 1 * 2 4 2 1 0 . - . , . . / / - - + 5 0 , * / - . - + , , + , / / - - / 0 1 / ) , * , / * ( 1 * + * . 0 + 0 - ' ) ' , . + ) - + * - * . + ' ) + , ) + ' ( 0 + . , - % ) % / / * * , + ) ) * ( ) ( ' ) ) ' # ' * , ( ( , , ' * ) * , * ( ) + ( ( * + - ( ( ( ( ) & + + + ( & * ( ) * ( $ ! # ' & ' - % " ) & ( % ' , + ) * * ( , , * ' ) & ( % ' % # ! ) ) $  
+ 
+ 
+ 
+   
+   
+ 
+    
+    
+    % ! ) ' % " ! " # % & & ' % # ! % % $   " !   % &   #   $ " % # "     % $ $ ! ! 
+ 
+  
+    
+ 
+  
+   
+ 
+   
+ 
+  
+     " ! " "   ! 
+   
+         " "  !   
+  
+     "          
+ 
+      
+ 
+ 
+      " 
+        
+    # 
+ 
+   
+ 
+ 
+ 
+  " "     " ! 
+ 
+    
+  " 
+  
+   "   
+ 
+ 
+  
+ "   
+ 
+ 
+ 
+ 
+  " 
+  
+  
+  
+  
+ 
+    !   
+ 
+ 
+ 
+ 
+  
+        
+   
+   !   
+     
+ 
+ 
+                 
+     
+ 
+   
+         
+              
+      
+              
+          
+     
+                                 
+ 
+                     
+         
+                   
+           
+  
+                                       
+                                                                       
+     
+                                                                                                                          
+ # 
+ $ ' $ - + - 0 2 - / 2 8 ; 3 8 5 3 1 4 4 6 9 6 1 3 6 3 5 7 : ; > = D 8 8 @ @ A @ = 8 8 < 9 @ H = : ; ; 9 : ; A A 7 A : > ; A B A A B 7 = A @ C < < ; 7 < 9 ; ? D D F B ? ; 7 > D G B = = ? A B @ D A ; @ > > = B E < B 8 9 4 3 5 1 ) + + ) ) ( "   % ( $ # % ' + / 6 3 : 3 3 2 5 4 5 3 1 6 < 5 4 5 / 0 5 1 4 - 1 2 1 0 * + 0 2 - / / . . 2 0 0 - 2 - ) . . - + / 0 2 1 0 2 4 / . + . ) 0 4 + - * * + * - - / . * 0 , * - ) - + - / + * ' ' * ) * . 0 - ) ) + , - 0 ( + + + + * , / ) - , ( * + * ( * * ) ) ' ) & + - , , + * * + ( / , * ' ( ( + , . * ) ' + * ) % ' ) ' ' ( & ( ' & ' + ' $ ( * ' & ( ' ' & ' % ( % ' * ' & ) $ $ $ " ( ) % ' ) % ' % ' $ ) %  
+  
+   
+ 
+ 
+ 
+ 
+   
+ 
+    
+ 
+ ! # ! $ # $ # & % ( $ # & ( ( $ # # # $ "   # $ & " #  " ! ! %   ! # "  $     ! 
+   
+   
+ 
+   
+   
+      
+ 
+  
+ " 
+ 
+   
+ !  
+ 
+  
+ # !   !     ! 
+     "      % " 
+ 
+ 
+ 
+ 
+  ! #   
+ 
+ 
+ 
+  
+ ! %  
+   
+ 
+   ! 
+ 
+   
+ ! " 
+ 
+ 
+ " ! 
+ 
+   #   ! # 
+   
+  
+ 
+ 
+      
+    
+  
+ 
+ 
+ 
+  
+  
+ 
+  
+ 
+ 
+   ! 
+ 
+ 
+  
+ 
+  
+   
+ 
+ 
+   
+  
+ 
+   
+      
+  
+ 
+     
+     
+          
+       
+    
+  
+   
+         
+            
+     
+   
+      
+  
+             
+   
+     
+                           
+         
+                                                                                
+                                                                                            
+                                                                                                                     
+ 
+ 
+ 
+ $ ( $ ( - - 5 6 3 / . 4 4 7 = ; 3 2 0 1 3 6 2 5 9 8 4 3 5 7 9 = ? A = 9 ? E @ A = @ > 8 9 ? G E = A A @ 9 ; < : = > ; = ? : < > = ? : ; : @ ? < 5 8 6 ? < ; ; @ > D C @ A < < B A G ? > A B ? @ A C @ = ; = @ : < ? = < : 7 - 2 , . . - + ( ) % # % ' " ' ' . - 0 4 0 9 7 4 0 . , 1 2 3 / 5 5 1 1 2 - 1 + - 0 7 1 . - , * / 0 . . 1 / - 0 . . . 2 - . 1 , . , - 4 - , + . , / / . + - 1 / 0 + ' 0 * - * + / / - ) ( ) + , . , * ( + ( & + + , + ) . - + * ( * - * * , - ) , + * + . 0 - - * ( + * ( ( ' $ # $ ( ( - + ( * % , * + , - - ' & % , + ' & ) & % & ( + & & ( ) & ) , # & ' * ) + & * ) & ) & $ # " # % & % ' ( ) ' " " & " % ' + " ' $ & $ $ # # $ # 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+        
+ 
+ " !   # % # & ' $  # ' % ' ' $ "  ( #   ! ! $ # "   # !  $ &   !   #  # # ! " 
+ 
+ 
+ 
+ 
+   
+   
+  
+  
+ 
+ 
+    
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+    
+ " ! 
+ 
+ ! #   
+    !    
+  
+ 
+ $ !  "  
+ 
+   ! "     
+ 
+   
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+    
+         
+ 
+ 
+   
+  
+  
+   
+  
+  
+ ! 
+    
+    
+ 
+ 
+ 
+ 
+   
+     
+   
+    
+ 
+   
+     
+          
+   
+  
+ 
+                           
+ 
+                   
+ 
+                     
+     
+ 
+         
+     
+ 
+                   
+                    
+                                                      
+                                                   
+            
+              
+                          
+ 
+ 
+       
+     
+ 
+ 
+             
+                                                                                                    
+  ! & # ) ( ) * / . 0 1 2 4 2 7 8 7 9 6 3 9 - 1 3 7 7 7 6 6 6 5 ; = < ? ? < ? > B ; > C 9 : 8 : ; 8 @ B A > B ? 9 > A < > ; < 8 : ; < < < ? @ < A ? = < > A > < > B 9 ? = ? 8 ? ; ; ? < = = A < > B E I B C = A = 9 = ; : < ? 9 4 2 1 - , + ' , ( ' ' $ % ( ' ' . 5 5 7 4 ; ; 4 4 1 . / 4 0 0 2 1 0 1 1 * - . / / 3 1 0 / - * - / 2 / - . . 4 . 0 - 0 / - 0 - 1 / / 3 0 - . , 0 0 0 0 1 0 . - . + . * + - ) + , , / ) ' + , - - ( + * , * ) , % # & ' ) ) % % ) ( , , - ) . 2 ) ( ) , , - ) ( ' ( ) & ( ( * $ ( $ ' ( ' ( ) + ( ( ( ' , , ( ' % $ - , + , + ) & ' ' ( ' ( & & ( ( + & ( & ' ' ) ' - ( % , ' # ' & ' ' ' " % $ ' - ' & $ # ' ' & & % & ! # % $ % #        
+   
+     
+      
+   " # % !   % # $ " " ! $ " # $ #   # " " % & % # # " !   
+   ! " 
+    
+ " $ " " 
+ "  
+  
+     
+  
+  
+ 
+      
+   
+ 
+    
+  
+  
+ 
+ 
+ ! ! 
+ 
+ 
+   !    
+  
+ 
+ 
+ 
+  
+ 
+   
+   " 
+  
+   
+ 
+  
+ 
+  
+    
+      
+   
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+ 
+   
+ 
+ 
+    
+  
+ 
+      
+ 
+ 
+ " 
+   
+ 
+   
+   ! 
+   
+ 
+                          
+                      
+                        
+                    
+  
+ 
+    
+           
+              
+                    
+                                             
+                                                                              
+  
+  
+      
+  
+   
+                
+  
+  
+    
+ 
+  
+      
+ 
+ 
+ 
+ 
+  
+ 
+  
+    
+ 
+    
+ 
+  
+ 
+  
+  
+  
+ 
+                                                                                                
+ 
+   " % & % ) ) , 1 3 1 1 - 0 6 = 7 2 5 6 9 0 - - 2 5 : 6 7 5 6 = A ; = = = < > 8 @ ; > > 4 7 > 9 B ; B D B A < < : < > > ; ; : 7 < ; = > > < @ B C D ? B = < A > A 9 > B F A = A A 8 C 9 = ? D A = = A E = ? = A @ B A E : 7 : 8 3 3 1 ) - ( ' ( ) ) * ) ) * ) + 1 3 2 6 5 3 6 8 5 2 4 7 1 / - / - 2 2 2 - - / 1 0 - + / 2 3 , 1 2 / 0 / - , , 0 . / + , 2 2 + 3 . - / 1 0 , 3 4 2 0 ) , + * , / , - , . * ( , , - 0 . . , * * 1 + + / - ( ' ( ( # * ) 0 & * & ' * ( * * ' + - + + + * ) % ' & ' ' ( ' ( ) , ) ( ) + ' . ) ( ) ( ' % ' * + + ( % $ + ( ( ( ' % ' ' ' $ ' ' * % ( ) ( + * ' ) & ' & $ $ % ' & ( + ) " # $ $ # " # ( ) , & ) ' & % "   # %   ! ' ) % !   
+ 
+  
+ 
+     
+ 
+ 
+    
+ 
+ 
+ 
+ " # ' ! " # ! % $ # $ % # % & % # $ # # $ % # " " "    #   # " " ! 
+  $  
+   $ $ !      
+ 
+ 
+ 
+ 
+ 
+  
+  
+         
+  
+    
+  
+   
+ 
+  
+   
+ 
+  
+ ! " 
+  
+ 
+   
+ 
+ 
+  
+ $      
+    
+  
+  
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ ! 
+ 
+    
+ 
+  
+ 
+ 
+ 
+  
+    
+      
+  
+ 
+ 
+  
+ 
+  
+   
+  
+      
+  
+   
+ 
+ 
+      
+  
+        
+         
+   
+           
+ 
+     
+  
+           
+ 
+                    
+               
+  
+       
+                                                      
+    
+                                                                                                
+        
+   
+   
+  
+  
+ 
+ 
+ 
+   
+                   
+  
+ 
+ 
+ 
+  
+ 
+     
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+    
+  
+  
+ 
+  
+ 
+ 
+                                                                                                
+ 
+ 
+ $ # % $ % . * , - - * , + 7 8 4 3 : ; ; 5 0 . - 3 6 4 7 5 6 < 9 ; > < < 9 < > = : > : 7 : 9 < 8 : > ; ? @ ; A A ? > > < < 7 : = : @ : 9 7 < < B = 7 D > ; = B < > ? > A @ B @ @ D C ? = 7 9 A B B B D J ? A B = E B B ? ; 8 < 8 5 8 0 - + 1 / , / , + / , - 0 6 1 5 7 1 3 0 1 4 2 3 5 4 1 3 1 0 , , + . - 2 1 / 0 0 , 0 / - 6 0 0 - - , ) , . - , . 1 1 . , . - + . / 3 1 0 0 2 3 , , * , , + - + - , + ' , , , . / + ) & ' ( ( + , + ' + * * % * , & $ ( & 0 * & ( ' ' * ( ( * * 1 + ( - * 2 - - * + + ( * , & & ( ( % & & ' # & ( , ( ' & $ # & & % ( ' % ) % ' ( ( $ & * * * & . * ' ( ' ( % $ " ! # ( ' % $ ! ! # " & & $  ! $ ' , ( ) ' ( "  " $ % , % " "   !          
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ " ' # $ ! # # # % ' $ ! # % " #  !    ! " # ' ! !       % !   " " 
+ !  
+    !  ! " "  
+ 
+  
+ 
+  
+        
+       
+ 
+ 
+    
+ 
+ 
+    
+ 
+   
+ 
+ 
+ 
+ 
+  
+   
+  "  
+ 
+ 
+   ! 
+       
+ 
+     
+ 
+ 
+  
+ 
+ 
+        
+     
+ 
+    
+   
+ 
+ 
+  
+   
+  
+ 
+  
+ 
+     
+        
+     
+   
+   
+ 
+   
+ 
+                        
+ 
+    
+ 
+                    
+   
+    
+                    
+ 
+                 
+ 
+ 
+     
+                                        
+                                                                                                                    
+ 
+ 
+      
+ 
+        
+    
+   
+         
+ 
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+   
+  
+  
+  
+ 
+ 
+           
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+                                                                                                 
+ " ! " ! " ' * , 0 2 1 0 0 / 5 7 3 1 5 8 = 3 . 2 4 7 5 9 5 7 5 ; : = : < = < < @ = ; ; ; : : C ; < : ? : 9 > > = B ; < > = ; @ > < 8 > ? ; > : : C C ? ? = 8 = C > A = ; B D ? C ; A @ < ? < ? G I C G G D @ E D @ > A ? ? ? = = 9 = 7 3 1 4 4 0 . 0 * - - 2 3 2 5 3 / 3 4 7 5 1 . 4 4 2 3 0 3 / 3 - - / . 1 2 6 6 / 2 / - 1 / 4 6 - 2 - & ) - 4 0 - / - . / 0 . , , ) 0 0 . / - + 0 - . + ) - . + , , ) * . + . * / - - * ) % * ' ) * & ( + * + % * & ' ) * , / ( ( * ( - . ) % ) + , + * ) . ) * * ( ) + ( & & ( $ & ) ( ( # & ) ) ' * * ' % $ ( ' % $ ( ) & ( & % ( - ( # * ) - ) ' ! & ( )   + ' % # % ( ) $ # $ " % ( ' ) % " ) % % & # ) & ! " !   # # ( ' # #   
+  
+         
+     
+ 
+ 
+ 
+ % ' % & # ! & $ # * % " ! 
+ 
+ ! " 
+ 
+ !  # "   % " # ! ! ! !  
+   ! 
+ 
+ !    
+ 
+ 
+ !   
+ 
+ ! 
+ 
+ ! ! 
+ 
+     
+            
+     
+ 
+    
+ 
+    
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+    
+     
+  
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+    
+    
+  
+     ! 
+ 
+ 
+ 
+   
+ 
+   
+ 
+  
+ 
+       
+ 
+  
+ 
+    
+   
+   
+ 
+ 
+ 
+      
+   
+              
+ 
+  
+              
+ 
+     
+        
+            
+                
+           
+             
+    
+     
+                                                                                                                                                
+ 
+         
+    
+ 
+  
+ 
+   
+     
+ 
+  
+      
+ 
+ 
+   
+    
+ 
+  
+ 
+  
+     
+ 
+  
+   
+  
+ 
+ 
+ 
+ 
+    
+     
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+                                                                                                
+ 
+ 
+     " % ' , , - . 1 2 4 5 7 8 : 5 5 6 7 7 4 6 3 6 9 2 5 8 6 < < : ; = = > ; 8 9 7 ; = ; = @ = = 6 8 7 9 < ? < C > @ = < = < ? < = < ? B @ = < > C : ; A < @ > > B ? A D D > : = ; 8 7 = B = C ? < A A 8 : C C @ A E > < < 9 : 7 7 ; 4 3 8 4 0 / 7 2 1 1 2 3 2 3 4 + 0 / 5 : 3 2 7 2 . . 1 5 1 + - 0 - 2 0 0 2 3 2 1 4 . . ) 2 4 / + - + + ( 0 / * 1 / , - . ( ' + * / ( ) , . - + / - , / ) , ( - , ' - ) - + * - - * * ) ' ( , * ' . + , ) ( ) ) ( ( * , , - * ' ( ( , + ' * * + - + . ( + ) & ( # & * $ % % ( ( * % ( ) ) ( ) * ) ' ( ) ) ) - ( # # ( ( % % ' ' ( & ' ' * & ! & ' # # ) & ' " % # ! # & & # ( ! ! $ % $ " " & ) & ( $ $ & % % "   
+ " # $ $ # ! " ! 
+          
+ 
+     
+ 
+ 
+ 
+ ! $ # ( %  " $ ! %   !   ! # & 
+ # ! 
+  
+ " ! # # % ! 
+  ! 
+   ! " #      $ 
+ 
+  
+      
+ # " ! 
+  
+    
+  
+ 
+     
+                  
+    
+   
+   
+ 
+   
+   
+   
+        
+ 
+   
+  
+ 
+  
+   
+ 
+ 
+ 
+  
+  
+ 
+  
+   
+  
+ 
+    
+ 
+   
+ 
+ 
+                
+    
+    
+           
+  
+    
+  
+                         
+           
+           
+                  
+           
+                                
+                                    
+                                                                                                        
+    
+   
+   
+  
+      
+ 
+ 
+     
+   
+ 
+    
+ 
+      
+ 
+ 
+ 
+   
+  
+  
+   
+   
+  
+ 
+ 
+  
+ 
+     
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+                                                                                                   
+ !  % # & * . , / 5 : 5 3 2 4 8 3 2 2 3 0 2 8 8 6 6 2 5 4 7 9 ? ; @ ? = B < < ; 5 : = ; < @ : < 4 6 8 > B B ? ? < = ? B : < > ; : = < A ? : ; @ B ? > C ; 8 > > B ? @ A ? : = > ; 9 5 < G C > ; ? > ? @ > @ > D E @ ? 8 < 9 4 ; 6 9 7 4 3 2 3 0 2 6 4 5 1 7 7 3 3 5 6 3 6 8 9 3 3 1 - ' 3 1 - + . 1 / - * 0 / 0 . 1 5 3 - 0 1 / + * / - , $ ' + + 0 - * - - + ' , * , + , . 3 / , . . + - , / + - * ) . , / ) * ) - ) - ) * & * , , , ) ' , & & * + * ' * + ) ) ' % ) , + + - ) ) ) - . / 0 * ) ) ' % % % " % * ' ' ( % ( + ) , ) ( ) ( ' ( ' + * + # ( & ' $ ' + $ ( $ $ ' ) &   # % ' & # & % ' " # & $ ( * % " & ' * " $ ! * * ) $  # &   $ $ # $ $ % ( " ' #  ! 
+  
+    
+         
+ 
+ 
+   # " ! ! " # # % ! ! " ( % # ! # " # '  
+ 
+ ! # ' ! # % 
+ 
+ ' $ !        
+   
+ 
+ 
+   
+    " 
+ " # "  " 
+   " " 
+ 
+ ! 
+         
+ 
+       
+ !    
+            
+  
+ 
+      
+   
+  
+  
+  
+ 
+     
+ 
+  
+ 
+   
+ 
+ 
+ 
+   !  
+   
+    
+ 
+ 
+ 
+      
+ 
+      
+ 
+ 
+ 
+ 
+   
+    
+    
+     
+ 
+ 
+ 
+           
+ 
+      
+ 
+ 
+         
+   
+          
+ 
+                             
+                     
+               
+           
+                                                                                                                                      
+   
+             
+ 
+ 
+    
+             
+ 
+ 
+         
+   
+   
+ 
+            
+       
+    
+ 
+ 
+   
+ 
+       
+                   
+                                                                               
+  ! ! $ # % , - 2 5 4 1 4 2 6 3 5 . 9 3 6 1 1 8 4 2 5 9 7 7 5 7 < 8 9 < : 6 = : < : : 9 7 9 9 7 9 ; ; ? = @ C = 8 < ? A = C = > = : > > < B @ : ? A > ? ; : 9 ; > ? @ @ ? > ? 7 @ ? @ > ? B H @ C ? > < 9 < 9 ; > B A 9 ? ? 9 8 5 3 6 2 4 6 9 5 4 7 3 4 2 1 7 4 0 4 4 8 7 5 0 2 7 . 1 - 1 . / 1 4 0 2 1 3 2 3 3 / . 1 1 / 3 . 1 / 0 / , / ) . - ( / / + * , / ) ' ) . , ( * , ' - + 0 0 - 1 / , 0 , + - 0 . - - * * * ) + , , * $ ' , , * , & & ( , + ) + - ( ) ( ) + - ) ( - ) ' ' ( / / ) ( & $ # % ' # # # ' & ) ) $ % ( * & ( % ' % % & ( ( + ' ( , * & # & ' % ( % % # # # # " % % ' # % ' & $ $ , ' $ ) # " ( $ % ' $ $ % & $ $ # # ' $ % " ' ' ! % & $ # # 
+   
+ 
+   
+ 
+ 
+ 
+ 
+          
+   $ # $ " $    & $ $ ! $ " 
+  !   % ! % " #  ' )   !    # #   !   # 
+   ! 
+ 
+  
+     
+           " $ ! " 
+       !  !  
+ 
+ 
+ 
+    
+    
+      
+ 
+         
+          
+  
+  ! !  
+   
+ 
+    
+ 
+ 
+ 
+      
+   
+ 
+ 
+ 
+  
+ 
+    
+    
+    
+  
+  
+ 
+ 
+  
+   
+  
+  
+  
+      
+  
+ 
+   
+ 
+  
+                    
+       
+               
+                
+ 
+         
+     
+   
+             
+    
+          
+      
+                 
+                
+                                                                          
+                                                       
+ 
+        
+        
+ 
+                    
+  
+                
+            
+  
+ 
+                                                                                                  
+     " & # & + , / 1 4 2 0 1 5 5 / 7 0 4 8 6 7 9 4 2 4 : 8 5 8 6 9 9 4 2 8 > > = = : 8 ; ; 7 9 > < = > A D : < 8 A A @ ; = A ? > ? B < ? = @ 8 = A B > = A ; ? : = ? @ = > @ B = ; ; 9 ? @ ? ? C A ; ; 7 = < 9 < > ? ; ; C @ @ = 5 : 9 ; ; : 7 : 7 < < 5 / 4 3 5 3 8 0 8 6 3 1 3 1 / 3 , 1 5 4 6 8 1 1 3 5 6 1 3 4 1 0 + - 3 3 - . , / / 3 1 4 3 + - * , / , ( ( * * - 3 - ( + - * , , 1 + , 0 0 , 0 . 3 1 0 , + ( - ' ' + - 0 / ' ) * + * * % & ) & , , * + ) * + , , , ( % - ' % ' ) - / * ) ' $ $ + ) % " $ ( ' $ ) % ' ( * & & & % ( ' ( ' ' % % * *   & - ' ) + ' $ & # % ( % ( # $ % " % & * * & $ $ # % % $ & ( ' # % $ $ % $ $ % % % % % " ' $ ! ! & ! ! $   !  
+ 
+ 
+  
+  
+    
+  
+  
+   " ' % % " " # % $ " % # # $ $ # " ! !   (   ( ! & !   ! " " ! " ! ! " %  ! #    
+ " $ !         " 
+ " &    # ! "     " !  
+   
+ ! ! "   ! "  
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+     
+  
+ 
+ 
+ 
+    
+ 
+ 
+  !   ! 
+ 
+   
+ 
+  
+       
+ ! 
+  
+ 
+   
+ "   
+ ! 
+ 
+ 
+ 
+   
+    
+  
+ 
+  
+  
+  
+  
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+   
+ 
+  
+ 
+ 
+ "  
+ 
+  
+ 
+  
+          
+      
+           
+    
+     
+     
+               
+                           
+            
+             
+                    
+         
+     
+      
+                                                   
+                                                          
+                                                             
+                      
+                                                                                                    
+ 
+ % # ' ' / - - 4 8 7 + + 1 1 - . 1 3 4 6 8 ; : 7 5 7 4 4 6 9 : : 7 7 ; B : 6 9 ; < < B @ < = ; : < ? C : ; < D @ A ? > > = ? B B < = = A < > = = G > ; 3 5 7 ; ? C B = ? > < 7 9 8 = ? = @ > ? : < 9 9 B D A C C ? < ; : ? > 9 9 9 3 ; : ; ? 9 9 > 5 3 5 4 5 4 6 2 5 8 4 2 2 3 1 6 . 3 4 2 7 3 / 2 0 / 4 0 . 4 6 0 . - 3 5 + , 2 4 3 2 0 2 / 3 , / . 3 ( + / - * + / * + + , - . 0 2 / ) . * . , - 1 0 - . + * , ' - + / . / * & ' * , + & + . - , - , + ' , + + * ' ' & - ' * + ) - - - + ( & % ) + % % + - , * * , ( ( + & ( & ( $ ' ( ' % % + ( , ' ( ) & ' ( & % ' ) ' ' ' ' ' ) $ ( ( ( ' ' % ( " ' & ) ( ! + , # # % $ & $ & % ( & % % ' * % " ' ( ! $ $ % $ " 
+ 
+ 
+    
+  
+   
+  
+     $ " # % $ #   & & ! & & $ ' $ % # # ' % ! $ $ " !   $ # ! "    $ $ ' " # $ " !        $   ! #  % " "   
+ 
+   !      !   "       !   !  
+ "   # "       
+ 
+  
+   # " 
+ 
+    
+     
+    
+ 
+ 
+ 
+  
+ 
+   
+      
+ 
+    
+  
+  ! 
+ 
+ 
+       
+   
+ 
+ 
+  !   
+   #     
+ 
+ 
+ ! 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ !  
+      
+    
+ 
+ 
+     
+  
+     
+ 
+ 
+ 
+   
+       
+        
+ 
+ 
+      
+        
+     
+           
+  
+           
+ 
+   
+     
+  
+  
+ 
+   
+  
+   
+   
+                 
+ 
+      
+      
+                        
+ 
+  
+       
+                  
+                
+                       
+                                                                                                                                                                                                                
+ 
+ 
+ 
+ 
+   & ) * , * - 1 7 2 - 1 / , 3 1 7 1 3 6 9 : 9 7 3 7 2 5 6 9 8 3 5 8 > = @ > ? = ? : ; ; 4 : 9 = > E D = A @ @ C A 8 D 9 : ; < = C B ? = D B ; ; D = < 7 8 ; ? = > > < ? ; < 8 7 : ; C ? @ < < = ? < B I E ? C B = ; 7 : 9 ; 7 > ? 8 ? ; : ; : 6 9 : 6 2 4 7 8 5 5 5 8 3 0 : 0 5 8 3 6 2 1 3 3 4 3 2 . / 1 / 4 1 0 3 - . 0 . , 2 4 5 4 : 5 2 1 1 / 3 2 , . 0 0 / - 0 / + . . , - - - , & / + ( , , - , - / * / - ( / + , + / , / - * + . + ( ) , , / * + ( - * + + & ' ) ' & * ) ' , / * ( & ' % % ( ( ' * , , , * , 1 + % - , + ( $ $ * % * & ) ) ' ' ( + * % & ( ) * # & ' ( ' , - % ' * " & $ ) ( & + & % * % ' ) ) ' " # $ ' & ' ( ' $ ) ' & % % ( & % ) " " 
+ 
+   
+    
+ 
+    
+    
+ " ! ! % & ( ' ! # $ % ) ' ' # & ' ( % # # # " % # " # % % # $ #  # $ & & # "   
+ 
+ 
+ !         # $ " ! ) # 
+ !   $  ! # $ " "   ! ! 
+ 
+   "   
+ ! !    
+ ! ! 
+ "  
+ 
+ !      
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+ 
+ 
+   
+ 
+   
+  
+   
+  
+  
+   
+    
+ 
+ !  
+  
+ 
+  
+ 
+     
+ 
+ 
+ 
+  
+     
+ ! 
+ ! !   
+   
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+  ! !   
+      
+ 
+       
+   
+ 
+   
+ 
+ 
+  
+        
+          
+  
+ 
+            
+         
+                     
+   
+ 
+ 
+ 
+ 
+   
+   
+ 
+   
+ 
+   
+ 
+         
+    
+ 
+      
+   
+ 
+  
+   
+   
+  
+                                                                   
+             
+      
+ 
+   
+ 
+                                                                                                                                                                                                                 
+ 
+ " " # % ' ) / . + 2 9 1 1 7 3 0 / / 4 5 4 7 : 8 : ; 7 > 8 9 = ; 6 7 ; : 9 = ? @ @ ; ; B 7 8 A ; = < ? G A D A = = 9 = = = > : @ ? @ ? ; < < < 8 = ; @ @ < ; < ? ? C < = @ ; 9 ; @ < 9 ? A : C B > @ @ B I > 8 = = B ; = = < B > < : = = < < @ < ; 8 ; 6 6 5 2 0 2 5 7 : 3 - 5 7 5 7 6 / 4 2 , 3 4 / 4 / 0 / 1 3 0 2 2 1 0 6 3 / 1 2 1 4 7 2 5 2 1 2 , - * + - 0 2 1 , 1 . - , + 0 - * , ) + , + + ( * , / / 2 . - 0 + , * * / - ( . + + ) ' ) * - , . ) ' + ) ) - * ( ( , ' & * / * * - . ) ) ( + ) + * ( ' ' ) ) ) , . * ) ' , * + ' # ( ( ) ' ) ' $ % , , ( ( & % ) ) ( $ ) & ) ) ' & % $ & ( ( ( % ) & * ) # ( & + ' ) $ " % ' & % % ( ) * + ( ) ( ' & % & & "  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+  
+  
+    $ ! ( & # $ # # $ ( ' $ # " # & & # ! 
+   ! ! "  # ' "  & & $ " # $   " " 
+ $ &   " $   # #  # 
+  " %     
+   
+ ! $ ! " ! 
+ 
+ !       ! "      
+    %     #   " 
+    ! ! 
+ 
+ 
+    
+ 
+ 
+   
+ 
+  
+ 
+ 
+   
+ 
+     
+ 
+   
+  
+  ! 
+     
+ 
+  
+ 
+ ! 
+  
+ 
+    
+ 
+ 
+ 
+ 
+   
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+   
+ 
+  
+ 
+ 
+ " ! 
+    
+   
+ 
+  
+    
+     
+     
+      
+ 
+     
+            
+                    
+               
+         
+ 
+ 
+ 
+ 
+  
+  
+      
+  
+     
+ 
+           
+ 
+                 
+ 
+                 
+           
+                           
+                         
+                         
+                                                                                                                                                                                                    
+  " & ' $ "   ' / / 1 1 . 0 3 5 7 / 1 / . 4 4 4 8 6 < 8 6 8 3 6 < ; @ = 8 : ; = ? = < 7 : = ? : : 9 ; ; > A B E @ < < ; ; = = ? ? @ > A ; = < 9 7 3 : > : : 8 = ? B C A B A B ; ; ? @ : 9 < = : : = ? @ B A @ A > ? @ C @ : A ? 8 3 5 4 7 : 9 8 6 = : 8 9 6 7 5 4 1 5 6 9 9 4 5 4 4 1 5 8 2 1 / . 2 4 5 7 7 3 / 2 5 2 4 ; 6 5 2 1 0 0 2 1 9 4 / 5 0 2 1 2 * ) 1 0 . 4 0 + - - , , / , + / * ' & ) * - * * 1 - . 0 + 1 + . + * - - - * - - % ) ) 0 ' / , - , * . - ) , ) ( - ) ' $ * - * ( - . / & & + ) % % ' (   & * '   % ' % + * ' ( ( ) ( % * & ' . + ' * , * % ' $ ( ' * ' ( ( ) , * # # ' ( ' % ' % % & ( * ( + ) * + ) ' % ! ' & $ $ & & ) + ( ) ( ( ' ' & % # !     
+  
+ !  
+   
+ 
+ 
+  
+  
+   $   ! ( # % # % ( & % ' ! ! "   ! ! " $ #   ! " 
+ " $ % ! " ( # # $ % # $  
+ $ " # # $ " #     % ! $  "  
+ 
+   " %   #   ! " 
+   " " ! $ # ! 
+ #  ! 
+ ! $ " " # $ "  $ "  ! # !     
+   
+ 
+ 
+ 
+   
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+     
+ 
+ 
+ 
+  
+   
+ 
+  
+ 
+  
+    
+ 
+  
+  
+     
+    
+   
+ 
+  
+  
+           
+  
+       
+ 
+     
+      
+ 
+    
+   
+  
+      
+       
+          
+      
+          
+               
+      
+  
+  
+    
+        
+   
+ 
+    
+                              
+                           
+                     
+                      
+                                    
+                                                                                        
+                                                                                                   # ! ! #   ' ' , 2 5 3 3 0 2 0 7 0 2 2 3 9 : 7 9 1 6 2 6 8 5 4 4 < > > 9 8 : 9 7 > < 8 ; : A A B : 7 = < = ? D @ C ? ? < A = A A ? A B ? @ ? 8 5 ; = < ? 8 ; < @ @ C B C ; @ @ 9 ; D ; ; 6 : < D B A B < ? ? D C > E B > : ? ; 4 3 : ; = : 8 5 > ; 8 < 4 9 : : 6 6 3 4 7 3 5 7 0 / 2 1 / 3 2 3 3 3 2 1 4 1 0 , - 2 3 5 4 2 2 4 / / 1 1 2 7 2 0 6 - / 1 , ( / . 5 5 - / - / - 1 . 0 / . / - ' / , + 2 2 - / 1 1 ' + / + . . / / 0 / . + - * ( ) / * / + ) + + ( ) + - * - - + ( ' 0 . - ) ' , . , & ) * ' * ' ) & ) ( $ " $ ' , ) ' + * ) - ( + & $ % ) , ' / / * * ( % ) ( % & ) * * + ) ' & ' ( & $ ' ' ) ( ( ) $ ( ' + 1 ) % ' # % ( % ! " % ) . * & # $ ' $ % " &  ! "  
+ 
+     
+ ! 
+  
+ 
+         % $ % % ' ) ' ' # % # " "   % $ ! $ ' % # " # % $ " $ " $   # "    ! #     # # # % " $ " " " # " # 
+    ! 
+ 
+   $ # % 
+ 
+   # 
+    # # # $ # % "   ! ! 
+ ! ! 
+       
+ "   
+  ! ! ! 
+  
+  
+  
+   
+ 
+ 
+ 
+ 
+       
+  
+      
+   
+  
+  
+ 
+  " 
+ 
+   
+   
+ 
+ 
+    
+  
+      
+      
+  
+  
+ 
+ 
+     
+     
+       
+                         
+       
+          
+   
+          
+        
+                              
+  
+   
+        
+   
+  
+  
+         
+      
+                                                                                                                                                                                                                                                                                                                    ! ! $ ' $ & * + / 0 6 7 5 9 4 4 : 6 5 4 5 : 8 : : > 6 3 ; ; < : ; < 7 5 7 ? 9 = ; : @ ? 5 = : > 7 9 ; ; : 7 = C ? B B D G > ? = < D D : = : = ; ; ; 9 ; < 8 6 = ; D B @ ? D H = 7 < = 8 : A ? A = ? C ? ; = A A B ? F B > 6 7 9 : < 5 7 7 : 9 : 5 3 9 < < 8 ; ? ; 8 4 8 5 5 6 0 1 / . / 1 6 9 1 0 0 2 2 2 1 1 2 5 0 0 4 . 3 1 6 - 2 3 0 1 3 . * , / 3 4 , + - 0 / / + - 2 / . + - / . , / - - + 1 . 2 ( , 0 - , , * ( + 1 4 + . - / ) + - ' & - / / + * ) ) * + ' * * 1 . . * ' ) + * + * * . * ) & ' * - ) * ' & ' % ) ' * & ) * + + * - * ) ( ( ' $ ' & ) * * * ' % . , & ' % ( # & ) ( & # ) ( , + - ( ( . % ) % & ' ( $ & $ % % % $ % + ) , - - ( # % % ! " ! ! ! 
+ 
+   
+   
+  
+ 
+ 
+    
+  
+   ! " & ' * ( % ' % ' %     % % # " ' % & $ $ $ $ $ # " &   
+   #    $     " " $ $ $ % ! ! " #       "    
+    # # #     ! # 
+ 
+   
+ !     
+ # ! 
+  " # 
+       #  ! # ! ! 
+ 
+  
+      
+    
+  
+  
+ 
+ 
+        
+  
+      
+    
+  
+ 
+    
+      
+         
+    
+      
+ 
+ 
+ 
+        
+ 
+        
+       
+   
+                                       
+                  
+                    
+ 
+           
+           
+   
+                        
+                                    
+                                                
+ 
+     
+                                                                                          
+          
+              
+                                                                                                
+  
+ # ! ' % ) / , + 4 5 3 : 9 5 1 : 9 3 4 4 : < < 8 = 6 7 7 = : < > 8 = ; 9 : @ = ; < 8 ; 7 7 8 < 7 8 : 9 = : 9 = ? ; ; < = ? : ; ; ? D C ? > > = B > @ ? : = ; < > > B @ < < ; ? = < ; ; @ ; = = ? > @ B @ > A = 8 = : D A @ 8 7 7 : ; 6 9 ; ; : 5 ? 8 8 ; < ; : 4 5 1 2 6 : 8 3 0 5 5 5 0 2 8 5 7 7 6 3 1 1 0 2 3 4 0 / 0 3 6 2 2 - 1 2 0 0 - / 1 2 1 / 1 , . 2 2 0 . 1 , - / , ) , - ) / 1 - * ) / * . - / - - , + . / + / - - ' ) , . 1 . , ( + 0 / + ) * * - + ' * , 3 2 , ( ) + * , , * + . 1 , + & , * + * ( & ( + ( + ( & + + , + ) - ) ) ' ' + ' ( ( , , * ( ( $ ) ( & * + * & * ( ) ' ' & % ) + % ' " & $ * ) ( " $ & $ $ " # $ % + . - & + ' % # $   % % $     
+ 
+  ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ # 
+ 
+ ! $ ( $ ' % % ' % $ ! # ( # ! $ + $ 
+  # ' & # % ( ' $ % !   ! ! ' # "  !   # $ # # $ # ! $   # 
+ 
+ #  
+ ! & # !   #     ! ! $ !     !       ! 
+    "    
+   "   
+  
+ 
+     
+ 
+  ! 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+      
+ 
+    
+        
+ 
+    
+ "      
+ 
+ 
+            
+      
+ 
+     
+ 
+ 
+                  
+     
+ !  
+  
+  
+    
+  
+       
+   
+    
+         
+             
+          
+                                    
+                                              
+    
+  
+                                                                                                              
+                                              
+                      
+                                                                                                    
+ 
+ 
+   # $ ) , - + 1 8 - 2 5 1 4 5 5 4 5 3 5 7 9 < < 8 9 7 @ : ? ; : = : 5 8 8 7 7 = 9 = 8 = 8 9 6 7 ; 9 : C 9 9 < = 5 ? @ < ; ; ? ? = < @ ; = > < 5 8 B < = = < 7 : : < ; > = : 7 ; : 9 ? F < @ B < > < = @ D ; 9 9 = @ C @ 9 8 5 ; 7 8 ; < 7 ; 8 > 7 2 3 4 6 : 5 1 4 5 6 3 6 1 3 0 7 4 4 2 6 3 8 3 3 3 5 0 7 4 3 1 1 - 0 0 7 4 0 2 3 2 0 / + * , 3 1 0 . , 5 / / / * - + 1 - * * ) , - , / * , ) * - - * + , * + , * - / + ( + ' * + + * ) % * ) - + . - + , ' ( ' * * 0 / ( & ' ) + + / ( ' ' * , % ) ) ( ' ' ) * ' ( ( ' ' & + ' ' ' - ) $ & # ' ' * ( % ! & ) ) + * ' ( ' & , ) & + ' # # % ) $ % - - % ' ' ( ' ' # " $ # % % $ % $ " ( ' ' $ ( ( ( & " $ ' ) ( #        
+ 
+ 
+ 
+ !  
+ 
+     
+ # ! 
+  " & & ( % % $ & % " # % # ! 
+ # % # $ $ ! "   " # # ' $ " !   !   " # !  
+ ! 
+ ! $ % & " !  
+  !   !    " "   
+ 
+ 
+   ! " 
+ !  
+    
+ ! 
+     !   ! 
+    
+  
+ 
+  
+   
+  
+     
+ 
+ 
+ 
+  
+   
+ 
+  
+    
+   
+   
+      
+   
+          
+                 
+      
+          
+  
+                    
+ 
+  
+  
+      
+ 
+ 
+  
+ 
+        
+                     
+    
+ 
+           
+                                                                                                                                                                                       
+              
+ 
+              
+                        
+      
+ 
+            
+ 
+  
+  
+  
+    
+                                                                                                
+ 
+ 
+ 
+ " % % & ) + , 3 6 3 1 / . - 3 7 : 7 8 9 8 9 8 8 7 : > ? : > 8 7 : 8 6 5 7 2 9 9 : 8 4 9 5 6 < 9 7 9 = > ; 9 7 A = ? = = 9 7 ; : 9 < A = < > = 8 7 ? = < 9 9 9 = ; : : 9 D : ; > > < ? > : 9 = = ? < ; 9 7 ; 9 > : @ ? @ ; ; : 9 : < 9 = 6 : : 5 2 8 3 5 < 2 4 1 1 8 : 8 5 1 2 - 2 7 4 3 4 3 4 2 2 2 0 1 3 6 , - 1 1 1 . . 2 3 3 6 2 / 3 1 . - / + * ) 1 1 - / 3 2 . - 0 / . - * - + . / 0 - ' * 0 - - % ) * . ) ( , + * * - ) ) * * . ( ( * + + ) / , . * ( ' * ) ) - - * ) & , * ) * ) ( + * ( * , & ' * % . + + ) ( * ) % ' * ' ) ) ' % ' % ) ) ' * ' $ $ ( ' & ) % * $ ' * % % + * + ' ' ) * ' + + ' ( & ) ' ' $ % ( ' % ( # # " ! # $ % & ! & ' ( ' % % * * $  # 
+ 
+ 
+    
+  
+ 
+   
+ 
+ " 
+ "     " ' % # # $ % ' $ # & # $ % $ !   # ' $ # $ # 
+  ! $   !  
+  # " " # "  
+     # " % "   
+   ! # "   !    "  
+   
+ " ! 
+ 
+       #    
+ 
+ ! ! ! ! !   " 
+   
+   
+  
+  
+ 
+  
+    
+  
+ 
+ 
+ 
+   
+ 
+     
+                            
+                               
+              
+                                                
+    
+ 
+                 
+                                                                                                                                                                                  
+    
+   
+  
+     
+      
+ 
+     
+ 
+ 
+       
+    
+              
+ 
+  
+   
+      
+   
+ 
+ 
+ 
+  
+    
+    
+    
+                                                                                                   
+ " # * & ) ) * , / 4 0 2 9 0 2 6 6 3 5 6 9 5 7 8 7 5 @ ; 7 < 9 < B ; 6 7 6 8 8 7 : < 8 6 : 5 6 7 9 8 : ; ; > : ; ; : = > 9 = 6 6 9 : ; A ; A 7 : 9 ; @ < < 8 7 6 : ; 9 6 : ; : > @ 9 < : > 4 < < > @ B 9 ; 8 9 7 9 B A < < 6 7 6 2 : 4 = 7 6 7 7 3 8 4 6 : : 6 6 4 6 4 4 6 5 5 7 + 2 7 8 7 6 4 2 2 0 4 3 3 4 2 1 . / , - 0 / / 1 5 6 0 - 3 4 2 , 2 + ) , + , / 2 1 / - + / / + ) ' 1 - + , - - ) 0 . / ( ' ) + ( ( + 1 ( . * ) . + , - , ) & ( ( * , , * , + + + * $ ( , 0 , ) & ( 0 - - ' * + ) ) * ( . $ ' , + ' % & ' ! % ' & $ $ ) , ) ' ( * ( ' ) % % ( & & ' % % ) % ( ( ' $ $ + , . * ' ( % ' & & % % % ) ' #   %   " # $ #  " ( $ ( & ' ) ( % ! ( ) & $ " 
+ #    
+   
+ 
+        
+   
+ ! ! % " # % % # # # #   # # $ ' "   " % $ !  
+  
+ 
+ " " 
+ 
+ 
+      $ &  
+  ! ! " 
+ 
+ 
+ 
+   " !    
+        
+     
+  
+ 
+   
+  
+  
+  
+ 
+  
+  
+     
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+ " 
+ 
+ 
+   
+ 
+     
+      
+  
+ 
+   
+ 
+  
+                                                                        
+  
+ 
+                
+                                                                                                                                                                                                                                   
+   
+  
+  
+  
+ 
+   
+ 
+ 
+ 
+   
+          
+   
+ 
+ 
+ 
+               
+ 
+   
+ 
+ 
+  
+  
+ 
+      
+  
+ 
+  
+ 
+  
+ 
+ 
+ 	 
+                                
+                                                                 
+ 
+    $ $ & ( ) . 3 8 1 / 8 6 4 4 9 8 3 0 7 7 9 @ = ; : 5 6 9 < 9 = 9 1 8 ; ; 8 9 6 8 9 < ; ; 9 : 8 8 7 > 8 7 5 4 6 4 6 ; 9 = > 7 : 8 = @ ; < = 5 7 8 8 = 9 : : 7 : : 6 ; 9 ; ; ? < > ? ? ; 4 7 > > 8 > < ; < = < < @ : A < 7 ; 3 3 8 ? B @ 8 4 9 8 8 ; 6 1 0 4 6 : : ; 7 7 / 3 . . + < 8 4 5 4 1 2 / 1 0 . 1 5 1 , . , 0 1 1 2 5 6 2 . . 0 4 / 0 - + * / / 0 1 . , . / + + ) - . + . ) - . + - ( - 0 * ' ' ) * % ( * ) + ( ( . , + ' & ( ' ( ) & & * - - , * ( ( % " % ( , ) ) * ) / . - , ' + ( + * ' % ( ' & ( ( % ( & # ' ) ' ' ' * ( % & ' % ( ) ' ) + & & & % # $ ( & & ' * & % & , + , ' $ " & ! % ( ! % ' "  ! ! ! " ! $ # "  " & %  ' & ( # " " % ( # # ! ! $ " 
+  
+ 
+     
+ 
+   
+ 
+   
+ 
+ 
+ $ & ( & & ( & & % $ # " " # % & " ! ! " " ! 
+        ! 
+ 
+ ! %  
+ 
+  % ! ! 
+  
+ 
+ 
+    
+    
+ # 
+ 
+ 
+   
+  
+ 
+   
+ 
+ 
+    ! ! !  
+ 
+ 
+ 
+   
+  
+ 
+ 
+    
+  
+ 
+  
+ 
+    
+    
+  
+ 
+  
+ 
+   
+ 
+ 
+      
+  
+ 
+    
+  
+ 
+           
+        
+                  
+ 
+  
+              
+  
+ 
+               
+ !                     
+                                       
+                                                                                                                                                                             
+    
+   
+  
+ 
+    
+  
+ 
+  
+   
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+        
+  
+ 
+ 
+ 
+  
+  
+   
+ 
+ 
+ 
+  
+  
+ 
+ 
+  
+  
+    
+ 
+ 
+ 
+ 
+  
+     
+ 
+ 
+  
+  
+ 
+ 
+                                                                                                 
+   # $ $ & * * , 0 5 3 - 2 2 4 7 8 8 5 : : ; @ < 9 5 9 : < < 5 8 ; 8 4 5 ; ; ; 9 7 7 9 ? 6 ; 5 ; 8 : 9 = : 5 1 3 6 9 : < 9 8 ; 9 ; ; ; < 8 9 ; : ; ; < < 7 ? 8 4 8 : 7 8 ; = ; 8 9 < ? 9 < 4 6 5 ? 9 = = = < ; 9 = A 9 9 9 8 : 8 5 6 9 < ; = ; 8 9 ; = : 3 0 ; 9 1 8 5 7 5 / 6 - 2 4 9 3 1 2 7 2 7 0 0 / 1 . 2 3 . 1 2 2 1 4 0 4 4 1 5 0 . 2 - / 0 - ( ) 1 2 0 0 / 4 . + / * - ( ) . & ) / + ) + + * ' ' , * * ) / + + . & + . - , . ) ( ) , ) ) ) ) . / 1 ( ( & ) $ ' $ ' ) + + ( ( + + ( ) * ( ) + ' $ * ( ( , ( & + ( ( % ( & * & & + $ ! * & ' ( ' % ( " $ % ( # $ ( ) ) % " & $ ! & - ' # # " ! # # " " % + ' # "   " ' & & % $ ( % % ( " & $ $ * &   & ( ) $ % %      
+  
+ 
+ 
+   
+     
+  
+ " ( ( * + ( ! % ! " & ( % " % " % '  # ! 
+    $ ! $ $  
+ ! ! 
+ 
+      
+ 
+ 
+      
+   !  
+   
+ 
+   
+ 
+ 
+ 
+ " 
+ 
+  
+ 
+ 
+ 
+ " 
+ !   ! ! 
+ 
+   
+  
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+   
+    
+ 
+   
+            
+ 
+    
+     
+ 
+     
+      
+ 
+ 
+      
+   
+ 
+   
+ 
+        
+       
+  
+        
+         
+ 
+                                                       
+                             
+                                                                                                                                                                        
+ 
+      
+  
+ 
+ 
+  
+ 
+        
+ 
+  
+  
+ 
+ 
+ 
+   
+ 
+ 
+     
+   
+ 
+ 
+      
+  
+ 
+     
+  
+   
+    
+ 
+ 
+    
+  
+ 
+  
+ 
+   
+ 
+  
+                                                                                                
+ 
+  " $ % $ ' . ) , / 0 5 / 4 3 6 5 7 9 8 9 : 6 @ ; : 7 8 6 : 9 8 > ; 8 9 7 9 7 5 7 6 ; : = ? 8 9 9 : @ : ; < : 7 8 9 : 7 9 A < < : < : = ; 8 : ? 8 : ; 5 : ; ? < 3 : > 8 4 ; A < : 7 6 @ : : 5 : 9 ? = ; : = = > 8 9 < : 8 3 ; ? 9 8 6 7 : 8 7 4 : : = ; 9 7 3 7 4 2 9 4 5 3 4 9 6 5 3 3 5 2 3 8 2 0 2 3 5 4 / 2 , - 4 1 . 0 2 0 3 2 0 / 2 - 2 6 / 0 3 - . 1 0 - . 2 - , - - , 1 - . , # + , - + + . / ( $ , - , ' * ( * - . / * - & ' ( ' % ) . ( ) ' . 0 . - ' ) ( ' ( ' ) ( # ( ' ( ) ) , ) - ( . , ( $ % % ( $ * % ( ) * ' % % * ) ( ' ' & % ' % ' ' % & $ $ ' ' % % ' ' ' ( & ' + " ' ( ' $ $ & #   % " # $ * * ' $ $ % # # $ ' ' & $ & ) % ) ( * * $ " $ * & $ $    #  
+     
+      
+  
+ 
+  !   $ ( ' ( $ % % ! # $ $ % $ % " & 
+  # $ 
+ #    !       $ 
+ 
+    ! ! % "  
+  
+   " !    !      
+       
+ 
+ 
+ 
+   
+ 
+ !    
+    
+  
+ 
+     
+   ! 
+ 
+ $   ! 
+ 
+     
+  
+   
+ 
+    
+  
+ 
+  
+       
+   
+ 
+ 
+    
+  
+   
+    
+ 
+ 
+             
+ 
+                      
+ 
+   
+ 
+         
+    
+                 
+ 
+     
+            
+                
+                                                                                                                                                                                                 
+         
+ 
+  
+     
+ 
+              
+    
+  
+                  
+        
+    
+    
+    
+      
+   
+  
+ 
+                                                                                                 
+ 
+ 
+   ! " ' & ) / 0 3 5 5 5 4 ; 4 2 5 6 6 = = ; ; : 7 : < < > B ? > 8 8 : ; 9 = / 5 5 3 > A < 5 8 < : : 7 7 6 ; : 8 9 7 5 : > B < 9 8 6 7 < 6 ; 8 9 : 6 9 8 > : ; : < 8 8 ; ; ; < < : 6 ; > 6 2 4 ; C D > = < : : > < : ; = 9 < ? = < 7 5 9 9 8 7 9 8 < < 9 = 6 6 7 : = 3 1 8 4 ; 4 3 3 5 5 6 4 3 0 2 / 3 2 2 4 ; 1 2 2 1 0 2 3 4 6 7 0 2 - 0 2 6 . 4 3 + - 0 - - . , 1 , - + 0 - , - , * , + * + ( 1 - - ) * , , ) * ( ) ( ) ' ( . - * , + + * * ' ' ' * & ) + % % ) ( $ ) ' ) & ) ' ) ) + + * ( ( , - ( & ) & ' ' % & ) & $ * $ + ( + + ' & % , ( ' ( & ' ' $ & ( # # $ ' ( , * & % ' ! % & # ( " ! # % $ % $ * * , ) # " % ' # ' # # ! ! # % " $ & ( # " % & & " # # 
+     ! !   
+ 
+ 
+    
+ 
+    
+ $    % ) $ # % ( ) #   !  # % & ( # !   " # # " " % $ ! " # # !   # !  
+  !   
+  !   ! 
+ 
+ !      ! ! 
+ 
+ 
+ 
+ 
+ ! !  
+ 
+   
+ !  "   
+ 
+ 
+ 
+   
+ ! !    
+ 
+ 
+ 
+   !   
+ 
+   
+ 
+ ! ! 
+  
+ ! 
+   
+ 
+   
+ 
+  
+       
+ " 
+   
+     
+ 
+  
+ 
+    
+  
+             
+ ! 
+   
+ " 
+       
+ 
+ 
+  
+    
+  
+ 
+ 
+ 
+            
+  
+             
+ 
+  
+ 
+ 
+ 
+   
+            
+         
+                      
+        
+                   
+                                   
+                                                                                                                                  
+       
+ 
+   
+    
+   
+ 
+  
+     
+               
+ 
+ 
+     
+               
+    
+    
+ 
+ 
+                                                                                                   
+    # " ( % + . 4 3 ; 4 4 : 8 4 8 : 8 : : ; : 4 ; 8 8 : < A C @ = ; 5 < ; < ; 8 : : 7 8 ; : ; = > 9 7 9 5 < ? 8 9 < @ < ? 9 7 < ; A ? 6 : 8 9 = < : ? > = ; ; 7 ? ? 8 : ? ; : 8 @ = 9 > 8 4 3 3 8 E @ > 7 9 = > ? < ; : < 6 8 9 ; 4 3 8 : 2 8 9 < 9 8 8 8 ? 9 7 < 7 : 7 3 7 : 9 7 5 3 0 6 8 4 1 - 1 3 4 * . 6 7 1 5 2 3 2 / . 1 5 5 2 2 / 0 2 : 0 5 7 2 , / / / * ) - * ( & . 3 / ( * , - + . + * * + , ( * + ) . - ) ) ) ) ) ( - , ) , / . ' * ( ) & ( ) - + ) * , ( ( * ) - * * ' * ( ) , ' # * & ( ' ) ' % % & ) # ' ' ! ' " $ & ( ( % + & ' ) & , ( ( ) % % & $ $ " & * + ) ) & $ " # ' $ % # ' $ $ ( ( % ( ( & ' % $ ( !   ! " %    " & #  $ ) ' & ( % % & # $ !  $ $  ! 
+      
+ 
+ 
+    
+ 
+ & ( ) ) ) ) + % ! " $ # ! $ " & # # $ $   % ' # ' !   # ! " ' " " % # !       " " %    
+  
+  ! !  
+  
+ 
+   # 
+ 
+   
+       
+ 
+ !   
+ 
+  
+   
+    !  
+ 
+ 
+   
+ 
+     
+ 
+     
+ !      
+ 
+    
+   
+    
+ 
+ 
+ 
+ 
+ 
+ 
+  ! 
+ 
+ 
+ 
+   
+  
+       
+   
+     
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+    !      
+  
+  
+  
+ 
+ 
+          
+  
+      
+             
+   
+                      
+          
+   
+         
+          
+    
+ 
+       
+    
+                                                                                                                                                                  
+                         
+  
+        
+ 
+ 
+ 
+   
+                                    
+                                                                                                  
+  
+ 
+ ! $ & + + * + - 4 1 8 6 9 9 ; 9 2 4 < ; : : : ; 8 6 : = : 4 < ; 8 = : < 6 : 9 : 9 = : > ? < 9 4 7 8 < 9 > 6 8 9 @ : < 8 6 7 < = @ 7 ; = 9 ? 5 6 ; ; = 9 : ; < < 9 7 5 4 5 8 ; : ; 6 6 4 3 4 7 = @ < > ? ? A @ ? 8 < 9 : 8 9 4 : 3 5 5 0 5 9 : 7 1 5 4 1 9 7 7 ; 6 5 7 8 = 4 7 6 5 9 ; ; 6 7 0 2 3 3 + 3 7 0 1 3 6 3 1 5 . . 0 4 2 7 2 / 2 7 / 5 1 . + / 4 2 - + / + + , - / / + ' ) 0 + ) * / ( & ) & - ( ' ) ' & * . + 1 + - ) & ' - / ) - + + * , 0 . ( , , * ) . + , + ( * & ) * * * , + ) ( , * ' ( ) ( & ' # % $ ) * * $ ) ( ) * * ( , - ( ) * * ( & , ( ' ( % ( ' ' ) ( ' % & + ) & $ & * ( * % $ * + * % * ' # $ $ % " # & # # & ( # $ ' % & & ' ( * % ) ( % 
+   # !    ! 
+  
+   
+ 
+ 
+ 
+  
+ ! # ( ) ) $ ) + ' $ ( ' ( & # $ ' % $ % % % $ % % !      $ & ! 
+  " " #   # # 
+ 
+ 
+ ! $ !    
+ 
+ 
+  "   " 
+   
+ 
+ #   
+ ! ! 
+ ! 
+        
+ 
+ # # " 
+ 
+ 
+ ! 
+ !    
+ 
+ 
+ # 
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+    
+   
+   
+    
+ 
+ 
+ 
+   
+   
+  
+   
+ 
+    
+ 
+   
+  
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+    
+ 
+ 
+  
+ 
+  ! 
+ 
+   
+   
+   
+           
+   
+ 
+   
+      
+ 
+                                   
+         
+ 
+                 
+  
+      
+ 
+  
+       
+                   
+                        
+                                   
+                                                                                      
+                            
+         
+                                                                                                                               
+ 
+ 
+   ' ' ) - * - 0 3 2 6 7 7 : 8 6 : 9 3 5 6 5 < 7 5 6 = ; 6 4 ; : : < 8 9 9 < > < : ; : 8 7 9 9 1 5 = 9 9 6 5 8 7 8 3 = ; 7 9 : 8 7 9 ; ; ; 8 < 9 9 : 7 6 = 6 ; 7 6 9 ; 4 8 3 8 8 8 7 6 1 5 4 : 7 = < C C A 7 : ? 8 ; ; 7 8 5 7 ? 7 4 2 9 ; ; 7 8 3 8 : 7 4 9 5 9 5 4 3 4 7 4 6 8 8 8 = 9 7 1 9 8 4 6 3 3 6 / 7 3 0 4 2 3 / 2 / 2 9 7 - 0 / 1 . 0 - . / + , 0 1 , . , 3 2 / * + * ( & - 0 + 1 - + ) , ) ) - 1 . ) + , - 0 - . / ( & , , , ( , / . * , , ) , ' ' & * ( ( + ) ) ) & * - ( ) , ( ) * * ( ) $ ' & . ' #   % & / * + ) ) ) ( ' * ) + / ) ) ' / - * * * ) ( ( - . * % $ ' * % ' ' ' ) * $ ( ' ( * ) # $ % * % # ' % $ % %  # $ $ # ' % & & & ( ) ( ) " & % 
+ 
+  
+     
+ 
+    
+  
+ 
+   ( & & ' ( ( * ( , * & ) % $   # $ & " $   # ' $ & & " " ! $   " ! "      $ #   
+ 
+  # "   "  "  ! ! 
+ ! 
+   !      ! " ! !  
+ 
+ 
+ # 
+      
+  
+  #       "   
+ 
+ " 
+ 
+ 
+ 
+ 
+ ! 
+ ! 
+  
+ 
+ 
+    
+   
+ 
+ 
+    
+    
+ 
+ 
+ 
+ 
+ 
+ 
+      
+ 
+ 
+   
+ 
+ 
+   
+ 
+  
+   
+ 
+ 
+         
+     
+  
+ 
+   
+  
+   
+  
+ 
+ 
+ 
+  
+     
+ 
+  
+ 
+    
+ 
+      
+  
+   
+ 
+     
+  
+     
+   
+                   
+                
+  
+                 
+ 
+                     
+                                 
+      
+                               
+                                                                                                    
+               
+ 
+                      
+                                                                                                                   
+ 
+ 
+   % ' ) ( . 0 0 2 8 : 7 ; 5 ; A ; 6 6 8 4 5 6 > 7 5 6 8 8 3 . 7 4 6 6 7 8 = ? ? 9 8 7 6 3 ? ; ; 8 8 : 8 < : > 4 7 6 6 : ; 9 ; ; 7 7 5 < : ? = 8 9 : 8 8 ; < < < 8 : > ; : 8 5 4 8 7 3 9 9 : 4 = = < : = A F = ; ; 9 > < < ; 6 < < 9 2 8 : 9 7 : 8 8 > < 4 7 9 : 6 8 8 8 7 ; 6 7 ; 3 6 9 9 2 3 8 7 5 6 4 ; 9 1 4 6 0 2 4 3 2 2 4 3 6 2 0 / - 1 / 3 2 6 . / / 1 0 - 1 0 , - 0 , - . / * + - - . , ' , / , . , / 2 + . - 1 3 4 0 / , ) ) + + ' - ) ( * / 3 2 2 , ) ( + % & - ' * & ' + + + ) . . ) , + ( ( , ( ) ) ( ) % ) ( . + ( & $ ' . , + ) ( / + , / . + / , + ' . . . 0 - ' ( * . ) & ' ( ) + ( * ) ) ' * ( ( % $ $ & ' ' & ' % $ ( % & % * ( ( ( + ) ' * ' $ $   ! !  
+        
+   
+ 
+  
+    
+ ' $ % ( ) * * ( ( % ' ' & % % - ' # % % " $ # # ' # & ' $ % " " # ' !  # $ #   
+  " $ " " ! " 
+ ! # 
+    ! " 
+     
+     
+  
+  ! 
+ 
+ # !   " # " 
+ !         
+                "  
+ 
+    
+  !  
+            
+  
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+  # # 
+ 
+    
+ 
+   
+ 
+ 
+    
+ 
+ 
+   
+ 
+   
+ 
+  
+ 
+  
+    
+     
+  
+ 
+   
+  
+  
+             
+ 
+ 
+ 
+    
+    
+ 
+  
+  
+    
+ 
+ 
+     
+       
+          
+ 
+ 
+     
+   
+        
+ 
+ 
+ 
+       
+       
+       
+                                           
+       
+                                    
+                                              
+ 
+                                                                      
+                                                                                                                                        % % % , 0 * - 0 1 4 3 8 6 6 5 9 8 9 ; 4 7 9 8 ; 9 < : : 8 5 7 > 5 2 3 ; 9 @ ? = : = 7 5 ; 8 ; 8 = 9 9 = ; : 6 5 : 6 5 5 6 = > < 9 7 8 ; = ; 9 8 8 7 8 < @ : ; 7 : 7 = 8 9 2 1 4 3 7 8 : : 7 : > ; : 7 > A @ : @ = ? > : ? = 5 < ; 0 3 8 ; 6 5 5 6 < ; 9 6 9 : 7 4 7 5 3 5 6 7 8 5 5 7 4 3 3 : 8 5 4 2 8 8 9 6 5 2 5 8 8 2 2 0 4 0 / / 1 . 5 1 3 3 3 0 - 1 / 0 1 . - - , 1 0 - * ( ' , * 0 . + ) * * . - / . , 2 - 1 3 . 0 , - + & ) + . / . 0 , + - 3 . 1 + * * ( ( ( & & % ) + - - - , - 0 , + ) & & ) ' ( ) ( # ) + / - , * ' ) + , ) * * + , * * - - , 2 3 , - * 0 + - * * + ) * % & % + ( + ( & ( , * ( ( ' % ( # # * ) % $ % - % ( $ % ( ) $ ) - + + ( % + % # "    !       
+ !   
+  
+ 
+  % % & ) ( ) % ) & % ( * # ' & ( ( % " % $ %   ! # " $ " " " # " $ ( $ " % " 
+ 
+ % "   $ ' "   
+    ! " "      # 
+ ! 
+   " "      ! !   " !  
+ #   
+ # " !    # 
+ 
+ 
+   
+ 
+ 
+ " " " !    " 
+ 
+ 
+   " 
+ "    
+ 
+        
+  
+ 
+ 
+   
+ 
+     
+ 
+   
+    
+   
+ 
+ 
+  
+ !    
+       
+   
+ 
+  
+ 
+     
+ 
+   
+ 
+    
+   
+    
+ 
+    
+  
+ 
+ 
+      
+ 
+ 
+ 
+  
+  
+      
+   
+ 
+  
+ 
+ 
+  
+       
+   
+   
+          
+ 
+ 
+  
+          
+  
+ 
+    
+    
+    
+        
+     
+     
+                       
+ 
+           
+                                    
+            
+  
+                                       
+                                                                                                                                                                                                         
+ 
+  
+ # # & ' , * * * 0 / / 2 9 7 6 9 6 2 3 ; 5 5 8 9 ; ; ? : 9 = 9 8 : 9 7 8 ; : = ; ; @ ? < A > 7 4 ; 8 ; 6 > < > 9 7 : 7 : 7 < A = 6 6 : 8 8 < : = ; : 6 3 2 6 2 ; 9 4 7 8 6 5 2 6 3 2 9 9 1 5 9 9 8 8 7 ; > 8 8 ; @ 8 6 = ; ? ; : 6 6 5 < = = 8 2 2 5 6 3 ; : 7 3 2 5 5 8 5 3 7 9 4 7 6 1 7 4 8 : 3 5 3 2 3 7 3 8 7 / 6 8 8 9 4 4 4 4 0 0 0 0 2 2 0 4 0 / , - + + + + , 0 - 2 3 0 , ) + + ) ) , / , ( + - ( * , + , * / ) . - 2 + 0 . , + , - ' / * / . + . 0 , * ) ) - , - ( - + * * ( ' ' , . ) ) ( . & ' * ) ( ) ) ) * , , - . + + - . , & ( ( ) * , + + + / * , , ) , * ) & , & ( ) * & ' ( ( * * ( * ( ( ) ) % ) ) $ & * & $ " % * ' , $ & , * ( , 0 - ( * * * * %     
+  
+  
+   
+  
+ 
+  
+ 
+       & ' * ( ( ) ( ' ' ' % $ ' & ) $ # ! ! % "   # ' ! & " ! % # & # % % # ' " " ! ! ! # " # % %   "     
+ !   " " 
+ 
+ !   $ ! " ! # " $ 
+ # " " !   
+     
+  " 
+ 
+ ! !     
+ 
+      $  " 
+ 
+ 
+ 
+ 
+        
+   $      
+    
+  
+   
+  
+   
+      
+ 
+      
+ " 
+ 
+ 
+ 
+  
+     
+ 
+ 
+ 
+ 
+ 
+   !   
+    
+   
+    
+ 
+ 
+    
+ 
+ 
+  
+  
+  
+  
+  
+ 
+     
+ 
+ 
+  
+   
+ 
+        
+               
+ 
+  
+ 
+  
+ 
+  
+                  
+       
+           
+                         
+     
+                              
+                                               
+     
+                                   
+                                                                        
+           
+                                                                                                                        ! ! ' ' ( + + 0 / 0 0 0 1 8 2 2 7 9 8 9 < = ? 8 7 = 6 < : : 6 9 ; 5 9 8 6 : ; 8 ? 8 < @ 9 7 8 5 1 4 8 : 4 ; = ; 7 : A < 9 6 6 < : 9 7 ; 9 : ; 2 7 9 = : 5 3 0 6 5 6 8 9 4 5 9 4 7 5 6 6 4 8 8 6 : 8 3 3 8 ? ? ; ; < ; : = @ @ 7 9 6 < @ < ; = : 7 1 : 8 3 5 8 8 1 3 7 7 7 5 6 2 4 3 5 3 9 1 5 8 8 8 2 5 4 5 ; : 1 4 2 7 ; ; 8 6 1 4 1 1 3 / 1 3 2 1 , . - + , . / 0 * / . / + 0 . * + - / ' ) , 1 1 . , + ( - + , / . . - - + - , 0 . + + . ( . + ( , / - , 1 1 - . - ) - ) * * , , 0 * * * , , . - / ) ) , - ) * + + ( & ' ( , ' ( + + + , ' $ + , - . ) ) % ) , * * , + * * . ( + % + & ( ) ' ) + ) ( ' # * , + * & + % % % % $ ' & ' ' ) ' # ' * - , / , % * + + # % ! #  
+ 
+ 
+ 
+ 
+ 
+   
+  
+   
+ 
+ # ! 
+ ' ' * ( & ) % ' & % & $ " % ( & ( & % & $ % $ # # & % $ ( & ! " ' %  ! ! ( % #  ! % $ $ # # & ! $ 
+ !   
+    !   ! $ $ $ #     % % $ "  " " % 
+   
+ 
+  "  
+ 
+ 
+     
+ "   !  
+ 
+ 
+     
+   
+ 
+ 
+ $ !  
+   
+ 
+ 
+ 
+ 
+ 
+     
+ 
+  
+ !     
+ 
+ 
+    
+  
+ 
+ 
+  
+  
+ !  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+    
+  
+ 
+    
+ 
+ 
+ 
+ 
+     
+  
+ 
+ 
+ 
+ ! 
+ "  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+      
+   
+  
+         
+ 
+ 
+ 
+      
+   
+    
+ 
+   
+ 
+ 
+      
+     
+ 
+                  
+     
+            
+         
+                                                                       
+          
+              
+                                                           
+                                                         
+        
+        
+                                                                                                
+    " $ ' & * * 1 3 2 3 2 - . 3 3 7 : = > = > 7 1 ; ; = < 9 7 8 = 4 7 5 9 = 6 7 = : 9 8 6 4 5 : 9 7 < = < 7 ; : ; 8 8 : 9 8 9 7 6 5 9 ; 9 : 9 < : 7 5 8 5 7 0 ; 4 4 5 3 4 9 8 2 : 1 2 6 4 : 3 8 < 5 : 7 3 : @ ? < = @ : 9 > 6 A < ; 9 > > > 9 8 4 / 2 6 4 3 2 : 8 4 4 4 7 3 9 8 5 0 3 7 6 4 2 3 5 9 8 1 4 7 8 7 6 3 1 4 5 5 6 6 3 0 1 0 / / 6 3 , 2 0 3 2 , ) 0 . 1 / / 4 * + . 0 + - * ( * - 0 0 . ( / * / / + - . + ) * ) ( , 1 * * ) ) + , ) + , * ) - - * + 2 / ' ' * ( + 0 - * , ) , + , , 1 + * $ & , + ' ( , - ' ) ) ' ( ) * ( % ) ) * ) * * + / 0 / * * ' ) + . - . ( ( * ) * ( - , + ' - ' + * % & ) - ) ) ( * $ ' # # $ & * ( $ & % ( % % ( ) ) ( & + ' ) + #   !    
+  
+ 
+ 
+    
+ 
+ 
+ 
+ ! "   $ ) ' ' & * & ) ( % & & ' $ & ! % ' ' % " # ) $ $ % % # ( # % % # !   ! $ !  !   " # "   ! # 
+ " 
+ ! 
+ 
+ 
+ !  
+   !   & $ # ! % $        ! 
+ 
+  
+ !   ! 
+ 
+ 
+   
+  !  
+   
+ #   
+ 
+ # " ! 
+ 
+    
+   
+   
+   
+ 
+       
+  
+  
+ 
+ ! 
+ 
+   ! 
+ 
+ 
+ 
+     
+  
+  
+ "   
+    
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+     
+ 
+  
+ 
+ 
+    
+ 
+     
+  
+  
+       
+      
+                      
+ 
+           
+  
+         
+ 
+  
+         
+      
+ 
+               
+           
+ 
+                                  
+                                                                                                                                                
+      
+                            
+                  
+                                                                                                    $ & & & ) + , - , 2 5 6 1 0 2 6 9 7 6 : : 8 6 1 6 < < @ > 7 6 8 8 ; 7 ; ; ; ; = 8 : 7 6 8 6 6 8 < = > > 5 4 7 < : 9 8 ; 9 : ; 3 5 8 8 6 2 7 6 ; 3 4 4 8 7 5 : 7 4 3 3 4 3 5 4 2 0 4 2 4 5 / 5 5 3 8 5 8 8 : = = < A @ < ; 8 = = ? 7 : 9 9 2 5 6 3 6 4 2 4 6 6 5 2 7 5 5 2 8 7 5 2 , . 3 1 1 1 1 4 7 3 2 0 2 - . 4 3 0 6 8 / 0 1 3 + * 1 6 4 2 + - / . / + , . . - . 0 , , - . * * . 0 + , . . + + & - ( + , - ' ( ) * / - ' / 0 , * , , ( + , - / * * - / + / 3 . ' - , + ( , ) + , , / ) ( ) 0 ' ' & ' + ) ) / - * * ( ( % ' ' & % & ! * ( * * ) + & + , / . ) , , * ) ' * + ( % ( * , ) & ' - ' ' ) $ ' ( , * * % $ % ' & # " & * ' " ! * ( ' ( + - ( * & ( ) * + ( " $ # 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ $  
+  
+   % ) " $ ' ) ( ) ' & ' & & ( $ # " ) % % % ' # # $ % ! # $ " % #   $ !   # $  ! # 
+ ! ' "     !  ! ! ! $ 
+ "   # 
+ 
+   " & ! " $ " " % " $ # " $       
+ 
+   ! !   
+  
+ !  
+ 
+ ! ! 
+ 
+ 
+ 
+ # !  
+    
+  
+ 
+ 
+    
+  
+    
+ 
+ 
+   ! !  
+ 
+ 
+   # 
+      ! 
+    
+    
+ ! !   
+  
+    
+ 
+  
+ 
+ 
+     
+ 
+ 
+  
+   
+       
+ 
+   
+  
+ 
+   
+   
+                  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+         
+   
+            
+           
+                
+                                                                                                                                                                               
+  
+       
+  
+       
+            
+                  
+ 
+      
+                 
+  
+                                                                                                 
+     # ' ' + * - - , 1 5 4 7 4 8 ; 7 3 5 2 4 4 7 6 ; 7 : < > 8 < : 9 4 9 ; 7 9 ? = 9 8 ; = @ 9 7 5 = A ; : 3 6 9 : 4 8 4 8 6 ; : 6 2 5 2 3 3 7 ; 5 2 2 0 3 2 0 1 2 0 0 2 5 5 1 2 0 2 2 0 4 9 7 5 2 3 6 6 4 6 : 9 7 7 = : 9 5 4 9 9 ? 9 9 5 8 7 6 0 0 / 7 2 = 5 5 5 1 8 7 : 3 4 2 1 1 3 0 4 2 . 3 4 2 5 7 1 2 2 0 0 6 7 2 5 3 2 2 1 / 1 - 3 3 3 1 ' . 1 / 0 , + 1 . + , 2 . / 3 0 / / + / + + . 4 + . ) . + ( . - ) ) ( ) * - ) + 0 / ) - + - / + + & * , - / , . , - ( - - , ) * & + - * ( ) + ) * % ( * + + & ' + - - * * ( % # % ( # # ( + * ( * & ' * - , , ) ) ) * ( ' & ) 0 , * ' & + + + % & ' & ' # % $ $ % ' ' & & & & % " % ' ( " " ' + ) % ( * , + * ) + , ' # $ $    
+   
+    
+ ! 
+   
+ 
+   & % & ( ) ! $ % '   % ' # & $ % % $ % ' '   " " $ # "  ! # $   ! $ ( # & "   &   ! $ "    " ! 
+ ! ! "    ! !   " 
+ 
+  # $ # 
+ % ! ! !    ! # # # !  "   
+   # 
+       
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+     
+  
+ 
+    
+ 
+  
+  
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   
+   
+  
+    
+  
+  
+  
+   
+             
+    
+ 
+ 
+ 
+    
+   
+     
+  
+  
+  
+ 
+  
+ 
+   
+   
+      
+  
+   
+ 
+ 
+   
+        
+  
+      
+  
+ 
+     
+   
+                     
+                    
+                                                                                                             
+                           
+               
+         
+                     
+   
+      
+ 
+           
+ 
+ 
+    
+ 
+    
+       
+            
+                                                                                                
+  " " # & " ) + - 0 3 , 3 5 5 5 2 6 7 6 6 7 6 4 9 : < ; : A 8 ? B = 8 9 < 9 : 8 > @ = : ? < ? ? 8 6 8 8 ; 8 9 : = 8 : 7 : < 8 4 9 ; 9 9 5 6 1 4 9 2 8 2 1 3 3 7 1 - 3 6 2 4 3 3 2 3 3 8 5 7 9 8 7 8 8 0 / 1 4 : 8 7 5 6 = 5 3 6 4 7 7 ; 8 7 8 : 7 5 2 6 6 5 2 8 4 4 3 1 6 2 4 2 / 5 1 4 2 0 2 0 3 2 1 5 5 6 1 2 5 / 1 1 1 / 1 1 0 / , 1 0 1 / 2 1 0 4 3 0 . 2 - 0 , , , + * . 0 , , 0 0 . ) * . / / 0 0 / + , * ( , % , ' * * ( . ) ) + 0 & ( - . 2 / , ) , , * ) ( - - * * ) ' ) + - , , ' * ' ( ( ) * + ( ) ( * ' ( ( ) ) ) ' ) ' & ' ( ( ' ' ( $ ' ' . * ( ) + * & ( & ( ) & ) , . , % ) ( - % ( * ( ) & ) ' % ' ) ) * ) ' * & $ $ % ( ( % ' ) ' % % + + + ) . ( ) " !       
+    
+ 
+  
+ 
+ 
+ 
+       # ( ( $ " ) ( % & ' ' $ # $ " $ ! ' $ ( $ # % ! ! % # $  ! ! # " ( # " & ! % $ ( " " ! ! ! $ " " % " !    # # % $  
+ 
+ 
+  ! " ! ! 
+   
+ 
+ !     " 
+     
+  
+ 
+  
+     
+  
+ 
+  
+ 
+ 
+ 
+  ! 
+ 
+  
+ 
+      
+    
+ 
+  "   
+    
+ 
+  
+   
+   
+   ! 
+     
+ 
+ 
+  
+      
+ 
+ 
+ 
+ 
+ 
+  
+  
+     
+ 
+ 
+     
+  
+   
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+        
+                
+                  
+  
+         
+     
+  
+              
+ 
+ 
+                      
+    
+   
+                                
+                                                                                      
+           
+                        
+        
+   
+        
+     
+        
+         
+            
+        
+                                                                                                
+ ! 
+ 
+  " $ ) , . 2 4 / 1 6 ; 1 6 8 8 3 3 8 8 ; 7 ; = 9 8 = 7 2 ; 8 7 ; 5 9 8 7 8 : 9 9 < 7 ; > < 8 ; > > ; 6 : 5 9 6 7 9 6 9 0 5 3 7 7 9 ; 2 1 / 0 5 1 / 2 2 2 ; 6 5 : 6 2 / 6 5 2 4 8 8 4 2 5 8 7 5 5 1 3 : 9 6 3 1 5 : : 7 5 4 5 5 8 5 2 2 5 3 3 1 8 6 2 2 7 4 1 4 0 2 3 1 / 3 4 1 5 2 / 5 3 5 5 1 . 0 1 2 0 2 / 1 + + / - 1 ( 0 , 2 0 0 1 . / / 0 2 3 - . 0 - 1 - - , * / / 0 + + 2 / ( ' ( , + . + + + ) * / ( & . + , ) + 0 * ) , , ) * * + , - 0 , + * , ( * + + + ( ( ' , + . . , ' 1 ' ( , , , + * ( ) * % ) , ) * & ( ( $ $ ( ' & ' * ) + ) ) + ' & * * ( " ' + ) - . ) - , & $ ' * - ( ' ) * % & ( ' ' ( ' $ ' & $ * $ % & ) & & % ' ' ) ' + , ) , ' - . , &    
+     ! 
+ 
+ 
+ 
+ 
+   
+ 
+  
+     " ' ( ) % ( & $ # % " ! # '   ! % ! # ' ( # #  # " ! & % % ' # ! " ( $ % $ " # %   #  
+   " !     " ! " 
+ 
+ ! $ "   
+ 
+ 
+ 
+ % "  ! !  
+  
+ 
+     
+ 
+  
+ 
+   
+   
+ 
+      
+ 
+ 
+       
+ 
+ 
+   
+   
+ 
+     
+    
+ 
+      
+              
+ 
+  
+   
+    
+  
+   
+   
+       
+ 
+      
+ 
+   
+      
+  
+    
+    
+ 
+ 
+  
+    
+  
+ 
+ 
+ 
+         
+  
+   
+               
+  
+         
+ 
+                 
+ 
+                                                                
+                                        
+                                                                      
+ 
+             
+ 
+     
+ 
+            
+ 
+   
+         
+          
+   
+  
+                                                                                                                      
+  
+ 
+ 
+ # & ( % - 1 4 7 8 7 0 5 7 5 : < 7 ; 6 3 2 9 ; ? @ ; 9 ; 9 8 3 3 5 ; 3 5 7 : 5 8 6 4 8 6 > 8 7 ; > : : 8 6 1 3 8 9 = 5 9 9 5 7 3 8 3 / 2 4 8 1 1 2 1 0 3 7 5 8 ; 6 + 0 3 3 7 : 4 6 5 7 < 4 7 3 4 , 2 6 5 5 8 6 9 ; 4 4 3 1 7 8 6 5 1 1 5 8 0 4 1 0 / 1 6 3 . 3 4 9 2 2 7 6 5 4 3 7 5 5 9 3 2 2 3 2 1 0 , / 0 - , 0 * - ) + / 2 0 / + 1 - 1 1 . 1 / - + , 2 - * , ( / 1 + $ - ) * + % ) ' + ) , + + * , * ( ' * * + ) + * * ) / , ' , & ( - , 1 - + , 2 2 0 . ( ) ' ) . . + + * * + ( ( ) ) ' - . ) , 1 & ( ) ) + ) & ' ( ) ' ( ' ( * ( ) 0 . ( ' & ' ( * + & ' + ' - ) ( , + + * , , & & ( & - % ' % - ) + , ' * ( % # & & * % % ) % % ! ( + * $ ' * , ' + ( ( # 
+ !    
+ 
+         
+ 
+  
+ ! % ' ( * ) ' ' % ( " ( $ ' ' " ! # $ ! % ! " # % " " " " " # & # # $ & $ ) #   " ! % & ! ! ! $ #    
+       " 
+ "        
+ 
+ !    
+             
+    
+ 
+  
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+ 
+     
+  
+       
+ 
+  
+  
+       
+  
+  
+               
+ 
+      
+                   
+ 
+     
+     
+ 
+          
+                           
+       
+     
+    
+                   
+    
+   
+                       
+                 
+                  
+                                                
+                                                                      
+                                    
+           
+          
+        
+     
+ 
+        
+  
+                                                                                                   
+ 
+ $ $ " & , + 3 7 1 9 8 5 6 5 5 5 ; 9 7 6 7 1 : ; ; ? 7 ; 9 : ? 7 9 5 5 7 6 6 9 7 8 3 4 4 4 6 5 3 8 8 : 3 7 7 0 5 9 8 7 7 ; 7 2 6 3 5 3 2 3 1 1 3 3 2 2 4 2 5 : 6 5 9 1 / 3 1 / 3 0 3 6 5 3 6 1 2 4 . 0 2 8 5 7 7 4 7 8 6 2 - 4 6 6 7 5 / < 4 5 . 4 - 4 0 5 0 / 0 3 9 . 0 3 3 - / 1 7 7 0 3 / 4 6 3 0 0 3 + - 5 * / . / . * * ( . . - 0 1 - 1 / - / 3 / 1 . 0 , ) ( + 1 - ' & ' & * , , + * + ' ( ) * + , - , ) * ( * ( * * + . - / , + ) * ( . , 1 - * - + * ) ' * , & , / & % * $ ' % * ) + + * , ( + 2 ) + ( ) ' ( ( ) ) $ ) ' ( ( ( ' % , ) ( ( $ ( # ( % % $ ) " ) ' ( & , ( * ' ) * ) ) ( ' ' ) ' * + % % % ( % # $ # ' * % ) % $ $ % ' ' * ' * & ) % ) + ' % " 
+  !   
+  
+ !      
+ 
+    & ( ( ) % % $ $ ! % ! ' & $ # $ % # # # # $ ' ' $ ! ! 
+ ! "  " ! $ ! * # ! ! " % $ 
+  " " " "  !  
+ " " #           
+  
+ 
+                 
+    
+ 
+   
+ 
+     
+              
+       
+               
+             
+     
+               
+         
+                
+                   
+                               
+           
+     
+  
+                                                                                                                         
+                                                                                   
+      
+         
+     
+       
+      
+           
+      
+                                                                                                     
+   & ' " ) / + , 0 4 2 5 8 7 3 1 7 < 6 8 7 7 7 2 5 2 3 / = < 9 ? 7 8 3 7 7 7 5 7 4 7 9 ; 5 5 8 5 / 5 8 9 5 3 5 3 5 8 : 5 5 8 / 0 3 7 7 4 2 5 3 2 / 2 ; 6 5 1 3 3 6 4 7 4 2 5 6 3 5 , 1 , 3 0 0 / . / 4 0 0 3 4 1 4 4 : 5 7 3 3 1 9 3 7 3 6 4 / 3 / 0 4 7 0 5 2 2 , - . . 0 1 4 / 1 5 1 3 2 4 / . 0 0 0 / . 2 3 2 , 1 / / . 0 , / * / / 2 5 1 1 / . 2 / 3 2 1 - . * - / . , + ) - , - 0 - 0 ) + ( + & + * ) + / . . * ) $ * ( * . , ) ) / / , + - , + * , - + * * ) + - + - , $ * ) ( ) ' + + + ( ( + * + ) ( . , ' ( # $ * $ # % ' ) ( & % & % ) * ) & ) # ' # & & * & & & ' % * ( # ' # & % & $ ! " + * % ) ( & # ' % % & ( # & % ' $ ! % ) $ ) ( # # & ' % ) & ( %  
+ 
+ 
+ 
+   
+ 
+    
+ 
+ 
+    
+  $ ' & , & + ! " $ # $ ( (  "   # # " 
+  & % % % $ "  ! $ $ " "   # &   ! ! ! # $ 
+  $ ! " $ "    
+   
+             
+              
+ 
+   
+   
+ 
+ 
+           
+ 
+                                    
+                
+                                               
+ 
+ 
+                                                                                                          
+                                                                          
+                                                   
+                                      
+            
+  
+                                
+                                                                                                
+      
+ $ % ' * - 3 0 1 7 0 4 7 7 7 1 4 7 3 / 9 9 5 3 8 2 2 3 9 ; = 9 7 5 4 6 7 5 4 9 6 < = 6 1 4 ? 9 7 7 6 ? 6 3 7 7 6 4 6 3 6 7 6 0 - 2 4 2 3 4 1 4 9 6 5 5 1 / 6 6 4 6 9 2 0 6 6 3 4 1 7 5 3 1 1 2 4 3 / 0 0 1 7 4 0 < > 9 = < 3 3 0 3 6 4 6 9 1 7 9 5 5 3 1 2 1 3 . / 0 / / 1 6 1 . 3 4 1 2 3 2 . 1 2 0 2 2 4 / 1 , , / 2 1 3 / + 3 / 0 0 1 1 1 - + - . 0 2 2 / , 3 4 2 4 - , * - ( . 2 , + ' % ' $ - + ( ( ) , , + + + ( - , ) ( ( - ' - ) ) * + + + ( ) + - - ) & / - ) + - ) * & % * ) ( ' ) $ & ( ' ) + % ( , . ( ' % ) ) # & ( ( + ) ' ( ' $ + ) $ & % ' ' & ' * & % # * ( ( ' $ ( ' ( & , " " ' ' ( ' & " ) # ( # $ ' % & % $ &   % * . & % % # $ * ( ' % ( & $ $ 
+ " 
+ 
+ 
+        
+ 
+ 
+ ! 
+ 
+ 
+ # $ * ( ' ( % " $ % % ' & # " ( % % % $  " # & ! !  ! 
+ 
+ " ! ! #    
+  
+ ! " % # #  ! #  % #   
+ 
+                 
+           
+ 
+ 
+ 
+  
+   
+  
+   
+              
+        
+          
+          
+           
+                                                          
+                               
+                        
+                         
+   
+     
+                                                                                               
+                                                                                          
+                          
+        
+       
+                                                                                                 
+ 
+   ! # # ( * + , - 3 7 7 2 3 7 3 8 ; ; 6 1 5 ; 9 9 8 4 6 2 8 @ 9 7 : 2 3 2 8 4 9 : 5 8 5 4 4 1 7 : 8 5 / 8 8 6 7 9 6 7 4 1 3 3 3 1 0 3 1 4 7 2 4 3 7 8 0 4 6 7 9 4 1 2 8 6 3 8 7 4 5 1 4 5 7 5 1 3 7 0 0 / . 2 4 . 0 6 7 6 1 7 4 6 7 7 9 8 5 7 5 4 / 3 3 . 1 0 4 / * 6 7 3 7 8 5 4 0 . 4 5 1 . / - + + / + / / 1 4 1 / - 2 7 4 / . . / - / 2 . - . - 1 3 3 . 0 - 4 1 3 . , . - ( + + , + * + ' ' * ) ) ) ) + ' . ' * , + ) * + - ) - / * * * + - , . - + + ( ) , ) , - ' ( ) + * ( * % ) ( + , + ' % , ( ( * & & + * & ) + , * + * & ( + ) ) % * ( ' & $ & ( ( ' ' + * ' , ' + , + & * + + % ' ' ' ( ' ' % * ( % ( ( ' & # $ ( & ' $ $ $ ( + * ' # " ' ) ) ' & $ % % # !   " 
+  
+ 
+ 
+  
+  
+   
+  !     " * ( ( ) % $ % ! # - ' $ $ # % $ $ $ # " !       " " $     
+ 
+ 
+     
+ 
+ 
+     !     ! $       
+ 
+            
+  
+                 
+ 
+ 
+     
+ 
+       
+  
+                                                                
+               
+  
+                                                        
+                                                                                                                                                               
+                                                        
+                                   
+                                                                                                                                 
+ # " " $ % ) - / 1 1 3 / 2 4 2 7 < 7 3 / / 4 7 0 0 4 6 3 6 5 5 6 < 1 0 6 7 8 ; 7 5 6 7 3 9 7 6 8 7 5 8 6 5 7 4 7 2 3 0 / / 5 / 2 , . - 3 1 * 4 6 4 5 1 1 7 = 8 7 . 0 7 6 / 2 6 ; 2 1 5 1 4 4 4 3 1 2 2 2 . 2 1 1 4 5 2 1 5 5 4 4 6 4 6 7 4 4 1 1 0 / 3 1 2 6 4 / , 1 6 3 1 1 / 0 4 , / 3 4 2 0 . . / 0 * * / * 3 / , 0 0 2 1 , 2 . 2 , + / + + / 0 . , , 1 . 3 / 0 - . 0 1 1 + , . . , ( % * ( ( * ( % & ) ( + + , - ( + ( + , + ( + * * ' * * + 2 . + * ) ' ) * / ) & ' + , + * + ) ( ) , + " $ ( * & $ & % # % ( & * ) * * % % ' $ # # & % ' $ " & % % $ & $ # & , + ( ' & % * $ * , , + & & & % %   ( & ( & + ) % & # ( % % # # ! $ $ ( $ # # & ' ) ' $ " & % !       " 
+  
+ 
+  
+  
+        
+ ! # & % % $ " # ! !   " "   $      
+ " $ & ! ! " !   " 
+              ! 
+ 
+  !  " 
+  
+      
+ 
+ 
+           
+               
+               
+    
+           
+                                                                                                   
+                                                                                                                                                                                     
+                                                     
+                                                        
+                                                                                                                 
+ 
+  %    ' ' + * 2 6 5 4 4 5 4 6 9 < 3 1 4 4 9 7 , , 1 8 5 5 0 3 7 : 2 6 8 7 8 8 3 8 : 7 5 6 4 9 < ; 3 : 3 5 8 9 1 1 1 1 2 - 3 4 1 / 1 2 7 4 1 4 7 8 : 4 3 6 : 7 ; 7 3 5 6 3 2 4 7 5 / / 2 5 5 5 4 7 7 6 2 1 2 1 / 2 4 5 0 2 / / 6 6 5 6 4 3 7 1 3 1 2 2 5 6 9 4 2 1 0 4 0 / 0 1 - 5 - . 3 1 5 . 2 / 1 1 1 / , ' 4 1 . 0 / - / 2 5 4 4 + - , - / 1 - ) + + ( ) 0 / / * * 1 . / - , . . , * & ( . & % ) & ( ( * + ) - - + 0 , ( + + ( ( ' ) ' * - / * 1 / - , * ) ) + ( ' + + / + ) * . + , . + ( $ ( ( ) ( ( ( ) % * + ( + ( ( % ( &    & ( , % ! % * ( ' % ! # ! # + ( % $ % # ' % " + , * ' ' & # ' & % ' ( ( + % ' & # ' $ $ $ ! % ! " % $ & ( ( ) * ' $ " # % & #   #   
+ 
+   
+    
+ 
+ 
+ 
+ 
+ 
+  "   # $ "   
+   
+            !     
+ " #  " 
+          
+ 
+ 
+   
+  
+   " 
+ 
+      
+              
+ 
+                      
+                     
+                                               
+                    
+                                                                                                                                                                                                                                       
+                            
+             
+                     
+                    
+                   
+      
+                                                                                                   
+  
+    # % ) , , 0 2 3 1 8 4 5 5 6 8 7 3 7 9 3 0 0 - 3 : 5 3 4 2 7 5 5 4 2 8 3 8 9 4 8 7 4 : 0 5 ; : 5 4 2 0 5 - 0 5 8 3 4 . 1 - , 0 3 6 1 2 3 3 0 7 0 6 5 4 6 3 5 6 2 1 4 0 / 3 7 3 / 6 3 6 / + 0 4 4 0 / - 0 2 1 6 2 1 / 0 / 4 4 6 3 7 7 2 1 / 2 2 1 0 4 3 3 6 - 2 2 6 2 2 2 6 2 . . . 1 , . 0 / * . 3 1 + , , . 0 / 2 0 . / . . 4 5 4 / 0 * + - ) + . ( ' ' - 5 / + / 1 + , + 2 2 / ) ( $ ( + ( & % , + , - * / + + , * + , ( ' + , , * ( ) * * * / - 0 + - * & , , + ) + + ) + + * * ) & ' ) ' ( ' ( ( + & $ % % ) & ( & ' % ( ( " * ' % ) ' $ $ ( + ) % " # % % & # % ' $ % # % ' ( + * ) ( ' # % # # ( ' % ( $ % & ' ( #   ! # % $ $ # " % & ' ( # # ! ! $ ( % " 
+ 
+   "        
+ 
+ 
+ 
+                        
+ # 
+ 
+    "   !           
+  
+ 
+ ! !  ! 
+ 
+  
+ 
+  
+    
+                               
+   
+  
+          
+     
+                                                                                                                                                                                                                                                                                                                                          
+ 
+             
+        
+       
+                                    
+ 
+  
+              
+ 
+                                                                                                  
+ 
+   ! " # ( - 0 0 0 6 1 3 4 7 3 : 5 5 7 0 5 4 3 1 / 4 6 2 2 5 7 3 5 2 / / 3 9 2 3 3 5 5 / 6 3 3 7 9 7 2 5 2 1 4 5 2 / 6 2 / 0 ) / 2 3 , - , . - 0 1 2 2 3 6 7 / 0 4 3 4 7 2 2 1 1 1 4 7 3 1 1 . / 1 1 / / - * . / 3 0 . 4 4 3 3 3 / / 3 2 1 - / 1 / 1 4 2 - + . . , 2 5 / 3 1 0 / 0 , . . . * / 2 / 2 , 0 1 0 0 , 4 1 / - . 0 , - ) 1 2 . 3 * / + % ' + / 2 ) . 0 2 - 3 3 , ( , - 4 1 0 + % & + % ' $ * - * ( , - + . + ) ) , * + ) + + + % * ( * ) + , - * ( ( ' ' ) + * ' ' % ' ) ( ' $ " % ' ( ) & ( / , ) * $ & ) & ' # " " # $ " % & ) ' & * ( * * ' # " $ ) ( ( % # " $ ( ' ' & & % & % % & $ % & % # # $ %   $ % ( ' # $   # " % " $ & % ! " " " ! " $ $ & %    
+ 
+ " ! 
+ 
+   
+                                       
+ 
+             
+   
+    
+ 
+   
+   
+            
+               
+      
+  
+          
+            
+ 
+    
+                                                                                                                                                                                                                                                                                                                             
+   
+      
+ 
+   
+    
+      
+ 
+        
+ 
+           
+           
+    
+ 
+   
+            
+   
+  
+   
+  
+                                                                                                 
+ 
+  ! ' $ % & , 1 7 1 5 2 2 7 9 8 9 3 3 9 5 4 5 3 2 0 8 4 6 7 2 3 2 9 6 2 5 5 3 4 4 ; 2 4 7 4 7 1 8 3 3 3 1 0 2 1 5 2 2 0 2 3 0 / 1 3 4 1 4 ( ) / 2 4 1 2 4 8 3 / 6 : 2 4 6 5 4 2 2 0 9 3 1 4 1 5 1 / 0 2 5 4 / 1 0 . , - 6 4 5 4 3 2 2 2 3 / 1 5 , , / 2 / 1 . 3 / / 1 0 . 0 1 / / / / / / 0 0 2 2 3 0 2 3 / - + , 2 2 0 4 0 - . 2 - + 4 / 1 , , * + , / . , . 0 . 2 1 2 < 0 + - 3 / * + - + - , , , ) % , ( ) , + . / 0 ) * . - 0 ) + , ) ) + ) , * ) , / + % ( * ) ( ( # % ( ' * ) $ * * ! ' + , ) ' ( ) , , % ( ( ) ' $ ( ) ' $ ) * ) + ' & % ( ( $ ( # % & " ' % % # # # $ $ % % + & ( $ $ # " $ # $ ! # $ % ( $ # $ ' & ! " " & # # " " " ! ! " " $ # $ ' ( # % $    
+ 
+ 
+ 
+      
+  
+                                             
+ 
+  
+      
+     
+ 
+ 
+             
+ 
+               
+  
+    
+ 
+  
+ 
+     
+ 
+         
+                      
+ 
+ 
+                                                                                                                                                                                                                                                                                                             
+               
+  
+ 
+ 
+  
+    
+ 
+       
+  
+ 
+                   
+ 
+     
+   
+ 
+            
+  
+       
+                                                                                                   
+ " & $ ) * + / 2 2 5 3 9 7 8 ; 9 5 6 3 6 3 4 1 5 8 0 6 8 9 4 0 1 5 4 : 7 8 8 9 5 8 2 3 1 2 1 0 5 8 4 / / 5 8 7 1 . 0 3 - 4 4 8 5 5 3 / - , , 0 2 3 3 5 3 3 0 1 3 7 2 3 2 6 : 3 3 . 3 2 2 - . / / . , - 2 5 2 5 . + , / 4 0 3 4 0 3 0 . 0 / 0 0 - - . 3 0 + 0 0 * 1 - - , 0 0 2 / / / 1 / 1 2 1 0 3 0 / 3 2 / - / - - . 0 / - , 2 . ) 3 0 0 + * 0 + * / / . . - , . - 1 2 , 1 - / , - - / / . * , 1 ) + ' . / . ' * , ( ) , . ) + ) ) & ' + , * + ) - - - * ' + + ) ( - & ) ( $ ( ( % % ' ( ( ) + + ' + , + ( & ' & ' * % & * % % ( * & % $ & % ' & " ' $ ! % & & % ( % & % ( ! % ( * % ! % " # % * % ) " % ( # #    " # % " % " % $ $   " % $ $ !   # ! " % $ % $ # " " 
+ 
+ 
+   
+    
+                                   
+ 
+            
+ 
+      
+    
+   
+ 
+ 
+          
+ 
+   
+           
+      
+ 
+  
+  
+ 
+ 
+ 
+    
+ 
+ 
+ 
+     
+ 
+ 
+ 
+      
+ 
+ 
+ 
+  
+  
+             
+        
+                                      
+ 
+                                                                                                                                                                                                                                                           
+ 
+  
+           
+     
+       
+                           
+              
+  
+                
+                                                                                                 
+ 
+   
+ 
+ # $ ( ' + . 1 1 1 6 5 4 6 8 7 3 4 9 5 4 8 6 9 8 4 0 5 9 6 8 5 6 1 8 2 7 : 5 5 6 6 5 4 2 7 2 0 2 4 2 - 3 5 2 . 1 4 1 3 5 2 0 / 1 2 . . / 2 7 0 3 3 2 3 8 0 . 4 7 7 2 7 : 9 0 3 7 3 0 . 1 / 1 0 2 - 1 0 4 3 1 0 0 5 1 4 3 2 5 2 0 / , 2 2 1 1 , 0 3 1 / - , / 0 / ( / 2 1 5 5 8 1 5 2 1 1 1 0 0 2 3 , * 4 7 / . 1 , - 4 4 4 0 0 - . 0 0 1 + * + + , / 0 - / , 0 * ) - / . - - 1 . - 1 - - * , , , % ( & ) - 4 . $ ' & - * , + - * ) - ) - . ) - + , + * * * ) * ) ) & * ( ( & - * * - , ) * ( + ) , . / - , ) ) & & ( ' ( * & % ( ( & ' ( ( # % * ( ' %   ( ) ' ' ) * ( # ( & # & ' & ( ' % & ' & % ' # ' ) $ & % # # " $ % $ " $ $ " " & * % $    # ! " $ & ' $ $  !  
+  
+ 
+  
+   
+ 
+                                 
+             
+   
+   !   
+     
+   
+             
+ 
+  
+           
+ 
+    
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+    
+   
+ 
+    
+  
+ 
+  
+   
+ 
+ 
+   
+    
+ 
+ 
+    
+                    
+ 
+  
+   
+     
+             
+    
+   
+                           
+                 
+                                                                                                                                                                                                                
+             
+  
+  
+  
+     
+        
+   
+ 
+ 
+ 
+                       
+       
+   
+       
+ 
+ 
+ 
+                                                                                                
+ 
+     # " * , + ) . - 4 / 9 1 7 6 4 4 0 : 6 7 7 1 1 3 4 2 8 8 4 8 4 9 3 4 5 3 2 , 1 5 3 / 4 8 9 7 / 2 4 / 2 , . - 2 3 1 2 . 0 . . . + - - 1 / 3 1 0 2 2 - 2 : . + 5 5 8 8 4 8 8 1 6 / 0 ) * + . 7 4 0 0 1 . / / 2 3 3 1 < 7 3 0 4 6 4 / 1 2 3 - - 3 1 - . 1 - 0 2 1 / ) 0 5 1 1 6 7 3 6 3 5 0 / 1 0 3 0 / + 0 8 4 0 0 , 0 1 2 5 3 2 1 6 0 1 1 * - 0 , + + / ) - / 1 . * 5 . - - - 4 0 1 . . ( , + ' * & % ) * ( * / ( # % % * * ' ) ( - , * + + + , + + * + ' ( , ) ' " ' ' ' ' + * ) + 3 + ) $ $ * * , + + ) ' ' ) ) * * * ' ' ( ( & ( $ ' $ # $ & $ ' % & & $ * ( $ & ( ( % $ ) # " ' ) ) % % ' % % ' ( & # # # ' % # " " ) ( % % % ' " " $ # ! "   $ # " $ " % & & % "  
+ 
+   
+ 
+ 
+ 
+  
+ 
+ 
+                                 
+             
+   
+ 
+ 
+     
+ 
+    
+        
+     
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+    
+  !    
+ "   
+  
+ 
+ 
+     
+ 
+ 
+ 
+   
+  
+  
+ 
+   
+ 
+ 
+ 
+  
+    
+ 
+   
+    
+ 
+ " 
+    
+  
+ 
+       
+      
+ 
+  
+  
+ 
+  
+     
+   
+      
+   
+  
+                               
+    
+    
+           
+  
+    
+                                                                                                                                                                                                    
+ 
+             
+         
+                  
+              
+       
+   
+ 
+     
+    
+   
+    
+     
+                                                                                                    
+  # " ( + + / 1 1 2 2 4 4 2 1 3 5 4 2 / 4 5 2 2 / 7 5 9 7 3 4 7 4 2 0 3 4 5 0 2 2 3 3 8 : 2 0 / 3 / . 3 1 1 - 1 : 3 3 1 3 2 1 1 / 0 - 0 0 / / 4 7 . . / : 7 0 3 1 7 9 3 1 5 3 5 * / , ( ) 0 1 4 , + 0 / - / 0 2 4 ; 7 7 6 5 8 2 2 4 . 0 0 - 1 * . + + 3 - - . . - . . - - 0 4 5 0 4 2 2 2 2 . 2 , + 2 0 / 4 5 1 / . 3 3 3 / 2 / 2 1 1 + 2 1 , 0 / ( ) - * - - - ( * / / 3 - . / 0 + , / & ) * ' ) ( ) ) ( + ) , ' * ( % % ( ( ( ! ( * + ( ' ' + - + ) % $ + , - & & + ' + ) * * ) % ( * ) ( ' - ) & - + ' % ' ' ( " ! ' ' ' ( + ' ' ' ' ' % $ * % ) % $ % & $ $ " % # $ % " ( $ % $ $ # & ' $ $ ! # % " ' ! " % ! " !   # $ ! !   $ # # & & ! " #   " $ !    $ " 
+ ! "  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+                                 
+ 
+            
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+  
+    ! 
+ 
+ 
+ 
+ 
+       
+   
+ 
+  
+ 
+  
+     # "  
+   !   
+   
+   
+   
+  
+ 
+ 
+  
+    
+         
+  
+ 
+ 
+ 
+    
+ 
+   
+  
+ 
+   
+  
+  
+  
+ 
+    
+ 
+                
+  
+              
+ 
+  
+   
+      
+  
+ 
+ 
+    
+   
+        
+ 
+        
+  
+   
+   
+  
+  
+   
+ 
+   
+ 
+        
+ 
+                                                                                                                                                                                           
+                         
+                   
+        
+     
+ 
+ 
+        
+ 
+      
+ 
+ 
+      
+ 
+                                                                                                        
+ 
+ " # " % ' ' ) * - 3 4 5 9 : 4 + 2 6 3 3 4 4 7 : 2 . 5 4 : 2 5 4 2 0 1 3 3 4 2 2 0 / 3 / . 0 0 1 1 1 / - 0 1 / 0 1 4 2 3 2 9 0 - 2 , / 4 2 3 / 1 5 4 2 0 0 4 : 5 7 2 6 8 5 5 / 5 / 2 3 0 ( 0 0 1 4 5 - / 0 3 + . . 2 5 7 2 1 - 5 3 0 2 1 / 2 , / + ( 0 / - . . + - , / 0 - + - 4 3 - 2 0 3 - . 2 2 ( ' - . . 3 4 1 - 1 3 1 / . . - 1 3 / + / . + 0 2 , * 0 , * - ' , 2 . 4 . + . , , + + * ( ) + + * % ( ( + ) * ( ) ( ' ) ( ( ( ( ) ) . ' & ' ) ( ' ) ) ) & ) ) ' ' ' & ) ( ' ) ( ) $ ' * * ) $ ' + ) % ( ) + ) ' ' % # # ( ' - & # # % + ' * & # % & & # #   % $ # & $ ( ' " % % % % # 
+ & # " "     "   #   ( #    "  "   & #   #   ( %    ! # %   # " # # %  
+  !  
+ 
+       
+ 
+ 
+                                
+   
+            
+ 
+ ! 
+ 
+ ! 
+ 
+  " ! 
+ 
+ 
+ 
+    " 
+ # "   !    
+  
+   
+ 
+ 
+    
+    
+ 
+ 
+  
+ "      
+  "       
+  !  
+ 
+ 
+  
+ 
+  
+ 
+   
+  
+  
+  
+   
+  
+         
+    
+ 
+ 
+  
+            
+      
+    
+            
+   
+          
+   
+ 
+     
+       
+ 
+  
+  
+ 
+  
+        
+ 
+   
+     
+    
+  
+  
+ 
+ 
+  
+                                                                                                                                                                                                           
+  
+           
+  
+           
+   
+ 
+       
+              
+    
+ 
+ 
+              
+  
+      
+                                                                                                    " $ " ' & # # - / 1 3 6 4 7 2 . 3 . - 4 4 3 6 8 9 9 1 4 4 0 2 7 7 2 1 5 6 4 7 / / 4 5 5 1 / 0 3 0 . / 2 / . - / - 8 2 0 - 5 . 4 0 0 , 0 / / - 0 1 / . 2 5 7 5 3 8 3 3 4 2 5 . 1 , - 3 4 + 1 2 1 2 2 / 1 , - 1 3 6 8 4 2 3 1 7 9 5 3 2 3 0 5 1 - / + + - - - / . 0 0 / 1 - * , 1 0 , , 0 5 5 , 1 3 . . + , 1 2 4 - 0 . 2 0 , . / 0 1 / 0 0 1 2 - , 0 1 / 1 - * - + . 1 4 0 1 2 - ( + ) + * ' ' + ) # ( ' ( ( * ( + ( * ' # * ) + + , 0 ( % * ( ) * # # ) ) ( . & & ) & ( ' ' ( & ) ' + ( & ( ' ' & ' ( ) + * ( ) ) ' * + ) ( + ) ' $ & ' * ( ) ) ( % $ + % " " ( & $ % ( & ( ( & $ # $ " # ' ' % & % & % ! 
+ ! ) $ # $ ! # $   % # " "   # % ' " % # * ) % # ( ( " $   
+ !  
+ 
+ " 
+ 
+ 
+  
+ 
+                                   
+  " 
+         " $ " "   " ! ! ! $   
+ 
+ !        # #    
+ 
+    ! !   
+ 
+  
+  
+ 
+     
+ 
+   
+ 
+ ! 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+   
+   
+  
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+     
+ 
+  
+  
+    
+ 
+      
+ 
+ 
+    
+ 
+    
+ 
+ 
+     
+ 
+ 
+       
+  
+ 
+  
+  
+          
+      
+ 
+  
+   
+   
+   
+ ! 
+    
+  
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+            
+ 
+    
+      
+          
+                                                                                                                                                                                  
+                                
+               
+             
+       
+                                                                                                   
+ 
+ 
+ 
+ # % ' # ' ( & + + 6 3 2 / 4 2 6 2 2 1 2 , / 1 1 5 8 1 / 5 6 3 3 3 5 6 : 4 5 3 - / 4 0 4 / 3 5 / , . 1 / . . 1 2 3 2 3 / - 3 0 3 0 - / 2 / - * ) / . , - 5 2 0 1 5 1 4 / 1 , . 1 . . / 2 . / 0 - ) * / / 2 2 6 7 3 6 1 - 1 3 0 2 - 1 2 5 2 2 1 - - - , - - / 0 1 , 0 . 0 / , * , , - ) 2 6 1 2 1 2 1 1 . * / 4 / 3 3 4 1 1 5 2 2 3 3 3 0 / 3 0 - 3 1 2 . / - , - ) + . 0 2 5 . & * / ( ) * + ' % ( ) ) $ $ ) ) % ) - + ( ) * ( ) * + . ' & ' % # + % & ( , ( % & ' ) # ( * ( & ) ) $ $ ( ( * # ' $ * * & + ) $ * ) & ( ( & & ) & ' ' # & & ! # ' ) ' & ( ' $ ' ' ) $ & ) ' & ' # $ % ! " * ' ) ' % & $ ! $ ! $ * # $ # !   " " # $ " ) !   $ % $ % # ' ( %  $ ( & + % ! 
+ 
+  
+ ! 
+ 
+ 
+  
+                                  
+  
+  $ # # 
+    
+ 
+    $ $ !   ! ! ! '  ! # #   
+ !   
+ ! $ # !  
+ 
+ ! !   #  " ! 
+ 
+ ! 
+     
+    
+       ! 
+    
+ 
+ 
+ 
+ 
+ 
+       ! 
+ 
+ 
+ 
+  
+ 
+  !  
+ 
+   
+    
+ 
+   
+  
+   
+ 
+ 
+ 
+  
+   
+  
+  
+ 
+  
+        
+ 
+ 
+  
+     
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+    
+   
+                          
+ 
+ 
+ 
+ 
+  
+ 
+     
+ 
+ 
+       
+ 
+    
+    
+  
+ 
+   
+ 
+    
+          
+ 
+ 
+ 
+        
+    
+                                                                                                                                                                                                
+                      
+  
+ 
+          
+   
+ 
+             
+   
+     
+                                                                                                  
+  
+ % ! # ( & ( ) / / 5 5 1 1 / 4 2 5 1 - - * 4 6 1 7 - , 4 7 4 0 0 5 5 4 0 4 2 / - , 2 1 / 1 / / / 4 / 0 - 3 0 2 5 . . - . . / 0 0 0 / 1 / . 1 1 5 / 0 1 0 / 1 2 2 3 5 2 / / 4 7 4 2 - 4 2 - 2 4 / * / 2 3 / / / 0 / , / 2 / + / 1 0 / / / 1 2 6 - - 0 3 . 0 . 0 * / + , 3 0 / . 2 - / 0 + . . . 3 / / * , 1 - 1 - / . + / 4 - 0 0 2 1 . 1 / + * 2 0 2 + + ) 3 - - * 1 , . 3 0 , / 0 / 1 * ( & ( * & - & % ) + & ' ( & # ' * ' ) + ( ) + % % ' ) ) ' ( ( ) % # " $ % $ ) ' & % ( + ( ( ( % & ' $ & + ' $ + * ( ( ' ) ( & % $ % ) ) & $ & & & " # " * ( & + ' ) ' ( ( % ' $ $ ' ( # ' ( # & " $ # $ " " ! $   " ' " %   " !  " # " $ % ! # $ $ ' #   $ # # # % # " ) & ' #   !     
+  
+ 
+                             ! # #  
+ #   ! $ $ $ " 
+ 
+ " ! 
+  "   $ $     ! 
+ "   ! "    
+   
+ ! 
+ ! # ! " 
+ 
+ 
+    
+ 
+  
+   " 
+ 
+    
+ 
+  
+ 
+      
+  
+  
+ 
+ 
+ 
+   
+  
+      
+  
+ 
+   
+    
+  
+ 
+ 
+    
+  
+   
+ 
+      
+ 
+ 
+  
+ 
+ 
+  
+ 
+  
+      
+  
+              
+ 
+    
+  
+ 
+            
+  
+     
+     
+ 
+ 
+    
+ 
+ 
+   
+ 
+  
+  
+    
+        
+ 
+    
+ 
+   
+   
+ 
+  
+     
+ 
+ 
+   
+    
+  
+ 
+ 
+                 
+         
+  
+                       
+                                                                                                                                                                                                                                                                                                                        
+ ! " ! " & ' * + / 2 3 4 . / 1 8 2 2 + - , , / / . 0 0 2 1 2 9 3 2 0 , / - 1 2 . - + / + ( - / ) . - , , . + 0 - / / - 0 1 . 2 2 1 5 1 / 1 3 4 8 5 3 3 3 0 / 2 1 1 2 0 2 / 5 2 6 6 4 , + . 1 2 6 2 3 0 / 0 , 3 - . / / . 2 1 3 2 / 1 6 2 - / 2 0 - ) 0 - 0 0 - 0 . / - - 2 / 0 . / 0 - - 0 , 0 5 6 2 . + , 1 + , . 0 , ( . / - + ) + , 1 , , , 1 1 - 2 . * - 2 0 / - 1 . / - 0 / / , 1 1 + & % ' & % ( * % $ * ( * % # ) ( ) * - - ) ' ( + & % % $ $ ( ' % $ ) ' $ * * * ' # & ) & $ ( ' ) # $ % , ) ' ' % $ & , , - ' $ $ ( $ ) * ' & ' ' % & $ ! # ' & $ ( * & ' ( ' + ) ( ( ( ' ( # " & % $ $ #   " # "    $ $ % " # $ " ! " ! # ( % ' & $ " $ " $ & " $   # ( ( % # " ! 
+ 
+   
+     
+                           
+ ! ! $   %     "      
+ 
+  " "   "     $ !   ! % & ! " !      ! 
+ 
+ 
+ 
+ 
+  $      #    
+   " " ! 
+   "  
+ 
+ !  
+      
+ 
+    
+ 
+ 
+ 
+  
+ 
+ ! 
+ 
+ 
+ 
+  
+   
+  
+ 
+   
+ 
+ 
+    
+ 
+  "  
+     
+   
+    
+ 
+    
+         
+ 
+              
+    
+ 
+            
+ 
+             
+  
+ 
+ 
+    
+ 
+  
+    
+  
+ 
+ 
+ 
+       
+   
+    
+   
+ 
+ 
+    
+     
+ 
+         
+ 
+ 
+        
+       
+             
+                                      
+                                                                                                                    
+                                    
+                                                     
+                        
+                                                                  
+  
+ ! " # #  ) * , ) ( / 4 3 . 4 0 4 2 3 / ) + / 0 / . - / 1 3 3 3 3 3 4 / 0 - - 0 1 3 1 / - . . * - - . / 1 1 / 0 / 2 3 1 2 0 - 1 - 0 2 . + ) 0 3 5 7 2 2 6 . - 3 1 2 . 2 . 3 5 5 2 5 5 / * + - / 4 3 1 1 . 0 - / / , 2 4 . + 2 2 . . / 3 3 / . 5 4 2 + + / 3 3 1 0 2 + / + - , 3 , + 1 , . / - / 1 4 . 2 0 3 . , 0 3 1 / - * * - / * . * - / ( - - 0 * / . . , - * - + , , / - - - + , + - / + + + ' $ & ( ( & $ ) &   # ' ' + , + % ) , * + % $ ( , % * ) % % ( ' , * & ' # # ' ' & $ * ( ( ' & ' ( . ( ) ) & ( ( + , & & % # # $ # % & - ' ) $ $ % ( ( " " $ & ( # ' ' & ( ' " % ' $ # " $ # $ # % # ! & " ! ! ! & ( ! $ " " $   " " & # " % # " $ $ % % $ $ " # % !  
+   " 
+ 
+    
+      
+                     
+ !   "   " " " ' ( % ! # # "   " $ $ # " $   #  ! # " " % ! "   " !      
+ "   ! 
+  " ! ! #    
+  ! 
+      
+   
+ 
+ 
+ 
+    
+ 
+  
+ "   
+ 
+ 
+ " 
+  
+  
+ 
+ 
+     
+ 
+  
+  
+ 
+ 
+   
+  "      
+       
+ 
+ 
+ 
+  
+ 
+ 
+  
+    
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    
+      
+  
+ 
+ 
+    
+        
+    
+    
+       
+ 
+ 
+ 
+ ! 
+ 
+  
+  
+  
+       
+ 
+  
+  
+ 
+     
+ !     
+  
+ 
+   
+  
+    
+    !      
+ 
+ 
+  
+ 
+   
+      
+ 
+   
+     
+ 
+         
+      
+                              
+                          
+                                                                                                                                                                                                                                                                               
+ 
+ 
+  ! # " % ) . / , 3 4 0 1 - , 2 ) * ) * . + . 1 / + , / 3 - - 2 , 6 3 6 1 / 1 2 / 1 / / . , - ' + ) 0 . - 1 / 1 4 0 + 3 1 . / . 3 . , , * . 3 1 3 1 3 0 * 2 3 9 2 7 3 2 5 3 / 2 6 / 0 , + - / 5 5 0 1 0 2 + * + . 2 2 0 / 6 2 - 3 - 2 7 4 0 - / 4 / + , 5 4 7 1 , - 0 ) , . , ) . 0 . 2 1 + * - 5 3 3 - , 1 , 1 0 - ) 0 * + - - 0 1 0 0 / * / / - 1 . . + - - , 1 * , - , / / - - - * ) + ) + + ) ) ) * ) ( # % ' % & ( ' ' ( ( ( $ + ( ' " # % $ % & ) & ) $ # ( % % $ % ) + ' % $ * * ( & $ % & + ) + % ) ( & & ( ( * & % ( & # ( & ' ( ) $ & % ' % " & # ) ) ! % $ % $ % % % ' % ' ! # & % $ # $ % ( " " " # ! ) $  "   " # $   % % % $ & $ # ' % # " " $ & ' # #   
+ 
+    
+ 
+   
+     
+      
+  
+   
+ 
+ ! 
+ %  ! #  ! # $ $ # $  % $ $ ! $ $ $ & & % % " % # $ # $ "  % # ' % $ ! 
+   " "     
+ "  
+ 
+  ! " $ 
+ ! 
+ 
+ ! %         
+ 
+ 
+ 
+  
+   
+ 
+    
+ 
+   
+   
+ 
+ 
+ 
+ "   
+  
+    
+ 
+ 
+  
+    
+    
+ " 
+  
+ 
+  
+   
+    
+ 
+ 
+ 
+ 
+   
+     
+ 
+  
+ 
+     
+   
+    
+  
+ 
+     
+ 
+    
+    
+     
+ 
+      
+  
+ 
+ 
+  
+ 
+ 
+   
+     
+ 
+ 
+ 
+    ! 
+ 
+   
+ 
+ 
+  
+ 
+   
+     
+            
+ 
+ 
+  
+ 
+     
+ 
+ 
+    
+     
+ " 
+ 
+          
+     
+                 
+                                           
+         
+ 
+          
+                                                                                                                                      
+                                                                                                                                    
+ 
+ 
+ ! $ " % + - - - 2 / 0 1 1 0 / , * ) + . . 0 , 3 2 . 0 - / , , 0 / 3 / . * , 4 - . - + 3 - - * + + , 0 . / 2 4 - + + / 3 / 4 4 . - & , 0 2 4 6 2 / 2 / . / 1 0 . 2 4 4 5 2 / 1 0 0 1 4 ) * - 2 1 5 / 1 0 3 3 2 0 / . + . 5 1 / 4 3 2 5 3 1 0 . , / 2 , 0 1 / 0 , + . , + . + * / 2 . 0 - , , 1 3 2 3 / / / . / 0 1 - / / / / - 2 . 2 0 4 + . + - 0 - * . - . . / , + - * , / 0 , , ) & ' % + , + + ( % ' ) & + * ' ' % ) ( * ( % $ $ % & !   # % $ $ ' ' & & # ' % ' * % ' ' , & ( + ) # # # % % & # ' % & ( * % + & ' % # % * ( ' ( ) " % " # $ & ( & !   # $ % ! ! $ % & % $ $ ' $ % " # # #   " " $ % % & & ) & $ !  $ % # ! # & ' &   $ " # ! # " $ % % # $  
+ 
+ 
+   !  
+    
+   
+  
+ 
+ 
+ 
+ 
+ ! # " " ! ( % ' $ " ' $ & # # ) # " % #   # # ( $  # % $ & % $ $ $ # % " ' ! % " " # " ' #  # 
+  
+ !     !        ! " 
+    
+ 
+     & !    
+ 
+  
+ #  
+ 
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+ 
+   ! 
+  
+  !  
+ 
+ 
+ 
+ 
+ 
+   ! 
+ 
+ 
+ "      
+   
+ 
+         
+ 
+  
+ 
+  
+ !    
+ 
+ 
+  
+  
+     
+ 
+  
+ 
+ 
+  
+  
+ 
+   
+ 
+ 
+   
+ 
+ 
+ 
+    
+   
+ 
+      
+  
+ 
+ 
+  
+  
+ 
+   
+    
+ ! ! ! ! 
+ 
+ 
+   
+ 
+   
+    
+ 
+     
+ 
+    
+ 
+ 
+  
+  
+  
+    
+        
+  
+      
+ 
+  
+   
+     
+  
+        
+         
+           
+     
+                         
+           
+                                          
+      
+                                                                                                                
+                                                                                                                          
+ 
+ " ! $ ) . - . 0 3 - / 0 1 , + / + 2 - / . - . / * , . 2 - ) - 2 - - + , + + 1 / + ) , / . . * - + - 6 / / 0 3 - - * ) / / / . * - - ) 2 5 - / / , 0 / 1 / - 3 / / 1 4 2 / 1 / 1 4 . 2 + + ) + 1 . - 4 2 . 0 / . / / + / - 3 6 0 5 5 1 1 7 2 . + - / - 3 2 , / . 1 - , + , , ) - - - 1 * , 0 - 1 0 0 + + + , , / 5 / 0 1 , - + , - / 0 2 * . - ( - 2 , - * ) , - - ) ) . . , , + , / / * + - + + & & ) ( & * , ' $ + % ) $ % $ % " $ " ' # $ $ % & # # % & ( ) + % % & $ & ) ' ( & & ' ( " % $ % ) & % $ $ " " " # ' ( * ' " $ # & * " ! " $ ' ' % ) "    " $ $ ' $ # ' ) & " $ $ # # % % $ " "   # $ + " # " ' # & ' ! " #   
+ " # # %       % ! " "   ' $ ' # !  
+ 
+ 
+ 
+ 
+  
+ #   
+     
+ 
+ 
+ 
+ ! " & & ! # * # % ( & ! ' % & # # " ' & ) (  " $ $ " ! $ " # # # ! ! # & $ ! " #  $ ! ! $ % !  ! " !  
+ 
+   
+   
+      !   
+ 
+ 
+ 
+  
+ " 
+ ! 
+ 
+ 
+ 
+     !     
+ 
+ 
+ 
+ 
+  
+ 
+  
+   
+ 
+ 
+   
+  
+ 
+ 
+  
+     
+   
+ 
+         
+ " 
+ 
+ 
+ 
+  
+  
+ 
+       
+  
+ 
+ 
+ 
+  
+      
+      
+   
+   
+ 
+ 
+    
+  
+ 
+ 
+  
+       
+   
+   
+ 
+      
+ 
+ 
+ 
+ 
+  
+    
+   
+  
+  
+  
+       
+ 
+          
+ 
+     
+  
+      
+   
+       
+  
+  
+ 
+ 
+ 
+  
+            
+   
+   
+    
+          
+                                              
+                   
+                     
+               
+                                                                   
+           
+                                             
+                                                                                                      
+ $ % + * - - 2 2 . 0 / - , . 1 , / + - . - 1 , * - 1 / , - - 2 / / . - , ) - . . - + , , , ) . - + 0 0 . 0 4 . 0 . - 4 - 0 0 1 / / . - 1 3 , + 0 , 0 0 ' , 2 / / 6 2 4 - 3 0 / / 1 / , / ) , 0 6 1 . / 1 / - 0 . - / / - 1 1 - . 1 / . 2 1 . / 0 / . . 1 + * , * , - ( - - , 1 - / * ( , , , - 3 / * , 0 0 . - 1 1 0 , / / - 0 / 2 / 0 . , / * 2 / , ) + ) . ) * + - ( , - , ( * 0 - + * , ( ' ( ) + & ) $ , $ # # ( % $ % ' & & & $ * ' ' $ % % % ( ' $ " & ' $ $ # % # ' & & % # # # ! $ # & ( $ # ( % % $   # ( ' % $ % " ! $ ' $ 
+ "   # & & % " 
+ 
+ $ % & ' ' # # # "  # # " # % $ $ $ "   " % & 
+  
+ & ' " $ # " # " ! " " # #   $   # % " % $ % ! % # # 
+  
+ 
+ 
+   
+ 
+  
+      
+    
+ 
+  & % % & ' & ! $ " !   # ) "  # $ # # %   $ & $ # # # " " !       "  % ! $ 
+ $ * $ # " ! #    
+ "  
+  
+ 
+ ! 
+     
+ 
+  
+ # 
+ 
+ 
+  
+  
+ 
+ 
+ 
+  
+ 
+        
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+       
+   
+   
+ 
+    
+  
+    
+ 
+ 
+ 
+ 
+  
+     
+ 
+    
+ 
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+           
+   
+  
+   
+              
+ 
+  
+  
+ 
+   
+ 
+ 
+  
+ 
+   
+  
+ 
+ 
+  
+ 
+ 
+   
+ 
+  
+   
+   
+ 
+      
+    
+    
+ 
+    
+ 
+   
+       
+ 
+  
+       
+     
+      
+                      
+                                                               
+                  
+                          
+                                                 
+    
+             
+        
+                     
+    
+  
+            
+                                                                                                   
+ 
+    
+   $ ' ( ) ) + + , 0 0 - 4 / 0 / - , * ) . . - - - 1 + - + 1 0 , 0 - 1 + ) + . * , * . ' ) + / + , / . / . 1 - 2 0 - 0 3 0 / 2 3 - - - / 0 . 3 6 5 2 / + / 1 4 5 1 0 0 1 1 / 2 / 3 1 - / 2 / ( 1 / 1 / , / - - / 0 . 4 0 , 3 2 2 1 * - / - 1 , 1 / - ) / / / ) , - , ) - / / + - + ( ' * ( ) ( + , * + * - * - + 0 , , , 1 . 3 0 2 0 / 0 + 1 , 0 / + * - / , ' & , ) ( 0 . , ( ( / * ) ' + ( $ ( ' ' $ ! ( & $ % ' ( $ ( " # ' ( ' * % ) * $ % $ " * ( ( % " & %     ! % $ * % ! $ " # & & # & ' & # ( % $ # ! % $ ' " ' #    " ! ! " % " ' ( ( #    #   " % ( ) * ( 
+ $ % & $ " " ! ! ! ! % & & ! % ! # $ ' # $   !   
+ $ 
+ % # "   "   
+ " $ " % &   ! %  " !  
+ 
+    
+   
+  
+   
+ 
+ 
+ 
+ 
+ ! 
+ & ! $ # & % $ 
+  " $ % ' ( $ $ " " & $ ! % " # ' $ " ' % ' " #       " $ # &   ! & $ " " # # !  
+   #  
+ 
+ 
+ 
+ 
+   "   
+ 
+   
+      
+ 
+  
+      ! 
+  
+  
+ 
+  
+ 
+ 
+   
+      
+     
+ 
+     
+ 
+   
+      
+   
+  
+   
+          
+           
+ 
+  
+   
+ 
+        
+       
+  
+                        
+  
+ 
+ 
+    
+ 
+ 
+ 
+  
+ 
+   
+   
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+                        
+      
+  
+ 
+ 
+              
+                                        
+                                                         
+                   
+    
+                                               
+  
+            
+                             
+         
+        
+                
+ 
+                                                                                                      ! # % & % ( / * * . / 0 0 / * . / ( + ) . ( ( / / , 1 3 2 . , - 0 0 , + + - , + ( ) ' % , + + * * ( , / / / - * 1 1 0 2 - * ) + , + 0 . 2 / 1 2 3 / / , 0 3 2 2 0 / - , . / 1 3 2 . + + , * / 1 2 * , + - * * - / 4 2 / + 1 2 1 0 , ( . * + 0 0 - , - * . - ) * - - - 1 - , ( , + - - 0 + + ) - 2 . , . . + - - - / , . / 1 4 ) + - . 1 - 0 - . . , , . * , . ' + ' ( 0 . * ) ) * & ' ) ( ' ' ( ' $ $ % ' % % ! ' % ( $ ! " # $ ( & $ ( $ % " & % # % ( " # & $ ! 
+ # # # & & " $ % % ' $ # $ $ % % & & # % & & $ ! ! #    " " " # " #   $ ) ' $   " $ # # " ! ' ( % # " $ # # " # $ $ " " # $ $ " # ! " % # ! % $ ' $   " " ! '     
+  $ $ $ # " $ $ # ! 
+   
+    
+  
+       
+ 
+ 
+   
+ ! 
+ " % ! # ( & #  $ # $ % & # # % ! " & # ! 
+   # & " " # # $ & $ $ $ ! $ $ '   # ( $ & ! $ % " "   ! 
+  
+ 
+ 
+  
+ ! 
+ ! 
+ 
+  
+  
+ 
+  "  
+  
+ 
+ 
+      ! 
+ 
+   
+  
+    
+ 
+ 
+ 
+  
+  
+ 
+    
+ 
+      
+ 
+     
+                
+       
+ 
+             
+  
+     
+ 
+     
+        
+            
+           
+ 
+  
+      
+   
+   
+ 
+  
+ 
+ 
+         
+ 
+ 
+  
+ 
+ 
+      
+                
+ 
+   
+      
+  
+ 
+          
+                                           
+                                                                                                                        
+      
+ 
+       
+       
+          
+   
+    
+        
+    
+  
+ 
+  
+  
+  
+      
+ 
+        
+  
+  
+   
+ 
+ 
+                                                                                                  
+ ! 
+ # # % ( + + + . ( - . - * ( , * , + * + . * & , 0 - 1 1 ) + + , - + 1 1 + , . + , * ( ) ( ) ( ) + ) * , + ' . / 1 2 . , . , + - 0 4 3 , / 2 0 0 1 / 0 0 1 0 2 2 0 . 0 1 . 0 3 0 / / 0 / + 1 - 2 / - + 0 0 * ( . / 2 . 0 / - 2 0 0 1 1 , , - 1 + + / , ) , , ' ( + 2 0 . + ) + / 1 3 / 1 1 0 * * , + ( , + 2 0 / / , + - - 1 1 * . ' ( * + + ) * * ) - & ( - ) + , ( + ' ( ) % ( , ) ' $ & & " ' ' % $ $ $ & % " # " & $ # " ! % # # " ) % " !     ! % #   " # % # $ " #   # % # " %   % " & % $ $ % ' $ $ % ! !  "  ! # # & ! # % ' & "   # ! !     % $ $   ! $ ' $ " $ # % ! % % ! #   " # % ) & " " # $ $ " ! % # " %   $ #   " " "  "  " ! # # " " !  
+     
+   
+             
+  
+ 
+   ' & # & % # " ! $ # "     ! "   # ! " " " $ ! 
+  
+ # !   $ $ " "   $ ! # $ & % $ ! $ ( #   ! ! !  
+  
+   
+ 
+ 
+     
+       
+     
+  
+    
+  
+ 
+ "   
+    
+ 
+ 
+  
+ 
+ 
+                  
+       
+       
+ 
+ 
+ 
+       
+ 
+                                
+                                          
+    
+    
+       
+                  
+        
+       
+  
+                                                                                                                                                                         
+     
+              
+          
+ 
+   
+ 
+    
+      
+    
+ 
+     
+ 
+  
+ 
+ 
+ 
+    
+ 
+    
+  
+   
+   
+   
+   
+ 
+ 
+ 
+ 
+                                                                                                  
+ 
+ ! "  ! ( 0 - . . / ) ) , . * - - ( , * - - * * + + * 0 - , , - . + * . 1 . + / , * + * + & ( * ) ) + , ) , / / + / 0 . - 3 / / 0 6 2 / - 0 4 . + - - + - 0 / / . + 3 1 / 1 2 / / + - . - 0 . - - - , 1 1 / , / + / * - . * + + , / 2 2 , ) + , / . - * 0 * * & ) ( , * * * ' * + 0 / + * + 0 , ) ) - - + * 0 4 , + - ) - 0 0 / - * + ' * * + + ) ' % ) + * ) ( . , ( * * * # & ( , - % $ % # " % & ! $   # ( # & ' ' $ & ! % % & " ! % ( % % & " # ! ( * &   ! ' $ & # #   ! & " ! # ! " #  " $ # % # # ' 
+ "   $ $ ! # ) # $ ! " ( % #   
+ ! $ & # ! $ # ' #    " " # # $ ! # * $ " ' ! " $ $ # % " # $ & $ " # " 
+ " $ 
+ 
+ 
+ # # # ! ! " ! !  
+ ! !   " !   
+ 
+ 
+  
+             
+ 
+ 
+   $ " & " ! ' #  " ! 
+ ! 
+ 
+   # " # "   " # $ &     " " !    # ! "   ! $ # " % #  ! " #       " ! 
+  
+ 
+ !   
+ 
+ 
+ 
+   
+  
+ 
+ 
+  
+ 
+   
+   
+ 
+ 
+ 
+    
+ 
+ 
+  
+ 
+  
+    
+ 
+ 
+     
+   
+ 
+     
+    
+             
+  
+      
+   
+                     
+  
+       
+ 
+                    
+   
+   
+        
+ 
+  
+     
+      
+   
+                   
+    
+    
+              
+                                                                                                                                                                            
+                
+   
+ 
+ 
+     
+   
+   
+   
+  
+    
+ 
+   
+  
+     
+ 
+     
+  
+  
+  
+ 
+  
+        
+      
+ 
+ 
+ 
+                                                                                                   
+   " ! # ' , + 0 2 - - * - - ) . * + , . , + ' , . - 0 1 - - 0 3 . ) + - - , + / / ) ( * , ' ( * ) ' + + ) ) * , , - + 1 . . - 0 3 1 3 0 2 1 5 / 0 1 ( / - . . . . 1 1 0 1 / - . * . - - 1 3 ' , 3 / - 1 5 0 , 0 3 2 0 + + * / 0 - - + 0 . * + , / / 2 . , , , ( ( + , . ' + ) ' + , * ( ( + , , ) , , . 0 . / 0 2 . , 2 - 2 0 / * + . - , % ( + - 0 , " * & ) + - - ) ( + ) ( & ) ( ( ( & ) ' & % ( $ * & % # & " $ " $ $ " % # " ! % $ " ! ! " $ # ! ( & % $ " $   & !   " 
+  ! ! ! % % ! 
+ ! # 
+ # ! # $  " & % # % " !     $ ! "  !  
+   % # 
+ ! "   # " # " # # " # & ! " & " % &   #   & $  ! " $ $ !     % "   ! 
+  
+   ! #    !  
+  !         
+ 
+  
+ 
+        
+          ! # " ! % ) & # # # " " " " $ $ # $ # # $ # % % " % % $ 
+ 
+ 
+ 
+ ! $ %    "   "   
+ # "   " ! $ " 
+ 
+   
+ 
+ 
+ 
+   !  
+   
+    
+ "  
+     
+    
+   
+     
+ 
+ 
+ 
+       
+       
+    
+    
+  
+  
+      
+   
+ 
+          
+         
+ 
+      
+         
+         
+                     
+      
+     
+ 
+    
+  
+      
+     
+  
+ 
+   
+ 
+               
+   
+ 
+        
+     
+                                                                                                                                                                                  
+    
+            
+ 
+   
+    
+ 
+ 
+  
+ 
+ 
+        
+             
+ 
+  
+ 
+  
+       
+ 
+  
+    
+     
+  
+ 
+ 
+ 
+ 
+ 
+                                                                                                
+  
+ 
+ 
+ 
+ ! ! $ ) & , ) / , * . / , , . * , ( + + / , , / + 3 0 - 2 5 2 - * - + * + - + ' , , ( ' ) ) % ' . ) - ( ) - . 1 , / 0 0 0 . . 5 2 0 + - 1 0 1 3 * 4 4 / + , * 1 . , / 1 2 / * * 1 3 / . ( , 1 * % , 1 / + , 1 0 , 2 2 , - 1 . - / 2 1 ) ) + ) - . . ) % ( ' % ) / ) ( , + / ( . ) , ) * , ( % ) * ) * * - / 6 0 / . - , / 1 / . 4 0 / ) ( + . 1 ) & / ( - ' + * ) - + % " $ ( ( & ) * ' ( & % % ) & " $ # #    " # % %   ! 
+ ! ( & " " " " $ $ % ( $ # $ " ! !     ! "  
+ 
+  $ # &   % % '   " ! ! ' % # ( % # # ! " " $ $ % $ ! & # # # $ ! !   $ $ " #   ! # " ' % # " % $ % # $ ! #   & ! # 
+ ! $    
+ 
+ ! #  
+   # ! 
+ 
+      $   #    ! " " ! ! 
+ 
+    
+         
+  
+   
+   
+ ! % # # ! * $  " ' $ # " (  # # % !   ! " $ ! % & # ! 
+ 
+    ! % " " # % " # 
+ 
+ 
+    
+ # !   
+ 
+ 
+ 
+ 
+      #  
+   
+ 
+  
+   
+ 
+  
+ 
+ 
+    
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+     
+   
+ 
+  
+   
+ 
+       
+             
+            
+ 
+     
+ 
+     
+ 
+               
+ 
+ 
+ 
+  
+                           
+    
+ 
+  
+ 
+  
+             
+     
+  
+     
+         
+                
+ 
+                                        
+                                                                                                                                          
+ 
+        
+    
+    
+  
+ 
+ 
+  
+              
+        
+ 
+ 
+   
+  
+              
+    
+      
+ 
+ 
+ 
+ 
+ 
+ 
+                                                                  
+                                 
+    " & % ) , - * 1 4 , 0 . . / * + ) + ( + ) , , + . / 1 - 1 1 3 4 + - * , * - * # / . + ) * ) , , / , * + . - , . ) 1 4 2 1 - * . 4 0 - , 0 1 . - / 2 0 - 0 / . - ( - + 1 . 0 . * , , + / - ) . - + + 4 / / - / 0 - 1 0 3 0 - . . 5 - / / / - ) , ) 0 - + * * + - , + ( * + - . / , ( ' * , , ( - . * - - . 3 8 . 0 3 0 / 3 3 ) / 3 1 - . * * . , ) ( . / + ) ) ) + + + * * & ) ( - - ) & ( $ % & ( # " " # &   " " ! $ $ 
+ !     # %  
+  $ $ % $ "   ! " " $   
+    " 
+   
+   #   " $ % ( & ! " !   #     ( $    #  # " " " # " ! $ # " $ " $ "   ! 
+    " & ' # ! # $ ' #  % !    " &   " ! ! " ! 
+   
+ !    "   
+ 
+   " 
+ 
+ 
+  !   " ! "              
+         
+ 
+   " $ " #   # "   ! #   " % ( !   ! % # " # # # ! & ' 
+ ! ! # # % # $ #   $ !   ! 
+  
+   " 
+ 
+ 
+  
+   
+  
+ 
+     
+ ! ! 
+ 
+  
+ 
+ 
+  
+  
+       
+ 
+ 
+  
+ 
+     
+         
+ 
+     
+     
+ 
+           
+        
+            
+        
+      
+     
+       
+ 
+                 
+      
+  
+    
+  
+     
+    
+        
+      
+                       
+           
+ 
+                             
+                                                                            
+                                                                            
+        
+     
+ 
+    
+       
+   
+       
+                        
+               
+     
+ 
+                                                                                                
+ 
+ 
+ 
+ " # $ & - * - , 1 2 4 2 , 0 2 / + * + - - ) - / . , , ) / 1 4 0 / - , ) + , + - ( & ' + . * & ) ) * , + ) - / , , ) . 0 + 1 1 , , / . 1 . 2 / * , 2 3 * . / / , / - + * , 3 * - ' , , * 0 1 ( * , / / 1 , - - . / , , + - / ( ) ' - - , * * + - . ' * * . / / / / , / * , * , , - / ) ( * ) ( , + * $ + 2 1 0 : 1 / , + / 1 1 , / 0 1 / - , ) ) ( ) & ( * * & + / ( ( * , * ( * ) + & ) " # ' & % % " ! # " % % # #     # "     
+ $ # ! ! % % # "        !     " ! #   !   !     ! # # " $ ! # % ! #    " " 
+ 
+ %  " # ! ! $ # ! 
+ !   " ! # ' !     " !   # ! 
+  # # !   ! % $ %    % "   
+ # ' #      #    !  !     !    
+ 
+ ! " ! # $ !            
+           
+   
+ $ # $   !   % % $ # $ & " " $ #   $ ! $ # ' ' # ' $ 
+    # " " #   $ $ " # $ "  "   % " 
+ 
+   
+ 
+   
+ 
+   
+ 
+ 
+  
+ 
+ 
+ 
+  
+     
+ 
+   
+         
+  
+   
+ 
+   
+ 
+   
+   
+ 
+  
+  
+  
+     
+ 
+           
+   
+ 
+                
+           
+       
+     
+   
+            
+           
+ 
+  
+  
+   
+ 
+              
+         
+ 
+                  
+ 
+      
+           
+        
+                                                                                                                                                                    
+      
+        
+              
+            
+ 
+     
+                        
+ 
+ 
+      
+      
+                                                                                                  
+    ! " $ % ' ( . ) + / , 1 4 0 2 0 / . / . 0 2 / - 0 / , / + * + * 2 / . - , * + + - ) ( ( $ & * * ' ( ) * ) ( ) + , / 0 + ' - - / 3 - . 3 * , / 0 0 * . 3 3 ' - / - - , - ( . - . 1 1 0 + + , 1 1 0 , - . * * , ( + . . / + + 0 , , + , * + 1 / ( + , * * ' - - - * . + + , ) . , , + - * - - ) + * . - / ) & . 0 - / 2 + + , 0 , * 2 , . 0 - + & , * ) & ( + , ) . 0 0 ' * ( ( % * ) ' * ( ( * % ' % # & ' & # ' # # " ! $ $ % # #   ! ' $   $ ( $ # ! ! ! " # !  ! $ & !   " 
+  "   " 
+ 
+ " $ # ! 
+ #   $ ! ! " # " ! "     $ ! $ ! # " $ "   ! ! ! & # ! "   #   $   "    #       % % ' ! !   " " 
+ 
+ ! !    
+  !   ! # # ! " # #  
+   !   
+ 
+ # # 
+  
+ 
+        
+         
+  
+ 
+  
+ %  " ! % $ $ # % % ) ( % & # $ % !    
+ " ' % % $ "   
+ " 
+ "     !  $ 
+ " # ! #   " "   ! "     
+ 
+  
+ 
+  
+ 
+   
+  
+      
+ 
+ 
+        
+ 
+    
+   
+  
+   
+  
+   
+      
+ 
+ 
+    
+        
+ 
+                
+  
+      
+          
+     
+        
+  
+                         
+ 
+ 
+ 
+ 
+     
+  
+      
+              
+          
+  
+ 
+       
+ 
+                 
+         
+                                                                                                           
+                                                         
+               
+                             
+                              
+                                                                                                             
+ "   
+ # ' * ) , * , 2 / 0 3 2 / 1 / - . 1 . 0 + * , . * + & + . 2 - . - - / * 0 , ) ' % ) ( - $ # , + * ) , - * 0 0 , . . - 0 , - - 0 - - * - , / 1 5 5 5 0 , 0 - * / * - 3 0 3 1 1 0 / - . 0 1 / - - / / * + , . - / / 0 - , + 1 . . - ) . 0 + / 0 / * + . 0 * ) , - + . * ) , + * - + / . / - + , 2 1 ) 1 0 1 1 1 1 0 - , 2 0 / 4 - 3 / - , * * , ) , . - 0 + * * ) ( ( ) , % ) * ) & ) & - * ( & % " % # "   "   " # $ ! "  " ! # ( ( ! # % " $ " ! !  ! ! # # % % # "   " ! $ "   
+  " # " $ !   # " ! # % $ $   # % # ! # #  " # ! # ! #   "   & ( !   % !     
+ !        # % & # # #   
+ # "     ! ! 
+      $ # $ # # & #   # 
+   " 
+  %  
+ 
+   
+  
+   
+       
+   
+     
+    $ %  # % & # ! " ! $ & & & " % #   " ! ! ) ' $ ! ! # $ $ 
+ 
+ " #   !   
+ $ "   
+ ! # # % ! "     
+  
+     !  
+ 
+ 
+ 
+     
+ 
+  
+    
+    
+   
+ 
+ 
+  
+ 
+ 
+ 
+  
+  
+ 
+ 
+  
+   
+     
+  
+ 
+ 
+  
+ 
+ 
+    
+ 
+     
+  
+        
+           
+                    
+ 
+     
+        
+       
+ 
+     
+ 
+   
+ 
+ 
+ 
+    "        
+ 
+    
+      
+  
+     
+ 
+ 
+       
+    
+           
+      
+      
+  
+    
+    
+                                                                                                                      
+ 
+         
+  
+                                            
+                                                                    
+                                                                                                         
+   $   # ' , + * 0 3 0 - / 3 2 2 1 0 5 / 0 1 , * ) / , ( - , . 0 - 1 - / / / / 4 . 1 + , + , % $ ' + ) + + / 2 0 . 1 / 0 0 . . 3 2 , * - 3 2 1 / 3 7 2 1 1 1 / 0 + 0 / 0 0 6 1 0 6 1 . / 0 + 1 / ) , / - 3 2 0 2 , . . - 0 - 1 2 5 , + + - / 2 1 - * . - / . * * * ) * 0 1 2 * / + + 1 , , 2 2 . + . / 1 2 2 1 0 0 5 ; 1 1 1 0 , , / . . + , + * 0 1 0 / , * ) / * , ' ) ) ) / * ) / * ( - + & & * ( $ & $ % % !   ! ' " ! " # "  $ $ # ( $ $ # $ ' & $ !   $ ! " # $ " " $ % " & # ! #  #   % % " % $ ! !  " # # $ # " " $ ! " # # # " # # & % ' " ! $ ( # % # " # $  ! "   " ' $ "   & ' $ $ ) # ' &    $ % # " # 
+ % $ # % # # & " $ # $ # #  $ " " ! ! 
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+     
+ 
+ 
+ 
+       " ! % ( ) $ ' ' " % ' ' ( % % % " $   " # ) ! " # % % !    ! % $ $ " "   # & # 
+ # ! 
+  
+ !     
+ 
+    # #  
+  
+   # 
+ 
+    
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ "   
+ 
+    
+   
+ 
+ " 
+ 
+  
+     
+  
+ 
+  
+      
+ 
+ 
+ 
+       
+   
+       
+ 
+    
+       
+ 
+ 
+    
+   
+ 
+ 
+  
+   
+ 
+     
+ 
+ 
+                
+  
+       
+ ! 
+ 
+   
+       
+ " 
+        
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ !  
+ 
+ 
+  
+  
+     
+  
+    
+    
+  
+    
+  
+   
+       
+   
+  
+   
+   
+ 
+ 
+          
+   
+      
+ 
+    
+        
+     
+     
+            
+ 
+                     
+                            
+    
+  
+ 
+     
+    
+   
+ 
+ 
+           
+       
+    
+                                      
+                                                                                                                                                            
+   
+ ! ! ) / * , - . 0 3 2 / 2 2 2 4 3 2 1 1 0 / , - - * 2 0 1 1 + . 0 0 1 . 0 2 1 , + , - + $ ' * ( / + , / 1 4 1 0 2 - / . - 2 1 4 - - 0 / 1 / / 3 0 1 . , + 1 2 1 * 0 / 2 1 / 4 0 , 0 . + 2 1 . - + - 5 6 / + * * 0 / , . 0 3 / 0 * - / , 1 / / . - 2 1 + ( + ) + , - / . . * + / . . 2 / 0 0 1 0 - 1 5 / / / 0 5 5 / . 5 / / / 1 - - / 0 1 . 3 3 - 0 . , , / , * ' , , ' , * * ) * , . ) ' ' ) % * ) % * ' $   & #   $ # $ $ # " $ ) $ & & ' % $ % $ # ( ! " $ ! ' ( ) ) $ $ #   ! # ' $ ! " # " " " $  # % ( & ! % # " 
+ ! " ! " # # ) ) # # $ # $ $ " " ! " $ !  " # $ $ " $ " $ % # # $ % ' ( % " # " %   " $ 
+ ! ' ' ! # $ % % !  " % "   $ & $ "   !  
+ 
+  
+  
+ 
+   
+ 
+    
+   $  
+ !   # % ) % % ' % & * $ ) * $ ' $ $ $ $ % $ $ " $ ' ' ' ( % #   !  # ! #  % " ! ' $   # # 
+ 
+   ! # ! ! 
+    
+ !   
+    
+ 
+  
+ 
+    
+  
+ 
+   
+ 
+ 
+ 
+  
+  
+  
+ ! 
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+   
+ 
+  
+ 
+ 
+   
+ 
+  
+   
+ 
+    
+ 
+ 
+ 
+ 
+         !  
+ 
+      
+ ! 
+    
+ 
+    
+ 
+    
+ 
+     
+ 
+  
+ 
+ 
+  
+       
+         
+        
+ 
+   !  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+         
+ 
+  
+ 
+    
+ 
+ 
+      
+   
+  
+   
+ 
+    
+     
+   !  
+   
+ 
+   
+ 
+         
+   
+ 
+ 
+                     
+         
+  
+                       
+                      
+    
+ 
+  
+    
+            
+ 
+   
+ 
+   
+   
+      
+       
+        
+ 
+         
+ 
+    
+                                                                                                
+                                                                                                
+      
+  % & ' / ( + . 4 3 0 0 - - 0 3 7 3 / 0 / / , + . + + 1 / / , 0 . * 0 * 0 0 + . + , - $ ' & . * , , - 0 - 0 5 5 2 3 - , 2 2 . 3 0 , 3 - 2 . 1 2 / 2 / * . * * - 0 0 - - 0 / - 3 0 - + - / + + + ) + 1 0 0 * - * - - . + 0 - * - / . 0 1 1 2 0 + - 3 2 . . ' ) . , + , + - + , 4 / - 0 , - 4 5 / + - . / , / 2 4 1 / , 0 1 - 6 0 , , * * / / , , + , . * ) . + ) ' ) + , / , ' ( ' ) ) ) ( + ( * % & % ( ' % #    ' # ) $ ! & $ % $ ' % ( $ % & $ # ' & * # # $ # ' ( & & % % "   ! & ' $ ! #   # #  & ! $ % & # # ! $ & $ ! ! #  " $ # " ! " $ # " "   "        
+ & 
+ !   
+   " ! " # " $ # # & # # # #    " ! $ $ $ '  ! " # #    
+ !    ! # & % # %  
+ 
+ 
+ !  
+ 
+    
+ 
+    
+ !   
+ 
+ 
+   ! & ( ' & % & $ ' $ % % & ( $ 
+ " % $ ' # # # # & ' & ' ! " # " $ "     ' $ # # $  % ' "   
+ # "  ! ! 
+ 
+ "  
+  
+  
+  
+ 
+     
+ 
+ 
+ 
+ $ ! 
+     
+ 
+ 
+ 
+ 
+    
+     ! 
+  
+  
+   
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+       
+ 
+ 
+ 
+      
+  
+ 
+    
+  
+  
+ 
+ 
+ 
+  
+ 
+      
+  
+ 
+ 
+ 
+  
+ 
+ 
+  
+   
+ 
+ 
+    
+   
+   
+ 
+  
+ 
+ 
+ 
+   
+ 
+   
+ 
+        
+ 
+   
+ 
+    #    
+ 
+ 
+ 
+   
+     
+   
+ 
+       
+         
+          
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+    
+           
+ 
+                              
+ 
+ 
+    
+   
+                                 
+          " 
+ 
+ 
+              
+            
+ 
+      
+                  
+ 
+                                       
+                                  
+                                                                                                                                
+ 
+   !   ' * & ( ) . 2 0 3 4 3 2 2 4 . , 3 2 0 - 1 , - ) ) / - 1 + - / . 0 5 . - / ) ( , 0 * - ' * - * 1 * / 2 / , - 0 1 4 1 / 1 0 / 0 3 2 . 2 2 / / 0 / 1 / 0 - , - - 1 2 . 1 2 3 2 / 1 1 . , + ' ) . 1 1 2 1 3 0 , + * ) ( , 1 0 , 0 1 . . - ' / 1 . . 3 . - / . / - . . , , . . 1 - . - , ) + 1 2 0 + . 3 / / 4 0 5 1 0 0 2 4 5 4 1 , 0 2 ) * . / 0 + ' ) * 1 0 0 , ( ( * - / + * ( + ( ) * * ( ( % # ! & $ " $ % # ' # ! ! % ! # % & ! % & $ ) ' ' ' % % $ # " # $ # ' & # $ ' % % " # " # & # $ & $    #   % & " " ! # % $ % ! & # " ! " $    $ " ' # !  !   $ # $ !   
+ " # 
+ ! $ ! $ " # " ! " % $ ! " $ !  # & & # # # # # " " " 
+ ! ! # 
+  
+ 
+ ! ' " #  
+ 
+   
+     
+  
+ 
+ 
+   
+    
+ 
+ 
+   % ' % & $ ' ( % $ $ # * * #   " $ " & % " " % % % $ % " % % & % " " " $ $ ! !   # $ $   " # !     
+ !  
+ 
+ 
+ 
+       
+  
+ 
+ 
+ !   " # 
+ 
+ 
+   
+  
+ 
+ # 
+  !   
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+    
+      
+ 
+ 
+  
+ 
+ 
+     
+  
+ 
+    
+   
+  
+  
+ 
+      
+  
+  
+ 
+    
+ 
+ 
+  
+    
+   
+                      
+ 
+ 
+ 
+   
+ 
+ 
+  
+   !       
+          
+ 
+ 
+ 
+ 
+ 
+ 
+   
+   
+   
+   
+ " 
+ 
+  
+ 
+ 
+   
+    
+ 
+ 
+       
+ 
+   
+ 
+                                         
+                                
+                            
+  
+        
+  
+               
+    
+                                                                                         
+                                                                                                                                
+ " " ! " & & ' + . + 1 4 2 3 1 - / 2 . / 2 . * * , + * ( , ) , 1 3 5 ( ) . / , ) ' ( . + ( ) & - 0 . 5 / 0 0 3 . 0 , . + / , 3 4 + 2 2 0 2 1 2 - 2 0 4 , ) + - . / - 0 0 / . + 2 0 2 / / . - , 0 0 - / - . 1 3 0 , - + + ( - 0 / - - 2 0 - 0 * - , 1 , , 0 , 1 - 1 0 - ) * * . + , . . ( , , - 1 . 1 - , + , + , + 3 3 / 2 4 6 6 1 3 2 7 2 , 0 1 0 . & ' * 0 0 0 - + . * * , , , ) + ( " + % & ( % ( & % ' " " # " # & & " " " ' % ! & $ # " & ' # # $ $ % ! # $ " " # & ( " # # # ) " " # # $ " & ' % # $ # $    "  $ % % $ % " % $ "  # % $ # " % # ' $ & % # $ & % % # " ! ! # ! "   " " !   " " "   " # #    # * $ ! # $ " # ! ! " $ # !   
+ # $  
+ % 
+ % " 
+  "    
+ 
+ 
+      
+   
+ 
+ 
+ 
+  $ ( ' % % ) + & % ' ' ! " % $ & ' ( ( % #   ! # " # $ " # % " !   ! " % ( ! " 
+  " !     "   " "  "  ! !  
+  
+ 
+    
+  
+ 
+ 
+     !   
+ 
+ 
+  
+    $    
+ 
+   
+ 
+   $  
+   
+ 
+   
+ 
+   
+  
+  
+ 
+ 
+  
+        
+                   
+     
+    
+     
+  
+   
+    
+     
+ 
+ 
+ 
+   
+      
+     
+ 
+   
+  
+ 
+ 
+   
+ 
+  
+ 
+    
+ 
+   
+ 
+          
+  
+  
+  
+ 
+ 
+    
+     
+ 
+     
+ 
+   
+           
+                    
+      
+                                                              
+                          
+ 
+      
+   
+      
+               
+    
+                                            
+              
+                                               
+      
+                                                                                                  
+       $ # % ) * ( 0 . - 2 5 7 3 4 / / 3 0 0 / * * - - - , ) 0 + , 1 1 3 - , / + , - 0 ) 1 * ( + . . 1 / 6 - * 1 1 / . / 0 , - / / 1 0 . 2 0 0 0 0 / . , 0 - . - 0 / - 0 - 2 / 0 . / - / 1 / . , , 0 . . 1 / , / 1 - , 1 0 / , - 1 , 1 - , , + - , - / / , 2 , * - - , - , ' , * / . * 1 1 ) 2 0 - / 2 0 0 2 * , 0 - - 3 4 6 4 3 3 6 0 2 - 6 2 - 4 , 4 / / , . * + - * ( ) ( * ) + ( , + ) & & $ $ ' * ( ( ( $ % ! ! %   $     
+ # & % $ # ' ' & ' #    # ) ) # " # % % # " $ # ' & " $ %   $ & % $ & $ $  # ( "    
+   & % & ' " # $ ! " ! $ % # # # "  " $ $ " # % ' % ) $ % #   
+ # ! & # ! $ " # ( " # ! " $ ' % $ % # " % %   " # % % %   # 
+  # " ! " "   $ " ! 
+   
+ 
+  
+ 
+ 
+ 
+ 
+    
+ 
+ 
+   
+ 
+ " * & ' % # & % & % # ! " ! $ ' & " ' % # % ! ' $   $ $ & $ % "   !   % ! " !   !   
+  ! " %     ! " # ! # #   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ !  
+    
+ 
+  
+  
+   " 
+     
+ 
+ 
+   "   
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+  
+ 
+  
+    
+     
+ 
+  
+      
+          
+ 
+           
+      
+ 
+    
+     
+  
+            
+    
+      
+ 
+ 
+   
+ 
+   ! 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+        
+ 
+    
+   
+  
+     
+  
+  
+ 
+    
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+         
+                                                                  
+                   
+    
+                     
+   
+         
+               
+           
+     
+ 
+ 
+                             
+ 
+             
+       
+            
+ 
+ 
+   
+  
+ 
+   
+   
+              
+ 
+  
+       
+ 
+ 
+                                                                                               
+       " $ ' % ) / 0 4 2 5 7 6 5 4 1 3 0 0 1 , . 1 / 2 / ) , ) ' , - + / , , - , ( * ' - & & + / . 0 0 1 + - ) / 0 , 2 2 2 , * , ) . * / - ( - 2 + + ) / 0 - 0 1 / 3 0 / 3 - 1 / . 2 / 0 - , . , 0 0 / - * 0 1 0 / 0 1 3 . - ' . / * , * 3 / . ) - / . ( - - * ) - ' ( ( / . ' - / - , , - , 1 ( * . + / - . . - * 1 4 6 2 1 0 0 2 0 4 + / 1 3 2 - - ) + , . ' ) - + & ) * ) . & ( ( ) ' ' , ( & + ( ' ( % ( ( ' # $ $ ) " !  ! %   % $ % % (   $  $ $ % ' % " $ & % % $ $ # $ ' # " " $ $ ! ! " " & ! !   " "  " 
+ ! ' ' $ # " " ! & $ "     $ " # $ # ! & $ ! " # ! " # # $ % ! " # 
+  
+ !     & #   #   ! ! $ ( $   ! $ ! 
+ 
+ # ! ! " "    # 
+ " ' $   !   
+  
+     
+ 
+   
+        
+     % & * $ " & ' ( # % 
+ " ! % $ % & $ % $   $ # !  " ! ! & " % # "  " $ #  
+ # "   
+    "   !   " # !    ! 
+ 
+ 
+ 
+ 
+ 
+ 
+      
+  
+ 
+ 
+ 
+ ! 
+  
+    
+ 
+ 
+ 
+ 
+ 
+    
+      
+   
+     
+ 
+ 
+       
+ 
+   
+   
+ 
+      
+ 
+ 
+     
+            
+   
+         
+ 
+      
+               
+ 
+           
+ 
+  
+  
+   
+ 
+ 
+    
+     
+     
+ 
+        
+ 
+ 
+ 
+  
+ 
+ 
+ 
+      
+ 
+ 
+  
+  
+ 
+  
+ 
+   
+ 
+ 
+ 
+    
+ 
+ 
+ 
+  
+        
+                                                                                                                   
+                                                      
+        
+  
+   
+  
+ 
+  
+     
+ 
+       
+ 
+      
+     
+      
+ 
+ 
+  
+  
+ 
+   
+      
+    
+      
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+                                                                                                 
+  
+ 
+ 
+ " " $ ( + * . 5 9 3 0 3 4 4 ) 2 0 / - 1 0 1 0 0 + / . ( ( + ) + , * + ' & + ( , ' ' % - * . 0 5 / ( ' ( * + . 0 / - ( , ( , - * , , - . ' + , - , ( 1 2 + / 5 5 0 , / 0 / ) * ) , ( - / - 0 0 , . 2 / . , + ( - ) - , 0 * ( ) ) * , . - , * ) ' ) . ( , , ( & * * ) . * / , - + * ' ) & ' & + , . . * . , / 1 0 / 3 4 3 0 0 4 1 2 * . / . ( ) % % - ' ) , # & ) * + , % ' $ % ) ) ) & & ) % & $ & ) % $ " " % ' $ " !   & " % $ "  # ! % $ # $ % % " ! % & $ ' $ #   " ' $ $ $    ! " " $   
+ "      % " "  # # # % !   
+ !    
+ " ! ! !   # ! % # !     
+      ! 
+      
+ 
+   $ $   ! "   " ! " ' 
+ ! " $ ! 
+ 
+ # # 
+ 
+ !     
+  ! !  ! 
+ 
+ 
+ 
+ 
+ 
+     
+  
+       
+  
+   
+    $ % $ #  ' % $ " ! "  $ % # ! #   "  $ $    ! " ! !   # # #   
+ # %   
+      # " !   & #    
+ ! 
+  "  
+ 
+   
+ 
+   
+     
+ 
+          
+ 
+  
+   
+  
+  
+   
+  
+   
+   
+        
+  
+ 
+  
+ 
+            
+ 
+  
+                     
+                       
+      
+                 
+         
+ 
+  
+ 
+ 
+ 
+     
+  
+    
+ 
+ 
+  
+      
+ 
+     
+               
+ 
+                                                                                                                                                                                        
+        
+ 
+ 
+  
+    
+ 
+      
+  
+ 
+ 
+  
+   
+ 
+ 
+ 
+    
+ 
+  
+  
+ 
+  
+   
+ 
+ 
+  
+   
+ 
+  
+  
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+                                                                                                 
+ 
+ !  & % % ( ' * 0 0 1 3 8 / / 3 1 - 6 5 5 0 1 4 2 . / ) 3 , . - ) ) * ) , ( % ( , ( , . ' ) ( / 0 , 3 . ) , * - , 2 5 . . . 1 - 0 / , ) , 0 . / 3 . 2 / + 1 . . 1 / 2 - 1 1 / * + . , 1 , + 2 / , / / . / 2 - ( ) + / , + + + / ) * - ) ( + + ' ' * % ' - ( , + * * * ) . / / / + ) , ) , + ) ) ' * + ( . + 0 + 1 1 5 2 1 0 5 0 3 2 3 2 / 0 + ) + ' ) ' ( % ( ( % ) % ) ) * ( ' % + ( ) + ) + ' ) ( + - , ' ( & # $ ' ) & $ # % $ & )   ! ! ! & % & ( & ( ' % # % % $ ( % & ' % ! $ $ 
+ 
+  " " "  !  
+ 
+ 
+ # %   ! " # ! # %    
+     
+ !    
+    ' # & ! 
+ "  $ " 
+ 
+ 
+       
+ % 
+ 
+   $ !        "  # !     ! 
+ 
+ 
+ 
+ 
+   # ! 
+ # # 
+ ! 
+      
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+         
+ 
+ 
+ 
+   ! " " % ( # $ " # " 
+   " # ! # # & ! # # " ( " &    ! # # ! ! # #  
+ # " 
+ "   
+ #  
+ 
+ 
+ $ " !      
+ !   
+   
+ 
+  
+   ! ! 
+           
+ 
+  
+ 
+ 
+     ! 
+ 
+  
+ 
+ 
+  
+ 
+    
+ " 
+ 
+       
+  
+   
+             
+    
+          
+                          
+               
+     
+   
+   
+   
+ 
+  
+  
+ 
+ 
+    
+  
+ 
+ 
+ 
+   
+ ! 
+  
+     
+          
+ 
+      
+               
+  
+                                                                                                 
+                      
+                                         
+                  
+ 
+   
+   
+              
+       
+ 
+    
+ 
+     
+   
+    
+  
+ 
+  
+    
+ 
+  
+  
+   
+  
+    
+  
+      
+ 
+ 
+   
+ 
+ 
+                                                                                                 
+ 
+ 
+   & & # ) ( - 4 7 3 : 5 3 0 0 1 2 2 5 0 / 0 1 0 / / * - + - . + , , . + ) , * - + / , ' ' * * , ( . , ) - * ) , , 0 2 / 6 5 4 / - , . / 1 - - 0 - . * - / . + 1 * + - . 0 . 0 , - 2 . ( ( * - 0 , - - + 0 - & * ) , - / - 0 . ( + - * ) / * ) & + ( $ * + ' + , - * . * 0 / 0 - ( ' ' ( + , ) + + . 0 1 / 1 - 1 0 2 3 2 - - , 0 0 3 0 , . 1 - , - ' ( * ( ' , + ) ( $ % ( $ & * + ' , ) ' ) & ) ' * ) ) ) % , * # % " % &   % # " # ' ' # " ! ! " $ $ $ &   # ' ) $ ' $ # $ # $ ' "  " # #    
+ # " 
+     # % " $ " !   "   
+ 
+   " " !  
+  
+ ! !  
+ " 
+    #     " " $ "   ! 
+ 
+ % !    $ !  !   
+ !   ! 
+ 
+ " " 
+ $ ! " !   ! " # # # ! ! !    "  " 
+ 
+  
+       
+    
+ 
+  
+   $ ' ! & $ % $ $ " % " ! " $ ! $ $ ' " % ) $ % ' )   # ! ! $ !  " & !   ! ! !   
+  
+    
+ 
+  
+ " "   
+ !  
+ 
+ !  
+ 
+  
+ 
+ 
+  
+           
+      
+ 
+ 
+   
+    
+     
+ 
+  
+   
+    
+ 
+                    
+           
+                  
+           
+      
+             
+  
+     
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+ 
+  
+  
+ 
+     
+    
+ 
+                
+  
+  
+      
+      
+ 
+                                                                    
+                             
+                                              
+         
+      
+                                       
+              
+ 
+    
+   
+        
+        
+    
+ 
+ 
+ 
+     
+           
+ 
+ 
+ 
+                                                                                                 
+ 
+ 
+ 
+ $ # % % & * 2 2 8 4 4 2 0 1 . - , 2 3 1 / 2 . + + , / . , 2 / ) * , * & ' ( , * + ) & & ( - ) ) ) + + ' ( ( * , / - , . / 2 0 . ) . + 2 / * - , - . / / 1 * ) / / / / + / - / / / 0 ) & + 0 / * ' * + - . ) - . . * + + * % * * . * ) * + * ( , . ' - ( , ) - + + . 2 1 ) + . * . - ' ( , , . , / / - , . * - 1 , 2 2 1 / , / . * , , 3 / ( ( * * * ( - ) ) * ( ' ( ) ) ( & ) & % ) ) ) * ' & & ( ) ( $ , $ ( $ $ $ %    ! "  % ' & % "     " % ( %    % ' & ( ( " $ # $ # "  
+   $ "   
+ ! ! #   % !  # # % "   
+ 
+ 
+   
+  % $ " 
+ 
+ 
+ 
+  "  !  !   
+ 
+ ! # " " ) )  
+ ! 
+ 
+ 
+ $ " #     
+     
+ 
+     " !     
+   " " 
+ "  ! 
+ 
+ 
+ 
+   !   
+ 
+   
+     
+  
+ 
+     
+  
+ % * $ !   ! ! " % ( ' $ $ % ! # ! & " ! % # % " # " 
+ % # " 
+ 
+ ! " ! # # $ %   
+ #    
+ 
+  
+ 
+  "   
+ 
+  
+ 
+ 
+ !     
+    
+ 
+ 
+       
+  
+  
+  
+   
+  
+  
+     
+  
+ 
+ 
+ 
+ 
+   
+   
+   
+    
+  
+  
+             
+     
+   
+ 
+            
+       
+    
+  
+           
+                     
+ 
+   
+  
+ 
+ " 
+    
+ 
+ 
+ 
+     
+ 
+  
+                
+      
+  
+         
+                                             
+                          
+   
+                        
+                   
+        
+ 
+              
+     
+            
+      
+         
+                    
+        
+   
+   
+                 
+   
+   
+        
+   
+  
+                    
+ 
+   
+  
+                                                                                                 
+ 
+ " # ! " ' ' , ) . 1 2 0 3 4 / 0 1 0 / 1 / 0 - / , , . . 1 , , ) * * ) - , ( * ) , . , ( & % ) ) - ) * ( + * * + ( 0 - , * 0 0 0 3 / / ) - 0 2 . / * + , , , / ) + + / / / / 5 - - 0 1 + - ( ) 2 - + - , , - * * - + - + - + ' & + ) 0 * ) ) * * ) - - * - - ( - * + - 1 0 - - / / / - 2 , + , / * * . * * + * * 3 6 1 ) 3 3 2 0 1 . . 1 / - + ) * - ) ( , / ) ( , ( & ( + ( $ ' + ' % ' ' ( * % ( % % & ' ) ( ( $ # % ( & $ " ( $ # ' $ " # # # % ( # " # " # ' # & " % " # $ # & # $ ! # # ! ! $ " ! # % #   " # "  % !   !  
+ ! % " ! "  
+ ! # " ! # #   # 
+ ! % ! $ ' $ $   ! $ 
+ 
+ ! ! 
+   
+ "       ! $ # ! "  
+ " # " 
+ 
+  $ % % " 
+     
+  " # %      
+    
+  
+      
+   
+   
+ $ ( % $ " ! $ %   $ ) " " " $ $ " ! " $ " $ % $ $ % # % " # !  ! " $ " ! # "     " # ! 
+      " ! # !  
+ ! 
+ 
+ 
+ ! 
+ 
+ ! ! 
+ 
+ 
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+    
+   
+ 
+  
+ 
+ 
+ 
+    
+     
+    
+        
+        
+     
+ 
+ 
+ 
+   
+    
+ 
+        
+                  
+  
+       
+ 
+   
+     
+    
+ 
+ 
+   
+ 
+  
+   
+  
+ 
+   
+ 
+        
+ 
+ 
+ 
+       
+       
+     
+     
+      
+  
+  
+                                                                    
+                            
+    
+  
+ 
+      
+              
+ 
+     
+  
+        
+        
+  
+ 
+     
+ 
+      
+ 
+      
+                                                        
+                     
+      
+                                                                                                             
+  
+ 
+ # !    # ' * + - 0 . 3 0 2 / / 1 / . / . . * / + , , + . , ) * ' ( , / - * + + - + ( + + ' * ) ( ( * , / . + * , 2 - . . ) . - 0 0 + * 0 0 , * , ( - / 1 0 - ( + , 1 * ( + + 0 / / . 1 / / . 2 2 . + , ) . - / 0 + ' ( , . - ( . * / / * ( , - - . * + + ) ' - - . 2 1 3 0 , * , ) ' + ) ' - / ) * / * * - * * * 4 4 0 0 0 1 0 0 1 3 3 / 0 + 1 - ) ( ' ) - * * ( % ' * ( + & ) - ( ( % & % % & + ' & & ( % ' ' & & ' ) ' * & # $ ' + ( ' & & # ( # ( % # # 
+ ! # #  $   # ' # % # & "   " "  % !   ! " #   # % ! ! " 
+ " 
+ !   $ "     # $ !   # " !  $ !  " $   # " $ ! ! # # '    $ # ! % " "   ! !   # " ) #  " ! $ # !   # $ % # ! "         # "    
+ 
+ 
+             
+ 
+    " % " & ' $ % $ % & " # " # & % !   ' & & ' $ # #   " $ ' ) # $ % & " " # # # $ " !   
+  !   ! 
+ $ " " $ 
+ ! # 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+     
+   
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+  !  
+   
+  
+   
+ 
+ 
+       
+       
+   
+        
+ 
+    
+            
+  
+ 
+      
+         
+   
+  
+          
+ 
+  
+      
+    
+ 
+ 
+    
+ ! # 
+    "     
+ 
+ 
+ 
+    
+ 
+   
+   
+ ! 
+   
+   
+ 
+   
+       
+ 
+ 
+     
+     
+    
+ 
+  
+     
+  
+         
+ 
+  
+               
+                                                  
+              
+   
+ 
+ 
+        
+ 
+    
+      
+      
+ 
+ 
+   
+    
+   
+   
+      
+         
+      
+  
+                                  
+                                                                                                                                                                      
+ 
+  
+ ' % * * + , . + ) . - . - , / - 0 - + * ( * ) + ) + * ' + , / * ) + 2 1 0 , - , - . ) ' + * ) ) * + , . + + + 1 5 - 2 2 - - 0 / - / , - . + * ) / 2 6 4 / / - - , / * * 0 , / / . / 1 1 4 0 / * / , - , - 3 + ) ) , . 0 ' . . * ( % ) + + * * , ) ( ) , , * , . 1 2 . / & ' ( 1 + * & ) / * - , * * . - ( ( , ) 0 4 1 . / 4 2 . 5 1 . 2 1 . * , ) + * ( ' % # $ + + ) ) ) + ) ' ' ( % ' & , . ) & & * $ % % $ ( ) ) * ' % " $ % # $ # % ! # $ % ( # ! "   % & $ " 
+ ! # $ ) ' ! # $ ! # !  # # " ! ! "   ! %            " # "    " ! " ! $ ! ! ! " "   " ! # !   
+ ! ! " ' % $ " % " % % ! " !  
+   
+   % % ! # # ! $ &   # $ $ % $ $ !   
+ ! !  " !   
+     
+       
+  
+    
+ 
+    % % " % & + # ' % & % " ! # & # ! ( ' ' # % & ! " # $ " ( $ ! % ' ' $ ' ( $ ' ' $ !   
+ " % ! " " "   " 
+      
+ 
+ 
+ 
+ 
+   
+ 
+   
+   
+ 
+  
+ ! 
+ 
+   
+  
+   
+    
+ 
+  
+  
+    
+  
+ 
+ 
+  
+  
+ 
+     
+ 
+ 
+ 
+   
+            
+ 
+       
+ 
+  
+ 
+        
+  
+   
+     
+ 
+ 
+ 
+ 
+          
+ 
+       
+        
+   
+ 
+ 
+ 
+ 
+ 
+  #   
+ #    
+ 
+  
+ 
+ 
+ 
+ 
+   
+ 
+  
+  
+   
+ 
+       
+       
+   
+ 
+   
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+    
+             
+                            
+        
+             
+ 
+    
+            
+            
+      
+   
+ 
+    
+   
+ 
+       
+     
+  
+       
+   
+  
+      
+   
+            
+ 
+ 
+ 
+                                                                                                                                
+                                                                      
+ 
+ 
+ 
+ ! " % & % + - 3 0 0 - , , 1 1 1 2 / 1 1 - - . % , - , - . * . ) - / . + . 1 / * / - , + ' ' ( ( ( ' ) ) 0 * ( * . 3 4 0 2 0 1 0 - , * , 2 . , / - ) * 3 1 . 3 2 3 , + . . - 0 0 1 0 0 1 / 2 2 , 1 - , - . . , 1 ) , - , + * * - * , ) ( ' & - * ( ( . + ' ' - . , * 0 4 2 2 + ) & ) ) ) , , - . + , , , / / . * + * . 1 - 0 + , 2 0 2 / 3 / , 0 0 - , + , ( ) & % % , . * ) & ) ) ) * ) & ) ' + ) * & ' * ( ' * & % ( ) ) $ ( $ % ( $ # ' % #   $ $ % % ! $ # $ % % & #   # & % % 
+ ! " " % $ % (       " " "     !   " " 
+ 
+ " ' "  " ! ' ' ! $   #  ! " # " % " #     " % $ % ! "   # " % & '    
+    " $ % $ ! $ & % $   " ! ! !  $  $ # "  " ! # # # 
+ 
+ 
+ 
+ 
+  
+   
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ $ ( & % * '   % % , ' " " $ & # ! # $ ' ) $ $ $ # " ! & $ % # ( $ ' $ " ' % % $ % " " & ' " # # % ! "  ! !     ! 
+    
+ 
+ 
+    " !  " 
+  
+ 
+ !  
+ 
+ 
+ 
+ 
+ 
+ 
+    
+      
+  
+   
+  
+  
+   
+       
+ 
+              
+ 
+   
+ 
+ 
+ 
+     
+   
+       
+    
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+   
+ 
+     
+         
+      
+   
+ 
+ 
+ 
+ 
+   
+ !   
+  
+ 
+   
+ 
+    
+ 
+ 
+   
+  
+ 
+ 
+ 
+  
+  
+  
+     
+    
+  
+   
+ 
+ ! 
+  
+   
+ 
+    
+      
+ 
+ 
+    
+       
+ 
+                                  
+   
+       
+     
+     
+              
+                    
+          
+ 
+ 
+   
+     
+ 
+      
+ 
+ 
+ 
+           
+ 
+         
+      
+ 
+ ! 
+ 
+   
+                                                                                                        
+                                                                                        
+ 
+  ! $ " " ' ' * 1 + 2 1 / 2 0 0 0 / 3 . / + / 0 , + - ( - , / . / - * , ) * ( 3 1 - 2 - + ( ' ( + , , + , + ' & + - , / 2 0 + / 0 - / + * - 1 . - + , + + 0 . - - - 1 0 - - - 0 3 . . 0 1 , 1 . - * 0 , * , - / + / - + * , 0 / + , 2 / 0 ) / + ( . ) ) * ( ) - - - 0 / . , 0 + + * ( . ' + + - / - * . , * - - ) ) ) - 1 . 1 0 . 1 / - 0 0 / - * 1 , , - + ) ' ) ( ( - / . ) * ( & * * + , ( , & # $ , ) * $ & ' ) & $ & ( & & $ $ % ) & ( ' # ! & ! $ $ " ( & &   ' # ) % $ ' # "  ! $ $    " " & ! ! # % " ! !  " ! " ! !  ! $    !  " & ! ! " ! 
+   $ # !  # # !   ! $ # ! " ! $     " $ $ $ #   
+ 
+ " " & ! 
+   ( $ # ! # #   !   % ! ! " " # ! " " $ $    
+    
+       
+ 
+   
+   ! & $ % $ % ) % % $ ) %   " & ( ' # % ( ' # % $ " $ ' % % & % ( $ % $ "  $ " " !   !   $ " 
+ # % % 
+ 
+   " ! 
+  $   "      
+  
+ 
+ 
+ 
+   
+ %   
+ 
+        "  
+ 
+    
+    
+ 
+ 
+ 
+ 
+ 
+ 
+     
+     
+ 
+    
+        
+   
+ 
+ ! 
+ 
+ 
+ 
+      
+ 
+  
+ 
+     
+ 
+ 
+  
+  
+  
+  
+   
+  
+      
+  
+     
+      
+   
+      
+  
+  
+ 
+ ! 
+   
+ ! "  
+ 
+ 
+ 
+ 
+ !   
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+   
+     
+ 
+ 
+  
+     
+ 
+   
+ 
+ 
+  
+     
+ 
+  
+   
+ 
+          
+   
+               
+   
+ 
+                 
+                                    
+    
+    
+ 
+  
+       
+   
+    
+   
+ 
+     
+   
+      
+ 
+    
+             
+          
+ 
+     
+ 
+ #   
+   
+                                                                                                                                                                                               
+  " " #  ! $ & , / 2 3 3 . 2 0 0 / 4 5 3 2 - 0 - . 0 / , - - * + 1 2 2 - , ) ' 3 6 . . + + ( ' ) , ' * . . - + ) - ' + 1 2 1 ) - 2 4 1 ) - . 2 + / - 2 + , 0 + * . - / 0 0 / / , 3 1 . - - . - . / + 0 . + + ) + / , + ( 0 + / 1 1 0 / . - + + * ' * , + & & * - , ) , 0 . . . . , + , * $ * * ( ( + ) + / ) + + ( ' - 1 , . , 4 / 1 ( / - . / / 1 1 - - , / / * % ( ' + ) ) , ( & * ) ) , - " ' $ $ $ ( ( ) ( , ) * ' % ( $ * $ # * ) * ) $ % " ! & " $ # " $ & # $ % & # " & ) % #   ! # (  
+ 
+ 
+ ! ! 
+  " " ! 
+ ! # " !     # !   "  !     & % $ "  " ! ! # % $ !   !   $ %  " & $ $ ! # $ " # " !     ! " 
+ " #   # % $ $ &   ! # ! ' " !  % ' ! ! % % "   
+ 
+ 
+   
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+   ! $ ' ) & + * & ' # % % & $ ' ' ( # $ ) * ' $ # $ " $ # $ $ # " %   ' #    ! " # ! % # $   !  ! ! " "     !   
+ 
+ 
+  ! ! 
+ 
+ 
+    
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ " " ! " ! 
+ 
+      
+  
+ 
+ 
+ 
+    
+  
+ 
+ 
+ 
+     
+ 
+  
+ 
+ 
+ 
+  
+ 
+  
+   
+   
+ ! 
+ 
+  
+  
+ 
+  
+   
+ 
+ 
+      
+ 
+  
+   
+   
+ 
+ 
+ 
+ 
+         
+   
+ 
+     
+    
+    
+       
+   
+   
+     
+ 
+ 
+   
+   
+  
+ ! "       
+  
+ 
+ 
+   
+  
+ 
+   
+ 
+ 
+   
+    
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+  
+  
+  
+     
+               
+     
+      
+     
+                                  
+                       
+  
+   ! 
+ 
+       
+        
+  
+    
+  
+       
+ 
+       
+ 
+  
+      
+  
+ 
+   
+ 
+  
+ 
+  
+ 
+  
+ 
+   
+ 
+ 
+                                                                                                                                                                                                
+ 
+   " % & % & ( * 5 4 0 , ) 0 0 3 - 3 : 2 2 / - 2 0 - 0 * , ) + ) / 2 , 0 - . ) . / + . 0 ) + , ) ( * + ) + * ' - + $ ( , 3 / + , / 5 - 2 0 + - 0 1 + 1 . / 0 * - , 1 / 3 0 0 + - 0 1 2 1 4 + - / 1 3 0 2 * , + * , / ) * - / 1 1 / 3 / 0 - . ) + , + . , , . , , 0 - ) / 2 . 1 ) - - 0 / ) ) ) ) + / . , - ) ( , * * 0 . - 0 / 4 3 7 2 2 , 1 1 . , 5 - - / . 2 0 1 . , , ( ) ) * ) ' ' ) - - % ' - ' , . ) * * & ( ) % & * , * & ' ( + * ( ' ) $ ! # # & $ % * % & % # ' % # $ ' % $ $ $ ' / % $ % # ' !  "  
+ "   " $ " !  % " % # $   ! # % ! ! # # " # ( $ " " * # $ % " % $ " !   " " " " % " " % " ! ! $  ! $   
+ ! ! # $  # #    $   ! ! 
+ " # $ & # # "     
+ 
+   
+  
+  
+ 
+ 
+  
+  
+ 
+ 
+ 
+ " ! ' ' % " ' ' #  $ ! ( & ( + ) + ' ) ( & $  " ! ' $ # ' $ " " " $ & ! $ "   " % " % $ $ 
+      !   " 
+  ! $ ! 
+ 
+  
+ 
+   "   !        " 
+      
+  
+    " 
+   
+ 
+  !  
+   
+ 
+  
+    
+ 
+ 
+ 
+     
+ 
+ 
+ 
+   
+   
+      
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+     
+ 
+  
+           
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+      
+       
+ 
+ 
+  
+ 
+    
+   #   
+ 
+     ! 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ !    
+      
+ 
+  
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+  
+ 
+ " # 
+ 
+   
+  
+ 
+      
+            
+ 
+       
+     
+      
+                                                           
+ 
+  
+ 
+ 
+        
+ 
+       
+  
+ 
+ 
+ 
+ 
+   
+ 
+              
+  
+      
+   
+   
+     
+ 
+ 
+ 
+ 
+ 
+ 
+  
+    
+                                                                                                                                                                                                
+ 
+ ! 
+ " & ( + ) , * / 3 - 1 6 5 2 7 2 1 2 1 . . ) + + + * * . * * + + 0 0 3 - / ( * , . , ( + ' , , / 3 ' + ) 2 * ( + . 4 - . + / 2 0 1 3 2 , 0 0 . / 1 2 / 1 ) . / 2 2 3 1 / . , - 3 4 / - 0 2 , , / 0 * ) 1 , + * + + ' + 2 - / 4 / - 1 4 / + 0 - , * + * / + - 0 . . 2 0 - - . - . * * * , - 0 1 - . * + 2 / * / . . 0 / 0 . 4 7 1 . . . 1 0 * 2 - , / + . 2 0 + / + - * , * ) ' * + ) ) * ) / + - * ' ) % ' ) ' % % % * * ' ( $ & ( ' % ' # $ $ " $   " " # ' ' % $ $ & " $ ( $ $ ' $ & # # !   ! ! ! " " 
+ # # " # $ " " $      # % #  " "  ! ! " # & # " ! " ! #  " !   ! $ ( # % # % % ! $ # # "  ! ! $    ! # # $ ! " # 
+   # # # " " $ !   % ) $     #  
+ 
+ 
+ 
+  
+ 
+        
+  
+ 
+   # % %  # ' ' % ' % # ' & ( ( % " ' ' $ " !   ! " # ) ' * # % ' % % $ ! " !   # % & "   ! ! " 
+ 
+  ! ! " " !      ! 
+   " ! 
+ 
+ 
+  
+ ! 
+  
+ 
+ 
+ 
+ 
+    
+    
+   
+    
+   
+ 
+    
+   
+             !  
+ 
+     
+ 
+   
+ 
+  
+  
+ 
+  
+      
+   
+   
+    
+    
+ 
+    
+    
+  
+ 
+ 
+    
+   
+ 
+  
+ 
+      
+ 
+ 
+ ! 
+ 
+ 
+ 
+     
+ 
+   
+ 
+      
+ 
+ 
+    
+ " #   
+  
+  
+ 
+    
+ 
+    
+ " ! 
+ ! 
+  
+ 
+  
+ 
+ 
+  
+      
+ 
+ 
+            
+          
+      
+       
+                                                                    
+                
+  
+    
+      
+ 
+   
+           
+        
+ 
+    
+ 
+      
+   
+ 
+ 
+ 
+    
+                                                                                 
+        
+ 
+                                                                                                        & !   " & ) - 2 + / / 1 2 3 1 6 1 + 0 - 4 0 1 , 1 , - * + - , * ) * 3 + 2 0 - * - 2 - + , / , + + . 2 + - / 0 - * , , . ( , ( ) , ( / 1 4 0 2 . - / 6 . . 2 , . - , * . / , - + - 0 3 0 + + * + * / 0 / + , , ( * - + ' * - ( , 1 0 + 2 / . - - , - ( - & - . + 1 1 0 . 0 , + / + 0 * + , / ' - - / + / - - 2 - 0 * , * . / - 3 2 3 / . - . - + / + + ' ) + 0 / 0 1 0 . * - - ) , ) % * + * + , + * , ) & ( & ' ' " & " ( ( # & 
+ ! ( $ & ( ! # $ " # ! ! $ " # ' $ # % $ & " % % ! " ! &      % $   "  
+ ! !     !   # !   ! ! ( ! ! ! $ " " " " 
+   $ $ $ $ " ! # %   ! "    % # $ % $ " ! ! ! $ " $ " " " ! 
+   ! " " " "   ! ! ! $ ! # 
+ $ "  "  $ ! ! ! 
+ ! 
+      
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ !   # ' # " & ' % & % # ( ( $ & $ # % % ! % ' #    ! # " " # # " & " % % % # $  & %   
+  
+ !  
+  
+ !   #  
+  
+ 
+ 
+  # 
+ 
+ 
+  
+  
+    
+ 
+ 
+    
+  #  
+     
+  
+  
+      
+ 
+ !  
+ 
+    
+ 
+  
+ 
+ 
+ 
+  
+ 
+   
+      
+    
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+     
+  
+ 
+     
+ 
+            
+   
+ 
+             
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+  
+     
+  
+      
+ 
+  
+    !      
+  
+    $ 
+ " 
+            
+ 
+   
+                                                                                           
+                       
+      
+      
+                  
+     
+    
+    
+   
+   
+ 
+ 
+    
+ 
+  
+ 
+ 
+         
+                  
+ 
+    
+         
+        
+ 
+      
+                     
+ 
+   
+     
+    
+ 
+  
+   
+                                                                                                  
+ ! " # # & ( * . / , 0 1 6 2 5 6 1 - 0 ) 2 / - / - / - * & * , / , . / + 1 - % * - 0 , , + + ( ' + , . - , , 0 2 / - + / + 1 , , + ) - 0 0 0 3 2 1 , / / 1 / / 1 - / 0 / . 0 - , - 0 , ) * , + - - - , + - . 0 , % ) ' ' , ) , + * 0 - , ( / 1 - , ) + , ( ) + * , . - + . * , , , * / ) & , % ( * + + - + . 1 2 - ( ' + 1 1 . 2 6 7 6 / ) . ) ' . - + * - - * , / 3 2 0 / . . , / % ! ' $ & $ ) + ' & ) ( ( ' # ! # ( ' % " ( %    ! $ & & #    " & # % $ # # % % "    ! # ! $ " $ " % % 
+   "   
+  "  
+ 
+   "   
+ 
+ !       & # !   " " ! ! # !  ! " 
+ " 
+   !     # ! ! " $   " "        ! #   ! " ! ! 
+      " 
+ 
+          # 
+ 
+ 
+   " #  # " !   
+    
+      
+  
+  
+  
+   
+ 
+  % % $ " % # # % % ' + ' % #   "  ! # # "   
+ !   $       ! 
+ 
+  ! # # ! # "   
+  ! 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+ 
+ 
+         
+ 
+ 
+  
+ 
+          
+   
+ 
+                          
+ 
+        
+               
+        
+ 
+                  
+     
+  
+  
+  
+  
+   
+    
+ 
+ 
+            
+     
+     
+  
+ 
+       
+     
+                                                                                                         
+   
+                                             
+           
+   
+ 
+ 
+      
+             
+      
+    
+    
+  
+ 
+  
+  
+  
+  
+ 
+  
+ 
+   
+      
+    
+   
+     
+ 
+  
+  
+ 
+    
+       
+    
+  
+  
+  
+ 
+ 
+ 
+    
+ 
+ 
+                                                                                                 
+ 
+ 
+  ! & ( % ' ) - - 0 / 4 . 1 1 1 / / ) , 0 2 0 1 , 0 1 + ' ) + . - , 0 ) ( ) ( + * - - + * ( + - 0 . - 0 / 3 / 1 0 , , ( - - + ' * ) + 1 ) , - - ) - + . / - ( , + 0 0 . * , . * ( + & + ) + - - * ( ) - . ( + ) ' * / - + ) * ' + , , , , + , / + ) % - + , * , ( , + * * , . - ) ' ) + . . / . / / , + * 2 2 - & + + + , / - . + 3 . + , + + + 3 . / , , , , . / - , ) , , * ( # $ ) & " ( % ' ) ) ) # & ) $ % ) $ % ! $ & $ " % $ $ $ % $ " #     # $ " # $ ' ) & % 
+ " "   " ! # " # " 
+ 
+     
+  
+ 
+ 
+ 
+   %    
+ 
+  ! $  
+ 
+ # $ " ! " 
+ 
+    
+ ! " # # "    # " # $ !  $ "   ! ! !  
+ 
+     ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   ! 
+ !        
+       
+ 
+  #          
+ 
+        
+ 
+  
+ 
+   % ( % $   ) &   $ % $ # ! 
+   # # $ ( # 
+  
+  
+  ! 
+ 
+ 
+  
+ 
+ ! !   ! # #   !  
+ 
+   " 
+ " 
+      
+    
+      
+ 
+    
+  
+  
+ 
+    
+   
+         
+  
+                                                
+             
+           
+        
+        
+     
+      
+     
+ 
+ 
+   
+ 
+             
+   
+    
+         
+             
+      
+                                                                                                                                                              
+        
+  
+              
+  
+ 
+ 
+  
+  
+   
+ 
+ 
+ 
+ 
+   
+  
+  
+  
+    
+ 
+ 
+ 
+ 
+        
+     
+ 
+  
+  
+ 
+ 
+   
+   
+    
+ 
+     
+ 
+ 
+     
+    
+     	 
+                         
+                             
+ 
+                        
+                   
+      # & % ) ) , / / 0 0 * 2 3 2 0 2 , , + 0 4 - + * 0 + + ) - 3 / - , + ) + ) - ) + . - , ' ) - 0 . + , . 4 - * ( * - ) ) + / ' - + + 1 . * 0 0 * , + - , , + . + , . + + * + ' - , * + , + ( - . - - + / + * ) , ) . , * + . , ( . , , + , ) * / - + ' , ' * + + * , + , * 3 + * * - . - * ) * + ( * ' - ) - ( * - + 5 2 0 0 - / - + ) ( * + , , + 0 , - - , , * 0 + ) , * ' & $ % ) ) ( $ % % ) & $ $ ' % $ # % $ $ # % ! % " ' % " & ' !   # ! # " # $ % #   ! " 
+ 
+   
+ !  !   "     ! " "   
+ 
+ 
+ # "    
+  #  
+ !   ! $ $ !  ) '  "   
+  
+      
+   "  " 
+  !   "    " " " 
+       ! 
+   
+ 
+ ! #   
+ 
+ 
+ 
+   
+    
+  
+      
+ 
+       
+   
+          
+   
+  
+   
+ 
+    
+ ! ! " #   % %     # # 
+    ! " & & % $ !  " !   
+     " ! # " & " 
+  ! !   "   
+  
+ 
+ 
+ 
+      
+ 
+          
+    
+   
+    
+   
+ 
+  
+ 
+             
+  
+         
+                          
+                                                           
+    
+    
+              
+            
+ 
+  
+                                                                                                                                                                                           
+                  
+ 
+ 
+ 
+  
+ 
+ 
+   
+  
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+   
+  
+ 
+  
+  
+ 
+  
+   
+ 
+ 
+  
+  
+    
+  
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 	 
+               
+                                                                                  
+ 
+   # # # $ ) ) + 2 3 4 2 / 7 / - - / 2 3 - * + - - + ( , + + ) + / . , . + ' + - , * + 1 / , * ( , - + , / + - - . + - 0 , , * - / , , . , + + 2 . , . 1 , , 0 + , - 3 . - . . * , - * ) - + ( ( 0 , , - - / * 1 , , * * * , 3 / , ) ) - * + * , . + * - % * - * 3 ' ( + * ) * - + * + * + * ( * * * ) % ' , ( . + - * ) 0 0 1 3 5 . - * - ) * , + + , ' * . / * + + , + + ) ( ( ) ) ) ) + ( & ) $ ( &   % ' # & # $ #   " & ! ! ! ! " # ! # # 
+ " ! '   "   "   
+   
+ 
+  
+     
+  "   
+ 
+ ! #   
+ 
+ % ! # " #  ! $ 
+     ! 
+ # !   # " 
+  %  " % # $ "    #    
+ $ # 
+ % $ 
+ 
+ 
+ #     
+   
+ 
+ 
+ 
+    #   
+ 
+ 
+ !          "     
+ 
+   
+   # 
+ 
+    
+    
+     
+             
+  # !   ! $   " 
+ ! $ ! #   $   % % " ! # # " ! # 
+ " " " & ! " # ! " 
+   # " 
+   
+    
+   
+ 
+    
+ 
+                  
+  
+                 
+   
+                           
+ 
+               
+      
+                                             ! 
+               
+ 
+ 
+    
+ 
+ 
+  
+   
+        
+                                                                                                                          
+         
+                                     
+          
+        
+               
+   
+  
+ 
+    
+  
+ 
+ 
+  
+ 
+ 
+      
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+   
+ 
+  
+ 
+ 
+  
+  
+ 
+ 
+ 
+  
+ 
+ 
+       
+ 
+ 
+    
+    
+    
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+                                                                             
+                     
+ $ " & # & ( + + 0 2 4 1 1 7 / . . + / 0 0 - 0 . 0 + & - * ) ' ) ' + , * * . ( . - * ) - 0 . . - 0 4 * * 0 . 0 / / , / 1 + ) * ) + - ( + . ) ) / . , . - 0 / , , / . 0 1 1 / . , + * ' + , , + * * + , + + / / 3 / ( ( * * * 1 - . ) ( ) - . , 1 . , ) ' ' + * * + , ( ) * , ) + , ( ( - - * ) , ' ' ( & ) - , - ( * 4 0 / / . , + - 2 . - . ) . + / . + ( - ) + 1 , + , 1 , * * - ' ' & ) & ' * ( & $ " # ' ' % # $ % $ % $ ! " " !   !  
+ !    
+ # #         
+  
+ 
+ 
+ 
+ 
+ 
+ 
+     !    " " 
+   % " 
+  
+   " )   ! 
+ ! "   
+   $ 
+ ! # " ! $ " # ! 
+   "     ! $ $ % $ "   
+    
+  
+  
+  
+ $ ! 
+ "     $ !      
+    " 
+   
+   ! 
+  !                 
+     
+ 
+ 
+    
+ ! $ # ! " #  " # # " " !     ! #   #  ! % &  ! % $ & # # $ " ! # ! ! 
+ 
+   !  
+ 
+ 
+    
+   
+   
+   
+     
+         
+  
+  
+  
+                        
+           
+                              
+ 
+       
+            
+                        
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+ 
+    
+ 
+ 
+  
+      
+   
+      
+                                                                            
+                                                                                               
+    
+                
+             
+ 
+    
+      
+ 
+     
+   
+ 
+  
+ 
+        
+ 
+   
+   
+  
+ 
+   
+        
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+          
+ 
+  
+   
+    
+ 
+ 
+ 
+ 
+                                                                                                
+ 
+ 
+ 
+  $ & ( , / , . 1 . / . - . 0 + , 0 - 1 - - / - ) . 1 / - , + . 1 , + + * - , / . % , + ( 1 - - - / / 7 1 / + - * * , , * * ( * - + % / - , + , , - 1 / / / / , * / 1 , / - . 4 / ) ) * , + ) 0 1 - - - / 2 , / / , + * + ) ) ) + ) - ) ) , - / ' ) * ' * ( * * + , - ) + , + / * ( - / 0 , ) ( ) + - 3 / , * & & / 4 / - 0 - 0 . / * + , + 0 / . - ( . 0 / 0 0 / . , + . + , . + * ( * + 0 ) * ' % ) # ( ' & % % ! ! " " ! % % # # # ! 
+   
+ 
+ 
+ ! % $   
+ 
+ 
+   
+ 
+   !  
+  
+      !  # 
+   
+ " "     !       
+ " 
+   ! #  
+  # " 
+ " 
+ ! $   ! ! " " " # # # %  
+     $     "    !     "   
+    !     " 
+ 
+ 
+  
+    
+  ! 
+ 
+ $ # " " " 
+ ! 
+ 
+ 
+ 
+   
+  
+           
+  
+ 
+ 
+ 
+ " ! ! "  % $ # $ & " ! " ! 
+   % " % % # # " % $ " & * & ' ' #   ' " 
+   !   
+ !  
+ 
+   
+ 
+   
+ 
+   
+   
+      
+      
+  
+  
+   
+                    
+ 
+   
+                   
+  
+ 
+   
+                                        
+                    
+ 
+     " 
+   
+ "   
+ 
+  
+   
+ 
+  
+  
+      
+  
+ 
+      
+              
+  
+                                                                                                          
+  
+                                         
+        
+ 
+        
+    
+   
+  
+     
+                             
+       
+   
+             
+  
+       
+ 
+ 
+ 
+    
+  
+ 
+       
+ 
+  
+ 
+       
+     
+  
+                                                                                                    ! $ & ( ) / . - 1 - / 0 - / . / 1 1 1 2 - 3 2 3 - - 0 * + * - % - + . - - / ) + 0 , + + , / , 1 ) / 0 2 0 0 + 0 2 / . / 1 0 . - + / . , + 0 - * * - 0 . . 0 * + + 2 1 0 , - , . / + , ) * + 1 1 . 0 1 - / 4 + - 6 1 / ) ( ' , ' / , . * % + * + & & & ' * ( + * ) ) ( ) + , / 0 * , + , 0 . - , ) , . / 3 - . , . . 3 2 . 1 1 / / 0 0 / , / / 0 1 ) , . 3 / 0 + 0 , + ( - ( ) ) ( + + + / + * * ) & & ' , , ' ) $ # # # $ " !          " !   ! " $ "  
+        
+    
+  
+ 
+ 
+ 
+    % % ! !   ! 
+ 
+   # # % $  ! % % " # ! # # % # $ $ #   
+ " !  
+ " # # % & # ! !   ! & * $ " "   ! 
+  ! !    $ # ! # # $            !    
+   $ !   # % # ! # # 
+ 
+ 
+  
+ 
+       
+         
+   "  ! ! $ # % # " # $ # $ ! % " " % " ' ' & ' ' # $ #   " ' ' !   
+ " # #   ! # $ ! 
+ 
+  $    
+ 
+ 
+   
+   
+          
+  
+  
+ 
+ 
+ 
+ 
+ 
+  
+   
+   
+   
+      
+ 
+ 
+   
+          
+     
+    
+   
+    
+  
+ 
+ 
+ 
+  
+   
+     
+ 
+  
+  
+ 
+                 
+ 
+    
+                
+ 
+ 
+  
+   
+ 
+ 
+    
+   
+ ! ! 
+  
+ 
+ 
+ 
+          
+  
+ 
+ 
+   
+  
+  
+  
+  
+  
+  
+  !            
+ 
+   
+ 
+  
+                                              
+          
+                 
+   
+  
+             
+       
+   
+          
+    
+  
+ 
+ 
+             
+   
+       
+   
+    
+   
+ 
+ 
+ 
+ 
+                      
+       
+   
+   
+  
+                          
+ 
+                     
+                                                                                                                  
+    !   " # ) & - 2 1 . 1 0 2 0 7 2 1 3 2 . . 1 2 4 5 . + , - * * + ' - + + , + / - + 2 - . 0 + * - . 0 ) * / ) / - . 1 2 0 2 4 - , , * + 0 , * * + - . * . - / - + / - - 0 2 , / , . . , * - - , 3 / + ) + + 0 5 1 . 2 + , 2 + + - , / , 2 , + , ) * ( ( ' & ' ' ) , / + , - / * - 1 . - , 2 . + ( , + 0 , 1 1 / 1 / 1 3 . 0 0 / 3 0 0 / + 1 1 1 - 1 . 2 2 4 0 , 1 0 - + - - ) + * ( + + * % + , ) * ( + * * ) & % ) ! % & # # ! "   " " ! % ! 
+   " $ " ! # $   
+  
+ 
+     
+   
+ 
+ "      " 
+   $    
+ 
+ " # $ ! !    #  $ # % & & # ' "  
+     
+ # ! # " " % " !   " " !   !  " ! " #       !         % ' " " #    
+ ! # # ! !   "   ! "    ! ! !  # # 
+   
+ 
+  
+ 
+   
+   
+ 
+      
+     ! 
+    $ $ % ( ) ' ( % $ # ! " ) # ' & % % $ $ ! # $ " % % !        # "  " # $   "   !  
+  
+ 
+ ! 
+ 
+ 
+     
+    
+ 
+  
+  
+     
+    
+ 
+ 
+ 
+ 
+ 
+     
+   
+   
+  
+ 
+       
+  
+        
+  
+   
+ 
+    
+       
+ 
+          
+   
+  
+ 
+   
+  
+ 
+    
+ 
+  
+ 
+  
+  
+ 
+ 
+    
+   
+        
+  
+ 
+ 
+  "   
+ 
+ 
+       
+   
+ 
+    
+ 
+ 
+ 
+    
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+     
+ 
+ 
+      
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+                                                  
+                          
+ 
+    
+        
+     
+  
+   
+    
+      
+           
+ 
+       
+          
+       
+ 
+ 
+ 
+ 
+ 
+       
+                                        
+                                                                  
+                                                                                                
+ 
+  ' # # $ ' ) 0 - 1 3 - 2 / / 7 5 3 / / 1 . 1 6 2 2 - * * * ) * + + , * * . 1 , 0 1 1 0 1 + ) / - / , , . + / / , ' 3 7 1 4 0 . ) - * , . ' * - , , ) - , ) . * . - , . 2 . + , . * 0 / * . 1 . + / ( ( , * - / , - . / . 0 , / , - - * + + 2 / * , - 1 , ' ( 0 1 0 ' + ( , 1 + . , / ' + 3 2 + + . 0 , , . , 1 1 4 2 0 1 . 0 / 5 . . 2 - 0 . / / 2 1 1 1 2 + - ( - 2 . 0 , + + - - . . + ) , . / ) ' - ) ( $ " ' ( & & " $ ( # & 
+  # & # % " " $ % # 
+ !     % ! 
+       $ $ " "   % "      
+ # " ! " 
+   ! 
+    "      "  # " $ #   # $ % ! ! # ! # %  ! # ! "   $ !  ! # # 
+   # " & $ !   ! ! 
+   ! $ ! # % # " " ! # #    
+ 
+ " $ ! #    
+  ! 
+     
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ % % ) $ ' 
+ & $ % ' ) + % " & ' $ $ $ $  # ! % $ % $  " ! 
+ !   # " #  " "  
+   
+ 
+ 
+ 
+ 
+ 
+        $  
+   
+    
+ 
+   
+ 
+   
+  
+   
+     
+   
+  
+ 
+ 
+  
+ 
+ 
+     
+ 
+    
+      
+  
+ 
+  
+ 
+           
+ 
+      
+ 
+  
+ 
+ 
+  
+  
+ ! 
+  
+   
+ 
+ 
+   
+    
+ 
+    
+   
+ 
+             
+  " ! 
+ # " 
+  
+ 
+ 
+      
+ 
+ 
+   
+   
+ 
+ 
+ 
+    
+   
+     
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ "   
+  
+ #  
+     
+   
+ 
+ 
+   
+    
+ 
+               
+          
+          
+ 
+                                                  
+   
+ 
+ 
+      
+ 
+ 
+    
+ 
+ 
+   
+ 
+    
+  
+   
+   
+   
+       
+ 
+  
+    
+   
+ 
+ 
+     
+ 
+  
+ 
+ 
+  
+ 
+  
+     " # 
+                                                                                                                                                                                                  
+   
+   $ $ & ( ( ' 1 1 1 4 3 9 0 . 4 2 1 0 ) 5 7 3 0 / 1 - - . 1 0 - * / 0 2 / * 0 . 2 6 0 / / / + , - , / 1 1 0 - 0 . - . 2 2 / * + , , / - + + + + + , * - / + , 0 , + / - 2 - , , / 1 1 / , - 5 2 / + / + . 1 0 / * 1 0 2 2 4 2 - + , * * - . + 0 / - - / . , + 0 1 4 5 * * , , 0 2 / / / * 5 1 1 , . 1 / 0 - * . 0 2 5 2 2 2 2 . 3 3 1 1 0 1 2 3 2 7 1 5 / 1 - - / 2 1 0 . - / - - 2 , / 0 & ) / 2 - ) ) * ) ( $ ( ' * * ' % ) # %   # % + ( ' ! $ & & $ # " $  $ $ # # # " # ' "   % # %   " $ # $ ' $ " ! " "  " % # " " 
+ 
+ # # $ ' & " % ' " ( $ % #   ! # % # $ % ' # ' % " 
+ ! % #   $ $ # # % &  # "   $ # !   % # % $ " # ! ' # ! 
+    %  "   ' $ ! " " ! 
+ " !   
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+  
+ 
+    
+ ! 
+   % % , & & $ + ( % $ ) ) ' ( & ' ' $ ' ' ' $ ! ! & $ & & % $ # #    ! # & & ' ' $ &   #    
+ !  
+ ! "        
+ 
+    
+ 
+ 
+ 
+  
+ 
+   
+  
+ 
+ 
+ 
+  
+ 
+   
+    
+ 
+   
+ 
+   ! 
+ 
+        
+ 
+   
+ 
+ !  !   
+  
+ 
+  
+ 
+ 
+  
+   
+ 
+  
+    
+ 
+ 
+  
+  
+    
+ 
+ 
+ ! 
+ 
+       
+ 
+ 
+ 
+ 
+   
+  
+ 
+ 
+  
+     
+   
+  
+ 
+ 
+ ! ! "  ! #    
+ !  ! # # 
+  
+ "  !    
+ 
+  !   ! !   !  "  
+ 
+  
+ 
+ 
+  
+ ! 
+  "   ! 
+  ! 
+ 
+ 
+ 
+ 
+ 
+ ! ! ! 
+ ! 
+      
+  
+ 
+      
+     
+        
+      
+     
+  
+             
+   
+     
+           
+ 
+    
+ 
+  
+ 
+ 
+  
+      
+ 
+ 
+  
+   
+ 
+ 
+  
+ 
+ 
+ 
+  
+   
+ 
+ 
+  
+ 
+ 
+ 
+      
+       
+   
+      
+ 
+  
+   
+ 
+     
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+     
+  "  
+   
+  
+                                                                                                                                                                                              # ! ! % & * ) ( * - 0 3 9 7 7 / 1 3 8 6 6 1 4 7 8 2 1 2 4 2 , 0 - / . 0 1 / . - . 2 5 2 / / . / . ( . , . 1 7 / , 0 0 0 0 1 2 0 0 / / . * / - 1 * , - 0 , - . 2 - . . - . / / 1 5 1 2 5 6 2 . + 3 0 1 , - / - 2 5 1 - / + - + 0 3 + - - - - - / / * , + * - . / ( . , 1 - ) * * 2 - / 3 2 . + 0 . 0 2 , + , 3 . 0 3 2 1 1 1 / 0 . 2 3 1 4 5 9 5 1 5 0 0 4 5 2 1 / 2 4 0 2 4 0 1 , , 0 1 3 - , ) , / 0 . + ( , , ) ( + ( ( . ( % % ' ( $ $ ! & ' $ # $ ! % $   
+   ! ' & ( % # ! " & ! ! $ " ' $ $ & ' $   % ( % # & # " # ! ! # $ % & # # % " # $ ( $ & # $ ! ! ! ! $ ' % ' $   # $ % " # & $ " ! ! & % ) ' & $ & $ % #  " % # & # # # % " # ! $ "   $ # $ $ % % % " $ % ! %  
+ 
+  $ #     
+    
+      
+ 
+  " 
+ 
+ $  ! ! 
+ 
+ ! ( ( ' ( # ) # ) & ' * + * ) & ' ( ' ) $   $ " & ( # & % ( % % " ! " " ' $ $ ( # # % " "     
+  
+    
+   
+ !          
+ " #    
+ ! 
+ ! 
+ 
+ 
+ 
+  
+ 
+  
+  !     " 
+    
+   
+ !  
+    
+    
+   
+ 
+ 
+ 
+    
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ ! 
+ 
+ 
+  
+ 
+ ! 
+  
+      $    
+ 
+ 
+     
+ 
+ 
+   
+   
+  
+ 
+ 
+    ! 
+ 
+  
+   
+  
+ 
+ 
+    
+   
+  
+ ! 
+ "     # $   ! ! " ! "  
+ " # " " !    
+ 
+  # "  #  
+              
+ ! 
+ 
+ 
+    " 
+ 
+ ! 
+  
+  
+ 
+ 
+ ! 
+   
+  
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+    
+  
+  
+ 
+ 
+     
+    
+   
+ 
+      
+  
+          
+ 
+      
+ 
+ 
+ 
+ 
+          
+  
+  
+   
+  
+ 
+  
+ 
+      
+  
+   
+      
+  
+  
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+     
+ 
+  
+ 
+ 
+       
+ 
+    
+ 
+  
+  
+ " 
+ 
+   
+    ! 
+ 
+        
+ " 
+ 
+ 
+   
+                                                                                                                                                                                              
+ 
+   # % # * / . , 0 / 1 2 7 3 / 2 7 8 8 5 2 8 1 1 4 3 . 3 - , 1 1 , 0 5 / 2 + / / / 0 1 , / , , + - 5 - . . 1 4 1 . 5 / 2 0 0 2 1 / 0 . - + - . 0 1 / 1 0 . 0 . - . * 2 0 / 0 3 2 . / / . 6 5 3 4 / 1 / - - + 1 3 8 / . . 0 , 3 6 , - 0 1 . 5 0 0 ) ) + - , / / 0 2 , 3 0 - 0 . / , / 4 1 . , 4 2 3 / / - / 7 5 0 0 0 1 / 0 2 / 1 4 5 8 4 8 7 1 3 0 4 - 5 5 0 0 - . 0 1 / 2 . . 0 / 0 0 , , / , , 2 0 - , , - + ( , ( % ( - # * ' ( ) ( ( $ $ % " % & ! # & & # " ' ) ( $ ' & " ! ' ( % ! # ( " # $ ' ( & % % # & ( " # % $ ' % # $ ' % $ # & % # $ ) % # % " # $ ! $ # ( % " ! % ! # % $ $ % & ' $ " & ' $ ! #   # $ " " # ! $ & % # ' $ & # % $ $ & # $ " $ $ " " "  " " " " !   !     
+ 
+ 
+ ! 
+ 
+     
+ 
+ 
+ 
+    " #   
+ ! ! ! $ ! " $ $ $ # & ( ) & ( * & * & ' % $ ) $ "   ( + ' $ " & & %   %   % $ ( * * # # '  
+ $ %    
+ 
+ 
+ 
+ 
+    
+ 
+  " 
+   " !       "  $ ! 
+ ! !   
+ 
+   
+ 
+ !      
+    
+  "  
+ 
+ 
+ 
+      
+ 
+ 
+ 
+ 
+ 
+ " 
+  
+ 
+   
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+  ! 
+ 
+ 
+ 
+  
+ 
+ 
+  !   
+     
+ 
+ 
+ 
+ 
+   
+   
+ 
+ 
+  
+  
+ 
+  
+   
+ 
+ 
+  
+  
+ 
+ 
+ 
+   
+ 
+ " " " ! % # " " "   ! ! ! 
+   " " 
+    "  !   
+ 
+ 
+ !       
+ 
+   !   " "  
+  # 
+ 
+     
+  
+    ! "   
+     
+  
+  
+ 
+ 
+  
+   
+ 
+    
+ 
+ 
+ 
+   
+     
+ 
+     
+ 
+    
+      
+ 
+ 
+    
+    
+   
+       
+ 
+   
+ 
+   
+  
+   
+   
+ 
+ 
+ 
+ 
+   
+ 
+   
+ 
+  
+ 
+ 
+   
+  
+ 
+  
+  
+  
+ 
+ 
+   
+  
+ 
+  
+ 
+    !    
+ 
+ 
+ 
+     
+ 
+  
+   
+     
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+ 
+     
+ 
+   
+ 
+ 
+ 
+  
+                                                                                                                                                                                                    # & ) ) & * . 1 1 5 7 4 0 0 5 4 4 8 7 8 3 8 1 1 2 0 4 - 1 0 1 1 - 0 3 , / / * 0 / / 4 / 1 0 + / 3 6 4 / 1 0 0 / / 2 2 / . 2 3 0 - . / / + * + , 0 / 0 . 0 / - . , * - . - + * 1 / 0 3 1 5 8 3 . + + 1 1 1 . / . / , / / 1 / 6 5 + 0 3 2 * - 1 1 + , 2 . - , 3 1 / , . / / 0 2 0 , - 3 . / 1 5 2 . , 2 3 3 4 / 3 1 6 . 1 5 1 1 4 7 6 8 5 3 3 2 0 2 3 0 . 2 0 - 0 2 3 3 3 1 0 / . 2 / 1 ) , . , , . 0 - + ' + * ( + * * $ % , ' ) & ) % $ $ # & " ) # ( ' ' ' $ % % ( ' ' #   " " # % & % #   ! ( # " & % $ $ ! #  
+ " # * ' ' % & $ $ $ # ! " ! ! " # $ # ( " # " " ! #   ! $ % $ $ # $ "   # ( # " # ' " % $ ' ! & # $ " % # $ $ & # " " " # " $ " % ( '     # # " # ' ! 
+ ! ! ! ! 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+  
+  
+ 
+        ! 
+ !  
+  % % $ % % # ' ' $ " ' ( # ' ) , & $ # ) % & % # % $ ! " $ # #  ' ( ' % ( %   " & & " ! 
+ 
+   
+ 
+   
+   ! !   
+   
+    
+   ! # 
+     
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+     
+ 
+   
+  
+     
+  
+ 
+ !  
+     
+ 
+    
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+    
+  
+   
+ !   
+ 
+ 
+ 
+ 
+ 
+   
+     
+ 
+       
+      
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+     ! ! " % #     # $   
+  ! " 
+ 
+ ! 
+ ! ! 
+ 
+ 
+ 
+  "  
+ 
+ 
+  !          ! 
+ 
+ 
+      ! 
+ 
+     ! ! 
+ 
+  "  
+ 
+ 
+  
+  
+    
+     
+   
+ 
+                            
+ 
+     
+      
+  
+  
+ 
+    
+      
+ 
+     
+ 
+           
+ 
+  
+ 
+ 
+  
+ 
+     
+   
+    
+     
+ 
+ 
+   
+ ! 
+  
+ 
+   
+ 
+ 
+  
+            
+ 
+ 
+  
+   
+    
+   
+ "  
+    
+      " 
+ 
+ 
+ 
+                                                                                                                                                                                              
+  $ ! " $ ( ) 1 / 1 0 3 0 4 3 5 7 3 9 7 9 2 7 . 7 4 3 0 - , 0 2 4 2 3 * , , , - - / 1 0 / 1 0 1 4 0 . / 3 0 0 / , - 0 1 0 - / 5 1 0 0 0 - 0 * , , 3 - . - + - + , . , + ) ( , + + , - , / / - . + . * 1 2 . 2 / . 8 0 ) . . . 2 2 1 / - . 0 / + * ( * . . - / 0 - / - 1 . 0 . - / ) / 4 1 / 0 3 / 1 . 1 2 5 6 4 4 0 2 1 0 5 4 1 / 1 4 2 3 2 2 4 1 2 , , * / 1 0 2 / 2 1 0 4 2 2 2 . 0 1 ( + . 0 , ) / . * * * + ' ( ' ' # $ # ' & $ & $   % # #   $ $ " % ' & ! ! % & " # $ ! " % % ! & ' %     & # ! ! " ! !   $ ! " $ # & " % " % $ " ' ( % " " " ! " " 
+ $ " % # # & " " " $ ! % & " # & "  % ' % & % ! # % & ! " # & % $ % " % ( #   %   ! ! # ' ' " !     $ " "   
+ 
+     
+   
+ 
+ ! 
+ !   
+ 
+ 
+ 
+  
+ 
+  !      
+ 
+     
+ 
+  ! 
+ ! # & $ ! ) ( $ & & % % ' & & % # % # ( $ % # # # ! 
+ # $ " % % & ! # # ! " #   # ! 
+ 
+    
+  
+   
+   " 
+  
+ 
+ 
+    
+      
+ 
+ !  
+  
+  
+     
+  
+        
+ 
+  
+ 
+  
+ 
+ 
+   
+ 
+ 
+ !  
+ 
+ 
+     
+ 
+    
+ 
+ 
+ 
+   
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+   
+  
+  
+   
+       
+ 
+       
+ 
+ 
+  
+   
+  
+ 
+ 
+   
+   
+ 
+  ! " ! "    
+     
+ 
+   !   #     # % " "  
+  
+ 
+      
+ 
+   
+ 
+    !   
+ 
+   
+  
+ 
+   
+   
+ 
+ 
+ 
+       
+ 
+ 
+ 
+ 
+ 
+                   
+ 
+                              
+ 
+   
+     
+ 
+             
+           
+  
+ 
+ 
+   
+          
+ 
+     
+   
+ 
+   
+ 
+ 
+   
+  
+  
+ 
+ 
+       
+     
+ 
+         
+ 
+ 
+ 
+   
+ 
+ 
+ 
+   
+   
+ 
+   
+                                                             
+        
+                          
+                                                                                               
+  "   ' ) * , 5 3 2 , 2 . 0 7 : 7 ; 8 8 8 2 4 - 5 1 1 , 0 0 / 0 2 4 . - / . . 2 / . 1 / 0 1 + 0 4 / * 1 2 2 4 3 - / - / . , - 1 / 0 7 0 0 . - / 0 + - - 0 . + + , 2 0 0 - 0 + , - / , - / 0 - , - , - 1 + ) . + - , - + 0 . + 2 . 1 , * - 0 , % + / - / . . 0 1 . + 0 / 3 - / , . / 2 3 3 + , + - 5 - / 2 2 3 1 1 - 2 4 3 6 7 0 0 . 3 5 2 1 7 8 0 / 1 / - / 4 7 3 5 0 2 1 0 2 4 0 0 . . - / . - - * + + * . 0 - * * & ( ( & % ( % % ' $ ! # $ " $ $ " # % " " % $ $ ! % % #   & # % #   $ #   " & ' % & $   !    ! # " ( # " " # $ & & ( % ' $ ! 
+ # ( " # ' ' * % $ & # # $ & " $  ! $ % ! 
+ " ! $ " % 
+  # % # $ % $ % $ & " " % #  ! " # " # # % $ % !   # " $ $ ! ! 
+  
+ 
+ 
+  
+   
+  
+ 
+  
+  
+ 
+ 
+  
+ 
+   
+ 
+ 
+    
+ 
+     
+  
+   ! ! " & $ & ( % # $ , % % & % $ ' %  $ $ $ ! #  " '   $ $ & % ( # # # $ ! # 
+ " #         
+  
+ 
+  
+   
+ 
+ 
+  ! 
+  
+ !  
+ 
+ 
+   
+  
+ 
+   
+ 
+   
+   
+  
+    
+ 
+ 
+ 
+ 
+    
+     
+    
+   
+ 
+ 
+ 
+ 
+ 
+     
+     
+  
+  
+  
+ 
+  
+ 
+   
+  
+ 
+   
+     ! 
+  
+   
+   
+  
+ 
+            
+  
+ 
+ 
+ 
+  
+  $ " 
+ ! ! 
+ 
+  !     
+ 
+ " " !  !   
+     
+ 
+      
+ 
+ 
+ 
+ 
+     
+    
+ 
+ 
+  
+ 
+  
+  !   
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+  
+ 
+   
+  
+      
+       
+           
+ 
+ 
+  
+ 
+      
+     
+           
+      
+            
+    
+            
+ 
+ 
+        
+   
+ 
+   
+    
+ 
+    
+ 
+ 
+   
+   
+ 
+ 
+  
+  
+ 
+               
+    
+  
+   
+ 
+   
+    
+    
+                                 
+        
+                         
+         
+  
+            
+      
+                                                                                                
+ # ! ' ) ) + - 2 2 - 1 / 6 7 4 8 7 9 7 7 3 3 1 5 3 0 0 0 0 0 5 / 5 0 0 * . / - - 2 1 - , * + / 2 1 , + 2 / 3 2 / / + - . ' ) - . 1 3 1 , / . * - . . + + 1 1 * ) . / , , * * , 0 , - - 1 . + * , / / , & - - / - ' , + , - 1 / . + * * 2 / , ( ( . 0 ' + + , , * - , * 0 . 2 / 1 . 1 - 1 + , ) , 0 - - 0 0 6 / - / 2 4 3 3 1 / / 0 2 / / 3 , / 2 3 2 + ) 1 5 5 8 . - 1 6 . , 1 0 1 3 / / . - 0 - ( ) ) - + , , ) ( ' & % & ' ) * % ) + % $ ! " % $ ( # ' $ $ # $ # # $   ! 
+ ! $ # ' $ $ ! $ $ # $ " ! $ "  $ % " $ 
+ " # "     ! & ! # & % "   ' ' $ $ ! " ( ( ! % & # ( ! % $ ' ! 
+ $ # #   
+   "  !  ! % $  ! " ! $ & # $ # 
+ ! ! " ! $ #     " # ! "    ! " !          
+ 
+  
+    
+ 
+ 
+    " 
+ 
+  
+      
+   
+    
+ 
+ 
+ ! ! " & ( $ % # ' ' $ # $ " $ !     $ & ! " &   $ ' % $ "  " $ " 
+    !  
+ !     
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+   
+ 
+   
+  
+ 
+ 
+    
+        # # 
+ 
+  
+    
+     
+    
+  
+      
+ 
+        
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+        
+ 
+      
+    
+ 
+       
+    
+  
+            
+ 
+    
+   
+ 
+ ! 
+  
+ ! 
+ 
+ !     $  
+    
+   
+   
+   
+  
+  
+  
+  
+ 
+ 
+ " 
+  
+  
+  
+ 
+    
+   
+ 
+  
+ 
+  
+ 
+     
+ 
+ 
+ 
+ 
+  
+    
+        
+  
+                       
+      
+ 
+ 
+                
+ 
+    
+         
+ 
+ 
+                
+         
+            
+   
+ 
+ 
+ 
+ 
+      
+ 
+         
+    
+        
+   
+     
+       
+ 
+                                         
+ 
+  
+   
+                                            
+   
+ 
+  
+ 
+ 
+                                                                                               
+ 
+   # # % / * , . 3 4 3 1 0 7 9 8 3 7 2 / 5 4 1 - / 1 / / - - 1 + + . / 0 2 + , / / ) , * * / ( / , / - / - + 1 1 - , , / * - * - . 1 , * + + / 0 0 ) / + * 1 0 - - . , + ) * * - . 1 . - . - , 3 . . , - , ) . , ) - ) ) , , + - + + + + ) & , / . ( + * * 1 - * ) * + , - - 1 , - / 1 0 - * + . 2 + * - 2 3 2 - 0 2 0 . / / / . / 1 , 0 0 . 3 3 6 4 - - . / / 9 0 1 - / - , 0 4 0 - + - - ) + , ) , + / 0 . . - * 0 ' & ) ' + ' $ ' ' # ! ! $ ! # $ " $ % $ $ ( ' " & !   ! " 
+ $   # " $ ' # " ! # 
+ # # ! $ $ $   
+   # " " " $ !        " $ "   & %   " " % ! ! # !  " " % "     # "   "   ! # " # ! % "   " $ # " 
+ ! $ ! 
+ 
+ 
+ # # $ $ 
+ ! ! # ! $   !   # $ # !  
+     
+    
+  
+  
+   
+    
+ 
+ 
+  
+  
+   
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   " ( & " $ % " ! & ' # % ! # # $  " % % # ' % $ % " ! ! # 
+  
+ 
+ " 
+ ! " 
+ 
+ 
+ 
+   
+ 
+    
+         
+ 
+ 
+ 
+        
+ 
+  
+ 
+   
+ ! ! 
+  
+ 
+ 
+ 
+   
+   
+     
+ 
+       
+ 
+  
+      
+ 
+                    " 
+                 
+                 
+      
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+      
+  
+     ! ! 
+  
+ 
+  
+    
+ 
+ 
+    
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   ! 
+         
+    
+       
+                               
+                           
+     
+          
+              
+    
+ 
+ 
+  
+       
+ 
+             
+                   
+           
+      
+ 
+               
+      
+                   
+             
+   
+      
+                
+ 
+ 
+  
+ 
+ 
+ 
+      
+ 
+  
+ 
+    
+                                                                                                 ! " $ ' ) , , + 1 3 6 0 / / 8 6 3 5 3 3 3 5 4 . - 1 , , 0 / . / 1 - - 1 1 ) ' 1 1 ' * * / ) + . + + , + , - - - 0 - + * ) / . 1 0 * - * , , 0 0 4 + * , 1 / 0 - , ) - + - , & ( - 0 0 - 6 ) + , + 0 / , & * + - - 1 , + , ) & . . . , , * , + ( + ) , * ' , - , , ) ) ( - . * . 1 0 , . , - , 2 . + . - 0 6 , , 3 1 / - - - 0 1 * + 3 7 3 4 0 . . 1 5 1 , - - 1 , 0 * 0 1 3 / / * ( + * ( * ' ) + , ) + - * * + ( ) & ( ( * ' % " & $ ! 
+ " ! # ! " " $ (     $ & #    " " %  # ! "  # ' ! !       
+     % # % & !   ! " " " !    
+ " " " #   ! "  " &    ! 
+ 
+   ! $ ! ! " 
+ !   
+   " % $ !  "   # "   #  "    !      
+ ! "   ! " ! " ! "   " 
+     " " #   
+  
+  
+ 
+   
+       
+    
+ 
+ 
+  
+  
+ 
+    
+ 
+   
+      
+ " ! ! # # " $ ! ) & " # $ )   !  ! " ! !   " $ ! !   
+   
+ 
+ 
+  
+   
+ 
+     
+  
+   
+  
+ 
+ 
+    
+   
+     
+ 
+  
+   
+  
+    
+ 
+ 
+                   
+ 
+  
+       
+                      
+     
+        
+ 
+   
+           
+        
+     
+          
+ 
+ " 
+  
+  
+  ! 
+ 
+ 
+     
+ 
+  
+     
+   
+   
+ 
+  
+ 
+    
+       
+  
+  
+    
+                                                                   
+                                    
+                                                    
+   
+  
+      
+ 
+ 
+        
+   
+ 
+ 
+     
+  
+         
+ 
+    
+ 
+ 
+         
+ 
+ 
+       
+     
+       
+ 
+         
+  
+    
+ 
+    
+ 
+   
+ 
+ 
+  
+ 
+                                                                                                 
+ !  " ( ' $ - * 0 4 6 1 3 / 6 7 6 1 0 0 1 5 0 - + 0 1 0 / - 2 / 1 - , - - ) + * $ # ( ( ( ' & - - , * + 0 0 ) 0 , / . * ) * ) ( / - , + * , 1 + 1 - , ) / , . 1 * ' , / - ' * ) - , , * . - ( + / 0 / 0 ) ' ( ( + . . - . ) * / . 0 , . + * + + ' $ ( # % ( + , ' + + ( - , ) + / - * * * / 0 0 2 / - . , / * , / 2 , ) . - . - , + 1 1 3 1 / / + / 5 4 0 + / / 4 . . 2 . 2 + . / * ( & ( , ( % ( + + ) * ( ' ' $ ' * + ) % $ " " ( " "   
+      " $ # 
+ $ " ! " ! !          # 
+ 
+ ! $ ! 
+   
+   ! ! !   " # !  
+ ! $ %  
+ 
+ 
+ " " $ $ 
+ 
+   
+ !   
+ 
+ 
+   "  
+           ! "   # " !  !    # $   ! 
+ 
+ !   
+ 
+     " # ! !     
+ ! " " ! 
+    $     
+      
+  
+     
+        
+     
+ 
+   
+  
+ 
+ 
+         
+ 
+ 
+  & % #     % ( "   
+ ! ! " 
+ # %  !    $ # 
+ 
+  
+       
+ 
+    
+ 
+     
+    
+   
+                 
+ 
+   
+ 
+    
+                 
+ 
+ 
+      
+    
+                  
+          
+    
+    
+                   
+      
+          
+ 
+       
+                   
+          
+   
+    
+ 
+              
+                                                                                          
+                              
+                               
+ 
+ 
+       
+          
+ 
+ 
+ 
+    
+  
+      
+   
+  
+ 
+    
+   
+      
+ 
+ 
+ 
+  
+  
+ 
+  
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+  
+ 
+ 
+    
+ 
+    
+ 
+  
+ 
+ 
+    
+   
+    
+ 
+ 
+  	                                    
+                                          
+                  
+ 
+ 
+ % % % ) + ( 0 5 4 2 4 1 3 8 4 / 0 2 3 . / . , ) - ) + + . ( ) + , , * ) ' ) , * * ) + , - 0 ) . 3 . - , + , - , - ' 0 ' ) . ) / + * $ ( / - ) * + ) ' ) ( ) ) ( , , ' ) ) ' + / , ) - - * ) + * 0 . - ) ( * . + ) ) * ) + , . , * * + * + + ' ' $ & * ( ( ' / + + / . 0 - % + . * ) + + / / + , - + 2 * * * - 0 / * , ) - ) 0 2 . , 0 1 / + . , / 1 , , / , / - 1 4 ) ) ' ( + ) * + ( & % $ + ) . * & # ' # ! % ' $ % #   ! " ! # # ! " " "  !       
+   "  
+ " 
+ "       
+    ! "   
+        
+ ! # & $ 
+ 
+  " 
+ 
+    
+ 
+ ! !  
+    
+ 
+ 
+    !    
+  
+ 
+        
+ ! # 
+ 
+ 
+ 
+    
+ !   !  
+   !  
+ 
+    
+  
+ "    
+ 
+ " # !   
+ $ % # " 
+ 
+ 
+      
+             
+ 
+   
+ 
+  
+   
+ ! 
+   
+        
+      
+   #   ! % % 
+  !  
+  $ $  # 
+  "  
+ 
+  " 
+ 
+ 
+  
+  
+ 
+        
+    
+ 
+  
+ 
+                       
+     
+          
+     
+      
+   
+                        
+                                            
+ 
+       " 
+     
+ 
+ 
+ 
+ 
+         
+                           
+     
+ 
+       
+                                                                                                                     
+                                        
+   
+  
+       
+ 
+ 
+ 
+  
+ 
+     
+ 
+ 
+ 
+      
+  
+ 
+   
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+  
+ 
+ 
+   
+        
+ 
+     
+ 
+   
+   
+     
+ 
+    
+ 
+ 
+ 
+ 
+      
+  
+ 
+                                 
+ 
+    
+        
+                                                   
+   
+ $ % ' * , . 1 - 2 5 0 3 5 4 0 . , 3 2 / . + . + , - - , / - 0 ) , + ' ) * + * - + . * ) ) * + . , . - * * ( ' ' + ( - , - ( * / * * ) + * ) ' % & ( ( * * ( ' + * + ' + - ( ' + * + , + * + * , + + * * ' * 1 + ( , , & * ( ) * ' * $ * * ) ' * * ! * ) + ' + / + + 1 - * - * ) - * * ) , - ( ) / / + . / - * - 0 0 * / 1 * 3 5 4 . / / / 0 2 . . - . ) . , + + * , + + ) ) ( * ( , ( ' * ( - * ' * ) " % $ ' & " # ' $ " ! $ $ % # #   "  ! & "  
+     ! " ! $ ! ! $   ! " 
+  ! 
+ 
+   #  
+   
+ 
+ !   "   
+  ! " #  " 
+ ! 
+  
+ ! 
+      !  # ! 
+    !  
+ 
+ "      
+ 
+ 
+ 
+    
+  
+ 
+ 
+ 
+ 
+  & #   
+ ! 
+ 
+   
+  
+ 
+  
+ 
+   !  ! ! 
+ % " "      
+                        "   
+ 
+ 
+ 
+     
+              $ &  "   ! $ ! " !  $ $ % % 
+    #   
+   !  
+ 
+  
+ 
+   
+   
+    
+     
+                         
+       
+               
+                                  
+ 
+                              
+  
+      
+   
+      
+    
+ 
+      
+            
+  
+   
+          
+ 
+ 
+    
+           
+                                                                                        
+       
+ 
+  
+                                            
+                                   
+ 
+ 
+ 
+      
+  
+ 
+   
+       
+  
+  
+      
+ 
+  
+     
+   
+  
+ 
+    
+  
+ 
+         
+ 
+ 
+  
+ 
+   
+    
+ 
+      
+    
+ 
+ 
+                                                                                                  $ # $ # % * + 4 2 1 8 6 4 2 0 2 0 0 - 5 0 , 1 . 2 ) - / , + * + . ( ) + - / . 0 / ( * ) / , , 1 1 * ' . 0 + + * ' ) 0 * , 2 1 / ) + / , * ) - / + + ) + * - + / , , - - * ) ( , + - ) , * ' ' ' 0 / ' - 1 , 0 / - ) ) - . ) ( + * , + + , * ( ) + & ' ! % * , * ) * , , + / ) . , - - / ' + ) ( ) * / + * 0 3 - + . 0 . ( , / - 2 4 0 2 - / / / - / - 0 - / / , - + , 1 . 0 - . . * ' + * & 3 . 0 % & + , $ ' $ $ ( ) ! ! & # # $ # # 
+ # 
+   ! ! $   !   
+ 
+   
+ # ' ! !  $ # ! 
+        " " 
+ !     !   ! 
+  
+ " $ 
+   
+ !   
+  
+ ! $ " $   & $   "   
+ 
+ #  
+ 
+  " 
+  
+ 
+   
+    
+  " ! 
+ 
+  " " !            $ " " % $ " "  #   !  !       
+ 
+ 
+       
+     
+  
+   #    " " # " !  
+ 
+ 
+        
+  
+    
+  
+ ! #   ! #  $ $ $ ( ! # " 
+ $ ! " 
+  ! 
+ 
+ 
+  
+  
+     
+ 
+ 
+   
+            
+          
+    
+ 
+    
+           
+             
+ 
+                                
+                       
+                     
+  
+   
+  
+      
+  
+    " ! 
+   
+    
+    
+ 
+          
+ 
+ 
+ 
+   
+                                                                                               
+  
+   
+        
+   
+     
+                            
+       
+                                           
+               
+              
+         
+ 
+ 
+   
+               
+         
+  
+  
+         
+ 
+                                                                                                    # ' # & ) , 1 3 2 7 3 0 9 2 / 9 8 4 0 2 5 3 , 2 6 5 + 3 0 ( - - , * * , / - 0 + * - - - , - 1 0 - . 1 / * + - ) ( - 3 + . 1 / 0 - 1 , 0 ) 0 2 3 / + 1 - . * / ) & . - / ( ( , - / / , . ) , 0 2 1 ( . 1 . - 2 . + - - - ) ' - . - , - * * ( - * 1 . * / / 0 0 . 0 - / 1 . * + - , , , + / / - * . - , . / . + - , , , , + + - 0 2 1 1 3 0 / 2 5 1 / , , + ) , , 3 - - 0 2 1 . , ' & + * * / 2 - ) + ( + ( ' % % ( * # ' ) * ( $ & ! !      " % " " !  
+ " % " " ! $ $ !   #  " "      ! " ! ! $ & ! !  ! $ $ 
+ 
+ # #   ! ! " $ 
+   !  
+ "     '   ! %   
+ 
+   $ ! 
+    
+  "  # ! 
+ " !     
+ 
+ # #  " !  #   
+ 
+ " " !   ! # " & ! " #   ( ) $ & " 
+   "  
+ 
+  
+ 
+ 
+   
+ "  
+     
+ 
+ 
+ # % % ' ) # % " #  ! # 
+ 
+  
+ 
+ 
+ 
+ 
+   
+    
+  
+   ! # ! " # % " " ) $ ! 
+ 
+ # % $ "   " " # "       "   
+ 
+ 
+  
+    
+  
+ 
+  
+  
+ 
+ 
+ 
+ 
+    
+       
+ 
+ 
+ 
+ 
+    
+  
+    
+    
+ 
+        
+    
+       
+            
+       
+        
+     
+      
+ 
+ 
+  
+ 
+         
+ 
+  
+ 
+ 
+    
+         
+ 
+ 
+ 
+  
+ 
+    
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+      
+   
+    
+  
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+  
+ 
+   
+ 
+  
+  
+   
+                                         
+ 
+                     
+              
+    
+   
+   
+ 
+     
+    
+   
+       
+     
+  
+    
+    
+            
+       
+  
+  
+        
+  
+    
+  
+    
+ 
+   !  
+                                                                                                                                                                                                
+ 
+ " # ( ' & + + 0 5 9 5 8 : 6 5 4 9 8 3 2 0 6 . - 0 ; 4 . / - * - * ) ' ( + * , - - , . + + 1 * - / / . + 0 1 1 . + * + 0 , - * - 0 2 3 3 1 1 1 3 . 1 0 4 2 - - ) ( ) - + / * + - + + , , 1 ) , / ( - , + 1 1 , 0 2 - - / . 0 - / , , ( ) ) , - + 2 5 , ) - . 1 1 . . 0 / 0 6 . + + ) ( + * - / , - , . . - , + - - , * 0 / 2 + * . 4 0 0 + . 2 2 . . - , + ' ( , / 0 , - 1 0 - 2 , . * . - - / - , + * * + ' * % ' + ) % & # $ ' % ( # $ &  ! " $ " % !   ! ! " "   $ % '    !  $ #   ! ' ! ! ! ( & ( & !  " % 
+  "   # & % $ $ * ' " 
+ !       
+ " $ ! 
+   
+ 
+ $ "  # ! #     ! " 
+ % # "   
+ 
+ # " ! $ " " " 
+  ! !      "   
+ 
+   !   " # ! "     " % !   
+ 
+  
+ 
+   
+  
+ 
+   
+    $ 
+  % # % ) - ' ) $ $ ! " "   # #   
+ 
+ 
+ 
+   
+ 
+    
+  
+    $ # # $ $ , & % %   $ #  " # # $ "     ! "   
+ 
+ 
+ 
+    
+ 
+       
+  
+       
+ 
+      
+  
+ 
+  
+      
+    
+  
+ 
+ 
+     
+ 
+ 
+    
+ 
+ 
+       
+                  
+   
+ 
+         
+  
+ 
+    
+  
+    
+ 
+   
+      
+  
+       
+    
+   
+ # "    
+ 
+ 
+     
+   
+ 
+ 
+ 
+ 
+   
+   
+   
+  
+   
+  
+ 
+ !  
+ 
+   "    
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+     
+                                                       
+ 
+     
+ 
+      
+          
+ 
+     
+   
+ 
+ 
+  
+ 
+  
+   
+    
+      
+    
+ 
+   
+ 
+   
+    
+        
+    
+ 
+ 
+  
+ !       
+ 
+ 
+ 
+ 
+ 
+   
+     
+ 
+ " 
+                                                                                        
+                                                                                                          
+ % % & , . 2 4 4 3 8 8 8 7 4 . 7 5 4 4 5 4 / 0 5 4 . - - ) - , * + , . + ( + * + , . 2 . / - - . - , , . + / . - 1 . 2 / 0 - 2 / / 0 . 1 0 4 / - 2 / 2 / ) - . 0 ) * * . . * - - 0 2 - 1 / ( . - . + + 3 - . 5 ; 0 1 . , - 4 - + , ' ( . - 2 * . * - - / , - , , * 0 . - 1 0 . / . ( - ) + + , / . 3 / . 3 . 4 3 + * 0 , 1 , . , . , + / - . - - 0 - + , , , . 0 - . . . - 1 3 4 0 . * , ) * - * + * * * + ( ) % & ' $ ( " " % & ) $ ! # $ % # " ! # $ "  ! $ % $ % # ! # ! #  " ! ! $ $ $       
+ % * &     ! %  
+ # # ! $ ' #   & $ $ # $ !  
+ "  " ! # ! $ ! 
+ $ # # 
+    #   
+   
+ " ! 
+      
+   # ! % & 
+   % % !   " # " !  
+ 
+ $ # " # # $ # % # ! ! ! 
+ 
+     
+       
+ !   
+   " # # % ( ' ( ) ) ' $ ! " " # $ # !  
+ 
+    
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   ! # ' # # % # & % # ! # $ % " !  " ! !       ! 
+ 
+   
+  
+ 
+ 
+ 
+  
+ 
+ 
+      
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+  
+  
+   
+      
+  
+ 
+     
+ 
+   
+ 
+ 
+ 
+ 
+     
+  
+    
+ 
+            
+  
+ 
+        
+   
+ 
+ 
+           
+ 
+        
+ 
+ 
+  
+   
+  
+ 
+ 
+   
+       
+ 
+ ! 
+ 
+  
+ !      !      # 
+    
+ 
+  
+   
+ 
+ 
+ 
+ 
+       
+ 
+  
+ ! 
+  
+  
+ 
+  
+  
+ 
+    
+   
+   
+ 
+  
+                             
+                     
+ 
+  
+  
+ 
+          
+             
+ 
+  
+   
+  
+ 
+ 
+ 
+  
+ 
+    
+ 
+      
+  
+ 
+ 
+  
+     
+ 
+   
+ 
+ 
+ 
+        
+    
+   
+   
+ 
+    
+  
+   
+ 
+ 
+    
+   
+   
+ 
+  
+                                                                              
+ 
+                                                                                                                 
+ " $ ! & - 2 6 2 8 < 7 : 8 2 0 4 3 2 5 3 6 2 1 6 2 / 1 - ) . * . + / * , ) + + + / . . , - + . . , * ) 0 0 - 0 / , + 0 2 , - . / 1 / 2 0 3 1 - - 1 . , / / 2 1 2 1 - . , . 0 . . 1 2 2 5 2 1 . 0 1 0 / / / . 0 2 5 4 2 / / 1 + - / - * - / / + 2 ) + / , + - ) , . 1 . + 0 / , 1 1 ( , ( , . + , 1 - 3 7 2 , - 2 0 - 0 + - 4 2 / - 0 3 4 3 2 / / / 5 1 / 0 / 7 4 . 2 1 0 / 1 / . 1 . ) . - / - + & ) - / % & * ) ( ( # & # ! # $ & # " $ % $ " " $ % % #    # ( # # % % # "     ! " " #  #     #  # % $ # !   # ! !   ! $ % $   " " " " % # ! " # % $ " & " "   # " # %  # 
+  # ! " 
+ 
+ ! # 
+ "   ! ! 
+ # # $  
+ % ) %   ! ! ! " % !  " " ! % ! ! # " # # # $   
+        
+   
+ " 
+  
+  " # % + % ( $ % % ' ( ' % # "   # # !    
+   
+ 
+ 
+ 
+ 
+ 
+  
+    
+   ! % " $ & & " #    # # $ ! "     
+    # !  
+      
+ 
+ 
+ 
+ 
+   
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+ 
+  
+  
+ 
+     
+    
+   
+   
+     
+ 
+ 
+          
+      
+ 
+ 
+ 
+   
+  
+ 
+ 
+   
+ 
+ 
+ 
+  
+  
+ 
+    
+   
+           
+  
+        ! 
+ 
+ " !  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ # 
+ 
+ 
+      
+ 
+ 
+ 
+  
+  ! 
+   
+ 
+ 
+ "  
+   
+ 
+  
+   
+ 
+ 
+ 
+   ! ! 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+   
+ 
+  
+                     
+         
+     
+    
+        
+    
+   
+ 
+ 
+   
+       
+     
+ 
+            
+ 
+ 
+       
+    
+  
+   
+  
+   
+    
+ 
+ 
+   
+        
+         
+ 
+         
+  
+    
+     
+   
+       
+   
+  
+  
+                                                                 
+               
+       
+                                                                                                          ! " % & + . 1 0 2 6 5 6 5 1 2 1 5 3 : 2 1 / 3 2 4 + 0 , * , / / - 1 / . . * + , + - / * ) / + 0 0 . . 0 2 5 / 1 / / 0 . 1 / ) + . 1 - 7 2 6 4 / . , + , . 2 2 0 - , / , 0 0 2 - - 1 4 8 5 7 3 2 2 , . 0 , - 1 0 2 2 0 3 1 . / / - 1 / , 0 - , ) , ( / / 0 1 . + 0 0 0 3 2 0 0 2 0 + 1 2 ) . / + * . / 4 . 5 1 - 3 4 1 2 , 0 - 0 , 0 , - 6 2 1 . 1 0 4 4 4 3 5 5 1 1 6 5 1 1 / 2 2 - , , 0 0 - - - + % ( , & * ) + ( ' ) $ $ $ ' & % " % ! ! # " $ #   # " " " ! $ # " & ' # # 
+  "     # # # # $ %     ! ! $ $ ! # " ! " ' $ " # # $ & "  $ # $ % % % $ " $ " " ! ! ! & % # " 
+ #   " # ! " # "   " !   # ! # " " # #   $ # # % " " " %  " % $ " " % #   # # % # $ ! 
+ 
+  
+  
+  
+   
+  
+       
+ ! ! $ ' ( ) * + % & ) & ( * % % # % ( # "  !  
+ 
+ 
+ 
+ 
+      
+  
+ 
+  
+  # % % $ " # % % % " ! ! # # "  
+ 
+ "     
+   
+  
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+    
+    
+ 
+  
+ " 
+ 
+  
+ 
+ 
+   
+  
+ 
+ 
+  
+ 
+    
+ 
+ 
+  
+     
+ 
+   
+  
+ 
+      ! 
+  
+ 
+          
+      
+ 
+        
+ 
+       
+   
+    
+ 
+   
+  
+   
+ 
+       " 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ "   ! # 
+   
+ !  ! 
+ 
+ 
+ !   !      
+ 
+    
+    
+  
+  
+ 
+ 
+ ! 
+    
+   
+ 
+    !   
+ 
+    
+ 
+ 
+     
+   
+    
+  
+      
+   
+ 
+       
+ 
+ 
+  
+           
+ 
+     
+     
+ 
+ 
+                
+           
+ 
+ 
+ 
+   
+  
+    
+      
+ 
+     
+ 
+ 
+   
+ 
+ 
+     
+  
+ 
+         
+     
+ 
+  
+  
+   
+  
+   
+   
+   
+   
+ 
+ 
+  
+   
+  
+ 
+ 
+                                                                                       
+       
+                                                                                               
+ ! " % , ' + 2 3 . 1 7 9 9 6 6 5 9 : 5 9 4 5 6 4 4 5 1 - ) - / / 2 , . / 2 0 0 0 / - 3 0 + ( / 3 5 2 2 . / 6 6 0 / 2 1 / 4 4 2 1 / 4 2 2 1 3 3 1 3 - - / 0 2 5 5 1 - , / - , 1 2 0 , / 3 4 : 5 / 2 . . 1 / 4 / / 0 / 5 2 1 . + * - 0 4 + + + , . - / - 1 4 . 1 / 1 2 8 / 0 2 1 / , . / 1 2 - 4 6 . . , 1 2 1 2 4 1 3 - 5 8 0 4 0 . . 2 0 1 7 7 4 8 6 0 , 3 4 8 6 2 . 2 3 3 3 . 0 3 - - + . 0 / - 1 0 + & - 0 ) ) + * ) , * % ' % % ( %  $ !   # # ' # " $ % $ !   # & - ' ) '     ! "   " % ! $ ' #   % # ! # # ( " " # # $ " !   $ " & &   ' $ % # " # &   " & " " ! ! # # % # %   % $ ' & # % " ! $ ' & $ & & $ & $ % " $ ! % ( ( #  ' " # # $ $ # " ! $ $  % ' & "  
+  
+  
+   
+     
+  
+  
+    # # + ) " + ' . ) * , ) ' ) ( % ( ' ' & $     
+ 
+ ! 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+    % # $ % % ( $ % # % # # $ ( " ! 
+   "  
+ ! !   
+ 
+ 
+ ! 
+   
+ 
+    
+ 
+     
+   "  
+ ! 
+ 
+   
+ 
+   
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+    
+ 
+  
+    
+ 
+ 
+ 
+   
+ 
+ 
+ 
+     
+ 
+  
+ 
+     
+  
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+  
+      
+ 
+      
+ 
+ 
+ 
+  
+   
+ " 
+        
+ ! 
+   
+ 
+      
+ ! $ # "   !      " 
+    # !   !  ! #   
+   
+ 
+    
+   #     "           
+ 
+ 
+  
+ 
+          
+  #  
+     
+ 
+    
+       
+ 
+  
+  
+               
+   
+              
+ 
+ 
+ 
+      
+  
+ 
+       
+ 
+ 
+ 
+ 
+  
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   
+  
+  
+ 
+  
+   
+  
+       
+ 
+ 
+ 
+  
+       
+ 
+   
+  
+ 
+ 
+   
+     
+ 
+ 
+ 
+ ! ! 
+    
+ 
+ 
+   
+  
+ 
+ 
+ 
+   
+ 
+                                                                                                                                                                                              
+ ! " # ' * * . 2 1 0 6 = 8 9 ; 6 6 6 8 5 9 8 ; 8 2 0 2 / . , 0 , 1 1 2 , / 3 2 / , 0 2 + + * / 7 4 0 - + . 0 , / 0 . , / 0 5 5 6 4 8 4 5 4 2 3 0 2 . 3 3 1 + 1 6 4 2 + 2 - / 1 2 2 . - 0 5 4 7 0 3 4 / 1 1 5 5 . 3 / 2 4 1 . 0 . 3 1 3 1 1 - - 1 2 3 3 / 5 ; 2 5 4 4 3 / / 2 2 / - 4 9 4 0 1 7 : 3 3 2 3 . 2 5 1 / , + - 2 3 5 0 3 5 2 - / 0 4 7 6 5 5 2 1 3 3 6 2 1 4 1 3 6 2 2 4 . - + - . - / - 0 . - 0 3 1 ) * , 0 * ( ) ( ' ) & ( $ ' $ " ! " $ " " ' ( # % # $ % ' ' # # % % ' " ! # ! ' & # " " " ' & % $ ! " $ " # " ! $ ! ! ' ! # # $ # # " ( $ & ' $ # "   $ "   ! # " % " % " & % ' % # " 
+ " # # ! " # ( ' % & $ % % $ # & $ & ! ! # & % ) $ & # ( $ $ % % & $ 
+ " 
+ 
+   
+   ! "    ! 
+ ! # !  & , , ' ( + + , * % % * * + ' & + & % % $ # ! #  
+ 
+ 
+  $ 
+  ! 
+ 
+  
+  
+ 
+ 
+   "   # ' ' # ! !   " $ % 
+ 
+ 
+ 
+ !       
+ 
+ 
+   "  
+ !   
+ 
+ 
+   
+  
+   
+ !   
+ 
+ !      
+ 
+ 
+    
+ 
+ 
+    
+     
+ 
+   !    
+      
+ 
+ 
+ !  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+    
+ 
+ 
+  
+ 
+   
+ 
+    
+ 
+ 
+  
+ 
+   
+          
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ! !  
+ 
+    
+  " 
+ ! 
+ 
+ 
+ % 
+ 
+ ! " ! !   ! !    $ !  " ! ! % ! $  " ! "   
+  "   
+ $     
+   
+ 
+ 
+   ! " !     ! 
+   
+        
+ 
+ 
+   
+  
+ 
+ 
+      
+   
+  
+ 
+                   
+       
+  
+     
+   
+ 
+     
+ 
+      ! 
+  
+  
+  
+   
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+      
+ 
+ 
+ 
+ 
+   
+    
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+   
+   
+ 
+   
+ 
+  
+ 
+ 
+   ! 
+  
+ 
+ 
+    
+   " 
+   
+ 
+   
+ 
+  
+         
+ 
+                                                                                                                                                                                              
+   # # # ( ( * / 6 8 7 4 5 9 7 1 2 6 8 7 9 8 < 5 / 3 4 / / 1 1 * . , ) / - + / / 0 - 0 , , , . 4 1 2 , + , 4 - . - . * 0 2 3 0 1 6 : 5 0 / 1 / 2 2 2 5 0 , , / 7 6 1 * . 0 2 1 4 . 0 0 . 1 2 2 5 4 0 2 0 6 1 1 . 0 3 0 1 2 3 2 3 3 / 0 0 2 . / 2 2 2 2 6 5 4 3 1 / 4 0 0 1 2 2 1 3 8 4 : 4 6 8 5 7 5 0 4 . . / / - - / / 3 5 4 2 3 1 1 1 1 0 4 : 7 2 6 0 1 6 7 3 / 3 7 1 4 7 1 3 3 2 8 , / + + / 2 1 1 1 0 / , ) - 2 ) ( $ ( / * ) ( ) ) & " # $  "   % % # $   % & $ % % ' % & & # $ ' ) $ $ # & % " # ( ' ( ' # # $ " " % " $ % " $ $ % $ % & % ' # % $ # $ $ $ $ $ "   ! ' # " & % & ! ! ! & ' " # % # # # $ #   & % # " $ # " " $ & ) " # #   ' " ! $ " ! % " # & $ # # !   
+    
+ 
+ 
+ 
+ " # #  !    # " & ' % + + + - ' ) ( * + * & * + ) % ' % #   & ! " 
+ ! ! ! 
+ 
+ 
+  
+      
+ 
+ 
+ 
+ 
+ 
+ 
+ ' &   # # #   !   "  
+   ! 
+  
+  "     " ! 
+    
+ 
+ 
+      
+        
+ !  
+    
+  
+ 
+ 
+  
+ 
+ 
+ !  
+  
+  
+   
+  
+  
+   
+ 
+   
+ 
+  
+ 
+ 
+  
+ 
+ 
+    
+   
+ ! 
+ 
+  
+  
+ 
+     
+ 
+ 
+ 
+ 
+     
+ 
+  
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    ! 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  !   
+  
+ 
+ 
+ " "     #     !  $ ! 
+ "   " #    "  " " ! !  " !    
+ 
+   
+ !  
+      
+ " 
+ 
+ 
+ 
+ " ! 
+  
+  
+   
+ 
+ 
+  
+ 
+ 
+ ! 
+     
+ 
+    
+ 
+    
+  
+            
+               
+ 
+  
+       
+   
+ 
+  
+ ! 
+ 
+ 
+  
+  
+ 
+ 
+   
+ 
+ 
+     
+   
+  
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+  
+   
+   
+ 
+ 
+ 
+    
+  
+  
+   
+   
+  
+       
+  ! 
+  
+  
+        
+ 
+  
+     
+ 
+ 
+   
+                                                                                                                                                                                                 
+     ! ) , . / 0 7 7 4 < 8 : 3 5 6 6 7 8 4 5 3 1 2 1 5 3 , , - 0 + * , + ) . / ( ( - * - . 0 / - 0 0 * 1 . - 0 5 / 0 . / / 0 3 6 0 1 , 2 / , 1 3 0 5 3 / 0 1 3 5 . / . ) . 4 . * 7 2 ) / 0 3 0 0 2 5 . 1 1 0 , / 0 1 / 2 - 0 2 / 0 - + , 2 1 1 2 4 0 1 1 6 2 / 2 2 0 + 5 4 0 0 3 4 2 5 8 6 7 5 4 7 5 2 0 0 , , 0 - , , 0 5 0 / 2 / 3 2 3 3 3 4 2 3 / - / 7 1 / , , 0 0 6 4 2 5 / 0 4 . - + + . 1 1 2 - . ) / , 0 / % ( $ ) , * ' & & ) ) #   ! " ! ! !   % ! " ! ! & & $ $   " "   ! $ $ $ # # # $ # ' "   $ & & # ! # ! ( & # % ! ! # " # $ " $ % ! % $ # " " ' ( % $   " ( # ! # & ' # ! # & # ! % ' '   % ! "  " " " $ # " ! ! $ ! " "  $   " % # % ! % ' $ " $ &   
+ 
+ 
+    
+  
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ " $ ! ) ' & ) % - + * ' ) % ' ) * , ( & % * # ! # ( " !   
+   # 
+   
+  
+ 
+ 
+ 
+  
+ 
+  
+ 
+ !   ! ! ! ! !  
+ "    
+ 
+ 
+ 
+ 
+  ! !    
+   
+   
+    
+         
+ 
+  !   
+ 
+ 
+ 
+   
+   
+ 
+  
+  
+ 
+ 
+ 
+      
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+    
+ 
+ 
+    
+ 
+ 
+  
+     
+    
+  
+           
+   
+  
+   
+   
+  
+     
+   
+ 
+ 
+ 
+   ! 
+  
+  
+  !  
+ "    
+     
+ ! #      # $ ! $   
+  " "     
+ 
+ 
+ 
+        
+ 
+   
+ 
+ "   
+ 
+  
+ 
+           !   
+     
+          
+ 
+ 
+                           
+ 
+      
+   
+    
+      
+ 
+   
+  
+ 
+      
+ 
+ 
+      
+  
+   
+  
+ 
+ 
+  
+ 
+ 
+  
+    
+ 
+  
+       
+        
+ 
+ 
+  
+   
+ 
+     " 
+     
+ 
+   
+ 
+  
+    ! 
+  
+ 
+ 
+ 
+  
+ 
+               
+                   
+                                                               
+                                                                                                
+ # $ " & & + / 0 3 5 0 3 8 7 7 3 7 5 5 : 5 2 4 5 4 4 5 2 - , - - 2 / + + + 2 1 + / . 0 - 0 + & + 1 3 / * * / / 2 / - - * . 1 4 . - 3 4 / / 3 5 4 1 / . * . / 1 3 . / + - - 0 . . 0 - / 0 2 . , . 2 3 2 0 2 5 4 3 0 0 1 / 0 * / - , + + / + / . , , / 1 * 2 * , * . / / 0 4 0 1 0 3 2 5 3 3 7 7 4 4 3 2 5 0 0 2 / / . - ) * ) - / * 0 - 2 6 4 / 0 / . 0 2 4 1 - 1 / / * 0 3 6 2 . . 0 . + / + + 0 / * + , . - , . + ) ) * * ) ' " ) + & " ! !  $    ! $ " % $ ! #   % # #         & $ $ # # ! " ' % ' $ $ " " # 
+ 
+ " # $ " "  # " $ ) % "     " ( & !   " " " #   % ' "   ! & "   ! "   # ) % ! ' ' " ! # !   ! ! ( #   #   ( ( " !   # ! # $ ! " # % & ! " % "   
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+    $ !  ) * % $ & ) ) & ' & & ( & $ ' ' ( ) ) ' & " & # $ " ! " # 
+  "       
+   
+           
+ !   ! "   " " 
+ 
+     
+ 
+   ! 
+     
+ 
+ 
+     
+   
+  
+   
+ 
+  
+  
+ 
+   
+ 
+ 
+     
+ 
+ 
+ 
+  
+   
+  
+    
+ 
+   
+ 
+  
+    
+     
+  
+          
+ 
+  
+  
+     
+  
+    
+   
+      
+ 
+ 
+    
+   
+ 
+ 
+     
+  
+  ! 
+      
+ " 
+ 
+ 
+   
+  # $ !   
+   " $   " !  
+ ! 
+ " " !   
+    
+  
+ !   
+    
+ 
+ 
+   
+ ! 
+ "   
+   
+  
+       !  
+  
+   
+ 
+ 
+    
+                                              
+ 
+           
+    
+  
+   
+    
+    
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+    
+        
+   
+                
+      
+   
+          
+   
+  
+    
+ 
+                         
+                                        
+       
+  
+     
+            
+ 
+ 
+         
+ 
+ 
+ 
+ 
+                                                                                                   " & * * / 1 5 2 5 1 4 3 4 4 4 9 4 9 3 5 . 3 6 5 0 - 0 , - , / - - * ) - . , ) ) - 0 * , / . - 1 + - , - 1 . , 4 . + . 0 4 / . . * * 0 2 , * ) ) + . - - / , . . - / , 0 + - / 1 4 3 4 / , + 1 2 5 * . 2 - / - - . 5 / . / / ( , - . ( + + , 1 3 . / - ) ) + * , / 1 . 1 4 1 4 2 , / 0 4 6 4 4 3 2 4 / + 2 . / 0 / , * . , ( ' + * / 1 , / * 0 2 / 4 2 4 6 3 4 0 0 / . 0 2 + . 0 + , ) . / 3 . * ( , ( ( & ) . * ' + , + ) % * ) % % # % # % !   # ' " !  $ ! # " ! ! $ # ! ! !    $   # ! # ' %   " $ % $ # "   ! " # ! " ! # # ! " "   " ! ! !   "    ! # # " 
+  # * " 
+   " # ! % " & ' % ! % " ! "  " # " ! ! $ ! !   " % & ! " !      # # ! # %  " % % 
+  !   
+  
+ 
+ 
+      
+ 
+  
+ ! " # * ) ) & % ' ( , ' ( + * % # # $ % $ ' & # % & " 
+ # # #  
+    
+  
+     
+       
+ 
+  
+ $ ! " " 
+ 
+ 
+    
+ 
+   
+ 
+  
+         
+     
+   
+ 
+ 
+   
+     
+        
+      
+          
+      
+      
+ 
+          
+ 
+  
+        
+      
+         
+  
+     
+       
+ 
+   
+  
+ 
+ " 
+    
+   
+   
+ 
+ 
+ 
+ 
+ 
+ " # !  #   
+  
+     
+ 
+ 
+ 
+  
+   
+   
+ 
+  
+ 
+ 
+    
+    
+ 
+ 
+  
+ 
+  
+ 
+       
+                                                                   
+  
+   
+   
+ 
+     
+    
+ 
+    
+   
+  
+  
+ 
+ 
+  
+  
+   
+   
+ 
+  
+ 
+ 
+       
+ 
+                       
+    
+                         
+         
+     
+ 
+                   
+ 
+ 
+  
+     
+      
+ 
+  
+      
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    
+     
+ 
+ 
+          
+ 
+                                                                                                 
+ & ( & * - - 0 2 0 4 2 9 8 5 6 4 : 4 4 4 5 3 0 / 1 3 2 / , 4 / . - + 1 + . / + ) + / / 1 0 - 0 0 3 . 0 + 0 , . / 2 2 . 0 / 2 3 / 0 + + + - , % ) * . , , / 4 , / * + - & * 0 0 0 0 3 1 4 2 2 . . 3 . / 0 , , 2 2 1 2 2 , , 3 . / 1 1 0 ) , , 0 4 3 / 0 . * + 2 , + / , ( - 1 . 0 6 3 1 3 3 0 / 2 2 5 - - + / . 3 4 / 1 / 1 3 + * - 1 * * ( - * 3 2 / 1 1 3 . + 6 3 0 4 1 1 3 1 0 / , , , 3 . 0 0 , * - * + + ( - , ' , - * * ' ' # & ( ' "     $   # & & ! ! $ "   " !   !  !   "   # # # # # " ! 
+ !   
+ % ! # $ " % % # # # $ " " " " ! 
+ 
+ " " ! 
+ # # ! # ' # # ! $  & "    " !  ' % ! "   $ & " #    " ! ! % & " "  #   # ! # $   "  ! # " " $   !   
+ # !  
+ 
+         
+  
+ 
+ 
+ 
+   
+ " ) * & $ $ & ' ) , & + ) ' % ' ( ' ' ) % ( % $ # #   ! $ !  
+  
+ #    
+   
+   
+ 
+   
+    
+  ! " 
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+   
+ 
+ 
+     
+ 
+    
+ 
+  
+     
+ 
+  
+ 
+           
+     
+   
+ 
+   
+ 
+ 
+   
+    
+  
+ 
+        
+ 
+ 
+ 
+              
+ 
+  
+ 
+      
+      
+    
+ 
+  
+   
+    
+ 
+  
+    
+ 
+  
+ " 
+  
+ 
+   
+ 
+ ! #   $  
+ ! 
+ " "     
+ 
+   
+  
+ 
+  ! 
+ 
+ 
+ 
+ 
+ 
+   
+  
+   
+  
+   
+  
+ 
+  
+   
+ 
+ 
+   
+ 
+                                                   
+  
+                    
+        
+  
+     
+    
+ 
+ ! 
+   
+ 
+  
+  
+   
+ 
+ 
+      
+     
+                     
+   
+      
+ 
+ 
+  
+      
+                               
+      
+   
+ 
+ 
+    
+ 
+ 
+             
+  
+ 
+      
+  
+     
+ 
+   
+            
+       
+                                                                                                    " % & . - . 1 0 3 3 3 6 5 3 6 8 < 6 3 5 0 1 6 3 0 1 - 0 / 6 3 . . 2 1 0 - 1 . + - 0 0 / 3 0 - 1 1 , - + , 1 , + / 6 0 2 3 + 0 ' . 3 / ' ' + , - . / . - 2 1 0 , * ( . + 0 2 / * / 0 2 / 1 2 . , 2 . 0 / * + + 0 / ) ( 0 4 0 1 / , * + ' * , 3 1 / + + * * , 0 2 0 2 . , + - * / 5 2 , 0 0 2 - 6 8 9 1 2 / - , 1 / - 2 / / , ) - ) . , + , . . , 0 / / - 0 - - 0 2 , 6 7 - - + - - . + - 1 / - 0 & * ) + . / ) / % % * , * * & % ( ' % $ 
+ 
+  
+ 
+ % $ # $ % # " ! # " "  !   
+ ! ! " " # "     !   
+ !   !     
+ ! # " !   "  " # $ ! # "   ! !   " ! # " " # ! #    "  " ! !  ! " # $ #     $ $ 
+    
+ 
+ !   % $ % & " ! $ $ " &      $ % ! " ! " "  
+ ! " !  
+   
+ 
+  
+   
+  
+ 
+ 
+  
+     % & ) & & $ ' ( * % $ ( ( ' % ' & " & ( & ' ) & * # $ $ %   
+      
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+      
+ 
+  
+  
+   
+    
+   
+ 
+ 
+    
+ 
+       
+    
+  
+      
+ 
+   
+ 
+ 
+ 
+               
+ 
+ 
+       
+ 
+ 
+        
+   
+ 
+                
+        
+   
+      
+              
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   $      
+ 
+ 
+ " ! ! 
+ 
+ 
+ 
+ " !  $ !    ! 
+   
+ 
+  
+  
+  
+    
+      
+ ! 
+ 
+ 
+    
+  
+ 
+     
+ 
+                                                                   
+            
+       
+ 
+ 
+ 
+     
+    
+  
+   
+      
+   
+    
+ 
+   
+            
+         
+ 
+ 
+ 
+ 
+ 
+  
+ 
+        
+                      
+             
+     
+     
+  
+ 
+ 
+        
+ 
+         
+ 
+      
+  
+   
+    
+  
+ 
+   
+    
+         
+ 
+                                                                                                  
+  $ ) , , . 2 . / 4 8 5 8 7 8 4 6 9 9 0 3 4 - 2 2 + . , , , + - 2 1 2 . , - - + + 1 / 0 3 / 0 0 / 0 * + / 2 . , + . 4 3 2 * ) * . / , ( ( , 0 1 0 / , , + / * * + * + 1 / + 0 + . - / , 2 + * , 1 - + + ) ) - , . , - / . / 0 , , ' - & * 3 . 5 + ( * * * & ) ( / , , 3 ) ' ( , 2 . - - * . 3 2 5 3 - 3 0 1 . . / 1 / 0 , ( + , / * ) , + 3 3 2 + / ) * ) * * , - , - 0 - ( ) 0 . + / / - 0 - , * . , , * , . & % ( * ( % & ( ' ' " #          " ! " $ # %   #   $ # 
+ 
+ ! 
+ 
+ ! $ # #    
+ 
+ !  # ! 
+ 
+   #   
+ # !   
+    ! # # #   
+ 
+ 
+   # ! ! " " #     ! ! " "   $ # 
+ ! ! # " " $     # ! "   
+ 
+ ! # " # & % % $ ' $ ! " ! "   ! $   "    
+ !   
+ 
+   
+   
+    
+ 
+  
+ 
+ 
+ 
+  # ' " % $ ' + * #   $ ( # $ & ! $ - ( # % & ' + * & ' % ( % # # "  
+   "    
+         
+        
+  
+ 
+ ! 
+ 
+ 
+    
+     
+    
+          
+   
+     
+       
+ 
+  
+  
+                 
+ 
+         
+  
+        
+  
+  
+    
+     
+ 
+   
+      
+                 
+    
+ 
+ 
+  
+  
+ 
+ 
+  
+       
+ 
+    " 
+ 
+   
+ 
+  
+ 
+  
+    
+   
+    
+ 
+ ! 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   
+ 
+   
+      
+ 
+                                             
+        
+                     
+   
+ 
+  
+ 
+    
+        
+ 
+ 
+     
+   ! 
+    
+ 
+  
+       
+   
+ 
+ 
+ 
+   
+  
+ 
+                      
+  
+ 
+  
+          
+          
+ 
+ 
+         
+     
+ 
+ 
+  
+   
+ 
+    
+       
+  
+ 
+ 
+  
+     
+ 
+      
+            
+    
+     
+  
+  
+ 
+        
+ 
+ 
+ 
+                                                                                               
+ 
+ 
+ ! ' , ' ' + . . 2 8 : 8 < 5 5 0 . 6 ; 8 3 9 0 3 0 + / + ) - , ) ) + . 4 2 / / . , 0 , - + / . 1 1 2 0 / / 3 3 ) ) ) 1 2 . * + + + / ) + ) 1 / / 2 2 , * + , 1 - + + - / * + + 2 2 - + , . / 0 1 2 / * ( * - / + 3 / / . ( / 3 . ' - - , ( ) . 1 . . - + . * ' ) + ' 0 0 * ( + , - 3 2 ) - 0 1 3 5 2 1 - , 0 / . / 3 2 / - + ( , / / + 1 3 / 1 0 ) * , , * * . 0 0 ) 0 , * ( 0 / / ) ) 0 / * * * ) ) * , + ) * ' & ' ' ) ( $ + ' & * $ #   !  ! " !  # " " 
+    !      
+ #  
+ ! 
+ " ! # "     ! !      $ 
+   & $   
+ 
+ " " " $     ! ! ! ! !  
+ 
+ # ! " #   % # !   
+ " !    " "     $      "    ! "  $ ! $ ! $ $ $ &     ! !   ! ! #   # % ! ! ! !  
+ 
+  
+  
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+ ! % % $ & % ' $ # # * ' " ' ' % ( ( " " % $ & ) ' # " % ) ( ) # $ " "  ! 
+ 
+ 
+      
+   
+     
+      
+ 
+ 
+ 
+  
+ 
+  
+  
+ 
+     
+   
+ 
+      
+  
+         
+ 
+    
+ 
+ 
+ 
+   
+  
+            
+     
+                              
+   
+        
+     
+              
+    
+ 
+ 
+  
+    
+  
+   
+         
+ "     
+ 
+ 
+ 
+ 
+ 
+ 
+     ! 
+ 
+  
+    
+ 
+ 
+ 
+ 
+   !   
+ ! 
+      
+  
+ 
+ 
+ 
+  
+ 
+ 
+         
+                                                   
+            
+ 
+       
+     
+            
+      
+ 
+  
+ 
+ 
+    
+    "   
+    
+ 
+    
+  
+              
+ 
+ 
+     
+ 
+      
+   
+ 
+ 
+       
+ 
+       
+             
+         
+                        
+       
+           
+           
+            
+  
+                                                                                               
+ 
+ ! $ * ) ' + ( - 3 3 ; : 8 ? 5 3 3 6 4 4 5 3 5 , 2 2 1 / . 0 , . - * , 3 4 - - 1 . / 3 + * - 0 - , 0 1 / 1 1 3 2 - , . . , , , . . - . * . ( , 3 0 1 2 / ( ( + / , * , - + + , * 0 2 1 - 0 4 7 1 0 + 3 3 0 0 - 3 + , , . . + 1 / 1 * / + - , - / , , - 0 + ' , + ( 0 + , 3 . - 1 - . / 2 0 / 6 2 3 0 . - , ( - . 3 / 2 0 - . - * ) , - 0 1 / 0 + / , ( * , 3 0 4 / 1 * + + ' ( - + , / ' ( ' ( - * ( , * + ) ) ) ) $ ( ' ( * $ % $ % % %   $ $ $ ! ! # ! ! # " "      
+ # # " " "  
+    $ $ % "   
+ 
+ 
+ 
+ # ! 
+  # & % #    %    # # "   # ' % !    
+ ! # " !   # %   ! ! " "   " " "  
+  % &  # " " % ! $ 
+ # " # $ # #     $ ! $   " ! $ $ ! ! ! 
+   " # !    
+  
+   
+ 
+ 
+   
+ 
+       # ' ( % & % $ % $ & + ) ' $ % % ' $ % % ' ) ( ' # ' $ # % & $ $ & % $ ! 
+ 
+     ! ! ! !           
+ 
+      
+  
+    
+ 
+ 
+    
+   
+      
+  
+   
+                
+ 
+ 
+          
+    
+   
+ 
+  
+ 
+ 
+ 
+ 
+            
+     
+  
+    
+ 
+  
+ 
+   
+ 
+       
+ 
+ 
+ 
+ 
+ 
+ 
+  
+       
+  
+        
+  
+ 
+ " " 
+ !   
+ 
+    !  
+         
+  
+ 
+ 
+ 
+ 
+   ! 
+    
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+   
+ 
+    
+   
+  
+  
+ 
+                                                    
+    
+           
+          
+    
+          
+     
+  
+  
+ 
+ 
+     
+   
+    "       
+       
+        
+    
+   
+ 
+  
+  
+  
+    
+ 
+  
+   
+ 
+   
+ 
+  
+ 
+                       
+            
+                                                             
+                                                                                               
+ 
+ $ # % & ( ) . / 4 1 9 A 3 6 8 ; 5 6 2 0 4 4 4 2 1 3 0 , + / + . 0 - 1 / - - - . / 5 / 0 - 1 1 0 1 / / 1 4 1 / , . - / , , / + / 2 , 1 . / 2 1 / . , / - , . & - + , ) ) . 2 * / , . - . - 0 2 / / - / 2 1 5 0 4 4 , 4 1 - 1 1 / 0 , - - - - - - ( + 0 - . , 0 / - 0 0 / + . , / / 2 4 3 0 2 5 3 5 4 3 1 0 , 3 . 5 4 2 2 * 0 1 / * + , 3 3 . . 1 . . , , 0 0 3 4 0 . , . - ) + - / ) . * & ) ) 3 , * / , , - ) * ) ( ( # ' ' & % % ( * ' & $ # " #   # " " # ! # ! #   $ # $ $ $ !      & & % % ! "   !  
+ #     " ! %   $   
+ ! # " " " & #   ! % ! !    
+ ! " $ " ! # ! " # % $ ! $ $ # #   ! # ' # ! ( " # " % # " & & % $ $   
+   " # $   "   " # " " !  
+        
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   " % # # & + ( & % ) ' ( # & $ # $ % & ! % $ % % % * &  " % ' & ' $ &    ! ! 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+          
+   
+  
+ 
+ "    
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+      
+ 
+ 
+     
+     
+    
+     
+ 
+     
+ 
+ 
+ 
+ !   
+  
+  
+   
+ 
+ 
+      
+  
+ 
+       
+         
+      
+ 
+  
+    
+   
+ 
+  
+  
+       
+  
+      
+ 
+  
+ 
+ 
+  
+  "    
+  ! 
+ " 
+ 
+  
+ !   
+ 
+ 
+   
+       
+ 
+ 
+ 
+ 
+    
+ 
+    
+ 
+ 
+ 
+   
+ 
+     
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+                   
+ 
+ 
+ 
+  
+         
+         
+ 
+          
+          
+ 
+  
+   
+  
+   
+ 
+    
+ 
+   
+     
+    
+ 
+    
+   
+ 
+  
+  
+    ! 
+       
+ 
+ 
+ 
+   
+ 
+   
+     
+ 
+ 
+  
+   
+   
+  
+ 
+ 
+ 
+   
+ 
+ 
+ !   
+         
+                                                         
+                              
+  
+                                                                                                             % & . 1 - + / 3 0 3 : < = : ; : 7 9 5 5 6 1 / / / ) - / / 0 1 1 5 1 - , - / 1 2 7 / ( . / / / . / 0 4 7 0 . 0 1 / . , 1 1 - - 2 2 3 1 0 / 2 0 - + 4 . + / . , - , . * 1 0 , 1 0 - , 0 , * / / - 3 - 1 / 0 0 0 2 1 2 - . 3 0 + - - - 4 , ( - + , - 0 / * + 0 + * - 2 0 , - , 1 / 2 2 5 7 6 ; 8 4 7 1 2 7 4 7 5 6 1 1 5 , 0 , 0 * 0 0 / 1 / 2 4 4 2 - , 1 5 4 0 1 0 1 4 1 . + ) + * 1 , ' ' - ) ) * + ' + ( & . ( % * + % & ) ' + + . & ' #  # % % & & & ' # ! ! % $ # % "   # #   ! ! # % ' & " !  " " "       ! 
+    ! 
+ ! $ % " $ # # # " " $ & # ! " ! " ! 
+   $  "   # # #  "   # # % " " "  ' # # ! # # # " # & $ ' # ! ! " " %       ! " $  ! " % !   
+  ! 
+  
+ 
+ 
+ 
+  
+    
+  
+ 
+ 
+     % % " $ & ( ( ) * ( ( ) * ' * ' & ' $ * ) & ) ' ' # ! % % * ) ( + * ' $ # "     ! !    
+ 
+ 
+              
+     
+  
+ 
+  
+ 
+  
+ 
+   
+   
+     
+    ! 
+        
+    
+         
+   
+   
+    
+     !    
+ 
+       
+  
+ 
+ 
+ 
+  
+    
+     
+ 
+ 
+       
+    
+   
+ 
+ 
+   
+   
+   
+ 
+ 
+        
+ 
+   
+    " 
+   $ 
+ 
+   "  
+   
+ 
+ 
+ ! " 
+  
+ 
+ 
+     ! !  ! 
+ 
+   
+ 
+ 
+   
+ 
+ 
+ !    
+  
+ 
+ 
+      "    
+  
+  ! 
+ 
+   ! 
+ 
+ 
+ 
+ 
+ 
+  
+     
+          
+  
+  
+      
+   
+ 
+ 
+ 
+         
+                        
+ 
+ !      
+   
+ 
+    
+      
+ 
+   
+ 
+ 
+    
+     
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+    
+ 
+    
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+  
+     
+ 
+   !     
+ 
+ 
+ 
+  
+  
+ 
+ 
+      
+  
+ 
+ 
+                    
+     
+                                                                                                                                                                     
+       " & - 0 / 2 2 5 3 9 < : 8 9 < 4 5 9 < 6 7 3 . . , , 1 . / / 3 : 0 0 / / 2 2 1 2 . . 0 3 / 2 0 0 2 2 8 4 2 . 1 3 . 1 . + ) / 0 2 0 5 2 / 6 / 0 ) 1 - 0 1 1 * * , 1 . 2 2 * 0 0 ) ( , , / / ( + , / + . 0 + 3 1 6 5 1 1 / 2 - , - , / * - 1 . / 1 . + , , 1 / + * , * 0 2 0 1 6 5 2 5 : 9 6 8 5 1 3 5 4 1 4 7 5 7 1 1 4 5 3 6 1 1 2 4 3 0 2 4 0 2 1 4 1 4 6 0 1 + 4 4 3 1 / * , * , . ) & , ' ) ) + ( , * ( ' . * * ) + ' ' ( + , - * $ $ ! # " $ ! # & & ! #  # ! # #     $ $ $ !     !   & # # ! $ # " # ! " ! " $    " 
+ # % ! $ 
+ & ' # ! $ " " ! "   & % !   ! # " ! $  # " ! # # "  ! # #   # # "   ! # " ' " & $ % + % # ! " " & " # $ " ! ! $ ' ! " "    %    
+      
+ 
+ 
+  
+  ! 
+       * & $ ' ( ' $ ' * ) , - / - , ( + % ) + * % ( ) * $ $ % % " $ + ' % % ( ' " $ " ! !  
+     
+ 
+        
+      
+    
+     
+   " 
+  
+  
+   
+    
+           
+  
+  
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+     
+  
+ 
+ 
+ 
+        
+ 
+ 
+ 
+  
+ 
+        
+ 
+      
+   
+  
+ 
+ 
+  
+   
+    
+        
+ 
+ 
+ 
+    
+ 
+  
+ 
+    "     "  
+ $ #   
+ 
+  $ " # #      !      
+ 
+ " $ # " $      
+ 
+    
+       
+  
+  " !  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+       
+ 
+         
+            
+     
+ 
+       
+                 
+ 
+       
+ 
+ 
+   
+    
+  
+ 
+ 
+    
+  
+ 
+  
+  
+ 
+     
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+    
+    
+  
+ 
+     
+ 
+ 
+  
+ 
+   
+   
+ 
+ 
+  
+   
+ 
+  
+  
+ 
+ 
+ 
+ 
+     
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+                                                                                           
+                                                                                                   
+ 
+ " ' $ & ( 0 / 2 . 5 8 3 9 < < : 9 7 5 5 9 4 3 / - / 0 0 1 / - , 1 1 1 3 1 1 3 5 4 0 , 0 7 1 . 3 0 1 4 4 2 - . 1 + , , / 1 - + 0 0 0 3 2 0 , 0 + . , - - / - 3 + ) . . / - 0 * + 1 , . 3 / , . . - . 3 4 2 0 . 0 * - / 3 0 0 2 4 4 2 1 2 - 1 - 0 ) / , - + . - - - * 3 - 2 8 5 1 2 . + 5 7 7 5 7 1 6 4 : 7 6 2 5 5 6 5 4 3 9 4 5 1 2 5 5 4 4 4 2 2 / 0 4 0 4 1 . 3 . 4 4 2 2 / , + . . , . + - + , + , ) , ' + ) , . , + + , + - ) * ) & # " " & % $ " ' % # # $ %   ! # % ' # " $ ! ! " $ # 
+ ! $ ' # " " " % % " " 
+ ! $ ! % "   ! " $ ! # # # & & "   " % !   & ! " ! " # ! % ! 
+   ! $ #   " ! # " ! # $ " !  ! " $ ! # $ ) * ' ! ! # " ' $ % #   ! " % $ & $ "   
+ 
+ 
+  
+ 
+   
+ 
+    
+   
+  
+  $ ' + ) ) ( ( " $ ' ) ) * ) ( ( ( & ( % " & % ) ' ' # $ % % $ $ ' ' % ) & % # $ $ #   
+   
+   
+  
+ 
+               
+ 
+ 
+ 
+ ! 
+ !    
+   
+     
+ 
+             
+        
+ 
+   
+ 
+     
+   
+     
+ 
+  
+ 
+      
+ 
+ 
+ 
+         
+ 
+ 
+  
+  
+  
+  
+  
+  
+    
+ 
+   
+  
+ 
+      
+ 
+ 
+ 
+  
+  
+ ! ! 
+    
+ 
+ 
+  $ ! 
+ 
+ $ ! 
+ 
+ 
+    #  ! 
+ 
+ " # !   
+ " 
+ 
+ "          
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+   
+ 
+   ! ! 
+ 
+ 
+ 
+ 
+  
+    ! "   
+                   
+ 
+              
+ 
+ 
+  
+        
+           
+ 
+ 
+     
+ 
+   
+ 
+ 
+    
+  
+   
+ 
+  
+ 
+ 
+  
+   
+ 
+    
+  
+ 
+ 
+   
+ 
+ 
+     
+ 
+ 
+ 
+           
+  
+    
+ 
+  
+  
+ 
+  
+ 
+  
+ 
+ 
+ 
+   
+ 
+   
+       
+  
+ 
+   
+ 
+ 
+  
+ 
+ 
+  
+                                                                                                                                                                                                 # & ) ) 2 1 3 2 5 9 4 5 9 7 B ? : 3 4 4 0 2 3 2 . + / - . , 0 1 / 2 - * 1 2 / 1 + - 0 2 . 0 0 1 2 1 . , . 1 / . * % * . 2 + / - 2 3 - / * * * * - . . ) , + . / , + + ( / , / / . - 2 1 0 / . - + 2 . 0 2 / , . . . 1 / 0 2 0 0 / / 1 . . , - 2 0 - ) + & * - + + . 3 5 9 6 5 1 / 0 8 8 7 8 9 7 : 9 7 5 1 1 3 - / 3 0 1 4 3 3 / 3 3 4 3 4 7 < 0 / 3 6 3 1 0 0 4 1 0 4 1 5 7 - 3 2 ) / / 0 0 - / , / 2 - * - + * , * ( ' ( ( & & + ( * ' # & $ # " !  $ ' % " " " !   " & $ 
+   # ! " !   
+ " ' $ " # #   !    " " ! "   
+ #  
+ !   !   ! # ' & #   $  ! $ !     # #   % " "      
+ # " %   ! # $ % ' " " # ' $ 
+ " " $ ' & & '  & # $ !   ! #   $ ! $ &   
+ 
+ 
+   
+ ! 
+  
+ 
+    
+ 
+  
+   " % % ' ' * * ( & # % * ) * ' # & * ( ( ' # # ( $ $ % & & * ( & $ & ' & * % % $ & % $    
+   
+ 
+ # # 
+  
+   
+ 
+             
+   
+   
+ 
+ 
+  
+  
+  
+ 
+           
+  
+            
+  
+    
+ 
+ 
+     
+   
+ 
+ 
+   
+ 
+ 
+ 
+   
+     
+    
+ 
+  
+ 
+ 
+ 
+ 
+        
+ 
+   
+ 
+   
+  
+ 
+ 
+ 
+              
+ 
+  
+  
+  
+ 
+    
+   
+    
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  $ ! " ! 
+   ! ! 
+     !  
+    
+  
+   
+  
+  
+ 
+ 
+     ! 
+  
+ 
+  
+ 
+  
+ 
+    
+ 
+ 
+ 
+                 
+        
+   
+               
+ 
+                 
+ 
+ 
+         !   
+  
+  
+ 
+ 
+  
+   
+   
+       
+ 
+ 
+ 
+ 
+      
+   
+ 
+    
+ 
+      
+ 
+    
+     
+   
+ 
+  
+   
+ 
+ 
+     
+         
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+                                       
+                                                                                                                                                        
+   # $ % ( / 1 4 9 7 3 ; 5 9 9 < < ; 5 9 4 0 3 0 / / , 0 . 0 / 2 - . 0 2 - - 3 2 / 0 5 . . + 1 , / 3 1 - - 1 0 1 4 . + * ) * - - * / 4 - , / , ) * * + . ( / ( / 3 * . + ( + , + * * , / 4 3 3 - / , . 3 2 , , * * / 7 0 2 2 1 - 1 , . / - , + - 0 , * + ( ) 0 - + . 1 5 0 6 5 5 2 . 3 6 5 5 2 5 5 6 3 4 3 0 0 5 3 0 1 3 - - 1 1 0 4 2 5 7 2 6 5 2 / 2 1 4 0 . 3 5 1 3 5 7 0 0 2 2 / 1 2 4 2 . - + / 0 4 2 0 * ) ' . , - ) * ) , + * ) / ) ' & % & # &   " ( % %   ! 
+ "   " 
+ # ! ! ! "  
+  $ # # " ! "    " " #    #   
+     " # #   ! # $ # $ ! %  
+  # !   "     " # $ #   
+ " # ! ! 
+       # # # " " % "    " " % ' $ % # ! $ ! # # ! "   " " # ! ! ! 
+  
+    
+    
+ 
+  
+ 
+    
+   # # ' , + - ( ) * ) ) " % ' ' * % ) ( % % ' ( * ( & " % $ ) ' # ' % % $ ( # ! " $   # ( !   # "   
+ 
+    
+  
+           
+      
+  
+ 
+  
+  
+ 
+    
+   
+ 
+         
+    
+ 
+    
+  
+ 
+      
+  
+  
+          
+  
+ 
+         
+    
+           
+   
+ 
+ 
+        
+ 
+ 
+ 
+     
+ 
+    
+  
+ 
+ 
+  
+ 
+    
+ 
+     
+    
+     ! 
+ 
+  
+ 
+ 
+ 
+ " $  ! 
+ " 
+ 
+   !    
+ 
+      
+ 
+ 
+   
+   
+   
+ " 
+ 
+ 
+ 
+ " 
+ 
+    
+          !    
+               
+         
+                
+     
+    
+ 
+       
+ 
+ 
+ 
+ 
+    
+ 
+   
+     
+             
+           
+    
+ 
+ 
+ 
+ 
+   
+     
+   
+ 
+ 
+     
+  
+   
+ 
+ 
+  
+    
+ 
+  
+ 
+ 
+           
+ 
+     
+ 
+  
+ 
+ 
+ 
+                                    
+                                                         
+                                                                                                  ! $ $ # ' 0 1 2 5 9 4 : 5 6 3 = > 5 2 3 3 4 4 5 2 0 , 1 0 - 0 / . / 4 2 0 1 6 7 0 / 0 3 0 * + ' * - / 0 0 / 1 1 , 1 . ( ) / . ) * 2 2 - , - ) , ) ) * * * - 1 + 1 + , * * , ) , , - 2 5 1 1 1 . ) , . , / - ( 0 1 - 1 . / ) - * + * * 0 . ( ( ( , + 0 ( * + . - 0 . / 7 0 1 8 2 5 2 4 3 0 3 7 3 7 4 5 2 4 2 / 5 5 0 1 5 2 3 5 2 3 1 , 6 9 7 5 2 4 0 2 2 0 2 3 4 3 0 / 4 7 3 5 6 0 0 1 - 0 2 0 , * 1 3 5 0 + ( ) + + . / . 1 ( * ) ( ' ' ( + ! 
+ % $ % ' ! ! $ $   ! ! $ ! "    " $ ! #  " ! ! ! " " $ !   & $ $  ! " 
+   "  #    
+ # #  
+ ! #        ! 
+ # $  $ & ! 
+ 
+  " " ! ! " # ! %  
+   " $ "  $ " " ! "  
+ 
+ & " ! " % "   # & # " $ $ # # 
+   
+ 
+ 
+    
+   
+   
+  
+    
+ !   # ) ( ( ' ' - ( + + ) ' ) & ' $ ) ( ' # % ' % % ' "  $ ' + ( ' & " ! % $ % " ' ' ' % # & $ ' ! 
+ 
+ 
+   
+  
+ 
+                     
+ 
+ 
+      
+    
+   
+                         
+ 
+    
+    
+    
+ 
+  
+ 
+              
+         
+  
+ 
+        
+ 
+  
+ 
+    
+ 
+  
+  
+ 
+   
+ 
+ 
+ 
+ ! 
+ 
+   
+  ! !   
+       
+  
+  
+  
+  
+  
+  
+ 
+      
+    
+  ! "    
+  
+ 
+ 
+  
+      
+  
+ 
+ 
+ 
+     
+      
+ 
+ 
+                           
+ 
+                                                           
+      
+ 
+ 
+   
+ 
+   
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+  
+ 
+ 
+   
+        
+ 
+ 
+       
+     
+  
+    
+   
+    
+         
+ 
+                 
+                    
+         
+       
+        
+                   
+               	                                                                                                
+ ! # # # + / , 1 2 4 5 < = 7 1 6 4 3 2 1 4 6 4 8 1 1 - 2 - . / 4 / 4 0 1 / 1 : 1 5 0 5 / 0 - ) + , * 3 / , . - 0 / 2 ) ' - . + ( - . ' / . , , - * . * ) - * , . 0 , . . - * . 0 - - . 2 3 4 ( + ) ( + - / 0 , - , , 0 - , , 1 / . . , . . - + ( ) . / ) ) - + . / - - 1 5 0 4 . 3 5 3 5 1 0 4 : 5 2 6 6 6 8 0 0 6 / 1 / 3 3 5 2 3 . 0 2 5 : 7 0 1 5 3 . 7 8 5 2 / 0 0 0 3 / 0 / 3 6 . . . / - 3 , , / 5 , & ( ) - ) , 0 2 / - + . ) , ' & ( % # ) % $ " " ! % #   $ % $ $ $ ! ! # !   
+ # $ $   ! ! ! !   $ " 
+ " !       # 
+  ! 
+ ! " "   
+ " % !    
+ 
+   $ %   "   !     
+   " & ! # # % ! 
+ 
+ 
+   
+ ! # % # ' " "   !   " " "  $   "  " " 
+ # # ! " !   !       
+ 
+   
+    
+ 
+  !  
+ " # * - * & + ) ( $ & ( * % & ' & ! # # $ ' % & ) $ " % % ) ( $ $ % ! % # " ( % ' % % # & $ #   
+ 
+ 
+ 
+    
+ 
+    
+  
+               
+  
+         
+ 
+   
+     
+  
+         
+           
+           
+ 
+       
+          
+     
+  
+ 
+   
+    
+   
+  
+  
+ 
+ 
+ 
+ 
+          
+    
+ 
+  ! 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ ! "  
+ " 
+  
+ 
+   
+ 
+  
+   " 
+  
+      !  
+ !   # 
+ 
+  
+   
+ 
+ 
+ 
+ 
+  
+   
+    
+     
+                              
+     
+   
+                                  
+         
+     
+          
+ 
+   
+ 
+ 
+  
+ 
+ 
+   
+       
+ 
+  
+  
+ 
+ 
+  
+ 
+ 
+          
+ 
+       
+          
+     
+ 
+       
+  
+                     
+                    
+        
+     
+  
+         
+         
+ 
+                                                                                                                        
+ ! # $ . + + , 4 7 8 > 9 7 7 9 7 2 6 3 1 1 1 4 7 3 2 + , , 0 1 0 2 / 0 - . / - 4 , 4 2 / / ) * - - , , . . 2 . 1 - ( ' * - , ( , . ) ' * , / . - . . * * - , , / 4 1 . / - - ) . ( ) * - - ( . - ' , 0 1 0 0 / + , 1 / 0 . 4 2 + + ) - - , ' + * + , + + , * * , - - . . 0 , . 3 . 4 4 . . 6 6 9 4 9 4 / 2 / 0 0 8 5 0 3 3 . 3 1 / 0 / 5 5 4 . 0 3 / 3 : 7 : 6 8 5 - 2 3 1 6 3 4 3 0 0 1 4 / 4 - - - 3 , - / + ) ) . + 1 - ) ( * + , ) ' ' " % $ $ ( # ! ! # " " # & $ % # ! ! " "    " $ " # # "    
+        
+  "   "   # # #   
+ "  "  ! & " $ !   !  ! # #   
+ " # ! # ! " ! ! ! " $ 
+     ! 
+   
+ " !   
+ 
+ 
+   #   ! !   " ! 
+ 
+ % ! ! "   % $   #   
+ 
+    
+       
+  
+ 
+   
+ "   & & ' ( ( ) & * ( ) ! ! & ( # % # % " # $ $ % " $ & $ $ ) & ( " " ' & % " & ( % $ ( # # $ !    #   
+ 
+   
+ ! 
+      
+                        
+    
+ 
+    
+            
+      
+    
+ 
+  
+  
+       
+ 
+  
+  
+ 
+     
+  
+         
+ 
+            
+      
+        
+           " !  
+  
+  
+    
+ 
+ ! 
+ 
+ 
+   
+     
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+    
+  
+   
+ 
+    
+ 
+  
+     
+  
+                           
+                                       
+            
+   
+        
+ 
+ 
+     
+     
+  
+  
+    
+ 
+ 
+   
+     
+  
+ 
+ 
+      
+                    
+    
+ 
+ 
+  
+    
+                  
+ 
+        
+                  
+   
+ 
+                    
+            
+     
+    
+   
+                                                                                                         
+ ! # # ) ) ( + - 1 7 8 ? < ; 9 ; ? 6 7 5 3 3 2 3 0 / 3 * - , , 0 , - / . 0 3 / 0 2 + . 1 . 2 , , , - / . - / ( * - * * - ( + + ) - / , 1 1 * 0 0 / 0 / / + - , 0 - . . . * . * ) ) & , ' * - ( , * ( ( . 2 0 . . , / ) + . - + 0 * - , + ( ) + 0 - ' & ( ) + ( + . * * * . ) , - - 3 0 0 1 1 3 : 9 4 7 8 6 7 2 1 4 / 2 1 7 1 0 4 4 2 4 1 5 4 0 / 6 / - 1 7 5 9 9 3 - 1 3 3 / 0 0 / 3 - ( + 7 2 3 / - - 0 0 . * * * + . 0 * + % + - ( - * ) $ " % " " ! ! ' % ( " # # #   & $ $ " ! "    #  " ! $ #   ! 
+ 
+ # 
+   
+ 
+  
+ 
+ 
+ 
+ ! # $ $  "  
+   " # % % ! ! 
+   $ ! "  $   # " $  ! "       " " #   
+   "   
+ 
+   " 
+  
+   # " !   # 
+ $ ! ! & 
+ $ % " ! ! # 
+     
+         !   
+ ! # ' % ' ( ) ) % ( ( ( ( $ % )   ! # $ # # ( & " # ' $ " # # ) ' ! # $ ) # ! ' & $     " # & % & & #  "         
+                        
+   
+ 
+   
+ 
+        
+           
+   
+     
+ 
+ 
+ 
+    
+    
+    
+ 
+ 
+ 
+                                
+ 
+     
+ 
+   
+          
+ ! "  " 
+ 
+  
+   
+ 
+ 
+       
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+ 
+  ! 
+ 
+ 
+    
+ 
+ 
+  
+     
+  
+   
+ 
+ 
+ 
+           
+               
+                 
+                                                    
+           
+        
+ 
+   
+ 
+ 
+        
+ 
+                 
+ 
+                       
+  
+ 
+  
+  
+             
+ 
+                 
+   
+  
+               
+  
+              
+      
+     
+ 
+  
+        
+     
+ 
+ 
+                                                                                                 ! % ) ( ' ( - - 2 : < = 8 > 8 8 = ; 6 3 2 0 / / , - / - , . + 1 - , - + - , 1 0 - / - , / 1 . / 0 3 1 - / 1 ) , + * - * + ' + / 1 2 0 1 , * + 1 / . 2 / . , - + / . . 1 - - ' + ' % , ) - 0 - , ( ) & ' - 1 , - * , * , ( - - 5 + ' + * * % * ) ' ) ) ' + * ) ) ) ) . + , - 2 0 0 1 0 4 2 1 0 < : 9 8 7 4 3 1 / 1 1 0 4 5 3 2 6 2 0 1 4 . . - 3 7 1 2 3 3 7 3 2 4 3 6 7 6 2 1 , , 2 1 + , 1 2 0 - , - . 1 0 * + ' ( ' + + * ( * * ( ( ' $ " 
+ ' ! $ !  ! % " ! #   # ! ! ' !   # ! !       ! !    "       "    
+     #   # "   
+ 
+    
+   % ' " % ! # 
+  " "  ! !   #       "  
+   ! !  # ! 
+ ! " " 
+    ' % $    
+ 
+  
+     ! # # "   " 
+ 
+ "     
+ 
+ 
+   
+       
+   # ! % ) " * , ' $ ' ( ' * * ) $ # ' "   % ' ' ' $ ! $ # ! $ " $ & ( # # & " " ) % & % !    # $ $ " ! !   " 
+ 
+                                 
+   
+                                  
+ 
+       
+  
+   
+  
+   
+                      
+                      
+  
+ 
+  "        
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+    
+ 
+   
+ 
+ 
+ 
+        
+ 
+        
+ 
+           
+         
+                                
+                                
+             
+      
+     
+      
+                   
+    
+ 
+                      
+      
+ 
+ 
+ 
+       
+            
+ 
+ 
+   
+ 
+ 
+ 
+   
+      
+   
+   
+ 
+ 
+ 
+   
+   
+ 
+     
+ 
+        
+ 
+             
+          
+       
+                                                                                                
+ 
+ " % ' & ( + 1 7 8 9 7 ; : ? 9 > B 7 4 9 7 3 / - , . - ) - * 0 / , / , - * + / 6 4 0 / , + , 0 6 1 - - / . 1 . - ) . ) 1 0 0 . + / * 1 , + / . 2 + , 2 4 / / / . . + . 0 + ) ( ) & ) + - ( & * + * ( * , , / 0 - ) ( , ( * ) , + ( ) / + , + + * % ( ( ' % + , ( ( + , * ) . * , , 1 / 3 1 0 6 7 < 2 4 2 3 1 0 4 1 0 3 1 + 1 0 0 2 0 2 1 2 1 1 5 9 6 1 4 6 6 1 8 < = 2 5 1 2 - 1 1 4 3 2 - + . / / / ) + - * ' ) ' ) ) + ) - ( - % $ ' $ $ " " !     #  " % # # 
+ 
+   # $    
+ 
+     
+   !     # # 
+ 
+ # 
+ 
+   
+ 
+ 
+ ! # " 
+ 
+   # # # 
+ 
+ 
+ ! # % "   " 
+ 
+ ! !  
+  # & "   
+ ! $   
+  
+    
+ !    ! !            ! 
+ 
+      " $    
+ ! %  
+ !     
+      
+ 
+       
+ 
+  ! ! ! % & ' - * ( * % ( ) ' ' ' ' % ' # # $ ' & ' ! " & % # $ $ ( % # $ % % $ & ) ! $ ! $ % #   # ! "      #     
+   
+                                      
+    
+   
+      
+                 
+      
+ 
+   
+ 
+  
+ 
+ 
+ 
+                       
+                      
+ 
+  
+ 
+     
+ 
+  
+    
+ 
+   
+ 
+   
+  
+ 
+  
+  
+ 
+  
+ 
+  
+ 
+  
+ 
+   
+ 
+   
+  
+       
+ 
+  
+          
+          
+                                                      
+                        
+        
+      
+      
+   
+                 
+          
+ 
+                
+  
+ 
+ 
+       
+ 
+  
+             
+      
+ 
+ 
+    
+  
+   
+ 
+ 
+   
+  
+  
+  
+ 
+         
+   
+   
+   
+         
+       
+      
+    
+   
+ 
+   
+ 
+  
+  
+                                    
+                                                            
+ " " & , * . , / 4 4 8 : 8 9 < : ; ? 7 6 3 1 3 0 - 0 / 0 . + . 1 - ) / / ( , ) 0 3 2 . , , * , / 2 , ) / 0 - - 2 / , 2 ) , 2 2 0 0 - / / + / 3 1 2 , . 1 2 3 3 / ' ) * ) + - * ) ( * , + / ( ) * ( ) + . , * . . * - ) % ) ) & ( ) ( ' + , . . * + ) ' - ) + - + ( ) , ( - . . + , - . . 2 1 2 5 0 1 2 0 1 2 . , . 4 7 2 . , / - / 1 2 5 1 - / 0 6 6 5 1 / 2 8 8 ? 8 7 9 5 3 2 0 3 2 2 1 + - / 0 1 0 2 0 , + . * ' & , - - , + * ( % " & $ # " " * " # "  ! # $ $ !        $ " ! !  
+ !  ! # !   ! !     #  
+ 
+  
+   " !    ! " $ ! # " ! $ $ ' $      "   " !  
+ 
+ $   $   
+  !    ! # #    ! 
+ " ! # "   " 
+  
+ !    
+   # " # ! 
+   
+ "  "   !  "   
+   
+  
+      
+  
+   ! ! # $ * * + ) # % % ) ) ( ' & & & " % ' % & # " $ " $ ' # " + # * # & ( * ' & & ( & $ $ & # $ $ #   $ !  ! 
+ 
+ !   
+            
+                       
+      
+ 
+           
+      
+ 
+     
+    
+    
+ 
+ 
+    
+  
+ 
+ 
+ 
+     
+       
+         
+  
+       
+ 
+ 
+  
+    
+     
+ 
+ 
+ 
+  
+  
+ 
+ 
+      
+    
+    
+    
+  
+ 
+  
+ 
+  
+        
+  !     
+ 
+ 
+   
+  
+    
+ 
+ 
+  
+ 
+     
+   
+                                                                                
+ 
+       
+    
+     
+         
+ 
+       
+   
+ 
+    
+     
+                              
+    
+ 
+   
+   
+  
+                 
+    
+     
+   
+         
+         
+     
+   
+ 
+ 
+   
+           
+ 
+ 
+     
+    
+   
+              
+                                                                                               
+     ' ) ( ( + / 2 6 8 5 > 7 : 9 ; 9 ; 5 8 3 6 2 3 0 - . . 0 / 2 / , * , , , 3 / . . 3 - , / + 0 / 2 - , , / + . 1 0 ) 2 , - / / . 1 1 . . / - - 1 - 4 3 + 4 6 - - ( ( / ( ( * + ) * . 2 / - * ) ) + , + , * 1 ) + . / ' * * ) * , , ' ( * . . 0 * ) ' + - - , , , * - ) + / . + + ( - 3 . - 2 4 5 0 - 1 1 4 5 0 1 1 8 2 3 - . / 0 5 5 1 2 1 , 2 3 < 8 : 5 5 : 6 7 ; 4 4 6 4 4 2 3 6 2 4 8 4 1 2 / 1 / 4 5 1 , ( ( ( ( , 1 - + . ) ( " ' , ) $ & ' & " # " " '   $ $ " & % " ! % # #   " # # # " # " $ $ % " ! 
+    " 
+ 
+ " %   ! # $ 
+   # ! ! # " # #   "    $ $ ! % $ " " # !  # ! " " " $ #   
+  
+  " # " " !  
+ " 
+ $   
+ # ! $ ! % $ !   " # ! " ' $ $ " ! #  
+   
+ 
+   
+ 
+   
+  
+ 
+   
+ ! $ ' ( + % , # % * + , ) $ ( $ % ' ' * ) ) ( $ & ' $ ' $ ! # & ' % ' ' ' ' % " ' ' $ $ $ # & # " " # ( # $ $ ! 
+ 
+    
+        
+      
+                 
+      
+ 
+  
+         
+         !  
+   
+ 
+      
+  
+    
+  
+  
+ 
+       
+     
+     
+ 
+ 
+  
+  
+   
+  ! 
+        
+    
+    
+ 
+ 
+  
+  
+ #   "  
+ 
+ 
+  
+ 
+ 
+  
+ 
+ # 
+ 
+ "    
+ 
+  
+    
+  
+ 
+  ! 
+ 
+  
+ 
+ 
+ 
+  
+   
+  
+  
+ " ! 
+   
+  
+    
+ 
+      
+                     
+                                         
+          
+   
+     
+ 
+ 
+   
+      
+  
+        
+            
+ 
+ 
+   
+    
+     
+ 
+   
+ 
+ 
+   
+ 
+ 
+        
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+    
+    
+  
+          
+                                            
+             
+ 
+            
+        
+  
+       
+                                                                                                " $ $ & % ( - . 5 7 9 > < > ; 7 ; 9 : 9 ; 8 4 1 1 5 3 - 0 . 4 3 2 0 , 5 3 1 2 2 / 3 0 1 - 2 3 4 1 0 2 - + , , / 0 / / 3 / 4 . 0 2 4 0 0 / / / - / 5 4 1 / 1 + - + * ( ' ( * + - 0 , * - / + - , , / - + ' . 0 - , . , / / * + / - / , 3 , + . 0 . - - * 0 , * ' . . 2 . 0 + - , , * / 0 * - 3 1 3 3 / 1 2 / 5 3 2 2 6 2 0 1 4 3 2 5 8 7 9 1 - 2 6 9 8 4 4 4 6 5 6 4 8 0 0 / 2 6 4 3 / 1 5 - 3 - . 1 , - - * + ' ( ) , + + + - ) ) + * * + * ' & $ ' % %   ) & & ' & " % " '    "   #  $ # $ ' $ # # 
+ " %  " " "      % $   " $ ! $ $ # "      # & "   
+ ! ! # # " " # ! #     ' #   %  
+ # " $   $ '   " 
+ " " 
+ ! " 
+ #   # $ # ' # # ! !   " " &   % ( # " #  
+ 
+ 
+  
+   
+ ! 
+     
+     #   % ( ( ' ( ( & & * + - ) ( % ' ) % & , ' * % ' ' ' % $ "   $ % ' & ( ' % ) # ' ( ' ' % ( & $ ! ! % ' ' # # % ! ! !   ! 
+ 
+  
+ 
+            
+     
+           
+     
+ 
+       
+  
+     
+    
+ 
+ 
+ 
+ 
+  
+   
+  
+ 
+   
+    
+  
+  
+ 
+     
+      
+  
+ 
+  
+  
+ 
+     
+ 
+ 
+   
+     
+     
+ 
+    
+  
+ 
+ 
+  
+ 
+ ! 
+   
+    !       " 
+       
+     "   ! 
+  ! !  
+ 
+ 
+ 
+     ! 
+  
+    
+        ! 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+    
+ 
+  
+  
+ 
+      
+           
+              
+     
+                  
+         
+      
+       
+  
+ 
+  
+ 
+      
+ " 
+       
+ 
+   
+     
+ 
+ 
+ 
+   
+  
+ 
+ 
+   
+      
+ 
+ 
+ 
+ 
+  
+   
+           
+  
+ 
+ 
+ 
+  
+ 
+ 
+    
+ 
+  
+ 
+ 
+ 
+ 
+         
+                                                               
+       
+ 
+                
+                                                                                                
+ " ( & ) . . . 1 3 7 : > ? A < < 5 8 8 ; 7 < 8 1 2 1 2 5 / 4 0 4 0 / 3 4 - 2 2 0 4 1 / , / . 5 0 4 2 - 1 1 , . + - 1 1 / 4 7 3 - 3 1 1 / 2 0 - 2 5 3 2 3 / 0 . 0 + - + - - + + . + 1 1 1 , 0 2 / / * , 1 3 2 , / - * 2 2 - - 3 , 0 / / 0 / & + - , . - - . * / 1 1 0 4 / + 1 1 0 1 / 0 6 1 0 3 5 5 . 0 0 1 9 5 1 0 3 5 4 2 7 4 7 2 2 6 6 1 3 1 5 8 9 5 1 1 1 0 2 0 8 3 3 0 - 3 1 4 1 1 1 , / 1 - / , , - - 1 - ) & - , ) ( + & / , ) , * ) ( ' % ' ( " " % * % * ( $ " $ $   $ % $ ' % %   ! ( " !    " % #  ! $ # $ ! # " ! ! $ " # $  ! $ ! $ ' % ( $  " # " " " $ # "     " ! " ( % # !   " # ! $ ' & $ $ !  " % ! % !   " # # " $ % " # $ ' " 
+ " " # %   # " ! !  
+  
+ 
+    
+ 
+ 
+ 
+  ! # % & # ) * * , ( ) + * ' * . ( ' # % % & ' * ( % ) * * ' % & # ( ( % ' * ( % ( ) ) ' ( ' ) ( " $ ' & $ + ( ( & ' # % % %    
+ 
+   
+  
+   
+   
+    
+ 
+ 
+   
+      
+         
+ 
+ 
+ 
+   
+  
+  
+ 
+   
+   
+     
+  
+ 
+ 
+ 
+ 
+ 
+       
+      
+ 
+ 
+      
+   
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+   
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+    
+ 
+ 
+ 
+ 
+ ! 
+ 
+      
+ # ! "     !  !  
+ " #  ! !  
+ 
+     
+  ! # 
+ 
+ 
+   ! 
+ 
+       "   !    " 
+ #  
+           # 
+ 
+  
+   
+          
+      
+          
+         
+ 
+ 
+         
+            
+  
+    
+    
+ 
+ 
+ 
+ 
+   
+ 
+     
+ 
+ 
+ !   
+   
+    
+  
+         
+ 
+   
+ 
+  
+ 
+  
+  
+    
+ 
+  
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ " 
+    
+ 
+  
+    
+ 
+    
+      
+  "  
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+                                                                
+                                                                                                                              
+  
+  " ' , ) . / 2 5 7 9 > > > ? ; < < = : 9 9 = 7 4 4 5 4 3 - 2 2 4 . 1 4 1 0 3 3 . / 4 / 0 / / 2 2 5 4 4 7 6 0 4 2 2 4 * 0 1 3 . . 5 3 1 4 6 2 / 0 4 . + 2 3 4 3 . - 2 + / 1 ' 0 0 1 1 3 0 / , . - 0 - , 2 2 . 0 2 0 1 3 3 3 1 3 + / 0 / 1 , ) 0 - * . . / 3 . / 1 - , 1 1 5 7 7 7 0 3 2 1 4 2 6 2 0 1 4 2 1 0 . 3 2 3 4 3 - 4 5 6 . . 4 7 7 3 8 8 6 2 1 5 9 4 3 1 / 4 5 1 - 1 - 4 2 7 0 - - / 2 , 0 . - / . 6 . 2 . / + 3 1 * + , ( * 1 0 * * * $ $ $ $ ) * * ( $ & $ % ! % & ' * & ( ( ' $ ! & "     ! ! " # ! ' ) % ) & $ " $ ! " # " " # ! # ! $   & ' & " % # ! $ % ( # & # " # ! # ( $ % % ! % ' ! ! % % # ' ' $ " # % $ % " !     !   " ( ' % ! " ! ! " % # % ! # # !   ! ! ! 
+ # 
+ 
+ 
+ !   
+   ! 
+ ! , % % ' . / ) ( / , * * , / , ( ) ( + % ' ( ) + & ' ( ' ) + + . ) $ # ( ( ) ) * ) % + ( , * ' ' ' ) & ( , ( ) & $ % # #    ! !    
+    
+    
+ 
+ 
+ 
+     
+           
+   
+ 
+   
+  
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+ 
+    
+ ! 
+ 
+  
+  
+ !    
+  
+ 
+ 
+   
+ 
+ 
+ 
+   
+ 
+    
+ 
+      
+ 
+ 
+ ! 
+      
+      
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+       
+  
+   
+ 
+ 
+ 
+ ! $ !       ! 
+ # # ! %   " " !      
+  
+       
+ 
+ ! ! %  !    " ! "  ! 
+ ! 
+   !   !  
+ 
+  
+ "    
+ ! # ! " 
+    
+  
+     
+   
+   
+      
+    
+ 
+   
+ 
+    
+    
+  
+  
+   
+  
+   
+     
+ 
+   
+     
+   
+ 
+  
+ 
+ 
+ 
+   
+ 
+ !   
+ 
+ 
+ 
+ 
+   
+ 
+   
+  
+   
+  
+  
+        
+  
+      
+ ! 
+ 
+   
+   
+ 
+ 
+   
+   
+     
+ 
+ 
+ 
+ 
+  
+    
+  
+  
+  
+  
+  
+ 
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+     
+  
+ 
+  
+   
+                                     
+                                             
+                                                                                                           
+ 
+   # ( % , , . 0 4 5 4 ? C ? : > < ; 9 9 6 4 8 5 1 4 3 / 1 . 1 6 3 / 1 5 4 3 4 / 0 2 1 6 6 1 - . 0 0 4 3 3 7 2 1 8 5 0 1 2 2 4 7 4 6 5 2 4 5 0 1 + - , - 1 7 3 0 / 1 0 1 1 / - 0 0 3 3 / 2 . 0 * 0 / 0 2 6 7 1 6 2 . / 0 3 1 4 0 + 0 0 / / 0 2 / . / - 1 / 0 0 / - 5 / 2 1 9 2 9 9 1 2 2 2 / 5 5 2 0 5 4 1 0 2 2 1 3 2 5 / , 0 3 4 / 1 5 5 6 8 7 3 < 6 2 6 6 5 6 3 2 5 1 - . 3 / 4 5 5 / 0 1 + - 0 2 + - , / 0 2 1 * 1 - ( + ) + , * * , - & - - ( # # ( ' ' + + & ) & " " ) & % %  ( $ %   # ' $ ! ! $ $ ! # % ' $ " & $ ' ( % ! " % %   ! " # $ ' " # ) ( # ! " # ' ! # ! " $ # & "   % # ! ( ' ) $ " ! $ ' % & "   & # % $ # $ " " " ! $ $ # ( " ' ! " # $ $ # # # & #   
+ 
+ 
+   " 
+ 
+ 
+ ! ! 
+ 
+ !  % % % ' * + 0 ' & - , & % ) . + ) - ' % % + , , ) ( & . - & . ( + & % & # $ % ( ( , & $ % % ) ' ' & ' " # & ' * % " # $ "   ! #     $ "     
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   
+           
+ 
+ 
+ 
+    
+  
+ 
+   
+ 
+  
+ 
+ 
+   
+ 
+ ! " 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ ! 
+  ! 
+ 
+  
+  
+     
+      
+  
+  
+ 
+     
+ 
+  
+ " 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+         
+ 
+ 
+ 
+  
+ !   !  
+     ' % % &  ! !     
+   !    ' % !   ! #      
+ 
+ 
+ !   "   #     
+ 
+  #   
+    &  
+ 
+  
+ " !   
+ 
+ " 
+  
+  
+ 
+ 
+ 
+ 
+           
+               
+    
+ 
+  
+ 
+  
+     
+   
+       
+ 
+  
+     
+ 
+        
+  
+      
+     
+     
+   
+ 
+ 
+ 
+    
+ 
+    
+ 
+ 
+   
+    
+ 
+     
+        
+  
+ 
+ 
+ 
+ ! 
+    
+ 
+ 
+ 
+ 
+   
+  ! 
+ 
+ 
+ 
+            
+ 
+ 
+  
+ 
+                                                                                                                                                                                                
+ 
+ ! # * - . - 3 6 2 2 = B < : < > ; 8 : : 9 ; 5 6 3 5 3 1 2 . . , 5 4 1 6 3 4 5 0 2 / 2 1 - 1 7 0 1 . - . / . 1 8 5 1 / . 2 5 7 5 - 4 4 4 4 , 0 0 0 1 - 2 0 2 1 * / 1 0 / + + 2 0 0 1 . 2 1 1 . 0 / / 4 0 7 6 2 5 1 0 4 2 , 3 0 0 1 2 - 3 1 1 2 0 . * 2 - / , 6 3 1 4 1 8 3 2 7 5 6 0 3 6 5 8 4 8 3 3 5 3 3 3 4 3 2 1 2 / 1 / 1 0 3 8 7 5 7 9 8 ; 7 4 3 7 7 5 3 0 2 - 0 3 5 3 1 / 3 5 4 0 1 2 2 0 - * + . + * , - 1 . ( ) + + - + ( ( ) ) * * + ' ' & ( ( " ( ' ) # & ' $ % $ # $ " " $ # $ $ # # $ % ' % $ ' # ) ! ! # # * ( $   # #   $ # # ! % " $ " ) ' " # $  $ # $ # # % ! &   ! $ # $ ' ( * % ' $ $ " ! ( # &  # # # % " % " " ! # !  ! # # # ! ! % $ "   # % !        
+ 
+    
+    
+   ! % ' & ' + 0 * * . . + & * ) ) ) + ) * ' + + * ( * ) * * 0 , ) ( ) ) & % $ & $ ) ( % $ ( ( & * $ % $ % ' # ! ' " # # ! 
+  !    
+  ! 
+  
+ !          
+  
+  
+ 
+    
+ 
+                  
+   
+      
+     
+  
+ 
+ 
+ 
+    
+ 
+ ! 
+ !  
+   
+ 
+  
+  
+   
+ 
+ 
+  
+   
+ 
+   
+ 
+       
+ 
+  !  
+ 
+   
+   
+  
+     
+ 
+     
+ 
+ 
+ 
+ 
+  
+           !  
+   $ % # # # $   
+ 
+ $   " 
+ !     ! 
+      " "   "  !     "     
+ 
+ 
+ 
+ # #     
+   
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+  
+ 
+ 
+  
+ 
+  
+ 
+ 
+   
+ 
+    
+   
+    
+ 
+    
+ 
+  
+    
+  
+  
+  
+   
+      
+   
+   
+   
+ 
+     
+  
+  
+ 
+                
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+     
+ 
+ 
+ 
+    
+ "   
+ 
+ 
+ 
+ 
+         
+ 
+ 
+ 
+ 
+ 
+ 
+   
+   
+ 
+ 
+     
+ 
+  
+ 
+       
+ 
+ 
+  
+ 
+      
+ 
+                                                                                                                                                                                                
+ ! % ( , 1 0 / 0 2 4 ; < ; ; @ A : 5 : < 7 7 6 5 0 5 4 6 7 1 / * 1 2 6 3 3 3 / . 1 4 / 0 . 0 6 3 9 2 / 2 1 3 / - 1 1 0 / / / / 6 / . 0 / 2 - 0 / - + 0 . . 3 2 / / 0 / + 0 2 1 4 / / - 0 3 4 1 / , - 3 4 6 5 5 3 3 0 0 / 4 - 0 1 0 3 1 1 / . 2 - - 0 / . / . 2 - / 1 , 1 / 2 9 4 2 0 / / 1 2 6 : 9 8 < 6 6 8 9 5 . 3 6 0 3 3 3 1 9 : 4 = 9 6 6 = 7 2 4 6 5 7 8 0 2 0 - . 6 5 0 / 2 / 2 . 2 1 1 - + 1 , . , + , + , 1 , - . 2 . ) + * ' ( ' ' , & ' % ' & ! ' ' % $ * % & %   ( & $   # & % ( % $ % $ $ ! # ' ( ! ! $ # ' ) * % " % ( % % % & % # # 
+ $ % & ' # " ! % % & % " " $ $ " " % ! # ! # ' ( ' %   " $ # ) & # % ( ' "   $ # # $ $ ! ! " ! # # " " & & ' & % $ #    
+ 
+ 
+  
+ 
+   ! #     # $ & $ ' * 2 1 . ) / 0 - ' ) ( ' ' , ( / ) ) , * ( ' & & + + * , ) ) ( & + - & % ( ) & & ) ' ( ' % ' ' % # ! $ ( !     
+   % % ! !     
+ 
+ 
+ 
+ 
+ 
+    "   
+ 
+  
+ 
+    
+ " 
+          
+  
+           
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ #   "   # " 
+  
+  
+ 
+ 
+ 
+ 
+  #   
+     
+ 
+ 
+  
+  
+ 
+ 
+         " 
+   
+ 
+  ! 
+ 
+  
+  
+      
+  
+       ! 
+ 
+ !   
+ ! " "    ! 
+ 
+ ! % $   $ # " ! !   & " !  
+   !  ! ! " 
+ " " ! # ! " " ! ! 
+ !     ! 
+ ! " % !   # 
+   
+ 
+  
+  
+ 
+ 
+       " 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+      
+  
+  
+   
+ 
+   
+  
+  
+ 
+ 
+         
+ 
+  
+   
+ 
+    
+ 
+    
+   
+   
+      ! "  
+  
+ 
+    
+  
+ 
+ 
+       
+ 
+ 
+  
+ 
+  
+  
+  
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+      
+ 
+    
+ 
+    
+   
+ 
+  
+    
+ 
+ 
+  
+ 
+ 
+  
+    
+  
+ !     
+   
+   
+   
+ 
+                                                                                                                                                                                              
+ # " & ) * / - , . 0 4 7 ; ; ? C @ ; 5 : 6 6 6 3 1 4 5 0 3 4 1 - 0 / 1 0 5 . 0 2 , / . , - , 2 . 1 7 1 / + 0 2 - , 2 0 . 3 0 0 0 1 1 , + 1 0 3 - - / . 1 1 1 0 0 / 1 0 1 1 . / 1 4 2 1 * . , . 3 1 / . 0 6 7 2 4 2 2 3 0 1 - * 3 1 / 2 2 3 0 , 1 - 0 / / / . 1 0 + / / / , 0 / 4 4 2 6 3 4 1 2 7 9 5 5 1 4 7 5 2 8 3 2 0 2 5 0 3 - 0 6 5 9 3 7 5 4 5 2 7 2 . 0 / , 2 3 + 2 6 3 4 / , + - 0 0 . 3 + - 1 - 1 0 . / 1 0 2 , 1 - 0 . - ) & ' * , , ' % ) & $ % & # ) $ # # " $   ! " $ & % % ( & % ' # " # # # & $ & " $ # $ ( # & & & ' $ " # $ $ $ % ! # " ! " # % # & " # 
+ " " $ " " 
+ 
+ " !   ! ! ! # & #  "   ! & $ # $ $ $ # ! " #   # % # $   "   % # $ $ ' & & " $ # 
+  
+  
+    
+  ! 
+ 
+  ! # ' " # % ) + - ( ) ( * * * ' ( ( , - ) ) ) ) * & ) ( $ # % ( - ( ( # & % ) * ( ( * ( & # * " ' & $ # ( ) " % ' & & # ! ! ! % !    
+ 
+  ! ! 
+ 
+ 
+  
+   $   
+ 
+   
+ 
+   
+ 
+                           
+ 
+   
+     
+ 
+ 
+     
+ 
+ 
+   
+  
+  
+ ! ! 
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+     
+  
+ 
+   
+   
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+   
+ 
+    
+  !  
+     % " " ! ! 
+ 
+ " " ! # " $ !  
+    & !  
+ $ #    
+  ! $ " 
+ !  ! # " ! # !   
+  "   #       !  
+ 
+ ! 
+ 
+ 
+ 
+  
+   ! 
+ 
+ 
+    
+   
+ 
+    
+  
+ 
+   
+   
+    
+   
+ 
+     
+  
+ 
+  
+ 
+  
+  
+  
+ 
+      
+ 
+   
+  
+   
+     
+ 
+  
+    
+   
+ 
+          
+ 
+ 
+  
+    
+ 
+  
+ 
+       
+ 
+     
+      
+ 
+ 
+     
+  
+ 
+ 
+   
+  
+    
+  
+ 
+ 
+ 
+ 
+ # 
+ 
+  
+        
+ 
+   !   
+ 
+   
+ 
+    
+ 
+                                                                                                                                                                                              
+ ! 
+ # % ) * , 1 1 5 3 7 7 : E > 8 < 8 8 3 6 6 1 2 / - 2 3 0 / 2 0 - . / 0 0 2 2 - 0 1 0 . * ) / 0 1 , . ( , 1 - * 1 / 1 7 2 , , 4 2 4 0 2 1 3 * . 1 / . - 2 - ) + . / 1 1 - 1 0 3 . . - / / . 0 3 0 1 2 2 / 2 3 3 2 / 1 / 2 , / 2 8 2 3 5 0 2 + + / 2 0 - 3 4 / . + , - 1 5 0 3 0 3 2 3 5 4 7 6 5 4 5 1 - - 3 - / 4 1 0 , 3 4 5 . - 0 2 , / 9 ; 5 5 1 2 5 0 , - - . + + 1 2 , / 1 , / - 1 0 0 / 1 3 . . 4 2 . + . 0 , + - . + / + + ( % ' + ( ( " ' ' " $ # & $ # ' # & $ " ! # ! % ! &   % ' # " " $ % % % % & $ # ! ! % & & # $ # # ! " % # & # $ $ ' # ! # $ # ' $ " # " ! " $ # ! 
+ ! " # # ! # % & ! #  ! # % " !   ' # $ "   
+ 
+ 
+   ! " !  
+ 
+ !   " % % " "   
+ 
+ 
+     
+ 
+ 
+ 
+  
+  
+ # $ ! ' % - / . ) ' ) $ ) ) ) ) ' * ( * ( ) & ) & $ $ % & % ( - ' # % # & ( $ ' $ ) ' % % ' " # & " & ( ( % " # # & $ "  !          " 
+ ! 
+ 
+  ! 
+ 
+  
+  
+   
+ 
+ 
+     
+  
+                      
+  
+    
+    
+  
+ 
+  
+ 
+ 
+  
+ !  
+ 
+ 
+ 
+ 
+ 
+   
+  
+        
+ 
+ 
+ 
+ 
+   
+  
+ 
+   
+ 
+ 
+     
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+     
+  !  ! ! ! ! 
+ 
+  $ % # 
+ 
+ 
+ 
+ 
+ 
+   !         ! ! " 
+      ! 
+     ! 
+ 
+ 
+           " " " 
+ !   
+   !      
+   
+ 
+ !        
+  
+ 
+      
+ 
+   
+     
+   
+   ! 
+       
+ 
+  
+      
+ 
+      
+  
+       
+   
+     
+ 
+     
+     
+   
+     
+    
+  
+ 
+  
+ 
+ 
+   !       
+ 
+    
+  
+   
+  
+  
+ 
+ 
+       
+      
+  
+ 
+ 
+ 
+ 
+    
+  
+   
+ 
+ 
+ 
+ 
+   
+        
+ 
+ 
+                                              
+                             
+  
+                  
+               
+                                                                                  
+ % ' % ' - , 2 7 7 7 8 > B 9 < ; : 7 6 3 3 - 4 3 0 2 5 2 + 2 . / 0 0 1 / 1 . . 0 . * ) - , / 1 / + . , 1 0 - , . 1 0 4 4 0 5 5 2 3 1 / 2 2 2 / / 2 / , . , + - . . . / , + / , - / / 1 / , + - / , 0 - 0 0 2 / . - . 0 0 4 2 4 2 3 0 0 1 / * 1 / 1 . ) * 0 . + ' * - 1 1 1 2 4 0 0 4 3 9 8 4 4 1 7 2 / 0 2 - 5 0 1 . - / 2 5 / * 1 4 / / 6 5 2 3 0 3 6 4 , . / * , 2 4 3 1 / 2 3 1 0 / , 0 0 1 / * 1 1 + + * / . - + , , * * - - & ( & & & % # % % $ !   ' # 
+ # & ! "  " % " !   "     ' $ ! " ! # % & $ $ # " & " # # % # $ %  # & % ! " $ % # $ " 
+ 
+   $ "  
+  %   !   "  ! " ! # & " " !  $ ! # ! ! !      #      
+ " !      !   ! # ! # $ & #        
+ 
+    
+ 
+  
+   # 
+ $ $ ' & . , 1 , , % & & % ' ' & % % ( , & * ( ) % ) ' $ $ + $ ' ' # " ' ' ' % ' ' % # " " # & " % " " # ! #   ! " " 
+  
+  
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+     
+ 
+   
+  
+                                         
+      
+        
+    
+   
+  
+    
+       
+  
+ 
+  
+ 
+        
+   
+ 
+ 
+      
+ 
+ 
+    
+   
+     
+   
+ 
+ 
+   
+ 
+ "  
+  
+ 
+     
+ 
+ 
+ 
+ 
+       
+   
+ 
+   
+  # 
+   
+ 
+ 
+ 
+ 
+ $        
+ 
+   
+   
+   
+   
+ 
+                  
+    
+               
+     
+      
+ 
+ 
+            
+    
+ 
+ 
+      
+ 
+      
+      
+  
+  
+    
+ 
+ 
+ 
+   
+  " 
+      
+ 
+  
+ 
+ 
+ 
+     
+ 
+ 
+ 
+          
+        
+ 
+  
+ ! 
+  
+    
+  
+    
+       
+ 
+  
+  
+                 
+                  
+                                                                                                                                                             
+  # ' ( ) . . . 2 6 : 8 < = < 9 3 8 9 5 1 1 2 4 0 , 1 / . 0 1 . 1 2 * , * , , ) / - 0 / 4 0 0 4 . 1 + . 4 4 , ( , / 3 0 1 2 - 3 2 1 1 / 0 4 3 0 0 3 + / / 0 0 4 1 * + ) - + / 2 - . - - ) + + * 1 1 0 + 6 1 - 0 + , , - - 2 . 1 0 . + . / - ) , . 1 0 + % ' * * ) + / 1 3 2 0 2 3 2 2 1 1 3 6 7 0 0 6 , - 2 1 / / + 3 2 0 - - . . 0 / / + 0 1 1 2 1 5 4 3 . * , - . , * / 0 / / / 0 5 1 ) . 0 . 1 , . 0 + , 2 2 + ' , ( ) ' - ) & $ ( $ & # # " " ' & ! # !   
+   & " !     % # " !       
+   % # ! "   
+ $   !     ! " ! # # " # # "  
+ % # ! " #   
+ ! 
+ % & ! !   "   " 
+ " 
+ " $ "     ! ! #    
+  " !  &   ! ! "     # 
+ 
+  ! 
+ " #     " !  " " " ! ! 
+     
+       
+ 
+   
+ 
+    $ ( * * - & ( ' $ $ % $ % & ( ' &   ! ' & ( $ & % # % % ' $ ' $ # ( ' $ $ % ( & + # $ # "  " % ! # # " # $ " 
+ 
+ 
+ 
+         
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+   
+    
+       
+                                       
+ 
+   
+      
+   
+     
+ 
+ 
+        
+                  
+      
+  
+ 
+   ! ! 
+     
+ 
+ 
+ 
+  
+ 
+  
+ 
+    
+ ! "  
+ 
+ 
+  
+  
+ 
+           
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+     
+  
+ " 
+ 
+ 
+  ! 
+ 
+   
+ 
+ 
+ 
+        
+       
+      
+                  
+       
+  
+           
+            
+            
+          
+ 
+      
+   
+ 
+    
+ 
+    
+ 
+   
+       
+     
+           
+     
+          
+       
+      
+                                    
+        
+       
+ 
+       
+             
+ 
+  
+     
+         
+        
+                                 
+         
+                 
+                                      
+ % & ( ( * / 2 8 4 8 ? ; ; @ : 9 8 7 2 5 4 0 0 1 - 0 - 2 . / , , + 0 + , - . 0 2 / . . . 0 , , 0 4 - - / 1 1 / + * 4 2 / 3 0 2 6 4 4 * + 1 . 0 . 0 / / / / 1 2 / , , . + . / - 0 0 0 . . * * * + 1 , , ) 0 / 1 + / / , - - / 0 . / . . , - / + - . - ( ( + ) $ ) + , . / 0 0 3 3 7 3 / / 0 5 5 4 3 5 2 - - ' * 0 0 / - - / + 1 1 0 , / / 0 1 - . / . 1 0 / + / / 0 / , 0 4 / / 4 5 . - * , 2 1 / , , + , * . . ) + ) % + , ) 0 & ' ) $ $ % # % # % % ! # " % #   ( '   
+    
+ % #    
+   " " " ! ! !            
+ 
+  $ 
+ " # # ! ! " 
+ !    $   
+   
+   $ ! "    
+   
+ "  ! # $ 
+ 
+ 
+ $ "   !  
+ " "  # # "  
+ 
+ 
+ "   
+ 
+ ! 
+ ! % " " !  
+ ! " $   #   
+   
+            
+  # $ # ' & ' % ( ' $ # & " & $ % # & % $ ' $ % ) ' # $ & % & $ " ! & , ' * $ " % # ' ! # ! #  # " $   # # " " " 
+ 
+ 
+ 
+  
+ !    
+  
+   
+ 
+   
+ 
+      
+              
+  
+                                     
+ 
+   
+             
+          
+ 
+                     
+ 
+   
+ 
+  
+     
+ 
+  
+  
+  
+  
+ 
+  
+ 
+  
+ ! ! !  
+ 
+ 
+ 
+   
+  
+ 
+   " 
+ 
+ 
+ 
+ 
+ 
+  
+     !  
+ 
+ 
+ 
+     
+  
+     
+       
+                          
+                                 
+         
+                   
+              
+ 
+ 
+  
+   
+  
+                      
+   
+  
+      
+           
+                       
+     
+                  
+    
+     
+   
+   
+                     
+   
+      
+  
+                                                            
+                                               
+ # % $ ' ( . . 5 9 8 9 8 ; < 7 7 1 6 2 2 5 1 3 1 1 4 5 0 . / 0 , . , + , 0 1 1 . - 1 2 . 2 , , 3 3 - 2 * - 5 4 / - / + / 4 4 - 4 3 / . , - ) / , 5 4 3 / 0 3 7 3 0 0 + + ( , . 3 , * + - 0 + - . * ' , ( . . - 2 1 4 ) - . 3 . 1 - - / + - 1 - + - & ( ' , ) ( - / , - 1 3 3 5 3 2 1 2 5 1 9 3 3 1 5 5 7 0 0 . . + . . 0 2 / - - * . 1 2 1 2 - 1 0 1 + - 0 1 / . 1 / 2 8 0 , . . 2 0 . + 0 / 2 / + / . 3 + , 1 + + - ( ' ) % ) ' % , ) ( ) * & # $   # " % # $ " $ & #  # !  
+ $ % " #  "     $ # & " !        
+  
+ # $ ! # ! # # $   
+ ! ! ' !  
+  $  &   " "     
+ ! "    ! 
+ 
+  # # 
+ 
+  ! % !  % & " 
+ 
+  # 
+ 
+ 
+  $   
+   
+    
+  # " !          
+          
+ # " & ( ) ) ( ' % " & % ( * % # $ $ # # " $ $ $ " # $ % ' % ! ! % ) ( ' ) ( # # % # " 
+ 
+ !  $ % " $ " " ' " !     
+   
+     
+ 
+   
+ 
+  
+ 
+  
+   
+   
+ 
+       
+     
+                                                
+         
+    
+          
+      
+           
+       
+ 
+  ! !   
+   " 
+ 
+  
+  
+  
+ 
+ 
+ 
+    "    
+ 
+   
+   " ! ! 
+ 
+   
+ 
+ ! 
+  
+    
+ "   
+    
+                    
+   
+                   
+                                
+   
+         
+   
+ 
+  
+                     
+        
+    
+        
+              
+ 
+   
+    
+       
+  
+  
+  
+  
+                       
+ 
+  
+  
+    
+                             
+              
+                  
+                 
+  
+                                                                                        " # % & + , 0 2 9 9 6 = > 6 4 < 5 6 3 5 8 5 2 5 4 1 1 2 - . 1 0 2 - - - 0 - , / 2 0 1 - + + . / , 0 . - . 0 1 1 1 + , / - , . 1 1 * - , * . - - - 1 7 3 1 6 8 2 / 0 . - * + . / - * ( . - * ( , + , ) / + * + . 2 0 ( 2 - 2 - - , , - 0 3 , + / / - * & * & ( , 0 - / 3 2 / 3 1 3 4 3 2 3 6 9 4 . - / 2 5 / 0 1 0 + 1 , 0 0 2 0 . , / 3 0 / - - . / / / 1 - / 1 2 - 0 . ' - 0 7 5 0 . ) 1 - 2 4 0 * / 3 , + / / 0 1 , ( ) + ' + ) ) + * ( & % & $ " & ! # ' # % !   %   $ " ! " % % $ $ ! ! !   " " "  !   "  ! ! 
+ 
+ ! ! " ! ! !   
+   $ # ! " 
+ 
+ 
+     " 
+   ! ! ! "    
+  
+     ! ! # $   !    "  
+        # ! " %  
+ 
+ 
+ &  !    
+ !    $ ! % " 
+         
+    
+      
+ & % # % ) * ( % % $ ( % + ' ) # # $ " # # % # ! " ' & ( #  ! % * * $ ! , $ # " % % % $ " # " % # # $ 
+ 
+ !   
+      
+ 
+ 
+    
+       
+  
+ 
+          
+         
+                                                         
+ 
+    
+   
+                
+  
+   
+          
+ 
+ 
+ 
+    
+  
+ 
+ 
+   
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+   
+     " ! 
+   
+  
+ 
+   
+ 
+ 
+ 
+ 
+  
+  
+     
+  
+      
+                                           
+                      
+      
+ 
+ 
+           
+       
+   
+         
+       
+    
+      
+                           
+       
+    
+  
+   
+ 
+ 
+                    
+     
+      
+         
+    
+            
+         
+     
+                               
+                                          
+                        
+                               
+ 
+ 
+ # % ) ) + , / : 8 5 7 9 2 3 9 4 5 3 2 1 5 1 5 5 2 0 4 ( 0 - / ( , ) - 2 2 / 0 1 - . / * , . 1 1 2 1 1 0 0 1 . + . 0 / 1 , 1 0 , , , ' , 0 1 + + * / 2 1 1 4 2 / . 2 4 , . - , + . * 2 / * , . + 3 + / , * , 1 1 , - / / . . , + * , 1 1 , 2 - , , + ( ( * ) ' - / 0 4 5 / 1 1 5 7 0 3 4 : 7 1 - + , 1 3 - 2 / . / . . . 2 + + 1 5 4 2 - 0 / 1 0 3 0 - . - 1 1 / 0 + . , . 0 5 4 0 3 / + ( , + / , 1 - + 0 0 - 3 0 + / + ( ) ) $ ) ' ( $ ! ! $      !  " & $ 
+   ! "   $  
+ "   
+ #   
+ 
+ 
+ " "   !   ! # & $ $ #  
+ 
+ 
+      $ # 
+ # " "  
+ ! 
+   
+   % $ " ! 
+ & " !   
+  
+ 
+  "   
+   % " 
+ 
+ 
+ 
+ ! 
+ !  ! 
+ !    ! " #    ! 
+ 
+ "    # "  
+             
+ 
+ 
+ 
+ 
+ !  ! $ % ' ( ' ' & ( ( * $ # # ' % % # % & ! ( % ( !   ( + % ! % % & ( ' ' ' % $ # ( % & & # $ !    % $ % ! ! ! 
+ 
+   
+     
+  
+ 
+ 
+    
+ 
+       
+       
+      
+ 
+        
+                   
+                                 
+     
+ 
+ 
+   
+ 
+     
+  
+                  
+  
+ 
+ 
+ 
+   
+ 
+ #     
+ 
+   
+ 
+ ! 
+ 
+ 
+ 
+ " 
+ 
+  " 
+ 
+   
+ 
+  
+ !  
+   
+ 
+ 
+ 
+ 
+ 
+ " 
+       
+ 
+      
+                        
+               
+     
+ 
+                     
+    
+ 
+   
+   
+            
+   
+             
+       
+          !                     
+  
+    
+                 
+      
+ 
+         
+    
+    
+  
+         
+ 
+    
+    
+        
+    
+           
+  
+               
+  
+ 
+ 
+    
+    
+       
+                                                               
+                                   " $   $ ' + - - 7 2 4 8 9 3 4 2 6 8 7 5 2 1 , - . / , / , 0 / . 0 . , 7 9 / 0 1 . . + + - + 0 / 1 0 1 - / 1 / - - / 1 / 2 + 4 , / ) . / - 1 / + + / 0 4 - / 1 / - 1 , 4 - + 2 , & - * * - 1 0 1 , - * . + ) . 0 + * + / . , + - 0 + ) . - 3 0 * / , + + / ( * - + . + . 1 6 3 1 7 3 1 2 0 5 8 5 0 2 0 - / - 3 6 / / 2 1 + * , 0 0 3 7 3 2 2 1 2 . 0 1 - , 1 1 1 0 - - / 1 , / . , + 4 3 1 , + - 5 0 0 + 0 2 / - , , + / * ( * , ( ( * & ! "  # #   # & % ! ! " ! " # " ! $ 
+ 
+       " #  
+ 
+   
+  # "   $ % #   " ! ! 
+ 
+   " # ! ! ! # "   "   ! !  
+ 
+ 
+ !     " ! 
+   # " 
+    
+   
+ 
+ " " ! 
+ 
+ 
+  
+ 
+    
+   
+   !    
+   "  
+ 
+ 
+ 
+       
+ 
+   
+             
+ 
+ 
+ 
+   
+ # # * ) ( ' # % # # $ & " % % $ # & & $ # " $ # % # ) * %   $ $ ' % ( # # $ ( ' ! $ % % ( # ! 
+ " # # ! 
+ $  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+    
+ 
+ 
+ 
+    
+                                                                               
+ 
+     
+ 
+      
+       
+   
+   
+   
+ 
+ 
+       
+ "   
+  
+ 
+ 
+  
+ 
+   
+ 
+ 
+ 
+   
+ ! 
+      
+ ! 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+   
+    
+     
+                                              
+                                       
+               
+ 
+ 
+   
+  
+    
+ 
+   
+ 
+  
+ 
+      
+        
+ 
+   
+   
+ 
+     
+    
+           
+   
+     
+         
+      
+            
+  
+      
+         
+                 
+    
+          
+         
+     
+                              
+                                                                         
+ 
+  ' # ) ) ' + + 2 5 6 ; 5 6 5 9 4 6 4 8 8 - 1 1 0 3 0 - - . - / + ) ) 5 3 4 , 0 * . - + + , , , - 1 0 0 4 4 3 4 3 / 1 2 - 1 , / 0 2 / - 1 0 / . / 0 3 0 - ) 0 + - 0 / . - - . * * ) + ' * , , . * ( + . ( * 0 1 , / / - - - + % / * ( * ) ( + ( / , , / - * ( ) , / - 0 / 0 - 1 5 7 3 + 2 6 3 3 7 5 . , 1 0 / 8 / , 2 2 - + / 4 4 2 7 5 0 / . 0 . 1 1 . 0 3 / 0 2 / , - . - 0 1 2 / 4 1 2 0 * . 1 + ) ' - 1 . , * / ) ' * , + % ) * - - ! % $ ! " ! !   "       # # $ # % "  
+ 
+ 
+   
+ ! "  
+   &     " 
+    
+ "   
+       # ! " ! ! ' " " "    !   
+   
+ 
+ 
+   !  
+ 
+ ! "       #   
+ "  
+  
+ 
+ 
+ "    "  
+    "   
+   
+    
+      
+ 
+   ! 
+ 
+    
+    
+         
+  ! & ' * % ' ! & $ $ & ( $ # % & ( # # $ " $ ' % $ # ) % % % # $ # ! % $ # & ! & " # $ & ( " 
+ 
+ ! 
+  
+ !  
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+  
+  
+ 
+        
+ 
+        
+     
+     
+                                                       
+ 
+  
+  
+   
+   
+  !                 
+ 
+     " 
+    
+ ! 
+  
+ 
+ 
+  
+ 
+    
+  
+  
+ 
+ 
+  
+ 
+ 
+  
+  
+  
+ 
+ 
+   
+ 
+ !     
+ 
+ 
+  
+  
+                                                                               
+     
+       
+                   
+   
+       
+ 
+     
+           
+ 
+ 
+                
+ 
+   
+   
+     
+     
+ 
+       
+             
+  
+ 
+                  
+  
+ 
+ 
+                     
+ 
+ 
+        
+        
+   
+   
+          
+  
+  
+                                                                                              
+ !   & + & % * 0 1 4 5 7 = : : 7 2 4 2 1 4 4 / 4 1 - / 0 . 0 4 7 0 , 0 . 0 . 4 5 6 + 0 4 / 1 2 2 4 3 3 , 2 3 2 4 1 5 / 5 2 0 2 2 5 1 3 4 3 3 2 3 5 3 0 5 2 0 1 0 / , * . 2 . 2 . 4 1 . 1 - - + - / . + / 0 . 0 0 0 - - 1 0 0 4 / 1 0 . 0 1 0 / / 0 / . 0 2 , . - . . 3 2 5 , 0 3 1 8 4 1 1 6 7 5 2 8 8 5 3 4 3 3 2 - / 5 3 6 0 3 4 7 2 7 4 2 3 4 1 2 3 4 2 2 7 3 8 3 3 2 5 6 3 7 1 4 : 8 2 4 4 , . / 0 1 1 1 4 / - 3 - / 5 0 - + ( . - - * % % % " & * ( %   # ' & % * ( $ " % & ' % %  
+ $ $ # " # " " % $ & ' " % ( ( $   ! $ $ & # % # % $ " & $ % " "   ! % ! ! ! ! ! & $ # % ! # # " $ " # & " " " % "    " " ! " " # " ! ! & % # " " ! "   " # # ) # ! " ( $   ! 
+   
+ 
+     
+ 
+  
+ 
+ 
+   
+ " # ( ' 0 - ) ( ' ( ( ( * ( ' + * * * * % ( * * - , * * ( , & ( ) , , & $ $ ( . ( " ' # % & * ) * ) &   $ ! ' #   " # $  
+    
+  
+ 
+ 
+    
+  !   " ! 
+     ! !  
+     
+ 
+       
+  
+  
+    " 
+ 
+ 
+ 
+ 
+ 
+      
+   
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+       
+ 
+ 
+    
+     
+ 
+ 
+      
+           
+  
+ 
+ " 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+   
+ 
+      
+  !     
+ 
+   $        " 
+  "    " "   
+  
+   # !  
+  ! $ ! !   " # 
+   
+ 
+ ! # " ! " " # !  #     # ! ! 
+   
+  
+ 
+      
+   
+  
+      
+                               
+ 
+  
+       
+          
+  
+   
+  
+ 
+   
+  
+   
+ 
+ 
+  
+          
+     
+ 
+   
+  
+    
+  
+       
+ 
+          
+ 
+ 
+ 
+ 
+  
+      
+ 
+    
+ 
+ 
+ 
+ 
+  
+  
+     
+ 
+ 
+  
+   
+ 
+ 
+  
+ 
+                                                           
+ 
+              
+  
+                                                                                                                  
+  % # ) * ) ) 0 / 2 5 7 7 6 9 A 9 7 6 ; 2 3 8 8 7 7 / . 1 1 2 2 0 0 2 / 2 1 / 5 3 3 8 1 4 5 4 3 1 1 7 3 - 2 2 2 . 0 0 - - - 1 9 1 , / / 1 7 4 0 5 1 1 5 1 0 2 2 0 / 4 1 4 3 0 1 1 1 0 0 / 4 3 2 / . / - 2 5 2 * * / - . - 0 5 4 8 3 4 3 , . 3 2 1 2 3 2 3 . + . 0 - 1 . , 4 0 / 4 5 9 ; 6 3 4 7 8 8 6 5 3 7 3 1 0 3 0 3 1 5 1 7 6 8 8 5 6 4 4 4 4 / 5 5 4 4 2 0 4 8 7 7 4 6 6 6 7 3 9 8 6 6 5 4 0 6 5 2 0 1 0 - 4 2 3 - , + ) , / , , . 1 - & # ( ' " ' % % & $ & ' ( ) ' # " & ( % * & ! & " & % $ $ # % % % $ & % " % ) % ( % ' ( $ % & & " # % & " ( ' # %   # $ " # '   & $ % & ' % $ " % # $ # % % ! # % " $   
+ & $ " ! $ # # % % $   & ' % " # # # ) % " " * $ $  
+     ! 
+ 
+ 
+  ! 
+ 
+ 
+ $ % " ! ' & ( + ) ' ' ' ) ( + ) ) * . + + ( ( ( / ) 2 - - , + , . ( ) ) & ) ( ( ) . - & ( ( " % ' ( , + ) ) % $ % ' $ $ " #   !     
+ 
+ 
+ 
+  #    ! 
+  
+ ! 
+ 
+    ! !   " "   
+  
+ !  
+ 
+  
+ 
+ 
+   
+ 
+   " 
+ ! 
+  
+  
+ 
+ 
+  
+     
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+      
+     
+   
+        
+ 
+          
+  
+  
+   
+   
+  
+  
+ 
+  
+ 
+ 
+ 
+   
+   " ! % " 
+ 
+ " " $  "  "   
+ 
+ 
+   
+ $ " ! ! " ( % 
+  # # " #   ! ! 
+   
+ 
+ 
+ 
+     !  !   ! " # ! 
+ 
+   
+ 
+  
+    
+   
+                            
+  
+    
+  
+    
+   
+     
+  
+       
+  
+   
+  
+  
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+     
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+  
+ 
+ "   
+     
+   
+ 
+   
+     
+ 
+  
+ 
+   
+   
+ 
+ 
+    
+  
+ 
+ 
+ 
+ 
+ "     
+ 
+  
+  
+ 
+ 
+    
+  
+   !                                                                          
+                       
+                                                                                               
+   " # % ( * + . 2 5 2 : 8 2 5 9 9 6 8 8 9 ; 7 9 9 8 8 5 4 3 3 2 1 0 0 2 1 / - 7 4 3 7 4 1 : 4 / 3 5 3 3 4 2 / 2 1 1 3 0 2 - 5 5 / / / 2 / 7 6 4 3 3 0 1 1 2 7 5 1 / 4 9 < 2 1 0 0 1 0 0 1 1 6 7 5 / 0 5 3 2 , 0 1 / / 0 1 0 5 3 2 / 2 : 3 0 - 0 / 0 / . 3 1 2 0 / . 1 + 3 3 6 3 5 1 : ; 3 2 2 9 9 7 1 / 0 4 / 7 5 3 0 5 2 0 0 / 9 8 8 6 6 : 9 6 4 . 7 : 8 6 2 4 4 5 : 3 3 8 7 5 5 4 2 6 7 3 5 4 1 . 5 8 1 6 5 2 / 7 2 0 1 + / - / 4 2 . ) * ) $ # & # # & ' $ $ & ) ( ' % ' % & % + ( ' " ' # # $ ' % "   % % ' & % ( ( ) ( * * ( ' ) ( ' # " $ % # % ' % # & % # " " # & " # # # $ % ( % % & & & " & $     ! $ # $   $ %     $ $ & $ ' # ! " # $ $ # # # ( % % ' % % )   
+ 
+  
+     
+  
+ 
+ 
+ 
+ $ ' ! $ # ' + * , / ' & * ' - * , ) - * ) ' ) , * 0 , , , - ) , ( & ' $ $ ' + - * $ $ ) & % $ % + * , & & * % ) ) ( " # % !  # 
+ "        # 
+   
+ 
+ 
+ !  
+ !  % # # $     
+ 
+ 
+ 
+   
+   
+ 
+ 
+   
+   
+  
+  
+ 
+ 
+ 
+ 
+ 
+     
+ 
+ 
+ 
+ 
+ 
+        
+ !  # 
+ 
+ 
+ 
+  
+ 
+  
+  
+  
+ " 
+ 
+ 
+ 
+ 
+ 
+      
+   
+  
+       
+  
+             
+ 
+ 
+   
+  
+ 
+    " " ! " $   
+ ! "   
+ !  ! "  !   $ ! !  " " "  #   ! " !  
+  ! #  
+ 
+  
+ 
+ 
+  " "      ! 
+ 
+    
+ 
+ 
+  
+  
+ 
+                
+       
+ 
+     
+      
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+    
+ 
+ 
+ 
+        
+ 
+   
+     
+  
+ 
+    
+ ! ! 
+ 
+ 
+ 
+  
+   
+ ! 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+    
+  
+  
+ 
+ 
+  
+     
+ 
+ 
+ 
+ 
+ 
+ 
+     
+       
+ 
+     
+   
+ ! 
+ 
+ " 
+ 
+   !  
+ 
+  
+   
+   
+  
+ 
+ 
+ 
+   
+ 
+  
+ 
+                                                                                                                                                                                                
+ 
+ $ ( $ ( ( ) 1 3 8 8 2 8 : : 8 4 5 6 9 B ; ; 7 8 6 8 2 1 - - / 2 3 5 2 4 2 5 5 . 2 0 1 1 0 0 0 1 2 7 2 2 1 3 0 0 0 1 2 1 / 3 0 2 2 , / 2 2 2 2 3 3 4 4 / 4 4 0 / 2 4 4 0 0 / - / 4 . 6 7 3 3 3 1 0 / 0 1 * + 3 0 1 0 0 0 7 4 1 2 1 3 6 / 1 . + 1 , + - 3 2 / - - / 0 3 0 2 2 3 : ; : 5 1 5 4 7 4 1 - 5 4 3 5 3 5 5 5 0 . 0 5 7 8 4 9 8 ; ; 0 9 6 : 6 3 7 5 6 8 8 6 7 7 7 4 0 , 4 2 1 1 0 6 1 / * 0 2 2 1 3 / . - 4 / 0 6 - / 0 0 1 , , * ) ( * ) ( % % ' % % ' ' " $ $ % $ ' ) ( % $ & & " & # $ ) ' % % * ( " $ " $ $ $ $ ' % ( * % # $ $ % # # ' % % % ( ( & & $ % $ # $ & $ # ! # % % #   # % # ! !   # #   $ # $ & $ % ! % & " " " " #   ! % $ $ % "     $ ' & # #     
+  ! 
+ " 
+ 
+ 
+ 
+  
+   " $ ! ! ! & * - - , * & ' ' . - + ) , ( ' * , , + 1 + + / + ( ( $ * * + % & ' ' + ( & * ) ) , , , ( ( ( ( ' & ' ' ( & ' ! % # % # #  
+ ! # " " $ $ 
+    !  
+    # #   
+ ! $ "   ! $     !  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+  
+   
+        
+ 
+ "           
+  ! 
+   
+ 
+  
+ 
+    
+ 
+   
+ 
+ 
+ 
+ 
+ 
+    
+ 
+  
+     
+ 
+      
+          
+  
+      ! 
+ 
+  
+ 
+  !    !  # 
+   
+ 
+ 
+  # # 
+   " 
+     
+ 
+    
+ 
+ " " 
+ 
+ 
+ 
+ !        
+ # 
+ 
+ 
+      ! 
+ 
+   
+ 
+  
+ ! 
+ 
+      
+ 
+  
+ 
+    
+ 
+           
+         
+        
+     
+ 
+ 
+ 
+    
+ 
+ 
+ 
+   
+    
+    
+ 
+   
+      
+ 
+     
+ ! 
+ 
+  
+   
+ 
+  
+   
+  
+  
+  
+ 
+ 
+    
+  "      
+ 
+ 
+  
+ 
+ 
+  
+  
+ ! 
+ 
+     
+       
+ 
+ 
+    
+   
+      
+ 
+ 
+  
+ 
+   
+ 
+ 
+ 
+      
+ 
+ 
+ 
+ 
+  
+ 
+                                                                                                                                                                                               ! 
+ 
+ $ ) $ ' ) + - 3 7 = 8 7 6 8 ; 6 2 4 7 9 5 7 7 4 2 5 0 1 4 2 . 1 3 / 2 / 3 2 6 2 5 / 2 1 / 3 5 3 5 4 7 2 - 6 2 . 1 , 0 - * , 0 3 1 1 / . 2 1 2 3 3 = 1 0 0 0 . . + - - , 0 2 * , 4 4 5 3 / 0 / 2 / / 7 1 1 2 4 8 3 ) . 1 6 1 5 4 4 . . 0 3 . 2 4 2 2 0 / 1 - ( - . 0 2 4 5 : 4 5 ? : 8 6 7 3 4 2 2 ; ; 6 7 8 2 1 1 2 / 0 3 6 9 2 8 5 3 7 < 4 : 8 4 2 1 : 8 5 4 ; 5 3 3 9 7 2 4 8 7 4 / 6 7 3 3 , . 0 3 0 0 - * * - , + + / 0 . / , * * ( ( * ) ( % % $ ' % ' & $ $ $ & ' & % & ' # ( $ ' " % # ( & & $ # * * # " $ % " ! # & " ! % % &  " % ) % $ % & ( & & % & ( ' ' $ ) $ # & " % & " ! " "   !   " " % $ # & $ % " # " ! # $ # & $ " % !    ! # " ! % " & & & $ #   % ! 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+   #  " " $ , * ( ' ( ' * * - 0 + ' * + - ) ) ) ' ' & ' ) , ) ) & ) * ' ( % ) + , ( ( + ) - * ( + ( - $ % $ ' $   % " " #   ! ! "   $  " !   ! " 
+ 
+ 
+ 
+  " $ 
+ !  "   
+   ! # 
+     
+ 
+ 
+ 
+ "   
+   
+ 
+   
+ 
+ 
+ 
+   
+ 
+ 
+   
+  
+ ! 
+ 
+   
+      ! ! ! !   
+  
+ 
+ 
+  
+  
+     
+ 
+ 
+ 
+ 
+ 
+ 
+     
+ 
+   
+    
+ 
+      
+ 
+     
+ 
+  
+   
+    
+ 
+  
+  
+   !   
+ 
+ 
+ 
+ 
+ 
+ & " $  " 
+  
+ 
+  
+ 
+ ! 
+      
+       
+ 
+ 
+  "    ! 
+ 
+ 
+ 
+  
+ "  
+  
+ 
+   
+  
+  
+ 
+ 
+ 
+ 
+ ! 
+  
+ 
+        
+   
+        
+  
+        
+ 
+ 
+     
+ 
+           
+ 
+         
+   
+ 
+   
+       
+ 
+    
+ ! 
+ 
+      
+      
+ 
+   
+ 
+  
+  
+  
+   
+   
+    
+ 
+    
+  
+ 
+  
+  
+   
+ !    "  
+ 
+    
+   
+ 
+   
+ 
+    
+ 
+   ! 
+ 
+ 
+ 
+ 
+  
+  
+        ! 
+ 
+                                                                                                                                                                                               
+ 
+  # ) % % ( ) 1 0 4 7 = 8 6 7 < : 6 2 4 3 6 7 7 2 2 8 0 / 1 - 1 0 4 2 3 4 5 2 : 3 5 3 1 / - - 2 3 / - 1 2 3 0 4 0 / 3 0 0 . . . 2 1 / 0 - 2 - / / - - 0 / / 0 2 2 - . ) . 2 0 . 1 5 0 3 3 / 0 3 - / 4 3 0 1 3 3 2 . 0 1 4 2 2 1 2 2 1 0 0 2 / . 0 2 / 0 - . , , + 4 / 2 4 1 2 4 2 3 3 8 9 6 7 8 : 7 8 7 4 4 7 4 4 . / 0 . 1 7 < 3 3 6 3 8 8 4 8 5 3 3 3 9 1 1 2 : 4 2 2 4 2 8 4 3 1 1 2 1 0 3 4 , * ( / 0 3 / / - * 0 , / - 1 - , - & ( ' % ' & ' " $ $ * & ! " & % # # # % % ' & % $ % ! " ' & & ( $ % ( & $ ! " % "    ! " $ # ! % & ! # & % ' & % $ # # % " ! # ! ! ' %  " ' $ $ ! !   $   ! ! # # $ $   $ " # " $ " $   ( $ $ # # % ! ! $ ) & # ' & % % & % % ! #    ! 
+ 
+ " "   
+ 
+ 
+     
+ # ! ( * + ' & ( ' - ) , * ' ( ( / * , ( + ( , ) ) * * * ' ' ) ) % % ' ' * + + * ( ) ' & ( ( ) ( ( $ " & ' & # ! ! # " " 
+ 
+ 
+       #   
+  " 
+   
+ 
+ 
+ ! 
+    ! 
+ 
+ 
+  !  
+ ! 
+  
+ 
+ 
+ 
+  
+ 
+ ! !   #   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+   
+ 
+ ! ! 
+ 
+  ! 
+    " 
+ 
+  
+ 
+ 
+      
+ 
+   
+    ! 
+    
+    
+     
+          
+   
+ 
+ 
+ 
+   
+ 
+   
+ 
+ 
+ 
+   
+ 
+       
+ 
+ 
+ 
+  
+   
+ 
+ 
+   
+ 
+      
+  
+   
+   
+ 
+ 
+        
+ 
+ 
+ 
+    
+   
+ 
+ 
+ ! 
+   
+ !     
+ 
+ 
+ 
+      
+ 
+     
+ 
+  
+ 
+ 
+ 
+   
+    
+ 
+ 
+ 
+ 
+  
+   
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+           
+  
+   
+     
+  
+ 
+  
+   
+   
+  
+    
+  
+   
+ 
+ 
+ 
+  
+   
+ 
+  
+ 
+  
+ 
+  
+ 
+  
+  
+ # 
+    
+  
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+     
+ 
+  
+  
+    
+     
+      
+ 
+ 
+     "  
+                                                                                                                                                                                                
+ 
+ 
+ $ # & ) * 1 2 1 : 9 = ; < 9 9 7 4 7 4 1 3 3 6 8 0 1 / / / 3 1 0 - 2 3 1 3 ; 6 8 0 1 1 0 , - 1 , . - / 0 0 4 0 1 . / 2 4 0 + , / 2 / / . 1 0 0 , - 1 , . 3 2 0 . - + - 2 , 2 2 2 1 + * 1 7 5 , , 1 / 1 0 1 / - . 1 / / / 1 . 1 2 / . - 0 - ) - . - 3 - * / * / 4 1 4 1 0 3 1 1 3 2 5 8 8 5 5 4 : 3 9 6 3 . 0 / / / 2 1 / 5 6 1 3 5 4 8 6 5 6 : 3 5 6 6 5 6 3 4 5 7 2 3 3 7 3 0 3 7 2 3 6 1 . , , / 1 1 / + - - ) 2 1 2 / . + . / * ( ' % % ! " ( $ ( $ (    ' # $ "  $ ( ( * #  # & ) ( % & % $ " & ) ' ! $ $ %   
+  % # $ !   $ % & $ % # ( + # " $ " # ! $ " ! ' " # $ & ) ( & % # $ #   # ! # # # & $ " # % $ ! %     ! " $ # 
+ $ # " # ( # # ( % ' & % " " "   
+ !  
+   
+  
+    !   !   ! ! ' + ' ) ' ' ( * ' + ' % ) ' ( ( % ' * * , ) ( % , + + ' * ( ( * ' ( % / ' % ( + ( ) + + % % ) ! ' ' % # ( #    " # " 
+   
+ ! 
+  
+ !      " 
+    !   
+ 
+    
+        
+  
+  
+ 
+  
+     
+  
+  
+ 
+ 
+ 
+ 
+ 
+  !    
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  ! $ " 
+ 
+    ! " 
+   
+ 
+ 
+ 
+   
+  
+ 
+   
+ 
+ 
+   
+  
+ 
+  
+  
+   
+    
+ 
+   
+    
+ 
+ 
+ 
+ 
+   
+ 
+  
+   $   
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+   
+   
+      
+     
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+   
+ 
+    
+ 
+ 
+  !       
+     
+ 
+ 
+ 
+                 
+ 
+ 
+  
+ 
+ 
+   
+    
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+  
+   
+  
+  
+  
+ 
+ 
+     
+   
+        
+  
+  
+    
+ 
+ 
+      
+  
+ 
+ 
+ 
+   
+ 
+ 
+ 
+    !  
+  
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+    
+  
+  
+   
+ 
+   
+    
+ 
+ 
+ 
+   
+ 
+   
+  
+ 
+                                                                                       
+                                                                                                         
+  $ & ) ) + . 8 7 7 : ; 7 ; : : ; 6 0 2 4 0 3 5 3 - , / * ) . / 1 1 0 . . 3 7 3 2 - . 2 1 3 0 - - . / 2 4 . 0 + 0 * , . - 2 1 / , 0 1 / , + 0 3 0 , 2 0 0 - - * * - / . / 1 2 0 1 , ' * - 0 0 . + , 2 / 1 + * . 1 * * + 1 2 2 , . ) - , + ) ' + - 0 4 / + ) ) / / 1 3 2 * 1 2 4 1 1 6 7 6 7 3 3 < 2 0 3 8 1 - / 0 / 1 / 0 4 2 2 7 5 6 7 4 0 5 7 5 3 2 6 4 1 1 2 3 3 4 4 2 2 1 6 0 0 / 2 6 . * * . * - 0 * ( * / , . 0 - ( + ( + * + % + + & % ! %   ' % %      % ! ! $ " % # #   # " % ( & # $ ! " $ $ ' &   ! # $ " $ ! # # !   " '   ' ' $ ) %   $ " & " #   !     ! $ % ! # ! %   #   " " !    $ " 
+ $ #  ! 
+ # 
+   ! # !      " $ % " # % % ! # !      
+ 
+ 
+  
+ 
+    
+ 
+ 
+ 
+ 
+   
+ 
+  # % $ # ) * * * $ $ % $ % ) - ' ' ' % ' ) * / ) $ % ) * * & % , * ' ) & ) * % ' ' % * ( $ ( ' ( & & % " $ # & " %   % 
+   
+ 
+ ! 
+ 
+  
+ 
+    
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+ 
+  
+    
+   
+  
+  
+   
+ 
+ 
+  
+ 
+  
+  
+ 
+   
+ 
+ 
+ 
+      
+ 
+   
+     
+ 
+ 
+ 
+ ! $ 
+ 
+  
+     
+       
+             
+              
+ 
+ 
+ 
+     
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ ! 
+ 
+ 
+ 
+ 
+         
+  
+ 
+ 
+     
+  
+   
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+  
+ !   
+  
+    
+  
+     
+         
+              
+ 
+              
+       
+    
+      
+      
+ 
+ 
+    
+         
+      
+   
+  
+         
+   
+    
+  
+     
+   
+  
+  
+ 
+ 
+  
+  
+  
+      
+     
+  
+ 
+ 
+  
+ 
+ 
+ 
+       
+  
+  
+   
+ 
+  
+ 
+ 
+   
+  
+ 
+ 
+ 
+              
+                                    
+                             
+       
+                                                                                                         
+ 
+ $ $ ( + + , , 5 9 : ; ? 7 5 / 5 8 7 3 2 8 . / 4 3 1 , . , + + 1 0 . / , . 0 - / 4 - , 1 - 1 - , / 3 3 - 3 . - ) 0 - - - , / * , . / / - , + 3 2 , 1 - , / - . ) + ) * + * ) , . , 1 + - ' ) * . . . 0 0 3 * + 2 ( * - + / 3 5 . + , 4 , . * & + + , / 0 , , ) - / / * / 0 0 3 0 5 1 6 9 3 8 4 5 7 3 / / 0 4 1 2 0 - - + . / + 0 9 3 8 5 . . 2 2 7 6 6 5 0 1 1 2 3 3 7 7 2 4 0 2 2 / 3 0 0 0 0 / - ) + & , * ( ) , . - + + ) ' % % & , ) ( % % 
+   % ) , # " " #    
+ " " " # ! ! ! ! " # " " " # !  %   % 
+ $ ' # " $ $ $ " !    $ $ $ !   # % ! " " & 
+ #     #    # ! $   % " % ' # ! " !     ! $ "    # !   
+ " %    ! ! 
+  ! 
+ #   " 
+ $ $ # & # $ % 
+ 
+ 
+   
+   
+  
+ 
+  
+   
+ 
+ 
+   " % # % & & ) & ( # * ' & + ) ) # ( ) " ' , ( ( ( * ' ) , - * % # ( ! - % $ & ( $   ' ) * $ ' $ & # # # # % # "     
+ 
+ 
+ 
+ 
+   
+ 
+ ! 
+    
+ 
+ 
+  
+ 
+ 
+  
+    
+  
+  
+   
+      
+ 
+    
+ 
+  
+ 
+ 
+ 
+ 
+       
+ 
+        
+     
+   
+ 
+  
+ 
+             
+    
+ 
+    
+ 
+     
+ 
+      
+     
+ 
+ 
+        
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+  
+     
+   
+   
+ 
+   
+   
+     
+ 
+ 
+ 
+  
+ 
+ 
+  ! 
+ 
+  
+ 
+ ! " 
+ 
+   
+ 
+ 
+ 
+ 
+     
+ 
+   
+                  
+   
+          
+                  
+                   
+  
+ 
+     
+    
+   
+  
+                
+    
+ 
+  
+ 
+   
+    
+         
+ 
+ 
+ 
+ 
+ 
+ 
+    
+   
+  
+   
+ 
+ 
+     
+       
+  
+ 
+    
+ 
+  
+                                                   
+ 
+            
+                          
+                                                               
+                     
+                      " ) 0 . + / 7 7 : 9 9 7 / 2 1 7 7 7 0 0 1 1 / 0 0 ( , + . - / 1 / / 0 / - + , . . , 0 , * * & ) 2 2 0 2 ) ) ( - 0 0 / 3 . , , 1 , * / 0 , * + * + , ) , / 0 & ( * ) ) & ( - 1 + / * ) + ' + * / ( ( - . , - % * ( - * . 4 0 ) ' * * 0 ( * ) * + , ( , . + ) ) , 0 . / / 2 + 2 2 6 6 4 2 6 1 3 4 3 4 / * 2 1 0 / 0 , ) . * * , 6 6 5 4 2 3 0 - 1 5 4 6 3 0 3 2 1 2 2 2 / . 0 5 2 * , , ) 0 1 + * . * ' , ) , / - ) * - , ( ) ( # % ( " ! # # # 
+ 
+ " & % & &   " !   # # 
+ " 
+ 
+     " $       
+  " " $ !   $      
+ 
+     "   
+ " 
+    ! " ! $ " !  
+   # 
+ 
+ ! $      " ! " #     
+ 
+ 
+ 
+   
+ 
+    " % " 
+    ! 
+   "  ! " "  ! ! " ! !   
+   
+ 
+ 
+  
+ 
+    
+ 
+         
+ 
+ 
+ ! % & ' " % & # ' ) # & ) ' $ #   " ' & ( % ' , + + ( $ ( & $ $ $ ) ' $ "   !    ! $ & # $ $ # $ ( # " " " 
+ 
+   
+  
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+ 
+ 
+    
+                             
+             
+ 
+ 
+ 
+    
+  
+    
+   
+            
+   
+      
+            
+   
+                  
+   
+        
+    
+   
+   
+   
+   
+   
+ 
+ 
+ 
+   
+ 
+   
+ 
+ 
+   
+  
+      
+  
+ 
+  
+ 
+  
+  
+ 
+          
+     
+ 
+                                           
+         
+                   
+   
+ 
+         
+             
+          
+                
+   
+ 
+          
+ 
+ 
+          
+     
+                
+              
+  
+    
+           
+ 
+  
+   
+   
+ 
+ 
+    
+  
+   
+       
+    
+ 
+      
+  
+       
+ 
+ 
+                                                                                                      
+ 
+  # $ . - + + - 8 5 6 > 7 . 2 8 1 / / / + 1 - - - 1 + 3 - 1 , - 0 * 1 ) + * / 1 - 0 + - - + / ) . 0 1 , , + + * * , - - * ) ) , - / , / . * + , ( + 1 * . + / ) ' ( + + ( , ) / - ( + ( * * 1 * * + ' , 0 , - * / 1 ) , . + / + ) ( , . ) * ) ( , ( * ( ) ' ) % - 0 0 - - , 1 1 3 7 6 , 0 . / 3 1 0 6 / + 2 6 1 0 3 1 ' ) * / 3 1 7 3 7 6 / / 2 3 / 4 6 . . 1 4 . 2 0 3 - , , 4 / & - + , + * , + 1 1 . . - + - - * ) ' ) ( %   & & # !   $ & # " "     % " #   # ! $ "  #   
+   "   "   # #   
+ ! # "   "    "   
+       
+   " $ " 
+     "       
+ 
+ 
+ ! 
+  
+ !     ! ! " 
+    $     
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+  "  ! ! 
+ 
+   !    # !  
+ 
+   
+ 
+                  
+ 
+ " $ & " " % & " $ % $ '   # % $ '    ' % ' $ $ ' ( ' % % ) & % " # % & $ $ % ! ! ! # & ' ' # " $   $ "  " 
+  
+   
+  
+ 
+  
+     
+   
+ 
+ 
+ 
+ 
+      
+       
+         
+         
+             
+          
+ 
+ 
+ 
+         
+      
+                             
+            
+    
+ 
+ 
+ 
+ 
+ 
+ 
+      
+ 
+ 
+        
+  
+    
+ 
+ 
+   
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+     
+         
+                                                                                               
+    
+          
+                                             
+                            
+ 
+  
+                 
+ 
+ 
+  
+   
+ 
+ 
+    
+ 
+ 
+ 
+ 
+     
+ 
+      
+ 
+       
+ 
+     
+ 
+   
+ 
+  
+ 
+ 
+    
+ 
+      
+   
+   
+                                        
+                                                          ! # # ) - / . - 0 0 4 5 6 0 6 4 3 2 4 3 7 / 0 + 0 2 2 2 0 . 2 6 - , 0 ) * . / 7 4 2 , , 1 , - - . 2 - / , ) / , / 0 / 1 / - . 3 . - 0 . 1 , 1 * + / - . , + + - - - , - , , * - / + - , , + 1 - + ) ( - ) - , * . - . ) + ) - + + ( * 0 + * ( * * , * - , ( ' % ( 1 , - . 2 0 0 0 - 2 1 / - - 5 2 2 2 1 - 4 6 4 . 1 - . * ) / 2 1 7 3 3 1 1 3 3 1 / 1 2 / 1 2 0 - 4 2 3 3 + 0 3 0 , - + . , - , ' , 2 / , & + - + ) ' ( * * & ) ( ' ) $   " "     # " " ) # $    " 
+ 
+ 
+    ! $ 
+     " " ! " $ ! 
+ ! #  # " ! $ !  " 
+ ! # !   # " %   " " #   ! " ! # 
+ 
+ " $  
+  
+ 
+  % ! " 
+ ! $ " ! 
+ # 
+ 
+   # # 
+ 
+ 
+ 
+ !  
+  
+ 
+ 
+ 
+ 
+ !   
+ 
+ 
+ 
+     
+    
+ 
+ 
+    
+   
+         
+  
+ # & % & # " % " ' " " % $ % & ! # $ ' ! # % ( & ( " $ % ) ' % $ # "  # & & # ( ' % & & $ % " # "  " 
+   # 
+ 
+ 
+     
+  
+ 
+ 
+ 
+ 
+   
+ 
+    
+ 
+       
+                        
+             
+ 
+        
+    
+ 
+       
+         
+                         
+              
+ 
+ 
+  
+ 
+ 
+ 
+  
+ ! 
+ 
+    
+  
+ 
+  
+    
+  
+ 
+ 
+  
+ 
+ 
+   
+ 
+  
+   
+     
+  
+ 
+    
+                                                                 
+                                       
+ 
+         
+                           
+                           
+                            
+    
+ 
+ 
+ 
+      
+   
+  
+ 
+ 
+ 
+  
+    
+  
+ 
+ 
+ 
+   
+  
+ 
+  
+ 
+  
+  
+    
+   
+          
+    
+ 
+    
+ 
+   
+   
+ 
+  
+  
+ 
+  
+                                                                   
+         
+        
+          
+    " & ) + ' + / - 2 7 4 5 . 7 8 2 1 8 3 4 3 . - - . / / - . 1 2 0 / - , - + / 3 4 0 1 / 1 , - - 5 6 0 / . + ( * . * 0 / 1 0 1 . . . - + + / + * 3 1 - / * ' , . ) ' . - 1 - / + * - ( 0 . . - * + & ( ( + . & * + * ' 2 + * , * 0 , * , . 1 * + * ( ) - + ' + ) - . - ) - . - 0 / / - 1 * ) . 5 1 5 0 1 1 - 0 - / 0 - 0 , * 3 7 3 3 2 4 7 6 2 1 0 0 1 4 - , . * - - * 0 2 . / / . + * - 0 - ' + ' + 0 0 0 ' + * * + ( ( ) ) ( * $ * & " !  " " 
+ !   " " !    # $    "   $ #       " ! ! # )   
+  $   " "   !   ! 
+   % "    # $   
+ !   " !  $ % !     
+   "      " ! 
+  
+  
+      # 
+ "   "  
+  ! !   
+ !     
+  ! ! #   ! 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ !   
+ 
+              
+  
+ # & % % ) " % ' $ $ % ' $ " # % $ & $ # # # & % % % ! ) " # % ' $ )   " & ' $ ( % & & # ( ' ' # # ! # 
+ ! % 
+  
+ 
+     
+ 
+ 
+     
+ 
+    
+  
+                                   
+           
+ 
+       
+   
+ 
+      
+                                                   
+  
+ 
+      
+ 
+    
+   
+ 
+ 
+ 
+  
+  
+   
+   #       
+ 
+  
+ 
+     
+                                                                                         
+         
+               
+                                                             
+  
+                        
+ 
+  
+  
+ 
+ 
+ 
+ 
+    
+   
+      
+   
+ 
+  
+  
+   
+    
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  
+    
+  
+   
+ 
+      
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+                                 
+        
+                                 
+            
+           $ # " $ ' * ) - 3 3 5 6 8 4 3 2 4 2 0 1 3 7 0 , , - , - * - . 0 . - 1 - , - 0 6 6 9 2 / / 1 2 0 . 0 + + - 2 2 0 * . - - 1 0 0 . - + - , 2 + - / - 3 0 0 - ) ( - , - + * / / + , + + ) - / 2 1 / , + ) ) * . * ' ' + + - 1 ( - . . . * * , , , + - * - , ) + ) * , ( . - ( / 1 4 3 1 2 1 1 . , . 2 . 1 1 3 3 / / 2 / - 3 4 3 3 0 1 4 0 1 0 4 5 0 3 4 5 3 3 , + - . 4 3 0 1 6 , 3 / / - . 0 - * - 3 / , ) & * & 0 ) 2 * ( ) - . & * ' ) ) ! ! ! # "   ! ! 
+ ! " " 
+   ! 
+ " $ !    $     " # ' % " " # ! #   ! % $ ! " % "   "  
+    $ !  
+   $ %     #   
+  !   $ #   
+  !   ! "  
+ !   !     
+ 
+   ! # 
+ 
+  ! 
+ 
+   !   
+ 
+  
+ 
+ ! ! 
+ 
+ 
+   $ ! ! 
+ 
+ 
+             
+   
+    % , + + '   ! " ( % % $ % % # * * ' % # # % $ # $ & ' & ) ( ( $ % & ' ' ' ' & #   ' ' ( & $ ( # # "  
+          
+  !   
+  
+    
+        
+ 
+                               
+ 
+        
+   
+ 
+  
+ 
+                     
+     
+ 
+           
+                          
+  
+  
+    
+ 
+ 
+   
+ 
+    
+   !       
+ 
+ "   !  
+ 
+       
+     
+ 
+    
+        
+                                                                                      
+            
+          
+    
+            
+                                                  
+  
+       
+        
+ 
+ 
+ 
+ 
+ 
+     
+   
+          
+  
+  
+     
+ 
+ 
+ 
+ 
+ 
+      
+   
+   
+            
+     
+ 
+         
+ 
+ 
+ 
+ 
+                                                                                                
+ # " ! "   ' ) + / 0 3 3 8 1 3 0 1 1 3 4 1 6 - + * / 2 , - - 4 . - . 0 3 . , 4 2 ; 3 / . - 3 / - . 2 0 , , - . 3 . - + * - , , , 0 - + , 1 + 0 5 0 - . - / ' & * / / / * ( + * - . ( + - + * + . / 0 * / / . - * . , - + . . - 1 2 1 + * * ( ) / 1 , 0 , - - / ( - ( 0 2 + / , 3 1 7 , + 1 5 0 1 - 2 3 6 2 5 5 4 0 0 . 2 - 4 / , 4 2 1 4 2 / / 2 4 2 : 4 7 - , - 2 3 1 1 3 2 . 1 2 2 0 0 2 . - , - . ) & / . ' . + 0 4 * ) . - , ( ( ) - % ' $   # # 
+ 
+ ! %     
+ !   $ % " $ "  
+        # % $ !    # ! 
+   !   " &   ! " " 
+ 
+   " & ( $ $ ! " " 
+   "   " # " % ! !   
+  ! ! 
+ ! & % # ! " " # !  "   # & "   
+ 
+ "     
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+ 
+ " "    
+     
+   
+ 
+      
+  
+    # & + % & $ # $ " % ) % ! # & $ % & & ( &     & # $ ' & ' ) ) ' % % ' ) ) + % $ & # # ) % % & $  " #  
+ "  "  
+ 
+ 
+ 
+ " # ! 
+      
+ 
+ 
+ 
+ 
+ 
+        
+             
+     
+   
+       
+        
+ 
+  
+ 
+ 
+ 
+   
+  
+ " 
+  
+                
+  
+         
+  
+          
+       
+     
+     
+    
+ 
+ 
+ 
+   
+ 
+        
+ 
+        
+   
+  
+ 
+   
+  
+  
+ 
+ 
+ 
+ 
+   
+  
+ 
+    
+ 
+ 
+  
+      
+                                                         
+           
+                                    
+    
+            
+                              
+         
+                           
+        
+     
+    
+ 
+       
+  
+     
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+    
+  
+ 
+     
+    
+        
+         
+ 
+  
+  
+ 
+ 
+   
+                                                                                             
+ 
+ # ' " ! ! , 0 . / 2 7 @ 6 3 0 3 1 4 2 7 4 2 0 / . 0 3 2 , 2 / / 0 4 5 + * 7 / 3 0 2 + 0 1 0 , 5 . 0 / 3 / , - + + / , 1 1 - / 2 3 . . / , , , + 1 0 / * / , + 1 / - + ) - . 4 1 + + ) , . - 1 / 1 0 3 1 2 - , + ' , + * + - . 3 . + ( , / * + / 0 / * 0 / 0 + / , ) + , 1 1 2 6 8 2 2 5 7 / 0 - 0 8 7 7 4 3 3 + . 0 2 4 0 4 4 3 3 5 5 2 2 1 6 4 0 6 2 4 1 0 5 3 2 1 5 7 / / 2 6 2 0 - . 4 2 5 / . - + - 1 / / 1 4 1 + - + - , ( + ( ( ' $ # ! # & # % $ % $ %   
+ ! ' % & ! & # ! $ ! ! ! #  ' 
+ # ! % # $ " % &   (  
+ ! 
+ ! % % $ " ' " $ % $ !  !   ! % " " " " # ! %   ! ' ! " ! # " # ! # # ! # " $ $     ! 
+ ! # "  &      !  #    " " # ! % # % % $ ! $ 
+       
+             ! %   & ) % % ) % % % & " % ! & % # ' ( ( % " ( # # ' + ' % ' , & $ $ ( ( % ' $ % ' & ' % ' ' # $ $ % # # " & # $ 
+ " " 
+  " ! 
+  $ 
+ 
+   
+ 
+ !   " 
+   
+   
+ 
+ 
+ 
+    
+ " 
+     
+  
+  
+     
+ 
+  
+ 
+ 
+   
+ 
+ 
+     
+      
+  
+  
+ 
+   
+  
+ 
+ 
+ 
+ 
+  
+           
+        
+ ! 
+ ! 
+   
+ 
+ 
+   
+  
+               
+ 
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+  
+  
+   
+  
+     !   !    
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ $ 
+ 
+   
+   
+     
+ 
+   
+  
+ 
+   
+   
+        
+                  
+                                                  
+ 
+               
+        
+  
+ 
+  
+      
+            
+ 
+ 
+   
+       
+          
+       
+ 
+ 
+    
+   
+  
+  
+   
+ 
+    
+           
+             
+     
+ 
+ 
+                 
+  
+  
+  
+            
+  
+               
+         
+  
+    
+     
+                                                                                            
+  " ! $ & ' . 0 - 3 3 ; < 7 5 1 / 2 3 3 5 2 6 4 9 4 4 - 0 . 2 . . 3 2 - + / 6 / 0 - / 1 0 - / / 2 1 0 2 3 1 - 3 . 0 3 0 4 6 1 / . - 1 - 0 . . . . 3 2 4 / 3 0 . 0 + / . / / - 4 0 0 3 3 . - 0 2 0 / . 2 0 / 0 5 1 / 0 . & - 0 , 2 0 ( * 1 1 0 , / / 2 ) * 2 3 0 7 3 4 2 - 1 0 8 7 4 3 7 3 8 : 3 . 3 7 7 4 6 5 6 - 0 0 2 0 4 7 8 6 5 3 5 5 : 8 8 8 1 4 0 1 6 5 0 4 3 1 6 3 4 3 7 8 6 / 1 . 3 3 1 / / , / 2 1 - - 1 0 0 1 0 , - - , + ) ) * ' $ # " & # % ) $ $ ' # $ $ & "   " $ # ! # $ % $ ' $ % # ! " ' ( $ % & ' & &  % $ $ $ ( ' # " # $ & ' & " " ! $  ( & &  ! % & ) # % $ ! ! 
+   & % % & % " ) # # % "  !   ! # " " $ #     ! # " "   ( ' % % & ' % % ) $ # #  
+ 
+ ! 
+  
+ 
+ 
+     
+ 
+ !  " % ' ) - - ) + * + * ) ( ' * + ) ' ) * * ( ' ( * + * * + ( * , , ) ( ( - ' & % ( + ' + ( ) & ' % $ & # % & # ! # ! & % 
+ ! 
+ 
+   !  
+ ! $ !      ! 
+ 
+ #    
+ 
+    
+  
+ 
+  
+ !  
+ 
+      
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+   
+        
+  
+ 
+ 
+    
+ 
+    
+  !  
+ 
+ 
+  
+  
+ 
+   
+ " 
+ 
+    
+ 
+   
+ 
+ !   
+ 
+  
+   
+    
+ 
+ 
+       
+       #       % !  
+ ! 
+ 
+ 
+   
+    $ ! 
+  
+ " % ! "        
+   
+  
+ 
+  !  
+ 
+ 
+ 
+     
+ ! " ! ! ! 
+    
+     
+        
+  
+        
+     
+       
+            
+ 
+ 
+         
+   
+  
+     
+     
+ 
+ 
+          
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+      
+   
+  
+  
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+        
+ 
+ 
+     
+        
+ 
+ !  
+     
+  
+    
+ 
+  
+  
+ 
+ 
+  
+ 
+   
+     
+ 
+ 
+                                                                                                 
+                                                                                                 
+ " # # ' ' ) - . . 5 6 6 7 5 3 3 6 3 8 3 5 4 3 2 5 5 7 5 6 3 4 1 . 2 - - . 2 3 1 0 / . / , , + + 2 7 1 4 7 4 1 4 7 2 / + 4 4 1 , 1 2 2 - / - , , 0 3 * 1 3 5 4 4 0 , / / - . , 0 1 2 3 0 1 0 1 1 + * * 7 / , - 5 3 2 2 2 + / 2 / 2 1 ( + . . - - 0 0 0 0 - , - . 3 0 0 / 1 1 5 7 4 5 8 3 7 9 5 6 3 4 8 : 7 4 4 4 1 7 5 3 4 4 6 4 6 5 1 5 9 7 7 5 6 1 5 2 6 < 7 8 : 4 4 7 1 3 7 3 5 6 3 4 2 2 3 / - - 5 3 3 1 1 0 - , + / 3 0 0 0 . - ) , - ) & ' ' $ ( ( ( % & ' % " " $ #   # # " % $ # ' % , + ' % & % $ & # & ) ) & % $ $ # # # % ' " # $ $ * ) & ' ! " $ # % $ " # " $ $ $ " % ( & & ! " $ $ % ' # # $ # % % $ $ # $ # % ! % % ' ) ! 
+ ! # "   # # % " # & ) $ $ " $ % " 
+ 
+ 
+    
+ 
+ 
+  
+ 
+ "   ! " % $ & , / + ' * & ' . * + - - * ( ( * , * + * ) ) ( + - / / + , * , + + - ( + ( * , - , ( ) % & & $ # $ ( & ' $   ! % #  # 
+  ! ! !  #    
+   
+    ! !   
+ " 
+   
+ 
+  
+     
+        
+ 
+ 
+  
+   
+ 
+ !  
+  
+ 
+ 
+    ! ! 
+ 
+ 
+  ! 
+ 
+ 
+  "     "   
+ 
+   
+ 
+  !   
+   
+       ! 
+ 
+   
+ 
+    
+  
+     
+ 
+ ! !  
+ 
+  
+ 
+  
+  
+   
+ 
+  
+   
+ 
+ " ! ! 
+    ! 
+    
+  
+   
+  
+ # 
+ " ! " $ $ 
+ 
+ 
+ 
+ ! 
+  "    # " " " 
+ 
+ !  
+ ! 
+ 
+ 
+ " ! 
+   " " # $ "  
+ 
+ !  
+   
+     
+     
+  
+     
+  
+      
+  
+  
+      
+   
+ 
+  
+ 
+   
+    
+   
+       
+  
+ 
+ 
+   
+ 
+      
+   
+  
+    
+  
+   
+  
+ 
+ 
+   
+ 
+ 
+ 
+         
+     
+   
+  
+ !   
+ 
+ 
+ 
+ 
+ ! 
+  
+  
+     
+  
+  
+ 
+ 
+  
+   
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+                                                                                                                                                                                                
+    ' ( ( ' / . 5 5 3 4 : : 9 3 7 5 6 / 5 7 2 . 2 2 3 . 6 1 5 2 0 4 5 / , 1 1 4 2 / , . - / / - 3 1 1 0 5 3 3 . 5 2 3 / / 0 3 1 6 2 . , . , . . 0 2 1 4 6 4 1 4 1 , . - - , 1 / 3 0 - - 0 1 0 4 / ( ( 4 / 0 2 1 - 3 1 + . . 1 0 0 / - . / 0 . . 2 4 , - , . 4 0 / 0 4 4 . 0 2 7 6 0 0 3 4 3 3 < 6 5 3 7 8 3 0 2 7 8 7 4 6 7 6 6 9 4 6 3 8 7 1 7 3 3 6 6 3 3 4 9 : 4 8 9 5 3 4 4 6 5 3 0 2 3 3 4 3 4 2 1 1 - 1 - 2 0 - ) 0 / , * - , + 1 . ' % # ( & " $ & % ) ( % $ ( * %  ! # $ ( ) + * ( ) ( ( $ ' $ & $ # $ ' ( # " $ # ' ( ' ' & & % ' $ ' & % % ' $ " ! " $ $ ! " # # # " $ & ' # # & & % & & ' % # % % % $ " # # # ' # & $   & $ $ ( ) $ & & $ ) % " % , ) & % ! ! % % " ! 
+ ! "   
+      " !  ! & % ' * . , * * ( & , * - * ( ( . ( , + , * ) & , + , * , / 0 - * 0 * ) , ( ) , * . ) & % ) ' % ( $ & ( ' &  ! " %   # $ ! " 
+     ! 
+ !   # " " #   ! ! 
+ 
+ 
+ 
+   !   
+   "  
+ !     
+ 
+ 
+ 
+   
+ 
+    !   ! 
+  
+   
+ 
+   
+ " "   
+  
+ 
+     
+ !  
+    
+  
+   # "  
+ # 
+  
+ 
+  
+    
+  
+   
+ 
+    
+ 
+   
+  
+   " ! !   
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+   # 
+ 
+ 
+ 
+ !  
+      $   $   
+ 
+ ! " ! 
+ 
+ 
+  " # $ " #    
+  #   ! "   % # # %     !      
+ 
+   #        
+   ! 
+     
+ 
+ 
+ 
+ 
+  
+   
+                
+  
+   
+ 
+     
+   
+ 
+ 
+ 
+ 
+  
+     
+    
+ 
+   
+        
+  
+    
+    
+ 
+ 
+  
+    
+ 
+  
+  
+ 
+  
+ 
+ 
+  
+ 
+    
+    " 
+   
+ 
+  
+      !   
+ 
+ 
+ 
+ 
+ 
+  
+    
+ 
+ 
+    
+ 
+   
+ 
+ 
+  
+ 
+ 
+ 
+      
+ 
+  
+ 
+ 
+  ! 
+ 
+  
+ 
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+   
+  
+                                                                                                                                                                                              
+ !   % $ & * * . 1 0 4 0 5 ; 4 0 6 7 3 3 6 6 6 0 4 4 5 2 5 6 . 0 4 6 7 0 - / - 4 / + 2 1 - - 1 2 3 / 3 5 2 - 2 5 1 2 5 4 0 5 5 3 4 / / 1 0 2 / / * 1 0 0 1 . 0 0 1 + * . / + , * / . . * , 1 . 4 1 ) - . 0 2 3 . + 0 , / 1 0 2 4 1 . + 4 . . + - 1 - 0 0 + * 0 0 0 2 3 3 3 5 1 3 4 . 1 9 7 4 7 4 4 3 6 6 6 6 7 4 4 : 7 6 6 6 5 3 9 4 5 5 8 ; : 4 1 4 < 8 2 5 9 8 2 2 2 3 9 6 9 6 3 : 8 6 / 0 2 . 2 4 6 1 1 , 6 - 5 / 6 . , . , , 2 0 2 / , , ) % & $ ( & & , ( " # % ( ' $ ( ! # ( ' ( ' * ' & & & ) * $ ' ' % ' * , ' ! " ' ' ) & % * ' ' ' % # & ( % $ $ % $ & $ $   " " ' ' !   $ $ " & # $ & $ & + * ' & $ "   !   # " # ' &    # # ' $ # # ( % ( , ' % " % ( $ + !   # $ " 
+ 
+   
+ !   "  ! ! ! 
+   % $ & + * - ' ) * 1 + & , ) ) * , $ ' , ) ) & ) - - . + ( , + * + ( % $ ( . * - + ( ' % ' ' & ( ( & ' ( + ( ! #   $ # &   
+ 
+ 
+ 
+ # ! 
+   #  !   $ " # 
+ 
+ ! # " ! 
+ 
+   
+ 
+   
+ 
+ !   
+       
+   
+ 
+   
+ 
+ 
+ 
+ 
+  !    
+    ! ! " 
+        #    
+ 
+ 
+ 
+  
+ 
+ 
+   $ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ ! 
+      
+   ! " # 
+   
+  
+  
+     
+ 
+ 
+  
+  
+ 
+ 
+   
+  # % "   
+ "  
+     ! 
+ 
+ 
+ " "  ! "   
+ 
+ 
+ 
+       $ ! % #  
+ 
+ ! " ! 
+   "   ! & !  
+ 
+   
+    !   
+  
+ 
+    
+    
+       
+ 
+       
+             
+ 
+ 
+ 
+   
+ 
+ 
+      
+  
+ 
+  
+     
+      
+ 
+ !       
+ 
+ 
+ 
+    
+ 
+ 
+ 
+     
+  
+  
+ 
+ 
+ 
+  
+ 
+   
+   
+ 
+ 
+ !   
+  
+  
+ 
+  
+    
+ 
+ 
+ 
+  
+      
+  
+ 
+ 
+  
+ 
+ 
+  
+ " 
+ 
+  
+    ! 
+ 
+  
+ ! 
+    
+ 
+ 
+   
+ 
+   
+ 
+    
+ 
+ 
+  
+ 
+  
+  
+                                                                                             
+                                                                                                   ! " ! # $ + * / * . 3 4 5 5 . 0 0 1 0 5 1 3 7 2 8 < 9 6 6 / 0 . 4 3 3 4 2 / / 2 2 + 3 1 / / 4 4 6 4 4 8 4 2 - 5 6 6 5 2 3 6 - 3 3 3 - 1 3 2 / 0 1 / / 0 - - 2 2 - . / * ) ) + + . - / * + . 3 1 2 * / , / 4 / 1 1 * 2 - - . - , / / , 0 , + ' ( 0 1 1 / / . - , - 0 1 4 2 1 2 4 3 / 1 6 4 5 4 4 3 3 4 3 3 1 4 5 . 4 3 / 0 / 9 : ; 3 5 4 7 3 4 7 6 7 9 1 5 3 4 7 3 2 7 8 4 8 8 9 : 4 4 9 - 0 2 3 5 - - - 0 / . 2 6 - 1 . + - + / / 2 0 - 0 ) % $ % ) ( ' $ & &  ' & ' $ & ' ' # ' % & ' # % % $ + + & * ) ' ) & $ + * ' ! " & ' % & % % $ ! # # " $ % ! " # ' # & $ # + # % # ! ! % ( ! # ! # $ ' % % * & " " $ " # # " # " ! % #   " & ( ( " # $ % $ ( ( ( % & & % # ! 
+   # "   
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   ! 
+ ! & - , ) ) % ' , - ( , - % ' , , , , * + ( & ) , , * - ) ( ' % % % % ' ) * ) ( & * * + ( ) * * % ) $ ( ' % " &     # # ! !    
+ " # # ! " $ 
+ 
+ " 
+  
+  # % 
+   
+ 
+ 
+ 
+       
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   
+   
+     
+ 
+    
+ "    
+  
+   
+ 
+ 
+ ! 
+ 
+    
+  
+ !  "   ! #  
+ 
+  
+ 
+ 
+ 
+     
+   
+ 
+ 
+ 
+ 
+ " "   
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+     
+ ! ! 
+    
+ 
+ 
+ 
+ 
+ !       # $ $  $   
+   ! #   
+   #  
+   
+ ! 
+ 
+ 
+ 
+ 
+ 
+ " # " ! "    
+ 
+ # " " ! " # 
+              
+      
+ 
+ 
+ 
+     
+ 
+ 
+ 
+ 
+    
+  
+  
+    
+      
+    
+  
+  
+ " 
+  
+ 
+ 
+     
+ 
+   
+  
+  
+    
+ 
+   
+      " 
+   
+ 
+ 
+ 
+     
+ 
+   
+  
+   
+  
+      
+ 
+     
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+     
+    
+ 
+ 
+  
+ 
+  
+  
+ 
+     
+ 
+ 
+  
+  
+ 
+  
+   
+ 
+      
+ 
+ 
+ 
+ 
+ 
+   " 
+ 
+ 
+   !     
+ 
+     
+ 
+ 
+                                                                                  
+                                                                                                             
+ "  " ( ( ' - - - / / 6 2 4 2 2 0 1 3 2 1 6 5 0 7 7 3 3 2 6 / 1 2 1 0 . / - 0 3 0 2 1 1 0 . - . 7 3 1 7 4 4 , 2 8 4 5 5 . 2 3 2 4 . 2 3 9 3 4 / - 0 . + , . - 2 . . , ) / - 0 / 1 , , 0 , - + . / + * , * 1 / . , - 1 1 . ( ) * . / ) + ) ( / / + . . / . . . . / / 0 / 1 . 5 4 , 1 2 0 2 5 5 3 4 1 6 3 1 6 / 1 4 6 2 , 3 . 8 6 4 8 9 4 4 9 3 5 3 ; 9 1 4 5 3 6 2 3 0 3 2 7 3 0 5 4 6 4 0 3 2 0 3 . , 0 - . 1 1 3 3 - 0 . - ) - 1 0 + ( ' ( % ' # % $ ( % % & & % $ " # & $ # ' ' % % % # % & # ( ' ' ' ( ( #   ! $ ) * ( ' $ " # & & !  "   # ) !      # " ' & $ & % ' "   " $ # "     " " # ! $ " $ $            !    $ " # $ $ # ' # ! " " #   $ % $ & ' %   " " 
+ 
+     
+ 
+   
+    
+ 
+  
+  # " ( ) ) % . $ % ' + ( * ( ) ( ) * + / , ( ( ' & + ( ) * ( ) & ' , & $ ) ' * $ % $ ) $ " % $ % ) ) ( $ $ % ) $ $ ! !     " ! #   ! # 
+ ! " #  ! 
+ 
+ 
+ ! " " ! 
+  
+ 
+ 
+ 
+   
+ 
+        
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   "  
+ 
+ 
+  
+ 
+ 
+   ! 
+ 
+ 
+ 
+ ! 
+      !  
+    % " !  
+   
+      
+ 
+  
+    
+ 
+   
+ 
+  
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+  
+ 
+  
+ 
+   
+ 
+    
+  
+ 
+   !   !   " ! 
+ ! 
+ 
+  
+    
+  
+  ! #  
+  
+ 
+ 
+ 
+  $          
+  "  
+ 
+ 
+ 
+   !          
+ 
+   
+ 
+ 
+ 
+  
+ 
+  !    
+           
+            
+   
+  
+ 
+    
+ 
+  
+    
+ 
+ 
+  
+   
+         
+   
+ 
+     
+   
+    
+ 
+ 
+        
+ 
+  
+ 
+  
+ 
+       
+ 
+ 
+ 
+  
+ 
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    !   "  
+ 
+    
+ 
+   
+       
+ 
+ 
+ 
+   
+     
+  
+  
+  
+ 
+  
+ 
+     
+    
+  
+   
+ 
+                                                                                                                                                                                               
+    # ' + ' * ' + 2 1 5 2 / 1 3 / 4 5 1 5 7 3 0 2 0 4 / 8 3 1 1 2 0 2 5 2 - 1 / 2 0 + 3 / 1 . 1 8 1 / 2 3 - * 3 1 0 2 9 1 1 / 0 / / 2 2 5 + 0 3 / 1 / + 1 1 , + + 4 - 1 2 2 . 0 . . , . 0 . / . ( ( * , - - + * , . 2 2 0 . , + + * - ) + , . , . , ) / - / . , ) , , 2 0 3 0 2 2 2 2 / 3 8 2 4 2 1 2 3 1 2 4 4 8 5 2 1 / 2 5 5 2 3 4 9 ; 9 4 2 6 7 3 2 8 7 8 5 4 0 2 7 8 9 3 4 3 4 7 5 1 - 3 1 1 0 1 , + - . 1 4 1 1 . / 0 + + 1 / , + ( & % $ ! % & ) ) ! % & # & " " $ % # % " " % ! " ! % $ & ( & ) ( " ' " $ & ' $ ) " $ # '   ' % # $ " " % & ! ! % $ ' " ) ' % % ' !   # ! # " # # "  ! ! $ $ ' *  ! ! 
+ 
+  " " # % $ # % #   "   " % ' &    # # % % & # ' ! "   
+ 
+ 
+ 
+ 
+   
+  
+   
+  
+ 
+ 
+ " " ! ' * + * $ $ & + + , , - ( ) / / , ( & ' & , + * + ' % & " ' & * ) ( ( ( & ) ) ( $ $ &   ) $ % ( ! " # ! " 
+    ! 
+   " # "      
+ " "  
+ 
+ !   
+ 
+  
+ 
+ 
+ 
+ 
+    
+ 
+  
+     
+ 
+    
+ 
+ 
+ 
+  
+  
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+   
+ ! 
+ 
+ 
+  # 
+ 
+ 
+  
+   ! 
+ 
+  $ ! 
+   
+ 
+ 
+ ! !  
+  
+ 
+ 
+ " 
+      
+ 
+ 
+ 
+  
+    
+  
+       ! ! 
+ 
+ 
+  
+    
+   
+   !  
+ 
+ 
+ 
+ 
+    
+  
+ 
+  ! 
+ 
+ 
+ !   
+ 
+    
+ 
+ " 
+   !   
+ 
+ 
+ 
+  
+   
+ # 
+ 
+ 
+   " # 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+           
+ 
+           
+   
+  
+     
+ 
+   
+ 
+      
+      
+          
+   
+ 
+ 
+  
+ 
+     
+  
+     
+ 
+ 
+  
+  
+ 
+  
+  
+  
+ 
+ 
+ 
+  
+ 
+  
+   
+ 
+ 
+  
+ !   
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   ! 
+     
+  
+  
+ 
+ 
+ 
+  
+ 
+ 
+    
+  
+ 
+    
+   
+ 
+ 
+  
+ 
+  ! ! 
+   ! 
+   
+                                                                                
+                                                                                           
+                      ! ! ! " ' ' ( & - / 3 8 3 2 6 9 3 4 3 2 6 5 1 . 1 7 6 7 9 5 5 2 1 0 1 3 7 2 3 + . 5 - - - / 5 2 . 3 3 4 4 / 0 . 1 / 4 3 2 . 0 , 1 / . 2 2 , . 0 1 . 3 - 1 . * / + / 1 . + / / 3 2 / - / 1 . - + - + 0 1 + - / , / / - / . * % ( ( - * - / 0 1 / / 2 & & ) * ( + + + , . ' - 1 3 1 0 2 0 4 2 3 5 5 7 . 2 7 2 3 5 / 5 . / 0 0 - / 2 3 3 4 2 7 6 4 4 4 2 4 6 7 4 4 7 1 2 1 1 7 6 0 1 9 3 4 1 1 8 4 2 0 . - - . / 2 0 , / / . 1 / , + / . * ' ' & $ " ! & ( % " " ' # ! " $ # # " % % # # $ ( $ ( $ # $ # & ' & $ ' & $ & # " %   $ * % & $ % ' ! $ # ' & $   # $ % & $ $ ! " !  ! #     " !   $ ! " # $ & % "   
+ " 
+ 
+ ! ! % " !        " $ " # $ 
+   & " %  ! # ! #   
+  
+ 
+   
+ 
+ 
+ 
+   
+ 
+  
+ 
+  !   ! ( - ) * # $ & ( % ' ' ! ( ' / ) * ( % & % ) - * & % " # $ ' $ & & ' * " % ( ' ' % $ # $  " ! # ! # % $ " " 
+   !     
+   "   !  
+      
+    
+ 
+ 
+     
+ 
+    
+     
+ 
+ 
+ 
+   
+ 
+   
+ 
+ 
+   
+ 
+ 
+   
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+    
+   
+ 
+ 
+ ! !  !      
+ 
+ 
+  
+ ! 
+  
+  
+   
+ 
+ 
+  
+ 
+ !      
+ 
+   
+   
+  
+      
+ 
+ 
+  " 
+ 
+  
+     
+ 
+ 
+    
+ 
+ !  
+ " 
+        
+     
+   " 
+  ! 
+  
+ 
+ !   !   
+ % 
+   ! # 
+ 
+       ! # 
+         
+          
+   
+     
+ 
+       
+   
+ 
+               
+ 
+      
+ 
+  
+   
+  
+   
+ 
+ 
+    
+          
+    
+    
+     
+ 
+ 
+ 
+    !  
+ 
+    
+  
+   
+     
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+  
+  !    
+   
+  
+    
+ 
+  
+    
+   
+ 
+ 
+ ! 
+ 
+  
+  
+   
+                                                            
+                                                                                                                                     
+  % # ! ' - , 2 0 4 6 2 2 8 5 2 1 0 6 6 8 2 / 2 1 6 4 5 2 0 8 4 4 0 2 4 2 2 - 5 5 0 2 + - 3 4 0 - 1 4 / 3 2 . 0 4 2 . / . 0 5 0 1 1 / / + . 3 . 0 1 - . . , / . 2 0 , / 2 2 5 0 , + / 3 0 / . + - / 3 ' . 2 3 . - , - / + * + & ) ( , / / - 1 . / ( & ( * , 0 . 3 - 6 - . / 4 4 3 / / 3 + 1 8 3 2 / 0 1 2 3 0 - , * . 3 0 0 . 1 1 8 : 3 6 2 7 4 0 2 6 3 5 6 5 9 4 2 3 4 4 3 5 7 9 4 1 1 . 4 4 / - 0 1 / - 0 0 1 ) 0 - 1 0 + + , + , ) % ' % & * ! # ( $ $ # ' # # " %   "   $ !   # " # % & # & % % $ $ $ % $ " # # " " # $ % ( # ! $ " ! # ! " ' & " ' ! ! # # ! 
+  "  " ! "   
+ #   $ % "  
+  
+ " " !   $  " ! " " ! !  # 
+ 
+ $  " ! 
+ # ! " % " !   $   % # 
+  
+ 
+ 
+ 
+    
+  
+ "    
+ 
+ 
+ # #   # + + ) , , ' ( % ' % $ ( ( ' ' ' ' ( - ( " ' + * ( % $ # # + & $ * % ) ( * ' % $ $ # !     
+ # ! # $ %   
+   " ! 
+ ! 
+ 
+  
+ 
+     
+  
+     
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+  
+ 
+  
+ !  
+   
+  
+ 
+ ! 
+   
+ 
+  
+ 
+     ! 
+     
+      
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+    
+ ! 
+  
+ 
+  
+ 
+ 
+ 
+      
+ 
+  
+ #    
+    
+ 
+  
+ 
+ 
+  
+ 
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ "   
+ 
+     
+ 
+  
+ 
+  
+ 
+  
+  ! 
+   
+ 
+ 
+ 
+     
+  
+                       
+ 
+        
+            
+       
+      
+ 
+  
+     
+   
+   
+      
+    
+ 
+ 
+         
+  
+ 
+     
+ 
+ 
+       
+    
+ 
+ 
+   
+    
+      
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+          
+   
+   
+ 
+ 
+ 
+     
+  
+ 
+    
+                                                          
+   
+     
+            
+          
+       
+                                                                                                   
+ " % ! # ' % ( 3 0 5 / . 7 5 6 4 6 / 6 9 4 3 0 4 : 8 1 2 1 2 2 0 , . 1 1 2 1 / 0 / 5 3 . / 1 0 1 0 1 2 0 . 1 1 0 2 / 1 . - 1 3 0 2 1 1 - + . 1 . 1 - 1 1 . , , + - 0 + + / 0 / , * ( / - . + - - . - 0 , , 0 4 , , ) * - 1 2 1 - ) ( . 0 / , - ' ( ) ' ' ) . , - . 3 5 0 + + . / 0 - / 2 , 1 2 8 4 3 - - - 0 0 , + . 1 1 / 7 2 / 3 6 8 5 5 1 9 3 2 8 5 1 0 6 3 6 4 1 - 1 6 3 5 : 5 1 / / . 1 0 0 . 0 1 0 1 0 / - / , . , * + + ' ) + * $ # ! % # $ # % ) " $ ) % # 
+ $ $ ! " $   ! "  $    ! & # % ) "   !   & " " " $ " # $ " ! # 
+ "  !   " % & ' "  ! !   " "  
+     ! $   ! " %    " !  
+ ! "  
+   ! 
+    
+ 
+ "     
+ ! $ $ # $ 
+ 
+ 
+ ! % $ " # % " ! "      
+   
+      
+   
+     
+    $ & $ * + . , + ( ( % ) % ) ' * ' ( 0 & ' + ) ( $ ) ' % ( & % # ) ( & ' ' & ' & # ' ' & $ % "  " " # ! " ! "   ! " !    
+ 
+   
+ 
+ 
+ "    
+  
+      
+ 
+ 
+ 
+  
+  
+ 
+   
+   
+   
+        
+ 
+  
+  
+ 
+   
+  
+ 
+ 
+ 
+  
+ 
+   
+   
+ 
+   
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+  
+        
+ 
+ 
+ 
+   
+ " 
+        
+    
+   
+ 
+ 
+  
+   
+  
+      
+  
+ 
+  
+ 
+    
+ 
+  
+    
+  
+  
+  
+ 
+     ! 
+ 
+ 
+ 
+ 
+ 
+ " 
+ 
+    
+   
+   
+  ! 
+    !     
+     
+       
+                  
+         
+  
+                  
+        
+ 
+                 
+         
+               
+  
+    
+     
+       
+  
+     
+       
+     
+  
+  
+   
+     
+ 
+  
+ 
+ 
+ 
+  
+  
+ ! 
+  
+ 
+ 
+              
+          
+ 
+            
+     
+   
+         
+ 
+  
+   
+ 
+       
+          
+        
+          
+ 
+ 
+                                                                                                  " % ! $ ' + ) . + 2 4 6 4 1 : / 3 3 8 6 5 4 4 3 0 5 4 1 - 0 - * / 0 / 1 0 / . - 0 2 2 * - 3 1 2 2 2 2 / 3 3 1 4 6 2 3 / / 0 0 , 0 / 7 4 3 / / 3 0 / 2 2 5 0 , ) & , , . - . - / * + , ) & * . + + - . , * , ) , ( * + / - , * ) * - - ( & + ) ) + & ( + * / - * , . / . 0 , / 0 - - / 4 3 - 2 0 3 1 3 0 1 1 5 4 4 1 6 3 3 5 5 1 4 7 1 5 0 . 6 3 5 3 5 3 3 5 5 6 3 3 / . 6 4 0 1 . / + 2 3 0 1 4 2 / 1 / 3 - . * / ) + - ) * ' & ' ( ) $ % # ! ' # $ $ "   # " " $ " % "   % $ 
+ 
+ 
+  " !   " ' " # # $ " # % ' # $ $ % %  $ #   $ !  % % 
+  " " &    ! 
+ 
+    # ' % 
+  " ! $ # & #  $  
+  "    # %   " " # !  
+ 
+ ! " # ! %   ! " 
+   % (     % % # ! "  
+     
+ 
+ 
+   
+ 
+    
+  
+ 
+ 
+ # ! % ' - , % % ) & ) ( # ' ( % & ( ' * ( * + ( ( * $ & ( " % & & + ( ( ) ) ( ) ' ) # ' ' $ " # " # ! ! 
+ 
+  
+  
+ 
+ !  
+ 
+   
+ 
+ 
+     
+ 
+ 
+ 
+ 
+   
+    
+  
+             
+    
+  
+    
+ 
+ 
+     
+  
+ 
+   
+     
+ 
+       
+     
+ 
+ 
+ 
+  
+ 
+      
+   
+ 
+     
+ 
+ 
+ 
+    
+          
+       
+  !  
+  
+       
+ 
+  
+  
+   
+ 
+    
+ 
+ 
+        
+ 
+  
+ 
+ 
+  
+ 
+    
+ 
+  
+ 
+  
+ 
+   
+        
+     
+                                                            
+  
+       
+     
+     
+      
+ 
+                  
+       
+  
+         ! 
+   
+       
+          
+                     
+                                    
+      
+  
+    
+           
+ 
+ 
+     
+     
+ 
+ 
+ 
+   
+     
+      
+       
+ 
+    
+  
+ 
+                                  
+                                                             
+ 
+ 
+ 
+ ! " # ' ( + 0 , 1 4 3 / 5 6 + - 1 3 1 1 2 / 1 , 3 1 2 2 1 / . / - 2 3 3 0 0 * , ) / 0 0 / , 0 2 3 4 3 0 - 2 0 3 2 3 + 3 4 3 . 0 0 / 1 2 1 - 0 2 , * + . . . / , , / / - - , - - * + ) ) + + - * / 1 ' % + + & ) , ) ( ) , , + * ) * & ( + ( ( - ) % ( * + + + , / 2 2 , 0 / - 1 1 + , . . 3 3 6 5 5 2 4 6 1 1 / 1 2 4 2 / 1 8 3 6 7 7 0 3 / 7 1 / 5 5 5 7 2 ; 3 4 4 3 6 5 3 / - 3 2 / / 3 4 3 , / . - . 0 1 - . 0 . - 0 - ( , + ) ( $ & % # % $ ! # !  " ' % $ & & $ #   %        " # " ' ! % $   ! $ ! ! # ! &   " &    
+ " 
+ "     " !    " !   " ! $ # !   " $ ! " " ! ! ( %   " & # # # % 
+ 
+ 
+ 
+ % $ #   $ "   "  
+ 
+ " ! !   $ ! # " ' # # ' $ # % ! "   "    
+ 
+  
+ 
+ 
+            
+ 
+  
+ ! ( + % ) ) ( % ) & $ ' & % % # & * % ) * ' & ) # # ) ) ( ( & ( & + * & % ' & $ # $ $ ' % " # " !  ! 
+ #    
+ 
+    
+  
+   
+ 
+          
+    !   
+     
+  
+ 
+ 
+      
+ 
+ 
+  
+  
+  
+ 
+   
+ 
+      
+ 
+ 
+ 
+ 
+    
+             
+ 
+ 
+ 
+ 
+  
+     
+ 
+ 
+ 
+ 
+   
+  
+ 
+  !     
+ 
+    
+        
+     
+   
+   
+     
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+  
+ 
+          
+   
+     ! 
+          
+ 
+ 
+ 
+ 
+       
+       
+ 
+        
+                     
+             
+                         
+      
+         
+     
+ 
+        
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+  
+          
+              
+           
+                    
+ 
+ 
+ 
+ 
+        
+ 
+ 
+   
+     
+  
+ 
+  
+        
+   
+ 
+            
+        
+        
+    
+   
+  
+         
+   
+        
+ 
+ 
+ 
+ 
+                                  
+                                                                 
+ " " % & ' ) 3 / 2 4 0 2 1 5 3 1 3 1 4 8 3 4 - ( - 2 3 - 2 1 / / 1 0 5 6 - 1 - , + 0 0 / - / . 5 . . 4 3 0 + 2 4 1 0 2 0 2 3 / . . 1 - * ) + 1 1 * - ) 0 - + , - , 1 0 + + - 2 1 ) ) , * , / ) * , / * ' % + * ( , ) + + + - , - * ) + * * ) + * * + , * + * * 1 1 5 1 0 3 , * / 3 0 . 5 . 4 2 2 2 5 4 3 , / 1 3 2 2 3 . 0 1 6 4 3 3 3 1 1 1 8 6 0 5 : 9 7 6 6 4 5 1 5 / 3 / 1 8 4 0 1 1 3 : 8 1 . 1 . / 2 + + - , - 1 1 * , * ' - ' ( & ! " $ ' ( ! % %   $ ! % # " % %   ! $   !  " " &   ! "  " % # ! # " 
+ % $ & '     ! " " & ' %   ! 
+ !   "   $ # !   ! #      !     #   % # " $ " 
+ $ #  
+ "   ! " " !  !  " % !   # $ #   ! " # # " % $ $ # #   " !     !  
+ 
+ 
+ 
+  
+        
+ 
+      # " * & ' ( & $ % ( ) ( ( ( " % - ) ) ' ' # # '   % ' $ ( ( & & , $ ! $ $ & ' " # " # # % $ % $ 
+   
+ ! # 
+ 
+ 
+ 
+         
+  
+   
+    
+ !  
+   
+   
+     
+   
+  
+  
+  
+    
+ 
+ 
+ 
+ 
+ 
+   
+  
+          
+ 
+      
+ 
+ 
+ 
+ 
+  
+ 
+      
+ 
+ 
+ 
+ 
+          
+ 
+  
+   
+ 
+ 
+ 
+    
+ 
+  
+   
+   
+      
+  
+ 
+  
+     
+ 
+       
+    
+  " 
+  
+  
+       
+      ! 
+ 
+ 
+ 
+  
+  
+     
+    
+ 
+  
+ 
+    
+        
+                               
+         
+            
+       
+                
+    
+            
+   
+        
+   
+ 
+  
+ 
+        
+            
+       
+ 
+       
+ 
+    
+   
+  
+  
+ 
+     
+                          
+   
+   
+        
+                
+       
+         
+       
+       
+       
+    
+                                                                                                     
+ 
+  & % # $ # ' . - - 1 1 - . 2 2 . 1 , 3 2 2 1 - % , , 1 - + * 3 . / . / 3 3 1 - . . + / 0 , 0 1 3 0 2 4 4 3 / - 2 2 / 5 2 1 4 7 6 0 3 + + , . 1 1 0 - / 1 - - * / 3 1 / / ) / 3 2 1 / / . . - ' - + - / , ' + + , - ( - + , + 1 0 * ) & ) * * & % ( + ' + , / - / - 2 - . . / 1 / / 4 / 1 3 2 6 = 7 4 4 4 0 3 3 2 3 4 / 3 8 8 5 : 7 9 1 0 1 1 2 4 7 7 ; 5 4 4 1 6 3 2 3 3 3 / . 8 1 / 6 : 3 4 2 1 - 0 / - * , , / - 2 4 1 , + ( ) ) + ( ) # " ! ' & & ) % " & ( ' # " & ' ! $ " 
+ !      ' % # % " " & % $ & # " # & $ ! # & % " % $ # # " ! # " & ( # ( & $ "       " 
+  # & % " % !   # $ # # $ $ # & $   ! ! $ $ $ %    ! " & & % $ ! # & # " " ' # " # ! #  #  "     
+         
+     
+ 
+  
+ 
+ 
+ 
+ # " & ) + $ $ % ( * , ( % ' * ' ) & ) , ( * % $ % $ % ) + * + , ( " % # $ % %  ! ' $   $ & $ 
+ ! !  # !   
+ 
+ 
+  
+   
+      
+   
+ 
+  
+ 
+ 
+ 
+ 
+      
+ 
+ 
+ 
+  
+ 
+ 
+    
+ 
+ 
+   
+ # 
+     
+    
+ 
+ 
+ 
+    
+          
+    
+  
+ 
+ !     
+  
+    
+    
+          
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+  
+      
+ 
+    
+ !         
+ 
+ 
+ 
+ 
+   
+  
+       
+    ! 
+ 
+ 
+      
+ 
+ ! 
+      
+ # 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+     
+ 
+ 
+                                
+              
+           
+     
+ 
+        
+     
+       
+    
+ 
+  
+   
+ 
+          
+     
+ 
+   
+  
+ 
+   
+ 
+             
+   
+    
+       
+  
+ 
+   
+   
+ "   !     
+ 
+       
+                                           
+   
+  
+  
+            
+          
+ 
+  
+ 
+          
+         
+                                                                                                   !   & ' $ ( + 1 , + , 1 0 . / 3 3 1 . 3 8 0 1 / + / , / - / . 0 2 1 4 / 1 2 / + / 0 , , , 1 1 4 / 7 6 0 3 7 . , / 3 5 3 4 0 1 7 4 / 2 . 1 , 4 1 / / - - + * - 5 / 0 0 , + , 0 3 1 / 1 / , * / - 4 1 + 1 + * , + + * + 0 / * / , . 0 - , ) , ) ) + * + # ) 1 4 1 1 4 4 0 0 0 0 , . 0 4 , 0 3 5 2 2 4 9 7 : ; 5 2 6 6 6 3 4 < 5 6 4 9 5 3 1 3 3 4 7 7 9 9 5 1 4 4 1 5 4 1 : 9 0 1 6 4 1 / 6 3 5 0 4 1 7 1 1 * ) + 0 / 1 4 5 - * ) ) ) ( ( $ $ " & $ $ ' ( % ' ) ' % * % % $ " " ! # $ ! " # # &  % & % $ ( , & $ % ( % % # ' ) ( % $ ( % & $ % ! % ) + % & # $ % ! " ! " " ! ! ! ) ' % $ " $ % $ " " # $ ' $ # $ # $ ! # $ % # # ' & & " ' # %   #   " "   !   ! %   % # $    
+      !  $ ! 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+     "   $ ) + ( ( & % * ' ' * ( & ) * * ' ( ' . ( ' % $ * * ( ' ' ) ' % % + % % # # # $   # # % ' $   
+ "     "       
+  
+ 
+ ! 
+ 
+      
+ 
+  
+ 
+ 
+ 
+     
+ 
+  
+ 
+ ! 
+    
+  
+ 
+ 
+   
+  
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ ! 
+ 
+  
+ 
+ 
+  
+ 
+   
+  
+ 
+ 
+ 
+ !      
+ 
+  
+ !  
+ !  
+ 
+ 
+ 
+ 
+    
+   
+ 
+ ! 
+ 
+   
+ 
+       
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+     
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+  
+  
+ 
+    
+ 
+ 
+ !   
+   
+ 
+    
+ 
+  
+ 
+    
+ " #        ! "   
+ 
+  
+ 
+ 
+ 
+  
+  
+    
+ 
+ 
+ 
+ 
+   
+ 
+          
+                         
+ 
+ 
+              
+  
+     
+  
+       
+     
+        
+      
+ 
+ 
+      
+   
+      
+ 
+   
+ 
+     
+ 
+ 
+  
+ 
+       
+ 
+         
+ 
+   
+    
+ 
+  
+  
+    
+ 
+   ! 
+ 
+      
+    
+ 
+   
+    
+  
+             
+                          
+                              
+        
+             
+     
+                                                                                                 
+  " % ' % & * 1 . 0 2 3 5 2 2 3 3 - 2 5 0 1 1 3 3 7 3 3 2 / 2 / 2 1 1 0 3 2 1 1 2 / 3 1 + / 2 1 0 / 3 6 6 8 2 - 0 3 4 5 2 / 2 1 . . - - - . 2 + 1 4 3 - / 1 / 6 2 2 4 - - 1 , 1 / 1 / ) - - - / 4 / / 0 0 - 3 . + ) , 1 / , . 0 + 0 2 + - - , + + + + , - . . - / 2 4 5 5 0 3 , 1 4 . 2 6 5 1 / . + 4 2 6 8 3 5 8 : 8 7 5 8 3 6 : 9 7 / 2 3 5 1 2 4 6 8 6 5 5 4 4 5 7 3 : 6 9 2 3 2 2 , 3 0 2 - * 5 : 1 2 3 * 2 6 / / / 3 0 2 ( ' ( ( ' % % & & $ ' % # ' % % & & ) ) ' " " & ' $ $ # # # ! % # ) * ( & # " ( " ) % # "   & ) & % $ # ( ' " % # % % $ & # " % ) # & & $ !   ! # $ % ' ' & ' # " $ % # & # ! " " & ! " % % # & $ ( $ & & $ # & ! " " & " " " & # $ ! " % & " #  ! !       
+       
+ 
+    ! ! ! ! " & * + ( , ) ( & ' ( ' ( + , * ( % & + $ ' ( ( ) ) ' ' ( & $ " & ) % $ " $ % % & * % ( ' % ! % % "   !    
+       ! 
+  
+ 
+   "      
+  
+ 
+    
+  
+   
+  
+ 
+  
+ 
+      
+  
+   
+ 
+ 
+    
+ 
+ 
+ 
+ 
+   
+   
+  
+ 
+ 
+    
+ 
+  
+ 
+ ! 
+   
+ 
+    
+    
+ 
+  
+    
+ 
+ 
+ 
+  
+    
+ 
+  
+   
+ 
+  
+ 
+  
+    
+ 
+    
+ 
+ 
+ 
+  ! 
+ 
+ 
+ 
+ 
+     
+   
+ !   
+ 
+ 
+    
+ 
+  
+ " $    !  
+  ! 
+ 
+ 
+   
+ $                
+ 
+ " 
+   
+ 
+ 
+    
+   
+              
+                   
+          
+     
+         
+   
+ 
+   
+      
+    
+ 
+     
+ 
+     
+ 
+    
+   
+  
+  
+   
+  
+ 
+ 
+  
+   
+ "     # 
+ 
+  
+  
+         
+ 
+   
+    
+ 
+     
+   
+      
+ 
+   
+  
+ 
+ 
+    
+   
+   
+  
+ 
+    
+                                       
+                                                                                                                                                        
+   
+ # % # % % $ * + 4 8 4 5 3 9 5 / 0 0 9 3 . 4 1 4 9 6 5 3 0 . . . 4 3 / 0 2 1 . 0 1 5 6 4 0 7 1 2 2 0 2 / 3 1 - 1 2 4 9 8 5 / / 1 - - . / 2 . , - 0 3 2 2 4 2 0 1 5 2 4 4 / 7 - 3 . - + * , + - + - * 1 2 - - + + , 1 / 0 * , / 0 / . - / 3 . ) + / * ( - * , / 1 4 / 0 4 4 2 2 1 . / 2 5 3 / 4 4 3 5 3 2 4 4 3 0 5 8 6 3 7 9 < ; 4 5 5 2 7 1 2 3 8 9 6 3 2 4 3 1 3 : 1 6 6 7 4 2 6 6 5 7 2 1 2 / 1 1 / 0 3 3 2 3 / + . . . 0 , % ) ( & ' ' %   $ # % $ ) $ % & $ ' , * " " " % % # " $ ( & % $ ( ' ( & # $ % $ $ $ # % % & ( % ' & " % % ! % " & # # ' % ! # $ ( # $ ) " ! " # % * & " " % # # % % & $ & # $ # ) ' $ # & % $ $ #   & " ! " % & " " # % % ' # ! !     $ # %   ! # $  
+ 
+ 
+ ! 
+ ! ! 
+ 
+  
+    
+ ! # # " $ - , + ( + ) , ' & , * ( - + ' $ * % $ % % & % ( & & * ' $ $ ) ( $ # % ! # " % & # # & $ ' " ! ! " #   "       
+ ! 
+  
+ 
+  
+ 
+  
+   
+    
+ 
+   
+   
+ 
+   
+   
+  
+ 
+   ! 
+ 
+   
+  
+  
+  
+ 
+    
+ 
+ 
+   $ 
+ 
+ 
+  
+  
+  
+ 
+  
+  
+   " 
+ !  
+          
+ 
+ 
+    
+ 
+   
+   ! 
+ !   
+ 
+    
+ ! 
+   
+ 
+ 
+ 
+   
+    
+ 
+     
+  
+ ! ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+       !   
+ #   
+      
+ 
+ 
+  
+ ! 
+   
+ 
+     
+  
+ 
+   
+    !   !  
+   
+ 
+ 
+ 
+ 
+ 
+    
+       
+      
+    
+          
+          
+           
+   
+       
+          
+    
+ 
+ 
+ 
+ 
+  
+ ! 
+   
+ 
+ 
+   
+     
+ 
+  
+  
+  ! 
+ 
+ 
+  
+ 
+  
+  
+  
+ 
+  
+  
+ 
+  
+   
+ 
+ 
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+     
+       
+   
+ 
+ 
+ 
+  
+ 
+    
+ 
+  
+ 
+ 
+ 
+  !                                                                                                                                                                                                   
+   ! # # % ' % + / / 0 2 1 / 2 2 0 0 3 3 2 . 6 3 0 0 2 5 2 . + 1 5 . 3 5 2 1 1 1 2 . 5 2 0 0 0 1 3 3 1 5 4 5 0 . 1 8 9 2 2 2 0 0 2 + 3 2 / / 0 - 4 6 2 7 . 1 1 : 2 . - 0 0 3 3 + , - / + + / + - * , + * - - 5 4 / - / + - * ) - . - 2 0 . . . , + , * ' * , - + 0 / - - 0 1 2 3 1 0 0 / 3 5 5 7 5 - 3 4 2 4 ; 7 1 / 3 5 4 3 ; 9 7 4 8 7 3 8 8 0 4 7 7 2 4 0 6 5 1 7 1 3 / 3 8 6 4 3 4 5 1 0 0 2 0 / . 1 - * + - . / . 0 - + * ) ( ' ( ) * ' ( # & $ & # $ & & % % ' * * #     & ( " " $ , * %   $ # $ $ & % $ & $ " "   ! # # & $ ' # $ % $ ( & ! " $ " & & $ " $ $ % & $ " $ " % & " 
+ ! # $ # # & # $ ( " $ # $ # ! $ " $ # % " " ! # ! $ % $ % ! " % ( & # $ !   " #     
+ 
+   ! " !   
+  
+  
+  
+   
+ 
+ 
+   " " $ ! , ) ) & ) ) + ' ( * ' % ( * ( $ ( & $ ' ' ( ( - " # ) + + ) & * $ $ & % " & ! # " $ ' # # ! # !   
+    $  !  
+ 
+  
+    
+ 
+  
+ 
+  
+   
+  
+ 
+  
+ 
+     
+  
+ 
+ 
+   
+ 
+  
+      
+   
+  
+  
+           
+ 
+ 
+ 
+  
+  
+      
+  
+   
+    
+ 
+       
+  
+ 
+   
+   
+  
+  
+ 
+ 
+ 
+ 
+   
+ ! 
+ 
+  
+ 
+ 
+ 
+ 
+     
+ 
+ 
+   
+ 
+ 
+     
+ 
+ ! 
+  
+ 
+ 
+ 
+ 
+      
+  
+  
+ 
+ 
+ ! 
+  
+  " 
+           "  
+  
+ 
+   
+ 
+       
+   
+ 
+ 
+   
+ 
+   
+ 
+ 
+        
+        
+        
+        
+        
+                
+  
+ 
+ 
+            
+         
+ 
+ 
+ 
+  
+  
+  
+ 
+  
+     
+ 
+ 
+ 
+ 
+ ! 
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+  
+   
+   
+   
+       
+    
+ 
+ 
+ 
+ !   
+   
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+                    
+       
+                                                         
+                                                                                                             
+ 
+   " ! # $ & , + 3 0 7 2 1 2 0 1 3 2 / - 3 3 1 3 - 3 4 0 0 - , / 1 3 1 / / 0 , / . 0 / 1 0 0 0 0 4 0 7 1 3 1 / / 2 7 7 5 3 1 / 3 0 8 4 1 / 1 . + 0 2 2 2 1 2 1 3 . 1 2 / / 1 . / ( . + ( * - ) , , - 3 0 2 : 2 . 0 . ( . , ( * - . 0 3 - 1 , * * ( ( * * * / , - . / , 1 1 2 / . 0 4 4 7 8 3 2 1 3 , 3 3 7 : : 8 4 4 0 4 1 9 = 9 0 7 9 8 ; 3 , 8 8 6 1 7 2 2 3 - 1 0 1 0 / 2 1 / / 4 - 2 0 . / / + - - 3 0 / 0 1 0 - + , . , ) ( ( & * ) ' " ! & " ! ' $ % ! $ $ ' & % # ! # % * ' &   ' & '   ! ' % % & " # & $ ! & "  # & % # ! # #   "  ! # ! ( # # # % # " " #   # # ! ! ! $ "    # ! $ $ # % & ' % $ (   $ ! $ " # ! # $ #  % ! # & & ' " ' $ & $ " & % # $ ( # #   ! 
+ !  #    
+ 
+   
+    
+  
+ 
+   
+ 
+   $ % ' ( ( ) ' ' ( ' # * % % ' ' $ & " $ $ ' + % * "  $ ' , % & % ! $   % " $ # $ " $ % % $ !   " " #     ! ! 
+ 
+ 
+ 
+   
+ 
+    
+  
+ 
+ 
+ 
+    
+  
+    
+ 
+ 
+ 
+ 
+  
+    
+ 
+         
+       
+ 
+      
+  
+ 
+ 
+   
+ 
+  !  
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+     
+   
+ 
+ 
+  
+  
+   
+ 
+ 
+    
+  
+  
+ 
+         
+ ! 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+   
+  
+ 
+ "  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ ! 
+     
+ 
+ 
+   ! ! 
+ 
+ 
+   
+ 
+   
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+      
+  
+        
+      
+     
+          
+            
+  
+    
+ 
+      
+   
+ 
+  
+  
+   
+ 
+ 
+  
+   
+ 
+   
+   
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+   
+ 
+  
+ 
+     
+  
+ 
+ 
+   
+ 
+ 
+        
+ 
+ 
+     
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+    
+   
+ 
+   
+  
+ 
+    
+   
+ 
+  
+  
+ 
+  
+                                                                  
+                                                                                                                                 
+ $ $   $ ' ' * / 6 1 3 6 7 1 2 0 0 2 0 - 2 3 2 3 0 0 0 2 0 1 0 4 4 3 3 0 , * / 2 / . 1 1 0 / 0 1 2 / 2 / - 4 4 3 2 1 0 6 2 5 / 0 0 1 / . 1 / - - , 5 + - 2 4 5 3 1 - / + * , 1 , ) / 0 * , 1 2 2 1 + 1 0 8 6 - . 1 2 * , , . , 0 - 0 1 . 1 - - * + + . . * ( - ' , * / , - . 1 1 0 3 6 8 2 2 3 1 4 2 8 3 2 4 8 5 3 2 1 1 / 4 8 3 3 5 3 8 = 2 . 2 : 9 8 7 5 6 6 6 3 5 1 3 2 0 2 1 1 7 / 0 1 1 4 0 2 2 , . / . / 2 + - - 1 + & ) - * ) ) ' , ' % " " $ ( & $ # ! % % " $ # # # # & % $ $ ) % # % % & ) $ % % ( ( & ' $ $ $ ) & % $   ! $ !      ! $ $ " " $ ( $ % & # ! $ $  ! " ! #    # % $ "  $ # ! ' & % ! % 
+ "  " " # & # # # $ % & ' '   ! $ # % # # $ " " % $ # ! %          
+ 
+ 
+ 
+   
+     ! 
+ 
+     # $ & * , + - ) ) $ % % $ * ( ' ' & ' % % ( % %  # & # ' # # " % ! " % $ " $ % # # # # " " ! ! ! 
+ 
+   % 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+   !      
+ 
+ 
+  
+   
+ 
+ 
+  
+  
+  
+ 
+ 
+    
+   
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ ! ! "  
+ 
+ 
+ 
+     
+ $ # 
+  
+ 
+ 
+     
+   
+ 
+  
+ 
+   
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+  
+  ! 
+ 
+  
+ ! 
+  
+  
+          
+ 
+ !  
+ 
+ 
+   
+ 
+ ! 
+   
+ 
+ 
+ 
+      
+  
+  
+ 
+ 
+ 
+  
+ 
+    
+ " 
+    
+ 
+ 
+ 
+   
+   
+  
+ 
+ 
+  
+ 
+ 
+   
+ 
+ ! 
+  
+ 
+  
+          
+    !     
+     
+   
+                
+   
+   
+    
+ 
+      
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+      
+  
+     
+    
+ 
+    
+  
+ 
+ 
+   
+ 
+ 
+  
+ 
+  
+    
+   
+   
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+    
+ 
+ 
+ 
+ 
+    
+ 
+    
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+                                                                                                                                                                                                  ! ' " # # ' ) ( / 4 2 1 2 1 3 2 4 0 . 0 * / 8 < 3 4 0 3 3 + - 0 6 4 , , - . - 3 4 / - 1 - 1 . 1 / 4 2 - . 2 2 4 4 3 2 / - 1 3 0 0 6 1 . & . / . + - , - 5 1 2 0 1 0 , ( / , + - + 0 0 1 + / . 0 0 0 0 1 - 2 0 - * / / , , - * . * - / - , + / - + ) * , / . ' ' ) / / . + - , / / / + 1 0 1 1 0 6 1 0 4 2 , 6 3 5 4 5 3 / / 1 8 3 5 4 6 3 5 1 5 3 7 5 8 8 4 0 3 1 0 4 7 1 0 2 0 1 2 + , / 0 0 2 0 . 1 , - - - - ( 0 * , - ) ' , ) & % & ' & ' # !   # $ (   " " # ! # # ' & # ( ! # " $     ! $ % ' # " $ % "   ! %   " # $ $ # & % ! ! % $ # %      ! 
+ " %  ! $ " ! # "   ! ! # $ # ! % % " 
+ 
+  # ! " # % # #  # ! 
+   !    %   $ # # ! $ $ % $ # ! "   
+   # $ % % % % % " ! 
+ 
+ 
+ 
+  
+   
+  
+ 
+   
+   !  ! ! " $ % $ $ & % ) * % & ' # , * * " " # $ $ ' (     & $ # * # % $  
+ # $ $     " " & ' # #  
+ "   
+ 
+  
+   
+ 
+ 
+   
+ 
+   
+ 
+   
+ 
+    
+ 
+ 
+  
+ 
+ 
+ 
+    
+     
+ 
+  
+    
+ 
+ 
+ ! ! 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+   
+ 
+ 
+  
+ 
+  
+   
+ 
+ !   
+      
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+     
+ ! "  
+   
+  
+ 
+  
+ 
+   
+ 
+  
+ 
+           
+ 
+ 
+ 
+  
+    " 
+ 
+ 
+   
+ 
+   # 
+ 
+  
+ 
+ 
+ 
+    
+ 
+      
+ 
+  
+    
+ 
+ 
+ 
+   
+  
+   
+ 
+ 
+ !   
+ 
+       
+ 
+    
+           
+ 
+     
+                    
+      
+  
+           
+ 
+   
+ 
+  
+             
+  
+ 
+ 
+       
+   
+  ! 
+ 
+ 
+   
+    
+ 
+  
+   
+    
+ 
+ 
+   
+     
+  "         
+ 
+  
+      
+  
+       
+ 
+   
+      
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+                                                                                                                                                         
+                                        
+ 
+   ! ! # " % ' & ( 1 4 / 1 / 0 0 / . ) . . 2 7 , / . . 1 , * ) / . / . 2 . . 2 4 3 2 0 0 3 , * / . / . - / 7 1 1 / / 2 , * , 0 0 / 7 4 , ) . + / * * / * 2 / , + . ) * * . - * * , - . - + + . / 0 / 0 / , ) - + ( * - / / * ' + + * . , , ) + * + * ) ' + , . - - , , 1 + , ) + + , , , 2 . 2 1 3 0 1 2 3 4 2 / 1 0 . - 0 2 3 4 3 5 6 5 0 3 . 1 6 1 0 4 1 3 - 0 4 2 2 0 2 0 . 2 - + - * - ) , 3 / / + - - / / / . , , ) ) ' ) - ( " ! ) % " % "  "  # $ ! $   % ! " $ % ! " $ $ " " #   ! # % % ! ! "  # % "   & 
+   $ # # #   # " & # ( ' # !     " ! $ $ 
+ 
+ ! ! ! # $ ! !  % "    
+   ! !   & # #   ! "    " 
+     " %  # "   # ! # ! % !   
+ ! !  $ % # # # ! 
+       
+ 
+  
+ ! 
+ 
+ 
+        
+ 
+ 
+ ! 
+ " ! " ' ' $ " " $ ) $ % % & ! & & ) $ $ # % # ! & $ % & $ %   % % % # " ! 
+ !   $ ! " 
+    ! 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+       
+ 
+ 
+ 
+ 
+ 
+     
+  
+ 
+  
+  
+  
+     
+ 
+ 
+  
+       
+    
+    
+   
+ 
+ 
+ 
+ 
+     
+    
+  
+   
+    
+      
+ 
+  
+ 
+  
+        
+  
+    
+   
+      
+    
+  
+  
+ 
+ 
+ 
+    
+ 
+ 
+ 
+  ! 
+ 
+    
+   
+ 
+ 
+  
+  
+ 
+      
+  
+  
+  
+ 
+   
+     
+  
+  
+  
+    
+ 
+   
+  
+ 
+ 
+ 
+       
+                 
+       
+       
+ 
+  
+  
+                  
+     
+    
+ 
+     
+       
+           
+     
+ 
+ 
+  
+ 
+ 
+         
+    
+        
+  
+ 
+         
+ 
+ 
+  
+ 
+ 
+   
+     
+ 
+  
+  
+   
+    
+     
+           
+                               
+ 
+                                     
+  
+          
+                                             
+                                                         
+   #  " # % ! ) ( + * + + 0 , 3 2 3 . 1 0 + 1 , - / - * , ' - 2 / 2 3 / 1 / 3 0 0 - ) , 0 . ) - . + . 2 / 0 2 3 2 1 . ) ( , . , 0 4 : 0 - ( , * ) , + * . 0 . - * $ ) 0 - + * * * 0 - / * + 1 * & ( * - . + * , + , - ( + , # ( * ( . - ) & ' $ ( & % ( * , ) ' * ) - ( ' ' ( + * 1 1 / , - / 0 2 0 1 3 4 1 / 3 3 3 5 1 , 0 4 7 4 3 1 2 2 5 / 1 3 - 0 . - 0 - , . . . + 1 3 / 0 / , / , / 1 / * * . ( * * + / 0 / - & & + & & & ( $ # # # " ! !    ! # ! % # # # $ ' $ ! !  %  #   # # # " ! " 
+ 
+ "   " ' & ! " ! ! &     ! # $ # ! $ #   "  ! 
+   # $ " # 
+    
+   # % % 
+ " " !  
+   # $ $ " $  
+   #   $  # !  
+ 
+ ! # " & $ %  !     # #    
+ !   !  ! ! ! ! $ !   
+ 
+ 
+ 
+ 
+  
+  
+      
+   
+ 
+ 
+   
+ 
+  # # " # $ ' # $ $ $ "   % % " $ $ "  ! # ! 
+ " ! ! $ $ # # " % % $   
+     $ "   
+ 
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+   
+ 
+     
+ 
+ 
+ 
+   
+    
+               
+  
+    
+  
+ 
+                 
+ 
+    
+        
+    
+  
+     
+  
+ 
+                     
+ 
+              
+      
+ 
+ 
+   
+ 
+  
+     
+ 
+ 
+ 
+ 
+ 
+   
+ " 
+ 
+  
+ 
+      
+  
+  
+ 
+ 
+   
+   !   
+ 
+    
+ 
+           
+                                                        
+         
+       
+                 
+        ! 
+  
+ ! 
+             
+ 
+     
+       
+               
+             
+    
+   
+      
+  
+ 
+             
+  
+ 
+     
+ 
+  
+  
+                
+      
+    
+ 
+  
+          
+             
+                                                           
+                                     
+                   
+ 
+   
+   % &   # * + - , , + + , 3 - + 1 , + 2 . 1 0 , * * + / - . . 3 - / 5 . 1 + . * * . + , . - 0 2 2 1 / . 0 0 , / , + - . - - / 3 1 2 , , + , , 1 , + . + - * ) ( ) . / - / - . , 0 + ( . * - - - ) * * * - 2 + - % ( + ) * * + + * , , ( * ) * ' ' , 3 * - ) , / ) + ) - 1 . . 2 + / + 2 / 0 0 0 . . 3 2 1 4 6 : 4 / / 0 2 1 3 2 7 1 4 3 5 . , - . . / 0 , / 2 , - 1 - , * - 0 , . 1 - / / / 1 . , * + + . + , - / - ( , ) % & ( $ $ $ % " " 
+   %   $ $ # ! & ' ' & & $ ! ! ! 
+  ! # #  #  " 
+   # $ $ $ $ # $ % % $ ! "   ! " ! $   
+ 
+ 
+ !   ' # & " # "   
+   ! ! ! ! 
+ $ #  ! ! ! " $ #  
+   !   $   # #    
+ 
+ "  $ # # # 
+  ! # # !    ! # 
+ 
+ "    # ' $ " 
+  
+ 
+ 
+   
+  
+  
+           
+ 
+ 
+ 
+ 
+ 
+ !   # ' $   " # % ' ' & ) # % & " "   ' % # % & $ ! ' ! # $ ) $ $ " !  " ! ! 
+ 
+ 
+   
+  
+  
+ 
+   
+ 
+   
+ 
+    
+ 
+ 
+           
+     
+       
+   
+     
+      
+                 
+     
+    
+ 
+   
+  
+      
+ 
+    
+    
+    
+                 
+ 
+ 
+ 
+   
+ 
+  
+ 
+    
+     
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+  
+  
+ 
+   
+ 
+    
+  
+ 
+ 
+   
+ 
+     
+   
+ 
+  
+  
+          
+                                                     
+ 
+      
+    
+                 
+ 
+        
+ 
+             
+ 
+ 
+                  
+ 
+        
+                  
+  
+    
+ 
+     
+   
+ 
+  
+ 
+     
+          
+ 
+              
+                    
+  
+    
+  
+       
+   
+              
+  
+            
+                       
+                                                                                " " $ " % ( ( 0 1 - / , . . - 0 - 0 1 , + 0 . ( * - + + ) . , - / - + 1 4 . ) ) + - . + + - 0 . + 0 5 5 / 0 . + * - 1 / 1 - 1 - 2 1 5 . . , . ' / . , / 2 1 - + . ) ( / , , , / . * - ) / - - 1 ) - + . ) + + * ( ) * ) ( , + , , ) ' ( + * , + & * ( ) - - * - , , , - , / . , ( / , + 0 3 1 - 0 1 / , 3 5 8 2 4 2 3 0 - 1 0 / 5 2 0 0 - 1 / 4 1 / 1 0 5 , 0 7 9 . / / 0 / , * - 0 , - - - , * ) * / , * + . 3 - , , , . + & & ' ' % ' % ! !   " " # " # # $ % ) " ! $ " !  " 
+   ! ! ! #    ! $ $   ! $ ! " & " ( $   % # #  " !  $   
+  ! $ !   
+   ! ! % " " 
+ " "     ! " ' " $ # !   "    !       &    # 
+ 
+ 
+ % " ! % "   ! 
+  ! #  # !   
+ ! 
+   "  
+ 
+ "    
+  
+  
+   
+ 
+ 
+       
+ 
+  
+   
+  
+ 
+ 
+ 
+  ' & ' & $ & " " # $ % # ) ( % #   % # ' %   $ # "  ' ' " " " % # # !   
+   
+ 
+ 
+   
+ 
+  
+     
+   
+         
+      
+ 
+   
+ 
+ 
+ 
+       
+  
+    
+       
+      
+       
+  
+ 
+    
+          
+ 
+ 
+  
+ 
+      
+ 
+     
+   
+            
+    
+   
+ 
+ 
+     
+ 
+    
+        
+      
+  "  
+ 
+ 
+  
+        
+    
+ 
+         
+                                
+             
+                             
+ 
+                              
+       
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+      
+        
+     
+      
+          
+       
+    
+    
+  
+     
+    
+   
+                
+    
+           
+  
+            
+  
+  
+   
+     
+ 
+           
+ 
+             
+            
+ 
+        
+                                                                                             
+   " ! ! $ & ) * 1 2 / / , 0 3 . / 8 2 2 1 - 2 / . . 3 . / - , , , - . / 0 / * , . + 0 . * - / , 1 / 1 0 . 5 3 - . 3 , - 1 / , 3 / 0 , 0 ) 1 + / - - . * 5 - , - - - + + . ) / / - 0 1 , - 5 - . 2 . . / . * - - + ( - , , - , + * + 1 0 . - - / ) * + , ( ( - + * + , 0 / - + * - ' * , 0 1 2 2 + 2 3 3 3 - 2 / / 1 5 6 0 / 0 3 2 ; 1 , 4 1 1 8 7 2 7 2 - 4 / 0 0 / 1 0 - . 2 . * 1 / 0 0 8 4 , / - , - / / / 1 2 * , + * * * $ $ ( % ( ' # % ! $ ' $ % " # $ % $ $   "   & $ # "   " $ % $ $ $ 
+ $ ! ! " # "   % ! ! '    " " " # $ # ' & % " ! # # #        % % ( # $ $     " # $ # #       #   # !          "  
+  
+ ! # " ! & " ! ! $ " " # #   #  
+   "        
+ ! # #  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+    
+   
+  
+ 
+ 
+  
+ 
+   
+ 
+ " " ' & $ % ( ( $    ( ( ) # # $ " & % ' ! # " $ " ! ( " 
+ $ $ # " #   
+ "   
+   %  
+ 
+ 
+ 
+ 
+   
+     
+ 
+ 
+     
+    
+ 
+     
+   
+       
+    
+  
+              
+ 
+       
+  ! 
+ 
+ 
+   
+ 
+ 
+    
+ 
+    
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+ 
+     
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+   
+      
+  
+  
+   
+    # 
+        
+   
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+  
+     
+      
+ 
+ 
+  
+        
+     
+               
+           
+                                  
+  
+ 
+               
+ 
+    
+ 
+ 
+  
+  
+   
+   
+    
+ 
+ 
+   
+  
+   
+ 
+ 
+  
+ 
+ 
+   
+ 
+       
+ 
+  
+   
+         
+     
+     
+  
+   
+     
+ 
+ 
+  
+                               
+       
+       
+                               
+        
+             
+ 
+      
+                                                                                             
+ 
+ " "   # $ ) ( 0 / . 2 0 3 . , , 1 3 2 0 , + 2 1 3 3 2 5 0 ) ' 0 , , 2 . 3 2 / / 3 / / . - - * 0 2 . - 3 1 1 , / 5 0 . / - 0 1 - / 2 1 - . * 0 . , , 6 7 . , - , / 0 . 0 1 , ( 1 2 6 + - - + * - 3 2 . , * + + 0 - 0 1 , - , / ( - - - / - - + ( - + 0 0 . . 3 / 0 + 3 , 1 , + , ) ) + + / / 0 0 2 2 1 4 4 3 2 0 1 0 . / 1 4 7 4 : 9 3 3 3 4 9 7 8 6 6 6 8 6 : 4 3 7 6 * - 3 5 1 2 / * - 2 1 ) , 0 - * ( . / / . - + & ' ( * $ * * ) $ & % & % ! & $ $ # " ' " $ & " ! " & ' ' & ( ! " $   % " !   # " # # % ' # $ # # & $ ! $ # 
+ # % ' & $ ! ! ' % $   ! % $  % ( ) ( % ( $ ! " # # " % & # # " # # "  ! ! 
+ " %    #     $ "   !   # " ! % # " ! " " # # " $ ! ! # ! !   " %   
+ 
+ 
+ 
+ 
+ 
+  
+  
+     
+         
+ 
+  
+    #   $ $ " ( ) , ( & # $ $ $ & % % ) % # ! "  " ! ! % " ! $ $ " & ' "     
+ 
+ !   
+  
+ 
+ 
+     
+ 
+ 
+ 
+  
+      
+  
+  
+   
+ 
+    
+  
+  
+  
+   ! 
+  
+   
+ 
+  
+    
+ 
+     
+ 
+  
+  
+   
+ 
+   
+ 
+   
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+     
+ 
+    
+ 
+  
+ 
+    
+ 
+     
+  
+   
+   
+ 
+ 
+   
+ 
+  
+  
+  
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+    
+  
+ 
+  
+ 
+ 
+  
+   
+  
+ 
+  
+   
+ 
+  
+     
+  
+ 
+   
+  
+ 
+    
+     
+    
+  
+                                        
+                        
+  
+ 
+ 
+      
+        
+ 
+    
+   
+  
+  
+      
+  
+ 
+     
+ 
+ 
+    
+ 
+ 
+   
+ 
+   
+             
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+   
+     
+ 
+ 
+                                                     
+         
+        
+      
+      
+ 
+  
+        
+ 
+ 
+ 
+                            
+                                                                          " ! $ # " & ) + - , . 2 - * + + 0 1 . 4 / / . 0 1 3 2 , 2 - & / 3 / 4 0 5 4 1 0 4 / , . 0 * ( + * + 3 / 0 , + 0 2 1 0 . 2 1 0 / , / . , - + . * 2 3 1 5 0 . / / , 0 * - 0 + ( 1 2 3 , 0 / / * ' . 0 . + * , + , + + 0 + + + . - ) + 0 0 . 1 - , 3 , , - 0 - 0 0 . / . . + 0 2 2 / - . / * 3 4 5 / 4 2 8 1 0 3 4 1 0 0 7 1 0 3 0 2 2 8 7 7 3 3 1 8 5 5 9 : 5 - 4 3 7 1 - 0 . 0 3 / - - / , - - 0 / , - * + . - 1 . + ) * $ ) ) . , ( ! & " # " % * ' $ #   $ % ) ( # $ ! & ( $ ' % $ " $ ! % & % "  ! 
+ #  ( # ) # % # # ! # $ % % # " " $ $ $ % # % & # # !  " # & # " # # # " 
+ $ # ! !   ! & ! "   ! $ % " 
+ # ! # ! " % # & ! " 
+ 
+ " $ " & $ ! $ # & $ $ #   
+ !  # " ! # ) " # 
+ ! 
+ 
+  
+  # !  
+   
+ 
+     
+    
+ 
+ 
+     !   # $ ! ( ) * ' % # ( - $ " & " % $ "     # # " 
+ ! % " $ ( !   #     
+   ! 
+   ! 
+ 
+   
+    
+ 
+ 
+   
+ 
+  
+ 
+ 
+  
+ 
+   
+ 
+ 
+ 
+  
+   
+ 
+      
+  
+     
+ 
+ 
+    
+ 
+   
+ 
+ 
+ 
+   
+   
+ 
+ 
+ 
+   
+   
+  
+  "  
+  
+   
+ 
+ 
+ 
+    
+ 
+ 
+ 
+   
+        
+           
+     
+    
+ 
+ 
+ 
+  !   "  
+   
+         
+ 
+    
+ 
+ 
+ 
+      
+         
+ 
+   
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+  
+    
+ 
+    
+                 
+                 
+   
+     
+                           
+   
+ 
+      
+       
+  
+ 
+ ! 
+         
+ 
+ 
+ 
+ 
+    
+ 
+   
+ 
+    
+      
+ 
+ 
+        
+ 
+     
+    
+  
+ 
+    
+   
+ 
+ 
+  
+     
+          
+   
+ 
+                                      
+   
+ 
+                          
+    
+        
+            
+    
+                                                                                               
+    
+ 
+   # $ $ ) ' ( - , / 1 + * + / / 1 3 0 - ) 2 3 1 3 1 1 , + * 0 2 0 0 1 3 5 0 5 0 . 0 1 / . , , * , 1 4 3 . , - + 0 / / 4 3 . 3 . , 0 / , / 0 , 3 0 2 1 2 7 2 - / 9 - , 0 , / 2 0 0 + / / 0 * * + / . - ) / . + ( , 4 0 - - 0 * - , / - 2 0 . / 6 ) ( + / . , 0 - . * / 0 2 / - 8 2 / 2 5 7 7 6 0 5 4 2 - 2 3 7 2 4 4 1 2 5 9 4 1 0 3 3 2 4 4 2 3 3 9 9 8 3 2 4 4 4 1 3 4 / 2 : 9 2 8 8 1 5 / + / 0 / , 0 0 * / 1 + , 0 ) % ) - + $ $ $ $ ' % & % # ( # $ & " % ' & ( $ % $ $ ' ( & $   ! $ $ " $ # !   # % # & & ( $ # ( ! # $ % " % " # # %   # % ' $ $ % $ $ % ! $ ' ' & ( ' !  " % # " " # ' " % & % % ( # " & $ ! 
+ # $ # & # $ " # ! ! ' $ ! % # % ) # ! %    " % % ( ( ( , $ ' %  
+ 
+ # ! 
+ !  
+    
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  !    
+   #   " ' ' ( & # " " ( ' #   & ' % & $ $ " ! $   $ $ $ $ ( " " 
+   
+ 
+  ! 
+ 
+    
+ 
+ 
+ 
+    
+ 
+    
+ 
+ 
+    
+ 
+ 
+   
+ 
+    
+  
+ 
+   !  
+ 
+ 
+  
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+   
+ 
+    
+      
+        ! 
+    
+ 
+ 
+     
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+     
+      
+ 
+    
+  
+    !   
+ 
+ 
+  
+    
+ ! ! 
+ ! 
+ 
+ 
+  
+ ! 
+  
+  
+ 
+  
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+  
+ 
+  
+ ! 
+   
+   
+  
+ 
+ 
+ 
+     
+    
+                          
+ 
+            
+               
+     
+  
+   
+     
+ 
+  
+ 
+       
+ ! 
+  
+ 
+ 
+  
+    
+ 
+ 
+ 
+      !  
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+  
+   
+    
+  
+ 
+ 
+   
+ 
+    
+  
+ 
+      
+  
+    
+ 
+  
+ 
+   
+   
+ 
+    
+                                                    
+                                       
+                                                                                                     
+     # # & ) + ) * / + * - 0 , 3 1 3 4 + , - / 2 / . / 0 1 . , 3 2 / 0 . 4 6 2 0 . / 0 - 2 0 / 3 . 0 / / 2 - . 1 - 1 3 0 1 2 3 1 1 2 5 + / 1 0 2 - 1 7 . 4 5 0 / 1 1 0 4 0 ) 1 0 0 , 1 1 0 - 0 , , - / + + + 1 2 1 + 2 4 2 . / - / 0 , / . 2 1 / 0 , / 1 . 1 + - + 0 1 - - 0 . 1 8 0 + 1 7 : 7 5 1 2 6 1 1 6 4 7 7 6 3 / 4 8 8 3 6 6 4 0 . 0 6 6 4 3 : : ; 7 8 3 0 - 0 / 3 3 0 0 5 2 5 4 6 1 0 2 4 2 3 3 6 1 / , . 0 . ( ( ( - , * $ * ' ! % * ) & #   # ( % # # ) + $ ' & % # % ' % & % # ' ( % ) $ & & ' & ( ( & # $ & " ! # ! " $ & % # $ % # ! $ $ $ % ' % # $ # # & $ ) & ) # & % $ $ * ' % ( % % ) ' $ & $ & " & $ % %   # " $ ( ( ( $ ' $ $ # ! % & ' %   # " % # & ( ' ! ' + & $ # " " ! !   ! # ! 
+ !  
+ 
+          
+ 
+  
+ 
+ !      " 
+ ! ' $ ' $ & % ' ( % " ! % ( & % % ' ( " & & "  ! ' % $ % ! 
+  % 
+   !   ! 
+ 
+  !   
+ 
+ 
+ !     
+     
+ ! 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+      !   
+ 
+    
+ #   
+ 
+  
+  "  
+ 
+ 
+  
+  
+ ! 
+ 
+ "  
+ 
+   
+ 
+ 
+   
+ 
+ 
+    
+ 
+ 
+  
+ 
+ 
+  
+     
+  
+ 
+ 
+ !   
+  
+ 
+ 
+ 
+  
+      
+  ! 
+ 
+ 
+  
+ 
+ 
+   
+  ! # 
+  
+    !       
+ 
+ 
+ 
+ 
+ !  " # 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ ! ! 
+     
+ 
+  
+  
+ 
+ 
+ 
+ ! 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+     
+   
+           
+        
+   
+    
+   
+   
+                
+  
+     
+      
+ 
+     
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+   
+ 
+  
+   
+     ! 
+ 
+  
+  
+    !   
+     
+   
+ 
+  
+  
+   
+  
+ 
+ 
+ 
+ 
+  
+       
+ 
+    
+ 
+    
+  
+     
+   
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+  
+ 
+  
+                                  
+                      
+                           
+               
+                                                                                                
+ 
+     " # & ' ) * + * * ) - . / , 0 1 0 * . / , / / 2 , - ) 0 1 / . 0 2 / 0 2 / 1 - / 3 / 2 1 2 0 2 4 2 / 1 0 . 0 4 4 3 4 3 2 0 2 / 4 , - 0 1 0 - . 2 6 2 6 2 3 1 2 1 / 3 * / 5 7 1 - 0 / , 4 6 4 - / + 1 + . 4 2 1 2 2 4 4 2 - 0 7 + . , - 1 + 3 1 2 / 4 0 ) ) , - - 3 0 1 5 3 . 1 1 0 3 3 6 5 3 0 3 7 5 0 3 5 6 6 7 5 5 7 : 7 / 8 3 5 4 6 3 5 1 5 4 2 7 7 6 : : 8 6 5 3 1 2 0 5 1 3 2 7 5 7 4 / 2 / 2 0 3 / 5 1 4 0 0 - + ( & ' + & ( & $ ' ( ' ( ' % ' * % ' ) ) ' & ) % % ' % ' $ ( & & & $ % ' % % & ' % / . ' $ ' ) % & % ) & ) ' & " % ( % % $ % # $ # ( % ' ( $ $ " % & ' $ % % & % * ( $ ' % " $ $ $ ( $ % ) ' ( % $ ' # & # $ ( ( ( $ '   # $ $ $ ( ( % "  & ' ' ' % # $ $ ' ' $ $ % % #  "  " $ $    # !  
+ 
+  ! # 
+   
+  
+       !  
+   ! " * ) ( ' % ' + & % & $ % ( $ ' $ & & % & # # ( # # # " !     
+ 
+ $   
+ 
+       ! " $ &   
+ 
+ !   
+ 
+      
+ 
+ ! !  
+ 
+  
+  
+ ! 
+ " 
+ 
+      
+  
+ 
+ " 
+ #     
+  
+ 
+ 
+ 
+  #  "   "  
+    
+  
+ 
+  
+ 
+  
+   
+ 
+    
+  
+ 
+ 
+  
+ 
+ 
+      
+   
+ "  
+  
+    
+ 
+  
+ 
+ 
+ 
+ 
+ " 
+       
+  
+  " # #     
+    ! "     
+ 
+    " 
+ ! 
+ 
+ 
+    !   
+   !  " ! &   
+ 
+ 
+   
+       
+  
+ 
+  
+  
+ 
+ ! 
+  
+   
+  
+ 
+     
+ 
+     
+      
+ 
+ 
+       
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+             
+    
+     
+   
+ 
+ 
+  
+ 
+    
+   
+   
+   
+  
+ 
+ 
+       
+ 
+ 
+    
+ 
+ 
+ 
+ 
+  #  
+ 
+ 
+   !   
+ 
+ ! 
+ 
+    
+  
+ 
+  % 
+  
+ " 
+ 
+ 
+ 
+ 
+     
+ 
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+     
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+   
+   
+ 
+  
+ 
+ 
+                                                                                       
+                                                                                                               
+ ! #  & % ( + ( , - / 4 2 5 3 , , - , * / 3 1 3 4 2 , / + - . / 0 3 1 0 1 - 4 4 / / - 1 - 2 / 0 2 8 4 1 2 1 / + 1 1 3 7 1 0 1 - 0 7 . + 4 7 7 3 3 3 / 0 7 7 4 / 7 9 1 2 , / 3 6 2 0 2 1 / 4 7 1 2 / - 2 . / 1 3 / 2 4 2 1 / / / 1 , 1 0 3 4 4 1 1 0 0 3 - , - - 1 4 1 / / / 7 2 / 2 1 0 2 1 2 8 0 3 ; 3 . 5 : 5 4 ? 9 7 8 9 8 5 5 3 5 5 7 4 3 6 : : 7 8 4 0 3 : 8 4 7 7 5 9 7 5 2 2 3 5 2 7 2 4 7 4 4 6 0 0 2 - 0 3 / ( - ) - ) , / ) & $ % ( . / + + * * ) * ' & & # ) ' % ) $ ' $ ( + ( * - ( ( * $ * ( % , $ # ( , ) * ' " & ' % % & & ! ( * % ( * & # & ( ' + , * ' ! $ & & % & ( ( ' * % ( ' % # ! $ % & ( ( ' ( $ ( % ' & $ % " % # + % $ $ & $ % * ( % $ ! # ( ' * % ' % " % * & & % ' & ' $  $ # $ '  ! !      
+ 
+ 
+ 
+ 
+   
+   
+ $  $     " ! ' ' $ & ' * " " # " % ' # % ' * ( $ ) % % ' " & ' & $ ! # #  ! 
+    
+ 
+ 
+ 
+ ! ! 
+ 
+  
+ "  
+   
+ 
+ 
+ 
+ 
+   ! 
+  
+  " #  
+ 
+ 
+ 
+       
+ !  
+ 
+ 
+ 
+ 
+  ! # $ #  
+ 
+ 
+ 
+  
+  ! # 
+  
+     
+ 
+   
+ ! # !   "   !  $    
+ 
+  #   
+     ! " ! 
+   ! !    
+  
+      
+ 
+  
+  ! ! 
+ 
+ 
+ 
+ 
+   
+ 
+ ! !  # # $ $     
+  "   
+       
+ 
+ 
+ "   "   !     
+    !     
+ 
+ ! 
+ !    
+   $ 
+ 
+   " !   
+ #   " "   
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+    
+  
+   
+     
+ 
+    
+ 
+ 
+      
+    
+   
+ 
+  
+    
+ 
+   
+    
+   
+         
+  
+   
+ 
+  
+ 
+ 
+ 
+     
+ 
+ 
+  
+ 
+  
+ 
+  
+ 
+ 
+    
+ 
+ ! ! 
+ 
+ ! ! ! 
+       
+ 
+ 
+ 
+    
+ ! ! !   
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+         
+ 
+  
+ 
+ 
+  
+  
+   
+ 
+ !  
+    
+ 
+  
+ 
+    
+     
+                                                              
+                                                                                                                                
+    " % ( " # & ( + , 3 3 / , 2 7 5 0 0 - - 1 1 5 6 3 7 5 2 2 + - - / - 1 / / 4 / 4 8 3 , 1 2 2 3 2 1 4 1 0 3 3 7 / 0 . / 3 2 5 2 2 1 5 4 3 . 0 8 9 5 5 8 8 4 4 5 4 4 9 4 3 1 2 1 4 4 . 4 1 8 4 9 8 1 . + 1 2 3 1 0 0 / 5 7 2 1 3 0 1 3 7 3 2 / / 2 0 , / 2 . 1 4 / / 2 1 0 1 , 0 - 0 0 2 - / 0 0 1 2 4 9 8 2 5 5 : 8 4 : 2 3 7 : : 7 5 2 8 9 5 6 6 3 8 : 7 > 3 6 7 6 ; 9 7 3 9 6 5 6 4 4 1 - 3 1 0 3 3 2 2 2 1 / / , 4 4 2 + + , * + , , ) ( % & ) + * , , ( * & % & # & ' ) & + ) ) % ) $ # ' . * ' ( - ( ' ( + & % " ) + ) ( # % ' & % ' & # " ( ) + & ) ' * & ( * ( ( ' ) # % & $ ! ' " ' ' % " & $ # ' & # & & % + , ' % % ' % # " ' ) ( ' ( $ # ' % $ ! ' & $ # $ $ % $ & ( ' " # $ & % ( * ) * % % $ % ! # # !  
+ 
+     
+ 
+  
+ 
+ 
+  
+ 
+ 
+  
+ !   ! ! & % " $ & ( & # % $ ' & $ ) % ' ' + # ' & % $ " " % " $ !   ! ! 
+ 
+  
+ 
+ 
+  
+ 
+     
+  ! # ! 
+   
+     
+ 
+ !  
+       
+   # 
+ !   
+ ! ! 
+ ! 
+   #  
+ 
+  !  
+   
+ "   #  
+ " 
+  
+     
+   
+ ! 
+  # 
+  % "    $   
+ 
+ 
+   
+ 
+ 
+ 
+ " 
+  
+ 
+ 
+ !   
+   % !       ! 
+ 
+ 
+ 
+   
+ 
+ 
+     
+  ! 
+ 
+   
+ 
+ " # !   ! ! " % ! ! 
+  ! ! $   " ! $  
+   ! 
+ #   
+  
+  
+  !  ! " 
+ 
+      ! ! 
+   #    
+ 
+   " 
+ " % ! " !  
+   $ 
+  
+      
+   
+  
+ 
+   
+        
+      
+ 
+ 
+ 
+    
+     
+  
+  
+ 
+ 
+ 
+      
+  ! 
+ 
+ 
+    
+  
+    
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+   
+   
+ 
+ 
+   
+  
+  
+    
+  
+ 
+ 
+  
+ ! ! !  "   
+   
+   
+ 
+  ! ! !  
+ ! 
+ 
+ 
+ 
+ ! 
+ 
+  
+  
+ 
+  
+ 
+   
+  " " 
+ 
+  
+ " 
+ 
+   
+   
+ 
+  #   
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+  
+                                                                                                                                                                                                
+ 
+ 
+ " $ " % ' ( ( + 1 2 , / / 5 6 . / - 3 3 4 1 / 1 4 8 0 2 0 - + 2 1 / 1 / 0 3 4 5 1 , 1 . 1 / 2 + 3 1 2 1 1 5 2 , * 1 3 3 . 0 1 5 2 4 4 1 5 2 0 0 2 7 7 8 7 6 4 2 3 0 0 0 3 5 / 3 2 2 5 3 3 2 2 / , , - 0 . 1 2 4 5 5 1 1 2 3 3 2 8 2 2 1 5 1 2 . - + / 1 / 2 2 - / 3 2 2 2 , , 0 / , , 4 8 2 4 0 3 9 3 3 3 ; 8 : 4 8 3 0 7 : : < 5 < 7 - 4 4 6 1 4 6 6 1 3 / 2 5 4 5 3 2 4 7 0 1 / / 0 0 2 5 4 2 3 1 1 4 2 3 2 - - + + ) , / . + / ' ( $ * , - ( + + $ % ( % % & % % ) ( % $ & , ) * * " & & $ ( & ) & & " & " ' % ' & ' % ( & ' ' & ' $ # " ) # ) * ' % ' $ + + * + ' ( % ! $ & # % # # # & "   $ $ ' % ) ( & ( ) + * $ $ ' " # " ' , % % ' & % ( $ $ $ # $ $ $ $ " $ $ ' ' $ ( $ & % ) * ( % , ( % & " " " &        ! 
+     
+ 
+         !    !   "     $ % $ " ( ) ( ' ' % ' % ' ' * " # # # $ % "  " " !      #   ! 
+ 
+    !     
+   # # !  
+ 
+ 
+ 
+ !      
+ 
+  ! 
+      # 
+   
+ ! 
+ 
+ 
+  
+     
+ 
+ 
+      
+ ! 
+ 
+    
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+     
+   
+ 
+    
+ 
+ 
+ !   
+ 
+ !           
+ 
+   
+ 
+ 
+  
+ 
+    
+ !  
+    
+ 
+  
+ 
+ 
+ 
+ 
+    
+   # " " #   
+   " ! # ! ! !         
+    
+ 
+ ! 
+ 
+ ! !     
+    
+ "          
+     !  
+ ! 
+     
+ ! 
+ 
+ 
+     "  
+ 
+   
+  
+   
+ 
+  
+ 
+       
+  
+    
+          
+         
+ 
+  
+  
+        
+    
+     
+ 
+ 
+    
+  
+ 
+ 
+ 
+ 
+ 
+ !  
+      
+     
+   "     
+ 
+   
+ 
+    "   ! 
+ 
+ ! 
+ 
+    
+ 
+ 
+    
+ 
+ 
+  
+ 
+    
+  
+  
+ 
+    
+ 
+  
+ 
+  
+ 
+  
+ 
+   
+ 
+    
+ 
+ 
+     
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+  
+                                                                                                
+                                                                                                
+ 
+ 
+ " ' $ ' % * ) ( - - - , 0 0 - - 0 . / / 0 1 - . . / 2 + . * - 0 . , 2 1 . * / 3 3 - . . / 2 / 0 / 0 / . 4 1 1 . - 1 4 2 / 2 2 4 / 2 6 2 2 3 4 3 2 7 2 3 7 4 2 2 5 1 3 7 5 0 / 2 2 3 3 3 0 3 6 7 0 ) / 0 + , + 4 0 0 0 0 . 3 2 3 4 0 3 - 2 3 - . * * , - 0 1 . - ( 0 2 3 6 * + + / . - 1 2 6 3 2 3 4 6 5 6 9 2 7 4 8 5 8 5 4 6 8 2 7 5 1 1 4 4 4 1 6 4 3 7 . 4 ; 7 7 0 2 3 6 1 3 3 , / / - 4 6 4 . 3 3 1 4 4 2 / / - . + * 2 ) ) ( & (   ' ' + + ( % % # " $ # ) & $ ' ' % & % ' * * ) % % ( , ' # & $ ! % $ ! ' $ & & ( & ( & % % ( ( % ' & % % * , & % ) $ % ( ( * ' # & ' ' # & ' $ ! $ ( " % ' $ $ # ( $ % ' ) ' ' % & % $ $ % & ' % ( # ' ! # $ & #   !   # " # % # ' & # ' % # $ & ) & ! & % $ " # $  
+  
+    !   
+ 
+ 
+ 
+ 
+ 
+      " 
+  
+      
+ 
+ ! $ "  " # % # $ ) " # # ( $   ! % $ ! $ " " ! ! ! ! %  ! ! 
+ ! 
+ 
+ 
+ 
+   
+  
+  
+  ! 
+    
+ 
+   
+ 
+   
+ 
+ 
+ 
+     
+ 
+   
+ " 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+  
+  
+   
+ 
+ 
+   
+  
+ 
+ 
+ " 
+ 
+ 
+ 
+  ! 
+  $ 
+   
+ 
+  
+ 
+   
+  
+ 
+    
+ 
+ 
+ 
+ 
+ 
+  
+     
+   " 
+    
+ 
+  
+ 
+  
+ 
+ ! 
+ 
+ 
+ 
+ 
+  
+ ! !   " 
+ 
+ 
+  
+  $ 
+  
+   !     
+ 
+ 
+  
+ 
+     
+  
+ 
+ 
+   ! 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+    "   
+ 
+ 
+ 
+ 
+  
+      
+                         
+                                         
+ 
+     
+ 
+    
+  
+ 
+   
+ 
+     
+   
+ 
+   
+ 
+ 
+ 
+  !    
+    
+ 
+   !  
+ 
+ 
+ 
+ 
+ 
+    
+ 
+    
+       
+ 
+      
+   
+  
+ 
+ 
+ 
+   
+        
+   
+ 
+ 
+ 
+ 
+ !  
+      ! 
+                                                                                                  
+                                                                                                    
+  
+ % % ( ( , + ' , - , ) 1 0 , * * , + . , 2 / ) , ) / - + + . / / - + * + * . / . / . + 1 1 . . 1 3 1 2 0 / 0 / 0 8 0 1 + 0 1 7 6 6 3 1 , / 1 0 . / 2 3 1 2 3 0 1 3 9 0 - / ) / , . * * / 1 1 1 / - 0 0 / . + / ) / 2 1 . - + 0 0 , . / 2 + , * ) - , / - , - . , / - - / , ( , . 0 - , - 2 1 3 7 1 4 3 6 5 2 5 5 2 5 1 2 6 5 3 5 7 8 8 3 2 6 1 0 3 8 9 3 4 4 5 7 : 4 4 7 4 2 / / 1 0 4 , / 7 3 0 3 . * 3 2 . . . , - - * . ( ) ' $ $ " & & % ' ( % % $ % % % ( # $ & % " ! $ ! % ' ) % ) # ' * % $ # $ * & % % # % ' * & ( ' ( ( ) ) $ $ $ ' # ( % $ % % % # # ' ' & $ ' % $ ! & % "   ! $ $ & ( $ % # " # # ' % % % $ # # # $ $ " $ ! $ ! " ! # # #   # " #    
+ # ! % ! ! % $ % % "    " ! ( ' # ! ! !      
+ 
+ ! 
+ 
+ 
+    
+          
+ 
+  
+ 
+  
+ !  $ " "    % " # % # # " " & # " "   !   ! ! !   
+   
+ 
+ 
+ 
+ 
+  
+  
+  
+ !   
+  
+ 
+        
+ 
+  
+ 
+ 
+     
+ 
+ 
+       
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+  
+   
+ 
+       
+  
+ 
+  
+ 
+ 
+ ! 
+ 
+  
+ ! 
+ 
+   
+   
+   
+  
+ 
+  
+ 
+      
+ 
+ 
+ 
+ 
+       
+ 
+    
+ 
+ 
+   
+ 
+   
+   # 
+  !   
+   
+ 
+ !      
+   
+ 
+ 
+     
+ 
+ 
+ ! 
+ 
+ 
+ 
+      
+  
+  
+  
+ 
+ 
+ 
+ 
+  
+ 
+     ! 
+ 
+       
+              
+  
+   
+   
+                                        
+            
+     
+   
+      
+  
+ 
+      
+   
+ 
+  
+ 
+  " 
+     
+         
+ 
+   
+ 
+ 
+   
+  
+ 
+ 
+    
+    
+  
+ 
+       
+ 
+  
+ 
+  
+ 
+ 
+      
+  
+  
+ 
+   
+                   
+                             
+          
+                                    
+                                                                                                   
+    ! " # * ( # / , , / + + . / / 0 / / . , . . * + + - ) - , . - - . . + ( - 0 1 , - - . - - , - - 0 / - / - 0 / / 4 0 4 - - 1 2 3 . 1 4 - 0 5 0 2 - / 4 5 5 0 / / 2 3 / 1 / 2 3 / . * / / , . 3 , 1 1 . / / + / , . 2 5 / + + 1 1 * - - * ) * * . 1 - ) * . , - , / , - ( + + + . . ' * - - 0 3 / 0 1 4 8 4 4 2 4 2 / 1 . 5 5 9 6 ; 9 7 4 6 7 / , 1 7 3 4 5 0 - 0 3 4 3 / 1 1 - 2 1 1 1 0 * 3 0 1 , + - ' * * . * ) ( ' , - # # % # " ! $ % & $ % " " $ & ) ( $ ( " % " $    " # # % # "   # ' # ' # # #   !    # " %  $ $ $ # $ # "   $ & $ ! # ! ! & ( " " $ # # # '   $ # " ! % $   # # " "    & " ! " & % $ # # # $ $ !   " $ ( !   !  ! $ " ! " " & ! " % " ! " $ $     # # !     
+  $ $ " % "      
+  
+          
+ 
+ 
+       
+  
+     
+ 
+ 
+ 
+   
+ 
+ 
+    
+ " ! $ 
+ 
+ % $ " "      
+ 
+ 
+ 
+    
+  
+ 
+     
+ 
+ 
+  
+                 
+             
+  
+       "  
+ 
+   !   
+    
+ 
+  
+   
+   
+ 
+          
+    
+           
+  
+   
+ 
+    
+ 
+  
+                 
+    
+  
+ 
+     
+ 
+ 
+  
+          
+    
+ 
+  
+    
+   
+             
+ 
+     
+ 
+   
+ 
+    
+                      
+                        
+                                   
+    
+   
+   
+            
+ 
+ 
+    
+  
+  
+ 
+            
+ 
+       
+ 
+    
+ 
+          
+ 
+  
+   
+     
+    
+ 
+ 
+ 
+ ! 
+   
+         
+     
+ 
+     
+      
+  
+          
+    
+          
+  
+ 
+ 
+ 
+         
+   
+    
+           
+    
+     
+ 
+ 
+                                                                                                  
+  !  % ' ' + - , + 0 / + * / 0 / + - . * , + - 2 0 0 - , - . - + 2 / + ( , - + * ) - 1 + ) ' . / + / 0 - / 0 - , ) 0 2 - * . 1 - ) + - + / 2 3 6 1 / / 0 + - . , + 1 3 4 * 0 1 / . . , * * + 0 / 2 4 - , - / , 0 3 - - / 5 , / 1 0 / ( + - ) , , 0 . - ' + . , / . + ) ( , , , , , * , * . 1 0 / / 1 / 0 6 6 6 3 2 2 1 . - 9 5 2 1 7 5 4 7 4 2 2 1 0 2 5 2 0 . * . . 4 1 0 + / + 3 6 3 3 , 2 / - 0 - & ( * . ) % ) & ) ) * & ' ( ) $ ! $ ! % $ % %   " $ ) ' & $ " "     " 
+ " % $ $ ! "   ! $ " &   ! % #  
+ 
+ & !   " #    " & $ $ $ " # " ! ! ! 
+ ! & $ ! $ " & & #   $ % $ # $ ! # " # # & !   !  " $ ( $ $ " & $ $ & % " $ $ % # ! ! ! ' # $ $     ! ! & # " ! ! ! $ !  # #   
+      $ $ ! "   ! ! 
+ 
+  
+   
+      
+            
+  
+    
+   
+    
+ 
+     !         
+ 
+ 
+  
+ 
+    
+ 
+      
+ 
+  
+ 
+ 
+ 
+      
+ 
+  
+                        
+         
+   
+ 
+   
+ 
+ 
+ 
+  
+   
+        
+          
+             
+ 
+    
+                            
+  
+  
+   
+   
+ 
+ 
+ 
+                  
+   
+ 
+             
+       
+                                                                                          
+ 
+         
+ 
+    
+ 
+       
+      
+ 
+ 
+                      
+ 
+ 
+   
+ 
+ 
+   
+  
+  
+ 
+    
+ 
+ 
+ 
+   
+         
+                        
+ 
+ 
+      
+         
+    
+  
+ 
+        
+  
+ 
+  
+                      
+       
+ 
+ 
+       
+                                                                                                 
+   
+  " % % ! ) + - , / / , , / . + ( ( + + ) , * 0 , ) , . 0 - - , + , 0 , , ) , , + ( * + , / , - 4 . . - - / 1 + + 0 . 0 3 - 0 * - 3 2 0 3 . . 3 2 2 + . / - . , , - . 0 * , . / - 2 / ) - . 1 . - . 0 . 3 - ) + - , 2 3 2 0 . . 1 , * 0 - , , + 1 0 . ) * 2 , + * * + * - , + + * ' - , / 2 , + , - + 0 / 0 0 , 3 3 3 0 1 8 5 / . 3 4 0 3 3 4 4 / 5 - 3 1 2 0 0 1 1 2 / / - - . 1 3 1 0 , 4 . - , ) + + * ) ( ) + + ' ) ( ' ' ' # #  " % $ $ " % " $ # # #  $   !   " " ! ' # # # % 
+ !   ( (   ' ' % #  $ ' $ $ % "    # % % $ # 
+   $ # # " !       ! % $ & " %   ! "  "    
+ " ! " # ! !   " " # ( $ # ! # ! ! # ! $ # " " " ! ! # ! # ! " ! ! ! " " # "  
+ " " # " $   
+   !  $ ! # "     $ % !   
+ 
+   
+   
+   
+   
+                  
+     
+ 
+  ! !   
+   
+    
+ 
+ ! !  ! 
+ 
+    
+ 
+ 
+  
+    
+ 
+  
+    
+  
+ 
+       
+                
+ 
+ 
+ 
+ 
+      
+ 
+  
+    
+ 
+  
+   
+ 
+ 
+   
+ 
+   
+         
+  
+  
+   
+ 
+                         
+ 
+              
+  
+  
+ 
+ 
+  
+ 
+          
+       
+   
+   
+  
+   
+    
+      
+    
+ ! 
+     
+                                                                                                    
+ 
+       
+  
+ 
+  
+ 
+                  
+          
+ 
+    
+      
+  
+       
+ 
+                                 
+       
+  
+    
+ 
+  
+ 
+   
+                               
+                       
+ 
+                                                                                                
+  
+   # " ' # ( * * , 1 - + ) * , , + & - * ) + / / . * + - 1 0 0 - + + / 0 . , ( * * & , * * * ) + . 0 / - + - . . , , ( * 4 + - - , 2 1 0 + * / 0 - - * - 2 . + - ' . 0 / - / * - . , / , / / , 1 + 2 2 - - 2 , , - . * ) * ( , . + / - + + - - + , - 0 - * - , - + 0 * . . . * / ' % * + - 0 + - - 4 , . 1 1 - 2 / . 1 0 2 1 0 , 0 1 5 0 + 0 3 1 0 0 7 1 - 0 0 / / . ) / 7 1 1 0 / 1 - 1 . , ) ( , 0 6 1 ) + , + * * % ' % ( & % # $ "  " % ! 
+   " ! % 
+ ! ! ! "  # !   ! " ! " # ( % & "  ! & $ " "   
+ ! & ! ! " "         $ * %       ! ' $ #   ! " "   # # 
+ #   
+ 
+ & ! 
+ 
+     # " # $   " " # &   " $  
+ " # $ !   # % ' !  ! # % ! 
+   "  $ !      # "  ! " 
+ ! #     " " 
+ " " "   !   ! 
+ # ! 
+    
+ 
+ 
+        
+             
+  
+    
+   
+ 
+ 
+  
+   
+   ! 
+  
+  
+ 
+  ! 
+   
+ 
+ 
+  
+   
+ 
+ 
+   
+      
+ 
+    
+                
+   
+   
+      
+   
+        
+     
+ 
+ 
+    
+  
+    
+     
+ 
+    
+ 
+  
+          
+ 
+   
+ 
+        
+       
+ 
+ 
+    
+    
+ ! "          
+       
+     
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+          
+   
+     
+   
+                                                               
+                
+                
+           
+  
+       
+    
+                 
+                                                 
+         
+        
+    
+    
+  
+ 
+   
+   
+  
+ 
+ 
+                       
+          
+   
+      
+   
+  
+ 
+                 
+                             
+    
+ 
+         
+                                         !  ! # " ' * , - . , 1 / , + ' - . - - / , - + , , - 0 0 , 0 / . . 1 - 1 . ( + + % ) & ( . ) + - 0 1 / / , ) % + . ) + 0 - . . , , - 4 + ) / + . / + + 2 0 2 , / / , . + 0 - + 0 , + - 0 , ) , - . 0 - . . 1 4 0 4 . , , ' 1 - / 0 ( * + + . ( ( * . ) ) + ) / 0 - . , + . , + ( + . - + . , 1 1 6 6 4 / - - 2 - - / 0 / / . / 4 6 5 - 0 . 3 1 3 4 4 2 0 1 3 1 , 4 . 1 0 - 2 + + , 1 4 4 2 / + ) - - - , - + ) # , ( ' ' ' ' ' & #  
+ # $ " 
+  " ! & $     
+ # $ $        #   ! " !     ! # ! !    
+   #  # ! #   ! $ !   ! $   ! ! # 
+ %     $ $ $ & & # ) % ! !  " " 
+   ! # 
+ 
+ " 
+ 
+ & $ # # # # ! $ !    ! " 
+   
+ $ & 
+ 
+ ! % "   # " " # ( "   ! # 
+ " $ $ 
+    ! 
+ % 
+   $ $ ' # ! ! "           
+ ! 
+ 
+  
+ 
+ 
+   
+  
+          
+         
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ " # 
+ 
+ 
+ 
+ 
+ 
+  
+          
+  ! 
+ !   
+ 
+ ! 
+  
+   
+ 
+ 
+   
+                
+  
+ 
+                  
+  
+  
+        
+     
+      
+ 
+      
+      
+     
+ 
+ 
+ 
+                   
+ 
+  
+      
+   
+ 
+ 
+ 
+     
+    
+     
+  
+ 
+   
+   
+      
+      
+ 
+   
+ 
+         
+       
+                                            
+  
+                          
+    
+                         
+          
+                  
+      
+          
+    
+       
+                                    
+        
+    
+    
+     
+         
+   
+        
+  
+    
+ 
+ 
+  
+     
+ 
+            
+ 
+  
+                                                   
+        
+                                        
+ 
+   ! $ ' ' * , - ) * - / + , , . - / , 2 , 1 * * ( . - 4 . / , - - 2 . ) + / , ) ) , & ) - ( * ( - 1 / 2 / ) + + - ) . 0 . 2 - , . , . , . / + - + ) 0 4 2 / - 0 1 0 + / . 0 , . 0 + 0 2 / 0 / , - * ) , / . . / / 1 . / + , - / / + - / ) ( ( ( ' + + - % * + , 1 + - * + , * ( $ , / . + 1 0 - 1 3 3 3 , , . . 0 2 / + 0 4 / / 3 4 - . / 4 / 6 - , 0 2 , 0 1 * . 1 , , + - 2 - - + - 1 - 0 2 * , * ( - + - ) ( ( ( ( " " ) ) " 
+ 
+ 
+ " #  !    ! ! $ # " ! 
+   # # ! % # "         
+ 
+ " ! " % ! # $ " $ ! 
+ " # 
+ "  "   " !     # " % '   #   ! 
+ !  ! # # % & " ! % " ! $ !   "   
+ " " "   # & $ $ #       ! 
+ " $ # " 
+   
+ 
+ #  $     # " # " " ! ! #  
+     !   # "  
+ ! $ % $ # % $ !  
+ 
+ 
+     
+ 
+   "  
+  
+       
+     
+ 
+   
+       
+ ! 
+     
+ ! !     
+  
+ 
+      
+ 
+   
+ 
+        
+  
+    
+    
+  
+                                   
+      
+ 
+        
+              
+  
+ 
+     
+ 
+ 
+ 
+      
+   
+  
+ 
+              
+ " 
+  
+     
+ 
+  
+    
+ 
+    
+     
+ 
+  
+  
+  
+   
+ 
+   
+   
+ 
+   
+         
+ 
+     
+                                                                                                                       
+  
+   
+                  
+ 
+    
+ 
+            
+ 
+ 
+       
+ 
+ 
+  
+   
+   
+ 
+ 
+        
+      
+ 
+                  
+    
+              
+             
+  
+    
+   
+               
+  
+   
+    
+                                   
+                                                              
+ " ! # ! # % & ) + / + + - 0 2 / * 1 / + / . - - . ) 1 , , . . , 2 1 / , . - - - 1 4 , - * + - / / 0 * . 5 2 1 , / 0 / - , ) , / 4 0 / / - . / 0 2 , * * / + 1 . 2 1 2 1 . - - / 0 . 3 . / 2 0 4 1 / ) * 0 , 0 0 . / . 0 0 ) . / , , ) + - - * ) + ' + ( ( ) ' ( . 2 * * ( ( - , ( - * + 3 1 . ( - + , , - 0 7 1 1 - , . 3 1 . 3 1 1 1 , 4 6 3 0 3 3 0 1 2 4 4 0 / 0 . 3 / . / / 3 4 . ( 0 1 + / . / ) , , 0 - & ) ) + , + * # ! ( ) # ! 
+ 
+ " " $ # $ 
+   !   "   # $ % # % # " $ # !   !    
+ $ $ & #     !    ! # $ # 
+ ! % ! # % ' !   " $ & #   " ! #   
+ ! $ $ ! $ '   ! ! " % " # "     ! " ! " ! " " " # ' $ " %   # $ " # # ! " " % ! 
+ "   " "  !   ! ! " 
+ " $   ! $ " " #   # " 
+ # & & $ & ' '   # $ # 
+ " "     
+  
+  
+   #   
+    
+  
+  
+    
+ 
+ 
+      
+ 
+ 
+ 
+  
+   
+  # 
+ 
+ 
+       
+  
+  
+ 
+ 
+ 
+  
+ 
+ 
+    
+ 
+   
+ 
+ !  
+ 
+ 
+  
+ 
+ 
+ 
+   ! 
+  
+     
+ 
+                      
+ 
+ 
+ 
+    
+ 
+ 
+   
+ 
+     
+ !  
+    
+ 
+  
+      
+   
+      
+  
+ 
+             
+         
+  
+ 
+ 
+ 
+ 
+ 
+ " 
+ 
+    
+  
+ 
+      
+ 
+ 
+ 
+ 
+ 
+              
+ 
+ 
+   
+ 
+ 
+ #    
+ 
+   
+     
+                
+    
+  
+                
+        
+               
+        
+                  
+  
+  
+      
+   
+  
+ 
+     
+   
+   
+   
+               
+  
+ 
+  
+ 
+ 
+      
+       
+ 
+  
+  
+ 
+     
+ 
+   
+  
+  
+ 
+   
+ 
+                   
+                     
+                  
+                               
+ 
+                                                                                                        
+    "     & & , + / - + 2 7 1 . 1 0 , / * + * * . 3 1 . * * / 4 2 0 - , + 2 / 0 0 2 1 , + + - / / 1 . 0 1 4 7 4 . 0 + 0 , , - - 0 , 2 1 . + . . / - . , 0 1 0 1 3 1 + , / 2 1 1 1 2 2 0 / 0 . 4 3 2 + 0 + 2 3 3 1 . / 2 0 - 1 3 . - 1 2 1 0 - & , ) - + * * ) 2 4 - + + . - 1 - ( ) , * 1 2 1 , 4 3 / 0 . / 0 0 1 5 3 2 - + 3 / 1 2 4 2 : ? 2 2 5 6 6 5 2 5 3 2 3 0 1 0 4 2 / 3 2 1 0 * - - , ( ( . . - . . 0 * ( ) * + + ) + ) ( (  ! "   # & & # % $ #     ! # % ' % & $ ! # ! "   !  
+ 
+ " " ' & $   ' % " $ % ' ' $ ! % ( $ & % $ % ) % & & % & $ $ # " $ ' % $ % # # $   $ $ # " " # " " # 
+ # # ' ( " % $ ) #   ! % & & &   # ' ! %   # 
+  " % $ 
+ 
+    " "  # $ & & , &  # $ % # # $ & ) % ' * + ( % ) % # $ % #  
+ 
+    
+  
+   
+ 
+ 
+          
+ 
+       
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+ 
+ 
+     
+ 
+ ! 
+  !   
+ 
+ 
+ 
+ 
+ 
+   
+ " !    
+       
+      
+  
+  
+ 
+  
+  
+   
+ 
+    
+   
+  
+ 
+  
+ 
+ 
+  
+ 
+    
+ 
+ ! 
+ 
+ 
+ 
+   
+    
+ 
+  
+  !     
+ 
+  
+ 
+ 
+  
+ 
+    
+  
+   
+ 
+    
+ 
+ 
+ 
+    
+      
+ 
+ 
+  
+ 
+ 
+ 
+ "   #   ! !   
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+  
+  
+ 
+ 
+ " 
+ 
+ 
+ #    ! 
+  
+   
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+   
+  
+ 
+                                                   
+  
+                      
+       
+     
+    
+   
+ 
+ 
+ 
+   
+  
+    
+   
+  
+ 
+  
+  
+     
+ 
+   
+   
+       
+  
+  
+ 
+ 
+ 
+      
+ 
+ 
+      
+ 
+  
+ 
+   
+  
+    
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+                                                               
+                                                                                                                                   
+   " % % " ' % ( * . . 2 2 5 3 5 3 2 . 2 0 - , * / 0 2 - 1 2 0 3 2 0 - 2 0 0 1 1 / . + , + + , + - 1 4 3 3 2 / 0 3 . ( 3 1 / - , . 0 + / 2 . + / 3 . 0 2 4 3 0 0 / / / - / 5 0 3 1 / 3 1 0 1 0 0 6 1 , , + . . 5 / , . 0 , + 2 0 - 0 - 5 4 1 2 + * ' + + - + 0 0 3 * ( * + / 3 1 - , / + / 2 / . / 1 3 4 . / . 0 2 5 5 4 / 4 7 7 1 / 2 7 6 4 7 ; 6 3 4 1 3 4 5 1 5 0 5 . / 0 0 3 6 1 0 . - - / / / , 0 6 0 , ) , ( ( & , ' , * & ) $ # ! " " & $ ' ) & ( & & " ! $ % " & ( $ & #  
+ ' $    " "  ! # ( $ & ' # ! $ ( ' ' $ # " ' " % # " & ( & & ( $ + $ * * # # % ' $ ( $ # &    ' ' $ # %   $ ' ( % % % # % $ $ ( % % # # * ' ' % & #  $ % # " $ # " " ! $ % " # # " " " & ) * &   " ! # & " ! # * & ( & . * + ' " ) ' $ #  
+ 
+   
+  
+     
+   
+   " 
+  
+   
+ 
+ 
+  
+     
+     
+       
+ 
+ 
+ ! "   
+ 
+   
+  
+         
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+   
+ 
+      
+ 
+  
+ 
+ 
+  
+ 
+        
+    
+  
+    
+ 
+ 
+       
+ 
+  
+ 
+ 
+ 
+ 
+      
+ ! 
+ 
+  
+  
+ 
+ 
+   
+ 
+   
+    
+   
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+  
+   
+ 
+ 
+    
+    
+ 
+ 
+    
+ 
+ 
+ 
+ 
+   ! ! ! " 
+   " # # ! 
+     
+     
+       "  ! # 
+  
+ 
+   ! 
+ 
+   
+  
+ 
+   !   
+ 
+ 
+ 
+ 
+ 
+    
+              
+                 
+    
+  
+       
+  
+  
+ 
+  
+      
+ 
+ 
+ 
+  
+    
+ 
+ 
+             
+   
+  
+    
+  
+ 
+ 
+ 
+ 
+  
+ 
+      ! 
+  
+ 
+ 
+   
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+ 
+     
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ !  
+ 
+    
+ 
+  
+ 
+ 
+ 
+   
+ 
+       ! 
+ 
+ 
+ 
+  
+ 
+                         
+                  
+                                                     
+                                                                                                  
+ 
+    ! # $ " ( , , - - 3 3 2 5 5 1 3 1 / - / / , . , 2 . 0 2 / 4 5 1 . 1 - / 5 1 2 - + 1 / * + - 1 1 4 2 / * . 2 3 0 - / - . . - . 3 0 1 0 / . 3 0 / 1 4 3 . - / 1 5 6 1 4 - 2 3 2 2 0 1 1 / 5 7 / 0 * , + * ) 2 1 - / 0 0 . - / 0 0 * * 0 3 0 - - - ) - / / 3 2 / 2 / - + , 0 . , . / + . 3 3 1 1 . 1 4 , . . - 3 2 2 7 0 2 3 2 0 1 3 ; 6 < 8 7 7 6 9 2 4 6 7 5 4 1 0 0 / 2 0 2 5 6 0 3 2 / / 7 2 . / 3 / ( ( ( ( + % + * * / ' ' $ $ # $ & % % & ' * ( $ % $ " " % " % & & # # !   # $     # ' % $ " ) & % ' ! # # $ ' ! % ' " & % & $ " % ( ' * ' & ' % % % ' % " & ' ' " ! $ $   ' $ % # & & $ & * ( & & % + ' * # % & $ # ' $   % $     $ ) $ " ( $ ' " ! % # & % # # % $ " # $ # $ % $ % " % $ $ * ( ' ( ) * * ( $ # $ & " ! " "     %   
+ ! 
+ 
+   ! !    
+  
+ 
+ 
+ 
+ 
+ 
+    
+         
+    
+  
+  
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ !   " " 
+ 
+ 
+     
+ 
+  
+ 
+    !  
+ 
+ 
+  
+   
+ 
+      
+ 
+   
+ 
+ 
+ " ! 
+ 
+   ! 
+ 
+ 
+ 
+ 
+       
+    
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+    
+  
+    
+ 
+  
+ 
+    
+ 
+ 
+   
+   !     
+ 
+     
+ 
+ 
+ 
+ 
+  
+   
+  
+   !    
+ 
+ 
+ ! 
+ ! ! " ! ! " $ ' % "   
+ 
+  
+  
+ 
+ 
+    ! 
+ 
+    
+ ! 
+  
+ 
+ 
+ 
+ 
+ 
+ !      
+ 
+ 
+  
+ 
+          
+ 
+ 
+      
+ 
+  
+     
+       
+             
+       
+ 
+     
+ 
+    
+  
+  
+    
+                      
+ 
+       
+ 
+   
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ "  " !  
+     
+  
+  
+ "  
+ 
+  
+   
+ 
+  
+ 
+ 
+  
+  
+     
+  
+    
+   
+     
+ 
+    
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+                                                                                                                                                                                                   
+ 
+ 
+ ! # ) ) , - + - 1 : 8 5 : : 4 3 1 0 0 1 0 - , 1 4 3 0 1 / 3 / . 0 1 2 2 8 1 - * . - , ) + . 1 3 3 . - , 0 * + / , + - / / , , 1 , / - 0 . 1 2 4 0 3 1 . 3 3 1 5 4 1 3 1 0 2 1 0 4 0 2 0 1 0 3 2 3 / , / 1 3 2 4 1 / 2 7 5 8 3 / * + 1 2 . 2 / - * ) / . , * 1 , 3 1 / / / , ) / 0 1 4 2 4 / 1 1 7 4 . 2 3 0 4 3 2 2 4 / 3 7 3 0 3 8 7 8 5 0 7 6 6 8 5 3 4 1 / 4 3 2 2 2 0 0 4 1 , 1 0 * 1 3 , + 0 2 5 * ' * & ( - + , ) ) * ' - $ ( ' + ' ( $ $ ) % % ' ! $ % # " % ' % $ # $ %   ) $ $ # & ' % ( $ # # % % # % % ( $ # " $ % ' $ & ' # & ) ) + ' $ & & ( ( $ ' ! # ( " 
+ % & # ( ) ) ( ' $ " % ' ) ) 0 ( % & ) $ & $ & $ # % ! $ # " # ' & #   % ! % ! ! " % ' % $   ' ' $ " & ! $ $ ' & % " % ( & ' ' ( ' ' & ( ( & ( ' ' ! % $ # % # " "  
+   
+ # # " 
+  
+ 
+ 
+ ! 
+ 
+   
+ 
+ 
+  
+          
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+  
+  
+ 
+     "  !    
+   # 
+ 
+ 
+ 
+ 
+  
+ 
+    
+  
+ 
+ 
+ 
+ 
+ 
+     
+ ! 
+  
+ ! 
+ 
+ 
+ 
+ 
+ 
+  
+            
+ 
+     
+  
+ 
+ 
+  
+      
+  
+  
+ 
+    
+   
+      !   " 
+ 
+      
+    
+ ! 
+ 
+      
+   
+ 
+ 
+     
+ 
+  
+ 
+  
+ 
+ 
+     
+ 
+   " 
+ 
+   " " " # ! 
+ 
+     
+   
+  
+     "  ! 
+ 
+ 
+ 
+    
+   
+ ! ! ! 
+ " 
+  
+ 
+     #  
+     
+ 
+  
+       
+ 
+ 
+         
+ 
+ 
+          
+          
+        
+     
+ 
+     
+ 
+  
+ 
+ 
+        
+   
+         
+    
+  
+  
+ 
+ 
+  
+ 
+ 
+    
+  
+   " ! 
+ 
+ 
+ 
+  
+ 
+    
+   
+ 
+   
+   
+ 
+ 
+  
+    
+  
+  
+   
+ 
+ 
+ 
+  
+     
+   
+  
+ 
+   "   
+    
+      
+   
+   
+                                                                                            
+                                                                                                     
+ 
+   ! $ ( - ( ' * / 7 5 8 9 7 5 5 1 1 6 3 / 1 * , , , 0 1 0 2 4 4 2 0 2 0 4 3 / 1 2 1 1 , ) * - , 2 2 2 . 2 3 - , / / . 2 - , * 1 0 0 0 . . 1 + . 7 1 , 1 1 3 1 / 2 4 2 5 1 1 - 1 0 4 3 0 / 1 5 7 5 7 0 0 , 3 5 4 4 / 4 3 3 6 7 1 0 4 0 0 2 0 1 / 0 + * 1 0 + & + 0 4 2 + 0 - . , . , 4 2 1 2 7 6 4 6 7 1 1 . / . / 1 4 6 3 8 7 4 / 6 5 5 8 8 8 9 6 5 : 9 3 2 3 - 2 3 3 5 3 / 0 4 5 / / / 2 / 1 - , + - + , * ' , * * ( 3 / / * 1 + % ' - / * ( % ( + & # $ ( " # $ & ' % % # $ " % " " & ( ( ( & " ( & % ( ' # % $ ' ' & $ ( ( & $ $ $ $ ' % # # & ) $ , $ ' ( & ( " % % " # $ ' $ % ' ' % ) " % ) ( ( % ' % % # & & ' # ' ( , # $ % " # ! # ( % % $ $ $ ! % $ ' ( & " !   # ) & & # $ % " & % % % ' % % + 0 - & ( ' ) & # ' * ( & % $ # ! # " % " " #    
+ 
+   
+    
+  
+ 
+  
+ 
+ 
+        
+  
+   
+ 
+ 
+   
+ 
+   
+ 
+ 
+   ! " 
+     $ ! ! !   ! 
+   
+      
+    
+     
+ 
+ 
+  
+ 
+  
+   # 
+ 
+ 
+ 
+ 
+ 
+  
+     
+  !      
+ 
+ !      !  ! 
+       
+   
+ 
+ 
+ 
+   
+ 
+ 
+ ! ! 
+ 
+ 
+ 
+ 
+  
+ !    
+ 
+  
+   
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+     
+      
+        
+  
+ 
+  ! ! & & " ! ! ! 
+ 
+  
+ 
+ 
+ 
+ 
+  
+    "   #  ! 
+   
+ 
+ 
+  
+  
+ 
+ 
+ !   
+     
+ 
+ 
+ 
+     
+   
+ 
+ 
+    
+     
+   
+    
+   
+ 
+          
+        
+  
+   
+  
+  
+  
+ 
+          
+  
+    
+      
+  
+           
+   
+   
+   
+ 
+ 
+    
+ 
+    
+  ! " 
+ 
+ 
+ " 
+ 
+   
+ 
+   
+ 
+   
+ 
+  
+ 
+  
+ 
+   
+  
+ 
+ 
+        
+ 
+   
+  
+ 
+ 
+    
+  
+    " 
+   
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+                                                       
+                                                                                                                                            
+      ! " ! $ - ) , / 2 2 4 8 3 4 1 5 1 2 - / 1 3 / / , - , 2 0 + 2 6 , . 2 . 0 3 . 4 1 . / / * + / / / / 4 / 5 3 - + * - 1 3 3 , ) 6 4 0 4 . 1 4 2 . / 0 . / 3 9 / + 3 0 3 1 3 / / / , 2 5 3 0 1 5 7 3 . 1 - + 4 1 5 2 2 3 3 1 7 2 + 2 0 3 5 2 . , / 1 , . , 1 / 1 - / 6 / + 1 / 2 . / * 1 6 4 7 8 4 1 - 4 2 5 , / - 0 4 6 8 1 1 5 7 0 1 2 0 2 2 4 9 2 4 6 : 3 1 0 - 0 4 2 1 4 . 1 4 3 1 5 3 0 , / 2 1 - ' ) - 1 , - / , . 4 3 / / ) & % ) * ' ' ( ' - + ( * ) * & ( & ) ' # ' ( $ ( # ) #   % $ ' $ ' * ) * * & ! % ' , % ' $ " $ " & & ' ! " # # # ' ' $ ( ( % % ' ( ( # ( * ( $ % & ) % ) % ' & % & & ( $ % & # ( ( % $ " # ' * ( & % $ & % " % % ' # $ % $ ( # % # ' " # " " $ $ ) ' $ ! % & $ & ) * * , ) ) + * - ' ( & $ $ ( ) ( - ( ' ' ) ' "  ! "     &  
+ 
+ 
+    
+ 
+     
+     
+ 
+   
+ 
+    
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  ! "   !    
+ 
+  " ! ! 
+ 
+ 
+   
+ 
+   
+  
+  
+        
+ 
+ 
+ 
+ 
+ 
+ " 
+ 
+ 
+ 
+   
+ 
+ "       
+  ! 
+   
+         !   " 
+    !   !  
+ 
+ 
+ 
+ 
+  " 
+   
+ 
+  
+    
+ 
+ % 
+   " 
+ 
+ 
+  
+   
+  
+  
+  
+  
+ 
+  
+ 
+ 
+ 
+ 
+   
+  
+ ! "   !     
+ ! ! "  "   ! 
+  
+    #    
+    # ! 
+    
+   ! 
+ 
+     ! 
+   
+ 
+ 
+  
+          
+ 
+ 
+  
+ 
+ 
+  
+    
+      
+     
+                  
+ 
+   
+ 
+ 
+  
+    
+   
+     
+ !   
+   
+                
+    
+   
+   
+ 
+  
+ 
+   
+      
+    ! 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+   
+  
+ 
+ 
+ "   ! 
+ 
+  ! 
+ 
+     
+ 
+      
+ 
+ 
+    
+ 
+ 
+  
+ 
+       
+ 
+ 
+ 
+ 
+ 
+    
+ 
+                                                                                              
+                                                                                                 
+ 
+   " " # % ' * - - 1 2 3 5 4 2 8 5 . / / . / 3 3 5 . * . 0 / , 4 2 + + - , 2 1 0 1 2 4 - , + , + 3 / / 0 . + 0 / 4 / , * 5 7 / . 0 - 0 4 3 2 4 2 / 0 1 / 7 8 5 1 / / . - 1 2 1 0 / - 2 2 / / / / 4 . / 3 - 3 5 1 0 / / 3 2 5 1 , / - 1 . 3 - 1 - - / / - ) * 1 1 . . 0 0 0 , . 0 0 / 0 8 9 4 1 1 / 2 0 2 2 / 0 0 1 4 7 7 4 4 1 2 5 0 3 5 0 0 5 2 0 1 1 2 4 1 2 / 3 7 4 1 2 1 3 0 2 0 1 2 0 , + . , 1 0 + + + 1 , , - ) , 0 0 0 / + ( * % ' * + - , ' % * ' ' ' $ & ( % % ( ( , ' " ! % #   ! % ' # $ % # % $ ( $   " % # " % % ) % & ' * # ' # & ' & " # % + &   $ % # " ' ) * ( ' ' ) $ ' ) ! ' * # $ $ # " !  % ' $ % % " & $ % $ % % $ $ ! $ # & % & $ " # # " # 
+ # # # " & & % ( $ 
+ ! " & * ' * - * & ) ) ) ( + ( ( & % * + ( ( % ' ) * $ $ !   ! " ! # $ # ! # 
+ 
+ 
+  
+    
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   
+   
+ 
+   
+      
+    
+  
+ !   
+ 
+ 
+ 
+ 
+    
+ 
+ " "   
+ 
+ ! 
+ 
+   
+ 
+ " ! 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ "  
+   
+ 
+ 
+   
+ 
+ !  
+ 
+ 
+ 
+  
+    
+ 
+ 
+ " 
+ ! 
+ 
+     
+ 
+ 
+ 
+ ! !   
+ 
+   " 
+    
+ 
+  "    
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+  
+    
+    
+ 
+ 
+ !    
+ 
+  
+ 
+ 
+ " 
+ 
+ $ ! 
+   
+   
+ 
+   " 
+ 
+    ! !   " 
+ 
+ 
+ 
+ 
+  ! 
+     
+ 
+ !  
+ 
+   
+  
+ ! # 
+   
+ 
+  
+    
+  
+ 
+           
+ 
+ 
+ 
+                      
+  
+ 
+ 
+  
+         
+ 
+ 
+ 
+ 
+ 
+ 
+    
+  
+    
+          
+      
+  
+      
+ 
+ 
+  
+    
+ 
+ ! 
+ 
+   
+ 
+    
+      
+    
+   
+ 
+   
+ 
+   
+        
+ 
+    
+  
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+ 
+ 
+  !   
+                                     
+                                                           
+ 
+ 
+                                                                                                
+  
+ " # & # ( + / - 0 1 7 9 ; 8 7 7 + + - 3 0 4 0 6 5 1 . 1 2 3 4 2 0 1 0 - . 2 , - 0 . + ) / + ) / 0 + 2 ) 0 / . - 4 . 0 4 2 0 . + * / 0 3 2 / 0 + 1 6 , . 3 2 3 4 / / / . 4 0 , 1 - 5 4 0 . 1 2 1 - / 6 / 3 8 2 / 3 3 3 4 5 4 0 1 / , + / 2 0 - , * , - , * / , 1 4 / 2 . - - . 0 4 0 0 8 / * - - / 3 3 2 3 3 4 7 3 3 4 4 6 . 1 6 1 2 5 + / 4 4 7 5 1 0 . / 2 0 4 7 6 5 3 . 1 0 1 0 , 0 + - 0 0 + - / ( * * , ) * * ) * 1 1 + , , * ) $ # ' ( ' ) % ' . + & & # ( + % ) & ! % # ! # ' % % % $ & $ # & ' ! & % ' & $ #   $ & # $ % ' & ' ' ( % ! " " # " $ ( % # ! ' " $ * & # ( ' % ) ) * & " # % ! % $ " $ %   % ( # ( $ % & # $ % % % # % ' % # # # & & ' ' " " $ # " $ % # ' ( # $ # ! #   ' $ ! * $ * ' & & ' + , ' % ) % + * ' $ * , - * ' %   
+ 
+ ! " #  ! " " 
+ 
+   
+  
+ 
+ 
+ 
+     
+  
+    
+          
+      
+ 
+  !  
+ 
+  
+ ! 
+ 
+ 
+  "  #   
+ 
+ $ !    
+      
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+  ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+  
+ 
+  
+ #   
+ 
+   
+ 
+   
+    
+    
+ # 
+ 
+ # 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ "  
+ 
+  
+ 
+ 
+ 
+    
+ 
+  
+ 
+ 
+ 
+ ! !   
+  
+      "    
+    ! 
+   
+ 
+ 
+   
+  
+ 
+ !   
+  
+ 
+ !   
+ 
+ 
+ 
+  
+ 
+  " 
+    ! ! 
+ 
+ 
+   
+  
+  
+   
+   
+ 
+          
+ 
+                 
+       
+ 
+   
+ 
+   
+ 
+       
+     
+ 
+ 
+ 
+  
+ 
+   
+  
+ 
+           
+ 
+           
+ 
+ 
+  
+ 
+     
+  
+    
+  
+   
+  
+  
+ 
+ 
+ 
+       
+  
+ 
+ 
+      
+ 
+      
+  !  
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+    
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+  
+                                        
+                            
+               
+            
+                                                                                                  
+    % & $ ' ) / / . 1 7 7 4 5 1 0 + 0 2 3 2 ( - 0 2 2 1 . / 5 7 2 4 . . / 1 / + , * ) ' * - - . ) 0 + - . - , ) / 2 - - - ' * / 2 - , / , 0 , - , . 0 . / 3 3 1 . / + + * 1 / - 0 , 2 2 0 0 , 0 / + ( , . / 0 - / 5 6 / 3 2 . 0 / - , + * , 1 1 , / 0 0 - / + ( + , . 3 1 2 . - - - - 1 1 , + 1 - + 5 4 0 1 1 0 - 3 5 0 1 3 1 2 3 7 3 8 2 8 4 7 6 3 2 . 0 2 5 + 1 - , 2 - - 3 2 . + ( . + , ) ' ) - / ) ) + , / ) ' + * * 0 * , ' ' & & ( % + ( $ ) ' ( * ) ' $ ' % ' % ' " $ % ! # , & % ' & ' $ 
+ " ! " #   ! " % #  ! " # " " $ % + * ' $ ' # !   $ $ # $ % " & " ! ' & % % ! # ' ' & % & $ #  $ ' " ! " & " $ ! " & ' & " % % $ ' # % % $ " # $ ' & $ " 
+     " ! & # ! # % " % #   % % ) & ) $ % " # & ' * * % $ ' % ' & !   % , - ( ( & #     " #  
+     
+ 
+  
+ 
+     
+       
+     
+          
+  
+   
+    
+  
+   
+ ! " ! " 
+   
+ !    
+ ! " $ ! 
+       
+ 
+   
+ 
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+   
+     
+ 
+ 
+  
+  
+ 
+   
+    
+ 
+  
+ 
+ 
+ 
+  
+     !     
+ 
+ !   
+  
+    
+  
+   
+ 
+ 
+ 
+ 
+          
+    
+ 
+     ! 
+ 
+ 
+ " 
+ 
+ 
+ 
+   
+         ! 
+ 
+ 
+  
+ 
+ !  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+   
+ 
+    
+  
+ 
+   
+    
+      
+ 
+                 
+           
+ 
+   
+      
+ 
+ 
+   
+ 
+  
+ 
+         
+ 
+                        
+  
+          
+ 
+ 
+ 
+ 
+  
+  
+   
+ 
+     
+ 
+  
+      
+           
+ 
+ 
+        
+  
+    
+  
+  
+     
+           
+  
+ 
+    
+                
+                                                                                                                                                                                    
+ $ $ ' % + - + + 4 4 1 5 8 / 0 2 - ' 3 / + , - / 2 2 - / 0 0 0 1 , ( 0 - - 1 ' ( & ) + 1 * , - + 0 . / * + - . . 0 . , ( , + / 0 * - / , - * , * . 3 2 1 / 0 2 * * + - 0 / 1 0 - / 1 0 / * 2 2 . + - , , . 2 2 0 2 - 0 1 . 0 1 2 1 1 , - 1 / 1 . . - * + * ( + ' 0 6 . . - + . , . ) / 1 4 / ) 1 0 0 . 0 - . 1 0 0 2 3 4 - / 7 2 0 1 7 6 9 6 8 5 1 - + * - - , / . . / - * ) / * ) ( ' * & * & - . + & / 1 * * & 0 * % ( ( & + * % & ( ) , ' % & " ' # % ! & " % % ' $ % # ' $ " ' & $ # ' ( # $ # #        "   #  " % # % ! !   & $ ! % $ $ #   # $ ! # # % # # " % ' & ( ' $ & " ' % ! " " ! ( $ " % $   $ # $ # " % " # ! # ! $ # ' % # " # ! ! " ! "     " 
+   &     ! # % # 
+ 
+ 
+ # #   $ & % " ! % ) & ' ( &   % # % ' $ # & $ ( " $ % % $ " ! ! ! 
+   
+  
+ 
+ 
+ 
+  
+ 
+ 
+     
+        
+                      
+ 
+ 
+ 
+ 
+          
+  "   
+  
+  
+  
+ " ! 
+ 
+ ! 
+   
+ 
+    
+     
+  
+       
+    
+  
+ 
+   
+ 
+ 
+  
+   
+ 
+   
+ 
+  
+  
+ 
+ 
+  
+        
+ 
+  
+ 
+           
+ 
+  
+      !   
+  
+ 
+   
+  
+ 
+  
+ 
+   
+   
+ 
+    
+ 
+ 
+     " 
+ 
+  
+ !   
+  
+ 
+    
+           
+ 
+      
+                    
+            
+               
+       
+     
+   
+                  
+    
+ 
+  
+      
+     
+ 
+ 
+  
+ 
+   
+ 
+ 
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+    
+ 
+       
+      
+ 
+     
+     
+   
+       
+     
+    
+ 
+  
+ 
+ 
+  
+                      
+                          
+                           
+   
+           
+    
+  
+  
+                                                                                                   
+   " $ ( * % * - / . , 1 3 0 , - . / / 6 . * , 1 1 2 3 1 0 0 - 1 0 - . ) . * * ) ) ( * , . ( + , . . 0 ( , . ) * + + 0 , , + - + * ) - ) + - * , / . 3 0 , - 0 * , , / / 1 0 1 4 0 , 4 - , - 0 . * . 1 2 1 / 1 0 3 / . - + . , 5 . 2 2 1 3 . 0 + . - , , + , + ' / / . - - . + 1 + ' * - / 1 + + , - / 2 5 3 2 / 5 2 1 4 / / 2 0 3 3 2 5 3 9 = 3 - 0 ( * 0 0 1 2 / / 1 - ( $ - . * ' ( , * + + , / 1 + , - ) ' ) / + * ) ) ( $ ( & $ ( & $ % ) ' % ! " # $ '   ! 
+ # " # $ # % # % & !    ! % "    ! " !    
+ 
+ 
+ & ! " # # " ! !     % # $ !   $ # # ! $ " & $ # ' $ " & ' * % " 
+    " 
+    # % & &   ! " " " % % ' # ! !     ! % ! # " ! 
+   
+ ! ! 
+ 
+ ! $ " 
+ ! !  ! # %  
+ ! " #   " ! $ % % " % ( ( #  ' $ # ' !  % # ' #   # ! ! $ % "    
+ 
+ 
+   
+  
+       
+                                   
+  
+        
+ 
+ 
+      
+  
+ 
+ 
+  
+           
+  
+  
+  
+   
+   
+ 
+ 
+  
+ 
+ 
+ 
+         " 
+ 
+ 
+  
+ 
+    
+ 
+  
+ 
+ 
+  
+        
+   
+     
+      
+        
+   
+   
+ 
+   ! ! 
+ 
+     
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+    
+     
+   
+      
+  
+                        
+    
+                    
+         
+                                      
+ 
+       
+     
+       
+  
+ 
+ 
+ 
+ 
+  
+  
+    
+  
+    
+   
+             
+ 
+                   
+  
+   
+    
+           
+   
+          
+ 
+ 
+                
+        
+        
+ 
+                                
+       
+ 
+                                                                                                   
+ 
+   # ' & ' ( 1 0 ) / . 0 . 1 1 * 3 0 1 - / , 2 7 0 1 3 2 4 3 3 / , ) . 1 , - 1 ( * * * ' + - * - ' + , + - / + ) ) 0 - * / , + ) ) ( ( . . + + / . 1 . / . 0 2 / 0 5 1 2 0 - 1 0 . - / 0 0 . 5 1 4 0 . 2 . 0 . , , , , 2 - , + . - / / - / - ( 1 * ' ( + . / * . , , . 1 0 1 + * % ) + 1 1 . / . - / 0 . / 4 / 2 2 4 0 1 3 5 1 4 2 / 1 2 1 2 7 / + + + / 0 - 1 0 . / ( - , ) + - - - . + 0 / , / 1 1 0 , , $ ( ' ( ' $ % ' $ # " ! " $ $ $ # ' ( $ " & % ' % # # # # " ) & # $ " 
+ ! % # $ $ ! " ! ! $ ! 
+   $   " #   
+ !  #   ! % # " # #   "  ! ! ) ( ( & ! % & ! $ ( ) % $ " ! ! % (  " % ( #     " #   % % " & $    # # & $ " ! ! "  # !   ! $    " " ! $ % # 
+ 
+      ! 
+ # # % " "     % * % # ' ) % $ & % $ # # # $ $ $ #     # ! % & % #     #  
+ 
+  
+  
+   
+       
+                                
+     
+    
+ 
+ 
+ 
+  
+    
+ 
+  
+ 
+ 
+  
+             
+  
+ 
+     
+ 
+ 
+ 
+  
+ 
+ 
+      
+ ! " 
+  
+ 
+    
+ 
+   
+ 
+ 
+ 
+     
+    
+ 
+ 
+     
+  
+ 
+            
+   
+ 
+ 
+  
+   
+ $ 
+   
+        
+       
+ 
+ 
+ 
+      
+  
+ 
+  
+  
+ 
+   
+ 
+   
+                                   
+                             
+                    
+                 
+ 
+           
+   
+   
+ 
+ 
+           
+  
+         
+ 
+ 
+        
+  
+  
+       
+  
+ ! 
+     
+     
+ 
+     
+ 
+     
+ 
+ 
+ 
+              
+                           
+                                      
+           
+ 
+                                              
+                                                      
+ 
+  
+ " % & % ' + . 0 6 - 5 . 2 1 1 2 . 1 2 / , - ) 5 5 2 2 6 2 2 4 3 1 - , / 1 / / , * , 0 ( ( 3 * * / ' + 0 + + , / ( - * , + - 0 . / ) - ) / - / / 0 / 0 2 , + / 3 4 1 - 3 0 5 + ) 2 0 / . . 0 / 2 8 3 1 0 4 0 2 5 / - / + , - . ) ) ) * - / 1 , - - * % * ) - / + , , ) . / + - , * + - ( 0 . ) * / / 0 - / 1 4 0 1 0 6 / , / 3 / 5 2 , 0 0 1 1 0 3 / . * , ( - . ) + . - 2 - * - + / * , 1 - - - , - 4 / * , + ( ) + - , . % ' $ $ !   ' ' ( # # % " # ) ' ' #  $ ' ' % % $ $      ! # ' * ' $ $ #        ! & % $ 
+ ! ! " # % $ " $ " & $   " # ! $ & # # ) " ! # $ # " & % ! # & $ $ + % " # # % # 
+ # % " " # # " # " " # % $ ' & ' " " ! " " % ' & ! ! $ $   !  ! ! ! " " !   " ! # % & " # # ' # & # " ( % " # ' + ' & ! " " * ( % & # ) $ $ # ' & #   "  
+   
+ 
+   
+  
+ 
+  
+ 
+    
+ 
+                                   
+    
+   
+    
+ 
+  
+   
+     
+  
+   
+     
+ 
+  
+ 
+   
+     
+ 
+ 
+ 
+ 
+ 
+ 
+     
+   # !  
+  
+ 
+ 
+ 
+  
+ 
+ 
+     
+ 
+ 
+    
+ 
+ 
+   
+   
+  
+  
+    
+ 
+    " 
+  
+   
+  
+  
+        
+       
+   
+ 
+ 
+  
+  
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+  
+ 
+    
+     
+ 
+ 
+ 
+  
+                 
+        
+          
+                                  
+                      
+ 
+  
+  
+ 
+  
+ 
+  
+ 
+  
+   
+    
+  
+ 
+   
+  
+    
+   
+ 
+     
+   
+  
+   
+ 
+ 
+      
+         
+ ! 
+   
+       
+ 
+ 
+ 
+   
+ 
+ 
+            
+            
+                            
+    
+                      
+                                                                                                                  
+  
+ 
+ # " ' ) ) 0 , 0 2 4 4 2 - + * 0 . . - ( + - - / - 6 6 / 3 7 5 5 1 - / 0 3 3 / . 0 + , - + 1 ) * . , + 0 - / * * ( * * + ( / * + ' / . * , + 0 / 0 0 0 3 8 2 2 3 - / . 3 3 3 . - , 1 3 1 / 0 - 2 6 4 0 1 2 1 2 2 0 - ) , 1 / , + - / * * , . - ) - 1 , - 1 - ) ) ) + , / * - - , , / - , 3 - / / , + / / , - , 0 . 1 0 / . 2 3 4 4 1 1 0 / , . 0 / - - * 1 . ) , ) . 5 / 1 0 0 * - , + + / 0 . / / - / / + - * % * ) + + , * ) " ! ! " * ( & ' $ ( $ # # % & % $ " $ % " % ( '     " " " % & & " ! " $ # !  $ #   ( % $ ( #  ! % ! " #   ! $   % # $ $ $ " ! "   ! & #   # % % " " " " # ' " " % " " " " % % $  ! % ( ) ' % $ ) $ ! ! %  " % $ ( * ( ( ' # $  $ " !   # $ $  " % # & ' ! $ 
+ % ( * % # $ # % % * ) ' ( & '   % $ ( ' & & % , ) % # % & % " # % ! 
+ 
+ 
+ 
+ !  !  
+  
+   
+  
+ 
+ 
+  
+                       
+ 
+         
+   
+   
+ 
+   
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+      
+ 
+  
+ 
+  " 
+  
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+ " 
+ 
+  
+  
+    
+ 
+ 
+ 
+ 
+  
+ 
+ 
+      "    
+ 
+      ! 
+     
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+       
+    
+   
+  
+ 
+  
+   
+   
+ 
+      
+ 
+ 
+ 
+       
+   
+ 
+ 
+ 
+                
+   
+ 
+                 
+       
+     
+           
+                  
+            
+     
+    
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+   
+ 
+     
+   
+ 
+ 
+       
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+   
+   
+ 
+ 
+       
+ ! 
+             
+                                                   
+                             
+                                                                                                                      
+ " & " $ $ - / . 2 / + 0 3 / - / , 2 / + + , 0 + 0 3 2 4 / 2 3 3 / , - - - , + , ( . 1 , 0 2 0 . 4 0 0 . 0 1 0 , , * ) - * * ) - + * 0 * ) ( - 0 - . . 8 : 6 5 , / 1 2 1 0 + 0 / 3 4 - 0 / 0 3 4 + 3 - 5 0 0 0 0 0 0 . 6 0 2 / . . / . - / 0 0 - , - 0 - - , ) , * ) - - * 1 / * . 0 2 / . 0 0 . / * 2 / 3 2 3 2 3 2 3 / 0 0 / 0 5 1 2 3 / , - - . , 1 / 4 - / + / . 0 ) ( 1 0 - , / 0 0 * 2 / 0 1 2 3 0 , ( + ( ) * + ) ( % ( & " & ) * ) ) ( ' * ' $ " ' & ( # & ' * % " ' $ " ! " " ! $ % " "   # # # % ! $ "  $ % $ " $ $ $ $ $ ! 
+ " ) " ! $ "   # "   $ % ! #  & ' & ' % & $ $ ' $ # " $ # $ % " ! # " $   $ % ' ( % " ' $ # $ % * # $ # ! & ' $ % & " # " ! " $ $ # # $ ! $ ' % " # $ " " $ & $ %   ' ' * ) ( ' ' # $ & ! & $ # ( * % ( ) & $ & ( & ) # " #   ! !   ! ! 
+ ! !   " !    
+ 
+     
+                       
+    
+          
+ 
+ 
+  
+  
+ 
+  
+  
+ 
+ 
+   
+  
+     
+ 
+ 
+   
+ 
+ 
+  " ! 
+ 
+    
+ 
+    
+     
+ 
+     
+   
+  
+   
+ 
+  
+  ! 
+ 
+   "  
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ ! 
+    !  
+ 
+ !     
+   
+  
+ 
+ 
+ 
+     
+ 
+  
+ 
+ 
+    
+ 
+  
+ 
+ 
+  !   ! 
+   
+ 
+ 
+ 
+               
+  
+ 
+  
+ 
+ 
+                     
+ 
+ 
+                  
+  
+   
+       
+          
+          
+  
+ 
+   
+         
+ 
+     
+ 
+ 
+  
+ 
+ 
+   
+   
+        
+  
+ 
+  
+ 
+  
+   
+   
+ 
+  
+ 
+ 
+ 
+    
+ 
+     
+ 
+       
+  
+  
+ 
+  
+      
+ 
+  
+         
+  
+  
+ 
+                   
+       
+                                                                   
+          
+                                  
+                                                          
+ 
+ " $ $ & $ ( . . + + , 0 7 . 0 . 0 3 1 . / / 4 4 , * - , , 3 / / + + 0 . , . , * + ) / + ) 1 3 6 6 2 - 1 0 0 1 , + / ) , + + / / + - * , + . 0 1 ) - * 0 2 2 3 + ) 2 , + * - 0 + 5 2 1 2 1 4 3 1 3 / ) / 3 + + + . 0 6 2 - . 0 , + . 2 - 0 2 , . + , . - 1 0 * + - / 4 . + , - , / - 0 5 . / 1 / - , 0 1 0 0 2 1 + 1 1 - 2 1 - 0 3 / 1 . 0 ) 3 4 4 / / , , , . , * . + ( ' + - , , , 0 / . + . . 0 2 0 . + ) + + ( + 0 , & ) - $ # % & ( & % # & ( ' ' * $ " $ " " ) % $ # * ( & % " # " # " # % " & #   ' $ %   
+ $ ' ' $ ) ' % % ( $ " # ' ( % # "   & &   # $ ! % " % ) ) % ! $ $ ' # # # ! $ % % # ! # # % " " " " $ $ ! #   ! " % % ( !   " " & % $ ( & ' & " $ " # % ! ! $ !   " & !   $ ! & $ & ' $ # % % ) ' * ' ) $ ( % $ $ " # ' & % & ' # # " * ' & % ) ) & % % $ ' $ ! ! &       
+ 
+   
+  
+  
+                     
+   
+ 
+        
+    
+     
+ 
+ 
+    
+ 
+ 
+  
+ 
+    
+ 
+  
+ 
+  
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+  
+    " 
+  
+ 
+   
+ 
+  
+    
+ 
+ 
+ 
+ 
+ " 
+  
+     
+ 
+ 
+ 
+ 
+ " 
+  
+ 
+ 
+     #   
+   
+  
+ 
+ 
+  
+ 
+   
+   
+ 
+ 
+  
+ 
+   
+  
+ 
+   
+  
+  ! 
+ 
+ 
+      
+  
+   
+   
+  
+       
+     ! 
+  
+ 
+       
+      
+                
+         
+ 
+ 
+    
+     
+         
+         
+ 
+   
+             
+    
+       
+  
+ 
+ 
+      
+ 
+     
+   
+   
+  
+ 
+ 
+   
+ 
+ 
+ 
+   
+ 
+    
+ 
+  
+     
+   
+ 
+   
+ 
+      
+ 
+           
+  
+ 
+ 
+   
+  
+  
+                                       
+                                        
+                                                                                                                     
+ ! # " & ) & ) * , + + + + 2 , - * + 0 / / . / 1 2 - . + + ) , . 2 0 3 / , 2 / - + ( - 3 / - 2 5 0 / . . 1 0 / - , + , + / . + / + - + , - . 1 / 0 / - , 0 + 0 1 / . , , / 1 0 3 * - 1 0 0 - 0 - / 3 0 + , * / ) + - / - * . - + - + 0 - , 0 * * * 0 3 1 - 0 2 ) . 2 , , 2 0 / 1 0 0 / , * , 1 / - , - - / - 1 - 5 . - 1 , / 1 4 - 3 2 / 0 / / 3 7 9 0 / , + 0 1 . * * + - / , + . . * . - . + , + - + , ) / , * * , , ( ' ) * / ' ) ) $ # # " " & & * & " # ( ' * & $ % ( % ' ( * , % " " " ! % $ & "   " # # ! " $ " & ( % ) % % $ " " # % & ' $   # % % " ' % % % ) & ( $ % $ # ( $ ! $ % # % ' ) #   # % % $ ' $ ! ( $ " # 
+ !  " ' % $ & # ! # ! % ' $ % ( $ " ! # $ & # # # " % ( % ( $ ! # ' ) %   % (   $ ( ' & & ( & $ & & & % " ( ( $ $ $ # $ ( ) ' ) % ( $ % $ # # # & %    " 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+                  
+ 
+          
+         
+ 
+ 
+ 
+      
+ 
+ 
+ 
+ 
+ 
+     
+     
+   
+   
+ 
+  
+ 
+   
+ 
+  
+ 
+  
+         # "  
+ 
+ 
+  
+ 
+     
+ 
+   
+   
+ 
+  
+ 
+  
+ 
+  
+  
+   
+ 
+  
+ 
+   
+ 
+ 
+  
+         ! 
+ 
+  
+ 
+  
+  
+ 
+      
+ 
+  
+ 
+  
+ ! 
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+  
+   
+     !   ! 
+    
+  
+     
+              
+   
+                   
+       
+ 
+ 
+    
+  
+   
+  
+ 
+        
+ 
+       
+  
+  
+  
+     
+ 
+ 
+  
+ 
+   
+ 
+ 
+   
+ 
+  
+ 
+  
+ !  
+ 
+  
+   
+ 
+ 
+   
+  
+  
+  
+ 
+    
+  
+   
+ 
+   
+   
+  
+ 
+       
+       
+ 
+ 
+   
+ 
+   
+ 
+   
+  
+ 
+                         
+  
+              
+                                                                                                                                                          ! &  ! " $ ' - . * - 2 2 - , 0 / 0 + ) . 3 1 + 0 / . 1 2 * 0 + / 5 . 2 . 0 1 0 3 2 4 3 . 1 - - 2 2 3 3 - - 0 - 0 2 1 4 4 3 0 2 . + , ) - , + ) + 3 . . 0 * + , . 5 0 / / - . / / - 0 / . 3 1 / 1 6 2 3 , / / , 0 1 6 1 - / , , . 3 0 * / 0 1 1 0 5 3 7 2 / - / 0 + + 1 0 1 4 / / 0 0 / 0 - ' * + 0 0 , + , / / 4 3 4 2 / 0 + 2 / 4 3 5 0 . 0 . 2 / - 1 / / 2 * , / + ) , , 0 / * - 1 . - , / * - . ) . + + , , , , * ) + * . - * * ' ' ( ( & ) # # & & + ' % ( ( + ) & % & ( % $ ' ) ( % " ! $ ! # $ & " $ " " " ( " " " # # & ( % $ % ' $ # " # % ' ) $ % ' $ # ( % $ ' % $ # # ( & $ $ ' ( ' ' ' $ $ # ! " # ) & # $   & $ % ( $   ! $ ) ) % ( $ $ ' ( % % # ' ) $   " ' &   % " % & % ( $ # ' # " $ * (   # % ' ) & ( ( $ $ * ) + ) ' # ( $ ' ' % $   # & ' " # % $ % " " ! ! $ % $ $ "   
+ 
+   
+   "   
+ 
+       
+         
+    
+      
+                  
+   " 
+  
+  
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+     
+     
+   
+ 
+ 
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ ! 
+ 
+ 
+ 
+   
+ 
+   
+  
+  
+ # 
+  
+  
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+      # 
+ 
+      
+ 
+ 
+  
+ 
+ 
+    
+  
+  
+  
+    
+ 
+     
+   
+ 
+ 
+ !   
+   
+    
+ 
+      
+ 
+ 
+ 
+       
+ 
+    
+              
+     
+      
+       
+    
+  
+          
+  
+ 
+ 
+     
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   
+   
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  !   
+ ! 
+ 
+ 
+ 
+      
+    
+ 
+ 
+        
+    
+ 
+   
+ 
+      
+    
+ 
+   
+ 
+    
+ 
+   
+ 
+                                          
+                                                                                                                                                      
+ 
+     " " " & ' . + - - 4 1 . . 2 3 - / / 0 , 1 0 8 7 / 0 1 0 1 2 3 3 3 / - 0 0 / 3 3 . 0 . 0 + . - 4 0 3 0 / 1 5 / 0 2 3 0 . / 3 7 3 / 1 1 , * , * . . 1 / 0 0 2 2 3 0 1 1 - - ) / , 1 5 1 3 4 5 0 . - 2 3 5 2 , . 0 / 2 1 , + 1 1 - 0 / / - - / 2 - 1 2 3 1 , 0 0 * , 1 , / 1 - . * + 2 1 / / * ( , 0 ( * - + 2 3 3 1 1 - 3 0 1 3 1 . 2 - - 0 2 0 + 2 - , / 2 3 / 0 - * + - . - + 0 * , - . - ) 1 0 . 1 , * . , 1 0 - . / , ) ' ( & & & & ( ' & % $ " ( ( ' * * , ' ( * ' ' * * ( ' ( % ' % % $ # $ " % % # ) ! # & "   & " ! # # ( & ! " ( & " & ( # % $ ' ) % $ ' 
+ # ( % % & ' ' ' # $ # # ) % ' #   ! #   $ & $ " $ ' % * ' ( ( ) $ & % ' # $ % " # ) ( % & & ( & ' " % & & % % & & & $ ' % ' ' & % % ' ' & $ % + ) % * * % ' ) ) % & $ & ( $ * & $ $ ' # ' $ % % % % ' $ & % % # & # ' " $ & % ! $       
+  
+ 
+          
+   
+    
+ 
+                     
+     
+  
+ 
+  
+ 
+ 
+ 
+    
+  
+   
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  
+ ! 
+ 
+   
+   ! 
+   
+   
+ 
+ " ! 
+   
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+   ! 
+  
+  
+   
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+   
+    
+  
+ 
+   
+  
+ 
+    
+   
+ ! 
+ 
+ 
+    
+ 
+     
+ " 
+ 
+  
+ 
+     
+ 
+  
+ 
+ 
+ 
+  
+   
+       
+        
+     
+      
+             
+             
+  
+    
+    
+  
+   
+       
+  
+    
+ 
+  
+   
+   
+  
+ 
+       
+ 
+   
+  
+    
+  
+     
+ 
+ 
+ 
+ " 
+  
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+     
+  
+    
+ 
+  
+  
+       
+  
+ 
+  
+   
+  
+ 
+      
+  
+ 
+     
+    
+   
+ 
+  
+ 
+                                   
+                                   
+             
+             
+                                                                                                
+  
+ $ $ # ( . - ) ' - 3 5 2 0 5 3 , . 2 - + 1 2 8 6 2 0 / 1 0 1 4 7 7 1 , * 2 7 2 3 2 . / / 1 / 0 0 / 0 1 5 0 2 1 1 3 , / . 1 . 0 5 5 2 6 / / 0 * - 4 1 2 0 1 0 5 - * , . 0 . ( , / , 0 1 4 1 / / 0 0 2 - 3 4 / - 3 1 1 0 , + 0 0 - 2 0 0 + ) , 0 0 . * 3 / , 0 . - + * - - / , + ( - , - , . , + + 2 , - 0 2 0 2 . 0 / / * + / , - . , + 1 / / 2 0 1 . 0 - 1 / , , + - / - - * , - 0 , , , 0 , 0 + . 1 / / * / . - . - , ( ' ( % ( ) % ( ) * ) + ' % $ ( ( ) + ( $ % * ) & ) ) ' ' % ( % % $ ' + & # & ' $ "   " "   ! ! !  $ # ( $ $ ( ( * % ' " # $ & $ - ( # # & ' ' # & $ + ) & % & " $ $ ' & $ $ $ " " ' # % & $ " * ) $ $ ) # ! ( % ' & $ # # ( $ # $ & $ % % ) ( ( ' " # ' # $ ( & # " ) ' ! $ $ & & & " $ % - & $ ( $ + ( ' ( ) $ ' " # % % ! # $ # % ' ' " & ' & % & & $ # !  ! # ' ' % " " #   $    
+ 
+ 
+  
+ 
+     
+    
+    
+                     
+ 
+  
+      
+   
+ 
+ 
+ 
+    
+ 
+  
+ 
+ 
+    
+      
+   
+  
+  
+ 
+ !      
+ 
+  
+ 
+   
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+     
+  
+ 
+ 
+  
+ 
+    
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+ 
+ 
+ 
+ 
+  "     
+ 
+ 
+    
+ !   
+ 
+ 
+    
+ 
+ 
+     
+ 
+ 
+ 
+      
+  
+    
+  
+ 
+ 
+  
+   
+  
+      
+   
+ 
+ 
+                      
+ 
+               
+ 
+         
+   
+  
+    
+ 
+ 
+  
+       
+      
+ 
+ 
+   
+ 
+     
+ ! 
+ 
+   
+ 
+ 
+ 
+ 
+     
+ 
+       
+ 
+  
+    
+ 
+ 
+ 
+ 
+ 
+       
+   
+ 
+ 
+       
+ 
+   
+   
+   
+         
+  
+ 
+   
+ 
+ 
+     
+ 
+ 
+ 
+  
+                                                                              
+      
+                                                                                                            
+ 
+   # $ $ ' ) - * , . 4 - 4 4 1 1 4 0 2 / 0 - - 3 4 1 3 1 , 0 7 1 0 2 0 . . 3 7 2 3 6 / 1 3 2 0 . 1 , 2 5 8 2 0 2 4 2 . 0 + + - 2 5 4 2 2 2 0 , 0 3 4 - 0 1 / - / / + . 0 / / . , 0 - 4 0 2 1 , . 6 2 * , / 1 6 1 2 3 1 1 3 - . 3 . 2 2 - 1 - , 1 1 . 2 0 0 + 3 . - 0 + , * - + * + ) ) , - , , 2 / 2 0 3 / 7 3 . - + - . - , 0 + - / , 0 4 . 4 0 / , - 1 . / 2 . + 4 1 0 ( ( + + - - ( . 0 1 0 * ( - 1 , / , 0 + - 5 , ) ( ( & + ' # ( ' ) ) ( * * ) * & & + ( ' & ( & % ' % ( ' $ & % $ # # # & % % % $ % ! $ ! # 
+ ! # !   " ! % ' $ ' % % ! $ $ " # % ( ( & ' % & $ % # ' # # & % # "   ! ' ' & ' # ' $  ) $ $ ' % % ( ' ' $ ' & $ % ' & * $ # ! ) $ % & " $ " # & & % % # $ $ ( & & * &   ' % $ % % " & ( % " % * ) % ( ' , * ( & ( ! $ % % " % $ ' ! % " & ' & & & ! % # % " ' ! # ! % $ # # !    " %  
+ 
+ 
+        
+ 
+         
+                      
+   
+ 
+       
+   ! 
+   
+   
+ 
+  
+ 
+  
+ 
+  
+ !        
+ 
+ 
+ 
+  
+  
+  
+  
+ 
+   
+    
+  
+ 
+ 
+ ! 
+  
+ !  
+    
+  
+ 
+ 
+ 
+    
+ 
+  
+   
+  
+ 
+       
+ 
+ 
+  
+   
+ 
+   
+ 
+  
+ ! 
+ 
+ 
+ 
+     
+   
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+    
+ 
+  
+  
+   
+   
+  
+ 
+ 
+  
+         
+ 
+                                      
+                
+ 
+     
+   
+     
+ 
+ 
+       
+ 
+ 
+    
+ 
+ 
+   
+   
+ 
+        
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+       " 
+ 
+  
+ 
+ 
+  
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+     
+ 
+ 
+ 
+ 
+     
+  
+ 
+ 
+    
+ 
+ 
+ 
+ 
+  
+ 
+ 
+       
+  
+               
+      
+                                      
+                     
+        
+          
+                                                                                                  
+   !   & # ' + , , 2 + 2 / 3 / / 1 / , / 3 - / 3 2 4 4 0 5 3 6 5 5 1 3 3 4 6 5 1 1 2 . 4 6 1 0 4 3 0 / 3 2 3 6 2 8 4 / 0 3 1 0 2 2 - / - 0 2 - 1 3 2 1 / 3 3 4 3 - / - + - , / . - 0 0 / 3 . - + 7 . - / 3 2 6 . 0 - 0 , . 1 1 1 0 3 5 2 7 0 1 2 - / * . 0 , 1 0 + . , - , + ' * ' , + / , ) ' 0 , / 7 1 - 2 2 . + ) ) + / , ) , + 1 , / / 0 2 . , , . 0 / 1 - . - / 1 , ( * ( + . ( * * ) ( + + - 1 - . 1 / / , - , , - ( ' ' ) & $ ( $ ( % & ) ) ' & ( $ ) ( & % ( & & ) " % $ $ # + ' $ ! # % # $     # $ % "     $ & ! # ! # % & & % ' % % $ # % ' $ # ' ( $ $ & % $ " " ( % ' % ! ! ! % * % ' % # ' % # # % $ $ # ( ' " $ $ ' # " % # ( & % ( $ % % " $ " ! ! % $ '   ! % " 
+ $ ! % &   
+ $ " ' & % # ( ' ! $ $ ( ' % ( $ - % % % # # # &  ! # & % % ' & # ' ' & % " $ ' # % $ # "   $ % ( & !   !  ! ! 
+    
+ 
+   
+   
+      
+                               
+   
+ 
+   
+  
+ 
+ 
+  
+  
+   
+     
+ 
+       
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+     
+    
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+    
+    
+ 
+    
+   
+ 
+ 
+   
+     
+    
+ 
+ 
+ 
+   
+ 
+    
+ 
+      
+ !   
+      
+ 
+ 
+  
+     
+    
+ 
+  
+ 
+ 
+  
+      
+      
+ 
+ 
+ 
+     
+                  
+ 
+                                     
+        
+ 
+ 
+   
+       
+   
+ 
+ 
+ 
+      
+ 
+            
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   
+   
+ 
+ 
+    
+  
+  
+ 
+        
+  
+      
+    
+   
+ 
+ 
+ 
+ 
+  
+     
+ 
+  
+ 
+ 
+ 
+ 
+                                                                
+   
+                              
+                                                                                                 
+ 
+   # % % ' ' + 0 5 4 - , 3 5 1 6 0 + 1 2 - , 3 4 3 6 1 4 0 0 2 1 1 2 0 4 4 1 3 3 1 0 2 0 / 0 2 2 / / 2 4 1 / 0 . / 3 , 0 ( , ) / 2 3 4 1 2 + . 0 0 , , 4 0 / 2 + 0 / * / + , 0 * . . + * . 1 / 0 . - . 2 0 / 0 2 1 2 , + - 0 5 2 0 1 . / 2 - 1 / , / 0 8 , & ( + * + ( + / - 1 , , ) 0 / 4 / * & * / 2 . 0 . , ( , . * ) , , 0 2 0 - , + * * - ' * - + . / - ) , . + * ( ( ) ' - ( & ) ' & & + ' , , + - * ( ' ) ) . * ( ' % $  ! $ # $ % ) & ' ' ' * ( ' & ) ( $ ( ( & $   ! # % , # " # ' ' " # # " " ! !   
+ ! % ! " % ! ! & % % & % " # "   " % % ' $ ! # % ! # $ ( $ & ' & & # $ % ' $ " " # ' $ % # # $ $ & # % " & & $ " # % ! ! # ' ) ) # ! $ % % # " " ! % % " $ ' #   $ $ $ " " ! " $   !   ) % ' % & ) ( % ' & % ) ) # % $ % $ $ " * $ !   % $ $ % $ & ' $ ! # ! # # $  
+ # # ! $ # $ " %    
+     
+ 
+   
+                              
+               
+   
+        
+ 
+  ! 
+ 
+   
+           
+ 
+    
+    
+ 
+ ! 
+ 
+ 
+  
+   
+   
+   
+    
+ 
+       
+ 
+ 
+ 
+  
+    
+ 
+   
+     
+ 
+   
+ ! 
+ 
+     
+ 
+    
+   
+           
+    !     
+  
+ ! 
+   
+       
+ 
+             
+  
+            
+                              
+              
+         
+     
+     
+   
+ 
+         
+  
+ 
+       
+    
+   
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+       
+            
+       
+    
+     
+ 
+ ! 
+     
+  
+ 
+ 
+  
+  
+ 
+  
+              
+   
+                                                     
+                         
+                                                
+                                                  
+ 
+ 
+  
+ ! ' % / 3 / / - 2 0 2 3 3 3 3 - / + . 0 5 3 3 . 5 6 1 1 / 3 3 0 / 4 / / 0 , , . 0 0 + 2 0 2 . , / 0 - - / 1 0 ) + , - ) . - 0 2 5 0 + 1 . 8 + + 0 , . . 2 0 , + * * 2 1 * ) + * , / 1 / , / . - 0 2 / 0 . 2 0 + + 2 2 1 + * / - / / - 2 . , / 2 2 ( - * * - * ( / 2 3 / / 2 4 3 1 2 + + # % * / . , . ) + + ( * , . 1 * 1 + ( ' * * - * ) * ) - / - - + - , ) + $ & ) ' ( % ( & ' * ( ) + & ) - ) ( & & ' + ( ' ' ' & % % $ % $ & # $ ! # % & ( ' % & % $ $ % " ( % " # # ' ( % # ( ) ' # ! $ # $ $ & & " ' $     ! !   ! ! " # " & & ! "   $ # # ' ( $ "   " % % !  ! ! " & # & $ & # " $ $ $   "   # $ $ # % ' # % ) ! $ "    $   ! " " " % % # % ( % !   " % # " ' %  !   ! $ &  & $ #     $ $ * ) & # $ & % $ # ( ) " # # $ " " ! & $ !  " " !    & # " " $ % $ " # $  #    % ! # $ " # # 
+ 
+ 
+    ! 
+         
+                                                 
+  
+ 
+ 
+ 
+ 
+ 
+   
+              
+   
+ !  
+  
+ 
+  
+ 
+  
+ 
+  
+  
+   
+    
+    
+      
+ 
+ 
+ 
+    
+     
+    
+ 
+   
+      
+  
+ 
+  
+ 
+  
+ 
+    
+ 
+ 
+   
+ 
+ 
+  
+ 
+     
+   
+    
+ 
+    
+      
+            
+                                                                             
+ 
+        
+ 
+ 
+     
+ 
+ 
+       
+ 
+  
+ 
+   
+ ! 
+ 
+ 
+   
+ 
+            
+        
+ 
+       
+ 
+ 
+   
+ 
+ 
+    
+       
+   
+                    
+               
+               
+             
+ 
+             
+                    
+ 	                                                                                                 
+   
+    $ % & / + . 1 1 0 2 - - - 1 . . . 3 4 2 3 / - 1 7 0 1 5 - 0 4 3 2 , 2 1 - , 1 1 . 1 / 4 1 7 3 ( + , , 1 1 / / / + / . 0 1 5 0 4 1 3 . / 3 5 1 , ) , 4 0 2 - 0 . + , ) 0 , . 1 1 , - / 3 0 2 / + + 2 3 . . ) , / 1 / 5 3 , , / . - 3 / 3 . , . 0 , ( + ) ( + * - / , 0 0 , . - - - - / + ) - . + - - - + * # $ ( 0 - - , 2 , ' ( , . * ( * ) * * , 0 , + , ( ) - ( ) ' ! & ) ' % ( ( + ' ) , ( 0 ) * % ' # ) ( ) % ( ( ! $ %   ! $ $ & $ & % ' ( + ' ( # # '    ) * & ' % & $ ' " ' % * & $ # % $ # ( * ' ( % " ! " $ " $ ' $  # ! $ # $ ! ! $ ( & % $   # ! % $ " " ! " $ & " % ) & $ $ " " & $ " % $ $ $ & , ' & & ) ! # ! "  ! " # # % # ' # ' # # & !     * ' ) ' ' % $ % # % # " " " "   # # % ' ( & & ' ' ) % ' - ' # # " $ $ # % $ ( & & " $ 
+   " " " " $ # ' % "   !   ! # $ # # #   # $   
+ 
+  
+ ! 
+    
+  
+ 
+  
+                                    
+             
+   
+ 
+ 
+ 
+ 
+ 
+   
+ 
+       
+   
+ 
+   
+  
+    
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+     
+   
+   
+ 
+      
+ "   
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+ 
+  
+ 
+   
+ 
+ 
+  
+  
+        
+ 
+  
+ 
+ 
+   
+  
+ 
+   
+ 
+  
+ 
+     
+ 
+ 
+   
+  
+  
+  
+   
+         
+  
+                                
+                     
+                
+ 
+ 
+ 
+   
+      
+            
+  
+  
+ 
+ 
+ 
+ 
+  
+ 
+          
+                   
+ 
+       
+  
+       
+ 
+ 
+    
+  
+ 
+ 
+    
+ 
+  
+ 
+  
+                          
+                                
+                                                                                                                                       
+ ! !  # & % ( , - 1 2 / 3 . , 2 0 / , . 3 4 4 2 5 3 6 5 / 3 3 3 2 / 1 . * 0 2 4 0 0 - , + . - / 8 4 / / 0 0 , ) - / + + , / 5 0 / / 3 . / 5 , * 1 0 , + 0 0 . 0 - 2 / , 1 + , 0 0 2 4 1 / 0 / 1 . - 1 1 / . , + + - / 0 , 0 / / - ) , * / / / 0 - , , 0 + * ' ( + + 1 - ) . - - - , , / 0 1 - - * / * . / . / , ) , ) ) . / - . , , + * * ( ( ) + ) * ( * , * ) , + - * & & , ( . * ) + * ) ' + ( & * , * $ ( ( * + & % ) # # % % ! # # " % & # % ' ) * ' ' & ' & & ( ' & % " & # $ ! " # ) % % $ % ' # # % # $ ) $ & & $ % " ( " $ $   # # $ ( $ $ & % $ " " " %   ! ' " " ( ! # & % ' ) " " ' ' #   % ( ( ' $ % ! ) & ' % $ #     $  "    % % # $ $ % & ' % % & $ $ % % ( ' ) % $ !    "   # $  & & & & & & ' ) * # & & ( ) % ! % # % # $ % $ # % $ % $ % %     $ % " % $ "  # $ ! !  $ % % " ! % ! !  
+ 
+ 
+    
+  
+                                                               
+            
+ 
+ 
+         
+   
+   
+ 
+    
+     
+   
+      
+ 
+ 
+ 
+   
+ 
+  
+   
+ 
+    
+  
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+        
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+      
+  
+ 
+ 
+ 
+   
+ 
+    
+  
+ 
+         
+   
+  
+ 
+                                                                
+  
+ 
+   
+ 
+   
+ ! 
+      
+     
+ 
+ 
+       
+ 
+ 
+ 
+ 
+ 
+   
+       
+  
+ 
+      
+     
+ 
+                  
+    
+ 
+   
+  
+ 
+    
+ 
+   
+   ! 
+              
+                     
+                            
+                      
+                                                                                                            
+ 
+   ' & # # $ & ( / 5 7 1 5 0 , - 0 2 1 , * 0 5 / / 6 2 - / / 1 . 1 / 3 / ( / 1 4 - / , 2 3 1 , . 1 2 2 4 7 , , + ) ) - - 2 / - * , . 3 / 0 . 2 3 1 - / - 1 / / / 1 / - - + , 3 1 , + , 1 0 0 - / - / 3 0 0 + . 1 / - 0 - - - , , ( . . , , , 0 0 / + * / * + + ( . - 0 * + / 0 , 0 , , , 3 . 0 ' + , / . - ) + ( * , - + , 0 + & ) - * 2 ) + * ) + * , * ( + , - ) - ) , $ ) + ) / * & & ( ) # % ( ' / + ) ' ' ( + ' * % & ' # ! $ % # # " ' ' $ $ % & ' % % ) ' " & ( ( % & % % ! # $ & ! & ) # ' % $ " $ " " % ' ' & % ' " & * ( ' $ ! ! # $ " ' & ' ) + % % % #   " ' % ' ' ( & $ ( ' * % # # % $ % % # ( ( ' % ) ) ' ' $ $ ) % # $ # $ ! " % % % 
+ " ' ) % # # * % # ! $ # % % % ) " " ! ' $ " ! 
+ % & ' # ) & + + ( ' " + + # % $ % & " " % & ) & & $ " # $ $ # $ % % ! #   $ ! $ % & !   ! #  
+  "  
+ 
+ 
+   
+ 
+ ! 
+   
+ 
+                     
+                                       
+ 
+   
+ 
+  
+ 
+ 
+     
+ 
+   
+   
+ 
+  
+      
+  
+ 
+  
+ 
+ 
+ 
+ 
+     # 
+ 
+   
+    
+ 
+    
+ 
+  
+ 
+ 
+    
+    
+ 
+ 
+   
+  
+ 
+  
+    
+ !   
+  
+  
+ 
+ 
+ 
+ 
+    
+  
+        
+   
+  
+  
+ 
+ 
+   
+    
+             
+   
+      
+ 
+                             
+ 
+       
+                    
+    
+   
+ 
+ 
+ 
+    
+ 
+ 
+    
+ 
+ 
+       ! 
+  
+ 
+ 
+  
+ 
+  !  
+    
+  
+ 
+ 
+  
+ 
+     
+    
+ 
+ 
+             
+   
+   
+    
+   
+  !      
+ 
+ 
+ !                                  
+                                                         
+      
+                                                                                                  
+ 
+ !   " " & ( / 0 4 4 3 6 / 3 5 1 - 0 4 ( / 5 1 4 6 2 , . 1 0 1 2 1 0 . + 1 4 5 3 4 / 3 2 3 / / 1 3 3 0 0 + - + ) - + . 5 4 0 * 5 2 + / 1 - - . - - 1 2 1 , / . 0 . , 1 - 1 2 / - - - 7 1 1 . - 1 / + * * - 0 0 / / 1 / - 3 * , ( + - . - , , ( + , * * - . + 0 / + . / / 1 , 0 3 , ' 0 0 , + ) + * . / , 1 - - + + * + 0 0 , , ' 0 - . * * * ( + + + - * 0 . . 2 , , * ' ' ( * , , ( ' * ) # & ' / . - + * ( * ) * ' ) % " % ! # & % ( # ' * % & % % ( % % ) & ! $ * ) & % $ $  " $ ' !   ) & - $ ' $ % ) !   # ' $ ( ) %   # # $   " # # " # & ( ( % ' ' % # # " $ % ) % ( + + % % % % ' $ % # & % % % & # & & * + # % ( # & # ! & % & # #   $ # $ " ( + ' & $ ' % $ & &     ! # ' ( ) # ' $ # & " ) ) ) ' $ ' , # # ( % & ) " " % # % ! $ $ ( ' $ ( % " $ $ ) $ " % $ " " ! & ) $ # % $ # 
+     # ! ! 
+ 
+ 
+ 
+ 
+  
+ 
+  
+        
+ 
+      
+ 
+                                                   
+   
+  
+ 
+   
+ 
+ 
+ # 
+   
+  
+ 
+   
+ 
+ 
+  
+ 
+  
+   
+ 
+  
+ 
+ 
+      
+  
+     
+  
+   
+  
+      
+    
+ 
+   
+  
+    
+  
+ 
+  
+  
+     !  
+  
+   
+  
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+    !  
+ 
+     
+ 
+    
+        
+ 
+        
+                                      
+          
+           
+ 
+       
+ 
+      
+ 
+     
+ 
+     
+    
+   
+  
+   
+   
+  
+ 
+ 
+ 
+     !        
+   
+  
+           
+ 
+ 
+ 
+  
+  
+   
+       
+ 
+ 
+ 
+ 
+ 
+ 
+ !  
+ 
+                       
+                                         
+                              
+                                                                                                   
+    " # $ ( * 3 3 5 : 8 5 0 3 5 6 1 2 5 . 1 8 4 7 > ; 7 1 . 1 2 5 1 1 4 / / 7 7 6 5 2 , 0 0 2 6 1 2 3 0 0 + * + / , 2 3 1 / , - 0 1 . / 0 / , + , 1 3 3 - 0 + / . - 0 4 4 5 4 0 - 0 1 5 - 0 + , / - - + . / 4 0 0 0 1 / - 4 / / / . 1 0 + . 2 6 + 1 - , 1 4 1 . . 1 1 5 , 1 . 0 1 . , / 1 3 / , - 0 6 3 0 3 4 - + ) , , . / 0 2 / * - / . 1 , - / , , * + . / ) 0 , * ) , , , , , , + * . 4 ) ( , / / - , * + / + + ' * ( & $ # ' % % , ' ' * ' % % ' . ( ) ' ) # $ ' ) ( ( & ) ! ' ' & & ' " ' * ) ) $ & ( % ' & % & & ( +   # ' ' " ' $ + & ' * ) ( ) & ' ( # ' ( % " & ' + & % $ $ $ ' ' & ) + ' $ % # # # + + % ( & ! " # % $ # # % % ' % $ ! $ ' % ' ( & & ( " ( & % ' & ! # % & * ( & # $ % % $ & ! $ ( % & % $ & % " $ % & $ " # # ! " ( ) '   $ ( ' ' # ! " " & $ & $ " ( ) # ! $ ' $   ! " $     !  
+ ! 
+  
+ 
+ 
+ 
+   
+      
+ 
+   
+  
+  
+ 
+ 
+                                          
+      
+      
+   
+  !   
+  
+ 
+  
+ 
+ 
+  
+       
+ 
+ 
+ 
+ 
+   
+   
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+   
+  
+ 
+    
+ 
+  
+  
+      
+        
+ " 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+   
+  
+ 
+     
+  
+  
+  
+      
+ 
+  
+ 
+  
+    
+     
+ 
+     
+ 
+                  
+         
+ 
+   
+                  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+             
+    
+ 
+ 
+ 
+  
+ 
+    
+   
+ 
+  
+      
+               
+ 
+ 
+     
+  
+    
+    
+ 
+    
+ 
+ 
+    
+      
+  
+ 
+ 
+ 
+  
+ 
+                                                                                                                                                                                                 
+ " "   ! & % * - 4 2 2 5 = 9 2 5 3 9 5 5 5 1 4 8 7 9 8 = < 5 3 2 0 5 3 0 5 1 1 4 4 1 : 5 1 / 1 / 2 0 . 1 0 1 1 - . / . 1 2 1 3 2 3 , + 0 1 / . - - - 1 0 1 1 2 3 0 / 0 1 2 5 1 1 - 0 / 4 6 0 1 1 / . , / 2 1 4 2 2 0 0 1 2 - 0 1 . . / 2 2 0 1 0 4 0 . - * 0 2 , - 0 / + . , + 2 2 2 1 , / . / 2 0 0 3 4 5 0 / 3 1 , + - / 0 , . 4 0 / / . 1 0 , 3 . 0 + - + 0 3 1 0 / 2 - , , 2 - / 1 . + + - + * - , - , , * , . - - . + ' ( % ' * & $ - ( % $ " ( * ) + ) ( / * * ' # & & # # ) $ ) ( % ' + * * ) $ ) ' $ ' ) $ # * % & + & " ) - / ( ) ' ' ( % % ) ( + ' $ ' # & & ) ) % ' ( ' $ $ % " " % # ) ' $ ( & $ ' $ ' # & ' & & % % # ) & ( + ' & & % ( $ * ( ' * ' & $ & ) ) ( $ $ % & & $ % & $ (   $    % ' % ( ' * ) * % & ' ' ' # " ' $ % # # & & $ # ' * + + ' $ # " $ " # " % ) ' ' # $ + & " & % $   
+   
+ !    "  
+ 
+    
+      
+ 
+ 
+  
+ 
+ 
+         
+    
+    
+ 
+ 
+                                
+     
+ 
+  
+ 
+ 
+  
+   
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ " 
+ 
+ 
+  " 
+ "   
+ 
+ 
+   ! !  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+  
+   
+       !  
+  
+ 
+  
+  ! 
+ 
+ 
+  
+ 
+       
+  
+ 
+ 
+  
+ !           
+ 
+  
+ 
+      
+    
+ 
+ 
+  
+ 
+  
+    
+  
+ 
+ 
+  
+   
+ 
+ 
+   
+              
+ 
+ 
+ 
+     
+     
+   
+ 
+  
+   
+  
+     
+ 
+   
+ 
+   
+ 
+    
+ 
+  
+ 
+   
+ 
+   
+ 
+ 
+ 
+   
+   "   
+ 
+ #   
+  
+    ! 
+ 
+ 
+ 
+  
+  
+  
+          
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+     
+     
+  
+ 
+ 
+  
+  
+     
+ 
+  
+   
+  
+  
+                                                                                                                                                                                               
+  " 
+ ! $ 
+ " + + - 2 2 0 6 4 6 0 3 7 1 1 4 2 7 > ? > 9 : ; 7 4 5 : 7 8 0 0 2 4 7 3 0 5 2 2 0 . 1 1 5 7 7 3 2 0 . 1 0 2 2 3 2 7 4 2 / , 3 4 1 3 2 + 4 6 7 1 5 0 . 3 1 4 7 5 4 2 1 / 2 / . 3 0 + 1 / 3 1 / 0 / 4 1 / 0 - - - * / 1 1 , + 2 1 1 0 3 . 1 / . 3 2 / + / 1 - / 2 0 4 3 . , 0 5 + 2 3 2 , 4 / ) - ( , / 3 2 + . + ) 1 4 0 . , / , - 3 4 0 . . * . - . . 2 / . / 0 1 , ( - , / - * , , , & , - + , - * * - 1 . . - ( ( ( ( + ' ( ' & ) & * % , / , + ' ) ) ( + % # & ( & * ( * ( & $ * * & + ( ( ) ) ' + % % % * & , ) # ( ( . ( $ $ " # ' ) ( # $ * ' ) & & ' % & ' ( * & ( ) % % " # * ( ' $ ' % ) ) ) ' ' * * + ) & ' % ' ) $ * ' ) , ) ) $ # ' ) , + ' * & ( ' ' * % & # ' & ' , $ ) ( ( $ $ $ ' * * ) % ' & & & ) ' ) $ & ( & $ % % % " ' & ' $ ( ) ( ' $ $ % # ' ( ) % $ ' & ' + ( ) & & ' & "  
+  " ! # 
+    
+  
+   
+ 
+  
+  
+ 
+           
+  
+ 
+ 
+ 
+ 
+    
+  
+ 
+                            
+       
+       
+ 
+ 
+  
+    
+ 
+  
+ 
+  
+  
+ 
+ ! 
+ 
+  
+ 
+ ! ! 
+ 
+ 
+   
+ 
+      
+   
+ 
+  
+  
+ 
+   
+  
+ 
+    
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+  % $ !    " "  
+  
+     " #  
+ 
+        
+ 
+ 
+  
+ 
+ 
+ 
+   
+   
+  
+ 
+   
+ 
+  
+     
+      
+ 
+  
+ #  
+  
+ 
+ 
+ 
+  
+ 
+   
+ 
+ 
+   
+  
+  
+   
+   
+         
+     
+   
+      
+  
+ 
+   
+ 
+   
+             
+   
+  
+  
+  
+      
+ 
+   
+     
+       
+ 
+   
+   " !    
+ 
+ ! 
+  
+   
+    
+ 
+  
+ 
+  
+       
+   
+   
+ 
+ 
+ 
+  
+  ! 
+ 
+ 
+ 
+ 
+    
+   
+ 
+ 
+ 
+   
+ 
+  
+ !    
+ 
+ 
+ 
+ 
+                                                                  
+                  
+                                                                                                            
+    % " # % % * . , - 3 0 . . 6 4 7 : 9 4 6 7 7 9 7 8 : 2 5 : 2 9 9 2 1 / 0 7 2 4 / 2 7 3 2 + 2 3 4 7 1 0 4 3 . . 0 1 3 1 5 5 3 3 6 5 , 0 / . / 3 . - 8 9 2 1 0 / 4 1 4 7 5 8 2 2 3 5 0 1 4 0 , 1 3 3 2 2 1 0 1 / , , - 1 1 * / - 1 1 1 3 1 1 / 1 * , 1 / 0 2 3 / 0 2 6 2 0 2 8 5 0 0 2 / / 0 1 2 1 8 1 - . . 1 2 1 6 2 3 0 / 5 4 / - . - / 3 6 0 0 - . + . 2 2 2 9 / . 1 1 - ( + 0 - . , - , . / / 1 , . , + * & 3 / 2 . , ( ) * ' ) % ' ) & ) ) ' + . . , ) ' + * * * * ' ' ( ' ) * ( ( ( % , ( & + * , * * + $ ( & ' ( ) ( ( ' ( + / , * & $ & ' & , & ) ) ' ( * & ( ) ( ' ) * + ( ' ( ( * ( ' ' ' ) ) * % ( ' ( * ( ( * & , , ( % & & ( ' ) . ) % ' % ) ) * % ( + & ' % ) * ) $ $ ) & ) & $ ( ' % # + ' # % ' ' ! $ ' ' ' . ( ' ) ( ) ( ' ' ' & $ % ) ' % # & # % & ( % # % ' ) $ & " ! ) * + & ) * & % ' #    
+ #    
+     !             
+ 
+   
+  
+   
+ 
+  
+ 
+ 
+  
+  
+ 
+   
+   
+    
+               
+            
+  
+            
+    
+ 
+    ! 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ !     " # # % !   
+ 
+ 
+   
+ " " 
+      
+ 
+  
+ 
+ 
+ 
+ 
+ 
+   "      
+   " !    
+ 
+ 
+ 
+ "   !   !  
+ 
+   
+ 
+ 
+  ! #     
+  
+ 
+ 
+   
+ 
+  
+ 
+ ! 
+ 
+  
+ 
+ 
+ 
+     
+   
+ 
+  
+  
+ 
+ 
+ 
+ 
+   
+  
+  
+ "    
+ 
+        
+ 
+   
+ 
+   
+  
+ 
+    
+ 
+  
+  
+         
+ 
+           
+     
+ 
+   
+ 
+ 
+  
+  
+ 
+  
+ 
+ 
+ 
+   
+ !   
+ 
+  
+ 
+ 
+  
+ 
+ " ! " !  
+       
+    
+  
+     
+    
+ 
+   
+   
+ 
+  
+ 
+ 
+ 
+   
+ 
+    
+ !    # 
+ 
+  
+ 
+ 
+ 
+   ! 
+   ! 
+ 
+  !    
+                                                                                                                                                                                               
+ 
+  " # % ) ) . , * / 2 3 . . / / 3 9 8 : ; 7 5 5 5 7 : 7 8 : 4 5 6 1 3 6 / 6 5 3 1 7 3 2 5 4 4 2 + 1 2 3 5 2 5 0 3 2 0 2 2 4 2 1 4 4 2 3 4 4 4 1 3 - 4 8 5 3 1 1 4 1 1 7 4 6 6 . / 1 3 0 4 - , 3 5 2 2 / / . 0 . / 0 2 4 2 - / 0 1 + - / 3 2 1 - 1 3 3 / 0 6 3 5 . / 5 1 3 2 5 5 1 - 4 0 - - - / 3 6 5 7 2 1 4 1 1 7 - 2 . ) - 2 4 2 2 1 1 2 / / , * . , / 0 - 0 0 / - 0 4 - - , . , , + , * , 0 + 0 + ) * + , + 0 / ) - , ( + & $ ' % . - + ) / - * / - - , ) . . ) ) ( $ " ) ) ' ) ) - + ' ' & % ) , + ) ' # ' $ ) % ( ( ) + , - + + * * ) % # , ( * ) ) % $ ) , * , & ' ' . * 0 ( & ) . * # ' & ( ( & ) + ' ( ' ' ( ( ' # ' ( % &   + . ) ( * & ' ) ( ( & * ( ! ) + ) ' + ) ' % ) + * * % % & $ " ) * / ( ( $ ) * ' & ) , . * ( + ) ( + ) ) & ( # # % # % % ! $ $ % ) & " " " # # ! " ! $ $ ) ( ) % # % "   
+ 
+   
+ 
+ 
+   # " 
+ 
+ 
+  
+   
+ 
+   
+       " " 
+    
+  
+ 
+  
+ 
+  
+ 
+  
+ ! 
+  
+ 
+               
+               
+      
+     
+    
+     
+ 
+   
+ 
+   
+  
+      
+  
+ 
+    !  
+  
+ 
+ !  
+   "  
+ 
+ 
+ 
+  
+ 
+    ! 
+   
+ 
+   
+ 
+ $ " # " " 
+ 
+ 
+ 
+  
+ " 
+  
+ 
+         
+ 
+ 
+  
+ 
+   " 
+ 
+  
+  
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+        
+ 
+ 
+ 
+   
+   
+  
+  
+  
+ 
+    
+   
+ 
+  
+             
+      
+ 
+           
+ 
+    
+        
+ 
+      
+        
+ 
+  
+   
+ 
+     
+  
+  
+   
+ 
+   
+    
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+ 
+ 
+     
+ 
+ 
+       
+  
+ 
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ "  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+  
+      # 
+                                                                     
+                                                                                                                          
+ 
+ 
+  # ( + - , * , 1 5 4 3 2 4 4 7 9 = 5 6 9 : : : A : 8 : 9 6 5 5 6 4 7 0 4 3 5 8 2 4 0 5 5 3 2 - 0 5 3 4 1 7 2 3 4 9 1 0 / - - 1 0 3 3 5 4 4 / 3 / 3 5 4 1 7 7 2 0 - / 0 6 4 5 5 4 3 1 1 1 0 1 0 2 / + + 2 / 1 1 3 4 5 - , - 4 3 * + 0 3 5 3 . - / 4 4 2 0 - / , / 2 1 3 5 2 6 8 5 5 0 / 0 1 / 1 0 2 5 1 0 - 1 5 / / . , , 0 2 7 : 4 / - 1 , + . 0 , * / 1 / , - - - , 2 / . / - , + ( * + * * + . * ' ( ) + - . - - + / / , & & ' ) ' * , - . ' ' . , * * & + ) ) ' ) ' % & * + * ' * * ) * + * & ) & ) ) ( * ' * - + - - + * ) ( ' % + ' % ' * + ( - ( % % % ' * * - ) & + ) ) ) $ $ ( & ) % & % # # ' ' * ' * ' ' % ! ' ' ' % ( $ * ( ) * % # % ' ( & ' ' # & ) * " ) * % $ $ % + ) ( $ " & ( # ( ) * ) + ) - * ' ' ( ( + * ( ) + ( % ' $ ( & $ ) ) # ' % " $ # # & ' # #   % & $ ' & % % & ( ( % % " ! 
+ !     ! $ 
+     
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+ 
+  " 
+ ! !     !   
+   
+ 
+    
+ 
+   
+ 
+                       
+                 
+       " 
+      
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+       
+    
+ 
+ 
+ 
+  ! 
+ 
+ 
+  
+ 
+   
+  
+   
+ 
+    !   
+ " "  
+ 
+ 
+ 
+ 
+  
+  
+ 
+  
+   ! !  
+ 
+   
+ 
+  
+ 
+ 
+    
+ 
+ 
+ 
+     
+   
+  
+ 
+     
+  
+   
+   
+   
+ 
+  
+  
+ 
+  
+ 
+  
+ 
+   
+      
+         
+ 
+      
+  
+     
+ 
+ 
+  
+  
+ 
+     
+ 
+       
+   
+          
+ 
+        
+ 
+  
+ 
+   
+ 
+ 
+    
+  
+  
+ 
+  
+  
+  "    
+ 
+ 
+  
+  
+ 
+       
+  
+ 
+  
+   
+ 
+  
+   
+ 
+ 
+  
+ 
+    
+ 
+   
+ 
+ 
+  
+   ! 
+ 
+   
+ # 
+ 
+ 
+     
+                                                  
+                     
+                    
+                                                                                                     
+ 
+ 
+ " ' / * * / 2 3 5 4 6 6 7 5 4 : > 9 4 8 : 3 4 = = ; 4 7 3 / 7 2 0 2 1 2 2 5 5 4 1 7 . . 5 4 0 . 0 0 1 1 3 2 2 9 7 4 2 2 3 2 2 1 , / / - 1 , 0 0 6 8 2 3 4 6 0 1 3 2 2 2 3 3 6 5 3 2 4 4 3 / 2 . - . - 0 0 3 0 9 5 5 - . . 0 / / 2 / 3 2 3 0 0 . . 2 1 3 2 / / 0 0 4 0 / / 0 5 4 4 2 , / 2 1 0 2 3 3 0 1 3 4 5 / , - + / , 0 6 4 5 2 , / ( ) - - - / 0 - / ) + * 0 1 2 , / , , - , ( * ) ( ) + , , + - + & ) * , ' + * + - ) ' * ( + . . , . * , / ) ) , ( * * $ $ ( ' ( & + ( ) & ' & & ) ) ' , ) ) , + + ( & & ' / . . + ' ' ' ( % & # ( % - + ) ) % # $ ) ( ( ) - ( + ' * & ) ( # " % % & $ ' $ ( , + ( ( , ) ) ' $ ) ( * ) & ) , * * - ( $ # + ) % ) ) $ % $ * $ ( ) #  " # % & ( & % # % & & ( ) ' ) ( * ( $ & $ ( ' ) % ' ) * ( % ( & # % & % " ' % $ &   # " & $ & $ ' * # % $ % % % ( & % % !   !  " "   # # " $  
+     
+ 
+ 
+ 
+  " 
+ 
+ 
+ 
+  !         ! " # "  
+ 
+ 
+ 
+ 
+  
+ ! 
+ "  
+             
+                                    
+ 
+     
+  
+    " 
+ 
+ 
+   
+   
+ 
+  
+   ! 
+ 
+ 
+   "  ! 
+  
+ 
+ 
+  
+     
+ 
+ ! !  ! 
+   
+ 
+ 
+    
+ 
+ 
+   
+ 
+ 
+ 
+ 
+  #  
+   
+ 
+  
+ 
+  
+     
+  
+    
+ 
+  
+   
+ 
+ 
+      
+ 
+ ! 
+    
+ 
+  
+ 
+   
+ 
+     ! 
+ 
+  
+ 
+  
+ 
+ 
+   
+         
+ 
+           
+       
+ 
+      
+         
+ 
+ 
+  
+ 
+      
+          
+   
+    
+   
+ !       
+ !  
+     
+ 
+ 
+  
+ 
+ 
+ 
+    
+ 
+ 
+    
+     
+ 
+ 
+ 
+      # 
+ 
+ 
+ 
+ 
+   
+ 
+  
+  
+ 
+ 
+ 
+    
+  
+   
+ 
+  
+ 
+ 
+ 
+ 
+                                                                                                                                                                                             
+ 
+     # * - ' ) + , 4 0 1 4 4 4 8 3 4 9 8 7 7 8 = 8 5 5 : 7 9 3 2 ; 5 2 6 1 - / 4 7 7 4 7 2 3 3 3 0 / / 0 2 3 5 4 3 2 0 0 - 1 3 4 2 2 1 0 0 - 3 2 2 0 / 7 3 2 / 1 3 / 4 6 4 * . / 0 3 1 . / 4 7 4 3 1 - 1 0 2 4 1 4 2 / 2 - 1 1 2 2 2 0 1 0 0 3 / 2 2 1 7 3 2 3 0 / 3 5 1 . 3 . . , , 6 3 - . 1 4 / 2 2 1 0 2 1 1 3 , / 5 2 - - 0 1 0 2 . 0 - + , , 2 / 0 + * , * / - / 3 2 - / * * , ' + . - , , - . / - . , % ( / ' ( ( * ' * * * - , 0 / / . * + ) ( ) & $ * ( * ( ( * $ ' $ $ $ ) ' ) ) * % ( ) - ( ) / / , ) ' ( ' - / * ) ( & ) % $ & ' ) * , ( % ( $ ' ) + ' * ) ) , / ( & & & ( ( ' % % ) ' ' & % ) % ) * * ) + + ' % ) ' ) ) & , * ' ) ) ' % ' ' " % & $ ' + ) & ) ! $ % % % $ $ ( ( % & $ ) ) % ( ' % + ) ( & & ( % & ' ' ' $ $ & % ) ' & # 
+ # % & % % % ' " $ % % % % ) * ' " " % % & % ( % # # ! " 
+ 
+    # ! " "   ! $ "   
+ 
+  "   
+ 
+  
+ 
+    
+ 
+  " ! 
+ # ! " 
+ 
+ 
+ 
+ 
+  
+   
+  
+      
+ 
+                                                
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+     
+ 
+ 
+ " 
+   
+  ! 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+     
+ 
+   
+  
+  
+ 
+  
+   
+ 
+    
+ 
+ 
+ 
+  
+   
+    
+ 
+ 
+   
+ 
+  
+    
+ 
+   
+  
+    
+  
+   
+        
+    
+ 
+      
+  
+  
+    
+              
+  
+    
+       
+     
+  
+ 
+         
+  
+ 
+  
+         
+ 
+    
+ 
+ 
+      
+ 
+ 
+ 
+     
+ 
+  
+  
+        
+ 
+ 
+ 
+   
+ 
+   
+ 
+   
+   
+   
+    
+ 
+     !   
+ 
+ 
+  
+  
+ 
+        
+ 
+  
+  
+ 
+ 
+ 
+    
+                          
+        
+ 
+                       
+  
+ 
+ 
+                           
+ 
+ 
+     
+                                                                                               
+  
+ 
+  $ & - * . ( , 1 3 1 5 7 9 9 8 5 8 9 4 4 3 : : 7 8 8 4 3 8 2 4 5 6 7 2 5 4 4 9 8 < 6 2 2 1 . , + 1 . / 4 1 4 0 / 1 5 - 2 5 3 2 3 1 1 2 / 2 3 2 3 3 0 7 0 0 0 2 / 3 4 2 . - * 1 0 1 0 0 2 2 0 / 1 / 3 1 1 / 4 2 1 4 4 1 3 7 4 4 0 2 0 1 1 1 2 7 8 . 4 / / 0 . / 2 2 / 0 8 0 + / 1 4 2 2 2 . 1 2 1 , 0 9 4 - 0 2 . - 1 - 2 . 1 2 3 / 1 4 , , , / 2 0 2 2 / 0 ( . 1 4 5 0 . + + - . $ + - , , * - , . 1 + + , % * + $ * ' , . , . , ) ) 0 / 1 * * ) * ) & % ) * . ) & ) ) + $ % $ ) ' ' - + ) - ( - ( ) ( * , , + . * + 1 + + ) ( ) % ' + ' ( + - * ( ' ( & ( ) % ' ) * . & $ % $ & ( + ( ) ' ' * & " $ % ( % $ ) $ # & ' & ) & & ' ' ) ( ' ( * ) & % ( ' % ( % ' $ ( , , ) ' $ ( % # ' ' ( ' # % * ' + $ $ + ) ' % ' ( % # % % " % % & ) ( ( ' ( # 
+ % + $ & % % & $ ) # ( * % % ' ( $ ! $ ' ( % & # ! & #   "  
+ 
+  
+   # ! 
+  " # " " 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ # !   
+ !    ! ! " " 
+ 
+   
+ !  
+ 
+ 
+ 
+          
+                                       
+ 
+      
+   
+ 
+  
+   
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ !     ! $ # 
+  
+ !   
+ 
+   
+   
+  
+ 
+     
+ 
+ 
+ 
+ 
+ #     
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+  
+ 
+     
+  
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+  
+  
+ 
+      
+   
+   
+ 
+       
+ 
+ 
+   
+           
+   
+            
+  
+ 
+       
+          
+ 
+ 
+  
+ 
+     
+ 
+   
+    
+  
+ 
+      
+      
+  
+  
+ 
+     
+    
+  
+  
+  
+ 
+ 
+  
+ 
+ 
+         
+   
+ 
+   
+ 
+ 
+ 
+   
+  
+ 
+ 
+ 
+  ! 
+      
+ 
+ 
+ 
+       
+ 
+ 
+  
+                                 
+                          
+           
+      
+                
+ 
+ 
+                                                                                                  
+   ! $ & / - , , - 5 7 7 8 : 6 7 5 3 6 9 7 5 9 1 1 7 3 4 4 5 5 2 4 6 4 5 8 7 8 4 5 < 9 2 0 . . / 0 3 4 2 2 0 6 0 / 4 2 - 2 3 1 2 2 4 4 5 4 1 3 / 2 2 - 1 0 - 1 0 . / 1 1 0 . 3 0 / 2 5 2 4 3 3 0 1 + / - 1 3 . / 2 2 1 0 0 3 0 . 3 0 3 0 2 0 , 3 7 - 2 / + . 2 2 5 / / 2 0 3 2 2 7 4 2 7 3 5 2 0 2 / . 9 2 - 0 1 / 0 2 / / 0 / 4 6 5 , . . + , / + 0 2 5 / - ) - 3 1 - - . . . - 3 + 3 2 - * ) & . + + - ' ) ' * ( ' + + . + . 1 ) & ( + - / , ( ) & ( . - + / , ) & , + ' ( ) ( ( * ( ( ' & + $ & $ / / ) , * ( ( & , * * / , & & * * ) # ) + ) % * * # ' ( * % + + - ) + , & " ( ) ) % ) ' ' $ '   % % # ( ( ) ) ' * ( # $ ' ( & " % ' ' & & ! # ' ( ( & % & ) , ) ( ' ( ' " & % $ ! ' ) ) ' ' ' ' ( ( % - + ' % ( # # # * $ % # % # $ ' % # !  # % ( ) $ $ " $ $ $ "  % # ( # &   
+ # $ % " # ' % $ % ! !   "   !  ! ! 
+  " % # ! ! " ! 
+  ! 
+         
+   !        " 
+ 
+    
+ 
+ 
+     
+  
+      
+    
+                                   
+ 
+           
+              
+ 
+ 
+  
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+  
+    
+ 
+   
+ !     
+  
+ 
+ !   
+ 
+ 
+   
+  
+    
+   
+ 
+ 
+  
+    
+  
+ 
+ 
+    
+    
+ 
+  
+ 
+    
+      
+   
+           
+   
+  
+ 
+   
+      
+         
+  
+   
+                  
+      
+       
+ 
+               
+ 
+ 
+ 
+  
+ 
+     
+  
+ 
+ 
+    
+    
+ 
+ 
+ 
+ # 
+   
+   
+    
+ 
+ 
+ 
+  
+            
+   
+ 
+ 
+  
+  
+ 
+ 
+  
+ 
+ 
+  
+  
+ 
+   
+ 
+        
+ 
+               
+                                                                                                                                                                               
+ 
+  
+  # ' ( / * - , / 4 8 3 5 4 1 5 2 5 6 4 5 : 1 4 7 7 0 3 3 : 2 3 4 1 0 3 4 4 0 4 9 1 4 4 4 5 3 2 7 0 4 . 1 3 0 0 , , 2 . 1 6 : 7 2 2 4 1 . 5 7 2 1 - - 0 . 2 3 0 2 0 / / 2 2 2 3 / - 4 - 4 5 1 . . . 0 / / 2 2 0 0 1 / + - 0 . 4 2 3 3 / . 1 2 3 3 0 / 0 0 / 1 2 . 4 2 / 1 2 9 6 6 7 / 1 6 8 3 3 4 4 / 5 , 2 6 0 0 0 0 . 1 / / / 2 * ( . - / 1 / 1 2 + , * + - - - 0 / , , 0 * / - 0 , 0 0 * - - * ) ) ' & ( * ( * - - * * / + + * , , ( 1 + * * * , , ( , , - ( ( , ) + * ' & ( & & ( ) ( ) % ( & + ) * ) . + ) + , * + - + ( & ( , , + , ) $ % ) + ( . - ( ( & + . ) & * ( % ' # $ # , ' % $ ( $ $ ( # ) ) & ' ' ' ( % ' ' & % ( ( ' ( $ ' % % & ( # $ # & & # & ) & $ % ' ' ' ) & ' ) ' & , ' & ' & ( + * % " % * & ! % " " % ! % $ % & ' "  " $ $ $ ' % ) + ( $ !    % * ! # ! 
+ " ' $ " ! $ $ & $ ! $ " " " $ #  
+ ! #   " "   %    
+ 
+ 
+  
+  
+ ! 
+     # 
+  " !  
+    
+ 
+    
+ "   
+ 
+     
+   
+            
+     
+               
+                       
+    
+           
+    
+     
+ 
+   
+ 
+  !  
+   
+ 
+   
+ 
+  
+   
+    
+ 
+      
+  
+ 
+  
+  
+    
+  
+    
+ 
+    
+ 
+  
+         
+      
+  
+ 
+  
+ 
+ 
+ 
+    
+ 
+ 
+                
+   
+              
+       
+   
+       
+ 
+  
+         
+      
+  
+ 
+    
+ 
+ 
+   
+             
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+  
+ 
+   
+ 
+    
+ 
+  
+    
+ 
+ ! 
+  
+ 
+  
+    
+ ! 
+  
+   
+       
+  
+                      
+                    
+          
+                
+                      
+    
+                                                                                                
+ 
+      " $ % + * / - , 4 6 3 0 / / , 0 0 3 4 1 0 2 3 ; 4 2 5 4 8 4 0 / 2 5 2 3 5 7 5 6 2 3 7 7 6 1 1 1 / 9 / 7 6 0 0 / 1 1 8 - 0 6 3 4 1 0 4 2 2 1 4 2 3 / . 2 8 7 5 / 4 4 1 . 3 0 2 2 4 4 2 5 3 . 0 / . . / / - 2 0 * 1 1 1 1 3 5 5 1 0 5 / + - / 1 5 1 . 4 1 - / / . 5 2 + 2 9 = 9 5 4 - 4 2 6 2 4 3 2 / 0 0 - 1 1 1 1 - 3 1 , . 1 5 4 . , + / 5 / - . / - 2 / / 1 1 ( , . ) * , + - 1 / . / - + * ) , ( % ( & . & # + , & ( ( , , * * + - ( * + ( . , & ' ' ( * ( , * ) ) ( ( & * $ % ' % & ' ( ) $ * + * & * , ) ' ) + - + * ' * ' ( * + + - % & ' ' ' ( ( ( ' $ & ) ) % * ( ' $ " $ % ' " $ ( * $ $ % % % & % & ' & $ # # ' * , ' + ' ' ) # % ' ( * ' % " $ # % ( ( $ & ( & % % $ # ) % ( ( $ # % ( % ' * % !   
+ " $ " " $ # ! # % % ) ' + % ' ! $ " " % % & $ " % $ !   % &  $ ! 
+ $ % % %   ( ' % $ ! % % " " !   $ ! ! 
+ 
+ 
+ # "    
+  
+ 
+ 
+        
+  
+ 
+ $ $ 
+ 
+ 
+  
+        % 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+        
+                                                     
+                    
+   
+  
+      
+  
+         
+     
+    
+ 
+ 
+ 
+         
+ 
+ 
+      
+  
+ 
+ 
+ 
+ 
+      
+      
+       
+  
+       
+         
+  
+           
+           
+         
+ 
+                
+ 
+ 
+  
+  
+ 
+    
+          
+     
+        
+    
+ 
+   
+  
+ 
+     
+         
+    
+   
+ 
+    
+  
+       
+ 
+ 
+ 
+   ! 
+  
+ 
+ 
+ 
+ 
+ 
+                                     
+         
+        
+    
+                                
+    
+                                                                                                   
+ 
+    # # % % & * ( * , 9 0 0 2 . 2 - 1 4 / 4 9 / / 3 7 3 4 6 6 5 4 2 4 8 8 3 7 1 5 2 3 2 2 0 3 9 4 / , 3 1 / , 6 0 0 1 1 3 1 3 3 1 1 5 5 3 5 7 / 5 5 6 1 2 1 / 2 4 5 4 1 1 , 3 5 2 1 3 5 1 - 1 . - 3 0 0 - . 0 0 2 0 , / . - / - 6 2 0 3 3 1 ( 2 3 4 7 5 4 4 5 3 3 + . 3 2 2 1 4 6 / 5 4 3 7 9 / 7 2 1 2 / 0 - - , 2 0 4 / 2 0 - 0 2 0 / . / 1 2 1 + ) & . - 3 0 2 6 . - ) 0 , * * ' ' , / / , - ) ( * ) ) , * * , * ( ( + ( + ) * , . + - * * , + ( ( & + ( + % $ ( ( ' ( ' ) ' & ' & & % $ ! * ) ( * ( & + + * , + , ( ) ' ) ( $ ) & ( ) , ' ' $ # & ( % ' * ( ( * ( * # ( $ ( ' & + " $ # " ' ' % # % * % & % # $ + $ # ! $ " ( ' % ( & # ! $ $ ' # % * % # ) ' $ ! & ' % & $ ' ( & $ & ( & " % # % % & ( ( ' 
+ "   % & " & ' & ! & $ " % % ( $ & ! ! # ! # $ % & $ " # % & $ $  $ $  ' ) % ' % $ % % !   # ! !   
+   ! !  " 
+ 
+    
+ 
+     " 
+  
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ ! "   !     
+ !  !   !  
+  
+      
+ 
+    
+ 
+                                                                                                          
+    
+     
+   
+ 
+    
+      
+   
+  
+ 
+ 
+  !    
+  
+ 
+ !       
+         
+    
+      
+  
+  
+  
+           
+ 
+             
+  
+  
+            
+ 
+ 
+ 
+   
+ 
+  
+    
+ 
+        
+    
+ 
+   
+    
+ 
+    
+ 
+ 
+ 
+ 
+  
+ 
+ 
+    
+      
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+       
+ 
+ 
+     
+ 
+    
+    
+ 
+                         
+                  
+                   
+           
+                  
+            
+                                                                                           "  
+ % % ( # ) + * + 3 6 . 4 + / / . 1 3 0 5 0 2 5 2 8 1 2 5 ; 3 3 5 3 5 7 1 / 3 2 2 1 4 2 / 3 + * 3 2 / / . 6 1 0 3 2 3 0 0 - 1 2 4 5 1 0 3 2 - 0 2 5 7 0 - 1 1 0 0 . 4 0 - 1 1 / - 2 2 , 2 . + 3 2 + * ' , 2 4 1 1 0 1 . 3 4 3 / , 0 / 4 . 3 3 4 3 5 5 3 3 1 3 0 2 1 2 . 4 0 0 * 2 9 5 7 2 - , 0 2 3 3 / + + , / 2 3 4 7 + / , 1 , + - + , 2 . 0 - 2 - 1 2 - 3 / - / + 0 1 + 0 , ) - - * + , + + + ) % ) ) & , * , + 0 / , , , - + + , - + - ) ) ( ( ' , , ' % ( ' % % * - , ( / ) , ( $ ' ' * ' ( , * ( ( ) 0 , ) + ' & ) & ' * ' % ) ) ( & & # % , ' ( ' $ & $ ' % & ' $ ' $ * ) & ' % % ' ' & $ ' % & ' & # $ & & ) $ ' % ( ' " ' . % ' ( ( ( ' # ( $ % , - % ! % ( ' ' % * ) * ' * # ' & # " % # $ $ %    # ! ' ' $ '   % & $ ' # % $ $ ( % # ' & ! ! * ( ( &   " $ $ $ # ( # ! " # & ( & $ %   "    # '   
+ 
+ ! % # 
+ "   
+ 
+ 
+   ! ! 
+  
+ 
+ 
+ 
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ #  
+  
+ 
+ 
+ 
+   
+ 
+   ! 
+ 
+  
+    
+      
+ 
+ 
+ 
+                                                                                                
+              
+ 
+  
+         
+ 
+ 
+ 
+        
+ 
+       
+ 
+  
+ 
+         
+ 
+           
+       
+ 
+  
+              
+          
+      
+     
+ 
+        
+ 
+  
+  
+ 
+ 
+ ! 
+   
+    
+ 
+          
+  
+   
+ 
+ 
+ 
+  
+           
+  
+ 
+ 
+  
+        
+ 
+     
+ 
+ 
+  
+   
+    
+        
+ 
+ 
+ 
+ 
+                     
+ 
+          
+        
+ 
+         
+                   
+            
+          
+      
+                    
+                                                                                       ( % $ ! * + 0 0 5 1 / 0 0 0 3 2 / 1 5 6 2 3 5 0 7 1 2 5 0 3 1 1 4 3 4 + - 4 + + 0 0 2 0 - + 2 2 0 , 0 / - / 4 1 2 4 4 1 , 1 0 3 3 0 , . . 0 2 - 1 4 3 - / / / 4 / 4 4 3 - 6 / 0 + 0 3 2 . , / / 0 + - / 2 2 . / 4 2 3 1 3 1 1 0 2 6 7 2 3 4 2 6 9 2 7 0 2 4 3 2 , - 0 3 - - / 0 3 5 3 - 1 . 0 4 1 , 0 - / / 3 / 3 5 6 / / ) 0 . ' 0 . - , - / 2 0 , - / + 4 - , 0 , 1 - , / 0 + / 1 , . , , / * / + * - + 0 * , + , 1 . - , , ) * 2 . * 0 + , ) & ) * + , ' ) * ' / - + ) ( , ) + * + , - . ) ( , ( & & ( * * , , ) ( * , ' * + ) & ) ' ( ) ( ' ' & % % % % ) * + % ( * ' & , ) % ( * * ) ' ) ( ' $ % & ' % " , ' $ % ) & $ # ' & * * % & ( ( * ) , ( + / ( ( # " & * ' ( - & $ ( ( & ( % ' ( ( ( ' ' ( % # # % $ # & ( ' ' # & ) !   # # ( & & % " # $ & ) ' $ & % $ ' % ! % # $ $ ! " " + % $ # ! " " % % ! ! 
+ $ !   ! ! 
+  
+ 
+  " $   
+    
+ "   
+ 
+    
+ 
+ 
+ 
+ "   
+ 
+ 
+ 
+ 
+ "          
+    !       
+ 
+ 
+ 
+ 
+ 
+             
+   
+                         
+                          
+                    
+ 
+  
+                   
+    
+     
+                      
+                     
+         
+                    
+  
+        
+    
+      
+         
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+   
+           
+        
+ 
+ 
+  
+    
+   ! 
+ 
+ 
+ 
+ ! 
+           
+ 
+ 
+ 
+    
+ 
+   
+ 
+   
+  
+ 
+ 
+    
+ 
+  
+ 
+ 
+ 
+  
+ 
+                     
+       
+                                                       
+               
+                                                      
+                                          
+ 
+   " ! ' $ $ # * . . 2 - 0 3 4 1 / / 4 0 1 0 4 4 1 0 1 9 8 6 8 1 8 4 4 8 7 5 8 1 0 0 0 1 2 8 3 . / 2 2 0 0 1 0 1 3 9 4 7 7 2 1 3 2 / 2 , . 0 0 / 0 / 0 1 4 5 2 3 0 9 8 4 1 3 5 / 1 2 0 4 2 2 - . / - 1 3 / 1 2 0 . . 2 2 . 7 2 4 0 2 6 2 4 = 5 4 3 2 6 5 1 2 2 4 1 4 6 / + . / 1 0 3 2 2 1 4 0 4 0 1 3 3 / / 1 0 0 4 1 1 1 - 0 0 + / - / 3 4 + 0 ) + / / 0 + - + - / / + . 0 0 * / . / 3 2 0 - - , 0 . - * ) . , / + . - - - , ) . + & ) 0 0 + + + + / , ) & , + , ) ' ) / / . + + ) , * , ' * ' ' % ' - ' & ( 3 , ( 0 , & ( * + * ) + - ( , + ' ' ' + & + * * ( ( ( ( * ' * % $ % ( ) ) ) # & * ) ( ( ( % " ( ) $ & ) ) ( # $ ) ) % & ' ' $ ' & + ( & * , % # * ( ( % $ & + / ( " ' $ * ( ) ( ( ( & ' & ' ( * & ( ' $ ' ' " & $ & % & & # $ # ( $ % & ! & $ & $ ' ' & * . * & # # ' & * ' $ ) % ' " % ' " " "   ! ! $ "   ! % $ ! 
+ #   
+   % ! " 
+   
+ 
+     
+  
+  
+     !   
+  ! ! 
+   
+ 
+     
+ #    " " # ! !  ! 
+ 
+        
+   
+ 
+    
+       
+                                                                      
+                                        
+       
+                                                      
+  
+      
+     
+  
+   
+    
+        
+ 
+  
+       
+   
+    
+                 
+ 
+  
+  
+  
+ 
+  
+ 
+  
+   
+    
+    
+ 
+ 
+  
+   
+    
+ ! 
+  
+  
+ 
+  
+ 
+                  
+ 
+  
+ 
+ 
+                                                    
+                                                                                                                                            
+ 
+   # $ ! $ ( - ( - / 0 5 5 3 / - 0 5 1 3 4 3 2 7 8 4 6 8 5 5 5 8 3 5 3 5 2 - 1 5 9 0 / 1 6 4 2 4 8 4 / 2 2 2 2 ; = 4 5 / / 0 . 5 1 1 0 . / . 2 - 0 0 2 / 0 0 1 0 4 4 0 2 . 2 5 1 4 3 4 3 3 3 2 - / 2 1 2 3 3 / 2 3 7 6 / 6 3 4 2 : 8 1 2 6 6 8 4 8 6 1 3 1 3 4 0 6 4 2 . / 1 5 1 0 8 1 3 7 6 3 2 2 0 7 2 - 0 1 2 2 1 , 2 3 2 0 ) + * 0 2 . ( / , / / 4 0 - , * / , / / 3 4 1 / 2 / 1 2 5 2 - 0 2 2 0 . + ) , / / , ) , , 3 ( * 3 / ) , 3 7 , / / . 1 * * ( - . + * , * * - 1 1 * ) & - * ) * - ( & $ - - ( * , * ( - 0 + + ' ' * , ( & ) ) / + + ( , ( ) * ' * ' % ) ( ' * ( & ( ( ' % % ( ' ' + ) ( ( ) ' ' # $ ) + * & ( # ( ( ' & ' ' & & ) & ' $ , * + # $ $ & ' ) % ' % ( ( ( ' ) & ' % ' % % % ) + ' ( % ) ' % ' * $ * ' ' & $ $ ( # ) ( #   & ' ' % & $ ) $ $ ( * ) % ' $ & * ( % & % $ ( " # & $   " "   $ # % ! " ( ! 
+ ! !     ! # $   "  
+   " 
+ 
+ 
+   
+       !   
+  !  $ $   
+ 
+ 
+ # "     %    
+ $ 
+ 
+ # ! " 
+ 
+ 
+  
+ 
+  
+        
+  
+                                         
+       
+        
+         
+                               
+    
+       
+ 
+        
+   
+                                   
+      
+               
+ 
+       
+    
+  
+ 
+ 
+   
+  
+  
+  
+      
+ 
+     
+ 
+ 
+  
+ 
+         
+      
+      ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+  
+ 
+ 
+        
+ 
+    
+  ! 
+ 
+  
+    
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+   
+    
+ 
+ 
+                                                 
+         
+                                 
+                                                                                                       # # # ) ) + / . / 4 2 3 2 6 1 6 3 2 2 5 8 2 2 5 1 4 3 3 3 0 3 4 9 6 6 6 5 4 3 8 1 0 1 0 3 . 2 3 3 7 / 5 2 0 4 6 1 . - . . - 1 0 0 3 0 - - 2 . 0 / , . / / 1 6 7 2 1 2 0 / 3 3 7 5 0 2 0 / 2 / 5 1 4 3 2 2 0 0 8 8 2 1 5 2 1 5 9 7 0 1 1 2 4 0 3 3 1 6 / 0 1 2 2 6 8 5 1 6 2 2 2 4 8 4 7 0 0 4 0 - 2 / 5 5 7 7 - , , / . / 0 ) ) 0 / 4 - / 0 + 0 0 4 , , 0 0 , / . 1 1 - - . / . / / 0 0 , / , / 1 0 0 - , * - 0 * * . , , , . 3 * - - , + . / + * ) ( ' - - + ( ' , ( / * / , * ' / * * . / ' + + , , ) ' ) ( + - / ) . , ) , / * ' * ) , , * ' / + ' , ) ' * ( % ( & ' ( ) ) & & % ' , * + + ) ' & $ ( * # ( ) - ( & ( $ & ' & ' ' * ( , , ' ' ( * , * & $ ' $ % ' ' # ' ) ( ( % % % ' ( ' + , ) & ' % ) $ * % * * * ( % ' % , " ! " # ( ) % % % & ' ) ( $ ( " # % ( $ ! ' & ) ' ( '   # & % # "   " %   " & % ! " & % # " 
+ # ! 
+ ! 
+    ! & # !     
+ 
+ 
+ 
+ 
+  !   $ " " $ & $    #   
+ ! 
+ # ! ! ! 
+ ! !   "     # 
+ !  
+   
+ 
+  
+ 
+      
+   
+ 
+ 
+      
+                                                         
+                                
+                   
+                          
+                                      
+  
+     
+  
+ 
+ 
+ 
+ 
+  
+ ! 
+  
+  
+       
+ 
+ 
+    
+ 
+  
+    
+         
+      
+   
+ 
+ 
+ 
+ 
+   
+      
+  
+ 
+           
+  
+     
+  
+ 
+ 
+  
+    
+  
+ 
+  
+   
+ 
+  
+ 
+ 
+   
+ 
+              
+                                          
+      
+                              
+  
+                                                                                                 
+ 
+ ! " ' # # # ) - / 4 8 4 , 0 / / 1 0 / . 0 2 3 5 8 3 / 0 7 1 4 5 4 < 2 5 4 5 7 6 5 2 3 2 0 3 - 2 1 1 5 2 7 6 2 / 4 2 , 2 0 / , + 2 0 0 6 0 / 2 0 2 2 0 3 1 3 0 5 8 3 6 0 3 4 9 5 0 3 2 0 4 . 2 0 4 1 5 4 7 / 0 7 6 3 0 1 . 2 8 6 6 7 4 5 3 4 0 4 1 1 / 7 5 1 5 4 2 6 4 4 2 2 / 1 5 0 4 3 8 1 / / . / . . 0 3 2 9 , / 0 / / . . . 1 / 1 3 2 0 2 - + ( * - - 1 2 4 , / 4 4 , - / / 2 - * / . 1 3 * 1 / + / , 1 / + 0 * 1 . 2 1 0 / + . - 2 + ( + - ( ( ) - + / . - $ ( + ( ( + ) / - % - + + * * ) + + . * + + ( - , * - ( , ( ' / / - ' ) + . ( * % & , ) ) , ) / , % % - - ' ' ' ) ( + ' + % ) + ( ' % & ) ( % % & ) ) ) ' ' & ' ' ( ' & & ( % ( , ' ( $ % ( & $ ( ( / ) % ( ( ' $ ( ' % % & * , ( % " # ( ' $ ) , * , ( * ' & " # $ ) ' $ % ' % # # ) * + - " % %  $ $ ' ' % ' & ) * * " % ' # $ " # ' #   # ! ( # # % " %    ! ! "   $ " 
+ 
+  $ # ! " "  
+    
+ ! !    "   #        " ! 
+ 
+   # 
+ 
+       " 
+    ! # 
+    
+ " 
+ 
+ ! 
+ !     
+ 
+ 
+    
+ 
+     
+  
+ 
+                                                         
+                  
+                                                       
+                          
+              
+  
+    
+      
+ 
+ 
+  
+ 
+ 
+  
+ 
+  
+ 
+    
+  
+ 
+ 
+   
+    
+      
+   
+ 
+ 
+  
+ 
+ 
+      
+ 
+ 
+   
+ 
+     
+  
+      
+    
+ 
+ 
+  
+  
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+    
+ 
+   
+ 
+  
+   
+ 
+ 
+ "  
+               
+                   
+          
+                                                                                                                                                    
+ 
+  
+ ! ! ( ) ' * , + / 2 3 / . 0 3 5 2 6 4 6 5 6 5 : 3 8 6 6 8 7 5 5 4 0 4 = 6 7 3 0 0 4 2 0 1 . 2 0 3 3 / - . , - 2 6 5 0 3 / 2 - / 4 1 0 / - . . 2 4 3 4 , . 0 . 2 3 6 . . 0 5 3 3 1 2 0 1 1 3 1 6 6 8 7 5 4 4 5 2 3 0 2 - / 3 3 3 2 6 7 8 1 1 0 1 6 1 : : 3 7 6 7 9 7 2 1 1 3 . 4 3 4 5 5 2 2 3 0 1 3 / / 3 4 4 / 0 0 , / 1 . 1 2 / / 3 / / / 0 . , - - / 2 3 / 0 0 2 1 0 0 0 7 5 - ) / - 2 7 3 2 1 - 0 + / . / 3 . . . / . / , + 0 3 - , - 0 ( * , ) / . , / 0 ' + ) / , * ) , , ' - 1 , ) + 0 + - . 0 , , 0 , . + ' ) ' ( * / , , * ( + + - ) + ) ) ) , , . 0 + * ' * + ) # * ) * ( ' # ' ' ' ' % # 0 ' ( % % $ , * + + ( ( % & & ( % - % & ( * ) * ) # & & ' ( % ( ) - ) ' ( * ' + , ) ) ( ( % ( " % $ ) % % & $ * ( ' & # # % ) $ ( % ' $ ( % $ % * + - ) ) ( " # & $ % # $ ' ' ) ( % * * ( ) $ ( & " " % " $ & & % #     " 
+     % "      " ! ! $   ! "     
+  
+ 
+  
+ 
+ "     ! !  # $   
+ 
+ ! " !   !     
+ 
+       "  
+ !  
+ 
+  !   
+ 
+ 
+ 
+  
+    
+   
+ 
+    
+  
+                        
+ 
+     
+     
+  
+                      
+                                        
+  
+                                                            
+  
+   
+             
+ 
+  
+   
+   
+   
+ 
+ 
+  
+    
+ 
+     
+ 
+ 
+ 
+  
+ 
+        
+ 
+ 
+ 
+  
+ 
+    
+     
+ 
+ 
+ 
+  
+  
+ 
+  
+   
+ 
+ 
+ 
+ 
+   
+ 
+ 
+     
+ 
+      
+    
+   
+ 
+ " 
+ 
+ 
+  
+    !                                          
+                     
+                                  
+                                                                                                    
+ ! ( * ' ' / 0 - . . 4 4 2 1 1 0 4 7 7 7 9 : 8 : 9 5 : 5 5 8 = 7 5 5 3 8 ; ; 1 8 6 6 5 0 3 5 3 5 4 6 6 2 , - + 1 : 5 2 7 / 3 / / 1 3 1 1 3 2 2 4 / 8 7 5 / 0 0 1 4 9 3 3 2 6 3 0 5 1 - / 7 0 : 7 7 8 7 6 7 5 : 8 9 7 2 , 0 7 4 1 2 4 3 0 1 / / 1 2 5 0 2 ; < 7 : 6 1 1 1 0 8 9 2 2 0 6 3 1 4 4 9 4 1 / 5 2 3 2 7 2 / 2 . 6 / 3 6 . . - - - 1 2 + 2 0 4 0 1 4 2 / , 4 3 0 0 - 0 5 / . / 0 2 3 2 2 1 0 / , . . 3 - / ) . 3 + / 1 . , 3 4 0 0 / * - 0 - / + + / , , ( . 2 1 , + * + , , 4 0 / - , ) - / * , ' 0 + + ( ) ) . 0 - , , ) . + + , . * ( ) ) + ' . 4 0 * * 0 , ( & ) , + . ) % %   ( * ) $ % ) % $ ' * + - , ) + . ) ( ( ) + * ) ) + + * ( + / . , ) ( ) ( & ) ) $ & ( + ) / ( ' , % & ) , $ & & ( & # ( ) + * $ ' % % ) % , ( $ # # ( , + ) ( * . ' + ) ' ) ) ( * ) '   ! , , ( & % , ' ' % $ ' " # 
+ " " % # % # # #   # & ! % "   " ! ! $ " % "   ! # !  
+ 
+ 
+ ! 
+   " ! "  
+ ! " % # 
+ 
+     
+   % " % $ $ ! 
+ 
+   ! % ! 
+ ! ! 
+ 
+   %   ! "   
+  
+ 
+ 
+  
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+      
+ 
+    
+ 
+            
+    
+  
+       
+ 
+ 
+            
+     
+       
+            
+ 
+                
+         
+      
+ 
+   
+                 
+ 
+ 
+       
+      
+        
+               
+               
+ 
+    
+ 
+   
+    
+ 
+   
+    
+ 
+   
+ 
+        
+     
+ 
+ 
+ 
+ 
+     
+ 
+  
+  
+ 
+   
+ 
+ 
+ " 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+                                                                                                                                                                                                    ! ! " $ % % ) , . 0 / 2 0 , 2 2 2 4 5 4 3 5 9 9 8 7 9 ; : 4 7 : 8 5 2 3 0 6 ; > 6 2 5 7 9 2 1 7 6 5 7 2 9 0 1 2 4 5 1 / 8 5 0 . - 2 8 1 2 3 1 1 8 3 3 1 6 4 5 4 , / 2 6 1 2 2 0 - 0 7 4 2 3 9 4 5 4 2 4 2 0 0 3 7 6 5 : 4 . 8 ; 1 3 3 / 7 0 5 3 7 4 1 1 4 2 4 9 5 : : 7 5 9 8 7 : 5 2 / 4 7 2 5 9 8 0 2 3 7 2 . 4 1 1 / 1 - 0 3 2 0 . 0 0 , 0 4 , + . 4 8 : 0 - 0 / - 0 5 7 1 0 + 4 2 3 3 7 1 2 0 / / 1 - . - , / , - . / - + . / / 2 1 1 / 6 / 1 3 2 * - . + 1 / . ( , . 1 / / - + - 1 0 3 3 , ) + / * ' ) , , , , * - + ) + - + * ) ' - 1 . ) - ( & + - ' & , , ) + 0 - ' ' * + + + + # ' " ) % & + ( * * + $ ) * ) * ' ' ' + , - , ( ( ( , , * * & . / - * * ( & + + , - * + ) ' + ) ' * - ' ) ( ( & & ' ' ' ' ' , ) + & ( ' , , ' , 0 % % ) ) - * & ) + * ' ' ' ( & ' ( $ ( ' ' $ % ( # $ & ' ) $ % ( % ' % ! ' !    # $ & % $ & & & ' " " % # # ! " $   % # $ & ! ! 
+       " !   " 
+ "     
+   
+ ! 
+ ! "  !   ! % $ & " 
+     
+   " !     " 
+   ! ! $ " $ 
+ " " "  ! 
+ 
+   
+  
+ 
+   
+ 
+     
+                
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+               
+    
+ 
+        
+      
+          
+ 
+    
+ 
+    
+       
+ 
+               
+                  
+ 
+ 
+  
+     
+ 
+     
+ 
+  
+  
+                      
+ 
+   
+               
+ 
+ 
+   
+     
+ 
+ 
+ 
+  
+ 
+ 
+  
+       
+ 
+ 
+    
+ 
+ 
+  
+ 
+ 
+ 
+  
+ !  
+   
+ 
+ 
+  # " 
+ 
+ 
+   
+     
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   
+   
+ 
+  
+ 
+   !  
+ 
+   
+ 
+ 
+   
+ 
+                                                                                                                                                                                                
+  ! " # ! # ' * * - - 0 0 0 9 6 4 8 9 6 3 7 6 8 8 8 2 3 6 ; : 3 6 6 : 8 1 4 7 4 4 3 4 5 6 4 2 0 3 1 2 7 : 6 2 9 / 3 2 3 2 7 3 5 0 . 3 2 3 1 8 8 6 2 / , 1 4 . 2 4 2 5 3 1 4 4 2 - 2 1 : 9 ; 4 3 4 < 7 1 5 1 9 5 / 1 4 7 : 5 , 2 5 3 2 3 1 7 / 4 7 6 3 1 1 8 4 0 6 0 6 8 ; 7 8 6 8 3 4 0 . 0 2 7 3 3 7 3 5 4 5 0 + , 1 3 4 0 + . 2 1 2 / 0 . , 1 , - 5 . 3 4 6 0 1 + 0 - 1 1 1 0 + . , 3 5 4 3 2 1 1 1 * , / 6 2 / - , / - 3 / - / - * 0 - . 3 3 2 / / . - + / . . . , ( . + 4 2 - 0 . . 0 . 1 , . . . / - + - ) ( ( * , . . , * * + - , / - , ) ) - + , $ * + / + * ( , * ( % % % + + - ' ' $ ) . * * ( * * ) ( & ( . , ( ) , ' ) * * + - ) * - + ) - ' , ( ' ( $ ( % ) + , ) + * + ( ( . * * + * , ' ' ( % + ' ' & ) , ( # * , ) ) ' ) . ) % ) * % ( ( ' ( + ) + $ * * $ + $ * $ & + + % % % % & " & $ $ $ $ % " " ' ! !   % & % " $ & # # & $ ! " ' % $ " #   " ' !  ! 
+   ! 
+ 
+   ! $ ! # 
+  
+ 
+ " 
+ ! $ & &   $ # " ! ! ! # ! ! 
+   "  # " # $  ! 
+ # $ "      " ! # "     
+ 
+ 
+ 
+ 
+   ! 
+ 
+    
+       
+              
+ 
+    
+       
+     
+         
+ 
+                           
+   
+      
+ 
+   
+          
+  
+     
+        
+      
+       
+   
+ 
+      
+ 
+  
+  
+  
+              
+ 
+  
+   
+     
+              
+     
+                       
+   
+ 
+ 
+    
+  
+  
+   
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+ 
+  
+      
+ 
+    
+ 
+   
+ 
+    
+ 
+ 
+ 
+  
+   
+  
+  
+ 
+ 
+ 
+    
+                                     
+                                                                                                                                                           
+ 
+ 
+ $ ! "  # ' + ) , 1 1 1 2 6 7 4 5 5 : 9 8 4 8 4 1 5 1 6 8 4 8 6 4 5 3 4 5 1 2 9 4 6 8 ; 1 1 6 4 4 1 5 7 2 4 6 . 2 3 7 2 / 3 2 3 0 2 2 6 7 : 6 4 1 1 1 1 0 1 9 : 9 6 5 7 2 0 2 7 9 8 8 8 1 0 8 9 ; 7 7 0 5 6 5 2 5 4 6 5 0 / 4 9 1 8 4 5 6 4 7 6 1 1 + 3 - 4 9 3 / 6 5 2 8 4 1 / 3 2 2 . 0 9 6 7 3 7 4 3 0 3 . / 2 3 5 - * , 3 3 1 0 , + 1 / - / 8 2 5 3 2 0 - / , + 1 1 / 1 5 1 , 0 3 - . , 1 4 / , * 0 1 - 1 - , . 2 0 . 1 / + , 3 + * / . 1 1 4 / 0 0 1 + 0 - ' + / - 1 5 . . 0 - / - - , . * ) . 1 3 / 0 , * * ( & % ( * - , . ) + + , ( ) ) ) ( , ( , ) * , ( * ' % ' * ) , - . ' ' ) ' ' , , ' , ( ) & & * + + ( * / ( , * ( * - 0 * 0 * + * ' , * & ( ' * & ) ) ( ' ) , * ) ( / ) ) * - - - ( ( $ % ' + ) ) & $ & - + - * ) ' $ % ( + ( ( ' " # ( ( ) ' ) * * ( $ & + % ' ' * & % & $ % " # $ # ! " "   
+   #  ! $ # $ " % # % % ! % # ! ' ' & $ ' % #  # # !   "  ! 
+  
+    ! "  
+ " " $ #   " $ $   " & ! #     
+   # 
+  " "   &    $    
+ " # " $ #   ! $   
+ " & 
+  
+ 
+ 
+   
+ 
+ 
+   
+     
+ 
+  
+  
+    
+          
+                
+ 
+   
+      
+  
+     
+ 
+       
+    
+ 
+      
+ 
+  
+           
+      
+ 
+ 
+  
+ 
+ 
+    
+ 
+    
+ 
+   
+   
+                           
+                
+ 
+       
+  
+       
+     
+ 
+      
+                           
+ 
+       
+ 
+  
+  
+ 
+ # 
+ 
+ 
+  
+ 
+     
+ 
+  
+ 
+   
+ 
+ 
+  
+ 
+ 
+  
+  
+  
+      
+ 
+    
+ 
+ 
+      
+                                                 
+                                                
+                                                                                                
+     # ! " ' ) ) - - 4 1 . 2 4 3 2 9 7 8 4 5 7 : 6 ; 8 4 5 3 5 8 5 0 4 + 0 2 5 0 ; 9 7 6 3 3 0 / 4 4 5 3 8 7 6 3 / 2 6 5 5 4 3 . 0 0 - 3 2 4 5 3 2 4 7 1 5 2 4 7 ; 4 5 4 8 4 1 2 4 3 7 4 4 4 0 3 9 6 3 4 3 1 2 3 2 2 0 3 3 8 6 5 4 4 7 7 7 7 5 5 7 8 2 . 1 2 6 7 8 4 4 4 2 3 2 1 1 4 / 7 2 1 9 3 8 7 5 5 0 0 2 0 2 2 0 1 - / 0 5 / , 2 . . 2 1 0 - 4 - - 4 / - / 4 + 0 0 0 . - / 0 ) + 1 1 1 2 0 2 / - - 0 - . * 2 / 1 2 1 . 3 / - . 5 1 1 1 1 2 1 3 5 / 5 4 / 7 , - . 1 - 0 0 2 + . / 0 . , , ) + + , 3 1 . . / * ) ' , - + * * + + . / - - - ( ' ( + + . ' % ( ( ( & ( ( * ' ) , 0 - ' ( , , + ( + . . / . & & + , . , - / ) * ) * * ( + ) ) ) ( ' ( , ' * - * & ( ) ) ' + * * * + ) ( , ' - . - 0 . - + & , * , ( ' & ( ( ' ( ' * ( ' + ' - & % ( & % ) * ( ( * ( ( ) % ( ' # ' ) % & # # ( ( ) ( & & ( $ " $   $ #   $ " !  # $ # $ #    # # "   ! # & & " 
+ " # # ! $  $ ! 
+ 
+ 
+ 
+ ! ! #   ! ! $ # ! ! #   !  " !     !    # 
+ " "   ! % $ % " !      ! # " $ ! 
+        "    !    ! "   " ! 
+     
+ 
+  
+ 
+ 
+ 
+  
+ 
+   
+    
+    
+ 
+        
+       
+  
+ 
+ 
+  
+ 
+ 
+     
+     
+ 
+ 
+ 
+     
+ 
+           
+ 
+          
+ 
+  
+ 
+       
+ 
+         
+     
+ 
+  
+ 
+  
+    
+    
+ 
+   
+       
+ 
+ 
+          
+   
+         
+            
+    
+         
+       
+    
+                  
+ 
+           
+        !           
+ 
+ 
+   
+ 
+  
+  
+  
+     
+ 
+    
+  
+   
+ 
+ 
+      
+ 
+                                             
+                                               
+   
+ 
+                                                                                               
+ 
+ 
+ 
+ 
+ ! ! " & * ' & / 0 1 - 0 2 7 5 6 7 3 6 4 7 5 : 5 4 8 6 6 4 7 6 1 5 3 3 1 5 4 1 6 7 3 2 5 1 4 7 5 3 4 3 : 7 4 2 0 3 5 3 7 5 0 5 5 4 ; 0 2 1 0 5 5 7 1 5 / 2 3 4 3 2 0 7 : 7 3 3 5 3 0 2 7 6 3 8 6 4 3 2 7 5 3 1 6 5 2 2 3 5 4 3 1 8 9 5 3 8 7 9 8 2 / 2 / 0 : 3 4 1 3 8 4 . 2 3 0 / 0 2 / / 0 1 5 2 6 . . 3 1 3 7 1 3 2 1 2 2 2 / 3 4 4 , - 0 0 4 / - / 5 2 3 6 1 2 1 - 2 / 3 / + , . 4 0 / . 4 * * , + 1 0 0 2 . / . 1 3 , + , 0 2 - - 2 / 0 / 3 3 * 3 3 / + . , 1 1 . * + - , ( . 3 0 . * , ' . , / , ) / . + ( * + ) ( + ) , / 0 0 * , - * + , - ( * ' ( # & ' ( * ' * ) , , - * / + / - ( - , 2 - + + , , , ) , ) , * - , , , + & ( - , ) ) , ) , * * * * ( * , , * ' ) ( - , , - * . * - - , . ( + + ( * ( ) * ( ) * % + ' ' ( ) % ' , ) $ & % ' ' ( * * ) % ) ) ' % $ $ ' ( % ) # % . ) ( # # + ' ( ( # " # $ # " $ $    "   " & % ! " % $ " ' % ' $ " % ' $ ! " " 
+    " 
+ 
+  ! # ! " " $ % & !  # $    # " 
+ ! ! 
+ " 
+     ! !   "  $ # %   #   "   ! ! # ! 
+ 
+ 
+ !  ! 
+ " "   " # #    $ " ! 
+      
+    !  
+ 
+ 
+ 
+ 
+ ! 
+   
+  
+   
+   
+ 
+ 
+  
+  
+     
+  
+  
+ 
+ 
+ 
+ 
+ 
+   "        
+ 
+        
+  
+               
+    
+  
+       
+    
+   
+   
+     
+ 
+ 
+  
+         
+   
+   
+ " 
+ 
+  
+ 
+  
+ 
+ 
+ 
+     
+ 
+ 
+  
+     
+      
+   
+   
+            
+   
+           
+ 
+  
+  
+    
+     
+        
+       
+     
+ 
+ 
+      
+ 
+  
+         
+       
+ 
+ 
+ 
+  
+   
+    
+   
+ 
+ 
+        
+  
+                                                                                                                                                                                               
+ 
+ 
+ 
+   # " & & ( ( . / / - 0 0 1 2 2 1 5 ; 8 9 7 9 ; < 7 9 : : 7 6 9 8 9 6 5 8 : 8 3 1 6 4 7 9 5 6 5 0 0 2 ; : 3 5 3 9 5 8 2 8 2 3 6 6 5 1 5 2 0 3 2 5 4 0 5 5 5 7 : 1 8 6 < 9 < 8 4 6 5 ; 0 2 6 5 7 5 5 8 4 ; : 7 0 5 3 1 0 5 7 5 2 7 8 3 6 6 2 3 1 1 : 7 7 7 6 4 4 2 3 4 6 6 3 5 0 5 0 3 2 0 . 4 5 4 4 4 1 3 3 6 4 3 4 0 3 5 / . 1 4 / 2 / 2 0 1 2 2 0 1 3 3 4 4 1 2 1 2 0 1 5 4 0 - - 8 8 / 1 1 + * / 5 - . / 1 - + + 1 1 . * - . . 1 / . 1 0 0 , . / / / - 5 0 + - 2 0 1 1 - - ( 1 3 3 + . . 1 , / 5 3 . , / - * ) , - - - * ) . / . / + 1 * , + ( ) ' * - ) ' ( ) * ) ( ' - , , * ( . - 2 5 0 - - / / - / 3 0 ' ) . 0 . , - - ' * / * ) . - ( , . , ) - 0 . . ) ) / 0 ) ) + + . - / 1 , . * % , * - ) - * * - ) $ * ( ) + ) ) ) ) & * + ) + ( & & ' ' - * ' ( , ) - * ) ) ( ( # ) . & + & ' * & ) ( & % & % ' % # & ' ' % # $   % $ # $ % " & & $ $ !   " ! & $ % # " $ $ ! "   
+ !  
+     $ & % % # "   " # $ ( & ! " " # # $ #     
+ ! $   ! ! ! 
+ 
+ ! 
+   ! " 
+ 
+  ! ! #   " " 
+ 
+   " ! " # 
+ ! $   ! $ % " ! ! 
+    %     
+ 
+   # ! "  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+   
+ 
+ 
+    
+   
+  
+  
+   
+ 
+  
+ 
+  
+    
+ 
+ 
+   
+  
+   
+ 
+ 
+  
+ 
+ 
+ 
+    
+  " 
+ 
+ 
+   
+ 
+   
+ 
+ 
+ 
+ 
+    
+ 
+       
+ 
+ 
+   
+ 
+  
+ 
+ 
+ 
+    
+ 
+ 
+  
+ 
+  
+ 
+ !     
+  
+  
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+   
+ 
+   
+   
+    
+    
+  
+    
+ 
+   
+ 
+ 
+ 
+ 
+  
+  
+   
+   
+             
+               
+      
+ 
+ 
+    
+    
+  ! 
+    
+ 
+    
+   
+   
+ 
+ 
+ 
+     
+   
+ 
+    
+ 
+ 
+ 
+                               
+                                                                                                                                                                 
+ 
+    ! $ ( ' ( + / 1 4 0 / 7 7 3 6 8 4 9 < 9 = 8 : ; 9 < 8 5 7 6 ; < 7 5 4 9 6 7 0 6 2 2 9 < 7 2 0 2 0 2 4 5 5 3 5 3 3 5 0 5 6 5 6 1 5 4 4 7 4 4 7 6 / , 5 4 3 4 2 4 6 8 8 8 5 5 5 8 7 : 4 0 0 9 : 2 9 9 9 9 9 7 3 6 5 5 ; 5 4 2 2 5 : 2 3 3 4 / 1 3 7 6 ; 9 3 4 4 6 5 7 6 3 4 7 4 6 1 0 0 8 , 2 4 1 3 6 4 5 / 4 2 0 , 0 2 2 - 0 2 / 0 1 . 1 1 3 3 : 3 2 / 2 1 5 5 7 2 0 0 / 0 4 1 1 0 4 3 1 0 1 / + / 2 . , * . - . / 2 - * ( * 2 0 1 1 0 / - - 3 3 - . . + 1 0 - / 0 , . . , . , 3 4 - + * 0 1 , . 0 1 , . + - + & + 0 - / ( - / * , * + , , - - * , , ) - . ) - , + - + ) + ) 0 0 + , / / 0 * . + - ) * * , . ( + 0 . / . 2 + + , - - ) + * + ) , , ( + - 0 , ( ) * - , , * * , , ' * , % % ' - ' + / / + ' , & ) * ' & & ' + + * ' + - ( ' * , . ( ' $ & # & % & + ) ( & $ % ( + - * % $ # ' ( + * ) % " $ # # $ $ & ! " " % " " $ # " % ! $ ' # # ! $ $ ( & % # " " #   " 
+         
+ 
+  % %   "   $ ! $ ! " % & $ # " # " ! #   ' ! 
+ ! $  ! # $   ! " # ! #   ' !   $ " #  " $   
+   
+   " $ "   " # $ !   
+    
+ $ " # $        ! # ! "   
+ 
+  " ! 
+  
+ 
+ ! 
+ 
+    
+ " ! 
+ 
+  
+ 
+   ! 
+ 
+  
+   
+ 
+    
+ 
+       
+ 
+ 
+ 
+  
+  
+    
+  
+   
+ 
+ 
+  
+ 
+  
+ 
+ 
+     !      
+     
+   !  
+    
+ 
+  
+ 
+  #  
+  
+  
+    
+ 
+ 
+     
+ 
+  
+ 
+    
+     
+ 
+     
+ 
+     
+       
+ 
+  
+ 
+   
+    
+ 
+   
+  
+ 
+     
+ 
+    
+ 
+ 
+ 
+ 
+    
+                      
+   
+  
+ 
+    
+  
+  
+   
+     
+   
+ 
+ 
+ 
+ 
+   
+  
+ 
+  
+ ! 
+   
+  
+   
+   
+  
+  
+ 
+                    
+                                                      
+           
+                                                                                                           
+  
+ ! ! $ ) ' - * , 4 9 8 4 2 8 1 4 6 4 6 6 6 < 6 8 6 5 5 7 8 / 4 5 1 6 2 6 4 8 5 1 2 2 3 7 8 5 0 . 5 3 3 4 4 4 4 7 7 3 3 5 2 4 3 2 . 1 2 2 7 5 3 / 2 6 8 5 1 2 5 / 5 6 7 6 6 1 0 4 4 / 5 8 3 / 1 4 3 4 / 7 2 3 9 5 8 6 4 2 1 8 5 2 0 . / 7 3 7 3 3 4 2 9 7 6 : 8 4 0 5 6 5 7 1 5 3 0 . . 2 3 1 1 / 1 4 0 1 - / 2 3 4 3 1 3 4 . 6 7 - 6 1 0 , 2 4 1 0 / 2 . . 4 7 2 2 1 1 . 8 2 / . 0 3 3 / , 3 3 - 1 . ) + - / , 1 1 7 / ( , / / 2 / 1 0 . - + ( + - / 1 - + 4 5 0 * + 0 , . . , . 2 0 ' . , - , 2 , , - * - + ) ' , + 1 . ) , + ) * ) , ) + , ) ) - / - ( ( ( * 2 + * + - + , , ) - , ( / 1 * + . / ) , , * / . + ' ) ) + / 0 + - - ) * - 0 . - , ) ( ) ( * ( ' + * + ) * & * . ) * ( $ ) ' ( ( ' ) ) % ' ( ) ( * + ( $ % % , - $ ' ( * ' ( ' " # * ( & ( # # ' $ ) & ) % ) % ' ' ( * & % & ' ( % % & ' % % + % # " & ' % % & # $ & ' # " ' ! $ % " $ " ' " $ % & % ! " ! # ! !  
+   
+ 
+ 
+ 
+ 
+  #  !   ! % " ! %    " !     "  
+   #   ! ! "  $ # ! ! 
+    
+ % # !    " ! $      !   $  #  
+ 
+        " ' $ ! 
+  
+ ! 
+ ! # # " 
+  
+ 
+ 
+ 
+ ! $ '     
+  $    !   #  
+  
+ 
+ 
+ 
+ # 
+     !  
+  
+ 
+ 
+ 
+ 
+ 
+    ! 
+  
+ 
+ 
+ ! 
+ 
+ 
+     
+  
+ 
+  
+ 
+    
+ 
+  
+ ! 
+   
+ 
+   
+    
+    
+ 
+ 
+ ! 
+ 
+   
+  
+  
+       
+    
+  
+  
+     !    
+ 
+ 
+ 
+ 
+       
+  
+            
+ 
+   
+ 
+  
+ 
+ 
+ 
+ 
+   
+    
+ 
+   
+ 
+    
+   
+    
+ 
+ 
+              
+    
+      
+ 
+              
+ 
+   
+       ! 
+ 
+    
+ 
+ 
+  
+     
+ 
+         
+ 
+   
+   
+ 
+                                   
+                                                       
+   
+                                                                                                   
+ 
+   ! ! % ( + + , . 2 3 3 8 7 5 5 8 4 5 8 5 : < : 7 9 : 5 7 = 4 3 3 2 7 5 5 7 5 5 2 2 4 6 7 9 7 0 / 7 7 3 1 5 5 4 8 1 1 2 4 2 2 3 2 5 5 3 / 4 3 6 ; 6 6 8 : 7 3 : 6 6 : 4 4 5 8 9 7 5 2 6 9 2 / 0 5 4 5 - 5 8 3 6 : 9 3 0 2 : 3 3 6 4 3 4 3 3 0 0 . 6 8 : 4 6 6 6 5 2 4 3 7 6 5 4 2 1 1 2 5 7 4 8 2 / 2 + , - - / - 3 2 4 5 0 1 1 3 1 4 2 1 0 0 . - / 3 1 0 4 2 . , , 0 - / 0 / . + - + 1 5 / 0 0 - 0 , ' , . / - / 0 2 * & , + / 3 - 2 - / . + ) . . / 1 , . 1 0 0 . - - 1 . - 3 . - , * ( ) ( & - / - . * / 0 , * - * / , , . ' ' * & , + ) ( + ( * . ) ( ( - + / + ) , ' ) * . . / * * * - / 2 * 0 . + + . , ) / + , ) , 1 - , + - * 0 / - . 0 , ' + * * + . / + * / % ) ( ' , ) * % & ' * ' - * - + ( ' ( ' / ' + + * , % - 0 + ) ' ( ) ) " " $ % ( ) & & % ' $ * ' & % ( * ) , $ % # ( ) & " ) ! % ( # $ ( ' % " #   # & % !  !   !   #   ( $     ! !   % "     " ! & " " # # 
+  
+   
+  
+ 
+   ! 
+  
+ 
+ 
+ # "     ! "   " " !     ! ! # 
+ ! 
+  " $ ! 
+ " " 
+   ! # " # $ $  !    % ! 
+   
+ !  
+ 
+ 
+ ! !    !   
+ 
+  " # 
+   
+ 
+ 
+ $ ! ! # !       
+ 
+ ! " ! !  " 
+ 
+   
+ 
+ 
+ 
+   
+    
+  
+   
+ 
+ 
+ !  
+         " " 
+ 
+ " 
+ 
+  
+ 
+ 
+      
+   
+    
+ 
+    
+ 
+ " # !   
+  
+ 
+ 
+ 
+ 
+   
+  
+ 
+    
+   
+     
+ 
+ 
+   
+   
+  
+ 
+ 
+ 
+  
+  
+ 
+ 
+   
+ 
+     
+   
+  
+      
+ 
+ 
+     
+   
+ 
+ ! 
+ 
+ 
+ ! 
+  
+  
+ 
+    
+   
+ 
+  
+   
+ 
+    
+  
+ 
+      
+  
+ 
+ 
+                   
+         
+  
+         
+ 
+  
+    
+ 
+  
+ 
+ 
+  
+ 
+  
+           
+ 
+ 
+                                                   
+                            
+          
+    
+  
+ 
+                                                                                                
+ 
+ 
+   # & & ( ) + / 2 0 7 5 : 4 5 7 4 4 8 5 1 9 ; ; ? 9 : < < / 5 4 2 7 7 9 5 4 3 2 4 6 6 3 3 7 8 3 0 7 5 5 3 2 6 : 4 0 5 5 7 0 0 2 2 1 + * 1 6 6 5 3 5 4 4 4 7 4 4 3 7 5 8 7 < 8 > 8 / 4 5 : 2 0 2 2 / 1 2 2 0 0 3 5 6 3 2 4 3 5 8 5 3 2 9 5 3 3 4 0 5 8 3 1 5 / 1 8 5 6 8 5 8 7 4 6 1 6 9 : 6 5 4 - 0 - 0 . 1 2 3 3 0 2 - 0 , 0 1 4 5 0 / 4 3 . * - / 3 + 0 / - . ( , 5 . - 3 4 . ) , 0 / . , . / , ( ) 1 * * - / , / * & ) * / * + . 0 2 1 . 1 2 0 , / 3 0 . / 3 . , ( + - , . . / , / . ) 0 . + + / - * , - . - ) * 0 ) + - ( $ ' * ) * ( . - * ( 0 ) ) ) , , , * ( . , , + - / , . , - . . / . / - . * * - / 1 - 0 , . / , - + / ) - * + + 1 0 ( , , * ' ) / - 3 / ) $ & + * / , % % ) ) ( - ) . * , ( ) ) ' $ ( ) ( & * ' ) ' ( / / / ) $ ( * $ ( ( & ' $ $ ( * + ( % * & $ $ % $ " & ' % # % # ( ( # % " ( & " $ & % $ !      $ $ " % # % ' ( # $ % !     # " #   ( ! ! # & 
+ ! ! " # 
+ 
+ 
+  "   #  $ #   " # & # " ' ( #    ! #   
+   "  # " #   & $ 
+   
+ ! !   # $ $ # " "   " 
+ 
+ 
+ "     
+ 
+  #   # " # 
+    
+  ! # !  
+ 
+ ! # 
+    
+ ! "   " 
+ 
+  " % 
+ "   
+ 
+     "  !     
+ #  
+ 
+ 
+ 
+  
+ 
+    ! 
+   
+ 
+    
+   
+     
+ 
+    
+ 
+ 
+ 
+  
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+   
+   
+ 
+      
+ ! 
+   
+  
+         
+  
+        
+ 
+ 
+ 
+   
+  
+     
+   
+    
+ 
+     
+     
+ 
+  
+  
+ 
+    
+ 
+    
+   
+       
+ 
+   
+ 
+ 
+   
+  
+ 
+ 
+ 
+      
+  
+   
+ 
+    
+         
+ 
+    ! 
+  
+   
+        
+ 
+  
+   
+ 
+ 
+ 
+           
+ 
+  
+                                                          
+        
+                                                                                                                             
+  
+    ' % # ' . . * 0 - / 1 8 2 3 5 5 6 : 6 7 8 8 8 8 > 7 < : 4 7 5 8 7 8 7 6 4 8 2 3 7 8 3 9 6 7 3 2 3 3 5 8 7 7 : 2 8 9 8 3 0 3 4 3 1 . * / 1 7 5 2 1 6 5 7 7 . 3 5 7 4 0 6 4 7 8 2 1 6 5 0 / 5 6 1 8 5 1 1 3 7 7 2 7 6 4 5 4 6 7 5 4 3 ; : 8 3 - 3 7 5 3 1 , 0 7 5 8 6 7 1 7 7 9 7 3 4 3 3 7 4 8 - + 0 1 1 2 4 , . 0 + 2 2 * , 0 . / / 0 3 2 2 - / / 3 - + 0 + * * * / 5 , 0 3 2 . , . 2 2 - - 4 - ) 0 - . / / 2 3 1 . + - ) + - * , 2 8 0 2 0 , + / 2 0 , - / 4 / ) - + + 2 - / , / - . / 1 / + / / + 0 , + . 0 , * * , + - - , ) * * ( ) - - + + ) + , ' ) - - ) / 0 * - - , - - , / , - , - . 0 * - , / / 0 ) + / - + - - 1 2 , + * + + / . . + , , - ) ) ' - 1 , + ) & 0 + 0 / 0 , . & ' * - + # ' ' , , ( % % % & ( ( $ ' # & + + - ) ' ( $ $ # + * * % ' , , ) & $ & ( ( % & ! $ % # % % ( ' - ( ! $ ' % $ " $ $    " #  "   % ( # ' & ( & & # ! ! ! # & % # $ # " $ " "    
+ 
+   
+  # #    !   ! #   " & # # ! " ' " " "   
+     "   #  % & $ % # $ # # 
+ ! #   !     
+ ! !   #   
+ 
+ "        # # ! #  # ! # "   %   " !    ! "   
+ 
+ #     $ " " 
+   
+ #   "        ! 
+ "          
+   
+ 
+  
+ 
+   
+ 
+  
+  ! ! 
+  
+  
+ 
+    " !      
+ 
+  #  
+ 
+   
+  
+  
+ 
+   
+ 
+  
+    
+ 
+ 
+ 
+  
+ 
+   
+   
+ 
+ 
+  
+ 
+   
+ 
+  
+ 
+      
+  
+   
+ 
+        
+     
+    
+  
+     
+ 
+      
+   
+    
+  
+ 
+        
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+ 
+    
+ 
+  
+ 
+ 
+    
+   
+  
+   
+  
+  
+ 
+            
+  
+    
+  
+   
+   
+ 
+  
+ 
+  
+  
+ 
+ 
+ 
+  
+  
+    
+   
+  
+                                                                                                 
+                                                                                                 
+ 
+ ! 
+   ' & % ( 1 / . . 1 1 1 7 3 2 4 3 ; 8 ? ? 8 < : 6 < = ; 9 9 < 9 8 : 3 3 6 5 4 5 2 5 8 3 5 6 8 3 5 3 6 : > 8 9 9 9 5 7 8 / - / 5 4 1 9 6 6 6 4 9 8 1 8 9 5 3 0 9 7 5 6 7 8 6 : 7 : 4 7 9 4 / 9 : 8 8 3 2 3 5 5 4 2 7 : 9 7 5 6 8 5 ; 8 < = : 5 4 1 5 2 2 7 3 5 8 6 < 5 8 7 3 8 ; 7 : 6 0 2 1 0 7 4 4 0 . 4 5 8 3 - 0 . 4 2 . 3 7 6 6 5 4 / 3 2 / / 1 / / 0 0 . 1 2 , / / / 3 7 1 . . * , + + 0 2 2 . * ( / 1 , 2 3 / 1 0 . 0 , * * 2 , 9 4 1 / / 3 / 3 3 2 1 6 / - 1 4 / / 4 / / / / - - 3 0 0 1 . . 2 2 / * 2 7 2 / . / 1 1 0 / * ' - * * . - / * * ) / ) , - / + / 0 - - , 0 2 + 1 0 - / 1 0 0 / * + , 0 1 - + , + / + * ) / - ) , , , * 2 5 4 - 1 , * , + ( , . + , . ' , - + - / 1 + ( ( * - ) ) ( * . , ) * , ) * * ( ' ( % ( * ) * ( ' - ( ' * , * ( ' ( ) * - * ' & ' % % & ' ' ( ' ' + ( ) * & " " $ " % ' "    
+ # ( ( $ $ $ & % % & $ ( ' $ ' % ( & ' ( ( &  # " ! ! " # !  %  ! 
+      #    
+  
+ 
+ " $ # & ! ! !   $ #  ! # # %  '      % %  "   $ " # $   # 
+  $   ! ! $ !   " $ $ 
+ 
+   # (   
+ 
+ 
+ " " ! ! $ $ " " !      
+ 
+      % " 
+    !  
+ "   # # 
+ ! " 
+   !  
+ 
+ 
+ 
+ 
+  
+  
+  
+  
+ 
+  
+ 
+     !  
+ 
+  
+ !     
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+    
+ 
+ 
+ 
+ 
+      
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     
+ 
+ !   
+   
+     
+  
+  
+    
+ 
+ 
+   
+      
+ !  
+ 
+   
+        
+  
+ 
+  
+ 
+ 
+ 
+    
+  " 
+       
+        
+ 
+  ! 
+ 
+ 
+ 
+  
+ 
+   
+  
+ 
+   
+ 
+ 
+ 
+    
+  
+ 
+  
+  
+ 
+ 
+  
+ 
+ 
+    
+ 
+ 
+ 
+  
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ !        
+ " "                            
+                                                           
+           
+                                                                                                   
+ ! ! ! % ' + ( + , . / + + 0 2 0 3 4 8 4 8 > > 5 4 5 ; : : < 8 ; 9 ; 5 < 7 4 8 5 4 3 . 3 4 3 8 9 < 6 5 4 6 4 7 8 6 = 8 7 4 5 7 7 5 2 4 1 9 2 5 5 . 6 7 6 6 4 9 3 5 9 1 : 6 5 6 ; 9 ; 8 8 7 6 2 3 1 9 < 9 : ; 8 5 8 6 5 4 4 < 3 3 5 4 2 4 6 6 ; 2 9 8 3 3 7 5 8 6 ; @ 5 > 3 7 6 7 8 8 3 : 8 2 4 2 4 2 6 3 / 4 4 4 4 0 2 . 1 6 8 2 4 8 1 2 4 3 , , 2 2 2 3 2 3 0 . / - - / - 2 2 6 4 2 1 / 0 . . . * . 3 1 . , 2 8 1 6 3 4 5 5 / 5 - ) 0 4 . 8 6 3 4 5 / / / 3 5 1 4 - / / 3 4 4 / . 0 / . - + . 0 1 - , * / 4 0 - , 0 4 0 ) 1 5 + / - , + ) ) ' ) + * / . + * + * + & ) 0 3 . + + , / 1 / / + - / 6 2 / . , , + ) ( * ( . / - - . * , ) ) ' + , / , * ) , / , 0 0 + ) 0 + - - * - * ) - * + * ( ' ( ) ( ) ) ' + , ) % ( ( . + ) + , + ) & ( + ( % & * ) - + * ( ( ( ' ' , + , $ & " ' ( ) - ( ( , ( ( % ' . $ $ ' $ $ $ !   & $ " " " # & # ' * & ( & % % ) & ' % ! # $ ' ' # & & "   ! !   ! "    
+ !   # ! " ! ! !    " # & $ % # !   $ ! & # # ! ! &   ! ! % " " ! ! %  ! ! ! % 
+ ! # "  # $ ! ! ! ! $ !   
+ 
+ $ ' " 
+   
+     ! " " " " # !   "   
+      " ! ! $ # ! "   
+ 
+ $   !     ! 
+ 
+ 
+ !  
+ 
+   
+ 
+  
+ 
+ 
+ 
+ ! ! $   
+   
+ !     " 
+ 
+ 
+   ! 
+ 
+ 
+   
+   
+ 
+  
+    
+   
+ 
+ ! "  
+   "   
+ 
+     
+ 
+ 
+ 
+   
+ 
+   
+ 
+ 
+   !    "   
+   
+  
+   ! 
+ 
+   
+   
+ 
+ !    
+ 
+  
+  
+    
+ 
+ 
+   
+  
+ 
+ ! 
+ 
+ 
+    
+    
+    
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ! 
+  
+ 
+ 
+   
+   
+   
+   
+ 
+ 
+ 
+   
+ 
+ 
+ 
+      
+   
+  
+  
+    
+   
+  
+  
+  
+   
+  
+ 
+    
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+    
+ 
+ 
+ 
+   
+  ! %  
+ 
+  
+ 
+ 
+                                                                    
+    
+    
+                  
+                                                                                                 
+  
+ $ % # & + 0 , 2 / 0 2 1 2 / 4 7 9 8 3 : 6 ; 8 : > = = < ; : > < 4 7 9 3 8 4 1 1 3 8 8 7 6 7 : > 6 8 = 4 4 ; 6 8 8 6 5 8 4 6 5 5 2 7 5 0 7 9 / 0 5 3 5 6 : 4 5 6 5 7 2 5 6 : ? 9 6 7 8 7 5 5 8 : < 7 4 7 6 6 < 4 7 4 4 7 3 8 : 5 4 6 5 4 8 5 : 6 9 7 ; : 4 5 7 8 3 9 4 5 7 4 8 4 6 8 9 8 7 8 8 0 7 4 7 2 0 3 3 1 - 1 4 / 3 , 7 4 - - 3 3 - / 1 7 8 6 4 1 4 3 - 1 2 2 . 2 2 0 8 2 2 0 - 1 0 - 0 + 1 - - - , 1 0 . . 3 0 - 1 2 3 . 0 2 / 4 5 . 2 3 1 3 / 2 5 / / . 6 0 / 1 0 . * 0 2 , * 1 1 2 7 0 , , 0 1 2 + ) - 1 - * . / - * + / - ) ' + - % & * - / / 0 + . ' + 0 , + + , 2 + - . . + , 4 2 / . 6 1 + / + 1 / . , * - / 0 * ) . - - / + - , * . , - + 0 2 . * 0 + 0 - 0 / , + * * ) , + * ' * , * ( * 0 + + ( * ) / , ) , ( $ ( + + % ( & ) * ' + ( + ' % ' + + , * * ) % $ ! % ' ) ( ) * & % & % + ( + % % $   " % # # " #   & & # ! # ! & $ $ ' # ' % " " " " " " " $ ) % ( ( %   # " $   
+   " " # " $ " " ! " $ #  ! % ' $ $ 
+  $ $ " # # % ( $ % "     # #   
+ #   $   ! 
+ 
+ !      
+   ! # $ " !    #    $ #     ! ! 
+    ! !   $  
+ #   
+ " & ' " 
+ ! ! 
+  
+ ! % "   "       
+ !  
+    # 
+ 
+ 
+ 
+  
+   
+   
+ 
+ 
+ 
+  "      
+  
+  "     
+   
+ 
+  
+ " 
+ 
+  
+ 
+  
+ 
+   !  
+   
+ 
+ 
+  
+ " 
+ 
+  
+  ! 
+ 
+ #  
+ 
+     
+    
+ 
+ 
+    !     
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+  
+  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+        
+ 
+   
+    
+ 
+    
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+       
+     
+ 
+ 
+  
+ 
+  
+ 
+ 
+   
+  
+   
+ 
+ 
+ 
+  
+  
+ 
+  
+ 
+   
+              
+    
+    
+ 
+  
+  
+ 
+   
+ 
+   $ ! "    
+  
+                                                          
+              
+                      
+ 
+                                                                                                 
+  
+ # $   ' / 0 , 0 - 1 1 0 4 - * . 1 1 2 7 : @ 8 : 8 8 = : : < = : 2 2 6 6 . 4 7 : 8 ; 8 5 5 8 : < ; ; 8 5 1 7 6 3 3 5 8 6 0 6 4 / 7 8 4 4 ; 7 7 1 7 2 6 ; ; 5 9 6 5 2 6 9 8 ; : 5 3 : ; 7 3 4 8 9 : 8 4 6 5 6 6 0 2 0 1 0 4 7 7 7 3 5 6 2 2 5 7 4 5 8 8 5 6 9 6 5 4 8 8 7 1 2 2 4 7 4 3 7 5 6 0 1 1 3 5 . 0 1 4 . / . / / . ) / 0 1 2 4 4 2 0 / - 1 1 1 0 0 1 1 4 0 2 1 3 3 2 3 1 0 1 / 5 0 , , - 2 1 3 * - 3 . / 5 2 0 . 0 . . 3 2 3 3 3 4 2 1 / 3 3 4 3 8 / 1 - 2 / 3 2 1 0 1 1 3 3 1 7 5 5 1 , + 3 , + + * + . 0 , . - - 0 ) + / / ' . ) ) ( ) . , ( - / 1 - , . + . / , , , + * - - / 4 2 / 5 1 1 , + . 1 0 - 2 , , ) * 1 * - 3 1 0 . . 4 . , * . 0 , 2 1 - * 0 3 ) ) * , , 0 , , . ) - * $ ( ' + ) ( ( % ' ) , ) * + & ( & ( % % ' ' % ' ) * , * * ' ( % ' ) ' % ) & ( $ " ' # $ $ ' 0 ( ) $ % & % & $ # ) & % $ " " # $ ! " $ #   % " ! # ' $ & $ #     * ) $ ! # % $ ' $ $ $ % % ! " %   " #    " $ $ &     % ! ! % ' % ) & $ " " !       # " $ %  " ! % % $ " 
+     
+   !   ! # $   
+ ! # #      
+   " " # "   " " !    
+   '     $ 
+  $ ' "  !   
+   
+   ! ! 
+  # 
+ 
+   # !    # ! " 
+ 
+ 
+ 
+ 
+   
+     
+ 
+ ! 
+     
+   
+ 
+ " " 
+   
+     ! " 
+ 
+ 
+    
+ 
+ 
+ 
+   
+ 
+ 
+     
+     
+ 
+   
+  ! 
+ ! 
+ 
+ ! 
+  
+ ! 
+    
+ 
+   
+ 
+  
+ 
+ 
+  ! 
+ 
+ 
+ 
+ 
+       
+ 
+     
+ 
+  
+ 
+ 
+ 
+   
+ 
+ 
+  
+   
+   
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+     
+     
+ 
+  
+ 
+ 
+     
+  
+   
+  
+ 
+     
+           
+      
+ 
+         
+ 
+ 
+    
+ 
+  
+ 
+ 
+ 
+  ! 
+    
+ 
+ 
+   
+ 
+ 
+       
+ 
+  
+      
+                                                                              
+                 
+                                                                                               
+  
+ 
+ # ( ) $ ) , 0 0 . / . 2 / 0 / 2 0 1 8 9 5 ? 8 9 ? 9 : < ; 6 9 : : 9 8 3 1 5 2 9 = > 7 9 7 : = 5 7 8 0 4 4 4 6 4 6 5 = 7 4 / 4 2 7 7 7 7 6 9 5 / 1 1 8 : 2 5 ; 6 5 4 3 7 8 7 3 8 1 1 3 4 7 8 5 7 6 4 1 3 1 - 4 9 7 7 0 3 < ; 8 6 : 7 9 1 , 3 9 1 6 6 7 6 6 = ; 9 2 4 5 5 1 / 3 / 4 6 3 2 1 4 1 2 5 4 5 3 / / 8 4 1 3 4 5 / 0 1 1 / 4 2 3 1 2 , 2 2 0 3 2 2 / 1 : 7 7 8 2 2 . * 1 / 2 . 4 1 - / 1 . 3 2 . 0 2 0 / 3 7 - . 0 . 0 2 4 1 2 4 6 4 2 / 1 2 2 / : 1 1 , 0 0 1 6 - + 0 0 1 . 0 4 7 4 / . - 2 . / , , - - 0 . 0 . ) + - , 0 2 ) ) ) - + * , ( / - , + , 0 . . , ) . / . + . . / 0 1 - 3 1 2 / + , / , - * + ' . - - + . , . , , , / - - , . / . + 1 3 , + * / - & 0 1 + , * % , ( ' * ( ' % - ' & ) & ) ' ( + ) ) * * ( ) ' ( % % ( ' ' ( * ) ) * & # $ & & " % $ ' " $ ( % " % ) + * & ) ) $ & * # & * % % % $ $ $ ' " " 
+  " ' ( (   $ $ ' & % ! $ * ' ( ' ' $ ! " " 
+   " " ) ( % $ & %   
+   !   # ! !  % % & ' & * $ %  $ ! " #   # ! #   " " # # "     
+ ! " 
+ # ! & % ! ! " " "   
+  ! 
+  
+   "  ! ! 
+ !  # 
+ # " $ 
+   ! 
+   " # 
+ # # $ % # ! 
+    
+ 
+   
+ 
+   
+ 
+   !  " ' ! # " 
+ 
+ 
+     
+ 
+    #  
+ 
+ 
+ 
+ 
+ 
+ ! ! ! 
+  
+ 
+  
+    
+ ! !    
+ 
+ 
+   
+  
+ 
+ 
+   
+ 
+  
+   
+ 
+    
+ 
+  
+  !    
+  
+  
+ 
+ 
+  
+ 
+ 
+ 
+  
+    
+    
+  
+   
+  
+ 
+  
+      
+   
+  
+   
+  
+   
+ 
+ 
+  
+ 
+     
+  
+ 
+ 
+ 
+ 
+      
+ 
+  
+ 
+ ! 
+ 
+    !  
+ 
+  
+      
+ 
+ 
+      
+ 
+  
+ 
+ 
+   
+ 
+     
+ 
+ 
+ 
+  
+    
+    
+  
+ 
+ 
+  
+  
+    
+ 
+  
+  
+ 
+   
+  
+  
+ 
+      
+      
+ 
+                                                      
+         
+   
+        
+  
+               
+                                                                                                      
+   " $ % & / - 0 0 + - * 2 / , 0 4 5 6 7 : : 8 9 C A 6 9 : < 9 9 ? A 8 8 6 ; 5 ; > > = 9 8 9 9 = : : ; 4 8 7 8 4 / 9 9 ; < 6 1 2 8 < 7 9 5 8 9 : 5 4 2 : 9 1 5 6 6 ; < 6 8 ; 7 7 9 4 ; 3 0 3 : < 8 3 7 6 0 1 9 ; 9 9 9 1 6 6 8 > 7 8 : 5 4 - 2 9 1 3 3 5 4 7 8 < 5 6 7 5 4 4 / 1 5 7 8 8 7 2 1 - 7 2 6 7 1 2 2 3 2 , 5 ; 4 4 1 / 6 0 1 0 + 4 2 1 5 . / 2 . / - , 7 4 1 2 1 3 / 1 . + 0 1 0 2 / 0 0 1 0 / / , 1 / / 0 2 - ) - , / 6 4 1 . 3 0 / 0 / , 1 / 1 8 0 1 3 , / 0 * , - 2 . 2 1 * 1 0 5 3 4 2 / 2 / . 1 / 4 1 - - + - / ) ) - / 0 , . - 0 / 0 - * , 1 2 0 1 / . - - , + 0 + / , . 4 1 0 0 2 . / * . 0 , , + ) ( , 0 0 . 0 - / , / / 1 5 - / - , 0 * 2 0 . 0 . 0 ) ) ( + + , + , , % ' * + ' ' & + ' * ) & ) ' ' % , + * & ( , $ % ( ) - / ) * # $ $ $ $ & * ( % ' & ( & & ( $ $ ' $ $ ' $ ' * ' ' * # % ) ' ) ' ! #  !   " # $ ! $ %    ' ' % ' # # $ " ( ( ) & ) % " # ! & % $ & ( #   & % !    
+ "   $ " " ! ! ! ( $ ( " & % # " ) % % % % " #   "   ' # !    ! #    # ! !   #   $ $ $ ! % ' !  " $ #  !     #     ! " " 
+ ! ' $ 
+  " ! # ! " " #    
+ 
+   % & "  " 
+ ! !   ! 
+  
+ ! $ % ! !      
+ 
+ 
+ 
+ 
+ 
+    ! $     
+ 
+   " 
+ 
+ ! ! 
+ 
+ 
+      ! # ! 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+         
+ 
+ 
+ 
+ 
+   ! 
+   
+   
+ 
+ ! " 
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+  
+ 
+ 
+ 
+     
+   
+ 
+     
+ 
+  
+ 
+      
+ 
+ 
+   
+  
+ 
+    
+ 
+  
+ 
+   
+ 
+     
+       
+ 
+   "   
+ 
+       
+ 
+      
+   
+   
+ 
+  
+ 
+ 
+ 
+    
+   
+ 
+   
+  
+        
+ ! 
+ 
+ 
+ 
+   
+      
+    
+ 
+ 
+      
+ # 
+    
+    
+ 
+ 
+     
+                                                                                               
+                                                                                                
+ 
+ 
+   
+ " $ / * * * . . 1 . , 1 / 4 7 9 5 9 8 < ; = 9 8 = > 7 2 3 7 > = 9 5 8 : = ? : < 5 9 ; < < < 7 A 7 8 : 8 9 3 7 8 8 3 7 7 6 ; 9 7 8 6 8 9 ; 4 8 7 ; : 2 4 5 7 5 8 4 3 7 9 4 3 8 < 9 3 0 8 9 8 9 8 9 5 / 7 : = 9 ? 5 2 3 2 : 8 8 8 6 6 : . 4 : ; 7 3 8 5 4 7 7 4 9 8 3 4 5 5 9 3 7 : 4 - - / 2 4 5 6 0 3 2 1 2 5 6 7 3 2 2 2 4 2 + + , , 3 , 1 . 5 . . 1 . 0 1 0 3 1 / / 2 5 , * . 0 5 4 . + , . . + 1 - . * , . 0 ( + - / 2 3 4 / - 1 1 4 - 2 1 - / 1 2 / . 2 - . + + * / 2 2 1 ) 0 - - 3 2 / - 1 1 2 8 / ) , - + + ) . . 0 , + , 3 1 0 . 0 / / . - 1 2 0 - + / - + + , 0 0 . / / 1 0 / 3 / 1 . / , 0 0 - - 0 , - / - 1 / . . . . - / 0 1 , 2 . , * + 4 / ) 0 1 / - * ) . - * + ( . ' ' * , ) + % , * + . ( - , ) & ( ( $ % , * & ) * / * ) - ) ' % % * % + + ) ' & ' ' % ' * " " $ ) % ( ) % ' ( # , & % & ' % " " #   " " ) & $ % # ! # $ % ' # ) ! ! ! " % # $ * ) $ % " 
+ $ ' $ " $ " ! $ # " $     " % # !   # & & ) ( " # # # $ $ & ( $ % % "  
+   " $ !   
+   ! " 
+ $     "   & # " !   $ $   " " " ! " 
+ ! # %   %     
+ 
+   
+ 
+ $ $   "   #   !   
+ " ! $ # ! ! 
+ 
+ ! 
+ 
+ !     
+ 
+ 
+ ! !  
+   
+         
+ "      
+  
+ 
+ " 
+ 
+  
+  
+   
+       
+ 
+ 
+ 
+ 
+ 
+  
+ ! 
+ 
+ 
+ 
+  ! 
+  
+  
+  
+ 
+ "       
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ !   
+ 
+   
+       
+ 
+ 
+ 
+   
+ 
+ 
+ 
+   
+  
+   
+  
+ # !   
+       
+  
+ 
+ 
+     
+ 
+   
+    
+  
+  
+  
+     
+ 
+     
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+  
+  
+  
+ 
+ 
+   
+    
+    
+ 
+ 
+ 
+  
+ 
+ 
+   
+ 
+ 
+  
+ 
+  
+ 
+ 
+     
+     
+ 
+  
+ 
+  
+                          
+                                                               
+        
+                                                                                                   
+   "   ! " ' , * ( + / 0 3 4 2 0 0 3 < 3 8 8 : < 8 < 8 6 < 6 4 5 ; ; 8 ; 8 ; 5 7 9 ? ; ; 4 8 < A < 8 < 4 4 6 8 = 9 4 4 3 8 8 7 9 9 ; 6 5 7 4 : 8 7 6 8 3 : : 3 1 4 8 1 - 3 3 9 7 4 8 9 8 4 6 4 7 8 3 9 8 6 0 2 9 ; 9 6 6 7 5 6 0 4 5 6 6 7 8 2 3 8 6 7 6 4 5 9 8 7 5 4 8 5 8 5 5 0 2 6 0 3 - . - 5 ; 5 4 4 3 1 3 6 1 4 3 2 1 2 2 4 3 2 0 3 1 2 - - 4 6 3 2 / / 2 2 . 3 7 2 3 0 1 0 ' * 1 1 0 / ) , - - . , 2 + ) ) , ) , , ) - 5 3 2 . ; : 1 2 2 5 2 1 0 1 3 4 - / - 3 1 / * 0 5 / + , 3 0 , 1 2 + 0 1 0 2 / - 2 1 1 1 * * 0 + / - , + 0 / * ) . 3 2 , - 5 0 , * ( + ( % * , 0 1 . - 0 7 0 2 4 1 - . 0 - . / / - / 1 - / . , - - . , 5 3 1 - , + 0 . * + * , - + - 0 0 , ( . , / , , + + ' & + ) , ) ( & ( + - - . - * ( & ' & ( % , * , ) - * - , * " ( ' ( - * % ' + ' & $ ) ' ' $ ' ' ) ( ) ) $ % " ( - ) ! % ( $   $     " ! # $ $ & & # ! % $ % " ) # " % # # $ $ ( $ " $ #  " # "   " 
+  $ " !   
+  " $ " ( $ $ ( # % # $ " $ " # # % % % ! !   $ ! ! % $ # !   ! $ ! 
+  "    #  
+ " # ! $ !   "  #  ! #    
+ " ! " ) "        " ! & 
+     !   
+ 
+ ! 
+ 
+   ! #   
+ 
+  $  
+    
+ 
+ 
+ " 
+ 
+ 
+ 
+ ! 
+  
+  
+ 
+  
+     
+ 
+ 
+  
+  
+ 
+  
+  
+ 
+  
+  
+   
+    
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+      
+   
+ 
+ 
+ 
+  
+ 
+ " 
+    
+  
+ 
+   
+     
+  
+ 
+ 
+ 
+  
+ 
+    
+ 
+ 
+ 
+ 
+  
+    
+ 
+  
+  
+ 
+ 
+ 
+   
+ ! 
+   
+ 
+ 
+ 
+  
+   
+ 
+  
+ 
+ 
+ 
+ 
+   !   
+ 
+ 
+ 
+ 
+   ! ! 
+  
+       
+  
+       
+ 
+   
+ ! 
+ 
+ 
+ 
+ 
+    
+  
+ 
+  
+ 
+   
+ 
+       
+   
+     
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+ 
+   
+ 
+     
+ 
+    
+    
+ 
+  
+    
+ 
+  
+ 
+                                                                                                      
+                                                                                          
+ 
+   # ! ! # % ) ( # , 1 0 3 0 2 . 2 4 : 7 7 8 4 8 ; 7 : 7 4 9 0 6 9 4 5 A C : 6 4 8 : ; B 7 < ; : ; 7 9 1 4 9 ; 9 9 3 5 4 9 < 6 8 5 3 1 8 5 4 5 8 3 7 5 7 8 8 4 7 9 ; 6 1 4 8 4 8 8 9 8 7 4 2 2 9 9 8 ; 7 3 8 3 6 5 9 : 9 9 : 1 5 5 4 7 5 9 6 3 5 = < : - 2 6 : 5 5 / 0 7 7 8 : 7 3 7 9 2 9 3 / 3 4 3 0 5 3 / 4 4 0 1 1 4 8 . 1 1 2 0 3 1 4 6 1 , 1 0 0 3 4 - - / / 0 4 2 - 0 0 . , * , . 3 * + * + / 0 . % ( ( ' ) * , 1 - . 2 4 5 2 1 7 7 0 5 2 7 8 8 2 1 3 4 0 4 3 3 5 4 3 / 5 4 - - - . 2 2 . - 2 4 4 . . 2 5 4 , - * / 3 . / - 1 , / - - 2 1 1 * . . - , 0 - ) 0 ( ) , - - . - 1 5 4 / - 0 , / / 0 - / 0 1 . . 2 4 / 0 / + * - - 0 3 5 , ( + - / - + 0 * * * . ( * . - ) + - - 0 , . 1 * ) ( ( + ' ) , * . / - + * + ( + ' ) ( ' + ( % & ' + ( & ( & ( ' ) ' & + + & % $ ' $ % % # & * % $ + ) & $ # ) & ' ! ' " " %   % ' 
+ ! # $ ' ( + & # " $ $ ' $ ) $ & % $ & & # " $ # ! 
+   # " $  ! $ " !   ! 
+  ! ' " " " %   $ & $ " " " "  $ $ #   ! " ! "  $ # $   "  ! ( " $ $ $ $ $      $ % "   ! " "     " # 
+ 
+  & 
+ 
+   
+ " " ! " ' ! ! #   #           # $ 
+ "    # 
+ 
+    
+    
+ 
+  " ! ! 
+ 
+  
+   
+ 
+ 
+  
+ 
+  ! 
+    
+ 
+  
+  
+     
+ 
+ 
+ 
+ " 
+ 
+      
+ 
+ 
+  
+  
+  
+ 
+  
+ 
+ 
+ 
+        
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+ 
+     
+ 
+    
+ 
+   !     
+  
+ 
+ 
+ 
+ 
+ 
+ 
+    
+    
+ 
+    
+ 
+  
+ 
+   
+ 
+ 
+ 
+ 
+  
+ 
+  
+   
+ 
+ 
+ 
+ !        !  
+     
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+  
+ 
+  
+ 
+ 
+   
+ 
+  
+    
+  
+  
+ 
+ 
+ 
+ 
+   
+   
+ " 
+    !   
+  
+      
+ 
+ 
+ 
+ ! 
+ 
+  
+   
+  
+ # 
+ 
+  
+ 
+    
+ ! 
+ 
+ 
+ 
+ 
+ 
+ 
+                                                                                                                                                                                                  
+ 
+  " $ " " % + ) , / 3 3 3 1 0 6 9 5 6 6 9 < 8 9 B 7 9 5 9 7 4 6 7 1 5 8 8 9 6 7 8 7 8 9 8 7 4 6 = : 8 6 5 ; ? ; 3 6 9 ; 8 4 7 5 3 0 5 5 3 5 5 5 : 6 8 8 6 0 2 8 6 2 6 0 5 5 4 6 6 4 9 7 : 6 : 7 9 4 4 9 2 3 4 8 < = 8 : 5 9 6 4 7 5 3 0 3 3 4 6 8 : 7 6 ; : 2 0 4 / 5 5 7 9 < 5 1 4 4 2 5 5 1 1 3 2 2 9 1 1 1 2 / . . 0 4 3 . * / 2 1 + 0 . + . - / 2 / 2 * . / 1 0 0 0 , 1 2 / - / - * / 0 - + ( ( + * , , , - , * + , 2 3 5 8 . 0 2 0 3 3 0 . 4 6 6 3 4 1 4 . 3 4 2 6 1 0 1 2 8 1 / 0 2 3 4 / 2 1 2 . - / 0 / 0 1 - - / 2 * 1 1 , * ) 2 / / / 2 + - - 0 * . / 0 - ' ) ) ) , 2 + 6 5 0 / , 2 / , - + , . 0 - 2 - . 4 1 - 1 . / 0 / 3 5 3 - ) - * / ) * / * - . * - - * - + ' * ) ) + . / . ( + ( - ' ' ( ' * + * ' ( + * ( ) * / - ' ' * ) / , ) ' " # # ' ' $ ( % ( ' % $ ) ' # & ) + $ % ' + ) & * # $ * * & ' #   ! ' ' & "   #  $ $ ' % ' $ $ ' $ & " ( & $ $ $ " ! % & % " # " ( % & " # " "  !   
+ ! $ 
+ #    # ! # " ! #  ! ! % %   
+   "   # # & ! 
+ " "  ! 
+   " $ #  ! # " ! # #  
+ # ! # % ! $ ! 
+ 
+ !   ! " 
+  # # $ ! ! !   " 
+ 
+ ! # " " ! ! ! $   ! 
+ 
+ ! #  ! 
+  
+        # ! % 
+ "  
+   
+   
+  
+ 
+ 
+      
+ 
+ 
+ 
+  
+ " "  
+  
+ 
+ 
+   !  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ! # ! 
+ 
+ ! 
+ 
+  " 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ " "  
+   
+ 
+      
+ 
+   
+ 
+  
+ 
+ 
+ 
+      
+    
+ 
+ 
+   
+  
+ 
+ ! 
+   
+ 
+ 
+   
+   
+ 
+  ! %   
+ 
+ ! 
+    ! " ! 
+ 
+ 
+ 
+   
+    
+  
+  
+ 
+ ! 
+ 
+  
+ !   
+ 
+ 
+ 
+          
+  
+ 
+ 
+ 
+      
+ 
+ !  
+  
+ 
+ 
+  
+  
+  
+      
+ 
+  
+ 
+  
+  !  
+ ! 
+  
+ 
+ 
+    
+ 
+ 
+ 
+  
+  
+   
+    
+  # 
+ 
+ 
+ 
+                                                                                                                                                                                             
+   
+    $ ( % - ) 1 / 5 5 1 4 9 8 7 5 8 ; = ? : 8 > 8 5 7 : 7 6 ; 6 3 < ; : 9 4 < ? < @ 7 7 1 3 2 7 ; > 6 6 @ = 4 8 7 < 8 5 0 7 3 : 8 6 8 9 7 4 7 : 7 8 8 8 5 2 2 2 3 6 6 6 5 5 8 : 7 6 ; 9 3 4 5 1 4 7 6 8 3 5 3 6 8 < 8 3 5 8 4 : 2 4 1 5 7 5 8 7 4 8 5 ; 6 8 5 5 3 7 7 9 9 3 8 4 5 3 0 4 4 2 1 5 7 3 3 5 1 . / 0 4 . 1 3 2 . / / + , 2 . / * . 0 2 0 1 2 - , , . / . + / 2 4 / - ' , * * 1 - + + ) ) 0 1 / / . - , + / 2 2 2 2 + 3 : 6 3 5 0 0 1 8 5 3 3 1 6 0 3 / 7 8 3 0 6 1 3 / 2 2 3 5 1 , 3 1 3 - / 5 / 0 - - * 0 3 / . 4 0 - , / 0 , / 1 + 2 0 / 3 . , + 2 0 + 0 / / / . 6 6 4 0 - , . 4 - . 2 . / 0 / , . 1 2 3 2 1 0 / 0 1 5 / / - + 0 + + ) 2 . 1 / . 0 , / + / - * / * * 0 , ) / ) - + . , - , ' ) + % ' ' * * * / * , ) + ) ) + ) . ) $ # ' ) $ * & $ $ % " & % & & $ ) ' ( + & & ( ' * ) $ $ & * ' $ % & " % & % !   " ! ! & " # " % ' $ % %  " $ ! ' "  "  ! ! " ) $ ( & & % ' ! # ' $   
+ 
+   !   % % % ' $ $ ' ! "     & #  
+  $    " " $ # "  ! " 
+ ! % $ !   # #   $ !   
+     $ $ #   %   
+ 
+ # ! #  
+   # $ # ! ! 
+ 
+ 
+ 
+   " %    ! #   ! % !   
+ 
+ 
+ !    
+ 
+ " 
+   " #  
+ 
+ 
+   
+ 
+ 
+ 
+     
+   
+ 
+   "   
+ 
+ 
+ 
+    
+  ! #  
+ 
+   
+ 
+ 
+ 
+ 
+ ! 
+   
+ 
+ 
+ "   " #   
+ 
+ 
+    
+ 
+ 
+  
+  
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+  
+ 
+  
+         ! 
+  
+  
+ 
+ !  
+  
+ 
+  
+  
+ 
+ 
+ 
+    
+ 
+ 
+  
+ ! 
+  
+ # 
+ 
+ 
+  
+ 
+ 
+ !   !   "      
+   
+     "  
+        
+ ! 
+   
+  
+ 
+ 
+  
+ 
+      
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+   
+ 
+ 
+  
+ 
+ 
+ ! 
+ 
+     
+ 
+    
+  
+ 
+ 
+   
+  
+   
+ 
+  
+  
+ 
+     ! 
+ 
+ 
+ 
+ " !                                                                                                                                                                                                  
+ 
+   #   ! ! $ & . , - 0 5 2 3 5 : 5 4 7 3 6 9 > 9 ; : 5 0 8 : 9 7 1 6 ; = = : 4 1 ; 9 8 3 2 6 4 5 : > : 8 4 7 6 3 : 6 9 6 4 7 : 9 @ < < 8 : 5 6 7 8 6 6 5 5 7 4 4 3 6 8 : 7 8 7 9 > 6 7 : 8 8 1 4 3 8 6 9 7 5 9 2 4 2 5 9 4 5 : 4 3 8 8 4 8 9 8 : 3 4 5 4 ; 8 5 = 8 : 6 5 5 7 6 7 1 5 6 6 4 0 3 7 3 4 2 1 3 . 0 0 2 4 ) 2 . ; 5 5 , * , 2 / 1 / + 1 / 2 0 0 2 4 - / - + 0 + , + * + ( . * , , + 0 . ( * - 4 4 / * - - - + - 2 1 1 . ; 9 4 3 6 - - 1 5 2 7 8 4 0 1 4 2 1 4 0 - 3 2 0 0 / . 2 0 2 3 2 1 , , . 5 - + . , / 0 3 + 0 / 3 . - 1 1 0 - - , 1 / . 2 - / / 5 - + 0 / - 3 . 2 / - 1 / . - 1 5 3 1 / . 2 - + . 0 0 . 2 / , . * + . + 1 - , / 3 . , 1 / - / 1 1 , + , ' ) * 1 / . ) ' ( ( ' ) - + - / / , , + * ' & % ) % ) ) , ' ) ( - ( ' + - ' ( $ $ ' $ ' $ $ " ! ! % $ $ % % ( & & % % ' % & # ! ! % $ $ $ " % ' " # 
+ ! "  ! # ) ' % ' & $ # " ! ! " ! " # # ! # " # "  & $ ) % ' $ % & ' ) ) " 
+   
+ ! & $ ' $ ' # $ % # ! ! !   " ! 
+  " # # %   ' !  $ " !   ! # # # " # "  " %   
+ # "   ! ! # # $ ! $ " $ % ' "   ! !    
+   
+    
+  "         
+    
+ 
+   
+ 
+  
+ " 
+ " " 
+ 
+ 
+ 
+    $   " ! 
+ !   
+        !   
+  
+   
+  
+   
+   
+ 
+ 
+       
+ # 
+ 
+  
+ 
+  
+ ! " ! 
+ 
+ # " !   #   
+  
+ 
+ 
+ 
+ 
+     
+  
+ "   
+ 
+ "    
+   
+ 
+ 
+ 
+ 
+ 
+ 
+     
+ 
+ 
+  
+ 
+   
+ 
+ 
+        
+ 
+      
+  
+ !  
+    
+  
+    
+ 
+ # !  
+   
+ 
+   
+  
+    
+   
+ 
+  ! 
+      
+ 
+  
+ 
+  
+  
+   
+ 
+ 
+ 
+     
+ " 
+ 
+ 
+ 
+   
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+ 
+        
+ 
+ 
+ 
+ 
+ 
+      
+    ! 
+ 
+ 
+  
+ 
+  
+   
+  
+  
+   
+  
+                                                                                                                                                                                              
+     " #   $ ( ) & , . 0 0 4 4 0 7 6 : 1 2 7 : : 7 5 9 < 3 . ; B < ; 8 9 : 9 : ; 8 4 7 < : 6 7 ; @ = = < ; : ; 9 < > @ : ; > = < @ @ < : < 6 ; 8 7 8 9 : 7 5 ; 6 5 5 8 = 9 7 8 3 8 = @ = : : ; 6 5 6 7 6 3 5 ; 7 6 : 4 5 8 8 5 9 8 3 6 = : 5 6 ; : > > ; 8 : 8 : 5 6 9 8 2 2 7 4 4 7 7 6 5 4 4 8 8 ; 9 4 1 8 0 3 / 2 6 3 . 0 0 / 3 2 . 0 - / . ) + , * 1 1 * / 1 2 3 . - 0 0 1 . - * * + - * , , 0 1 . , / 4 1 4 1 3 / / 3 . 0 - 0 5 3 2 3 2 3 2 3 7 2 2 / 4 1 5 3 5 5 . 2 2 2 3 5 2 4 0 2 1 4 4 1 - 2 . . 2 , 4 / 0 2 + , - 1 2 3 3 0 1 7 3 1 4 1 , 3 5 0 6 8 1 6 3 2 2 . - 3 , + 6 4 2 0 4 8 7 ) - 2 . 0 - 0 . + 0 1 4 , * 2 3 / 1 3 . - * . 0 2 0 0 0 + - , ( / 0 0 0 1 / + - . 1 - * + ) + , $ - - / + , - . + - - + * ( * ' ' + 0 + ' , , * + + . % ( ' % % % ' % ' ( ( & ' $ % ' ' & % $ " ' & ( $ & #     # $ % $ # $ " #   # % "   " % , ( % % $ & $ # * ) %   % % & % ! $ ) ( ' * *   & ' & ) $ ( ' $ " # " $ ) & % # ! & & ) * & $ $ # % $ $ % # # # % " & ! ! & # # # & $ $ & ! ! " " " # % % ! " & # # ' % ' % % # $ $ % ! " ! ! 
+ ! " ! ! !   " # ! $ # "    # 
+       "    
+ 
+ "   # #   
+  "  
+      $ #  "  
+   
+ ! 
+ 
+   
+ 
+ ! 
+  !  
+ 
+  
+ 
+  
+ $   
+  
+ !      
+ 
+ 
+ !     !   "     
+ # 
+ 
+  
+ 
+  
+      #  
+ 
+ ! !   
+   
+ $ 
+ 
+  
+  
+ "   
+ 
+ #  
+ 
+ 
+   
+ 
+  
+    
+   
+ 
+ 
+  
+ " !  
+   " " #   
+  
+      
+     
+ " #  ! 
+  
+  
+  
+ 
+   
+ 
+ ! 
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+   
+   ! ! 
+    
+ 
+   !   "  
+  ! ! 
+  
+ 
+ 
+   ! 
+     
+  
+ 
+ 
+ 
+ 
+ 
+  
+ ! 
+    !  !   
+      
+ #           ! !  
+     
+                                                                                                                                                                                              
+ 
+   ! " # ( ( ' ) + / 1 2 / 0 5 : 7 5 5 7 4 6 ? 6 < 8 ; 7 8 8 < ; 8 5 7 : < = 8 9 6 9 @ @ < ; > = < : ; 9 9 7 9 ; < ; : ; B @ < B B < < 7 6 9 6 6 7 6 8 7 6 < 9 7 6 < ; 8 6 1 6 > A ; ; 3 4 6 4 : ; ; : 6 7 9 8 5 7 4 1 4 8 8 < 5 4 4 5 8 ; 9 8 7 : ; 5 : 8 8 < 9 3 9 8 3 / 5 4 3 3 9 4 7 2 1 3 4 7 8 4 / 5 2 / 5 5 5 7 4 / / - , / 0 , , / 2 , - , / 3 / . , 1 1 4 0 1 4 , * - - - , 0 . + + . 2 . , . 1 / / . 0 2 , 3 3 3 1 , , / 5 2 - 5 2 3 5 5 8 1 1 3 2 3 6 4 3 3 3 2 0 . 1 : 9 1 / / 3 2 0 3 2 , . 1 2 1 / 1 2 3 4 0 - 4 2 1 / 0 6 0 . 4 5 0 / 5 3 3 7 4 3 / 0 3 1 1 0 3 , , 2 2 5 2 7 4 , - 0 . 0 / / - + 1 - 2 1 * 2 - . / 0 0 0 / - . 1 4 . * , - , . . 3 - / 0 - - . / - - . * . . , * 2 . - ) , , * + , - , 1 . , ( ) ( * / - / , + * - ( & ' & + ( * ( ( + * ) ' ) ( % * + ' $ # $ ' * , ) , # % & & ) $ # $  $ # ! " # " 
+ ! ) ' ' ' %   # ! ' ' # ' $ % # % "   $ & ( + & % # % & " % % % ' " " ' ! # ' ' "   # " % # % $ % # $ # $ & " ' ! # # $ % # ' # 
+ ! & % % $ # " % " & & $ # $ " # ' " ! $ % # " & " ! "  ! # % $ # ! # " $ ( " # " " $   
+ ! 
+ # " ! ! "  ! # !  ! " !    
+ 
+ 
+ ! 
+ 
+   " 
+ 
+   ! # " !  
+      
+             
+  " "   
+ 
+ 
+ 
+ 
+   
+   ! $ 
+ 
+ 
+ 
+ 
+ 
+ 
+    
+ # % 
+   
+ 
+ 
+ !  
+ 
+ 
+ 
+ ! 
+ 
+ 
+ 
+ 
+ $ 
+ " #     #   
+ 
+ 
+ 
+  ! "   
+ 
+ 
+      
+ 
+ 
+ 
+  
+ 
+  
+    
+  
+    "  
+ 
+   
+ 
+ 
+ "  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  !   % " 
+  
+     
+    
+ 
+  
+  
+  
+ 
+  
+ 
+ 
+      
+  
+ ! # ! 
+      
+  
+ "   
+   
+   ! $ $ "    ! 
+   ! 
+ 
+ 
+     
+  
+ 
+ 
+   !  
+   "  " 
+  
+ 
+ 
+ 
+     
+ 
+ 
+    !    
+ 
+ 
+                                                                                                                                                                                             
+ 
+ 
+  !  & ( ' % ) - 5 4 4 4 5 7 < 8 5 5 = 4 9 A : @ : < ? 8 8 < ? ? 6 7 9 9 ; < ; 8 > @ 8 < > ; > B < < ; ; 8 < = 8 ; = < = 9 : < 8 : < > 6 : 9 > = 7 < < < 8 5 3 8 9 9 5 6 7 = > : 9 : 7 6 2 4 : : 9 9 < 8 7 9 < 5 7 7 4 9 9 7 < 6 5 5 < C > 9 8 2 < 9 : 4 8 = 9 ; < 9 8 1 5 6 1 2 8 6 7 4 4 0 1 5 2 4 . 0 3 2 0 2 5 : 4 2 - / 1 2 0 0 - 1 4 . 2 2 1 6 3 3 5 4 1 2 0 . / 5 / . 0 3 2 1 0 * , 1 2 0 , / 1 . 1 / - 0 5 1 4 3 7 , / 0 4 7 3 2 3 5 7 9 7 6 3 3 1 / 5 : 5 6 3 0 - 1 5 9 4 6 7 4 5 0 4 = 6 4 3 5 3 4 3 3 1 0 3 - . - - / , / 0 2 0 / 2 3 3 4 1 . 0 4 1 / 1 8 4 2 2 0 - - 3 4 1 4 3 2 1 4 3 / 1 0 , , + 3 3 . 2 1 0 . 3 - + / 2 . . 0 1 5 3 , 2 1 - + , / 0 / 1 , . 2 0 5 0 0 1 / , 2 + / ) + . / - * + + / 0 / 0 + . , + , + & , - ) , + ' ( ) & # ' , * . . + * + * ( $ % ( $ # & * % ' ' ' ( * & ( ' ) ' "   " # $ " % " % " & ) - ( ' ' $ $ , % # ' % $ $ ( ' % $ # & % + - ) !   " 
+ # ' % # % # $ # !   " ! " $ ' & $ % %   ( #   # # ! # #   
+ $ % $ ( % % $ ! & & ) # # ! % ' ' % # ! ! $ #   
+ % " $ % & " !   !   # # ! % % #   % % ! $ ! ! $ &     
+ ! " $ #    ! ! 
+ ! ! ! " #    $  ! % #       $ ! "       
+     
+  
+ " " ! " "  
+ 
+ 
+ 
+ #    
+ ! 
+ 
+ 
+        
+ 
+  
+ ! 
+ 
+ "       
+  
+ 
+   
+ 
+   
+   # 
+   # ! ! #    
+   
+  ! # !   ! 
+ 
+ 
+ 
+ 
+ ! " " 
+ 
+ 
+  
+ 
+  
+  " ! 
+  
+ 
+ !   
+  
+ 
+  
+ #    
+   
+  
+   
+ 
+  " ! !     
+ 
+  
+  "       
+ 
+   
+ 
+ 
+    ! 
+     
+    
+  
+      !         
+     # ! 
+  ! ! ! ! ! 
+  
+    
+   
+ ! ! 
+  
+   
+        
+  
+ "  
+ 
+      
+     #    
+ 
+ ! " 
+  
+                                                                                                
+                                                                                              
+  
+   ! $ ( % $ # ' - / 2 / 3 : 4 6 9 7 3 : 5 ; 7 : : 9 C > 9 9 9 @ ; 9 : 8 = 7 ; < ; 9 9 ; : = > ? C ; = : ; ; B = ? > > : 2 5 ; @ > @ 7 : : : 6 ; < 6 5 : : = 6 6 7 9 7 7 ; : ; < 9 < 6 ; ; 5 5 6 5 = ; 9 9 < 9 8 6 6 9 5 8 7 6 4 ; 6 3 5 A ; = ; 3 5 5 4 8 9 ; 7 9 8 5 ; ; 4 4 0 0 4 7 0 / 4 4 4 : 7 6 2 8 6 5 2 0 3 3 4 5 3 - / . / 2 + / . 3 1 5 / 2 8 5 4 4 2 2 3 3 3 4 - 1 5 2 4 4 / 0 1 0 9 / . - 3 3 5 3 0 5 2 0 6 1 0 2 3 1 2 5 5 5 6 6 7 5 1 4 1 4 3 6 6 : 6 8 9 2 1 1 6 6 3 4 0 4 8 3 2 2 3 1 0 / 1 1 4 3 5 5 5 8 6 . 0 2 1 2 . 2 4 , , 4 7 3 4 2 0 7 1 4 4 2 2 2 2 5 4 4 4 : 4 5 0 - 1 2 4 . 4 . + 1 0 / / 2 1 0 1 2 4 0 . 4 0 + , 1 . 0 / - - / . , + 0 , / . 1 3 3 - 3 / + / / - 2 - + * + - 0 , + , * 2 2 - / + - 1 , , . + ( 0 / . , ) ( ( ( ) ) ( , , * ( + * - + & $ % & + ' % ' ' ( $ $ ( * * ) + ( ( ' # % % % ( & $ $ ( & ) ( + ' # ) , + & ) * " " & ( $ ( # ) % % ) + #   # $ & % $ # " $ ! ' ( $ # & % # $ * ' $ # " # " & & $ # & # " " # $ & ( ' $ " % % ( &  ! $ $ ) #  # ) $ % $ $ ! # " $   $ " $ # # % % " # $ $ " ! " ! # $ & $ $ $ # "   # % $ % $ " # " " $ ! & %    # & % " $ %   ! " " $      
+ 
+     #   ! ! 
+ ! '  
+  ! "   
+    " 
+ ! $  
+        !      ! 
+ 
+ !   
+ " ! 
+  
+   
+    ! 
+ " 
+  ! $    
+ 
+    $ "   
+ 
+ 
+ " ! ! 
+ 
+ 
+ 
+     #      
+     
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+   ! 
+ 
+ 
+ 
+ " 
+ 
+  #   ! % #  
+ 
+ 
+ 
+  
+   
+   ! !   !     # ! # "   !     
+ 
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+   
+ 
+ "   
+   ! #  
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   ! 
+ 
+ ! ! !   
+ 
+  
+    
+         
+     ! 
+ 
+     
+ 
+   
+ 
+ 
+ 
+ 
+ !        $   # 
+                                                                                          
+                                                                                                    
+ !   ! $ ' & ' + - / 1 3 3 4 8 7 : 8 6 9 : < 6 5 < > = < 8 = > ; ; ; 8 < = = ? < : = : 8 @ : 6 : ; ? A ? ; 9 9 @ > @ ? 7 8 ; ? @ A ? A ; = ; 8 5 = = ; 8 < = : 5 9 9 = : 9 < > : 5 8 7 9 7 6 6 : ; = ? 9 7 ? < : : ? 5 : 8 : ; 7 9 8 7 7 ; : 9 ; 7 4 4 6 : 8 8 : ? 9 : 8 : 5 5 2 3 / 4 6 1 1 4 5 6 5 9 5 4 7 7 8 2 4 4 6 3 7 5 0 3 5 2 4 2 2 3 1 / 0 0 1 0 0 / 7 8 3 5 7 3 5 0 5 7 2 2 3 2 1 1 / 1 6 1 / . 7 3 - 0 1 , 1 1 6 6 6 7 5 4 5 3 6 3 4 9 5 5 7 2 1 3 6 = ; 5 9 9 / 2 2 4 2 3 7 1 1 4 3 / 3 0 2 3 3 4 5 8 3 4 7 4 4 3 1 3 3 2 3 0 5 4 3 / 4 4 4 1 0 2 4 0 8 5 6 1 2 4 4 3 5 3 4 / 4 2 4 4 3 : 1 - , , , 0 4 6 6 ; 7 3 0 4 2 - 2 - . , + - 1 6 0 1 4 - * - , 1 2 0 3 2 0 * 1 2 + ) 2 . * , , / - . - - * - / 3 0 . - - + , ) ( 2 - 0 + ) . + , % ' * + * * ) - ' / ' ' & , # ) + ) , ) ' ' ( * ' ! " # ' / ( * ' ( & ) % % & # % $ * * + ( ) % ) ( ) , + + + % % $ ' ( ( % ( # # * ) & % # ! $ ' ' $ ' & * " " $ " $ ' $ $ ' $ ' # & & & ' $ # " ( ' % ' $ ' * ) ) ' % % % $ ! " ' & " ' &  $ ' & % ( $ ! ' ! ! " # ! & % & ' " # $  % $ $ % " "   $ # % ! ! ! " ' ) $ " # $ ! 
+ " # " $ " " ! " " ! ! # " " " " ! $ " #   
+   
+ " ! " $ # # ' %  ! " 
+    
+   ! 
+ "   ! "  
+   
+  
+   
+ 
+ 
+   
+ 
+ " $ 
+   
+ 
+  
+ !   !       " $     " 
+  #  
+ 
+ 
+ #   " $   "    
+ ! " 
+ !  
+ ! 
+     
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   " 
+ !  
+ 
+ ! " " !   
+ $ 
+     
+ 
+  
+ 
+   ! "  
+   
+ 
+ # % "  
+  
+   
+  
+ 
+ 
+   
+  
+ 
+ 
+   
+     
+   !     
+  %  
+ 
+ 
+  
+    
+ 
+ 
+ 
+   
+ 
+ "  
+     
+ 
+ 
+ !           
+ 
+ 
+ 
+  
+ 
+ ! ! 
+ 
+   
+ 
+ 
+  
+  
+  
+ 
+   $   
+                                                                                                   
+                                                                                               
+    ! ' ' % ( 0 / 0 4 5 8 3 5 9 ? < : 7 A ? 8 ; @ ? 9 7 8 = = 9 7 8 : ? ? ? ; ; 7 : ? ? ? A : ? < @ B < : @ ? 9 < 9 = = ? ? ? < @ > D E = : 6 : ; = ; < ; @ ; < ; 4 ; ; : : ; 7 : ; : 6 ; : < ? : > = > < < 9 = : @ ; A : < : = > : 7 9 8 6 7 ? ; 8 6 = ; 9 6 8 8 : 8 6 7 3 7 4 8 9 5 3 5 : 9 8 6 8 7 8 6 4 7 2 4 5 3 5 5 7 7 : 1 4 6 5 9 5 8 - 1 3 3 0 4 2 - 5 6 2 3 1 3 4 2 2 5 5 3 3 3 8 3 2 4 . , 1 3 1 , * 3 2 + 1 8 6 5 5 4 8 6 : 7 / 2 6 8 8 8 7 7 5 3 8 8 ; 6 6 9 9 6 2 3 5 2 6 2 2 5 8 5 3 5 7 < 4 2 6 8 4 4 5 1 0 8 6 4 6 : 8 6 6 5 1 . 5 5 5 4 1 3 7 . 2 1 3 2 4 8 4 3 : 7 6 2 / 1 2 5 4 < 3 1 0 . . 6 9 / . 6 1 2 2 6 8 7 7 2 2 0 , 2 1 5 1 1 2 / 0 1 / 0 0 2 3 4 1 / 5 0 0 - 3 . , / , 1 - 1 + ) ' , , 3 - 2 + 1 0 - , / 2 0 0 , * - ) * , - ) * , ) % ' ( , - ) ' * ' ( * ) + - * ) ) + ( & & ) & ) $ ( ( ( ' % #   ' & ( ( * + - ( ( + ) $ ( ' ( . ( * ' ( % ) - % & ( ) ( * ( ( # $ % $ * ( * ( % # $ % # % % ' % ( ' $ ' ' ! % % # & & & % $ $ ' ) * ) ) % & & # " $ & ) & ( * % $ % # $ & ( $ ' $ " ! % $ % ) ( & # ! + '   & ) # !  #     & $ " # #  $ ! # #  "   # ! # " # % # !  " 
+  # #   ! % $ $ $ $ " "   "  
+ 
+ " & " " #   " # !  
+     #   
+  
+ ! "     ! " !  
+     ! 
+ ! "     
+  
+    !    !  " # " $ $    
+ 
+ 
+   !  
+ 
+   
+ ! # " ! ! 
+ 
+   
+          
+ 
+  
+  
+   
+ 
+   $   ! " 
+      ! 
+    
+ 
+   ! #   
+      !  
+ 
+ 
+  
+    ! 
+  
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+    ! 
+ 
+ 
+ ! ! "   
+ 
+ # 
+  
+    !   
+ 
+      
+ 
+ "   
+  
+ 
+ 
+ 
+ 
+   
+ 
+ 
+ !    
+ 
+ 
+ 
+ ! ! # ! "   # 
+    
+  
+ 
+ ! " % 
+   
+ 
+ 
+ 
+ 
+                                                                
+         
+                                                                                                                         
+ 
+   ! # & & * / , - 0 4 4 5 4 6 > ? 8 : : ; < C > > 9 @ ; 8 9 5 7 7 8 = B < ; 9 8 ; < > @ < > : = ? D 9 ? @ 8 < ; = ; < E D ? < > ; < = 9 : ; A = < = > A D = = B < ; 7 9 ? 5 : < ; @ ? : ? > 8 3 ? : < : : : ; 8 < : > C : : < @ > : 6 3 6 9 = 6 6 < 9 < 9 8 4 3 3 9 8 0 8 ; 5 8 2 7 5 4 < : 8 7 6 6 8 9 8 7 4 5 6 5 9 ; : 3 9 6 6 8 7 5 3 7 2 9 6 8 1 1 : 7 6 5 1 6 3 + 0 4 / 0 7 4 1 7 8 7 7 6 3 3 5 . 5 / / . - . - 0 ; 7 9 : 9 5 8 : 3 5 7 9 8 : 8 5 6 3 8 4 4 2 5 ; 6 4 5 4 4 7 4 3 5 7 7 5 2 8 4 9 9 : 8 4 0 2 6 9 5 5 < 7 6 4 4 6 5 7 4 7 ; 9 6 1 4 5 4 0 1 4 6 0 5 6 / 4 5 7 3 3 1 3 4 6 3 ; 2 / 1 / , 5 / - - 0 4 2 1 3 7 2 6 2 / / 0 2 6 2 0 4 5 2 5 2 / 3 / 1 / 0 1 . 0 1 , + / 1 ' / 0 2 - . 1 2 - + * / + 4 1 3 . - * - - ) - ) + + % , - . ' & * * ( ' ' * ' ) ) ) + ) + & ( - ' ( ( ) ' % ) ( % ) * + ) ( + , & " $  # $ ) ( ( ' , - ) ' ( ) ) - ) , ( * ' # ( ) ) ) * * - * % & ' ' # ) ) ' , ( % # $ # % $ $ # ( # # ' & $ $ % & ( ) % % % # % & $ ' % & & $ ! # & % ' ' ) ' & ( % # " % $ & ( ' ! % )   $ ' ) * % " " # " " ! $ $ $ & " " * $   
+     " $ & $ # 
+ # " " ! " " # # % #    ! # $ 
+ 
+ 
+ $ ! 
+ 
+   
+ #    
+   $ % $  !   !  
+   
+    
+ 
+ 
+ !  
+ 
+     " " # ! "  
+      !        &  
+ 
+  #  !  " #   
+ 
+ 
+ 
+     
+  
+ ! " ! 
+  
+         
+ " ! ! ! 
+ 
+  
+ 
+   
+   !   " 
+ 
+    
+ 
+        
+ ! % ! 
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  " " !     
+ 
+ 
+ 
+ 
+ 
+    
+ 
+  
+ 
+ ! " 
+        
+    
+ 
+ 
+ 
+ 
+        
+  
+     !  
+ "     
+ 
+ 
+   
+         
+    
+   
+ 
+ 
+ ! ! "    
+ "  
+  
+     # ! "    !    
+ ! 
+ 
+ 
+                                              
+      
+ 
+              
+ 
+    
+                                                                                                                       
+ ! " # + ' , + - , 1 0 1 1 5 5 : 9 : 7 4 8 = @ > > : @ 9 ; 7 7 ; A = : : 9 = ; > ? ? 8 ; 9 < : @ @ > @ : 8 ; ; 9 = 9 ? ? ? A < > > ; < 7 > 8 < C = = @ 6 < 7 < 8 ; : 7 ; ; = ; ? ; : 7 9 ? 9 8 7 : 9 : : 5 8 : < @ 9 ; ? ? 8 ; < : ; = ; : 9 < 7 : A : 8 = = 6 9 : ; ; 3 6 : 7 2 6 ; : 9 = ? 9 9 : ; : > : 8 6 = < : 5 4 2 3 4 ; 7 2 1 . , 5 4 4 2 : 5 3 4 3 2 7 4 4 3 2 5 1 / 0 2 3 0 7 9 5 4 1 9 2 5 4 3 5 4 0 0 1 / 3 6 1 7 8 3 4 9 8 : > = 4 3 : 6 3 9 7 9 6 4 5 4 4 3 / 3 7 8 6 3 1 5 2 4 5 5 ; 7 7 5 9 5 7 2 2 6 6 4 6 5 9 1 6 4 5 6 6 / 9 8 9 6 1 5 9 6 4 5 9 1 2 4 8 9 5 9 4 4 3 5 1 / 2 . 1 2 4 2 0 3 2 3 . 1 0 0 0 2 . 0 4 / 2 2 1 * , 0 1 1 3 2 0 3 3 . 1 0 4 0 , 0 + . 0 + ( , , + / 1 1 - 1 / + + * + + - 0 / 6 + + - - , + 1 . + + ) * , / ( ' - $ ) ' ( ) & * , + * + + , . * ( ' ) + ' + ) * & ' ' ) ) & ) * ' % $ ) % & * ( ' & ' ) ' & # % & & ' ( & * ) % ) & ' $ & & ) & # $ ) % ) ) ) * * ) % " ' # $ # ' ( + % $ # ' ( % ' ) & ) * & & ' ! # # # $ ' & " " # & ) # " % & % ( $ # $ # % % $ # ( ! # & # % # %   " # $ $  ! # $ % ' # " " "   &   #  
+ % "   # #    "    $ $ $ ! # " " !   !   
+ ! !     
+ 
+   ! 
+      " " "   
+ 
+   ! " !  
+ 
+ ! ! ! # $ 
+ ! 
+ "        #  
+ " 
+    " ! "    
+ 
+  " ! 
+ 
+ 
+      # 
+    !    
+ 
+ ! $ ! 
+    
+ 
+ 
+  #   "    # 
+       ! 
+    ! ! 
+ !  
+  
+ 
+  
+ 
+     
+ 
+ 
+ %   
+   
+ " 
+ 
+ 
+ 
+ 
+  
+  
+     ! 
+  
+ 
+      
+ 
+ 
+  
+ 
+   
+ !     
+      
+ !  
+ 
+ 
+ 
+     
+ 
+  
+ 
+  "   
+ 
+ 
+ ! 
+ 
+ 
+ 
+   
+    
+ 
+ 
+ 
+ 
+    
+   
+ 
+    
+ 
+     
+ 
+ 
+  
+   
+     ! !   
+ 
+   
+  
+                                   
+             
+                                              
+ 
+                                                                                               
+   !   # % ! ! ' + 5 4 5 2 0 7 8 < 6 9 9 : ; ; @ @ ; 8 > @ = : @ 9 = > = < 9 > < 9 ; ? : < > : ; < A < = : 6 9 = 7 < ; = 7 2 : < < A 6 = 8 ; ; > = : > 9 8 7 ; < 7 8 > 7 < < ; < < 6 ; : 6 8 9 9 : 5 8 5 6 6 4 8 < 7 6 : < ; ; < 3 5 : B 8 7 9 < 7 ; : = 9 : > < = = 8 5 4 : 7 6 8 6 2 : 8 A ? ; 6 9 < ? : ; 8 9 5 9 6 6 7 3 9 9 6 7 / - 5 2 5 7 3 0 4 9 0 + 1 0 9 ; 8 6 3 / 6 7 1 / - - 2 4 0 . 1 1 1 . 6 7 6 1 2 2 4 4 1 2 3 2 4 4 8 9 8 ; < 7 4 4 ; < 5 6 < 5 7 8 3 6 7 2 3 7 9 : 4 2 3 5 : 9 3 8 9 7 5 6 8 7 4 2 5 6 4 7 2 / 2 4 7 8 5 4 5 3 7 9 6 2 5 ; 8 < 7 : ; 3 2 9 7 7 2 3 2 1 9 8 2 2 5 0 / . 2 2 2 3 1 0 0 3 2 2 1 . - / 5 7 8 1 8 / , - 4 6 7 3 0 2 0 1 / 3 2 / / + * / 1 , , + . + 0 0 0 - / - . * + ' * , , . 1 . / , , * / 5 , - , ) ' , + ( % . + ) * ( ( ( ( * + ' + * * ( ( ) % ' ' ( ' ( * & ! ' % ) ' $ ' % ' & # & # ( ' $ + ( * * & $ - % # $ * ( * ( ' % ' + ) % & & $ # # # & % ' ( ( ) # ' $ # " ! * ) - + + ( # & ' $ # # ' % ) # # # % % $ $ ' & & % $ % & ' # % ' & ' # % " $ "   ' !   & & & ( $ ! ! # " % " ! #     & " & $ " 
+ ! " # !  #  ! # ( ! !  " 
+   " ! " &   ! #     $  "     
+ 
+   " %  
+     
+ 
+ 
+  !  !  
+ 
+   ! $     
+  ! " # % #      
+ 
+      ! # ! !       
+ " 
+   
+ 
+  
+     
+ 
+ 
+ 
+ ! 
+ 
+ 
+  
+ 
+ ! 
+      
+    
+ 
+ 
+ 
+ $ !  ! 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+ ! 
+ !    ! " 
+ 
+ 
+ 
+ 
+ 
+    
+ 
+   
+  " #     
+ 
+     
+    
+ 
+ $   
+ 
+ 
+ !  
+  
+        
+ 
+     # ! 
+ 
+     
+ 
+ 
+   
+  
+ 
+ #   
+ 
+      ! 
+  ! 
+   !   
+ 
+ 
+ 
+ !   
+ 
+ 
+   
+ 
+    
+   
+ 
+  
+  " 
+ $ 
+   
+ 
+   
+ 
+ !   $  
+ 
+  
+ 
+ 
+                                      
+          
+       
+   
+         
+             
+                                                                                                               
+ 
+ ! # $ $ $ " ' ) * / 5 : 9 5 8 6 7 9 < 9 ; 8 8 < 9 : ? B ? < ; = 9 : : 9 < ? > 8 8 A : < ; 6 8 ? ; ? B < @ = ; : : < @ : = : > ? A = : 9 ? 9 8 9 7 < < : : > ? < ; 8 5 9 : < : 9 4 7 < = 7 8 : 6 ; 2 4 5 5 4 8 8 6 5 4 9 : A 8 3 4 8 = 8 5 = ; 5 7 < 8 5 9 ; : ; ; 0 6 ; 7 < 9 4 3 3 7 7 7 5 ; 8 5 = 9 3 : : < 7 8 < 6 9 - 9 : 3 4 7 5 7 5 8 9 6 2 7 4 2 0 5 3 : 5 7 7 4 / 3 / / / 5 2 3 4 2 1 0 1 . . 4 3 5 7 2 - 3 2 2 2 9 3 5 4 3 3 5 6 ; ; 8 : : 5 8 3 ; 7 4 5 : 8 3 5 < 7 7 6 7 7 4 9 < < 8 3 6 6 9 9 7 8 6 5 4 7 2 7 3 / 1 6 3 2 - 4 2 4 2 8 5 1 6 6 6 9 2 6 9 : 1 4 5 9 5 0 5 0 5 1 5 2 7 0 2 * 2 3 0 + , 0 / 2 2 - 2 6 4 6 1 1 3 / 3 2 0 - . 5 2 / 5 3 * 2 5 0 4 2 0 / 1 4 2 + 0 , / ( ) / * / - / 0 - , , . / * + * / , 0 1 . 0 1 , / - + , , ( & ' + ) ' ( . , ( ' ' ' ( $ ' ) ( $ ' * ' ) * * ) * ( # !   $ # $ ( $ # # # $ % " # $ ' * ( + & + ) ( & & , ) & * $ % $ * ' ) ) ) ' % # ' ( ( " $ # ' (  " !   " % & # , ) ' $ " % ! # $ & $   " ! ! !  " ! % & & #   " # % # %   # % $ ! # #     "   ! % " & #   ! 
+ # % " % # " 
+ " " $ % " !  # # # !   % " "   # 
+     ! 
+ 
+ !   " $  ! ! !   ! "   "  
+   ! ! "     
+ 
+ 
+ 
+  
+   %    
+ 
+   #  
+ 
+  
+ 
+ 
+ ! "   ! 
+     
+  
+ 
+ "  
+ 
+   ! 
+     
+ 
+ 
+  
+  
+       
+ 
+ 
+ 
+ 
+  
+ 
+   
+  
+ 
+     
+ 
+ 
+  
+   #       
+ 
+ 
+ 
+     
+  
+ ! 
+ " "    
+  !    
+  
+ 
+     $   
+ 
+ 
+      
+ !   
+ 
+   
+  
+ 
+ ! 
+ 
+ 
+ !   
+ 
+    ! 
+ 
+ 
+  
+    " 
+ 
+  
+  
+ 
+    
+ ! 
+ !   
+      
+ 
+ 
+  
+ 
+   
+   
+ 
+  ! 
+ 
+ 
+   
+ 
+ 
+ 
+ 
+ 
+   
+ 
+ 
+   
+ 
+ # "   
+  
+ 
+  
+   
+ 
+ !  
+ 
+ 
+  
+ 
+                                
+        
+  
+            
+              
+  
+                
+                                                                                                              
+   # # # % ' + + - 5 : 8 9 6 ; ; 9 9 : 5 9 9 8 4 9 ? < A = < 8 5 8 ; B B @ < ; = < ? < 7 9 ? ; 8 7 = > 8 7 : 7 3 < @ < = 6 7 8 ? : 7 < 8 ; 9 : 6 9 ; = > ? = ? = 6 : : : > : 6 7 6 7 = : 9 7 4 < 7 3 : > 8 < 7 5 2 4 ; : : 8 7 ; 9 > = 7 9 : 6 5 : : > 9 7 8 = : 2 7 = 6 7 = 8 3 2 5 5 5 7 8 9 3 9 6 6 7 5 = : : 2 0 : 4 : 7 ; 7 4 3 5 7 3 : 7 2 2 3 5 7 4 5 4 5 : 4 2 0 + , 4 3 8 6 2 2 4 7 1 1 0 . , 3 2 9 5 2 3 7 6 1 5 3 4 5 / 1 7 ; : = : 6 6 3 8 4 6 8 3 1 2 5 5 8 8 6 6 4 6 3 0 3 6 7 3 1 4 3 9 5 5 6 2 2 3 6 2 2 / 4 1 1 0 2 0 0 4 5 5 3 2 6 9 3 1 3 2 4 6 3 6 4 3 8 4 4 2 6 5 7 4 / 3 4 7 / 0 6 2 4 2 0 3 2 0 2 2 1 - 2 2 0 2 . / / 2 - 2 . : 3 / 0 / - 0 0 0 - 2 0 6 4 2 1 1 + ( * . 0 . * + + - , + + , + . 0 / + * , - + . ( - * , , - , , - ) * + ' ' ) * , + * ( % $ ' ) ( & " / , + $ ( & ' % * ( % ) $ & ' ) $ & ! # $    $ ' * & # ! ) ) * , ) & % ' ( % ) $ $ % % % % % % 
+ ! # $ % ' % ( # # ! # 
+   # ! ! & % ! & ( $ $ # "   !   " # # '   % $ ! ! $ & % #   #   $   # % &   ! # # ! ! # $ % ! $ ! % 
+ 
+ ! $ ! $ ' # ! " & " # !   # #   !  
+ " 
+   #   
+ 
+ !        !   % ! %     
+ " 
+  
+  $ " ! " #     
+    "  
+ 
+ 
+ 
+  ! !   ! !   #  
+  
+ 
+ 
+  
+  ! 
+  
+         
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+  
+ 
+ 
+   
+   
+ 
+   
+    
+     
+   # 
+     
+ 
+ 
+  
+ 
+ 
+ 
+     
+  
+ 
+ 
+ 
+ 
+  
+ 
+   
+ 
+ 
+   
+ 
+ ! $ ! 
+ 
+    
+     
+ 
+ ! &   
+ 
+ 
+     
+    
+ 
+  
+   #  ! 
+    !   
+ 
+ 
+ ! 
+    
+   
+  
+ !   
+ 
+  
+  !  
+ ! " !    
+    # 
+  
+ 
+ 
+ 
+ 
+      
+ 
+    
+ 
+  
+ 
+ 
+    ! 
+     
+     ! ! 
+  
+ 
+  
+         
+                                 
+                       
+                                                                                                                              
+ 
+  " # ' ( ' , , : 2 3 5 2 8 < 9 4 8 = = : < : 8 4 7 9 : = 8 = ; 7 8 = ? < = = ? D B @ @ = < = : ; < = 9 ? ? : < A ? ; ? 7 8 : > 9 < @ > A ; 6 9 = ? ; @ = 9 9 < = 9 : < 9 ; ; 8 : 5 9 = 7 : < : 5 = ? < ? ; 3 9 9 5 ; < ; > 7 9 2 8 C @ 9 ; ; 8 > 9 8 5 1 2 : 7 8 5 : = < < 6 8 5 6 8 : < 8 8 8 8 8 8 : ; 6 . 4 4 / 3 3 6 5 8 5 3 5 4 7 5 2 . 8 7 2 2 1 3 8 6 9 3 1 2 1 + . 3 6 2 3 3 2 , 5 6 4 4 1 1 4 1 6 2 1 0 2 3 2 1 . 3 3 7 5 5 ; 7 5 7 8 8 8 7 6 9 5 4 < 9 0 6 : 9 6 4 7 5 3 1 5 5 7 7 7 7 2 7 1 1 6 2 2 5 4 / 0 / 2 4 1 1 4 - - 3 = 4 6 7 7 4 7 8 7 3 1 0 3 3 : 1 2 1 1 1 6 3 2 3 3 5 / 0 7 4 8 5 5 1 2 3 2 - 2 / - 0 + / - 8 . . / 0 2 1 * 4 . , 0 / / / . 1 0 0 0 2 / . , * - , - 0 0 2 . ( + , ( , ' ( + * 2 , , * & * . ) , ) + - , * / , + - . . ( - * ( ( , * ' ' ( ) , ' & % + * " ! ( ' # % ' # * ) & & # & ) ' $ , % # ! $ # , ( ) & & ( ' + + ' ( ( $ $ ' ' $ # $ ) # % + $   $ $ & & ' ) ) & (  " " $ #   " # " $ " ! # " # # # ! % ! ! % $ % ' # # ! " & " " $ " " ! " % " " # $ ( " # % & & % $ ! #     % % ( ' ( #   $ ( 
+ ! " " # $ % $  
+ " " ! "   "     %     !    ! 
+    
+     
+     $    
+  " 
+ ! 
+      
+   
+ 
+ "    
+ "   
+ " !  " ! ! " !     
+     
+   
+ 
+   
+ 
+ 
+     
+ 
+ 
+ 
+ 
+        
+ 
+ 
+ 
+ 
+        
+    !    ! "       ! 
+ 
+  
+ 
+ !  
+ 
+ 
+ 
+ 
+  
+ 
+  
+ 
+ 
+  
+   
+ 
+  
+ 
+        
+     
+ 
+ " "    !   ! 
+ 
+ ! "   # ! 
+  
+    !   
+  ! 
+  
+     ! 
+   
+ 
+ 
+ 
+   " 
+ !    
+ 
+  
+ 
+   
+   
+  % 
+     
+    
+  
+  
+ 
+ 
+     
+ 
+   
+          
+  
+ 
+ 
+   
+  
+ ! 
+  
+                                                                         
+ 
+       
+ 
+                                                                                                             
+ 
+ " $ ! # ' & + , 3 1 2 9 9 6 : 7 7 9 : > = = : 9 9 < 8 > > = < D ; ? = > < = : B G = ; A @ D D 8 ; : > < ; = > A ; > @ E A : ? < 5 8 ; = A ; 9 : < > : 8 9 7 8 7 > : = < ; 8 ; : : 4 @ @ < ? 4 4 7 : = ; : A 6 9 : 7 6 : 9 = ; 3 9 7 : = 8 ? 9 9 : < 8 3 6 : 8 6 3 4 7 4 5 ; 7 5 7 8 8 ; 7 6 4 7 6 : 6 8 < 5 0 6 7 - 3 5 5 4 5 3 4 7 ; = 4 3 1 6 : . 4 5 5 4 3 6 5 0 0 . 2 - 2 6 2 + 2 1 2 4 0 3 8 9 4 1 - 1 0 1 4 5 6 2 . / 2 2 5 5 2 1 9 9 ; 8 7 8 : : 4 6 : ; 4 6 9 ; 5 6 8 : 9 4 7 8 8 < 6 6 4 7 6 2 2 - / 9 6 8 6 6 0 1 2 / 0 3 0 1 8 4 1 5 7 5 5 4 4 7 8 2 3 3 6 9 / 0 . 2 1 2 / 6 2 6 3 . / / 2 2 3 2 7 9 8 3 4 . 1 0 3 1 2 0 2 2 5 + 1 8 3 1 5 1 0 2 . + 2 2 2 6 1 . + / / ) - 1 / 0 0 - 0 . , * + . 4 / + 1 3 0 / * , * - - / + + , * % , . * * - . , + ( - ) ) & ( ) ' % ( - + ( * $ ( % ' ( , & ( " & & ) ' ' % + ( & $ $ ( # # & # * * ( ) * , ) & # ( % % ) $ $ & $ ( % $ ' ( & %   ' ) * % ' * ) ) $   " $ ! # % ' ( ( ' $ " " $ $ ' & % $ $ $ ' # # " % $ # ! " # # $ " % $ " % & & & % ) # " # " % & ' "   " " % % $ $ % # $ $   ! ! ! " # & $ " " ! # & "   
+   !      !   ! $  !   ! ! 
+  !    # " % 
+ 
+     
+ 
+ 
+ 
+ 
+  " 
+  " $ ! 
+ 
+ # !   "     & ! %   !   #  ! 
+ 
+  
+  
+ 
+ 
+  
+          
+          
+ 
+  ! 
+ 
+   
+ 
+  
+ 
+ 
+  !   !  "    
+ 
+ #     
+  
+ 
+ %    
+ 
+ 
+  
+ ! 
+   
+ 
+ 
+ 
+ 
+ 
+ ! 
+    
+   
+ 
+       
+ 
+    
+ 
+   
+ !   ! " ! 
+   
+    # 
+ 
+ 
+ !     ! !      
+    
+ 
+   
+     
+  
+    
+ 
+ ! 
+   
+  
+ #   
+  
+ 
+  
+  
+        
+ 
+  
+  
+ " ! 
+ ! 
+ 
+ 
+ 
+ 
+ " ! 
+ #  !  
+ 
+  
+ 
+                                                                                                                                                                                                 
+ # $ # ! # * . + - . 7 > @ 6 7 > 9 : = = B ? < = < ? ; 8 5 ; : < : C < @ < B ? @ C ? 9 = ? = C ; ? < ? : = : ; 7 9 ; < ? > = A 7 7 9 ; ; ? : : < ? : : : < < = = = ? @ ? < : 9 9 : 8 > ; 8 9 7 4 8 : 9 < ; A 7 6 9 : < 9 ; ; : 5 9 6 6 7 < = : : 7 ; < 9 6 : < 7 8 < 9 6 ; 8 6 5 : 5 7 5 5 5 7 8 > ; 6 8 > 7 5 5 7 2 3 ; 9 5 4 ; 6 < < 4 / 6 8 1 7 2 2 4 3 4 3 0 2 5 2 / 0 1 4 3 5 4 0 / 1 3 0 3 ; 5 4 5 0 0 / / 1 0 6 1 / 4 3 3 6 5 ; 1 8 > 8 < 9 2 9 = 6 9 9 : 9 5 : 9 9 ; 9 < < : 9 9 8 9 6 6 4 : 9 4 . 3 6 8 8 9 6 0 1 3 3 0 3 6 7 8 5 1 / - 5 8 / 4 : 8 ; 3 3 2 3 3 2 , / 3 . . 2 4 6 4 3 1 2 3 5 9 6 5 4 5 7 7 7 - 0 2 3 : 6 3 5 3 3 5 0 1 3 - 3 2 5 3 . , 0 4 6 2 0 / 0 4 , + / 3 . 0 0 1 , 3 1 0 + - 3 2 , 2 1 - . 2 + , , % + ( + + * % + , + 0 . 0 , * ( - + ) , ( + + ' ' - + & , & & ) % * ' ' & % $ ) ) & % # ' ( & ) ' % $ % " ! ' & ' ) * & & " & % $ % + ) & + ( ' $ $ ' % " % $ # ' & % ( * $ ' ' $ % " " # $ ' % ) $ % & $ % % * ' ' $ (   % ' ' "   $ $ & # " " ! ! % ) & $ ( ( % % & (   #  # $ % ! " % $ ! " # #   # # $ # " " # ! ! $ # $ $ ' $  " " !   # 
+ 
+ "   ! % " "    " " 
+  #   
+ 
+   
+ !   
+ 
+ 
+ 
+ 
+   " 
+   !  
+ ! # $ " "     ! !   
+ $ $ # $ " # " 
+ 
+  
+   
+ 
+ !    
+ 
+       ! 
+ 
+ ! "     
+ 
+ 
+  
+        
+ 
+ 
+ 
+ 
+ 
+ ! # ! 
+  "  ' " ! # #     
+  
+ 
+  
+ 
+ ! " 
+ 
+   
+ 
+ 
+    
+ !   
+     
+  # "      
+    
+ 
+ 
+    
+ ! ! 
+    
+ ! ! 
+   
+ #      
+  
+       
+   
+   # ! 
+ 
+ ! 
+ 
+     " 
+   
+ # ! 
+ 
+  ! 
+ 
+     
+ 
+  
+ " " ! 
+ ! 
+  
+   
+ 
+ 
+ 
+  
+   
+   
+   % "       
+ 
+  
+   !        
+ 
+   
+                                                                                                                                                                                               
+ ! ! % % " * - * / 1 3 8 = < : 7 9 > > @ E C @ A ? < ; A : 9 : : > ? ? @ B = ? ? D ; 9 9 9 < = 9 9 < ? C A > : < ; : < ? = 7 8 ? < 5 8 7 ? = = < 8 > 7 @ > > @ ; ; 7 = B B ; 9 8 > 9 5 = D ; < : 6 : @ : 9 ; > @ : < 8 9 A < = < < ? @ = 6 8 = 9 8 8 9 > ? > < > ; 8 : 7 9 5 < 9 4 @ 7 < 3 6 7 8 5 3 6 4 5 6 7 < = < 5 8 : 8 8 7 5 9 ; 9 5 3 9 8 7 : 9 6 = < 5 2 5 7 6 2 0 5 5 1 6 ; 5 4 7 3 3 3 8 4 7 5 5 8 3 1 2 7 3 7 7 3 2 0 4 5 5 7 5 4 5 5 : < 5 3 : : 7 7 8 : 8 7 @ : 6 6 < 7 : 7 6 5 2 0 3 9 7 8 1 / 5 9 ? 7 5 3 / 2 3 5 5 1 8 < 7 2 2 - 2 5 8 3 7 7 : 6 6 6 6 4 4 > 5 3 7 1 2 3 5 3 2 5 2 6 0 9 7 4 4 7 8 8 7 7 3 4 2 5 8 5 1 4 1 2 5 1 / 0 0 5 - - 3 6 . 1 / 2 0 0 3 4 - - 0 / 2 3 5 / - , 0 1 - - * / 0 - 0 0 1 3 1 0 2 + . / + - + + ) ) * + , 2 - + ( , 0 , ) * - ) * * & ' % ( * + ) ' * , - * # ) $ ( % & % & ) ( # % % $ $ ' & % ) ) $ - * * ( ( ( & ' ) ' * . - ' ) ' & $ ( % # % ' % $ * $ # # # " % " " ! # % ' ( & & ' % ) ( ' % & ' ' + $ ! # ) " " $ ( ( # ' # ! ( ' & % ( & % # # $ ( % " 
+ " $ % # & & % # # " 
+ % # "   ! $ # $ ! # % % " ' ! !   # " # $ #   % " " # # ' ! 
+ ! $ # %  " !   
+  !   
+   !    
+ ! % ! 
+     # 
+   !  
+     "   
+ !     $     
+  ! 
+  
+ 
+ 
+   
+  " 
+  
+ 
+    
+ ! #   !   "   
+      
+ 
+ 
+ 
+ 
+  !   ! ! 
+  ! 
+   " $ ! ! " #   
+    
+ 
+ ! 
+     !   
+ 
+     
+  ! " # !   ! ! !   $ $ " ! " 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+   !   
+ "     "               
+ 
+ 
+  
+   
+  
+ " !  
+ " !   
+ 
+  
+ 
+ !    
+ 
+  $ ! 
+  
+ 
+    
+ 
+ " #   
+  
+ 
+ !   
+ "     
+ 
+  
+ 
+ 
+   ! " 
+   
+  
+      ! "   
+ 
+ 
+ 
+ 
+   
+                                                                                                                                                                                               
+ " ! $ ' + - + 1 5 2 3 < B : A < 8 B B @ @ C B ? B ? C ; 6 < 9 < ? A < = @ ? @ : 7 A < 8 ; > A < 9 : A A ; : > < 7 < @ B : 7 B ? 8 = > ; C @ 9 = ; : @ @ = 9 9 = < B I ; ; 6 7 9 ; < = < 9 @ A > = = > = @ B < = > : < E B @ = ? A 9 ; 8 9 A 8 9 9 7 7 ? < 9 ; ? ? ? = 7 3 7 7 6 = 9 : 9 9 4 6 7 8 8 5 5 9 2 3 7 < 7 7 4 6 ; : 6 6 ; 5 8 4 5 7 : = : 4 7 7 7 7 : 8 3 3 3 6 3 8 2 2 5 2 4 6 6 3 5 5 / 8 4 9 7 1 5 5 / 0 3 2 2 0 3 8 8 2 6 4 3 9 3 8 7 8 9 4 8 4 4 9 ; < = < 8 ; 9 : : 8 3 4 6 3 6 8 : 8 3 3 4 5 7 0 4 1 2 4 6 4 8 6 5 ; : 7 4 3 < 5 7 2 5 5 4 2 9 6 9 4 5 8 0 1 ; 3 6 6 5 0 5 2 1 5 2 6 6 3 7 : 6 5 4 5 3 7 2 : : 6 2 7 + 8 3 0 / 1 6 3 0 5 9 8 5 5 2 6 1 5 7 3 5 8 0 0 1 - / , / 3 2 / / + , , 2 0 2 4 0 0 1 / - - 1 0 / * * * * , - + , 0 , + , . 0 0 - ( ) 3 3 . ( " " ( * , , ) * * - - $ $ $ % ' ' ' ( & % " # " $ & ' & % & % ( ( ) ) ( % ' % ) ' & ) * . * ) ) ( $ ) ) % ' ' * * , % ( $ & $ # # $ " " % % * $ & ' ( ( $ ! " ' ' '   & % " ' ) & % % # $ % ( $ ) * * + , ( ' % " # ) & % % ' # # ( ( # $ " $ ! ! # # # " & % # * % ! "  ! $ " ) % % " " ! ! # # #  " # $ " " ! % % $ 
+ $  
+  " ! !  ! "    !   $ !   
+ " " % "      
+ # "   ! $ !   "   !  !     # $ % 
+ 
+   
+ # " 
+ 
+ !   
+ 
+ $      # !  
+ ! ! 
+  
+   
+ 
+ 
+  
+ $ & "    !  
+  
+     #   !    $ #  
+ 
+     " $ 
+ " 
+  
+ 
+ 
+ 
+ ! ! 
+ ! "     $       ! 
+   
+ 
+ "   !    
+ !  !   
+  # ! ! ! " # 
+  !  
+   
+   ! "           
+ 
+      ! 
+ 
+   # 
+  
+  
+     ! 
+ 
+ 
+ " 
+  
+    
+ 
+   !   
+       
+  
+ !   $  !     ! " #    
+ 
+    ! 
+   
+ 
+                                                                                                                                                                                             
+       $ % * + , 0 4 4 - 6 ? ; > ? ; > = A A ? = = < > B = 9 > 9 ; ; C @ C C B A C ; = < @ = = = < @ ? G @ = < < @ @ = = C A ; A A E @ = ; ? B ? 8 9 < ? @ B 9 4 > = ? < : 9 9 8 = @ ; ; ; @ @ > = ? > = : ; 9 = : = 9 ; = ? ? > ? : : F @ 7 9 : ? A C A ; ; < : = > A = 8 ; 6 9 4 > = 9 B < 6 5 ? A 9 8 9 ; 9 4 7 4 5 6 8 : 8 ; 9 5 7 : ; 3 ; 8 : 7 9 8 < < ; : ; < 9 5 3 5 < ; 5 3 4 7 6 1 9 8 3 8 2 2 9 8 5 8 6 8 8 / 1 6 7 6 3 . 5 6 3 3 9 ; 5 9 : 8 7 6 6 6 8 7 ; 8 > = 9 5 < 9 9 6 9 4 7 8 4 2 = 9 2 5 5 4 7 4 5 5 3 4 1 8 @ ; : 8 5 7 5 9 8 7 6 9 < < 5 7 < 9 9 5 C 5 5 1 < 5 8 5 6 6 5 6 6 1 5 6 6 2 ; 7 3 : 0 4 2 6 7 : 7 : 4 : 1 2 4 2 3 3 3 1 0 0 2 4 5 3 4 1 4 2 5 8 5 5 5 9 6 1 4 . 5 3 . . 0 3 1 / 1 0 / 4 3 0 0 / , 1 0 2 / 0 , / 1 , + * . . ( , / 1 / ) * ) * - 4 - ( ) % ' ( ' , / ) ) + & & * ( "   $ ' & ( ( # ( % # $ # % # # & $ " ) * $ % ( ' ' % % & * + ) . ( $ " ( * - & # " # - , & $ $ # & % & % " ' ' ( % * ( % ( #  & ' % ( ( & ' ( % & * % $ % ( # ' & ' # + % % ( $ # $ $ " & ' " % ' * ( ) * $ ) * $ " $ ' # # % # # ( $ # %   $ %   ! ( # " " " % " # % $ $ "   % # $ " ' , # $ "   
+ " # ' $ # # !   
+ !   ! 
+ 
+   # $ " !        !    %    " 
+  " # 
+ & #   # ! 
+ 
+ 
+   # !   
+  
+   
+ #      
+ 
+ 
+ 
+ 
+ ! ' ! ! !  
+ 
+ 
+ 
+ # ! ! 
+   " ! 
+ !  # " " " ! ! $ & $ 
+              ! $ 
+     
+    " 
+ 
+     # 
+ " $ #   
+   # # ! $ ! 
+ 
+ ! " 
+      
+  
+ 
+ # $ " 
+ " & " ! 
+ !  % 
+   
+   
+ 
+ ! 
+ "  " "     
+   !    !   # "  
+ " ! 
+     $   
+      # "   ! " !    
+        
+ # ! 
+    " # " " 
+   
+  !  " !    
+                                                                                                                                                                                              
+   $ " # ( * ) / - 1 5 8 4 6 ; 7 9 8 ; ? ? C ? ? A A < < @ 8 9 7 > > C = @ ? @ > F C ; 8 @ 8 : < : ? B > ; < C = B > < = B C ; D A D = 7 < ? = D : 9 6 < < ? C 6 < ; ? : 8 ? 9 5 9 = < < 9 7 = > > : < < = < = = @ ; 9 : < ? > ? ; ; < A D 9 ? @ @ < B G < : ? < 4 < : 7 5 ? > ? 8 : > ; A ? < 6 ? = : 5 < ; 5 6 : : 9 5 < : 8 9 8 9 8 : 9 7 6 6 8 0 1 : < 8 = 5 : 9 ; 8 2 4 : 7 3 6 4 7 3 4 < 9 / 2 5 / 8 7 9 5 7 : @ 2 8 4 3 4 3 5 . 3 7 8 ; : 9 ; 5 8 ; 8 ; 5 9 2 = 5 < B ? 5 8 8 ; ; 7 : 9 9 < 8 9 4 4 ; : 4 4 5 9 : 6 3 4 8 = > 8 2 4 : 3 5 7 9 7 9 8 < < > = > 8 8 < 7 9 9 6 9 7 5 4 5 3 2 3 3 7 7 : : 4 0 1 8 0 1 , 3 6 3 8 5 1 9 7 6 4 5 3 4 1 4 3 2 0 0 2 6 3 . - / 1 7 2 5 1 1 - 5 / 0 2 1 5 2 / 3 4 5 5 4 1 4 4 - * , 0 2 / 1 / 1 . * . , / - - 1 / . ) 2 . ) * % * ( + . * ( % $ ( + ( & ' * ) # ' ' $ & $ $ + $ + * & ( * ' ( % ' $ % $ ' ' + , * ) % ' ( $ ( $ ' + ( , ( ' ' + ) * # ! ! % ' ( ' ) % ) & ' $ & " % % ' & & $ ' $ " ' % * " # $ #   & * ' & % ' ( * $ # % % # ) & * * $ " " # ' & % % % # $ # ( ( ( ( ) $ $ ! $ ) $ ! # # # # " $ ) * ( % # & ' # ! # $ # ! # # # !   
+ " # % % ( ! $ !   " " % # $   # !       
+ !       "       # # # !  '   " $ 
+ !    
+ 
+ 
+ !  
+ !    # "   
+   $     #   $   
+ 
+ 
+ ! # "      
+  
+   " 
+   "   
+  % # " ! !   
+    
+ !  
+ 
+    
+ 
+   $   ! " 
+ !   ! 
+ # 
+ 
+ !    
+     
+   #    " ! % ! !  
+ 
+   
+ # 
+  
+  
+   "   
+ " " $ $ ! 
+ 
+   # # ! 
+   
+ 
+    ! ! ! ! !   # 
+ "   !    
+ ! $  ! 
+   ! %   " 
+ #    #        #    
+ 
+    " $ 
+ 
+ 
+  
+ 
+ ! " 
+ " $ ! ! "   "  
+ 
+ " #  
+ 
+                                                                                                                                                                                               
+ 
+ 
+ $ ( ' * ) & . 1 4 8 ; 4 9 : = ? < B E : ? 9 C C A = > @ B A 9 > ; : ? @ G @ A > @ A ? C A = > ? > = > G = @ @ D ? ? ? A = 9 ; A > < < 9 B C @ @ : ; < 8 = = > > > B ? B A 9 : 6 < = > : 9 ; B @ : ? > < ? @ B A < ? ? = C = ; ; 7 @ ? < < ? < ? ? 9 ; ; < > 8 ; = ? < 4 D ? > 6 7 8 > = : B < @ 9 6 8 < : : ; ; 8 : 6 : 5 6 ; 9 9 7 : 5 9 = 9 : 7 6 ; > = 9 4 6 6 6 7 9 7 9 7 8 7 8 7 / 8 : 6 5 4 5 8 = 7 7 3 < 5 8 4 4 0 8 9 < 5 2 0 5 9 7 7 7 7 4 9 ; : 7 8 < < 8 : ? ? < 3 7 5 7 9 9 : 9 8 8 : ; 4 7 9 = ; 4 < = ? 8 4 7 ; : = 6 6 8 8 < : ; > 6 7 6 9 > ; ; < 8 = 9 8 > ; ; 9 9 8 5 5 2 7 8 6 6 3 4 6 5 3 6 8 8 5 1 6 1 3 4 6 : 8 5 7 2 1 3 5 4 3 9 2 0 3 8 1 5 4 2 1 2 : 5 3 2 1 1 6 6 8 9 4 7 4 2 3 4 4 3 2 + 0 5 1 + 1 1 0 3 3 - / - - / ) - - - - 3 + ' - - . ) , , * * + + ( ' ) . + + * ) ) ' $ ' ' % ( ) ) & ( . ( ' & , ' ) & ( ) # % ' * , + * . % & , ( + % ' ) ' * * ( & * , & & ' & ' " ( ) . , ' ( ( - ' % # ( ) ' & & ( %   $ % # % & ' # " & * % % ' % ) + ) ' & % ) ( " % ) ' # ' & " % % % ' & $ # $ " $ & ( % ( % ) ( #   " " % # ' & % + % $ $ # $ " % % " % $ % & "   % % " # # $ $ ! 
+ # ! " ' ' %   !  ! 
+ ! 
+ 
+   
+ ! 
+ 
+   ! " ! $   " ( " # $ " ! !     # ! 
+    # 
+ !  "   "   
+ 
+ 
+ 
+ $ ! ! " &   "   
+ " !  ! 
+ 
+ 
+   # "   !   " " 
+   !  ! % ! ! ! !  
+ ! %  
+    
+ " $ "    "   
+ 
+  $ " ! " $   ! ! 
+ ! " $ % $ ! " "   #    ! 
+  # " ! 
+ 
+ 
+ !     # " $     " ! !    
+ $ ! # % ! # "    ! !   ! ! $ %     ! 
+ 
+ ! 
+ # 
+   "   "     !     !    " $ #   ! ! 
+ !   
+ ! "  #   " ! 
+ 
+ 
+ 
+ 
+   % # " ! $  ! # #  
+ 
+ 
+ ! ! ! ! 
+                                                                                                                                                                                              
+ 
+ " % ) . , / / - . 3 6 8 8 @ > < < F B A ? 8 < D A > < = @ = D B ; ; ? @ C C = ? ? E A B @ > @ @ F E B @ D > = < C H G = > = = ; A ; ; 8 = B D G F @ @ = < < @ E D ? = = A = < = ? : 7 8 : ; B C = : : < A > @ D ? @ < 9 ? C ? @ > ; A = 9 : @ 8 : = 7 9 ? = ; 9 : 8 < = ; 6 8 = ; ; 8 : < : ; @ ; 8 = ; 8 = @ C @ 9 > 9 ; : 8 9 8 8 : : 8 6 5 7 6 6 5 6 9 < 7 5 8 ; 7 7 1 / 5 ; 5 6 : 9 2 9 = 7 3 3 8 9 9 7 7 5 ; 3 : 5 3 2 5 7 6 3 2 1 4 7 8 : : 5 7 3 5 9 : = A ? ? @ A D ? ; ; 6 3 4 5 < > 9 = A ; 6 < 7 6 8 5 9 : = 8 7 6 4 4 5 8 : 9 9 = = : : : = 8 7 : : < < ; ; 8 : 9 8 < > 6 9 8 5 : 6 6 : < 9 6 1 3 2 8 3 5 8 5 5 2 1 2 3 0 2 5 3 3 0 1 0 6 < 8 1 3 1 2 6 4 8 8 3 8 7 6 . 3 4 . 1 : 9 9 4 0 3 5 2 6 0 3 1 0 2 5 3 0 / 4 / 1 3 1 . . 3 - ' - ) . 1 0 / + - - + , - . , / * + 1 - ) * , + ' * * * ( + , ' - ) + ) + * ' ( + + ) ) ' ( # $ ) & ) ( ( % - & - * ) ) % % % & - / ( " ' ' ( * & ' + ) $ % + ( % & ( & $ # # ' ( * + ( #   " % & " & ' % ( $ ' & % # ) ' ' $ % ) * " $ # & ' & & % ( & # # ) ( + & " ' # # % " " % ' * ) + " ! & " ' & * " ! % $ % ' % $ ' % % % & % ' ) % 
+ " $   " #     " " & "   $ ! " 
+ 
+ " " " 
+ 
+ $ # $ ! !   ! 
+ ! "   " !     " " $ 
+  ! " ! ! # $     $ !     "   " "  & # " 
+ $ & ! #   # !    # " 
+  
+ 
+ 
+          " ! 
+ 
+ # $   ! $ !        
+ 
+   "       "   
+   
+   !  !   #   " " ! $ $   !  ! # 
+   ! ! # !  # 
+ ! " " 
+  " % # !     !   # $       
+ $ !      # & $ #    " "   ! !  
+ 
+   !   " % " ! 
+ " " ! ! 
+ 
+ " $ !  
+   " 
+ " ! " 
+  ! ! " # " #   
+ 
+  " $ # # 
+  
+ 
+ 
+ "      #     # 
+ 
+ 
+                                                                 
+                                                                                                                           
+ 
+ ! # & ( ) - , / * / 4 5 ; = A > = D G ? A = ; < C A < ; ? ? B ? ; ; > < < E @ 9 ; B A < @ < > = @ B B A = C B A > C G @ = A @ > A ? < < > : < A @ ? B B F > ? : : @ ? A ? = ? > 6 ? < < < 8 < = ; = 8 < D E @ < ? : ? @ A > ? @ D A @ @ ? = < ; : = C @ > D B 7 ? = = ; ; ; : @ = > 7 7 : < = 4 = : ; : < 9 ? 8 ? ; 8 9 A > < : > A : ; 8 5 5 3 ; 8 : 9 : = 8 7 1 3 4 4 9 6 6 7 : 8 : 9 8 5 : 8 6 4 : : 6 7 = 4 1 9 5 7 6 4 3 4 2 8 2 / 5 < 7 ; ; 7 5 < : ; 4 6 8 ; B A < < @ D A @ < 9 > = 9 9 : 6 : 7 ; 8 6 2 9 ; 9 9 = = = 8 2 7 : 7 5 7 9 = 9 : 7 7 9 6 5 5 9 : 8 8 8 7 9 9 ? < 7 4 : 4 < 9 : 4 7 : 9 1 6 0 1 : 8 6 4 5 5 : 3 1 5 5 8 3 1 3 9 5 5 7 4 6 5 9 2 5 3 6 ; 8 6 9 8 9 5 3 3 - 0 2 3 4 3 4 0 3 5 3 0 2 0 2 2 4 5 7 3 4 3 6 2 4 2 + / / - 3 2 / , 0 1 - - - ' ( ( * 0 . ) , 0 - ( , , & , . . ) ' + - ) ' % + , ) ( * ' $ ' * ' $ # % ' ( , ( + ( & + * + + + * % * ( * + * % ' % " $ ) + * ' ( * ) ' ' % * ( # $ & " ( # ' $ ( + # $ & - * ( & % ' # ' , ) % % ( & + % ) - % ' ) ) ) ' ' $ ' ( $ ' ( ) & ' ' & & % * & # " % & ( & "   & % ' $ ( % ( ) % % % $ $ # # # ( $ ' * % $ $ # $ ' $ ! # % " #  " " " ! # ! 
+ ! ! & #    # !      $ & 
+   
+ ! # # " " $ " % 
+ " 
+   
+  ( ! " $ & ! # $   
+ # " ! 
+ ! 
+ !   $ ! "  !   ! ! 
+   " 
+ # # 
+  
+ # % #  " " #        #     !   
+ #   ! 
+  
+ ! 
+ !    !     ! "    " # %     # # % ! % ! % " !  ! !  #   
+   #  #   # $      " # ' ! "  ! ! # 
+ $  !       
+   " # " " !  " # ! ! " # ! 
+ " " $   
+    "   "   #  ! & " "           
+       # ! # % "  
+   !   # !     
+ 
+    !       $ ! 
+ 
+                                                              
+                                                                                                                                " ! % ( ( * - - , 5 4 4 < 9 ? F A F A > B @ < B ? F > < B @ I B ? = ? B D E = = : @ > = < @ D ? = B C E ? < F F F B D E E A @ @ D > : : B C ? ? ? C C D < 9 > @ : 9 C A ; < E D ; ; = @ < = ? = = ? A = : D B > = : : C D E = B D ? : = @ B A D = ? @ C ? C F = ; = < @ : < A A B ? = = < ? < ; > 9 @ = 6 < = = 9 ? > ; @ @ ; @ A < 9 : 7 8 9 5 9 5 : ; 9 9 7 5 7 5 5 9 < 7 8 ; 7 8 : 9 > 9 9 9 7 8 = ; 6 7 < < 8 ? 7 5 2 6 6 5 7 : 5 / 3 9 7 @ @ 3 9 : : ? 7 7 8 9 9 = ; : ; ? = = : 8 : < ; 9 ? = @ = < 5 8 5 7 : A 7 8 ; @ = 9 ? < 9 4 7 ; 9 4 7 4 3 4 6 : ; ? 7 7 7 2 5 5 5 6 7 6 8 ; 9 8 ; 8 4 3 4 7 2 3 2 4 9 7 5 3 4 0 7 5 6 7 8 7 6 4 7 6 6 6 9 4 3 4 1 3 4 3 3 2 5 4 ; 7 9 4 5 2 1 4 3 4 4 : 6 3 1 . / 2 2 - / 2 0 1 1 3 1 3 3 5 3 1 / . 1 - 1 2 / - 1 3 0 + + , + . * - , 0 3 3 * ( - - ) / / , ' , ( ) ) ' ( ) * * , ) % & ( ) % % ( ) + & ' * & ' % ) ( * ' , % & + * + & ) ' ( % # $ * ) ) * + ' ( ( ( % * )   # & % ' ( ' & + ( ' ' ) ) ) % $ $ $ & ' * ( + $ $ ( , + ( $ ) % % ( ' $ & ( % % $ " ! % ' , ( % % # " ' % ! ' ) & ' ! $ * # % " % ' ( * $ ' $ ! !   & % " % $ ( * ( % ) " & $ $   " $ " ! " #  #  
+ ! ! 
+ % % " !   !    #      
+ "   
+   $   
+ 
+ $  $ # $ " !     " & % 
+   $ ! 
+ & " 
+     
+ # "   
+ 
+   
+   
+ $ ' !  ! 
+ !     " ! # 
+ ! 
+  
+      ! % #  
+  
+  $  
+  
+  
+       !   ! % 
+  
+ 
+ 
+   "     # " ! ) $ ! " " % ! "    !  
+ # # "  " '   ! " % & % ! 
+ 
+  " $ ! 
+    !  !   
+ "    !   " $   ! " ! " $  " " 
+ ! $ " !        "    "     
+ # $     ! " "   $ 
+    
+  ! 
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  " "   "     "  
+        
+ 
+ 
+                                                      
+                                                                                                                                       
+ ! ! ' ( # , + / 0 2 5 6 : 6 @ G C B > ? A G B B = A A E A A F E D @ A D C B H G G F C @ 9 C C D C @ = D @ @ E C D A < A < A ; < A D @ @ A F @ ; > A E ? ? A @ A > 7 > B ; A @ A 9 B A < = @ @ 9 5 D E C C A A A < 7 ; > ? = = ; ? > A @ < @ C B A ; @ A C F @ ; < ? ? > > = = = D < 8 : ; ? < ? = : 9 > @ < ? = 9 8 = 9 ? > : 9 9 9 = 8 : 6 : 5 9 : ? ? ; < > 9 7 3 6 ; 8 9 5 8 : 6 5 ; A ; ; 8 8 : 9 ; 7 4 : ; : 9 6 ; 7 5 : ; 9 8 9 / 8 ; : < @ ; 8 = ; ; 7 : 5 8 ; 7 ; 9 @ : A > < ; = 8 8 7 = : : > A 5 5 4 7 9 = 8 8 5 8 : 8 9 = 6 7 6 8 > < > ; 3 7 7 8 : = : 9 9 8 9 ; 6 5 6 7 < ; : : 5 5 6 4 7 4 6 3 8 4 9 8 : : 5 2 2 7 9 : 3 8 7 ; 4 4 7 9 ? 4 4 0 1 7 : 7 7 6 : 8 3 3 4 5 3 2 2 6 4 3 4 7 2 2 0 1 2 3 0 . + + / / 1 6 3 0 2 6 3 4 / . . 2 4 / , , 0 0 1 3 - - + 1 / / ) - - , * / . - ' - / * & ) + / * ' & * ( - , 1 ' $ & ( ( % ' , + - + . ) ( ) ' ( ( & ( & % ) - - % ) ) % ( ( ( * & ( ) *   & ) - ' ' ) ' ' $ ( & ( ) ' ( $ $ & + ( ( $ " ' % ( ' # ( ' % ' ' ( ' ( % % # % ( ) % & ( * $ # " ! " $ ( " ( ) % & # ( $ % ' ' % $ # & ' $ ' % % ( * ' ' # ! % " % % " $ % ( # % % ' $ " "    
+ ! " " " 
+ # $ 
+     "  " " # 
+ 
+  
+ !  ! " !   $ !    
+    
+  ! " &    
+  
+ " # "   
+   & "            
+  
+ 
+ 
+ #   
+ 
+  ! #   
+ 
+   #   
+ ! 
+  
+ 
+ 
+ 
+ & " #   # ! ! 
+      
+ 
+   
+ 
+ 
+ 
+ 
+  !   ! # 
+ ! 
+     
+ 
+      
+ "  $ !   "   !    ! 
+ ! 
+   ! " % $     "   "  
+  
+ 
+ !   "   " % 
+ !      "  "   
+ #   ! # $    " 
+ !   $ # # 
+ 
+ 
+ 
+ "   
+  #  
+ ! !  !   
+   
+   
+ "   
+ 
+ " 
+ 
+ 
+ 
+ 
+ 
+    ! " $ 
+ " "  !  !   
+ ! 
+   
+                                                      
+        
+     
+                                                                                                                           
+ & " ! # ) ( + . 3 6 : : ; = @ A B C @ = @ D E E @ E C D A A E I C C F G F C J O L H F A B C D D E B C B C > C F G C @ A A = ? D B E ? 9 > C C B B B D C C F A ? ; < C A = = B B A A B ? 9 B ? < ; < < A B @ ; > : ? > > = < ; 7 < ; > @ ; A D > ? < @ : @ D A = ? F = G < 8 = : @ < > > @ > = ; < 8 7 : = ? > < 6 ; < 7 > ; 4 8 : 9 9 @ ; : 6 4 6 ; : ; = : 8 8 8 : 9 : 7 9 9 8 @ 8 > > @ ? : 9 7 : 7 9 : 8 : = 7 < : : 3 5 8 = : : 8 6 < 7 6 7 ; ; ? ? @ ; 8 ; 6 ; 9 8 < 6 8 > B ? @ ; ? 9 = = ; 9 : ; > < = = ; : 9 9 < 9 ; = 6 8 ? < ; 7 ? 8 8 7 : 7 4 2 > ; ; : ; 9 7 < : 3 4 5 ; ; < 7 5 6 5 9 7 5 4 9 5 4 7 5 > = 9 8 4 4 6 7 3 0 4 5 8 7 6 1 4 9 3 2 5 : 9 8 6 : 5 9 3 1 8 3 < 7 3 3 5 8 7 5 4 9 2 8 4 1 3 5 1 1 . 0 2 7 8 3 / 4 5 0 1 0 / / 1 4 - / 3 / / 4 5 - + 0 3 0 - * . & + * - , , / * . 2 , / * * ( & , ' ) ' * ) , ( # & ) + , ( , + ) ) & % ( * ( ' ) 0 * % ' ' + & % ) ' ) % & ( # % ( & % ( & ( ' & , ' - * + * ) ) % # ) - ( + ) % # " & ' ) ( # ' ' ( ) & % $ ' & ' ( * & ( # % ' & ' % # $ $ $ $ " ' * ) * % ( ( ( % " % & & " " $ % $ % ) * $ ) % ! ! ' % & * ' ( % ! " " % & # 
+  "  
+   $   # # & # % ! !  " &  ! 
+  
+   $ " " " "     " " 
+ 
+ 
+      %   
+  ! # $      
+  ! 
+         
+    $   
+ 
+  
+ 
+ 
+   # " ! 
+ 
+   ! ! 
+  !  "   
+  
+  " " & !   " ! ! 
+     
+ 
+ 
+ " " " "     # #    "   !  $  
+ 
+   
+ 
+   ! 
+ !  # #   $ !      
+  
+  $ " ! 
+ 
+ 
+   " 
+ $ 
+ 
+ ! 
+ 
+ 
+ !   $ #  #   ! " ! " #    
+ 
+ ! ! 
+    ! !    
+ 
+ 
+ 
+   ! "   
+  
+ ! ! "  ! 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ #        
+ 
+ 
+   " ! ! ! 
+ 
+    # ! 
+      
+ 
+                                                             
+                         
+         
+                                                                                             
+  
+  # " ( * 1 / / / 5 ; > = A B F G B D < @ = > G B G A @ B ? @ B C E D G H K G G J D F A G B C E H B F J D F C G F C A D @ @ E H C D C > J B B B ? < > A < B @ ? < C ? A A @ @ ? = A = ; ; ; B ; < = @ D G E @ 9 > = B B > 8 8 9 7 < A @ C E E @ A = 8 A > B D A @ C A C D ? > 9 C ? ? < > > B 9 = : : 5 6 : ; < 3 6 9 ; ? ; 4 ; ? < < = 9 ? ; ; < : 8 9 @ > < > 9 ? : = = 6 8 6 7 5 9 < ? = < ; ? = 8 7 ; 7 7 9 @ ; : : 8 7 7 @ < < ; : 6 7 7 4 : ; < 8 9 5 : @ ; : 5 8 9 7 = 9 9 ? ? @ = > ? > 8 5 9 = < 8 = < ; ; < B @ ? 8 < ; 5 6 = ; < > ; ; 9 9 < : 8 ? 8 8 9 8 : ? ? ; < ; 8 8 6 ; 5 ; 7 5 8 : 4 4 / : < 7 4 6 < 4 : 7 8 6 8 > 7 4 7 ? : : 9 8 8 6 5 2 : 4 1 1 8 9 = 6 4 : 2 8 : 7 0 6 8 3 7 7 9 6 2 / . 0 . 1 1 1 2 4 9 2 4 1 3 / 5 0 4 4 0 0 1 - 0 / 3 1 / - + . . / / * . 2 , ) - ( + * , * - 0 ) * , + + * * ' ' ) - - ) ( & ) + ( & $ & $ ( ' $ % * - ' ' 0 . , ( % & $ # ) % ( . + ' + % ( ) ) & ( ( ' , ( % ' ) & # & ) ( $ # + . ) + & % " % ) ) & ( & ( - , + ( * ' ( $ ' & + ( ) ' ' * ' ) ( % & ' % % " ' ) ) ) $ # ( ( , ) % " % ' & * " % " " # #   % ( " % & ) ( $ ' ' " & & $ " # # % ! "     
+ $ $ !   " " % ! $  ' $ $ $ ! ! ! % " " # "  "       " % " %   ! " 
+ " ! ! ! #     " 
+  
+ " " $ $ "  " " " ! 
+        
+ ! $ !  " # 
+     " # 
+ # ! 
+ 
+ 
+ #  
+ 
+   $ # # # % ! % "  
+   
+ ! ! "   " "     # # " 
+  #   # "  # "   
+ " $ " " ! "  " " !  !  ! $ "  $ #    
+ 
+ 
+ # ! 
+ 
+ !   ! % ! 
+ ! ! " $ $ 
+ "   ! # "   #  ! ! ! 
+   
+ $ 
+ ! !    " 
+ ! !  
+ 
+  
+ 
+   
+  ! # 
+  " ! 
+ 
+ !         !   $ 
+  
+ 
+ 
+     ! # !     
+    
+  ! 
+                                                                 
+      
+   
+                 
+                                                                                                  
+ % # " $ 0 . 0 4 / 4 < B < @ < ? E > F F ? > C H @ G E F B > = B G F E C D E G J E B F G B K B G C D E A C ; E H G K B G C B A B C F D B C B < @ A ? D A ; A C C C @ E @ E A ; > = ? ? = : < @ > 7 : : @ I B E ? = = > ? @ ? < A D @ G > F A ? > C C B A A B A ; B C ? @ = A < 9 ? ? ? ; : ? @ B ? > ? < 8 6 > 9 ; 9 : @ > ; ; ? ? @ = : 9 = = ; < @ 9 : ; ; 3 8 : = 8 6 9 9 8 : 7 8 7 : ; = 7 < < 8 4 5 > 8 5 = ; ; < 6 8 7 6 = ? 9 < 9 ; 6 4 3 6 5 6 7 9 8 ; ; 9 ; 7 ; 6 8 = < ; : < = 7 8 ; > > = < = ; 9 A = 9 = < D ? < ; 7 : : 7 8 A = 9 ; ? : B 9 4 : 8 9 < = > 8 8 = = : = : ; 9 : 7 9 = ; ; : 8 1 0 ; < ? 5 6 9 9 : 7 7 9 : : 6 4 ; : 6 7 ; 7 5 4 4 6 5 5 6 3 5 : 7 5 6 7 1 1 6 8 4 4 4 2 7 8 : 8 7 3 + , 4 3 . 2 3 7 9 0 2 4 3 1 3 1 2 3 1 / ) . . 0 - 0 , . 0 1 - . / . / / ) ( / & & ( + * * ) $ ( % * . % ( ' ' ( - , ' ( ( * * ( ( ) & $ ' * ( * $ * # & - ) , ) ' ( & ) + ) / ) ' ) ) % % ( 0 + ) ) + ( % % ( ' ' ' ( ( ( ' $ ' + * * ( ) & + * ( ) + ( & * ) 2 , + - * ( & & ) * ( . ) & ' ' ( ' ) ( ) $ ( * ' & % " $ ( ) ' ( ( ( $ + + ' ( $ ' ' * $ $ & & # " $ & ( ( ( % $ ( ( & ' ' ( ' $ % $ ! ! ! $ $ # &   
+ $ # " $   ! % ' $ !   ! " " 
+ ! # !   # ( " $ % ! # % # # # $ ! % " " 
+ 
+   " ! ! " %   # " $     
+ $ # #   # ! 
+   
+     " ! ! !   # 
+ 
+ 
+ ! !    ! ! #   $ # " " " " ! 
+ 
+ 
+ 
+ " $ " # & # !   ! ! 
+ "  " ! # ! " " 
+ 
+ ! ! ! 
+   ! " " ! " #    # # #   !  ! " !   
+ "      " $ # # ! " # # # " " $ " # # ! ! $ " ! ! ! # " 
+  
+ ! 
+   "  
+ % # 
+ 
+   
+        % # !   
+ 
+   
+ 
+   ! ! "   
+    % !   
+ 
+ # 
+  ! 
+ 
+ # #   ! 
+    
+                                                                                                                                                                                              
+      # ' ( , 2 5 2 6 < = A A A < > > @ E A = @ A B E D H B F A A A D G E C F E L E A D > B F @ E E G C C D A H K C F C C G @ D E E D A C @ > 8 C = @ D D ? > B A = ? I A D B < B < @ 9 B = ; ; ? < 9 : B G D A B < ; ? ? = @ > < A A B A = > A A : < B A A > > ? < ? ? ; @ ; 8 : < < < : : ? C A > @ D ? A 8 ; < > < = < < = A = = = < 9 ; 9 ; 9 9 = ; ; 9 : 3 > 7 9 ; 9 6 ; : 6 9 : 7 < = < 9 ; 7 : 8 9 < < ? 9 7 = ; 8 7 : 9 5 : 8 7 7 5 5 8 7 6 = : : = ; 9 7 : : 4 = : 6 = ; : 5 9 ; = ? > G < ? = < ? < A A < : 7 < ; < 8 ; @ B > 8 > = ; ; ? < C = 9 : ; ; 9 6 = @ ; 9 @ < ; > < 7 8 ; 7 = 9 6 8 : 9 6 < < > < ; 9 8 = : ; 9 9 : @ 7 7 7 ; 3 7 6 7 4 6 8 3 9 8 7 < 7 ; 4 2 7 5 2 5 6 2 5 7 5 / 7 9 6 8 4 2 3 3 3 0 7 5 7 4 1 2 6 / 2 2 . , / - / . 1 . 2 / / 4 3 3 0 * 0 2 1 , , , . * ' ) ' * ' ) * ( / / + . + & & * ( + ( , - * + - * ) ) ( ) ( - ' & & , % " ' ( $ * + * ' . * 2 - + ( ) / , ' ) ) . * ( - ) ) ' + * ) % & ( % $ % * ' ) $ ) - * ( ) & ( ) , , * ) & $ , / , ( & # & ' * - * ) ) $ & $ ' ' # ' , * ( $    # $ ' ' * ( ( % ) & # & ' ) % % $ % $ ! # $ " " $ $ $ $ & + * ' & $ % % " % * " " % $ $ " # $ " $ " ! 
+ # " % # " ( $ # 
+  %   "     " " $ ! ! # # " $ % $   "    $ !  
+ 
+ !     
+   # " !     # ! ! " & " 
+ 
+     
+      " " ! # %       " "   " !   $      "  
+ 
+ 
+ 
+ 
+   " " & $ % "     #  
+ 
+ ! !    ! ! 
+ " # % $ 
+  ! % " !       $ # "        !   ! $ # # # ! # #   " " # $ % " ! 
+ % ! ! # ! $ " ' # "        
+ 
+ " #  
+   $ # ! ! ! 
+ ! $    
+ " ! 
+ 
+ 
+ 
+ 
+ 
+ " " #    
+ ! # !  
+  !  ! 
+ " ! 
+ 
+ 
+   ! "     
+   
+ 
+                                                         
+                
+ 
+                                                                                                                  
+ 
+   ' ' ' * , 1 3 2 8 ; 9 ; ? ; @ @ G D B ; = H L D F H E H B = ? E E G H F J G E A H C < @ D G > F B F G A J D G ? H E K C A @ F @ A A @ ? ? C > : < A ? B @ > < B D < B E B C F > < @ B @ A B > A @ @ D A B B > @ ? = = @ = 9 8 ? = < D C ? A = : < B @ 6 < = = = ? @ B @ C = ? 8 A < @ ? : = @ 8 = < : : 8 ; : > B ? = B B = > < < 9 > A = ; : : ; 5 5 ; : 8 6 7 ? ; < < : 5 9 8 > 7 = < 9 6 = 8 9 ; ? 6 5 2 9 8 8 8 8 < 8 9 ? : 8 : 5 6 5 = ; 8 ; 9 > 6 7 = < ; 9 < < 7 9 < > = ; ; ; @ @ ? ? ? : : 9 A F ? : 9 9 9 B A 9 = A B = ; ; B A : ; ; < = ; < ? < < 8 9 ; 9 < ? : 9 8 9 ; 7 9 9 < ; 7 6 < 9 7 = < : > ? > 9 7 ? < 9 8 ; 9 < ? B : ; 6 2 9 < 5 2 2 5 : < ? < 4 5 1 7 5 8 9 > 5 6 4 4 1 3 7 7 8 7 3 4 6 7 3 7 6 9 8 2 1 3 2 2 3 0 3 5 3 0 1 / 3 0 1 - 5 2 1 0 / 7 3 , , / / . / - - . * ( % * / / - ) . ) & ( , + & ) , * 1 & * + ' ' , ( ' + / / + ) ( & + ( ' , , ) * / % - + - & ( . , ) % ' . ( ( . 0 + ( + ) ( , / / ' ( ) ( " $ & * , ( ( * % % % % , + * % * . ) ) + & # ' % % * & $ % $ ' % & ' ' * . ' ( ' ' ' & % ) & # % $ ( + * ' ) ' ( * ' ( ' ' % % $ !  % & # ! $ & + ( + ' $ $ " $ ' % # ( ! !  ! % % ( & % "  " % " & ) & # 
+ # # 
+ " #     ! % ! " " $ $ " % " !    #      " !       ! ! 
+   
+ " " 
+ # ' " "    "   % $ " " !   %   
+ 
+  
+   "   " " ! 
+    ! !  ! 
+    
+ 
+ ! # # "   " #  ! 
+    
+ " "   
+  !  " ! "  # $ " # '  " " # # # ! 
+ ! ! 
+   ! " #     
+ " $ ) " ! ! ! % $ !    #   ( & % $    " ' & !   ! & $ 
+   ! $ % ! %  # # # " "  
+ 
+  
+ !  " !   # ! 
+ "  % ! " 
+ $ ! " $ # 
+   ! 
+ 
+ 
+ # % 
+      " "  ! $ 
+  
+                                                                                                                                                                                              
+ $ # % $ * , . , 4 8 7 ; < 9 9 ; D @ G M A > B D E A H F A A ? E E B G F H K G @ B C F = B G H A B D D G H G H M D F B C E D A ? ? A ? A ? C C < A > G C G = C B ? = ? ? A @ @ A ? A = < F C A B < < A : A C : : ? @ = ? A D E @ ? A ? > = : ? : @ @ G @ > > A ? < = ? B C ? @ G > > ; ? @ > > C C < < > > 9 > = < < < D G ? > B < ; < 8 F > ? : : = 9 9 7 7 4 7 9 : B < = ; 7 < < @ 9 : 9 A > = ; @ : ; 9 8 8 > > 8 : 8 7 8 7 ; 7 9 7 8 : A A > 3 3 9 9 9 8 ; : ; 6 : ? < 9 A B ; ; 8 : B ? : 9 ? : ; 9 > ? : ; @ 9 : @ A @ ? B B A ? = 9 ; ; < < 9 9 = 9 @ = > > @ 9 : > = ; 5 6 8 ; ? A = : = 6 8 7 7 > 6 9 : ; > C = : 7 5 8 6 : 9 ; ; < : 8 4 4 > ; 6 4 3 = 9 ; < : 7 ; ? 9 2 2 6 ; 8 5 0 6 6 8 = 4 1 2 3 2 8 6 6 = > 7 4 5 3 7 5 1 2 3 / 0 4 5 5 4 2 5 . 0 , . 1 0 0 - 0 - 0 3 0 , 1 , & - 0 / - - * . - + + ) ( ( , ) ( , ) ) , ) * , * * / + * ) + . - * * - * * * ( ) ' ( + ) ) . + ( , - ) ' ' * . , - / . * + ( ( ! 0 . ( ) , , ( ( * ) + - , ' ) % % " % ) * ( ' ( + , & ( % ( ( ' % ' ( # % ) + ) ' * ) ( & % % ) ) & % & ( ' ' !   ( ( ) ( $ % ! ) . + & + " ' & ' " ) ' # # % ' ' ( ' & # $ $ ! % ! $ & & & & ) ) & & $ 
+ " # " & "   $ ' #  & " ! " & % "   " $ & # # & $ ! % " ! #   $ % "     ! !   %   
+ 
+ 
+ ! " " !  & $ & " # " 
+     #   
+   "    !   
+ 
+ 
+  
+  ! ! 
+ 
+ ! " " $ 
+ 
+  
+ ! 
+ 
+   ! # ! " "   !   ! #   ! % ! " ! "  #  " ! # % #   # !   " 
+ # $ % "  ! 
+     ! " !   " !   " % ' % $ # # # "  " # ! " " ! ! " !     ' ' " # ! $ #   ! # &   
+ " $ # # " # !  " % 
+  ! "   # " ! 
+   # # & " " #     
+ % # !    
+ !    # # 
+ 
+   ! !  !   ! 
+ 
+                                            
+                                   
+               
+                                                                                               
+ ! ! " ( , - / 0 / 5 7 < D B ? > A H D G B ? A B E J ? F L N J A A @ D F F D F E L M J D A A H B G F H D K G B B E F E J H K D = = ? A L F F D E E @ F H > > > : B B A ? @ > ; A = B D A @ E ? ; A 9 = @ > A @ = C @ B > < < A E B @ 8 < ? ? @ C = < @ ? B < = A > = E B C @ C ? D @ ; @ ; A B D D @ ; : ; 9 < = 9 > A @ A D A B A ; > ? B C D C = ? C < = : : 5 6 8 3 > 5 < < A : = B ; 8 9 @ > = > < > 8 6 ; @ ; ; : : : 5 = : 9 7 : ; 7 8 ; = ? 8 4 : 8 9 7 @ ; 9 : < ; : = = @ < < ; ; A < C : 7 9 ? > > A D 9 A 9 > : < 7 < @ = < < ? = ; = ; D @ = < @ B < A F @ = 7 > > : 8 ; ; ; ; < ; = A = ; 8 5 8 = 7 : 5 ; = < @ 8 9 5 8 9 ; 6 : ; ; : 8 7 ; 9 9 7 < = 9 3 ; 7 : 5 6 7 7 @ @ 9 4 2 3 7 = 7 5 1 3 1 3 2 5 8 9 < ? 3 4 5 1 5 6 . / 2 0 0 3 7 5 7 1 / / 8 2 4 2 - 4 0 - / / . / 0 . 1 , 1 - . 0 ) * + - 1 4 1 . * - + % / - ' * , / ) / , - ( ) + , 0 1 + ' ' $ ( % ( , 1 + + ( ( , ) ) * * + - + ( ' ) * , , ( - . % $ ' ' ) + / + ( ' + * - , ) + , , , ) ) ) * ) & ' ) ( ' & & ) ' ' ( ( + + ' % ( % + ( ) + * ) % ' ) ) ( % % ' $ % & * , ) # & # % ( ' + - ( % * ' ( ' "  % % & % ( , ) & ' & % % $ " $ % ' + & & ) ( & % " % ' " ! " ! # # ! % $ ' ' $ ' " ( %  # $ % ' % % & & % & " # (   " #  !   # $ %  " % # % ! $ !   & & %   ! ! !   # " !  ! 
+     
+  
+ 
+ ! ! !  
+ ! " " ! ! " # !   
+ "  
+ 
+ 
+ # " # % % ! "    ! $ " $ & " # # " % % ! ! # % $ $   ! % ! $ ' & "  $  ! $ % & ' " % # % % $ #    # " ! # " !    $ % ! "   
+ " 
+ # % % ! "   "      !   ! % " "  ! # $ & ( ) &   # $ ! # #     
+  $ " ! ! ! # 
+ 
+ " % $ ! ! ! ! ! ! !     !   " 
+  $ !                                                                                                                                                                                                 
+     # ) , ( 0 0 1 7 7 < B C F E @ D D G E H H H G K F ? M M I A C C B G C @ H D J O K J A G D D E D G E G F D F F J F G B H G @ ? ; B E C A E B > E E E C A A ; A D A D ? ? B ? C B A E ? F B B > 6 ? > @ C C E D ? = B ? ? B E G E E B D < ? A B ? > > A @ E B C C A ; = < A ? < < @ > 8 9 ; < = 9 : ? @ : ; ? : = D ? = @ D A : : B @ = ; @ < ? : : < 8 ; ; 6 < > = : 8 ; ; A ; = D > 8 8 : ? C E = 8 ; < ? B B 9 9 ; : : ; : < = = 9 6 6 7 < < 9 9 : 5 8 : > = = 8 7 ; @ ? 9 D > : 9 ? ? = ? = @ D = 9 ; F E ; ; = 9 9 = ; : < ? = ; A = = E B B @ D < = ; = > A ? ; 9 @ B ? 7 8 6 = > < ? B 9 : > 8 7 < : : ; : 8 < < > 7 ; : 9 > ; : 9 9 7 ; < 9 8 8 9 < 6 5 ; 3 = < 9 3 9 8 < ? ? 9 3 6 8 8 4 6 6 4 4 0 1 4 4 8 8 7 8 ; 9 6 2 8 7 4 5 5 3 0 3 0 . 3 4 3 3 2 4 7 0 3 5 0 2 / / . 0 . , - * + * * - * ) ) / / / 1 3 . / - ) , * + + ( ( + . - / + * + . 1 . 0 1 ) & + ) ( + / + ) * ) - , ) + + . . , ' + - * - + & ) - ' % * * - * . ( + - * ) * * $ ' % - - + + , * + / , ( % " * % ) ) + + , ( ( ' ' * ' ( ) * * + ) # & ( + ' ' ' " & & * + * , $ $ $ + $ % ' ) + * * - # " " % $ ) + ) ( ) ) ' % % & ' & ( ) # ' + % & ( $ $ % & % $ & $ # $ % "   " % % $ ' & $ % # & ! $ # " ' $ #   # $ # $ ' # ' $ $   
+ $ # % ! $ & # $ # "   ! & % " 
+   # $ 
+ $ " $ & # 
+   #    
+   ! !   #   # 
+ 
+ ! #     !     
+   
+   ! " % $ " " ( " ! " $ %   " $ ' %    ! # $   & # $ "    # & # # $ # * $ ! ! #  !   # & % % # &   ! !   $ 
+ !   # ' " # !   " ' % # " ! !   % ! # # # ! ) % & # ! ! $  $ " % # ! # "  & # " 
+ 
+ ! % %  
+   ! $ # # % % $ # "  %   
+  ! % !   % ! " " $ "  
+                                                                                                                                                                                             
+   $ & ) # ( + 0 1 < 7 : = A ? @ @ D H G F K O K I K @ B H E K C E F ? H D E E G E J I I F L C @ C G I M F G F E D K I H D B A > ; = D C E G F B B B B D A B C B C @ E B C A ? D H D ? A C = < A A C D C C G D @ E ? ? B = B B C I B C C C B ? ? = < : ? D @ G @ D A @ = A ? C = C D > D A B ? 7 7 < ; @ = ? : A @ F @ ? D J C A C A ? < @ @ ? > ; 8 : : 8 < A ; : < C = < 6 < B C ? 6 : > > 9 ? A E > 8 ; A = : ; < 8 = C > ? ? 9 = : > ? ; : 9 9 < 9 6 8 6 @ < ; 7 7 3 ; B A < 8 8 9 = A E B ? 8 ? 9 < > ? = : ; @ D @ : ; : : ; < ; 9 < ? ? > < < : ? 7 : = A ? ? < ; @ @ E @ ; < : A < 6 9 = 9 8 = @ > = B = > @ 9 ; 9 ? < < < : > ; ; : 6 > ; ? = 9 @ > 9 4 ; 6 9 7 = 7 7 8 < 8 ; 7 4 ; < 8 : 5 1 1 4 1 2 4 < 4 7 6 ; : 8 5 7 5 7 8 7 2 3 5 3 , 0 1 4 7 4 1 2 3 1 1 2 3 / 0 3 . 1 3 . , / , * , , / * - , - - + / 4 0 - - / * , * * , * , . , / & ( ( * , , . 1 / - + , + ( - + + , , ) - / , - , + / ) ) ) ( . * ' ( ' % & + - + 0 / * ' + * ( * % * + ) * ( + * , + ' - - ' $ ( + ( ' ) ) ' ! ) / ( % ) ' ' ) & & * ( ! % ) + / - ' % + + ' & ' - $ $ $ ( ) ) ' & ) + * ( ' % $ $ ! ) & * ' & ( $ $ & % $ # # $ & ' * $ % ( & ! # &   $ " ' (   $ ! "   $ $  " " # ( # " " $ # $ # # % # " %   % !  & % #  % $ # ! $ ' " % $  %     $ ' % ! # 
+ ! " ! 
+   ( " % $ " # ! !    ! !   # ! ! 
+   $ "  "    
+   "  
+    $ ! " " % $ "   $ # !    & $   
+    
+ # $     
+  ! # # # "   $ !       
+  
+ ! % % % % % 
+   # ( ! ! ! & ! " ! # $ % & & $ #   ! !   ! % & " " # # # % $  " ! 
+ ! $ $ & # % " " % $ "   # % & !   % ! #   " $ ! & ( # 
+ 
+ $     
+ !       # $   
+ 
+ 
+                                                                                                                                                                                           
+ 
+   # $ % ' ( + 0 . . 4 : < B < ? D F E G C F H H G H D A G B E O H O F C E E F C C E I H I G I D C E J I G G F E C H L C G A G F D A I M F H F I G B < D D C G H ? D D E @ @ D A D E E < ? A ? E C B @ B C @ ? @ > @ = > H B C D A E F > B @ G D D C @ ? B B E E E F C ? @ C K C @ @ ? B E A > = = 9 D > : ? = : B C ? = < @ B B F A ? ? < C H < @ C @ > ; = : ? ; ? ? = : : < A ? A ; : : = @ ? < = ? < < : @ ; 5 = ; 5 9 ? = = 6 < 7 : : ; 8 8 7 ; = @ ? 9 : ; > 6 6 < 9 9 @ @ > @ < < A D B = > ; : 7 6 ; D B : = : @ C = < 9 = ; ? D @ : = : = < < = A = : C < 9 ; 7 ; < ; 9 : : < ? 7 9 5 < ? = : < @ = = @ ? > ? : > ; 7 5 : : 5 < A ; 9 8 ; = 8 ? < = : : 8 : 9 9 9 9 7 ; : 7 9 > ; 9 7 4 = 8 5 4 3 6 6 4 3 < : ; 9 ? 7 4 5 3 5 5 6 2 6 5 5 1 + / 7 6 7 : 5 5 5 4 / 3 0 / , / 1 . / + - . 3 5 / , , ) , , + * - , ' - 1 1 3 0 1 0 ) ( , , . + - ) + ( ) ) , , - / 1 / , ) - . * , + 0 + . ) . + ) ( + , ( - , + - ( ' $ # ' ( , . / , + & + + ' $ & ( , ) * * ) - * * $ $ * ' ) * , . ) ( ) ) $ % * & % " $ ' ' , ) ) ' ( ( + - / ) % & + ' # ' ( ( # - ( ) ( & ( ( * ) * ) & ' ( + % % $ % ) " # ) % # # ' # " # % " ' + ) + ' % ) &    % & $ # $ $ $ & &   "     ! $ # " # " $ $ # " # " ! 
+   " ! !   # #    %   ! & % " " #  !      " & #   
+  
+ ! ! !    $ ! 
+   !    
+   # $ # #    !   !  ! 
+ 
+   $ ! "  
+ 
+   #   % # % ! ! !      ! # ! " # % " & & ' "   ! 
+ ! " # " # #   " ' # " # " " 
+ "  # " " ! %    $ & !   & !   ! " $ ) % " ! # $ % # " 
+ # % " " $ #    #    !  # " & %   ! " % % " % $ # " # 
+ " ) & ( $ % ' $ & ' $ 
+   
+ " ' !  " 
+ ! 
+ # # "   
+ 
+ 
+                                                                                           
+                                                                                                
+    $ " ( + - , , 2 - 6 7 ? = C B > D D F K H E D A B D F L F I H F D D F J L I I H K H L G J F H N H B F H C H G I K L I C J F E I ? E F I F E I E A G C B J K G K D A > H H B D E G E F E G > = ? A A > @ D A < ; ; < B @ @ = @ > D = D E B G E C A D G H F E B C A < > A C D G ? ; < C B = B < ; @ A = ? C @ C B ? > : : = @ B ; = @ = ? ? = @ < E A A @ 8 6 8 = E B = ? : A A < > ? < ? C @ > ? > B @ 9 < A : : 8 ; 9 9 ; ? < > 7 : 9 : : ; ; ; ; < < : < ? ? > ; D < 7 ; = = @ ? < C C > A E < B D 8 > @ A ; < @ ? ; = A @ F C A @ A < 9 ; @ ? @ B ? = ; > < ; < = 8 8 = = ; ? < ; < 6 8 = ? : ; 9 6 < = < < : ? < ; 9 8 7 < : > < : 9 5 8 ? : ; 9 : 9 ? = 7 < < 8 8 8 8 : : : 9 8 8 : 8 < ; 9 7 5 < : 1 4 4 : < ; 9 ; 9 . 0 1 : 6 5 2 5 7 6 4 0 1 4 8 6 4 2 7 4 4 0 2 3 2 . 3 / 3 4 1 ( . + 1 0 + / 1 . / 0 . - , , , + / , . / * . ) 0 , - , , + - , 0 ( ' & . 1 / . + , - - ' * & ) + - & ' * ( ) - + * + , ' + * ( * & ) ' * 0 + ) ) ' , . # ( ) ( ' ) ' ' + ) , , ' * ) * * , ) ( 0 ' ' $ ) & & ) * ( , * * ' ' ( ' * ' % ( ( % % % ) # $ & ) * ' ( ) * $ ' $ ' + % ' % % ! & ( $ ! $ # $ ! " ' ) &   ) & # $ " ' ' & $ % & . ( % " ! $ % $ ) ' % $ $ "   $ $ # # $ $ % & # & $ & ! ! ! $  ! # !   # $ "   % "    " % # 
+ 
+ " " 
+ ! % " # ! ! #          
+ # !   ! ! # 
+ # 
+   
+  " ! ! # # ! !  ! " % 
+ 
+ 
+ ! 
+     " $ # $ $ ! !   
+ 
+ 
+  ! %   ! ! # & $  
+ ! " # '   ! ! # # % ' # # " !   #   # # $   $     ! # !  " $ ! % $ " " ! % 
+   $ ! ' %  # '   # " "  ! ! $ $ $ "   # " 
+        ' % # ' ) # #   " ! " % $ ! & $ $ #   %  
+ 
+     "   
+ " " " % " & ! 
+                           
+                        
+ 
+                  
+   
+       
+     
+  
+        
+                                                                                               
+   ) % ) % * / / 6 / 3 8 A = B F < ? E I J F C B H C E N O J J H O J J M J L G G G D F K H H I F K K E D D H K E I E F H E K I F L E G F L H C D A F D D E D N H H E A ? D E B @ = D J C A B E F G H C ? @ C A < ; ? > C @ @ @ I H ? A B H B B E B D F G C A D F ? ? < B = @ C F D : ? = B B ? = @ < @ B D D D ? C C A < 9 > ? D = < E A ? E B = 8 = < C 9 8 < ; = : @ < @ = @ C @ > A C < ? = @ < B C C C C ; ; < 7 < ? 9 6 @ = ? 9 5 9 : > < 8 9 : < = ? = C > ; ; ; = ? ? < = 8 8 B ; 8 ; A > > @ E > A > B > ; D ? = @ @ B B D A ? @ = @ A G E @ @ @ A @ C > : ; > < A > ? ; < > A = ? = E > < D = < > = < : ; = = ? @ A 9 8 ? ; ; ? : ? = = 9 9 9 6 > < : 8 8 7 9 : 7 8 6 = = : 6 9 6 7 8 : 9 5 5 8 5 7 = 6 7 8 9 6 6 8 4 : 9 < ; 6 7 3 6 : 5 4 5 2 : 8 5 9 4 6 2 3 3 8 5 0 / 3 0 / 3 . , ) 6 1 + . 2 0 0 . 2 + . 0 7 - . , , ) * . . - + . / . + - + / - / / 0 / , 0 , / - ( ' % - * * . ' + * , , - , / + ) ) ( - / ( * ' ( ( + * ) - ( ' ( % , 0 * ( ' % * , / - ) + + ) , + , * ) , ) ' & / * & ) ) ) * , ) ( % ( ) ) * $ & ( & ( & ( ( % & ) ' * ( " % # % ' $ ' ' & $ $ $ ( & ( # % % # ' " $ ' & & & % ' % % ( " " $ % ' % ( & ) ' " $ $ ' ( % $ $ ! $ ( ! $ ! $ # % $ # % ' 
+   #  ! $ ' & & !    #   ! " &   
+ ! # "   ! 
+ "  ! $ $ 
+ $ !     !  $   " "  #  "      !      " $ ! # &  ! " " !  
+ 
+ 
+ 
+ 
+ 
+ 
+ # "  # ! ' $ % %   "  !  ' & #  ! " #    & $ #  " % $ " "   $ # "    " 
+ $ % # # ( & 
+ 
+   # " 
+   $ & $ " %   
+     ! # % # " ' " # 
+ 
+ " # "    ! * ' & # # " " ! 
+ " & $ & # # $ ' ( #   %    ! " ! " $ $ $ " # ! 
+ 
+ 
+ "   " & ! & ! ! $   !    
+                                                    
+    
+     
+                       
+        
+                                                                                                 
+ " % ' ' ) ( + , 2 1 2 9 B > A B F A H F D I E C D A C M G K L I G H I J I I G G M F F I O M I G J E C @ I L L E D I O J J G K J D C B A F H J H C C G D A > I K L I B ? B H I E I C C B B @ F C H K G B C D D F A @ ? > H I F @ K C A A H G E I E H B F K I C @ A B D B A B F C B ? E A > ? C B A A ? @ F C @ < < A > > ? = A ? = A D G B B A < < = ? A @ A A @ < 7 > > A E A @ > = > D 9 = @ A @ B A @ = C > = = 8 @ ; < 9 : < : ; = > 8 ; > @ > 8 < ? ; A D @ < : > @ A A ? > 7 ? = 9 > = < = ? < B B A A E B A D > B A > @ D = B A B A F = A A D @ B C C B : ; > B < B = < = ; < > ? ? ? A = C B ? > ? B D D ? : ? B > < @ : ; = B ; : = = > ; 9 = : @ ? ; : ; : : 8 6 : @ F = 7 : : 5 9 7 : ; : 7 5 5 ; = 8 @ 7 6 8 9 6 8 8 7 8 9 3 7 5 7 9 7 / 3 / 0 1 7 5 2 7 4 6 2 9 6 2 1 / 3 / 0 / - / 2 0 - 4 / , / - - 2 3 1 6 . - 0 * + / , , % ( 2 1 1 / * , , / 0 5 - 0 + + + - / , - , 0 / , + , * + - * * . + , , . * - - - , & " + * ) , / ) & ( ) + / 1 2 . ) , 1 . , . * + , $ ' + ) * ) ( ( + . & ' & $ ( ( + - ) ( ) ( ) + * * , + % ' # - * + ) ! " ) & " # & * ( ' & ( ( ) ( ( ( * ( * % % " ! ' ( ! # & ( # " % - % % $ ( & % $ ' - % ( % % & % $ ' "   & ! & $   $ % # !   $    # # "   
+   "    
+ % $ $ 
+ ! "   " #   # # % 
+   
+ " " " 
+   #  ! "   # # "   # ! 
+ 
+   $ " " ' %   $ 
+ " ! 
+ &   "    ! !       ! & ! ( ! ! #   # $ % $   # $ $ ' $ %  " # % # #   ( $ % % % $ $   % #   $ $ % # " # # # ! % $ 
+  ! $ # " # ( % % % % "  # % &   $ ( $ $ $ % $ $ # ' $ % # " ( & $  % #   !   ! # % # % $ # ! % % & % ! " " " ! ! % $ " ( " % 
+      ! % $ $ # $ " #   # ! 
+ 
+ 
+                                                  
+                                         
+                                                                                                
+  
+ # $ ' * ( ' 0 3 4 9 ? = = I D B K O P D D B ? C H L M J E G M E K J L G G K O L D J G M J G I F B H F K P O C G K M I P I L I H I G E M C H H D J K D D A M O I B F G B J N O P H @ A @ B H H G J F F I E K G F C C D F K H D E A E G C I C H B @ E I L H B F G F E @ @ A D ? B B D C @ B ? = A B @ > F C C < ; @ B = > ? A = D C > C @ > B ; @ @ : 9 ? E E < < : @ A B : = < = = @ D < < ? A ? ? @ > ? = B @ @ : = ? > > > 9 ; > @ < = > E D ; 8 ? ; > ? 9 = < ? @ A = C @ 8 A ? > : ; B = 9 @ @ A E C ? D @ = B @ 7 ; = F E B < B < F E > ; ? > D ? D D 9 = B C ? < = ? @ < ; = B = = = ? 9 ? 9 9 8 > = = C @ > : ? A A C F A 9 9 7 < B = A < > = ; C < 9 @ = < ? ; = > = ? < = ? ? < < 9 ; > < 8 7 4 7 ; 9 8 3 5 4 6 7 8 9 3 4 6 8 6 9 : 8 5 4 1 - 2 2 0 4 7 9 5 8 5 8 2 8 2 2 0 * / + 2 , / . 0 0 - / . 0 2 . 1 2 1 , 1 1 . . 0 1 . ) - 2 / 5 5 1 * . 2 0 1 * / - 2 0 0 4 . + / 1 2 + - , , - / + - + + ) ( + + + + ) ( ' ' + / ) ( ( ' ) * ( - ( - . * - * , ) ) . , * . + ) , - 0 ( + , * * ( - , , & * + * + * * + - , ( , ' + ) $ & ( * - ( % % ( # % & ' ) ( + & - ' ' $ ) - ' * ) % $ % & ) ( $ # & ) & $ % ( % ' ( ) $ ) & % + % % $ % & & " * & ( # & # & % 
+ " " # # ! # ( % & % " " " & %   " % % %  !  % " "   # "   !   
+ " 
+ 
+  # % 
+  !   %  
+   "   $ ! 
+ # % # ' (   # ! ! !    
+  
+   
+   
+    
+       ! ' (  $ # $ $ " #   & % $ * $ $ ! " " " % " ! $ $ ! !  & ! !   ! # ' & $ & %     $ $ ! $ % $ !    # ! " $ & ) $ ( % ' # # $ % % 
+ % $ & % $   $ " $ # % % # # # ' # ! ! ! $ ! # & & $ # & & # ! " $ $ ! ! ! ( % " " #      % ( + ( & # $ "   " !   
+                                                                                                                                                                                             " # ' % , / . 2 8 5 8 = @ @ G D C H H B C D F I J G K L I H N L F J G H O M L H L L O L H G E G K J K F G P I O E G G G J O P J E F D A G G H G P N P J F H A B D @ E H @ ? C F E D B G F D L F K J J H E L J E G D D ? C D H D B F I J @ D = I C A B A H J E K O B E > > ; B C C C B E D ? ; ; > E C < E D D C ? B B ? B C = @ B G E B = B @ @ C > : = ; > B = ? > @ > > < > ? ? < @ G = @ = C D = < < @ : ; D = B ? C = = ? < < ; < ? 8 > E C B B ; : F ? D C C @ ? @ E = > ? C D C 9 < B F A B > C C G @ E C B G C ? > @ @ E ? > > A ? C @ > C = < B G D ? ? B @ B @ > < ? ? ? A C = A C > 9 > 8 7 = : ; ? A @ < < = A = > @ F > = < : A E D = 7 > < @ : < A ; ; ; ? > : 9 7 = 9 ; C < 7 ; ; = 9 > ; > ; : 7 ? : ; : : 7 5 4 6 5 5 ; 5 5 < 9 9 8 7 0 5 4 5 < ; 7 5 5 2 4 5 6 5 2 1 0 . . 0 / 0 0 * - 0 0 1 2 5 . 5 2 1 0 4 0 2 3 4 4 / + . 0 / 1 1 - + / * , 4 - , . . 7 6 1 . 4 3 - , + , 0 , . 1 / , ) * * % ) ) 1 , + ( $ * . + * + ) ' ( . / / + . * ' - * * ) / . 0 - , - ( 0 . . . / - . ( ( ' & + ) , + * ) + * * / + + , ) ( ( * + ' + ) ) ) % & * ) % * ' % ( , ) ' ( % ) ( ' ( ( ( ' % - - & $ % ( ( ( " $ $ % & & $ * . % ) & ' ' " $ # $ ! & & " # & & % & ' % ! " % $ ) + ) ) * ! & ) ' " #  "  ! " !   !   #  % # !   ! # "   ! ' ' $ "   ! !     " ! & !  
+ $ & $ "  " ! " ! #   ! " $ # ! 
+ " !  
+   " !   $ ' # ! % %    $ $ % $ ( ) $ & % # $ 
+ $ ' # # # # "   # $ " $ ' $ ( + ! % #   $ " $ " " # " # ( ( % $ # $ % & % % $ # ( ' " & # ' $ $ " $ "  ! $ " ! # * " $ " " % $ % ! $ % # # $ ' * ) " $ ( % ' ( "    % ' "   # % (     ! $ # & ( %   #    & "   
+ 
+                                                
+                                                                                                                                             $ $ ( ( + , / 0 6 5 7 A C > B G J G G B C I G E D F H O I L N K I O O M M S O H N M T I J O N O I J L J I G H J L K W M L H L K J L K C L I C E G N M F K M G @ G E B E ? A B J L G G D G J G F C E E D I F D B A B C B J J G G B C E L E B F E B A B E B E N M K C @ A C = @ K A ? = < A B D G @ > F A < > A A B C = D G ? A G G F B H A B < < ? > < A A A = ? C ? < A A @ < F G ? F E @ < @ @ C > = : A @ = A ; ? A A < > 6 < B : : ? = < A F G > B D A C B A A > ; @ B B = 9 A B = A > = ? A @ ; D A D E C C H I B ? @ D @ C = = D E A B I ; > ? ? B B @ = ; D C A E ; ; = D A @ = > E C ? ? B ? A = ? > > = A D B B > 9 A = C ? A < ; > ? = ? ; @ D C @ B = : @ > = ; < 4 9 9 = < = = 9 A ; 8 : 7 7 5 9 : ; ? > 8 3 4 : 9 9 9 9 7 9 9 3 : < 7 < 8 1 8 7 9 9 ; 6 3 3 7 8 5 1 0 4 0 4 1 . , - / 4 . - 4 2 / - 1 . 7 4 3 3 3 2 2 0 2 3 / 4 2 2 - - 0 . - + * - * 0 - 1 1 0 0 * / 4 4 - , * . 1 1 3 / . . ) . ) $ + ' - * ( & & * - * , - , + ' 2 0 - 0 + ( ) 0 , , . + , 1 ' + . ' ) + - 3 + . + ) ( ) ( + ( + * , . - , 2 1 - ) ( % + + - 0 % * + * * ) ' ' + ' ( * ' , + + ' ' ( + * ( ' $ * , ' , , ) * ( & % ( % ) * % % ' % $ ( , ) ) & ( $ " & % % & % ' $ % % % ' ( % % " $ # $ % % % ( $ % % ( $ ( $ & % " # ! !  % " # % % % $ % " # 
+ " $ % # " ( $ 
+ ! ! "  &          % & ( # $ % % #  " " ! 
+ 
+ #   "     # !  ! " $ * & % ) $ # ' % % & # # # & + ' # # & ( $ % $ % $ ! ! # ( ' $ # & # # % % % # # ! % ( ) ' % # # #  # # $ % $ $ ' ( # # % & & ! ' % $ $ # & ' % # $ $ ! # % % ! $ # & % % % $ " # ' ' & % ' # "  & $ ' % ! " # % ' & ! ! # # ' !  # # % & #  % #   % "   
+                                                                                                                                                                                             ! $ ' ' % - - / , 4 7 : 9 ? ? D I F E C C B H K H E E H U H L K R P P N T M M N L F K M N R Q L P O J O N L K H G D N R K F J M G H M J B J F G E G E I E K G C H H E F F D ? B C H L K J M I G I D H G K K H E = C E A C F F C M H D C H B E C E E ? ? J E H N Q A > B F E G H B D D @ D @ @ B E F E E C ? E ? @ ? = < = B A B I E G F E H @ A D ? = C F B : < ? @ ? B B < D > @ C @ A > C C F C < ; = < > > F @ = ? @ > : = 9 < ? = = G E < : C I E D A L G E ? < = ? A B A F A A B F ? ? C @ @ C C > E B D B H @ A A F C < @ G C H G I D C M F B D B E F C ? C G D A E A A C G C = ; B A E B C B > ? B A ? A B E C B ? = A E : A ; A A > C ? < > < @ F F ? = C = @ ? < B ; : > = = E > = > ? 9 9 ; 9 ? 9 ; = < > < < > 9 8 9 9 < = 9 9 8 9 5 9 8 7 8 3 2 2 6 = ; 3 2 4 9 3 5 1 . 1 5 7 3 1 2 1 4 3 4 2 3 0 6 1 5 0 9 6 2 3 3 4 1 4 2 5 1 2 2 4 7 3 / 0 0 + / - - , + 0 2 - + / - 5 0 , / , + 0 - 3 / - . + , * - - ' * - ' & ( ) , / / , / 2 + 2 + . - / + . . , . - * ) * & ( + + 1 + 0 / * , 0 0 - & % % ' * ) ( * * 0 / , , + * ( ' + + . 0 . + ) ' ' ( ( ( $ & ( * & ) ) - * & + * . ) $ + ( ) ( + ) * + ' % + / ( ) ) ' ( & ' ) , ' . , & % # % # $ ( ) % & ' "   # ! & ) & ! & !   " ! $ ' " $ * $ $ ' & & ! # ! " " "  # " ) ' $ # $ ! 
+ # % % $ & % "   # " # " #   ! # ! # ) $ $ $ $ % !    ! 
+   
+     % 
+ ! ! #       ' ( $ % & ' ! ' $ " % $ ' ' ' % % " # # # & " " ( ( & "   % ! # " ) " % ( % # ! %   % & % & & ( ) + "  % ' & $ " % # $ & # " " # $ " ' # ( ' ( $ ( ) ) & # % $ % ' ( $ & $ & ! " % & % ' & # # " # ' % $ & & & ! " & , ( ( $ $ ! "  " # ! $ % ! ' %   " '  
+ 
+                                                                                                                                                                                               % # ' , / . 0 4 8 ; ; : < > H D G D E C I J L G G I O G E O R Q T O K O Q G E E C N L P O Q J E K L J H C E D E J I K K K J D K N C H H E F K L A F E I O K G E J M E L C I E G G E H I I H F E D H G D C I B E H D C P I D H J D A F D D C A D F @ D F K I J G D E J B A F A G I H D A C J I K G D ? E D B ? @ B B B ? C < C E A E B H D A ? F A ? E F @ A D C C F D B J ? = @ ? > ; > @ A > 7 9 A @ ; A @ > ; @ > = @ ; ; A < = = @ B > < @ I E C A @ B G E ; ? C @ < > E = > B C C 9 @ C > ? D F C A ? A C A C D K D D E D E G F J E G H A ? A B B D C F B ? = ; ; C @ C E C E > @ A A > E B @ < H ? ? = D I D A : B @ C ? A @ ? ? < = @ > @ : = A > E @ B A A ? = @ = 9 @ B > ; < B 9 4 7 ; 6 = = ? : ; 8 7 ; > < ; 7 < : 7 = < 8 9 8 6 9 8 : 5 0 6 6 3 6 9 4 6 5 9 : 9 0 1 3 / 1 3 0 . 3 6 2 5 1 3 3 4 4 5 2 8 3 0 . 1 7 . 0 / 0 . / 3 5 0 / 2 3 2 0 / - 2 . - 1 1 / 0 - , . 1 , - + . - / 2 0 * - + , , , - + ) , , & % $ ) ) ) . / + - 0 , * - + & - 0 , * ) ' + 0 - , - 0 0 + 0 2 - , / - + * ' ( & + ' ) ( ( - 2 0 , ) * 1 . + - , / ( + + * . ( ( ' ' ( , + & # + . ( ( ' * ' ' ( % ' % * , ' & % ' ' , ' $ ) ( ( ( * ) , * + + % # ' ' # $ ) # $ & ' # ( + ' & ( ) ) # + % ! & ' ' & & ( " % # ) & #   "  " $ # " $ & $ $ $ # #   $ " 
+ "  " " $ & % " #   ' # % & " & ' "   # " # 
+   ! 
+ 
+   & !     # # $   " ! 
+  " % ( ' # ! " $ ) # ) $ ' % # # % # "  " ! " $ & ( # # % ( % $ % ' " $ $ $ & ! * ! % ' $ # ( ' $ % $ * % $ # $ & % % ' & $ % ! $ % ( & " ' # $ ( # & ( ( ' ) % ( * ( $ % % $ # + $ $ ' $ & $ & !   # ' % * , ( $ ) ' ( * , ( # # $   ! " $ # " # % & ! # # ! 
+                                                                                                                                                                                             ! 
+ # ' ' . / , / 2 3 : < ? < @ J I C G D H D B M O K J I K N N Q Y T O O M O D D I G M K K K L P M L L K L J G C H F K K E L C B A J C E D D G M F B F ? B H F E D F J G F B H J J M I C E D G A D D J P E @ D E D I M N J N B J L D > G D H A @ ? D G G E I ? > J I J F E A E B E J N H I D E C H G F E G D B > A B G C E J B B B A D E H A A B D D > @ @ C B C E C D G D = < A A B > < > C > = ; @ = E E B < : < = @ @ B ? > G B ? ? B D ? @ C C = A C < < C E B A C F @ = @ > @ > @ G A A = @ B C C G @ > B : ; C E I D I F D C @ D E @ D H G I @ C B D B @ C E @ ? A F C = B H H F E A @ > A B @ ? C D D D B G D E F E B B @ A A C A < @ ; < A = C = D @ = > ? ; = B A = : = @ ? < < @ ; ; ; 7 9 = ; ; ? = : > ? @ : 9 7 ; ; 8 @ : : > : < : < 9 2 7 8 : 9 8 7 6 1 3 6 7 3 0 0 4 4 2 4 . 4 8 8 : 8 7 ; 5 0 0 1 6 4 2 0 4 2 3 / 2 / , 1 0 2 . - + / 0 7 . - + - 3 - / 0 5 6 / * . 3 1 / 1 5 . 3 0 / / - , - 0 . / - / ) + ) * + + - - / 2 / ( . ( ( + , . - - ) 0 ) , 2 . * - 1 2 / 1 2 / / 3 + 1 * + * ) ( ' ) . ( / - , ( ) ) + + , + * * + * + , , - + ( , 1 , ) , * ( + - + * ' * $ & ' ) ( & , + ( + ' ( ' + ) " $ ' ) ) ' ( ( ( ( ' ( ) & $ ' % & " # ( * % % * $ ' % * # ! & * % % & # ) # % ! " # $  " & $ ! % $ & ! # ! $ ! # # #       !   % $ $ " $ $ & % $ $ ! ( & $ ! # " ! ! 
+ !         " # "   # $ $ # ! "   
+   " " #   % % * ) ! % $ " % # " % $ " $ ( ' % % % & # % ) % & # % % % # # ! ! % ) % $ ' # ' ' # $ " ' ) % ( ' ) % ( % # $ & # # ( ' % * & % ' $ % % ) ' ' # % $ ( $ ' ) % ' ( $ $ % + % & ) ' # $ $ $ & ' ' ( & % * ( % # , %   % $ # % & # ) #  # # ' $ $ "                                                                                                                                                                                              "  & $ ( + . - 3 1 5 6 = < ; @ E @ E H E H E G E O L H H K K I J L O Q P O L K L K K J L R F I K P J G K M L C C O K H H D B G D C H G D C H D I L G F C E G J F M N J C D C L L L I E G H H F A ? J O K L I @ G C C C J N N G M J D @ K C H A A A H O K K G H @ E K C F F H D F G G J D J G J D D E D E H E C = < D I E D @ C @ B B B D @ ? @ D F E A ? B A C ? > ? ? ; B A E H A ? @ ; B > : ; > = = @ A A ? = > = = B @ > < A A > B @ B = ? ; ? D D A D C E @ D ; D D @ > C < A > A I E C > D I E C A C F D I G J I G A C H C B @ G E @ E D B E B A @ H D B C ? A A E J I D A A I A ? < = ? = ? A @ A C > A F C C F F I H G @ C C E < = @ A E D ? @ B B C > ? ? ; 9 @ @ D 7 = > ; 9 ; @ ? C > > > ; 6 7 > < A < = ? @ 7 ; 9 9 6 < 8 9 7 7 : = ; 6 4 6 5 2 2 7 5 7 6 8 5 6 3 2 7 4 6 6 6 0 1 7 : 7 4 3 8 4 2 2 1 9 5 2 1 0 5 2 0 2 / 2 1 3 1 . / 2 / - 1 - + + 4 4 3 1 / 6 5 8 . 0 , / 2 5 1 0 1 , - 0 - 2 , 0 * 0 4 - ( ' ( ' + + , / 1 - - . 3 - + - - . . + ( - , + , & ' + 1 3 2 0 , , 2 3 ) + - . / * ( ' ' / + ' 1 * * , + - . / ) * ( * + + ) ) ' ) ( - ) ' - / * ( % * + + , . ( ' + ) ' - - ) ) ' * + * ' * ' ) & % * $ * * $ + * ( $ ' ' ' ' # & # $ $ ' ' ) $ % ' $ ( % # $ " % $ ) $ ! ! # # $ # $ & ( ' % $ " ' & !  ' # % % # $ !   " " $ ' ' # & & $ & % ' % % % ' #  ! # "   !   ! " " ! " !  " ! # $ $ % & & ! $ ! " " # % $ ' $ ! 
+ % ' $ $ % # 
+   $ ( & ' ' # $ & % $ ( & ' ( $ * $ # & # # ) !   # #   ' & , % $ ) & # $ & & # " ' # $ # ' ( # & ' &   ! $ % % * & + $ " ' % # ! # & ' ( ' & & $ % ' ) $ ' ( & $ % # & # & & & % $ ' ' ( ' % ! $ $ % ' ) ' , ) # % " $ " 
+                                                                                                                                                                                               " $ ! % ' ( , 4 3 8 9 A B C A E G E K N G F D A O I H I Q J J O O Q Q M L L L R J J G P Q Q N P O T K D C F E G J U Q D C C H G H E D F M F I A F F = G P K I H L Q D B D H I E G J N M F G D D G C E I H I G C D F A A C G H C J E B G N J M G C M I G K I M G E F B A B E G I L D G H L P O E > B A K D C C = = @ H F D H D F J G H H @ ? < ? > ? D @ @ = @ @ < > > @ ; D C H ? B ? < C C ? = < ? ; D = > > ? ; @ A = < ? ? ? ? A A E A A A @ @ ? C ? E D D = ; : A G F A @ = A G E E D L B D C E H A D H E G G L H H F H K D C C I G G D B B G B B < C @ C B B < B F H I F > < D H B > B G @ F G H F @ D = C B A B A K L M > > ? A @ A D K L D = ? < A @ B ? A A ? < A C > > = > 9 = 9 < = B @ D = ? A = 5 : 9 > < C 6 6 9 7 < > 9 6 9 3 8 ; > < 5 5 5 8 7 7 ; < 9 7 3 8 5 0 3 4 8 7 6 3 0 6 8 7 7 9 4 - 2 3 1 4 3 4 8 3 3 + 0 2 4 7 / 2 , - , / 2 2 1 2 2 / 3 3 1 1 4 3 3 3 / 3 - - . 0 1 - 2 0 ) 2 - 0 / . / 0 + + % $ % # ) + ( 1 1 0 , - + , , / 0 1 / , + , , , & + ( ( . * . . 0 ' , / + , 0 * ' ( * + ' 1 - 1 - + , * - , + , & & ' , - + * ) $ # ) + # % - - + ( * - - 0 + * ( , * + ( ) * * ' & * ( ( ) & ) + + ) # % ( ( ) ) ( ) ) & ' % & & ' % ' * % $ ( % $ ! # % ) ( & " % ' $ " # ! & " " " % ( " #   $ % ( &   # " & ' % & # & # $ " " & ' ' $ & ' $ % % % $ ! # "  
+ $ " " !    
+   %   #   ! " " ! # ' "  !   % ' $ # # " # " $ #   %   ' & $ ! !   % ) # & ' % ! & & % - ' % # $ ) $ ! ' # # $ " & ( & # $ ' $ ' %   $ ' % ' % & $ & + ' ' % * & & " # # # " % $ $ $ ' % $ * & $ % & , & # ) * % & ( % + + * " % $ $ ) $ % ( ( ' $ % % % % $ % 
+ " # * " ( - ) # ! # " $ " 
+ 
+                                                                                                                                                                                           
+ ! $   # ' * . 0 3 4 7 9 ? ; ; B G F C E J G G C L J L O X R Q S R Q L Q R P K P L J J I K S R O K N I H G I R J M P O L K K H I O O L H L H L M D G E D E H M H D D G I I E L N D H L P J H K B J E C G E E E E C E C G D K O J E K I H G H L H E F J F I G J M L H J G C A E C J D J K H K O J G A ? A J G B C > @ ? E G D D I B E C C E D C < C D = < ? @ B ? D A E B ? @ D > A ; A D = A E C E F ? @ C @ E D 9 = E D B = ? ; A ; I C A B < A @ : 7 : @ C @ B B B A = < B A = B E K F ? @ A @ M J F H D D G C F H I J G I K I H C C ? G J H H G A E L E @ ? D @ C C @ D @ F F C C A A C @ I B H B A E D ? I I A A A B C D A B A H D D ; > F J B C ; B ? > ? E ? D ? B > > B A E ; = 8 < : = ; > E F ? @ > = > ? ; < 9 8 7 7 8 6 8 3 4 9 7 8 8 < ; < < 9 ; > : 9 : 5 ; 6 ; 7 3 ; 6 @ 9 3 2 0 2 9 6 5 7 6 3 0 0 2 * 3 2 7 5 4 2 . 1 < 7 7 2 0 0 + - , 3 6 4 / 0 . 2 1 4 0 / 3 2 2 - . 0 . ) , ) + 2 5 / 0 - 2 / / / - ( , % ( ( * ' / , 0 , 3 + * + / / 0 0 2 . - - + . - + / ( * + ' + + ) . - - , + + ) * ) * + . 1 ' + , - - , . ) + . $ & * ) / , * * * * - + ( # + * ( ' ) . , + ' & ( * - . + ( ' * / ' # $ ( + * ) % ) * + ( ) , + . . + ) & & ) % $ ) * ( + ' ( ( ' ' " ! ! & # % $ + ' # $ & $ % " " " # & ( " % ) $ # " ! " # ( " % & $ * & " " $ ( & # $ $ % " $ % # ! % $ "  !   " #   
+ %    $ ! ! " !  $ $ $ $ # "   #   " ! " % # * $ ! " % % $ & $ % % % " & % $ ! # & & ( $ & ( # " ! & ( "   ) " " ! # & # $ # & % & % % " $ $ $ & % $ % ) # $ ) & $ " $ $ ' $ # $ & ( % $ $ ' $ ( # $ ( ' ( $ % % & ( ' # % & & " ' # & & ) ' # # $ & ) & & # # # ' %   # # # + + ' # $   ! " # % 
+                                                                                                                                                                                           
+ ! ! $ ) % ' , 0 0 8 9 9 : = < B P I J H L E F E N L F L S P Q H L I S I L O P K L N M S I F H I L J L D K L J Q J G M J O O K H P M S J K G M J I I J K I G H I O I H I L J A E H I H F I I J B C C B I K P M G H @ H E D C I H B I E J J N I H L K C I K E G H F F K H D D D G J F E K L I H H K G G E D D < ; @ D D > A G H K F C D D B B D D A H E A ? 9 B E F E @ A A H H ? < @ B F H C E G B @ < A A ? A D 9 A @ D ? > B = E @ D F @ D @ C = < : ? ; B ; A D B ; = B G B C A < J C = < B @ H L D E G G E E J K J G H B J J J F H G F G E C H C E D H C ? ? C A A C M ? @ E G E E D ? A E A G B E C B @ H G : > C C A > < ; @ E = A C ? D G D E ; A ? B ? B < B < < ? C K D D = > 8 A > : = = ? > < ; : @ C B ? 8 ; 9 < 7 9 ; 5 0 2 5 5 8 9 : 7 4 < > @ > 8 7 5 5 4 9 9 6 4 8 2 7 7 5 5 / 1 7 3 1 7 3 2 . / 4 . - 1 1 4 0 / / 3 5 2 . 3 2 0 + 1 0 0 7 5 - + , 1 0 - 2 5 3 3 4 . , + , 1 / - / 0 0 - 1 - ( 0 / 0 * * * * , ) * ) , + 1 , ' ) ) - / * . * ( ) + . + . / ( . & ( * ( , / + , 3 - ) , + & + * ( ( , * ' . ' - , + ) & ( , & ' ' - + * , + ) / . * ( ) + ' ' ( . - , ) ( & $ , ( ( ' ' ' ( $ ( ( ' & + + ) & * ) % ( , * ( ' ' ( ) " # ) ' $ % $ & $ $ # ' ( ( $ " " % ' ' ( ' # " % " " $ % $ # # " $ # % $ " " # % % # & " ( $   ! % !  ! $ $ ! 
+ "  
+    !  $ $ # " ! $ " " 
+   & & $ (  
+   ! % & # " ! ! %   
+ 
+     ' % & # % # $ % ' # % $ !   ( & !  ! % & * # ' ' " " ! # * (   % 
+ # 
+ % ( & % # " " " " # # ! $ + $ # ' ( &     " " $ $ " ' ! $ $ ! ! $ % ' ( $ # % % ! % $ & % $ $ ( ( # % "  % ' $ ( $ ' $ # ( % % & ( ( & % ( ' ' ( & !   " ) + $ ' $ # ( % #   
+                                                                                                                                                                                           
+  ! " # # ' * 3 5 6 > @ ? G K N K N E L G @ D G M K K R V N M G I P O J I Q P O N J N S N J G P L J P K L I J F H G I J N L N H N E H I I M J F G J L H E A F D D I @ G P J G I I E F K F I G D E F L Q J L M L H H ? B I D F C K G F A F J M M L I J L N F G A @ C G C D B J J K H I N P O F G F ? B E D @ F @ C C @ E G D @ ? H @ A A H J D C H H K ? E D ? F F D A = H H A @ C A > > B G @ B C B @ G E E H ? < B C > B A F A G F B A B @ ? A > > ; ? A > A B F B B A D E E F E A G D A E M E H C E G I K K J I I I J N E G J J L G G L L M G @ E E F F E A > C F D C E ? G K G H E D C H E D L D D A A @ D > < < ? ? B E A D F D D B ? B H ? B A @ D ? C B 6 5 ; 8 C ? @ > ? < = E ? F ; > @ > > 5 8 < ? @ B @ 9 8 4 9 < = : 8 8 9 8 9 ; : < < : 9 ; 9 8 @ 9 ; 4 ; 7 7 8 : 7 9 6 6 ; 7 0 2 5 8 2 2 4 7 5 4 6 3 / - 2 4 / . 0 6 0 / 4 1 2 / , - 1 3 4 1 / / * / , 0 + - / 0 1 5 / / . . 8 2 2 * 0 , ) . 3 / / - 0 - * + ( % * ( ) + , 0 / ( . ) ) - / + , , 0 , + , * / ) 2 . , , ' * 0 - * + - 1 + ( + * , ) ) * * $ ) * ' ( ) ) + * , * * * / , ) * , * ) * ' + ) - " ) - * ) * + ' ( , * ) * ' * & # ) - + % ( ) ) * + * % $ # ) * + ) ) $ ) + (   ( & * ' ) % ' ' ' $ % & ! % % + * & ' &   $ $ ' $ ) # ! ! % % % " $ # $ % ( & $ & ( & ! " ! ( " " $ %   
+ 
+ # " ! "    
+ # ! " % " $ !      " #   " " !  
+ # # $ ! $ % $ % #     
+ 
+ # & # ) ' ' # ' ( # ! ! $ ! $ " # " 
+ ! " ! & # % & $ 
+ 
+ " & ' $ # " #   " ( $ % % & $ & ! $   " $ ' % ( & % ! $ " " ' % " % ' # % ' ' # % % & * ' & ( & $ % ' % & # # ' $ % * $ " % ' # $ ' ( % ) ' ' & * % $ # ' ( ' % 
+ " #   ! % $ $ & # % & # ! 
+                                                 
+                                      
+                                                                                                     
+  " " $ # ( . 3 7 5 : ? D C E D M C K K J H G L I L M M V Q L G J K R S J M J M Q O N J L R O K N O P N H I M I D J P Q N K O O K D H H I I I J K H H M E K N G D G H E K F K J G G I J K L F E I K I K H J I N F J G H E J E J L J H K M H K C H H I D J J H E D E E H H G D G K D I F N L @ @ E K I L = D E E ? C E I F C A A @ C ? D F D D E D I B A ; D C E D F B : K I B < K I ? = C M K E ? G G H I A D C ? C B = D < E > ? E > B E ? = > D A B D < = > : ? @ B K E C > D G G G E D E K J J C L J N R R Q K H F J F D D I G J B I F H K G D C J D H D ? < @ C D B F E E B H H D E H E C I G J F > C G D @ @ F > ? A C G G F J L @ @ A E > @ C ? D > D : 9 9 ? < B A = = A > C D B H ? B D ? ? = = A > = @ @ A < < ; A E 9 < 7 = = = ? ? 8 A A 6 A ; 4 9 < 9 < : > 5 2 4 < 9 < 9 7 8 3 7 7 5 3 : : 2 5 9 5 2 1 0 5 6 / . 0 0 3 3 4 2 * - / 2 ) . 0 0 0 2 , 0 1 0 0 0 / . 3 / 3 - - 0 / / 5 , . ) - / + - / - + ' ' , % $ & ' ' + - * ) * - ) 0 * , ) , 1 + - + ) 0 0 . - - ( % ( ( * 2 . , ( * * / ) ( * ) ) + + ' + ' ) * ' ) % ( + ' ) , + / , ) , 2 * ) ' - ) * ' & ' ) ' , & $ + + ) ( ' * ) & ' ) * ( $ * $ ' & + ' $ ( & + ( & % # $ ( $ % ( $ + + % $ $ ' & ) % % % # % $ " + & % #   %   $ & ( # ' * % & % $ # " # $ $ ! * ( % # ! " # $ ! % ! ! 
+     
+ ! % # #    !   $ ! ! # $ 
+  !  !    " $ " " 
+ 
+ 
+ " " !   ! $   #   ! ' $ $ ( $   % ! # !   " # !   ! ! ! " " # " % % $ " % !  $ ( & # " ! " "   % # ! + ) % " # % $ $ # % & % ' " " " $ ! # # ( * % # " % $ # $ $ ' + ( % ) (   $ $   # ' ' # ! % ' # $ # ( $ ) ' # $ ( ( ' $ *   # # & & " # 
+ "  $ # # % $ % & & ( # !                                          
+          
+                    
+        
+         
+   
+ 
+  
+                                                                                                  
+ ( ' ( * 3 1 6 < C C A H K N H J L K L M P R H R Q S O M M R S S O T S R Y R S S T X Q P R L V Q Q K N Q J C M P N T H N P Q L K K K J M M O K I N I O P H J O S M K L M G Q S L J W N O K G K K I N I P P I E C F I M M L R O L O I I P K O M J I O K H D K K L G Q K O F J C E J G C C L J M I O F F E C B E N K D D G B = D D D J F E E D J C G C B E B D L E ? F D D B E D E E J L J H B A C E D B A @ F @ B ? E A C B @ C B D ; : ; B D ? > @ A C > = E F E C E A B > D D F G I E K K L G I M L P M N O S N F H J H G E F C C I G H D E A K F D A E F D I E F J F @ E J K P J G K A C > F F G L I H ? A C H D H K E I I G D C L G I F B F C C F A A C F A A G A A = A B E E J E A ? ? B ? ? A > = > B > < 9 : @ = B 9 C D = ? @ > = : > = = E > 8 > < = = ; = < 7 4 4 6 8 7 6 = < 6 8 8 7 6 8 3 4 4 5 6 5 2 4 4 5 - 1 1 2 6 4 . 1 6 1 / / 1 3 5 3 / 0 1 8 2 4 0 3 . 0 2 1 1 . / 5 2 0 . 1 2 / 1 - / 2 , 3 / * + ' & - 0 - 0 - . + - 1 , 0 + + 2 . 3 + / / - . , . - ) + ) - , + ) - - . ) ) - ) - * * ) 2 + , - + ( ) & * & ( . ) & * . * * ) 2 1 . - ' ) ) / , ( * - + * ) ) , ' ' ( + - * # & . ( # % + ) ' ( + ( ' ) % ) ( # ) ) # # " ) + * ) & & ( ( , ' $ + % ( % ' % ' ) % ' & " ! # % % $ $ ( ( ( & $ $ % ' ! " # # ' % & ' % % $ ) !   ! #    "     '   !  $  " # ! 
+ $ # # " " "  ! % ' $ ( !   " # # $ & &   $ $ #  # % & & ! # ! & % $ ' ' ' $ ' $ ! # " & % # ! # 
+ " % $ (   # " # $ $ % % # # & & # ( & ( & $ * #  # ' $ ' $ % # & % # ' % % $ ' " ' ( % & ' ( ' & & * , * & & $ # & ! ) & # % # % % % $ * + ) & + ( # % $ % ! # $ # # $ # " " # " # & ' ! $ % # $ # # 
+ 
+               
+                                          
+             
+        
+       
+       
+ 
+                                                                                              
+ !   ! % ' & / 4 2 7 = E F C G G M G H O P S M J L O T Q S T M V X S P P P P S V X V U S V N P M J U O H N R M E E R Q S G J L U R I G I M L J I K K M K H H K G J O Q K Q N M L R M J E Q M M O L E K R Q N S J M E M K J G E L P K L M I L G J N M P K I I I N K L M I K I F G M J I E L D D G M Q I N C F D A H G M J H D G E E E E C I K H G B E E I D C A > H F E ? D H C B D F E D H @ K E D D F D B ? @ F D B D ? B ? C A > E G J A ? : D F D @ > @ E B = = A D F B D B E M C N H H H J D N L F N O O L J O Q P H K I I N L E A E G M K I C M O M J B D A E D = K I C B H H J R G I F C E D = G I O J L D > C I M F H D G I C @ H G D H E A F E G F E H H G F > D ? E D D H D @ G C A A B @ G B < > ? ? F B = 8 : = < A > A C = @ B < > 8 ; @ B C 7 8 8 ? < < 9 : 9 < 8 7 4 5 5 3 9 7 4 : 9 7 5 6 8 3 6 4 5 3 7 8 7 9 9 5 5 . 5 2 5 3 2 / / 2 3 1 5 1 5 - 1 3 2 5 1 / * 0 1 2 5 1 / 3 2 / 4 3 0 1 1 9 0 , - , / ' ) ( ( ( / , 2 2 2 , - 5 0 1 1 - 0 0 . + 1 0 / / . . * , + + 1 0 + - / * ) - * - * 1 . * * + ) ) * - ) - * , ( & ( + + . , , ) . 1 . , / + + ( - - 1 / . , ) ) - + ) ) , * 0 ( ( ( , , ' ' * + , . ' ( & % ) * ) ) ) ) ' + & * + + ( ' ' $ , & $ ( . + & ' ) ' ) * ' * , ' $ ' & * # ! # % ' % ' " ' ' ) ) # " % $ ' " # & % % # # $ % " $ % "   ' #   # " # # ( ' ! " " "   # $ " " % & ( $ !   " % " * & $ $   # " # $ $ ( % $ ! % # $ # " & ( ' ' ' $ & ' % & % ! ! !   ' $ $ # ' ( ( $ ) % $ " & & & ) & % $ ' # ( % " & ' $ ' $ $ ) %   # % % $ % ' % ( ' # $ # $ $ ) * ( * ) % " " ! !   ( ( # ' $ ) ( % ( ) $ % " ) % ! % ) ' $ % & ! $ ( # ! ' ! 
+ ! ! & * $ $   ' # # 
+                         
+                          
+  
+      
+ 
+    
+      
+       
+          
+ 
+   
+ 
+ 
+ 
+                                                                                               
+ 
+ ! % ' & ' . 4 4 8 : E @ E J P S K I I I N S N P Y N S Y V P X T Q P O T T P V S U T U V Q N N M L O O M N H K J S S Q I O M U Q J H N I T O Q S T T K N K K M R T R P I Q Q M N O W Q L P L N N M N T R L R M N Q M L I G H I I K K F I K J M M P M J N M O K M I N K J Q Q M J L J K O I N Q N N H L D M M F Q K N H N N G E D H F I H L F F G C F I D G E H D O I F M I I B H H K K D > G D C D I F I I B E I E A C C B I A B C H I F @ B G C F @ ? A B = ? B G G E H M L I H K L K F L J F P M J P N H M O O M K M H I J O K H L L G K H H F Q O K I I H E G B F J E K M J J E Q K D F G H I A I D K G J J F F I K N H M K D M E K I G K J I A ; D I E I E F F H B E I A I H H ? B D B D D J D E D B C D A < < > < @ > @ F I E < = 9 : 9 ; = < A C ; ; @ C B = < : 7 ; = 6 5 8 7 5 5 7 : ? 6 6 6 6 : 6 5 4 1 6 ; 9 / 6 5 0 1 3 4 7 6 3 3 4 6 2 0 / / , 3 1 1 3 3 7 3 1 1 0 3 1 ; 3 / 6 1 3 4 0 3 1 3 8 0 * + * * 0 * - - ' . * . / 0 ) 0 1 7 1 6 . - 3 2 / 3 2 2 6 . / 1 1 , * , / , 1 . 4 + 1 1 , . 0 , , / . - , . / 1 ) + , + + - ) / 3 * ( ' 0 2 1 + ( ( , - * + ) + + ) ( 0 - ) ) ( * * . + * . + ) ( ' - ( + ( * . ( ( + * + * . + ' * ( * * ' ( ) ( $ $ % ( & - * * $ % " ' ) ( ( & % ) (   ' & & # $ ' ' % # & % # & ' ( $ % ' # # $ $ ' # ' ' ' ( ' ' $  ! $ #   # & ' $ % $ # $ # " # ' &   $ % ! ! "   % $ ' ) & % % % $ !    $ & $ # $ ' ! ) ! # & ' % * $ ' ( # * ' $ % % $ # % $ ' % & ' $ " % & $ ( $ + 0 + % " %   & $ $ $ $ ' ' ' ' $ ) ) + ( % % % ! $ ' $ % $ # % & # + ) ( + & % $ $ ) + & ( , $ * & # ( ( * ( # $ ' ' + # % % & # $ &   % ) $ # % $ #    # ' % ! # $ %  
+ 
+                                         
+                   
+                                
+ 
+                                                                                              
+    ' # ( ) / 0 4 9 < @ G P J G M M K J J Q R U R V Q U U Z T V U Q M V V [ Y L R S Z R T U T W [ U S M P U S I K T R O N Q R S L N O S M Y Q O Z \ Y P M O S Q Z T P P I Q T O Q Q P H J O L T R N P P N O P T S U Q P N K J J F J O K K Q G I P N K O L K L K P P L R R M O R O Q P L I I K J L J L L B P H M O M J N K J E K H F J J D L O Q N N I G H E @ F I O N G O F C J J G I H G @ G I ? @ G K K J E B A B E E ? C D F J I L L M G I G A B D G D I B B I E J G I D P K B I N E G J I G K M J I M P W M R H J O I E D G M M Q J M N G L O P P Q J K I K H G G J L Q S K I M H N I F E H H G E G O P G Q M M K J Q P J L J I M K F K N J K B H I I O G B C D C A B C F F N I H B D ? A C G D E C I C C C ? < ? < < B D C ? @ ? ? A < < @ ; < ? ; = ? A G D ? @ > 9 9 9 8 7 @ 8 9 < 3 8 > 5 : 8 8 8 9 8 6 4 9 4 7 3 < 5 2 / 5 4 4 6 ; = 5 2 2 2 4 5 6 4 2 1 6 4 7 3 1 0 5 4 1 1 8 1 < 8 7 2 4 2 4 2 4 1 3 - + 1 1 * - 0 / * , , + / 0 . 0 0 / . 2 / 0 0 1 1 0 0 2 0 3 1 0 / 0 0 0 0 - . 1 - 1 1 . 1 5 2 / , + 1 , + + / + / + * 0 . . . 3 1 . 2 / / 0 , , * ) 0 + , + ) & ) ) , + ) & ) ( / 1 - ( 3 0 0 , 0 / & % % - / , + ) * ( ) ) / ) ) ) * * , + , ( ) % ) + % * * ( & % & # & ) ' & # ( & # ! # & ( % * * % & ( ( ' $ & ! % $ # ) % % ' $ ' ) ( ( ( , &  " # % % $ " % $ $ % $ ' ! $ ' & ' '   % & ! # # ! % ' ' % $ % ' $ " $ $ $ " ' $ ) ( * & - $ % ! ' & % ! % , ( + + % ) & # % * & ( ' ) ' ' $ & & ( . ' ( + ) & ' & # ! $ # &   & ( ( $ % ( $ ' $ ' # # ( + " ) % % ( $ ' % & ! ) + + % & ( ) - $ # - ( ) & $ ' & & & ( " & ) * % ) * & # ' & # * ( ( ' ' ' # ! $ ( ) & $ # %   
+   
+                                                                    
+         
+               
+                                                                                               
+ 
+ " ( ' ' ( - 8 7 : @ @ I P I K P N J Q P Q R O R U X Y U X T X W [ _ Z \ ] c [ \ \ [ U Q S W W S X Q W Y T U T Q R N M P U U S T W R W P S O P W X P Q P Y X U R Y G N M P O K K L L L L Q J V V P P P O O T Q P N U T P L M M M R P R L M N L N H I N L G K O W L O R U O M R T Q T S I P L K N K M V J J G K G D L Q F J F I J G H L J L S Q L G H F G C L O M J G G H F B N I H H I K D H F F C F I F E J I B C G B B ? > F I H I J I J J I H F G G J H ? B K F J I E D D F F O M G L O Q J Q N I I P R Q Q Q N Q R M K F G M R M I O O S O P O S T V J J O P S M J O L O M K L P M G G I H H I K K R O I P M D I O N M O O N L I P H H K R K G H K H J K G B O N F E E C J L N I B D B ? ? G I G > I K D H @ D A F > B < A ? : < A C A D E @ F B 9 > = @ @ @ 9 = 9 : < ? : ? B @ A 9 9 = < : 9 : 5 > : 6 8 ; : 5 9 = < 6 4 5 6 ; 4 6 1 4 1 4 4 8 8 5 6 2 1 4 5 5 7 4 1 2 3 5 3 5 ; : 5 < 9 7 5 2 3 7 5 / 2 4 * / . + , 1 6 ) - - - + / 2 5 3 - / 0 0 7 3 . 1 2 / 2 - 1 3 4 / 0 0 3 7 0 / - * - 1 0 1 4 / 0 ( - * + * 0 2 , 0 0 1 , , 0 2 / 2 - . - / ) / 0 2 . . - - - - ( ( + . / . ) , . , , / - . , 0 0 - + ( * ( + - - , ( * * + ( 0 , * ) , * + ' ( ' ( , ' ' ) ' + * ( - ) * ) - & & ( ) ( & * * * + ' & % % ) + ' + % # $ $ % ) % $ % & ' ) ) ( ' $ ( & $ # % $ & ( " # #   " ! $ ' & & % ' $ # ' $ % # $ " $ ' & ( & ( & & $ % # ( # % ' ( ' % - , ' # % ) , ) & $ ) , ( & ' + ) ) ( , ' ) ' ' ' ( # $ ' ( ( ) & $ ' + & ( ' # & # % $ & % $ & # ) & ' ) ' ( % + ) * & ' $ $ $ ( ) ( $ * ( , + % ) * $ & & * $ ) ' # % ) & $ & ( * * $ ) * ( ( % % # % . + * & $ # ' $ $ ) ( + * % ! !   !                                                                             
+            
+    
+ 
+                                                                                            
+ 
+    $ ' & + 1 / . 5 = > @ B F H P Q S R Y S U Q S T S U R W S S Y [ Z \ [ U ` \ [ _ X U W \ T ^ T Q W S W Z T S V J N Q O O P T Q T V [ R R Z R Q U L P P X V X T M N G F Q W P P I R U N T W S T Z S N N W X Q T X T Q S H R N P Q P Q Q S O O Q T S P V Q O D K M N L O P J H X Q P T U O T X S K P N R N K J G H G I O D G K E Q L J J N Q P W T K G H M D I J I L M H H H E K R J P E G D G G K F G J E K R M H H J K H J O P G D C G J P H H I H D E C G G H I H J L J E K G M O O F J K N L Q S L M J O O R Q O N P T L K G N L S O R R P U R U P T O H Q K M R S P R P T W Q O M R M L J K N L O T W S H L K M M R S M O L P Y M L D D K Q T M J H M H K G K H H I L E D G M K P J @ J B K N F E C G G J E A I G E G B E D C @ ? > @ B F F B I D = A E H B F > < = ? ; 8 ? ? C A > : ; = 9 > = 9 : ; 7 ; 7 > : ; 8 2 8 6 4 5 8 9 8 4 0 1 8 : 8 5 4 3 4 7 < 8 = 3 / 1 2 8 8 5 3 3 < < 9 8 7 5 7 5 7 3 5 1 2 . 1 2 0 . / 0 3 2 1 + 0 0 1 4 : 7 2 - 0 6 ; 5 / - 2 - 3 1 3 3 9 0 / 3 5 3 . - 0 . 2 4 / / 0 5 2 , . * 0 1 / - 2 0 - 5 2 - 0 2 1 - + / - / ) 0 / 1 4 + , 0 - . - * * + . 0 / . 1 * ) - 0 / - - 6 - . * 1 + . 2 3 / . . 0 . + - / + * - . + / ) ( ( , ) ) * ( - . + ) $ ( . ' $ ( * & ( - , ( - + ' & $ ( * - ( + ) * $ $ % ' ) $ $ ( ) ' ( % ) & ! & ) & $ ) ' * $ # $ & # % ) & ( ) & $ $ ( ) * $ ( & ( $ ) ( ' ' * ) + ' ' % ' & $ # & ) ) + 0 - ' , ) - + + + + + ) ( % ) , ( ' + % % ' ( + , ( ) & + , ) * + , , ' ) % % # % ( & & & ( , ( ' ( ( . , ' ) + , ) * ' % % % & * ) ) ) * , ) * + + + + & ) # % $ & ( * ) * * ( ) ( ' , * & ( * ' ) - , ' ( ' , * ) * ) & ' + * + % % %                                                                                                                                                                                             
+  # ( ) - . 0 0 4 < ; @ B B H R Q R O T T T M T T R U W _ V Y [ Y \ [ R M N T V T V T U ] U b U S Z V P P R Y X Q R Q J O L I O V R U K R P T P Q L O S M N Q T V R P L O P K P R Q J L P M Q L U V U O R S R T T U Q V K I M O R H K R O Q R X P U P X U P P K N R L M N I M Q W R V U W S M U S P K P K H K I N O S P K K M K N K G Q R O M M P I N O K L J M N I J J K B E K K J J M G I J J C H I F K K R P H K N K J M M J G E K F J M E I G B @ B F B O N I N P J I I G I I I F F L H G J T P L L N K P R S T S O Q P O F J H Q R Q P S X O T U S G J O P T W M N O N P X U U O L I L W O N I Q M T S N O O J K L N U T M O T N E F M J H R M L C M N T K K H F C J H J G G F M O I O B E L K L H N G J E G J E H I C D F F B > > @ > @ @ B B C D E C C > ? A < = = ; 9 = = @ B ; 9 8 < ? A > A < 6 6 : ; ? > 9 6 3 8 4 2 1 2 9 7 4 4 7 < 9 6 3 4 3 8 6 < 6 2 / 5 2 5 5 1 5 9 6 2 ; 5 7 8 8 5 9 < 3 8 5 3 1 3 6 / 1 1 1 . 0 . 0 . 0 0 2 6 7 1 7 1 / 8 8 3 . 9 6 4 4 3 3 6 1 - 1 0 . 0 1 5 3 5 2 6 2 5 1 0 / 0 1 4 2 / - 0 - . 2 5 1 2 2 0 , ' * , , / 0 / 1 0 . 0 , + 1 0 + 3 . + / * * 0 - - . 1 0 , , 1 / , ) 3 1 2 2 4 , 1 0 3 0 + ) . / 0 / 2 , + * ) ) ( - + ' & + ( ( & ' + ) & ( ' * * ) * ) / ) * & % ( ' ( ' ( + ) & ' ' * + , ( ' & * * ) ) , ( $ % + ' ' ( ( ( ' ' " ' ! $ ) ( ' * # ( ) + , ( ' ' ( ( ! & ' * ( % * ) " & $ % ! " " $ & & ) * + ) 0 ) ) * ( , - + + , ) - * ' % + * ) ( & % ' ( + & * + - - . / , + & ' ' # # & ) ( ' * , * * & + + - * ' - ) ' % ) ) ( * ' ) * ( ( & + * * * * + * + - * ' ' ' , + $ ) ) , , ( ) , & ( ) * ( ( ( + # + + ( / & ( ) ' ( ) ) - & ! " ! 
+ 
+                                                                                                                                                                                             # ' ) 0 / / 4 8 8 > A ? E K Q U P R U T Q S Q X X W ^ X X Z [ _ X W V [ T V Z \ W T S V ] Z Q T Q Y W R Q T V R U V T L V R P Q T R S T U V M P Q U P K N T U X U T P L R N Q N S J J R Q P L T P I J L L T T Q Q N Q L M O R L L P L N R V R L N M U R L T R Q V M P P S R M U U V T T P N S Z V K P T M H K N S W Q I O N O J S I K N S H I M F J J K L L M L M L I K K J G I H L O E F G H G J G G M G Q P M J I K M L N E G K S M P K N J H F D I N G O M M K J I K P M I D H E J K K K I K M R L U U P M P Q O N Q F O M R L V U R I R L S U O O O P L U Q Q N K N J N Q V T J K E M Q L M N I K P M D S O L L N N M K M O M K U M T R Q O O F H P M O M H L L H N L K H F F H L K L H E I J Q Q E M J J I @ A F D K I F K B C ? @ A @ C B C : C G B = A B ? E @ = @ < = = < B = B ? ; A A ? @ < ? 8 : ; A < > 7 3 2 5 4 6 : 9 ; 9 3 ; 8 2 1 1 5 1 6 5 4 3 3 1 8 : 9 7 6 2 7 7 9 8 9 7 8 4 0 7 ; 8 8 9 8 3 4 1 3 2 3 . / - / 0 - 0 0 / / 7 2 5 2 0 5 1 4 4 7 4 3 5 4 4 0 2 3 4 4 0 3 2 4 0 2 5 0 6 3 3 / 0 + 1 1 0 5 0 4 1 1 2 3 5 3 8 4 0 . * , ) . . + 0 2 - 1 . 1 0 - , - / 0 * + . . . 2 . . / / , + , - - - / * , / - . / . , 0 + * ) 1 / 1 , * ) + + ' / 1 + % ( ) ) ) ' + * ( % % ( ( & * + / , ) & * & ( ( ) ) ) ' $ % ) + ) / + & ( ) # % ' ) ) ' & * + ) ) ( # ) * $ & ( & % ' ' " ( % , % ( * + ) * $ " # # $ ' $ + . ) ( * ' $ $ $ ( * ) % $ & ) . * ) , , / ' ) ) * & ( ) * ( * * , ( ( * ) ' ' ) ' ) ) / + - + ' / % ' ( # " ( & % + , , * & ( + + . - * #   & ( ( ( + 2 , , - % # , , + + . * * ( ' ( ) ) ) * * , , , * ( ) + ) & * . ) + 1 0 / ) * ' ' ( $ * ( " ' ( , * & & % # 
+ 
+                                                                                                                                                                                          
+ ! ! & $ ) - - / 6 7 > @ B G L S R T R R T T R Z Z W ^ ] Y Y a e Z U V Y a Z V [ O V T U X U Z L S T V Y Y X Q N S P X Y V T M U W \ U U X V V P P T R P J Q M K T N O N U U N N U X M K P S M P Q N P L M P Q K P F K L R T P K O G M M Q P R R O O O [ Q P O M O R N N U N P K T T T V S L K Q R Q M Q T T J K Q T O L I K K N M Q O M R K E N P J K K N P L I Q O N M K O J M M J J K Q I E F F E B H I G L M O L J E I K K K I F N H H I I H J M J F F O J H L K K I I J M I E M H E J K O I S T S O Q S Q M M P P W O K P W S L K Q O K O K P R S M I R J K P Q Q R I I Q Q T S I K O W P I I J S O P S G S Q P M O Q U M G O O L Q O S O M H G K E H K R I H G M N O G L F L K G I K L I E L L O J D J H I H A A A C @ C H C C D G C D E J I B = E G H G 8 : @ ? < < ? 9 > = ? < = < E = 8 ; ? ; : @ 8 9 = > = ; 1 3 7 6 7 2 < > : 7 : 9 8 3 5 7 4 1 7 5 2 1 8 6 9 7 8 6 7 5 9 8 6 6 9 5 8 4 7 = 8 6 9 6 0 - 0 . 1 5 0 4 3 1 5 / + - 3 . 1 1 2 2 4 0 / . . / ; : 2 1 3 3 1 / 2 0 3 5 1 1 - 1 5 . 0 2 0 - 1 7 3 , 5 0 1 0 , 0 3 1 . 2 0 . 2 0 - ) . , + - 0 / 2 . 1 , . ) 1 / 1 . / * , 5 0 0 3 1 * , + , 0 * / 2 - / * . + - - / ) * - , / ) + , . + * - / * ) , , + & % ( & ( ) * ) & & & ' ) ) - , , ( $ ' ) ( ' % ' * * * & & ( ' * . + & ( ) ' ( ) & & ' + + ( ) * & $ * ) # $ # % ' ( ! & ( $ ' ) ' . , ) * ) ' & % ' $ $ % ( * * + ' ( ( % ( * % " " * ) - & " * * ) + ) & ( + * ) * % , ' $ * ) , * ( ' $ % ( ( + , ) # ( & % ) ) ( ( , ( - + / . . / + + / * - ) # " ) ) ' ( + + , . * . + ) ( * & ) ) . - , ( ) , + , + ) - + - * . ) ) ) + * , ' * / - * ' * * * $ ( ) % $ $ ( ) ( & $ $ 
+ 
+                                                                                                                                                                                          
+   # & ' * + - 1 4 7 ? D D J L P T X V V Y M Q Y Z Q [ X Y X W _ ] N N S X ` ^ X P N Y Y V Q S R Q K R Q [ R Q L J Y Y \ W T V W P T S U U R W Q V V [ R T J M L O S T N O L P N S Q Q V M O Q J J J H I L N O N H M G J O Q P S Q M R T P M Q N L L S S M N I K N T P P J R O O R N O U L N P O R K O P O M O M V O L I N T J N L M L N Q G D O Q J P I J K M I L I L P T O G N M L I J Q E N G B G E H K J O L L J M H K D L J J J G G L H E H I J N J E M L J F E L J F E I I I I F H H P Q L W U U J P O T N J K P S K N R N U M H S Q M R Q S M W P N O K U L P M O M J S V S K H I K P I M J U S N M O Q Q M O O M V K J O K N N T Q K K M K K N M J L P F B K O O J H R H K J E K M K H H L M J K E I @ E G F J G A @ E J E F F G D I G I E @ B = C F D A = F A A A @ > : : 7 : ; A ? @ ? 8 ; ; 9 @ < = ; 8 > : 3 6 4 5 2 5 8 ; 9 5 9 : 5 : ; > 3 7 ; 7 2 6 5 / 1 - 6 4 3 3 1 9 : 3 7 1 6 4 5 4 3 0 1 / - * 2 . 1 . 2 5 / . 3 1 . 1 5 0 3 4 4 / 0 4 2 1 / . 4 4 0 . / 0 4 1 - - , 0 2 / + + - 9 2 2 - 3 / 3 4 - 2 2 - . 2 - 4 0 - + 2 1 1 . ) . , - / , . + , * / 3 0 * - / - 0 . + 0 7 2 . 0 2 + * , + / * / / , / , - / 2 * ) + + - 0 / * * . ( + + , * * ' + * ' % $ ( ( ) 2 + ' ) * % * % % , * & & $ $ ' ' ) ) - * % ) ) * ( * & * & % & ( ' & ( , ) ( ) " ' ( ( $ $ ) % ! # # % ' & " ' $ % % * ( ' & * ( ( % % # # % $ ' / + ( * & & ) '   # # "   # * * % % ( & ) . ( + * + ) * ( ) ' , % ' ( ' ( , % & % ' ) * * ) ( ( ( ' & * & * , ) + ( ( ) ( , ) + * , ( ' ( ( ) ' ) % + ) * . * , ) ) ) , & ( * / ( ) . , ( ' + * ( ) ' ( ' + ) * ) * ) - * , * ) % & % ( , * ) & & ( ' ) ( ( ) $ $ 
+                                                                                                                                                                                          
+  
+ # ' . ) 0 0 4 7 8 B > C H M I P Z P P W U U X Z V R U S Z U [ W P N Q Z Z Z R S S V \ [ O Y V Q H M P P S X L Q T R W V Z T T W V U M N P T T T S W P L K T P L Q Q O P I O J Q U Q M Q K Q T N J I N Q M K I L J O H M M N S Q J Q S Q N H L L M J O J L R L N O N O T O S R N P J K O U R J J N N Q L I N K O M O I L T N O K L G K P E G I J C G G K C J O O P O K L J G D J G G L I E L I C J M Q L M H I J D K H H G L M G M G K L D A B F G I G J G D G I E K F F D K N G O E M L J K J Q Q P F C K L M S N L K M X R R J M O M R L R R O O S O S P R P O M H K M M O Q P H L Q O O J M P K O K K H O O N N H K Q S K E C G M N Q M F K K L I I N N J G D L M K E H J L M L G G J E C I J G I E H E C D A E G H I J G C D C B B H E < ? > A > B ? @ B D E < > @ B @ 9 < < < : ; @ : > ? < 9 5 : : > = 9 9 8 : 6 8 5 1 1 0 7 9 7 8 = 6 5 4 4 6 3 7 4 5 1 4 7 3 4 7 2 1 5 8 3 8 4 2 5 1 6 2 1 7 1 / / 2 / . 0 1 0 * 4 3 / - , . / , 0 1 5 7 2 . 1 2 2 3 + / + . , 0 / - - 2 1 0 1 1 . - , 2 0 0 4 / + 3 3 / 2 / / , + , - , - / / 3 1 + . . + , , - 0 / / 0 + * , - 1 + * . / 0 . - - 0 1 0 . 0 - + . + . / , + , + / - , . , ' ) * + 1 - - , $ ' ( * ) + ) ' ) ( % & & % & ) * ( % ) * . ) & * / ( !   " % ' * ' , , / ) ) ( & % " # % " # ) ( " $ & ( ' # ' $ $ ( ' " ' & % % # ! $ & & ' # & ' ' & % ' " " * % % % ! " " # & % & 0 ( ' ' $ ) $ # ! ! # $ $ ' ( + ) ) , ( ( ( % ( ) * ' ) + ( ) % & ' ' + % $ ' ( ) + ) * , + ) * * & ) ' ) ) ' ( % ) ' ' % ( ( ) # # * ( - + ( + 0 & + * , & ( ) ) ) & % ) + ' . ) / , + * + * * * - + - * - + ) , * , ) % ) ) $ ( & ) ( % % & % - ) ' * ( ( #                                                                                                                                                                                            
+ 
+ # $ ' ) , - 2 8 < > < ? G N L Q Q Q W V Z U S S T P P R W T U W T Y X b ^ Y U O P R X Y T [ [ T O P O K U U K R X T Z T K R U Q N P Q Q N O P N W L O N N N O N J M O S L R J O O N Q O J P P P L M J Q Q S S M N O I I K U W L P O N Q Q N L K M H L Q P U T L M M Q T S P U H O J M L P M L M M O J K O L E H G K K J O V L F J O H L I I G E E E K L H P P N N G C E @ G A H G G E T R Q O E L I J K E F I L J I E P J M P G M J J = B E G D D F F I G I H G E F D D H L V G I O O L O N K K R Q J G H L O R R O L G N R Q U S R Q P M Q O P R S N N L T P S N Q S R L R S N M G N M Q O M R I M M J L T Q R Q K R M P K H J I L R K M L M Q L K L J K I F J R N J C B I K H F J K H I M J K H M E F M P G F K C E H G B B = ? C A D C F A = ? < < : > F @ @ < ; 9 @ C ? < = D = ; < > A ? B = B > : ; ? @ : 9 : : : 8 2 6 9 5 5 : : : 6 : 2 4 3 5 / 5 7 7 8 . 6 4 4 5 4 3 5 4 2 6 5 9 4 7 2 7 5 1 / 1 0 0 , * 3 4 2 . 2 4 - 2 / , - , 3 3 . 0 * 3 1 0 / 1 2 - 0 / , . / / 5 6 4 6 6 . + , 0 - / 0 / . . / 0 - - . + 0 / 0 , 1 2 1 . , . - 0 * - 1 0 + - / 2 & - 0 - - ( ( ( ) , , ( + - - . , / ) - * ( + . + / - * + ) . + ( # & ' - - / - + ' & , . ( ) , - ( ' # $ ( ) $ % % ' ' * . * , & * * ' # ! ' ( * & & ( ) . ' % $ % $ % # $ $ & ( ' & ( % ' ) # ( ) & ' ) 
+   % " ! $ # " ' ' ( ' ' ' ' ) ' & ' " $   % ' $ " " $ ' $ ( , ( & $ & ' & ! % ) % ' % # ) & ) , + / ( & * ) * ) ' ' ( & ( ! + * % $ ' ( + * & & $ * , ) * & * ) # ' % ' ( ( ) ) ) % ) * - ) % % ( ' ) * ( + + % * ( ) % & * ) % + $ ( ) ( ' ( & ( ( ( ( ) - & * ' . ' , ) ' * ( * , ) + ' & ) - ' ) * # % ) ' ' ) ' ' % # !                                                                                                                                                                                             # " ( + - 1 , ; ? > A C A J N W R P O S ] V O U ] V Q W W \ [ ` \ [ R U Y Y U N M M U X W T V X T M T Z U K L R O M S T L O S M Q P S S Q Q Q S O N O N N M P M M M Q Q O X U K F J Q O O R L O O V U R Q O T Q Q P L G I L T P T P N N N N R P Q Q I R R P J K L L N U S O P N Q U N S Q S T S N R P M M K K J D H O J P P J F J O K L L G F C E G M G D F L O H E C I I J E I H D J N T I H I P L I L M P L L G L E Q J H H G D B I H H I J F J N F < G I K H L L K K O V P S N O W O Q N L L I R R N J I Q R P R G H K L P P S T P S [ V U U N R P P N R S U Q N P P P L O P G P O P I L P P M R Q M R U R Q J O S N P M P T N R V U K M K N R O P M P I @ L Q J P M B G H G L I K R R P L I L K I F H J G J L C I F B = B ? : ? > = ; C D F E E @ D D F @ @ < < ; ? A = C = = = = < < @ @ = : ; 9 ; @ ; > ; 8 7 ; 9 6 4 5 8 : 3 6 = 9 9 4 : 8 1 4 0 . 2 4 5 1 5 3 5 7 7 3 3 8 : : 6 5 6 : 1 3 3 0 - 3 / - / . 1 2 5 2 / / * / - , / - 0 / - / 3 4 3 4 . 1 1 4 6 - 1 / 3 2 4 2 / 0 . . / . 0 + 2 0 * - - * , , - . - + 0 . * / 1 - * ( 0 5 / - + 1 0 0 - - 2 , + 0 + - 3 * , - + / , + + + . + ) - . ( ( + / 0 , - ) * - + . + & - , ( , + 0 * # ) ( + + . + . ' - / ' + ) ( ' & * + & * ) . ' * ( ( ) , + * ( ) ' + ( , % ' ( # ! ' " & # & & !   $ & $ ' & % & ( ' ) #  # # ! $ * % $ & $ # ( , * ( $ " ' $ ' $ ' $   ! ! ( ! ( * * ( % & ( # $ # # $ ' ' ' + + ) ) + & ' ( . + + * ' * , , ) + % + ) ( $ ( * * ) $ $ & , ) + & % & ' % ' - - * * ) ) ) , + ( & ' ' ' ) ) & # ( * * ) , - & ' # # % ( * * ' & & ( ) & ' * % ( + + + ( ' , - ) - , - ) ( ( # ) $ * , , * ( ) ' ) & % ' , & % !                                                                                                                                                                                               
+ & ' & * / / 2 : = D ? C @ J L U Y P Q U _ Z X W [ Y Z ] Y S Y ` W Y V Q S Q R M Q P Y N S T X V V P O P K N G J L P S V ] S T Q P U Q U R T P M X S U S P U O S V L U R R Y U I G J Q T M N P L O Q O R S L T P N N N G Q K M O U O P S S S R Q T U O P V Q D N S J L M S V O L N W S U O Q V O O O S Q M R M F S I K P R S E F Q J M P K D G K M J L I K I L G I D J L L K I H I G F F I I L G N C H N H D M K O L J J M N M G C G I O J J J K M J K I J R L H S J J O O I O S P L S O Q N Q K M S R R K I N V Q R N P J G Q M J T R R X Q N Q O G M Y T S U U V N S U U J N P O P S R K N O V O K J J L U R M K N S R S N M P O R T V N O N L K P V R O K D P N L I J D L O M O N O J Q T G H L O J F H I J I E G J K B I C E G E ? : 9 = C F I D I B C E D @ ? @ = C B B > = > ? > ? ; < 6 : = 8 6 = 9 9 7 9 6 4 ; = : 7 5 3 6 6 8 8 7 7 2 9 3 0 / 4 4 1 6 6 5 4 0 2 ; 5 1 7 4 3 6 = 7 8 9 9 6 8 3 2 5 0 * ' - - / * - 2 . 3 0 . + 4 1 + 3 1 / 2 6 / 0 5 7 2 0 6 - 3 1 7 2 2 0 - , 0 1 , 1 0 , 4 * + , + - , . / , 5 * + . 1 / - * + . 0 3 0 - - 0 , + + / . , . + 0 / 1 ( ( ( % ) . . , 0 + . , 2 + ) - . + + ) ( / - ( * / 4 . , * - * ' * ( % * * ( ) ' * ( * 4 1 ' * * ( ( & + + " % # - ( & ( ( ( * , ( ) * ) $ % & % ( $ ( & - * ( ' ) & # # ' & ( $ & ' ( ) * * & " ' ' & ! ' ' % $ # $ ' ' ( $ # ' & % # ( % & " ! $ # ! % & + * * * - & ( " ( # % ) ) + - * + ) ) & # , ) , - * + + + . ( & ( * * % ( - 0 ) + & ) ) # ( " ' & ( + ) - ) ) ( & / + , ) ' ' % & ( ) * ) * * ( % % + ( # ) $ $ $ & ( ' $ & ) & * - 2 - $ % ( - - ) $ ( * ' + . ) ' ( ' ' ) * ) . ( 1 ( ( ' % + ( ) , ) % & 
+                                                                                                                                                                                              " * ( , 2 1 < 5 = > @ E J R O R Z T X Z ^ Z U W Z ] a e ` Z X V X Z W R R R V W ] Z W T Q T \ Y X W V Q N K N N V S T Z ^ U U V R W S O U K R R W W [ N R T R R [ W X Q W X R L P Q M Q N P R L J K Q R P S R L M S Q T M S P J L J L K R R S P U U R J Q X K P T S T P T S S R N S R T L K Q P N X N R K G I H K H L J M T K F M M J T L G I J M L J F Q I L M G D M J L P Q H N Q J F K J D I H L O I K N P L E J K N K H J O P S J K J G J J P O O P R M J J I L O N O P O T T M M L O T P L S R T R O M P Q P T Q M Q W M M P T Q R T O R V T M R Y S W ] T T R S X U T P S Q S O S O N S U S P Q M T T N K R Q S R N P M R S N T X W W Y K L R P X T K J N M X K J I O M Q P M K M T O G J M Q K L N H I H E H I E @ E ? I E C ? @ : 7 E D G J A ? A H B C E I D ? C B @ @ @ C @ 9 ; > < 8 8 @ : A 8 3 < < < 6 8 ; 9 8 7 5 4 5 : 7 4 4 6 4 9 3 2 8 4 5 6 8 8 5 4 < 2 6 3 7 7 9 6 5 8 : 8 8 2 4 6 4 4 . ) * 0 - / / / 0 1 2 3 + - / 2 ( / 0 2 3 : 5 6 5 8 4 1 . 3 0 3 8 0 1 2 - / - 2 - - - + 1 . 1 - , 2 3 0 1 / / / / 1 2 / * + 1 , , . , * ) . / . , . * ) ) ) - - , % + ) ) , - - 3 1 , / 0 / , * 2 0 . ) , + ) + ( , 1 + + / % ) * , * , * , * * - * * ( ( 2 + % ) , * ' & % + ( ' & - , ' % ' ) ' ( ( % ) ( $ # ( & $ & # & ' ) ) * * & ( & ) ( ' $ ' ( ( ( ' % ( $ & ( ! ! ' ' # $ # " ' ' & " ! " $ # & ( '  !   !  " % . ) ' ) ' ) ' ' # & ' % ( % ' % & , * ) % # + , . + ) ' $ ' & % ( ( & & , + - + & $ & * ' $ % $ % % " & , ( # ' $ * * - ( ( ( ) ) & + * , ) & * ( & & ) % ( * ) * ) ' # ) $ # * & ' , * * ) ( ) * ( ' % ) + & ( , % * * ( + * ) * ) * + ' % % # & . ) ' ( $ "                                                                                                
+                                                                                             
+    & ' 2 1 2 3 7 = B E D H K J M V Y S W ^ [ V [ c \ W ^ Z Z a W W W T V [ W W ^ a d ] X W V \ T U S Q U P R K K R Z [ T R Q S R W Z N ] R M W W \ T Q P R M M S V O P X Q U R [ Z T N S S Q V P K R T V V Q Q P N L O Q O S P O J L K P Q K P M S L Q L T P Q L Q P X O R V N V Q S M N Q Q U P S Y Q T N Q E J S J O M M X K I M H G Q N L I H M R J H O K Q M H H H F M L R L K S M J I H L O L E J N I O R K I G J V L K J N L Q K N F L S R U T P M Q K G L F O H F F H K Y T P J L J N Q T N S \ Z M J X Q P L Q U Q U W V S Z Z R Q U R Q O M N W T T Z U U P O Z X O S V T X S R O S T U U O R L T T Q S Q M Q V S R T S U Y Q W K S N K L O P O P Q Q M O R I E I P O I H M J P W Q H I L Q I G T M K J K K H D H ? ? L B ; @ ? B D D H C B E C B F I I F D I E G K D = @ @ E > < 9 < 9 9 : C < 6 7 > : ; 8 8 2 3 7 9 4 0 8 = : 3 8 8 2 7 3 / 2 6 4 6 : < 9 6 4 2 9 5 7 5 1 7 : 7 9 3 7 6 6 5 4 4 1 0 0 1 3 0 1 1 1 3 0 3 5 3 2 / + - 1 3 3 7 4 5 6 7 2 5 6 8 2 + 0 , + - 2 0 / 2 0 - + + 1 7 2 / 1 . 0 . 2 0 0 2 5 3 / - * , 1 , - ( . - . 2 . 0 , ( ) * - + . - . , 1 - . . , . . - 0 / / * + * 0 * , - . . / 1 . , + + ) - , * + * / + / & ( - / 0 - * ) + ) $ ) . ) & & $ * ( % - . + + ' # ( % * ( ) ) , ' " ( * % ( ' & ' ) , ) ( ) ' % % ) & & ( * % * ( % ) % & & $   $ # % ' % & % # ! ) ( % ' ' ' ) # " # "    $ & & % % # * ( % ( $ ( # $ $ $ % ) + ) ) ( * ' , . ) % & & # % ) ) & ' * ) $ ) ( ' ' , + ' ' & ( # ( & ) - + * ( ' , * ) * ' * + % ( ) ) , ) ' % ' ' & * + ) ) + - * * & ( * ( * ' ' * , + + % * * - ) ' ( + ' * , - - + - + + + ( & , * % $ % & ' % ) ( ' '  
+   
+                                                                        
+    
+                                                                                                                 & ( * * - / 2 : = D A K J L H U P Y V X Y \ b Z [ Z ^ _ ] ^ [ Z _ c Y Z U R Y _ \ ` ] X T Y Z W Z R N S U T L L I U N U S U S W U Z O W Z W W X X Q V \ T P M P Y S S T V R R R V Q [ T T X T Q Q N X U S Y P R W R Q R N N P P R S O S S T M Q Q K Q Q X P O Q P Y R M M P Q Q X M M W S X X Z R S T R V X Q R O S T Q N P Q L S L J M P L K J M H P P V T M D O S J O K I Q N R M J K J P M M O J M I K Q N O O L R M K P R L H K F G O K S R U O M P J I M K J P R N U N R N Q Q N Q Q T U W T O T W Q N Q Q S T S T P S X O Z [ W R Y Q T W Q R U W S O U V U S N W [ W U Y R T T R V X T U P O U Y X U R P R X Q Q R S X X Z Z X T L P T T W R T O P P P Q J P Q K I K K O M N T V V R M N K L S K N P N Q Q E J J E C @ D G I E G B B D F @ A G B > D E F G C D G F J H ? C G C ? C A ; < > ? 9 ? = ; ? : : @ 7 9 : : ; 8 6 8 : 7 6 = 7 7 6 4 / 3 1 7 ; 7 5 5 3 < ; 5 5 0 4 5 8 5 : @ 9 5 1 0 5 / 0 0 1 . 0 4 1 4 5 2 5 1 6 6 3 4 / / / 4 4 6 2 7 1 7 : 4 4 8 8 4 4 5 6 - 1 8 2 . 1 3 5 + - 3 2 1 5 0 4 0 1 / / 6 6 5 / / - ( , 0 2 4 2 . / 0 3 / - 0 3 1 - / 2 1 * + / / 2 . - 2 / + - 2 . 2 * 6 1 1 . + / , 3 1 . 0 . - 0 + 0 ) + / - . + , - ) * / - / ) ( ) + ) , + + * * + * + & - % ( ) $ ' ) ( % ( % ) 0 + ( ' , ) ( * ) ) ' & ) - , * % ( ) ) ' * ( ' + - ' ) ) ) & & & % % & ) * * & $ * ' ) ' & ' ' ' ( & " (   % " % ( % % * * & * + & % ' + ' " & + + + ) ( & + + * / , ) ) ) * , , + % , ) ) ( % - - , $ ) ( + - * + ) * * * ( # ' & + , * ) ' & / * + . ( * ' $ ) % ( ( ) * * * , - ( + ) * / - + - ' + , 0 / + + / 2 + . 0 . & ) + * + * 0 . * , ' + 0 ) ( ( ( " * ( ' % ( & % 
+ 
+ 
+                                
+    
+                                                                                                                                                        $ , ) ) . 1 0 4 < A D H K S O P S Z b _ ` g ^ c c a [ c ] Z X V X Z \ ^ _ Z Z ` \ ] ] U X Y [ X X Z X W W X U M R O S S R P Z V O X \ S U Y X Z Z X R V [ R U U W V U P X U R T U V U V Y T W T O R T S S O V R V T R N O Q T P P N P Q R T Q S R Y R U S S T U V Z \ Q R T P Q L Q S V ] _ Z Y \ W \ Y R T S O W T N M N N R U R V T R Q R R O R P I N U W T M K O M N P U R M V L Q Q R O I K R K J O M P R N R F O R P N R W S P P L P P Q T R W U P L M O V O N R T S Y O N N U T R X Y Z U P Q S Y Y W M R P T R P T W \ \ Y Z W T [ W U [ [ \ \ V Z Q U S Q R U Z T W Y U P Q O U \ a Y Y X T R T U T W T U S P O ] X U V Z W S U R P Y [ U Z Z O P U R W N O R Y R O M L R P M M L N P U P O P Q N S R R L R J H F K F G E H F E K H F H H ? D E G J E E E C D A A A L D G D E < @ D E @ B ? ; ; : < : : : ; @ 7 9 9 = @ : ? = 8 ; = 7 9 9 < : 7 9 8 5 6 8 4 8 3 8 5 7 5 2 8 4 7 4 ; < 8 3 2 0 3 5 / 0 0 / 4 6 2 3 6 6 5 7 7 : 6 3 5 3 3 6 8 4 2 0 : : 6 3 0 6 8 4 7 : 6 3 2 6 2 0 4 4 2 7 3 2 0 - 0 5 3 0 2 1 0 4 1 1 , + / + 2 2 3 8 3 , 2 / 5 3 5 3 2 - 2 . . - * , / 3 . . / / , , - - , 1 - / 4 2 0 - / - 1 3 1 1 4 3 4 + + ( , - ) , - - + , + , . . * * , , * ) * * , ( * - / ( + + 2 , ' + + + $ ' + * ( , + , ' * ( , + % & ' + * ' ( % ' ' ) & ' # & ' ' ' ( ) , , $ # # ! % & & ) ' ) / ) + ) ' # # , ) ( $ ' # "   $ ) * ( & , ' & + - ) * * * & ) + * ) $ $ ' / 1 + - , - ' . , . - + ( * * , ) * ( ( * " ( $ , ( + ' + * + * ) # ' $ ) ) + % " * ) * ) , + + + & - , ) - ) ' ) , * * * * ) * ' , ) ' % , - - , * 2 1 0 1 ) , + % * * , + ' ) * ' + ) + ) . ) ' ( # ' * ' ' ' % $ ! 
+ 
+                         
+                                                                  
+                                                                                                 # ( + ) , 1 3 : @ C E M O P P T U Y ] a j k ] X ` ^ X _ ] a Z _ Y c Z W ` X X X ^ Z ] _ W V X X ] Y S Q Z ` S R R W T S R W X [ T \ _ ^ \ T U Y ` [ Z X W T U Z U \ X Y Z \ X T P R Y Q S \ [ R Q \ O O T X W W X U W S M Q Z S R U U U Y \ X U S O R X R Q S Z U ] \ T U V M Q Q X X R ^ T P Y _ ^ a Y S R U T S N T R Q T M N R S N I P O S P X U P S P R L R N N M P R U X U V N S U U N L I M H O P X Q K O M K Q O R Q R \ U V Q M S Q R N U V U U N J S T S X R P Q W O M P S O Q Q S Y U U ^ T W [ Z X T [ Z R Q X Z X X Y Q Z Y R W Y ] V V ^ U U T Q U T T X _ V X Y Z X O P ] _ X X ^ \ [ [ W P W Y W ^ Z X R X V T \ T U _ U X \ _ X S \ X X V S S U O U S W X S I L Q Q N I M O S S R S R S M Q P X R M M G G J J J I E K L K J E I F D C G N Q K H H J M H @ D D E H G L C E E F : : > ? ; = > 5 = 9 = ? 9 > 9 < > 6 8 5 < ; B = > : = < ; = ; 5 4 8 ; ; 9 = ; A = : 7 9 8 5 ? @ : 8 ; 6 7 ; 2 4 0 0 7 2 1 5 < 8 4 5 ; : ; 5 7 6 4 5 6 4 1 4 ? 9 : 4 2 9 2 7 5 1 6 6 5 2 0 2 : 3 2 3 3 3 1 3 2 4 4 3 6 . 2 6 7 8 0 / 1 1 3 4 3 3 6 1 0 1 2 5 5 3 2 . 3 2 1 / - / 2 0 ) , / / 0 / . , . 4 0 . / 2 / . 0 2 0 2 0 0 2 4 4 . 6 0 / / 1 + , 0 , , . + 1 1 / * , - - + 3 1 1 , . + 0 ) ) , + ) * + * ) + + , * + ( ( 1 - ) , - . * , ( + + ( ' ) , , ) ( + ) * $ $ $ - ) + * $ % & % ( ) . + + ) , * - 0 ' ( ) ( , / ( ) " # " " * + * * , ( - ) , ( ' + ' * ( 3 - * & ( & * . * ) . 0 / , . / - ) # - 0 . - . + . ( % % % + * ' & , + ( * + ) ( , + , + ' ) * ( ) ( - , + 0 - , . + ) , , ) ( + ' % ( ( + , + ) ( + * / , + * 0 0 , , . . ( - . + * * , . / * * . / * ) ( ' " ' * * ) ' %   %   
+                                                                                                                                                                                        
+ 
+ 
+   " * 3 + 0 1 3 > ; < D F L U Y ] T X S ^ d ] ^ \ a c ` Z Z [ ^ _ U _ _ _ _ Z V U ] Z ] _ [ Z ] ] Z Y X W Z T X Q P R T R R X T W ] b ] S X R R V Z \ T [ X S X Z ] W V ^ _ [ [ \ X Y T T U V V Y Q Z U N R Y Y X [ X d U X U Z U S U U S c Z V V V U R S T M T R W Z \ W T Y N W W T _ ^ ^ _ W Z \ \ ] Y Q M R U ] T X Y X W R U Q Q \ S O S T T V L R M P S P X S Q N U P P S T X V Q Q Q P J G M Z Q R U V V S O I L M P N P Q O T M M S V T Q Y Y X S R P T Y Z S U M S S V S Q T U Q W V ] ] W U U [ [ ^ Y V S \ \ X Z _ Y X W [ ` [ Z Y W _ T Y Z ^ X X R Z a Z Z X Y W [ ] Y S S X X Y U T Y V [ Y T R U [ Z Z V X V T X U X U ^ [ V [ _ ` ^ Y ] X W W X \ U W X R Y X S T U Q W M O T P R Q U Q N U P T W S K R P Q K J O N K P L L H G J M J I J L Q J N O K K B D H G I E G H B B H K F @ @ C ? ? E D B A = > ; @ ? B ? ? = < = ? : < @ < < 7 = = : 6 < : 7 9 9 ; 9 @ 8 9 ; 8 7 8 ; ; < 9 8 ; ; 6 1 3 / 0 7 9 3 3 < = ; ; 8 7 = : 7 7 9 8 4 3 8 4 7 < 9 2 2 6 = 7 / 4 7 6 7 6 5 8 7 8 5 9 6 6 2 4 2 3 4 3 1 2 : : 7 2 2 2 1 2 6 2 4 , / 0 , / 3 : 5 - 2 2 0 2 0 7 . 0 2 3 - , / 0 1 1 , 2 1 4 2 1 2 1 - 0 / 3 / 5 / / 3 2 1 1 6 0 . 3 . - ) . 2 / * 5 0 / . * ) / 1 + , 4 1 ) 1 + + 1 - - , ) , + - / + + + * / , & / ( , ( * . , * + , - + ' ( * . * * - ( % & ( , ) ( ) ' $ % " & % % ( ' ) ( ( ( ' 0 , , , * + ' ) * # ) ( & + + + ) ' ' ) ) 0 - * + + * / / / ' ( * ' + * ( $ ) / . 0 , * - . , ( ' + . ) ( * & # ) + / ) ) . 0 , + ' % * + . - + + , - * ) * , 0 ) , 0 , . . . - . - ) ) , ) * ( % ( , ) . * * * , 2 * / ) + ) , ) 0 * . . - + , . 0 , 0 , - . , , * + * + + * - % ) ! " ! "                                                                                                                                                                                         
+  $ * + + . 0 0 3 ; = = D G P N \ [ Z Z [ a d d ` ` _ c d b ] ] c U Z ] Y \ ^ Y O S ^ [ \ a _ ^ c [ ] Z [ ^ _ S U Z Z U U U S P \ ` [ Z \ _ [ V X X W [ Z ] Y [ X W ] U U _ a ` [ \ X Y a \ T T U W S V Q S X U X U X ` b \ Y R Y Z \ Z T U U ^ V V [ Z _ Y T [ W T Y Y ] Z [ Y Y ` Z W ] Z Z c a W X W S V T N R R Q S R O U R Q Q U X Y X S V R S U S S M T W U T S Q N S O N U Z X R O T S T S P P [ U N T T V Q Q O S Q Q T S T Y S Q V R N W X X \ T S O R X W V Y S W V S V Z X W V U Z d ] ] S U \ ^ _ ] V [ W V Z \ Y U X ] e a b ] ] _ \ [ \ ] [ Y [ ^ V X _ Y ` c c Y X Y ] \ U Y ] ^ V \ d \ Z X Z \ W Y [ \ W Z W S R W [ Z Y X U ] ` a Z Y _ U Z S \ ] ` Z ^ V U Y X Y ^ W V V S ] X S T U U J S R U Y S K V M N L I J K K G T T O O K N F T C G I E H O G G K O O J I F G J H F D B E G A < @ D C I D B < < > ? B ? = > ; 9 > B B @ ; ? 9 8 > < = @ ? < : 5 8 8 8 @ ; < ; ; ; 8 9 8 > 8 9 ; 8 ; 1 8 4 4 7 < 8 6 : 9 8 : : 6 ; 8 7 9 : : 5 7 7 8 0 7 8 9 6 5 8 : 8 0 4 6 8 9 5 2 7 3 0 8 3 5 4 6 1 5 7 5 - . 8 7 ; 6 4 4 2 3 7 4 5 4 0 0 1 4 3 4 4 - 2 3 + ) 2 9 4 1 , + - 0 - . 4 1 , 6 5 5 1 / 8 9 4 , 3 ; 2 5 1 / 3 0 1 0 1 2 2 6 . - / - / / - . , 3 / 0 . . 3 0 ) , 0 , - / . 1 , + + ) . . . 0 . / , % ) , + - 0 * + + - 0 ( ) , * . - / - + , ) * ) + ( ) & + + + ( $ # & ' ( ' ( , ) + ' + - + ( - / - + / 1 ( $ + ' ' ( & & ' - * + - + * - - ) ) + * / * . 1 ) ' ' ' 0 * / 0 0 ) + + - 0 - * - * ' * ( ( ( , + 0 1 , + + + ) ' * ( ( - - * ( ' + ' ' ) ) . & * - 0 0 . . 2 3 / ( - / , * + - - + + 0 / + , 2 + - * - , + + * . , - , , 2 2 0 0 - , 2 / , 1 , + + + ) ' , / * ' ( % #  
+                                                                                                                                                                                        
+   # * , * , 7 6 6 < < @ J N U Q T T V ^ d a g c ^ ` ` b e \ ` ` a ^ [ X W [ d _ V T \ X [ g b R W ^ _ ` \ \ Z W V Y ^ ^ X Y V V [ \ [ Z \ V Y [ W Z ] ^ _ [ V V U X U Z ^ \ T ^ Y X W S Y X X V W c \ Z U X X Z X Y Z Y \ ^ S V Y \ Z ^ \ \ V \ Z V X S Z X V V W W _ ] a \ _ _ \ ] c b \ Z Y ] [ Y W V Z X [ X Z W R V V N R W ] Y V [ V X X X O S S S X U W W T S U V U U Q T V Y U U U Y Z T Q W L S _ W T U T N O R T P Q [ [ T R R M R U W V T X T R T Z R R [ X X S R O Q V \ X U S Z Z _ W \ X \ ^ Z _ ` R U W ] X [ \ [ \ a ` b W [ \ Y ^ [ S V X _ ` ^ X X X Z _ b h _ b _ Y ^ f Z Z _ ] a d e ^ ] ^ c \ Z W S Z X [ S S U a Y \ X [ \ Z _ ] V \ Z [ Z [ Z X ^ \ S Q U U V Z \ U ] X ` V V V V P O S R W W Q S P M I F G L R K J R X R K J L G P O J L E K J D J H L H J G H I N G B A I G J E = @ @ @ G A < = ? ; < = ? B ; 9 9 @ < < > : = ; 7 < ; > ; 8 < = > ; 8 8 ; : < ; : = < > 8 9 7 < 9 4 6 4 4 3 3 7 8 : 6 7 7 4 7 9 : : = > < 6 < 6 3 : 5 4 5 8 9 4 6 6 6 8 1 3 4 9 4 7 3 3 6 1 6 0 1 6 6 7 9 : 7 ; : ; 1 3 4 4 4 2 5 5 4 1 / 2 1 1 2 2 3 4 / 3 - , 0 + 5 2 / 1 0 3 5 1 2 0 0 2 / 2 4 0 0 4 4 5 1 3 4 3 2 7 1 0 5 4 2 3 / , 0 - 0 3 1 0 . - . - 5 . - + 1 2 - + - + + 0 / 0 ) , , ) ) , - / + 3 + + , / + , 1 + , % - / / , * * + * . - * * - ) ) & * ) ' ) ( ( ' , ) & ' % # & , , , , + ) + - . + - , * / . / 0 ( % ) ( $ ( + / ( ) 2 / , * , % ( & ) , / - - ( % ) ) . / / + 0 * 0 . , - , / . , + - / ) ( 1 0 - / . / / / , + ( * , + - ) * * . * + ( . 2 ) * / 1 . * * 2 * - 0 + - / . - - + ( + ( . / 1 / , + * - + / 1 3 2 - , + / 2 0 2 3 4 + 0 . , + ) - * + % ) , / . + + ' ! 
+ 
+                                                                                                                                                                                             ( ) . 2 6 4 5 : < @ I Q Q S V U U ` ^ ` a e b a a e b ] b a b f ^ W Z ` _ _ Z T U \ Q _ a U Y ] ] ^ [ \ S Q W Q S T Q Y \ Z W Z X Y Z ^ X X Y U X X X T W X W U Y _ \ X V Y V P Z Z U W [ T [ V S V Z ^ _ Y [ U Y W X ] T Z _ X T V Y Y O X Z W U V [ W W Y Y W Z [ \ Y W ^ a ] ] a X ^ ] [ Y W V X Y S X Z Y R T Y V M V P [ T R Q S Q Y [ V V W Z X U T S O Q R Q Z V W T Q S S T V Y X R S X W X Q R W S S N M Q Q S Q W \ Q O T R R [ U Z R U S S W S V U S Q L O Y Y W N X T \ W Y _ [ \ Y Q Y [ ] ] ^ a ` Z \ ] Z [ W [ a [ e [ Y g a Y W \ W \ Z ` _ _ \ a Y Z a ` c ^ [ Y X Z ^ V ^ \ ^ e ` \ ] ] a a X i X [ X Z _ W W _ Z Z Y [ Y \ Y \ Y _ ] X X \ Z ] \ W V R U Q Z [ X R V U [ _ a V T W Y P T V _ U R S O Q J H I L M I I M R P M I F M C D J F F L C L L K N N I F M I J D C I D G F ? B @ J H @ ? G @ : 7 9 > A : = C ? = : : < ; = E ; > E D : ; 9 7 7 < = < A = < C = ? > 7 ; ; ? 3 3 3 5 5 0 ; = 4 : 7 ? 5 9 : 9 5 1 : 6 4 : 8 4 4 9 8 3 3 8 7 1 9 : 7 4 1 0 8 9 3 8 6 2 9 4 1 1 4 4 4 3 1 7 7 2 2 5 0 1 8 8 1 - 4 1 7 3 / 3 2 0 2 - . 2 1 5 4 1 3 - 3 8 6 2 4 5 5 0 2 4 2 3 0 0 1 7 0 2 . 0 7 5 2 0 . 2 2 - 4 4 1 , 2 / / / 1 6 4 0 . 0 , + - 0 * , , . - / 0 * , 2 2 2 . . / * * ( , , * 1 2 1 * * * - / * + ) , / . 1 - ) ) ) ' - ) + . - * - ( + ) ' ' ) ' ( + ( ' $ ( ( ) + ( & * ) + ) / 1 , ) ' ( - * * ( ( # " $ " * , * & / . ' ) + ' * * * & , / 0 , ( ( ( * - . / . - 4 . * 0 / * 1 2 . / , ) - / 0 ) * + + / / + * ( ( - . . + , * 0 / . - + 1 0 , 0 . , ) ( * * + ' * . + - / ) * % & * + 5 1 / , - / 0 2 2 1 / 0 4 + + + - 0 1 0 / 3 1 , - ) ( * . - + * - * , + ) + #   
+                                                                                           
+                                                                                                 ' & + . 5 ; : ; A H H H N P U W Y [ _ d _ f d c ` c a g ` Z d a Z [ Z _ [ ^ Y V \ Z T V Z a b [ U X T Z V T \ [ W [ U \ T Q [ ^ \ Z V T U T X R S \ X S Y ] ` ^ ^ [ a X W \ Q S W W Z U _ W U Y X X T Y d ^ ` Y \ U X U Y ` a ^ V N U V \ Z Z S Y _ \ [ [ [ X Z [ c d Z ` b _ \ Z _ Z Z [ ] ^ O Z Z [ \ ^ [ U P T U W U R R W R M Q S T Y Q P S S U X W [ [ O R W P \ V O S X Q X W S W X O V S V W N O U X U K S P F I T Y R Y ] ^ N S Y ] Y Z S X W X W W S S W O T W X ] Y V _ W Y W _ ^ \ W Q Z Y c Z ` _ a ` a ` ] Z T \ U Y ^ ] [ [ ] \ X T X b V U U X Z c Y ] Y X [ ] \ \ [ Y ] X _ _ b c ` b _ b ` ] e ] V \ T V a [ _ [ Z \ ] c ^ W S [ Y b ] ] [ ` ^ ] U X W Z Y U ] U Z Z X Y W ] [ X X Z T W V ^ Q T Q S Z V Q Q P L O N K J L L Q I J J G K K I H K J L M J K I H G I H @ B D F H = @ > : : C B ? C G > = 5 2 8 @ > > > ? A ; < ; A ? ; 7 ; = A ; : 7 8 8 ; @ ? : 8 6 8 = 7 9 4 3 9 : 5 7 5 / 5 2 : < 8 6 ; > 5 8 7 7 ; 7 7 5 3 6 : 4 4 1 7 8 7 4 5 5 3 6 5 6 8 7 ? ; 8 5 8 8 9 8 7 0 7 2 0 4 1 4 1 7 4 6 6 / 3 2 - - 2 2 4 6 3 6 4 1 1 , - 2 . 0 5 4 2 1 0 3 3 1 2 3 3 3 . 5 3 0 1 6 8 7 2 3 , * 5 7 4 / / 2 - - 0 . / - / + 4 3 3 0 5 2 / 1 * + , ' ( + , - - , ( , / . * , ) , / ) & , , * ) ) * * % * * , ' ) - - + 0 / / * ( ( ) + + % $ * - * - + + % ' ( ( * * , + * & ' % ' + + , ) + ) ) + / & - ) ' - + + ' ' $ " % ) + / * & ) ) $ ' & ( ' ' ( * * * . / - 0 ) * , * + ) * . - , . - 0 3 4 0 0 * * + ) ' * , . ) , + + ) ( ( , - . * + + - 1 0 / , ' , ) / , * ( , / . / / ' + , / + , / + + , - 1 - . / 3 1 3 . . / / , . 1 / , - 0 0 - - 1 0 2 / + ' + . ) ) ( - - / + & & " 
+  
+                                                                                                                                                                                          % * . + + 6 9 7 = H A G O M V P T ^ [ e e b i a c \ e a ] ^ g c _ ] \ V U \ \ [ b ` X ^ [ Y \ Z W W U W P M W Z Y Y W Y X W X W Z [ Z R U W S S U W Y Y ] ^ [ [ ] [ d a ] U \ X Y U T V Y Z X W a [ R U \ _ Y Y ^ _ U [ ] Z \ Z Y U P W b ^ Y U Z [ T R Z _ \ Z X g ` [ X \ [ X ] Y \ ] V ^ _ T Q [ _ _ _ \ Z W X _ V U W U \ T R U U _ ] T X S P Z Y W X N R U T [ Z W W P W L T T Y L S S V R Y W X R N U O R V U N T V Z V T X \ Y V Z V W \ [ U T P Y ] P R X S T N W ] [ T U Y \ ] Z ] Y Y X ^ c ` ` ^ _ U \ e ] [ \ [ _ Z W a Z ^ ` ^ d U [ [ _ _ b [ Z ] b \ d a ^ c W ^ ^ \ \ Z Z ` _ Z ` ` b e b \ ] a T Y e ` ` ] ^ g Z R \ _ ` [ ] ] _ ^ b ] \ a ` ` Z Z Z Y ] X X ^ ^ X a f ] Z \ X T W ^ Y [ W V U W W O X U Q V S I M J P M K L R P J I O P K G K K K J R P M I K K L H J J E G E ? ? B > A F A D A B = D 6 8 = C = < = > B 9 = = ; 7 6 5 : 8 4 ; ? 7 : 8 9 < A ? : 6 5 8 : : 9 7 < 7 7 4 4 6 8 6 < ; 8 7 9 ; 6 1 4 4 3 8 6 7 3 @ ; 7 6 3 3 6 6 6 9 ; 7 9 8 9 < 6 : < < 6 1 6 4 8 9 7 : 7 7 8 : 7 5 3 / 2 / 3 4 2 0 8 2 2 0 3 2 7 3 2 1 4 3 4 4 1 2 5 1 2 / 6 3 3 2 6 4 4 1 6 3 7 3 4 7 6 5 6 0 - - . . * - 3 6 1 2 0 0 - . 3 3 2 1 5 5 2 , , , % + * ) - . , * , ' / / + . + ) + , - * - - * ' & + , ) ) * & + , . + ) / 0 2 4 & ( % / . + # ) , ' ) - ) * , - ) , ) - ( * ( , & ) - , % * ( ( * ) ) , , + + , ' ) $ ( * ( % ' + + ' ) , ' & & + ( ( * + ) , , + / 3 2 . - + + ) + + . / 2 + * . 5 1 - ) ) , - - ) ' , ) ) , * 1 ' ) , 1 1 * . . ( ' * / 3 / - . - 1 * , - - - , , / , - . . + * 1 1 , + , 0 . + + . , 0 + . , 3 * ) * * / 0 . , / , 0 4 , 0 - 0 2 1 + ) " ( , , , % ' % "  
+                                                                                                                                                                                         " % ( , - 1 1 : 7 9 @ G I O L V Y [ ` a ] ` _ c g _ g c \ _ ` ` ^ _ _ Y W X c f f f b ] X Y ] g [ S U V R S Q X T W X U Y Y U U ] ^ a ` T W U Y W \ \ X ] ^ ] [ \ X ] \ ] \ V W [ [ V ^ U T V X S ` [ ] Y [ T R U X c _ b c ^ ] ] X U Z _ ] Z X [ X Y R U V _ V V _ e \ a [ U T Z ] ^ [ ] [ \ Y R [ a ` Z Y \ S W S ] S T W R W X [ V Y ] \ Y Y R T T U T O P Y W U P Z U S N S S W Z X Q Q P P ] [ V W W S W R W T S Q X O Q [ T X ] U Y [ S X Z _ X Q R Q S S P T T X Q V T S S W R Y _ a S Q Z ^ Y ` a c ] _ [ ^ b ` ` ` _ _ [ ^ \ X [ ] b \ [ ` e [ ] ] ^ X ^ _ _ X a e d W a a \ ] W V Y \ _ _ [ f b ] a _ Z \ ^ e d ` Y _ c X [ ] _ a \ c W a \ _ b b \ Z W \ e ^ X [ U ] f W X Z ` W _ Z V \ W X _ ` W P M W T [ Y P R R N L I O Q L J J I E F E P R L I H N D C J O H O J I E N J K B C D C F I E E F C D F G ? @ 9 A B B B A @ < 9 : 8 ? > 9 8 7 8 8 > ; > ; 5 7 7 = < < > 8 1 5 3 4 = > : 7 5 6 7 7 9 5 5 8 9 3 5 5 7 3 1 8 7 6 3 5 7 6 3 / 1 3 7 9 4 5 4 9 8 A 8 ; 8 6 4 6 6 5 7 6 7 6 3 6 : 8 7 8 ; 9 9 3 5 2 - 4 2 6 1 6 2 / 3 2 1 6 4 1 3 1 5 3 6 3 / 1 - 1 3 4 3 2 6 3 1 3 / 6 4 5 2 1 4 4 4 3 2 , + + + , - 2 4 1 0 , / 0 3 3 / / 5 1 4 4 . ' / - 1 - - - 2 + * 2 + ) ( ( , * - , + - / , ) + - * * * * $ $ $ * ( + ) / . ) 0 + ' ( ) * * * * ' , + ) - / , , - ) * + 1 & + ( ) ) ' ' ( ( ( ) $ ' , ( ' - - ( . , ( * % ( ( & ' ( ' $ ' ) 0 , ) * - ( , . - ) ) ) - . , ) + 0 + ' , . . + , ) * ( - - - - - + ) + ) . 2 - 0 + , * . ) * + - ' * 0 , + 0 2 0 / * . - 0 + + * , * - . , + 1 / , 1 / / 2 3 + . / 0 / + + 2 2 - , ) * . * * ' ( - ) + ) * - / + 1 4 5 3 0 + ( ( ) * * - ) * % # 
+                                                                                                                                                                                          $ $ ) * - 4 3 8 9 : B F H I K S X _ ] a _ ` ` i d ` ` c a ` \ a \ f \ _ b b g ^ d ` a a ` ] Z Y X S W Y Z [ S U X Y [ X X S W _ \ ^ X [ \ Z V W T Y [ [ a b Z ] _ _ X T W [ R W Z W ] X [ W [ _ T S a ] ] b c W U Y a Z \ _ X \ b X Z b e X [ S Z Z a T Z Z \ Z ` e ^ U W c Z Z [ X a U a _ Y ^ ] ] Z [ X T Z W W [ Y W U \ Z S W Z X [ Z X [ ] V M T W O S U W S S U S V Y J M Q X X W O P R P X [ W b X U V O R Y T V S M X [ R U T X T T X [ T Z Y S T Z U W T S S U V ] ] T U O U W X U Q U Y \ _ e e d b ` e b b _ a W W U \ [ Z _ ^ ` f ` Z \ d _ b ` d a f X ^ Z Z _ ` _ c _ \ e Y W c i k _ ` \ ^ a _ b ^ _ \ c _ b d b a c ^ \ \ ] \ \ b ` W X Z Z c Y Z T [ [ ^ [ a \ b [ \ \ ] W X Y X ` V U U V O R W R U U Y T S S O I U S Q P O K N I E L L H J K K K J I M I N J G D B B C @ E D G F F A A D B ? A F C A ? ? @ @ D D J C < 8 9 < > A ? < : 9 : 6 ; 7 4 7 ; > = < 7 9 : < 8 5 4 ; = 7 4 7 < 8 5 9 5 9 7 9 7 : A 9 7 5 : 7 9 6 4 5 : : 7 5 . 0 8 7 8 6 > < < : 3 9 4 0 4 2 7 7 1 2 5 5 9 9 3 6 6 7 9 7 5 6 2 5 1 2 7 4 4 5 / 3 4 2 0 5 5 / 3 1 5 / 2 . , / 6 2 / 1 , 2 1 3 1 - / 1 4 0 2 6 6 5 1 0 , / 0 , 1 0 . 0 / , - / 1 , . 0 ) 2 / - / 1 - , . , / 0 * / 1 - 1 / + & + ) + ( ) * + , / ) * ) / , + + - % & + ) * & + ) * / , , ' ) ) * + * , * ) ) * / 1 2 + + & * - + + . ) + ) . - * * & ' ' ) , - ( , ) & ) * ' ) $ % ! % ( ( ' ( & - - ( * + + - + * ) + / - - ' + + + - * ( ' - ( - ( + - / . . - 1 . ) - / / / . / * ) ) . + , * - - * / , / / - - + ) ) 0 3 . / * ) + - 3 , + 0 / + , - 3 - 1 . 3 / 1 / & ) , . + + & + / 1 / + / / / 0 , ' , 3 + / 0 - / / + * , + - ( - - ' !                                                                                                                                                                                           
+ " $ , - / 5 0 1 ; = J F G N P T X [ ] d ^ \ [ d e c ` a e a ` ` ] ^ f d a a ` [ Y a a d ` c b Y U R X Y ] [ \ a X ] e \ ] V Y ^ Z Y [ b ` T W Y Q S [ W Z ^ S Z _ Z [ T Y V R W ^ d [ T Y a X W _ Z ] Z V c d ^ \ ^ b ] [ e U W \ [ Y [ c ] ^ S W X ^ _ ] d h \ b \ _ ] Y X X ^ \ ^ ` X Y ] ` c c e Y [ b _ _ T P W W O [ X W Q U \ Y Y c [ W ^ \ U N Q P T T P R T Y X ` Y Q K U W V W W [ R S T U X W \ \ T U U U R R T U X V U V P Z V b ] a \ X W Y X [ V S X P P S ^ c ^ M \ [ W [ W ] Y Y [ a f d h [ [ X d h d ` i c ] _ ] T X c a d i ` _ [ a ` d e b i h ^ e b [ e c _ [ _ Z f _ ] n n j f f ] g a c f f h j j e i e g n i ] W Z ` c c g c ] _ Z ] _ ] a \ c ` a ` Y ` [ X [ Z \ [ [ ^ ^ Y Q P ] V [ T [ W W Z V Q X V Q P V S O O N O K H I M M H J O M H I J H I E ? H H D D F L G L L J H B E G H A H D B > > @ @ > C D F B ; : < ? @ G @ B = ; A < ? ; 8 8 > < = 9 < 8 < : : 5 4 5 ; < ? 8 9 7 8 9 7 : ; ; 6 ; ; ; 8 5 9 7 = < 8 ; < ; 6 4 / . 4 1 3 5 2 6 8 6 5 8 0 7 : 4 9 7 5 4 0 ; 8 6 3 7 8 7 8 5 5 0 3 5 9 4 3 5 8 2 2 5 3 1 1 4 9 0 4 1 4 5 9 4 2 3 4 2 2 4 / . / 3 , 1 2 - / , 3 5 8 5 2 1 . - 0 / 4 5 3 1 , , 1 / - / / , / 7 . / 6 0 2 - / / - 3 - * + / 0 2 2 / ) * * ( , , , , - 0 . * . 0 3 / ) ) 0 - + ( , , 0 + , + - , * / , * ) 0 - , ) ) * % + / - * - / . 0 * * ' * , ( & , + ( * * ' & + 1 * & ) , & & * ' % ' , - + , * ' - . ( . * ( - * . - - - / . + ( . / + + , - - + . + - . . 1 2 2 . , * 0 + + . . * ( & - , + * 0 / , - ) . - . 1 + 1 1 , . 0 0 ) , ) + 0 0 . / , - + 0 4 1 1 - 0 0 2 - * . 3 0 / * , / . / 1 . 1 / * , . + 0 4 0 + ) & 2 / * / 4 - , , ' * ) % 
+ 
+                                                                                                                                                                                          
+ % 0 / 0 4 4 5 : B E I H M M X ] ` ` ` ^ \ \ j c b h e i i h g c d m d g b f g _ f e b _ ] a ` Y [ ] X X ] ^ Z T [ X ] U _ Z V S Q W ^ T Y \ [ Z U W Z W X X U Z X \ Y b Y ] Y ] a ] V [ [ ] b ] ` ] Z Y a c X X _ ` [ T \ Z W ] ` \ a e d ` [ [ Z ` k a i e c ] W ] ] \ ` a ^ a g Z \ ] X ] _ W ] _ a ] c ` X T \ Y Y X S Y U [ ] \ \ a X Z a S T S T W T S T \ Z ] R X X X T R V X W U V X Z X X W [ W Y [ [ \ Y T S Z ` T Z S S M U \ c ] Y ] b X \ U ] [ [ ] [ U T d h [ U ` ] Z ` _ _ _ e h ] c h e e ` c j f ` ^ h b d f ] U X [ ` ^ a h ^ ` d h c d _ h d _ d d e s h h c ` _ d i i l h j l i h g g g j o o m h i d l h p k l k i k d d g i e e ` i f Z j i d _ m c [ b \ ] Z ] \ c ` W Z [ Y \ Z V ^ Y [ _ X V R U X S X M R Q R R S T M M Q P L L M J K H J J J M I G H H H J P M E G I E A H H D L E I K B D C > ? C G D B D = D F ? ? A A ? A = ; 9 : @ < < D : 9 ? = = = 5 6 < 4 ; 6 7 > ; 9 ; 8 3 6 : ; 5 8 < ? 5 9 > B ? > ? 9 ? = 9 8 7 7 6 2 ; 8 : 8 ; 7 8 9 3 5 7 6 7 : 5 6 2 8 5 9 7 8 7 8 3 8 : : 8 5 3 5 2 5 1 2 1 2 : 2 7 7 2 4 7 4 5 0 . 4 ; 6 5 2 1 / 0 1 1 / 3 / 3 2 3 6 . 2 0 8 4 4 2 6 1 1 4 6 5 7 4 / - 3 4 4 , 0 2 - 1 0 , 6 3 , ( & / 3 2 0 . 4 1 . / , ' , 0 - ) , . 1 / - . * / - , 0 . ' ) - * + + / * * - . + 0 + . , * * + + , ( + ) / + 0 - 1 2 / 0 - . - ' % ( * * * + * ) ) * & ' , 0 $ ) & + % + ( ) * ) * - . * ( ) + . - / * , - * . * / - / 0 + . - - , ' , , & ) , - / + - 1 0 - , + . 2 / - . ) + + ( ( + + . . , , 1 - 0 + + 1 + - / 1 * / - 0 ( * - * * ) . 0 0 + 6 0 2 1 0 2 0 0 . / / 1 + . , * + / 0 + . * 2 1 1 - 1 3 6 4 1 . , . - . 1 - - - + & ' , " 
+ 
+ 
+                                                                                                                                                                                        
+ ! $ . . . / 3 7 ? G A I R R P R U X ` c f d f l k h m j i p k h d g l j a d e h c e h j b _ f d U \ W Y T ` a [ [ e ] [ Q [ U Y U U W [ _ ^ U V ] X _ a ] ] Z Z \ Y \ X Z ` [ b Z a ] T W e g Z [ _ c d b b ` Z Y [ _ _ ] [ [ \ b g c e b i e e ] ] ^ a ` d g d [ Z a ] ` a e _ a g b e c ^ a ^ a _ b _ ] ` a \ Y ] ] a [ \ P X [ ^ Z ] a ] [ f Y T U Y W _ _ ^ a _ [ W U ] _ W T T T Z Y \ ] V X Y X W V Q U X Z S Y X Y Z U Y T T L U W ^ ] a ] Y O R X ` ] e [ _ Z X ^ c \ W \ a Y W a b _ j h e d l h d c i ^ g g a f b a b ^ ] X a f f a d ^ h i m h b g k i j l ` d o o j l h ` j p r m k k n p l l l l o n q k k t q w n m p p g h l n m g f c i i h h j o o j f l l f f e [ a g a _ c [ _ e h [ _ c ` Y Z U ^ Z W X Y X Q R Q O W Q N M M N R V M O R O N R K N I O T J I G M N P J G F H F F L E F J H E H I D D J G G E C D J E C B B A B = @ > @ ? @ ? B F = B ? < @ @ < = 9 5 7 5 < ; 4 : 9 ? : 5 3 7 9 < ; < : = = 9 7 = A < > ? < < ; = > = 4 2 ; @ 8 ; = 8 : 8 ; 8 : 5 7 9 7 8 6 8 6 7 7 8 4 ; 7 7 5 9 6 6 / 7 7 6 4 0 : 8 9 5 7 7 5 < 5 4 4 5 - 5 3 5 6 8 6 6 1 4 7 6 0 7 9 3 7 / 3 5 . 0 2 3 6 9 2 3 6 7 5 6 4 6 6 4 2 7 / 6 4 7 2 4 1 4 1 * 2 . 2 1 3 . / 7 2 2 . ' ( + - / / + + / / - 4 1 , + 1 - . - . / , 1 + 0 - ) - - 1 . 0 2 . ) ) / 0 / , , / . / 1 0 + , 0 . . , * ( ( 0 ) ) + - + + - ) ) , ( * * ( ) * / . / + ( * ( + / - + 1 + / - + , - ) . + , . , . . + ( / 3 2 , * * + 0 , ( + - 3 0 + * , ) / 2 3 1 + - 0 , - 0 + - / - . 5 1 - - , , * 0 / / * / 1 , / 1 / , ( + , , - 4 0 1 3 2 1 0 4 3 . 1 / + 0 . * + - 1 1 - 4 2 , 2 5 4 , 0 6 1 / 0 1 / - . 4 0 1 . / 2 ' * * % 
+ 
+                                                                                                                                                                                        
+   ! & + + 1 2 6 < > @ G M V U S V Y R ] h e k l m m l o g h g i h h i i k h j d h c c l g h b c b c _ ] ` a ` ^ [ d h e [ ] e ^ ` \ Y W Y [ \ U Z d h ] Y Y [ Z [ _ a ^ ^ _ c a a \ ^ Y Y [ ` b b c _ a _ l e e _ c X _ b ] _ ` g g l h i d ` b k c ] ] g g g f ` a g _ a a f a ^ a f b h _ _ ` Y _ c _ h d ] ] b ] \ ] ` ] ] \ W \ _ Y ^ _ e c _ ] ` \ a Z _ [ b X U [ [ W a b _ U S Y W [ ] Y Z _ _ [ W \ [ [ ^ \ U Z \ Z [ X X ] \ Z W Y X _ d X W \ V V ^ ` ] Z d ` ^ \ _ Z ^ ] ^ _ a b d c l k e i p h r j j e h i i c h _ d a d a c l h f i d h k g e c n f i w r j i r k j l p k l s u q h h p o i g i j m z r t l s q u o w r w p k n q p m f d i o j r r s u l a g l h l h \ k l c c c a a c f d Z a e d _ ] ^ f ` X U Y W S T P O Q R O O O S W T Q W R X T R O Q R P M H J P Z T M G G K E H M D H H F J J F G E C G I E G F L K J C @ A = > @ ? A C C B A C @ A A ; ? ? = 7 8 < 9 5 A < 6 ; 9 A 8 8 : ; ; : < ? : 6 9 > < 8 > = ; = ; ; < B < ; : : : < 9 > ? 7 9 : 9 > A 5 < : ; : = < 8 : = 7 ; 7 5 0 4 5 8 > 7 4 = 5 = : > = 5 9 9 9 3 5 7 8 4 : 4 2 2 3 1 6 9 7 1 1 3 : 8 4 > 9 9 5 5 3 / 3 3 / 5 0 2 2 4 1 4 1 3 : ; 6 7 5 2 1 : 5 1 / 1 / 1 0 - 5 8 5 2 , 1 5 6 7 3 3 0 * - . + , , + + - , - / - 5 . 3 1 / / 3 3 2 2 - , ) ) 2 0 1 , 2 , , / 2 * , * 1 , 5 3 / - . 0 - * * * , ( ' - . + - / , - + + % - * ) , * / 0 / 1 / ( * , / 2 . , 4 / 1 + , , / ) , - * + . , * - + 1 - - - / ' ( + - * + * 3 - * - ( , + , 2 2 0 3 2 0 - / - , * - / 0 6 - , . / - 0 1 2 * . 0 2 / . . - - 0 - 1 0 0 2 1 0 - 5 1 3 1 6 3 - , 0 / , / 1 2 4 . 5 / 1 + 1 5 . , 1 / . 2 , 3 - . 2 - 2 . 5 0 + / + % !                                                                        
+                                                                                                                  
+ 
+   & ( * 2 7 7 ; ? A E M S L R T W [ _ i h r p n o r n u w m j g j m g q u q h k f e n m f c f ` d h _ e h h d \ e ` c b d f ` d Z ` ] \ _ _ [ _ ^ \ \ X ^ b a ` i d d \ d e c k a b f ^ ` ^ [ Z c f f ^ g b c e _ Y Z \ b a d g a h m j g i h i f ` ] h k j n \ a e j e b f h _ f d ^ d ` ` c b ` b e d i e ^ a a ` a a a ` a \ Y ^ ` \ ^ k d [ a f a ^ [ Z Z ] a S S \ ] Z d ] X a Y ] \ ] b [ a ` ^ T Z _ b [ \ U ] ` c a W W ` _ ^ b _ _ h a X ] [ ` a a Y X X ] b b b c ^ c e \ f i e _ ] p p l k m h p n y q l p m g k k f ` h e l m m o f j k f k f k i k l u v n l u h i n m p o x o o k l p l k r q l t l l s s p t y n r o t n k k p s p k k i i o o s r l m i j q o o g c j q l g j b ` h o f c c d _ _ _ ` ` a Z X [ V T T S T Q U N S Q R V R Y T N P O Q P Q T Q J K I O S O M I F F J K K D H J F J H F K B A L L C D D G E C C C C < : @ @ @ ? A @ = I B C @ = : < = 8 < 8 : ; 5 > ; @ < > < = 6 = = ; = : < 8 8 = : 9 @ A = < ; 6 = ? = ; 3 : 6 ; ; ; ; ; ; ? = 9 : @ ? > ; < > ; < = ; 7 > 6 9 : 9 7 @ ; 3 6 2 8 ? 9 = 9 5 9 ; 9 9 : : 5 4 ? ; 6 8 4 2 3 4 6 6 5 9 7 5 7 6 > : 5 8 8 3 7 6 1 5 0 5 1 3 . 3 0 4 4 7 4 0 4 6 5 4 / 2 0 3 2 3 2 0 2 5 8 2 1 1 4 2 6 4 2 7 4 2 2 / / . / . 0 + 1 0 : 4 6 4 / . 1 6 . * . 4 / * * + / , . 2 6 - 1 0 , * + 1 0 0 1 0 / + , , , + * ) * ' * - , - + , + / + . + / 3 . ) 3 0 / 4 3 - / - ' * ) , 0 , / ( / ) . 1 ) + , + / 2 / 3 . 3 3 / / 8 0 + - 0 - + / + * + , + , , - , 2 3 1 0 / - + - * + . 3 3 1 - , 1 . - . - / , + 3 2 1 1 - 0 2 6 6 4 3 0 1 0 / 5 2 / 2 2 2 0 - . 0 + / 3 3 / - . 3 / + + 1 0 , . . . , 4 / 1 , 0 1 . 4 0 1 3 5 . * # 
+ 
+                                                                                                                                                                                        
+   " % * 5 3 6 6 7 ; D G L L M S [ c i m p o k f q u q q r o d n i f m l p v r o i d g m p k h g o i k _ c g n e ` h c \ a a e e d c c c \ e ` a \ X _ \ Y g c b _ ^ _ d ] a d d l i f h o c c Y ` \ ^ _ b c a g g d b a _ a e j d a b h g i l j j d ` f h d j q e h e k i h p h f b c ] _ d b i d c b a a k k c b e ^ d k d a d e e c b d i e b ^ \ ] d a a f ] Y ] Y X Y X ^ \ _ [ g \ \ Y ^ b [ b a d _ ^ \ c ` ` [ \ a [ \ [ \ ^ ^ [ _ \ [ a d ` g b a ` f ] _ [ a d ] e l a d c ^ [ l c n k o m l l p k k q q u h p p t j o q j f i p h l p n r s g j h o r p o v k m r l m q u r r v s t l j v n h e l s x u o t o q m q o p p o u l p l m t q i o o r w m r o | u l l n q p o j m l r m g b j l l k e ^ e f ` c d ] Y a ` a W Z ] [ \ Z Y T [ V \ W S S O S U P Q S T V Q S R K F P P N N I F E M I J I J L I E C A D H D E @ ? ? E C F H C @ B A A ? ? @ B D E A ? D @ ? ? A < : E < > B ; C = < B C = : 9 9 > > 9 5 = > : 8 6 : : > > D B > D < ; > 7 3 9 8 ; = > 9 ; > : 9 = = < 9 9 = ; : < 8 : ? : < B A 7 = ? < 8 9 7 6 : 8 4 6 3 6 = > : < : : 3 = 9 5 8 9 6 1 . 7 9 4 6 : = : 9 7 6 ; 3 7 2 9 5 4 7 3 2 5 6 3 8 6 8 7 9 2 2 8 4 2 5 3 6 3 1 1 / 2 2 - 2 7 4 6 5 2 2 8 3 1 0 8 3 0 2 2 2 6 - 1 2 3 / 0 1 8 2 1 0 0 0 / ( + - , / 0 , ( * 0 . 3 2 3 . . * - 4 2 / 3 / , . 0 . * . . ( * ) ( * . - + . + + - ( ( + / - - 2 / ' - . 1 , ( - * - 0 . / / ( + * * , , + , - 1 4 0 2 3 3 2 - . 1 2 1 5 0 ' , ) * + 2 / 0 / , - - / 6 2 1 3 + - + . 1 1 1 2 2 4 3 / / - 0 0 0 0 5 2 4 . / 3 2 / , 5 4 5 1 4 6 3 / 3 / 3 5 . - / 1 5 1 3 1 4 0 6 . . 1 ( - 8 2 / - 0 4 2 - . - 0 / 0 / 3 2 3 2 1 5 1 $ 
+                                                                                                                                                                                      
+   
+   # ' * , . 3 5 4 7 C K O V S Q U _ e c ` g q k r n u s r g ` g i j l r p x o h n p u r s s o a g o j f h d a c i e f h g e a f e e b g Z _ ` a d ` ^ \ Y ] \ [ ^ ^ c i _ g b a i l o k g k h d i e a _ e a ^ a b h g i d g l g k ` g j n i k j g a h i c g h m i q o c j m k f i h c c h ` g h d b \ a [ ` g _ d b e d g e b c d p d c ] b e d ` ` c d c c c ^ Z \ _ [ _ b ` Y [ [ [ \ \ ] ] Z X \ ^ c X ] \ j d a [ ] b _ ] Z _ d Y U _ c _ i [ U e c j a g f b ] a l a ] d c \ ] ] a d c o k k i i v v v f l r p r j m r h q r g i n q l v o p q t k d h m r i n j m q q j p n p u u t f o m t t r o p s r q v q x s p q t k n k v r q k k k l k k r r v q n p k z s r l j q p p q r j w q k d f h p y m f j b d f c c ` b ^ b [ ] Y ^ ^ d Y ] X T V X ] \ Z U ] T Q T T U N K S O O U S N N P L I K F G M F @ A E E F B L D B B D C E ? G D D B D ? D @ > G F G C D < @ D A E ? = 9 ? ; ? @ @ D ; > > @ D @ A < = 9 7 9 ? > = = 8 < 7 6 : < ; = < < ; B ; : 6 5 7 @ ; : ? : 9 < 9 6 : < 5 ; : 7 9 8 ? ; 9 = > 7 7 ; 7 4 ; 7 4 7 6 5 6 4 4 9 : < 9 ; 4 7 5 3 7 2 4 7 : 2 3 2 3 4 5 4 < 9 8 4 3 3 4 2 6 0 7 4 2 4 7 9 5 7 6 3 8 5 5 1 8 4 5 7 4 1 0 : 5 . , / 0 4 2 0 4 5 0 5 9 8 7 2 0 / . 5 2 1 * - - 0 0 / 1 . . 1 / 2 2 / 3 0 + + / 0 0 0 * % , , * 3 3 / / , ) + , , , , 3 . 1 1 / . 0 , + ) * ) ( + + , 0 / . , + , - * , , , . - + . 0 / * * * - 0 , / 0 , - , - ( + , ) * . - 0 1 5 5 6 , / / 1 1 4 / 0 - 0 - 2 0 / - - + 3 2 , 1 0 / 2 - + - 1 0 . 2 3 3 0 3 1 0 2 / , 2 2 5 0 2 . 8 1 4 9 0 2 6 8 4 0 / - / 4 0 1 3 4 0 7 / 2 3 3 5 6 3 5 4 0 3 - 1 5 4 4 3 7 4 4 . . 1 3 3 0 / / 2 / 2 / 0 1 (     
+                                                                                                                                                                                           # * + / - 3 9 7 9 C F M P J Q S \ f \ \ b l g j m l w k o g g d o o m l i h o q h r q v s p g m a f h h ` ] _ o i g c _ a d h f g a c c b c c e ^ [ ] _ b ` a ` ] h r j l j b a g j n m l e d i h l a _ c m i j m j q l e e e g k m j c c e c e h g f i f h o d e c c f d e ] a d g o e d o d f _ Y ` ^ ` e g f g f ` c _ ] _ c h g b ^ X _ _ h ] a X a a ` e a _ \ ` ] ] _ ^ _ _ Z ] f ] X _ [ a \ _ ` b b h a ] ] _ a d e _ \ \ Y Z ^ d m l ` f d [ f _ a g h e g c ^ g g d c g \ e g e h n k m h m ~ z l f d a k m p r l h k l h s r l n q n s z j j j l n i u h n o o o q m l r u h h i m y m o s q m n k o p u s k n h n k n w m t l c i r m l m j p p l o n | s t n o j i t n p h t p l h j s } r o k l l g k f h k e Z a ^ ` ^ _ Z b ^ \ \ \ T X _ _ W R T V Y ] R M H Z U Q O S Q J P M K N J N L J D E @ C H G H G K G J H F D B G G E I G D A > G F C G E K A G F A ? A B = D < A : ; D > C < < ? = = > A ? < ; < > ; < > < @ E > < > < : ; ? < < : 4 7 : ; 7 < = 9 8 9 : ? < ? < < ? : : 5 5 6 8 : 7 3 6 : 6 9 6 7 5 ; 4 7 ; 1 4 9 : 9 8 8 < : 4 3 : 3 4 5 6 7 5 3 2 3 5 3 8 9 ; 4 8 0 2 3 3 5 7 5 1 0 9 4 6 6 4 2 1 4 0 . 4 2 3 4 8 / 5 7 4 1 1 2 2 2 9 7 / 0 2 6 5 7 0 2 3 / 0 7 2 . ( 0 4 / 3 / 0 1 1 0 1 4 3 2 . . . 2 2 0 ) * , , / , - , 0 5 3 2 - + . 0 , / 1 . 3 3 / / - . * + ) , / . , . 1 - , ) , * * * , + , - - - - - / - ( , + ) 0 2 . / 0 - . ( ( 2 , ( - 1 / 4 7 6 8 3 3 2 7 . , - / 0 0 - / 1 0 - ) * . 0 . 0 0 / , / * * , 1 0 / / . / / 3 7 2 1 / 6 2 3 1 3 2 9 3 3 - . - 0 1 , . 3 / 2 6 3 0 7 4 / 1 3 1 7 2 6 1 3 4 1 2 5 0 2 3 3 6 1 6 5 4 1 0 5 8 3 4 3 3 1 1 2 / . / , &                                                                                                                                                                                            ! & ( ) , 3 7 : ; C D E M M N R Q W \ d ` j f j n k o f j j f i d l j l f n k j m u p s s i g h f p k n l g _ h f l i d c f m m f a h j k o k j _ b _ k e e a \ b q t n k l g o m h _ l s m e g e l m h b i m m k m o m j ^ ^ d i h f k m a e k g q h k f l j m k h g l g b e i d h j i h l g b _ ^ ` g a p i g g c b e d d ` e i e i e d b e ` c a a _ e f ^ ^ ^ a a i c a c c a _ a ] X X c _ h ` _ a \ a c \ h f f ` h d b j d j i e ` j f g o i h f c ^ f s h n h ` e d ] c e _ b ] ` g k h c h o y w s g m s m n q q r g j m o n l s p m o o q g r s l i n i h n t n m x t m l i g m l j k h p r r m l g l s u r k f i o q e | | s p s j t n e p l h p m m s x l l s l m e l h r q o r n m o p l u n k n j m n o e c d ] ] d \ a b \ ^ Z _ \ ^ [ \ [ ` V N Y U R P Q P L V R O L V S R J O R I L P L I H K F H K H H A E F G D E I I D C F G E F K > > < ? I D @ < A C @ B E G ? C A @ = A B 7 = @ : ? > B ? < : ? @ < A B ? C @ ? A 8 ? = D : ? D > > : 7 7 9 9 7 7 8 = > = : < < 8 > > B ; 8 8 3 5 < 6 5 8 < 6 ; 7 9 9 6 ; 4 4 8 7 5 : : 8 9 6 5 > 8 3 4 8 9 3 8 8 8 8 5 9 : 4 3 < = 9 6 4 5 7 8 4 9 5 8 8 6 2 1 6 , 0 7 5 4 3 4 / 7 7 4 5 6 8 : 2 / 0 / - 2 9 4 1 0 4 3 6 2 . 3 2 1 5 0 + . - - 2 1 . 0 , 0 0 - . 3 - - * . / - 3 / - - - , 2 0 ) . 2 3 * 5 / , - / 0 2 . / 0 . - 3 / * , + 0 , ( 2 - 4 + & - , . * . * - , * ' * , , 2 0 , ' + + 0 - / , + + 5 / - 0 - , - + , 0 / 6 4 0 2 5 7 - ) , - 2 1 2 + * . , * , + / - 0 0 0 . . / - 0 0 0 / / 0 . 1 4 1 . 4 1 / - - 2 - 0 0 0 1 3 , , - 2 2 5 5 3 3 4 6 2 3 5 1 / 5 3 5 8 5 - 3 8 0 3 1 2 5 1 2 8 3 4 6 1 1 0 4 3 / / 3 3 8 7 4 / / 1 & ! $                                                                                                                                                                                        
+ 
+   $ ( % 0 5 7 @ B > C H N M Q P Y ] ` e b i k k j m d h h j r k f h l f h o u k o l r q p n c g j j h g g g h a h g o g b h n h i f n r h i j k f j c f d g g d n i l o v q j i o j b n q e i j l f l i l m q o n l l l m l b f f i g k f j j e i h h e g g i i m o m i k h j h m a f j l p g e b a c h b f j d f e a d g d ` ^ c ` c c j e b g ` f f i c g f _ _ c f l f b f b d ^ g f ` [ d \ c e [ ^ g g b W a ^ ^ d j b i k l m f d \ c g j h j k b b h j i l l j g b _ a c f g b a c c h c j r o p r o j m { q p p j i d l f v o o m j h h i o m h h i l p q l e l q p p q o q j p t p o k h m o o k s d h t w t m k m j t n w | r q u k t q p r l q r o l k t o m } n m i m k m p k u t x o r l q q r j c g p s k n i d ^ f j ` \ _ c ] _ _ X [ [ Z Z [ S T S L P R T O P O U N T P Q P O K H L M O H A K H H I H L G @ G Q I G I G E ? E D B A B D @ A > C F D B A B C @ C I B C D C A ? G ? 8 ? : : > ; < : < 9 A C ; = D ? @ > @ 9 < B H < @ ? : @ @ = : = 8 6 8 = < ; < ; ? ? : ? > < > 4 5 7 8 ? ? 4 4 : ; < : = = : 9 ; 8 8 : 5 9 7 : 3 9 7 9 ; 6 4 8 8 6 9 4 = = < 7 8 5 5 7 9 ; ; 9 7 4 : 5 6 2 7 9 ; 2 3 - 3 / 6 : : 4 - 4 > 7 6 3 3 . 3 1 0 0 / 3 . 1 0 0 5 8 4 2 - 2 : 7 2 2 0 - + * - 2 / - 0 - + 0 0 ) 0 . - , - * 1 . / . / 1 . / . / / 8 / + , ) ( , - , ( + , + ( ) 1 / + , ) * , , 0 0 0 * * * + . - 0 / & * * - + + 0 0 + * ' ) ) 2 - 0 ) , . / 1 3 0 , / 0 - . 1 4 3 / 1 4 6 3 2 1 / - 5 4 2 . , . - - , 2 6 1 0 0 2 1 , - 0 2 6 0 0 . 1 , - / / 7 2 1 1 2 0 1 / - 2 3 / : 4 , + 3 . 5 7 2 3 0 4 , 3 8 3 2 4 5 4 5 / 3 7 7 0 2 1 5 3 1 3 5 3 2 3 . / 0 3 4 3 4 1 1 1 3 5 7 4 2 % " 
+                                                                                     
+                                                                                                   
+ 
+ # & * . 1 7 9 = > ? B I L L M J O T Y [ a e i e f p f l b q o n p n p m t n k p v r r l l f h e b n l j e j g ` ^ e i g e i g j r g n l h i k m h m g d g i j i j j t r z q j d o h i i o h m o w n i j j n q i h m k k r o h n e n h j ` f d j h e j g h i h j p u d f o r o h k c m l n y r m l h i k h f l h j d _ _ j m b a a _ e c [ Y b i f m e n o g l b b h i l e [ c ^ e h i k b ] ^ g d _ d g _ ` _ ^ \ e g d k c c f o o l b n j k m h j k h o s o n m i k f i l e b ` ] ` ` ` a o n s v n s r q o l u y j r d n d g h f q w s k n ] d g i g d g q u t h m m k p p q p q p r r q o o g s q f q q h r n t s u x r j u q n n q p q u q { q l r l u p g o p w q u q w s z q k v q u } x q p m n t y l h i o r o n q l h g m l e ] ] [ Z d \ [ _ Y ` Y S Y T T T W X T P Q H N U O U Q K L H L N R J J I L O H J L L B A G G E F E E B D B ; A F E E D B D D A C J A D I E E E I E @ 5 > @ B A ? 8 9 ; = > @ = 9 7 @ < = < ? ? ? B = A B > A A < 7 ; C = ? 9 A = ? > @ : ; @ 8 9 C = > @ : ; 6 8 : > < 6 9 = < 9 6 7 8 @ < 8 3 < 8 6 : 6 5 7 : 4 9 ; 9 5 9 3 4 : 4 5 8 : 5 7 7 4 3 5 = < 8 9 6 < 3 2 - 2 6 6 3 7 . 7 , 5 4 3 2 8 5 4 4 5 0 / 1 3 0 5 7 6 4 5 + 2 5 6 6 1 / 7 6 : 1 1 / . - 1 . + / 0 0 + 2 1 7 5 0 . , 5 0 0 . . 2 0 1 / 0 2 / 0 0 - 0 1 1 0 / . / ) 0 / - ) * , . . 2 - / + + + , - . + + 0 * * 2 0 + ) ( - . / - , / * * + * ( + * - - ) * * . 1 0 . ) ( + 0 / 4 9 9 / 3 / 1 1 - 2 5 3 2 1 5 6 1 1 . ) + , 2 1 * 0 / 2 / 4 0 . 0 4 5 7 2 4 1 1 / 5 2 2 5 . - 2 2 5 2 / - 3 5 / 3 4 0 3 2 0 0 0 1 1 - 7 6 0 1 5 1 1 0 2 2 8 2 - 5 5 3 7 / 3 1 / 2 3 7 5 3 4 5 4 2 3 1 2 5 1 2 + % ! 
+                                                                                                                                                                                         
+ ! $ + / 2 9 8 7 > A < J K I N O R T V ] Z f h g g l j g _ f n q q r p p p s k o t h j h g i m f c e h ` a h f k f e m j d o r p p i q k f j e c j h i h h j m l o n s p o m l l i l m k o j j p l t r n u m w n f h l l r x p u j n s o i k r l n j p o h i m i r u o r s q o m p j m t w v t q p i h j b i o l j e j d c o h i c b c b ] ] e p l p k l q k b e j n h _ b _ _ ` k c b l f ] _ ] c m i c o c e f f g d i m h h g c f h e e r o n i g g h r s g m h f j o f f c Z c h e d f ^ e o h o t o l l n k w h j r l o t n j f c v m n n f k p p l b j o o n n q o l m x t l l m q p g k k j q i d l o g j q v d p n j j n m f f g o s o s x u p m s t t o i o o k w n w q x v s q x u z t u m o s u l k m i n l l r l k h e j u m j b a a e _ a Y W \ W X ] [ [ V V R W T X P M S N T S M M Q L O L J J O K G H M L I J J G N J C G D B G O A C C E C ? @ D B B A ? ? ? F @ A A ? ; ? : = > B < ; @ A ? ? < = < ; > < : 4 ; @ 9 = : @ C ? ; 9 @ ? < D @ A < 9 ; ? = 9 C ? C = 8 ; ; = ; 8 : = < 7 : : 9 3 9 : ; 7 5 7 7 7 3 > : 8 8 7 6 5 8 7 ; 6 : ; 8 8 4 9 8 < 4 7 ; 4 1 3 5 7 2 : < < ; 8 . 6 4 0 - 4 4 5 4 5 3 2 5 / 1 2 1 7 5 6 4 7 4 4 / 3 5 9 8 2 2 3 3 / 3 5 1 0 - 1 7 5 . 0 1 2 3 5 - - - - , 2 0 2 2 / 2 / , . / / 3 - , * + - 4 3 . . + * 2 3 4 4 / . 3 / 2 1 / / . 1 - + . , - ) ) ) + 2 . , / 2 + ( + 2 0 . + . 1 - ) , - , , , / ( , ( . + - / + + / . / . 0 2 0 1 0 3 7 2 1 0 3 / 0 0 2 . - , 0 6 2 - 1 + + ' 1 4 1 / 2 6 1 8 4 + - 2 6 2 0 / 1 4 - ) 0 0 , / 0 6 0 0 2 - - / 1 4 . 0 , - / 1 5 5 5 4 1 1 4 1 5 5 1 * . 5 1 . 2 3 4 1 1 3 - . 3 3 2 3 4 4 5 1 0 1 1 6 6 2 7 2 / , ' 
+                                                                                                                                                                                            # ( ( ( . 8 7 : > ; @ I O G P S U O W ^ ] e h h i e ^ _ d j n q l p l s r q r o h k h h m h a e d d i l j f b b c h g i i n m g o n l g h g g k m v s b e c q i k r y r s n q i o m n o w p q n r s m p q p t m r s u v x | | t r r r n s r r e m q l o l p o o n q u s t x m k y q v p s u p o t t p h q i j k m i i m d m m k g k h a ` h j r k c c j p e h i _ j f d i j j b o f m c b ` d ` ^ b d k k k n c j h i l f g g h g e d d f m k l m o d c h i f d m b d m b k c _ c c ] _ ` ] i q q v s k k u m g m m n n p r q r n q h n r } p j i t n l j r t m r j l j j n p o i p o k r j p e b m l n j j e k n t j s x k n l n f e j r t r y v m s l n u k s t r n q p k z s y w p s m n w w u n m v | m k l r q u p r l o l i m q l n ] f j [ ` c b a Z S ] ] \ _ X R L W O O T R W Q T S J S N K I H J M J H I L S J F H M Q P N L K F I G K J E E D B B B B D B 8 A A < G E D D A < ; ; 6 < < 9 : < > : 9 : 9 A : 9 = 7 8 > 8 = ; < @ = ? ; 9 @ : ? B < ; < 8 2 8 8 8 ; ? @ < ; ? > 8 3 4 8 9 5 7 9 8 5 8 8 < < 4 5 9 = ; 9 : 7 7 6 4 2 5 7 5 9 6 : < 7 6 5 < 7 4 : : ; ; ; 5 6 2 6 = 6 ; ; 3 4 7 7 2 7 5 1 . 5 . 3 1 2 5 3 1 3 8 4 8 6 3 2 4 0 4 3 1 4 4 0 4 8 1 3 3 / 2 2 0 1 3 1 6 4 2 2 / 2 / / - + . 1 2 2 - - 5 1 , - + / 3 / * + 0 3 2 2 , - , 2 1 - 2 / 1 / 0 / . - ) + 0 1 - * 0 + + * ' / , ( / ( . / 0 1 0 / , + - + - ( . 1 2 - , - * , + ) * - . 0 - , / / . - - - / / 1 2 . 2 1 0 2 1 , * / 0 4 / 4 / - 6 , 0 4 0 3 / 3 0 2 1 5 0 - / 3 3 4 3 / + ) - / 0 0 - / + / / 3 2 . 0 4 . 1 1 3 . 4 3 7 5 7 3 4 3 1 8 3 2 1 1 + 0 1 1 . 0 6 5 1 3 2 1 7 5 2 5 7 2 6 7 6 / 0 2 1 6 7 4 6 4 . ( &                                                                                                                                                                                           
+ # ' + * - 2 6 5 = A A I N I Q V V T Z h ^ c e b k d c j d i m o q k m p k r u o d a a c j h h b i m l j n e b ^ i h i b i j n o m r i l o k k h f m o e h e j i q z s t q g s k q q p q w w t s p h i n u n s w n s x w m u v r s n z m n o r k u q u o u t q t t p w w o y t n z u x r q l p p p m p n m | m o y z v q i q s l g o k m i d k u o o i j l i i i i g i d q g n o k d k o f g d h d f i f b b c h d f f i h i ` g e ^ h j h k a f g d c f m h b f _ ` m o o f d a f ^ ` a a e j w q o t q m o o i w r k n m n r n i k e k q r r q l k i o j o o u s h j f q p g k i m l i j j m m f b k m f l m h i f k t r h o j m q p n j p w  t l f i q u n v u r j j o j w o z p v } m i w r r s v v } u l h s z o o m k n m j f g m j j c d d h e a a \ _ _ _ _ ` b X X W U Z U Q T S T X R N N M L J K P N K H G M L P I L Q N I F E E J E E E G D @ ? D D D D C : F C ? B > H A B : ? @ = < 9 = @ ; 9 9 ; ; : = ? 9 : ; C : 9 8 C ; ? @ ? ; 9 ; 9 ; @ E A @ 9 A 6 6 8 8 : @ < > = ; @ : : ; : 8 6 5 ; ? : 6 8 5 5 4 9 = ; 3 3 8 ; ; = 9 8 4 : : 8 1 6 0 8 = ? 7 6 : = 3 3 = 6 6 4 7 < 6 7 3 5 4 3 7 1 7 @ 4 0 4 5 4 0 4 9 2 4 7 3 / : 7 3 2 2 - 6 2 7 9 0 2 4 5 / 2 3 2 3 7 2 4 7 1 4 3 0 4 2 2 2 1 / - . / 1 2 - / , 2 1 3 - / 5 / + / 1 1 . / ( + * / 2 - - / 0 1 2 0 - - 0 + * 1 - 2 1 - + ' , , + * ) . / , , / , - * ) ) * 1 / , / - , - 0 , / , ) ( 3 4 / 3 2 . , / . 2 - , , 0 3 6 0 4 . 4 . . 1 0 . 2 3 4 3 . 2 1 / 0 0 / / - / 2 6 6 . - 2 1 7 1 0 0 , ( 1 4 - 0 0 + , / / / 3 - 2 - 0 + / 2 1 1 1 3 1 1 / 0 1 5 5 . - 1 1 1 < 0 0 2 1 0 8 5 6 5 1 5 3 1 3 7 / 5 : 8 3 . 1 1 8 8 4 5 / , + $ 
+                                                                                                                                                                                          
+ $ ' * . 0 8 9 8 D A D O O T T U T \ e e a h g f _ h f h m r u p r h t o o x m l f ` e q k d g l r p q q p k n l p n n n l p l k h l q r o h c i i j k g g c h k o u x q k l t v s o g n o p o t m m w k i s q t u w v m o z x m q w o m x w w m l u s v r p z r u s o o q { { | s r q o r y v t m p i l t t n r } u v n t t o k m u k r l i s x z q k r l h l q p l l i d _ k i j o s i h g v o d i j k i c h h d e l h v k b a b h t l j m e d g f m c d e d g l k l i c d f c \ [ _ g f g o m k l k o k n n s n u q l q p q v m m i n p r m m f u l b p r u t n r q p m m m p k k p i k r n t d l d i m l i h j s m r m p m l o l p p l q q q g f o p q o v t s w p q r v v w p q r q u t v w y { | { y v l r t m s u u r j o j k p j p r k j j d h h j k f f f a e ` R X ] ] W Q R S U U W P V V S T O P P L O K L P O M N L L L G E L O G C G G I E D G @ D A > ? @ D G = B G > 7 < A G G ? ? < ? B = : : = = < A : : B @ B A 9 < ? A B C > ? < > ? B @ ? ; ; @ 9 4 6 : : 9 @ > = 6 ; 7 ; ; 8 9 5 6 < ; > : 9 8 7 6 = 8 9 8 5 9 : 7 : < < 7 7 8 5 7 6 / 8 6 6 7 ; = ; 5 8 < = 5 > 3 9 9 9 6 2 4 4 6 1 8 = 2 3 8 4 : 7 6 6 6 5 1 0 2 7 2 - 6 0 0 8 0 2 6 0 1 4 4 2 5 / 5 1 4 3 1 1 1 3 2 6 5 0 0 1 1 2 0 . . 3 / . , / 3 0 2 / 0 . / , . 4 2 , . . , - - - . 1 / . 1 0 / 1 2 . - . , ( , + . - + / 1 - + . . - . 0 / / , + . ' - 1 - , . 0 , . , . 0 - & ' 3 . / / . * - + 0 2 - , + / 5 1 2 , 1 4 / 0 4 + - . 3 1 - 1 5 4 4 3 , 1 7 0 4 1 4 4 1 0 / . 2 5 0 6 5 , 3 1 5 2 3 / 1 - 3 4 0 4 3 1 4 , / 0 3 . 3 , . 1 * . 9 7 6 2 1 0 6 3 2 5 2 4 4 1 3 2 0 4 . / - 3 2 5 8 : ; 5 - - , 0 7 7 4 / / / ( !                                                                                                                                                                                           
+    % ( 2 3 : ? > < > B D M K P V W ^ d g ` k g f ` h i e m ~ o o q p q ~ r k i j o g n h m i m x v q r s t o t k q f g k q u w q k g s r p p r d g k p l j j i k e p j k m o p y s x l p p n p r r w s w u z y z | u x t k x x w t o t q w t s v z u w s o p u p y w y o q } y w { v t r u o r t x s q o k o s m t r w r t m u t l t u v r o p t w o r s q p m o u u o l b l c j m v q o g o w r s p n o l k i f c g q r l c h h b j o w l f h g f j f d o i e m b i p l l r i b c ` a a b n h i j g m s t o s p r t y m q t k u u k q i h i c e k o l j w w w r p u s s t u o o k n n m w s o q r i k m k k p l u n n q q k m n p l h o t o l u i h o k h k o o s p s q o m t { w v p t t s r l u y x u w t s s q l j r r r t s t m s h l q l q o h m e i k g e j g f e c g g ` W [ X R [ U T Q S U S Q Q K K J M N P Q U K P L N N M N G N F A I I I A I H I H K B E D ? G B C A @ = C @ B K D B > ? @ ? C = C > < @ = A ? A ? @ 7 ; A > @ C @ @ ? ; < @ F B = = ? 8 7 9 : ? > @ G > 7 ? : ; 7 8 @ = = ; > = : 8 < 9 9 ; 6 4 < 7 : 8 ; 9 = 7 @ 5 6 7 < < 7 6 7 8 = < : ? < B ? = < ; 9 > ; ; > < 5 7 = 8 7 : 6 7 5 4 9 5 5 5 8 = 6 2 5 9 = 7 6 3 7 ; 4 2 5 5 : 7 1 ; 9 4 5 / 4 3 4 5 8 1 0 4 4 3 1 2 5 0 6 6 , ) 0 2 / 7 4 5 1 0 0 1 2 , , 1 . . - / 3 0 0 1 / 3 - / 5 - * 0 2 - + 0 1 0 , - + 1 + + + ) / 0 , , . 1 / + - 2 2 3 0 . + . 0 1 / 2 1 . 0 1 + * / 3 1 - 0 - . - 1 2 2 0 2 5 7 3 ; / 2 2 2 1 2 3 / - / , / / 5 3 4 2 - 1 . + 5 6 3 0 1 2 1 2 6 2 5 5 3 0 / 4 2 6 3 3 0 8 5 2 . 0 4 8 3 2 2 0 . 2 / 4 / 0 3 2 6 3 8 6 / 0 7 1 5 8 3 1 5 7 9 / 6 2 4 1 2 2 6 6 8 5 : 0 1 3 4 1 2 7 7 7 1 , * $ ! 
+                                                         
+                                                                                                                               
+ " # & , 3 4 5 7 B = A B F O M P P T ] g d c e j h f n o n n r s q o l p r q m k p r p p n q x v | t o r x v t s n w l j j k w u v v u y p v l o k d i m r k i l k j n n r q o l h m m r x q { v x v u p z v } t { u q z n u { u v  t o x x z u x q ~  t r q u m n z x u t t u m r s w t o p w  v s r k u t t q o q { { n r u | { u { x p t w t q q y v t s r y w k o m p p l l q o p m n q w o w m i s u u k k d g e k t t q f e h o m l i i l g i ] i k o k j c j x i c g h e k i g g i q g e d l q q t t r j k i q n o l c s o i f j n q k k q n v y o v x m w q o u { r q j q u n z r t t s o l r p l j n k z k l r i f p s n x r f p z u p t w v q i m o m p t u x p k l j y z v t x m p p r p v z s z o l p l r m l w w o m } v n i s n q u o i i l i j l l h d e c g a [ ^ _ Z U W R Q [ _ W P S V O O U N R R N L P O N U S P L L K G K L M G H F J L L H G K A C D B A I C E E > D E D A B A B G D @ @ < C > @ B D ? ? = ; 9 C C @ = ? = A @ D D A D < < = B > 3 < 8 8 : @ ; 7 B = : : ; < 9 : : 9 5 5 8 : A > ; : ; : < = 9 8 : > 8 9 0 : 4 : = : 9 5 ; @ ? ? @ 6 < 9 : 6 ? < ; 4 > ; = 7 < = @ < ; 2 8 8 5 8 < 2 5 4 2 5 8 3 < : < 9 5 9 5 6 2 2 8 5 4 0 3 7 5 ; 5 5 0 1 1 2 1 1 6 4 5 ; 3 1 3 4 1 0 / - 4 9 5 4 2 . 1 0 2 4 / 1 / 0 , 0 4 1 2 / 1 + 2 0 / / . + + 3 1 / / , 2 / , 0 / - * + - - . 2 2 * * . + - / , ) - . * , 0 4 1 6 0 4 2 2 - - . 4 5 . 0 - 0 1 2 6 2 1 6 7 0 0 8 6 4 0 4 2 4 0 5 0 3 / / 5 3 3 2 0 0 5 . - 4 7 2 . 1 1 6 4 3 2 3 0 - 4 - , / 2 3 2 4 6 5 3 1 / 2 5 9 3 6 . 3 2 0 3 2 0 0 0 5 3 3 3 1 0 7 7 4 5 6 / 3 8 3 5 4 3 5 2 4 7 4 4 4 1 6 0 3 < < 4 2 ; 7 4 0 / + $   
+                                                                                          
+                                                                                             
+ 
+ # ' * * . 1 7 : C C E M N P O L Q S W ` h f d g n k q s o x w w p m l r w s j n s q m s v } z y | y m u v o n o o q r x v n y t o y t x n t k m m f k i l o m e l q } | r i l d l i h n v w y t t r p r { z } u u r l p p v s s r x p r v x | t { p w w w v x w r x w | z p | s n q p r | t r s z ~ u t t s o m o z s z v m ~ | w  v y s u u v w p v w n o t v y t l i m n r g k n o o p t m t o t n g i l q e j g c n r k o r e m k p i p d m j e j e j q m i o k n o a b d g h f ` _ g o g l n q q p u s y v w v t g k s s n u j l r n o q t u v u u s o u r o i t q { t u k f j n l s s n i j l j p j m i f h m k n o n f i k q v v m m u u w x v | u p q n s p r v w u y m o y q s o { l { v t q o r y t q u k k v m k t w s p  x p u p i i y s h o o q e j y l m g e d b _ ` \ a ^ ^ R U ] U S S W X T Q \ P W N S P P S Q Q N I S P P T O L F H I G M O G J F I G E A G E E A G B F E O J C C B @ I I C C A > A D A A @ B @ > > G F H = > @ C @ J J @ ? ? ; A D 7 7 = ? : @ G ? > > A ; > 9 B > ; < < < > ? = < = = ; ? < > 7 8 > 6 < 8 8 6 ; 9 8 8 6 5 6 > ; C ? < 9 = 9 8 : : : ; 8 ; 9 5 7 7 ; < 9 9 ; 7 : 5 : 7 6 9 4 3 9 3 3 ; 8 9 8 ; 8 8 7 5 3 5 4 2 5 5 6 7 3 7 9 1 2 4 4 4 3 2 5 : 8 ; 0 2 1 3 2 8 5 5 9 8 4 6 . 3 2 , 1 2 6 2 2 2 2 . 4 3 , , - , * . 0 1 0 0 0 - . 4 6 0 . , . + * / 5 0 0 / 0 . 1 + * 2 / 0 + . 1 2 . / / 0 + 3 0 6 8 / - - - 0 / / 1 0 / 1 0 1 2 0 / 1 3 1 8 9 3 2 4 5 / * 1 3 5 5 6 4 0 0 7 2 0 5 0 + 5 5 4 0 1 1 2 4 3 2 2 2 . 4 0 1 2 3 2 / 2 3 4 3 3 2 6 3 7 : 4 7 2 2 2 5 6 5 2 1 6 2 2 : 2 6 3 3 0 / 5 / 2 5 2 6 ; 1 2 0 3 4 2 : 2 6 4 2 7 8 : 3 8 9 4 1 0 . + $  
+                                                                                        
+  
+                                                                                             
+   % % . / 4 6 9 = @ E E H L O L P \ Z V a j c _ d k p o u x p { x t s t x r s s o m n q w x   z u r u x s s v x y r v y n q m q z t n p o s q f p g l m p u q n q q s s p n j p l r m s w u u q o x w s r s t q t s o q y w s u u  p w w y  }  s } x l z s q { v w | s x z r n t v x t { | w s { z t z  ~ { z { | { y ~ | v o y v x t u q p q o s s o n o | p r m o i j w k p p k o q p m m m m k h k q k f n m i m o n p u o n m r q o k j i l h k o t r i h j s n q j g r l l g g l e c l j r v s p k u q o q x m i p u z w l q u u v o s h m p p m m l k f g j m x s t r t l s w z q q r r r s k m p r n n k y | r s t u { v { } ~ p y p v v v { x z u s w t p w s { v x { { q w  { n v y t r s r p x w w w u s z p w x v ~ { w t u y s x t u o r u u k p y w p m j f b l h X W ` ] U [ Z Z U [ \ Y Y S Y P R N S W Q I S P H O R M M Q Q U J H L G H I J H L D E I G G J H H F B F G K M F F A B ? E A D C H E D A B @ < B G D H E D F G H B A A @ D D G A D D B @ B B > C E B B = A B B = @ A < 9 @ ? B > ; ; ; < ? ? A = : ? < = < 9 9 < ; : < ? @ = 7 7 = ? A ; ; = @ 9 8 9 : ; 8 ? 4 6 = 6 ? = 7 : < : > 5 > 8 < 7 7 : 6 1 9 4 < ; 7 7 ; 2 6 8 3 8 5 2 9 5 3 3 3 6 4 6 6 1 4 5 7 5 3 6 8 4 2 / 2 : 6 < 5 4 / 3 4 7 5 6 / 1 4 9 4 2 2 4 0 1 2 0 1 3 / 0 2 0 . 5 3 3 1 / 0 5 3 5 - ) / + + 1 / . 2 . . 1 1 2 3 / 3 0 0 0 1 . 0 / 2 1 / . 0 5 3 3 3 2 0 - / 3 2 1 5 2 0 5 3 3 + 2 1 : 8 9 4 9 1 9 6 3 4 4 5 4 6 2 2 7 6 3 7 3 - / 1 1 - 6 2 0 , 2 8 6 5 3 3 6 4 7 6 5 1 3 7 4 7 9 1 0 3 7 4 = 2 4 1 3 6 4 / 2 6 4 1 3 3 5 2 4 5 2 1 5 1 9 3 4 : 6 : : 7 < 7 9 6 = 2 0 6 / 5 9 ; < ; 5 8 2 : 3 + % %                                                                                                                                                                                        
+ 
+ $ $ - 2 7 8 > B B A E J P N N L S S W ] i i d j j y r n q n v w p q s v u t x r h i l v z z  y v z u x r m z } | ~ y r q n s o w u l t p p h l r o h o p u o m r r q p r u w u t x v s v v w v p } t y  } } | w z y p l j t q y v {  v x x y r r | } u u r w    | | y ~ { u x y z  y v x o r ~ w x ~ v t v }  y y } ~ | w } v y x  q r w w y x m j q } w s w u w v u h r m l j l w k k w l n h v w p m v p p i n m q t o m k n k o p k l m h n u u x r m n o r t w i o p s j k m h f d m t u m q l r r p s q q t w v | y y s x { v s p r x t q j s o l p j x r t p y y z v v u r x t m o p m s o p z { n g v r t w x v u t x w o o h n | 
+ x | |  | | t x s  v q v w w r q t | z s o i l | y u u { w v { x y  u } w u v v y w u x y u u u r s m k p s o y u p m f k t k g _ ^ [ a Y ^ ` Z a [ Z U Y Y R U T L S V L P V U S N N O L S Q K L O H J K H F I J H E M K L G D C H I I J H L E = > C D B D ? D G D A B C @ B C H C F G D F C B E G D E I H A = E C B B > > E > A D A ? ? A 9 ; B ? < ? @ C > ; < > > B > ? A ; = > H > < ; C A ? > ? ; < @ ; : ; ; : 9 : A < : 5 : 9 6 9 5 < = 9 > : 9 > > < ; ; = 9 : 4 ; B ; 9 8 6 : 8 7 6 6 < 8 ; 8 = > ; > < 8 3 8 9 ; ; 4 5 4 4 ; 9 = 7 5 1 8 2 5 5 4 > : 3 4 7 6 0 7 8 1 3 3 8 4 1 4 3 4 1 2 1 2 0 . 4 6 3 6 3 7 5 / ) 4 4 3 . , - , 5 - 2 - , + 2 3 3 / 6 1 . / 1 2 4 / 3 + . 2 + 1 3 5 1 3 0 3 4 2 . - / 2 / 4 6 3 0 0 4 / . 5 6 1 7 2 6 0 9 : 6 8 9 7 9 3 6 3 1 4 5 7 0 4 3 0 1 5 5 8 3 1 7 5 4 3 3 4 2 3 7 7 5 3 5 2 8 5 9 8 2 3 8 : 8 8 5 3 8 > 7 1 7 7 / 0 2 ; 6 8 3 4 5 1 4 1 6 3 8 = 9 6 8 B 9 8 8 : > 2 9 9 6 7 : : 6 9 6 8 8 : 7 * ' #                                                                                            
+                                                                                           
+ 
+  " * , 7 6 5 8 C C D E G M S W V O M Z V d e g l j q n k l s o t o q z } z z { r o l m m { t | { } x r w { u w u q t t s v w r s t | t w q s q o v r i o t w t s q q t h m r s t m v } u | | | y   y u z | } ~ | y { x n t t w | ~ v y { w { y t x y ~ v x x t  { s } s w | y  u y { u x x u v w  z t | | x } y y y   ~ ~ x } z   w p r w t u t s l o s o q w r t u n k q m k g k o o m t k q o o p l k m r w q p p r p g o i c i j o m p m n s y s o p n p r j s u l j k j h j g b j e k o u m t r { s t { t u v | y r v p q x w t | t o r t q l v q r v r t x z p x | y s u q k k q q u u u r o p t t l g o l o l q y t r u y p q r u x w t v | } z u q x u w v w w z w z t x s t q v x { v t x v v u x } |   r u x r t w w n v x | m u r v v p k o s q p j n p w q t l c d h e d d c Z ] c \ Y ^ Z R W S Q T W \ U S X X U N P Q U Q L M J K G N J G M M I I G E H I C G P K J M J L J H @ = H D B B H E A B C H A @ A B H D I C D J C H J K C A F G E A B B I G ? < : < B C B = A C A A @ > ? : ? F B > ; @ B F C A > B @ ? D > 8 = @ = A C ? 9 8 D @ > 9 > = = ; @ @ ; 9 8 6 : > 7 = < 3 8 > > ? < @ 7 : < ? ? 9 < > C = 7 6 = : 9 6 4 4 4 8 7 = B ; < 7 : 8 ; > @ : : 7 5 5 4 6 7 3 6 7 7 9 8 : 7 = ; < 9 6 = 8 8 3 0 3 2 5 7 5 5 7 6 8 5 8 4 4 0 0 7 8 8 1 6 4 0 . 0 5 1 . 0 3 / / 1 0 . / - 4 4 5 5 8 7 . 1 3 3 2 5 2 / 0 / 0 2 4 4 / / 1 1 4 2 + . 3 2 0 3 9 3 3 - 6 5 0 5 4 4 4 8 9 4 9 8 5 0 5 4 4 3 2 6 5 7 ; 0 2 9 7 2 1 1 3 9 7 7 = : > A = 8 4 6 8 5 5 ; 5 5 8 8 8 8 3 3 5 : : 7 : 5 8 ; < : 8 7 5 2 6 < < < 5 4 6 9 ; 8 9 6 9 = 7 < : @ ? < 6 7 8 8 < ; : : : : 6 = = = 8 4 5 - + $                                                                                                                                                                                        
+  ! % * 1 / 4 7 < @ E G G P U X Z Q S \ _ h a b k k o m k n } s j r x r x  
+ ~ x p s x } x  | u x u p l 
+ y p t n w x | ~ x z w p v r q t p n o p p k i q y v q m p o o p r t o r s s r v t z  { z w ~ { x w } z | s x z x y ~ r z y s y z { x t t v z y { x q t t y v p  } } x { w ~ w y } x x y { | y w  q { x { {    | x  {   o l q w { { ~ z t p o n s p y r o p v m p o x o b e k r k p p q o s l r g j l j p k h g l c a f n j p w q l y x q n k m r t r t m n i q q h d h a d j n x w r o l y } ~  x  y ~ { s u q r  s p w { q t t o n x z q x w x w w x y  z r q q r r { t s x x m ~ w u p n i j m u r x v | s v o r { v v u n z w w w w t z v w w s p y t w u w | x q m | { x o u | y z { x  w | ~ u s y w t s t s  | z }  {  t r t o n q o g l v r r | o s m m e i e h ^ ^ [ ] f \ Y X T Y S W Z [ ] Z Y R \ [ T S W Q Q J J M L N L J O L J M M K K O K H E I L N N N J H F D H J D B H K H C C I E G B E H H J G C C J H O M I E D @ A B D A G H : = = > A J J B D F ; B B ? A A ? D D @ D A < B @ @ = E > ? D @ ? A A ; = B @ 9 8 B C D D ? C 7 : @ ? D D < < ; @ ? ? > 4 : < = < : < : A @ = 9 8 7 ; < ; 7 8 : 8 ; 8 7 5 7 ; ; ; < = @ ; ; ; : ; ? 9 ; ; < 9 ; : 7 2 7 : 6 9 ; 9 : 9 9 8 6 4 ; 7 4 3 5 4 2 9 3 2 . 7 ? B 8 6 0 1 0 5 4 1 3 7 9 2 - 7 2 9 / 2 7 4 3 0 2 2 . 3 0 3 0 4 6 6 9 6 1 3 ; 6 1 0 5 6 / 7 3 4 2 2 0 4 2 / / + 3 2 4 8 1 6 2 2 1 : 9 8 4 2 2 7 ; 7 5 8 8 4 0 6 > ; 4 5 : ; 5 3 5 6 5 2 2 0 4 4 9 : 4 : 7 6 ; ; 6 8 > 6 6 7 5 1 < 8 B : : ; : = 8 8 4 8 6 2 4 8 9 5 7 5 4 5 8 ; 9 6 3 9 : ? @ @ 9 3 9 9 < > ; @ ; 4 7 9 @ A = = < > < 9 = ? < 8 4 4 1 , ( # 
+                                                                                                                                                                                     
+ 
+  $ ( * 3 5 5 9 9 @ H I I N Q N ^ O V X ` d e j h g i m h u | x t } w v w v u y x y u | y z   v x  u v } r w x s  z z x { ~ v t u s q l l l o o n p o s t q v r s o j s v s p l t w w m x z { v z y y | w | v v } v x y     x v s | r v u n y }  } } y v s v } p u t w x r { } | y z w r v { z w  { v { s n m w } } {  s y 
+ ~ | s q u p w } | w q s s r u o u n s z v o m p u q d f j p q s u k i l p p g l o r t r e l h g p r f l p v t p p t o u | u x w t s m j k l i k d k g i b h o p u v w w v t x x x | z u p t n n q o x t u | x { w v | r s x r x s v { r o { w m o v  ~ s { w y u ~ x w o m p p m q y { s u r x r w t r u s q q o n t r x s r x x u {  t v v  | w w q z {  q z y z ~ z w  t t u l q t s q y o q n  ~    { r t r q i k a i n p z t o s n s r k o h k h ` g d a b \ Z Y V [ W Q W _ ] T U \ Z M L N L U O J O Y R J N P Q G P M K I N L J O M J J I H M F F K I J B D D E P B H J G D F C C J A A B A @ E H F G A G C H E F @ @ A @ > C A G C L E C B ; E B B ; F ? A G @ A = : F E = B ? = > A < B ? @ < = B > = < ; 9 @ 9 7 = ; ; A ? : ? @ A 9 6 9 9 ; ; < 7 : ? < : A A ? ? 6 4 8 < 9 7 9 5 > : 7 7 8 9 7 7 @ ; @ A A ; 9 5 8 < = : : 9 9 9 ; ; 9 4 ; 5 9 ; 8 = 8 7 1 3 3 6 8 4 : 7 6 3 5 4 4 1 7 ; ? ; ; 6 3 2 2 8 7 2 4 8 = 3 3 6 9 0 / 5 4 3 6 7 9 1 5 / . 1 0 8 3 8 0 1 0 4 8 : 5 6 3 2 - 3 2 4 1 1 4 3 . / 4 1 4 / 1 2 1 8 3 7 6 6 8 8 7 5 2 8 9 ; 7 ; 7 7 5 4 ; : = 8 5 7 6 ; : = 7 1 . 0 5 7 4 : 5 8 8 2 : 9 6 9 5 4 5 2 4 3 3 7 9 ; 8 : : : ; : 9 6 5 3 5 ; : 7 : 3 2 9 9 : = ; 9 < = > : : : : 9 8 8 9 : = 8 7 5 6 : 8 9 ; : 9 8 7 8 ? A A 9 2 0 + '  
+                                                                                                                                                                                       
+ 
+ & ( 2 4 5 3 7 ; ? I K O O N U U Y Y a b l p k f f h k u o x x  z w o { z u t w r r q u q } { } z z u r m t y v z  y { }  y v y t w j p t u p u r r o u w w x i q m p q s k p r u  ~ { { y j r v | z { |  y w x t   | }  { } z y w  | q s y v y } v v x w { y t u s } {   z ~ t y o u   x u z ~ } w o p q { | { | z q s z { o t { p l u y x q y r p r l p n t u v r i m s j l o k j j j k h k m r o o k l l j l l k d c o p l w n o l r m t q p w u x u s r l o g f h i ^ a ` a [ i s w t s r ~ t u s v y s o s k k t t u u o t u v w x h m q l u p v r x m y r u s r o r t u r u w y s q w u z u l p o o t r ~ t p r y u k l p k n r q s o q p q { r q m p v y s v q z z ~ x x r y | { } z y | ~ w z r s s m o s v w r u n l o { z r l l x s u q p r n n l s s m p w t n r n n o r d g ] ` b a ] _ b b Y Y R U Z ^ ] W \ W P Q R L T K Q S W V P S K Q O Q P M J J C M R O J L E P I I J I G F H A E H E E H K G C E D D B C B F E G G E E E C F C G J I F ? > @ @ ? B C G G @ B B < ? @ E ; B A B B ? = > B F F B A B = < > B C A < D A = ? ? ? @ = < > ; : = A = 8 6 7 = : > : 5 ? ; ; = < B ? < : = < ; @ : : > ? ? = : : : ; 7 5 5 > : A < : : ; ; @ @ 9 3 < 5 8 < 5 8 9 < 8 9 9 ; 4 6 6 4 8 6 ; 6 5 2 8 : : 8 < 8 8 2 4 8 : 3 8 ; 6 5 6 5 6 2 8 ; 4 3 8 ? 5 5 7 5 2 6 2 7 1 3 > 7 / 3 1 - 0 2 / 3 2 0 2 5 6 8 7 1 3 5 1 7 5 7 5 9 4 4 7 2 / 0 0 2 8 4 2 2 1 6 4 5 8 5 5 8 5 3 5 7 : : 2 1 5 6 < > B : ; 6 4 4 6 8 @ : 4 0 / 0 3 4 7 8 9 : 7 8 4 2 7 6 2 1 3 < 6 6 < 9 = 7 6 8 9 ; < < 7 3 5 8 9 6 9 8 7 8 = ; 5 < @ > : : 9 8 8 8 A ? 6 = < 8 < ? > ? : : 8 8 3 : ; 7 = ? = 9 ; 7 2 / ( # 
+                                                                                                                                                                                        
+   $ ) . 9 5 8 6 8 : G J I L N S Q O T V \ d g m l i n n s k r t z z ~ | n w p u x x u z  z   w s v t r v u  | t v u s w  x u t  t l x p z l q w o k s v ~ v o i p s v p i x x { z t x y x p x u w  y y z y x s  x  { r x { v v x w y t w | | u | y z w w { w { ~ v t |  ~ x z { z x w q u | w p | } z v w } s t v v z y s t u v x v t u t q  | s x l i m u y m m q l g c g m j o r o h g p p h c k p j m m h i o d d b l k j o o p j g q o t u s q o m l m u s r n k i h e h l d _ b m q q l o z v y t t z } u y t u u u z n z n k | r o y r m o j n n z u r u s r o r q w | { m l q t r s t v y v o r s u q p w u q p v v t q q q q w y z r y x r p p q p q r { { v | z  r {  w r r n } | ~ y  z r t z x s p x w w w n w m l k q p q l p y x q l u x r o o r l k o s s o x r n s t m i d [ a [ ^ ` ] Z Z Z X _ a ` a U Z U U V U P Q V S R R Q T S M L K O P K L R M I K D H I E K M J G G G N G A H I ? F H G H D E I I E C M G I I L B G E C E M J I E L D ? : = ? C > G B B C A < A D E @ E D E A : < C D D E B C A = : ; = B I B @ > ? : < > ? @ ? < ? B = = = = 9 5 8 9 : = 9 7 7 ? ? = @ < ? = A ? < D < = ? ? > = > A F E = 8 6 : A ? 7 8 > A = ? ? < 8 ? 5 9 @ ? < 9 ; 4 : = < 6 5 6 5 2 6 ; 7 5 3 4 4 9 : = 8 < 7 7 3 8 6 7 4 0 4 4 7 3 4 3 4 6 4 4 6 5 3 5 6 9 7 3 4 1 8 8 4 5 2 0 2 2 3 . 0 1 2 4 7 9 7 7 / 7 8 7 4 2 3 6 4 6 2 8 5 2 2 0 / 3 1 2 8 4 8 8 : 5 8 7 5 2 4 9 ; : 8 2 0 : 2 ; ; 7 7 9 5 4 5 2 7 9 9 8 1 6 9 8 < < 9 9 8 8 8 : 6 5 = : 8 5 6 5 8 ? = A = 7 6 ; 9 5 2 3 5 ; 8 8 5 : 7 7 7 : = 7 9 < 8 : 8 8 > 8 < > > ; 5 = ? A ? ; C < : 4 9 7 3 : 9 A A ; 9 ; 7 3 . ) " 
+                                                                                                                                                                                           % ) * 2 3 ; < : ; D J J P V R O M Z Z \ ` _ g l g t q q u u q q p x  q r r { z z z  y w t u o q x } w r p w ~ n t { v {  u s {  v o t q o i p i g l s z z t t w o y q o j m w | | v z { s t | u w x w q y r x q y v v k u w |  | z r v t { t o u r w y { {   y s { z |  z y z  | u t u t u t v s t o w 
+  u u x z } w t s q r y w u t { y q p q l m n u s w t l l h n e o n n s o j h k d q r g k n e l f u l l l f e k k g g i n e j t s w { w } p q n j p n s m t m i i k f f f f n g p u q u r u s w t  } s w x r v z w x v s v s q r p l } r u | u ~ } { u z u q t v v x r o r { w u t t y o y x n r k t u o r t m k r w p { w | x t z x l s  v x o o q m t z | t s s p y p y { | y q p x { z z q w } q q x y u k p o n n y { o s q { z v p r m u l m r u l l j p z r } m u u l k g i b e _ c _ _ V ] g ` ] ] ] b [ W R U U X U M [ N O L N K K M L M X O E M O P K P K I J C G K P N G E I H F C @ C B D C B C B L F C F G D J E H M I G K J O P K D B A ? ; A @ A H @ F H J F B ? B F M I E G E D @ G B ? B C C B = > : = D A A ; ? < A = B < A C @ C H @ ; 7 ; = B = 8 9 < 9 9 8 ? 8 = C B D B = 8 6 : > = = ? ; 6 6 ; B @ ; = 3 = : ; < ; 9 9 @ < A B < = 8 4 ? A 9 > ; 8 4 9 : 7 8 4 4 9 6 2 9 4 3 3 5 4 3 4 7 6 : 5 8 8 2 4 3 / 0 8 6 9 5 6 8 : 4 7 7 / 2 6 4 9 0 2 2 1 1 3 5 3 5 2 3 3 4 0 - 5 4 4 5 / 3 1 . 1 1 0 2 4 2 4 5 9 6 5 6 2 8 3 . * - 1 2 3 5 5 9 0 4 6 8 4 : 5 ; : 4 5 8 8 2 5 < 6 1 4 9 5 3 4 9 6 4 6 . 7 ; : : < : 3 9 7 9 7 : : : 9 8 6 5 7 2 6 < : 9 6 < 9 5 : 4 3 8 5 ; ; 8 : ; 9 9 A ; ; = < : 7 7 8 > < 3 : : 7 6 < = 6 ; : @ < < 8 : 8 : : 9 8 < ; 9 7 : 3 , ' $ 
+                                                                                                                                                                                       
+     ) ( + 0 3 : ? ? = H G F K Q W S Q \ X \ _ a b g n p t q p t m n u q z t o x z } v s x y x y x t v | q l o p o x r r | s ~ 
+  x w { { w u x s k m o o j p p u m n j k k o g h p v | j s w t s {  | w w v s x | { r x m v n u x u  x y { u t z s t r x w { x y z   z z { y y y t s | z {  ~ v o r w y u u | } z p { x z z | { n n v s v r }  t i w o l q n k s u q p r l l l m l h o j j i j e q t i s s l n p t j i e j n i g l k k q o k k n q r p o q j l j j j l p t n k m l m i g h e f r u q k l | v q x } y u { ~ z { { { t { w z u s r p o t t t x p t u q t z  w { { v v z t p ~ w s s y s m r m p u l l p t t n u t x { x q q z q | w t x  | x s r p s z ~ p y ~ w s x w | v u q x | y z t v v q p u r p u s n q x f t u r r y r u u ~ u m r r s n o m n r r q s w o r s x w p k l h p j d i f g f Y ` ] c \ c _ Z O P R X Z T U W P P N N L O M N K N N N Q N M J O Q N M F J K N K J K G D @ F J E G J H I ? G G G L P G B C N F F G ? F B C G E C A ? < ; E C F N C E F B B A C E B > B ? I D > @ B ? = @ > D D @ A ? B A = @ A A = E E @ B A B C D C = A < ; A E A ; ? @ 9 < < : ; 8 < @ 9 ; ? 7 7 = = : ; : 8 3 8 ; > ; < A < 8 9 : ; ; < ; : : @ ? 7 ? ; 7 > > ; : 9 7 8 6 ; : > 8 7 ; 9 7 : 8 : 3 5 6 3 7 9 7 : 7 8 7 4 1 1 1 3 1 : 8 8 > 4 5 9 : : 4 3 6 < 3 1 2 2 4 5 4 4 2 4 1 5 4 3 7 2 4 3 8 2 2 8 2 1 7 6 2 7 : 4 1 4 8 6 5 7 5 9 9 2 + 2 9 5 6 4 6 2 2 5 5 6 5 5 3 : 4 5 3 ; 8 7 3 8 6 4 1 4 5 : 5 7 : 3 1 4 4 7 6 : < < 4 8 ; 9 9 8 > 8 = < : 6 2 1 8 < B 7 9 < 8 8 : = 5 7 6 ; < < 7 8 : 9 > : : ? = 7 7 6 4 7 7 : @ ; 8 4 8 8 5 > = ; < 8 ; > ; < : 9 ? > ; 7 5 8 4 + * $ 
+                                                                                                                                                                                       
+ 
+  & + - 3 5 8 A ? = D J G K N S U S S \ [ ] d c o j y z t w t m o x v s p u } s u | q v z t t x q { x u r n n {  x v ~  v   { r i h o u x p d l q v n s q o j k i q n j j o p u q k l r t r w  y s t l y r v p s t q s u v y u } t w ~  } | y q t r x { x x | { y v | }   z m u u z z  ~ { s u w x ~ } | w w q {  s q v u s p v x r p p u m l s s v s k r v r z r q p c n l f b k p g c d e e l l n r t s k i j f g g h c d e _ i o s p q o o s { q q m l k o f g h l h j k ` e a \ ` ] j m l r n n | v t {   p p |  x  { x z  | } s n t p t  { x s q r u t } | q u  | ~ { x v  | u v r q v p n q o o l w u v t z ~ x u n y q w q z v x z  | v t o s t w p g x y s p u | x v y t w { w q p t v ~ u w t y y w s r 
+ u z t q n y q z  w p l t } n k s r q { r z o q w n t s z p n o k q p j t t m j e \ b ] \ _ ] Z X W U Y V [ U S P S P P O Q M U M O K L O M L J K J M M F G L K M M I G D @ D D I S N E G E H D G I K B I H I F K D @ D G M G B E > = = > E B C E D B = ? C ? A D D C C < ? A B H ? < < @ = A D E H F A @ @ > @ D B D C @ ? B B @ ? < : ; B A G < : : @ @ ? > ; ; 9 9 A ? ; A A > > < ; ; 9 8 9 6 : ? > > = ? < 5 9 5 < : A 8 ; 7 : 8 : 9 : : 9 8 8 6 > < ; 7 8 = A ? = < : 9 4 9 5 7 7 5 3 6 9 3 3 : 2 1 2 5 6 5 4 7 6 9 3 7 4 3 3 4 5 2 - 5 9 8 : 4 5 7 8 2 6 / , / 0 3 1 4 7 8 3 4 2 / 4 1 . 6 : 2 4 6 4 6 1 4 2 3 5 2 7 5 2 3 3 3 6 5 1 6 6 7 4 4 2 2 3 6 4 = 9 3 7 7 : 5 9 9 ; 9 7 7 7 4 8 6 5 0 6 3 5 6 3 6 ; ; 7 7 4 7 9 8 1 8 9 : ; / 3 9 6 7 9 9 9 ; < = ; 8 < 4 ; < 9 5 5 ; 8 ; 7 : ; @ = : 9 9 9 > 9 ? ; 9 : : : ; = A < 7 ; : 8 8 8 < < = @ ; ? @ 9 5 . ( $ 
+                                                                                                                                                                                         " & + - 2 5 : > ? ; C E L K O Q T X R Y [ b ^ e m o p k p r r q s q s j m y q m p ~ o w u z p p q u s z n s t u { t s | | r z y } v z s w y l k k l s p u u q s j m q p h i j o m o o m g j o f n t t p u t y p o c o r l v v r u q z   | } } z { v r q | x v { y u r t x x    t v r p s u q s q q y v ~ { z w n p q x t t s q j y  u x u t q v t k l t q n s r r r q r k e i g d i o l d g l n i g k l q j o j j d d d f i a b h e q n m o o j d o v o h i g d f c e h c g h k b h _ ^ a f g g m y t x    } | v z r y u } }  z x { x y u m r n y l o x } { q q w | y u s y z | x y  y x r t u u y r q m j s s y o p p u x n o t  u o s u } s x ~ { x z x x v q p o q t u m o r u o p z t z  w p s u t p o u r u t y z | y z | t m s | | v | n o m s r l g m t | n n p {  p q t t m m l p p o j t s j m h [ [ \ _ _ _ ^ Y V W V S N P V O S V \ W X Q V U S Y N R M M N J K H J I G J K K H J F H F E I F K J I F N F D M M C A G C I H B E I J H M C H I ? B B J E G B C E F B E E E C G G E B ? < B ? ? > ? ; ? < ? B ? B B F @ C ? C @ @ G H A = < = A < > > A > B @ @ = ? A @ = < : ; @ ? > > = A = @ ; : 9 ? > 7 = < 8 : 7 9 ; 9 6 7 9 : ; 5 : : 8 3 ; < A 7 7 9 9 : 8 8 @ 9 4 2 7 5 < ; 6 6 8 9 : 3 3 2 : 7 5 8 3 8 7 5 9 3 / 9 8 9 5 6 7 3 6 4 4 3 3 - 6 0 , 0 7 ; 5 3 1 - 4 / 3 2 1 1 2 3 / / 7 9 5 4 7 2 5 0 / 7 8 1 2 0 0 4 / 4 3 2 1 0 8 2 7 2 * - 4 1 1 7 7 4 6 7 5 4 3 2 2 : 9 : : 9 8 9 : 9 8 8 1 6 5 8 8 ; 7 4 . 1 6 9 6 9 9 ; ; : 8 5 7 7 6 ; ; 8 6 : ? 9 6 9 5 6 ; 7 = : ; < : ; > B 7 6 9 5 3 4 7 > 6 ? 9 8 < ? A ; = < : 8 9 ; ? : ; < ? ? < 4 : > < @ ? < A 9 > B D 5 4 ( $                                                                                                                                                                                            $ ( - / 4 3 7 3 : C H L L M F N S S X [ ] a c e h b j n u p t p p o q j t n n p z l t z y l p t r t s n u r { } z v u x { p } t u  { y u u p q k l s v t x u q l t q h n h k i m i l l i g l g m s p x v r p o p q u j p | u m r p { }  q m n y v s p { u x v t r r v w ~ w { ~ z t u u z u p p y u q x y r { z y m p x s y q t z } } r x | { y r s j r q j p k q s u q p g i g d h j s f g r p o u n i j j f k g h h k q e i c h l q q h o j j f e e h j d m d g f e g f j i i f b j b b c a j k h t } { z w x | y { z  z z  y x z y { u s p p n r z l j m | ~ r | o z  x n t p n { r   w z v { u y u r p r r r r k i r y | u n z  q r ~ s u s v ~ } w } | } w v v s w n t r p u s q p t q r x v s q y s q p s q w o p u s y  y n q x s s q z x q o r l o n n p r v s t x  q o q q p f h h e b i p i k o a \ W ` _ ] f e Z [ [ X T O U U P Z X R Y T U T V [ _ X W U J N J K H J K I I J I K I N H J G G K G J I K K F I G B I F D C D F D E J H H I D F A @ B B H D E A B D D A I D F C D G D @ E K C A > > = = : : A 8 ? B C E E A @ ? ? > = ? = = < = B = D @ = = = ; < < ? B < = @ : 9 ? < < 7 ? < < > < ? = = C A = ; : 6 ; < 6 5 < = 7 5 7 ; > ; 5 ; B > ? : < 5 5 5 ? 8 ; 9 3 7 : 7 9 6 : 6 7 5 1 8 5 1 8 9 5 1 6 2 4 7 9 8 5 7 7 8 8 6 8 2 ; < 3 8 4 9 1 4 + 3 4 9 7 1 0 3 2 / / 5 . 4 2 + . 6 4 5 1 3 7 4 / / 5 9 1 4 4 3 / 0 1 6 / . / 5 4 6 6 1 - + / 5 2 0 9 9 6 0 0 7 4 1 0 4 5 9 6 4 7 8 5 8 7 6 5 4 8 : 9 : 5 7 4 1 5 7 0 4 5 8 : 9 4 5 7 7 ; 8 : 3 7 9 @ 9 7 5 : : 9 9 : 8 7 < ; < ? 9 6 3 7 ; 8 4 6 < 4 9 < 8 ? 9 ? > : ; 7 > 8 = = 7 ? < = < ; : @ > < ; : 8 8 6 < ; C 0 - - #                                                                                                                                                                                          
+ % * , - / 3 3 8 ; C H K M N F M P W W \ _ a \ _ a c e j u v m q m s n p r q h j p o y v y x v o p r p l q y   z t n w t z { w y v u k k l y u p o l p s r o k o v q g o r i f j m d p k o l k t t v o k w r q u w w q t z v p p u | s v k p r t x y p s y ~ | x u z t w z  u r q t u v z v y p { ~ z | z u { ~ t k p t q u p t y | s | s r ~ s v q r v p o w n l n o p m g k f i h f l h j o a f h k h d _ e e f i k k g i l l o n v l h l d i i h m c h f a _ a e ^ ^ g h f f f k g d i c Z a k r ~ r p  v x z x x |   x z z n w s r  x w z r m t u q w u | y } s { z u q t q p y t w  v r n p x w r q s w r z o m p u q v x r o z  y u y v u p u t y z { s y s ~ v x s s p v s ~ q r v v q w q x s { p q q o w u s m  } x w n y w y w n k u x q l t r t u u t u q w w { v v q o o o b e o g h n r h d f b h ^ e d l m a ^ ^ ] X V Z c Y V Y S P W S S X T R O S P P Q R T R I I O P J J K J I C I B C G E A A H D E H H H B C C E F M E D J N D C J H E C B J E ? H J J I C E A C H B A C E G ? E J I C ? > > D ? ; ? > B A B G D ; @ > ; @ B : A = > < > ? ? ; 8 = ? A A < A D > @ ; 6 : A ? C > = B < A D ; > @ > ; @ 7 8 < < 9 6 : ; 5 3 6 6 ? 8 ; 7 = < 8 9 8 8 6 8 9 : ; @ @ 3 8 8 6 8 4 2 6 4 4 / 4 5 4 0 , 1 5 4 1 0 1 2 9 4 . 8 7 6 2 5 3 7 ; 7 3 4 5 6 6 2 3 6 4 1 0 6 5 1 / 0 1 1 2 7 1 8 7 0 2 0 2 4 1 , / 5 7 1 / . 8 0 1 0 2 0 2 1 2 4 < 0 . + . - 3 5 0 3 4 3 + 0 1 4 1 1 9 : 7 3 0 9 4 : > = = > 6 8 2 9 : 4 7 3 4 8 6 5 9 5 8 9 5 4 7 9 4 4 6 5 5 5 = < : 0 5 6 7 4 5 6 > 8 8 : @ ; 4 4 7 7 : ? D ; > 9 9 9 < = 8 < 8 : : : > 6 9 8 8 > 8 = = > F G = < 8 ; 7 9 8 ; 8 9 / / ) $ 
+                        
+                   
+                                                
+                                                                                             
+   # * ' , / 2 8 < ? > B D D M F L O T W W Z ` ^ ^ c i h h h m i o l o t o r j f l q o r y p n p m p r s t t } | { y  { w u y | r l r q o n n r r z s m q s s r m j r r n h r t l i n i o m l l s u x v p u u u m m t v r v r t p z ~ w z y u w t s r z p r x ~ w u v v t s w x s p m o t w  v  v v u s v w w s w t m h w o q z  t v p w x u { y q p o n u q m o q m s r p h i k j g h x p c d b i g i p e e h q g g f n l k k r s m | o c d j i k n j c e e d _ c f i h Z f h k f a h k e ` d f h u r t p n | }  s w y t r } t ~ x u t v | z v | u s t u { t t } | y  x z v s v x | } x v v | { r u y u s v x r y } v s q s y w s u u u x u m s | u x w w y w v q v w  v x z w p z | { y w  | y { x 
+ } s o l v v l v x x  x y q w p y { y m t z z { t s u u u p p w k k u | t t v m v o g l h i d k s j d d h k e e h m e f a ` d \ b b Y T R \ U Q P M Q O S J F Q O K P M P U R K T M T S T P H F L M J L M E ? G ? K I J H J B C Q O L B D N L D F H H K C C C G I L K I I C K J E I E E A A D B @ C H E E B @ H > = ; ? C B ? ? 9 E = A D K B : > A F @ = > A ? < ? = A = > F C ? C = : < > = > ; < 8 ? @ A : 8 ; 9 : 9 : : 6 6 6 = > 8 = 6 4 4 < = = = 9 : : 6 6 9 ; 9 ; ? 7 < < : < 9 7 4 7 : 3 ? 7 1 2 5 6 6 / - 2 0 9 9 8 7 9 7 1 5 ; ; 2 0 7 6 5 8 8 2 3 1 6 1 7 9 5 2 , 2 4 5 0 / 2 4 7 5 / 4 1 2 ; 9 / 2 3 1 5 5 2 2 2 0 1 . 4 4 7 6 7 3 2 3 4 5 5 4 1 4 3 ; 3 0 6 3 2 4 5 5 3 2 2 : 9 7 3 = 7 : < 9 5 ; 7 : 7 7 7 8 9 < 4 4 4 4 7 5 7 7 : 6 = 8 6 1 2 7 3 : A 8 5 6 0 4 < 5 9 6 9 < 6 > D B 9 5 8 5 5 8 8 ; ; 3 4 9 7 : > = < @ ; @ = ? ? > : 5 : > B > C C @ C A 9 5 5 : 8 8 7 2 1 + %                                 
+                            
+ 
+                                                                                                                           
+   # , , . 1 4 7 : > < B C L M F J O V ] V X [ Z Y a h m k h h r r q t o m n n q s y { u v u l l p k o y v q   y z ~ y z z ~ } o k p s p m o n r t p p q r t y r t q u j l o p s u j r s w k s p u y s o u r q m p t y o u q r t ~ | y x t o z | | z u u p t w u u v t z s q s o u k x v | } { z z z v x u  t y u z y w w t x   v w } z s s { s t x v n v w m e h n q q n k e n k e d a e f a n m g j t d n i n k n i e l o l u l k p o h d o p q o o m m h _ a j j d e b i k l c b h a [ ] [ ^ _ k r o r t { w  x v x s y t q y u { u z | r q  ~ t z t { u x  | z | v | w n {  ~  u z  { w ~ u | t v x p u x } ~ y z | } z t o { y q u u { z   | } v | z z u u ~ z t s x z { y l y u | { z x w { t i o m w k s z y w { s u y  v } y z { z  }  v { z { m x  z s o t y u r q r s w l r u q k j m j l i j p k m s n j j \ Z a _ b ] [ V M [ S X X R P R W R N V U Y R L S [ [ S M U Z Q Q S K H H O M K H H C H J H E J I H K H N N Q J J H J I P P B K K E C E D F J F K A L J A A J P A F L I B D K H F G C A @ < @ > ? C < A C H H J G D B 7 : 9 ; B I C @ @ B B B < @ > A D G B @ E 9 @ @ 7 = ; : 9 @ ? 8 ; 7 8 < 9 6 5 4 9 ? 8 ; 7 9 ; 9 ; A 8 9 < > : 5 ; 6 5 < ; ? = : 8 : < = : : < @ < ? > ; 5 2 8 9 ; 9 4 2 2 9 ; ; 8 6 : ; 7 5 8 6 : 3 0 4 1 5 9 7 0 5 4 6 : 8 7 3 1 4 3 / 2 7 5 3 / 1 / 3 6 6 3 5 4 0 3 3 9 : 3 1 3 4 0 2 4 4 1 5 3 4 3 5 ; : 1 2 2 9 < 9 1 8 < 4 4 5 8 6 9 5 7 : 8 8 9 8 ? = 8 7 6 8 : 8 8 7 8 < < : = 5 0 4 8 3 6 8 7 8 9 : 5 9 = 7 7 = A A > 3 4 ; < 8 > 6 6 5 < : : @ ; 9 7 < ; : < < 7 8 > > < = 7 > : 7 @ 8 = = B : 9 7 ? I @ = 9 > D > 5 : < B C ; 8 5 0 # "                                                                                           
+                                                                                              
+ ! % / 1 1 3 4 : 7 > ? @ J I O N N O V W ] \ [ ] ^ \ b i j l m i p j q s i r x s w { y z v u q q p r j u ~ | { z v w x y u v x { v u y t s k h o t n s w o i o u s j m g l e i n p k o o p o o x m i o m i o u t u s r q o u u x w v x u | u p w w y q s v q t x { } w t t q s t y  w   { { ~ { ~ | r {  | u t t t w y t t x z z u } u q o   u w { x v s t k p p s u { w y p n n q h j f j l o f i l q h l b b l o m j l n m w p j j n p t v { q i l r p i n i r o g j g b d f d e p j ` ^ \ ^ d r n n q o y q | s p o v x s y y z  y  v u u w x x w  y } y | q t t u | v u r w z { u }  | w  z y u s p r t u y x w | z r l v w s { z s r r x   x {   
+ w t t ~ ~ y y x  { q p } t | | }  x s p n t x w w |    s s x u t  y w { ~ } } } y w x ~ | s t | v y u w x y  t p y s t k j o m k o f n j k s v r n s o j j c ` b o b _ ^ W _ [ X T V U S Z T T Q R T R T S W V M K Q M P N Q O D J M O I F F I E G J P L N O N K I K N N O J L L L O I I P N J G D C I M H F E C D E K I F G I K H B B C @ G C B @ A C A @ E @ G E A C E B C ; ? B ? F A D H A ? D > C @ < ; ? B @ D > > : > C 9 : > = @ C C 8 : 4 ? D 7 9 ; = = < > < < > < ? A > ; ? C ? = 4 ? < ; > > < 7 ; : A ; : ; A > > 9 < < < < < 6 = 9 : : 9 2 : 9 ; 9 9 @ = 8 2 7 9 : 4 5 7 7 ; ; 6 5 , 3 5 8 5 7 4 . / , / 2 5 4 4 7 5 - 7 2 7 4 : 5 0 6 9 6 3 7 0 0 3 2 1 / . 0 4 4 3 2 . 1 7 4 4 8 8 = ; 8 8 9 4 5 2 6 : < 1 9 6 5 < 8 8 < 7 : 5 5 : ; : > = 7 ; ; ; 5 7 0 4 7 8 : 6 4 7 : < 9 < ; 7 > ? B = < 8 5 : 9 ; = 7 : ; > ; : > A < ? = = > B 6 8 8 : = < ? ? = A > > : < > @ ? < : C C C I 7 < @ = 9 8 = H B ? ? 8 8 ) $                                                                                            
+                                                                                            
+ 
+ & ( * 3 4 ; : 7 4 ? E I H K M R Q L O X Y a _ [ c _ h i l u q u q h p p m n t t t s s  z z t { z l q u z  v y w { t z t p r l q x v t y r p q y q x y m k p r p y r r t q o s n h o u v q o q p q p g p o s } | q s u s w x x s } s {  y w | } u p w } z  w   w  z  t } { u x  ~  } v }   r y   t p u z q i t z s } s v | s t | |  { } v x t x { x v z s x v s { y p o q n v m r t t q w x o { s o n m u r p q m s p t t w r s o p s t n r k s j r j i s p o g g k h l j d k c _ c a ] h k o l j u t y } q k z ~ n s y { t t v u r m } | x x  } r u | } z z y | z z s z v x u  z w y 
+  | | { x } w u w  z x s t s t w t x { u v t | y y t y z { ~ t s t ~ x y {   s z x w o v q t r r s s u z w w x z | { y p t  ~ } | | x | } v s t t t { y { { w x t x u u t u  { s { x v q o r q s r r r k k m s p r q r q q k n l w n ^ e a e ` [ Q U T \ \ \ ] P X W R Y U Y Y P Q V W W S U O O L Q U T O R K B K I K N W N I P H G K M M N R K G H G L P M Q J J H E H M K G I D I H F D N I F L A A B H I C G E B C E C C G K F @ J H @ ? < ? D E C ? A H C B A B ; < = A A = ; @ ; > : < 9 : = D A < @ D D : > E E C @ C @ A = = 6 : C @ ? D C A E E C = 9 > 8 @ B A 7 < @ < A 8 8 > 8 < = ; ? : : A A A : ; < < > 9 9 < 8 : 7 ; : ; : > 8 ; 7 2 8 8 7 : < ; 5 9 6 9 7 : 6 5 3 6 5 4 8 5 5 7 4 3 7 6 8 ; ; ; 3 7 3 5 4 4 4 6 2 6 8 5 6 ; : 6 1 5 3 6 8 8 3 9 6 : 5 ; B > 9 5 5 3 : 8 4 ; 8 = ; 3 7 ; : 8 6 6 ; > 6 = : 9 ; 8 8 8 5 7 : 9 9 = > 5 9 ; @ ? : = 5 9 = ? F > = > B : A ? 9 : : ? = 7 : B A E > > < 9 ; 9 : 7 9 ? G ? C C ? C > D < C B = < A > G E > ? @ B C > ? > H F > 7 2 0 &                                                                                                                                                                                          # ' + 4 8 7 9 : 9 = I N L M L Q K O T T X \ Y ^ d j i n o n x  n l s q u q z w p s x ~ y z w s w s y u { { y { u  y z } t | z  x r r }  | v x s w { v q ~ s j t u t t w r q x o u v w p k m t | q k x t r r r v t l u u z z { } t u w v z ~ } y }  { ~  | | x  }  | u    |   | z q w } | } { {  v y o w s z s o o v y  ~ y t x |  w |  | | s }  r z v  }  ~ { t o q v z s u x z u z ~ x { q w v y u w t { y x o w r } w u k o w s k q o s j m l h h h o l t l k q i g e j h i k i h o o r n o w { v w q x r k x t y y z y  z y v x z { | } q w { | s t  | | } z } w } }    r ~ z  { y | x { { r z x 
+  ~ ~ { z { | ~  { v } { s s z   { ~ y  |  {   z ~  | v r l s q v q z w  y y x y u r z y x t w  x ~ } {   } u p r s r    u v s x w y y z t z } ~ u s r s s y q u p o j n q n s m n p l o o x r t k j b d k h g Y Y _ a X ^ \ Z Z ] X Z Y X _ Z ^ Y T Q S N R Y U X W V P N N F C K M M R R N O M J N U P L U R O K M L H M K H K O K P O M K S M S K J I M H I D H E F O O K G F E F K D H D D F C D E ? C @ ? B C D E C G D @ : @ F < = A C C ? I C E B ? : E C E D @ @ C G B A C G D C E C A B @ < B G < = ? B E A G I < = A = = C ? : 9 = A ? 8 = : : = : > = ; ; ; ; = ; 9 ; : @ 9 ; : ; ? : : < ? = 8 ; < = 2 = 7 5 7 : ? = > ; 8 9 3 4 5 7 9 5 1 3 7 8 2 5 : ; 9 5 ; > : 8 8 6 1 4 7 7 < 6 5 5 3 8 7 8 8 3 8 7 7 7 : 7 5 8 7 = : @ ; : ? : 9 = 4 8 = 5 8 > : = : 6 ; @ 8 < @ : 9 = ; ? 9 < ? ; 8 < : 8 9 < @ < > @ A B D < ? ; @ I C B D B ? ? ? < = ? ? < ? ? ? A ? < ? B < ? = @ > @ D B C E C E C B ? B @ B 9 E > = B G A F ; D C = B @ C @ 9 0 3 , %                                                                                                                                                                                       
+ 
+   " + 3 2 2 7 9 @ = @ H L K [ S O I J T S W W ^ ] k h p r j p v y o v l m m j u y o t ~   y s k j s { s } | {  | ~  | | z z { y } | ~   z w t q r u v z r  p m t x ~ z t q r o u q r u n r r q q r o l m p u t s q x y  { z  o z w z x  y w  {  y }  }    
+  z   x | }  { t t y u y z {   u p r s s s u q w x u { y r } x x w w |    y y u q y u v ~  } | o l r t t }  u s w s }  { m w |  t | u y t r t ~  y t w p p  y n c k q e n x o s m r m z q m p p h k i e i e d k l p o t r o x s k m u t y | { z v z   { }  z  | o v y { w y s q p w w { s z x | w    
+ } ~  { z w x u v w { {   }  | v ~ y    x w t p x u z     y   u }  u ~ 
+  y ~ v y w y v r v |  x |  | y v x u u x  | z }   z } ~ y v x z | z  y x w s u w q r { ~ | y y q n s u x v s w w s w m m m l f h ` o n w z v s n l l c j e d X ` c _ ` _ W a ] ` X X [ Y [ ] U Z R R X X X T U S V M P M M L N L G Q Q L U O M J O U S W M N Q P L O O V O P N O L S R N H J R L I J M J I M I D ? I J K M L G F L E G I D F G E E J ? = D H H E I C E C G E E L @ @ B A K G D C F C I F A A D D @ ? D D A D F I D D G B B C ? A < ? = ? A A A E D E < B F C B A B @ ; B = A D ; 8 ? D > ? < > D @ ; = = : = = < = ; 9 > : > C = < : = A < ? 9 8 9 ; 7 : < : > ? ; @ 6 : : 7 ; 5 3 7 5 < ; 8 9 7 7 3 3 8 5 ? < : 6 7 5 = 5 : : > 9 8 4 4 8 7 7 < > < 5 6 9 9 : = 9 ; > A C > @ 9 6 = ; 9 9 = > < ? ? : ? ? @ < = E ? C @ > ; = < ; ; > A > A = = E B A > > ; > ? @ B < A C B D B = ? = = > ? D ? @ = 8 = A D C D E C = D E C G H G D D C @ E D C A A ? A A C D D @ A C @ B @ C ? = 8 2 - % !                                                                                                                                                                                        # & $ - 2 0 4 = @ < C O E M S P T Q P O S X Y V \ e i o l p r v u o o l o s r v x | x  |  { r t j r v v  { z } { z | w  z s w u v x |  ~ | } x t q y y y s r q r t { w t o m q s m s  z v t s s r v v t q l u t r q { z y u w { t  
+ z ~  z x u ~ 
+ } z y {   | z  ~ { } z } y u y t k z { r u t x | } } y z v s s y x t w z z  y t { ~ v r  }  y u | u } s u r | u z v v x u s u n p v y y } y r j s | ~  u q x v o p { { u ~ | w | z r k h j l h v q u z x y m t v x } q j j k n e _ d e k k o p o k u l g u  ~ } { x t y 
+   } { | u  y t  } w y x  x t { x { t u t x q v      | ~ t |  y w t w v |    | w x } ~   { z { w } s y | z y t { y { u ~ } z v y ~    { } { u s y { { v y {  | s w s y r { u } x   {   | |  ~  |  ~ | v v w v x v } } s z w t s { { y x t u o t p f o o g o l p q m p k p q m j o p m i d i m i h a c V W \ b \ [ ] [ W ` Z T W [ X U S Q X W U S M P M I M R P P K M N P Q Q J W S W S R Q P M M T S S V H N T O T O I R L L J G I I I M K H G L L N M C J I I I E J J M G E G J E H A G M B G F I J E E E H E D D B G M L H D = B B D > I J G H B G D @ F F L D C C @ = B E : ? @ ? D B C I A D B C G @ A ? ? @ D B < ? < ; A A ? ; ; > = A B > 8 = 9 > ; > = = > = @ ; @ D ? > > @ 9 < ; ; @ = 9 : ? > : < > > 7 8 7 : : 7 < ? 9 7 9 9 8 9 ? 8 8 < 8 = @ 9 4 6 8 = 9 : : ? 9 9 8 8 8 ; < A < @ 9 5 / 3 ; ; : B ; < ? C 9 9 6 = < < < = ? = A A = < = : A C B : = > A : = 5 < > = = ; ? ? D I C G B > @ = ? @ ? D > E H E @ = = = F ? ; ? D G E = @ C G C A I ? D C C ? K H G G ; B = @ F @ @ @ ? C B C > > @ @ D C G D E ? J C 7 / $ !                                                                                                                                                                                      
+  
+ # % , - . 5 ; ? ; F G E M T Y V P T P R X Y Y [ g k r w n w x r u r n p u s g q w v t x x y q z o z  z   t r w   z {  { u  } ~ r y | z y t p y s u z r o s q v u u o p v w j n q | u v y s u s z t r p s p m t r s u t v y m }  ~ | |  z ~ ~ t z  | x x  {  t v  } x w x w v  y r v q t t w v r z { t y s r  x y   x x  { v q u r {  } } z u  { u s r y  w w z z w q s s q t v s p v v o k q x { z r q p w p p s o t y x x v | t n t t q r q k y x y r u y t z y j k g e b ^ ^ c f c f q s j w s n s t { ~ } w p p u    w | t n s   } s x   } z z s x | p n x y { v   |  z x z v y { s r w x y y y    x w p v | y w z | { z x } v r s x  w q m r m o x | z }  ~  w } { q w z u u x |  } { z u v z | s t y t z }    w | { t y } |  ~  ~ y u q ~ y | w w { w x { y q e m r r s k p } z q t s i e g p j r o v o o v p d f k e i ] c [ _ b c \ [ ] V a _ i _ c Z X Z U Y U X X R R Q N L M Q N R S K M S N K Q O W S T U J M K N Q W Q T R Z V S K M M G N I H H H F I O J L N K H I L D F F J G O H D K K F H I P I E M F C D G H J F D G > C K D B C B E E K I G I I F F I G G E F G @ D A F G A D > ? C @ B < A G A C C < B B A D D L C > B G B A ? ? ; @ @ @ > A @ C C C @ A A @ > ? 9 < < 9 8 > > = E H C : : > 8 @ ; > A ; < > 9 9 8 = > = ; 8 5 5 7 : @ ; : ; 4 8 8 7 < ; ; 9 9 = 9 : 7 < < 5 9 < > ; 8 : 8 ; = ? 9 = 8 ; 8 < 3 4 C @ = A < 7 9 9 9 : 6 7 ; ; = < B = D D > = < @ B = 9 8 B < > < 8 9 ; < ; @ > B ? E H A ? D @ B = > B B B ; D D D B C B A > > < A > ? > B A > D E D ? A A D @ E F I B B B C @ < F F B A C A E F < @ C D F H @ = A B D = 9 - ' #                                                                                                                                                                                       
+   % $ + 1 7 8 8 : A D G E I N Q Q P R Q M W V _ ` b n t x w l p r v r s p m q l j o n n r w y t v r { { z w z w w y y t z }   x  { t t r s u r y t k i y { p p q r q l v t r t r m p w u t z v p s s t r x q p h e k k w | z n u r x  z  ~  | { { t w  x z y z u u z x t y v  } ~ w y y w { x s s z w s u u q  u s t { | z  z w t u | { y  } y }   x v y o t x v y ~ ~ } | v { u t z w v z  o { r { t | v { t r r n u v n p r q w u h | u u z u x w p r z y { u t s x z o j t o i k k c m i c d r v p t v | v r t  w p q q r u ~  v  t o z { } t p  } | ~ {  w u z { z  |  u  z } ~ t ~ z v u w w w v v u t x y   v w t n q r } ~  ~ ~ } } z y   | y u r u w r y u z   { } t z } w ~ {  ~ z |    w w v t t u y z s { y   z } w  z } ~  } q x  t v n w w q y { v u p v v x p e k p u s w | u u x n g a h l m q v s o i p p i c ` g k l a [ [ ^ a _ a a ^ d c i a j a _ [ Y a W V U S T W Q P Q F O P S T T S R U T P P V Z W S Q N R Y T Q Q V P S M L P O P L G I L O K N I L M Q O F E L B I H G D H J F E E I O E P J H L C K I M G J I C E D D G O K G A E H H H A @ D H G K C D H @ B E H < A ? B F ? ? @ ? @ > C L D C G @ A D A B @ A A ? D F = C E D A : ? D A @ > E C G = > F D : < < > C 8 @ 7 = ; ? ? A < < ? < : A C > : ; < @ < @ @ ? = 9 ; 1 7 < < : < = 9 = 9 4 > < 7 = 4 7 < @ @ ; < ; 9 : 8 @ : : 7 > ? E B : @ > < = < < 8 = @ A = < : 9 9 ? 7 : 9 9 ; ? ? C = @ E D @ A B C D > ? B > @ E ? < < E D ? > @ A E G C ? @ @ 9 9 9 = A B @ C E G D D B C ? < A D 9 @ > C ; = J C @ G ? D F > @ I N I D @ A B ? E D @ @ A B C C @ F K D F @ C A B D F < 4 0 ' "                                                                                                                                                                                      
+ 
+  ! % ) / 1 5 7 9 D B D M L R N Q Q O S O [ W \ ` g q u s v o m m t y p l q u l m o j k o w o t u y z u y y  v x w s s z   } v  z t u t t q t y v p m  q t s r k o l q t m r k i o n r q w m s j q r k | x x j m k i o m y { v s z } 
+  v y x y v r | } s } z x  { z x y u { ~ ~ z v y y      ~ z w z z t  u n r | }  } y  y { z 
+ ~ }   }  x r r x m x |   x  ~ | v z  { | x {  y p | t s x z   v u y r y y v y r x v t q { p t q p v r p t } w t y x x t o t o y t u x k i d a d i g g q z s o m k s v y v w p p z { { v | w u   ~ z v  { | w q {  w t u x  | { n    } t  x ~ s u 
+ { ~ | x s x x u  w z  y r z v u  | x q x t x | 
+ { v z o u } ~ y t v z s o y | {  ~  { z    | t y  u  x x w  {      y z p   ~ {  ~ z v ~ z z | r m r z w u u } y q { s r s q o s s  s n o o l p n i o r m q n q l u k i b e m j d \ a ^ \ f f f _ ^ ` f g \ ] ^ ` X ] \ U Z \ [ V P L P N M M S Q U S W X O S X X S U Z S N L M Q O T Q H N T M P N M Q K I O P O M G N P P M L K I F G L G E D M H H J K E G L L M C C I K F J P K B E K E J K E G H D C F B B C D H L J F B H A D A D A G D C G C F ? C = @ E J D A C > ; A C B C ; ? J F ? = D F D D < = : @ C B F A C B > > A D > ; 9 B ; ? @ B < > < A ? B 8 < = < < 9 : > = > 9 < 9 B ? A < 6 < < ? : ? ? < > ; = < ; < = 9 9 8 = C C : < 9 6 ; > = 5 8 A ? > > ? ? F A > < : = C ; A F ? = : < ; < = = = : C D B A D C D K B @ @ H A @ : < B C C B < E E H F E A D I D C D B ? @ ? ? C > A D E E B H H C ; > ? @ A ? C A A B J C D H B F E B F E K F I G B B B B D A F G A E B D G @ D E G E E C F ? 8 2 1 ( 
+                                                                                                                                                                                       
+ 
+   $ - 2 2 5 ; ? ? J M T Q Q U P N I Q X ^ [ \ g e h n p o l j i q u q n y w k t q n l l o q w v q s k i r z v  t s w v v { p q s t t w z t t t x v s q z u x t s k k m p v k o m l q n r u m n r n p s j t w w p q q p w o x ~ x u r z z z u z k i m p q u r v  w z  ~     ~ ~ | |  }  | ~  { ~ x ~ y ~ u ~ y w x { { z 
+  |  u u { v y | x p y y t t r t v u  } y  w v ~ w z x | x p u v q o u s x y   l u } w } u s v t y x t w x x s o p v t u w { z | { t z p l o v u v z n g d f m h m h r z y o o t q t u x s m q { | t t r u s u 
+  } 
+ | { t z y u w q q u p x { { u t  } |  u x z u y v  { ~   x   {  ~  y { x ~ w s { ~ x v u v x | ~ { x p v r ~ ~ x l r |  y x s s | s z w y  { { t w z y } ~  ~  } { {  r   u w l }     y | x j s | t l o s v r u z z  u w q r o j f m x w t q k m h o w | z p u p h n o p s k j d p l l t g d b g i e g ] ` e _ ] ^ b a Y Z X _ Z W U U V T O N S Q M W U R Q P S Q T W R T U P R K O U T T U J Q X T K Q P T M G D H K L H O L S J M J D C D L O H H M H L I D B I O N L C F J G J I I H G F H E K D @ B J E G G E E C @ A E E C J H J > = A B F B B > A G A D C E B F > H B ? @ C > D A C @ G H B 6 ? D G H F B @ ? ; D B E D C B @ G ? A @ @ B A @ B B < = = = B F ? < ; B @ > @ = = @ : = : = @ @ < = 8 8 : ; < 8 : ; ? 8 < 8 = : > 6 : : F A > ; 9 4 8 ; > ? ? D ; A < = = @ ; : ; < ? A 9 = > D D = : 8 8 < @ F = : : ? @ I A C A A B B G = ? = A B D D C < A B F A ? A C I D ? > F D > E D F = ? C H = @ B E F D F C G A D ? A A K D H D G E @ = A @ @ G D D G A K E H E A D B ? J G G D @ C H L E B @ D > = 8 / , 
+                                                                                                                                                                                        ! ) , 3 / 5 8 5 : : E S Y T U M K J O S V T W a b g ` e p l o k l l m v { z w u w w p r p l u z r t t y x p r | z q w  x v x u r m s s t t u { v { u l p r v m p x | n n s o i o r v q o i o e r v q m i m w s k l m q m o r x z s p u x v m o q o i o m o q m t v x  ~ s {   x q u     ~ y }   } s } { x t x |  } |   ~  ~  } } { x x z w n z { | p q } v x | x } { { { z q p  { w o s w n v y s n r r y l s y x y w w u s z w z t x z r v q u t t y { ~ | v s { v x  w w t v g k g e f e f f w t x w z y y u r | q u v p l p v w n u x s w x s t } z z v y v t s u q u ~ y v x | x | {   z u l z | t  z | 
+  v u    y v r {   } v { x   
+ } }  u s w r x { s u | y { q q u v x s r x ~ { u u { w   {  
+ x w { t y q v s } |  z v  w |  }  w p t q s m z u u x u  y u x v u t n k i t y r | g f p m u x | p r p l g z p o j g m r r n n h i h e h h a g ` ` f d [ \ [ \ X Y T O V V U M S R S Q S O T [ \ U V [ W T [ V P T Z Y S O V ^ [ V X S T S O K O T M L L J T O M H K I K I M Q M O I M H G O P K J J M E I G I L L K H I H I C R K J L J I G I C I I F P I H G D G H E B G L D = ? ; = E @ G B = G J I I D C ; : C C @ > > = B H E H E B D = @ C B E M G B D @ = E F B < E C I B < @ B : @ @ C E A = = > @ @ C B > @ ? : > = 9 ; ; ; : > E D B 7 8 ; > A = > = ; ; : 8 ? : 9 = 7 : > < 6 7 ; > 9 : = ? < A 9 9 > 6 9 < : 8 ? 8 : : 8 : ; < @ < 8 A ; 6 < ? > @ B A @ ? ? : : < = A C C ? ? C I D B H ? < E F C E A H D B G @ A D ? @ C A A B ? ? = > = ; C G G B @ C B G B G H F B C C D E D D A @ B E J G I G B D F H B D D = C E C D C H I G E H > B D 7 4 + ,                                                                                                                                                                                          ! & , / - 6 9 7 9 7 F K U U U O L U T U R P X _ b b c i m g s n k u s q { u r s s  x r p m q q n r r t t s v v v z t u } } x z z z s x t v y  w o r s t y v q n } }  l v t q t r z p m j l k w y t s v p s t x { n o g l l l q q j p q j o u m s p t m v p } { z ~ x y w   }  y v { { u  }  x z z v ~ u v n s w t t } 
+ { y   } y z  z w   { v q z y x | p s z  u u o w s u o | }  t x t y y u t w s r x { x w u w r k v y t w x z q s u w t n u v w t x z s q v r q x  u r q s k i f m c _ ` a k l v t v t t l r r l q q o l p r n o l r x  r  z v p s s { u t q t m r x {  } 
+    | | z x o }  y |  z   } y  | } x s y    } v 
+  } |  | ~ |   x | x { p v  { z } s |  { ~ { w  }   } u   |  } y ~ x s w v s r v   w t v q t r  ~ { q p v u | x v v u y | t u u s v n v l r z w j n j l o p z q u q o y h i x x k q l l t k r m i i q j e h ` c e e _ X Y ^ _ \ Z [ d U X ] W Q R W V P N P S Z \ [ [ U R P U W S ` ] V U Q X W R X T S S Q O M P T L J Q M K Q K I J N I O R M M L I K Q L H H K B J H K F D G G O P O L O H H O J G D H L I G D J F H L G H D D H G C A A I E H @ A F A A B B = > ? D @ G D < C D F ? A B A E D ? D B B I D G D C C E E I E B @ @ @ ; 9 D D F E C > B ? A : = D E = B < = < ; > < : @ < 9 B = > < < 8 8 = 8 : 5 = 8 9 ? > < ; ; 8 < ? ; > < < : = ; = 8 5 5 9 ? @ 6 4 = 7 5 6 ? ; 9 ? : : : 3 7 : < ; ? = ? > = = = 7 @ @ 9 = B A A : ? = < = B ? > ; ? I D E C E G L A C E B ? = B D D @ @ A A D @ : C @ B ? ? C > ; 9 > C < D D ? E E E J D G H G D B F H D @ @ @ E K G H E A G H H H J F C C E G I E I A @ C H F C G : 9 0 * " 
+                                                                                                                                                                                       
+ ! * ) 1 3 6 6 9 < D H L O X L M Y T P R Q ^ \ ` g m u o g o n n q s u } v q u o v v u s s i n r l q j t r ~ z  z x u u  v {  u y y | u u u u t u u t s z m s x w x u s | y p m o r s n q m p k u z s l w r v v q n g p k m p q h q o n r u t s x u w w s x  x  | z  z    t } r s s z w   } w | | o s v y v u m v  ~ } }   } s  ~ s { ~ p } v x t w y y v { u } u p o r m t w t w i k s x r p s w w w s z w u s q w v v u n v y  u w y x v q q r v  } s x i m x v s u q t s s j j m p f j e b k k v u y v u p o v j m y x m r w t w s n j s s t q q r v ~ y w v y z v z w z  
+ ~ v z   z | | w    z t t | z | t  y {  | {  z   w w y ~ v  } | x ~ } u k y  w u z y   { x u | z o r }   q s w  { z   ~  x y  } v t s z u v q p x v y {   { v z y | v u r m x r z u w u v p p o o u s n q o p o r q q q s r u s h p p i o m o r d j r o s r m j n j ` ] b e _ c _ [ Y Z [ a \ [ S W S Q O O I O R U T T S [ Q L O L S [ [ \ V Y Q P S U X L S M R O M R P K M R W P F J P L O L R Q R P M L O G O H ? = @ H C J J K F I K K C E I M O N M D G L D B @ I K G J I G G J C G I C D F E I A C A = C @ D F C ? A B F E B ? C @ B C A = G D C B I D : G D B G D C C B H E D D < ? B > B A @ A A E ? C D > : > ? @ < < ; A ; ? < : > ; 9 : C < > < < < A : 8 8 8 ? 9 < 9 > < = ; 9 : < < ? 9 = : = : < = 7 : ; > 4 9 @ = 4 ; > = : 6 : ? 7 7 : 6 < ; : @ A ? = B < = < > 3 : ? ? ; ; ; : ; ; C C < : > < C D ? = D > B F F ? ? ? > < 9 ? C A D ? F @ 9 > D ? > ? G > A B D A C ? C @ F C G J D ? E C = @ A B C B B C E D I ? A D C C C D E B C G G C E H F G @ D J K C > : . '                                                                                                                                                                                       
+  " # * * & 3 3 4 < ? > G I L X O Z U S P W W b d e i s n u g l m i m m o z { r q u l m p p u r p r o m v y x   
+ y y z u t t w { u y { p y x u y | m v t v r v r | y  { ~  r s v v t u r p n q t } s s { s t k l r j h n l w q u x w t w v y } z w s w s t t z w x |  ~   } ~ ~  t x  u o r z  v  }    z w t u v   z } ~ z | { { v y  { u  s { } } } y u ~ q v u w t v u z { r m l s v s p w t q v x x | t t t w w w } x y y | r z s l q u u t t x  
+ x { z s z z v s o r n z w t k o f m f b h n o p r s { x r s p q p i o | z y t o r m k r g o x x  } u v t r v w  { y  x w r v  } } z w w ~    r p ~  |  } v q t y z  } { v z w z x    { z s q r r s w r s { { x   z x v v w t | z { r v q  {  {    t ~   v w w x y v t o  
+ z   } z w | w z w t u | r n j p q { s m p w p t v v ~ w s w s | s l x q p w t l k q p g k r j p t t n q k k f f f c e j l e f d \ ] c ^ Z ] Y Y Y X O O M M P Q X Q W Y S R T S T T Y \ X W S M \ W V Q N L K R Q Q R N P P P J M O O I P Q O I M T L N P K P K L E D O Q L I K E J G E E I J G H > H D G J ? C J F G E E F F D J H H C B G = F F C C C @ E D > D E E C E A E D G A F E G A @ H H D A E K H B A E B F B H A G C C ? > A G C E ? A C ? C C B I @ > < ? B : = > A B = 9 A = ? ; 9 ? A < ? : < ? B > ; < : : > = A @ B 9 < 8 9 ; : < = ? = : ; : < 6 @ E 9 ? 8 ; ; ; ? @ 6 6 : G : 9 5 6 6 @ < ? B @ > A < ; ; 9 8 < ; : < @ > 8 7 ; A A @ @ A A D ? > = C D B D B E = = < = < : ? A @ A H B E J F E B C B E E C B B = ; > ? C A ; ; D @ @ M G D I B B B C I G B E ? ? @ A D E B F E H G G B D J I K E K J C A > 7 0 ( !                                                                                                                                                                                       
+ 
+ ! $ ( * 3 4 9 = C E J I K U T Z T U T X W Z d g e k l z k g g o n k u   t k s s r l q w z l j t s w v r z x  t q r w y v r s x y r q x | q s q n r y t r { x y y  u } s s u s m v x w q i s z p o n w m t m r r s h m p s r r s u x v u w u z   x  s  w x u u { | {   { ~ { { u  } v y y | v  |   ~  { u s y  ~ z   ~ | v w z 
+ } { y z r n z    x r o v s y y y s s v m r q g  u t |  s s n w y r r p w r w x w  u m j s q l p s u { | w z v q { } z u | s r t m s } t n k j o i c c e q t v u w s y o z u u p s s w x t s u p r r r r p r u y z l m   r s s m r q s q u v x v y { l q   {   q   z   u r u   y  | x y t w z |  | y  ~ y { { q y r v { w } { ~ ~ ~ t v }  y {    x ~   ~  } } x  ~ { v  ~ u x { 
+     z | ~ u r y { m o q w z ~ n i q s y x q r w s t v u } } v w s t l k q w q n v r q u w g b o v w i r b i l d l a p i j c k d _ g b g _ Y \ \ W T X X X S Q R X V V R R Z T T S W W R V [ T Q X Q O ] U Q P V P P P X R V Q R O E O N Q P T V P R U V Q P O K O O S I B K M M L K F D I J J J E D E E A D P O A A I K I F E E E C G J B = A @ ? D ? H H G E F C G C F I I H E E E H D B C B ? @ = F E D H P K B F A C I C D F I A A D B A A E F D ? F > ? C @ A ; ; 9 B ? > > < @ < > 8 ? 8 9 : > A = : < : < = A C < 6 9 ? = = 9 ; = : ? ; : 7 : : < : 9 3 ; 8 8 > < = > ? 9 7 ; ? E ? ; ; 9 A > ; 7 2 8 < ? I F ; 9 > > 6 8 7 ; 6 ? = 9 < @ < C ? = > A F D @ B A = B @ C D @ < < > D < < D A > D C I F B E @ G E C ? D ? C = C C @ E G B A C : = A B H I C E G @ C B G L L J E H @ C D K M C C G I H H G H F G G N G C H F @ 7 * %                                          
+                                                                                                                                             
+ 
+ 
+   & - 5 . 1 : = B G E K N K T S X X U Y T U ^ b j i e r s d d r g e p r n g q s v z s h p l l q } y z m r y s } r r t t v x m q m } z o { | p q p r y s v u  w p l s r u u p s s m l u s j g p n r v h m h n m x j d h o n o q r p n x s p r m } t y {  
+  z z v y x  y ~  } u   } x y x x z }     } z {  } z w z  { v z y z y t | | x  w ~  | }  z  v m s x v v x x z } z t u s k u v v x  { s n n v t { z w | x u z x u o s i m k x u { z z t w x s v w t w q n u  n t l q o n o g _ k i k l l j n w { w u   x r p t z n n w t r u m g h g o g m w m l t v o n s r s w x w { { w t w z u } ~ ~  { w v v  ~   { t ~ w y w  | s } x   ~   t   z w y w u v | z   y y  { w }  ~ u w y { x  ~ z }        y ~ z  x |  | w y }  } ~ y t x x y t p k o v w z v s v o r s s t r x r r  t x r l m h r s u o y y n p s q l k l m v p m e r o l m s s q i e b e \ g e g ] c b ` a Z _ [ R X U R W ^ U N O V W V ^ \ [ X [ S S R T O P [ W P O S O R P S O R M P W Q K Q X P Q O L Y T X V O M K P Z U R G J F G J H F D C E O I F D D C C C I R F D F C D E D I G G E F I C A B E E ? D I E D A C N E F I K I ? C E D = @ @ E F C K D C H B G L K E C F L J H D E D G C D C A F H E B B = ? A C F : ; < ? @ < ? ; = @ < 8 ; ? ? = ; 9 < A > ? = 8 9 = < < 9 ; B @ 8 < > = > < 6 8 < 9 6 9 5 6 ? : = @ 9 : > ? ; > < : ? 8 < ; = D ? ; 9 9 3 : 9 = C @ ; A > : 9 < 9 : A E > = ? < E C = ? > A ; = ; : : E C ? A ? E C ? A < C F F H K B @ G I = A J @ B D H J C A @ @ @ G G = A B 8 ? > = D E A A G @ D E C F H F C D E D J L J L R K M L I J P H K K O J E G E C ; + ) !                                                                                          
+                                                                                             
+   ' + 0 3 2 7 ? B D B N T J ] Z S X S V X W Z j y o l j e g e c q i r o f f l l q z r k n s v }  t x z v v v  s t r z t m q s t t w u z  x s m v r s v | { | r o n o o { u s v r s s w o i l j l s j i m s k r s l k t s m w n p q r x { w x y u  |    y ~ s } }  z   u p s  | y z y |        }      {   }  }    y   }     }  |  w y | x q r y y v {  w s s m r q v y   s w w { q v q o  m o t x s x u p { y z { |    v y w u w   z z z y x y j n s y u s a h a n l i p w z { u t s q  t c { } s s { z v w s t l n u n h f m o s u h l p x x y } t t } y u s x } v y  w j l t v z {  { v w | x {  w | t r { 
+ 
+ 
+ { 
+ v  { x x y } w | | x   t    x ~    z z t w { z x } ~  y  z { z  | s s y  |  v q y   ~ 
+ ~ | v v x l t s j q z  y z p o u t v  x w u u t t r r o | w s w } u y r m r y n m g g p u p l m p n n r o p j j j l d b j e a ` \ ` b d ` Y U T Q Z Y [ Q W T U Z \ Y V T W W T X W \ X [ d X Y U X W R J S S Q T S S S T T Z Y N K N T M O R M M P O X W O N K H H J E K J F F H I K I L L O I N M H J F J K J K K H G C I E G E B B B B @ E G E G G O D K O K E B E G I I A G B H F G G D K K F E D H A @ J J I J K F K D @ @ E I L G G E = A C C D D @ A 8 > ? A D A ? = = ? = ? ? ; = @ @ @ < : : = < : : 7 < G H 9 7 : > = : < 7 ; ? : @ : = = ; < ; < ? B @ < = H D @ 8 : A A ? 4 7 8 7 ? E = > G ? @ A @ = < : ? @ = ? ? @ > A ? B A B B B C > > ? = B A A B E H B C ? F G I K J B I D @ K A E F > A A E I M L E E F M K D ? > B D B ? @ F ? E L F @ D L K F H A B I D H L K G L I G M K J H K J L G H I I G G : . . $                                                                                                                                                                                        
+ 
+ & . / 0 6 8 B B I H M S K T Z Q V S O Y ] b j m q r m o k l l o r p m k l l o t o p j w } t   { y v { t { ~ v s q y x } y m s v z u  
+  z v t u t p p w | q t u t r v { u s u u u y v i p p m r k q o q p v { u p q x z x u o r l ~ | y x } {   w  ~ y | x z |  | 
+   { ~ ~  |            
+     
+       ~  {              | p l t { q k s s { t t y p t { } w v w s w v { w { u u p s {  y | ~ { p p } ~   z | }  { z t s u t w x y r } u k w x x o n x i i u m v u  x w n w w { y q | z x {  z x ~ v { s u w p k t m t m q l o l v | y x q z z } w s | x y r s x w t | x   x { w ~   ~ |   x }    
+ z    z z  y w  y r }      x v ~  }  { t t  ~ }  } z ~      {  ~ }   } x x t u {  z y z  y } ~ p w w o x } } w  { q w y t |  s r w n p k l s | s u o r t r x q t z t r s p u r v l l s r n r u w n j m j i g j f i i b c b e ] ^ ` X \ Y Y [ Z ` R T ^ W Z V X \ _ b [ W \ ] ] d W V X T R \ Y ^ X W [ \ ] X Y U R R P O O R Q V U Y S S R M P P M N J H L J J R L B I I O O M L J K M H J L J H J H O R J H I N K K L K C D J H @ H C M O M M H N Q H J I J M J F H F G K G H G M L K J I D A D K K C K H H J E E D A B G I G E H @ G C D I G @ C @ A @ H C C @ ; @ E H F A C @ A A > B 9 E ? ; : ; B D ; = 8 ? C ? C = ; @ D ? ; = C A @ B < < A ? = @ A G A C = @ C 8 : < 7 8 7 ; D @ ; A @ F E A < B ? G = ; : = C B E = E D H B E M B A ? @ B D B C A B C E 9 = I F I D F F F F G D G C D E @ I G J H D N I G I I J F I L K G F E D D N E I H L S E A D D J I K Q G E J K J M M J G G K J L E H G D C 6 2 -                                                                                                                                                                                       
+  
+ ! & * / 4 6 = < ? H I N N K R S Q ^ Z X X T [ k i p u y p p k q x x p x x p n v t r v s z | y   } { z y { {   y y y | p s s q y ~ x x   z s z x v v x { x t w x u r u u w r | y t z y n o u w v o q u o w z ~ { | z  } w x l n m s } s z ~   { y y         
+     } w    } ~            }      ~  w x  | x }   z        | s t u s o y s x { w u n m m | { z ~ z t x x y ~  r t p s u r u }  z p j  }  ~ m s | w } s { s t z { { x q w { { y z y n v w n p m t r |  z z w x } ~ | ~ x z p ~  } u u u | y z | p o s u w | u y x y t s x  z y z   ~  ~ w w | w w s       ~        |     
+      { | | {  
+ y } |     ~ y     { y ~ | ~ x | 
+  y  
+   w }   { 
+ { { { | { |  { 
+  }   y ~ ~ t | w    z  w {  
+ y x x u t k p m o n m u p u u t s w z p u q w z  w o x x q g q r l r } u m h h m g k o o s l k g b d ` e d Z g \ T [ W Y Y Y \ ` [ \ W d f b _ X T ] b a a _ ` X a _ _ ] e ] _ \ \ ] X X X S V W P T O N T N Q U O V F S Q O R U T U P P P I K M P M O G J Q J F K M J S M P P P K M L H J I G P I G K M M F I O J C G G I N O M I K M Q L I G K O S M I L N N H G E G J P M J H I L I B B H H F A J I L H D J ? D H J G = A D B A E F B @ @ E E A K I D F B C ? ? > C ? @ C F E < ; @ @ F A > B > F C A E C D B @ F B = < > ; ? ? D ? > ? = B @ = = A > = < B > @ B @ F D = B ? E G F D @ < D H J D G D B > D H D C D D E E C E B D I L C A H G F E H J J O M I H D I E B L O M E F M J H J K D E G J L J C F I G I J O J L L L J L G H M L S G I L O N Q Q K C N P M M J E J H = 6 - '                                                                                                                                                                                         ! % ' ' 2 3 8 : D G C M U Q W ` ^ Y a X [ \ ^ [ e ` c x v q s p p   q o s s v u s p o o p }  y x y s w | z u   t p z s v z y v } ~ s y u u x s | t w u y z y | w x v x t m w x t v q v r q x u { p t s u x { z | | ~ y  z { y q w r s p w  | z ~ | z  } | {  
+    |    | ~ { }       
+  
+    }   
+  
+     ~    |       
+    
+ ~ y s o s m s x } ~ { y  v o r z y { x |  z v {   {  x o p s v  { x y y { y  | x r z w z x z w x { z x z { t { ~  z q q n q { r v t x  | } ~    x l y r u { u x y w s r v | z z u { y u y  y z z } x s z  } x y x  } |  {    z y ~   }  
+   |     { x   }    { ~   |  | w } } y ~  
+  
+   ~   ~  z w  w { {    |   
+                   {   { } u | {  ~ w z  x u z  o q v w t p t u k r w r | w s s s n r r j w | s  { p z n s o w o s w x t o w h p o o l n l l j i i q m d ] e e ] \ [ \ ^ [ d Y [ ] c _ ] ` f b _ R W Z b \ a ` Z _ \ ] ^ _ [ _ a ` \ Y \ Y [ T S T V Q R U R O S O T Q [ W V W V R W N R S W R S O O O O O M P K N I R R N M T M L L G P R M P V H P P J N H J P N F M L J O R M G G F B M F L G P O P F M H H K F F G G O P O I N O M H E F D J H I P O I D H J H K I ? A B J F ? D I E J F H E G J F A A = F C @ D > ? = C A F E > > @ B ; > C A I @ ? ? ? E B F K B ? ? B ? B C D B 9 @ B @ E ? > B B A < ? E F D F D H H E A F B J H G A D J I I J J J K H D B B G F I M L I E E I H G G K I H J J L G L J G I D O L L N O K H J I D B F N I M N I J N N K M T N H R L I Q S M N P L M N Q I J N M T V M R J L J J S J J J G @ ; 8 . $                                                                                                                                                                                       
+ " ) ( / 7 8 6 > A F F K R Q T [ T S W M X \ ` e b d a n n n r r w z t o w p s r q j o v m q   r ~ z  | { x |  } z w | q w s s t } ~ v { w o v | x t | y x q r w t  } | p i o p n t p u q x v s } x p x z } 
+  v  | t ~   { r x v t v u q u  z  
+   z | ~     ~  ~  
+  ~     }    
+ } | ~  w     |    ~ 
+   ~ x  
+    ~  
+      ~ v t l t y } z { z n t x u v x z t y  x u y | {  | } x v z y | x t r } v  | u u }  x t | z { w  } v y v q x   z s u m m z h j x z w r q | z  { w s t u s  x w t t r v x  t t }  } | w ~ y   ~ } v v     z     x v  y ~   | |        ~ } w v {    {   ~     
+ } x    |  }  
+  {  |  }     w   | { |        }    }  ~ z     w }     y { | y } t } z w w  v y |  w u x y q r l g t | t x u x w u o n n q v  t t | | { x s v z y x p u ~  ~ t p m o k o q l f m m t s q ] ^ j c c ` ^ ` \ ` [ c e a ` e ] ` d ` Z W Z [ d ` ` X Z _ [ [ U U U X V Y T X V \ S Q [ W O T S T P U T T X \ M P X X S S M M Q P X T N O L P P O R O J P O L K E I H G K K P Q L M K H I V J K M V W J I L J I R N K P F I I D I J H D N P O I J J O O O J M J I I J M K N M I G H K H J N I F J H E O D B E @ F H H B D M J G K F G H I G F = = G I C E E C B > C D G B D E = A ? E G C ; = A @ @ J P I @ A D E = D E J D ? < @ C B C D @ ? > A < @ D A B > @ D E ? F E D F E F J F I G J I H O K K H J K K K N F I L M C H G J J E C K A E D I J J N H T R P N N E H A F E C J S M J Q H K O P R N O O P Q R J N U N T S T N M L I L P Q N S S U Y K L U U P J P F > > 8 ( "                                                                                                                                                                                        # $ * / / 8 9 ; = A G M R O [ c Z U S T _ b e a c a c p j m p l y q j m q u n t y s r q s u  
+ y x u z s t { y   | w p q u n s y x y y u s r s w l z   | r p v } s q v u t { y p t t p w x r y } u y x x | z ~ x  z u {    w { |    v y ~ z    {   x x   { { 
+         
+  
+ 
+         ~         
+  ~                q q t |  x y } t q u w | } z s w y y x u w { s x w | | { v o w q o |  ~   x p | y u  | x s q { }  s { u | x  | p o k n k i h l o o w { x x  { }  z z v { |  t v q   } z }    | {  |   z t z { z |    v v  ~ { }  
+ 
+   w      
+ }  
+   | }   
+             |  }  
+ 
+       z }    }     } }  }     
+ } y       |   ~ { ~   } y  
+ z  x x { u w  ~  v } u z |  s o l u q s r   u z x x p t v u q s n r z  z { r u v p n u }   | n p s u k t z k k j o u j f d k i g g a a X b d e e \ c g e _ ^ j c c c a ` _ c [ ^ _ ] Z Z \ Z [ V ] V X U Z U T X S S P W S U P O O S Z S O Z X V S N I N K O N N I L O P Q K O M T S X R L K J K K K H N N H O H I N K F R M L K L O M L N O H N H W O M F Q N L K I D G J I J N Q O Q M K M K K G D H M J J I D I H A I J D B J G B E A F G J K F G E K H E D I D C ? @ C C @ @ C G B E G H A G J G E A D C B E @ < = @ D H G B G B F M G @ D I H ? ; > > B D @ C C C = @ ? @ H @ @ A E ? B ; B E E > A C G D E E D O K D B L G J J L M E C G J G C J J F K I G F E J H B B J H K Q R O S O M I I E K J L N G J F G I N I W S L Q R S L L M M N M P V J S S Q P U P N O Q O R M P T T Q O O J C < 6 + #                                                                                                                                                                                       
+   ! ' / / 5 ; < C D I K W W b c \ _ W W [ ^ [ _ f c e i l i o l y t o r s { m s w w t r p q x  { z y u q s q 
+ | { z t q p l m { u p t o z q h j s m u z y x p j p x z n t y ~ v   | z p w w t v y w  | r v    
+  z }  
+ 
+ s z | y    | z   ~   x   {   }     z   }   }  
+ ~         }  |   } y           }         w t v y  } w z } z } z x { w } q o | }  t x t p p q { x  u w s | y u | {   } r x t u v x x z k } w  ~ ~ u v | | y p u t i n l d h k h h s t { | z x x ~ | x s ~  w y x {  { {  | {  | { v {   s u z  { x  x  { }  } ~ t     } x ~ ~     }    ~   
+ ~    ~ {     } v y 
+   z { x       x x y       
+     t w     |      ~ | { } w z      y   u | q x y w y v n v q t ~ |  u u r q t n r } { z s y s p n i y v s p q r y   x x t u v t u r k w r g m u m k q y l s t k m p l i k e h h f e i i h e d ` b c e e b h c d b ` ^ Z b a a f d W ] W \ Z Y Z [ ^ \ ` \ ] [ U Y W Q J U R O N P S T P N W Y T R L J M L P E I N O Q V U Q K S U O W S O K P S P S P L K K I F J O G I I J K M K O K I M O M I R O L K Q R M H H L M G L H O R S O P F D M H K H F J M R C B G L D M K G H H H C C C G H M J G B G E D L @ > = A @ ? C > @ = @ A = D C F J I G G G E ? @ > D D D C > B E D = B = G K C > D B A ? ? C ? D G D C A B E D E D A B B B E > A C P I C A B B H F E B H M F B E K J I I J M N J I G D K I L G N F E F C J F C M J I H M G J J K E G G P J L J K M U I P K K O S T O N T W R S L O K Q Q W L K N P O H P P N Q O T S Q K K O O S O G ? : 1 $                                                                                                                                                                                       
+   % * , 2 8 ; = B I F P P Y [ W ] c T [ [ \ Q ] f d f k h o e i w m o j p t u l m k s r l w s u u u q q v r n y v z r t r l u s y r p t p ~ { s o x y { j g n o l j r n p z  t r u w y u s u v r r t v  w u { {     w   {  w w x x v |  w u } { }  z y y x z z |  }      |  | 
+     
+         ~      y    } 
+     |           y ~  v x x  ~  s y z p y s q x v | v x z s v v w  ~  | u { r w ~ z w z w m w v m t y u o i ~  { } y r s y y q q x p h j h e m n l m x y w u x  |  } s } u | 
+  v z   w v | t x x  | w {  w | {     w     |   |  
+          x | y |      ~  
+  | 
+    | x }     ~  
+      } y     }  }      } z  x  |        }   ~  }    ~  ~ } }  s u p t p x s y z r w | q t n w p n q u t x s q q s r q q t r x p l r r  v x w w l q t r p m i t o l o v k l p p i q g p t o p n o k h h g g h d c ` f f g h e i g c j a d ] Y d c b k b X Y T [ Q Y c b ] V X a Y ^ X Y U T N R V X T P R V W S W T S U X J M L Q T W O M V V S U S M O P Q R O R Q P N M J M O J H O E I M J N L F P R H G L M Q M H I G H G O Q L L Q R K F L H Q O S K I I O O O L J H D E G E I G H E E J K I E E H E C B I H B M M K D M H A I @ D A @ C E @ A = = @ D @ B F C B C M I B A < F F E @ G I C D E @ G G Q I A C G C H D C B E H I K C E J I D D ? ? A D E @ D C I L A A @ B H K I D K L G G G I H H K M N G M S J G H O J K M C G H P P M K C H D I P T M K M J K S O H K N Q M P K Q H I Q N O J H L T M L M O Q T T Q K U U M M L M P Q V S Q R P N N K L N K J < 4 0 "                                                                                                                                                                                         % ' - 4 7 7 > < > D N O W [ _ b [ Z U ] ` c h g i j d m r u p q s r o k q o k r j r n n k u w u p q y r y s q u q p n l s v s x u q o u n w p t s r q n i y t p l p p r v  w u v w y u {  {  t s q x w y w } u y ~   z x w } |  t x     v    ~ ~ w y w  y } 
+  ~  y     ~  {        
+         v   
+             
+     { } w ~ z { | }  }  v t { w w q u x s y ~ v z r w ~ u { z | v r v y  z y u | v s ~ x o s q u g t r o { ~ t y y z s u w  w m l m c l m r p p v u | t s x   { {   { y t }   { ~ w { { ~  z  | ~ y  z ~ z  |     }   
+ } |    
+    
+    | x  {  
+   } 
+   w y | x | } } w  ~ x y |   z   ~ } ~ {   
+ s w y {  |  
+  
+ 
+  }  v        y   y u   u {      x w w y { y x z |  s w x z z u y q m p q o p t r k n w w p j p m t p u s ~ s x q v t o q o l p t { q r j t q h s p t l j p o q t n e k o m k i k g f i k k h e d c e c g f i l g c f b j a Y \ b b U ] ] [ Z Q W [ V Z U Z R Y R U Q X U V T X \ Z U R O P R J S T T S X U L P W T L O M Q T Q O Q Q W Q L L K M P Q L O M R M S S P P S U Q P Q P T I H I F J G H N O Q O J L H I L L J Q R R H I J M M M H H I G D J L I G K G C F F I L H F @ B G E M I I F K K B G E H J H I G D B D B C E D F A B B @ C D @ ; A H J J J M G H I I ? F G I I H @ D H I D A D ? D F E B < = J B A ? B D H I A E E A C B C E I A H F F M I H J H G I J M I L J F K K U T S Q J M F D G M J K G H J M F J K I I I L K O P J M L K H J J K O Q R R L L D F K M M N I P V V R L W S L N L L M O U O L N J T N J K K F L @ 5 0 % 
+                                                                                                                                                                                        # ( * 0 5 < D B I G I R X f d ` [ ] V ] ] d k d e e e g o t s s q s o p s m m t p n s s k q s p x r q q u v w t t p p i j j f t t l i i q q m r o q s l o p n o s p t n x y x s y |  |  y w x v w v } } y r s |   ~ { t z w v z { { { y ~  | y  ~   
+  { s x x v ~ } x { x   
+     ~  z   }          } w y {  } }  
+       z 
+  }  }  z v u y | x z |    u v x x t p p x  | u v v w w x r q { | t s w x  v x w u x w s v w y r s n z u q ~ } | q p y j i n z s y p j l j e k o x m u y t u w w v r w ~ w | w q u y y | | ~  }   v x | } | z } w y s { } {  } t { | } } {       {    { { ~  | 
+    }   
+ w  ~ t | ~ w y z t  
+ ~    
+  v  w } 
+ } y n y }   z      ~ | ~  | 
+                 
+  
+ z } { y v s { w x v w r x  } q q v t s j o r u s p y  u w o s v q j n r r u r  { w o n m r q y n q r o q o i q t s r r s l n q m e i o o j m m p m k m k k g c _ g i p m e h b e i c e [ d ] c e ` [ W Z X Q ^ _ W Y Z V V Q R [ \ Y P M S L Q P R S P Q M J U W X S V V P P P N N R U Q P P U J R P M O K R P O M J J O U R U R V O S P L J M N N M E I H M K O H K E I M O N I O J O Q P Q E ? G H M O K K G K I P J R O M O H H H D H H J H F A J C C G G E E B E F I H G I F E I D D D C G F @ @ @ D G A > E G B J E G @ J K H K F H E E F E C C H B @ A B ? ? K G D = = C C D C G L I H B B < B F I M H A B @ B K I F F H E F G H I E H E J I I O K M M K I M H L L I O J K F H I H E M I Q K D Q L R L M P M K F C M T P L M M G H P R Q L K I U O L P P O R P Q S M W Y O P P S Q U R O O R J A 9 /                                                                                                                                                                                         
+  % & , 2 0 9 C H L H L T [ i c [ ] Z a a a c ` ^ c d h o i n o l n w q h q h n z r n l o j o p u { x u t w z r s r n n p e m a e s q j q n q e i q u o o q h p q j o q u r r v w { v z ~ { { p } t u {   ~ v u  { ~   t w w y ~ t    | 
+  w { ~     o q w | r r v | z  {       | { y         
+      u w    
+   } {       } ~ 
+ |  | y  { x  | } t t q ~ { ~ x m { { | } { r x v u  u r p w t {  w ~ { x u t z v w q t y w r o p  { } | t v p p q i p z t u m g c g d p s q o v v } { s w u z v x y } y u v ~ | }  
+ } z { } w  y x {  w }  { |   } { z  
+  ~   } z         | z { } 
+   
+   
+ 
+ {   z   y w y t               | v z    }  
+    {       
+    }       z   ~ | ~ | } |   ~ s u { | w l r | } w i l z s x i l s m y u q u p q f s y t t p p o | v y z  s l o r r m p s m n q e h k h i h o q q o s k k n m j d m q r n k m v m e c h k l t t e _ d i h j b _ b \ b b g ^ _ ] Y ^ _ \ Y \ [ ] ^ U R [ X R R M W P P L R Y V U U W Y M U U P P N L T M T U Q M H N S R O P O Q K Q V M Q I M O R T R M Q M O L L O M N J E F K P R L K N M G H H N P M N K I P N H J G B P N L N J K I K V J J M P O P M K H H K E E F F E H I J J H D J G C H G K E J ? D C H A C B B E B @ G J E H J J B F D F @ G H K C F G G F A H G A D D A E E B E E D C @ ? H K H D C D H A B E @ D F K E A B F I F E F E J K I A D I F F H H I M I E J H F M P J J O M I N I I E L P I F K I N M Q P J L I O R P L G G O P J H J O L Q V W T S N O R Q P N T Y S R U Y Q P O O W T Y W ] Y M \ S J D 6 . %                                                                                                                                                                                        
+ $ ) / 3 6 ; D E A H O S T d ] X [ d a b ] ^ h d g l h s j n j i p p p h q p j m p x j o p l n s t w } t r w u s j m q s p k e j e l h m m o m j t r j t s p w n p p j s u w u v | } }   s q r p t {    u y } q t u y { y z  } { u }  w z u z } ~  ~ |   w p t x y |  v   } ~  z   |  } }    ~             
+      }  
+    
+  }   | y v } x v y y l y u z w u | y v u x u { y y z z z y p s s t | ~  y x u w u x s k o u p s q j i g t r l w s | v t p j p t s k k i c d c b o q y q q ~ x x x { v q q x ~ u t y  u y y { { u w ~ {   | z | z z  z | { |       
+   x     |       z ~ |         w y v  
+    w x    {     
+   y    | w |  }       v      ~ 
+    x      |    {  x t y r v q v x z  { z v v u } j h u q q w r p u { } t l r l p u s m m y ~ v { x w w z s p n m r s s l l m n k l h g e l r x n n p l o k i e \ j k m s l k w z h l o l m n n k h h e d j k l l g ` \ g ^ ` ] j e p i b e a b [ T [ f ` U U P W U R T Y \ Y U \ \ Q L Q S Q N O L N R V X T S N V O Q O P T S S Q U Q K S P M P N O H L M K Q Y Z T P T U F K R T N J O T M M G K H J L M E I K H K J G L H J N R J G H F ? F M L R P I K G G I D C B F H F O P M A A E G G H H H L H I J O G H E I E C C C @ H J N M B B L F D A D G B D D J P I C F E B J H F I C C A > @ K B J P D D C A C G ? B @ E J G M J B D C I H L E E J I D C G J K B J K D K L N M J C Q O L J R Q I P L J M P Y S H L N G J V R P N H O M N L I J Q P H G F K K M Q V R P O L U S P Q V R N K Y T S K K S U J O R W \ U S N K < 4 / "                                                                                                                                                                                        
+ % * , . 3 6 > B C M O R V a c [ ^ ] c g _ S b d h o o h p o p y p n o u m m h q s r m m o n s v x q v v q u p l o j o w q p k d k u q m k i g j v n s o u y q p p l r s v u z y y z   v n x o y  | {   ~ | x u u } w | t v z z x t z  | x r {   z    
+ y l u z { }   
+    { x  w }  
+ } w |  }    x               
+  ~    ~   ~  ~ } z w x x t j o o v z y y  y z l y w } ~  | z t } | y y x  {  z s | t w u t q j t o n y z p l g p o y t ~ t y p b l j m e l c g b d e k q l q t   { s  v x v u x  ~ s t | y v r q  x x } r } { z w v { { y 
+ ~    
+     
+       x     {        } } w    ~       r   ~ }  |     
+ z      z } {    ~  { 
+     y   |         ~ w   | |  ~  y s ~ z v y x  z } | z  w t { r q q t p u o x | q k r t k o w m u t | | t ~ x s q s r w u y s q s l o l i a h i h r x s { z q r o m j e b m h i w p g u { q s r ~ z i h m s k f j k k i k e b e c ` g d i b j g b a c \ [ Z ` e ^ W V V _ Z T Z a h W Z ` R K P Q Y U V R S P U U X W V R Y X V T P X X S R U O M R V R T P K O R P P T U S U R U P F G L P N K P S Q M O R I F S C D E G L J O K J P J U I C O I H E I K O O J G I J L K J G K L K I L F K D I F G E B E H E E I E I O I M ? E C C G G H N C I K B @ L I ? G E B G I I I I E B A G I D F B B D B B E J A D G B C B @ C F D C B H F G C E A B F H C F J H I K C D K K E Q N E H B N I N M L L S P O Q P K M M R P S R R P H J P F S S N N L O O Q M M I R O J K R O S R S Z S P Q S V O R S V V P K Y Y a U V Y X U S ] \ R R T N I A ; 1 $ 
+                                                                                                                                                                                       
+ % , - - 4 9 @ C D M S N X e i d Z _ b c b ` f h r s m j s p u q q o q r s j s l t v w x z y s y v t l } y u p q r s w v r j h i l h g e p q h i q l s k n p o w t k s t o o  z y w ~ y  ~ { { v z } ~ u }   x z z   v t x u v q u } { z u { {       |          }   } 
+          |     ~     
+      
+ ~  
+          
+  ~  y y } q t r p u x z y } z y x z x  ~ y z } w s y |   { s t q z r s x x u y p p t u u t n s i q o | s | x t s i v x l l u j c c b ] i q q u { {  } u x   { y r } y 
+ ~ u u y v   z u v } { y } q o ~ x     }     |   y       ~ | y  } |   {      v |   ~ {    } ~  
+ 
+  z | z   
+     |   v       ~ 
+    
+  ~   }     
+ ~ ~ z   }         y ~ } t } ~ x v v v y  t t u r p s v u   y  s n r t r s } v y u s v t  y w p x y o y  p u t m f j i f p h o w } o o l o q p r n h l o z k x p r o v w s m w } o u t p t s r r l h k d d e e _ e o i f e h b a ^ \ ` d ` X Y [ U X ^ \ Y Q \ c V T X S Y Z R R S Q T U T R S Y Y V T T [ U T Y S U U Z U M Q U U S W V M ] L P T S P L P M R J G F K N W S R I G J P S J J O E O N L J P S M M V M U J H L O M O H K O N K I H J I H K O M K G G J E D G I E J I I I K K I J H G I M I C E D A = H H I H H C G G K L F K J H H J M H K K H F B L F B @ ? I L H H E E I I M K C D F F H E L K I K H H B H D F B E K M I G D G P K N K J N L K M M Q R R K W M M L J R H M Y W T U P N Q P P I U U N O J K O K L N S O O P R X W W W W Z S P X \ T R W W \ Q P R R V Z U V Y Z ] ] X ] ] W ] N J A : , ( 
+                                                                                                                                                                                      
+ # " ( 1 - 5 7 @ D G F Q X a c a c d k h g _ c b d e f i r z q o l l r l m i t y w { q y | y s u v t p s z y z z t t t s r n k k k l d h f m p m p m m l s p j q y t v y x t l u | q u    z | { t v  { ~ ~  ~ s  | { {  z x } u r  y  v | | }     
+     
+   z ~ {   ~  } 
+     ~     y {  | ~     ~ 
+     ~  |        
+ ~           u t w |  u  
+ y s | |   u x w 
+ { p z   | r y u u r v n z v s s p p p w } w q o x m p r r p q u r h o m p q n f d h c [ ` m q u } } { s v w  y  u s {   | w u  u y { u q u { y } y u y ~ ~ |  w |      |  ~   
+          x  y {      {  |   
+    } 
+     |  }              z  
+       ~ 
+        
+   }    
+    ~    ~ 
+ 
+ y v w { | w q {  w w | z { { x x x x {   y y u p x m } ~ v { x s t  y { q w y w x  r v t p m m l l x j r q l k o n j r p p k o n k m k r i w p } r r q r x s  u r w w z t m h g i d c m c e e e b g p e e ] \ b e b ] h d _ ] ` _ Y V a ` [ R U X _ W U R Z U W Z W [ ] W b _ X X c ^ X Z Y W V V U W V U W N W R R V O P P O N R S Q T T N U R P P Y Q Q K P R N P M O L L R M L X U W T R P K M R O P M K M S V L P K I J K J M O P M C A G D B E E I E A D D L L L B H G J F K A ? J G @ M M F L I E F A G N I G F I K J F M O H L H F P L H J D F G L M L F F I E H H F J H K M M K J L H J I K H K I G L N P L N L P R P H I S Q O I R T Q U T X N O O N T M M [ X J R X N K U Q N P L L P L O K M U P T \ W P Q W U U U [ V R L U X W Z W U Y R T T U R W W T ^ Z U ^ a ^ ] [ X U N E 7 - &                                                                                                                                                                                       
+ " $ ( / . 6 9 8 B F D R ` ` _ k q s j d e f h d ` g a m m t y w r n n t q r v { u v t r  ~ } q y w q s w |  y t t s l u r q p n u c k m l y z p s s v t v t | w u w v ~ x o v x z  
+   }  x | | t z  ~ } { |  }    | u { w {    z  {      }    z x   z   y }        
+ 
+ 
+            
+            ~      
+   
+        ~ y    v   r u 
+    { s } } w s p {  z w } z y y  | z z s u v n q | w v u j v v n h o s t w r u r m x v o m h k o c d l u n x } ~ z w | x  ~ {  |  
+ { y  {  q r w u y x w | s r s z w s ~  }  
+     }   
+ ~  |      } {  { ~         
+       
+ 
+                      w     
+        
+  ~                y  ~      | y r y { z t | ~  ~ z u { { t }  } t r z u |  y w   { u s y z t j r z y y q s t v l g o o w h q r q r y x { w o t v j h k b l k e s u q g l q y { x   x } ~  z l u q u u r q l l d i h k h e j i k g b c j h j a ` i ` ` W Y Y \ [ ] ] a \ ` U c e f b Z Z [ V X [ a _ _ ] Z Y S X U ^ b ` Z W S Q O U Z X Q P R R S T U R O Z V R U Q O Q T Q N P W U R V R S L K M Q W V U T U P S Q M U O M Q Q L K M N K L L N L J X R K I E E F G J H F I I B H K H K J F L N C F H A K N H I R N O K L H H K G G G L N K K M M L I I N K S P K K E J N N H J K L S N J I J H Q P K M H M L N R P L O Q R M O T Q K U I N M O R O Q U W V L M Q P M P T L N Q T M L [ R L M L P Q R M S L K K N J P P W ] Y U W T T V \ Z R S R Q R Q [ \ W W Z ] Z O X X V W U W U Y W Q Z ] ^ ` ` Z [ F E 3 . ) 
+                                                                                                                                                                                       % $ ( 1 1 7 > > @ G K S X [ a i r v h b ` c g a ` i \ k p v y w v s v x m v q w s y o l y } v s t x y p q y | { t z x r y x x u o r m o q r w q n s q o u z   z r q u t w w t | r w    
+  x y y v y ~  z z   { z  
+  y y  } |   }  y ~ ~   v z   }     ~   |       
+    
+            
+  
+                           u       y v w    x t {  { y u | z  y w {  z |  } o  w j o p p t t u v p m m j s r q p s q r u s p n h l i i v i g s u w z } y  z } y s u u {     z ~ | ~ z }   w v | x o p { | x |    
+ 
+   { y  
+ y { 
+  }                      
+                    
+       y      
+       
+          } 
+    
+   | } w z }   
+ { w y } w z y } | w z } | q | z v w  s q } x y z { z u ~ y u p v v q r z y x x x y  { t o t s { t v z r v x t z w v q q l m d [ g m i q o s l m m k |   { v y  y y w v w y v r h k u k l k m i k g h n p j j f b c h d j ` a ] \ ] [ ] ` c f c b ] d b _ Z ] ^ \ V U U \ \ _ \ _ S Z X _ a [ ^ Y ` ] U R U _ X X Z [ V T V W W R U S U M N O R J S R R T Y S P X Q K O Q R W W R S M O W O O W R P Q Q S Q U V S M O N K O X Y S R N L D E L S K H M G H I I I L L I M P K G E K K N M P J O H E H H H J K O P T P F J M J J J N J L P Q M L M P E F I M L L K J M J G N V H Q K P S G M O S O T N F M Q N P S Q P M J M R N T R T T R Q R M T S U T W Q R N X Q V V X U P T S U Q O U V V Y ] T ] W T U Z \ Z Z Y Z T P T S U Y _ V a b X ` [ X Y S W S ] _ ^ X T Y X \ d \ [ ] L H = 6 )                                                                                                                                                                                      
+ 
+   # % + - 0 7 9 = B L N Q Y Z f f k e c c e i g a _ d ` a p i n  w r p s u x y } y { y x y { ~ | r s z r z y  z y t | y x x v k b m l j l p q v x p s m w {   z u } y q t s q s y |     |  } | v |        w v      
+ 
+         
+              z   
+             |                                 | } { } }          t s y  ~ { } x |   w v  | y  ~ } s v z z q t v t s y s n t { r z y u r ~ w n m s m e p m i h r m q m w u {       }  w   |   
+     }   z v | } u s t | y {    }  ~   }           
+        {     ~ ~              
+                      
+     |              
+     
+           }  x s ~   { w  } x v x w   } x y w y { ~ s z s v w t r ~ x p r t v z w s w { { v p r x z t y  y    } y x u x q t d c d r q p p u u t t s q v | y  z w w t { x w x y x x z { v o n o q q l k w p j n i d i g d a c c e a b Z ` ^ d c g \ \ f ` ` ] Y _ \ a U _ _ b e ] _ [ b _ Z ] _ \ a Z ` ^ _ T [ Q X _ T T Z ] U Q U V Q U S R Z T V U V O W R V U P K Q V Q X T V ^ \ T S T S Q T Q O O N Q Z X X T L P P P P V T U P T L O L P R N M M M J J O Q S R S O N L J L Q O O L O N L O E H H D J J P O U L M I T M H I G Q M T J I K I M F H P T R Q I K Q I M K Q O O O Q P H I L K L \ N H J J N N U Z P R S R Q U O O U W V T P S U Y [ Z W R R ] O S X R X Y T R T T S R U W b Z \ Z \ W T S X Z _ _ S S W ^ [ U V X ^ [ \ V [ X \ T V T Y W Z d ] Y \ Y \ _ h d ` ^ T I @ 6 , !                                                                                                                                                                                     
+ " # ' ) , 7 : ; : G K J O Q Z ^ g d b h l l k c ^ [ ` [ b g m s z u y v y ~ t ~ }   | }   z y z w { x   ~ x t y x t w r v i t p v o n p r y x o z x z y   { | u w v v y t w w   t | {   
+      x y    | |                
+     ~   }  
+  }   ~  
+                            
+        
+                  | ~ { y        ~ z ~    | 
+ ~ z { } z y | w | u | y u y x y s o y z w r q u n o q i s l o h k l o l r s o n j o s {  
+    {     ~   w     | y y w y {   z | t v x }        }  ~  
+               
+  
+  
+ 
+      
+   
+ ~               ~    
+  
+     
+          
+    
+    {      |        | y x }   p u |  z y { } { o o  }  } { z y y ~ z y x u { { { s j s w m s w z 
+  u z | s o x s  t } } w n m t  | { u q t v o n r c u q p k p v { } x q t  x s x  } z  | z x ~ n }    m p { s u p l s t s j l q h e k d c h i n c _ ` d \ c d ` d f ^ b a [ ] g a b a ] a _ ^ ] Z [ Z ` ] ] ^ e X a a ` Y ] X T ] \ Y ^ ` P S W V X \ Z ] W V Y ] Z X W Y W W O O T ^ T W X Z Y W Z \ S S P T T O U V S X Q X U T P V T Q V T U T X Q K M R R P T Q K J O Q R V V M O N Q M N S N L W T P O P L Q Q F L P T P P S O P T Q O G I O K N N K N L O G M U U W O J I M I I I J Q S U R K I J L R O Y X T R N W U T T R P P S U P S L Q Y T R Q Q Y O K S Y R V X Z \ S a X X R T V S ] Z W a X ] ^ Z V X W U \ ^ Z Y V W Z c Z a Z Y [ ] Z Z ] X X ^ ] [ ` d W \ Z [ [ \ [ ] i ] ^ a Z M C : + !                                                                                                                                                                                      
+ & * + , 3 ; @ ? B E I P V _ ] g o k o m b h i c ] ] _ h e f y w v u q } { z y v  }  { }  | y u x x |   y | y z u t v  s q o u v v r s z p o n t n u u z u  x v z v s s r p p   |  s y  ~ { { 
+  v } ~  
+ y   |    
+      z             |   
+ z |  
+ 
+        {         
+             
+ 
+                   {   z x v u { ~ z  {     | s q { x z x { y y u x u { ~ | z w q ~ { v m r s k m z w s r o l n f h o i l j e v t m n q d e f s q u  } }  ~ | ~   {   y v    v { ~ ~ v  |    } ~  |   }    
+  }  }   
+       
+                      z           
+                          
+  
+    }    ~ x          |  w |    ~ x s v t y | | s p { y x z y |   z  z x { x { x v t | z  y t v x | } | u w v u z  u s y u q q v t { z t v y w s t r j t m u q p ~ y u r w v x x z z |   x x |    y   y l x 
+ y { } s t r k m i l k j m p h l f e c c f g d ] ` e ] c c g d \ ` g b ^ ` a d _ Z \ Z ] W a [ a ] _ a [ _ Z Y [ T X Z Y a W X Y Z \ [ Z ` Z V U W S Z _ ] Z ^ S O T X S S T X W Y R X U [ S W Y U U Q V T Z R M W Y X S R P J Q W Y X X S U O P V X R Q M Q Q U X K N E S N J M H K F N S P Q K P Q R P Q R R T S N P O S P Q J G L O H L L M E N Q S J S V W N H J K K Q S P P Q P U S S S T U Q P S S Q M S X U O O R T U T Z ^ W R V W Z U X X O S V U U ^ ] Z \ U W U R O U W S U Y Y Z ] W Z Z T X S Y ^ _ [ \ [ W ] a [ Z b ] ] e _ ^ W Y ^ a d c a ] ] ` b ^ \ a h a i \ j c R L F ? .                                                                                                                                                                                       
+  ( - 0 4 5 8 = E C L P ] ` c r p l g k h e e e Y W a e e a k t w t t x z  s w z | w p } y ~ u { w y } v w w x { v p t {  u t l t w { v z x y u v l l x s y z { z x v { | ~ v s t } |    w w      u  
+   | }  
+   y }      
+        ~ {       
+ 
+ 
+  
+     
+    y    
+                {      
+   
+             w  
+   | z y { t { } y y  ~ z l w u s y y w y t u t { }  v w { w z p l r u z y r p n l k l k j g j s m k m o q k g e j l k o p t w z   }  x  ~ } {      } w   y }   {  } w }      ~ z    w     }   }       } } 
+      
+              
+ 
+  
+    
+    
+  { 
+           
+  
+     |                       
+   }   z { z | v y } | { y } | x u r z ~ x {  { z t ~  {  m k t  ~ v | y z x z  } v } y ~  } v p { m r w  } v p p r q q n q o n t s w o q w z s t v z { v u    { t w r x   v } z x y   { x  z z q o l l k l m l v q m o r h d b b h ` e e i d f ` e b _ a b ^ _ _ b ` \ _ Y [ Z ] \ Z Y ^ _ \ a V V ^ Y W X X X Z Y _ ] [ ] _ ^ ] \ Q Z V N V ] X T S S N S R T R W W T T X d ^ Y ] W R T V S R Y V Q Y W V P Y W L R X W U U V T T P S S O T T W X K T Z M D K J J V K O L V R P M N J J O Q V N L H J I S Q P P O Q P L W S O M X M J P U T R R T S K K L J V O V R L O P P M Q S O O O R W R K S T T T R T U _ V V U S U Y W T Z \ ] \ V O Y Y Z Y [ ] T _ ` V Q Q Y Z S Z [ ] Z X X ] b a _ \ b _ ` ] ` \ _ _ Z W h e ` a e e ` d _ b ] c ^ _ _ c b g h ^ k e i g b ` V N B ? 1 
+                                                                                                                                                                                       # ) , 1 2 3 9 < J M R Z ^ _ d l p l j q s f l [ Y \ c e i k j u t r q t t s | y t u { p ~ { x v t y p r ~ r s x s q y w u u t s p t z o u | s s w y p p u z z  x ~ t v u r x   y x z r |  t ~  
+  ~  } |     |     } z      {     ~ 
+         
+  
+     
+ ~   
+    
+                      
+           
+        |  ~ z  u y v s p v x y  ~ t } t t y x | z w z y u u z } x z x } u u r l u x y q n k m k o j o p i n u t n o z s j f e b e i m i x v t | } |  | | | ~ z   w  ~     
+    }  | |        ~          z |   
+      ~ 
+ 
+        
+           
+           
+   
+   
+  
+   
+  
+ 
+              ~     
+      }     
+     ~ | y w u z  y r |    | s w v x v x y o q r u y w w s m m x v q x p u  w w y s | | u u t u t { r s ~ { x k m o o n f p j q l r j r j q e l m t l o r r w  
+ | ~ } y { u o u v q z x x }  y x  { z t | w z t m j l j p l t p q j _ a r o c c g g h d d g h i ] a Z ] _ ^ ` e ] ^ _ \ \ _ S ] Z Z Y Z T ^ ^ \ Z X U \ _ \ a Z _ \ W Z Z _ e ] V S Z \ T X Y [ _ S V V Z Z W W Y \ _ T Q ] S U U V X V Z Q N V X W V V S U [ ^ ^ ] W R P U P W R R K U R M N Q K J T R H K N Q T W O O P W O G P P V O Q L S M L M J F O U L S V T P R R O Q S S P N U Q R K O Q M M Q T K N Q Y U Q Q X P L P P Y P Q V U P R W W [ _ [ U O Q T V W \ Y X P [ Q U [ V Y ] W W T [ W U V U _ Z U Y ] W \ [ Z Z ] U \ [ _ Y _ a b ` ] a V Z h d [ c _ d ^ d _ \ U Y c f c b b d g b f c d r b _ W K B ; . 
+                                                                                                                                                                                      
+   & * . 3 5 6 = C M R Z [ d ^ c j i k m h f \ Y [ ^ ` d f m n l o h p n t r z { } z | p x x { u l q s u x u v w s v x u w { w w y w u o v v y |  y r t q t q { z w x y s s w  | v q y }       ~         |      z     x       
+     
+   
+ 
+           } | y                               
+          
+    |   y { } z q w  } y { ~ { u t t {  z r u r y } x u u s s w w w w o p ~ z t m i i m m h h m g j l o o j m n e c ` h a i i k o x u m u { } y x } y ~ } }  x {    x x  z ~ x  | y  ~  y { ~ v z  | v   z    w    ~ 
+                 } 
+                    
+ 
+ 
+                      
+  
+                 ~    } w y z r t z } y z y { z   z y y o p t o p u u t q q r q t q y v l o n w y y t q z u v y v r t q x y p i q z r x s u n s j n m g g d u i o o o t s y l t | }      z } q r w t w s u } }  y }  ~   ~    { m n g x r n l o n k a d g c e a d e c e e i i a b a \ b a e b Z [ W a ] c \ Y [ ] V Y _ ^ Z [ Z \ \ ^ ^ [ ` b ^ ` [ Z V a \ \ Y _ Z _ ` Z S V W R P T ^ S Y ` b W T P V X Q W X Z _ [ V X S W T W Y U W Y Y X ` Y W P Q V O T P K O O S Q R W R M P T K V O R S O J N S S O L L J N W J N L H J K K G I L L P N K O P S J O M X Q L O P P L O U R S J L J H T R P S Y Y Z S M N W S V Y X W X U Y W Y X V S Q S U T a ` [ T T T V a c ] ] ^ W V S S R Q Y \ R [ ] W Z ` X [ \ b X Y ] ^ e X c f c a ] b [ X _ ^ ` ` ] b Z ^ Z Z a c b e g a _ ` g i i p k k d d Q B 1 & 
+                                                                                                                                                                                      
+  # ' . . 9 > D C I T ` ] c i g m p m k m g ` _ h _ \ a g h n n d j r v r x | z v v v r s w r | s u r v s w | y w t z | { x v w v u o o p j q u s w t t h o p u u k y x w s t x u t o o w   |  }   {   y  
+  z    z | y  {    w {          |       v   z       ~ | y s v           }                  
+           
+   z { u | ~ | t q q { v x z  { z u p n n r p r m u z | x { n k o o u m n m k o v i n g o g h ` j e h h j f b f ` Y d h h f h j h r l m o t u r v y z r t v { m v z  w w x  }  ~   ~ y | { w } z v r u w r z x u  ~ |        
+                  
+       | y 
+  
+  |           ~    
+            y         v z  
+   
+ 
+    }  z | } z  w  ~ q w x x y  ~  z u t { | y q u n q w y u t u r z { q s p v { m w t o t t l u q u w u q u o r n n w w r z r q k o x t m m h g v k o p v u p p t ~  | { u w ~ t v v  z q y { v s z | ~ ~ } { |    u { y ~ x t p q r q u q o w o o k j o i c e e i b o m d c ` ` Y c d V b [ Y c i n d h ` ` Z Z g a _ ] b ` e [ b Y Z X R W a a Z Z Y T W U V Y \ V Q U R S [ \ ^ U U V Q O T U U U X ] ` Z W Y U S U U Q W X _ ^ X W V S T Q T S [ R M L K S K O Q N U Q Q P W R P M O Q N O N U R Q N K F K U M M R N J N L D B L M O K L I R I J O R M O L T M J S K K P R H O T M P J H G S S V P R R P R R T X W Z U S W P Q M P P P Q T Y ] Y ] X V X Z \ W S W \ ] S P V Y [ ` \ _ ^ [ _ ^ W [ V S X ^ [ \ i _ \ d d e Z Z X W \ ` X c b e [ Z [ a ] d f e h f e m g k q q r p j d O J ; .                                                                                                                                                                                        " & * 0 3 2 < F I N Y ^ \ _ q n s p u e e b a c e c f e i i l k j n k t r s y p t k y t q r u y { w u q t { | { { z z |  z y y w v } x u n t q p u u w p n t t q l v r r p t u z t n q t ~ { x y y    z      y 
+ | } { ~     | z w y        ~       
+   |  }      | | y x o ~ }                    
+  |   
+   }          ~ ~ ~  
+  u  y w i t | } t } p v w y w n p p l v s u ~  s i p t w u q p m v o q t m r o m o d d ] c j k i h g i f h ` c e k l h f n m l w p  y w w u z { s q s p w y ~ q y   |  ~  x u | z x y | z { w y x y x |            }   
+  }    ~     
+     ~              
+ ~          
+    
+   |  ~     }  
+      
+        |     }   x }  { ~ x s { ~ z  
+  w u { t z } { l r u u u y  { t o y q l t t r s r s w ~ t p p t j j l s t p p l r s  ~ w t s u u k o t l i k h o u z o p x o l q } } | r y v z p t |  u s { x { r z |  y w w u   r t | q ~ t u t r w r s q o q o t p k t w c l h j d e ` h i f a _ X [ a b _ Z Z [ ] [ a g f c ] b \ Z c \ Z Z _ _ ] [ \ ^ ^ _ e ] Y T S W U W _ U V U [ Y [ ` [ X Y X U U U R U U Z Y f _ Y X W U [ _ Z \ ^ _ \ X Z R T N N T T X U U R U R P N M I M V T V Q N M L M S J S V O P H S R K K K J M L U V P K J M G Q W Q Q L K J L M K S N T R Q O O P L I O H G P L R R P L K E I V U R Q Y X R V Z W W [ W L W U V W Q U X Y V \ X _ [ ] Y [ Z ^ a Y \ _ W X X [ Y Z ` e e ] \ Y V [ a X Y Z ` \ c [ e a f c c _ b ^ a e d b e Y ] V [ d e e j d e m e v k t n s r i i f Q D 7 ( 
+                                                                                                                                                                                       ! ( & , , 5 7 @ B K W \ [ b m t n i p c a i g ` \ ] j f f k n l k m v m q l w n s s s o m v x w ~ x u u w }  x { x r x w q p r u s t o v q v s u w s s r ~ w y v w o q s | x w v u u l p z w z v x {  
+    
+ z w }    ~  | } }       
+ 
+        ~        
+ 
+         | u   
+   |     
+           { u      |  x v      
+   
+  
+  ~ | ~ w { r ~ ~ z z z u n x w q x h q m p m l s | u x r k u w n r { z n s w v p t l p e a l f o h f k i k h h h f c h f b h b l r r o }  |   x } x | w  z u ~ { 
+ ~ y z 
+  z t z   |  
+  } |  ~ z w }    y } | z  | 
+  y     y  
+ } v     
+  ~  z x  
+           ~ 
+          | ~ 
+   
+   ~       
+           |   ~           } 
+ } v z    ~ u }  w }  y o v r s t u s j r w s n x u h r v n v u r r w 
+ w m r r n p s t k o u s o m v {  z q p q q h m u m g k s t w t r r s o r r w p z  { } t q v z p v | { z  z w {  x s p { } s u u s v t o u r t z s t o u s v v x w p l u o s l f b h l g f g f e _ n h \ ] ` _ e e l j d ` b a Y l a [ a a Z c d ` ` ] Y b ` _ ^ ] Z U X \ V X X ^ _ \ ^ \ \ Z _ b \ ] T P P V ] ] \ Z W [ T T R W X Y [ b W [ R X O P P Q V Z X Y W Z X T S M N P N M P P M O J T S W S M M K Q L K M L L Q U Y V O H J Q O Q T T L M F I G M S Q O M M L J O L R N L R J P R P R P T R E H N M Q S T M J X W X [ W V P S N V ] Y V X Z Z X S W V \ W U \ Z Y Y \ ] ` \ ] R ] ` c Z \ ^ b ] a e ` Y g c ` ^ e a ] Z e b b d _ c ` a e f ` ` Y X a m i h j i l l v u o p p u q u k d W L . "                                                               
+                                                                                                                       
+  ! # $ - . 9 < ? A B R W ] c h m j h g c f e l a \ \ d g ` h g g d m q n r r t v x u k m u t } w | } | ~ } y ~  x u r z x y q y s l t r t q s s t s q s w x s t s s u x u { z | v t z y x z x ~  } | {  ~      | w     
+  
+             }       
+    }    
+  }     ~   
+  ~  }     
+   |      
+ }  
+      
+   ~    
+  |  
+  
+ v w } w x } u  }  t ~ } u  w { ~ w v y o t { w y x ~ } y u t l p o q n p r w q t j l j d h l n f g i i j d e g b ] e e _ f d m o i r t x }  } u | w v v }   z   x q z x ~  z z      
+  }     {   v  | } w   
+  }  ~ } {           
+ | }  {       
+ 
+     }                                ~ 
+ 
+         x     x    |  }  { w {  | { { } t z { x  y { z { r u z y u m z } o n o v x s r r r u o o t o n t v z m r p o m i s { { y  { } y r o r q m m n o v z m j j j r z u i z y r y { } v y } { z | {  { z ~ | } u p t | | v x r q t ~ z y h o { ~ w x { r x v l t y z v r l r l q g q l g b g k m d d g \ _ g e h b _ ^ b \ a p i ` b a ` ^ a _ c Y W [ \ ` g b Z Z [ Z Y a ` ` Z \ ^ ] ^ ] ^ d ^ Z T [ Z d d W Z X T S V U T X T _ U X Y Y R S V W N W Z X V [ Y Y X P R U Q N J L S V R S T N O Z S T N L O M S T X P R U S W U T M R P V T Q O N S P R T W U Q P G K H M M R P L E K I O R I J W O N K O N R Q N T U Y X U V Y Y U S R X R b Z Z a [ Z Z ^ ^ ^ X N \ \ Y [ \ ] ] ] a [ Z f e ] g [ ` ` [ c b ] a b i f a i Y ^ ` b d a ] _ ` f d k ^ e c ` d e k d m r t u x ~ } p v v w t g ` Y L 3 %                                                   
+                                        
+                                                                                            
+   $ ' - / 7 = D E B Q Z a a i c a i m n o m l ^ \ d a ^ c e f l g g f u t w r u u y w q t | v } x { |  
+ } y s } } | y y y t r u m n r m o r s w r l i r t u t v t x w t p t x t q t u s w x  | u { | z ~    |  ~ y ~   }      ~     
+                     
+          ~ }     
+               
+ 
+    
+    z        x { { t x } ~ y y w y {   | { z ~   t w t s p n m r { |  | w w w w p t u o o u t r o f l i d n i ` k a e h ` _ a d a ` d k n g g a i n u s u  z | z p u | y w x r r w y r s u z ~ w } ~ |   } } y z       | x w ~ } w   ~  
+    y ~   z    ~ }             z     
+   
+ 
+       
+   
+    
+               } 
+  }  z    ~ u |     z   ~ u  | y z u s y {  y { y y s { | z   w l h n m p m | z u s l w s o y o i x t u v p p r w ~ z v u r t u u q x x u s s w } l y | w n m r r x m u s q q x q s { t x v y {    { | { { }    { | y s } r { v r r n o t x v w w }  { u { y v v o v z u w s s v t p n r r i f h h k o g o h d e d e ` b e f b b b e Z W ^ g \ _ i ] \ \ X a e c \ W ] _ X ` c ] X [ U ^ ] X [ ] \ [ R T [ [ _ ^ W \ \ Z b U Z [ b Z ] ^ [ U Y Z W _ e ^ W [ X R U U Q S R V T S Q R F R P M M Q S [ ^ X T P P P P O M V O L V M P Q X S R R S O P U P T T N S Q N W [ R L R S W Y W O J L G O V P L Q R X S R N L K V Z Y V R S W Z ^ ` _ U W S Z a \ a _ a b _ _ ] \ Y ` [ ] c d [ [ b \ h c ] ] g d [ _ c a k j i _ ` b [ ` Y ] ^ ^ d j d W \ Z e b h d _ \ d n k i l u y y { ~ z | s t p z w g c U C 7 *                                                                                                                                                                                          " ) - 4 ; > ; E D L X ^ e h a ` h k k h q j b a d h _ a ` p k j i j p s t t s q u  z y z y { ~ t  ~  { u u ~ z y x x x w w l r k u o r m j n q p r p s o m o v y u s q w t r p s v z s v y t y x                w  y  
+  
+                      
+   |   
+       
+                      
+           
+   x z  w z    } t w { y  ~ |  | { ~ ~ x z z q r v s v t z 
+ ~ x x  v o z r t q x t p i m m i e g p k g j i d f j g c b a f e h i f f m m { r x y v } | p t y | t u w v r ~ x  y x { |  |   
+   u y 
+      y 
+          
+        ~                }  
+  ~   
+    
+   
+   
+         |      
+        
+ }      
+          }  { ~ } | { | x }  } x w n u o y y z | { y s s u r v n z x x | s v u q r s n n o p | q n s x u r } p n n p q l u y x t p t | ~ ~ u m q r z u p n q y w x  x s z u ~ } y x { } y u z v ~  } y   v ~ z y s  
+ ~ | z { | w r ~   w w { ~ w { { | z ~ u z | u y s q r | } p f n o k i q t m i g e j c a b p g _ Y ` ` e b a b ` i h _ _ a [ d [ ` ` d a ^ ` h ^ ` e [ ] ] [ T ` ^ V X Z Y X \ X Y X [ ] a W W V Y _ b a [ X X [ T b h \ X ^ W W T Z \ Y S U R Y T O Q L P O W S U P U V X P M T R O Y Q P P S T S X \ U _ V K G R W V W Y R P X T T V W T N W Q V Z Q O Q J P U Q O M V T X [ R U X T Z T W Z Y \ Z W Y Y X a X Y ] _ a \ ] b Z Y [ ] a f b a f a ` a d g _ c ` ] d e a _ ` g d f j h _ c a c d ^ e g k m g h d _ d c d d b b e k w v s { y z y { t z  { u u q o e Q E 7 + 
+                                                                                                                                                                                       " # , + 3 > D @ D F S T \ e g e o k h o s t r i e \ d i ` d h d g l n q n z { { { x | q o t w } } w }  x y x   } j l s x u ~ r o p w p w s p m n t x x z j h g t } ~ s {  w { t w y z w ~ p r n v x    { 
+      ~    ~          
+         y         
+                                     ~  
+               y 
+  { u { u { { { | ~ z z  { v u { z v w w q u ~ | | y s v t r u u t x v l i k m o j h m s o r m m n t q i i ^ e f c o k a h k p q p ~ w | | } | r } |  {   } x  z x   ~  | 
+   y x v z  } t z  x       ~       
+ 
+ ~ | ~            
+        
+   ~ ~           
+         }                  |   
+   
+ 
+ 
+      
+  |  x z z  } z } w z r w q y x u { u v x u t  
+  s p w  t z { } u r m w t s r m m m r p v v | { { l t { t w w u u s } x y z o q o n m o o t x r z { t p p z   z y t v x x x s }    {  } z   } {    z  {  y } {  w | ~ { v ~ |  { |  
+ z r  w y w { { w x y q r s w y r s q i k j p h q h h c b i e i f b f e d a d i d a X Y e f a f c g ` Z a Z \ _ k Z _ b [ _ ^ [ d c _ _ ] ] a ] ] [ b \ \ a [ \ _ a ] W ] e _ Y b ] \ X T X [ [ X R T W W T U M S U T L T S T W U R W U P Z R Z U T P O P U U X Y R M T S Z ^ ^ W X T [ W Q W T T X T V S T V P T V W P V Y Z R [ Y S R U T Z \ _ ^ _ e d Z _ _ ` b d a ] U Z W a a [ ` Z _ b f ^ a ` e g a _ k f c g d b g d f g c _ e ` h b b h m b h k d a q l d f g c ] c h t l j p | u z w | u y w y } y  v y t w f T K < ' 
+                                                                                                                                                                                       " % + 1 8 < @ > D G Q H U _ ` h h h i s q w v j i k [ X ` g j h c m m t p s z w z { w s p z y y  ~   ~ y     x y | } w w v p w w y z { u i o z x z | t q q v v w w u z r s v y t } x y { y u } | z        {      z  
+                         
+    ~                  
+                  
+             | z {  z v z  z | w ~ z t  {   v q ~ }  { v q v  { ~ s q t x t p r q x n k p k f q o w p s k l x { r { u m h h d g a n l i k o p m n {  y v |    y | ~ } | | z x    ~   z x ~ y ~ u u | y   
+ } } }             
+  }                   ~      }   } 
+   }     
+   z     
+           }      {                 ~  { v { ~ {  y | q z | ~ | v t w z s y v | r   z | l t s z z y u u u o w v r o u u r w u u v { x x p u x q | }  x z w w x  n p q v n r m p w t z v ~ ~ }   z z w } z z 
+  y ~     }  z {  x y w  } ~     { | ~   s m y  x ~   ~        | }   { x z | { v v z t u o r t r u m l h m h d h d a l n h h s p p e \ c g e h e d f a d i _ Z i l h e c a [ ^ b k f a f e _ e i ] c c d a c Z Y [ e ^ ] d b [ [ T ] Z Z ^ ^ S ] _ T U U S \ Z V R T Q S Z Z V ] Z V [ U Q Y T Y \ W Y S \ R S X a ] Z ` [ ` Z _ [ Z Y U Z U Z \ Z W X \ U X Z T [ \ X T Y V Y \ b Y S T \ \ c ^ c Y ] a g b \ c l j b e a a \ _ ^ _ ^ h c a g a Y a g i i c i l g k b c i k h f ^ e f d f i i b c j l l j d h p k j k k h g h r z t p q | { { u z | { x { } } t s | } q b U M = ' 
+                                                                                                                                                                                      
+ ' % ' 5 7 ; = D B O O S _ ` b a j f l s v w n o i e h c e f g j n q o p s r s z w z z x } z } t u w    ~ }  
+  z   ~ r { s z  ~  |  x s t { t { r x { t z v s u y x y t t q w x { y r v t  } w { 
+   |    }          
+    
+                               
+     
+             
+     }   
+ x              ~ x  | w   y ~  |  z x }   } ~  {  | v z z ~ } ~ p r x   s q u q h r l n p p t v t p r z u w p t p r i c e e b j g h a k p o w t x u z y  ~  z }  | z t t  
+  
+    }    } y t   }    z }    }             
+   | ~               {                    
+   
+            {   
+   ~                
+    
+      { | | z  } z |  ~  |  w t z x | w s s q w  ~ { z y i { q l r v t o ~ y w w y t t p x t p u u | { z ~ u s r g n r l q x q k m v } | z z | ~ ~ }   } z   w    ~   |  y x  } | w  } }    }  z { | | v t t    } }      
+   ~ | y   x z |   | 
+ y q w ~ s x x x s s n e j i g i h n p k q p p h g h o m s k h d \ e e ` _ d l i l j b c e b d d g f c e m h a c e g e _ [ W ` c _ ^ ^ _ Z X Y _ \ _ f \ Z _ [ W X Y S Z ` T T M P R Y X W a ` S ^ ] X W W b ^ Y T M Y X _ [ \ ` \ c ] \ Y Z _ Z [ W ` _ ^ b \ Y ] b a Y V Z X Y [ S U W [ _ c Z Y [ [ X [ \ \ \ c e c f [ c c d _ d ^ [ f h i _ ^ k g j a a b g k j l g d g f b g ` e o l h ` k k h l e h b g j o p q o m g i f n s v r o q  s q x   z t z  w w { ~ { v p } { l ` Q F ; * 
+                                                                                                                                                                                        # % - 2 < < ? D H N U V ] h f f k j g l n v v r n n i b ` g k g m r m i r t { { { x p t |  y | z }    }    
+  ~ ~ { s { |   w {  ~ s s x  | x y }  u v w w z w u  u t v | } } ~ y x x }  | }      
+     ~                           
+      
+      
+     
+             v  
+  
+    }               
+    ~ 
+ w x        x v z x  {   } }  z  y { u r n t |  } s q v u v x f k r v { t m r x { n s q n n t q h h e l g n j g d r o p p u z        ~    }             ~ y   ~  
+          
+            | 
+                } }                             
+                                       y {  z y  |  { t } y u { ~   p z n v t v w y s k u p k l l { q s t } ~  z | { w y u n t r w } w l w s i j k g j s x x x p u w z } | } x z   }    q {      | s u   |   } ~ }   x |  z w y x {   |  { x z z t  ~   | }  
+ 
+   z   { } |   ~ y     { ~  z z t q t s m r p t v m q s o n t n j a g r m m h b h d e g m n f g g l i i m q h h j k h b l j k k ` Y _ a b e f c ] a a ` a ` a \ b g W Z Z Y _ c e X ] ] Z X ] \ d b b c _ ] a _ Y ^ b ` V Q V ^ d Z \ \ X ] _ ` c \ Y Z \ W [ _ ] d ] Z ^ ] c ` ^ _ ^ [ \ [ W Z [ [ d g h _ Y ^ \ Y a d e d g c e d e b Z a ` b g c k c ` a ] b i e n q l i q c b p k k h k q s r e c h u s p k n o n q s u r r r q o ~ { t z s s v | z y  z  { | }  v z ~    ~ x y p a Q @ : - "                                                                                                                                                                                     
+ !   " ( 5 < = = E G K U Z W ` h f g h i f k i o l j g f j ` h d h r m t j n r {  ~  y s } } z x x     
+ }     
+ } { }   | | x x u z x y u w x u }   s r q o x s y ~ q s u z | |  { t t w  |          
+ 
+               
+                          
+                          
+                  }   z  
+ ~ z   x    u y ~ ~  z }   t r  x t { x v { } y z r u w x w s k v { t m e t z p y { | x t y r v u w n d e g j m t s t y w | ~   |   z  ~ y      }   }    
+  {                       |   }        
+         
+        {      
+ |                                                  x |    } 
+  } z ~  
+  { {  w s  } x q z v } w r y y t t t s r w q z z p u }  s z z y x { v u u u s | x q u w v u n l p p t v t u s x v w x v t ~       }    
+ 
+  y u p {  {   ~    x 
+   x  | |     
+ z }  } t  {  ~      { z ~ { |  ~      ~   |      | ~ w x } v o s { u q v p t y u s k m v l n g f n j f i p g c f i i k g f k o j j o e ` r p g g d f p j c e d ` b h h e h b _ d ` e Y [ _ ^ ] Z Z W R [ i [ d b e ^ ` _ ` ^ h d c [ Z e \ U ] [ ^ X Y ] d ] i a e ] ^ g b ] \ d d e ^ [ a ^ e i a g d Y [ _ ` a _ b _ _ ` _ Y _ d g ^ a g f o j l h g l a g i f j p g h i n e c s r q o q j n i j u n u n i w v t n d h m t p q m s r n q s y r t } z   w r s w }  z { ~ { u o {  y z ~    ~ | u w y e ] H 9 - !                                                                                                                                                                                     
+  # ) - 7 ? D I H O K R \ a b b k j i m m s t q i k n g j j i i i n p n r q p {  
+  u w }   y y  y ~   ~   
+   y { x   z { |   w y |  t | n s { } { ~ t n o { z | { }  z z { | { | y {  |                                             
+                                   
+              ~ } ~    |    z }  z |  x 
+   
+ } s x w w v y p p t t s |  x r w z p x x u p n s n o h r q r t w x v q t o t t x l g g f n s q x s  r n u   ~ 
+ | | } } x y 
+  
+                   
+                       
+                 
+  
+  
+ 
+                            
+          
+            
+    
+      u z  |  } x  y y w | w t u s s s q y } | x o u y w } x r z  { ~   x m o y } { t y |  
+ { } |  }  {  w w u q k u s t w r v x { ~ } }  }  }           v  y z    
+  y   x   | w   }          
+  {  z } 
+  }  y y } { 
+ 
+  } z  
+  {   ~ z  z ~    | v y z }   { v w s s u u n p t s m k r l r r j m o r p o n j o l n o d o i f j l v p f c m h s v k n j b l g b e i g j j ` a a d h e b d X \ U ] j e ` c b b g e _ d e b _ X a g ^ Y a ^ [ ` Z ] b b b c h _ ] a [ ` _ ` b ^ e Y b f b g o g h Z U [ a _ Z ` f b c ^ ^ _ n l c c ] a g o m i n o p o m g m o k k j m q n o t n n x t m i g m k u s q m p r j j o q r y w s q r r   z } x ~ }   w { w r x   | | ~ y v ~  u r |  t t o z w y  o _ M 8 .                                                                                                                                                                                       
+ ' + 0 9 = > E L J I R a c d d l q r l j n o n p h i i e g h j l o q i q y | z { } ~ x w   ~ }  
+  y 
+ u ~  ~  ~ z x    } | y z } w   v  y | q t w u w u q { { { y r y z }  z   v  ~ {    ~               
+                         
+          
+              
+   {                     
+ 
+   } v    z  | z       y u  x | z  s s s r u o k e l x | ~ | | z w u s v r p q t m q m n r y q r q v u m p q i m ~ m b m p i m r z s  s s w x    } }  ~  { z   y 
+ 
+ w ~  ~    
+   
+   z                        |             
+                
+   
+    
+  ~             
+ ~ } 
+ 
+   
+                         ~ | z z u t s q | y { } x z {  | { { | } | ~ q s x z w t t h t { x s y { x r   { y w ~ z z } { x  | y    } r | y u t t x x r w y z | z   |        }   }  { t }       z } } v z 
+  x     
+    ~ }    z |   z  |  z x y      } z { |    {    w   }  z u y      { | w u x r t u t u o n u q p n n s l p p s p m r k i p h r r g f i t l i l g e q s l g a e h e e j q j e i j h f c h h g _ \ b c g k b f e s l f b b e h [ _ _ d f a _ S [ a m d _ Z b a d d [ ^ [ \ e d g ` _ f d g e h e f ^ a \ c _ Y a Z _ m i c b c ] j c ` c e ` ` g h k p p o q k s l l j m g h x { q q n p p o o l p m r m l q p { w v v y s p p v w v u { x { | w { x x o u z ~ } x z ~  w u } y v t x v p {  z } |  { ~ | l [ F < /                                                                                                                                                                                          % ( . 4 7 ; ? H J N Y \ d h i m q p k h h l o f e g e d i ` k f l r j n x v | { } { x x | z |   
+     x   z  } w { y v z {  } y x  { r y y y s p t p y r t } { z k s y y } y | {  t  |  } w ~ u ~  {  |          
+   
+                                                                           ~  z  }  ~   ~ ~   z w  {  s u u r y o p p t w r t | { v ~ } z m v y t q p s x t l o p m s t q g j m s s o o u { m h h f e e h n q r r u { ~ | }    
+   {    } ~  { y {   } {     
+ ~     
+  
+               
+          
+     
+             ~                
+           |   
+       
+    }  }   ~           
+  } { | u z r  y r r t w t s s w y q y |  |  z t v r s j q v w o ~ | z u w y t u { } z v m r r r r y z {  | s r z t } x ~ v z   z { z }  | w      { 
+   | | }      | {   s t w     | 
+   w  
+ 
+  | ~ y | {      ~   u      ~  }  |   y x x ~ | y u |  }  v ~         ~ z u  y ~ { z u } w r o s v x p t w u t p v m n r v q p h n n l n v q o n i i k c a m c d m o m l g i g r e k o h g c a ` a i g l c j a d h a ` h d e c d a g _ Y a b j n ` ` a d i c \ e b \ b b [ Z f f _ b c g l c c ] [ _ d ^ ^ \ ] p i c j i k i g e f f d h m k k k f h l v v | q u w o r z u r s s r q q s s w p n u u r q x } o w | ~ ~ z | |  w ~ x w w r w |  x s w  x v r s | w { { o z x | x z y {   ~ ~ } { r e Y G A -                                                                                           
+                                                                                             % ( , 3 : < C H I M R Z k j q n o s u t h n n m a j g b e \ f g j n q r t z  z t { | x          | } 
+ 
+   |  { y x ~ z  w ~ w v p z x r s y t u r n g k o t u t u u x x } x z | v x r |  }  { }             
+ 
+  ~ |                
+                                                         
+    z       } } {  } z    s s m w  y t s x v w | | y y { ~ | x w u q k s s r x l q o l m o n k h k q m n m m d l n m k g e f g f j r y ~  y ~  
+    z { u s  y v |    ~        |    ~            
+               
+ 
+            ~                      
+  ~          
+   
+       
+            y       
+     x { s r | ~ { u p z t x u | q s x m x q {  t t w t t s z | l u t x w q { z x r y { u n r l p p z x  
+  } u ~ n v t x v v }  } y t     } 
+      |         } } t   } { | {   }   
+         
+ z x x        u  }  }   ~ 
+ {  ~  } z  z z | { | { ~  y ~     | {   z | |        { k r s t | y z | s } z { t l z w r x | x m m t w x u m q g p c i j f g j o i k k t l l d j i j f a Y ] _ c g h _ p c b f f a b e c d ` c b \ \ U ` d h j g b ` g j ^ c [ d j b X \ l e a ` g s m j i e f g l i h f d l l k a e n j a _ g s l o f p n r h j l s w y u u v u ~ | x v s w u t t t x y z ~ | x ~ ~ t w r z     
+  x ~  w u v t w }    
+ ~ p t z z { } w t s y z y { v } y y r w y } x s e ] K ? /                                                                                                                                                                                       
+   ! ) , 2 = C @ A L T S ^ ^ g v p q { y w u m p i l n i d \ ^ e g f k i w w ~ z  |  | { }  
+   }   }     ~ z z ~ } x  {  ~ z t z w z | y k q t x ~ v q o s s y m z y y { x z |  v u { u } } ~           
+                           
+                             
+               
+ 
+          
+  ~  ~          z  y w ~ r u r s s y u x n p y u x v z x q o p y q p p q u o p r o m v n q s s v r s m l l f i g g k r i h c d o l o v w }     y }  } x v z | { w  ~ {                           
+               }                                                            
+      ~  ~     
+     {  z w x y  { | z  w } |  z { s m s p s u y v w t  w } | | z  w z  { x v v u t u t r q x q t p u y x  ~ v r m p p m q w } { v z z s v y   ~  
+    y y  
+   
+ }    ~       | |  y  } ~ |   { {     { x }      z  | w   y y u     { } z y ~  |     
+ } | y }   { t   z       
+    { r ~ ~  x u z ~ v z w y r s  | o s z w p q r w m l o m m m o p n o q n n h j e p l h e i o e e \ c [ ^ e ` c h l h a m j b g d g j ] ` c ` U \ \ k h h r i h f f _ _ _ g h m e _ d d f f n z u m c _ ` h f i e d ] d m l c e p j d j o l r o s y x u q x o x w z ~ { z u z y z  ~ y { } z  z z ~ z x p | |  s u  ~   z } y v z } u u y | y z ~  z t ~ s t z }  } v w  | v s r v x y y v w x  | j \ V H 9 +                                                                                                                                                                                         ! ' - / 1 @ B @ J O U [ ` n n q r w s o l o r j t p l t o i c i h n m p  z s { | { |       x  | }   { { x { |  x v u u y | | u t 
+ } u p r w v   x n m r r z h q u ~  t y   ~ }   x  | |     |     
+    
+                     
+  
+                 
+                                  
+ 
+ }    }   
+  ~  }    ~ }  } z  v z r v m t v u p o  u q i s | m j u y r t r t { t r u l b r s u o p q r m n r l l m q s i q h h d j l l r l z     { z t | {  x s u } y   z 
+            |            
+        
+      ~ y  }                    
+ 
+         
+     ~  
+          ~   
+      }     }     z  z           w o u y } y {  w   ~ y ~ y { j q { o p y z s s x { w {  r r x u ~   y u | | | v { y q r v | z y ~ | x t r q z o j n z o y z p   | u s y   
+ ~  { | |   
+ { | ~ y |   | z   
+ 
+ x | x x   x z   ~ z       {       } {  r {  
+  ~   u } ~ | z |   z  }     ~    {  v } | z   
+    }  }     w  }  } ~     z x w  z w y p { y | { t s s x u q o z x x x { v s s l n h j f o r i i _ g ` b g i j j k h n p l i a d i l h c p d \ ^ c m o d f h h g i g d ` g e j e g h e k h o r w l m k p c i n ` c g c e j p p l j l p o g s m y w } | t u p v z {  
+  x v v {  y z }  z z  v z  y j }   z y { ~ ~  z } { { | } y y } ~ { v y z z w } } ~ { ~ {  | y { v q y x y  w u x  w   n b X G = , 
+                                                                                                                                                                                      
+ " + 1 1 7 8 @ D J J U Y Z a l o t w q c g l g e m r n x k d o c a c m i y  x x w w     }  | t  |  w z u z z y   } t t y    z { } } p o r w q v u w o p o m o q r x  y w { | | v z     { y ~                     
+ 
+           
+  
+                   
+                                        }     } x    } ~ | z y { r x q s r u o n q w t g m i q t p n t t r o s t y u q t l l n u w q n n o j i j i m m o q k n d m n l m n p m t x } z | { y z |   x x     {              ~    ~                 
+ 
+       
+  } 
+ 
+    ~        ~ ~        
+          {  
+     ~    
+                     }        
+ 
+  | | t | w } u ~ { x }  | r } t x p x } w s s p o r x t y v r s p t {     w y y {  } y | w u y w t z y x p g s v x r w  x } q s y  | n q w         
+ 
+     ~ x x   x }  } } y         {         {          y {      { u t   |  u w s |          z  {   w  
+        z { |   |       |   v     z    y  x } y z z | z x y y z  x r { p n p t t j w t v p p h i l p o s j o o l f d f d d r l j q k h i g n o j i k p q j m f i g h q m i g c m j r k q m q q r o j i j j l i k n r o p j o s w w o s w z ~   v y   ~ |  { z t y   ~ t } } s | | w   } u r z }  x  ~ |  }   x t v y }   } y x | u x ~ x x ~ ~ v v r s ~ z q s u x z { { y  z   o e ` L < , "                                                                                                                                                                                      
+ " ( . 2 4 8 B E J N U Z ^ c g g k r n i f f l f l q t n k o q ` j k h m p y w u r x y } 
+ }    }   | x v } | ~ v w   s u { ~  }   z x l u u p v w p v q n q k q m o w x v | x t x { ~ ~  u } 
+ ~ | }      }  |  
+                      
+    
+             
+      
+                                          | | w     
+ w y  v n o } v p n u s p q m p k q r r t x s o p k k s u q r s n l m t m r n n t p e i g k r r q n o o l k k k j i q p w z {    }  x 
+ |                 |                 
+                            } 
+      
+ 
+     ~         
+                            
+               
+   | z w ~    |  { u   { w u { x y j o w ~ z r x y u n t  { } x v y u | x u x z }  o t y z x | u w y u u x y y x  | x o { t   x z s y     | y    { |    x {        |      | ~ ~   { y } } | } { z y }         }     z  x | | }   z v {     |        
+  ~ y     z    
+ | }        y     ~ y       |     } ~ ~  
+ }   } | { } { | w u y u w s w ~ u s x r i l o q m q m t n o s g g q t x j q m m j m n h k r l t v w o m l j o k v v s g k m u m t q u x x ~ s r p g n p r m r o w p r z r x r o v       z { z u u v  x r |  { y } ~   ~ ~ |  w o z { v { } ~       { s x    { | z y t   { u y } y z x u { 
+  } s u {  x }  y u { u l b \ J 9 ) !                                                                                                                                                                                      ! # $ / 1 4 > D N K O U Y f c b h g i m l k f k j p { w g j o k _ f t o o u }  ~ ~ ~      ~    | w  }  x x { z y { y u   } s z  v z w q p w { } x | y } v i q m o v y t  v t x ~ ~ | | }   | y | y       
+  ~     
+   
+             
+                                                   
+               y y { y     y z  z n o s q r t y z u u t s r z o k p o k o m p m s s | o n t k r s r r q o k m s n h o r o s z p q h l p p j j o x w |    { } y z z                
+         ~     
+                   
+   
+        
+   
+    ~      ~                                                  |         ~ z w v   s s q u  w  w s v p v r w u } w u n n o l n t   o w w v w v y  } x u u t w x y z w w } } v v s s s w t p q t v  z x  | {     ~ ~    |  |  
+       
+           ~    z  }   z u u z }     
+   }     }  ~ 
+  x ~    x ~    z z  
+        z { ~  { u {   | w }        | 
+    } }       }   ~ ~  | |   
+      
+ z    | } v z ~ w { ~ s x o e s o u v r w k p t p p r s t e s u s s r m m p y | | y r u w u x t z z | s p p { u v v x x v x r u v u q o r r q y  | y w w r | z z w y    |     ~ x x z } x  {  ~    }  }    s   z    |       | { ~  
+ { { t z   y v    } { } x t x } |      } | z u  x l b a K 6 *                                                                                                                                                                                       
+ # ( / 0 5 > B I K P W ] e k k j g j k k n o l l o r o q f c e a h v t w x y 
+  } y   z ~ z | x   t z   } y } x | q x z }  | z t y | z x w x x y   } s q l v p l r t | u x {  x | z z y z       | }  
+        
+      
+                  }                     
+            
+           }                          
+  v s k u q | v r u s w s y t l s o l q o v t t q s y u r { s t o p k p r p t r r y } r i t p s p p l v r m r n o p u }   { {  w r t } 
+ { |   
+                  
+                }    
+            
+   ~                       
+   
+            
+                             
+  ~  }  v u v { t r y x  y w  | y w } | u n z | | u p w { q t t t w q  z u t x w v  } {  v s v v u r q z { } } s x t p o u r q z } t  | | u ~ }    |  |   {  }       
+  
+  
+   }    x | y   |     | { y }         }  }   ~ } w  { {     |  w z       
+ y      x {   } {    z {   
+     }   y  |        |  |   }   y | {           { x z w w | s q j s p o r o t m t q r t z t t x x { v u r r y | q p l y  { w u r x q u q z { q p t w x  y s r {  t x s w { } w p o u  x t m u y y | ~ y }    ~ y v {  |  { } | 
+ w | t t } }    ~   z z w  ~ |   
+ 
+  w z ~     |     u     z ~ ~ { |      
+ } | 
+  {  u |  
+  u s _ c V ? / 
+ 
+                                                                                                                                                                                    
+ 
+ 
+ ) , / ; C ; D H P W c p l l o e n g q v p s t u y q v e m e g n s o w v p u   ~  w {   w w | } { { | y x z y z | r s x } { z t r } 
+  ~ w { t }   y v u q v s  } } z y  v y x {    x  
+       }         
+   
+           
+                                          
+                  
+   ~  ~        
+    {  ~    w m n s u v m s y ~ } p q s q p l q o t t x w s z s z z s q r q l l q w o v s r s s s s v g g l p j i g p v | x { y u {  { }  | x  }   
+                    
+              
+                                             
+               }              x ~  
+      }           | y t t s p s z  } w |  y z u   r w u x o x y z ~ w p w y v  z z p o w u u u  } w y { u y u w z } w | { x | v w v q o r x {  x y {  }        y }    ~ v   ~        
+  |  z | ~ 
+    ~ |  } 
+          ~ 
+    { {    z     ~ y  ~          
+ 
+  }     ~  } |  } y            ~  } v 
+      } y {  ~ } 
+  ~ {        ~ |  ~  z | u v  w t j t  s r q r u y h u r   y r x | x u t t u t v y x y q y w x x | x o p t v m o v w x { x z y x r o t x w | r j h p  x  y j m s v x ~   } x  { s z   s z z  } } v   x  
+ 
+      |     x   
+  { | r  y ~   | }     } } }   ~  | ~ z  { y  w  | ~ x x x s w {  r r v e a M ? - 
+                                                                                                                                                                                      
+  ( . 4 : 9 C D O T R W g r f q j p m y v k p q r x r t o h e i q i p r u s } } s   { }   { u {  }  z s s t q s z t u x  q p r z |   y z u z |    { |  y t { z  ~ ~ { }  v x  { u }                        x 
+   
+    }  |                        
+   ~ }                          
+ }    
+        }  { ~  
+  }  | x }  { w x m w z y r s u x y o w z x z t x t v w { v z x v p  y p m q g m o x l s o o q u r l r k n j j ` i i m o s t s u u {  x }                                                
+        |   {                                     ~ 
+ ~  }        
+        } x ~ 
+      }      
+ | | ~   ~ v x x } {   x s x  u w t w 
+ z s p k s ~ x u v s v   { s } v p u z { v y y  |  
+ y   u x t q u w y u u t p u t s ~ {    y  y        
+   
+    | z 
+      |   ~       ~     ~        }           | s | {                 
+         }                z y ~ } |  
+ z } ~ |     ~        |     | t | 
+ ~ u z   | v s w t y x r y u p { | h n p y  z s z y y x u } u p s v y u x  s v }   | q ~ w t z v s y {  w q r l o u u v v ~ n o p u y w w s m m { ~ ~ y u t }  | w t   ~ ~ }   ~ { y w y v      |  y |    |  |   
+ x x  u ~  ~  ~  ~   } }  |    { ~    { ~ w  y { x z 
+ y | { v { w s d Y I < ' 
+                                                                                                                                                                                        " ( . 7 = > E G P S Z ^ f r t m l k l r v n s t t t x p q e k n s k o g l q x r {   x  } ~ } u } | v   s u { t j q x w u v y { z ~    z u t  z { | ~ y | | } y | r  x z  v  x  | | w v { }       ~  
+         
+   
+                           
+                       ~                      ~         { { { |  
+    } y | z t | t s ~ w m o p r s r t y { z y { p t r s { w w s v r j h b h t s m v p g p k k p t s k i j m o g d u v u y | w y v  z      ~                                          
+     
+   z         
+       ~                
+        
+  y   
+  
+         
+                      z ~ ~    x | z  w x p q | r u v } { x y s r w  v x y  | ~ y } z y v o p y w y {  } z y x { u x s x w s } y | x v l m u s  z w }  ~ ~   
+         w     x v       ~   ~ 
+   z       | y y  {   z  |  | |         s w ~    {           }           |  
+       ~         } z ~   { }  z     |   | x u y w }   
+ 
+  z  
+  { |   
+ z } z x { q r x w r  w k n u p w o w u y x t s y v r t t z | |   y y  { { w  z n x t s z z |  o x s n u z { { ~ w m r p p q v q i l s t {  r u {       ~ y   
+   u  z | | y  } { q x z x y  | } ~ y  {     y 
+  |   z |    |  |    x | } 
+   | }   }    y s { y  } t o ] K A *                                                                                                                                                                                     
+ 
+ ! % ) - 7 ; ? D H J S ] ` f s u j o p q u t p w { x } t t u k q n h w g b l n s w y  z | t t |  | } q x ~ s s v p } z r z t | t  w }  ~  } y w s  }  s v y v x w r | u x q  | j x z | { y x x  y { v x s z x u     
+   
+    
+            
+    
+     
+                
+                    
+                          
+    z q ~ v y  { { z z  z t t u t v u r t r l r y } w x t m k p s r m m x ~ p i i k n m v x w w q x x y s v t s m q o j u { t u x z }  x } ~     
+                             
+                                           
+                         
+  }                            
+ } } z v { w  p |   } r r { w q t s s x y { x o p w l q w    u  { o s s s w u |  ~ | w | w s t v y z w z x y z | x s m u w  z y t }  v }  ~ ~ 
+  { w }  
+      z      { |          
+   ~ 
+     ~ |    } }  }  | 
+  
+    x x |           w  
+ }    |       { | z ~ 
+        }  z {            ~  
+   { u ~  } |     
+   { z           w z x q w q { x } s v u { y y q o z ~ | s p w y t p n r t x w v w u } u t v s t u x { s z v z  v } v t n r t  u  t q s m x w p w n v     }  { { y ~   {    
+  
+ }  | | w x z  w t } { x |  v  | y    | ~ 
+   
+ y |  z { {   {    ~  s z { |  }  t |  y ~    w | { | w z n X F 8 , 
+                                                                                                                                                                                    
+ 
+   $ ) . 4 8 B B M S U [ h b p o m n n p s p s w v w s m t s m u s l p n s s p l r n y  | y x y ~ } w s t } w ~ u t u u }  | x w y x  | | x | y x y }   v y s y w ~    s s   v { z { z x o y x x v { ~ | z u   ~     }                                                                        
+            
+       { t r u v r }   y q u v v u n t t q r q u o p u { x u p q p r q o r o p w z w j j l n p r u u y w r n l x w q y r n q v w q p v r v x y x y u {                                  ~    
+           
+           
+                              
+              ~   
+  
+ }               
+  
+  y { ~  } ~  v { | r u { x v q u n o s w v q u x  u x  w t r }   y z u t  ~ y |    v z x } ~ x  t |  ~ t p { v t | q s o s z { r z }  t  
+  ~ y ~                
+   
+  
+                ~ z { |   ~       |     
+ z   }  
+    } z }     
+  |  
+  |    { z           |   ~ ~ w |    {   
+ { ~  
+    ~  
+ 
+  y  {        z { | { z  | ~ r y u | | s t x z t r u w  ~ }     w s r w r r o t z x x y s x t z z q z x m s  t x s w | w  w n p x t } u { p { { y r z } m k y | } }   q s w  } y      } ~  }    y y x { { |  v   ~    ~ ~   | y    } { { { | ~ t       }  u t x x    u {  t    }     | r k U E = , 
+                                                                                                                                                                                      
+ ' - 1 7 9 > F M S R T b j i o m p m r k r u w ~ t q r w t u v u k q o v l o l t q v 
+  { } }   { z ~ y y  s s y x s p r { y  u |  y n t r y t v w ~ {      | | z w p w w   } u t u y v x v w v w  } }    z                   
+                                                                      
+   
+ | }  | | z } z u | ~ v s p z  t x s w p k w { q m m u s v s r o t o l m t t x v t q j p k l p m q v z s u t u t v w s i p l p s n m v u y } u x { { ~ } { z                                                
+  ~      
+        
+                                
+     ~   
+        
+            w w   
+  { } r y | ~ | | ~ z v | r r | t p o x  } x w p u u v u {   { w s      ~  t } { } } w x y    w w w r t x o m q t x ~ y |  |  
+  z     
+  {    ~    ~    } {        |        x ~        
+ } z   ~  | |       
+       ~ y } |  
+        
+ ~ y y   }    
+ 
+          }      } y           
+    |  y }         {    x y s t  } w w q | t w m t y |  |  } } | q s u ~ { z n p z } } { ~ v i q x w r w z  v v t y  }   | j u y t w v u q y y } v w x l t y z z t { x u  ~   |  z ~    z x | { y } 
+     ~   z    }   y x } z ~ ~  ~ z w  { { | x } ~   ~ v w    y t t  } }       | ~    y x d W H 7 ( 
+                                                                                                                                                                                        ( . 3 7 < A E K P U Y ] b j j m u p t p v s r q r x { { |  x p p k p v e i q y | { z z   } u z  ~ { z  u x { z x u q z { u  { y { z t p v t p q { ~ s y     { } ~ y v x t v } ~ y x s {  ~ w t u y x   ~   {      
+     
+         
+        
+                                                            
+       
+  |  ~ r u v }  x k u x m w u s i k y o q p i p s w k l r m n m e o p t n r i f n k o p v r w r t { u u { x q o j k m j m l f s w | v u t x } y y z | |                                       
+                          
+    
+                                        
+              }  }   x x y w q  {   x y u x u { | u w w x x s x { q x | z t w | { v } w u    v s u u x s z y u | x { | 
+ | { u x q y o s t v y y s {  {  {   }      x ~  
+ ~  |     
+      {     }                { | s    } |        
+    x   ~    ~ |       } |  |       
+  
+   | 
+  ~       
+     | u v  z 
+    ~ 
+      |    x x { |    y      u { x x z x z v | ~ | ~  v q z  x } x u r { w w t t { t s y | y z x } { q o t v t v t v z y |   }  t q p s o o q u s u p u v y { z  y { } z     } }        } z {     |  
+       
+ 
+ x } v 
+   { y  } }  y z  { 
+ |   { r y | {  ~ y w   } ~   |  w x y  u { x q a S E 3 , #                                                                                                                                                                                       ( - 6 8 @ F H L Q W T T e n m { n o q t u n h p k {  } z y t v  s p p h d v s z u u 
+ | x  z z ~  u ~ | u z { w v p p t y w {  w  v w { r r t t  ~ | u { y  | y u  { u m w x w t  v z  w  
+ | z | y  
+   
+ y               
+ }  }                                
+                                    
+      
+    z    u y } ~ } s r u q s q u x u r t r m j s s q { s l k m n e h p q ~ s w j f n h g f o o p p t } | w u w t m r w y j k g m g p w t } ~ z s w   { |                                       |        
+                               
+                                        
+  
+   ~     {  { { | ~ ~  z y s u o y  x u y y  t x | x t w } v x x } { } x y { 
+  v w ~ } } y  ~ ~ s ~      z r u t t y x p m l r z   | z  x s    {   y       ~     
+ ~ } y z y   ~  }     
+         |   } v    
+           y { w }               |  ~  }       {  
+     
+   }         ~ 
+  { ~ |   { ~   |      
+  }   z        
+ } ~ z { } s t t y y z  v w s   y r y x t s t { s t q q i u | t } } z } y s x v t z u p t r l u r v v v o w ~ p g | w r o f { ~ w u q u { y ~      |     y y  ~ 
+  |  v x  {     |  w    } u 
+   ~ y {   ~ u {   v }   { | ~ {  
+  } v t   | z ~ z   | } u x r {  o e W G : ) $                                                                                                                                                                                     
+   ( . 8 4 : H I L N T [ \ c k u | x } y q p m o t r w |  ~ { } v z z j r i p v t p v   x x x y y {  | } | y w |  y x y w p z w { t     x r s y n z { | y |  { }   { x w u { r q u t r q w      y     } | x v              | ~ ~     
+  
+                             
+                                    }      ~ {  
+ } ~   { w u v s o w u o s x x k j r y r p o t o h k o n w y s t t z s j n g g h h h n r q { z x u z s s w o m l _ e p n m r p y  x w u   x          
+        
+ }                                            
+                            
+                                 z    
+         } w r p s { p | v z w x w s n u n q  t w } 
+ z { x ~  w { ~ ~ z 
+   ~   ~ z y  y    x w t s u s x x r s s } x u w y n t {             u  }     x y }  y z } t y y }      |   
+ 
+  ~   |  z { ~       |     } z      }   
+ {      ~  
+  
+    
+     x ~         { 
+  
+  
+      
+        t  }          | ~ 
+  y t z   } y o y { r w p k v | | q t y z v y q y z ~ t o y p o s n w } { } t w w z { y y y l q x | x u u q u r j l x  w p l }  v m m p u s n u w q z s r { }  } |    { x { } |   w p      
+ 
+  
+  t  | ~ t x }     z  |  x { 
+  z  }    ~      u s   z x x  |    u t u } ~ n _ O C 8 - !                                                                                                                                                                                     
+   $ / 5 9 = F @ I T R V ] _ k q | t { z y | j l v r w y |  { x | x u r q q p p y q r y { v | v z y z  y { ~   z {   w p { z y s q t t }  y t t x z |     y y ~ z | ~ ~ z w s y v t t q r ~ |   v w    |  w } } y     
+    |           
+        
+                      ~  
+   
+                                } | |    } | { t |     o x v } w w t x k m s m h l p p t p q s o i r s t t w s r i i m p k n p f o l d f l s m r t x w h g f p l d o k h h m v w n y y s {                  
+  ~                         ~    
+   
+                                                            
+     
+  
+   
+      
+   
+    
+ 
+ u ~ u y x p q y  | v z { z r v m } z z x v s    } x y v w y  w y z   }  x s z   ~    y { n u l u | y ~ q t {  q x { t w }      ~ x  | }    z x    x z   z t } { u r v s ~         ~ 
+  ~ } z }     y            
+ ~ y   z         }               }    
+         
+  
+ ~ } |  y   
+            
+    }   
+  { } y ~  { w s w w o u { r l t v t { q q v  ~ t { { w w w z w r u u  | s { { x x t v s n g m y v o y x ~ o k t z u q p r u  r p u r p k q ~ x r p r h o s |    
+ z ~ ~    ~    ~      
+ 
+    x { ~ } | }       
+  }           { | ~ |  
+ y ~       }  
+  y w y u ~ u a R F ; 0                                                                                                                          
+                                                             
+ 
+ % , 4 3 9 ; B H V T U c e k q o n x q t t p q x { y z u u  u u r q s o o m h p l u p y { | y x x w { w w x y w  y } y x r z r x w r p k r v } i p v  s   | r }  t w   q z { x  } x t z x y z y u w }  ~  y w u t w } z |                 
+                         
+      
+  
+                
+    
+                y     } z } w w   
+  r  z  ~   s q l q x y p n l q { r o q n l t w q o q p g i q p m i q l e j j d l j u j o r p l i l q n d j k k m v s s } w z y                                     }   
+     
+     |             
+                        
+      
+ 
+    
+      
+    ~           }         
+     s     w x u } w y y |  z w r  w v y y  { ~ w z |  ~ | } s  u {   z p x { y x  z p r t o y { 
+ | v { }  x x s  | q x  y  z } } ~       ~  z  z      }  } |   ~ w  y t }  
+ z    
+  w          ~  
+  | {          {    ~   { y      z      | } u   }  
+  
+   z 
+           z   }             {    
+     }  y z    |  ~  y v x  u x t  y w z z y { z q r ~ y { z x { o q x x x s y w z m k w z o k y w r p v } } w   { | t y | t s v } x v p x v r s v x  | u q z y r v |  ~ } ~ {       ~ 
+  }       |  
+            ~ y 
+  v      z     z } w x   z   
+ } } |  z   v  }  w y s Y S B 6 ) 
+                                                                                                                                                                                      ! % + . 6 < = @ G R Z \ g l p u t q u v p y y { z } s s y x  | x s m t r h c e j h v p r { x  y s r s q t x x x y { v m l s x | t p z n r  | x n w x z s y   p t w w s | } s w t w   } r { o {   { s { y    x } s r w { w }  
+          
+  
+                   
+                                                    |     y ~ x }  ~    
+  w  }  y w x r ~  x y r o w u q n k o l s x u w n s j h l q p r s m n m l g d k q j h k o k o h k r k e e p h l h o {  s v |                              
+       
+       
+                                                  
+       
+          
+                
+ ~     w    { z q z   |   { u m q s q x } ~ } z s { v x  z ~ w x u s v ~ s t v | x z   o u y x w  } | { 
+  | y w o { r u  x t u x } } } {  } { 
+       ~       { }      y z z z    ~         }      
+    z        
+  |    | z 
+     }    x  
+  ~  }  ~  ~          
+        { y |  |      
+ 
+      |        
+    } ~   {  ~ |  y w w w z z z } q q w u z | s u x y } } ~ { u {    y p v u r q o q t q s x s  x x v v x w } { v w  y z z { { s o p x } r n q u v u g j t z | 
+ t { | ~  
+       
+     
+  
+ y 
+        
+ y  
+  ~ | 
+ } r w   
+   | w }  ~ ~  w r   x }    z w  
+ | { }   
+ u k k c U J 8 ' 
+                                                                                                                                                                                       ! * 0 4 7 ? B D O S Y h h o t u { x v w { r  | w w v z { { y w | t r q c b b c k q m w z | w x w w w z {  {   ~ { s n q u r m o q v t z { u v { u x w w   s t x o j p { } y p r y t y u v r {  x y s }     x  t u q r z {      
+ 
+ ~  { |      
+                          w       
+ 
+              
+                   } | 
+   | | { u w { } 
+ } x | y v { y z n v z w u v y x r r r p r r g k m p j t u n q n f j y u p r k g t e e k j p p n m r m r a l k g ` b i e d d l w ~ w y  
+ }    
+       |                         
+           
+             
+           
+          
+        ~        
+     
+                                 v z v z  | z   | y y u t w  y y y y s ~ |    x  y u u { u s p q v { {  { q w 
+  v x x y ~ 
+  {   q z w u x q s s x } w ~   ~ y }     
+   y        ~ {      v ~          
+                      
+ |     v                  ~ {  v     { x    
+           x {              v  |     {         }   z   } t | x v { q r k q { z r x w v y } u w x { } ~ o r s v z x u x w q t r q y p t h t { w  y y z  z v u q s { v p p x t p q s u u j j v    {  | z w     
+ |   z  
+   
+        
+    ~ ~   }   
+  | x     } v | ~  } |    } } |  {  | }   }      w v p b Z L 8 ' 
+                                                                                                                                                                                       $ ( - 5 : @ D J R S Z h k o w    x w u   } v |  ~ w   y  y r t i e e f o i p y z x z u x ~   y w n u ~ q } } s r { q o t o s s s  z s n m o q } y y t  y v q v }   l j s s  } u {  z u u p v  ~   
+   | s z      ~ ~         
+                              }      ~          
+            
+                    |   }  |  u z y   x v   w q q | t p o p r x u s f k l l t o i k l l p p s o m n f t p j n s m n m p z { s p q u i k h e l r e o u w u  ~  
+                                
+                                      
+                                   }              
+     x   
+   
+  ~   ~ | { z } w |  } y |   } ~  { w w  y z |  } | z    y }  w x v z ~  w r q     { z u s   y  u s w v | t r o s {  y y   ~ } } |          
+ 
+         { {        
+  
+ ~             
+         |          
+      
+   ~     }    
+ 
+  
+ 
+  |    
+                   v  
+ 
+    x y    
+  | }  }     y |     }  { z t v t v p t o z u x y w y s x y { w    v z u r }  y u v x | y y {  y r   q w    } v m t | y x y x s x t t v { r v s t t s w }   {   }      
+       { }     
+       v              x } y w { { 
+ y         }    ~   
+  | t { r g Z J 9 %                                                                                                                                                                                      
+ " ' + / ; ? A K P W X \ h h k y }  } |    ~  z   z s | z v ~ x } v v h f h n o q r p q p ~ { x } w v r p t y w r n { v w u w v u q t u ~ v r s t l l q |  }  ~ { } x  z v k m {    ~ 
+  s v } y v  ~ q r x  
+ }       
+ 
+  ~  |             
+                                                                
+         
+ }    w }        x z   x k y o q z k z w u u x { w l p m m m i l k r p f p j n t v q m t x | y y r r w r i h l m p p { w |  ~                                            }                                                 
+              
+ }                
+             |  y r v o w |   {   z ~ z | { ~ {  ~ } } z     z  } } { { u s z y  | s w   z { w x q x z { } ~ u t } t  r v r {   } ~   {  x z  ~ 
+ {   ~ y ~ |  { | } 
+    
+  }             ~         } ~ 
+         {        ~ 
+      ~    
+  
+             z  
+            | |    
+        {   y     }           ~    
+ {  
+ x r o j k y z t n p o { ~  v x  z w q }  { } v p z y  t y t y x u }  { v o u x w } y w y s l    t t x w t t { z x | p q q g r v ~ { z }     
+       ~   z 
+ }    ~ |    ~ } ~      
+ z         
+ } } }   s z }  ~    ~    
+  y |  { w | } s b Y H 2 $ 
+                                                                                                                                                                                     
+ % & + 0 8 @ = E I H R Z k h m s { y z y } }    {   z w ~  y  x w } | v r s s q r t n t p v | { y x y o u s q n i r s s v r z r y s u q w t p r v r u r v    } y ~ | | q s o r ~ ~      t t   x z w v | z  {          |     ~  ~                  ~                                          
+       
+     
+     
+     } { }  u s  {   }  y  |  ~ s w x s x { y s r q p l o n g k k r e q n i h k m r k m i t o q n m q z x w p l q o s p j h o l i s y   
+                                           z              
+  
+                       
+          
+                 
+            
+            { } y  z { x  { y  ~ z  
+ ~ z | z z z  {  |  z y { }  | s y { z z y m s  } ~ z x z |    }  t w s y y  w  } | | z u r    | | } { {  y  { ~ } |          ~               ~   
+   w                      ~         
+      ~              
+                z          
+   | { ~           x    
+ z  
+   y |   o s r t y y  { n j x p s r t z ~  z n t  { n u u w k u z } u y z o x  ~ s r k y r x y r | v o z u  } o z | r u r l t w r u y w { { n z v {    }   
+  ~ 
+  x 
+ { { {    
+ ~  
+   {         y z y   {     ~ z z     
+ } |     |   |   u w { { } ~ p b O D 4 ) 
+                                                                                                                                                                                     
+ $ + - 2 9 9 ; K O N P [ ` k v w v { }  } y | | ~  ~ }  |   ~  s u  x r p p q n j q q v j t x y { m { t q j o r v z { s q m x m u o y w q n m k p u v s w  
+ | y | |  } t m w { u { } { x  z y   ~ u | ~ t y q { }               }    
+    
+           
+                                                     
+        
+    
+  ~ { y  { z  y   ~ } u y } u s s q y | p s o t s q p g e n q j j m k m q l h r s q z y s v x n w | v m m j m r { q s n m k p h w z   w |                                 
+  
+   ~       
+                                                                                   ~ 
+       {  x z ~ }     { u y ~ v | | y y t z z  { { | z y ~  y  { u x  | ~ y w z }  }    | p s u x y y  ~ { s y y v     {  | w u    | |   
+   ~    }              
+        | z     ~   
+  
+ 
+             |         
+          
+       }                  
+  
+   }      ~ y          {  y      }    { y  } x z w u y ~ ~ t p q y u | y q p w |  r u z z u z  q r p r o t y t s y { v r w v w | } { p q z p m w | p r s o t s t r s t s x  w w w w u y z   x     
+ |    
+ z x   }  ~ z x | z    |       | { y      v s u y   | 
+  }    { 
+  { y  
+   s y   | r n ` Q E 6 ' 
+                                                                                                                                                                                      # % . 2 : 8 > J L R ^ ^ g t s  } z |    ~ }  ~ z q v v |   |  } x t q o m j m g v y w u w t v w x ~ z x s r z ~ } z l l p x r p n s r u q k l r s t t v w { x u  | | } n q z v q u  } }  {  x y { 
+  ~ w x x     
+    |  
+  z   
+ |   
+     
+     
+                   }                                          ~   
+         
+          x x x } z x r t s v x v y p r n y t q k m n m j k o u s h f j x | x t p w t h j q o r n j m x | v | x n o p m t z  } z                                                                                                                 
+           
+   
+      |   
+  w t w w x x    
+     } { { } y { z  
+   { {  t x y |  x  x x v v   }    { } w x   y   } z p v o z | | y z     y  ~ } |    
+ z   z     ~     | { {  {     
+   y  | z u                  
+   
+  }       
+     ~ w                      
+  ~               
+      
+ 
+    
+      y }   {   w    {   { { s w   z s r t { x x u x o z w z y w z  y ~ } w | v s y w r q y } w v } ~  { ~ x s p v u x u   t w z w r x u t m m p x y y  } y r w u  ~ x   {   
+      
+  ~ ~ } ~ 
+      
+ 
+   }     ~       x   
+ 
+       
+ {    }  {   
+      r l e V G ; ( 
+                                                                                                                                                                                     
+ " & * 4 : 9 @ J Q Z Z ^ p x s x | }       |   } | ~ y x { v w w x t m p l q o s m t s w w y } |    t s z { y { y z t j t w r n r t s q q u o s { x |   y x s o u u i n s u t o {  } t w u z y |  | } {  
+  
+   
+    
+      
+ 
+                     
+                  
+                                              
+   z z ~        { z x {  u z } } t x o t x w z k l i t o n s o m p n o t j x z p q y { j k n o r w o r n z z n v u o t p m v y | ~                                                                                                              
+              
+       |        }          { r  }   w  ~  z x  } {   ~ { { x w | ~ z | y z  t ~   
+  | }    { |    { y w w w { s s    
+           }   
+   ~   ~    ~ {  ~         
+    ~                 
+                  {  }  
+                     
+   }               ~          ~    |     
+  y v     z ~ } u ~  r r v { u u w x  z x v  z   { {  } v p r r o t t p q } y v x x z s t v  t y t w {    x ~ x | z t ~ | t q u s { v ~ } { x q q } ~ {  |        
+    
+   |   
+             {   
+               
+    ~   
+     }  
+  y x c S H 9 ' 
+                                                                                                                                                                                      % % ) 8 8 ; C P M _ X ] f | { y    
+  
+   |    { } ~ w  } } ~  ~ y ~ p q l r m t u y }   }   { | t u x w { y t t w u q q z r s u w x { s x ~ z     { z s w v k r u w w w  
+  x y x y } z  } |         ~          
+   
+                        
+                            £             £          
+           ~     
+      | z  z z y  v w u t t | y p p n { s q q m s v n n t k r s s n t u r q s p v s o p r y y x x q i m } m q u u z                                             
+                                                      |                                
+ 
+     
+  } z   | | }  
+     }  ~ u v z t q w | | r y   } z { }   } | v w z {    ~ { x 
+ 
+    
+   {   w w s w v y y  ~ } }    
+   ~ z       ~ 
+ } 
+   } |   
+            
+     ~ {           
+  ~    { 
+  ~                  
+                              
+     
+ 
+ 
+       
+   ~ z }         y }   } } {  z } | o i s v w u x y  t } z y y | v s t ~ w y s q w u v l k o w s u } t v z  x s x } x r w ~  y   p n r {  | y z x  u  | | y } o o x  z }          ~ u {          
+     ~     {       ~    ~  x x    z | s  y     {        w k U F 8 +                                                                                                                                                                                         # + 1 7 ? B E K X Z [ f n x x   ~ z | {       } { y { } { z |  | { } u x v q s p w } v } y |   w   u | t s u m r o o n t v m r s r n v x   u q t }  { u o x { r u u r w t y ~ s q q t x x  x x y z   | 
+ z {  ~  }     ~ ~ { ~     
+  } ~  
+            
+                                                     {              
+     |     u z } ~  }   u s x w v l n q q j r m h n o r j o l r p g p p p q n p n l s s r q l v u y s u m h a m g s s z    
+    
+                                                                                             
+                               
+  
+  
+                z |   ~ v y z v { z  { y  w s w | x z x z x  | | x     } z    ~ }    
+ ~  ~ q k p k q u |  }  
+ ~      ~ { } 
+  ~     ~   {                   }   }         
+           ~                
+     
+       
+                      x              
+      { 
+         { { u w z y w x h { { r r w y ~ w y t x y q v z k z r t m q v w w t p q s p p r t r |  q o w r s u p w  s ~ u y w u t q w |  w | z   |  |      v y          |     ~ ~           
+   
+     } ~ 
+      ~ y |       { {             { h ^ M : ) 
+                                                                                                                                                                                     
+   & 0 5 8 8 C F L X X X e m x x  } w |  } }  ~   
+  } | } {  } w x u { | x { t u m j r w | q v z | z y |  } u ~ | q l h p r t v v s p t n l o p m z u v k t s p q x t r m s o q x { w  { t t w {  | { x { |  w w z { z  |  w |  ~   | z       
+ |   {                              }                              
+     | z               { y } |     ~ q | ~ {  y | z s s w u x o s m p t j o p m u q l e f l p p r y w r x q p r r s v v n t u q o o o k l o w x z  }      
+                                                                                    
+                          
+                                 ~ x u  { z {   u u { } z v | l r  | y r w ~ u ~  | }    {            | y 
+ | v w | x | y  q   } ~ z z v {    {       
+ |     
+            }                      
+                  
+  
+ }  
+   
+          
+                    ~         }         } |    
+ { 
+     { v ~ x u w w r s t m v { ~ | u q r v x p x x p r l y p q l m m k x u t i o t t n t { { y z u n | { } }  z { t x x m o q l z z o t   w  {  ~  y  }       |         }        
+         y  
+    
+   {  { ~ 
+ }     }  ~ } 
+ 
+   z  w ~    s i [ K 4 & 
+                                                                                          
+                                                                                             $ & , 3 9 > E E F V b [ e t r z x r r       ~ }   ~   x   }   | } y s z q n r x { x { w x z x w | v } u s w o { k w s p t x v q p p p i n w s w t o o u t m | u o q t t o q p w   z { }  |  ~ ~ x x  } r x p w  { | x z     { w          
+                                                                        
+        
+ } y {        } ~  ~ x w y q k e w u s i k o v s i s u p p p n n s f r n r r } y o j n q u q u t q o x x s n n o q v t n s                                                                                     
+                                         |        |           
+ ~ w   | u  y  } | y   v { {   x z p u ~ x } y z } ~ z v ~ x   
+       } {       z  z  | ~  u w ~  { { y q z z } z 
+    |      z         
+         }     ~    
+    
+             
+        
+    
+                                       {    
+    } x     
+     ~    
+   |  
+   ~ }  z w z x { p p |  x z x e q s j l t q u t w y o q q q v p y u q q p t o o u   q   r { | } {  z y s o y u ~ w r y  s s z  y y q ~   ~        
+      ~           }  }   z    
+       
+    
+ y x  ~      { v v  ~ v ~ |  ~ w   u q ] S E 9 + 
+                                                                                                                                                                                     
+ " & + 5 : B C B K W W ] c p u } ~ { |            u } x ~  
+  ~   w r w t t r v u } } v o r v { } { y s u s v y u v s m n n z s x s t t k s y s v t r w { l w | t n n o r q v } z w {  }   z y w x y v  ~ w | u }  } { { } x w t x {   x x ~     
+                              
+                 
+                        }         {   z  ~      t x t s | x s h h q w y o o j p q o l q u m o r t q u q q o u s u | n j h t v u u { t p r r v h w w w p q k t w  v     
+                    z                                                  
+                                
+                
+               }      | z x n o s y 
+ z u |   w { ~  ~  z { ~  { z  ~ { u t  x ~  
+  z {   ~   y   x |   ~  z ~ x   r y  } ~ y y y { ~     ~  |  |   ~     
+                    }  
+                 ~                                                 
+         z 
+           |  y   ~ 
+       } } { x y    w r x x q y v r w m o t t s t n q p g l w t r u w u z v y p v u o r r t } w x { v w } z s w p j p s  x o r | { x | { ~ } ~ x ~ 
+ } w v     
+         
+       
+ {   u   { 
+         
+ z    
+    }   }  ~ {  ~  | y {  ~ |    z x b T D ; ) 
+                                                                                                                                                                                     
+   ' - 4 ? ? E D M X \ e k n q   | }    
+         | ~   
+    ~  u n r t v w z   } v { x z  x w x o v t r p o u s n w t q l q u z r r k t { s r y z w s u r u w t y s t w p { w | z  } {  v t t z z } t z | |  z w y   t s } w    x z u   ~ |  |      
+  ~                                     }                    
+   } |          | }       { z w x  y u v x s v s q u z r p u p s o o q p p o u z w w y v w s s x t t v o r r v x s l r w t v q w } | } n u l    ~  
+                                         ¡ 
+          
+                                                             
+        
+     
+  } x         |  | y z q x x   z w ~ {  |   ~ } { x } {  z z   y { {  z { x  | q x    ~   
+ } } z y 
+  }  | z { z q y u z | t z | y | } {          y      
+   ~ }      }           ~ u   {             
+        
+   
+               
+                     
+   
+          ~  |        
+ ~ } }    ~  ~   z  { x s o v v w t t u } x r ~ t } o k r r p o q n h l q w o p k u o v p t p r r w o u w w } | o m g s e s | o j i m w t m v q z o r v  ~ z ~ v  ~ }               
+     | z | w y  | |        |     t      | 
+    
+     z }  |  { ~  
+  ~ u m c R J 9 + 
+                                                                                                                                                                                        ' * 3 > ? B F O Q X d h q u y  z } ~  
+     |              
+  { t t q l u }   } x z v } t z { z r { v g o r t u x q t o m u s r p p t v t q v  { y { s y w q v w w { w x x z w v u z  | t q z  x m y z w {    }  x r u n z |  | { x }   y z           
+          
+        ~                      
+                   ~ { z                }  ~ s w {  w v t  z m s x v p o q m o l i p s u t p s v { s x p q o k z { y q u y u ~ p r m s r w y v } } t w v x   {  
+  
+                                                  
+                       ¢                           
+  
+    
+                    |        z    | t s r u x u  v    ~  
+   } u z    u z |  } w v | { 
+       ~ y  ~  } 
+  u |   y v v u t v o | { w { s w ~ ~ z y           }      
+  
+      
+   | 
+ }      
+    
+  }   {               
+ }    
+ 
+                                           
+              
+   
+  { y   }     } | { y t q u w q t q r q y z { ~ u u n v r q v t u r t v v l l m s s q h k q | w x x r q r w y o h g h m q o j m y z v q w s p p w t q  y z  | ~  ~ y   
+     
+      }           w | }  |   ~ }    
+  y      }   y      
+        }  x { r s i Y K < -                                                                                                                                                                                      
+  ! # * 3 7 < A I T [ ] e i o w   |  z    ~           
+  
+ {     | x q x p m z ~ x u x x z s u o v r r x v p t t p m r t s u q n o j o m m o q h u { q v u l r q k z ~ { z { n u { q w p m r x x t  { s p  t v w    y  ~ t w w w z ~ u  ~ z   }    
+        }                           
+                               
+ z ~     
+            ~  { t y y { x z w v r w u l m m n q t n u v r n s v q p s i u o p q q q n k n r u v v u q v p | w t r u  ~ s u v ~ x  z                            
+                                                                 
+                   
+                          }  
+   x y x v | s y x | }  { y  ~  u z | 
+  
+ |   ~   x y }             } } z w x v v x } r q s r p | {   x u v  v |  ~ }  
+          |          
+  
+ z z          
+            z    
+ 
+       
+ 
+    
+     }     
+       
+  
+          
+         
+                {      x x }       { w { t z y z r v z o s q t | x x { o l z r q ~ z w u q r s y o l j x y u w r {  }  w t w u q r r n m l s k t m t } y n x | m q q w v     {    }           
+        
+ }   |  t w   }  }      z x ~ ~   ~ ~  | x z   w 
+   x         | y o g e T O 8 - !                                                                                                                                                                                    
+ 
+ $ % - 5 ; A ? G Q Q ] f l v t { { ~      
+            ~  t ~  { } | } v w q m u y ~ y s | | y y ~ u r r m t t w w r q s q m s o t t r o w z s n j y y s s q r x s u x ~ { y v p r y v t y v w q z } w t p w { u x |  } w p z z t {  w w z y z z  w }  |   y   
+          }                   
+                     
+              x        ~ 
+    ~   
+    x | | p x t y t y r k o q k s t t v r m s r q l s q o u l p { w u q u o m o s k o o q s i t { r o w t } z x r x s w   } 
+         
+             
+    {                                                                
+             
+   
+                     {        
+    z w { }  }  ~ y {    u } ~  | ~  |   }    | {  | |   z    
+   
+ 
+       | s  z p u x } s t t n s x x | | w s t x    y             }  
+ x | 
+   }   z  
+  z      
+ |          
+     } }                       }                             | z ~    }   |  x |       w ~ 
+  y      | s { y { } } t s z s t q r u | s x v i t z r q m o m r p r r n m e p u m q q  z ~  u t w p r y v p l o s k h k q t p p l r l q n p v x u {  y   } }            
+ x     
+  ~   y  {   
+ 
+ q x      ~ z     
+ {  ~  ~   x    }  ~        y s q a S D 8 +                                                                                                                                                                                       % ( . 9 < E E M N S Z c q s u x v     
+ ~   }      
+       
+ 
+ y ~  x r y q t z q t t z   w w w w z { u k s y o m u q k p y r u s v z w | n q t } { w v y s x y s q q v z w q q  | r u v z  t o p n r l o k w z z p u y } w | r { t t j | 
+ v v m { | { w  z u z }    
+          { {   } ~       
+         
+                         {         
+        
+  
+    
+ }  y t x z z q m s v z p n w t n s n r u r m t p m q q n r o x t v x o r y p h k q h t m q ~ u x u r w   u y p s { }                             ~         
+                      
+                    
+            
+      
+      
+                   
+ 
+ ~ ~    {  
+          { x } x |   | ~  | } } w w }   { | ~ y | u x    x w  | { v w ~    |    | }  |    y v { o v s t j u y o t u }   t t p } y { | p s          
+ {   z x   
+     ~     
+      t {  w            }                            
+                    {        
+         { x     y ~   }    u {  y t t   } w w s u p { v o x z { o u q u s z l i p q u z s n r m p w s v  u w u s { t t l p x n w s r p u u k l h o w r p q s t x v w w w u     | 
+                    
+    ~ { { |  
+ {  x    ~          
+           
+     ~ }   } o d R F 3 (                                                                                                                                                                                       
+ ) - : = I I G L U W a r m y y       } ~                   {  {  w t | w z z } 
+  z r q s w s s q u { p l u w m x w o o p p v u w n p u t x z } y z | { v u { |  p t s | { u s { { y s o u } { t t r v x x u q  x y ~ w u u r q w ~ }  w u w |   } ~   
+            
+  
+    y                                         
+      
+          
+ 
+   {  
+  x | w v w  { { z x x p n s z s v j h m s x v x r s w w u r t u x l m h t y q l s v m k k v w t r p u u { t r | q w  
+                              
+                                                                          
+    
+                                   { t    t  
+ u  } y | { |      | ~   x } | z  y  w }    
+ }   z ~  | | s | w  y {  x s m p p { x 
+ x }    y x w w    |          
+ | |      {   { 
+       
+     y   
+                                                            ~ |   
+  
+   
+      
+ ~        
+  
+     | y { v x v  ~ | z { u y t x z w z x w t v y  z  r p { u z y m r u { z { u v t s q l s r w m l w l m v t w { z y r u p t  x n p p n r w q r u | } {   v |    ~ 
+ 
+                     y         ~ 
+  
+         {   }     
+           y m V K 4 ( 
+                                                                                                                                                                                      ! & ( 3 > H G G Q T X b n v } ~       ~ 
+                       x  t { | x  
+  ~ y q x { u s z u x u z s q x s j n j n r r l n r z p v    w    y  ~ y u w q k x y y t } y u n w y r ~ w r w p r z k r y w w x v v    t ~ ~    | {         |  
+                         
+                                x                   x   | { y r } z t o s v w n l t z q z w p k i i q w r y w t r o | x x t u n v | o o l w u q n } z z q q q s s w i u p z         |                                              
+                                                             
+                             z u   { }  } } x y { |  
+  y }  v } }   ~  | |      
+      
+  ~  ~ ~ x t t { ~ | } { s u { x | {  | }   ~   ~  
+  z     
+         
+     t ~      
+                                       
+                                       
+                          | } u z    v x w { w x x z s s u v r y v y  { l n p o y t o u s z y | f t x r r o p t w q r ~  w c n t x } m o l n s y q r l p k l t n t r r w   y { |   
+                 |                          {   z ~  
+     ~ |  |   
+   ~ q a [ D 9 '                                                                                                                                                                                        $ ( 4 @ D @ I X U Z c k t z                       
+        }  t v z {  
+    u x w } { ~ |  t v | t q w y r r p r t k m q s z t x |  x  y } y t v w z | z x w { z u t y u w t ~ { { | o q p q r q j n p u  ~ z  z  q |    }    { y    }  } }       
+    
+     ~         
+  { 
+                 
+              w 
+    |      
+  
+  
+ }   } 
+  z   w  | z } z  u w p o u q m r u o p r s v s z x p v x x { { } z u x y q | r w u u v y | } s t m u u | x l r v z                                                                                                                                          
+   ~  
+  ~   } { } ~ u n { v t     z { ~      
+     z          } y   z { t s }   { s w s w z | }  w |            z                 w    ~ 
+                                          }                                          |              }         ~ { }    y x t |   }   n q s w t u r t t s j p n o r o u | t t x p } ~ u r p k z t t n r t w p m x x s i o i y x t o s s l n u q g j j p y   | ~  |  |    y z    
+   }     }         ~   
+         }       
+  x z      x   }      
+ l b ` B 8 * 
+                                                                                                                                                                                      " ( 0 7 ; ? H S U X b e i {                   
+     
+    
+   ~    y q | ~     z x r s ~ y z u q t u t v { p n u l r m l q r i x z z x u z z { { ~ y y |    ~ v w y x y }  s v x q { x n o r r q v x q z s y  { { { | s z   y    
+  |  ~  
+  }    
+                        { 
+                               }      
+      
+      ~ }  ~   }     x y z u k o v t q i n z m m t x u u } s r v ~ { w q w x t v w o x v z  w t }  } y w q  w u w q q z y                                           
+  
+                                                                                                 | ~ z   y y }  ~ t u x s p y z | ~ v z |  y    } } }   ~   |      y z { ~ ~ w  } u    z s p m x 
+ } w { z u  | y | 
+      
+ z    
+      
+    
+            ~ z 
+             
+ |      ~     
+                                                                     z w    {     w   } x z     z y | x t u v s l q x z r o n f l m q k i t o q z t x x n r | t y u j v n v p s r r r s w } z ~ v s o k p n t k j o p t w v ~  x ~      s u |   
+       
+          y 
+         {       
+     | z    | } }     
+    r e a F 9 ) 
+                                                                                                                                                                                     
+ # ( , 4 9 C E N R ^ e i s }     |                      
+ |   
+ ~ |  { o r {  
+  
+ }  { w x u w o o w v s z t p x w j h h l s p n } ~ t o u { y ~ | z u   t ~ | u r t x w } x v p r | u  t l o m s s u t v r t s z | } u y 
+ y x ~ }  {    }              
+      
+  
+ 
+   |        
+     ~ 
+ }                     
+                      }        } }  v v z x q s o u t p q s q q   | s r q t x ~ z k w y n w z t w r t x { x y w r w z { w } w x { r n v |                                                               
+                                                                          
+     ~     z |  } | x { r } w y t u {         }  ~           s  x s x |  { }    v t s p s y  
+ s s v t  { |       
+             
+   y |           
+      
+           
+ 
+    
+ 
+  
+                  
+          
+        |                    
+               ~ y { }  ~ } |  { }   ~ { x   z   v t } { } y x k k u s o m k n m o s g o y i o w q u } v q v q r o s p j q o t q { q ~ s u | m n p e i q p q v y v x s w w u y y   x  ~  y z }  
+     |    ~    
+     ~             
+             } y |       |   s c Y I = * !                                                                                                                                                                                     
+   * 0 5 : ? I M N U d h r w {    
+         
+ 
+           
+     
+  ~  y p w z x }  z    }  z  r k y n r u o p s u q q o n s x x v v r m z v t w w s t s ~ x { ~ t s u s r s s p u r   ~ s n t k s q w n { x { | x s   x   y y                
+       ~                       }  z                                                    s t ~ y x u x o e n z t r m o u  z | z l x t u z v s } u s p u u  ~ x { w u s q s }  z y |  ~ z u u        
+                                                                       
+  
+                                   
+                                 z  
+  ~    | {  { }     {     z  
+     s } { }   |   |  v { ~ y   w y { y x ~ z   y r s z  x }  
+         
+   
+       y             ~                             
+                             
+ 
+ 
+                    
+ 
+              }  ~ z x      | z |  ~ { | t  | } |   p o  }  w s x s | y r m u t q x g v w k q t t r q q u v r r o m m q n k q y r x  t t r g o u j l k r w u r s o j v x w { s w | 
+  
+ {     {            }             y    
+         | 
+     y {   v z    z   t ^ V L ; + "                                                                                                                                                                                       + 4 5 = @ I Q M X e m s y                                   y y z | } |         z t l t q x s { o t x o m r z p r u k w v s y x  } x z q t } } u v v x x u y s p r w z z w w v x p q p j n v x w y } { t x y s  | x t z  |    ~ 
+ ~ }  
+                           
+ 
+                                      
+                     z y   z t u o n p n z o q p m v {  { o n t w z  } { { u y r t w z   ~ x p u y x }   {   | { x   
+         
+ 
+                                                               
+                                         
+                                 
+   }   ~ { | t  x z   { ~    {   } x  x  x w y ~  ~      { v y {    } s z | w x | y v x r w ~ } x y ~  
+         
+    {        
+ }           |             
+ |  }   
+      
+                 
+  
+                                         }          y | { 
+     } w v   ~ y { z   w z { w m x { v u z x }  ~ ~ v q y n p o x r t w x s t t o s r v o t p o p o j p q k s s s u g j t { x z z v ~ m n o l e q { u { { y  |       
+              ~   
+     
+     
+          
+  | ~      {          } y c R D 9 + 
+                                                                                                                                                                                     
+ ! + . : B A J S R S ` l t v   ~              
+    ~        
+ 
+     w x x x y }       | {  y { t w | x w s u u l s m p o m k i u s u { v {    r u u s u r s }  x   v v } r s v n o x l s v r v t z z v } q g { ~ z y ~  u       {   }      
+              
+                                          ~                ~   z |   ~ { { x w {  | x v o g p p t w v p r o w { } x t r n t 
+ } v ~ u y o q v | x  | { | {  r u z }      { v {   w ~                     
+                             
+                                                                     }                             z x v t    { | ~ ~      ~ w    z     | z    y | { }   { x  |  z t t x  x s {  x t w z { z y | } y   { ~   }  
+  
+       
+         {       ~             
+  ~     
+    
+                     z                                   
+    }                   |  |     } ~ { z } { z y q p r v t  { ~  x y r t t w r l u w { t m v v z w p p q q z u t m j r q p p q m i s q l p p s u w q p k o k d q p k n z  |  } {            }   
+ ~    } }       
+      |                 | ~      | y   ~ r a P D 8 +                                                                                                                                                                                      
+ % + 1 7 A D O N W U \ l x |                      
+ 
+           
+   } x | x         x x t v y } { } v q z s { r t t t k p p t } v s s    z z t t x s s { }   x x {  { s v p m r n q  {  z { { u x z l x } |      } y | { z o z }    |            
+     
+          
+       
+                                              ~ y y z { 
+  y w y   | t r r u y p r t x }  z u y  ~ t { v u x v ~ q m } y |   v y w z x } z x u      {                                           
+                                                                                                       
+        ~ w q z w y x z     
+ }  
+ t {   {  {   z ~   v x u }  { {   z {  |  z    x  ~ x w  y |  | | } y     
+ ~  |       
+             { }                                       
+                                      
+      
+               ~     w | ~ 
+ 
+ } v {     }  } t { y }  o j r t {   | u o k j v x u u t y w u q p m q s p p p p o q x j h m o l u o l n h p v p g i p s p o j k h k k l s s l w  y r w ~              z  { }              
+  ~ z    
+    
+      
+     |       }  z w h P H 8 +                                                                                                                                                                                       ' / 1 2 ; D H U U ` d j x } {    
+         
+                       z }          ~ x z r s s  | u o m r s w y x v p n s s n s m z } t } y ~ z } } s l o y |   t o r z z  x u r t x } | z w q l v  z v n x z x v u | w x ~ | {  z p x x ~  {                
+             
+                         
+  
+      
+                 | {  | y z 
+   {      u w v u w w } z z } o r t y  { z w r m r { y x y z { | ~ y  u v |    } n {   
+   ~ }  ~      
+           
+            ~                            
+                                                                 y    |                   
+    x z y ~  w { } ~         {       | z       ~      u y |    
+    |   x ~   {  z {  ~                  
+                      
+                                   
+                  
+ 
+          
+                       
+    | x    ~  x |     z   { z {   z t w | { | z v s q k k o v y w s y | v m o q t t x u s w m t w r u n p o p s u s u q q s q m q w w t m b g t m m m r q z { x x w w ~  { x   
+   z | ~ } 
+ | }    x      z z   
+ 
+    {     
+       
+ }               } m U K = * 
+                                                                                                                                                                                     
+   ( + 1 9 B F L W ` ^ b u } ~             
+             
+        ~  } ~  y        ~ { z t z v z q s r w x t q r o t o o s v p o l t t r z v v x  { i p u t ~ | w { h p z { t v v q q w u v v u o r u r u  ~ v w u w v u { u z { p v w     
+ ~    
+           
+ ~         
+                                       
+          
+  
+ 
+  { } x v }  {   | v z { x w w v w v w z | x t v { v x  z | } v s q y x t y t t  ~ w x z y | }  u | w v      
+  |  ~ { }     
+                                                                                                                                           
+     y   x u v x {   
+   
+ ~ ~   
+   
+  ~ u |          }  } x   |  
+    w w     w v x    
+     
+                
+         
+     } } 
+                                     
+            
+                                  
+    
+    |   | v   z z ~ y |       z z y }    t x { v w } y m o o t p s q u o { { { q z | w p x {  w c m r u s r u s r v r u t u x x s v r s } z q p i n q k i r t w y w u v s z  x y    
+  w    
+ 
+    } y |              x         
+                   { f V L 9 ( 
+                                                                                                                                                                                       
+ % - 3 : = F G W ] a ] h v z      
+                    
+         }    x }         | { y y u r u m u v n l j k v o n q w u r p o z u p s v u   u u x x z s z { m s r s s z u | x r r n t { w y v q s ~ v { r l m y t x x u u x t    ~       }             |     }            } 
+                                     ~      
+ 
+  { x w ~ } {  | s w 
+  v q u q r w x | { t { { x }  z }  w u q z | p p t | ~ y z x } z t  | w v z x       ~  } |     ~   }                               
+                                                                          
+  
+                
+             
+     
+    u y u w x { q { y y        } | y   { v     ~    ~ { ~    y    | ~ z u | u v z } v {  | z   x {  |                
+ 
+              
+                ~                                                                      }   
+      ~ ~  t u y y {   ~     | w v x    ~ r q q q t w u y s s z { u z u { u { x | ~ | r u x z x p j d o s s q r v } o t q r p r s n p t q | k k m t w n g o i u t t u w t u |  z v  }  }   z z |  
+ 
+       
+                    
+ 
+       ~          x n Y O F 7 #                                                                                                                                                                                       # $ , 3 : C L R O P ^ j o s {                   ~     
+        }   ~ v }  v x         w x t t t t y u u { s q z r t q p o p o y { y  w r q   | v r z   u t x ~ x p  } w v r x v r p n k w u } x p v v } } x t t r o n p r  } x | { |       | } {  
+  ~        |    
+             y    |                  
+        {                 ~  | z  | ~ w { z   } | w p j o z ~  z v r r w  } u  y z x v x | s v u x o t n } x t } u u z  |        
+  y        
+                                                                
+                                            
+      |                       |  }    | | z p p q n x {  y ~  }  | |    y }   z | } 
+    |  ~  z z  
+ ~ } t  } w ~ | y | w s t  w y z x z |  v z         }   |  z  } x  
+       
+        
+              
+          } ~                         
+                {       s { 
+        
+            | y   z v y    
+     x | { }    z s m o n r x y s n v  m s s { r } w u { } u x y x | ~ o j m p m m p t s o s p i h m s o j l j v i p j m o j j l o t z p z z q u   u }   
+ ~ } v w x { { { v           
+ 
+    
+    
+ 
+         ~     
+   
+  
+ 
+  w { x q _ J > 7 ( !                                                                                          
+                                                                                           
+ " ' 0 4 = A J P R S a c q u                        | |    }  
+  z   ~ w v ~ z }         x r x s x w x z q z r t y p v x x v { x { v y ~ y s v  } z u n y z } { w z } y s }  v w u x q s o p s w p n s w u x  | { y x q n m n x ~  v | u } y } |  ~       }  ~      
+   
+     
+    }      x    z  |          |  z z 
+              
+  }      
+   
+ ~ }   w  x   z x x ~ }   q p o v w t { { x t } z ~ } ~ } z v x z s  r o m n s m | y v ~ { u ~ }  
+ 
+       | x w | }           
+      
+       
+    
+                   
+                   ¡                                                                                  y { 
+ q k q s ~ {   y { x w x       } z u { w   x  z y z  { z    | t x u     w } x u s x t z w z    t  |  
+   |  
+ { 
+  w    } { 
+   
+ |                
+                                    
+                    x     
+       r 
+               
+    { | w | 
+  } y }   z         w |  v x { v n p q t v u h x w p y x u  | x |  y p s | z r z ~ s p y z t s k o w w m p m r { o k n m l q a d f i i o p o t u n u v s u   v }  { v z { } } {  { | ~      ~ {         }  ~            y             { | { s e L F 7 )                                                                                                                                                                                     
+  ! & 1 7 < C K S Y W U a n z  ~ 
+            z                   
+    y  } w x ~ 
+ 
+       y u r x  { o x x q w v r q s y w ~  x } w w y  z x z s t { t y  y ~  { { v z { | t q t m x p w | y o t z t y u s s z r s y t u n w x y { { v p | y  ~  {   y {   ~          
+        y      |          
+ 
+     
+ | y                      {      }      }     z u    s z y { x |  { ~ {  } ~ ~ z } y { | { x s p w q t w x z z x   ~       ~    
+  { | } ~         
+          
+ ~      }  ~    
+                
+                                                                                                    ~ t y u y o z w u z } | }  w w x {   w r y w s z   }   | {    |  x w p {  |  y   v y w ~ m n p } } u ~ { x z   
+    {       
+ | 
+  } 
+   ~                 
+      
+ ~                               
+          
+        ~  }    
+      
+          
+   w {  | y }    z u } x x z  {           } y x {  s w w r r t o r l p h r z t u   z }  | ~ z y y v | z y u x z s q l r o j i l n n m s q n p q q k o e r t r q r o n u v y x u ~  
+    ~ z  |  {     
+     } {    ~     {       
+   
+     ~         |  ~ |   t i [ I 8 ' 
+                                                                                                                                                                                     
+ ! & 1 1 4 > I O S ` ` j r z   
+               
+                  
+    | z v ~ 
+        y ~ } x x  u p v y m j o t s u s v } w r | | ~   v x u u | } v x v t ~ z v q l z z m v  x y r r w w r x y v m r x u s v l o s v r s x r u z z u  | x  y 
+    x  ~     ~        }      y }  {      
+                
+             
+  
+   
+ 
+  
+              z 
+   {   
+ y |  }  }  y {   } x {  y y  y    ~ z y | |   {  
+  ~             } y   }                         
+    ~                                                                            
+              
+               
+               | n y } } { |  
+ 
+     | }  } q x | x z y  | z      |    w } x ~ w   u w { z r } y | t q o z { 
+  | {  }      
+   {     y |   |  
+    
+        |                                                   
+    
+      
+        
+                    ~     
+   
+     z          { |  z x x | | w x t } u z u q r q q { x | | w   ~  u w u z y | { o p q r s n q r p l i n k l l k m g q h k f i b q q k p u r r w  | x       ~  { v z     |  
+   |                      
+ ~          ~ { | | 
+    s i [ M : & 
+                                                                                                                                                                                     
+ # , 0 0 7 B J L T ] d k m y      
+                          
+    
+   {   x m z          ~ }   z { |  u i y x v | | ~ t } ~ z } z x { | t z | } x s t t r | x w w t x } w s v x ~ u p { s u w x w  t y z w | p q q ~ r  | u p k s { | }  
+   }  ~ y { }  | z       {    ~  
+          
+     ~              ~               ~     
+              |   { 
+   
+  z  { |  ~   
+ z  |  } z v { o   x w |  y {  ~  
+     
+       ~   z ~ 
+  ~           
+       
+                      
+                                                                      
+   
+    
+                        
+     |    {  v   | ~ } {  |      ~ } m p y z ~  z  z    ~ {    
+   ~  u  ~ y x x z y u y z q w z } ~   w | |   
+     ~ }  
+   
+ { }  
+  
+                                                                                                    }                
+       
+   x } |  { x w u { w x y y w w u q s | t t y { z  ~ { s r t z t  | w v o r q j l p t n n m n o j u r o p q o d d o o n l l i p u s z v z  }  ~      { |  }  
+ z } 
+ 
+    
+    
+ }        |             z  
+     { { x   
+ r o T E 6 ' 
+                                                                                                                                                                                    
+   & + , 3 ; F J K N \ d i q w x  }                 
+                
+ 
+   ~ z s w w v       ~ 
+     x |  } s s y s r ~ x { } ~ ~ w s v w t w v r  } s w w q s }  | r t w v q s r w u n n r x w v  } ~ ~ y | s q q t n w s q q o q l q | w y | t }  w  y | y t  ~ w   x   z x } t r  
+  } 
+     
+ }        
+         {        }  ~ |                     ~    y        u ~   y } } w z  ~ | t x   x | x   z s   w        }   |       
+                                       }  }         
+             
+                                                     |                                 
+      }   }  w |   y z } { u q {  
+ { q y s x w w   x      |   z    ~ ~  v w z w r s }  v y u p }  z y  | ~ z y  z ~ u  | | |  
+  {  
+ }                
+                                z                  
+ 
+                                       x   
+      | {    
+          | }  w { v s u u t s y w r s y  t o t v w u t w q w l p n p v r z v t { p m j h x t r n i t v y k s s h q p f b i o n d g l g s p t t o ~   ~ y ~     }  ~ } y  {   |  ~ 
+  ~  z       
+  
+                     ~  { y  ~ o h Z I 9 % 
+                                                                                                                                                                                     
+ $ ) + 7 < C D H R d e f k z          
+ 
+        
+  |        ~      }      w ~  z          
+  { y } w y v | { t q r t s  ~ } t u q t w | ~ u s u s | x  v q w | { u q x q o t l r v n t v y x w  z {  u ~ u o o w w o x n m s u y x w w x t t {    w w ~ ~  x }  { |        ~   x  
+ y      
+    |          ~ ~           ~    {          }       
+ 
+  }          {    ~  |   |   r   z z  ~ |    z } z   { ~ 
+            
+      
+                                                
+                                                              
+        
+ 
+     
+         
+      
+   
+         } } y x z t { x | v }  | { 
+ z } z v q {  w |   } y    y  |  }   
+ x x  q r  r x    
+ t p z   ~ z } z u r {    x  ~ }    
+ |  y }                                          
+                            
+                                    z       | x ~ y   z z              s s y w { z | w  x x r s s v y } t t u x r w p u ` p r q m p s u p n k i p s k h j k s n t y q m q z j c k j q s p j f j l n t n { z w }  }  { } } {   z    z } } {    }          |          }   |   
+            y m V H 3 &                                                                                                                                                                                      
+   % / 6 8 ? A I T Y \ \ m q { y                  } }    
+ 
+ 
+ }   }           |    
+           y x x |  { y v q w x x v o y { | z  s v u x w x x { w ~ x y v u v x t z s | y s q u r w z w q v  ~ v u s u v l o t u l p n y y z q y y y q x y w    z    ~  } z |  |     ~ | ~   |    ~   
+                                                
+        { z        | 
+       
+            r ~    ~   |  
+       }  
+   
+     ~ z                               
+                                         ¡                                         
+        
+        
+                 {    v  ~ w  w } x  
+  |   ~  y r  { u |  ~  x x z 
+  
+  } { ~ { y  z  { | ~  |      {     { x u v  w   }   }   
+  z {  }      ~                            
+                     
+          }   
+       
+ 
+                              | v  
+     y s }   ~ v y  } |   |   
+     z | } | } y q q  | { s z u v o s o n r o t j l x k w t s i j k m l o q q q x q h l q s s i s k c m r f h i n o s i g r n j o t z   y w w      ~       } ~ ~  ~  y y    
+ }  }            }              
+   }  k d V A 0 %                                                                                                                                                                                        & / 2 ; A D E M Y ] g r v x x                                        z { z u           y { ~ |   
+ { w z y | ~  z x y ~ s x w t y  { ~ ~ | x   z p p q x w | v y  { y t | u | w s p w w r | n v s j l r x s q q l w t r { y  { } { z y  {  ~  } z    } } y v y y   z {  y     u  ~ u {    }    
+       {        
+        
+               
+ 
+       ~ | |   
+   
+ y            } } ~       x }      
+     |  
+   ~          w  z                                    
+                       
+                                                        
+          ~ 
+                    
+ 
+    |  |  z   
+     v { u x ~ w 
+     u { {     z z |   | {  | {  
+ 
+  }   | |    | z  v |       }  
+   }   {  | z              
+ 
+   
+           
+             
+                    
+           ~          
+                   ~  t z   ~  x ~ {    } s  y |        ~   {    v s u q s  v u u y t y o p p q v w x q s  x | y t m l q j k i l l r q v n r o n k i l i l t i g l k p k p k m z p o t w p w o w o y    | y | u {  {    }   | { 
+      } y   | ~   
+    ~       {             x w e Y D 3 ( !                                                                                                                                                                                     
+ ! $ 1 4 9 B E F U Y _ b r p | }                                 }   |    } z { x | 
+         ~ {     
+ v y x ~ } u  | ~ y n s u } z y | | |   v  z x | q w x y p y z   t t w v { x w u x p r x o t o t s u w q w  y x s t w u t y { { m z | t w   z z x  |  ~ | } } | 
+  |  { y     { {      
+  ~ ~  
+       z             
+    w                  
+ } }  u t }     |     x z        
+                        
+           ~   
+ 
+         
+                      
+                                  ¢                          £                ¡                                     ~ 
+     ~ { ~  ~     ~  z n t  |   }       t z }   
+  
+      { x }   | y 
+  |   }  { }   }  {         ~ }  {   }          
+          
+       
+       
+ 
+                          
+   
+         
+              
+               
+  x t    {  z  
+  { z  }  } |       
+    z z   t l { v { z n l t p p y r n m v r r s t v | u u w t v o l i i p o k p p v v x o m k k x r u o k i r j m j e j p n l h n u }  z u q u {     ~  
+ }   | |         w  
+     ~ ~                       
+    v p g T B 9 * 
+                                                                                                                                                                                       ) 1 7 = B D L P Z ` ^ b i s      
+                             ~ | y z {     |  {     }     ~      s ~   z { w t w x u u | t s z x u z  | z x w { y s w u m o v v t w u p s o v o h r x v z v n o r x t t y u y z ~ z m q w r t u o  u w { w w y  } { } ~ w y ~ x  x   | y z { y      ~    v o v y u y   ~                        s | | | |   
+          
+   ~ | } }   ~      x t ~    
+  |  |           
+        ~      
+     
+  
+  ~                }                                         
+ 
+ 
+                                         
+                           
+     
+             
+          } u x ~ v x } } { { | t o q y ~  ~    | } y  } t w y z      ~ x y 
+ ~ x ~ ~   } 
+  ~  u o { w z 
+   ~   
+ 
+  }  ~       { y 
+                 
+        
+   
+ } {   
+     
+              
+             } 
+                                    | x 
+     | }   { ~        ~  
+  x    ~  
+ w s k s z  w p p u v s m s v o w q y y q s u r w o t w s m h p u { q l h j n n m o o o w k h l j p r m j i e n i k q o q j k x x s v {     
+      z w  }        { x  
+   
+  z  
+  }     y            { }     ~ s c Z E 7 '                                                                                                                                                                                      "  $ 0 5 > F E K T Y ` b ` k u  {  } ~ 
+  z              
+           
+   ~ z  | |     x | ~   ~ z     
+ 
+  z |     ~ y y q o t t t w z z p r u x   x t v j u s r t t t z  y j v p m w w i o n u w w y z t j p x w q q s r v o r o t v o v r o v u t s x v 
+       
+ w | | | } w y  } y y       y   |   } x {     ~          |        
+    }  { |   
+             
+    { | ~  
+ 
+  
+   } }      z                   } y |  |    ~      
+ 
+ y ~     }            
+     
+    
+          
+                              
+              
+                                     
+ 
+    } }                              ~ { { p q t s v u x   ~ w u x  u v } ~  { z z w 
+ z r u r x w | }   | { }   w w  
+ 
+  { }  { r u { w | ~     {    { { 
+ } { 
+  z v }        
+      ~ 
+                 ~    
+                                  |                
+        { 
+  {       ~ 
+     ~ |    } ~    
+    
+          | z x t w t v l p m r r z { u q k l m t y r p o r k p p p s j q r v t p p s k l h d r n q x l h j j h m l c b l i i l k o i k q r s p w | z z ~ 
+ ~ z     z |     { z    z }   |  z | 
+ ~ |    z   ~       |      
+     y l ` T G 7 %                                                                                                                                                                                     
+ 
+ # ' , 1 A E F M P R _ c h p u ~   
+    y ~                            ~ { {  {     ~ z w   z           | |   ~ ~ s m y x { { } { u s u { y | s t s l t y u y l r   z { s p j o u o k u  w s } { s o o x v z r q j r v p x x r r x y u s u w r  } |     ~  ~ }  u }  y  z z }        w ~ |      } |      }        } 
+        {   
+  u {  z  
+               z  x ~  | |    { 
+            x }  |       {      ~   
+    ~ ~   
+    | |       
+                          
+                                
+                                                           
+                         
+  {  {  y | y z { { z { } z {  z z w s }  } z |  y     } | y {    
+ r y ~  ~       |   r | { z { x  
+      }    |  
+    }   
+  
+    
+             
+     
+     
+                 
+         
+      
+           
+          } 
+     
+  } ~       
+  |           { z }   { v s ~             } v { z q r r h r r r { u s j o t j k o k m i s k p k r r r z o n { v p u u p r o l n u y q d d g a a e j f h h g m k v k h q t k r x y w v z z      { ~   ~    ~  ~   z | |  ~ 
+   ~     {       ~  
+  x    
+     | o o ` P K 9 %                                                                                                                                                                                      
+   ) . 4 @ B H L Q R ] g f n t   | y                                |  } y r y y  
+  { ~ z }  y |  {  z  z  }   | {  v } x p u u z ~  ~ u z r q v t n w u v r | | ~ u s } x y ~ y q o m i n m x w w t x x y r o s s { l o m r z  s x w |  y x y u v s }  } z  { y u | { w  } { |   x    }      | z    ~ y y {       } }        }        } v    } w ~  }       
+       
+ x { | |  
+   ~ u | } | v          
+    | z    
+ 
+    
+      
+   } {        ~    { { {     
+                     
+                                                                          
+                                               y }  { x s   u v | | }   
+ x  { z    y   { {  |  } u }      {   
+  | } y  
+  | x ~   
+ {  ~    
+   {   
+ z y } {    }        ~          
+  
+ 
+      ~      
+     
+            
+      
+                                  
+             z  
+     
+  { ~ ~ z  ~        
+         { o t | } n r r m u o m v o o s r r m h l l j o w l k r n q t { p s u q q v r n s p p j q s k c f l h d ` l r e h o l o q o c l u w q t { s l y v   v w z    ~ {      }   }  {       |       y |   |       ~  }  ~  { u i a S Q 9 & 
+                                                                                           
+                                                                                          
+ $ ( + 1 9 ? H O S V Y j i k p { z  }  
+      
+    
+           
+             t  ~  
+  ~ s }  
+     |        } s { w u  x | t   } z t m q n w r o { s p j }   | y t q y u r n q l o r v z y y u v { v p j t p o m f v o z w y w p r x {  z  w { q v }  |   }  z |    
+        { {      
+    t {  }   w }    
+       }     }   } {   {  | z                 ~  }      }  { w { x y }              
+  w } ~           
+ ~      
+  
+       }                               
+                  
+                                                                                                  }   { ~ z { z s w  | x z 
+  x y {  
+  } z     {    z     |      
+  y }     ~    z     ~ ~  
+  u } 
+    } t y      
+  
+                    
+          
+     
+                                     
+ y        
+ {                 {   }    
+  
+         }     | 
+    
+   u  ~ x r r o s q k k r p d t x l n g i k p q u s f i r t u v { v x p t r u l s s k c r q h k i e i p g o t i g i h q m a g l t } x r s o r r z z    }     } ~ {      {   }       {   
+    w y      ~ 
+       z y z y o f Q B 8 &                                                                                                                                                                                        $ ) , 5 9 ? D O U U [ _ i t u y t { |     
+ 
+         
+         ~        
+ y  
+ } ~      z } 
+   z z     { |   } ~ x r y | { } | z   {  y t y w  } t u v { x u } x v v u x s w o u p h t w s r w x t l u x n p v s } y s s l p p s u s } x z y x r q y v { u ~  x y | | z z     z z  
+   
+  { z y  
+     
+    }        |        }    } z z   ~   | z {  ~ }  }           } | u { {   ~  {    | { z      |  {                          y   }    }           
+                    
+     ~       
+ 
+          
+                                          
+ 
+         
+       
+          
+              y {                
+  w t y x { w       ~ { { |    w   ~   }          
+          
+ } | |          z   ~ 
+ z     z u }                                                                            } }   }                
+ 
+  
+     
+     ~           ~   
+  }   | |    ~ x {  { z | u r t q u n l q u w u s s q f g i k i h n m m r r l t r p n s t p r j o j m b d n s m f o p o n j n s i h i j g m k i i n i r s s t s w t y ~  ~ 
+     |                 
+     
+   } ~   }         { | ~ 
+  ~ t c S C 8 ( 
+                                                                                                                                                                                     ! " ) - < = B ? K P V Z a k l } y z ~   ~   z |          
+          
+       y     | { x    
+   z x } ~     x z  z |  q | z z  }    {  { v ~ z | { { r v  x | u  | y | |  u i x t v y r k n p n o j o v q r t t s v { q u u v w w y y ~ } w m q u  { u y  z x y } } } } |  } z v v    z z  y x z   
+ | v     
+ { } }  { y ~    
+       ~ | 
+ t z x  t y     z ~ }  {       
+    } z  | y }  ~ ~ x y    }                | ~    } ~              z          | 
+                       
+           
+                                                                       
+                    
+              ~           z ~ t o x u t y   |      ~ }       
+    ~       ~ 
+             y s    ~    }  }     y     | 
+                                                                              
+                                        
+      
+  ~           {   y { y u o n o r o p q p m m m c i k l c ` k x r t x o w n l j m r e i d g j h m d l s r e o j q r l j o i g ^ b m k d h j h i q s t z t q z z  |       ~    | ~     x 
+ {    } |  
+             z     
+   | y  z n c S G 6 ' 
+                                                                                                                                                                                     ! $ ) 1 : : G J N U S Y i e n y |     {   z      
+               
+       |    ~         z { u   y y  } y u |  } z v w |  }  
+  ~    z | x  u | y {  | x v | w t u }  t s | y q y o j v x w p j l u u q o ~ q w ~ z s w s n o t o w  u n m q w w v w  z { | | |  } |  |  u q r   x v u { x z {   { y x 
+  
+    } } |  
+ ~          { w   } v r w 
+ } ~  u 
+  { { 
+ 
+        z   z | | | ~ 
+ ~ 
+ ~   ~    | ~     ~ z x   |   w } 
+   ~ {    ~                          z                                             
+                                                 
+                           
+                         z t u ~  y y z     ~   | z | { |   }    } ~ z     } |              | x     }   } z    ~ ~     z      
+                                  
+                        
+    y                                       x   
+  
+     
+        
+      |        y { w w y y x m w } { t p { p l l o l k i l k _ i o i t v t q p m r n h g l ` c p p p i l r l h g f q m m p j g j h l d m g i l j e h m x y y w ~ y     
+ }     
+  
+   ~   r | x  
+  
+   
+            
+      y |  } 
+  w q ] L = 6 %                                                                                                                                                                                     
+  % + . 5 9 H I L R V a e i p | |     ~ 
+      
+ ~       
+                         
+   } s u }   ~ {      | r s | u y w t | ~  
+  ~    t }  y { | u t r { t s | } } { z } t x q p r m q v p w k p u u y t z r u x y | r s w v n  | y  } t x u q t | |  |    } | }   } { t w v   {  | { } 
+ { y |  z w 
+      { }      ~ 
+  
+    |     | } { }  z t t { } z   
+ } {      }       x  {    w x 
+  ~ z |      ~ 
+  }      
+  ~ 
+                            }       
+           
+                                                 §                                               | 
+        
+ 
+                         }   |  v x z w  ~ { t   w  ~    x z  { } x x  }      x  {   ~     
+      
+         | y   }               
+                                                       
+ 
+  ~                      
+                             
+    {             ~  } y } v u } s s } { r m t { p h m m p g k g h g k k q k p s n m t r r s j t l r o s r q i m l i i p n d q { n i l m p n f i p l h g i r w k r y { v            
+       z                     ~     ~ } | { z ~  r h b T C 7 $ 
+                                                                                                                                                                                       # - / 4 = F I X P W b a m o x  } ~  { t ~  
+    ~ {                    
+       
+      
+ ~ w }  ~   z ~      } s x  |  x w   x y   }   |  } z | x w x   q t ~  } v | | s v q z x n l v t p u w u s u v } x { | u t r u }  y } { | y x p t { n w x y { x y   }    y  | ~  { }    r z ~     
+ | }       | x  { |  }              z   { { | x  z u u z v v x    
+        w y y t  ~ y t p }  v v } } ~            z   w  
+                   
+         
+                                                                                                            
+           
+       
+       
+ 
+          } 
+   
+   } } v w x {  {        
+ ~ 
+ x | ~ {  z         {  ~         ~ }           
+ | z  
+              {                                ¢                             
+    ~             ~ 
+   
+                 
+                    {              x { { v m n { | v j q u o k v x | u l r m p t t p x w q h p o j l n g d r t | w q n k i s l p q v v j l k h g k g c r h f x h g i k q o o t r } } 
+ 
+         } }          {       
+               ~ z     |  r g h X E 8 )      
+                                                                                                                                                                               
+ ! # ' - 4 < E F T Z a e j t z  }  u  | | z }   ~  }                       
+         
+       |  } |   
+ 
+   | {   y   }  } | }    
+   |  { { | {     t w s t z x v |  u  | x o m h m  ~ { w q y { } { v { u v r v  x  x { | | { v x } } w x } { y ~ | y { }  ~  z   | } } v  u     
+   ~      
+  |    }   ~  |           { v 
+  z x { |  v w { { t w y }      
+     } t w | } | z | x } w u  ~ } |        
+ }                                            
+ 
+                                            ¢                                                                        
+                }      
+ } }  { r { x z }   w  
+         } {       
+ { y             { x z |         
+ t ~ {  } ~            ~                                                                               }     
+                                    |                 u t r } ~  o r p s o q t w u e s n k k v t { q t n h r m p k l k p | p r u n s p l u w m m r p n g f m f l g t m n v q o i n m k q h p x u ~   
+ z  
+    
+               
+     ~   }  
+          ~   z s z x m e [ J ; .                                                                                                                                                                                    
+ 
+ 
+ ( * 3 7 ? G P N W a b n l r y  ~ {    { } 
+ z }   | 
+                          
+  {   y   } } z } s z w  
+     { { ~  {     ~ z |  y y }     } ~  ~ z      x y } w {       t j l v   u | w }  } y p s w y x } { x  u w y } { t w  ~ u ~ { u   v { y w      } w | { y  x     |        |      } ~          
+  }    { }   y  } u { y k o } { t s  { w   
+ 
+     ~ w y } w u y  z x w x  x  ~     { ~ 
+       
+ y                    
+           y x                                                                                                        
+        
+                            
+ |  }    ~  |   w w   y {  } ~ } y   y x    {   }  {  } }  
+ y | } | |   | 
+     
+  
+  { } | }   w y       
+    
+      |  ~                                                                                                                          
+           s x u m |  t s t q y r s q m o n n n l q x  t j h i t s q h d o j y k k x q x s m q k p u o x } p g h h l k u s o p l s o i c j o n p s m u x   |  
+  
+      }     } |             z            }  | } v v s u h X H ; ) 
+                                                                                                                                                                                     ! % 4 6 3 C G P W ^ b d h m p t   } ~ ~ y | 
+       {  }  }               { |  
+  
+   
+ ~ x z 
+  } x x  { x x       
+   u x    y {  ~ v     
+ 
+   | r }     
+ {   
+   z  z { z y  { s u t  | y | s } | x o z y  } } x } }  x u t t  | { v  r x w y }  y x v } { { ~       { {  y | | w } z z         ~  
+     
+ 
+            y y | { z { x y  v w r x y v r { y x z   } }   ~ ~ | t ~  t }   y x x } x | }     y | 
+       }         
+            {      
+   ~  z   
+                                           
+  
+                                                          
+                                      }    } ~ p s r y ~ y z q   x z v u |  y p   
+ |    ~ r x     |  {   { } z     ~  
+   x ~ z u    r ~ }    } u  
+  ~ 
+      { 
+   
+                     ¡ š                                
+                                         
+        
+ z   |           z        }  z y x u u y x o l y } { o p p l o r u p n n j x q m j s s r l m i e n t g o x o u l m t k r | o t  t h e l k l u r v j f d j k d o p h h p q s u x ~  }  }       
+ 
+  
+   
+ ~   z  | { x             ~    ~ ~  
+  } x o \ X J 4 % 
+                                                                                                                                                                                     " ( 2 4 5 ; I N Q W X c j t s r { }  z {                      
+            {  
+   x   }   z ~  y    
+    }   { x w x r y  
+ z y    
+    ~  x t } 
+          w w r }  } } r y t ~ w  | y v  | p r   w w ~ w v } { v t y }   |  } { w y | x x  y } u x w  | ~  z   
+ |   { y |  | {   ~  
+       ~ ~  |             | } | { } | s u v  s | w u x t y 
+ v x t |   | } w | { | x 
+  q w | |  }  } { } } | | ~ 
+ 
+                                 z   
+   x z } 
+                     
+   
+           
+                                                                  |                 
+                        
+  z  x  } } y t q x x r { y | ~ } y  | x |    | }    { y z {  
+ 
+     {   |   
+   
+   | | x {  
+ z x w z u x { { x ~ x  v z {  
+     z                          §                                  
+                   
+      
+     
+                    { t w 
+                 { 
+ x { ~ x u n q n k q s s v v r l t q l m g o h p n p s r q p u q n p r r q z z t t j n w p u y s t s m h m k i j q n m f j e g l k m r s g o n n z      
+               
+      ~ } } z   | 
+          |  |  
+ } v q W S B 7 ( 
+                                                                                          
+                                                                                           
+ % - 5 5 > E F M V S ` n o p p { ~ | }    
+ | }      
+       
+                   
+  ~ }  w z   u x |  } ~  }   | x w } z w  t r }   ~ q y  x      | z        
+ 
+  y { { w | | | { u {   ~ ~ {  t z } u y } } x w ~ } t v | z w r v 
+ 
+ y x  s y |  
+ t z { w  t y 
+  y     
+  ~  y y     v | ~ }  z    z     ~   } }  
+    }    } y   y w t p r u x u | { { z  { v w q     u l }   } x t t | }  ~ z  { y w u y      
+ ~  
+   ~ ~            |  
+            ~   } z w                      |                                                          
+                                    
+                        
+  ~ }     } } x r u w x p u { u    ~   |   
+  z   | } } }      ~    
+      
+  
+ 
+  y  } y y    q o x u p { v t  w } w  {              
+       
+     
+   
+      ¥                       
+     
+           
+                   
+                ~                        |     
+ ~ z ~  y w p m l i k u z w w x n r s h d l q p k s m r t r q q p t  ~ v p s u { w o p o t u p s z q o s t | r t s m o n l h l h i h j m m o m h n w y        
+              
+    }     ~       
+  u    | y y w u o \ Z E 5 ' 
+                                                                              
+           
+                                                                                            
+ $ * 6 = D F H K Y U Y ` s x  |  { { |          
+                    
+  
+    
+    { ~ r z {  { s t      
+   x | y | z ~ w |  } x v z x y x ~ w    z | { | | {  } {   ~ ~ }    | v v q z } {  ~    w w z w y t x x x y s x { z z o n z { z { w  y | w x u w ~  } x t      w     z y  | ~ x z    }     z  z u x     
+ ~  ~  
+ x  
+    { | ~  x { y x x y w p y {  v y v 
+       w { z u y  x s y y | q x  |    u z  |  }       { z |         
+  
+ 
+     
+        { 
+   |           
+                                                                                                                               
+    {   
+     y t q ~ r l } w  { z   s       z ~ } } w }    t ~       }    |      w } ~ y  y   t s u u n u  |       }   
+   z ~                                                                                    
+                 |          
+                
+ } z v s   v w q g r p n r p t x l j z t j h o y q o i i r s u q t | q t v n q s p n s k r n s k p r s u v t w z s y u l q t r o j i k q j m k j r p r g p w |  }      |       ~      
+ ~            }         u y } | o f W C 0 !                                                                                           
+                                                                                            ! * 3 ; E N N S Z W ` d s y  { } | y | ~ }       }                      
+         |  u v | {  v s v z { {     z x y   } x     v u z }   y z   } z { x y s ~ { z 
+ | y | x  v }  z   { x x }  |   | ~ w u x p y x } x r v x ~ z s t w | { x } z  w t y { v | ~ y u ~   | } ~ s v {     } ~ x p  ~   {  ~ {  
+  y } v  ~    x z           | { {  z | x y y l q    w r u       
+  } } { w  v w x x x k { r w   ~  y z }  
+   
+    v { s z     y  
+         { 
+       | 
+  } z z              
+ ~ }         { 
+                                                                               
+                                 z           q z x v x x  z w y y y u     ~    x    }      ~ 
+     
+ 
+      ~      
+ }   x { v x x y z {  }       
+ }   ~                                                                      ~ ~         ~                      
+ z      ~        
+   } } | 
+      | }  y    z q l h p r v q w p u l k q h o p q s o p n n r n t v n o q o s x p q t p f i q m k l p u t n s r { | z t t l h o q m b j x r r o p m m o s j i s o u { z u x   }     ~ ~                    
+ 
+       ~ | |  u h _ W @ - $ 
+                                                                                                                                                                                     
+ " + 0 9 @ E N J P Y c i p x | |        }         }                   
+    ~    |  x z { u | x v w   z |    v u }   |  
+ ~    z z  z   {  | | ~  | w z x    ~ 
+           z w   {  } r l y } x z v x | u v w y t z } v | { | { { z x n t | z v y w y y ~    ~ } s ~ w |    z }  s y   } {    ~   ~   | x    z y      
+        y { w s { w v w   | r x |   } }  {   y |  }  w y t v {  s u r  u ~  } ~  | {                 
+      ~         
+         }  |   ~    
+    }                                                                                                                           
+      }    | { | | y t v { x w w { y } 
+    { }   |       |      |     
+   } v }  }  ~ ~   y  | } | y x | { w ~   |    ~   |                     
+                              
+                         
+ 
+                
+       
+           | 
+        ~  w x z  
+ |  } ~ z  } y   z s w | y q x t | q r s r l o k m r r z t o r m w q u y o q i k o x p v u j o o s q i k l } { v t r v x p t } r n p v i g m o m m m r q s u u m k m j x s w y y }  }      {          
+    {        z      z }  w s i ] S A 4 $                                                                                           
+                                                                                             $ ' - 8 = G I L R [ e m o w y   }        ~  } 
+   w |     
+                  z       }   ~ u t ~  ~ u  y z { ~ x y      ~    {  | |     ~     v             
+ ~  
+ {      x  w m o s t r { x z u s s v x   w | s y v x w t | u y x w    w  
+ ~ { } } y | x y    ~ z x { u x z x {  | } ~ 
+      z {  | {         
+   ~ |  x } u y q m m y }  w q { x ~ x   
+ ~     { r ~   x   { y | z z |     { | {      ~                 
+    
+    
+ 
+   } 
+          
+   } ~     
+                                              
+ 
+                                                                           
+ ~         v r n t  
+  z 
+  {  x | |    |     | y  
+ ~   z x   { z 
+ |   x    x   r     z   ~ | y { ~ t w u w {   }     | u }   
+              
+                                                    
+              {   
+      
+     
+                 | z | |  
+ y z ~ v   x |   ~ |    | t l x | | | r { x j y v u u w n h n u w u m k g m x y x y t m n q n u y z s w v t q u t t v x { x s u o u r z t v x p p m o j h p i m n p s n n k j w s u x  y } { w             |       x } 
+  
+   z z    |   |  | t q g O @ 6 $                                                                                                                                                                                        $ ( 2 6 = C O P O R Z g n x s r | ~   |   
+ w z } x v  | v  { | }           
+            
+ | } x ~ | |  | y v { { y  } s x x w z {        |      v     ~ y  } v y w r y |     z {      |    
+   t r w u } | | w  } q u  | ~ q s u m u t ~  y y z ~ y s z z } | { y z w z  ~ y x w u   
+ }   ~ w q } }  } v  x  ~  { |  |  { }  
+     x v  
+ | }   ~ v | v t l o x    {  } | y  }        } w t z u  w p { z  | ~ ~   ~   }         { { {      ~ }        | 
+                  
+    }    
+  
+      
+                          
+                                                                     
+                      y z   z  | { } u v t } {  { } x t  ~ z      | 
+  ~      |    }      ~     | x ~  ~ z } ~ 
+   }   | z ~ y | } z y t | z      y t x    ~                                   
+                                       }     y     
+                   
+   
+  
+ v y r }    }  ~ } ~ y ~ 
+ |       z w s t z z  | p u u z u y x y u m s w z r t m p v | u | z  w p q r p q v u  y m z u q v v u x  { u k m t v u m l v o n t h i h l p r u o m p l j s t x x u s t u y {        z               
+ 
+ 
+         x |  | l ] Q E 3 %                                                                                                                                                                                         * 2 : C K O T T \ ` l f r } z     z }  ~  y  z v   ~ 
+  ~ } 
+ 
+             ~     ~      { { {  z } u o l x y   | q w z  
+  }      
+ 
+ |  
+ | x      w } y   ~  z ~     |   {   |  y  ~   
+  |  }  ~ z s | | p p v | |  }  z z {  z x v { t z u z    t y z u u } z ~ ~ z {       
+  y z    w 
+ 
+     |   x w x   }  {    
+     {  } w r s o u ~  t y }  |  x x    y  u t s ~ v { z w y x n u t  {  t v z { ~     
+     ~ z   }     { 
+   
+  y {                
+ 
+     
+   |   ~        
+ | |                                      
+ 
+                                                                         
+     ~        w }   } {  | x p n | x     }  z  
+ ~        | { 
+    
+  z  
+ z | y } 
+  
+ z    z     ~ x z {  y v } }   y x     v u    z ~                  
+                       
+                                     ~     |              
+      
+    
+ u x { y       | |      
+     | t r p { y t q o q z z x u u r o l p z t t u { u z z q | y  ~ u r x k s x } ~ { p w { n o p v   { u r u p k z y p t x n t l l w q s r u n l { u o w q s n z s r w   |      
+    ~  { w       ~           ~    x  m a N > - ( 
+                                                                                                                                                                                     
+   , 5 : F L J Y T _ f n d w  {      
+ } z    z ~ ~ w {          
+        
+   
+         | u { { x { u r q l p q {  n |  
+          | w w  ~ { z     v } | }   
+   {   }    ~  ~  z   }   | } |  | x y { s { x t j r s v u { x ~ { x | z u t y s r r y r p x w | | y w ~ t   { w z v z 
+    {  { | v | x     }  
+ z  y z | y  z | w |  |   }   v z x w l w s r o v u x ~ z | { w |    y y s { y }  } x q q z u r s n y z w x  u y {     | ~ x  |  } ~   z } z       {   z {  
+ x     |   ~     
+ 
+     ~ } |     
+   ~      
+                            
+                                                          
+   }                      
+   }  ~     } }  
+ w |  ~  r u w z } |   |  {   | ~  
+   ~ x }   
+ t    {   u v  
+   z      }  
+  w } } { v { z v { { v } w u x | 
+  | ~ ~ 
+    
+                 
+                                 
+                                    
+ ~ ~  
+    w {    x   
+   }  | { x t     { v } y y  {   w    } s t w  t p u k r z n r x o q n s w x p q p y z | } { ~ y  w q t r x } z x z z y | v q s v x  } x w w r r j w u v v { z z k l q t x u o r j q u s t o } w  x u  {  |  } ~   |   
+ v |      ~   ~  |         
+   z  
+ p b O > 0 &                                                                                                                                                                                       " - 1 5 ? J K T W _ k n s x | {       t { u      v    z                  
+          } ~ v u r u n n g m k y } v    }          z     }   } v  z ~ y  } }             } }    }    y y y x u x t z | r x w u p s w p p w { x m w {  { o n m w q r u v u z y  v x v | w y v }      } t { w z v     }    | | { r y   ~ ~ 
+     w w v | | y v y  y s t {  z ~ | } | y y ~  
+   } 
+  z z | s q w  ~ t y | t v |  } y { v z 
+  {  y v |   {  y y }       y y x x ~  
+   { w       {  
+         
+  w y    }         
+         
+                                                    
+                                                     ~ ~ } z           |  s x t } y |  { |  y  z v u   { ~  } 
+ {              
+  ~ 
+   }  ~    z x   x | } s z z  } y {    ~              
+                            ¡                 
+     
+         ~    |   |             z         
+      
+    y v  z { u r u } {  z }  x     ~ }   ~ } w z z  x x z s t { w } ~ z { y {  r y | q s ~     x ~ { q  x | } { y z w w s { { z  v  } ~ 
+ z z t x s s w x v } | s q s o w r q k n p u s t q x q p u x { | ~ s v  v |             ~      
+              w ` Q : 2 $ 
+                                                                                                                                                                                      ! ( 3 5 = O N S T W e k n v  z ~      ~  { w v u |    w  { }                
+    ~        | } y t k n g c p o u t v } v y  |         }      }   ~  z      z z          
+  {  ~ z y     z ~ { | z   y y   | { x u t u u   s y u q  u p m s r s z t o u s w x x u { z     x |  { z ~  z u y   } 
+       q y   ~        z } v   } w  
+   z   
+ t    ~ ~ 
+    z ~   x t z t u s x w p { ~ y w v w q y u s ~  y | z x } {  { z  |  {    
+  z }  y ~  ~    y { ~ }         }  } |           
+      
+       
+ 
+        
+                                                          
+                                 ~  
+ 
+    ~  |  } |             y ~ | r u x } x   
+   v |  }  }     { ~  {  z    ~  |         }      } s  z y   { u z   
+         ~  
+                                                           
+           ~            z |    x }   {               w  
+ ~ z s r w y t y u {   z    z  |    ~ z w  t u y | | v w | }   x ~ y {  { y z { x t  x v y r r t y x t { | | ~ w r v { u | v s t t | { { t u r z v s w ~ | u l l o m n u q j l q u t r s t r | | x x  x t v v ~ ~ | t 
+    |  z  
+    ~  
+   
+    
+ 
+    
+  } y a N > 0 "                                                                                                                                                                                      
+ " + 2 5 9 G M U V ` a c p v { ~ 
+ }    {  z } t w  r w w w y z p                   
+  ~       | t w p w j h ` d j p m w w y  y      }     }   t | ~ ~   } x x      | }   ~    
+       y t } }          ~ z z   {  x w { u q | z } r r m r x r x r y | { z r u | r y  | z v }    x v z p x   } w         |  w w {   |       | {  y   ~ |     
+   ~ { z x ~   | z    } ~ w y y x r y m z u p z r o u o u v u z z ~ } | x v y }   ~ |  w u s z z ~ } } }  u y y    } w p y w      }    }  } }   y {  y      }                                     | 
+      
+                                            
+ 
+                       ~     
+ y 
+  w 
+  
+   ~      
+  
+  o | | x  x } ~  ~   w t |  } ~ ~    u x y | |  ~   }          } | |    ~   w s w | | z z z ~  y } { }                                                          
+            
+     
+     
+    z   
+    { } |  }                  
+   } | | { u r w { x | w { | | t ~  {  
+ { ~    y s {  | t { { v  | z ~ y z z  u z y {   z |  { | z |  t q q y  t x u w {  | v { z s y {   z t z v v l q r | { z q s r s u z u t p r z  t v u o ~ | | y z v t x y z z }  x  }   v         
+  
+           
+  u a H A , 
+                                                                                                                                                                                      
+ # ( 2 7 ; B K N W b j i r s v {      w }  y q  { p s z t z } w y y }      
+  
+     
+      
+     { v t p q r g h f e g i o y y z ~           ~  |  t } y   | x y v ~ }  |  ~ ~  x y     }       z | }    
+      { x  } { t { o t x u x w o s t s i j q l r r n r s o t s w   z | z u {  
+  u r x u x v   } { y } } z x   w x r  p v x u ~    y  ~   x }  { w t z       ~ x x    y t y  
+  q w { x w | p o n u m t n r y r z } s ~  {  t t v |  z  z | ~ u s w ~ } y u w ~ 
+ { u w }    z |    | { }  
+    z  y t  y   w y } { ~  { ~                   ~                              
+ ~ }        
+             
+                     
+ 
+            { y              |   z 
+ 
+     
+  } { ~ ~ {  x y v   ~ | u {   w   ~ w   |   { y   {  ~    }  ~  }     |        { y w y y v ~  |        
+           
+        
+           
+      
+      
+                           v  
+                   
+                     
+ ~ |  x w  w z z } u z   u | z z v z } ~ } |  | y {   | x p t x | p u | r z  z y x t  s x   ~ } 
+ x   } s j q z r p q r s p z  } | s x z   y p y s x u { s r y } | x r s o u z  z v z ~ z m u x 
+ y } |  ~ t t w z y u r v y    w  z ~    ~ {  ~              m a O ; +                                                                                                                                                                                       
+ 
+ ' ( 6 7 @ H N P Z _ l k j y {  z } z z { v r x v y v l y q v u s p w r s u        z w z     ~   w }    x p y s u o o i q n p _ b i r m y x p    
+ | } {  |   ~ { s { x r  | x | t x  } z  } u y z y s s w y  ~     
+   { y  x { ~ x { t x  s z w q x u r t q t } { m w  { l m n u s n l q w n v m q t o m l s z v  | ~ r x o q { x { | w s v t ~ { }  v w x t v {   w } { | | x | | }  x {   w y y 
+ | | { ~ ~  z y {  } p p q w  | t q w o w x q y s r u x x r u s x w z u | q y w { z |  { z z x u  z {  v y w p } ~ u v | }  ~   x } | } x v     
+ x } ~   ~ k {  v p w x t }  | | } x r  z |  
+   }     
+   |                  ~          
+  |       
+                             }      
+        
+     ~  u ~ }    
+    x   | 
+  
+ z v          x u w }  x z {  y w  |   }   } z     
+ y t { ~ |  { w |   } z    }  z    
+ ~ y z x p y | z | y r x  
+ |    } {   
+     
+  
+    
+                             
+             
+                      |  {         y   
+ ~    
+                | ~ | x u v z x z { x | | { y | w z x | x    } y u }   ~ v s q q x u x  } { {  | u w x {  
+ { z } x y ~  x s v t w t p q | } w  | { y w   y y  } z ~ { t x u r z y  } o l o w q x  y z z  }  y t { 
+    | t o s r | w t y {  u z    ~    | ~    { z         w f S D 5 ) 
+                                                                                                                                                                                      
+ & , 0 4 < J T V U V d i k s l u x v x r x u p r x q i m p p u o s t t l u w  |       w {   ~    } u w z  y v x o p r g g i i h h c g i t l r t l q t w y z y p t r ~ 
+  } u u p l u z v x x s { s q u u p s t v y r l u x ~ 
+ 
+ ~     { x {  p p x } w w | v t x y z q p n y s q p m v x r h h t t r l j g j l q r q p r g h m p r z y r q u t { | } | q s s | o k q y q q r o s |  z { o t u u | y s r { y t {   x z w  x |  y z | w z y  t w q s s s { { x w r v p n p y | w v t j o o n r q w | r v p p o q s u } } x y  } } u s u u q ~ { x w r y v s r r m y p v p v x w { z z w s u v  z k q q x w } s r u { y z u u x w | ~     w |  y    } z x     }  ~  {   
+     |   }            |   
+  
+             |       y   z  }   
+       {  v y           ~     |    { } w      z   
+ 
+      | | { y { p n }  { w x      }  w       x y y {    { {   | q r    | }    ~    { r t v z x w o v r | } ~ { | w {      | z  {     }           
+                 
+                   
+                  |  }  | x  
+     
+ 
+             
+           z n x x x } y z r s u y y z z  } x  }  ~ } z } ~ x t l p w n x w v s z { | } | } s { ~ y y y n u v t   s t t v v s | } u x y { | x t x z z t z }   x { t s o t w q w x q o { x { | | x q z z {  z y {    }  q l u v { r s w v x w u    z       ~ {  |        
+ r ` O > - %                                                                                                                                                                                        " ( / : A E L O U Y \ e m q o r s q q r i h i j t s l k n i p ] i j k j i p { k x y { { | x q x } s q x  y z q x } w q r n q m e b f h h h d ^ \ ` u l t z | m m p r t r k r o o v w r k s t p j  r s u s t s p l g o p u s o q n n m v v r o r y s u | s x } p p t x p u v i o q r n q q r r n n i l i q p j e j m h p h e r j p s m l j c g g d k t t i r e q x t u n n q o t x k p m r m l j n y { y r o i l l r { t {  w u y } } z q j m s y x u v q n t y z x t t k m q r u w ~ n o k i f i r p r i g h d f v q m g i e n s r u q s v  x y x y y o r x u s r n x o w w u x s v d j u t r r u q y y y r o k m s v m n p p u } r y w x t u y r q r t { x | ~  } z { }   } t i m | w x | w     } ~   | w  ~  y |  } 
+  
+  s |    
+      
+    ~   
+  ~       ~     z x  v  {   | |  
+  z ~ {    ~  y ~    ~ | x y }  { y | ~ } x z z r z y z           z } w u z q q y y v m u } ~  | {  } x x  | } | t y t w } z    v   w r z y            { l n p w x t o p k w ~ v u u { p y v ~  ~ {    ~ |        { | ~ z y ~     |                   z      ~ 
+    
+         { x s  z z |   ~ y t q u { z { ~  z  | ~ } v   { x   } ~ }     
+     y ~ }    |  z r q r u z w m w u v s w x { { z v s w z  z x u p m r l p n s z w q q y } s n u z x y | v q o w { y x x v q m v { q q y y x u u x t r x v r u t y s v t r z x t t  z s z  u r  s t o y | } ~  | o x   x v w r s y v t z u t v z z | ~ m y w   y }  
+  }        y y r b O > . $ 
+                                                                                                                                                                                       & & + 9 > B J M P W \ ` f b j p n t g d _ e _ c j h h f ^ a l \ Z f b f c e k i o m g m s m k k m r l h v v x k o n j c f a a c g d \ b h ` Z Z a c l q o n l e d q k i o j k o l k k k i o t h c s r o m j k f c f _ n q k l i o j m l l u p o q i l i r j j s q t p s m o n j f l k g l m q e f q h h b f t k ` a g d e c d e c j f k n e ` ] f ` d e i ` d g j i j t s o n i q q l h i l j i e h s i h i j i g d d l s w y  y v l x q n f c r w g r y y y r j h j n l h i j k n o q l i k i h l l g c f d d d i o o f m i l k o q h g k o k r u s j m o k o m t s l r n k f i n m o l k p r n r p l o s p d m k i q q r k t l i l j h p { q u k l i p w o q v y | } t j r u w | p l h k i i q u v   y w  
+    z  { } z  p y } } y z } { z      
+ }  
+  } |    | t x   x v v v }  ~ | s p x z } t   z y   z q t y y  } {  v w | w x y  { z t t x  v n | w u t o { y s { ~ y z      } z w | s w s z u x n h e m w w p y v p z t } { u n i o n v x r o z  t 
+ w x p u x  y s u } {  | { | s o i n m t r o q q s q w l l n u w  w { } z    ~ } z  r u {  
+   z       y ~ z ~      | 
+     { } 
+ | {  |      ~  {     }  | }  y v u w  } } ~  } w w q t s u z q w { } z y z   x x w z y }  x x x  y { }    y  |  { }  ~ ~  z } x l y  t w y y u u x t y }    v t z v t q z n p n i n u n y v t v s v o o q } x | w h l r o x y x z o m r o o x r x x x { y q p o o n s p r s p y w v x v u l l q w  t r t o | x | { |  x z x }  | z q s t p x | v v v s r s o t w o s w t { z |  x z {  y ~   
+ } o n o U D 7 ) !                                                                                           
+                                                                                           
+ 
+   $ * 6 9 = D K K R T ] c c _ f f q k [ _ c e k c c _ g _ ] Y Z U [ Y Z ` ^ c i d e c ` c e i n j t i i b j d e f _ o g ` _ ^ [ ] ` Z W Z S S Y \ [ _ b e ` d h j d a c d i j k e ` f j ` e i e h j l h ^ ] g ` c j ` n c ] c a e f d m g k q f f h f h c d g c e k f k g h f c e j f d g c _ a f d b c ` d h a b ] ` Y X [ _ f j i e ^ e f Y ` i r c ^ ` _ [ b g c d g k m g a a l n e a l l c g f h g a g ] a h d e g l q s o s t s w t j n v u o m k m l q l t h b a j g e i h h j l g i b d k k b g d c ` a ^ f f a d p m m c e i f e i m l ` d n d i m f g k f j h g i e h d i h r g h j r k m o a h e h e j e g d e ] f h d _ p c l m n d k k i b m v q q r t y q m f f l m r q s c l g f i l p | | w s | x { w x y t r m r { r s w x { v w  ~ |  
+ } y y s  } y p s u t o y p q w { x w u | }   y r q u w { q q u } { p s t s p r n q s t s w w w n m q y z w x x x } r u p n m i s p u u q x v x u p s { | } z z { w s q { w r k h m n m k p r l j t p u l j h q l p s p q f p x s w x | x x t y p o x z } z w t o q j h j j k n o h s l o t m m l i u p o p z { | z y { { } y v y ~ z z  y {  
+  { z z p v w   }  { z       ~   z x  | { | 
+ 
+ } { } t { t | }  { { w q p m u v s {  | | | x w y q s x r u v w v | x y ~  s m q |   
+ y y { | ~ w s u { z p  v v y u k v t } t w w x w s s v x v m j o m q x x x p p r r z v m p q i f c f l g o o v s o o n m k t o q m o z x s p o v u k v k k l s u t w u v o i j g h k q p o n k w x t r u o l e d s y q e m j t x x s o s q l m z  z w m x u j n m l n q q p u s o y n l w v u o z y y w q | z x } } | t q i ^ T B 4 & 
+                                                                                                                                                                                       
+   ( / 8 8 < @ G M N N T Y a \ ` ^ g a ` d ^ [ [ ^ _ [ V Y R T P Y U [ [ Z W a a d _ Z _ [ ` h g i g c _ _ [ c ` ] U W R Y Y U T W V Y U V S O O O R V _ a ] b U e \ S \ ` ` [ b Y _ a g ` ] _ d g a ^ c R X ^ Z c d [ ] ] X Z ] ^ [ ] a b h b e ` ] c a \ a c ] ] \ d f _ c c h i d \ \ [ g b ` Z Z W ] ^ ] X Y Y \ a V Y ] Z Y X Z Y W S W W ^ ` d U ^ Z b ` ` g ` _ \ ^ ^ \ \ d j d c [ b e b \ Z _ \ c a ] f j f ^ a ` a c d c l k i p f a j m e c a g c j d d d c g c g a i m a c c b e ` b a ] ] ^ c [ X ] \ [ Z V Y c a d [ ` b b i d e a ] a d b k i _ a c ` _ a e c k h g c b i f ` a c a a ` b ^ c ` d _ _ ` ` b ^ Z a \ W a ` c c e c d b e c l n l h h g f _ h j ] e m j j n d e a b _ k p r u k h m j i k k m e g n n s s q p m r q m u w }   ~ t v u y r x s o q o r n r q x ~ z r n x y v s t p g l z v p m n r k w p p q l f m q c m t o p q t l q z l n s z r s l p r e a i r s o s m r u n r o o n j l y n o m o n u v k d \ c f h k h g d d l ` ^ j k i k a j o k s i k i k u r q o m h g r p w t o k o k i i g h m u o j h d l k n m k e m i o l s v x y t r v s t v z w t p v |  t s q { s t o y x t q r v }  { s {   y w v x v u n w z q q q y | v }  { i o y | u r { u o q k k m r u } s u x l m q o v s r q m t s { k y u  t p r { w w s t u y  u s l x v y n t w t t s g o o l p l n p j k c i q r p d g m k r v o m o n l z r r o n j g e i ` b h k o g g h e m a r g l f e j o i h k r i g o n g r n n t s d o k d g l n o l k q x s m x j h k o m g k i p o ] g g f m r p j m k o r u y l o o p q h k l k k k k k s n o m i q q k n i m u { | q v p z | v t o k c U G 9 / & 
+                                                                                                                                                                                          ( ( 3 9 @ = A H I M P P V S P R Q X T S R O Q V Y W R S P T N Q O T M R N V Z [ U T V Z V U \ Y T Y W [ [ W X \ T S T X O J F Q O K N L K J K H M O U T N ] S R T W P R [ X V ] \ X ] W R Y Y Z S T W T R V W U W U Y b R V R V V W P P U S Y Z W Z X ] \ Y S X Y \ ] Z Z V ^ ] [ W U V ] Y T T U Q T W V [ Z M T R P X S U V M O M L O K U Q X Y O X V V S V ^ [ Y W Y R U [ [ _ Z ` a ^ ` ] T Q X Y ` Y [ _ ^ V [ ^ X _ Y X X g c ` [ a a b ] Y [ [ Z Y d b ^ ` _ b b ] a f b _ Z X X [ \ X [ ` W W U ] [ W Y \ X T X Y \ Y U Z V a _ \ ` \ [ a b a a _ _ Z [ W ` _ W _ X ] b [ Y Y ] W Y U S N X W X V U ] X \ Z c ] W U ] Y Y V Z \ X Y ^ \ a _ ^ h _ [ W _ b f e a _ \ \ _ d _ i d a [ b Z ] c t l a k l i ` ` b d d j d c g m l r j j l g g h s r r l g o o k m r q i l s o j f h d t r i r r q r q p n f g g h m k c h d u j g t l g h h k p l i c n n l j o h i w u f j g h h d h o g q n k k f g e k l m e g b f j ` j o q h j c i _ ^ b e k h m e Z a c X _ d ` ` j ^ l e j k d e d e f d l c _ e j k e c i f j j [ ^ e f h a e e d Z [ d h l h c e c d b b q q i n l k m j n w m k l l s q n k r m n t n b c k o p y m x p i s y v l n q q r p l j s r j l h p q p p u q h k p r r w w s q f a j l g t r n s i f g e m q j i f l l e \ m u p m h m f h l m d o m q l j l t q o r i g f k g e k g ` d h b f d a c ^ g f d i i g h l r p h p i r p m g i n l f ^ _ b e c e g f e c [ \ \ h e e Z b g l h j m h m c j m a \ l q u m a e g i o c h p m f i s g o l f n b ` g g n j i d c i j n d j g d b h f r q s s t t j u p m m j g j e b f m j d f u o h h e f n m r k m n y z w k b f \ L < 6 +   
+                                                                                            
+                                                                                            
+ & . - 6 : = ; ? B D E L M K J L G R V L J G F G K R I L O I D E D M I H I K P M M L M O K L Q R O P N N O I M P I H F D H E D G J H D G C D F C I G B H P O L I K O L N S N K O L O I G L L P R R O N M N N L F M Q M U V O O J M M K K F K U U V Q T W U L L W U V \ O U T X W P M L M U L N O M Q L M M M K J Q K I O G L P F D G I N H L M M L D N R I N L V V T T Q M N M S M N V R X P R T T Q T V W U R T T O R R T O Y Z Y [ ^ X P T W [ U U Y [ \ \ Z Y W W X S U Z Y W U T V V T Z Y W [ Q U N W Y N O R Y Q O R W X V U W W W W X Y T Y Y W U \ [ U [ W W \ W X T S [ Z Y W W S O Y O P U Q U Q T X R U Y T Q O U W S T O R T T T X \ ] a ] [ W Q X a ^ T V Y V S X ^ T R U \ V ^ W W W Y f f X [ g d \ _ ` ] ` c ^ ^ c ` _ d a a X Y ` _ j l g _ f h f ` ^ _ d b d i _ a ^ d d f i h f h b c p j o k f e d i j g e d c f g e b ` _ a V g n o ` b g h a Y W h k e ] [ ^ b a e j f a ] b f k a ] a c b d f a ] Y ` a d b m d d e Z [ Z T Y c d j k c c ^ _ ` _ a b e _ \ [ c c c ^ a e ^ a f c \ [ b a [ _ ` b i d [ T Y f b [ [ ^ _ ] U V d h f ] a ] \ \ b d g _ p i d j e q a b _ d d g c f b s n m k j d b j q g f g j e e f i l b ] b b m k k g n g e q e e h b c p j c g h l f j k i l i ] b d \ _ b f o i f g f f i d f ^ c c \ X Y b g c g f e l l h ` a c d b h j h b b b _ b f f i f i a Z g ^ a ] b Z c b b e ^ d a ` b e k e ` ` ` a m n ] a b d Z ` ] W Z ] ] d c f ^ X \ c e ] c ` ] ` e e _ ^ g j a \ \ c \ _ e k k h f _ f h ] ` h o _ c g f l e g d a a a k b d c ] d e a g c g d b _ f h t e c i h m r p k q l k d e _ g g f d a e l g a b f b d o g h g k n o o c ] Z T K ; . ( #                                                                                             
+                                                                                           
+ 
+ " $ ( . 1 9 ? > > > C F E B F D @ F K C E C B ? : > : > E A @ B ? B G A A F C B A D B C B B E B D ? @ B B ; A B B A A < A ; ? E B D B = = @ > 9 > > : : C E > C @ @ B D D D B @ G F A @ F H C F H H J E F E B A J G A @ I H H D F F G B G E G H H F J M B H F I G E J E F E F G D B @ F G D B C H J I B @ H C H F I K J K = F C > ? E H E D = @ D C D J D D D ? G K H F H I I M B F K P Q N J O L G K C D K I K J J K I K C M T P M S T J P P L O R S O P V O P M K P K L R S P I M Q P Q U M U Q L I P K N I E J I I N G M U R Q Q L K O I Q L Q P P S Q P O N P K P O P Q Q R P S U M L K K T T Q F L P U R Q P M L I O H O J K L L L P V P U P O Q Q O T T W Q S S W P S S W Q Q U O O J Q M L T T Y Y Z X R W U W Y Q ] \ \ ] Z Y S R W Y N ] [ Y [ V X a Z d [ ` Y W [ W c X \ ] d d \ b Y V ` W Y Z [ ] _ ^ _ [ ] ` [ V Z a \ a [ Q Y ^ V S d _ d c \ ` ^ ^ X [ _ _ [ Q Z ] [ Z \ \ a Z Y Z \ a V \ X _ Z ] \ W X Y Z [ g c ] Q [ \ S Q O R V R T Z \ T U T T ] Z Z \ \ [ W [ R Y ` X W X Y W \ a Y P Y W Z X Q V Z [ T V S Y V S X V X R Q S ^ ] Z Y [ T U R R Y _ [ a \ Z b ^ b Y X ] \ ` ^ ] b e ` Y \ h i e a a h h [ [ b a ^ j e _ Z U W U ` b ^ X X Z ^ h b ] X [ b e _ e b i e d a ] ] Z a [ \ _ Z Y W [ f d _ ^ ] X ` _ V U U W X V X \ b ^ ^ d ` a \ X X b ` V \ \ ] b Z _ Z V d f ^ U _ b _ Y X U Z V V P ^ [ ^ Y ] ` e ^ ] ] b \ ` Z c \ e j _ ] _ [ X T T [ U ] S T Y a \ [ T [ W [ ] e [ X _ ` Y S c ] \ _ b c c Y \ _ ^ i a e i f Y Z Z \ [ Z ` ] c b i _ [ ^ a ] ] W ] ] ` a Y \ _ a c X \ [ ^ d a b _ _ ` h e f b c e n c c Y _ ] Z T \ Y Z \ Z Z c c g d \ e ] X i f k \ R K F 5 , % ! 
+                                                                                                                                                                                             * , - 6 6 1 9 9 : < : 4 : < 8 : = 9 9 > 8 7 3 8 : : 8 ? < : < 6 : 6 9 8 8 7 7 8 ; = 9 ? @ : 4 5 8 5 8 8 9 8 ; ; ; 8 ; 9 9 ; ; < ? 5 7 9 8 4 < < 5 8 8 ? : : < 8 9 ; > > ? @ B > 9 : < = ; = < ? C @ A < 8 9 < ? < ; ? 7 ; > : ; B @ > > ? ; A B @ = < C B D @ E D A = = = = D @ @ = ? = < @ = > @ < 7 < = A @ B @ D A ; = = ; B A F B < < = = F A A > : F A B B = = B @ A G A @ A B E B > B J G C C B A ? < A D C B C D E O H E H E A G D F F I L J D G ? E E H G A L K L H = F M L H N I E A E B G B G B A B A A I C H K O I B B J G I E F J J N H G I O L F H J D E J F I I H J I F C C H G A : E E F C G I C = C F F H C ? L J I E F N J C E B F ? H I L C L L Q S K N L J L N O D D H J O I N T T R J L M O M Q N P R U Q T Q O P N L P P J R S T K P O W M U Q M T Z T S W M U ` X V W R V W Y T T T U W U R X Z [ [ Q X R V P R S V R P W \ a S V X X _ R S R U W N V T Z U T Y S M Q T Y Z S Z X U R Y Z P V Q X R Y Y R N N O G O N L R M H Q Q O Q P O L Q T R U U S R P Q R R S T L O W U W W U T R O O M Q P R R U O J N J M P P S O Q S T Q W Y Q N R X S ` \ U T T V T N T W S ^ P Z \ e W P [ Y \ Y \ Z ` [ W Q Y X Y [ S V V S P R \ ^ W V Q U ] U ] U T T [ _ ] ] V [ ^ d T W W S T T X \ ] Z T U U Z Q U U P R P L O R X X W S Z U U Y ` ] Z Q O P Q T T \ S L T O S X Z Z X T [ Y _ U X U Z U R P R T W X T W ` _ \ Y ^ [ U U W a \ [ \ \ Z Z P O N U S P R N Q Y S ] ` Y ] U T T ^ [ W \ [ V S Z V Y [ ] X Z W Z e b _ Z [ b [ W V Z [ [ X Z V \ T Y W U X Y R [ [ V V S b X R V T V P W Q R ^ [ [ _ Y O P ] ^ [ V _ h \ Y Z Z a U P T W W U X T V Y a Z U Y Z _ b ^ U K G G B 1 $ ! 
+                                                                                                                                                                                         
+ !   ' + ( 1 / - - 3 4 4 1 - / 3 6 3 4 6 5 8 1 6 / 3 8 ; 4 4 5 3 8 4 4 3 4 3 2 4 - 0 4 4 5 4 1 4 8 1 3 2 5 1 1 2 6 3 7 1 4 5 6 1 1 6 8 1 5 4 3 0 6 5 2 - 2 5 5 3 7 4 4 6 9 6 9 4 8 7 1 2 1 0 1 2 7 4 5 4 4 0 2 2 2 6 4 3 6 7 4 3 6 4 7 9 9 : 6 ; ? 6 6 6 : ; 8 7 7 ; 9 5 3 : 7 3 < 9 : < @ 6 3 7 3 : 9 5 1 6 6 4 < 9 8 7 7 8 < 6 8 4 9 < ; 8 6 4 5 6 5 < ; 3 9 = : : 7 ; : 9 6 < = 6 5 8 6 9 9 < < ; < : ? @ : ; 9 ; > B A < 9 ; D A > E < D ; ; < = ? @ ? = = B F F B = : A C = 9 @ E @ F B @ = < ; : = @ < ; = > ? 6 : ? @ = < : 4 : 8 9 C C ; ; = < A : > C B > F ? > A A E E @ < > A @ C ? > < 7 < 8 ? B > ? A ? : > B ; ; : > < ; : A < = ? A @ @ @ ; = A F A > C E C < A ? A A B B D A C G F I A B C E @ < E G H D I D E B @ C E J H E D J M B H L F = C C H D F F I S R I J G K O T I H J J M L O P T P P Q I D Q S P M J H N Q P P G F K E I Q R R P H F L K I J L L L O L P D N R L N N P P N G G J M L Q T J K O L L M R R M F F D K J J G E B H K B D H I E G I M H G E L I K K H M L D L L G P I L I H D E J N T L K M E D C H K H E J F H U P J F K G F J L M N I I O N N P I P G N Q M S V R L H L R M K T Y Y W T O P P P P N Q Q N J N P N Q L P N J J R M O Q X W V S O T T Q P H K H E D G Q L Q F I G E G P L J J G K L E L R O M T J R I P Q M O J M T M P U K N X Q P P O P Q L P P O L K J U M L N K K K R J K R P L Q M O Q T Y U Y R N T U P Q N P M G G G G H J M K O P K H K G M P P N M P O T Q M T P M P N R \ \ R N V ^ U U S X S U T N K N O V Q X T W S R O O G K L W T P P L H I M P O O U S S P O K U P J T U T V Q S V Q Q O Q M T Q J O N M M Q R O Q O R K J > ; 6 + !                                                                                                                                                                                            
+ 
+ " % $ & ) - ) ( * * , * + / 0 - / / , , * - * - 3 0 ) + . , 2 , , ) , , , / , + , + , . . . 3 0 - , . + + + - . * + + - 1 . , , , / - 2 , ) 0 + ) ) + - + ) 1 0 , / / / . 0 , , - 0 * + , - 0 0 * + - . , ) ( - / - 1 0 0 - 2 + / / + 1 2 7 7 2 / 6 / 4 - 1 / - 3 / 1 . 0 1 / 3 4 5 5 - , 0 . 0 3 / - 3 2 , . / 5 0 2 / 0 3 1 1 . 0 0 / . , / + 0 6 1 : 4 1 5 5 5 0 7 / 3 3 5 . / 6 4 5 3 5 4 . 2 1 1 4 5 5 3 8 4 9 ; 7 / 4 5 8 8 ; 9 6 4 4 1 ; 9 : 9 9 = < @ E > 8 ; ; 6 7 9 8 : 7 7 < : 9 < : 5 = < : 1 1 7 3 9 8 9 8 9 4 5 1 8 7 5 5 5 4 7 9 2 ; 8 5 > ; 3 7 9 ; 6 : < 8 6 8 4 7 = < ; = 9 6 4 2 7 9 8 7 8 4 5 3 8 9 6 4 7 8 7 9 6 2 5 7 = ? : 8 7 4 ; 9 7 7 8 7 7 5 4 < 9 8 8 5 7 9 < ; ; < ; < : = ; 6 : < A : < ; @ > : = ; ? B = D ? 9 ; A B A @ > : ? B B C ? C = A @ C @ F G B = @ B A @ B B E A > ? ? > C G H C B A ? @ C E > = < C = @ A B C ? : @ > @ D E ? B B C D B B F G D C G C A < @ > @ > ? @ @ B I D E F H J D A ? ? C @ A E = ? B ? > ? ? ? < ? B B B D E B C = = = @ @ = B G C > C D ? 8 : @ A D F F ? ? @ ? C E @ < @ F < ? H G F C A A = < > L A B B G E @ D D E H E B C C D K J K B E F G E E L L E B D F A A B D ? B I C I J C C E E I J G G E G G D F F F H J G C E B E H D E J F C A = @ A C L ? @ @ @ C G B E H A F E @ F I J H ? E F I J E E > B H H J I L H D D G @ C D G G B F H K F A C H F D M L D L K B D F H N O K H E H K E H A @ C E A ? F C C F D C = = A D @ F E E F H S M H H I G H M H L I N S G G I K I G J L M O N I H E O S K I I F I D E A A > G K F B F @ J H G ? @ E D H H K M H Q Q I F M M L Q M D D H H F M M K E C E O G P L N J F E D ; 5 1 + ) 
+                                                                                                                                                                                             
+    
+ ! $ ' % $ ! ! % % # % ! " ' ' " & " % ' ) $ ) ' ) $ # ( % ) & % ) ( ' ' $ & ' & ) * * . + & & ' & ) ' ' ' ( ( ( $ ' $ $ # % % & & $ # ) & # % * , ( % & ' $ ) ' ' * ) & ( & ( ) ) ' ) ' ) ) * * * , ' & ' + * , ' + ) * % - - ( * - + , 1 * , * , * - + + ' * + , , , ( . 2 + + $ $ ) ) + , * , , 0 , * - 1 * ) / , + . + & & ) - - - . * 0 , ) - ) ) . . + ) / . . * . . - 0 1 ) 0 + * & ( - - . - + / 0 2 5 4 / / 2 4 1 3 3 3 1 2 0 + 0 . 1 1 - . 1 5 7 , 5 5 2 3 3 0 5 1 : 3 5 6 1 0 1 1 6 3 4 2 1 . / 5 3 / 0 . 1 . , / 0 2 0 + , - 4 3 2 0 1 4 6 3 . 1 3 3 - 1 2 - 2 , / 1 2 2 / , , , ) 0 4 4 8 2 3 3 + , 5 / 0 1 1 / ) - / 0 1 2 5 4 2 , . / 2 0 1 4 7 5 0 2 2 0 / 2 4 / / 4 3 1 . 3 1 4 2 2 2 3 5 4 : 8 4 6 8 1 4 2 3 2 4 : 5 6 5 9 6 9 3 6 3 7 7 9 9 2 8 ; 9 : ; ; ? 9 5 5 7 9 @ < 8 7 : 7 : 9 : 6 8 : 8 < 8 = : 7 6 9 6 5 4 8 3 8 < 5 9 ; 8 8 8 7 : : : 5 5 6 9 < : : 6 ; : ; @ > < ; 7 9 < ; 5 7 9 = 8 ? > < = 9 6 9 > < 7 ; 9 : > : 8 7 ; ; 7 6 > 7 < : 9 @ 7 6 3 6 8 : 8 = : ? ; : < @ : 3 6 < 6 = @ A 9 7 < 8 : 9 ? ; < : 6 ; ? ? < @ < 8 7 9 7 ; 8 : 9 > = = 9 C = 9 8 ; = ; 9 @ < > < 9 @ @ ; 8 8 @ = : > 7 : 5 ? B > 7 9 < = D @ = 9 < : B E D ? C > ? B = > ? A ; : < : ; @ < 8 : = = : 7 9 7 < ; 9 < > = = = = ? 9 9 ? 9 7 = E @ = : = ; : > : ? 7 = = > > D E @ ? : ? 9 9 ; ? F ? < B ? ; = A C A > A 8 @ A A ? > @ C C C E @ < < D ; > > ; 9 7 = > > 8 ; < < ; ; < = ? 8 8 A ? ? @ G C @ A @ A F A C D A C E @ @ = @ @ ; B ? B I G @ @ C G I ? @ @ D A > > < D : B C = : < > C ? D A 8 ? ? < < A @ ? J I C E F B G E B = < C A > C E A @ ? ? > = > ? E A 8 ; : ; / ( &                                                                                                                                                                                                  
+ 
+ 
+ ! ! " " 
+ 
+ ! 
+   
+ ! # # 
+    "  " 
+  # " $ # $ $    ! "     $ # ! " 
+   $ 
+ " " ! #   % # #  ! ! ( ( " 
+ ! & #   ! ! #   % # $ #   ! " " !   & " !    % ' ! "   % % ( ( % $ % ) $ $ $ " # " $ ( % $ # % $ ' " # $ $ ( # ' ( , % & $ & % ' & ( & & % ( ) & " # # , ( ' & & # # ' ( & # ' ' ( & ) !   ' ' % $ & % # & * . , % # - , ( ( $ % ' ' ( ' ) * # ' ( & + * * ' $ + ( % * + ) ' ( % + ) , + ( ( , . , + ( 0 ( ' ) / + % ( + - ) . + * , ) . 0 ) . * ' * . * ' + 1 0 ) + , - ) * ) ' * ' ' - . ) ( * ( % , 2 , ) + ) , . * * - . , 0 / , - - ( ) + . ) ) + * , 0 + * ) + 0 + - * * , , 1 / + , ( ) - % ) ) ) ( , - + + 0 0 * + , ) + * ( * 0 1 , - ' - , , - . . ) * 0 0 + ' 1 / * , 0 , / 5 1 1 . / 0 ) , - 1 0 1 - 0 + / 1 / 1 6 6 1 / 0 0 . 3 6 ; 5 3 3 3 4 0 2 4 1 5 6 0 1 0 2 0 4 2 3 6 7 3 6 3 7 3 0 1 - 0 1 3 8 5 3 1 , - 8 3 0 5 5 2 0 3 / 1 / 1 8 6 2 1 : 5 3 7 6 3 2 0 7 4 2 / 5 3 4 1 4 5 6 2 2 3 3 2 7 4 6 0 / 4 5 4 8 < 3 2 2 2 5 0 5 7 4 1 2 5 1 1 2 0 3 4 9 6 3 4 3 4 5 1 3 3 8 5 5 0 7 1 . 0 1 4 5 4 5 4 3 3 1 2 1 - / 2 7 ; 2 6 . 0 8 8 5 2 < 9 2 6 6 3 8 5 3 4 8 4 9 : 1 : 4 7 6 ; 6 9 3 3 4 6 = 4 . 4 4 9 6 8 9 3 6 1 5 7 < 9 > 5 7 9 9 6 9 9 7 8 8 5 6 5 4 6 3 2 8 2 2 3 5 5 7 . 3 5 7 6 6 3 3 6 3 9 7 9 4 6 3 1 2 1 / 3 0 5 1 2 : < > 5 7 6 : 5 6 5 . 5 8 8 < ; 7 6 9 8 9 = ; 8 3 4 2 8 8 7 9 5 3 : ? : ; 6 8 = < < < 2 3 7 4 3 6 ; : 2 6 5 9 9 ; 8 6 6 4 3 ; < ? : 8 4 7 8 7 6 5 : = 7 9 = @ > 7 6 7 7 : 9 8 < < : < = 9 8 = 5 : 7 5 5 4 8 ? : 6 < 8 8 9 3 3 7 8 6 4 ? ; = : : 7 5 = > < D E @ > 6 7 = @ > @ ; 9 4 8 7 6 4 1 3 7 : 7 3 4 1 / / * $ ! 
+                                                                                                                                                                                                     
+  
+  
+  
+ 
+     
+ 
+        
+ 
+ 
+ ! 
+  
+ 
+ 
+    
+ 
+   
+ 
+ 
+ 
+  
+ 
+    
+  ! ! 
+ 
+ 
+  # 
+ !         
+ 
+   
+ 
+ ! 
+ 
+ 
+ 
+ 
+ 
+ !   
+ 
+ 
+ !   
+ 
+ 
+   ! % $  
+  " ! 
+   # ! ! # " 
+ 
+ ! ! "  ! #   "   ! # $ 
+ " $  
+   & & # $ " #        # ! % # % ! " 
+ #    !   
+ 
+ !  
+  # # " 
+ " " 
+ % % #   " " & $ !  "   $ % " " ( # # # # % + $ $ # $ %   $ * & % & ! % ) & $  ' ( ' ( # % ' & # % ) ' $ ( ( ) # % ' ' ) ' ' ' # ' ' % $ $ % % ' # ( ) ( ( ( $ ' ( $ % $ " , . % ' ' ( % * ) & ' " # % % # # + ( ( + * ) * - # ' ) " " $ # % ( ' ) ' ( ' ( * % $ $ ) % ( ( ( ' & ( ( # # % # & ' & " ( , ) ' ) $ " ' ' % ) + + ( & % * ) ) ) ( ' ' % % ) ' ) ) ' , + ' * , - * & ) + . ( - ( , ) + * + ) ) * , , / 0 / - + * ( / , 6 - & , , ) / - - ) , , / + , * - , - ) 0 + / 1 - . - . + * + . 0 , - + . . , . . , 0 . ( 1 + * . . 1 + , / * / , * . + & . 1 0 , + $ + ) , 0 , . 0 - , / 1 / / - - / - - . / * - + * , + 1 + , / , + 0 . - / * * + , / ) 0 + + - + , . ) ( + ) , - + ) * - * - , - 2 . , . , * ) + / - - , 0 ( , ( - . * - . - 0 , - 1 3 . 1 4 + 1 2 / 2 3 . 2 6 2 3 1 - / . 4 1 . 1 2 1 0 0 3 . 1 . . . 2 0 1 0 * - . + / 4 . / 0 - 2 1 , 4 * - + - / . , . . . 2 0 . 1 . ) ) , 3 5 7 3 . , + / - . + 0 + + 0 1 1 / 6 0 0 0 / 3 6 . + . 2 2 3 5 4 - - 2 4 3 3 0 + / . 0 1 4 - 5 0 3 6 : 5 0 / 2 3 3 2 - + + + , 2 0 3 . 1 3 0 , 1 4 - 2 6 3 0 2 3 0 4 / 3 4 0 1 0 0 2 1 2 2 1 4 0 0 3 0 0 3 / 5 3 / 4 4 2 4 2 3 6 2 2 2 0 . / 3 3 5 - 2 2 / 1 7 2 0 0 4 3 3 3 0 - , 0 1 2 7 : 5 3 5 5 4 9 < 9 ; 3 3 5 4 2 2 , / 7 4 / 2 4 . , & $   
+                                                                                                
+                                                                                                         
+    
+    
+    
+ 
+ 
+ 
+    
+  
+        
+ 
+ 
+ 
+ 
+ 
+      
+  
+ 
+  
+ 
+   
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+    
+  
+   
+     
+ 
+  
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+   
+ 
+   
+ 
+   
+ 
+ 
+  
+ 
+ 
+ 
+       
+ 
+ 
+ "   
+ 
+   
+   
+   " !    
+ !    
+     
+  
+ 
+ 
+    
+ 
+    !   
+ " ! " ! 
+ "   ! "    !   
+ ! 
+ # # # " 
+  !    ! " & #   # " & $ $ # & & " " # & ( " ! # # " $ $ # $ " # $ ! # " % &   ( # % $ $  & $ $ ! " " !   $ % " "  $ ' & ' ' % ! # ! & " & # # % #    ( % " $ # ! $ & " & ' ' %   $ ! # # % # # ' $ ! ! " " " !   $ (   $ $ $       & $       ! % & ' # "   " $ & $ % # $ % # " $ & $ '   " " 
+ ! " " $ % % # % ' $ % ) ! % ) & ! $ ( ( % % % ( & ' " & # % % & % ) & & & ( ( + & ' ' % & ( ) $ ' ) + * $ & ' ) ) ' % ) 0 1 ( ) * ( ) * $ " % $ # ' ) ) , ' & ( $ & & , ( % ( $ ( * + & ' & % $ % & ) ) - ( & % & # ( + ) * ( ( ( % ( , * ( % ) % ( ) % , ( % # & $ ' , ' ( ' ' * + ' & ( % # ( ( & ( ( ' ' ) % ( ) $ " ( ) $ ( " # % ( ) & % ' % & % + % % & ( ' ( + + ( ) ( & , ' " % ) ( $ % ( , + ) ( - ) * * + - + ( ' ' + - 1 - + - - + - . ) ( ' , ( * % , ( , - ( ( + * ' - , * - . , , ( ' ) + ) $ & % ( * - ' * ( * ) ( + ) * % ( - - , * ( + ( & ) - , + - ' ) * * + % + + + , ' ) * , * ( ) * 2 , ( & ) ' . - / * ( * - + , 2 ) ( * - . 3 ) * , * * - - ) ( ( ) ( ) ) + * * , - * + . * - 1 . ) , & ( % * - . - , - , - 2 + - * / . + , , , 3 0 - . / ) * ' . - ' - / - , + * % & * , * - ( * + ) - * * * ) 2 + ) + ' - + * 0 . , * - / - + . + 0 + , * + - + & , / - + ) ) $ ! ! 
+                                                                                           
+       
+                                                                                                            
+                                  
+                   
+         
+              
+  
+ 
+           
+ 
+ 
+      
+ 
+ 
+       
+   
+ 
+        
+ 
+       
+ 
+ 
+ 
+ 
+            
+  
+   
+ 
+    
+ 
+ 
+ 
+ 
+ " 
+ 
+     
+ 
+  
+ 
+   
+ 
+ 
+ 
+  
+ 
+ 
+     
+ " $ !  
+ 
+       # !       " "   
+ 
+ 
+ 
+ 
+ 
+ " 
+   
+ 
+ 
+ ! " ! "  "   
+    
+ 
+ 
+    
+ 
+   
+ 
+   
+ !   $  
+ 
+           " % ! 
+ " "   !   
+    ! ! 
+   ! 
+ 
+ !   ! "  
+ 
+   ! 
+ 
+ 
+ 
+   
+ 
+ 
+    
+    #   
+  " ! ! ! " ! 
+ 
+  
+  # !   !   
+  
+   %   "     ! # $ & ! 
+ ! $ # !   ! !        ! ! "   " % "     $ # $ ! # # # $ #   " $ & " " % " # ! " ! ! ! % $  
+ " # ' % " ! & $ # % & % # #    # ! $ % & $ ' $ "   
+ " $ % $     ! " ' & $ "   
+ 
+  # % & % # 
+ ! " 
+ ! " # $ % % # " # ( " # # " " # ! ! ! ! !  ! ! ! ( # $ " !   $ "   " #  " # "   " # # 
+ " ! ! & # $ # & !    # $ % % " & & !  # % "  # " " ' $ ' & ! ! $ $ $ # " %  % % ! # "  % $ # ( $ # ( # # & ' # $ $ ( ' $ % ) & $   & ! ! $ ' ) % ! % $ ' ) % # $ ( ) % , ) $ % & % $ $     " & ' ) $ $ $ # ! & * # # ' # & " % $ ' # $ ! ( ' ( * ( & " ' !    # ( ( $ " # & & ' + % & ' % $ $ ) ' " ( * & ! & , ) ( ( % & + ' ' ( ' % # ( $ # $ % # " # # # % ' ' " ' ) ' % % & % % & # ( $ $   ! & # # & & ' ( + + & ) * , * & ' ' ( * ) ' & # & & # & & ( & * $ ! ' $ $ ' ( " # # % ( & * % ( + % % ( % % % & # % # ! % " % * & ' - ( ' ! ( * ' 0 % % ' ( ( # $ #  
+ 
+ 
+                                                                                                                                                                                                                                                                                                  
+          
+  
+  
+ 
+   
+    
+         
+                          
+  
+ 
+             
+ 
+ 
+    
+     
+ 
+    
+ 
+ 
+  
+  
+   
+ 
+ 
+   
+ 
+    
+  
+ 
+ 
+ "    
+     
+ 
+    
+  
+ 
+ 
+ 
+   !  
+  
+ 
+ 
+ 
+   
+ 
+  
+   
+ 
+        
+ " ! 
+   
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+  ! 
+     
+  
+ 
+    
+   
+  
+   
+ 
+ 
+ 
+ 
+ 
+   
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+   
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+ 
+ 
+ 
+   
+  
+   
+   
+ 
+   
+ 
+  
+  
+ 
+ 
+       
+ 
+      
+ 
+ !  
+ 
+  
+  ! # "  "  
+     
+ 
+  " 
+  " ! " 
+ ! "   " 
+ 
+ 
+ 
+ 
+ ! # " 
+ 
+ "   
+ 
+ ! 
+  ! 
+  ! ! 
+  #   
+   
+    
+ "  
+ 
+ 
+        % ! ! !   $ 
+   "   $      
+ 
+    
+ " #   
+ 
+ 
+ 
+      " 
+      
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+   
+ 
+   "       " $   ! " $ '  
+ ! 
+ 
+    
+  
+      
+ !     
+   ! #   
+  
+ 
+ "   !             ! # # % # $     " !   
+   !   
+ 
+ ! 
+ # # " ! ! ! ! # ' !   ! $ # !  
+ 
+ 
+ 
+ 
+     # ! ! ! " 
+   
+ 
+   # !     ' # 
+ 
+ ! 
+ " $ #   
+ !  ! # 
+ 
+    ! " "   # #  $    " ! $ " # % $ ! # % ( ! " ! #     " " # %   
+ 
+ " #   !   
+ "    
+     # #    $ "   $   
+ # ! ! # ! $ " ! $ & # & ! " ! ! !  # ! # # " # $ ! # " ! $ # ! ! !   ! # $ " ! $   ! 
+       # ! " " " #   " "   # "       !   $ % $ " ! # $ ! # %   & # ! 
+ 
+ " ! ! ! 
+ 
+                                                                                                                                                                                                                                                         
+                                               
+          
+ 
+           
+     
+    
+ 
+          
+             
+         
+       
+              
+ 
+  
+          
+   
+     
+         
+  
+   
+        
+  
+ 
+ 
+   
+     
+                
+ 
+ 
+        
+ 
+  
+ 
+ 
+      
+    
+ 
+  
+            
+ 
+  
+     
+      
+ 
+ 
+ 
+       
+      
+ 
+ 
+ 
+ 
+ 
+      
+ 
+  
+  
+ 
+ 
+ 
+    
+  
+ 
+  
+ 
+  
+   
+ 
+   
+   
+  
+  
+    
+ 
+ 
+    
+  
+   
+   
+  
+  
+   
+ 
+    
+ 
+ 
+  
+ 
+   
+  
+ 
+   
+   
+  
+ 
+  
+      
+ 
+    
+ 
+  
+   
+    
+ 
+  
+  
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  
+ 
+   
+   
+ 
+   
+ 
+  
+ 
+  
+  
+  
+   
+ 
+ 
+      
+      
+ 
+ 
+ 
+ 
+ 
+  
+ 
+ 
+  
+ 
+ 
+ 
+  
+ 
+ 
+  
+        
+ 
+    
+ 
+ 
+ 
+ 
+ 
+  
+ 
+       ! 
+ 
+   !  
+ 
+  
+ !    
+     
+ 
+    
+ 
+ 
+ !    
+  
+ 
+    
+    
+   
+  
+ 
+   
+   
+ 
+  
+ 
+    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ $ 
+ 
+ 
+ 
+ 
+  
+   
+  
+ 
+    
+   ! 
+ 
+ 
+ 
+ 
+    # 
+ 
+ 
+  
+  
+   
+   
+    "    
+   "  
+ 
+  ! 
+ 
+ 
+ " 
+ 
+ 
+ !   
+ 
+     
+ 
+ "   ! 
+ 
+ 
+  
+   !      
+ 
+ 
+ ! "  
+ " 
+   
+ 
+     
+ 
+ 
+ ! 
+  " #   
+ !   
+  
+ 
+ ! 
+ 
+    
+  
+ 
+ 
+ 
+    
+  
+ 
+  
+ 
+   
+  
+    
+    #  
+  " 
+ ! 
+ 
+  
+   
+                                                                                                                                                                                                                                                                                                                      
+                        
+                                  
+          
+ 
+                
+   
+ 
+                        
+       
+   
+             
+  
+                           
+ 
+    
+                           
+      
+          
+   
+   
+   
+                   
+ 
+ 
+       
+ 
+      
+               
+                             
+     
+     
+ 
+   
+ 
+             
+ 
+      
+                
+  
+  
+  
+  
+         
+       
+           
+           
+ 
+ 
+                   
+                 
+ 
+  
+ 
+      
+ 
+    
+  
+ 
+ 
+ 
+      
+          
+    
+ 
+  
+  
+    
+  
+ 
+     
+   
+     
+ 
+     
+   
+ 
+ 
+      
+     
+         
+ 
+ 
+  
+ 
+ 
+ 
+  
+     
+ 
+  
+ 
+      
+ 
+    
+      
+ 
+  
+ 
+  
+      
+ 
+         
+    
+  
+  
+ 
+ 
+ 
+      
+ 
+ 
+  
+ 
+  
+ 
+    
+                   
+  
+ 
+ 
+   
+                                                                                                            
+                                                                                                                                                                                                                  
+                              
+                                                              
+                                             
+                  
+              
+   
+                 
+            
+ 
+  
+         
+  
+  
+ 
+     
+         
+        
+        
+               
+      
+ 
+               
+       
+  
+  
+ 
+              
+  
+  
+        
+    
+                     
+            
+ 
+            
+ 
+                        
+ 
+    
+                                 
+       
+   
+ 
+               
+           
+                
+      
+  
+         
+ 
+  
+     
+               
+  
+                                    
+ 
+       
+   
+      
+        
+ 
+           
+   
+   
+                
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+                                                                                                              
+     
+    
+                    
+                  
+         
+  
+                                                                                
+                         
+                                                            
+                  
+                                  
+                                              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+                                           
+                                                                                    
+                              
+                                                     
+         
+                                                                                                                                                   
+                                                                                                                                    
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                                                                                                                                                                                                                                                                              
+                                                                        
+                                                                                                                                                                                                                                                                          
+                                                                                                                                                                                                                   
+                                                                                                                                                                                                                                                                           
+                                                                                                                                                                                    
+                                                     
+                     
+                                                                                                                                                                                                                                   
+                              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+   
+       
+   
+ 
+   
+ 
+                                                                                                                                                                                                                                                                                                                                              
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+                            
+          
+        
+                                                                                                                                                                                                                                                                                                   
+    
+                                                
+                       
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+    
+                                                                                                                                                                                                                                       
+                                                                                               
+                        
+                                                                                          
+                                   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+    
+               
+       
+ 
+                                                                                                                                                                                                  
+      
+                       
+         
+                 
+     
+   
+      
+                                                                                   
+                                                                                                       
+                 
+    
+ 
+ 
+     
+             
+                                                                          
+                        
+                  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
+  
+                               
+                                   
+                       
+                     
+                     
+                          
+       
+          
+                      
+                
+         
+                                                                                                                                                                                                                  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+                                                     
+ 
+                             
+                   
+                   
+                                      
+       
+                                                  
+                  
+                                                                                                                                                                                    
+        
+                                                                                                                                                                                                                                 
+                                                                                                                                                                                                                                                                                                                
+                                                                                                               
+ 
+                                                                                                                 
+                                                                                            
+                      
+                                                                                 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+                                                  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+                                                                                                                                                                                                                                                                                                                                                                                   
+      
+       
+                
+                                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+                   
+     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+                   
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                          
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+    
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+                                                       
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+ 
+   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+                                                                                                                                                                                                                                                                                     
+                                                                                                                                                   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+                                  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
+         
+        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+                                            
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
+         
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                                             
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+ 
+                        
+                                                  
+                            
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
+           
+                     
+                      
+                    
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+  
+                                      
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
+    
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
+                
+         
+   
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
+                
+                                                      
+     
+                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+                                                      
+ 
+   
+                                                          
+                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+                                                                                                                                                                     
+                  
+   
+                              
+            
+       
+                  
+           
+                 
+ 
+             
+         
+ 
+          
+   
+  
+  
+    
+                      
+                     
+                                                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+   
+ 
+ 
+    
+           
+  
+                              
+                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
+                               
+         
+           
+     
+                      
+ 
+                                                               
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                               
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+                                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+   
+ 
+                                                     
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+                              
+                
+ 
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
+                                           
+        
+               
+        
+                 
+        
+ 
+    
+  
+                        
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+         
+    
+    
+        
+  
+  
+         
+            
+  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+                                                                                            
+        
+   
+     
+  
+                 
+ 
+  
+            
+                                   
+  
+      
+                                                  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
Index: /branches/fault_tolerance/softs/soft_hello_giet/Makefile
===================================================================
--- /branches/fault_tolerance/softs/soft_hello_giet/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/soft_hello_giet/Makefile	(revision 724)
@@ -0,0 +1,36 @@
+LD = mipsel-unknown-elf-ld
+CC = mipsel-unknown-elf-gcc
+AS = mipsel-unknown-elf-as
+DU = mipsel-unknown-elf-objdump
+
+OBJS =   reset.o \
+         giet.o \
+         stdio.o \
+         main.o
+
+CFLAGS = -Wall -mno-gpopt -ffreestanding -fomit-frame-pointer -mips32 -ggdb
+
+GIET =	../giet_tsar
+
+bin.soft: $(OBJS) ldscript
+	$(LD) -o $@ -T ldscript $(OBJS)
+	$(DU) -D $@ > $@.txt
+
+reset.o: $(GIET)/reset.S hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+giet.o: $(GIET)/giet.S hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+stdio.o: $(GIET)/stdio.c hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+main.o: main.c hard_config.h
+	$(CC) -I. $(CFLAGS) -I$(GIET) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+clean:
+	rm -f *.o bin.soft *.txt core term* temp
Index: /branches/fault_tolerance/softs/soft_hello_giet/hard_config.h
===================================================================
--- /branches/fault_tolerance/softs/soft_hello_giet/hard_config.h	(revision 724)
+++ /branches/fault_tolerance/softs/soft_hello_giet/hard_config.h	(revision 724)
@@ -0,0 +1,26 @@
+/*******************************************************************/
+/* This file define various hardware parameters that are used by   */
+/* both the giet_tsar OS and by the hardware (top.cpp file)        */
+/*******************************************************************/
+
+#ifndef _HARD_CONFIG_H
+#define _HARD_CONFIG_H
+
+#define	 X_SIZE              2
+#define	 Y_SIZE              2
+#define	 X_WIDTH             4
+#define	 Y_WIDTH             4
+
+#define	 NB_PROCS_MAX        1
+
+#define  USE_RAMDISK         1
+#define  USE_EXT_IO          0
+
+#define	 NB_DMA_CHANNELS     0
+#define	 NB_HBA_CHANNELS     0
+#define	 NB_NIC_CHANNELS     0
+#define	 NB_CMA_CHANNELS     0
+
+#define	 NB_TTY_CHANNELS     1
+
+#endif //_HARD_CONFIG_H
Index: /branches/fault_tolerance/softs/soft_hello_giet/ldscript
===================================================================
--- /branches/fault_tolerance/softs/soft_hello_giet/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/soft_hello_giet/ldscript	(revision 724)
@@ -0,0 +1,82 @@
+/**********************************************************
+	File : ldscript 
+	Author : Alain Greiner
+	Date : January 2014
+**********************************************************/
+
+/* definition of the base address for all segments 
+The peripherals base addresses are referenced by the
+software drivers and must be defined, even if the 
+peripherals are not present in the architecture */
+
+seg_reset_base   = 0x00000000;       /* boot code                   */
+
+seg_kcode_base   = 0x00010000;       /* kernel code                 */
+seg_kdata_base   = 0x00020000;       /* kernel cacheable data       */
+seg_kunc_base    = 0x00030000;       /* kernel uncacheable data     */
+
+seg_code_base    = 0x00040000;       /* application code            */ 
+seg_data_base    = 0x00050000;       /* application data            */
+
+seg_heap_base    = 0x00100000;       /* heaps for applications      */
+seg_stack_base   = 0x00300000;       /* stacks ifor applications    */
+
+seg_ramdisk_base = 0x00800000;       /* virtual disk                */
+
+seg_xcu_base     = 0xF0000000;       /* controler XCU               */
+seg_tty_base     = 0xF4000000;       /* controler TTY               */
+seg_fbf_base     = 0xF3000000;       /* controler FBF               */
+seg_ioc_base     = 0xF2000000;       /* controler IOC               */
+seg_nic_base     = 0xF7000000;       /* controler NIC               */
+seg_cma_base     = 0xF8000000;       /* controler CMA               */
+seg_pic_base     = 0xF9000000;       /* controler PIC               */
+seg_mmc_base     = 0xE0000000;       /* config    MMC               */
+
+
+/* Grouping sections into segments */
+
+SECTIONS
+{
+   . = seg_kcode_base;
+   seg_kcode : {
+      *(.giet)
+      *(.switch)
+      *(.drivers)
+      *(.isr)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.kdata)
+   } 
+   . = seg_kunc_base;
+   seg_kunc : {
+      *(.unckdata)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.ksave)
+   } 
+   . = seg_code_base;
+   seg_code : {
+      *(.text)
+   } 
+   . = seg_reset_base;
+   seg_reset : {
+      *(.reset)
+   } 
+   . = seg_data_base;
+   seg_data : {
+      *(.rodata)
+      . = ALIGN(4);
+      *(.rodata.*)
+      . = ALIGN(4);
+      *(.data)
+      . = ALIGN(4);
+      *(.sdata)
+      . = ALIGN(4);
+      *(.bss)
+      *(COMMON)
+      *(.sbss)
+   } 
+}
+
Index: /branches/fault_tolerance/softs/soft_hello_giet/main.c
===================================================================
--- /branches/fault_tolerance/softs/soft_hello_giet/main.c	(revision 724)
+++ /branches/fault_tolerance/softs/soft_hello_giet/main.c	(revision 724)
@@ -0,0 +1,29 @@
+#include "hard_config.h"
+#include "stdio.h"
+
+void main()
+{
+    char c;
+    unsigned int proc_id = _procid();
+    unsigned int l       = (proc_id % NB_PROCS_MAX);
+    unsigned int x       = (proc_id / NB_PROCS_MAX) >> Y_WIDTH;
+    unsigned int y       = (proc_id / NB_PROCS_MAX) & ((1<<Y_WIDTH) - 1);
+    while ( 1 )
+    {
+       _tty_printf("hello world... from processor [%d,%d,%d]\n",x,y,l);
+
+       _tty_getc( &c );
+    }
+} // end main()
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
+
+
+
Index: /branches/fault_tolerance/softs/soft_sort_giet/Makefile
===================================================================
--- /branches/fault_tolerance/softs/soft_sort_giet/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/soft_sort_giet/Makefile	(revision 724)
@@ -0,0 +1,36 @@
+LD = mipsel-unknown-elf-ld
+CC = mipsel-unknown-elf-gcc
+AS = mipsel-unknown-elf-as
+DU = mipsel-unknown-elf-objdump
+
+OBJS =   reset.o \
+         giet.o \
+         stdio.o \
+         main.o
+
+CFLAGS = -Wall -mno-gpopt -ffreestanding -fomit-frame-pointer -mips32 -ggdb
+
+GIET =	../giet_tsar
+
+bin.soft: $(OBJS) ldscript
+	$(LD) -o $@ -T ldscript $(OBJS)
+	$(DU) -D $@ > $@.txt
+
+reset.o: $(GIET)/reset.S hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+giet.o: $(GIET)/giet.S hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+stdio.o: $(GIET)/stdio.c hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+main.o: main.c hard_config.h
+	$(CC) -I. $(CFLAGS) -I$(GIET) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+clean:
+	rm -f *.o bin.soft *.txt core term* temp
Index: /branches/fault_tolerance/softs/soft_sort_giet/hard_config.h
===================================================================
--- /branches/fault_tolerance/softs/soft_sort_giet/hard_config.h	(revision 724)
+++ /branches/fault_tolerance/softs/soft_sort_giet/hard_config.h	(revision 724)
@@ -0,0 +1,26 @@
+/*******************************************************************/
+/* This file define various hardware parameters that are used by   */
+/* both the giet_tsar OS and by the hardware (top.cpp file)        */
+/*******************************************************************/
+
+#ifndef _HARD_CONFIG_H
+#define _HARD_CONFIG_H
+
+#define	 X_SIZE              2
+#define	 Y_SIZE              2
+#define	 X_WIDTH             4
+#define	 Y_WIDTH             4
+
+#define	 NB_PROCS_MAX        1
+
+#define  USE_RAMDISK         1
+#define  USE_EXT_IO          0
+
+#define	 NB_DMA_CHANNELS     0
+#define	 NB_HBA_CHANNELS     0
+#define	 NB_NIC_CHANNELS     0
+#define	 NB_CMA_CHANNELS     0
+
+#define	 NB_TTY_CHANNELS     1
+
+#endif //_HARD_CONFIG_H
Index: /branches/fault_tolerance/softs/soft_sort_giet/ldscript
===================================================================
--- /branches/fault_tolerance/softs/soft_sort_giet/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/soft_sort_giet/ldscript	(revision 724)
@@ -0,0 +1,82 @@
+/**********************************************************
+	File : ldscript 
+	Author : Alain Greiner
+	Date : January 2014
+**********************************************************/
+
+/* definition of the base address for all segments 
+The peripherals base addresses are referenced by the
+software drivers and must be defined, even if the 
+peripherals are not present in the architecture */
+
+seg_reset_base   = 0x00000000;       /* boot code                   */
+
+seg_kcode_base   = 0x00010000;       /* kernel code                 */
+seg_kdata_base   = 0x00020000;       /* kernel cacheable data       */
+seg_kunc_base    = 0x00030000;       /* kernel uncacheable data     */
+
+seg_code_base    = 0x00040000;       /* application code            */ 
+seg_data_base    = 0x00050000;       /* application data            */
+
+seg_heap_base    = 0x00100000;       /* heaps for applications      */
+seg_stack_base   = 0x00300000;       /* stacks ifor applications    */
+
+seg_ramdisk_base = 0x00800000;       /* virtual disk                */
+
+seg_xcu_base     = 0xF0000000;       /* controler XCU               */
+seg_tty_base     = 0xF4000000;       /* controler TTY               */
+seg_fbf_base     = 0xF3000000;       /* controler FBF               */
+seg_ioc_base     = 0xF2000000;       /* controler IOC               */
+seg_nic_base     = 0xF7000000;       /* controler NIC               */
+seg_cma_base     = 0xF8000000;       /* controler CMA               */
+seg_pic_base     = 0xF9000000;       /* controler PIC               */
+seg_mmc_base     = 0xE0000000;       /* config    MMC               */
+
+
+/* Grouping sections into segments */
+
+SECTIONS
+{
+   . = seg_kcode_base;
+   seg_kcode : {
+      *(.giet)
+      *(.switch)
+      *(.drivers)
+      *(.isr)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.kdata)
+   } 
+   . = seg_kunc_base;
+   seg_kunc : {
+      *(.unckdata)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.ksave)
+   } 
+   . = seg_code_base;
+   seg_code : {
+      *(.text)
+   } 
+   . = seg_reset_base;
+   seg_reset : {
+      *(.reset)
+   } 
+   . = seg_data_base;
+   seg_data : {
+      *(.rodata)
+      . = ALIGN(4);
+      *(.rodata.*)
+      . = ALIGN(4);
+      *(.data)
+      . = ALIGN(4);
+      *(.sdata)
+      . = ALIGN(4);
+      *(.bss)
+      *(COMMON)
+      *(.sbss)
+   } 
+}
+
Index: /branches/fault_tolerance/softs/soft_sort_giet/main.c
===================================================================
--- /branches/fault_tolerance/softs/soft_sort_giet/main.c	(revision 724)
+++ /branches/fault_tolerance/softs/soft_sort_giet/main.c	(revision 724)
@@ -0,0 +1,225 @@
+//=================================================================================================
+// File       : main.c
+//
+// Date       : 08/2011
+//
+// Author     : Cesar Fuguet Tortolero
+//            :<cesar.fuguet-tortolero@lip6.fr>
+//
+// Description: Sort application using the GIET operating system.
+//              This application uses the barrier routines to apply a sort algorithm
+//              in several stages.
+//=================================================================================================
+
+#include "stdio.h"
+#include "hard_config.h"
+
+#define ARRAY_LENGTH (1 << 10)                    // 1024 ITEMS
+#define IPP          (ARRAY_LENGTH / total_procs) // ITEMS PER PROCESSOR
+#define VERBOSE      1
+
+#if (VERBOSE == 1)
+#define printf(...) _tty_printf(__VA_ARGS__)
+#define puts(...)   _tty_puts(__VA_ARGS__)
+#else
+#define printf(...)
+#define puts(...)
+#endif
+
+#define task0_printf(...) if(thread_id == 0) _tty_printf(__VA_ARGS__)
+
+int array0[ARRAY_LENGTH];
+int array1[ARRAY_LENGTH];
+
+volatile int init_ok = 0;
+
+void bubbleSort(int * array, unsigned int length, unsigned int init_pos);
+void merge(int * array, int * result, int length, int init_pos_a, int init_pos_b, int init_pos_result);
+
+void main()
+{
+    int total_procs = NB_PROCS_MAX * X_SIZE * Y_SIZE;
+    int proc_id     = _procid();
+    int lid         = proc_id % NB_PROCS_MAX;
+    int cluster_xy  = proc_id / NB_PROCS_MAX;
+    int x           = (cluster_xy >> Y_WIDTH);
+    int y           = (cluster_xy           ) & ((1 << Y_WIDTH) - 1);
+
+    int thread_id   = ((x * Y_SIZE) + y) * NB_PROCS_MAX + lid; 
+
+    int * src_array;
+    int * dst_array;
+    int i;
+
+    while((thread_id != 0) && (init_ok == 0));
+
+    /**************************************************************************/
+    /* Hello World */
+
+    task0_printf("\n[ PROC_%d_%d_%d ] Starting SORT application\n",x,y,lid);
+
+    task0_printf("[ PROC_%d_%d_%d ] MESH %d x %d x %d processors\n",
+                 x,y,lid, X_SIZE, Y_SIZE, NB_PROCS_MAX);
+
+    /**************************************************************************/
+    /* Barriers Initialisation */
+
+    if (thread_id == 0)
+    {
+        for (i = 0; i < __builtin_ctz(total_procs); i++)
+        {
+            printf("[ PROC_%d_%d_%d ] Initializing barrier %d with %d\n",
+                x,y,lid, i, total_procs >> i);
+
+            _barrier_init(i, total_procs >> i);
+        }
+        printf("\n");
+        asm volatile ("sync");
+        init_ok = 1;
+    }
+
+    /**************************************************************************/
+    /* Array Initialisation */
+
+    for (i = IPP * thread_id; i < IPP * (thread_id + 1); i++)
+    {
+        array0[i] = _rand();
+    }
+
+    asm volatile ("sync");
+    _barrier_wait(0);
+
+    /**************************************************************************/
+    /* Parallel sorting of array pieces */
+
+    printf("[ PROC_%d_%d_%d ] Stage 0: Starting...\n\r", x,y,lid);
+    bubbleSort(array0, IPP, IPP * thread_id);
+    printf("[ PROC_%d_%d_%d ] Stage 0: Finishing...\n\r", x,y,lid);
+
+    for (i = 0; i < __builtin_ctz(total_procs); i++)
+    {
+        asm volatile ("sync");
+        _barrier_wait(i);
+
+        if((thread_id % (2 << i)) != 0) _exit();
+
+        printf("[ PROC_%d_%d_%d ] Stage %d: Starting...\n\r", x,y,lid, i+1);
+
+        if((i % 2) == 0)
+        {
+            src_array = &array0[0];
+            dst_array = &array1[0];
+        }
+        else
+        {
+            src_array = &array1[0];
+            dst_array = &array0[0];
+        }
+
+        merge(src_array, dst_array
+                , IPP << i
+                , IPP * thread_id
+                , IPP * (thread_id + (1 << i))
+                , IPP * thread_id
+                );
+
+        printf("[ PROC_%d_%d_%d ] Stage %d: Finishing...\n\r", x,y,lid, i+1);
+    }
+
+    int success;
+    int failure_index;
+
+    if(thread_id == 0)
+    {
+        success = 1;
+
+        for(i=0; i<(ARRAY_LENGTH-1); i++)
+        {
+            if(dst_array[i] > dst_array[i+1])
+            {
+
+                success = 0;
+                failure_index = i;
+                break;
+            }
+        }
+
+        if (success)
+        {
+            printf("[ PROC_%d_%d_%d ] Success!!\n\r", x,y,lid);
+        }
+        else
+        {
+            printf("Failure!! Incorrect element: %d\n\r", failure_index);
+
+
+            for(i=0; i<ARRAY_LENGTH; i++)
+            {
+                printf("array[%d] = %d\n", i, dst_array[i]);
+            }
+        }
+    }
+
+    _exit();
+}
+
+void bubbleSort(int * array, unsigned int length, unsigned int init_pos)
+{
+    int i;
+    int j;
+    int aux;
+
+    for(i = 0; i < length; i++)
+    {
+        for(j = init_pos; j < (init_pos + length - i - 1); j++)
+        {
+            if(array[j] > array[j + 1])
+            {
+                aux          = array[j + 1];
+                array[j + 1] = array[j];
+                array[j]     = aux;
+            }
+        }
+    }
+}
+
+void merge(int * array, int * result, int length, int init_pos_a, int init_pos_b, int init_pos_result)
+{
+    int i;
+    int j;
+    int k;
+
+    i = 0;
+    j = 0;
+    k = init_pos_result;
+
+    while((i < length) || (j < length))
+    {
+        if((i < length) && (j < length))
+        {
+            if(array[init_pos_a + i] < array[init_pos_b + j])
+            {
+                result[k++] = array[init_pos_a + i];
+                i++;
+            }
+            else
+            {
+                result[k++] = array[init_pos_b + j];
+                j++;
+            }
+        }
+        else if(i < length)
+        {
+            result[k++] = array[init_pos_a + i];
+            i++;
+        }
+        else
+        {
+            result[k++] = array[init_pos_b + j];
+            j++;
+        }
+    }
+}
+
+/* vim: tabstop=4 : shiftwidth=4 : expandtab
+*/
Index: /branches/fault_tolerance/softs/soft_transpose_giet/Makefile
===================================================================
--- /branches/fault_tolerance/softs/soft_transpose_giet/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/soft_transpose_giet/Makefile	(revision 724)
@@ -0,0 +1,36 @@
+LD = mipsel-unknown-elf-ld
+CC = mipsel-unknown-elf-gcc
+AS = mipsel-unknown-elf-as
+DU = mipsel-unknown-elf-objdump
+
+OBJS =   reset.o \
+         giet.o \
+         stdio.o \
+         main.o
+
+CFLAGS = -Wall -mno-gpopt -ffreestanding -fomit-frame-pointer -mips32 -ggdb
+
+GIET =	../giet_tsar
+
+bin.soft: $(OBJS) ldscript
+	$(LD) -o $@ -T ldscript $(OBJS)
+	$(DU) -D $@ > $@.txt
+
+reset.o: $(GIET)/reset.S hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+giet.o: $(GIET)/giet.S hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+stdio.o: $(GIET)/stdio.c hard_config.h
+	$(CC) -I. $(CFLAGS) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+main.o: main.c hard_config.h
+	$(CC) -I. $(CFLAGS) -I$(GIET) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+clean:
+	rm -f *.o bin.soft *.txt core term* temp
Index: /branches/fault_tolerance/softs/soft_transpose_giet/bridge256.raw
===================================================================
--- /branches/fault_tolerance/softs/soft_transpose_giet/bridge256.raw	(revision 724)
+++ /branches/fault_tolerance/softs/soft_transpose_giet/bridge256.raw	(revision 724)
@@ -0,0 +1,869 @@
+^`qÄtnjvdqÃæãææâÎÞáîãæºÛÇ®¬ÄÍl«Æ¹žŠ¯ÄŽÌ«ª¶¹ÅÝÀ¯³ÃŠªŠž¥¥µªÂ°¯§¶­»|}yjnWOK`uvwgn
+|©p·[ Ž»§¥³ £¯Š€¥°¢£€² {siRhws}}ºfy¬
+€¡œÁ«ª¡Š|hox mpy|unh}liOTWR`
+e`lX~vwgu
+zn{~Q{yk[}xÀl|nfpÃäåâãâ°ØåçÝÞªÒ¶²
+
+¢©²Å·xÇÅÔ±Âž£®°²Žµ§©§Ì¹âËÆÈÆŸ±­»š®œ««€§ª¢©ª|nwyiu`YUU_nnv]©~£r§[t·ÊÅÂ²º¯°£ŒÊÄ°³¹Ÿ²«kziq\_S^Musk€uVon@6JI,0FEg:erafXA
+k±«°Šu]Lp
+ngQOS?MfY[qnvbcvNILE]NQQULZnk\jZVRK[gZHer}pqsYV\inWwzŸs¿blÇåäãçæžÕãâÛÝŒÅž¯lm{hª®
+Àªµ£žŠÃ¡º¿ÁÏ©ÕœáÈÖÓÁžž¬ÉšÀ²®°±¢¶­€«es`tYKUln
+kwve}k¡² h°aa±Á¯Æ²¹€¬µºÇÄÃ«š³©}ehXXTVTUVf[[f{gO[Mq0=037
+FXg>GTru}¢²y
+eiuhd_[`}sZffbZ`6PJjhHkgaYR[g`IURVDMYobQTK8E6E`cltj`ntjf[WefX]dšzÀ·±®jeÎÞààäæÁÙßáåâÊ·Ålreck]¡®œ|ÖªÆŸ©Â£­¥rÂâÄ¿ÖŸ§­©¯ÌÆ§¯§°¹Œ­¥ÂŒ±ª ¡ ¡ivtªWOYegxqzbYx}}\šµ»Âº¶°ª©¡¬ŽwÀ»uVVSQYGYkYZPjwefrb\&GE3sSBLFd{|a~¡®zZ{geqwfULlQSu?DLz]El¢€_RVZ_]XQMXG;EOa_MSJEL@UJDGND<SQpRZanxi_]©¬¥¯«mkàäàÞÜâÊÙàÙãèÒÁÍ¥sssdkº¹¡ª³ÀÁ€žŠ€{¥¡©ØŒÊÆ¯·«²³ÌÀ³œ­{š¯§¬¬€Zy¬fWL_tjn¢ mU
+yyhxoF¥y·Å®Šžª¹±¢¡®Œµ{kjTK\a[fbXbwii^ZnaPA=B`aIRmcuzi€u«irkim[BVQtiCEPdpiLk`FPG>IJ@6>PI94Y\OGW;=L?@^KsnMZ_P]Wd|­Ž­²xhØáßß×ß¹×æäéç×ÔÑ²}}t±{ÍÛÀ¡®£®¶±l|ÛŽÔœŽÂÉŽ¡¯€²º¯±¥Š¬§ept¢hKddqkn²hfuzjfrkwr£¡§r€w­hBkocVag^bYdpwvbem][U~PL+;>lraJ{<yWKmvmX]_[[
+V@Oe?vp`CGMŠkklp_s_eTY[XT@GtNM;4S=GANGDJ`^R_{NFPRDQYhUpx§Šu¯qhŠËáæâÛÒ¯ÚèìíëÝÐŒÃ}v Ê»ÊÜá·²¯¥¬ ¡o©âÄÏº¶ÃÆÇÂš€m¶ux¡® ngyX`kyzrokYwgbin`E~Ž¬xxw§¹§[ZSdhUX`Uuleq~j]ey_hVXPT=C7FGRDMYNE31^tFXi€zqke]jŠua2ESIMxURM_hbegZ[{u|¡zVGWAMOOMIQAIHRD`YROK7CCDKKpS|{¥£Ÿœli°ÊæÝæàË·ÔéëéèàÁž££szªŒÊŒÌÚÄš­©¡­fªÜÈÉ¶¿œ²œ€±¬­»šyq¢®}
+}€¹oQzp\Oa~i]jzŠe_PiwobItš¡¡
+£¥Ž¥±¡£|xpX:Rkhd`^jVO^_eczctdGTR^[OTH>4@bŠ;uxF@2YwW_umkekI\M[FI7TJGkelWinLr]]Oop{~dS:EefXRV~nF71SDKWE\NBXJO>]Vc]q]ey£»³qboºÌàÔßä×³ÕæàÙÎÅ­q}k¡|rz}À«²µ­¡ÖØÐÈŸŽªž¶€«¹}{w»|ykJuzQaqoše`gw}~PCFtwoiMl š£¬Áµ[ww|?:eP|\XTfQUGLirmmtstLLJsIy?.K0=GmCXD-cy`tfPYtmVnxG>A>7dsNg{]XRdhf`[vrfsA=A5UILIXh[Q02>BbMST?EY|kyz]RPQp~c£±ªºXatºÔÒÔÝâå©ÌÙ·£ zixwxnsphqszÐÈ»­Ë£{º³ÎÑËÊ©š£¥°š¥~Žyw
+R~wz§©uPdKZZzx[nNLvoZ_e`i]\lqg]®®³§x]T=?OymEIJKkJKEaaszxev|_To]efi<AH>I]bIU_CHbeY²­hTTqZzdU;B<I_aJQWLRTWee[kBdfct@FG>KNIYiS7/09A<GdwnV_pbtkwS9CwWss}¯mioŠ×ÈÞÛÞå¬»µtzu}o
+wgzhR\Rppz{kãµ×Å¬y¢y œ¿ØÔ£ ©f°Šwmbj^Yqi^~¯h°pXmZORt` bqh=ibwvw¯š¢µ§Ž°¯[OM:DC`lSOG@]IJJWJelkSjhaaw¯Œr@YDUVMO>ZHW5Ay¯q¹®vARtzBpy[IFGGGGVJPwf]XKbŠMkeMBIJHZ]LadeJ4GN@KX^aj`|h\UjHbrigx 
+ujxr£ÚÆäØÛßž¡{¡­|§lgftz^ZHrÈn{Ï×¬
+}£|l
+~ºÆÌØaµ`^u
+hNW{m`x|z|©}ÐuvyrSIAZZ
+XzXBXQewpn­ÁœÄ±ªkp]aC3:7AcTB:<KPHMKBM[ke[a~¡¬¯uDgVFC[?rMb>.p¥ž¥¯mAROeMSXkRFMIK>XIJxeb`Lk}dt\nU>MRYcgUjKFAAYTPa\JNa}PRY`|hYµš²ªqwn~zgqØÇÔÞÞ×ž
+ŒÒÜÂ±±©y|q_e~°¡ š|²ÇÛ¬~iŽÀ¶á±¥€l«²°lkclNV{ |o|g­vm¶ŒvxW_VXlh
+¢hžÇxXPMdvytl¬£€Ã£ |UG17AHBECE7>?CNXXKOFhT{e¹uW]PL>.6PP:@X_Xe ³^gnQJUPTTYULaK>:OXU`bZWfsjZ{klEMQPQYoki]^S^TLLFOFpdvjb\nxrZdÙž~ygugf¹ØÝÂÖÛ°| Ô×Ñßá±¡£}xkhyŠ¢©q¶ ÎÒ~«š£»ÅÕáÐÇœ£®º®»rJHYwo~
+_ss~¢©ÅkSG]i]V{ Wn¡o§hZqrv`r\}Âgtš·zeN<D<::PRE9<LSBRZdNHTe~`h|®`iv:GR*%NPFBk`Ut[\REFHE@K^Y^eNMQlQ\e\i_XGP\x®IX^IUWGY]o[^h`RZXH:Mjjqowcl}vgf²|¡©±wi³ÙáºÊÕÐÊãäœÜä¥enu|€o`Ðw±Ë×áÞÀ«¶¿©£©RJap|sspwj
+€Ëg[WG1^naOOPrQWt{jrplqYuxpbQ\|sµ^BgW:0A1BXNFCLMGEOUQLRW_¡€ª]~YUŒz>ebVQ;GyHleEH`lM\]EIDIN\\PQ\bQfP[egQQLJMgnRNMJYXABW_ueVliV[YVSPIF;Ui^_\wsshZ¶y`¡£­r¯hXÖÝÆ£ŸÉ³»ÞåÛÎ×àv{~dejÊ§wd`in¢~sÈ­œàÕË«¹²À»°§{€¢ sxhrmyrm mcs¿kg`ZH\UFGMRLc`Y^L^bnxJ=Ud[USuLKGU§š:eVkD:613DG6GOFDDUHVNKS_muŸŒ¥¡nffcMfkC[ov]P=5Eip\hd]j\uXTca=Z^wH_UL[c_cP\UQzVnRYKFDUZngXU_RPZUII?NT[KIRv_gRvgvŠpšÂÊŽŠn~w`gÃÉÌ­»ÈÝæáÌÏÝ¡ntacÎ­yrYLWk|sw¡šÍ×ÉÆÀŽ¥·Æº ²¡ xqg~]oxphvuif_JCVR3@MS^YutUc§ºZlYi?Kt{c\_2eb§x]P>?8<7>3HCJHUEQZGU]jj¢ÏÄ«[UT~k
+UXfUZUiacPBYjeygPSWS`jU[¥bIYhc[VLaP]_Pq^AO{e`aaTXYZ^rdaZOXJ[BFOPXMEK`WWe
+]²Œ§¿©§no h]b££¥kiÁÖâÜÔÙÝ°¥_Td}|RZb|s\{u|}n¶ÔÖÓ»ÅÂ¢ÅŒš£³{pqk¢do{{lzq_XS_NUHNB;4@WnHTKSw~«ÔUKP?N`~bB?13jbZzpG743>FABEDQTDQNGQX`|¯Îœ·Ow
+¶·R_ESDA[QK`WtUqyaLIEXc`RiyFEQ`^CBXWR^Phcfos}ZgicXRLK^eiSQSGSRQR^ZT=RbgLJy¥s¥°zduYcnqujljg}ÀÖàÜÜÞÙ¢oÈ¢ yub|e}w
+z§o€ÒÒ¥§Œ Ÿ²l vu]s°h~kgrW[XKLR@VLDT6GIDBMVŠ²ÖµsAKR:S[aK:-q[LSVSI{}DA<=?B?@D=LMLWU\TZa¬¢h
+±vŠŠ·t\Q`HV\^ivRnyfTobKDVROoL^m{MDfSJ?aWXjgbpxlnVbhkxb[_RM[Zf]aIILC>@^MURAQ[qHYScPysRtrmtS`qqrrÃ®ÓÜãäàÙv·«mrd`·^Zar ¢¿¶·Œž€ÀŽ¯Ã^snxqºtbbc\f~jkZQgUF8<D;AGYŠÐÍÇ¶hDe]7.gOO5<d]F?FCTLELHOEdGAIJ[gR]@MJD<K
+IcGdQNhosI=ZXcgl>gxwk`~_VTHP_JVGHPAHBRay
+zqfwoWKarb}]Q[WPDOG\ITe`PUJEEYYHLD_yfTtao{NTgab[rrktcgTdmÀÃ³žÚ£ªÎ×åäßÜ¯©mxc°macoÆº¥¡ŒÀ¢±œª®£š¢|mrc^w©n
+erum^[Zgnskn>bdJ3B]kGËÉÉÆÂA,6;;Qm8d<ImghnZIMQUVXr_HDIBEN<9=@WMJAEJedVNXL@LVQT?TT2[mw\<X}®£eKISUbSRCJLRQI]p[YUgKVTCftTU[VQ5F\JHPQW_VNUI]GARKR[kgJmgscePYRrdk^
+cbUbnÁÝãÖÖÃÀ£ÐáèéáÙÍ©xmw€«Št[\nqž°ŠŠ¡
+Å»·¬š©Š¢¬¹ªmd]Wohxš³jZkP]QdWZN>KMRLKk]\ºÛÁ§Ò¿T)?J<Cf9_4fgZthNRmSG88M`=;>KRHEEGLSOJDYis]adfp`lp^W DOWprSAIQm®oBLG2GFSFQQU[Xa]QxeAHb]TBDH]UOGVMQ2=SVMKM_nRkVAbDWMH\c]hTQcn{ra_uV\luXonXUqÑßÛÅÅ³µ°ØæåäÙÚ±ay£{q}µoj
+tft»§£°¡ÂÆÊž«¶© Ž£ª¥¬­«¢nZWtk~d|yijjdQOCXFAEW[ZGEY^WGÁÇŒ¿ÁŒY)6BQSoYdPvcc¬lBJTQN8IHB=?CPFEFEOXQSILbkqvRc{¬Šªq©cJa;5G|cPT]Se|B7AKLSMVW_TJXLK\wqBMjKY:NLQRBSKHJJYKHFLFT\bPU?WGknP`GWS^Ii«Œ¡a|oTYxqX^YnÃÎÕÕÃ·­ŽÈÐÞààÔÒbgxpezqzfm¥·
+³w®ÓÖÀ¿¬¡Ÿ¬«µ°ª§«­^Ol^hoighZ]VgMHCC;><EMNH:AeObO§«±ÅÈ«d6.ocjaV[O}¢T=><=6CMX`PD7EYU@AFaPWIVE9SOfzvº ZdKKVcLyj\zmvD^gH?;>IYbFLD^HFIKKFVhCM]VMCQYXFY<>RK@@MESJYthfKZ]e}mnUEYWNuvx¯Ær¡kk\~kjm{jU~ÑÆÔÛÖÀ«±ŸÈÑÜåÜÐra}©¥{
+tftp®šŽyÃÜÀÊÒÌ·¶º¶¶¶š€€cpYg€pf^[a[Zc[VZXVGZBA><Fq@BUQ;g6fjŠ®³ÖÍ²kR_l`_ZhV«ba2J=KG>mzWRIYQQMOKoVNI@A8o\dfl{t}USVFDU
+Ykk}[GCQ=FARoXW[KYLIpL?>b\[PGDD4s]][U<:XHMANDo`[_cc
+_XX
+nrP]Qri{«cÅŠ{fzglaiidbWÑÃØâ×ËÁ¯Æ×ÞÙÜàÈp]
+sxx~
+xxx{²³š¡œyŸÙ×ÞÛÔ±ÅºŠ¬¯®«®©elq
+¬kyvkakilmV^\QLA8@:Kh`Ux:;bBU}«³Î»µ|agjcXcz¯]FHMfKE<NT]daFBV\L\]RZLOKjvrn~{~\iho[dBCSz?MPPH:jKpDFTnXZHSXFK_UEFb|dQK=Nc\}NEGHP<_uU9COLH^`^epRG?FjT>?Mn~¡nÖÄmjtvqo{jT_gZÉÜÚÚÖ·Ž¥ÆæèãÒÓž|}qxy
+{we~v~ªž§¢ÅßÞÖÚÓ€Œ¶Š¥¬€®ŠŠnz «tpo_hYUbcVKOH=9<;==LmrCB]MN_W¬¹Ÿ°¬mpUZX]PSJX[MN?MSSPS\C@R__UcYd]dpvf]ic¡yon]VnObpEaNaL0m`98I[_YMGbbOqCFFKHcXH=9]uWbC7EZMdSaTENRTF[FUQLT=7:S£|MJIYjnqÝÙvpxpWYjUac¯ÍØÌœÅ°ßèçêßÆ±lzdksfš®k  ÂãâÞÛ×­¶¶²¡š«ª¬lz«¥©rcfZV_VRLPNHQKHPVYQVkf?B:=Oo¹ŒÃÄ¶wxVoX^O`P_<IE73S@LDHFLZJ_{R[fabh|rth}b`Xv€ts»Ã}D1Oc]a_NR1FIh^cQLJQNTR\fS>JML]\AOSdpQFLrD<5PPhKF[\WTF?OFLNABHC|_MPI]tvÕÝ``d`Z]}|u]t[šÁÃÀŒÂÅŠæêëêåÌš§cW^q}q¢£Š žy¡ÚãáãÙÏ¡­ž®³®£Š§§Ž£¢Š°µpineKLRLS`SGDHJ[MxqzkH=A58Y·°ª»Šfhk\[\N?I<@96>'#D7GA^LZVPhY\sua|vvs\w«¬l}wŒÅÌ?DSvªf{_W/C^CpeRQI_bHSKOgVh_S]<F[ug>CU]lTKRk\^VNK^SPQCOKD<5N]kqRJEWY\xlšÉSoYl{femghaoÆË·ÕÏÖÒ§Éçêìåæ×¡vX[]_b}²š¬­{
+ÝáãáßÈ¶Ž³š¬€Š·šŽ|€_šjgxa]HROs}_AB9@QLw
+sq
+cE<4Dc°ªœÃ®}aU3TeEMINCKFE%1?CPQ^[VmyTSdW¡šw
+ª¬£c©fO}³É©j?amYeHkGuTbYXKSM\YDH^W€ {TO@ILeVLKfnIC7WDXMPLZUGKEFF72;ML]u\LRS[umykklgUmasmq{nmÇŒÓáÝÚàÈéíãæä×sz
+vsraqrfc{®ÁÆ©
+iÃâãâ×Ã¶«³¯Š€¶©«|šŽ]pz~e`tdQ\\wNJO=9;:=TYXGMfueME;GU±ÄÊÔŠ~bUQSQEK9@E.FV1,aMZwWNFSg\]«¥ªpwv¹¯Ÿ¯m±©¯ef|zÈŒš×¯;kbSMUISxMf_IA[csTBNŠœžinYODG@F]s;?O{D8JKF?Ebb]UN<4CGE@HHSCMYXVK]\^]ol²\cRdXovliÙÕÜåãÖÞÚÜçêæäÞÖŽ uk¡ttŠzÏ»¢À~ÃÚåæÙŸº°¶²ª³¥°œ¬LYmedi_hw`EB:N3=6:9L^UxdjJTU7<OyœºÐÏµœIUit\OUnZl\DF:Ljngiu^IZmzŠš¶µyqzVU¿»§«£
+aœ©Zg[zÀÌÐ¿Z`cp\k[w[kh_]^SPbz]N£¹T_B;EAM>H\OeV@MEQNGYape692HAHOO/@L@6>JPZZjZRY_ wkxcOlriÝçåäâÙÞÖÞæçÛÛÙÙz©¢x§·²wlf¢Œ±ÆÀÒÛçÓŽ¶³­¯­Œ€«µ
+ozYba\ZPXmW?<55=44E?EEbudp_M~i@BW·ŸÒÞ×ÃcaaOK_\FcT;MQ;Q
+}i`m_|¹Á\\nž®Šª¥ª¡¡rµuŠ nlZ^gogr[b­tGZawVT\`¶ÑjU{qZIu<;4GNh?Mz¡MODVhTTbOZkNK>PPX_865K==8GIHIGPV]d\[]ZSi{mgáêêááÜàÒÜäãàÙÏ×€¯Ÿª§¬ž¥y~³ÛÙ¥¢~wÈ
+ÆåàâÚ±¥·© °Â²©£d{mQLTKVPJGBFDB>4BI>165=G^OU^bFn;;C£²ÄÓ£stg\VuMFZXtn£|tq]snmuivcPLR¢¢¡²©v°md]zÈËÇqcgv|zŒrHG~IMQ\u[krzyDHX==;IYJ6j_itNN<DQgV`QL`_B>RW`N=5<7IAEKILIDNTVWihubpV^jv_^Se°âééåêãáÌÛÙÃãÚÈÈ©qk_r°Ô±¡Âž€âççâ­u§¶¡¶¬Ž€³·§|VqrJOWa_RSO@VO[EHJE3/64E[ULJRaV=O9B©µ¢hhogX`j
+guugdlTrqVkto}yzº~]Z>\gOI?©µŠ¡\uay]ož¡ÆÇÔœVAtev²BQRaVJFL\tpKfO[ZCR6:<BG[@6v\J8A;N^EIYVhY\?MSX[RA/145P=OCQLTlc[eoojVrxyttvxžÓÚáäÞÑÌÎÖÅàãÜÊÂ~¥·Škv~ww£Šæ§¥Â­ÜæäÜÄ£²~²«¬«²²ŽbtsKQclBLUEIbhVLR@>:<1;Kh[Ry¡Ž©Ž_^}m`KM`p]TW>KPN]^TQZsbNg~uxjCIW;Z\€Š¢t£W·§ÂÇÅØÒÊr?NEXVvzKWU^diWBLUi\IKGQHNM>?73_oIW··bZF71[piFBDJCKHCKCSI5154;ESRXKWOVSRliNi{~mceobwÇÈÔâáÚàßÉÊÌçæàÝÃ§¡oqÁ¥­r¡£¡ª|ÚåäÝÈ¯«ŠŽ³Š¬µ°€io
+J;nV1IHKAgHdXcRKJ88HfpJb{žœsp¬ŸÄÏÀxog~m_pdrfWIT?MIEQuiBQj_b[Yth8Kr^MOx·ššmº©z Ž¹ÆÒØÉ°P`f\S\m\VQGF\DQWHCFoWbj[I=OH4£Öº@<8aoT;:BRKIE>HTN8/45CDVIKJ]WJYYvSe]¡sb]UacØàÙØÁ¿Õ×ÖÃÎ×àØÓº£Ž¡m©swš ÏàäàÎ²¶ª€­±Žº°Áµp
+wO6J8JqbP_hb^qDG3PouYGYp]hŠ_U
+œÅ²un]}|rlP^J?ODOSVU[QpZmd_tYUaxVSKk
+ž| zqz³®»·ÊÎÉÅ¥ ±^FUdT}q]_\II\HfpP=CDFKjyveEBVE.ÁÐ¬{8AHYdlUFAUROLC@@C_9.1??IMSAMYOJYy€PUk|~OuUZguÓèÚáÙ¿ÎÆÓÉàÜ×ÓÐ§ ¡¯ªmiŠ¥¯zx}µÛäçäË¯ž­¥š°®¶¬·»€MKDA=c[Xvib8H9@nH]{rž¬²±š|ukfSs¥sOVDQDQNXrinWbjwXOc[gMORZš¯v]«²ÅŸÃÎºŽXBFLTtTG[VXQN_h]EELIN£ULnK7R^VI€:HB_]MQ^P<OJN>??AJB43EBJXM7PLKTlqxmq[uQLidmÓèåâÛÃÁÓÕ»ÔØÌÇËŽt~ŸŽx~°¶jjf¯©ª€¯ÙæèâÇ®®©³¬¬©£µŸŠqdo6qYMUcLonow>OAS nuteQ§£qpddxw¢ŠfoLRNlUZOifXWriftQnZ6MošºµºÁ[¥«£šÇÌÑÄ¿±µ±f_9EX`tUHWe]fr[^P@RGG@HFVM?F[B.z8<L[n[YYCE>@K2BBME?0@D?J[UJEIW[V=RX_npWMJQ\waØáçèçÎÑÛÄ×ááßÓ×¡v€«Ë«Ìà§mlg¢x}¯¶ÔçéâÌ©µœŒ¯§¯¿®
+
+{5}]V``\va_WSVMjxo_³ËÇau¥£wca¬Ša]GAFXSR[zx\epmTNtnrq^VYXebnœsŽŸ²ŸÂÌÓÊ¯Œ·µ_YFQRbhygOXLwWTLYXBDIQ@]OXSCHDT?7QjVj99DU]`QR=C:MfU5CZ]N=:9GVLLH=NUiO<JWhid[beaTSvåâäîêÍÔÌ³ÙäåÏÓË® ¢ÈÍÜ²ÝÎ{h|rpyš¶ž¢¯ª³ØæèãÄ¥«³Ž­€¥·€¡oXrHf[hcijjO]LHU\z[{šŽ[mnmµ¿œ¡xkn
+­¹À­¡wNEEX`j^jeh~_QI\hTijO<lr¡³€]¯œ¹¶ÊÈÌÑÀ¹Å¯^`Zqh]u]K\oRZ]VYhwRAMM]UQQMVoABUbXYQ>+4y·\fPP9AFB\;><MH>DB=DALF_obC4Bsvvv~hc_âàäìåÕÒŒ©ÑåéËÌÌs¬ÊÙã§¶u¡¢qz­»³º³ŒÕæåàÃŠ«°²°š«š£{|t]OQN^]d\LSPplcXX
+®¥n[FO[ŒŸ³¹~_Wp€¯Ê¢ÀÅ¬­©©ab^crSFQhgv_TI[?_[X<^di[{¢¥ºc¢Ÿ£ÂËÏÎÀœÂÂ£|k{[fwYkWVfhhkaYY\RZAQSNSWejbNLOSyxSL5:ÁÊ®s\R_:@EFIMP>TAFCN@HAIJUlp^UCA>Ud_g{ldeoqiÝãëéàÏÌž²ãêåßßÌ
+ ÓÛÞa\kpxuxwgy
+€ŒÁ¶œÅÛçãÞÃ®Ž¡£ ¬ª®±«tdmtcMMi¯€n]RW\glq`tbTCGuU[~«¬¥¿®dwcš²­©Ì¯¡­hr_8:]hNJDauokdG>w}º¬L\fOW­e¥±§¥Š»¯ËÉÅÂÁÆ fvJby``Qkpl_NUo\Qe_PZZ\cg{iYJ\[^dd?A8»œµhYeT5FmbJGGG[O?OSOVJC?RbR`RU>CPokna[\^gqÕäëèÝÅ§®©âëáÓÝËmÎÚÒjY[X\tyzr{y¥œÀŸÈÞæäÜÁ°²ª¬±Žz~¶µ~rj`X{|QPM\YVLSEII>SAKKF«º¿Š²de
+©§ÁÁ~yIZLV=ESIDE`UsoLWXmi{ªCV~T\ixª±·µšÇÂ¿Â·Á©O`gwVmaR\ELv\hLLclTLpWRKm[yP7b8¥µo©qIR_KYHQX[NKFPPhG=QKa]T]YWUbiY`dbfX^lž°ÆÓéÝŒ¹ÉÍËÙÚÚÆ¬¡¯€
+­µÚà¬cZY]`]n{€¢ÁÅÈâèåâÄ§ªº®£­Š²£€£Á¬xu{VTJ_MVKPGeSBF=BWIIzÃµ®€€pÀÃžoŠdNBHQI?KA:[dh_DH_{ÀrSoiqWnœŽžŽŸ¶¬­¹œÂ~®¡§cLyoIYdDSQNXNVXT[nK?TXiBgpFeŠU,GJ
+ŸžkRZPQKpa[UJ?BBJXVISLZKOPNGf^c[Rav`adhÑèÈÚêêßµÛÙÛÉâÜÉ¡¢|žËÃÝÜ
+[VU[hvjddlyvoyº·Øäååš¯Å¶Å°ÁŽm
+¯§±µx«s~£ycSHGGRZc]\CU[\`@E€v¢p²¬}ŸŸ}d²ŠR4HbZABMaQu`kiaN¡r?[t¹ÆxŽ¢¯©Ž­³Œ³Ÿ­ªº°·¥±wLOfv­¥\hIU_uYUy{ug\
+i=@VoDnNUTc7%7V¢r
+gdvzXIBTJHMFBRFKOCNRIRLMR\RRbdeox×âë¿æÞß¹ÍÍÔ×ÏŒÈ¢wËÚ»ÒÙÍsXSbibYjjlºßåàä«Šu²€¢¡ŠqTx¡vwuiUEI`ISohciQH@C>YklsW®ÀžºQ2Q]F\YnmqnfrSVfZhaZ]O¹yu«ÁŠ¬³žŒ¯«~µ¿»¡»§KPLi~}k[jSTU]||~[mPa« ue>9cHLk_F:W50*[ª¹€«¬¡|kSyiLY^Q;TGQE_LI?KEELUXOVNUS`o~wÜçàãœâÜÌÍÀÐÚÓÊ­«ÛÔÚ¡àà¹enytz
+hZO\q¥Áàæãá«
+lt}«YyŠ
+
+ª±€oye^w~Yeœ¶T`HBHPGNWLy¢³ª®º«±ºf£rpP4OWBOZg^[zwGJd^dGcfe©hkzŽ€§€Ž¯Ž­¯¢«€³
+Zk\U_UYPBa
+i¡Zb_SwNa7<GD{OaeDY031FkŠ¹Ð€ŠRUtJOUJATh_ISXZJIU7@{RNKQ_jkacqÄáêëíŽÍÉÍ×ÆŸà×Ÿ¢¡¡¬ÛÙâÄàázh{lznhXenŽµÈççæu}ss~zsbXu
+qª¥o^j}XWpU{VNYycHVu[a°ŽžŽŽ f?;_ZJE>AH[WbixqhvwS^>jor€µxnz£¶©±©€±¿­µÆŠyzoVnVma\DGcšxurVbTnigF/WGLTngK=02AM|vvt€ ¿ÁSRNvbc@XLC[eH>Q[T=@VRRm\\kkgaQ]iuâêÞëìãŒÓÿÿêâòðÐŸ¡©®
+€ÝáÛÓà×{oxffi``cZbsžµØçéå{ff^vlTn[z£fJu{p^Rf
+¬¡€sav³ÈŽ­²yp3HpM=B=F:JQj^bfz]bŠ_I[qu¬­ ¢€µœ©£« ¬¥wpVTb²~_nsQhjRRRU s}faFRC<@7DAYZ`gGJ7IUQ^m€p­Ž®s^[iiKb9CCI^`MJAPRUIFEUnf\OLRd``z|àñòìÛãáüçíòõûü÷È¬«£žßãÍ{ÝÞŒwquve[\ej¶³áÜèçijl}}|ohnfqxez{S]®Œ®µ» Æ²y«ªÄ»Ÿ©¡¡­i\NGPCB>>9<FDUKtqmKW¢mdwV@Fp^N{€ž§­¯ª­yfIO`Ib§pbeNFmPHF[[vxŠg`FB8@;@UT_fšCnQ>;GDQfUT[EBY<>AT`YSJPXPB5AFJPE`VQV__^sv§åòïìàåüÿýàÑà÷þÿñ³¯ Œàä¿rvx±ÞÝluec|vzvo¥¹ãÔäçª|Qjk§~ufYi^d}_T^Zx|©ŽŒ»·Ÿ w ²Ÿ»€y¡pNOJG;:F<S_dK>i[ZXp^[\nnfxs¯ŽŠx
+s€s[Gu^s\pSVJgdVVSTUqHKM:2@;87-?b¡SefY;@9jpTpVdbm¥QUgOyw?HN\P_bNHA622<G[mc\TWfdgt¹Øáðôðîûÿÿúöéëõÿÿº¢¬Š·§Ðáèµ|w{ËÓlltsk{«­w©Åà×åè±¥¬¬­¢ymtin}wjNfb°tIW^Vswx¢»¯µ¶»{`©Ž§ªÀ¿Œ²O¬{mCHAK<AUWP[D@p9WQPib]ghijbxvYOc[µ·ZrZmiuXZKWcIPKDHp§ªmTER3Cd`@nd>:1,
+18@kTLEAC;=k¡bqFZTjKK[cQ:Q~INRO[]vX^K216CL`€¬©«ªµž¢~x áìôöôõþüùýüþÿíæãÄ±¶ªÓàæ}mr¶Â}£~£»×Þçç±§Ž®º³apkqyMb¥yOstpy\sy©¶ž¯®Šn­œÄ­µÃ²¿
+a®ŒrWRWKNBQYMBL<;_ONMAHEUUwš
+yqsxgmSDRhu¹¶šykab_lzjOOGJobUBA@PBwXYAJ=7HI6tm:22:0PhWX[}T_74)3D¢mQUIIGDWQahW:D=;AaO?KA_VNSP96>Q[SUdXWZ]`benåéò÷õóýêèöéãíêÜØš¥¢ŽŠ¯®ÜÚâxxoÍ×¯¡ËÛÚåç·£œš±º­³cvhp_~j|Kk
+ktœª¯ŠŽ¥¥£µŒ¬ÁÂ²¯°KU­¡sZL]MCCXqP=;>NqT_><Yid_t]aNYv³±dofUcPQ]NNACYtQYDJG>p¢©kRNLB1=@FVNTB,(J3zpRWwbsf85>Nj\9C895KB=/.EIKMX76DMSFHI>A@>RUSWVUUWX[]bhšáïòõïßñöøôçîäêîñÆº¶Š§ÎÑÔÊŸwtxzË×Ü¡
+ŠÐßÞêéŸ¥ŸÎœ»lvyg~h{[eaiScld¶¯£¡¢¥¬msª«µ¹Œ­·­ÅePµ~{]LIFPWaW8D@IrBBIKMVYG^buxeelpjkePeutzSNDKB<BEB:36@&=Er~KEUOA.9QLEJI?3*X4W__j[55:Gw|KX@O_.KDA>ZpkL=:<EO]|_MV5E@L?ÄÌÌ²€¢j¥ëìïõóÐÁÿÿüìçóýÿå²°£¡¢ŽÏÑÊÏÑ|ÔÛÌ€¡ÎäÜéåž£ ÁËÈÄ`g\gZdoTwTLVmc³¥³¯¹°ª|¡±­³Ž®š
+¹i\\[HSP^XlUELQ@H@LFR^P>_RL_qzudsidxZNZ|itkj{LNR`\QD?E63FLWB>;CFUnTN>5FZF=8?V10G,CKKp ŽQ(-5OodbO.7K[?AgGT9J[iF8ACHI}h]X7LLdLÉÑÑŸ®°ºœ¡nªëëíòðÖ¢Ïþÿùùÿÿö·¬š¬€ŠÅ×ÐÛÔÉ·âã¬ šªÈâãèß¹ŸŒ¿µ¿¬¹¯xV~~KK}vZZycOIP[w¡Ž¿š€ÁžÃ¹µ«Š¡¹€¹š©«Á²¢~­œ¬
+^R[CDLZAOXOOG?I<HGFfVAOUNZ_KZuve`EW^kM`~~uaOOU\PVD]C75GGJNGPN@J]DUE<GLKD8_\779/%9KX
+®±]*1:),0BQaEMEQH<CMM@KR71OQMCTUUfyZXQ_FÉÑÏÄ²¶µµr±êéìñòÜ
+€ÇóúþñÍovŠŠÃÒÌÃÞÅ©¥{yËâÙ« Š©¥ÍÞàäÜ¿··¥Å©Ÿ·¢[mgVJZWOar«¶£¡œµ±ÉÃ­€©€¿»Åž¥ŸÁÀ¿¬ hx_VYG@C`]TDRUOEKGGPQgxXJJRQ`X~}kVlWWZpcHcnn\RRQPa><=?17AC<BD1[VUHFJ@TFHHF@86*>1<*5G8OxRC2J18?VeIUYUxSlEU_\JB:5XRJIaSdpU[YDGÉÎËÆ¬±³¹¥q§ÞìîñòßäîìäÝÏª|­ÅÑÌÎÞÎqx¢ÜÜØ€¢±¡ÄÑÛêäÛ³Ž·Ê¿»¹Œ»jh_Z~p[NVn­€°¥­µÅÀŸœÁ¢š¯Ã°°Šµ°Ã§®ÔÒÁ§¯yprb>HCPXHblaBIb]SYavfLRF=@GhnAVof[bY`j\Wx_VMIID:=A>C>8:D>7=PSVJ><TG>4BI?EBF<0(#+;:e~Y3C;B4klZKHMV|[b[W{wd27KYKMfdZ`YYZIWÄÊËÈµ²Ÿ·©wrÄéíðññèÜìéêåÕÛ×ujz¹©©ÍÛØÙßÃ°uxuœÞãË¡¯ Š£­·ÔçêåÜÃ°œÌ¿·ÊÀŸ¥·°y€sttxXKQqµ­žŠžÁ¹ŸœŒž±§ŒŸÀ£©¬ Î§­ÍºÉ··o|iSdW`XtZhKRYri»^}¢cJ;:ERt\P_ZVP_enZqw{ceNRL=DNGBAC::@8:<;+<JDkdLOEAFJB;KDPF1+5&Z:[RW0,=KWk~riCJ]lhxOe\EWH35C\R_jl[YLSTUTÁÆÈÉÆ¯ÌÊ»r±èëðòòêåëìëäÙßØy~w­¹²ŽÆÙÞÜÛÜÅªy§ Ñäç€§·ž°ŸŒßääãÝÏÃ¹¹ÂÁÆÄÀ±¥³£©¢«žrhMOn£²¬žÇŸžžÁ¿ÀŸ³œÂ¿ÈÀÀlq«¹œ°¢·°Àº²tl{~gl`]WZ_beXbvœ s^jPedOISMDKVL^ZV^gmu]YJGJ<IWACA>;@?MV<>=?PPvn]l6LNJ;7</5<0'/4I8DrqRP+7:Hgish8L\{Zl^XM^wU32@LSidbrlBINGK¿ÄÈÉÍ²ÉÌœr±àæîóôìàåêëæâßÑ­ŸÄ¹ÔÞÝÜÜÜË®µ· ¡ßåÜÌ¬­°žÁÉÑÐÔËÌ¹·¶ÉÂž»Ã±®±²·®­rywÇŠu€±ºÀµÊÅŸŸÆÄœ€§³É¬jeÀºŸ·š€]œ²­²fQ^n|_
+qaQSRxmX{­kcWYXF`^Vbmfb~wOQH_KRI?EEH@A>6MCI978DO^Zps@FHEE?.8@299%(487scjREB3TYuz||]AfZ]jnKN)3@Q3[_XRLCRJÂÄÆÈÏœ»Êµu®ßëéòôëàçíéæããÒ§ª¥€±¹ÊÙÜØàåàÐÁ±²±¯µäæà»³§­¿ÏÒÎÆËÄÀºŸËÚÈÄŸ¹®µ³Å»¯¶uÇfo³œ¿ÅÄÉœÂÀÇžµ·«º¥š©ÀÁÉŠpu¬ÀÁ`qqwi}pŠtnbqhz{olwks|rviYU]lady~}w |zz|~H7,8EPlkPVX[K75/7@A7&0B?4FDDKI&@@Uk]\rHPuic
+uXk**SFEbvQmcaV>QÁÄÅÆÌÅ®Å±u°åïíóòîØéïêëéèÕ«š¯®²œÍÐÙØÚÝØÙÕŸÁŽŸ»°¥£ÏæåÆ±ª³Æ×Ýáá×ÐÊºŒÉÈÎÆ³ŒŒµ¶ÂÀº¹©¢®ºÇ °Œ¿ÇÌÊÅààÉÅÀ¬£Œg®§žšª³®ŸÊŠ © §Ÿµ¹œ¿ÌÈÅÌÌÎÉÌÎÑØßêäåååæãåâæãÛáâãââããããåáÛÊÈ»£Šš¬O-1@=D}gYUJbeZJIYVZejTyZD7I:LT9=@A\kY\[DQbHsv}u¶
+
+25AKUgfjdEI»ÀÃÄÉÈ°œ«vºäêðóóêÝëñíïíÜÓ£«¯¶²œÍÓÖÚÙÕÖÓÙÙÙÖÑÍ¿ÆŒÂ²ßãä¹€±ÄàãçâÉÈÌÃŒÂÂÏÆŸŸŽœ¿ÆÌÇÄ¹²ÄÝÈÂÎ®¡·ÅÒÔÑÍÈÛÖÓÓÌÆËÈ·°©¯ªš±žžµ­ÁÆÎÓÚÝÝáâãçäççææêçëéïóñóõô÷ø÷öòôõóóóïðëìêêæåáÞÒÒÍÍÆÇŸœœž··Ž­¥ zrufl€ U¢¢¢ ¥£¥¥}JDIPS\gVRdw{¡¢¬ª³¯
+²®­ŽŽ³±o±OTpT¶ÀÈÇËÊŒ®ªw»áçèòóíàçëîîíÜÎ£ª±§ÁžÍËÌ×ÝÞßàßßÝÜÝÛÕÚÝßáÆãåØÊÑÎÐØÞÚÈŒŽÁÅÅÍÍºš¥¡¢¥€¶ÒâìñðïíìðíäéìèäâßÝßáÝäääääçâÛØÍÈŒŽµ·Ž»ÄœÆÄž±»ÂÃÂÃŸ»·Ÿ¿¿ÀŒŽ·¹¹Ž­¬¬ªš
+~}}ywursqonmmlkihfeeeh¡j^Ip¥ª¬­¬ªŠF
+¢¢€¥¥¥ŠšštÀÉÈ¹ªš¬¿ÃÃÎ¶Ê¹­º®µ±ªy§©¥€¡ h¡¶ŸÉÊÌÑÑš­v±ãàÙäóçÛèííäæÞÍÉ¹³ÃÊÊÉÊÖÖØßàßäâæåæéêêæîìïïííííäÈ¬ŸÄŒ¡š¿ÈÎÒÉ¹³ÂÊÑÜÚÏÊÎÕÐÏÉÀŸ¹µ®ª§€£}xuuutssqrtrrrrsx||w~~~}||zyyxuwyxwvvvuutttspppoooolnkmmqŠuhš«®­Š¥LŠŠ Š§Š¥ši°¹¿º§®­žÊÅÆ¯·»ÂŸ»ºšµ²±³²c€«±¯°±±±²žŒÈÌÓ×Ú¶w·áÍáçñèÚëçîíéëêèëÞÚßæáØÔÒÖÒÈÅÊÇÅÇÁÂÁÆÁŸ»»³«±²¥}ztwxzzwurooonnoruy}ëè°§±»³š¡
+}|{yxyxwvvutuvwvvuvww
+
+{||~~~~~|||~~|~|{{{z}}~y~~Š
+¡šª¬««©€¥VŠ¢¢©©©ª®jÄÈÂµºÄÇÅÕÒÏÊ§®x¹¹¹¥·³²³Žw}®±°±²±²³³µÁÃÉÌÔ×ÛÑyºÂÕÝèôôóôðÕŸ«¢¯ª§~}{||zyyyyxwvtwvuvwxz|óöÚ®œÅŒ­£
+¢¡¥©©¥Š§¥££Z ¥¥£Š©^ÇÃ¢ŸÆ¹ÆÕÕÉÒ×ÓgÆbºž¥¶¶ŽŽ­n²±®²±³²²ŽµŽÈÈÉÊÑÖÙÖ­|»ÙÓ×àùúù÷øìïµ©¶²Š ŒŒ¯¢
+ðøú¿ÏÐÀŽª€ÀèæéÞ¡­   ¢¢¢€£¢¢ŠŠ«®°¶·¹œÀÁ¥ ŒÒÒ¬ËÊÈÃÅg¥ÐÏÍÄœ¹ÇËÇÆÍÄÅ§]Á¢œÄÒÔÒÅ×ÆÔÌÌÄ¹º£º¶µµit¡¢¡€®š¥šÍÌÌËÒ××ÕÀÃåãéäùùø÷ñãóÞ·Å¹«§¥€  ­ôôí¶œ¥£§­²ºÁÏòøÿåçåÞÙÖÓÒÒÑÏÏËÉÇÅÂŸ»»œÁÃÄÆÇÈÆÃÃÆÇÈÈÆÆÈÇÈÜëëëðÝÝÛÙÑÎÉÇÆÇÈÇÈÅÇÎØÝÞÞÝÜÛÜßäæéêëééêèæäßàÝáçéëíïñòóòª¢¥Þõôñ·ŸÓßÛÕ`°É¿²²³¬±­£zQ]|uytoqfe[qf[Klpmu[\{efUjW|%+?pgx]eÑÓÒÓ×ÚØÕŸ ®ÄééêêääéìÞáïøÒÀ³³°«±»ÎÒÌÅÈ±¬š³ÇÕÆÌ÷÷ûÑ­©ºÛßâÁš³ÆÑÕ×ÙØ×ÕÑÍÊÄÆßßãéïñóõùÿý÷÷÷÷ø÷ø÷öóñïëèäÞÙ××ÛßâåæäâàÚÚÜÚÙ×Ö×ÕÔÕÞèççîçØÒËÄÇÅŸÀ®¥¢ ¥Š§®µ¹¿ÏËÅ­šššªš ¡¥¢
+uxrehotm£ ŠŠufVSW_WšOIJH<AL:>OcF<60-A;(5&!(2-><[K<>Lb^LJ`W[DALQ
+H_rwt}
+krYÚØÙÙÙÞÜÖÁ±ÂÍíïëßÏÜÖãßâîøçÁËŒª«º×ïëæÖÖš©¡ÈŸ³ŒÃÉäËÇøøüå¥­±ŽžäãÌb]
+Ë¬ÏÒÉÅÇÉÅÂ¶ÖÛÝäçèëöúÿþãêäãæäßÙâÓÔÐØØÄÄÌÊÊÏÍÐÍÁÉ¬ŽžžŽ«²±€®µª°ÎååãîÛŽŸš€­Š¹[OLPXbV^\µ²ŠYPQHGFD?QPMKGFC?FQQMF?@CBA£ ŠŠ\=LIRTdœN@HI;7E;*-]M>.,1="$!.1;BZF6QWHJ=@IX?=FgfvZTR8¡¥
+we{]\eMßÜÞÞßàáÚÈÊÑÞêîïÜÖÜÝãÝáêöçÂ·³¥ŠÄãïëåÙÙÑÐÛÙØÒÑÖ×ÕÓÈÏù÷üãª¢ ®Âãß­]c±ÞÞ¹œ¹®ŸÅÇÂ~©ÇÅÆÕÜõùÿùžÇÂÍÇÔÇÈÏÅÀ»äÍšžÌáÔŸ¿µÂºŒ€ÃÉÇ¬±­Š»ªÉäääî×¹Ð°§¢vxwtbZ[\ÚÔ€^UVOHOLOPVB?DAJGKFB9GGC9BA¡£§©WADNEKwåÙP<>7*5>/$+F85 
+&>&&0
+
+
+<=:'7K3EDF<8;/C?=Bb\dj?)+š§«wTegY_Táãàâäãá×ÀÊÒÛêëîèÙØáÞßàíöÞ±§¬Žª©ßïëãØÛÚÚÛÚÙÙ×ØÕÕØÚàûùúïÈÊÆÅ¹ÑãâV±áÞÉŽÁŠ¡·»Ãu}·ÂÊÐÜ÷ùÿúŒŸÀŸÔÉŽÄÇ¹ÂÂÒÅÈÉÎÛÌÆÇ»¹®»ÖÛÙ¯š¥°Ž¿¡ŸàáâïËœ« ®§nn_iXdUàæœuf_PNPKMEPHL>BHTA?H=C>7@RAªªQF:F?GhæçãÁUbM7;@;'+*A&.8
+3%)(/
+28>B>S,CG8;HN=:7LPXidH
+ '££qkcJNJççåäãçãØœ­¶ÖçëïáÇÉàáèâíøÚ¥¯©¡·åííØÍØØÕÚÛÚÖÕÙÙ×××Þùöòé×ÛÜÚÛàŒÞãÙ«ÕÞÛÆœÃŠ²²sjº²ÔÑÑöúÿÿÖ·¹ÏÇÄË¶¿°ÊµŒÉÀÐÅÈ¿Ä¿¶Ç¶ªÓØØÁ¬²À¯¡ÃÛßâï×¬Œšª© £ riaabmZaÚãÞqc[ACQFGICMEGACQP=C48C=7.7]OQJHWléçäâYSVbO6&#*HR0&E+*4#1&2
+<@JHAX8FIO;=BHHEQbrU3H)0,¬¶«wYPUKSéèéèåçÜÛÓßÔÕèêìØÎ×âçæâîùà«»Š²âîìÔÙÝÛ×ØØØÚÓ×ØØ×ÕÞ÷íßßÖÐÖÙÚÝÛ»äãÞØØÕÑÏÌ»Ãš«¯vÇÜÚÖàõ÷ýÿõ«º¹ŸÉŸµŽºÍÑŒÃž¹ÈºÆØÚÛÆœÏ©Â×ØÙÊ ­Š·¯ª®ÀÚÞáîÊž¥£ ŠÌo]SaPXe£èæéy`XTXXRDLT\PYJEVOEKJJUJQIH¡¢€©¬fKSKWXfåäâàXONP`ZD&
+%G6
+2351!4:""9@@66NFBD5<83CG]dmODCL+&+ºž¯\djSJXêéçÐ×ÛÝÐÕÃÊåáæçÛÓÚåëØâðùì»€«Ñ±°æïîÁ ¢ªÇÏØÍÒØØÖ×ÖÝïØÈÕÔÔ×ÙÚÚÞÏÃãßÜØÕÏÒÐÉ¿º­¶²¥}ÐÑÊÒÞöùÿþüŸÃÊœ¿ÁœÂÁÈÀÒœžªÀÃÉÖÊÄœ·ÆÂÈÖÚÛÌ³³Šž¶Ž¥ÔØÝãñ¿¢š©¥£±¿É}h_ZXXTX¥íôñdaTY[ZPHNXTR\gdTIWcN^S[YW¡¢£ª±^<AIGLjÐÍÕÓWLM3BRfaK<D(5>1-:@#$#2?-2<<9OA69=8Hu[PJTQNN* $¬Œº³fC\OIMGÏª±×ÉÐÃÒÞàãäèæàÙÓÕØÙâñùðãÓÔØÒÕâäãáÜŸ»¹ÒÌÑÖâéééëëæßÃàäÞÜÖÉÔÜãåÓìêìçæäâÝÐŒ¯š®ªš°ÉÓáÓÑóøÿÿøÑ×ÚÕÔÑÑÏÌÌÖÎÊ¿ŒÀÈÎÐËÍÈÊ×ÖÌÙÜÝÕ¯ŒŸ¹ªÌºÍÚßäðË€·±°¬Ä»ÃÉÌ¶Âòö÷±
+|}wwv}ws]dhkonsowt€€«°bahoi{êãÛ·PWkaZ__ZP_ZC@-5I=F@MA<:?KNKEMJaMKRZ{zXJNOYX]jN;F¶ŸŒ³vOTSYTS¿àãàçååßâàæåâßÕÏÕ×Ý×ðùõìåáÜÜÞßâããããäçëïòó÷øüûúúáÄÖëïæÛŸÆßêïðóóö÷ööõóëÛž¥£¢£§ŒÜìòÝœôõÿü÷ôîìëëëëëìëëèåßÛÖÏÉÃŸÀËÖÙßáãáãàßÜÙØÛÜÔÐÚáåòëåçäåèëééëíìêêëëìíîîïññòóéäãïñêëïíìéäÞÙÎËÑÚãëîòóñ¬¥­­ÛëìîìëçãäÚÌXÒàìæÞÂÃž®zyiw\À¥º²¯Àº²Œ±bnG ³²±®°±³··±«¶¹ž¶¶±°°~¶àáåååêêèãßåå×ÝÓÍÕÙÞàðûôíäÝÛÝÝÞáâãââäéìïóöøøûûùôÙÑâíóâÄÆßëðòóô÷÷÷ö÷øóêÚº¥€£¥Š»ÝíóÝÀòöþþöñïëíëëìëììëéåáÜÕÍÄŒ¹ÄÐÚÞäåçåãâÝÚÕÒÑÐŒÆÝãéööôõõõõöôóòðïëëêéêèçååççèëëèâÞäíèëìëêåàÙÎÄžª«¬­®³Ž§¡Š­¯Ž¿¿ÃÃÂÂÁÄ¿£\ÉÁÈ»¶¯¯°¯¶¶NSd]is}{\lm^pUVšœ©µµ²°³³¶¯®šž»Žºžµµo²ÙèåáåääãâãáæçáæãàââåãñúóæåßÜÜÝÞÞààßßãæéíñó÷÷÷øöéÎàäéïÑÅÝêòóóõ÷÷÷÷÷ø÷òëÝ¹¥¥€€§ŒÜìòÜÀïöÿþöóïìíîîîîììëèäßÙÓËÄ»ÁÎÙßãçççåããÝ×ÓÏÌËŒÊãåêøøöôööóòóóðîíìêêêêèçèëéëìëëìîìâäéçíéèâÜÖËŒ¬€€££¢¢¢¢€®°«ªŠŠŠŠ§T£¢Š §Ššªª§O£tql§·­g¥²¶·³³¶Žš Ž¹ººŸ»¹žµl¬ÓèåäçåçêêéçãæåÌÖÛæéêéëñøîâåãåãããããâããáãåäââæãâÜÙÖÑæàÔÒÊÍÐÌÌØØÌÄÇÂµÖàá·²µÅØÜÕîõÿüîíèëìíïïîíîëèäÞÙÐÇ¿ÀÌ×ÞãçëéççãßÚÓÎÊÊÌŒÀÛàäøùôôõôóóñðììëçèçèçççêêëìììíïïïíìÞàÝèäáÙÏÅµ§ŠŠŠŠ£¢¢ €«¯€ªŠ§€£¥¥PŠ£ šŠ§§¥S€©Ž¥»º»·¶±T¥­¯¥€€šº»žº»Ÿ¿¯¶Žm£·µ¶Ž¶çéìèçäèêéìçèéåèåáÚßÜÚêîôìäåâãããããââäâáãããâääãåäàÞããÌÁÑÚÓÍÉÒÜÜÏÏÐÇÄÓÍÈoYj£ÂVY¯ÂÌîôûòÃËÅ¿ŒÀ«žÅÅ¶ŸÂÂÂœÃÄºŒ¿ÈÔÔÖÚÚßáßÙÔËÉÄÈÏ»ÏæäëùùöóóóòðïîëêéççççççèëëëëíîëéëìììíëÛÑÐÚÖËŒ­šŠŠŠŠ€¢£ Šª®£ª€Š£Š¥£Š?ª¡£§A=JAD3;<1<.+/,)0GLE193*+72<543389=cd]TJBH>EDWçãÞÝàâÜßâÜÜÞàåæåæéêéåíñðéæääååãääßÝåäãäääãããåãâáââÓ¹ÔãããáØÝÝÝÏÇÔÒÓÅÃÀŸ­šÅ®^{¹ÇíôúùÉŸÂ¬Š®Š°À³²Ã¬²ŽËžµ§À·Å¬ÀÜåäÖž·¹µ²ÑëëîùØÆÉÌÀÏÈÇÈÄÇÂËÊÂ¹ÇÊÎäéêäÜÞãèêìííëëçÞÒœº»¶©©©©©šŠ€¢¡Šªª¢Š¡£ŠŠ¥¢€F©š~¢§ª©>?B:63<60,5722>8;K0):112515=1%&'#ai9+/:?6BÚ×ÌÈÒÍÍÑÚÚàçæäãàâåçéæèéíèçæææååâãßÕÙ×ââããââæççâäãàºÍçéßÞáßáÜßßÙÙÕÔÖ³­œ³«³€ÇÇ¯{{ºìôõûÙª«€žŸ³² ¯ªµ¥±¬µ£€¥ ³ÕçäàŸÄ¬ÍëìíøÄ£©¯«­µ±ÜðóÍrfmonmin`ejimZ\Pclfbcntx|€£š¢§ŠA
+Šª¡BM5,.;8789177?49;398.5:?/@''-*1
+2§lr925"=?8àãåäâÛ×ÓÖÍÇÑÖÙÜÞâãäæèçåçäëéééêééæèçããáßàâââßäåàØÞÚÊáïïßßÛÛÚÚÙÕÎÌÈËÐÏÂËÆÆÀ»ÁÉÌ¿Š¿·ªºìòöüØx¬Ÿ³°­¡ªµ»ŽŠ€¡m­ÔçäÚŠ¹ÁµËëîï÷ÉŠtto±ÐÔÆàåÂ²ÇÞñóë­yt]bNKNNPN?9:BJRMMS^hk¡€£_^_T^W_ÝáÛ¶>QJcGW[SPNYTFNHIL+)7*?.8G?228AC9155+;.20$
+*+:.+-3£z7-7.959ÖÞééëìíëìêëäßáßÝáäåçèäÝáÜëéäçæåæåååäããäááãßßßÝØÃÞÜÞéôîÕØ×ÔÑÔÐÃŒÀÀÄÀ¹Œº¹»œÁÄÌÐÎÒÓäæÕ÷ëóûúèÄËÏÚØÖÕÇÄ¿»Ž°³ŸÂÆÕÁ§Ã«±yÑåäÝ®Â«Ííîî÷É±stry¡§¯æõ÷ööôðäïííñôòòñøörRME>RMIGDDIHSVMEGX¡€¢¢fT_hVUWÙ×Ì±AVD`ggR=IG?;;<@D;'$4/"B44('8B/;:<10;/.49)%;B8IZA88;?;.ÉÙØÕÏÒÚÙÞÞÞÆâßáÑ©œÔáæÞÛØŸ»ÀŒŒÉÊÑÔÙÞààãæåäåèççåääÝ×çíôéŒ¹ÃÌÍÐÉººÄÆÉÏÐÐÏÎÎÏÓÕ×ØÛÜÕãêÔÖëóüôñóìôôóôòñãæÞÊÕÓÓÓÒ×àááâá×ÓÐÒØÜàÙ×ãØÙÓÉêïðïöÖŒš§¬¶ž²È·¿ÞîïòôöôàòðòññòôôûúŠbQVVUQCGE?EQBOdR¢¢_BZYNVhÖËÅ±AVLJrPYN=D@DDDB:-&),*%$?93,AD27:+'/33341<@18H8=(M£{=FA@=2&ªœÌÑÒÒÉÇÕ×Æ¿ÎËÉÃŒ°¯šÂÊÌÔ»³­±²¿ÇÌÔÚâäàÞáäãÚÑœÂØÛÔÀÎíïñòãããäàÛÛËÂÐŸŸÀÃÄÂÅÉÄÂÂÅÉÎÏÒáéÍÇðôûöóïîííîúüùÏÈÈÉÆÄÄÆÆÂÆÉÌÍÎŸÈÉÌÕÜàæéìïìãðððïðößÕÖÚÛàåÖìñòôõôõõööööõóñîííìöóÔÊÍÌŒª vr||v}p{`ZYKMjËÈÇ®EfpNWUJWROL@C,:2:@.,9;6360CD:9.<%$
+*%-4,9>3;98QF«¥{D/3'@9>¬¬Ž¬¡|¡²ŽÄœŸÇÎÐÔ·­ª²µ¿ÈÏÙàäâàßææÚÌ¿ÉÍÜÔ¿ÎÖíïóöòñêððîïóö÷õõòñçÝÏÂ­Š©®±Ž·ÏàêË¿áöþùôððïíòüþúÍÌËÉÈÇÀŸ¶Žµµ»¿ÃÃÁÁ¿¿ÂÀÄÄÅÊÍÑÔêïïïöÛÏÌÊÅŸÅËÓØÚáãéíîìòòòôóðòòöóôõõòïìéáÚÔÉÁ¹ÂÅÒÙÝÝãæå§¡£®€Šš¶¹ÌÕØ³\Ä¯Šy¡ jkB:7;QQE:C9A>O66,27-.,")--#!4@F:AOAU­ro:D<%$32£u{}y}k} ¡²ž»ÏÑÖ¿¶±µ¥°¶ÃÜäæäââãÛÏžÄÕÛÏ»ÊàÚïí÷÷ñòïòóóôõùùù÷öñíçÚÊ² ÉÛåÈŒæöþøòñïðóïó÷òÚÓÐÈÁ¿œÅÁÂŒÄÅÂœºžŽŠ­§§ª®Ž¶ŸÀÂçòïíôÕÌÏÒÔÙÚ×ÚÚÖÔÓÐÏÉÈÉÊËÏÓ×ÛÚÝÝÞÞÞßßÝÞÛÙÒÍÇÂÆŸÈÌÍÅÎÕÕ¥ ¢µÄ°®²°©Æâ³rÜÝÝ·ÐáßÜ ÂÏÊ¥KU««­®²µ¶¢xµµ  ?}yu{¢vxdkzqvWIUU_bB|g{wZi «¬±«ÇØ×Â¹ÅÄnCCLNU\Z_mrgu€Ôèàïñùü÷õôôòôòöûù÷÷óðêæÝÎ·€¢ €¥¬ËÙçÌÈïöýùóòòòòñåâïîéäÓÙÛÞäéññòòðîêêæãäãâÞÛ×ØÖÏÎêñíëñÕÎÏËÎÏÎÌËÉÆÃŒ·²­Š¯¶¹ÀÁÆÉÈÊÍÇËÌËÊÌÍÊÊÆÄÀµŠ¢¢£©­°³¶³vmŒÀŸÊÉÆ®žÀD­¬®­±³°€Šš¥C§§Š¥š¥§k¥mv€Š¥€¡zi]pmijx¬¢©ŠËÙÉŽÈÐÎx>:=@CEIMOPQPOPOPPV\óóùí¹¥­ŽÅÐÚíøüøõñëãÕŒ£ŠÁÚæÎÆîôþúôðïóòñíéóïíåÈßâèìñóøùú÷÷ööòáòðñððíòòî¿âíëéòæåààÛÜÝÜÞÝÞÝÝÛÛÛØÓÎÅ¿Ÿ»¿œŒÁœÃÄÅÁÁœž¬š¢¢ylmjnkis¢cfš©Šn¡¬šš>zsCwahy §¥ €vgOveb{uxq]wÃÑàÍMDGG<569:<?DHLNRQQTUUUY]÷÷ûÜq]ZWWWX[^`abdis~}¶ÖæÐÊíóýøñîñòòñññòðëäáâêîòô÷ùüúùûû÷óëôôóóïÚôöõÃàìéæï×ÌÜ×ÕÒÖÖÇÕÙÚÙÙÕÒÔÔÒÔÖÖØÙÙ×ÕÖÍÈÉÈÀ¹­¢
+{xr €hNJSKIPX\lZSroljQdy{\wt^UI~|rwht8ktltulqiibcNVTluuu{zqkqrT]]Dnobow¥z{~ÁÖãÚH8440/1589>CGJNSRRUVVWYZùúûÙeXUUUSSRSQQRRSTTTRKKIHHEM°ÅÏµÃíòýøìäÝßàæíîðîæØŒèîóõøûüþþþûúø÷÷÷÷÷÷õø÷ôöÄàìçáîÝÒÝÙ××ØÖ××××ÓÎÊÉÆÇËÊËÊÊÇÃŒž³®«ªª§§š£Š£¥€¥§ªª«© ¥~hQ}|uuMo^cT]SZ]CE][EOSLOILQJLVGO7gc_a[XVYUaVSahhngZSOLB81I?Yl\i}xwvZu
+cš|z{}ŽÙäÞF30.--.0258>EEIMOMNRRSSXnÄÍÖ¹\URQOONLLKKJJNPQQQRSUQQS[ÈâìËÈïôÿýöñìíèâ¿jTQJL|¢ŽÆáãæêñüüüþûùûüøúýø÷÷ÁáíçåïáÞÛÛÙØ×ÖÕÓÕÖÒÍÈÅ®ÃÃÅÈÇÇÇÄÀŒ·²¯­ª©§§Šš§§t££¢¢¡ ¢¥ŠŠ¡iQ
+
+}fnoP`k[iRKLhchajqphY^e`hUX3\uklicoh`H_bZa^aX_FA978:@8:BhaahoxrzztÚâÝTB@W97899:=@ABBACEEEGHKLRW[][QMKLKJIFHEFGHILNPPUSQPRRV£¶¢¶áøÿþúöõôôõë}TIGGHHKKPTZ\]\^ch€­¶²¯³µŒÆšâëéæïáâÞßÝÞÜÛÙÖÖÒÌÈÅ¿³¯·œŸÁÀŒ¹¹Ž°¬ª©©ªªŠŠªªª
+¥££¢€£¡o [€aHgnaaXPRLUKRE>9?SU\Zcyuufga\mj_1Z_Z^^ku`Jczyx}}|yzzz|
+wPoviZqooR{¥šwm
+ÜâÙŠ¢¥­F66689662326=FNT\YUROPPKFCCCA@B>A@BCEGHILPTSQQOOOPQUXªîùþÒ}}
+§µÃTFDECDEEGGJMNONQPMMOMNNNLMLNNQÛîêäîyYjz£­ŽºŸÆÄÁŒ¿¿ÀŒŸ¿Ÿ»º¹³±«Š¡¢Ššš€¥¢¡¡¢¢j¢ t_GNSg]\D\MNWT`eEOc`SSPPKRVbfuusq0j}wj[X`vz{z{xx~{~vpwvgd}^obhix~¬£~ycywoÃ¹¯«Š;9;?;77346?MPYDceb`\]\[WURRNPJEC@>?@@>=<=@@ADGIHJKKOYkzlWSSQQQMHGB@@?ABACBFDFFGHHGFFEEEDEEGIMSÞîéåírGB>>9914332027:@FCADSky¥¬®®ª©­®ªšªªª¥€   jx{f>_hbgfB\RN`O^aCNUbmwsttu{~|}~1s~tmUagYvlz~onnwzxtvpxmOxwU[PhojDw«mSµŠ¹³§¥¥l:9659756BACXjLYdba`_^_\YUWVUURPOOOPMB<>BDB???>:=;=@@DFHHEEFFEEDCBA=>=@>@@AACCDDEEBCBC@AAAEEEISâîèåîqH@==<<746766853224220.-,)'''*.30.124AOZr€£€¢¡¡¡¡¢~9;GP^kfSFMF9ADGR_MaRcMeklBQ`snswzvuoc{}zz1qbb{qWwwvqnttrtmwwmxzGxSbhCi~fuª€£xQ¥Œµ­ž¯¬°«L;984;99OLC\oPFY[\\[\ZZWUVUUUTQQQQRO@-,-,-///4AEH@<?DEDB??;::76333234469:<>?@DDBC@>@A=?>@CCEISâîèçñmGB??==95655465123578885555542//--,#&" 
+ -š§¢¢€{9?HJHMQRV_a=w^\YLaJS\sroEDkoduwyzsqr`1^UtzvQvzz|uy{z{{|{~}Oi}
+Kb~la}©£i¥µºž»œ¯¶³B><9=;>BCDMQbMMUTUUUUVUSQSRSQQSQRQRB0/11/0,16AEK;76:=AD:52.7;C?3/%&')/2334444778879:;;<>ABDGM{Š³^FB?=<<7456555531359:86545243211-.0-.'',-4©§šŠ¡¢u€£€l8=HJJKJJIJP7LT`]kTsXOss}yBLtukx}wvwwy|y_1e|lyPy~z|
+eezx}jTq~oxr¥¢ gr§©¢ŸŸž­ºž¿t@ABA??AAEHJjWPQOOMNPVRSQQQQg¯¯¯QC90)&$"(-/2BFM;1(''$$#!!"3;D>.(+'58+16'.35:8+))*-100/3458<=?AEEEBA@==<74866777533469975554532312321/,(--2©©­šŠ¡¥¡¥B15?IQMQOMEO6HKOOLCXDhkpw|?czur}yx~tiqu}o[W2p~zUw~
+
+bkiVqikH^Z{CQHwt¥®¢¢£wiv»»Å¹¯œŸŒ±L?<;7779;:=d]>954232223:?DGs÷óíÒR2)(#"" 
+
+
+%ABK;)&$'?LKHGE;9C=-'1+25
+ 
+
+-0:A:$"!%*)#!$&*6?;;8742,---,,*//13444476899866744544334220,(/.-AHR]jt}¥¢\,1;CISQTSQV9KJJMMLOCfZKMQ;`oij|vybtnY\c0vuOs|uy
+
+
+Swimr
+ZUW€~kNRt{|ªš zkŠ²·«¡v224-0-..17;QD42111.1.+,).1O¯œ³š}NC:7:?<93--;9E9NKHB84/,'!6:D>-$
+/;D>$#
+
+
+ ".023INJIJIFCB<83..++()%')((+000202765575555522.,1./.(,-,.:¡¡`,3AJKMNQNIV=PPRPOPEEG^KIL=HEZ6COTZsrVfx\C4hM\xyvs{{zvgr}i\lv
+smmR¥ZjYS|~¡£§v]`rrz}V/-.-/--/4:<7111-.291++--5;@_abb\YRC@LYYTSQOMJUjtR1(%#$
+34?=)"&**-/1366;0=D=$$8;<=<743110.FHKOHKIQJHE9A>><;;9874214/.*,*)(&))*++/0-.+).--.)&./.7€¢^ %/4>DMMHMSAOIHNMQ@>FP]OF4HBU0EBECDF@NVU_G4Q`yzoy{zwzvnpfpsM|{u}paryTjXepsfg{y
+k`evw1+,,.),0622<311-.2=8+/0-0+-G^`a]YXMMV`aa\\[[Y]WC@?<7?<<;/,9>=??>@?>=1;D=$&>AAD?=<<5422MTQTSPQPOMHCDACCCBAAAA?=<6<;:76432//$
+!
+
+!"#!  ##"$'&1¥ £o&-34:4:<<FK=QQJBBD6?AFSdG7GHS?FD@?@6E@@ACI25L_ptov{wyxwE~u}v~{©zITdciY~s
+urfo}}yf`Uh
+\)),5),/;;4011.--&%%',-,.)(6WY[\YYOO]_be`a^^]\^[XWRVTOIHHJJHGFFDCA==>??>4<A:#'¶ÃÍn>.'"
+JHRTGJJPNSJHEBEDECDBABA@A=BCABAAA@>=&
+
+
+ ¢£x22069<IJMBI>IKOKLO;BAC:[H>JHP.CBC;6CA>ABBH0$17BLYKRdpwxtxtYuutw{~isy¡k<TatuTTe;p|
+~YXsy|oeMDaf_g=$(,+50530250+(,,'(('.(.*(/O`laVWMNZ[^_\]]]\\XWVTPUSQOPPQQPPNMPOMMHFDDA@AA@<>¯æçæ³<&!!NSRTTRPOPMJLMFEDDIEDCCABCDBBACBDBAA3¡yC;699;DGNGP?GLG>=E<>BGEAT>K=P)>E87IB>@>A<H5+39@QK3=?B>KdgqmY{rwl{z
+t¢lczCsc{sn£qrilrpsWH?EGDHJ)',))(++.23/--,-,-&')%+,)&$+27:88=HT]``]]\[YXVUQNRPPNRQQQQQOQSQQRRRRUQQOMMMIËÐ¿¬l840)1;GGHJIKIHIJGGCGKLGGMCEECCDEDEDCDDBC7
+ ¢z$+6:9>;BB=IIDLORID>5==>?K?MKP1?54;B??@BA?C3720g_@B^ -;Q@AB5GRYpx
+¯sw~~Ul\~skssrz|ned^`][bgU((,,)-36100.'(+)$"&%(((('&)'(# 
+"$+07?ELQTTSOPNMLQOQPQOMORRQSRRUTSRPPQRPQWWVROLHC64@?DCDDEFC>569:=@FLOJKDFCBCDEEDEDEEA<A8,,3,
+6 €}.!-&6?=FBJMICKJG=?DDND8EFXC2=?N?@==335<8/'296,E= +4T?@B=HLKGHLNW_nrt°xdwIJpzomhqv}cbs{t~wortrq}P(2..71022'*&&#%&''(()(+&(&&$ ! 
+
+!
+
+
+
+
+$,2<>>JNcYMPPRTSRRRTUUTTQQQQRTUTUSQPNLEBOQSQSRQMKA
+"26@HR>9<BEDCBCCDDA;76+A<:H/=*(>"
+
+
+$22€¥|6
+	
+ :9BEJ?IK?FCDII<AA@/5;O?C<>:<,5;:9#(146M;626OFJ:DDBB@BDHCKJ@?£®£Lbgsrpdks[f~|yzwnt
+7-,,)+23/.5))&()&&'')&*))'&#
+!
+
+
+##'&%#%.,-4<@JOU]\[XWWTSTQQQTUTUTPQQNJHQQRQSUUTRzku{vgG6+#1BB+$*/B:"!E;1,52A"1-21+2$*-2:,€€x6
+
+
+
+0#'5)1D=KGHFA@B8HG:L>=;8<=70>=99(&'/*KPZNIA<8@GDAB>CDGLD>?<§¡uo}`^svbji}~dZgu{
+p,()/--'/.),++&'(),'')(#%"
+
+
+ 
+
+
+
+
+
+$)($%$#
+
+4 * +(@N^tPhkda\XUWUUTQRPNLNSSSQTUUSy¥µš«º¶tirK1&B=%:Q;.93>>$?1(
+!%(.1(47€€|7
+
+
+ 
+0&(
+
+
+<9*2?CE6>G8XA89=59976<:=**$)08@21)J118?KDA@BFBHD;CAB
+£
+|q|
+lww|z
+vj]iy~rflqsv}?--*01/,.)&&'$')+)& $ $)' #
+
+"
+
+"
+""# 
+ '-&$2=WZsœ»°|T`bXXRLPIJQUUSSUUe¬·³²º{~Ž¡^zV]>Q>;;.3M62C-.!.;?43$#¥£~:
+
+
+0"84&
+"77">.+0;AHG9545>B5..<8?'$*.2-4$C594>=9>4@@9HD?<DCDWh`lljryyz~©~uxdh_jmyqbbZ893582-/-)))'&+3<)7'!./0%#
+
+ #
+!
+
+"
+  
+/-%+:O{aAd§_7XT3e{lmtbl]`TK¿§ÄÆŒª£et
+fl|TKI2:,L320*)-4/#7(.
+
+Š€9
+
+
++.:1 +<$4
+*
+:")D>"AE63?86!*926H/!'5DI..J5*58=CIG;6:9046>EDxd^}z~bXshuzhdtgpŠ­\6-.412-1+)1.('(/'( #% 
+
+
+
+
+
+
+ 
+ "#
+
+!.0J?HTt³kcX_WPC0U@;XZV€~nxnZuj§§ª¯¥€Šªš§¢¯¢§KM[XROZ1;5T;;80-'&-086
+$"ŠŠbM&
+
+4-(301//J=14%./,=3.$9:
+@
+"*//>4+T.$.)(85Q4,.79?79C<A:8592254aimuqlj
+z~xo
+uJkdry§¥£¢¥­µ°°«€D.3650691-,)(%(#"" !
+
+
+
+
+
+
+
+
+
+#'
+
+ %26&1?:lµA?W]G@9AAUMn{~qIQv¥³[Š¥mv­©š
+naLWU:R;HGQ\@8?68-4>5234/17¥¥C_J
+(
+13:CCW<I:MB0+>*$5
+H
+
+
+*/,.(Q.+$&/4A7+27:B637KE569:62;@B
+~hupjmyvoj}Zdlq¡³žœšŽžŒËº·¶®265,+234))($'$"#"
+
+
+
+
+  
+
+
+
+
+
+!!!#)(/992?KB·sIwewKKTVLI\s¢_QPqª±¬¯Ÿ
+bbbv{hsolkMSiNQC7KJbM=A8?18@@--43>IŠŠ]_W.
+
+83DSEG=@8=1=;55L25G#$$
+",0,"R3+96O(3@36B45=A5642456=?=sqy
+wy|hšžŠrv_cpsWf[iodeµÆÃ¹žºÂÁŸŒŸ·Žc8:541.)$&&,.$$!
+
+
+
+
+
+
+"&$%&###
+
+
+
+
+!#"
+
+ 
+$#,/).3=1G?8w¡ŽNGnqn`VVv­peM§€¿¥Ëp[sct|pravZl`bfKM8@;;BMTTO>3<<LDEHIHL¥ŠsM?*
+
+
+
+;0GK=GA12><@;27.*6H>!)0JJD</>8*SA330&A<2&++6@5<A1-,./2.58>;qyr{§ªXhcXJ[RVX\Tas
+¬¹ÁÃœÀÀŸŒÁ¿žŽ¥N<74.+&"#$#"#!!
+#'&$""&'+(('2+ 
+
+
+42-$*
+&/'&2,1'+/).3Av~Xbw¬l6?vqf~dt§±¹ÂÐÃ¿®nw\gxlsšksjo[]THGB>JGGDLTTMFCPKF>JF¥Š~AB5
+
+
+
+=<.O12<?;6;1>G4F8B5GD7MVe`chO7:L@dR=\CEW4{M1/V4F2L0,,)01/4177owz€­­jwx~fXJ,DVvVŠ¯¶œŒÁŸÂÃÔØÀº³@;6/)"##$&''()+*(+.,*$++'&$),,(#'##
+ 
+
+
+
+04-&0&(!(+!)#/*;-ANrb
+UT|iR<JNI€wS¯Ì×ØÔÎŸ·²OF{g\umc|}tlbu~slc_^WROIFDIGWOSYVZWR¥Š:A
+
+
+
+
+
+3GB0I6-%GH48>7G.@FB@J;@4V`G@aVI;CHS5GYb_5yv|sH&iD#79/734168£ }{šŠŠyyw|s\q|fc/==NZbz«¹ÁŸÁÈÛÊÝßÈÃÂG762...-..+../-287;@0''(,*&('(()%%,&,+# 
+$
+
+#%"!)
+1/%9;/)(4Yyzp¡  O==m
+ÁÐœ¿Ìœ¹¹¬t|€ªª
+~somhXnpmf]Y^VV]cb]]gghdq¥§nU:
+5CJ:PB&0[D?<6:N>JPX{l_ufG6aVl^Q;5DM+<G6q~v|Od|^0!ghNN#-^\C+<:Yqkj¥£ŠynTmUVM:)!=_rz¯ŸÄÃÄçäÑÖØàêä~UTkB8:95-..,*,9@A>@<'%$),+((&'*())(*.($&&&+&
+ #'4- 030*#& +$)(&2.59a}°«qj®q<<Axosª²ÁÐÍËÍÍÉÏÓÒÔÖÍÈÍÌ·Àµ©wc_[cihjowpintvrrsnljnmhkhZ@
+22Q>J:PMLA+GHHN2JMrdecRCpshY8;4^5=XF2FdG<==OSeWXJ[=):5(1}dXU`UNWd`
+miVhIKZwm}¯¹ÂÄÎÙÖÚãëéëðòÊtÖ³[>99865767:56.,,&$##&,(&&$!$%%" !
+%.$ !"/;.17.3+*,4/;0&+/462,6<r¡ ^3F ,2B[eau µªut|ÉåäâØÐËÆŸ­{ssswvux{}w~rv
+~v{tqpoknnb[J&4FI9XLXFKV0Ej_G0JZ{bq_=awbZC7MDurR3_Z3!ZWT5CjZG9AD^PCHB[[LWZm
+ojafH_cup
+otU]SYJ]eDN£±¹ÂÅÏÝãèéèçèëîíÞßÛÓUKKPKHD?91,&'&!#
+  $$%&'&&%)'%# 
+
+ (
+ -/7&-93876:54?;5;83&=DhuugIF^_Teu²Œ{bbg¿¿ÆÃÂ»Œ¶¬©¡
+ynomkow
+uj}}t|zhm|qgkwyUUD6/&)<XIO^mSLWa.>YZ37QUoUkpGP^][LobMOmX|l9LVRMCA`xV<=Q",0FBUV^U631O\z_uogplvjw|mfq|uc¥¯³Ÿ¿ÈÙßèéååâßÞÝÝÜÚØÝáÅ[PJC@=85442/,-.&&'($$'($#%$#%$'%#!''+211(/.&<889;>::869?@;44:?DM}s_NUTNHFLJIAPo³p~
+¡€­ªŠ¢€š§wcU[XVe\UdcYN?6DLMTQ[TNRbbLtT2PgP4lagjckALTl^5?PeZGBrzylU=FVS5%+) *8Zb:0BW4QQshnl`mdkuykqzwu¯·ÈÆËÑÕÅÚÜÜÜÜ××ÕÖÏÓÖÓËÌÏØÝ [PKF<553/.,+!(($$%""
+""
+$# 
+%$$'(**'+,)+*,0-1,:588#.-04:<:BTKUN;<=H?KJJTZVZeinx
+ŠŽ·³©³Š
+Š|aaljgjkxt­¢lypiUVLKOAPRCJJMI]X\eQi^n\NZ4^lmO+P]C>`}U_^YaTLoGIE@Wl]U
+mc`P<5DNPA/7PqZG(j?@Hyqmnmt^nwuhgrtpqsfr{¬ËÇËÌÓÌÚÚÓÌÆÁœœÂœÂÊÈÆÈÕÝåèWI=63-*.0(%
+%%!
+!
+$
+
+#!"%#
+"
+"$&$ +$&+&(-!6+'()-09ANQHSPRPYaaXI[`abaZehikpqqmfW\aZZOW_cih|¡¢
+xtkc[``[imcu~drk[X>C;?EIXOJSSUCE\hIii\i^S<bQ`H-[B?JC@(IgnJVINM;DgK{hyyb_L-787667<,cU|XEezm2>upmqsPVbcdssdd:tXLQe €¹­­°ºœÓÓÌÆ¿»¹·±µŸ¿ŸŸÇÐÛãäàyOI;19<=//'! 
+
+!$'"
+"##+$&
+!
+&.)
+!!'+! !!'6>DJMM\]^[ffkih]VhUZ_bL3W^XLINMFDLSSKE?QVQLTMLONQU`bi
+nTQhvrngcfwdU^]dPa[RIFCGNUJR\engcPMdZFqbXQVY=J_WB7*/QKRME\cn5`N=+me[L>PmMBfREb[lSbJ2G[O7`D]zp`HMlQ_HLNP|RV^<I9TKbeS9e¡}©¶ÉËÉÆ¿ºž·µŽ¯±¯«ŽÈÓÙßåÓÍ€T:8;(#5
+*-'"**)0-)%% $("
+
+
+#1"
+$$)+,-F>D8965;C9[Uahk]2&oti[VMJ?@B?CJD8CLT^T@JLMFGGJKGPJFIGLB;FOJFYOITWpiwlVOusneZPMF86LIQVRU[mjpHZ|aK^gdMPUD?0N;-5>4O4AjG6_mlCF&d^mbUp`LH5J&ZSF<GV@(4BC=pfC>\XjJaufKhaqwM1?Z[VppšÆ£
+|¢š°ŒÊ·£Æ¿ÆÔÁÃŽ¶¬ª·ÁÇÐÔ£[Zcz=**3(2'2/0-2'"""
+!
+#
+
+  
+
+#//.05B;MFISKV\Y5?Z_SQ[TJE=<E=748767;?<86@;B<BC7>>AE>C=@HB>?@72<GKEDI5Kvz{cs|iPSMW6;8904394CZO]p]c{rEezkcT:7GB:?"863mZX&:aiFGV4XfUtBSIT6D3079PC@6@;,F64]=6JK4XoYXEXUUQW5"CbMe{~¬¶»§§xgx£­¬œÐÌÑÐÜÌ×ÊŸÅÀÉÎÌÊÇÉÊÄÂF3=964<7'*)'# ,$
+
+
+(,(3.1;?ECKIMKIOQV>LTOIHK<??@.-2)+42,9;713</>87646998=>=D@<<:=<BHA.QK@KGC@ADEMPQQOYY^L]1C;98C;7;-3!
+*>QKDMTe`TX@1
+!3IM53YKK9W(d_pS8RDU0!#+*!?<R;%LP@$3=@3:VOURaA;#OlLN8KdI7)%I4J^wmŠœºµšš¥¥šŒŒÇ¿ÇÇÆÍÕÊÕÓÌÅÆÀÉÌ·€U=4F20&')-)>=/!.%//297?DE><30441QBC52-)-.%('-%%'*%%',-.22653,.,.,(.95)8:8;?;A;C=9OO?9<A5/6B:@IA?@JP@QL;5gwW
++BFJUP"+8=1B"-9<837+Q>9IL^HNA;2C7[WhE=?*>;/C$'
+%5OZBJVK+
+5I=:95=T,
+QE{lGXRb921:itVca€¬¢¥§¡ «« ©³£«¢
+€§š®°¶ÀÌÌÐÌÍÎÎÕÓÔÔÚÉŒX8Jb_QU<15')<V5 !3/*.324=>.*'23/??.:=;"#!
+ "
+%&
+%""+(&'#&0'$.%#2*0+0/B;8479589;65H;HM@2:=:QJ/AEJB>@)59<5;r6&0
+KC>2KD3G/'<7=*2*)F/@ULJa7X3O6X\AZ6B=.2->;C30(:8<:7%;L
+	"EHCK22W^IUWK^?N_cfSO_v`Wnk¢y²œ®±»ÂÊÛèÞÊÌÕÒÖÛÜßâÜÝÂx?%Dr²·X),$$/'
+"
+
+
+.+1(--06/9)-,,9H=59(
+ !(%
+
+
+
+%$"
+ &$$ #!"&1'( %((0,7.,2921>?905,EB962/%,..2MOG66<G54p<'*.;.P7%7A??*3A70)(N40kJK):;<N`TIL/; 4DWB%>./FNC.=9:Y+#",/7PN:MCN]\^ZS}~o]`kay~x~tyny{s|vx ¹ ÊÇÇÖ×àåÍÖÐÏàåàÛÖÛçÓÃI)-V±7PW3.# %""$(,,8+*(&2/%(.?M7@0$,'#  
+"#"
+$"! !"
+
+
+
+(7##&"",)'",,6,*.61:7582B@85!+$8-.$D.+:5:?2rB.;MHJP &1:C5%#-#FO7.D,%N<Th\h\='ZI!AG?D93"4F1:-5K6+.(,8Q9&
+-a[bz_ttY^{z{{vT{Vifc
+ystl}sv®ÁÊÅÐÄ¿ÒÌÍÓÍàÙÑÖÐÐÆØÕÀ5+Gzp}|zdKB4-+/+&&'
+&(##7?@>$&"'&"
+
+!"" &!())!
+
+
+
+(#
+
+ & *$ $-'($**%/1215/A>2*
+
+38&6B8BEIS?i{uX:53?ESLRY6(&@?%3F=B27-CJH<D%#>V;<Kfg5A'T0/7
+LG9;1QF%B.+
+
+/722@GA2(%S`Yfuwzx
+hwkidudrwukywzŠÁÏÛÞÕÃÃÁÆØÕÕÉÊÀÐËœ³Ì±a2/GSKXj}tghgg]Vfz£_?;3'..7;CH8"#%""#&"!!
+
+
+
+"
+" ".2%!'$
+
+%#
+!
+"
+
+$%#
+
+
+$%$*$&&,0:50W@@RIFDB8>]OMJIIB;/KagaEBFGFPb6477?6:3(887X\363#8E;SXl\A5<WB/.>99H#
+AB85J
+B
+%EMJBA-85!@PzeisdZPYgzjoy]unkgd`ibb|xrSrly|{pw Ž·¡·ØÃÕÃÊÎÔÝÖ×ÂÉ¹¹¡¡«°vZ=56@Gdª· igoz§¯žÈÊa35<80M>-"#%#&#  !#!!$# !  %%$#!"(!&"!#%$
+#+"$"
+
+(2!
+!!)! %%#""*2)$-,59BDLKLHXPVSLA10@dA[$#1<KZRKCD65!:$7KC`/),D<::OIMW[6]<D=(>-++ERID!6 <->C\U)?3%/kGu~se^VUXgec_h}|hsqX\kV]\ZYeu}tsquhv{y
+}°žÆÓÃ¿ÅÊÊÃØÍ¹µ¬Š
+oP3..=M°ÂŒž±±£
+}~~±¹œ·²d605,#93*('%"$'&""$""
+
+!$
+",&&"
+**()&"4 
+
+
+!
+""
+
+!
+#%
+
+#!
+&5>TI87:FH4B]M]D722E:E<\e<T<D)05C,2';/&7PE7!QbQM`YJP5/B>=B@2CN?-
+
+$XKBNeL__6P`i[zp`eUROEo`\_c}o]r|
+qgukXlf\i\ot~nzs©·ÃÏÕŸ€¥³²ª³»š¢¡wZ>78?iš£š  Š£¥¬¥¬»«ªWHg7222-*.4)##"#
+ %$& $&%0')(("$!/
+#
+
+!@cvL73).ERXdfII:=D^L<@<[bg@P^[ZSL0 !,?HPD>E6<SQUBTi=a=DV.0<I<CB
+ # YG&ENcokbBA)hqoamaf[hutyvdmgdd|^ZHelgxwjcjpfhi~}¥©¯µŒž£ŽŽ®§~aF><Ig{ŠŽž­­»µŽ¥¢|Qd«Ž¹vN_jB.%$$%&,'&#*$'4&%+$$! "#&2""!
+ 
+# 
+
+
+
+
+6B\pxvmD,$%:Dw\fplIWLQFV^\mKko<H^Z]aSR$DHRQCNJGD9eSTWj$V!75
+0NPX.4$'E;'&&8Eb=MX?gdc_QAQfbL{yxwzxpr|[XjoVieeezpjidVajfjev{
+š±š¢šrqswf>38=AVn·ÍØÏÀËÃ®Œ¿¿®«¯l]cjx¢«²ºµ³·®§m`MB1.(,*',&5
+&&-(%%!$(+"
+!$9Ja{
+
+}nC*&QWTkWZpY^oNNcm_PdK__8Pa\RkIE7:^,bJSozzAFdJJgM=GFL>86J@C1G:9-
+ 8?R:gI%HJ*JE\ah`_XtUYhpyyy~rqwbllf_jxus}|ruxrrfikwxtpxjz¥¢zxx~  g<58AGS³ÄÌÎÈ¹¯¶žžz©¡ Š¥€r}hbUL12)%7)*%1"
+
+"
+;=HVKTbnznyz~vkjdKD:;Hl]JfnYQOUP]NaTcMOlG`cgsh
+XBca6G9MO]T'0QO60>5IBRDC[O[CX:F=4
+,CMOmcTmF[LJFD9%c``HINJCD[qx||}bbb[cvu
+rrfifQXhgc`_gn{{}wv\`[bpls¡€¥ ^<;89<W²··°¡²Žœœ²ª ¢£ ¥§|vv~{vvrtwfnzsr}i[R0+7,6:";]ZVKV^viLJ@Fd\\i~
+x}ustlXND:VRCQ;;SG}pUKaebdjHL\cZJWfNR3A_N^-TYV2\e:IbL7.>MGI><Zdd_H/+=?B6PNU;6!ZFWZM1]NYZgh^RMS9D_,
+1Ndvzzsacd{~tqeX]h]IXfdeic^ZbVaQe]]`ehlptt}¢¡£Š€©¥f@?BAGd¡¥­µ±±ªš°­¬¬©£~VLOKKKJaUe}vmrwnh[?$(=%*1F[jd]^pnjkVVTf{jgl}yms|ywptrwxr_^H;ktO-:>YSrTRQLJRO^GN71[iZO<Vg_iW^3TL1UBIC^`_231P>E)PbWPO;'CNOW;KHRI^Za;GlF<?3/9XCH[cB_gnb_!
+!.DXUJYq|utz~qk[PW_N_ZSL:F^jiUocUqdifjhrjgkvw|
+ £¥€¥M[X?KUVou}w ¡ §§ª¬§š¡]YKLB?5JIMNS^RW\UL0*S\jhdlgeX^hnv{e\NP_ntk^`nqd`hqhimfZgjjnmux}iRr\_UQSbex&6MD8;CHF>BTmTbJY_JjDS&[4H9<7I]DV627TGU_dYGTECD\xgS59Die_I@UeP6R<-%BEEJdIQfpefU",Dfvjw}kjVHREg]T37K]cYY\wdYXQZdpqrx~ytq
+oaNHPNIZip§ujgmnt{£~{oTHA37+00<DKXjfbbb[^mkxVddsopr~mWZ__Rec^fQMPOQUXisnrghru{d]Pvzeh_YM=.TNKQPOBON0Sx]^dAmm6:[@7<AOXCTEUYW?EaZEIB4V_bc_\\chaPxkYXOFUQ@AQ()o45eQ;_ifkZ2!!LEP{w[_rwy|}qa_T/4-PD!
+$1$+CRXSRWOJGFP`opuyryz
+rgbPSQS[ir
+u`[`cfstt}
+hJA::8/446<:GRRQKX`_mtbgv{p\kq`PRW<?IB7?Rrtorniiql~}][QHUnXS;O2UVZi=23EnJ.YyhaSeZ^L9FdSY<D<^TlSogc6ESXF3<FOdqqiq}njJsdFceE3>lpe^|1+q|`KYiwdkI2Uq>'.BAQ`TAHy|sqjP-
++&AXDSlL
+,897@EGN[YLpflv~xvvdnvwxklsfG=@KFRZdp|¬ujiluznm{}w^PYYZTUTY\[`feegd`]Yacd`_aejvnkdcOXTNJTdv
+
+u
+yUMRYga{l,YOkpsh>bEoh5USh\wxT\LAKKeSSB@RYK$DtkA=.K=EXFNNixF`ibVfWpiogbV-lh-g3*XUES68/6ZBI3,BFP1$<7>`r]F]i\["1ID7%"khW.)&%*
+,9CIT]_Znolqqq`YW[W[X[mx{mdixf_]bduš«²ž¬Šxqs qimyxtkjgdeicZZWbb^[PWkOOH=?WP<?H`Vill~ztffilt{ms}uxuXF5I\OTFb]MQ[{{v_orERg;<eZXoe>KDU2LVC^HH_V*>M>I093-G+$EH:
+$Ei?kLVvp]ieqoTtvJ:3]QI8C.?5F^R;8/%DRUABNdtpDe^ecTKhaoymDDE"(9.3*%+
+
+.KG<O[ej`hiljncVWZ`]bdksumZOWQPKEENf £¥¬°©€uuwtpfZTYck`^aadieaaZmni^TS^[V]RQTXXZxvt~uysh`d`eeifzmbvf[s9*:I@RHDbntMH^{d_\KoLYG3fs~dQPeT/7/x{jUVn_RJ\23F6	?WQKDNRs\rjn~T7XWV,\UPYFC6M=c\LVwYLsB2CkhYUIDL^@b^AGGKNf|h\I9LD79<@95:838<?NSKHO`[cZZfnqkgaZZf\QW[]b`[`XRNLOHBBM`r§«¯­«©viehmpknrywsnhdb[[a]ejhh`]Z\khm[]D;XkSOlnkbxzpnj_aUYGJh}jZV;D@,+N=JQRafRVLFaXDLa[BJRF5R\we^ifH9@LZ&Cq[;9U.
+
++E)G=%[wRjY^ªFCGUk]dSR+f;W\7Ki
+I<Z^iQm2/A#+TG
+
+3]WljWGJ\YR[XPKEGEKKJHNOPRYa]NQV\da\^_ZcP]]WHNWYTTM@ECOID?DIP`n¢©±®š¥vnnlhljddbbenlnsmdZQMY[W^`cijhgehsnvabSVV`_dILRRgv}yxs|}jiH>SbojWW@M3?FCNsfUanmbJ;3nLE@hh:0T<,#8BaS0Z^N(`lVzT@>>]|zX?/4.
+1\WL6P@WGMa^x{P=hGYjdOMBK?YkW_6.OL];#<)4XY*:ZW\hmyyk`_c^XYWRTTVRU^WQQMLJLLKIMLOPSU]Y[j_oaZQKRD?B@FEDHNKQe| £¢{umkjpjfhi_TSPW[\^[^\ZV[]`_ei\NCEUVXwvnelqqnrqp|~jcjlm~{fXZlytT:@WEE:t[}w\]W[VD.GZ1JLtA,`TF77E[p|iTL5&IaShOCJ^p]sl_H1214:;1OkP<ALLK]ZgTL^{M:M=QUml|y_bgYMg
+e>0)
+2Ml ;HPTp^hqv{vljjd``\]WXTVOLJJFCADBJWRY\YaZXY_ZXUUJJGB>5@DCHEDGDKZk|{roj_^\Zedbdmmgfjnwsllmkgfdd^WSLA::@CLJ:Y[stb\\r|yo{{opq_dt~}x}zxgYPPO2CbZNdkDAWh[VRoSV!0IE6@JLDQ6\iYXX\C*.+LO12\[
+?nyhUITNrUPS\ebRM=A@4TS(,W\iT]`MIRUQltdLNZSHQiuyy}V.., "g>-NPZOHMbnty{y~oiga^_[WUSSNLIIJFLXS^ZXNZQSRWKGRPCBCCGIJGICEGIEEKMP\iottnkjjcZXZZ[[WWV[``][ZWTZ_gkhjjggb[]Z]Y[WSYNHTRblgd]rwgS`u
+kaUYqrvqj
+{zwql2203),,/?=PT@bjQABDZ=GC8=>KF:[JB_RFM[W/"Nm6.CdF=_RAFULA[Jq-;]H2MOZa:R
+U-X@GHIM?J_eLcjVZdocZm\egiaXSSINJHEcT`ogW[aZdjhmqnmljhigh^YY[\[ZUSX]_[`wj\u`QQYVOBMDA@AEDHDFGPNSNHDFGBDFIKKSZcc`ac_WX^gicZSS^ebZWWXRT^\TPLJV\]^bjfaaeb`_LbgmcpocYsi\Ydqtn`Zbqhz~{n^SFC30 
+<.#&POR\bLK<_YV\UBCDQJ-ZR3"LF>`J-CagcTF=,:[a*3Ohc58I) HA#B:5cMWq7<-F.K]DDLIN15>d`hhcd`lu|rknka`jrvuyxjfqpnolsonnjsnp|pqwxpfqvuvtqwvrvqdTFEFEIKHACACEDBBOYQOIJLHJOPROIQUaife`XSRUVafb_a\RRVTLKGIIIIFCDJNPSNTUOWWXdijYl[s]Zgl^eTVWTap~zn\bemoj{`PPIZ=029@_[?H>2ZHJ^gpCE=C4Z:!8F@Z@2\UlU4WQ:?,Qb+9A?dRQNSLBM46YMZTSYF/=>BFWfD<P/#/&|~uwwlqrwx
+
+yw~~ztvrxy~
+zz
+zy
+yw}z{zyuplZMNHIKIPOOOMM`hc_`emkd`_[TONOUWT[gsyvm_Z_W`c_[WW\_]adh`XWZZZadb^VTRMEHPRU^mt[_p|zs_spboyuknhjiipqowvy|_`ipgZ>)*3 <7^2$.BAA\WCfYfE47RH7N5%HC8"AtiZ454ED&-LICVQM?D[O_H6;'5OZgFKQQMWbWR/99K1
+-(uxt£
+y|uw{{w|}xjcummdSOQQS^aZbiebZ_\Y]YTWWSNRPPPRXhuxupkpldYQLNNTc\SYZ\[djZTW\XWZV\a_a_YQG?>@ES[OT]RYT\lw~|psaY^nnlj{thT^\wmjY:**%2,148PP<##O8F-!!K_H4G@N>Z5WPQGiS<D>,2IJ3P&(/]CEVMOKI2K,$
+20@_&DIQVUQD65-9M3ejww¥ª«­®¯šª¢ ~px{c^decc`egfZ\YW\Y[^VOKPVYTW]ZWQTPRQPVis}ytxog[UZXUWge]`hjknqjdei^XibPIABHTXVQMUVNgHIKOYNMamvsm^QY_ahntldQAZ[hWI3TEJA%
+HRI@B
+3fY>60+:4@aPB]_=SX8Gwn_A=<BqhoYY_12.)Ah[H2R-,+GQX/:KZAI0=?;7L?/<2$,qz¢ š±¶°¯µ°š«©¡{qqtz}wvwyshflifjfigb_cd_Z[VQNGKOSX]adgnqqrh_XT]cnuvkga\ZZWNTa_YZ`d`b\`nqjdixvhdgf[XY]\Z\\^QfTWYVVVWlo~yi`]c^_efcIQ]YP><RM;B='%)86;%)96<FCKEP+6'=?>Wi`Ybw&ImHET?R>VVy~mW*/3F\Q8Y;3E*Ap<[SI<TZIALJZF\lOMP+* š¬¬µµµ·µ¯²­©
+{x{zvkjyys|}~y|wvyutwpmkqwutngeb\XRPRR`_SMJJJMW`_XRSZ`addlje\Z\[\cbf\TRSRSUZahi\Z[]gpfYYWXTTQVW^HGJMH@VJR\SLeTPWWedbRIHScYQ41N65R5.54>Oc
+KGHA
+FB9
+ -+Imhei
+N8xD,4,1<eu9YwcK89fapPAhsJ=BQ[gVEFP@Re_WDGSTOaxlDBKB¡£©š«¯°³¯°šxyzx}s{y{zs{nt||~}wpfcdls~z{pjrxso_Y`cc[[be[UPQTUTX[YUPTa]^b_Y_hl^PUYWXXci`[\[]_[Z[_]Z[RX_dYM]`fOUaP^]R`fv^lzm`X<>Y^Y_8)ED;C.93MH7#
+"'9E10(TC
+2%2,:V+Ydv\4j:'3@B^l?;<XaEAfnd^]u]V)=mcRKQXLaXmcBJD6Ab^bMGbN£©¡¡€Ššª°ž¡š¬®«§¬ty{tsnux
+wyuuxri`]W[[\[Y`ghd^a`_]]_jmi_cced\WXTUZ]^fgmtjZa_^]YZ_``\`ab\RRUMIT]^Xgg[Nch\Z`gW`STQX_ntqvq[)[ZcbD-FLPC+.#1U@%41'AI18Y9K).0SE_NCXm]\G)%*C^XB@4KY`VJXF;B2H?<8NOhZ_gTSK.!cgkS1.0H[_OKg_ ¡¡ ¢¡£¡£¡¢Š²«§
+~v ¡lo{wsswwz~z{z|z{{rmljghaa`diqlif_^[gjff_[_YSVUSTVUOLW]a]Z]TLRRRXZYNJHGGBFHHEFNOMQZ]^N\Xjbbh^mdZdfgjztW'7QdcP=MYI6-3>M1>/6&"71R97E:-BNFAH7u{LC.2CGSqb\jejT;SDAIA;+OEL@55:Uln%FWC;G5 1OPH8jt¢§£€£€§§€¡¡Ž«¬Š Š©¬¢š¢yqqtussw||zsknv{yf^cggfa]ZW^]Zbe^[YUOMR\[W^^cX]_cgpbTMOVQPRQLU[ZY[_QQRQWTRSZb`WEDNCLKTQYNWXfp}usX2"%PgL+TlWZ68IgcFG$
+45*&90=B=VC\Pe2^wP:)5[LmtpYELX]@LD]qH=S+Rf"
+Q(gsk=0EJX\Saaj\<\(UX«« € £¢šš£ ¥€§šª€²€š£|«­£¥ £€{vhbaomddjggeYVa_[V]cifgYSSUW`eag`XVUMPQY]_^]][[`a`b`bcia][[__`[[_bdY[bbbdafnha]Jb[c\WaUPZarvwzg<9,)P9?T@BB2GDK.
+9$4UH(+D=@8DK;gRfSWTmhTS(Db^PXL;N'&QUTnzoMMoihkR -piIGlCNO`\\V_bLQI.Nb·€£©§¡¢¢ ¬š¡©¥
+
+
+šš¡€§§§¡yugdhonnlqulormlljbcehnonjgUU][RNQQPPTVZ[a__ahieYSPRXPPT[^^WSNSW[XX[`]WSWVMPJLSYXFUSekYfTZ``proAA?503X7LIFJJYS93/A=J/,Y:B[P9]@FDdTDFb9rZdPSg\AZL#4D&K2GKw7$4VYU;
+$blrcb?[^kk_TUDSeKU8&BVŠ{ €š¯®Š­©¥ sfksjdlv€§š¥¡}ywto{{v{|xjdfd][_itwujcXVLORRRUXVW]YXYZ\_dgdYW[^XTZ\UVUSQJKQUXUZUOVZQOMLRTRbZLPALCMb[_abklgF=C>4;9USITP=CSY;.&:3jNOasp9Dc5LO^75aw_bTjjMJ_?LA#:P5-=\K{e9
+(dnTB4Gk]aZjO4<OdjZ[YV>QH>0Bl«u{£¥¯²¬Ž²²±²¬€£~o]a`^rnr¢£ ¡€|
+
+{tu}}j^acb`Y_nxwiYQUSUYZVZ`_[Z_c_Y]bbb_dded^W]`[XTRXY[]XRKRSVX^][YXa`_[[OOPX\OE\WHNGigUIIB,?"KFTNSKapjQ=4R$aUaZKSTW6Z10EOLVkTO`olC.AB:,MF6SLNT9>xkeDDZ]^SWk_fSZ]sO,@a`JIOU>I[R+Nk€|¥§š¡§²²¿¿Â°° ]`bjnhmdnuvŠ}v|
+|
+vuojabh^XU[_^\dcbnrxrilfhb_VTOVXYW\]ZXT^TMIRVPHQIFQeSPKLNHMGELPLPROJUe_0F$BF:L:<RRfcjtqWndgleLA.JA?X,?^<2IKfuh\5'Ud?=7%R=_WSP^djp[lneR/dmrzYiLtteLZd`>VMPdLTO$@[€€ £Š³Ÿ¿ÀÁÌÄÀ¯¢
+zgXco~y¥©y|wx{~uhgbdkomnpvpssplnkr{||uqlgbe^XV_`\ce^YR[\\RWVV]Y\X[WX[PUSV\PEO^ZKKZYVI:N=HTHGGE@Da^ZpiVM[d|NnuN]6
+
+)(^O]ACgnwp^WC3c4<I/Kuw`<QUghvg`kgmhJU%(wqeI`]Y[upV\2N@UC+30c¡£«²¬£³ §³ÂÆËÐÓÌÇÃž ¯¬¥¡ydt
+
+~}yrruhnz~|x|}|xxw{
+gada^VS_`ahkVTTZ[SOS[\gfZUYu}uhibhbEFKZKGNW>HX?G3AKUHJKi^>XRGM+4vP6HhlO.<&
+Bf|meKaYtaR77:SQGSejb*\,BC>xle=RhiJM
+aijK6a\LkaSS:;K86OJ`}šŠªµ·²³¶¢žŒÃÔÙÐËÏÉ®··±ªŠ£§š~}y|
+skm]]^o|}~£¡|pow|sqoorqqqswmdjgWV][RY`ZY[\\ZSRWXe`^btsifhhh`gomZBEUbEDZL`FG>B:DYEA?TYHEZ2/>_J(NP
+
++%W?LZeWyWN-&
+W@4BIIM#S&6`aymqY;`OrlSBfarhs_frlqN9Z]A:?CIkrz§«µ·¿µº¶ª«°¡€žŒËÓÑËÔÇº¯ÃÃžª¥«¬®š£v¡ymlYTP>O`{~xutw|}qnf~mnhehf_]ixvxiqrupdlqcfWbimooc\VU\bfXLHPUV\lsbKEMHG@SHFKPQUT@HNLPR670DZA<.FAD:#RUX\,<A>8D!PE`sgjdz[RFA(7AM#@;<FN>"gq^bT>>]\g]vZ[nsx`d[kM?hTriX`hdqf¯¶¹ž»¿µ°«ž±œËÎÐÌÔÎÄµÁÇÇÂ¶§¡«©°€¥§skZPBD?H]~|yuoorp|}mhlmfehaVZsliyvmviW]^^ffl[Xhq[/"#&(,49FB$,:::K?NNJHLXOVP€A&7-E_6+0''4~cCF
+.FLMLQ+GL_BTk,hZMTO
+IQt_R7GAR:GvW1@+QBpVOJIWv
+RWjULH6QikpihLS]IUªŽº¹žŽ¹µ®ª±°ÈÑÌÒÖÑÙØÅºÉÊÇÃ¿·žŽ­šŠ«
+¥ªqfXPGOTO]ujoiimvz}~zy|zyossvvoimnyl\^f\TPVU_feZM7-6A<$%)'7GKQU[^ZIBGBOVYDcª-$4=\4)'
+NL!1,'"-;-BW77ATcoDG<I4zqKWLCKY3_HfTbNL*p5f[iaBLeGJ_<UJ?brslU=EPZ=ž¶»žµ»·°«­­ÅÓËÊÄÄ×ÚÒ¹ÀÌÇÇÁ¿ŒÁ£©¢«š£¯Šzptja_nkZnomrxpkt{trxvpyukcqzjt|~
+
+uvvu~~x~sdlmcadhde^Z\_MEDLHBFMSLOV_`]RasRME?KRlŠ2+'E*B5#
+$6&%4=RQ4
+BV&"5IF>]mM:6GZYVyVVNQ-mo[RVJ}YHgN_KNT[X9a\IIWHcWI[[+CE;U.WOÀÀÁÄÂÂÀ±§·œÎÊÇÄÇËÕÎÂ³ÆÆÆÄÅÁ¿¹š°¯ª£¯°¡¡¢§tihtidt
+xy{}|pkogduyupocTPZzs]h{suw|sjyrjpusp~
+|
+qqhkeopuuuneTZ\_ZPUT`\^]UVVVZdxxjURWX[IX¢C'>A
+?B.
+$!"(687?VZ4BB1;?V;*LI7KIO;B.tkG_E/37Lao_g^\nE>KHR^PQUM3UW3V]l^XmhÁÃÍÖÙÑÄµ¬ÂÌËÅÆÊÆÏÑÆÁžÇÄÃÄÇËÊ»¶¶³Š¡¯»Ž¥§¥ ¥£}igurnrx
+qm]S]ptsol\RUTZb^X`okiqz~}phvyvg^LZlw|yfp~~mX]\SXa_ZUOP\W[VaqrjjcT3N\og\HGAQE/CP
+&
+
+"
+
+ #$-
+),RG$?WWS150%R"!1,B5'RtIKI>RVAitcn}e*8YYf?CUgG!6IVjPV]dJ`ÂÊÍÔÛÚÄ°žËÏÈÎÈÃËÑÈÄŸÂËÉÆÊÊÉÅŽ¯³«¡°¹¹¢¡Š€€zqy
+ykptwfOLR[dpoi[W[`a\bd`aad`is}wp}
+
+oyxgRDPup}vcarzxnlrpiovxymimlgglaYYdmwvvbBe
+diyhxM[gRVBG!:R$$
+$""&#7R6;&(@;UdaV?8Q]B2O;S]IGMF\ZYt}tygH3SabSNTaTgS9?WS<CVe80fÐÏÊÈÖÙËÅÐÎÎÑÏÇÎÐÌÈÌÀÎÐÊËÆŸ¯®š¬­¥­¶¶®¡   tt]hlhg^OFIS]cicZW\kcbd_^e_f[_hZfr|}}{qslBL^t
+jiQiVUUVa^XtfcmjnkmntuP^srsuvmme{}md`bqqpg`TR]q|diwFLSQ)-67S
+
+
+)$'!!
+)R9$A$@66=EA;/8;GiP4*D&K=7qJD%;ROMk{vZ^]@7\[H>KS2?YLU\Q@UV>BDBaÏÑÏÍÖÛÚÛáãáÛÕÕÕÓÐÎÈ¹ËËÌÊ¿¬£€¥§©Š°žž²{¡¥§xxqlxsd\`cXYWPYY\ee]X]\d`d[PRXVhqtWWp|r|u|fI^j|wkpPQV\UPPYW]Yei`msqzwoQbemwUW[_^a{lWFc}a7@IXlr[COegC1?Q8H&;@N'/6'# &)'-OB(
+B 6)5?@=9%176DvqYQ*8D.QGX0AEhXviU6>ZB"3=#6JJ;HWPbgXi?7TRÍÆÆËÕÚÛàßàãàÚÚØÓÐÉŽ±ÈÊÊÂ±ª®·ž²·¹Žx
+¡¥Š
+tlmmmeY^dVV`nqi_[bcbqofPSWYbwt^fw|sp}x^brwv
+zzdUHJRYubckuomxtw_MYibSSN?LVmfgT<keNQ=A_deH*2Vro`JHJ;0FID>?8602-
+$' !HE "2*!/2184B6
+2;&/1l=OOZ9R']
+CTV_m=^3HL"9
+0
+ESI>Jg^geV]RS\8¿ŸÅÍÓØÛáãâÞÝÛÝÝÙÝÙÁÑÛØÖÐÁ»ŸÄÁŸ¹¹·¶²uv~¡¢£€£yndjngeS[PZnrro]Vfkmytqhff]`leYnxuuujv
+sootxuvyWKK`{soxwswy
+{fIO^uTKKBGURl[dRIV7.)BdsrSRV[Wjmfe[OMI
+O>!
+!
+
++ @L&$1)!',/:6:5
+5A1/CSrN2Q/)fRS0&2nlk[H<AX*	%EB:2;I$41U^YZ_GOtlGGÆÅÈËÏÕÛÝßÞÜÞÞßßáßÞÍÜßÞÝÛ×ÖÕÒÍÈÁŸœŒº³®«¡¢¥{pxsmvttncXTUpxtgWdsgnta\ed`Z[V_dnjewjfi{m{{uxztvorq{~g\dw\Wd|q|yr{}yruHEZ^n?9FMQVKL/
+GWROFHP~\cY^]\ed^YXTNJ&5M7
+
+ 
+&R)
+"!,-$&++:??6=G,,1FSjDM+CNImj]vM8X?#KDI6B
+
+342I4F9[D;4hF_N8HÅÅÇÉÐÑÕØÙÚÞâæâáßßÖÔßÞÞÛÖÐÒÐÍËÆÆÃÁŸŒœž£Œ¿Áº°§ŠŠ¢yklrosv_VYT^xycdyucZSQU_jjcbhlpwmoc^dme
+uw}|{rrwmcimjeub^xxj|wnwtrUa\fmK5/3;"?a`p`\PK^VT\rke[b`ceZ]NGQA?:58
+'!P<
+!"-%'%.$&DK</;,$'/@ZpF'dYWa54QSVe^AF	
+,2MSRM
+',9HJ<;3.X`t7UgÁÀÃÇÉÌÒÖÚÛÞÙÞÝÞÚÛËÖÜÙÖÐÊÇÆÄÁ¿ŸŸŒ¿ÁÂÂŒ«ŽÃÄÅÂÀº²¬
+houqgysbk[n|l_mvh__\^chkcean|agzhkzz|uu|qT[nsnrninp~tt}vvutguoV4!,A
+ #(K[afdaA@,DQKjv{h]^a_UWIA>P=3"- 
+."!2C
+(8*+%+101?=
++:*$+)A@[k@}4/U55JIAP;.]`B7
+?RUBB JFHV)8D_JTZQŸœŸÁÅÊÒØÛÛÚÕÜÝßÝØÂÕÕÒÎÈÁœŸŸÂÂÄÂ¿œÀÃÁ¹€­ÅÆÈÅÄÄŒ§¡§¯®€ ¡§u|}ni}n^upwndffainnh]Vgphm¡creu}g<IC57kqtlztv|zt{r\HIKOJ=9;ZEA>DCHBC>Go_iaYcYa\\aa_WNU;
+
+0-
+!
+H
+
+
+%..*)(/683,
+->0($(<0FMv`09VB42;63@2?EEQhW;1EIQ*-5hTW=<?7GN-Ybe³³·ŸÂÃÇÌÌÎÍÆÒÓÔÑº±ÍÉÈÃÁ»º¶·ŒŒŒ»»ºÀ¿À¶§°ÅÆÇÆÅÄÇÅÅÅÂÀŸÂÄÃÀŽ¬©nnwjyttsnnncK<Vnu
+¥ g}iŠ{n?SD=Gxdel¢¢{jhcX]LJERbWWMKVA@2"GjO[hlf\h\ceiZ_SOF'
+-((H.
+.*##*/-05'*
++<6%/>K1IAaE7/P206&4@>5C9:89DS[YQ5BQI^cUF\XWHA1vjX¯®±¶ŒœŸÁÆÈÆ¿ÈÈÇÂ«¹ÁŸŒŒ²°°¶º¹Œœº»¿ŸÀÂ±ª¶ÈÈÊÊÉÃÄÆÆÇÉÈÅÂÁÄÄ¿ººŒœÃÂ» «±¢¥
+}tlfhdWDJp|¡¥¡sr|`NRFJ^zrR_x|xw£¬®xrigc\QKSTULY\[TLJkaRD%RlvqhdYYO]SbLQJ)
+
+
+
+1<A
+!%+BE
+
+,1$)#'*
+-F7)&6JCl>R69&?:E<B?<<=:>DVGTOPjD46U7 ;@Z88R®ª®°±Ž±³µ¶³¯º»Œ±©ºº¹Ž®ª¬®µ¹ÀÀÀœ¿¿¿¿Ÿª«µÄÇÃÃÄÅÄÇÆÄÆÅÃ¿ÃÄÄÂÂÂÂÁÃÆÄ²ÃÊÈÊÀ€|kji{ysgZeu«®§ |¥gOTXU_leHa}q¬µ³€umXjUANJGW]\iai^Ro`hdQrshaXRWVXK^<M>D#
+
+K? 
+D (1
+!!&'+2A"&"C*UAm!
+$Y?"*EJG368=<C<BN.(2LZHA_d[F#>O9L<H: £Šš«§¥³¶Ž®Ž³©©§©±žºº¶»Œ¹œŒŒº¹¡¬³ÂÃœŒŸÀÀÀŸÀ¿œÁÀÂ¿ŸœÁ¿œŸÀÃÅŽÉÏÏÍÈµ®¹¹µ· dQYz®»¿ž€© ª€€zQ?Mc~~
+~wdHb|tªµµ³°¢šoW]nK5E\GQX2*2Y{DNOdQ]EsO4DEAELMIQ5QA.G
+
+"=
+#:2
+
+
+
+$,
+' %1/6! $F*HDh$-I085C/&:,-.7DMQ0/0/A342JVg@[]CB\X58¥£§§©¬€«ª ©Š¢ €š²»µ³°·»»žžµŽµ¯ª­ž¹»ººººžž¹ŒºŸÁÀœŒÀÂÂŸŸÂÄÃŽÇËÊÈÆ»¬³œÀÁ¿ÀŸ»±WLg·ÂÇÊÂ°€º±©ª£ªvseIWvh^h
+ª®³³µ²¢¢_ekURLXOF@55H7,OD5;3F1BIacg]XOKOCNO7_P#@,$('1#7
+#),!$# 61 -C7/@]Q#0*S:K>8-&B.
++BGG@19?02>(7J_B"bZ3@\FAI¢¡©€ª­³Žµ³³Ž²¯±°®¯ª®¶¶·¶Ž²Ž¶žž¿Á¿ÁÂÄÃÂ¿¿¿ÀÃÄÃ±ÊËÃµ­©©¹ÀÁÀÁŸÁÁœ±zo£ÃÉÉÇÉŒ±ÅÃŽŠ««­¡lXPkt[Ui{ª­±²¯€i]OXBRPR]UZSQSK76. 0
+56GPRNUZWQIIQ;_-%0'<KAFF$
+%!
+		"')
+'#/6I9J9b<+
+3HA2'/ <,6@B:O):7,6DK4'@PY.6jH,CH2@>¥­¥¬°³±³°¯¬««©®Ž¹Ž¡±Ž³²±°Ž¶žº¹ÀÂÂÂÂÂÂÂÂÂÂÁÃÄ·©ÇÂ¯|{±¹ž¹ºŒŸÀÂÂ»®€³ÅÈÇÆÅµ¯ÆÆ³²·¶µ¯§Š¡
+d[Wt|nx\Yi}|Š¯°¬Š|\feUMJNQeqjS>UnUUL\YXRTH,JL>WUF=B==9W"!*3FEMG -
+.
+
+'*(
+,
+"3<_W7j$5C<Q*
+9(4:B>'$M+4:8A8?K4"1?A%:]H5@N@HH~š«¬­®ª«®ª­¯­«¬°®®¬¢²³²²³¶·¶¶¹ŸÁÀÂÁÀœ¿ÀŸœºœŒžª ¿ŽHOjª²Žžºœ¿ÂÀÀŒ¶žœ¿Ÿ¿œŠ®ÃÄ¯ŒÂ¿Ÿœ»¹¹® yqdl|kpv{¯®š¢q\eOd[MYcMPJViTQbmbum^T3@KLT<.7
+!"Y%25?;-KB2)	
+
+
+5'")&N,;(&-9/c'S@n;)#?8$*/9>-
+EE,%"2H/3?49?W=%/JG<7RFXP|¢š¬­²²¯®°Ž±±±ªª©©¬³°«žµµ·µµ·¹žŸ¿Ÿºº»¹¹ŒŸœ»žž±®ª§ºŠlFDNZo¯µžº¹ŒœºººœŸŸœœœº ¬ÀºšŸÁÁœžµŽŽŽ­€¡qr|nu
+~Š«©€ybK.C^g]U<%3@uq[npVmtg`[MH9PB/+;=74_;>HJ.5L<F05	
+
+&)5;?!&$>;C
+3($@"e6K>`.>
+6-0CF%
+6F&/(747<;):T.
+FJHINPEEA{¡¥©®±³²°±²Ž³µ²°²Ž²­®Žž~®·¶¶µ¶žºœÀÂÁŸººž¹·µµ·µµ±­­€¢­VG<>EIš¶ž¶µŽ²µ·º¹ŒŒŒ¿œ¶¡Ž»©¡»Œœº³±³±€ 
+
+¡¬® €¡iXS?\YtpsL8:Epoc|WrcRVDP4/(@EL?O]GC24&90)$TR*%$BS;+$"34/"F^A+
+MWQ%B/."BG&6+%8L-/!(786*/[2-F<6)
+;
+.£§š€Š 
+  ¥¬®¯µ¹ž«§©¬«¬°žŒºžŒ¹µžº»»œÁÇÇÆÇÅÂÁŒ¹¶µµºµ¶²««®dE=6:EM|Š°³µ·ž¶µ¶µ·¶¶¶··®®¹²±Ž·¶¶°©¡Š€Š§£¡©±®£s_^XVThY>
+6<7+1V^XP=Y^<Q:=QS:2+/EGXTSa`@@7
+#A4"AQ3"BRFH@83+37B
+8J:H$+\a??%:W@".%2I7,
+#-8#$%JDQF=,"0:!:§«£¢««ª§š©§©¯¶¹¹®«¬®±µ·¿¿ÂÂ³¶¹º¹ºœÀÂÃÃÀžŸ»ž·µµ²®¯®¥¥¬ªC105<C\ª¯°²²³±²³°°±³³±¯§€z§¥§­°§£{~
+š£€¯¶ž¹ª²±ª§k]iG(7(;PB>/4$$13
+$
+;&*@aM77(IKCRUc^KD:G:,SC#3U\~ryzdg86
+2:
+1&N6D3
+Uh+,'5K4
+
+&9J5
+3$38ZXBC!&=B' /¡šªšŠ·Œº³°°°°µ¿œ¹ž³¶µ·»ŸŸŸÁ«ºžººŸÁÄÂŸžŽžµ°®­«š¥§§¡§¬ªb%'2<IEw «ª«¬¬­¬¬©šª««­¬®~z¢¢¢Š¡€š¥šª«³¹¹»µ¶Ž°¬š¡mYh^I<D=G??AG:2CYE+*B!3GQ7:JSB?FMF]\CF6BPLGXKOn`Prgftzuna%",K(DL-^LOH )G^!0M5-
+$+@P<:43+1%'(37+4[D?1
+(7<%8G ªŽ­€­¹ÀžŽŽ·¹ŸÂÁœ¹·¶žŒŸŸŒ·¿©¢ŸŸŒº¿¿Œµ  ©©£ ¡€£ ­¬šh*.8hug°°«ªª«ªª€¥ŠŠŠ§š§Š¢ ¡o€ ¢«Žµ¹¶®Žž¶°®«©uidbfVJPVQ=>BG;@e]M2#,EA\NR,3H?@SXQaNFLGQA0Py]VlaTXMv#'*SW'2*<GE?./C<P$AG-,8	3$@
+"::VMX0HOHM[\T[\`TBG:>ARpVWs¢€©ª¡§¶¶ŒÀºžŸÁÂÀÂÀŸŒ»œœŸœº¶Œ µŒ»µ³¯²ºž³¯¯ª«¯°¯§zz?1O¢   w{zlu¥Š§¬¬¯Ž²¯¹º¹Ž±®©ª¢ £odaSYLDFFCG\ok`J+)-I;;3#CT`.%-?>EVShBIKGF#fvNfdLPg /+k\:#@RC$29JD`T:: 
+>
+*5E&-E*7bE  $1$FE9=a>^=[HF;<Q>C€££š¶¿ÄÅÃÂÃÃ¿ÁÁÀŸ¹º¹¹žžŽ»ºª²²žŒœºµ±®±²°¯®«©š¡|m<.Qyupzw~wxyy{v{{rxc~€ª¬®°¯¬±žŒ»µ±¬¡¡z~o_\WW<C>?DEIUZ\L?HZcPIKB;@cDADG@NTJCSGLDI8
+ADIOgrw
+TU3.
+zK+!-lU,9NLFN3'G64
+@16GD=<U^QOSWJF;9?-6'2Zb,PKG>]YB[¡Š§ª°£³ÁÅÄÃÆÆÁ¿¿¿Ÿ¿Œœº¶Ž·žž€sv®·»º»¶µžŽª©Š¢¢¡¡££€¡o`-+Zwqms{tu~t
+th©¬«§­³³¶·¹Ž³°Š£zmedb\]YU_XK>OGDJD;QV>FZQM2,[LVVM6HPVZ]L7LA!P418?IK=M`fokZ@q!1=uw
+4&)G@<8GJW>0/@L=3K1V2>2FH09D<A-3QG@\@$1VC5Q(=RJIOFZW£ª£°²¥µÂÃÃÂÃ¿ŒŒœœœÀ¿¿º··±ª¡szµµµµµ²¶²«©¥€¡o{Z1Ip~od~
+
+
+{fvgqq
+}~whh£¯·¹¹º¹·¶µ®°­£zzbbSTYYTYU^WSZRXMD?,3.NS@$>V]`\LH;05TJ<:DPK3^UG"&
+5I73:F>&O=2BVWQ0
+(QDTICF`<27@IY4=P?A<U@1cN>7<,OH\kU=SfL9JTebE\H8XP8©¥®¶º³±Àœžžž·ž¹ºœœœŸÀÀº²¡«©«¯Ž±­®««ªŠ§ £ dpc_szly
+
+}vsdyasr
+~qv~zgcto~¡€§«ª­µž¶°¬­­µ¶¶±€sj^VV[WZULU\^X\ZRUSUIUN1!EL9JBACA;C^1?MFL!*<>A%
+/F59G@,">FAC:;2%&8?M9KHcC'33?P&MD<1:R[aZD:@HCT)CFT[ZbKd`gR@X_Zg[?N«Š¶¹Ÿ·²À·Žµ¶³²µœ¿»ºŒÀÀ·±žŽ¹ž®¯¬±³²±«ª«š¢`mrv|ropm{}
+}}{{~{~x|jdt_vyo~~vlgv£¬¬ª¬¬¬ª«²®«ª§€«¯­Šz~oufZSSNSTV]`_\TVMEZNNIO2OF97EQN1EU9C,%7,882@.+(:;'(?FD!
+6N7J;8?E:=<=MJgFB:&-,U.RG:1HWB0DZf^qYAN6RodV\b_XEDKWeC?VŠ®««µ¹Ž¶­ž³¶±®­°µ¹µžž·²«±²°¹Œ·®¯«­®§¬šŠ¥¡
+|\x{~wbWVdx|~zusz}~zxwcalawu
+|qxroz|{}ŠªšŠš©§šª€§ª¬«¬¯ª¡¡l_m]XSURRSNMOPRUVNSgRSGH0BJ53TJVPY\C
+:-=24I\D6B@(!?.
+	* --O@@EMOVON<CDd;1O;#A8=QF99GOYW^snpePY*=DJG;J_`SAMY~T>J]Y ¯²°«š ®­²²³²µ¯¡¯·º®§°©«¶žŽŽ¬š©©€¡§©š¢€ xsiwc[Y^klox{{~}u}wupU[gszm`tsplnthov|qe}
+u€š£ £š­©Š®«­¬­šŠ¡tn`ZY[XSTKNNNJJIKFBO_UNLL5
+>GaSMWUR[KK0&MC@7..6@8*/>YNI7.0(3A;I31%*'+BQXX^:53BF?0:OED?P__\QX[T>DPD39IFMQSCUdwV889BUgK€¥ª¬¯¯Š¬«®­£³ºŽ¥«°§µ·ŸŒ°®­¯±©Š¥£¢š¥€£tei~rec_Veiov|~u{wxzryzwpY`hmi\aTu
+nsmpsq{iyxtqq[|¥Š£¥ š«ª¡Y]_]\UOJLPOJFBIJGZVPOXSCQF_fcA7PNGSND0<I8,3#>.8-.9\N`kbWTJ>:+043D+!13(2MJ^;I1?6,]MGR[jdI[WEnvjBAJIGSiOGTHRH]odDR;DRRvnybO
+š«­Ž±¥­ªª¢ °¬šš£®°ŽµŒ±£¯°¬ŠŠ©«¥ €Š¡gbu{zkhg`hsp{wxwwzr|ulx|wXg\coprNgryppgvjxk`u|
+y|Qj}s
+{viesu^\_qi\QOROQSID=NPhMK_XEJgWbYWM09JQUKHSH8&
+,/<'D;EHdaZPlxxob,(9C--/7J6+/K^KD64Q;OGKRVED]lmak|cW7QSOR`uG]PHBQipOSHCE;M~ya{ui€š¬²­°¥¬­¥££§€¯¬ª§ª²¬¡Š¢¡£omyvpkgmuxruxxnwrslR``x~|zYhuvmkknmoinvzsrdqSb}y~siqkml^_]geeljj`hYZWOVSPIA;35RjLM_XML]PVXL?85GQXKTXI659=GMA>PDJ9LZPSQeotru/&QuC'8EPI@PbH[WQ9%4=D=ZZvtkelmhnQ9ibmyjLI]HOM]\ZKGJRSSmxuy§°±¶§«€¡€©ª©¢¡Š©ktzujgqz{{{}qy|o{whYSfjp~|bo|wdioon_Ymkswr]bjKYuu}qj^[emoj`agiegdv|k
+w[^UTFQ[^[RKMKRqTRO`fb\T\B7867SPXT`ULOFBM?@FM0N3(0Cd[dc\\5(HUH!-*A8HVSZeYR$
+=7%B>,-D`aY=/+OTOJ
+9eJT`M@a|k\P_SWYUVwsgrv³±šš£¢££§©š¬šŠ§š`xh]qvxurorwttz|j_f[Unr~fs`fr{ycXcuolvamiHTkdhkmenhnvsfbnmlqhiiiYm{h^f\O\ba][VMIMVPHLPTOSKLNOLWRNHWNO=ORRNED18C)A
+$2*.WeacK4$@=1$7:;JbR_WR)6QSH1*.%34[NSSE757IYX^qaC_`HQawbDGWbbFXQnvlk} ª­¢­¡£¢«²«°®©±°€ {}|Z}ngu{vxysfuyvuiszT\{rxZcpubivwoasqkl^m\ghDZosxwqgspsrmednpnpn^bf]dnkc]YLYXPU`YMDNYX[SKVMOEP9JVSOOQWH?53$10A3/
+4MC
+3&.+"JVQG;$;
+55F"E>ZbP\c@.=KKP[L6.=5YFHDJ=G*P]XN?Hb\INccPDHNWFCKZp|¢ª «³»ž°¬§Š¥€¡¥rxj|
+seoqlpttqv|yoqoxtSgxug`bakkriYeuu|ddhel`C_sporkoptpomdmeflmdajk^aaW_UOQZVZ[]SRSSZV[GCBHXR_D<ERGZNTO>5.$#7@>328K$7KW<,03:P;7C=)='<BK/:T`UPd:NF2+?GSWM-/8GCBFBSO:)Pm>:=Mi[Fbb?HNTNG;WPYvtwz~§§©©šš£¢k
+plZ\^dnwxuovrmxxenm]xztd\aQd_j^XillxhpbYibBgpqtumfplhlekunorjcbe`\aaebfPN_X[dZUQPQ\XZIKCALTaKE?RQR9AHOM<49.,(?Q<C (
+<KA/69)N-402-<32'.DYMF_iE,8PSURC;A=WZJ;=VDFQP@IWj\\pXHFWOF=KMWRzn
+~
+u~rz¥¥«ªŠª§¢ ¡d{
+
+b|~k`jppqrmjksxwupjvbae_kRhwzhinno~oi[Yg_Gdpqonaktrtnghpkfeebgnlaae]^TKP_VSTTT[X]`V_RNNHJX]IJMZRG4/,6AUUF302G=9J9$&
+#(8K/:N>0OJ7K9;4"4GJ]gkKS@4""8E@GITVELu_;55BTZQ@VXZaxoaQPIRXOFFUXsx
+url€ªš©©§¢¡€j}
+
+~dy}
+
+zndvspwwpzwwnlhgubju{syb_Olong~}zm{jgf`]XMeehhdXjoomn`Uihehbhhe`TOZ]][Ycf]ZY[[[[X\Vb[VPLG\\HLWMRPHD<?CADLK?OA&(=7%+82()9`5IcJ:<=TQ@DTQZ_]o[RP-
+
+/=PIN[cKBNOHX[FK>Lj_B9AIGID?gwPn}gfn]~
+¡¥§®®«¥§«©¢l~_
+|zn]n|stml^kblojchzmc~{zjbahi[`qhsj~nib^hQTdcgkdWiqlfigckrrjY^[Z^Y[edZZchgcVg`Z]_]`ZdW\RUGUbJSTJKLKMOLP407COe^9/:3$".% '*?VVU=5VeSNIC_V@^hdtQPEJ0	> HY?AKVROH9IdIR[QC=(8VsNQvwe_dtzhl   ¥§ªª§«©Š¡t}
+
+vu]w]gtqtn]^jippsqyag
+wsxzdvl`N_gibZicb`[aNU[]aebTegddchjbi\YdjebdX`Z_X\fd\i`Z[[b`V^`eUPRPFKgOTLTFIIIIRKB6/-FrVE94.9=*";avUEZJJ9*C.Jezmn<DU;		"N]aF.DYYMJH@agNynEZ2&FLDCaCKOefcy}yujnwy§¥¥Šš¥©€£p
+{v|}\z
+znNdtrrihxsz|wwvabjnqttxZwuPMZjmqsppqnobcM\caf`SJVegj\XT_gmijgenjf`gj_]g[_e`W\XW\XX]aRQOODF`SQFRHKLJM\JEC::oh6EI4>;,---6}§lRA
+4-%7F6Od­~t|Z*
+&6,_]vfcPRY[\V@:Wqtz]LMYkSG5-]MQT{y{|}vqfn{ ¥¥¢¥Šš£ r
+ms~}
+
+X|
+svy]rzohlqq||~xvnf]RYeu}xRV\TUhgfhupppngRJGaga^_ni`^RVV\ee`dif]`behbkpm_defid`]adYL[[^SOTPBN^ORWKNROP\\KEA;iK55<TJ10-+9iv
+cL"
+HE=S<JgX|§¯ysV<AK]hZgoR^cVPID=VyuUON[t{gI:,/PSX\||}zv|{pzy`s¢€Š€¢¢£p~yk{|{
+y]wx{x\iqeixv|ywsti\Tbu}q\KV\KQbmmgplqnf^;MIXONX_bZMakigfjkimlabdh`]XX\XY]\a_WYS_a\GW^[UTPS>O`ST\TUHJQ^KEFBd|b@DPLPK7:DQx};>A,.k'ur`hsSTZcN\r\`LcWaHp^b\_JRJUfDA\zeE1('7NMYY~z||yyptrmbxy
+¢ ¡€©¢k}e|~|w^vv{uXdwr{}a^qpheqxn\YXcoYk^MMR\gagdgLaU`a\\ZWdX]ebiphdggl^bdpha][_X\^]]`]^W][WLU\YONNNCG]WNQaMCLW:HDCKqTBNZf[VQSH]s©ºnZf_KF9:9+fW^]`[rVYhpeIXdzrmN58OqbMIJ37XLR]UaP+ !8]XZUxnt}}}|qolsb_uuw£šš£uv}{w[jv~qUewluww|[TgmlvrdO[_QY]`dgahulfuZUHFT^VXdnssnmtqc`bliZ`\\eghdZWemg`kieWVUZ_U[X_]TRN:KJV[ONdU@ZZKHL]Y\k|P7GOY]ULN\tm_Vaf]dt[G@-&R¢f]d}fempgxX5Q[qVLFYDKT?PV:NWMc}F9V6;8K`V@Af`~~}|sqdfeW_pwz  €¢¥£¡y}
+z
+xm[mtzmT]k~iimt
+uR[a]lvaIH`_SQOFSnhffkqugH8/=U`VW`mtsobgoxsjntng]\_`b[_lg^[OY]RRONKMCMO\\LHAANRUMMNTVRdOY]rx~uOLMSWO:CwibIE/"-v][`Trkxr£meTA3jrCKV]\MJ>=TOWU_:V5#8^BE8RC1#1j|~ulmojfhf_U]hq
+¡  ££¢¢tp
+~zw|t\srx{t{y_Mayrp~lQhgbgZK:Y_Yc]F,Juqwjzo[K7ID1biljijihb^\``ipyvwd^dng^`]hf[]\XUY]U]OHEQN[ZRI=NRQRKJIJ[[VXyJ_w|_WUWPKLT`kx}vjs}}C-:%4|sIbcM@fki<%H;4Xf~]VNAARM?WrMGTf^?E0'IB<1#02- 2e\Rlkaigjf^bT]ikw~~e|~~u~
+m_l{xy}ztnVglr
+xl~{gGasxcZ;?SLX]]cOp|tofcPF]eTF@mgicmrxhlpeVeUT_if\cZlmjj\`[X\lkeb]Y\J:G\U\ZXBLTNKNRSOG\dXg<}~Z_]TMNJ>>B\qts}zero=$3%<u^~IQOROVR4kbe[NUI-8=<RR5DLb^?-.-'@E4>)+06>Qd`jecabjb^cW^ppt[hwyyeYqz~tv
+sWf{{{wtv
+|yyaWXsfe]Mb\Pd_TfWoog_XTYvzr;:`yhgeditphbeRbg[XW[HNP]c[^WWPP\ecb[UWXR>PUQWQNIUUQHQSUNJLLtB>oVOUXXcG@BR?=A[`ra[hr=&-!B¯TjKVVeY6[cD9637;ssTTLCH584KYG<BC\d>?31^FCO''%54;Kgnokmn___da[]hlo Xa|}za`oyu~fVkyxqnzx~{mgSX^afMZc[_rW[bQc^SbOa{xy]7Rggdgd_izsjdWZfigjZ]]TbXWdl^\\RTQSTSIKKJDYSRZNVSWXMGIKF9JRdN'>LMVM7IADLVG8WkL[q~scw3'*#Q ENMqlSKZVSPN.9LeH>FK[HKA+&IADGId}E40>n^B"
+:,%NRgi_cnphakqtdfltsy
+^\zxx|}w{kZdv
+~okV`dfcakmjfsjhXTY[XB_]Woc`YVSZ`]X^pwxuW_W{{pjurrprphZaYYVSb\f]^Xeeqo|jmaR]X[YNLDOXOXQXZJEDYRSHIk
+d@
+!4PeeMM@N@<?TCKQ]_^\g]rhgbc:725ewzlvISQa`.cRto}xe;AZ]XJEOSXF.5MKCG9YvN+7Cbb72:G=$>\^chy|qlphdaox{xppievy|
+xownXkslusrpnbQ^sqrvf{pcn~qZSmfV_RXSLDZeTpmrxhnqIvznibfqgdehpnpUMYaasrcZR[\S]e`^c[mkRXUQLIVX`SZLLDAbKNEn@$
+
+.@NNC9>QEDNUKQQQaJMS<WPbyK67,$aiT®šJPRzN[fqr{sNiQPb@YSwD?K?LWM@>Xid1D8`aSGW3*5O]\jru|wyx~zbWgnr¡ wxivjpqp[syl{yk`beZmzy
+ui[k{WhlaUWMTLDSPTmlmoon\vUiuvt`[\krudom|rmtcZkdNONPNKUQQPLKOPWU]]URWKI=;XBQVe)##&+B@LA4?MRFGP7K[esJQKShdt`?:F=:bfalLPTj`OUYdfZcW<ULKC\sls[KV<?GVHDpohDMXWA1FC.?69_qsp{tlrxwvuvoagt§£ªª_
+uegnptp]unkbnxi_kt{{w}kRtnAgkZQMRbcSYPkhwykOhUns}tY`dvr~~{z{hqwmtr\WSIEIVMIIKKNMXWKMRQUX\DAN=MQvv1(-25?9AEF;CC>RY^E`gj_zOYJk`.(8&)LMKHODDKOQOIXQOT\GAF?YAYTb~OTL97=6BHXba=hl65I;,49.;]fsllnir
+nyzw~unt
+šªwbljtwtnyezMkuqtl_grvmho~sjWVuoXHX_^OGW_hkBZpsovWrHSxhdlwyc\hkq~
+xiq[Yldf_YngXTLQVLOURMSUPLFJSTTZ[SKHGUR]<(116211;ANORO@8UQLus[GWcaZa],$0!$HNJHHIFS[VIOX7OPXFEECSPwunfRPEBE@;78]}`<UH9HO5,+'3AWhrsjfn|`z|{xhjtwep`x}yscma[lruumap
+^UOuhcQ`kVNgF:KEbnaQf{sj9Os{mkXdOklgusx
+xuwtxaV\fdV[WX^cc]YTgldf_[ebSBMPV`^RMKJHE<-76-83(+05IWUXUQKYQHUXVWhE=HOFZ6*-"%Yl``[HDJIJ;A::U@MbK`RT\nRdLSFHEJBA0;QSg2>=QWDB):09PWarsiarvzcuxs{y~qeq
+kvhgn
+||]luvzromog_pyGRMNcgeejUSqMBb~a6;AogB^emwepvOkss~bHRrpjtxus
+w{wuk^of`lrojkilszf\oqk\SFIDXROOQYGM>.992=-)(,0AOTJNQLF3&A% 93LVU^ITQ8/#)YL=D\BEJBF87HlnRmwPfNOX_P;8KBL<HHF04IE`L)=JNRGB+&;LN\dpodexxysytam|
+
+
+{cptej}}{}jQ|}|wovne]qrkdVK?RpiW\]Wp[5n{^D<JdQopd~dKv^\kqx~za?Jmmkmtr{sehpzxttez{oonpscQX]_\\W>FKUKIOYTHJD<8::6+%%+19AE>DLFI*2@:NYPfMaKK<GK/'.eGTAnMQF=OL[lnM`\WhDS\]^J5I;I>UN:=3EX]*#5UWK7ESB?MWY]ic]a`grvttnle~yvx¢£m_
+
+p~~ekv[t|vvTcxywsktz}dmumIGmfXfqic`NfN5BOotmmoqbPcyvwttzQhpegilovloww{ukovy
+urxnn]ifPKGRXPQWkJETOOWbQKJOC8::.)&(%'**9BLEGC,>=+-JWgRX>>:0Z5%BT>N77FFMRXO-zTCzDZG_VEe]<BFMREX?@XE?F?5EcRC9=I0IGOUGbd[baemsqppWmw} y{Wow
+ui{lqka|~~yxqxprgd{|{vrf{yc]kw{]eql[_^~eOjLZgwgE73V|{pxqcKk|rj_rskfckuynnuxq{{bokjup
+o{ul\`rfQa\\QYXQZXYSVQaiTBNSQ>7;1,#&'$&4=HOSMRX:HRea\<4=nL39)QH'7;FOPROORE>SBrFS\HHYHZV[]X7KD;OOLE_YS<5#(FTFTIF&F58RVSQff^gjjjkbj|p
+ji{|qim
+wwhehg~|yx}|z
+t{]oydcz{vuzwwoabpooim^gk^\jSln}Z?<avymjoo{z|e|~ekhuupuj_aglq
+zjnkrgb^rq}p^b\dc\\nk_dm[Y`Y\]NKdbVN^aMXKRJ>8>-)+&$2?RVQV`_Z\ZMQ5IRPVIS<A/-:U'5QL?JWWKV\]w{|nq|M]GU^ec<JFFCQWM>JNL<.
+A=>CYNbR`WVQXW\ifengWZYiut~ww}j~kZrwwZTyvx|pT^prhbw}~xkme^uuzofn\\_Q€|PSJUn|uy¡pwxmetxwe`ir{ufd`auyrjmskYVUg\Zqcaba`acreXZLOU]PSWe_YCQHA8;-''('HMZ_^ffRN[CIfZH``JOKYR,57I>*5=;=RNJOVaGl`EABCPVWI>K=DNVwc7?TI2).H*+P?S[EPDIJXrafkj[WYbsy{Yq~o{xvxcw
+yhZmd_k]}}hjyn`rwwub`
+srhq}lg~rlsmlVkhN]
+js\KY@NUt~f_uedlpf`kllkjjrpnmknkwut||tqhT\``d^ZLX^gbUOSRLJKO9X[WRC>SDD;2'&('.JGUUpolXL\C@nK]YKSTUlN%G9&N#'8@O]ZRORAX{yhlGM89>JYT8AE37`dE53K`B.8A*'?VKGO/MOX\QcOOXYSWdgoloqmQ_gdefjsyopunhV]ryuUuz|pzqer{~\_qnlasm\kyuwsakvNaxnHQG4]Tkmvkzma\{mlq|q
+yiZ^hhdzp}ntqpuxiulXYZNKY[SUZ]YReTRKAC]TLBJN:BB'# ((7P?_jrmdUXZFFGWg^T@FSgQ37<"-),05,/:03L/*275)
+*"
+
+$*
+
+"
+
+
+
+
+
+
+
+	ebQXY]qzy|us^fwxwzvmpnldjjh[fldbwxkUr~{u~tf|}|~rbn|m{
+}|xiX`zt{vcX[ohXc{{\jWdOLmXLUorp
+~iqyX>ysqcplhzrpebkjnlmswszjmp¢dt]YhUV`KNblYX[RNB6152</,&
+"%
+
+                                                                    snX^agpvv}y{
+ktru~gcr_x
+}{ywpd|wwpm_lgwvzqS[hbr^NR_^Lit\kqKfT[mZEI{zysocty_Hny|zca`qrs[aRKDWUKAGE1IOOON<.2'0$
+                                                                                                    ekc_`ssklwt}urm|}~
+unz]s{xeaq|qeoozrb|x}veWGHROF45-7IJ;.<6;B6*5-(0(
+3'$!
+
+
+	                                                                                                                                         
Index: /branches/fault_tolerance/softs/soft_transpose_giet/couple_512.raw
===================================================================
--- /branches/fault_tolerance/softs/soft_transpose_giet/couple_512.raw	(revision 724)
+++ /branches/fault_tolerance/softs/soft_transpose_giet/couple_512.raw	(revision 724)
@@ -0,0 +1,6777 @@
+yy|zx||xuytsuxtqxv|vvutuvquttvuxyz}~~|y}~|xoohd`WS^_difkkikmomkplkmhomlolost}
+§¬¶¹»ŸÁ¿ÂÆÁº·­š¡¥§¬Ž©š§¥¡ |vqovx}utzzxvsz|~v
+kfz
+
+|piiomp~zo~
+
+
+
+
+~|z~z}~y}~|yxtttiotomigdigospoqsssttpolimllkhkllloloplllooop\M[[WFENWf^suc_lZgth`ZkplgklgkxycIVIE5BHLHNbtpokf`\^mstoohdgffgbgimppqqgmt||zz~ztllq}xyyoz}|~zz~
+zpzt~hlWVO_fcO^YRy}}omyzqpmy~|u|}yzgc`[
+|~zyzy|upqxsvspvsvxvvtsvvsttsvvxuxzzz|zx}~yxvofoi`b^\bdighlmhmkllmhlihmlhooopv~š°µœ¶œÂÁ»µ¶²­¥¥¡ ¡€š®­°©€£ €š¬­§¡
+}plssxy}uvyuoy}vxk~qmhhioym
+
+
+
+
+~~
+}}}~~|~yv|x}z~yuqkspqolfd`dmtovotpsqsmmgfdkkhlkkkfqmpokqkmotq^VZ[YDBJZh^imh_p[hykbZilkoklokvzdE?LA?BFAM_kpom__dkiqvqlc__c^d_[dkoov|xtt}
+
+
+
+yzzzxxyvupp}}vvytv}xvz
+lfQRd_\ZhWVz
+ zmso
+|
+~}yyz~}|ld`\y}~}zqtuqsosuqtsqovuuuyvz|z||~yyzupqmmmcc_b_glimgihopkhmhlgkihpollksu} €­··œŸ¹Ÿº¶Ž±š§¡š­°®®š£€§®©­¥¡ ¡§š€­©¬­š£¡umquzzz~}yxvtlp}}l|mkkkls|ti}
+
+
+
+
+
+
+|}}~}z}z}}}zxvy|vpqhqtqqlbbfdixsqospitqopihkhhilkmliklomkqomoolbM[ZZEEM[f[cpc_mYguobYpmmtompmp|_=;@A?AJJ`mtog`cchgqog^``_[bib`\hkpy}|}}~xtqx|slux}~~~||~ykkx
+uqx}yqxyo[`pg^RZVSy}
+}boty}~xx|||sihf^
+y~z|}}poptqsxxvquutvyvz}u|xuxtpmgd__bcdfhmilkkpmlilkimlkoikkplty§¬®µ¶¶µ·µµ±­¬¥šš®§££¡§š¬ª¥¡£€¥¬²Žµ²Ž±¬šš£}zx|tmotvuxzzxyz~voy|~ploikp~xm~
+
+
+
+
+
+~
+~~}}~~~xz~zxxyy|}ytphtooofhhccklqsqpqpotoifhmhghmhpgimooomlhtpom\O[Z^MIJZd``pm^k_csm_Qflomsqqoyv^@9D@AEN`iloibdfikiskZWUY\WY_fbdosy}tsuzxsqpskitvv|umlqv~~
+oq|y~yvqx}q||~|fd_SS_\LS|x}
+vkst}u~|yxzz|yhfbY}}x}||xtspouuxxyvxtvvzoqolgc`^V^^cgfgiohklmmllkmiiksmlomt|€©°­®°²²­¬ª£   £€¥ ¡£šš££  £šª°±µ··µµ­²®°­±­§§©­€  
+u}skpox|v~zvyyzvso
+
+uklkio|q|
+
+
+
+
+
+
+
+~~}|}}zvyz}z|zvzzuttlhoqqshcgfbhqqpppppmmppkdccgkhglkikplmllpommk`SZZVLFIVd^[oo`kViuobShqmoukklltb@SDMIS`qpc^^ffkidihmkc\ZZ^ikipttlpqvslklmpxtuyuxyvzyvtvxxxt}}
+z}}}
+
+xtx
+
+sx~xzypfUS\YFY||qpvp~v~zutx||vig^Y
+~~}}~}|}y}ypotsoumiiib`^[\[cdggkhihkhiggffgffhmlkom|~ ¥¥©©¬¬©ªš§ ¡¡ £¡£  ¬¬®±±²¶¶²®°±±®²²¶Ž¹²Ž±¬©­€xzxmppsyv~|y|zuylo}vkllmqxpv
+
+
+
+
+
+
+
+~}}~}~z~|yz~|uxvyyzzupmipqqoiccdcdpopopqpsopskcgckhimlmklilkplloloo^QY`[JIJQc^\pd^p`guqdJ`qooqlhmgo[@AHHM`tsm[^Ydkh`chh`WYYZ_bfcsmb_moikhhpvymuvstuvxvxtiu~vyvuvqy~|~ytvx|q||zv}oti`bpmLSx~vvsqx}
+xxuzz|xhh\\
+
+
+~~y|~|y}}tvoidc\Z[Z\^cbdfcghiikhhklhgghfhkmqqt|£ £€¥§§€   ¡ £šª¬ª±ŽŽ±°­ª­±Žµºµ¿¹»ºº·µ²®ª€¥¥¥
+|~xpqmtou}zyxztykpv||uomkgt~xo~~
+
+
+
+
+
+
+}~~}}
+}yzz}|xsxuulgmtsohdcgbfouqpmtqsoqtfghbglgkllkkggqklomqqpcUVZYMEISgbbh^\q_bpp`Lcuoskplqlq^<=JL`mlhdc^^lpidZbcUVQW`khgukh[_cihomptoohosuuyuvmkgpz|zyuuxupvqp~
+xlmu}~voquus|icdcUWx~xosvzx
+xvux}vvfg_W
+~|~}|vyy\^_Z_[_b^ggdhgfdgfhghchilklmlsxz ¥ ¡ ¡£ £¥¥š¬­°±°°°°­¬­°²Žµº¹œ¹¶¹¹Ž²Ž²­­§¥¥
+
+
+tkpsstq}xzvxtukplx|tpmmkpqkz
+
+
+
+
+
+
+
+~
+~z}|~|}~}z~}|zzvy}qpsipsspiikfcLhmppppopqpkggmhfgkikmlomipmlqmoll`VW[[OHJVgckpg\obfqo_SloppklkpmoZ7ALZlolgcffhkmf^[^VLSV`hkiomfZckhkdhgopkipvyvyvuzqlipxyuytsx|vvxokp
+z}
+~p\cuxihlpvuk_RSdyy
+tpozx|zpyyu|vlgYY
+}x|uyy||dfhbfdcffldighfhhlhllmvu|¡  ¡€€¥¬©¬®­±Ž­­®²µ·¹·¹¹ººŸ±­ŽŽ©€š£¶¬£®®ªšš¡
+~vkpsupv|xyuxysii~v}soqlosyl}
+
+
+
+z
+}~~~y}zz|~||x}zyuoipsophhhb`iktqoqoqsoqohdligmhiphmkhksippmppp^VW_[IDJQoicuo\kg\qo^Vpsqpslmlx|Y<BU`qh\d\iofcb\VYSNIWcpqpd^\^[dfdghttxvpzzyx}zz|~|ux|yz|zttxxvklpkv}|~qiqqkbp}}}}zt}|lWLUzqtiq}
+vx
+|quxx|kh[Q
+
+
+
+z|}|~}ihdcghcfhhhhdikkpt
+€¡€§¥§ª­¬±¬°±°²²Ž­­®µ¶²ŽŽ·€§±®§§Ž±®©¬®µ§²¬€£§£
+}sllossqvzvx}xmmmxx~
+slmlqs
+yi}
+
+
+
+
+
+
+
+
+~~~~~~xz|}yyyz}ztuisppoi_bbdfmpsopkoqpkhgigkhfghkimlkkhklplplpdRZZ^JEILb[d|s`p`_to^[muumomomtzW<Wdkic[\ipkogd[OUOVW^opiZY``RY\dkmssmkbkhf_fmuusxpmostvzy}y}|vxikopqps|~z|~
+ymkv|uy
+zWMMs~ol|kquzylvxz}xfhdW
+
+
+}yx}z}z|dbfgkkikouu
+¡šššªš­©ª­¥­¬®²®²°°Ž±®°ª§±²§£Žª¬²±Ž²²­§©©¥®¬²ªª¡¡ tikmtpvy|vquysflux|tlikkt
+zq
+
+
+
+
+
+
+}
+
+~|}~~~~~~~y~}|yxyvtqlstqocbf`ffkooqlqqqqqolgdikimklhkqgmlommmuqqcWV[bSHLM__\tkcp`Wytb[pspmpovuv[Mcmidb`khpqsgcSJM^cqkc[ZZ\ZUI[gpokkgd\ckddkx|xzz~~ztvuuidlt}vklhmxtsmmm|
+ypht
+~}ukziHLqypqiys
+xxsquz}zgf\[
+
+
+
+
+
+yy||zy~gopsy|
+¡¡ ª¡£ £¥¥¥šª®­¬°­±®¥€©©§ Ž°¥ªš££®±®¡®Ž°©¬š€¬µ°¬±ª¡qhosqssvzuqoxsqlp||sqmkluym}
+
+
+
+
+
+
+
+~}~}~~~~|z}|x~||~}|}zvpsopsxpfffdghssqtmtpskoohdkhlhiillkkmkkqpqkpsmfUV[[MILQc^_tobyiWmsfVfksqosmkku\\bifb^lotlok`WJLQipqi^`^WYWchhfhc_\\^fiolhovqxxuqyymmz|qgkkdmpx|z}xzzxukxysy~ytfy}pzppxv^Op}
+lq
+lqy}u}
+qquvxx}hf_V~
+
+|yy~~}}€€¥š­§§¬©ššš£¡©€¬°¬§¬ª§¥©¥§¡Žª¡­®°°­¬©šš²©§®­ª©€¡¡
+shkosmqtvqtxysptqz}|qmspis|o}
+
+
+
+
+
+
+
+
+
+|}~|~~}z|~x~}vzqtkpquvicdgghotmppuppmppkgkgfhllklmllkkktpmpmolVS[^RFNRbW_tkbpdWuxdZ`mspqpkciub`bf\WhfmlfcbSLQ\goqod\^NWbkmqb\`cgdglfigfoysuytspx|vm|xqxqfihmpmsz||}zqokhv~|zzyqgk
+
+yt}o^u|sipyz}z
+|vuxzxuid^W
+
+|~yyyv
+
+¡¡¡¡š§£€€¥©©¡€§ ¥¡¡©€££ª¬§€§¬¡§¥©¡š°§£§®®¬²®®£¥§©¥€¡š££
+mhhoqmoqoqvyyztzyu~y
+tokoisyix
+
+
+
+
+
+
+
+
+
+~}}~}z}yyyyz|ussiotvpmcfhhkovmosplumslkcggfgkgklhldgiotklmqldZbd_VFFVfZWlg_ombsofZgottmqogoud[YYYhmiimldJIRcomb^`WMOZkmi__bff`ikbicf[huuzustqyzvtiv~z|}qzzvpsh`s||z||uh__u|xq_yyto
+y[u|xll
+osuzuquvvxyidb\|
+
+
+
+
+
+
+z}zzz}|
+}
+
+
+  £¡¡£€€€€ ¥§£¥€š € ¥€ª¥¬š¥š©¬šš¡¡¡®¬ª§§­©­¶Ž²¬£¥£§ ¥¥£y
+pclmqopkhuuvuuuxxqzv
+
+
+tqpmps
+ykz
+
+
+
+
+z
+~~}|~}}~yzyz}}zqultpusmglbcgmqmpplokklodgidggkhililgciklooklkf\^`[OLOYmc[ohctm_syiUivtpmotlqtZSSWcollikcR9HhoomcYLER`otk\bh[`df^lkkg\fvxxutux|yvttgku|v~}}xpihgqzx|kbidu~ymi~
+so
+bu~xl
+f~txzq}}~
+~uvuyx|vp``Z|
+
+
+
+vxzyy~|y~ ¡¡  ¥¥¡¡€¡€€§¡  ­š££§§®š € š©š¥€©°±Ž±¶¶©§š©§€¡¡
+}~khkhokkkkspy|yxxzsuz
+
+
+toophq
+zo}
+
+
+
+
+
+
+
+
+}~}~~~~~}~}}||z~z~}xxoslsssmmdgg`kqutpqppskomhhggglkkiiigkkklmoqoqukV`b^WOQ^igcsf^qmcssgRlv}momipqm[FQfmlflkcSDRfquocYDAQiukcc_hfYU`doopomb_tz|yxz|vzvgihpyxx|yz|~zsu|smopsii_m
+mvom
+iqhix
+yp|bttxvxzv
+z}svyzxzifbUv
+
+
+~}xy~x|~}}vzz|~}~~¥€€£¥¬š¡¡šš££ ¬©¥ €£ §£š²­¥®²°®¬§šš }~}~}ofgmqpmftkoyzxx}psy
+
+sqlmit~ym}
+
+
+
+
+~~~}|z~~|~z|}zy|xspdlqpphdbdbkmsoplqoskohhdfgchioigilplikoimpsol^\`_WMIVkf_uf[ss\qtdYlutoikkqokQHZolkmlcOEWltokcRJMZfqib`bbccW`mpfosqsulxtvpssuxulsu|yxv~z}}vpgp~}~vofgky
+xoxodmzyho
+mhsgky|xt}}_tvz
+tssx}sxxxxvbc`Qy
+
+}|x}|}z~}~}~z}}~
+ ¡£
+¥£¥ ££¥©££­€§§€§¬¬¬§š¥¥£ ¡š©£°š§±¬¥ª©€§€¡xoys}}lkiiolhdtiy}z}yv|qs|
+
+~sqoomvxo|
+
+
+
+
+
+
+
+
+
+}}|~}}}~z}}~yxxuxslihposffd`ifpsluvtsomskfckicffiihhfkkhookmxqpm^[bcUJNWih^vm[qscptgUixusmltpxxJOhmqlicQLW`klkYLJ^mgfbb^\_bd`^hhpilif^_Z[_b`VSVJU[cmsvvsusz~~tmyz~}xoc^c|qzud`ktcl
+vm[btz~}qqgytypfsz
+|||vuu|zxxh^^Uz
+
+
+
+}|~}}z|yzy|}~
+ £€ ¥ ¡£ ¥¡€¡¥š¥©¥©§ªš­ªª£šŽ€©®§§©¡
+y}|ttzidkgidbfokt|v}sxztp
+}|z~
+}mkqklu
+umy
+
+
+
+
+
+
+
+}
+
+~}|~~}x}z}~}~}xyuqmchllshdb`cdplmooppilqigdfdckbiiigghhlkhuqqoopbZ[ZUJLWhl\uhWim`msf\ltpqmioluvVgikilhSHV\hfdZDA^kgb^_Y[_gfbbkki_cb_\hZO\ggib[^_fch^MRbgpsy||xhp}}}yqif`o|ypz|odm
+
+u[usOQl
+vikxsy}lcm~v|uuxx|g__\z
+~
+
+}~zzzyyu|
+
+
+
+£££¡¡§š ¥ €€ª§§§©§šš§¥±€£­ ² £§  
+
+yvuxzigifkhdfmiluysqutqsyz
+
+mmlomt|tkx
+
+
+
+
+
+
+
+
+
+}z}}~}}|y|yx|xxphigcmhc`bchkppomophmohgfdgihhimikmhgisooqqsohf\^c^RHZigYqp[lm^ioi[kpyskkppqxhhmlpk^D[ckidU@M[im[WR\^gifgsiWVb^`cd`_ff`_ihhggiklfcY[Z^bfmoyxp}~yvuobitvux|tggxg\|~ZNtps
+mv~qix|yovyv|vghcVv
+
+
+
+yz}~zy}
+
+
+z}¡€ ¥£¥€§¥§§  £€š©§¥£ª£¥š§§€§¡©Ž±©±¥­ €§¥€¡~}zyzzmklglol`mpqipqxtvu}}}moqplvso}
+
+
+
+
+
+}~~~}}y~~zxusmlkoogbgcchqppmsioomqskighlihpmkiqfkomtoqosklg_fcYZVYkkVpiYls`luhWhytpkqomxvkhlpi`A^ghgfMAV^hmYRVW`ccbfckf\b_Zc_gdghhh_`lihhplkk`_fb[[`gbdv}q~|~}
+vldlp}|xdiy^g~
+bSy~looz}x~upx|sstxx||lbc[v
+
+
+
+
+
+
+
+z~z}~
+~
+~£¥¡š§££š¥y£§š©®©š­¥šªš¥¥§¥©©€€Ž²­®®¡ €§š©§£
+|yz||qhkiipkihvxytzttpv|}lqmhmuvt
+
+
+
+
+
+~z}|}zztumsstpfbkhhiutmpmomlmmofffikkkkgmikhkloopsovuod_ih_OS_lk`ok`ktghulWm|tkppoqu|ddglgORmsk_U?L`kh^WJU\dlo_hc_Z`dbdhgflpotofflooutpplgkigfb^Z[_iuusx
+uqcZptslssitgWzut
+
+p}yq||xuz
+ssxy}}vpbfW|
+
+
+}}||}}
+
+~
+~
+
+ £    £€¡§¥ª§~€§§¡§®© ©­š£© €¡£šššª¬±š­Ž°§¬­¬§§ª§ 
+|z|z
+viiqphpmdtvz}}yzy~~
+sqltp|vo
+
+
+
+~~|yvxpvxttifklolpquususttqtflglompmlolipqspqssqupsfdkicYS\qmboxfuxlpxocqxuuqpstsqihg\QYfmoiNS[imb[ZRS[`os\Rc_\^dlmkppohuqokdcptoptvtslmvspgdfb[\gtss~
+ziWZ||pkh_ssi|
+p`x}yyo~|q|~xy~sty|~zoih^v
+
+
+~~~}|u~¡¡€¥šš©€£ £¥¥ª¬£©¥¬©©©©©­­©­°®­­£¥š­©¡²¥ª¬ª°¶²©§€¡®ª£€xlpopiphikkp|zxzztpsvtus
+
+|}zqyuxxohkikuysszvyxusqtkommgpoompsoquuupttxxtxskkpf[Z_yv^pmtuko}qgs|~xttsv|uioo`\iqso[RhupdURYddfghh[ccliokoststvqtvpipusupxtu~uogozzttpod`^_foz
+
+}tulgbt
+~zi|
+~s}tg|~st
+~v~tyvx|}~vkhZ|
+
+
+
+
+
+
+~
+~
+
+ £    £€¡§¥ª§~€§§¡§®© ©­š£© €¡£šššª¬±š­Ž°§¬­¬§§ª§ 
+|z|z
+viiqphpmdtvz}}yzy~~
+sqltp|vo
+
+
+
+~~|yvxpvxttifklolpquususttqtflglompmlolipqspqssqupsfdkicYS\qmboxfuxlpxocqxuuqpstsqihg\QYfmoiNS[imb[ZRS[`os\Rc_\^dlmkppohuqokdcptoptvtslmvspgdfb[\gtss~
+ziWZ||pkh_ssi|
+p`x}yyo~|q|~xy~sty|~zoih^v
+
+
+~~~}|
+~
+~£¥¡š§££š¥y£§š©®©š­¥šªš¥¥§¥©©€€Ž²­®®¡ €§š©§£
+|yz||qhkiipkihvxytzttpv|}lqmhmuvt
+
+
+
+
+
+~z}|}zztumsstpfbkhhiutmpmomlmmofffikkkkgmikhkloopsovuod_ih_OS_lk`ok`ktghulWm|tkppoqu|ddglgORmsk_U?L`kh^WJU\dlo_hc_Z`dbdhgflpotofflooutpplgkigfb^Z[_iuusx
+uqcZptslssitgWzut
+
+p}yq||xuz
+ssxy}}vpbfW|
+
+
+}}||}}
+
+
+z}¡€ ¥£¥€§¥§§  £€š©§¥£ª£¥š§§€§¡©Ž±©±¥­ €§¥€¡~}zyzzmklglol`mpqipqxtvu}}}moqplvso}
+
+
+
+
+
+}~~~}}y~~zxusmlkoogbgcchqppmsioomqskighlihpmkiqfkomtoqosklg_fcYZVYkkVpiYls`luhWhytpkqomxvkhlpi`A^ghgfMAV^hmYRVW`ccbfckf\b_Zc_gdghhh_`lihhplkk`_fb[[`gbdv}q~|~}
+vldlp}|xdiy^g~
+bSy~looz}x~upx|sstxx||lbc[v
+
+
+
+
+
+
+
+z~z}~|
+
+
+
+£££¡¡§š ¥ €€ª§§§©§šš§¥±€£­ ² £§  
+
+yvuxzigifkhdfmiluysqutqsyz
+
+mmlomt|tkx
+
+
+
+
+
+
+
+
+
+}z}}~}}|y|yx|xxphigcmhc`bchkppomophmohgfdgihhimikmhgisooqqsohf\^c^RHZigYqp[lm^ioi[kpyskkppqxhhmlpk^D[ckidU@M[im[WR\^gifgsiWVb^`cd`_ff`_ihhggiklfcY[Z^bfmoyxp}~yvuobitvux|tggxg\|~ZNtps
+mv~qix|yovyv|vghcVv
+
+
+
+yz}~zy}yzy|}~
+ £€ ¥ ¡£ ¥¡€¡¥š¥©¥©§ªš­ªª£šŽ€©®§§©¡
+y}|ttzidkgidbfokt|v}sxztp
+}|z~
+}mkqklu
+umy
+
+
+
+
+
+
+
+}
+
+~}|~~}x}z}~}~}xyuqmchllshdb`cdplmooppilqigdfdckbiiigghhlkhuqqoopbZ[ZUJLWhl\uhWim`msf\ltpqmioluvVgikilhSHV\hfdZDA^kgb^_Y[_gfbbkki_cb_\hZO\ggib[^_fch^MRbgpsy||xhp}}}yqif`o|ypz|odm
+
+u[usOQl
+vikxsy}lcm~v|uuxx|g__\z
+~
+
+}~zzzyyu~}~}~z}}~
+ ¡£
+¥£¥ ££¥©££­€§§€§¬¬¬§š¥¥£ ¡š©£°š§±¬¥ª©€§€¡xoys}}lkiiolhdtiy}z}yv|qs|
+
+~sqoomvxo|
+
+
+
+
+
+
+
+
+
+}}|~}}}~z}}~yxxuxslihposffd`ifpsluvtsomskfckicffiihhfkkhookmxqpm^[bcUJNWih^vm[qscptgUixusmltpxxJOhmqlicQLW`klkYLJ^mgfbb^\_bd`^hhpilif^_Z[_b`VSVJU[cmsvvsusz~~tmyz~}xoc^c|qzud`ktcl
+vm[btz~}qqgytypfsz
+|||vuu|zxxh^^Uz
+
+
+
+}|~}}z|}}vzz|~}~~¥€€£¥¬š¡¡šš££ ¬©¥ €£ §£š²­¥®²°®¬§šš }~}~}ofgmqpmftkoyzxx}psy
+
+sqlmit~ym}
+
+
+
+
+~~~}|z~~|~z|}zy|xspdlqpphdbdbkmsoplqoskohhdfgchioigilplikoimpsol^\`_WMIVkf_uf[ss\qtdYlutoikkqokQHZolkmlcOEWltokcRJMZfqib`bbccW`mpfosqsulxtvpssuxulsu|yxv~z}}vpgp~}~vofgky
+xoxodmzyho
+mhsgky|xt}}_tvz
+tssx}sxxxxvbc`Qy
+
+}|x}|}z|y~ ¡¡  ¥¥¡¡€¡€€§¡  ­š££§§®š € š©š¥€©°±Ž±¶¶©§š©§€¡¡
+}~khkhokkkkspy|yxxzsuz
+
+
+toophq
+zo}
+
+
+
+
+
+
+
+
+}~}~~~~~}~}}||z~z~}xxoslsssmmdgg`kqutpqppskomhhggglkkiiigkkklmoqoqukV`b^WOQ^igcsf^qmcssgRlv}momipqm[FQfmlflkcSDRfquocYDAQiukcc_hfYU`doopomb_tz|yxz|vzvgihpyxx|yz|~zsu|smopsii_m
+mvom
+iqhix
+yp|bttxvxzv
+z}svyzxzifbUv
+
+
+~}xy~x|~
+}
+
+
+  £¡¡£€€€€ ¥§£¥€š € ¥€ª¥¬š¥š©¬šš¡¡¡®¬ª§§­©­¶Ž²¬£¥£§ ¥¥£y
+pclmqopkhuuvuuuxxqzv
+
+
+tqpmps
+ykz
+
+
+
+
+z
+~~}|~}}~yzyz}}zqultpusmglbcgmqmpplokklodgidggkhililgciklooklkf\^`[OLOYmc[ohctm_syiUivtpmotlqtZSSWcollikcR9HhoomcYLER`otk\bh[`df^lkkg\fvxxutux|yvttgku|v~}}xpihgqzx|kbidu~ymi~
+so
+bu~xl
+f~txzq}}~
+~uvuyx|vp``Z|
+
+
+
+vxzyy~
+
+¡¡¡¡š§£€€¥©©¡€§ ¥¡¡©€££ª¬§€§¬¡§¥©¡š°§£§®®¬²®®£¥§©¥€¡š££
+mhhoqmoqoqvyyztzyu~y
+tokoisyix
+
+
+
+
+
+
+
+
+
+~}}~}z}yyyyz|ussiotvpmcfhhkovmosplumslkcggfgkgklhldgiotklmqldZbd_VFFVfZWlg_ombsofZgottmqogoud[YYYhmiimldJIRcomb^`WMOZkmi__bff`ikbicf[huuzustqyzvtiv~z|}qzzvpsh`s||z||uh__u|xq_yyto
+y[u|xll
+osuzuquvvxyidb\|
+
+
+
+
+
+
+z}zzz}|€€¥š­§§¬©ššš£¡©€¬°¬§¬ª§¥©¥§¡Žª¡­®°°­¬©šš²©§®­ª©€¡¡
+shkosmqtvqtxysptqz}|qmspis|o}
+
+
+
+
+
+
+
+
+
+|}~|~~}z|~x~}vzqtkpquvicdgghotmppuppmppkgkgfhllklmllkkktpmpmolVS[^RFNRbW_tkbpdWuxdZ`mspqpkciub`bf\WhfmlfcbSLQ\goqod\^NWbkmqb\`cgdglfigfoysuytspx|vm|xqxqfihmpmsz||}zqokhv~|zzyqgk
+
+yt}o^u|sipyz}z
+|vuxzxuid^W
+
+|~yyyvgopsy|
+¡¡ ª¡£ £¥¥¥šª®­¬°­±®¥€©©§ Ž°¥ªš££®±®¡®Ž°©¬š€¬µ°¬±ª¡qhosqssvzuqoxsqlp||sqmkluym}
+
+
+
+
+
+
+
+~}~}~~~~|z}|x~||~}|}zvpsopsxpfffdghssqtmtpskoohdkhlhiillkkmkkqpqkpsmfUV[[MILQc^_tobyiWmsfVfksqosmkku\\bifb^lotlok`WJLQipqi^`^WYWchhfhc_\\^fiolhovqxxuqyymmz|qgkkdmpx|z}xzzxukxysy~ytfy}pzppxv^Op}
+lq
+lqy}u}
+qquvxx}hf_V~
+
+|yy~~}}dbfgkkikouu
+¡šššªš­©ª­¥­¬®²®²°°Ž±®°ª§±²§£Žª¬²±Ž²²­§©©¥®¬²ªª¡¡ tikmtpvy|vquysflux|tlikkt
+zq
+
+
+
+
+
+
+}
+
+~|}~~~~~~~y~}|yxyvtqlstqocbf`ffkooqlqqqqqolgdikimklhkqgmlommmuqqcWV[bSHLM__\tkcp`Wytb[pspmpovuv[Mcmidb`khpqsgcSJM^cqkc[ZZ\ZUI[gpokkgd\ckddkx|xzz~~ztvuuidlt}vklhmxtsmmm|
+ypht
+~}ukziHLqypqiys
+xxsquz}zgf\[
+
+
+
+
+
+yy||zy~ihdcghcfhhhhdikkpt
+€¡€§¥§ª­¬±¬°±°²²Ž­­®µ¶²ŽŽ·€§±®§§Ž±®©¬®µ§²¬€£§£
+}sllossqvzvx}xmmmxx~
+slmlqs
+yi}
+
+
+
+
+
+
+
+
+~~~~~~xz|}yyyz}ztuisppoi_bbdfmpsopkoqpkhgigkhfghkimlkkhklplplpdRZZ^JEILb[d|s`p`_to^[muumomomtzW<Wdkic[\ipkogd[OUOVW^opiZY``RY\dkmssmkbkhf_fmuusxpmostvzy}y}|vxikopqps|~z|~
+ymkv|uy
+zWMMs~ol|kquzylvxz}xfhdW
+
+
+}yx}z}z|dfhbfdcffldighfhhlhllmvu|¡  ¡€€¥¬©¬®­±Ž­­®²µ·¹·¹¹ººŸ±­ŽŽ©€š£¶¬£®®ªšš¡
+~vkpsupv|xyuxysii~v}soqlosyl}
+
+
+
+z
+}~~~y}zz|~||x}zyuoipsophhhb`iktqoqoqsoqohdligmhiphmkhksippmppp^VW_[IDJQoicuo\kg\qo^Vpsqpslmlx|Y<BU`qh\d\iofcb\VYSNIWcpqpd^\^[dfdghttxvpzzyx}zz|~|ux|yz|zttxxvklpkv}|~qiqqkbp}}}}zt}|lWLUzqtiq}
+vx
+|quxx|kh[Q
+
+
+
+z|}|~}\^_Z_[_b^ggdhgfdgfhghchilklmlsxz ¥ ¡ ¡£ £¥¥š¬­°±°°°°­¬­°²Žµº¹œ¹¶¹¹Ž²Ž²­­§¥¥
+
+
+tkpsstq}xzvxtukplx|tpmmkpqkz
+
+
+
+
+
+
+
+~
+~z}|~|}~}z~}|zzvy}qpsipsspiikfcLhmppppopqpkggmhfgkikmlomipmlqmoll`VW[[OHJVgckpg\obfqo_SloppklkpmoZ7ALZlolgcffhkmf^[^VLSV`hkiomfZckhkdhgopkipvyvyvuzqlipxyuytsx|vvxokp
+z}
+~p\cuxihlpvuk_RSdyy
+tpozx|zpyyu|vlgYY
+}x|uyy||tvoidc\Z[Z\^cbdfcghiikhhklhgghfhkmqqt|£ £€¥§§€   ¡ £šª¬ª±ŽŽ±°­ª­±Žµºµ¿¹»ºº·µ²®ª€¥¥¥
+|~xpqmtou}zyxztykpv||uomkgt~xo~~
+
+
+
+
+
+
+}~~}}
+}yzz}|xsxuulgmtsohdcgbfouqpmtqsoqtfghbglgkllkkggqklomqqpcUVZYMEISgbbh^\q_bpp`Lcuoskplqlq^<=JL`mlhdc^^lpidZbcUVQW`khgukh[_cihomptoohosuuyuvmkgpz|zyuuxupvqp~
+xlmu}~voquus|icdcUWx~xosvzx
+xvux}vvfg_W
+~|~}|vyyy}ypotsoumiiib`^[\[cdggkhihkhiggffgffhmlkom|~ ¥¥©©¬¬©ªš§ ¡¡ £¡£  ¬¬®±±²¶¶²®°±±®²²¶Ž¹²Ž±¬©­€xzxmppsyv~|y|zuylo}vkllmqxpv
+
+
+
+
+
+
+
+~}}~}~z~|yz~|uxvyyzzupmipqqoiccdcdpopopqpsopskcgckhimlmklilkplloloo^QY`[JIJQc^\pd^p`guqdJ`qooqlhmgo[@AHHM`tsm[^Ydkh`chh`WYYZ_bfcsmb_moikhhpvymuvstuvxvxtiu~vyvuvqy~|~ytvx|q||zv}oti`bpmLSx~vvsqx}
+xxuzz|xhh\\
+
+
+~~y|~|y}}tspouuxxyvxtvvzoqolgc`^V^^cgfgiohklmmllkmiiksmlomt|€©°­®°²²­¬ª£   £€¥ ¡£šš££  £šª°±µ··µµ­²®°­±­§§©­€  
+u}skpox|v~zvyyzvso
+
+uklkio|q|
+
+
+
+
+
+
+
+~~}|}}zvyz}z|zvzzuttlhoqqshcgfbhqqpppppmmppkdccgkhglkikplmllpommk`SZZVLFIVd^[oo`kViuobShqmoukklltb@SDMIS`qpc^^ffkidihmkc\ZZ^ikipttlpqvslklmpxtuyuxyvzyvtvxxxt}}
+z}}}
+
+xtx
+
+sx~xzypfUS\YFY||qpvp~v~zutx||vig^Y
+~~}}~}|}poptqsxxvquutvyvz}u|xuxtpmgd__bcdfhmilkkpmlilkimlkoikkplty§¬®µ¶¶µ·µµ±­¬¥šš®§££¡§š¬ª¥¡£€¥¬²Žµ²Ž±¬šš£}zx|tmotvuxzzxyz~voy|~ploikp~xm~
+
+
+
+
+
+~
+~~}}~~~xz~zxxyy|}ytphtooofhhccklqsqpqpotoifhmhghmhpgimooomlhtpom\O[Z^MIJZd``pm^k_csm_Qflomsqqoyv^@9D@AEN`iloibdfikiskZWUY\WY_fbdosy}tsuzxsqpskitvv|umlqv~~
+oq|y~yvqx}q||~|fd_SS_\LS|x}
+vkst}u~|yxzz|yhfbY}}x}||xqtuqsosuqtsqovuuuyvz|z||~yyzupqmmmcc_b_glimgihopkhmhlgkihpollksu} €­··œŸ¹Ÿº¶Ž±š§¡š­°®®š£€§®©­¥¡ ¡§š€­©¬­š£¡umquzzz~}yxvtlp}}l|mkkkls|ti}
+
+
+
+
+
+
+|}}~}z}z}}}zxvy|vpqhqtqqlbbfdixsqospitqopihkhhilkmliklomkqomoolbM[ZZEEM[f[cpc_mYguobYpmmtompmp|_=;@A?AJJ`mtog`cchgqog^``_[bib`\hkpy}|}}~xtqx|slux}~~~||~ykkx
+uqx}yqxyo[`pg^RZVSy}
+}boty}~xx|||sihf^
+y~z|}}upqxsvspvsvxvvtsvvsttsvvxuxzzz|zx}~yxvofoi`b^\bdighlmhmkllmhlihmlhooopv~š°µœ¶œÂÁ»µ¶²­¥¥¡ ¡€š®­°©€£ €š¬­§¡
+}plssxy}uvyuoy}vxk~qmhhioym
+
+
+
+
+~~
+}}}~~|~yv|x}z~yuqkspqolfd`dmtovotpsqsmmgfdkkhlkkkfqmpokqkmotq^VZ[YDBJZh^imh_p[hykbZilkoklokvzdE?LA?BFAM_kpom__dkiqvqlc__c^d_[dkoov|xtt}
+
+
+
+yzzzxxyvupp}}vvytv}xvz
+lfQRd_\ZhWVz
+ zmso
+|
+~}yyz~}|ld`\y}~}zyy|zx||xuytsuxtqxv|vvutuvquttvuxyz}~~|y}~|xoohd`WS^_difkkikmomkplkmhomlolost}
+§¬¶¹»ŸÁ¿ÂÆÁº·­š¡¥§¬Ž©š§¥¡ |vqovx}utzzxvsz|~v
+kfz
+
+|piiomp~zo~
+
+
+
+
+~|z~z}~y}~|yxtttiotomigdigospoqsssttpolimllkhkllloloplllooop\M[[WFENWf^suc_lZgth`ZkplgklgkxycIVIE5BHLHNbtpokf`\^mstoohdgffgbgimppqqgmt||zz~ztllq}xyyoz}|~zz~
+zpzt~hlWVO_fcO^YRy}}omyzqpmy~|u|}yzgc`[
+|~zyzy|}}}y|xyxzyxxx|zvvzuvtxzxxz|zxuutytvxtvxz}~|~|z||suogkd^_[`ffihlmmmioqmomokklkmpqttz¬°¹ŸÁÆÆÄÃÂ¿·¬¥€¡£š©€£
+|u}yvxuyypvzm|}s~
+
+}mikohpvk~
+
+
+
+
+
+
+~|~|z|zzvtzz|v}zxyyxfpsoohfhggoqqtlmmmpompmigmdmlhlkkmlpopoqmkilbN^^ZJFNYlcmocUgYdhf[YoggfmqfcuzkIYZIJ8AB@HN^pqusidbbmsqsusxobcikohlloopgv~|v|vz|z}z}oiy|}}v|~
+ztxx|vlfV^k^fgYR^VQmxmkd_mpx
+putqxvx~}~vig\^
+|~~z~x
+
+}|y}}z|}|z}yz~||z~|yzzzxvxyvxy|xtuvusxvvxyxyzz|z|}}|utmhdc^_fdklhioklkluommpmpmpokkoox£®¶Ÿ¿ÂÄÃÄÁœ·²ª
+}uvvsu}||yyqcpxq
+
+okools
+tl
+
+
+
+
+~
+}z
+~z}zz|zzy~}|y}tssisopplfbhgookoqooomlmmggggkiookklhmplmsmoptm\R[[UJII[d^ksgVcRflfZZklflsohbv~gM^^OUBBDLLNM[mpqpmh_`kq|zplimmlcposut|y||~}}~~}zq~s|~vqsx}}uy
+tgd`[W_pmZ[^UN`kdf^[g`kqkttxs
+|||y~ylfb_
+|}z~}
+
+}}~|}|~}|~zx|yzzxtyyuy}vtvyxxuvuuxzzz~~}~||}zvxpkki^\^ffiikloommooppmpsommqmpuu| ®²»»œÂœœ¹·­š 
+
+
+vsxxtx||}}tq
+}khqoopvm
+
+
+
+
+
+
+~~}}}}y||y|y|tslqmsshdhigoqqqpssoltsoihmpkgoqkimkklmloolpmm\QU`VMHEUc\o~l`dQgmm_[mflktxk^vlJZ_Q_IHDIFFIMZgoomphYbiu
+|xohfikkosxsp|~zz~xzzq||vzvcmuqt~~~~v|
+ph[RZ\bWti^\d\EVd[l~ohkxtztxzx~zvz}khb\}|}~}}z}||z~yxy}|}yyxx}x~zzuuzxuuuxx|zyzz|~|zyxqupicb\_dcgkilpomspmottqlissillu|
+¡­µ±±ŽŽ¬ª€£
+
+utuxxuuy}}}zikpsgpyk~
+
+
+~
+
+
+
+~}~~}~}|}}|zyy}~tqoqsuxpddd_iopplosmppsohlhfgkklmkoqkpkpoqmpioWSV\WLBARm^qyfcbQfuq^WbQSUYbigom_S[^UgNIN7B??IQVfqtulfdclx}|
+~
+
+ug^gYhm|zqt}}}x|y}uqx|~ytqslx|
+}||ykhb\^h[\^xkVV[YIZkvvtptvzy|~}|igc[~|}iquz}~~zzx}}z|zz}||}|xuxv}zzy|vyutssquyzz|}~|~xzysukhb_\^bfhhhlqomokooopsqsotsqqqu~ €¥~}xvsuzzv|y|u~zkhmplt
+}s
+
+
+~}~~}|~}~~}z}|~vvz|}sultpstldffgppuqtsqmotpplhhkgllkhkolopomqmlpkkZV[YQEDHWhWp~g`cOozmZLNJJOQOLVYQVQ`WYkcUIELIAAMMN^pklmmghfmot
+vdhsvtxz|~}}
+~zoxz
+|uy}~
+|oipbb^WffUMoZU[ddskcif\[dqdiyzs
+||}}~}yigc\
+~}
+~}787=LY_dmuz 
+~||}~x|}|~y}|~zy|y~~zxyuvtvxyzzz}~~}~sxpfddb`cddhmqpsuqppptpsposusquvqy}~
+yvpuvvuzvv||vzlomoko
+}o
+
+
+
+
+
+
+
+|}~~}~|}~y|zyyvqtkqqtqmgfgghsopssmoppqoifihiigollhslqloomqlshUU[^UFHL[mVhukhf`upWBBDDBMRMLUVNQbV[kf^VLI@E7ILNQSbhqslkdihft}u~vt|
+
+uzu~z~xkpz~
+ohk^[igfsl[Q~vWV\q
+ok\W^_`NUZdt}m£y|~zoib`~~~|}SNEA47.,/;DFQVblovx €
+}}~~zy}~~}}~|||uxz||yytxyyxxv|~|}~||yzskfb\^bidflkkpioqqssppvspmqsqtqvx}
+ussvzuux}~zv}|||v~}moopqp}s}
+
+
+
+
+
+}|||~~}zzyy}}tqmhvtvxkdgghhpuopqttqsqpikhlmimoilmpmlpplitosp\QY^UFEL\fZmpcii^pzdL<ARFANHE?HMLO[W_s`bWW^MB=IMRQNVbqstk_ghb_mz~~}
+
+|z||}|x
+kouzsmig_UV[Zg~`Uxh\`op^Z[L[c\RY[[m|o£y~~~zlfbbz}|iifcf_^ZRNF;?722,7;FN`hmsu
+¡¥§šª§¥ ~z|~}y~y~~}~|||z|~zz~y|ztvzxx|}}z~}|xvxqif\[[`ffklppptqmptqqlsvssxttsxvxxy
+qpqstxxy~~ty}~zv|olmmlp
+zm
+
+
+
+
+
+
+
+~|}~~~~}|~}}}}~zz}|~zsqsfpssobdliikuqposqqsupshhkllmomokiolooqsooqqoVO[bVIJQ[fZhk^hl`okS@NNSL@FFOFFLIEQQcuci^bkOEFNISVSSO\fflh`diihstu~
+y
+
+
+
+v|yqmh^b^Ughh|
+`Yv|c^_xtUJYR`_\LB\mt¡p¥y
+
+~khcc
+~~~|mmkimmplhihgf`\VVQJ?<5457=ELU`iuy}¡£§¥€€¥šª®®¬£~}~~|~~~~z||}~yyxzyyuvuvu|||}~~|zyupkd_`^^\hilmtqtutvvxoqvpmooy
+ssusxtty|zx
+~mllqosxm~
+
+
+~
+
+
+}}~}}}y}z}}yqplfmstqhfdilitxtssupsqqomlhkpolpplooilmkoqolpm_QZcWFFJ\b[mm_dh^lcR=LHLQRJADRRJQVYVftkh\ks\LVQRWZSFSNSU[khihpidqlvx~}
+
+s
+z~ytolfcSZifv}x`Us~f`_voSJ`^`bQQU`dp£|x
+
+~ ~ylhdf
+fidkioksokkkkhkmikkfg``[ZWNFA<845=EMYiqx
+¡§ª¬¬ª­¬±°©¬§¥}~~|}~~}~zzx}z|~zvzzyvyv|zuyy}}~}y}z~uihcdchfmtvopmlokkqlopqptutvvx|ty
+spplimyp~
+
+
+
+
+~
+
+
+
+|}~~|y|z~~zvxuqofsppslflhglolqosvqlsooiilmiqhpupoqpopmqmotuv_Q\[SHHH\g[pt^igZqpZJ84F_qdYNOWb[_hYoqddVhucfcSUU`bYY[SJL^gflskfquvqvz~
+ux~qmmhl\^cVlzcSl}fb`ttFN^ZOUWggZ_utz|
+
+zgkdb|~}splimmlqikoomplpoqqospmsqqpogfb_WSMB?79;7DJ[`iqx š­¬°­¬¬°®ª§£¡}}~~~~}|z}~yyy|yuszvyy}z~~~}|xqkghglmiomooosouqpxvsq|ys|~poqppsym
+
+
+
+
+
+
+~|zz~|~z|z~}vptskmsqtggggfoqpsqqtoqpomhglsmokmmkmqqmtmhksoskYS[_QMJJ^f\xuZgf^psq[A@;L_hkfcsgV_gbovfdUgullk^hbbNYW`NIMMSWbsumotpsuqx~qs|
+~~y}y
+xmhggdtk_b^z¥mWf|k_byqQN`b\[`hb[dzy|v}
+zmibh|}}qpqtusuttstqkosoglkmmpkoptsxvvqvuskligg_YRIF<9032BN^cqv¡ šª¬­±®¬­°±­š€¥ ~z~}}~z~z~||z||zz|yvxuvzvz~~~
+|ihoosspoupxxqqvvsuuxvyplplooyq|
+
+
+~}z|~zz~~|}||}zyzsuqhopsqfdhgflqqtttsssopkhksqpqlikqlmsskqqotmqmUNWbOMIO^c_qm[gf^pzvdE;98B[iiiviQbl_mqg`Noqmi`YtqRIOVSZRJIMNMZfmhhsy|ymlxxvzsuzy}xms~x}ulohoc[dcSbfdVuYgob`uhQO^quQ_bQ^f~¡z}q|vqm`f
+ttmtsvussqsxvvsvpoqqqplmolhmiopotpmotxvxtsqmhi_ZSID?5743DHZ`gu|£¡©®®Ž²Ž¶±±²±¬©§€~|z~~}~|~~y||}}|}z|z|yz}ukhdlkmlpxoutspvtqvzyp
+
+tqspqo
+zp
+
+
+
+~z|~~}}}|y}}zzttqitputkdclcmvqtsplomqohlhhlkiloplookpmkssuuop[SV[VLJNZcYsq^k`bmzxbNF57=EYhfthOfs`umf^Z}skh`\vvfZ^``SZWVOHJMNRS`ht
+xut}z~shlmmhv~zxvt}~
+~siimlh`dVcb`lk_\uYd|ufbomRLS^h`UZ\ik|}
+~v|}phgk~qmmppssstvttstv|tvyqvxtutomskoomokkpouusuyvqqsttomkgfc\YONB80/7@AN^hq|
+¡©­­±ŽŽ°²²®­±®£¥¥
+|~}z}~~}~yzzxyyz}ymikmlolqmosovyttttqsvuu
+somposzp
+
+
+
+~
+
+~|z|}z~}zxptukxtpsgfidcotpotopmtxqmklghkmqqmosmpmpqmpqstoWQZbYJHJYg[op^hbbutxq\M@7H8HmgmfYgmdxo^W[|umg`bzumqmcd[`_c[SSUWYVQW\kqxosz~xkmzuqsz}|zqksqpikilkbcgdfY_oc^€¡vV_vubfxpRHdYS\YOZho|  s
+}ol`k
+qmqqpuutpussoqtxsuutusqqtutsqtvsttpqsvysopmuqtuutpumpqmsomfhb_\ZRIB?;/5BOYkqx©š­°°²°±²¬°­£€£}~}|~}~|ygkkqoompopssyxqpqptsvvuphsmms
+ys
+}~~}}~~|||~~}~}~|xltqittptgfgfcmtvqsxmopsolkhmimkpvsmssmlmlmospsoYRV[QMLQ[`Yhoclf`uzxvmhRHI;B\opfd[i`xqcQc
+zg\Wq|ppyxi^ZY\b^__\[U[YVYSQ[`dllgfkpstkotqlhkouzmf[^b_[fZgmftªm[€£xU^}`ftz_V_chgQLSbg}
+¡zs}ppglz
+
+pllmmpputuvoqttuqxtxtqvqqsqxsquutqxttsxxvsvttstvupslopqqsplooqssqpohc^[VJA=839@NR`ky|š ©©©§©¥€¥ ~umlpmpvpsxtqtutstputtut
+omulqp
+xm
+
+~~~~~}~~y||}xyuuvokssxymcdfhousppspsmpmkilplilppomoqtotopqpqqkUR[_VHLMV_`kscmfhpxvtosV4?HQMQmid``im`Sl|g\Otztuyvp`lhO[_g`hfWf\QYUdsfc[ccbidkmtx~x^^`ghYhm[iit§u[~š¡q\[
+£cf|pYfikdYMQ_g¡~
+¡§~u
+  |lqfs}}
+
+sqpmkqsppqpotsqosqpsxtuuxtvuutppssvptzzzuxz~~sv}ttqsvqqslmloootvtzuqosoooif_VY[SLE<829@NVcpu
+zolvpkqsossmqtusmsqsvuut
+soooms~p
+
+
+
+
+
+
+
+|~}~}}z}zzy}xssqksquqgdhcgmustmsquusopihifisqqsmmosmtqomqpulWV__QOJMR_[ptbk`[py~vh[H=9=OJ_hkid\kl^Ntf^S}uy~ql_ypHY`Y_mdcpidY`|®¬ ¡¡£qogdbd[mgdvª§bo­€¥c\
+igzkOhmlzoOW`_xo|­y© zlkglzommpssqmpxxspsopqotupvsstxtvvuzttvusuuvyxyyzyyx|yxstutxyvvuvtppuqmuqoqpqpqqqopqmhfld_YQRIA7=?DSYbmtxuqqqqtmqqsmplytqtvxxyytxspspmozu
+
+
+
+
+
+}~
+~}y||}|zsutmsussifikgmxtutttusqpmhmklomomqlomqpsxspqtspRU\`QMQOZf[vvglfbuxqcYRH4HEOgqmdb`cq
+o\S|~kb\y}thg}h=lpVOWYdiobcp  
+zhc[`[Ybs_pthu¥ª`k§¡§dZp\o}pMmm^lhdqVcvd
+¡z§v©}ooiqz~olpopqumoqssqsstsqttspvupqtoqxuqusttpvv}|vuvzyxzxyxsstvx|uu||xuutsxsvussppmposuoqkousokslmlid^_ROHBD?DQbkqp|
+potqkoqvsqpsoxlqqqlstxtuooomkozs
+
+
+
+~~}z|~y|~||uvvtmusllfiikkiqtsvqsqqqqpiiomlkosollmpopqsptsspVV__ULLJZh[tzdmbYcYUWVO;=;7Yv|ohffbqpVN~lbfu~xtbt}ZHsp__Ykug^Vcsot|t~t~}|~~qpmkpqvdqzfS@i~g§hq£±dc©¥ªi^x_p}lQhtgJWg|sdbug}¡x¡~opct}}
+}zzutvttqusmmuppqpqtpstpsoqlvxpstsuuiptyyvxv|z~~|y|tuuxxxutvstpqusxxztuyuuvspqpqqsoopsssqtx|xzyppsqkdJAFIBHLQMQ`mtx
+sotopplvqsttpv|tqqutpuvvy
+toopoi|p
+
+}~|}|~zz|yxustsptstqiffcgktuttqtutkqokhkoqklqtmlpoqqpouqtsoVM[^VNIJbg`yu`c_INSWNRI=A<Om~qhd`_ykVR~
+kZi|yf_cfo`c`uysHER`zppolm_hhcivsuz~fNI\d­cg}¥¡qZšª£©t^~ugs\gxmRM_piuoq€} } ~upbs
+}}}z}zvxxttutqssmvvuupsststvuvtpstyxxuqtxyvxutquvuz|xytvxtvtuvuuvvtttvttxyyxxvytvsppptuyux|zz}yi^^\`_\D@ZYZYZbcxukopoopilqomuvqtssstsmuytv
+sopmqpp|
+
+
+
+~}~|z}xsxpppppsddhfiitussqtsqmmsdolpqpmmtoppsosussouumSU_^YJFSdkbqs^_VONOIDHDDLFSo
+sdd_bkSSiWpv`f`yfZdhy}iIOUy©Ž¹»¹²²¬š¬š 
+s}
+kgVWl¬om|ª¡u_¥£§tZ|€štiuflxsWJOlxomqz£yšxoogq}
+
+}|z|||~|||zytvtxutvvvpuvutuxzsvxzyyvvxvqmuqu|uvuvvxvtvvz|}uqzzvxtttvtusuuv|xyvvxxsvxz}~yd`cdgccJF[_`\\`cxvmtqklpllpqusottqttoqsvvsyospqmp}uy
+~~|~y}z}~uqtspttxvmcggchqqpqoqvmlskgopqqomupltssssqqttutqVYcdZHNSbodtl\\FBFRD@MZVYN[
+qd_Y^i\[oZsodoSf\ghy~fDQ`¡¹®§€§°ŽŽµ²§£tsvtgl|ufUSzu|€¡ypvª§\€¥¥v_y¥šhq fq}m_NSilghkt§|xš¡£zspcu}~}~~~z~z}}~|xxyzyssu|vxxx|yx||vvtsttvuyttxvuukxttuvyzxxyz|yx||zy|x|xzvxxy|vu~~zmccccddIIb_bc__b|}iouqpmoitppoquz~ptpxpmvus}qppqqt
+xp
+
+
+
+
+
+~
+~
+~|z~~}}uvuqpvyvulbddimxxvtpqqptummklmpmqupsopoqtututstkQW`_ULMScmdk^UQELLELV^uz[Sbpik^oiQi~mY}siz_hc`p|V?Ogœ¶®¬ª© ¡¡€|ytm_^_\\`sobOms§it©­\y¡§s[v šhmhkzubQYodWp}l§
+z§£  vumiy
+¡¡¡
+
+~z}~|
+yyz~}x~|yzxyuuxtpvyz}ysqzxtvtyytuuxtvpvsuspvx}xy|yyzyzyvuqy|z~~~zkc`ffhcJB_bb_cbc|zmomlqlqmpqxsxsv}kuuxvpvtt~
+qptqpt~s
+
+~~}|~xutmptzytogfikmsxtutvstqpkhooqqmqqqutpusquusxqxtRS^[SJMWbiZbYUDJVMQ_q
+~b[g
+lgb[ufLo|k_|mgxq}g[^
+xWUbm~ytoidk[MUZ`\p|ZLbhšhv§šdu£¡§£xbxšgh£xpqcU[^SQZdlš€z€zoshy 
+
+
+¡££€€šš¥ €
+~|~
+~}yzxvyxyxusstxuyzzzzyvyyvtytuzxvvtvvstvv|zxvuxy}~~~kggfkffJL_cf^cdi|kupspimqtpstqqssostsqsqqy
+lstpmqzt
+
+
+
+
+
+~
+}~}~}xpxtmqtuplgifiltyustsqvvppgkppmlppotuqstqtqtyyxpQO\cYJOY`g^h_QM?IAF[~b\kdfcft_Qpyb`}iilu\bfl`qdkuyqllkfhikoqtpupml_`YZ_ZfzsS_i®qt
+°gl¥¥¡lx¬ho tl~q[Y_VQSW^h€ª|š¡¡€|yqdy 
+
+ ¡§š§§§ª©š©¬ª©§£€¡||}z}|}xyzx||xyvuyxvtvxvzvvxyyxtsyyt~ttysouvuyz|zi`_ckfhMJ^bbbd^f}klpuplpsvptsqtv~pxvqusxvtsmksoq|u
+
+
+
+
+
+}
+|~}suzumttuuhigdgkvytpusqsosgmkqmuppststststtxvuutoSV`fSMJYdl\ll_\RVJWVYs
+`bhcfb\y
+`Rxz[izlq_o_`z¡¡lNfmsptxqskgcf_hmkpolooi_kg_\^tvW[¡p©€yq®£of¥ ¥€}fqªmmig|q^UhVYdiVf}§šxy§¡xqf| uyz
+¡€£¡    ¡¥ª¬±­­¬®±­­¬®®®±ª€¡
+zyy~}~|yy|yvyxv}xv}zyyz}}y~vyyvoxyv|}
+|obdgmfdMI`^bicdk|~plipilqssqvoqsuxqsxsuxys¡tkppqu}o
+
+
+
+
+}z}~}vuuvovsvvmhhgfosxyoovstusllkotspspsqtxtttqtutxuqUR`fWLM[bkclocoiZW`\RR^p`Zm`\V`~`V~x[pxo~bg_h
+ gOby}ospmqdfcfggmlqobfshfibZcbt}pR€|x¡¥yf}±ªz\¡ª©~fs­sssbvmYgki`Y^Ylz|¡¬~z§€©¥}ssg£¡ 
+^^bilpqsquxy}¡£¥€€š€£¡¡ ¡£¡§šª§©¬°Ž¶¹¶µ·µ°¬ªªªš¥ ~}~zz}|yyz|~z~|}~v}zvyupsxu~z
+kddglgdOJ_cbfggh}zhlkppsooqtsssxvyquqyxuuuvosvuqzu
+
+~
+
+~
+
+z|
+}~~vqsqlvxyvocdfhpxvyttxsqtsklooottspttussvsutuxzypSM`_VUVW`f`xvd}ziUVZHVbi^Umbf[^bNqZz¡pm~o`bi€``vztmlhkgd`d^dospupklyqogg\Y`diuSv kªfp­±
+_£€ª­Vq¬stqb|u`Y``[NNWd£z
+€°zy­š|vsh ¡ 
+=FSSQWZZ_\``dloqqusvyz¡©¬§ª®­§£££€¡¥š§ª®²±°®¶·µ·Žµµ²±Žªš¡}}
+~~vvztvuxz}~
+~mcdbhdfMJb`fffggzpoliqlkmtpmqqxtxuxuzqvzv
+qtvsuuso ~s
+}|~zssqmvuuqihhdlovttysxxpsqlmhhqtuxtksupqvusvtx||pYRccZMR\igm|b|
+kOQOY^bd\sd_Y`YVqZ  £ookzz`gxMVbthgdg`^V\^[`flmdfksspmh`\W_hgYMkl®cfš­Yxªš£¡^l²£zvz
+tkmW_`^YJUcs€¬xt©©zsi¡¥    
+YSV\WY[WZ`db``c_NMLRZfhidgkty|x|
+
+¡§ª°²ŽŽ²°š¥š££€ª®­­²²ºµ·¶·µ±­®¬¬ª£~y|~tu~u|
+}~lffchkhNMcfghgih}|omoplqppqpsytxuzxuxvsvxtvqqtuut
+
+
+
+~
+zxtzspvvzvhlfhkmvtxzttxusqphloutpoupvqsvtxyxy||xoUZ`bSU[^cgmczdJDBOb\fWu}^ZW\|ZSpY£¥¡~cs_qggoAM[sutputspqllvxx|zz~xzyslkhlov
+lN[§o¬£qZy¡šbg ¬€££_gµš}v~sc}v[^chscYhiz¥štq €€}usc£¡ ¡¡ LRRVWZZ[WZ_\ZW^`VMOJ?^`ZYQV`mi_imomquvtz|£©ª¬®±Ž·°¬©©©§¥§­ªª°­®®©­©®ªšª¥¡
+y
+}
+~kifgcggOMcklkkih~zokosqphouolqtvvusyuzqtvuxmpquu~t
+
+
+
+~
+|}|xzuqutuskgffimysxvxuststkggosttxtsyuquuxq}yx||mVW`kUSVZgdvhokok[H<7?VhRyz[VWb}V^¡c\¡xftflcmšf`pixxvxzxsuvqpvz||||x~|ughmomt|ykS~šz}©¬t\x© gh€©£ £bk®ªvuzi}t\Yftt^puh€£x}¡§ª £~uvk£ ¡£¡¡ 
+
+NOJRRNSUSW\UYSU_\W\ZE\_Z`Y[^db^b^^_`\[ZZ_hmmpuuyxzxz¡¬¬©®²±­¬ª©š¡££ ¡ ¥©š£
+}hffdihkNFbkfhhfi}opqppopmstpqusu
+vsyvxssuv¡§ystsmp u
+
+
+}}~~xtxutxuyqligfhpzxvt|quuuvoslmpktvsyxtsosuvxuyxylSWd_SOORkf~Yggh^\OUHQ``SzxSLSd~R\`gxhzofdp©UY`uzvvvuzuuxot|vzxv|z~xxpkhghfhkgcZz¡k®cy€ sf§¬  ¥fi€¥~s|_~q_[dl}vkmtd|x}€€€šzyvf€€£ £WRJEQLQY[WY[WYV\Z\dU@`d_b^Y[d_`ZZ[__ZW\[Z\WWZ`_chkkomotxzzz~}€©šš©š§€¡|
+~ofdgfihRLfhghghg}~oopppqpptspsvt|xvvvvtyvz ££
+qmmmpts
+
+
+
+
+
+
+}}
+}|xuxtsttxuihkkkpxxuvvxtxqomiloqqtsqpspuvyuutxuzypRUb`SUOUghyzU^c\^[RW_mm\YxsRMRkuHk}\pxl
+s
+zigš Yvt~zsxutsvyytqsvzz~~
+}~£€šª®o[Rmb¶`m€©Z
+¥€€­kh¡£ov~_}q`^pmh~
+xg}  |©§€€¡zvxo§£€¡£¡ £££~ZWZY\SQRVSVWUUSYY[fV9[`_`^W\cbd^__`b\[Z\[YY\`b_`dbhbc^cgkikptxuxxttxvy}|z
+
+~zigkhkfiMHbigkhfh||qkmpopspqppqttyuvx|}zytv¥¡€
+|tvspp¡x
+}}}}|~|uxxmusqqkhhgipuzvsuvxttvkfismqtstosvuvvuvsxyvziRWhdVSVYlgyo^i_VSSWcvob`xpYLRmvBhy[uskhx_^©šxbv
+ztqpusspssifgouxxyyyuxmÜÛÔÔÕÃcSb f²kg©°[ €¡¬tf£§ov
+dffoyk[tt~pt¡x~¥­§~zxp©§¥€¥¡€¡~MJSR_WZ^^\[VWYY[UV`M=[^\_^[_d`ffblocb\[`d_ZRVWY[^hglkb`cg_ddc^`ghfgoihhkuvxy|~|}zx
+
+
+~mhhhfihQMdhgkfkm
+qmmsmpqlpqsqtu|ztzvz|yzxqmuqs}s
+}}|}yyyvozuvskhciipuvqttvquusihkqqtsxttssxyuxvv|yyhJScfUO[bgd}_^gbcMk~zhg~iZQYtqB}s[ £~osp^o¬€fS^svptmpqkclgbcdosssuvuyyqÞÛÙ×ÙØx^c¬t²§p`°Ÿ[šª±¡li©±u}g¥fksyYmdkxz£¡sy£²®¡}}xo§£¡¡€€£€ SUURUUWW[VbOYZ[`VW_R7Y_b_^[_bfifccfc`_b^W^YZWW[WOR__c_\`hc^^`c_dgglkgggdlgomokouuht}
+
+|pfgghhiVQkdghhkl}mkopoommpptsqsx
+|yuzvv~z}£xuutqu ~v
+
+
+
+~x}uvvuqzsuykdfimtyvuvvuvtvomloostvvuuqttxxuuutyz~iSV`^RQ_\idupLI\Vkoh¡fZS[ziBq[
+£š¡|mzf^~§S`qvmmfhkqvqlf_[huuyzxtsu|sáÛÙØÛÝÁ}b[}€z€ª~^£±¡cq¥®®Ž§tg¬µ|­vlds}xVbQRbyªs}€°­~vp§¥£€£¡¥€£§€€¡¡ ¡
+QSSYZWZU^``V^\Z^YZfW/Z^^``Y\bdhfigikhchcfbf\ZZ[\`d_fgbZ``_Z\cbgcddhgc`cbdgdkiikmqsq
+zidmhimoQMfkkmkhl}|qoppuqpumoqssz|xyyy|x~~
+vqssst¡    ~u
+
+
+
+z~~zzxspxtxplihkluxyvutvttttiktptttqsqxqvuzy|z~zxylUWb_VRY_khk^VNSMZ|hi
+h\U\|dL
+mc€¡¡olthc£Uh}vpvoqt}ztqtsz|zz}
+mu}sàÛÕÛÝÛ®p`Sv m¡Ž^v®¥ih€®¬±ªtfš²x}°}~bgoxob`b`hb­€p€®¬£ytªšª¥¥€¥¡  ¡¡¡€¡
+MOQYVQSW[\^O[_^_VRgW8[[Y`^W[``bhkllifig``mhk_^YVV`_gkc`blmh\^[dmg^ddf_bdcgff`gfdpqx
+lbdklpiZJhhkklhgzqolpssmqosxxvtxz}}yyzz~xpoqps £
+v
+
+
+
+|z|zvvssxttogfkklqtuyytusutsliskqsxytuyxtxxyvxyx||kU[cfRRV^ldoxZU`^UUo
+yfh bZ[g¡^Qgb€¥ gko x[g£zSZy}zmtqoxsutooz}~~u}vl|xáÛÔ×ØÜËb\qkµcs²­yc¥©­µ®zh§¬x~¬~_`mq^VghV_k¬p€ª§q€€§§šš¥£££¡¡¡¡¡¡ ~x[ZY\\YZ[Y^bUW[_`YRdW<^b_c\V`dfYYZ^dfgh_Ybgklgicc^[[hc`^cfgbchd_c``bd`c^\c`hkhd_biqv
+
+}ohgihkhRLbkkhlfi|xhpsokosoppvqxvx|y}~v|}€£vpvutq y
+
+~~}}z|ztt}vxtlkhkiqxvuuzyxtsqklkmpuxpv}sqtzzyxvxyzyiRZf`ZWV[kgpRM\`UR_~xhk
+gZYgRWbpš£iyxmdv yuuy|yyxvxz|y}z}qz|uÞÝØÙÛÛÐmk©y®§oz®Žc¥§©µ°©±||š~^\qkYYd`[lt°v£®­ £ }|t§­¥§€€ ¥€¥š  £€ £ |WZWRRNQOUYbY[^Zb^R^U3Y^`b^_cdgcfcff\\df_b_\\Z\\[c`cfif_fglmmsscgcc``d^`^^`dhkh_`quu
+~oghhgmkVMggcgkhmzzkpqqssmmqottuuv
+v}yy|
+}¬§©ª§ ¡¡xqpxsu€£¡ £¡£t
+
+
+
+~~~}~zzzpsyvvullkpks|vxuvyutspooospuvxu|vyxx||z}|~}kOYc`ZVZbfd o[QV\gbvkpb[Zm 
+E`~\x¥¡¡~l¡hm¡zbk~v}âÛØÜÛÜÛŸ|sf©
+©ª²ºc£®²Žªu¬²¡zy°
+`ctvdVWSNoŽu~£©£¡¡vªªª§ª¥¥€§€¥€£§¡  € £ 
+QSOSSNNQUV[W\ZZ_\YcV9_hcb[[`gc_cbkffg`\YZ\`cdfggdfbdfd`^[d`\dg`cgcW_fhggcbkhdd__stx~}iigkmkmWNdgihmmlz|mklmqoskussqtsuty~|~~z|¬¬¥¡€š£xsoptu£¡¡¡ £x
+
+
+~
+
+~yxuqyxtykiidhu|xyzz}uxyskklmtuuyyzsvxyzx~|~|yzoNVdcSYZ`mf
+mYL\d^mugp\VYl~Hgx`
+šª¡}i ¡^d zN}­ÆÑÓÆÂÆÊËÌÇÆÇÏÐËËÎŸº®~~~}¡áØØÛØÛÜÊpdšz£·±º¡h€š²¶Žg
+€±€~}šk`o}qcREVv¥v££¥  ¥¡
+v ­­š€š€¥¥¬ £¥    ¡  
+OOOQJJLLNQ^VZ\^ff^fU;^c_c[[dbfY`^^[^`if_bhmilikihggkkigdkkmfhcdbg`\`bid_`dlfib__kuv
+
+
+qfhlkklSRhmkglki}ulssppovutuqqtxxyy}x}~š  ¡uusosu£€ ¡£   ¡ x
+_p
+
+
+
+
+
+
+
+}}~xy|ppx|vukkkilqyyu}yxytsusposqtxyzuy}y}||~|x}iRZdcSOZ`mgoWRZQkohl~_S^mz@oyd£€£tv| ¡v[x €€lWz°ØàÜÕÓÕØÕÑÕÔÑÑÛÕÓÑÁÃ±~}~åÛÓÙÛÛÛ®kd~§x¶vªº©q£®®¶Ž`
+£²©|­lbplR?[~šz€ ¡€ 
+|¬¬§¥§§©§¬©¡¡ ¥€£ €€£  ¥ qhglgg\YWV`[ZYWd`_h^5[``c^\cff``ZVYVWW[\_ddg``bc`_^cghbcdlihgimkmkkikfb_`^fkgd_^oyt
+
+qfhlppmYJflphkmlzzlqpooosqtotstyz|}}|ux~~
+££¡ tsstqv¥£€£¥ £ tsUu
+
+
+
+
+
+
+~
+~~
+}y|tmz}vsmmpostzvyzvzvsysllppsusxxzux}}}x}zfS[g`VSZ`i`} z[EOOhulo~bR_tyDtug£©§pzpW©¶©lp§ØàÕÓÓÔÐÓÏÐÐÐÓÛÓÑÏÃÁ¬~|€äÝÝ×ÕÙàÓ|isš|ª€µ²vqª°¹µb}€µŽ|¬¬vfumfN^u¡ª} °¥£¡€z£¬®­ª¬©¬ª¥€š§š¡£¡£¥€€©€¡£
+dilsmqpplqvfV__f\\fW3[`^b_\fcb\gfdkdb^VYSSUZWV\\[Z\Z^c\\`bc^Y`hfdddhig`bigfdffb_mvy
+kchhmkgZOcloqoilzzltqpqotqststsyu|}}zz}vqtszy}££€€¥ ££zsuxsp¥€  €€ ¡£umIx
+|zzz~
+
+
+
+
+xyxss|xzvmlkmstxvuuxxzvxumisluvtt|zz|}~
+
+|~}kRZb`ZV^`d[v£ }UA@Zxusv¥x[Rfz£qI}lk§©£i¡}gV€±W_ÃÝÜ×ÑÐÙÕÑÏÔÎÑÓÓÓÏÏÄŸªšåàÝØ×ÛÛÜ }os®€š··yg€±·¶by§œŽ
+¬©
+xbtk^JOi ©x
+µ¬£ š
+
+}£¬¬¬š¬®§¥¬©š£§£š€¥¡¡¡£ ¥¡š
+DEILN_^cpmpd\_cgdfg[=_i`c__ffO2`lkootvpmmkhlkcbc``_Zbc_ZWSV\Y^_^ZY_cc_^^bffdgfh`oztzmckhmloZOhkqlmmk|psosmqssxutsuxu~~~~}ss
+¡¡©£€¡¡£¥vssqvv¥€š£¡  ¡£  €vfEx
+~~
+}}}~
+
+
+~vz}uqzuyxmmomov~zxvt|uuyqmivtt|yvy}y~|y~fQZidYZ\\fb š 
+sdSL[} spx¡|^Sf}£bRhl©­š
+h 
+^`°°Yoq×Ü×ÎÐÓÓ×ÏÓÔÑØ×ÕÐÔÆ¿¬
+§äÝØÜØÜÞÛvm¥v¡ª°œ\§µº¶cu€º·¥||fqloLUg¥t
+§µ¬¥€~¡¬ª­ª±š­§š¥©©­©€§§§¡£€¥££¡==482347??^c_^^ickgY;blcfhddfS,UJJOSV_chhlpttyyuuuuloomlhd^fdcfggb_b^YZ\^ccfggccpxu
+
+}oiiikok^Qlmmloml}|gosppsqqtvxtyyv}}z}|~}¡©€£€€€¥€£  xptttt§¡¥¥¡£££¡ ¡¡vhLyy
+}
+}|
+
+}yvvpxyyyoimquz|yxy}zvyzvmsovxxyzy}
+|}~hU[ddYZ[_kd~~qubSiqqct ¡uZVhcW
+dzª¬ zqux[yªŽª}_q¡ÓâÞ×ÎÕÕÔÔÐÐÔÔØ××ÑÓÃœ©~ªäÜÜ×ÛÜÝÝ°|ms¡²s¥±bšŽ·fqŸŽ~uxdqlRYVcv¥
+q
+§¶µ¥§
+§ª²°­­š¬ªª­¬®ššššš¡£§§¡€¡¥EMNNH;HFB=^`\__ghkf_8^gdfffmhZ4N<..*,8429=?ELR[_gkoosoux}xxqmppmkffc^_\[_ddkff__oxq
+
+|mhkmkskWShkkmool|~pqptppqsvvuvuy}
+~}zzš§šš©€¥€¥¥ ¥xxuxsv§£š££€¡  €£¡ €zqHzzxcglqpvu~}
+
+~~~}ytquxvxhokptu~}||tz|yuqklu|yxx~~
+x~hQ\hbWV[[khhtqvpmlddk qlx¡t`bo\^zc¬€vtxp[­¬¡gVp£×áÝØÕÑØÓØÐÑÓÕÙØÔÏÓÄ¶©ªæÞÝÝÞÝÞàÕkf
+ tµ£h
+­£_ ²»pt¶·yt|`tpiiW^k~|©¶²¡ ©š
+¥±®­°®­¬š¬¬ª¬§šš©¡§š¥šš¥
+FBLHDDIYYBY\U^gl\ii^3^fdfbbhg[4ZN9;==<84/473+/328858BBJMWZkpqsquutvvuvmptmglgfc`pzu
+}qmglmmiURfppimkm}~ppmttpuspvxuvxy}~~¡š©¬§š©£€ššš§€zuuxzu§¥€§¥£ £ £¥€¡ x  £ €£ ¡ uM}~llktvbcihfpooxv|z}
+
+
+y|ttyzzyhloovyyyxvz}uutsv|z}~iUWk^[Y[bmg_qsglhksSd phv£ vcpxSgyf
+¡šp£cm®®_\}ºàä×ÜÕÓÕÑÑÌÑÑÕÜÛÔÑÔÂœ²ªâÜÛÙÜÞÝà×}ms°²®xu®¬hy¡²·¡tp¬±v~¥|`md_uulo|vz€ŽŽ££©ª ¬µŽ²²®¬­ª©¬¬ª§©©¡¥§ª®¥§©§
+ SWSENAEb[?R`W`bickgZ0_icfgfglc;RSBEIBFD@8AAA889;=;0/4,/0+0/78;IQRWYY\bgoophigfc`q}t~mfllqpmVOfhlkqim|mpttsspuvxyzxz|}|}}¥¡ªª¥ªª§š¥š€€š€}ptuvtš¥§š£  ¡¥¡¡¥¡}£€£¥§€š€šš§§€£š§£€vL
+ ~xvpl}tcilgimfgimptuy|
+~xxupyy}vhlotvy~z|}||}yyzx~}
+xdSZk_U\dhth`gkm|sfi5k£sqxqboxOl|i£°€qššYs ¬~mpŸâäØ×ÔÑÙÕÐÏÐÓØÙÛÓÏÔ¿¹®ªåÞÝÜÝÛàáÐudk±°ºv¡¹¹tqª»·šxm°°¬¹_hok
+kutx¥·°¡¬š
+©°°®°©­±°®­ªššªš€§¬šªšš€š§_`i^cVA`^?S`Z`_icfib7_ikdcdhl\3LWUQEFHFA@EB?BIA@FF??@;?LB@<@D;<?7..25;?NQhhkkc_hs|s
+
+|lhikmllYQollmklp~|iqqssvstvvyz}z|}~}­§¬š©®©š©§šš€¥¥¥ysyusvš©¥¥©€ €¡  §€€|¡€ššªšš©¬®š©ª°šª©¬vQ©£
+ ©š¬š¥£  zxxtkmqioti_`|
+
+}spzvzzhlst|
+~}~~zy~yubV[gbZVblvbckout_'tvsyqVhu}Vpq£©šs £uY£€£mp²ÛåáØÜÛØÛÙÔÐÔÕØàÕÑÕÑŸÂ­
+®äàÝÞÞÞàä×©}md§©u¥œg¶·
+k¬º¹ªzh·µ|©œ¶£iikdzxspš°° ¬©­²²¬®­°®¬±¬©­¬­§€¬©ªª°š©š§ `ciikQ;^[<Rb_^dgdbif9dmhihfhk_<N\_^VQ\\[ZYWUVUMMLJH?BB?EFLFIIMFMHJH@<@E0Qohfgg_dtulgglosm[Jhommoooxkooqstvqvvyz~~­©u¬¬šª¥š©ª¥©¥š €ytvtuv §§š£€€  ¥€ €€~§¥§€§§ª®­°°®°®±®°­ª§}V©¥~¡šš©šª©š§¡¡¡zqlp
+}xt}x}}hkpxy
+
+~x~}|vs`R[f_Z__iggidiv~b(uyvlZl¡ xUv}x§©šz k^£``y°áäâÞØÕÜØÕÓÐ×ÕØÜØÕÔÐÁº©ŽåÞÝÜÜÝÝááÕo^|§x¹šdŽµb§°»ªg¹Ÿ¥}
+µ±¥hdzLQv
+vq¬®° ª¬ ®µ±Ž±°²Ž®±²­©ª©©ªªª©¬©¥§ª¥¥hddldR8[b<Vc_dfic[oc0cmkf``hlZ;RV^_YUY_YZ\^c`b`fccc_YQMYLJIFFBAFLHJHJL[4Ahifhb_\oo
+plmlopiVNgokpolp}|kpsqspstuxz|||v}šš€©©©ššš§©§¥©š¥€ |qvttsª¥šš§¥  š £§¥£}€€©©§¬¬¬¬±°±²±ŽŽµŽ±­}Q¬§
+}}ZALV^px}€€š©¬¬©©©¥§ ~txz|ymmu~}yvbQWkdZZfhi^Y_vd%x~u d^v}§€qUx~š©l£§Zl€šqxÎâääÙÝÙÝÛ×ÓÐÕÕ×áÛÕÓ×ÄŸ­¬âÝÜÜÝàÜáä×vip£Ž®k­²`Ž»ªxc··~¹š¥pd~`H}pyo
+ ©±Ž¥ ­­­²µŽ±±°°Ž­±²®°­¥š­©¬¬ªªª¬š  £¡|zxupY9\^?Ub\``hgZg_4bliff_kkc?Q[b_c```^b_cfd`cdcgbd^cbcfbZ^b\RRQJLJ8O^7Icihhc``px}mfkloqo[Niqkpmkkypsqoosqstyy}}zvx|©ª©­®©ª¬©©š©ª©§ššš©¥zppvut§§š£€€€£€¡¡¡¡z§šš§§¬°­±°°Ž°¶ŽŽµŽ²šzY¬£
+c8MHB~v@<<EIRblv z~pty
+
+~zx}cSci`^Z`khV^_`£€`4|zxg\u£lW£o©¥i€£\x©¡q^z¡ÐäèäàÛÏÝÝÛÕÓØÙ×ÝÜÐÏØÄÈ®ŽæÞÜÛàÛÞáâá¹sh`€~§Žyt§Ž£g~®º®}b±¹£|~®š€ubgJsds|®·¶£ °©²¶µ²Žµ²Ž±°²°±­­­°®­®¬ª§¥šš
+¡£€€¡bdkllU8[^@Yc``dfhcig0cmmklikm_AS_ZFt|~xotxutsupqsmkdklmlgdbff_b`Vd_HO`=Fblgdgf[Zvtglkoop_Ommimomq}omopqqvtvu||~y}|}}|®¬°±°¬ª¬­šš­ªšš©š€€š¡zuy}uuššª¬¥£¥£¥¥£££ |©ššš­¬®­±Ž±¶Ž¶²µ·µµªyW°¥kDRQLS=5D883<88@BFEMk  z
+
+}~|gV_g`Y^`ii\\^M^yUH}y£g`sfY t¥€
+guW£­kpmxÃääåÞÙÐÝÙØØÓØÑØÝÜÔÔ×ÇÆ°²æÜÜâÝÞàÝáÜ®vff}¡x©ºl®ªvy°¹¶f­¹®š®¡sf
+gH~vdi}y®¹µ¥€¬° Ž¶µ¶²®¶±®®°±°®­ª¬­®±­°¬¬±©€€§§š£Z[^^gZ=Y^DU``bbki`dc3cqpilhllcAS\U<[b|~~
+
+
+xysssohhodglc^_[@H\=HhlhfbdW9tª  }ohilppmZQdmlmsmhsqppmtvsssy~~|z}|}š©²¶š¬¬­š®¬šš§©§§€¥}uxyty£®©ššš©¥¥§€§€¡€}¥§©©¬°°°µ°Žµ¶¶ŽŽ¶¶µ­V­ª|mEOUR~bA2J@=9?29@=JID€¡£¡£  ~
+~~hVbhZZ^ciqi`_b`biRU¡xx€dVp©^\€q§©€yv¡gf©m~}ÇáäááÛÓàÛÙ×ÐÕÐ×ÜÝÑÓ×ÇÃ²µåÝÜÝÞÝàáâÜ£tcx¡°¹¡l²²u®·²`­Ÿ­~©¬ufbF|k[hqly±¹Ž¡±°€¶·±µŽ··¶±®­²±²­°±­±®°²­®­­§€¥§¥£Y\\`ib9[dAUhbdgdhdg`7cqsho`gi^<R`Y?NQogsotuqqt~}yz
+
+
+z}}xpl_@J^@EflmhfdU9d€ 
+~qipmoom_Qkokkoml|}pouvotvxtxz}}|z~|xª²®­­®­®®¬š¥©©šš§yutsv|š­©§§£¥¡€€£¥šz§¬©¬®®±µ¶···¹·¶¶·µ²¬~Wª©kLYUYpsN7SS=?F??D@SIM£€£©¥¥€¡¡¡¡¡ ~hV\ic\`cmvk^^_cbtSM~£ vs©^Wt©Yi€v£šl¥¥Uz©zdy ÆÑåæáàÝÕÙÛØ×ÑÙÔÓÝÙÓÑ×ÆÊŽ±åÛÝÜÞÝàââäÝ±ykv²µšsµ¹l§»µh°º¬±¥©qcgIsmqg^do ²·µ¥¬®£²µµ¹¹¹¶±°°¶®±²±±®®ª°°°°±²ª¥£§š€¥[[_bbY8\bAYc_dlhhlg_9bpolkdksc=S^Y=ONgloktyoilxuqcbfopstpvu}z~~~kDB[?AgpligfU=c¥ ogklmpp_Okqpmoqkzsmttpssuvuz|
+|}¬·º·®¬©§®©ªšª¬š€¥~vvuuxš©šª§§¥ £££££~š§šª¬¬²Žº¶¶·ºœ¹Žµµ·­}^¬¡~fO^YZu
+_;[W=?MD?EHVIJ|£¡¥¥€££¡ ¡¥€
+~cY^lb\^fs}udSS_oOO}€xvª[Vyš\pzv®ªp¥£Oš€€ivvÂÙâæäÞ×ÕÞÙØÕÑÕ××ÝÛÐ×ÕÇÂ©±èàÜÝÝÛÝáÞÜÝšybo¬®²¬²¡c€¹º`~­¹µ~±­š¡qb_DffgVdq€¶¹µ°­¡Ž»¹²·Ž¶µµµ²®Ž²±±®°°­±¬±®²®§£¥¡€š\Z\^d[2Y_FSccikfkkh\3fqpkkkkqd@N^W9MQlovqvxqkmqsocidiqtpoopoopmmktxmJF[FDguohlgVAb¥  mfmooomZHgsoomllzpmstspqtuvy}~}x}|¬»¹µ±ª®®¬¬ª§ª­š§šzsstuy¡ª­¬§¥¥š€£€£¥¡€§©¬¬­®Ž¶¶·»µ¶ºµ¶µ¶±¬}\®š~tzgScWZq}d<`hIFLBAHJWAMz€€¥š§š§£ ¡€¡ ¡
+}gV\hd_^cp¡£uYIVbfb£uy¥Y^£
+Zsxy¥¥p©£s`_p~ÂÓäääÝÕÐÝÜØÔÓ××ÔÝÛÔØÔÆ»¬
+±åÛÜÞÝÝààááÞ²i_f®©z§»x£œ­b§¶·[t€Á°|ª®€iccAod[Sbs
+§¶¹Ž±®¥­œ·¶Ž¶¶Ž¶·®µ¶²±µŽ²±°°±®®°­€£§š©š^cd`f^9\dHRfbioiiomg;ipuolfksd<WgU3JRomyq~|smllqpgkktsqqosuukposquxpMI_DLhqupkhVE`ª
+~phllook_Nhoqlmmlz~soqsututvy}z~}}}y®º·±±¬°¬­°¬ªš¬¥š§£}upvy|¡­­©§š€šš€§¡ ¥€}§¥š¬©ª±Ž¶¹»¶œ¹¹¶¶·²ª~[­£x|dNd[^x~xMlkSJLA@JYbHSz 
+£§£¡€¡€££¬§¡cVbkc\[foª¡bO\klkuyU`~¡ vUu£v} §£_z£ MVÁÐÑâæäáÙÓÝØØÓÔÛ××àÛÑÕÓ¿º¬µåÙÛÝàÛÝÜáâàœppi}¡Ž¡Ÿ¥uœŽk­²gp¥œ¬}¬­h^¡fMoimq¡¶»µ±®£Žº¹¶·µµ¶²°²±²²²Ž°®²²ŽŽŽ§©§§®ª§fbbfiY=[kIOkhkqkopil?htvloilpi<Q^[0MVmouxx~plmtqtkooussplqvuipsqsqumJO^BOottkgl_L`¥
+~uhmplmkWRcilppokv}qpsptqxtuy~~~z}z€­»»Ž©§¬¬©­ª©šª©¥© |vv|}¥¬ª¬§šª¥š§§£¥£¡ }š¬­®±Ž¶µ·»¶¶°¶º·¶·°§}_ª£zycUdi ©O~o\OSJLObdA[}¡ššš£€£€€€¥€¡~
+bVblb__dm§¡lIJ_mouu}Sb€qSz€st§¥Sª©qSdÔÌ×äææâØÐÙØØÔÓÕÔÓÝÛÑÕÑÂŸ®»èÛÙÝÙÙÝÝáàâÊ~xmŽ
+»Žuºº}¡©®fp¬Á±}©·o[}£pOvhim} º¹­ ±µšŽ¶·ºœ··¶­­°²²²±±±®°µ²µ¬ €§š¬§¬ d_cdkV<[fLWphitopmiq=guvqklmml7S`Z5MVpputuzqliqqpipltssxtyuxssttpsupJJ^DFpsvtqgV@_¥
+yikpmpo_Siospqts|}oqtsssusu|v}
+~|~~ ®»»¶±®®­­ª¬¬šš¬©©}tzx}­°®¬©­ª¥§š¥£§€ £~§¬±®¶ŽµŽµ¶ŽŽŽ¶¹¶·º²¬zcª¡yucVogQv`ZZOWVchD^|¡¥§©§¥¥ ¡£š€£©  
+cR_hb^b`l§¡z\Oblpš}z}zNh€iY
+£u€m| |bª€gmªÓÑÙååàÞ×ÓÜØÙÔÓØÑÙàØÔÓÓŸ¿°·åÝÛÜÛÝÝâààâÑkš
+±±}¶¿u¡©gp€»±|š¶t^¡hRmhvpt¬·»¶¥ °°¥ ·¿ºº·¹·®¡µŽ²²±Ž··±Ž²µª šªª§­ªggfhdY;^kFYpiiuposlpBbmxopflpkALZZ9ORttyzzqlmtvyspsxxzutuxxvxuuvztmLJc@Mp|yyop^5h§ ~sgimmimcMhpmltoqzqtppqussuxx}}||}} ­»ºµ±®­­®¬­­¬¬­­©¡|z}~£®ªª­šª§ª§€¥š£¡ zš®°±®¶°µµº··Ž¹»º¹µŽª}bª§~zu`Vpos|k_z```OYQ`dFcs¥€€€¡€€ ¥€£¥¡fUbkc^^^mz[\gblš~zxtOo§b[pš¥q  ll©©_cqÑËÙèèáâØÓÙÙÙÕÔÙÕØÞØÙØÑÂ¹­¿éÜÙÝÜÛÝÜààäÞ¥~g`¡zªœx£Ÿk ²¡lk¡ª­}¥¶\tpOuu}kq°·²£²°£ »·»·¶¹µ­»±š°µ¹µ°¶¶µ·²µ© ©®®°¬ª fdhhk[4[iEUpflxmlplpJdxsomdguo=S^Y;QZuutvtpqyx|uptxxxxuxvxuztxt||qRMhLEpvzzyvd;_¬ ~shoooomcQimikpqqz|mpsssuusv}~}|z~ °œ»¹®®²ª­°¬®®¬¬¬©¡|sy€®¬­§©§€§¥ªš¥€£©­±­­±µŽ°²·²µ·º°ŽµŽ©yc­€}vtc[plkbdkU[_S^Sfp§¥§©¡¡€§€¥¡ ¥£
+hZ\fc\^cq
+§§o`V_Um£v~xtUs¥^cx€€zs£^¬­zhixŽØÎÝèåâáÙÔÝÛÕÑÏÕÔÕÝ×ÕÕÕÆ»®ºæÜÛÛÝÞÞÝÞááåÙf~ª
+œp°€f¥»±sl©­v¥
+}[xpVpkmt¡Ž¶ª ¥Žµ€ ººŸœŸ¹°£
+ÇÕš°¶µ²Žµ¶µŽµ® ªªª®®®šc`bfk\8ZlHOlhhpoloqsDfvyqogiumEOd`8ONpsy||ussyxztvvvvuyuyt|zxtxox}uQRfMJqy~}xxb?bª¡
+qlmmkmlbOhoqmlkivqqqusstxxy~yz~²º¶·°®®®®¬±°ª®ª­ª£ytx¡¬°®©ª§©š§¥©€§¥€|ª±±°¶²µŽµŽ··¹µ¶»¹¶±¥xf°€||qf`vo£z£
+`moUh[MdWfm¡¥§§€¥£§§€¥£££¡
+
+`Ycpc\bhltdVWfBi¬z}xkWz §
+[fª¡t§¥d£¥ho±ÔÜÇØéåâåÙ×àÌÔØÓ×Ô×ÞÙÕÙÕÇÂªœæÛÜÜÞÞÝÝâÞâáµup\y²²°sµ©o©œ¶g°·©x¡ `spO¡yhkdi®š£±Ž€ €¹Ÿººœ·š
+œÁ°®²²°±¹ŽŽ¶º­£¬©®°±±€mdcgqV9[hIVkkhppmkfsDivvsqkmtoHQfZ;QQtovyx~ztquxyuuvzvtx|yuzyzvxt|y[QiULp}|zxkVm
+
+qckokmq`Ohkmmoll}lsooxttsyy}
+|z}¥¬»ÂŸŽ¬¬°®²±®¬°­ªª¡yvx~­©¬­ª©ª¬§©š¥š§¡­²²­µŽ²µµ¹Žµ¶¶·µµŽ±¬ug¬£y}shksxzz~¥mpqikMlZko§¥©¥¥£¥§£§©¥¥€
+
+
+
+fS_ld`bfmvg[bo}Jk€~v~£¡g[ §Rtx
+§°¡k£qv€\mk§ÙÜÄ×åèâà×ÕÎÑÙÙÐ×ÓÕàÜÕÕÔÊÈ®Ÿéà×××ÛÛÜÝàâàÓo^i¬£±µµ°y
+ªœºf¿Áªz©
+^p zUyzhh|€ŽŽ§ §»ŸœŸ¹²¶²ÁàÛ°¶µ¶²°²Ž¶Žš¥²­Ž°­°£cfhfp^8UcFRohfmossoyR_pvqupqvqHQg\<RLzvyyx}vutx}vxvvytxy|y~yvytqzxZMhQMsyqdlsbikolqcMdqolspo|pqvzvstxz}}z~€Žœœ»²±±°­²®°ª­¬ª©¡|zvy¡±±­ª©ªš­š¥ª€©©§€ª²²±¶±Ž¶Ž²¶µŽµ¶±·Ž²©vg­zzoop
+s¬z~vdvUm`ol€¥©§¥¥š€€£¥£§€£ 
+dUhoccdgoqkqh[[g|Qt§}u}c^£Wzx
+£­l £f¥¡z^}¬ÃºÂÆÌÄµºŸ¿ÄÌÂÃÄÄ¿ÏÓÃËÁ§€œèàÜÛÜÛÜØÜÜááÛ®lpc£š©·
+¬¶~¡¹¹dµÁ¬}¶`qvY€}~utš²­§ ¥ººŸÁœ°£ÈÓÜ§°º¶·¹Ž·»º»š¥®©±®°°£gcdiod8UiFNlhmpouqoyOcuytxqttsISg[5MQ}||vuxvvx~}ypu}x}yvzz|uvsv|zWLhZSo~|uqlqgklmmq`Nipltqpsyotovutuuu~
+~|~|€®œŸœ·Ž±®²®­¬®®±°¬€}yyy~€±°ª¬®ª¥§­ª©ªªš¡¥±µŽŽµŽ²Žµ²²Žµ²·µ¶µ²ª}f­£y}oku
+¡¬|m~^mcoh¥§­¬š§©§§£¡€§š
+¡ €
+
+
+bZ`l_^bf``[^_imcJoxu£[l
+¡£sS}p¬š}£f­€lhcx©§§§§¬¥€¡š²±­­®©­¶­©¥ ÂåÛÛØ×ÛÛÝÞàÝÞàÛ¡u`ª¡œ©x ºs¡±ºb¹Á© ·`s¬¬x\§}|o| ­¬¡y¥¶§}ªÏ·Ä€±¹¶¶¹Ž¶ºº¥§®±Ž²®°šdggfsf9YgHOkiooqmumuJcuzxyzusuJNh`9QN|yvvty}vy}zytzxy|zv~vzyy}~xYMh\^s~|zx~o 
+tkohksogIgmoqqloxuqqqxvutxz}~z~£±Ÿ¿ŸŽ¬°±²®°±°¬­­š€  zyt|£±²°­¬­ª¬©§š§®š£¥­²²±µ±Ž²²Ž¹Ž²·®Ž®²®¬|iš£u|kixg~x¬¡~ux_kkzi¡ššš€€§¥€£¥€š¡ 
+£
+
+dU_i_`bbU^`cosyZxxyYmškVzm¥€v©£u©¶ WsqzËÙÓ®ÄÜÙÝ×Æ¿ÄÇÄÇÆËÊÄÂŸÆÈ¿ÃÂ²
+ŸáÜÜÙØÜâàÜÞááâà©hz°µ²}œ©f°œ k²·ª
+Ž °dm¡§zZ€¥~xq®±¡~|£ÏÈŽ±± §¶¶º¹¶·¹·ª¬°°²±²²¥cciipk;ZhFMqoksslqkqNdxyxvqtxpESi_5SL}v|uvqyz}}x|yzuyvvvuz~}}xut}|bJh^`s
+
+~zux~o
+ ukklkopdOfpolmmp~qvqqutuuu~
+}||z~
+¥¬»»ºµ®±Ž±°°±°­®°©£€|xxxz ±±²¬ªªª°­§š¥šš€£}°Ž±Ž··±µµŽµ¶²¶¶®µŽ±¬yfš£||ms~zi€¥¬©ykpm|gª€¥€£§¥¡¡¡€¡£ fW`g[`dc[bfhlk|Rxv}Ro©cZ
+s¬p t©€R[s°àâà¿Õèååâ×ÕÙÛÕÐÔØÕØØÎÓÕÎÌÄ²ÄåÞÜÜÛÛÝàÜÝÛÝâÔtlpª¹¶ŸŽcª»£p­¶¬µªŸšfg¡°_š~
+~²­š §²­²¡œÔÕµÐ£¬ ©±µµ·¹º¹¬¬±Ž°¶²®§fddoqo?UgJOvqkptlqoqS_uytysmomMJgc8SLyy}xyxyzx}~|xty|ztuy|yxz|~zZHiVZvvut~m 
+~siilkop`Ngqmlkopytqstyvqtz~~
+|~¡®Ã¿»²±²±²Žµ°¬°°­­ ¡zsu}|€²°°°ªªš©šª§ª©ª€¥~°±Ž±Ž®®²µŽ±¹µ²²±±®Ž­xiª |pu
+}k§©®®¬¡
+ |pksh §§š§š¥š€£€¥¥§£
+ £
+bYbi`^c`_^Y`xY~xxOt§b_~|¬t££§o¬ ¡~zt~ÏâÜÝÃàæææâÛÓÜàÛ×Ó×ÓÔÝ×ÑÙÌËÈ®ÃäÛÝÝÜÛÜÝÜÝÜàâÞªpgb¥¬£º²µu®œ­uz­¹­¹­º±lm©°}^£§¥ ~|²±€ £²²±®¥œÁ¹pot®©§¬¶¶¹¶º­¬µŽ±¹µ°§ikimqi=YhAMvsoiplsopS^vtqzuppmLNhc8UE}v|z|syzvzyysux~|qpy|~tv|y}_IlWZy
+
+xz}m©š~sfflkmsfQdmopppmustsqvsxsv~€ŽÃÁœŽµ²±Ž²±±°°±®®©€ |uy~}¡®®²­¬­°ª¬¬©¬©©¡ }®²²®±±²±°Ž¶°Ž²°²Žµµªyf­zqvys
+š©­°ª§zyoti¡€§¥©€§©¥€š§€¥¡ }`UR[\bocWdgg~£
+W} vt}Ju£^g¡s~¡ª|€¥t¡©`uoÞèààÂØèéåâÛÕÝà×ÕÓ×Ó×ÞØÕ×ÌÇÄ²ÇâÛÜÜÝÝÞÝÞÞÜááÝ¶~x²²š®·©œ¶}q§·Ž±µ¹µvišµc¡šš¡kgª®©€¡ª¹°ª»ºÜÆ~y¡ÊÎ·¹·µ·£­²µ¶ŽµŽšggiipg<^kEItopgololuZ_vvttpkqlIMfdAQHzz|uoyyvzyyvssvzzppz|x}zvyy}`UmURs}xzt¬š
+uhmoikogIlmimpmmxpstvxssyy
+
+~~£±Ã¿¿·²°·°±°µ±­­±²¥¥|x|~¥¬°°®­ª®­¬ª¬š¬¥¡£~±²®°¬±®Ž­²¶±²²²µµµ²šslª|fz}¬­®±°ªz
+sug
+š©£§¥š€§£££¡££
+~}dFI^_f[Y^dq| ¥`~¡y| zR£[ip££~
+o¡§Sis¡âèÛáÆÝèååàÔÓÜÜÛÑÑÔÓÙàÙÙØÑËÂ±ÆäÛÝÜÞ×ÙÝÝÜÝàÝàÇ}
+x±®¬~±u¥œ·
+q£»·~¬Ÿ®²yk€·d£¬£¡š_g_
+ š€£š»»·Äñå©xs©§©¬¬ª¬
+©º²·»€­¬±°±¶Žšhmiiqh5ZlIMqglhqmolpW^ostssmtmIIcf9UBxz}zumzytxz|tsv|~vs}~|z}||_NoWOs
+}y|~o¬©~sfkmiom_Qimppmppx
+qpsustsstz
+
+~~}~€ °Ÿ¿Â·°°¹Ž°²±±°®®±©¡ ~y}|€¬±Ž®­²­ª¬®ªššš€€­µ­®­®µ±®°ª®­²­­°µŽ¬yl­ymv€
+­°®± ¡p~i ¡©¬§§§££§¥¡¡££  
+~dUJZ`bQNUo£€Yz¡zx pW
+££|Sum€xiš§£qul©âåÔÜÂÙäæäÞ×ÕÜÞÜÕÔÙÓÕÞÛÓÙÏÊË²ÈáÙÙÙÙÙÜÛÜÛÛÛÜÜÑ|m¬©¬¬§o·ºu¡¹œ©ºš¹g¶fš­š¥¡h^fq©œ»¶¿×²zvtx®°­®®šxŽ²º·š±ŽŽ¶Žµ±€hkooqh;[kEOukpislulmR^otopphqpJMgg7SI|z}|ztzzpv~uxt~yty|z||}|`QhWSp
+zzym°©
+sgimlhqgMfkkooomtopqpquuvz|~
+©®¿Äœ¶±µ¶Ž²ŽŽ±°±®®€u}|§±²­®°­­­¬°ª¬©¬€€ª°®­®±²µ²±°°²µ±±±Ž¶©xh©|mv©£¬±±±z£~f ¥§š¥§§€€¥¥£§€¡ fWQ\dcWZgl¡|U}¡sq©lUpJx£o®z®­u}q~ÁäåÙÝ¿×æâæáÛÜÞÜÝÕ××Ô×àÛÕÜÑÇÃ®ÆáØÛÛÛ×ÜÜÞÜÝÙÛÝÜŸz|cš¥Ž­µmŽŸs·· |©·š®
+f€µ
+l©°¥¡£xUbg š¬¡¡­ÁœµÔ±
+|°·Ž¬°®®šx²¹·µ©ª²Ž¶µ·Ž€mikltl9[kDOohogssvpqWYpqottitmLMgf?RDz|}yxxz~vvyxy~
+zyzz}x}||bLlQOs~utl­ª~
+xlhhmlmcJdomqqkkzpmupqvxtx}
+
+}|}ª®ÃÃ¹¶Ž·²®²­®°±°®Žš§|yz|§²Ž®²°­²¬®­®­¬¬£¥¬®¬°°¬­±µ²±±µŽŽ¶¶¶·ªyp¬¡vzhš€­±°®§d¥§€šš§§€¥š€£€¡¡  gZ^cd^_boc££šzS
+qp¡c[fQ€l°}¡©ª
+Uv~ÌâáÝÙ¿ØäåäàØÜÞàÝØÕØÕÛÞÙ×ÝÎÈ¿ªÊàÙÜ××Ü×ÙÙÛÙØÙÝÝ§x~i|£ Ÿš|®·}µ»¥o±Á©|€»ª®h©¶p©°¬[Zg£©µ¶± ²¿»±Ùt š©¬»Ÿ¶¡²±Ž¹µ¹Žškokkti9VhERqfmgmookoYQioksplupRMmf=UHyz~}sx}xxzxv||x~~xz~cJmUIq
+~vxq­§
+
+zgdkpmofJcloqqpmx
+sotsuvmtv}~
+
+|~ª °ÃÃ¿¹·¶¶µŽ²°Ž±°°±š£¡|y}~£±°±±°®±°°®®š¬­€¥¡¬±°­­­ª°°²¶Ž²Ž¶Ž¶µ²¬vp¡® |xu£¬¥¡v±²µ¥¥šf££¬ª¥€¡ §ª€¡§©£   gW`ifgc[kbm €¡~Y¥€ps\`dZ€xx­}y¡¬¬qOu}€ØæåÛÞœØååàÝÔÝáÝÔÓÔÜÕÙÝØØØÏÈ¿­
+Ðá×ØÞÙØ×ÙÜÙÕÙÝÙÝÔ¬sq¥¹°z¡»®Á­s²Â°¶®¹f©²v§°£¥ vZu±¶°° ¡·¿²­Õ¥qoxthp§¥
+|±ºœš±µ¶¶·¹·§llmsyl8QkANslmilpolkZVpokosopsYJpf@SHzz||zz}|x
+yv}~}y}
+z}
+
+~cLhOEu
+}|zp¬©
+xfkpompdIflkopto}ppsmqtuv|}y|~¬ °ÃÃÃ¹µµ¶¶µµ²Ž±²Ž°§¡~|}~§Ž±°­®°¬±©ª°©¬¬¥€­±®²±­°Ž²¹°Ž±¶µ¶Ž»Žšuo ²u­±­¥z€±°±š§i¡©š§€©¥š¥§£€£¥ m[gqicihgiR¡¡£zO
+¥qxUkSdk~¡€€ š§± bV|Æ×èåÞÝŸàèäâÛ×ÙáÝØ×ÓØÕÛÝÙØÙËÄÂªËàÛÕÙ×Ü×ÙØ×Ø×ÙØÙÏ ~pc©©µœÃz¬ÁŽu¬œ²
+ª±¹b Žx§¬§¬µ²kdu£  ªŽ·¬ £ŽÄ·š×z|qugqysLo§vzl¹º¥¶²ŽŽ¶·µšupmuvi7UiDQqopmoootl^QmtmqplqoUNqcASAtz||xx|zy}z|}~
+}|
+cIfREp
+
+~xzo­¬xgkkookcJhllspmovtquqqvvtt}|~|y~®¡¬ÃÆÂº¹ºµ¶µ±Ž°²±±­¬¡ ~|||}¥±±Ž°®®°°°°­©ª¬€¡}®µ­®­­Ž±°Žµµ²±µµ·º·¬|o°£s­·®§cy¥µ±²|§£¡i §©©§ª¥€§¥€š€€¡ oYdupiglpbWV€ vQ§}xvSy€ yLlc¥}£©¬§iZmÎÞééààÁÞèèäÛØÛáàÜÑ×Ø×Þá×ÕÙÏÄÁªÎâÔÕØÛÙÜÙÛÛÛÛÛ×ÜÌsph¡¬¬Á º€l ¹µyšŽ±¥ ¬²\šy®®¬®°oxtª­¥ŽŽ°©¥ µœŽ¡Ý¡lxxuul
+y}cqx¡·§µ·Ž·Ž²±ªQVQSdd5WoBMqookmhttmZZupkptispVMqb8L7<EILJV`cffppkkot|yu~}~cIhUAqux}l­©
+xhgmkmpcNdpmtkomupsuspysxvt
+}}x}
+­¡®ÃÃÇœ¶µ¶¹»²ŽŽ±Ž°®š¥€~y|z©ŽµŽ®®°±±°­²¬¬¬€¥ ©±±°°±°µ²µ°µ¶µµ¹ººº­yq€¶x£µ°Lp€±Žµ|©¡¡m£¥­ªšš¥§§©€ššš £t[gyulhosccUp¥£ uZ€}x}V€pOsl£shl¥ÛÞêéààÁáèéäÛÜÝÝÞ×Õ×ÔÔÙàÓÕ×ÎÄÄªÎáÑ××ÙÕÙ×Ø×ÙÜÜ×ÝÙœvs}®£¹¥±švµŸv¬°­±¬­Ä\¥}°µ©°kk|x}§¬®¬®ªªµº²¥ÈËpillmbf`~il€°Ž¶Žµ¶°¬OSLZfh3SfAFqqqhshuuoYZttpttoosUHviMA@?5;578729472334;ADDFIOOVW\dfitubEkVDm}xvo°š
+yikiompfD`ooqpuqxtqptpqsvtv~}­¥¬ÄÆÆº¹¶µŽ·µµµµ·²Žª££||xx§±²°Ž±²®®²ª°±®®€£ ¬Ž²®±±®µ·µµŽ··¹¶¹Ÿœ®ykšŸ€x§§ÁŽSm€®¬µi£¡¥p€£š§š©š€¥¥§¬£€š 
+ o[ftqifmucgfUx¡¥oZ
+S©£lSvp ¥
+¡¡ ii}zœâÝâæÝÞÃàèêäáÙÜÙØÕ×ÙÜÕÝÞÙØÙÎËÈ¬ÑÞÓÕ×××ØÕØÜÛÙÛ×ÙÞÐ}o¥¡¶Ž¥¬·¹p­¿Ž¹µ¥Ã§dŽª©­upx±Ž±¹°²°šœÂ­€·¡|fY£}l\cs
+£±·²±²»Žªkoihlc4Yf?DippkoivxoZZusmtuoqt\NpifpoquyuvtpsplkfZYQLNLJINMFHHHFDIZtdDgRFoyv
+p®§}uihikoliMdmpqtmpx
+vuusovzyvz
+
+~|°£­ÄÇÆ»»·¶µµ·ººµµ²±€§§}yv|~§¶±²Žµ®µ±²ª¬ª©®€€€
+°±±°²·Ž²µ¶¶µ·¶»Ÿ¹ÁÂ°zlª¿€zš©°º¶[}ª©¡²Q©§€ €m¥ ªššš§§§§©§¥¥£¡ ¡ £¡p^ivykimvqZS^\uo\y}xY­`Q|x~ €¥§f|ÄââéåÞÝÃáèèäâÛÝÙÝØÕ××ÙÛáÙØÛÏÇÁ¬ÔÞ×ÕÓ××ÔÓÙÙ×Ø×ÙÙÞÛœ_ £²¹®º»c¡Ã¹·¹»©f·š£s|uu~±œµ€·»¹ª£š±·¡zpp`\t£©¡lofuqŽµŽ¶¶¹Žªhmfhd_2VcD@gilhkksuo[YvqovsmtqZJsmglst|zyy}||}~uvuuvosmldhbotc?fZ@pzzo¬ªvigiioqiMbillklpuqsutuvvssz
+
+
+­¡°ÊÈÇŸ»º¶··¶·ŽŽ·±Ž­§£z|}z§µŽµ±°°²±±±®­¬±§ ¬µ±±Ž¶²··µ··»·œ¿ÂÆÁ°xs­Æ§x°©¶·d­¡±®cv¥­¥©€ §k ¡ššš©©¥©š¥¥©¥¡¡£vbgxyikpz}f_dk^pkSyz~s_¬[Up£¡¥¥š§}Ss|©áâáèâàÜÃàæééæÜàÜàØØØÕØÝàÙØÙÐÇÄ°ÓÜÙÔ×ÔØÓ×ÙÝÕØÕØÛÙÜ¿gxª¥Á¥¶¡
+µÁ€_€Ã·²²¶®k·€qsxv}¬¹œº¶£œ··±£€£špy~oc`hm€©opkggkhhš¶Ž²·¶®šplifc`5Sc@BifchiltmlZVthkuoltpWIvtplpopyxtqotutz}z}~zyxoouyyutxyyymD`V?ktym­š
+
+zhdkmpslEbolkommv
+tsvuyuzsxy
+
+
+~~
+±¡¥®ÇËÆŸœº··µ¹µ·ŽŽ±­©§¡~z|zª¹ŽŽ¶±±°­®¬¬­°°§¡¬±²±ŽµµŽ·¶¹·»ŸÁÇÊÐÇ®}v­Ë¥t·°··i­¡ª²~l£š€   §£p£¡š©¥š¥£¡§¥¡š§€¡ sfkqsphmv|lfhvi_d_R yv~lp¥¬Qbd€¡¬£¡gWxÇèåâåæáÜÃÞèêèâÜàÞÞÜÕØÛ×ØÝÕ××ÊÇÈ°ÓÜÐÔÓÕÔ×ÓÙÕÙØØÙØÙÕ¶zocl®¹±°°~­Ÿªi¶º|®®­­u²|sp­¶·Ÿ±€ºœº¬€£y|zkhukš€¥ihlgi €²¶º¶¶®ªyyvytpVSZABmighmooop[Oqkipllqt^Es}zy|}~~}}|zzzyyuipssttvyzucF`U=k
+yyoªš}|khklmqkJ`kkpqlovvutuusvxyv
+~}|
+²€ ¬ÈÆÇœº¹·ºº»¶¶¶¶Ž±ª¥¥|zz~š¶Ž¹²ŽŽ¬®¬®®±ª®©£¡­±Ž²µ²²µ¶º¹º»ÁÈËÎÓÌ®zsµË¥y¹Ã£»¹m­¥ ª¶f¡°§¥¡§§€u§©¬©šš€¥¥š€§¥¥  ¡ufitxohp}}i^k`^`FN€yzly  Rkfš ±£€bfsØéæàåäÛÙÇâæéæáÙâÞÛÛÔÓØØÛÞÓÓ×ÊÊÊ²ÔÜÑÓ×Ô×Õ×ÕÔ×ØÕÕ×ÛàËgdª¡Ž¶€±~šœŽoµœ€zš­­¬p©zh}yªµµºŸ°©œ¶µ¡€p¥¡
+tvk m_^\[_lxª­µ²·º·±ª
+yh?@kloiqosqq`QsmkpsmtsZEsz~~}yyk_Y=d}}tulš¥|
+xgomhmmfLbulmomot
+tqmpqtttyz~~®§ªÆÊÈÂ»ººœ··º²µµ±±­¥¡}|~§µ²µ²¶²±°±²°±®°ªš£
+®Ž¶°µ»·Ÿ»¿ºÂÃÊÊÐÐ×ÑŽ~q¶Ë§y¿Ó¥Žºk°š¡®±¬p °š¬­ª€¥t§€ª¬§§§§§§€€€¥    uigy|oll~tkVdmhQ¡zy\¡vQt l¡§§¶¥lisÄèíæáéåÝ×ÇâéêåâÛáÛÞÜÓ××ÕØÞØÕÜÎÆÄ®ØÛÔÕÕÔÑÑÓÓÕÕØÙÙÙ×ÛÛ}m š¬º¹¡œµv²¿®zªŽ¬¬x²
+vihksš··µº·®¡€Ÿ·¬hxštm vl|dRYV_Shšµµ¶¶¶±ªZ?diqomqutpbNpogtpkpqVAu£V;_tvkªš~~
+
+ygklmopfM`mkoolmxsttuvpsszyx
+
+~~~° §¬ÇÈÇœ»¹¹º¶·µ¹º¹°Ž­€€¡xz}¥·µ²¶µµ¬°®°±²­°§§€
+¬²·µœ»œ¿Ÿ¿ÄÆËÏÐÓ×ÛØ±yu¹Ì£t€Ä×¶Žœo±š¬²°¹²®°®šš©v¥ šš§§§šš¥€€§§€  ¡  xgkxvoii}
+
+~biob`|vWªmM€}u¥€°©oxsÐèèâáæàÙÔÄáèææâÙáàåÝØÕÔÕØÝÜÔÙÐÄÇ¬Óà×ÕÐÕÔÓÓÑ×ÔØØÕÛÜÙÛ¶
+lgy¬ª¿ª¬»¹
+¬Ÿ¬zš»¬±}©mokq¬Ÿœ¶»ŸŽ§§¹²ih`€k¡}`ugWstkch
+Ž··¶°®ukooptqql_Qllmzggoq_Eo~  €£ ~`d~|sx
+q¬š}ykfkmkofMflomlootssspqpsvuxz
+~|¬£€©ËÇÆ¿·¹º»»¶·ºµŽ¶¶­š¬£zxy¥»º·ŽŽŽŽ°°¶±±¬±§§£Ž··º¶»¿Á¿ÆÆËÏÑÑÛÛÝÝ±zu¶Î¥x ÁÛ°­º§t±­­°®¶²°²¬§¡§y§¥§£ª¥§­©€€§€¡  ¡ £ £¡  £tbhvzphi|y_LORZuuU£_V
+l}®š UWs­âëëæäêæÝÕÆâéæêäÙâÞáÜ××Ù×ÜÝÙ××ËÇœ±ÕÝÕ×ÕÕ×ÔØÓÓØÙÙÛØ×ÙÞÌfil®¹±¬€Ž¶®Â­}§»§¹§}is|m}°¶·µµºœµš²§yuizmhiVk®©hciWv~tz
+š° ªŽ©^_cclhllozutisomuuqsbNommsmfqu_8;?;?ADBDMQWZ\ccdiikpszvx|~z
+~ttm¬ª~}vhghklohLcqkomppuokplqmqpuyz|
+}±¥§ÈÇÆ»º¹º¹ºµ®··°·¶¬¡¥yy}¡ºº·¶²Ž¶²¶±°°©®©¥£²¹»º¿ÁÆËÊËÊÐÔ×ÙÝÝÜØ±|tºÎ z·ÐÙ€¹¥¥z§¶ª©¬Žºµ­®°±¥š§£š©šš¥§§§£ªšš§  £¡ £
+cmxvlkl
+}zi`Vbc¡ppv^€S_k ¬££}\i|£áëêåâéâÜÙÎäæéèäÜáÞåÝÔ×Ô×ÝàØÕÛÏÈÄªÔàÕ×ÔÑÓÓÔÐÑÔÔÜÛØÛÛÛÐq\`­š²Ž±°š±t§œ®· ®µqvyy¬¹Ÿœ¶µ¬­ª€²®fbcZp¶|tg°¡zml_hztqxs¡®¡ªQQVQNJLJDBDOctmottxsfSlopylitxmkkhhccbb^b`d^^ZWUVV[SOJLI@HJBBDIFLSQVW^_Y_`
+}pzzhšª
+~
+z
+|ikkllmhHcpmokoms
+tpsppppsovzx
+°£š­ÈÇÈÁ¹¹º·¹¹··¶Ž¶Ž­¥§|yz}§º·ºµ¶Ž²±²±®±­­©§ }Ž·»œ¿ÄÊÌËÎÎÓÕØÜÛÜÝÙµyy»Ç~¹ÏÌ£¿ª©¬º±­±¹±o€Ž€²±š¡š£©¬¥§§¥¥ª¥§£¥¥£ ¡ £¡€vchxyogl€z||kLgspph€€~Mf`£š lb|ÎêëêæáèàÛØÈàæéèäÛÜÜÞÜ×Õ××ÝÝÕÕØÎÈ¿®ÙÞÕÔÓÔ×ÐÓÓÏÕ××Û×ØØÝÙ­s`dy€ªº¬·±gœ²¡œ¥±œz~z°µ·»±¬¥€§š¶¬s_^mWxdz zytipphp­i¥ §®©lpolohkkfkmqismsmuqmdOoslzplquxxvxxyy|yxxz}}}~z}
+zqtuy}yohkhddilgdbZg
+|sxf­ª
+
+|~
+vigolppiQdxopkqluuqputupuquvxz
+}
+°§®ÊÊÆÂ·ºº¹ºœººµ¶µ·°ªªz}y©··µŽŽ¹Ž±±²®­°°ª§¥¶»ÂÃÄËÎÎÑÔÔ×ØÕÜÞááØ±v|»Ì¡u­Ðœ§Ÿ©¥²¶°­µ»fª­¬µ°°£€€©¬¥©š©¡£§€§€€ ¡  ££   ¥|gmz|slm
+vp`Yo¥€mqhu¡kLxy[¡€¥^[hÕèèééâêâÛÓÇàèëæáÛÛÙâÜÙ××ØÞáÙ×ÛÊÊÁ®ÛÑºÆÓÔÓÑÑÕÔÑØ×ØØÙÛÝÙÈddm£Ž ¡ºŽ§f Ä¶x¶­€œyx§²¶¹¶µ­¬¬šª· uvmi`hoyz}f}mhccvp\z§¬§¹ šºš§¡ª§¬pqtokmlqsqsvmpioloxqiJhuqtqmtxxvtpuyz~
+
+
+}}~
+~|
+yzz}~}zxyh¬®xkihppmfHcpspmoks
+totuoqqqoxtz~
+}Ž§¬ËÈÆÁ¹Ÿœ»¶º¹¶µ·Ž·Ž¬§ }x~§Ÿ·¶·¶Ž²±ŽŽ±±­ªª­§»ÁÃÈÊÏÑÑÔÕ××ÜÛÙÞÝÝÛ±xœÌzŽÎºµÃª¬±·±°¶¹s©q©Ž±®§¥£ª§§§¥£šš©§€¡£¡€¡¡   ¡¡£¡}gozzskm}¡¡|VOm£¡hthšhNxm\€š¥ š\o~ÜëëîéâëäÛ×ÌæéêæáØÛÜáÛÕÔÙÕÙáØÔØËÌ»ªÑ¹œËÕÕ×ÔÕÑÕÕÕ×ØÙÝÜÞÛ°ff¥¹¶¡»·±oµ¶|¶¬€¶q€¥²¶±·Ž²»Ÿ»©©¶©}gYYc
+|¡šmypq£}p|p¶Ãœ ¬»Ž­§¥qovqqusqpssqfskoopxsgJmuoxqmvxyyplssptxvxz|}}|y~~z}xx|}~
+
+}~}
+
+zyxylª±
+}
+zfdimlofJ^oilpolqpqqtsqpttpxv|}~®¡¥¬ÇÊÊÃœ¿ºº¶¹¶¹¹œ·¶µ­ª€
+|}}ªŸ»º·¶Ž¶Ž­²ŽŽ±­š¬§œÇÇÊÏÓÕÓØØØÙÛÝÝÝÞÜÜ±z~œÌ }¬ÎØÑËª¶Žº°²·ºsy€g­²°ªª€§¥€§©£š§€©¥¥€ ¡  ¡€£  im}yupm|¡šš§kYRt§ _~bšWS[o~¬mYqÆæîêéæâêäÛ×ËéèëéâÝÛÞàÝÙÕØØÝÝÕÓ×ÎË¿¬¡×µ€ŽÏÕÔÕÓÑÐÔÔÕÕÛÛÛÛÛÆi¥¬­Ÿ·±¹¹}®Žu­±¥¹gtš¡·Žµ­¶¹·»º§­Ž€qt
+qdVNpz}kq
+qu©¹»Ž §²ŽŽkihkikomsvvzkokqoquqf?gtkttpx|v|}zxz|xv
+yy~yzvvz}|~~xuxz~|~zz~||z|uti©¬
+
+~
+
+|lhmpsoiN[moopkpusqsqqpptpuuv}
+°€šÊÊÇÂ¹º¹œ»»»»ºœ··­š©£}š·±¹¶¹¹·¹¹µŽ·°¬©°©ÄÌÏÏÑ×ÕÙÛÛÕÜÜÝàÞÞÞÜ±yÄÈt¥ÓÝØÌ¹¹Ž¶°Ž¹°V|¡­s~®Ž®­©£§¬­©€€£š¥¡¥§¥     io|~vmqt ¥§¥`k[m£€d_¥UW¥^}£y£°Yi}Ÿ×ÞÏËÌÎÎÂ»ŸÁÕÛÞÕÐÓÓÐÛÕÑËËÌÏÜÔÐÑÁœ¹š ×¶€ÂÎÐ×ØÕÔÙÕ×ÙÛÕ×ØÝÂ}q\vµ£» ªºµœ­Žx®±€°zclu¥°µ²±¶···Ÿ»§§¬|ytofmph¡£°§¡z
+~··¹šœŽ¶²šiimlhpqpmpsukmoslmxogBhvovxqutvuvvptz~||z|y||||vzx~~|~yyzzxu|z}~
+||zpzkªª
+}vfblsptkOdsmqsoovssppqsoustxvx|±£§ªËÎÈÄœŸ¹ŸŸ»ºŽ¹·¶·±ªª§y€±ª ¬¹¹¹ŽŽŽµ°°­Ž®ÊÐÐÔÕØÕÙÛÛÛÜÝààÞáàØ²xÁËv¬ÔÞÙÓÇÃ±»¬µ»¡It¥·²¶±±©¡§§ª§šš§§§€£©¥ ¡ €£    ¡¡¡£hpy~vkou€§§YR?m ¡}c` OcN
+ª¬tSk££±Æ­¥©±§ª²µ·¿º°ŸÃ±ÄÑÇº·š¥Á¿ŸŸ¬€¥£ØŽ€²·­®ŸÐÔÔÓÔ×ÙØ××ÙÙÜÔ¬u^k­¡¹¬º°Ç
+¶Ç©s¬¬£u^|€²¹·¶Ž·œ»®®€y ª£}t €|uz}xyubcks}§²œ±ªºŽŽ²©®cgimplmssspvopkqtlvv`Houtvqpxxyytstzvtxxyuzz|~}zuyuy|z|yvyy}}}~zszk©°|~glolmlgN_qpqpqpupqtqosstvtuv||
+²¥§©ÊÈÈÁœœœ»·¹¹¹ºœ·µ±­§¡ofox
+i^p§µ¶²Ž¶²±®¶°ÈÑ×ÔÕÙØÛÜÝÙÝÛÜàáÝàÛ²z}ÁÎx±ÙÛÙÕËÆ ±œ¬°ºE®¶ µœ·Ž§©¡¥¥©ª§©ª©š¥¥§š¡ ££ ¡¡ ¡¡¡€££fpy~xpoy££lV`SzubiyOp 
+Y­§^_yÐÙÌÕÛÔÐÙÜ×Ï»ŽÑÕÑØÌÁÈÆÄÎËÆÁºŸœœ­ª©€ §£×¶®¶°¬€¬ÁÔÔØ×ÙØ×ÙÛØÝÛÔ¬|t_¥§²¶­ªÁ€|ºÃ§|Ž¹uZvy­µ¶··»·»µ­£z¡­¡u~€§š ÄxqyxtUYc}q
+€¡}x¥¶š±¶¶¶š¥£±mkoqqsooolpxpxoqusqZDlvy|sqvv}
+~~
+
+~|}tylª±|hfmimpiOdomqpohmspstuqstqtut}
+
+~}µ¥§šÈÌËÆÃÁÁŸŸŸ»ºœ»»·µª¬[\mzutvsum­·²µµ®±Ÿ²£ÌÔÕØ××ÙÙÙÙÝàÛÜàÞÝÝÛ±tÃËu±ÜÝÜÕÎÄ¥±»²°µxU°²}·ºµŽ£¬£©©©©€¥§ª©§§§¥ ¡£   €€¡£¡¡¡¡ gty|vmozšiUWLvfhuz€mL|fhš¡hp
+°àæàêèâØÛáÝÓÂÄàåáÞÛÓ×ÔÎÏÏÎÎÑ×ËÁµ¶Ž©€¥£Ù°£¡®ª®ÆÓÕÕØÕÕ×ÕÕÙÝà¶olf}¡­§¿€¥Â¬q¬Çµx®¿¡}W~Ž·±±¹µ¿·Ž®£¥¥q©€££xlkdgvo}|mtm
+~ft±¶¹µ·§Žqqqooqospstylmktpp}v_?pzy|vpuy}yzxy|z|~z|
+
+}}~
+
+~
+}}xss}l¡¬²
+}~ikipmtkObmopoqst
+uqsotmotpvsu
+
+~}±š€¥ÆËËÃŸ¿¿œŸœ»¹Ÿ»Ÿœ²¬¬*Ls|shuWRh­Ž²¹²±Ã·¥ÑÕØØÛÛØÜÛÛØÛÞÝÞÜÛáÙ²vÄÊu»ÞÞÞÕÏÇ§²··¶²ozµšg·»¶µ€¬ ¡šš§­¥ª€©§©¥¥©¡¡¡ ¡  ¡ ¡£ ££¡kp}}zpsx€§dV`Ey dlf¡`O
+\q¬©po}ØéäáêêèÞÙÜÕØÌÎàääåÞÛÛÞÜÛÕÕØÙÜÜÔÈÄ®®§¥£ØÃ €­µŸÏÔÔ××ØÙÜÕÙÜÔÈÊÂ~_o¬¶¬£šµ¹t¥¶©|£¹`¶Ž°±»·¶±¹Ž£ptxšª§ ylZ[Micq`URbqx_by~u©²ª±µš¬¡Žuttzxzxvtvzztsoush|yg9myqxxozxxtuyuxuvzz||}~~~~~
+~|
+
+
+||vug­­zlmmlmpgR_lqqpppu
+utoqqspsstux}~|Ž §©ÌÌÈÃÂÁœ¿Á»œ¿µœœº°o4@d|yfNLcxªµ¹Ž²œ» ÓÕÙÙÙÛÛÜÜÝØÝàÞÜÙÞàÜ±xÄÊyŸààÝÙÑÃš²¹ºµŽš°²­ºµ°¬¡©€šš¥¥£š§¥€£§€¡   £ £€££ ¡¥¥fuzmss£sbbY;
+¡_t`¥WVN°`^|¥ÛéåáëééáÕØÑÔÐÕåèäâÞÝàÛàÛ×Ô×ÙÜà×ÌÊ¬  §Ýº£©€§®·Ì×Ô×ÓÔØØ×ØÙÇ¥»¶v`f§§®Žš±±Áµ²£µ£`qv±±²ºŸ¹»Ÿ¹ šq š¥¥ |xv^_[Roy`im[HERhgmmiuvp~|±Ž¬¹pqpptssqttv|lpouql|xh4mutvtuzvuyx~|}}|~}
+||}zyy~l ¬±
+}fgfloslO`olpppopxtqqsxtsust|}~}®¡§ËÐËÄ¿»¿ÁŸ»»¿œœ¿·
+R47'7dvz~zb=Ufg}~u°²¹²ÁÂ¡ÓØÛÝÙÛÝÜÜÛÛÛÜÜàÜÞÝÜ²yÄËxœâÞÛ×ÎÄªµ·¶¹¶µ°®Ž±°ª­°­±­€¥¥©ª§ššš©¥§š€  ¡€¡ ¡£¡ ¥£¡£€dq}qmv€ mbfgB bt[£LcxN§¡cov©ÛííâîêéÝÙÓÊÌÑÕäåâÜÛÜáÜâÙØØ×ÜÝÝÙÊÂ§ §¡šØª¬µš±¿Ð×ÕÕÓØØÙÙÝÛ¿€~||Ž¥¶£º­ÁŽµœ©Zxvy²µ±±¶¶º»¹ §~ šusH[bh``pty}mbi
+
+®ÃÊ¡h_šœ®µvyt|yv|xvt|smpyps}u;ltuyvsy|xsssttxxvvuuvxvt|v
+
+
+~~}}~|~ztl£­°
+kgfmmmgO_mqpppqyyomstmppvt|
+~|¬ §ÏÏÌÂŸÁ¿Ÿ¿»»»œœŸ±uYA&0VV;0BZIdzmgkikoxty·¶±Ã¹£ÐÛØÜ××ÛÙÙÛÝÜÝàÞàÝàÜ±xÄÈyœÞÕÓÑÊÁšŽ¹··²­©§±¬­¡¡€£š¡§ªš§©§š¥¥š¡¡€   ¡ ¥ £¡  ¡¥¡ 
+cs|z|qpo£t^^fMQ Z\¥zHgx`ªyfxzœæëèàëéäÝØØÏÐÌÔáàÞÛÞÕÞÜâÝÜÙÜØÜÜØÏÄ±¡©ÛªÂÕÓØÕÕØ××ÝâÓ®
+}m°º§¶©§Âš²·~º€Yvspš®š¥®¶œÃŸ©€y¡€¡|}_D=JZmkq`\\gi^s£ygdu¡š€²ommspoqomkkzstxvooyzm0hpuyvt~vvuvutxux||z~}}tv
+|y}|}zy}|xxv}uxy}yzxx}~|~zvt}l ®±~
+|pilmpliM_hoqqoszupssuqqqs|z
+~~u¬££¡ÊËÌÇÁÄÁÁŸ»œœ¿Ÿœuyt`\SoxtmlcRE@8Fg~ppsy|°¹ŽÄŸ£ÓØÙÙØ×ØÜÛÞÜÜÞÝÙÝÞàÜ¶qÆËxºÔÌÇÇÂ»§­±µŽ¬ª¥ 
+©¡ªªª€¡š¥©š¥€§š    £ £€£  ¡¡£¡
+fs~zqmoysVZoR_W~hqJzWv `d¿ååáÞèäàØ×ÔÌÇÈÕâáÜØ×ØÞáâÝÜÙÑÏÑÓ×ÊÃŽ§ šÝ¹ € €Â×Õ×ÙÜØØ×ÝÕ¶pif©¬±²®± Á°}®œ}¹¡š¥d|z©ª€©®·Ä¶x
+¬¡u¡§£k_ZlLN8mu\`mb\tfdvquq~
+sfv·oklhhlilqpmvuoovpkvym.guqxvuyzut
+
+
+}}~uvxvz~zz}yxs}l£±¶
+|igkilphN\mqmopmsxtxpqpstv}
+}
+}yt¬ÈÎËÄÁÃŸ»Ÿ»Â¿Ÿ¿»Wlk}o`xs`I
+Jltshy··ÆÁÎ×ØØÙÜÜØÙÛ×ÛÛÙÞÜàÝÛ²tÊÇu·ÎÇÄÂ»µ€ª­®¶¬§ }®¡š©¬ª§š¡š§š€€€   €¡ ££ £  €§¥bm|}zump}yui^bpZbZidE
+IS`ÎææåâÞááÜÓÑÔÊÊÆ×áÜ×ÙÝÙÝÝàÜÜÙÌŸ¿ÇÊÎÁ°£¥£§Ù§©ÆÙÕØÔÙÙÜÜÛË}c^y¥£Ž®Ÿœ·}ª¿£t¶¬­Ÿd|
+z¡²²¬§µÆ»°¥¥€if|Q7QN` yQm¹htpfl|l€gs
+¶
+|}y}}|soxusuxm0ivsyut||l@y  
+}zvuxm¡š²~
+}hgkmkqlMbppoplsstqtuptvuy|
+~~}vm¬ÌÇÈÈ¿ŸÂ»œ»ŸœŸ¿¿p?V[l^ª©ª§
+|mR/?Wdi
+tvŽºËÁ ÕÙÙ××ÜÞÛÝÛÙÜÛÜÜÝÝàÝ²uÇËu¶ÆÂ¿Ã¶¶££€ª­®¥~~ª§§§­¥€š¥¥¥¥€¥£¡¡€€¡ ¡¡£€€fpz~|tutyopiqfgglu`pqVM
+S|xZtÑæåâÞÜæàÙÐÑØËÎÊ×ÞØÕÙÜÛàÞâàÝÛÈºÁÎÄÆÊ®°§§Ü©
+¥ŸÏ××Õ×ÛÜÜÞÔŸ}z
+hhk¥µ¬Ÿ£¶Ä¡¿¬y±²¶t~
+xµ¹°°²»¶š€ |hfoxE;tzugU^·
+gqhkfd ±~dx~°vsttlpui3l|xuuovxo@dWNLU\^YUYY```[b_gcffbcdfd`dcfhhgilhmpgkfhv|}}tyo€°µvkgpposmMbpmotpissqqsuutv||~
+}~ulª¡ÌÎÈÆÁÂÂŸ¿ÁÁŸ¿Âºh<E_df¶²°²©~slks¡µq²µÊÁ ÕÙØÔÙÜÛÛÞÝÜÛÝÜÜÝäàÝ¶yÄÇy¹ÆÁœ·º·§šª±¬§£z|ª š¬š¬§¥¡£¥ š¥§¡   ¥¡¡¡¡ €¡¡fp~}qlsmiccmmddklif|xL`mi€±€hb²ÛâáÞÛÞáÞÕÏÓÓÐÊÆÓÛÕÓØàÞâÞààÛÛÐ»ÌÊËœŸ¬®ª© ­Ûªoo
+¥ÆÕÙ×ÕÙÞÞÜÜ×·vucb±­²¬šœÃ¶y°¶Žb¥»¹µ°Ž¹¡®± fqlfRbbZ
+s|R^gkkihbf^l®©gbd}p§tJQSNROVVWVW`ystytosvo.hzsuvsv|vAcO.07/359494837<7<?59/373;99=<5;;<9;=;25<\p||zuu|oš©µ
+yhihmlpkO[ipqomtsvupuyxqu~z
+}vpi¬ÌËÇÆÁÃÃÃÂÄŸ¿ÁÃ»d(5Ygt­²ªšª »È¥tª¹Ê¿¡ÑØÛØ×ÞÛÙÝÙÝÞÝÜÜÞààÜ²yÃÈ
+ÃÃ¹»»µ­ ¡­°°§ztx}©š§§©§£šš£§¥¡£ª  £€  ¡ £ £
+ip|z}oolboc\W\V`kfz[vBuY}x¬¥~Zb~·áÛÛÙÜÛåÛÔÊÑÓÎÌÁÔÝÙÔØÞÜÝÙÞÙÛÝÐŸÈÐÆºœ¬­±©¡ ®Û€
+¥­ÄÔÙÛÙÛÜÛÜÛÑ°m
+f_yš®­§­ ÁÃœ~
+®Áµl|·Ÿ»²±© šª¬q`8=fhigZbNZc\cgcO^Wps go~ª}p£x<7834B@A?;<Yytuytttvq/h}tzuvxvDbWDMNOQOFMNNRZUNLQQMRNRRSZW\VZRVNRMZVE<RI[ozy}yxv~t©°¶ 
+
+olkmopmQ\mqqoqlp
+utxvvvz}~z|}yqi¬§£ËÏÇÈÄÄ¿ÂÃŸœÂŸÃ·[
+0Ig¥¥€£§£
+²¿²
+­»ÆÁÑÙÜÙÕÛØÜÝÛØÜÞÛàÞÝÞÝºuÇÈÆ¿²°­¥§¬Ž§ xtkpª€©£¥§š€š€€€š§§   ¡€¡¡£ ds|~zpodh}hMYcbklZZmLOyšqmmËâáÝÛØÞá×ÔÌÕ×ÎÏÇÐÜÕ×ÞÜÛàÜâÞÜÙÌ»ÈÓÆÇÇ¹œ®€ £°Ù~šš°ÑÙÙÛÕÙÙÜÛÏ¿ªkb[o®¥Â ­Âš}·Äy µ²š
+¡z`šÈ»Â¹¡­±£
+lOv}UdUJJO[`fglIH_Qb|~tgª}mo€SOONQUVU[YD^xsqvvspzx/l|vxxsv~yEd\NRSSMMLUUUWVZVSYWZZW[^\db_ZZ[YU^[_[OWcDOoyxzxyxu£®¹¡
+}kkhlmplS`lpsmqms
+ymxyuuz
+~}zob©ÊÎÎÊÃÂ¿ÈÃÁŸ¿ÂÂ¹Z
+
+/Yz¡£¡ ~
+§¶µ¶»ÈÇ£ÐÛÛØ×ÛÛÜÝÜÛÝÞÞÜÝÞàÝ·xÊÈyŸ±ªš£z š¥soikhv­¥¥ªª£€©§¥€£§©§¡  ££§¬ŽŸ²¥£¡ft}vpqfc`hkk}txqSbcQo_¥_y×äÞÜÜÙÜÝØÔÎÔØÔÓÈÑÛÛÛáÞÙàÝà×ÑÌÊ¿ÈÐÊÄÈºº¶©±à¥§²¡£Ž »Ñ×ÔÛÝÝàÜÝÑ·£¡u`_¬£º©²¥±²sªœvŽ±€£DYx
+Ÿ»Ÿº ·ª k¥zš¡qpOS_FH`iRSLLFL\_šomuª£QUZ[W\Q\fY=_tqtttopzy/c|vvzs||z@bvyv}yyuuvy|yx|utststuqmmvtqpuuquumckHRgFRszzz~zs€®¶€~lhkkmpoU\mupmoqqxpuvxvx}~zpfg§ÌÏÎÊÄ¿ÄÃÁÁÂ¿ÆÃÁl!?k}¡ª¹±µŸËÁ£ÓÙÙÛÛÜÛÛÝÜÛÝÝÞÝÜÞàÝ¹yËÆ
+Áª¡ tho~vhgfc`y¬€§§§¥€š¥§¥¥€¥€¡¡££­ÃÎÕÕÔÛÝÕÎºª  _s}~tpslbShYsyxttW|t€RbVpz¡sLbyÓÞÜÝÜÛÛÛÙÐËÓØÑÐÈÓÝÛÞäÝÛàÙÛÐÔÎÇ¬ÃÌœ²œ®©ªš²Ü®¥Æ¿©¶ÐÎÕÙÛÙÂÈØÙÏáØÇ²šs_cv©²±µ²­¶· i°®°|€SD|§¿Á·¥¶ª¥£bf_®­qs\JkW<R[DEIUROQsÂŸmmo£§²ªomuomo[Ic`?bymsxuqstv4cysvyvt~u@cv}uututtvvz|zzyxzzyvzzxxzzy~|~qsOWgFWuyvzzxzy§°·¥|ikgkouqSZmppmsut|vtuyuz~}~zpgc¥ÌÌËÇÄÃÁÁÁÃÄÁÂÁÂi&(=`|£¥
+ª¶Ž±º»ÇÁ ÏØÛÙÜÙÜÜÝÛÙÛÛÝÝÜààÝ»|ÇÊ
+Ÿ°~qdlpxytcZ^Z\[zš£­¥š©¥€¥§€¥€¡  €¡£¥ ¿ËËÈÐÎÓÔÕÝáéäÔ¶£~`x}slmpiZguJ|zuxy^i§HmO
+~¡`Zps±ÝÝÞáàÛÜÙÕ×ÌØØÑÓÊÓá×ÝáÛÜáØÑÇÇŸŸ»ÊÊÂŽŽª©š€®Õ€ŸÙÓºÄÙØØÛØÕ­¡Ž°šÕàÝ×Ëº¡sc[k§ªµ©· ¿¶£p¶­»¹ªbAx
+z¹¹º±¡®·²©sfu}ogts`U[\`WMS[z¥°mo­¬£qouxzudJb_@_zpvxtvov|9hyvzyss|vD\zxtyxxy|~}}~yxvxyx|~~zz}|}~
+plIRhEOqtxyzyzq§ª·¥|mhlhilmWZqspqooo|tvxv|}tqb_©¡ÊÐÎÇÄÆÆÂÃÁÂÆÆÃÁk*;@M}¡€|z~|~ŸŸÎÃ¡ÓØÙÛÝÜÙÝÜÛÜÝÜÛÝÝàáÝµzËÊx±€yk_[`gosmfWVQRQMUv§€§š€§§š¡€£€ª£§¡ ££  €€ÂÌÓÎÊÂ»œÇÎÆÏÕæâÛÐct|tpophttx\vpsqxm`b¡|F||^§ _kkÆäÝÝÜÕØÝÝÓÕÏØÛÐÐË×ÜÝÜÜÜÛÝÎÇÃÃŸ··ËÄ¹²œ²¬š§£±Ø¥ÄØ×ÂºÓ×ÛÏ­Ê¡¡ÑÝàÛÕŸªpdd œ­¹¶©Áªpº®®Áµ¶mLtt}šÁÁ°¬ºŽ¡¥ 
+}|
+
+|}mlp`Wgtogbmuª}k£§»£¡xxuzzyvcH^UB_qqtuvvmxz5kyxxqq~zI\yz`lISkDUuxvvvxy
+tª°º£|kkhimsmRZsqpkqqt
+xsvu|~}
+~qldgš¡¡ÊÏÊÊÃÃÁÁÃÃÄÁÄÃÄHYFY€i\MDBIUmxhVE;OtŸŸÏÄ£ÔÛÛÙÙÛÛÜÞàÞÜÞÝÝÞÞáà·|ËÆv­yhc_`miffZONNLMENxª¡¬ª©©§©¥§§€š§š¡£ ¡§€®œÃÌÐÌËÁ»·ÇËÂÂÊ×ÝààÑty~stsh[lukyq|syooWgV`všof}¿âÝÛØÜÔÓ××ÓÔÐØÕÎÑÇÐÜÞÞÜÙÜØÇÊÌÄÃœŸÃÆœœœ§š¥§ ²Ù±ÁÊÃ¬®Ð×ÔÔÇÊš°ÌÝàÞàÞÏ¹§vkfz¡¶µ¹¥­±œ°sµ¹§Ã¹»}Iz
+ssµ»²¡¡¡£§~
+q|cRflossmoy
+ck
+ml}¥µŽ©qvz`D\SBZqqpztuo~x;dvyuqs~zM^slAssIUkHUxx|||v}s©©º¥
+}lkmlqokY[pumsuqt
+}uuz
+~ymihf­£ ÌÏÎÊÃÆÃÃÇÁÃÁÃÁÄ€zg^|tkf_M97U|L87Q_¡¿¿ÊÂÑÕÔÙÙÙÝÛÜÛÜÝàÞÞÞÝÝÞ¹}ÏÆz°qf`_dmmkfYWSUIQUVyš§šš©§¡¥£¥§ªš¥£ £¡   ¡£¹Õ×ÔÊÄÊÊÃ¿µœÂ¶¶ºÁÁÌ×ÛËzvppkci|zuutzhz[YkM§¥\t}ÓæÜÜØ×ÙÕØÛÔÎÑÕØÌÐÄÕÜÝá×ÙÞØÄÓÊÇŸµÁÄ¿µµ²£ §¡µØ¬¬š¥ÊËÏÈ©ÃÑ±¶ÎÏ×àááÞâÔÂ©scc©°œœµ¬º·º|©©µ¬¿~Lzz}yz
+£œš
+|m
+¥ª­š¡|~moYFlp~|xoFlšphu€Žµ§€vxyfBYV8\qoq~yxu}y5huyypu}I[um4ZN~x}z|}y|ypMQhFNty}|yzxs­­»¬qhlpsqoUZpppspmtypsx||}zqifi©  ÊÐÎÆÂÆÇÃÄÄÄÃÂÃÃdq^ltMO?^__fts¥Â¿ÆÃÏÙÛØÙÛàÝÝÜÞÜÞÞÞÞÞÝÞºzÏÄ}°
+~yvh^^fgquofd_`[\Z\z§¥š¬ª¥š§š¡€¥¥£¥ €¡ ¡ ŽÁÏ×ÓÄœ»ÁÂÆÄº·Ÿ¶¹µª¶ºÄÓÙÇmplidy}xyqzddOp|[
+§€}VokÊáÝ×ÙÕ×ÑÔØÕÓÓÛØÌÑÎÔáÞÞ×ÔØØÃÐÊÈÂ·œÈÂÂº²¥ŽÙ¡²·£»ÔÕŽ¡²ºÄ€»ÜàÝÝåäâØÆ§mcc€¡ÁŽ»¥º°º|ª­±šÆLszt®£š§¬¬ª¡z
+~xu~llštOM;Umgk~œ£££youo|htvux|xsEYS9\ohpxv}y~|@d|yuzux}|IWtg2`N~y
+
+
+y~}z|}yxzqLHfAQszzz||xv®±œª~iikkmqtWVttsooquztqy~~vogff§€£ÊÑËÇÆÆÊÂÃÄÆÄÂÇÄx£~~k`|`i²ŸÂ»ÊÆ Ð×Õ×ØÜÛÜÛÛÛÜÜÞÞÜÝÞÞº}ÌÃ|®zu~VYbgoqsmh__^ZV§¥ª§š§§š¥££š€¡€¡€¡¥²Ÿ·ÂÌÐÐÓÑÎÎÌÃÃŸŽŽµ±£§°·ŸÇÓÂ~sgVQf
+x|y\kuvW~_sxšh^t~ŽÛÞÛÝÝÎÕÕÔØÕÓÓÙ×ÎÏËÕáâÜÕÏÑÕÊÌÇÇÁ¿·ÇÇ¿Ÿ»£ §¡¹Õš­¥·ÇÁ§µÕÈÕáâàáÞÇ¬vd_m£¹®­¡º©Äp¡²­£ÃVqzt
+ 
+š©š©€tv®€|}z~Ž©l^QSio¹€}x~}xftuptxvmH[R7\pmox|xx}7m}~|~y}}xFZto4\V~zx~
+~
+
+}y}~|}vuumJLgFRsyyz|vvvš®¹€~mbimqsoW_mpspmqtzqvy|~|
+
+tmggbš£ÈÑÊÌÆÆÄŸÄÄÂÄÈÄÁxu~¡€££ xhf~ ©
+}¡¿ÁÁÂË¿¡ÐØÙØÛØÛÜÙÜÜÜÜÜÜÜÜÞà»ËÄy¶ª£zOQNWcksystkbVQ|§¥š¥š¥£©£€€¥££€    £©²²±ÂÏÔÊÇÆÇÏÐÂŸ±§²¥­±œÄÈÓ²ukg\dv|}xyl[fh}L
+v¡YcÓáÛÙÝÜ×ÐÓÙÙÕØÑÕ×ÎÎÄÔààÛËÄÇËÊÔÌÆÂÁºÊÈÇÁ¶©§¿Ô€š 
+¬×ààáÞàÕÆ²R`¥¶º·š·° Ä¡h·­Ä¡Yiz­­ ux©_d}thovvxy|ÈÂ~|WW^sŽ z
+£®pvtttqpF\V5Vvkmxvx~z?cy||zu}yJUsm9[V}x}
+
+}~
+~|uxxoQIfFMsx|y||­°¹­}pgimoupR\posuqmq~qvvz~~~
+~~qkphb§§ËÎÎÎÊÆÃÄÁÃÃÃÂÃÁ~U€ šª¡}ª±º©©ÃŸÂÃÈŸÎØÕÕÙÜÛÙÛÙÛÛÙÙÛÜÜÝÙ¹|ËÄv¶©u~xYUOU_kuzyypkfUz§©§¬¥ªª€¥€¥£š©€£¡¡    £§­±¹ÁÇœ»»Ÿ°±¬±€¡©µ¹ÁÏËpp\LVm~zoq\\xuQx|yiWf
+ÈáÝÙ×ÜØÕÓ×ÞÜÕ×ÐÛÏÈÓÌÞááØ»¿ÈÃÇÏËÌÇÊ¶ÇÈÂ··¡¬€£µÑ~
+qiz¹Ê»ÑáÝáÞàÝäÞØ·xU[€§œ¹±µ·Æ¬hºŽÄ®cb ~uz­¬ ¬¥£zpuk[to
+¬²[Lf}¥¡ªºvo€ ®¹Ÿ±šlssqtshLgV7Uskktxz|zz8cyv||sy}QUts=^Q}v
+
+
+
+|}~
+zzvoOOf=Otzy~~zv©²Ÿ¬~}mhhplqqU\uspslsqzmuvvz~~}umifcš£ËÏÑËÇÄÁÇÄÆÇÆÃÃÁ¬k €¬ œ°¹Á¶¿¿ÊÃÑ×ÔÙÕ×Õ×ÙÙØÙÙ×ÕÙÙØØºyÈ¿®¡q`^\UYWYckkc`\SRO¬§©ªš€¥š¥££€¥§¥ £¡¡£¡ªªŽ¬¥©­¬š¡§©pkx¬¿ÄºÈÂtidd`o|uplxWWd_yyYpzÝàÙÙØÕ×ÓÏÑáØÔØÏØÓÈÐÏÝáÜÓœÂÈ»ËÑÊËÑÌœÌÆŸŽ¬ ¥©€¡œÐyh_||k~ÂÜÙÛ×ÔáâáâáåÆS\p µµºœÂµi·±ª»µp\§¥|mvztz©±ª ­¬š£€yftofxzszÙ `k€°œÁÂlp©¬§²¥u§uxqsquqA\Y2Qustux}y}|@hyv|~u}~zUQvs9`N
+z
+
+
+~|}}}}~~y~sRLcBMq}y~zy~vª°¿¬}mdoolqt\Yqqqquotzsszxz~
+~
+vkigb©¥¡ÇËÐÊÃÂÇÄÂÄÆÃÆÆœœ
+~š®µ®¿¿ÆÂÐØÕ××ÓÓÓÕØØØ×ÕÕØØ×Ø¹}Ê»
+
+±
+p^\g[\[VVURJH=A<By§§¬§š©š©§§§€©§¡  ¡££€¡¡ Ž¹µ­¥t@J_mu²ÊÇŸ¶zsmhizztqhco`
+Eh©|Vkz¥ÛÜ×ÓÙØÕÓÓÏØ×ÔÑÓ×ÔÇÔÑÕÞÙ×ÈÈÇ¿ÆÏÑËÓÑÄÈÁŽ¶¶ ª©§£œÐst~xÄàÊ­©ºÐÜÜáäæá§i^dª®±±ª¶q°š®±¿ºy` ªx}q­¬£€££®
+tq
+|mqhlk²uop§­­ÁÃÆÄsk§ ·tttptpmF^V4Vtqmux}||xA[x}z}ty~RNsh4`I~
+
+|}}xsyqNMdENu~zz|­ŽÁ¬
+tmmioqp[Yommqooozquyuv|~}sklkg¥ª ÈÎÎÌÆÄÃÁÄÇÄÁÃÂÃ¿±}mzvluo| ¬ªœÁÆŸÎÔÔÓÙÓÐÏÕÔÕÔ×ØÔÕÔÕÔºÂœªi\``YWUQNADFA?EAD}§§š§¥€€§¡€¥¥¥€¥     ªšxz~pqzE28Zi|ÈÌºšvtbM[x}vt}duubss=t šfulÂÞÜ×ÕÓÕ×ÕÔÐÛØØÔÑÏÑÄÑÌÛÝÙÙÑËÆÄÃÂÏÑÐÈ¹Ïºš­®¡§§ŸÐ~
+
+|
+}ÆÞÐ€µÌØÛáåæé»
+fky¡º°§§¥¥µ~o°²ª·qµœS­|uym¥¥¥°¬§°mzluy~~qloxµ»­»ÆÄœso~ ¬©ŸqsmqztiFZV7[vqmvzy|tAWy}z}qx
+|NQtl=`H
+~
+}xy}
+||vsNLdFJp~}}|u~°²Â­
+~ohloosqYZpqpqtosxtzuuv
+}}
+slhib£ª ÇÑÐÎÇÆÂÆÃÄÃÄÄÇÃÁœš}}iœ€š¬¿»ÄÂÈÓÓÐÕÐÓÏÑÑÓÑÓÑÓÕÔÓÓ·Á¹~šyibYY[Y\VMDI@BE@EJ©€ªš§§§¥©£¡ ¡š¡
+¡€££££uuxoqbku^`BQi·Ê°|slUZ
+yv|`f~W
+lW§
+Y~fÁ¹¹ÈÈŸ¿¿Â»ÄÎËÈËÄÆ¿µÈÄØÕÔÓËÈÆÈÈÈÎÓÊÐÆÏÌÄ¹²š©©©¡ ¿×zsl}zyz~ÌâÏ²š»µœÆÜÛååà©oqiš£Ç°Ž£§»dª»·mŽÂS²°¬€vptq`m£©¬©§£}pu^osvlqbipt\Ç§·Ž®¿Æœ­¥  µ²­ª¿uuppppmE_c;Vzqiuz~x@Mtyx|tyVOpo;`Fz~
+
+
+
+|}~}|zxQNdHJpzt|®®Ã­ ~phkkostZUqsmpqsq}mvyy}
+}
+
+}
+mkigf§¬¡ÇÓÎÊÈÆÃÄÆÂÁÆÂÁÃÂÂ±l¹º¶¥±Ÿ»Ã¿ÆÑÎÐÏÎÓÏÐÎÑÏÓÐÌÌÎÏÏ²}ºŽ}£~xmh\UU[fZRIFAB@JSNššššš§§§§£¡¡¡¡§
+ £¡£ zi^upb^tf^stov}uzg_l£­ ©£}td\hzzxmcz`Zf}£}b[sz§·ª ºŸŽ¶­®šµÂ¶²ºº»­ œÁÁ·œœ¹ŽÆ¿¿ÌÓÎÇÈ·ÃÊÆÁŸ¥ ©¿Õqo~olyuztozqt¥¶Æµ¡©°»µÙæèÇkZš¶·œ€²µg§»»s¬ŸOŽŽ²£go}gguu¬Ž €£l\
+xu~p|c£š»ÆÁŸ² š¿¶ºŸœŸŽ®ÂtuopssmI[Y4Rytlvx~}z=Os|~ty}YJpl4\I}
+
+
+}x|~y}vuQFdDEpzx®®Ã­oifsuoq\Voqmptqpzqtux|}
+
+}~}
+mkhd` ¬ÃÎËËÇÇÊÊÄÄÇÃÄÃÃÃŸµ®©
+
+ª£€²º»œºÂÎËÎÏÏÎÐÑÌÎÌËÎËÌÌËÏº~·¶¥~u|}qi[^^fifVRJQSVYZZš¬£ššš§££§š§£ª€¥¡£ €¥t__plbccldmfv¡©­~p`WI
+|q|^mmLxz
+£¡
+zWipÊØÐËÁÊÊÏÂÈÂ¿ÁÇÈÄÈÆÄÂÆ»¶ÁÆÇ¿šµ®š¹Ÿœ»°¥§·µ²© ¥ª£ÁÔsfvpuvmutsukx¡£¬¡¶äåèŽuZtx¥ ®Ÿ·¡¶°©`¹·~¹Lº·© §¥
+ib_o|~§®­ qf
+qot¬·¶ÂÇÄº²£¬Ÿ¶œ»¿º¶®ÃvtmvumgE`^3QummuxzsyyELv|v~y|
+`LolA[Jz
+
+~
+}|~}}||vqVJhHIpz|­²ÃŽ
+}oilmqoq^Wmmpupqt}szuxy
+
+
+mmmhd¡ªÈÐÐÌÇËÈÆÆÇÄÇÃÆÃÇŸŽ®€}
+tztcYNSqcy ¶ŸŸ»¹ŸÊËÈËÇËÎÊÇÆÈÆÈÄÈÇÈÄµ}º±ª
+|xlfbdkhb[\VQRW[[d
+š¥§§©©š¡§£¡¥§££  ¡  £€tb_~ovyq|gcu|~©¬¬¬®|vfUWyg|~lduoO
+x¥o^hy©ÜáÛÔÈÈËÐÐÝ×ÈÏÈÓÈÇÑÎÇÄÁË×ÌÌÄŽ¶®š°Ž ±Ž²ª £§£€Ÿ²£€¿Ñ|~qv|stqzvpv®¥¡®©Áœœàæéå®flk§²±§Ž¥¬¶g°²·N
+º¿µª£­tqfohys¬·²ªu~¥¬tshgl§ŽŸ²ÄÄŸ¹Ž¡©œ¹¿Âº¿µ­ÂtstttklB\\2Vsqoytvu~yFSz}u|u|`Ssk;UD~}~z|}
+
+|||yzlYHbLAs
+}ª°Ã°ohkpptv_\smsmpqs}uvysv~
+
+}~
+pokkdšÇÓÏÏÊÆÊÈËÃÈÇÊÄÄÃ¿µ­¡pq~
+vop£ºº¹µ¹ÂÆÈÄÊÈÈÇÊÇÃÆÆÇÃÄÄÈÇ¶~¶­}£vsm`WVYYQVWUWY\\gg
+¥§¥¥€€¥¥§¥€š¥§¡  £€ € ~v
+vs}®±± ¬§£
+}oZhyqYyv}b
+\g€
+bc}ÄÞÝÜÜÕÐÔÓÓ×Û×ÛÏ×Ñ×ÕÑÇÌÊ×ÜÙÔÇÃŸ·º¿¶°°ÃÄÈºŽ®µ£­¬©¿Îstpxtdu}§®§£Â¶»áéé¶mkt©­®·¬ª©·o¶©Ÿ¬S|·Ã¿¶­­€vl^ho`}¥® ŽÁ·µh`b pl ÁÃ»º·±šº»Â¿ºÂ°­Ävqptymh?b[7Qxystszu|u<Wzxtxmu~WOvo4SF}}}y|~
+|z~}||}t[F_IDs
+~|¬°Â·phkmoou_Zmqqtqut}mtyzx~~skid_©ÇÕÐÎÇÈÈÆÇÆÆÄÈÆÃÄÁŽ­}~x
+zfUNW~©Áœ¿·µ»ÃÆÆÈÆÇÄŸÁÂÃ¿ÄÁÂÄÄÇŽ
+®­¥~smbRNQLHIILMOSRZch£¥š§ §€¡£ ¡¥¥§¡
+ ¡££   q®­­š±š€¡~qUk
+xvU|xmF}£sbpkšÕàÜÜÛÛÔÐÐÔÔÕÛÛÕ×ÔÔÑÐÃÕÆÙâÙØËÁÂÆÇÄÇÂ·»¿ËÆÈÁÄ¥§§£ ŸÈm
+
+±©ŽÄèéåÂt[tq§¡­²»€µ¿y·°€ÊªZ|ºÈÁÌºŽªuY| £°º°°špu}yuxš¬§µ±¬ªŸ»·Ÿ»œ±°¿sstoxpiB_\5Ryvsvsyzzt8Y}yz}qpzZIvs<UE}
+
+z~x|
+~|~}|y~u^AZHDq}®¶Ãµ 
+qhflptu^Ylpsqttszsvtzv}
+vgidc­ÃÑÎÌÇÊÈÇÄÆÃÄÈÇÆÇÁ¶°¡}}z||p^`gq€²ŸŸºŽŽ»ÁœÁÂÆÂÃ¿ŸÆÂÁÁŸÁÃÁÂµ±²€xvxyxui\YHB=@@@@FJJFMW`¡§©©€¥£ €§€£§€£¡¡£ghgv||~®¬ €¬® pNhuU|i}}O
+¥
+^\b}·ÕáÝØÝÙÓÑÑÐÓÕØÑËÕÓÕÓÑÌØÐÛáÛØËÃËÊÆÂºÃÃµºÄÑÊÁ»¡€¥£ ÃÆvšŽ¬­¬ŽÈ¹€}||œÆÔæèêéå±qdtš¡»¶©²µqŽ¡š·¿¶bm¹ÆŽ¿°¶±vµ»š­l`^\YZ[ZZbfx
+}plgpx~phmyyokiikt
+¬±Ÿuqqpxlk9Zb=Rzxsxsux|vId||xysq~|ZJvvES@~t
+
+|z}|
+~|y~v\B\LDm®±Ã· olimktybRiputmtt|muuxu~~
+qlhddªÃÏÐÏÈÎÊÈÆÆÊÆÆÂÇÂÂ¶ŽŽuuux|²¹ªŸœœº±®»ÁºœÃÁœÁÃÁÂ¿¹ºœº¹œÂ±}¶­vusutmgWVJHAFIDEDDFHJNU~¥¥š§¥€€€€ ¥¡££š ¡  ^HEQiszso^ffgtx|||ª©§
+tUcz}y
+~\vitY~QkyÃÔàÜÜÜÜ×ÑÐÐÓÑÝáØØÑÑÕÐÊÐÌÙÜÛ×ÐÓÐÂ»¹²ÂÌÆ¹ÃÄÇÇÁš¥¥  ¡»Ïxu
+
+  ±Ÿ¥§ÌÁµ v²ÌÜèéåÕÌs£»²²®ªk±£°·¹hkŽŸÁµ­­ª­±Ž°§§YRZ[ZY^dgqx}tpv~xu§
+tf_cgq¬µœoxossfk7\b9Rtxtssuv|zHRzyyvpv~~`LzyHWHv~s|
+z}|~}~~||u`DZJFl­µÄµ mkmiout[Ulstqquozqvtsv|
+slhgd­ÆÐÐÌÊÇÈÈÊÄÈËÇÆÃÄŸ·Ð×
+qppoox
+¬ºÁœœ¶²µµ»»»ŸºŸºŸœŸŸœºººœÁÂŽ±ª£   £¡¥ £§§¡ €¥¡€¡¡¡  €¡£H=BYYkicM[R\W__oti£ª
+tYfl~xhl|gkliW`zÇÓÝÞÜÝÜÕÔÎÏÓÐÝâÕÔÌÑÕÐÈÛËÙÞÛ×ØÕÏœœŽ²ŸÆœ±ÇÇËÆµ¡¥§   ÁÊogoik~~ ©Î£Ž|vo
+©ªÄàèæâÆ¹€pol  ŽÁœª© ¥b£¬¶
+·»p`¬Â¿º·µ 
+°»ŽŽ\W[_[Y^cgo~zttu£€~stšvccbhy©ŽÁmttmphhB`d;F|zvutuvzLMxxyztv~^JztD[D}z~
+
+x|x}}
+z||u_=\OBl°®Ä¶¥phkkoso_Zqtqpoppzovxxz
+
+yqigb­ÄÑÑÎÊÇÇÈÈÄÊÆÊÆÈÄÃµÔò¬|lhifmvy}pi\gbkœº¿Ÿ»²®µ¿¿œ»Áœ·»º»»Ÿœ¹ºœºŸ²}Žª
+¶ÏÕÛÝÝáÛÔÇ¹µ¹­šªª©š¬ª€§©£ €š¥¥§¥ ¡ €§££ ¡¡
+
+yvd[hfq[ZLdsivs¥u^bgsy}c|
+kfy}U`ªœËÕÛÛØØÜØÓÑÓÕÑÝáÕÙÔÏ×ÕËÔÇÙáÙÔÔÜÎÁÎÆÁœÇÆ»ÌÃÃÌ»€£š¡¡¿Ïxfippp©€£ ±»©©··¡£­Á¿œÈ»¥qyd€­Ç¹­® ±h µ»±¶y^šÈ¿Ã¿¹®qt¶¹­¥·_[bY\_d_hp~ztxv€uq~¡qhclmušµœquopohm?[g<JzxyyxsvzUDyz|uv~_H}|JWIvvv}
+zz}}|y}y||u_B_QFs
+ª°Ãœ qlhiptqcWsssqstq
+|outpx~
+
+yoibb±ÃÐÎÌÊÊËÈÊÈÈÈÈÄÄÇÂÎöåzxog`\`fVSNEBL~±»¿¿¿Ÿº±°··¹œÁÁ¿»»œœœººŸ»»¿¿°Žª·ÏÓÛÝÞÞØÌÁŽªš©¡¥šš¡¥§£€€¥££ ££ ¡£
+}~z\l^v}~
+~
+|bWlip}}Z~xV~~
+iV_ µÄÕÞÞØØÜØÓÐÓØØÛØÙØÔÏÕÛÌÏÌÙàÛÕ××ÓÐÐÈÇÐŸœÆÇŸ¿Ä¬šš€¡£ÄËt_Sivx£°š££¿È¡¬§~~ ¡­¬¬¬¹¶lks£ÇŽ°­²v¶¹°ÃS¥ÃÆÁ»±ªmY£±²µZZ_W\bfgqq}|xtz£ªxo£yplkpvšº¿vsqotfk@_h;U
+uyxyst|yHBouvztt|~_DzuIYItyzy
+}|}|
+zzz|y`BcQ@l
+
+­®¿¹thmllqu^Vqousspq~ouxyz
+
+
+zupgc±ÄÐÔËÊËÊËÆÇÇÇÄÄÆÄ£ŽóöàuoolsdN9"<\ÃÞÂÁŸœŸ·­°µŸŸºººº»œŸ¹·»Ÿº»¹ºœŽ­ª€¬Ž²·ŸŸ¶·¬
+
+}spqstylgi£šš€š£¡£€£¡©š£ €~m~tmuhvosz~t|}oS`h`tpdl|czuU^kq¶ÊÓÛÛÕÕ×ØÓÓ×ØØÜÝØØÑÕÐÕÎÓËÙÞÝØÛÕÑÇÊÊÇÎÈË¹ÈÆÄÁ°¬ª£¡¡ÃÃYmqqu¥ §¡§§Ž¡z±ØÂ²ÇÊ®t\^º»®§€µ
+»º­°¿Q¥ÂÃ¿»ŽdU§œ¹€²µ\__b[b`hou}~quv€­|u xskogu©»Ákookobk@^k;Mtvuxtx~yJDsvz}tv~^@xvEVAu}}y|~~xvz}}}}~|c?^OAg
+
+²®ÄŸ¡thmlmtt^Uqpqsqpqotu|z~
+
+
+|}zoqgc±ÂÓÔÑËËÊÇÇÈÊÇÈÈ²xâõñéÂx|ztkZb¡êåÁ»Ÿ¿Ÿ¹°±µŸ¹¹»œ¿œŸŸ¿¿œ¹º¹º»¹±~°©}}icfbcilfhdhstut €€§£¥š£€ ¡£¡£¥  _qgy zvy}zllmspu~xs}ycYhfpyomcz€mNixz¶Ì×àÙÓÓØÛÓÕØ×ÕØá×ØÓÕÐÓËÐË×âÝ×ÕØÑÑËÎÇÌÃÃ»Ê¿»Áµ©§ €¡Ç¿bgqom°¬Ÿ­£¡·µ xvu£ŽªySY|©œ®§­µxÁ°·­ÆQ Á¿º»­}ff§»·¥²_d^`b^cclv|xsy¥š
+xt£tplpsv©¶ºqsphpfi8Zm=M}uzuyvx}}M=mpzxuv}[FzvFS?u}|y
+~~~yvu|~~||}z`?ZOEg®ªÁº¡qhmopptdVmssppqv}mstvy}
+xolid°ÄÔÎÎËÈÊÈÊÊÇÆŸ£}~vp¹ñóîêØªz~~~s`kxØûêµ»Â¿œ»­®²»ŸÂ¿œÂ¿Ÿ¿œŸœ»Ÿ¶»œœ®|Žš¡¥€€£§¥§€£€§€ €€š£¡ zŽmzzYm||u
+u~ihzyVYcuv~
+yY|oR_k²ÌÙÜÝÕÙÝ×ÕÙÙ×ØàÞÛÔÐÛÕÐÊÏÄØâÜÙØØÓÕØÊÆ¿œŸªÆËË¹·©š €€ÆÄk\fbcu} ÂŸº¥¹Ð°Ã»œšÏ§ut
+ukYs¡¥»¶µ±¬pœ¡¹§Ä¡VšŸœ»·ªs[sz¶}²^`[^[_bips
+|usvª¬vuxsoos}€·Âsuqksgg@WfAL~zyuuv|zxQ?kuttpq}}_B|yLSDv
+
+~~
+
+|qm~}xtd<^ODg
+®­Ã»¡ykmlpvp^Vqplqqouqtvuy
+
+ukigf¬ÆÐÎÏÇÌÊËÈÈÃ²y||vppvÔïííæäÊoo^UfÓõüêª ­œ¿ŸŽ±¶¿ÁŸŸŸœÂÂ¿ŸœŸŸº¹ºœœ¬z¬¬š­·ºŸÁÂÄ¿µ°š¡  £££¡ §¥§¡¥£€£€¥€¡¡  ®¬£~~vWs
+}gNVld|}_ziSc}ŽÈØÝÝÛÛáÙÑØÜÔÕáàÜÕÓÛÕËÇÑÈØÞÝÙÜÔÎÄÑÏ×ÓÓ¹±ÈÆŸÁŽ¡¥ª¬¡¡ ÈÂWV\ciszš±ŽŽ­§ÃÁš²² µÁ
+®hu©§|_bªªµ¹ šm¹©¹€Á¥Y­»»œº¥c`tz©µ¬­±
+\c`c^^gfls}€xus€zyypqopzš»Ãuuthocg?Zg=N}utxtxz}|W5pxxxuty|`BxuDQDt
+|y
+|||vq}yxy}u_F^V=g|¬®ÃŸ¡thoqops^Jmspqsosptxxy
+
+
+}ukoic±ÆÐÓÑÏËÌËËº£udyxtkmcäîíéèéÝ©mMNÕëöþá£€­ŽµŽ·ŸœÁŸ¿ÁÃÆÃŸŸÂ»ÁŸ»ºº°~°±Ž·ŸÁÂÌËÊÃº²±§¥¡¡¥€£€¡  €¡£¡§§€š€© €¡£ €   ¥¬š¬ª¬¥¥¥£t}d
+zxdJ^`p
+d}|Z^g }¶ÊÓÜÞÝÝÞ×ÔÕÕÑ×ÙÜÙÙÕÙØÏÎÏÃÕÞØÕ×ÔÓºÊÑÓÎÆÊºÇ¿ÂÁÁš šš€¡ÃœYQB[^sŸ¶ui luz€ £p|š¡
+dY®®œ¹µm©¬¹©»¡R¹¿œ±¡zVguµ±¬ŽŽy_^`c_bfkot| ~zxx¡šyx~|tqqs|¬ºÂptqhsfg<VfAMxspttpuztR5uy|vpoz}h@txIFAs|~~
+
+|
+
+~||zz~zyzzy\D_UBh
+­­Âœ¥ qfkmostcRmqpsqutotzx|
+}vqphc­ÄÔÓÐÎÎÆº£~f_uvutid[œêëêêêêâ­@[­åûøüâ§¡¡¬·ŸÁÂ¿ÁÂÃÄÆÂÁŸŸœœººº®|°Žµ¹ÁÇÃËÊÊÃœŽš££
+¥£¥€¥§¥¡ ¥š€£ ¬µ²·ª¡€¬¹°§§~|ª
+}tWJbs}WpZ_g||µÊØÝÞÜÕØÛÕÛÙÔÕÕÜÔÓÐØÙÐÈÎÈÔÜÙÛÙ×ÕÄÆÈÌÌÊÇŽÇ²Žº»š£¬¬¥Ê·U9BQRk}¶s um^vf
+}zvsVd©œº¬Žª­ Ÿ¥SºÇ·£h_y€µºœ¶°€xdfbc`blosv
+~|t|
+€­}}£zzuspy¥¹Ÿotqlqfh8SdAFztmsqyz|tW7tzxtssy}f<svNHBm~||}}
+
+
+|zz~vx}|~|yy~}tb<`U;mª°ÄŸ¡£tgippppfQlssqsos~pyxyy~
+~vmiid²ÈØÑÄ¶©¡th\\lloki^W}Ùêéííê¹V5DHä÷ûå}€ ¥¶ÂÁÃÂÄÃÁÃÄÄÄÁÁ¿¿»œ»¬y~ €©€ }z|~|~~~¥©€£¡¥£€¡¡€¥ ¡¡ š¶ºµ¥¡²Â±¥§
+
+yy}~xfDYqxvsgyZbg|µÌÕÛØØÛÕ×ÔÔÕÐÓÐÕÓÕÐÛÓÎÈÏËØàÝÜÕÕØÔÐ»ŸÈÎÃ²Æœ±Ž°€©¥£  Ç±QEIQhuy§ €­|~sYN^kyt
+m~bc€µººª­­§£²£[¿»¡xVb
+Ž»œŸ±¬ªv_b^fbfklp|~|uyš°|xtut|§Ÿœvsshqgd9Qi@Q}yssmtxyvU4ut}zsqxyb<vtQOHuz
+|}|yyy}z~y|xzv
+~|pc=`V@b¬±Ã»€sdlopsqbWopqsqtp|tsxxx}
+
+upigc°Ä¿ qdRSZiifgiYZY®åéëíÃA%/8BBñþâux¡©ŽÁÃ¿ÂÇÁÄÆÈ¿¿ÁŸ»Ÿ»Ž¡ª°±µ±°š   ££¡¡€€¡¥¡¡¥¥€£§¡£ £¥¥§¡ ª²©¥€»®§£¬|z
+
+z}uMF\suk
+fVclyµÎÔÛÝÓÕ××ÏÔÓÎÐÓÐÑØÏÙÔÏËÎÇÛÝÝÛ×ÔÛÕÑ¿ÆÆÆÄÂÎÊÄŽ® °ª€Ì²`S`zb_dbÃÎ§ lcxzziMMVtgfmy±lby¡§Ÿ¹š €¹§£­£^Â»£shq²¿ÁŸŽ¬­v^ccb_`douv
+zx|
+§­||
+}pqttz§ºÁvuqgulf9Nh=O}xmppszxxO8zzyyvqxzbDxqQRFovy
+ux}v|~|yzz}}yv~vd<^VBd
+}¬²ÆŸ¡ukkmootfUqqutqkm~|ktxzx~}tkmlµtdYSQ^bihkdYYVtÔêîÈg%.2VUÌþÓkxxuz€±¶ÁÆÇÂÄÄÃÁŸ¿»¿»º±¶ºŸÆÊËÎÑÐÂ¹®©§€¥¥š§§§£¥š€€§š£¥¥¥€¥¥§¥¥¡€§¥ ¥¡€£|ko}€¡°·±¥s
+x|z`QLmxfzU[hzxœÆÕÛÜÕÕÕÙÔØ×ÓÕÕØ×ÕÑÔÓÎÎÊÇÛÜÙÝØÓØØÔºÂÇÎÊÁÏŸº¹¹¬š¬š ¥Æ®t~g
+qÄÌbclty~}x_zksq`l uhq²Ž}bc£»¶©šÁ °¶­¶kœÄ¬~fpœÆÂÁ²¬ªtcghfcfkksu~zxx
+€®xy|vtstx€ŸŸuuqmth`5OlAIxqmouuxtpQ7vxuxxpxx`;ttOLHoy
+|tv|~~
+~vy|}~}xu}xsb<[V@d}­­¿¿~qiipmosdVoossuos}vhqt||
+|vtml£p[QNIEYhfkf^YUSQæÛWM|#YîÈgv|sptz~  ­ÆÇÃÁÃÂÁÁºœÁ¹·¹œÇÊÌÌÐÓÑÆ»²­ªª­®§¬§©§€š§§©€¡€šš€£§¥š¡ €€££¡£¡€
+ q¡
+¥²¶¶ªg|x
+z|sfSZquhmO[fyyµÈÑÙ×ÓÕÕÙÑÔ×ÑÙÜÙ××ÏÔÓÔÊÌÃÕÜØÙÕÑÙÙÙÌÎÄÊÄÂÈÁ»œ®©œ©š€È­f~~||}x¥fUiz|s|
+xvZh|€¹xk|gf¬Ž²§Á­¥ººœx¹Žqk}ºÂÂ¿Ž®§s_cbbhghisy
+|yyz
+£š}xttss|£¿œutumtqi?Jd?FtpmsotqplN0tzuytou~gAuyLQDo}~xzxx|}}|}z|y}xq~}y`9[U@d
+
+}­©ÂŸ |skhhmptbRqlsvqst~|msxz|~
+
+}|tqx~
+p[OLEED^mcg`YYYWOlÄ®N­"SªºÈ§dspxymlosv~ŽÄÄÇÄÃÁœœÁº»ŸÂÄÂËÎÔÔÔÎÊÁ·®ªª­­¬©ªª§š¡€££§¥€¥š©€¥š ¥¡¡¡¡¥¡€£ zx~q|}x š²µ²Ž_
+
+zy|yuzgQYctiYbm€|ºÇÔÓÏÏØ×ØÔÙÕ×ØÝÙØÙØÞÝÕÔÔÇÕàààÝØÞàâÜÑÐÂŸÃÄÂœœ·µº®ª£Ë©mssvgmtqfNz}gu`\cs|
+zuµ·ª²°}zW_¡±± ¥°¡ŸŸÁ
+Žxfk¿Ÿ»¿¹°ªq`ccggdimsx
+~xtz£¬~~~xqsv|šÁ¿utxispi;JcBDstlsupsvpO/pyvvsqux_?|zLEFl~}y
+v}yv~|}uy}}ztt|x`7\Z@byš¬ÃŸ£sdimppsgVippsout|ouvu||
+~|xsmgq
+
+yo\OJHH?EHONVWVUSSLO£¬€`"2Ôáâ¬Zstot}uqtpssx}xŸÇÆÃ¿¿¿»¹·¹¹¿ÆÇËËÔÕÔÏÊœ±®¬ª®±°°­§€ššš©š©£¥£€š€€¥£€¥£€ ¡€€¥¥¡¥¥bUxz©Ž·µtp
+|}zz~fYOc~~s^sy¹ËÐÇÃ¿ÐÓÈÂÈÌÏËÓÏÊÏÄÔÑÎÊÐÇÕäääàÛáåàÜÌÇ¹Á¬¿²Ÿœ°®ª®ª¡€¥Ê¬qqvtm`gqxZNl}pdhW}~ tvo®²ÁÞÏš­ÊlQš­°š°¥°¶Æ¬xx§»Ÿœ»¹±§o^fcggfgkqu}|x}£§
+x}~vsuvy£Ÿ¿}sqltoh@DdBBsvhmspps|W'msqsvlpzl=tyQFLh
+|~|uy|||}vv}|vtqv|}f8[\;^}
+v¬ªÃÁ uklomopbRmxtqpqtlsxxz~
+~||}uoimfms~ucWLHM@DAMUOMIZ[YUVLJÈÊ°H"'yÃíò·Ntupss}zvysqsltqq~§ÈÆÄÃŸœ¿œŸ·¿¿ÁÇÈÏÑÓÓÓÇÆ»°°°²°®©¬©§§§§¥¥š¡£€£ €¡€¥€¡£©¡ ¥€£ou~
+ ¥¬·®hJ~
+xzyip^Qixgpc~
+~¹ÊÊµ¶°Â¹²±œŸŸÈØÐ¶ŸŽÁÃº·ÈÆ×àÛÕÓÔÛÕ×ÐÆËÃÃ·ÌŸ¿Æ¹²¶±§£€§Ì²mvgd^[gsh[kpxmydtt|¡ÁÜéäª¿ÝÃ
+Y¥µ§¥©°©µŸ ss~¥µ¥·»ÂÁ¶°©o^cgh`flotz
+v|vx }|~xmpx|£œºzqstuqfAEfJ?oslslpsxx^!qzxx|ou|k;ty\ELi~}|tzuz|y}tz}ztvsssuc5ZZ=^|~x¥ªÁ¿tgkllptdUsvtqtuq}}luvvz|~
+|xvsxsqmhb`h[ILHDIDBDLSOJYYRUVQNLhs»Óµ@('7ÜïœHmvxspqyxvtiqqmdsÆÊÆÂÂÁÁÁ¿»ŸŸ»ÂÏÐÑÔÓÓË¿µ±¬°°±²­®¬š¥§¥¥¥§€¥§š¥£¥¡ €§£€£ £ ¡  ~z
+¥œ¶`Ayxt~hYVi`ps
+}ŽÏÈºŽµŸµº­Á¿ÁÃÏÇ·°š¶Ÿ©šÆÎÕÔÔËÐÎÙÑÔÆœÁÎÂ¹ÄÊ¿ÃËÁ¿¶µ š¥¥Ä¬buqgfVIYupyiht
+dUxxyz||| ÎÊÃ¬ÂÂµob¥±¬€¹¥²Ã¥}u
+­±µª·¹œŸ·Ž£kbghfbdhksx~xyu £uy~umvsz¡º·uqtospmEDbIBstpzusptt\iz~s|txo3qxYDIiy}|~||syxzu|y|u|zxtzpou}xc8``?\x
+vš©ÂÂvkgpstvcRouuvpzu|qvvuz
+~|~|}mchmmg`^[\OJFJDBFHHMVUQYSQUVNEJRp­ÐÈD'&%oÃíÄ=gxyplsy~~zusqqpkbq·ÊÊÃÂÂŸÁ¹·»¿ÂÇÊÌÓÐ×ÌÇÁ¶°¬®²Ž²®±®š€§¡§¥€¥§¡£¡¡§¡€ ¥¡€¡¡£ ¥££}v¡ÃÁ¡Y`svs|}d\Wouvyz²ÈÈÃÁŸŸºµŽÃÄÁÈÕœŽŽšº¹¥²ËÏØ××ÕÔÔÛØ×ÄË×ØÃ»ÇŸ¶ÁÐ¿¶·¹€¥£¥Ê­Yfbmm^NW¥¶¹|}}p~ih[qyo
+¶±š€ªª}x€©°¥Ÿ¡ªŽŸ°zq|¥ÄŸŽ©¶»µº·°§k`dhfgifomvz|zv£zyxqtx}£»ŸvqusqsmEAiLHpussuvpsx_fzuvytu~p8lx^BOgx||~|x|~zqxvyxzv|vxy|ytvopvd;\YB[x
+ ©¬Ä¿ vkdpopogRmptvptsstyxz~
+
+}}z~~fY_khi_Y[WODEJHEEHFJMVSWW^[YUDEOtuµÈU'%c¹âÈL^|vzsmq}|vssopqqcp
+©ÈÇÃÃ»ŸŸ»¶»ÁÃÈÏÑÔÑÓÎÌÁ¶®©­°¶Ž¶¬¬ª¬ª£€¥¡¥©£¡£€ ¥£££££€£ ¥±®~qt|ÈÎ\|£vztx~zsiZOgiq
+xŽÄÎÁœµŸÁœœÌÆÆÏÕº²²°º·š²ÊÓÛÑÙ×ÕÔÙÕØÈËËÓÊ·ÃœœÃÃºœ¹·  €šÈ­kq|~xtdS¡ÇÛouvm_SRfc`m|š©Ÿ`£·§¬»š¶»»yz€¿ÃÆ¹¡»œµ¶Ž®¡k`bfg`dgkssz|y}
+§§y}yxyuvy
+¥ÂºvqukvviD?`LJsxpttspqu[
+f|stzxv~m7qxYBMfyy|~~}syvsuuyvy|}vttxyysqozu`8\`8Zv}~z|~u§©ÂŸ ¡¡
+skikmutdUsvtsqss~svvxy
+|}~dZbikf\VZWWBHINEFMLRZYYU_^\UOIJRoscÄJ%!*fÁ×ÁNOxxyqpx}}zvkfkthZo|ÃÄÁŸŸ¿»»Ÿ»¿ÁÊÆÎÏÑÑÎÇÂ¶­­­®¶¹¶±®¬š©š£¥§¥€š§š £€€£¡£¡¡~pggocfp~ÄÐšgy¬vuz
+iVWVkv­Ÿœº·®¿ÆÂœÌËÂÃÐÂ»Ç»Ÿ¹§©ÄÑÌÎËËÊËÈÈÎÄÎÏ×Ê¿È»ÁÆÇ·¬Ž¹€¥ššÌ®ubkk`bVZqkºµ°opRN`xhh}|yyz}§Ã\£§²ª±»­Ž»¥xŸÁŸ¿¿ ±Žµ±±®¥lfikcgfioqvxuyy€©x|toovz¡ÂœusyovplBA^JHsspsuzzuz`huxvztt}o7pycEVhz~vzxy
+svqtuzyxuuttxxsqs}p`9bb?[q}ysxlHB©¬ÆÁ¡xiklqqqgNoupsopszqxuzy
+
+}
+
+hffod_[V[ZYH9JIMHHRZY^^WU[ZZOJNQf|HtÄR%'"WÄÃ·_<pxztqv|~zlbgscQt|ÂÂÄÂœ¿œ»¹¹¿ÄËÊÎÐÔÕÓÊŸµ°±¬°¶¹¹¶¬ª©ªš¥š€ª£¥¥£¥€§ £§¡€¡¡vm[\ZMOVZS_fkx ÁÎÕÈyyzx|~|oROfvyu¡£¥§°¡šŸ¹±Ž°®²ÇŽª²±­££§ŸÃ±±¹²±ººµÂÁÌÌÑÂ±ÂÊÃÆŸ¶°®®§ªšÈ©yzs|WOclguZcÄ­¥Ê¿SISfdzsty}©¶Î×€ifª§­®ºœ®°s}§ÂÄÇÄ·°±µ°±¬gdhgfgbimt|
+}zxz££
+zx~
+~~usp} œºst|stsgH=^OEsvoqxvvmvc_syx|xxzm8s}\AWf~}u|yuuvuxzuztpyvvupslyzqf3^_?WsxxpudH9­ªÄÂ 
+|xghmpspiRmsqqulptuxxxy~}hihgb`[SVYVL;JBLAHN_ZZV^`SROOOMOW}VfŸV#!&NÄº­f9sz}yusmzp\_p^Jp|y¬ÃÃÃœº¹¹º·¿ÁÄÄËËÓÕÐÌ¿¹±­­­¶·¶µ±­­ª§©€§££€ ¥£¡££¥£¥¥ mYNg0;BFMWbmz­µœÂvxlv|u|~~yY_d }uª±¹©®ª¡¥¥£¥š¥©±š§€§©£±Ãº¹ÂÈËÏÈË·Ž¶¹±ÁÂ°±Á¹ª®¡ª±°¡©§©Ï§fvdydWc\m~~|o·¡ÁŸÄÆ|RW\cylp€µÓÞÓÏ°
+byšš±µŽ¿·ytl§œºÁÌÁ¥Ž²±²°®d^`gfcfgmqv|xty~z
+~vsqsx
+ º¿sszuytgH<\QDvzoltsuqu_bsxs}usym8mz`;Nf~|yx~vu~ssusu|xvsqxyutotp~p`/^`;JksxltkH9£šÄÃ¡
+yfikqtpiWqutosilyqsvxy
+~ofc^^YUYYZYL4HIF@DU^ZZZ[WHOVUYSOJpSSµW%'BÃ®£o,s|zystgtxc\o`Io|}§ÃÇÂŸœº¶¶¹ŸÄÂÈÎÑÓÑËÄœ¹²ª°°¹·¶º·°¬¥ª€ššš€¥€§§¡¥¥£¡£¥€mV7Ax
+fQHI_}
+tk}~}z|ux}vsIguŸ~ s·ÂÆŽ»»°¡¬Žµœ²¶º²°©šº»®·ÄºÊÐÏÎÔÓÓÈµŽ»¹ÄÃ©¥£§®¡²®¥°¬©Ì SQ[¿zYZd|
+}€Æsœ±VYU`mmxm¬ÈÜ×Ç¡pk²¬Ž®·|qs¡º·¿ÈÃ®Ž±µŽ°®fffb^fflmtsxxv|
+£|}zptpuxÁŸxqxsxvlFB`ODvqpyysx}c`vuuypquo5m|`9Vcxzyty|xu}zsvtyu|uuttuyttsol|zpf3WY;LltvsqhB4¥¬ÆÆ  yfgikqtkVovsoqoqxqquz|}qc___\SVWVYWQ9BRF=V[_Z[[ZSB?SR[YYNQM3¥^!#;Ÿ²€u8m}}yvzkku~hZi\LoxÇÃÂ¿¿¿¹·¹ÁÂÂÇÌÐÕÓÐÈ¿·°®­¬Ž¿œº¹­¬¬ªª§š£§¥€€£ ¡€£ £¡¥  ucW5JF|YLVYUW`hcs|}xzWfxÂtÁÏÊŸÂÃ¿²·œ¿œ¶ÂËÄÂ»±ÃŸ°·Ì¿ÔÞÜØÙÙÙÙÁ¹ÂºÄÁŽ§ š°¥¡±·­§§©ÎZZIt±kqkoŸ¹š±S[gbi~z
+t
+¥»ÃÁ§uVh€¥ª¬tx»¹»ÇÂ£
+µ²Ž®°®`fgidffkisx}vs~
+}yz
+~yytvv
+ŸºxtvoqtfB=[VBttovzpvbh|xuvotzu9k}d9Sdux}mtvytumqszuzxypsqupqksoy}mf3W^4QmsxmqdB9ª©Ã¿vmllstuhRostsvsp|
+ovzzy
+
+~k`ccgcZRRWYZWQ7=RIJ[[ULZZWFA/ISRUYUJ<
+R
+4œ°m@gyzpuvxqp~uNmOLqz¿ÄÃ¿º·¹·»¿ÄÂÊÌÎÑÓÌÇŸµ­­®±¹œÁÁŸ°®©ªšª§€§€©¥¥¡£¥¡€ €z[fSAE%y~VIFFEAAHMVdl~~usc^c­
+vºÎÏÁÆÁÄÁ»ÈÁ¹µÁÓÁÆÇÃÃ·­ŸÑÌ×áâÜØÜÝÜÔÈ¶ŽœÈÁÁÄœÂ­²¹°¬€®ÐªfkLb|cfhmh®Êœ­¥£¥ÛxLmsYzzusiou ¡§œ[V§¡xfx¬Ã¿·¹œšŽ¹¹µ±¬f\h`_ghfkp}|yvv|
+}x
+uspuy Á¶uuxpotdDB\REpttu}svk
+c|yvsxy@mzc<SSvt~uyvvsxxqpsys}uyutqtqsosltvqb/ZY5LltztpfE8©ªÃÄ¡vmlmpupkUlqtqvvu}uvsz|z
+uV\fhi`ZURSU\ZYO<8LQWUNMSZ[UH?48QQUVVW@
+p?
+&
+,­ŽiFb|uuy}xkv[iDJuzÃÃÆÁ°œ·œ¹ÁÂÆÇÑÏÐÕÎÇÂŽ±¬©²¶ÁÄÃ¿¶­®ª§¥š£š¡§§£  h_gOFO&EzoZQL@8?A?997HOl}yzyvkh£yºÐÏ¿ÇÌÊÁ¿ÃÂ¿ÄÏÓÃŸÄÆÁŸ°¿ÏÈÔÝÛÜÙÙàÓÌÊŽ©·ÊœÆÄ»¿Ÿ°¶­®§§ÌVZZ``OW\[šÁº²£š­Ùqv shizdi¡¶ºÕÃRY£pvª°ÆÆº¶µ©¹Ÿ¹²®Žbddfd`ckms|~}xuy|y
+vust|Á¹pmyuloiLE[M@s~qqv|tx|i
+g}|v}ouyu?kv`8O^ost|u}qxsqttx}}vuotmupviogmyp_.\b;RovusphE.§©Ã¿££zkikoptlQosttstsxsxy}~~
+~JF_f^ZW[VQNQQYYNB.EFDSDRSVWLFD@*LVYYV[V
+Z<
+!'±ZObyuqxzzqpvm7WyÂÂÃŸœœºº»ÁÁÇÇÌÐÓÓÐÌœŽ®¬ª²·œÂÄ¿¹­š€|
+q_`gQ=Q%"`
+z\FB?@B@7.!(4V0kxyzs~tyuq€|
+tÁÌÎÄÈÆËÄÃÈÌÊÇÊÐÆËÈÁÁŸ²ŸÓÂÊÕÛØààÝÔÃ¶Ã¶¶Á»ÄÊ¿ÁÁ®Ž®°€ÊbS\[[RWR[­€y±Ýµo€§¬¿±ªslÄ± µÏ­ÂÑÄªkY~
+om~¶»Á£ÄÇÈËŽš»»ÂºŽ²_ffffg_ippt||vzv|~~zppqsŸ·xovslsiNB\REqzusszty}kc}zy~pqzu=dxf/R[sy}u||zq|uooxy|zsttttxquophoulc2Uc@OpzuxqhL5ªªÃÁ¡ xfgpkopoWluossts|txz|}v+V`UWZ_\SQJQ[YUO?*@IUOMYWUF@FEA.0WWUW[d*J@#"!
+y§LNbv~xqmv|xzt![|
+ÇÄŸŸœ¿œ»Ÿ¿ÂÊÌÐÓÓÑÑÇ¿·¬©¬²®°·µŽ­¥||
+
+
+lc_V\H7L"@fcfYJBA@;<3*?JqŸµvSqoyxthYx yÃÌÈœŸ·Ÿ¶§­±ÂŽ»Ì²ÊËŸÂœµÄ×ÐÙÜÞÞÞ×Þ×ÑÎÓÔÓÏÊÑÏÎÎÁ¬©Ž²®ª¡€Ê¡}~zuyvpovu¥
+~z¬Ãšš²ŸÁ­ÞÎz¹£»Â®­ÑqklŽŽŽ¡pÂÆÆÊŽ¥»œº¹µµccgdgdchpuyytsz
+xx|~yusyu~º¹uptmoskRAWODo|uosutx
+l`|||~qu}vAc|k2QOqs|quyvv~vsosuuxvspkuvsuqtilssc5S`<OqxyxskM7©­ÆÁ£  |ifmppulVpvxuptp}
+szx~x~qMQZbgc\RLLRNUYZL<%2V\MY[UQEFNIJ<%DQSWU`Y=7!!
+"i@F`qy|ycmy||y~u
+_uÆÄÂ¿»œ»œ·œÁÁÄÄÈËÊÆÂ¿Ž­  £­®Ž·²­§~z|~}|~}mZ_VNJJ=/.98@;;9A=EB5'+BNB} ·ÄÑÕ°gU[u~z
+yhZ~xÃÎÈ»¶¿¶±°®±¶ª¹Õ²ÇÑÂÄÃ²ÂÓÓÛÕÔÑÓÔÓØÛÔ×ÝÙÕÕÕØ×ØÔÈÆ¶²­©§¡ÎÛÕÔØÔÕØ×ÕÐÑÏÎÏÎÆÃÎÜÎºÊÌÔÎÆ²ÄÄ±£±œ·ª©µ®€£­Ç·ªÑÑzk[gx¥¬¶ªªcºËÈÄ¹¡ÁŸœºŽŽgdgfdcdlmx~~yzv}|yy~~tsstv¹·tqtssthOAZV?fxtqtulto!\zzx|uxzzHbzg2MNqqxuxxuo|tomqsyuqpmmmumsmmkitqd4R^3Wpz}u}sNSš¬ÂÁ¡xkilsuuoUhtsuppq|vvzyz}zUUdhfVSJMOQSUVUL8"7WSS[YRLMORMOL9.NRYWbkf5%%
+h}+Nct~xt[dtu|zg0muÂŸº»¹µ±®­®®­Ž¹ºŸÆÇÆÄŸŽª¡£€€£¥£¡}|~~|~|~z
+xWNYQ<.EA7
+#3395597759.0583u©¹ÁÂÐÙ¶Q(9Vz~|s_~|y|ÄÎÌ»»œÃŸŸÂÆÄ·ÆÓ®ÆÎÊÇÁ·»ÏÏÕÌÈÄÊÄÇÇÌÂÆÌÐÆÈÊÌÑÎËÂ¿¶Ž§£€¡ÎÓÎÏÔÕÔÔÛØÙØÕÛÜÞàááàâàáàâáâáååäåâæéèâÝÜÜáàÞÜÛÝæ×slZu¥¥£Žš^ºÌÇÃ¶ ¿¿¿·®¬dficdhidmsxy|u|vvy
+~~tqxyµ¹uvxqsqdOD[R?ktsqquqq~l"[xvv|szzvE_zh.QMqsyvxttkxvvohqzytqlfluptikidqsd2Ud=Lt}~}|iq€ªÆÁ£¡
+umllqpqmYlqqsqtqzsu|z}
+
+sVbg`QJNYVRSQQRYJ8'=RZUUVHRSOSQMED#HUSOYk|7!
+
+_`
+L\p|xcOfuy|~RDml||¶¶¶¶°°¶°ŽŽ°¶»º¿ŸœºŽ¬€§|~|zp_VRZL7%%<A<35@=?<73/,*"
+0u­º¿ÆÓØ§'#7B
+uo_k~¡xÃÏÏ¿ÇÃÃÆ»Ã¿ÆÃÈÌ°ÊÐÇÊ¿·»ÏÏ×ÎÊÇÊÄÈÊÓÈÎÌÈÊÏÌÈÌÎÄ¹µ¶¶ª°š©ÌÆºœŸŸÁºŸŸ¿ŸºœŸŸÁ¿ÃÁÃ¿ÃÁÁÇÆËÈÊÈÌÑÌÏÎËËÌÓÐÓÓÕÕØÜÕ}~¡¥¬¥Ž¬V¬ÏÇÆÁ ÁÇÃœ²±``cdbdbhmqx}|zuvzy|}|
+|zqpuy¹¶qzvsqpfQ;WQEfuqppvpp|q!\}vv~yzyxMUyi,UIsvtusvsl|tsppqxuqtqlpossgmkisu`4Vb3St
+}p©ÁÂ£ vkmlxspoRdpustmpxxu}v~m`dZMLNO[ZQQMQUUF7%<QQRVORVUZSURIB3'QZORf,
+!bS!Qcyx_Ocvvz~~z.Wg`z~¿¿Ÿ¶¶­¥ €€€  ©±µ°­š¡   £ £€­šŽ²°
+xvt}~zz­pbWOZVF0%'2;<0789<72,'
+Q°ÈÌ[=N^uz~z}_ot\}
+~ x ÄÎÏÆÆÄÊÈ¿ÁÂÃÂÃÎ±ÆËÈÎÃ¶ÃÐÐÕÌÌÄÇÆÆÆÌÇÏÌÄÌÆËÏÐÎÇ·¹±µ±®®®ÏÁŸŸœ»œ»œŸœ»ŸŸ¿»»Â¿ŸÄÁÁ¿¿ÁÄÆ¿ÃŸÁÃÄÇÃÃÂÇÈÆºÂÃÁÄÆÊºx¡£¬§·°Z¥ÃÃÇ»¡ŸÃ¿»Ž°`bfb`_kiksuyvu||||}~|tpxzµ±mxtuqldO8ZS<csoqtvmp~l
+\yuuxx}ytHUyi%OMuvtptppmsqqomqzsqsmimqqumosbps`,O`9Lu
+o ¬ÃÂ£ 
+|mlkoqshYkstssqvzvvxyy
+
+
+g`WNRSYZSNSNOOVM92'@RNRLRVWUWWUJFID,EZUS`o%
+
+"#_BO^uyyRN^sxz|p.cZg~~
+ª²¹ŸÂÆÄÁ»°š ¥¥°ŽµŽ±­¬¡      ª±²§©° ~y~}z~²fFLL\bUL",#
+#%/07845/2##c
+°ÐEOQVuy|\Zpocq|x ÄÑÏ¿œœÇÆ¿¿ÆÄÁÐÔ»ËËËÌÇ¶ÁÓÌÐÃÄ·ÁÂÇÂÇÈÈÎÈÃÁÏÆÌËÁŽ¶µ¶®­­±ÏÂœ¹»ÁœŸœŸœÁœ»ÁÂÃÃÄŸÁÁ»Ÿ¿ÄÄÈÃÁÂÂÇÃÂÄÂÁÈÃÂÈÄÄÃÈÊÏÈ
+£¡€¬¥·µc¥ÈÄÇ·£ÆÄŸ»±¬zbcc^dbgikox
+
+~uzxy~z~
+}uvv||¶±ovupomdO=WR?^ussvuphzq
+^tsvzxzz}MUuk0NMsyuputskuqomhptss|mdopptkmtfkpc5Sb2Ozq¡¬ÃÁ¥
+zkokpvvoSgutztsqvux|x|pb^[^__ZUJNMNSVOI4.%ISNVNWRWUVWVR@EA2(JWUYh,&
+Rp=*[btxuFUbpy~
+i<cEh~~ªš¬¬©š¥šª­°¹ÁÃÊËËÈ¿œ±¬©©¬²¶Ž°®®°š ©­ ­°­~|
+}qF4DI_UII=#//,0'&#0/.3%
+;v
+l~z©¿»?.HUHh|y~Nfvysbx
+qÃÌÓÈÁÂÇÃÃÁÊÃÁËÌ·ÈÌËÇÆ¶ÁÏÌÐ¹®®Áµ·¶Á»º¶Ÿ²¹¹œµºŽª²±­²­­Ë£§€©§®­°°²±µ¶¹¶·ºŸœ¹¹Ÿ¿¿ÃŸ¿ÁÁÄÄ¿ÂÈÇÈÇÆÎœt§¡®©£²¹iÇÈÄŽ£€Ã¿»µ±®|b`c_`fgmis|
+|vxty|y}zsossyŽ±o|oolqfL@[Q?_utspsslxp!Wy~vvvyyyHRtk+JHmpztvxsmuuomdqtmommgosqqlmpmot`4O`3Iz
+kš»Á¥xolqpsupVhsovytvx
+ttux~[^b[`_^SJNMJRRMJF*'!HJMQOVRUSVV\UEAEB(@SQVcW!
+;Z00Ubsusd^couvORY;o}¶¹¶Ž²Ž°°ŽŽºÁÆÈËÏÊÎÂ»²ª£¡€¡ €¡¬®®ª¥®»®©¹·€
+}
+}vO@RkphN@=E4'!*/(Yz_y©Ž»;DME\
+fI_gtuYvtŸÎËÃ¿ÂÇÄÃÂÌÊÇÏÎ»ÈÏÑÌÃ±ÂÑËËœÁÃÄ»¿ºÈŸÄÈÎºŸÄÇ¹œ®§­²±°±²ŽÌyy|xvuyvxux}zxyyxxyxyvxx|~zz £ p°°¥±
+ºiÃÇÇ¬¥€»¹Ž¬±Ç_gf``gcflt}yvvz
+zxy~
+uuuuz¬²kvqpmsfO=WS?_upquusmyl
+Wuvtxux~xNRsd&JImpuqytsiutpiituqopmimmmkhlqiopb4R_9Lyg®Â¿€ sikpqstmVdsqqqsuztutzz}vMY\``_YQNHNNQQOD9*&
+;MLQRORUW^VZVJEFA4+QUUYg
+
+'B#8Yftzocdblxx~2UAAu­ÁÁŸ»¶²µµ°°·»ÂÃÂÂÄÃŸº®š§ £€šš²²·Ÿ¹®¡|­Â·¬§xvy~h=BRUYS9=3.5A5/42/*"Jt
+t
+_s
+©ª©§^SRQQy\D[YiccuœÐÏÆÃ¿ÄÆÃÇÌÆÁËÈ¹ÊÈÌÇÂŽ¿ÐËÑ»œÁÇÁÊ·ÊœÃÆÌÁ¿ÐËÆÄœ®®°²°¶²ŽÌ®££¡¡€§£€ ¡ €£|
+|\²°š·~°zÂÄÁ¬¡€ºµ¬€ªÈ`bfb`bhiopxyxtyy|yzzxxvu}­²mopkflgI5QS?`umoqxxszl\xzvxovuELlf+MBmqvuztpmuotikvuqotkcmlsmdomqto\4H[3Dyl¬ÃÄ€tdimpsmlVgovttvvzvst|y~y?V\Y[WQFHLLNSUJ@;''8OOMQQQRVVUZRRFFH@+;QO[o7"%A+DYhozgdcgq||}p@O+Rz|¶Ÿºº·°­ªšššª®¹¹ÆÇËÎÐËÆ¹­¬££¡ xy¥©£°² zgolohm8'./23.%&/5,.,('b
+sc­­š±f\WQzh?W\mbd¡u¶ÈÊ¿ÃÁÌÈÄÃÐÈÇËÁ¬ÄÆÑÇ¿²ÃÎÎÏ¿ºŸÄºÃ¹Ä»ÆÇÌÆÁÄÂÄÃŸ®®²°®±¶¶Ï¬££ ¡¡€£¥¥ª¬š©©§ª¥€ª®­¬­­¬®¬©š­­ª±­°­±ª²©­²ª§^·©¹z­~¹ÇŸš€¥¹µ¹¹ÄËz`bfccdgims|
+oqt}~uuv~zvuquv~¬­lhmmiicM4VW?`zpppyyuvl%WpyuusszyLMmf,S?pqvqzsomsmshqutqoqmckotldpqkpid;O_0Hxm©ÂÃ€ulhktqsoUhqvsttttvxzzy
+
+YOINWNDBHJQRQOD<4+"ALRRQQOQZVWZYNFHBD;(LWUdM
+#*NE[mpth^^dm~
+bEB0U}}­···µ·µµ¶µŽ¹ºŸÁÁÇÄÆÁŽ¬|z
+€©­ª§š ¡¡€€¥š€tpoq}£ ©š¡cbhbLbp_\[M842+,(
+*
+#Ju
+O
+¬š­qšvZNU~kDVZg[ZzsµÆÎÂÈÇÊÇÈÆÌÇÄÇÁ­ÈÈËÎ»®ŸÐÌË²°µ·¶œ®»²ÃÈÎ¹ŸÂ»·¿º­±Ž®°µŽ¶Ïª€€¥©£ €¥ª¬­®±²¬­¬š¬©®±­°®®ª¬¡©²­ªª±­¹±®°±­®®®\¶²¥}ºÆ± £¶ÁÌÐÕÌz\fdddfbiotx|xuvzyxzx~|ztstu²Áxsopig^Q9V[D_ytqtyvtvs'Yu|vxvuytQLsc.M?kkzsyuoitqsimtsguslflpslcoomkdh=M_5Ly
+}l°ÁÁ€zhilosslSgqquouqxxtx|}yd;F[YFEJILOUUHE50*
+IORUVQRRUU^Y^ZJBA@B+?OR\d
+
+0`LZhpukbbhv~
+SE+(`~ŸÆÈÂŸœ·Ž¬©€ ¡£©²»ÁÂÂŸ¶°¬§£© £€uh\\biv}
+}§§š}g;8AINUUE7A??42*Ry
+|il
+ªª¶sxYSQyc;V\dYZ}t¶ÂÌÆËÇÊÊÆÊÌËÄÇÂ²ÊÊÊÎÁµ¿ÓÈÓº­§±µ¶µ¥ŽµÂ²ºœÄ±ª©ª¬šÐº¹Ê
+¡¡£¡£¥¥§ªš¬¬š¥©±ª®®Ž£®²µ²­²±°ŽŽ[±€°¬
+ºÃªºÌÓÑÔÊq\```b_filpvzxtz~~||v}~zyvosq|§²plpphobR0V\=_|mtuxvxxo#SzqxsvutOEtf'L5iszstspispuklqumpmkkhosm`hsimgbBLb4H|~m°ÃÁ¥~xglkqmqmVdpouvtuxuutv|zyD@SYLFEMNOSRNB940.8QVQSRUQSOQWW\WNIFF@5"EMVh"#x#RVkpqfbcbq||D8&,ix±­¥¡©±œÁÇÂº·€ ¥­°¬ÈÇÄ¿Ÿµ­§©ª¥}dUV`vzvx}z~|_^oq §©šN452+08752,#My
+}~U
+
+£­»yJgVuR?W_k`Qx¡q¶ÄÌÃÈÃÆÆÁÊËËÃÌÆ²ÂÆÆÁÃ²ÁÌÎÕ¿ª¥µ¡»ŽÁº»ŽŽº¶¶°¥£¬Ø×²±ÊxWRQYURN@B?@AHLUNRd_cghfokmppms¬¥}zc¬šššy±ÂªŸÄÈÌËÄs\```__cioqz~|xvux~y||~||vqouygkopds`N9W_9\zstpvvxxs,Uv|sxtt~xVHld/A5hltvtuofpqskkouppoolhlplgltkoof;L_4M}zk¬¿Â€~|ifiooqmYftsvuqvtyvuyx~dHW^JBJJIORUSI=82.'=OOUQRONRQUSU\VQLIBD?!5NQf?#u/UUltgcb`ls|~J,"=vz€§¬²»ÂÂÊÎÌÎÄœ­§€££€¹ÇÆÄÆÄœ»±®­°|qcZV`uzzxzfmlWf|­¬²¶d<.(330*
+Mutc
+¬» s^[c
+}FFV^hdVy~€
+s·ÈÎÆÂÆÌÁÄËÄÊÂÎÊŽÁÊÆÃ¿²œÎÎ×Ä š£²¥ÁŸÃÂÂÁ¿ÇŸ¿·x|­Ì
+|xR(
+4b``hddd`ZJ![®Ùæl~f`b_\_^^[hz©·šŸ¡x¬Á¹®¶·ºŸ·i^bcc^ccgiqy
+}||vu|}xy~v}}ztsqspz¥µcsmpkqdQ4OV=Z}utqtsx~t+Qtytvvu|zODod/F;hm~plvqlomtghmpstmpihmmk`hqgqqc4H\7Hy
+|
+m°ÂÁ¥
+}}lhiptqmYcssqqssutqxyx|UZ\NBINIHRUSQI=0(%
+FSVYUSVQROORSWVYNIIDD2"EMfY
+
+i^YZiqb`ccgx~|9&Lyz·µ±Ž­­¬¬²ŽººÁÆÆÏÓÓÎÇ¹²§  Ž·ÂÈÆÇÃÁÁŽ°±©lmz`W_\kzs_qostbx~¬­®·ª
+lU<33Qs
+~Wm}­·®
+p\R_xFEJU\_Yx}£u¶ÈÏÄÇÄÆÊœÃÃÇÃÌÇ²ÆÈÄÊÁ²ŸÐË×Èµ®µŸÃÆÇÁÆÄ¿œÃœtcm±Ñ¡.
+
+Nx,#Ôâêlplput°»£¹¬sª¿µ ©£¥šªšg\dc`bhfdmtt
+|zuqu}yux|z~|vvolqy°ºgqklfohS4RV;_xipuztx}p'Quzsvss}xV;lf3@4fpxvlypkmhudmmp|qoofgkmlcfmhsxg<HV5Q}
+xhªŸ¿¥ |lklkquoVftsttmst|qvvzz}
+UVRJHIHNHNWSO@5.,%.UVSUUURQRSY\VZZSUJ??D?
+7R__gWbmh\[bbp}x4
+"WvyŸŸŸœº¶··¹»ººœÇÈÎÐÏÊ·¬€¡¡¡±·ÃÄÃÄÄÆµ¬ib_\`W`pz|mH|yxxug|l§©šŽºš
+~
+|Hm~
+­º»}VDV}xHE@L_`Us}p¹ÈÊÈÄÂËÇ¿ÂÆÇÆÈÆ®ÃÈÆÂ»°µÏÊÙË·£ªªÄº¹Á¶¿¹œÄÃ¹€§£ª¶Ð£9%3'#%\N_ £¥£§§¬§©F"vÕòë¥­¥§£¬¬®ª§ysµ©·°¥h§¿Ž µ°±§§£dZb`_cchflpxuuvszup~~ypopst¬œpqoqhqbO/MV9Uxkmtxsvyk*Ix|sumqzyV;hf+F9kmyxmsumolxkiqpxqpqfgimk_gpiuzc@?Z4Iy|o®œÁªxmoosotqYdutvsssvx|yzy~[NLEBJMLFSZMIA,**	,RUZURVRSSNUVUY[VUNIE=B9%EYd%		JZ[qcZ`_kt~y*
+&cxy}€ÆÃÂ»¹œººµ¶·¿¿ÈÊÐÓÌË¿º¬¥¡¡€¬±·¿ÄÂÆÆ±b©z`[^\`di}zu¥€vmbtgf~|±µŽš
+~
+f,|€·œYLduHB=AWfQv} 
+u¹ÊÊÆ¿»ÃÃ¿ÁÇÁÁÊÈºÁËÂŸœ°¿ÊÌÕÎŽš®­ÁœÄÄ»¶ŸÃœºµš¡Žº²¶Ñ¡  _7W72% c € ¥d'\Îæ¿
+g} ¡£bp|²® ²­¥h£¿¶ÁÇÈÇËÄhZbfb\^gfmpz
+
+zsqsy
+|zvvx||xulpsv©œmvokdmkV2VV7Yypmqusq}q4Hy~}smp|yW8lg4B3kot|spqmlpmdlpmimmqogmim_gmhvxf9AZ2Qyzl¬¿¿š}piikptx[dtvvtvuvvxxxv}oRLFIFFFJMSULL;,&+
+JJLSORQQOUNQSY[^USOQJ@BA*0Lf<
+UU^mVU\dsx}x&8my}©ÆÂÂœ»¹µŽ·¶·¹¿ÇÊÏÐÌÈÃ¶ª £§©Žº»ÃÂÇµ}SOqqtpv}x~}€¡©§ªªoVt~y|y~©µ·²©¥|~||<Y~|}€µŸ}YRozzmLI<A_l\|¡sŽËÐÊÁÂÄÆÄÄÊÆÁÊÈ¶ÇÈÆœ¹®µÊÊÕËŽ¥Ž§Ÿ»º·¹®¹·¹®€š§¬±µ»Ê
+
+^miU<pIR\ ¡x?B®`VY ¡ ¡gVhp~zm§­µš¥c ¿ŽfzÃÊÄÊÈÁgW_f`c^cffltyxqsyxvs~u|uspmmpv|¡Ÿqupkgoi\/S[;Qxoqpquivp/ItyxqosvxV8hc8F5gp}}qqlkkmohkqilloigdilkcfhhovd9;W5Ou~xm­»Â¬
+~zkiplqqqU_pmtssuyytutyy~yRNRLHHOFJVVQJA5,,&QRNMOJUUQUVSQOZ_WZUOOB<?9
+8VL
+
+HR_gLU_htx|i
+Upx}¶ÄÃŸœ¿¹¶µ±¶·œŸÇÌÌÐÎÈÁ¶©£¡¬®ŽÁÂÆ¿ºZ=3Mf
+ou} ²®§YMzx|~} °µ©€€¬­ªzqs|
+q2u}zyz€µ¿§fH^lycFIII\mv
+qµÃÈÄ¿¿ÊÃÁÃÊÄ»ÏÆ¹ÆÆÄÁ¹°ºÎÑÕÑ¹ ¡°š·¬ÂÂÇ²·œµ€§ ²±°°°ºÊyvtszxystfVJ(3m
+=iflVV©fv^`}z
+bV^pzl­°²£ª_·±|\sÂÆÈÊÈ¿dWdf`Y_ihlpt~~xvpox|vquxvytsmllmp}€»msokilh[7S\3U|mpmsshpl'@u}yspovxY3c_4A3gpy|ttqmkmskmpqxmptkfcll_ghioub75U8Rsto­œÁªzkllkmpoVfuttxsosxxyvzy
+vSRRNQJMMRSSOMI7(/
+
+,UZSNNSNMLJMINNSWSZRRNE;85%II		QUbYJYbluu}V(^sxÃÁ¿»¹¹·µŽ¶¹ºœÁÃÎÎÌÎÊ¿²©¥¡§­ŽµºÁÁ¿µq5&btx
+
+£lVuvv|©²¬©®§€|ultv|yM[}~y|}¡¶»MFigz`^hmYJ~|
+s§®ºµª¥»ÁœÁÆ¹²Ç¿·ŸºŸ¶µ€ªÁÆÃÇŸ±œ¹º¶ÇÄÇÏËºÃÈ¹®®§ªºŽ±²¶¹ÄVs|ttlvz2%A
+Z[tsvttyxcFl;8Î€vFZqx}xus`N[v||z§­·€±_¶®o?qÁÈÊËÇ»cYbb[\bcgmpv}
+yuqpvzumqsvxyoghkkp|€»tsokcoi_4V`;Syppmqsmtl,?vzupmtsQ<f_4@0dssstpqlolpioqptoksgilom\fmgtxc=2R;Jt
+u|p©ºÂš
+zliklmmqScppqttts
+vqyxz|
+[SMOLEJQWZSJL?/%+/JZSRRJIIHMLNJNIRSSNQJH@852.IYYbNMW_szx}F8blyÂÂÂŸº»¹¶·µŽ¶ŸœÃËÐÏÐÊŸ¹© £€¥¬¬°°²¶Ž°Ox¥Ž­§ŽÄ»§lzz
+|¡£~Qdofm¥£§§
+
+vuqtmozxp=l}
+|
+²¹|JWgbu}khy|Y
+ p°·Ž©¬Áº®²Ž°º­®»±§§ ¬Á±ª·Žš§­¬ ººÂÄÄµµÂÂÁŸ¹§©µµ°µ²¶ÇZ\'&JD
+.syhIE¬ÆdVEJdxZL[txy¥§¹²`·ŽY+sÃÊÇÊÈŸ_Z\c_^`_`fpt~zuploystpsququoglkkqy·mpomgqm[2N`4Ltmlmuvkok'9p|vvpksupu}b?D0bllqmsmhmstkhslkloqkkhll\fkiss_?<Y9Io}q|m­œÁ§
+ylklllpmW`putyutuvttvu}hSUJNADINSSROE8,%2<LYSRSLLHIHJJJNNQYQQRIJE<9/!@(,N_cFS_fsy}~8Idpy
+­ÃÂ¿Á»¹º±µ·µ·¿ÁÁÇÈËËÈÆœ°ª¡©š¬ª¬ÂÄÁ·ÃÐÝŸÇÊÄÁ·pvy~~špkb\d\ob
+©}~}}yomhfkl_Hmz}zŽ²_R`k_s~~€d|qšœ··±¬·»°¶µ­±£­ÂŽš­¥ŽÁ°»Á¶­®±§¡°²®§§¶µ°®²ºÆUHJ=,*%!9 `4~OZFDf£¥¥SL`mtv¥€¹±_¹²lL[©ÌÐËÑÐ¿[YZ[[WVfcglsz}umisuysiqsquukihklitŸhtqqkqk[2W`3Iskolqskmf';s}tqqÁ±|
+Ž€M_ofmqpogmoqkhpkfmsoiihfh\clmomcE5W9Ai|
+}sxp¬ºÂ¬qmgmoiooScuqqxpqtzuuuvv
+JQRMDAHDSUURQB4/*%
+9JOUVVSNONQSWONONRSVMJIA<=<7!2*
+<SdS@Sbkqu|~z*Vdq|ÂÄÄ¿ÁÁœ¶·¶²¶ºŽººœÄÃŸÂÄÁ¹Ž¬ ¡ €ªª·¥·œÈÆ»ŸŽÁº¶ÓÃÃŸ­utvqku}tmgdkgc^qd;t~zytsttu|xlhiccYIy
+}
+zx±IW[pgs|©q}u}u­œÁœÁ¿²»±Ž··²»­¶¿Ž²ªª²Â»ÌÄµ¡€š®°§¥±š©š¹¶±¶Ž¹Æ^¥¡§h¡&
+!0<*I €^&mBhxYt¡¥©©II`ksv¬¬²²b¬­iy²ËÑÏËÐÐÁZYZ[WYV^ccou~|tokmyyvmmoqvtpiihllmz¹hoookmk[2SZ9Qvlmsoops_&7mysmp®Î¿oÆÊŽbdppsvpocgsqldqkikplhhlhhbbhmmqcA7U3=kzs|qª·Ä®
+
+ukdlklpmU^tqpqmtu
+vqxvyyk9?MILEHRZYOJMA5(,A<ARRVRVUSRSVQNLWMUMLOMH<7;82!=E_dI<Rkisuxy4Vcu~©ÄÃÂÆÁ¿œ»¹¶¶·­­¬­µ¹µ»ÄÃÊËÌÇ»¥¥š¥ € ©¥ y ÁÆÆ²bm|s[RcgUfQUxpdoQ%Lxy||
+xxzzzumsqlgqxskkhfJ^
+y
+z~¡²Scgl\o~u¥W}|q·ÆÇ¹ÃÃ¿œÂÃÇŸœ¿¹±ÂÄœŸŽ­µÄ¿ÓÎ»¬  ©­¹º¶¬ª­¬¥©¹Ž®Ž²ŸÇ_ ª§¡££®7L2(0*M€¥£€t%&V¡œdgu­®Ž¬zLLhlqu¡©±µc¥®ÊÑÓÑÐÏÑÔ»\R\WUSYZdfit|~sslimv|ppmqvstocddffiv±golokqk[,U^5Hqgoqoqqmf78pyxhk¡¹sœ¶±°ygtxsochoqiktidfiomighf[_fihp_;?L3@mzu}p¬¹ŸªzohhmlukS_usttopv
+vuvuxxU<FJIBEQRUUOAJ@2&' 9UJB9LQMNVVQRNOSUSMQIJSMND9855.A&MZQJL\kiou}
+q'E_kz~¹ÆÂÃŸÁ¹»»ºµŽ·±¶·¶²¹œÃÃÇËÎÌœŽ~}£c
+­·œoFL[gJBNZ8LObzoldR3y~yx|~}}~zxyxv}}tqkkkbhmpld^;g~z
+~~~§°xWkviSlo€J}vp»ÊÂÁÄÃ¿ÁÈÆÂ»²Â¹®ÂÃÁÃ»©ºÃ¿ÐÎÄ±§§ª¡ª±ÂÆŸœµŸœµš¹µ°Ž°¹¿d€­©©¥¬_`M!*"(
+Y§­®­¬š|=M@S®ÈoU~©±±°pIObgku£ššºiŸÄÈÊÌÎÏÐÑµQMNSOMO^Z_oox}tpkdluumiioqulmg`bchov¶illlimhb2V\9Esikqmustm;4q|ykkcpsyª yhovpokhoigipfg`dofkfbg_bfmmlg?7O3?i|z|p¬¹¿­~iglmlskV`ltsqoou
+zpvxxxOENNDHR\WWQOII9/"
+LW[MA;BHSRROWVNNMSQQMUSNOID998<A@M[SSMbkssu~
+i.JZm»œÄÇÈÇÊÊÈÆÃÇÄÂŸ¹µ®®­©©­¬§ }lhoxhzIoi.\cD49@0=F[ovtgW(&szxv|~~|~|}uzvtx|xuohlh\^folL<l}§ªZUlxhQm
+xq¡sxq€ÂËÃÂÃÁÂÁœËÆ·®Ãµ§¿¿Á¿²¥¶ËÈÔÐÄ¶®ª­©£»¿ÁÂÇÆÆ·µ·²±²»Âhšª©£¬¡Q;&
+*!c€±²­®­ŽŽm®qqht}­Ž±­`AOdmuy©šª¬c¡¡§¥®®¬®°­}tuspy|qkbu}
+}vvosy~~}|~~yvm¥·clkkhmmc0Q^9Fpimtpoqsq82qxpggp¡¶°o®¶qgqtpmigidddmbgcbihqzimtzkliohN8U;El
+}vxk¬¶¿®}hghpoplU^moqusss
+vtxuvz|[FMDEQSYWUNMEB<.'!=U[UQJMJRNJQROQQURWUNQQQQOH?8<0/HQ_UNVbksty`2N^x~€ÊÏÏÐÐÏÌÈÈÄŸ·­š§~
+uxystuz¬®±»Ÿ» S29IU/NL<2?350Jbs}||d&sxz}|z||}~}yz}|vp}}xuoplog^_fJ/q}
+|©YVlbMiuu€pz qšÁËÃÄÂÂœŸ¿Áœ·¶Ã® œÁÃº­š»ËÆÔÑÊ¹œª®§·¿ÃÁÈËÂ¿¡µŽ²²²ŸÃk€€©­¥®¡€QBL
+"EL"*ª®±ªŽ°¿áÊ€i
+IJ_YYOª°µ©WJVmpuuª¬°£`§E}§§¥§§¥¡§£€¡£¡  €¡¡£,
+t€££š¬§§š°µ²¶µ©pzfhkkgklc5R`4Ipkhuoosso=0isqkkl°°~€°[tolqqkmioflgmdkdcfd¶¿º·vthmhL?U?Dovutp©²Á­}iimklooQ`pqpspsu
+vqvuv~~[NQFOVV\WUFDINE,+!ENWVWSVZULLMLLNODLOORQUOOLFI?2*
+@`hUQZbhpty}~[7WizŸÐÏÇÃŸ¹¶­
+|yxplpx šµ±µŽµº»»œÁ·¡©tL02RDLLD**795SszzZ<x}~}}}}}~yzz~ytsv~uuuvopiibRF7u|}zª
+MVhdNZq}[}zy¡yªÃÈÃÆÂÆÃ»¿ÁÆ¿¶¿­ ¿ÃŸ»¬§»ÌÇÔÎÃ®®©€°»»ŸÁÇËÁÄ§¡···µ°ºÄl¥ª¥©€©­y8Lc+"F
+z­±²ª¬²¥¥×Êu9J?,=S`L°­°NAYmppu­°¶š`§2cš­š©šš©®®¬¬®®®±ª°±­©°¬¬­¥.o©š§¥ £ £¥€¡uloqthgiokph`5V_2Ipkiploqlp@4kxsi§£°Ðš|vc ukulqkimbdfuh_kc¡€š­œÃ¹Ÿ²obJ0Q;Dkxtvm
+©ŽÁ¬yvgfmlmkkU^mtovquxxszvsxcIQ[VYU[VNIIHI@'%	0LALROVYVSMMNLLILIJSOSNROJFJI@90<dgQUY\biilsS<Sqy€ÏÎÏ²
+
+
+}©ªµ¶µ¹±¶·º»ÂÃªµ¬¥_8[m24823..Oz}~tg}y~|}}}|zzy}|uqzzqtzvusqcSH[t}¬kVV_sdoz|~
+ptuªÄËÃÆŸÁÂ¹ŸÁÃŸ·Æ­ ºÂœ·¬š»ÏÈÓÎÄµª€ŽÆÁÂÇÂÊÇ¹ ¶¶±²²¹¿y¬­©¬€š±Q?;+&q©¬°ª¬±§}Ì0JW<HFUO®ŽŽFF^cb`^®œ¶
+¹x7'L¡§¡ ¡£££§¡ ¡£š©­§§®£*tª©©¬­ª­­©š¬±
+vlopovikmihmf_0U[5Flgoplplgs<.izxs·Ç§sgYsu ²£¡}itklmcgdtgbit­ÃÈ§±»ÆÇÄÂ b\J8S87g
+|}zyp­®Â­}hfhmpooW^qtppoutzttyqxbNRZ_ZWMMMHHIJ?'! ,QIIQSSSILJ@HFIMOLQQQQNSOIIIBD=7DZQLQOLSW\\gzI@Zy
+ÁÏÊÈ¶|vy}¡šŽœÃ¿šš°µ¶ºŸ±µ»·œÁÂš¶²š U?I+42(3%=h~}|ys~xxzzyyxxyx}~~|uqyyqu}|}xhRLiz~~£šv`~lfut}sšÄÊŸŸœ»ŸÃÆÂÃ¿¶Ì¬¥¿Áœ·©ªºÊÊÓÑÆŽ©¡µÈÄÃÄÁÊÊ»§€°¶¹²Ž»»¬²Ž±ª²·hk_*(3f4s§±±š°®®y·(/NOD=9H­°Žof
+usk£Žºœ¡S3!l­±°®¬°¬¬°¬®®ª­­¬­ªy|vDNpsgy¡ £ ~tsvusqpcikhblbV.S^;LhklskmphpA!kz}mx¥¥¬€v^UdVÃ±ª}susoqkcflf`^ÃÌÑÇºÃº®šqS`H5V83f
+yvvoªµÃ±zkgikoqlSWqopqomsxvqtvvcHROVUOJLJEIFF9"ARLNLQOLEHIHJFMMQNUOWSROJDBBFAB@8F?IMNQQRY\[tHEd­°¥~€¥¥²·¹»ÃÁœ£¥®µœº»·»ŸŸŸÁÂ¡Ž­©sJ03.F?297Qg|z}|}z}y}zz}|z}|~}tluzpmpxztcYLp|qt}§ €š£££
+yo ¿ÈÁŸº¿Á¿ÃÄ¿ŸœË®¥ÃÈÆ·®¥»ÆÄÑËÄŽ¶¶ÇÄÂÆÃËÏÇ§š¶·µ®­º»²µ¹µ®±œAoD"#RY
+®²±±®°±Eq}[\ZB;2*LŽ­®®š¬¡¶ºº~M3&p­Ž±¬®±©®Žš°°±°±°²°BJ[yq\\m[OE?J ®®°ª§yx}xzz}chhigl_W(QV5Fkhikkiklp@fvvmp»·®­xVEV
+±§ªzkkc`WNE9/('bš¶¿·Â£ªšk^fcA3I50`ysut­²¹®
+|dhhkmokR_uqsqsmqxtxqvvYELJNLHFNHHJLH3!3YUROIMOQRSSRNJONNRNQQORRNLEEALMJD2?NbZQJQW[YYbt;Olz¡¥§š€€€£¥ ¡©ª±¶¹ŸÃÃ·£­¶¹¿ÂÂÁœÁ·º¿¶£š¬©¶B5=DAEDLUY\^^Zuszzzyvz~zyvx|||xz}z}slu|sktvs\VOp
+|mq|© ¡£¥§¡¥¥ xoœÆ¿¹Á¿¿¿»ÁºÁºÈµ»ÊÇ¶±©œÈÆÕÏÈ±²¡ ±±·ŸÃÇÆÄÆÆÌº§©¿¹µ·Žœ¿©²±¬­±»BEI&"2J­¬®µ°²°q_sd?0E0Wš®­­®²§§¡¶·
+
+švW.(|Ÿ¹»··»ŽŽ¶ŽŽµ²¶µµŽµ€q<FRM;;IHE0@u­®°š®®µglllhpcU.NY4@hihkpiqkpY.hqqzy§ÄÊ~QNu}dtL+%!%%+3<;Ab·Ÿ°š€²²°_bd`I.H8*b}x~yvqqs}­²Ÿ±~~fcklosoW^qsppoqt
+}ptstu~QEHLLJIFDFDIHD.Ob^\YUOMRVSNVWQMOMNQQQRVUIIIHFQSSH,Wb_[WNMUVW^hox7Wx
+£®­°®ššš   ¡¡§©µ»ºÂÂÄœ§¡¡ š±Ž»œ»¹·¶µ²·¿œ®®š¥§UOW`c`b`[bfgY`~}zsolgyx|z~}zzzy~|x~~~tmt|xplppV[[xtopy €£¥€¥¡y}p ŸÆŸ·º»ŸŸº¿ºœœÊ±§œÄÆ·®¥œÄÌÏÌÆŸŽª¶œ¶ÆËÈÂÈÂÊË¹©œ·µµ²ºŸ©µ±°®®Ž·\IM
+.O|@°®­®¬°®cfqdA=I/bª±ª²®ªš¥¶µ
+y}Y8,ÃÆÆÁÈÆÇÂÈÈÃÃÃÄÄÄÄÄÁ¿¡@/5?<@75O¶»Ž¶¹¹¹¡¡ ¡·ŸÃhifihqdQ*H\99ffgoioisxu|vkfp©®¬ª€UHªÈ¿­xUYY^`c`_\gš¬y·œohgkokQN34cxv}zusssy§²»Ž
+zhchmmlmU\oqmqspq
+|pxtxyUIHLJHLILDFHID##SRQSMOMEMJHOQRSURVRWSSOVOHBFISOUVE'O_\_YURUW\^fkqFfz§®®ª­­§ ¡  §¬±ºÁÃÈÊËœš¡¡  šª®µœÂœµ°§€xstfiVQ_ovsummfcWWt~}xid`x€xv|}||z|z|}~x|ztox}tmlhSVg
+xu|vuu~¡¡¡ |mlvx€œÇÂ·Žœºœœ¹Ÿ·ºÐŽª¿Æœµ±§»ÈÊÑÏÇ¶Ž§¬©ºœÌÄÇŸÇÆÄÌ»¬œµµŽµÁÇ¹²®®®®²·¥y7<",x}SV\ª²²¬¬ª±²p@Bb_7
+US"­¬¬¬¬­®©¹¶~
+t|V8*ÈÇÄÃÃÈËÇÈÇÂÆÃÄÁÆÈÃÇÊÈ;LSUQFAÇÈÇÄŸÃÃ¿££€ ªÁÂ¿flfi`lhR'HY5<bciklis¡¡µzts±»µpkªºŸ±}kfd^``b^V_£ª}š®©©xx|~s8/dyz~|tout~°®œŽ
+
+vdhlilqkVWmqqttpuzuxpuv~dFHNJQONHDBDF?+	2VUQIDEFHFILHNQOOSVUUYWSMBBFFQQSRQF,EbZ`SNRUV[\fktQo®²²®ª²®®ª­ª¬¬­µ»œ¿ÃÈËÄÇ»µ°¬¡¡ € |utt¡ª£u@YgvzustmfW`~|}kfkl
+xu|xyzyz}|y|~}}~~}xls|udDHMboy~
+~}~zvy£€€¡i7I^tu£»ÈÈºµ»·œ¿¹Ç¹»Æ¶©·ÈÆ·­©¶ÂÊÓÏÄ»¹²º®²ÂÄÄÃºÈÆÈÇÃ²ª»¹²µ®ŸÌµ­­°®ª®·Žu/
+@q2\Ž¶Ž±°°²·¥dE*3
+?¬­­®±°©¡š®§±°x}U4(
+ÈÈÄÂÃÃÇÆÇÈÊÊËÇÇÈËÃËÊÌºVO\YWHuÃÇÄÂÃÃÂÁÂ©§€ªÇÁºflfkdik^,MW=8`hkylmš© €¥plq|¶©¡¡ŽgZdmiistpms¶u©¬¡¥
+
+qqgkzvtpuuy¬®œµ
+~xdcmmolo[\mstpsss|sxsxxlAMONQLEFEAHI@!9[^WSQOMMQIOQNQUQMUUSWSMJDBINRSWSSL"E__bYQUSSWWdimUx©°¹¹¶Ž¶¶º»·ŽŽ°¬±ºµ²¶·»ŸÁÂËÌÌŸ€}uuopy
+¡€¥£ª®§p\=EV_glsyytl}|tqvy}~~vy~y~}}~|}}}}~|upu|yh2<HSy~yuuxz~­ulO7Zvvh;U`vt£¹ÆÁÂº»»»»¹ÄœºÆ¬Ž·ÈÊŸ©ª·¿ÊÏÌËÃ¶­·¬¶·ŸÁ¿®¿ÄœºÆªš­¹¶º·ŽŸÆ©§š£§¥¥ª¹ |\Dk`x^®±Ž°­±±°¶µV7,
+
+
+p®·µ±®°€šš©±¥­·vy[5&ÃÇÂÃŸÁÇÊÈÆÆÇÈÈÊÌÌËÆÊÏÃhOWYZD£ÇÇÂÃÂÃÂÃ¿¥¥§¿ÂŽklc^Zb`Z/QW89dlluzxsm°­kk`yyv²°¥µ¡šzuxxz}}|£œ®
+}ÃÄ€vumuuu¬­Ã¶|dikkmloZZlpqtuttzstqsz
+s;MRLLLIIEHHJ?!A_ZWZVZVROMRUQVURQYQORMOHHJNWZUURLH,5bc[VUY[Y\[flq`~°­œÂŸ¿œ»¶»·µ²°¬¬­°°²¶µº¹µ±§
+l_Ycm§ªªš§tWEEQUWW[cgg[[\soqxz~sxvx~z|}|}~y||z}~~ouz~lF+;b
+|ssg*_\hI9O|xs?[c| 
+s§ºÄ¿Ÿ±¶¹ÁœÁÄ¹ºÇ®±¹ÎÈœª€¹ÁÈÓÎÈÂŽµ·ª··ÃÃ»­Â»¶»»­š°¹²¶¶¹œÁ©µpQD2#R`€€¬­¡š¥§©»€}`J&
++©ª­§š­©Ž¬µš®²}|§€_4'ÄÃÂÃª°Â»¹¹¹º·œÂÂÂÆÊÈÌÈxR^[^S·ËŸ·ÃÂÃŸœº©¥££ªÁ»¥AA;3/E^b3JZ55liiimgkhdqllb`u~¥®€®ºœ²¿­º¥¡±¥
+|ogbURcªÊÏ×€zuyusvtª±ÂŽucfimmolYRimsqtqs}szuusxFEIJSMLJEBAF;"HUYWVY[[VR[VQRQRSOUMUUNLRLMNSYSRRQJ00_`[\USUYWZhuzk¥¬®ÂÃÁ»º¶¶µœ··¹µ®€¡zyqi\kt~
+£š¥zZV^VYSO;3#Syutqqyt}}y|~}}~}~}z|~}}zsx|zVL.i
+zoysqO"^k~J<Oxzz8Uk|
+q£œÊ»¹­µºœ¶ºÈ¿Ÿ¿€¬œÈÇ¹ª ¡¿ÊÔÐÄŸ²°µ§µŽ»·Â²Žµ»¹Á¶±®¹·¹º¶ÃŸ~~zz
+¬c892+}|z¡€ £¡®u^O;#
+#vµ ²¬¬²yšy§²h9'ÆµÇÁ§²Ä¡¡qObW[Y®Ã»·¿ŸÃÂÁœ§££ ®Á²§*/=LRcqg4LU55hph`kchgcZqxv`x©¥±Èµ¡¹¶¹¡©·µ£š²®©±MRZ`3,09Á¿®ÊÐvtqqxsš°¿Ž
+zcfgklomYVmopmtssztxvtu}LIOQJIMIEEB?+.RVUUWU[VVUQUVOSURUROQROQRSRRUSUUOND<&\fc_YYYWV\dpy­°ŽÃÃÂÃÁÁ¹·²­§tkgo~ ®¶¬~~
+
+uvyvvtsogc^YZ`y
+xyyost}}|z|yx~
+|~z
+
+~}ssvuUDN~
+~upv~~|F+`zv|O;L~
+9Zl~s¶Æ»Ž¶ºœ¹œŸÂ»Ÿœ£ªœÊÃ¹¬¹ÊËÃ··®š€®ÇÃÃµ·°·Á¿Ž±²·¶º¹µÄ»vpkkqME*
++z~c}bZS?!Z
+£²±š¥€±|¹z°Žk5,ÄÆÆµ€±Ã¥©²­¬¬ªªª©¬©¥§€ySc\[^Â¿²Ç»ÃÄÇŸ§   £­¿°€V^`mq|ul9MS47hgibldgk\R~y
+udcv€€ºª£ªŽÂº}xz®Á·š¥§Á²|
+tUMS\\g¹Ž·ÄÌvqqluuš²Ã¶
+ydfikokp^Vpppsuss~zqtssz~
+VDHMLIF@A?@7
+
+?ZVYVVYVYZNSSVSNOQNNROQVWYYQVVWZWMRMA+[`^YYYYU[^dy}°Žœ¶Á¿·®šxpihp€±»ºÄÈº
+€sptz}z~}}y~~}}~zy|ysqfVJV}z~~vth^cy|A(cyoyS<H
+z~M[hq¹Â·¬±Ž·¹Ž¶··¹Â©ª¹ÄÃ¶­d/9|²¿ºµ¹¡ª»ËÇÊÁÃÆÈÆÂª®·¶°¶¶¶ÃÄš®Ž² ­¡~M(#
+Z_Og|y}}xxv}yU;[JD?¹š¶§¡°v¹xªŽo2,ÃÄÄ· °Ä­®°­®®®­ª­±±°±²Wc_bh£Á¿¹ÃÃÂÂÄœ¥§£ ªœ®€dglq|zob8FL47hckdifgh`ushb^^sm£¶²²®¬ËµU2+J­ºœ~°v^Vh\k·Æº­Á¹¹qsqqxpš®¿·
+¥œ®ychihllp^Omqppqptzttvxuz
+
+`DQNIJFBA<=+
+=VVUUWRVUONLMQJJMIQQNROQNQSRVUVSSRLL9%^[cWWQSYWZdu¿·œ¹|uvx|£š¬µ¹ŸÂÄ¹
+iks~~~z}|x|z}~~}~~}|mhfW_~
+|~zvqgdkxxyzJ2fguI?Isf\`kxq§ºÄ¶°­­®¬±±º±²Ÿ©¥µÃ·º±uV7s;i¹¬§µÇÇÄÁÁÄÃÈÃÇ­¬»œŽ·Ž·ÆÈ§ £¬·µ»·v%%(%=b§§©ªš§§°šf<@H(;ºª€ š²š®}µyª¹o2,ÄÂÃŽ£²ÂŽ®±±°­®­®¬­°°°ŽQ^b[p€ŸŸ»ÂÂÄÃ¿¹£¡£ ­¹ª¡glmst|y~m[U59gcibihkfi}x}v~~gc§º©£¶Ä¹zxu¹¥fOW|zgu®²kY5Zbl®­}š§¶qvq§±Ã¶¶ÎÐÔ|fgimmmmYRpsoppsu~tuuxsxoJQJLHDAB8(LZYYVUQVMBBJFD@HFFJQNOQQSOWQYSZQSIID=2Y_\[RSOY\Yfx­»œÃ¹¡£§§§€€¡£©ª¶œÂÆÄ¹ 
+
+¡ olt}yzyyyz~}~~~|}zphkhdx
+ysymif\dmuxcOo
+tzSIR|gfhckyq¡Ž¿»Ž²±Ž®·ŽŽŽ¶œ©¡¶Ç·££IW`v,O?.t©§ŸÂÄ¿¹¿¿ÃÈÇ©¬²¹®®²²¹±€
+¬ bH9;HDHN[t|~~¡|4<2(Q­®­¬©¬§ª®°€£Ž°p¬·v4*ÇÃŸ¶ ®ÂœÃÂ¿Á»ÁŸ¿··²¹··J_iVs¬œÁ¿ŸÁ¿ŸŸ¹§¡©ºš©~}p4,\^icgfdg\Ziy}xp¡®¹±¬£¥š¡€~|hku±¥§±±`klic¡§©ÃÔ®txm¥ªŸµ
+ŸÔÌÁ}cffgomo_Mipmolpo|svpvvz|FMIJI?@<;*%V[Y^ZVSNLHFLJMIRILMMMMRNRQYRSQWULD@DE3U^^SRNRQRYdqºÄ¿Á»±¬®±ª¬ª€€ ¡ ¥ªª²·ŸÁÃÃµ
+|
+€uot|||~~zz}}|
+~sg_gh}pc~|skhkd\fqmuhox~yp[gut€·œ¹±°µ·µ²Ž°·µŸ²€±¶h*<
+f2fWdkWEp¿ÆÂÄ¿¿ÃÄËÄ© ¥ÆÁªº®|qZ@@B@8ADAB=778055?HO[cbUF&
+sš©©°¬©©©Ž ®®£°
+¥qªµp2/ÃÃÁ²¡±¿œÂÃÄÆœÃ¿ÄÂÃÂÁÂÁzQit¥¿¿œÇ¿¿¿Â¹§¡€§²§¥pQ^\chldfgWOlldq}iu ¥v£§q
+€
+s€©Ÿœ|§|mkldb©µ©µŸ¶¹Ž
+©ª»±
+|}
+©±Èª}fgilkpm[Oimoohio
+zutusv~E@FHFD@82(
+	*WVRWROQLNRSSSQLQOMQOJJNFMQNNRUUQB@@MLBOc[SQNNQUZgpšœºµ­¬­¬®®­®°§€€€€¡®€µºŸÁ¿¹
+` ©¬®®ª®®°¡
+
+||lpv~y}~xy~~}xy}|}|~z~iZ[l|~zxs^s·tpu}u¡
+v`_v
+t£»œª£ª±­š¬ª­²Ÿ­©kHJx2f;zYsWI=q^[ÂÊÃ¿ºÁÄ¿»·¬
+¬ÜÄ»Ç££osxbWNJJIJ=?;9;97;5439=JS\bd¡£¡£ ¡­¡ªªª¶¡v®²q4+ÄœÃ°£¬ÂœÆÆÄÆÂÂ¿ÁÂÃÄÆÇšYt¡
+¡Ã¿¿ÁÃÂÂ¿µ£¥ ¥±€¥ubhckdidlvistcl`o°š¡Âšpmq±Ÿt
+ioqhp©¬®ª·®ÄÌ£ªšœ¶
+® ©Ž¶Ž|ddkllko`Rpmspomozottuu}
+`;DHB9?97&	3SWYQMORMMLIZNVNNSROUUNOOOLQNURNB9A@NIFD`YQQSMSUWgoxv¥ŸºŽŽ·¶¶»º¹·±¥£€£®­°·ÁÄÄºd¡€®®Ž®°°µ±®§}hh
+zi~xgiu~zy}yz}|~~}}zz}}ztdWSz
+~yuqfb
+¹£š¬®­ª€§¥dhy}s£·œ¬€€§­€€€€£­Ÿ¬¡0%_'Q9B&4/QNoOyÁÇÁ¿¶»¥xšp§®°šty}ºÑšfVVNJFFEB88,95@;55833<HEZy¡§££ª¬®­u©µy55ÂÄ¿±€±ÂºÆÃÃÆÁ»ŸÁÄÂÄÈÇVy°q¿ŸÂÂŸœÁ¿Ž £¡®²š€
+}}yhbU_f`i`dgv||fV^li`k¡v¥¬¡»¡}¶Ž££šuomkst}·¬Â°qš¿¶ÂÌ­ÁŽ­ÏÑÂªœyd`dimli_Qkoospsm~vpstsyx
+vD<HD@=82#
+@ZUVVUSMNNILNMRLJNNQSSINNLRNNRIB7BB55897YSOLONLO^fm~§¿Ÿœ¹Ÿ»œŸœ»¶°¡£ ¥¡ª¬²·ÂÆÃœ€
+_€©®²­­®°±°¬§
+cly_u
+zshkp|~}}zy~~yz}}|~}zh`\p
+
+}||qkfb ©€¡€©ª¥©©©©ª¬®©£lgy
+t¡µŽ²­¥ŽŽ±Žµ©²¿ŽŽ¥?%;c"40/38J`@mIqy­ÁÃ·qZNOH0o©|¬ »Õ¬\SMIIHLH<==579;4922+&,,+8\b
+©©¥¡­°­€u©¶y52¡ÃÃ»¬ ²Â¿ÆÃÇ¿¿¿»ÁÁÆÆÆµfVdgz·»ÂÄŸŸÁ¿²§¡§®¶š£lf^SMID<972<AUhgbh\bibg_oduqt 
+y ¡~£­©Ž
+€€xocbhp
+¬ysu­¹¬Á¹²Ä¿µ¶€¿Ä~ffickml^Ofloqsmm|xosstyy
+N=EE?;.
+,HZQZVQSSUYSUYNORRQMMMLRQSRURQUIB<?;#0D/'VFRRNNNUciqªº»ºº»Ÿœ»ºµŽ°£€¥€ª¶¹ŸÁÄ¹[§°®²²¬ª®®°®§
+
+}Ztz_tthcvz}}z|y||~~~~tpl`p
+~z~xy|phkŸŽ®©© ¬ª©§©ª§
+q}oksi £š¥§§ª¡¥°¥ª8'DW^AB+Zh~uyAf\v €¡£¬¬­±Ž¥š×Ë£}dRWJJEF9750/228<43/2#,+*+`lv£}£
+¬ £©šš¡s§»~2,¡ÂŸŸ®¡µÃŸÆÃÃ¿¿œœÄÁ¿ÂŽQRclio¶œÂŸŸŸ¿¶¡¡ ­µ§€2<D@DRQYZ\cgfggi`hbbh[ff|u°€­ÇŽŸŸ§°_`Im}o`bcf¹¶¬}lu~¡~€§»·² »¶¹œššŸ²zgfilfkk`Ihppmqpo}qqptxy
+g8AD?9.''3?LWRVUSRROQRQJMNQSUQQWLNSOSUWOID?8?HA?0%^[UYSNNY__m¬Áºœ»œŸœº¹¶Ž®£  €©µ·ŸŸÃ» 
+_š±°°°Žª­ª°®¥~~qRcz|yoicbf|tlkxy~|~|}~}|yslf`
+~~ytlidlhgµŽ²  ymh}tpl °©£¡€ £ª£¬²ª©Js
+#V[b}kg\Uz}¿ÁÂ¿»²°¬§¬€±£©ª¡š¹ËØœÊœŸœxyqsmSFDJ<53372/+/"Qh š€
+² °¥©mš»~0H¡¡©££€ºœÃÄŸÁ¿ŸÃÄŸ§~f^[igcghmt}§¿Ÿ»¿ŸŽ££© ®µš€V^`d_kmpoidffhid_hbhiZEv~\Y|u ¥xmy\€š©€° cLlfSS~|ztbOZtx
+·Ž£·¬°±¹q¡©¿»¹¡ª~k`iikko[Qmqqlpsq}opupvz~
+u;8?B;;8=A;ZZZVSRQQSWQVORSLSRNQOMRSUURLQF=<@MMUYRJ!b[WSSUQURMf}
+©»·¹¿ŸŸœ¿»º¶ª ¡¥¬¬°¹ŸÂÆœ_ °®±®­­¬®¬®­š
+vqfVcichd`[ci}||x|}~yupkg}
+~|zslcdlpZ<HRZ_lx~¡€¥£|dkF\uqtt|pu¡­¡ £€ª¥¬µ®©d=S=@/Y^iktdt© ±¹»ÏÓËËÊÆËÐÆÄ§¶­»º§¬©¿¬ÇÔÎÂŸº¶§ ¥š¥yhltdgofb`VH7'&3_h¡ © £¶±¥¬§i§¶yE}¬ÄÃÆŸÁÂÃ­d\cfgikothhss©Ü®¶ÂÁ¿® §°¶¥£lmiohk`^^_\bdmd^Z_^dq_fvvpvzf€
+kQ~}° v
+¥Ž©¡~dVy^d¥¡Á¿z3Dlol®µ
+¡~xf¡šœŽ}|££}b_kikmicHgokqomoy~oytutxU5@@?@A?5"OQ[ZUUOSQNRMSMNSVVRSSLSRONSSN@8=FQUVVRAYZZVVURUSFky§»¶·ºœº»œ¹µ°§ €­®²·ŸÃÁ·`±²¬Ž°±¬¬ª©€}slfd`__cimfgdbfk
+z~xy||}||ssllq£}~|yqk_Yk¹fz€O%&/+,.Ac|s[SNQS^pkqq|ptšŽ¥¥§€¡§­²ŽŽµ€J5mhd<MxŽ®·Ÿ¹ÄÐÊÓÓÊÈÓÏÌÑÎ²ªš¡¿Äœ·ŽÃÃœ©€§¬§¬®­£ ¡š§q\Y^dkpt}}vzsssqs°€¡­·©ª l©»
+
+ÃÄÄÄÃÂŽzYYOddfctovlmz ²°¬Ÿ¿µ¡¡  ±¶©§fhb_\^`gfigcbid\\c_tp|vyvtuyyzii¥Ž­¡d@vtmuszœ±hEv°­
+y¡yltd£©ºš­ ­zfdhlpkk[Jhommkpox|qssmxv
+
+
+
+m5??B745
+JMORSQSRUYUSNQNLRSQZRNVLUONNH?9BNRRRYU.
+UbZWSRUQS=hxª·®¶»¿¿»·±µµ§§§­­­µºœÁŽ^¶±šš£zvvtmoohglkmlfkgfdm
+ y
+||z~||}vvqms ¡~~xshdZmº±šu!"3DRimksp_NQMO`_[qqzms¡­š¥svmmmxx§µÈÃÆÈÆ»ÆÎÑÔÕËËÇª·°ÁÆ»š²­®¬ª¬ªªšª§yu€
+cd\^kqxlvuzyzš£²}¬¡Žª©š€i§»}
+¬®¬°±Áb_UVkighqu}¡§x|zºº¬€¡§±²§€Z\_^ddhlb`ff[_`Y_gbszvZJHmzxvsqg¡¡vUos^Ymikqk7opvkšŽo[­
+}¬o®
+k¡š¿¬~²­º£hhkkiiibOhopmospy~msvuux
+z?<=<990
+%MSUYNJIJNRSMMONOWQQQARONQVMJ?7BDMQQSSO%M^VWRSVUR0Yl­º­Žœ»¿œºµ¹¬¥¥§š­²²·ÁÁÄµ
+Zp
+yyzysppppopslihiclqyx|yz}}|uusqlxlmd_\y±»±šµ"%.;Zu­ÌÙ¥Wkh`MSRW^`bsxqv¥­ £€£`JURV_SI^c`YWWWYYZOQQWfmsqq|~
+ šºÁ·¶Ž²ª­©ª¥xmzmfcclqvvoy|
+y}£¶²u¬©šª±¬i£š}ugu~x£ŸUSUWkzu
+dlmgi¥»®€£ ²°¥€ ygZ^syyzlb_dc^hc_E'+Zy
+yqit}
+xMQi\IN\_uulO9h~uc^|qv
+²£~tvz¥­xtœ€¥­Ž®§~fbmklok_Ffppkkpoxsspssv}
+UABE<8+*@NUYRIUSOQJJLNJJJLF@AONOUQIF85INQ[SNWL M\ZZ[ZSOQI[y©±§¹¿œŸÁ»¹²­¥¥š®¶¶¿ÂÂÄ²bUhz
+
+}yuxtqmklmfdidb^_kxh~}~|~ztsos~bc_^vl¬»œ©º&%.8Ll°šZHBLM\[`__dyz}p~ª°€¥š¬fVYRUNHEHHI@FDHFLQSSR_^^hc\dgmikhhffc_`V_\`hmtus~ ¥lZixssfpogbkoopu~
+
+§£¥¥µÁÁqp£€šŽ££dosp~ª¥|phYUp±ÁuLLUV^`VpoygflihV[\[^¬»ª€ ¡²Ž§€²Ã±x_b~t|±©ycbc_gud_NJWblqiu|yulZ9/UNd_yvhN8@uu}q\ll^WRW¡¬°}SBox¬q£x¡©š~zgbfhlik_Lgioolllx~muptsvd99A<<20HQUYVWORNQLORQMNQJLQQVOJQNE;89ISSLRQV@
+Mf_YY[RRY^g~©±§º¹µÁ»·¹Žª§¥¬±²¶¶ŸÁÄÃ¹`V`||vxuvt`z~}~}yzup
+zssg^s~if
+§±œºœ37.9Ih¬»}\F4!
+,@MNVdsty¬Ž€€¡®šzyupuod`d`__`___YZ[VSSSVSOJJDHD@AENOVWWbdfgfkkips|m`t}zfgidc[b_^hh``kv
+¥§»µµÁË¿vo ¡šskYNNMm}|
+€pJ7EU
+ºÄIFRRVSS^^^VY`gcYU\Wc°»ª€ €µ±€£¬¡€¡£¥¡mg___``HSZsqq~VH_
+sl^WHMSvqzvh^mV^zZ^i<Yu§zRZ[mtlok¬p
+¡ 
+~fdfflllbOfloomopymsuuqy
+vBD?@;(/BOMSRQONQNQOQJONNRSWSOOQQJD85BOURVRSS3BiYVZZUYWWb}°°¥ºœœ»œœ¹°š§ ©®°µ·ŸÂÇÇ·_ft}m_
+|~}~xus|yolspdqhic|£ªºŸ¿ sp^i
+£ªxfQ5#!(,+(/9FJM\€ ­®€©®±®·²¡`\SUWNWYibWS^qd^bmgggf`^`ff`_bcbfcb_YNLN\uu|imfc`dc[gplips}z|x^HE_ xmsqsvy|cYmx~|~z95F^ÂÃFDHUWgSWVYOU^c\SSYQzœ¹®£¡±±¥©±­©£ ·§}uh^c^ISF~stsB.%3^
+
+tz`YM^[o~NROZxb0EIyºYQtzpbz pmktmy
+
+š£š
+¡yffgkihlcFgmmlkmlyoqssst@DDB<'8AQRYMNSRSNNNRQUMOOQSRNLNQI<2@JRRUVSUY 5d[ZUYVVW[b|©ª€²²¹»»»·®§¥£š­²¶º¿ÄÄÇ¶bo
+~dS
+}zzzzyxvou¡}upompv\^fc}§±ºÃŽs§ ohddVZJHD%""#
+"*?O\dox
+pbzicNtshmU_otm~©©€¡£§zx~t}opytvsillkiomptslvy}yx|um^WL=8(%!
+5b|csgWN9.lÁÔÔÂ²¥ª
+p~z£§9=If£ÁÂŽfFDVSNNW[WJLc`ZUMNOœ¹©€£ Ž±¡£h¬®£¥x¬©d`\km`U
+|cqlY4/B|sbl§qN/Q[Yv_&<DSVE/ZQ§}d_`zfd¡ox»Ëª®¶°Ÿ©®š~|dcfikmlcJfimmlokxtsvqqx}
+
+M=??='
+4DQMRSQORSONNQRULMOOROINNM94AJNWQOVVVU0_\YWYZWVVbzªª¥°°±·ººº°š§  ¥®²¶·»ÃÁÆµfu
+z}~
+
+
+zYIuz}}yxzsqoumsppoWY\cgq®¹ŸŸpt~ofc`klgf^c[fdttRSLA5'&
+
+
+%*&#3<?DUmof^Z[om[_l
+ŽÁš§~uyzykt£~igQ;8.
+!!
+
+
+38Ql}xtiA<*&
+8©¶€}Z=
+b|~uyx5?Iu­ÂÃÁ@;RRLFW[W@EW\OJLHf·Ÿ»©££¡ ²°¡§dqv¥£€­©h_^h~UZvvgME?4\ohJZDzM0=8OdZ8MBZS@MYxqœiO£slqyqu±»²®š¥·¬¬~zp~cb_dgih_Idmmqkkkxpqqqpx
+~E@@9*"AHONVVLRSNOLQSQRSORNRNOMI@4FLSSSOQUQVL
+b`YUUYWZ^c~§¬€ª­­Ž¹»»µ°š¡¡§°²²¶œÃÄ²fp
+~y}yutvuutstzz
+~~} pN<yzz|xxvqqu¡yxxmhhUR[\cfp ©°œ¿|qf`S<25?00&&%,33/;;EIR@@?DFDIJMRHERAB5%
+"!
+4;B</'
+	
+
+
+"(+<[xzS;.*4'0.%"!
+!
+	
+
+"*3i=&&@`tvmmdN9cxW
+
+
+m}|qpu
+R7@YºÁ¿Ä»g4ABB8RYS@BSWLBEMœ»»€ €±Ž ¡m£ub~xoE^[QDpqZ_`Zl|
+zkL_[_L@2=FS^ZhovMlzitz|ŸÈ°ul|y§¹|
+ªª­±²ª¡~f`iihil`HgmommmpxmppqqqO<?;.'IELORUSUORMOQURVRUUUSVQIB99FRRVUVVRVW@
+	_bYVUZYQ^dª©£©®®¬¹¿œ±²šš£§©²µºœÃ­gyyf8Hzyzvyuxssq
+~xvpi[OUW_blpv©¬·ÄbVUW4""/&+.!&
+#"!
+!!*(587B^o|mox|llvxE34AMD4/+'	
+
+*
+	
+	
+
+	
+
+
+
+
+
+
+*Zg
+
+
+<M[mup`S4.((2l§°;\}zqgmt89Hh­ÃœœÂÃ©D7AE=EIE==LO<A@|œŸœ»© ¡·®£¥clmtzovhuuziucRY\WlxWFI_^oxqom_Yb[toLu¥£¬cWh©££
+mtus ©bMf| §¡²©}fbfifhk_Iimmlllkvqspsty_@AB0/EMORQZRRSLOQFLOUUZUQWUOA<<BONQRURNRUY2
+^cYSVY[[^`}¬§€­®©­°¹¹¹¶ª¡££¬­¶¿ÁÁ€gz
+\(R|xxyysstpo zyus_WLNYkx~x
+¬¹Æ%,Vc?!%3,.(
+"
+
+"%
+
+
+%"
+!&!!'(/?D?=L\l
+§Ã€
+xhZE.!%!
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+ 
+
+	
+
+
+'#,"0s FAkpuqbQF7.*,,%,*Hœ²€ª~vvdF+Ohyº¿¿Ãœ¿»[2;=;<;J<HIL9BS¬»Á¿»© µ®¥šV\^l~pk
+z}zts mogZ[
+dLFSgm^Zy
+|q^RLz|sp^¹Ž`©®€vbO.;cmW|kbkyq £¡©¬~}zf_hfihmcHkmimhkovovvstu|
+
+oD@829EAMOUVNYUOMIMNQOSRWYSRI;<JLQMVSQOONOS.
+
+	[icWYYW[Z^ª­£©ª°¬®ºº·Žš€§­µ²»Ÿœ€iy
+ £zF"[usttvuspl
+yuugVDDMg~yzyš²Â¡&!,@%!#**2&!
+'#""("&&'**&+*%
+!("!!
+#("*'('&(/2@Wct±g?%
+
+
+
+%
+
+	
+
+
+
+
+
+	
+#(7%9t®R70(.(/02/,/.h¬ÆŽŽu~y
+ÁŸŸ¿Â¿ºl@EOJdVL`f\9RNq¶Ÿ»»·££²±£¥y~~y§mH=?hp_MLblUO}¡_Y`hbkh`¡hql[M²kcN!;f_oZ\f}kt}~}
+v |ccdghhgcNhmmimomyqslpuv
+R?98;LJSQSUOQQOOQQQRRSWSSOID8FMRNNUSURSUOH+ Rf_[WYZV[bš©§ª­°­­¶Žµ°¥  ©­°²ŸÂº¥mz
+
+¡z8Ruxvsxqoy
+yxibN@;S|
+~|uzxz£®Ÿ­0&
+
+7&'
+&"*&#""'#*&&"(++.%#'
+"*/'2*/+&&%#%
+!!!<MgÈâ±~qQ@%
+!%(9@E4'
+
+
+
+
+
+
+
+
+
+%&2O[YNY[NM=4.*,++43(2/%""!x·È¶ ª§¡¥£¹œŸ»»œÁ²^4??87/<VJ98B¹¿¹»µ µ©¡
+}v
+fxN8\pg~h^JBI`lqpvNM_WHWq_qsdJibUpQ
+#=Yop^II€²­®€xo~t£
+~~|ibgfgglcHbhkoomou}pqmvsu~
+b@=49IHSWYZVUSSRRLSMOSWNMHEFERUSUWUVZQMLO83
+Hkg^VUZZ[g £ °­®¬¬±·º²£¡¡€ª®Žœ¿¹ox
+§t,9oputom ~xtm_E8=Z~~vxx}¡°œµ="'..
+%%##
+"#"&#'''(,!'.2,(2,/*'*+.*,%'"
+&7*'7JQ[^\O7%./=FQD5'
+
+
+
+
+
+,Rc4&!'+(/*/.(('(
+,*"''#%p®Ÿ±§¬ ¡ ¬»Ÿ¿ÁÃÄ<@JB?<9<Q==yŸŸ»¿Ÿ¶¥ ¶§€NDB5,,989Fky
+xxt~c5htMSc\VANc|xyEON<QH£mtumA,Hhpsh+",Si\sx£¡€®¬}§±¶}}d`dfgfk\Hcilqkksvpttxzzt@40=HHWRVZQOSUOOSVSNOMLEEHHSURVQSWSZQRQL89
+9gfb[ZZ_`h
+£¡®±°®°±°µ­¡ £ £¬°°Ž²¥g|
+¡m+7*ospss¡ xsliSA??l|}yvxtx¬º»N%%"&3&&#*&'(
+!
+
+"""&#/+&!#(./3.3//,;20,'."%""
+
+
+(?IF8<9EE;,""!%%!"	(yfgN3,+%*"++4/+("%(%
+""!"%Fq ®»»»»ÁµZ9RMILAIUNL¿»ŸŸº¶€ ¹©€""%.;B=D79Lkqv}}[mW9\h^Vb_IEAFQ`SQMbod/5MQ~x}`M=V[\_oth4_tsVBftªª} §ºœ|~}|g^cihhi^Mflkkmmlsuuussx
+
+E2.;EJIQSWYWOOSQOQMHJHJIQRQU[QZWVSVUVWSL99
+
+dh_WW[_\i
+ ¥¥­°®­­­ªª©£ ¥¡¥£ bu
+
+
+zWd4gskx ¡ ulbM37Bs
+
+|~xqss|y¡¬º·B,.",Oyx~yyttusoilf\ZUQQE@<..*+!
+#!&(.00%+,#(
+%+0@EF=2,%!
+,
+
+%(#
+
+
+
+".58@=(*("#%,%!%.92*'(#&,/\Z+Yc!.%8o~vz¥µ  ¥±»œºÄÃ8INLSANUHf­œŸº·œº¡¡Ž®€?EHQUOJ?35H\vzM^v~g_dhd[LIB@,4YbldmoE9;@i ~`q
+
+~o`[mH_hu~xcg7V
+£~y ¥·»~z~yc_flhhl\Fcilmpqlu~suxxtsz
+
+
+h8.@EJOLRMURNSRSLOEDJLMQQQSQVZVUVSRQRON<;;
+		`i^UZWYZk ª¬­¬©¬©ª©£s~f\loy~€© pDl°°
+vf[F9/9s}ptss¬··FBE%!Y
+
+~zyspi[YOD4,(%#%'
+
+
+
+!!!,,%,29@5+&'
+%
+!(80
+DOUV\\\``YSZ8*#(,&*
+&!(*&B'!#f[v5_,!"Z£§Æ€§§©¡ }y£µ¹ºœÁ°I=JLWDNHLµœµ···¹ ¡¶©§DNR[b_[ZN4J^y_ikfuphzmZMDIOLDFpifySo\EW¡vmpqgB8Rc
+~sU^z£i¡¹»~~£zc^cdffc[Idllhhkltqpousu
+
+
+xF8LHLMWOSOUQQNEHHOQUQQSVSQRRQQUQYUQO@75@#
+
+	
+^mdYRZYYi€§ª¬š£€¡š©¡hbQ\oploqtpsoqmpmqoqvx~
+©©°ªª­£¥}bO07,?t
+
+~ytssuvšŽµIHOF%Mz}
+|
+}xoi`N7#
+
+##
+&*/(3+'8JV\
+2\
+(fV
+
+
+
+*chfifdf[^OYS.*!(%
+!Mlyt3k!'ogs;s@!O|
+ª§~ÂÁ§Ž¿Ä»¶ÂÂ©uy°º¹ºŸÁ;?EF<FD|¶Ž·¶ºµ¹Ž°¥€fhgdhcZYJ;O_ zi^gg[lyxUF4;?SSFv
+}~~`ppJH[zEQIWE?(8/izcqy~}vu² £
+c¥¶¹y¡±· ~c_ghggk_Afihkihhq|osvxss
+uMLNOZNUQVORRNRUSSSWORSVURVQQOQQQRQ428;'
+	 Jicc\[W^o
+ ¥€¡¡¥£}fiz~Vk}~zmmqu|ttuyzz~~}|}~~}zsls§ŽŽ§šš§f=
+%+2u
+
+
+}zyuptvš¶°?
+@VZ0D}~
+
+
+
+s(%5c&
+(#!35,#'.*/R_c
+;h
+2kU	'`igfigd^YRWU0"
+&+
+&.
+=0udk9xf/*iy©¥|§ÐµÃÇŸ­©»Ë¹z©Ž·»ÁŸµ[7DQ@<Yš¹±»¹¶¹»Ž£µ©€Z^^Y`b^YJ/LNqs\m|upcmby~hB@0.HMLpklY[_`S=5` }stM@%#F\R9OQQNJBY£ t£­¿µ·Ã²~d[bkgklcD`iigohhtsmsstt}~
+IIJMYSURMLSRRSYRUURSQWSNURSROQSQNN!/;;0@oh_W_[\u¡¥§¥£~qdbt~x`bmdbVVV[ypb_\YVSY^_hkqpuyqluª§¡¡² zi4!%,^
+}uqtofuªŽ°;(@OW'9x
+
+ ¡HF^²`
+"<</&,/%N¥'
+[*V¥
+	,bdfgcg`SJOQUFN%.#
+&s~utm&!7u\f0N3N0WSd©µœ·®  ªµ±
+¡°¹¶»œœDOVWVt°¹Ž¶¶¹¹¶²£¶ª£\ffl|fO0MUl~mNRlz}mu}lH??#I\dSDm\A+H`SIBOYW`iiYS=+4mvyE<&&2"0g¥ªz`f ||€ÔÃ·|
+ z
+}f`dkfhibDdlpiiklutmqtqv}~
+
+yIIMOZVRVMNRRRRWOW[WUOVQROLOQNMSQSH9885
+
+&gmg\Y\\z
+ §££kcdccstSN[[ZYSUYyzqod\ZVRJE?<48((*3Iº²p¡z©¡b^.
+,,B|
+
+||uttsy€Žª35D?&uz}~
+
+
+4d¶b(%+
+pS/3*%++N­º¬8\¥?V¹¥'
+
+	7¥
+vf`QNLN('"
+#byF!"
+Fs_i*.3kv5i
+=g~~
+šºººµœµ[ISMYµºŽº··¶ºŽ¡Ž§¥
+q[*UZOJJ?/s_kmlmFA<OJ8HO=,4(+*._I;EuVQN;@_hJDiok^bE!?'+S`v|Ž |i£šy§}
+gcu`bbhbgi_E_mlkilpsssqttz}~
+|ILQQSUVVSJMQOQORUWUOOYSOSOROVUVNUB!42?7*
+iofcb`h~ ¡¡€¡xlhcduz_Z_V\gbMUopos}gO?8+&'+&/"#=5·¡ym@`zWWA#!"%h~}
+
+~}|vus}¥µ£*8IR"/ky~~
+
+
+
+
+
+0V¡O5.3=
+
+fdL"!#J¬'^+Y°
+
+
+
+JšºŽ¶¶®¬šš zl2,''+lzs#(#Fppm,/\<?2
+Otpt}~
+š®š·»·»»»udfcp®¹®¹µ···µ¥Ž€¥|l\(NZJ/4B?q|uhct\=9V9?@/kM590&L9JEfSV4EWdSSOWQo\3+O^Nd¥¡š}h€hs
+¡zg`^iikhdA^ihoiimqxpqsps}
+zQHINQSQWRLNQSURRVUWSRVSQMOSYUUSSN0%8383/
+
+
+gsph`bo
+ €§ 
+zusgiifdgo|c^[[cmffcYR_tbE3/+.'*/*,#354A`dZ}Z€~}xhUU*
+'%`
+
+|yx|z|~
+¡€©¶š,7^oMJ^y~
+
+
+
+
+."D24'
+4MHB
+/.~"=!
+L€
+?±­®ªš£¥€¡!Zp2**q
+|~*"(Mby`%7q(+#\xt~££¡­µ¹»º»vgskx­œ²¹·¶¶¶±¥²££mfcikszk4LR;3ORQ^bhcvzs\YYVmN.0"L@NM<(00J^bybkfH?DU[`\MU;?MFB;Qg~k^hm` €hq
+š¶¶§}i^_fdkgcFfkkpkmpmtppsup|
+
+
+|JDINYUSMNOHJMSORWSQRSRVOMSYUURNU=,.3395.		Qoqid^t¡š¡ysvtofhimchhhhqt_SOV^i
+[LJV\J;99750//720<5;DBR}€l
+}~ylhYQ"
+
+&9x
+
+
+
+}|u|}x¡§©¹£,ghx~
+
+
+
+(
+
+"!'&
+
+%U#*(
+
+&35
+@	+oY
+
+
+
+
+?€¬¬±ªª¬®²°¬3YN,2,ixpt*QYx=,l§ªªt@'0##hxt ¡š¬£¥ ¡¥ª­±¶µkt¬¹®·»··²µ¥Ž£d^`m~}U\cYq\?@\fqtlQ2,LVVWJS<&BQ@OVI'2O^lMOQ`HLIUZQLVM`
+vM?Fp
+tpzv`Rvib£ ©~ytqss }g[`fkilcIchoolikpsmpstox
+
+LAHLSWSRLUHJMSRNRJQMMQSORURUVRWQ2"',,274
+
+=vtmih}
+£¥ }yxvomptosokkhkhkdfk
+tb^bc`dqkVIUmzmYH=??88<98==AIJNLZ±zx~}hf^Y?Ah~
+
+~yx|~ ¥®œ (bgx~
+
+
+,
+!
+
+@F"
+!#	
+
+
+
+	
+
+	
+9`gdmu€¶ÂÈÇ¹šR<.37q~hl~l
+
+ORqc&8¥®337+3p|
+y}ª¡  £ ¡¥b
+®¶²»º·¹Ž±§µ€g^UVq~xdb3DNOstRU[g`VusF.9@=MF^SDiE7H<77<L\ltY=EQgN[^RZ=JWRZ~~Q=39bUy`^xob^cq~hRkuxft­¶|
+zz~k^bcfigcAcklmkmkv~}|
+
+|}¥£§SJHISZ[RNOOOOOFLRLJNROUORVRUSSQ2!+*/78&
+ioqih xutvtolkssquomgkfcdksv[QQIBA=8EkzdM@D=D;=D@IBMLVOQ\
+€€ypmx|ld`Z;,kyz
+}}~yspzu¡§©ŽŸ'
+R
+
+oqy~~~~}(
+
+
+'\2*%"#	
+
+ "#
+
+
++&
+
+,Ff€£ss;,7vxqY
+!
++8F'&5¥¥^+
+!2(5ktx}pª°­±ªª£¥¥£ £šx\gt£Žª¹±··µ²§Žcd\@W[Wd`AJVNZ[OOZcZ9IJI7YmS,HFQHWpbyZ2=.UcdZNQZ`?EORbY@=fgiqFE539I?Oz~c_dMEN^bcpx¡°
+u}|
+
+~h[bdcgi`E_lmqktv|¡ €€§°¥££¡£JBJNMQROONYUMSNROSMQSROORRUSUVF'%".492
+Wsuos£ vuy|~ztsspmklstpmolku_MFHUE;;IzxdMHIDLJHHMIJJQQRO_lhzllo^m\Dd~~}z~|z~yzpusy£§§Žº'Isl^kz~|
+}2!A[*&&
+
+		"&	!7#
+("/OO/<ª²¶±§oA&;.++A§x<l?(7'Dovoy}py  ¥ €ª©¥©¥¬tldx¿¹€©§¬­²±·±§² d^b\Wpk\EYVH."@S__ZD7[`'[}u\<W7&VtoQ[V+/L@\bb_OS^A(NOEEEJf[m[?BWIOV<3Smph[VD,3QUV@_ov
+|
+~i``biipcB^omgsxu£££§¥@FMQSVOOOQNRNSIONQNSUSVNUVNOUQ
+
+!*583
+8uupz
+£¡
+|xy
+}vusu~}ysmhQF9_yZBHQLAI?SycQIILNFLNMMJDNMRNZ~qO85fB0VIJyzz}~}~}||yz}|ummq~ £š¬µœ,
+=i\QOJdzz~
+
+}&
+!"
+_?+"#+	
+!
+
+
+?,&"9U^kmhhzD+8š­®Ž·ŸºŽ®207s£iQsU%0%Iqvt€§u}pghihkpqosuz|xoo~È¿¬©¡€§­§§±£dccb\ptbQmOH&7@DOf?0YW^vhx\fp~x}L^J8OL8cpggYYdxlci`4SQQ#AE*7dYbp\Ohl_hilSA^sq77U_cxvlt€®€|
+|g\dcdihdFbihuqm£¡¡£š€  §ª ¡ZIJOSRUQNLLJOOMUROSROUNURZSVV.
+
+%75/&
+kqt
+¡€~tx
+
+}kcRI=84<O}s[BEF<8@DW
+iOIILHLEBLBAIEONR\~qZx°M&/
+OD#oz~~|z}zyyxxxvqpspu¡©š¬Ž».
+F\_d`^y~~
+
+
+
+y(
+
+
+
+
+<[
+2
+
+
+%*
+(Lbimpllhk|~y9+9€§š©ª¬µ·²­c0Dª»»»·°ªš€[+**QquvŸ¹u|svtqomhhghchzoktibkvŽÔÈªš§¬b`c[[diL4MM@4,'2?M0Rt£lhoYH0\fVQM9DI=M=MZJSdQ=Ush9Q^O9%#!&JSb[Mch^gqc~}~qhcO^fffNWkuos
+zzmV_dchi_L[gkmYl §ªšª š¬ £HLLINSORMJONQOQUSOQOSVQVUWV3
+
+#445+
+
+Iqv
+  
+vtkc[RLEB?=?=YqUNHFIIROZ iVHOIHIB@@BD?AFFLN|\4~IJVBNNs
+
+b}}|~|}}|yzxy}zzyuqqpy€§©°°Ž+"!_zy~|`v~~~
+
+v,*
+!!UL
+.##		
+
+	
+
+;hyyz}|yzB/<§šš§ªª§š¬¥@'D®¶¶¶²²²®§E+.+`v
+šŽªzxyuyuvtqtpto[^[kmumt­Ä €£d_b_\ifL;5MS<'
+*.??ds°©om?0/@O_`RFB#
+""0d\BfA%+FB=J_bJ5`,+7?B=39BDh~x}
+zghpNEOg^iumzz}y
+}hZ_ffkggH\iic\cv¥šš¥­k`MMMQUQNOMUVWUOUYRSUUVWUI;'
+	
+"470,
+b|£ytlkZ^\b^\YYRLHE@=W
+oSZ[_ZZSUb x^NNJIDAB@AA?8?FEN¡~F^qfJIF?Z/
+S}z}y|z~}zxy}xxtumolu
+šªª±±­u%%kptxz
+
+
+
+
+p,"
+	
+	/c3	+
+
+
+
+
+
+ 	
+
+5gpokmz|~A+A¡­©¬šš¬§£^.,.}²·Ž²µ²¶¥A,.o©€xuuuuuuxvtdD8AMlv`hlgpsyck~l`M|h`bc^kihc4QZ?9*
+<<i±|p^
+f0*795SZ`D3=(BY0!(=</UgfZB+Y80/OL4949Yuv}zggmhms^S^p£p|||
+
+zh[_bfgcdE[itlYo§ ¡
+~umqicYVUOMQUONMORSVORRRL=%&0
+
+
+"+042&
+	i~¡€|kQLY[Z\_bfc`bc^VLD?D\tWhcb\[\QSm}cHMIBA==7A@58?B=W`fuD`vOHd9Dhx}}xuvzy}|}x}|||zxylopv}§ª°µ¶t'+pyo}|
+
+
+o*#
+
+
+
+FN
+%		
+
+
+
+
+Ubmuy}
+F!I¬°±°®¬¥©u+S5Nšº·µ¶¶¶43B¥§£ |A#VW+(EJLvš
+
+(v§€xVYp©Ÿfbb^^dfhdZc`OQSF/d~xZVRVzoM9.<7HRkiOR=5NqxyJ04/WHYY92%/^L?J`=BNozoZ7Dohlovk~€°° ~~y
+|zgZ^`cghcFcvob~y
+ ~lqqqpmllddYVLABD@AB=<94540,#
+
+
+!+4934'
+It£¡ymidVF?I^`^Zcbbhfdb_`d__Zh~mZkigcgfZV_}`NND?B<<;;98;;;D|¡sqbi_zMQ¡o9d8_yxxuuv||zyuzzzxzyyukksx ©®¶²t,*i}qmv}}|~~
+
+
+
+k/%0(%"+,"
+*(
+
+
+
+
+  vz}¥¬£M'F °°±®¬­€?4º2·¶Ž®±®H £¡ š¬š£€€§£0#\W2^z°ÕâŽ;z|L¹¬FbÊŸf_c^`dchfhf_`ZZ[7_qiN=\@NZI8&785LJD[dE,;88J
+8&
+/7*D4%
+##=k§Ä¿­§yMcyyhvlgszuo¡°yx|ux
+xdW[`bckmsxixlq~iultoiptlqmkdbcVS;3<25<@?92
+
+
+"*/274,/?U`t€¡|uocb`cidcD9R^g[`_hgdkklvtsi`cdmYlpofib\V_~_LMDIB;?59;74;<;}zc
+z}d42ktvvxz||z}yzyxxyxzutoqoy ª²»¬yq3
+Zxxzys`yz|~
+
+k'0+7848A4!'/847(%"747.
+
+!
+
+
+
+
+ 
+/
+šzd4**dU(vºÂ¬2J­»œŸ¶±|€¥x¡¥€[+
+8lW¶Ðåå·ªfHÔëÜàáæÑŸcbb^Y^bibW?<LZf[Miy`Y?`LVU9`F522((;IO^\YWRB&+4'(HD!3c©Á¹­»Áºy€mmmqkLcmyzxy
+
+}ziWbcmzzpp
+
+olmsqotsqqhldfh_b[OE@<77<;5
+
+!
+
+0254;JYgkm}£
+¡}hfigkfggd^QFJ_b_chqxy}||}zpldck}g^sslohg^Zcy\QEBHA??=850.0<<Euf
+p(4!\qvxyxxuz|yvxxz|||xqspo §µœo_Fuqsmk\}z~~
+
+
+l%0538@B<If(5AFHH%=kkopogJ
+
+	
+		7yš¬£££¡vsi."([\"f
+@+kW\mu|šÔ||}€¥f+%3E<^¶Ä·£§ÁØâæáÑŸ§i`_^Zcft^=9@QVYWNVR^J85Sdsltp@ZVUOSMYY^cRIN3
+
+229*
+'/<+80&,?q±¬ª®Žº£¡fcyzx_?HVWutzzzy
+|k[k
+sv£šmmkpmostqpkhddd_^WOME?5/543	
+!*+8LMY\_qqx£
+¡zloikcdldf^HBVkpvy}~zz|z|}th^f~}h^oomkdfZW__NJHIE=7?;72.8502s~k~mop58Z@^vvu|xzuyyz|vxxyxyyotpv}
+¡ªµ·ziY'+%7dlimkLuz~~
+
+
+
+d";MJQWZ\`q'Ng^`M
+Qsxzzv_
+	
+
+Szz\%("`
+
+p.%Sg%8f
+||hLNZ_h~ y~|vZ\€®lYI=?HZ9204JNOWs ª²µª¡ bbcb^fidMAguf\bfSZR\cYOFSsvxWB`gbSRO\_fU/ %I[?/=/8Mc=#F©®š­°ª B_c\[mhdhfD'O|dzx}t~~
+
+yq`ss
+}~|£ª¥€§ qvosmsspospghhhb_WSJI=5;457
+,;IWUSW^|~€¡£~lolhkhihoolkt}~||y}zyqf_h}|h`qqssmfbV_~bMFLD@92;422.00*+s~mzxvvmmfOssi[duu|xyy|}x}xzzy|}xtqsttu ¥Ž­5
+!'0%%,(2298tyz
+~
+
+
+
+
+
+c&#S\\[WSZm<<^\R8
+
+[t}v}Y
+	
+	
+4s
+
+}yx?"&%dy@AzuB.Upvsospilhhmvmdimifhlf`_o š¥sxxvvh\dhou}|qtuxyz|§ddfpxkftO+NVJ;RdW\^gli^[VSUkcO[J??@OVS8
+   DtUJZN?E}\9N`dcqxzsbls2Z¡Udhhbc@*J
+€š­§z|~|~
+}hkv~`tª§¡¡š ¡¡sqsolmqpmqsiddc^[SLLA<5;937
+
+
+
+
+''3HR__^l~~ ©¥© 
+plqql}}tt||y~yuvog_d}hcouqmgi`W^~cMBD??;59@7*!
+oxuzvsoqug&gv}zz|xxvzyuzxvxxvz}z||yspmvz€¥µ%
+"#""&'"*0.,h~|
+c'~xqy|Z`|I;}oB
+"Lgszyy_
+
+
+0x||}zzz}~~f!
+%b}|W&k~ttxs}zyz|vsqos
+yuxxv|yu|£©¬¡ticf\fioyu£zthlut|}~£¥¥dVYLUbccJ4DM5/Rb[^bghfLBEAQSE4E4,*"&
+';MADH.W€fUS5S\[ZVSQ0*Z¿¥Rkkkc_AF
+€®ºš~§¬­¬®®¬ `^c~yxp[g|
+z~xz}z~tsqspqlptoohfcd`\\LMIIA9559
+
+
+"(;FNQJ\}y~££~¡yzv||xx|xzzuvtccczzhfpqmlmi\[`[JIFA=220*
+qxz||z}^Nzuxxyutsuyszxyxy|zz~z}yxtpqv}£¬Ž!"
+
+
+%&3.+c}~~
+
+
+
+
+~
+}V+š£ª¶¡kVS.s3Uptuxuv`
+	
+	
+
+@sx}y|xtuux~o?
+#BmssbH|¡£§¡   ¡~uxuxvxssz€š©¥|sk`c^_cfpldWzibou|vx~š§¥`[b^^d[hf8@S33OdZZZf`f_@2,04&
+;0'5,3=*"@0/?/8;;,*\¡q`NN?3!5F4'@
+yOkgkd_<
+E£°¹¡|~qFWg}xzzxloy}xz|i\\dgioiihlihooqoqkqllstolmgdcd^[QBF?747=7
+
+
+
+%%2ENRJL^~}}£~su ¡
+}sq}~~z~|}yyxyxsx`ci|idsupmqg^YdzQJE84*
+
+!
+*uyxv|xy~\ivuuzxvsvsssuuyzv|}~|zz|vsssqyª­Žp**/%!&(.,+*'Wz~~}
+
+
+Y&7±œ©qhO[/s3(coqmssmZ
+
+
+	
+
+!2Oc<37?OQVV[YbdY<?<A<7hmk77m|x·º¶»º¹¶­š§¥§ §š°°µ¶µ©tqpqthit¬® vkimgd^^\dpkfdWRyvY=JNRU`yf`id_`\qh<DR;;Qc^^^gfdc@&9ShiOZmiY7
+
+
+
+,##!FWWWN!0!QuQ#,4;HM/&?%,Ridgd_<F| ®»qsuzkl|lFHJL^qqztxxps |
+
+uxpokooompllifbbcZNJE=<7?dh"+8HQLIQW~ |~ £
+
+yts|z~x~v}z||xvphfiyvg`spoopg^[hxI7'!!"#"'&00/.qu}xyvxxuzvyxyvzxqsyuuvusxxx}zz|zzytsqv~€°°QDRNLDA?=A<B?'Oy~~
+~~
+
+
+
+O'+q|zq`bUolE_z0
+[kpkhikd
+	
+
+*FJ(.&&FB@=BADDEFAE9?HA=;47<N\k¡ª©·»ÆÊÓØÝÞÞåååáÕ­zmip~²º°yfc^\\b[_`^^lshkb__dgmosv\\b[[\bmgABJ98O_YZ\dbdb@Ylo_|g< ! 	=VSWWI	4&.kQBIONFLO3+7"QfffcV=I€¬¶kpsgd
+}qQAFOct~}mhk}mz
+~
+xlzykkhhkimlh_gmlqmmkmmoolgcc_\VOO@;=<Nvg
+
+
+"/2FJJEJZ}z
+£
+¡yxu~
+}~
+}|vyxzpf``zc`pmlhib[SfqQ4354=33=;<+770=43o}
+yuxzvyyttxxtuttyzutssux}~|z|zz|vsqsx©Ž­5FLIMSOYY__Z\<<v}}~}}
+
+
+
+
+O%&h|vkWdR~u^?~7Qdifkld9
+
+
+
+!\Z22'48A<DAB<EJE@?7278202.932@MUSckhquqx~~y¡±Ž¥tt¡×èóóê§smidgb\ZVQQYZRQVZ[__[dfdkqvuy~\Zd```bshD7H83L`bZ\bdc^E	E`mx`ZF7*	   
+
+
+
+*<7
+ =DJSvMONOLZbQF5#Ocdd`^7?£±·mlpkiyxsW=DFUu||kgYs}tz}mk|icb^gikqvvsxqmmkkimmplhdfd[[UVJ<45@^|g
+
+	
+
+	%*0EAEAAU~~|pu~}~yyz|}}zzzxxugf`zygdphsmgbVFNfbc_N92987423234587<;5gxyy|yxuxxvxvutpssxuuxpuuq|yy~y||zxtutx}©¶¥!Yb[WYSUQ[WVM40x
+
+}
+
+O#"gvkd_fh~xc
+!to&Fpm\Q'
+
+
+
+
+
+ _S+&',B9;@=EALQHH==45;2/459;0/,/.3*.BEB43,".5=ERNU\cflkkg\ZU_fdqm[QUWZ\^UZchilqtpqltilmmfc`[_ZSUSSVVWc`[_`xgA<N9+F\b^`c\_cF
+A_`ZEmb[L47
+      
+!  @WLL__mbV\ikqsuvf(&O\fb_`@<}£š¹igmqiyxtq`75BWpv}shOWghfkoh}uoz|v||}yyxxskoklillkmidifZZ[YNJ=BFq^	+7DAB?;O
+} 
+
+yqq|z~~z|y|uihcdt|icop`ZMB7'9ScfgWIAB@BEEFAB@99E95<i
+}|txxvqsvxtuvtpssqsvvuvu||yx|}}zyvsup¡ŽIVNMIHR^_UNJ8(pyzz~~
+~
+
+A
+%gqkQp[~xg'
+ZgS^H03&
+A'
+
+
+kW%,.il
+
+?fU',778285773903=897'2/*3looim[%V``[\YRND'!/2'
+
+&"('02824@8@DJNLQRUSUUZ[^`bgfhlikm^[bd_\_skE?H8+H^^`^Y[[dH
+9^fZYZR\c37
+   *7	 8QSUcqmzuutuy|y|yk\O^`b_\;"9}€šµ\\hokuzppi=4ASpvxto^LEUdkkq
+y}
+vzyusvu|vvogmhihimmmigbg^YSMIB?=RY
+
+		',7AEE@4A®
+~py~~}}~yzzyutshgbs~m[\M7557;7DRcifVFA=B<<4334,'+030,i~ytyuuqotsyqtttsuvxvytyuuyy~|y|z|xxquq~€±
+[ihfkcmodfZZ@#@dtz|
+
+
+
+
+
+
+z;""boZOsc|ysgS_vv[0
+!	mv
+
+
+pM++'mp
+Hzd
+	!#,Yglkkif^_YQJI=805NbdcbN5b^iqidZcL[SbWYSMH;/'%+
+
+
+#&(**,.5<<@EDE@DEI\_cbV`^llJ?F73J^``^^ZcfE
+<fc^ZYORZ0;   	Y(  "
+ 
+
+Smm^ot}zy|~~~tY``^\cIEUlªŽ¥hZdsvv
+
+pusB03FhqlfihcSUR^fsx|~
+zsqlpqxq}~tqolmkmkqmifdZY\UQMB7<LqE
+
+"!.3=ALNFN »±
+qv}~~y}}||yxsuppf\Sp~hF=HEEDF=<HV`cbR@5/*/*!%#,(',*;?Dh|vttquxyuqtsuyttuxxvuxyzz||xz~zzvvovq¬±}2ilhf`cd_`gUbB"
+*%4AYdlt~~
+
+
+
+v8"([[@cc tU8(*%
+l
+
+
+
+
+
+*lL*'7}o
+ Wi#"btxzu|}|zyyyqtfWOdmolI8__h­vfR_O`YW\\SIAB887/.,0,,**0&%&'#""&
+
+
+	
+"^Z`d[b^viD9E;0NZ`db_Y`cI
+=bb_\UMN[/2     !I gxxspuz}~|upibQQDH[d^^`N_lh¡§¹ªydbkvu
+ypoH&*9Yhi\YRZWQZfimt|z
+
+ttytkmktpi~likplkqmmlkffcdb\[VOD?Mx2			%%,02=EOMQ
+¡¿¿¶¡~qt}}}}||z}yytshZH=8m}iIFNILJMFDB`dicYA3.(0((%++.0/,.0&c|
+xxxuptsttuuvuuvttuyvy}|zyxv~yzyxyzqtuª­±k;vytlopoqomlpM*"2&!"#45OQZcsy|
+t/!'gkcyy^=*'&**(/9
+o4
+5zJ(.Fp\d
+*\yxy~~z~yto`_ZZZYY09bhmvoodVfObSV_[ULA4450(/++*'*/,**'00**2(/%%+"#"(''ZZgd\YYsiI3OD9S\dbccYcdF	<_^ZUSLJZ/.(    
+ 'u
+~~xxvphYM;//9DLZb[fc^b[fhl¡§¹ªzuocquusS%*DSMLIHUS`kglmttu
+}v~~zzpsi~gxuNhymqtllkqimkidch`_b`[Q=<Qy
+
+
+!&,8/0?HJQ­»»Á» zpq}|}|xvtgbONFEFFq}hMSOMQVVJDMbhcYO7/533+/,/,.../3,+`}zxuuuvsuxvvxsuuuuvuxttvy}zzzyzyv}}u~u­±ŽSIv}ztpfkmiktyO+!
+%
+'"/3/97=HSV^bbmshhhffc``A'%"WWVNA,!%
+#',/(
+
+@Ds@		
+=zE,,Hm	`h
+
+
+<\xz}~~z~}tqptghdMQB?clfubhm^iWc\[c_WNJFAAD;=24325&'+,/%&+#3*#"+'+@@*"&*,2`W`bZZ\piJ2U@8W^^`b`Z`hI
+;_^\YQMAU0+3     
+ 7}k^O?5.3;HO^^_cc_ZZ[^dlggk£¥¹¬xtdhu~zd4'(9DJUOO``ghk|tz|pos}~}yup|usVMhllklkilkplhhghh\[^UUD<?l~
+
+!#(0957;IQ±œº»Ÿ»°
+puz||}~xk^SMLRNOMINIo~kNSVOUVJJAFZ`b\F9774//2,002*24857d}xztvuvuvvxxxuxvvzqstvzyyzyxz|zz~zzy~t±µ¬5Dc`_UOHOVQZ_cA
+
+
+"
+!
+
+!"&'#&&(**554=9?0+/%%#','%%
+
+
+!
+"
+
+AZ!
+
+
+3uB//Skk^ 
+
+2A<I|~
+~~~|y}yqvtqmb^IDbmlzSkk`fWc[\\[UMIFBD?=@75=@;;5<?;;82.8+&(2.0US5*%,_Yd_[YZlkH2N;5\`^`___^kF
+7WYUUSOBM+3;
+  	
+
+  Hl`L;(/4<DQV^Z^Z\[[[[[Z_dlkbdhš·¬vvhgtx}J."42JVIQfbdqy}qy~mbl}|oYcu|m_VBWhooomiiposmfdd_^^Z[[SD<os
+	
+!((4.03?Q[ª··œœÄÄŸ®
+zpttypdWMNMOUSRMORRNMo|fVUOIHB?<=HS^bQM@5;35452457;A87;=f}~xzxvvutxytyzuxtsxuxuxy~z|}zy~z~zvx}ypµ»§#
+
+
+
+	
+%!(/"?;!%%%&%'&!*(',''/38B?70+.
+!
+(+92!%
+
+
+'`39'
+
+
+*&03?_@^~Q!,*2F~
+~~}yyus}|tsfcMLdlpºoociSf[[^[YRJDA?<8<959795327088;.85/*72%7(0/%2%
+
+_[dbb`^ghL2S<.Z^__dc^flI.W\VRQFDS,+?  
+
+
+803<IUVVWZZSUQU\\SW_`Zccfidbhf¡©¹®yvu`do}[+(7LONYVUOhkhflmthQf
+}bV_gdgV[dlmpfhlpolkdikbY\^Z[^J@kk
+
+
+",*+0937?Nªª®µ·¿ÁÁÂ¿²
+
+yi`dYYSRYWWY[W^W[RUQOm~dQLHFB;=49@RZYRQD94<77<<DBEDFBEISdxsvsusquqxtvyvyuuqxuxyy|zyz|yyzyzuyspqµ»"3999282.29//
+.(#".0&HL( 
+
+
+!,#,4=885**.&*%".3++!,A<	0qIJ/
+ 	I2EN	
+
+#,3		 @Y+
+!+&8q~totstqxx|x~~x|zlgS'Eikf²_lmkUc`f`UULIE=<=;=98?@=4<9@43922D9+(92#B.4/+8'
+"^[g__RS^fM=RB0R^bfb[_fgI/__SOOMMb/.B'
+
+
+
+			&FQSORWSUVSUZVWZ\_^d^c^idcuudgfš·€
+xz}cVYu~v8%AZk_hk\YW[VRYfpq_Oovliglof_V_moppomooli`fhbZ\_b\b_F[`	
+"(*,0./3BR€¥©Žº¹œ¿ÃŸ¹§~yqi[RVY^Z\^^\bY[b__WURLEi}cFEABD@?@9AFRJF@D<=;ADFB=@A@JBMILbvutxzvyyxxuquyxusstttuz}z~~~yz}xysuuu±¹!f}~~~U,,
+&30/(30/'		
+S2
+*O
+#
+
+BO/++(.
+BgiN
+
+2l=<	U;[s+
+
+
+5`=705M/
+%+[+"0bquvttpmpqvxyvvtxuoiZ*4Ub`SDdiqhUc_gbYLF@=07439?=825.;;83987/?80"4*%?3+5.;&
+*5UD@</5LfgL;M=4Q^^dbcZfgH/`dcZFAS[4"E+ 	
+	
+(BVSOUUVVR^V`\``_^^^[b^dfbdidif§µ©uxzfRQ\lszILcfWR\ih_c\J<If}xNYtzxtlulphiifhmmohkolhgdfb\[[ZZ__hspN
+'%./,/4*ARvOg¡­µŽ²µ¿¿Ä¿·~d`YSVZ[[[ZYZ_\VY[URJA??dufI?F?AD7=9?IJMJHAD957<58?FDHDBAD@b
+xuyyytutuxts}vysuvvszyz~}|||}||}|zqumx²¹~0kt|xv||vyxzvtJ.((#'+.;[khgZ,&QUR9%
+VA
+!U!ZfL%%!0!
+?VWA
+	@"
+&.
+!"0 =M	
+Ed8.0Z~M
+%23`EOWhzyyvytutsqvouqyutmp`&
+0/hpuqYE@NRUgmRA=A<984958854/00,2,/4;@/((93*_2,,72
+5E8ADJOUgmhM?L@0Qb^``[\gcJ
+3`ccQEMd[3'B0
+	
+
+
+
+
+
+=VZSUY[Z\_ZZU\W\_^\__^ihdff_mmš¹©~uv|yNODm¥¥¥V7M\\Z^_qsllcZ@BZpdDWk}uxppllpqpqkdhklikiomkd\\YYY\ZckyxL
+
+*+*+,04/2NiSHASt §¬²»ÄÆÈÆÃÂŸ§
+`S\[VZ^```\YQNIMDBEEHuREB@H=?9<AFMYWID;720?=;A=A<=87=<<^vx|xzyvzyytvvustuvxzxt|~z}}|yy|z~xptkxŽ·dHomliffooqlkll;4+.%+3,[hkdcW//^bhW.,VJ
+
+`&		
+BQA3+&.
+
+(+
+
+9'/."
+/.	
+
+
+(B/23Oh.Rh
+	
+%.3<AYiYR[^__dihqssb/2.t
+oZLLHI|^W`koqggiZYSNLLD8;7;4DD2"/@2%N,+4D2%LB7_dfh`cfhhL,IE3MfdY^W[cbI/__b`OYf^<*@2
+
+
+F\YWV^WWZWYZQYVY\W^c[\cl_igdhd¡²°uty_EDW ¥©¬­d8JE_ZRq|xsmd\@ELhsYEHglpkpmpomlohgpmlhikkkgcddb\`f``^mzN
+
+%%+++*44,SRHNURUZ^}§®®·»œÂÇÆÎÈœ¡fVVWURUNQIIHHHADBB}VIIDEAABBLLM[WQFF@98=;9=773=5=@;;_u~~xxtuuxvxvxuuzvutuzzyuzyz~vyx|~}vzlt¹µNRkfkdfdhhhgZWH&/*,9727Vliil_.,Ych_/.RD%
+ !O	
+
+ObQ44#,,E?+
+
+J%28
+*,7
+
+	+04+EV(
+
+WY
+
+BM.	
+	`ush/3(LV\fZSYUZY^vc`}
+~~zzz}~qyutspiic`UIE8=7437NhpN=c_`dkhc^b[JNF9H_cY\YSZYE
+'^d`d^[_bSOU=
+	
+
+!
+
+FWVSSVUSVVWZZ`^^_YVZYW`ggggflb š®qpu|`;9Dc
+¡¥ªªŽµšsI9WRHbptvlf_\YNNvzviW}spuzt~x}vlqgklkkfddcdddZW\_dhs~S
+	
+
+&!/(/5,/'[;<JVO[cs|¡š®²·¹»œœŸÁ¶¥sSMNMLLFDIBOFFD;zSBEFDA@HFEBN^\UMI<8<;<?BEIHMFILFB[yyzxtopytvsvxyxyuzvv||uxz|z|z~z|zqmmfs·°;S`b^bliopgO5&5*3NH24d|x|xc.+,mvtf2(!N=F
+'b
+08*0,!	
+
+
+
+
+	
+#
+!*."		
+
+"/0.(ER
+ 
+"\^(EVdd_[ZML<(BHJ<;370,hppd2/"	
+BWYVYD_~~skz
+|~~}txzyzz~~zvxksvvupmmtxpNAfiiqt~}~~tO7AYh^^Z[bWF
+&\f_c[Zc^WUY?
+	
+
+V\[YWU^Z[\[YYU[ZVY\fd_cibcl^dm·¬mpss_?7?BW š©­¬²²ŽJQJHJVZWkfqdc`FJlvL|
+y}zqoohooklfklhkfhml_bVSZhs|h
+&(,,*2/,W23IRHYfq
+
+tt¡¥¥§¬±°·µ`NIOLJLLHFHBBA\HHBA@?@?DMZZ^SOIBBA@9=EMILIOSSMFF}}xzx|zvxzu|xzxyvxtxuvyy|~|}||}zx|yoliuµ¬9,33<?=LMF?HH94(&,2OB2.`vtvsc*"#kyyh./UJ
+5
+ 9.'
+	
+
+
+
+
+
+
+
+
+
+(
+
+
+
+
+"4,0&<@
+	
+MH
+<_gmz}s^L;?St~
+}~|txoA7(IJ;.NYWYY[dx~
+
+
+ylbhx|}~}
+zzuthxtqsvxz|tB?}~
+u[JW_ZVY[[ZH!S_Y\_U_`^Y\H& 
+
+
+
+
+%U\[VW[_`\b``````SZ\ihidfgSl`\Zt| oxzz|oWd¡€¥©§Ž±µ¥WVZ__c}oxzl_U?SsvDcmhb_`RWWQObglkkiimlimdckhdb`Z\dod
+
+"
+"(0/05/W=2ALHO`ot}z~~}ts¡£¡tLLNFHELDB99A@
+_HJFDAEEILRZ[ZQUHIFFA=@DBEENDHJ?7/z~}u~xyvuttvxuuzxyuuvxzsy}zy}|yzy}}ttsm}¶0,//3/#*22?DD732.4+?55;JdcgdJ'
+clmb20
+D7
+	
+
+
+792
+
+
+
+
+
+
+
+
+  
+
+	
++0%*.=D
+!@8
+E`f\hcUD47`x~~~
+}|}xJ54|kY^\ZV[W~
+yq`_o|
+~|lpqomlotp<;bb_^VVZZL
+U\\_^V[bfhcR*
+
+
+,W^WRRV[^[^^_[ccb\`hhicYVmJvhg\fFiQ@DsUA`~|m¥©­±°Ž°¡|^bbk
+hh
+o^VHWsiBNV^Z[^^cfkokkkmgigkpohkbci`fcccbp}\
+
+
++*&(0,!^¡pFARRFERbimsxyz}zysz~dWVUNMQJLJIEJHsSIILHHNJJS^SZYVQLBD=<FFFQHFBEB;443~yvzzxuvuszx|xxyvvvtxyuz}u|zyyx|vskik~£Ž(&"*4.+&*(,05542395A7(37W\OMH,QSVI30+8	
+
+
+	
+
+ =4.		
+
+
+
+	
+ 	
+&+*."DD
+#OI
+
+UmfcMJ<4WlqlmpopotpqtN!=0oYDJRNFx
+vibp~
+z~
+~}~dotvvxyztA?zmURUV^YR[YQ
+
+Q^^^cW`cc__U&	
+
+
+
+
+
+	"'+QVW_[Z[RUVY__\bfb^^iy}cEQZ9Rs@9A
+#5
+?ktm?Dh£š­©¬°­
+bRv\qs\VLQzzypspvfhgikmhgifhlqhghiY^_bdhtz
+^
+
+
+"
+'*(/("'d _?Ofq`OLR\\gihopvy~|pdZYgq
+k_\[VUQQMSRRNMI`VJFQNQLQMY`Y[WVSQNJFJILDJME?A=HV[Vyzyuvzu|yxyxu}y||uttsvxv}xxyvv||}vsmdm}§¹/73;=<?7?9;AA<905/2?320#453&
+9B?4;D=7
+
+
+
+		294
+
+
+
+
+	
+% 
+
+
+
+("*%
+
++SM[hRNA9A`s|z~tyqmlvso}S,=3`y~}iJOUN[~
+z
+
+
+yu|~}~yy|xgvzvz|yoA=slfYF0,2AZU\[WVZSQ
+NYZ\dY[i`chZ/
+
+
+
+
+
+	
+
+	?#=[ZWRQNUWRS[Z_^ZVUW^||v`^OL'#Vd/bc=_o`iFFIŽO"%;k~§§šª­¬°¬}^xoY@A`tusu}yVRJSEM`mlmhc_bhimiilkY[[_c_kvY
+	
+
+&#"
+'/,(,l LAVpi^^_bg^ZW[bdlqvtmWNDDH_pRUVWUWUSRHLMBJF`ULSMNSQQY[^_[YYQONIEFJMHIOMSVWYYZR
+|xzyzxytyyuuxy|}xtpyzv~zyxzzyyz}zpgbo
+€¹0/8A?@<?H?@?797752.<;@;(*0("
+773.2,/"
+5"
+
+7A3
+
+
+
+,
+
+
+	
+
+
+!"(,.'AEENNSQWVUYWQFFDB^lqqusy|xusktpsqfc^ZVI5;/fzzx}yDR_Vi
+
+}yyxz~}xs~~m|xd?9mcZI;.,48HJLV\_V\^VZZSRIV^\c\Zcfkg^5
+
+
+
+;#<WYZW\ZZSUUY\WVVYY\fmt\/AYOM50D'BQWcsFYs
+S®%&
+'Vx
+€šš¬±±°Ž¡qxZE0DV_b_cvx^^bccchmkiigifihfgsmgZb\[^[is`
+
+
+",0*+*(*gEAQYSMZg~
+viY[[\dlotRJB8=Nb;OQUQRLIMNFEHDAcMMMLIIQWY[W[_ZVMVMJD?@DEOU_[VWRNUW|~xxuxytpsvxvyz|}xzsuyxzxz}zzz~vztpidlª¹z%##!&"+#
+##'0/;545OA,
+
+*4/0'538855<2
+
+	
+9;&@B5
+			
+
+
+	,%
+
+	
+
+
+
+!,,'93AQLNRZffhb_^V[YODDEF@ILNAAIHkvsmcilgN;<7i
+|v|qEQb\m
+
+tmq}
+t^@<3(2/DHUURSSSVQY^YZ^Y\VYS
+MZ\\^WW``_f[<" 
+.
+EZ[ZYNJLOOHFQQSNU_bl
+vdlk\WHbhsq`,/S9ds,S9D/b\L
+!!
+4b|~ ¡¡£§€`F28IOF@g}klkgmhkflhilfkmdhilmoZ^^ZV_lt
+_
+
+
+
+
+##%&*+/*'t<=IRJF^p}lfgoksAJ<53E[BZUSVNLNJLIFFAD[MHLMRSOQ[\bd_\YVVQMJIIILQMOOSUV`cdzxxsuuvttvuyx|zzutqvvxzxyx|zu||uuthdm¬œs?9=<87/'/*+.(&+=85+#/52
+("*%++
+*0&%%#!("*=E;
+
+,0
+//'
+
+	
+
+
+
+
+	#,#!<.9<;FJS^^YS_YZY[WULDD@;70&''!?okf`_MA08^ytuvxQRf`i
+
+}z}}|fcv
+s
+
+NDDRUUUSQNJLOUWZWYfVVY_\[URR[[U\V_cghbYB
+  
+ 
++M\UYMONWOOSSNOMLU^fv§|qlN<|umfumE 
+4W@ .u^FpU!
+
+"Bcz}y
+t\RQZOLgpkmmpqohhiihgimsmcdhmm`^b_V\dsf
+
+
+"!&'++,'(}£=<FSFNcoz~
+
+vzzpk`49*,*MZcURWVMVSMOOIJHYNIHJNMWVZbccb^`b^[WSSV\[`fd`^\^ZRVzxxsvyvpuxxyy~yyy|vsozyy||~uuvytqohcl°ºlBF@DFDB?A;5=954;D3!
+3.*"
+0(+'!"+%&%(+227<;4945HOD.*#
+*Qc_H+%&
+
+
+
+
+	
+72%
+&&223AEFFH@A=E<983,***S_d``_`I?;05Ibfkd`ISh_o|xv}}~zy}|ulgtzym@?@`WZRIHLVW^Y^ccd_QVY_ZYSUI^[V^UY`^hddL #
+
+
+#MOMROVZ^[[[SLOLU_gvkmccWzfoskJNR*cM
+\\2QR€;
+
+!
+!!8_mY_u~z|okgcfRcbmickpzudggmkghlqoilmg^ccY[W_y
+B
+""'+((%#
+¥t/7HNLYdkvux}yvlhxs\5/4=F^ukmf^YYYZYZVRMFJWQQQRLQWYZ[bfgiihlohchihdkmkql`UFI[}yzyuxssuxyy||xz||suvupuvv|yvxxyyic`k®ºsEEEIAHH=??AA=B2995
+2=F#&
+*
+79B=+
+&(*!&!.++,050;535ANF=<@A;B=98;4%"
+.Lfsm\5#
+
+	
+
+	
+#*&
+
+
+
+!!&/3+#(+9<?DHFD<<@QUV_kogdchgS5
+BIovz}uLOg_}
+~~|x
+}xks|z|oHDDH`RWU[^`_\\\VZV^_ORV\YVQO
+MZZW\VZ\```^H
+ 0MNQLNS^\\^UOLO`cb[ZqussdhhNJFIUUsgE\U.x_7
+Lhx
+,
+
+'!!!DcNO[\dmliQkmsihl`[kYMJLRqhkphdlovqtptgY`bbZUbv9
+"#!&!&&%"%/€Y!,@QMUdmituvpbZdv}zo\[\_`p|yzvuqukpodd`bkkbddcddimpy~
+
+
+uvomptpv~z~xscRLMg}svzyxutuquvxyyy|yusvtxuvxyvuzyuxohhm®·sA?ADAFFHHBAAE=;044=94BH'.598/
+
+03#
+%03*
+
+
+"%.',02,DSA<8???9A894(!B^su`M9=0
+!
+
+	
+
+
+
+2'.%#*++,%!"/9F?BEH?=/5EN\ZRRU^Z[[[V^;?JtxsvtOR^^pzz~}z|}x~}~
+|
+l`huvkJ;A9<lmilmmhhfidd[Z[cVUZ\[UZRMZYVYU__f^\YN(
+BNUSWY[ZSQIQW_ZZUY\ktu
+tmdU<(0QJH\VV8B+?;bÌ5(
+
+*"!#
+	;/38EU_l=WVdcfzf^_k~iLRpqgghiighssvvpk\d__ZYcs|%
+
+"#!%(*+'/¡='=MQNWdhkmkbQLbszxsk_UVWQY}}~
+vxtt}xqqoopsqttyzx}xztqlpuqttopook^NFIpxuvuvusqpsvtyxzy|zyqqqsxuxxuyx}yusokfk­¹oHD@ABDBDB@?DF3<83=@9BFB<7;973<"
+#
+""
+
+"'DcQ33?93.8<OgsplWB5+.75(
+
+
+
+ 
+.82!+2++%#&',*((*!+#0'&&&'7DIMQRUVYd^VQVfHLFt|zUV`cmqicimtuuy
+
+||~}y~t^~~utfihcdbYUY\`VSZH^WSZR[`bSMLO&    #I_\bimliikt||shddiÆË£voigb9
+%./,;VId@!2[yQ2%!!!"%#
+
+(HR_4`dxuSUW\\hu_O?Wgiikhdddmpuvslcccb\^dx|
+
+
+#%%(/((#
+ %
+4FIBL^igdbQFNYkusqkd^[YYbz}
+|ytvuz~|~}
+yxyvsqipvxplioph}|tvu|zvxutvyxxxzz}zvuusspuxvxxttvfhhlx­¹kH@;8<=;0;584;7=7<?DDFDDFND?A/"
+(%+
+
+"
+
+
+	A`\97Lfv~|zmW97.*0*%
+
+
+
+	 
+
+
+
+
+
+785
+*#!
+'+35;<A<<AA=A<AD?FHFIFDD?DJJVc^_YQfQEJhsvotVS^^lltstsvvsssuys||}}
+}|zyx}~|u  ¡§§š€|pplhmuvofgpocRYWYZZZWZI[Z[[N\^\QQ\Y*
+
+Z}
+~§®¡}pqU??2&(.53WiYUg_td|hFB3%%
+
+'%
+
+(FV,VR^zsdhbbho\YAH\kkllihhhopuslcf^Z\bmyz
+
+!*(*'.*,EH9@Q`[YYHDW[dsxpkfb^\_f}z|zxxtxxzttz
+~~zz}xuuvzyvsvvvuyxz}}}|zxvuptqvuxxuyztihlqy¬¶bQD??<A?9<EA?H5;37B;=AAA7?;(!+02,"%"(.+..,//*%!"#
+
+
+
+7gfShh}
+tQ72,,(+0/!
+""%'/..%/(
+#%+975/2;;9!!4HA@@B@=85@A?EHHJIHSYWYVRQLOUZZ_khlVOoq"AMhtpmoVSd_lupostxyxuvvyx|~}vupuuv¡¡£££©§so`_\flsspmdghVDY[\^\WYY
+ I^_Y`_htvquz|=	
+
+   
+x    ££€µ­y~s!&8WLUz|zzyS/?0
+
+
+"
+		=N+W?B^mISOUduWVZSYhghkmihdfmpkg^c_ZVcs}x#
+
+%*+%!.,?<29NUQFIB@U_dmspk^b`\bsy}|x~~|y|
+}~yvyyxxpxsvxuyvxuz}|uyxvstsxvuxxyzsooll°º`FHDHI<78?=ENAF</=FA=A?5.'%%%(!%45;@=A<8/(.2.23/327;74.7=8;fqH%#"%*'/*('"
+#',2.<''39840/3.09BAF??7<@DHIIDNNLIID@@9BMIQNQRQWV\SZY\_ZSQUSUSiikV[mq74W[sqpxb`ogtzsstsx|qsxtxqvx||}}~|zzyyy~¡£š§€šmh_fcdb_gihcfQDFWYW\[[YW"H_hlqxxxz¥g	  "£¥¡¡¡ ££€€£ ¡§­€zuh
+~ip[
+4
+
+#_
+^i
+sL5"
+!
+'39!,74OD5@SJD4FWh^M?IMckihhgbfkiopkg``[_q|v
+
+#(
+2vpgNB(!2EMD8;II[fgistg^bc^cp~
+~
+
+
+|||yxxvtuvxzxv|uuz|zvvqspuuxsy|vpkmioŽ·bJMMNNLABDDHD9B,5FOLDFF+
+!%+78BHDBABBH=<A527;;?IIFFEB@FJML=l|Y""
+/+30/'"%%*+(&%#
+!09;@@=DIJMFOMOHELHMLRSVURRQLLLQUMOSWVMLSZ_`^_[`^\\ZVZW[pmiSWc^MIbduuyupv}pz}xxyvtusttiuuvyy~|}~}}~v ¡lg`c_`_bcb_^\I=FNVZS^\VYMUhqy}xuy}c 
+    %¥°¡mppRlticxk7.*^ºËk}
+l@%
+
+"
+
+"!.3&(NV_JBAIE;B?;<QF<FFcllffkfikhopgbc^\bi}
+t
+
+!
+"'%"/|x|zsM8?=9%*@DScfpomc`\\^gx}}vy~
+
+ztx}|}xvsuuxy}zz}zvxyzuqqqsttxvvzulmmkm±·kMNJLNB?A?7DJB?47NRH;.'*/089IADFFDEDBB<89;=A@<;AB=AIHMROSNLAx^=;0;=;9?8287@BA7,"
+!'!4JIJQOQRY[^^dfb`b``_dgff`_\\WZWWWWc\bd`cicgi``cb`_dYZ`holgRV`ccW_`^cdgbdky|pqtuquz}zsvy}st
+
+|ic^W[b_____VVH?DJW\[cikk_lt|z~uW      VhZ`UifWIA5
+,.Bi~d;
+!
+
+".*/<JOD8JoBN@5AF=5*78AH="*'Uiphlmiglomuf_WUYRc}}(
+
+
+
+
+
+&
+7yy|}~}zlR#%9DW^ckpobZY_\myz|vyxz}
+vuvvyzuxsqsyz~z~||zzyztspotxtuvqusmupfk±¹}m`WOJOMME<<BBA49@7/8<;JA@?<AFA@EJEED@DABB<?;=9A?2;?DHEBHA@;zi8DD=9DFD?9?<EA<8EJMQNBFIILLHIOMUYZUUW\`impkph`WW`_\bfV\SYZghlqtkc_b\h^_\_fl`hlssiYcpqqm`bhod\^fkfsimflhousxsmvzz~igf^\`b^\Y^VUUNFL`bfbcfx
+|}
+yhf\^ZRHA?9=@DJUfq¡ysuqszyhWOM_dR;.;0
+#Dkvg&
+
+"
+
+%*9HOJRm@B5(('
++0(#*3*9Ymiihmggdiisf^\NML\~}2
+
+
+(("%7 }thWV[[fhliVY^_cxz}|zz~yz}}|txxxxxtpuuvuv|~~}xz}}|vtuvtttttxsmhdg²œpoqibVOYWUODLAEABIBFEADFDDI@D<FIHFDEMJJED?<8?BFDIJJSRMLLBD?~zE<=A=?;A5;;8MRbklighlmcbbc[`dchifhbcb`Z[URZZWRZZWY^Y\\^ZZ[\^Z`c\WRVYgllvzuspqtoqhVouoxyocihookllpkcohmlkfkplmmhqy~}~~z
+szllf\_[^[[[[WVRSBSlmicp}szz~|ztmhihomtvx}zvx~|fNL@4'##,&
+.Fmz
+|h4#
+%%
+
+
+"&
+3BN[[q+&&5Ymhhgtv~cbkkkiiklil[[ZWJQbzz3#
+
+%%!@§£
+gciii_\_dbm}xz}||xtu~
+~~}y~zpvyzuvtsuxxyxyxxzxyx~zuvzz~|zuuyuttgcf·Á pibULEMQSSVJFFNOVRNQMJOMJJFIIEHJFLEDADEFONNRSOVUUVRQUOLNLSMtpISYW_ZU@3?M`foiosssvqvvzzy~}}|~~v|}zuxutoillkfpgff`c__b\[\`hifhfcgbZ_hiu}zlkkRozzzvmifputymM`kid`hd`_hqux||}yyzzty
+Ztxqlmo|pfg`bY\YZZYYSONBM[_`dpkpytqsxtttqmtmqzsssuz|~vqxvuvpv~
+
+}uqY<(("3ENZ_hkokb``mvy}p`SMDN7
+
+
+#'%/0DV_
+  ¥¥©gkiihkilmmkZ\ZSII\zv%
+
+
+
+"Q š€©¬š¬š§€¥¥ªª±©š££©pgfgz}zz~xxvu|
+
+
+zuzzuxvyytvv|vtvqvtyyzzyxxztvvxzxuyzyyyzztssf[g°º ZURY_lpkYRMHIIMOOZYVMQMIDSMJLHNUMNOJEIABDOYZ\VYYYYQOVQQW`ihipmlf^UAFYguy}zv}~|
+~
+yxzv~}zvsspoolmlqqmigoxppymhoszvspmicddckkmmklRgimosxzoibhiksoiyztuuqv|vyuxuuu}€¬€¡V
+
+opkkdgb[^ZZUVWY[RLBW\ZW\hpfkuy}zzvtvtyxxtuuosxsyyvqiqpqqt~ztkoltvuqgiozh_YZN^klpz}xh^bbizoW8&2@<FN*
+%
+
+
+#.9DM_ ­€§ ¬ihihmlmosooYYSUMH_~
+m!
+"
+\©²ª¡ ¡§±·£ª­©©®¡©§ª±¶¹®¬²¹º¹¶±º»¶®z~~
+}xu|y|xx}}zsqxv~|xyt}yzyy|zzxyyvyuuvtyquvuuqkfb_f}¬ºšcdlkldcVUUQOQRQVURVWROWUJQLMLIJNLOJMUOENRSNMNVQWQVQW\fmvvpk`}oWQVVcu~
+
+
+
+
+~~zy~}~~|yyxzyspusz}xxzz|ysv}}}vsttplhHboihpmhpo|~zz}¡§š¡xU
+
+ibfb_^VSUSRVSWRIDW\^ffgfifhmmqvtsuxvxvv~yvyxyyytyvuvqqptpspqtqomihggkmxviikypqzzuvofc[ysoucJ(#"(08532%
+
+
+
+
+
+
+!*8IO_ ¡qllfiklpotqpZOLJEL`zg	
+
+#
+"cª¶µŽ¬®¶·¹Ž±±¬§š±µš®»¹¥¶Á¹··¹ÂœºÃÈÆÄÆ§
+
+~}}yyy~~~}}qigFHZ_dhosz|yyz~|yxxy||syyvvxuxvypkibdkz¬º±m\W^ZUMROUVUWVSYQY[USYZYOSQZSVOSUURVSRUOMJQSUVORSZgmkbhlhZZ^sgz~}
+
+
+
+
+
+}|~xuvuzx}}~}|z~xUu
+xyz}
+
+€¡ £€š€£ £  €¡£¥pUsu~
+f^WVWOLNMROYVRJJF\`hbd_^_fghgfgikoppsqstpqsqsttpusmsxxxypkotuyvyqkosptpsghpyomkmpib^[QO^oc`U<!#!!+!'(#
+,&#
+
+
+
+
+"
+'7BQ[¡ šskoiommhhqmiIHIBBI_v
+I		
+
+!#
+t¥°±š ±º­œ·¶·°®ªª±±²µŸªŽº±¶²­§­·¶œ»ÁÃÆÄµ~|~~y}~zxqc;&
+'Hdpsv~||~y}vxuxvyyxuxtviomfok­º²s_\_W[W\Y`[c_ZY[[[_[[`c`[`^^`bc```b_c^`_cdfioouz}x~}}z}~~}|
+
+
+
+}}|}zzzyzxx}}~z|qokpv~z||gv|sllmmqxocgmks}}£¥€©¥š­ª¬±ª£¡
+`hmmux_WROQSLILHLORNQNFW_fd_^[YVY\bcbbfg^bcggdbbhhkhkmttqzuquvutuvvtphc`_b_fd[[Z_c^is~cOEMN2%!
+
+
+*%*(%
+
+
+
+'.=M_€¡sgklklklkpk`ANMBDFgv}/			"!#(%
+š¬®­­µœ²²Ž²·š £¬±¡¬µ²µ­©œ¶¶¶¶²°²±¹¶¿·¹ŸÁ
+}}~}}}z}|zoJ<2#'Q^ktz|qqyyvyytsuqtmf`gpf§·²yZc`_cd`^^_``c__c``^\^`cbddglppuutuuz~
+
+
+
+~|zzx|ttvug\sidioqlfQNLQSN[__hpsssxvx
+~
+ubyquuxv~}
+gb[Z[QNLLINNMRMLEZ_cd_Y\^_ZW[c^[`hcc_d\OHBIMOONRWZ^kmihi`h`_diif`ZWkmf^LQVbWLOWZY\NL@974=""72(&'(B<
+
+!,9H^š©€­©€¡§olfggkofggi_EQOMDHk|v,
+
+
+
+
+(
+'±°­€­Ž·Ž§°Ž±°±­š§ª­²°Ž§®­­¹¶¶º·µ€ª§±¶·ºœ»
+
+~zYDDIJH0
+Fuysoptqpptvusssogomg§©d_cccY_c^c__bg_^bcg^gmsy}~
+
+
+~}}}
+omqlhclvuymbLF=DIJMSflhopkhimmmlotuyzz~~
+ocxtqtuxz~}
+mgh_ZSVQIIHNNNMNFNY_ZZWZZV[USUNNSYWMIIIOADHOO^db^`_i_MHONMLLIMIE?AHNNI?<BAB==59?973559;<=%
+
+%"
+2JN/#!4VA
+!
+
+
+
+*/BO\
+€š©©£š€ €©ybggiklolllZFQQMEUlyv=
+
+
+
+"?­­®¶§ª©§ª€©µ¶°¥¡Ž®¡­¬±±£¥±®¡¥§¥¡
+yuoikhulJMVYY\UE(
+s}|zz^Wchktspligb_pbb^_^`_b_fbfdkkqqx}
+
+|}}zy}z~~
+~xx}
+~uqqqicZdtukRAHFMV\\fipoquqv~}yyvosspu
+
+zh`||xzy||~hhg\ZJNMDBIFMJJFBEYVSNMMOSYZUULIRQB#
+
+0FQHHbsvqyvlJLJDFIID=??9;<A@9?DD<B94=<3875*/99<8"
+"3=NM*#
+'0ZE
+
+
+#
+!
+(4AF\xsu¡ª¬sgkimmkmoflWRURFAYi|tS	
+	
+
+
+Ošª©°Ž±¶¥¥®±µ±š¥² ££ ycU\dkopmtq|tkk
+ZU_cbb\NH,c2BH9.2S€pttsptqqv~|yzy£ 
+
+
+}}ttzyqtx}~soqvqfM\_Q@DNNZZZ^cdkqx€­±±ª¬¥£tv^kd`bbhq
+
+
+~~}}kf_dULJFF8?@LIMNNBSYVI*+49;7?A*
+	;YRQSVbclxoOLFFDHE@947447989/59500*&
+
+
+!%#".*+,7ZO%
+#<_8
+
+"
+
+'2@Sqfm £momkmllqtloULHN<AYi}qS
+	
+
+
+!q¥€® šš  ~slhc\Z`gpsuxyyzvvssuxsm~m^bicd^SI9'O©
+/Jfš²
+~
+
+£ 
+xx}}
+|xytolss}}}}||sputo`\qqsoikhhdc`fgl¥®¬±®¬ª§©§¡}s\~
+
+
+~z}|z|xxhh`\ZOJJFH?DHINOLDR\d`VI0!
+
+
+ 	 +337@ONWfdJA=B944*(!
+
+
+
+
+
+
+
+
+"%&,!/+((9SlR(#*@[3
+
+'0Ni~~mlmlkiipluo[D;A9EVgyv^
+
+
+"yš£xo`_Z[`_fipopusttyzpvvuxupqqplgi[
+
+
+ydfgb^[YFF2'9oµ FLF;"
+"ASVo
+§± 
+
+}
+
+|xyvvqtuotyyppvtuquuqpppomsgim °š©š§¥§¡}
+xIHm
+~~}|zvxvvx}p_WMMOMJHR\fbfkd;/;=
+
+  	
+(
+
+
+	
+
+
+
+'*+'4BHW^d[^Y&%*OY,
+
+
+
+/Zt
+~c }qliigfmuuqF0///;UgqpL
+
+
+
+%!fi\Z_Zdlkkmkmpoppqlqplttzvvxmmighkffb```^_[|
+~
+
+}
+~~icg`^[QLEF@SlŽ¬xx~vld\Ycm°£ ¥¥§€ £~~z}svsvtss}}yolku|yutzxvslqppmlppokq
+¡¡dNgy~}}~~yzzxysx
+~yquvp_Y`mhB.< 	   
+#
+	
+
+
+"#%
+*/.2727;?4
+!'+*3IZZUMMILYW*!29\W%
+!
+
+
+(LZuzlddmixtqomqghqsi3/*.3<RcqoM
+
+
+
+%txupqpmkilpooptqmqosssqqqklgc``\[WVWLSNRSVVz~~
+}
+llg`^ZWYSIBIf
+ª²|z}qgm
+¬ £¡  €€ £§¥¡}ztyqm_bWQ`bivtqg^OV\^SUZRURWZ`_`bhov}~xqt~~|}}€¡ ££š ¡}yyxvtxyqvvuutqg\^_hdO&%&%
+			  
+
+
+559B?B?ADIEBNFIAA?=A8	%'*8UVOB;FE=IY_.7DFbO%
+;VQQm|t| qz
+ztpqspkklq`.(248?ZgosQ
+
+
+&;sqstuttlmstppoommoooikilcfgc_VUONQMH?DFLNQ\~
+
+
+~
+|
+}}
+
+
+
+
+
+shhf`_`^\VLN^tŽ§x
+
+~yxou~ª     ¡  ¡£££  ££¡ufllh`g`[hmlcYLIJRJIIVWURNNORVNNNQRROFEmuzz~vzyz}
+ ¥¥€¡}~zliillmk|yttyyvut~}}z}^V^^[Z_3&OY[b_^ZB&
+	
+
+"8?=?B@A;?FBFAHIHMLJJN;
+"%BH??B<B8#%V_?IONdO&
+
+
+
+4ADFURgz~\shlsxp}szxyulhilhkogoc3.3<8?Q^qkQ###
+Nvutqqplmokkghfiglglfbdb`[[\YOOEHEA=@;A9BHN^
+~
+
+|oikbhhfb[NSYh©Ÿ~~|zupt}¡¡ €€¡£££€££€
+ziohkmgkihg``^Z\`b_\WVVZWUSRVY[RO[\QIMQRov||}}~~~ym|y} £   vZZYVZUVSNNQUNORVSQW[yv`USVWV#*AMLZZO<
+
+	
+FYRBJA&"%&!!42;49;733A<=AEDBAE?8?'&&&<FD839A""U`RUOHfN!
+
+
+@\`Ub~hq~x[\OB2'"0gospiilmhoY/07ADOU_lm\
+&[soopokihf`gc_b^`b_WZYUVURLQLIEA@8;43.?<47?W|
+~uyx
+
+
+volldh`ib[[W\yœ}yyvqkq€¡ ¡    
+~zzsttppqcY^d^RUR[\cW\^_ZY\\YWUVOUV[RS\\[suvxz~}}vssxoluy¡¡¡g`f_ccd`b_\^_\`c_ffNht\[<BUN,,('/4# 
+  FbZ3E9';MF4598<30.20705;?;<B;75;9%
+ 3;4A=*=Q0
+
+N_^bDHbO
+
+
+
+%8R`kxg^J?<99005<?94Dlopomklllm^7@<<<BM^miZ
+
+&!
+
+gpc^`gY[[[V\Y[Y[[QNMEOLJFDED2932,*'!&*/882;Z~~xy
+
+
+
+
+
+
+}
+upofhkkkfb_UYi±­x}}zoiq}¥ }¡     }xz
+
+xsfbghkfd_cccYW_kd``__b\[Z_[\^_b``psxzxvzxxuxhs|
+
+|vtiouz_bcc`bbf^UY^b^_c^\SAfv`V@;VR/#&'+!
+	9.0N<+;443?D??DEFDIRJOQRLINJHAAF(	930DA9
+=M4%L[_V9EbO!
+
+
+
+
+
+!2[V\^WUQF@=?=AEHpsooqsommoVF@<==BQdpl\!"
+&+
+%b\[ZWUSVRLQMRUIFNA@;989;95;74.'&"!+98<838R
+
+
+
+
+~~
+
+
+omhhgimhfdWR\Ž|z
+
+~|usiku¡ ¡££¡
+ z}|svyzyxzvyxtyqsmqhgfcdihfkh_^b`iffdqkpsuzxy|yuxuyfq|xy|
+
+~|volllu}fbdg_dd`_UVVZ[VWZOA8ZydQEV\S(/("	
+
+  
+7I2*50++/DOFJJAEBIQVH@?970#=D@@+	4.+AEE@Q?
+EQ_J2@_O%%%#
+
+
+
+
+";RYZYRSH;;;592DpugqqholkpVF@BD8=Shof_2
+
+
+%""9`LQIDMF@EA@??=75;5044+4,,2/049@ED@05<J=FEUht~
+
+
+|~x}
+
+ttohfkppik[RWq²|
+yqpffq¡§£¡£ ¥  ¡x|}xy
+zu|z|zy}}
+~odf_b`bbL53**3.7DMIYmsostuuzxqtfmvzy~}}
+
+}
+
+}xvulkd^_`bdd__\[c\`[\_SA@ZycREkmY40! 	
+ 
+ 
+;I3";3%,,2*%"&#/QOH<.,!'"?YDAF/
+5,5@LL'2J8BN^I&MfN
+
+
+
+"
+'=MONOOLA40+32(<kokkmimqqoH?BE=@9Nksic0
+!
+IUA887754//7=;;/,+29FQRWY\\^[QMD/	
+4
+~
+
+
+
+xkmmkltsmg[QRd§ |~|tqlgcm   £ ¥£~~z
+
+~~}|}z~
+}z}~}zyvt~~
+}~vlg^bbdZYZYRLFEDOv
+|yzyzu~uxkpszx|
+|}z|}~
+}}~
+gfgdd`_cc_\`hdfcg[LAYufOIbm\2,
+
+
+ 
+ 	 +M<,000,0
+
+*@54?WJE9*/2<9UY<;<5	703EMA3&2[L?N\A(J`@!"
+!
+""!
+'.9BEFJH5(#0(&#;qpmpmhiospH;?E<<FZsqk_(
+
+!%Q?002.0/2,0=JLSSVYY\[LD5"
+
+
+
+
+*BQY^`oz
+
+
+
+
+
+qglossvlcZQIVv¡|v~~zupigch¡£ ¡£ £¡¡£ £¡
+}}xs
+|}~||pty}x
+}tppuxtz||tx~~~}~}uzz~~zxl[Zbbb[_`^fbWSUQdzuppuz}|vxflpt|yyq|yu|~|~}~|~~|~hkif^bc\`b[[ficfbYHDSv`MF^_N5+
+						
+#OA#5.,/4
+!BVNDFZI=8&.0@FNO;?A2
+	2/+EE<ZfJQN
+=NZ@,N[*
+
+
+#
+#
+
+(.38DD;,#
+5txmpmkksuo;5;;AAJ^xvk["
+""%\;9FFNORWQSWNI7#
+
+%+5DAO__cd^cmkh`copst
+
+msostomg\VILk€z}~|~vsod`l £ ¡¡  ¥£¥£ ¡¡¥€
+~}
+
+zvx|v|uyxpqyyx}z}}z~x|zptuuu}z|yy~~}fb[``^d`c\_hhcc[Q^l~zyv}sqpfkptvsylzyu}u|yz|}|}z|}||~}}~|z~fikfb^_^_\\W_`^\^SF=RubUIY^Q9"
+
+ 
+
+   	
+D?44228."
+IYVOJ_F<7
+(<HEQU?=A,
+5,.D88QLBBDD,7JV;7RN%!
+
+!
+
+
+
+&%(58;70%Jspmlkhlpsl;4;=;@Oi}oh\.
+
+
+,hSJA(	
+#,7=BN[fqpqtvvuquqoomfdbdb\_ZUWkpmpstlmcYRBAZ¡}v|}|uph^^o  š§§§£  
+|~
+
+|
+}~
+
+yyikidgic`bggdb[UUM[sv}yzxslup_goqusvxbuxxvvsyyz|vz|z~}~}}|}}|}~c_bb^`cc`[OZ_Y\USSIAHoiWM^bM/		
+ 
+ 	
+2B/24293
+#M^WRO^LF3"?<DHRZ;=?.
+
+52+3;D?B?7;MHBJW<7UF
+"
+
+
+	
+#*((9,3(
+
+
+Mvsqmiimotm7<BB9IVtymlb.
+
+
+/B"&*2DQ`gltyyy~|
+~
+
+
+ttokfd``^\^[ZRLRl
+
+
+
+zkolomibZQF<O
+¡zyyzssi\\q £   š£ ¡ £
+
+z~
+}}
+~olhikfmk_[`b\Y[UQVM_pu}y}|zskg\fklmpuubpxtvutvvzzuz|x}|}zzxyxyx}ygighcfc^d`\\^[YYVRLDJli\Y^`N,
+	      
+
+	&?+0@273%&H_lii\MFAQ_VF@V\D;@.
+3/%5BBDE*
+
+AE<LS=HV2
+
+
+
+		
+%&!'''#
+	
+
+Rysololhpvg29;A8DUztlh`%
+
+
+
+
+Sbdmqv}|}
+~|}zqof_\[ZY[VVSSOSRpoolkoib[SF?Lv}~
+~}vqg`bt€¥ £¡€£¡¥¡£¡ ¡¥¥£€€ €¥
+~}}
+~
+
+
+
+
+
+z}vi`dg`dcZfU\VUSVOJJMLdvoqv|zxvkk[`ggoop}coyuzzuuuzzxxxyxxv|xvv~xyz|lhlidhdfgff\`c\b\WM?Nts_c^`I'
+
+
+  	 		
+00&2/.
+"OpubOJ;;;8=OREM_M;=49.+;ALJD5#=<MS=ES'!
+"
+!!
+
+
+
+
+#'.
+
+Nyttsumpstd4<@?3BY~pqlW
+	
+
+
+k
+
+
+
+
+~z}}vpsqhcWRRUORSRVQHEFOo
+sloosid\SB8@o~zukg[Zt¡  €¡¡  ¡£¡šš¥¡ 
+~}
+yv|uy
+
+~|}z
+
+
+~~tyugih``b[[R\VNRQUVJIHfsmtvuzspciY_`gmpo|kktsvxtyuuxtzzyzv|xyxutvsvyhklhgcggfcd^\``_^[QBEitpkZ`N'	 
+    
+
+#*/.//!DpoO=7<9?;9<3?R^bD?F7
+92'2?IIHH7!4LRAFL&
+
+
+
+
+
+
+
+&
+!%"
+ Qtvssmlopv`57@@4@V
+ztl[
+"!
+
+y
+}~z}vyuyuvvpqqlg^YLSOOFLNSOJLLNRq
+
+ypmkpld`RI5=p|}xtm`Yf 
+
+
+
+|yy
+
+
+|zy~}xpifZUZVNUitqxtuuoo`oVb`blim|ibtvtvquztpuvtusxvyusssst|€iggddbbdd`cbfg_^ZUI@Bftcc``U&	 	
+
+  
+#3;@O\WNRYholkvx
+|xtfVI<FS=@D3	
+9/,5?MD_lW82OVINF"
+"
+
+"#
+
+	
+*8B<3
+   
+Vvqossllqx^5;@=9?[~oiU
+
+!~~
+||zxxqypsqtploilid_VQJNAEEIHIIEIHHQqsmlkkg`YI<;u¡~~}upg_Vi
+~}
+}|z
+
+}tspzyuqxqull_m[cbcigovp_qsspkstuvx|quttuuvppqq±Ülklggigggbbdffb_^WFB9bxfc`b^*
+
+    	+;JYcoxxmoklux}
+~z||xfE=EE5=342DIDZYWF
+?HZQL9!!
+
+
+!
+
+"4+
+
+\xvpppmqqvQ3AB99Fg|slV
+
+
+
+
+,
+}zy|yuupsttqoookmfkdgb^^YIHIEE=AF@A??;?HOlmoillc^R?As zy}slid\l 
+
+
+
+
+~z}|
+
+
+~
+~|xqptopil_lbd`_ldlxk^sssossxytosppqsppospsz§ÓÕlfigcggdcb`ddfdc\WUB@Yuf`_dm\	  
+  Wgiqxux}
+
+
+xpE<;3/07=EM?JNR7;ESUR2!
+
+
+
+"
+!
+
+,2;=AAA<B=;<<<7btqpptpqosN0BD?7ImyvlN
+%"
+Fyvststpqsllmspiff``cbb_^YSUQIH=<8<3;@<08;?DOg¡sollhd[R=Iq 
+|}xoc_[o~y~~
+~
+
+v
+
+y~~
+
+
+}z
+
+~}vuslkkih^igdcchflyYmstmsstttqttpqostppox©ØâÏmihfddcgcbbbgf_[\^U??Qoi\^ckoW5	
+ 
+ Fhqy
+
+
+
+
+
+
+
+
+}sHI?95,2?SR?QOWF;H\SO.
+!
+
+
+
+
+!
+",4BBEND93<?F=98_quskqkkss@2EE<8RxsqlN
+!!
+Wqpmpmogihfggcb_c`[WZYUQOQNLFF7<48<54953887ADbzskmmf\NFAm¥¡z
+ul_Y\p ¡¡  ¡£¡
+}~~}v|
+
+
+~~|}
+
+
+
+
+
+|qpilfkld\pifdhiblRqmqpspuqqqptqoqqsoosšÙÜÏ¿smllffghgbdbfif`_b^FAEiiY\_cf\\N3*<IVftzzyx|
+}~|}
+
+tSF8@8.39ABBQQSD;Hkk`2
+
+
+
+	
+"
+
+!"+,29;?93,03.553\bbklifhlm8/FDB=ZqofU
+
+bg`c_bb^_^[YV[YUVURRQOJJMJEF@B99740852859899Fiqmhlf^UH@c€¡y~}vod\bv ¡ ¡  
+
+~~}z~
+
+~}x
+
+ £¡ ||¡¡ £
+txoliifkWk[``bgghNlookmlsoqmlqomoqtotÎ×ÌÇœpiooihiffbd`fkgbggZMLJgtktlostplikhfgoqqxyqxz~
+|}
+
+~ysU8<5*34!(LVUWD;EvxL
+
+
+
+	"
+
+""(../85/*(/80;2Vcbdb^`fhg25EA<=`mkhV
+"!#"
+dSZMWQYSNSIOLJIJLLEHELFFD=?@B893.0302200.,+0AoxqllhbWMAU¡šz|ylm_[cy  ¡£¡ ¡ 
+~
+~}
+
+§­¹ÃÎÐÔÑÓÛØÙ××ÐÌÃ¹¬¡¡€ vtspgkdcZl[_cdhkg IipmmmlqpmpuqkmvslqÐÜÔœ£oomllggfhdc`dhgcbg_RFMb
+xutuuxuzzv||||}}xy}~x}y}}}
+i<
+=4,39'#MSSYI2Jmb,
+
+"!
+
+
+
+&..(23.!,/7,+0Zccf``ZZ`c03AF8DbgcbO
+%
+"fIMHOMIHDID??;AFBB99D<A=3@=8;34+*(..,0.9=I`mv sqppf\JAMy¡®|~xupd[d} €¡ £¡£
+}}z}
+z||¬µÁËÌÐÎÏÐÐÐÓÕÛâéñûþþêáÙ×ËÄŽª§¥¡££€¡£|tppkhkh`^h_cffffi£?gsqpsmimksqookssmy¹ÛÛÓ¶uplhdggcggd`bdfdbb`RBJZvzy|~}}y}~}
+zx|~~y}}}
+y~~~
+|F	97,2A.!LL=^O,H`B"
+
+!
+
+',+.,+"!%.&.(/Ucbb\[Y`_\,394=Jp
+
+dZ_S##&!!5_@B=AA<;??489933+3,47244745498/;@INN\hkqvy~sstl
+¥©smopg[QEJo­si^\k¡€ ¡ £¡zyuzz}v§ÇØëàÊÆÃËÏ×àÕÈÇÊÆÈÓÞíñíéåáÛÙ×ÑÇ»®€ ¡qlpokli`Zki`hhfhl²7ioqmmgtmmqsqqmllqÑÛÓÁqqqikkfhb``b_dc__^bRJDZs|yz
+}~|
+}~|vy}~~v}
+~
+|z}}_9?&2?0!IFLhE2FQ.
+%&
+!
+
+%(&'./,&!"'#!"Vfbhf_``[V00?<?QsdUYQ!%
+%%EN998752443772/&!&.05DJV^_gltuzy~zzz~vvuobb^fuvi` }sxmkbUDBg©}mfW\o€£€£ ¡§¥€€ ¡¡££¡€€¡¥
+
+
+
+œÏÕÛÙÇÂÁÇÑÕÓ­ÂÈÄÃÂ¿ÃÃÈÈÐÔÐÓÙÙ×ÐÐËœ¥}olkopshc[kikikphl§8gppsqimpilqsmplkœÐÓÌ£ plmofiffcd_fc`bdbc_[LBNmzyx~y}~z
+~|~|}~
+z
+
+
+p(	4=(5D+!H3?A2FI
+
+
+
+
+
+
+%%%&##"
+!
+\cdb__^cdQ(/=9=Vu^_ZR
+
+!%'#ZI5,0%("%*/85BIJW^bhox|y
+yuqihkdch`cfu|}qt.g ¡¡¥¡xutldZI?Y©yok\^u¥¡¥¥£€¡¡€ ¡¡¥£¡¡£££°ÏÌÕÈŸŸÃÁÊÔàÇY·ºœÁŸÃÄËÜêÐÃÂÌÐÑÕÕÕÔÏÃ§
+}soqosoik\lhgfhkki Ifmooooqqommompio ÇÔÓÇ®£¬mlmlllffiff`^bddf`_[IEJc~
+
+
+yy~z|}~}
+
+
+
+¡£¡~=2;,4A0
+MA;A7EJ#%
+
+
+
+(&"'
+_h__\b`\cU+2=<@Zv}^^_S"!.#!!dB485;IUZ^lkt}~z
+
+zzvmopfllkmsusWh¡ ¡¡ ¡ytulgZMBNvš}}tpi[d|£§š¥¡¥£¡¡§£¡£€§šš£ª©©§š¥  §ªš©€©¬šª¬ÂÑØæÏ»±µŸÈÇÂš<Rq}š¬¹ÎÙèÃ¡·¿ÂÇÈÏÓÓÔÑÐÃ°~ 
+~ppopxplf\lbffkgkkšVmmmmoomppilmmoiœÌÕÐÂ¶Ž¶šstuqolghfkf_fbddbc_\QILZv
+}|zuy}}|
+
+
+
+£¡Y/;40B4#Q@'oN2DH'
+""	
+
+
+!
+"
+\bd`b^d\^J++9BL\zz_ZUL!"""#
+
+smoptz}}}~z}
+|z}}z|zqoplllms|oNE|¡¡ }yqi^UAIi~xq\Wf~~|¡§©šš¡¡¡¥£¡¡¡¥  ¡   ¡ £¥  ¡§¥£¥¡ §©š­²ÇÏáûÓŽ®¬·ÃÄÁ£v@!!D|
+¡œ×ä¿Q¿¿Ã¿ÃÌ×ÑÑÔÐÌÄ°
+
+zqmqqttmi_mgidikki`7`kqhlslokostvlm¥ÔÕÕÈ¹¶µ²ªusoimomdhgf[`bcf[\YYMHJ[xz|~~}|}}|
+
+
+
+
+€ q/9/0?3
+FE
+DB
+7IE#!!
+
+
+
+
+%
+#"
+
+
+\c__b\^\bQ0/@@M[up^\VU
+
+%%
+
+~}~yyyuutpxy~yz|yyyyuxzzxvsphmopoxxfM3@Z   ¡£ ¡¡€€ £y|tf[QHHb~yh^Yl¥£€§¬šªš£€€€£ª§¡€©š¬­­ªª§¡ ¡  §š ¥š§©§¡£š£²ÆË×ÝÊ®© ©ÄÈŸk2!^¬¹²©»ÄÃ­9c²ÂÃÇÐáòÝÎÏØÌÈÁ
+
+zspiiktqicihhkhikpcL`plmkmoxpmqqsmÃÛÙÑŸµ±­š¥omkmlhdi`bbc^`b\W\[ZSE@[m}yyyz|
+
+
+
+
+
+ £
+2'0,.A/
+HN'8E
+/LH%
+!
+
+"	
+
+
+
+
+^^`bd[^``O32BEN^ug[[\S#
+/~yvzxystvxvuxstvtyytvpusqolsqusumkhkfdY5(/=Rb¡£¡ ¡¥¡  €¡ ¥¥£¥~~uiZRHE[~xsgW[t€€§ ¡¡¡§€šš¥§¡ ¡¥££¡¡€§ª£¥¥¥¡¡¬§£ £££§§¬©©¬¡§¬¥£šš ££±ÊÎÑÌÃ°¡ÆÃ·_8/(/u¡®ÄÈÃ¬I"¿ÇÌËÎÑÌÂÁ¿¶¶¹§spkhioof_spplihmobH^pmoiktppsmmimÐàØÆ¶°°š£©pmiplhfcbfgc_cb[[ZZ\RJ@Ocx}||zz|~~~|~z}}
+¡U(</0=+HSBNA
+*LL"#%!"
+!!
+
+
+
+
+
+
+_d`b`bcdbN37?EN`}l`ffO!
+
+!Fz}}yxttpstsstvpmtssvuktommqkcb^ghmcphbR/3<;FLUh¡ ¡¡  €¡£ §§© £šzuh\YLJRu
+|uhV`x©¬¥€¥¡¡ ¡€ ¥§š€£ §££¡¥¥ ¥ªš  ¡€¡§ª¡§ª¬®­¥¥€¡¬Âœ¿œµ€ÄÇ¶^=0("'2=sÁÇÁ¥Y
+c»ÎÊÎÐËÄÁº¬®µ¶­ usqmhcfob[imlpklopfV*^mskqmqupmkkit²àáÕ¿°²°¬£®tolllhgghbd\\Y^^YYWQHFBMYo
+zyz|}z|}x}|}|}}
+
+
+
+x43%2@/
+ERILF
++HL'!!
+
+
+
+
+"
+
+
+
+	*\b^\_b[b^Z75FHNdgcfgR
+
+%#W|vtsqosppulompmmolqtvoqiihfc^^`_`fhkiO'ESUSWQUc£š £¡£§£¡¡¡£¡š¡¥£¡}zpi_Z^_t
+zqbUg
+€§€€¡ ¡©§­šª­šš€§­¥©€£§š€£  ¬­§ª§¥§ªš§£¥  ¡šŸÂŸº°¡²ÆÄ­R3*'"
+sÁÈÁ§R
+F°ÎÎåÞÂÂÂº®®®©¬¡¡tqllkggmg^kgmhliplfcB^sqhtpqsqqhokyÇââÌœ°®¬š€€qoklhgccb_dd^__WVWUQMEBHSk}yz}}z|y}}
+
+
+
+
+
+
+L0%(<.
+LSML5+ES4
+
+#
+
+
+",(,3747?=@B@D\^[^^\Y^`Y77FJQbdb`cV
+#!#&"cpihlkmlihkhhifffmlmosqqqfc_^cgdcc^imU5NYY\NLSYm £¡¡€¡ ¡¡¡¡š©ª£ €€§ £€§§§zzvt``hl
+xiVQh¡¡¥©ª©€¥€€€­±¬ªª£¥ ©§¡££ ¥©š©€§­®¥¡¡¥ª¥€­¬ª© ¹Â¹¹­£¿ÆÊ¬yD(
+ÄÆºš
+AZ¶ÇÐûèÂŸ·±©€ª¡ª~
+ xlkikosih`g`fikmlkfkL`lmmpppopopogÏåàÃ¶²²¬©©§tskomibcffb^[c_[ZVVULEFJY`t~}}}}
+~~|z
+h5"'A3
+@RII%+DY9
+
+
+
+*?AIURZ[VUORMAFcd_b`\[\_[<7BIUk_^ZYZ!##"
+dlghmgcbb\^c_cfililpssqotkcfchkliktm\DJZZROFDLQb ¡£ ¥€€ ¡ ¡¡§£§£¡z}}vbfz}
+ui\Qp¡§€§ ¥¡£€£€§©ªª€¥ª²Ž±ªª­®ª©¬šš€£©ª¬¡£©©¬šš¬­ª€£  £ª£€£ª§§ª€±»¹°£ÃÊÈ£k7/AUcc`dÇÃ¹š?g¹ÈÐÜËºµ­¥šš€|€¶§
+
+uuoimplkiikcghimioguNUhmqmopspiklo×íâŸ²±­¬©štpokkcdfbd\_^[[VUVSRSJJJSRb}|z~}~~}~~}z}zzx}}|~~
+zF%#94@LJQR9BUD
+boYJJIHIEDBDAL_``^^ZY_bb9?DM[s~b^Z\^
+!!&%
+&okffbdb``diimihmmikmkqpomsqkcimmst~tQ7AFB9=?<ENg¡¡¡£££§¥š§ ª¡€¡¡¥©¡
+
+qhk
+xgWSt¡ªª©°©§©©ª¬£¥€¬±°±­°š­§§©¬®­°²Ž²¥š©¬¬®¬©­±Ž°°¬©­ª°ª­¬©¥€€£š¥¡­ÈŽÄ ¡¡¥¹ÄÂº£}4~ÄÃÈÊ»Ž­¡£²Â°vt
+utumqpqmhgmmkpiiklgHFYhomposmoomll×÷àŸ¶Ž­¬©vtmlmicg`_b_Z[YVYQVUSFMMHFNl}}zzzy|ytuxosqxuxy|z}
+I%';9
+;7\fBB@4
+
+!
+
+
+\z|i`ZRNIIIEFO`[\c_YZdd[=AIHSpc^\^Z"
+"&'+2to``ffcbhmmlqokmqoohmkqkllf`^cd`WR_c;8DBJMQF;ISh¥ ¥š€¥£€¡ §¡¡§ ¥¡ §¡kmm|xbWZyª®¬š®­¬±©©ª¡©€§§¥ª®±§§¡ §ªš®²°®°¬­ªªª£€¥šª®­š¬­©ª¬ª§©€š£€€£°·ÃÊËÌÇÂ·Ž­¬©€€§»ÃÃ·z3ÈÈŸŽ°¬š£¡€®Ä·®¥
+ qovtttqolfbhgioikmc3(Skqkqpksqolim¬ÛûÞºµ°©ª£vphggkfdcdb[Z_VZVUVOFA?EBBDYsxoqtqvtomokglliomvzxA*(?5'#2BBJF;=B
+#
+
+
+2k}|mk_WSONLMS^W[\^VV^bY8?@LWvmb`bdY&?ulfhckkikpmmqtumlochkoicWVIIFOQNOdvlIJUZVUO=@JNf ¡  ¡¡¥£ ¡§§€   š€ª€¡¡¡¡ ª¡~skVSqyfbg~¡±°®ª¥šª¬§ª £©§©š¬šªª¬ª®§©€ ¥š€§š­¬²°¬­¬ªª©©©šš¬ª¥ €¡¡£¥¶ÏÜËÆÇÆÎÐÇ»¹¶µ±°®°ÆÈÇŽm5pºÄŸ¶¬~ºšª¬š¬§©Æsvvtsuqpkh`cgliklki8Uiqmqolokokkp±×î×»µ±¬©š
+omikffd_b`^[YZWUYZVHE??FHHDD\zvhgghholg`ZUS^^hi~ zE''9NH5=QZHI+@D.&"
+
+!
+
+;u~tpkh`NWRIR`Y_[WYZbcR;<9EVzcbcbbY'!!Htgikhoqmi`gdf^SSURWfoogb[OEBJUSVcsygHDO\VLED?JVs£ €¡¡€£¡£¡¡   £€£ §€££§š§£ypbIAmsgis£ª¬šª±­¬§£§ ¥¡¥¡£¥€¬±¬¬©ª®­¥§¬¬¬€¡¥€¡­¬¬®¬š§­¬©¥¥££§  ¡¡£ÁËÐÈËÌÊÌÊÏÌÌÄÇÄÂÂ¿ÃÄÌÎºoJ("z±¹¹šzqvk Žªªš£Ÿ popqxqvumk^dkdmolimBSioiqlkommmkp²ÕæÄ¡©§¬¥kgkkidgd^[^\VVUROMRJH?A@=DA;0_fUSZ[YZZLD8DRcl
+
+
+
+`'%4ELJRmkM;"AE(
+
+
+
+!
+
+
+
+7/,42=HQJJYd^ZZ`_[\_L<A<HUy
+^_Y\cV"&%"!^x\\^\[`ZS__^OHFJQQ^hipo^cUJOSYU^hsx_@=OQJB??BJVt€ ¡€€¡ ¥¡¥€¡€ €¡©¥€£¥š©§£§ £qkiUI~zmdq~¥¬°®©°©©ª¥£¡§®šª¬®©š¥€š§€§¡ ¡€¬©€¬®¬©§£¥££€š€ £€ £€€ £¶ÆÊÎÎÏÐÏÌÌÎÈÐÎÌÌÌÌËÈÊÎÊÇºiI'_€kbcitk
+} ®©š€š¡ Æšsmtpoqutmi_dgdgfgifL!Umlhlhllkilmp²ÔÜ§tx ªslffg^\[WUVVYRJOMIFBIA@AAAHA43[zcMLHD?8,
+&U_l
+}~|~~zqomd[QUVHL[kS',9EE^tvcI!
+==
+
+
+	
+
+
+'+2++
+	
+	'9S[\V^_bYYZMD;ELW~
+bd^^d[#
+#&*!
+gpS[Y[`QLSYR[OEJU_`b`figcWZSZ_^\ipqiW@FDJ;47Vfo ¡   ¡  €¥€€€€§¬¡©£€£€š§€š¬ª¬©
+studO
+smy¥ª²ª°°©§€š§¡§¥§€¡¡£©€¥ ¡£¡€ £š ¥¥££¡ š€§¥¥©¥¥¡ºÄÆÇÊÌÑÔ×ÕÑÐÏËÊÌËÊÈÈÄÈÈÊ¿»yp\A,Yuzob^__d}¡®°¬ª£º§
+vutqovvqhh^hhhdligfJ"QigkokmmkihdmªÎÏ ~¡€š­° lgd_d_Y[ZQUVVNIHMIEAB=???B?9=9E_zc&
+
+
+ Fz
+~}}}z}|z~z}~}vlkZYOQJUUUZRY^bRQSgf7&0;7IQNE/
+88
+		
+
+ 
+
+'2423(%
+I`^b``ZZ^QRNIDF^
+
+OcbddW#%%
+plQUSYNLQUOOMJNRWUV[[`cdZJDIMF39<8<,
+2No
+¡¥£€¡£§£€£€£¥§  ©€€§š©¥§¡©°€vup^d}qpxy¥°¬ššš£€ £¥¥ ¡£€£¥§£€€¡¡ ¡¥¡šš°¬®°°¬ª­§œÄÃÇÄÆÆÄÆÊÓÕ×ÔÑÔÐÏÏÑÎËÊÄÂŸ·og^RLIU_p|
+š¥šv§² tyz~¶
+
+}vhh_ckgfhfm}DSkimkiollhgim¬Ñ×¿®¥kfi_^^^SVVSVUSLNIJLEFB<EBDDB4<=?RvyI
+;p
+~~}~zz|ssmc[ONHJQ\\`[gZf^^UQSU[\MEZp932"=D@F'#;=
+
+	
+	
+
+
+
+
+
+
+	
+
+""374/'
+
+L^ZW__b\^Y[RJAH[u'UY^dO!
+"&!"|[JIMRMINNDD=<?B@278&#%	
+    
+ "0Sm
+€ ¡€¥€§¥€££€ €¬®®®ªusqbxypxyu^g¥§­š¥¡  §ª¥©šªš£ ¡§¡š¡  ££€£ €©­©¬©ª¥šš§£ §ÄÇÁÁÄÇÆŸÁÆÃÂÂÄÇÈÌÔÛàÔÆÁ»Á¹® sgflkkmq¥§šštšlbhv¶||
+
+ }yutopifoâtimpmkhkgihp£ÑÓ»®€
+mlic_\\SZWRRNIIFFEA@DIA??<=<7<?53Lp
+xB
+Yooquytifcb[MINVVWSWZcbkfd`_Y`b\YUSOQH[\UESm2((+?9D'#;<	
+
+		
+
+
+!&+3*.(
+	Zb[ZU\__[^YILADWo#9SL
+
+
+!
+#&+sA549?;4/'
+   	   
+
+
+
+"*2Icv€€¡  £¡ ©€
+€©š®§¥¬š°©§§¥op\csuvvgtSm­°°ª©¬©¬©§¥§£¥¡¥©°©š¥©ªªšš©ª©£š££ €€¡€š©ªš€šš€£ ŽÇÂÄÂÂÃÂÁÂÂÆÂŸÄÂÂÄÃÈÊÆµ§¥­¡£thkklosy€£¡ pcu£mlqzÐvyuqtsopilfciÇ·¥°zzgif_``WUYVQNNIIFE?@A==<=AA@A<899=9Jg~o5%YqiO\NQU\^`^`dcc`\bU\b\c`[_W\Y_RSVNNLED`WNSi9.0
+"=J!
+EN
+
+			
+
+
+
+
+
+
+""&+**'
+Uff_`_`YY^OJUAHih
+
+&#!2V
+   
+			
+
+
+'+<B<Q[Z\dd\csx}£¥  ¡¥¡ £¡¡€£¥€€š¡¥šš£§ªª©­¬­­°­¬šª¬umbRkqtxpmvEYsm§²°®§ª­±­©­€©£¥£€§š§£¡££¡££š¥¡£š£ ¡ µÆÄ¿ÂÂÂ¿ÂÃÂÄÁÃÃ¿ÃÁÂÁÂ»±€¡ ¡vhlpkis|  tLo
+
+
+|}}[&=
+|y|µcªysppkf_`[ZWYUSQOLLJIAALFDB@;=8<@=90548B^x~xI(Zusko^_[_^bb_h\^`Y_M[^W_[^^[WVULNFIEFLIcWY[d//4&8B
+!HE
+
+ 
+
+	"#*.,+'
+
+Zd`c^_[__d[QOIQlc
+	
+		Yq 	
+
+
+#
+,,5EJSZdfhkzzttvuyypp|¡¡   š­°¥©¥¡©§ª§ª­®®±°Ž®±Ž¬xoZL}x}zvxM?\`S±¬©š€¬°¬¥¡£ §£€€ €£¡€®š°²±±°¬­¥ ¡ ²ÆÂœÁÁŸÂ¿»œÄÆÂÂÂÄÄÄÄÃœŽ¡£¡dcdfgm¡ b~š¡
+vpk
+tkxB2uk­ 
+lkg`^__YWZQORMJBEFBDE<<B@F@FF=;<?<87=A[oqtd7[yxofWVSZYZ\_YYV_USIVYWSR_\ZWUSWOLFBEJ@ZVU\b%/=0
+7D?
+=A	
+
+
+			
+
+
+"%+4**%"
+\b[^\ddddbZUOHLlL
+
+
+®k
+
+
+
+"%%+<ERR[cdkkpxxzv~xxy}|~uztuy
+¡€€¡§£ ©¥€¥©§š§§ ¡ ¡€ª¬°°°±£ylLWs8BH9H¬°ª§©§®šª££© ¡¡€¡£ £šª¬§¡§ššª¬®€¹Ã²ÃÂÁ¿¿ÂÂÂ¿ÃÃÃŸÁÄÂÂ²£  \RSV_hmiµ§¡ 
+xmm£šqq vx9
+7v
+
+£€fHqmigc^^[ZYQORSQMMHFHEBH@EJIJDF?DA<7@?=?EVZZ;Ny|sgQJFNVS[_[YSWUSMQ^ZRY_\VOMF=DDB8?AAQ_U`f#
+,=*8_o\D<;		
+	
+
+
+
+
+
+
+
+%/5/#!
+!_fcdbcf_^_SLWQJu<'
+"z¹ M'7AHSU_ghfhkpu}
+
+~|}}zzyyx} £¡¡§§¡££€¥© ¡§¥ ¡€°°±š€¡©šš¥~x^*}J<8+3b¥©€©¡®ª®¬ª¡€ ¡£££€¥¥¬®²®¬©¥©­©¬š€€££
+ŸÁv£¿Á¿¿ÁÃ¿œœÆÆÈ¿ÃÄÁœ®Q3@OY|z?=U£¬q|tm_£©¬hym^dc`bfdg\/"ftqz|
+x[lkkfgfb`_\UVUSRQNEFIHDBBDIDEB=?EB?8A77;9@RB+7q}ygQSQOSRURZZRNVLLRUVNLWWQFJL=??AEDHIEbN`[/5?.@hmQHD9
+
+	
+
+
+
+
+	
+
+!
+'(250"
+
+B[ciffg\bgYW^YZ}
+*#
+ 	
+D¥ÇS_lksvxsuy}}|
+|~}}xux|}}xv~}z|}¡¡£ ¡¡ ¡šª§ € ££€£ € ¥€ª§¡£§š¥¥¡}k;L£u@7(/5y ¡¡¡ £ ¡©©©¬ §¬¬©°®ª§©§¥§ª©§¥š¥  š¡¡¡£¥¡š§¡~zÂÃ¿ÃÃŸÁÃÂÇÃÃÂÂÁÄÃÁ¶šv
+s;DLoE.[©¬¡yyzo £
+xky§ ¡zgx
+ihfddccgfg^0\bb^[`^\c`dio| €£smlhb`b_\[WWMRSLLHID=B?<@IFHBA?;9899985<E`R'f|yl[WRIRRNQSINQNDDINOHHURHFZEBEDJJFH<?\RcO*D`gUNQJFL=9"!#
+	
+	
+%003
+
+	%EOccf`ih\^QU`9%!%
+&	
+
+gÈœzxxux
+
+yzzuz|vvyzyvtyv|||t|  ¡€¡šš§§©š§­®°­ª¡§€¡¡¡¡ ššš­¬¥§ª§¥¥§~tY&x£¡O/'(.c¡ ¥£¡§®®©¡¡€ ¡£ ¡ £¡ § ¡€¥§§§§¥€¡££§§}y}|~©®~©ºÆÂŸÁÃÄÃÃÃÂ¿œÃÁ¿·©}u}ZObt"
+Ss|uk|t}zu|}}yzpls|s~|z}
+ytzoš¥©ª¡zs~ddbc^^ccc`fb7!\gdccc[ddb`dcptz
+ooid_^_\WUSVURJFHLFF@E=EAABNH?A?=588789?FN=
+Z||fRSOAB=ILQEMLME=HNLMNUILI[J@ABIF@=<?bVgR
+&H``RIIFH<28&
+
+&#
+"
+
+
+
+
+	
+
+
+!
+  
+
+!;E=.
+!/'&%#*%"
+
+	
+ ;¡Ç}zmtvsv}z|
+pqqpusuuvuv~
+   ¥ €š¥§¬­§£¬­¬§š©§ªªššš©§¡¬®§ €ªš£¬¬±¬­­²®¥¬š€\'EpE((/9 £®²®­°©¥€¡€  €¡¥¥¥§¬­ª­€¬ªšªªªš®§¥|yyzyzxsVWN}€±¹œ»ÂŸÂÂÂÄŸœÁÁÁ¶§|t`V_|N
+/7,@U`s€¬©¬¥¡©££¥®€¥§ubtzkl~z¡­¬¥
+Žš}vtplhfbhd=!`ccd_^_bcbdglioz}
+~|lklfdb`_ZVSVVRQNFFEEEIB@E@?MIA947;8<?<7?@?.'S}v`HLFAFDFMOEDDMIEJQNJESHEDYA@JD@7?;7<bJc@%9LSEBLB;3/@;!"
+
+	
+	
+    
+&&03
+
+
+
+!8#
+((/%
+
+
+	U¥È~xxy|yxx|~||x|z}xyzx}zxy
+£§©ª¥§§€©©©§­¬©£§¥ ¥¬€§€š§¬©£€£ª­®­°°š¥¥§¥uh4uV'&*l¡€ €£€©¬š­µ¶²²±Ž²¬§ £ £¬°­ª©ªš©¬¬©šª¬¬­°°©¬®€|vx|yH%MyšŽŸÄÁÃÆÁÂ»·¥xx}YD2QNOL[lvtsZMMYNR£ª £€ª©¶š€©§š©š­¹º¶€o­š¬§§®§}}yx||yz~
+
+u_Riqkcbdb^cd^dhgiu}~}omhcd`^_`VUVOQHJJDHABE?HMAELLF??9=@??9;@A?5+IvmWIE@HFDHONHJIJAB@BFD?LEBBM=F?D=58;4EU<bb
+.DN@ADL;9,MSB.%
+
+#
+
+
+
+
+
+
+&4?;@HJMBM,"(IV@%%%"
+
+'Ì¶yfootopv~}s|x}v|yy|¡©§šš§£¥£¡ª­ª§šªª¥©­ª­®ª°­ª§š§ €¡£¬®®Ž±­­®®š§¡£¬©ª­š`UA'Jb+7V"š©€£§ª©±¬®­­±²­­§¥£¡£¡š©§¬¬š§€šš§©¥¥¥¥§ª®­°¬š
+
+}~
+c3
+FU[B0Lk€°¶»œ¹§zt~yp[
+"F\\ROQE&
+
+	&4gš¹­°°ª€££©­¬€°®©¡°²­ ª±Ž€¬° ©©
+zxuyxvsxzyuyyy}|x}~~}xuttpoooqu|x|iidfb`[\ZYZUVSQMJMMJLIFLFHJJF??<;?<D?DEB=942FscMBA=?<BDIEDABA;A??=E;DEIEH;DDBFDBIFLI8t+
+.?ADB==5O_fcRM@.
+
+!"
+
+
+"
+!%+0<EHJJHJOMFEORNSWVWS+%F<
+/p 
+9
+
+
+
+V°×¡qlihhpmy~}||x~pt}t
+ €ª¡®°šš¥±©£ ¥¬¥¬©ª©§ €£§¬©¬§­±²¬°ª£§š©ª®¥€£€ ¡ yx}yfE5+'
+vh&.#S¡­±±²šš±±ª©­§§€¡£¡§ £ ¥¥¥©©°®­­°®°ª§®©©ª­š°°¬©£~~|~|H?IFH8&
+
+	
+2Mst`V\F"
+ 
+"
+
+,F`ŽÁ°£¶²·ª²¡¬¹¶š¡¡ š¥­­š£ª±§~~}y}yzyusqpxytz}|tsvqx|xqtxus|}~|sllifb_^[YYOOSOFLMLHH?JEABDFDB@?9<;??@@=<<827d\?3B?7A?EE?B@4;59934<BFLOLWQLI@4,'23(#Ez`"8MDJD@BHO<bzSOM@"*'%+4+58<FNQSVWVVZZ[\__b[^cf^_\WYWVYYQ#+;('¶¿c
+
+
+
+
+O°Î±x}}¡¡¡£§§§€©¥©£§¡€£ £§§€§€©¡§ª¬¬ª±®®®®Ž®§§§§€£€ª¥¡©¥€¥qWM?8<<8<8#%
+Vh0
+}§4i£šª±© £  £§£©§£§ ¬¬ª¬¬®°²¶­§ª®­­§¥š­šm¡ªdu
+~oWE/#	 3EE+		
+	&29'%%"%+;J\uš€ š±ÂÆœª±·»Ž€š§Žª€€±²©¬µ€š ¡~zxussvttvopqxxtqyutollmmmqmfhkpossuxvuqoiohcbcYYYYSQLFNJAHIBB@EDJMJ@9@94489A?7<8;5
+R@4475;;;=@@=579?HHEJFF?7%
+!
+
+!7IMdxx='DM9;.0/2BZupgdifcZVSVQORMSW^\_``\_Z^[[Zb`_[[Z```^^iktuz\
+&&"
+ÏŸz!"%"	
+
+	@}}xymlpy¥§©©ªš€€€¡¥ª§¥¥¡¡ £ £€£ª­¬©°©§©°¥š£§¬©§¡€š£€©§¬°¬±¬­§¬®¬°µ£S8*+."
+
+2~ul`"o§©€F€š £©¬ª¬²­¬­­­°¬¥ €££§¬©¬¬¬€£€©²®¬šš ty§~ ª©š­£
+q[M4,!
+!(=LVB/
+(44IZhb./*0847Hcz£§šªºÁ»²®œŸµ®¶¹Ž€¥ gJHO\ckvz~}yuuvtoqllghhihkgkhbcfdgf__ZUSskkmigcc^YWRONLJLFIEFFFLMFNSIH@<=97;A?<785=7BFEFLHOMRUNBD7,*"029FFNJSRQOV\_\`hityR*@A(&+E^qlptgttmomspl`ZRSRRNSOQRRWZWWZ^\[cfckmgmlkou|
+=/+"kÊšo"
+
++
+
+
+*&0cziupfm€ ¡  ¡£§£¡€¥¡€© £§ª£¡¡§¬©©©©¬­©¬€š©š€£€š¬šš®§¡¥¬ª¥vUFDB?;33;@JLQl}ot
+q[;LdB@H¡©¥¡¡£®²¬¬®©¬€§©­¬®®§£¡€£¥©ª®­£§££ªª¥°®§€
+xo €©¶œÈÆŸœ²£~thV=/%"&/94+(5JRYUA//<IQ_mg+#"
+
+!!#!*5<L[gtz} ©ª­
+¡°§mVQQNMOA??EDFHQYfpu
+zyvokhhllhif``cgd_\^`Ysoidkgd_b^\Z[QQQLNIMEHJJLOQQMHAAB@99<;;@9??8/33.,+!%(./?AHOYVZb_[Y\Z^ZWWY[^VVWSYYd\*%*HVlzzuippso`[posulpf`[QU``h_^bbdffmmiofgotuyssp|}||tsug''0,+/±¥d5%%!	
+
+
+3BIJYQENit`=?¡¶¡£ ¥£¡§€ªš¥šš€š£š€š®§¥ššªšššš££¥ªš¡š¬®®°°§©¡
+is|
+
+ttx_SblYOW`V8Wd¡£ª°©®±®®°°  ¥©­ª€š€€¥¬€¡£š¡£¡¡€š¡
+ s§tly€­ºÈÐÐÐÑÈ·šz_QB0EE<DE@3+5;LSSND@?JSY_S%
+"
+#"!!%"
+!"
+!#
+%#!%&&.7DEQ[N7@43EDFOVQQUSNQLMIEFFELJB??AHMRbgq|vsqlgififbcYlmoihgbc^Z[\WVVURLLINMMHJMNJOIEE@?9@A?<;85</	"9MNQR\^[`fb\[[c``^\cc[YYQW[SVRQRQOQLFDM[gEV_kq|ughupNA^puuxmmlmmmks~
+yxmmssustqmvmlg_hkooquxt|z}L
+!%(%
+
+~RWNEA<4*
+
+	 M¥zfBN€€£¥€€¥¥€©¥§ª®š§¥§ª¬©¬€§£€¡££¥¥££££€€ys~
+dMYcdfhbHD_osyz~€š¬¬¬±¬¬©¡¡€€©€£©§§¥©€š£ ¡€¡€ £
+v~¬ qkpx¥°¿Ã¿ÇÑÛØÑÃ²€p[H=F?DFHD0,/8IORQLOOVZ\YL
+""&!
+"&"!%!'!!
+"&#"
+
+#''
+
+
+#+2?ELJMLQQ\WYWOMLJEA@?JJINVbho|
+zzullomlgggb_\W[\VWQQONRMMMIILMMOOIJHJ=@B<<A<;5;0!FYkmlklklhcc_cZ^Y[Y\[WY^[UYSWSHJFMLJMNFEEIWtzpmtgcmyu_L2&^
+
+
+|yuib``c`__fixv}
+~~yvyvo7&/?B'H¥vSS8,
+ 
+&2E=;;LdfD#If
+¥£š   €£§š®£§ª©©±šš§ª°ª§§¥¡€¡£¡ €¡š­¡ §§š£€§¡¡¡¬®­šlSR`Zhgm[V=/'(Ybpx
+ ¡§§ªš€€©£š¥§€§®©©€£€š€š¡¥ ¡£ }uš€yhgptx ¬±µ¶¶ŸÎÝåéÜÆªq`NHJNJI@0,00?RMUSQRWZYWM#
+%%%!##%%%!""&"#&!"!"#""#!%"(
+
+
+
+
+	
+
+
+
+.DMOU[_YVVW^^YVOVHLNHININO[[bhs|~
+pmlkkfdb^_[YVVQUVVROSJLRQRVYYROJLBAHDAA;;40,2fupqlkhkf^b_b\_\Y^[YSR^Y[[WNQFBLHBFDEDIEDD@Qmppku~pUA."'/l
+
+|yxyzxsmkdko|~
+yvqllkkkcg[""#+
+*U`L7.*4(
+
+#'00ALRF=..^
+
+€š§©¥£§€€£§§€š¡£€¥š     ª© ¡€€©€¡ ©§££¡ ¥
+~x}tSi`db^V=,"&3[x¥€£¡¥©­¬¬®®ª§¬©©§¬ª€¡££v¥ªymmiloxv|¥¬®°°ºœÑåñòåÆ
+ulc`\ULHA284?JVSQROWVWWN
+
+"%!
+&%''/%"&*"!+"*"&&%#"!!('
+!
+
+	
+
+	
+		
+"4EMRQZYY_^ZZYYYYVONMLFI@mkpllhhcc^^\[WYZWSRUUUVRRQYWWRULIF?BA<==@AB0Ysqkghc^d_\YYYSYSUUQSQVSWOQSOLJHMNFEFEEEB;@AOogpxyxZ5+*;DOm}z}~~|||yxzxuttpqstpz~
+~yogccbYY\\_\bgglM
+%BUf\9
+RdtkQIJIJE=;22,4NZ^NDHNWS?7JYVYi£¡€šª§©§§¡}£ ª€¥£  ¡}~~usdkQ9;;3.2.08??Rg~
+€€ ¡€§ §¥¥©¬ª¬§£¡šª­§ ¡¡¡£€|
+£®¥khgmmptxy€¥¥š©²¹ÃÙêõòÓ
+uiimlligbY[^Ybggbb`d^_g`#!
+
+
+
+#*0.%+*'&%#"&""'(#
+!!!*'
+
+
+;;@?JMA5+*(!
+
+
+
+		
+
+
++.9LOS\dd`[QNAmkkllffdb[[Y[VZUYYSQSUQUSVQRWSOJEB=?@?A<@DB7ftqkgcb\[[WROLOLORNQMMLOONOMJFFEEBABBDEEAA<AIqz`M<;
+0=@JHFWtyxzvlpqqzqvopmqpvuuvqmhhhf_c_himlllkkvyxof*(9AHID+
+@~
+~vbiluyvz|}|
+~z~
+u}¡£€££}|}}xqv
+
+}vuppqs~zvz~} £¡§š§€§¥¡ ¡¬§š§§£¡§€€§š€¥€£ ²²~okkpppysz|¡¡£¥¥ª¶ÆÛíóÙ tllpkkkih_bd^hqssstxtpyi8
+
+
+
+
+!&!%%%
+&+
+*&'!!
+
+!#
+	
+
+
+
+,'05<@JJHFDE=42*#&
+
+		
+
+
+
+
+
+*"23qighhdc_^ZYROOSSWSSUUQQULMRUUUQIA?=?D=@D==D9hopph_ZY[UONQJMOUNNLLLNMMLJIIEEBBD?@;D@9@;9BLlR0L;0?FFDAF<7HQioopsptppsvqopkhigiighmlyz}yvxxuch\hcggkgO%
+
+"8x§luu}xsvsxyt~}|¡ }xsi^hu~}|€¥ªš¡~£¬­­­£¥§¡€€£€€¥¡ €£   ¡ €ª¬š¬ªª®¥¥š£¡ªšŽŽ­£  ¡¥¬ºÈâê×©}upqllqlkf^\b`loppsptmphF%
+!"%&9ABB;84+/'"!
+"
+
+
+	
+
+!&*7;=HHFJLAA9,!&%
+
+
+
+
+
+mgigdffb`^ZZWZVUOWUUVOOSSORVYULLIB@?A72A7<=3lpmsg_ZZ[UNOLMLHNJJFIIAHINIEB?@?E@?@8@?BAA89LcF?d`ONEH?=?JN[fpilpvuovtoopuustxv|}||~|xommdmglhlgbYUW@
+0QY}
+|to
+
+ ££}z~suv¡§ ¥®±¶±±¡££¡¡€ £š®¬š¥¥ª©§€£¥€ª©­Ž·ºŸºµ·²°µ®°ªš§š§¥£®€ ¡¡§©€€€°»Ð×Ê§}zxtsookhkdc_`kkmqpkuomgVNH.
+
+,(*'
+0N[bb_[[\_^cVD&
+
+		
+
+
+
+	
+
+
+
+	
+
+
+
+!%,977BEAD;;=A4'(
+
+
+
+	mpkhlggf\Z`ZUVVVOUYSWSSVVQVZYSROMDAD@9;?;820hpmldb_[WIJIJJIMSIJDF@E@@FDED?<=;??A;<@=88<@OdRRp`ND7?LJ[iststvvyxvkZdspvsqmsoomploxstpqmmoksogdd[JH=I'.c~SL~~}}}}
+}  £ š¥££¡¡
+
+} ¡§§š©­¬¥ ¡£§£€š§¡  š©­€§§¥š y~¥°Ž·¹ŸÃÌÏÕØÙØààââáäàÛ××ÓÌÂŸ»¶µ¶»·¹±±­²°ššª°ºÆÊÈ±~ustoikkfmd`cgpoqppopmdWOM<8EE?+##&?QUZ\ZZZ[[^`c^J(!
+
+	
+
+
+
+
+	
+
+
+
+
+
+
+
+		
++585A9?@@74.(
+mooliiic`\Z\ZVWUWRUUUQRWVUY`YRFJH<A===8@;=?8fomlgc_VWOLJJLIEEHH@ADBBABBIF@;4<3=<98998;9@NkbRk\FO^^cqyx}|sipqlkmhiplpoohilli`bkmolkmmuvuytdZJ740&
+
+!it@J
+sclutz|z|z}z~skmuuxsu|y~|}|uz
+~~¡£ ¡£¡ £
+
+
+š€š£€£sbcgcfoq}}­±ºÂÌÑÜåññó÷ö÷ø÷õõòññïëæÞØÙÕÆŸœ¿ÁŸ¹º·¹ÂÈÇÈ»©xqpikglmopkmooodYRVgbLZkkml_`dbgdc^ZZQ=!%
+
+
+
+
+
+
+
+
+
+
+
+	
+
+
+
+
+
+
+
+		
+
+&#
+'lklmgggd_^[_UWSVQQQSQOQVUUW\SSNEB??@==@549A7kmlgif^RQJJHDHHHJEEA=??@FAA=;@@98/5525=3<5<?JfZ?JM\f`_svymkldipqmhlkomlqkilkglcQDR^dhmqppiklqlZ[WNJ3
+
+	
+
+
+%R¡RAQptyz}||y}}utth\ZUVlplz
+~|}}~}z|
+ ¡¡¡ª¬®§¬€sOLOY[WZ`_^^`p}~z°ºÆÑØåñööúøõñîíïñèâÞÐÏÓÓàâÞÜÝÝÜàÞÙÌœ¬€£¡£}|xvvspidbzš~_tuukU5!#
+&0%
+
+	
+		
+
+	
+	
+
+
+
+
+	
+
+
+
+
+
+	
+ppkffcg__[[ZUVWQURROUUOUVY[ZYWSALBABAA=9549*dkikoibWQJMHB@IAFDI@@<@@@?@DE;A?=3404208357AJhR8LWYMI^dkpmitqikpmlfihldihdmomigd\\bcclkdfhg_^\U[Y\\I		
+
+%_+7@IEDU~z}}sxz~
+|||~}xozpu|
+yvvuuyxhfyzuz~
+
+¥£¡¡€©ª­©§ xz¡lRLS[WMVZVWZVYqhZ\`_Z`fpt~ŽÃËÏÕÕÛááâèèÛ×ÕÔÛÛÞæîîîñóö÷íáÔÇÆ¿¹·¶±ª¡©¬ymuMc
+
+f92'%#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	
+	
+
+
+
+
+
+	
+libdfdd\^\YVUVZVVQLRMOLONRUSSNFBA9=;;=;@344(_ldhhf_[RJFFABIJHDH;4?58@8@<<=<9A272078;.558E^JE@H=?Ylolifipmqtmkghghomspdpsssotlpogfkc__`\`dffdfki`7
+ 	
+!L9ASpkYSs|zou~}v
+|scdgdkilt~||uomktttqx||vxy|
+¡¡¡£ 
+€¥¥£€£¡¡£ £€€}xyylQILOQVSONRSSSVROQSNOMVUYl}€®²·Ÿœ¹»ÂÊÆÌÓÛÛÓØäíöòäàØ××ÕÕ×ØÓÇÃ¿œµ±®š§§¡¥zv  _
+©€vYYUUS?
+
+		
+
+
+
+
+
+
+
+
+	
+
+ 		
+	pkhfc``bYRSVYVSQNJFHMMONILUYVOAF?A;;99532/4([miiglgZUJHEJ?DHHE@49=?58@DA<9;;<83477438034@bQ=5?=?MbmpllklsqkkighlltxzzuvpicpqpstsmckkclpqokktutsiF
+
+ 	
+
+%<Vdy
+
+
+}||}zzvutvq^bsspsxz}xtuvsttuy|y~
+
+ ¡ €¡§©
+€  £¥  £¥E"&2739;FJMQMONMLLMOMNVNJQQRSQWikx~~£ª©¥©¶»ÆÆÃÈÆÄÌÇÎÓ×ÓÎËÈÇÄÄÄÁÁŸ¹œŽŽ®ª§ ¥¥tt©¥
+|~zg*
+
+
+
+
+
+
+	
+		
+		
+
+
+
+
+
+
+
+mhiid`cZYSU[VSWQMNNNQRUOOQUYOJH<B@D<@=9//2*!\mhhkfb`RNAF==AHD?99=9;85?<<77<;<5./50575,05?^MD@<?A@N`kmpsooluoxqlhpqsmqmihlmkmlx|xqlkstxxtspslokd_Q78"4F^m~
+z~yyuyy}|}t|xvttpkdkkiit~š¥š¡§š¡ ¥¡£¡¥€§¥£ E
+
+	
+!!+/239DIIJIIJJRNROSUSYSORRUSVZ`dklv
+€£¡£€š¬±µ­²°¶¹¶¹œ¹œ¿ºµºµ¶°§£¡ ¡£ £ E
+
+
+
+
+
+
+
+
+	
+
+	
+
+	
+
+
+	
+
+
+
+
+
+
+	
+
+	ghihidb^\[YYYSOUVQUMQRUOURWUOLNI@FDADE8?92+
+Vigihdc`[UNEA=BA?<898=5729=?<<82;97474+4707/5dL@EFMRSQSddsmgglmpqmlomloslkdvvv~~xxxsuuxxsxsttuutpqkVLJA+,0=FN`iuz
+
+}y|}|uqqxxyz|~|x|zuttokibmmg^dkov
+€££§ ¡š§  
+ ¡£¡ J
+	
+  
+	!
+'00;?AJQOSRRQQINSNZSJROOUSVksmh_dkomlx~~¡¥¬±±Ž²­ªª££¥¡€ ¡¥€€£¥£ zH+*	
+
+
+
+
+
+
+
+	
+
+		
+
+	
+
+
+ 
+	
+mkfhdfc__^\ZWUUUSQUOOUUOWUVQSHLNHJIE<DA=7/*&Okoggcb^^SNB@=@BA@;??;7488<934.209//332/03//0^OLNONB?@?L`g`_LJVdhmkpqpqzy|pxv}xtqqploqupussqxutqmqssdQIFLOMWWoxvtuxxxxqyuouxqsov|y}x~xqiilkmihfdhiiidlyz~~}§¡ ¡¡£€  £š©š€€¡¡¡L28773,%		
+	
+
+	
+
+	+'+7<D?FFMOHOSONLMWY`\WVZZSUONMMSROVfpvxu~ |uuz
+
+xSORNNJHA=8.2%
+
+
+
+
+
+
+
+	
+
+
+	
+
+
+lkgdcc_`^[[ZQSVUNRRQLHJNROLMQJIF=AB??=8?9/*
+Skhcd`^__NMFA<9=A;2750/8.;;993.22752//22.430D^FBDDFE84BQ\g[`_Y\hoosxyz~~zutomfqqpomsypoutpvvuqtvzxiUDEQS[``dkiiidhmoppspuqtyvuuqsqimcVYfmmqmqoxu}zxvpmvupz|  ¡  £¡š   §§ ¡U4B=;720#
+
+	
+
+
+ 
+   
+	
+"/842?FNRRUQOROOJJLQNIHJIIIEFJMHJS`cgmxy}|zxlb?;<=?JJLNZbisttxz|}|fLQLNMHOJQNNOOJDEA=90+*!
+	
+ 	
+
+
+
+
+
+
+
+	
+hgbc``^\RSUNJMJEFJFHFFDQONMOULJLH?9B<B980.%#Ndif`[c^\UN?989<@727,0/(295473+2/.03402837/3DZOOOOOSUhuumoqoifktz}}z}~}uskbbghquokmiliotvxvsvqsxx|v`ALUYbid`d[dffcmsmvptttqphfbimlqspyupuuztlsvpsqxvpoisv}}~x|¡ €€     £££¡ £§¡   
+E7@A==5,%%%,0324..+"	
+
+
+
+	 
+
+%2*79=@?@DIOJJONJJDLLD??A?@;???EINI;	!/44<A@ELOQSYVWZbcb`IILHIJBEAFDIMNOSJMLFIHLJDBF=79,/#
+
+
+		
+
+
+gig_`__\YQYSOOSONNMHIFMQOOORWNNJLHJAB;9777+%Fklgd\bf\UF=<7@;333833+*/798,''//2+.2772+/3.<QDBAJScdpptotzz}yzz||y}zsud^bfqstqpkqssxtupvptvuxxum^RQ`c\cbchZVZ^^giqqqolmtisuupykkhmtouvsqttyu|vxtxtsqploppsvy~
+   €š€¡ §£  ¡£€¡€¥€¡
+;8?DB@93#&*33349<A?774;72,,'&
+
+
+
+
+
+
+	
+   
+!'#/837?9D?B<=;;97E<9979;5
+
+/75<=EED@AD<D;@JIQN@EHEJHEFJADEFFFBBA@ADFEIJHIIMNIJJFE7/#
+
+		igcc[^Z[ZSSNQLLJMMROIIOOQQJSRMMFJHFBEBE?72+Noic\Y\_\SE752<<70/*0**,0532(,+/0,**,52/05,,=L9LY\lhsyv|z~
+z}zuzzvzspmkggkpsuyxstttvuuusokmopkbWS[d`^__`^db[[^dfkosxozxpoqqommouluukoopupuzvz|yzx|tzy|y}~|||¡£ £  ¡¡€ ¡¥¥?8EE@B7/
+++.4959;?;9@@A@;?<99B=85782/3(	
+ 
+			 
+
+ 
+
+
+%*"55/232,*2
+
+7?BIBIILE?@B5997<9?E@?<8@DAA;<DI?ID??A=EDDDA?AHD<=@<8*#
+!
+""
+
+fcc_VYWYURNONMHLHHNFDJOLNJLWURRMIFFAB;??97(LgfcYV^^WJ=57,<99/+'.'(,4<0/0/%0+&,.//,,0009EN^oqqto|~}~}vyxuuyy~splmssmhqqmotlqtookpsohtvqpf\`cfZ_bf_^[WVZSSMQS\^dklmkpxyvuvxzuuxvxxvyvx|yyzsuz
+
+~£ ¡£¡¡   
+¡¡E;IEIH82&!4544;7757;=DEDDBBBJJNJFFJHA@<;;787.2,,%
+
+
+
+
+	
+			
+
+
+		
+%009=7?47555427JA354/8=2543;?5;75<<99;FDEDA@=*(+'
+
+
+
+!f^bZY[YWYLLHMJHDDDLHDFNIHMLSQOLFEADH<3<<A8/&BfcZUQYUQA5707<;4.(+,*(3?72+/2**&%&*&3(/.229Hkyyzy}~xutxxqllkmshmigbclmmsxtluusosqhiffdosmtqi^ZJ@BR^^WMIDEMLFMSWWQ`dkiooppvvuxuutt|zxxz}}z|tsyyzy
+
+
+¡  £ ¡  
+£E2EMMB9.#(/./40823@@BAIIJDHNILNJLRQJJHEBAA;?94;?@<4459''!(
+
+
+
+		
+					
+
+
+
+			!'+2RJ4579;7;50259557?58403502045/.30+.%(
+"
+#&'%!dbdZWWURQMMNHFEHBIFBBIJJFILQVOMLH@D<A57=<0*#@[_ZNRRFB82,(8A98'*32+,83/(%+'.(('*+25,,3/27Bqzy|zz}ystxttxzxpd^`iqkkuvusqoppqtmpttkfih_dbYULIMS\QRNFBAEFDABNQFY_bllossqyvxtuqtyzvxx}xvus||}|yuz
+
+£ £¡§
+J9DMQD9."#(.335=9=;9798=9?<BABHJIHLIFIFD?F@@DD?=DBB=A9=9830430.,.%(
+
+
+		
+
+		
+
+			 	
+
+		
+0&+0/23323845;/+/32;//44*,3020++.*(.*//,,+'0284;5gcb[WUSSSLOFBHFIEIIBEJILMORWQNLA??9A==9<=0(&+M[WRSNA<430,790,%,*',&032+.0.0,,/+/./35(/3;Musyxvyuxxvxvsptokhf_ksipmouoosuupptspkggSFHF95<2;0;JMJD<A?FFHOSUcb``iomdlqtstlssusqstuusystuvvz|y~}x
+
+¡y
+
+ 99LNI?5/
+&*.27=5=?;4@D??=?;;7?8@@4<9AA=E@BF=;@@<<A@@A=?=<<;<?9?=77800,*%#'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#"./0/5+.728457.244*0.5+2293752*/2758=?__c^VUONRJFFEFDDFBBBAEBLMJORQLIF<?8??774530+*LSQIFE<53/(*780(,,&/./342///,+'3/+35044.<DFQssyvyzxyzxkdkompokfosmplpuqmsusvtuomgWI93.!
+'32+,5=AFHFMIISU_\[c_bfUfifkhqoiqqstxutxvsxzy}zt}~
+ ¡£ 
+==LIA@7/
+((+5<9<;?;98@=A@99;@<=@B=@8?<<<<B;<B=DHH?AA@=?=BD@<DF@HB<=8940,//*&
+203!
+
+
+
+	
+
+
+
+
+
+
+  	
+
+
+	#"%(.02+/*33322354,2/02574340b^YYRJQMNE@??DA@D8@B@=BHLFMOFJDA=875373278+,!2QUHA=48,*./<842/5/24478B@=D?FA@?@E<422289?Au~vpopumhidffdilqqspuuvvvuvtstptsppgdL/&
+!*+;IVOB@ESVVWUS\cbbc^[d_cgbbhihuxvvvuxxvxxv|~~}
+
+
+€
+xz|¥£ ¡¡
+D7FA=;04%
++(++34<B=AB=?=?I@ADE@9FA?=;=BA@F<<AFFDLEFDFFHIBBLEHEDBEEBD;97877/'*%
+.05(
+
+	
+
+
+!/094***+'!"	
+	
+
+
+		
+	
+
+	"%#"+/,0/++0**.,(\YYRQNONIAD=;=?@AFFA<?EMLHIHJF;83774/57+55//'!QOBDB@?;8@BBDD?<@=EA=EEI@ADEMOINOJBIHBDH?F=pvbWdgfgdcikppimqoqtvyyz~}xyy}xsdb\JEA=MSUWbd`giddbb[bc^WQgldfgcckgd`chquy}~~~
+  | £¡E@E??9<."#''024=8<<88A@BAADF=?EAAF@EIJLENJLMJLEEBBI?A=ABFHEFD?=<E?D9;8<3,4..&%%*43%
+	
+
+
+
+
+
+
+5FA79A?7=D4<=;2/3.&&
+
+
+
+
+
+
+
+
+
+
+		
+	
+%+%#YVUNJIIEHA9A=@;A@?D;7DDJHLIHIL=95734/,80.2,0!/DEFD=89=;AIEIEOUYSUSMQONIQNOU\RLHJHHD@DB@=<gtsmiohkdfilqtpsvtvqsvz||ysqtssiQMSNNOU`mvmmsquyvtpikhifgdfstputmikikpoq~~u~z}~~
+zu
+¡ ~89D@D;72!(0.033808=9;84;@BAEIEBBIHBIJLLLLILIIIEEEHEB;9<7;=?A?<8;@84537;42,,*(*!788!
+	
+
+
+0=AEB<59<B;9DA<;<@;=?7=95*(%!!
+
+
+
+	ZVUIIIED??998<B;;D=9==AIDEDBLHB<8/824.*(+,(**5YYRNI;EHDNSLOJU[ZVRIMNMJIOHOVVOIAA@A8;=@8;8ipooqpppqupuyuuqutsomquytytzssukYYVFMScpvypuxysz||zxtxpqvvzxvxxupmbkoddmzxy~~
+~}zutyth|yx¡£€€¥ A;B@A;99&'.2277<<BD9;==?=A?DIHDEALBFH?HEF9AHBD?<B@F9;?<;<?<847+D===;;74500*+&'034'		
+
+%*'%&#!%&&%+3=9;=748@E<5@7;=A948;?<4524332/52*+(&+*#
+
+
+
+
+
+[RSMJDB@?9887<=89@9;5A@DHDAFEAD<;9989.!&.,&NfhWM?=@SHYWSQRYQLNH=IED<BEAENJ??A<9=585<94=ivompmpuvztvyy|v|}}||xxomppd^b\WUYZ^`iomstyttytsyvst|||~yzvkmuttxyoxuos}~
+z~spookldkfxx
+
+
+~€¡¡¡ €¥ @4AA<780
+(+058;;A=AEEFDBFF@DDBFB?@D?;3?;=<==@A@=EA?<=DD<<DB@<A@D@<9<=744040,,'
+#.+(
+	
+
+#"0.,/37434<97;978=7<A?8=A;?9<88A4A50834;8?,72,2+75890(0/**'
+
+YRRLI@EAB@@=79;=A75BA=AEBBENFD@AA49<42*.0,,+RkgUD<5=F?MJBJIMDB@@?;@?@994?DD@<A=7;033433=iypoxx|zzz~|~}|~||zz}utuxqldSVWRc^_S\RU`\Ubittoilvoptvoouyvqmsoksyytvy||v|
+~~~
+
+||ltploik\_msqtq}
+uz
+
+  
+yt|~~y££££¡ =3?=<;4/
+%'/7<8@<=FHELHE?AAE@=FD@DAA;=A9@9;?99=9BA88A@<55<@8D@9===?=;34;890/0','2(
+	%&*'+2//4893=;A=?7@=;@<<=@5<7<;89@B;?<=8;9959593/43/2,.#3255(//0.+//*%!
+YRQMJAHHJA@=9=7;=;A@?@DEMOOORLB;58524./4,++'YkkQ?328A?FEB@BE@BA899<=<8<79BBA=;<4747944/;f~|y~|}}zyslqstpmkqvyxzuyyxth`YEENVbmgilhqmcbdgkskiqllmmupppqustxq~~
+}y|~}
+
+|qqlpxxt}
+|
+|
+
+
+v~y
+~
+
+££¥ ¡ €£  98@D<<33
+"(.2;99A=A@BILHFBA?DDEH@EFDFDA?H@=A;;=5=58857;;7<<?E=;=<=@;A<9;A?=.,'"
+&&,
+
+',,*(2438?5??8;E?=E@A??;??4?957573070*..34285?<9@<@;;<543478<72.8//,983.0,/WSQMDDAAB@<=97==8;==?BHDNRMLMIA734;37*.,*..&!Yf`I424<?A?DAIEB?EDED=AB@=EA9EH@59500//555/4d|xzuukuuyyqtu}ykffhpmuvomfhb[WV[^YW_ofhkmopkoloffgkiptifckkxx|z~
+}vz
+z
+
+
+
+|
+~}t
+¡¡£¡€š §§ €€¥£ ¥ |9?LBA=70!(,*379?8@@77;89DBEAILFFE@E?DLFFIA=<<7BB<?==;<@<545042/75;AB?<?@A;95**%
+,+.
+
+#0/4<858<B?ABEBB;BBDA<<@7??;9774280398787;,/050;<45;==/58/73,37/00+,'/0(2..WUSMIIBDDA?8<8;<?FJLELIJIIJLNLB;4;974,/(*,*!!V`[J57;BJFBIEIHNMOHB=5=;=;==89982023*3745049fxuvsotyvxvxuxvg^UYhtxsxyxog`ccioomhcfdillkqsuqupstvusxvtpz
+
+
+~x}
+zzy~x
+yyy|y
+x
+~z  ¡¡§¥§¥§  š€95DEA?50
+
+'+2=<DB@FDD<9<<?@=EBHHDIEDDHHFH@EBDEEHBDA=B?<@?A?=9354==84=949.0,+'"#/40
+	
+&"'/2033;5?;?EFE@A@=AA@;@<FA?=83<;2037283+'//39;324;9/4980484.0032532+,*00.VYYROJAEJA?@;==BEDID=?BDIJLMJJIB;59??3/++3'!JVUE4/@DDEFDEFFFJOJ@;74<<<9@7;?9579/43747@;?d}|ssy|yyolottutgfdht|||vpoomkggkd\bffiikllgigggqovxx}~
+
+~y
+
+
+
+
+x~|}u
+
+ ¡  ££ €€š©¥©€  5<EED=9/
+
+
++&#&,3048AD@A@=5<<AB@?HBFBAFBAABBDBEDMHDB@A@@HBBBHB@A<E9<<542.,,+*#!
+.4.#
+
+
+
+(&'*'/3,*//8@9@AD=@=9A@BA?;9==99<8747<84<985.475754/940;=848=8;92/342703*,2SYVMIFFEH@A?8?=@;;A?<=EBIFMNHFA;8;2=A8(.4,4,"JVQF89?IBAB=EJD@?D<A<975;7?=?A?@;?427/0;=95A\puplpsqosuvmmvyyxyvmosuqqpttqmlgfkmk_Zhlgficbospx~y~
+
+~
+~|z}
+
+}z}y
+
+z ¡ ¡ ¡ £ £¥¡ ¡I;;?;33+!"
+
+%+,2..354=?A==A=?;?D?@DB?B?=A=8AAB@@ADDFFE?EBIFF??88==<;/47//&%&"*0+	
+	'*/02(/043075;79<=98BDEH@?DB?7A;;48=;2320.883389288727875988A;9@957;7275449^ZYWNNHMHH@???<?;5<=9=EINNNRSLE?A??@@500320%!HRNF?EEJEE?DEFE<DB9=;A==93?87;<=??7874*538=<[ytuyusy}}yxxx~zyz}xuzysqqopqsssqummlgfoiotty
+}yv~||}
+~~}|
+
+
+
+
+~~|
+
+
+
+€ ££€¡€€¥  ££f<43743//&!,,%'#%*'"&/..0,0,0/078;7<AAHE@=@@?FD=?=@@BABFE@E?<@A?=<77;;59=03/.,00+/#*90
+
+
+%.,.//2.222705<;<=;977;8?8;A@=?AA985/9597874/2/3420/224<998;<;?;;;7BDA==724^ZZVQMOIIH<A?;7488@A;<AJRQNSNNF88;8<@72022.,!<MI?7@DNFBD9DEJD944329=;<77444@AAB437342399=[vuqtyuxqmxxutuzv|z|xzxx}zxtvqspuolsyz|
+~
+vluxv}u|~|~}~y
+
+
+
+
+
+
+
+
+
+
+}
+}}}}z
+¡ ££€££ £¡€ ¡€€¬}745225770307=?<5@??<7002.,0045(/(*.//;;55;7=?EBDJA89;;=;589<=859?4978332044//+..2'
+*,,	
+
+'"*+00,///2<4735<=8855<2475?@B=AD<D727739545+.5/,//+039857;797?<758=9<<;@28_VSSJIHDE@<58389/3=@<;DJOOQMLHD;43234*%(*,*&4F<54<DJF@98==@932+,+479;@54/5DA;8;597574795[toutuyyyxup}yz|xvxz}
+ypqvuqq|~y}~
+~}
+smqy~}|}}
+}}x~
+
+
+
+z
+z~|||x
+s
+xx££ £¡  €€ |t<;883584/.*45=A=HNFORNLJHFDA;87930/,*/./*.//*0/+8;2/083353/3/,58;8222.(303+*/'+*'(!,,.
+	
+*/'+,03+0025442578285;/2253/49=;;5448@<8@?=72.4327,3734/.2577450440=;789A??YVWRLHIDBB87588748HE==EIOOMMVNB89875?4*(.0.
+3;=;9=DH?95;777'+.%%#,(/;50(,;5032/./+/52289_vvqvxxuyz~yzpuzyxy
+
+
+|sux|}z~|~v~
+~~
+y|~zz
+
+
+|~x~zy~
+|ty}
+
+}}|qdk
+¡¥£¡¡£¡€}¡§  €i703545434053//=DHBMORMFMLMMQQRJHJI==;7002*'+%,%%('+%"'*,//%'30,,887243,///.'/&(,!"#2/,
+
+(+/%.(2/,2/24979?7477<45=9444;;;95=92/584750/002755/,558344..3300,;3478/28<VQMFH?BDA;4,/0;3/4@=/2EFQMLMNHD527<8?<2&2995!,44372.95/(+0'&#%!&'*+%2=9,'&54,,./'+,/,/.,;dv}yxutlvvqhmqouyxiuz
+
+}vv||~y}
+|~yyu}zutuxy
+
+~}}xqz~
+
+~vptuu|
+
+~xxos}}}~xvxy£¥€§¥£€€¥     £ €¡  ¡¡4!"#'''
+!&/*/54<<BORQNMFFEIHEHLJMNFMEHLHB@A<7/,+*''%!,+(*
+&,!%&*2+#"&,.*,'+#%"%!,5/	
+	
+'./*,+,,*,/93299?;==<A@A@7=<72288887/3353/+.53*+8302+.0'020/.727/554,.*.333QJLED=?IB9402.42'08@/8BHIMMJHD<957==AA+*&0+,
+".3902+38<78<8200%'%!.0253/(7?33///,,2*..,29Sipqtspplqqlvtqsx~
+~yy~
+|zv~}~xy~zz~|zsqlpmqv}y}
+
+~y~
+}z~}}
+
+~
+zzvuyyvxx|~}}~|}}}|y
+ ¡¡  €  §€££  5/+,.+#	
+
+
+'25BDFJDFBBFEHHIIEFBAFDLMIHDHEDDBA983*'%#&(&'%!
+&"
+&
+"%%'!
++2+	
+
+,,.+&#+/+*282//2349<<=;??48?87?BAD3259=907;4+0//4<3<0//+0...&+,2+(.//*+,+0(UMEJF=?=?7+23335/5@<.@@@EJLD<02/02/350/.*453,<<8;<52,&(
+  &7=;99325./+'(&!*&*+Yqoqtslkmigfgs}uvutussphdozyyvptptvt~xpqstpy
+
+|
+
+
+
+
+
+
+
+
+
+
+
+
+~}}|~xy|ut|}
+
+
+
+~
+ ¥ €¡€€¡¡£8<3.0,''
+
+
+
+		
+#/+454459;BE?AHAEHDBDDB@FIBD=?BDB??387/.!!
+
+
+!*,*
+
+	
+
+
+*&*,(.....89953,875@/7259;;?9599;8=9887050/./++/0227.25'4,++0+(**..+!&(2((+LEBB8;3989/0.07;349<<9A@@<;7*+08<<839443/(*#
+ 	   	
+ 
+
+	(544,.&
+%#
+""&8dkpmhmhhhghcpvv}
+}y~}|z|xzzvmptslstuy~~~
+
+
+
+|togfgl|tosu||}}|x~
+ 
+¡¡¡€£§¥<;83;5++
+
+#'(/*(/*&%
+
+
+
+
+*/24<D@BB@EBB@AD?;?E=<D?<;<<5552<87/',%#!!'			
+	!,/(//0.(/*..4004.7/5877599;=<4345<88799;77800++/0,*(+(,'&.(**//'+'&2(0+./+(<;957?3?<2378/9845/3,%&
+	
+
+
+
+    
+ 	   		
+	+*7*&%#
+!0;JHflkpz}
+
+
+
+}
+
+~~zu||}xxz}
+}
+
+~~
+
+~
+
+
+}
+xlgpop}|qvxxz|~ ¡£ ¡ ¡¡ €9=9;=40/%
+
+%+72224589758550.(&#
+
+
+
+'2822<==??????<?;;9;9BAA?2/3./.*((('&(.%!
+
+,,('&!'*./#024.0//42/52,,//84;4;88=552480530/00+.393/2.(0/+'/02'000/(*.*.&((%#
+
+	
+
+  
+
+ 
+
+	
+ 		
+%!%%.%
+
+	
+
+0EO`ip~
+
+
+~|
+y}z|tsxmtsx||vx~~}t|uy~
+~~}z|vz
+
+
+zzt|ugqpqudkskkgmttdoz
+ ¡€€€¡¡  £   <A@@<;50#
+
+"'+2887;B=;988=9=;;7458542*(%!#
+
+	('0/5<<8849B=EA;?=4+''*&&#%&%('(%(&'*/*'&"%!&%#+%"+.00'.(&+4+.+23589880425342//+,0/,54*<53//3540+(**&*(,/,+*&
+
+
+	
+	 
+ 	
+
+
+!!+%
+&,34<HJD;8;;03<A@B@AENFALJIS_filqu~
+
+
+zpvsy|}y|q
+}u~xpp~z~zsxt|}}|z}y|
+|zzy~sxsomssqmkodixy|uuztxz|¡£ ¡ ~€€¡£¡ £ ¡£ ¡ €¡£¡£ ¥ ?A@EA855'"&'.29488;=9?<@@A<;89988<;7;<8<9435./'*!&
+
+!#&(2353444''(((&'''!'!
+	
+
+'%..'(4054803//,/,*%%"*+"!#(!%(!(+/../,430,00.+//+(+,'**23//.3322.%2+&!' 
+
+
+
+
+   
+ 
+
+
+
+""#(!&022&4@@E<@DEJLFAELOUZVJDHFJDHIOLFLLNR`_dhfhmlkmimo}
+
+
+|}}x~ztyv}~}|utlmx}~|~}~v|~
+|xvuuvvx~}
+xv|~x|stqydipquvuv|}|z}x~
+
+  ¡¡¡
+¡ªš  £¥€€ £¡ªBA?A?<;8*!(0447;<9<;9@AA=<9A;B<B=D9?=;??<;77974972003*3'*!#%
+
+
+%"#%%&#&,*
+	
+	%&++.75/??9=;<@=D<?A8933.0(**!
+
+#
+
+
+%
+
+"
+"!%&&""%*/'+("(/*2&2'((%/./,3.,,/,
+
+
+
+
+
+!
+&,../0<HBJEDA@;FMH=EIF;4ELNONORVNLIJHIIFJ7;AEBBENJRZ^\hifmsmooklplmlmt
+zz~|zzy|z~vxtqsx~}~|y~y}}}}y~|zz~zzsimzytsdmmuuss|zyvvvxy~zvy|}
+
+¡¡£€¡¡¡£€9@A=?EB5%
+
+*49;=@DEHEAHEDD?=??=?A=;=@<=<?BB?=8=<=5495<?39;83554,0++*"
+
+
+
+		!%*+*05<;9BAE=???<B<<334/(57/,/&'*&&&"
+"
+
+!
+#&#(&+4'**(&++/*/23,'.,,*03=E435<7;23+089??AIHMOSYSNRNONYUQHDA=99AQMLMQSJRJUYQLLHMRFLUWYccfhkmhhkbhlllooihopolv
+
+}zstlVby}}~z~
+~|
+
+|z||vvv~|||zy~y~}yypovzv|
+}|usvsqu|zyu~~   ~  ¡€¡££ ?J?@DA@5'&009A=<=8AAIOLOFJA??9?9;@<87<?ABAD=;98?;99D89;8;97859775274'+,*#"
+	
+%	
+
+
+!%&08848<@?3=590//0.22/.,0,230/73330,*&"
+
+
+
+%"&"&
+#&%!%#*&#'"/#FJJQNHHJSOQMD?22*5=DDEFENMQJUVS^\_RQOBHHDADOOOLORYYY\ZYV[`chgmmggkhoomhhhggkkfhmqomihmv}
+
+}xtx|u~
+~~}|~z}x~vutx}~}y|~}~z|~}~zy|}||~
+~~}z~|zvu||~xpihqx~
+
+£ §§ ¡   8?EBJEA9+,05;847575=A?EAFIFJFHFEEF@DA@?@9AFEHB==A@<<8A8??8A@@78;7353533,&&!&"+3((
+
+
+	#"+(+(*,/'*(,5**.('04**0./5+0./73/./*(*%!!%
+""
+!!%MJILROQOOSQA=;777;HJJFEHB?<BQWZY[[VIIILJNLSOOURW`b_bikgllkklmmphkolikccg`[_fhgglommmks
+z|}viux~}~~v}}~}vqlqtuspquyuy}zpfhs|yy~zxx}
+
+~}
+}}~~||yyokvy||}zxxmkqtyv}}~
+
+
+
+|
+
+ ¡££¡¥¡¡ ¡ <?ABDAA7+
+*.5<9;E8<@549=DAE?BFLMHJEB@EFDJ?DEBHDEA=@<?=A;=IHALFDDA==75<4852.+(##73/
+
+#272/,//,.&*!
+
+	
+'%"/+/42**/,022/,4,./(2,0.'+,(*""%
+
+
+MMLHQORLOMHDA=<@=<D@HIJF?;AMSWU[_[YSSOIJ[^`\d`ZbhdhfhhhfhikikidkikhhfccYbddkihigc^cihp~usyyx}z|
+y}|~}uqqqkpphm|}~|}xx|oZs|}
+z|||z}tvxvsutpvyv~~zxttoy
+
+£€€ €š§¥ €¡ 4;?DHEA4+
+
+.%024==<D@?53?=@8;@EHNLLLFFABFBINMNJDIEEBDEBBLDEFBDI@D?HF?89/320+,&&
+%/8,	
+
+"/,0;3754<5038483/(*"
+%&+!',,.9/.4/50(*(,(((!"(*+,/*&*."*"#HIJQJVNLOMDLHDA=8<DFIDHNA;DQSQW^bdf``c\`ckfgidilmhgkmfdhfmkmiklk^\\^UV\V_d\cb`[\^bmqov
+
+|tp}~
+
+|zv}y~uz~
+z~z~y
+
+
+
+
+~
+
+
+~}~zumppqusxuuqttxuptxtmiksuz  ££¡¥£  €€7?EEFD90'%#&.889;5<?F@BEEEEB=<?@@=BJJJDHBIQHFNMMNHEHIEIEHFFA@ED@;855573222+%*%"(93+
+	
+	++//558=9;7;48955743,2.(&+***'!
+
+
+
+"%&#!'%.(+,+20/(%+4+(&//,(0++NHJHFF==?@A?HIDI@BIRA=FLNUY\\Z\cgmmkifciklomhghmmkkskikkkkifgkog`^_`YV_`chfic^ktyuuvx
+
+
+y~|xztvz
+~~z
+
+z~x|}~xv}
+~~}yxxxzyvulotxtqmsvmihtuxplmx~~ £€¡¡¡¡  ¡€¥¡€¡=AEDJI<5(#%+732889?@A?H@B?FEHABBBBD?ABAEDBEFFOQJJHILMOJHA999??D=;;827(/223'""
+%2+'	
+
+	!'/3/0+,087;757;;=<<;?5280//(*&!/,.3+*/%*&'!
+!
+
+
+
+"'(%#'&(&&",,.*&#JLH?8@<@EFHBB?JLENSSUOSSVUZ^bfhkc^^dgffilkkkbgdklffkkkhmpmogiib_fdckmld_klhilpltzzxz
+
+~
+
+|phz
+}}ts}ppmkz~
+}z
+
+y|~|~||sp|xxytsst|yutvoitqv|x~~vvv~
+~ ¡€€€¡£¡¥¥€  ¡  ¡€  5BJJEI=5*
+*(20,479B=<@BFJIHIMJE@=?B@=9?=?BA=BMIJLNIHNLE9/8?@AB@A89;479375+20&#
+'02+
+
+
+&**.2.5/3/3535;;92;;;;3732,(22.754022/,//'.&2,('(&#&!%!(!A=5<=EIEJQOLORVZ\[c`_d_b_khfcbbd^YYbcfgfdcch`fbgid`cghilkb_`cd`_dd_\bdhdchkcdkkkps|
+}x
+}liqqooiq
+
+u|lm|
+
+
+
+}}}|~z}|squyusxyyvvsvx}y}xqovxz}}~~  ¡  ¡¡€£  £¡£  ¡€4FIHFH93&
+
+(34.559;@9B<=ADHDILIIIEBAJEA?<7<BFDF@EDIJIIFIE8377=@<8773885<47.''###
+(*+
+
+
+'3+,/.2+.04;;9977<;;=93024.4035779;584/3./+,4/24(,,%*"*,!(*,((
+
+			LNNQU^^\ZZ[bc_`Zc_cdfgbddhdfd_^^hdfc^cbbkpidc`_ccghc^[\_^_^Y[c_WSVNDO\llohglmpmp~~
+}
+
+
+~zzy}
+
+||~xv~|yvxyzxmdgivpsqx|utzxyz~~|||
+
+
+
+
+
+£ €£¡§¡¡€¡ £9DIIDB;5,
+++87<<?B?;5<?E?DDDDFLNHJJDIFA<@?79;<B?@7=B=@IMB8939=D874<832232030&&"#.,(
+
+
+&352.+97/489?;@?<<9@A9?;;;;;47375478905//478<878<78,,',/.+/+.(*/,///#
+&![^b\V\Y_Z`\^bcddbcgdgh[`fhidd`c_c\_[Zbfcfiffcdghd_bhf\ciccb\W\\\_d^ckhcdkmpstlkly
+}~
+
+
+
+}~~|}~z|~xspvmkifoocitmsutyxv|
+}z||~||z|px~
+~
+
+z~
+
+
+}
+ ¡§ª©¥š€££€  ¡€ ¥7BMNOD;/&*.223;@<@?FBFIBEDEEIJBBIDBFD@<@HF=;;=9BD=DABBIJB?9;9@<8<<9@<83924.%%""/,"
+
+	&//52.05332/42<?;;8=4;;<?B@@9<77333?72354/55/52354700.,'%*./(&,.34.35/+,',++\[Z\__VYW`Wcbifc^_^`fd`_dhdgdd^`cbcf_bhikmidcicb[\cchbcb`c_`ddfcfhhlgkhgh^c^^kis
+|
+
+
+}
+
+~}|z~~ysqpmifhomqm_opshku}x}yvx}zxx|
+yv~ot
+€©€£€ ¥¥¡  ¡¡ £4HHNL@73+
+*0*0;;@ADENMFHDA?D=EFIEJEAIJD;?AFH?=@A=?=H=<=DBJHA<<758480975/45.+(%
+&.4'
+
+
+
+',,0593.23788<797347772/3?;59325277305;5382,3.4/8587/4.0235,22,2.0,20/3/,.,(YVUWSQSc^b__b__`b_\cdcccfghgc_dcffcc\bcfdg_`dd_\^_d`cdbZ\Y^ZV__`b[`kdfggi_cfiotpsu}}yy
+
+
+|
+
+|
+
+
+~z}}~}|stqqlsxxuvpovhhsmquyyvvv|ysppsv|v}
+££¡€££ ¡ ¡3@FJHA53%(.38<9<<BALFHHBBIIDINLIH<<FFDBE=FF?=I@<B<8<72=8FNHAE?;?75944(///+./'
+
+"9?#
+
+
+#3*5;5883255=4495435;2/+22522/395893735093/022/898420043,,3,/224*+,24+2022*&WYSYY^^Y_^UY[W[Z__`fd`^bdg_d_ZZb^d\^_bffdc___b___\YW\[[ZYVUYYSU\difddb`c`^Y^Zlomptxup|
+}~~~~
+u}|~yx~|vxomcd`oquvxyvsvxtz|yihilx|vxopmpfkltmpyz
+
+ ¡€€  €£¡¡€ ¥€3DJLIB<3&
+%(4;B9<<8?EEIJDAHNILMVNB@DIHEBEHFIFDDAD8@<;@8<@BD?<D@7=8592++/4+(*+*!*8;"
+
+#87,85<577;987.228234223/009422223<45.309482/077423220+*7+.++/0,(+.((+/,30(/QUSV^WRNQUW\[[WZ^ZZ\[\ZY\ccb`^cb_b_b``dgdcb__[\W[\_^`bfchkhhfhppqqppmhio`Z[bZZ`ilksy}~
+}
+
+
+~
+~z|}~
+z}zxu~voosquvvtvsmqvuttyxpqoqmppskfhmlmmly
+  ¡£¡££¥¡¡§¥ €
+¡€£ 
+ £š
+5EMMF;54*#'+.94@B?;BEBIJB@BHFHMOLLIJABHFADBDABHA@=A=5D?9<<;<@@@<99E?=3.2..&+&'!*9?'
+
+%(0039579;9,3;45.33438884<977557838770224..8,.,+3+,++,,,3/4*42*2,/3+%'.55,,5V\\^[YSRRWUYZ[Z[\`^`cYZ`bc``_cf\^`````cccf_[_ghb`_ddhlposxxz}zz|vxsgmqmpovsogbggfhoy}~~
+}~|~}z}so
+
+uyvxzvpiqoqsqqttsyxyvuyppio}~zqpficW`pix~    
+
+§¥£¡££ £€¡3ALLF=75+((&799743B?FOOFAAEFHFBILLNMLLD?@DLE8<AE<9<BA77=<88<;;<=9=;34723,((('<0#		
+	%&&43,349;=848=<;;/32758;;=594735377743700,,02.,.&'2,0+/30+.+.&/*..'+22;85/,UUY^^[[\^^ZZVSVYUYU_\[^[Ybiklsph^`^`fkppppmsttmptsyuqssusqsy||
+|qsvtqzvoyvytmtouxu}
+}
+}qq}~xyyshmfkob^lzz|||y~|tms~|}y|yvvofi_biqv~~v~~}
+|}v|
+¡€ ¡ ¥¥¡
+¥£¡¡¡š¡3@HLI@?/&
+0*'0272979977@DBFFIFDIMJD=FJMNNNI<=EB;<<=89<=;95;8444;;33;348494/+&*;9#		
+*/2/325.3997448;<9;?A97987=4<53457/29532/403/343200(.+4+0/*/.0'(,3;05845.///UUYWVV[[\_YZ_[c\^WW[[^Zil|yyxxsvsoqxx|zzxsouxuvyyvzvvy|~ztzsptvx}ppy~|xy~~x~|z
+
+
+~yusk
+~|tx~}vmoqlh^Ybozzy|vo|~|uszzuv~~u|x|uxyvuuqsqzy
+
+|~}~
+ €£  
+¡§ ¥ 4JLQHB<4'&/7555<?;49?57=7A<EA@<DE@??ADHHFNEDJE?A==@<=AA54880703037452/<2/+0(!'70
+	(,0833327A<@==;@@B=;;<788@8299440707023....0.24,53./,32/0.,04,+./7B@?843+*3/VWZVUU\VR^VUYUWZcd`iqqxtv|}||usvzxxvtuttmkpsuvux|yuy}zz~vstuoopsmvyzy
+
+}|zu|
+|~|z
+~x|}z~zyqifbcccp}~}}~}}|z~~}|z|xqsxv|zxyz
+
+¡  
+
+ £ ¡€¡
+0ELJEA77+"*32723;AB?=9=<=<=9?;?8@A?3AAD@?<@EILFJHIA<;8<54892+082/2404324/2***'/4/!
+
+&.,,(,3/353595=?@??@;;9<8=;8<<;7/00582//0+/0./24,3037594273427897<9;9;42230ZUUUW[RWYVVNRV[cqsssvyxsqvyyvxvtpvyxvvtlc_dmopt|z||zz~~
+xx
+
+
+
+|~
+x~|}|~zux
+
+
+
+}
+
+xy|vvquuxy|}~|}z~xzzv}zyux}~}yvtvz~£¥¡€¡  ¡¡£ }5@NJI?890
+,34?@;=8A;=?=AEDIB7AA@EB=<<??<A=AADE?DDDFEB@A;7;<707752200/0+(.+*"&'%57!
+
+
+
+0..+/057503438589;99?77887;899;;;<5<;9884074244245724487/2547<;3450;;58374*RUQQZZ_[_\Y[bmmpqqvstxuqlmxxyutyzuvtux|vtpv|tstzz}yy}x}|xzy
+~
+}||}|~~~~}~~~
+
+~||~~|x|z}x}z~~v~|}xz~
+
+y~¡£€¡ š¥š£  
+~3HUOI@97'
+,/0;9LLE=ABHE<A5=<<;AB;<9?BAA<A=A?A@9?@=;D?FBAB?=4547<8944;.*.+((,"
++74!
+'0/0*33/23+20=<=8;7;;?=;=;<9<59A8?99;@4;;;?74=<=80<9@;75340032323,055=;55458HUUVZSVZ_ghkppqposuqvvssouy|}|vzuvxquvxyxx}xqhqtu}~z
+}}
+~}~~z~
+
+}~z|z|~zyy|xtyy}|ux
+
+
+
+||v~xuy}~|}~~v|z}x
+|u}} €£€§¥€¥€¥©§€€ s~y4ELMFD=8*'79<<<AB@?LIDFEAA<7?=@;=9=@?<<97;<DA=EDA==A;?@AEDD=57;50748/37/,(
+!+2*&
+	&',30,+3224/44445;7@;32<5;@3//.577/;08;<3?;,35792/7/.0722272+,4444227974/57,RNVYZcokhmszvqpsvvplltyuptsyzy||zusv|xstvyvpuxxxzx}||~xz~yyz}}|xvq|x~|zzztt}xzxtttx}z
+
+}}~~
+~}
+|
+
+
+~}z|~~}|}~}stvxt~ytzz
+
+
+£  £¡€¡¡¡|0EENHD=;(%*2038ABEA=AFIHFHB=?@?@=?DD=A??<=9<?===IBEDA<9=?;<?B?E<9<484/4404*%&!%(2
+
+
+
+&*202.04257458988<;=9095;<=20.4808;70249203570.287874404.2(,;/20.*..04/3.24.Y^__fmxttssttsxuoqifhmqplkoxv|vyyusx|}xxv}zzz}z~~}z~~zu|zy}|~~~zyztxyvqqliiolmxtuuu|
+}
+~v}yytyxtvz|zvz~}
+~y¡š¡¡ ¡¡|
+v3HQVMM<;*
+
+",587<9??@A@BB@@ABADF?A;9@E@8==999=;82875@B<9==B;B@A39<EFH?=/047/+*(
+*(
+
+
+
+#2/,3085322772;49<<<;38;877497@43/0;448904379;;40402.2,4/0,+/,&+,*2&*/2*,.4(^dqvqxsqqpqpqllhklmlhlkpigmvvusuuxvtvxxz~~~~}
+vyyvsmtlldtvzyxyyvvxulkbdut~}}}x|z
+~
+
+
+
+
+
+
+z|z||}|pqupzvz
+|~¡¡€ ¥
+¡z
+
+m8FMMDEA?,
+#/055=;<?@BE@E@A<AA?ADE?@FE@=A77<9954<;?;5;<7949AFDB@@=BDDI;799?42+%#%*,	
+*./42**38457337344=7;95;B9528,34/2/20074200447950285730/047/4'/.,03&2/0(/23,kksssupqooliiioquuoootvpoptusuyuotttqxsy
+
+}~ysyux}z~~}ypqqlmsz|~}yuysbddbovpsz}}|x~
+
+||
+xsv}xspzvxz
+v}y
+vs£¡
+€¥¡¡ x7INQDDB7/#'',4574?BDFEIA=8=8=DBHBEBA@@8??9;95;<=AB<2954<=7===99=BA@@@=99=;2.%%
+%(*!
+
+
+
+
+*42805;3;<;7085547@9705344554/42(//774(30,34,223443/0/7.02.;/,/4/.24,5735583supqoosoquqppvxvz|uuplqssstutvxtqpqvvxs}~~~}~
+~x}}|~}~yxv|~
+~~}sx|vtigky}x
+
+
+
+
+
+
+
+
+
+
+tovyt|
+}zyst}}| 
+¡q3JIFD@@8*
+*+8;4754;;EFE;=@?D@DFA@FA?E?=D@;AB??9@=<555;7=888578;98;;5;@953;3/%#!'&+*/39594489=<?<B;9;@AB@==B;5485572/(0+&/*'+2.,0/+3(2370+(2,835.45494.40/52229tsqqquutsqloosqtqttostttvsxpmtvstttvz}xy~~v}
+}zxz~}|
+~~xqkmpy|xmikoszxu}
+~xx
+~|
+~}
+|}y~v~}~   ¡ ¡ 
+
+s/NONJ@A8,#08@<7;7<=@<DDEEE?FDEJDFD@<=BABEAA?==@B==78<99?E7<7=?5588895?4/+//,(%
+++&
+
+
+
+&,325*40238=D<@9===F=<AAE49<A53979//5/*,/723+*/4+0//0'*/'0//,*0,,(020/04,,03ktqhlompocdhqxxxtummyqqyzxvtovqoumuuxz~~~yy~~}z}~|z~~|ussolsmsxxzyxtxplfoxz|
+~|
+}xz
+~
+
+
+
+
+tzy}
+
+|x~}t
+¡   v0EFJDA@9(
+/2A<=AFEDE@FJEEBE?DJJIABAHBD@AIEHAA=AD79DD9<9;@<;@;;;.547405238+++(&*.'
+
+%*.52230438989<98@A<;7;9?<??<<7@<<<=99@<9=<=45;89.0/50,000,+0/.0/(345=4(0/48tsvsqqqqppvspmqxtyvssvuvopssstqtuxvysv~}zvuz~xvttvy}}}~ztiplhlkpqx}
+zxuxv~
+
+}}x
+
+z~
+
+}z~|
+
+
+¡¥ €¡ ££ os0JMEI==3(!+2;?@=BFIDMHMLDFFABH@EB??BFEABNLLB??DEA<AD;8;B@<=<7<9;5/7530,,52.+#'3/+!!+32534///985847<8;=98@37999<<<=92;99<<B;;9?H?9AA@99<34354/85./0(0.43/0/.0.3ysusmsxvstuyvsqvtyqqy|slmkqtu}vyy}}~|~z~~zuly~}yvmqz~}zzzgcqmldgtzy
+y|
+
+
+~~}}||y
+
+
+
+~
+|}~
+~
+
+  ¡
+}y} }
+o,EEFJA=7'
+.278;AH@DBMIJNJLEFHIFBFAAIEEBIHED=B?DDAA@??@B@@9<9;?E974952./0++0&#
+(+'
+
+
+
+*50,++/(//205402430535=;2<73<=?<999<;84<7<0;@8779989??887899937/3303/4/332.2uptytxuoooosutttqutqvuqpmpotvzxzxxyz}|}}u|yzz~~}||u~xuu~uotvttu~vtuz~x
+
+}}}zz
+~~
+
+
+
+}z~~|~}x~ztu}yq}
+
+££
+
+}}
+
+z|uzyq(ABEB=<=&+/3;A@;=?=AAFFFLMNNJLIMFFEFD?A?9;=AHHDEFHDFAFD?B@B=@?<;893408/0.('#*2/!
+
+&0+/2++2&.4203/8475992575;7787754;49=9995,2492572/24=47500*783,4;/0.7482523+ttvsqvpplksqoibhhmlikoqzvzxzz|xvyx|yy|zvdltuz~|zzzxy}|xx}y|ysuyz}zz
+
+
+
+}}yt|z
+
+}uz|
+}
+uqvtyztx} ~x*==D@8?4'
+"(+2<9487@A?BEAIJNLIFOJIJFEB;BB<=??AF@B@B?HIIHEDE@EEA<5743753.30++"",+*"	'0,&40702223355300/3/3355;88943744772@/2534+70057844,+223,/=09.2/408/3,30.0/ptusvvvmmstqihpopvuooqpsyyzzzytsx}sz~}y~~}|z
+|slvuqmx}xpquxssx||}
+yxzxszzy
+
+
+
+}
+
+
+~z
+z
+
+|xt|¡¡¡¡}o,<8<A<8.
+#+,.94487;=DE??;8A@DADMFLLFMFLJDHA==?@A9;4AAA@;EFBDIF<8040//(,,0'"""(.2!
+
+
+0,24350/*,03*0249878595048993970.7;7744843320./4204352222342.,8457347*+04735tspkqvqtmopslmtottqooxttz}~z|~}x~}~~~|}ty||zytssqsquyvz|}}|z|vty}
+~|v}}zz|lz~
+~
+
+yxzytx
+
+
+
+
+~h*99;?=7+
+!(,2434378@?=?D7DB@BBFEAE@MHEHNJLFBD=8<985;5<@;8<=EL@B;8584('/+*%%
+#,.0
+&2237;82302805<77;;425?4788777999;98443009977,473238?473,/,/2340425/25/(0.=8lklqssqtsttuohimlghglsxv|}
+
+~|~
+y~zpusyvtpxzzyqu~psx||xqx}~
+y
+}}||tv
+~~|
+
+ }
+l%845?=3+%*,//.50228?5384?A@???=;?@F<HELIIMNE?A@<B?A9<9;8@B?<AAA@;82(/*(#&&
+%&("
+
+
+
+
+%0424<8;=8757?775=@;99574<<255=54954?7587432405.+54447395.*05200/4/40/(,5/0/Zbiooqsqhhfgihmikgdhkmu}
+~~~}}z|}||quslhcsuvyyy
+~~|
+xy~~}zxzz}
+
+}
+|~zxlx}
+
+}y}
+
+v,0478<30
+%*%,.+0/3,25.290589;;7@@F<;7E?B<@IEJHELHFDJ?DA=@HD=54;<88<95/+&+"%#+*
+
+
+
+
+#*0'/3/05550588497;53=344884948583+0783035.5;<9588932*2/,/,30/.,.0,4,035030.cb^dZ^[SWW[[f_gkipkkmkpx|}~|~|~|z|~ytuoqukddglstuy|yy|~
+x~x
+|}}|}z
+y|~
+~zx
+
+}~
+~|~~~x~v
+
+
+v48<377/.!
+"&',(/.,/770242079273889432999=@EBEEHEJFIJJ@JAEE9@5/4/080.22/3/+%!+2/
+
+(00,'(&/.53,0.248570577445/33350(/*2.25334?2354238539,5</333/3(70003/3(0'30dgdfc^VS\b`dfkkkkh`dkllilv}yyy~~x}}vkoslsomohkfqpmpsvyyvyxv
+
+
+|}}}zszxu}}|}zy}z|v|
+
+~
+
+
+||}~|
+
+
+¡D7+*39.,***!+##!
+'&%+*.0,/+*,2223328724.8;242995;7;??=AA@AADAA??@422,5/+('+2++,!25/
+!%(0..+*002//,+0433804//407445872/3/,32.,225,454+0<302325770703257,/430,02/(.dliiggckpphgsquyuqfkqttpdcmmkiux}}}|xxxoptqhiddltvpcivloy
+}|
+}vuz|q|~z
+|y
+}sxtx
+ 
+xy~zy|uy~hg
+
+£€£9/'*#/0'+'(#24957=4/2'%&*"',/**0,.,7*/,52,4.744/42/0/29;57<<=9<=<?9784/('((#&#"""#!//*
+!((+,444554.+23/.*/../,+.*0../05,*.,..33'04/+3,,0.,033.444/43/5.0275332/0/(45fikligfpmuuttuuuuvoqpptsmppdmghdiopttvstsuuvqxz|}ysvy}zz||
+
+
+
+
+}
+
+
+|}|~ 
+zys}
+|z
+zmvhst
+¡¡ 
+
+}E0%*(,*+%(!%"#8/5=88@?9?4=50//*(##(+*,/0+.820(/,04.///42/20782205=@43552400'#!!&!
+20*
+	
+	!'*&+*0,3=9/0..+//3+2,,0+,,+,2.,7.&+..,*&.23./232,422287/(*3205805930/0099<02pomppmpsv}vtuxy}vtosslqu}|tsyxlffpxvtxsqvz}|}|}u}
+
+
+~
+
+
+
+~}
+~
+
+
+
+okttq
+
+
+~
+z~l}~}
+£ ¡¥£qR"&*%!"
+%**,/08348=AE@;D?;@=;82.,/.#"'(%#*&,,..23'03,4239.,/47042&+3/...%#&!
+05((
+
+!&,++,04.342577.283;9/5/883/2./((,'//.+&'/24++.0285/837<88424925/3035/8093720dkhpsyzzvz}zy~
+~yzzzz~zvyyvxquyppmitv||}}}ypu}
+
+
+
+z~
+~utzyxx
+
+
+
+
+|}|
+x~v||¡~ q7.&#
+
+
+
+#"&288,2/23=<9===<;=5=;=<<A752,*((*&(+%%,,.0+*''*,,/.*+.**(&+,(*#!%%37'!
+
+!+&#**,/4949785/3804545404440&+',&*/0,//3303/.,+4(0,3245857+/44+.<750.32*/,,2`cloposv|z
+}~~~~}vyy~}||~~
+
+
+
+
+~}
+
+||
+yqpy~
+
+
+|
+
+
+
+z
+
+}v
+
+
+¥¡ pQOJMBB952""_om_SAA@9874747752473/77=B@??AA833(2&/*++%!#((&(&(%%&&&'*&&&#
+"22+
+
+%!*.*.,22+42,/07=;8;040*.,,2.20254473953,0/+.5,,*+,/+.((2*0'%,*'#+..0,/.7400lptszxovzz}~~uxz}zzvz
+
+
+
+
+
+
+
+
+
+
+~
+
+}}
+~|
+}
+
+}|~|~~t}~  §  q[VY^^_[WWR=%
+
+&~}}t_[UA?A?<;373284/4888737@@<A<5;550/+(*''!&%*"
+#!%#
+
+#32%
+
+&#!&+(+/.&'420,;23;07*2/238?525433/37202**&*+!((*&'*%#*.(!""*,'&*!(+%+'.(*(,tqxtxyyxu|z~~~}|zuz~y~z|
+
+
+~}
+
+uy|v
+~z||~~|y~~y
+}zzu~~|
+v~|} iL4,/3?EIQO\S#+
+uvscYUND9@=982745.4934588<<9??@=<9<952%*+"%%(!"""(*
+
+
+*(/0+.**(',,//,,0454,,30/34..0.48=/25(20**,25.,,/2*%/%(#&%####,*#""!+'##,*#yyttuux|z~|~
+
+}z~
+
+|~|}
+
+~
+~}zz~~|x|z}|upq~y
+
+
+zM<74/+4,'*+03!.d¡£¡}~slc_YOEA?,543,25334./55;@@=9=@<?755<24779/(79.'
+
+((*+.+/2537,*',,5/(,,/+'./2.,,0+*43,/++34.(+..//.'+('+%,','*%+*'&0*!%#%+'"!('zyvsuvtt}xux~~|
+}}~|
+}~~
+
+}zp|
+}~y}}}qm
+
+zyxy|zquv||vqsx¡xstvyJIEH?@D;8875/&
+*(Z~|~
+
+xF=BB88*04@93037545<A<=8==B@039;A@DJF84#%&0;954332,4<0334*/8/+.,&(+&(*&+32,*,+30*.,,,*&**2*20/(*%2.(/++..35/,,(&'*',+(+||xuuvyx||y|||~x~|~}z~}}
+
+|~
+|vx~|~~}vy
+
+
+
+
+sy~
+}}
+zzp}~qxt~~}~yx}z ¡£ ~
+
+
+¡ 
+b@?F@DAA<79;8/%'.u`VV[[N
+7bxicYSWND=?=8737;05422..'./43+(
+%#'.004<983345434292//(/""(('"&/,''/,*/'.%2&%(,,,#/+2.3(/,02.*0+/24///3'/**(4+||}xttuy|yxz~ytxzz~}|x}~zy~|}vxxux|}~
+
+
+
+
+~
+~
+vz|~}  €¡§£
+¡x¥ L#%%.3.939+&%?}~lZ``^S4v|tibVLE75700230*,.2*/'"
++#0'+202588;847855.2(&&+'&&+2/(/%,&'"&&&('',,*'+&%,(,!"'3/,,+.090738,4040xuyzxssmqt~}z~}x}}yz~}vzzzv~~xppzy}
+~|uxtvtxxy
+
+
+
+
+
+~
+
+
+
+~zvtoz
+
+
+¡§¡£€£¡ €¡
+
+
+
+t3"
+
+#,^hY_igR8¡¡}pfc`ZJ@;9428/(/E87(%**'.&!%(*&/2522/3399;;;=859.((&%(*#%,!''(+''#%%&/(''0,&*.2,(!02/2,,.3054804/2xvzxuvyxptxy|x|
+|}y~zupvqsxxtusv}}
+zzxxyyyzzz~
+
+
+
+
+
+|}|||z
+
+¡§£€¡¥ €  ¡¡£€¡¡£££}vqoy;47042+#
+'(h€k``diW4
+ ¡¡¡¡vhgfY`SM^z~~zmc_WFB772+*"&%*/50793849=;;@?/89=888<3*++*..(%*,+5/+,++%*'&&(*,0,'*/,.*0,.9/2toszz~~~||~x||uvtuv|z~y}|}~~yuqqtuqvqzz|yt}zvv}
+
+}
+}
+
+
+z}
+
+|y}v}¡
+
+}~    š§£ £ £š€¡¥¥
+£¡£¡¡ ¡€ ££šª¥
+O;534.2*'+&.+4p¡|m^ddkQ"9
+¡
+s~ltvgf^RJHH<70.0/.347579887=;8;58;<<;99?E720..+%.**/'&+**+#.0(*''%#0.,52.3hbfsyx}y|}
+}
+|zxvyv}zu~y|zz|
+~|~~uuxsttuzvuz
+}zyus~|zz 
+¡š£¡š¡¡¥€§¡¡§¡¡€¥¡ 
+  £§€¡¡¡§¡ ¡¡£ ª¡¡€£¡€¥š¥£€£¥£€£¥£  ¡¡hBB?955;02'00E
+vcghm\"@
+u~
+
+zm
+xtof^SMME=742322505242795<3=9;875=7=;?4542/.*.+*'+0(/7*43323/248ppuyxv||zutu~
+~
+}|z}y}|~zzutyvoz~}
+
+xu|
+
+£§  ££ £©ª¡š š¥ €§ ¡¡¡§¥ £š¥€€š££¥£©§§£¡ £§®š£¡§ª€¡§šªš§ª€¡ ¥ ££ ©€¡€¡§§¥§£¡¥®¬£t@?==5<;=/!&2L¡¥ yckhlV"E€§¡£
+~
+xvl_\OJE@=38;;?884;=8@=?<<4?=;?57@883740.+*,3*,44;00+53~yv}zxtt}}
+yx}
+
+~~~
+
+
+
+~|vuv
+
+
+¡©¡  ¥§  ¡¡¥š§¬¥¥§£©š ¥£¡€¥ ¥££ §­§§š€š€¡€¥£££ §£ §£ €¬°Ž©€ §š¥€¡ ©©²š©©ªš§¥ ¡£§§£€¥ªŽš£zEHB@<BAB2
++2Q€}dkohU%H
+ £€
+
+~
+}imkig_VMND?97?8/87949;??;B<;878@47;=?9878/42254~~|}zx}
+
+
+
+|~}
+ €©©€¡  §€¡£¥¡£ ¡ª©š£¡¥¥ €£¡€€m£¡¥§£€š¥¬¥¥ª©§§¥šš©¥š¬±°§££š€©§€­š§¥§§¥©§€¬¬£€€JRHAFLNH2#59b£š¥mkmmU*M££¡
+
+}lfh^RHDA?AAJ;<8<@A=<;?9<B<=;ADFDB?A=<~~
+|}}€¡ £¡   £€¡ £¡£ ¡~|€£    ¡¥¥¡ ¡€¥£€¡¥ª­ª°©§¡ €€©¡£¡£©§¥€££©š­š¥¬¬£§®¥¥£ š­°€£€§©¡§­¶¶ª­ªª§°·µ·®¬¶Ž²°­±°š ¡¬°®¥¬­­š©©§§¥ª°š§¡§§š®š¬Ž±QMONOS[O7#5;k¥©£¡€€~vtuqV,Z¡¡£€€
+
+
+~zsphf``_S=9;?H;B?A@59BA<<DDD@D
+}~z}z
+¡  ¡££¡£¡£¥£ €£¡¡ ¡£|~ ££ ¡§§ €£€š€§ §š¡¥§¡€€­­ª­­¬¬¬¬®ª¡£°±© §©©ª®¥¬°ª©š€¬§¥®®¬±­š€§¬©€§š©©€€š ¡£€ ¥©§©¥§­°­±ª­®­Ž°Ž°ªš¬ªªªš£§²Ÿµµ¹¹¶ºŽŽŽ±¥©Ž¥€ §§²²±¬ª¬©¬­¬®¬ª¥šª¬¬°­µª¥©®¶ŽWHLUS[`W<&9Du¡  ~xqusU5` ¥£ ©ª¡€€€¥¡~
+
+
+¡~~zlBE?=?DMIHFFBDE?B@DDA
+~~¡ £€€¥©¥ª¥£ ¥£ ¥€¥š€¥¡¥€ª¥£¥§§ª¡¡£€ £¡©š£ ¥š©§¡š¡¡¡š£¡£ ¥šš­¬¡£¡¡€§ ­±©¡ §£§š£¡¥š©š¡£§š¥šš€¡€©®¬­±§§š¥¥¥© € §£ ¥€¬±©®¶·±§£§€¡£©€±Ž°µ°©§¬°­ª­±¶¶Ž®²²¬¡€­ªš¬®¥­·µ¶±¬²»œ¹º²°±Ž²¶Ž®¬°¬©§­°©®€§®ª­ŽŽ±­®¬©­­±­§§šš£¬¬°§\SONS_^Z5/HJ¡€§£¡ ¡§©€¡  §¡€osxuQ8f§§£€ §©­¥¥¥±¬ª¬§¥š©¥¥€§€ ¡ ¡££ § €~¡  ¡N@<74;JzshbMFHB@AFDL £ ¡¡ £££¥¡££  ¡§£¡¥€¡§£ ¡££¡¥©¥§šª©ª©¥§£¥§£¡¡€¥£¡¬®±±°š®©¬¥¡€š¥§¡€£¡š¥š°¬¥€§¡¥¥©£¥¥€¡ š©§€š¥¥¬¡¥©¬§¡¡§®€š­¥€¡ªŽ¬š¥¬¬£©¥§§ªª®°±±¬¬®±¬££ª®ª©š¥²²²Ž±°¬©©š£€©¥š¥°µµ¿º¹¶°®°±®·º·Ž±±±°¹¹µµ¶¹ºŽµ·°±Ž·Ÿ·œº²µ·º±§£šª©°®°·Ã¹±º²¹·¹·Ž·­±®µµ¬±°¬§¡š®Ž®£ª±·ÁÄ»ºœ»¹¹¹ŽµŽ±ºœ¹°bZZZZbfZ8,HM¶²Ž±±²®ª¡©£££©pus|V<d© §€®¶Ž­­©±§©®©®š¥§¬®°­€¡§ £§ª€€€š ¥š¡ \FA;95OgYAF?AFQl ¡¡£§ ¡¡š§§š¬€€ £¡¥€ ¥£¡¥§£¡ ¥§£š£§¥š£¡£¥¡ §¥¡§¡¡¡¡¡§  ©ªš§§¡¡    £š§§ª°°­¬©©¬ªš¥§§£¥©ªª­£­®š¬¬±¬§©©€©¡©¥€§§¥¬±§€ªš®ª§®©£®µ²­®€€§®¬¥¥®µ²©§ª€ š©°®ª­ª­­±®®ª°¶ŸÁ¿ºª©¹Žµ·µ²¥ªŽ²°²¶¶ºµºŽ°°°€¥¡ª®ª°ª€ª©š²Ž·œŽŸ¹±¶·Ž¶Ÿ¿ÆÃœ²°§¬ŽŽ±¶¹»¹¿»¹°¹Ä¿œ¿¹º¶¶ºÁº¹·±®ŽŸ¹ŸÂÆŸœ·ÁºŸœ»œ··¹ÁÁ·¶»»¹±Žœº±ª©®®ŸÁÂÈ¿ÆÁŸ¹œŽœ¿¹¹¿¹²h`b`dlh`=7MW®ª°®°°€°ªª¬Žš±®ª§£ ¡¬®§­°tuzQDt¥£¥§€© ¬­ªš°±®©¡£€¬±­µ°ª¬¥££§¡§š£¥€ €¡ ¥§€§¡©­š§¥¥^NFA<<R`RFADBIZ
+
+£©¡€  ¡€¥£€ª¬š©ª©£€€§©©š©š £§£§§§£¡§¥£¡£¥€¥€š¬©š¥š©§¬©­©©€ª­€ € ©¬ªš­¬­°²²ª¥¥©šª©¬®š­²°­­±­²ª¬ª°µ¹±®ªš ¥§šª¥¥­­ª¬š°¬²²°±±¶µ¶µ·°š§¥ €€£°®±°°µŽš¡°¶Ž¹¬¹·œ²©š®±Ž¹¶±°¶¹ÃŸ»¶»ÁÁÄ¿Ž²¹µ¹±œŸÂœœœÄÊ»ÁŸ²°º²±€ªš€¬¹²»ºŸ»¹µ±»µ¬¶··ÄÇŸ¿ÁÁÆ·¶ÁÂ¹»º¹µÁŸŸÃ»·µŸÃŸŸ·»ºŸŸœœŽ±»œÄ¿œÃÆÂÁ»ÁÁÄÁÄÁÇÇÄœÆÈÃÃ¹œÁ¿¿º²Žµ¶µÃÊÏÈÇÄ¹ŸºŸŸ»°œ»Â¿ucghfqmcA<SY° ¬§Ž°°­€¬Ž¹©®šª£¥­©§¡š­°š­®°²µŽ·¶}zy~SI©­Žµ·§ €§£¡ªµ·²°§ª®®Ž¬²°š±±š¡¡¡§©š£©®¥šª®¥§£ £©£¡£¡€ª§¡ª¬®®¥ª £oOEBHFQ¡iRJFBJRh€¡ € €©ª§š©¥§¥­ªªš­¬€¥€£š©¥£¥š€®ª®ª£¡š€ §¬¥€©¬©€§­®­­®­°°µ±®®¬§£ ¥¥¡£¥€©ŽŽº±­µº·®€®ª¬£®°±°­­¬£¡ ©¶±±°°µŽµ­¬­€¥š€¥€§£ª§§©­±Ž°Ž­­²¹µ²±€²ª©š©¥€¬Ž¶µµŸ»·±œ·¹»¹ºœ®¬µŽŽ®Žœœµµ·ŸœÁŸ±·¹ºŸÂŸÁÇÈÂŸÃÄ·»ÇÃŸÁÆÂŸŸÂ¹ÃÄ·µº°¶¿ÆÇº¹Á»¿ºœ°š®Ž²±»ŸÁŸÆÊÆŸœ·º·¹¹·ŸÁÃ»¿Ãœ¿¿ÁÁŸ»·¹¶Ÿ··µ¶ÁŸÁÁÁÃÃºŸÂÁ¿ÇÈÌÌÌÎÑÊÐÏËÊÏÏÑÌÊÆÄÌÑÊÈÏÌËÇËÇÌÁÇœ·¶¿Ÿ¿œŸxhddmtsfFDVišŽ¬°§°°²µ··Â¹¶®¬£¬š€¬­¬ ¬¥°Ž±Ž·~~ZSŽº·ŽŽ°€¡¬µ¬®š§š¥°¬ª¬­ºµ¬¬®°±·Áº©¡š©€š§ª©š©š©§¬­®§ª§¡££¥ª§ª¥£¥¥®©£¥©¥š€€ª©©šª®¥§ª©µ¬yVLEJJUvd[NLNNZu§£ ¡¥šš®°ª®­ª©¬±®®±€¡  ¡¥š©­®­ª©§¬¬±°®ª­ª©¬©ª©ª­­®­©ª±±±²°±°±²²ª©§¬°±ª­Ž®­Ž²®±µŽ¶µ»º¹²²¶µ±­š¬·º¶º¹ºµ£¬®š ¥©Ž¶µ¶±·ŽŽŽ®±±±°°šªª¬©²µ²­²Ž°·±°Ž²°Ž±µªš±±§§©­ªª¶œ°µœ¹µµ²·œÂÁŸŽºŽ­»Â¶±Ž·Ÿº¶œŸºµŽºŸÂµµŽ¹ŸÄÄ¿¿ÂÄÆÄÊÈœÂÄºº¹œºµ·»ŸÂÄÃÊÊÌÈ¿ÄÂ¿ÄÁÇ¿·¿ÂºÈÁÄÂÂ»ÄÈÃ»¹œ¿Ÿ¹ÂŸÁ¿Á¿ÃœÃ»ºœ¹ºÂÁ»»¶²ª»Ÿ¹¹ÆÆ»ÁŽŽ»ÁÂÃÇÐÐÊÌÐÔÙÐÑÎÌÑÓÔÑÌØØÐÓÕØ××ÌÎÎÊÆÈÌËÂÄÆËÃÃplos|qcFM[k¬±º»µŽ²µœº±¹¹®±©§ š§šªŽ¹±©ªŽ£§©¬­²~~
+bU®¶µµ±¶¹µ²µ°§¡¬¥±®§®µ¶¶·ºµ¬±·»µ­¬ª±µ©¡­¬°©¬°­±®­¥®¥®¬¥§©ª£©§®±¬©Ž®ª¬ª²²­©®¬µŽ¬±¬±­ª¬©°¶¬·¶¶Žœ°ZNIIES­pdWQLOU`x ¡©©£§¬¬©­°­°¬°®ª®ªš €£¡¥§§ §£¡€©€©¬¬±°±²¶¹Žµ¶Ž²¶°ªŽŽ¶Ž°°Ž®±¶¶®®µ±Ž·®§€š­±°š°°ª­±·¹œŸœ²ºœ°¶·ŽŽ¶µ±ª¶º¹²ŽŽ±¶®²µ©¬±ŽºŸŸŸ»·¹ºº·Ÿº¹µ­®©±¬©¬°±±µ±¥±¶»µ·º°··Ž²µŽ¬²·¹°²°®µ»»Žº¶¶¹¿ÄÇÇÁŸ»ŸÁÂº¹œ¹ÄÆÊœÃœ¹±ª¶»¹·²ŸºÂŸÃÁŸ·ÂÃÄÈËÇÂœº¹»¶œÁÂŸÁŸÄÌÆÂÃÃÄÁÇŸÇÈÆËÂÂÆÂ¿ÇÄÃ»ÁÆÁÁ·ºµ¹ÂÄº¶œÁ»Ä·¹»œŸœÃÃ¹®µŽ·œœ·œÆÊÄÃœÂÃÃŸÂ¿ÇÂÃÁœÆÎÐÑÑÑÊÎÆÏÐÔØÙØÓÌÔÙÛØÕÐÐÐÐÜ×ÓÕÎÎÌÁ~oosuv}hELZg©µµ·š¶§œºº²¹»º»°±°©€ª©®š®šš§€©ª¬²²­~fc²±²®¶¹²¬¥¥©©©€¶¬£°®š®¶¹œµ»»ºµ°­¬¬®®­°±±»¹Ž²²°²­µ®²°­š©£¥­µ®²±°°®®¬¬¶µ±Ž§¥®­Ž²©±Ž°¶­±¬Ž°Ž°µ±­¬VHLFDQ§ocQOLSR_ ¥ª§¥§¥¥€©ª¬°°ª¬£§€¥ £€š©š¥š®¬§¬©§ªŽµ­²²­¶ŽŽµ²®²²²®®µ¶¶¶¹¶±®Ž­±®°®®£©­®±­®µ±±µ¹¹·Žœ»ŸÃÃœ¹ºŽµ°¥£¬­ŽŽµœ¿·»·¶¹µ¹°ª°­­°¶°Áœ·¹¶µ·¶µ°±±š¬¬©¬©²¬¬¥¬¬°¶·®­±±®ª²±­¬©°°¹°±±Žµ¹µµ»ºµÂÂÇÂÇÇÁÄÁ»¹¿ÇÄÌÃ¿ºº¶±¹¬»µ¶Â¹²²¶¿»ÄÁ»»¿ÁÁÁÁÁ¹ŸŸœœŸœ¹ÁÄË»ÂÇÄÈÆÊÃ»œÁÂÁÈÃÆÏËÄœ²ºŸœÈÈ¿ÇŸŸœœ¹ºŸµœ¶»ÂºŸœºœ·»»º»»¶¶»¿Á¿ÂÊÆÈÈÆÆÆÆÄÂÄŸ¿ŸÃÃÇÌÌÑÏÆÄÏÏÏÓÐÐÔÕÙÞÔØÔÕÐÑÓÔ×ÌÈÌÏÆÊÄ|liqyvudBI[o ªœÊÄŸœÂËÆ¹·ÄÕÛÝàÛ×ÐÁ¹©¥€°®±® š­·¶±}y~ciª®®¬®¶±®æËºšš­·±°°¶­¬·±®­±§­®­¥§š§®€¥š€ §€šš¥¬©­±¬±Ž±¥¥š ©®š­ª¬¬±©­®»»²ºº²µÁº±Ž­¬®¬ššš_U@@BLt}m\SURLQb
+¡€¥£¡§€©€¥£€¡£¡£  €¬§šª§š©¬­®°°²µ²±©§¥©©¥ª­²²°­µ²¬­§¥šª¥©š­ª¬²ª²²±²¶¶¹¶Áœµ»ÂÁÃÇœ·»¹²­Ž­°°²­µ²¶µŽ±²Ž®®°­²©£§©©°­©€š¥¬Ž­­©¬ª§©¡šš€¥ª¶°Ž££¥£ª¬ª£§©£¡¬¡§š»œµ°¹Ž»ÇËËÊË¿¿ÇÄÆÃŸÃ·º®µ¹¬®®»œ¶»»¶®®¶¿œ¶»¶œœº²²®¶º¿¹¹¶·¶»Ÿ·ÂÂÂÁœ·»»Áº¹¿ÈÄÂ¿Á¿ŸÆÈÄ¿ÆÊÌÆÇÆŸººµ¬­Ž·¥¬¿Á·Ž°š¬±®Ž¹®¹¿ÈÄÊÔÓÊÂÃËÈ»Áœº¹ŸÄÆÃÆ¶Ž¿ÁÃÇÎÐÐÑÆÈÊÈÂÆËËÈÄÆ¿ÂÂËÂœÂ·º»Á¿ÈÂtbfsxsl\;NY~ÃÈÌÈÈœÂÆÄÈÇ¿±š£ ®ºµºµµ±¥®¥š¶¶
+NL£©ššª®®¶ÏÐîò§ª¬¬­šª°®€©®®¶Ž­±­€¡š¥šš©ª£€€©  ¥€¬¥©²¶²·­¡¥€£¥šª®£  ¡­Ž°­®°§§ºº°£µ©¥QLD?AFoxfZOELLLg¡€¥£¡§€©€¥£€¡£¡£  €¬§šª§š©¬­®°°²µ²±©§¥©©¥ª­²²°­µ²¬­§¥šª¥©š­ª¬²ª²²±²¶¶¹¶Áœµ»ÂÁÃÇœ·»¹²­Ž­°°²­µ²¶µŽ±²Ž®®°­²©£§©©°­©€š¥¬Ž­­©¬ª§©¡šš€¥ª¶°Ž££¥£ª¬ª£§©£¡¬¡§š»œµ°¹Ž»ÇËËÊË¿¿ÇÄÆÃŸÃ·º®µ¹¬®®»œ¶»»¶®®¶¿œ¶»¶œœº²²®¶º¿¹¹¶·¶»Ÿ·ÂÂÂÁœ·»»Áº¹¿ÈÄÂ¿Á¿ŸÆÈÄ¿ÆÊÌÆÇÆŸººµ¬­Ž·¥¬¿Á·Ž°š¬±®Ž¹®¹¿ÈÄÊÔÓÊÂÃËÈ»Áœº¹ŸÄÆÃÆ¶Ž¿ÁÃÇÎÐÐÑÆÈÊÈÂÆËËÈÄÆ¿ÂÂËÂœÂ·º»Á¿ÈÂtbfsxsl\;NY~ÃÈÌÈÈœÂÆÄÈÇ¿±š£ ®ºµºµµ±¥®¥š¶¶
+NL£©ššª®®¶ÏÐîò§ª¬¬­šª°®€©®®¶Ž­±­€¡š¥šš©ª£€€©  ¥€¬¥©²¶²·­¡¥€£¥šª®£  ¡­Ž°­®°§§ºº°£µ©¥QLD?AFoxfZOELLLg ¥ª§¥§¥¥€©ª¬°°ª¬£§€¥ £€š©š¥š®¬§¬©§ªŽµ­²²­¶ŽŽµ²®²²²®®µ¶¶¶¹¶±®Ž­±®°®®£©­®±­®µ±±µ¹¹·Žœ»ŸÃÃœ¹ºŽµ°¥£¬­ŽŽµœ¿·»·¶¹µ¹°ª°­­°¶°Áœ·¹¶µ·¶µ°±±š¬¬©¬©²¬¬¥¬¬°¶·®­±±®ª²±­¬©°°¹°±±Žµ¹µµ»ºµÂÂÇÂÇÇÁÄÁ»¹¿ÇÄÌÃ¿ºº¶±¹¬»µ¶Â¹²²¶¿»ÄÁ»»¿ÁÁÁÁÁ¹ŸŸœœŸœ¹ÁÄË»ÂÇÄÈÆÊÃ»œÁÂÁÈÃÆÏËÄœ²ºŸœÈÈ¿ÇŸŸœœ¹ºŸµœ¶»ÂºŸœºœ·»»º»»¶¶»¿Á¿ÂÊÆÈÈÆÆÆÆÄÂÄŸ¿ŸÃÃÇÌÌÑÏÆÄÏÏÏÓÐÐÔÕÙÞÔØÔÕÐÑÓÔ×ÌÈÌÏÆÊÄ|liqyvudBI[o ªœÊÄŸœÂËÆ¹·ÄÕÛÝàÛ×ÐÁ¹©¥€°®±® š­·¶±}y~ciª®®¬®¶±®æËºšš­·±°°¶­¬·±®­±§­®­¥§š§®€¥š€ §€šš¥¬©­±¬±Ž±¥¥š ©®š­ª¬¬±©­®»»²ºº²µÁº±Ž­¬®¬ššš_U@@BLt}m\SURLQb
+ ¡©©£§¬¬©­°­°¬°®ª®ªš €£¡¥§§ §£¡€©€©¬¬±°±²¶¹Žµ¶Ž²¶°ªŽŽ¶Ž°°Ž®±¶¶®®µ±Ž·®§€š­±°š°°ª­±·¹œŸœ²ºœ°¶·ŽŽ¶µ±ª¶º¹²ŽŽ±¶®²µ©¬±ŽºŸŸŸ»·¹ºº·Ÿº¹µ­®©±¬©¬°±±µ±¥±¶»µ·º°··Ž²µŽ¬²·¹°²°®µ»»Žº¶¶¹¿ÄÇÇÁŸ»ŸÁÂº¹œ¹ÄÆÊœÃœ¹±ª¶»¹·²ŸºÂŸÃÁŸ·ÂÃÄÈËÇÂœº¹»¶œÁÂŸÁŸÄÌÆÂÃÃÄÁÇŸÇÈÆËÂÂÆÂ¿ÇÄÃ»ÁÆÁÁ·ºµ¹ÂÄº¶œÁ»Ä·¹»œŸœÃÃ¹®µŽ·œœ·œÆÊÄÃœÂÃÃŸÂ¿ÇÂÃÁœÆÎÐÑÑÑÊÎÆÏÐÔØÙØÓÌÔÙÛØÕÐÐÐÐÜ×ÓÕÎÎÌÁ~oosuv}hELZg©µµ·š¶§œºº²¹»º»°±°©€ª©®š®šš§€©ª¬²²­~fc²±²®¶¹²¬¥¥©©©€¶¬£°®š®¶¹œµ»»ºµ°­¬¬®®­°±±»¹Ž²²°²­µ®²°­š©£¥­µ®²±°°®®¬¬¶µ±Ž§¥®­Ž²©±Ž°¶­±¬Ž°Ž°µ±­¬VHLFDQ§ocQOLSR_£ ¡¥šš®°ª®­ª©¬±®®±€¡  ¡¥š©­®­ª©§¬¬±°®ª­ª©¬©ª©ª­­®­©ª±±±²°±°±²²ª©§¬°±ª­Ž®­Ž²®±µŽ¶µ»º¹²²¶µ±­š¬·º¶º¹ºµ£¬®š ¥©Ž¶µ¶±·ŽŽŽ®±±±°°šªª¬©²µ²­²Ž°·±°Ž²°Ž±µªš±±§§©­ªª¶œ°µœ¹µµ²·œÂÁŸŽºŽ­»Â¶±Ž·Ÿº¶œŸºµŽºŸÂµµŽ¹ŸÄÄ¿¿ÂÄÆÄÊÈœÂÄºº¹œºµ·»ŸÂÄÃÊÊÌÈ¿ÄÂ¿ÄÁÇ¿·¿ÂºÈÁÄÂÂ»ÄÈÃ»¹œ¿Ÿ¹ÂŸÁ¿Á¿ÃœÃ»ºœ¹ºÂÁ»»¶²ª»Ÿ¹¹ÆÆ»ÁŽŽ»ÁÂÃÇÐÐÊÌÐÔÙÐÑÎÌÑÓÔÑÌØØÐÓÕØ××ÌÎÎÊÆÈÌËÂÄÆËÃÃplos|qcFM[k¬±º»µŽ²µœº±¹¹®±©§ š§šªŽ¹±©ªŽ£§©¬­²~~
+bU®¶µµ±¶¹µ²µ°§¡¬¥±®§®µ¶¶·ºµ¬±·»µ­¬ª±µ©¡­¬°©¬°­±®­¥®¥®¬¥§©ª£©§®±¬©Ž®ª¬ª²²­©®¬µŽ¬±¬±­ª¬©°¶¬·¶¶Žœ°ZNIIES­pdWQLOU`x
Index: /branches/fault_tolerance/softs/soft_transpose_giet/hard_config.h
===================================================================
--- /branches/fault_tolerance/softs/soft_transpose_giet/hard_config.h	(revision 724)
+++ /branches/fault_tolerance/softs/soft_transpose_giet/hard_config.h	(revision 724)
@@ -0,0 +1,26 @@
+/*******************************************************************/
+/* This file define various hardware parameters that are used by   */
+/* both the giet_tsar OS and by the hardware (top.cpp file)        */
+/*******************************************************************/
+
+#ifndef _HARD_CONFIG_H
+#define _HARD_CONFIG_H
+
+#define	 X_SIZE              2
+#define	 Y_SIZE              2
+#define	 X_WIDTH             4
+#define	 Y_WIDTH             4
+
+#define	 NB_PROCS_MAX        1
+
+#define  USE_RAMDISK         1
+#define  USE_EXT_IO          0
+
+#define	 NB_DMA_CHANNELS     0
+#define	 NB_HBA_CHANNELS     0
+#define	 NB_NIC_CHANNELS     0
+#define	 NB_CMA_CHANNELS     0
+
+#define	 NB_TTY_CHANNELS     1
+
+#endif //_HARD_CONFIG_H
Index: /branches/fault_tolerance/softs/soft_transpose_giet/images.raw
===================================================================
--- /branches/fault_tolerance/softs/soft_transpose_giet/images.raw	(revision 724)
+++ /branches/fault_tolerance/softs/soft_transpose_giet/images.raw	(revision 724)
@@ -0,0 +1,7270 @@
+§ª³ž¶Ž­§€Š¥¥€¢€ ¢¥¥Š¥¡  Š§®³±²³¬³©
+|}|||{}~~~
+Š¬Š¥®žÅº
+
+§·»²¢¬Ž¯µµ¯Žª
+}~~|{||}
+
+
+
+€²­¥ €­¥
+
+«Ž± 
+
+€°®µŽ®Žª}||{{}}€}}~}¡°ª
+Š®±±­Žª}{~~|}~}
+
+
+}}}}|{¬­
+­²¯®µ­{z{}|~
+
+}~~€Š¬«
+
+
+£¯²°°Ž­zx{}}~~~}
+¡||ŽŽ¯ª  
+Š«±±°°²«{z~~~}
+
+¡£}¶¶®ª
+¡£«®¯°±±°ª~{~
+¡ŽŽ°«
+¢®±°²°±®¬}}~
+
+
+§€ŽŽ±¬  °³±Ž±°®«
+
+
+«®³ªµ¶³¬¡ °Ž²µ±®­«
+
+  £°¯³£µ¶Ž­¡¯³±Ž±­­ª
+
+
+€¡¢¢€š€ §¢¥²·µ®¡¬²²µ²­±ª €¢£±«²¶³¬
+¡©²Ž·Ž¯Ž«·€µž²© ª±²¶³®¶¬©¡žº²©ª±¯µ±¬µ¬±Ž¬ ¢¬°µ³«¶©
+¡š€š€¢Š§¢­¯ª€
+Š¯µŽ®¶ª
+
+
+ ¬°²²±Š¡Ž¬¢¢¹²¢¯³œ²·®¬¯³³±¯­¬ššš 
+
+§¬­«±§
+
+
+
+
+ £Š°ÀŸœÃÂŽ³»Žš «¯À©£š€¡€ª²³®»ž»··ž···µ³¶²²±Š¥š§š¡
+
+«°°¥ºÅ¿œÄÄ¹»ž·Ž§ª¬±Âº²®°Ž¹µ«µ·ºž¹¹·žžµ³ŽŽµ±Š
+
+
+
+ Š¯œœº­»ÄÀœ¿Åœ·µ·¹° ¶ÈÀ¶·³¬¥¢¢°ž¹ž¹·µ··Ž³³Žµ¯¡~~§~
+
+ššªµº¿ÇÃÁ·¿ÉÆŸŒÈÃ·»¹·µšŠ¢¡£« °ºµ­³²ª¢ ¥°žº··³±µµ²ŽŽµµ® ³ŸŠ}
+ª³±©±»ÃÁÀÈÄÄºÇÏÊÃÁÊÅŒÂœµº³³«€€¢©º£¢€§§ Š§¬¬¬¬¯±¹º¶Žžžµž³Ž¶±£¢
+€žœ€¢¡š¢¥¢£¶ÀÅ¿ÀÌÊÉŒÉÏÊÊËÉ¿ŸÅÁ·Àº»¹³¢¡€šÀ¥§¡¢³¹²¬§¬²º»ž·»º·º·ŽŽ°¢¥€­¶Š¶¥¬ ¡¢¢¢£€§¬¹œ¿ŒÆÊÇÄÇÉÐÇÍÉœ«·ÆÄºÂÃŸŒ»Ž©§µª§¢š¥¡£­¥§ Šš­£³³¬¢Š°µœœŒº¹ººž¹¹¹¶±€¡Š¡¥¶¬¢š¡€©¯
+¡š £££©€€ª­±ŽµœÀ¿žÄÌÍÅÇÌËÂÉÀ­§°¿ÁÅœ¶ºÂœ»¶ž«ª€£ŠšµÃŒš¢ª« ¥µ²­¡£€ ¢¯¶ŒœŒœœººž¶ºŒ¶±€ ¯¡£µ¡«€£¢¡¯¬©Š¢Š ¢¡ €®®Š§©£¥š©¬°ŽŒ¿ŸžÃÆÇ¹¿ÍÊÄÄ±¥ŸÂœ­£¬»ÂÄ¹°š®¯³·ŽœÂ¿ž³ºŽª®¹°ª¥­°·¿ŸÁÂœŒž±ººŽµª§šª§³¬¯ª¯±²¯€ª§ª®«¡Š¡¢¡¥¢¡«­šŠ€ªŠ€¥¯¶¶ž¹ŸœÃ¹³Š±ÈÉÈÂª©Ÿº®šŽœ¹¹···Ÿ¹·œ»ŒÂºº¿¹¹º±²ª©£¥©§©³ÂÁÂÂ¿œž®±§šŠ §©««¬¢¢µ¬­¥«¶Žºµ­¥©¯žµ²Š«¢ šœµ­­š¥®®¯³¶ŸžÀÁÁ­¡ªÆÆÇ¿š³Ÿ²š¥¶ºÃÆ¿»¿²žÂ¹žÂ»¶»ž¶µ±µ²¯±©©ª§¥§±Œ»¹¹º»¶­¥£€©Ž«²žš¡³šŠŽ°³žž¬·±šš©¢¥ š¢§¥Š¢®µ³¬©£¡€š«µœ¹·»Ÿœ»Š¥²ÆÇÉœ€¥­Ÿœ­Š ®³¹ŸŒŒŒŽ¿Æ·­¶œÀŸŒ»ŒŒ¹µŽ¯¬®­šª©«®¯¬¬²·±ª|¬¬š¯®µŽª¡§±º±¢®³²±«¡¡Ššš¡©¬¥¡€¢£¥§š£££ §±·»··ŒŒœžµ²²€¶ÂÂÅÈ»§§¶ŸŸ·©ª£¡¢­±µ»ž»·¹ÇËœ¬­ºÃŸÁŸŒ¿º¶·­Š«°¯®ªš§©¥¥®²«€
+±©¥¶¶§ ž¹º±¡¢§±¯©£³ÀŸŠ©£¯°ª«­ª§ª¡ ¡¡š¥«¶¹ÂÉ¿¶¶µ¹±«ª¬¢ÃÍ¶ŸÂ·Ž¿ÇÀ±«Š°­Š£­žžºŒžŒ¹ÁÌÎÃ°©¶Â¹Ãœµ»Ÿœ¿³£¥¯²®¬®§§¡£§¢ Š¢
+«®¶® ¥§©œŒ·ºšª­­©®ÆÍÁ¥Ž¹²¶®šª€¢©¶Ÿš¥§«£€«€ª¯ž¹¹Ãºª®¶µšŠ£ª¯¥ÃÎ±³·ŒÂÌÅ±¥ŠœÅÂžŠµŒ»œºµÀÂÅ¿ŒÃ¶­¹œºŒº¶¹ÃÉŸ¯§šª©ªª± ¡€« ¥¥¡«©°²«¬±ŽœŽ­­®«Š§©œÁÅÈµ¬Š²±¡¡€¥£Š·Íª¥±»«Š­¯¡£§­ºžœ¶ª­±¯Š€ €¬§¿Êº¶ºÀÄÈÀ¯€š¹ÐÙÔÏÄÀ¶»Ÿ·žŸÁ¿±±ÅÄž»¿ÁÂ¿»ŸÄÂ³ªš¯¬¢ €©£š°±¡š£¬²ººžž°ª³°²®³ÈÅÁŒ€¢§« €©ÜŒ«±Ž¬Š«¬¢°¶ÃÀŽ¯ª¥ªª¶»º¶ŒÂÂ¿¹°²žÂÏÓÑ×ÛŸš¹Ÿ³»¿ÄŒŽ²œÃ¿¹·ÄÄÁÀÀÁž¬ª¬³ªµ·œµ¬ªš§ «³ž¶Ž¹œŸœª°»ÊÁž«¬ £¥ÔÃ«¶Ž°š¢š¡Š¬¶Ž®°®«¥£ ª³ºœž·ºœŒº¹ºÂÆÁÂÁÁÊÔ¹ ¬Ž³œº¶ŒŒ¹Ž·º³°œŸ¿¿œŒ¯š¥«°«»·Œº³¢©ªŠ¡¡§ ®Žµ¶µ¹Á»»œµ»ÂÀ©ª ¡¡Š«£šÅÄŸœŽ©§ ¥¯¢¢¥€£€¡Š±³¯¢©ŽžÆÏÊÄÀœ¹·¶žœŸÄÉÄÃÄœŒÀ¡ ²žŽ¹ÁÈ¹žµŽ¶²°µžººµ±º®¥£§¥€¡¬­°ºµ ¡£€€¶¿ž·Œ»œž³ºœ¹¶»¹«¯€¥¥Š©€¢š°­«¬ª¬°ŸÊÏÁ¯šš­µ¥ Šª¥§£ ¥§£¡¯ÃÌÕßÜÑÅÁº·žºžŽÂÇÄÄÆŸº·±±µ»œŸ¿»žµ¯°¶·ºÁÀŸ³£µµª¥££¬£¶¹ ³ŒŸ²°ž¹žº¶³³»ºžŽ¿Œ°±·³ŽŽ²±¹¶®®®®®­·ÃÆž®¡¢Š¥§§®š­š¯ÌÚØÜÚÌ¿¿Œº»¹Ž±ÂÇÄÂÀ»ºº¶µœÁœ»»²žŒ±®µ¿ÅŸŒŽª«Ž³š¬³µ»~|~©¥¬¿œ»®£Š¬°œÃž¯ºœž¶³­­µ¶³»ÃŽ­Ž±®µ±®±¯ºœµ©¥ ªª¡­°£³ÎØÍÏÔÉŒœº¹·¶¶Œ¿ÆÇÇÀ¹»»ÃŒÆËÂŸ·ª·Ÿµ³ž¿Ãµ© £¬¶µ¯Œ¥¢|u}¯©¯ž¹²µŽ±¿Â¿¹ººµ²Žžž¹»ÈÕÔ³š·µ­ž¯³µžºµš Š¢¢«²«§Žª¶¹ÆÃÃ¿œ¹Œ·¶ž¶·ž»œœŸ¿¿¶·Â·ŒÊÆÁÀ¹µ¹Á»ŸÅ° ©­µ¬€Ž©·¹º¶¥£Ž»Ž·œ¹Ž¶¹®ºÂÇÎÖÜÙÀ¥°³±º·®µ··µ¬§š¬ª©«­²µ¹Ÿ­¶œº²µºžµ¶»¹Ž²¶¶º¹±²±Žµ±ŒËÅœÀ¿À»Œ³¯¯¢ ©°«Ž¬ ®žœœ³ŽÀ¹­¶Â¹ŽœÀ©žÇØàÝÛ×Ð€ ª­°·¬²¹ºµ«£š­¶®š¯Ž°«¹Âª°Œµ¥ªžŽ³¶»ž­§­²·¶««¬³±¬¶ÆÅÀÄÆµ¬¬¥¡¥ ¬³§­«€ š­£¯­¥¢«¶ÂÆŒ·º¶²ŒÁ¹žÀŸ³¶ŸÏÖÑ×áÝ³¡§¥¯µ³»Ÿ·©Š© ¢¥€¡¢¢§±º­š­®š¥žË·¶Œ³¡£Ž³µ·ºŽŠ¢ª·º·²®§³¹©§µ¿Àœž ª¬Š©©¥®·¬«ª©ªŠ¬ª£©©£ £¥®¬Ž»µŽš¯²º¿»¹·ŽžŒº·ºžŽŒ¹¹ÁÂŒÂÌÍŒ«µŽº¹­­°¢£Š¢€ššŽ·¢€©®³¶ÌÂ¹¶¹¯®µ·¹¹¹³««®¶ÀÀ²®¬³Ã²š®ž·¬¢€³µ¯°¬€Šž±¡¥«ª®¥­§©®ŽŽŠ¢£±¯Š¯³­µ¬±²Ž·¹œº¶»ºž»žŽŽŒœœœ·Ž²©·Æ«Š³Ÿ±šª€£¢ Š«­³¯¡®žº³ÅÆº²Ÿ¶ŽžŸ»º¹·ž·¯«Œ¿Š¥²žÈÄœºœ¹­€š°·žž¹³ªŠ·µ§ ¢¢¥Š¬­®®ºÒÜ»©¶²«š®²²ž±¶ºŸ»··²µ··ž»·µºœŸ¿»¶Œº€ªÊš¢°¿¶¥€©«š€Šª«°¬¬­µŒŽ¶ÃÍÃµœ¯¬»Áž·¹¹Ÿž£Šª«ºÃÍÍÂÁŸ¹Ž¯¹œŒœ·­¥¬²²­®¯¬¯²š¢š¢¯¶ÂÎÓÍ²€³œ§¢«²¹ŸÂÀººÀ»Ž·¹¯±³µµŽ¶œŒŒŒŒž¿¹­Ïž§¯Œ»«¥¬¶Ž®¡¡š¬¬²¬Š¿º¹»±³¿ÓÌœÀ­²ŒÂŽµ¹¹Œ¯·žÇÆº¹Œ¹µ³œ»¶Ž¬Š¥«¬±²ºž¯²ŽŽ®®ª©±ËË»²ŽœÆ»¥©ž³ŽŸŒŒ·µž·³Žž°°±³Ž³žŒ»ŸœŸŒŒ¯³À°Š«¯µŽŽµŽ³¯²±¬€¢Šª­Ž­€¶ŽºÀš©ŸÈÆÅÀ¹º¿Áµžº·Œ®£®··±²ºŒº³ºµ³·¬§±«©³œœµ©¥ŽŽ®¬­££ Žžž¿ÉÒÙÄ§Š¶±ª°³ž¶³°°²±®µ¯«¯·º·²ŸÂÃÂÀŒ³¡ €ª¥ªµžžž¶ºŸŒ¶ª©¬«§¥š°µ²®£°¶»³³ÁÄÇÆœ·ŒŸ¶µ¯ª±¬ °±²³·ž¹Œºž·³±®±¬²¬Ž¹»Ž«§ž¶ž²µµ°­¢«®ºÑÚÛÙÉ¥  €²º··±§¥«®ª³±°²µž·µ»ŸŒ»··ž²²©ª©¢«·¶ž¶ŽŒÁÁ¹©€ª®«šª²¹Ž°§µÀ¶£²¹ÃÄœ¶»»²«£Šª§«­³±±·Œº¹ŸŒž¶µ·®¬²±¯·ž·³²²ŽŒ¹žŸ¹º³Š©ªœ×ßÕÆ³«žž²³¯Š¡¥«¬°Ž¶µŽ·º»¶žŽ³±²ž¹ŒŸŸ²§¬¶¹³²³»º»º®š®²¯ª©®³Ž±¯žœ®¡«·»»Ÿ»·³«€£Š§ £§®·Žž¹º¹žºŸœŒ¿º»··¶±­º¶µž»¹»¶³¶¹ÇÂž¿ž®£š«ºÎÒÄŽŠ¡³¹²««ª«šŠ©®ŽŽ¶¶ž»»¹ºº¶¶¶Ž··Œ¿Œž¶±³œ¶µ¹ŒžžºŽŽ·žŽ®«­®±³ž³²¯š¥§€£¬¶Œ¿ÂžžŒ¹ž»¶±µŒœž¹·ŸÀœŒ»œŸŒŒÀŒ»»¹¬¹ººŽ·ºœŽ·®¯·µ¶¿§«Ž¡¢«°·œ¿º¯³Ž±¯®µºº³¬ª®®ª¬³··žžººž·ŸŸžž¹µ¶·ÀÀ¹·œ·¶ÃœœŸÂÀÀÁœ¿ÁÀœ¹¶µµ··Ÿ»ŒŒ»¹ž·ž¹ŸÄÄÁŒŸÃÀœÀœžŒÄÄŒŒºÀ¿Ÿ»»Ÿ¿¹¹À»º¹¹¶Ÿµ¹Œº¹º±¶³µ¯±£¡£€§³¶¹¹º»¹ººœœ»ž¹Ÿ»¶Žµ³°Ž»ººŒŒº¹¹ºÀÁ¹·ž¶žºŸÅÀ»¿ÁÂÌÁÂÂÅÇÆÇÄÆÇÈÆÂÀÀÀÃÁÅÈÍÅÆÈÄÃÁŸ¿ÃÆÂÄÆÇÄ¿ŸÀœž¿ÁŸÀŒÀœŸŸ¿ÀÀ»ºŸŒ¹ž¹ÅŒ®Œ²°žœœ·š¡Š£ žŸœœ»¹ºž·µµž»ž¶º·ŒÀ¿º·»ÁŸ»º»»»œŸÁÄŸŒœº¹º¹¿ÁÁÁ¿¿ÁÁÄÂÆÇÆÆÇÇÉËÉÅÄÅÆÉÍËÅËÆÉÊÅ¿º¹žŒÄÉÇÊËÍÊÆÈÅÁÅÆÄÅŸÁÃŸÅÆÁÁÁŸŒÅºÀžÀ¹¶ÀÌÅÇ¶« ©²©¯µ¡ÀÀÁÁÀŒ¹·žž¹»ŒœŒº¶·ºŒŒŒŒŒŒœœœœŒ»»ÂÃÅÅÀŸœŒ¿ÁÁ¿Ÿ¿œ»ŸÃÂÁÆÅÃÆÅÆÇÇÈÇÇÆÈÉÊÉÇÇÉÊÊÇÃ¿ŸÀÅÉÎÊËÎÎÍÌÊËÌÉÈÅ¿Œ¿ÁÂÃÄÀœ»»¹ºŒÀœ¹ÁËÓÕ²¢°ž®¢»§r»œÀÂÂÀŸœœœœŸ¿ŸŒ¹»œÀÀŸŸÀÂÀ¿Œº¹¹º»ÀÂÅÅÀœœœÀÂÁ¿ÀÃÄÂ¿ÄÂÁÆÆÄÈÅÆÇÈÊÊÉÊÌÍÍÌÊÉËÍÌËÉÈÈÈÊËÌÉÊÍÍËËÉÈÉÅÂÂÁŒ»œÁÂÁŸœœ»¶œœÂŒÃÈÉ¹t]btžªjRl\ÀÂÅÅÄÁ¿ŸŒœŸÀÁÁŸŒŒ¿ÂÁŸœÀÃÃÁŸŒ»ŒœŸÁÂÈÈÃÁÂÁÄÄÃÁÁÄÆÆÄÇÅÃÆÅÄÈÈÉÊËËËÊÊÎÏÑÑÎÎÎÏÎÎÎÎÍÌÊÈÎÌÍÏÎÍÍÌÉËÆÂÅÉÅ¿ÀÄÄÀÀÁÁ¿Ÿ¿ž»³Œ¿T>QWS[\°xs^`žŒÀÃÃÃÄÄŸ¿ÀÂÅÇÆÅÃÄÆÅÂÀ¿ÀÂ¿¿¿¿ÁÃÄÅÆÊÊÇÇÈÇÇÈÇÅÄÆÆÆÈÉÇÇÉÈÆÈÎÍÎÎÎÌÌÌÍÐÒÒÑÎÍÍÍÎÎÎËÊÉÈÊÉÊËÉÈÉÈÊËÇÃÇÍËÆÈÉÇÃÃÅÇÆÌÇÇÉ¿¿œ[OVOWXVSNx|tiiaWž»¿ÂÄÆÈÊÇÇÇÉËÌÌÌÍÌÍÌÊÈÅÃÅÅÅÆÈÊËËËÉÌÌÊÉÊÉÉÊÊÉÉÈÇÆÆÈÉÊÌÊÊÉÌÍÎÏÐÏÏÏËÍÎÎÌËÊÊÉÊÊÇÆÅÇÊËÈÊÊÈÇÈÉÄÇÄÄÇÊÉÊÌËÉÉÈÈÉÊÈÄÌÊÇÍÀewZLWLRKT`vbbc^_bŸŸ¿ÁÂÄÆÇÉÈÈÈÉÊÍÍÎËÊÉÊËÊÈÉÈÈÉÊÌÍÍÊÈÉÉÉÊÊÉÌÌËÉÈÇÆÆÉÈÊËÊÉÉÇÈÉËËËÊÊÊÆÇÈÈÇÇÉÊÇÇÆÃÁÁÅÉÅÂÃÄÂÃÅÄÄÆÈÊÌÉÊÎËËËÍÌËÉÊÉÅÈÀÁÆ|zJZ[UQWYfNVc]_¿ŸœŸÀÃÅÇÈÇÆÆÈÉÊÊÈÉÈÈÉÊÊÊÅÅÄÅÆÆÇÅÉÇÈÉÆÇÉÈËËÊÉÈÇÈÈÊÊËÍËÊÉÆÈÉËÊÆÃÃÃÀÂÄÄÅÆÇÉÆÈÉÇÄÄÆÈÇÇÇÈÅÆÇÄÆÉÊÌÍÌËÏËËÌËÊÈÆÄÃÀÀŒŽcsstZVZWUav^bacgÈÆÃÃÅÈËÌÎÍÌËËËÌËÊËÍÌÊÉÉÉÆÆÇÈÊÉÇÅÆÅÇÉÆÇÉÉÇÈÉÊËËÌËÊÉËÎÌÌÌËËÍÏÌÈÄÄÄ¿ÁÄÅÅÄÄÃÇÊÍÍÌËÊÌÊÉÉÉÇÇÅÂÇÉÉÉÊÊÊÍËËÊÅÂÃÁœ»ŒŒÀ°t\r€zLMdZ€kjgjËÉÆÉËÉÇÆÍÌÊÈÇÆÅÄËÌÍÌËÊÈÇÌÌÌÍÌÌÊÉÉÊÉÈÈÈÇÇÈÉËËËÌÌÌÊÊËÊËÊÊÉÈÈÇÆÅÄÂÃÆÆÉÉÈÇÆÆÈËÏÑÐÎÎÍÏÎÌËÉÆÄÃÊÈÌÈÑËÎËÏÉÉËÈÆÆÆÀÅŒŒÂŽµ¶cvc©q~vh_bÁÅÂ¿Ÿ¿ÀÃÅÃÃÄÃÄÄÅÄÊÊÊÉÉÈÊÊÌËËÊËÊÉÈÊÌËËÊÉÊÊÊÊÉÈÉÈÈÈÂÃÃÄÅÆÆÆÈÉÉÉÈÆÅÄÊÊÊÈÉÊÍÑÏÏÏÑÑÒÒÒÒÒÐÏÎËÈÆËÈÌÇÆµÏÎÅÉÊÆÄÉÊÅÆÅ¿ÆÍÊÎËÊ|žÑÊÂk_OvºÃÄÄÃÃÄÆÉÃÄÆÈÉÉÈÈÎÌÌÌÌÌÍÍÌËÊÌÍÏÎÍÎÏÏÏÏÍÎÎËËËÊÊÉÉÈÌÌÌÌÌÍÍÍÌÍÎÎÌËËÌÉÉÉÊÊÍÏÒÔÒÐÐÑÒÒÑÑÑÑÑÐÍÊÇÆÆÅÅŽ·ÊÎÉÇÉÉÉÊÊÉÉÊÑÇÆÎËÈßÑÒÔÉÐÊÇÐ¹s{ZRÇÊÍÌÊËÉÈÇÈÊÍÌËÈÉÍËËÌÍÍËÉÏÍËÊÍÍÍÌÍÎÏÏÎÎÏÏÒÓÓÓÓÓÒÑÒÑÐÏÐÐÐÐÑÑÐÍÈÅÃÄÇÇÉÉËËÍÏÑÐÐÐÐÏÍÊÎÎÍÎÎÌÉÇÇËŒËº`ÈÅÇÈÆÅÊÑÒÒÐÎÕÍÏÐÊÔÎÔÐÏÌÈÐÍÏÌuqbJWÅÆÇÅÄÅÄÃÄÃÃÃÃÂÄÅÌÉÆÆÆÅÃÁÃÂÂÃÆÉÊÊÅÆÇÉÉÊÌÍÏÎÌËÌÍÎÍËËËËËËÌÌËÍÏÑÑÑÓÓÍÍËÊÊËÍÎÎÎÏÐÐÎÌÉÌÌËÌÍÌÊÉÐÁËÈÅprÄÊ¶¯ŒÅÄÃÄÈÊÉÍÉÍÎÎÍÒÉÎËÓÉÊÍÒÍžhPFÅÅÄÃÃÃÂÀÃÁŸœœ¿ÅËÓÎÇÄÂ¿œŒ»Œœ¿ÁÂÃÄ¿ÁÁÃÆÇÈÇÅÅÂÂÃÅÆÈÊËËÌÌÌËËÎÏÑÓÒÑÏÏÐÐÐÏÎÍÌÌÎÏÐÐÐÐÐÐÍÍÌÌÍÍÌËÊÍËÉÉs_¡ÃÅÆÃ¿¿ÂÀÃËËÉÇÈËÑÉËÒÒÑÔÊÐÈÊÍÚÜËdJÈÈÉÊÉÆÄÃÈÆÇÈÇÈÌÑÔÑÍËÆÁŸÀÅÅÇÆÄÂÁÁÇÆÅÆÈÈÇÅËËÌËÍÍÍÍÌÌÎÏÎÍÊÉËÍÏÐÐÐÐÐÏÏÑÑÐÎÌÊÏÏÏÏÏÐÒÓÏÎÍÎÐÐÎÍÊÑÌÊÉ\{¿»ŸÄÀºŒÂÄÅÄÃÉËÉÉÎÎÒÏÖÌÌŒºœž±¯±qRÌÉÉÉÇÆÆÈËÌÏÒÏÌÌÎËÌÐÑÍÅÂÃÅÈËÍÌÌËÍÐÎÊËÊÉÅÂÌÎÐÒÒÏËÉËÍÎÐÎÎÊÉÌÌËÌÍÏÐÑÐÏÏÎÎÍÍÍÏÏÎÍÎÏÑÒÐÐÏÐÒÐÎÍÍÊÁÈËhgÁ¹»ÂÀºº¿ÃÆÍÇÈÇÈÄ¿·±Ššª|zq{ÒÉÁÇÆÊÎÌÐËÎÒÐÍÊÅÌÍÏÑÏËÌÏÊËËÍÏÍËÇÍËÉËÎÎÌÊËÌÎÏÐÏÎÍÎÍÎÍÎÎÏÏÑÐÎÎÎÐÒÑÏÏÍÌÍÎÎÎÎÍÌËËÍÏÐÑÐÐÑÑÑÏÍËÏÔÊÍËrd»»ŸºÌÒÍÄÌÑÒËÉÈÃÄ²¢~¢·¹¯±¬¬Â¹ŽœÇÆÐÖÔÎÉÊËÍÎÏÊËÎÐÍÌÌÏÍÍÎÎÐÐÏÏÎÍÎÏÑÑÏÍÐÒÒÓÓÓÒÒÎÏÐÑÑÒÒÓÕÓÑÐÑÑÎÍÏÏÍÍÍÎÐÑÍÍÍÍÎÏÑÑÒÒÑÒÒÒÑÏÎÐÇÏÊÎ[ÄÒÉÅÅÃÉÈÊÎÊÈÍËÄÁŠÌž·Á®qmfCFQF¥©®ÌÎÎÊÇÈÌÍÌÍÎÎÑÔÕÓÓÕÓÓÓÔÔÔÔÔÒÒÒÒÔÔÓÒÒÓÓÔÔÓÒÐÒÒÔÕ××ØØÚÖÓÔÖ×ÕÑÕÓÒÓÓÓÓÕÑÒÒÓÓÒÒÐÒÒÒÒÒÒÑÐÐÏÌÒÒÏÎY_£z£ÊÐÒÓËÌÓÎÐÌÓ·¬± ZJ]`kT]Œ©£ÅÍÃÅÅÉÒÒÐÒÑÑÒÕÕÕÕÖÖÖÖÔÔÒÓÓÓÒÓÓÔÓÔÓÕÖØÙÚÙØÖÖ×ØÙÚÚÛÛÜÙ×ÖØÚÙØÖÓÔ×ÖÓÓÔÔÔÖÕÖÔÓÒÔÔÔÔÔÔÓÔÔÓÚÒÚÔäÈ]HOZg[To¶ÍÓÕØÑÐÓÚÚÖ¥œ¹nsºËRzšnqŒÉÃÆÄÆÊËËÐÓÑÓÔÕÔÔÓÒÒÓÒÐÐÐÐÑÑÒÓÓÓÓÕÑÒÓÔÕÕÖÖÖÖÖ××ØÚÚÛÙ×ÕÔÖØØÖÕÖØ×ÔÒÒÒÔÔÖÖ×××Ø×Ö××Ø×ÖÕÖØ×ÚÙÙÝfJ]BtOIYn ÍãáÔÕÖÛÐšŠ Ó©oÁ²p¯yµÏÊÊÉÈÉÊÌÏËÊËÍÎÎÍÍÐÑÑÑÑÐÐÑÐÐÒÒÓÒÔÕÔÓÒÑÐÑÓÔÒÓÓÓÔÕÖ×Ø××ÕÕÖÖØÕÖÖÖÕÕÕÖÕÖÖÖ××ØØÙ××Ö×××Ø×ÖÖ×ØØÖ×xXTlÓÌlS_Wc¥Õ×ÖØÛÔš œ©Êw}vtZY®œ¿ÀÂÄÅÇÉÊÍÎÏÏÐÑÒÒÏÐÏÏÎÏÏÎÎÎÎÎÏÐÐÐÎÎÌËÊÊÌÎÏÏÐÑÑÒÒÒÒÒÑÒÓÔ×ÖÒÔÔÒÓÖÖÔ×××ÙÙÙÚÚÙØ×ÖÖ××ÙÙÖØÖÚÕÛØq]jØÚÝŸ_GSVrµÏÖÖÊ±ÀÜÍnrÂ©jcQLuºÓÊÈÊËÇÊÍÊÉÊËËËËÊÊËËÊÊÊËÌÌÌÌÍÍÍÍÍÌÉÊÌÌÍÎÏÐÎÏÏÏÏÎÍÍÍËÊËÏÒÒÑÔ××ÕÕÙÙÕÕÖÖØÙÚÛÚÚÚÙØØÙÚÛÙÙÖÚØÚÕ×ÕoHÇÝâ¿P^_RQPœÝÃµ¥ÏÞ²§Ë}VvKB°¥n±ÉÏÊÊÊÇÉÌÇÈÈÇÇÆÄÂÁÃÃÄÆÇÉËÌÊÊËËÊÌÌËÍÎÐÐÏÍÌÌÌÍÎÎÏÎÍËÇÆÅÉÍÑÒÓÓÒÓÖÖÖÕÕÔÖ×ØÙÛÜÜÜÛÚÚÚÚÛÛÜÛÛÚÙ××ØÙmd¹ÞÕÓ²pre\^JiÄ»¿Ô¥bekBDªxµŸÏÏÒÐÐÒÓÒÏÏÏÎÌÊÇÅÊÉÇÆÅÆÆÆÅÄÅÇÉÊÌÍÌÌËÊÉÈÈÊÏÎÎÎÎÍÌËÇÈÉÍÑÓÕ×ÕÔÖØØ×ÖÕÕÖØÙÚÛÜÜÚÚÙÙÙÙØÙÚÚÙÚØØÙØà³X§Ù×ÓÖß×Ž~rnVZ\
+q;Lª åÕnzKFK}v­ŸÇÈÈËÏÍÍÔÏÍÍÍÌËÉÈÇÆÄÂÂÃÄÅÃÂÃÄÅÆÈÉÉÇÅÃÂÅÈÊÌÍÎÏÏÏÎÌÒÓÕÖÕÔÔÔÖÖÖ×ØÖÕÔØÙØØØØØÙ×××××××ÖÕÖ×Ö××ÖÖÚÔÃÝÖÙØÐÝÛÒmj^]pSGš«¥Ö§LQPB¹wkgmsz
+ÆÆÆÆÆÇÇÈÉÇÅÅÅÇÈÉÌÍÌËËÊÉÉÈÇÅÄÅÈÌÐÍÐÓÔÔÓÒÑÔÕØØØ××ØÖÖÕÔÔÕÕÖØØØ×ÖÕÔÓÓÔÔÓÕÔÕÕÔÔÕÕÔÔÕÔÙÚŒÄÖÕÙÛßÖÖÔÜÅmWcHD¡¶§ŒeB{TLA®¡da`fiinpm
+±ÌÍÎÍÌÌÎÐÐÏÌËËÍÎÎÐÏÑÑÑÏÎÌÏÎÌËËÌÏÑÎÐÒÓÒÑÒÓÓÓÓÔÔÕ××Ö×ÖÔÓÔÕÕÖÕÖÖÖÕÒÏÒÓÑÒÓÔÖÖÕÔÔÓÕÕÕ×ÙÝÕÐ×ÖÙÔÒÛÖÎÕÜÒºx]\R?kªªÃ[@toOPL¿Ž®ÒŠ¢§€¹ÈÍÇÁœŸÄÈÈÉÈÈÈÉÊÈÇÆÆÈÉËËÉÊËÍÏÏÏÏÔÔÒÐÎÍÎÍÑÒÓÓÓÔ×ÚÖÕÓÒÑÒÓÒÔÖÖÓÒÓÔÒÓÒÒÔÖÖÔÑÑÐÎÏÏÑÒÓÒÒÑÑÒÔÕÖÒÖ×ÖÖÔØÏØÑÏÑÏÑØÑÃuGRFD_€Õq:VfNJHÍÊÊÓÉØÔÙÕÔÓÐÌÊÉÆÈÇÈÈÉÉÈÈÀÀÁÃÆÉÊËÊÊÊÌÎÑÓÓÒÒÑÑÏÎËËÉÉÉÉÊÌÎÐÑÑÐÐÐÒÓÔÒÔÓÑÒÕÕÑÓÐÎÐÔÖÔÒÑÏÎÍÍÍÎÏÏÏÏÎÎÎÏÑÍÊÑÓÕÍÎÕÔÌÔ×ÑÐÏÎÕAKOE>a»t<OhTGKÄœÆŒÉÂÈÅÎÆÈÊÆÄÇÉÌËÌÍÏÎËÈÇÇÈÊÎÏÑÐÏÎÍÍÎÏÑÒÒÒÒÏÏÌÌËÌËÊËËÊÊÉÌÍÍÍÍÎÏÐÓÔÑÐÒÙØÖÕÐÍÏÓÖÔÑÓÒÐÏÏÎÏÎÏÎÎÌËËÊËÊÐÍÎÑÍËÍÍÏÏÐÑÑÐÍ»NMDMGB[R?VdUMHÃÂÈÌËÈÇÇÎÃÇÇÊÍÍÑÙÓÏÍÏÎÐÐÓÒÑÒÑÐËÈÊÉÇÇÊÌÎÐÎÍÌÊÊÌÍÎÐÑÓÔÔÒÐÎÎÏÎÏÍÎÍÐÓÔÓÏÒÖ×ÒÌÎÒ×ÛÛØÖ××ÕÓÑÏÎÍÑÐÎÍÌÊÈÇÏÐÍÉÌËÉÉÌÈËÊÎÏÉÌœyHOIFFF?GC_rTJKÔÐÏÎÊÈÉÈ¹ËËÊÇÅÊÑÎÍÍÏÑÑÒÒÖÓÎÌÌÌËÉÇÆÅÆÇÈËÌÌËËËËÍÏÐÔÔÖ××ÔÏËÇÅÉÄÇÌÌÎÎÎÉÄ¿ÂÉÓÌÎÑÓÔÔÒÑÑÑÑÑÒÒÒÑËÎÏÏÎÏÏÏÒÑËÈÉÈÈÈÌÈÈÇÈÇÉÁ²[CHLI=>>?EtµaAHÕÓÒÒÑÓÕÑÕÈ»œÏÈÃÉÊÍÑÒÒÓÓÓÕÒÏÌÌÌÊÉÊÊËÊËËÍÏÍÎÍÎÎÐÑÒÖÖÖØØÕÏÊÑËËÏÑÊÏÇÎÌÆÃÁÅËÑÑÓÔÔÓÒÒÓÏÏÏÐÐÐÑÑÍÏÐÏÏÐÏÍÆÅÆÆÇÃÁÃÄÅÈÉÃÄÓÌFIM?LFDLF<tŽjHFÌÌÍÌÎÑÒÌËŽªÀÐÍÌÊÎÐÑÑÐÒÔÔÔÕ×ØÖÓÐÎÌÌÌÌËËÌÏÓÑÒÑÑÑÑÓÓÓÔÕÕÓÐÍÊÍÍÌÇÄÊÌÅÄÂÀÅÌÍÉÐÐÏÎÏÏÐÑÒÒÑÏÎÌËÊÉÈÈÈÈÇÆÆÄÁŸœŸŒœÃÈÈÈÏÌÈÃž HDJG@HCAD>|_EAÍÎÎÌËÌÊÂ³ÊØÐÍËËÌÌËÍÐÓÓÑÔ××ÕÒÏÏÐÑÒÒÑÑÓÖÐÏÎÐÏÏÏÏÍÎÐÏÎÎÐÒÏØÕÉ»ŸµÄºÁÃÁÁÆÇÅÆÅÃÄÆÈÈÈÎÎÎÍÌËÊÈÆÂÁÀŒžžœÅÂŒœÀÀÂÇÌÊÃÈÇÊœÁ¶gFFI@CIE@B}VCCÃÂÀŒŽ­¢yWÄËÆÄÅÃÄÄÄÆÉÉËÌÍÌËÉÊËÎÍÍÎÎÎÎÒÕÊÇÈÉÉÈÇÈÈÊÌÉÈÇÌÏÕÑÐÙ³¹ÁÄÇÉÇÄÅÆÂÂÁÁÃÃÃÁÅÅÆÆÆÆÆÅÆÄÂŸ·Ž¹ÂÆÄÁÃÊÉÆÇŒÁÂÅÅÆ¶¿Âz_DGHSZRjL@H£|l]JNµÌÐÂŒÆÄÃÃÄÄÂÃÂÉÈÈÆÇÇËÍÊÊÊËÍÎÑÔÈÄÄÅÅÂÁÁÄÄÄÄÂÂÄÇÄ¯w£»°ÂŒÃÂÁÃÆÇÅÄÃÃÄÆÄÄÄÃÃÄÅÆÆÆÆÆÂÅÆÂÀÁÄÈÄ¿¹¹ÀÅÅÇÁÁÀÂÍÌœ²t¡PbŽ©¢­}fLIrqg]YUQH=8wÂÒÇÄÈÆÈÆÅÆÅÃÂÄÄÄÄÅÅÄÂÁÃÂÂÃÅÆËÎËÈÆÆÅÁ¿¿ŸŸ¿ŸŸœŸ¿Œ»¥ºÁµºÂŸœ¹¶ºÄÅÃÁÄÈÇÄÃÃÄÅÅÇÉÉÊÊÊÉÌÊÆÇÈÅœ§Š€«ºÅÈÊÈÈÈÅË·¢~±³~šŠ¡³ªoQnSEBACAAA?9CŒÁÂÂÈÀÇÄÆÈÈÅÄÄ¹ÂÇŸÀ»µœ¶·¹ŸÁÄÃÁÅÃÃÃÃÂÁÁÅÃÇÆÆÅÀ¿œÁÄ¿»»»œŒŸŒŒœÀÅÃœÃÅÄÅÅÈÏËÍÏÏÎÌÍÎÍÏÏÌÊÉ¿¶®š š²žÈÎÄÓÐ²~¶žª€²±bGHXFZ¶78=BBA@=H¹ººžÀŸŸ¿ÇÌÍÉÅÄÇŸÀÂŸœŸœ»»»ŸÂÇËÌÊËÊÇÇÇÆÂÄÅÉÇÄÂœŸ»œÁÀÀ¿»··œœÀÂÂÄ¿žŒœŒ¿¿ÂÈËËÌÌÌÍÎÍÌÌÌÍÌÊÆÂœœœŒ¿ÁÃÄÀËÃÄš€ž¬~°¯ŒZKECKCt³B?AEC?==T£Ž··³¹ŸÂÂÃÄÇÅÄÄÀÃÅÉÆÃÀºº¹¹¹ŸÇÌÌÇËËÈÈÌËÈÂÃÆÃ¿Ÿ¹žŒ¹·ž¹žž¹¶ž··ºœÃÃŸ¿Ÿ»º»œÁÈÇÇÈÊÉÈÈÊÆÇÈÇÄÅÇÇÈÊÌÍÌÌËÎËÈ®ª³«{QNIFBEHÉF@@DCABD]«Žº¿»ŒÄÄÆÂŸŸÀŸ¿ºÆÅÈÇÁÀœž»ŒœÁÇÊÉÅÇÇÅÇÉÊÆÄÀÀœŒ»Ž±«ª«¬¬ª¬¯®³¶»œŸÁÀœ¿œºž·¹ŸÀÁÂÄÅÅÅÅÅÁÀÃÆÄÆÈËËËËÌÍÎÏÌÆ°¯²uT@CBAGDC«JFEDB??>Z«·žº»»ÀŒÁÀž·»¶°²Œ¿ÁŸŒ¿ºŒ¿ÁÃÇÌËÇÉÈÇÈÈÈÅÃÁŸŒ¹·µ®«š§šª««­°¬³žŸÀŸ¿»ŸŸŒ»»»»œœŸÂÅÇÆÆÈÆÆÇËÏÑÏÍÎÐÐÐÑÒÔÔËŽ³º³§¡€±OK?5<?B;B±A@AECBBCZ§ž¯®²²±²±³µµ®³¯®¹Œºž¹»œ¿ÁÁŸ¿Ÿ¿ÁÁ¿»ºŽ²²¯¬«§ŠŠ¢¡¢¢±²³µ·ž»º»»ºŒÂÅÂÁÆÆÇÈÇÄÄÆÃÅÈÌÏÐËÅËÌÎÍÍÏÐÑŸŒ®¯±À¹³£²aO\i}]@K`e{B>@DA=AEe²­­¯¬¬©Š®±£iHp~\ŒŒÄÁ¿ÀÁÃÃÁÁŒ¿ÁÀ¿œºž·µžµ²±°²«ª©š©ª©§©ªª°Žµ¹ž¿ÃÆÌÔÕÖ×ÒÏÎÍÉÆÆÈÊÌÎÏÏÏÌÈÉÉÈÇÆÅÇËÏÅŸ¯­žÁ±Å³\MI`k]MCKSLc@;=DDCNZi£©²¯©©°«®€_I9S^C5ÃÁÆÃ¿ŸÀÀŸŒœœÀÀ¹³³²°ž³²°¯±­­€€¡ §ª€Š§¯žŒÃÃÀÈÐÑÑÏÎÒÒÏÍÎÏÎÏÑËÌÌÌÊÊÌÎÍÍÍËÉÈÈÈÍÑËÆÉÉÆÀ«oPZSNGGDDISN_E?AKPXfxsos¥­°²švZL?>IIFBÎËÉÇÁ¿¿ŸŒ»»ž··»³£ Šª©š©ª«€ ¡š«¬­³¹œÅÆÊÏÓÔÕÑÎÎÏÐÐÒÖÙÕÍÈÁŸÁÁ¿ÄÌÍÌÎËËÌÌÏÎÒÏÍÍÌÌËÕÏÆÀÂÌÈ¯ ±¹ÉÅÆ¯NINZgmmnZNJ` ³±ªqSDB>BAHLG¿»Å¿ŸœŒººŒ¿Ÿ»·¹¶°®­Š§Š¡€¢€šš¯·°¿ÇÊÊÈÄÄÉŸ¿ŸŒ¿Âœ¶²²°¯³¿ËÒÎËÎÌÌÍÎÒÏÎÊÈÊÇÉÉÎÇÂÉÍËÐÓÎËÔÍËÅÏÇGNYfnk^UHB?Inš bJ@@C?CFNKC|±©¹¶¶µµºÀÃÃÀÆÄÀ¹¶ž¶²¯©{¢€°š©°³°«š©±»»¹¹»¿¿»ºÂÊÌÍÐÏËÍÉÉÆÄÄÄÉÂÂ¿ÅËÊÎÒÒÔÓ×ÕÌÎØÖÐÍÆÉÌÎÆBJV_`[RM=ET`}zTD>EJJBCI>HF|»œœ¹¹·¶¹¿ÂÁÂÊÊÄŒŽ³­«©§~x ¢¡©µµµ»¹µ»Ÿ»žµºÀÆÉËËÍÐÐÎÐÏÍÊÇÅÄÅÌÈÉÇÇÉÉÌÐÑÎÓ×ÔÓÒÓÐÈÊÏÐÐÎÏÐÍÉÉÊÅÀ89?JRROMBSslNHBDHJGCFBFK>¹±·ÄÈÉÅÃÇÍÎÐÏÈÅÁ¹±¥¬«©
+wnkjv¥±²Ž¶ÂÊÉËÍÐÒÎÊÅÁÃÈÎÓØØÖÓÎÊÍÉÊÎÎÌËÏÍÍÏÍÐÖÔÔÒÕÒÓÔÑÐÐÏÎÐÔÉÀÇËÆÊÊÉÌÏÊÉ?99@GIJLKez\LAHGGGGEEFCFJCËÊÊËÏÐÏÏÓØÙÑËÂ¿Ÿ¶¯¥||zsllv|€¯»œœÃÄËÒÉÈÇÆÈÉÌÑÑÕØ×ÒÎËÉÍÌÌÍÏÒÓÓÍÍÑÑÓ×ÕÓÌÏÍÌÍÌÐÐËÅÌÙ×ÓÕÍÍÊÅÇËÌÅ¿`XMHB>AEF`zmRADMFGFGGGHHBF?AÓÏÒÍËÉÉÍÏÏÎÑÎÈÆÁž¶Ž¯§ {vbY]ehuª°°°ŽŒÀÇÆÇÈËÌÍÑÔÕÖÓÐÐÐÐÍÐÑÍÌÍÊÅÈÇËÏÑÑÏÒÊÍÉÇÂœŒ¿ÃÄÆËÌÍÐËÊÉÌÏÎÈÆÄ}uhYKCAKTI=CDFJJGFDDILJ@@MÊÎÁÃÄÅÆÇÉËÌÆÉÇÅ¿¶Ž³¯š¥}tkdhhfny «žÁÇÏÌÊÍÎÓÕÑÑÕÓ×ÙÖÓÐÐÑËÍÎÍÉÇÄÃÈÄÇËÉÃÀÆÅÉÊÎÊ¿¿ÂŸŸ»ŸÁŸº¶»»ÃÈÇÁÄÇ¥§¢ugWIEHFGCIIKGCCFJMECENÁÆÅÅÈÆÈÆÄÅÈÀ¶²²²¥¡
+zplk_XVV_`g£¯ŒÈÏÊÈÈÌÔÖÓÒÑÎÒÏÑÓÓØÕÑÑÔÑÒÓÊÄÌÇÂÁÀÃÄœ¹ŒÁÂÅÇŒ¶ÂŒœŒ»ºŽ«Š©ª°±·Á¿¿¬®°¯¬€ugZRGECKKKHEDEHMBDBJÂÈÐÎËÄÄÃÀŸº³°Š¡³ xui[VIKMT_hyš®©®µ¯·ºÂÍÏÏÐÐËÇÉËÌÑÒÔÕÓÏÑÔÌÉÎ¿ÁÂœœÁŒžµª¬«©¬€ š®­§¢¡¢¥£¢¢¡Š¬®¯°°°°°­š¡whVKFKMKGCEIJIE<GIe»ÈÅÃÁÁ¿ŒŸŒ£³£µ¡£rugZVFOU[jmq¥¬«­µŽœž·¹ººŒ¿ÃÃÄÀÃÊÉÆÈÅÃÆÊÅŸÃ»œŸµ­¬«®€¡€¡¡±²µ·µ®€pdSOKJGCDKLIGHFFr€³Â¿¿œ¹ŽœÀ±·­¢²§~te_[VNHJQ\v€¬±»ÉÆÄÓÒÍÄŸœ¿ÁÄŒ»œŸÁÂ¿œ¿Ÿ»·µ²±¶¯©§¡ £    €§ª§¢²¯­¬š¡j]NHEFCEJN@KGD¡¬¯µœº±Š°¹¹­°­
+unmd[VSFIM\go~§±±°­ÀÍÆËÌËÈÇÆÀŒ¿º³·œŒžžÀµœÁ»²«©©§¢£¥£¥©©©š¥|q_I@FHGHKMCGGz€£¹µ±®µ²ž¹¯©štenlmhaYWKD@FK[aasž°Š¢®œ·Ž³²¶µ© ¥²­±ª¥¬³¶Žš££€šŠš¬¥€¥§§
+¢}xoWHFHLKE@DMJt¡šŽÀÁ·œ¶·Ž­°ª {qk`XPIL=8<@DQcky¢q­µ±³±²µ­š­§€©¢¢Š«¯¬±³ªŠŠ §µ©¯ªyy{
+ysv{zvrfWICLODHHFQŒŸœ¹³ªŽ³¥wp^J?;<>317=FRaads{tt}t£¡ª§¡¥©Š¥«§°Š€š©²¯ŽŒœ¹Ž²°«€¢ Šª©šŠ©¬ª£~uyz~wikqljomdVKIIKDJJP»©³¯®xsrqgYPE:;3154-1<<QZRSZchq¡ŠŠ©«²±©šª¬¬®²«š¶«±¬­¯«­®¥¢¥¡€¥|t}poxzstoddgcegkjaVNKIKKFHpš¥«¥xXNPSTRWZO?>;;93.5@H[f]PXqzš¬±±š®Š©±°¬©€­§€£¢¥§¢©¬¡¡
+~viekmpkfjlkn|wkkw~zomomdccafchljbVLGV?GS]Zip}|lN?IUXSVVH;;=<6/.6@GNbprx|~©©­®ŽŽ©£¥¥¢ ~~qiifjgbdfgmtsiny|sggljcaa_ecfhgd^QGJFEW|YOYc|xvgclsmc[G73853.,08==;Kew¡š°§€¡¡¥€¡ 
+~~~{xttyujbaedeijhiomkqzwnbahibaa]__bcaabXLALGZrP~||owtnbD4751,*-26;@88G\iu¬Šš€ ©¢or}}|yzwtuuusnsqjhkhc^^\\]][Yiinz{rgY_gjcba\]Y_c``_XPC=CV|`}uT^²¡ygg^=.33/--.05<<=@L\acl~|¡
+
+}QRy}yxztosytlszzrmmh_dkmjgfde_]XSOMJHfclzvjaU`fha^[X][]ab`[VRLHBKgf`j^LMl
+zurb]R;230.,+-/396@LUYZ[_wxykp
+}~zaAB`v
+}|unehffb^ehjkkicadb[dggeea[WOMLIEC@>h_erlbaXdfe_[WWab]]``YTQKL;?LR]EA<@CCV_bihQD<54/,***,047>?CC?@B?OZix
+{tvZBKXaz{xjhhb]bb`^][TRVVSW[YSRSOJJEA@>><9×××ÖÖÖ×Ö×¿¥
+¡®»»Ãž€~«ž»Ã¿©Š
+yuyx©|y{z}}~xptyt×××ÖÖÖ×ÖÕž¡
+
+¬¹ºŸ»®©ª±Æ×ØÑ² }¬Žž³¢³ÏØÕÚË£Š¡€®³Ž³¯§~~¹ÄžŒÈ®
+}tvwo××××ÖÖ×ÖÏ­
+
+
+¬ÈÕØÙÉ¶²²Â×äçÚ®z~
+®ºÅÚÎ©ÈßæäåÍ šœËÑÒÐÁ¡¢ÕÝÓÐÏ®¢}zvl××××ÖÖ×ÖÉ¥
+
+ÄßæçÞÂ°«·ÐßßàØ¬z{~zz}®ÆºÆãË~|¡ÛãæâØÀ¡¯ÉØààßÉž«µÝáßÝË§¡¥|xriÖ×ÖÖÖÖ×ÖÄ€
+
+
+
+
+ÊØÚÛÈ© ªÄÎÈÇ¿¡~|}{yŒÕ»œÓ±{«ÖÓÕÑÁ·­¢ŒÔßãÞØ»ž¬¥ÇÜÛÚØÄ¥~~~|xvsmÖÖ×ÖÖÖ×ÖÃ¥
+}~}}³¶¶ž¥ ­¯ŠvsstrxŠµš¡¯}¡žŽµ®¡¡®ŸÃÆÃŸ ºŸœ»²§ywwyxwvrpÖÖ×ÖÖÖ××Å§
+
+
+svuuxwywzx{~}xuxuwxusz~|y{
+
+
+
+yswwtuuqnnÖÖÖ×ÖÖÖ×È©
+
+
+
+otrqvwtww{||zyzxzzz{|xvvvvvupqqurm|uzttz}~~}}{{}{{~vwx~v|xzy|yyxuxutrrsqnnÖÖÖ×ÖÖÖ×Ì«
+
+rrtvvwvruxxyzxvxywwxzuoovvwvtsssstzrxvzvy{~~~||zxxx{vw|w{uyxyyxwwwwvutssrrrqÖÖÖ×ÖÖÖ×Ð¯¡
+tssuttspuvwwyxwyxwuuurqtxxyvutssttxryuyvxxz|~~}{|yyxvvx}xvysxswvwxwwwutsrrrstuvv×ÖÖ×ÖÖÖ×Ñ²£ § 
+
+
+
+
+
+~sqtuvvurwvvwwxxxwxutropvzzzxvusstqtrvruuvwy{|{zxyxyxtruywuwqvrvuuuvvutsrsssuvwxy×ÖÖ×ÖÖÖ×Ò·€  
+
+
+
+~srtwvvurvtwyuuvruwusrnmqxxywvsrrroqquruvvvwxzyxwwxywrpsvvuvruquuuuuttstttttuuwxxØ×××××Ö×Õ»Š¢
+urtwwurprrwxussotvttrpmlwvvutssssoprvsuxvvvyyxxxvwwurqswuuwutruwuuvvtstsqqrsuvwwÙØØØØ×Ö×ÕœŠ¢
+
+urtwwtsqoquvsqqqsssqtronuvvuttssrporuttutsvyywx{uwvusrtxtuwwvruxwvxxvtsqpprsuuvwØØÙØØØÖ×ÒŒ£
+
+
+
+
+urrtrppplopoommnoponomlmrqrsrrrqnnnrtsqqrstutrsvsttrnopsppqsrprvuuuutrpooqqsvwwvØÙÙÙØØ×ØÑº¡
+
+
+
+
+wrpnkihghjhfggfifiiihgfgkllmmlkkmmnrttrqrrsrokknjllkjjllkkjmkkkopqqqomlllnprtvwwØ×ØØÔÖ×ÖÔœ¢¡
+
+
+vqlkifeccbaaaabbcdddddddfeeffhhgiknrtutstttrlfdghhhgfdefedfggfgihhiihghgilpruwww×Ö×ÖÕÖ×ÕØÀ£ 
+
+
+
+
+upmmieedcbaaccbbedccbcccddeefgggginruwxvvuutmgfhggfeedfffdcefeeffeffffeggjotvwxwÕÔÕÖÕÔÕÓØ¿¢
+
+vqonjfddca`acddcedcbaabcccdefggghjptwxwtvvwungfifedddddcfcbefddfgffffgggdgmtwwxwÏÍÏÐÍÎÎÌÏž¢
+
+wsqniedabaabcdcbeccbabbcddeefghgilrvxywtuwxumgfjedddedccecbggeegffeddcddbhnsxyxwÅÃÆÆÅÆÅÃÃ¯¢
+
+
+
+
+
+~wtroifcaaabccccbdcccbbabdeeffgghgmquy{yvvwxumgfiggffggebfcefgdfgdfeedcbbeipvyz{zÁÁÂÃÂÃÄÃ»©¢
+
+
+
+~vtrojgdbabdcbabcbbccccbaeefffgghemrvy|{wvxyvngghiihhhhfefgggeeefeffgfeccgjpvyz{zÄÄÇÇÃÂÃÃž¥ 
+
+wutpkhfcddddcbbbcccdddccffefffghfntwz}{wvwyvmgfghhgghhhghijhfggfccddddcbfiouxzzzÅÅÈÆÁÀÀ¿¶£ 
+xwvrjhgceedddcbaddddddddffeffgghfmsvz}|xvxzumfdfghffgghhfhhfehhdggggfeeefjpvyyyzÃÃÃÁÃŸÀœŽ£
+xwwtjggfefedccbbeeeeeeeefgfhhhjifkrwz|{ywxxuogdgekeghgiellghkffhiiigeebbenoryzw{ÃÀÂÃÂÄŸœ±€
+
+
+zyyslffgffffeeddfffffffffhfhihkiflswy|{xy{|xogfkgkhigdehggekonmggjkkklljdiqz|{z{ÅÃÄÄÀÅŸŸª€¡¡zzyumhgghgggggffgghhhhhihjhjkjlkfmtvy}zwuxywrlikeimjllkornjlkiljmroonmohhjotvvy{ÆÅÅÃŒ»œ»  ||{wmjhhihghhgghhghgghhhhjhjkjljfmtvy}{wx||wrjgimlploplpopihqz}
+|xvxnaksu{z{}ÃÇÄÀ¹ª·­z|
+ ¥§¥££šŠ¯|}|xnkighffghhghggfeeeeedfeggfhgemtwy}{xx}~yrkiphktloonsŠº°P³º²«°¹¯²ŠwyuÍÍÃŒµ¡® y{|±ŸÁÂœ€Š©ª«œÈÃÆŽ¬¬¥ |}}yoljgfddfgffhihggfeeedfdfgegfemsxy{|zvyz{xpkmsinswrš¹ÅÂªxI^œ¶®Žž¶ºŒžš«tduxÜÐ¿¹µ¥ª€°¢ÍÜÝÔÆ«ÀÄÈÆ«£ÆØàÝÎ¶ª§§£z|~yoljgfddegffhkkjjiihhdfeghfhffmsyzz{||{|}ypmsmnqz©¶±®dD^ŸŒ·Àº««»Ÿ³qYFK]z~âÏž³Ž¯­£œ±¢ ²ßéâÌ¶~z€ÂÜÞÝÌ«ŽÛåáÞÂ©y|}yomjgfddegefhjjijjihhdfeggfgfgluyzxz||~tn}¥®Œœ­šÈ»x«€µ¯¶ŒŒÂŸsbYJEk~tÒÀ±®°®¢£­¢»äâÝ¶w}·ÙãæÙ¹¥ªÆßäæÔ©}{|yrjjiheeeefihjkkjiiihdfehigifgmryxw{|x||w¥ÇâàÍª€ÀºÂÁËÊŒœÁ¯®³¹Œ®YPFLQauyz{Âµ«ª£œÚÓÉ¥{ºÕÛÚÌµš€°ÇÔÑÊž}||zrkjkiffijhjjijkkjihgfhgijhjhjorw{}|xz}ŠÊÝÔË²¿®§Š·¿ÉÏÀ§¯©{YOKHMPXocgyx€
+xx­Œ²©¬Ÿ¿Œ° ª¹œ¹²|{}zrkkmlhgkkghkklmnmkjhgigijhjigjpx{xru²Øß×Ã¥¹š¡©³»»ª~zu]MHGKLEAJXBjy
+{y{{|wx~|
+}~~}{zz|zqlllljhjkijnmmmnnllkgihjjiligmvw|µËÂ»šhv Ž³³€š¬€u^ttte[KMOHJGCUlaCq}t
+yzxquxyyw}|{~|z|~}}~|
+
+}z}{zz{xqklmklkjmnoqmmmlkllljkikkikigktz}ypkN<48??>DZrŠ°¿»¬jK<P^lmaY[NGFLRBN~~jx|}||zutrpxxxz{||}{}~}}}}}~}{zy{zzz{xrnnmkpokopnononkkmnlmnllkijhgkwgA8<=:>>?B>::99=No¡`Wr^X^[WZVK@@KIErxzy}z{|zwwxwvux|yxzvzzxz}zy{{{|~}~}~~{{{z{{yz|||xsnonlpomqpmoorrmloojnolmlijiqip_4=S==>87?B@?>884,CipX[WQLUMLOLFIOLEztt}|{v}}}||{xzxwzwyzuy|y|{zxzyyzz{}{||||z||{}|}{xspnmnomnsrovmstonpngmnklkikikjs_8CM@9:99??<B;5>:6?FZg[SGLIKLDJLFINNOc`v{{~
+
+
+vx|zy|yx{~~|}}{|{{{zz{}|}~~y|}z}~umklfmqqortxqpqrnknjknmllkklnjwaCFID=<76?@<>>98=97AILXQCJIOGCHQRU^hgbo|x{{{
+{{{z}y|~~~}}}|}~
+{}|unnsvpkrsvwqhxyrumnnmnommmiqy{i>>MH:7C>AC85899;;:9GMNDALHIIGQ`inqoojv~
+{{~|||~~}~~~{ridgnruspwu~~¯ž²ªqnqpnnpolmpnvyo=;JWC4?;9@<A:9<<<=8IKHHD?>JUPWdimnhlit{z|~|~}zwx|{{|}~~~~~}~~~~~}
+zi[WY`hkrtstztÁ«uwynvrpnmnminskvzyG9EPJ=;C><A7<<87;?=FLFFEIJJRMWdfhnppo|~}zzww{xwzxy{}}~~~~|}}}~~~~~~­¿yLXmturzsxwu³È¶mhpttmqrstonnjokqyy`6?MTS7:>;<C@77>=9;KPLPKNTPSXdlikoomo}}|z||}
+
+y|xw{wvyvrv|~~~}||}}~}}~|
+}³ÕÝxIfzxzz{rtªÓ¹ypdctzklsu{vssornryywI3E@VOE=BUdW?4<><COPWeZPSUdpxsnpohnq~|z~~}~{yx{xxzxrv{~~||}~}}|} ÏØÌh:LScwr|w¿Žho_s€«nrxpororvqw||kH04D@@Ubjel_A28EPGLRac`XR[iliiomkno|y}x|~~
+{y{wwzxwz}~{}|}zŒÄÊÐºÂ«eVy|xy¬¶¬nhja¥£¡yeipedlinrvv|{tZODScqjkommdI5;LHDFZaVO\_inmpnmrqnyw}w|
+
+{z~zxzxy~{z}}~}}
+~yyx{}~~~~°ºÃÄÏÏÓofwxu®€Š|mgfdlhla^d_[[au~z||uzqrkllmllkbL7=7DWF6@Ziwovxwytvr~zz|z}
+
+}||{{z||wux{zy{z{
+zxwz}}{|y
+«±²µ³ž¬©~~r
+qdgUq  kbfgeccc[VRt
+yzzkhonkknnljj]JFI6=D:Uu}|}~|~}{xz
+}~~}{}}vtvxxwyx{yxwz|{{|«ºÀ²«§­Š¥sag¡
+vgd¢ Zdlfg]T]W\Zz~zz|zmnokgjprnljsVBG8CI9H}
+~}zy{~~~}~~{|~}xuwxwxxv{zyy{{{{|ªŠÉŽ}nndcO|fedT_hb`NBLN<Rx
+}z}}nptvqljnssmrZ<GEDCGM
+|}z{}~{}||||~}|}}xvwxxzxuzzyz|{z{}z ©ª£qikuj_X}^ef]TSZTVOOWWZLFJOYe|~{{ywvojmnovztmshFBDE=A`
+}}}~{|~||{{||}xvwyy{yv{
+{{{||z|~zrrkkc^sutopfYeg\ZOADCDGAFEISTd{zunsvtpv}}{wbI>CB>m|}z}~|~{{z{|{
+ywxz{{zz~~}~~}~
+
+homoppd\h}xtpgy¡n\TMDE>DBE><Lnx~~|xuv{{v}yU=?CB`{~~{|}|~}~|~yyyz{y|
+zxyz{y{|
+}¥x~qnt}zscg[`{|
+x`¢[`b]NLACBBA=MWJi}|ww{~zU=;:;Ho~xx}w~}}}{}zy|uuy}zy{|{}{z
+šxxywzshejo~|vf©aghaRJDKKLA:VSFFe~~{w}ywD<>@ECdzuwx}~y||trtz|}yx|~~~~}
+
+Šxqzxu}}ttx~yrl ¢¢{gjaf_PFGPZMMKEN=Qy~y
+
+}zq=<FFHDbyz|w|z{~
+rlp{~}
+{{~
+sm|x|
+uzkftwjy§¡£ubjbb]XXRJFZscLSKZ[w}||y|~yxqICB>GFezwzy{|}~
+¡wzxvy~~~gcx
+~~hIavuohfic`[Z^RJJnlIO|u`dw
+|yxy{wtqTB;:DD]{xvy~~{­­{rz}}
+bckpabehYppie]hg_Z\XKIQw}lV`o<N
+}xxvttvtokW:=B@BHv|tyxt|zeut}y
+|~zkbkcy~shb`SS_d`bdf`Z`ZVQT
+zadQIPO^vZyvprtssqqlqlE??9@>W}~yzz|vo
+|s{y{zzkmojz~}gXRX\cmgkcfabYltuwtedhUBTcwPJaJWVQNKHHGCFFTgHAAC=@>ltkyij_XZ\^`Zzqyuvx{{|yz£Š¢roslu{}
+}`WRYWZoidjofaW{xTqyvu`l`}_HPSailkbUQQLLLL\EHFD@EBMGIFE>EBADCCCywnut{yy}{{|~ ¥¥Š¡vjwegjsM^`V__fhfgdea\n|qLu³²° fm^K]TKnohO<DIDC?GCDHGLLJHLCDEE@LKKNNJKH{wvpwuyv|}~ £ £€£ivurfe¢ kXaiaZsk`a\hee{xZ|dOBRi]QvzaNKIDDIGNNORPPQVSSLMRWV\WZ][TQG
+|
+š©£€}
+iim|ij ž°€¢šŠ¡bbm`ogkf]_ge­hb{luwl>Kr[Q\ty`RXZSPRIOUWZ[[a[[]ZW]]^bbbdh^RD ¥©ª§¢¢ª§€€¢ tnqyqw³ŒºÀŸžµ²Ž··ºÆdlholekiibd§Ä¯x`poprRStaS]xv[MaoYGMTUYRNNKRFINNHJDC@JAEX[NG­®°®°®®¬¥©ª­­¬®­¬­­­¯°°¯¶ž¶¶¶Ž³°¬®«®¯²±¶»¶º·¹²}||ÂÎÇÃÅÈÊÇÈÈÄÄÁÉ§l]pkowkd_f®»cwnw}¢gQbdW`{qULfxbGC??D?=B@B@>@A<@===B79DYSG¿¿¿ŸœœŒºŒŒºŒŸœœ¹¹º»º¹º»»¿œŒœŒ»»Ÿ»Œ¹œŸÂÂÅÈÇËÆÉÇ
+ÈÐÉÎÆÊÌÈÈÊÇÈÇÇÇ»}cootfsnaK[£b|omz¹£{PE_\fqWYrzmYHB?A?ACA?B?>><@?A=;9>;W]DÉÈÇÆÆÈÆÅÇÆÃÄÅÄÅÃÃÃÃÂÁÁÁÁÀœŸŸŸ¿ÁÁÀÂ¿ÁÀÄÄÃÉÄËÌÊÌÍÐÊÔÒÑÑÊÈÌËÌÉÍÊÑÃut{png^YFc¥m
+cc®€pL@L[sxqU]}|bWZOC=ACCD?FADCA@@BC?CBCU^GÇÇÆÇÇÉÈÆÂÄÃÄÃÁÆÆÈÇÆÄÄÄÄÄÆÄÄÁÁÆÈÈÆÈÈÇÁÃÃÃÈÁÄÊÌÈ€
+}ÏÎËÎÍÌÏÍÌÏÎÍÔÉÍËÚÊflrph\HNl€n]±¥uQEFG`q`T_zx\VjdO?DFCFCB<@=>;==8<=7IWe[ÃÉÆÅÊÇÇÄÁÄÈÄÃÁÅÈÅÃÅÃÂÂ¿ÁÄÅÃÂÅÅÄÄÉÈÉÈÈÉÊÉÆÉÈËÌÇ²³ÁÀžµÇÉËÌÌËÌÍÇËÍÐÇÑ¹jmqrcYLHdzo£waŽ¥pQGFJVp_Xbvo_Z]cZF=D?:>A>?>@A@@B;BKY]`]ÆÀÂÆÇÆÄŸÀÀ¿ÂÁŒŒ¿ÂÀÁ¿¿ÁŸŸ¿ÁÁÁÂÁ¿ÀÁÀ¿¿ÀÂÄÅÅÈÄÅÉÉŽž¹±ªš¿ÅÊÉÈÊËÉÉËÌËÉÐŒvnd_`OK^§jy sdÃµwMG?BW^Zexn[WTPIMNEFKIMLPQTXX[YQYfk]Y^¿ºž·¹ÁÂŸ¹ÁŸÂÁÀ¿œÀÁÅÁŸ¿¿ÂŒŸÀÁÁÀŸ¿ÂÃÀ¿ÁÀÀÂÃÅÁÁÂÄ»Œœ¶ºµœÄÇÅÃÅÇÇÉÇËÉËÍžvuxZUYPH
+¥zh
+TFMCHt^_pfRNJFGTXLLXWXVXUUVUXPRUTPHSaŽ²«³ž»ŒŒ¶¹Ÿ¿ŸººÀÅÁÂÁÂÂ¿ŸÃÂÅÆÅÄÃÂÃÆÂÃÄÅÃÅÁœºœººœµ¡ ÀÂ¿ÈÄ¿ÂÄÂÁÃÆÇÆÈÍÇÉÊÁz|Ñ£_[RN
+
+WCFKI
+gdhaTNIBINQRQRXWUVTTUQQINJDFJNN»²£³·ºœ­xÊÁ¹»¿¿ŸŒŸŸ¿Á¿Â¹¶ž¿ÂÇÈÈÄÄÀÂÀÄÄÇÅŸ»Ÿ¿ÀÅÄ®¥»œžÄÃÅÄÃÅÅÄÅÈÃÉËÅÅÆÊ{ÌÓªfXzzzmJQLHEebQ^YWYPJBLNRZYU[[XYXZ\XVNLHPTRPNkj«ŽŒ¬Te£ŸÆµ¶œŒŸÁ»žººŒŒµŽžžŒ¿œÃ¿¹º²·žºŒŒŸ¿Ÿ¿ÁÁ¶¢²»ŒÅÅÀœŒ¿¿º¹»¿ÃÃÅÆÃœi^|ÍÎÔ€]d~rmk|oz{zzvm}sXETUYVJHILORUWY[]Z[Z[\XXOJEPOPZ^WMHXfTGb¯œÀ§²¹»­¬µž³š¢€šš¯¶žŒ¶°±¥«¬ª©«¯¯­«ª«®¡¬°³³³±±²±¬««®®ŽŽ·²§k[À¹ËRi ª²°žz
+TK;BFTQNOLJLLGIMMRQUVVYZ\VNFRSZ`XYWV^`fZhtb[p§«zbw©¯š©ª¥©²³·°®ŽŠ¯°­© ¡¥š€¡¢«šªª®®ª¬­¯¯¯®®®°¯³»±±³º¬ª€Œž»^^¶³³¶§žžœ­ZJLI>HJQJRTSROKGFGJONNRW]PJJ[VY^Wfae_s ©±§¥fORZ\\^d{Š·Ž°ŽŽº°®¹ŽªšŠ£ ¢ ©°µ¶Ž³²°²±®±±¯³µŒœŸµµ³žŸ»³¹Ž¿act²ž³µ©³Ž¶Ž^MQL:FGMSQSXUQQOJJKJHFJSYUM=Ta]bUqvŠ¡±²¯š¡ª©|uovyw~€ŒÅš©«š¡¢Š«®®³²°®°°¬§£§§©¬²·¶»µ³¯¶º¹º·°µ²Œ£eb]¶¬Ž¬¯³ž°_QQMAICJSSVWUSTSPPMJKNPLFIECCEYMEyljp«·º®«¯£¬±¡ 
+zx¢€€¢€š¬¯Ž³°³žŒž±¶»»¶Ž°Žš¥§¢¥ejb
+¯«·žµ¬Š£WQOMDH@FPWWVURQRQPONONJD>H>EAT[M?sdl
+ª© ªª§­¬oksš®¯©­­¬©ŠŠ¡   Š ^ebiz{©­¿³·Ž¢YOOMCFBHOXUUWROOOLNNJEAAB=B@ZŠŽ¡wo|rfnub²Ž«©¯¶Ÿº¶³Ž©«ª£Šš§nbcd}ª°²³­ZPMJCEDIOXUUURPOPMJEBBBBB@LÁÐd}oSc~€­©¯¬šš°¢}|~~
+Š§¢ £€¢¢¬µ|eVu ³·»Ž« ¢`PJEDCAFNYVSRONNOMICBABA@8Kk¬°nD;
+vv¢¢¥£§Š€šµŒº³®© §£ 
+£·µµXh ¬ž°³š¢[OIDDBBELXVTQNNMLJHEBAA@?8_lr^D5E£¡®~fny{}£¡§€ ¢§«­®Ž·µ°š£Š©š€®¯²«©¥ª³»Šf_ {¥¿²œ£SMLHDAGJKUUTSQPONJFB@@A??XÁÖs<?C:€ŽÀ§Šªµ°naXx¯­š¥£ª°ž¹­±¯­­¬«®ª©€šµœµ²ª¥ ¥©º£§¹·akº¶º­cSLHGDGKKTSSRQOQNGEBAA@B>^³µ\AAC?£«Š£uš¢±ŽŽŽžŠŠª ¡¡¡| ®žž·œŒ¹¹ž³§ª§š¯¹ž»··¬šµ»¶µ§k^Ÿ¶Ž°kcRMLKGHKLOOOQOMOKDCA@@?@>EjU@DA;D¡\JD[x±©€š¡ª­Ž§®®š©Ž±šw}¡£¡£ªš€Š§»¿ÁÆÇÁœžµ±ª¥¬§£ ©«x­°µayœ³²¶^cVNKKHHJKOPOOMHJDBC@ADBBCx6BEC?@{¡§Š¢²±«µš©§§€®š€°ª§£§²¬²® ¡­©«¬scbeo¥­­°±³¯£¥š«Šª¥­²c©«·Ž¡jsii©¶·­^m\ZQIHIIIHNLKLGCE@AD@@BBDCUa=@@FDAr«ª£z|ng|
+Š³«g
+©ª¯²ºÄÄ¿»Ÿ¿Ÿµ»±§«¢ª
+h_Z`lnz¢®§€£¢¥¬ª­¬§§©²{j¯¶µh[ha¹¶iae[PJHGGHHFECDBAB@@DA@ABC?MC>GB@E=zy{|cCjyNHHOsb]q~z§€wiX®®±¯­©«³¢£¡¯žž²­«¥ª€©³Žš²«œye¯œgYYZtm`pZRMKJEBDHFB@CBADBACCDBEHC>DF>B?@B`LY]\7;KPRMEY{[TSMKu}v^n
+©©§žŒ~€¯¶¶·µŽŽ°®ªš£   ¥§±®±»¯¯oh«¹©qg]^`¹se_LNIIJEACFHECEC@BAE@CHDELIC@FFB?ACÇ¢ZFexYW
+lr\]\Z[ivxxln|sy¿Ä¿³²œ¯­Š¥ª³Œ¿Ž¿¹·Ž«­|®®š«š£ŠŽ«¬¯pV­·|ajd_{ÄobdQOHEIIGFEEB@EC@@>F=@GA@HFDH?><@:;®G;I¥xnfTgae[HTXV_~mustidYi{¢±®±Œ³¯¶Ÿ·²³¥€·ž«zym`v¬¥£¢
+§Ykm|z[^[YdrvibaJMJGJKGKCCADBCI?=jh9EHHBCEA@B@@<> WBE\{{njyumHaszl`klZ`o|~yjXX]mp¥yje`[ku}y¡«®±ŠeTXS^fa^XVWRckiP^dMHDHOEBDMEABFA?FX{FFJ?AJ@=<?>?9;¡yUCK`]yŠ§rt~w|xz{{motwvw
+šŽ»³¹±Á©oga^OVSVTVTXgh`YTNJJPIEIG@CFD>BJh©Ê¹JKE>@COO@:FD>VQAS
+}yuz±ºµ³Žªsm}vm]W|Šdlnp~¯Žª«€¢§€±žkr£¯»Œªµ¬p±²pPP\RVUWYTX[SNGKLINFFEHHBBA=BPu«hÃU@CbŽµZCG=?Ad»ŸÇ¹`4[lm€Ž»¬ŠhWLJLTTZd`Ybz ©v\Ig}
+«°®­°©¯š§ š­Ž€ª¯š°¬®pTUMMSOWTOQXQTURIOFKDJAC<PO]|Š¡nK<D;I±ŸAD@>F:CLox_^RGP|€
+owePWRUGHEGWgoonpib_UQl||¥  rt £­®šŽ­µ§®±°¯§KNMSKOCWCIDM\]TXPMMN=NDCD?@v\|ÉšQAJGD>;><?@AJWPJ=DKIJujwmownq{}~u€¢£~£§€¢¬¬¯°€žµowh}VRSQKLNOOMKNJMNUNPKEG@A=sŒ§kXEDCD?;z[9:>?=DGap^TaYEC}|zmh{kWbq€¡¶ž³·»³°Œ¯¥¥§š­€€ŠŠ¡§x`mw{JNXSUSTRLNLJKFHLLKMEQCJA>~~}¡¥Ê£G<@CCCA;I9>>?>@EAp£|š §µšš¬ ¡š¬­³»Ÿ·¡¥¡©¯ªª²²²·ž»µ³­·»²±®¬€ªž¯Ž€e~jtPROVQYSTRPLOJKKMIIHIOI?c£b{y·mM8@GFCAJX>?C:;EBC©  ¡Š« ¢zbh
+°µ©žžŽŒŸœœ¹Š ©ž»ž¡«ÄŒœ»¿º²³ŽŽÀºŽ¹twŠkxQXQ\aRUQYVUWPQNJEGDGKEY­Œ¶¥­\AEBBAACDBAB?C=>DAE £°§¥vdŠvglbXYf¯ÀÃ»£k]y€¢©­«·Ž¹± šª³¡¶Åµ© § ZpVczQQVX\V[ZUWPXPSSMGGCEFPzvYŠÁ<JIFFB<=ACAC>@>>@>EN[y¥µ¢|wlSJNIWosg~€¢Œ®©±²€Žºª€­ª«§Š±¹Ÿ®¥£ªyzxnQbWKUYPUQQRLOXFEOXLMPPMKDB@x}{n~~DHE=?EID>>BDC>?=>>=CFa~zx|jsb]@8Xx}yywq`u}~} ¡ª ¡iYkqlhlpgVX\WNPNXORTEEJPFDDEEFBBKo­¥I@>?IBADE@?A@B@@??@?ByŠµ¶žÃ¶¥
+i\aUCi}xsyx~zyoxvxhot|š¢€ €¡¡¡s}scXUSC<ICDAEEJFECHB;GZ|b Z=FJFH??CA@AABBA@@@AA·¿ÀÂ¯­¥|nylYjzy}osxsx
+
+Ž€º­¯€Š£«¬°»¢ €§¬ £©¡«§wxtgZk]MFBGFFNFDIF<XL>[mk6EA=BD<BHD@A?BBAA@?@@­ž»·®ŒŠ|zy®©¥«ž°¥§«Ž­ž·ÅŸŒbcUgq|zŠ¡
+¢ª°¢«·¬®_]_`SZdh\UHH^THK@F_{mQD?@DDCF?AD?=BBCBACC@@@zwlhhms®ÂŸ©«±§€§«¥­²©¯º°š£ ±œ§®¯µ€dYY]`qtkw ¥¬¡¬«£¡§³š§«©¬±ž®}de[P^oaPKJTGJHLLC=@PUbwm_LA=LAE<@DB@?AABABB?AA|{kILOMZ]e©šŠš¥€©¯ª¢š}U_i}¢ª­®w¬©š¡¢Š§±À©žª°«x¡|uND?FEE>JJFNAA?<LruCgf;BK=DA?@C@?ABABBBA??=no
+U7?DHZ[f£iIY€ªŠ ¯šjco~t¡°³±¶µŽ°­£ 
+}
+¥¯€œ¥©yuoUgr^UQD>CIGIFLIJOAGEI@;ACGDAA>IE>BE@BCFABBBA?@?@}`WB<[{ ¡¡ Š­¥«p`y«¢±³ÁŽŽ¹»µº¿©§€~z«z|t¡¡|x€£{fZOQMCD?EIHCJGHFC@BJBHHBGACD>CDH=CCB@A@AB@@;=dcmxwa[k¯°ª¬¡€ª~n¥¢€¡ª­€ª¬Š¡¡š
+~}ª ¯ŽŽ€Ž¡ ŠfPEMHJNHEHIDHIEHEAC9HHE>C>@?;G>:66<2E@;:ACHAB?Dcojw\Tea[[dYyš~ur
+¡¢¡¢t~€¬ªqH@G>HMJFGEAEDD@C<9>HELW=Hit»uu¬€yp+9EQNJ@=:<>mŒœ®qc}w «¬Š ¥­¡š°~€©lc`KC?B@BCGIGN[QOWV\QUg=MWx¢»Ž§®ž·¬»Ÿº²Š«¢¡().716A<@F:L®¹·¶­š¶€¢|nm©
+¥Žtovw} £©°©£§¬®ŠŠ«¬š¡Š¢wjVFDF?FDA>@DUl|€Žºµ°xJHSNMl ª«$#,#5Z^}m_y]Hqž·³³­w|b]lvtn£ Š»ÁÈÁÁÌÈ»Ž±·Žµ¯¶»«š¯§¢¬šª£€kjmgVGBBAAE?>AEWnu¯±©š^S\ieindUU^y¡~#'3Eg¡LMFM\UKNSKJ|}syYn±±¡¹¯¯ž³®¯ž¶œÂ«°¥¡§©¢y{vef_RGCDDEE@DFH[oo|ruzssvok^JIG=>@CP]`^h]d%,3l¢³Žªª;PG9GKNZPJBy²£¥]¬©ª©Ÿ¯§¯² ­° ¥«ª©»ŸŽ¿²­}reaYPHEFEBC>?ERdl®
+
+xopuussnfN:;:>800-1,2(DQ}}£=M7/8:FCGD@
+¡{¡r££¡ªœž·¡¢ Œ»¬²È¿ªŽŸ¥ zj`VPKGEEBEDBBJWY¬ªšÂÅppmjhknqgtplgPCB985986/-+S{pLg¶Ä¹­«šr_^V~ªZ;:G>D|ex}£
+©£©«¯²¶»œµ­°ÂŒ¡
+¡jl~zyti_TOLHFEHDBEBKf|¡ºËÖ¿d]aa^`bcgieeie]O<5502/0101St§žÀÈÎÏÎÏÉÉÍ¿ŸÅÄ»Ž¥haVCM
+fhcd
+¶ž­€±Œ«Á³€ªª§­€z[m
+nuncZPLKJGFD@>CFK_pšºšiZ_`\WXXX^^ggimdPG6.*.-,-+)Ns{lz¿Â»ÃËÆ¿ž¿ÀÎÛÐÂ×ÜÒÑÚÏž§¢{º¬¬·¬·¢ž dv¯ŠŠ_RhuhZSjxgYlrY_WPMKJGEEE<<DN^kzš®wY\WYZXXTSWebflieWE:1.,((+./8R``_U_©Œ±hMF7KW«z¢³³šÄ¿Œ»µŸ±«µŸŸ±Ž© ­«€sÉÇ«
+­°|b}qn`liaanc^b`YSNKIED>A<?FJ^w²»aWV\\ZXTOOV`ahkhaRF;20-+..+ÕÕÖÖ××××ÙÅ 
+
+
+
+
+
+€€©š¢¥°ÂÄÉ¿¡{€€
+²ÆÂËÍŒŠ££¡¢s{­£©Œžx{y}{xxmqxzÕÕÖÖ××××ÔŒ
+
+
+
+
+
+
+³ÃÆÇÂŽª±µÉÙÚ×º |§¹ÃÂ±ŽÎÚÛâÖ°°œº»¹ŽŽÑÆÆÌŸyzxwÕÖÖÖ××××Ï¯
+
+
+
+
+
+
+
+
+¬ÇÚÜ×Ì¹­®¿ÖàáÜžw~y}¯¹ÁÚØ³ÄãæççÏ©ŸÖÖÕÓÈ»§ÂàÞÖÒº£Š}zqnÕÖÖÖ××××Í§
+
+
+
+
+
+
+
+
+ÀØæçÚÈ²š¬ÂÔ×ÙÓ³}~z}€ÄÃºÞ×£vÈâßÜÖœ¯£§ÇâããáÄ»²€ŽÔÞ×ÛÒž¢ª£|{wvÕÕÕÖÖÖ××Í¢
+
+¹ÆÎÎÀ¬©žÂ¿Ÿµ~xyuwz«ÈÅ®Á·
+~ÄËÆÂ¿­¯£®ÂÒÏÑÑÄŽš¬ÃÍÎÈ¹€
+{yywsrsrÕÕÖÖÖÖÖ×Ì¢
+
+
+xyyxxz¡¡xy{uus{ |}w€¢¡§Ž³··¢¯®š£~{}zzuuqroÔÕÖÖÕÕ××Ì¥
+
+rssssuvx}y}wvr|x~{vuwzwvrvsps{vwwzuzz|
+~~
+}z
+~{xy}zrvuustrqqÔÔÖÖÕÕ×ÖÍ©rrssuuttrwszvwqx}yutwxupwvsturrsyuwquwpwuwz||~|ysszt{w{}~|~v{vytzvx{yxwvtvttrsqrÕÕÖÖÕÕÕÖÏ°
+vrtxxtuuusr}vwrtwwy{zuqqrtsuutwusyttsqxruyz}~zx|{zuxttvvtxsxotwxxyyvutuutstuvtsÓÔÔÖÕÕÖÖÕµ
+
+tprvvsstsrr|uvsvxwwxwtssuwvwusvupwrttrwstwyz{yxzwwtvppuvtwswosuxxxwwvustsssvwvuÓÔÕÕÖ×Ö×Úº£
+
+
+uprwvttuttu|ttruwvuvurpptwvwusvvpusutswttvw{wyxxxtttumousruqwpsttrqrttrputtttuuuÔÔÕÕÖÖÕ×Ûœ
+
+
+
+
+wqpwvvuvttu{tsqsvwxyxtqpsvtutrutqtstsrutrsuyuxxxvttsvoptqqsquqrtvutuvvusrsssstttÓÓÔÔÔÔÕÖÙŸ 
+
+
+
+
+
+
+
+
+~wpnvuwssqqrvrrqrlmprqolkuvsttrsrrsrrpprsprswvxwutturvrssqrsrurrusssstsrpnopqsuwwÒÓÔÕÖÖ×Ø×¿ 
+
+~xqmuruooonpspppnppqrrponrrprsrsqrsrrqrssqrrvsvtrrssptrsqoqqprqpruuvusrrsmnoqsuwxÒÔÖ××ØØØÔœ
+
+
+
+
+xsmunpjjlkmmllkimmmmlljihjhkllpoopqrrssurrqsoqnmonnkolmmklkkllkmmnonmlkllmortuwwÒÓÕÖÖÖÖÖÒº
+
+
+
+
+
+
+
+wsmtklffddfggffcghghhhgfcfeggfhijkopqrrtssqqklkjhghgkeehehfeeedfkkkjjiihjloqtvxxÔÕÖÖÕÔÓÒÒœ
+
+
+
+wtqpjjecbabbbbaadcdccbbaaaccddeeehmqqstsuuprgkghdeddcddebbbaa``abaaaaabaeimsvxwvÖÖÖ×ÖÕÔÓ×Ã 
+
+
+
+vsppiidbbbccccbbdccbbbaacccccceefiotstvwuwtvijfgceddccccbbbbbabaccbbbbbcdglqvwwwÕÕÕÔÔÓÒÑÖÅ¢
+
+
+
+
+
+
+vsoohhecbbccccbbcbcbaaaaddccdddddgnsuuvxtxvwkjffddeedcbcbbbbbbbaaaabaaaabflruxxxÌÌÌÌÊÊÉÊÌœ
+
+
+
+
+
+
+
+
+
+
+
+wtopihfdbbccccbbdbcbaaaaccccdddc`gnqtvuvuxxwmjgfedcccbcdbbbbbb``aaaaaaaaaekrwxxx¿ÀÀÀŸ¿ŸŸŸ°
+
+
+
+
+
+
+wtppihedccddddccddccccbbccddeeed_jppuxwvvxxwmjhfedccbabcccbbba`acccccbbbceksxyww¹¹ž¹ž¹º¹³€
+
+
+xupqigedccddddccdeddddccddddffff`lqrvywvywxvnjfdhgfeecbcdcbcbbbbbbccccbbcgltyywxº¹ž··¹¹¹¯
+yuqrjgddccddddccdeeeedccdddeeefgbkpsxxuxyz{vojihigfggddfddbcccccccccccccdgltyyxyº¹žž··¹¹®
+zvrsjgeeddeeeeddeeeeeeccddddeeeedjnuzwt|||{tnnmhededdehccbaccdddddddddcefmtyyxy»¹º¹¹¶º¶©
+}
+
+{zwqujjeeddeeeeddffffeeeeddeeefffhftzr|~vz£©liheeegfecece`cddcddddegmuzzy{œºž¹¶³µ¶§
+{xtujjefeeffffefffffeeeeeeeeffffepspx{| œª¥ÃÍÎÍÍÀ²¬­¢cihfefacdcddcceedghnv{z{{œÂºº·¹ž¶
+
+¡|yuwkjfgffeeeeffgffeffeefffgffffcoqr}z«ÈÇ¿ÓåÕÈÇŸÅÇžŽ¶§wqjddaffddddeeeeehnvz{yzŸÁŒº¹Žµ³
+
+~zuwljgfffeeeeffgfffggfeffffffffdgpy{¶ÍÍ»ÇÐÅÃŸœÂ¹·®«Šwjfbdeeedcceedfhow{zz{¿¿œ¹µ¢§§z}
+¬®Žµ€¯²²³¯£¥~zvwmigfhgffffgggggggfedeeffgghhfirvw®ÔÍÂÄÎÆ²žµŽ¶œ» {~wqd]`ceeccdddhjqy}||}ÆËÉ·®Šzy~ŽÇËÏÅ©©«³»§šÅÊØÎº¬¯©¡}yvwphgfggffffgghhgghgfdeeffghhhclrt~ºÎ¿žÄŒ¹¬ª°·³«£xpkdov{pa_bcddbdfghjry}|}~ÔÔÉŽ®ª®²¯ÇÜâÞÃŠ­ÆÌÔÐ³¡¢ÁÞàâÎµ©€¥|xwwqhggffffffffihhhhhfeeefggghickruºº°šÃ»µ¥¢¿º±xjjfjfmkt{tnadfcbcfhhjqy|}}~àÎ¹³³°¯±·ª¢¯ÝéàÒ³{ ËÝàâÏ°¥°ÒëçÖ¿© |xwxrhhgggggggggihhhihfeffghghhigkss¿µ¡Ÿµ§¯§~jaaXad_BCZb_begecbeghkqz~~}~ÜÁ±°š£¡®Úà×œwt¬ÚáßÛº¥ ¥ÈÜßØÏ©{yxwsjghhhgffghhjiiijigeffgghhhijlpvž¯¶©¢€wjkgbb`UVM@:M__sshbagheijtx{Àª¢š«ÉÊÀ¬|{ªÈÑÏÍ³£€«ÅÊÊÃ°~zyxwsjhhjihhhhiijiiijigfffgghiiifksr²µŠwhdc_]\[G7?IIKIZw|tba`ligow||~
+
+{}|Š£}¥®ªš«ŠŠ }yxxxtjhhmlkkkkllkjiijihffgghiijjimtu©s`¥xnfa]UWeU849=BA?CLd{lmjpt{~~{{z}{y|xw}
+
+~}~
+
+}|xzyyxyxtkhinmllllmmkkjjjjihgghhiiiifiq}
+_C€
+unz|rrh]XT]rZ1:B=58FOJAJas~hkq{z}|~~|wxx{y|zx}~{|}~|{~~~|}~~}w{zzwyxyytkijlkkkkkkkllkkkkjihhhhhhhiiknz{\?v}qllllij^TUXgmc4;;=;G]N>H;CGZedsxz|}z}~xz|yz|{z|~|{{}z{zv|}|~|}|~{}|}~{}~}y|{|{{yzyukiklkkkkkkkmlkkkkjjiihhhhhimorqx}YJIffj`b__XW\^gti6B@?JbM@?FCCEDMQWk~y{x|{||}{||{{z{|}zxzxyzxzz{|x}|}}{|}||~||z}|{xxy||zyzuljkmlllllllllkkkkjjiiiiiiijckuv{fENNZpYiX^^]^fifi|p;FXXQD9<D<>9B@AE@O~~~
+
+}z{{{}|{zzz{|{{z}{z}}z}{}}{~z}}y|z~|||{z{uljlmlllllllllkkkjjjiiiiiiijgmsxvvf?KIIceU]]b`frsrppAKS>??FB9HEF9=DIOK[a~~
+|z}|{}~~~~~~~~}}~~~~~~~}~~~}|||}||z|vkkkmllllllllllkkkjjiiiiiiijmlqzu{yKAGOS|o[\`fqwx~~sbERJ3>ADDH9]vWQYXlbVW{
+
+~|~|{~~
+
+}}}}}}}}~~}}}}||z|wlllmlllllllllkkkjjjiiiiiiiijkq{w~yXJR\Zsh\e`dov|}rxoKO[WH:?>A7j|PVnnmp
+}~}~
+~~~~}}}}~~}}~~}~}}z}xmmmnmmmmmmmkkkkkjjjjjjjjjjjikryx|wdSS[\hhbfhfkssnmn~qa`KXmjXJ=Eqqs5;Sbrz
+
+
+|~}}
+
+~||}}}}}}{}xmmmnmmmmmmmlkkkkkjjjjjjjjjjkmswxztnYPSX`kgefhkoqopsqvfZD4A`dcYWi_iV>3?Yt~
+}{~~|{~|{~
+
+~~~~~~}{y{|}}~~{}wmmmmllmmmmmkkkkkkjjjjjjjjjjlmtvz{xy[PTUVfjgbjllu|ruqpdF/BU6<WnubNWGKbw|}|~|~|{}|
+
+~~~~~}zyz|~~~{}wlllmllmmmmmkkkkkkkkjjjjjjjjlnsyy{}yWOTPO^ghhijkqvumhfljS/4<59Adqi^dmqy~
+~}
+~~~~}zz|~~~{}wmmmnmmmmnnnllllllllkkkkkkkklnszvyrUPUOQ^dflgilnproifbi^859831RnouiOiv}~|
+
+
+
+~~}}}}}}~}{{~}~{}wmnnmmmnnnnommmmmmmmlllllllljnt|vynVW_VW^dgjikjkurbjpknW9>9BGXASvqJWv~z}~
+
+~}|{|}|{|{}~}|{wnloonnnooppppopopoonoommnmmlnt|w{lWZb^[^dkifjnjowiqnfrN6?B_frHF?P}~{~
+
+
+
+
+~}}|~}||{{|{{|}
+}||xomonnoopqqqppppppppoqqnnpolnpu~zz|l\[\X]ikjjjkljnusmjohB?BPvxlq~
+
+
+||~~|||~
+|{{zyyzzz}|}{}yoopnnooppppqqqqqqqqossonqplnpu~{zo]\abksnhkkhillswehdV>E\oz
+
+
+~
+
+}~}}|~{{yyyxxxx}}}{}yonpooooppppqqqqqqqqottomqrooqt}~yp\`ltxrkmjkhjnsup\iiKA=b
+
+
+~
+
+~~~}~}~~zyyzzxxy~}~z|xnmqqqpoopqqqrrrsrrrovvomqtsruw}ul_hvzyojqmpnls}ihkjAB>>\~}~
+
+~}~}~|yz|{yx{
+~~z{womqrqonnopqsttttttspuuompttsvzvlft|zysmprvtryjVlgMCE@]
+~
+}
+
+}~|~|z{}|zz{}}~~y{wonsqpoooopqvvvvvuttquuqoqtttt{|vs|zzvnpw}zzr]iSLBC>Jz~z|
+
+
+~}}|~}{|}|{|}
+{x~~yzwoosrrqqqrrrwwwwvutsuvvtsuvuyu|~~wxsms|
+~o]MKHJ8?\x}
+x}~
+|~}}~~~|||y|yyxqpvsqtstvstyxxxwvtttwwutuvvvv|yyswx~{h`LMF?<<j||~}{yxz~}zwxyutxvtvvwxvwyyyyyxxwwwyywxxwqx}|{{{{
+~zxxtGND<;BVx|w}
+
+~}tw
+
+
+
+}xxzvtvxx{zz|z{z{{||{{z|xz}zy|x|wxyw{vi@B=AEAFh}{~}¥° r
+
+|
+~{xwyvtv{y~|~~}~}|~~~}}~}~~~{}
+{z~{}{vz|vhsS@ADBCBOdm|
+¥¥yz
+z~zvwuuwxy}}}~}~
+
+
+
+~}}zuz¡zzxwwuxoj]K@?FDG?ENm~}~|x
+
+z~{}yzyxz{}
+
+y|qekly~nleb]WOF?GAXP:7C=B;>;\vsx|zg_
+~y}t~wy}}
+~z|~~
+~~yg`VT[WZ\]Y[RKJP_lv~yZEA<FDAB>Qufcghg\J?C
+}x{w|u|vyz}€Š
+}||
+
+~~
+¢sxppfd]YŠ±«¬¥ªŽ¶ŽŽŽ­ª{x_WRNKDMBGIJJIKOT|}zxzz}~|~
+
+¥~~
+y¶Ã¹®dZRzdR`­Ž± ¡ª®¶­³¥riw{mjcI;@BIFJNNOVXVRQyzzy{zxz~ ©£€
+¥
+§ª ¬Ž»ÌÊ¢@2>;So~}o¢ZN~sgii[^TKRXaeb]]`€šŠ¢}}
+£¥ ¥¶œŠ€Š€€©®°ª®¯ª­¬ª«ª²Ÿ²Ã»€X@;>[WGKHMDSPS]`aJ[±ºš§šyb]V\\\\ZXXY£€¢¡£¡¡¢¡¡¥©šš©€Š¥¯³¯¬«š§  ª¬³¯°µ·»ŸœœÂÂ¹ºŒ»Œ»œ¿ºÀ»œÂœ¿ÀÂe8?µÖÈ®«¿ŽsO=?`IESOPJLYefe_tŒÈ¹­¡qt\LT]TJFFECA¹¹·¶·µ²²±³µµ¶·µ±²³Ž±±²²¶¶º»ººž¶ž¹¹¹¹žžºœœŸœÁÁÃÉÇÈËÉÆÈËËÉÄÅÉÇÅÇÆÇÅÆÁÄ¿ŒÅÁÇ¹¡i8Bb¶Â¶
+|L:ZFGTT]X^Om»ËÊ¿º²mz
+NVhME>A@@BCEGHÄÄÂÁÁÀœŸÁÂÂÁÀÀ¿Ÿ¿¿ŒºŒŒŒœÀ¿œœœ»»¿Œºº»Œœœ¿ŸÁÂÇÅÇÊËËËÊÉÉÊÌÍËÈÊÉÉÊÈÊÊÃÊÊÄÇÈÍ·Š¯ŒÂžYBl¹ŒŒg[<XRHVV\Y]U¥}®ÎÃÁË­zYKLNFWERHJCEGHGEDDÊËÉÈÈÆÄÅÇÇÆÆÅÃÄÅÃÃÀÁÄÄÅÅÂÂÀÀÂÂÁÅÄÂÀÁÂÃÂÃÁÂÃÆÇËÊÊÈÈÉËÊÊËÌÊÈÈÇÈÈÆÉÉÊËÐÐÏÌ»©€°°ŽÄÈÍ¶ÑÈÅliHOJEXWZYeEgc¥¿ÉÁQ]}jfK@^WDBIHFGFFDBÆÈÇÅÅÄÃÇÂÂÄÆÆÅÄÆÃÄÂÂÂÀÀÁ¿ÁÀ¿ÃÅÇÈÅÅÅÆÅÄÅÆÃÄÇÃÆÇÅÇÊÊËÈÇÊËÇÃÈÌÉÉÊÈÊÉÌÏÌÍÑžµŒŸŸÁ­f]»ÓÊÐÑirUOHT`]f`fL9H­È \QŸ©€dp®hQJFGFFEEEDÆÊÄÄÆÇÁÅÅÆÆÆÅÅÇÈÆÄÂÁÁÁÀ¿ŸÀÁÁÁÃÂÂÂÃÄÄÃÃÅÆÆÅÅÅÅÅÄÄÄÄÃÁŒ¶±¯žÁÉÉÈÊÍÍÊÅÏÆÓ¥l][s€µº¹~ÁÔÊÉÈÐfdU[VWd]hqkZAD¬ysºÊ¶š nZDCCFIQTUYÅÄÂÃÀÄÄÂÊÄÀÄÆÂÀÂ¿ÂÅÄÂÀœŒŒÀÁÀ¿ÂÀ¿œŒºŸ¿¿¿ÁÂÃÃÂÃÃÄÂÃÁ¿Œ¹µ¯¬žŸÂÃÂÄÆÇÂÍÊÑÎ~I]A7brxØÕÅÅÍËÔfrhfVOgcdok\GJÁ§œÉÆÃ¯€€}YMFNNPSXXVŒŸ»»¹¿œ¹žŸÀ¿ÀÂÁÀÂÁ¿Ÿ¿¿¿ŸÀÁÁÀ¿ŸœœŒ¿¿Œ»œŸœÀ¿œŸœŸœŒºº»ŒŸ¿¿¿¿ÀÂÃÃÄÅÆÊÉÈÄÆ®hN<°CD?eÎÐÉÈÎÆÊkpmwoY_]ftiZEQ¢ÕÑÇÂÈÎ§xngjonnng\FKRR\YY\^ž±©±º¿º¿­ºÇÇÃŸÀÄœŒœÀÂÁ¿Ÿ¿ŒŒÁÂÂÄÈÂÂÀŸœŸ¿ÀŸœŒ»ºº¹¹»»Œ»ºœÁÅÁŸŸÀÁÀ¿ÀÅÃÄÍÐÕ«rÎÓo80AÌÕÇÉÑÕTOXeaZacijo\]PY®ÍÂÅ¯VHV_`T_W[TS`^XUYZ[[[¬ ²µ¶¶·gºÁ¿¿ÆÁœŒ¿ÁÂœœŸœº¹ºŒ¿ÁÄÇŸºœŸ»œÂÅÄÆÅÆÄÄÁÅÁŸººŒÁÄÈÄÃÅÆÂÁÂÆÇÆÇÃÇÈÃÈÄÛ6K<4xÆÊÊºstw{imnnoqllppm±Û¿cHC>@KQY_`LFTW_lzgWWYX~hi±¶ UW¯Ä¹¹»œŒžžž·¶µ·¹¶±²žºžŒŒ¹²­®±Ž··¹º¹žµ³²¯«¬°¶¹»Œ¹º»ºŽ²³µ·¿ž¹œ·ÁµŒÏšOAH<7ÎÂÁXsgbjWdbejhmf]`Z~aNKPWXYcabY`_YVZ_eWHKPNZSRY]xgLZ}Š·¶š«§Š«®¬££¢¡¡Šª«¬²°Š¡¥©š¥Š§šŠ€¡ €Š§ª«¬®ª§Ššš­«²¯«±ª©»§mPCBD(PÂŸÄ~T
+eXaGMPOKVPRV]YQX`Wesog^`oeGWgIJAR[hPEFEd^ZhnbWcyqyy§€tWp{nft­©š«©¥©±¯¥ §­°¯²£šª«¬¬®©«®¯¬ª«¯ª²·ž²Ž±Ž¶²zQTIG7>4€ž·wap]uk[MN\^bUkx{vxz~
+}pihtk\MdxT@9Eb`sRHKFfuyq©ªÂ³§ªtVURXaXYd­¯·¿¶®®¢¹¬Š€¡šŽŽ­¬­¬«šª©Š¥©®±³··µµ²ŽžŽºW:M?:BE<s­­mYxriwkkq}c
+xxtn{n^XVW[WCXe_sZJIKtw£Ž¯Ž­ ª¯€}wµ¹¡}¥ £Šššš¬«€££¢ £¥§Š§«¯°³µµ³³Ž³¶·§B2JMBL@B¬mSihof
+uvwmws\LTZIKIaacn\NKM~qkt¬ž®¬w|¯€¡ Š¯ 
+zzp€Š¥š««­°±°®­°°¯­©¥QK[[VOE4{¥qTroh|{}ly}v|zeKMVWNNf\jf_UJIqgoz­€£²µ­¡¡¥°©m]by
+~¡ wNa`]QF:P `qzfwqlb]axnzv|ymRFJoZU\Zp`d_GDsusuOz®«€¬²­±µŽ­¯š££~|~zvv{yw}~
+§UVhXPN@;go~wdn_[_Y~sz~rwwiRHAgb`S_rZehHD|sXgm®©«§¡®}~zwtuy{{¢ª©¥¢gOcdQRO<YbR}s`ilplbq}q{y|tx{iKE@QkbUenVcfIC~
+
+€{
+¡Š±žµ°¬©¥ 
+}I]dWNO;6KDptl]ztfqpsxvx~lJB?ClbZegYf^L@ ¥§ª~x[tw|vu| ¡¥«©Š°³°Š €Š¥€¡Š±³©¢¢ªmBY[VK?:DORn|mleyquxvylLE:9_e\]`^l[R?€Ÿ»Š­­¬®šsgfw¢¯ªš¡}yyrp~¥¬¯¡ª­£¢ŠŠ«¥£Š£©ž»³®£¢¶€EZbWJA8BMG`~zfTvx{jpxlLAC6Re_SW`dOOA¬ }nt©ž¬Ž¬š¥ Š­¡ ¥¢{~
+¥°¶µ¿µž»ž°©¬®¢¢²Ž±ššŠ€³Œn@YYSA;FGQQjp_wk^ulKD>9I]dXWd^LH?¢bLE_­­š«­³«£š°±³§
+y¢
+­¶µŒÄŸœœ¹¹­¢§¥°EMOG>=GLU[[d
+z±­qjYnlLG=9=RdYTdVG?;r
+¡£¥¡«°­Ž®¬©©££§Š§€¥µ°¯£¥ªš¡ªrXKCUdp|¥®¢­©€©§š€§­š¥ \ILAC>=KOWVWg~£šik\cfOI<:8LeZS\MC=<w¯§Šsi
+mYaq­š_yš³¢³·ÁÀŽºÀ»µºº±¬¬€d\XX\]l~§£¢¢€¯ª§š€¡š«ª_DHBEB;L[RX`^n~xmiNW]QH=79MdYSRE??=
+r^[@anHDDJjZ]loh©¢|cNr€Š¬šª¡¡«¡£ ¡£¥¡¥µ±ªª­®µ±µpBID2:QNRR]W^igwrqrjqsjWRTMC<7@OVOPNF=>6«tQPab<7CNWPC]VWVNPq|lgYs
+
+€®¶»§|~Š¯ž°¶¶²³²Š ¢©¬ª€Ž®®¯°¡
+_V:?@HSPT_]\ZWikpa_wm}px|tjXSODB<8AKGENOF>:6ÄVGkU]|d]dZY^\fwucntkmo}ª»ŸžÀŸ¶­ª«¬ŽÀ±³·¿¶°£wrrª¯©£¥ ££ ³bytzY@3LQMSVX][Za{xfpwtmzpmkQVN@C=:?AKENOC<;=¥I@Hss
+i`]^`NHN]ZTkvemlrdaXRa¡¶±º°«º³ª€
+š¬¡srlZ`~¡¡
+Š§·©¯µ {G??LHFGLTZ\]vvtryjibg|eSZKB@>:?<FEJHC<<9€©YRB^|ypkyw¢fRbt}jj|`hkyxtvmYQYn{vouh[TTQM_g^ot~wpsz¢µ°§ž»cXmUhDHDGHFFINOMMVelf_cea_]\\Y[MIULG@B=;=?>@C>=;;wXXPnV~£¯š©¡oout|w~v~jkuzlt{r}}w¡š¯­¯»µžŽŒ¶¬š¥d7@?FCABAABD>QUNNOLMEOJKQOHSMNF8=?;@;;>=<<;9bPMaª¢u}tz Ž»Ž­°£xomevyvjWO|¢r_pntz€ª©±¢§ª®¶§\enš®ºŽ«¢¡[ys gAHEEDCABEHDKGDHD?FIEJMHGMFKOD:;@<?>;?;=:?9k²¿ÇÃ¬}cAdno€¶²«bVHHGHEOR]Yi}iNDZl}¥ª¥ª©Š¥¡£¥«ª©Š¡ ¯€©sy|x_bj]:BADFFDA@AE>AFDABCA>DEC?GDEI?F@@=>;>9A7?<=Yrh]_[PU £zvf]`\SMJELUhhfamge`SLc{{ rp[s¬«ª¢®®¥©°³¡©¢¢¬¿Ì«€[17=@B@><:999=>>?@ADAD?KDC@FE?B=:<@=7?5>5?;ZVJELVRJ}h}v| uoppqt{r{z} t€€{ Š¥¢µ€µ¬ŽO^c`ypÂq3>>?@?>???:A=:<=<?8E@=~gfb><8;A?=7@7=6:ezb_h_JT|{~oni\gn«­¶¬²¿œ¬º±£§¬ ¥~y£}x¡wH=f`V7=\[\.==<?@BCCB@D>@A=>?:=<@>µº£IB?<<D<==@:;:w¢£¬«¥«€©Š§Š¬±º²º¬°š«¯«²²¶¶ž°¶Ž¹·®š³Žµ§s_W{jR[dgch=;<;<>?>EEAGABC@=?@>>JCA m@2H>?E7;>Ed{£ ¥¡Šª§kcp¬µ®²µ°·ŒŸ¿¶££¢°¹°¹¹¯º³¹œ³°»°Œ¶©xfv£±°aNUm}NCloLT]?H<D?CGCEKIB?@BBDDBKES|ª­š¢¢¥€zD9?=>=Tfa§Š¡rsqfg\MWm°ºŸ¶€oSw¥šš¡¥¯©¯¬£v|¢­©š¿¹®¡|q`=9o^JJGs~[?E?BD<CGDHAGFDCEAADIA<_§w>@AD=EaCjMZx°}st`TFGDOp¢npu£°«§«« ±·ª €š¡¢¥¶Ž®Škqq_^]]:DI69;9@HB:9CFBD?@I@H=ACBECBCGEEHHBG<RJLLV[O@B?IdrqxEk}~uwwjk]O6<Uyuwupcg{|szŠ|}wgIWZX[WTO?:?;;4>=BD;@?DA?C>EE;CAA<BAC?CBHEA@HNDFGGCKKBP`mfebe|{²²·»È©Š_W]OB]vwry{uv~wynqmtrcikqwvux{iidJ:;65?184>:73>@A>=C@B>D@DEA@JD9CEHCEEVYHDR~sSFi`Žµž¹©¶€tgq`Kalqxfptqq{~~y¥§¢¬«©£¡£¡³°€£¢°ŠijcE<4C65E@[yFEB9?BC?HDB>@D=@E@LDCEDRYGINK=Q;<N|y ³¿¶º~µ¶
+ull{©š¥©Š§«¬©°­ŽžÁž^_PUlzw¢ ¡­®¢_gdcNR[cmv®\E898D?AE?FDDIDCAHBFY`KY^YNXQKQrzlfbgr±ÌÉ¯°© ¬««°¬ª¯µµ€¬Á§«©»­xZLHPRYeYax¢ ¡Š¡°¬š®·Z_OIGyz{¡©ŽµrlO/?AHAAA@ADDCEDCSaaZJH\iPp^EDI>Jah®€Š¡¢ {t~©š¥
+ZNcf_¡§€wvz{¡ ªœŽ­®¡­±¯ª§|¢|¥œ­pTI?AcaSFDDLPP^GQigPDVKqpxcI96>AHHf
+wZAPsŠ«®m[dcg«­«±²¶€šuipz ­©­ž°yjYBnz|qj|lkz~v
+
+®©šŠV?@Iw|bXC@FHKOHGF@KFEB[7>1L}¢¡£§kTuš³¶Žž³ž·¯¯«svok£biuat|«¡}xsmpjlvxuiTi[OEDHDE>>8@MRR`XPFFE<>>A=EQ~yg^il§­£²¥}e{¢¡ š €£¢¢u~
+ª §·²€¬±§ª§}xa[Zfchp]UcgztWOPL3:DINE:GO\o{xz]l{_`hYbLPGm£š
+z||z{u
+w£zzyzv§cq|¡°Äž©j`_^^_`fdhai
+yU@DYhtt¶~€ŠžÅ¹°»µ¥§=[hf`M5:243z¬²¯{^e
+Š¥¢¥¡£¢}q{§}r^T]SYZRcfXfl €Ž€º¹²ÁÂŸ¥­ªºÅ³¿ÂŒŒ± Š¹6@AC5/639),S²°¥Š¢~bwŠ©©
+q{g\fkv¢¥¥€Š£€ §§¬ze`OEDGMNOVZ[bov~~£®­©®¯€±­  ¥€¥¯Ž¶Á± ¯*#127OUiIL]UU¡ÆÉÆœÃ³{zWX^fgy£¬¬·µº³¹µŽœ£€Š¬¥±³š°ª¯©¢Œ±š£ª£¡£ªŠstgXECBFHHIKOUXfl{©š§¥}© ¡§¡°ž¯³°+)1<zHFIl_gb\[OKyysxMeo|§¬±ªŽ·¹°Á»¶ŒŒŸŸ®ª§ ¥«¡¡
+{u~p^OEA@CCCFHJMRaquwuzm_iqfzŠ3@V¥¯«£aJN84MBKNLIG a¢£°£šµ¥¥­£±¯ª¢©Š²°°š·ž¡µ°¢utg_RGDBDCBCBBERjsvwqptimeJHG;JGFPSS[X=LJ¥¥o7J-3ECBO>EKds§³š»ºŽŽ£­¹­ŠÂÁŒºœÃ€­Šž¢€®}voa\QHHDECCDA@BWq¯«xnlmotmlh\IB4>:55346bZLl¡¹ž~h^\UTJHH`WKUfgf{¢£§Š§€¡¡Žœ±»ÀœªªÃµ¥
+{ytaOKJCEDDECBEbw³ÉÄ©{wrqpmkjqokplibWC;8=739:gŠ¢€¿ÌÎÍÇÌÕÖÊÃ¿¶¥§°µžumcYIQEJQrtr§±°w ¯Œž€ÀŽ¹¢«Â¿³Ž³¢¡šª
+[{{jQJOQECDDCBAAG^ex¡Ž³§cccb`afgfiehgihhYI?=;88;} «¯œÂËËÎÆÊÉÕØÖÓ×ÚÕÒÛâÑÆÉŒŠ{xu`p€®Ž¿€¬Ž°s¡°£¬¬\go~gpyqngZU[NEJEEECA?AGRiz¡ec`^^`a_\`gfghidie^M<9834f²œµœÆÄ·~pk©ÉÂ€¹ÄÄ×ÓÔœŸ±²­ž²¬ª¬Ž»°º³µŽ³©°©{]»šup·€oi
+agzj{
+qqvtdUIKGEEEDBACJai¡©š~Zfc``_][[YXajiomifWM?4781.&,.#"(<+An{£Ç¶tn¯O"6EH2WMp..*/)*')%%(
+#"$'((&%%'"+ "
+
+ 
+
+
+
+
+
+
+
+
+
+ 
+
+  
+'2,095-7610-*,)&**(*-/.*/-36;BCN\U<**$+)+% ;'2^vº¶mZ·aO<&!*C@b&,(&)$&"*&%'
+""$')(&%%%!)!
+
+
+
+
+
+
+
+
+
+!
+
+
+!"
+!
+
+*3-/86,671.*)(''()'(,/.-1,15AHFKYU=,'"*+F>!9*1We¹ÁxicXŠc%O3! %45N)0,(*"$$(%$$  "%'*)'&'$ ( !
+
+
+
+
+
+
+
+
+
+
+
+ 
+!%%%$!
+
+
++5/272)341+&'%%'')**,/004.02BKJN]Y?.'%/4UR(828WOx¯ŽuTemXY @#)  *
+16++),)'')(%#"!
+#%()((((&"'!"
+
+ 
+
+
+
+
+
+
+
+
+
+
+  '()'$
+
+)2.00-'/0-(%&"%&&,2/(---4//.;DDIZU;./.23AJ'65/KB_[_ejU]>865@34<6;;91.((-/0+,'%$""
+$&(((()*&#$ 
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+!
+!
+'?O4' 
+#+()++(-+*&%$#&&'040-223><<8??=APN93<4+('8'3.)C>JVQGOQLJ=7A6;:5432370+%##%"&&##$#"$&'('()*'$"
+!
+
+
+
+
+
+
+
+
+
+
+
+!"
+$UtA)! !+(')+*-((%%"$''*01-+/.1=>>;F?=@KJ84:4)-)6/0-.99?;69:<3577::6/0(#())%&$#&!"!$%'%"!"%'())*+'%! 
+    
+
+
+
+
+
+
+
+"
+ #B[5' !
+".+)((()&(%$#%$&+--,00.2=;>?A9<?EE2*/24=984124-3</*/214+9/')($$%$"#$
+#
+$&"*(&+,+("##$')*))*%$ 
+
+
+   
+
+
+
+
+
+
+
+
+
+)&0-& !
+!.+&''&('*$%%$"&++).41-3<59?A8==BE4)-,,,,,--,+,.,'###
+$
+%!#" $%""!
+ !"$'+/2..01/,'##$')*)))%"  
+
+    
+
+
+
+
+
+
+
+
+
+
+
+ 
+$(#$ %#'&$%%%%&$')%%09745422235609<9=9,-&'%&%&%$$"#&$"!"!!
+$!    
+
+
+"&+.0./111.*("$(*+***'!
+
+
+   
+
+
+
+
+
+
+
+
+
+
+ !!
+#" %#(%$%%$%'%&'$%1>B>9986445516614.&+"!!     !
+  !
+"
+$
+ 
+
+
+
+ 
+
+
+!(-12.//020., #'**)('("
+
+
+
+   
+
+
+
+
+
+ 
+
+
+
+
+
+
+#  %#'&#$%%&('&&%&0AIB=>><;999<<81/,'1!  
+
+! 
+
+
+ 
+! 
+
+
+ 
+
+
+!
+
+
+")/23../121/-!%(*+*('&!
+
+
+   
+
+
+
+
+
+
+
+
+
+ 
+ ! $("!'%$&$$&%%'&'(('.>E>:::::999CB;.++*1 
+  
+
+
+
+
+
+
+"
+!
+
+
+
+ 
+
+ 
+ 
+
+
+!&+/1/01210.-%(+,,+)&!   !!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!"&11()/)"%$%&%#$$')*'+<D>99889:::CC<,'++.
+
+
+
+
+
+
+
+
+
+ 
+
+
+ 
+ 
+
+
+ 
+
+
+
+ #&*,./010.-+#%&&&&$"
+
+   !""!
+
+
+
+
+
+
+
+
+
+
+
+
+
+ !'55.05-$('()'$%%(,,'*9CA:8778998?@;,)../
+
+
+
+
+
+
+
+
+ 
+ 
+!
+  
+
+   "$&)*++*)'&! 
+
+ 
+ 
+"##" 
+
+
+
+
+
+
+
+
+
+
+
+
+
+  $11,060'-+-/+(())/-')18:0/--/000242('-..
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+ 
+ 
+
+ 
+
+
+
+
+
+
+ "##$$$##!
+
+ 
+
+
+
+
+#$$# 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (1-(.2.*1/00,)*+*1.&&)+.&&&')+,,**+&'-/0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   
+!
+ " 
+
+
+ !
+!
+!
+##&% 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!(:,&41,,0..-*+/01.+(%$&'&'('--..--'&,)/0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+
+
+
+
+
+
+
+ !!
+
+
+  ! !
+  ## 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'9.'0,'(+)**)+-,.-,+)('&'')+/01//0,+0+00
+
+
+
+
+
+
+
+   
+
+
+
+ "!
+
+
+
+
+
+
+
+
+
+
+
+!#"$$!
+
+
+
+
+
+
+
+
+
+
+
+
+
+  %4-&*&$%&%'&'+*$+++-,+(%'&',-..,-.,,2-/.
+
+
+
+
+
+
+
+
+
+  
+
+
+
+
+  !
+
+ #!
+
+
+
+
+
+ 
+!"  
+
+
+
+
+
+
+
+
+
+
+!""*3+%%"#$""$#%+( ()+--+(&&$%*((''&&'(0.-+
+
+
+
+      
+
+
+!
+" 
+!#
+
+! "#
+! "# ""
+
+
+
+
+
+
+
+
+
+
+
+!$&-/*&%$$!!!##&,+"*+,-+*(''$%)(%&)%"$&00-+ 
+
+
+
+
+
+
+
+
+
+
+
+
+""
+
+ 
+
+
+
+
+
+
+
+""+&!
+""! !
+ 
+
+
+
+
+
+
+
+
+
+
+ $%&%'('(("%&''+23--./.+))('%')/)+1.*,,650.          
+
+
+
+
+
+
+
+
+
+
+
+
+ !"!
+ "$$(164,'4H<4,('$" 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ## 
+&+),-),++,/6:6//00-*'%&$'(8/19;7:8?<53            
+
+
+ 
+
+
+
+
+
+
+
+
+
+ !
+ $+.+*-*;?44>:+9^S]IJ<781,*%!
+
+ 
+
+
+
+
+
+ "$!"(.+.0-.---06:90011/,'$&$()@46>D@C@EA87! !!!  
+ 
+ 
+ " !!!
+
+
+   !
+#
+
+
+
+,/,015?QQC6/636GUsxcTEELA4/-,!
+
+ !"#%')#"%"'$(+0.,.1..,.5881//11+%%&$$*D78=B@AA@@22! !! !"! 
+!
+ 
+!" !!! !!
+
+
+
+!#*41.3>IVbupN?:'--LZ`\H<<7BYU6,*+"
+ 
+
+"$%(*&+.'*+)-,.)(,30--,1671./21*$#&%%.@><:@?AA?>00!!!"""""!"!# " !#$!" 
+ 
+"!  
+
+
+#
+$(.51-.7GOLEEQgl`W1-4k_D7<.+,%CkgL/(,
+ 
+ """%()&03(+/*+-/+++30--,/481./34-&$$%#1=E@8<=AA@@21"#""#"!!"#!# "!#"$""  !!    " &+43637NNKF@5,.-,^ml8
+"(`T7A30)##'O|mF.-%
+
+ ##"()%"/0"$0),8.+,+0,+,,/460,.33.(%#&#0>F@8:;?@?@20"#"!$# !##!#!$$'! "#!#"
+
+ "#%')156//06`dcP:1*'02*)Ys,%
+'cAB3# $%)!-tzX?'.!
+
+"&,*% ,.#3.7J*#)+,&&*.1341+,10,(&%)$,AC=;<;<<<>/,!#! $#!#"#!" #$'"$"## "! "#&+38=A:532TfeW?1/&%27&7d4*
+"X>WA $$' & ngN,0"
+ $.*$ *-#&0*2H("()*&(,03533,-1.*(&$($)DA?@=;<;<>/+!$! %$ #!!""$'(%$" "!&'''(/:B=B-,,Ce`U7:;+!$$,'(P(3.A>a)
+   -`u];)'   !.($'+$&*%$5+')(,,.003532+-0,((%$%$)ABB?<<=<=?0-#&" %$"$&%'%'&('(%$"!$$(+.--17<5;+&1`SlH>beB'
+"+'E$?86C]
+%($$'anbC"/
+!$/'# #($''( (-&))-/32/132.'*/)&'$&%%+<AB9<=>=<>/+!
+$,606C<71(&#&#" !)**.1210052-/';neBIZ !'
+%+6"J?)GS7#%#!%&lqeQ(0
+
+
+#"+$
+ #""'&%!$(&&$'0-'(+,,*#*+%&'&$%)+96<9596<69.*
+   :gK>CEC2%) "!!!$,0+,--041/.&,(>lM;tzN!
+
+'.'0'CF!?=+%
+$+$7xmc/2
+
+
+#%($!$$""$!! #$')$ '&!"$###&($$'%''&'%0*.*'*(.+1)'
+
+
+"!5lG8:9:0%%"#! !+1///22.,-*+,%Agwb4MF( '22,#U:
+"9?91$%68#Dtj/.
+"''"$)&##" !%& &.##&"
+
+!!" *)#($&''%$,')$&(%)'-)(
+
+
+  $@2.1(*,'%$%" 
++45=@?7--/*()#Aopx
+w948$
+%)7<+4-U*
+
+!3=6231(<kp_++"!#"$&!&+&%&#%$-0#%0&&'# !#$%#+* #)%%''&&/,/,./+.,0-+
+
+
+
+
+ #%,&*$%%#&"$! !".;7BBA:10,+$'!7r~zV396.$0:*0 5"!" );>4,:Gk|~oM)*#!%""& $*&'(%'%06'&/+"#&('%$#%%'""*)$&(')0/10//,//2/-
+
+
+"'$("(#%$!$!#  ! *6=8/9=1-,**(8i
+tD37FD864/7$!!!-DL]rwjza8%'
+"##'"%)''*((%-6+$-.$#',+('&(#(&#,-$&(').-../-,/340-
+
+  
+"%##*#%&"! #
+ )F7&19/./'++$8f}qZ@<:9A4(>! 
+
+
+!
+!-;[}ptkVir@+(%!
+!%'))+-,*+,*'*0.',0+')//,,++',)&/.%$*'*+*+,0--0661,
+ 
+
+  %  )%#
+
+
+!
+!"B>*%()/),!*('`o
+vy}uj]Z2&7.#%%!"
+
+
+#6MOZWSL?2(.*($%)+-0131.-/*)&-/-/4.'+43/-+**.)'0.&$*'*)(().**.561+
+
+
+ "0/*)" %
+
+
+ 
+.B=#
+)+,)+*$
+J^i~me{|vjK+3."*'&& %$%($(/3;>=81.(-/+(+,+0144101/****.(&2/&(301+-)).''/**$'))'''(**)-33-*
+
+ !%84&$# 
+
+
+
+
+
+ 2:'2I5&)2".%2VbhbT_qkY?//70&+,%&#,035-/,+./-)&)%*,*)+,+.12210.+(#"%)'%+,&&-++)+().%%.)'''(('&&%'''*//*(   
+
+ %60! "!
+
+
+
+
+"&+':H2$-+$.+*;KOMDOU>/251%%)*,&% $%'("$'!  
+
+#()+*)**+,11/20*("!$$"#!%%#"'$&'*'+.%%-*''%%&'('&'))*--*)
+ 
+
+
+#+%   
+
+
+
+
+
+
+
+
+%!
+!%'&**#0396;>1-30+!)+"&'*#!
+
+
+
+
+"
+
+$++,,)((,,30-20)(  %$!!!!$%!""&)'),'',)'$$#%&('&'*))**)*
+
+
+
+$(# "
+
+
+
+
+
+
+
+! !
+$)#%),%()/54.+*'!&)%$(&&$%$##!! 
+
+
+ &$&('((&&)/.30-0-'('!!!!%#!+-$#
+!$%%%''')&&$$$$%%%$&(&$'(')
+
+
+
+$*&!!  
+
+
+   !$ "&#*"' '.&,+*'++! !$
+!" &(!!"#$#"!  
+
+ &%$%%'(&(-4/1.,-+')+#
+
+!$+99*&!!"#%#&))%$$$$%&&&&'()&$')()
+
+
+
+!! "(&!!
+
+
+  !!"$ ! "#!'$
+#(&"&+)/.#!$#%!$!" $%$$$##" 
+
+
+ $$$%')+,,152.*+,)'(/' 
+
+
+%8C@,(%$%&((())&%##$&''(((+,*(+-,*
+
+
+
+!"!&%" !
+
+
+ !""%!'!"!
+%"
+ !(&"!&#)8=2+-4$$
+  $# "!#%%%"$  "#$$((*./0/114,*-,)''5*
+&;E@+''&)))+(''%%"#$%&&&&&+,*)-/,)
+
+ #"!!'%#
+
+$
+ 
+!$&"#" !$%
+$#(%#(!)(0@HE>>#
+
+! "! 
+"$&%$&# %$&'*-.-/1//-$'1&"70*#$+''<G=,-&/,--*)*'%$"#(%'%((+*,*(-0.,!$$"'%!
+! !
+
+!"#"#$$#"  &!&'"# 
++?JMNNJ"
+  
+
+
+!%&&%$
+!
+
+"$%()(),,*)&#&)(.=&&%(.,)7A7)-&,(*)('(%$%#%$(('*)),+),/01
+
+!$# 
+&%!  ! " 
+
+"#"
+ !
+
+
+
+&#'+#$% %:PY\WM'
+
+
+
+
+
+
+ &)(%#
+ 
+
+
+"!"#&)+*.')*'0:8&&&%)++0<1',&'"$#"#$!%'& %)-+&*'*..,-049 
+
+"%$"&& $ # 
+ !!!"## "&
+%).* "&*':NRSXY-!
+
+!
+
+
+ %('&%
+ 
+
+
+
+ 
+
+!&+..5+,..;=)*&%#%**+6.(+%% !
+!"!#&'*+662-***./--17>!
+ $()'%(! 
+%
+ 
+
+
+
+
+
+!%(*($!")57%
+"'()<NLOVV5,&'%!
+
+
+!!%'''
+
+
+
+
+
+
+ "&,//1)&(0=6("$&(,*(/*%($%"  !%%$&&)(82,-"'),,+-06>
+
+
+#'))
+%(#"#!$
+!  ! 
+&%#%,1.&'+97!%+)%3GLPOF:31/-)%!"
+#'$!$
+
+
+
+"$(-0/+&!$-3,
+& #&*-+**%$#"#!
+!"'*--+./92/6(/,,+*,.5=
+
+
+ #%&$+('+((#"  "  ##(-3<>2$ $/+$)+.8>:BIG7521./.+,"
+ $$ 
+
+
+
+
+
+
+#')-00*%$),*% $!!!%)('*"!#"
+"&-7731830/:-20.+)*,1:
+
+
+
+ ""!%/..50.-&  
+$ &()-1+ 
+"*&
+#(&<K?4@I=3211034.-(%%"
+
+
+ %'*-//+$'0/(" " $(##' 
+"# 
+!$%.;>57B012=342/*'')/8     !"!"+4714.50* !"$&$!!#"
+
+  
+
+
+
+*9;8;=:<788535332243.&'%
+
+ 
+
+&'!(/*.').($ !!  "#"&$!$$ ! !!!#.<?7-5;A(1464.(%&(.4&&'&$$$&($+:GF=6129930-(+(++,# 
+
+
+
+ 
+!)222:?:721/027=?C@CEB;4-%
+
+!!#'$!-5.(%(*%! "  !"!"#!&%,'! 
+ #"!$,8;3,*0A21/53-'%%',1***(&&(($+'5MRGC36<B@@;00//**&$   
+
+
+#,.(%099:>=>BBCDEHMJHNK@73*%!
+$!!/:4'##')'%%(')(''('+,<0!%
+#"!!#+781(),6472/3-(%$%*.***'%&*+*2&8]jbL=4/:?@;86:86031/()(##'(,5866:?@@LKKMLKKMOQOHHRMCA;9643-##!"" '.,(%'05../.,..--.,.2@0
+"
+    ")361(.-)/85,0,(%$%(,*+*'%',/-'%6XpnaOOA;3113:<=F??8>>>@=>CCIMOOLJHEE@CGKLJLPOKRKEOTODCB?:635+
+!#).$$/=>/5<;99:99849?C4$%%#  !!%.1./.*&,..--+'%%%(*)**&#&+.-).2VZI_mVFOBBA1389B?DBGEHJHJLHKHGFEECCBADHKLLMNOSPIMG<HFFIJGJPT?)
+!
+
+$ 
+.@A-7;8679:9508A;-"!$
+!!##$*0/1/+()'&(+*((()*+$(($!#(*('*2]@*BvlYVR>83443:CJKMMOLNOIH@?CHJJGEAA?=?BEH>GAATL3EYNNPQ\O+."
+
+!%!+>?,66:779:9735C;-'%'$%%('%*1354.(#%&$)*+,,-..$&# "')#%=Z6"Fe|iWMH;11.<=HLPOPOQRMMNJGF?;;9:<?AFMON^[]^hhRMQIMEAYM
+
+
+
+#% .?9'85856777740?:,**(**+-*&)03=6,(!%''')+-.///
+
+ ! %''"+CX-)2&!4CUrmSD92*2,.>EGBDKGEG<?8@JLH^ORJNXfhda`afa]`\KJOGC]I
+#
+
+,A8(7,1-01,.1.1@8182543330('-2A;0(&''&%(+-/110
+ 
+
+%*."(L_348. 
+(J^nXC?@6&$.7<:>><AAAXT]lkjqj]UY\[acjgssabqSRcbhN!
+
+ 
+
+
+&37&,.(&()&&'%1=99C<?AB@@?;9=@E<1*((''%()--0//" " &-214?QJ$ .2-.""+Fofii]O8(9GMOLHLCC@>W]drkjbhdZQX[VKIHC<Kpc}
+Š\
+
+!")/-'(%&%$$"! 097;E;:<:89:6357?6,&%%&&')(+*.,,&##" !'+/962[yS''.4*$<XiorqV=8IHMQLB+9ukgogmd^QMQMGOXe]XNLdw
+I<C3(
+
+**3#,'**'&&&$&+24:E=::9:<:302472+%$&'&&&''*+,*%$# "&&/,@I;Tqe6+$$00.!0=QfwjUU]TQRHA7%)3nVKZZVNFGJSLZT50##/Hdu e'jlzT-='
+
+*6&+
++'(&%'((+&-/2?=;:;;;6223111,&$&&#&%)%,)-*##"
+
+#&"$.3H6-D`aR;")"(1,"
+*<YbQILIML>58&(.sYCPFDAIYPFDww0&(#+FYz¥­Ggxds<<FQ
+GUTG) %&'''''&$()(49;;<8412550//-((*)&+*.*.+.+$$"
+"#"%))?5%1GNWX?90%"1*&#$;^eQMZhmcJ7'!/iVPaVL?EVRLCjh6/-'%AZt©«7dswe©B/e·SOkpb+ '$&'%%&#"#$$08<>91,,,..+3/+.00/.-/00/.,,%$"!
+ !#2I?%5CH=KWWM94(,/--4`to|xifR7)
+$9EeomXFHLPQ2-,+1)2.7Ibrxar<Hyorki=,9dGfsv, '"%($&)&$#$",0237/,-)%'*4+'+.+)*(.,2+0+,#"" 
+  !
+)W>-,QKD>?O\HC6+&)/4]~jgldnnG:!*:#Rila`PPV7"*R}~h=3;@LP4?7J}|suf*JF`aly<%%$(&#),$$(&
+$'(%(&&***+00/-/10/2-+28-.(/"""  !!(QM;%DQNJCEOE>D;*!&3Na[Z^hngM1&+.TY Phfmj_YO556oxB..>BQNJ2Ks$/eakqwG+./0/-13/24,
+ "$#% #$310.-230/0021.2;662/!!!  !"
+
++K\<"GQRRPIKD8<71-&3NOKRXdc[WO`JA7X4Ekbaph\L=.:o|C-.0(-65/>s{xt,&dtxZ+:;989:9:??4!  """ % <=@?5:;73102720;G<77!!""!"$!!KWC!LVSRRBBIA:-6F*-Q@8LQJR_hsj`99-BqaJW]lmP8!8iv`:( 
+
+"%)-%>l}~gS4Yxys1896682/3BA6%$##""#' ELKIJKKKKIFHCC@?SE:@"""#""$!#
+>N0(HRWVQ::KKG=4R%/J*'?9':^pqk]X[I!Gjn]fzvl;12:<20+"
+$'%*'&EdVZC \qfl
+z6:=99>5/4?=3$&%$!""!HTD7KMKHJLLKJIWKTRIJ    !
+
+
+99&*=CNPJ;<B==K0N!7C"0;,!&BgkZgi|~N$NsssmZeA0-/2+!%#& %  AnkgkjyD
+dyfbvx~<6658<4,0A>3$(&%"#" 
+BQ;-JRODCJNLA/ORIFGE
+
+
+
+
+
+
+!1@188>DA@;<961C2H"5?)780-%*Mefnqir~T(VtoQ<8bJ)--%&)(%'%$
+Cxnqist7
+ayhbsxz4.//26.)+C?4%'%%"##%!?O<2ENMGFKOQI3QZLDEB
+
+
+ 
+
+$=FECJHGDHG@9A;77@"%8&#(,(+*-Fikenrz}P(?MM9]l@&/.#++,*''#%%
+Irrurqw<(itbku.+,,.0*&&A>3%&$#"$!&$ET@1DDCEFCCK?;MOJII@    !   $
+);HJISRONNQMFMM<<*&+'""
+6-(41)BfrsytupIEqzc-+&)0+,/+191,$ T|rvmrp?8gmmszb/++*((''%><4"' #$ $
+CSA6<BB@EGCA77MSPMF@"""!""##!#7BGMOONLNNOMFGNF93$1"'#&(%)/-!,B{txv``lR[w}z|0'/-+(3;6BMH93-asmjwo@Dfnwop~[#*(&&((():91 $!! $AO=32778<<9;97KOLHD?'''''('''%=MJKLRMLPPONJHNJB0.0#$$% !'62)2PnwafniWltx}?&0*+/:KKYePB;3c{lhpzmHLdqwnuF%,+))**,+64-
+
+
+
+
+ @N=10456954784HMHCB>++++++*)-,ANLGEPMPQMNLGKPKF*91&#  "0`gD4bwtu_7i
+usR)0)38B^WqqYLD?fwhjtphVPkrom=-,++,,+))31+
+
+
+
+
+
+;L>-38:8:8473-BLHA@;..---....;IJLMA@LQOLPH@KSI8,86&"-,
+
+"b{\7dnpvzw%Fnya'2.18Gbbs{TJX?kyzypsi[jotq|3)++,..,+*..)
+
+ 
+
+3E;(4==:;<752.BLJB>6665457773@JGPN<6JNMLRJAOS=(+54%$+5(
+*zQC|suq
+B>~}jp'-0+;Tdlep\\OP_inqwk[xyuo$+%&%&'(()'&$
+
+
+
+
+
+
+.>8(3<>;>?;764AII@<5<=>=>>;9408AKF69HIJLOLIMC-$)40' '.*
+H|yq:x}r~Y9vqnmo.)01Ebnim]i/ 7O_ishbbXko?
+
+ !  !#$"!#%$#""! !")53(1786:;7655<@B:839<??>=71-
+$5?:4<HBEGEIHE2'$/15(&#! 4y|F\xtsq5egdU/%,6HashsgjbtB$/IWPY]^fC
+*&.)'&'&&'(%%)0/-+**)+*&)(")/..32.0,/5693206:<=6/,%!#!%-04=DJCBHD<90%$+21'!#'(5`zzw|~FV|xsxoJZnY=-*-,<Uorfux_eaB ;FKWM7Rw? ("-+---+,-/0..034212//./.,++&'''((('*(-(/'*)'%&(&#&%!#  "$*47DDFH@744(#)74(#"))+Oht~gJIummqqbZU:.,.15D\vyjytVVSF"5GRXD4b
+a+644/00124577888998785554333321222221511+2/68$
+#!  # 
+
+
+"('17AC5/33%)64&&&*):Ylo}u}pcnXqjlilmWKDM=94AQdu|qrhVOAQ 1EQT@/^}i09<8589<>?@AAAA@?>>>=<;:::999<;:99::<;;=9@=@A+#
+$"
+
+""
+!#%$%5:*(32" +41''$%,=Zw~zmcbsnco^ggP=M]VMD?O[kurf`aS@U'7FHQM:UxqX==?ACBCEEEDDDBCB@?AA????>>>>>>>>??@@@?BFFJEDB%'$)0,"
+   !!! &%",0$&53"$//,**/7;BaqWVXnfdga`RDUhb_XY`ftwh\ZF?hO2<@<HP;Hi_JKHEHKHIHFDBABABBA@ABAAAABBABB@?@ABBBA=@B@B@?>%&",98*
+#
+
+  
+$(&)*$(75$$*()+-6EBGpk_U{zyq_[]Sl{yplpnt
+~}aWP<7DCACABJG2;MEDHKIFGHHFEBA@AAABBABCBCCCCCCCC@@AABB@@ACB?AAAB)$02,(%
+
+ 
+
+ 
+((,,"&41&"&-0.1GWOYw}|xdvt\p}{z{yq`U]YI:2>DCAGJ<-6C>DDGFDCFFECA@AAB@ABBCDFEEEEDDBBBBAAAAAB>?=<>>=>" (/)(-% "
+"""%'10 //)#'8;39Q\^p~uvzyi
+vwcbhoYH;0?CIDILE?HLLFGC@@ABCCBA@@AC@ADDEGJHHHGFEDCCCCBBCEEDEB@BDBD$,2;:/*+"''! 
+"#%%*1(
++0(1CF5+;Vkkl{v{
+
+vxnXYxZ;-6ADA=BBEGIIHGJGBCCBBCBA@ACECBBEGKLMLKIHHFEDADDAJEIKJLLQMLM,25992*#)-"
+!
+
+($
+,-&,/3JN4)Gdlad{
+{~vpSih^OnY5+6=?DCFGGADABBEC@BABBCBBBDGEDDEFHLNPOMKJIIHBDCEFGNJQQSRVSSS'))..*($&+&!$ "("
+'2*.6EQE*
+.MljNSj}}itaaEsLvnLdc^KZfdK8,4@>CGGCGAF@A@B@@C@@BCCDEGIGGGGHJNQPPOMLJJJEGEGHIRNOQTSXXZZ" '&#*2$+1,)"
+"$ "!&-'1CSJ5)
+)RtoKVj~||wknhDsF^BuZV[zbXUCKH?964'*8HIOD4;<FGFBBA@CA@BEEEFHIIHGFHKOROOOOMKIIIGIJHMLNQTVSXXZZ!
+%"(06IYLE1&##"&"#,.9SR7)."C`^Hfu~w~}
+bK\UHq;bQloc^]cUCC=C?;54)+8BJG2"'(<NPIFECDDADGGGIJKLJHHJLNNNMNONLJKKFKMNKLMRUXV[[^_! !#
+
+!
+9UonoQ3((&$ %7BFPK2"&""-?<:p}qfz
+bCKPh
+onbZZ\ULF971556731(0=JX@""&
+/O\WNKGEGDGIGGKNQPOOPQQOLPOOPPNMNNKIKRFWRRTYY][^`$#"# !"&Hdw
+k;+*&!%/@KF:G4
+$+44<xlaq|}truw~`TJ><=738:0.0.--1-5EMbG @bfVPLIKJMOMLPTUUUVVWVSQVUTWWSONNPIMQM\WXX\[]VVY'#"% $ Lf{K6+#.9?E8:C*
+ 4;;Bx}jaivzz{~qf]]G]N==81.3/100473,%('.;Ef`:
+!"-_kYSQNPPTWVTVXYVVVVWWVV[Z[^]VNKIQOYQ]XUWW\^`XX\%
+%  Ba~~J81$
+9K><FB%
+#!
+#376<if`^bdfwpsc`SOB>?7-,+,*,.,'+42*"
+
+#,-=^gW541
+NkbSPPQTWXWUUWYV]VVVUZWYZ_b_XRTUU`S^hadbW_`W\[j*$##%A]qusF+-"7OD<<%!#
+ ,<28cXYTPVVZQQIH@3-/0+$'-)-/,"
+!)! 
+(1/3NalR>4%BedPJNOSSSQRPSVSZZVSZXY]`a[XZXW]XW[\V`fa\a\[_W](%&"
+%#7IZSL,
+
+
+.<2(
+
+
+#-255[VUIMA<<31..)#$(*)$(264-& 
+ 
+ !
+
+*1-0ARkU=0$
+;afNELMPSTLLMSRYVV^ZTS\Xa`VU]]VT`X\RgZY``]VWYZg++)" 
+,--5+$ 
+!
+
+
+
+
+)/85IH@6>50+'#" 
+%  *+&$2,"
+
+#!
+!$$
+
+'.*.?NfR=0
+
+:\_JDKKHLRMMJPPORVUWY[Y_YV[\XZ\`ZVX]XN`_\][blac361$$!
+&
+ 
+"
+
+
+!"  ""
+
+
+"/./62..02-% 
+
+
+
+
+ 
+
+
+
+! !! 
+
+$+**>ShL5. 9RODDIKAFMLONPMSTjUQYZ_ZYTY[XWSZ\QV\\b[VhWaYXjZ/98')"!
+
+#!
+"
+!!"###((++1.-*)$
+
+
+
+
+
+
+
+
+
+!!
+!"
+ !%&)9Wj@!
+!"<IBADGKTGERTMNYhe[Z]VbSbcXTW]d]XWZgP[bddY^a]cZX+78),"
+
+$"
+!  
+
+"$%!
+!$')+)+)//-4/&$"    ! 
+
+
+
+
+
+
+ 
+
+
+
+
+
+#   '8Zh:
+-;?;>BDIOXUOIY\Z\Ze[S\YZXVS`bXYXoVcW[__[l_gabbcp285&+ 
+"#"(.
+!
+ $6JG8)(16697656;702/')$$"$!"
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+)9WW)
+ (2467;>BHFOT_STVd_XOfa\[U]b[[\]d^Zal\eY`fT^_Tc^j`*25*+
+!*
+'1/0/
+!%"$1MgdQ<2:7:4152253/.2.+(%$#!   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+$#$'+;B7
+!'
+!*:AEEGPHJUc``Vea[^R]`RSf^ehfbise_ff\T^hee[_arp&+1)'&7+%1;CG4 '
+ ?fttL(2)&'++))-,**,*)&$""    
+
+  
+
+
+ 
+
+
+ 
+$#
+% -(" 
+
+$%#/45@EBAHVVJU[Y^]]bfXW^uiSTndhl`sa_cMZb[h\ql]ssr"!(%");/ *AT\V(#%!
+)[vlW$%)'!'&%&)***))('&%#$$  ""!!  !
+ 
+
+
+"
+
+ $
+#,420,3<7;AKMBOUWSSUc_fV]q]Uc[m\bc__bXZhZdZYkye[i{wW_#
+!" &/& <SctH(
+$.Dnri8 %'##$%&&&%%''(''&'(!! ##!# "! !! !&'&!(%#$&20:1:=?B>CHBBJLQUQZXabVeVk^Uiula[`qf`\cbn[denme\tuQ]Rnj&
+ "! %$ 
+(Ypzm8&)5(6pqY>
+
+#$%"$&%##$"$&'&%$$%##""%$#&$(&"#&&&%'-&&.5,85:L=:GFRH;QYTKJXkdXUpqfgachfi_`pkscehhqklk[pjkb[[quhdj$!""!#%"
+"&DslRA656(lxcU%$+!#"$&%$#$%"#$$"!"$%&&&)''*),+(+..-,/6379@@BB>FQKPJSc\[@SeJVZghSW\torUrkefbl|vflulip|ejcikjge^``"  !!##!
+
+#
+1hehfL>56!Vusa ,
+#  ""!!"$"#####$%()*++)*/,//14445688:EA=BM[MEPQVQHqdqhTg~`Rmxrc\klji\oncsvbri^g]q|u`yindiw\dkdf"
+ #$!
+&(,^PtrJB:2 Hswi'
+(
+ #!!""!#%###$$%&&(*,--+-30039<99=9:=>KWU@Q`afJRa[ZgXgngszibg}vqcl{odol~bdovpgqqom}dfr   
+ ## $
+Z]i}TA21#:fpj-#(!"!
+
+ #!#$$&(%))(*,-//15=??>HI@>;EIJJI[hLOYjuQ`rtb©¢}
+k{|~ykbyalfidwvwyqssvirtx# !
+
+!
+#
+
+Hdh~H4+-
+6`Sg
+
+"!
+
+#
+ $& $&'$(),,)*,124;92<D>5HSYNEJca\LLbi`SXmmxhZzhjknl
+
+ov~fg{iovp^xyeu^pnnunuyv}
+  
+
+ # !"5cpq/
+ 9`]Q
+"%!#!#&*+(+.,-/03160588;?G>CYYCELhTPTex^FM\ic^dvok]anghz|vtsiopemnp{~huywdfv
+uzsum!# $$  
+"!
+3Waj)4LT/
+#%%%&(,,-2/-.//54847<?69CEMB>U[RLDXriWKb{~gSev\mbclfznwipzmw¡z|yhtzww|pmz}wllphyvqw
+#
+%"" #"
+ 
+1MXL
+
+"6.()#"','&2+2.8*/4:8:<ED=8GMGIFDVNOGAq_`YZgyX_eji\q
+mgb
+ydmw}sb{vltcwmxxw
+u}y|qrv~lt{
+ro"!$  "
+.FRC
+  
+"
+,,,+,.7/0(=>D2/A=A2BAB>DAFMBAYg^YGdcoXT`wh^xqtk]g`mgc}gzxwsŠ|usw~~x}vqtqyonmwyti~hE:'494("!! )30(!#
+
+*0+/',4-*266+4-=N:8EDK:?ESQTCCU^\RKffDJWe\Pm}j`c
+o\dlqygipqv uyxjz}v}xu£}}€wx
+}|?A3>@B7*+*(#
+"
+"-*#-/>3,0>=7:4NOD<-XKD>@NMBMaOZRS\dcKMPnxZ\y{o_bdXZO{odpxortuvx€­vš|t|uz}
+{~n€u|.&.21310261-,%+@I@@HC>B??;3+)++)++++++++/,,,,,-**+./--0000./1.-0110/279722210./40//0130)*054.)(*))++++++0/.+)''(*))(''''***++,---31)-2//1,+/.*.7602=<42./-*)*,,*+++++***/--..//--,./--//..-.0.-0.//0476258742//21110.00,-./-)(*,+***+++*'(*,--+*+*)''()***+,--../4.*-./22)+47>C@41,043/%$%&)+-/2,,,,,,,,.,,.-//-/---,-/.,-,-/.-0//02574/599652/./01/,.00....,+**-+**,--,./27::74/.,+**++)*+,-...6*)73*3:92235?C:63*,681'(()**,28/.----..-,,-,-.,-,--,-/.+,,-/..01100343138;;9534./10--/.--./0.+)-,+,-///--.1565322110-+**+,-....6*+<8-6>8741122011,2<;623.+*+,0421/-,+,,.,-.-./..-/0../.,-,-/.-032112567367996692121.--)-+*+,,-.+,,--...--,.035723453/,+-../0000.3014227/1156/,33=7.2;@=71+*-.,*21/-,,---,-.-/111122/./.-.--/.-/1222469;<5.1:<846321//.,.,***)*,,-./.--,,,,,,.020/132/--....//00%11(+1.*/1255/,07D;)'8A:320./.+(........-,-.-/223221...,-.--..-.0/013578@<43;@;45211//10/--.-*)*,-.///.-../.-,,-+,.11/./.--,-.01%'0+(/-$3441132.6<955:;2.373/,+*+,-..-,,/-./-/3330//---*,.-,..-/0/./13456BD:57995232/.00/-,--+,.-,-.010/,,-,+*)()),01/-..-,+,.02-2-)0.(0:/..2512687:?B@4%-44/*)*)*,--,,-*/0,/6610.--.---....---.../..//0003762271/24332//--//-/2..//..-,-+*++*('**+--,++-,+**,.0/43/01-+92-//00)/666:DF9(*/44.+,*)*+-.-++.31/8;.0-+,.//0////.../------...,,..,,/2./48:70.,,./.02....-,+**--*)*+*,**-,*)+++**+,-.493050&':;1+.1-#/41.2?IB2-.582--,,,,./.,++9=17?640,-134411110000000011111/-./0012-.2685/.-,.../0////.-,+*++*()*,-))++'&)))**+,,,6D71>2#.?=()95*$12.-/8B@5/.351-----.-,-00+9C84<;620245553323332121223321222233221//0//0.----,+,.//001111.,+,+)),+**++(()(())*+++0@88@/':D++:A
+--0//036/*+,./-,+,))-.+-16-0993223235554453224431333455321378741/1010-,..)+,,**+../0123442451,*++*,,++,+('''''()*303E@&,C0#/;0*-*+1/*)/0$$*//--,+,()/43240.+.1/++125764445311332132224543.16:84103111//.+(+--+*-/.//012330;=2*,-))-.++-,(''&&&'()<42@=/7>!-=A) 2.15/&#+0''-10000.-/38<<;:,..-.--0356763355321222220..1344114994002001010.0231.,-///000000.670+..**--+*+*'''&&&&''8A2)2AC.$/>>1',:881+(,1.),../011-6?@@AA@40032/03667642245432112352//2699=98<<722..010266:;:61.--1000////0.,.01/-...,++*)''&&&&&&+:6$&57/)1:BA3*-26;9/*-0-%&+*(*,+3<=;<<881/34/.28;722/./233210010122237:;76667621/01/142777532220000..-..,,.231.0...+(),(''&&&&&',42(*2/7105986415;9,$(/,(),*'*-.*/9;52462255/.15740/...3321/../+.0000357200254.10121110222222221110/...02320///../.+)*.)(('&&&&7*-84-049,'*.;B<3134,&*/---/1/.0-.16:;9677784/-.2354245212331//.,021123386645882/0//10..-../11221110////03541/01-.//,*,0**('&&&&B;--77367/1/)6B<50/.**.101/2:930(3515>?99:;840/0-08:8<;5246752/..11//12158;85762.0.-//-0---/011111100///11111110-...,+-0+*)'&&&&6A8)-432=;@9(.;8443.(*/11203::41+.,)-23568962245+.9:9>;5568862/.22/--01136:97860.1/.0.-0.../0111100///..210000/..--,++,-+*('&%&&/5:80,/2<;<5(+68343.+.0,/002566784+',.-/3431//14/2:66=9545543111320//011779;>A>7.0000.,,---./01100////..0010/.//.-+*)))))('&%%%%3.1:9.,331/-+-3820/./21+0./1137:;=5-240/2110/.-.25:23;5444310002//1430//6459=BB>10010/.+,,,,-.010/////.../00//01,+*('&&&''&%%$%%23*)53+0/.,.21040011./005//10144396363.0211220./047-07017752/.-./17<;41222478=BC6112133.,,,,,-/00/////..0/..010.++*'%$$%&%%%$$$$00,')01-00.12*)4//00..280.240/1/-/52/0.154222111.3202201768;:2/2+17<>=:6558635@GA4032340,+,--.0/10//00/.0///.///,+)('''''''&%$##-.1430/1/0./1*+765541./2//01010,1/1221/16411110/02113531225:9202/136<BA=67;6.1<AG:3530/-,,.//01000////.......---)(('''((&&&&&$#"0+0;=2,//0.//*,755552/./240,/20*4/,1532142//010.111103301/36412321127<==;5570155E=52220,..032332//0/....---,+**)''&&&'((%%&&&%$#0*-9;2,.00///,,4-./11001591(+/-*10+1644/42.-/10.1132-/313012//232014425;@44<62/,9>8..43-//2543310000//..,+*)('''''&&&&&'%%&&&&%%*,044/.0///01.-0,,-/1123383)(+++.2/3544,651./21-10330251100/..//0012249>B>@F=:3/0>A6./110/14432110//00.-+*('&&&'''&&&&&&&&&&&&'',/10/0.+,,-/0/.-//./////.32-**+,.355554/884/.10-0/136972-0//11-+.0.*-5;;:?=?:@80+8DB3+.61/1432211/..//-**(&%$%&'&%%%%&&&&&&%&&''11/.//,'++,--/0///..-----.00-*,-.04458778:81.11.11104643/3.+22,,./-*+/2317//0;41.1=C8/152/242122.-,,,+)'&%$##$%&%$$%%%%%&&&&%&&&.///-+,--,,,+.21+,---.///,/3.,./.,12599=7:92/130474../0447-&03.1/.03/')059/1/53=4.4<964/1..10/01,+**)(&%#""!"#$%%$$$$$$$%%&&&%%$*+*..((-),-,,.00**+,-..////10-++)-.,1:<7:=;3/1213440-.23074,02.03031/,*28;9?E<58;5,06=872.03310.,,+)(&%$"""##$$$########%%%%%%%%+/.,.-*&)*+-/0.*,,,,,,,,---.-+))+.-,/6616;<502676760,-01148:94./-.355632274=HJD;::6--4::4//2311.+,,*'%$$""###$$$########$$$$$$$$,10.141/()+-,**,--,,++++,++,+)((++**-121/450-045564/,+,-13;A=54500/1144+'//><;A@?;=5.(034/-000/,+,.,(%$%###$####################-,-/1008/,*+*)+0++++*+++-,,,+*)*,+*)*.36-.-++/0./11/-,,+/039822374.0.17.()&4..:<<7<>6-241-+----*--.,)&$#$$$$############$$$$$$$$/,0340+390')-.,,**))**++-,,,++++,--,+-27//.--//-,.0/...-/0-35,,1+&#&%(41,/+.'-96.-10(,0-/,+,+,,*..-+)&#!$$###"""$$$$$$$$&&&&&&&&,,2488.-71+,.,(&**)))**+,+*++*+,)+,,+,/3.010--.0-...-.//-004-#0>-&!!!.39530*+2/)**.'*,-.,--,,,*/-,+)'$"##""""""$$$$$$$$&&&&&&&&)*0+.5/1000/,(&'++*****+***++++,))*+-/0/.000-,-/---,,,-.*,/0$&<?/(&"
+
+!*C10-2.,&
+
+&)*+/,,-/..,(,+*)('%$####""""$$$$$$$$&&&&&&&&322%#+/:110.-+**,++**++,***+,,,-/-*+/32.00///.-------,,,0,.0*;K1,+1/-)"&4-4(.//+"""
+)/2.+*,...*&'('&&$$$####""##%%%%%%%%&&&&&&&&49:1'',-3-/00.).--++**+++++,,,++---.0100/000..-.----..../2--.;I</2;524**/1?0$,62/'*
+,0B2++,-.,'#%%%%$$#####$####%%%%%%%%&&&&&&&&.8?:3560,3.23.1,.-,+++++,,,,--..--./11/.//0/.-,-----.....-*(1>BD(2DEA=-#+7C9-,=B;/3
+*6A6)*+,,)%!#"#"""#$##$$$$$%&&&&&&&&&&&&&&&&.4863672.11/21,..-,++++,,,,,-./0--./00/./00/..-----------,5+/BBG+4BIF@2 (DI6&&?KD=?!%=C=.,(%"!  $#"!"#%&$$#$%&&&&&&&&&&&&&&&&&&&2//0/04820-.1,)//.-,++++,,-.//00/.--..//.///..-.,,,,,,,,/)4'$?C:536<950"(DF4(':NOC>)*?@?0+%!
+
+ !#""""$%'$%$%&&''&&&&&&&&&&&&&&&&-)+../3728%02$0+10.,+*++,-.0000/0/----..,,+,,,,,,,,,,,,,-*2+ -88<402,()$&1530&"6A1*07>=?*&""###"!!!!"#$$&&&&''''&&&&&&&&''''''''()+**/3257-0/*0*-,+))*+,+,./0/.-.....--,+++++,,,--------.0141&(49454*##%),.03/ ').,7;>?;*%!"$%$$!!"###$$&'''''''''''''''''''''''---**0206+80+4,1.-+))*+-*+,...-,-....-,,,,+,,,,,--------1.'-93%#0.2-'%!%#-+%#/-+):974891+&""###$##$$%%$$'''''''''''''''''''''''',))+,-.-2#31,30:640,*)*++,-.///...--,,--,,++++++,-------+-,%,82')%%
+
+$ $+:3(#12',('*/-*&##%&$##$$$%%&%&&''(((((((((((((&&&&&&&&'&$&+,+,+$10+11<:83/,+++,-.////.-,---,,,,,,,++++*+**+)*+*(*(#+3/,
+!"!(.*-6E+
+&*.*,+(&&# %$"$%"##$%%%&&'''&&'''''((((((((&&&&&&&&&((),,+,&,.)(,03320.,,--,-/010//,,++,,,+,,,,****+++**++*(,)'('')3-,6C9*-2;>('+/.0.)$#$$""#'&%$"$$$%&&''''&&''''''''''''%%%%%%%%),,,-,,.)5-*,+10..---,+++,.010/.------,,,,+******+++*++**/,()'%%"%%,=7$%5L!*$"#//0/+'%%'$"&'%$""""##$%%%&&%&&&'(&&&&&&&&$$$$$$$$+.-,,++-+0(,-&,.++,..,**+,-...----------,,++****++++++,,--0*#*.&(*,+-/*$/d*$%"'&&&&%#!"#!&'%$"%""##$$$$%&%%%&''%%%%%%%%$$$$$$$$*--+,+)*,'',)&),((+/0.-,++++++++***+++++,,*****+,+,,+,,*,(-*"'-(#)+&),*+Y\!$' &''()'&')'#!#''$&$$######$$%%&&&&$$$$$$$$$$$$$$$$)-..//,+.(-+&+,,((+/1/-,,++*****))****++**)))))*+,,++,**)('''#")%'*%$&##%Kj?#&&$''%""&*=8$
+$%$$##""""""##$%%%%%$$$$$$$$########(-./2322000)(..-+*+/0-+****)))))))***+++**)))))*+,+++*)))(%&'$!$'' $*'*:EjT")
+$%((%$%''KR4"!##!!!!!!!!"#$$$%%%$$$$$$$$$$$$$$$$(,-,04686:3+-003+*+./-**)))))((((()))*****))***+-,++**))(%'$')&%'*)&(2__Nf@
+$!"##$'(#
+E^D+(#&$#"""""""""#$$$$%$$$$$$$$$$$$$$$$))(*--.2372.10.2-**-.+)()(((((((((()*++++*)*+,++-.)*.$!03#$%
+"#%'#*/-%$5[\7LZ/%"%#'"()'""674) '!$$"$#"$##"%"!$#########$$$$$$$$((()*('+02/-.,*-,)),-+)(''''(((((())*++,,*()+,++-.)*-)$*F!'%%$)&*'.,".>JU6FJ@$$#&(&*#,(( +31&
+&"%$%#!#"$"$%############$$$$$$$$))()*('*.,,-+))))'(*+*(('''(()))(()*+,,-,*()-.-+,-+*-.'#LG&
+&.(&$($'*&2@Jc5XM4+" (+'+.*,(.&)3%##%"###$ #%#"##!"$$$$$$$$########+)(),,,0,(*-)(*(''')*)(('''(()))))*+,--.,**,.0.-*,,+,1+
+E{4
+"5 '"!$#*,*5:9?UK7 (?@/$0-*/2+$$*+#!#!!!"%##&#!$$!"$$$$%%%%########+)')...1-'*,''*''''))(((%%%&&&&'())*+,----.00/.,+,-*+0-!6a$"*(""#$$*+%+))30'/1%*(++/,'.2*-,'-)"##"!%&$&#!%%##"""##$$%#####$$$+*(*.-+-0+,-((+&&'((('''&&&&&&&''(()*++,/0110.,)..,))--'&N
+')$!'%((&,-,%)%')(&*/(&.,-/21..00-(&"%'$$!$# !$$"#!!!"##$$#####$$$-,*+-+),200/+,-''((('''&'''''''(((()**++/000/-+).,+,,++,
+jy:!()$'&)&%..0$#& '&.+-0.(/(*/**)*+(--&$)'&%$#$#""!!!""###"""#####-,+*+))-122/,..()*+*)((('''''''(()))*+++..-...,*,,+0/+(,#adXj5!%*#*(#%&&&0%)&(-3--3++'**%'((&&('&$ &&#,4' %%#$#     !!!!""""###,**+,,,,+21-,./+---,++**(()(((((('')))()*)+,++,*+,*-0-(+#ByGbj#/*'&'*$.(&#$*.+.++.*')**((()$$('$%'1.+28'#!!$"#    !!!!!"""""**,-+)+.*/1/++.0/.-,+***''''''(()&&)(''*)(*+**+*+++-.+*,!Ue^ExV"&,&&$+*,***()*,0/-.,,.)&*,*)%"%*$'%<[P3/6*$#$%!         !!!!""""1,*-/../,,01,*-20.,*))))**))))**+''++((-+*+,*+-+-+,,((+.ZkmWLB+'''(-++*,,*)-....+)*((&''%*)&*6"#Mvi>'('$##!"           !!!!"3,(,/-,,/+/1.--./-+)((('())(((()-))/.)*0.,--+,-,.**)%',.%.ZvITt,-+(*)*,)*,+,.*(+,(&&%*&(.)((+0+(-481++"& "#
+!            !!!!.*)+*''+.+33-//--,+*++**()**))+--)*00**0-+,,*+-,.*++&),-$*{dyxFf^#&,%.$,/+(-+*+%'(('**&)((0-(%($,)/7>&,') "% 
+
+          !!!.*)+....,-:8.243,,-./0/.+-.---/1,),10**0,++,+,.-,,//-./.).m{i\FtN$**&/.-)+*'+*))(%))&+*&)++ )*)1?>ON6"&%#""
+
+            !!2,(+373-+,:8.356///01211/..-,--.-+-0.)*/.,--,-/.,./12001-C}obCZs.*().+/(+,&,+)**(+)$+-,,5<'6H;,.+<D=-+#" 
+
+
+"          !!!1-)).1-'+(54,1232100110/530/..-,-+,/,((-/...,,-,,0/.10172M
+xt>rc
+0)&+/(+/()'')*-52$#+,*KhC8<4.51>;@QA)
+!#
+
+!!      !!!4),/'%("(*0/,.,,10/00/..5575/0432-+./,+-12+--.*/-21024883Fš dIyR
+)5(',((!#((,+%*83#&*%-+?VP<;36,;OQUY:"%&#"!"!     !!!0,02-/1,+),+,/-*/../0110/6:636723/-/0/./*20)-1*1/3356330+;Y}mGTF2*(*$$$''+%*,$.3/E;%/"
+4JI>1-!,EMKPL3"$!!#" 
+   !!!*-1118;71,-.26.&/.-.010.550+/5501.+-/0//0/..0,**/3572-/-/,!--)UynBir4)((&)26(,&-%<47`B3-/-"<SV;;2.8<7EJ<(
+
+ 
+#" 
+
+     !!'-.-/21.+,20/2/,//....-+141+)(+3.,+*+-...1+)+'2+2127549:0,&(.+ix[@o-% +FM-('%$=UH>TL(*?8&3QfKTF4Qm\J@52+$$$#" 
+
+    !!(,-/34/-1,-,196/,./.,,+**142/**0//.,+,./161-4&%01.+055302(*+3* EG-Ow4
+)&$-IO.-*:IEMK=B6%73%6GIDD:;?CG\P7.2'
+
+!!!         10-.35574-+,39/",/1/,+)(+/.,0442001/,*+.8".,#*-002034/-*0(*+*+/0JE<&+aG!'+,2HK+/>;AI=CT=6B5',51;1-4((;IAEF</)+*"!!!             =81-,-/036<944.(-020.-*(,030-28:0/12/)')%33&+1#%48.*-**-/.,,&*4(1(--(JA",+&0NV6.5;/8>585&5IRK?:"3(*''-;?=@HE1+/$""!  !        <9841/.*++.,+0-(+.1110.+/09>:66410361)$%()(7--HVSN3&--*+,0**--+!-/2%-B7(&)$-KVB@,$-(:< 989YebA@D(&+*'(5<GBFSF,$&%#!
+ !        4140.30((*,/1/0/+/333321*/8>==:1.11013.')+/3.6f\oYF5).1('+,-&+;;"$/$).&&(&#-EbT-(0/4)*%0>KTWbS+=G3'+0-2;AF:&#+$"
+
+#!
+        !201,*04840,,.//-/+(,38:;1++388631112351,# *121C0VUG90--.+)'*$$AcJ*$0+%"*%&"$)
+.^lbE052
+!+*9<FP=! ;B3B7$-/0-(&''& 
+#!
+!        /01058/)+--+))+--))/457:9/'(..-//463484-&+/!&:A DYI10,')++&'*",OzR)00)%!+'(.7yol}U/6/+2;BL?+&+16;16:8/&+(%&(+)00%
+"!
+"        -5716AAD;51-0532,*-3631165-'()),.06::6317#$)))2'?dW:4-'-,,'$,%#Gh^=12/&+'"-,!
+O~`:5F.(DMWI9::,5=51.,--1-*%")/87(
+#"
+"        .35268212/00690)1-+.472/+.,())*03/7CB53=;+*0*+7*4]dO<*&-)*+'+"$ReMq\23,-()*(,;nxn?H2#7UQ2240./.%'%$%(-,,&"*253&$$!        (1;90+2B;41()3341.-/3420*'&**&(/24;@?;=C<)&-('0),WjV>/&"&(+&*%!5YKN071()+(.%+pb?}Q9N@,?N15KB,23''$!!")(&')..+("!$$       !!!)/:80.3<?61(+4/,./242-+,+%$('$&*,6:65;??</,-,*%(1NfYD:) *''!&/(%(JsFV4&0*%++
+0©c,WkDfI57D52H57/.03%!.#(#!&,-&'" ""  !    !!!"'2>7++-,/06//7460--22*%%&$&&#$((*,/101598/-'+0'7/;Z^M8'/*%)(%+/.$"b[9ql5(*",.'$OL8P{bME41-1,)%*AJ4'$-9./'%+/-&)"!#
+
+"   !!"""++585995501002032+')($$(#$&&%%&'&),../23;:0*-(&1'$[`W>3')+))'$&')#4TZ3*#%&/)&<YG;(S~OK(*(!)$ %ZX000''++,/./1)%%% 
+!"!
+! ! !-+10++*''&*.+/-++)((%!!&#$&&%%&'#&(*+.1348;93.+*079eO:;)$'*)),)%(/ %[¢K7@C/
+$**//>5'(\H&
+ '( %6/".-%$$+062)'%1/("!#$'"""% "##,,/-,,*+%)%(!!))%%&'&$$'$%&&%%%&$%%&(*,.08FG<:80.:+[ZL:(1./*'-)&'/#<u]CADTA,$+-612-/!+z`J?6)"0-&"&2+$#"-352)'&42($&%%,)#$) %'!.12,**&&&%#'0,&%%$$%')(&$%&&&%%%'%&%%&())0>A9<@:8/;0mf76,$-0)($'((+$%CLZc0NM<*"4.-$6/81=mMRbG'#+)%&*4-&%&20*+*'
++-#&%$*+#*-&)!)03,,1.,"%I\!+'&%%&(&#$%%&&%%%&%%$$&')+0688<AC31562?FD.!)+('#(&'/(&7P_q' EN86&,(+*;S@N
+QC@%'*))&$/,&#&0-&,/,#$/#
+$$$)&#03"'*$.37.+0.*&"#)LD#%'&$#%%%$$%%%%%$%%%%%&()+.-.11156496*-BK:+'&'+*,&*,#%+=JH02?Kf8
+//&)-A;`œr69'$)*,%(&$&),)'-164-9*"%)+'#.2*0+$%%)&"(+*
+&,)>&%%&&%$&''$$$$$$#$%%$$%&''.0..0.,/)/0>,';F4)$)//+*))))'",>7+"
+'^j^90/-%*;46¯>-$
+)(('#)&'))*%%)/756B3%%&,-*&+-,4+'+&)& $()!:A6(."%)&$$&'&$$#####"#$$$%&&'')+,--.//++%*52=J:.'-1($)*"$,($$/3'
+('@BTH2)+1%35JdaG7
+'(30003-(
+
+!#&-8?58D6)'&,,+,0*&.)/3+&%$$&&()001%+!&*,*&('!########$$%&&'(((+-0/-*'+/)$,5;AH0!+)')+&+$%(%%')&%3;J7'(34+0@KidRI6&/B2057,&"#''$.<;6E)0*%*.5*%+&*)>>90+.,#$"%($ %&'*00)%&'$$$$$$$$$$$%%&(),.27972-)+--,163JK%#$,)'&*'''$##%!&#CG6#)*.ARQGdghA9$<F/.26*5E4-(& $026:+),)1.-631."((+00*)/-"'%#$"1+#)/2,%&'"$$$$$$$$$$#$%')+--/5<@A@5,-/)-3,?]7&#.*.(+)*($#! .
+#)DcA30#/Rh_AGKt=,0;:+,+9;MS4+%'(.9810,1)%0,%15;8'..&(*))+*$'7;/)C=*.34-&(("%%%$$$$$%%$$&(*+1/,-27<@=101'&03/I=&&0&),,*,)''"#% %%$)WO32(#NT76Ee`C,+443(4AI<2/+*-12(/-$-4-,*,44=C101+)*+))(&%5=*$;;-/+-/+%$%%%%$####&&&&'()*++***+058554+"+<*0H+$,%%.+')))*$" "%%&'$;*/0
+,~l)TR`DF/-276,(5;6/.*-142(*108=/&)/2)2G;11##$%%(*(314+(/75,''-00*$&&%$###$&&&''(()$%&(()0655000)*84.R9$&++-*%%(((%("'""(%$ (0.l~2[lW*&'+11-&2:;;6.1200/%*-1-&(+,+#)C@45&&''&(+)--33*!,4,..,083&'&%%#$%%%%%&%&&&'&'(()/5770+01-0;3BD.&+',,$$(&%%"*%&"%.*'(11}@<yM|C(%-0/*)15264---+/38.%'-5;9-+.,9;36'$%(&$%'',3:1%'#&-2-'),+&'&%$$%&%$$$#$%&#"$')*-15;9/.1.-587S7"),)-'%*&#%)$&!$&&'()'#$/ZDo1wR!&.))((%*--20,*+/012-+0/*&!!1,,327%%$$$%$$((,0-(&) ,40%'.&$)&$%"&%$$"""##$! "%&'+.3<<316523:7J<%%$0/&##"'*&%%%%%&&))& !)-)/Nn<LM!%+#"&,10*121-+,,**,11))+62(0/-310/,)&%&&(*+,*(('&&2;<2**#%&&$$#%&$$""""#$! "%'&)+)/0.046751B=I/2,-.(&'%%&&&%##%&''('##*-*&']hNf@#&(,/.-2421010-,0-02-*,,3-'!+237340+'%&')-,*(()($*025.%%&%$%$###%##"!""##!!"%'&%'$&'*.038:5<8C.)%,.*)*'&%'&$""$&'&&((&)-,4
+.f[o<2*/77/+-/-,-00-,/,./+,,,2,+(46156/-*'&&').)'*+)&&+)%%$#*%$#$#&!###""""##"""%&&%&'&%'+,-284.JL.#+/1-,-))'(&$""#$&%%')''**&1*Ed83536961+%&*-+++*'-+--/*)3>/),-312)'&&%%(*+)(**(&'*)$%%#%(-,$#$)#$$##""##$$##$%&%&''%%(*),-4+*0+0.13/./,**'%%####$&$%(''()&.)(8@646116:93+*,,)()(&.-///,*2=.'*$..)&$$$$$'**,+'&((%'((**)+':?*##'!#$$#""##$$##$%%&&()'%')()/.2.0-)0/2///+*)&%%$##""&"$'%&'(,.//6:93512567860-***)+.+./-)0.//2+6)(1($##%%$%(*-,'$&('$'*-+.3-=K-$$&!#%$$#"##$#$$$$%&&)*'%&''),-2/)2,2,/,,-)('$%$$##""%"#&%&(&)*#(4;;;2124235650,++*-1)+,/'50+27'2-*/.$$%'(%%'))))&$%(').3/2846J,$&($&%$##""##"$%%$$%%''%%(&'+*+-0/)/-*,)))&&&$$#####"#!#&%&(&((02,1></-/23453983-+,-++**6+8.'(4,0+&#6##"+$$$(21*##(*''-652:2"#2?7,%'$%$""##$%#$$$$$$%$%%$%&),*)*++*('-+'$##$%#"#"""##!!#$$&&')/0,.1295/,0025665541.+*/,+/4-1,/5)34.,' !%!*($(10)##*0//0543960+)I;)
+%$###"#$$%$$$%$$$$"$%%%&*.000/.,++,*'$"!""""""!""#  "$$&()++*-56/-5115425844553/,+22.-0*-4,;,+(,(&#&#""))'%%())+/-*0358@MO+81!(((&%$$####%%%%##$$ #%$$%)-6520-+**+)&$""""""!!!!""  !#$&'(('%)/0,,-0792.3:566530--/2-+.,+8/4")06/#)*$,# %$&#)45-+11(,3<52:J-22-0#&&%"!"$%%%%$#####"$%$$$'*330-)&&&'&%$####!!!!!"""!""#%&'(')''((**..37436:<:7300/.--,,.3,111(37003*2)%''
+')(-68326.+14;4-+*/9(-!$/40)%#&&%$$"""###$%%%$$%&--,*'%$%$$##$$$$""!""""# !#%&)*++.+++++#+*2;828A><8301101-//+5.(77/-2*,+-/?*%+"*%(,.2553+/96;84*',%"'+**83+$#$%###""#####$$%%%%&&'''%%%&$$$#$$##""""""""!!#$%'()-0..,+0)%"-??44<9962001.3.0.)11'('
+,13.1(E;$(+%')*,166320<;<32,((2R%)&+)($  #%$$$##$$$$#$%&&&&'############""!!""""""""""""#$%%+/./(%5:2&$1=@905774333/2....02)7=40.214@--5 #1+.(&*/2570-@>1$BaS$1g0//*--*&#$$"$$##$$$$#%''&&&(%$""!!!!""""!!!!""""""!!"!!"#$&&,.-2)$7@@9,#+>D:79:878733/,0921(,;0-%4.-95
+&%".-.*&'+03316;<6.EWS&'HD.2$1PM2%## $$$$$$$"%&&''&')%$#&'$ !"""!!!""""""""""!!!"$&'(%*/=6$'+/@E9.*1>>A=517;:7=6220.%+135/308())'("-//)&(*)+/1-11**A;H;.59-#'$.AC5*)
+$&$# %&%$&((''()+$(79*!$#!"#" !""""""""""""#$&'(./.061(-*6EI@4.-9:7/,0317>764-0.)=@1*3/*)$)!$'(+.)&''&).*-.*'!5._P(#"+*)2 /2)*'%%%($$"%!$&%#$&'( &8;+#&"####""!""""""""""##$%%&,,.*;>)/3/2@ID70,251,((*.85<8*06"'.-3/.8""%(1&&,+(%%(+-',(#(#2#A@(,
+))),.1.))%$#%%&$%%$&'$%&'%*&&*(#  #$#!"%$ """"""""""""#$#$**-+89$,2.6=7356+,14/(&*,/(9A37<+35'2552'$ "!('+**(&')*)'*+$!&:"2B4-**)1,28C2-'#('( (),$''&&()% !$&"!*32(#!!#$#!########""""!!""&&'&,/)+2:25I>&)0-,,*('(-0)7;,1=723*3++/%$&$'!$#)%&)+)'('(('%&1-+)*),$&WjX5+')%)$!#233+**+.0-%(+/*&.75,"#%!#########""""!!!!)+)%%++!-(2=>A@8387/''&#)109;+-;&*1&+,0/&#"
+#(/0(%%(*(&''#"13)*')-&)1+2<F2
+&,&&##.AMG<+,/573,(**.-)/52*# #$! #$$$$$$$$##""""##
+!#$)13+%")/08EJJPQIA>93+-,5C>49+/8-+.2-&((#"139+,*'')'$#&'*3D6'*1*0*!$%%,$(&2/'-!+J?'%&+24/,,/,-)#(-&%%#!"$$"$$$$$$$$$$####$$&%&$&)').2.-411?OGBEGC:312/-63(1-'/-*),+ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœŒŒÁŸŒŒŒ»œÁÁ¿ÀÀŸœŒž«Šyyz{||||~~||{{{{{{zyxxwwwwvvuuttqqqqqqoonnnmmllklkkjjihhggfffffeŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœœœœœœ»ŒŸŸŒŒ¿Œ»œ¿¿ÀÀœ¹¶²­š¢}{zzzz{{{zzzzzyyxxwvvussssrrqpoooonnmmmmmllkjihhhgggff¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿¿¿¿¿¿ÀÀœœŸÀÁ¿ŸŸ¿Ÿ¿ÁÀÁÀŸ¿¿¿Ÿ»¶°¬€~}}~~}{zz||{zyxwwtttsssrrppooonnnmmllkjjjhhhgfffe¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿¿¿¿ÀÀÀ¿¿ÀÀ¿ŸŸÁÀÁÁÀÀ¿ŒŸŸ¿À¿Ÿ»¹ž¶°©¡~~}}~}}|~}}|{{zyuuttttturqqpoooommmlkkjjjihggffeŸŸŸŸŸŸŸŸœœœœœœœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœœœœœœ¿¿ŸŸŸœŸœŸœŸ¿œŸŸœÀÀÀÀÁÁÁÁ¿¿¿œž±«§¢~~~}}|{{xwwvwwwwvvusqqpppoonmmlllkjihhggŸŸŸŸŸŸŸŸœœœœœœœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœœœœœœœœŸŸ¿ŸŸŸŒŒœŸœŸÀŸÁÁÁÁÁÁÁÁŸ¿ÀÁÀŸŒ»¹²š
+~}|{zyyyxxyxwusrrsrqpponnmmlkjihhhŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœœœœœœœœœœœœœŸŸŸŸŸŸŸŸŸŸŸ¿¿ÀÀ¿¿ŸœŸ¿¿ÀÁÀ¿À¿¿¿¿¿¿ÁÁÁÂÂÃÃÃ¿ÀÁ¿·«
+~}|{zzzzyxwvuuuurqqpponnmlkjjjjj¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸœœœœœœœœœœœœœœœœŸŸŸŸŸŸŸŸ¿À¿¿¿¿¿ŸŸœŸ¿¿¿Á¿ÀÀ¿¿ÀÀÁÁÀÀÁÁÁÁÁÁÅÆÇÇÄÀ»ž²«£
+~~}}~~{zyxxwwwrrqqqponnnlkkkkkÀÀÀÀÀÀÀÀ¿¿¿¿¿¿¿¿œœœœœœœœœœœœœœœœœœœœœœœœŸŸŸŸŸŸŸŸÀÀÀÀÀÁÁÁÀÁÀÀÀÁÁÁÂÁÁÀÁÂÄÆÁÂÄÆÆÅÄÃÃÄÁº±§
+~}}}|||zyxvuvwutstsqpnmllllÁÁÁÁÁÁÁÁ¿¿¿¿¿¿¿¿œœœœœœœœœœœœœœœœœœœœœœœœŸŸŸŸŸŸŸŸÀÀÁÁÁÁÁÁÁÁÀÁÁÁÁÁÄÃÃÂÂÃÃÃÂÂÃÄÅÆÆÅÇÈÈÅÂ¿ž²€
+|yyz{yxwvuuuusrponnnnÀÀÀÀÁÁÁÁ¿¿¿À¿¿¿¿œœœœœœœœœœœœœœœœ¿¿¿¿¿¿¿¿ÀÀÀÀÀÀÀ¿ÁÁÁÁÁÂÂÂÁÁÀÀÀÁÁÁÂÂÂÂÂÂÁÁÅÅÄÄÄÄÅÅÅÆÇÆÇÉÈÅÂœ·°š~}}}{yxyxvvvtssrqqqqÀÀÀÀÁÁÁÁÀÀÀÀ¿¿¿¿ŸœœœœœœœœœœœœœœœŸŸ¿Ÿ¿Ÿ¿ŸÀ¿À¿À¿ÁÀÀÁÁÁÂÂÂÃÁÁÁÁÁÁÁÁÁÁÁÂÂÂÁÁÇÆÅÄÄÄÅÄÆÆÆÅÆÈÈÇÆÆÇÆÃ»°©
+~~~~~{z|{xvxuttsrqppÁÁÁÁÁÁÁÁÀÀÁÀÀÀ¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœ¿Ÿ¿Ÿ¿¿À¿ÀÀÁÀÁ¿ÀÀÁÂÂÃÃÄÄÄÄÄÄÄÄÁÁÂÂÃÃÄÄÄÄÃÃÄÅÆÆÆÆÆÆÆÇÇÆÄÄÅÆÇÆÅÄœ±£
+~~ywywvvutrpnÁÁÁÁÁÁÁÁÁÀÁÀÀ¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿¿¿ÀÀÀÀÀÁÁÁ¿¿ÀÀÁÂÃÃÄÄÄÄÄÄÄÄÃÃÃÃÄÄÄÅÄÄÃÄÅÅÅÅÅÆÆÇÇÆÅÄÈÇÆÆÅÆÆÇÆÂÀŸ¶Š|{|zyyxxurpÁÁÁÁÁÁÁÁÀÀÁÀÀ¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸ¿¿¿¿¿¿¿ÀÀÀÀÁÀÀÀÁÁÂÂÂÃÃÃÃÃÃÂÂÃÃÃÃÃÃÄÄÅÅÄÄÄÄÄÄÇÈÉÉÉÈÈÇÉÉÊÊÊÊÉÈÈÉÉÈÇÄŸž¥~~|{zyywusÁÁÁÁÁÁÁÁÀÀÀÀÀ¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸ¿¿¿¿¿¿¿¿ÀÀÀÀÁÁÁÁÁÂÂÂÃÃÃÃÃÃÂÂÂÃÃÄÄÄÅÅÄÄÃÃÄÅÅÇÆÇÈÈÉÉÉÉÌËËËËËÊÈÆÊÌÉÉÍÊÃÇÀ³Š
+~|{yyxxvuÁÁÁÁÁÁÁÁÀÀÀ¿¿ŸŸŸ¿¿¿¿¿¿ŸœÀ¿¿¿ŸœŒ»ŒŒœœŒŒŸ¿œœœœŸÀ¿ŸÁ¿¿ÁÁ¿¿ÁÂÂÂÂÂÂÂÂÃÃÃÄÄÄÄÄÃÃÄÅÄÅÅÆÈÈÉÊÊÉÉÈÊÉÊÊÊÊÊÉÉÉÈÈÉÊÊÊÅÅÇÈÄ»°š||}~}|ÁÁÁÁÁÁÁÁÀÀÀ¿¿ŸŸŸ¿¿¿¿¿¿ŸŸ¿À¿ŒºŒœŒ¿Œ»»œ¿ÀÀœŒŸœŸœœŒ¿ÁÁ¿¿ÁÁ¿ÂÂÂÂÂÂÂÂÃÃÃÃÃÄÄÄÃÃÅÅÅÅÆÆÇÇÈÉÉÉÉÉÉÉÉÉÉÉÉÉÉÈÈÈÈÈÈÈÄÅÆÊÍËÇÄº«
+
+
+~}|zÁÁÁÁÁÁÁÁÀÀÀ¿¿ŸŸŸÀÀÀÀÀÀ¿ÀÀ¿Ÿ¿À¿œºŸŸœŸ¿Ÿ»¹ŸŒœœŸœ¿Â¿ÁÁ¿¿ÁÁ¿ÂÂÂÁÁÁÁÁÂÂÂÃÃÃÃÃÄÄÅÅÅÅÆÆÅÆÆÇÈÈÈÈÈÈÈÈÈÈÈÈÉÉÉÉÉÉÈÈÇÆÅÆÇÈÇÅÃÇÆ¹Š
+ÁÁÁÁÁÁÁÀÀÀÀ¿¿ŸŸŸÀÀ¿¿¿ÀÀÀÀŸ¿Áœ·¹¿œœœœŒœÀÁŸŒ»œœŒŒŸÁ¿¿ÁÀ¿¿ÁÁÁÁÁÁÁÁÁÂÂÂÂÃÃÃÃÄÄÄÅÅÅÆÆÅÅÆÇÇÈÈÈÉÉÉÉÉÉÉÉÉÊËËÊÉÉÉÆÆÅÅÅÆÅÃÂÂÂÅÉÆžª
+}ÁÁÂÂÂÁÀÀÀÀÀ¿À¿¿Ÿ¿¿ŸŸŸ¿¿ÀÁœ»œÀÁÀÁŸŸŸŸœŒ»»ŸœŸÁÂÀŸ¿ÀŸŸÀÀŸŸÀ¿¿ÀÀÀÁÁÁÁÂÂÂÃÃÃÄÄÄÄÄÅÅÅÅÅÆÇÈÈÉÉÉËËËËËÊÊÉÉÊÊÊÉÉÉÊÈÉÈÇÇÈÇÅÄÆÅÂÂÄÅÃÄ¶€ÁÁÂÂÂÁÀÀÀÀÀ¿À¿¿Ÿ¿¿¿¿¿¿¿À¿¿ŸœŸ»®¢«ª«¯¶»œœÀ¿ŸœŒŒŒœœ¿¿œœ¿¿œŸ¿¿¿ÀÁÁÁÁÁÂÂÃÃÃÄÄÄÄÄÅÅÅÅÆÆÇÇÈÈÉÉÊÊÊÊÊÊÊÊÊÊËËËÊÊÊËÌÊÇÆÆÅÃÀÃÅÄÃÃÂÁÃÃÄÂ¹©ÁÁÂÂÂÁÀÀÀÀÁÀÀ¿¿Ÿ¿ŸŸŸŸŸŸŸ·žŽ§~z{zz§¯ºœ¿œŒŸ¿¿»Ÿ¿ŸŸÀÀœŸŸ¿¿ÀÀÀÁÀÁÁÂÂÃÃÃÄÄÄÄÅÅÅÅÆÆÆÇÇÈÈÈÉÉÊÊÊËËËËËËËËËËÊÉËÊÇÈÉÉÈÇÇÅÃÂÂÃÅÄÄÅÇÈÅ¿ºÁÁÂÂÂÁÀ¿ÀÀÁÀÀ¿¿ŸœŒŒŒŒŒŒ»¹£|rkmtvxywvw|š²žŸÁÀœŒœÁÁ¿ŸÀŸŸ¿¿¿ÀÀÀÀÀÀÁÂÂÃÃÄÄÄÄÅÅÅÅÆÆÆÆÆÇÇÇÉÉÉÊËÌÌÌÊÊÉÊÊËÊÉÉÊÊÈÈÉÈÇÆÄÃÄÅÄÃÃËÇÃÀÂÄÇÈÀÁÂÂÁÁÀÀÁÁÁÀ¿¿¿¿»¿À»ºŸ»±pqvvvysuvwuuuvwx~«ž»»ŒœŸŸ¿¿¿¿ÁÂÁÁÀ¿ÀÁÀ¿ÁÂÂÂÁÄÃÁÃÄÃÄÆÅÅÅÆÆÆÆÇÈÈÉÊÊËËÈÉÊËËËÉÉÉËÊÈÉÊÊÈÆÆÆÅÅÅÃÃÄÅÅÆÅÅÄÃÀÁÂÂÂÁÀÀ¿¿ÁÁÀ¿¿ŸœŒÁÁŸ¿¬vrrwzxvvwxxxvvvvwvwy{}¢§¯žœ¿ŸœÄÂ¿œŒœÀÁœ¿ÀÁÁÀÀÃÁÃÃÂÃÄÃÅÄÅÅÅÅÅÄÄÇÇÇÈÈÈÉÉÈÉÊËËËÊÉÉÊÊÈÉÊÊÇÇÆÆÆÆÅÄÄÄÄÅÅÅÅÄÄÁÁÂÂÂÁÀÀÀÀÀ¿ŸŸœœÃŸŒÀœŠttuuttuvvyxwvvwxwzzzxwvvv|§²žŒžº¿ÂÃÂÀŸÂÀŸ¿ÂÂÁÃÂÃÂÂÄÃÂÅÂÂÃÃÄÄÃÃÆÆÆÆÆÆÆÆÆÇÈÉÉÉÉÉÈÊÊÉÉÊÈÇÆÆÆÅÅÅÄÄÃÃÄÄÅÅÅÅÁÁÂÂÁÁÀÀÁÀ¿ŸœŸ¿ÀºŒœœ¯lvwxwvx{{yyxwxxyyyuvwwwyxvywuwŠ³¶ŒÁÂÂÀŸœ¿ÁÃÄÀÀÃÂÂÁÂÄÃÂÄÃÃÃÃÃÃÃÄÅÅÅÅÅÅÅÅÄÅÆÇÇÇÇÇÈÉÊÈÈÉÈÇÆÆÆÆÆÅÄÄÅÅÅÅÆÆÆÇÂÂÂÂÁÁ¿¿À¿ŸœŸ¿ÀÁŒÀ¹¡
+xy~yxxz}~}{|{z{{{zy{||zz|zwyyyyz{}~€±»¿ÀÀŸœŒœÁÀÀÂÂÂÁÁÄÃÂÃÅÄÃÂÁÂÃÃÃÃÃÃÃÃÃÃÄÅÆÆÇÆÅÄÇÇÇÇÇÇÇÆÇÇÇÇÇÇÆÆÆÆÅÅÅÅÅÆÂÁÁÁÁÁ¿ŸÀÀ¿¿ŸŸœŒœÀ«{}w}{zzzz{}}}|||{zy{{zxxyyv{zxwwx{}{} ­ŽÀÂÁÁÂÂÂÃÁÂÁÀÂÃÂÂÃÂÁÁÁÂÃÅÃÃÃÃÃÃÃÃÄÄÅÆÆÅÄÃÆÆÆÆÆÆÆÆÇÇÇÇÇÇÆÆÅÅÅÄÄÅÅÅÂÁÁÁÁÁÀ¿ÁÁÀ¿Ÿœ»ºÃŽx|~{y{}~~~||||{|zzzz{{||||yxxwxy{|||{{{~
+¡°Œ¿Ÿœ¿ÄÀÃÂÀÁÃÂÀÀÁÂÂÂÃÄÅÅÅÅÅÅÅÅÅÃÄÅÅÅÄÄÃÅÅÅÅÆÆÆÅÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÂÂÁÁÁÁÀÀÁÀ¿ŸŸŸŸŸ»}|z}~~~}}~{|}}}||}~zz|||zzzyyxxxxzzz{|}|||}§¶»Œ¿ÃÂ¿ÀÄÂ¿ÂÃÄÃÂÁÁÁÄÄÄÄÄÄÄÄÂÃÄÅÄÄÄÃÄÄÅÅÆÅÆÅÆÆÆÆÆÆÆÆÅÆÆÆÆÇÇÇÂÂÁÁÁÁ¿¿ÁÁÁŸŒÁÃÀ |}z{~|||}}}}}}}}}}}}}}||||||||||{zzzzzz{z{||{zx{ ­»ÃÂÁÂÀ¿ŸŸ¿ÀÁÁÁÁÃÂÂÁÂÂÃÃÂÁÁÂÄÅÄÃÄÃÄÃÃÄÄÆÆÆÆÆÆÆÆÆÅÅÅÆÆÇÇÇÂÂÁÁÁÁ¿¿ÁŸŸÀœÁœ±~y|zz}|}}}}}}}}}}}}||||}}}}|}}}~}|{{z||{|}}|{~}||||~«¶ŸÂÂÂÄÁ¿ŸÀÂÃÄÀÀÁÁÁÁÁÁÁÃÄÂÀÀÂÅÂÂÃÃÄÄÅÄÆÆÆÆÆÆÆÆÅÅÅÆÆÇÇÇÂÂÁÁÀÀÀÀÁ¿ŸÀœÂ³z{~yy||}}}|||||~~~}}}|{||~~~~~||}|{|~}|{|{}~~¯œ¹ŸÃÃ¿ŒŒŸÂÂÁÀ¿¿¿¿ÄÃÁÁÁÂÃÄÁÂÃÃÄÄÅÅÄÄÄÄÄÄÄÄÄÄÄÅÆÆÇÇÂÁÁÁÀÀÀ¿¿ÃŸŸœŸ£
+}|~}yy||||||||||~~}}}}||}}~~~}|~|z|~}|{~~}~~}}¡«ž¿¿ŸÀÃœŸŸ¿¿¿¿¿ÂÀ¿¿ÁÃÃÂÃÂÂÁÂÃÅÅÄÄÄÄÄÄÄÄÄÄÅÅÅÆÆÆÂÁ¿¿ÀÀÀ¿ŒÃœœœ°x{{{{z{}}|||||}}}~}}}}~}}}}}~~~}|}~~|}|{{zz|~}}}zz ­žÀÄÂÁ¿œŒœ¿ÀŸ¿ÁÀŸŸ¿ÂÃÂÂÁÁÁÃÃÃÃÃÃÄÄÅÅÅÅÅÅÅÅÅÅÂÁ¿¿ÀÀÀ¿œŸœÀœ}xyzzz{|||{|||}}}}}}}}}~~~~~~~}}~~}~}~|{}}|}}|{{|¡Š·º¿ÂÄÄÃÂÀÁÂÁÀŸŸŸÂÂÃÂÃÂÃÂÂÂÂÃÄÄÅÅÅÅÅÅÅÄÄÄÂÁ¿¿ÀÀÀ¿Á»¿Ÿ°wzz{{{}|{|||||}}}}}||||}}~~~~~~~~~~~{{~~}}~}{}~~~
+ŠŽœÀÀ¿ÂÁÁÂÂÁŸŒÁÁÂÂÃÃÄÄÁÁÂÂÃÄÄÄÄÄÄÄÄÄÄÄÂÁ¿¿ÀÀÀ¿ÃºÁž zvyz{{{|{z}}}}}}}}}}||{{|}}~~~~~~~~~|~}}~~~~}~¡¯·ŸÀÂÂÀœœ¿¿¿¿ÀÀÁÃÄÁÁÂÂÃÃÃÄÄÄÄÄÄÄÄÄÁÀ¿¿¿¿¿ŸÃ»ÃŽz{x{{||||}}}}}}}}}|||{{{|}~~~~~
+~~~}}~~|}~
+ŠµÀÃÂÂÂŒ¿ÂÄÂÀ¿ÀÁÁÂÃÃÂÂÂÄÄÅÅÆÆÅÅÁÀ¿¿¿¿¿Ÿ¿œÁ©xuy~z{|||||}||||||||{{{z{{|}}}}}~~~
+~~~~}~~~~}§µœÀÁÂÁŸ»ºœÁÁ¿¿ÀÁÂÄÄÃÃÅÄÄÄÄÅÁÀ¿¿¿¿ŸœŸÀŸuxx{z{|||||}}}|||{{{|||||}|}}}}}~
+
+
+
+
+
+
+~~~}~«³œÃÄÀ¿¿ÁÁÁÁÁÁÁÁÄÄÄÄÃÂÃÃÁÀ¿¿¿¿ŸœœÁºv{xx{{||}}}}}}||||{{{||||}||||||~~~~
+
+
+
+
+
+
+}~
+}ªŽ»ÀÃŸÀÂÁÀÁÂÃÃÃÃÃÃÃÃÄÁÀÀÀ¿¿Ÿœ»¿µty||{}}~~}}}}}}}}}}{zzzzzzzyyyz{{{}~~~~~
+§®¹œÁÁÀÀÁÁÁÁÁÂÃÄÄÅÁÁÀÀ¿¿ŸŸÀÀªxw{}}|{}~~~}}}}}}}~~~{zzzzzzzxyyzz{|||}~~~~~~~~~~
+€¬·ŸÀÁÁ¿ÂÂÃÃÃÃÃÃÁÁÀÀÀÀŸŸÃ¿xy}yw|{|}~~}|}}}}}}}}||{{{{{{yzz{{||}{}~~~~}}}~¥¯¹¿À¿ÁÃÄÂÁÂÄÁÁÀÀÀÀŸŸ¿Ÿxsywz|{||~~}|}}}}}}|||||{|{{zzz{z|{}|z|}~~~}}|}~~~
+ ¯¶µº¿ÁÀÁÄÈÁÁÁÀ¿ŸŸŸ»¿wuuxz||}~~~}}}}}}}}}}{|||||||{{||}}}}{{|}~~~}}}}|}~¡©²·»ÂÅÂÁÁÁÀ¿ŸŸŸ»Ÿxyvy|||}~~~}}}}}}}}}}{|||||||||||||||||}~~~~~~}}}~~¢©¯žÀÂÁÁ¿¿¿¿ŸŸºœx|xz|||}~~~}}|}}}}}}}|}}}}|||}}}}}}||}}~~~~~~~~~~
+¢š°·ÁÁ¿¿¿¿ŸŸº¿¢y|z{|||}~~~}}}}}}}}~~|}}}}}}}~~}}}}}|~~~~~~~¥¿¿¿¿¿¿¿¿ŒÂ«zx{}{||}~~~}}}}}~~~~~}~~}}}}}||||||||
+
+
+
+
+¿¿¿¿¿¿¿¿œÂ°sy|z||}~~~}}}~~~~}~~}}}}|||||||||
+
+
+
+
+
+
+
+
+
+¿¿¿¿ÀÀ¿¿ŒÂ¶w|{z||}~~~}}}}~~~}~~}}}||}}}}}}}}
+
+
+¿¿¿¿ÀÀ¿¿ŒÁœ~{{||}~~~}}}}}~~~}~~}}|||}}}}}}}|
+
+
+
+
+¿¿¿¿ÀÀ¿¿œ¿Á¬|y}{|}~}|}}~~~~}~}}}}}|}}}}}}}}~~
+
+
+
+
+
+
+¿¿¿¿ÀÀ¿¿ÂÀÂµz}z}}~~}|}~}}~~~~}~}}}}||}}}}}}}}}}}~
+
+
+
+
+¿¿¿¿¿¿¿¿ÃŒÃŒ¬
+~|{|}~}|}}}~~~~}~}}}||{~~~~~~~~}}}~~
+
+
+
+
+
+
+¿¿¿¿¿¿¿¿ÁžÃŒÀ}{}{z}~}}}}~~~~~~~}}}|{~~~~~~~~}~~~
+
+
+
+
+
+
+
+
+
+
+ÀÀ¿¿¿¿¿¿¿¹À»ÁŽw}yx{|{{~||}}}}}~~~~}}|}}}~~~~~|~~
+
+
+
+
+
+
+ÀÀ¿¿¿¿¿¿œœŒŒº¿²wuy}}yy}{|||||}~~~~~~~}}}}}}~~}z}~~
+
+
+
+
+¿¿¿¿ŸŸŸŸŒ¿ŒŸ»¿Ã¢{y}~zxy{{|||||}~~~~~~~}}}}}~~~}|}~~
+
+
+
+
+
+¿¿¿¿ŸŸŸŸœ¿œœÁºœŸzx{{yy{{{{{{|}}~~~~~~}}}}}~~~}~
+
+
+
+
+
+
+¿¿¿¿¿¿ŸŸÀ¿œŒŒœŸÀ»¢{|}|{||||||||~}}~~~~~~}}}}}~~}|}~~}
+
+
+
+
+¿¿¿¿¿¿ŸŸ¿¿ŸŸœŸŸŸœº§ywxu~~}|||||~~~~}}}}~~~~~
+
+
+
+ŸŸŸŸœœœœŸŸ¿¿¿ŸŸœÀ¿ž§}}}}}}}||{{|}}~~~~~~~~
+
+
+
+
+
+
+
+
+
+
+
+ŸŸŸŸœœŒŒœŸŸŸŸŸœœÀŒŸÃŸ©~}|{{{{~~}~}~|}}~
+
+
+
+
+
+
+
+
+
+
+¿¿ŸŸŸŸŸœŸŸŸŸŸŸŸŸŸŒ¹»Œœ·³¡~~
+
+
+
+
+
+
+
+¿¿¿ŸŸŸœœ¿¿ŸŸŸŸŸ¿ÀÁÁ¿¿¿Œ·ŸŒ¹Ž­¥
+
+
+
+
+
+
+
+
+À¿¿¿œœœœŸŸŸŸŸŸŸ¿¿œŒÀÂÀŸŸ»œÀÁÁŸ»¹Ÿž²®­«š¥€¢ ¢
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ÀÀÀ¿ŸŸœœœŸŸŸŸŸŸŸŸœŸÀÁ¿Ÿœ¿ŸŒºº»Œœœœœ¿ÀŸ»ž¹¶²®«©Š€€€£¢¡   ¢¥§¬²¶µ
+
+~~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ÀÀÀ¿¿ŸŸŸŸŸŸŸŸŸŸŸœŸŸŸŸœœŒ¿ŸŸœœœŸŸŸŸŸœœŒŒŒ¿ŸŒ»»ºº¹µµŽŽ³ŽŽŽŽ¶žºº»œŸ¶¢
+
+~
+
+
+
+
+
+
+
+
+
+
+
+
+
+ÀÀÀ¿¿ŸŸŸŸŸŸŸŸŸŸŸ¿¿¿¿ŸŸœœ¿¿ŸŸŸŸŸŸœœœœŒŒŒ»ÀŸŸœœœŒŒ¿ŸŒ»»ŒœŸœŸ¿¿ŸŒŒŒº¶±¬¥ªš
+
+
+
+
+
+
+
+
+
+
+
+
+
+ÀÀ¿¿¿¿ŸŸ¿¿¿¿¿¿ŸŸÀÀ¿¿ŸŸŸŸ¿¿¿¿¿¿¿ŸœœœŒŒŒŒŒ¿ŸœœŸ¿¿ŸÀ¿œ»»ŒŸ¿Ÿ¿¿¿Ÿœ»º»¿¿º¹Ž€²œš
+
+
+
+
+
+
+ÀÀ¿¿¿¿ŸŸ¿¿¿¿¿¿ŸŸÀÀ¿¿ŸŸŸŸ¿¿¿¿¿¿ŸŸœœœœœœœœŸœœœŸ¿¿Ÿ¿Ÿœ»»ŒŸ¿»»ŒœœœŒ»ºŒ¹žŒº¥ªœž
+
+
+
+
+
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÀÀ¿¿ŸŸŸŸŸŸ¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸœœŸŸŸŸ¿¿ŸŸŸŸ¿¿¿ŸœŸ¿¿¿ŸœœŒŒœ·¥®¹¹³
+
+
+
+
+
+
+
+
+
+
+
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÁÀÀ¿¿¿¿¿ŸŸŸŸŸŸŸŸœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœœœœœœ¿ŸŸœŸŸŸŸ¿Ÿœœœ·Š°¹¹¹«
+
+
+
+
+
+
+
+
+
+
+
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸÀÀÀÀ¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœŸŸŸŸœœŒŒŒŒŒŒŒŒœœ»ºœºšŠž»³³¥
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸ¿¿¿¿¿ŸŸœŸŸŸŸŸŸŸ¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœœœœœœœœŸŸŸœœŸ»À¿ºœŸ¬£žœ¹Œ¯
+
+
+
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÀÀ¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœ¿¿ŒŸŒÀœ¯©¬£­ŽºŸ¶©
+
+
+
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÀÀÀ¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœŸ¿œ¿ŒŒ¯€ªš£
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÀÀÀ¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿ŸŸŸ¿ŸŸ¿Ÿ²
+
+
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœ¿ŸŒŸœ¹¢
+
+
+¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŒœŒŸŒ»¿»­
+
+¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿ŒŸŒœÀµ
+ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿»Ÿœœ»Š
+ŸŸŸŸŸŸŸŸœœœœœœœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ»œ¹ŒŒº²ŸŸŸŸŸŸŸŸœœœœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœŸ¿œœŸœºŸŒŒŸ²ŸŸŸŸŸŸŸŸŸŸŸŸŸœœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœŸ¿ŸŸ¿ŸœºœÀŽ
+œœœœœœœœ¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿œŸ¿œŸ¿œÀ¹œœ§
+ŸœœœœœœŸŸŸŸ¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœŸŸœŸŸŒœŸŸ±¡
+ŸœœœœœœŸŒœœŸŸœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœœœœŸ¿œŒÁ·§»º­©
+ŸŸœœœœŸŸœœŸŸœœŒŒŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœŸœœÀÀœÁž¡£·»µµµŠŸœœŒŒœœŸœœŸŸœœŒŒŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿ŸŸœœ¿¿»º£¬¹ŒœÁœ»¹°¡šœŒŒ»»ŒŒœŒœœŸŸŸœŒŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸÁÀ¿œ»œŒž§š¹Ÿ¹¹Œºž»¿œ·¯ª¢«¶»ºœœŒ»»ŒŒœ»ŒœŸŸ¿ŸœŸŸŸŸŸŸ¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸÀœœŒ¹»ž¬
+³œ»»ŒŒºº»ºž»Œ¹µ¯©¥¡¡£Šª®°²³Žµ·ºœœº¹Œº»¹º¹»º¹¹»ŒŸœŸœŸŸŸŸŸŸ¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ¿ŸŸœ»»°š·œŒ»»ŒŒŒœŒºŒŸ»Œ¹·žž¶µ¶±²Ž¶žºº»·ºœœ»ººŒº¹¹ž¹ž¹¹¹¹»»œŒœŒœœœœœœœœŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸœœŸœœ»§š³ºŒœ»ºœŒŒœŒ»œŒº·µ¶ž¹·¶¶žž¹¹ºº»»ŒŸ¿Ÿº¹»œžžžž·žžž¹¹º»»»ººŒŒŒŒŒœœœŸŸ¿¿¿¿¿¿ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŒœŸ¶±¹º¹œŒºŸ»»œŒ»ŒŒ¹Œ»»ŒŒ»º»¹¹¹¹ºº»»œœŒ»»ŒŒŒ¹¹žžžž¹¹¹¹ºººº¹¹»»»ŒŒœŒŒŸŸ¿¿¿¿¿¿ŸŸŸŸŸŸŸŸ¿¿¿¿¿¿¿¿ÂÀŸ¿Ÿ­©µº¹žŸœ»ŸœŒŸŸŒœŸŒ»ººº»»»»»»»»ŒœœŸŸŒ»»œŸœŒž¹ž¹ž¹ž¹·žžºº»º¹¹¹ºº»»»»œœŸŸŸŸŸŸ¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸÂÁŸÁœ¥£š§³¶Ž»·º¹¹œœ»œœŒœŸŒœŸŒºº»ŒŒŒ»»»»»»ŒŒœœŒœœœŒŒŒŒ¶µ¶µ¶µ¶µ¶¶žžºº»º¹¹¹¹ºººº»ŒœœŸŸŸ¿ÀÀÀÀÀÀÀÀœœœœœœœœ¿¿ŒŸ» ¯»žŒœ¹»·ž¹»ŒœŒŒœ»Œœº»Œ»»»ŒŒ»»ººŒ»»»»»ŒŒº»Œ»º¹º»²±²²³²³²µµ·ž¹¹º¹¹¹¹¹¹¹¹¹ººŒŒœŸŸ¿¿¿¿¿¿¿¿¿ŸŸŸŸŸŸŸŸ¿¿º»žš¹»¹·žº¶¶¹»»ŒœŒŒ»Œœº»Œ»»»»ººº»»»ººº»»»»Œ»ºº»Œ»»¯°°°±±²²ŽŽµ¶·¹º»¹¹¹¹žžž·¹¹»»ŒŒŒŒœŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ¿ººŒµ
+¡žº¶ŸÁº··¹ºº»Œººº»»»»»»»»»»»»»»ŒŒŒŒŒŒŒŒŒŒŒŒœœŒ»¯¯°°±±²²²²³³Žµ···žžžžžž¹žžººº»ººººººººººž¹¹¹¹¹¹¹Ÿº¹Œ·š³ºŒ¹Œž·¹»º»Œ»ŒŒ»»»»»»»»»»»»»»œœœŒŒŒŒŒœŒŒŒŒŒŒŒ¬­­®®¯¯¯¯®®®¯°²³¶······ž¹¹¹¹ºººº¹¹¹¹¹¹¹¹žžžžžž··»¹·¹¶
+§ºŒ¶»··¹º¹ºŒººººººººº»»»»»»»»œœŒŒ»»»ºŒŒŒŒŒŒŒŒ©ªª««¬¬­¬««¬­®°²ŽŽµ¶¶¶··¹žžž¹¹¹º¹¹¹¹¹¹¹¹¹¹žžžžžž»»ºº¹ ¯»ž¶ºžº»º»Œ»ºººº»»»»»»»»»»»»ŸœœœŒŒŒ»»»ŒŒŒŒŒŒ§šš©©ª««ªªª«­¯±³±²³Žµ¶·ž······žž¹¹¹¹žžž·¹ž··ž¹¹ºº¹·¹»§¯·µžž¹º¹¹ºžºººº¹¹¹¹¹¹¹¹¹¹¹¹»»»»ººººœ»¹·¶¶µµŠŠ§šš©ªªš©ª«­¯±³²²³³³Žµµ·····žž¹¹¹¹¹¹¹žžž·¶¶·ž¹ž·Ž²µ»¯°»¹ž¹º¹¹ºžŒŒ»º¹žž·¹¹¹¹¹¹¹¹»»»»»»»»Ÿ¹²¬š§ŠŠ€€€¥Š§§šŠ§šª«­®°°¯¯°°±±±µµµµ¶·ž¹ž¹¹¹º¹¹¹·¶µµµµ³±µ²°°µ³ £¶º¹»Œººº¹»»»º¹žž·¹¹¹¹ººººžžžž¹¹¹¹µ¯Š¡¢¡££¥€Š¥¥¥§šªª¬¬ªª«­¯±±²²²²³Žµ¶·¶¶·žžžžžµŽŽ³²¯«š¬­­©š«£šŽ³ŽµŽŽŽ²²²²±±±±°¯¯¯¯°°°¯®®®®®®®®š£    ¡¡££€€€€¥Šššªª©ª«¬®¯±²²±±±±²ŽµŽŽ³²³Žµ¶¶³¯«š€¡£§©š§©š§š§ŠŠ€€¢¢¡££££££££¢¡¡¡¡¡¡¡ ¡¢¢£¡¢£€¥Š§Š©ªªªªª««¯®®¯®¯±±¶µŽ³³²²²°¬¥¡  ¡¡¢  ¡¢£€¥¥ŠŠ§š©©ªª­­­­¬­­®±²³Ž³²°®§¢        €¡  ¡ ¡¢£€£¢£¥Šš©ª«¬¬««ª««¬¬®±²±­©Š¡¡¡¡¡¡¡¡£¡  ¡¡¢££€¥Š§š©©©ššš©ª«¯¯®­©£        ¡      ¡¢¢¢£€¥ŠŠŠŠŠ§§šª«­«§¢  ¡¡¡¡¡¡¡¡   ¡¡¡    ¡¡¡¢£€¥¥¥ŠŠ§ŠŠŠŠ€¢         ¡¡¡¡¢¢££€¥ŠŠ€¢                  ¡  ¡¡¡¢¢¢€€€£¡   ¡¡¡¡¡¡¢¢¢¡        ¡             ¡¡¡          ¡¢£€£¢  ¡  ¡£¢ ¡   ÉÉÉÉÊËÊÊÉÉÉÉÉÉÉÉÉÈÉÉÊËËËÊÊÊÊËËËËËËËËËËËËËËËËËËËËÊËÌÌÌÌÍÍÎÎÍÍÎÎÍÍÎÎÎÎÎÎÎÎÎÎÏÏÐÐÐÐÏÏÏÐÐÐÏÏÑÌÏÏËÓÑÎÉÄšnrlghfda`^\[YXWWVTPNMMMLKJIHÉÉÉÉËËÊÊÊÊÊÊÊÊÊÊÉÈÈÉÊÊËËÊÊÊÊËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÍÍÎÎÍÍÎÎÍÍÎÎÎÎÎÎÎÎÏÏÏÏÐÐÐÐÏÏÐÐÐÐÏÏÍÐÑÎÎÕÑËÈ°wonhggeb`_][YYXWWVSPNMMMLKJHHÉÉÉÊËËÊËËËËËËËËËÉÈÈÉÉÉÉÊÊÊÊÊÊÊËËËËËËËËËËËËËËËËËËËËÌÌÌÌÍÍÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÐÐÐÐÎÎÎÎÏÏÐÐÐÐÏÏÏÎÍÐÓÑÎÊ¶zpomgggeca_^[ZYXWVUSPNNMMLKJHHÉÉÉÉËËÊÊÊÊÊÊÊÊÊÊÊÉÉÉÉÊÊÊÊÊÊÊÊÊËÊËËËËËËËËËËËËËËËËËËÌÌÌÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÐÐÐÐÏÎÎÎÏÏÐÐÐÐÏÎÑÌÌÑÒÏÉ¹~sommifgfca`_\[XXWVURPNMMMLKJIHÈÈÈÉÉÊÊÊÊÊÊÊÊÊÊÊÊÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËËËËËËËËËËËËËËÌÌÌÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÎÎÏÏÐÐÐÐÐÐÐÐÑÐÏÐÑÑÏÍÏÍÏÏÍÐŒxstpkkieedb`^][ZXXWVTRONLLLKKJIIÈÈÈÉÉÉÊÊÊÊÊÊÊÊÊÊËÊÊÊÊÊÊËÊÊÊÊÊÊÊÊËËËËËËËËËËËËËËËËÌÌÌÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÏÏÐÐÐÐÐÐÐÐÑÐÐÐÑÑÎÎÐËÏÒÉÅlwtuqljhhdca`^\[YXXWUSQONKKKJJJIIÉÉÉÊÉÉÊÊÊÊÊÊÊÊÊÊËÊËËËËËËÊÊËËÊÊÊÊËËËËËËËËËËËËËËËËËËÌÌÍÍÍÍÎÎÎÎÎÎÎÎÍÍÍÍÎÎÏÏÐÐÐÐÐÐÐÐÐÐÑÑÐÏÏÏÐÊÍÑœ¬~f{wsomjfidca`^][ZXWWUSPOMKKJJIIHHÉÉÊÊÉÊÊÊÊÊÊÊÊÊÊËËÊËËËËËËÊÊËËÊÊÊÊËËËËËËËËËËËËËËËËËËÌÌÍÍÍÍÎÎÎÎÎÎÎÎÍÍÍÍÎÎÏÏÐÐÐÐÐÐÐÐÏÑÓÒÐÎÏÐÌÏÐÉ«powvqlkjdgcb`_]\ZYXWVUSPNMKKJJIHHHÉÉÉÉÊÊËËËËÊÊÊÊÊËËËËËËËÊÊËËÊÊÊÊÊÊËËËËËËËËËËËËËËËËÌÌÌÌÍÎÎÎÍÍÎÎÎÎÎÎÎÎÎÎÐÐÐÐÐÐÐÐÐÐÐÐÏÐÕÓÍÐÑÏÊÒÊ²lrvtokigfda`]\\\ZXXVUSQOMLIIIHGGGFÉÉÉÊÊËËËËËÊÊÊÊÊËËËËËËËÊÊËËÊÊÊÊÊÊËËËËËËËËËËËËËËËËÌÌÌÌÎÎÎÎÍÍÎÎÎÎÎÎÏÎÎÎÐÐÐÐÐÐÐÐÐÐÐÏÐÏÐÑÑÐÍÎÒË²fuvsmigecba_]\\[ZXXVUTQNLKIIHHGFFFÈÈÈÉÊËËËËËÊÊÊÊÊËËËËËËËËËÊÊÊÊÊÊËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÌÌÍÎÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÐÐÐÐÐÐÐÏÏÏÏÏÏÒÐÎÐÒÐÌÐÊ·
+zduwrmigeba`_\[[[ZYXWVTQNKJHHHGFFEEÈÈÈÉÊËËËËËÊÊÊÊÊÊËËËËËËËËÊÊÊÊÊÊÌÌÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÌÌÍÎÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÐÐÐÐÐÏÏÏÏÏÏÏÐÐÐÑÐÏË¯xhvxtnjgecb_^[[[ZZXWWUSPNKJHHHGFEEEÈÈÉÉËËËÌËËÊÊÊÊÊÊËËÊÊÊÊËËÊÊÌÌÌÌËËËËËËËËËËÌÌÌÌÌÌÌÌËÌÍÎÎÎÎÎÎÎÎÎÏÏÏÏÎÎÏÏÏÏÏÏÐÐÏÏÏÏÏÏÎÏÐÐÎÑÎžqoywtojgeba_][Z[[YXYWURPNMMJJIHGGFFÈÉÉÉËËÌÌËËÊÊÊÊÊÊÊËÊÊÊÊËËÊÊÌÌÌÌËÌËËËËËËËËÌÌÌÌÌÌÌÌËÌÍÎÎÎÎÎÎÎÎÎÏÏÏÏÏÎÏÏÏÏÏÏÐÐÏÏÏÏÏÏÐÏÐÓÎÎÃxjryvsojgdba^]ZZ[[YXXWTQONNMJJIIHGFFÈÉÉÉËËÌÌËËÊÊÊÊÊÊÊÊÊÊËËÊÊÊÊËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÍÍÎÏÏÏÏÎÏÏÏÏÐÐÐÐÐÏÏÏÐÐÐÐÏÏÏÏÏÏÏÏÒÐÎÓÌÀ­uhpxurnjfdba^]ZZ[[YXXVTQONMMJJIIHGFFÉÉÉÊËËÌÌËËÊÊÊÊÊÊÊÊÊÊËËÊÊÉÉËËËËËÌÌÌÌÌÌÌÌÌÎÎÎÎÎÎÎÎÍÎÏÐÐÐÏÏÏÏÏÏÐÐÐÐÐÏÏÏÐÐÐÐÏÏÏÏÏÏÏÏÐÑÍÒÈ¯thoztpmieca`^\ZZ[[YXWVTRPNMLJJIHGFFEÉÉËËËÌÌÌÊÊÊÊÊÊÊÊÊËËËÊÊÊÊÊÊÊÊÊËËËËÌÌÌËËËËÌÌÍÍÌÌÌÌÎÎÏÐÏÏÏÎÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÐÑÐÐÐÓÒÍÉº¡tiwvtpkgdba`]\ZZ[ZYXWVTQOMLLKJIIGGFEÊÊËËÌÌÌÌÊÊÊÊÊÊÊÊÊËËËÊÊÊÊËËËËÌÌÌÌÍÍÍÍÌÌÌÌÍÍÎÎÍÍÍÍÏÏÐÑÐÐÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÒÒÒÒÒÒÑÑÑÒÉ¹¥}qkyuqmiecbaa]\ZZ[[YXWVTQOMLLKKJIGFEEÌÌÌÌÌËÊÊÊÊÊÊËËËËÊËËËÊÊÊÊËËËËÌÌÌÌÍÍÍÍÍÍÌÌÍÍÎÎÎÎÎÎÎÎÏÏÐÐÏÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÑÑÑÑÑÑÒÏ¿§~mkyrmkgdcbba]\[[[[YXWUSQOMLLLKJIGFEDÌÌÌÌËËÊÊÊÊÊÊËËËËÊËËËÊÊÊÊÌÌÌÌÌÍÍÍÍÍÍÍÍÍÌËÍÍÎÎÎÎÎÎÎÏÏÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÓÓÒÒÒÒÑÒÏÈ«}ilyplifdcbba^\\[[[YWVUSQOMLLLKJIGFEDËËËËÊÊÊÊÊÊËËËËËËÌËÌÌÌÌÍÍÐÐÏÏÏÎÎÎÎÎÎÍÍÍÍÍÎÎÎÎÎÎÎÎÐÐÑÑÒÒÒÒÑÑÐÐÐÐÐÐÒÒÒÒÑÑÑÑÓÔÔÔÔÓÔÔÎŸw
+|hnyskjgdcb``^][[ZZXVVUSQOMLLKJJIGFFEËËËËÊÊÊÊÊÊËËËËËËÌËÍÍÍÍÎÎÑÑÐÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÏÐÐÐÐÑÑÑÑÒÒÑÑÑÑÑÑÓÓÓÓÒÓÓÓÔÔÕÕÔÔÔÔÓŽkP|
+|xhqxqkigdcb`_^][[ZYXVVUSQOMLLJJIHHGFFÊÊÊÊÊÊÊÊËËËËÊÊÊÊÍÍÍÍÍÍÎÎÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÏÐÐÐÐÐÐÐÐÐÏÏÏÐÐÐÐÒÒÒÒÒÒÒÒÔÔÔÕÔÔÔÕÔÔÕÕÕÔÓÓÐI7r{tgtvniheca`_^^\ZYYYXWVUSQOMMLJJIHHGFFËËÊÊÊÊÊÊÌÌÌÌËËËËÍÍÍÍÍÍÎÎÐÐÐÐÑÑÑÑÐÏÐÐÐÐÐÐÏÏÏÏÏÏÏÏÑÑÑÑÑÒÒÒÓÓÓÓÓÓÓÓÕÕÖÖÕÕÖÖÕÖÖÖÖÕÔÔÃ73u}
+zqgxxmgfdba`^]^\ZYYXXVVUSQOMMLJJIHHGFFÊÊÊÊÊÊËËËÌÌÌËËËËÎÍÍÍÏÏÏÏÐÐÑÑÑÒÒÒÏÑÒÐÏÑÓÓÒÏÏÐÏÏÐÏÓÕÓÓÕÓÒÖÕÔÖÕÕÖÓÔÖ××××ØØØ×××××ÖÕÕºf4>z~~}pgwsqfedca`^\]\ZYZYWVUTRPNMMLJJIHGGFFÊÊÊÊÊÊËËËËËËÊÊÊÊÍÍÍÎÏÏÏÏÑÑÒÒÒÓÓÓÐÐÏÐÒÓÒÒÔÒÓÔÓÓÔÓÔÖÕÕÖ×Ö××Õ×ÖÖÖÔÖ×ØØØØÙÙÙØØØØØ×ÖÖ±\6;vz{pjvpoeedca`^\]\ZYZYVVUTRPNMLLJJIHGGFFÊÊÊÊÊÊÊÊËËËËÉÉÉÉÍÍÏÏÏÏÏÏÐÐÐÑÑÒÒÓÑÑÒÔÓÓÔÕÔÔÓÔÔÓÔÔÕÕÕÔÔÖ×Ô×ÕÖÕÔ×Õ×ÖÖ××ØØØÙÚÚÚÛÙØØ×±X6@yxwolunlddccb`^]]\YYYXWVVTRPNLKKJIIHHGFFÊÊÊÊÊÊÊÊÊÊÊÊÉÉÊËÎÎÎÎÏÏÏÑÐÑÑÒÒÓÓÔÓÕÖÕÓÓÖ×ÔÔÓÒÔÑÒÔÔÔÖÕÒÖÙÔØÖÖÖ×Ù×Ø××××ØÙÙÙÚÚÚÛÚÙØØ¶Z2Oztlmuliddddb`^\\[YXYXWVUTRPMLKKIIIHHGFFÊÊËËÊÊÊÊÊÊÊÊËËÌÍÌÎÍÏÐÑÑÒÓÒÔÔÕÕÕÕÔÖÖÔÓÖÖÓÖ×ÕÔÔÓÑÕÑÓ××Ó×Ú×Ù×Ø×ÙÛØÚÙÙÙÙÙÙÚÛÚÙÚÛÛÙØÙ¹c2^|}}rinukheeedca]\\[YXWWWVTRPNLKJJHHHHGFEDÊËËËÊÊËËËËËËÌÍÎÏÎÎÏÐÑÑÓÒÓÓÔÕÕÕÕÔÖÖÔÔÖØÒÉÉÈÄÂÆÅÅÈÉÍÑÒÑÔØØØÕØØÙÛÙÙÚÙÙÙÙÙÚÚÚÙÚÛÛÙØÙŸtDmz{|qfnukifgfdc`]\\[YXWVWVRQONLKJJHHHHGFEDËËËÌËËËËÌÌÍÍÍÎÐÐÐÐÑÑÑÓÒÔÔÕÕÖÖÖÕÕ×ÕÓÔÔÎÆÀœŸž·œ¿ŸÃÁÅÊÌÎÐÑÕÕÔØØØÙ×ØÚÚÚÚÚÚÚÚÛÚÚÜÜÙÙÚÂ}]zw|ymdosijgffeca^][ZZYXVVURQOMLKJJHHHHGFEDÌÌÌÌÌÌÌÌÍÎÎÎÎÏÐÐÒÑÒÓÓÔÔÔÖ××Ø×ÖÖÖÕÓÕÕÌŸ¹»²²¬­Ž·žŸÁÅÆÊÍÍÎÓÔÕÚÙØØ×ÙÚÚÚÚÚÚÚÚÜÚÛÝÜÚÙÛ¿yk~u~wjcophjggfeca_][[ZYXWVVSQOMLKJJHHHHGFEDÍÍÍÎÍÍÎÎÎÎÎÏÏÐÒÒÓÒÓÔÔÔÔÕÖÕ×Ø×ÖÖÕ×ÔÑÈÄ³°Ž©°³Žº·š£¥¹ÊÑ××ÑÖÙÙØÙÜÚÚÙÚÚÚÚÚÚÙÚÝØÜÚÚÙ³urxq{seepnegghfeca_][[ZYXWWWSRPNLKJJIIIIHGFEÍÍÎÎÍÍÏÏÏÏÐÐÑÑÒÓÔÓÔÔÔÔÕÖ×ÖÖ××ÖÖÕÑÏÇ·³Ž¶š¯°³oNC<<?CKdÀÚàÚÕ×ÐÙÙÓÙÙÚÚÚÚÚÚØÚÜØÛÚÙÙ¶st
+unyi`ekjhiggfdb`^[[[ZYWVWWSRPNLKKJIIIIHGFEÎÎÎÎÏÏÎÎÏÏÐÐÑÑÒÓÕÕÕÕÔÕÕÖ×ÖØØÖÖÖÕÍÉœŽ¯ŽŠ©¶f=;?>A<H=>PFYÐÝØÚÓÔÝÜÙÙÚÚÚÚÚÚÙÛÝØÚÙÙØ°musip]]hjhjihgfdc`^[[[YXWVWVRQOMLKJJIIIIHGFEÏÏÏÏÏÐÏÏÏÏÐÐÑÒÓÓÖÕÖÖÔÔÔÔ×ÖØ×ÕÕÖÓÇœ±°­š®­H1?:;D>FEHGACJLÉãÕÙÚ×ÚÙÙÚÚÚÚÚÚÙÛÝÙÚØÛÖŠfvn`dZ`nnjigihedb_\[\[ZYXWVURQONLKKKIIIIHGFEÏÐÐÐÐÑÐÐÐÐÑÒÓÔÕÖÖÖÕÕÔÔÔÔ×Ö××ÕÖÓÏ»·°¬¬€¹x9:@C==?A=@BCBEJMZÊåÖÖÖÙÙÙÚÚÙÙÚÚÚÜÝÚÚØÜÒ fy}hW[^fnqmhgfeda^\[[[[ZZYWUSRQONLLKKIIIIHGFEÐÐÑÑÑÑÑÑÐÐÒÓÔÕÕÖÖÕÕÕÕÔÔÔ××××ÖÔÏÉŽ¶²©¬³;9BDEJF@B>=9?HJGJMdÔÞÛÜÛÙÙÚÚÙÙÚÚÛÝÜÛÚÚÝÎi}yhU[bgkolghddb`]]\\\[ZZXVTRONMKJIIIIIIIHGFFÐÐÐÐÑÑÒÒÑÑÒÓÓÔÕÕÖÖÕÕÕÖÖÖÖÕ××ÔÑÊŸ²³ª§­§P:ICM_db\UF=;BCFR]]]lŽã×ØÕÚÚÚÚÙÙÚÚÛÜÜÛÛÚÛÊn~yl[]chknlhhccb`_^]\\[YXXVSQMLKIHHHHIIIIHGFFÐÐÐÑÑÑÒÓÓÓÓÔÔÕÕÕÕÖÕÖÖ×××ÖÕÖÕÒÎÃ·¯±§¯µ~7@CHfzqpvp[L@>DXmvxotÎÞÕÚÚÚÚÚÙÙÚÚÚÜÛÛÛÚÛÇrxo`\ainnkhfcb`_^]\\\[XVVTRPNMLKJIIIIIIIHGFFÐÑÑÑÒÓÓÓÓÓÓÓÓÔÕÕÖÕÕÖ×××××ÖÕÕÓÊ»³±±«±±^8A@IatuqttnUB=Mj}{{pz®àÔÝÚÙÚÚÙÙÙÙÛÚÜÛÚÚÛÁ
+q|xn[\bhmokggbb_^\[[[[ZWUUSQONMLKJJJJIIIIHGGFÑÑÑÑÓÓÓÓÔÔÓÔÔÔÖÕÕÕÕÕÖÖÕÖÖÕÔÔÑÇž±µ­ª°¯H?DKERgqvuqlUB@Sm{v~jh¡ÕàÙÙÙÚÚÙÙÙÙÚÙÛÛÚÚÙœs{ui[\bhmnkffcb_]\[ZZYXUSSRPOMLKJIIIIIIIIHGFFÒÒÒÒÓÔÔÔÕÕÔÔÕÕÖÖÕÕÕÕÖÕÕÔÕÕÕÔÐÆž²°°¬¬¶E4B?@EOWbhf[L@=G]mnpoj]ËßÓÙÙÙÙÙÙÙÙÚÙÚÚÛÛÙ¹}x}se\]djmnjfeca_][ZYXZXTRQQPOLKJJIIIIIIIIHGFEÒÒÒÓÔÔÔÔÕÕÔÔÕÕÖÖÕÕÕÕÕÕÕÕÓÕÕÔÏÃž³³¯²³±e:=D>>ABDIJGDDAAHV[dUUg~È×ÕÙÚÚÙÙÙÙØÚÙÚÚÛÜ×¶|y~re\^djlljgfba_][YXWYWSQQQPPMLKKJKKJIIIIHGFFÓÓÔÔÔÔÓÓÔÔÔÔÕÖÖÖÖÖÖÖÖÖÖÖÒÓÓÓÌ¿µ±µ°­³¹H=CBA??CC?D@@>=@FLLH\f¶çÓÚÛÚØØÙÙØÙÙÚÙÚÛÕ±zx|pfY_ehijhfgb`^][ZXWVTQPOOOOMLKKKKKJIIIIHGFEÓÓÔÔÔÔÓÓÔÔÓÔÕÕÖÖÕÖÖÖÖÖÖÖÓÔÓÓÌŸ²¯·®ªš­»J??>>BDC?C@==??CG@HVkz¿ÝØÙÚÙØ×ØÙØÚÚÚÙÛÛÑ«|z}pfX`fggghfga`^\[ZXWVTQOOOOONMKKKKKJIIIIHGFEÓÓÓÓÔÔÓÓÓÓÓÔÕÕÖÖÕÕÕÖÕÕÕÕÕÖÔÔÍœ±¯«¬¯¯šš±ªx]B<<69C??AEEB@D?O]`áäÐÖÙÙØØÚÚÙÜÛÚÚÜÜÍ£}}odY`fhfffeec`^][ZXVVTQOOONNNMKJKKJIIIIIHGFEÓÓÓÓÓÔÓÓÓÓÔÔÕÖÖÖÕÕÕÖÖÖÕÕÔÕÕÔÍœ²¯¯¬§šš©­¯«²ŠviXIJB:7:9;B=K^ÍãÛÛÖ×Ø×ØÚÛÙÜÚÙÙÜÛÊz}x{l]X`ghggeccb`^][ZXVUSPNMMLMNMKJJJJIIIIIHGFEÔÔÔÔÔÓÔÔÔÓÓÔÔÕÖÖÖÖÖÖÖÖÖÖÓÔÕÓÐÇº®ª¥©¥£Š £Š©¬®®­«ª©¥²ÃÎÞÕÜÑÖ××Õ×ÙÙØÙØØØÝÙÌxwwh[Yagjhgeddba^]\ZXVSQPQRNLOOMKJKKJIIIIIHGFEÔÔÔÔÔÔÔÔÔÔÔÔÔÕÖÖÖÖÖÖÕÕÕÕÓÓÓÓÒÍÁŽš¢¥  £  ¡£Š©ª¬®ªª°¶·»ÀœÆÁÎÌÔ××Ö××ÕÖØØ×ØØ×ÖÛ×Éx~wwh[Zdijgfdcbb`^\[YWUSONPRNKPOMKJJJIHIIIIHGFEÓÓÓÓÓÓÔÔÔÕÕÕÔÕÕÕÖÖÖÖÖÖÖÖÔÒÑÒÔÓËÂµ¬§ ¥£ ¡€¥Š€¥š©©©«²žºÄÍÏÕÒÖ×ØÖÖ××ÖØÙ×ÔÚ×Æy~~vuf\[fjkgfdbba`][ZXUSTPMRUPNRONLKJIHHIIIIHGFEÓÓÓÓÓÓÔÔÕÕÕÕÔÕÕÕÖÖÖÖÖÖÕÕÖÓÐÐÑÒÐÍÈœ³§¢£ ¡¡€¥¥š«®·žÃÂÔÎÛÕÖÖ×ÖÖ×ÖÕ×Ù×ÔÙØÃx{{tqd[[glligebca_]ZXWTQPPPSURPSONLKJIIHIIIIHGFEÓÓÓÔÓÓÔÔÕÕÕÕÕÕÕÔÔÔÔÔÔÔÔÔÔÓÑÐÏÏÐÒÏÊÃ»¶³¬ššŠ€¢¡¢ŠšŠ€§¬°ŸÁÄÉÍÎÓÔÔÖÖÖÖ×ÕÕÓ×ÖÔØ×œyzyroc\[glkhgedd`_\YWVSPKPRRSRPPONLKJJJIIIIIHGFEÓÓÓÓÓÓÔÔÔÔÔÕÕÕÕÕÔÔÔÔÔÔÔÔÐÒÓÓÒÏÐÔÐÏÍÉÇÅÁœ±°°®­­­®š­°¯¯Ž¹ŸÄÉÎÔÓÔÕØÕÕÖÖ××ÕÕÓÖÕÔÙ×¹yyxrnb]\fkjgfdcc`_\XVURNJRUSSTRPNMLKJJJJIIIIHGFEÓÓÓÓÔÔÓÓÔÔÔÔÔÔÔÔÔÔÔÔÔÔÕÕÏÐÒÓÑÍËÏÎÎÌÉÈÇÇÄÃÃÂ¿Œº»»ŒŸÁÂÃÆÊÎÏÏÖÒÖÑÕØÕÕÖ×ÖÖÕÕÕÖÕÖØÖŽzxxrma^]gjhdddbc_^[WUTPLMTVTTSRRMMLJJIJJIIIIHGFEÓÓÓÓÔÔÓÓÔÔÔÔÔÔÔÔÓÓÓÓÓÓÔÔÑÏÐÐÍÆÃÅÈÊÉÇÃÀ¿»Žµ¶¶µµ·žº»œÁÅÉÏÑÏÐ×Õ×ÓÕ×ÕÕÖ×ÖÖÕÕÕÖÓÔ×Ó°zxxrla_^hjgcccbc^^ZVTSOKPTUTTRQRMLKJIIIIIIIIHGFEÒÒÒÓÓÓÒÓÓÓÔÔÔÔÔÔÓÓÓÓÓÓÔÔÓÐÏÍÅ¿ŽŽž¹»º·ºŒº°¯­­®¯®¬¬¬«®µº»œÈÄÈËÍÍÑÜÖ×ÕÕÖÕÓÔÖ××ÓÖÒ«yyvqib^`ijgcbccb`[YWTONPRUSRTUQMLLKJJIIIIIIIHGFEÒÒÒÒÓÓÒÒÓÓÔÔÔÔÔÔÒÒÒÒÒÒÓÓÒÐÐÎÂ¶šŠ©ª­­¬¯²°»¹·µŽ³²±³³°°²²°±¶µ¹ŒÁÊÑÙÕ×ÕÕ×ÕÓÕÕÕÕÒÕÐš}zzvpib^agigdccba\ZYXTQQTSUSQTTPMNMKJIIIJIIIIHGFEÒÒÒÒÒÓÒÒÒÒÒÒÓÓÓÓÑÑÑÒÒÒÒÒÒÏÏÌŒ­­±¬ª¬­«««¬­¯°²®¯­­®¬«¬²ŽžŒÄÐÖÙÔÖÖÕ×ÖÕÕ×ÖÕÑÕÍ€{{zupia_bdffdba`^][ZXURSUUWTSUTQOONLJJJJJIIIHHGFEÒÒÒÒÒÓÒÒÒÒÒÒÓÓÓÒÒÒÒÒÒÒÒÒÔÏÊÅ·š«³®©ª¬¬«ª§¥£¢£¢€ŠŠ©ª«¯ŽžÀÅÌÖÖÔÔ×ÖÕÖÖÔÕÕÕÓÒÖË¡||zuoha_cbefdba`^][YWVTUWVWUSTTQPONLKKJJJJIIHGGFEÒÒÒÒÒÓÓÓÓÓÒÒÒÒÒÒÓÔÒÒÑÑÑÒÔËÃ¿µ¬€­®¬¬«šš§§§Š§ª¢€£Šš©«°µ¹ÂÊÐÖÓÒÕØ×ÕÔÔÓÕÒÒÑÑÕÈ }ztng`_ddggdccb`[ZXXVVWXVWUSSRPPONNNMLKJKJIHHHGFÑÑÒÒÒÒÓÓÒÒÑÑÒÒÒÓÒÓÒÑÐÐÐÐÌÄ»¹¶³¥­­¬­¬§Š¥§Š£€Š€¥¥Šššª±¹ºÂÉÎÓÒÔÓ××ÕÔÔÓÔÔÓÒÒÕÄ~}zsng`_efgfdccb`[ZXXWWWWVWUSRQOPNNNOONLJLJIHHHGFÐÑÑÑÑÒÒÒÑÑÑÑÒÒÒÒÑÑÒÑÏÐÎÎÅœµŽžº£š¯«Šš©¥£¢€€£€¥¢££¥šš«²¹¹¿ÄÈÌÌÌÏÕ×ÖÖÖÔÔÖÖÓÒÔÀ}|xsmg`_fghecaa_\[[ZYWWWVWXVTSQOPOOOOPOMLLJHHHHGFÐÐÐÐÑÑÑÑÐÐÐÑÑÑÑÒÑÑÐÐÏÐÏÎÅŸµµºÀ© §­«§š§¥¢¢£¥£€¥¢£€¥§§©¯µ·¿ÂÆÊÈÆÌÓÖÖ××ÕÔÔÓÒÑÒœ}}yrmf__fihfcba^ZY[[ZXXXXWXVTROMPPPOOPPONLJHGGHGFÎÎÐÏÏÏÑÑÎÎÏÐÏÎÏÑÓÕÐÐÓÏÎÐÃŒž·»Œµ€€«¬ŠŠ¥£Š€££¥Š¥¡¢¢€§š«¯²¶œÁÉÈÁÂÊÒÖÕÖÖÓÔÓÓÑÒÓ»}~yrnf__eghfccc`\ZZ[[ZYYXVVUSSRPPQPPPQPNMKJIGGFFFÏÏÐÐÐÑÑÑÍÍÎÎÎÎÏÐÒÔÑÒÑÏÐÏÅŒž¶·¹· ¥¥«®¥¥£€€€£€Š§¥¡¢¢€§šª°±µº¿ÇÉ¿¿ÊÒÕÕÔÔÒÓÑÑÐÑÒ¹~}ysng`afihfdcd`\[[\\ZYYXVUUTTSRRRRQQQPNMKIHGGGFFÐÐÐÐÑÑÑÒÐÐÐÏÐÑÑÐÐÒÐÑÏÍÑÏÂ¹¹·¶ºŸ©€©§­­¥¥££€£££¥Š€¡¢¢€ŠŠª¯²ŽžœÆÈ¿œËÒÔÓÔÔÒÒÑÑÐÑÑ¶~ztogabfjhfeeeb][[\\\[YXUUUTUTTTSRQPPOMKKIGFGGFEÐÐÐÐÑÑÑÑÏÏÎÎÎÐÐÏÐÑÐÑÍÎÒÍÀ¶žžŽ»Ã°©¬©®­¥¥€¢££¢¢£€£¡¢¢€ŠŠª¯³³žŸÆÄœŸÌÓÔÒÔÔÒÒÒÒÑÓÑŽ~ztohabfihfeeeb^\\]]\[XXVUUUUUTTTSQPONLKJIGFFFEDÐÐÐÐÐÑÐÐÎÎÎÎÏÑÒÐÒÑÑÑÐÑÓÌÂ·º¹Ž¹Â°ª¯¬°­€€££££¢¢¢£¢¡¢¢€§§©¯³³ºÁÅ¿¹ÃÍÒÕÓÓÔÓÓÒÒÒÔÐ²zuogaaeggfeccb`]]]]\[XWWWWVUUTTUTRPONLKIIHGEDDDÐÐÐÐÑÑÐÐÎÎÑÏÎÌÌÏÎÑÑÐÐÑÒÌÁ¹º¹µ¹¿°§®­²¯€¢¡£££¢¡¢¢¢¡¢¢€§§ª°³Ž»ÁÂ»žÅÌÓÔÑÒÒÓÒÓÑÑÔÐ°~zuogabdgggecaa`]]]\\[XWXWWVUTSRSQPNLKJJHHHGEDCDÎÎÏÏÐÐÑÑÌÎÐÌÁ··ŸÈÐÐÎÏÎÏÍœž¹¶Ž·Ÿ²š­«²°¥¢¡£¢£¢¢¡¡¢ ¡¢€§§ª°³¶Œ¿À»ºÄËÓÓÐÑÒÐÏÒÐÏÓÏ¯~}yuogbbdhggfdba`^^]\\ZXWXWVTRQONONLJIHGGGGGFEDDDÎÏÎÎÎÐÏÏÏÑÓÊžŠ§¯ÆÑÐÎÏÎÎÎŒž¹¶Ž¶œ³«®«±°Š€€¢¡¢   ¡¡¡¡€§§ª°Ž¹ŒœœœŒÄÌÓÔÐÑÒÏÎÒÏÎÒÏ®~}yuohcceihgfecb`^^]\[ZXWVUTRPNLKMLKIGGFGFFEEEEDDÎÎÏÏÏÏÏÍÍÌÑÊ°¢€«ÆÒÏÐÐÌÍÇœ··Ž·²œ²¬­¬±±§££¢¢¢ ¡¡ ¡ ¡£¥§š«±·žœ¿œœŸÃÌÒÒÐÒÒÐÒÓÐÏÔÒ«~~wrpiadfiihgdba`^^][ZYVVSRQOMLIIKKJIHGGGFFFFEEEEÐÑÐÐÏÐÏÏÑÐÐÅ­ ¡€»ÈÈÊËËÏËŸ·¶²µ±»±«­­³Ž©€¡¢¢¢  ¡ ¡ ¡¢¥§š«±³¹ŒŸ¿ÁŸÃÍÒÓÒÓÒÑÓÓÑÎÓÏ©
+}zxsphbdeiihgdba`_^\ZYWVUQPONLKIHLKKIIHHIGGGFEEDDËËÊÊÉÉÉÉÆÄÂž§ ¢®Ž¶»¿ÄÏËÁ¹Ž³¶±¹°«­­Žµ«€¡£¢¢  ¡¡  ¡€§š«±±»ŒœÃÇ¿ÃÉÎÐÐÑÐÐÒÏÏÎÓÍš
+~xxsnideeiihgdba`_^[XWVVVQPONMLKJLKJIIIJJIIHGFEDDŸŸŸŸœŒœœ±¯­§ ¢¢¥Š¥«²ŒËÊÃ»µ³¶²·®«­­²³ª¥£¢¢¢¡  ¡¡ ¡€šš«±²»œ¹ÅÈÁÂÉÌÎÐÑÑÐÑÎÎÎÕÌš{yyqmjdfhkjjhecb_^]ZXWVUURQQPONLLKKJJJJJJJJIHGFEE¬««««ªª©€£¡ ¢¢£Šš±ÀÅŸº³Ž¶²µ­ª­­±°š€€¢¢¡¡ ¡¥š©¬±²žŸ¹ÈÇÁÀÊÊÌÐÐÑÐÏÑÐÎÓË¥x|zplkefklkjiecb`[[ZXXVUTQQPOONLLLKKKKKJJIIIIHGGF¡¡ ¡  ¢¢ ¥€¡Š°µ·ºŽŽ¶Ž¶®©­­°¯§£¢¡¡    ¡¥š©­²µ·ŸŒÊÇÁÀÌËÎÑÐÐÐÎÒÏÏÑÍ€yyzpllffkhgfeb`_]ZZZYYWUTRQQPOONMMMLLLLKJHHIIHHGG¢¢¡¡¡¡¡¡¢¢¡¡ ¡ Š²ºµŽ¶¶¶¯©­¬¯¯Š¢    ¡¡€šª®Žžµž¿ÆÇÁÄÌÌÐÓÏÏÒÒÐÍÑÐÎ uqzslkhfgbbba^]\ZZZZYYWUTRRRQQQPPPNLKKLKKIJJJIHHG£¢ ¡¡ ¥€®ºŽ³²³Ž®ª®«®®Š¢¡   ¡¡¡€§©®¶¹²°œŸÄŸÇÅÅËÏÊÊÏÐÎËÒÏÍxljyvljhecaa``_^\[ZZZYYWVURQQQQQQQQOLJJKKKKKKKJIHG¢¢¡¡  ¡¢   ª¹¶³³±µ­®®®®­š€¡   £§ª­Ž»³¯·Ž¹¿Éº¶»ÀŸŸÄËÑÊÓÓÊhUexvljhe````__]\[ZZZYXWUTSRRQQPONROLJJKKKKKKKJIHH   ¢¶µ³²²¶±®­®¯®©€¡ €§©­Žž­¬¯¬¶¿É³®®³Ž·œÃÌÅÆÎ¹w_Mbvwliheb```_^][ZZZZZYXWVUTSRRQPOROMLLMMMLLMLLKJI¡¡¢¢¢¢¡¡   ¶·²±°³±°«ª¬­š¢ €§©¬³³š«ššµÄÉµ­ª®±µ¹»·Ž¯»bZM^tvlgddaccb`_^\[ZZZZYXWVTTTTTTSRRQOOPQPONNNNONML¥¥Š§§Š¥€¡¡¡¡¶ž±°¯®®±«ªª¬š¢€š©«±­§ªŠ©¶ÊÃ³¬«®¯¯®®©ªŠ§WXI_svmgcbacccba_]]ZZZZYXWWUUUUVUUUSRRRSSRPNNOOPOML¥Š§šš§Š¥¢¢£¡±µ±±²°°¯¬©ª¬ª££©«ª­šššŠ©žÌŒ°­­¯­«©ŠŠŠŠuWVLcuumjfcaccba`^^]^^^][ZYXXWXWVUTTSSRSTSQONNNNNMKJ¥Š§§§§ŠŠ¢¢¢¡    ¡ ª²±±³²°««ª©««¥¢š©©©Š©Š¥ª»Ë¶°°±±­ªšŠ€¡£xWONgusljfdcddccb`__^^^][ZYXXWXWVUTTTRQRRQOMLLKLLKIGš©©©©©©©§Š€€£€€€£¢¡  Š±²°²²®©¬¬š©ª¥ ¢¥§§§Š§¥£¬ÁÂ²¬¬­¬©ššŠ©££VJQjwtmkfddgffdcba`]]]]\[ZYXXWWUUUUSRQQQPNLLKKJJIHF«««««««¬¯­ªš§§Š¥¢¢¡     €°Ž®±²­«¯¯©šª€ ¡¢¥Š¥Š£¢Š¢ªÇº­ªš©©ššš¥€€¢]U]o{wolgeehgfecba`]]]]\[[ZYYXWUTTTSRQQQPNLMLKKJJHF««««««¬¬¬¬ªŠ£¡¡€¡ ¡¡¡¢££Š£®¶¯­°©§ª¯¯¯¬€¡¢ Š«Š¥£Š€°ÇŽª§©šŠŠ¥¥Š¥¢¢ jXfvyyrkhfegfecb``^]\\\\[[ZXXWVUUTTSRQQQOMLNLIHHGFEššš§§š©ªªªªš€¢¢£¢¢¢¢£€¥¥©€¬±­­®©§š¬­°­Š ¡ š­Š§ŠŠŠµÀ­ª©ª©§§¥¥§¢¢ u`lxywrjhfeedcb`^]\[[\\]\[ZXXXWVUUTSRQQPOMKLJGEEEDC§Š¥€€¥šš§Š©«©©«ššŠ¥€€¥¥€ª§©­­¬¬«šš§ª­­Š¢¢£«°ªªªš«Œ¹««šª©§Š¥£¥£ ¢zeswwuoheededdba_]\Z\]]\[ZZYYXXWWVUSSRQPOMKJHFDDDCA§Š¥€€¥§š¥£©­«­°¬ªšŠ¥¥¥Š€©ššª­­¬­ª©ššª©¢¡«¯ª¬ªª°œ²¬¬ª«š§§Š€¥š£¡hsstqkgdccddcb_^]\\\\]\[[[ZYXXWVVVTTSQPOMKKIGEEDCB§§ŠŠŠŠŠŠŠ¢Š©§©«ŠŠ¥¥¥Š§§§Š©šª¬­¬®®¬«©§¥€¯±­­©¬²·¯®ª­­ªš©©ŠŠ¥§¢ snonmkgecbcb`_]^\][[[ZZ[[\[YYWVUUVTTSQOONLMJHFFEDC§§§§ŠŠ¥¥§€¥Š¥ŠŠ¢¥¥¥ŠŠ§§§Ššª©¬ª©«®¬ªšŠ€ €¬³³°°«¯µ³¯°ª­­ª©ª©ŠŠ€Š¢ ¡wjlkljhfdcba`^]]]]]\ZYYZ[\[ZYWUUUVUUSPOONMMJGFEEDCšššš§§ŠŠ§¥¥¥§§§£Š§©§Š¥¥¥§§ª©©ª««­««ª§¥ €©°±®¬¯¬¯Ž±¯­¬¬­ªš©šŠŠš£¢€£ymllkjhgecdba_^___\\[ZZ[Z[[ZXWVUUUVVTPNPONMKGFEEDC©©©šššššš§¥¥šš¥£¥§©š§¥¥¥¥Š§©©«««­­«¬ª§¥¢£©±µ°«ª­­¬±¯­Š¯«®¬ª«š§ššŠ¥£¡slkjjifdcdbaa`^]][Z[Z[[[ZZZYXWVUUUVSOMOONNKHFFEDC­ªª©ªª©ªª§£¢€¥¥š©¥¢¥¥Šš£ŠŠŠšªª©š®¬««ªª§£ §«³·®©¥­š¬©±§«š©¬ª¬©§ŠŠ§¥€§€¢rolnifgcdcbba``^]]][[ZZZZ]ZZZWWXVURPMJLOOPMIGGFED­­®«««©§§¥¥ŠŠ§š©€€€€£§€§šššª«¬«¬©š««©ª©Š ¢¡ £©­±­Šª®ª±š«¯ª±®š«š©¬€Š¥Š¡tmknlhgccccbbb`^]^]\\[[ZZ\Z[[XWWUTPMKHILNPNJIHGFE©ª©š§©©šŠŠ©§¢¢¢¡¢š¥ª¥Šš©©ªª««š«¬ªªš¥€¡ ¡   €­°¬©¬¬€£¬ªš±©§«­©¬©Š€š¥~xmkkljifcccccbca_^_^]]\\\\[Z\\YXWTTNIHGFJNSPMJIGFEš¬©ª©ªš¥££€§ªš§©ª«¬¬¬¬¬©ª­­­­©©©Š€£Šš©¯°¬¬š§µš«ª±­«šª©©~xzsutjmkkihgdfdcccdb`^__^]]]\][Z\\ZYXUTMGGGDHOTQNKIHFE ~||uks£««£­¢Š§§§©ªªš¬«««©««š«©¡©¯ª««¬¯­©zny¡°qf¡Ž¢¶Š®¥|xvvrpmkiiifheeccdc`^^^]]\\]]][[[YYYWTMFGHDENSQMKIHGEzojwyljmqkelz~²Ž¬¬ª©ª«ª§­¯±®¬®®šŠ}w š©®¬Š ŠtjŸtigv­ €~{yyvrusnkijjeffeccdca_^^^]]\]]][\[YYZYTNGGIDDMSPMKJHGFq{mlae`Sdkromottslrsw±·ž·µ¶žž¶¶žº¹»œ²¡wsxzx©Š Šx}xÄžlnljy
+~urwz}wv|yoliiiccfedddca_^^^^]\\\\Z[[YY[YUQIHJECKRONLKJHGjh\f_^_b]gkjlqstmjru{Žµ·¶žŒ¿¿ÄÂ¿œÀ»¡|zwssuwxw} Š­«zsl×¢hhaotx
+tvq|z{€tmiijeefedcdca_]]^^]]\[\Z[[YY[YVSKIKFCJQOMLLKIH_ddeac^[[`fhehnmomlx £«­tvztsw|wsvry~ªsxsÀjhsojx|rwutu~®±mikfjigedccdca_]]]\[[\\\ZZ[YYZZXVOLMHCIONLKJJIHehfe`b``aa__chkjnto|{}zz}}~~{{unpppnquvyzzqyuszs
+
+npiojikjkrplgwŠš®nhkhihheddddca^\\\\[[\]\[Z[YZ[YXYSNNLHJONMLKJIGgkkmggca`_]^dgfjpr~}y||{{|}|wvonqxzsmkkmlknnkuwpunpqsktut}quvmgki[mmfmx«žpilihfhfecccb`_[\\\[[\\[ZZ[YZ[ZW[UMNOKIONNMLJGEfknpkib_\__aecewv~xyywy}}wspkihosjjgdejkgggiggplljlljslptolpmeju€`fei{qkkiheefeccba__\\\\[Z[[ZYYZYZ[ZX[WPPPMJPONMKIFDijijffb`baa`b_hÀœµrvsqqrxyumjehjcl{timgbhpadomiciv}pmhhhekklqh_ehsjbgqqkmt|qkihhdbddddcb__\\\[[ZZYZYZ[ZZ[Z[[YUTRPNPOMLJHECiifgdebaea_^`_f®È¶ ugnjlmnprpleahkafwvlnjgpc`mpqih~nefnogbhtk[\Vefiflnkillipnjfffdbbbdcba__\[ZZZZ[Z[Z[\[[\Z[YYXVTSSQPMKHHEDghfgddaac__]abcu¥§ xehbfhhffhhfkijnges|pghlsmfnkjhgzkkdjideaid\[Tc]cfolfikkrjliedbab_`aa`_^^\[ZYZZ[[[Z[\\\]ZZYXWUTTSRONKJHFDggdd`a`bb`b]afcn}t\jhigheegllkkjfiml{opqjrpyjeopryxoifiefdba^a_V]iehjfbbdghhlgdb^^b\]^^\[\[^\ZYYYZZ[Z[\[[]ZZZZXUUVSQONLJHFDdedbabdcbcccbdiknmlgmiiiigecfhifggeginz{ungz{wuppxvfkjgceeegb`]\`~nfc]YZ\^aabba``bdc`^\daT^[\][YXYZZZ[\\\ZZZYWVVUTTROLJIGECccccb`__`bdedfikgec`deggggda`aa^cfgjidghlijjfztt{yq{p`egecdecba[\Z[g_e`WQSW[_Z\__]]bhlghflh[aZ[[[[[ZYYYZZZYYYZYXWVUUUQOLJIGEC__`bb`___accccegedcebdcacdc`^^_^^achhdgga`ekgznlot|znrvcZ^`_^aa`]`UWSSNNb^WRSSSTUY]_\[eqmkprtl[Y_]\_cd`]ZZ\\[ZZZYXXWUTTTQOMKIGEC^_____^]]]]]^`abbaae^`\Y^ab`__aa``^`a`dd`_bfbgbajhkmc]_XYZ[[[]_^\]TTPTKNWWUTWWTSTV[`^]hv|splihdfa_^cilgbZ[\\ZYYYZYXWWUTSRPMLJHEC]`a^]^\YZYXY\^_^^\[_Y]\[]_`_^^^^_`]^^[]\``aa``a^]b^\[YZYXYZYYYZ[XXXUTYVT[XQMMLKLQRW\[[dnokonigeea^]bikgb]]^][ZZ[\ZYYYYXWUSPOMKHEX]`__a`^\[Z[]^\Z[[\_\^^]\]__^]\\]_]__^`^`aaaaab`Zb[Y^\[^WWWWURPOQQXSTTULJHDADFJNNOQTUWZ^dbeeabgja_^`efc___^^]\\[ZXXXYYYXZWUTSROMWY]```ad_]\\]\[YZ\^^_\[ZY[^__^^]^`]]\[^]]^]]^^]\]`[\aZWZSRRROLJKMMNMNKICDEDDFGILMPQSW[YV^abb`bgja`__aa`_^]\\\[ZXXXYYYYXX[ZZYYXWW][]`^Y[b_^]\\]^_^`_Z_Z[]XZ]_^]^][^]^][^\]]\\]]Z^Z\Z[\YVRMKKMMMNPIICEIDBABFHIMMORQTVV\b^VW^`cd``a```___`aa_^]^^][[\]][ZY[ZZ\[YYZ[[]_ca_`]]`a_]^]Z\^abb_\YYZ[\\\]\[[[[]]]]][[]\YYZVYVWZVQMONDBIGEOMGDHFCB=>BEHKMNOPPORY_^]X\\]a`\[^]_[WZ]X]\__\\^^[\\\^ZY^[]]\ZYZ]UY[]_cf_\_`^_`ZQTX`gjg_XWY[[[Z[ZXXXYZZZZ[ZZYXXYYUXTTUQMJFHDBDA?DNLIKJFC<:=?ACFKNORMGKUYUXVWXXXYZ][\^\YYYZ\[Z\\[][\^^abbdddc`^\]^RVVXXZ^YY]\YZ]YQUVZ`fe_YYYYWVVYZYYZZZZYZXYXVVWWWUUPSXTPJE@>A?99>CFFIICCDA@BCCFJIMRQJHMOLOMMPOPUWUTVZ][Z]X^\[^^]c^^_^^aa]\\[ZYZ[]XWY^ZUXYW[[XWZZWXUTV[\[ZZYXVUVXYWVVVWXWWWXWWWWVTVVQTWVTRMB>=;<?@;<:@E@AGFCCFGIIDHKPRNHHJHLNOQPQUSXWVYZWXWYYZ^`__][]]Z[ZUWVVWY[]^XVX`_YZZUX]__][ZWVVWYYYYYYXXYXWUWVSSTVWWVUUVWVTSSTQOOMRVLHE=7=A;?>7:BA@@@>>@BDDCEDIOLFIQLWVRWVSXUYVSVWWY^VUY[a`WXV[_\[[X\[[[\\]\XVU[\ZZTVUX^ba_^[\]^]ZZ[[YVUVWWUXXUUUWWWTSRQQQPONNILOLMMKGJJA;<<<B@=?BD@=?=<=?AGFGJMLJNTRZVQXXV]VTRTVUX`_X\\TY^XTSV\\ZZZ[[[[[ZYY^[Y\ZVWUXVTVY\___^_``]\]\ZWUUVWWTVUTTSTTQVUOMPOJKLIPSOIFLHJPKA?C9@DCABIHBE@=AAAIGILOOOPRTRPQTUW\ZUVWTQV\VW]ZOOVTRSSVYYVUXX[\[[ZY\XX]ULS[XYVRQTXYZZ\`b`^^[[]]\ZWUSWXXUTTUQ[]SNSQILRSTPGFICFECEIG@C>>FGFKICF?>GF@EFFIMOOPRWLOWTSXXUTWUPRYZQTWURQPMPSQQXZWVWX[\[ZXW ¡£¥Š€€££¢££€§©«ªª««©€£  ¢£¢¢££¡¡¡     ¢¢¢¢£££€£Š§Š¥§Š£¢¢€€£€€€¥Š§šª««¬«­­¬­°±°²³³Žµ¶žžºŒœ¿ÀÂÄÆÊÊÊÊÊÉÈÈÅÃÁ¿¿ŸŸŸ ¡£¥Š££££¢££€Š©ªª«¬«©£¢¡ ¡¢¢¡¢¢¡¡   ¡¡¡¡¡¡¡¢¢€¥€£¥€¢¡¡££££££¥Š§š©ª««¬®®­®±²±³ŽŽµ¶·¹¹ºŒŸ¿ÀÂÄÆÊÊÊÊÉÉÈÇÄÄÃÂÂÁÀ¿¡£¥Š££¡¡¢¢££Ššªª««ªš€£¡      ¡¡    ¡¢¡¡£¢  ¡¡¡££€£¥Š§š©ª«««­®®¯±²±µµ¶·ž¹ºººŒ¿ÁÁÂÅÇÊÊÊÊÊÉÈÇÄÅÄÄÅÃÂÁ ¡£€¢¢¡¡¡¡¢¢¥§ššª«ª©¥£¡        ¡¢£€€€¥Š§š©ª«¬­®¯®¯±²²¶¶··ž¹º»ºŒ¿ÁÁÂÅÇËËËËÊÉÈÇÄÄÄÄÅÄÃÂ  ¡¡¡    ¡¡£¥ššª¬«©¥£      ¡¡£€€¥€¥Š§ª««¬±²²²²Ž¶¶···žž¹ºº»Œ¿ÂÂÃÆÉÌÌËËÊÈÇÆÅÅÄÄÄÄÃÃ     ¢¥§šª¬¬ª¥¢     ¡¡£€¥¥¥€Šš«­­®³³ŽŽµ¶··žžž¹¹º»ŒŒŒÀÂÄÄÆÊËËÊÊÈÇÅÄÆÆÄÄÄÄÄÄ ¡£¥§šª¬¬©¥¡        ¡¢£€¥Š¥Ššª­¯±²Žµ¶žžžžžžžž¹ºŒœŸŸŸÀÃÅÅÆËÉÉÊÉÇÆÄÃÆÆÅÄÅÅÅÅ ¡¡£Šššª­­ª€¡  ¡¡¡  ¡¡¢£€¥ŠŠŠ§©¬®±³Ž·¹ºœŸœ»º¹¹ººŒœ¿À¿¿ÀÄÆÆÇÌËÉÊÉÇÆÄÃÅÆÅÅÆÆÅÅ ¡£Ššš«¯¯¬¥¢    ¡¡¢¡¡¡¡¢¢£€€¥ŠŠššª¬°³Žµ·¹»Ÿ¿¿œŒ»»»ŒŸ¿ÁÁÂÁÂÅÆÅÆÊÊÊÊÉÈÆÅÄÇÇÆÅÆÆÆÅ ¢¢€Šš©¬¯¯­¥¡  ¡¢¢¢¢¡¢¢¢££€€¥ŠŠš©ª¬®²µ¶·žºŒ¿ÀÀ¿ŸŒŒŒœŸÀÁÂÂÂÃÅÆÅÅÈÊÊÉÉÇÆÆÅÅÅÄÄÅÅÄÄ¡¢££€§©­°±¯Š£    ¢¢¡¢¢¢¢¢¥¥ŠŠ§šªª«¬®°³µ·ž·¹ŒŸ¿ÀŸŸŸŸœŸ¿ÀÁÂÃÃÄÆÅÄÄÆÉÉÈÇÇÆÅÄÅÅÄÄÅÄÄÄ¡£¥£¥§©¬¯¯­§¥¢    ¢¢¡¢¢¢££ŠŠŠ§š©««­­®°³µ·žž¹»œŸ¿Ÿ¿Ÿ¿œŸ¿ÀÁÂÅÄÄÄÃÂÂÅÅÆÆÆÆÆÅÅÅÅÄÃÃÄÄÄ¡¢¥§§š©ª«¬ªš©š¥£     ¡¡¡¢¢¡¡¡¡££€€¥¥¥Š§š©«­­¯±²Ž·ž»»»œ¿ÀÁÀŸŸœŸ¿ÀÂÃÅÃÂÁÀ¿ÁÂÁÂÄÆÇÇÆÅÄÄÃÁÁÀÀÀ ¡¢£¥§ª©ªª««š§ª©§¥¢¡¡¢   ¡¡¡¢¢ ¡¡¢£€€€¥¥¥Š§©©ª­­¯°±³¶¶»»»ŒŸ¿ÀÀŸœœœŸÀÁÂÅÃÁÀ¿ŸÀÀŸÀÂÅÇÇÆÆÄÄÃÂÀ¿¿¿  ¡¢€Š§š©ª©ª«¬«««ªš§§¥¢¡      ¡¡¡¡¡¢€€£€ŠŠŠ§©ª««­¬®°²³µ¶¹¹¹º»ŒœŸœŒŒ»ŒŸ¿ÀÃÂÂÀŸŸŸŸ»ŸÀÃÅÅÅÅÄÃÃÁÀÀŸŸ¡¢¢¡ ¡£Ššªª«¬«ª«¬­¬¬««ªªª§¢¡¡  ¡¡¡¡¡¡¢¢€¥€€š§§§©ª«««¬®¯±³³µžžž¹ººŒŒœŒº»ºœœ¿¿¿ÀŸŸœ»º»œ¿ÀÂÄÄÄÄÃÂÀ¿ŸœœŠŠ¥£¡   £§©ª¬¯±­«««¬­¬¬¬ªªªª§¡     ¡¡  ¡¡¡¢¢¢££¥¥¥¥ššššª««¬¬­®°±³Ž³¶¶·ž¹ºº»»»¹¹¹ººŒŒœŒŒ»º¹žž¹»œ¿ÁÂÃÄÃÁÀœœœœ¬¬ªš€¢¢¢¥š«­¯°±³­¬ªª««««««ªªš€   ¡        ¢¢¡¡¡¡¢¢¢¢££¥Š¥¥ššššª««¬­®¯°²³Žµµµ¶¶ž¹ž¹º¹ž···ž¹ºº»»¹ž···ž¹»ŒŸ¿ÀÁÁ¿ŸŒŒŒŒŽ³±­©Š¥¥ª¬¯±³³³Ž®¬ª©©ªªªªª«©Š¡  ¡¡¡¡¡¢¡    ¡¡¢¢¡¡¢¢¢¢¢££€¥Š¥Šššššª©ª¬­®¯°²³ŽŽµµµ¶·ž··¹ž·¶µ¶¶·žž¹¹žž···ž¹º»ŒœŸÀ¿¿ŸŸŸŸŸ¹žµ±­ªšš«­°²ŽŽŽŽ¯­ª©šªªª©©©š€¡  ¡¡¡¡¡¢¢¡      ¡¡££¢¢¢¢¢¢££€€ŠŠŠŠššššš©ª¬®¯°±²Žµµ¶¶¶¶··¶¶¶¶µŽŽŽµµŽµ¶··žžž··ž¹º»ŒœŸŸŸŸŸŸŸŸŒ»ž³¯¬¬¬¬­¯²³ŽŽŽ®¬šŠŠŠŠŠŠŠŠ¥£¡  ¡¡¡¡¢¢¢¢       ¡¢££££¢¢¢¢€€€¥Š§ŠŠŠ§§§©©«¬°±²³µ¶·ž···¶·¶¶¶²²±°°°²²±²³µ¶·žž¶¶·ž¹ºº»»»»»»»ŒŒœ»ž³¯¬««¬¬­°²ŽŽŽ«©Š¥¥¥¥€€€€€£¢¡ ¢¢¢¢¢¢££¡¡          ¡¢¢££££¢£££¥¥¥¥§§ŠŠ¥ŠŠŠš©ª¬±±²Žµ¶··¶¶¶µµŽŽŽ±°¯¯®¯°±¯°±³µ¶¶·Žµµ·ž¹¹¹¹¹ºººº»»ŸŒ¹²­ªšš«ªª¬¯²²²©§¥€€€££¢¢£€€€£¢¢¢¢¢¢¢££¢¢¡¡¡¡¡¡   ¡¢¢¢£££¢££€€€ŠŠŠŠ§§ŠŠ¥¥ŠŠ§š©«±±²²³ŽµµŽŽŽ³³³²²±°®®­­®¯®¯¯±²³³³³²³Ž¶·žžžž¹º¹¹¹¹ÀŸºŽ­©§§ª©š©¬®¯¯Š¥£¢¢¢¢¡¡¢£€€€€€¢¢¢¢¢¢££¢¢¡¡¢¢¢¢¡¡¡¡££££££££€€¥¥ŠŠŠŠ§§ŠŠ¥¥ŠŠŠ§©ª²²²³³ŽŽŽ³³²²²²²²¯®­¬««¬¬¬­­®¯°°°±°±²ŽŽµµµ¶·žžž··ÀŸºŽ­©šš«©§§šªªªŠ€¢¡¡¢¡¡££££££¢¢¢¢£££¢¡¡¢¢¢¢££££¢¢¢¢€€€€££€€¥Š§§§§§§§§ŠŠ¥ŠŠ¥€€Šš¯¯¯°±±²²±±°°°°°°®­¬«ªªªª«¬­®¯¯¯®¯¯¯°±²³³²²Žµ¶¶¶¶ŸŒºŽ­©§§©š§§§§§ŠŠ€¢¡¡¡¢¢¢£€€€£¢¢¢¢¢¢¢¢¡¡¢¢¢££€€€¢¢££€¥¥¥¥¥ŠŠ§š©©šš§§ŠŠŠ¥¥ŠŠ¥€€Š§­­­®¯°°°°°°°°°°¯®­­«ªªªªª«¬­­­­­®®®¯¯°°°±²³Ž¶¶¶¶œ»·²¬š§Š§Š¥¥¥¥£¢Š€¢¡¡¢££¢£€¥€££¡¢¢¢¢¢¢¢¢¢££€€¥¥¥£££€€€¥¥§§š©©ª««©©š§Š¥€€€¥Š¥¥¥Š§¬¬¬­­®®¯®®®®­­­­¯¯®­¬«ªª©©ªª¬«««­­­®®®®¯±²²³ŽŽµµºžŽ¯ª§Š¥¥¥€¥Š¥€€Š€£¢¢££€££€€€££¢££££££££££€€€¥¥¥€€€€€€€¥©©ªª««¬¬©šš§Š¥¥€¥¥¥Š¥ŠŠ§ªª««¬­­®«¬¬¬¬¬¬­°¯¯®­¬««©©ªª«««©¬¬­®®¯¯¯±±±²³ŽŽŽž¶±­©§¥¥€€€¥¥ŠŠ¥¥¥€€€€€€€€££¢££££££€€€€€€€€¥¥¥¥€¥¥¥¥¥¥ŠŠ¬¬«¬­­­­©©š§§§¥ŠŠŠŠŠ¥ŠŠ§§š©ªª«¬¬¬¬­­­­®®°¯¯¯®®­­ªª«««ªª©¬­®¯¯°°°¯°±²³Žµµ·Ž°«©§Š§¥¥¥¥¥¥¥¥¥¥¥¥¥¥€£€€£¢¢¢££££££€€€€¥ŠŠŠŠŠŠ¥ŠŠŠŠŠŠ§§¬­¬¬­­­¬©šš§§§ŠŠŠŠŠŠŠŠŠ§ŠŠ§šš©©ªª«¬­­­®¯¯¯¯¯¯¯®­ª«««ªªªª«¬­®¯°°°¯¯°±²³³Žµ³®ª©§ŠŠ¥¥ŠŠŠŠŠŠ¥¥¥¥¥€€£€£¢¢¡¢¢¢€££¢£€¥Š§šš©©©šš§§©©©ªªª¬¬­­­­¬¬š§§ŠŠŠšš§ŠŠŠŠŠŠŠ€¥ŠŠŠŠ§§§©ª««¬­®®®¯¯¯®­¬««¬¬¬«ªªª«­®¯°¯¯®®¯¯°°²²²°¬©š§¥¥€¥§§§ŠŠ¥¥¥¥€£££€££¢¢¢¢¡¡Š€£¢¢€Šš©©ª«««ªªš©ª«««¬¬¬­­®®®­­©š§ŠŠŠ§šŠŠŠŠŠŠŠ¥€€¥ŠŠŠŠŠŠ§©ªª«­¯­®®¯®®­¬­­­­¬«ªª«¬­®¯¯®®®®®®¯¯±±­¬«©§Š¥¥Š¥¥¥¥¥¥¥¥€€€€£££££¢¢¡¢¢£Š¥€€€Šš©šš©ª«««ª¬¬¬«­¬¬¬«¬­®®­­¬ª©š§§§©©©©©š§ŠŠŠ¥¥¥Š§ŠŠŠ€Š§šš©«¬¬­­®®­­¬­®®®­¬¬«¬­®®¯¯­­¯¯°°¯¯¯¯«ª©š§Š¥¥¥¥¥¥¥¥¥¥€€€€£££££££¢¢£€€¥¥¥¥Š§š©©©ª««¬¬«®­­­­­­­¬¬®®®®¬­«ª©šššªª©©©š§ŠŠŠ¥¥ŠŠ§§ŠŠ£€Š§§šª«««¬­­­­­­®®¯¯®®®®¯¯°°°¯®®®¯®®®®®©©š§¥¥¥¥¥¥¥¥¥¥¥¥€€€£££££€£££€€¥¥€¥¥Š§š©©©ª«¬¬®­¬¯¯¯¯®®¬¬¬¬®®®®­­¬«ªª©©««««ªªšš§§¥¥¥¥ŠŠ¥¥£€¥¥ŠŠš©©ª«¬­­­­®®¯°±±±±°±±±²±°¯®®¯¯®®®®§§Š¥¥¥¥¥€¥¥¥¥¥¥¥€€€€££££€€€€€¥ŠŠ€¥Š§š©ªªª«¬­®¯¯¯°°°¯®®¬¬¬¬®®®®­­¬¬««ªª¬¬¬««ª©š§§¥¥€€¥¥€€€€¥¥¥¥§šš©ª«¬¬­­®¯°±²²²²²²²²²²°¯¯¯¯®®®®®€€€€€€Š¥€¥¥¥ŠŠ¥¥€€€€€€€€££€€¥¥Š§¥ŠŠ§©ª««ª«¬­¯±±±²²²±°¯®­¬¬­­­­­­¬¬¬«««««©©©©š§Š¥€€€€¥¥€£¥ŠŠ¥ŠŠŠŠšš©ª¬¬­­®¯°±²²²±²²²²²²¯¯®­®­­­­­¢¢¢¢¢£££€€¥¥ŠŠ¥¥€€€€€€€€££€€¥ŠŠ§§§§š©ª¬¬«¬­®±²²³³²²²±°®­¬¬­­­­­­¬¬¬«««««©©©©š§¥¥¥¥¥¥ŠŠŠŠŠŠŠŠŠŠ¥¥šš©©«¬¬¬®®¯±±²²±±±±²²²¯®®®®­­­­­¡¡¡¡¢£££€€€¥¥¥¥€€€€€€€€€€€€¥ŠŠ§š§§šª«¬¬¬¬­­¯±²²³²²²±¯­­¬­­­­¬¬¬¬¬¬¬¬¬«««ªªªª©š§ŠŠŠŠŠŠŠ§§ŠŠŠŠ€€€€§šš©ªª««¬­¯°±±±°±²²²²±°¯¯®­­®®®¯¡¡¡¢£££££€£€¥€€€€€€€€€€€€€¥¥ŠŠšš§§©ª«¬¬¬­­®°±±²³³³²±®­¬«­­­­¬¬¬¬¬¬¬¬¬¬««ªªª©šš§§ŠŠŠŠŠ§šš¥¥¥¥€€€€§§š©ªª«¬¬¬¯°±±±°²²²³²²±¯®­­¬­­®®¡¡¡¡¡¡¢¢¢¢£€€€££££€€€€¥¥¥¥¥Ššš©©š©ª««¬­­­®¯°±±²²³²°®­«ªª­­­­­­¬¬­­¬¬¬¬««ªª©ššš§§¥¥¥¥¥¥ŠŠ¥¥€€€€€€ššš©ªª¬¬¬­®°±±±°²³±±²±°®¬¬««««­®¢¢££££¢¢£££€€¥¥¥¥¥ŠŠš©©©©ª«ª«¬­­®®¯°°±±²²±¯­¬«««­­­­­­¬¬­­­¬¬¬¬««ªª©©ššš€€€€€€¥¥ŠŠ¥¥¥¥¥¥šš©ª««­­­®¯°±±±°²²±²²²°¯¬¬«««¬®®¡¡¢£¢¢¡¡¢££€€¥¥ŠŠŠŠšš©š©«««««¬¬¬®¯¯°¯°°²°¯®¬«««¬¬¬¬¬¬¬¬¬­­­­¬¬¬¬ªª©©©š§§¥¥¥¥¥¥¥¥¥¥¥¥¥ŠŠŠªª««¬­®®®®¯°±±±±²²±²²²±°­­­­­®®¯ ¡¡¢¡¡¡¡£££€€¥¥¥ŠŠšš©©©©¬¬««¬¬¬¬¯¯¯®®¯±±¯®­¬«««««««««¬¬¬­­­­­¬¬¬ªªª©©©ššŠŠŠŠŠŠŠŠ¥¥¥ŠŠ§§§«««¬­­®¯¯¯°±²²±±²²²³³²±°¯¯¯¯¯°°±  ¡¢¢£¢¢£££€€¥¥¥§§š©š©©©¬¬«¬¬¬¬¬­­­­­®¯°¯®®­¬¬ª©««ªª«««¬­­­­­­¬¬¬¬««ªªªªšššššššš§§§§šš©©¬«««­­®®°°±²±²²²ŽŽŽŽŽ³²±²²²²²²²²  ¡¢£££££€€€€¥¥§§š©š©©©¬¬«¬¬¬¬¬­¬¬¬¬­¯¯®®®®­«©©«ªªªª««¬­­­®®­­¬¬¬¬««ª«ª©©©©©©©©©©©©ªª«¬­¬¬¬­®®¯±±²²²²²²µµµµŽ³²²²²²²²²²² ¡¢¢¢¢£££€€¥¥¥§§š©š©©©¬¬««¬¬¬¬¬¬«««¬®®­­­¬¬«ªª¬¬ªª««¬­­­®®®®­­¬¬««ªªªª««ªªªªªªªª«««¬¬¬®®­­­®¯°²²±²²²³³µµµµµŽ³²²²³³³³³³ ¡¡¢¡¢¢££€€¥¥Š§§š©š©©©«¬««¬¬¬¬«««««¬®®¯­­¬¬«««­¬«««¬­­­­®®®®­­¬¬¬««ª««¬¬¬««««««««¬¬¬¬­¯¯­­®®°±²³³²²³³³µµµµµŽ³³³³³³³ŽŽŽ  ¡¡¢£££€¥¥¥Š§§š©©ªªª¬¬«««««¬««ªªª«¬¬­®­¬««««¬¬¬¬­®°°¯°±±°°¯®­­­¬­¬¬ªª«ª«««««¬¬¬­¬¬¬¬¯®®®¯±²³³ŽŽŽ³ŽŽŽŽµµµµŽŽ³³³³³³²²² ¡¢¢£££€¥¥¥Š§§©©©ªªª««ªª«««««««ª««¬­­­­¬¬«¬¬¬¬¬­­®°°°±²²±±°¯®®®®®®­­ªªªª««««¬¬¬­¬¬¬­­­®®¯±²³²²ŽŽ³³³³ŽŽµµµŽŽ³³³³³³³³³ ¡££££€€€¥¥¥§§š©©ªªªª«ªªª«««¬««««¬­­®­­­­¬¬¬¬¬­­®¯°°²²³³³³±±¯¯¯¯¯®®®¬¬¬¬­­­­­­­­­­­­®®­®¯°²³³³³³³³²²³³ŽŽŽŽ³³ŽŽŽŽŽŽŽŽ  ¢££££££€¥¥Š§šš©©ªªªªªª««««¬«««¬¬­­­­­­­­­­¬¬­®®¯°±³³ŽŽŽŽ²²°°°°¯¯¯®­­­­®®®®®®®®®®®®¯¯®®¯°²²³³³³³³²³³ŽŽµµŽŽ³ŽŽŽŽŽŽŽŽ ¡¡¢££¢¢€€€¥ŠŠ§š©©©ª««¬««««««¬¬¬­­­­­­­­­­­­­­®¯°±±²³ŽŽŽŽ³³³³²²±±¯°­­­­­­®®®®®®¯¯¯¯°°¯®¯°±²³³³³³³³³Žµµ¶¶µµŽµµŽŽ³³³³    ¡¡¢££¢¢€€€¥¥¥Ššš©©ªª«¬¬¬¬««««¬¬­­­¯¯®®®®®®®®®¯±±²²²³³ŽŽ³³²³³³²²±°±¯®®®®®¯¯°°°°±±±±±±°¯¯°²²³³³³³³³³³³ŽŽµŽŽŽµµŽŽ³²²² ¡ ¡¡¢££€€¢¢€¥€¥¥¥Š§§šš©ª«¬¬­¬¬«««¬¬­­­¯¯¯¯¯¯®®¯¯¯°±²²³²³³ŽŽ³³²±±±±±±±²±°°°°°°°±±±±±±±±²²°°°±²²³³³³ŽŽŽŽ±²³ŽµµµµµµŽŽ³³²²   ¡¢£€€¥€¢¢¥Š€¥¥ŠŠ§§šš©©ª¬¬¬¬¬«««¬¬¬­­°°°°°°¯¯¯¯°°²³³³²³³ŽŽ³³²±±²²²²³Ž±°°°°°°°²²²²²²²²²²±±±²²³ŽŽ³³ŽŽŽŽ²³µ¶··žžµµŽŽ³³³³ ¡ ¡¢£¥¥€¥¥££¥Š¥€¥¥ŠŠŠ§š©©««¬¬¬¬««««¬­­­°¯°°°°¯¯¯¯°°²³³Ž²³ŽŽŽ³³³°±²²³³²±±°±²±°°±°±±²±±±²²²±±¯°²³³³³³³³ŽŽŽ¶µŽµ¶¶žµµŽŽŽŽŽŽ  ¡¢  ¡¢£€Š§¥Š¥££¥¥€€€¥¥ŠŠ§§š©ª«¬¬«««««¬­­­­¯®¯¯¯¯®®¯°°°²²³³±³ŽŽŽŽ³²±±±±±±±²±±±±±±²²±±°±±°°°³²±±°±²²³³³³³³ŽŽŽµ³¯¯¯±µµŽŽŽŽŽŽµ    ¡¢¡¢ ¡¢£€ŠŠšŠŠŠ€£€€£€€¥¥¥ŠŠ§§šª«««««¬¬¬­­­­­®®¯¯®®®®¯¯°°±±²²±²³³³³²±²±±°°¯±²³³²±±±²±³²±³³²²³³²±±²³³²µµµµµµµµµµ±«©©­³ŽŽµŽ³ŽŽŽ   ¡¡¢¢¢¡¡¢€¥ŠŠ§ŠŠŠ€€€€€€¥¥¥ŠŠ§§ššªª««««¬¬¬­¬­­­®®®®­­®®¯¯°°±±²²±±±²²²²±³±±±±¯®®°²²±°±²±³²²³²°°²³³²³³ŽŽŽ¶¶¶¶µµµµ·µ¯©§§ª°Žµ¶µŽŽŽŽ   ¡¡¢¢¢¢¢¢£¥¥¥Š¥Š¥€€¥¥€¥¥ŠŠŠŠ§§šš©ª«¬¬¬««¬¬¬­¬¬®®®®¯¯®®®®¯°±²²²²±±±±²²²Ž²²ŽŽ¯ª©š®²²±²³³±°²±¬šš¬ŽµµµŽ³µµµµµµµµŽµµ²¬§Š¥§«Ž¶¶µµµ¶µ   ¡¡¢¡¡¡¢¢£€¥¥¥¥¥¥¥¥¥¥¥¥¥ŠŠŠŠ§šš©©ª«¬¬¬«««¬¬¬«¬®®®¯¯¯®®­®¯°±²²²±±±±±²²²Ž²²µŽ­§Š€­³³±±±°­­¯®©€¥ªµ·¶µ³²ŽµµµµµŽŽ³ŽŽ¯©ŠŠ¥Š©³µ¶µµµ¶µ¡¡¡¡    ¡¡¢££€ŠŠ¥¥¥¥¥¥¥¥¥¥ŠŠŠŠ§§šš©©ªª¬¬««¬¬¬¬«¬­­­­®®®®®®°±²²²²²±²²³Ž²±Ž²³¶²©€¥€­³±®®¬©ªª¬¬š£¥ªŽŽ¶µŽŽŽµµµµµŽ³³ŽŽ¯§€¥¥Šª±ŽµŽŽµ¶µ¡¡¡¡    ¡¡££€€¥¥¥¥¥¥¥¥¥¥€¥¥ŠŠŠŠ§ššš©©ª«¬«¬¬¬¬¬¬¬­­®­­®®®®¯°±²²²²²²³ŽŽŽ²°Ž²³Ž¯Š£Š¢«±¯¬¬ªŠ§Ššš¥¡£š²²³ŽŽµ¶·µµµµŽŽŽµ²­€¡££Šª¯²³³³µ¶µ        ¡¡¢££¥ŠŠ¥¥¥¥¥¥¥¥¥ŠŠŠŠŠ§§§§š©©ªª«««¬¬««¬¬­­­®®®¯¯®¯°±³³³³±±±²Ž³²°¯¯Ž³ªŠš€€¬°«©ª¥€š©šŠ€££€«®°³·ž¶³µ¶¶µ³²³Ž°ª¥£¡¡Š©­±³²²·ž³¡    ¡¡¡¢££¥Š¥¥¥¥¥¥¥¥¥ŠŠŠŠŠ§§§§§š©©ªª««¬¬««¬¬­­­®®®®¯­®¯°²³³³²²²²³²¯­«­²±š¥š§¥«­§€Š€¥©©š§¥££€Š©­±µž¶µ²ŽŽ³°®®¯®š¥€¢£Š§©¯ŽŽ³¶µ®¢¡  ¡¡ ¢¢¢£€€ŠŠ¥¥¥¥¥¥¥¥¥¥ŠŠŠŠ§§šššš©©«««¬««««¬¬¬¬¬¬¬­­­­­¯°±²²²±±²³±°¯­š«°¯§€§š§©«€¡€¥§šš§¥€¢¢¢§©¬°Ž·µŽ²Žµ²®««¬«§¥¥£€€¥Š¯¶µŽµ²ª¡¡¡    ¢€¥¥ŠŠ¥¥¥¥¥¥¥Š€¥ŠŠŠŠ§§ššššš©ª«««««««¬¬¬¬¬¬¬¬­­¬­¯°°±±±±±²³±¯­¬š«°¯Š¢Šš§š«¥¡€¥Š§ŠŠ¥€£¢¢§©«¯³µŽŽŽ¶¶²­ª«¬©Š¥¥€€€£Š¯µµ³¶³ª ¡  £¥¥¥¥Š¥¥¥¥¥¥Š£€¥ŠŠŠŠ§ŠŠŠŠ§š©©ªªªªªª««¬¬¬««¬¬¬­®®¯°°¯¯³²²³±¬ªšš«°®¥¢¥§¥¥©¥¡£€€§ŠŠŠ¥¥€€€¥š¬±³ŽµŽµŽ¯ª©ª¬š¥€€£€€£¥¬³³³µ³ª¡¢¥¥Š¥Š¥¥€€€€¥¢£€¥¥¥ŠŠŠ¥¥¥§š©©ªªªªªªª«¬¬«««««¬­­®®¯¯¯¯°°±³±¬š§§©®¬€¢¥§Š£§Š¡¢¥Š¥¥ŠŠŠ¥¥€££Š«°²µ¶Žµ²­©©«¬§¥€£¢£€¢£§®²²³°š  ¢¥ŠŠŠ¥¥€£¢¢££¢£€¥¥¥ŠŠŠŠ§§§š©ªªªªªªª««­­¬¬¬¬¬¬««¬¬­­®®­®¯²±«š§§§«ª£¡¥¥Š£©š¡£§©€¥¥¥¥¥¥€¥€§¬±³Ž¶µµ±¬ª«¬«Š¥£¢¡¢£¡ £«¯¯®«Š £¥ŠŠ¥€£¢¡¡¢¢¡¢£€¥¥ŠŠ¥¥ŠŠ§š©ªªªªªªª««¬­­¬¬¬¬«««««¬¬­­­­¯²°ªŠ€§§©š¢ ££€¢«©¡¢Š©¥¥ŠŠŠ¥¥€€£Šª°²³µŽŽ°¬ª««ªŠ€£¢¡¢£ ¡¢©­¬ª©§ £ŠŠ€€£¡    ¢€¥Š¥¥¥¥¥ŠŠš©ªªªª«ªªªª¬­­®­¬«ªª«««¬¬«¬««¯³±¬©Š¥ŠŠ€¢¡¢£€¢ªš ¢Šš€¥¥ŠŠŠŠŠ£¥Š©®Ž¶Žµµ°«««ª©¥£¡¡¡¡¡¡¡€Š¢¢¥Š¡€€€£¢¡ ¡¢€¥¥¥¥¥¥¥§š©ªªªª«ª««««¬­­­«ª©©©©ª««¬¬«ª®²¯«©ŠŠ¥€£¢¢£€€¡š§ ¢Šš€¥¥ŠŠŠŠŠ£¥Š©®Ž¶µŽµ¯ªª«ªš¥£¡  ¡¡¡¡¡£  ¥§¢€€£¡  ¢££€£££€§šªªªª«««¬¬¬«¬¬­¬«©ššš©ªª«¬¬«©­±®«šŠ§¥¢¢¢£€££¡Š¥ ¢¥Š¥¥¥ŠŠŠ¥¥£¥Š©­³µµµ³®ªªª©š€¢    ¡ ¡ ¥š¢¥£  ¢££££££€Šš©ªªª««««¬¬ª¬­­¬ªš§šššš©©©©ªš¬¯­©Š¥Š€¢¢£££¢£ €£¢€Š€¥€¥¥¥¥¥¥¥Šš¬±µ¶Ž³­©ªªšš£¢      ¢Š Š£ ¡£€£¢££££€¥§§©©ªª©©©«¬¬­­«ª§ŠŠŠŠŠ¥¥¥€§Š«®¬§Š€¥¥££¢¢¡¡¢ ¢¢ £€Š££€€ŠŠŠŠ¥¥Š§«°Ž¶µ³­š©ªšš¢£¢¢¢¡ €Š¢¢€€£¢£££££€¥Šš©©©ššš©«¬¬«ªšŠ¥¥¥¥€€£££€€©­ªŠ¥££€££¢¡  ¡ ¢  ££¥¢¢££¥ŠŠŠŠ¥Š§ª­²µµ²«§©©šš£££££¢ ¡¡¥ ¥¡¡€€€££¢¢¢££€¥§ššš§§§šššš§Š¥€£££££¢¢¢£¢¢š¬ªŠ€¢££¢¢¡   ¡ ¢ ¡£¢¥¡¢¢£€¥ŠŠ¥¥¥Šš«°Žµ±ªŠšš§§££££¢¡¡ ¢¢ Š € ¡£€€£¢¢¢¢¢£€€Š§§§ŠŠ§šŠŠŠ¥€££¢¡¡¡¡¢¢¢¢¢¢§«©¥€¢£¢¡    ¡¡¡£ ¡£¡¥¡¡¢¢€¥¥Š¥¥¥¥¥©¯³Ž°©¥§§ŠŠ£££¢¡¡¡¡ £ £ ¢£££¡¡¡¡¡¢¢£§§§§ŠŠŠ§££¢¢¡¡¡¡    ¡¡¡¡¡¡¥ª§€¢¢¡¡¢¡       ¡¢¢¢¢ ¡£€€£€¥¥¥€¥Š§¬³³®©¥§©¥¥£££££¢¡¡ ¢ £¡¢£¢¡¡¡  ¡¡¡€¥ŠŠ€€¥Š¡       ¢¡¥©Š€££  ¡¡      ¡¡¢¢¡¡¡¡¢£€¥ŠŠ€§¥¡¢¥«²Ž²©£§§¢§£££¢¢¡   £ ¢¡¢¢¡¡    ¡£€£¢¢£€  £Š€¢££¢¢¢¢¡¡¡¡ ¢¢£¢¢¡¡¡¡¡¢€¥ŠŠ£§¥  €¬²ŽŽª£šš¢©£€€£¢¢ ¡ ¢€¡  ¡¡   ¡  ¡¡¡¡¡¢   ¢¥£¡¡¡££¢¢¡¡¡¢¡£££¢¡¡¢¢¢£¥§§Š£ŠŠ€£¥¬³³¯ª¥§š€Š¢££¢¡¢ ¡¡€ ¢  ¡¡¡    ¡¡¡ ¢£¡¡¢¢££¢¢¡¡¡¡ ¢¢£¡  ¢££€Š§§Š€€€¥Š¥«µŽ©šŠ¢Š§£Š§¥€£¢¡ €¥€š¬Š  ¡¡¡¡  ¢¢    ¢¢¢¢¡¡   ¡¢¢¢¡ ¡¢¡¡¢¢ ¥¥«µŽŠ§Š¥ª€šŠ€£¢š§Šª®¥        ¡¡¢   ¡¡¡€š¯­¢€¢¢©Š¡¡   ¡ ¢¢¢  ¢£¢  ¡ ¡¥¢€Š   ¡    ¡¡¥¥€¢    ¡  £€¢  ¢    ¡£€   £€ ¡¢£ £  £€€€  £ ¡ ¢  § š©š§¥£  ¢¢¢££¡£¡ ¥££¬­ª€ ¡€ŠŠ©ª©Š£¢   ¡ ¢Š¥¡€¢¡¢£€ŠŠ¢€£¢     ¢£¢¢¥€ ¡¢¢¢£¥€ ¥¥£¡  ¢¡¢£¥¥€££Š§§šš©ššš€£¥£¡¢¢¢ €£ ¢¢£¥£¡£ŠŠ¥€¢¡    ¡¢¡  ¡  ¡¢€Šš©ªª©©ª«­­®­­¬²±°®­«ªª¥£¡ ¢¢ ¢¥€€€€£¢¢¢¢¢£€¥¥€€¢¡¡¡¢¢¢¢¢¢    €€££Š©©ª«¬®¯¯°®°±²²³±°²²±¯­«©š¥¥€€£¡  ¡£¢£¥€€€€€£¢¡£€¥¥ŠŠŠŠ€€¥€¢¡¢£  ¡¡¡¢¢¡¡  ¡Š¥€¥Šš©©¯¯¯¯¯°°±±²Žµ¶¶µŽ²²±¯«š¥€£€§šš§Š¥ ¡¡¡¡¡¡¡¢¡ ¡£¢£€£££€¥¥€€€€¥€¥ŠŠŠŠ§©©§§©ªª©š©š§Š¥££¢¡   ¡€Š§§¥Šª°Ž·¹±²²²±²²³²Žµ·žž¶¶±±±­©Š¥¥Š§©ª«¬­®€€€€€€€€Š¥¥Š§š©©ªª«¬¬­®®±±±±±²³³²²²±±°±±°¯­¬ª§¥€¢¢¢¡¢¥§š­¯³³²°³·±²³Žµµ¶¶µµžžž¶µŽ¯°°­©šª¬±°®­­®°²¥¥¥¥ŠŠ§§šš©«­¯±²³²²±±±²³°¯¯¯°°°°®®­­¬¬««ª©ššŠŠ¥€¢£€€€£¡ ¡£¥§§¥§«®¯®°³²³Žµµ¶µµµµ¶µŽ²°¯­¯¯­ªª­±¶Ž±­ªª¬­ššªª«¬¬¬ª«¬­®°²²²±°¯¯¯®®®®¯¯¯¯®¯®­­­®®®®°¯­®¯¯¯®ªª«««ªª©§§Š£  ¡ ŠŠŠŠŠŠ¥Š®¬«­¯­¬¬³³µµµŽŽ³µµµ³³±°±¯°®­©©«®°°®¬©©šª­¯°±±²±±±²³³³Žµ¶²²²²²²²²±±²³³³²²²±²±±±±±²°®­­­¬«¯®­«©š§ŠŠššŠ£¡¢£   ¢££¡¢€Š©¬®°¶³²²±®­¯³³ŽŽŽµµµµµŽµµµŽŽ²±°­«©š©Ššª««ªª«µž·µ¶¶¶žµµµµµµµ¶¶µŽ³²²²²²³³ŽŽ³³Ž²²±±°°°°²±°°°°¯®Ž³°®«©š§£¢¢£€£¡¡   ¢¢¡  ¡¢££££§š­±ŽººžµŽŽ³°®¯¯±²³³³³³²²²²²²²²µ³°®¬ª©š©«¬¬««««¶ž¶µ¶µŽµŽŽŽ³³³³³²²²²³Žµµ·žžžžžžžºº¹¹žžžžºž·¶µŽ³±®­«©Š¥€€  ¡£€¡¥š¢¢¡¥Šª­¯³³±¯®®­¬®±°±²³ŽŽŽŽ³²±±°±±±­¬«ªª©©©©ª©šŠ¥€¥µ¶µ¶ž·µ¶ŽŽŽŽŽµµµŽŽŽµ¶·ž¹žžžž··žž»»»»»º¹¹ž·µŽ³±°®ªšŠ€¡  £Š©š©©§Š¢¡¢£€¥€§ª¬°±ªª©©šš¬±°±±²²²±²±°®­­­®¯¬««««ªªª§šš§ŠŠ§©µµŽµžž¶·¹¹žžž¹¹žžžžžž¹¹º¹¹ž·¶¶¶¶·¶¶µµµ³³®®­¬««©šš§€¢¡¥©¥¥Š¥¥¥£££€§§¬­ªªšš©ª«ª©¬±­­­­­¬««©©šš©ª«¬ª«¬­­­­­®¯¯°¯°±²¶¶Žµž·µ·¹ž·¶¶µŽ³ž¶¶¶¶¶··¶¶Ž³²²²²¯®®®®®®­­¬¬¬¬«««©šŠ€¢¡  ¡¡¡¢€€¥£ ¢ŠŠ€€£€¥§§Š§§€Š¥¡£¢£Šª­­¬­¯°°°°°°°°­­®¯±²ŽŽµ¶·ž¹ººº»»»ºž¶µµµµ³Ž·µµž··¶¶¶¶µµ¶Ž³²±±²²¯¯®¯¯°²²±±°±±²±°²²²²²±°¯­¬«ªª©©©«ª©šª¬¬©§£Š©§€Šª«§¢  ¢££¡¢ ££¢§©©¬°³Ž³²²µµ¶··ž¹¹žž¹¹ºººº·ž·žž¹·žŒ»Œ»¹·µŽŽŽ³Ž¶µŽžžž¹º»»¹žµŽ³±±±±²±²²Ž¶·¹ºº¹žžžž·¶ŽŽŽŽŽ³²±¯¯¯¯¯¯®®°¯«šš©š¥®©šª©§©ª­š¢ ¡€€Š¥ª±²®¯°®°³Žµµµ¶±²²³Žµ¶¶¶¶···¶µŽžž¹¹¹·¶¶¶·····ŽŽµŽŽŽµŽ³žµŽµµµŽ±¯Ž³²²²Ž¶··žžž¹º»»¹·¶Ž³²°¯°°±±°¯¯®¯¯¯¯¯®®®«°³²±²³³°³¶µµµ¯¢Š¢¡£¥¥Šš«®¯¯°°±±²²°°²²³ŽŽŽ³³µ¶·žž¹ž¹žž·µŽ²¹¹¶¶µ²³žž··žžžµ³±²Ž¶··žž¹žž·¶¶¶µ²±°±²±°®®®¯¯¯®®­®®­®¯«©¬ª¬²ºŸŸŸÀœ»º»¿Á·š¡¢££Šª¬­­­®¯¯°±±²²²²²²²²¯°²Ž¶ž·ž·¶ž·¶µŽŽººž¶µ³µ»º¹ž¹¹º¹žµŽŽŽŽµµµŽŽŽŽ³²±±²°­¬¬­­¬«¬¬­­­¬¬¬­¬«©¥¢¡¡ ¥°»ÀÀÀ¿ÀÀŸ»¿ÇÈª¥¥Š§Š€§¬¬¬¬¬¬¬¬¬®®®¯°±±²²²Žµ¶··¶·ž·ž··¶¶·ž¶Ž³±ŽºÀŸº·µŽ²²ŽŽ²±±²²³±²²³²±¯®¯®­­®­¬ª«««¬¬««ª©««ªš§¥£ ¡¬·ŸŸŒ»ŸÁ¿¿ÇÍÏÍ­©¢ ¥šª«­¯°¯²²²±±±±°®¯°±²³ŽŽŽµ¶¶¶¶¶¶žžžž¹ž¹·ž¹·¶µŽµ»ºžµ³²²±°±°¯®®¯®°®¯¯¯¯®­¬®­¬¬­®­­¬­­­®¬­­¯­­­«©§¥¢¢€©¯³¶·»ŸÁÃÇÌÇ¹©Šªª¡ ®§¡©¬¬®±Žµ¶·ž·ººº¹¹¹žžµµµ¶¶··¶¶¶······¹¹¹¹ºººº··¶µ¶¶¶¹¹ž····ž·³³³³³³µŽµŽµµµŽŽŽ¶³¯¬­¯³Ž¯¯°¯±°±±²¯³¹¹Ž°¬€¥§ª¬°¶»ÀÅÇÆÈÊŒ¥±ÂŒ±¯±­°²¬¯ºœ»¹º¹»ž¶žŒººººººŒŒº¹ºººººº·žžžž¹žžººº»»º»ºº»ººŒ»º»Œ»¹¹·¶µµµµ¶¶·µ¶¶··µ¶µ¶¶·Œº¶Ž³Ž¶¹µµµµµŽŽŽ°­¶ÂÂŒ¶²§§§©®³ž»ŸÃÅÃÃÂ±¹ÇÈÀ³¯¯­¬±»Œº¶µ°¬³ÀÁºººº»»ŒœœœœŸŸŸŸŸŸŒŒŒŒŒ»»»œŸŸŸœœœœÁÃÂÂÂÂÀÁÂÂÃÂÃÂÂÂÁÁÁÁÁÁÁÀÂÀÀÀÀÀÁÁÀ¿¿ŸŸœŒºŒ»»ºº¹¹žž³ºÀœ·¶°®¬¬¬±Žž¹º»œŒœŒ­¢·ÊÓÏÀŽ²³®°žŒ¿²²¬š¶ÊÈºœœŸŸ¿À¿¿ÀÀÀÀ¿¿¿¿ÀÀÀ¿ÀÀ¿¿ÀÀÀÀÀ¿¿¿ÁÃÂÁÁÁÀÁÃÃÃÃÂÂÂÂÁÁÁÁÁÁÂÂÁÁÀÁÁÁÁÁÁÁÀÀ¿¿¿¿ŸŸŸ¿¿ÀÁÁÂœ¿À»œÁ¿ºººº»œŸÀž¹»º·¶±©ª§®¹œÁÅ¿¿œœº»ÀœŒÁºž»¿À¿¿œŸŸŸ¿¿¿¿ÀÀÀÀ¿¿¿¿ÃÃÃÃÂÂÃÃÃÃÃÃÃÃÃÃœœœœœœœœŸŸœœŸŸŸ¿ŸŸŸŸŸ¿¿¿ŸŸŸ¿¿ÀÀÀ¿¿¿¿ÀÀÀÀÁÁÂÂÂÃÃÃÃÂÃÄÄÄÅÄÆÆÅÅÅÆÇÇÉÉÈÈÈÉÉÉÊÊËËÊËÌËËËËËÌÌÍÍÍÍÏÏÐÐÑÑÎÎÏÏÑÑÑÑÓÓÒÒÒÓÓÓÔÔÔÔÕÕÖÖÕÕÕÕÕÕÕÕœœœœœœœœŸŸœœœŸŸ¿ŸŸŸŸ¿¿¿¿ŸŸ¿¿ÀÁÁÁ¿¿¿¿ÀÀÀÀÁÁÂÂÃÃÃÃÂÃÄÄÄÄÄÄÆÆÆÅÆÆÇÈÉÉÈÈÈÉÉÉÊÊËËÊËÌÌËËËËÌÌÍÍÍÍÏÏÐÐÑÑÎÎÏÏÑÑÒÒÓÓÒÒÒÓÓÓÔÔÔÔÕÕÖÖÕÕÕÕÕÕÕÕœœœŸŸŸŸŸŸŸŸ¿¿¿¿¿¿ŸŸŸ¿¿¿¿œŸŸ¿ÁÁÂÂÀÀÀÀÀÁÁÁÂÂÂÃÃÃÃÃÃÅÄÄÄÄÄÄÆÆÅÅÅÆÆÇÈÈÈÈÉÉÊÊÊÊËËËËÌÌËËËËÌÌÌÌÍÍÎÎÐÐÑÑÎÎÏÏÑÒÒÒÒÒÒÒÔÔÔÔÔÔÔÔÕÕÕÕÖÖÖÖÖÕÕÕŸŸŸŸŸŸŸŸ¿¿¿ÀÀÀÀ¿¿ŸŸ¿¿¿¿ÀŸŸ¿¿ÁÁÂÂÀÁÁÁÁÁÁÁÂÂÂÂÃÃÃÂÄÅÄÄÄÄÄÄÆÆÅÅÆÆÇÇÈÈÈÈÉÉÊÊÊÊËËËËÌÌËËËÌÌÌÍÍÍÎÎÏÐÐÑÑÎÏÏÐÑÒÒÒÒÒÒÒÔÔÔÔÕÔÔÕÕÕÕÕÖÖÖÖÖÖÖÖŸŸŸŸŸ¿¿¿¿¿ÀÀÀÀÁÀ¿¿¿¿¿ÀÀÀÁÁÂÂÃÃÃÃÁÁÁÂÃÃÃÃÂÂÁÁÂÃÃÂÄÅÅÅÄÄÄÄÆÆÅÆÆÇÇÈÈÈÈÈÊÊÉÉËËÊÊÌÌÌÌÌÌÌÍÎÎÎÏÍÎÎÏÐÐÑÑÏÐÑÑÑÒÑÑÒÒÓÓÔÔÓÔÖÖÖÖÖÖÕÕÕÖ××ØØØÙœŸŸŸŸ¿¿¿¿¿¿¿ÀÀÀ¿¿¿¿¿ÀÀÀÀÁÁÃÃÃÃÃÃÂÂÂÂÃÃÃÃÂÂÁÁÃÃÃÂÅÅÅÅÅÅÅÅÆÆÆÆÇÇÈÈÈÈÈÈÊÊÉÉËËÊÊÌÌÌÌÌÌÍÍÎÎÏÏÎÎÏÏÐÐÑÑÐÐÑÑÑÒÑÑÒÒÓÓÔÔÓÓÖÖÖÖÖÖÕÕÕÕ××ØÙÙÙŒŒœœœŸŸŸŸŸŸŸ¿¿¿¿¿À¿¿ÀÀÀÀÂÂÂÂÂÃÃÃÄÄÄÄÄÄÄÄÃÃÂÂÂÃÃÃÅÅÅÅÅÅÆÆÆÇÆÇÈÉÉÉÉÉÉÊÉÉÉÉÊÊËÌÌÌÌÌÍÍÎÎÎÎÏÐÎÎÏÏÐÐÑÑÑÑÑÑÒÒÑÑÓÓÓÔÓÓÓÓÖÖÖÖÕÕÖÖÖÖ××ØÙÙÙŒŒŒœœŸŸŸŸŸŸ¿¿¿¿À¿À¿ÀÀÀÀÀÂÂÂÃÃÃÄÄÄÄÄÄÄÄÄÄÃÃÃÃÃÃÃÄÄÅÅÅÅÅÆÆÆÇÆÇÈÉÉÉÉÉÉÊÉÉÉÉÊÊËÌÌÌÌÌÌÍÎÎÎÎÏÐÎÎÏÏÐÐÑÑÑÑÑÑÒÒÑÒÓÓÓÔÓÓÓÓÖÖÖÖÕÕÖÖÖÖ××ØØÙÙœœŸŸŸ¿ŸŸ¿¿¿¿¿ÀÀÀ¿ÀÀÀÀÁÂÂÂÂÂÂÃÄÄÄÃÃÃÃÄÄÄÄÄÄÄÄÄÅÅÄÄÅÅÅÆÇÇÇÆÆÆÇÈÉÉÊÉÉÉÉÊÊÊÊËËËËÌÌÍÍÌÍÍÎÎÎÎÎÍÎÏÏÐÐÑÒÒÒÒÒÑÒÒÒÔÔÔÔÓÔÔÔÕÕÕÕÕÖ××××ØØÙÙÙÙœœœŸŸŸŸŸ¿¿¿¿ÀÀÀÀÀÀÀÁÁÁÂÂÂÂÂÂÄÄÄÄÃÃÃÃÄÄÄÄÄÄÄÄÅÅÅÅÅÅÅÇÇÇÇÇÆÆÆÇÉÉÊÊÉÉÉÉÊÊÊÊËËÌÌÍÍÍÍÌÍÎÎÎÎÎÎÍÎÏÏÐÐÑÑÒÒÒÒÒÒÒÒÔÔÔÔÓÔÔÔÕÕÔÕÕÖØØ××ØØÙÙÙÙœœœŸŸŸŸŸ¿¿¿ÀÀÀÁÁÀÀÀÀÀÁÂÂÂÂÂÂÄÄÄÄÃÃÃÄÅÅÅÅÄÅÅÅÅÆÆÆÆÆÆÅÅÆÆÆÇÇÈÈÉÉÊÊÉÉÉÉÊÊËËÌÌËÌÍÍÍÍÍÍÍÍÍÍÎÎÏÏÐÐÐÐÑÑÒÒÑÑÒÒÒÒÔÔÔÔÕÕÕÕÔÔÔÔÕÖØØ××ØØÙÙÚÚœœŸŸŸ¿ŸŸ¿¿¿¿ÀÀÁÁÀÀÀÀÁÁÂÂÂÂÂÃÄÄÄÅÄÄÄÄÅÅÅÅÅÅÅÆÆÆÆÇÆÆÅÅÆÆÆÆÈÈÈÉÉÉÉÉÉÉÉÊÊÊËËÌÌËËÍÍÍÎÍÎÍÍÍÍÎÏÏÐÐÐÐÑÑÑÒÒÑÒÒÒÒÓÔÔÔÔÕÕÕÕÔÔÔÔÕÖ×Ø×ØØÙÙÙÚÚœœŸŸ¿ÀÀÀ¿¿ÀÀÀÁÁÁÂÂÂÂÄÄÄÄÂÃÃÃÃÄÄÄÄÄÄÄÅÆÆÆÆÆÆÆÆÇÇÇÇÇÇÇÈÈÈÈÈÈÈÈÈÈÉÉÊÊÊÊËËËËÌÌÊÊÌÍÎÎÍÎÎÎÍÍÏÐÐÐÐÐÐÑÑÑÑÒÒÒÒÓÓÓÓÓÓÓÔÔÔÔÕÕÔÔÕÕÖÖÖ×ØÙÙÙÚÚŸŸ¿¿ÀÀÁÁ¿¿ÀÀÁÁÁÁÂÂÂÃÄÄÄÄÃÃÃÃÄÄÄÄÃÄÄÄÅÆÆÆÆÆÆÆÇÇÇÇÇÇÇÈÈÈÈÈÉÉÉÉÈÈÉÉÊÊÊÊËËËËÌÌÊÊËÌÎÎÍÎÎÎÍÍÏÐÑÑÐÐÑÑÑÑÒÒÒÒÓÓÓÓÓÓÓÓÔÔÔÔÕÕÔÔÔÕÕÖ××ÙÙÙÙÚÚ¿¿¿¿ÁÁÁÁÀÀÀÀÀÁÁÂÂÂÂÂÃÄÃÃÃÃÃÃÄÄÄÄÃÃÄÄÅÆÆÆÆÆÆÇÇÇÇÇÇÈÈÈÈÉÉÉÊÊÉÉÉÉÉÉËËÊÊËËËËÌÌÊÊÌÍÎÎÍÎÍÍÎÎÏÐÐÐÐÐÑÑÑÑÒÒÒÒÓÓÓÓÓÓÓÔÔÔÔÔÖÖÔÔÔÕÖÖ××ØØÙÙÚÚ¿¿¿¿ÁÁÁÁÀÀÁÁÂÁÂÃÂÂÂÃÄÄÃÄÃÃÃÄÄÄÄÄÃÃÃÄÅÆÆÆÆÆÆÆÇÇÇÇÇÈÈÉÉÉÉÊÉÉÈÉÉÉÊÊËËÊÊÊËËËÌÌËËÍÎÎÎÏÏÍÍÎÎÐÐÐÐÐÐÑÑÑÑÒÒÒÓÓÓÓÓÓÓÓÔÔÔÔÔÖÕÔÔÔÕÖ×××ØØÙÙÚÚÀÁÁÁÁÂÁÁÁÁÂÂÂÃÃÃÃÃÃÃÅÅÄÄÄÄÄÄÅÅÅÅÂÃÅÅÅÅÆÇÆÆÆÆÆÇÈÈÈÈÈÈÊÊÊÉÉÉÊÊÊËÊÊËÊÊÊÊÊËËËÌÌÍÍÍÎÎÏÎÍÍÎÏÐÐÐÑÑÑÒÓÓÒÔÔÓÓÔÔÕÕÔÔÔÔÕÕÕÕ×ÖÕÕÖÖÖÖ××ÙÙÙÙÚÛÁÁÁÂÂÂÁÁÁÁÂÂÃÃÃÃÃÃÃÃÅÅÄÄÄÄÄÄÅÅÅÅÂÃÅÅÅÅÆÆÆÆÆÆÇÇÈÈÈÈÈÉÊÊÊÊÉÉÊÊËËÊËËÊÊÊÊÊËËËÌÍÎÍÍÎÎÏÎÎÍÏÏÐÑÑÑÑÒÓÓÓÒÔÔÓÓÔÔÕÕÔÔÔÔÕÕÖÖ×ÖÕÕÕÖÖÖ××ÙÙÙÙÚÛÂÂÂÂÁÂÂÂÁÂÃÃÃÄÄÄÃÃÄÅÅÅÄÄÄÄÄÅÅÅÅÅÄÄÅÅÅÅÆÆÆÆÇÇÈÈÈÈÈÈÈÉÉÉÉÊÉÉÊÊËËËËÊÊÊÊÊÊËËËÌÌÎÎÎÎÎÎÏÏÏÏÐÐÑÑÑÑÑÑÒÒÒÔÔÓÓÔÔÔÔÔÔÔÔÕÕÖÖÖÖÕÕÕÖÖÖ××ÙÙÙÙÚÚÂÂÂÂÁÂÂÂÂÂÃÃÄÄÄÄÃÃÄÄÄÅÄÄÄÄÄÄÄÅÅÅÄÅÅÅÅÆÆÆÆÆÇÈÈÈÈÉÉÈÈÈÈÉÉÉÊÊÊÊËËËËÊÊÊÊÊÊËËÌÌÍÎÎÎÏÎÎÏÏÏÐÐÑÑÑÑÑÑÒÒÒÒÔÔÓÔÔÔÕÕÔÔÔÕÕÕÖÖÖÖÕÕÖÖÖÖ××ØÙÙÙÚÚÁÁÁÁÁÁÁÁÂÂÃÄÃÄÄÄÄÄÄÄÄÄÃÃÄÄÅÅÅÅÅÅÅÅÆÆÆÇÆÆÆÇÈÈÈÉÉÉÉÊÉÉÈÈÈÈËËËËÊÊËËËËËÊËÊÊÊÍÍÌÍÎÏÏÐÏÏÏÐÐÑÑÒÔÔÔÔÔÔÔÔÔÔÔÕÕÕÕÖÕÕÖÖÖÖÖÖÖÖÖÖ××××××ØÙÙÚÚÚÁÁÁÁÁÁÁÁÂÂÄÄÃÄÄÄÄÄÄÄÄÄÃÃÄÄÅÅÅÅÅÅÆÆÆÆÇÇÆÆÇÇÈÈÉÉÉÉÉÉÉÈÇÇÈÈËËËËÊÊËËËËËÊËÊÊÊÍÍÌÌÎÏÐÐÎÏÐÐÑÑÒÒÔÔÔÕÔÔÔÔÔÔÕÕÕÕÖÖÕÕÖÖÖÖÖÖÖ××××××ØØØÙÙÚÚÚÚÂÂÂÂÂÂÃÃÃÃÃÄÃÄÄÄÅÅÅÅÅÅÄÄÆÆÆÆÆÆÆÆÆÅÅÅÆÆÆÆÇÇÈÈÉÉÉÉÈÉÈÈÇÈÈÉËËËËÊÊËËÊÊÊÊËËËËÌÌÍÎÎÏÏÏÎÐÐÑÑÒÒÒÓÓÓÓÓÔÔÔÔÔÕÕÕÕ×ØÖÖÖÖÖÖÖÖÖ××××××ØØØÙÙÚÚÚÚÂÂÂÂÂÂÃÃÃÃÃÄÃÄÄÄÅÅÅÅÅÅÄÄÆÆÆÆÆÆÆÅÅÅÅÅÆÆÆÆÇÇÈÉÉÉÉÉÈÉÈÈÈÈÉÊËËËËÊËÌÌÊÊÊÊËËËËËÌÍÎÏÏÏÏÎÐÐÑÑÒÒÒÓÓÓÔÔÔÔÕÓÔÕÕÕÕ×ØÖÖÖÖÖÖÖÖÖÖ××××××ÙØÙÚÚÛÛÚÂÂÃÃÃÃÃÃÂÃÄÄÄÄÄÄÅÅÅÅÅÅÅÅÅÅÄÄÄÅÅÅÆÆÆÆÇÇÇÇÇÈÉÉÉÊÊÊÈÇÈÈÇÈÉÊËËËËÊÊËËÊÊÊÊËËËËÍÍÎÎÎÎÎÎÎÏÐÑÑÒÓÓÕÕÔÔÕÕÕÕÔÔÕÕÕÕ×ØÖÖÖÖÖÖÕÕÖÖ××××××ØØÙÙÚÚÚÚÂÂÃÃÃÃÃÃÃÃÄÄÄÄÄÄÅÅÅÅÅÅÅÅÆÆÅÅÅÅÅÅÆÆÆÆÇÇÇÇÈÈÉÉÊÊÊÊÇÇÈÈÈÈÉÊËËËËÊÊËËÊÊÊÊËËËËÍÍÎÎÎÎÎÍÏÏÑÑÒÒÓÓÕÕÔÔÕÕÕÕÔÔÕÕÕÕ××ÖÖÖÖÖÖÕÕÖÖ××××××××ØÙÙÙÙÙÃÃÃÃÃÃÄÄÃÃÄÄÄÄÅÅÆÆÆÆÅÅÆÆÇÇÆÆÆÆÆÆÆÆÆÆÇÇÇÇÈÈÉÊÊÊÊÊÇÇÇÇÉÊÊÊËËËËÊÊËËÉÉÉÊËËÌÌÍÍÍÍÍÍÎÎÏÏÑÑÒÓÓÓÕÕÔÕÕÕÕÕÔÔÕÕÕÕ××ÖÖÖÖÖÖÖÖÖÖ××××××ÖÖØØØØÙÙÃÃÃÃÃÃÄÄÃÃÄÄÄÅÅÅÆÆÆÆÅÅÆÆÇÇÆÇÇÇÆÆÆÆÆÇÇÇÇÇÈÈÉÉÊÊÊÊÈÇÇÈÉÊÉÊËËËËÊÊËËÉÉÊÊÌÌÌÍÍÍÍÍÍÍÎÎÏÏÑÑÒÒÓÓÕÕÔÕÕÕÕÕÔÔÔÕÕÕ××ÖÖÖÖÖÖÖÖÖÖ××××××ÖÖ×ØØØÙÙÃÃÃÃÃÃÃÃÃÃÄÄÅÅÅÅÆÆÆÆÅÅÆÆÆÆÆÆÇÇÇÇÇÈÈÈÈÈÈÈÉÉÈÈÈÈÈÈÉÉÈÈÉÊÊÊËËËËÊÊËËËËËÌÌÍÎÎÍÍÍÍÎÎÎÎÏÏÐÑÑÒÒÒÔÔÔÔÕÕÕÕÔÔÔÔÕÕÖÖÖÖÖÖÖÖÖÖÖÖ××××××ÖÖØØØÙÙÙÃÃÃÃÃÃÃÃÃÃÄÄÅÅÅÅÆÆÆÆÅÅÆÆÅÆÆÇÇÇÇÇÈÈÈÈÈÈÈÈÉÉÈÈÈÈÈÈÉÉÈÈÉÊÊÊËËËËÊÊËËËËÌÌÍÎÎÎÎÎÎÎÏÏÏÏÏÏÐÑÑÒÒÒÓÔÔÔÔÔÕÕÔÔÔÔÕÕÖÖÖÖÖÖÖÖÖÖÖÖ××××××ÖÖØØØÙÙÙÃÃÃÃÃÃÃÃÃÃÃÃÄÄÄÄÆÆÆÆÅÅÆÆÅÆÆÇÈÈÈÇÈÇÈÈÈÈÈÈÉÉÉÉÈÈÈÈÉÉÈÈÉÉÊÊËËËËÊÊËËËËÌÌÍÎÎÎÏÏÏÏÏÏÎÏÏÏÏÐÐÑÒÒÔÔÓÔÔÔÔÔÕÕÔÔÕÕÖÖÖÖÕÕÖÖÖÖÖÖ××××××ÖÖ×ØØÙÙÙÃÃÃÃÃÃÃÃÃÃÃÃÄÄÄÅÆÆÅÅÅÅÆÆÆÇÇÇÈÈÇÇÇÇÈÈÈÈÈÈÉÉÉÉÈÈÈÈÈÉÉÈÉÉËËËËÊÊÊÊËËËËÌÌÍÍÎÎÏÏÐÐÐÐÏÏÐÏÐÐÑÑÒÓÔÔÓÓÔÔÔÔÕÕÔÔÕÕÖÖÖÖÕÕÖÖÖÖÖÖ××××××ÖÖ×ØØØÙÙÃÃÃÄÄÄÄÄÄÅÅÅÅÆÆÅÅÅÆÆÆÆÆÆÆÆÇÈÈÈÈÇÇÇÇÇÇÇÇÇÈÈÈÈÈÈÉÉÉÊÉÉÊÊÊÊÊÊËËËËÊÊÌÌÌÍÎÎÏÏÐÐÏÐÐÐÐÐÐÐÐÑÑÒÒÒÒÓÒÒÒÓÓÓÔÔÓÓÔÔÕÕÕÕÖÖÖÖÖÖÖÖÖ×××××ÕÖØØØØÙÙÄÄÄÄÄÄÄÄÅÅÅÅÆÆÅÅÅÅÆÆÆÆÆÆÆÇÈÈÈÈÇÇÇÇÇÇÇÇÇÇÈÈÈÈÈÈÉÉÉÉÉÉÊÊÊÊÊÊÊÊËËÊÊÌÌÍÍÎÎÏÏÏÏÎÎÏÏÏÏÐÐÐÑÑÒÒÒÓÓÒÓÓÓÓÓÔÔÓÓÔÔÕÕÕÕÖÖÖÖÖÖÖÖ×××Ø××ÖÖØØØØÙÚÄÄÄÄÄÄÄÄÅÅÅÆÅÅÅÅÅÅÅÅÆÆÆÆÈÉÈÈÈÇÇÆÇÇÇÇÇÇÇÇÈÈÈÈÈÈÈÈÉÉÉÊÊËÊÊÊÊÊÊËËËËÌÌÍÍÎÏÏÏÎÎÎÎÏÏÏÏÐÐÐÑÑÒÒÒÒÒÒÓÒÒÒÒÔÔÓÓÔÔÕÕÖÖÖÖÖÖÖÖÖ××××Ø××ÖÖØØØÙÙÙÄÄÄÄÄÄÄÄÅÅÅÅÅÅÅÅÅÅÅÅÆÆÆÆÈÉÈÈÈÇÇÇÇÇÇÇÇÇÇÇÈÈÈÈÈÈÈÈÉÉÉÉÊËÊÊÊÊÊÊËËËËÌÌÍÍÎÍÏÏÏÎÎÎÎÎÎÎÐÐÐÑÑÒÒÓÒÒÒÒÒÒÒÒÔÔÓÓÔÔÕÕÖÖÖÖÖÖÖÖÖÖÖ×××ÖÖÖÖØØØØÙÙÂÃÃÃÄÄÄÅÅÅÄÄÄÄÄÄÅÅÅÅÅÆÇÇÈÈÉÉÉÉÉÉÉÉÈÈÈÈÈÈÇÇÇÇÉÉÉÉÊÊÊÊÉÉÉÉÉÉÉÉÊÊËËÌÌÍÍÍÍÎÎÏÎÏÏÏÎÎÍÐÐÑÑÒÒÓÓÔÔÔÔÓÓÓÓÓÓÓÓÓÔÕÕÖÖÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖ××ØØØØÂÂÂÃÄÄÅÅÅÅÄÄÄÄÄÄÅÅÅÅÆÆÇÇÈÈÈÉÉÉÉÉÉÉÈÈÈÈÈÈÇÇÇÈÉÉÉÉÊÊÊÊÉÉÉÉÉÉÉÊÊÊËËÌÌÍÍÍÍÎÎÏÐÐÐÏÏÎÎÐÐÑÑÒÒÓÓÔÔÔÔÓÓÓÓÓÓÓÓÓÓÕÕÖÖÕÕÖÖÖÖÕÖÖÖÖÖÕÕÖÖ××ØØØØÂÂÃÃÄÄÅÅÄÄÄÄÄÄÄÄÅÅÅÅÆÆÆÆÈÈÈÈÉÉÉÊÊÊÊÊÉÉÉÉÈÉÉÉÉÊÊÊËËËÊÊÊÊÊÉÊÊÊÊËËËÌÌÍÍÎÏÎÎÏÏÐÐÏÏÏÏÐÏÑÑÒÒÓÓÔÔÔÔÓÓÓÓÓÓÓÓÓÓÕÕÖÖÕÕÖÖÖÖÖÖÖÖÕÕÕÕÖÖÖÖØØØØÃÃÃÄÄÄÅÅÄÄÄÄÄÄÄÄÅÅÅÅÆÆÆÆÈÈÈÈÉÉÉÉÊÊÊÊÉÉÉÉÉÉÉÊÊÊÊËËËÊÊÊÊÊÊÊÊÊËËËËÌÍÍÍÎÏÏÏÏÏÏÏÐÏÏÐÐÏÏÑÑÒÓÓÓÔÔÔÔÓÓÓÓÒÓÓÓÓÓÕÕÖÖÕÕÖÖÖÖÖÖÖÖÕÕÕÕÖÖÖÖØÙØØÃÃÄÄÄÅÅÅÄÄÄÄÄÄÄÄÆÆÆÆÇÇÈÈÈÈÉÉÊÊÊËÊÉÉÉÉÉÉÉÉÊÊÊÊËËËÊËËËÊÊÊÊÊËËËËÌÌÌÎÎÎÎÎÏÏÐÏÏÐÐÑÑÐÐÐÐÐÑÒÒÔÔÔÔÔÔÓÓÓÓÒÒÓÓÓÓÔÔÕÕÕÕÖÖÖÖÖÖÕÕÕÕÕÕÖ××××ØÙÙÄÄÅÅÅÅÅÅÄÄÄÄÄÄÄÄÆÆÆÆÇÇÈÈÉÉÉÉÉÊÉÉÉÉÉÉÉÉÉÉÊÊÊËËËËËËËËËÊÊÊÊËËËËÌÌÌÌÎÎÏÏÏÏÐÐÏÏÏÐÑÑÑÑÐÐÑÑÒÒÔÔÔÔÔÔÓÓÓÓÒÒÓÓÓÓÔÔÕÕÕÕÖÖÖÖÖÖÕÕÕÕÕÕ××××ØØÙÙÅÅÅÅÄÄÃÃÄÄÄÄÄÄÄÄÆÆÆÆÈÈÈÈÉÉÈÉÉÉÉÉÊÊÊÊËËËËËËËËËÌËËËËËËËËËËÌÌÌÌÌÍÍÍÏÏÏÏÐÐÐÐÏÏÏÐÑÑÒÒÐÐÒÒÓÓÔÔÓÓÓÓÓÓÓÓÒÒÓÓÓÓÓÔÕÕÖÖÖÖÖÖÕÕÕÕÕÕÕÕ×××ØØØØØÆÆÅÅÅÅÃÃÄÄÄÄÄÄÄÄÆÆÆÇÈÈÉÉÉÉÈÉÉÉÉÉÊÊÊÊËËËËËËËËÌÌËÌËËËËËÌÌÌÌÌÌÍÍÍÍÍÐÐÐÐÑÐÐÐÐÐÐÑÑÒÒÒÑÑÒÓÓÔÔÔÓÓÓÓÓÓÓÓÒÒÓÓÓÓÔÔÕÕÖÖÖÖÖÖÕÕÕÕÕÕÕÖ××××ØØØØÆÆÆÅÆÆÆÆÅÅÅÅÅÆÆÆÈÈÈÉÈÈÈÉÇÈÉÊÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËÌÌÍÌÌÌÌÍÍÎÎÎÎÎÎÏÐÑÑÐÐÐÏÑÑÑÒÒÒÒÒÒÑÓÓÓÔÔÔÔÔÕÔÔÓÓÓÓÓÔÔÔÔÖÖÖÖÖÖÕÕÕÕÕÕÔÔÔÕÖÖ××××××××ÅÅÅÅÆÆÆÆÅÅÅÆÆÆÆÆÈÈÉÉÈÈÉÉÇÇÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËÌÍÍÌÌÍÍÍÍÎÎÎÎÎÍÏÐÐÑÐÐÏÏÒÒÒÒÒÒÒÑÒÒÓÓÔÔÔÔÔÔÕÔÔÓÓÓÓÔÔÔÔÔÖÖÖÖÖÖÕÕÕÕÕÕÔÔÔÕÖÖ××××××××ÅÅÆÆÆÆÆÆÆÆÆÆÇÇÇÇÈÈÉÉÈÈÉÊÈÉÉÉËËËËËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊËÌÌÍÍÎÍÍÍÍÎÎÎÎÍÎÎÐÐÑÑÐÐÏÑÑÑÑÒÒÑÑÒÒÒÒÔÔÔÔÔÔÔÔÔÔÔÔÓÓÔÔÕÕÖÖÖÖÕÕÕÕÕÕÕÕÔÔÔÕÖÖ××××××××ÆÆÇÇÇÇÇÇÆÆÆÇÇÇÇÈÇÈÉÉÈÈÉÊÈÉÉÊËËËÊËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊËÌÌÍÍÎÍÍÍÍÎÎÎÎÍÎÏÐÐÑÑÑÐÐÐÐÑÑÑÒÒÒÓÓÓÔÔÔÔÔÔÔÔÔÔÔÔÔÓÓÔÔÕÕÖÖÖÖÕÕÕÕÕÕÕÕÔÔÔÕÖ×××××××××ÇÇÇÇÇÇÇÇÆÇÇÇÆÇÇÇÆÇÈÈÈÈÊÊÈÉÉÊËËÉÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËÍÍÍÍÎÎÍÍÎÎÎÎÍÎÏÐÑÑÑÑÐÏÑÐÐÐÑÑÑÑÒÒÒÓÔÔÓÓÔÔÔÔÓÓÓÔÔÓÔÔÕÕÖÖÕÕÖÖÖÖÖÕÕÖÕÕÕÖ×ØØØØØØØØØÈÈÈÈÈÈÈÈÇÇÇÇÇÇÇÇÇÇÈÈÈÈÊÊÈÉÉÊËÊÉÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËÍÍÍÍÎÎÍÍÎÎÎÍÍÍÏÏÐÐÐÐÏÏÐÐÐÐÑÒÒÒÓÓÒÒÓÓÓÓÔÔÔÔÓÓÓÔÔÓÔÔÕÕÖÖÕÕÖÖÖÖÖÕÕÖÕÕÕÖ××ØØØØØØØØÈÈÈÈÈÈÇÇÇÇÇÇÇÈÈÈÇÇÈÈÈÈÊÊÉÉÊÊÊÊÊÉËËËËËËËËËËËËËËËËËËÍÍÍÍÎÎÍÍÎÎÍÍÍÍÏÏÐÑÑÑÐÐÐÐÐÐÐÐÑÑÑÒÒÒÑÑÑÒÓÓÓÔÔÔÕÕÔÓÔÔÕÕÖÖÖÖÕÕÕÕÕÕÕÖÕÕÕÖ××ØØØØØØØØÈÈÈÈÈÈÇÇÇÇÇÈÈÈÈÈÇÇÈÈÈÉÊÊÊÊÊËËÊÊÊËËËËËËËËËËËËËËËËËËÍÍÍÍÎÎÍÍÎÎÍÍÎÎÎÎÐÐÑÐÐÐÐÐÐÐÏÏÐÐÐÑÒÒÐÐÑÒÒÓÓÔÕÕÕÕÒÓÔÔÕÕÕÖÖÖÕÕÕÕÕÕÖÖÕÕÕÖ××ØØØØØØØØÉÉÉÉÈÈÈÈÈÈÈÈÈÈÈÈÉÉÈÈÉÉÊÊËËËËËËËËËËËËËËËËËËËËËËËËËËÍÍÍÍÍÍÎÎÎÎÍÍÎÎÌÌÎÎÏÏÎÎÐÐÐÐÑÑÑÑÐÑÒÒÑÒÓÔÑÒÓÔÔÕÕÖÒÓÔÔÕÕÕÕÖÖÕÕÕÕÕÕÖÖÖÖÖÖÖ××××ØØØØØÉÉÉÉÈÈÈÈÈÈÈÈÈÈÈÈÈÉÈÈÉÉÊÊËËËËËËËËËËËËËËËËËËËËËËËËËËÍÍÍÍÍÍÎÎÎÎÍÍÎÎÌÌÎÎÎÎÎÎÍÎÎÏÐÐÑÑÏÏÐÑÑÒÒÓÒÒÓÔÕÕÕÕÒÓÔÔÕÕÕÕÖÖÕÕÕÕÕÕÕÖÖÖÖÖÖÖ××××ØØØØÈÈÈÈÈÈÈÈÈÈÉÉÉÉÉÈÈÈÈÈÉÉÊÊÊÊÊÊËËËËËËËËËËËËËËËËËËËËËËÍÍÌÌÍÍÎÎÍÍÍÍÎÎÌÍÍÍÏÏÎÎÌÍÏÏÐÐÏÏÏÎÏÐÐÑÑÐÒÒÓÔÔÔÔÕÓÓÔÕÕÕÕÕÖÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖ××××ÈÈÈÈÈÈÈÈÈÈÉÉÉÉÉÉÈÈÈÈÉÉÊÊÊÊÊÊËËËËËËËËËËËËËËËËËËËËËËÍÍÌÌÍÍÎÎÍÍÍÍÎÎÌÌÌÍÎÎÎÎÏÐÑÑÑÏÏÏÒÑÑÑÒÒÑÐÑÒÓÔÔÔÕÔÓÔÕÖÕÕÖÖÖÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖ××××ÈÈÈÈÈÈÈÈÉÉÉÉÉÉÉÉÉÉÉÉËËËËÊÊÊÊËËËËËËËËËËËËËËËËËËËËËËÍÍÌÌÍÎÎÎÍÍÎÎÎÎÌÍÍÍÎÎÏÐÐÏÐÐÌÍÐÏÍÐÒÓÒÒÐÎÑÒÓÓÔÔÔÓÓÔÔÕÕÕÖÖÖÖÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖ××××ÈÈÈÈÈÈÈÈÉÉÉÉÉÉÉÉÉÉÉÉËËËËÊÊÊÊËËËËËËËËËËËËËËËËËËËËËËÍÍÌÌÍÍÎÎÍÍÎÎÎÎÌÌÍÍÎÎÏÏÒÍËÍÐÒÕÔÏÒÓÒÐÐÏÑÑÑÒÓÔÔÔÓÓÓÔÕÕÕÖÕÖÖÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖ××××ÈÈÈÈÈÈÈÈÈÉÉÉÉÉÉÉÊÊÊÊÊÊËËËËËËËËËËËËËËËËËËËËËËËËËËËËÍÍÌÌÎÎÍÍÍÍÎÎÍÎÌÌÍÍÎÎÎÏÌÎÐÐÐËÆÅÇÎÑÑÑÎÐÕÑÒÓÔÔÕÓÓÓÔÕÕÔÔÕÕÖÖÖÖÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖ××××ÈÈÈÈÈÈÈÈÉÉÉÉÉÉÊÊÊÊÊËÊÊËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÍÍÌÎÎÍÍÍÍÍÎÎÎÍÌÍÍÎÎÏÏÈÑÐÆ¹ª£Š°»ÇÏÓÏÎÓÑÑÑÓÓÓÓÓÓÔÔÕÔÔÕÔÖÖÖÖÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖ×××ÉÉÉÉÉÉÉÉÈÈÈÉÉÉÉÊËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌËËÌÍÍÍÍÌÌÎÍÍÎÏÏÎÎÎÎÏÏÎÎÎÌœŠ€µÆÒÒÍÑÐÑÒÒÓÔÔÓÔÓÔÔÔÔÓÓÕÕÖÖÖÖ××ÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÉÉÉÉÉÉÉÉÈÉÉÉÉÊÊÊËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌËËÍÍÍÍÌÌÎÎÍÍÏÏÎÎÎÎÏÏÎÎÓÀ¢£žÎÑÎÒÏÐÑÒÓÓÔÓÔÓÔÔÔÔÓÓÕÕÖÖÖÖ××ÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÉÉÉÉÉÉÉÉÈÈÉÉÊËËÊËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËËËËËËËËËËËËËËÌÌËËÍÍÌÌÍÍÍÎÍÎÏÏÍÍÎÎÎÎÎÎÍ¯ªÄÍËÓÏÐÏÐÒÓÔÓÔÓÓÓÔÔÔÔÕÕÕÖÖ×××ÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÉÉÉÉÉÉÉÉÈÈÈÉÉÊÊÊËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËËËËËËËËËËËËËËÌÌËËÍÍÌÌÍÍÍÎÍÎÏÏÎÎÍÍÍÎÎÍÂ£ŒÆÇÏÎÐÐÐÑÓÓÔÔÓÓÓÔÔÔÓÕÕÕÖÖ×××ÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÉÈÉÉÉÉÉÉÉÉÊÊÊÊËËËËËËËËËËËËËËËËËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËËÌÌÍÍÍÍÍÍÎÐÌÍÎÎÎÎÎÌŸ°Â¿ÑÎÏÐÐÑÓÓÔÔÔÔÔÕÔÔÒÔÔÖÖÖÖ×ØÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÈÈÈÈÉÉÉÉÉÉÉÊÊÊËËËËËËËËËËËËËËËËËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËËÊËÍÎÍÍÍÎÎÎÎÎÍÍÍÍŒ}z{{tv{z~
+¹ÂÍÏÐÑÐÐÒÒÒÓÓÔÔÔÓÔÓÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÈÈÉÉÉÉÉÉÉÉÉÊÊÊÊËËËËËËËËËËËËËËËËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÉÊÊÊÊËËËÌÌÍÌÌÍÎÐÍÎÌÌÍÍËËž{oqsehjgms¥ÆÌÐÑÑÒÓÓÔÔÔÓÓÓÓÔÔÔÕÕÖÖÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÈÈÉÉÉÉÉÉÊÊÊÊÊËËËËËËËËËËËËËËËËËËËÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËÍÍÌÌÍÎÎÏÍÏÍÎÐÍËËÃ¥vnmdggddekÄÒÎÏÏÑÑÒÓÓÔÔÓÓÒÒÓÔÕÕÕÖÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÈÈÈÈÉÉÉÉÊÊÊÊÊÊÊÊÊÉÉÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËËÌÌËËÌÎÏÐÎÌÊËËÌÍËÈÊÐÆ¯zyywqjlwÂÑÐÐÑÑÑÑÑÓÓÔÓÓÓÒÔÔÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÈÈÈÈÉÉÉÉËËÊÊÊÊÊÌÊÉÉÉÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËËÌÌÌÌÎÌËÌÎÏÏÏËÌÊÊÍËÉÍÃÏÍÈ¶¡
+ŠœÑÒÏÏÏÑÑÑÒÒÑÒÒÓÔÔÔÔÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÈÈÈÈÉÉÉÉÊÊÊÊÊÊÊËÊÉÉÉÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊËËËÌÌÌÌÌÏÎÌËËËÌÍËÌÈÈÍÌÊÏÍÈº¬°ÄÏÏÉËÍÎÎÏÐÐÒÒÒÔÕÕÓÒÔÔÔÔÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÉÉÉÉÊÊÊÊÊÊÊÊÊÊÊËÉÉÉÊÊÊÊËÊÊÊÊÊÊÊÊËËËËËËËËÊÊÊÊÊÊÊÊËËËÌÌÌÌÌÉËÍÍËÇÄÃÁÃ¿ÀÆÄÁÆžŠµÊÒÎÎÐÑÒÑÐÏÔÓÓÔÖÕÒÐÔÔÔÔÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÉÉÉÉÊÊÊÊËËËËËËËÊÉÉÊÊÊËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌËËÌÌÌÍÍÍÐÇŒ±š ¬Â©
+¯ÈÎÂÁÁÇÉÍÑÕÓÔÔÓÒÒÔÖÓÓÓÔÔÔÔÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÊÊÊÊËËËËËËËËËËËËÊÊÊÊÊËËËÌÌÌÌÌÌÌÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÌÌÌÌÌÍÍÍÐÌÈÆÄÂŸ»«©¢Š¹Ä¡
+~~«ÀÁŠ®»ÆÒ×ÕÒÒÕÓÓÓÓÔÔÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÌÌËËËËÌÌËËÊÊËËËËÊÊÊÊËËËËÌÌÌÌÌÌÌÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÌÌÌÌÍÍÍÍÍÍÍÎÐÐÏÍÎÉÊÇÄÍÏÀ
+}šÀÆŠ ²ÄÏÔÓÒÓÓÓÓÔÔÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖËËÊÊÊÊËËËËÊÊËËËÌÊÊÊËËËËÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÌÌÍÍÍÍÍÍÏÎÎÎÍÍÍÍÌÉÐÓÎÏÐÆ¡}}{}~¢œËÌÈÉËÈÁŒŒ·±®²ŸËÒÕÒÓÓÓÓÔÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÊÊÊÊÊÊÉÉÊÊÊÊËËËËÊÊÊËËÌÌÍÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÍÍÎÎÏÏÏÐÐÐÏÏÎÏÐÐÎÌÌÍËÌÐÐ¢}{}xy¡ºÈÎÏÐÑÓÓÔÔÔÓÓÓÔÔÓÓÒÓÔÔÔÕÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÊÊÊÊÊÊÉÉÊÊÊÊËÌËÌÊÊÊËÌÍÍÍÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÎÎÎÏÐÐÐÑÎÏÏÏÏÏÏÐÐÑÎÍÐÑÎËŠ}~}{x{¡ºÌÍÍÍÍÎÑÔÓÍÏÓÔÔÓÓÔÓÓÔÔÕÕÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖËËËËÊÊÊÊËÊËËËÌÍÍÊÊËËÌÍÍÍÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÐÐÑÑÑÐÐÐÐÐÐÏÏÊÎÑÏÌÍÑÓ°{}{vw{{¡ŸÑÍÏÏÐÑÓÔÓÔÓÒÒÓÔÔÓÓÓÓÓÔÔÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖËËËËÊÊÊÊËÊËËËÌÍÍËËËÌÌÍÍÍÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÐÐÐÐÑÑÑÑÑÐÏÏÐÏÐÏÓÏÏÑÏÏÑÏž
+~vwvzwytŠÁÑÎÍÏÑÑÑÑÒÐÐÑÓÕÕÔÔÓÓÓÔÔÔÔÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖËËËËËËËËÌÌÊÊÊËÌÍËËËÌÌÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÎÏÏÏÐÐÐÐÐÐÑÑÐÐÐÐÐÐÐÏÏÏÏÏÏÏÐÏ¿
+~{rvttwtw¥ÅÐÏÏÏÏÐÐÑÑÒÓÔÕÔÔÔÔÓÔÔÔÕÖÖÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖËËËËËËËËÍÌËËËÌÍÍÌÌÌÌÌÌÍÍÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÐÐÐÐÐÑÑÐÐÐÐÐÐÐÐÐÑÐÐÏÏÐÐÈyzsvtory|¥ÈÓÐÐÏÐÐÑÒÑÒÓÔÕÔÔÔÔÔÔÔÔÖÖÖÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÌÌÌÌÌÌÌÌÌÌËËËËÌÍÍÍÍÍÍÌÌÌÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÏÏÎÎÏÏÏÏÏÏÏÏÏÏÐÐÑÑÑÑÑÑÑÑÑÑÑÑÐÐÐÐÐ¥wysrqqkty®ÍÒÑÑÐÑÑÒÒÒÑÒÓÔÔÕÖÖÕÕÔÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÌÌËËËÌÌÍÍÍÍÍÍÍÌÌÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÎÏÏÎÏÏÏÏÐÏÏÏÏÏÏÐÐÑÑÑÑÑÑÑÑÒÑÑÑÑÐÑÐÓ±yzrnmqjow»ÎÎÐÒÑÑÒÒÒÓÑÒÓÔÔÕÖÖÕÕÔÔÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÎÎÎÎÎÎÎÎÎÎÍÍÍÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÎÎÎÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÒÒÒÒÒÒÒÒÑÑÑÑÑÐÑÑÕ»zwqmkkkq~ŠÆÏÏÑÒÑÑÒÒÓÓÒÓÔÕÕÖÖÖÕÕÔÔÔÔÔÔ××××××××××××××××ÎÎÎÎÎÎÎÎÎÎÍÎÎÎÎÏÏÏÎÎÎÎÏÏÏÏÏÏÏÏÏÏÑÑÑÑÑÑÐÐÏÏÏÏÐÐÐÐÐÐÐÐÑÑÑÑÒÒÒÒÒÒÒÒÐÐÑÑÑÑÑÑÖÆ{spolkim³ÍÐÏÒÑÑÒÒÒÓÔÒÔÔÕÕÖÖÖÕÕÔÔÔÔÔÔ××××××××××××××××ÎÎÎÎÎÎÎÎÍÎÍÍÍÎÎÎÏÎÍÍÍÍÎÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÏÏÏÏÐÐÐÐÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÑÑÒÒÒÒÑÑÑÏ­qlnkmfnÀÏÓÑÒÒÒÒÒÓÔÔÓÔÔÕÕÖÕÕÔÔÔÔÔÔÔÔ××××××××××××××××ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÍÍÍÍÎÏÐÐÐÐÐÐÐÐÎÎÎÎÎÎÎÎÏÏÏÐÐÐÐÑÓÓÒÒÒÒÒÒÓÓÓÓÓÓÓÓÑÒÒÓÓÒÒÑË×ŸrgjiifzšËÍÒÔÓÓÒÒÓÔÔÔÓÔÕÕÕÖÕÕÔÔÔÔÔÔÔÔ××××××××××××××××ÎÎÎÎÎÎÎÎÎÏÎÎÎÏÏÏÏÎÎÍÍÎÎÏÐÐÐÐÐÐÐÐÏÏÏÏÏÏÏÏÑÑÑÑÒÒÒÒÒÒÒÒÑÑÑÑÒÒÓÓÓÓÓÓÑÒÓÓÓÓÒÑÐÐÎ¯kihid¿ÔÒÒÓÓÔÔÓÔÕÕÕÕÕÕÕÔÔÔÔÔÔÔÔÔÔÔÔ××××××××××××××××ÎÎÎÎÎÎÎÎÏÏÎÎÏÏÏÏÏÏÎÎÎÎÏÏÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÑÑÑÑÒÒÓÓÓÓÓÓÒÓÓÔÔÓÓÒÎÏ×Ç {ifg~«ÏÓÐÔÖÔÔÔÕÔÕÔÖÕÕÕÕÔÔÔÔÔÔÔÔÔÔÔÔ××××××××××××××××ÍÍÍÍÍÍÍÍÎÎÏÐÐÐÐÐÐÐÏÏÏÐÐÑÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÒÒÒÒÓÓÓÓÓÓÒÒÒÒÒÓÓÓÓÓÑÑÑÒÒÑÑÑÓÐÔÔÂ¥«ËÖÑÒÔÔÕÕÕÕÔÕÖÖÕÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÎÎÏÏÐÐÐÐÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÏÏÏÏÐÐÐÐÑÑÑÑÒÒÒÒÓÓÓÓÓÓÒÒÓÓÓÓÓÓÓÓÑÑÒÒÒÒÑÑÖÒÏÐÒÊŒ¹ÄÎÕÔÓÓÓÓÕÕÕÕÕÕÖÕÕÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÒÒÒÓÓÒÒÒÒÒÒÑÑÓÓÓÓÔÕÕÔÓÓÓÓÔÔÔÔÓÔÔÑÔÔÐÓÒÔÓÓÓÑÒÔÕÕÕÕÔÔÕÔÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖØØØØØØØØÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÎÎÎÏÏÏÐÐÐÐÐÐÐÐÐÐÑÑÑÑÒÒÒÒÑÑÒÒÒÒÓÓÒÒÒÒÒÒÑÑÒÓÓÓÔÕÕÕÔÓÓÓÔÔÔÔÓÓÓÒÕÔÐÕÑÔÒÑÒÒÓÔÕÕÕÕÔÔÕÕÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖØØØØØØØØÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÎÎÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÒÒÑÑÒÒÑÑÒÒÒÒÒÒÒÒÒÒÒÒÔÔÔÕÕÕÔÔÔÔÔÔÔÔÕÒÒÒÔÕÐÓÔÔÔÒÓÕÔÒÔÔÔÔÕÕÔÕÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖ××××××××ÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÎÎÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÒÒÑÑÒÒÒÑÓÓÒÒÒÒÒÒÒÒÒÒÓÔÔÕÕÕÔÔÔÔÔÔÔÔÓÕ×ÔÒÔÒÓÔÓÔ×ÕÕÖÖÔÕÔÕÕÕÕÕÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖ××××××××ÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÎÎÎÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÒÒÑÑÒÒÒÒÓÔÒÒÒÒÒÒÒÒÒÒÒÓÔÕÕÕÔÔÔÔÔÔÔÔÔÔÓÓÓÓÓÓÔÔÔÔÔÔÔÔÕÔÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÕÖÖÖÖÖÖÖÖ××××××××ÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÎÎÎÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÒÒÒÑÑÒÒÒÒÓÓÒÒÒÒÒÒÒÒÒÒÒÓÔÕÕÕÔÔÔÔÔÔÔÔÔÔÓÓÓÓÓÓÔÔÔÔÔÔÔÔÔÔÔÔÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖ××××××××ÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÎÎÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÒÒÒÑÑÒÒÒÒÓÓÒÒÒÒÒÒÒÒÓÓÓÓÓÓÔÔÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÓÓÓÓÓÔÔÔÔÔÔÔÔÔÔÔÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÎÎÏÏÏÏÏÏÎÎÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÒÒÒÓÓÒÒÒÒÒÒÒÒÓÓÒÓÓÓÓÓÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÓÓÓÓÓÓÓÓÔÔÔÔÔÔÔÔÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÑÑÐÐÐÐÐÐÑÑÑÑÑÑÒÒÒÒÓÓÓÓÓÓÓÓÓÓÓÓÓÔÔÓÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÒÒÒÓÓÓÓÓÔÔÕÕÕÕÕÔÖÖÖÖÖÖÖÖÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÑÑÏÐÐÐÐÐÐÐÑÑÑÑÒÒÒÒÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÓÒÒÓÓÓÓÔÔÔÕÕÕÕÕÕ×ÖÖÖÖÖÖÖÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÐÐÑÑÑÐÐÐÐÐÐÐÐÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÔÓÒÒÓÓÓÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÍÍÍÍÍÍÍÍÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÐÐÑÑÑÐÐÐÐÐÐÐÐÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÒÒÒÒÒÒÒÓÓÓÓÓÓÓÔÓÒÒÓÓÔÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÎÎÎÎÎÎÎÎÎÎÎÏÏÏÐÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÑÑÐÏÏÏÏÏÏÏÏÏÏÏÐÐÐÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÒÒÒÒÓÓÓÓÓÓÓÔÓÓÓÔÓÔÔÔÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÎÎÎÎÎÎÎÎÎÎÎÏÏÐÐÐÏÏÏÏÏÏÏÏÏÏÐÐÐÑÑÑÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÒÒÒÒÓÓÓÓÓÓÓÓÓÓÔÔÓÔÔÔÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÎÎÎÎÎÎÎÎÎÎÎÏÐÐÑÐÏÏÏÏÏÏÏÏÏÐÐÐÐÑÑÑÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÓÓÒÒÒÒÒÒÓÔÓÓÓÔÔÔÔÔÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÎÎÎÎÎÎÎÎÎÎÎÏÏÏÐÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÓÓÒÒÒÒÒÒÔÔÓÓÓÔÔÔÔÔÕÕÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÐÏÏÏÏÏÏÏÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÒÒÒÒÒÒÒÒÓÓÒÒÓÓÓÓÒÒÒÒÒÒÑÑÑÑÑÑÓÓÓÓÔÔÔÔÔÔÓÓÔÔÔÔÕÕÕÕÕÔÔÔÔÕÕÕÕÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÐÏÏÏÏÏÏÏÍÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÒÒÒÒÒÒÒÒÓÓÒÒÓÓÓÓÒÒÒÒÒÒÑÑÑÑÑÑÒÓÓÓÓÓÓÔÔÔÓÓÔÔÔÔÕÕÕÔÔÔÔÕÕÕÕÕÕÕÕÕÕÕÕÕ××××××××××××××××ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÑÑÑÑÑÑÑÑÒÒÑÑÑÑÑÑÒÒÒÒÒÒÒÒÑÑÑÑÒÒÒÓÓÓÓÓÓÓÒÒÓÓÓÓÓÓÓÓÔÕÕÕÖÖÖÖÕÕÕÕÕÕÕÕÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÎÏÎÏÎÏÏÐÏÐÏÐÏÐÑÑÑÑÑÑÑÑÒÒÑÑÑÑÑÑÒÒÒÒÒÒÒÒÑÑÑÑÒÒÒÒÓÓÓÓÓÓÒÒÓÓÓÓÓÓÓÓÔÕÔÕÖÖÖÖÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÒÒÑÑÑÑÑÑÒÒÒÒÒÒÒÒÐÐÐÐÑÑÑÑÓÓÓÓÓÓÓÓÓÓÓÓÔÔÔÔÔÓÔÓÔÔÔÔÕÕÕÕÕÕÕÕÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÒÒÑÑÑÑÑÑÒÒÒÒÒÒÒÒÐÐÐÐÑÑÑÑÒÓÓÓÓÓÓÓÓÓÓÓÔÔÔÔÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÎÎÎÎÏÏÏÏÏÏÏÏÎÎÎÎÎÎÎÎÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÐÐÐÐÐÐÒÒÒÒÒÒÒÒÑÑÑÑÑÒÑÑÒÒÒÒÒÒÒÒÓÓÒÒÒÒÒÒÔÔÔÕÕÕÔÔÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÍÍÍÎÎÎÎÏÏÏÏÏÏÏÏÎÎÎÎÎÎÎÎÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÐÐÐÐÐÐÒÒÒÒÒÒÒÒÑÑÑÒÒÒÒÑÒÒÒÒÒÒÒÒÓÓÒÒÒÒÒÒÔÔÔÔÕÕÔÔÓÓÓÓÓÓÓÓÔÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÎÌÌÌÍÍÍÏÏÐÐÐÐÐÐÐÐÎÏÏÏÎÎÍÍÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÏÏÏÏÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÒÒÑÑÑÑÑÑÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎËËÌÌÍÎÏÏÐÐÐÐÐÐÐÐÏÏÏÏÏÏÎÎÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÏÏÏÏÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÓÓÓÓÓÓÓÒÒÑÑÑÑÑÑÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÌÌÌÍÍÎÏÏÏÏÏÏÏÏÏÏÎÏÏÐÐÐÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÏÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÒÑÑÑÑÑÑÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÒÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÌÌÌÍÍÎÏÏÏÏÏÏÏÏÏÏÎÏÏÐÑÑÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÏÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÒÑÑÑÑÑÒÒÒÒÒÒÒÓÓÓÓÓÓÓÓÓÒÓÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÌÌÌÌÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏÏÎÎÎÎÎÎÏÐÑÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÐÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÓÓÓÓÓÓÓÓÓÓÓÓÓÓÒÓÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÌÌÌÌÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÏÏÎÎÎÎÍÎÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÐÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÑÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÒÓÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔËËËÌÍÍÍÍÎÎÎÎÍÍÍÍÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌÌÍÎÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÐÐÐÐÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÑÒÓÓÓÓÔÔÔÓÓÓÓÓÓÓÓËËËËÍÍÍÍÍÍÎÎÍÍÍÍÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌÌÍÍÎÎÎÎÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÐÐÐÐÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÑÒÓÓÓÓÓÓÓÓÓÓÓÓÒÒÒËËËËËËÌÌÌÌÌÌÌÌÌÌÏÏÏÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÒÒÑÑÑÑÑËËËËËËÌÌÌÌËËËÌÌÌÏÏÏÏÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÓÒÒÑÑÑÑÐÐÊÊÊÊÊÊËËÌÌËËËÌÌÌÏÏÏÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÍÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÓÓÒÒÒÑÑÐÐÐÊÊÊÊÊÊËËÌÌËËÌÌÌÌÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÏÎÎÎÎÎÎÎÍÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÓÓÓÒÒÒÑÑÐÐÐ§š©®¯¯¯¯°°±²²³µµ¶¶¶···¹¹»»ŒœœŸÀÀÀÀÁÂÃÄÅÅÆÇÈÉËÌÊËÌÌÊÊËÌÌÌÎÎÍÎÎÎÐÐÐÐÐÐÐÑÏÐÐÐÐÐÐÐÑÒÒÒÑÒÓÓÔÔÓÒÒÑÐÐÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÏÎÎÎÎÎÎÎÎÏÏÎÍÍÍÎÎšª«¯°±±±±²³³³Ž¶¶¶·¶··ž¹¹»ŒŒœŸŸÁÁÁÁÂÃÄÅÅÅÆÇÈÉËËÊËÌÌÊÊËÌÌÍÎÏÎÏÏÏÐÐÐÐÐÐÑÑÐÐÑÑÑÑÑÒÓÓÓÓÓÓÔÔÔÔÓÓÒÒÑÐÏÏÏÏÏÏÏÏÏÏÏÏÐÐÐÐÏÏÏÏÏÏÏÏÏÏÎÍÍÍÎÎª¬­¯°°²²³³Žµµµ¶·¶¶··žžº»»ŒœŸŸŸÀÀÀÁÂÃÄÅÅÅÆÇÇÉËËÊËËÌÊËÌÌÍÍÏÏÏÏÐÐÑÑÑÑÑÑÑÐÑÑÒÒÒÒÓÓÔÔÔÕÔÔÕÕÕÔÔÓÓÒÑÑÏÏÏÏÐÐÏÏÏÏÐÐÐÐÐÐÑÐÑÐÑÐÑÐÐÏÏÍÎÍÏÎ¬­®®±°²²³³µµ¶¶····žžž¹»»ŒœŸ¿¿¿ÁÁÁÂÂÃÄÅÅÆÇÈÇÊËËÊËÌÌËËËÌÍÍÏÏÏÏÐÐÑÑÑÑÑÑÐÐÑÒÒÓÓÓÔÔÔÔÔÕÔÔÕÕÕÕÓÔÓÓÒÑÏÏÏÏÐÐÏÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÎÎÎÏÏ­­°¯±±±²³ŽŽµµ¶···žžžºº»ŒœŸ¿¿ÀÀÂÃÃÄÄÅÇÈÆÈÉÉÊËÍËËÌÌÌËËËËÌÍÎÏÏÏÐÐÐÐÐÐÐÐÐÐÒÒÒÓÓÔÔÔÓÓÓÓÔÔÔÔÕÕÔÕÔÓÓÑÏÏÐÐÐÑÐÐÐÐÑÑÑÑÑÑÏÏÏÏÏÏÏÏÏÏÎÍÍÍÎÎ¢®¬°®°°±²³ŽŽµ¶¶···žž¹ºº»ŒœŸ¿ÀÀÀÂÃÃÄÅÆÇÈÇÊËÉËÌÍÍÌÌÌÌËËËËÌÌÎÎÎÏÐÐÐÐÐÐÐÐÑÑÒÒÓÓÓÓÔÔÓÓÓÓÔÔÔÔÕÕÔÔÔÔÓÒÐÏÐÐÑÑÐÐÏÏÐÐÐÐÐÐÏÏÏÏÏÏÏÏÏÏÎÍÍÍÎÎ€¯¬°¯±°³Ž³Ž¶¶····žž¹ººº»»ŒœŸ¿¿¿ÁÂÂÃÅÆÆÇÇÊÊÊÊËÍÌÌÌËËËËËËÍÍÍÎÎÏÐÐÑÐÐÏÐÑÒÒÒÓÓÓÔÔÔÔÔÔÔÔÕÕÕÕÕÕÕÕÔÔÓÒÑÑÑÑÏÏÏÏÏÏÐÐÐÐÐÐÏÏÏÏÏÏÏÏÏÏÎÍÍÍÎÎ©°­³±Ž²µµŽµ¶··ž··žž¹ºººº»ŒœŸ¿¿¿ÂÂÃÄÆÆÇÇÆÉÊÉÈÊÍÌÌÌËËËËËËÍÍÍÎÏÏÐÐÑÐÐÏÐÑÓÓÓÓÓÔÔÔÔÔÕÕÕÕÖÖÖÖÕÕÕÕÔÓÓÒÒÒÑÑÏÏÏÏÎÎÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÎÍÍÍÎÎš®°³²²³ŽŽŽµ··žž··ž¹¹¹ºº¹ºŒœ¿¿¿¿ÃÃÄÅÆÇÇÈÆÉÊÉÇÊÌÌÌÌËËÌÌÍÍÌÍÍÎÏÐÐÐÏÏÐÐÑÒÒÓÓÓÔÔÕÕÕÕÕÕÕÕÖÖÖÖÕÕÕÕÔÔÓÒÒÒÒÑÐÐÏÏÏÏÏÏÏÏÏÏÐÐÐÐÐÐÐÐÑÐÏÎÎÎÏÏ¡©¯±±±±³Žµµµ·žž¹ž·ž¹¹ººº»»Œœ¿ÀÁÁÃÃÄÄÅÆÆÆÈËÌËÉËÍÍÊËÊËËÌÍÍÌÌÍÎÏÐÐÐÐÐÐÐÑÒÓÔÔÔÔÔÕÕÕÕÕÕÕÕÖÖÖÖÕÕÕÔÔÓÒÒÓÒÒÒÐÏÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÑÐÏÎÎÎÏÏ¡©®°¯±±ŽŽµµ¶·ž¹¹žž·ž¹¹¹¹¹¹»ŒœŸ¿¿ÃÃÄÅÆÆÇÇÄÇÊÉÇÈÊÊÊÊÊËÌÍÎÎÌÌÍÎÏÐÐÐÐÐÐÐÑÓÔÕÕÕÕÕÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÓÓÒÒÓÓÑÑÐÐÏÏÑÑÐÐÐÐÏÏÐÐÐÐÐÐÐÐÐÐÏÎÎÎÏÏŠ¬¯°±²²µµµ·¶·ž¹¹¹žžž¹º¹¹º»Ÿ¿ÀÀ¿ŸÁÃÃÄÅÆÆÆÄÇÉÉÇÈÉÉÊËËÌÍÍÎÎÌÌÍÎÐÑÐÑÐÐÐÐÑÓÔÕÕÕÕÕÕÔÔÔÔÔÔÔÔÔÔÔÔÔÔÓÔÓÓÓÓÓÑÑÐÐÐÐÑÑÑÑÑÑÏÏÐÐÐÐÐÐÐÐÐÏÏÎÎÎÏÏ®²±²Ž³³Žµµ··žžžžººººº»ººŒœœ¿¿¿œŒÃÃÃÃÄÅÅÅÄÆÉÉÇÈÉÊËÌÌÌÍÍÍÍÎÎÍÎÐÑÑÒÐÐÐÐÑÓÔÕÕÕÕÕÕÕÕÕÔÔÔÔÔÔÔÔÓÓÔÔÔÔÔÔÓÓÑÑÑÑÑÑÑÑÑÑÏÏÏÏÑÑÐÐÐÐÏÏÐÏÏÏÏÏÏÏ°³±²ŽŽ³Žµµ··žžžž¹ººººººº»Œ»œŸ¿¿ŸÃÃÃÄÆÆÇÇÃÅÈÈÇÈÊËËÌÌÍÍÍÍÍÏÏÎÏÑÑÒÒÐÐÐÑÑÓÔÕÕÕÕÕÕÕÕÕÔÔÔÔÔÔÔÔÓÓÔÔÔÔÔÔÓÓÑÑÑÑÒÒÑÑÑÐÏÏÏÏÑÑÐÐÐÐÏÏÐÐÏÏÏÏÏÐ¯±°±ŽŽ³µ¶¶¶¶··¹žžº»»º¹¹º¿¿ŸÀÁÁÀ¿œœŸŸ¿ÀÁÂÀÂÅÆÆÇÊÌÊÌÌÍÎÎÏÏÐÐÏÐÑÑÒÒÑÑÑÑÒÓÔÕÕÕÕÕÕÕÕÕÔÔÔÔÔÔÕÕÔÔÔÔÔÔÔÔÒÒÑÑÑÑÒÒÑÑÐÐÏÏÏÏÐÐÐÏÏÎÎÎÏÏÏÏÏÏÏÏ²Ž³³µŽ³¶¶·¶··ž¹ž¹»ŸŸŒº»œÁ¿¿¿ŸŒžµ·µ¶ŽµŽŽŽ¶ž»œŸ¿ÁÄÉËÍÎÎÏÏÐÐÏÑÐÐÒÒÑÑÑÒÒÓÔÔÕÕÕÕÕÕÕÕÔÔÔÔÔÔÔÕÕÔÔÔÔÔÔÔÔÓÓÒÑÑÑÒÒÒÑÐÐÐÏÏÏÐÐÐÏÏÎÎÎÏÏÏÏÏÏÏÏ±²³ŽŽ¶µµµ¶·¶¶ž¹¹·žº»º»œŸÀŒž·Ž°š£¬¬«ªª©šš­¯²³µ¹œ¿ÁÄÆÊËÌÍÎÍÎÑÒÑÑÓÓÒÓÑÒÓÔÓÕÔÔÔÔÔÔÔÔÔÕÔÔÔÔÔÔÓÓÔÔÔÔÔÔÓÓÒÑÑÒÒÓÒÒÑÑÐÐÐÐÐÑÏÏÏÏÎÎÏÏÏÏÏÏÏÏ²²ŽŽŽµ¶¶¶¶··ž¹ººžž»ŒœŸœŒž²¬§£ ¡£¥Šª®²µ¹Œ¿ÂÆÈÊÌÌÊÌÏÐÒÓÑÐÓÓÓÕÔÓÔÔÔÔÔÔÔÔÔÕÕÔÔÔÔÔÔÓÓÔÔÔÔÔÔÓÔÒÒÒÒÓÓÒÒÑÑÐÐÐÐÑÑÏÏÏÏÎÎÏÏÏÏÏÏÏÏ²³Žµµµ¶¶¶¶¶ž¹¹ž¹º¹»œœ»·²­Š¡€©¬±ŽºŸÁÂÇÉÌÉËÎÏÒÔÒÑÔÔÕÖÔÒÔÔÔÔÔÔÔÔÔÖÕÕÕÔÔÔÔÔÓÓÓÓÓÔÔÓÓÒÒÒÒÓÓÒÒÒÒÑÑÐÐÑÑÏÏÏÏÎÎÐÐÐÐÐÐÐÐ²³Žµµµ¶····ž¹žžº»º¹¹·±©¡£ª­±µ¹ŒÁÃÈÉÌÎÎÐÔÓÑÔÔÓÔÓÒÔÔÔÔÔÔÔÔÔÕÕÕÕÔÔÓÓÓÓÓÓÓÓÓÓÓÓÒÒÒÒÓÓÓÒÒÒÒÑÑÑÑÑÏÏÏÏÎÎÐÐÐÐÐÐÐÐ³³ŽµŽµ·ž··¹ºžž¹»ŒžŽ°«€
+
+£š­±Ž¹ŸÁÃÈÌÏÒÒÐÒÔÓÓÔÓÒÔÖÖÕÕÕÕÕÕÕÕÕÔÔÔÔÔÓÓÓÒÒÒÒÓÕÕÕÕÕÕÕÕÓÓÒÒÒÑÑÑÑÑÐÐÏÏÎÎÏÏÏÏÏÏÏÏ³ŽµµŽµ·žµ¶·žž¹¹¹»Ž«¢
+£¥š®³¶Œ¿ÄÌÓØÖÏÒÔÓÓÖÕÒÓÖÖÕÕÕÕÕÕÕÔÔÔÔÓÓÓÓÒÒÒÒÑÑÑÕÕÕÕÕÕÕÕÓÓÓÒÒÑÑÑÑÑÐÐÏÏÎÎÏÏÏÏÏÏÏÏ³Žµ¶µµ¶·¶·¶¶žºž²°©~~~~}}~~¡¥«°·¹ÀÈÐ×Ú×ÑÒÓÔÖÕÓÓÕÕÔÔÔÔÔÔÕÕÔÔÔÓÓÓÓÓÒÒÒÑÑÑÔÔÔÔÔÔÓÓÓÓÓÒÒÑÑÑÑÑÐÐÏÏÎÎÏÏÏÏÏÏÏÏ³Ž¶¶µµ·ž¹¹žžºœ·­¢~}~~}|~}|}|~~
+Šª®³»ÀÆÐÙÝÒÒÑÑÔÕÓÔÕÕÔÔÔÔÔÔÕÕÕÔÔÔÓÓÓÓÓÒÒÒÑÑÔÔÔÔÔÔÓÓÓÓÓÒÒÑÑÑÑÑÐÐÏÏÎÎÏÏÏÏÏÏÏÏ²µ¶µ¶¶·ºž¹ž¶¶¶®~~|}~~}||y|}|{~~~Š¥¬³¶ŸÄÎÛÛÙÓÐÒÓÔØÕÕÔÔÔÔÔÔÕÕÕÔÔÔÔÔÓÓÒÒÒÒÑÑÔÔÔÔÔÔÓÓÓÓÒÒÒÑÐÐÑÑÐÐÐÏÎÎÏÏÏÏÏÏÐÐ³¶¶µ···º³¶ž·²«
+~~~}|x|~}||{y|zz{|}{{~~~~}¡¡©³º¹œÎØßÝÖÔÔÔÔÕÕÔÔÔÔÔÓÕÕÔÔÔÔÔÓÓÓÒÒÒÒÑÒÔÔÔÔÔÔÓÓÓÓÓÒÒÑÐÐÐÐÐÐÐÐÏÏÏÏÏÏÏÏÐÐ³µµµ···¹·¹»·¬
+}}}|zz{{zyz{zwxyyyz}}}}}}
+¢©Ž¶ºÃÕÞßØÔÖÕÑÔÓÔÔÓÓÓÓÕÕÕÔÓÒÒÒÓÓÒÒÓÓÓÒÓÓÓÓÒÒÓÓÓÓÓÒÒÑÑÑÑÑÑÐÐÏÏÏÏÏÏÏÐÐÐÐ²µ¶¶··¶ž¹ž·®~}||{y}}|{zxz|~~~|yvtrtstvxz}£¬³¶¹ÇÒÚÛÙØÔÓÓÒÓÔÓÓÓÔÕÕÕÔÓÒÒÒÔÓÓÒÓÓÓÒÓÓÓÓÒÒÓÓÓÓÓÒÒÒÑÑÑÑÑÑÐÐÐÐÏÏÏÏÐÐÐÐ¯Ž···¶µž·Ž°€
+|}|zz{{z|wv{ztseQDABB@CBA@BDGJZhw §ª³ž·ÆÕââÛÕÕÓÒÒÒÓÒÓÔÕÔÔÔÓÓÓÒÔÓÓÓÓÒÒÑÓÓÓÓÓÓÒÒÓÓÓÓÓÓÓÓÐÏÐÐÑÑÑÑÐÐÐÐÐÐÐÐ¯Ž···µµžº²š
+}~}{z|||v~{ulZIGA;:=?=;@>=<;<>??;;F_y¬³ž¿ÉÙåáÙÕÔÒÒÓÓÑÒÓÔÔÔÓÓÓÓÓÔÓÓÓÓÓÒÒÓÓÓÓÓÒÒÒÓÓÓÓÔÔÔÔÒÑÒÑÑÐÐÐÑÑÐÐÐÐÏÏ±µ···¶¶¹µš~~|}~}}}t^I<;;>@ABBBBC@@?>??@@=@A?;?N\|  ¬³·»ŸÈÚãß×ÖÓÒÓÒÑÑÒÓÓÓÓÓÒÒÒÔÔÓÓÓÓÓÓÔÔÓÓÒÒÒÒÒÒÒÒÒÒÒÓÔÒÓÒÑÐÏÎÑÑÐÐÐÐÏÏ²¶µµµ¶¶¹¬~~z|~||}z_D;==<=@??????@??????>>A>?A@=9;B\x¢¢®©·Ÿ¿ÌÝßÛØÕÓÓÒÐÐÑÒÒÒÒÒÒÒÒÔÔÓÓÓÓÓÓÔÔÔÓÒÒÒÒÑÑÑÑÑÑÐÑÒÒÑÑÑÑÑÑÑÑÐÐÐÐÏÏ³ŽŽŽ·¹¹ž¥{~z{zxzZD?@ED==C=>?@A@A@>?@??????@=;=CB==8?f¢¢¢š®¶Ÿ¿ÎæäÙÕÔÕÕÒÑÑÒÒÓÒÓÓÓÓÔÔÔÓÓÓÓÓÓÓÓÒÑÑÑÑÐÐÐÐÑÑÑÑÏÏÏÏÏÐÐÑÐÐÐÏÏÏÏÏ³²µ¶¶ºž­}}~
+iF;:?A>>AA>CBA@??@???@AAA@@@?>=>A@>BHB8Jv©©¬°žœÌØæÝ×ÓÒÒÑÑÒÒÒÒÒÓÓÓÓÓÓÓÓÒÒÒÒÒÒÒÒÐÐÐÐÏÏÏÏÐÐÐÐÏÏÏÏÐÏÏÏÏÏÏÏÎÎÎÎŽ°Ž¶¶ºµ£
+}}u_C?A=>@A@@>?A@?@@AAA???????>?>>>@@@?>@?ACEgªª«³¹ŸÂÎÝáÙÒÏÏÐÑÒÑÑÑÒÒÓÓÓÒÒÒÒÑÑÑÑÐÐÐÐÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÎÎÎÎÎÎÎÎÍÍÍÍ¶²³¶ž¶«{Y<7=?B?@FE>=B>?@ABCCB@@?>?>>=A>>@A??@?BB?D75Z£š«±À»È×ßÚÓÏÏÐÑÒÐÑÑÑÒÒÒÓÑÑÑÑÐÐÐÐÐÏÏÏÏÎÎÎÏÏÏÏÏÏÏÏÏÏÎÎÎÍÍÍÎÍÍÍÍÌÌÌµŽ³¶º¯~x{uR9>A>D@ABBBBBAACDDCBBA@@AAAABA@>>A@@@@B:ACDE=>b³¯·ÀÂÎÚØÔÒÑÒÒÑÑÑÑÑÒÒÒÒÐÐÏÏÏÎÎÎÐÐÐÐÏÏÏÏÎÎÎÎÎÎÎÎÏÎÎÎÍÍÍÌÍÍÍÍÌÌÌÌ°²°µ¹©~{}|P7;>=?A?BA??BB?BCCBA@AAAAAAABBB?>?AA?@A>?FA=EEA1b£º±À¹ÂÑÔÕÔÒÒÑÐÑÑÑÑÑÑÑÑÐÐÏÏÎÎÎÎÐÐÐÏÏÏÏÏÎÎÎÎÎÎÎÎÎÎÎÍÍÍÍÌÍÍÍÌÌÌÌÌ¯°±³³€
+}zzHDA@??@=A@?@@??@??@???@ABAAA????@@@A@@@@EB=>DECJB;d¥ž·ŽÂÈÐÕÕÓÒÑÐÑÑÐÐÐÏÏÏÏÏÏÏÎÎÎÎÏÏÏÏÏÎÎÎÎÎÍÍÍÍÍÎÍÍÍÍÍÌÌÌÌÌËËËÊÊÊµ²²±« _:=EF>=A@@@?????>?AAAA@@@@@@@???A?A@@@A@@?>?CAAB>EDDwž³»¿ÄÍÕÕÑÐÐÐÐÐÏÏÏÏÏÏÏÏÏÏÎÎÎÎÏÏÏÎÎÎÎÎÍÍÌÌÌÌÌÌÍÍÌÌÌÌÌÌÌÌËÊÊÊÊÊŽ²²®£|
+|i>>@@==@?=AA@???@@AB@@??@A@@@?@@@?A@@@@@AB??@AB@?<=JABŸ·ÀÄÌÔÒÐÏÌÑÏÐÐÐÐÐÐÐÏÏÏÏÎÎÎÎÏÎÎÎÎÍÍÍÍÍÌÌÌÌÌÌÍÌÌÌÌËËËËËÊÊÉÉÉÉ²³µ°£
+znE?AA@@ACB@?@ABA@A??@@ABAA@@A@@A@AAAA@@@@AA@@@ABBA?BBF=a¬³ºÁÊÒÑÏÏÌÐÎÏÏÏÏÏÏÏÏÏÏÏÏÎÎÎÎÎÎÎÍÍÍÍÌÌËËËËËËÌÌÌËËËËÊËËÊÉÉÉÉÉ²Žµ®X7@A@ABCBAC@@BBBBBACDCBBBDCBA@@A@AA@@@@BBBABBBBCEDE@CBCA¹·»ÄÍÎÎÐÏÎÎÏÏÏÏÏÏÏÏÏÏÏÎÎÎÎÌÌÌÌÌËÌÌÌÌÌÌÌÌËËËÊËËËÊÊÊËËÉÉÉÈÈÈ³µ³š~nC@A@??ABBDDDBBA@AACDDCBBCCDBBA@A@BB@AAAABBABB@ABCEDAC@J@T­º¹ÀÊÌÍÏÎÌÎÏÏÏÏÏÏÏÏÏÏÎÎÎÎÎÌÌÌËËËÌÌÌÌÌÌÌÌËÌÊÊËËÊÊÊÊÊÊÉÉÈÈÈÈµŽ¯¢
+W:@A>???BIMPMLKIECDE?ACCCBCABBB@AA@BACCA@BA@DDDEGGHGNAFEC>~œœ¿ËÍÍÍËÉÌÌÌÍÍÍÍÍÎÎÎÎÎÎÎÎÌÌËËËËËËËËÌÌÌÌÌÌÊÊÊÊÊÊËËÊÊÊÉÉÈÇÇµ³¬tD<>@?@@@FOY]]][YUPNPJJIGEECCBBB@AA@@ACECBDGGJKMQUVWWXJI@B=ZŽŸŸÊÏÍÍÍÊÌÌÌÌÌÍÍÍÍÍÍÍÍÍÍÍÌÌËËËËËËËËÌÌÌÌÌÌÊÊÊÊÊÊËËÊÊÉÉÈÈÆÆŽ²ª
+e<?C>?@@AEM[dgedeca^_]\XQPNIFCBAAA@@BBGNOORUUVXY]bddc[QFCEAKŸºÆÏÎÍÎÎÌËËËÍÍÍÍÍÍÍÍÍÍÍÍÌÌÌÌÌÌÌÌËËËËËËËËÊÊÊÊÊÊÊÊÊÉÉÉÈÇÇÇŽ±šX>;D>A?<>AHUbdbbdffgieec_]YNDCCB@@@AAGQZ^`ba`b`bccdbaYJGCGB@}¿žÄÎÍËÌÍËÊÊËÌÌÍÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌËËËËËËÊÊÊÊÊÊÊÊÊÉÉÈÈÇÇÇž²€{M@C@CB@AABDOZbcecehgd`begf`VJBBBB@AAAJT`deffeffeccea\UJEHDH;^µ»ÀÈÉÍÌÍÊËËËÌÌËËÊÊÊÊÊÊÊÊËÌÌÌÌÌÌÌÌÌËËËËËËÊÊÊÊËËËËÊÉÉÉÇÇÆÆ·°¡
+uC:BCB?@@ABCJP]befefd`efeef`WMDCBAABBAIS`edffhadfghjaWIGGHEI<O«·¿ÄÊËÌÌÊËËÌÌÌËËÊÊÊÊÊÊÊÊËÌÌÌÌÌÌÌËÌËËËËËËÊÊÊÊËËËËËÊÊÉÈÇÇÇ·­q>7@B??@@AABCGSZbeffffhgedc]SIDDBAABBCHS`cddfgeghcde\PDEFFDF>H¢µŸÀÊÈÊÌÊËËËÌÌÌÌËËËËËËËËÊÊËËËËËËÌËÌÌÌÌÌÌÊÊÊÊËËËËËËËÊÉÈÈÇ·«n@:?A>@@@>>@CCIPX[_dghdeec`XMDDBBAABCBEMW^`ccejif`]YRHGCAEDEBC¶œ¿ÇÇÈÌÊËËËËÌÌÌËËËËËËËËÌËËËËÌÌÌÌÌÌÌÌÌÌÌÊÊÊÊËËËËÌÌËËÉÈÈÈ·ªnA:@CA?A@>>BC@CFLPSX]_aa`[VPICCCBBAAAA@DKRY]aada^[WPJGEBAFDD?;·¹ÂÅÈÆËÉÊÊËËËËÌËËËËËËËËËËËÊÊÊÊÊËËËËÌËÌÌËËÊÊËËËËÌÌËËÉÈÈÈ¶š
+tC7@DA>@@?@AA@@ADGJMOQXWSNIFCDBAA@AAAABBCGLRUUVTOLIDCEBCAB>D=9Ž¶ÃÅÈÄÇÉÊÊÊÊËËËÌÌÌÌÌÌÌÌÊÊÉÉÉÈÈÈËËÌÌÌÌÌÌËÊÊÊÊÊÊÊÌÌËËÉÈÇÇ³¥}M9@B@@?@@@@@@@ACEEEHILJHDCBABBAAABBAAEDDCEHHILHDA?@ABBC@C<D<B±³ÁÅÆÆÇÉÈÈÈÉÉÊÊËËËËÊÊÊËÊÉÉÉÉÈÈÈËËÊÊÊÊÊËÊÉÉÉÉÉÉÉËËÊÉÇÇÆÆ±£
+~{XAA@AB@@@AAAAADDEBBBDDDDFEECCBBA@ABCB@BCEFEEEBCDBDEDBB?@H@D<K²ŽŸÄÅÇÉÉÈÈÈÈÉÊÊÊÊÊÊÉÉÉÊÉÉÉÉÉÈÈÈÊÊÉÉÉÉÉÊÈÈÈÈÈÈÈÈÉÉÈÈÆÅÄÄ±Š~}nEBG@A>?@@AB@AABABBA@@ACDDDBABA@@ABCC=<?CCCDAAACFFDCDB?BH=D;Z¢²º»ÀÄÅÈÈÇÇÈÈÈÉÉÊÊÊÊÉÉÉÊÊÉÊÊÉÉÉÉÊÊÊÊÊÊÊÊÇÇÇÆÇÇÇÇÉÈÈÇÆÅÄÄµŠxV=BCA@AA?BB>>ABA>=@C@ABCCC@@BA@@@AAAFB@@?@CCCABBBAABBGBC@>Ar§±·ºÀÂÃÉÇÇÇÇÈÈÉÉÉÉÉÉÈÈÈÉËÉÊÊÊÉÉÉÉÉÉÉÉÉÉÉÆÆÆÆÆÆÆÆÉÈÈÇÅÄÄÃ¶§~lI?CB@BDA>?A@?>@@?AC@@ABCCCBCB@@AABADAAAAAB@ECBCCCCDDD@FE=SŠ«°·ŸŸ¿ÅÈÈÇÇÇÈÈÈÉÉÉÉÈÈÈÉÈÈÇÇÇÆÆÆÇÇÇÇÇÇÇÇÅÅÅÄÅÅÅÄÇÆÆÅÃÂÂÁµ©~|}gH>D@@??@A??==ADBAA@@BBCCCDCBBBAAAAA@ACCDA=BAAAABBBBAEG<Fr¢š®µ»œŸÃÇÇÆÆÆÇÈÈÉÉÉÉÈÈÈÉÇÆÆÆÅÅÅÅÈÈÇÇÇÇÇÇÅÅÅÅÆÅÅÄÄÃÂÂÀ¿¿¿·¯}{~bE8AFA<AA;>?ACB?@BBBBBAAABBBBBABBAEA???BC@CCBA@@BBFGKB?d¡ª±ŽžŸÂÄÆÆÅÅÇÇÈÉÇÇÈÈÈÈÈÈÈÈÈÈÈÈÈÈÇÇÇÇÇÇÆÆÇÇÇÆÆÅÅÄÁÀÀ¿À¿¿¿ºµ¥|~|zx|zdIA<=>@@?@A@@@@@BBBAAAABA@A@@BAAADA@@@BCCCDCAABDFFB?Gc¡©¯°²œÃÃÅÅÄÄÆÇÇÈÇÇÈÈÈÈÈÈÇÈÈÈÈÈÈÈÇÆÆÆÅÅÅÅÅÅÅÅÅÄÃÂÀÀÀÀÀ¿¿Ÿ¹º¯}|vu~|wX>:?ABCC@>=@DB@@@@@ABCE@@@BBABBBAACBCC@@AAAABBA??Fb
+¥©ª°œÄÁÄÄÄÄÆÆÆÇÈÈÈÈÈÈÈÈÆÆÆÇÇÇÇÆÅÅÅÄÄÄÄÄÃÃÃÃÂÁÀÀÀÀÀ¿¿ŸœŒŽŒž§
+~~|zu{{mWB9<??CB?@BDCBBAABBDE@@AACCCCECBB@@A?CCDCCA>;AUm
+¢Š«ŽÂÆÁÂÃÄÄÄÆÆÆÇÇÇÇÇÇÇÇÅÆÆÆÆÆÆÆÅÅÄÄÄÃÃÃÂÂÃÂÂÁÀ¿Ÿ¿¿ŸŸ»ºž¶¶»²¢
+}}}|y}{shVC?>?CC@BFAAAABCDECDDDDDDDDEEDEDCD>@AA@BJTh{Š²ŸÃÃÄÂÃÅÆÇÆÆÅÅÅÅÅÅÅÅÆÄÄÄÄÃÃÄÄÅÅÅÅÄÄÃÄÁÂÂÃÂÂÀ¿ŸœŒ»¹º¹ººµž¹³¥~~z|{~~x_TF@?>?A??>>>??@CCCCCCCBDECAA@ADDFEDIYp
+¡¬žŸÀÀ¿ÂÂÅÆÇÇÆÅÄÄÄÄÄÄÄÄÃÂÃÃÂÃÄÄÄÄÃÃÃÃÂÃÀÀÁÁÁÀŸœœŒ»º¹ž··žº¹ºº·©
+|zzyxuxwxzz|toi_PDIHFCA?>==?????@@BDCBDFJOU[dny||¥³Œ¿ÀÁ¿ÁÂÄÆÆÆÄÃÄÄÄÄÄÄÄÄÁÁÃÃÃÃÃÃÁÁÂÁÁÁÀÀ¿ÀÀÀŸœŒŒŒ»ºž·¶µŽµ»ž¶·º·¥~ywzzz|{}}|{|~|yqnic]WSQOOPPQRRSRUW[bhouyy|}}~}||€®¹Ÿ¿ÀÂÂÀÁÃÄÄÃÂÂÂÂÂÂÂÂÂÂÂÁÂÂÂÂÂÁ¿¿¿¿¿ŸŸŸŸŸŸœŒ»ººº¹ž·¶Ž³³¶¶³¶µ³·µ«|{xy{{||zz|zxxz}|{|{zyyyyuuuuvvvw|}{z{{{}wvvxxvvx³¹Ÿ¿¿¿¿¿ÁÂÂÂÂÂÁÁÀÀÀÀÀÀÀÀÁÀÀÀ¿¿ŸŸŸŸœœŒ»»»Œ»»Œ»º¹¹··¶µŽ³³²·µŽ¶µŽ·µ²­¢|}{||x{wvxywyyyxwwwvyxxxxwwwtussvussvqpvywvxwzª»Ÿ¿¿ŸŸœŒÂÂÂÁÁÀÀÀÀÀÀÀÀÀÀ¿ÀÀ¿ŸŸœœŒŸœŒ»ºº¹¹ŒŒ»»º¹¹žµµŽ³²±±°µ¶·²±¶·²··²¥}}}}{{|}|{xvuwwwwwwwwwvvuuttvwxwyywxyz}}yvz}¯»Œ»ŒœœŒŒœÁÁÁÁÀ¿Ÿœ¿¿¿¿¿¿¿¿Ÿ¿ŸœŒŒ»»ŒŒ»»º¹žž»º¹ž··¶¶³Ž²±¯®­¬¶±Ž²°³³¶·¯®¯š~~~}{z{wxxxxxxxuuuuuuuuwyxwyxxzxyzz{|~¢ªŽ»ŸŒ¹žºº»»œŸ¿ÀÀÀ¿ŒŒŸŸŸŸŸŸŸŸŸŸœŒŒ»»»»»ºº¹ž··ž·¶µµŽ³Ž³²°®­«ªª±µŽ±±°±¶Ž°®¯®©¥£}}}yz{zzxxyzwxwwxxxyzyy{|}}}}zy|ªŽž¹žž»¹žŒ»ž»ŒœŸŸŸœŒ»»ŸŸŸŸœœœœœœœŒŒ»»»Œ»º¹·¶µŽµ¶µŽ³²°¯¯¯®¬«ª©šµ³±±³Ž²±®°°¯®°°­¡~|}}}|zzzzzzyyyyyy{z{|~~}§¬³·žž·ž·¶Ž·¹¹ŸŸŒœœŒ»º¹žœœœœŒŒŒŒœŒŒ»»ººº»ººž¶µŽŽ³²²±°®¬«­¬«ª©š§§¶µ·ž·¶µ²³µµ±¯¯¯¬­©£~~~}||||{zzz|£¥©¬¬®²µ³¶Žµ·žº¹ŒœŒ»º¹ž·»»»»»»»ºŒŒŒ»ºº¹¹¹¹·¶µŽŽŽ°¯¯®¬«©š©©ššš§§§ŒŒÂÅÁ¿À¿¿Œ¹·³±±Ž°¬šš©€~~~~|~
+ €€«·ÃÇÂ»œ»º¹¹ž·ºººººº¹¹ºººº¹¹žž¹ž·µ³²²±¯®­«©šš§ŠŠŠŠ§ŠŠŠÄ¿ŸŸœœ¿œÆÁº¶²¯¯²¬«©©©š¥¢}}}~~~~~~~~}~~~°ÈÖÔÇ¹»º¹·ž¹žºººººº¹žž¹¹¹º¹¹¹¹ž·Ž±¯®­®¬ª§Š¥¥Š€€€€ŠŠŠŠ¬šŠŠš¯ž¿ÄÅÁŒ¹¶±­¯¬ª§§Š¥€¡
+~~~~}|{zzyyzyzz{{|||zzz{||||||}
+ §¯ŒÉÑÍÂ¹ºº·¶žº¹ºº¹¹º¹ž··ž¹ºººº¹ž·µ²®¬«ª¬ª§¥££€€££££¥¥¥¥š¥ €­³žºœœºŽ²¯«©šŠ¢
+~|{{{yyzzyyyyvwwxz|}~š¬®°Ž»ÂÂ¹»ž¶¶¹ºº¹¹¹¹¹¹·¶¶¶·žžžžž¶µ²¯¬ªšš©šŠ€£¢¢£¢¢¢¢¢¢££¥¢¥š«¯Ž±®¬ª©©š§¡
+
+
+~~{{{{z{{{yz{|
+ €§Šª²žœ»¹º·Žµž¹¹ž¹žžž···Žµ¶¶···µµ³°­ªššŠ§Š€£¢¡¡¡¢¢¢¡¡ ¡¡¡ ¡~|{{{
+¢¥§¶»®µž·µŽ¶·žž···ž¶¶·µŽµµ¶µŽŽµŽ²¯¬ªš§Š§Š¥€£¢¢¢¢¢¡¡¡   
+
+
+~~~~
+¡¥£š€©ŽµŽ³Ž·ž¶Žµµ¶µµ³³³³ŽŽŽ³Ž³±¯¬ª©§¥¥¥¥€£¢¡¡¡¡¡¡     
+
+
+~}~
+ ¢°µ·Ž³µŽ±³ŽµŽµŽ²²³³³³Ž³³²®¬«©§Š¥€¢¢¡¡        ~}
+~~}~~}}}~{¯±²Ž¶¶³¯³³³Ž³³²²²²²²³³±¯«ªš§Š€£¢¡¡    ¡¡¡¡~xu}
+
+
+
+
+
+}}~~~~}~~~~~
+|tx|ª­±µ³±±¶³³²²±±²³±°°°±±®¬š§¥£££¡   ¢¢¡  ¡¡¡¡ yvu{
+}~~~}|~~}}||||~~~~~~~~
+rrz|²®®³¶³°°²²±±°°±²¯®­­¯®«©šŠ£¢£¢      ¡¡ vvty
+
+
+~~~~~}}~~}}}}||}|||||||
+mszx­·ÁÁ·­¯Ž±°¯®®®¯¯®¬¬¬­¬©ŠŠ€¢¡¡ uupt
+~~}}}}}}||||||||||~~iqtr·žŒÅÉÂµª±¯®­­¬¬¬®¬««¬«šŠ€¢ usqq}
+~~~~}}~~~}}}}|||||||||}pjqurŒžŽºÆÊÀ©¯¬¬«ªªªš¬«ªª©š§¥ vtpo{
+~~~}~~~~}}||||||||}
+kjquv£¹³µºœÅÅµ®««ªŠŠš©š§ŠŠ¥€¢ zwrnz
+
+
+
+
+
+
+~}~~~~~}}|||{{{{{|~~hlps{­¹­³¹³¿ËÀ­ª«ª¥¥¥¢Š€£¢£¡|ysmx
+
+
+
+~}~~}}}}}}{{{{{{{{{}~~~|hnlq·¹«°µ±œÊÆ­©§§¥Š€¡€£¡¡¡ {ysls
+~~~}}~~~~~}}~|{{{{zzz{{|}}yiolqºµ«¯³ŽŒÃÉ¯š€€¢¥¥¥£¢¡ {xtmr~~~~}{{{{zzz{{{|}tinor·±¬°²µºŸË±§€€€¢£¥¢¡{vsns
+~~~~~||{{{zzz{{||}~
+njorp¶²¬°°±·»È»©¡£¥¢ zuqnr
+
+~~~~~~~~|||{{zzz{|}}}}jmqsk¹¶ª¬«®¶¹ÃÌ¯¡¡
+{vrstz||{{{{zz||||}~~~ippqkžŽ«©ª«°º¿Ï·£¢~
+yvttsx||{{{{zz|||||}~{kpppo²·ªšš§®³»ÍÃ~~~}|}wxvuru||{{{{zz||{||}~
+xnqqou­žš§€¥«®¹ÊÍ¥
+~~|||{{|}
+wywuqs
+||{{{{zz{{{{|}~~uoqqow«µ©Š¡£¬¬žÄË³
+}}}|||{{|~
+
+
+
+wzvtqr}
+~~~~}}||{{{{zz{{{{|}~~snoqov§³¬Š¡¢­®¶ÀÊ»
+~}|}||||{{{|~x{wutt~
+~~~~}}||{{{{zz|{{{|}~~|snoqrw
+€³°§¢¡«¬³ÀÎÁ}|z{{zyzyyxyz|}w{xwwu}
+
+~~}}}||{{{{zz||{||}~|tprpwzŽµ€€ ¥©¯»ÍË
+~~{yxwwxxwwvuuvwxy||}}}}||tyvwvt{
+
+
+~~}}}||{{{{zz|||||}~}~ztpsnx|Ž¶¢€ Š®°ÅÔ }
+}|wvutuuutttsssuvwyzz{{zzzqvzwuxz
+
+~~~~~~||{{{{zz||{{|}~}}~~~~zssrrz|~­³¥£¢¡®²ÀÏ±w~~~~|zyvttttttstsrrrtuvxxyzyyxxqv{wvy{
+
+
+
+~~~~~~||{{{{zz{{{{{|}~}}~~~zttsryz}Š²š£¡¡­°ŒÎŸ}y}|{{zxusrqrrrpqqqqqrttvvwwvvuunt{wvy{
+
+
+~~~~}}||{{{{zz{zzz{|}}||}~ztutqvy{±¬€ «°·ÊÊ{x}}{xwwwwsrpooonmonnnopqrsssttssrirzwvxy
+
+~~~~}}||{{{{zz{zzzz{|}||}~zsttpty{°®€©±³ÄÎy~|zyvvtuusrponmmlnmlklnpqqqqrrrrqgpyxuvx~
+
+
+
+~~}}}||{{{{zz{zzzz{|}}}}~~ytturuz{
+°®€š°±ÀÍzzyxuuuttrqponmmlmkkkkllmnnooppppgnxywuv~
+
+
+
+
+
+~~}}}||{{{{zz{{zzz{|}}}}}~}xwvwvxz|®®¥ Š­¯¿Í­z|ywutssrqqpponmmlljjkllkjjlllmnnoohlvzzvu|
+
+
+
+~}}}||{{{{zz{{zzz{||||||}}yyvwwwvx¬±¥¡€¬­¿Ë»|trtrqppnnmonnmlkjjihijjjiijjkkllmmiluz{vs{
+
+
+}}}}||{{{{zz{zzzz{{||{{|}}yzuvwust|«³¥ ¢¬«œÉÄ}qprqpoomnnmllkjighhhggghijiijjjkkkliryxwtx
+
+
+
+
+
+
+~}}}}}}||||zy{{zzz{|}||}|x~yyvwwsqsx¥³© ¡©¯¹ÄËhrprnkmmjnkkjiihhhgggffghhhhiijjjkjfpyzxuw
+
+
+
+
+
+~}}}}}||||zz{{zzz{||~{}||zuxzuqqw¯ª£§®³ÀÏiklnkijiijkjjihggfdefggggfhhhiiiiijcnz{ywv
+
+
+
+~}}}||{{{{zz{{zzz{|||~~ytvyuopu~©­Š€¬®ºÐhgjjiigghgihhhgfggddegggffggggggggkdmzyxxv
+
+
+
+~~}}}|||{{{zz{{zzz{||}~~wtutomos{§­Š¢©®¶Íšekkiijfgighhhhhghggeefffggfeeeeeeekgmxwvxw
+
+
+
+
+
+
+~}}}||||||{{{{{{{{{{{|}}}~{
+~wwwqkmnnvŠ­š€§°ŽÈ¶eljgiiefigghhhggffigfgggghfeddeeeejjmtvtxx~
+
+
+
+
+
+~}}}|||||||{{{{{{{{{{{{{~{~z}y{zqjmmkrŠ¯©€¥¯µÆÄnkiggfeeghhiihgfeehgfhhgfgfedcdeddgjjovvyy~
+
+
+
+
+
+~}}}}||||||{{{{{{{{{{{{|~|}}{|zphjmkn ®ª §ª¶ÁÊ}ifgfefghkijkkihhhifeghgfhfecccddccjgmxxzy|
+
+
+
+
+
+
+}}}}}|||||{{{{{{{{{{{{~}~~|zwnfhllgx¬ªª¥µ»Êjfigeiijojlmmlklllhefgghkhfdddddchfdfv|vy}
+
+
+
+
+~}}}|{}}}|||||{{{{||||z{|}sigkqqiv¬®¥¥¶»Ëjiohgljnqpqrrqpopqlklmlmnljhgggfegfcfrzvw}
+
+
+
+}}}}||}}}}|||||||{||||||}}skkowxty«±ŠšŠ®»Õ jmpljlkmpwxxwtrqqsooqrpppomkjiihggedfnyxw{~
+~}~~~~}}}}}|||}}||||||{{~|{{smnszzy{¡±ª£Š®¹Ë§vvtrnmnmprsssqpooqpqtusqpomkjihgfecefivxwy|
+~~~~~~}}}}}|||}|||||||}}~{x{tnotyvz|²«¥¯žŸ¬~{uvqopnqmnnonnnnnnprspnmkjhgfeddbaederxwx{
+
+
+~~}~}}}~}}}~~~~~~zx|tmoswtw|²§ŠšµÁ·vwqusqrmoklllkkllmmnppnmlihgfeeddbbecdnwyxz~
+
+~}~~~~~~}}}~~zxxnikntts}u¯§€Š³ÂŸpmlprtqllhhhhhhiikkkllkkkgffeeeddccecckt{wy}
+
+~}~~~~~|||||}~{zrffihmqqwp
+¬± ¢š°ŒÀqhkknrlghffffffhhfgggggggeddddcccbbdaahpzuw|
+
+
+
+~~}~~~~}}}}}|||}~~||nagkehpkmiwŠ¶¢§®¿Åqgkfhmecdcbbbbbcbddddddddccccbbbb,,+**))*)***))*+*+,,+-..---.//10./000/.----...//////////000//.....000000//////-.+,,--.../..-,,,,,,+***+++**)*+,,........//0//....-,+++++*+++*****++*+-..,,--./0/./000//.,---..//////////000///....000000//////-.+,,--..//..--,,,,,+***+++++*++,-........//0//....-++)**+********+,+++,----,--../..///..-+,,,--..////////000///....000000//////-.+,---..///.--,,,,,+***++++***+,,-......-/////.../.-,++,,****+-,+)+,,++,,--,--../.../..--++,,---.////////00////....000000//////-.,,,,--../.-,,,,,,,+***++++***++-/......//.//......-,++++**+,-.-+&)*+)*+,-...//00....-,,++++,,---.....---.....---//00001100////..,,++,,-..-,,++,,.-,+++,,------..0/..../0../.......-,+***)*+*++++*++)'(+,...//000//.--,+*+++,,---....------------//00001100////..,,+++,----,++++,.--,+,,,--------0/.--./0........0//..,++))*)***+,-,***+*..-../////.--,+++++,,---...------------,//00001100////..,,+++,--.-,+++,,/.-,,,,-,,,,,,,,//....//........+,++*)('+,,+*)*,((()+,+(..-../////.--,,+++++,,--...----,,,,,,,,,./00001100////..-,+++,--.-,+++,-/.-,,,--,,,,,,,,................012320-,''*,-,,+(,-**.-(-,/-/1-1..--,,,,+++,,---...--,,,,,,,,,,,..////00/.....--,++++,----,++++,-,,+*+++++++++++/....-../)0+//./uvvtng`[F=1($%'**((**)(+)-/+,0//..---,,,+++,,---/..-,,++------,,..////00//.....-,,+++,-..-,+++,,,,+****+++++++++-.....---*./-,10ypeZK;1+,++//.),++./,----------+++,,---/..-,+**--------..////00///....-,,+++,----,+++,,++**))**********,-.//.-,*-+/+,3-qooprtvxz{~~unO8'(./04,)%,.+/.---..---++++,,--...-,+**..........////00//...---,,+++,,--,,+++,,+***))**********,-....-,*/),+/0.kjkjjiggjiikpw~yaB0,+').,*(+2*--.....-+++++,--///.-,,-//////////..//00//.--,--,,,,,,,--,,,,,,,+*******++++++++,,,,,,+,,.++..+>ddddcccbccdccgnrx
+sW>1$',-*)-)-.../..-+++++,--../.---....///////.../0///.-,,---,,,,,----,,,,,-********++++++++-,,+++++.,-./,3\gddbaa``]^___aehlquy~q^<*&*))+....//..-+++++,,--...-,-.....////..--..////.-,,--,,,,,,,,,,,,,,,,****************--,,,,++.,.-.1Nwa``^][ZZ\\\\[[[]fhjjmv{S7(&////.//0//-+++*+,,.-...,,,---...///..--.././/..-,--++++++++++++++++****************,,,,++++.0-)+:j`__]ZYWWWXXXXXWWX[^cjnpsuR2((0,.,0/,..-++***+,,--,,,-.---.-----.---.////.--,-,+++*************++++++++,,,,,,,+++++,++*+,.-1Xw`__^[ZYXYXWXYXWVUUVX]cgjorrH+*-1+/-*/-,,+**++,,--,,+,------------...////.--,,,))))))))))))))))++++++++,,,,,,,+,+***+,-,-/+Ck|^^]\\[ZYXVUUVVTRSRQRUZ`cjljt
+`1)+/(-/%,,++**+++,,,,+*++,,,,,---....////....-,,+((((()))((((()))++++++++--------*++,++,,-,*/Tv
+^]\[[[ZYWUTTTSQPQPPQTW[\^bbkw{|s-.,+,+-),,++**+++,,,,++++++,,---././////....--,+))))))))))))))))++++++++--------*+*,+,++-)*?]q`_^]\[ZYVVUTSRQQNNOQRSSSW__chp}~j3)/-0*/.-,++))**+-..-,+++++,,---/.///..-....-,,**))))))**+***))+++++***++++++++-,')'++-)*8Xlu`_]]\[YXVVVTSRQQPOOPPPOOVVW]admtmC.)*/)..-,*))*)*-..-,++++++,---..//..--../.-,+**)(((((**+**))(++++****++++++++*+',*/*,(9Uma`]\]\YXVVVSSQQPSRPPPPNNNPWXY^cjq~G(-.(/--,*****+,---,++***+,-.././0/.--.00.-,+*)*))))*++*))())**********++++++&*)0+/*+8Xsb`_]]]ZYWVUTRRQORQOONOMLONSOPWY^nq~L'--/.,,****+++,,,,++***+,-..///0/.--.00.-,**)*))**+++*)))))))********++++++*-).&,*.Ks
+aa_^]]\[YXVTRQPNQONMMMLKMMMMNPSUemrwJ*,./,,*(.++***+,++*****+,-././0/.--.00.-,*))(()*++++**))))))())*******++++*&(+(-#6eb`^__]\[YXVTRPPNPNMMMMLKMMMMNPRTTZjly;,0--,-+&)+*)**+++**))*+,,.///00.---/0.-,*))(()*++++*)*)))(((())******++++&+*((+$E~ca`^^]\ZXWWTRPPOOOMLLLLKLLKLMNPPVTWkr|r2)3.&+**0**))****+*))*+--././/..---./.-,*)*((()****+**)(((''())******++***.,*'(1a¡s{ca__^][ZXXWURPPNNNLLKKKJKJIJKLMLUSS]ath0)+,)(&&**))******))*+--...//.---../.-,,)*((()****+**)()'((()))*****++**,'*.$-J{¢srda_^_^[YYXWTSQONNMLLKJKJIIHIJKJJMPRP^hqq6)/(*+,*))***++***)))+--.-..-.-////.--,))((()********))(((((((()))*++**)(+--?g£v|db_^^][YYXXVSQONLLLLJJJJIIIIIJJIKPJRYWixZ-)+$*%))****+,)**)()+.-.-..-.-////.--,))((()********))(((((((())))*+**%-&(=Wxdca^_^[YZYXVSQOOMLLLKKIJHHIIIIIJHKIJUWZjwJ&(%//))****+,***)()+-........./..-,,,))((()********))))))))**((((**))$*'9[n|
+¥©eca`^^[YZYXUSQPOLLLLKJIJGHHHHHHIJIPMMRU`p|o5"1'*()****+,+*)(()+,././/./..----,,+))((()********)(+****+++'((()*)),&3^qu{š²ªeda`__\ZYYWVTRPNLLLLKJJIHHHHHHHHJJHHJNRVfs}O'.%*)+)+++-+***)**,-....//..,-..-,++)*)))**+**)))(()++***++*)(()+*)**,Ivvoyz£­­¥fda`_^\[ZYXVTRQPMLMLLKKJHHHHIHHHJJIIKMRT_ixv2+".(*)*+),,***))*+.....//.------,+*)*))***+****))))++***+*+))*)'(+)'5Ykdz£¯®fecb_^]\ZYYWSRPOMMMLMLLKJJIHHHIHIIIIJKPRY_nW''*(*)+*)--+*)()*+.------,,--,,+**))(((())***)))())**)))**)+'**)*-)0Io}fdt}¥­§fedb`_^][YXVSRPOONMMLMLLJJIIHHIIIIIHIKMOO\ctz5+(**(+*)-,+*)))*+-+,+,,+++,-,++*+*)))())***))))))()))))***+'(+-*+,D_|ogmty¥ª¢gfecb`^^[YXVTSQONOONNMMMKJJJHHHGHHHIIIKMJZ[l{['.))')*(****++***,**++****,,+++++*+++++++,+++++++***))))(()*(),&*:Zt{lksvz¥hgfeca_^]ZXVUSRQNNONNNMMKKJJHHHHGGGGHJJKOOTeq|2,,*&*+)+))**+***+)*++***)+*+++++++++++++,**+++++*))))))(('+))));Xuvos{x€hgfedb`_^\YWUSSQOONMMLLLLLJJIIHIHGHHHIIIQHRWlU',+&*+)+*))*+***++***++++***+++**********))*****)(((())**((++*7Wuztu~
+¡hhgedca`_]ZXUTSROOMMMLLLLLKJJIIIJIIHHHGHJORPfss,,)')*'))))**)**+*+**++++**++++**********))*****)'''())***%+,+Dkvs{skihfeea_^\ZXVUSRQQPONMMLMLLLJIJIKIHGFGGHLLUL\m}@&$+'&(,((((()))**+**++++**++++++********))))***)''(()(()''2&/Sw}pt|}|}{phjihgdcb`a_\ZWWWVQPPONMMLMMMMKKKJJJHGGGHHKLPRUixV)*++&&*'(((()))*++**++++***+++++********)))))**)&'(()))*)&**Gi~vnt{}xtsslcZhhhgdbbaa_\YVTTSRRRQPOOOLLMMKJIHJIIHIHJIJLMQQ_qp0((+'%))((((()**++**++++)))*************(())))))&'(&())),&%9bv{{olx}~unnmg\Vihhgdbbc`^][YXWVRRRQOOOONNNMLKJJJJIHHHJKLLPMTUi|D&'*)$(*((()))**++**++++)))*****))))))))(())))))'((&'**(-(3Y
+y~}mly|xonmj`Vljhgfeccb`]ZXVUTRRRQQPPPNMLKKJJJIJJJGGIJLLQJVP`x_&+)($()))))))***)****++**))((((&&&&&&''(('''''''))'(+*)('Fw}qpoz}sllj`Tnkhhgddc_^ZWUSRRQQQPOOOOQPONMLKKHJKKIGHHIMMLSQ[pq+)'%%)())))))*))(***+++)*)(((((&&&&&&''((''''''(((())*))2` yo
+yuywnli`Vlihhebbb]\[YXWTTQRRQPOOOMNOPONMMJJIIIIIIGLINOQXhv8&)%')'(((()))()(****++)*))((((''''''((''''''''('&)*)))#:n
+rqxurnmh_Zkhhfe``bba`\WPIE;<;:8788:=AEHJIGMKGGHKJJGKJMNNWdyG','')'((())))()()****+)*))((((''''''(('''''''')&'+-+)*,M}|mrvtkmkbZXjhdfkjbYNJD=730/%%'&%$$%$$%&)-13:@FLMJIGKJIMNNRduT(,(%,)()((((((()(())**))((('''''''''''&''''''&)*)&(+*'Ci|
+tlmyp~|qhgf^WUfmqncRB8&&%#"#$%&''(&'&()(()**+,,,1:EKKIHJKIJQV`u[(**'+*'((((((('''())**(((''''&'''''((((('''''()''("!.@^u{}umkmzyo{nhdfd_TOmdS@1)%%&'%&%%&&%&&'''))'()++)(),($$-:FNJGKKORTXqe&&)))(((''(((((()))**+(((()((((())((((((('''(('%(+%(Aaoyjfikw
+zpxsbacdd^QJNC2&"$')%&&%%%$$#$$&''))&&(+++))*)'#!'09FAJIINU[ln($(*((((''''''(())()))((('(((((())((''((((''''*)'#&;\w{{idfet
+{mlpiba`b`WLD"##"###%##$$%$%#$$%&&'()'(*++*)(((&&$""#$0IQQOSThu1#)*(+((''&&&&'&&&&&&&&&''''''))))(''''&%%%&'((.22:OclvpfcXYVP^ur`_fhga]\WL@<%###!!"$"#####"!$&&''('())***)((*(%""""!#!5DPLRZcv9%(*(+)(('&''&'&&&&&&&&&''''''****((((('$#$)-/4987=N[bh]UTNONKMbhVKTaef^YWPC94#!!%&$! !""$$%&'%%%%&&''())***))''''%#!#%#4LMPYas?'()(***)'''''((((((((((''''''(((())))*)((+.377:<<>CILNLHGCEEDFJG;9GSY]VQPLC94$#!""""$##"####%%%&'&'(''()**))((('$"!   # 9KWYbrD*)+*+*))(''''(((((((((('''''''''()((())+.169=>AB@@ABCDDA@?D>;96413:BNPLHGFC;6"""""""""#$##$$&''''&('(())*+))((('$$#"!! #
+'?W[bsE'*-+(**)('&&''''&'((&'&'''''')****+---.159<<>CBA@@???<=;77300.,,.04;BEB@ACE@="""""""""""#$%&&'''&'''')***++*)('&%$#""
+!
+
+.R^erG'++*')))'''&&''&''''''(((()()'()*+...3469=?A@AAB@@?>=9841/-+,(+,,-4:>A?==?@><""""#####"""$%$$''''&&&&()****)(('&%$#""
+!!$M`gnH$(*+(*)('''&&('')('())))(''''**-./123;<=?@A@?>>>=;:9743.**(')+.1015:;==<=<=>?#######$##"#$%%$&''&&&'&)()))*)(('&$##"!!!"""?YhnM#&)*())('''&&)('*)'(,)((()**(3346879:?ABBAA@?;:975431-.*)*)(*5369:89=;<>=::<>"""""##$"##$%&'&'&&'''')''((((''''&%###!!"! $!(IjsS&$(+'))('('&&(&&((&'*(+,-/210:::<>@AB=@@?<<<;6542//..+,+*-//1879<<99<:<<<;::;"#$#%%&&&&'%&&%#&&&&&(((&&'''(''&'%%$##" #$ "!?fuP&$)+()(''((&&(&&'((()*.158:99:;<?ABBDACB=9765.--+****,-,-03487:<;:<<:;::;:987&''')*,-,++)'&$$''&%%&((&'&&&'''&%&&$#$"!$#"!"!8drF#&)*))(('((&%('&')*))-5<=<<<:;<>CFEDEGGC<6420'''((*,-/212576:9:;;<==:;;9:8754+*+,,/01.00/-+))&&&$$&&&'&&''''&%%&&$%$##$ "#&-fq@%)*()((('''&%''&&(+)(6>DD=:9:??CHKIEF@?91.,)'%&(*,.1245679888<;;>><<>99975311*1448;9745673.(&'(%#&%&&)&&'(&'&'%$%&'%$"" "$##+lo;&+%+'())'(&&')''('(,2HMNF;79>CGHMLLFD992.,(*++-02467888989::9<=<:;<;:78553211;DJJMOJEB@=950,(&('&&&%''&''&&'&('('(())## #!""-ll6%+')()))'(&&&'%&()*4@V[QB:69CKOJLKLD@77001/01246799:;999:999:;;99888866432121FOVW\^\XWRKE?92+''('(''&%%%%$%%$((***())&##$!"#-lg/$*(')()''('&&('))+1@O_cTC>;>MTUPOKKC?20*-223577999999<;::<<<=;877555633211234QX[]`cb_`\WQOG;0*)'''%''$%%%%%&$()))+---'$%&"%#,mc*$(*&)()''('&'&&&%*7M\]aYJDBFQUYURKG@>7626;9;=?@ABBA@>A?==;;;=8764355412211334Z`cdeca_a_ZZYRH>1+(($$'&&''%'(('+)*-4;=<2-,("%$0o_*%(*('('''('(((,*)3JbpnpofZUZ[X[VULD<=JMJMPMOQMMMLKIFEFDB>97573531267334554423V[]]_``a`_][[[UN<3-)$%(&'&&&'(+-).5?INNIG?6*!#!5oU&%&((&(''(((('%((*8Tkuyy}ve__[][XXMA9>TXWXYVWWZYXXVRMHJJGC;546356446536776430/FIJILQTXYZ[[]][WH;3.'')%'&&'((,45=IRZ\ZUTN@,"$$?oJ!%'$)&((((((('((*2D]q{
+~pieba_[]L86Hckjjihhefeddda[USPME;45:<=??:534545420--6:;<?BDGNSX[^__\OA61*(*%('(**(0:KRY[^_`_VSE-$(*LqC
+(*#*(((((((''''+8NcvwofdbaaaI16Qeopnlkjfdcfjnmid]XPD703:GGIJB715010.--,+/115656<9EGKTY[aZL@4*),&)&)/10=LY\`ba]]_[WJ0''2Tr<
+&)&))((('((((#'(:Xlvkgc^c_B-5Q_jjgfeea^_bjrsmh\ZNH7*7DJQXTJ:5-01-..)))(()+--.36<:7@HNWYVI7,*))$$(18BNZc_[WSORWXaE,&$4Yh-"$&%''((''((((&()Acr
+zlffbc^>&.FYefbbac`^`dgjida]XKF8+8FNfl`WA2+++'()&()))'(**+0.2..6>AGQ[M5-($'('*3CQZ[WSLFCAFKNY9*$%=`[#(#'%%%(('''(((**(Iku}|ohjhg^:!';R`d`^]_]`_befc^\WSJF6*>Sax}ocF/')(%&'&))&'&')((*'++-4889DQI71+%(*()5JUSM@<9877:<>@/(#*DiG!,%(&'&(('''(((&'(Stxz~~xsrsna6
+#2GV\^]Z[X^]^bdb\XXQLKD=Sk|qF1(++()'%*(%'&&(&%'()(),.-.042,)&$#'%+:JNF?22111/-,1.*""+Gq1%(&(((('''''(('$'.h
+}|e1
+"/AR\addcbhiikjga^\LFMZ]p©ªK2.,,**''*'''('('%'(&%&'(((*(''&()'$(2<A=64-,+*))('''(%-Rr%*'''(')''(''(('*(3z 
+j+
+ .CWfpuuvty|}ytonl`IBNiw¡¯·³^70,+*,),30&'&%''&&%$&(&'&&%#####%%%*252-)*&&%%&&&&"%%*2l\$*)*&'''&&'&&'&'(%6­¥š£s(-F[my~}~{mNBLr§¬žºŽšwK40-,--4@@''&%&&%('&'&%#$$%'$#$"!"$(++*%$&%&&&%%$$'#""-6@&#(+$&&&&&'&&''&%'@œŽ§Šª®žŽz("!-H_rzP:Csš­­µ¿À³`:2/-./:KM%%$%%%%&('&&%&$$%###"""$#'($$&'('('&$%$$'#%)\/)&%%'((&''((((('. CªÇŽª£©±¹Œ¹($-L^u¢S1=s¥¬ª±»ÀŽuI80//,C[[%&&%&'&&$$$$###$$##"""##$&'%$%'&&&%&%#"" )%*2g('%%()(((((((((()$=È¶§¢¯·ž¿»*#+H`x~~ wR68d
+£š®¯~W=0/0/E_e%%$$#####$$#""####"""""##%%$$$$%$$%$#$##"$
+)M@&)'''())())))))))&%8Ä¶©  ¥±ž»ÄŒ)!#,DZptu}¢¢ jK60OqjF.,0/A[j"#######$$$$#$$$$$"#"#"$"#$"#%$""###$$$$
+#)u&&('(()(()))))))))(!7œ²«¢¢¡«³ŒÇŸ+"*?Odflu
+ £©cC1.?Yyujww
+uQ,)-+6Of!###$%''$$%%$%%%###$#$#####$%$%#%$$###"! $CW+''((((((((((((((*!5·­€¢­¶ŸŸ4$%6E]_cfpxz©« c?0/5IcvtXLN`p[+%'%+Da$$&#$%&&$$%$$%%%############$$#"$""!!"!" #/i3%-''''(((((((((((''$-nš€
+£­¯¶<!''0=SW[\gptx°¯¬©`<0,.>ThmT;29Rb*%%$&<_#%%"!"#"$$###$$$####$$####""#""""!" !"#"""Ji"%/('''((((((((((('#%*Q
+{y|š=$().3GKTT^fopª°°­~`>0/-4E\nf@/!Ld(%%$&7W!$$"!"%$#$###$$$####$$##"##"#""#$$"!"""#&/t€*&*()'''()((((((((('"$+@o
+}xuspr|@''&,.?CLIU^Raª«ªhD64--8TmsO1*]§¡c'''&%1O##%%"
+!'"#$#!"##$#$$$$$#!!!""!  "
+($ '# 1`^
+) ,('(((('''&('()'('&,5Wwtwtlikmoxv{R+&&)(7=CACLAFc jI=6-'-EivY/:n«f&'")))G# 
+ ""#%$"! !#####$$$$$$!! !!!$"#$
+
+'%D/+0
+'''(((('''&(&()''))-0Lqwrosqjjkkkkr|sU2((*(7?FDACJHTm
+rQ?6,&,Ci|cCM~¯b&%$'"#@
+
+ ##"!"#$%&&$" ######$$"##"!##"
+!
+"*?u=*#1.''''(((()'('')'(')-*;[ionrmhffccdlrjX5%($&3?NPOMVNO]u|uWB6-'*>h|kYe°R&$%)"$89.!
+"$$"#$$#!!"$#$#$$$$#""#$%"!!!$"",.Ao\!,&,!%''''((((*()'')'(%',(1FXeklic_]\\^]abX7%*$$1?SZ]\\WRYouwroWD81)*7]wws¡£s=&(%(*)/ZM;/'$!
+  !!!#%&##%%$$#$'"
+
+!'!"&.ARhV.
+$&')%()((((''*()(()'))),+*3AS^aa^\YVWQJPTO7-*%'3@TY]]XVOPacfdfUC94+(2Np
+Šd0(+&&))&[]\SD5-))%
+!!
+"""$$##!
+"%#
+
+!'-7NZelR!*0$-'%'()(((((()(*(')')('+,)(2@PU[\[VPOC=CDB=6)%(0@PQWVUSNMUSVUYN?64+(/Cf`/(+(((&&YZ[[\WPJE<0($$$"$$$#$$$$##!
+&29GMTe_YR&%*&##"#+'(((((((&&*(''')(()+)&,3=EKQSMII@<??AC>.'&+5@@HJIHEEKGGCFC711+(,9V|uK/'++*)&,_\ZZ^`]YZYVPD:1-))('&'()#*/05BPU[]\ZOHA5+)%1.$+&'((())($%)'&'%*)((*+()*-29@ECABB@@?FGC70*%(-*252/--537156.,0*(+-Biz}g@,(,-*,%,Y\`a_]\][^_`]ZWVJIHGHIIKKPRQT[]\YY\NCDCJE501'&*#$$&'&%'-,!%&(%(')((*)**)*-/2=FJBGNNNOMGI>:2'(,--)'))+*'()*(+,)&(4Vg{}g@-*,-,,)+c_Z[_ca_`][\`a`^^^^^]]^^`^^]]]\ZZRQF?@@ICCF<()%')'$&)&%&)#&$ *'')()()((*'()),:KTT]ggffc[\QMA1/.*+++)%$$$%$%&(('%'-FUn{nL1+----+*bbcca`bbb]YZ\^^\\\]^^]\\\Z\a`YSSODDBBB@GBFNK:6$+)#$*,%"'2A[B!'#())''(('(+*('/BT\`n~{yunh`[M;651+*+(#!$&#""$&(&&!,I\usQ4-----+*qlhffea__``__^^]]\]^^^^]]ZY\XOGEE=?CHGBEDDINOK4*()+)#!-=_kM%)'+('(''('(((&&4KZW_u
+}wymeU>51.,*)'$&'$&$"%('&&'8[n
+uW5.-,,-+*MYfkifgjegiheb```_^_]]\[[WSLHDBBEBBCEFEFEHHJRTM/#'*$)A`ovw?"**+''(''(''''#%5S^VZr~{wiZSL;212,)'&$%%!&$#%&&%&,BkpP4..-+---BBDHRY`a^^`abb`__]ZXWUTRHGDA?BDECCDCCFEEEJKIOQ^L1$'8Ldsupxv7&''*''(''('(*'%(8S`]`t|yvlWQK?50/+)((#"##&$#$&&&&(HxhA3//-+--.FGGD??@CABBFKMMKOLKIHFDBBCCBCDCBACBACFFEGIKMRQ`e1
+.Sdlmgs~e,&,()'(((''('*$&3EYehr|yugQHE<3-+))))$$%%&%$$&(&%-O
+^90./-+---HKNMIEEGHHHFDA??DDCBCB@?GEDEFFECFEABCFJIJMKMVZ]f42Mb^`jeq\'#,&)(((''('(*%-D\jtv|
+{tro_I?=863.+)'('&&"&&%$%&%$+T|T0/,.,*-,+FEFGHIIIGFGIHHIGBAAABDCABDDDEEEEBADEGIKLNJPU^cf^?KZ\XeoftN#))$('')$&+&'#%9[qsy
+}spkZH?96411++*''&%%'&$%%'&$-Y¡tG/+++,++,,GFFFGGFFFEGHGGIGFFEEEEDCEEEDDCBABDHIKIJJNOVhheiXGPU[`_`c}E))((&(')'')&("+Ls~zrniUKE>62//,+*)''&&(&%%'''&.Y_9,++,,-,,,QPNKJHGEIHIHGHJIFEDDDDCBGGGFEEDDEIJMLOQTY`cki`a^LLMSZUS\s6')))&''')'&(&$4]{sniPIE=4/--,*))''((&&%%&&&$0]}S4')+,,--,+ZYWUSPNMONLLIKKJIHHHHHHHHHHHHGGHGGJMPV\aeff][YbdNIMQPRV\m,#**'('(%)'%)%*Hn
+
+|tpjSE;642.+++)(('((&&&&&&%$2aaB1&()+,--,,^]\ZYXXXWTSQLKLJHHHHIIIIJJJIJKLMPRV[_dff`TWTRZs[MJNNLOUaa+(*(&'))&))'*%6^yspiU@2254/,++))((((''''(&%%.e
+~T7.&(*)+,,,,^]\[[ZZ[YVTRNOPMPPPPPPPPOONOQQRRUVXYZXWTPPLPX[xVFJIHMIJi
+J*0)&((&)'()'(+Jo
+~zupiO:1130+-++*+)()('''''&%%3avmB,**,,+,,,,,_^]ZYYZZVTTRPQRRQPPPOOOOQQQRRRSSVUTSQONMITMMX`eTFIHGMINu|9(-'&)($''%(&*;ey}}zqdH:211-*+++,,*)((((('''%%9_qiD4,,1100.-,,^^]\\[\\XVTSRQRRPPOOOOPPMMNMMMMMLMNPPNNOPMQNReVLGEFDFJWzs5($'(&'&''%)(/O~
+}{}zn]E;620/--,,--+*)))**))(''<aqa:1.1445310.-^^][[\\\XVUROPQPPQQQPPQQNNMNMMMMMMNOOOOPKMIPNWOKKFJFBIU}^&.+**&+%*'%'*?e{y{vhWF?;:62/..-..,*)(*+,+*))*IerwP2,47787641/_^]][[\]YWTSOOPNOPPPPPOOMNNMMLLMKKKKMMLLMOJNLSLHGHDDDEZU'+((($'%('%*5Rt~xzypcUJD@>:642.-..,+*)+++,--,-G_kpO5/58:997542]\\\[[\\ZWUSPPPNOOONNOOOOMMNLMLLMMMMLMMMLNKMKQKIGGDBDDaE')&))'&%(%%0Ff
+|w{yk^SKFC?<7420000-,*)**,-/00.BV^dK4-19;<;;875]]]\[\\\ZWUTQQQPOOOOOONOOOONMLLLLKKKJJJKJLJLJOKJHEGCBJl5&&%('*&''%(8Wx
+~z}xi\QKGEC=:5.000/-+*)()+-.///AOVZG71289;=<:87``^]]^^^YWUTRRSQPPOOOOONOOONNMLLLKKJJKJJJKJJIIHGGFFE@L|k(&&%&%(&(&(/Dh}}wi\ONKKHC=5/-,,++)(((*+,++,,5=AB8.+-49<==<97a`^]^^__XVUTRRSPPPOOONNNOONMNMLLLLLLLLKLKKJJHIGGFHAEBOP&('&'&(&$%)7Qr~}wk^PQNPPI?4-,++**)))*+,,*)*+1443.,.147;<<;85`_^]\\^_XVVURRRPPPOOONNNNNNMLKKJIIIJIIIIJJJJJIHHEFBCHX7(()('(('$(0?Zw
+~~~|}|wj]QQOSTN@3*,,,,++--,-,+*))+-,,+*+,.37:::986`_^]\\^_YWWVSSRPPPPOOONNNMMLLKJJJJJKKJJJIGIHIGFED@HCNeu()&()'('((-6Gax
+~~~}z|z|vi]QUSWZTC6+,,,++-./-,+*)))*.+-,----37887776a`][[[^_ZXWUSSSQRQOOOONNNNMLLKJJJJJJJKKKHGIHHGEDCBGCM{[()&&*))(()2F[p}~~~{x{ywum[OR[_\TD5+-)+*&/73.--,++)--.01/-//26766675`_\[[[^^ZXWUSRSPQQOOOONNNMMLKJJJJJJJJJJIHGHGGEDDEDBLLH")(((%')%'<Wnx~~~}yuyzwvm^SQ`ebSB5)+(*))4>;3//,/1./,/110/1234544465^]\[\]\][XWVSRROQPOOOONNMMLLKJKJIIIIIIHHGFGFGEDDF@ALW|4!'&(*)*,)8Lcu}||xtry|yul`WVitmXA4))()*+<JI830.01.//111112424422556_^\\]]\\[YXVTRROQPOOONNNNMMLKJJJIIIIIIGGFEEFDDDDEACIig&',')+)%&)DZryytqr{{uj_Y]py]@4+*'*(-@PP;67313112354434445633457`_^]]]\[\YYWTSQOPOOONNNNNNMLLKJJHIJJIIGGFEDEDCDDCEANuP
+''#&%(*:HVk
+|wvroq|uh^ZbwcB3-+*)',ARTB:9646664677544456765777`__^^][[\YYWTSQOOOOONNNNNNMLLKKJIIJJIIGGEEEDCCDCBBBT{9 $**+!$3Tdq{
+usroot|tf_]okE0,*))'.EXXC76:89766775554467766676a`^^]][Z[YYXTSQOOOOONNNNMMMMLKKKIIIIIHFGEEDDBCDCCBI`o)%%$#&!1Hlz~
+voqtsw}{pebg{¥uI0*))*',DXXA6;B=9779766454565567888`_^^]][ZZXYWTRQNOOOONNNNLLMLLKKKIIIIIGFFEEDBBCDDEILrX%#&,%)-G\x
+}mjt{~~vlaeo¢®yO2*+**%*?PPA;FOE;8;<:75343464577878
+
+~~~~}vupifedccbcbaaa``_^]]][[XXXXVUSRSSRQQPOO
+
+
+|wuqkheddcbcbbbaa`_^]]\ZZWXWWVUSRSSRQQQPP
+
+
+
+
+
+
+~zwsolgfgbbbbaabb__]\\ZYXWWVVUUTTTTSSSQQQ
+
+~}xsqmhhhbbba``aa__\[[ZXXWWWVUVUUTTTTSSSR¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¡        |}~{vrnjhfgbbba`_``__][[ZYYYYYYXVUUUUUTTTTT¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¢¢¢¢¢¢¢¢  
+|{zywwupmigfgddcba````_]\\\[\[[[[ZYWVVVVUUUUU§§§§§§§§§§§§§§§§€€€€¥¥¥¥££¢¡   zyzvrsrnkhhhgedcbba``__^]]]]]][[ZZYYYWWVVVVWWªªªªªªªª©©©©©©©©§§§§§§§§¥€£¢¡¡¢¡ ¡¡¡¡¡  
+}|{uqnnlighgeddcbba`___^^^^_`^][YXXZZWWVWWWWWšššššš§§ªªªªªªªª©©©šššš§§Š¥€€€€£¢££££¢¡ ¡¡¡¡¡¡¡¡ |{zxuqonkigedcdddca`__`_^]^__`^^\ZYYXYVVWWWWWW©©©©©©©©ªªªªªªªª«ªªª©ššš©©š§ŠŠŠ¥£€€€£¢¡¡¢¢¢¢¢¢¢¢£ 
+|z}{xwwuspookjgfeedccccaaaaa`^^^^^^]\[ZZZZXXXXYYYY««««««««««««««««¬¬¬«ªªšš©š§ŠŠŠŠ§¥¥¥¥€£¢¢¡¡¢¢¢¢¢¢¡ }yzwvvuusqnnkigfeeccddeeeecaa`___^\]\][ZZZXYZZ[\\\¬¬¬¬¬­­­¬¬¬¬¬­­­­­­¬¬«ª©š§ŠŠ¥¥¥¥ŠŠŠŠ¥¥€£¢¢¢¢¢¡¡¡ |zwvvvvusnmmjjgffdedffgggddcba`_`__``_]\[Z\[\\]]]­­­­­­®®¬¬­­­­®®¬««««ªªª§§§Š§§§§ŠŠŠŠŠŠ§§ŠŠ¥€£¢¡¡¡ |~{|ywvuvtsooommkjhhfgfhgfeffedcbababbcca_^^^^__```®®®®®¯¯¯­­­­®®®­¬««««ªªªšš§§š§§§§§§§§§ššš§Š¥£¢¡¡     }~y~|yxvutrqppollkjkjiiihgfiggfedddcdfghiggbbbbbaaa¯¯¯¯°°°°®®®®®®®­®­­¬¬¬­­«ªª©©šš§©šššššš©©©šŠ€¢¡¡¡¡     }}{zxwutsrqpnljkkjjjkkjikkkjihhhffhjlllkgfffffgg°°°±±±±²±°°°¯¯¯®¯¯¯®®®®®­­¬¬«ª©šššš©šššš««©§Š€£££¢¡  ~~|{zyywvvvsrpnmlkkkmopppnmlkjiiihikmnnmmmmllllmm²²²²²²²²µŽ³³³³³³²²°°°¯°°°¯®­¬¬¬¬®­­­­­¬¬ªªª©šŠ¥€£¢ }{zzzzxvvutrqonnjkkmorqrqqqqppppopqqrsrrqqrrrrrr····¶¶¶¶··µµŽŽŽ³³³²²²±²²±°¯¯¯®®¯®­­­­­««©ªª©šš§§¢¢  ¢¢~~|{zywvvutsrqpoonnoqrrropprstuvrrssttuuvvvvvvuu¹¹¹žž·žž¹ž·¶·¶µŽµµµŽŽŽ³³²²³³²²²ŽŽ³³²²²°°««©©š§ŠŠ¡   ¡
+~}~|{zyywtttssqppqqqrstttqrrstuuvttttttuvvvvvvvvvº¹¹¹ž¹¹ž¹¹ž···¶µŽµµµŽŽ³²²²³³³³ŽµŽ³³²³²±°¬¬«©šŠ¥¥¢¢¡~~~}{zyyyxuttstrrrqrstuwwwwwwwvvvtttttttuutuuuuuuuºººººººº¹¹¹¹·¶¶µµµŽ³Ž³²²¯¯°°²²²²±±±°±°¯¯«¬ªª©šš§£€£¡
+~}~}{|{yyxyyyxutttturrstvwwxxxxxxxxxtutvvwvwvvvvuuuvºººººººº¹¹¹¹ž··¶µµŽ³Ž²²±¯¯¯±°°°¯¯¯¯°¯®­­š©šš§§ŠŠ¢¢¡ ~~}}{|||{zyxxxzyutsstvtuuvwxxyxxxyyyzzttuuuwvwwwwvvvvv»º»º»»»»¹¹ººº¹žž¶¶Ž³³²±±¯±°°°¯­­«¬«ª©©š©§Š¥¥£¢¡¢¡ }|}|{|{zyxxwxyxvtsstustuuvwwwxwwwwwwwuvvuvvvvwvvvuuuu»»»»ŒŒŒŒ¹¹¹º¹¹ž¶µŽŽŽ²³±²°¯¯®­«ª©«©©š§§§Š¥¥€££¢¡  
+
+~~~~}}}||{zyxxxwwwwvutttsqrsttuvvxxwwwwwvwwxxwvvvxxwvvvuuŒŒŒŒŒŒ»»·ž¹¹¹ž··¶µµ²Ž²³°¯¯¯¯¬«ª©©©š§§Š¥¥££¢  
+~}}zzywwvvxxxwvutssrrrsssttuuuuuuuuwwwwwvuuwwwwvvvvŒŒŒŒŒ»ººžž¹¹¹ž··µµŽ³³²²±±±°®­¬©©ªª©š§¥€€¡¡¡
+~~~~{zyxwwwwxxwvvussssstttuuuuuuuuuvvvvvvuttvvuuttttŒŒŒŒŒ»ŒŒºº¹¹ºº¹ž¶µŽŽ³Ž²±°°±¯®­«ª©©§Š¥€£€ 
+~~}|{zyyyyxxwvwvuutuuuuvvvvvvvvuvvuutttsttuuuutsssººº¹¹º»»»º¹¹ºººžµ¶Žµ³Ž±±²²±°¯®¬­š©§§€€£¢  
+~~~}|{zyyyyxwwvuuttttuuuuvvvvvuvvutttssssuuuussssŸŸŸœœœœœŒŒº¹ºº¹ž·¹¶ž³Ž°±Ž³³±°®¬«©ššŠŠ¥£££ 
+~}{zyxxyyxwvussssssssssvvvvuuuutttssrrrssrqqqqpÅÅÄÃÂÂÁÁÁ¿œŒœŒ»¹ž»·º³Ž°²³²²°¯®¬¬©šš§Š¥¥€¡
+~}|zyxwxxwvutrqssssssssttutssstsrrrrqqqrqpppoooÅÅÃÂÁÀ¿¿ÁÀŸŸŸœ»º·ºž»³µ°³­¬¬«ªªª«©©š§¥¥€€  
+
+~|{zyxwwwvutrrsstststssrtrrprqpppppoooqqppooonÅÅÃÂÂÁÁÁœŸŒœœœºº¶º¶º°³®²š§¥£¡¡¢¢š§ŠŠ¥¥€€¡¡¡
+~~}|{yzxvwwwvutstttttssssttrrprsnnnnnnnnppoonnnnŸŸœœ¿¿¿¿ŸŒŒŒŒ¹¶µ²µ±ŽŠ©¥š 
+
+
+~~|{zyxxvwxxxxvutsssrrrrrsrrsrqoppllkkmmnnjjiihhggŒœŸŸœ¿ŸŸŸœŒ¹·Ž°­©­ª¬
+
+~}|}||{{zzvvuutssssstuttssopoooooonoonmlllhjijjkjjhggffeddž·žžžž¹¹¹···µ²­ªš«««
+{|}~~|zxwwvvuuutrrrqqppoooppooonkkkkkkkkkkkkjihideefffffgffdcbbaµµŽ³Ž³³²°°°°¯®«ª©©©© 
+
+~}||||vwxxxvutsssrrqqqqpponmllkkklkjjjhhiiihhighhfecbbabbcccdcdba`_^^^¶···¶µŽŽ¹žž¶Ž³³²°¯®®©«©©šŠ£ ~}|{{zyxwvtursssrrqpqqpppooonnmlkjjiffgghhhhhhhgggfgdedcb`^]^^]]]^`a]]\\ZZYYŸŸŸŸœŒ»»»ºž¶³²³²±¯­¬ª««©§Š£
+|{yxwvvvutsqqqopoooonnnmmmmllljjkjjiiiggfffeeefeeeefeeddca_^\[[\ZZY[\_ZZXXVWUVÃÃÂÂÁÀ¿ŸœŒ¹ž·¶µ¶Ž±¯­««ª§ ~}{{{yxvutsrrqqonnlllkllkljiiiiiiiiiiiihhghggecbaaaccccb`````_^\ZZZZXXVWY[ZYXVVUVUÇÆÆÅÄÂÀ¿ŒŒºž·¶µ¶±®­©š€€ ~{yyxwwwvtsrsppoonmmljjjjkijjhhhhhhhhffggggfeffdcba`a_```_^]]\\\\[YXWZZYWVUWWXYWWUVUVÅÆÄÃÁ¿¿Ÿ»»¹º¹žµµ°®©Š¡
+~}}|zxvuvvtssqqqooonmllljiiijihhhhhhhgghfgggfecbbcba``_^^^^^^\[ZYYYZZXWWXYWWUVUWWVVVUTUUÆÅÆÄÁ¿ŸŒ¹º¹ž·¶¶µ¬š€
+~|{{yyyyywvwvuusrqqpqmmllkkjjkkjjjihgfhhffffefeedda``^]^]^]]]]]^]\[YYWWXYXWUVVWWVTRRQSSTTTSRQÆÅÅÄÁÀŒ»»ºž¶±®«š€£
+~}{xwwyyxwuuutssrrqqpommkkklkjjjiiikjieeeeeeddabab``_]\]\]\\\[\]\]\ZYYUTUVVVUUTTUUSQQSRQQRSRONÅÄÃÁŸŒº¹ž¶Ž±¯«§€
+}}{xwuvyxwvtrqprqpoonnmlllkkkljhjjijiigccccbbaa_^_^_^]]\]][\ZYY[[[[ZYXWUTTUVUTTRTUTSRTUPPQRRQONÇÅÂÀœ»ºžŽ²®«ª¥¢
+~~}z{ywvtstssrqpppopoponmkkjllkjjjkiiigfgdcaa______\][]\]][XXYZYYYXXXXXXVVVWTTTSSTUTUTSPOPRPPQQQPQQÈÄÂŸŒ»º¹²®š¥¢~}||{xxwvutsspqoonmmnnmllkkjhhijifefgghgdddba``^\[\[\]\[[[ZYYXYYXXWWVWWWWVVVVUSRRSRRSRRRPNNPQOPPPOOQRÃÁŒž·Ž³³š€¡~}|{zyxxvvutsrqrpoonmllllkjjihhfiihfdbccbccaabb__^\[[Z[[ZYXXYYXXYYXXWVVUWWVVVVUUTSRRRPOPQPPOOOPQOOOOOONN¿»¶±­ªŠ€¡
+~|~~{zywwuuttrqqonlknmmmlllliiighggehgedb`_^aaa^^``]__^]\[[ZYXWXYYXXVVVVVVWWUUTTSSSSQQRRQONNPOONOONNPONNOONMº¶±¬š£¡
+|zy|}~uutsqrpqrqonlkigkjjjiihhhhhgfeddgccca\YYa_]\`a[TZ[ZYXWWVWVVWXXWUPQTVVUSQQRSRPOPQPRSQQRQOQSSQMKMPMMMOPOLI»ž²°¬«šš¢¡~}~xwvssrrrusrqpoomnnnmmmllfedcbaa`a]\_^YVU]]ZYYZVPY[[XWYXTSTTUVVTSSTVWWTPOOPQPNMNONPSRRRQNPQQOLJLMJKMQRPKF}}}{zyyywvsrqppqqpmjjijkghgggfefeeeeeddea``^]]\[_[Z\\WRQ[\ZWUROLTYXUTWVQOPQSTTRPQRTVTSONMPQPMLMOJMOOOPNLNNNLJIJKGHKORPJE
+~zxutpppomlmmihgffedddb``_^__`aaaaa`a]^]^]]]^\\[ZYYXY[XWWWSPOVYWTQQPOSVVQQSRPMMOQRRPOMNOPPPONNNPNLKLNHJKKKKJHLKKIJHIJFFGJMMJG{xusqonomlhfffeeba`aaa_]\\[[[\YZZZZZZZZZZZZYYZZYYYXWVVSRRSSQQRPQRQPPPPQQQQQQPPONOPRRQPNNNONOMNNMMMLLLLJIJHHIGGIJIJIJIIDDDEGHHHzyvsrpmkgffdcaaab`^]][[[Z[[[[YYZYZZZZZZZXXXXXWWWVWWVVVUTONNOONOOMMMMMNNNPNOPPOOPNMMMNOOOLMNOONMLMMLKLKKJJJIIHGGFGFGFGFGFDEEFFGHHrqoljhgfedba^\[[\][YXYYYWWWWWUUUVUUUVUVUVWVWUVUVSSSRRRRROMMMMKLKMMLLLLKLLMMLMMMMLLKKLMMLKLMMNMMLLKJJJJIJJIIIHGGGDDDDDDDDCCDDEEEEkjiggecc]][Z[ZZWXWWWWVVVVVUUUTTSRRRRRRRRSTTSSRRRRQPPONNNKKKLLKJILKLLLLLLKMMKKMMKKIIIJKJJKJJJIJJJIIIIIGHGGGHHHGFFFFFFEEEECCBCDEDDa```^^]\[YYYXWWVVWUVUUTTTTRSSRRQQPPOQPPOOPPPOOOOPQONONMOJIIIIIIIJJJJJJJJKKIKKIKKIIIJJKJIJIIIJJIIGGFFGGGGFFEFFFEEDDDDDDDDBBBBCCCC\\ZYYYWXWWUUUTSSPQQQQQPOQPOOOOPOPPOPOPPPNNNNNMMMNNMKMKIJHIIHIGGGIIHIIIIHHIGIHFGGJIHHIKHHGHFGEGFHFEFDEDEDDDDEEEEECBBBBBCCAAAAABBBZYXWWVVTSRQPPPOONOPQONMLMMLLLLKKNNNNNNNNMMLKJJJIJLJJJJHHEFGGFFFFIIHIIIIIGHGIIFIGJHGGHGGDGFGEEDGGEEEDDDCCCCBBBBBCBAAAAAAAAAAAAAAAUTSSRQPOOONNNNNOMNOPONNMLLMMMMLKMLLLMMLKLKKKJKJJIKKJJGFHEFGGFDDEIIIIJJJJJKHKJHIIIGFFFFEDDDDCCCCEDDDCCBBBBBBAAAABBAA@@@@@AAA@@@@@RRRQPPONNNNNNNNMMOPOOOOOKKKLMMMMMKJJMLKJIIIKJKLLGJJIIGHJHHIHGGGHHHHIIIIHJIGHHEGFIIIHHHHHGGFFGFFECCCCBBAABBBCCCCBCCCBBBAACCBBBAAAMMMNNNOPPPNMMMNNNPONMLLMMLJIJJKKJIHIJKJIJKKIJIIHFIIHHGHKGHIIHGHIHHHHHHGGGFDFFEHGHIIIHHIJCCCCDCBADDDDCCCCAABBCCCDCCCCCBBBEEEDDDCCGGFGHHIHLLKKLLLNNPPONLKLNMKJJIIIJIIIJKKKKJIIHGGGHIHGIHGIGHIHFEFGHHGGFFFFFEBEHGIIFFFFEFHIIIIIIHGFDDDDDDDDABAAAAAACCCCCCCCEEEEEDDDEEEEEEEEEEEFGIJJKMPPPONOKKLMMMKJJLLMKKLMHIIIIJJIJJGGIIHIKKKHECDDGGFEEDDCHFCEFEGEGGFEEFFFFFFDCDDDBBBBBBBBCCBB@A@@BBBCCCDDCCCBBBBBEDBDCCFCEEDCCDEGMJJJKMPTRTUSSRROSOMNONMLNLLLKLMILJGIMOJHKJJJIGGHJGGFEEEDFGIHFF?IHDNREFLBBEHB@EGEDCDCABCAEEEABACC@CBABA@D@AAA@@@@FHGIDBDACEEFFDDBJHGCDGLOORTPKKPU[ZYZ]`^\XVVTQRRQPKEDLPONOPNMKIIILJJKGGHGDHKKFPJNGDOXM??IGCHIJJBJDCEEFHHHFCBBEEDCDDCADBA@DB@@ABA@GJILKILKLKIIHIIHFILKJGCAFGHIJLNONOPQVZYXZ\_bacdeb]USZagm_`a^\[ZZVUWWTSSPVPQNRQKC`º»»Œ€aRHILGIILJLLIJKHIGCBABBBFEECABA?AA@@??@AVVTVUUWS\ZWSQPOOPPQRQOOQOKJMSURNHHHIJLMOLKMMLMOOPQNMOT\dlmljikkkronnkjjinjffdTa¥ÞÈš|gVVSVTUSVXXZ[WRROLECBDEDFDADFBAAABBA?>bbaca`a]\]^^\[Z[[WUWURTYTQOMMKJKMLLLJHJNSMHEBCDD=BDDEEFJVWXWW[__^^bdeeebafnnkmÇâ mhc\[[_{exstywvsmlidgfd_XTSRQMPQQUVOPKC>?@?>knoohbda^_aaabbddbdfd[VWVVUVSNMPMORTTUY][VRPOONKKMNMOPNPWVVXY[]_\ZXWWY]^\S^]^¿Ð{ia_ZXXOOOlb\mcklnpnppnmfb[]\][YTRV[]XQMNOLE>:9osvzxx~~wuronmmnmnoppoorplimmiechkia[Z[Xb^\^`b`\Y\YXYZ[^_]\]\YYZegmmhb]XZYPSÔ¥wi]ZXOLMJEPHqqHKOUUY[YZ^]d_b[b]ca^[X[`_ZYRUSKB<?Bigcdddhennnmmnlknqqopx}~~xrqnief`fd\\cd_eabfkrvumtxvroorwsrqmfaadehebchkkplqÙ±}h^][TKHGDGFGPvb^_ihhbYRQNLO^YaU[VRSPRVST\QPQQNJD?gfheelljgfgkpqmijllkijd]cijebgkhc^`gcVT^][Z[[bjnruslhkprxvvxwsppkigfjkghhcTÕhb\YQKFDFEDDCDcl_lfkfYOW\\V\hdebTWQGGHKJNLLJJOVULFontsmkjmefhloqpootskefd^Z]bdfgbX\_ioh[\fgefgiovyyrkinsuvvutrokhh\ZWW]_\[\RGºµibZWSNJGEEFAEJXjPYSSPJABCCIK?MfR?;AFHCIEDKOMGEJLMNxx~~xvuw~|~zstzztwrnlmqqmnsyxoedjfgjmnrwydlx~vtxttrnligeY\ZURRVZOMSÎª}leXTOJEDCCCDHCTnbe_SFE=97:7=9-q6"$*7D=@@CNTSMGGHJNklppt~}~|yvuvyzssxyuzy{wqljgrzxspnnlfb^ZNMUfpnd^TVUQOOOLJOMJLLIGD@SÖšibZUNJFDCECDFH]fHC=HKJBC>7:?2VP !*%,CCCGF@MMLIHFGJ@=@@ENRQ]_a_^^adWXXVV[bga^\RC>?@GLS[ejgaOMNNKIFB=;;<<9778;;879:9;==<@CCCFOkÞ·
+ljYURPLHEEFHGPZrJ@=>==>EFB?@GJ/13%$#16=IOEEEEDGHJM>8:9689:::<:999<9::::;?E>=?>9;ACFD@>?BCA=99:9:<:<:79=>=9;?@=<>??>AA@?BFKH±ŸÑ·tje_ZUQIGIVH[^dG>B:7=BIHECWOJ0@,
+#')%*2AGLMJHJJLM;7:98978;:87644354434665<;<:8<?>879::99:;::978;<?;9:>@@>>@BA?@ABBCEGHFCEDlv©}wojfbZQMNSbQXthHKNIGESYVICEDC~=##'(%&(@KONLJKIGI65867;604323676549:8576669<;8861;:;>=::<BA@>989;?<9;>???=@ACBACDEGGFC@GTZ7o²~`_hgjjcUKJJ:;_}
+P|]DIIFCIQC@IR{&/;+!!
+%EH>A@@BCEI8678:=<87355779679<::=<;;=:>@?<6<9=B?<>C>@?<878;;;::=@BCCBAEGFDDFDFICGNYo`atcG_YHE\I1BD:;NWSA5nHB?=<<:7BFE7IK".:*!!2>8;9<5:96:=89<:769;8:897977<>;<AB?A;6:;799>;>B>9:<??=:99:<9:;<<;>@B??BDDBAHHFDABCGq¹£l¥¥nTXMA=Vp{£;;6993..<506-0@
+/;6+)'6=>6896<:9<94487569<:><<9<;7=?;;BEB@=;;4'/=::>DCABC<;;;:742==<998:;=<<?@><<7978>BB>H?X°wj\HDSWl
+E78;=7@`oDNOHEY$)3?931??C;<<;=:;;75467895<:?>>;><>BDA@EGED@<>:)-998:=<;;;A><::9769999;:64:89;<;887:88@CB>;4Hª}tpop{|uhVLMCEQboi61988><)[®¡NNLb/!ScaSKOJH?D@A@=@>78587694;9>>@<><79<<;9;;;979:*,4889966766689:98799999:99989:<<<<;;79;:<;C6Gygkejeb^XQHDAFQRc[5@@4;@<,7`~%!#(6*9?C=69<>6:7;98<:0/.30)./.,125365/.132.-015544!$/-.//.1431579888878;:66:>88:;=?@A?81?@@FHFGG}jda]ZVSKFC==>?H`W=<DC8YD"(9J_ 10/0/,$%+$'3=AEDD=>??64187299625697<<44577554=:76;&(267852587342/-.36:?DFDBAB==>=?ACED3(CBFJKGECf[ZVSLMHCA=?FDFYO:?;:9=,H2Yu,//4/43-'2)7=JNQPM@CCC43,267>79453416766788:86@AB?@&,>;<>;8;?>:=AB?;:931/.27;?DCAAACDGN4$JKPQPFC@p
+eZVORIEC?A><@DGY@<@>4D
+/O^1^v,8-,2438.9-DCLTUXSEJHL06.;;9;::3:77:79579;9<:4=??>>)*<<>;::?@??FE?FCEHF=AA>:9-4/.-*0189/"541975+-RdZRPMHD@>>=8==FWFQNJ>hk(KD<V^&3)0/,.),0.]N]_Zd]DQTUBE4>:7:::5?=<=:<9:89=>:6@?>=?*':>A=<;?B@CDA<GCCFKBHNKFKDNLLICDEGK@ :UOJJLEDU
+hVQOKGDB>=;:>:DSCJFQBU??A2=CP&</.2./*.13PGR]\ZR>JJF\ZERSNI>@6B>@ABE6:<:AA><A=>?A,$7@BACCEMLJIFANGGLP?CKLKLBTOONKMTS]L%;ZTQNTLMNxlXXNKGDB@<;3?>PXOTU]CI+/5.5i\&3/.,/1-,-,'3D?A8JJD>A.=:7757*76:97826879<:.<:<?A-
+4<:9852<;=@C>RPRYSIV[VPPFURWUOKXRQL&0QLOOTEBInz\UMIFC@=;9?=;Weij_^>0!
+@P+7+-'5).)01!
+
+-PNRHRPLPT?SSSUQM;IDGHGK@BNMR]_GYYYYX@'@ZWURLFTRFGD0?:64F9GT^fdSiinj`Ugdoj2-ccZZ\UV[awaWMICA>;997<@M<3<;K5-"&&/NA!,$"*#$-#*- #"#LQSHONPcaD\_`\RR?UNPNRYMOa[TYaGUYZX\F%DYWWXSK^\_a_G_c_\T>@919>2GHSY]N_Y][.'\^VSYPAMOwmVPJEC@=;::BMeccigg*$*!!#&%$+-'"
++
+)"**"&"%HWQFQRUedCTNNQOR@]]_\Y]KPe`Y[cO^gd]bJ
+;_^``YMa_bfcH`ecapZfmmobJXNFAE1EBAF2
+>@C?GE3GIgsbOKFCB>;;;CJasurod5')
+"
+*+/
+#*!$*'*'
+ !Dg[SfghjkK]XUXT]DZX_^^bML[[`cfRVcd_iR!@kikkbRea[dgKbefihP^hkql[vvxvx]rtxtG%[tulklVmffreMGDB@>;:>KLYpop{]23/'"%' (5-+%'%'$$%!>reZonid^CZaZ]Y[EZ\dbcb`Vhbjml]P\Z\cT
+;nlmnmZrpgrlLhvvsr_euojj[glqruXosvtd#P~oultXomjojZOB@>;>@?\QYkhtsB4(?$%
+(
+
+$ScfF%#$
+"*%! )hYRhccaaEWZaXc`KbccdemmYqglkrbVknnoa 8{xyrqWuu}dqZency__ywsudamjiu]cnlpd*Cmploo[hzxxu\PCCGEC<KdSfrwtpB5.N%$
+"
+"<mnq\#  ./&(##&bZMab]cm@LS_]a[HX]`mirt[|rvqwaYpnqjh5nlhmdLthnvtF"&?zidy}|i\smfoYSlknY)EsrgkzYltllhg]MD>=DH\mUjfkej:32M!""'Ylqiuh'J8+5/
+$"*`c]bajM\FORT`faL\_fabeePskrtzjYvncXj)ibedmJvt_.& Arm~|u}me|sp|qa}tu22poqk{`npfljehb[PLXcddKa`cZcC*E3&!"
+,W[U[[K+IEEXG"   (?:9;DWLP2)GB'J\NFVVWY[YL`RHAFJG[hmnm',lsthnZvI!
+ !EL_knhbUkggmlVps}?'zx|hdXiggc^]UPJIOTRMAFHD>A=DIJ"#&---)*+1003/:5
+
+! $$
+#"QT@=FAFQGVMVYP_;)
+  ""8Lf`,(cf^mfKfR%:D
+!0)8YilbbOfhigfRgieoC%f<74.B@=89801/2532,.14,/011..//"!
+'$
+!!!%&
+
+#!
+"!  RYEJXSA-BOTLWM'
+ "! %
+ 
+8X:&>KXWS[R#:H4
+$!6&EbdfRK_[abfP_dbfJ%E1K;."/&()$()%!  $!$ #
+
+$ '
+' 
+$$"!
+"%#
+! 
+! ! 
+!!LV][\HOA
+HLMEN $%"!$ 
+%
+"%P6%40J`N
+$2KD$
+
+!"13]]dJd]^\_J\][`Q$0
+!8&  
+ 
+#!"!
+
+"#"
+$'!'!(""&# #$ 
+#
+" 
+ !&
+  
+ ")
+
+!
+  VCQG:BDB1
+
+-GLGK_
+
+"! )""
+!#33#,
+#,>
+
+(%!#(#
+(4NgJ\\]Z`FVZVZV*(
+0:'""%'$%
+
+$$%$&&"*%+& %#$'&'$""$#""% "$
+
+" !
+!$
+
+?+
+!"7L89*%=Gx`
+
+
+ !""# $
+'1 
+
+8(
+)!#
+ -
+
+
+%+#=@Y\TY\DJROYW.*
+Jb/#$'# #" %$
+$(%(%"(.$( "$%"$"  !&' '
+&C=.8/1<9"3LFD(!"%+778+
+)4.!!
+" #!$3-)HJA8
+di %-#+'
+%+0%XR@PULUXVYW/,FZ4$
+ $""
+#
+!,%'),'108;I<;DBMG\:H>2("0,%Wo\dd\ZQ%2LGO& 2)/<?(2#,&,)! *dZ,1-!-5\J'('2&
+
+
+
++078;9GTDUEM??T<%De?"`]24Q,(&$:ZYXT]S^ZuUYA%*hne}c5:5:6:6
+8UZL3(+*4-=$IhipB<-!JnSlh36',3;@)
+%C6do"73+.#
+&,OD
+
+C{c/.
+*.
+#.#05O/5HNQ1/A,
+CZ7 ;4 , $#Di^cd@W}k#)!.%EO6:3#""$!LEgrX[QRMUWY^'Kea^Qa90,DFME>C0! "+;ICD23-9o#%
+)."%'
+#F\I2
+l)",1-&$"'!
+0,)&EKXKEeK&[¥P = ,)(%+(
+.;GE=>Zg1.=@D@X_UaVeaakerfj^UKP`ffevyj,Zwql/_:)C4'95,#
+#/.5KB,84+k&# !'J^hniLGU8#9@0
+
+13:4'!%"HKLA;-(#47-) 1@-)'!&%
+"%(&Wpqw}}bnnyxt|}uwu|~~xn}ysp}I[aLPL%4CPc&)/-<cD!""#
+-\F3%( D|$A57.,-#$CSMT@Em`@kc"& 
+*1032
+
+!5)&'-,.$)9;,$&$)S>(,&:>G(18P[_Qhmimkwrz~yritz|zwz{omsjnN-IH0Cjukrk[OE<|G-UN
+( '# *2.+%
+G{j>Uyj8/,%(>9;N[F+%47')-*!)10.'",-&"!!"-B&
+""
+(f;0(=jfE&6B8%
+XhpkjlgailmlrphnptxsomusuO(8R[\fah{~M-!#^
+)
+$A>2*
+!'$*=H*Cz\<3',"
+$47L<1(
+#*
+%! $#"0/($'')$"#*A1#*6*#.5(*'6C+.',G6Co49kwswvqrmqps~twyzukrnmlcZQICBJZ_`bZROGE
+,;<]V@&.3'
+##&3\V76
+'"#$;/!)6
+  
+$
+
+
+#$0/)&'$$
+
+## 4>+;;()
+
+
+ 
+
+!,->303!B:!%718IIABJLEBDL6320/*-*&*104.00%%##'"! +
+N~mc?$
+"%
+&!GJ===&"2'  
+RP3$
+!=-(! !$#!)'(% %+)'.44+-!)"38.1$"+W$/H4.0'%%""#&4E&*936:35)2+&+)(,-%--,)/%**.(',)'<,QuaA-"#,,*"##
+
+
+$
+
+%0('';5
+! :o>&## &78%!
+
+#
+'%&&!##$&#+&''-'$.##+'#2J'-]OQJ:/-)-*")!%#*#
+,
+')&+,++.+#&&!%/)! (&%)%#'6F;I?$,)"&%($
+
+)& '!$',$#$8T3,&()
+)%!!$&!&'$
+#!!$XP'
+"%!"
+
+ $!'
+";A:'28E?4((-'"3,---*5)%'.'),%'(##!" !*&$"#%%$40/&"65-*"*1,"
+!
+%
++*%"'"$)
+$
+ /B<."#""&
+
+'93)$
+ ( 
+
+
+H@
+" #
+
+
+#" "#0!(-%,1)%"(!!dD(+"#"%
+ 
+
+#""
+!#((&'*".
+
+**-,.'&%#
+&*'#-$
+!#""" "
+#'!(,0(#
+
+#&#4590!*%)
+ 
+!"  )+$&$"#!' 
+# %2#(,!
+ (=D+02B=241:4?E>B^_Zbg```U4,
+%$$!(&-'#)$
+"
+
+
+
+
+!!! !%)#"
+# 
+
+! 
+'+(
+
+ !
+ '.#&0+,)'
+ $
+ $
+!####&! %#")&+.%%$
+ 
+!$%9D4%Ix[WN#"/'-5AFVljvwxxmxrjX>+"
+ %()%"
+
+
+
+
+
+ "# 
+ 
+
+ !!"&($
+
+ !
+$+)
+#
+2
+&&$!$! 
+ 
+ 
+
+"$#
+ "$!#'##  '
+"
+%$)0"!
+.R;[kQ.#"")"+%,+0:N`ggwyxsk`VN &$(%
+
+
+
+
+
+ 
+!
+
+
+
+
+
+
+"! 
+ 
+ &,-0
+g0(" &()##"
+
+
+! 
+"$#!#%
+!
+ 
+&"+*$!"!#!3KUC7( "&!,(#$  $)2AXjsty#%"#!
+
+
+
+
+
+
+
+
+"
+
+ 
+ !!!  ! ! 
+
+!&+%""7d%
+
+ # #$
+
+ 
+
+
+
+!"%)%!!
+
+
+
+%
+ $
+! )$JC&65=GA(&!*"#$"&%$#%)2>IXa&#"
+
+
+!
+
+
+
+
+
+
+
+
+!
+
+
+#%)*(# &# 
+ !  %  
+
+
+&%!
+
+"$!"$$('   
+
+!"
+-
+J
+$  
+1[(-0'+-$N5*-Dub?%#&)$#&%$!$$###")%#
+
+
+
+
+
+
+
+
+! 
+
+
+
+""""$$##'%#  
+
+!
+
+
+.2+"
+
+ 
+
+$&%
+
+
+
+
+
+"
+.!/i.$(.2$'  &("-2#T{k^E)!!
+#'"#&'%"$&&+%#
+
+
+
+
+
+
+ !    !
+%&'#""
+
+
+
+
+"$! 
+(154/$!,%(!
+
+&'%
+i6,rvD"
+
+
+ 
+'
+212`gZZA=>,##
+$"!$''$!&!
+
+" 
+
+,6)
+
+
+
+
+
+ 
+"! &#
+#'%!! 
+
+
+" "
+
+
+
+
+*.25586*! $$
+%!
+!!
+$
+ #
+
+?:O`B2%#
+"#&
+"
+
++8@da``ilf]B(
+
+
+#"!"&UTTTVZ]_q}ÑÍÊÀŸ»Œ·µŽÂœÀº
+yvrokntwy|¢³µ¶žž··¹¹¹·¶ž¶±ªn^ZYYXWY^r    ¡€€£¢£€¥¥¥¥¥¥ŠŠª¯¡€šVUTUX[^_sÓÍÊ¿œº»·¶µÂŒ¿º
+xuspkmpuyzš±¶¶¶¶·ž¹ž·¶žžµ¯¢o`[ZZYY[`u¡¡¡¢¢¢¡¡£€ŠŠ¥¥¥ŠŠŠŠ§§§ššª¯¢€šXVUVY]_`t¡ÔÍÉÁŒººž¶·ÃŒ¿º
+yvtqkllrxz|±µµµ·ž¹¹¹·¶·ž·²¥pa^\ZZY[aw  £€€£¥¥€€¢¡ €¥¥Š¥¥¥ŠŠŠ§§§§ššª°£¢§XVVWY]_ct~£ÕÍÉÀŸŒ»¹·¹Ä¿Á¹|xtrlliouyz¬ŽŽµ¶žžž¹··¶ž·²šoa^[Z\Y[aw  ¡¥€€€ŠŠŠ¥ŠŠŠ¥€£¡  ¡¥Ššš§§§§©©©©©©©©­±€£šWWWWY[`es|¥ÔÍÈÀœ¿»º·»ÅÂÄ·~ytqlmjlotx{°²µµµµ¶·ž¹·¹ž³­ pa]ZZ\[]by ¢€¥¥¥£©©©šš§§§§§§§Š¥€£¡¡¡ ¡¡¢£§ª®¯­«¬­®®®®­­­­°³¥¥©VVWXY[`fu{šÕÌÇÀŒ¿Œº¶ŒÅÃÆ¶ztqmnlllqx{ª±·¶Žµ¶¶žº·º¹Ž²Š
+pb]ZY[^_d{¡¢££€Šš©©šŠ¬­­­«ª««ªª«ªª©šš€€€¥¥ŠŠ§ª®³Ž²°°²²²±±°°¯¯²¶©¡©¬WVWXXZ`hv}«ÔËÇÁŒÀŒ»·œÅÃÆž{usonlmkox|¬¶¶Ž¶ž··¹¶ºº¶µªrc_\Z[_`f~¥§§Ššª¬­­­«°±±±°°°°¯¯°°¯®®­§šš©ª«¬­¬°ŽµŽ³³ŽŽŽ³³²²±±Ž¹¯€€š®°WVVXY\bhw}«ÕÌÇÂœÂœœžŸÅÃÅº|wvpokmjluz|¥³Ž³¶¹žž»·ŒŒ··«tea]Z[_bhª¬¬«¬­¯±²²±³ŽŽŽŽµŽŽ³³ŽŽ³²±±®®­­®¯°±¯±Ž¶µŽŽµ¶¶¶µµŽŽŽ¶œµ«ª­²ŽWXXXZ\agy{¯ÓÎÊÀÁÃÀœº¿ÅÄÄžzvsqjkmorw}¬²²µ¹ž·¹º»¹¶Ž­tea_\\_bh¢®°¯¯°°²³ŽµŽŽµµ¶¶¶¶¶ŽµµµµµŽŽ²²±°°°°±°²µ¶µµµ¶¶¶¶¶¶¶µµºº·±®±µžYYYY[]`hz|±ÓÏÊÁÄÅÂŸ»ÀÆÅÅ·{xusmlllot{£®±³·º¶¹¹º·µŽ¬sda_]]`cj
+£¯±±±±²³ŽŽµµŽµµµ¶¶¶¶Žµ¶¶¶¶µ³³³²±±±²²²³µ¶····¶¶¶¶¶¶¶¶»»·²°ŽžºWYXY[\`h{ŽÓÏÉÂÄÅÂŸ»ÀÆÅÅµ|ywvpnkjkpw|ª°±µº·¹¹ºž¶µ® rca`^^`dl¥°²²³³³ŽŽŽŽŽµµµµ¶¶¶¶Žµ¶··¶µµµŽŽ³³ŽŽŽ¶µµ·¹º¹ž········Œ»žŽ³¶ºŒWXXY[\`h|¶ÓÐÈÂÂÅÂŸ»ÀÆÅÅŽ|ywvqoljjnsw~
+£¯³Ž·žºº»¹··°rcca^^`dm§²³³ŽŽŽ³³³³³ŽŽµµµ¶¶¶µµ¶¶¶¶¶µµŽŽŽŽŽŽµ¶µµ¶ž¹¹ž···žžžžžº»ºµ³¶»ŸZ[Y[]^ci{žÒÐÊÃÀÅÂ¿»ÀÆÅÆŽ{yvvqpnmmnqs{¬µ·¶¶¹¹»ž·¶¯recb^]adlšŽ³±³³³³³³³³±²²²³³ŽŽŽ³³³³ŽŽµµµŽŽŽŽŽµµµµ¶·žž¹žž¹¹¹¹¹¹ºœœžŽ·œÀZZYY[^cjyºÓÒÌÆÂÅÁŸ»ÀÆÅÅŽ{xvuqqponnnox€³¶µ¶¹¹ºž¶µ®sfdb_^`ckšŽ³°²²³³³ŽŽŽ²±±±²²²²³³²²²³Žµ¶¶¶µµµµµµ¶¶··ž¹¹žžž¹¹¹¹¹ºŸ¿ºµ·œÂXZXXZ\aizœÓÑÊÆÁÄÀŸ»ÁÇÅÅ³{xvvsrponmmmu}«²¶¶¹º»¹¶Ž¬sfdb``_bj§³²±²²³³³³³³²²²²³³³³³³²²²³Žµ··¶¶¶µµµµ¶···ž¹¹·žžž¹¹¹¹»¿¿º¶·œÁYZXY[\ai|ÀÔÐÉÆÁÅÂÀœÃÉÇÇ²{xwwuspnmlllox{€¯¹¶¹º»žµ²ªsecb`a^bk§²²±±±²²²²²²±±±²²²²²±±±±±²²²··¶¶¶µµŽµ¶¶·žžžž··žžž¹¹¹Œ¿¿º¶žŒÀYZYX\[ci|Á×ÑÌÈÃÃÃÁ¿ÄËÇÇ±~{xuvutrpnmlknw~¬¶µ»·ž¶Žµ©rfddcb^el§°³±±±±±±±±²±±²²±±±±°±±°±²³³¶ºµŽ¶µµ²¶µµ¶··¶·ž··žž·ž¹»œŸ»¶¶º¿YZZY]\bj{ÃÙÐËÈÄÃÂÀŸÄÊÇÇ°}{xuvuusqonllnsy
+£°Žžµž·³Žªsfdddc_fn§¯²°³²²²²²²³±²±±°¯¯¯³³±³²³²³³³µ²²²°³µžžŽŽ¶¶µ¶µ¶·ž···ŒœŒ·³µ»À\\[[]_cj}ÅÙÏÊÈÄÃÁÀŸÅÊÈÈ°}{xvwvutsqomllmrz¥µž·»¹ŽŽ¬sgeeddciq§®±°²²²²²²³³³³³³²±²²°¯­²¯±¯±¶ŽŽŽ²°¯±®°²²³¶žžž··ž¹¹¹¹¹œŒ¶±³ž»[[[\\`bl|ÆÚÏËÉÄÃÁÂÀÈËÉÊ°}zwuvvvutrpnmnlpx~±¶¶ž¶ŽŽ­sgfffeekq§®±°²³³³³³ŽŽ³±²°°°°±®®®®­¯°±³³®²±­±¬²¯°¶ž¶µ¹·¶¶¶¶·žž¶º»Ž°²·ºZ[Z[[bbm~ÅØÐÌÊÅÃÁÄÂËËÊÊ°}zwtvwwvuspnmgfhms{
+š°ŽŽ²Žµ­sgffgfhlqš¯±°ŽŽµ¶····¶¶Ž³±°°°®®®ª«­°¯±°±°­­¯­°««±µŽŽ·¶¶¶¶¶¶··¹»ž°ª­³ž[\Z][ddoÆØÑÍËÅÄÀÅÃÍËÊË°}zvtvxwwusqonkiilrz¡¬Ž²°³³¬shffffkns«±³±ŽŽµ¶ž¹¹¹º»¹·µŽ³³¯°¯­®°²±µ¯·±©¬©®¬¬ªª­²ŽŽ³µ¶··ž¶µ³¶µ²®±µº]\\^[feqÉÚÐÌÊÄÆÁÅÂÍÊÊË°}zvtvyyxvtrpokihims}£°±®°°¬theefelpw±¶ž··žº»ŒŒŒŒ»»º¹ž·¶¶ŽŽ®µ±µ±³±š©°®­ŽµŒŸœ¶³³Ž³³ŽŽµ·¹·µ¹ŒŸÃÅÄÆÇ__^`\hdsÌÝÑÌËÅÈÂÅÂÍÉËÍ¯}zvtvzyxwusqplhghjnxª°®¯¯­thededkr{·ŒŸœŸ¿ÁÂÃÃÃÂÂÁÁ¿œ»º¹¶±¥µ¬±€ªšŠ·ÀºÐÇÇÉÉÅŒ¶¶¹»¹··»¿¿Œ»·Žµµ°­«Z\ee_ehzÎÛÓÌÌÈÈÃÅÃÎÉËÊ­yutx{yzyvutqmifeglu|¢­±¯«ªthdegejq}€À¿ÅÄÆÆÈÈÉÉÉÉËÅÆÉÆÂÁ¹»Ãm­ª £¡Æ°Žºµž¹œÁÀœœ»¶²²©­®«§§§Š€¢rk\`egm ÑÜÖÌÊÇÉÅÆÃÍÉÌÍ­~yuuy{zzzwuusnkgffjry|
+š­­ªŠujfgigmtªÆÇÌÊÊÊÌÌÍÍÍÍÈËÇÉŸÁÇÉÃÄÇvz¢|ªºœ·ŒŒž¹º·µŽšŠ­š§€¡Š£¢¢¡€«®ickflx¢ÐÚÖÎÊÊÉÆÆÄÌÉÌÎ­~yuuz{z{{wvvtolhfegmsy{§©š£ukghjiqx±ËÍÑÏÏÏÏÐÐÑÐÐÐÐÏÇŠ°»ÄÁŸqBie`JÖÁ·¹Ž­©¥¡šŽ²­ŠŠ£€¢§¬®°²µµmxeimgs
+¥ÑØ×ÏËÌÉÆÅÃËÉËÌ­~xuuz}z{{xvvtqnkhggkpxy¡§¥£ulhiklt|·ÍÏÑÐÐÑÒÓÔÓÒÒÓËÒÅmr²¿ÃŒ£]O[ziNTYÃ¯ª£Šªª¯¹ŸÈ²¡«žµ¹³±«vhagcjlowšÒØ×ÏËÌÉÇÅÄÊÊÊÊ®~xtv{~zyzywvtsqmkiilptyz
+€¢€unkjmov~œÍÐÐÐÑÒÔÕÖÕÕÔÎÔ©p`btv²»ÔÁhLQaXXUMR¥Œž·œÅÅÄÈµ¶¯³µ©zmba`\Z\ufd`itŠÐÙÖÍÊÉÊÈÅÅÊËÊÉ®}wtv|~yxyyxvtrqnkjkorpvw¡¥
+tnkkmqv~ÁÍÑÐÑÒÓÕÖÖÖÕÕÕÊztab\cbŒ±Ã«ZVNLDA69X»ºµ±­¥vwybYWSZXX[][XWéãÕŸuy€ÐØÓËËÊËËÆÆÉËÊÊ­}wuw~~xxzyxwuqpmkjlquttw~€rmkknsv~ÃÍÒÐÑÓÔÔÕÖÖÖÕÔÁmq]YVSGQŒŽ»C=FGRWF]upmhdjgmmZ_f\`aZNKQQKÙÞÛæéâÎœ€ÒÚÏÊÍÌÌÌÇÆÈÊÊË­}wux}wxzyxxwrqnlkntwzrv~~¡rnmlpuyÅÎÔÑÑÕÕÔÔÕÖ××Ø±ik`OLK;GW¶¹·®aEb|MUnnjeeefjcjk`QSRLUSLEHRURÕÚÖÒ×ÝåãâÏÕÓÐÒÇÊÊÌÆÆÈÈÉËª|uvz}|wvxyywvrplknruwyuvyzqonnquz~ÆÏÓÒÓÕÕÕÕÕÕÕÖÕ§ic[bVI;LCtTRjm[acehhegf`a_jecXABOMPTVVUVXÚÙÔÑÓÔ×ØÕØàÙÓÍÃÏÉËÆÅËÊÉÍ©{uv{zuuwyxwuqnkjnsvxywvvvz~pmmmquz~ ÆÏÓÒÓÒÓÓÔÔÔÔÔÒzb`bid?:QKOnrxp_^^a_[Y]abbfeaaaeff_EHTPOMLIDAAÝ×ÓÔÓÒÐÓÖØ×ÖÛÚÍËÇËÉÈÎÍÊÎ§~zuw{~yttwyxwvrojjosvxvxvuvx~qmmmqvz¡ÇÏÓÑÓÑÒÓÔÔÔÓÓËveilqlH7MSH`mkh[bZY\YYRSSW_cbaigllgEAJ?==>==<<ÙÖÔÕÓÕÐÓÓÐÒ×ØÜÜÑÆÉÏÏÏÏÎÏ§xty}|wssvxxwurokknruxuywuyzqnlmquz¡ÇÏÒÑÑÑÒÓÔÔÓÒÑœpdjiqgK2KXS^tniS]]TW_]TQNRZbeemlnroI2;;99;>?@AÌÖÕÒÏÔÏÑÑÐÓ×ÓÕÜÙÇÉ×ØÎÐÒÐŠvs{~yuqruwvutomjknqv{vywvyz|pmlmptz¡ÆÎÒÐÏÐÑÒÓÓÑÏÎ³nY_hkjK3HZZ[pneXYWSVaX[TPSY_dghnnwwV.48998889;œÙØÐÌÓÐÐÐÒÏÑÖÔÕÙÍÍÜÛÎÑÒÐ¥
+~vt}yursvwwutomkknpv{xywwzz~ypnmnrvz¢ÆÍÑÏÏÐÑÓÓÓÑÏÍ«xpSQnblP9BX_`kocbXRZWZY[URWZ_ehipnuyb3899;<<;<>€ÖØÑÎÒÑÐÍÑÐÏÒÑÑØÒÓÝØÒÔÑÒŠ}xv}}xvstwwwvuoljkmotyzyxyyz~xpoopsvy¥ÇÍÐÎÏÑÒÓÔÓÒÐÎseREn[cQ9AP^[hsgg]R[VT\[VY^`cikkmjimb:9:99;<;:9ÍÕÒÏÐÏÎÐÊÎÏÍÒÓÐÖØÛÓÔÖÎÓš|yx{zxursvvutsnkikmpuz}zzzxx|wpooortx§ÉÌÎÎÐÐÑÒÓÒÑÏÏvXS?m^_X6?C_YjqkhfRQVTX\VZ_^`fhgbcY\Z=6<::>BB>;ŽÔÑÌÍÏËËËÊÊËÌÍÎÖÝ×ÑÖÓÌÐª}w{yxusqsutrrnkjlnqv|{{{wvyzz~zqmmmqpvªÇËÏÎÐÐÑÒÓÒÐÎÎq^W:aYUVD;<QUcoml`UNNVSVUUWZWX[VPRMTZ:3=6;=?=;<}¡ÐÒÐÐÏÍËÊÊÊÊËËÌÕÙÕÐÓÏÌÑ«{~|wussvxwuupmklorw}{{zxwyyx~yplkkoov«ÇËÏÎÏÏÐÑÒÒÐÎÌk[S=VWRPH4>CTZfhgcVMMVSPTW[_\WR`Y^bjkG8<>A<89<<}ÇÕÒÏÍÍÊÉÉÊÊËÌÍÐØ×ÐÎÏÐÑž~vyxwyyvstsplmnqu{{{zxxyxw}xnjiimnu­ÈÌÎÍÍÍÏÐÑÑÏÌËiXR?PVNRM4;=JRb`Z`XMLTRW\\Y\acaejrsvxT6887867<?~¶ÖÐËËÌËËÊÊÊÊÌÌÏÔ×ÔÐÏÑÐÉµ¢
+z|yy{|ywyuroopqtxzzzyyzxv|xmkhilnt®ÉÍÍÍÍÍÎÏÏÏÎÌË
+lW[>NSLNK?9H8F\\T^_PQTUVXY\hrsopvyxvxV,:=>M\jsv£ÓÎËÍÍÍÌËÉÈÈÉÉÍËÐÕÑËÍÒÏÆ¹« ~}{yxvtrrtuwy{{{{{{zx|xmniklns°ÉÎÌÍÍÎÎÎÍÍÌÌÌhWaCFOMPO@1L9C[a^giSWXZZ\\^cimpyzyysvkVk{gÌÎÍÍÌÊÉÈÇÇÇÈÉÇÊÎÍËÌÐÏÏÎËÀ¶Š~zustsstvwyzzz{{{{{z{xmoiklos±ÉÏËÍÍÍÍÌÌËËËÌ^X^O=RUGbZEDDKlimrpYZ\^\agig_[\impqoyrb_f\MBMMU»ÌÏÊÈÅÅÅÅÅÆÆÆÃÌÎÉÇËÎËÐÑÔÌÆ¹­¢
+~{xrrrsuwyyzzzzzz{{|xlohkkos²ÉÏÊÍÌÌËËËÊÊÊÊ_`YX;Z[HijWN_[hqkpuj]_bgcaekh`^[^bgr}\3-.03;PYt}¬ÉÏÇÆÅÅÅÅÅÄÂÁÆÇÊÎÊÄÄËÔÑÕÐÏÇŒŽ£
+}zutssuwyyzzzzyyz||yknfijot³ÉÏÉÌÌÊÊÊÊÊÊÉÉ¬jkXY?_[Hi{YEVcrubew~bbhcimpnieeedimw~[93139GcdzËÌÃÆÁÁÄÀÆÄÅÂÄÇÅÎÉÀœÅÌÎÑÓÒÑÊÂ°¢}zuutrwxyzyzyxzzz||zjngilmsµÈÎËÎËÊÊÊÉÉÈÉÉºvmb^K[bVQt`EQjkqgj}}{v`oxyumjluoy
+V=<4A?Heit~ÂËÃÁÄÃÃÃÄÂÄÈÄÅÃÌÍÆ»œŸÆÍÒÑÏËÇ¹°š zwxttsvuwyzyy{{z|}zjnfhkms·ÉÍÊÍËÉÉÉÉÈÈÉÉÃ~ziWc_h]SeaGAWxomoy}wvvsu~}V@8789Rhpw~¶ËÅÀ£§¬²·¹º·ÀÂÀÄËÎÅÄÀÂÆÈÉÌËÉ¿Œž¯¡xxwvvvxywyxxzzz{}zjlfgjmsžÊÌÉÌÊÊÊÈÈÈÈÈÈÉ{uXihbVRPWJBJssorz{xy
+€§p?=F?6Xp~~©ÊÅÀei{š°Ž¶œŸœÂÉÀŸÇÇÄÁÂÄÆÆ¿ÀŸ¶¬€{wxtvrvtvyyxzzz{~ykkfgkmsžËËÉËÊÊÊÉÉÈÈÈÈÍtcbm^\^QVTNOmrp|z{ ª­º¿ÆÆÊÍHE=;8R`~r}ÃÁÁhOYY`[iw²ÁÉÂÄÃÇÊÈÂ¿¿Àœœœº·Ž©}tzuwwzzy{||}~xljfgknsžÌËËÌÊËËËÊÊÊÉÈÐ¬vjakb\\QUVP^|x{qÁÊÓÏÅÂÊÌÃÆNHDI;Rgl}~~º»Ã{Ufdldfd[_k²ŸÂÇÁÅÉÉÅÀŒ¹¶Ž¶¹»»Žªz}r{vvzywyzz|~vmifgjnsžÍËÌÌÊÌÌÌËËÊÉÉËÅw{l]gb[[Z[_auqklriqu©ÒÉÌÎÐËÊËÅÏLSPN>FM`d~±ºÃWnx{qmplb¢µÁÃÇÃÁÃÅÃŸ¹²¯±µ¶µŽ²š|{|twvtuwwy~umgffims¹ÎÊÌÌËÌÌÌËËËËËÂÓuybde^_c`ejrund]cjowyz~¶ÎÉÊÍÊÏËÍÊÒš\X`[HGWhh«¹Á^¯±
+hw±ÅÁÃÂÁÁÃÃÁ¿ž³³³¯¬¯³¶š ||usvursuvw~ungfegks»ÏÊÌËËËËËËËËËËÂÑ¡uucrddhhklijnrvy~}°ÊÏÌÍÌÌÍÅÎÏÎÂdcZULZcP{| ¹»€gØÐ¶­ÃÄ¡stªÁÁÅÄÂÁÁÀœ»ž±²²©£š¯¬ªÈ­{ypntsuz{ukeeeglrŒÍÊÍËËÊÊÊÊÊËËÌÉÃžmµ£morqqqrtwxx}ª±ÁÃÐËÐËÍÒÑÊÌÌÉÓÏ¶the[_WTE
+²¯€eØÔµ¯ÕÚ²t~¥¿ºÁÁÀÂÁ¿»žžŽŽ°©Š¥¢¢µä·}urntsrztjeddfkpŒÌÊÌÉÊÉÉÉÉÉÉÊÊÅÈÈv{}©¶ŸÅÉËËÎËÎÊÑÍÍÍÍÍÐÒÎÍÏËšvkf_\WC}}©²©c~£©ÁŸ€p{¶œœœŸ¿¿Œ¶²³µŽ®Š€€¢££êÅxytopqwridddgkoœËÊÌÉÊÈÈÈÉÉÉÉÉÉÃÊ²~~}
+€¯žÂÊÌÎÍËÉËÎÏÍÎËËÎÍÑÒÍÎÌÎÑÌÊÐÉomm][I€¢¥\fxfq³·œœŒœŒ¹³¯°¯®ª£¡€Šª¢lgÉä¯vttnvvpgccdfloŒÈÊÊÈÉÆÇÈÈÉÉÉÉÊÂÆÍ­£¡ª¹ÀÇÌËÉÈÈÅÉËÍÎÎÎÍÍÒËÎÌËÎÐÑÒÌËÑÐËÌËÄvxk^O_r{­EITZ\^jeict°³ŸœŒ»º·²°±«¥¢¡£¥£§š¡gVšçÎ©vurwpe_`bejm¹ÃÇÇÅÆÄÄÅÆÇÇÇÈÄÉÇÍÊÃÃÊÉËÌÎÌËËËÍÎÍÌÌÎÏÏÍÑÈÍÌÎÍÌÎÑÏÍÎÏÍÌÇØÅwpb?Qn¢³µvGOQTTVTOQGc«®ŸœŒ»º·Ž±¬ªŠ €Š¢£lTq¬Í·
+{zxob]_adilž¿ÅÃÂÄÃÃÄÅÆÆÇÇÃÊÅÆÆÆÆÊÌËÊÊÌËÊÊÈÊÌÏÐÐÏÎÌÏÊÌÊÎÎÐÎÍÎÏÎÍÍÍ×ËÐÈ£ddKKFVr
+^`p_]]`UXXL^vš¶Ÿœº¹¶Ž±°€ŠŠ¡£¢£wWKx¶ž|}rd]`bdihžŒÂ¿¿ÂÃÃÃÄÄÅÅÅÇÆÆÉÈÊÊÌÊËÍÍÏÎÍÌÎÏÐÐÑÐÐÐÍÑÑÌÈÊÉÎÏÎÏÑÓÒÐÎÒÎÊÑÇ©`LJCABHV`sŠÑŸµ©€ykn¬Žœºžµ±¯®®€ o_B£zi``bcffž»À»ŒÀÂÂÂÂÂÂÃÃÇÄÉÄÈÊÉÊÉÊÌÌÊÊÊÊÎÎÏÏÐÏÐÐËÊÌÈËÏÊÌÇÏÎÌÑÑÏÒÏÊÐÆÄÍŸ±FBAFLPYfhŠÙÑ×ÎËÇÉÌÇŒ³··À¶¹³²¯°¯§§£|KL¡¯ukieaddºŸ¿ÀŸÀÀÂÀ¿ÁÀŸ¿ÆÄÇÄÆÇÉÆÌÌÍÌËÌÌËÍÍÍÎÐÏÍÎËÏÈÏËËËÉÌÍÉÈÉËËÍËÆÀœŸœ¶žCHHC>?L\fÛÑÒÆÅÐÀÃÅÉÅÁŽžŒ²²±š©€«¡vR\® unmbeŒœœœ¿ÄÃÃÀŸŸŸ¿ÁÁÄÈÄÇÅÇÄÈÈËÊÊÉËÈËÍÌÌÍËÊÊÌ¹®§©¯yx§ª«¬¯ª ­¥­¶°ÎÌÌÃÅÁŒŠ¥š­¬©ª©zXQ`ª£tshhœÀÅÄÄÃÃÀ¿œ»Œ¿ŸÃÀÃÂÃÄÀÁÅÅÈÈËÉËÉÈÉÉÊËËÊÈÉ®ÈŸ¶ÃÆÊÐÕÓÑÑÑÓÙÙÞÜÚß¢®ºÃË¬µÄÒÒÒÆŸŠ€€£¢¡Š¬»ž­£~W`]}xqjŒÀÁÅÄÂÅÀÁÀœŒŸŒœŒÁÁÄÍÄ»ŒŸÀÃÂÆÇÈÉÇÈÉÉÆÅÇÂts·áÙáßÚØ×ÖÔÖÑÍÎÉÈÄÀÁz
+ Š³·ŽŸÆÏÀœ®¡®¶º²¿¹Œ È×ÜÁX[KOphŸÄº¿¿¿ÀŒ»Œ¹ºŒ¹¹»ŒµŒµÍÈÌÐÎÕÎÔÔØÙÕÕÙÙ×ØÞÜÕÙlyÅºÈÊÈÅÁœŒœŽ®®§¥NW\\fv€¡ £€«±ÁÍ¹yl­Á­ª£ ÌÏ©kQG5c~w œÃ¿ÅÆÅÇÅÆÆÆÈÊÊËÎÑÍÐËîçêèêâéçææäãææâäèåàãTby{uwqlf
+
+
+
+
+~WRUSUUª¡¥£µÁY*J
+®¥
+QY^XKTD6>4n|±È¹ŸÙåìäççëèèêêééèéìååçéâÊÀÃÅÁ¿ÃÄ¿ÆÅÃÀŸ¹žžºžÇ~DPhcN[da_\]^[OSMRNNI
+
+]QU]MPx«¢Š¡±Œ?->~
+
+a-&9@R°Är-2¬DViwj|¥©³¯¹³»¹»À¿»·²¯³Œµ¶žÂ|P¡§¥©©§§§šŠq=Pd\OX[WY[[YZQWPUOPJ[OUZRY{£¢¢wY[NA;S
+z}x?<+y¡ÖÚÓÚŸ6Njx_DHV_df|{~wSnov{}|yx|yy{xyotc>Lh]W\^`a`[Z^[\V[TVO
+XNQUIP­¡£bD5%$+5AACtz{:A/Ì}YWqVNkxPml^AO`djsz{y
+hTfnu{{z|~xy|}{{|zvsvveJNinWbjgghfccbgefaaY
+vSPTWPkª€ §ª9&*--:/5:=F`rwo
+|¢6DYYQFH?SVXUd_7B5fYTmpwoj|uz|~
+cXVvk[lwvw{{y}y{xqfcZ
+~YMQWSq®šŠ€¥ªn!35:-4036CKJSTcsR{f[X[TTG?KaW{W`š§Ž·ž¶¶º»ž¹œœÀÀŸŸ³{}€š§®«³±³µž»ŸŒº»Œœiierp|qy]~_PJ[Nuª°£Šª2#*&,'-4<DFLW`ÈËÎ«OY|_Q^feUF?DHPy¢rw®ž»ÁÂÃÀŸÁÂ¿ÀÅÄÁœœÁÊœ»ÀÃÂÂÇÄÆÈÇÂÃÆÉÇÆÈÊÉ[|ŠNiISTMW±«€ª€šª€v^acZfF9Mj^liYCNAhd¹²_X^\_ZQEAMs}||{z
+noŽ¹ŸŒŸÀÃÂÂÂÀÁÃÂÄÆÌÇÇÉÅÉÉÇÊÉÉÈËÉÉÇÇÈÌÍÌÌÍŒ­ÀœÄÊÆž¹··¹ºœÀÂÅÇÃÄÇ³RYHJ[PJ¯€©§ ¯§§€ §§XPitÈÏ¹ yHa¶¬o[aO]c\JEVo{tyœÂÄÂÇÌÆÇÆÆÊÊËÍËÅÉÎÎÍËÍÊÉÌÊÊÊÎÌÌÌËÌÎÏÐÎÓÐÎÍÎÉÎÏÊËÈÇÉÈÈÊÈËÍËËÒCYKXV^Sµ²¯²§¢¡©ŠŠ¢¥ŠukÃÚÝÌÆ»Œ£]iH:ZXZIOWSS_xo~ŽŸŸ¿ÄÊÊËÈÇÊÉÇÉËÃÇÌÌÆÉÉÈÈÊÉÈÉÊÈÊËÍËÌÍÍÍÌÍÊÉÈÎÌÉÆÊÌÍÍËÊËÌÈÊÉÈÎC
+
+gNQ`a\
+¹µŽ®¬§€€ªª§¯¥¡wS\{|wuof][Zla/TSZLS`hw{q|š²µžŸÄÊÉÅÃÂÄÅÅÅÄÅÃÃÃÃÃÄÄÄÄÅÅÅÄÅÄÅÆÆÆÇÆÉÇÈÅÉÆÆÅÈÆÃÂÂÂÂÁÇÄÁÆÃÆdCjJQRUU³³Žžžµ²°®ª¥¥ qiaZSJIKNTJNZqky|}t¡©­²ŒÆËÈÃ¿Ÿ¿ÁÃŸŸ¿À¿¿ÀÀÀÀÁÁÁÀÀÁÁÂÂÂÂÃÃÃÃÁÁÁÄÁÁÀÁ¿ŸœŸ¿Ÿœœ¿ÀÃÁŽSF}yz
+¥¥µÀžžž¹·µ²¯¬«®¡
+{vson~
+
+Š¬®²»ÈÈÆÂ¿Ÿ¿ÂÄŸŸŸŸŒŒŒŒŒŒŒŒŒœœœŸ¿Ÿ¿¿¿¿Ÿœ»œŒÀ¿ÁÀÁÀÀÀÀÀ¿œŸ»»»ÀFM|||£·«¯×ÐÎÈÄÅÃÁÀŒ·°­®š§
+ ¡š­¯¯±žÁÂÁÀŸŸŸŸŸŒŒ»ºž·¶¶¹¹¹¹¹žžž»»ŒŒŒŒ»œ»»œŒŸ»Ÿ¿œŒŒ»»»¹·žµ»»Á~?K ¥šªª±§£ÔÎËÅÆÃÉÈÈÅŒ²®®­¥¢¢¡ £ª­¬«®³žº»»»ºžµŽ¹ž·µŽ³³³¶µ¶µµŽŽŽ¶ž¹¹···¹¹¹Œž¶±Žµ³²³³ŽŽ³°·¯°±·gBB¢Šª­­Žš¡ÕÎÇÂÇÅÅÄÃÀ¹²°±²§Š§§¡¢¢®±²®§š¥§­³Ž°¯²¶·²²²²±°¯®®­¬©šŠ¥¥¥¥¥€€£€€¥šš¥¡¡££Š¢   N??£¥£ª²¥ÒÑÌÆÃ¿ÈÅÁ»¶²°°©¢¡¢§­¬ª¬­©«Š¢¡§·ÂÁœµ¬«¢ ¡£¡ ¡
+
+
+
+~}~}~|y{vrz]J@¡¢£€°«ÏÏÉÃÃÅÂÀ¿»·²¯¬¥£¢«±µ·¹··®š~y|®ºÂŸµª~|ywvuussttssrruvwvsrstwvxuuqtsrrqrrspolnjkjhgs¢¢€£ ®¬ÍËÆÄÃÀÂŸ»¹µ°¬«š¢šµžŒœ¹žŽ­š¡yvzŠ±²µ¬{soltpnprsuwvvwwwutstsqpmlkkmmmmmlmlijklllklnnonnmmmnmlmmomljigfghfb¥¢§«¬¬·ÍÉÃÁÂŸÁŸ»·²­©§š€¢€š®¶ŒœÁÁº¯«¥} «²³°®€zlc_]^ZXZ]_bedddddcdcdddddfgheddddccceffeeffgfffffffeedcceffffgecbda^©®¬Žµ³Ÿ³hÍÉÆÃÅ¿žº¹µ°¯²µ²³ž¿ÃÁœº¶Ž¯š¥¥ 
+±²ª«·ŸŒ·µšš€~zwutuxqpmjhfdddcbabcdeddddcbbbca`aabbbbbbbccddcaa`abbb`bb`]^^^ŽœŒŒ·œµ\ËÉÈÁÁž¿Ÿ»··ŒÄÈÌÈÃœ¶®§£ªŠ£¢¡
+¡²Ÿ¹Ž¶¿ÂŸŒ»¹º¹µ²±¯««§¡~yvtswuurpmkjffggggfffeefffec_^]]^_`ac`___`a``ab`_^_`ŠeaÍÊÉŸÀœ¿ÀÄËÒÖÓÏÂ»°Š¡¥¢€§¢¡¯³±¥š°·¶³²²¬«§£¡€§©§¥£~||}~}|zvsqjjjkklllmlkmonkhdcb``abd_]]^__``aa`_^_``]gf¬Q_ÈÄÅŸÆËÓÖÙÚÔÈŸž¹¶®Š ¡£¢
+~
+
+}zxwwuvxyxvtroooppqqroooqrqolhgfeeffgfghghhghfeeddeefes°¡Q^eÊÈÏÎÖÙÙÕÓÍÁ·µžº·±ªŠ££¢¬°©xjfffbbdhgbchjljhfgjlmhknqsvxy~{wtqprqttuvwwvvstuuvvvwuuuuwwwvxxyyyyyxyyywwvvutttrrqqrwª«^MafÄÅÑÑÒÍÈÃÃÆÅœž·º·±«£
+š¶šh]SPRUUT[[_`_aehjknosusrsuuvvwwwwusqqswy|}||}~~}}~~~}}~
+
+~~}zxttt®»¶ _8U[gÄÁÇÇÃÃÍÇÅÆÂ»¹Œœ¹²§~¡j_^`eebbffhjlmptwuy|~
+|aVC5DV`cÄÃÇÅÃÅÇÈÉÉÃœ»œ¶±šxyxz~~
+ £§©šª«­¯²Ž¶¶·¶¶µ¶¶žžŽŽŽŽµ¶¶·žžžž·······¶µ¶·¹žž····ž¹»»»»»»»»»»º¹ºº»»/28<:DW^bÄÅÉÇÆÆÌÊÊÇÄ¿º·« ¢¡ £Š¬¬¬­­­¯°Ž¶·žºœŸœœŸ¿ÀÂÃÄÅÃÃÄÄÅÅÅÅÈÉÉÊËËËËÉÉÉÈÈÈÉÉÈÉÉÇÅÅÆÇÈÇÆÅÅÆÇÈÉÉÉÈÈÇÇÇÇÆÆÆÇÈÈÈ<E9BB?WXaÈÆÇÈÈÇÇÇÈÊÅ»®¥€€š®Žµ¯ª«¥ ¡Š©§šª®±²µ··Ž³±±²³¶žž»ŸÀÂÄÄÃÆÆÆÇÇÇÈÈÇÈÉÊËÌÌÌËËËËËËËËÌÌÌÌÌÌÌÌÍÍÍÌÊÉÉÉÌËÊÉÉÉÊÊÌÌËËÉÈÇÇÌËËËËËËÊ9;=?BEQb_ÌÅÂÆÌÍÎÍÉ¿°§«µÂÂÂÀŒ»Ÿ¿žœœº·ž¹·¶ºœ¿ÀÁÀŸŒºžžž¹»ŸŒŸÂÅÈÊÊÊÎÎÎÏÐÐÑÑÑÑÑÒÒÒÒÒÐÏÎÌËËËËÐÐÒÓÓÔÓÓÔÔÔÔÔÓÒÒÔÔÔÓÓÒÒÒÓÓÓÒÑÐÎÎÓÓÒÑÑÏÍË@:=>EJL]eÉÄÄÌÑÍÍœ®«±¹ÁÇËÊÉÉÈÅÀœœž³³¶·žž¶¹œ¿ÁÂÀ¿ÄÂÂÅÆÇÈÉËËËÊËËËÊËËËÌÍÍÍÎÓÓÓÓÓÔÔÔÑÐÍËÊÉÊÊÌÍÎÐÑÒÒÒÐÐÐÑÒÒÒÑÑÑÑÑÑÐÏÏÎÎÎÎÎÍÌËÍËÉÈÇÅÂÀ<??CFFSalÌÊÇÇÅŸš¯¹ÁÅÇÌÐÉÇÇÅÂ¿Œºº®¥š¯ŽŽ³¯±¶»ŸŸŸŸœŒŸÅËÏÑÔÖÔÐÍËÊÊËÍÍÍÍÍÍÍÍËÌÌÍÎÏÎÐÐÏÍËÊÊÊÊÊÊÊÊÊËÌÌËËËËËËËËËËËËÊÊÊÉÉÉÉÈÈÆÅÅÇÅÂÀ¿œ»ºCDDBDIS`kÕÐÁ³¯ªÁÉÒÒÍÊÈÈÈÈÇÇÈÇÃÀºº¹žµ³³³µžŸÅÈÆÄÃ¿œŸÃÉÌÏÑÏÎËÊÊËÍÎÒÒÒÒÒÓÓÓÑÒÓÓÔÕÔÔÕÔÓÒÒÒÓÓÑÎÎËËÊÌÍÎÎÎÍËÊÊÊÌÌËËÊÊËËËËËÊÉÇÆÅÇÄÀŸœœŒ»??>@CEIPZpš€§¹ÐÍÒÑËÉÈÆÃºŒ¿ÁÄÃÂÄÃÄÆÇÆÅÄÄÀÂÆÆÃÁ¿»ŒŒŒŸÁÆÊËÈÇÅÃÃÅÇÉÌÌËËËËËËÑÑÒÒÒÒÓÓÒÓÒÔÓÕÕ×ÒÓÑÑÐÑÑÒÎÎÍÌËÊÊÊÌËÊÊÉÈÆÅÈÇÇÆÄÃÁÁÀŸ»¹ž·¶µYZYX[^cjt|«ÀÇÊÏÔÒÎÌÐÎÇÂ»º¹ž¹º»œŸŒº¹ž··¶¶µ·¹¹œÁÂœœœŸÀÂÄÃÁÁÀÀÂÆÉËÈÈÉÊËÌÍÍÊÊÊËÊËÌÌËËÌÌÍÎÏÏÎÍÍÍÍÎÏÏËÌÌÌËËÊÊÃÃÃÂÂÂÃÃŸŸœŒºž¶µº·Ž±¯­«ª«±¶ž»œ¿ÂÉÐÒÒÛÑ×ß×ÔÏÎÓÔÊÂÄÂÁÃÅÉÉÄÌËÉÈÉÉÈÇÇÄÅÆÃÂÂÂÃÅÈÉÊÊÈÅºº¹¹Œœ¿ÁÈÈÉÉÊÊËËÎÎÍÌËÊÊÉÊËËËËËÊÊÄÄÄÄÅÅÄÄÌËÉÈÆÄÃÂ¿¿ŸœŒŒŒœºº¹ž·Ž²±­«©§¥£¡ÊÎÏÍÎÑÒÓËÍÅÅÓÒÕÓØÙ×ÔÔÓÒÔÎÆÀÀÄËËÄÈÈÊÍÑÓÓÓÎËÎÑÏÍÍÌÐÒÔÔÐÌÅÀžž¹»Ÿ¿ÁÂÁÂÃÅÆÈÉÊÉÉÉÈÈÈÈÈÇÇÇÆÆÆÆÆÈÈÈÈÈÅÃÀÀ¿Œ¹·µ³³Žµ·¹º»ŒŒŒ»¹·Ž±¯®°®­¬ª§€¢ÇÈÃœŸÁÂÅÆÉÍÉÉÈÌÏÐÌÈÈÈÄÇÏ×ÒÎÎÓØÖÑÎÑÔÖ××ØØÜØÖÕÐÎÏÎÓÔÔÒÏÊÃ¿»»»œŸœ¿ÀÀÀÁÂÄÅÆÆÃÂÁÀ¿ŸœœÀÀ¿¿ÀÁÂÃÆÆÇÇÅÂ¿œ»¹ž··µŽ³Ž³³²²°®­¬¬ª©š§§§®­«ª§¢œŒžµ¹»»œÑÊÍÈŒ·µžÄŽ¢±¶¶³·¹œÀŸ»»¹œÁÃÄÆÉËÈÆÇÈÆÈÍÍÒÑÐÍËÉÅÃÁÀÀÁÀœœŸÁÂÂÂÃÄÄÄÄÃÁ¿œ»º¹·¶·¶··¹ž¶··¹ž¶³±­­¬¬«š¥£€£}yxÉÇÂ¿ÁÃÅÊÈÅÈÃ·¬£zquxttywv~¡¥¬±±³·ž¹œÁÀÇÅÃ¿ºµ²¯ª©©¬­¬­®®®°±³Žµ¶°°±±±±±±¯¯¯¯¯®®­¯¯¯¯°®­«¥€¢ ~~|zxwvuronmjfde¹ŒÀÅÈÆÅÈÇÊÃ¿¹²Š«¯€©ª¢Š²³¯ž·ºœœ»»ŸÀ¿ÂÄÂÂÈÍÍÊËÊÇÂŒž³¶µµžž··¹»»º¹ž··¶¹žž¶Ž³²±®¯°°±°®­¬«©š©§§Š¥£ }xwtoic^\^[XXURRTÀÀÆÌÊÊËÊÇÎÏÈÄÁ·«Š¡¯­£¡§©Ž³²»ŸŒÁÁÂÂÁÀÁÃÇÃÇÊÈÆÉËÈÇÄÁ¿¿œ·Ž³³µžž¶µµ±²Žµ·¹º»žž···¶¶¶µŽµ³²®«ª«ª§¥¥€€£€¢¡¡¡ ¢ ~xrolig_[WUQMKMÎÊËÐÑÐÐÐÚÍ¿ŒŸÀÀÁŸ¹ºœž¯®°®š±ÁÄÇÄÆÈÊËËÊÉœŒŸÀÀÄÇÇÍÆÀº·¶³²¯®°²±®­­®®¯¯°°±±Ž³²±±°¯¯°°°°°¯®­°®­«ª©šŠŠ¥¢¡|zvsmifd`^XURQNKJKÅÃÅÇÅœž»«¥²ºÁÆ¿œŒº¹ºŸ¿Ÿ¿Ÿ¿ÅÉËÎÌÍÎÏÌÈÃ¿±­¯Ž¶···¿»µ°¬©Š€£ 
+}yvqonlkifdhd`^][XVVTRQOLKLÂÁŒŒ¹­Š«Ž¹ÂËÍÉÅÂÈÇÆÃÃÇËÈÂÂÆÉÉÇÈÈÉÉÊÌÌËÊÇÀºžž³©{tojgffdddddddd__^]]]\\`_^\\\\\\\^`acccdbaabba`^_abcca`a_]\]][Z_^\[ZWVVµ°±»ÇÅÀÁÇËÍÉÅÆÎÕÔÔÔÓÐÐËÆÆÀÁÄÅÇËÌÍËÈÅÁŸœŒŒºº»ž²šxtplhkf_ZVTTTRRRSSSSSVVTTTSSSPPPPQRRRTTUVXYZZ\\\]^``abbaaabcdbbbccccccbbba___¢ ­µ»ÃÈÉÍÍÊÉÏ×ÒÍËËËËÈÅÃÁÃÄÀÀÂÃœœŒ¹¶ŽµµµŽ²°¯®Š}yupmb_[WTRPOPPPPPPPPRRPPOONNSSSRRRQQPPQQSTUVXY[]^_abcdfffefghijjiijkggghhiii€Š¯¹œ¿ÃÇÈÈËÏÎÌÍÒËÅÀ¿¿ÁÃÂÁ¿ŒŒŸ¿¿œ¹º»»»º»»Ž²®©£¡}wupkgec_\YVSPQPPPPPPPQQQPPPONMMNNPQQQQRRSSUVXRUXZ[]adgkptuuuuvvwwvvwwxxxxyyyyÀ»»ŒºŒÁÂÃÆÉÊÉÇÄÂœž¶µµ·ž¶ŒŸ¿ŸÁÀŸŸÁÁÂÄÅÅÆÇ¿»·°Š~zwutsqheb_\ZWTONNNOOOOOOOOOOPOOOOOPQQQRRSTTUVXY[^_`djnosx|~
+
+
+
+
+
+
+
+
+
+ÉÆÃÄÂœ»ŒŽ¶··žº¹Ž·µŽ³³³²²¶ž»¿ÁÂÃÄÇÈËËËËËÌËÉÃ¹¯Š}|{ywsojfdcb`\[ZZZ[\]__^^___`bbaabcdegghhjlnooqtuwz¹º»œœ»¹ž¶µ²¯°³Ž±µµ¶µ³±°¯°²³µ·ž¹º¿ÁÅÈÊËÌÌÉÉÆÁŒ·®§}zywvusrqpopqrtttuuvvvz{z{||}}
+ ¢¥§©¬®­­¬¬¬¬««¬¬¬«««««±Ž¶·ž¹ž¶ººž·¹»º·ººŒº·Ž°¯®®®°±²³³¶¹ŸÂÄÅÅÅÃÃÀŒº·²®­«š§€¡ ¡£¥Š§š©ª¬¬­®¯²³µ¶·ž¹º»»»ººº¹¹¹¹žžž···œœœ»»ŒœŒŒŸ¿ÁÃÄÃÂÂÁÁ¿Œ¹µ³±±°±³µ¶·œ¿ÁÃÄÄÃÃÁ¿ºŽ°¯®­­¬¬­®°°¯µŽŽŽ²±¯¯©ª©šš©ªª©©ª«¬­®®®®®®¯¯°°²²³Žµ·ž¹ž¹¹º»»»»œŸÀÁÁÁÁÁÀÀÀÀ¿¿¿¿ÀÀÀ¿¿¿ŸŸŒº¹ž·µŽµ¶·ž¹ºŸÁÃÄÂÁÁ¿œ¹¶µµµ¶·ºŒœÄÄÅÆÅÅÄÄÂÁŸ¹¶¶¹Œ¿¿ÀÂÄÆÇÇÅÅÅÅÅÃÁÀº»»»»»»ºžžž¹º»œŸ¿ŸŒº¹¹ººŒŒŒœŸ¿ÀÀÀÀÀÀÁÂÂÂÄÅÆÇÇÆÆÆÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ»º¹º·²¯¯®¯±±±Žž»ŸœœŸ¿Ÿ»·ž·žžº»œŸÂÂÂÃÃÄÄÅÁÂÂÁÀÂÆÉÉÉÊÊÊÊÉÈÈÈÈÈÆÄÁÀÁÃÄÄÄÄÃÂÁÁÁÂÃÄÅÆÆÄÂÁÀÁÂÃÂÂÂÂÂÂÂÃÃÂÂÃÄÅÆÆÇÈÉÉÈÇÆÆÅÅÅÅÅÆÆÆÄÄÄÄÄÄÄÄžž·µŽ³±°³µµ¶µ¶žº»º¹»ŸŸœ»ŒŒŒœœŸ¿ÀÅÅÅÆÇÇÈÈÅÅÆÅÅÅÅÇÇÇÇÇÆÅÃÂÂÂÃÂÁ¿Œ»¿¿ÁÃÄÅÅÅÅÅÆÇÈÈÈÈÇÆÅÄÄÆÇÈÊÉÉÉÉÈÈÈÈÈÈÈÉÊËËËËËËÊÉÈÇÅÅÄÄÄÄÄÄÅÅÅÅÅÅÅÅž¹·³³¹ŒŒŸŸœŒŒœ¿ÁŸŒ»»œ¿ÀÀÁÁÂÃÂÃÄÄËËËËÊÊÊÉÎÍËÉÈÅÄÃ¿¿ŸœŒŒ»Œ¿¿ÀÀ¿ŸŒ»¹¹»ŸÁÃÄÅÇÈÉËËÊÊÉÏÎÍÌËÌÌÍËÊÊÊÉÉÈÈÉÊÊËËÌÌÌÉÉÉÉÈÈÇÆÆÆÆÆÅÅÅÅÅÅÅÅÅÅÅÅOOOOOOOOLHMQKFJMJEHKGDFIFDCFEDCCBCCBBCCBCCBDCCCDCCCCEFEFCBCCCB?<>;:9972413009;864144,,/+-----./1....--032667;=?CCEFHHIJKGGEA?>;7OOOOOOOOLJORJEJNJFHJGDGIFDCFEDBCBCCBBCCBBCCCBCCCDDCDEFEECBCCCB?=;9;:8735003?OYXTXSQJ<54.11.-/21/-,-.--013545;>@BCDEFGGFEDEC@>=;8OOOOOOOOLKQRJEKOJFHIGFGJFDEEEDCCCCCBBCCBCCCDCCCCDDCDEEDDBAABBA@=<;>;785441;UluvttrslZNHA<50//,++-+--+-115778<>@CDDEFGHGFCDC@>><9OOOOOOOOKKQQIFLNHFGIHFGHFDEDDCBCBCCCBCAACCCDCCCCDDCCCBBBAAAAA@?>?<=:686434Ggv{|yy|yohc^POG>74/+-+,-*-201478:<>CDDCCDEEEDCB@?>;8NOOPPOONJKOOHHLLGFGIHGFEFEEDDBBCCCCBABABAABBAAAABBBBCBBB@@@@A@>=<;<978556C\qvw{{yyyvsqrqgmh[VXPA:742-,.-3556;=?ACDEDDDDDCB@??>:6NOOPPOONJJNMHILJFFGIGGEDEDDCDCCCCBABA@AAABBBBAABBBBCBBBB@@@@@?>=<<<99726F[qtrtxuxxvuusrsmljmrsk`[WRKA5/.5402:=:9>ADEEFEDCB@@@?<8NOOPPOONJKOMGIMIGGGHEFGEDDDDBCCCCCBAB@AAABAABAABBBCCBBBBAA@@@?>=<>=9;73>[gokjkmnpqqqrqlig^_lsplnpsqmaG2/1237>>;8;>?@ACBABBA@?=;9NOOPPOONKLPMGILJIGHGEFGEDEFECCCBCBBABAAABBABBAABAABBAAAABBAA@@>><?<8<98Jkidfhedkhiiijhdcebacegilpy~sS6008BHMLIIDECAADDBAAA@=987NOOPPOONKMNKJKLJIHHGFFFFDDEEBCBCCCABAAAABBABBABB@@BBAAAABBABB?>?=;;>88JYfgdaa]_fbcccc`^_`bfgdbekrwy~gB2+.Ngljf_\VOHFFB>;CB@=:9;;NNOPPOONLMNLJKKIIHHGEFFFDDECDCCCCBABAAA@BBABAABBABBAAAAABBBCA@@@@<<==DU]]\XYZ[[`aed^]_`adbacdcdelnsmN4216^zyma^[XSRPLHGCB@?><;9OOOOPOONNONLKKKIIHHFEFEEDDECDCBCBBABABA@BBABABBBAAA@AAA@AACCBB@>A;9>@J]bc\Y[]`a`]\]__]^`___``_`dbete@144Idpkgc[\]]\]\Z[]USPMIB;5PPPPPOOONONLKJKIIHGFDEEEDDECDBBCBBBABB@@BBBAABBBAA@@AA@@ABDDAA@>A9;HPZikd_aeeb]UYWX]^_^\\^`a`^bdeksW4../Zii^^\XZYZ[^^`ejfedb`ZSMRRRRPPOONNNLLKKIJHGEDCEFDDDCDCBCBBBABBAAAABAABBBBBBBBBBBCDDB??=<>BPfw{wwuttncb`\Z_a]`][\^^^_`liF02.4[fe[XTQTUUWZZ\`fefikkiecSSSRQPOONNNMKKJJJHFEDCEEDDDCDCBCBCBABAAAAABAABBBBBAAABBBCECA@=;>CYlx
+
+zzxnhjmlhda`abdXdX6/76Fig^UTTTWSTVXXWY\]_bdeddcSSSRQQOOONNMKJKJJHFFEEEFDDDCDCBCBCBABAAABBBAABBABAA@@@@@ADAAD@=Fdtzui__adlt}
+{wrrtwmjM.08@Wj_VSUTTSUVWXWUUWUX[^`bdeSSRRQQOOOONMKJJJKIHFEDFFDDDCDCCCCCAABBAABBBAAABBCCAA@@A@=C@AHCBPmm`VN@AKTZZ[ahr}
+rQ<BHNbd[XYUSUVXWWWURSVRTWZ\_`aSSRRQPPPOONMLLKKIHGFFEFEDDDCDCCCCCAABB@BAABAACCBB@@B@@CDAG@AFBIYc\[\QEBEVUVWWWWZ^epyqbNDO]_\`[Z[WTUYXWTUTPSTRSUXY]bcSSRRQQPPOOONMLLKHHHHFEEDDDCCDDCBCCAACAAAAAAA@BBABBAB@@CCCH@@AGTivuxxoccfc_[XVUWXLKMZceo}iTEHXb^\`\Z[YXX[WXXZXTVWYVVVX]bcSSRRQQPPPPNMMMLLGHIIGFEDDDCCDCDBCCAABA@@ABCCCBACA@B@@CEB>EBDDMasxw{~zxwvokfa``^\]\PTecez~}hQGNUUT\[[\^^^][]]ZZYVZ][XXYZ_cdSSRRQQPPPPNMMMLLHHIHGEDCDDCCDCCCCCBBCA@A?AAAA?@??@A@AFHCFDABKVefffhighlloruwwwsoim_]ovt~
+{q[FEXda\`_ba]]_\ZY[Z\ZWXXZWWXY^ehSSSRRQRQNNNMMLLKIIHGEECCCCBBCBABADCBC@@AACBA@@CEGHHGJPQLNHIJVSRA>BIMKNYbagovxvrnxzwu|}~}zgQGSm}}x{wxqeb`_^]]YZ[YZY[WUUU[djSSSRRQRRNNMLMLKKIIHEDDCCCBBBCBAB@DBBA@?@@DDBCKTYWXZYY_a]XUUJF72%#'179>GMRW_fhggiz~~zzz~u\INex~~}~rjf`_a_[^a__[RQPRQSY]SSSRSRRRNNMLLLKKIIHEDDCCCCBBCBAB?CBAA?=@CIMLP]ltonmkiklh`\J6"
+#)137:<=;345:@DHOV^kru~
+zwxxfMMXs~yx}xpmf]\Z]_gmmibYRRQOLKGSSSRSRRRNNMLMLKJIIHFFEDDCDBBCBAB>BBA?><?NYa`et
+}ysmjie]T7'
+&1@EIECC;/%""%'(/8DQW]lrswyots]JO^yvsvwtwrklgabacbjt{vj`[VOJDSSTSSRQQNNNMMLKJJJHFFEDEDDCBCBBC@BCA?<=C^``\`sxlc_XUV@%
+(,6CFJE<50)%$(,54670%,;FS`hltqhmmXFXbloplm{~qotnfcabgbagnyl[XFSSTSSRQQNNNMMLKJKJIHFFEEDDCBCAAACBB@@?DMcjk`ZdxzofbYOGD@,
+
+#+3DJHGC6*)*')038541,%''+9BDMJLWe^MGLU`eiikx}rppiefebdaa_[^_Zowz{wfNTTTSSSRRNMNMMKJIKJIGEDEECCCCCBBBCBABCCKYbki[NQ`om^TTQGCB. 
+!+.7HMGD<-"%,/+/0;?=5,%,.%(3<;2-4?CEDJPWZ_`blvonnkkmikgbcb]XPLB=AShjiTTTTSSRRNNMMLKJIKJIHFFFEDDDCCBAAA@@EFGQ``aYKCDLWYPEHHCB<!
+""07AIFID3#"()-,48FMK>(
+(3(
+(;=7*!",;<9<AEKQWabeihdfllmnolc]^YUJF1+?N\TSSSSRQPONMLLLLKKJJIHHHGFFEDBBA@B@@EFGRbcYJA??@FCD?>?C<,
+ '&5?FGGKC-
+#,()0::AHJE0$-93'(2=92-(&/1 !%(1<EPVY^begc\js{{soof[NNH=1&4TSSSSSQPPNLLMMLKKKKIHIHHEEDDBBBACBACCDPa`RB==;:<:==59D6"!"(,:CEGIJ?(
+$//1663<@CB3(5F>,%*:;664,,*
+
+
+
+%07>CBDM[eihghedhqzwpq]A9-TSSSSSQPONLLMMLLJJJIHHHHCCCCBABAA@?@>>JZVF;<<;9:88;17F4
+
+"(1=HHKJJ=%&455::8HF<51);H?-&+7?:75-.)$!##(1570.,))0?OZ`b`\X[]buxp^B-!TSSSTSQPONMMNNMLKJKJIIIHEEDBA@?>>?=;99DSN>6<=>>=:6=6>I1
+ *08>JEHJL>#'767>=;ID61-+22*)(#2?>?:+(('#$$(00.(&#(*&&+,5;GQRZd`^bsuo]-UUUTUUSROONMNMLKJJKJIIIIFEEA?>>=>9899:@DB?=<>@AA?8<8=K+
+ &/:FIIJMJ;$
+%6=>ABBE?%'&%( ("!2:>:4**&&""'('')&*0..-5;6+%)-5;;P[`bnvjWUTUUUUSRQONMNMLKJKKJIJJJEECB@><;:67898;>A@@>>?@@?=>;;L-
+%-:FJJKKK='$3;DEA>?7!&(
+!
+
+%$#*7>:,#&$&$&)(%%#+&+//%-:<<8.$#,5.5<BMW^bUTUUTTRQQPNMONLLJKKIIJJJDDCB@>;:858;99;:AAAA?>@A?@@<9L.
+"+9FJKNII?+
+!.9<>=8/$#=:#
+
+('"'5>9'"&$#$&''''&*")6=217DNL>/&$)002898EXUUUUTSRQQPONNNMMKLJIJKKIEDBA@<<;;89:9;<=?@BB@@AD@AB;8H0
+"+8DHJMHGA1!
+*9<?>:)
+'M?% )'")472##(%##$$%),+(&/?OJC<BPNA8, 
+546<8-1?VUUTUTSSPPONOOMNLLJIJKKHFCA?><<=<98;;;=>@?ABBBCCA@B88B5
+
+"+6ADFIHFD;( -8:5-.*"
+
+#((*&20+
+"&%&##"$*,+'%+6FHD=>JC50(
+
+*/6;9/+/VWUUUTSSPPOOONNOKKJJJKIGEB?><<=?=;=>=?@?@ABABCCAC?A67=<)$0<ACHHHHD42:2%
+
+"#"")*()%3.*
+!%(%#""$)*($"%)10125;2'($!(3;<92-.VVUUUSSSQQOOONLLJKKJJKIGD@>==;=@B@@A@BA?AAABABBBC?>74;A6
+
+'5=@CGGJJ@/"
+'2/%
+!'-#$$&('$(5+&
+##*#  !#&('$#'&'#&'%$
+
+$$
+'3<><633VVVUSSSSRQONONLLJKLJJJIFB?=<<;>BFBBB@BA?A@BBBCBDC?;:19B?$
+
+,6:=DFJLJ?0# )*,#%1*'*,$"&!,4$
+" ($ !  !$$""#
+  "
+
+! 
+"'1;@@:44VVVUSSRRQPONONLMJLMKKJGCA>::88<?DDAAAB@A?@AAAACDD<:7/2?E7, 
+$)-4?GKMMH;.!
+!%+)(0-&))
+ **9/&!$''#   
+!#"
+ !
+" 
+
+"!0>B@<72VVVVTSRRRQPOONLMIKLKKIGC?<98557=DBA@ABA@@@AAAABDC;9713<?B6%
+&+.<BHHIKGB1.$"$&'')!## 1=G5
+#!!$'&! !
+
+
+
+;;
+
+
+ $1=?=:73WWVVTSSSRQPOOMLKIJLKIJFB<:8655:@CCABCCCA@BBBBBCB>7752388A@4%
+ $&6:==>BCA=;*%&$'" 
+!'$*=P\B
+  &1( 
+
+ #"
+!
+
+
+9;
+
+
+
+ !!&2<><;85WWVUSSSSQQPNNMLKJJJJJJFA;;8656=DCBABCBCCABAABBBA:5452279=CA7/*$!).11134465,++&$"''(+/6H\cM)# 
+$0+#
+
+!$#
+
+ "
+
+"##&2=?=;95VVTTSRQQPOOOMLLKKKHIJJE>>=9424;BCBBCB@BCBAAAAAA@:643127;BDDDD>3,$(-+''+.))/*+*"&*.0259BKF>)&&&.51*#"# !
+
+
+
+
+
+
+"##)4>?=:83VVUSRRQQONNMLLLKLKHIIGB=>=8425;@ACCBA?@BB@AAAA@>8621027=BBBDIIFE?;611010)*6+,4-3+18;===>>9+)(%,05,%
+
+""$#
+
+$
+!
+
+
+!%09@><:85UVUTRRQQPONMLLLKKKIIHD@;<:8458?CABAAA@?@A?@@AA>=7420127>?AAACFKQUPHEDA=977<79B?DEEFD@@EJ?2)14/585/)"
+""!!)*% 
+ 
+
+$,5<?=<<:6UVUUSRQQPONOMLKLLKJIFB>:98856;@DBA@?@@@?@>>@@A?<21/0247>@DA?ABBFEJMMGAABEB@BIKJRXSPJ?9?IA/)>E9:;83/(!
+!! 
+:@)
+& 
+  
+
+)55:<<<=:6TUUTTSSROONNLLKLLKJHE@;897579=ACBA?@A@?=>>>@A?=:3/.047;?BA@?@AAAB?JIB;AEFHE_roupj^XJ@<7A?.1?A<9:9531-$
+
+..## %##!"*2799:;>=:7VVUTTSRROOONLLKLLKJHEA;99857:?@ABA?>@B@>>>>?@>;940.159<@@?@ABCBADCGKH?GY^ZUp|m_R@;>:>969:7777;;6/,*(#'
+&$
+ #$(/58;;;;;:86VVUTSRQPOOOOMLLKKKJIFA<::976<AC@BA?>AB@>>>???<9541037;?BA@?ADDB@DHHOQJUuxg[l}unZQG66<744892/112;93-,..)!"'
+$.&*.048;<;<=<:776VUUTSRQQOPOOMMLKKKKIEA=9:868>BC@AA??AB@?@@@?>;6431159=ACA@@ACDB@BJJQSQcs_bmk]WGEA76:7453.+.,(/:63220./#"-,155799887767899753TSSRRQQQPPOMNLKKLLLHC>;:8758?CBA@@@?@@@@AAA?>;632115:>@ABAAABBA@@GISRMhr]VYWIAAA>856658/().)$-:77852//,(" "'1869;964330025861-SRRRQQPQPNNNLLKLKMKE@><;954;@BB@@@??@?@@AA@@=9533337<@AABBAAAAAABCHUXIiw_SQMB?=:87543161*&)&#*0464222/0*+$&*,-/244333001465/*RRRQQPPPONNMLLLJJLJC>;;;:66<CC@A??>>????@@?>;8424459>BDCBA@@@A@@BEIVaHdtYKFA;:7756675142+"$%#'&,0/-.0.-*/-()()$$&),...11000.+(RRRQPPPONOMLMKJKKKHB<<<;=77?EBAC??=>?@????>=:7323359>BCBB@?@AB@@?JLSdEX
+mPEB:643530146362*!"%%'&(,/.++-/,).1/,+&$"$(+++,-,)%##$TSSRPOOMPMMMJJLKKHD?=>?;8:?ACC=>>>>>>>>=A?==97537669?CDBBA??@@A?DJSIZHC`iV9/43211220146435, 
+%(())()*+,*,)')-0112-&"!#%&!#&&%%')RQQPOMMMNLMNKJLJNFBB??@>=>?<@A>????>>???@?=;:965;:9;?BDDBA??@@A?IQUEPE9FF@/(/3312444566334+"!&))((())*++)(&&)+.031.,*)('#&+--,,+RRQPOMMLNMNMLLLIJCACB@AABD@@BA>>====<<==@@?<<;89=;::=@BCBAAABB@?HSXINI:@JI;332324678895244-$!#&'&')))()*''&%$%(+/134532200123345SRQOMMKJNMLKJKLIGBACC@@BCBDJLB==>???>>>>>@?<<;:<>:78<@AAAAAAAA@@BOZQNKCMZVE8504:89988965360$
+!$&'),,)'&''))'$$%'&),/1246:86567;<QPONMJIILLKKJKKGCABFCBA@CAEUWD=>?>@@@??>=?@@>:9;@958>CBA@@@@AA@?AMZRIICN^VA40/5;;::88887272$#'('*-.+'%%')*'%%'(*-/00269:::;<?@ANNMMKKJJJJKKJKID::?DCCB@IDE[^E<<>=>>>>>>?BFGA><<@949@DB@@@@@@@@@DOYMGKDHWUA1/365;;;::998273&!#&'''),*'%%%()'')-.02442257??@ACEFFKKKKKJJJHHIIIJHC52:BEBDEJDF_eL>;B@?>??@A@CLND?@<>96:?A??@@@@@@@@CLTGFK@=AD6,1796;;<<;;::671*(&%'(()**&%&'+.-.38:<?AA?=>@EDDDEGIJJJIIIHHHIHHGEHHD629DGBCHE@CbmTC<A?=;;<>@@BOQC>?9=98<??=>?@@@@@@A@FNABB4022)(059:=<=<;:;;9610/+),-,+,*''),2799>BDCFHGDAAAAACDFGHIJJJIGFFFJHFDCDC>738BDADGD?F`s]CB?@=>>=BCDALMA5;9;??:=@<?@@@@?>@BBAAB=1+,-*(+0446<<;;;;;;;646732552472)+5:>AA?BDEDFHHFDCAEDEFGIJJGGGGFDDDFDDDCEB=637?A>@B><E`saD;?><>==@@@BG?2+0.5<DEEA>BA@@<<?@@?A@:3-,.0//04679;;:;;::9;9:=<;;=>===9326;ACBACFFFFFFFDCCEEEEFGIHGFFFFFEECBCDCED>98<@@=>=;<F^sgK>CCAAB@A?<CA/#"'&'<KFAB?@>><9:=>>;?<2++02458889;;===<==>=>>>@BCCEDDDA>:74>ADCBDEFGFEEFEDDGGFFFGHHDCBBDEEEDCCDEGJHFGJLHGDABDJ]pkXLMPNLKHIFFIA&!#!5KHBC?<<:989::=9;90++1379==<<>=AAA@AABA@ABABEGIDGEB@<61;@CDBDEEFEEEDDEDFFFFHIJK@@BCEFEDDCDCEIRUXY\\WURLOMP^lj`^Y^]\XVWSZXJ+$%!$9DGFAA?<<><87::872.-029;?@@AB@BCBBBBCCACCBBDEFGFFEA<61:?CDCCDEDEEEEEFFFGGHIKLMCABDFFEDHGGEELUZdfjiec`Z]YW_fedhionljhgbhdT1'($!
+".=GGCB??A?:8963331.159=ACDEFCDFEDCCDDABCCCDCCFFFDA:309=CDCDEDADEFFFHHHHGGGHIIECABDEDEKJLJIOY^gjpqnmlhhc_`aadiv{|{yvsjll_6$&%%"
+%4JOJJHEBA>:73121/.39;@EFHJIGGIHGFDEFCCCDDCCCEFEC?9416=BCCDEDCDEFGGGGGFDCCDDEMHDACFIIJJNPPT\`ilrvvvvsplfa\]bh{|rlpg9 "%&)#(2@OUWUSMDBB>65531+*1:<AGHIKJJIJJHEDEGGCAABAACCDDA>:615;ABACCBEEEGFGFFEDA?>>@AWQA;=CHHILNOUX]dhlqruy||xqha^Z\bn~wqvkD "#(".>LUT]ghgYF;868984/+,1;>CFGHJKKIKLIFCDFDA>;;=?@B?CE?<8/5;ADEDDDEFFFEDCB@>>?>=>=VRHDB?BAFILMRW]ceimquz~~znb[VW\erx|ykomS(!"&*>Reonsz|oV;.078620./3<=BDEFHIIIJKJHFGGA>;87:=??=AC><:44;BBCDDCBBBA?>>?=;==;;:7TWWULB@A?BFHINV[^bfkpuy|}{qd[Y[`bkqx}y{tlmn\-
+"(?Qcu}fE-,598510/5>@CEEEFGFJJIIHHHHA?=<<=@ACACD@??;4;@BAC@>;<<;::9976874553LXcdVGD@<<@CEGKNORVZ`flntvne\ZX\_eltzv{wqona8
+
+$Q\cmu{zwxwvkS4-;A9210/8<?CFEEFGFHGFFGHGG@@?@AA@?B?AB>?@>/3:>><:9777777534210,,.0GU_bZROE>:<BCBCB=@CGLQWYafcc][WY]bjpwvzxtoonP( V]Z\ZYQJUY\`Y<0>A5+.//78=AEDCDEGCBABDFGEDBBBCB@>:98789<<,-0662255446741/3/--($).DHLNQZaYM>;DFC@<788:=@BDCJNXTVWc]_hlsuyywpnuh;
+XZLE=?;<CC@GOA123-*/*)6;?CDB@@@@A?>>@@?>@@=>==<;420..000+*,120254345640-.+-/*&*/C@@DL_qoZD:CFEA:67544466489DAHTmigjltv{~xrnnmN
+QN:72>DKG@84=?1#%',70,;BCEDA?><:;::9754344420///0-)(*+)(*+/133345556531/-.00+*.0IILSYi|~\=09>=9244322111++*40;Ux{wsusvzuroeh\%A?18<LOQNKC4,74!&(/?@:EDBCB?>=;8222200.//121-+*,)&$$')(('-14586144556444145/)*--^dlxwwy^:)/533123210000.*1:BLL|xtsmljk[9541BNRNMNLF8-33%!&4LL>CEAB@=<=:524435521-32/,,+0+,--,+++,.201766566764676819.)22m}hL5,465344211/.-.1/<TagRr¥š¡¡{smkldC+47IUWOMLKA522/*..:XV;:BFHHFEFEC?A@?BFC>8334:=><CB@=:61/4167585444202167389<2/42jlN2+,57444321/.-,,)0NqwvN\Ž¬®£¡¡ulheM!#3=HMLEDDHA761-/83<\^A<GPSTSRTUUOQOKOTOEBDGMNQUVVTPJEA;876;>;<8510403156:8::;=>7gxx|x_A+).45545320-++**'2Zz{sEGŽ°¶Ž³³­{jiW)!8@D??>?9BD<61.056;PZLIQUWVTONMMRSPMNQKBGT]_^\]ba\UNGB;78<=9:95610628:AEB<:5@D?3gyy{x^B0-29::7230-+***,+0Qhj`8.kª²¶º¹··¯«¡|k3$;DEDHIH8:>=4012358DNMLNKKLIGDCCEC@>>>=;GX]\a^VWWTNIC?<94835<74;=:=56678463'4EF8\ynV96ARTPD530,*))*+*+@KOF-!H¬¯Ž¶µ··Ž°®¢?&=FLPVSMB5251058468@EDBA??@@???>730.++18CPPNTRIIA?=<;:862.-7=415:68<AKIMmjN,0DF4Qkv~|lHBWophVB32.,++*,(-4:97-(2h§¯µž¹·µ·žµ°£O%?KQUXRJF;0,059986:;9754765320..-+(&"#,8<>=<<;9954420.,+1*.632?CZZcry~jcyoH.1AA0GRWblnohWK^vui\G642.-,*+(.+1/41.+H ª²¶ž¶µ¹¶¹º³Z%CQWTTNIDC5&.<=987:5-,,*,++*('&'%%#"".:=1/2//1.010/-,**.*14+EpvnaVVRX>768&,7@>7?FIJKLMQNDALWUI@88510.+**...+-2-'@|¡²·»º¹±ºŸ¶h,PVTQUIFA<2*1>@;:=;4-(''&$%&$$%$ "!(;=3.///132,.40.102,071/XuuU$*#))4BD<$7BE7QWWSMGDFA704;;8597653/,*+.,0.,4.,^to
+ª°¹²ŒŸ·Ç
+?UORSTICC8-.:@>=:;<83+)*(&&'$$%$$"#
+
+(<>4/12247813720321-/70%`
+jJp|b'2GD,HMSX\WPPF>778:98998642/,*-*11-/(?xofuw€°»·®JWOQKJHA@837AD@?=;<;5,(*+)**(()(%""
+
+(<<1.121382.49635322/80#sš©r0«€§¢ ªh+5HB1MIFGJGJTKHD?;:634431/.,-)-,*/-)/a|uolejz{ztodQOJE6;B><34=???=?=<<70.0,+,,*,-+%## 
+
+&8=305424:52496332230<0T}e:%
+ª ¡ ©ša%7F@+ZSJD;09MWUQKGB<500///.--+//,1.+Myweipt|zvw`VqxXLD9IRHPQM5:NYK>>>=<<:4/,,,,,+)+,)&#$"
+%5=4043/1462232134950=0(77!
+w¯£¡©q07AC+[XVTL;:FMOPPMIA9002220,))+2.2),[
+zurrwwylisyn[B/8C=CMSqrjP=?B:?>><93/..--+)*)&'$$"
+%5;4253/0132367656:84;1# &"
+!uª¥ š«r+3?B([VRSQE98:=AEGFA=7566750,-+,**(3Phzly~~wwtsz|rcUB;838;HhjOEKF;?96970--00.,)+)&($%# $4?;<?>=?>BA@AA<6557681$""%
+&y€©Š¢ªy67@>1KKJKLG<610258<>>CAABFEC@<6,('3ILVoysx
+z{zt{wwH9EDIDWcQFe{rjZMCA<0()...,*+*&'$&$" $3BADHJKNLJHCAA=88>=554&%# %z²ªŠ¬³º~67F=3POMLJD>;;988:;<ACEINSWZ\XMD01Wn_W_hornt}{|wHAVXanlnaXfszqif]K9,./+*,+)(($&"  2?>>@=<>89:=@?;;>?;883)$$)
++Ÿœµ·Ž¯r;8@>1\[YUNFBA?A?=?FFBDEHKPUZ\`]P?Jrxjiggggjrsknpmv|
+l?@Y]dkjha\blru{yzwqhR7)/+(()*'&"%!   2IC92*)11,18=><=@>9795*$%)"2}§¡soK8AA5*gc_]XUTVJJJMONKHHIIGKNPPNQILi|zsqrqldegebcehntT/;Vaowplh`X[_\fknfbfQ*)/+''()&%"$!
+
+.?=72*%)(&,5<><<><8797/,+.)*HTP@<360;F>2,pljhb\[^ea^][XUWSSSPPRNIIE;Q|
+}|uednnjeZU_eA%6O]s}zscWXZV]dicbmX),,()*&&%#$&"
+.B@94.*++.17<<::;9656896634266:8?38:DIA;8zyume_bfagijihaWXWWVWWSMUMDb}zxwoklsvnea_X/2ITfov{uihorpfimiioY.')')*&%&$')&# #/HD9321447799:;<=:975:A@<>@@?>C?AEEEGJLMH}wpidac`ZY\_\WUSRTUUQOUUXz|}}}xwytmiiqyyncK'
+=WbheXccZ_qzxspnT+''''&((*..+)#%.EB8699:9;:8:<@BCAA>=AFGBAAABFHFGGFGJKPVWª€snnlohbbc_]\[ZXXVRPPTS\~||vtwuwxsnmeizo_='(E\gnhjjbPBK`ntrqqupS,$)&&*+,*-1.--((-HF;7::<=@??ACGJJKIHEFHHGCGHILIHJOORSSRVZ¢š£rda`V[[YY]_]c`_^YQOQPHU~~yuqkijjkpsnlmot~sWC<BT]iutsnphVRUQOQQXhr_@3.%)1/+)+.,,.+)->@;;@?@BEGHJJLMNQNKIGEHMKNKLPOQPPOQSVYVU
+~hVTOF@@CGJNRVWVVRMNGTt{~tnkfcfjmnnptrcRIHJ[n|{~urmgmnaRYZTQ[`TB<2760766899:<;8=ECKOKMIJIJKKKJIEE@>EHIQLMPQRTSTTSQQVXY[|qZPC<:8:;=?>>AGGFF;C\qtswzrommnmjrnhkm`QFDJ`w
+}|{rkv|vuqh`[TIAB=CB>B<@CEDEFFDGLGKMIKIIIGHFFFFCF=7ERSPRRSTUTTTY[[ZZYXXŠ~|udTPOMGC>=:::986317FTXXWZ^aa_dmpuxmlgZNLFJ_uzkbiw~ygM8<=9?A@HFGFDA?BFHGJEEGDFFJKJJIHHHILA7FYZOSTUWXXXYY[[[\ZXYxuuqlida^]YPJEA?=;<>>?CGJJKW`b`mu|q\TUUZlyywxzzwvwx|{bMME<@?=DKLJF?;>CGGKHKLHIIJLOPOMMLPSJAGTVSSUVWXZZYUWWWXYZ\yx{}{xz~{}}zyxzurpolfcb`ZRLGDB?ACB??MWZYXTV^ULP[[_kv|zwpnu|yrqvy}~rgmaXSLEGKKKHEAADFHMOPQNLLLOQSRPNNPTPEENUVTVXXWXXWYZWVWXXYbaabceee_cddfgec\]]_^\\^[[[YUQOMGJNLKR[^^\URPE622Nl}vjiejihjqtqojkx{zulimfaZUUTQKKHDBBDGILOPRQPQRSTUUTSSOWRDBMUTVXYXYYYXYZYX[YXYOOOQSSRPQPOPSURMJKNOQRTWSTTRNMOPTOPU[]ZSNSX]^WIB2@Vktuvsqpkeaadgffw|{}utzxulfaZQPKGCBDEEHJMPTUTVSSTUUUVURYTDANVSUXYYZ\\[VYYX[[XYJJJKJIFFHGFGFBBEBDEGJPW[a^[WVRJAHCBHKLJFGNXdkmmmhd\WOMYbilvzrhfhcctvuyl_ggmrrlaVOKGFCB?=>>ACJKIIIJMOQQRQUYSF@KVVXY[ZY[[Z[[ZYZXVYGFBA?<9889:978:=>@BDIPX]dffccaSD=978;:;=EPW^epwusuoeba^^]dntwv}}xtvh]TRSUPLMOPJCA@=836457;>>??@@??DJPSYWJBJSTW[[YXZ[YWZYZ[ZYYBA=:840.,.132357678;>BHLTW[[_a[RHA<?DB:47>CJU^cdehknpvztriZOP\ekq~}daykhig_ZYXUQKFD@<6667679:9:9988<?CHLPJDJUZWZZ[\_\WSVXX[YXX??<:741/*+.146893432137:;=ACDEFEIEFLNG:0118BOZ^^\cd_bpyuyuiZOMLHNP`q\Srulkjf^YXVVSPLJGC?==<:89:<:::9865457=?<>FLWXYXZ^^\Y[[YXUUU:::7420/--.036886552211289:;:99:<@EHE>977:EMXfuwyyvojouwijifcgijad^^Ua|yyxsmkgdab^WQLD>BCBCEHKMOPQRPNLIMIIJE@>:=ADEEGHIRUWX[XUW:::74/--.-,-036665544544322331244587446::>JOWcw}{srvmiddekt}}wxy~|vrpjlkid^YQLECCFJQSUYZ[_cefehccecb]XOLG@<;:;>BFLRTSS=<=950//-./035684324554210.00/.010..233268ABLSdkkortskegb__bccflvv}yurnjkkljhd`TPMLMLKIMJJNRVY[cbdedhjhibZRMJGD=;77:<>B;<:8400/+,.13468643353202210//-,0.-.331-44;;IQ`hknonnha^\\_bda`cflu{xwsolkllhdcdb`^XSMIIECDFFFIGHLOPU[^]^_bb`\XMG<53249>>=95211-.24568:5454443234210//0-../..01/188LUhsz{vvxob`_abbabacdhkrx~zwwttokkic``]`cec^YWPMLNMLIJJHGHGEHHMPQRSRVXUQKFC@@F>==96322.02589:;9877766555421001-1310/13./<;JVks}|wqg_a`dca_^bbdijlqvy}|zvtrrmfb_YSVVSSTVY]ZYZ[][YYTQMLNOLJJIIEDDFIHIJJFCEK>><:532213479;;;;:9:998744423211./0////143:<JSfpw||yvk_XWX]_``bhbdcbacilrtvz||xsqokd`_\ZUSONMNOOTWY\afheb^XSRRONOLIFHJJILMMNLJJN==;853333479:::;=<:99:88765645544332342254;?LRailturneXQNLRY`ebc]_bbaceihhjovwsqpnliea^[VSONNOMLKNNLOTVSZWSQPQRQTQONPQPLOOPRRQPQ><;74334358:;:::<<;::877787787765333442246;>LVaeeklikdWPMGGKU[[[Y\_ca`^^a__ckprskiihd^ZXURNMONOMMONMMOPOJIJMNPQQPSWYXWUSRRRTVVTS<;:52244358:;;;:<;:::98878888878555544449:;>M[eicfffid[TGEFHKPQTWXXZ\\[\ca^^adikkhfdc^[\XUSOMLLMMLNNNKLNHKLNNOONMQWZYWUTXZ\`bb`_;:963234479;:;;;;;;:;::99:9:;::9788776679:<DW_enlkjjif\QECDCGJJMRRSXZ\]`ba`]]\^]jhffc^[Z[ZVRNMMMQOORPJHKLMMNNMMMMOQRSRRPSX_dghhg<<97424568:<<;;<<<;;;99:;;<===<<899988879<?L`lr|}~~xpcSLEB@FNOQRSUWWUVWWXXXYYZZZ\\]\ZXVYXVSOMMMNMOQROOOONNNOPPPPNNNPPPPKPW\_^^_==:643458:;<==<=<;<<<;::<<=>?>=<=<<<<;;<=CAKaxs^MOUW[]XWWUWVURSVWUSSSSRRPQSUWY[[YYWUSQOPQPQSUVUTWWUTTTUSQQRPOPTVUXZZZZYX++*****)******))$')('))''&%$#&+,./00.+))'&#"""!!#"!   !!        ! 
+
+
+!"!!"#####!#%&&')*(-1/)%%'''()('&&)'''()))))******++******++++****)((('&%'*$!"&-332220.+(&'&#""""!#"!   !!        
+
+
+
+
+  !!#####$"#%&'(*,,.243.)&%&((''),'''&(((())******,,++++**+++**+++)('''''''#$)/46531.-,+(&'&$###"!!!   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ !!!!!!!""#$$"$&''(,./1105;6,$%&()*)('&&&'(()****)))),,,+++**++***+++(*)''))&$&,148853/+)**(''&$###"!!!               !"#$$#"!!!""##$#%&''*-/.36349=<3-%#$'((&&&&'())***))))),,,,++++++****++****)(&%+/2238;71.+*+*'%&&##""!"#"""""""########%%%%%%%%##$$$$$#!"""####$%'()*,/0-.48889;5-('(('''''()**********,,,,++++++******+((+*''*67843771-,+++)&#%$#""""""#"#"#"##$#$#$#$$%$%$%$%#$#$$$$$"""#####%%&'(*,-.,+-5<:55664/*%#''''()*+********,,++****++++****''''(+/367:830.+-,+*)'%$%%$$$$%%########$$$$$$$$%$%$%$%$&%%$$$$$"""""###$##%)+,+(261.5<?6652/+((('''(()*)))))))),,++****,,,++***#+*"$1871288/)+/31.*&$$%$$$$$%&'$$$$$$$$%%%%%%%%&&&&&&&&%&&&%%%%########$#"$(+,*-*-32.2<754441+&(('''(()))))))))---,,,+++,*(*+++,)(+/135497+$,4260($$%&%$$##$%&'%%%%%%%%&&&&&&&&&&&&&%&&&&&%%%&&##$$####"#%&&'(+,/10/001532465/(())'')*)+*))***)-----,,,),-,++**.()14016;4-*.793,)$"$&&&%%$$$%&&&&%%%%%%''''''''&&&&&&''''''''''&%%%$$$$#$%%%&'))-110257./24320-+)))***+*))*****..----,,+,-,+*+-+-0244437/-2651,(&$##$%%'&&&&&'&&'''''&&((((((((&&&&&&&&((((((((&&&%$###%%%%%%$&&'')-121-/111/..,+**++++)*++++**.---,,,,.,+,++++)1532552/.283*&$&&%%#$$$'&&&&'''%&&&&&''''''''''&&&&&&&&((((((''&&&%$$##'&%%%%##(%"%+/0.2/--//.,,-,))+,*,,,+*+**.--,,,,,.-..+++(-0452./30/01,'%%###"##$$%%%%&'')%&&'''((('''''''&&&&&'(((((('&%%'''''&%%'&%$%%$#%&%%%(-11.+,/0/-.-,,+*+--,*))+,,..-,,,,---/+&*21/352-+,./..+&%'&######$%$%%&''((&((())**)(((((''&&&'''(()))('&&&''''''&&''&%&&%$&&$$#$'*+,-.///.1--11++0,+)()+-,.--,,,,,+*,($.97/56/*--*+,,(##&%&&%%$%%%&&&''()(****++++)))))(((&&&'((()*)(((((((((((((()(''&&&&*'%%''&%(),.//.-1/0341.-,-+))+,*--,++++,,)+**5:14221/,,-.)%""%'$#$$$%&%%''((((((++++++++**)))(((&&&'(())))(((())))))))))))()''''#$&'&$%''&(+/10..342483)-/.+*++),,,+,..,,/-/992/5/,.2.*-,%!$'%##$$&&&''')))***))++++)))*))(())((''(())((*)(((()+))))))())))((&''#$%&&&%%%$%)-.-..033176,*.1/)*-*..-.//001+*17657/)+0.+)'&&&&%#$(&&&'''''***+++++++**))*)+*))))('((((((''*)(''(*,******))))((''&&&&&&&%%$$$$&+-.--*170394')-.)(,./..././1--055689,'.6/(%"!%&%"!$(''''''((++++++,,,,,+****++*)**))''''(((()('&&(*,++++****))))((''('''&&%%$$##(+--1/+/6647.)*-+)*-,,,,-..-*4758<7.-,281%  !$#""$%%'''(((((,,++++++,,,***++**))++++''''(())(('''(*,++++***)+++**))()(''&&&&%#"#&(+.56-+47369.*,,++++--+,//+2976></'384-*#
+!$%#"$''$&&'(()))-,,+******)))*))****((((((''&&&&'(())**+*+++++**,,+++*))*)(('''''$#%&%).54:8+,7991.-,,,+,--+,//-<:9==1+4:A2 "%"$#%%$$&&&&&'())**--,,++****)))))))))(&&%%('''''(('()+++*+*,,,,++*+,+++*))+*)(''&&(&%&&%',25>>.'1:5573-+,+,+*+,,/2=9<>2*2?@;)
+$'%%#$&%%%&(''(()**+,,,,,+++,+*)*))())('%$$#%&&'()++&')*+*))*+,,,,,+++,,+*))++*)(''''('%%&'&,6888.)388:6/+,+.**,-*/895:7)/<9@.!$+'#$%%%'(''((())**++++,,,,++++*))(''((('%%$%$$$%&'()%&'()('')*+,,,,,++,,+**)+***))((&*($%)(!$/5574.,:8740--,+,,++-27895&/>:@;# *($((&&''(()))))**++,,,,--,++++)(('%$#"$%$%%####$$%&&%%%%%&(')*+-----++,,,,++,+++*)(((+)%&*'!
+$08991(45432-*+-,**+/599:+,8<AD1"#)'&('''(())*****+++,,.////-,+'((('&%$#"%%$%&$#$$%$$%$$##"#$&&()*+,---------,+,,+++*)))*)(((&$!&4>?6.+2651,*-,**+.1556/)5==@6&%'(%&'&((**++,,+++,,,,,../0/,*'&%%%%$##$#$%#$%$"##$$$###""!#$&'&'(*+,,-.---..-,,,,,,+++*)*,)&%('!.:>90,24540*(+*)+.2453!176B8##'(%$&&&((**++,,,,,,,,,,,,--,('$&%$$##""$##$"#$"!!"##"""####$%&&%&()*,,,,---.------,,,+++)+,)&&*(%$(0892100350)&+*((+048/"424B/ &('$&'%&(()**+++,,,-,,+++,,+*)&%'%#"#$$#%"""!"" !!"##""""""###$$$$%')**+),...-./,,,+,++++*++)(()'&&&*3:9/-,/0+(,))**+-/0)-1097%$''&'))&''())*+++,,---,,,-,+*)('%'%#"#$%%$!!! !!!  "#"#$""########$$&''''*-..-./-,,+,+++*++*)))(*$$').5:3-(+.+)-'(*,,+*)'3014)#''&')))(((()**+*+,-..----,+)'%%$$$$#"!"#%#"""  #""  ""!"$$$$$$%%%""""#$$$&(+,--,,,,,,,,++,,+**))()%%&%'.372+)--*)'&&&(*,--02.%#*,('))'()*(**++,++--.....-,+'$"""#"#$"
+ """$#!#$($"! 
+
+ $$#"#$%%""""""""%&(+-,+*,,,,,,,,,++++)(*&()&"%,-240)(**)('&''(,/)/0'!$))(())**++*)+*,+,--./...--*'# 
+
+ !#!!#" "%"'
+
+
+
+!
+
+
+
+
+!$!!#!"$%#"!!"!!%&(*+,++..--.---,,,+++**))(&%%''.11-*)('))(('())&**&$')((()*++,,***++,,./..--,+*(&"  "$!   !"%(("
+
+
+
+
+"""%#$$""""""$$%')++*..--....++++++***)((('''*./,)(('()(('&&$%%$$&((&())*+,--*+*++,-.//-,*(('''%##$&'#" !""!
+
+$%$'&" 
+
+ $!########"!"%(++*../.....++++,,+*++*+*)(&'+-,))((''()'%%%'$#$&'&&))*+,,--++*+,,../..,*''&#$"!!!""$# 
+
+
+%B<"=;BD;85+$
+
+ $ ""######""#&),,,-..////,,,,,,+++++++*('&(**)))()'(+)$%*'%%'(''(**++,,-----.///0/0/,)&&&"#"! !!!# 
+
+
+"
+ $0823A6,=96+
+
+
+ ""##$#""$(,.()+.0000--..,,++++,+)(((&''''('&)()+'"$*%&(++))*++++,,--....////00-*'%$$$%$$#$$$!
+
+!,,.4345-/-$'.)4=8&"
+
+
+ !""##"""%(+)*,.0/.-....-,,,,,,+)(((('&''''&'()'$"$&%&(*++++++,,--..---...-.0-)&%$#"!#" !!
+
+
+
+
+
+"+,%$" 
+(3-"/5*))
+
+
+!""$#!!"#$%+,-./.,+/...,,,,,,--,+)()(((('&&%)*&#$&$&&&()+++++,--.//......---)$!"##!#" 
+
+
+"&& 
+" 
+
++)05'#)!
+
+
+ #$##"!!##" *+,-/......-,,-----..-*('()('%%&')(%#$&%%&(*+,--,,,--...0-,..-,-,& "%%"$"#$!
+'EC;0,3@H;*#$#!!-&'%
+!&
+
+
+
+
+ "#""""! '()+--//....--------.-+*+*)'&&&'))($#$&%()+,-...,,--.////../.---)$ !$##"! 
+
+
+
+")'%&%#$'%"!
+
+
+
+!& 
+
+
+
+
+
+
+ "!!"#"!!$%(+-./0.../....-.../.,,,+)(&&&'))&#"$%$)*,--..----.//00./.----,'%"!"#%##
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+"
+
+
+
+
+ !
+
+
+
+
+
+
+   !!##!#'*,///--..//...0000/.--,*(&&''('$""##"**,-----....//00.0.,,-,*'%#!!#""#
+
+
+
+
+
+  
+! 
+
+
+
+
+
+!
+ 
+
+
+
+
+
+
+
+
+ 
+ !#$!#&)+-....///0/0000000...,*(&&&''&$"###",--./////////////0.-,-*&$#"! !   
+
+
+
+
+
+
+
+
+ " 
+ !!
+!
+
+
+
+
+
+
+
+
+
+
+
+
+
+!  !!!"%"$%&),..00112211100/0/..-,*(&&%%&%$$$$$$--./00000000000010..-+'#"!!!!!  
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+$!!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   !$"#$$',//11222221200/0//.-,*('&%%&%$$#$&'-./00000111111112000-)%""""!! 
+
+
+
+
+
+
+
+
+
+
+
+
+%# 
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #"###&+..0012222121101000.-,*'%%$%%$#"#&)//011111222222223111.(#!"!!  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+"#
+
+
+
+
+
+
+
+
+
+
+
+
+ !$!#$#%*--0123333332212211//-+)&$$%%%$##(+./122322333333333233.&!!   ! 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "!
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+!$""""%(+-11233332544333221-,.*%$%"#$#"$*./0233333444433333321,&!! !   
+
+
+
+
+
+
+
+
+
+
+
+
+
+#" 
+
+
+   
+
+
+
+
+
+
+ 
+$&$""#%'*-01233433443333332--.+%$%#$$#"$*/0134444444443333332.*&" 
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ## 
+
+!!  
+
+
+
+
+
+
+!%"
+#%%#"$&'*../2344442233344440./,&$%$$$""%,01244555433333344243.(&# 
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+
+
+
+
+
+
+     *1.
+""%#"#&'*/./2344452234445530./-'$&""! "(/12344554433333334153-'$#! !!! 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+"!
+
+
+
+
+
+
+
+
+
+   !#&'(/66$! &"!$&(,0/03433443333345521/0/(#&"! "(.02334444465544433253,&$#"""!! 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  #""""! 
+
+
+
+
+
+
+
+
+ #(-13389,  &#$%'),/012433445444445533111(!%""!#)-/2344444477665444540*%##"$$"!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $#"##" 
+
+
+
+
+
+
+
+
+#(/474581
+!'&&%'*,-012333445555556645233*"%!"" $+02334454447776655574-($###'%%"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+! !"#" 
+  
+
+
+
+
+"'-250.41 
+#))(&'*,+022333455555557735345+#& !"!&-12111232214455543272)%'%!#'%&
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%(     
+
+   
+
+  #(-131-0+(,+&%*,+.01233454444445556555/($ """'.33333444444445554440(%'%"$'&&
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!#!!!!          !!$)-011/+#
+
+
+%-,&%*-+133455675444445566434/($ !!!%*0112234444655444441/(&)&$'''%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!!          !!!""#&(*++..$
+
+#,.&$+-*0123211222222222//,,-+%#!"""#'+,....00/.22110//.-,)(*&#'('$
+
+
+
+
+
+
+
+
+
+
+
+
+
+   !!! 
+  
+
+
+
+
+!!###$'()('*+!
+ 
+
+!,/&#+-),,-,+**)''&&&&&&&&$%'(%$$$$$%')**)))**)(())**)(('(')+&!'+(%
+
+
+
+
+
+
+
+
+
+
+
+
+"#   
+
+
+
+
+
+
+
+ "" !#&**)'(&$!
+
+
+
+ -2(#*-)()))('&&((((''&&$%$$''&'#$$%&'))(''''(''%&&&&%%$$&'*-'#(-)$
+
+
+
+
+
+
+
+
+
+
+
+ %("""!!""#! 
+
+
+
+
+
+
+
+
+!#$""#%()'%%#$$
+
+ -3)#),*''(((('(((('''&&'('&'&%'"#%&&&''''(('''((('&&%%%&((+.(%*,(%
+
+
+
+
+ 
+
+
+!
+  !%)%&&%$$%$ 
+
+
+
+
+
+
+
+
+"$%###$$#" !  
+
+"/3*#',*'(()('''+***)((((('&&%$%"#%''&&&%'((&&(*)('&&'()))(*-'#(,)%
+
+
+
+
+
+
+!%!
+!$"$%&&%%%#"!
+
+
+
+
+!"$$"!  !!!
+
+
+
+
+
+
+
+"/4+#&++**)))(&&((''&&%&''&%'&%&"#&(&&%#$%'&%%&(*)(((((((,((-& '.)(
+
+
+!&# &'$#(&'%%&#!$ 
+
+
+
+   !""#$  
+   
+
+
+
+
+
+
+ -2)%&**)*++*)'(((''''&&(('&())+#"%''&&%###$$$%&%&&'''%%*-))-'")0*&
+
+
+ 
+
+"(""#&'&(*(''$%&"#" 
+
+
+ !!!"""""
+
+
+ ! 
+
+
+
+!,/(%&)(%&'(((''((((''''''%$&&&($"$%%&('"!!"$%%%')+,-+('..++.(#)1,'
+
+
+
+
+!"   #$(+)'('&%%)%#$!$""!
+!!!!!"""
+
+
+
+  
+
+
+
+#,,'%&'&))))*)('&&%$$$$$$%$#%&%'"#$#$+/,,,+-.////146651032.,.(#'/,(
+
+
+!" 
+
+(-0,)*(%'#'$$&"& !"!!!   !!#$#"
+
+
+   
+
+
+
+%,*&%%&$11100/.---,,,+++*+**+*'(#$!%28344455567579;;:8784-)*'#%-,(
+
+
+#&!
+(..-,*)(&,'(&(.(!"#""!!"#$#"##!
+
+
+ !
+
+
+
+&*+%$%$%246545666665554445433/)'$% #19313433234789:;:9874,$#$$$,,) 
+
+
+
+!$!
+
+%-+++.02563:=88A>,$$""""#$####$%%"
+
+
+
+
+
+  
+
+
+'**$$$$'1465568966666655797671(#"%&!".52244322345678887645/$ "#!(,*"
+
+
+
+
+ #%($'*17<?A6CHG@FM?.+($! "#"#$"$%%# 
+
+
+
+
+
+
+
+
+ (*'$"#%)2565578777776677775682(!"#%#$-453444334533556543185)"##
+%+,%
+
+
+
+
+
+
+
+
+ #&)+-,+(%*46;41>3960*%!"#"$$!#$#! 
+
+
+
+
+
+
+
+
+"()%#"#%)4576699877776677986693(!!"$%$+775677556766788888499/$"!
+!&+'"
+
+
+
+
+
+ #&&)+,+*(&(%&!
+  ((*'%#$''%$&&#!!  
+
+
+
+
+
+
+
+#&('$"#%,35559979::::::::;;6450'"###$$*6767886678999999::577.#!!%*(% 
+
+
+!###$$$$#$##
+
+
+!
+
+#$$$&)*('))%"!!  
+
+
+
+$('%#$%(/7667::899999:::::9654-$#%%#$#(4778997789:99999::9672&
+ ! $'&%"
+
+
+
+
+
+
+
+
+
+!1,
+"$%%'+*((+*'# #!    !"
+
+
+
+!''&"#$&,4:558;;;;8999999997673(!#$$"#"%1878887788888889::<689-! "###$#!!!
+
+
+
+
+
+
+
+
+3M?
+
+ #&$%()''')(%#""!   ""!
+
+
+
+#(&%#"$%-8;449::<;::::9988967:4& ##$"#"#/977888899999999:;:46;3& !"!!"$$"!!!##  
+
+  !"""
+$6M>!!#$%$%&&(%%&'$!!$""  !"! 
+
+!'*%%$##$,9:44888::;;;;::99:68=5& ##%#%$#-988889999;::9998995595(    #&%"!%&$!   !"#$$%(*1/''$%&&''&&%&'&&# #""!!#"!!!
+ %(("%%"#%.8545889:;;;;;;;;;;6:>4% ##%"%&#+788889999;9:9777778675)
+ 
+ #'&$#()#
+
+
+
+! !"#"#)*$"'+*'(()))''&)('&# "!!!"$#  
+
+#((& ##!%+17179::::;::;;;;;;<7;>0"!&$%!%'#)588889999:9::898838777+"  #&'%&%*$
+##
+!!####"'*)&**%+))**))**)'%%#!  "#%#!
+
+&)(%!'/462<?=<968;;;;;:::<8<<-!'%!#%%"$07:979:9:::::::::7943:4& 
+ "$&'%$
+&1.(-2(('&&((%-*+,)*,)+++++,,++'%%#!
+
+
+ #$$" 
+
+
+
+!()%#!
+ $&4;39=:47<=;8:<;:98?8=>6%%$$!#$#!"-:88:::::::::;;;;:97689/  
+!$('#,$'/001//,*)((')--..--,*+,,--.-.+(&%%#   !!"!
+
+ $''#"
+ &/89671,(+.6<>>?;998<8<;3$$!#"#""!"):78;:9::<<<<;;;:<7875<8#
+ !#'&"7-"&/-),0+(&%&(*+.--/./2/..00../+'&'&%$"#" !
+
+
+!%&$"$'49899,)*-%(*68=:899;6;:/!
+" ###!""!%7:99:98;>==<<;;:<8:85=<+"!#"#%&'10$#,,")&!!#(-1-1/,./264210/--.*''(&$$#$#  
+ #$$! "!"*388:4,3<B63.*-6;;:9;8<7+
+""%$# #%"#1=;6:97=<;<<<<==;;<:9<;6*# #""$(#*5.%0,$# 
+!+10/20///05621/.---*(''&$#$  
+
+
+
+
+"%%%#
+ !(479:6.2<>=8>B0(0;><78<;0$
+
+##%$#!$&##+<=6:;9>;;<<<<==:<<;;:9;4&
+ ""#$,('02#/+-,&&.2/02334113730/-,-.)('&%#!"!
+
+
+
+
+ '('&#  
+!1;9;:0,9;/#%4D<*-:><66@7' #$!%#"!$%#%(4<;9;<<>=<==<;;;<<<;:9;9-#  ""!&-'*:1
+
++252/44301466655630/.-,-)'#%&$!!# 
+
+
+
+$(('%# 
+
+)59897.0=1$
+*1=;,0;;868<3"
+##" #!"!#$"&&,:?9;?:==<<==<=><=>;<=:;5,$"$#*()))00&
+%.001554478657373110-,+*$"$&&#!"
+!&,()'$!
+
+$284585.;@(
+$8343.9B;45:60# # !#! #$#$%#%5@;9<=<<<<==<<=======;:=6*#"#%#(,,*,02+'"!(385479;99::20/.-*()-(###"
+ &+.1/'!#$
+$1767:1*4E=3&+/79-8<=:9<94%$%    $#"#####$#.:<:==<<<<==<<=<====<<::83+ &$#&-0/..1*#
+!&-/157998761/-.-*())%  
+
+"$*230*% 
+
+$1;:8;:+'3==:304870==989==2"""$!
+&%$####!$")5<<:<=========<<<<<<<=87:6' "!(..-/2-)%$"$'%*.112110,*+,(&%%# 
+
+"+-030+!$#%1=@;:=5&$17;<<==813AA;;<<9*!#%!!!!%%$""$#!$#(3;;9==========<<<<<<<<;:<;1$
+
+ !!$+03//1.)%!!
+!$%&&')'%&$#! 
+
+
+
+ "")141,&###
+
+)5:;:<>8(
+%1<=8@FD2*9AA>=?<0#!(' !&##"!"%$"%#%/;=<=>>=====>=====<<<:>?;83,'
+ 
+
+&.1022.*($!!  
+
+
+
+!
+
+
+
+
+
+
+!$()-253,%!' "2;:78=;+
+ (*8=7<@9,1C?=><?<)%"$#"##%%$"!#%%#&!!)7??;====<<========<;<=:77644#
+
+ $'+020//,'&&%$! 
+"!  !#!!#%(+-.02/'!! 
+
+!*5:66>>6)
+$1/"%032,%,@D=;@=:2&#"!#%#$*&###$$$% #+8?;=<<<<===>>>>??><?=86;=:8-'
+
+
+
+
+$)-0221/))))))('+'&()''**++,.---,)#
+
+
+
+
+
+,;A=78>:,$4<4*$&-* #7E?>;A?2%##%""#"&.)$$$##$$!! "0<<<<;;<<<=>>>>?>><<@?:;?<:74)
+
+!!%*-./1,--,-./..+*-/..../0/-)'&*#
+ 
+,9>8:?;2-&(5=7287'+)$1FA<?9=?.!##$%"#$"%8.&"!#$##"#" &5@<:<<:=?<?@@@@?==@A@>>?=9:;8/#
+
+# 
+
+!&++--,-...**,-/33,,**+'%"
+" 
+
+'4;86:=:2,.2:BA42::6+$/BD:8?>;8'
+(##%$ "'&G9+$"$%##%##$#*:;:;<;;>>@@@A@??>?@?>>A?=78983*" 
+
+
+ #&')*+***)+*'2D?&&###!"!!
+
+
+#.8@;79?:-*2<EB<>><<3*!'9B?@<<@<,!"$""$%$$()RE6*##$"!'##(!"4=<;;=<=?@A@@@@??@@?==>><:9:;:5-&! 
+
+
+
+
+ 
+
+ ""#%%&&$4PJ(!! 
+ ##
+"')19<;49<7.,6A=>>;>CA8'!&7CB@?>>?3 
+$!"#$&'*-SLB3&!##!&"#(!+:><;===?@@@@@??>AA?=<<;:><;97666/*&"
+
+
+
+
+
+
+ !&(4IH1'$%" 
+",466751793+0<B@..:?8<<,&;IDAA:<A4!
+! !
+$$$&(,2[UL=+##%##"#$" "-9=;<<>A???@@?@?@??>==<<<==;988::72,&!
+
+
+
+ !
+
+
+
+'+/8;3+'&$"$&%06::558<<1*1?B6($-8<9:0
+#5HI@>?=@<'$%
+#"##&)(.<i^RE4)%$# !#!"$
+,9;::>C@AAAAABA@@??>>=<;;<<;:8789:960*&$"! 
+
+ 
+ #$',.-*&%%&+//2478879=66:><3&&*8JB*!2CE>@>=EB. #($!$$ ')(4Hth\RB0%!#!$"#%##0::;>@@@ABCCCB@@?>>=<<<;;;;;:969;=<:6452+'$$$$$%! $(()+)-01443458:;8434@E;1-+'")=K>/4?DA<?@?B5"!*&#%$" "$(2DSyohaO7' &"#&%"#%% '6<=><>?@@BBAAA@@?>>>?===<;;;<=<:8898987756653.,$"('%))/;GKMJGHGFDCB><DA5.2;5'#-AG5-9FC=AB;@B6$%(##&#!&("'?V[ztng[J7&"!$&$"##$#!&2<><?@ADDBCFA@@???>=<==<;:;<=<;:8677757<;45;:("%('%''0MZZ\XXY`c`\[Z[HI=7;:00<LG1'3@CBCA>>C;' $%%%$"#$')7N_b}umhe]G0" !#!!$%" #%(7C@BA>>@CDBBA@@??>>>>><;;<<<<=;;::;8335426>C/#&'$%,*2N\\\\adfgeddfgab_[O:4=G?2*5FF9C<8>D@/
+((&$##"$ $)2CVdk}xqjhhZG.#""!#% "#",;B?@BBCDDCBBA@????>?>=<<<<=<;;;;<;;759=CMSV9$&*&%,,3Qda^^daaabdfgggdehe\TU?/-9DHE?=;9>?0##*(%""""$"'/>P\enxwrjee^R<* #%""#!$ !&#(<ABDGFCDFBAA@@@??>>>>>==<=<:;<;98==DMWafh`B%',%&-(.JWRPQQNNR[entxgeehiigeXHFIC>AD=B>6,
+'##"#$#"$%-5DT[`iqlifd`VJB5)%$%&#$&!#)"!/?BEDDCDDBBABCBA????@@?=;;;=;;:<=CMYdhfc^YC*() %-+1@E??CBJFEIOTY^e]ailklikheYG@A<BF:'!
+
+$!!"$%""%.6:BOUYbh`\\ZULD@@9+#&*&$"$&%''#,<GEBCDCCBBCCCA@@????>;9;=<:7=HP]big]TMKQB*%'!"&/8CDADGCJGHJMMLOCBNbu}yoljmndXJ<:5* ()#$$#$# #*7<<>EJPXVPMKGDBA<?>5*'('%"%%")+"
+,=DDDDDDEEDBBBBA?>>>=;:?>==BKV_he^VLEDFPF+#))&/=GFGIHEIJMPPNKH?>?CMat~ypkntn]M1#
+%)#%%#"""*7;;;;<?DJC@??=::8748=4'$(((%#&))*# ':GGDDEGGDA@BDB?>?@?>>=<AJU_aaZQHDEGIJLH/%,..&2AFDDEFDDDEDFFEBCBEGCAM^ryuggnla>&!*&#&"%%$##&3D:78987:=>>>=<;986=8:A3"$'-(#'(&)*"'7FH@BABDCBBA?A><A@=<<CNYac\QLJFGJLLKHI3$-=8.3>ACGB>FDCCAAB@?>>AFGECAMesmflmigA(&)%$#'
+%&
+2LB47998:;;DDCA@>;96><;@>. $()'%#$&()'!"0@EFEDECAAAACB@?=;=@Oad^VLGIGHIJHDADD1&0?:14@CAEC@DBBDDFDBBB@BEFGIIFMZimihiqfI)
+#&%% 
+.IJ869;9;?ABEFFGGDA>:<=9:DB1(&'&$&($%&)'
+
++<IHFEDCDE@?@A@@EFU^ibWOGGIHGECB?>A@1*1>925CEADFAABBBEEDA@BA?BDGJKGJOXahjjnviB"$,)$.KPA78==:=@BFBBCFGFC?A<<;7?HF/(%%$#%'$!'-( &1:EJE@AECBCA=CPThhgTJKIKHGD@@?AABA5,/<6.6CEAEFCCBBABCBA@?>?@CEGILUTLObnoghrh:"$*&!0LUC7;9?>:>@AEGFHIIGDAB>?@<9>FF7%$-+%&%$&'()%
+!)8GMJC?@AD@=K^fefaLAEFGCBBCBBA@AC8,+93,<BDCFECDAACCCECC?>?ABDGHINQMNXitqenzZ6#" 6OQC::<9@@=CDDHLLLLKIGEBA???;;@TP7"'0+$'%&&&((&'$%0>FEDA?=>GVch]^VHADFBAABBCBA@@A<,*95/CFGGIGDEDDEFEDCC@>??ADFJFFJPQQZhsqkwqT+!5[cF4:A@<BCCFGGJLLMLJIHGGDA?@ABBFVR7$!%)'#&*&"%*$%# !'6CFA>GU^__gfYQIAEEBB@?@ABCCB>0+:50EEEGIGFFFEEDDCBAA@@ABCEGFFFJKKNRcskpylHBYfY>:@BFBFHHGHHHSSSRONMMOIGD@ADACJYY= 
+)&&('$#$#"%&$  '.=@FUab`fy{ndN:BE?ABAAACDGCA4-931?AADFEEBGFDBBCDECBBCCCDEEEDEGGFCUijotvgliXC=BBADEHLLIIJHTUVUTSUVQROMLGDEBENbiO1)&++)&(&"$"&,)(#'"2JciXXlvymlRB;FCCA?@@AE>C@8*886<B=:<=ACEEBBB@?CAA@AABDCFDGJIEE@I`aiq{yk[KAFDDJFMMMKMOOMSUWWVTSTTTQNKFEIHFCOhjR?& %-,$
+
+#&&& & ?cl\QW]gda`US<C@AA?BA@B@AA55IL:<><<=:=??A>=>@@AAA??BDFGJORPKJG?IVWbkwwhO@HMJJMQPPONQTSRehihdabc_]WURMIJ@GFEMWY[G+
+ "%&"$# "-,/:]sjYVWUXZSWTWK?AA><=?@BEB=96QM;=<7:<:<?<=>>AA>=DDCDFHIKKRQMIGA;N_UZmrt|eHORPWSY\\ZY[\YV ¢xmiccbccgu
+kVQV]_WQTOB<?<>MgfUVTKKMIIRD`V=>?>;<<<=8500/@;67::>B>=9:;;>A?=?;<=>?AEIHGCDGC=>WcUUfou\YWW_Z^\\ZWUSOK€«°±°±²»°Š€¬®«ª¬Š¥«¯©š­©§¥¡}uleUC;Lbl]JNNIMJ>KCMM}C:><;=;750.0$-,12+,*19;<<9<:9878:78;<<<BGB?=ELF<<^XPQUepspVUUQSQQLLJHC=84 ¢¥¥¥§«¯ª €µŒÀŸ»Ž­«ª¥¢€ 
+{pl\KKhxkimnj\_KPGCe59<==7+$(-0%'*15,(!'/19?6?A?CFEAAHR[^adhuz~zhQBRNIHCJMKE<?BAAA>@??;61.+€«Ž¶®¡~¥Š­¬¢¡wx}zw¢«°š{uhbdaTB69BGIMURF'//3RVSRRMKF3;DN[a_[Zbo} kSA@C?:52.36477;?=9<;:640-,wq|°Ÿ¶ŸŒµŽ®¯¹¿p€§žÅÁªunt|uzq{xvp\B29JX^\`eU++46_qqhdbYK85<N^a_a^^`eggknqro`LDB>@;8:441246<69@==A?;86310ÐÒÏÎÑÑÏÒÐÐÑÑÐÐÑÒÑÑÒÑÎÊœ­}xwtpnjihgggggffffgghioswyzyyyxxxxxxxxw||vmc_`_c^dz
+iZQ`pqmimlotx{ŸÏÒÎÐÑÐÔÒÌÃºµµ¥
+{uqpopÏÐÏÎÏÏÎÏÎÏÐÐÑÑÒÒÑÑÒÑÎÉ»«{wvsonihgffffffffffgghpswyyyxxxxxxxxxxx{yqib_a\bfhrxb]OUjolmklqrx}¢ÂÎÔÓÓÒÐÐÉŸºž±ª
+wlg_\YURSÏÏÑÑÏÏÐÐÏÏÐÑÒÓÓÓÏÏÐÏÌÆ¶€zwtpnmiihgffffffeeefggpswyyxxxwwwxxxxxy{ujda`bccfgj{`\NOalonokmqx|
+ ÀÑÒÏÑÐÆ¿·µŽ®£scWVSNJFEEGÏÍÐÐÌÎÑÏÏÏÏÐÑÒÑÐÓÒÒÑÍÄ°zvtpnlihhgfffffeeddefgpsvyyxxxwwwxxxxxyzrga_`aedbee¢^TNOP]mloompvÀÔÏÏÔÌ²¯­«£n^WPT[_]WOPOLËÉÊÈÅÇËÊËËËËÌÍÌÌÏÍÌÉÂ· xtspljgffeedddfedddeefnquwxxxxvvwxxxxxxxqf`__`^cfgcž[UVYPRcjeonrs±ÌÒÌÎÇŽ§ª§zpeTMP]s}l^XZZTÆÄÃÀŸÁÄÄÅÅÅÅÆÇÈÈËÊÈÅœ²
+}trqnkhffeeddccedcccdeflosuvvvwuvwxxxxxxvnea_^`adgenµÃmX^_eeXV]Y`fqotvŠÉÔÑÍÄ±€©tbSJKWj€¹shgijeœœº·ºœŸ¿ÀÀÀÀÀÀÁÂÀÁÁŒŽªzsqpmkiffeeddccccbabcdejmqssstuuvwxxxxxysiba`_afeccÑ°\XbadgZOPTV`ihhÀÓÐÉ¿¶¬š¡m\SNKWp°¿ªuwxsqn³µ±¯µ¹¹ºŒŒŒ»ºº»œŸ¿¿¹¯¥{usqmjhdddccbbbbba`abcdiloqrrrsuuwxxxxx{qe`a`_b`ebh¯ÚZ`hg_VRVVT[f^cp ÄÔÕÈ¶¡©zeWLOalz«·ª
+~{ªª¥ £¥©¬µ··µµŽ³Žª¬®ª©yxvnkkgeddcaab`a^_`^`cahknpooqsuuuvvwwwzmca``ab`dbzÉÖt\hkj`VUZ_]ihdm»ÌÒÍ¶¢}y^OQU`o²Ž© ¥«±Ž²°®­¯©š«¥ª~upniecdca``^^]]^^_bbgilmnnpqrsstuuuuwkcb`_`afcdØÄg^iie]XZ_cdmkmq
+·ÖÌ±{}z_KHWhl³ž¬§Š¢¬µµŽ|w|}} Š§š§Š©€¡€§ztrndbcc```^]^\\^_`ceghjlmnnopqrrsrrthba_]^`f]i³âª^ced`[[^cdhijsoyÊ»y£z`HHTg|¡žœŽ€¡€©ŽŒŸŸµ§sghdfp¡¡  ¡£ysnfdca__`_\]ZY]^^bceghjkmnmnpqqqqqrgaa`^^_bYyÊß`d``_^^`a_ghkpnnmpyy{]ECRf{ª³žª£¢Šµ¿ºÂÊÄÁœµ~sl[X`n|wojfb]\]\WYVTXZ[`adghhilnmnopqqppsh`aa```b]ÜÓ~e][^ab`_]\`gljqjMPdvw}fFAQb|šžŽ¯ €®¶¿ÂÉËÆÄÇÆÃ
+}v_YVXeu
+}wqjb^][WVTSVY\_`cfghikmmnoppppnsf_`a`aaah·åÁviYX\_`^\\[]bhhmV>Hi||n{U?Jbx®Ž¬ ¡¢¬°ÀÐÇÊÏÉ¶
+mpi]UO]ku|
+xoieaZWVUTX\]^adfghjlmmnnnnnmqe^ab`ac_yÑß©yo[XZ]^\Z[[_achb?=_ku~rukD;Sp§«¢­ŒÂÑÓß¯oN;6/šulaYJPX_inrs{{sni]XVURUYY^`beghijllmmmmlknc^ab`ac]ßÔ~r\Y[\]\[[Z\a^aV5;^fxrzU7:]«©®ÈÚÚ³vO;AA6-,igZK8<@KU]ainv{ysm[[\[VTWZ^]^addeghiiihhhijb^__`baaßÆwW[\[[[ZZYZW[bB2HUl}uolF5Kn§ŽÅÈšsT=<977877jeWH;;<AINQX[hpu}voh`[Z_da]\]\[]`dffffeeefghjc___`bbZ¯àŽ{SZZXXZY[ZZ\fU46Rbtnof;<X|¥žšmB<;43245654ywidVLFD@@BBBDPZahsz}
+zrlfb_]eolgiba]Z\`b`dcbbceghic``^_abcÅØ¡z_\YWXZ\]]\_d=*B[cdnc7;^Š¢xE696533333322sqihbaZYNKFDDA=<?FMXfmpsxxyyy|}{{ytpmicc`gsusxnlf`\]^]aa_`bdefgb``__`_jÆÖ¡~wm\YWX[__a]cW,.S_`cqd:=d~~xxVHD6171124579=@mjb`\ZWZ_]YXZWSTCCHT`fjoijkjjlormkkic`]Y`c`et|{~zwrld^^____`abbbea_`_`_\dÄÖ§xxl_YXVY^`d]fH+8]_hjsc<4\sbC>:733202357:@HNonjgd_[]]]ZZ\[XXVG>EQZ`fefedcehkifeaZSNIQY^coy~~|wmb__^_````_`c_^___^ZjÊÃylg_\XY^^e`\40E__lipd?7Z|jVF8885347868:=@HQXjkmnmkjiijihjhecdQA?ELTZVVUTSTVXZXVRKD?:@ISY`kx}~|ukc^^_a`___`a^]^]]]ZnÅº¢yrndc]\_]baG%7Tc^k
+cnhD3TntePF>944414737:?EKS\bffjkkjkhjmmnomhg]WQH?=FOJKKKJJKLKIHE@=:7<<AIQ^mux||ukb]_`_]\^_`]]][\][bŽÌyyroef`_`Y\a8&B_fal}apmG8Te`J<;93532566:=BHMRW\`ccbaaabbabdgihfdaZND?>@BABA>>>>@GDB>97874579>K[eox}|}wjaa][^_]\_[^`[]`]^Ð~skhg]_bY\P*4Nci_j}mlqS?JUK;655235348:@FHNRX[\_]]\\\\\]]]^__^\Y^XMFB@<9:<;99768A??><;;87899<DP[hszz{}|vif^Z\^\Z^[_`[]`^TÒŠ|tlmeaba`_;)AXdkch
+¡qmseNGE>754534878=@FLNQUY\^`YYYXXXYY[ZYYXVTQTQLHFC>978765312<;=?>=;89;::=>FR[gtz|~unc]^___ZY\]YZ^\\i±š}yyqqegcbfM+/Pbfnhj¬hqhUF<7444726=>@EHLNOSWZ^a`VVUTTSSSRQONMKIHFFFECA?=;;:8853589<???=:;>>?B?CQW`lv{}}}zukb^\\_YX[\YZ]\_Vywwqll`dd8+<Zcglikµ¡jjXI>932654:?GFGKKNNPTZ\^a]LLKIHFFEEDDDCB@?==<<;;;;9854532557=A@BCCBEFGGBDRY_irvwxz|}xne\Z\[Z[]]]^]\Wipqtyzvrqof`R06J\bgkfj¹©x\FB:865:98KLPMKMLNQUV[\\`\==<;9876::;<<<;9:8558::9541120/247=BBEHILLLMLFGQS\iqsstww||vl`Z[\\\]__^^UX\ajfmpssnpuZ70GXaclmgiÅ¶sI:@9:945;ETPOLJKLQQXVY\[_]1100//..01233333542369::6656842436=CFKNOSQQSQOPUT[fmpprtqtvsmc[[\]]^__^^b\Z`d`gnopjprI+9V`gimmmiz
+ÏT:7;7:715AQRKIGHJMUMYSU[X[[)+*++,+,,--.//10./0124683458:51225=EKQVWXTUXWX[\`_adhmopuusrpia_[]^^_^]_^X^`Z^_^iljn[40O_djmhksjq
+Ée69<:9;79FV^RIFGHILUJYSU[VVW(()*++++..//./-.++,-.1460246850.16<DKSX\[[ZZ\]\]cbbeimoppprrsshY\]]^^^]][[^_\\\\galf94L]cemljqqke89=<=738H\c\MDIEHEDRHUMUYORV'''()**++,,--,++**+,-/251248:50038@GLRVZ[\]^__]]`adgknpqoopqstk]^^]^^]]]\[^_]]]][af]LV_dkgkpllnjbH75C9:5:K\b`ZJHCEFAGQFPMNSJLP&&&&'()**++++*))*+++*+-/1149:4/25:@EHNU\Y\^`bbab_beikmprqooprtma^^^^]]]\^]__]\\\Ya`t|rffjgkmilql\{],7;@@7?M^e`UNIKEBB:ANBNKMQFLN$%%&&''()**+**))*+,,*+,/124562026<CGGKRYW[^_abcebdfhjloqqpppqsog]^]^^]]\]]_`^]\[\bf££vhfeikmjgln_\:75=4>3Nbe_ZRLLEC<EF@K?NDNL@KM#%&'&&&&()**+***)+-,,-/2253//0237@JOMLNQX\^_`aaddeghjlopnnppprrn[\]^^^]\YZ^`___]ZeÁ£vjejkhoohn}jI<;7:26KjvfUQKEEB@==C9E=G@MB>AN"$&&&&%%'()*+++++-.-,-/1375/.256:CMQONPSW[^`bbbddefilnoommpqopqq]]^^^^]]XY^a``_]Zf Çpedileiv`?@7>85<Yln^SPNK?F>E:?>E;>@H8B:Q"#%&&&%&'()++,,,-...-./14984357:>CJMNPUYX\_accdgcdfhkmnnmmpqnnooaa_^]]]]ZZ^`___]bo¶œzgaihppr
+¬³A6:7>66OimcVRLGEB>=;><D?8?=C1<;N"#%&&&&(()*+,-,,,-./01456:;9989>?DJNPRVY[^_`abdgddefhjmnjjnpnnppeca^\\]^ZZ]___`_ey»¬pcitrxŒ¯^.:?9<3>`pm_RRLDCVKbAC1CC4D7>,.;B"###$$&'*))*+,,-0./23699;=?>:8;@AEIKNTXX]^`a`acdccdfhjlljkmmmnopkhb]\]]\\\]^```^mÁlp|ŠŸ=@A<?95TlcaZNFI^wx]I<MJ=D8G,$A?#$###$%'+**+-../31245798>@CC?;<AAGJJOWZX]_``_`bcdddegiklikmnnnoopib_]\\]\]]]_`bbo»sz±µ\5B=@A6FiwhbVOUv¡²oN7EL48;H2.=D%%%%$%')),047753212569<;>AEFB==ABHKKPY\Y[\]^^_abcbbbegjlijmnnnnnrjb_^^^`Z\^_b`_`pšÂŠ
+Œ9BC;AA4[use\NZ°Äµpnom>7;?4+&, %0;))(''(*,-28<==;9978;>CFDADGHB<=BEILNU[\YZ\\]^`bccbabehjljlmnnnnopja\\_a`\^]_b``eÁÉ
+ºt:CC>?DDsvd_[VwµÌ·ªpo]P180$,5<KC80(.-,**+-/9<>=<=>?<::=AEEAEGLNG>>DKKOV[\ZX\]___`abedcdgjllllmmmnopsj`]]^^`da\\baguÓÇ{
+§²P8FA=:@aq\TQ»ºŽ«¥dbD-*
+,Poqow~ycO320.--.0;?BA????BACGKNLFBELQLB@EQOT]a]YX[\^__`abdddfikllnmmlmnopzmdca\[`fc]_dbkµÙœ
+Š9=BB=8Dx~m\Xm£¹°®š kJF),;W~xz{pv}<;841/019?EGFEA=@AEHKOOJFFMTPE@CPPU^b^YWXZ]^_`abcegijklmmmllmnoo{riec_^`b`^chcoÌ×®§e3=CDA<_th`V¹Ž©«£hK0Mg]n{|wsCA>94212=BFHIGB=BCFHJOQNQOQWSG@@LNT[`_ZWZ\^`aabbdgkmmmmollllmnnottlb`db]^]\dhewÑÍ¡
+šD6ECAB:vk^_q°ŽŠ®€|[4
+byd}pm
+{@?=:7679?@FLMHB@BAFKLLNPPMPWVKB@HKS\`^ZYZ]`bccdehknpponnllmllmnpqqoc^__Z^\^dki
+±ÖÃ
+{-FDDE3OmbbX¶®°­|jM4G
+l¡xoY??eztv@?=;879;@@DIKGCA?AHNMKLMNNRYXND@EIR[`_^_]`ceffffikmoppnmlllllmnosqpha_^\_Z[ZfqÄÖžS3GCBD2_zj\ckšµŽžš{eO/wp]K0!*O_TO==<:88:;><=ACB@>?BINKIIJOQVZYQG@FJRZ^__aadgijiiikklmopmllkkklmnnvurlc^\[__d\gyÐÏ«:@GBDA6jnbYb°¶²³§{rGPymbsLD+%(?NE::::878:<<::<>==<>@EHEDEFPSVWUPHAFIPX]_`acehjkjihkjjkmnlkmlkklmnnorpnfccbbgibm¬ÔÆŠy<BFBE9@kneaeµ¯Ž¹©qMnisZ[B2),('8726777679;=<<<=<<<99<>=>ABLPRQPMG@DFMU\`bbbdgijihgjjijjkkkmlklmnonpupm`][Ucha`rÁÚº h><EDABRec^_wº­·Ž²²`QWr\C.:,$).&35:12332357:::9999:33589<@@EJNNNMHBDFKS[`bacdgijihhiiihhjklmmllmnooouoqfgf_`gbhxÏÚ²W:?@BA<Vfca^ž©°·µ·jQoF+&2K.
+-4<64,-././13654334560/0349==AFKLLLIDFGKQW\__bdfhijihgffffhkmmmmmmnopmqhnddb\aeht
+¥ÓÏ«y}zJ9E?A?=Sb`\c ¯¯·µ«±fWxqn='()cG((<F@0*+,-,-/132/./123.,,-.389?DGIIIGDFGJNTY]_`acfghggedddehknmmmmmmopnoepiihcf_dwžØÆ }usqthC;FCD8=N^bZn®€²°³§š¢o_zqM-)/9QS=$6FO8()****,-......./.-,+,/13:?DDDEEDHHJMRW[]]_beggfeedcceimpmmmmnoppqqnuiiggcbjÀØžy}ihbioT@CBAD8ANT_]ª§°Ž­ª©€em<1.78+JH840DL()(('')*)*,--,**-,*))+-.39>@ADEEFFHMSX[\\^adfgffffefiloqmmmmnoppoqotgfegchošÆÅwqpa^_hiO<AA@B8CNX]]ª®¬©­Š€ŽŠvq~cP4<1.<LO?/;K&&'&&')+-,,++,,-,,++,./039>@BEGHDDGMSXZ[[]`dfgggffgiknpqonnnnoqqmrptgdehgpw§³yrlpqogihjL;AA@C=EHSVb«®³±±š¥tPp~W56=31=KE53J%&'((*+,,+*))*+,)*+-/0117<ABCDGIDEINSWZ\\^beghhhghjlnopponnnnoqqnsrukfeggpwilr{zyrmhpM<BB@CAEHOSfª¬±®a?:wC.363;4:C:4V()**+***)*+,,,***,.145558=ABBDHJFGKPSVZ^_acfhihhhiknqssrnmmlmnopqusvpiedft¥xnszzusoqM;BB@ABDMPVd©®±oYPJF9yxrZ?45&B95;7?f)*+,,+*)++,,----,.149<=>>@BDFHKLHJNRTUZ_abdghihhhilortttonmmnopqsvsvulgdfv£qt|~tupnnJ<CC@@ACLKTb«°°ZPHJJ.nqjcnR?8+857<CVp)*,...--/-+*+-02./26;@CFFDCEJMNMJLOTUVZ_acegiiiijkmorttsooonopqrsvtuulget€­
+xzsnmI=ACA@ABGFQ`©®£_VKC=8^ikxaB=C69?GVfn+,-/00//110012455569>DIMHC@DKPOLKLPTVWZ^acehijjjnnoqstsrnnnmnoqrsvtttjffuš¶°tsllmH;?@A@A@FKU\¥°x^PJE<>N~xfCP?IGJU]b-/012333455557:=;:9;@GMQKFBELRRPMOQUWVX_cdiiillorprtttspnmllmnpqtuttsmhh~¯ÁŒ tsg`iH;@?>@B<BQQX
+¡¯qYTOLBNNn}TX^f^ijhd./13555567888:>A?>==AFLOOJFGMRRQQSUWYXZ`eejjkmmqrqrtsssponnmnpqrsuuuupkk
+±ÆÀ¢sqgagE8>>>?A9AHQWv·j^UKLRPVQ
+|}|yq||,.0356668:;;::=@BA??@DHKLHEEINQQSUWXZZ\bbbfghjkprqsuuuurppooprtutwvvwtooµÌž~pogagC6==?>A==FOPo±n[SUTY_mZ\,-/245568:<;99:<?><<=@CFECA@BGKOQTVXYYZ_]\abcegmqqsutvvsqqqqrtuwwxwz{tou¡¶Ìš
+}nme`hD6=>>?A<:DLHh£{dbX]\ZtnT\.-.1345779<<;::;::989;?BBB@>=@FJLQTUVUUXWY^__bekoprtsuvsssstuwxyzyx}~ro|¢±»Æ~}{pld^iE7=?>>?5=CON^i`[ca_~tkedo~{ -,,.013679;<;865666657:<<==:8:@ECJNOQRRTQV^]]aejnorssuvsuuuvwxz{|{y~~qq¡°œ»|xpld_jF8>?=>?24HLSXqw]cffj
+|aVges~w|)((+-.03579984.+111112464564128=<CHILNOPLU^\[aeikmqstwyvxxxyyz{|~~z}~rx«µÅ¯ztpmdaiG9??=??2*DGPVV
+zxorfQBDGf¥¡¢'&&*,,.1135762+'+,---.01022/++/4;BFFGIIJJU`][bfjilqtv{}{{{|||}||}u~žžŸz{
+
+wsplc`iG:@?>?@629KTX^j¥¬€
+
+zM>CNo² £œ'%%')*,/-021-*)+)**))*-//00/,*,07@CAAACEIZ]]cghigjosv{}z||}~zu
+£®¥zoqztlfb`fL<=?@=@4.4EO]_\o¡±©¬§[]C[~²œÁÈ&$$&''),(*-,)'()***(()-/./0.--/009>>=>@CL[^_gkmlmosvx}|~~}x©­{l~r{skeb`fJ<>@@>A1/7FLX_ba|© šš¢fte~±ÍŒ§$""#$$&(%'))((())**)'(*,-././12109>>==?DQ^admrsqqswz|~|°Šuyzqgb`^fL??A?>>2.4AER_g]bu§§¡§§¬­ª²š££ §­°o$#""""$%&'''''(('(+,*((),./025536=BBAACHVbgkrvxtuw{~
+µ£}{|xoe`_]cI>@@@>>;21=BOW\dilv ª»Ž¶œ·¹±ŽŽŠxlp%$##"""#$$%&&''&(*-0/-,-.0247:;98?EILKLP[gmqvxyuz|
+
+¹yzvmda`_`F=@@???0),?KZ_`afilkv{|¢n\mrqzur%%$#""#$"#$%''((*+/231234568:=@B>FOW[XWZbmtxy{|x}
+
+žrz}umda__`D<A>=>=6-/?IT[^ghnklimnmqrwukkjNAqqpwn|$$$##$$$#$&'()**+-27989;=;;<>@FLHQ[dfc`cirw{{}|
+
+
+¥³kXxx~umd_^^`C<A>=><9-,9BQ[bhfihnlprpurrsx{{V%Yyqyzy#####$$$$%')))**-06=@??BC@>??BJTMU_gjfejkrwz{}}
+
+ª³WTvq{smd``_\A<@>>@?<-*7AQZ`bjkomqpsosqru}xxk*9qx|xm##"""#$$$%(*,,,+349AFGGHHKG??FMQT\chkjjnmrvwx{
+
+~µ€^tyt{unid`_`\>8@?@E>;1+1>LY`chiknmnqutssuywtuK':auqu""""##$%$&*-..-,24;DKLLLNPLGHLPS\ekmonnoortttw|{~
+
+}³|r}xrlhda__`94?A>D?A4+,6FV__dhjnoquwvusuxxupmJ08F@@####$%%&%'+.0/.-25<FORRRRRNLMNOS[dihhihhnmkjjlrwuy|~~~
+
+
+|°šn~}upjge`^]^2.=C>A?I;1-1?NT[bgjnorvvvvuvwwuu~u]>0,1####$%%&%'+.00/.13:ENSSSTSQPPNPWZadccccelgcaaciptwy{}
+z©{°rxz}tpkhe`^]Z+(:B>@@C9301?PUZagjmoqusuwwwwvtz{|vda_W####$%%&&(+-.//..18BLPPONOPQOJLUXZ\]][\bgb\[]`fljkmptz~
+
+
+
+
+ysÆdz|splgd`__U)$9>>@AB:1,.=OYYagjoqrusuwxwwvuvztsw~yu####$%%&'(*+-...,08BILKIHJMNJBBJPQQSTQRY]XSSW^eikmoqv~
+
+
+ytÄk}qpkfc_`aO*">=>@BB=4--6FSY`gjpsuwsuvvvvvvuuuzusrx####$&&&&')*+,,,,/6=CFEDDEGIG?=BHJLMNMNSUPJJR]dfimprv~{yyÁp~rpkfc``_E)"IB@@B?>6013>NV^ejptuvtuvwwwwwyttwpwzv""##%&&'%%()*****-16;>@@<;<?A=;?AFHIJKLNTNHHQ^efekqtx}mœt
+}srlgda_];'"TICACFF;21.5IU]diottstuwyyxwvvzvxxxsx####$%&'&%&')**),.024677655;?<;?>AEDCFIHMMJGN]fgkrwz~
+}tqzcºu
+ytqmffd^]4)&X]@:GHAB;2-3FMZcfloquxxyzzxxxwvvwvwvv%%%%%&&'%%&&'(()'*.13344/15<@;9>@CFECEJKNRRPTalprw|
+xsnsc§¡i
+xtsnfed][.%'[lI=GFAEC3-5;FS\cikmruwxzzywvwwvwvvvv&%%%%%%%%%&&&'()()+,,.14/25:=;<BGHKKJOUWUYYX]iqsx|
+
+srgg_³]~xstnhfe`[1%)^|V?>EEHKA410?IT^fjlqsuwyzzyxxwuuutts&&&%%%$$&&'&&&(*))**+,03247:=>BHORTQOTZY_bbadmtu| 
+qpdc\Ÿ_|zwsvmgfdaY*!)`w^HA@KONJ6)6;DOZcjnpqstuvxzzyywwwwwv''''''&&&&'&%%')''*-../0047;@DFIOX]YTZaaelpliox} ¡ qofb`Á`Twx
+{~wykee`^R)'3eZOD=AGNJMC/59AMW`ikinqtttvyzuuuuvvxy((''''&&%&''&'(()()+,,,.368;CJNQN[fb\ajmpuwsrx}rni[h»qm
+z~zzieg`_P%#2cCJG@BDRSPP>,19ER[dhfmrvvwxyyuuttssuv(('&&&&&''()****.,*++,04=@ACKTY\X`hhdfln~}zwy
+
+opmPqŽ~z|zyegi``P+%1a<IF;:DV`SNM5.0;KT\dglptvx{zxzzzyxwxx*)('''''**+,..-,--/2348=DJMPX_ab__fmrvyyzx}
+lsrI}µ­{zuywcfi^]L'"2c?LKB?BCZ]TW@2.6EMT^hilnqv{{yxxyyxxyz,*(('()*,++,-.-,.2::;@ELQV\`dhigbafpru~
+}~
+jGÃœ{yv{xfheaW>"#GXHJB@P=BKk\SS>,+>CN\egejd_ffais{pqw,+*)(*+,1467643218EIKPT[^bfilnnlf_`jty}~~|~
+
+nF»Œx}wxwwgge\Z;&ND;48/\[8FS][\L:)3ANV``fiQINONSVmnlw-.-,,0238=DE@:77;ETXY[]aeinqsuuspfcktzzxyyyxx{~}{yxyy}nBŠ·³xxxxeei]\98FWMENSLmqB@@TVWVK.(5CIU\d^J<QKJL]|
+§µ§-..++/34:AKMG?<;>JZ_`cdhfkptwyyxqifimqtusttuwz~|{ywutuuw{k<«²±ysw|sbfi`T:iodh^qpprke9BBPN]\C1/8APP`XGLWEBFTq­¿Ç121-+.356=FJE=98@N_ccffhhmswz{zxsnjigkruprstw{~zyxvtuvv}UL·zyvx~nbhd^HClkbbdfikqonQ6;9CW_UA15=HL^[BgRQVJQºœœº¯3331/059=BJMG?98BPaeegeejntxz{{z{upmjmrsmnpqux{|zyxxx{|~LR¶}yru~ngk`ZBUomjfmkpoy}lM;==HRTK8679BYeVfOœ§²ÐÉÅÂµ3333215;=AHKG>75>L]bdjkkjnrwyz{|{wsqopqpmnoqtxzz{|}~ @]Œyyvu}qhkcXGeywsprvutnyrnXC>;CFILB=644JWpsP€µ°¹¿ÂÃŽ©;:;<958=@ENSOGAACP^`bikkmosvxy{|yxxxvvxvrrrtx|}|~£<fŸ{xx{|qegfVMlpotptsssqxkb_KB<?B?FF>43-OQpHv}€Ãœ»¿¹œ6?D=5589?FLMJE@=IS[cffjlnqtwy{}~xy{{{{ywxwy{||¡¡§v)¹¡x|~}|jefbZXiqqruurqrtsod[YP>D>:6::?;)WkqoTž§¯š«žž9@EA<:;:?FLLIEBAHR\fjjnnruy|}}~~|}}}~~}}~
+
+
+ £ ¡{0xº©w|vddifXUmortssrqoqpme\\ZQ?;;6::;84=VÆ¿¥¯Š§·¯Œ:>CDB@??GMTUTSTUV_fmompotx}}}
+
+ ¡ª«¡x+[š
+xzxgiieURrnrttssrqromeZY]\PC=:;79<5+5iÊêÓÜÔÆÀÅÁ¿ÁŒDFJMNMMMQV[^_acehmpssqssy|
+
+}~ £§ªo)Hyw}rhifcYTtrrsvvqqtrpndVTZ[]OB9:5799;40Y¢ÐÛÜÛÐÊËÌÎÉVVX[\\]_fiklnprsvyz}~}
+
+¡ ¡¢£¢£€š€i0@
+zwogjifXKkustutpnpoomdWUYYXWPA@<9419556@o«ÃÄÄÊÊÍÑÉdefhijmprtuwy}¡¢€€¥€££šªZ-8j{ywsfhgiSBhttttrnnpnopg[X[YZ[YQL?88=57@>14P­ªŠ¿ÌËÓsuwxz|
+ ¢¢££££¢¢­F%0V~|wwoabdgS?hvsswpghttqqj^YZY\YVTWG>?6;;3<8/;8W¬œÂŠš|
+
+
+¡¡£€¥¥¥€¥°@%'G|vw{nefbeP7W|oqzpZ]rxrpk_VX[V[WQ_aUF>;<9:;@;406Kt€¯ £¡¢€€¥¥€££©xD/*?~v~zy}{iklggV/Atvqvv[Qiusnf`WW]XZTSbmf[UH@>>;;>A79;2:`
+
+ ¢¢£€ŠŠ€€­£l=4.Cs|{z~zehljgQ.;mvrtx_N`noke`YWZYZUUcljga[QLF@>=@:F@<A5/
+¡£¢£€ŠŠ€€ªšk401Kt{|||hikkcK2:asrrybJSaddb_\[[ZWRT^cdgdec]UMF=?=:?GIH?
+
+
+ ¢¢££€¥Š€€¶«j8//My|}z{kiikaG68XptovjQHW`ca`^[[^XQT_cabbhjf`[QIAB8BC6>@
+
+¢¡£¢£€€¥€¥W.?ao~{yyw{{idineH42Ohrlpp[EVchda][Y\YRU`fcbfhhfe`\YTOI@A?<C
+
+¢¡¢¢£€€¥€®M>}pywww{xgbjpgH3.H_lhjpcKU`fb_]ZZWYUU^babddfgfc`_[\TPNI@>
+¢¡£¢£€€¥¥¥H=©{lwvwy|xickoeF10DYfdei_QOX[[Z[[[VYYZ`bbe`bfhgec`_`VXVOPO
+¢¢¢££€€ŠŠ²ICoyvuwyzyeammdC-.;P\Z\ZPNJORUX\[[TUUZbcabcfgfeecbb\_TT]X[¢£¢¢€£££€ª:9h`ivttwwzxjhmn]B1,7?JQQNNQQPRTY[\[SUW\bcabfgggfdbbbc\RT][\
+¢¢¢£€€€€¥©>A\apstuvwzwlilnbPDADIOSTTVWZYXZ[[ZYUUTZccaceeffedcbab^RS\]^
+€¡¢£€€€€¥€OTgmuvtuwwz~vkjlolea`\^^]^`_^^]\\]\[ZXSRYccadddeeedcb^`]RT^`_ ¥¢¢€€€€€€¢ls{wsktwxwy~|ukjkljgfedec_`b_]]]]]^]\YXSRZdcaeeeeedcba]_\PV_a] €£€€¥€€€€srzwsymvy{zy}{shikjgfebaba^_a_\^]]\][ZXWSS[ca`effeedba`_`]OV]^Z ££€¥¥€€€€wz}~u}yxz|zz}yqgimmjihfaba__a`____\[ZYXUST[b``deeeedcba_]\NW\\X ££€¥¥¥¥¥Š|tuwy{xy}xniilkfdcaa_^]]]]]_^]\ZYYYVUU[```cfffeecbb^\\NVWYW ££€¥¥¥¥¥Š~|rrrvxyvx|wkgfhheddcc`___^_``_^[YWWWWVVZ`aacfeffedbaa^^OURTTd`]^uŒ¿ÅÆÈËÍÑÒÔÕ×ØÚÜÝÜÛÜÝÞßÞÝÞÞàààßßßÝÝÜÚÙÚÚØØÛÚÙ×ÖÖÔÏÈŸœŒœ»»»ž·¹ž©ŽºŸœºŒŒÁºÂÆÈÑÒÕØØØÚÛÛÛÛÜÛÜÜÜÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÜÜÚØÖÔÒÑÎÍËÌÈÉ·d`_`vœÂÉÊËÎÐÓÕÖÖØÙÚÜÝÜÜÝÞßÞÞÞßßààßßßßÝÝÜÚÙÚÚÙÙÛÚÙÖÖÖÖÐÈ¿ŸŒœ»ºº·¹¹¶Š°·œ»»º¹»œÂÇÏÒÒÖ××ÙÚÜÛÛÜÜÝÜÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÝÜÜÚÙ×ÕÓÒÏÍÌËÉÉ¹c`acuŸÃËÌÍÏÒÔÖÖØÙÙÚÜÝÜÜÝÞßÞÞÞßßààßßßßÞÝÝÛÚÛÛÚÚÛÚØÕÕ××ÐÈŸŒ»Œ»»ºž¹žŽ¥­Žºž¹º»»ŒžœÊÒÒÖ×ÙÙÛÝÚÚÛÜÜÝÝÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÜÜÛÚØ×ÕÔÐÏÎÌÊÊ»b_`cuŸÃÊËÌÏÒÔÖ×ÚÛÚÛÜÜÜÞÝÞÞÞÞÞßßàßßßßßÞÞÝÜÛÛÜÚÚÛÚÙÖÖ××ÑÉŸ»º»¹¹¹ž·¶µš¬³·µ¹ºž±§ÑÓÖØÚÚÜÜÚÛÛÛÜÜÝÝÞÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÛÛÙØÖÕÑÐÐÍÌËœa_`bvŸÃÉËÎÏÓÖ×ØÛÛÚÜÜÜÝÞÝÝÝÝÝÝßßàÞßßßßßßÝÜÜÜÛÚÛÛÙÙØ×Ù×ÑÊÀŒº¹·¶µŽ¶··¬¬³·¶¹»»ž ²ÂÑÔ×ÙÛÛÜÜÝÜÜÜÜÜÜÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÝÜÚØ×ÖÒÑÒÏÎÌŸa``cy¿ÅÉËÍÑÓÕ×ØÛÚÜÜÛÜÞÞÜÝÝÝÝÝßßßÞßÞÞßßßÝÝÜÜÛÛÛÛÙÙÙØÙ×ÐÊ¿ºžž¶ŽŽ³¶·ž®«³¹¹žžžºªŸÇÔÖØÙÜÛÜÜÝÝÞÞÝÝÜÜÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÝÛÙØ×ÔÒÔÐÐÍÁ`_`dyÀÆËÍÎÒÕ××ØÛÚÛÜÜÜÝÝÝÝÝÝÞÞßßßÞÞÝÞßßàÝÝÝÜÛÛÛÚÚÚÚÙÙ×ÏÈŸ¹··µ³³³¶¶·®©²žž¹ººŒ­ŸÅØØÙÚÚÛÛÜÝÝÝÝÝÝÝÝßßßßßßßßßßßßßßßßÞÞÝÝÜÚÙØ×ÔØÑÔÏÅ¡^^adyÂÇÎÏÑÓÖØÙÙÚÚÜÜÜÜÝÝÝÞÝÝÞßßàßÞÞÝÞßßàÝÝÝÜÛÛÛÚÛÚÙÙÙØÎÇ¿¹·žµ²±±ŽŽŽ­š±¶µµ··Ž©»ÈÛÙØÙÙÛÜÝßÞÞÞÞßßßßßßßßßßßßßßßßßßßßÞÞÝÝÜÛÚÚÖÚÓÖÒÉŠ_\_ewÅÊÐÒÓÔ×ØÙÙÙÚÛÛÛÜÜÜÝÝÞÞÞÞßßßÞÞÝÞßßàÞÞÝÜÜÛÛÛÚÛÙÙÙØÏÅŸ¹¶·¶²²²³²³­©­°¹µ¶¹·«žÅÂÛÙÙÙÛÚÛÞÞßßßßßßßßßßßßßßßßßßßßßßßßßßßÝÝÜÛÝ×ØÕÕÓË°Z^cevÁÊÑÑÔÖÖ×××ÚÚÛÛÛÛÜÜÝÝÞÞÞÞßßßÞÞÝÞßààÞÞÝÝÜÜÛÛÚÛÛÚÚ×ÎÅ»·Žµµ²³Ž°³Žª¥­²¶µ±³µŠ ¯ÈØÙ×ÙÛÛÙÝÞÝÝÞÞÞÞÞßßßßßßßßßßßßßßßßÞÞßßÞÝÜÜÝ××ÔÔÔÎŽ\\aexÁÊÒÓÔÖ××ÖÖÚÚÚÚÛÛÜÜÜÜÝÝÞÞßßßÞÝÝÞÞßßßßÝÝÜÜÛÛÙÛÜÚÙÖÌÄº¶³³³°°±¯°±š€ª°µ²ŽŽ¶«®Ô×ØÙÝÛÛÛÞÝÝÞÞÞÞÞßßßßßßßßßßßßßßßßÝÝÞßßÞÞÝÚØÙ×ÕÔË®_[^dvŸËÒÓÕÖ×ÖÖ×ÚÚÚÚÛÛÜÜÜÜÝÝÞÞßßßßÞÞÞßßßßßÞÝÝÜÜÜÙÛÛÙØÖËÂžŽ±±°¯¯®°­®ª€Š®³¯³¯²³¶·ÁÒÖ×ØÝÜÜÛÝÝÜÝÝÝÝÝßßßßßßßßßßßßßßßßÝÝÞßßÞÞÞÙØÛÙÖÒÉ¬]]`fr³ÌÒÒÔÖ×ÖØØÚÚÙÚÚÛÛÜÜÜÝÝÝÝÞÞßßßÞßßßßßßÞÞÝÝÜÜÝÜÛÙØÖËÁµ²¯°±°°°¯«¬«££­±µ°¯ŽŽœÆÏÔØØØÛÛÛÚÜÜÜÝÝÝÜÜÞÞÞÞÞÞÞÞÝÝÝÝÝÝÝÝÝÝÞßßÞÞÝÜ×ØÖÔÒÍ¶[\aft°ËÒÒÓÕ×ØÙÙÚÚÙÚÚÛÛÛÜÜÝÝÝÝÞÞÞÝÝÝÝÝÝÝßßÞÞÞÝÝÜßÞÛÙØÖÊ¿¶³°°°°¯®¬¬­© ¢¬ªŠ¥¬·µœÇËÖÚÙ×ÚÚÚØÝÝÞÞÞÝÝÜÝÞÞÞÞÞÞÞÝÝÝÝÝÝÝÝÝÝßßßÞÝÝÝÖÖÕÓÒÍ·\[_etŽÍÓÒÔÔÖ×ÙÙÚÚÙÚÛÜÜÜÝÝÞÞÝÝÞÞÝÝÝÜÝÝÝÝßßßßÞÞÝÜÞÞÜÙ×ÔÈŒ¶³°­®­¬ª©ª«šš£šŠ££«ŒÆÔØÙÖÙÚÚØÞÝßßßÞÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÞÞÝÝÝÜÕ×ØØÓÊ®Y^bcpµÏÓÓÓÕ×Ø×ØÙÚÙÚÛÜÜÜÝÝÞÞÝÝÞÞßßàßÞßßßÞßßàÞÞÝÝÝÝÜÙ×ÑÅ»³°­ª«ª©§ª§š©¡ €v¢¿ÐÖ×ÕÙÜÜÛÜÝÞÞÞÝÜÜÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÞÝÝÝÝÕ×ÙÛÖÊ¬[Z_cj¶ÍÒÔÒÖØÖØØÚÚÚÚÜÜÜÜÜÛÝÞÜÝÞÞßßßßßßÞÝÞÞÞÞÞÝÞÞÚÞÜÖÖÎÆ·±®¬ªª«ªš­©£š¢^]]y ÁÐÕÖØÛÚØÞÛÜÝÞÝÞÝÜÝÝÝÝÞÝÝÜÝÝÝÝÝÞßÝÝÞÝÞßßÞÝÞÚÚÔÛÔÇŠZZ]^gŽÏÓÕÑÔ×Ö××ÙÙÙÚÛÜÛÛÞÛÜÝÜÞÞÜÝÞÞßßÞÞÞÝÝÞÞÞÝÝÜ×ÜÛÖÔËÀ·²®«««¬ª§©«¥¢kS_cwœÏÕÖÔØØÛàÞÝÝÞÝÜÛÜÞÜÜÝÝÞÞßÝÝÝÝÜÜÝÝÞÞÞÞßÞÝÜØÙÝ×ÖÎÊ°UY]]g|­ÌÔÖÒÕ×ØÚÙØÙÚÛÚÛÛÜÝÜÞßÝßàßààßÞÝÝßàÜÜÝÝÞÝÜÜÛÜÚ×ÓÊº³±¯«©ªš¥€§§¢ ^IX^pÁÉÓÔÑÕÕÕ×ÜÝÜÝÝÜÜÜÝÝÞÝÝÛÛÚÞÞßßßàààÝÝßßÞÝÜÜàÜÝÚÜÖË©SW[\hvŠÌÐÕÒÔ×ÖØ×ØÙÛÛÚÚÛÛÜÝàßÚÙÜÝÜÜÜÛÚÚÙÚßÞÞÝÝÝÜÜÜ××ÚÑÆŽŽ°­©§¥¥£¢£¢\LY^l¶ÅÏÒÏÓÖØÚØÙÚÛÛÚÙÙÝÝÜÜÝÞßßÝÝßßßßßàßÞÞÝÝÝÜÛÝÙÚ××ÒœTTVXeoÇÏÔÔÔÔÕØ×ÙÚÚÛÚÚÛÜÜÜßàÞßààÝÞßâäååäçæäãáßÝÜÞÝÞÝÃ³±·®¬©€£¢¢¢¢ ~]PY]g|µÃÌÎÔØÙØÛÝÞÞÞßßßÝÞßààßÜÚÞÞÞÞÝÝÝÞßÞÜÛÜÜÛÙÕÓÕ×ØÒµRPTWehš×ÞÝÜÛÜáâáääääääåæããæèéçââÝ×ÒÎÍÌÌÊÊËËÉÆÁŸœ»Œ¯±°¬š€  ¡]OQWblŠµÀÅÊÌÌÌÐÐÓÕØÚÞáçåãáààããåæææææçççæåæççæããããçáÍ§NOUUd`r{ª²±®¯³¹¹²Žµµµ¶··¹µ³Ž³±­§ªŠ £Šv^r¥­«©¢\MPXabi¢š§š¬°³¶ºŒŸÄÌÒÓÒÎÍÏÐÑÑÑÑÒÓÒÒÓÔÕÔÓÒÐÔÓÍ·|pNMSP_Zd_irolpu}~
+
+
+
+zsnmjeZTt«¡£ ]MKV``bTds|
+
+
+s]WcLLMOTYXUUXZ[^dgmxy{|||~}}|ywwwvtux}}{wtqmifgiaaR|Ž€~ZNOJSc_VVbjlqsiqsvxxyz|{}
+
+
+wqja\WOR]MLKKMQQONQUUW\^ehjkmmnpqqnmmmnmhifdfikkjsplhgfgg`gbWJikkcc__SQTU\^Ycfpsmkmirqokiilmtuvsrsvytvwxwwxyzzyuttogic\ZTLP\MLKIIMNMEILLMOPVQSUWXY[\Z\_`\[]]ZYY[]\[\a`^]\[ZY_RU_`a}ud`[YdKH@JLMZ^YUU]jdbba^[\[efeb____babbdfkmklmkjiiilnmjigb[[SNMIAHXLJJIGIKE>@CACCBGIKLNOPRSMRXZUSVWWVVWWUUVQQRRRPLKGQQC<<Uj^ZYRONC>?KaOGBMSOVVU^`]`kidbb_]_ffhhfb`_]^^^^___``_^\[\[]_]ZXVQMNIDC@9=JLFFGDCA87887:;:>;<=>>??@?>ACCDDBIECEGFECFEBAABABBEEJG8EJCJOC>DBADPbUIGIJQSRRUVOCNKDDKLJOXVVYYVVYVWXWUUSPSRSRQQRTUVSMHFEDFEC@=88>LFFGDC>0201/263654555666:9::9:;:=<=>?=<<@?=>>@AB=A?B81GNGU_M@GKODKTLCGEFHLRQSaaMMX^[SKJRLIGFD?>@DFGFGIIHLKKIGGGIJKLJGDBB?>;8646=LFGHFFA3-,-+/0/2/0/00011235522561488423534689999:;9=9>KRN[dO@DEHBDMGEJLMQMOT_oeE<9426;;;@BAABDCC<>=;;?AABAA?>=<=<>@CDB=<750-,,0:MGGIEFB4-,,+,.+.,,,.-...//1345513111///0679::;;;9;;807>MISZLCIHHIDJACED@DGONIMK<NVZWQKIHAB>53640365359<=78:;<<<>>:89;97520-,*%'2MDGIBCC4*++)**,,,&,,',**-./1135221/)/-/*5555320.,026.1AVLV]NLMHACEDCEDDFEWYI?=>@>9:@A?ABJNJD>:9835546;84777:<==>:85322210.*''%'.MKJIDD@4++)))(((',("'*&*,*,..,-2
+&!&#$*0123234444766.4CTN[XF@=BAFJJKMNPTLYXI@===<BGE?:3,)+-.,+*$,-5/0.1313555579:63366302-'#$#*5KIFDFHE>***))()*(((*+&&()(,)-0+,/;750!--4410.,,+1/*./:BGFVRFFENMNPOLJGGJOTOB;;<=66;BHLLIJJJD8246-!
+'-,*.-.21111224531///1+$#"#-:LHDDEKH?**)'&$&&&('&)'*#%))()'%(
+_S< .*)*,-/133.3562:@B?PP@@@CBBEDBA@ADDJNJGDA><<=:3/2421234.,5-@J9/+2,.--/121.,/11.,,./)%$%#*6SE@DSfbE8520,*** *%#)
+ ,*("(*$&(«co="*5100011/.1,(():A>:JS;4:;@>?><<;<?>@A?>@BB9>ABEMLB;9404.1M[zŽA 4+-/,+-130.0-,.22/,,'$##$+5YYbhrqI;50/,++-6/'"+"!#$&**+.&IAAV,
+%*('&'()''%(-0+9DD=FS=8B@D@A>:966747:97:;99970*+0/2:=98./QgqHB0-,-...000020/011-*(%! "(4?lptmabbT=72/001391:BVZK,%"-'!'((:151$*0'-,+*,,--4+'&$7EDDDK;6<:7;<<::99<>=<85:@=@=CLNH@:,)*'+(#2=90-$0+1-.00//././//.,(&"#!
+"+7C\PMRUSQP=7/-//14%;|·Ø¿¢K"$$$,$+;22*!+(*+*(()*,-*'*-)8A>;9>627@@DFD?;75778:748:564324<?=729887+)%,-./*0-..-./.+*,*),/.("$#'1<MNIHQE/6<5..0102.ÎÝŽsd©2-%#$'+-)%'&)''*,(*-)3,('28<::<=<49<<<;:8878818CD=;913:?@>835-/('''%*(1
+.*-,.--..+*,-1-*-''"$##"
+(.2[JC<85..4/-/////VÇŽo<:k?##
+&+/***% 
+
+
+((*/.4=78=AGD?8:<94,.1348=BEJOT^YUUO@9@G54;9:?>EDE;.,)##$)%*)+)*+($%'))&*'*)"& #$&$%+-/L63CSP6&.,/12122_Š»¡RFRTcB/-+'&1//A1-$(Pv~`NTQV``YWY`VB/9<63/47<AIRY[YWVYWNKI<Ccp`[TD><11/.*+'#'*$"**'*'),,.1-)+'#)&*(#$$#$""$! SRKXt[+)))-12334N¶Ž_DJmm¯±§
+t>h]CMMÏÁew|wof_ZRM@5,<?879>=BCDDFGFFD9>:;?9?Xanrhcf^MHHD?>54:2-1,-/,(*)--%$*,3* '+/)))%$ !#  WKNL@3&&%%'*-..04GdrhnQUwŒÄvQFFjq_W]~¡ŒšlQZ[XN@@@71*/389358<78>=;::=?AE@5252./.?LTijc_[TRPBQtYthQ;9>@27?-Q¯¬k5#1`852-)# ! MJK<,)'+$"$'()+,3(NscA6.u
+ebj_K<?ZkgC;SVFC21612041104256AA<??A<:69==;989559><2+)*#%*0=FBIB>CHJJahuPV[H??CD<:63e¶ÌR.*R2+2,("
+
+
+ROVI0($!%$$&&&'*%+Lv7*"Dw^NfiE28Gam>#;HaXA8:77675768345A@=>9:8888764333>?BB9./;;4/-)'(*&%$%*%(¡­7 /-&252-4<4=]UE6%%>"#&"$"!'N>@;/*&$#""%$!#%
+-']h'2<SAJRB/9<=JM:8PdmjWC@@>=52201-/0557;39?C@90,,-+(%!
+
+&%(3.94/66046,-')++«s%9/.0*).)(-(%3@?9($#"-#"#!
+
+
+&E>D>,('!!!#$$#"%$((+SeZ932JjgL<859=513@_k^NA724:630.,*-22689:733+)#
+&'('-+/84/64102.)>dV(7>357/-),2/)3DB6*.+,)" #!
+"_H@;/($"  #%$#$'%$'+(>D552?K?0291-/-43-6--.10//04/,,+)+0.*$"&$$''''/442/-00+'(++++,-+-0+*2(1>EcbE>0010*-FcaS>(,&()"!
+!K<75,"" !"#"!"%,'),'0,6245.+15012.-.+72333222260,--*)+
+
+#(+1458<>@HE=4/**-.')*%%)(')$#)*)-J9-"&,)$,)),*$"$$$#*'''# 
+
+ACE?2("&!"""  #)&''+-3440121330./1./21613311/.,(%"%()'%'1773/06563/.,.3,-18?:.%'#(,$%*)''%&(')/@4-,)%)))&&),)$"/,*$)&')#
+
+
+
+
+
+AB?3+$
+ !   
+ "')'*%)02212111/101/2532034410+)'%!
+"(($.6::5/,-53000,,26;AGJB2(&" !#%''($$')&%'!('*+)+++-/10-*(%%&%(%"
+
+
+
+
+
+640("!$
+
+
+
+
+
+ !"$%$%(.256542112020.-.1300.+'#! #!
+'*'(***+-/3;74564497<===:0)!#
+ !%$$#"#%%%%$&*%).,,*'&'()'%##%('&$
+
+
+1,+%!
+
+!
+
+
+
+
+  
+
+
+!
+!
+#"!!##   "%%#"
+
+
+
+
+
+!'/5785665666885/+,-./34.(,342"# 
+
+
+
+##&$ !!
+!%"&('!)'(+)'()+,)&$"!
+
+
+
+2,*$""
+
+
+
+
+
+
+
+
+
+
+!
+
+
+&3;867961/220//0,')--++1/((.0.,&
+
+
+
+
+
+
+!
+"!!
+
+!""#
+
+
+1.***)#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+(+,,,0*)(&)(*',*,*.)+,.))('"&($
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++**,+*%"
+
+
+
+
+
+
+
+
+
+
+
+
+   !#!
+!
+
+"#%)*'(0/**+0*,,,--))/,*+*%$)'
+
+
+
+
+" !
+
+%0**+)%!
+
+
+
+
+!!!"""$%$$&%#$%%%%%%')+'%'+-9;=<;=BABDKJEDAAA?998845734543445.(%#!   !
+
+
+
+
+
+
+
+
+
+$8Meaf_^%#!! 
+
+""""$'%$'+,*((++,-,..//.--,(*-*()0:PNPRSUUPONQOMNKIWO@??@?B<9:9=DJDIIC7,+*(&&()+-//('%$$$#!
+
+
+"'7I\lzoXG.(! &!
+
+
+
+
+
+"$(-..336635989544334222110112.-.,))1EWTW[\\[YXVYVPQPQ[L779;>B6377?FQNQSM>31/,*++-024666779=?@IC:8,)(28TnyveM>3,(').22'%%&*.././13567775:=:9:9<6354332221111234.0--.3HKIIKJLNNOLOPOOMK\L4688<A3179BCLMJIE>82.,---.01331355:?BCLMMHTf~rX:*)*)7475621,>>><97754345666685=D@<>=83355576432223332./,0/-<@<<@DGHDJFMTXYTSbS;>?<AF:;@>KJH=;?@>94/,////./024678:>?>TXcluZ8/+,/9C@731,(&(&HIID:3004224689796=F@=>?5337689:55444322534143)1<9;BMVSHEEOTQLHKbT=BB>DLAGH?SVG,-:C?874-0/...0121246:>?<lw
+xZ@:>;FK@51*/-,.*.//18AB<76313007:9<A5?B>A>:=A@:99875765664476950+.9=A?AI\[OGDNTNC<?OH:7=7AG?<BAVWD,'<H?:601,/..0102/;:=D>Mx^BDC>D=7662-*033231./1:BA:88437329:9=D<>??>;;DHF@=<9879767645;6760,0>GFADGW_`YOQTND@EGD:8=9CH7;FDOJ<-,>HA:501-./.11131214Mgu^HC>BD54220/16366564351:B?:9943964876>A?;?C;78DHFB@=:99:87875687;:537@EFDFIW_b_SRTNDBJSL@?D@JN>>HGMD7*/@E=72././/.11137.9NrucQB@=AB7666311348:;:75707??;9721863645A<=7?B788>CD@>;887987775659=7259:AJMLP_^TPHOUNDBK]J66=9DH=@OOOGB?/DC920-.....011371Gctm`^RI@C?>;:;;:878:<==>;9:03;A>950-420436A=:4<:3<;=CD@;8676765753589;1*044>KOMO_]NGBLUODAJUH:<B=A<44AFE?=<,E@5/1//-.--01110Cn|dc[TJICC@A<>>;77<BCB@?@@AD008A@:40'+,.104==94;93<;<BC?:6576777752286:6.034=HKIIY^ZSLQVPFCHOJ@<=<A8.*5?A>83'B90,0..,-,,/000?Pt|t`VWNICEACDCDB@=<>AFEEFHGFH/07>>:62#%*///38:;59;689;?@=96465777873353;<4564<EIJIV\ZWPSTMEBG\P?657FEABOSF8-()@40-0,-,-++0000:bc[YNNMCCCGDGEEFGGFDKNPTUSPQ.17;;:83"#+21146:=33;87<=@?<96343678:86545<805615AFIHQNFKINNF@BI[H9:;7CC;=MUJ<.$0D5332,/,-+,0100Hz\WQMLFFDIGHILLJGHLOSRSUWUUZ-0579;83*!(42/259;959;8:9?>9862225::9::8864431134>A?BKUAKJLJD<9BGB?=98:<.77FU<(-FJ0.-/.-2.))*&'*X¡iSEFKNLMOPRQTXVRPRV\YZ\YUX\-.148;94+$(0.-018::45:::9><88621139;:::864122002/9@=<EUHIHIE>74=CHKJGG@65:?EF?134A0.),010/./.*,3t ¹®nXELKKLPSQRY^a^YUW[f_ZZ]_`a//147<;6*&&((,2079<53:<:<?>:9744237;:987630121129:;;<@J=@??<50/;FKNLIIA503=A>?<06MGH?:4/0100008Dw³­\RLOUXVSTWX_fe_ZY[aecbc_\^1/037;;7+'$"$,2/48>718<9<>><9644436:9754521121239546>BF8><<94/3@HB><875/.2@IB5=74G>C@?;7122335?LmŽ¥\MLNQUVUWW_`ddcceghieflicf.-/25996.+$!*.+48?80599;<>=94336348754210/0//122136;<A;><<72/3AI>75/,**02=D>5+3FN;<8642135886;Eq
+¡e@IS[]X]stssrqmgeadcirols,+-148960-& "*.,59?9016<;;?@:54141245553../.--//1034639::863004BKC;50-+*+.2:SvGCHP=>93113346536?q}yfVXW[\ey{yxtqlgcjs},()-37850.(#%)-/16=:1+.;;9=A=85120/02552-.-,,-,--*,,14788543216DIB93.,+*25/7]{C:MVB@85573321.,2>j
+o[UTacj|usw£§£,'&*05511/)$#%(-*0981''6;7<A>9501/--034.,,+*++,+*)+*//35400.//4AI@861-,+./+7N;"5EO=:32202331+'-8hy{yfZglp}vps~€©£&)++)*.20/-) 
+")'(195+(0:79<:75300-*-22/+*+*****)))),.1442.,,-3=D>61/.-,//05Q3-2B7681./.-100/)+6Qmox{oetzwojq
+
+£§)((('(+-..,(!
+%"#/991*-..2665773/)'+0/,*)*)(((('''(+-.01/,+++.7@:1/,,++*/31H=-4;13:6100-0.-.+,8JUnst£on|~upmt¡Š£''&%&(**,,+)#
+
+!!!)275.-,*,--18=5.''*.,)))('&&&&&''(+,-./-*()'*0;4/++))++/1-0.(2:15=92//00--/-/7?Rg~ucjª¥~|somw'%$%&'()*++*% 
+" %+360-.+*)'*263,&&)*))''&%$$$$%&&(*+,,,+)((')/91*))(').)+;0%();68<7/./0/--/..52FZkpaa§©}zups}¢¥&%%$%&&%%'((%!
+
+
+
+#(/4.**())&&'&,'$%&&'(&&%$$##$#$&'()))()(('&+170)((&%&$&4KB(&,56871--./.,,,+,00;JZs
+x]\v®§wpqu
+€¹²¬©##"#%%$#$%'&#
+
+"%+0-,(&(('&&#&%%%%$%(%%$####$"#%&''&&&''%$#&,2-(&&&%$%)599$
+3/361-+*******()),6CK[ieCW¡ytrt~§š¡ #$#"#%&$!
+
+ #$(,+,(%%%$%&%$$##"#%%##"!!""#"""##$$$$%%#! &+*'%$%$#,-540#
+**.0-*'%%%%%&%''&+<L]\extVNa£zsr!
+"#! !#$"
+
+
+
+
+%(*+''#"##!"!$#!  "#"""         !!!"!!!!"#&%"!###/MZ: %(&((''#!%#"#$$%'$!0:D]ddk}hLPu{zwyv
+§ªª¡£€"" !$$!!!"!
+
+
+
+
+&*)$""    "!!!!!"#"  
+
+
+
+
+
+
+
+
+
+  !!
+
+!!
+!#!!!
+'CJ2#&$$$$$#"!"$
+$"$ "4=KWYWWjz¡xbJ\tzzps&$! "$$# ! 
+
+
+
+
+
+!"!
+
+
+
+
+
+!!""!! 
+  
+
+
+
+
+
+
+
+
+
+
+
+
+ "#!
+
+
+
+
+
+ 
+
+ ".-"
+!!!""!!!"!#!!!
+
+=ZkeRST[egqn]Ydsw}ww{)&" !!"# 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!!  !!  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
++,#""   !! #
+
+#
+
++KirMLLTb\]^q{
+rh][dqusz~($"! 
+ !!!! 
+
+
+
+
+
+
+
+!!  !   
+
+ ! 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+",70
+
+!
+
+
+
+
+! &!1avqSJJPRRUWhky~kd^]nhuŠv#$#" !""!!
+
+
+
+
+
+   !!""!!  !! 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "+., 
+
+ 
+
+
+
+
+
+
+ 
+
+")Gao|s_PAKPJNOOUWZ^p{veZ_Xgn~zy!##"    !!  
+
+
+
+
+ 
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!!$### 
+
+
+
+
+
+
+
+!3Sl~
+nXTDONFLKLNUW\YbkydY[XZcgx
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+"(%!
+
+
+
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "!%!
+
+
+
+
+
+
+
+
+
+$Jc~
+jYRDFAFHILJORTY\\jz
+~~ukeSVQY
+
+
+
+  
+
+ *72*%" 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+""!!$
+!
+ 
+
+
+*Ygqd]OBCHDBFJGHLMVUU^iix{{xd`YS
+!#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'32-*% 
+
+
+ 
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+$%%%$"
+
+
+ ! 5dryhoniT>B@BEFDFJKLOQSW[dpp|}wl#&%
+
+
+
+$&((% 
+
+
+
+
+
+
+
+
+
+
+
+
+
+"#
+
+# 
+
+=j{zaaioZGA@?ACDDEGKMPPQPRZdnuu
+ 
+
+
+
+
+
+$&$ 
+
+
+
+
+
+
+
+
+
+
+
+!5,#
+
+
+ 
+
+
+<cxn_`kwgX>;=>@CDDEIJKQXXTSQVamt{
+
+ 
+
+## 
+ "
+
+%(&#)'#!#(.21159:633.6307628gsh?!
+
+
+
+
+%1=!
+
+9_wvd]fwroP9>@?ACCDGFGOZ^^^^YT\]dlp
+
+
+"
+
+
+
+
+KJ@.%+3782*$$+4:IILNJ@849??:75475JR5
+
+
+
+&AYFFFD>6-' !
+ 5\rz[K[tuv\C@>>@@ACDEEEHLT\`_V[XWYb
+
+
+
+
+
+
+
+ L^aE("(+/*"
+
+ %*441+&%"### 
+
+
+
+
+ 
+
+
+(3<:<HUXND)-*0:a|eII\pwWD:?@>@A@CCAAAEKX]Z_[VV]
+
+
+
+
+
+
+
+)14) 
+ 
+
+
+
+
+
+!!
+
+$#"(6@>?<<<[x~nZFD`qwmRB@<<@>>@AAEDBBGMVdd`\V
+
+
+
+
+
+"%"
+##
+
+
+
+
+
+
+
+
+
+
+
+
+"
+
+! 
+
+!$!
+
+"%+'&)/Opq}mQAWe|}dQB59@:<??>@@ADE>ANVah]
+
+
+ 
+"#,9;.&((!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!"
+
+
+
+Bcw{}rdGFRkrYE?AB>DC>=>BDBB;=IKP`
+
+  '').:CFB5)#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3Uo~{fP@DWm~y[E<:>@ACCABDBHECD?=E
+
+!#+32AVX=-851,%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4Trk^D<C`lz}r_H499;;:=@>AEDBB=64
+&+0DI4 $1( '" !!
+
+
+
+
+
+
+
+
+
+
+!
+
+"9SlzvpWJBNUcqvpZ@@:9;<=??CAAACEDA
+
+#'+.4AKU@
+%$
+
+
+
+
+
+
+
+
+"=Tdw~
+scSC>CSew~ZH<>?<;?@>ACBDJL$)9@EKD=?-!)(#
+
+
+
+">Ualnt}{xfPB>ERay|jL649;<==@CCDFFFSgZC=5-!%!
+
+
+
+
+
+
+
+
+
+
+8NXa`i~lWHAGPQ\r
+lJ>?=;<>?@DGFCM;>8+(!
+
+
+9PZZZauusaMHKBBVfqs_F7:5<=9:@CE4"
+! ""
+
+2PW[WVg}
+bJEIFDW_r~yVF2578:=?@$ #! -HT_]WYg}waOIFABLZeuvlH:14989="
+
+
+";O\[QJNeu
+{bOIF=CMS]jwV?657:
+
+
+
+
+
+
+9Sa^UMGS`rx]LJ@CIMNL_vnSA84
+
+
+
+
+$B^hcZNADJVn}
+weZJHIKLDLYcnv}}q^LB
+
+
+
+
+
+
+
+
+
+
+$D]sneVEGJOXdsu_YOHKGKLL[]bmz}pa
+
+
+
+
+
+
+
+
+
+!>Uhgf^LIHLNWdr
+~tn]KHFJHEDJOT`r}
+
+
+
+
+
+
+
+
+
+
+">S\^hkXKEKEMW]mz{
+|p\QJLIHGDEKOS]i
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+"=LV`hldTPFBHIN[fp{wpYRHGAEB@=DC@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;LSY\hoaVGGGDFLR[gv
+shUJBDBA;<<?
+
+
+
+
+
+
+
+
+
+
+
+
+   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6IUWV_ng^QA@BEDDO]^n|
+zte[KB89678?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  !!" 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0DNTUZghfVKFEEC@FMXalzy{tn^QB?9637
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     !!!"
+
+
+
+
+
+
+
+
+   
+
+
+
+
+
+,BRUPHQbtjeVD=?BA=FEM`mwwvvm[M<636
+ !!  
+
+
+
+
+   
+
+
+   !!!!!!""!! 
+
+
+
+
+
+
+
+
+
+ !!!!!!   
+
+ ,BS]ZLIUmmvhO<9?@==9=KWgy
+vfSJ?8
+
+
+!""!!! 
+
+
+
+!    
+
+   !!!""""####""!   
+
+
+ !"######""!"
+ 
+!*B[haNE@WjtteN@;;>?<>>@Jas}rYE
+
+ "##"!! 
+
+
+!!!       !!!"""""###$$$##""!!!""""#$%%$$%%$$###"
+#)BYf]RN:B[cpn^NA:>;;=<:=GO_n}{m±°±°³œ_tuutssstvvvwwxxxwvvvvuutzxvttttustvl^TZVWZYVXc[]z{{zzz{|{|}
+
+
+}|»·Žž·¶¶¶····¹žž¶µŽŽ³¹ž·¶¶¶¶¶³²±°¯¯°°³Ž¹ž±¶¥tt
+z|¢¢£€¥§§©ª««¬­®®¯¶°¥®¹¶·žŽŽµ¶·žžžµµµ¶¶¶¶¶·¶µŽŽŽŽŽ²±°®­¬¬¬²±³Ž¯²§¯¯¯®¬«««ªªª©ššš§€£¢¡ y ¡¡¢¢ ¡¢£¥§šššš©ª«¬¬­°³©©¯¯³³®®®¯±²²²³³³³³³³³³²²±°°°±°¯®¬ª©©©³±­®±·€¬¬«ª©š§š§§Š¥€€££¡¡¡£€¥Ššššš©©©©šª€©²±³²­­­®¯¯°°±±°°¯¯®®¯¯®®­­­­­¬«ª©©©š­°­®¯ŽŠŠŠŠŠŠ§§¥¥€££¢¢¡ ¢£€¥§§§§§§§§š© ¥­¬­¬­­®®®®¯¯­­®®®­­¬­­¬¬««««ªª©©šššš©ª©¬«®ŠŠŠŠ§§§š€€££¢¢¢¡ ¡¢£€€¥¥¥¥ŠŠŠŠŠ«£€«¬®­««¬¬¬¬­­ª«««««ªª«ªªª©©©©š§§ŠŠ¥¥¥©šŠ«ª°§ŠŠŠ¥¥¥¥€£€¢£¢¢¡¡
+   ¡¢£££ŠŠŠŠ§§§š¥«£¥««­ª¬¬­­­­®®ªªªª©š§§§§§§§ŠŠŠ€€€££¢¢¢¥Š¥šŠ¯ŠŠŠŠŠŠŠ§£££¢¢¡¡¡¡    ¡¢£££¥¥¥¥¥¥ŠŠšš£¬«­­«¬¬¬¬¬¬­©ªªªª©šš¥¥€€€€££¢¢¢¡¡¡¡¡€€£¥§°§§§§§§§§££¢¢¢¡¡¡    ¡¢¢£££¥¥¥¥¥ŠŠŠ€Š¬®«®«««««««¬©©©©š§ŠŠ££¢¢¢¡¡¡ ¡¡¡¡¡  ¢¢ ¢¥®ŠŠŠŠŠŠŠŠ£¢¢¢¢¢¢¢  ¡¡¢¢€€€€€€€¥¥Šª¬ª«ª©©©©©©©ŠŠŠ¥€£¢¡¢¡¡ ¡ª£££££££€£££€€€€€    ¡¡€€€€€€€€¥Š©ªšš§§§§ŠŠ¥¥££££¢¡Š¡¡¡¡¡¡¡¡¢££££¢¢¢
+~ ¢£££€€€€¥Š§§Š¥¥¥¥¥€€££¡¢¢£¢ ¢        ~|    ¡£¢¢£¢£€€€€€££¡¡¢¢¡~{|y
+
+
+
+
+      |yzw
+~
+}~zx
+xt
+y
+|}|wzvw
+
+v
+
+
+
+~~~~~~~~~~{}|vxvv~~~~~~~~
+
+~t~~~~~~~}}}~{}|tv~uu~~~~~~~~~
+}|
+
+
+s~}}}}}|||{{{y|zqr~~~~|ts~~~~~~~~}}~~~|{
+
+
+
+o|~~~~~~}}}}||{{{{{zzyyyzx{xop}|}|{~sr||||||||z{{|}~}}}~~~|{
+
+
+
+
+
+
+
+
+
+
+
+~my}}~~~}}}}}}|||||{{{zzzzyyyyyxzxoo|{}z{~sp{{{{{{{{zzz{|}}~||}}}~~~{z
+
+
+
+
+~lxyz{|}}}}}}}}||}}||{{{{{zzzzzyyyyywywno{{}z{}~rnzzzzzzzzyyzz{|||{{{|||}}~~~~}|yx
+
+}||~}}~~
+jvxyz{{{{{{{{{zz{{zzzyyyyyyxxxxxxxyvxvno{z}z{~~rnyyyyyyyyxxxyyyzzyzzz{{{{|||||||}|zvv~}}}}}~~~}|}}~{{|{||w}{~}jtxyyzzzzzyyzzyyyyzyyyyxwwwwzyvwwvwwuwllz{{y|}znozvyyxyxzwvu{vyzyzyyyxz{yzzzzzyyy{yvv}}}}||{{{}|||||}}{}y|}z~}zz}~|x|z|{~iswxyzzzzyyxyyxxxyyyyyxxxwwvwwvwwvuvtvll~wyzx{{xlnxvywvxwwvwvzvwwwwvxzxvxz{zzyyyxxzxut~|||{{{zzz{{{{{{zzz~|z|~~{z|wy~{uzx{y|hqvwxyzzyyxxwwxxxxxyyyxxxxxvuvuuustutvkm~wyzy{zwlnwx{xwzxxtwvxwywyxuvwvxzyzyyxxxwwywss~}{zzzzyyyyzz{{{{zz|z|}}}{|uyy{Åywyxz~eouvwxyyxxwxwwxxwwxyzyxxyxxvuwutvuuutuhm}xxyxzzxlmwwywxyvywyuuvysvuvwvuxzvzxxxxwwwxvrq|}{zzzyyyyzzzzzzzzz{{x{xwvt{|zu}ÀÊ²zwywy}enuuuvvwwywwwwwvuuuvvuuwxxvvuxsostqrruekxtwvtwxwkkurqqrpmuturqv}vxtswxvtuuxwwwwwwwwtqp{{zyzzyyyzzzxwwwwxyzwz{uw|{w«ÊÂ¬¡zxywy~ensssstuuvuuuuttrrlmlkmqtttusvmdhhekqudkvtuvtvxxkkunjikgcmffedgqjj}okrvstwwwwwwwwwvspnyyyxzyyyyyzzvvutuvwxwxyvx}xstx¢ÐÇ¡byvxvx}enppqqrrsssssrqpqqbbabgmqrsusui[_^]fpudlwwuvtvwwkjungcgdajjikgckcbxhdlsuvuvwwwwwwwusomxxxxxxwwwwxxvuuttuvvytrutry·ØÄSD+wtvuw|dnnnopqqqqqqpqoopp^]\^ensrrusvj[^[Zepvajtvsuttuuiitne`deai_ajgblgf`afmpssrvwwvvvvvurnlwwwwwvvuuuwvuuttttttxxuvz°Éà×¶_Re^utvuvzcmnnopqqqppppoopoo[][]eortrsqod\\Y^emqagvusrsttuhgsjgfdedfkjpnfsuoighksrqruuuttssssqmlvwvvttsstttvuosuspyuwxk³ËÎÊÆÁ±§¯µ±ªsrsruybklmopqpoooooononn\]\]cjlnooljc][X[akqcjvssprsstgftmjikomkopmqptuqoqqpqnpvttssrqqqrpljuvuussrrrrssnyroqpqsxtÉÌ­¯·µ«khrqqqtwajjlnoponmnnnnmnmmZ][Z^aceeced_^\YYakocitqqpqrsuhhpmlgefehjpjrrnnpjjhkmonprssrqqpppnjhstssrqqppqqqnqop{wurvÈË§idIA5
+#6Êppoprt`hijlnnnmlmmmmmmllZ\\X[Z\]YTYYWZXW[bko`esppoqqrsggojf_\YVY\fmtj`\__\X^goopqrrrqpppolhgrsrrqppppppqqppssms¶ÑÁ{N3,.*0@ZqÏ«momooo]fiikllllkkkkkkkjj[]]Y^[]^`[`]Z]\\\dno^brqnmnonoddpf]\dgbdX[no]^`fjifehlorqpqqqpqqolhgrsrrppqqppqqtporp¡ºÕÞÔi§2B{ÁÖËÒ© lolnnl\ehijkkkkkkkkkjkjjYZ\Ycafgfefb\ZYYYcnp]cqpnmnnmnccnf^]gkgk^WliUagkiknkpmmkpppqqqqqolhgrsrrppppooppmxjwœÑ¶»À§{sl©ÇÈ¿µ³¬knjmmk[dggijkjjiiijjijjiZX\Yddjkklkja\]\Zbln]droonoomnbcnmf[[\WZ^XlnW\\XYX_`pnmgonoppoonmjfeqrqpppponnoojjr¥ÝpgM=?)6¯ÇÇÔŒ¡¬jlgllj[cfgikkkjjgghhhggh^Z[Xedhheihjb[_[\cik\esonmnnlnbckogY[`ZZ^[jp[\b_d]`[nlngnmnnnnmmkhecoponoooommnnijoF6.0<PsŸ®·Ã­¢hlgklkZeghjkkkjihihiiihi[XZVcchgeihhc[]Z]cem\dprnkolmp_duohdehkk\^ciW_hlph_Uokkjmlnnnnmmkicaoomlnnnmllmmongf\aoRKÈÄª£µŒhlw
+hkfikiXcefhijiihhhgghhhgZZ][fdiiikjjhedc_cej[dnpljnlmp_coh_ZZ\]]Z^dl]_]ZWY\Zmhiikklllllkiga_mnkknnnmlkklljjnldvªÈ°¢£²®€ªy§hjfikiXbdeghiihhffffgggggfiekegfhfgefheebddh[cnnjjmlmo_cic]Z[\[Z`bcjcd]ZY]baifhjikkllkkjif`^lljkmllkjihikklhq~²¯®·µŸ­}«gifgliYbcdeghhggffggggggbcdaeaaab_a_adbbcddg\cnmkjlkln`ckhgghigeiifihkggifeeeghijjkkkkjjhf`]kkijnmmlkjjjfgjgsšow
+€²º»²¢¥efddieV_`abcddddgggggggg\]]\_]]^]Z^\\_[^_acf[akjkliijk`cbbbcddcbcdabcdaafcbgfiifhhiiiiggge_]jjhikijjihhhjccjrª¢~€®·°°¢eedbidU]``abcccdffefffffeecbcbaa`_baa```^`de\_kjjlhhij`bbbccdefggihggfdfaadgeghhgghhhhffge`^jjhigfggffffhfajq~­¹³~zŠ©€£{¡cccaicU]`aabbbbcddedddddbdccefeeeededdee_aee]_ljhjfghi`a`aabbcdefffddcefeefeedfheeffeedded_]jjiihghhgggg^cdnuu«¹¬}®©²ž±wxq¢```^hbU]_``aaaabccdccccc_baaaa`b_a[^^]`_``dc\_ljfheghh_`aaabbba`a`aa`_`^ccdaecccaabbaa``a`\Zggggfefffeeeb]alst¬°{¢¢¯«¶ycNSt¡WYZYbaS\YYZZZZYZ\\[\\\\\^^^^^^^^\\\\\\\[__dc\^kifffefi^baaaaaaaa``aaaa``^^^^^^^^^^_^_^]^]ZVTff`dddddddddda^os~¡Š­z{Šš±¯²iTTTob_a]faRZ^^____^^aaaaaaaaaaaaaaaabbbbbbbb`_aaY\gcddccdg\_aaabbcccdddddcccddddddddbbbbbbcb__d^dacgccbbbccb^b`ršžaX|¬©©¬®vmrey`\a]gbS\__````__aaaaaaaaeeeeeeeecccccccc`_``W[d`ccbbdg[^__``abbbdcccbba````````a^_____^^]Za\a_bbccbabbbcddbhz«®wOJmšª§ª®uj~^Z_^c^PZYYYZZYYY\\\\\\\\\\\\\\\\\\\\\\\\`__`UZc^a```adY^____````aa````^^^^^___``aaaaaa__]X[WehhcfedddeefgfiX`±°fg}Š®ªª¹~gxtrstoeXc````````ccccccccaaaaaaaaccccccccefeeW]d`__`__aX_ffffeeeeffeeeeffffggghhhfffffeccbde_quttvvuuvvvxvyzXPz š¯
+pŠªŠŽ ¥Ù|dxyyxzsc_jnnnnnnnnqqqrrrrrqqqqqqqqrrrrrrrrprpo^djgfggfeg^fuuuuuuuuuuuuuuvvttuuvvvvsstssrpplonew|{{ywwxwxyyx|u ­««l¬ªª©³Ïnhuuvvv`jrpppppppprsssstttqqqqqqqqqqqqqqqqrussbjqnnmnnmmcjnnnnoooooppppppppppppqqqssssrrqqppndtzyuwuuvuvww{ªw±ª«¿e£¥«¹ÊtfustptWjpmmmmmmmmooppppqqoooooooolllllllljnln_ipnmlmmml`fonnnnnnmpqqqqqqqoopppppqppqqpppoompfovyrusstsuvvvxËw€šª«ž_£šŒÅtfrvsvoVommmmmmmmmmnnnnooommmmmmmmooooooooplnm\hllkmmlkk^emnnnnnnnopppppoonnnnnoooopqrrrqqopngmwxussrsrstux}Âp¡µ³^§¢ŠÁÈwfrsruf\jmkkkkkkkknnooooppnnnnnnnnnnnnnnnnpmom\hmmmnlkkl`gnnnnnnnnnnnnnnmmnnnnoooomoopqpppoomglvvuuuuutuuvwz¡Áo¢À¶g¢šÆÖ}eqpps\delkkkkkkkknnnooooonnnnnnnnkkllllllmlnk]iopnmljlkaioooooooonnnnnnmmmmnnnnookmnnoooooomgjtutrqppqrrsux©Àm€ÑŽg€ªÕÎgnnooVgelkkkkkkkkmmmmmmmnllllllllkklllllljkmg[gnomlkiki`innnnnnnnnnoooonnllmmmmmmlmmnnnnnnnmhhstsrqppprssu}­ÆfšÖŽgª¬ß·}mknniWeikjjjkkkklkkkkllllkkkkkkkkkkkkjjjjjklcYciikjlike^hllkjijjjmmnnnooollllkkkkmmmmmmmmmmkieqrrrrqpqstt{yÁ·uªÒ§h£ªášqrhnmcYcjiiiijjjkkkkkkkkkkkkkkkkkkjjjjiiiiijkaYcigjimild]gkkiihhiilllmmnnnkkkkkkjjmmmmmmmmllkibnpppooppqqs{}Â­pšÛf £¡élo}imm^\fhhhhiiijjjjjjjjjjjjjjjjjjjiiiiiihhfhi_[ekhjgkhlc]hkjihhhiikkkkklllkkjjjjjjmmmmmmmmlljj`lnmpoopqqqs{|Ão¥Ö~h§âniwkln\^iehghhhhhhhiiiiiiiiiiiiiiiigfggggfffhi^\fkgjfjekc^hihhgfgggiiiiiiiiiiiijjjjlllllllllkji]jkkonnmonppz{Äo¢±{h€Ë{njfjcVaaadgegffhfghghgghfggfifgfhdgffeffffegg\`egfeffhha[fhighfeggghhhggggghhihhhjijjjjjjjllhjaelmoommmnnnm|{amfvihzik_Xccceecedegegfefeefeedhfcfgfdddedcdeedef\aeffeffgjb\ghgffeffgfggfffffeeeffffgghhhhhhhkkhjbeklnnllmlmmnrfZlph\euoo]l|kjYZbccecbdccedeeeeeeeeedgddggdfddedcddeeee]acdedddef_[egfeedeeeggffedefeeeefghhhhhhhhhhiifh`bjknmkklllmlhJHrTFHcpXQRKk}xjfV^_aadcbdccdbddfdeedfdfdchfdcfdcdceddcfdd^`bbdeeffg`[gfeeccccdggfdddefddcddfefffffffffigee_ajmnlkkjkmnhc]c|}TIQoiJI=In|qidXb_a`ebbdccdbdbebccbebfadf`afccbabccbafbc]bbacbdddd]Xeedddcbdefffddedddddddedeffffffffhfeeaakmljkjkkknl_^fqy{a^d{~
+qU[O^tzpg_Zc]`^e``cbcdceaeabbaeaebga^ai`baaabbcbdab[`abcabbbb[Wbbcddcbefdedcccbbeedddefefgfgfgfggefgbajlkjjkjjjmkc]o{qycadj|z}wk_ihmvtsi\\a\a^e^^bbbdbe`eabcafacbf_fac^bbabbaabbabZ_abcabdee^Yebbcbbbcebcccccbbbbbabbccdcdcdcdchcfca]jjljkllijljb[jtj^H`bh|v|ya]ailqspql[^a]d`f]^aa`b`c`e`bb`f`a^b_p^Z\__`a^^`acbbZ]a``_aabb\Xdddbcccbcbccccbaacccccdefeeeeeeeejdc`^[hknllnljjkh^ahpsA;d`eznsf?]jkeqttmbYVZWV[Y\Y_ZY]X\a^[a^[[`_ZV
+NM^VMXRba`\]]V\[]b]Zd^bbYY^_a__`aac``a`aa]a`_^^_`ab`aaaabaaa\e^^bllkkifkgghd\\ava.Aafgpqk=5ZmhksvrlA99?=;;;;8>:9;7:;==::>A=9jsiCAI<@=K@ICHOHQalktrslidZSKCDCBCCAAB@??AC>@BB@AA@ABBBBBBBAA=BB?B8=FCEBCA@>=>M`enI.B`^cunS5-[gdlqsoc:.//10.51/4222/2135/36'4h¬bEDD6RJb[NGELIGBZiu£q_NGLLLLMIDC;86100--//.///01////////38//718DGMKMHJGC5HXZP**A]Ybqa80.ZkhjqphdF72///+70,/0/0,15,./3.:p€zu[K/7179\nO_USWRCRdelzyp^\VJNPSTVYUML@;92-//1/.,,-/00....--..020137@IRYZZVVWH7515*'@^bjmQ))([jdeoseYN<7231*420110/.1&80,DmcJSvF107+?do{C9QWWf«§h`^MV
+PB90+./00/--.00//100/../13773@OqtD+"($$2AXZVJ3%)8\`ipks`;VC:65405321/.../0(:HjNE,;rcKC;.S}°ÌµV9^i~°ÇÂÁ©~h^PtËÏÏÐÓÒÑÑfL;302.+100010/--//1/0/0.0.26DXÒÐÒÐÓÍÏ­H(%#%&35*,)*$# 4gd`c`eO)ZG852478563113641.={dOB@84&TL.=>Vh»ÖÌ\-VoŒÈÍÉ·n`QÉÊÇÄÅÆÈËkL;8893.-035421.+/253300162??EY©ÌÉËËÏÊÌ§B)'#$)80'#$%((:dc\ci_:#ZF7524:5574248<;:<PICE50#"%)>K=BB\]ENÌÑjdlÄÂÊÈ¹kjUyÓÒÌÉÊËÏÕjL?@>:2--39=<87537<=<8426<;I;=`ªÑÍÌÑÐÎÍ§?.%$ /;-'$"(%%*8GIMOB1%.XA:6/5;8971416<D9AD2>)*.%+04/3FKIWVXKsš¶±x©µÂ»¡|_hPf¬µžŒÀŸ¹Œ_JDD>71//9DE=3//68::5/-0;>?<9=TŸ¿Ÿº»¿ž8,!#$'50$ &&!&/:)&#!"%%$M@81+17<<851-0:EB6NtH8<L8<>@C@>F>>DLKdbW\mšij£u`ZeAKUbkqslcaM?>=3./4,4=<3-+-;;<<7./4<8690>EXegpwqhcO-& "2*% "##'04)'#"#$#"GA<54759;:9.,+8A:6EfMIBBI?EC;4+*81GVJZ`Vzh€}nryjYU`b;9DOTWXRKLG>@9.).6>@@9/+.2=854/+1<:;68'8<?RV\`WRKD$! $.$# !%$43*'$###"!D;6.332038;3/08=817DDDDA<.0.(.6:66(;SjvZbRw§ŠrRXX[[`[;==B@>?<<?GA@:1/15>=93-.29>953007@==//*248IKIGAE;2!
+ #%+"!!!"% 52)'$""""!6-1,++,('*,.**,3*25AQA,0+0.299:99C6:GlkP<\¡]MNLLKQM4.454211/14//.*,),,,,,,,...-.,,*,,%+,+(&.8<85;:;0.% 
+#$'!""
+0)&$"  !!"0*2*" ")'$*$!!*/039H?.%496<BDIAEM:0In[_~g-/39711)'+++***)'%"%$$$!$""####"!"$%$%&%"$
+!"(),,2/-221..-'"!%%'""!
+" .$$#!! !!".*/-53=F8851**+/)6;:T?5AE@FJFGJ?OH=6H`f}LG@>@690%0///--.-.+-,+)&*+**))*++))))*,.-/-.(('*::><8787(,+*%'(($"!#&0'####!!  4.25G?65;DF537:2/=B?EE?AHFIDBA@GFQI6?LxfcsrwI;:6<:;;::;;2/..0.*.++,,*))),,,.---.,3.*2/.WorololdG$*/()*)$!"
+! &/)"#$$"!
+K@<>.7?@BCpN94;DSFC=GFIBKGFIFFFBHG;29_y`V\]{¡²©­XC8Ighfgiigg:.5304220000////211100//./21028x§€¡Z/5854640-'!
+%(!"#%%$!
+_WUP5H[USYIJdg_A<F@FH>AGKKGD@RJaqx\7Ip°¿ºÀ®ykZif[_^[_^^_````aaabbaaa```b]\`dcW¹°®ª¬±¯|Z^^^]_`^YI3'#11&!"$$$" 5,,:4630,4zv}[D:?>B;<BHLOONPFHqvI:?bm~§ªªª[K;Mtuvtuutt:021/311111111110000////-031+,,r¡ ªªª€`)(%$##"!'&!!"0."%%%$"
+
+2523(&(1?ei``abMA?@59@AFIHIB;<9750&,>^pD8M\qŽ²­YA5Dommmmnmm6-,,,.,,**)))))),,,,,,,,0-)+-40l  c&&%&&%$#%&#!
+&)'""""!!  -*04'*/-Ngv}sZaaXG9<:<BLHC<>@<@97376/5U;"%:y Y?4:TPQQQSRO6-**+,+++++,,---***++++++,+,*.,`
+L****+)('''&)&)&$  
+
+
+
+
+5049331,GgylN]SA7<=@F@;;9=?7613?955(1S~Y&$EqT<57HBBECFF@4.**++*++,,,,---((((((((20+,,/3Yy|swv}oF-,++*)((-+)-+,*+)(&#!
+
+
+=>;9?D@5Whr
+scOQC/-ANG2+008A=?1-4*).(..SuK;}rcI746=67989;552--.,-.....--,,0111111101/00,2I`gbfa^XB+,---.00-//201/2..------nhogH@[qd^fv{}wUJC7*8EA3,255<64.0-*%
++Aboz/;skedkfhkgikffd__`^_`cccddddedeeeeeeeigdhnjqz~yymhkmjijjiknkkknkmoooopqqr:6454410LWago{gP<3-3?DA<52/.*((,((/*)5HW¡h8glf[_SRLPTRRSSRRRSOMNONMNNNOOOOOOOOOOOOONPMMJMLNMSPQUSNHE:7678768331/,*('&&&&&&&&;:998862AJRTVakog\L7,5AE=7.)')+-)+&%+(*87/\®dBYNH?E<<8;55665555643443353344444444444444877487<=CACD@<85)(('%$$&&&&&&&&&''''''''68988:60EMUXXVRMTIB<6.+,(('(,0468630/-1;;/<RwA;B=9>9:89;<;<;;;;:999877:8889999977778888989565;=>>@?;985--+)'('('&'''((('''''&&&4577774/31//379:9,&16+#&-.012/.-30/-(&*0<80.BLD:A><@=>;=<;;:::::898975478898:9:97777888898834269<=?=:;<:.-)&&''&((((('''&&&&&&&';99:9753211.-+-/-./375+&%%'')**+)&'(%$)-954:16=:><<><<;;::::::::::9;::9999::::8889999998:9:797:;9:;:8:<:342-)))'%%&%&&&'$%%%&&((A=<<:888>?ADEEFGDD@5132*#! !"""$""#"!%(8;;6;?:;=<=><<>=<<;;;;;;<;;=>?><:::;;:99<;;;;:::;9;8;9;;=<==<=><7;<6-'&&'''''&&&%%%&&&'(@>;99:;:?DJOTVVVRJE>730*)('())((**)*)()+1:A9;:7B<;=<;;=<<<<<<<<<;:9:;<:99::;;;::<;;;;;;;<;<:<:<;?<=???>=<?A?8/)&++**))((*))))))(<<:78>@>=GNOMRZ^bXM@2/2///..../.,,-/210269BF>@C@?>@>=>@?@@@@?@@@BA@??><:::;<<<<;<<<<<<<<<;<:<;>>=;=A?>>=?>@DB8-&,-..//00...--,++VRLEBCEHJNTZ\]clc]VD0-2///..11/031/120/.35HQF>><=>>@@@@@===>>>==@?>>>=;9==>?????==>>>????>=;;:::>>>?@@@@A=ADD=2/+,--./2345678:<< ¥©š€¢£¡~}wvvxxvx|w|{uwvsqrqonmmllllmmllllllmmkjjklmmmmmjkmnqstuwwwwxyz{{|~MNOOOPRTW]hs{~~yd_`^acefhlnmoljkmljnus|
+y{~}||||{zxvvtsrkkmpokg_TTRPNLJHKJHEB?=;BA?=;=>A?HS[`ba_gfN8698<332244110-/.--.24?C:/8GFAAAAAA@@>>>>????????@@?>==>>???@;<<==>>>?>>>>>??@@?=<;:98:=DIKJ?3343/-,--../0000@?>>==<;;GU\^_bcjW=3:?;8.//1676763411300;GC5-:MN?==<<;;:>>???????????>>=>>???????>>==<<<<<<=>??@==>>>????ADHKTRD@AA<3,)*++*+))('987788766?INPT^fgO958:743445887773632415BJ@0,;QR:;;;<===;;<<<<<<==<==<<<;;;;;;;;;;;<<=====<<;;::===<<<::>?GFGUUI<?A>5,(****+****<;97789:58<?AFR]SC854126366666576285013?QP;-.;H?99:999979999::::9:::::::::::::::999988888888899989::::9:=APHFTRI;>CC<2,,((''%%%%:::998994469;<BIC<6793152687766:83;81/5JZQ94APUD89999988888899999999999:666777777777777788887777888888789@XNEVQK9<ADA7.+%$$#"""":98777877689868;999866771566765948GKA=AEIFHKQXO888888888887777778888888866666666777777777777777788888877:A]SBTSH8>BF@=1-&&$#####:998888976688668:9876655/244654608HHDJJE>GSURTN?888888888877777788888888666666666666666666666666777777769A_UBRSH6=BFDC85+*&%##"!99888888:7689767987666432323663524824FPMPLJJOUM9777777777777777777777777555555556666666666666666777777666?`XCQTK7;AIHJB>1/,($"!!98877777:86888666545565334336534400-2AIJHGHLSXM8555555555555555555555555444444445555555555555555666666553<]YDQVK:>?IKOJD:74.)$##988766557666655554345542010021022/114:<>;FQTSPF8444444444444444444444444555555554444444444444444443333332:XVCPVLBB=FLOME<=:60*'%998877556666555576555531,.-,-.-.,-/-/678<IPKD@:4555555555555555555555555555555554444444444444444443333334=TRDOVOKH=DJNMC9;<:60)%888877777887766788777620,.--///0*.325:763@F@9665666666666666666666666666444444445555555555555555665555555=QMDOWRVN>DKNNC99<=<7.(88888888999877779999863112124434323379698;846::6666666666666666666666666555555555555555555555555655555553=LIBMVR\T@ELPPD=;<>@>6/::99877788::789787778742222345537448854567854676666677777777777777777777866666784455555666655554657777655=FHFMVWb_FIQSUO;>AA@@>:????>>>>?==<;<<:;;;;<:8634556666689;==;979:9:;;:888899::::99999999999999::::::::9988877788888999889999997=EHGNX[abLJOSWR=CGEDGEA<<==>???AABBAABE?@@ABA?=799::;;;9>?>AEE@;<==>@><<<<<<<<<;;<<====<<<<<<<<;<<<<<;;<<<==>>><<<;;;;;<<=======CIJKT^aeePNTZ[R=FMLKMKDPOMJGDBA@@?@@><=ABBCCA><::;<=??@BDC@@DDA=>@@ABA@????????@@AAAAAA@@@@@@@@>?>==???@???>>==??????@?@@@@??>??BGKOW_efcOJPV[UAHNOOQPL¯®­ª§¥£¢¢~~}zwuonlkkkihddb_^__][\[YWVUTXXXXXWVVSRRQPOONOPPPPPPPQQNKKORRXXYYZZZ[\\]^_`abghhilnpqtwy| €©¬¯«¬­¯²Ž¶··º»œŸžŽºÀÁÃÄÅÅÅÄÆÄÃÂÃÃÃÂŸŸŸ¿¿¿Ÿ¿ŒœœŒ»º»Œ¹¹žžžž··¶¶¶¶¶¶¶¶²²²²²²²²³³¯ªª°ŽŽ··ž¹º»ŒœŸŸ¿¿ÀÁÁÂÀÀ¿ÀÂÂÄÅÇÇÄÄÆÈÉÍÃÆÂÂÇÁÀÀÂœº»º·µŽLMNPQSTUX_bb`XZfgghjmpstwxz|~
+  ¡¢¢£ŠŠŠŠŠŠŠŠŠ§££Š¥~}yw|}}tmspolb^YY\ZWSDCCBA@??<><>C??HA@>>?BEGGHJGDCDFBCCBBCDDFEEEDDCBGGGGHHIIIIIJJJKKLLLLLLLLKMJDDIKIFEEDDCCCCCCBAA@AAA@??@BACCBDNTYaYVOISUVT[ULHKONJ|||zxzvy
+
+xŠ ¯¥£¥º·¶µ·º»¹¶·Ÿ»µ»¿·¬ª²¬¥²£šš§¡¥§ª ©¢©¡oQPhšÁáçÕáä K7)2?3//-12)%-1(++/1|z{{yvy š¯­¥³Ž±žº·µž¹¶»¶ŽŒ¿¶±¶§§€«°®®©šŠyegšËãëë×i*<=8:(73,0)&63%%,//.$zyyyxxz}y}~¢¢ € ¥­¹·¶ž¹ž·¶Žººµ¶·°§¬¬ª€¥¬šŠ €¡š§uqt¯×ã×ËS<E8:0&+&,1)+0*,*).,'#)zxwxxx||
+
+{mz|ª€¢°³ ¯¹Ž³·»ºž¶¹µ¶¹µ©£Šª«£§­§«š¥¢¡ ¡ ¢©®ª}{}~
+³ÚãÏZI2523-2/,./,-/.)/*)()$*|yxzy|}|v}wo{
+~€£©¬¬¡¡®¶¶¶º»·Ž¹·©¡¯º·®©§¡©ªŠšš¯ ¢£©¯±¢|«vhnœØè}<:*-,2-0$,'$(%!*,)()"**$xwx}wlwy~®¥š°®Š€±·žž¹žµ¥ ©±¶¶¯ª¬²¢««§Š¥ Š€£©vdw~Õå5<2+/3,'*)#&)%(+%'())$$$%sx~
+
+
+~
+|xvx
+
+rs¢©­¥Š¬ª€ €¯³¯®±©¶ž³°­­®­Ž±¥ «š§Š£¬¡¢uazÝ¿H6,*1/***/#%&%%$%(&'$#+% #y
+
+yoszvz¡š¬¯¬®©¡«¬¯¥ ££¢€ª°¹ž²Žµ°²³Žµ¯²§£­¥§£~drØ66.3).+-,,&'%&&&%&&#(%$!$ u
+~ttx~}}|op
+Š€«ª¡§¬±¯¥¬³²­£¬ž³µ¯¯¯¯µ³³·±¬šª¥Š
+§ª£cu¶Ä60-,//,+,-*)((%*&&&$''''%""
+~
+|vy
+
+~
+liz©­š²©¬«°µ©®©¢š¥³¶¬®³°®­°¶³°ª©¥§ŠŽ­kk±.&6*--+*,*'%*)&)'%)''())&##}rrz{{{ow€¬¬¯­±­«²°¢©Ž§¥³±¬®±±³Ž°²Žµ§¡¡£§¬liª_',(*,-+++*',$(.**-,,-/22.*)~}rj|}zw}
+ul¥ª£§©­®¯±ª¡Ž·Š¥«³±¬¯±Ž±±±°   €£~e`SF")++,+))+++$,*&)10-65676211
+~pns
+npvrtk}£¢£«°²®¥¢²§²° «ª¬µ³²ž·ª£€€ £¡€~{wj_`l~7##4**)'()*)($-1',:<DIRURKB9
+{nltyvwoen
+¡©£ ¥¶±§¢¥¥­»º° ¥ª¬«©Š¡zgTet
+1'%$'''')))('),/85BRV]koj_P@wmgzvt
+zq`dnx£¥°°­°€¡¢¥£¥«­§­«®°¥mYfntn#%,1('()((''$'/(:I\XsrvurqjX{qnuyx|
+~xwuhlkoiiv£  ®Š€®¬šª€Š¢š±©Šª¯Š¢¡£u``s~j0(&(*)(((&''+)01LPdtrqutv|xdmnv}z{zyvu~
+ylqnquxvnloxŠ§¥ ¥¢¥§š¢£©­±­¥¢{hn}yxvyf4$**)'((''(%+1:=blsp|vxy|zvxt|xxttx{
+qqrtyuusryvrkv€¡¡ ¢Š¢š¬­§¥£¡¡£¡¡ª«
+u
+}t{sd0"*()())'&'$'1JYnpwwwz~tnw|~y|y
+|tu~{vvrsqtwrw¡ €£Š­š€¡¡
+syzxxqj4%,()((('%&%8<J`tptxw|zwsxpv}}}~~{zlizvosrouvw
+  £¢Š¬£ 
+~xvs~~zzsofc3 (()'('&&%%2Gftqx~w}{zyx|xwdhyy{|
+
+}jiy~~zxxtxury¡¥¢£¥£¢£
+~pfkvpjelq{xpec?'/5/*'&##$$<Rcr|||}~}wtnqcu}urnww{zxt|~vu  
+€£€¥¥¥
+{vnhedhillsume_bJ/343,%$"#&&6Uu}v~y|y~z|rsvvkcgmx}ip|
+wsw|u}{~ww£
+¡ª€ ~tnpn^aecgghbaVX]Q;C<=2)$!$(,Kar|
+}w}|{tzlbvnnjlneqz{{wmhpit}yqt{
+}}€ yklvje`[a^[][KPVQH\NF;.'"!'+Xhtt}|}z~src^nqzqb\mzvuxolltpdbnwufv
+§|ztpmkd[XZ\\ZVQQKchqt]E2,&!%/Ok~xs~{zyxwruVDmlmqwrmiv}w{xpmkntjZ^o
+ £©š
+zxmf[\\ZYY]`XVUNdqwxm`D-+''-Sfwuurqv}obFCi_kw}nqz}~yneefjoqpo 
+¢¢z¡€}
+
+}zn^XY[]]ZYYXVYWPf}{{|mW=.%),Hnrtvwome`H>~}ttuz}okrypojkhhlquuyf
+~sncaikjljc\YZ\\[UWUSc}|vmH0)&,M^ryzxxylvzn]T@8ru{|xorwusshhilmpyuoŠd¡
+}y~sm`^ecZXY^cb\WXZUUTU_}|
+~wj4%'(7Ypsw{zwvnbWI>.*}
+yqquqh^pqmjmvyw
+
+zX^ggj{unie\VY[`fd\TUZ^ZVUTTWX|~}
+zo:."!1<aslwlsi\OA1)(x~xqonnoqsrptz
+
+_]]cZTdh{s
+
+|sje_a`]YX\_abb_[YZ\UUXXPs~zvyB."!)5D\nkaeRND9/(&%|zxskmw}}|
+~
+
+
+
+W\Zd_QTRTRb~||xoigb_]^^_\X\^`_\[YXUVYVHm}~|xJ1 "%0ALT\\OKE=4,#"!ywt{€£
+
+
+fYOPVVXTZXUy~{yzuked^_^][YZZ[ZXWWYXWWZVTKVz{~xxO7
+& )6?=;<43**& !! ¢y
+
+
+|zy
+thQYXX[VWx~zwuoidd``^\ZYXWYYXWXZYXVVWTOQxv|ytwL7$&%$$+.,-.*)$%$ š§ŠŠ
+}wZ{o_[NQ}~zvrlfbaa_][[[[YYXXXY[ZYYSUMLJkry|tsR9
+$!"%$"#! !!! 
+­¬«š¡¥€Š } OuhMXkhz{{vpjfba]]ZZZ[\\YXXYYYXX[TVOOMao{{vuK6$
+!!! 
+
+ 
+ª§šª¡¥§ŠŠ§šš€¬¢£¡¥¥¢
+wp[]NDFM]ywyzyuoifc`]\ZXXXWXYYWWVUTRNNPMJKP]o{oaD2!!
+
+
+
+
+
+
+
+
+
+
+
+
+©š«±°²±«­­¬©Š¢£¡¢£¡¢YKLKGNEJEY{{sxvrlfc_]][ZXWWWXYYYWVSONNNNNKPO]X`ZT4+(
+ 
+
+
+
+
+
+
+
+¬­°°±°²²­¯±°«©©š šššŠ£¥££¥š€£€¡dsVVHKRJGC@g}{wvrnid_[\[ZXWXYYYXXXWTQNMOLKJILR_:GAA2'"
+
+
+
+
+
+
+
+
+°®®©¬©ªª®ªª¬¬¬¬®¬¡€ª«°°ŠŠ¢ª­¬££¢¡£¢_Y}
+}wVDJFIFKJHp|psplhc\YXYXVUWXXXVVVUSPMKMJLLLLUb2728,&&!
+
+
+
+
+
+
+®¯°°°°¯®®®­®¯°±±Ž¯ª«°Ž·¹¬ª©«­¬©š©¥€§šš¥€¥zfc£©wf`[UPNZ|}|{uqojf`[YWXYVUVWWXYWSQNNOOKLJKOLOb; (++ 
+
+
+
+
+
+©ª¬¯¯¯®¯­­«­­°°²±±²¯®¯µ¹œ±©¬¯¬­°±¯®°°¯¬¬Š¢tik
+yifec]Z[tuwwuusomje_\ZZVVTUVVXYVTPNMMPPMMLORKM`X%&)$ "
+
+ª«­®®®®®««©««¯®®°·Œ¹Ž²²²ŸŽ¬­¯®¯¶³²±±¯­­¬š¥§ry}}jgiidaT\[VZalqmlie_\ZZVVUTTVWXUSPNMNPQOLMQRKK]r*!%  
+
+
+
+
+«««««ªª©ª«­«­®°¯°µ¹ºº·Ž¯²²³±±±³µµŽŽŽ°¯¬­­¢¯~{{uznlomieegkffb`[jgec_[YVTUSSUUWWWURPNNOPOOPPRMJW5$"  
+
+=šš§ŠŠ§ŠŠ©©®©¯®³²°°°±³·µ±®²¶·¶µµ¶·¶¶Ž²°®­ªŠ­¥
+}}~zwsnqkmmkdifc^\ZUSRRQSVXYYWVTRPNNNPPQORROTK!
+ !$
+
+
+
+
+&$-Pt­­«ªª©©©©©¬Š««³³ŽŽ³³²³³Ž³±²¶ž¶µ·µ¶µ³±±¯¬°®®©€¡¢¡~}}{{yxwphqmfb^\XTUSSUVWYXUUURRPOOOPQOORNPl,!&% 
+
+
+
+
+
+AiwpµµŽŽ³±°¯±µŽ°­¯²Ž±Ž·žµ°°³žŽ³³ŽµŽµ¶µŽ³³²°®°«°±€£€Šš
+
+
+xr{xsnhc_\][YWWVVTRRRRQQQQNMONNNKK*$"& 
+
+!
+/^~wlrŽµ¶·žž·µÁÆÂÂŽžŽ¶­­°²°«°¶œŸŒµ³ŽŽ³ŽµŽ²²±°®®®¯««€­©¬«€
+}~yrjeada^\YVTRQQPPPOPPMLONMKHIÂ9&%% "
+
+
+
+
+%LrulvwŽ·žžº¹ž¹¶¶±³¯Ž¶Ÿ·ŒŸ¹µ¶¶µµ·µ³¯­°Ž­¯®®®­­®«¬­³ž«£¯§§ }ytoiheb`]YVSQPQQOOOOJROIMHDwæ}%+* 
+ 
+
+
++I{zxyywwvµ·¶¶·¶³Ž¶Ž«­²Ž±²¹»»ºŒ¿œ¹Ž·¹»žµŽ³®®®®¯­¬¬¯«°±¯££­£}|vtqnid`]WZVRPONOLPJLOKFGOØÁ6/+$"+Vy~|||{|zz±²²²Žµµ¶°Ž±°Œ¹³··ºŒŸŸŸŸ¿¹¹»º·Ž²±³±²±°±¯®³©ªŠ ªª§£© 
+}|yuqlgdd^[ZUPQRMMLKJFFH=æ.
+*Ohp||}}~±±°°³ŽŽ¶ª¯¯¬Ÿ¹¶»º¹»œ»¹ŒÀŸœ»ž¶µµŽ²³±°¯­¬ª©¢ª«ª¬¡
+}xsnlcb`\ZVRQKJIIGFHEHQÃÍus||
+~~}¬­«ª©šŠ©ªš€¡µ°°³¹µŽžŒºž¹···¶ŽŽ³Ž³³±®«ª§š§š¢©§«Š§¬®«¬¡zyupv keEHM?@7C:TÞÕÈÄ¬
+~
+
+ª©§Š¥¢¡¥««¬«¶°³µ¯¬­²µŽ²³®¯°°¯°±²³°®«©§Š¥£Š¡§§«Š€¢£¢¢Ž¶®ª¢  ªØ¶hQCJF?B8=á¿·ª ¥Š§¢«°«ª¬¯­«ª¬­­¬¬®®±±®ªŠ£€£¡ £¡£¢ £¥Š¥€ £®±Š¥¡ £¡£¥¥©€€±ÐÎsePGHMIJPÅÑÎµ¯£¢Š­±·°¬­­¬š€§š©«¯®¬«¬š£¡££¡€¡Š§€¡š«¡¢€«­­š©š¥€¡ €ª§¢š¯©µÑÓ¢sZVWSHBbÇÊÁ¶š€§°Š£¡¥£¢ªš±ÂÁ±¥€ŠšŠ¡¢¡¢¥§š§Š£££©¢  §¯°¯Š­«šš€ £¡€¥¢ £Š¢¥ª¬§«¯µÔÓ®zhh`ZTDfŒÎŸ¯«¢³ŒœŽªš¬µŽ³²²Ÿµ°¹Ž­ªšŠ€ŠšªšŠ£ªšš§šŽ¡§€ ¢©¯¯®°«¯¬ªš¥   ¡££¥¥£¢ Š§§š§©²±¶žÉÕ¿~vm__^Ta ÑÌœ²¬©Š¡ š «¥€£ŠŽ­£ª¯š€€£¡¡¢ ££¥®­«©Š £¢¢¬·¢€ ª«ªª«ª«¢­ªššŠ£¡€    ¢¢€¥¢  £¥¢¥¬­«¬²¬¯¹ÑÛÂ§jplkm_Sb°ÈÉœŸ²±®¯±²±±¬Wvi`q§ª©Šªº¯¥£¥Š­«©©§¥«ŒŽ¬©ª¬©©§Š€€¢ ¡ ¡Š¢§¥¢¡£§Š©§š«©«¬¶žÅßÌ°qnqobURDXnNmjMTu
+}ytrvrtzvvrpf_lqwm
+|z}
+Š¥¡ £¢ ¢€¯€£€ Š¥Š€©¥¯±±¶ÉÙÇ®s{rd_L69:AISht
+Tb[Igrrrttpp~xryw|upqznrqqtuxzfj}opx|xvuv{€€¡£¢€Š§§€§Š¬³¬ŒÂÕÄš
+«°«««µ²Ž®²
+vVZwhTg_ZXYUXZj|ptpsrwxvwx~}|}lhwknryx€²¥¡€š¡¥ ­¥ª±µ±µÞÙ²ÌâååìëÞ×ÆÁ±©¡
+ µrKS\\cMO_qf^YMQYj{jlglo|v{~~{lzcqqy
+
+€Š¢ª¢«Š­±¶®µ¶ÍÙÕÚéÖÓÚÑÏÀœµ¯°Ëuzwuslqvl\WLOJRy~zjmmgpjxx~}~rxpox ©€ ªŠ§ª€­ª©©®ŽŸÊÚÜßßØÙÒÐÈœ¬£~zuk€¥€€wpefb_enlmmkkhumvw|
+
+rzhpup¥­ €¢¢¬±¯®«€ª¬²ºØÝÝÚÙÚÔÏÇœ¬£zxli¬­Ž¶²Ž·µµ³²Ž¯¬ujlplu{
+sbgpos
+~«š¥««€£¥§¬ØÞÞÜÙÛÓÐÆŒ«£~xtmhiÄž¯«±¶»±²·ÀÅ¿ÁœÃÅÀ»¹°°®¯®¬¬|{~
+{yqto
+
+}{wwpyyr«§¡¢ÙÝÜÞÚÛÔÎÄº©¢xwpnhjÅÇÆŸÁœ¹·ž²¯°¯µ²ŽŽ¹ŒÀŸÆÉÌÉÂÃÃÇÂŸ»³«€¡©|kryy{{|wumnttlpjbee¿Ž~~ÚÝÜÝÙÚÓÎÄº©¢
+vxqoii±¹»¶ž·»ÄÁÅÌÊÅœ··²Ž²µ°¯¬­º¿ÃÃÄÉÊÆÅÃÁ¿»µ¯­§¥¯§¥
+{pi~
+}olkdgdab_^a_aXTYVN[s¹­ÙâÛÙÚÛÕÍÄº«¡yxsojiÊÅŸ¿À¿Ž°µ²³±¶»ººÁÅÆÊÉÇÁÀÀ»º¿ÃÁ¿ŒŸÀÄÉÉÄ¿Ÿ¹Œ»¶·r|tqy|ype]Z\WSNMLKMOKGGJKINrŸ·~ÕäÜÚØÛÓÌÃº¬£|wvpljœŸÂËÄÈËÏÌÈÈÀºµ°¯®Ž³Žµ»ŒÀÀÅÅÅÄÆÇÅÀŒ···µ²²µŽ­º»²Šzw¡
+
+o~vpe~uwrmjZJKKJHBAA?CCC@?GLMUFtº³{}ÒãÝÜØÛÔÌÃºª£~vwpli·Ž°°²µµ³ºŒœŸ¿¿¿ÀÀÁÁÁŸ·ŽŽ³Ž¶ž»¿ÁÀÆÄÄÅÃ¿œŸ²²­¬«ª­€yc
+~zxpghf]XPROOT]WICB@C@>=;==>A?>>ACHLQWEi£Ÿ{m}}ÓÞÝÕÙÙÒÌÂŒ«¥ytrkgÌÍÎËÈÃÁŸžžµ°ªš©¬®²žºŸÆÊËÍÊÇÆÂÁœŒ»ºž·µŽµžœ»µ³Žµž² a
+~|xohg`TPMMFAAB?==?=@=<::89:;;;<>BFKOIMSs€³nv}~ÓÝÙÚØØÑÊÂ»«€{vrlh±±µ¶»ŸÄÆÇÃÀŸ¿¿»¹žºžŽ²µ·¶¶µžºŸÁÄÃÄÄÇÆŸŽ­«š¬«¢¢ª¡X³ }uohc_\]WLHCEB@A;;>>;:99887789:9;;;@EJL@XOFc«©xtzvÇàÜÙØØÒÊÁ»«¥}wrnjÂÁœœŒ¹Ž²µ··žž¹º»œ¿ÂÈÇÁŒœ¿œº¹·¶ŽŽµŽ¶¶³±²ŽœŸŒŽ±°Š©R~xtpkd^]YPKABBB>7;?;8;:878767788;;<>CGGINGQ@g³ŒwovÓÜÚÝÖÕÏÈÁŒ¬§yrokÄÂÄÆÈËËÉÇÉÉÆŸ¹Ž±¬«¬¯±³¶ŒººŸÀÁÀŒ»»ž³°ª¥¢¡ ¢¡€¡š§lo¹§}~rf`_^[USSIIE@94:>89<:98755332679:<?CAGCLMQPe¶ÏdœáÚÚÔÓÌÆ¿¹¬§zrojžž·Ž±±Ž·œŸ¿ÂÇÌÌÉÄÇÄ¿»º¶±²¯«§©®Žžº¹žž¹¹ž¶µ¶ŽŠqX~zvi[]XYXKHHDA:;<9:<6876432112357:<@@@CHLNRQr¶¶fŒßÙÚÓÑÊÅ¿º¬©
+|rpkÆÈÊÊÅÂÁÁÀÁœ¶²Ž·»µ¶ž¹ŒÂÅÅÂÁÁ¿»žŽ±¯©¡ ¡£Šš¬°®­°¯¯Nx}~tjhhigca^KHHH?97:89:876532222122479=@CABGITQSm¶žßÝÛÕÑÌÆŸº¬«~uslµ¶·»¿ÃÅÅÊËÊÉÉÆŸ¶¶²¯®«©šª¯°²³µž¹»¿¿ÁÂ¿·¬€Š£ BzqjbZXYNMKD?98;95787642100010/346:@AA?BKQVNTP·ŸáÛÚÕÑËÆŸ¹«ª vulŸž³³²°®¯­­°¶ŒŸÀÄÀ¿ÀÁÁÀŸœŸ¹²«šŠ€€ššª¬¬¬¬«¯²··±­¬ª£šM{}~~{lhbcSQKKC<79887754410/00200/26:==>@@FPRLaO[ÅÝÝÚÔÑÊÆœŸ«« xvnÆÊËÈÅÅÄÃÃÀŸ»µ°­®©©©«¯µ»Ÿœœ¿ŸœŒ»»··³®š¥€€¢¢§¥©­]h xurlhie[^RSORHB><52343220///010013479;=>>BKQMaZOP°ÞÝÔÔÐÉÅŒŒ«« zxo§­Žµµ¹»ŒÂÃÇÌÏÍÊÉÆÃ¿¹Ž°­«¥Š¥§ª®²Ž·ž»œŸŸŒº²®ªª©§£ŠiW}ywh^TWVXRHB<756600/////0000223347:=;=FMLWWG4ÞÝÑÔÑÊÅœŒ­«¡}yqÃŸºžµ±¯°¬¬®°²³¶¹»ŒŒŸ¿ÁÀÂÆÃÂŸºµ±®ª§¥Šª«©§««®±±±²±­§M¢zvqobeWD<DFILE>;6575/..//0011100122148:9:BIJLKG?rÞÚÕÔÐÉÅŸ»­ª¡}zrŸŒŸÄÇÅÂÁÇÇÆŸµ¯±Ž²®«§Š§©«¬¯ŽºŸ¿ŸŒÃÀœ»ºž¶Ž§¢C£¡vlofYSTONMHA<6456/./00021000//11023469@EDIFF:pß××ÒÎÇÂŸž­š¡}xsª¬«©«±Ž¶¹»ŸÂÄÆÅÆÂÁÀŸŒ¹¶µ°¯¬¬«¬¬¬š­²µ··ž¹Ÿ»»»µ¯ŠMqqkhedeeWH>98740/00/0110///./1121257>B@HHD7fáÚÔÑÎÆÁ¿·®š¡}wrº¿ÂÀœ¹Ž¯­ªŠŠ©©§¢§­µœÂÃÂÀœœœœ»ºººŽ³±¬¥ ¢§§š«­Š°¢bw }wzqkllgc`hZK@;:61210/.///.-..-./01/135:?>GIC<[ÞÛÔÑÏÆÁÀ·¯©¡~wqŸŒœÁÃÃÄÆÂÅÆÃŒ¶±¯€€€€€€¥¥§«°Žµ·ºŸÀŸŸÀÀŒŽ­¯®­§¡U_€¥¥¢ |phffaPQSNB:6531/.--.---..-../.-/015:<HH?9^ÖÙØÑÎÅÁÀ¶®š¡wq­©Š¥¥€§«­µŸÃÂ¿œŸ»ŒœŸ¿¿ŸŒŒµ®ªš§€¡¢£§šŠŠª«¯³ž¹¶²¯­«€šJ
+~okom^XOB><332..-...,,-...///-,.0259EA8DRÊÞÚÑÍÆÁÀ·­š¡
+wpŸÂÅÃÁŸž²§ª­­©€ €¬³ž»»ººŸÄÆÅÃÂÂ¹Ž¯©¢§ŠšI¡®®¬©€ {upic]df`XSKB?62.,--.-./..---..,-./026:<=@L¹ßÙÐÍÆÂÀž®©¡
+vp²·œ¿ÁÂ¿»ÀÁÀ¿Œ¹·¶¯®­ªšŠŠŠªªª«¬¯²ŽººŒŸŒ¹Ž¯±®«š§¢Jzzpddgh^RIE431/...//.-,,.221.-,-.145;786©âÛÐÎÆÂŸž­©¡
+vo«Š£¢€€©®³·ŒÁÄÂœžœ¿ÁÃÂÀŸœ¹µ°¬©§€¢¡£€±®ªšš«¬¬£®€¥Vt
+~yuvttrf[QE>80-.-+(/.---/.-,,-010014:695æÖÐÏÆÃœ¹¬©¡
+uo·žŒÀŸ·°®ª©Š€¥§Š¢ €©²·ºžž¹ŒŸŸ»ºººŒŒ»µ­§€¡€ h\§¢€€¢¡~vnmr\f`[][RD@>94--.1,,--/.+)0/,-,,-/.,3,8çÖÑÐÆÄŒž«š¡toŽµ¶µ·œÁÁÂÄÆÆÇÅ¿º±¬§ŠŠ¥Š§¢¡¢€§ª­®Ž³²±²¶ºž·žžµ°©¡pC}¡~zpngfa[VGGIKD;4461/+)'&'("""$(+-04264:zÞÚÓÑÆÅŒ·ªš¡tp¡Š§°²ŽµžŒŒŒÀŒ¹¹žµŽµµ³¯®®¬Š¢¢Š©­°­ª£Š­£A~|}}
+tsykciXMHA>:4-%'+048>FN]bhpv{||
+m×ØÒÒÆÆ»žª§¡tpµ³±²¯«ª«¡¡ ¡¥­²³µ·¹¹ººžž¹ºž¹»³š£¡>£€€lqlf[\aMQPMF??BGWbr|
+~{ÕØÑÒÇÆ»žªš¡tp¯°°°±²Ž·º··ž¶²¯°©šŠ¢¢¢¡¡£šª««¯³Ž²²±­®­®°®©¥€ Qj|}vhehgmot{~}|{~}}}|zxw{xuuyzÏ×ÒÐÈÄŒ¶«š¡~up¢¢§Š§©««®³µ²°°±³¹¿·³¯­¬©¥¢¢ ¡Šª©§¥ £§©Ži\
+~zuu{x{
+}{zywurrsrqqrrrqqqqpponnpnnmÄÜÒÏÈÄŒ¶¬š¡uq§š©šŠ¢ £¥«³Œºº»»¹·¶³±¯©¢ vW£¡ 
+~|urmjjmnnjjhihhiigfffhhggheheje¶ÛÑÏÈÄŒ¶¬§¡uq¢¥©¬¬ª§€Šª±³¯§£¢€ ¡¡¡¢Š©ª­±®©§©©¬®¯¯ª¥€€ {Dzxvrrustqlihfedfgfffeedccccddcce_a^f_£×ÑÐÉÅœ·¬§ ~up€£¡€š¯ŽŽ±¯®Žµµ±¬šŠ€Š««€¡¡ ¢£ ¥ŠŠ€G¡{yvsvtrpmmmlhhgefdcbaabba___babaaa___\a\`WÝÓÑÊÆŸ·¬§~tp ¡Šš©ª­¬«ª¬©Š­®°ª
+
+K¢¢
+wrsqpmmmkjjghhgeeb`^\[[[ZZ[[[]]]]]]\\\\_[\TÝÓÒÊÇ¿¹¬š}to¡Š­¯®¬««£¥§Š¢
+   ¡€ªª¥¢¡ «§¡
+WS}xxwrnlnmjffdee`a`_^\[[YYXXXZZZZ[[[[[ZZ\[YXZUoÒÒÑÊÇÀ¹¬©|tp¢¢¢£Š©««ªª«««ª«ª¥¡¡§£~N ¢{wwrjjmkkifedbebba`_^\\ZYZ[[ZZZ]\\]\\[[ZYWXWQ_ÅÑÐÊÆÀº­ª|tp¡ŠŠšª®¯š€€¥€ £š£ ~~¡|G
+|{tnmkjlmiigeedddbaa`__^^YXYYYZZZ\\\[[[[[\[VVZU\¹ÐÔÊÇÀ»¬«{tp ¢
+
+
+ ¥šªª©ª¬¯£¡G~|nhhieadcb``^^^``___^^^ZZ[[[\\\\\]]\]]]^\YZ^Z_«ÐÒÉÇÀŒ®­|tp£©ª§££€€¡
+Š¡¢£¡§ Hh¯Ž°©}pfcccaaa_^\\\\\\\\]]]]ZZ[[\\]]]^_______\[\`^]ÓÑÊÆÀ»­ª|tppruy~¢€£¢¡Š««©šš©¥§§¥Š©š£e}|wupgaadeba`^^]]]\]]\]]]]ZZZ[[\\^______```]^^``\wÓÐËÆÁº®©|to}{||¡¢£€¥¥¥££¢¢¢¡ u|xsvwpplgddcaba`_____^^^___^^\\]]]]__^]]^^___a^aacd^jÊÏÊÇÂŒ²«¡~sn}{{
+ ¢¡ ¡¡€{|yyvqxrurqojffdb_ba`_`_`_______^^^^^_^^_____`````a_bddedhºÒÊËÁŒ³«£~sn¢¢§§§§§§€¢¡
+wx|}wvmsnnpomjgecabbba````a______``````___`abbaabbbbacddeggšÓËÏÀ»³ª£~totrnkjmorvwz~¢¥ ¡ |{{w}rur
+}y}uqwnkspnokhggdabbba```ab_`````aabbbaaaaa`aaabbcccbddddggÒËÒÁ»µ¬£~sn
+
+{uprtussvxz}wyxupppolnlmkgdcbbbba``aab```aaaaaccccbbbbcdeeefffdddeffggÏÏÒÄº²­£|to}
+}wtqpomtvy|
+
+tvzxrmronpmmlifdcccbbaaabb```aabbbddccccccddddeeeeddeeffgfxÈËÎÅœ³¬£|upY^ekqv{
+|zwvunjfefgjlnmtztpwlyqvqkklmljgdcdddccbbcc``aabcccdddddcccccddddddddefffgglŸÊÊÇŸµ«£|vqVY\][[\]^^adgilnvx~
+
+|yvt{polrjr|W{xnqnpjllkhddddddcccccaaabbccdeedddcccddddddeecdeffgggi¬ÊÇÄŸŽ¯£|vp@@CEIMRSWYZ\_`cdghinpnkglpuvwz|
+
+
+zrvLr{unlklmkhedeccccccccbbbccccdeeeddccbccddddeeccddeedehÇÇÁÀµ²¢{voXVSPNMLLKIIGEDCDGIMQUX[]dfhfgjllgfgghilnqsuwwz}~{
+|mrZ_
+vrpmlkkidcecccccdddcccccccceeeeedddccddeeeffffffeeekÄÈÄ¿µ³¡{tnSTUVWXYZ`^]ZVTTTPNKFBABC>AEGKOPOW[aekllkjijjigfcgebekpv~dOwnmkihgdcddddeeeeeddddddddffffggggegghiijjkkkkjjjilœÈÈœ·³¢|unWWWWVWX\ZXXYYYYYYWUTTTTRUY[ZZ[]]VTQMKKJLNOOQSUVVZU``dfwwycD|vokiigdcddeeeefffddddddddffgghiijijjklmnnlllllmmmiµÃË»ºµ¡}unBBBEKRUUWXXVVXYYXVTRPPPQTTW[\]bgeehigggefeb`\[XWXSTXSMUduk8x}}}wqmihhhgfghhgfffgfffffeeefgghijjklllmnnoopnnprrsvr~ªÈÄÀŸŽ¢|tnPPONLJHFDCB?>=;;EGJNPQRRVVWX[^chgfec`^]Y\]`bcdbacbbea`dnvq;j|}vtokkkiijhhiihhhhhhhhhhhhjjjkkllmlllnpqrrrsrqswzyzŸÅÄž·¢|tnPQRSSTTUWURPONMMHJJHFC@??AEHJJLMWVWY[_baa````a`a`abbddhjmvF\~zsnmmllmmmllmmmlmlllllllmmmnnnnopppqstuu{}|zz~¿ÃŸ··¢|uoPPONKJJKMMMMMMOQTSSSUTUVORVXXTPQLKMMJILLNNLKMNQRYZ[[\]_^hwVQxsnkmnonqqppppppppopopopoqpqprqrtuvwwxyz}{{~
+³Ç¿Œ²£|uoILQTUUTUSQPQPOPQPOOOQTWYY[]^^]^`bcfgb`bdaaaa`^\ZQPOOOMLLJTI=}lppnmoqqqpqpqqrqoopqrrsssssttuuuvxz{{|~Äº·º€{tn@BDEEEEECAACEFGJKLLMPRUWYYXWUUWXY\`a[XZ\\^_`a`__a___][Z\e_XB|dnuvppqsprrtsutvvwvwvwvwwxxzz{{{z|~~
+e{œÀŽŽ¥|tnVTSQPQRSQMIGEBAC@A?><:::=@CEFILNUW[^ZX[^^^^^___`\[\]]\]^kc\:]tektxxtuvtvxyxxyz|{|z{yzy|{}}~~
+
+jN<V¬¹¶µ¥|vpKLMOQSTUTQNNMLNPWWURNLJJIKIFDDGHHGJJEACFCEHLPTVW[\]^^_`_YbkHMW{iglw~|z|xz||{yz{yyzz{{{{|}}~
+~gN?=B@@šºž°¥}vqVWVWYYYYYYYYZ[[\[[\\^_____``aabcccdegghhhiijlmmnonmmnnpqqqsuuvvwyyxyz{{|||||}}~~Š €šª«­®«­®­ªª€€®¯²µžºŒœ¿VWVWYYYYXXYYZ[\\[\\\^_^^__```abcccdegghhghhiklllnnmmmnpqpqsuuvvvyyxyz{{{||||}}~~~š ¥€§­±²³ŽŽ°Ž¹»»»µ¬§€°¶ŸÃÅÈÉËÌÍÎÏWWVWWYYYXXYYZ[\\[\\\^^]^__``aabcccdefghhffghjjkkmmllmnooopsuuvvuyyyyz{{{{|}}}}~~}}~©Š¬·µºÀÄÄÅÄÅÅÈÌÍÍÎÈ¿°£¬»ÂÌÏÑÑÓÔÓÓÔÔWWVVWWYYXXYYZ[[[[[\\]^]]__`aabccccddfghhffghijkkmmllmnoooqruuuttxyxy{{{{{|}}}}~~}~~~š­¡«Žºº¿ÃÈÉÈÉÉÊËËÉÉÉÇÀ®Š­¶ºÉÌÍÎÏÐÐÑÑÑVVUVVWXXYYXXYYYZZZ[\]^^^__`aabbbbccdefggghghijjjmmmnnooopqrsttssvwxyz{{{|}~~}}~~}}¥µª§Œœ·ÀÂÇÊËÌÌËÍÍÌÊÊËÉÃ¯ª±¶·ÇÊÌÏÐÐÑÑÒÓVVUUUVWXYYXXYYYY[Z\\]]^^]]__`aaacbccdefgghghijjklmmnoooopprsssssuvwxz{{{{|~~}}~}|~¡šºµŽÁÁŸÃÃÆÈËÌËÊÉËÍÌÌÌÉÁŽ®¢µ¹ŒÈÉÏÐÐÑÓÔÔÔVUTTTUVWYYXXYYYY[[\\]]]^]^^__`_`bbcdddeegggghijjlkllnoppopqrttttuuwxyyzzz|}}|}~}|~}€¬»ÀÀÂÂÈÉÉÊËËÌÍÍËÌÎÏÌÍÉÃº²Š¹œÂÈÈÏÏÑÑÒÓÓÓUUTTTTVVXXXXYYYYZ\\\[]]]]^^__`__abcccddefffghhiikkklnoopnopqstuutuvxxyzzz{}}||}~|~~}§¯ÀÅÃÈÆÈÊËÌËËÊÌÍÍÌÍÌÉÌÊÇÁ·«ŸÁÅÈÊÏÐÒÒÓÓÓÓVVTTTUWWWWXXXYZYYYZZ[[[\]]^^``aa``bbcdcdffghhhiikklllmnonoopqrtutuvwxyxxz{||||}~~|~~}ª²€ÁÅÅÆÉËÉÊÊÊËÌÍÎÍÌÍËÊÍËÈÅ¿¯¹ÄÇÊÍÏÏÐÑÒÓÔÔUTSSSTUVUUVWWWXXXXXYYZZZ]]]^_```__abbcccdefgfghhjjklllnnmmnnpqtuttuvwwwwyz{{{{|}}|~}«°§ÅÈÅÉÌÌÊÉÉÊÊËÍÎÍÍÍÍÌÍÌÇÇÂ³»ÄÇËÐÑÑÑÑÑÒÓÔRRRRRRSTSSTUVWXWVVWWXYYY\\\]^___^^_`bbcbddfgfghhijjklmmmnnoooqsutuuvwwwwxyzz{{|}|~~}«¯šÉÊÆËÎËËÊËËÌÍÍÍÍÍÏÎÍÍÎÉÈÇ¹¿ÆÉÎÒÑÑÐÑÑÒÔÕPPPPPPQQRRSSTVWXVVVWWXYY[[[\]^^^^^_`abccddeffgghhijklmmmoonooprstuuvvwwwxyzz{{||{}}ª°€ÇÊÆÊÌÉÌÍÌÎÍÎÎÎÏÎÎÍÌÍÏËÊÉœÃÉÌÏÓÑÒÑÐÑÒÕÕNNNNNNNOPPPPRSUVVVWWXWYYZ[[[\\]]__`aaaccbbccdeffgghijkmmmmmmmnpqrrstuuvvwxyyzz{{|{~{§±ÄËÇÊÊÉËÌÌÎÎÎÍÍÏÎÎÌËÌÏÌÈÉŸÄËÌÏÏÏÑÑÒÒÓÓÔOOOOONNNOONNPRTUUUVVWWXXZZ[[\\]]^__``accabbcdeefffghhikkmmmmlnooqrrstuuvvwwxxxyy{y{~zŠ²ÂÌÈËÊÊËËÌÌÍÍÌÌÍÌÍÎÍÍÎËÈÉœÄÊÏÏÎÎÏÑÑÒÓÒÓQPPPOOOOOOPQQRTTTTTUVWVVXYYZZ[\\]]^__`ababbcdeefeffgghijmlmmmnooqqrsstvvvwwwxxwx{y{|y¥°ÄÌÇÌËÊÊËËËÍÍÍÍÌÌÎÏÍÍÍÌÇËŸÄÊÏÑÏÏÐÑÒÑÑÓÓPPOONNMMOOQQRSSSSTTUVWVVWWWXXYYZ\\]^___aaaabcdddfffgghiilkklmmoooqprrrtuvwvwxxwwyz}{w¥¯ÅÌÅÌÌÊËËËËÍÍÍÎÍÍÎÎÎÍÎÎÈÌ¿ÄÊÐÑÑÑÒÓÒÐÐÒÒRRNONMNLPPPQQPOQQQRSTTTTVVVVVXXXVWXZ\_`a``aaabbceeffgghhjkkkkkllnnpoqrrrtuvxyzzzy{}{x£°ÅÍÈÊÍËÌÍÍÍÍÍÎÎÍÍÎÎÍÎÍÍÉÉÀÅÊÑÑÑÑÒÓÓÑÐÑÓQROPNLNLLMNOPPNNPPQRRRRRUVVWVWXWVVXY[\^____``aaacddeeeffhijkjjjkmllmnpppqstvxyxyyzzyy€®ÆÍÈÊÌÉÍÍÍÍÍÍÎÎÎÍÎÎÎÏÎÍÈÈÀÅÊÐÏÐÐÐÑÒÒÑÒÔQSPPOMNLLMPPQROMPPQRRRRRTTTUVVWWVWXYZ[[\]]^^_```bcccccddefijkjiikjjklnnmpqrtuvwwxyyvv€ªÈÍÈÊÌÊÌÌÌÍÍÍÍÍÎÎÏÏÐÎÏÎÉÈÀÅÊÏÐÐÎÐÑÒÑÒÓÓTURRQNPOQPRTUTQPSTTUTTUUTTTUUVVVWXXYYYYY[[\]^___`aaaaaabdegiiiihiijjklmnpoqrsssstuwst¥šÈËÆÉÍÌËÌÌÌÍÍÍÍÍÎÎÎÏÎÎÍÉÈ¿ÃÈÎÐÐÏÐÐÑÑÒÔÕWXUUTSUUVSRUXUTUVUVVVWWWVVVVUUUVWWWXYYWWYZZ\]^__^_______ccdefggggghjklmnmnopqqqqorurs§©ÇÈÃÈÌËËÌËËÍÍÍÍÍÎÏÎÍÍÍËÈÇœÁÅÌÏÐÑÒÑÓÒÒÔÕYZWWXVYXYVUWXXXYVVWWWWWXXXXXWWWVXXYYZYXXYYZ[\]^_^______`aabcdeggffghkklllmnopqqqpsvrr§ŠÇÆÃÈËÊÌÌËÌÌÍÍÎÎÏÏÍÍÏÍÉÉÇœÁÆËÎÏÒÓÒÒÒÔÔÓWYXZ[YZXXYZYYZZXWWWXXXYYZZZZZZYYZZ[[\\ZZZZ\]]^^^__`````a_`abcefgefgghjjkklnoppoortupsš£Â¿ÀÉÌÊÊËËÌÍÍÎÍÍÎÏÍÏÏÌÉÊÉ¿ÂÆÌÍÏÓÒÓÓÒÓÓÓVXX[\[ZXX\]XW[ZVYYYYYYZZ[[\\\\[[\\]^_^]\]]^^^___]^^____`__abdeggffgghiiijkmnnnmmpprnr©¢»ž»ÉÍËÉÊÊÊÌÌÍÌÌÎÏÍÏÐÌÊÈÈœÀÄÉÊËÓÓÓÓÓÓÓÓWXZVYZTZXU^XY]W[ZXYZYZ\[]\\\\\]]]_```__^````````_________``bcdefffffggihhijjkkkkolprp
+©¡ž©³ÃËÏÉÌÌËÊÍÍÎÌÍÍÌÎÐÏËÌÈ»ÃÂÇÉÈÒÒÒÒÒÑÒÒVUXVXXS[\XZZWTWY[XXYWY\\^]^^]]^]]_`aaaaabbbbbcccaaaabbbb``abcdeeefffffgghijkkkkjkjoqpš }°šºÇÌÌÌÌÍÎÎÏÏÍÏÐÏÏÑÏÌÃÅžÀÃÇÈËÔÒÒÑÐÏÏÏVSVUWUR`vPP[VYW[YYXWY\]]\]]\]\]]__abcddccddeeffeedeeeeebccdeeffffgghhgfiikklkkkjjnpp¥ z¬®œÇËÈÈËÌËÊÌÊÌÍËËÊÈÆÁ¿¯·»ŸÂÊÐÏÏÐÐÐÐÐVRVUVSSf¢¥bL]ZYW[XXXXY[[[\\\\\\]\^_abdeeddeefgggghgggghhfgghhiiiiiijkkjjkkmmmmlkkkmnp£z€ªº¿ÇÉÊÊÊÊÊËÍÍËÊÉÈÆÁŒ³£±Ž¹ÂÌÑÒÑÏÍÎÎÍVSVUSQUj€¶pJSY\Xc[VWUVWX]\\\]]]^]]^`bcefddeefgffhhhihhhiiiijklllmmlllmmnnooonnmmlmlmo¡{¬º¹œÃÈÇÆÈÊÈÈÇÆÇÈÅœ·µ§³«­ŒÈÍÏÏÎÍÎÎÎTSVSRQTfaPRW[]sbVVVUWY\[[]\\\\]]^_abdddddefgffhhhihhiiijjklmmmonnmnoopooppoonnoommq x¡±²²ŸÆÆÇÉÉÅÇÇÇÈÆÀ¶­ª®¡ºÉÈËÍÌÌÍÌÊSSWSSTS^qdU\XUQ`fUTWWX[ZYYZYZZZ\\]^`abcbbcddeffhhhihhiijkklmmoopooooppqqqqqqqpprtqpuw}¢Š°¹º»ŸŸ»ŸŒŒŸŸ¶¬£ ·ÆÏÒÓÐÍÍÊÇSTXSTVRXVSORU\N_eQRWWWZXWXXXXYY[[\]^_`a`abcddefhhiihiiilllmnnppqqqqqqrstutuuutttwtrv
+y}wx¡£
+£¬°Ž³²²±®SUWUTUUSVVUSTWS`bRVVT[ZVWWWWWYYZZ[\\]^^_``bccddggghhhiikkllmnnnrrrrrsuuvvwxyzzywywv{}uyx{{{
+~{{TUVVVUUUVUUUUVRabSVVUZYXXWWWXYYZZ[\\\]]__`abcccfffgghhiiijkllmmpqqrstuuwwxyz{{zxzyx|}z}|z~~
+UTUWWVVVUUVWVUQdaRVWVZXXXWWXXYZZZ[[\]]^__``aaaadeefghghgghhijkkmnprstuuwwxyyyzzz{|z{~
+VTTVXVVWVTUXWUQf^QTWWYXXYXXXYZZZZ[[\]^^___``a`addeffgggfffgghiijlmprsuuuuvvwwyyz{|yz¢š­¯®­­©§§Šª®Ž·žžž·WUVWVTUXXTSVWVRh\QTWXYXXYXXXYZZZZ[\]^_____`abaadeeffgffggfffgggjkkmoqstrsstuuvvxyywx€š¬±¶ŒÀÂÀŸŒ»º»¹µ®§¡ «ÀÃÊÌÍÏÎÏWVVVUTUVYUSUVVSg]SUWYXWXYXXYYZZZZ[\^_``__``abbcdeffggffgfffffggikjlmorsqqrrstuuttutw¡š¶»ÀÂÆÊÌÊÈÆÆÄÂÃÃÁœ»µš£¯»ÅÉÍÏÏÏÏÏWWWUTUUUWVUVVVSg]TUWYVYYXXXXYZZZ[\]^__`__`aabccdeefggffeefffghijkklmnpqppqqrstttsutw¢§°ÀÆÏËËÍÌÌÊÈÈÊÉÈÇÇÆÅÃ±šŽÃËËËÌÍÎÎÌÊWXXUTVVUUWWWUVSh\TUVYWYYXXXXYZZ[[\]^^____`aabcccdefggffddeffhjkklllmnoopppqrsttvtvtw€¡¬¡³¿ÄÌÎÍÍÍÌÌÊÊÐÌËÍÍÎÍÌ¿š¬»ÇÊÐÎÍÎÐÐÌÉWWXWWWWVVXVYXUSi^RWUYUYYXYYYZ[[[[\\]^___``aabbbdeefggffddfghjjkjmkkmmnopqqqrsttwuwtx¥­³ŸÂÉÈÊÎÏÍÉÌÌÇÈÆÇÉÏÐÉÉÈ¿­Š·ÀÇÅÏÍÎÐÏÌËÊXXXWUUWWVUUYWRSk_QVUXVZYZYYZZ[[[\\]^^____`aabccdeffggffeefghjjkjmklnnnpqqrrsttuwuwuzŠ°µÂÇËÊÊÌÊÁž¶µ°¯¬±ŸÍÒËÌÍÅ¶®ŒÄÉÇÍÊÊÍÏÎÎÌYXVVVVXXXY[[XTSk~`NUXXVZZZZZ[[ZZ[[\\]]^^__`abbcceeffggffeegggijkjlmmnonprrstuuwvxvwv|ª ±µÅÉÌËËÊÃ³¢®ÅÍÈÉÊÇº³ÁÇÍÍÏÎÏÑÐÑÒÏZWTVXXVVUVXWVXTi~aOVZXVXYYZZZZZZ[[]]]^^^__`abbccdeeffgffffghgijjjlmmpooqsstuvvxx{xxw|­€ŽµÆÉËÊËËÄ±ªÃÒÐÎÉÉº²ÀÉÎÏÒÎÎÐÑÓÒÌXVUWWWXZVUVRSVRjaRVZWWWYXZZ[[Z[]]]]__``__aabbccdddeefefgghhhijjkmmoqqprstuvxxyy{yzx|­šµ·ÇÊÌËÏÏÉµ£ºËÍÊÍÎœ²ÁÇÍÐÓÍÊÍÑÔÒÊUVWXWV`jrlh_XTNk_UVWWXYXZZ[\\\\]]]]__``__aabbbcddddeeeegghhhijkloooqrqsssuvxxyyyy{z}«Š¶·ÆÊÎÍÑÑÊ·£·ËÍÊÐÐŸ²ÀÇÍÐÐÎÎËÄÄÉÎTUYYWXdt
+mZSMj\YXVYXYYZZZ\]\\^^^^^^____``bbccddddeeefgggghijkmoooqqprrstvxxwxyz||­€µ¹ÅÊÎÌÍÎË¹¢¡·ËÌÌÏÐŸ²ÃÉÎÐÊÎÐÅ°ªžËWUVXWWbo}mUTPh
+X\[X[XWY[[[\[[\````___`__``accdddddefefgggghikkmoonppnqrrtuwxxx|{~|°£µ»ÅÉÎËÍÎÊº£ ¶ÉÌËÏÐŸ²ÅÌÍÏÎÎÌŸ§ ³ÇWTWVRV_k{n^WQlYW[XVZV[Y\\[]\^^[_cZ^`]aa`cbbfcedbcegffgiighijjnommoonppqsuwxy{}{}y²€³œÄÈÌÍÌÎÊº¥ŽÌËÊÍÐœµÆÊÏÌÍÌËÁ«€±ÅTSVSPSZcv~sbOJp]UWVVZZZXYZYZZ\_][^]`^^]_`c``fecddeceegghhhhjkklonnponpqrtvxyz{~{}y²€³ŒÅÉÌÍÌÎÌœ¥ŽËÌÍÌÐŸ¶ÅÈÍÉÌÎÎÄ°©³ÃTQQKLOOTmfYUSjmVUTTUXZXWWWYZW\W\\_^a`dbbaddcfcdccbefgehggghilmjmnoqqqtstwyzzzz~{|z²€³ŒÄÈËËÊÍÍœ§ µËÌÍÈÌŸ¶ÅÉÍËËÈÊÇÁ¿ÆÊURMHKNIGOkeOIPNPRIIIKPRURRRQTUSWWWTXZ^[Z]]]accfcececfegfhgfgghjlmonorrtwwwyyyxxx|z{{³¥³œÄÈÌËÌÌÉŒª ¶ÉÍÍÌÍÁžÄÈËËÎÊÉÉÉÇÉÄRPMKLMIGBHEIHHHFHGLQPLMWQOPQSVTVRSVXSY[Z\^`db`ffbdgcdbggigfghhikopoorrrtyyyyxxwxyy{}²Š¶¿ÆÊÌÌÍÍÊœªŽÇÍÏËÊÁžÃÆÊËÊËËÈÅ¿ÄœNJNLIJLKNKKY_e[IOFAMRMHNQLPSUZ[\emumTQTUUUY_a`dcdac`gghbhffhiijlkmnoqrrsyyyyxxyzyy{~°šºÁÇËÎÍÌÎÌÁ¬ ¬»ÈÌÍËÈœŽ¹ºŒœ¿¿À¿ÃŒÃ¹TJLKGJMKMSY`go]DDHGH@?IYRJOROTYW[a`ZNX`b`bfhd]``d_`]kkjahfeghhikilnoppruwxyyxxyzxz{«©»ÀÆÈÎÎÎÏÍÆº³Ž³±Žž¿ÈÊÊÌÒÉŸ¯±¯­¬¬««¬±©¬^KKLFKMGILNQNKELitty{zXOSRJMPLT\UNVst^^c``fajgkfhfeggfgikopommntvwyzxwwwyzz~š§ºŸÃÆÌÎÑÎÎÎÌÍÌËÉÎÌÌÌÊÍÐÐÆº®±²³µ²³ŽŽ¶ª­ iNJLLIKJKPIHNDDZ YMHKOQJEHFE>RumWe^_[ciidkdc`aehkkhdhlmppptuvxxwwvw|{y|§©·ŒÄÈÍÏÐÐÎÐÓÓÑÑÑÎÍÍÎÎÌËÐÎ»±ºÀÃÆÃÄÆÄÄÀ¿»dLIKKHMOMKGNSIEQpsw
+TEFKLNNHULROIFLO_nwuc\ltdZ\__d_bZ]Z`kgaifmsttrrtqtuwwvuuyywzŠ©ŽžÃÊÏÎÎËÄ¹³°²ž³²¶¿ÊÑÒÐÐÍž²¿ÇÉÍÈÇÊÇÉÆÉÉYJLMJHJJGGHIJJDAQ^dkhfpvJU_ZQNQYNDT`dipkU]c_TRW`\VZ]Zg\nWW[bfdce_dgikmnpoquwwvutwwx|€©±¶ÅÌÐÎËÄµŠ¥²ÃÎÑÍÅÁ¯®ÁÊÌÎÎÊÊÈËÈÊÈSIKHHGIDDDFC>CD<6JXklnu{[io`WYVTWV_^bn{zwYSebSTVZYWRN\TjeVIIWiphlicadfgioprutttruvx{£
+§°ŽÃÍÏÌÎÉœ²®©š©©«¯ºÄÌËÈÄŸ­¯ÃËÉÈÌÈÉÈÍÌÌÈQIIFNX\ZVMOSMNSSQMLisppuleje\ms_YW\[agswjnkddXbf_dp{jdirneeb]asofbceegllnqqrsstvxy €«­ŸÈÌÌÌÏÍÊÈÄÄÉÄÆÈËËÌÊÇÂœ«¯ÃËÊÊÊÉËÉÍÉÈÃRIIISY[Z^WX\]`eenaS^`\ckk_`\RWYMUY__gegqfk_muc^Zmvrklqtmpz}ui_]bdecaaadgikkmpruutwyy
+
+¥Š£ŽÀÇÌÊÍÎÍÏÎÍÏÍÐÒÑÎÌËÈÀ·¥ªÁÉÊËÈÈÌÉËÅÄÃ\QSWZPHGJLJGLQPM^a^ace~niececYXW]e^[TRUVZSdtmab^_cmoaw}h_df^bca_^_cgijloruusuxw£©ŽÀËÏÎËÊÍÌÊÉÈÉËËÌËÇÂÂ¹¥ªÀÈÇÇÄÆËÊÍÊÉÅk_grtbZ^Z]XTTOLPIFCEHIfzkikjkjfhh^cdkllkhfdfikklvvxys~wmvsnssg]^`_^_`adeghjmorsorwu~~ «žÅËÍÌÊÈÅÄÅÇÈÈÈÊÈÀ·º°§ÁÊÇÇÊÆÇÇÍÇÀµZW^dZ^dbV\`dhddlo`cflekajhljcca]a`[`}~rbbfkttptxqsujl{o\bdb^`beefhilmnoptsrv|~ £®ŒÅÇÈÇÅÄÄÇÅÃÃÄÂ»³®¬€©ÂÌÉÅÌÅÉÃÊ®Zaa]VZZYVZ^][`jrggonkecfhfkkeda`a``d|whkh`cmhjjka]UR`]SY\aiikf`_^aeihjjloorrtuy{z|­¹ÃÅÇÆÄÄÅÇÇÃÀ¿»·±®­¢¿ÆÅÉÆÂÈÇÍ¢skVfe_[^]efca[Walljfd]bj`dmimia]]`a^_awtfnpjliuvtpiedUdmieikknhdeeceniijmopsutyxzv}y~ªŒŒŒŸœ»ºŒœŒ¹¶·µ±¯®·yºÈÊÎÍÊÈÅÉ rn^b^__]Xab_][]gliijkefohfggmj``be\__dx
+yosvrstzuo{sk^ep{qimohehdektrqnqrvxz{{||~{wt©©ªªªšššššŠ¥¥¢¥¯·»¹Ÿ¿¹»¡t\]`ga^`lZ^_afjlqinsqnsseljjaV]ei\da_prv}{xrnsxv
+jvmvedoxnspmphkjtvzwzwy{~¡ ¡¢¢¢¢¢¢£¡¡_`dg[[^bUWUW\ZX`\XWY^efRejuqd]VOR\[X`\dpvrsqlrzu~ylkgdfpoqnmvpuy
+¢££€š««ªš©°°±²³³²±¯«©Š¢¡¢¥gdbhjqlfdccfhfgjZYZ]_haXabml`VNJ]_cc_RTQXX\aiw|s²r]jolcevznnkpo£§ª¬«°¯²±®¯¯¬«­®«ª«¯«¬¬¬«ª«ª¯¬ª©§¥€Š¢¡­ž»¶²°©  ¢hkknlnkmcemnfcikhhfggsbd|stsg``f_U[fikxrxsjdl|~uªnqgiihz}pzo{x~~ €š¬¯±²¯²®°µµ°š¬§€¡¢££¥££££€£¡¡
+~zv
+®ª®®²µ±°Žprvsojmk`bfgdcinifirpsons|v{ct|}uif[[]xy}yvo~}xpeo__g]€ x_`~wx
+~yusnjhhda\Yn
+¡±¯­±³°®®ysotvukddcfeabaZZY\_juun|z~jz|qokfk`g_\\efUdlhe{jXjcKPS ¥§  w_d`iijjiijlfgeda^[ZZYXYWSQSNMLNd{¡¡~|y||wqlhhllkh_Y`bZhx{
+y||iqousowz rhf{€§©£©ŠŠ§§ªªš­£_@E=HHHHFFHJLLLLLKJIGEFFC=;:=;9;ITbjnsvw|
+z{{z
+}t~vpu{|zpvwx}xxy|mx
+tuveh~rm{ibokaw£}¢§¥¢£€¢  ~P583;<=<98:;:;;<<<<;765553110..+227;?CDACHIG|z}y|wlyx
+|rt~|q
+~l||kxtuzhhl{s}ªŠ §qr{x
+ }iK;;98997666534433311.-+++++,((++/+*-'(&$!""!z{x{yjiyzrxuwr}}zz}~~szqlp{c~u^¥ŠdB~t¥vl{
+|xqdG686753431/-,-++*)(')(((''%&()--0(')&%$###"%{taaifgsge^cb_gi}{da
+nkz
+k§GB}}kpšv
+|zxz}|
+yreF3642/-,,,*()('(&%$$!!##$$$##%)*,&&''&$#"!""
+tzpe[YY_gjVOKPUQWLS\|si
+|dpsrmIUnuzusk
+suihrgaphmur_F321+)''''&&'%&$%$$$%%$###"!''*(*''(&%#!"##"}}vsqlfba`^ZVXYUXa_Oegnjdf~hz}ou{syopqkpowq~rhclb`zsytnIb
+
+veO;42/*'&&&&&%#$##"!""$$$$$$$#')+)(((&$#"!!!!"xlcktma]_cjpssssxsogjrfaah][`~sqpppppooshtlnprnmugchlwnao[jcgjAXy|~sj\G5.,)(&%$#$$$%%$$$##########"'*,*))'&""!    !o[PTSKLUSUWXUSQQ`[YZb]OIWZL]T]W\[ZZZZ[[][`]bjjhhoacou{nYwy^Mvx{|xfYeyzvyx{ldTB4.,)('$###$$%%%$$$$$""""#$#"&)+)'&&$#""!!!!"gG55659=?=;;=@AB><==F^D>@KI>RDDHIIHHIJKLSMMiV\[`d`cZcopof`pfvk^ZtwzsfgnhfdfcaefhdZM?2.+((&%$##$$$$$$$###"""#$%$#&)*(&%%$$$##""""hE/269826312554214410:2988655377<<=>?@@AB>?CCFDKIHMGIMLMNSVW\]\YY\_XLIMGRMKLNUXZWPF<2,($%#$###"!########!!!"#$$%*--*''''%%#""!!!dD15635534554333034340120343244023345555686967<8;9=:<;;=9=9A==?==>@>75<;336;<>BDHD?:0*'$#$$$$#"!######## !"""#%&,.-*(())((&%$##"dC/26335233432343/..203/-10*10.0......---0,2-/3,1.0.32221300501131.2111,.03532557764-'$##$$$$$########## """"#&(-.-*)***++**('&&\D125333444433221/30./0,2*0/2,///00///..010/0/.///2.0/10/032030.1202.-0-2000/032./43-('#$$##""##""""#### "#"!#&*.//-,,,+,,,+*)((\A134313222211111100/////////00000//.---....----.0/0110000//0///.011//02.-,./1/--020+(&&$#"""!""!!"""""" "$$$%',/0/,+,-,,,,+*)))Y?32432422211100000/////........00///.....///...////////00//////111100010/..//.-,./-*%$$##""!!""  !!""""!#$$$'*.///,+,-,++++))))U?54334533212000...///////....//////////../////.///..../......//0////...00//...-.//,)&%$#"""!!!! !!"""#$$$%(,/.//,+,-,++****))UA732455432111//----....0////00/......//---./..-/////....----..//...----/00/.///10-+(&&%"""""!!!  !"#$$$$&*-.,--+++,,++**))))WA61234232320/..,,,,,,,,//////...../////,,--..-,,-.//.--.----..//010///0012101101.+('%%$####""!!   !#%#$#$'+,++,,+*+**))((''&&V>3/010/1101/..-+++++++,-.-.-.-......//.,,,-..-,,,.//-,,----...//0100/01/120010./,(&&%$###""""!!!  "$%"##%(++)+++***))))(''&&&Q:////--/....---++++++++,,-,-,-,,,-----.---./.-,+-//.-,,.////000/////////110020-,*(&&&$#""##"!     "#$"$$%(++)++++))))))((((''O9../.,-,,..----+,++++++*++,,,,,+++,,,..---...,++,-,,**)/.//0/000/./00/.0232342/*(&%%%#"!"""!      !"##"$%%(,,*,+++*)))((''('''N;0.--+.--,,,,,-,,++++++***++*****+,..-,.--..-+*(*,-)((*-//111/.//////./13334540)'$#$$"! !!!!  
+
+ !"###""$(*))*))))))))))((&&&&H:0-*)'****+++,,**********))))(()**,,-,,---..-+)&)-,)'')-./110/-////////12335641(&##$$"!!"!!! 
+
+ !!"##$#%),+**))))))))((((&&&&80-(&&&&''))))**((()))))'''''''''(*,.--,,,-..-+)%(++'$$&+,.///.-........11236850&%#"$$"!""!!!! 
+
+ !""#%$%),+)())))(())''&&''''(%'$"%%&%%%%&'((''''''''&&&&&'''%'+-/.-,---..-+*%(+)&#$&+,.//.-./.......0013673.&$""#$"!##"""!! 
+
+ "###$$&*,+)()))(((((''&&&'''#"$#"&&%$$$%&'((%%%%%%%%'&&%%%%%&')++++*---,,,,+(*+)&$%',-/00///000////0//03551,&$###$"!##""""" 
+
+ !"$$#&*.-,**()(''''&&&&&&&''!#"#'&%%%%&&''(%%%%%%%%&&%$$%%%)('&'()*.-,,+++,*+*(&%&(+-/00///00//////001353/*&$#"##! ""!!!!! 
+
+ !"$$"&+.-+++()''''&&&&&&&&''
+
+!#$&%%%%$%&&&&$$%%&&&&%$$#$$%%'&$$&)**+++*****++*('&'(+-/00////.-,---.001231,)%#""""     !  
+
+ !"""#&+--,++((''''&%&&&&&&&&
+
+#%%&%$%$##$$##"""#$%%%&%$#####%##%(+,+*****)))++*)('''+-/00///..-,----00022/+'%#"!!!
+!      
+
+!!!!%(,./.,*)(''''&%&&&&&&&&
+
+ #%$%$%%%%$$%%""##$$%%'&$#$%&&$'*,,++,*******+*)(&%%%%)+-...///---+,-,1011/,*&$"   !!!!  !  !!!!%(+-.,+*(((''&&&%%&&&&&&
+ !"$#%%%%$### !"##$$$(('&)+-/),021.+)**+++,,,+)&&%'%$(*-...-..,,,*+,+/./0-+)%#!  ! "!!!   !  !"""'),--,+*((('''&&&&&&&&&&
+
+!"#$!!""""""###$$$$$&)-/23333220/,,+,,--.-.-,)&%'(&%'*,./.../...,-.--,//,*)&$"   
+
+!"" !!  "##"(*---,++(('''&&&&&&&%%''
+
+  !""!#"$#$$$,,+**++,,-15764230-(()+,--.--...-*'&'('%()+..0//-,,,+,.,-,/.+)(&$"   
+!!! 
+  "$$#)*,,,,++))(''''&'&&&&&'(**++,,--,+-,-.,,,*(')+,,75344432/.+,-.//221332210/,++*)(*+,,--.0,+++*-.,-,.-(&&$#"!!!"! 
+    !
+ 
+!#%%**++**++++**))))(('''(((89::;;:;88888877530.01236543333232347899;;;;;;;::::87655432111110..,+./,.,-+'&%#$#"""""#!"#%&$!
+   "%&***+**++****))))'&&&&&&&;<=<<<=====<<:996421133323787777<==>>@ABBAA@@???BBBBA@??=>=<;:98531/-//+/,,*'&%"#$$$$%&())+01-(&    !"%&++***+++(())****'''&&&$$;;:999:::::;998720/0234579<<;<?BACEFFEDDDCBA@?>=BCCDDDCBCBBAA@??>=<85550.**(%#$! "$&'),/0/28;50.!!!!!"%',**+,,,+*****+,,***((&%%7766655645565543/../2467:<==;:;=?@ABB@?=>=<;::<<>?@ABBA@CCCBBBAAB?>>>>6+-**(#"" $%'+.278;<>==<3&"!%&&(--..-----..-,+*)()))*)(%%322110111110//--/--.0122343433346788998854445689;;;<<<<<>>@@BCDCDDEEB@:1-*(&! !
+"$'*059=@CEHFB@7'""&,,054443333222221100-.//0/.-3210/01200100/..//../0100..-..-,/////12200...02376656778788;<>??AAEEB?93.*'%
+ 
+"$'.8?DHILORNGB9*%#+39<@>>=>=<<;;;;==<;;89;<<;:9320////0--.//1011000112210--..-+/.-,-./0.-,+,,/.100//011001234557:>?;84/,)(% 
+
+ "&2?IOSRRTXTKE<.('/8=BEDCDCCCCDFFFEEEFFGHJKKJIH10/..-,,./////....../1000/...--,--++,--.))**+,,--------.-.,-,---/168531-(&&$! 
+!"&4DPVZZZY]ZQI>0+*/6;?BCDEDEGGFKJIIIIJKNPTUVVVW33321/.-000000////../000000/..--,*))+,,,()*+,,,,+,+,+,,,++*))))))*/2110-%$$$"! 
+$&*6GRX]_^]_[UMA0-,/47;?ABABCEFEGEDDDEGHLNRUXZ[\1100//...---....0/00/000//0/..-,,**((*(((()**,,,+*+*****(('&&&''((+.///,&$$$""$#)*-8ISW\\]\\ZSK>/++-/25999::;===<<;;<<<=DFHJKMOQ21100/00//......0/00/...0/////.-,+('''&&&&&')*,-++*))**+))('&''(+*,....+)&%$#%(),+-:IRW[XZZZVPI;.*()*+-//002222244443333=>?@???@2222111100//////000000/.....////.,)''&%$%%&')*,,**))))))))('('))++-.....,*(')+,./.-;LTW[YYZYVQG;)('(&$&)''((()))))***)))+--./1342222111100//////100000/.....////-+*(('&%$%&')*,-++++***)('(''''''(+.0100-,++-../1//<MVY\XXYXTOE9&%"#"!"$""#$$$$$##$$$#""#$%%%'),121211111100000000/////.../////.,+*)(''&%&'(*++,++**))))))((''('&)-1220///00//..1..<MVY[UUWUQLA7'"!!#"""""""##"" !"#"! !!"""#%(111111111100000000///..-..//////,+)(''''%&')*+++**))('('**)(((('(,03431///00/.-,0,-:KTWXUTVUQK@6%# !!!! ! ! ! ! !   !! ""000011111111111110/...-,--------.,)'%&&&%%'()***++++**)))(((''''(,046632....////1,.<KTWWXWXWRLA6#!
+
+         
+
+
+
+
+
+
+
+
+
+
+
+ !! 000011111111111100...--,--------.,)'%%&'%&'()*****+++**)((('''''*,/35543110000//0+0=KTWWXWWVRMA5! 
+
+
+
+
+  
+
+
+
+
+
+
+
+
+
+
+!! 0000////////////00////....------.-*'&&%&%&'()*++)))*))(())(((('')+03443243200.-,+(/=JSWUVTSSQL@4!!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0000////////////00/////...------.-+(&&%&$%'()*++))***)((((((('''(+/35532321/.,+*)%/>IRWVVSRRQL@3!!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+$$$$$#! #"$%',-/.,1/./*0)'$#$&'&'())'&%$''''&&'')''('+-.0357664555544445530/,+*)))''&&'''&$##"""!!!!!"""""$$%&&&'''&&%%%%%$#"!!"###$$#!!""$$&),/0-1/.0+0)'$$%&(&'())(&&$'''''&''&%')),./1346543345343434310-,++)))(''&'&&%#"#"""!!!!!"""""$$%&%&)((('&&&%%$""!""##$$$$##%$&%%')/2/3//1,.'%$#$%'&'(**)'&%&&&&&%&&&%&')+.0123332235343434300.,+,+)))('&%%%%$#"####!!!!""""!"#$$$%%*+*))(('('%"!  ###$%%##&&)%%'(+002//1,+'%$#$%&%')**)(%%&&&&&&%&)'%&'+./1222221011222221.-+++**)))((&%&&%$""###$ !!!""##!"#$$$$%,,**)))(('$! #"!"#$#!$$&%$&%',-/--.+*+)&&%%%$()**)(%%&&&&&&%%)&&')-0-12221100../110..,+*+*******)(((($$"!""##  !"##$"#$$$$$$))))**))%$!
+ !"#"!""#"!"!$$%'%&)+--,,+*-+'&%%$$()**)(%%&&&&&&%&&%(*-01.22222000-./010.++*+*********)(()$#"!!""" !""####$%$$$$(((())(($# 
+ !""###"""#"!""$&$%'()-.-,+/+'$%$$#'()))(&&&&%%&&%&&%(*+/1023222111//0110.,+++****)*)))(''($$"!"""#  !""####$%%$$''''(((($#!  !! "#"  !#"!! !#!#$%%+.,+*0,(%%$$$%'(())''&&%%&&%%'&')(*/133322211/.//0/-++++**))(***))((&%$$""#$$   !!!"#$$$%%$$''&&''''#"!  !""!"##"!"$!"""""""#&#!+.,/-*'$%%&&'''(*)'&%&&&&&%%'"+'.3C2432233320/../.-++++***)(+***)(('&'&%%$%%""""""""%$$%$$%$%%%%&&&&"""!!!""""""""""$##"""!!!!!').0..*'#%&'(%&'(*)'%&&&&&'%%'+(*'9oC443343330/.-/.-,++*++*))++**))(()'('''''###$$$##%$%&$%%%%%%%&&&&"!!!!!""#"!"##"!!!!!#$$#$
+%("&110,'##%'('()))(%#&&&&%%&&*$.)0195445543230/.----,++***++*..-+*+**)(&&%'''%%%$$$##&%&'&&&$&&&&&&&&!!!"""##" !!##"!$$#""!    -3% ),2/)$$$%%)**))'%$%&&&%%&%(#,+21535554333410.---,+,++++***.--,+*)*)(''&&'&%&&%%$$$&%''&%&$&&&&&&&&""""""""!!  "###"#$##""#"%-/'#(2.*%%$$$'(((('(''''&(('(/+..1.605432124411/.--,*-,,+++**++*+**)())(('(()((''&&&&&%&'%%%#&&&&&&%%$$$##"!!   ""##
+ "#$%(*'%#"" #+-+'&&&%%''&&&''(''&&((((%-&+%7_;3110003310.--,+*--,,,,++++++,+++,**)))))*)((''&''&&'$$%#&&&&&&%%&&%%#"!!    !""""#$#"""#" ""#"&)'%%&''('&%%&'&&&&''&'()+*-,22/30/.-..000.,+,,,+-------,,,,,,,,-,,+**)****)(('''(&'&$$%#''''&&&&&&&%##""    !""!""!  
+$!#$ "'')'$$&'()%$%%'((&&&&&'(*+-))*/+)3/.-,,--//-,+,,,,----....,,,,,,,,,,+****,*++**)(((&&'$$%$''''&&&&'&'%$##"     !"!!!!"""!&#$!())%$##%&''*)&&'('%'%%%(()*.0/1.101.......-.-+,--,,,...../0*++,,---.-,+****+++**++*)''&$$&$&&&'''''((('&%##    !!%$$$&'&%#!"$%)'$*(&%&'&&/,&"$%%#&&''()*+-//1-/-/100/...--,,,+,+++,,-.002,,--..0010/.-,++********+*)'$%&%&&&&''''('((''%%!!!!  #""#%'&%%%$&&')$(&$$%%%$)'%'()'&"#%%'*+,-013/0./000//.---,,,++++++,,.001..//12110//-,,+++*++,+++-*)(%%&&''''((''((''((((!!!!    !#$$$$&''$$*))'%&('&% "((*&&(%$%(*+./21412010//.//-.-,++,****,,-.0//0/1233340/.--,++*+,,,,,+.+*(&')'''''(((((('''(((!!!   
+
+!!""#$%% !%'%%('*(%&'&$$&'$(%(&)5+&(+))-01/22302211100//-,++++***+.010/0/1123455100/....+++++++,/--+))+*'''(((()''''((((!!    
+
+""##"#$&%!#$$'&%)%##$#"#**&*$'&,7/**+))-00.31423332210./0..-,,++,/242/../012345621/0////,+++****-,,-**+*(((()))*((((''''           !"#)#(%#(#'+'&''&''"%!("&%)-,++**,//0/42545443200/01220/.--/2431/..//13467720////..++++**)),*+,))*)****++**((('((('     !   !"""!/*&)")+)()+($%%'"("'%+$,.,+-././/42434554422212211//.-./011001//23567731//0/.-+++***)*-+++))+**+++,,++))(())((    
+ !  !%!1-(+$())'&'-/.(,%& (')%(*+,..-//0112224433554433322111//0233441114555731/00/./+++++****))*****,,++,,,,))((((((    !"  !  
+%$ &"%#$&&(-.,,/+*"'$'(*,++,*)/./011001012356755566666544444333345545630//0///,,,+**)((()**++,--+++,,+))('''''    #! "!"!
+%"$#"%%$$%()+00/3734,/+,*,-,**)),--/000///00122444567788865444324455545620//0///--,*)(''&'()*+,,,,,++*++((''('''    ! !#!!! %&$"#$# #$#$'(*)254613.,,..,+++,*+--.///.../..//44577889531132305544445531//0/./-,+*)(''(())*+,,+++++*++)'''('''
+   !
+%% 
+!$!%!"##$ """!!$%%,/0322/,/00-*)+-,,,,.../-,,,,-./--.///0010//12205443456532000...,,**))((++++,,,-,,++++++((((('''
+
+  !!#"#$!!!"%""%$%&$$$$$%%%')+0252/./.,))*,.-,,-./.-,,++,,-000//0000/../00/222346754200/.--,,***))),,+++++,+,++++++))))((''
+
+    !!&"!!!"# ##!!$" %!!!"##"#$$&+-./,+,,+**+,--,,-...--,,,,++/....---.--....///01254331///-,-,,,+**))++****,,,,,++++*))))((&&
+
+    !!
+"!
+&,"!!"%$ &!!!!""#"'()**))(*))++,**-.----,,+++++,,-//......,,----..,./0022120//---,+++***)),,+++,--++++++*))*))(&&'
+
+!!!!##! !!  !
+ %$!!"!#""# "!&&)(*+(('(()))++*-0/,-.+*,0+*1.)....----,,)-,/-.0-28053322.--.-+**))(((())*-.-,+,,,++)('*))'&&$%
+
+
+  !!!!!"%!!"! !"$$##"!"!'')()+)&)(''**++-+/2.)+.0-.,+.,)------,,,+),-.-,232RG55630.---+*)**))***(((),,*'++++*)(')('&&%$$
+
+   !!  
+#$! " !!!$#####"" !(((()+*()'%&)*+*,.11-,--/+/-)*.5,,,+++++)()*-//-072QE6832/.,-,+***+++***.,))*,,+,,,+*(((('&%$"!!
+ !!!!  !#$""
+!!!#%"%%%%#%"$&&%'()+))('(*++*)-10-..*,)-,'(0:+++***++*),*/.10033:24200/----+*++,,-,-,:1*)+-+,,,,*)((('%%%"!   !"""!  !
+
+ !"$!"#"!"#$$%&"'"&#%#&%%*(**+,,,,,*',31,*+.))('*+,***)))))++-(+*..3,2112,0/..-..-,*,-..0/0=1()-,)(++*)))((&$%#"!  !##"  !
+!$#""! !"$#$%")!&$(#%'%*'(),,,,*+*',10-,*+(+*(*(&**)**))(+,,))*,,1.1/3//.//.///..,--.////3.-/-('***)((''&#$#"!  !!!!  
+  !##!"" !#")%$'%.#&&)#&)'+''))***)*++-,+--*((-,)**+*****(()()((*.,*+/.-0/2.00000..././//..-,/21+(*-*('&&%###""! !         
+
+
+   "#!"#!!""(" #"- "&(!%((,&)***++*+0**-*'*.-(**)*()*++*)())*+'**0+(*,,./0-10000/..././///...00-,..*)('&$#!!!!! !  
+
+ 
+ 
+$"##!!# $$"$"$!!%!&%!:C#++*+,++-)-680-.,,)),**+)*+*+*(*)),'*+,&0++,,----0.--..-,./.-//./10-**+,+(('%$#""!    
+
+""
+
+
+
+ !!""!!!"#$$!$!#!" %#!#)-&-***,,-/.*061)),---,%&33++))(()(''0,(..4---..---------,,+.--/.,-3--**#$&('&%##"!  !  
+
+    
+ 
+
+ !
+! "  # #$$!# #!"
+'$"% #,,*()*+,./,./,++)&+&.&2GK-+****)()-)-),A20000/.-,*++++++*+--,-+)*$)(*%*'(%%$$##"!  !!
+
+       !
+! 
+# #!#$%"$ "!"##!#&),&+**)))+,//-)),,(*/()*'0**(*())''*/(034N:00110.,,+++*****-.-,,*()#+,)&*($$%$$#"!!   
+  !% $
+ 
+%"#$"$$%!#!#!"##%'$'-&+,-,+++-/+)*+)(,BL'2!,#'))+))+*,++1+,,.,../0/.+*++,+++)')*(''&%&*&,'-#'%$###$###"
+!   
+ !
+$
+ %"
+ "!!"$!# "!" &()'%*-)+---...*,+*,-++-4*'1)*+,)-*(,+0+*,)-..2-----,*)()***+)%(('%&&%'('%(&&%%####$$$$!
+
+
+!   "&
+#  $ "#!   !#!# " "%&"%--+*+,,-./.-(/-(+/-*%%$#(!')(%*''*(,-/$())/,---,-+))')*(()(%(('%'%$%&)#'
+)!"$$$$$$$$!
+
+
+
+
+5:
+$
+ ""!!#$$!#!$!"!# &('#','.,,,.0.++,)&))(++('.$%&''%,)+.'+*,./(,,,..-,,*))+-*'&())(*'&%#!"&#"* %'$#$#$### 
+
+
+
+   
+!
+
+#"
+!" ##!"" 
+ ",#)*'+#(&%(..)2(*%%#%
+,#'$($,'$,),*(,,%*'-*1..-,+****($#%"!
+!
+"
+##!%!
+#&
+
+
+
+
+
+
+
+
+    
+%3!0! 
+$"
+-'1.  $%###"63+3*(%/(37979))'(+'*$61/-"-(&'.$!'!*-3424939(11.-,+))+*+!-2/2+,0,-,+"
+""&!
+13)*++-))+,*0&*3$  
+
+~æçík
+   Wàêæ#$#!!!Üäí¿*)6%îæßìž!)*&0"@åêê
+",F1#"ažÚÝéàåÞêê×8%++*(()(*+&
+éåäãèàåêãáåÒ±Y 
+'ÊææèäáæçæææÛâäîåP   ðÝî`
+
+$
+Ièâë"##"!!"èâìÉ$(0/
+èåæêíe#)4,
+Gãèä}#%2&!(°äåìáéåîçåèé,$+()((''))&èæêëèêééìâìæçé
+$
+ÛëèêëîêìèéîëìéãìH
+
+
+  !!%|ëÙì\
+&!JéÛé"&&&'%$(×äè¹.+."êÞßÝâÎ))*.;ìãëv
+.%('žëÞêàÏœŸ¶œ¹¶¯*',''''((('$
+{Á±¯·±°±²ŽÅãâ×åè@!#°¶º¯®µŽ±±¯€ŒáßèæF
+
+  !!#{êÜéY""
+IêÝæ
+ ('&((&(Ýßç»++,¡åÞÚÙÝç )+%=éÝç{!.$
+çØã¿R 
+
+
+
+
+#!*%''((('&%&!
+
+"
+SæÛÜêr'!
+áßæ#
+ !!!"
+èØãW
+ 
+
+Kâ×ã&'%()%'ÖÛßŽ#+)-
+ëØÓÅÚÚÒ9$'8çÔån!#,"7ÕÙâÐ8"#4#/$$,#*&+''''&&%$%!
+"
+
+&! $ §è×ç*
+  (* hæØá®% 
+ !!!"{âÕäX!
+KßÕâ')&)+''ÑÖÛ² ,-* áÕ¹WÓÜå
+( @ÞÓèp
+)( fãÖÑ
+&-(($'#$&*'''&&&%%%%!%### 
+
+§ÙÕå# !
+', 
+G×ÜÝÄ8
+%" 
+# !
+
+yÜÎÛW
+
+
+HßÐß&'0"0H+ÊÔÑ¯#+*,#ÞØÂÜÊáL!<ØÕÝs$,!ÚËá ++$,%(%+-&$)%&%%%%&&!
+&
+
+ #"$$-oÕÔÏãV "
+#%0ÌÒÕÌN!"#
+
+
+
+"&uÛÊÖV!#KÝÈ×
+'&-,&($ÃÎÐª!+'.
+ÜÁÃ'*ÄÔØš$3ÔÊÖm
+'%
+ŠÒÊÄÒÀÃÁÉÂÈÃÄÏ»6&!%&%$$$$$&#!e±ÃÆÉÊÍËÌÖÈÅÖŽ$#&
+"#¬ÕÍÏe
+
++%
+
+  %"!
+!!oÕÇÍW
+
+'%CÙ¿Ôx
+'#"+)$1ÃÇÍª!,),!ÐÏ»+kÑÂÔb$:ÔÃÒm&&¬ÐÃÄÇÒÉÕÐÏÔÎÑÔÇ&'%%%$$$##$"âÐÈÌÌËËÌËÒÍÕŸJ
+
+"!#
+ ÕÁÌ*"  
+
+"
+"
+##$zÍÀÇX!&"FÕ»Ìx
+%%%&+%+ÁÄÆŠ"-&, 
+ÉÉµ- "¢ËÉ³
+6ËŸÊk&)ËŒÅ¶€±ªª«¯š­­¡/$$$$$$#$$"*IÒœ¿¿ºšš¥ªše'.
+
+ 
+
+#
+
+wÓŒÑ¡ $##)
+
+
+
+
+
+mÇ¹ÇS
+$
+EÅŸÂv
+(%' +'*ž¿œ&)&.
+Å»µ*BÈ»Æ{'ÄŸÂd
+)"Â¶Á %-%!"%' # %$$$$$###$Ð¹Âz
+ 
+#
+#
+ #
+
+'
+SÍ»Ÿ®($&"!"(" "#
+$
+
+" xÁ±œ=
+
+9À¹Œ" "",#-žŽŸ#&/+ œŸ²+%%${žŒ¬Jº²¿b'&
+]Çž¹§)-!)*$ &"&#%##$$##$$$¡Â³³'
+ !'&$
+!! 
+"
+ !AÁœ¯žD "!'"'%&
+"
+! $/³®®2 *
+
+.»°²š7 
+$($#IŒ¬Œo (2(
+}·³š2$)(¯³ž²ŽŒe"-
+4ª±«·l((#&"!#$##$$%%$$##¹¹€!
+
+(#   
+! "#µ²°ž[
+
+$&('%)%
+!
+
+ $,v±­«!%1Žš®8 C¢¶ª¯D$,&+#|°±%&&%
+Y·«¬¥š±d ")$r·¥ª¶wI/'(+%($
+#$$%%%$##¡­®£ 
+
+"
+
+
+!
+$
+Ž§·q
+'$&$(''&C­ªŠ š§­­Š¥ªG
+#I«£§š¥«ªš©y%'-2&
+w¯££(!$
+)"®£¡¢³Y
+&&*'#³Š¡¯ª¬©Š€š€4 "#&'&%###%ª£š¢€¥¥£¢¥¥€€Š8"
+
+
+®©©
+
+
+%+'$%%&%$=Ž¡€š¡€¥£ª¡T $
+J¡¢ €š§©€£¢j/
+,+%& v©-%),%C ¥§©Z &$&#$0w¡¡€§£¢££€&#%$&('%$$$"
+Š¢¢¥££££¢£¥£Š$% "d¶Š)(*$&('%%&'@
+}y[%
+$ )
+#&Vpwb8#$2('*&
+f}1$(!(# b
+N
+ !%$&'*Dbuz}
+~-+
+%(*(%$%&
+$~
+
+/$%
+A
+:$*""%((%%&( 
+ 
+$" #
+'&"
+
+!$;1%
+)--(,'(*#-$
+*!%'*!
+"
+
+$)
+
+'&$"&/*/%
+""
+
+# &$'*+*%#%'.
+"
+
+ 
+
+
+
+
+"&#!&'1!
+"()%$&&&'''&%
+
+
+
+
+"
+
+! 
+ !
+!
+#")$(*('%&$,'()(($"('%&&&'#%!#"$''##$)+./+#!$ #
+$# &!%)++)%"$&$%&#!
+
+
+
+
+
+
+
+ 
+#,*++"#$'%--*))&$$&'&$
+
+
+
+ 
+ 
+
+
+!#
+#
+% $'&$&%()'*&#)%'$%'%$%%'&'%!%"&""%%"!&*'#)1/)%%& " %$#""$)+*(%"$%'""!%" 
+ !!(%'+.'%$#'0),.)''&%$%&' 
+
+ 
+
+
+
+
+
+ ""#!!
+#
+!&!"'()'%"/%&&.#+'$''%%'&$#''
+% "####$$%'-0-("
+"!!#"""$'")**(%#$%$"(##$%" !##  "! ('0'$().(..*0)&''%$$')
+
+ 
+
+
+!
+"#!%! !$ &(%+(+*''(&UU"&%+(%#'$"$!#%! !%!"$%"$)..0+"!##$%"' $ %())'%$$$&%$$%"$# ""! "" "$*'**(),-20/*),)'%%%%&&"
+
+
+
+
+
+
+   ##"! ! #"$%(+++&$&-
+BE$$$)*%$''###$##""""%*'&,/1-'#"#!########('((%$%"########""##"!"""'*,,*)*.02/,*))((&%&'''
+'
+
+
+
+
+ !"""! !!%$%&)*)(''
+((+"*$$&'%&&%"#####"" %" &)((10+($!!#########(&''###!!!""""##!""##!##$(,,.--0000/,*))'('%&&''+
+!!!
+
+ 
+!      "###%&)*)*"+'$"$ %#%%&('$##""""""#!"#%$ '72/,'$  "%$$#""!!(&&&"##"!!""""""!""###""%)+./01321/-++)''(&%&&''!)
+!
+#
+
+
+
+
+   
+
+ ! "!"$')++,%%+) "(&#%$$('##""!"""##& &$ 5U1/,'$"!"$$$##"""&$$&##$#""$$$##"########'+..232232/-++)'(''&&&'(  " 
+# 
+ 
+
+
+   "$&'))*)(%%&% "'$&$$'&#$$$"!""##!!"%$"&04-+**$#%###$%&&''%$&$#%$"#$$%%%$%%%%%&$%+/246643430-++*)()('&&'(
+!
+
+
+  
+
+ 
+
+
+
+#%%())*(&'%!##""$%%$%$$%$$#!"####" !#(*+7,)./'$*###$&'()'$&&&#$$""#$%&&''&&(('('-468::55430.++*)**('&&'(
+
+
+
+
+
+
+
+
+
+
+
+
+
+!"$%())))'$"%#$$#%$$##$%$##""""##"!!$#"%'7-'*.*')$$%&&''')&')&#$###"#$&''''()()))07<;:85542/-+,+)**)'&&'(
+
+!
+!
+
+!# 
+
+
+
+
+ #$%&))))(#'##!$""%"#$#$&#""""""##$#!!!$+.3-'$(,*$$%&''(((*&&)'#$$$$$$%%&'''(()*+*3<A?;75631.,+,+)**)'&&'(!  
+$
+!
+
+ " 
+
+ 
+
+ ###%)()*&&%$#"!""#"""####!!"####$,'$" "',7,$%(&&(''''''''(%(--,-+((''&'''()*(''+.6>@><:5342/-+,+*+++)'''( g/
+
+
+
+
+
+
+ ! 
+
+ $#$%'$%))$%$#!""#""""####"!#$$###(%$#"$)-7-&%''')''(((((((%(-,**+,*)'&&''(*+('(.4JE>6796530/-+,,*+,+*(''(
+
+!
+! '"
+ 
+ 
+ "!
+
+ $##%'%%'%$%$#""##$$##$$$$""$$$#"!#!"#"$'*3-'%''('**))((''('(-+**),)(%$%&')*+''+4;KE;47:6320.-+,,+,,+)'&'(  
+! 
+
+
+ 
+
+ ! 
+ #$""&&(&#%&%$""##$$##$$$$""$$$#""! "#"#&)-+'&&&&$)))(((''(&)+,,+)''%$$%'(++)&(/9???<7884220/.--,+,,*)'&'(  
+!
+
+
+
+
+ "$""%$'''''&%#"####""""""!"######!!#$#%(,((&%%&%#&&&&&'''(%'*-.-)%&%%&')*.+().4=A<>;86523310/.-,+++)(&%'( "!
+
+
+
+
+
+
+
+
+
+!!
+"'+&%&'(('&$#####""""""!"""###$!"#$#&*0'&%##%'&()('&&&'&#&*./-*&&&'())*/,+-39>A==:675223200.-,+)*(&%%&'
+#:$
+
+ 
+
+
+ 
+
+
+!"!)-(&%%'('&$#####""""""!"""###$!""#"$*/'&#"#%&'-+*('&&&%#$),/.)&&&&'()*,++/4;=>9:867620321//-,*()'&%$%%
+!)&
+#
+
+
+
+
+
+
+
+ #""$'%''&'('&$#$###""""""!"#####$"##$#$(.&$"#%%&&+*)'&&''%$$'*-,('&%&()++(*+058;;896342/0221/.-,*'(&%$$%%
+
+
+
+
+
+"
+
+!
+
+
+   !$"!"$'&'))('%$$$##""""##!""##$##"!$"$!(.'$"##$$$%&)))(&$&&&'()*'&%'$'&**,)),279::7411111210.-++*((&$#"""
+ 
+
+
+
+
+!" 
+!  
+ 
+ !"" !!%&&%()('&$#$##""""##!"###$##"#####'.&%#""#%$%$'(('&$('&''((&$%$&&(*+**,026:>;9421245100--*+))'&$#"""
+ 
+
+
+ !
+
+  
+    !" "#'''%()('&$#$##""####!##"#$##"#!# #%-%%#"#%%&$%%&&&%%&#$'&&'&##"'$''*)+/047<>;95234580/.,,**('%$$#"""
+
+
+
+
+" "" 
+
+
+ 
+$#
+
+""#%'(&&))('&&$$##""####"##"#$##"#!"!"%+%$!!#%&%&&%&&&&&&"$''&''%#"'%%%(++,04;<<664454550/.-+))(%$$###""
+
+
+
+
+  &&"
+!
+
+
+ !"
+
+ !"#$%&&())'&&$$$$""##""###"##""$#$"$"'+$"  #%%%&&%%'''&)'(*('''($%&(%()+,,06;>=454453210/-,**)(%%$%%%%$
+
+
+
+ 
+ '#!$"
+"  ""$&'())'&'%#$$""##""""""###"$!$!%!'*%#!!$&&&%%%%&''()'(('()(($'%)&**(.136;=?654442110/,,**((%%%%&&%%
+
+
+
+
+
+
+!
+ %
+
+
+!
+ 
+! !#"$&(())'''%"$$#"#""""""!!""!!!""$"%)'%""%''&$%%%&&''%%$##',*&%'&&&**(/47:==>87554211/--,**''%%%%&&%$
+
+
+
+ 
+
+!
+"#!%
+ 
+ !##$&''))'''%"$$$""""""""!!"""!"!%#$&)&%""$&&&%&&&&&&&%&%! '+*&*()%))*)/5:?@>:78654201/.,+**'''&%&'&%$
+
+
+
+
+
+"
+
+!'# 
+
+
+! 
+ !###%&%*)(&($#$$#""#""""""""""$%!#
+!&.'"#"#$#'##$$$%&&-'')()-1*.(7'-%+,07;??<9887632000-++**(&('&&%%$#
+
+
+
+ 
+
+
+
+
+!"'   
+!#"#%&(''&('$#$###"!"!""""""""()&!K0")#! !$$$$####$%'+'&((*.1+*;M+./(,17:<=<97765420/..,+))(&(('&%%$#
+
+
+
+
+ 
+
+/
+
+$ !&b0
+
+"!#$&'&'*')&'$%$##""""!!!!!!!!.*#"A+ ($$!!$%!%$" "#%')&''(+124//3"&,.1598:::856543200--,+))'%))('&%$#
+
+
+
+
+ "
+ M
+ !
+
+#
+
+C(! "!#%&'&''$%((#%$##"!""!!!!!!!!%$"&!! $%%!!#$&#%$! !#%&%%(')-2115.,3/(-15767897654321/0--,+))'&((''&%$#
+ 
+$
+"# !
+#
+!"!#%''(% ($*%"$#"#! !!"""""""""$!! #%$" "##%&$#""!"$$$%((),/-/-.*+)-.,02469:955431/..,-,,*)(''''&&&%%
+
+
+
+
+
+
+
+
+
+" &!!
+ !"!#$'&$#'9-*!%%##$"!!"""""""""$#!!#!#(&"#"##!&###""""##$'('*+''%,,''.*+/23699944321/..--,+*))('&%&&&&&
+
+
+
+ #0>
+"!
+
+
+"!" "$&%!#+;-'"&&$#$#!!"""""""""" !(!!!$)"&!"& $###""##""#%&&''%#"$"$%(&,/135774222220./,,++)())'&&''&&&
+
+
+
+
+
+
+ 
+,F
+!
+"
+
+" ! !$%%(#"'"'&!%""#"  !""""""""#"" #!$&%&
+ )!%$##""##$#"$&$%&%##$##%)&(,.0464001222100*++*(())''&&&'''
+!
+
+
+
+ 
+
+   
+  $%##! "#" %""$! !"""""""""#!"##"#'$(!) "%!$$##"##$##%%%$$#%$%%#$''(-01/010.12320//*+))))**'((')(&'
+
+!!
+
+
+
+
+
+
+
+
+
+
+
+
+   "$##"!"##""'$$&#!##""""""""#!"##"#&-i<"'%
+$##"""#$$%&%%%%$$$&&$$''*././011..1231//,,*))*+,'))(*(')
+
+#$
+
+
+
+
+
+ 
+
+
+ 
+  !##"###""#$'$$&#!#"!!"""""""!"##"$')J+%!
++#$#"""###%%%&&&%%#$&'%%'',..,,.0//02321---+*)*+,-')((**)+
+
+""
+
+
+"
+
+
+
+
+
+
+
+
+
+ 
+ #"$""##"!##&$$%"!""!!"""""""""###$&
+$$#!%'$$"""#$#$#%%%%%%%$%'&(++./-,,.///13410.+,+*)*+-.**))--,,  
+!%) 
+
+
+
+
+
+
+
+
+
+
+ 
+
+%"%""""""""'%%&#""!  !!!!!!"""###$&!%"
+!& "$#! !!""####%%%%&%&&%'-.-,,**,,,-/432/./+*))*+-.)('(,,*)
+
+
+"& 
+
+!
+
+
+
+
+
+
+
+#!###"""##"&$%%""#!  !!!!!!""""##$%%$
+#"$#!  !!!!##$$$&&&&''%(-.+****+++,0431--/**))*+-.//-.220/
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+$!
+!
+"$####$##$#$$!!" !!!!""""""""#$$$% !$!#&$" !!!!##"#%%%%%'*+(*++**))))*,.2420,+-**))*,-.++))+,*+
+
+
+
+
+
+ !
+
+
+
+
+ 
+
+
+
+*(#!
+$$######$$###"!" !!!!""""""""#$$$$!! !#%#'%#!!"""####$%&&%'-/,++)++*)))+--012/,+,+***,-/0-.,)+++-
+
+
+
+
+
+
+
+!
+
+
+"(A! ! !!"#""""""###"!!""""""!!""!""#$$##!!!!"###&%$####""!!$$&&&(')*'*..**(()*+,,/20/.--+*)))+,-10++00,-
+
+
+
+
+
+
+
+
+
+
+!
+
+
+ 
+
+$ 
+ !""#""!"""""""!""!""""!!""""""#$$$""""""#$$#"!"""""####$$$'&()')-.(''&'()*,-/0.-,*+*)(()++01--0/+,
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+"""!""""""###""#####""##""""##%&"""""#%&! !!""#! "##$$$$'&((&'++'&&'''()-./00.+*+*)'''((020/0/--
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+ !!!""###""##"""$$####""######"#$$###""#$%"!""#### !$#%$&%(&))&'*)&&&&')))-//..-,(,,*)('''/2332/-,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+  !#$$$$###"!!!!!####""###$$$###"%$#"""#"$###$$##"#&#%"%$%%()'),+%%%%&&'(*+,-++*)-+*('&&'+.35320-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+!
+
+
+
+
+
+
+
+!$%$#"#""!!!!!####""##$$%%$###%#!""##"$$#######"&!%!%$%$()))+)%&%&%&&&'*))*+--+*)'&%%%$)06552,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+ !
+
+
+
+
+
+
+
+ !#$"!##"!!!!!"!""""""#$$%%%%%%#!!!#$%""""""""#"&!&"'&%$')()(&'&'&''&%))))),--*)(''&&%$&-3465-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!
+ 
+
+
+
+
+
+ !!! "!!!  !!""""""##$%%&'(*'#! #$ !!!!"""&$(!&!'&#"&(()(''&%%%%%%-+)'),-,*)(''''')',.0570
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   
+     !! !!"!!"""!!$%#%('**&!
+ "! !  ##!""%!(" >8##%&''''&&%%%$$$%$(%(&)K++)())((***-/674
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     
+
+
+!!!"!!""""""#"#$$$'')*'"
+  ""!"#""$$ $#%@=#$$&''('&&%%$$##$$(&(')?+,*))((())))+2::
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  !
+! !""  "#  "#"#&&)(%  ""
+!! "#"#'('((!'!#$$%'(((&&%%$####%%&((*0++)()(((((*'&.6:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+!
+
+ !! 
+
+
+!   !!   #""'"&(%#""" !  """$$#%$)''%#$$%''''&%%%$$$##$#&'&*'*)()'''''(*)%)15
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+
+
+
+!!    !! 
+
+
+!
+ """& $'&$"! '$!#$! %(%&!''%(#$%&&&'&%%%%%%%%$# %&$*&**)('''&'(*)%&+-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!!!!!!"#
+
+ !!" 
+
+! #"%%&$#!$"!"#!"&  %"(($&$%%&&&&&%%%%%%%%$# $%#)()))(('''(()(%&*+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!
+
+
+
+""!    
+ !!#%$"
+# 
+!#!  "#&&$!
+"#""!"%%#&"%%$%$$%&&&%%&&&&%%%%##!#$$'())))))''('('$%)*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!
+
+
+
+
+!!    
+"$#%(&#!(% &)$    #$"'*$!#"!"#"$#$#$$%&&&&%&&&&%$$$!##"$&%'***))(''('('$$'(
Index: /branches/fault_tolerance/softs/soft_transpose_giet/ldscript
===================================================================
--- /branches/fault_tolerance/softs/soft_transpose_giet/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/soft_transpose_giet/ldscript	(revision 724)
@@ -0,0 +1,82 @@
+/**********************************************************
+	File : ldscript 
+	Author : Alain Greiner
+	Date : January 2014
+**********************************************************/
+
+/* definition of the base address for all segments 
+The peripherals base addresses are referenced by the
+software drivers and must be defined, even if the 
+peripherals are not present in the architecture */
+
+seg_reset_base   = 0x00000000;       /* boot code                   */
+
+seg_kcode_base   = 0x00010000;       /* kernel code                 */
+seg_kdata_base   = 0x00020000;       /* kernel cacheable data       */
+seg_kunc_base    = 0x00030000;       /* kernel uncacheable data     */
+
+seg_code_base    = 0x00040000;       /* application code            */ 
+seg_data_base    = 0x00050000;       /* application data            */
+
+seg_heap_base    = 0x00100000;       /* heaps for applications      */
+seg_stack_base   = 0x00300000;       /* stacks ifor applications    */
+
+seg_ramdisk_base = 0x00800000;       /* virtual disk                */
+
+seg_xcu_base     = 0xF0000000;       /* controler XCU               */
+seg_tty_base     = 0xF4000000;       /* controler TTY               */
+seg_fbf_base     = 0xF3000000;       /* controler FBF               */
+seg_ioc_base     = 0xF2000000;       /* controler IOC               */
+seg_nic_base     = 0xF7000000;       /* controler NIC               */
+seg_cma_base     = 0xF8000000;       /* controler CMA               */
+seg_pic_base     = 0xF9000000;       /* controler PIC               */
+seg_mmc_base     = 0xE0000000;       /* config    MMC               */
+
+
+/* Grouping sections into segments */
+
+SECTIONS
+{
+   . = seg_kcode_base;
+   seg_kcode : {
+      *(.giet)
+      *(.switch)
+      *(.drivers)
+      *(.isr)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.kdata)
+   } 
+   . = seg_kunc_base;
+   seg_kunc : {
+      *(.unckdata)
+   } 
+   . = seg_kdata_base;
+   seg_kdata : {
+      *(.ksave)
+   } 
+   . = seg_code_base;
+   seg_code : {
+      *(.text)
+   } 
+   . = seg_reset_base;
+   seg_reset : {
+      *(.reset)
+   } 
+   . = seg_data_base;
+   seg_data : {
+      *(.rodata)
+      . = ALIGN(4);
+      *(.rodata.*)
+      . = ALIGN(4);
+      *(.data)
+      . = ALIGN(4);
+      *(.sdata)
+      . = ALIGN(4);
+      *(.bss)
+      *(COMMON)
+      *(.sbss)
+   } 
+}
+
Index: /branches/fault_tolerance/softs/soft_transpose_giet/main.c
===================================================================
--- /branches/fault_tolerance/softs/soft_transpose_giet/main.c	(revision 724)
+++ /branches/fault_tolerance/softs/soft_transpose_giet/main.c	(revision 724)
@@ -0,0 +1,360 @@
+
+#include "hard_config.h"
+#include "stdio.h"
+#include "limits.h"
+#include "../giet_tsar/block_device.h"
+
+#define NL              128
+#define NP              128
+#define NB_IMAGES       5
+ 
+// Only processor 0 in each cluster access TTY
+#define PRINTF(...)      ({ if (lpid == 0) { _tty_printf(__VA_ARGS__); } })
+
+#define DISPLAY_OK          1   // enable display on frame buffer when non zero 
+#define CHECK_VERBOSE       1   // display a detailed check on TTY  when non zero
+#define INSTRUMENTATION_OK  0   // display statistcs on TTY when non zero
+
+// tricks to read some addresses from ldscript
+extern struct plaf seg_ioc_base;
+extern struct plaf seg_heap_base;
+
+// global variables stored in seg_data (cluster 0)
+
+// instrumentation counters (for each processor)
+unsigned int LOAD_START[256][4];
+unsigned int LOAD_END  [256][4];
+unsigned int TRSP_START[256][4];
+unsigned int TRSP_END  [256][4];
+unsigned int DISP_START[256][4];
+unsigned int DISP_END  [256][4];
+
+// checksum variables (used by proc(0,0,0) only
+unsigned check_line_before[NL];
+unsigned check_line_after[NL];
+
+/////////////
+void main()
+{
+    unsigned int image = 0;
+
+    unsigned int l;                                             // line index for loops
+    unsigned int p;                                             // pixel index for loops
+
+    unsigned int * ioc_address = (unsigned int *) &seg_ioc_base;
+    unsigned int block_size    = ioc_address[BLOCK_DEVICE_BLOCK_SIZE];
+
+    unsigned int proc_id     = _procid();                       // processor id
+    unsigned int nclusters   = X_SIZE*Y_SIZE;                   // number of clusters
+    unsigned int lpid        = proc_id % NB_PROCS_MAX;          // local processor id
+    unsigned int cluster_xy  = proc_id / NB_PROCS_MAX;          // cluster index (8 bits format)
+    unsigned int x           = cluster_xy >> Y_WIDTH;           // x coordinate
+    unsigned int y           = cluster_xy & ((1<<Y_WIDTH)-1);   // y coordinate
+    unsigned int ntasks      = nclusters * NB_PROCS_MAX;        // number of tasks
+    unsigned int npixels     = NP * NL;                         // number of pixel per image
+    unsigned int nblocks     = npixels / block_size;            // number of blocks per image
+
+    // task_id is a "continuous" index for the the task running on processor (x,y,lpid)
+    unsigned int task_id = (((x * Y_SIZE) + y) * NB_PROCS_MAX) + lpid;
+
+    // cluster_id is a "continuous" index for cluster(x,y)
+    unsigned int cluster_id  = (x * Y_SIZE) + y;               
+
+    PRINTF("\n *** Proc [%d,%d,0] enters main at cycle %d ***\n\n", 
+           x, y, _proctime());
+
+   //  parameters checking
+   if ((NB_PROCS_MAX != 1) && (NB_PROCS_MAX != 2) && (NB_PROCS_MAX != 4))
+   {
+      PRINTF("NB_PROCS_MAX must be 1, 2 or 4\n");
+      _exit();
+   }
+   if ((nclusters != 1) && (nclusters != 2) && (nclusters != 4) && (nclusters != 8) &&
+         (nclusters != 16) && (nclusters != 32) && (nclusters != 64) && (nclusters != 128) &&
+         (nclusters != 256))
+   {
+      PRINTF("NB_CLUSTERS must be a power of 1 between 1 and 256\n");
+      _exit();
+   }
+
+   // pointers on the distributed buffers containing the images, 
+   // allocated in the heap segment: each buffer contains 256 Kbytes
+   unsigned char* buf_in  = (unsigned char*)&seg_heap_base;
+   unsigned char* buf_out = buf_in + 0x00100000;
+
+   PRINTF("NB_CLUSTERS     = %d\n", nclusters); 
+   PRINTF("NB_LOCAL_PROCS  = %d\n", NB_PROCS_MAX); 
+   PRINTF("NB_TASKS        = %d\n", ntasks);
+   PRINTF("NB_PIXELS       = %d\n", npixels);
+   PRINTF("BLOCK_SIZE      = %d\n", block_size);
+   PRINTF("NB_BLOCKS       = %d\n\n", nblocks);
+
+   PRINTF("*** Proc 0 in cluster [%d,%d] starts barrier init at cycle %d\n", 
+          x, y, _proctime());
+
+   //  barriers initialization
+   _barrier_init(0, ntasks);
+   _barrier_init(1, ntasks);
+   _barrier_init(2, ntasks);
+   _barrier_init(3, ntasks);
+
+   PRINTF("*** Proc [%d,%d,0] completes barrier init at cycle %d\n",
+          x, y, _proctime());
+
+   // Main loop (on images)
+   while (image < NB_IMAGES)
+   {
+      // pseudo parallel load from disk to buf_in buffer : nblocks/nclusters blocks
+      // only task running on processor with (lpid == 0) does it
+
+      LOAD_START[cluster_id][lpid] = _proctime();
+
+      if (lpid == 0)
+      {
+         PRINTF("\n*** Proc [%d,%d,0] starts load for image %d at cycle %d\n",
+                x, y, image, _proctime() );
+
+         _ioc_read( ((image * nblocks) + ((nblocks * cluster_id) / nclusters)), 
+                    buf_in,
+                    (nblocks / nclusters),
+                    cluster_xy );
+
+         _ioc_completed();
+
+         PRINTF("*** Proc [%d,%d,0] completes load for image %d at cycle %d\n",
+                x, y, image, _proctime() );
+      }
+
+      LOAD_END[cluster_id][lpid] = _proctime();
+
+      _barrier_wait(0);
+
+      // parallel transpose from buf_in to buf_out buffers
+      // each processor makes the transposition for (NL/ntasks) lines
+      // (p,l) are the pixel coordinates in the source image
+
+      PRINTF("\n*** proc [%d,%d,0] starts transpose for image %d at cycle %d\n", 
+             x, y, image, _proctime());
+
+      TRSP_START[cluster_id][lpid] = _proctime();
+
+      unsigned int nlt   = NL / ntasks;                // number of lines per processor
+      unsigned int first = task_id * nlt;              // first line index
+      unsigned int last  = first + nlt;                // last line index
+      unsigned int nlines_clusters = NL / nclusters;   // number of lines per cluster
+      unsigned int npix_clusters   = NP / nclusters;   // number of pixels per cluster
+
+      unsigned int src_cluster;
+      unsigned int src_index;
+      unsigned int dst_cluster;
+      unsigned int dst_index;
+
+      unsigned int word;
+
+      for (l = first; l < last; l++)
+      {
+         PRINTF("    - processing line %d\n", l);
+
+         check_line_before[l] = 0;
+         
+         // in each iteration we read one word an write four bytes
+         for (p = 0 ; p < NP ; p = p+4)
+         {
+            // read one word, with extended address from local buffer
+            src_cluster = cluster_xy;
+            src_index   = (l % nlines_clusters) * NP + p;
+            word = _word_extended_read( src_cluster, 
+                                        (unsigned int)&buf_in[src_index] );
+
+            unsigned char byte0 = (unsigned char)( word      & 0x000000FF);
+            unsigned char byte1 = (unsigned char)((word>>8)  & 0x000000FF);
+            unsigned char byte2 = (unsigned char)((word>>16) & 0x000000FF);
+            unsigned char byte3 = (unsigned char)((word>>24) & 0x000000FF);
+
+            // compute checksum
+            check_line_before[l] = check_line_before[l] + byte0 + byte1 + byte2 + byte3;
+
+            // write four bytes with extended address to four remote buffers
+            dst_cluster = (((p / npix_clusters) / Y_SIZE) << Y_WIDTH) + 
+                           ((p / npix_clusters) % Y_SIZE);
+            dst_index   = (p % npix_clusters) * NL + l;
+            _byte_extended_write( dst_cluster, 
+                                  (unsigned int)&buf_out[dst_index], 
+                                  byte0 );
+
+            dst_cluster = ((((p+1) / npix_clusters) / Y_SIZE) << Y_WIDTH) + 
+                           (((p+1) / npix_clusters) % Y_SIZE);
+            dst_index   = ((p+1) % npix_clusters) * NL + l;
+            _byte_extended_write( dst_cluster, 
+                                  (unsigned int)&buf_out[dst_index], 
+                                  byte1 );
+
+            dst_cluster = ((((p+2) / npix_clusters) / Y_SIZE) << Y_WIDTH) + 
+                           (((p+2) / npix_clusters) % Y_SIZE);
+            dst_index   = ((p+2) % npix_clusters) * NL + l;
+            _byte_extended_write( dst_cluster, 
+                                  (unsigned int)&buf_out[dst_index], 
+                                  byte2 );
+
+            dst_cluster = ((((p+3) / npix_clusters) / Y_SIZE) << Y_WIDTH) + 
+                           (((p+3) / npix_clusters) % Y_SIZE);
+            dst_index   = ((p+3) % npix_clusters) * NL + l;
+            _byte_extended_write( dst_cluster, 
+                                  (unsigned int)&buf_out[dst_index], 
+                                  byte3 );
+         }
+      }
+
+      PRINTF("*** proc [%d,%d,0] complete transpose for image %d at cycle %d\n", 
+             x, y, image, _proctime() );
+
+      TRSP_END[cluster_id][lpid] = _proctime();
+
+      _barrier_wait(1);
+
+      // optional parallel display from local buf_out to frame buffer
+
+      if ( DISPLAY_OK )
+      {
+          PRINTF("\n*** proc [%d,%d,0] starts display for image %d at cycle %d\n", 
+                 x, y, image, _proctime() );
+
+          DISP_START[cluster_id][lpid] = _proctime();
+
+          unsigned int npxt = npixels / ntasks;   // number of pixels per task
+          unsigned int buffer = (unsigned int)buf_out + npxt*lpid;
+
+          _fb_sync_write( npxt * task_id, buffer, npxt, cluster_xy );
+
+          PRINTF("*** Proc [%d,%d,0] completes display for image %d at cycle %d\n",
+                 x, y, image, _proctime() );
+
+          DISP_END[cluster_id][lpid] = _proctime();
+
+          _barrier_wait(2);
+      }
+
+      // checksum (done by processor 0 in each cluster)
+
+      if ( lpid == 0 )
+      {
+         PRINTF("\n*** Proc [%d,%d,0] starts checks for image %d at cycle %d\n\n",
+                x, y, image, _proctime() );
+
+         unsigned int success = 1;
+         unsigned int start   = cluster_id * (NL / nclusters);
+         unsigned int stop    = start + (NL / nclusters);
+
+         for ( l = start ; l < stop ; l++ )
+         {
+            check_line_after[l] = 0;
+
+            for ( p = 0 ; p < NP ; p++ )
+            {
+               // read one byte in remote buffer
+               src_cluster = (((p / npix_clusters) / Y_SIZE) << Y_WIDTH) +
+                             ((p / npix_clusters) % Y_SIZE);
+               src_index   = (p % npix_clusters) * NL + l;
+
+               unsigned char byte = _byte_extended_read( src_cluster,
+                                                         (unsigned int)&buf_out[src_index] );
+
+               check_line_after[l] = check_line_after[l] + byte;
+            }
+
+            if( CHECK_VERBOSE )
+            {
+                PRINTF(" - l = %d / before = %d / after = %d \n",
+                       l, check_line_before[l], check_line_after[l] );
+            }
+
+            if ( check_line_before[l] != check_line_after[l] ) success = 0;
+         }
+
+         if ( success ) PRINTF("\n*** proc [%d,%d,0] : CHECKSUM OK \n\n", x, y);
+         else           PRINTF("\n*** proc [%d,%d,0] : CHECKSUM KO \n\n", x, y);
+      }
+
+      // instrumentation ( done by processor [0,0,0]
+
+      if ( (proc_id == 0) && INSTRUMENTATION_OK )
+      {
+         int cc, pp;
+         unsigned int min_load_start = INT_MAX;
+         unsigned int max_load_start = 0;
+         unsigned int min_load_ended = INT_MAX;
+         unsigned int max_load_ended = 0;
+         unsigned int min_trsp_start = INT_MAX;
+         unsigned int max_trsp_start = 0;
+         unsigned int min_trsp_ended = INT_MAX;
+         unsigned int max_trsp_ended = 0;
+         unsigned int min_disp_start = INT_MAX;
+         unsigned int max_disp_start = 0;
+         unsigned int min_disp_ended = INT_MAX;
+         unsigned int max_disp_ended = 0;
+
+         for (cc = 0; cc < nclusters; cc++)
+         {
+            for (pp = 0; pp < NB_PROCS_MAX; pp++)
+            {
+               if (LOAD_START[cc][pp] < min_load_start)  min_load_start = LOAD_START[cc][pp];
+               if (LOAD_START[cc][pp] > max_load_start)  max_load_start = LOAD_START[cc][pp];
+               if (LOAD_END[cc][pp]   < min_load_ended)  min_load_ended = LOAD_END[cc][pp]; 
+               if (LOAD_END[cc][pp]   > max_load_ended)  max_load_ended = LOAD_END[cc][pp];
+               if (TRSP_START[cc][pp] < min_trsp_start)  min_trsp_start = TRSP_START[cc][pp];
+               if (TRSP_START[cc][pp] > max_trsp_start)  max_trsp_start = TRSP_START[cc][pp];
+               if (TRSP_END[cc][pp]   < min_trsp_ended)  min_trsp_ended = TRSP_END[cc][pp];
+               if (TRSP_END[cc][pp]   > max_trsp_ended)  max_trsp_ended = TRSP_END[cc][pp];
+               if (DISP_START[cc][pp] < min_disp_start)  min_disp_start = DISP_START[cc][pp];
+               if (DISP_START[cc][pp] > max_disp_start)  max_disp_start = DISP_START[cc][pp];
+               if (DISP_END[cc][pp]   < min_disp_ended)  min_disp_ended = DISP_END[cc][pp];
+               if (DISP_END[cc][pp]   > max_disp_ended)  max_disp_ended = DISP_END[cc][pp];
+            }
+         }
+
+         PRINTF(" - LOAD_START : min = %d / max = %d / med = %d / delta = %d\n",
+               min_load_start, max_load_start, (min_load_start+max_load_start)/2, 
+               max_load_start-min_load_start); 
+
+         PRINTF(" - LOAD_END   : min = %d / max = %d / med = %d / delta = %d\n",
+               min_load_ended, max_load_ended, (min_load_ended+max_load_ended)/2, 
+               max_load_ended-min_load_ended); 
+
+         PRINTF(" - TRSP_START : min = %d / max = %d / med = %d / delta = %d\n",
+               min_trsp_start, max_trsp_start, (min_trsp_start+max_trsp_start)/2, 
+               max_trsp_start-min_trsp_start); 
+
+         PRINTF(" - TRSP_END   : min = %d / max = %d / med = %d / delta = %d\n",
+               min_trsp_ended, max_trsp_ended, (min_trsp_ended+max_trsp_ended)/2, 
+               max_trsp_ended-min_trsp_ended); 
+
+         PRINTF(" - DISP_START : min = %d / max = %d / med = %d / delta = %d\n",
+               min_disp_start, max_disp_start, (min_disp_start+max_disp_start)/2, 
+               max_disp_start-min_disp_start); 
+
+         PRINTF(" - DISP_END   : min = %d / max = %d / med = %d / delta = %d\n",
+               min_disp_ended, max_disp_ended, (min_disp_ended+max_disp_ended)/2, 
+               max_disp_ended-min_disp_ended); 
+      }
+
+      image++;
+
+      _barrier_wait( 3 );
+   } // end while image      
+
+
+   _exit();
+
+} // end main()
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
+
+
+
Index: /branches/fault_tolerance/softs/test_llsc/Makefile
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/Makefile	(revision 724)
@@ -0,0 +1,6 @@
+simul.x: top.cpp top.desc
+	soclib-cc -P -p top.desc -I. -o simul.x
+
+clean:
+	soclib-cc -x -p top.desc -I.
+	rm -rf *.o *.x term*
Index: /branches/fault_tolerance/softs/test_llsc/README
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/README	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/README	(revision 724)
@@ -0,0 +1,11 @@
+
+This directory contains a script aiming at using intensively the LL/SC table, making a lot of concurrent increments on some shared variables.
+
+For each test generated, a sequential native version is made and executed, so as to have a reference result of the test. It is then diff'ed with the output of the simulated version.
+
+The main script to execute is run_simus.sh in the scripts/ directory. Some of its parameters can be set inside it (e.g. the number of processors).
+
+The sub-directory LLSCTestGenerator contains the tool which generates the source files (1 for native sequential execution, 2 for simulated execution).
+
+The simulated application is compiled using DSX-VM.
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Genere_Tests.cpp
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Genere_Tests.cpp	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Genere_Tests.cpp	(revision 724)
@@ -0,0 +1,58 @@
+/*
+ * Outil pour la gÃ©nÃ©ration de test de la table LL/SC
+ * @Author QM
+ */
+
+#include "Program.hpp"
+#include "config.h"
+
+#include <time.h>
+#include <cstdlib>
+#include <iostream>
+#include <cstdio>
+
+int main(int argc, char** argv){
+
+   if (argc != 9){
+      printf("usage: genere_test <nb_procs> <nb_max_incr> <nb_locks_and_vars> <locks_horizontal> <vars_horizontal> <native_filename> <main_task_filename> <task_no_tty_filename>\n");
+      exit(1);
+   }
+
+   srand(time(NULL));
+
+   FILE * native_file;
+   FILE * main_task_file;
+   FILE * task_no_tty_file;
+   
+   native_file = fopen(argv[6], "w");
+   main_task_file = fopen(argv[7], "w");
+   task_no_tty_file = fopen(argv[8], "w");
+
+   const int nb_procs = atoi(argv[1]);
+   const int nb_max_incr = atoi(argv[2]);
+   const int nb_locks = atoi(argv[3]);
+
+   const bool lock_horizontal = atoi(argv[4]);
+   const bool vars_horizontal = atoi(argv[5]);
+
+	const int line_size = LINE_SIZE;
+
+   Program prog(nb_procs, nb_locks, nb_max_incr, line_size, lock_horizontal, vars_horizontal);
+
+   string s = prog.write_output();
+   fprintf(native_file, "%s", s.c_str());
+   fclose(native_file);
+
+   s = prog.write_main_task();
+   fprintf(main_task_file, "%s", s.c_str());
+   fclose(main_task_file);
+ 
+   s = prog.write_task_no_tty();
+   fprintf(task_no_tty_file, "%s", s.c_str());
+   fclose(task_no_tty_file);  
+
+   return 0;
+}
+
+
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Increment.hpp
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Increment.hpp	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Increment.hpp	(revision 724)
@@ -0,0 +1,53 @@
+
+#ifndef _increment_hpp_
+#define _increment_hpp_
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <sstream>
+
+#include "functions.h"
+
+using namespace std;
+
+class Increment {
+   int lock_index;
+   int var_index;
+   int line_size;
+
+   public:
+
+   Increment(int nb_locks, int line_size, bool lock_in_line, bool vars_in_line){
+      this->line_size = line_size;
+
+      int index = randint(0, nb_locks - 1);
+      int lock_size = (lock_in_line ? ceil((float) nb_locks / line_size) * line_size : nb_locks * line_size);
+
+      lock_index = (lock_in_line ? index : index * line_size);
+      var_index = (vars_in_line ? lock_size + index : lock_size + index * line_size);
+   }
+
+   ~Increment() {}
+
+   string write_output() {
+      stringstream res;
+      res << "   tab[" << var_index << "]++;" << endl;
+
+      return res.str();
+   }
+
+   string write_task() {
+      stringstream res;
+      res << "   take_lock(&tab[" << lock_index << "]);" << endl;
+      res << "   tab[" << var_index << "]++;" << endl;
+      res << "   release_lock(&tab[" << lock_index << "]);" << endl;
+
+      return res.str();
+   }
+
+};
+
+#endif
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Makefile
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Makefile	(revision 724)
@@ -0,0 +1,11 @@
+
+HPP_FILES = $(wildcard *.hpp)
+
+
+all: generate_test
+
+generate_test: Genere_Tests.cpp $(HPP_FILES) config.h
+	g++ -o $@ $<
+
+clean:
+	rm -f generate_test
Index: /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Program.hpp
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Program.hpp	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/Program.hpp	(revision 724)
@@ -0,0 +1,261 @@
+
+#ifndef _program_hpp_
+#define _program_hpp_
+
+#include <iostream>
+#include <sstream>
+#include <stdbool.h>
+
+#include "config.h"
+#include "TestThread.hpp"
+
+
+using namespace std;
+
+class Program {
+
+   int nb_threads;
+   int nb_max_incr;
+   int nb_locks;
+   int nb_vars;
+   int line_size;
+   bool lock_in_line, vars_in_line;
+   int tab_size;
+   TestThread ** threads;
+
+   public:
+
+   Program(int nb_procs, int nb_locks, int nb_max_accesses, int line_size, bool lock_in_line, bool vars_in_line){
+      this->nb_threads = nb_procs;
+      this->nb_max_incr = nb_max_accesses;
+      this->nb_locks = nb_locks;
+      this->nb_vars = nb_locks;
+      this->line_size = line_size;
+      this->lock_in_line = lock_in_line;
+      this->vars_in_line = vars_in_line;
+      this->tab_size = (lock_in_line ? ceil((float) nb_locks / line_size) * line_size : nb_locks * line_size) + (vars_in_line ? ceil((float) nb_vars / line_size) * line_size : nb_vars * line_size);
+      this->threads = new TestThread * [nb_threads];
+
+      for (int i = 0; i < nb_threads; i++){
+         threads[i] = new TestThread(nb_locks, nb_max_accesses, line_size, lock_in_line, vars_in_line, i);
+      }
+   }
+
+   ~Program(){
+      for (int i = 0; i < nb_threads; i++){
+         delete threads[i];
+      }
+      delete [] threads;
+   }
+
+
+   string write_main_task() {
+      stringstream res;
+      res << "#include \"srl.h\"" << endl;
+      res << "#include \"stdio.h\"" << endl;
+      res << "#include \"test_llsc_main_proto.h\"" << endl;
+      res << "#include \"functions.h\"" << endl;
+      res << endl;
+      res << "/*" << endl;
+      res << " * Test generated for a dsx_vm compilation" << endl;
+      res << " * NB_LOCKS : " << nb_locks << endl;
+      res << " * NB_VARS : " << nb_vars << endl;
+      if (lock_in_line) {
+         res << " * LOCKS PLACEMENT : horizontal" << endl;
+      }
+      else {
+         res << " * LOCKS PLACEMENT : vertical" << endl;
+      }
+      if (vars_in_line) {
+         res << " * VARS PLACEMENT : horizontal" << endl;
+      }
+      else {
+         res << " * VARS PLACEMENT : vertical" << endl;
+      }
+      res << " * NB_MAX_INCRS : " << nb_max_incr << endl;
+      res << " * LINE_SIZE : " << LINE_SIZE << endl;
+      res << " */" << endl;
+      res << endl;
+      res << "int * tab;" << endl;
+      res << endl;
+      res << threads[0]->write_task();
+      res << endl;
+      res << endl;
+      res << "FUNC(test_llsc_main_func) {" << endl;
+      res << endl;
+      res << "   int i;" << endl;
+      res << endl;
+      res << "   srl_memspace_t memspace = SRL_GET_MEMSPACE(table);" << endl;
+      res << "   tab = (int *) SRL_MEMSPACE_ADDR(memspace);" << endl;
+      res << "   srl_barrier_t barrier = SRL_GET_BARRIER(barrier);" << endl;
+      res << "   srl_barrier_t barrier2 = SRL_GET_BARRIER(barrier2);" << endl;
+      res << endl;
+      res << "   // Initialisation du tableau" << endl;
+      res << "   for (i = 0; i < " << tab_size << "; i++) {" << endl;
+      res << "      tab[i] = 0;" << endl;
+      res << "   }" << endl;
+      res << endl;
+      res << "   barrier_wait(barrier);" << endl;
+      res << endl;
+      res << "   run0();" << endl;
+      res << endl;
+      res << "   barrier_wait(barrier2);" << endl;
+      res << endl;
+      res << "   for (i = 0; i < " << tab_size << "; i++) {" << endl;
+      res << "      if (tab[i] != 0) {" << endl;
+      res << "         giet_tty_printf(\"tab[%d] final : %d\\n\", i, tab[i]);" << endl;
+      res << "      }" << endl;
+      res << "   }" << endl;
+      res << endl;
+      res << "   giet_raise_sigint();" << endl;
+      res << endl;
+      res << "   srl_exit();" << endl;
+      res << "}" << endl;
+      res << endl;
+
+      return res.str();
+   }
+
+   
+   string write_task_no_tty() {
+      stringstream res;
+      res << "#include \"srl.h\"" << endl;
+      res << "#include \"stdio.h\"" << endl;
+      res << "#include \"test_llsc_no_tty_proto.h\"" << endl;
+      res << "#include \"functions.h\"" << endl;
+      res << endl;
+      res << "/*" << endl;
+      res << " * Test generated for a dsx_vm compilation" << endl;
+      res << " * NB_LOCKS : " << nb_locks << endl;
+      res << " * NB_VARS : " << nb_vars << endl;
+      if (lock_in_line) {
+         res << " * LOCKS PLACEMENT : horizontal" << endl;
+      }
+      else {
+         res << " * LOCKS PLACEMENT : vertical" << endl;
+      }
+      if (vars_in_line) {
+         res << " * VARS PLACEMENT : horizontal" << endl;
+      }
+      else {
+         res << " * VARS PLACEMENT : vertical" << endl;
+      }
+      res << " * NB_MAX_INCRS : " << nb_max_incr << endl;
+      res << " * LINE_SIZE : " << LINE_SIZE << endl;
+      res << " */" << endl;
+      res << endl;
+      res << "int * tab;" << endl;
+      res << endl;
+
+      for (int i = 1; i < nb_threads; i++) {
+         res << threads[i]->write_task();
+      }
+      
+      res << endl;
+      res << endl;
+      res << "FUNC(test_llsc_no_tty_func) {" << endl;
+      res << endl;
+      res << "   srl_memspace_t memspace = SRL_GET_MEMSPACE(table);" << endl;
+      res << "   tab = (int *) SRL_MEMSPACE_ADDR(memspace);" << endl;
+      res << "   srl_barrier_t barrier = SRL_GET_BARRIER(barrier);" << endl;
+      res << "   srl_barrier_t barrier2 = SRL_GET_BARRIER(barrier2);" << endl;
+      res << "   int thread_id = SRL_GET_CONST(id);" << endl;
+      res << endl;
+      res << "   barrier_wait(barrier);" << endl;
+      res << endl;
+      res << "   if (thread_id == 1) {" << endl;
+      res << "      run1();" << endl;
+      res << "   }" << endl;
+      for (int i = 2; i < nb_threads; i++) {
+         res << "   else if (thread_id == " << i << ") {" << endl;
+         res << "      run" << i << "();" << endl;
+         res << "   }" << endl;
+      }
+      res << "   else {" << endl;
+      res << "      srl_assert(0);" << endl;
+      res << "   }" << endl;
+      res << endl;
+      res << "   barrier_wait(barrier2);" << endl;
+      res << endl;
+      res << "   srl_exit();" << endl;
+      res << endl;
+      res << "}" << endl;
+      res << endl;
+
+      return res.str();
+   }
+
+
+   string write_output() {
+      cout << tab_size;
+      stringstream res;
+      res << endl;
+      res << "#include <stdio.h>" << endl;
+      res << "#include <assert.h>" << endl;
+      res << endl;
+      res << "/*" << endl;
+      res << " * Test generated for a posix execution" << endl;
+      res << " * NB_LOCKS : " << nb_locks << endl;
+      res << " * NB_VARS : " << nb_vars << endl;
+      if (lock_in_line) {
+         res << " * LOCKS PLACEMENT : horizontal" << endl;
+      }
+      else {
+         res << " * LOCKS PLACEMENT : vertical" << endl;
+      }
+      if (vars_in_line) {
+         res << " * VARS PLACEMENT : horizontal" << endl;
+      }
+      else {
+         res << " * VARS PLACEMENT : vertical" << endl;
+      }
+      res << " * NB_MAX_INCRS : " << nb_max_incr << endl;
+      res << " * LINE_SIZE : " << LINE_SIZE << endl;
+      res << " */" << endl;
+      res << endl;
+      res << "volatile int tab[" << tab_size << "];" << endl;
+      res << endl;
+      res << endl;
+
+      
+      for (int i = 0; i < nb_threads; i++) {
+         res << threads[i]->write_output();
+      }
+      
+      res << "int main() {" << endl;
+      res << endl;
+      res << "   int i;" << endl;
+      res << endl;
+      res << "   /* Version native sÃ©quentielle */" << endl;
+      res << endl;
+      res << "   // Initialisation du tableau" << endl;
+      res << "   for (i = 0; i < " << tab_size << "; i++) {" << endl;
+      res << "      tab[i] = 0;" << endl;
+      res << "   }" << endl;
+      res << endl;
+      res << "   run0();" << endl;
+      for (int i = 1; i < nb_threads; i++){
+         res << "   run" << i << "();" << endl;
+      }
+      res << endl;
+      res << "   for (i = 0; i < " << tab_size << "; i++) {" << endl;
+      res << "      if (tab[i] != 0) {" << endl;
+      res << "         printf(\"tab[%d] final : %d\\n\", i, tab[i]);" << endl;
+      res << "      }" << endl;
+      res << "   }" << endl;
+      res << endl;
+      res << "   return 0;" << endl;
+      res << "}" << endl;
+      res << endl;
+
+      return res.str();
+    }
+
+};
+
+#endif
+
+
+
+
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/TestThread.hpp
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/TestThread.hpp	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/TestThread.hpp	(revision 724)
@@ -0,0 +1,70 @@
+
+#ifndef _testthread_hpp_
+#define _testthread_hpp_
+
+#include <iostream>
+#include <sstream>
+#include <list>
+
+#include "Increment.hpp"
+
+using namespace std;
+
+class TestThread {
+
+   int proc_id;
+   std::list<Increment *> requests;
+
+   public:
+
+   TestThread(int nb_locks, int nb_max_accesses, int line_size, bool lock_in_line, bool vars_in_line, int proc_id) {
+      this->proc_id = proc_id;
+      const int nb_accesses = randint(1, nb_max_accesses);
+      for (int i = 0; i < nb_accesses; i++) {
+         Increment * t;
+         t = new Increment(nb_locks, line_size, lock_in_line, vars_in_line);
+         requests.push_back(t);
+      }
+   }
+
+   ~TestThread() {
+      std::list<Increment *>::iterator it;
+      for (it = requests.begin(); it != requests.end(); it++) {
+         delete (*it);
+      }
+      requests.clear();
+   }
+   
+   string write_output() {
+      stringstream res;
+      res << "void run" << proc_id << "() {" << endl;
+
+      std::list<Increment *>::iterator it;
+      for (it = requests.begin(); it != requests.end(); it++) {
+         res << (*it)->write_output();
+      }
+
+      res << "}" << endl;
+      res << endl;
+
+      return res.str();
+   }
+
+
+   string write_task() {
+      stringstream res;
+      res << "__attribute__((constructor)) void run" << proc_id << "() {" << endl;
+
+      std::list<Increment *>::iterator it;
+      for (it = requests.begin(); it != requests.end(); it++) {
+         res << (*it)->write_task();
+      }
+
+      res << "}" << endl;
+      res << endl;
+
+      return res.str();
+   }
+};
+
+#endif
Index: /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/config.h
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/config.h	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/config.h	(revision 724)
@@ -0,0 +1,8 @@
+
+#ifndef _CONFIG_H_
+#define _CONFIG_H_
+
+#define LINE_SIZE 16
+
+#endif
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/functions.h
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/functions.h	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/LLSCTestGenerator/functions.h	(revision 724)
@@ -0,0 +1,43 @@
+
+#ifndef _functions_h_
+#define _functions_h_
+
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+static int mylog2(size_t v) {
+   static const size_t b[] = { 0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000 };
+   static const size_t S[] = { 1, 2, 4, 8, 16 };
+   int i;
+   register size_t r = 0;
+   for (i = 4; i >= 0; i--) {
+      if (v & b[i]) {
+         v >>= S[i];
+         r |= S[i];
+      }
+   }
+   return r + 1;
+}
+
+/*int randint(int a,int b){
+   int range = b - a + 1;
+   int length = (int) ceil(log2(range));
+   int mask = (int) pow(2,length) - 1;
+   printf("mask : %d\n",mask);
+   int res;
+   do {
+      res = rand() & mask;
+   }
+   while (res >= range);
+   return (res + a);
+}*/
+
+int randint(int a, int b){
+   int range = b - a + 1;
+   int res = rand() % range;
+   return res + a;
+}
+
+
+#endif
Index: /branches/fault_tolerance/softs/test_llsc/scripts/Makefile.nat
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/Makefile.nat	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/Makefile.nat	(revision 724)
@@ -0,0 +1,6 @@
+
+all: test_natif
+
+test_natif: test_llsc.c
+	gcc -o $@ $<
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/functions.c
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/functions.c	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/functions.c	(revision 724)
@@ -0,0 +1,29 @@
+
+#include "functions.h"
+
+void take_lock(volatile int * plock) {
+   volatile int * _plock = plock;
+   __asm__ __volatile__ (
+      "move $16, %0                   \n"
+      "giet_lock_try :                \n"
+      "lw   $2,    0($16)             \n"
+      "ll   $2,    0($16)             \n"
+      "bnez $2,    giet_lock_try      \n"
+      "li   $3,    1                  \n"
+      "sc   $3,    0($16)             \n"
+      "beqz $3,    giet_lock_try      \n"
+      "nop                            \n"
+      "giet_lock_ok:                  \n"
+      "nop                            \n"
+      :                                
+      :"r" (_plock)                  
+      :"$2", "$3", "$4", "$16");
+}
+
+
+void release_lock(volatile int * plock) {
+   asm volatile("\tsync\n");
+   *plock = 0;
+}
+
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/functions.h
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/functions.h	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/functions.h	(revision 724)
@@ -0,0 +1,8 @@
+#ifndef _FUNCTIONS_H_
+#define _FUNCTIONS_H_
+
+
+void take_lock(volatile int * plock);
+void release_lock(volatile int * plock);
+
+#endif
Index: /branches/fault_tolerance/softs/test_llsc/scripts/run_simus.py
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/run_simus.py	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/run_simus.py	(revision 724)
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+
+import subprocess
+import os
+import random
+
+data_dir = 'data'
+gen_dir = 'generated'
+test_gen_tool_dir = 'LLSCTestGenerator'
+
+test_gen_binary = 'generate_test'
+
+log_init_name = 'log_init_'
+log_term_name = 'log_term_'
+
+generated_test = 'test_llsc.c'
+main_task = 'test_llsc_main.c'
+task_no_tty = 'test_llsc_no_tty.c'
+
+res_natif = 'res_natif.txt'
+
+# Parametres des tests
+nb_locks = 20
+nb_max_incr = 2000
+nb_procs = 64
+
+
+os.chdir(os.path.dirname(__file__))
+
+scripts_path = os.path.abspath(".")
+top_path = os.path.abspath("../")
+
+topcell_name = "top.cpp"
+
+
+random.seed()
+
+
+def get_x_y(nb_procs):
+   x = 1
+   y = 1
+   to_x = True
+   while (x * y * 4 < nb_procs):
+      if to_x:
+         x = x * 2
+      else:
+         y = y * 2
+      to_x = not to_x
+   return x, y
+
+
+print "make -C", test_gen_tool_dir
+subprocess.call([ 'make', '-C', test_gen_tool_dir ])
+
+print "cp", os.path.join(test_gen_tool_dir, test_gen_binary), os.path.join(scripts_path, test_gen_binary)
+subprocess.call([ 'cp', os.path.join(test_gen_tool_dir, test_gen_binary), os.path.join(scripts_path, test_gen_binary)])
+
+print "mkdir -p", os.path.join(scripts_path, data_dir)
+subprocess.call([ 'mkdir', '-p', os.path.join(scripts_path, data_dir) ])
+
+while True:
+   x, y = get_x_y(nb_procs)
+   
+   b0 = random.randint(0, 1)
+   b1 = random.randint(0, 1)
+
+   print test_gen_binary, nb_procs, nb_max_incr, nb_locks, b0, b1, generated_test, main_task, task_no_tty
+   tab_size = subprocess.Popen([ os.path.join(scripts_path, test_gen_binary), str(nb_procs), str(nb_max_incr), str(nb_locks), str(b0), str(b1), generated_test, main_task, task_no_tty ], stdout = subprocess.PIPE).communicate()[0]
+   
+   print "make -f Makefile.nat"
+   subprocess.call([ 'make', '-f', 'Makefile.nat' ])
+
+   print "./test_natif >", os.path.join(data_dir, res_natif)
+   output = subprocess.Popen([ './test_natif' ], stdout = subprocess.PIPE).communicate()[0]
+   file = open(os.path.join(data_dir, res_natif), 'w')
+   file.write(output)
+   file.close()
+
+   print "./test_llsc.py", str(x), str(y), tab_size
+   subprocess.call([ './test_llsc.py', str(x), str(y), tab_size ])
+   
+   print "cd", top_path
+   os.chdir(top_path)
+   print "touch", topcell_name
+   subprocess.call([ 'touch', topcell_name ])
+   print "make"
+   subprocess.call([ 'make' ])
+   
+   # Launch simulation
+   print "./simul.x >", os.path.join(scripts_path, data_dir, log_init_name + str(nb_procs))
+   output = subprocess.Popen([ './simul.x' ], stdout = subprocess.PIPE).communicate()[0]
+
+   # Write simulation results to data directory
+   print "cd", scripts_path
+   os.chdir(scripts_path)
+   filename = os.path.join(data_dir, log_init_name + str(nb_procs))
+   file = open(filename, 'w')
+   file.write(output)
+   file.close()
+
+   term_filename = os.path.join(scripts_path, data_dir, log_term_name + str(nb_procs))
+   print "mv", os.path.join(top_path, 'term1'), term_filename
+   subprocess.call([ 'mv', os.path.join(top_path, 'term1'), term_filename ])
+   
+   # Quit if results obtained by simulation are incorrect
+   print "diff", term_filename, os.path.join(data_dir, res_natif)
+   output = subprocess.Popen([ 'diff', term_filename, os.path.join(data_dir, res_natif) ], stdout = subprocess.PIPE).communicate()[0]
+   if output != "":
+      break;
+
+
+## Enf of simulations
+
+
+
+
+
+
+
+
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/test_llsc.py
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/test_llsc.py	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/test_llsc.py	(revision 724)
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+
+import sys
+import dsx
+from tsarch import TSArch
+from dsx.mapper.mapper import Mapper
+from dsx import *
+
+
+
+if len(sys.argv) < 4 or sys.argv[1] == '' or sys.argv[2] == '':
+   print "Usage: ", sys.argv[0], "<nb_clusters_x> <nb_clusters_y> <memspace_size>"
+   exit()
+
+cluster_x = int(sys.argv[1])
+cluster_y = int(sys.argv[2])
+memspace_size = int(sys.argv[3]) * 4
+
+nb_procs = 4
+nb_total_procs = nb_procs * cluster_x * cluster_y
+
+hd = TSArch(cluster_x = cluster_x, cluster_y = cluster_y, nb_proc = nb_procs, nb_tty = 4)
+
+test_llsc = TaskModel(
+        'test_llsc_main',
+        ports = {
+            'table':   MemspacePort(),
+            'barrier': BarrierPort(),
+            'barrier2': BarrierPort(),
+        },
+        impls = [
+                SwTask('test_llsc_main_func',
+                           stack_size = 2048,
+                           sources = ['test_llsc_main.c', 'functions.c'],
+                           headers = ['functions.h'],
+                           defines = [])
+        ], 
+        uses = ['tty']
+        )
+
+
+test_llsc_no_tty = TaskModel(
+        'test_llsc_no_tty',
+        ports = {
+            'table':   MemspacePort(),
+            'barrier': BarrierPort(),
+            'barrier2': BarrierPort(),
+            'id' : ConstPort(),
+        },
+        impls = [
+                SwTask('test_llsc_no_tty_func',
+                           stack_size = 2048,
+                           sources = ['test_llsc_no_tty.c', 'functions.c'],
+                           headers = ['functions.h'],
+                           defines = [])
+        ],
+        )
+ 
+
+barrier = Barrier('barrier')
+barrier2 = Barrier('barrier2')
+memspace = Memspace('memspace', memspace_size)
+
+tasks = ()
+
+
+tasks += Task('task_llsc_main', 'test_llsc_main',
+            {
+               'table'   : memspace,
+               'barrier' : barrier,
+               'barrier2' : barrier2,
+            },
+            defines = {} ),
+
+
+for i in range(1, nb_total_procs):
+   tasks += Task('task_llsc_no_tty_%d' % i, 'test_llsc_no_tty',
+            {
+               'table'   : memspace,
+               'barrier' : barrier,
+               'barrier2' : barrier2,
+               'id' : i,
+            },
+            defines = {} ),
+
+tcg = dsx.Tcg('test_llsc', *tasks)
+
+mpr = Mapper(hd, tcg) 
+
+mpr.map('task_llsc_main', cluster = 0, proc = 0, stack = "PSEG_RAM_0")
+
+for i in range(1, nb_total_procs):
+   #print "cluster = %d - proc = %d" % (int(i) / 4, i % 4)
+   mpr.map('task_llsc_no_tty_%d' % i, cluster = int(i) / 4, proc = int(i) % 4, stack = "PSEG_RAM_%d" % (int(i) / 4))
+
+for const in tcg.nodesOfType('const'):
+   mpr.map(const, pseg = 'PSEG_RAM_0')
+
+
+mpr.map('memspace', pseg = "PSEG_RAM_0")
+mpr.map('barrier', pseg = "PSEG_RAM_0")
+mpr.map('barrier2', pseg = "PSEG_RAM_0")
+
+mpr.map(tcg, code = 'PSEG_RAM_0', data = 'PSEG_RAM_0', ptab = "PSEG_RAM_0")
+mpr.map('system', boot = 'PSEG_RAM_0', kernel = 'PSEG_RAM_0', scheduler = True)
+
+mpr.generate(dsx.Giet(outdir = '.', vaddr_replicated_peri_inc = 0x2000, debug = False))
+
Index: /branches/fault_tolerance/softs/test_llsc/scripts/tsarch.py
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/scripts/tsarch.py	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/scripts/tsarch.py	(revision 724)
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+
+from dsx.hard.hard import *
+
+
+def TSArch(cluster_x, cluster_y, nb_proc = 1, nb_tty = 8, wcoproc = False):
+ 
+    nb_cluster = cluster_x * cluster_y
+
+    hd = Hardware(cluster_x, cluster_y , addr_size = 40, nb_proc = nb_proc, ccoherence = True) #nb_proc : proc by cluster
+
+
+    ######### peripherals ##########
+    hd.add(Tty('PSEG_TTY', pbase = 0xB4000000, channel_size = 16, nb_channel = nb_tty))
+    hd.add(Fbf('PSEG_FBF', pbase = 0xB2000000, channel_size = 352 * 288 * 2, nb_channel = 1))
+    hd.add(Ioc('PSEG_IOC', pbase = 0xB3000000, channel_size = 32, nb_channel = 1))
+    hd.add(SimH('PSEG_SIMH', pbase = 0xB7000000, channel_size = 32, nb_channel = 1)) # 6 mapped registers
+
+    hd.add(Xicu('PSEG_XICU', pbase = 0xB0000000, channel_size = 32, nb_channel = nb_proc, replicated = True)) # name suffixed with "_<num_cluster>"
+    hd.add(Dma('PSEG_DMA', pbase = 0xB1000000, channel_size = 32, nb_channel = nb_proc, replicated = True))
+    
+    ############## MEMORY ###########
+    for cl in range(nb_cluster):
+        hd.add(RAM('PSEG_RAM_%d'%cl, pbase = 0x00000000 + (cl * hd.cluster_span), size = 0x00C00000))
+
+    ############## IRQ ############
+    hd.add(Irq(cluster_id = 0, proc_id = 0, icu_irq_id = 31, peri = Ioc, channel_id = 0))
+    for j in range(16, 31):
+        hd.add(Irq(cluster_id = 0, proc_id = 0, icu_irq_id = j, peri = Tty, channel_id = j - 16))
+
+    for cl in range(nb_cluster):
+        for p in xrange(nb_proc):
+            hd.add(Irq(cluster_id = cl, proc_id = p, icu_irq_id = p + 8, peri = Dma,  channel_id = p))
+            hd.add(Irq(cluster_id = cl, proc_id = p, icu_irq_id = p,     peri = Xicu, channel_id = p)) 
+
+
+    ############# ROM ############
+    hd.add(ROM("PSEG_ROM", pbase = 0xbfc00000, size = 0x00100000)) 
+
+    return hd
+
Index: /branches/fault_tolerance/softs/test_llsc/top.cpp
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/top.cpp	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/top.cpp	(revision 724)
@@ -0,0 +1,1049 @@
+/////////////////////////////////////////////////////////////////////////
+// File: top.cpp 
+// Author: Alain Greiner 
+// Copyright: UPMC/LIP6
+// Date : may 2013
+// This program is released under the GNU public license
+/////////////////////////////////////////////////////////////////////////
+// This file define a generic TSAR architecture.
+// The physical address space is 40 bits.
+//
+// The number of clusters cannot be larger than 256.
+// The number of processors per cluster cannot be larger than 8.
+// 
+// - It uses four dspin_local_crossbar per cluster as local interconnect 
+// - It uses two virtual_dspin routers per cluster as global interconnect
+// - It uses the vci_cc_vcache_wrapper 
+// - It uses the vci_mem_cache
+// - It contains one vci_xicu per cluster.
+// - It contains one vci_multi_dma per cluster.
+// - It contains one vci_simple_ram per cluster to model the L3 cache.
+//
+// The communication between the MemCache and the Xram is 64 bits.
+//
+// All clusters are identical, but the cluster 0 (called io_cluster), 
+// contains 6 extra components:
+// - the boot rom (BROM)
+// - the disk controller (BDEV)
+// - the multi-channel network controller (MNIC)
+// - the multi-channel chained buffer dma controller (CDMA)
+// - the multi-channel tty controller (MTTY)
+// - the frame buffer controller (FBUF)
+//
+// It is build with one single component implementing a cluster,
+// defined in files tsar_xbar_cluster.* (with * = cpp, h, sd)
+//
+// The IRQs are connected to XICUs as follow:
+// - The IRQ_IN[0] to IRQ_IN[7] ports are not used in all clusters.
+// - The DMA IRQs are connected to IRQ_IN[8] to IRQ_IN[15] in all clusters.
+// - The TTY IRQs are connected to IRQ_IN[16] to IRQ_IN[30] in I/O cluster.
+// - The BDEV IRQ is connected to IRQ_IN[31] in I/O cluster.
+// 
+// Some hardware parameters are used when compiling the OS, and are used 
+// by this top.cpp file. They must be defined in the hard_config.h file :
+// - CLUSTER_X        : number of clusters in a row (power of 2)
+// - CLUSTER_Y        : number of clusters in a column (power of 2)
+// - CLUSTER_SIZE     : size of the segment allocated to a cluster
+// - NB_PROCS_MAX     : number of processors per cluster (power of 2)
+// - NB_DMA_CHANNELS  : number of DMA channels per cluster (< 9)
+// - NB_TTY_CHANNELS  : number of TTY channels in I/O cluster (< 16)
+// - NB_NIC_CHANNELS  : number of NIC channels in I/O cluster (< 9)
+// 
+// Some other hardware parameters are not used when compiling the OS,
+// and can be directly defined in this top.cpp file:
+// - XRAM_LATENCY     : external ram latency 
+// - MEMC_WAYS        : L2 cache number of ways
+// - MEMC_SETS        : L2 cache number of sets
+// - L1_IWAYS     
+// - L1_ISETS    
+// - L1_DWAYS   
+// - L1_DSETS  
+// - FBUF_X_SIZE      : width of frame buffer (pixels)
+// - FBUF_Y_SIZE      : heigth of frame buffer (lines)
+// - BDEV_SECTOR_SIZE : block size for block drvice
+// - BDEV_IMAGE_NAME  : file pathname for block device 
+// - NIC_RX_NAME      : file pathname for NIC received packets
+// - NIC_TX_NAME      : file pathname for NIC transmited packets
+// - NIC_TIMEOUT      : max number of cycles before closing a container
+/////////////////////////////////////////////////////////////////////////
+// General policy for 40 bits physical address decoding:
+// All physical segments base addresses are multiple of 1 Mbytes
+// (=> the 24 LSB bits = 0, and the 16 MSB bits define the target) 
+// The (x_width + y_width) MSB bits (left aligned) define
+// the cluster index, and the LADR bits define the local index:
+//      | X_ID  | Y_ID  |---| LADR |     OFFSET          |
+//      |x_width|y_width|---|  8   |       24            |
+/////////////////////////////////////////////////////////////////////////
+// General policy for 14 bits SRCID decoding:
+// Each component is identified by (x_id, y_id, l_id) tuple.
+//      | X_ID  | Y_ID  |---| L_ID |
+//      |x_width|y_width|---|  6   |
+/////////////////////////////////////////////////////////////////////////
+
+#include <systemc>
+#include <sys/time.h>
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <cstdarg>
+#include <stdint.h>
+
+#include "gdbserver.h"
+#include "mapping_table.h"
+#include "tsar_xbar_cluster.h"
+#include "alloc_elems.h"
+
+///////////////////////////////////////////////////
+//      OS
+///////////////////////////////////////////////////
+
+//#define USE_ALMOS
+#define USE_GIET 
+
+#ifdef USE_ALMOS
+#ifdef USE_GIET
+#error "Can't use Two different OS"
+#endif
+#endif
+
+#ifndef USE_ALMOS
+#ifndef USE_GIET
+#error "You need to specify one OS"
+#endif
+#endif
+
+///////////////////////////////////////////////////
+//               Parallelisation
+///////////////////////////////////////////////////
+#define USE_OPENMP 0
+
+#if USE_OPENMP
+#include <omp.h>
+#endif
+
+//  cluster index (computed from x,y coordinates)
+#define cluster(x,y)   (y + YMAX * x)
+
+#define min(x, y) (x < y ? x : y)
+
+///////////////////////////////////////////////////////////
+//          DSPIN parameters           
+///////////////////////////////////////////////////////////
+
+#define dspin_cmd_width      39
+#define dspin_rsp_width      32
+
+///////////////////////////////////////////////////////////
+//          VCI parameters           
+///////////////////////////////////////////////////////////
+
+#define vci_cell_width_int    4
+#define vci_cell_width_ext    8
+
+#ifdef USE_ALMOS
+#define vci_address_width     32
+#endif
+#ifdef USE_GIET
+#define vci_address_width     40
+#endif
+#define vci_plen_width        8
+#define vci_rerror_width      1
+#define vci_clen_width        1
+#define vci_rflag_width       1
+#define vci_srcid_width       14
+#define vci_pktid_width       4
+#define vci_trdid_width       4
+#define vci_wrplen_width      1
+
+////////////////////////////////////////////////////////////
+//    Main Hardware Parameters values         
+//////////////////////i/////////////////////////////////////
+
+#ifdef USE_ALMOS
+#include "almos/hard_config.h"
+#define PREFIX_OS "almos/"
+#endif
+#ifdef USE_GIET
+#include "scripts/soft/hard_config.h"
+#define PREFIX_OS "giet_vm/"
+#endif
+
+////////////////////////////////////////////////////////////
+//    Secondary Hardware Parameters         
+//////////////////////i/////////////////////////////////////
+
+#define XMAX                  CLUSTER_X
+#define YMAX                  CLUSTER_Y
+
+#define XRAM_LATENCY          0
+
+#define MEMC_WAYS             16
+#define MEMC_SETS             256
+
+#define L1_IWAYS              4
+#define L1_ISETS              64
+
+#define L1_DWAYS              4
+#define L1_DSETS              64
+
+#ifdef USE_ALMOS
+#define FBUF_X_SIZE           512
+#define FBUF_Y_SIZE           512
+#endif
+#ifdef USE_GIET
+#define FBUF_X_SIZE           128
+#define FBUF_Y_SIZE           128
+#endif
+
+#ifdef USE_GIET
+#define BDEV_SECTOR_SIZE      512
+#define BDEV_IMAGE_NAME       PREFIX_OS"display/images.raw"
+#endif
+#ifdef USE_ALMOS
+#define BDEV_SECTOR_SIZE      4096
+#define BDEV_IMAGE_NAME       PREFIX_OS"hdd-img.bin"
+#endif
+
+#define NIC_RX_NAME           PREFIX_OS"nic/rx_packets.txt"
+#define NIC_TX_NAME           PREFIX_OS"nic/tx_packets.txt"
+#define NIC_TIMEOUT           10000
+
+#define NORTH                 0
+#define SOUTH                 1
+#define EAST                  2
+#define WEST                  3
+
+////////////////////////////////////////////////////////////
+//    Software to be loaded in ROM & RAM         
+//////////////////////i/////////////////////////////////////
+
+#ifdef USE_ALMOS
+#define soft_name       PREFIX_OS"bootloader.bin",\
+                        PREFIX_OS"kernel-soclib.bin@0xbfc10000:D",\
+                        PREFIX_OS"arch-info.bib@0xBFC08000:D"
+#endif
+#ifdef USE_GIET
+#define soft_pathname   "scripts/soft/soft.elf"
+#endif
+
+////////////////////////////////////////////////////////////
+//     DEBUG Parameters default values         
+//////////////////////i/////////////////////////////////////
+
+#define MAX_FROZEN_CYCLES     100000000
+
+/////////////////////////////////////////////////////////
+//    Physical segments definition
+/////////////////////////////////////////////////////////
+// There is 3 segments replicated in all clusters
+// and 5 specific segments in the "IO" cluster 
+// (containing address 0xBF000000)
+/////////////////////////////////////////////////////////
+
+#ifdef USE_GIET
+   // specific segments in "IO" cluster : absolute physical address
+   #define BROM_BASE    0x00BFC00000
+   #define BROM_SIZE    0x0000100000   // 1 Mbytes
+
+   #define FBUF_BASE    0x00B2000000
+   #define FBUF_SIZE    (FBUF_X_SIZE * FBUF_Y_SIZE * 2)
+
+   #define BDEV_BASE    0x00B3000000
+   #define BDEV_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MTTY_BASE    0x00B4000000
+   #define MTTY_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MNIC_BASE    0x00B5000000
+   #define MNIC_SIZE    0x0000080000   // 512 Kbytes (for 8 channels)
+
+   #define CDMA_BASE    0x00B6000000
+   #define CDMA_SIZE    0x0000004000 * NB_CMA_CHANNELS
+
+   // replicated segments : address is incremented by a cluster offset
+   //     offset  = cluster(x,y) << (address_width-x_width-y_width);
+
+   #define MEMC_BASE    0x0000000000
+   #define MEMC_SIZE    0x0010000000   // 256 Mbytes per cluster
+
+   #define XICU_BASE    0x00B0000000
+   #define XICU_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MDMA_BASE    0x00B1000000
+   #define MDMA_SIZE    0x0000001000 * NB_DMA_CHANNELS  // 4 Kbytes per channel
+
+   #define SIMH_BASE    0x00B7000000
+   #define SIMH_SIZE    0x0000001000
+#endif
+
+#ifdef USE_ALMOS
+   #define CLUSTER_INC  (0x80000000ULL / (XMAX * YMAX) * 2)
+
+   #define MEMC_BASE    0x0000000000
+   #define MEMC_SIZE    min(0x02000000, (0x80000000 / (XMAX * YMAX)))
+
+   #define BROM_BASE    0x00BFC00000
+   #define BROM_SIZE    0x0000100000   // 1 Mbytes
+
+   #define XICU_BASE    (MEMC_SIZE)
+   #define XICU_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MDMA_BASE    (XICU_BASE + XICU_SIZE)
+   #define MDMA_SIZE    0x0000001000 * NB_DMA_CHANNELS  // 4 Kbytes per channel  
+
+   #define BDEV_BASE    ((cluster_io_id * (CLUSTER_INC)) + MDMA_BASE + MDMA_SIZE)
+   #define BDEV_SIZE    0x0000001000   // 4 Kbytes
+
+   #define MTTY_BASE    (BDEV_BASE + BDEV_SIZE)
+   #define MTTY_SIZE    0x0000001000   // 4 Kbytes
+
+   #define FBUF_BASE    (MTTY_BASE + MTTY_SIZE)
+   #define FBUF_SIZE    (FBUF_X_SIZE * FBUF_Y_SIZE * 2) // Should be 0x80000
+
+   // Unused in almos
+   #define MNIC_BASE    (FBUF_BASE + FBUF_SIZE)
+   #define MNIC_SIZE    0x0000001000
+
+   #define CDMA_BASE    (MNIC_BASE + MNIC_SIZE)
+   #define CDMA_SIZE    0x0000004000 * NB_CMA_CHANNELS
+
+#endif
+
+
+////////////////////////////////////////////////////////////////////
+//     TGTID definition in direct space
+// For all components:  global TGTID = global SRCID = cluster_index
+////////////////////////////////////////////////////////////////////
+
+#define MEMC_TGTID      0
+#define XICU_TGTID      1
+#define MDMA_TGTID      2
+#define MTTY_TGTID      3
+#define FBUF_TGTID      4
+#define BDEV_TGTID      5
+#define MNIC_TGTID      6
+#define BROM_TGTID      7
+#define CDMA_TGTID      8
+#define SIMH_TGTID      9
+
+bool stop_called = false;
+
+/////////////////////////////////
+int _main(int argc, char *argv[])
+{
+   using namespace sc_core;
+   using namespace soclib::caba;
+   using namespace soclib::common;
+
+#ifdef USE_GIET
+   char     soft_name[256]   = soft_pathname;      // pathname to binary code
+#endif
+   uint64_t ncycles          = 0xFFFFFFFFFFFFFFFF; // simulated cycles
+   char     disk_name[256]   = BDEV_IMAGE_NAME;    // pathname to the disk image
+   char     nic_rx_name[256] = NIC_RX_NAME;        // pathname to the rx packets file
+   char     nic_tx_name[256] = NIC_TX_NAME;        // pathname to the tx packets file
+   ssize_t  threads_nr       = 1;                  // simulator's threads number
+   bool     debug_ok         = false;              // trace activated
+   size_t   debug_period     = 1;                  // trace period
+   size_t   debug_memc_id    = 0;                  // index of memc to be traced 
+   size_t   debug_proc_id    = 0;                  // index of proc to be traced
+   uint32_t debug_from       = 0;                  // trace start cycle
+   uint32_t frozen_cycles    = MAX_FROZEN_CYCLES;  // monitoring frozen processor
+   size_t   cluster_io_id;                         // index of cluster containing IOs
+   struct   timeval t1,t2;
+   uint64_t ms1,ms2;
+
+   ////////////// command line arguments //////////////////////
+   if (argc > 1)
+   {
+      for (int n = 1; n < argc; n = n + 2)
+      {
+         if ((strcmp(argv[n], "-NCYCLES") == 0) && (n + 1 < argc))
+         {
+            ncycles = atoi(argv[n + 1]);
+         }
+         else if ((strcmp(argv[n], "-SOFT") == 0) && (n + 1 < argc))
+         {
+#ifdef USE_ALMOS
+            assert( 0 && "Can't define almos soft name" );
+#endif
+#ifdef USE_GIET
+            strcpy(soft_name, argv[n + 1]);
+#endif
+         }
+         else if ((strcmp(argv[n],"-DISK") == 0) && (n + 1 < argc))
+         {
+            strcpy(disk_name, argv[n + 1]);
+         }
+         else if ((strcmp(argv[n],"-DEBUG") == 0) && (n + 1 < argc))
+         {
+            debug_ok = true;
+            debug_from = atoi(argv[n + 1]);
+         }
+         else if ((strcmp(argv[n], "-MEMCID") == 0) && (n + 1 < argc))
+         {
+            debug_memc_id = atoi(argv[n + 1]);
+            assert((debug_memc_id < (XMAX * YMAX)) && 
+                   "debug_memc_id larger than XMAX * YMAX" );
+         }
+         else if ((strcmp(argv[n], "-PROCID") == 0) && (n + 1 < argc))
+         {
+            debug_proc_id = atoi(argv[n + 1]);
+            assert((debug_proc_id < (XMAX * YMAX * NB_PROCS_MAX)) && 
+                   "debug_proc_id larger than XMAX * YMAX * NB_PROCS");
+         }
+         else if ((strcmp(argv[n], "-THREADS") == 0) && ((n + 1) < argc))
+         {
+            threads_nr = atoi(argv[n + 1]);
+            threads_nr = (threads_nr < 1) ? 1 : threads_nr;
+         }
+         else if ((strcmp(argv[n], "-FROZEN") == 0) && (n + 1 < argc))
+         {
+            frozen_cycles = atoi(argv[n + 1]);
+         }
+         else if ((strcmp(argv[n], "-PERIOD") == 0) && (n + 1 < argc))
+         {
+            debug_period = atoi(argv[n + 1]);
+         }
+         else
+         {
+            std::cout << "   Arguments are (key,value) couples." << std::endl;
+            std::cout << "   The order is not important." << std::endl;
+            std::cout << "   Accepted arguments are :" << std::endl << std::endl;
+            std::cout << "     -SOFT pathname_for_embedded_soft" << std::endl;
+            std::cout << "     -DISK pathname_for_disk_image" << std::endl;
+            std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
+            std::cout << "     -DEBUG debug_start_cycle" << std::endl;
+            std::cout << "     -THREADS simulator's threads number" << std::endl;
+            std::cout << "     -FROZEN max_number_of_lines" << std::endl;
+            std::cout << "     -PERIOD number_of_cycles between trace" << std::endl;
+            std::cout << "     -MEMCID index_memc_to_be_traced" << std::endl;
+            std::cout << "     -PROCID index_proc_to_be_traced" << std::endl;
+            exit(0);
+         }
+      }
+   }
+
+    // checking hardware parameters
+    assert( ( (XMAX == 1) or (XMAX == 2) or (XMAX == 4) or
+              (XMAX == 8) or (XMAX == 16) ) and
+              "The XMAX parameter must be 1, 2, 4, 8 or 16" );
+
+    assert( ( (YMAX == 1) or (YMAX == 2) or (YMAX == 4) or
+              (YMAX == 8) or (YMAX == 16) ) and
+              "The YMAX parameter must be 1, 2, 4, 8 or 16" );
+
+    assert( ( (NB_PROCS_MAX == 1) or (NB_PROCS_MAX == 2) or
+              (NB_PROCS_MAX == 4) or (NB_PROCS_MAX == 8) ) and
+             "The NB_PROCS_MAX parameter must be 1, 2, 4 or 8" );
+
+    assert( (NB_DMA_CHANNELS < 9) and
+            "The NB_DMA_CHANNELS parameter must be smaller than 9" );
+
+    assert( (NB_TTY_CHANNELS < 15) and
+            "The NB_TTY_CHANNELS parameter must be smaller than 15" );
+
+    assert( (NB_NIC_CHANNELS < 9) and
+            "The NB_NIC_CHANNELS parameter must be smaller than 9" );
+
+#ifdef USE_GIET
+    assert( (vci_address_width == 40) and
+            "VCI address width with the GIET must be 40 bits" );
+#endif
+
+#ifdef USE_ALMOS
+    assert( (vci_address_width == 32) and
+            "VCI address width with ALMOS must be 32 bits" );
+#endif
+
+
+    std::cout << std::endl;
+    std::cout << " - XMAX             = " << XMAX << std::endl;
+    std::cout << " - YMAX             = " << YMAX << std::endl;
+    std::cout << " - NB_PROCS_MAX     = " << NB_PROCS_MAX <<  std::endl;
+    std::cout << " - NB_DMA_CHANNELS  = " << NB_DMA_CHANNELS <<  std::endl;
+    std::cout << " - NB_TTY_CHANNELS  = " << NB_TTY_CHANNELS <<  std::endl;
+    std::cout << " - NB_NIC_CHANNELS  = " << NB_NIC_CHANNELS <<  std::endl;
+    std::cout << " - MEMC_WAYS        = " << MEMC_WAYS << std::endl;
+    std::cout << " - MEMC_SETS        = " << MEMC_SETS << std::endl;
+    std::cout << " - RAM_LATENCY      = " << XRAM_LATENCY << std::endl;
+    std::cout << " - MAX_FROZEN       = " << frozen_cycles << std::endl;
+    std::cout << "[PROCS] " << NB_PROCS_MAX * XMAX * YMAX << std::endl;
+
+    std::cout << std::endl;
+    // Internal and External VCI parameters definition
+    typedef soclib::caba::VciParams<vci_cell_width_int,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_int;
+
+    typedef soclib::caba::VciParams<vci_cell_width_ext,
+                                    vci_plen_width,
+                                    vci_address_width,
+                                    vci_rerror_width,
+                                    vci_clen_width,
+                                    vci_rflag_width,
+                                    vci_srcid_width,
+                                    vci_pktid_width,
+                                    vci_trdid_width,
+                                    vci_wrplen_width> vci_param_ext;
+
+#if USE_OPENMP
+   omp_set_dynamic(false);
+   omp_set_num_threads(threads_nr);
+   std::cerr << "Built with openmp version " << _OPENMP << std::endl;
+#endif
+
+   // Define parameters depending on mesh size
+   size_t   x_width;
+   size_t   y_width;
+
+   if      (XMAX == 1) x_width = 0;
+   else if (XMAX == 2) x_width = 1;
+   else if (XMAX <= 4) x_width = 2;
+   else if (XMAX <= 8) x_width = 3;
+   else                x_width = 4;
+
+   if      (YMAX == 1) y_width = 0;
+   else if (YMAX == 2) y_width = 1;
+   else if (YMAX <= 4) y_width = 2;
+   else if (YMAX <= 8) y_width = 3;
+   else                y_width = 4;
+
+
+#ifdef USE_ALMOS
+   cluster_io_id = 0xbfc00000 >> (vci_address_width - x_width - y_width); // index of cluster containing IOs
+#else
+   cluster_io_id = 0;
+#endif
+
+   /////////////////////
+   //  Mapping Tables
+   /////////////////////
+
+   // internal network
+   MappingTable maptabd(vci_address_width, 
+                        IntTab(x_width + y_width, 20 - x_width - y_width), 
+                        IntTab(x_width + y_width, vci_srcid_width - x_width - y_width), 
+                        0x00FF800000);
+
+   for (size_t x = 0; x < XMAX; x++)
+   {
+      for (size_t y = 0; y < YMAX; y++)
+      {
+         sc_uint<vci_address_width> offset;
+         offset = (sc_uint<vci_address_width>)cluster(x,y) 
+                   << (vci_address_width-x_width-y_width);
+
+         std::ostringstream    si;
+         si << "seg_xicu_" << x << "_" << y;
+         maptabd.add(Segment(si.str(), XICU_BASE + offset, XICU_SIZE, 
+                  IntTab(cluster(x,y),XICU_TGTID), false));
+
+         std::ostringstream    sd;
+         sd << "seg_mdma_" << x << "_" << y;
+         maptabd.add(Segment(sd.str(), MDMA_BASE + offset, MDMA_SIZE, 
+                  IntTab(cluster(x,y),MDMA_TGTID), false));
+
+         std::ostringstream    sh;
+         sh << "seg_memc_" << x << "_" << y;
+         maptabd.add(Segment(sh.str(), MEMC_BASE + offset, MEMC_SIZE, 
+                  IntTab(cluster(x,y),MEMC_TGTID), true));
+
+         if ( cluster(x,y) == cluster_io_id )
+         {
+            maptabd.add(Segment("seg_mtty", MTTY_BASE, MTTY_SIZE, 
+                        IntTab(cluster(x,y),MTTY_TGTID), false));
+            maptabd.add(Segment("seg_fbuf", FBUF_BASE, FBUF_SIZE, 
+                        IntTab(cluster(x,y),FBUF_TGTID), false));
+            maptabd.add(Segment("seg_bdev", BDEV_BASE, BDEV_SIZE, 
+                        IntTab(cluster(x,y),BDEV_TGTID), false));
+            maptabd.add(Segment("seg_brom", BROM_BASE, BROM_SIZE, 
+                        IntTab(cluster(x,y),BROM_TGTID), true));
+            maptabd.add(Segment("seg_mnic", MNIC_BASE, MNIC_SIZE, 
+                        IntTab(cluster(x,y),MNIC_TGTID), false));
+            maptabd.add(Segment("seg_cdma", CDMA_BASE, CDMA_SIZE, 
+                        IntTab(cluster(x,y),CDMA_TGTID), false));
+            maptabd.add(Segment("seg_simh", SIMH_BASE, SIMH_SIZE, 
+                        IntTab(cluster(x,y),SIMH_TGTID), false));
+         }
+      }
+   }
+   std::cout << maptabd << std::endl;
+
+   // external network
+   MappingTable maptabx(vci_address_width, 
+                        IntTab(x_width+y_width), 
+                        IntTab(x_width+y_width), 
+                        0xFFFF000000ULL);
+
+   for (size_t x = 0; x < XMAX; x++)
+   {
+      for (size_t y = 0; y < YMAX ; y++)
+      { 
+
+         sc_uint<vci_address_width> offset;
+         offset = (sc_uint<vci_address_width>)cluster(x,y) 
+                   << (vci_address_width-x_width-y_width);
+
+         std::ostringstream sh;
+         sh << "x_seg_memc_" << x << "_" << y;
+
+         maptabx.add(Segment(sh.str(), MEMC_BASE + offset, 
+                     MEMC_SIZE, IntTab(cluster(x,y)), false));
+      }
+
+   }
+   std::cout << maptabx << std::endl;
+
+   ////////////////////
+   // Signals
+   ///////////////////
+
+   sc_clock           signal_clk("clk");
+   sc_signal<bool>    signal_resetn("resetn");
+
+   // Horizontal inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>*** signal_dspin_h_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_inc", XMAX-1, YMAX, 3);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_h_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_cmd_dec", XMAX-1, YMAX, 3);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_h_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_inc", XMAX-1, YMAX, 2);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_h_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_dec", XMAX-1, YMAX, 2);
+
+   // Vertical inter-clusters DSPIN signals
+   DspinSignals<dspin_cmd_width>*** signal_dspin_v_cmd_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_inc", XMAX, YMAX-1, 3);
+   DspinSignals<dspin_cmd_width>*** signal_dspin_v_cmd_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_cmd_dec", XMAX, YMAX-1, 3);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_v_rsp_inc =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_inc", XMAX, YMAX-1, 2);
+   DspinSignals<dspin_rsp_width>*** signal_dspin_v_rsp_dec =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_dec", XMAX, YMAX-1, 2);
+
+   // Mesh boundaries DSPIN signals
+   DspinSignals<dspin_cmd_width>**** signal_dspin_false_cmd_in =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_cmd_in" , XMAX, YMAX, 4, 3);
+   DspinSignals<dspin_cmd_width>**** signal_dspin_false_cmd_out =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_cmd_out", XMAX, YMAX, 4, 3);
+   DspinSignals<dspin_rsp_width>**** signal_dspin_false_rsp_in =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_false_rsp_in" , XMAX, YMAX, 4, 2);
+   DspinSignals<dspin_rsp_width>**** signal_dspin_false_rsp_out =
+      alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_false_rsp_out", XMAX, YMAX, 4, 2);
+
+
+   ////////////////////////////
+   //      Loader    
+   ////////////////////////////
+
+   soclib::common::Loader loader(soft_name);
+
+   typedef soclib::common::GdbServer<soclib::common::Mips32ElIss> proc_iss;
+   proc_iss::set_loader(loader);
+
+   ////////////////////////////
+   // Clusters construction
+   ////////////////////////////
+
+   TsarXbarCluster<dspin_cmd_width,
+                   dspin_rsp_width,
+                   vci_param_int,
+                   vci_param_ext>*          clusters[XMAX][YMAX];
+
+#if USE_OPENMP
+#pragma omp parallel
+    {
+#pragma omp for
+#endif
+        for (size_t i = 0; i  < (XMAX * YMAX); i++)
+        {
+            size_t x = i / YMAX;
+            size_t y = i % YMAX;
+
+#if USE_OPENMP
+#pragma omp critical
+            {
+#endif
+            std::cout << std::endl;
+            std::cout << "Cluster_" << x << "_" << y << std::endl;
+            std::cout << std::endl;
+
+            std::ostringstream sc;
+            sc << "cluster_" << x << "_" << y;
+            clusters[x][y] = new TsarXbarCluster<dspin_cmd_width,
+                                                 dspin_rsp_width,
+                                                 vci_param_int,
+                                                 vci_param_ext>
+            (
+                sc.str().c_str(),
+                NB_PROCS_MAX,
+                NB_TTY_CHANNELS,  
+                NB_DMA_CHANNELS, 
+                x,
+                y,
+                cluster(x,y),
+                maptabd,
+                maptabx,
+                x_width,
+                y_width,
+                vci_srcid_width - x_width - y_width,   // l_id width,
+                MEMC_TGTID,
+                XICU_TGTID,
+                MDMA_TGTID,
+                FBUF_TGTID,
+                MTTY_TGTID,
+                BROM_TGTID,
+                MNIC_TGTID,
+                CDMA_TGTID,
+                BDEV_TGTID,
+                SIMH_TGTID,
+                MEMC_WAYS,
+                MEMC_SETS,
+                L1_IWAYS,
+                L1_ISETS,
+                L1_DWAYS,
+                L1_DSETS,
+                XRAM_LATENCY,
+                (cluster(x,y) == cluster_io_id),
+                FBUF_X_SIZE,
+                FBUF_Y_SIZE,
+                disk_name,
+                BDEV_SECTOR_SIZE,
+                NB_NIC_CHANNELS,
+                nic_rx_name,
+                nic_tx_name,
+                NIC_TIMEOUT,
+                NB_CMA_CHANNELS,
+                loader,
+                frozen_cycles,
+                debug_from,
+                debug_ok and (cluster(x,y) == debug_memc_id),
+                debug_ok and (cluster(x,y) == debug_proc_id) 
+            );
+
+#if USE_OPENMP
+            } // end critical
+#endif
+        } // end for
+#if USE_OPENMP
+    }
+#endif
+
+   ///////////////////////////////////////////////////////////////
+   //     Net-list 
+   ///////////////////////////////////////////////////////////////
+
+   // Clock & RESET
+   for (size_t x = 0; x < (XMAX); x++){
+      for (size_t y = 0; y < YMAX; y++){
+         clusters[x][y]->p_clk                         (signal_clk);
+         clusters[x][y]->p_resetn                      (signal_resetn);
+      }
+   }
+
+   // Inter Clusters horizontal connections
+   if (XMAX > 1){
+      for (size_t x = 0; x < (XMAX-1); x++){
+         for (size_t y = 0; y < YMAX; y++){
+            for (size_t k = 0; k < 3; k++){
+               clusters[x][y]->p_cmd_out[EAST][k]      (signal_dspin_h_cmd_inc[x][y][k]);
+               clusters[x+1][y]->p_cmd_in[WEST][k]     (signal_dspin_h_cmd_inc[x][y][k]);
+               clusters[x][y]->p_cmd_in[EAST][k]       (signal_dspin_h_cmd_dec[x][y][k]);
+               clusters[x+1][y]->p_cmd_out[WEST][k]    (signal_dspin_h_cmd_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               clusters[x][y]->p_rsp_out[EAST][k]      (signal_dspin_h_rsp_inc[x][y][k]);
+               clusters[x+1][y]->p_rsp_in[WEST][k]     (signal_dspin_h_rsp_inc[x][y][k]);
+               clusters[x][y]->p_rsp_in[EAST][k]       (signal_dspin_h_rsp_dec[x][y][k]);
+               clusters[x+1][y]->p_rsp_out[WEST][k]    (signal_dspin_h_rsp_dec[x][y][k]);
+            }
+         }
+      }
+   }
+   std::cout << std::endl << "Horizontal connections established" << std::endl;   
+
+   // Inter Clusters vertical connections
+   if (YMAX > 1) {
+      for (size_t y = 0; y < (YMAX-1); y++){
+         for (size_t x = 0; x < XMAX; x++){
+            for (size_t k = 0; k < 3; k++){
+               clusters[x][y]->p_cmd_out[NORTH][k]     (signal_dspin_v_cmd_inc[x][y][k]);
+               clusters[x][y+1]->p_cmd_in[SOUTH][k]    (signal_dspin_v_cmd_inc[x][y][k]);
+               clusters[x][y]->p_cmd_in[NORTH][k]      (signal_dspin_v_cmd_dec[x][y][k]);
+               clusters[x][y+1]->p_cmd_out[SOUTH][k]   (signal_dspin_v_cmd_dec[x][y][k]);
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               clusters[x][y]->p_rsp_out[NORTH][k]     (signal_dspin_v_rsp_inc[x][y][k]);
+               clusters[x][y+1]->p_rsp_in[SOUTH][k]    (signal_dspin_v_rsp_inc[x][y][k]);
+               clusters[x][y]->p_rsp_in[NORTH][k]      (signal_dspin_v_rsp_dec[x][y][k]);
+               clusters[x][y+1]->p_rsp_out[SOUTH][k]   (signal_dspin_v_rsp_dec[x][y][k]);
+            }
+         }
+      }
+   }
+   std::cout << "Vertical connections established" << std::endl;
+
+   // East & West boundary cluster connections
+   for (size_t y = 0; y < YMAX; y++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[0][y]->p_cmd_in[WEST][k]        (signal_dspin_false_cmd_in[0][y][WEST][k]);
+         clusters[0][y]->p_cmd_out[WEST][k]       (signal_dspin_false_cmd_out[0][y][WEST][k]);
+         clusters[XMAX-1][y]->p_cmd_in[EAST][k]   (signal_dspin_false_cmd_in[XMAX-1][y][EAST][k]);
+         clusters[XMAX-1][y]->p_cmd_out[EAST][k]  (signal_dspin_false_cmd_out[XMAX-1][y][EAST][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[0][y]->p_rsp_in[WEST][k]        (signal_dspin_false_rsp_in[0][y][WEST][k]);
+         clusters[0][y]->p_rsp_out[WEST][k]       (signal_dspin_false_rsp_out[0][y][WEST][k]);
+         clusters[XMAX-1][y]->p_rsp_in[EAST][k]   (signal_dspin_false_rsp_in[XMAX-1][y][EAST][k]);
+         clusters[XMAX-1][y]->p_rsp_out[EAST][k]  (signal_dspin_false_rsp_out[XMAX-1][y][EAST][k]);
+      }
+   }
+
+   // North & South boundary clusters connections
+   for (size_t x = 0; x < XMAX; x++)
+   {
+      for (size_t k = 0; k < 3; k++)
+      {
+         clusters[x][0]->p_cmd_in[SOUTH][k]       (signal_dspin_false_cmd_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_cmd_out[SOUTH][k]      (signal_dspin_false_cmd_out[x][0][SOUTH][k]);
+         clusters[x][YMAX-1]->p_cmd_in[NORTH][k]  (signal_dspin_false_cmd_in[x][YMAX-1][NORTH][k]);
+         clusters[x][YMAX-1]->p_cmd_out[NORTH][k] (signal_dspin_false_cmd_out[x][YMAX-1][NORTH][k]);
+      }
+
+      for (size_t k = 0; k < 2; k++)
+      {
+         clusters[x][0]->p_rsp_in[SOUTH][k]       (signal_dspin_false_rsp_in[x][0][SOUTH][k]);
+         clusters[x][0]->p_rsp_out[SOUTH][k]      (signal_dspin_false_rsp_out[x][0][SOUTH][k]);
+         clusters[x][YMAX-1]->p_rsp_in[NORTH][k]  (signal_dspin_false_rsp_in[x][YMAX-1][NORTH][k]);
+         clusters[x][YMAX-1]->p_rsp_out[NORTH][k] (signal_dspin_false_rsp_out[x][YMAX-1][NORTH][k]);
+      }
+   }
+   std::cout << "North, South, West, East connections established" << std::endl;
+   std::cout << std::endl;
+
+
+   ////////////////////////////////////////////////////////
+   //   Simulation
+   ///////////////////////////////////////////////////////
+
+   sc_start(sc_core::sc_time(0, SC_NS));
+   signal_resetn = false;
+
+   // network boundaries signals
+   for (size_t x = 0; x < XMAX ; x++){
+      for (size_t y = 0; y < YMAX ; y++){
+         for (size_t a = 0; a < 4; a++){
+            for (size_t k = 0; k < 3; k++){
+               signal_dspin_false_cmd_in [x][y][a][k].write = false;
+               signal_dspin_false_cmd_in [x][y][a][k].read  = true;
+               signal_dspin_false_cmd_out[x][y][a][k].write = false;
+               signal_dspin_false_cmd_out[x][y][a][k].read  = true;
+            }
+
+            for (size_t k = 0; k < 2; k++){
+               signal_dspin_false_rsp_in [x][y][a][k].write = false;
+               signal_dspin_false_rsp_in [x][y][a][k].read  = true;
+               signal_dspin_false_rsp_out[x][y][a][k].write = false;
+               signal_dspin_false_rsp_out[x][y][a][k].read  = true;
+            }
+         }
+      }
+   }
+
+   sc_start(sc_core::sc_time(1, SC_NS));
+   signal_resetn = true;
+
+   if (gettimeofday(&t1, NULL) != 0) 
+   {
+      perror("gettimeofday");
+      return EXIT_FAILURE;
+   }
+
+   for (uint64_t n = 1; n < ncycles && !stop_called; n++)
+   {
+      // Monitor a specific address for L1 & L2 caches
+      //clusters[0][0]->proc[0]->cache_monitor(0x800002c000ULL);
+      //clusters[1][0]->memc->copies_monitor(0x800002C000ULL);
+
+      if( (n % 5000000) == 0)
+      {
+
+         if (gettimeofday(&t2, NULL) != 0) 
+         {
+            perror("gettimeofday");
+            return EXIT_FAILURE;
+         }
+
+         ms1 = (uint64_t) t1.tv_sec * 1000ULL + (uint64_t) t1.tv_usec / 1000;
+         ms2 = (uint64_t) t2.tv_sec * 1000ULL + (uint64_t) t2.tv_usec / 1000;
+         std::cerr << "platform clock frequency " << (double) 5000000 / (double) (ms2 - ms1) << "Khz" << std::endl;
+
+         if (gettimeofday(&t1, NULL) != 0) 
+         {
+            perror("gettimeofday");
+            return EXIT_FAILURE;
+         }
+      }
+
+      if (debug_ok and (n > debug_from) and (n % debug_period == 0))
+      {
+         std::cout << "****************** cycle " << std::dec << n ;
+         std::cout << " ************************************************" << std::endl;
+
+        // trace proc[debug_proc_id] 
+        size_t l = debug_proc_id % NB_PROCS_MAX ;
+        size_t y = (debug_proc_id / NB_PROCS_MAX) % YMAX ;
+        size_t x = debug_proc_id / (YMAX * NB_PROCS_MAX) ;
+
+        std::ostringstream proc_signame;
+        proc_signame << "[SIG]PROC_" << x << "_" << y << "_" << l ;
+        std::ostringstream p2m_signame;
+        p2m_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " P2M" ;
+        std::ostringstream m2p_signame;
+        m2p_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " M2P" ;
+        std::ostringstream p_cmd_signame;
+        p_cmd_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " CMD" ;
+        std::ostringstream p_rsp_signame;
+        p_rsp_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " RSP" ;
+
+        for (int _x = 0, _y = 0; _x != XMAX; (_y == YMAX - 1 ? _x++, _y = 0 : _y++)) {
+           for (int _l = 0; _l < NB_PROCS_MAX; _l++) {
+              clusters[_x][_y]->proc[_l]->print_trace();
+           }
+        }
+        //clusters[x][y]->wi_proc[l]->print_trace();
+        //clusters[x][y]->signal_vci_ini_proc[l].print_trace(proc_signame.str());
+        //clusters[x][y]->signal_dspin_p2m_proc[l].print_trace(p2m_signame.str());
+        //clusters[x][y]->signal_dspin_m2p_proc[l].print_trace(m2p_signame.str());
+        //clusters[x][y]->signal_dspin_cmd_proc_i[l].print_trace(p_cmd_signame.str());
+        //clusters[x][y]->signal_dspin_rsp_proc_i[l].print_trace(p_rsp_signame.str());
+
+        //clusters[x][y]->xbar_rsp_d->print_trace();
+        //clusters[x][y]->xbar_cmd_d->print_trace();
+        //clusters[x][y]->signal_dspin_cmd_l2g_d.print_trace("[SIG]L2G CMD");
+        //clusters[x][y]->signal_dspin_cmd_g2l_d.print_trace("[SIG]G2L CMD");
+        //clusters[x][y]->signal_dspin_rsp_l2g_d.print_trace("[SIG]L2G RSP");
+        //clusters[x][y]->signal_dspin_rsp_g2l_d.print_trace("[SIG]G2L RSP");
+
+        // trace memc[debug_memc_id] 
+        x = debug_memc_id / YMAX;
+        y = debug_memc_id % YMAX;
+
+        std::ostringstream smemc;
+        smemc << "[SIG]MEMC_" << x << "_" << y;
+        std::ostringstream sxram;
+        sxram << "[SIG]XRAM_" << x << "_" << y;
+        std::ostringstream sm2p;
+        sm2p << "[SIG]MEMC_" << x << "_" << y << " M2P" ;
+        std::ostringstream sp2m;
+        sp2m << "[SIG]MEMC_" << x << "_" << y << " P2M" ;
+        std::ostringstream m_cmd_signame;
+        m_cmd_signame << "[SIG]MEMC_" << x << "_" << y <<  " CMD" ;
+        std::ostringstream m_rsp_signame;
+        m_rsp_signame << "[SIG]MEMC_" << x << "_" << y <<  " RSP" ;
+
+        clusters[x][y]->memc->print_trace();
+        //clusters[x][y]->wt_memc->print_trace();
+        //clusters[x][y]->signal_vci_tgt_memc.print_trace(smemc.str());
+        //clusters[x][y]->signal_vci_xram.print_trace(sxram.str());
+        //clusters[x][y]->signal_dspin_p2m_memc.print_trace(sp2m.str());
+        //clusters[x][y]->signal_dspin_m2p_memc.print_trace(sm2p.str());
+        //clusters[x][y]->signal_dspin_cmd_memc_t.print_trace(m_cmd_signame.str());
+        //clusters[x][y]->signal_dspin_rsp_memc_t.print_trace(m_rsp_signame.str());
+        
+        // trace replicated peripherals
+        //clusters[1][1]->mdma->print_trace();
+        //clusters[1][1]->signal_vci_tgt_mdma.print_trace("[SIG]MDMA_TGT_1_1");
+        //clusters[1][1]->signal_vci_ini_mdma.print_trace("[SIG]MDMA_INI_1_1");
+        
+
+        // trace external peripherals
+        //size_t io_x   = cluster_io_id / YMAX;
+        //size_t io_y   = cluster_io_id % YMAX;
+        
+        //clusters[io_x][io_y]->brom->print_trace();
+        //clusters[io_x][io_y]->wt_brom->print_trace();
+        //clusters[io_x][io_y]->signal_vci_tgt_brom.print_trace("[SIG]BROM");
+        //clusters[io_x][io_y]->signal_dspin_cmd_brom_t.print_trace("[SIG]BROM CMD");
+        //clusters[io_x][io_y]->signal_dspin_rsp_brom_t.print_trace("[SIG]BROM RSP");
+
+        //clusters[io_x][io_y]->bdev->print_trace();
+        //clusters[io_x][io_y]->signal_vci_tgt_bdev.print_trace("[SIG]BDEV_TGT");
+        //clusters[io_x][io_y]->signal_vci_ini_bdev.print_trace("[SIG]BDEV_INI");
+      }
+
+      sc_start(sc_core::sc_time(1, SC_NS));
+   }
+
+   
+   // Free memory
+   for (size_t i = 0; i  < (XMAX * YMAX); i++)
+   {
+      size_t x = i / YMAX;
+      size_t y = i % YMAX;
+      delete clusters[x][y];
+   }
+
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_h_cmd_inc, XMAX - 1, YMAX, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_h_cmd_dec, XMAX - 1, YMAX, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_h_rsp_inc, XMAX - 1, YMAX, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_h_rsp_dec, XMAX - 1, YMAX, 2);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_v_cmd_inc, XMAX, YMAX - 1, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_v_cmd_dec, XMAX, YMAX - 1, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_v_rsp_inc, XMAX, YMAX - 1, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_v_rsp_dec, XMAX, YMAX - 1, 2);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_false_cmd_in, XMAX, YMAX, 4, 3);
+   dealloc_elems<DspinSignals<dspin_cmd_width> >(signal_dspin_false_cmd_out, XMAX, YMAX, 4, 3);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_false_rsp_in, XMAX, YMAX, 4, 2);
+   dealloc_elems<DspinSignals<dspin_rsp_width> >(signal_dspin_false_rsp_out, XMAX, YMAX, 4, 2);
+
+   return EXIT_SUCCESS;
+}
+
+
+void handler(int dummy = 0) {
+   stop_called = true;
+   sc_stop();
+}
+
+void voidhandler(int dummy = 0) {}
+
+int sc_main (int argc, char *argv[])
+{
+   signal(SIGINT, handler);
+   signal(SIGPIPE, voidhandler);
+
+   try {
+      return _main(argc, argv);
+   } catch (std::exception &e) {
+      std::cout << e.what() << std::endl;
+   } catch (...) {
+      std::cout << "Unknown exception occured" << std::endl;
+      throw;
+   }
+   return 1;
+}
+
+
+// Local Variables:
+// tab-width: 3
+// c-basic-offset: 3
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
Index: /branches/fault_tolerance/softs/test_llsc/top.desc
===================================================================
--- /branches/fault_tolerance/softs/test_llsc/top.desc	(revision 724)
+++ /branches/fault_tolerance/softs/test_llsc/top.desc	(revision 724)
@@ -0,0 +1,46 @@
+
+# -*- python -*-
+
+# internal VCI parameters values
+vci_cell_size_int   = 4
+vci_cell_size_ext   = 8
+
+vci_plen_size       = 8
+vci_addr_size       = 40
+vci_rerror_size     = 1
+vci_clen_size       = 1
+vci_rflag_size      = 1
+vci_srcid_size      = 14
+vci_pktid_size      = 4
+vci_trdid_size      = 4
+vci_wrplen_size     = 1
+
+# DSPIN network parameters values
+dspin_cmd_flit_size     = 39
+dspin_rsp_flit_size     = 32
+
+todo = Platform('caba', 'top.cpp',
+
+   uses = [
+            Uses('caba:tsar_xbar_cluster', 
+                  vci_data_width_int = vci_cell_size_int,
+                  vci_data_width_ext = vci_cell_size_ext,
+                  dspin_cmd_width    = dspin_cmd_flit_size,
+                  dspin_rsp_width    = dspin_rsp_flit_size),
+
+            Uses('common:elf_file_loader'),
+            Uses('common:plain_file_loader'),
+           ],
+
+   # default VCI parameters (global variables)
+   cell_size   = vci_cell_size_int,  
+	plen_size   = vci_plen_size,
+	addr_size   = vci_addr_size,
+	rerror_size = vci_rerror_size,
+	clen_size   = vci_clen_size,
+	rflag_size  = vci_rflag_size,
+	srcid_size  = vci_srcid_size,
+	pktid_size  = vci_pktid_size,
+	trdid_size  = vci_trdid_size,
+	wrplen_size = vci_wrplen_size,
+)
Index: /branches/fault_tolerance/softs/tests_cc_vcache/Makefile.inc
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/Makefile.inc	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/Makefile.inc	(revision 724)
@@ -0,0 +1,27 @@
+all: test.elf
+
+COMMON= ../common
+LDSCRIPT?= ../common/ldscript
+
+CC= mipsel-unknown-elf-gcc
+LD= mipsel-unknown-elf-ld
+DU= mipsel-unknown-elf-objdump
+
+CFLAGS= -mips32 -nostdinc -I. -I${COMMON} -mno-abicalls
+### LDFLAGS=-mips32 -nostdlib -Wl,-T${LDSCRIPT} -Ttext=0xbfc00000
+
+#### object files generation
+test.o: test.S 
+	${CC} ${CFLAGS} -c -o $@ $<
+	${DU} -D $@ > $@.txt
+
+subr.o: ${COMMON}/subr.S
+	${CC} ${CFLAGS} -c -o $@ $<
+	${DU} -D $@ > $@.txt
+
+### linking : test.o has to be the first object 
+test.elf: test.o subr.o ${EXTRA_OBJ}
+	${LD} -o $@ -T ${LDSCRIPT} -Ttext 0xbfc00000 $^
+	${DU} -D $@ > $@.txt
+clean:
+	rm -f *.o test.elf *.txt run.out temp
Index: /branches/fault_tolerance/softs/tests_cc_vcache/README
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/README	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/README	(revision 724)
@@ -0,0 +1,46 @@
+This is a very basic framework for running regression tests against
+a mips32+ccvcache TSAR platform. Here's the layout of this directory:
+
+../../../platforms/tsarv4_mono_mmu
+	contains the soclib platform description and simulation executable.
+	It should be compiled before starting tests.
+	it uses the vci_simhelper component, used to stop the simulation
+	with an exit value.  The framework uses this exit status
+	(with other things, see below) to determine if a test
+	is successfull. The simulator will exit with a non-0 exit status
+	after 100000 cycles (and a message to stderr), so the tests are
+	expected to be simple.
+	The platform has a tty, which is redirected to a file along with
+	the simlulator's output. The test framework may search for specific
+	strings in this file to determine if a test was successfull.
+common/
+	Some common functions, ldscripts, etc ... used by the tests.
+	It has a subr.S which holds usefull subroutines, such as
+	print() and printx().
+Makefile.inc
+	included from the test's Makefiles. Basic stuff to compile a
+	mips32 ELF executable for a test. It expects a test.S,
+	add the subr.S from common and eventually additionnal object
+	files.
+test_*/
+	these directories holds the test themselves. They have a run
+	script which does what is needed to compile and run a test,
+	print "test failed" or "test passed" on stdout, and clean the
+	directory if it's successfull. A sample script will call
+	make, then run the simulator with srdout/stderr redirected
+	to a file. If the simulator exists with a 0 status, this
+	script search for some strings in the output (that the
+	test program would have printed). This is an additionnal way
+	to check that all worked properly.
+	Tests are written in assembly; as we're testing for very specific
+	conditions (such as an instruction in a branch's delay slot on
+	a page boundary), we don't want the compiler to optimise things
+	or otherwise reorder instructions.
+	If the test was successfull, the 'run' script cleanups the
+	directory. Otherwise the 'run.out' file is available to
+	start looking at what's wrong.
+run_tests
+	runs all the test_*/run scripts - the goal being that
+	all of them print "test passsed" :). Directories are explicitely
+	listed in the run_tests script (order does matter to have a readable
+	output)
Index: /branches/fault_tolerance/softs/tests_cc_vcache/common/common.sh
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/common/common.sh	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/common/common.sh	(revision 724)
@@ -0,0 +1,3 @@
+SIMUL=../../../platforms/tsar_mono_mmu/simul.x
+
+#SIMUL=../../../../soclib-svn-june-2009/soclib/soclib/platform/topcells/caba_vgsb_almo_mmu/simul.x
Index: /branches/fault_tolerance/softs/tests_cc_vcache/common/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/common/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/common/ldscript	(revision 724)
@@ -0,0 +1,65 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/common/misc.h
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/common/misc.h	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/common/misc.h	(revision 724)
@@ -0,0 +1,56 @@
+/* multi-tty definitions */
+#define TTY_BASE 0xd0200000
+#define TTY_WRITE  0
+#define TTY_STATUS 1
+#define TTY_READ 2
+
+/* vci_exit definitions */
+#define EXIT_BASE 0xe0000000
+
+#define BOOT_ADDRESS 0xbfc00000
+#define EXCEP_ADDRESS 0xbfc00380
+
+/* vci dma */
+#define DMA_BASE 	0xe8000000
+#define DMA_SRC  	0
+#define DMA_DST  	4
+#define DMA_LEN  	8
+#define DMA_RESET	12
+
+/* cop0 definitions */
+#define COP_0_BADVADDR	$8
+#define COP0_STATUS	$12
+#define COP0_CAUSE	$13
+#define COP0_EXPC	$14
+
+/* easy print macros */
+#define PRINT(str) \
+        la      a0, str;\
+	jal     print; \
+	nop
+
+#define PRINT_SYNC(str) \
+        la      a0, str;\
+	jal     print_sync; \
+	nop
+
+
+
+#define PRINTX \
+	jal     printx;\
+	nop
+
+#define PUTCHAR(c) li a0, c; sb a0, 0(k0)
+
+#define EXIT(a) \
+	li a0, a; \
+	sw a0, 4(k1); \
+	1:      j 1b; \
+	nop
+
+/* some magic numers to test */
+#define MAGIC1	0xdead
+#define MAGIC2	0xbeef
+#define MAGIC3	0x900d
+#define MAGIC4	0xf00d
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/common/registers.h
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/common/registers.h	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/common/registers.h	(revision 724)
@@ -0,0 +1,32 @@
+#define zero	$0
+#define at	$at
+#define v0	$2
+#define v1	$3
+#define a0	$4
+#define a1	$5
+#define a2	$6
+#define a3	$7
+#define t0	$8
+#define t1	$9
+#define t2	$10
+#define t3	$11
+#define t4	$12
+#define t5	$13
+#define t6	$14
+#define t7	$15
+#define s0	$16
+#define s1	$17
+#define s2	$18
+#define s3	$19
+#define s4	$20
+#define s5	$21
+#define s6	$22
+#define s7	$23
+#define t8	$24
+#define t9	$25
+#define k0	$26
+#define k1	$27
+#define gp	$28
+#define sp	$29
+#define fp	$30
+#define ra	$31
Index: /branches/fault_tolerance/softs/tests_cc_vcache/common/subr.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/common/subr.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/common/subr.S	(revision 724)
@@ -0,0 +1,78 @@
+#include <registers.h>
+/* test common subroutines
+
+	.text
+/*
+ * void print(char *): print a string to the multitty.
+ * assumes k0 points to the tty base.
+ */
+	.globl print
+print:
+	.set noreorder
+	move	t0, a0
+1:
+	lb	t1, 0(t0);
+	beq	t1, zero, end
+	nop
+	sb	t1, 0(k0)
+	addiu	t0, t0, 1
+	j	1b
+	nop
+end:
+	jr	ra
+	nop
+
+/*
+ * void print_sync(char *): print a string to the multitty with a sync instruction for each character.
+ * assumes k0 points to the tty base.
+ */
+	.globl print_sync
+print_sync:
+	.set noreorder
+	move	t0, a0
+1:
+	lb	t1, 0(t0);
+	beq	t1, zero, end_print_sync
+	nop
+	sb	t1, 0(k0)
+    sync
+	addiu	t0, t0, 1
+	j	1b
+	nop
+end_print_sync:
+	jr	ra
+	nop
+
+
+/*
+ * void printx(uint32_t): print a number in hex to the multitty
+ * assumes points to the tty base.
+ */
+	.globl printx
+printx:
+	.set noreorder
+	move	t0, a0
+	li	t1, '0'
+	sb	t1, 0(k0)
+	li	t1, 'x'
+	sb	t1, 0(k0)
+	li	t1, 8
+1:
+	lui	t2, 0xf000;
+	and	t2, t0, t2
+	srl	t2, t2, 28
+	slti	t3, t2, 0xa
+	beq	t3, zero, 2f /* in range A-F */
+	nop
+	addi	t2, t2, '0'
+	j	3f
+	nop
+2:
+	addi    t2, t2, 'A' - 0xa
+3:
+	sb      t2, 0(k0)
+	addi	t1, t1, -1
+	bgtz	t1, 1b
+	sll	t0, t0, 4
+	jr	ra
+	nop
Index: /branches/fault_tolerance/softs/tests_cc_vcache/common/vcache.h
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/common/vcache.h	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/common/vcache.h	(revision 724)
@@ -0,0 +1,66 @@
+/* cop2/vcache definitions */
+#define VC_PTPR			$0 		/* set Page Table Pointer Register */
+#define VC_TLB_EN		$1 		/* set Data & Inst TLBs Mode Register */
+#define	  VC_TLB_EN_ITLB		0x8 	/* enable instruction TLB */
+#define	  VC_TLB_EN_DTLB		0x4 	/* enable data TLB */
+#define	  VC_TLB_EN_ICACHE		0x2 	/* enable instruction cache */
+#define	  VC_TLB_EN_DCACHE		0x1 	/* enable data cache */
+#define VC_ICACHE_FLUSH 	$2 		/* Instruction Cache flush */
+#define VC_DCACHE_FLUSH 	$3 		/* Data Cache flush */
+#define VC_ITLB_INVAL		$4 		/* Instruction TLB line invalidate */
+#define VC_DTLB_INVAL		$5 		/* Data TLB line invalidate */
+#define VC_ICACHE_INVAL 	$6 		/* Instruction Cache line invalidate */
+#define VC_DCACHE_INVAL 	$7 		/* Data Cache line invalidate */
+#define VC_ICACHE_PREFETCH 	$8 		/* Instruction Cache line prefetch */
+#define VC_DCACHE_PREFETCH 	$9 		/* Data Cache line prefetch */
+#define VC_SYNC			$10 		/* Complete pending writes */
+#define VC_IERR_TYPE		$11 		/* Instruction Exception type Register */
+#define VC_DERR_TYPE		$12 		/* Data Exception type Register */
+#define VC_DATA_LO		$17 		/* misc register low */
+#define VC_DATA_HI		$18 		/* misc register hight */
+#define VC_ICACHE_INVAL_PA 	$19 		/* misc register hight */
+#define VC_DCACHE_INVAL_PA 	$20 		/* misc register hight */
+#define	  VC_ERR_PT1_UNMAPPED		0x001 	/* Page fault on Table1 (invalid PTE) */
+#define	  VC_ERR_PT2_UNMAPPED		0x002 	/* Page fault on Table 2 (invalid PTE) */
+#define	  VC_ERR_PRIVILEGE_VIOLATION	0x004 	/* Protected access in user mode */
+#define	  VC_ERR_WRITE_VIOLATION	0x008 	/* Write access to a non write page */
+#define	  VC_ERR_EXEC_VIOLATION		0x010 	/* Exec access to a non exec page */
+#define	  VC_ERR_UNDEFINED_XTN		0x020 	/* Undefined external access address */
+#define	  VC_ERR_PT1_ILLEGAL_ACCESS	0x040 	/* Bus Error in Table1 access */
+#define	  VC_ERR_PT2_ILLEGAL_ACCESS	0x080 	/* Bus Error in Table2 access */
+#define	  VC_ERR_CACHE_ILLEGAL_ACCESS	0x100 	/* Bus Error during the cache access */
+#define VC_I_BAD_VADDR		$13 		/* Instruction Bad Virtual Address Register */
+#define VC_D_BAD_VADDR		$14 		/* Data Bad Virtual Address Register */
+#define VC_DATA_L		$17 		/* cache parameters */
+#define VC_DATA_H		$18 		/* cache parameters */
+#define VC_ICACHE_INVAL_PA	$19 		/* icache inval per physical address */
+#define VC_DCACHE_INVAL_PA	$20 		/* dcache inval per physical address */
+
+/* vcache page level 1 format */
+#define PTE1_V  (1 << 31)       		/* entry valid */
+#define PTE1_T  (1 << 30)       		/* 0 == entry is a PTE1 (maps a 2M page) */
+#define PTE1_L  (1 << 29)       		/* accessed by local CPU */
+#define PTE1_R  (1 << 28)       		/* accessed by remote CPU */
+#define PTE1_C  (1 << 27)       		/* cachable */
+#define PTE1_W  (1 << 26)       		/* writable */
+#define PTE1_X  (1 << 25)       		/* executable */
+#define PTE1_U  (1 << 24)       		/* user-accessible */
+#define PTE1_G  (1 << 23)       		/* global */
+#define PTE1_D  (1 << 22)       		/* dirty */
+
+/* vcache page level 2 format: same as level 1, PTE1_T  */
+#define PTE2_V  (1 << 31)       		/* entry valid */
+						/* reserved, 0 */
+#define PTE2_L  (1 << 29)       		/* accessed by local CPU */
+#define PTE2_R  (1 << 28)       		/* accessed by remote CPU */
+#define PTE2_C  (1 << 27)       		/* cachable */
+#define PTE2_W  (1 << 26)       		/* writable */
+#define PTE2_X  (1 << 25)       		/* executable */
+#define PTE2_U  (1 << 24)       		/* user-accessible */
+#define PTE2_G  (1 << 23)       		/* global */
+#define PTE2_D  (1 << 22)       		/* dirty */
+#define PTE2_os 0xff				/* OS-reserved bits */
+
+#define PTE2_SHIFT 	12
+#define PTE2_MASK 	0x0001ff000
+#define VADDR_TO_PTE2I(va) (((va) & PTE2_MASK) >> PTE2_SHIFT)
Index: /branches/fault_tolerance/softs/tests_cc_vcache/common/xicu.h
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/common/xicu.h	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/common/xicu.h	(revision 724)
@@ -0,0 +1,96 @@
+#define XICU_BASE 0xd8200000
+#define __XICU_FUNC_SHIFT 7
+#define __XICU_IDX_SHIFT 2
+#define __XICU_RIDX(func, idx) \
+    ((((func) & 0x1f) << __XICU_FUNC_SHIFT) + \
+     (((idx) & 0x1f) << __XICU_IDX_SHIFT))
+
+/* triggers the wtiidx interrupt. R/W */
+#define XICU_WTI_REG_FUNC 0x00
+#define XICU_WTI_REG(wtiidx) __XICU_RIDX(XICU_WTI_REG_FUNC, wtiidx)
+
+/* Timer period R/W */
+#define XICU_PTI_PER_FUNC 0x01
+#define XICU_PTI_PER(ptiidx) __XICU_RIDX(XICU_PTI_PER_FUNC, ptiidx)
+
+/* timer value R/W */
+#define XICU_PTI_VAL_FUNC 0x02
+#define XICU_PTI_VAL(ptiidx) __XICU_RIDX(XICU_PTI_VAL_FUNC, ptiidx)
+
+/* Timer interrupt acknowledge. R */
+#define XICU_PTI_ACK_FUNC 0x03
+#define XICU_PTI_ACK(ptiidx) __XICU_RIDX(XICU_PTI_ACK_FUNC, ptiidx)
+
+/*
+ * remaining registers define the way interrupt sources are mutiplexed to
+ * the output lines. Indexed by output line number.
+ */
+/*
+ * Multiplex timers to output lines:
+ * XICU_MSK_PTI mask register for outidx line (bit to 1 enable interrupt)
+ * XICU_MSK_PTI_E atomically add a set of bits to XICU_MSK_PTI
+ * XICU_MSK_PTI_D atomically clear a set of bits from XICU_MSK_PTI
+ * XICU_PTI_ACT get active PTI lines for this output line
+ */
+#define XICU_MSK_PTI_FUNC 0x04 /* R/W */
+#define XICU_MSK_PTI(outidx) __XICU_RIDX(XICU_MSK_PTI_FUNC, outidx)
+
+#define XICU_MSK_PTI_E_FUNC 0x05 /* W */
+#define XICU_MSK_PTI_E(outidx) __XICU_RIDX(XICU_MSK_PTI_E_FUNC, outidx)
+
+#define XICU_MSK_PTI_D_FUNC 0x06 /* W */
+#define XICU_MSK_PTI_D(outidx) __XICU_RIDX(XICU_MSK_PTI_D_FUNC, outidx)
+
+#define XICU_PTI_ACT_FUNC 0x06 /* R */
+#define XICU_PTI_ACT(outidx) __XICU_RIDX(XICU_PTI_ACT_FUNC, outidx)
+
+/*
+ * Multiplex hardware input lines to output lines:
+ * XICU_MSK_HWI mask register for outidx line (bit to 1 enable interrupt)
+ * XICU_MSK_HWI_E atomically add a set of bits to XICU_MSK_HWI
+ * XICU_MSK_HWI_D atomically clear a set of bits from XICU_MSK_HWI
+ * XICU_HWI_ACT get active HWI lines for this output line
+ */
+#define XICU_MSK_HWI_FUNC 0x08 /* R/W */
+#define XICU_MSK_HWI(outidx) __XICU_RIDX(XICU_MSK_HWI_FUNC, outidx)
+
+#define XICU_MSK_HWI_E_FUNC 0x09 /* W */
+#define XICU_MSK_HWI_E(outidx) __XICU_RIDX(XICU_MSK_HWI_E_FUNC, outidx)
+
+#define XICU_MSK_HWI_D_FUNC 0x0a /* W */
+#define XICU_MSK_HWI_D(outidx) __XICU_RIDX(XICU_MSK_HWI_D_FUNC, outidx)
+
+#define XICU_HWI_ACT_FUNC 0x0a /* R */
+#define XICU_HWI_ACT(outidx) __XICU_RIDX(XICU_HWI_ACT_FUNC, outidx)
+
+/*
+ * Multiplex hardware input lines to output lines:
+ * XICU_MSK_WTI mask register for outidx line (bit to 1 enable interrupt)
+ * XICU_MSK_WTI_E atomically add a set of bits to XICU_MSK_WTI
+ * XICU_MSK_WTI_D atomically clear a set of bits from XICU_MSK_WTI
+ * XICU_WTI_ACT get active WTI lines for this output line
+ */
+#define XICU_MSK_WTI_FUNC 0x0c /* R/W */
+#define XICU_MSK_WTI(outidx) __XICU_RIDX(XICU_MSK_WTI_FUNC, outidx)
+
+#define XICU_MSK_WTI_E_FUNC 0x0d /* W */
+#define XICU_MSK_WTI_E(outidx) __XICU_RIDX(XICU_MSK_WTI_E_FUNC, outidx)
+
+#define XICU_MSK_WTI_D_FUNC 0x0e /* W */
+#define XICU_MSK_WTI_D(outidx) __XICU_RIDX(XICU_MSK_WTI_D_FUNC, outidx)
+
+#define XICU_WTI_ACT_FUNC 0x0e /* R */
+#define XICU_WTI_ACT(outidx) __XICU_RIDX(XICU_WTI_ACT_FUNC, outidx)
+
+/* source priority encoder for outpout lines */
+#define XICU_PRIO_FUNC 0x0f
+#define XICU_PRIO(outidx) __XICU_RIDX(XICU_PRIO_FUNC, outidx)
+
+#define XICU_PRIO_PTI 0x00000001 /* Timer interrrupt pending */
+#define XICU_PRIO_PTII(val) ((val) >> 8 & 0x1f) /* first PTI pending */
+#define XICU_PRIO_HWI 0x00000002 /* Hardware interrrupt pending */
+#define XICU_PRIO_HWII(val) ((val) >> 16 & 0x1f) /* first HWI pending */
+#define XICU_PRIO_WTI 0x00000004 /* write-triggered interrrupt pending */
+#define XICU_PRIO_WTII(val) ((val) >> 24 & 0x1f) /* first WTI pending */
+
+#define XICU_PRIO_PENDING (XICU_PRIO_PTI|XICU_PRIO_HWI|XICU_PRIO_WTI)
Index: /branches/fault_tolerance/softs/tests_cc_vcache/run_tests
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/run_tests	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/run_tests	(revision 724)
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+PATH=${PATH}:/dsk/l1/misc/bouyer/tmp/tsarmips/obj/netbsd-5/tooldir/bin
+export PATH
+SOCLIB_TTY=TERM
+export SOCLIB_TTY
+
+for dir in test_sanity test_exceptions test_mmu_basic \
+   test_excep_ls test_excep_ls_delayslot test_excep_ls_llsc \
+   test_excep_if test_excep_if_delayslot test_excep_if_llsc \
+   test_exception_epc_modify	\
+   test_dtlb_inval test_dtlb_inval2 test_dtlb_inval3 \
+   test_itlb_inval test_itlb_inval2 \
+   test_idtlb_inval test_idtlb_inval2 test_idtlb_inval3 test_idtlb_inval4 \
+   test_dtlb_ptprinval test_itlb_ptprinval test_idtlb_ptprinval \
+   test_sync \
+   test_llsc test_sc_no_ll test_sc_update_cache test_pte_llsc \
+   test_interrupt \
+   test_interrupt_epc_modify \
+   test_xicu_timer \
+   test_interrupt_delayslot \
+   test_interrupt_mask \
+   test_interrupt_external_mask \
+   test_excep_cop test_excep_cop_delayslot test_excep_cop1 \
+   test_syscall test_syscall_delayslot \
+   test_breakpoint test_breakpoint_delayslot \
+   test_ri test_ri_delayslot \
+   test_ao test_ao_delayslot \
+   test_trap test_trap_delayslot \
+   test_dcache_inval_pa test_icache_inval_pa \
+   test_pte2i_ref test_pte2lw_ref test_pte2ll_ref test_pte2sw_dirty test_pte2sc_dirty \
+   test_dma_basic test_dma_unaligned \
+   ; do
+	echo -n ${dir}": "
+	(cd $dir && ./run)
+done
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x00000030 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ao/test.S	(revision 724)
@@ -0,0 +1,63 @@
+/*
+ * arithmetic overflow test: check that a add can generates an exception
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	la	a0, 0x7fffffff
+	li	a1, 0x02
+	add	a0, a0, a1
+	EXIT(2)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+#we should end there
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x80000030 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ao_delayslot/test.S	(revision 724)
@@ -0,0 +1,84 @@
+/*
+ * arithmetic overflow test: check that a overflow in a delay slot is
+ * properly handled
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	la	a0, 0x7fffffff
+	li	a1, 0x02
+	j	exit
+	add	a0, a0, a1
+	/* we should not get there, */
+	EXIT(2)
+	.globl exit
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, exit
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x00000024 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint/test.S	(revision 724)
@@ -0,0 +1,86 @@
+/*
+ * breakpoint test: check that a breakpoint generates an exception, and we can
+ * return 
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	break
+	bne a3, zero, exit
+	nop
+	/* we should not get there, a3 is not 0 */
+	EXIT(2)
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	mfc0	a0, COP0_EXPC
+	addiu	a0, a0, 4
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x80000024 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_breakpoint_delayslot/test.S	(revision 724)
@@ -0,0 +1,85 @@
+/*
+ * breakpoint test: check that a breakpoint in a delay slot is properly handled
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	j	exit
+	break
+	nop
+	/* we should not get there, */
+	EXIT(2)
+	.globl exit
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, exit
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/run	(revision 724)
@@ -0,0 +1,38 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started before DMA 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^mmu started after DMA 0x0000F00D$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^mmu started after FLUSH 0x0000F00D$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 3 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dcache_inval_pa/test.S	(revision 724)
@@ -0,0 +1,136 @@
+/*
+ * cache inval test: check that VC_DCACHE_INVAL_PA does the job
+ * on a cc_vcache, the cache invalidation/update should be done by hardware
+ * and VC_DCACHE_INVAL_PA should not be needed.
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr_a)
+	la	t0, testval
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR('\n')
+	la	a1, DMA_BASE
+	la	a0, testval2
+	sw	a0, DMA_SRC(a1)
+	la	a0, testval
+	sw	a0, DMA_DST(a1)
+	li	a0, 4
+	sw	a0, DMA_LEN(a1) /* start DMA */
+loop:
+	lw	a0, DMA_LEN(a1)
+	bne	a0, zero, loop;
+	nop
+
+	PRINT(mmustr_b)
+	la	t0, testval
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR('\n')
+
+	la      a0, testval
+	mtc2	a0, VC_DATA_LO
+	mtc2	zero, VC_DATA_HI
+	mtc2	zero, VC_DCACHE_INVAL_PA
+	nop
+
+	PRINT(mmustr_c)
+	la	t0, testval
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(3)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr_a: .ascii "mmu started before DMA \0"
+mmustr_b: .ascii "mmu started after DMA \0"
+mmustr_c: .ascii "mmu started after FLUSH \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+data_b:
+	.word MAGIC3
+testval2:
+	.word MAGIC4
+	.globl pte2_a
+
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x2000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + (DMA_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (DMA_BASE >> 21) /* map PA 0xe8000000 at VA 0xe0000000 */
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^after DMA 0x0000F00D 0x0000F00D 0x0000BEEF 0x0000DEAD 0x0000DEAD$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_basic/test.S	(revision 724)
@@ -0,0 +1,135 @@
+/*
+ * basic DMA check: check that the DMA engine works and and doens't
+ * clobbers memory
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(mmustr_a)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	t0, testval
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, testval2
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR('\n')
+	la	t0, testval
+	la	t1, testval3
+	lw 	a0, 0(t0);
+	sw	a0, 0(t1)
+
+	la	a1, DMA_BASE
+	la	a0, tstsrc
+	sw	a0, DMA_SRC(a1)
+	la	a0, tstdst
+	sw	a0, DMA_DST(a1)
+	la	a0, 0x18
+	sw	a0, DMA_LEN(a1) /* start DMA */
+loop:
+	lw	a0, DMA_LEN(a1)
+	bne	a0, zero, loop;
+	nop
+	sw	a0, DMA_RESET(a1) /* reset DMA */
+
+	la	a0, testval2
+	sw	a0, DMA_SRC(a1)
+	la	a0, testval 
+	sw	a0, DMA_DST(a1)
+	la	a0, 0x4
+	sw	a0, DMA_LEN(a1) /* start DMA */
+loop2:
+	lw	a0, DMA_LEN(a1)
+	bne	a0, zero, loop2;
+	nop
+	sw	a0, DMA_RESET(a1) /* reset DMA */
+
+	PRINT(mmustr_b)
+	la	t0, testval
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, testval2
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, testval3
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, tstsrc
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, tstdst
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(3)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr_a: .ascii "before DMA \0"
+mmustr_b: .ascii "after DMA \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+testval:
+	.word MAGIC2
+testval2:
+	.word MAGIC4
+testval3:
+	.word MAGIC4
+tstdst:
+	.word 0
+	.org 0x1000
+	.word 0
+tstsrc:
+	.word MAGIC1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^after DMA this is the test string unaligned and more than 64 chars long abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 123456789      abcdefghijklmnopqrstuvwxyz$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dma_unaligned/test.S	(revision 724)
@@ -0,0 +1,96 @@
+/*
+ * basic DMA check: check that the DMA engine works and and doens't
+ * clobbers memory
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(mmustr_a)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	t0, tstdst
+	sw 	zero, 0(t0);
+	PRINT(tstdst)
+	PUTCHAR('E')
+	PUTCHAR('\n')
+
+	la	a1, DMA_BASE
+	la	a0, tstsrc
+	sw	a0, DMA_SRC(a1)
+	la	a0, tstdst
+	sw	a0, DMA_DST(a1)
+	la	a0, 160 #strlen(tstsrc)
+	sw	a0, DMA_LEN(a1) /* start DMA */
+loop:
+	lw	a0, DMA_LEN(a1)
+	bne	a0, zero, loop;
+	nop
+
+	PRINT(mmustr_b)
+	PRINT(tstdst)
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(3)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr_a: .ascii "before DMA \0"
+mmustr_b: .ascii "after DMA \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+testval:
+	.word MAGIC2
+testval2:
+	.word MAGIC4
+testval3:
+	.word MAGIC4
+tstdst:
+	.word 0
+	.org 0x1000
+testval4:
+	.word MAGIC1
+tstsrc:
+	.ascii "this is the test string unaligned and more than 64 chars long abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 123456789      abcdefghijklmnopqrstuvwxyz\n\0"
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+.  ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000BEEF status 0x00400002 cause 0x0000001C pc 0xBFC00080 badva 0x00200004$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval/test.S	(revision 724)
@@ -0,0 +1,117 @@
+/*
+ * dtlb inval: a write to VC_DTLB_INVAL should invalidate the corresponding
+ * dtlb entry. On a ccvcache, VC_DTLB_INVAL should not be needed, and
+ * the first access after clearing pte2_a should fail
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la 	a0, pte2_a
+	sw	zero, 0(a0) /* invalidate PTE2 entry */
+	sync
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0); /* TLB entry not invalidated yet, we can do this */
+	PRINTX
+	PUTCHAR('\n')
+	la	t0, testval + 0x00200000
+	mtc2	t0, VC_DTLB_INVAL /* invalidate VA */
+	lw 	a0, 0(t0); /* now this should fail */
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+/*
+ * one PD with a level 2 PTP: we invalidate an entry in the PTP and
+ * check that the VA is no longer accessible
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000BEEF 0x0000DEAD$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval2/test.S	(revision 724)
@@ -0,0 +1,121 @@
+/*
+ * dtlb inval: a write to a PTE2 should invalidate the corresponding
+ * dtlb entry. 
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la 	t0, pte2_a
+	la	a0, 0x1000 >> 12 
+	sw	a0, 4(t0) /* swap PTE2 entry */
+1:
+	ll	a0, 0(t0)
+	la	a0, PTE2_V | PTE2_C | PTE2_X
+	sc	a0, 0(t0)
+	beqz	a0, 1b
+	nop
+
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0); /* should get MAGIC1 */
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.align 12
+	.word MAGIC2
+	.word MAGIC1
+	.globl pte2_a
+/*
+ * one PD with a level 2 PTP: we switch an entry in the PTP and
+ * check that the dtlb is invalidated
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x2000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "mmu started 0x0000BEEF 0xAC400000 0x0000900D status 0x00400002 cause 0x0000001C pc 0xBFC000D4 badva 0x00200004" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_inval3/test.S	(revision 724)
@@ -0,0 +1,128 @@
+/*
+ * dtlb inval: a write to a PTE2 should invalidate the corresponding
+ * dtlb entry. Check that this is true is we change only the write flag
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0);
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, testval + 0x00200000
+	la	a0, MAGIC3
+	sw	a0, 0(t0)
+	la 	t0, pte2_a
+1:
+	ll	a0, 0(t0)
+	la	a1, ~PTE2_W
+	and	a1, a0, a1
+	sc	a1, 0(t0)
+	beqz	a1, 1b
+	nop
+	PRINTX
+	PUTCHAR(' ')
+
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0); /* should get MAGIC3 */
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, testval + 0x00200000
+	la	a0, MAGIC1
+	sw	a0, 0(t0)
+
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.align 12
+	.word MAGIC2
+	.word MAGIC1
+	.globl pte2_a
+/*
+ * one PD with a level 2 PTP: we switch an entry in the PTP and
+ * check that the dtlb is invalidated
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_W
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x2000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started ptpr_b 0x0000F00D$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^mmu started ptpr_a 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_dtlb_ptprinval/test.S	(revision 724)
@@ -0,0 +1,145 @@
+/*
+ * dtlb inval on PTPR write: check that no stale entry exists in the dtlb
+ * after MMU context swicth
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_b
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR	# PTPR <= pte1_b
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr_b)
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0);
+	PRINTX			# print MAGIC3
+	PUTCHAR('\n')
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR	# PTPR <= pte1_a
+	nop
+	PRINT(mmustr_a)
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0);
+	PRINTX			# print MAGIC1
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(3)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr_a: .ascii "mmu started ptpr_a \0"
+mmustr_b: .ascii "mmu started ptpr_b \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.org data_a + 0x1000
+data_b:
+	.word MAGIC3
+	.word MAGIC4
+
+/*
+ * two PD with two different PTE2 for code: check that dtlb points to
+ * the right one by loading 2 different data at the same virtual address
+ */
+	.globl pte2_a
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word 0x0000 >> 12 /* check real value of data_a */
+
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+pte2_b:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word 0x1000 >> 12 /* check real value of data_b */
+
+	.org pte2_b + 4092
+	.word 0
+
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x2000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
+	.globl pte1_b
+pte1_b:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x3000 >> 12) /* map PA 0x1000 at VA 0x00200000 via pte2_b */
+	.org pte1_b + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_b + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_b + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_b + 8188
+	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x1000002C pc 0xBFC0002C badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop/test.S	(revision 724)
@@ -0,0 +1,71 @@
+/*
+ * coproc unusable exception test: we take an exception on COP1 use
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	li	t3, MAGIC1
+	mtc1    t3,$f2
+	mfc1	a0,$f2
+	PRINTX
+	PUTCHAR('\n')
+	nop
+	nop
+	nop
+	nop
+
+1:
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x1000002C pc 0xBFC00030 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop1/test.S	(revision 724)
@@ -0,0 +1,71 @@
+/*
+ * trap test: check that we get a trap on FPU access though [ls][dw]c1
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV), enable cop1 */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, div1;
+	lwc1	$f0, 0(a0)
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(2)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+#we should end there
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl div1
+div1:
+	.float	10.0
+	.globl div2
+div2:
+	.float	0.0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x9000002C pc 0xBFC00028 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_cop_delayslot/test.S	(revision 724)
@@ -0,0 +1,65 @@
+/*
+ * coproc unusable exception test: 0x80000000 bit is set in cause register
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	j	1f
+	mtc1    t3,$f2
+	nop
+
+1:
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00000004: 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400002 cause 0x00000018 pc 0xBFC01000 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if/test.S	(revision 724)
@@ -0,0 +1,135 @@
+/*
+ * ifetch bus fault exception test: we can restart the faulting instruction
+ * We use the MMU to cause fault.
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00200000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+
+	move	a1, zero
+	la	s0, testval
+	jal	doload
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	move	a0, a1
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	/* don't clobber a0 and ra */
+	addiu   sp, sp, -8
+	sw      a0, 4(sp)
+	sw      ra, 8(sp)
+
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* map VA 0xbfc01000 at PA 0xbfc01000 */
+	la	t0, pte2 + VADDR_TO_PTE2I(0xbfc01000) * 8
+	la	a0, (0xbfc01000 >> PTE2_SHIFT)
+	sw	a0, 4(t0)
+	la	a0, (PTE2_V | PTE2_C | PTE2_X)
+	sw	a0, 0(t0)
+	/* la	a0, 0xbfc01000
+	mtc2	a0, VC_ITLB_INVAL */
+
+	lw      a0, 4(sp)
+	lw      ra, 8(sp)
+	addiu   sp, sp, 8
+	eret
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	/*
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	lw      a1, 0(s0) /* this should trigger the exception */
+
+	/* we should not get there */
+	nop
+	nop
+	EXIT(1)
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2
+pte2:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.org pte2 + 4092
+	.globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of PTE2 !!! */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000) - 4;
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00000004: 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400002 cause 0x80000018 pc 0xBFC00FFC badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_delayslot/test.S	(revision 724)
@@ -0,0 +1,135 @@
+/*
+ * ifetch bus fault exception test: we can restart the faulting instruction
+ * when the fault occurs in the branch delay slot.
+ * We use the MMU to cause fault.
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00200000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+
+	move	a1, zero
+	la	s0, testval
+	jal	doload
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	move	a0, a1
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	/* don't clobber a0 and ra */
+	addiu   sp, sp, -8
+	sw      a0, 4(sp)
+	sw      ra, 8(sp)
+
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* map VA 0xbfc01000 at PA 0xbfc01000 */
+	la	t0, pte2 + VADDR_TO_PTE2I(0xbfc01000) * 8
+	la	a0, (0xbfc01000 >> PTE2_SHIFT)
+	sw	a0, 4(t0)
+	la	a0, (PTE2_V | PTE2_C | PTE2_X)
+	sw	a0, 0(t0)
+	/* la	a0, 0xbfc01000
+	mtc2	a0, VC_ITLB_INVAL */
+
+	lw      a0, 4(sp)
+	lw      ra, 8(sp)
+	addiu   sp, sp, 8
+	eret
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	/*
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	lw      a1, 0(s0) /* this should trigger the exception */
+
+	/* we should not get there */
+	nop
+	nop
+	EXIT(1)
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2
+pte2:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.org pte2 + 4092
+	.globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of PTE2 !!! */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00000004: 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400002 cause 0x00000018 pc 0xBFC01000 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_if_llsc/test.S	(revision 724)
@@ -0,0 +1,136 @@
+/*
+ * ifetch bus fault exception test: we can restart the faulting instruction
+ * We use the MMU to cause fault.
+ * Match what NetBSD does for page table update: sw for ppn, ll/sc for flags
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00200000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+
+	move	a1, zero
+	la	s0, testval
+	jal	doload
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	move	a0, a1
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	/* don't clobber a0 and ra */
+	addiu   sp, sp, -8
+	sw      a0, 4(sp)
+	sw      ra, 8(sp)
+
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* map VA 0xbfc01000 at PA 0xbfc01000 */
+	la	t0, pte2 + VADDR_TO_PTE2I(0xbfc01000) * 8
+	la	a0, (0xbfc01000 >> PTE2_SHIFT)
+	sw	a0, 4(t0)
+1:
+	ll	a0, 0(t0)
+	la	a0, (PTE2_V | PTE2_C | PTE2_X)
+	sc	a0, 0(t0)
+	beqz	a0, 1b
+
+	lw      a0, 4(sp)
+	lw      ra, 8(sp)
+	addiu   sp, sp, 8
+	eret
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	/*
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	lw      a1, 0(s0) /* this should trigger the exception */
+	/* we should not get there */
+	nop
+	nop
+	EXIT(1)
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2
+pte2:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.org pte2 + 4092
+	.globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of PTE2 !!! */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/Makefile	(revision 724)
@@ -0,0 +1,3 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
+CFLAGS+= -DINTERRUPT_DELAY=${INTERRUPT_DELAY}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/run	(revision 724)
@@ -0,0 +1,44 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^end 0x0000BEEF 0x00000001$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400403 cause 0x00000018 pc 0x80000000 badva 0x00000000 xicu 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400403 cause 0x00000400 pc 0x80000000 badva 0x00000000 xicu 0x00000001$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 3 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+echo 
+i=1180
+while true; do
+	echo -n "    DELAY=$i: "
+	make INTERRUPT_DELAY=$i --quiet || exit 1
+	${SIMUL} > run.out 2>&1 
+	if [ $? -eq 0 ]; then
+		if check_output; then
+			echo "test passsed";
+			make --quiet clean
+		else
+			echo "test FAILED"
+			exit 1
+		fi
+	else 
+		echo "test FAILED"
+		exit 1
+	fi
+	i=$((i+1))
+done
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_intr/test.S	(revision 724)
@@ -0,0 +1,201 @@
+/*
+ * Check interrupt while in trap handler.
+ * Cache is enabled so we have one instruction/cycle
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+#include <xicu.h>
+
+#define DOLOAD_ADDR 0x80000000
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00200000 - 16
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(startstr)
+
+	/* program xicu */
+	la	t0, XICU_BASE
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* route PTI0 to irq 0 */
+	li	a0, 1 << 0
+	sw	a0, XICU_MSK_PTI_E(0)(t0)
+	/* init s0 */
+	li	s0, MAGIC2
+	/*
+	 * interrupt in INTERRUPT_DELAY cycles.
+	 */
+	li	a0, INTERRUPT_DELAY
+	sw	a0, XICU_PTI_PER(0)(t0)
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* reset cop0 status (keep BEV), enable interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0401;
+	mtc0    a0, COP0_STATUS
+	nop
+	nop
+	nop
+	nop
+	nop
+
+	nop
+	move	a1, zero
+	la	s0, DOLOAD_ADDR
+	jalr	s0
+	nop
+	j	end
+	nop
+	/* we should not end there */
+	EXIT(1)
+
+end:
+	PRINT(endstr)
+	move	a0, a1
+	PRINTX
+	PUTCHAR(' ')
+	la	a0, myvar
+	lw	a0, 0(a0)
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+        /* don't clobber a0 and ra */
+	addiu   sp, sp, -8
+	sw      a0, 4(sp)
+	sw      ra, 8(sp)
+
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	move	s0, a0
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PRINT(xicustr)
+	la	t0, XICU_BASE
+	lw	a0, XICU_PRIO(0)(t0)
+	PRINTX
+	PUTCHAR('\n')
+	/* map VA DOLOAD_ADDR at PA 0xbfc01000 */
+	la	t0, pte22 + VADDR_TO_PTE2I(DOLOAD_ADDR) * 8
+	la	a0, (0xbfc01000 >> PTE2_SHIFT)
+	sw	a0, 4(t0)
+	la	a0, (PTE2_V | PTE2_C | PTE2_X)
+	sw	a0, 0(t0)
+	mtc2	zero, VC_DCACHE_FLUSH /* flush the whole data cache */
+
+	andi	a0, s0, 0xff00
+	beq	a0, zero, notintr
+	nop
+
+	/* disable timer0 */
+	la	t0, XICU_BASE
+	sw	zero, XICU_PTI_PER(0)(t0)
+notintr:
+	la	a1, myvar
+	la	a0, 0(a1)
+	beq	a0, zero, noex
+	nop
+	EXIT(2)
+noex:
+	li	a0, 1
+	sw	a0, 0(a1)
+	lw	a0, 4(sp)
+	lw	ra, 8(sp)
+	addiu	sp, sp, 8
+	eret
+	/* we should not end there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+xicustr: .ascii " xicu \0"
+startstr: .ascii "start\n\0"
+endstr: .ascii "end \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	/*
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	la	s0, testval
+	jr	ra
+	lw	a1, 0(s0) /* this should trigger the exception */
+	/* we should not get there */
+	EXIT(1)
+	nop
+	.data
+myvar:	.word 0
+testval:
+	.word MAGIC2
+	.globl pte2
+pte2:
+        .align 12
+        .word PTE2_V | PTE2_C | PTE2_X
+        .word BOOT_ADDRESS >> 12
+        .org pte2 + 4092
+	.globl pte22
+pte22:
+        .align 12
+        .word 0
+        .word 0
+        .org pte22 + 4092
+        .globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1 + (DOLOAD_ADDR >> 21) * 4
+        .word PTE1_V | PTE1_T | (0x2000 >> 12) /* map VA DOLOAD_ADDR with 4k page: check real address of PTE22 !!! */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+        .word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of PTE2 !!! */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (XICU_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (XICU_BASE >> 21) /* map PA 0xd2000000 at VA 0xd2000000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00000004: 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400002 cause 0x0000001C pc 0xBFC00058 badva 0x00000004$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls/test.S	(revision 724)
@@ -0,0 +1,103 @@
+/*
+ * load/store bus fault exception test: we can restart the faulting instruction
+ * We use the MMU to cause fault
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+
+	/* 0x00000000 not mapped yet: we fault, load the MMU and retry */
+	move	a1, zero
+	la	s0, testval
+	lw	a1, 0(s0) /* this should trigger the exception */
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	move	a0, a1
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* map VA 0 at PA 0: just copy entry for 0x00200000 */
+	la	t0, pte1 + 0x00200000
+	lw	a0, 4(t0)
+	sw	a0, 0(t0)
+	/* mtc2	zero, VC_DTLB_INVAL */
+	eret
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte1
+pte1:
+	.align 13
+	.word 0x0                            /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0x00200000 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00000004: 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400002 cause 0x8000001C pc 0xBFC000AC badva 0x00000004$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_delayslot/test.S	(revision 724)
@@ -0,0 +1,123 @@
+/*
+ * load/store bus fault exception test: we can restart the jump when the
+ * instruction in the delay slot takes a fault.
+ * We use the MMU to cause fault
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+
+	/* 0x00000000 not mapped yet: we fault, load the MMU and retry */
+	move	a1, zero
+	la	s0, testval
+	jal	doload
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	move	a0, a1
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl doload
+doload:
+	nop
+	nop
+	jr 	ra
+	lw	a1, 0(s0) /* this should trigger the exception */
+
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	/* don't clobber a0 and ra */
+	addiu	sp, sp, -8
+	sw	a0, 4(sp)
+	sw	ra, 8(sp)
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* map VA 0 at PA 0: just copy entry for 0x00200000 */
+	la	t0, pte1 + 0x00200000
+	lw	a0, 4(t0)
+	sw	a0, 0(t0)
+	/* mtc2	zero, VC_DTLB_INVAL */
+	lw	a0, 4(sp)
+	lw	ra, 8(sp)
+	addiu	sp, sp, 8
+	eret
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte1
+pte1:
+	.align 13
+	.word 0x0                            /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0x00200000 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00000004: 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400002 cause 0x0000001C pc 0xBFC00058 badva 0x00000004$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_excep_ls_llsc/test.S	(revision 724)
@@ -0,0 +1,107 @@
+/*
+ * load/store bus fault exception test: we can restart the faulting instruction
+ * We use the MMU to cause fault
+ * Match what NetBSD does for page table update: sw for ppn, ll/sc for flags
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+
+	/* 0x00000000 not mapped yet: we fault, load the MMU and retry */
+	move	a1, zero
+	la	s0, testval
+	lw	a1, 0(s0) /* this should trigger the exception */
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	move	a0, a1
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* map VA 0 at PA 0: just copy entry for 0x00200000 */
+	la	t0, pte1 + 0x00200000
+1:
+	ll	a0, 0(t0)
+	lw	a0, 4(t0)
+	sc	a0, 0(t0)
+	beqz	a0, 1b
+	/* mtc2	zero, VC_DTLB_INVAL */
+	eret
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte1
+pte1:
+	.align 13
+	.word 0x0                            /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0x00200000 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^eret$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_exception_epc_modify/test.S	(revision 724)
@@ -0,0 +1,71 @@
+/*
+ * Check that on return from exception the modified EPC is handled.
+ * We use a load to an unaligned address to trigger the exception.
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	li	a0, 1
+	lw	a0, 0(a0) /* fault */
+
+	/* we shouldn't get there */
+	EXIT(1)
+
+	.globl exret
+
+exret:
+	PRINT(eretstr)
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	la	a0, exret
+	mtc0	a0, COP0_EXPC
+	eret
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+eretstr: .ascii "eret\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400006 cause 0x00000010 pc 0xBFC0001C badva 0x00000001$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_exceptions/test.S	(revision 724)
@@ -0,0 +1,60 @@
+/*
+ * Check that the exeption vector is called on exception.
+ * We use a load to an unaligned address to trigger the exception.
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	li	a0, 1
+	lw	a0, 0(a0) /* fault */
+
+	/* we shouldn't get there */
+        EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	li	a0, '\n'
+	sb	a0, 0(k0)
+
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x80000034 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_fpe_delayslot/test.S	(revision 724)
@@ -0,0 +1,92 @@
+/*
+ * trap test: check that a trap in a delay slot is
+ * properly handled
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV), enable cop1 */
+	lui	a0, 0x2040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, div1
+	lwc1	$f2, 0(a0)
+	la	a0, div2
+	lwc1	$f0, 0(a0)
+	j exit
+	div.s	$f0, $f0, $f2
+	/* we should not get there, */
+	EXIT(2)
+	.globl exit
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, exit
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+div1:
+	.float	10.0
+	.globl div2
+div2:
+	.float	0.0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x00000038 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_fpediv/test.S	(revision 724)
@@ -0,0 +1,81 @@
+/*
+ * trap test: check that a we can generate a trap from FPE instruction
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV), enable cop1 */
+	lui	a0, 0x2040;
+	mtc0	a0, COP0_STATUS
+	/* enable COP1 exceptions */
+	li	a0, 0x0f80
+	ctc1	a0, $31
+#if 0
+	li	a0, 0xf000
+	ctc1	a0, $26
+#endif
+	la	a0, div1
+	lwc1	$f2, 0(a0)
+	la	a0, div2
+	lwc1	$f0, 0(a0)
+	div.s	$f0, $f2, $f0
+	cfc1	a0, $31
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(2)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+#we should end there
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl div1
+div1:
+	.float	10.0
+	.globl div2
+div2:
+	.float	0.0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/run	(revision 724)
@@ -0,0 +1,38 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started before DMA 0x0000DEAD$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^mmu started after DMA 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^mmu started after FLUSH 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 3 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_icache_inval_pa/test.S	(revision 724)
@@ -0,0 +1,167 @@
+/*
+ * cache inval test: check that VC_ICACHE_INVAL_PA does the job
+ * on a cc_vcache, the cache invalidation/update should be done by hardware
+ * and VC_ICACHE_INVAL_PA should not be needed.
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+#define TEST_ADDRESS 0x200000
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr_a)
+	#copy 'doload' to TEST_ADDRESS 
+	la	a1, DMA_BASE
+	la	a0, doload 
+	sw      a0, DMA_SRC(a1)
+	la	a0, TEST_ADDRESS
+	sw      a0, DMA_DST(a1)
+        li      a0, 8
+	sw      a0, DMA_LEN(a1) /* start DMA */
+loop1:
+	lw      a0, DMA_LEN(a1)
+	bne     a0, zero, loop1;
+	nop
+	sw	zero, DMA_RESET(a1)
+
+	la	a0, TEST_ADDRESS
+	jalr	a0
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	#copy 'doload2' to TEST_ADDRESS 
+	la	a1, DMA_BASE
+	la	a0, doload2
+	sw      a0, DMA_SRC(a1)
+	la	a0, TEST_ADDRESS
+	sw      a0, DMA_DST(a1)
+        li      a0, 8
+	sw      a0, DMA_LEN(a1) /* start DMA */
+loop2:
+	lw      a0, DMA_LEN(a1)
+	bne     a0, zero, loop2;
+	nop
+	sw	zero, DMA_RESET(a1)
+
+	PRINT(mmustr_b)
+	la	a0, TEST_ADDRESS
+	jalr	a0
+	nop
+	PRINTX
+	PUTCHAR('\n')
+
+        la      a0, TEST_ADDRESS
+	mtc2    a0, VC_DATA_LO
+	mtc2    zero, VC_DATA_HI
+	mtc2    zero, VC_ICACHE_INVAL_PA
+	addi	a0, a0, 4
+	mtc2    a0, VC_DATA_LO
+	mtc2    zero, VC_DATA_HI
+	mtc2    zero, VC_ICACHE_INVAL_PA
+	nop
+
+	PRINT(mmustr_c)
+	la	a0, TEST_ADDRESS
+	jalr	a0
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+
+	.globl doload2
+doload2:
+	jr ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(2)
+	nop
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(3)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr_a: .ascii "mmu started before DMA \0"
+mmustr_b: .ascii "mmu started after DMA \0"
+mmustr_c: .ascii "mmu started after FLUSH \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1_a + (TEST_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (TEST_ADDRESS >> 21) /* map PA 0x200000 at VA 0x200000, read-only/exec */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + (DMA_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (DMA_BASE >> 21) /* map PA 0xe8000000 at VA 0xe0000000 */
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000BEEF 0x0000DEAD 0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval/test.S	(revision 724)
@@ -0,0 +1,158 @@
+/*
+ * itlb inval: a write to a PTE2 should invalidate the corresponding
+ * itlb and dtlb entries. 
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	/* cause a DTLB miss */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	/* cause a itlb miss */
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR(' ')
+
+	la	t0, pte2_a
+	la	a0, (BOOT_ADDRESS+0x2000) >> 12
+	sw	a0, 12(t0) /* change PTE2 */
+	sync
+1:
+	ll	a0, 8(t0)
+	la	a0, PTE2_V | PTE2_C | PTE2_X
+	sc	a0, 8(t0)
+	beqz	a0, 1b
+	nop
+
+	/* now we should get the second values */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	jal	doload 
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval:	.word MAGIC2
+	.align 12
+	.globl doload2
+doload2:
+	jr      ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval2:	.word MAGIC1
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * one PD with a level 2 PTP: we change an entry in the PTP and
+ * check that the ITLB has been invalidated
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000BEEF 0x0000DEAD 0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval2/test.S	(revision 724)
@@ -0,0 +1,160 @@
+/*
+ * itlb inval: a write to a PTE2 should invalidate the corresponding
+ * itlb and dtlb entries. 
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	/* cause a DTLB miss */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	/* cause a itlb miss */
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR(' ')
+
+	la	t0, pte2_a
+	mtc2 	t0, VC_DTLB_INVAL /* force tlb miss on write */
+	la	a0, (BOOT_ADDRESS+0x2000) >> 12
+	sw	a0, 12(t0) /* change PTE2 */
+	sync
+1:
+	ll	a0, 8(t0)
+	mtc2 	t0, VC_DTLB_INVAL /* force tlb miss on write */
+	la	a0, PTE2_V | PTE2_C | PTE2_X
+	sc	a0, 8(t0)
+	beqz	a0, 1b
+	nop
+
+	/* now we should get the second values */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	jal	doload 
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval:	.word MAGIC2
+	.align 12
+	.globl doload2
+doload2:
+	jr      ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval2:	.word MAGIC1
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * one PD with a level 2 PTP: we change an entry in the PTP and
+ * check that the ITLB has been invalidated
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000BEEF 0x0000DEAD 0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval3/test.S	(revision 724)
@@ -0,0 +1,162 @@
+/*
+ * itlb inval: a write to a PTE2 should invalidate the corresponding
+ * itlb and dtlb entries. 
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	/* cause a DTLB miss */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	/* cause a itlb miss */
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR(' ')
+
+	la	t0, pte2_a
+	mtc2 	t0, VC_DATA_L /* force dcache miss on write */
+	mtc2	zero, VC_DATA_H
+	mtc2	zero, VC_DCACHE_INVAL_PA
+	la	a0, (BOOT_ADDRESS+0x2000) >> 12
+	sw	a0, 12(t0) /* change PTE2 */
+	sync
+1:
+	ll	a0, 8(t0)
+	mtc2 	t0, VC_DTLB_INVAL /* force tlb miss on write */
+	la	a0, PTE2_V | PTE2_C | PTE2_X
+	sc	a0, 8(t0)
+	beqz	a0, 1b
+	nop
+
+	/* now we should get the second values */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	jal	doload 
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval:	.word MAGIC2
+	.align 12
+	.globl doload2
+doload2:
+	jr      ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval2:	.word MAGIC1
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * one PD with a level 2 PTP: we change an entry in the PTP and
+ * check that the ITLB has been invalidated
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000BEEF 0x0000DEAD 0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_inval4/test.S	(revision 724)
@@ -0,0 +1,166 @@
+/*
+ * itlb inval: a write to a PTD1 should invalidate the corresponding
+ * itlb and dtlb entries. 
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	/* cause a DTLB miss */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	/* cause a itlb miss */
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR(' ')
+
+	la	t0, pte1_ac
+1:
+	ll	a0, 0(t0)
+	la	a0, (0x2000 >> 12) | PTE1_V | PTE1_T /* check real address of pet2_b */
+	sc	a0, 0(t0) /* change PTD1 */
+	beqz	a0, 1b
+	nop
+
+	/* now we should get the second values */
+	la	t0, roval
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+
+	jal	doload 
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval:	.word MAGIC2
+	.align 12
+	.globl doload2
+doload2:
+	jr      ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(1)
+	nop
+roval2:	.word MAGIC1
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * one PD with a level 2 PTP: we change an entry in the PD and
+ * check that the TLBs has been invalidated
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12 /* address of doload */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte2_b:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x2000) >> 12 /* address of doload2 */
+	.org pte2_b + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+pte1_ac:
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started ptpr_b 0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^mmu started ptpr_a 0x0000BEEF 0x0000DEAD$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_idtlb_ptprinval/test.S	(revision 724)
@@ -0,0 +1,173 @@
+/*
+ * itlb inval on PTPR write: check that no stale entry exists in the itlb
+ * after MMU context swicth
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_b
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr_b)
+	la	t0, rodata
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+#if 0 /* works with this - this shows the old pte2 address is cached */
+	la	a0, pte2_a
+	lw	a1, 12(a0)
+	la	a0, pte2_b
+	sw	a1, 12(a0)
+#endif
+	PRINT(mmustr_a)
+	la	t0, rodata
+	lw	a0, 0(t0)
+	PRINTX
+	PUTCHAR(' ')
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(3)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr_a: .ascii "mmu started ptpr_a \0"
+mmustr_b: .ascii "mmu started ptpr_b \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+rodata:
+	.word MAGIC2
+	.org doload + 0x1000 /* in the second page, mapped by pte1_b */
+	jr ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(2)
+	nop
+	.word MAGIC1
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * two PD with two different PTE2 for code: check that itlb points to
+ * the right one by executing 2 different code at the same address
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+pte2_b:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x2000) >> 12
+	.org pte2_b + 4092
+	.word 0
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
+	.globl pte1_b
+pte1_b:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_b + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x2000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_b !!! */
+	.org pte1_b + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_b + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_b + 8188
+	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x0000DEAD$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400103 cause 0x00000100 pc 0xBFC00038 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt/test.S	(revision 724)
@@ -0,0 +1,80 @@
+/*
+ * Check that we can take an interrupt, and return from it.
+ * We use a software-triggerted interrupt.
+ */
+#include <registers.h>
+#include <misc.h>
+
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV), enbale soft interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0101;
+	mtc0    a0, COP0_STATUS
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	PRINT(startstr)
+
+	/* generate an interrupt */
+	mfc0	a0, COP0_CAUSE
+	nop
+	ori	a0, 0x0100
+	mtc0	a0, COP0_CAUSE
+	li	a0, MAGIC1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should end here after taking the exeption */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	xori	a0, 0x100
+	mtc0	a0, COP0_CAUSE
+	nop
+	eret
+	/* we should not end there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+eretstr: .ascii "eret\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+include ../Makefile.inc
+CFLAGS+= -DINTERRUPT_DELAY=${INTERRUPT_DELAY}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/run	(revision 724)
@@ -0,0 +1,36 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^end 0x0000DEAD$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400403 cause 0x80000000 pc 0xBFC00054 badva 0x00000000 xicu 0x[01][0-9A-F][01][0-9A-F][01][0-9A-F]00$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70; do
+	make clean --quiet
+	make INTERRUPT_DELAY=$i --quiet || exit 1
+    ${SIMUL} > run.out 2>&1 
+	if [ $? -eq 0 ]; then
+		if check_output; then
+			echo "test $i passed";
+			make --quiet clean
+		    exit 0;
+		fi
+	else
+		echo "test FAILED"
+		exit 1
+	fi
+done
+echo "test FAILED"
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_delayslot/test.S	(revision 724)
@@ -0,0 +1,112 @@
+/*
+ * Check that we can take an interrupt from the xicu timer0
+ */
+#include <registers.h>
+#include <misc.h>
+#include <xicu.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	PRINT(startstr)
+
+	/* program xicu */
+	la	t0, XICU_BASE
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* route PTI0 to irq 0 */
+	li	a0, 1 << 0
+	sw	a0, XICU_MSK_PTI_E(0)(t0)
+	/* init s0 */
+	li	s0, MAGIC2
+	/*
+	 * interrupt in INTERRUPT_DELAY cycles.
+	 * Without cache this takes us to the delay slot of the jump.
+	 */
+
+	li	a0, INTERRUPT_DELAY
+	//li	a0, 38
+	sw	a0, XICU_PTI_PER(0)(t0)
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* reset cop0 status (keep BEV), enable interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0401;
+	mtc0    a0, COP0_STATUS
+
+	nop
+	nop
+	nop
+	j	end
+	li 	s0, MAGIC1
+	nop
+	/* we should not end there */
+	EXIT(1)
+
+end:
+	PRINT(endstr)
+	move	a0, s0
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	/* disable timer0 */
+	la	t0, XICU_BASE
+	sw	zero, XICU_PTI_PER(0)(t0)
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PRINT(xicustr)
+	la	t0, XICU_BASE
+	lw	a0, XICU_PRIO(0)(t0)
+	PRINTX
+
+	PUTCHAR('\n')
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	andi	t0, a0, 0xff00
+	xor	a0, a0, t0
+	mtc0	a0, COP0_CAUSE
+	eret
+	/* we should not end there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+xicustr: .ascii " xicu \0"
+startstr: .ascii "start\n\0"
+endstr: .ascii "end \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^eret$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400103 cause 0x00000100 pc 0xBFC00038 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_epc_modify/test.S	(revision 724)
@@ -0,0 +1,85 @@
+/*
+ * Check that we can take an interrupt, and return to a different address.
+ * We use a software-triggerted interrupt.
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV), enbale soft interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0101;
+	mtc0    a0, COP0_STATUS
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	PRINT(startstr)
+
+	/* generate an interrupt */
+	mfc0	a0, COP0_CAUSE
+	nop
+	ori	a0, 0x0100
+	mtc0	a0, COP0_CAUSE
+	nop
+	/* we should not end there */
+	EXIT(1)
+
+exret:
+	PRINT(eretstr)
+	EXIT(0)
+
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	xori	a0, 0x100
+	mtc0	a0, COP0_CAUSE
+	nop
+	la	a0, exret
+	mtc0	a0, COP0_EXPC
+	nop
+	eret
+	/* we should not end there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+eretstr: .ascii "eret\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+include ../Makefile.inc
+CFLAGS+= -DINTERRUPT_DELAY=${INTERRUPT_DELAY}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/run	(revision 724)
@@ -0,0 +1,31 @@
+#!/bin/sh 
+
+check_output()
+{
+	egrep "^end 0x0000DEAE$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep ^status run.out
+	return 0;
+}
+echo 
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70; do
+	echo -n "    DELAY=$i: "
+	make INTERRUPT_DELAY=$i --quiet || exit 1
+	../platform/simulation.x > run.out 2>&1 
+	if [ $? -eq 0 ]; then
+		if check_output; then
+			echo "test passsed";
+			make --quiet clean
+		else
+			echo "test FAILED"
+			exit 1
+		fi
+	else 
+		echo "test FAILED"
+		exit 1
+	fi
+done
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended/test.S	(revision 724)
@@ -0,0 +1,137 @@
+/*
+ * Check interrupt/return with interrup occuring at various points in
+ * the software. Cache is enabled to we have on interrupt/cycle
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+#include <xicu.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(startstr)
+
+	/* program xicu */
+	la	t0, XICU_BASE
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* route PTI0 to irq 0 */
+	li	a0, 1 << 0
+	sw	a0, XICU_MSK_PTI_E(0)(t0)
+	/* init s0 */
+	li	s0, MAGIC2
+	/*
+	 * interrupt in INTERRUPT_DELAY cycles.
+	 */
+	li	a0, INTERRUPT_DELAY
+	sw	a0, XICU_PTI_PER(0)(t0)
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* reset cop0 status (keep BEV), enable interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0401;
+	mtc0    a0, COP0_STATUS
+
+	li      s0, MAGIC1
+	addiu	s0, s0, -1
+	addiu	s0, s0, -1
+	addiu	s0, s0, -1
+	addiu	s0, s0, -1
+	nop
+	j	end
+	addiu	s0, s0, 5
+	nop
+	/* we should not end there */
+	EXIT(1)
+
+end:
+	PRINT(endstr)
+	move	a0, s0
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	/* disable timer0 */
+	la	t0, XICU_BASE
+	sw	zero, XICU_PTI_PER(0)(t0)
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PRINT(xicustr)
+	la	t0, XICU_BASE
+	lw	a0, XICU_PRIO(0)(t0)
+	PRINTX
+
+	PUTCHAR('\n')
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	andi	t0, a0, 0xff00
+	xor	a0, a0, t0
+	mtc0	a0, COP0_CAUSE
+	eret
+	/* we should not end there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+xicustr: .ascii " xicu \0"
+startstr: .ascii "start\n\0"
+endstr: .ascii "end \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (XICU_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (XICU_BASE >> 21) /* map PA 0xd2000000 at VA 0xd2000000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+include ../Makefile.inc
+CFLAGS+= -DINTERRUPT_DELAY=${INTERRUPT_DELAY}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/run	(revision 724)
@@ -0,0 +1,31 @@
+#!/bin/sh 
+
+check_output()
+{
+	egrep "^end 0x0000DEAD 0x0000BEF0$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x00400403" run.out
+	return 0;
+}
+echo 
+for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99; do
+	echo -n "    DELAY=$i: "
+	make INTERRUPT_DELAY=$i --quiet || exit 1
+	../platform/simulation.x > run.out 2>&1 
+	if [ $? -eq 0 ]; then
+		if check_output; then
+			echo "test passsed";
+			make --quiet clean
+		else
+			echo "test FAILED"
+			exit 1
+		fi
+	else 
+		echo "test FAILED"
+		exit 1
+	fi
+done
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_extended2/test.S	(revision 724)
@@ -0,0 +1,181 @@
+/*
+ * Check interrupt/return with interrup occuring at various points in
+ * the software. Cache is enabled to we have on interrupt/cycle
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+#include <xicu.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(startstr)
+
+	/* program xicu */
+	la	t0, XICU_BASE
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* route PTI0 to irq 0 */
+	li	a0, 1 << 0
+	sw	a0, XICU_MSK_PTI_E(0)(t0)
+	/* init s0 */
+	li	s0, MAGIC2
+
+	/* reset cop0 status (keep BEV), enable soft interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0101;
+	mtc0    a0, COP0_STATUS
+#if 1
+	/* trigger soft interrupt, so that exept is in cache */
+	mfc0    a0, COP0_CAUSE
+	ori     a0, 0x0100
+	mtc0    a0, COP0_CAUSE
+	nop
+#endif
+
+	/*
+	 * interrupt in INTERRUPT_DELAY cycles.
+	 */
+	la	t0, XICU_BASE
+	li	a0, INTERRUPT_DELAY
+	sw	a0, XICU_PTI_PER(0)(t0)
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* reset cop0 status (keep BEV), enable interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0401;
+	mtc0    a0, COP0_STATUS
+
+	li      s0, MAGIC1
+	li      s1, MAGIC2
+	addiu	s0, s0, -1
+	jal	incr
+	nop
+	addiu	s0, s0, -1
+	jal	incr
+	nop
+	addiu	s0, s0, -1
+	jal	incr
+	nop
+	addiu	s0, s0, -1
+	jal	incr
+	nop
+	j	end
+	addiu	s1, s1, 5
+	nop
+	/* we should not end there */
+	EXIT(1)
+
+	.align 6
+	nop
+incr:
+	addiu	s1, s1, -1
+	j	ra
+	addiu	s0, s0, 1
+
+	.align 6
+end:
+	PRINT(endstr)
+	move	a0, s0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, s1
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(0)
+fail:
+	EXIT(4)
+
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+xicustr: .ascii " xicu \0"
+startstr: .ascii "start\n\0"
+endstr: .ascii "end \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl excep
+excep:
+	.set noreorder
+	move	s2, ra
+	mfc0	a0, COP0_CAUSE
+	andi	a0, a0, 0x0400
+	beq	a0, zero, softint
+	nop
+	/* disable timer0 */
+	la	t0, XICU_BASE
+	sw	zero, XICU_PTI_PER(0)(t0)
+
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PRINT(xicustr)
+	la	t0, XICU_BASE
+	lw	a0, XICU_PRIO(0)(t0)
+	PRINTX
+
+	PUTCHAR('\n')
+softint:
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	andi	t0, a0, 0xff00
+	xor	a0, a0, t0
+	mtc0	a0, COP0_CAUSE
+	/* fluch cache line of incr */
+	la	a0, incr
+	mtc2	a0, VC_ICACHE_INVAL
+	//mtc2	a0, VC_ITLB_INVAL
+	move	ra, s2
+	la	s2, fail
+	eret
+	/* we should not end there */
+	EXIT(3)
+	.data
+myvar:	.word 0
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (XICU_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (XICU_BASE >> 21) /* map PA 0xd2000000 at VA 0xd2000000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x0040CC03 cause 0x00000400 pc 0xBFC00088 badva 0x00000000 xicu 0x[01][0-9A-F][01][0-9A-F]0001$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_external_mask/test.S	(revision 724)
@@ -0,0 +1,110 @@
+/*
+ * Check that we can mask an external interrupt
+ */
+#include <registers.h>
+#include <misc.h>
+#include <xicu.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV), enable interrupt 0 */
+	lui     a0, 0x0040;
+	ori	a0, 0xc801;
+	mtc0    a0, COP0_STATUS
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	PRINT(startstr)
+
+	/* program xicu */
+	la	t0, XICU_BASE
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* route PTI0 to irq 0 */
+	li	a0, 1 << 0
+	sw	a0, XICU_MSK_PTI_E(0)(t0)
+	/* interrupt in 10 cycles */
+	li	a0, 10
+	sw	a0, XICU_PTI_PER(0)(t0)
+	/* interrupts still disabled at the MIPS level */
+	li	a0, MAGIC1
+	PRINTX
+	PUTCHAR('\n')
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	/* enable interrupt from timer0 */
+	mfc0	a0, COP0_STATUS
+	ori	a0, 0x0400
+	mtc0	a0, COP0_STATUS
+
+	nop
+	nop
+
+1:	j 1b
+	nop
+	/* we should not end there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PRINT(xicustr)
+	la	t0, XICU_BASE
+	lw	a0, XICU_PRIO(0)(t0)
+	PRINTX
+
+	PUTCHAR('\n')
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	andi	t0, a0, 0xff00
+	xor	a0, a0, t0
+	mtc0	a0, COP0_CAUSE
+	/* we should end there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+xicustr: .ascii " xicu \0"
+startstr: .ascii "start\n\0"
+eretstr: .ascii "eret\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/run	(revision 724)
@@ -0,0 +1,12 @@
+#!/bin/sh 
+
+make --quiet || exit 1
+../platform/simulation.x > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	echo "test passsed";
+	make --quiet clean
+	exit 0;
+fi
+echo "test failed"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_loop_tmp/test.S	(revision 724)
@@ -0,0 +1,166 @@
+/*
+ * Check interrupt/return with interrup occuring at various points in
+ * the software. Cache is enabled to we have on interrupt/cycle
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+#include <xicu.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(startstr)
+
+	/* program xicu */
+	la	t0, XICU_BASE
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* route PTI0 to irq 0 */
+	li	a0, 1 << 0
+	sw	a0, XICU_MSK_PTI_E(0)(t0)
+	/* init s0 */
+	li	s0, MAGIC2
+	/*
+	 * interrupt in INTERRUPT_DELAY cycles.
+	 */
+	li	s2, 1
+	sw	s2, XICU_PTI_PER(0)(t0)
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* reset cop0 status (keep BEV), enable interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0401;
+	mtc0    a0, COP0_STATUS
+
+	nop
+	li      s0, MAGIC1
+	addiu	s0, s0, -1
+loop:	
+	addiu	s0, s0, -1
+	addiu	s0, s0, -1
+	addiu	s0, s0, -1
+	j	bla
+	addiu	s0, s0, 5
+	EXIT(1)
+	addiu	s0, s0, -1
+	.align 6
+bla:
+	addiu	s0, s0, -1
+	li		s1, MAGIC1
+	beq	    s0, s1, loop
+	addiu	s0, s0, -1
+
+	/* we should not end there */
+	EXIT(1)
+
+	.align 6
+end:
+	PRINT(endstr)
+	move	a0, s0
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+xicustr: .ascii " xicu \0"
+startstr: .ascii "start\n\0"
+perstr: .ascii " period \0"
+endstr: .ascii "end \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl excep
+excep:
+	.set noreorder
+	addiu	s0, s0, -10
+	/* disable timer0 */
+	la	t0, XICU_BASE
+	sw	zero, XICU_PTI_PER(0)(t0)
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PRINT(xicustr)
+	la	t0, XICU_BASE
+	lw	a0, XICU_PRIO(0)(t0)
+	PRINTX
+
+//	PRINT(perstr)
+//	move a0, s2
+//	PRINTX
+//
+	PUTCHAR('\n')
+
+#if 0
+	andi s3, s2, 1
+	beqz s3, noflush
+#endif
+	addiu	s0, s0, 10
+
+#if 1
+	// Flush cache of jump routine
+	la s3, bla
+	mtc2 s3, VC_ICACHE_INVAL
+	mtc2 s3, VC_ITLB_INVAL
+#endif
+		
+noflush:
+	addiu s2, s2, 1
+	li s3, 194*2
+	beq s2, s3, end2
+	srl s3, s2, 1
+	la	t0, XICU_BASE
+	sw	s3, XICU_PTI_PER(0)(t0)
+	eret
+	/* we should not end there */
+	EXIT(1)
+end2:
+	EXIT(0)
+
+	.data
+myvar:	.word 0
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (XICU_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (XICU_BASE >> 21) /* map PA 0xd2000000 at VA 0xd2000000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^status 0x0040FF03 cause 0x00000100 pc 0xBFC00074 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_interrupt_mask/test.S	(revision 724)
@@ -0,0 +1,95 @@
+/*
+ * Check that the interrupt mask in status is properly handled:
+ * we generate a software-triggerted interrupt with interrupt enabled but
+ * the software interrupt masked. Later we unmask it.
+ */
+#include <registers.h>
+#include <misc.h>
+
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV), enbale interrupts but mask IM0 */
+	lui     a0, 0x0040;
+	ori	a0, 0xfe01;
+	mtc0    a0, COP0_STATUS
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	PRINT(startstr)
+
+	/* generate an interrupt */
+	mfc0	a0, COP0_CAUSE
+	nop
+	ori	a0, 0x0100
+	mtc0	a0, COP0_CAUSE
+	li	a0, MAGIC1
+	PRINTX
+	PUTCHAR('\n')
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	/* unmask the interrupt */
+	mfc0	a0, COP0_STATUS
+	nop
+	ori	a0, 0x0100
+	mtc0	a0, COP0_STATUS
+	/* we should end here after taking the exeption */
+	li	a0, MAGIC2
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	xori	a0, 0x100
+	mtc0	a0, COP0_CAUSE
+	nop
+	eret
+	/* we should not end there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+eretstr: .ascii "eret\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000DEAD status 0x00400002 cause 0x00000018 pc 0xBFC01000 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval/test.S	(revision 724)
@@ -0,0 +1,135 @@
+/*
+ * itlb inval: a write to VC_ITLB_INVAL should invalidate the corresponding
+ * itlb entry. On a ccvcache, VC_ITLB_INVAL should not be needed, and
+ * the first access after clearing pte2_a should fail
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR(' ')
+	la	a0, pte2_a
+	sw	zero, 8(a0) /* invalidate PTE2 */
+	sync
+	la      a0, pte2_a /* make the sync synchronous */
+	jal	doload /* TLB entry not invalidated yet, we can do this */
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, doload
+	mtc2	a0, VC_ITLB_INVAL /* invalidate VA */
+	jal	doload /* this should fail now */
+	nop
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * one PD with a level 2 PTP: we invalidate an entry in the PTP and
+ * check that the VA is no longer accessible
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_inval2/test.S	(revision 724)
@@ -0,0 +1,142 @@
+/*
+ * itlb inval: a write to a PTE2 should invalidate the corresponding
+ * itlb entry. 
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR(' ')
+	la	t0, pte2_a
+	la	a0, (BOOT_ADDRESS+0x2000) >> 12
+	sw	a0, 12(t0) /* change PTE2 */
+	sync
+1:
+	ll	a0, 8(t0)
+	la	a0, PTE2_V | PTE2_C | PTE2_X
+	sc	a0, 8(t0)
+	beqz	a0, 1b
+	nop
+
+	jal	doload /* now we should get the second value */
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+	.align 12
+	.globl doload2
+doload2:
+	jr      ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(1)
+	nop
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * one PD with a level 2 PTP: we change an entry in the PTP and
+ * check that the ITLB has been invalidated
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started ptpr_b 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^mmu started ptpr_a 0x0000DEAD$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_itlb_ptprinval/test.S	(revision 724)
@@ -0,0 +1,162 @@
+/*
+ * itlb inval on PTPR write: check that no stale entry exists in the itlb
+ * after MMU context swicth
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_b
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr_b)
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+#if 0 /* works with this - this shows the old pte2 address is cached */
+	la	a0, pte2_a
+	lw	a1, 12(a0)
+	la	a0, pte2_b
+	sw	a1, 12(a0)
+#endif
+	PRINT(mmustr_a)
+	jal	doload
+	nop
+	PRINTX
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(3)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr_a: .ascii "mmu started ptpr_a \0"
+mmustr_b: .ascii "mmu started ptpr_b \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+	.org doload + 0x1000 /* in the second page, mapped by pte1_b */
+	jr ra
+	li      a0, MAGIC2
+	/* we should not get there */
+	EXIT(2)
+	nop
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * two PD with two different PTE2 for code: check that itlb points to
+ * the right one by executing 2 different code at the same address
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+pte2_b:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x2000) >> 12
+	.org pte2_b + 4092
+	.word 0
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
+	.globl pte1_b
+pte1_b:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_b + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x2000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_b !!! */
+	.org pte1_b + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_b + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_b + 8188
+	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x0000DEAD 0x0000DEAD 0x0000BEEF 0x0000DEAD$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_llsc/test.S	(revision 724)
@@ -0,0 +1,113 @@
+/*
+ * Check interraction between cached read/write and ll/sc
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	/* make sure myvar is in cache */
+	la	s1, myvar 
+	lw	a0, 0(s1)
+	PRINTX
+	PUTCHAR(' ')
+
+	/* now write to myvar via ll/sc */
+	la	s1, myvar 
+1:
+	ll	a0, 0(s1)
+	li	a1, MAGIC2
+	sc	a1, 0(s1)
+	beqz	a1, 1b
+	nop
+
+	PRINTX /* print what we read with ll */
+	PUTCHAR(' ')
+
+	la	s1, myvar 
+	lw	a0, 0(s1) /* print the new value */
+	PRINTX
+	PUTCHAR(' ')
+
+	/* restore myvar value via normal write */
+	la	s1, myvar 
+	li	a1, MAGIC1
+	sw	a1, 0(s1)
+
+	/* read myvar */
+	lw	a0, 0(s1)
+	PRINTX
+	PUTCHAR('\n');
+	
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+value:	.word 0x1234abcd
+string: .ascii "hello world \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+myvar:	.word MAGIC1
+	.globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00200000: 0x0000DEAD$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^0x00000000: status 0x00400006 cause 0x0000001C pc 0xBFC00098 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_mmu_basic/test.S	(revision 724)
@@ -0,0 +1,102 @@
+/*
+ * Basic MMU checks: we can read mapped addresses, we can't read unmapped
+ * addresses
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+
+	/* we can read our magic number at 0x00200000 */
+	la	s0, 0x00200000
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	lw	a0, 0(s0)
+	PRINTX
+	PUTCHAR('\n')
+	/* but not at 0x00000000 */
+	la	s0, 0x00000000
+	move	a0, s0
+	PRINTX
+	PUTCHAR(':')
+	PUTCHAR(' ')
+	lw	a0, 0(s0) /* this should trigger the exception */
+	PRINTX
+
+	/* we shouldn't get there */
+        EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	li	a0, '\n'
+	sb	a0, 0(k0)
+
+        EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+testval:
+	.word MAGIC1
+	.align 13
+	.globl pte1
+pte1:
+	.word 0x0                            /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0x00200000 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x8A000000 0xAA000000 0xAA000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2i_ref/test.S	(revision 724)
@@ -0,0 +1,144 @@
+/*
+ * instruction fetch causes the PTE_L bit to be set
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la	s0, pte2_a
+	lw	s1, 8(s0)
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	beq	a0, a1, fail /* PTE2_L already set, not good */
+	nop
+	jal	doload /* cause page to be referenced */
+	nop
+	lw	s1, 8(s0)
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set not good */
+	nop
+	/* check again, using ll */
+	ll	s1, 8(s0)
+	move	a0, s1
+	PRINTX
+	PUTCHAR('\n')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set not good */
+	nop
+	EXIT(0)
+fail:
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	/*
+	 * code that will be switched by MMU switch.
+	 * we use a ldscript trick here, to load this function at
+	 * the appropriate address
+	 */
+	.section .text2, "ax"
+	.globl doload
+doload:
+	jr      ra
+	li      a0, MAGIC1
+	/* we should not get there */
+	EXIT(1)
+	nop
+
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+
+/*
+ * one PD with a level 2 PTP: we invalidate an entry in the PTP and
+ * check that the VA is no longer accessible
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word BOOT_ADDRESS >> 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word (BOOT_ADDRESS+0x1000) >> 12
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word 0x0
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0xbfc00000 at VA 0xbfc00000 with 4k page: check real address of pte2_a !!! */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x8A000000 0xAA000000 0xAA000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2ll_ref/test.S	(revision 724)
@@ -0,0 +1,132 @@
+/*
+ * pte2d_ref: a ll to data should set referenced bit in PTE
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la 	s0, pte2_a
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	beq	a0, a1, fail /* PTE2_L already set, not good */
+	nop
+
+	la	t0, testval + 0x00200000
+	ll 	a0, 0(t0); /* cause page to be referenced */
+
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	/* check again, using ll */
+	ll	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR('\n')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	EXIT(0)
+fail:
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+/*
+ * one PD with a level 2 PTP: we invalidate an entry in the PTP and
+ * check that the VA is no longer accessible
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x8A000000 0xAA000000 0xAA000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2lw_ref/test.S	(revision 724)
@@ -0,0 +1,132 @@
+/*
+ * pte2d_ref: a lw to data should set referenced bit in PTE
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la 	s0, pte2_a
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	beq	a0, a1, fail /* PTE2_L already set, not good */
+	nop
+
+	la	t0, testval + 0x00200000
+	lw 	a0, 0(t0); /* cause page to be referenced */
+
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	/* check again, using ll */
+	ll	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR('\n')
+	la	a1, PTE2_L
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	EXIT(0)
+fail:
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+/*
+ * one PD with a level 2 PTP: we invalidate an entry in the PTP and
+ * check that the VA is no longer accessible
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x8E000000 0xAE400000 0xAE400000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sc_dirty/test.S	(revision 724)
@@ -0,0 +1,137 @@
+/*
+ * pte2d_ref: a sc to data should set the dirty bits in PTE
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la 	s0, pte2_a
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, (PTE2_L | PTE2_D)
+	and	a0, s1, a1
+	bne	a0, zero, fail /* PTE2_L or PTE2_D already set, not good */
+	nop
+
+	la	t0, testval + 0x00200000
+	la	a1, MAGIC3
+1:
+	ll	a0, 0(t0)
+	sc 	a1, 0(t0); /* cause page to be referenced and dirty */
+	beqz	a1, 1b
+	nop
+
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, (PTE2_L | PTE2_D)
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	/* check again, using ll */
+	ll	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR('\n')
+	la	a1, (PTE2_L | PTE2_D)
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	EXIT(0)
+fail:
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+/*
+ * one PD with a level 2 PTP: we invalidate an entry in the PTP and
+ * check that the VA is no longer accessible
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X | PTE2_W
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/Makefile	(revision 724)
@@ -0,0 +1,2 @@
+LDSCRIPT=./ldscript
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/ldscript	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ *
+ * SOCLIB_GPL_HEADER_BEGIN
+ * 
+ * This file is part of SoCLib, GNU GPLv2.
+ * 
+ * SoCLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ * 
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ * 
+ * SOCLIB_GPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, SoC
+ *         Nicolas Pouillon <nipo@ssji.net>, 2006-2007
+ *
+ * Maintainers: abdelmalek.si-merabet@lip6.fr
+ */
+ENTRY(_start)
+
+SECTIONS
+{
+   . = 0xbfc00000;
+   .text : {
+      *(.text)
+/* load .text2 one page after .text */
+      . = ALIGN(0x1000);
+      *(.text2)
+   }
+   .rodata : {
+      *(.rodata)
+      . = ALIGN(4);
+   }
+   . = 0x00000000;
+   .data  : {
+      *(.data)
+   }
+   .sdata : {
+      *(.lit8)
+      *(.lit4)
+      *(.sdata)
+   }
+   _gp = .;
+   . = ALIGN(4);
+   _edata = .;
+   .sbss  : {
+      *(.sbss)
+      *(.scommon)
+   }
+   .bss   : {
+      *(.bss)
+      *(COMMON)
+   }
+   . = ALIGN(4);
+   _end = .;
+   _heap = .;
+   _stack = 0x00400000-16;
+}
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^mmu started 0x8E000000 0xAE400000 0xAE400000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte2sw_dirty/test.S	(revision 724)
@@ -0,0 +1,132 @@
+/*
+ * pte2d_ref: a sw to data should set referenced and dirty bits in PTE
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1_a
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT(mmustr)
+	la 	s0, pte2_a
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, (PTE2_L | PTE2_D)
+	and	a0, s1, a1
+	bne	a0, zero, fail /* PTE2_L or PTE2_D already set, not good */
+	nop
+
+	la	t0, testval + 0x00200000
+	sw 	a0, 0(t0); /* cause page to be referenced and dirty */
+
+	lw	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	la	a1, (PTE2_L | PTE2_D)
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	/* check again, using ll */
+	ll	s1, 0(s0) /* get PTE */
+	move	a0, s1
+	PRINTX
+	PUTCHAR('\n')
+	la	a1, (PTE2_L | PTE2_D)
+	and	a0, s1, a1
+	bne	a0, a1, fail /* PTE2_L not set, not good */
+	nop
+
+	EXIT(0)
+fail:
+	/* we should not get there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr: .ascii "mmu started \0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+	/* first 2 pages is data that will be switched my mmu switch */
+data_a:
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte2_a
+/*
+ * one PD with a level 2 PTP: we invalidate an entry in the PTP and
+ * check that the VA is no longer accessible
+ */
+pte2_a:
+	.align 12
+	.word PTE2_V | PTE2_C | PTE2_X | PTE2_W
+	.word 0x0000 >> 12 /* check real value of data_a */
+	.org pte2_a + 4092
+	.word 0
+	.globl pte2_b
+	.globl pte1_a
+pte1_a:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2_a */
+	.org pte1_a + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1_a + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1_a + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1_a + 8192
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x00000000 0xAC4000FF 0xAC4000FF 0x00000000$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_pte_llsc/test.S	(revision 724)
@@ -0,0 +1,124 @@
+/*
+ * Check that the MMU doens't clobber the OS bits in PTEs, and interraction
+ * with ll/sc
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	/* do a swap of pte2[0] to make the entry valid */
+	la	s0, pte2 + 0x00200000
+1:	la	a1, PTE2_V | PTE2_C | PTE2_W | PTE2_os
+	ll	a0, 0(s0)
+	sc	a1, 0(s0)
+	beqz	a1, 1b
+	nop
+	PRINTX
+	PUTCHAR(' ')
+	/* now write to myvar via pte2[0] */
+	li	a0, MAGIC2
+	la	s1, myvar + 0x00200000
+	sw	a0, 0(s1)
+	/*
+	 * and invalidate pte2[0], again using a swap
+	 * check that we get the same value with lw and ll
+	 */
+	lw	s1, 0(s0)
+2:
+	move	a1, zero
+	ll	a0, 0(s0)
+	sc	a1, 0(s0)
+	beqz	a1, 2b
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, s1
+	PRINTX
+	PUTCHAR(' ')
+	/* finally check what lw tells us now */
+	lw	a0, 0(s0)
+	PRINTX
+	PUTCHAR('\n')
+
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+value:	.word 0x1234abcd
+string: .ascii "hello world \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+myvar:	.word MAGIC1
+	.globl pte1
+pte2:
+	.align 12
+	.word 0	/* invalid for now */
+	.word 0x0000 >> 12 /* check real value of myvar */
+	.word PTE2_V | PTE2_C | PTE2_W | PTE2_os /* map pte2 too */
+	.word 0x1000 >> 12 /* check real address of pte2 */
+	.org pte2 + 4092
+	.word 0
+	.globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.word PTE1_V | PTE1_T | (0x1000 >> 12) /* map PA 0x0 at VA 0x00200000 via pte2 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x00000028 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ri/test.S	(revision 724)
@@ -0,0 +1,65 @@
+/*
+ * reserved instruction exception test: check that a reserved instruction
+ * generates an exception.
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	.word 0x60000000
+	EXIT(2)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+#we should end there
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x80000028 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_ri_delayslot/test.S	(revision 724)
@@ -0,0 +1,86 @@
+/*
+ * reserved instruction exception test: check that a reserved instruction
+ * in a delay slot is properly handled
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	j	exit
+	.word 0x60000000
+	nop
+	/* we should not get there, */
+	EXIT(2)
+	.globl exit
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, exit
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^hello world 0x1234ABCD$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sanity/test.S	(revision 724)
@@ -0,0 +1,42 @@
+/*
+ * Basic sanity checks:
+ *   we can run a program
+ *   we can write to ram
+ *   we can write to the tty
+ *   we can make the simulator exit
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	la	t0, value
+	lw	t0, 0(t0)
+	la	t1, myvar
+	sw	t0, 0(t1)
+
+	la	a0, string
+	jal	print
+	nop
+
+	la	t1, myvar
+	lw	a0, 0(t1)
+	jal	printx
+	nop
+
+	li	a0, '\n'
+	sb	a0, 0(k0)
+
+	EXIT(0)
+
+	.rodata:
+value:	.word 0x1234abcd
+string: .ascii "hello world \0"
+
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x0000DEAD 0x00000000$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_no_ll/test.S	(revision 724)
@@ -0,0 +1,104 @@
+/*
+ * check that a sc without ll does fail
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	/* make sure myvar is in cache */
+	la	s1, myvar 
+	lw	a0, 0(s1)
+	PRINTX
+	PUTCHAR(' ')
+
+	/* now write to myvar with sc, without ll first */
+	la	s1, myvar 
+1:
+	li	a1, MAGIC2
+	sc	a1, 0(s1)
+	beqz	a1, 2f
+	nop
+	
+	move a0, a1
+	PRINTX
+	/* we should not get there */
+	EXIT(1)
+
+2:
+	/* we jump here when the sc failed */
+	move a0, a1
+	PRINTX
+	PUTCHAR('\n');
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+value:	.word 0x1234abcd
+string: .ascii "hello world \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+myvar:	.word MAGIC1
+	.globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -eq 0 ]; then
+		return 0;
+	fi
+	echo "couldn't find string in output - mtty not working ?" >> run.out
+	return 1
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sc_update_cache/test.S	(revision 724)
@@ -0,0 +1,80 @@
+/*
+ * Check that lc also updates the local L1 cache.
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	/* enable caches */
+	li	a0, VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	/* fetch data in cache */
+	la	s0, myvar
+	lw	a0, 0(s0)
+	/* write magic value */
+	li	a0, MAGIC1
+	sw	a0, 0(s0)
+	/* ll/sc another value on the same address */
+2:
+	ll	a0, 0(s0)
+	PRINTX
+	PUTCHAR(' ')
+	li	a0, MAGIC2
+	sc	a0, 0(s0)
+	beqz	a0, 2b
+	/* now check that we got the right value in cache */
+	lw	a0, 0(s0)
+	PRINTX
+	PUTCHAR('\n')
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+value:	.word 0x1234abcd
+string: .ascii "hello world \0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh 
+
+check_output()
+{
+	egrep "^@@@@@@$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_sync/test.S	(revision 724)
@@ -0,0 +1,101 @@
+/*
+ * sync test: we map the tty cached. If sync doesn't work some chars will be
+ * lost because writes are combined in the write buffer.
+ */
+#include <registers.h>
+#include <misc.h>
+#include <vcache.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	PRINT_SYNC(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+
+	la	a0, pte1
+	srl	a0, a0, 13
+	mtc2	a0, VC_PTPR
+	nop
+
+	li	a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
+	mtc2 	a0, VC_TLB_EN
+
+	PRINT_SYNC(mmustr)
+
+	/*
+	 * print several chars quickly: without sync not all of them will
+	 * show up
+	 */
+#define WRITE_TTY sb a0, 0(k0); sync
+	la a0, '@'
+	WRITE_TTY
+	WRITE_TTY
+	WRITE_TTY
+	WRITE_TTY
+	WRITE_TTY
+	WRITE_TTY
+	PUTCHAR('\n')
+
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PUTCHAR('\n')
+	/* we should not get there */
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+mmustr:	.ascii "mmu started\n\0"
+startstr: .ascii "start\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
+	.globl pte1
+pte1:
+	.align 13
+	.word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0 */
+	.org pte1 + (BOOT_ADDRESS >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
+	.org pte1 + (TTY_BASE >> 21) * 4
+	.word PTE1_V | PTE1_C | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 *cached!* */
+	.org pte1 + (EXIT_BASE >> 21) * 4
+	.word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
+	.org pte1 + 8192
+	.word 0
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400012 cause 0x00000020 pc 0xBFC00050 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^0x0000DEAD 0x0000BEEF$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall/test.S	(revision 724)
@@ -0,0 +1,91 @@
+/*
+ * syscall test: check that a syscall generates an exception, and we can
+ * return 
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	/* switch to user mode */
+	mfc0	a0, COP0_STATUS
+	ori	a0, 0x10
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	PRINT(usrstr)
+	syscall
+	bne a3, zero, exit
+	nop
+	/* we should not get there, a3 is not 0 */
+	EXIT(2)
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	mfc0	a0, COP0_EXPC
+	addiu	a0, a0, 4
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/run	(revision 724)
@@ -0,0 +1,33 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400012 cause 0x80000020 pc 0xBFC00050 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	egrep "^usrmode$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 2 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_syscall_delayslot/test.S	(revision 724)
@@ -0,0 +1,90 @@
+/*
+ * syscall test: check that a syscall in a delay slot is properly handled
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	/* switch to user mode */
+	mfc0	a0, COP0_STATUS
+	ori	a0, 0x10
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	PRINT(usrstr)
+	j	exit
+	syscall
+	nop
+	/* we should not get there, */
+	EXIT(2)
+	.globl exit
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, exit
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x00000034 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_trap/test.S	(revision 724)
@@ -0,0 +1,64 @@
+/*
+ * trap test: check that a we can generate a trap
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	teq	zero, zero
+	EXIT(2)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+#we should end there
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400002 cause 0x80000034 pc 0xBFC00034 badva 0x00000000$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string 1 in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_trap_delayslot/test.S	(revision 724)
@@ -0,0 +1,85 @@
+/*
+ * trap test: check that a trap in a delay slot is
+ * properly handled
+ */
+#include <registers.h>
+#include <misc.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+	la	sp, 0x00400000 - 16
+
+	PRINT(startstr)
+
+	/* reset cop0 status (keep BEV) */
+	lui	a0, 0x0040;
+	mtc0	a0, COP0_STATUS
+	nop
+	nop
+	nop
+	j exit
+	teq	zero, zero
+	/* we should not get there, */
+	EXIT(2)
+	.globl exit
+exit:
+	move	a0, v0
+	PRINTX
+	PUTCHAR(' ')
+	move	a0, v1
+	PRINTX
+	PUTCHAR('\n')
+	/* we should get there */
+	EXIT(0)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+	PUTCHAR('\n')
+	la	a0, exit
+	mtc0	a0, COP0_EXPC
+	li	v0, MAGIC1
+	li	v1, MAGIC2
+	li	a3, 1
+	eret
+	nop
+
+#we should not end there
+	EXIT(1)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+startstr: .ascii "start\n\0"
+usrstr: .ascii "usrmode\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+	.word MAGIC1
+testval:
+	.word MAGIC2
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/Makefile	(revision 724)
@@ -0,0 +1,1 @@
+include ../Makefile.inc
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/run
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/run	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/run	(revision 724)
@@ -0,0 +1,28 @@
+#!/bin/sh 
+
+. ../common/common.sh
+
+check_output()
+{
+	egrep "^status 0x00400403 cause 0x[08]0000400 pc 0xBFC00040 badva 0x00000000 xicu 0x[01][0-9A-F][01][0-9A-F]0001$" run.out > /dev/null
+	if [ $? -ne 0 ]; then
+		echo "couldn't find string in output - mtty not working ?" >> run.out
+		return 1
+	fi
+	return 0;
+}
+
+make --quiet || exit 1
+${SIMUL} > run.out 2>&1 
+if [ $? -eq 0 ]; then
+	if check_output; then
+		echo "test passsed";
+		make --quiet clean
+		exit 0;
+	fi
+	echo "test FAILED"
+	exit 1
+fi
+echo "test FAILED"
+exit 1
+
Index: /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/test.S
===================================================================
--- /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/test.S	(revision 724)
+++ /branches/fault_tolerance/softs/tests_cc_vcache/test_xicu_timer/test.S	(revision 724)
@@ -0,0 +1,89 @@
+/*
+ * Check that we can take an interrupt from the xicu timer0
+ */
+#include <registers.h>
+#include <misc.h>
+#include <xicu.h>
+
+	.text
+	.globl  _start
+_start:
+	.set noreorder
+	la	k0, TTY_BASE
+	la	k1, EXIT_BASE
+
+	/* reset cop0 status (keep BEV), enable interrupt 0 */
+	lui     a0, 0x0040;
+	addiu	a0, 0x0401;
+	mtc0    a0, COP0_STATUS
+
+	/* reset cause, make sure IV is off */
+	mtc0	zero, COP0_CAUSE
+
+	PRINT(startstr)
+
+	/* program xicu */
+	la	t0, XICU_BASE
+	/* clear pending interrupt */
+	lw	a0, XICU_PTI_ACK(0)(t0)
+	/* route PTI0 to irq 0 */
+	li	a0, 1 << 0
+	sw	a0, XICU_MSK_PTI_E(0)(t0)
+	/* interrupt in 10 cycles */
+	li	a0, 10
+	sw	a0, XICU_PTI_PER(0)(t0)
+
+1:	j 1b
+	nop
+	/* we should not end there */
+	EXIT(1)
+
+	.globl excep
+excep:
+	.set noreorder
+	PRINT(statusstr)
+	mfc0	a0, COP0_STATUS
+	PRINTX
+
+	PRINT(causestr)
+	mfc0	a0, COP0_CAUSE
+	PRINTX
+
+	PRINT(pcstr)
+	mfc0	a0, COP0_EXPC
+	PRINTX
+
+	PRINT(badvastr)
+	mfc0	a0, COP_0_BADVADDR
+	PRINTX
+
+	PRINT(xicustr)
+	la	t0, XICU_BASE
+	lw	a0, XICU_PRIO(0)(t0)
+	PRINTX
+
+	PUTCHAR('\n')
+	/* clear interrupt */
+	mfc0	a0, COP0_CAUSE
+	andi	t0, a0, 0xff00
+	xor	a0, a0, t0
+	mtc0	a0, COP0_CAUSE
+	/* we should end there */
+	EXIT(0)
+
+	.rodata:
+statusstr: .ascii "status \0"
+causestr: .ascii " cause \0"
+pcstr: .ascii " pc \0"
+badvastr: .ascii " badva \0"
+xicustr: .ascii " xicu \0"
+startstr: .ascii "start\n\0"
+eretstr: .ascii "eret\n\0"
+
+	.org EXCEP_ADDRESS - BOOT_ADDRESS
+	.globl evect
+evect:
+	j	excep
+	nop
+	.data
+myvar:	.word 0
Index: /branches/fault_tolerance/softs/tsar_boot/Doxyfile
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/Doxyfile	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/Doxyfile	(revision 724)
@@ -0,0 +1,1869 @@
+# Doxyfile 1.8.3.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = "TSAR Pre-loader"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES (the
+# default) will make doxygen replace the get and set methods by a property in
+# the documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penalty.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will roughly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if section-label ... \endif
+# and \cond section-label ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path. Do not use
+# file names with spaces, bibtex cannot handle them.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  = .
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page (index.html).
+# This can be useful if you have a project on for instance GitHub and want reuse
+# the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+#  for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
+# SVG. The default value is HTML-CSS, which is slower, but has the best
+# compatibility.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript.
+# There are two flavours of web server based search depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools.
+# See the manual for details.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain
+# the search results. Doxygen ships with an example indexer (doxyindexer) and
+# search engine (doxysearch.cgi) which are based on the open source search engine
+# library Xapian. See the manual for configuration details.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will returned the search results when EXTERNAL_SEARCH is enabled.
+# Doxygen ships with an example search engine (doxysearch) which is based on
+# the open source search engine library Xapian. See the manual for configuration
+# details.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
+# of to a relative location where the documentation can be found.
+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
Index: /branches/fault_tolerance/softs/tsar_boot/Makefile
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/Makefile	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/Makefile	(revision 724)
@@ -0,0 +1,145 @@
+# let the user have a default configuration (ie for PLATFORM_DIR and SOCLIB)
+-include ./build.mk
+
+MAKECMDGOALS ?= none
+RAMDISK      ?= 0
+SOCLIB       ?= 0
+
+ifneq ($(MAKECMDGOALS),$(filter $(MAKECMDGOALS),clean distclean clean-doc doc))
+  ifndef PLATFORM_DIR
+    $(error please define PLATFORM_DIR 'make PLATFORM_DIR=foo')
+  else
+    ifeq ($(SOCLIB),1)
+      ifeq ($(RAMDISK),1)
+        DEFS+= -DUSE_RDK
+      else
+        DEFS+= -DUSE_BDV
+      endif
+      DTS=platform_soclib.dts
+      $(info Make for $(PLATFORM_DIR), SocLib variant)
+    else
+      DEFS+= -DUSE_SPI
+      DTS=platform_fpga.dts
+      $(info Make for $(PLATFORM_DIR), FPGA variant)
+    endif
+  endif
+endif
+
+LD         := mipsel-unknown-elf-ld
+CC         := mipsel-unknown-elf-gcc
+AS         := mipsel-unknown-elf-as
+DU         := mipsel-unknown-elf-objdump
+RM         := rm -rf
+ECHO       := @echo
+MKDIR      := mkdir
+DTC        := dtc
+HEXDUMP    := hexdump
+DOXYGEN    := doxygen
+
+BUILD_DIR  := build
+SRCS_DIR   := src
+INCS_DIR   := include
+
+# =============================================================================
+# Include files paths
+# =============================================================================
+
+INCLUDE    += -I. -I$(INCS_DIR) -I$(PLATFORM_DIR)
+
+# =============================================================================
+# Paths of sources in another directories
+# =============================================================================
+
+VPATH      += $(SRCS_DIR)
+VPATH      += $(PLATFORM_DIR)
+
+# =============================================================================
+# Object files
+# =============================================================================
+
+CFLAGS     := -Wall                \
+              -mno-gpopt           \
+              -ffreestanding       \
+              -fomit-frame-pointer \
+              -mips32              \
+              -ggdb                \
+              -mlong-calls         \
+              -O2                  \
+              -Werror
+
+C_SRCS     := reset_elf_loader.c \
+              reset_ioc.c        \
+              reset_utils.c      \
+              reset_tty.c        \
+              reset_exception.c
+
+ifeq ($(SOCLIB),0)
+  C_SRCS   += sdcard.c spi.c
+endif
+
+S_SRCS     := reset.S
+
+OBJS       := $(subst .c,.o, $(notdir $(C_SRCS)))
+OBJS       += $(subst .S,.o, $(notdir $(S_SRCS)))
+OBJS       := $(addprefix $(BUILD_DIR)/, $(OBJS))
+
+TARGET     := preloader.elf
+
+USE_DT     ?= 1
+
+all: $(TARGET)
+
+$(BUILD_DIR)/version.o: $(BUILD_DIR) $(OBJS) version version.sh
+	$(ECHO) "[version.sh]"
+	./version.sh > $(BUILD_DIR)/version.c
+	$(ECHO) "[   CC    ]     $(BUILD_DIR)/version.c"
+	$(CC) $(DEFS) $(CFLAGS) $(INCLUDE) -c -o $@ $(BUILD_DIR)/version.c
+	$(DU) -D $@ > $@.txt
+
+$(TARGET): $(BUILD_DIR) $(BUILD_DIR)/version.o $(OBJS) $(PLATFORM_DIR)/ldscript $(BUILD_DIR)/platform.ld
+	$(ECHO) "[   LD    ]     $@"
+	$(LD) -o $@ -T $(PLATFORM_DIR)/ldscript $(OBJS) $(BUILD_DIR)/version.o
+	$(DU) -D $@ > $@.txt
+
+ifeq ($(USE_DT), 1)
+$(BUILD_DIR)/platform.ld: $(BUILD_DIR)/platform.dtb
+	$(ECHO) "[ HEXDUMP ]     $(notdir $<)"
+	$(HEXDUMP) -v -e '"BYTE(0x" 1/1 "%02X" ")\n"' $< > $@
+else
+$(BUILD_DIR)/platform.ld:
+	$(ECHO) "[  TOUCH  ]     $(notdir $@)"
+	touch $@
+endif
+
+$(BUILD_DIR)/platform.dtb: $(DTS)
+	$(ECHO) "[   DTC   ]     $(notdir $<)"
+	${DTC} -O dtb -o $@ $< &> /dev/null
+
+$(BUILD_DIR):
+	$(MKDIR) $@
+
+doc: Doxyfile
+	$(DOXYGEN) Doxyfile
+
+clean:
+	$(RM) $(TARGET).txt $(TARGET) *~ $(BUILD_DIR)
+
+clean-doc:
+	$(RM) doc
+
+distclean: clean clean-doc
+
+# =============================================================================
+# Implicit makefile rules
+
+$(BUILD_DIR)/%.o: %.c
+	$(ECHO) "[   CC    ]     $(notdir $<)"
+	$(CC) $(DEFS) $(CFLAGS) $(INCLUDE) -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+$(BUILD_DIR)/%.o: %.S
+	$(ECHO) "[   AS    ]     $(notdir $<)"
+	$(CC) $(DEFS) ${INCLUDE} -g -mips32 -c -o $@ $<
+	$(DU) -D $@ > $@.txt
+
+.SILENT:
Index: /branches/fault_tolerance/softs/tsar_boot/README
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/README	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/README	(revision 724)
@@ -0,0 +1,97 @@
+TSAR BOOT LOADER
+
+Files:
+===============================================================================
+src/        Source files
+            The entry point of this boot loader is the file reset.S
+
+include/    Header files
+
+conf/       Platform specific files and ldscript examples.
+            For each platform, we must define a new directory.
+
+            - defs_platform.h:
+
+              This file is mandatory. This file defines the NB_PROCS per
+              cluster, the NB_CLUSTERS and the base address of the TTY, IOC,
+              XICU and MEMC (config) devices. It defines also:
+
+                #define USE_IOB
+
+                  This constant is used by the boot_ioc_read function to know
+                  if the buffer used to store the blocks from the block_device
+                  must be invalidated in the memory cache after the transfert
+                  has finished.
+
+                #define CACHE_COHERENCE
+
+                  This constant is used by the boot_ioc_read function to know
+                  if the buffer used to store the blocks from the block_device
+                  must be invalidated in the dcache after the transfert has
+                  finished.
+
+                #define CACHE_LINE_SIZE
+                  
+                  This constant is mandatory if CACHE_COHERENCE=0 or USE_IOB=1
+                  This constant defines the size in bytes of a cache line.
+
+                #define RESET_DEBUG
+
+                  Set value to 1 to show some debug messages during loading 
+
+                #define IRQ_PER_PROC
+
+                  This constant is used to know how many XICU irq outputs are
+                  connected to each processor.
+
+            - platform_soclib.dts:
+
+              Device tree file. It is mandatory if compiling for a SOCLIB
+              platform and USE_DT=1.
+
+            - platform_fpga.dts:
+
+              Device tree file. It is mandatory if compiling for a FPGA
+              platform and USE_DT=1.
+
+            - ldscript:
+
+              LD script defining the segments of this boot loader.
+              We define two segments:
+
+                seg_stack_base:
+
+                  Base address of the stack used by processor 0 during the boot
+                  process. read-write data and bss will also be there.
+
+                seg_boot_base:
+                
+                  Base address of the code and read-only data defined for this
+                  loader
+            
+Makefile    Makefile to compile the boot loader. Arguments to pass:
+
+              PLATFORM_DIR=<platform_dir>
+    
+                Defines the directory where to find the plateform specific
+                files
+
+              SOCLIB=1
+
+                If using SOCLIB, define this flag to use the BLOCK DEVICE
+                driver and to choose the platform_soclib device tree.
+
+              RAMDISK=1
+
+                If using SOCLIB, define this flag to use a RAMDISK instead of
+                BLOCK DEVICE (Set this flag when the SOCLIB flag is also set)
+
+              USE_DT=0
+
+                If a device tree file is not used, set this flag to 0. It is
+                set by default to 1.
+
+              e.g. make PLATFORM_DIR=<platform_conf> \
+                        SOCLIB=1 \
+                        USE_DT=0 \
+                        RAMDISK=0
Index: /branches/fault_tolerance/softs/tsar_boot/VERSION
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/VERSION	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/VERSION	(revision 724)
@@ -0,0 +1,1 @@
+1.1
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/defs_platform.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/defs_platform.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/defs_platform.h	(revision 724)
@@ -0,0 +1,20 @@
+#define NB_PROCS        1
+#define NB_CLUSTERS     1
+
+#define IRQ_PER_PROC    1
+
+#define USE_IOB         0
+#define CACHE_COHERENCE 1
+#define CACHE_LINE_SIZE 64//bytes
+
+#define RESET_DEBUG     0
+
+#define ICU_PADDR_BASE  0xFD000000
+#define MCC_PADDR_BASE  0xFFFFFFFF // not used
+#define IOC_PADDR_BASE  0xFB000000
+#define TTY_PADDR_BASE  0xFC000000
+#define RDK_PADDR_BASE  0xFFFFFFFF // not used
+
+/* Mandatory argument only for FPGA platforms */ 
+
+#define SYSCLK_FREQ     25000000//Hz
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/ldscript	(revision 724)
@@ -0,0 +1,37 @@
+/**********************************************************
+  File   : ldscript 
+  Author : Cesar Fuguet
+  Date   : June 2011
+**********************************************************/
+
+/* Definition of the base address for code segment */ 
+
+seg_reset_code_base     = 0xBFC00000; 
+
+seg_reset_stack_base    = 0x08000000 - 0x4000;; 
+seg_reset_stack_size    = 0x4000; 
+
+/* Grouping sections into segments */
+
+ENTRY(reset)
+
+SECTIONS
+{
+    . = seg_reset_code_base;
+    .text : 
+    {
+        *(.reset)
+        *(.rodata)
+        *(.rodata.*)
+        . = ALIGN(0x4);
+        dtb_addr = .;
+        INCLUDE "build/platform.ld";
+    }
+
+    . = seg_reset_stack_base;
+    .bss ALIGN(0x4) (NOLOAD) : 
+    {
+        *(.data)
+        *(.bss)
+    }
+}
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/platform_fpga.dts
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/platform_fpga.dts	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/platform_fpga.dts	(revision 724)
@@ -0,0 +1,98 @@
+/dts-v1/;
+
+/ {
+    #address-cells = <0x1>;
+    #size-cells = <0x1>;
+
+    cpus {
+        #address-cells = <0x1>;
+        #size-cells = <0x0>;
+
+        Mips,32@0 {
+            device_type = "cpu";
+            icudev_type = "cpu:mips";
+            name = "Mips,32";
+            reg = <0x00000000>;
+        };
+    };
+
+    memory@0x00000000 {
+        cached = <0x1>;
+        device_type = "memory";
+        reg = <0x00000000 0x08000000>;
+    };
+
+    memory@0xbfc00000 {
+        cached = <0x1>;
+        device_type = "rom";
+        reg = <0xbfc00000 0x00010000>;
+    };
+
+    tty@0xfc000000 {
+        device_type = "vci:tty";
+        irq = <&{/xicu@0xfd000000} 0x0>;
+        reg = <0xfc000000 0x00000010>;
+        tty_count = <0x1>;
+    };
+
+    blockdevice@0xfb000000 {
+        device_type = "vci:ioc";
+        irq = <&{/xicu@0xfd000000} 0x1>;
+        reg = <0xfb000000 0x00000020>;
+    };
+
+    fb@0xfa000000 {
+		device_type = "soclib:frame_buffer";
+		reg = <0xfa000000 0x00200000>;
+		mode = <16>;
+		width = <640>;
+		height = <480>; 
+    };
+
+    vcikbc@0xfe000000 {
+        device_type = "vci:ps2";
+        irq = <&{/xicu@0xfd000000} 0x2>;
+        reg = <0xfe000000 0x00000020>;
+	ports = <0x2>;
+    };
+
+
+    xicu@0xfd000000 {
+        device_type = "soclib:xicu:root";
+        input_lines = <0x2>;
+        ipis = <0x1>;
+        reg = <0xfd000000 0x00001000>;
+        timers = <0x1>;
+		timer-freq = <25000000>;
+
+        out@0 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@0} 0x0>;
+            output_line = <0x0>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@1 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@0} 0x1>;
+            output_line = <0x1>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@2 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@0} 0x2>;
+            output_line = <0x2>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+    };
+
+  topology {
+    #address-cells = <2>;
+    #size-cells = <0>;
+    cluster@0,0 {
+    	reg = <0 0>;
+    	devices = <&{/cpus/Mips,32@0} &{/xicu@0xfd000000} &{/tty@0xfc000000} &{/blockdevice@0xfb000000} &{/fb@0xfa000000} &{/vcikbc@0xfe000000} >;
+    };
+  };
+};
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/platform_soclib.dts
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/platform_soclib.dts	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_fpga_de2-115/platform_soclib.dts	(revision 724)
@@ -0,0 +1,176 @@
+/dts-v1/;
+
+/ {
+    #address-cells = <0x1>;
+    #size-cells = <0x1>;
+
+    cpus {
+        #address-cells = <0x1>;
+        #size-cells = <0x0>;
+
+        Mips,32@0 {
+            device_type = "cpu";
+            icudev_type = "cpu:mips";
+            name = "Mips,32";
+            reg = <0x00000000>;
+        };
+
+        Mips,32@1 {
+            device_type = "cpu";
+            icudev_type = "cpu:mips";
+            name = "Mips,32";
+            reg = <0x00000001>;
+        };
+
+        Mips,32@2 {
+            device_type = "cpu";
+            icudev_type = "cpu:mips";
+            name = "Mips,32";
+            reg = <0x00000002>;
+        };
+
+        Mips,32@3 {
+            device_type = "cpu";
+            icudev_type = "cpu:mips";
+            name = "Mips,32";
+            reg = <0x00000003>;
+        };
+    };
+
+    memory@0x00000000 {
+        cached = <0x1>;
+        device_type = "memory";
+        reg = <0x00000000 0x08000000>;
+    };
+
+    memory@0xbfc00000 {
+        cached = <0x1>;
+        device_type = "rom";
+        reg = <0xbfc00000 0x00400000>;
+    };
+
+    tty@0xfc000000 {
+        device_type = "soclib:tty";
+        irq = <&{/xicu@0xfd000000} 0x0>;
+        reg = <0xfc000000 0x00000010>;
+        tty_count = <0x1>;
+    };
+    simhelper@0xf1000000 {
+        device_type = "soclib:simhelper";
+        reg = <0xf1000000 0x00000010>;
+    };
+
+    blockdevice@0xfb000000 {
+        device_type = "soclib:blockdevice";
+        irq = <&{/xicu@0xfd000000} 0x1>;
+        reg = <0xfb000000 0x00000020>;
+    };
+
+    fb@0xf0000000 {
+	device_type = "soclib:frame_buffer";
+	reg = <0xf0000000 0x400000>;
+	mode = <32>;
+	width = <640>;
+	height = <480>; 
+    };
+
+    xicu@0xfd000000 {
+        device_type = "soclib:xicu:root";
+        input_lines = <0x2>;
+        ipis = <0x4>;
+        reg = <0xfd000000 0x00001000>;
+        timers = <0x4>;
+
+        out@0 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@0} 0x0>;
+            output_line = <0x0>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@1 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@0} 0x1>;
+            output_line = <0x1>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@2 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@0} 0x2>;
+            output_line = <0x2>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@3 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@1} 0x0>;
+            output_line = <0x3>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@4 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@1} 0x1>;
+            output_line = <0x4>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@5 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@1} 0x2>;
+            output_line = <0x5>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@6 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@2} 0x0>;
+            output_line = <0x6>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@7 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@2} 0x1>;
+            output_line = <0x7>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@8 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@2} 0x2>;
+            output_line = <0x8>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@9 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@3} 0x0>;
+            output_line = <0x9>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+        out@10 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@3} 0x1>;
+            output_line = <0xa>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+        out@11 {
+            device_type = "soclib:xicu:filter";
+            irq = <&{/cpus/Mips,32@3} 0x2>;
+            output_line = <0xb>;
+            parent = <&{/xicu@0xfd000000}>;
+        };
+
+    };
+  topology {
+    #address-cells = <2>;
+    #size-cells = <0>;
+    cluster@0,0 {
+    	reg = <0 0>;
+    	devices = <&{/cpus/Mips,32@0} &{/cpus/Mips,32@1} &{/cpus/Mips,32@2} &{/cpus/Mips,32@3} &{/xicu@0xfd000000} &{/tty@0xfc000000} &{/simhelper@0xf1000000} &{/blockdevice@0xfb000000} &{/fb@0xf0000000} >;
+    };
+  };
+};
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsar_generic_iob/defs_platform.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsar_generic_iob/defs_platform.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsar_generic_iob/defs_platform.h	(revision 724)
@@ -0,0 +1,15 @@
+#define NB_PROCS         1
+#define NB_CLUSTERS      4
+
+#define IRQ_PER_PROC     1
+
+#define USE_IOB          1
+#define CACHE_COHERENCE  1
+#define CACHE_LINE_SIZE  64 // bytes (ie 16 x 32-bit word)
+#define RESET_DEBUG      0
+
+#define ICU_PADDR_BASE   0xB0000000
+#define MCC_PADDR_BASE   0xB2000000
+#define IOC_PADDR_BASE   0xB3000000
+#define TTY_PADDR_BASE   0xB4000000
+#define RDK_PADDR_BASE   0xFFFFFFFF // not used
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsar_generic_iob/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsar_generic_iob/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsar_generic_iob/ldscript	(revision 724)
@@ -0,0 +1,37 @@
+/**********************************************************
+  File   : ldscript 
+  Author : Cesar Fuguet
+  Date   : June 2011
+**********************************************************/
+
+/* Definition of the base address for code segment */ 
+
+seg_reset_code_base     = 0xBFC00000; 
+
+seg_reset_stack_base    = 0x00060000; 
+seg_reset_stack_size    = 0x00090000; 
+
+/* Grouping sections into segments */
+
+ENTRY(reset)
+
+SECTIONS
+{
+    . = seg_reset_code_base;
+    .text : 
+    {
+        *(.reset)
+        *(.rodata)
+        *(.rodata.*)
+        . = ALIGN(0x4);
+        dtb_addr = .;
+        INCLUDE "build/platform.ld";
+    }
+
+    . = seg_reset_stack_base;
+    .bss ALIGN(0x4) (NOLOAD) : 
+    {
+        *(.data)
+        *(.bss)
+    }
+}
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/defs_platform.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/defs_platform.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/defs_platform.h	(revision 724)
@@ -0,0 +1,15 @@
+#define NB_PROCS         1
+#define NB_CLUSTERS      1
+
+#define IRQ_PER_PROC     1
+
+#define USE_IOB          0
+#define CACHE_COHERENCE  1
+#define CACHE_LINE_SIZE  64 // bytes (ie 16 x 32-bit word)
+#define RESET_DEBUG      0
+
+#define TTY_PADDR_BASE   0x20000000
+#define ICU_PADDR_BASE   0x30000000
+#define IOC_PADDR_BASE   0x40000000
+#define MCC_PADDR_BASE   0xFFFFFFFF // not used
+#define RDK_PADDR_BASE   0xFFFFFFFF // not used
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/ldscript
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/ldscript	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/ldscript	(revision 724)
@@ -0,0 +1,37 @@
+/**********************************************************
+  File   : ldscript 
+  Author : Cesar Fuguet
+  Date   : June 2011
+**********************************************************/
+
+/* Definition of the base address for code segment */ 
+
+seg_reset_boot_base     = 0xBFC00000;       /* le code de boot */
+
+seg_reset_stack_base    = 0x10000000 - 0x8000 - 0x4;
+seg_reset_stack_base    = 0x00008000;
+
+/* Grouping sections into segments */
+
+ENTRY(reset)
+
+SECTIONS
+{
+    . = seg_reset_code_base;
+    .text : 
+    {
+        *(.reset)
+        *(.rodata)
+        *(.rodata.*)
+        . = ALIGN(0x4);
+        dtb_addr = .;
+        INCLUDE "build/platform.ld";
+    }
+
+    . = seg_reset_stack_base;
+    .bss ALIGN(0x4) (NOLOAD) : 
+    {
+        *(.data)
+        *(.bss)
+    }
+}
Index: /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/platform_soclib.dts
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/platform_soclib.dts	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/conf/platform_tsarv4_mono_mmu_ioc/platform_soclib.dts	(revision 724)
@@ -0,0 +1,5 @@
+/dts-v1/;
+
+/ {
+};
+
Index: /branches/fault_tolerance/softs/tsar_boot/include/block_device.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/block_device.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/block_device.h	(revision 724)
@@ -0,0 +1,67 @@
+/*
+ * SOCLIB_LGPL_HEADER_BEGIN
+ *
+ * This file is part of SoCLib, GNU LGPLv2.1.
+ *
+ * SoCLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 of the License.
+ *
+ * SoCLib is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with SoCLib; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * SOCLIB_LGPL_HEADER_END
+ *
+ * Copyright (c) UPMC, Lip6, Asim
+ *         Nicolas Pouillon <nipo@ssji.net>, 2007
+ *
+ * Maintainers: nipo
+ */
+#ifndef BLOCK_DEVICE_REGS_H
+#define BLOCK_DEVICE_REGS_H
+
+enum SoclibBlockDeviceRegisters {
+    BLOCK_DEVICE_BUFFER,
+    BLOCK_DEVICE_LBA,
+    BLOCK_DEVICE_COUNT,
+    BLOCK_DEVICE_OP,
+    BLOCK_DEVICE_STATUS,
+    BLOCK_DEVICE_IRQ_ENABLE,
+    BLOCK_DEVICE_SIZE,
+    BLOCK_DEVICE_BLOCK_SIZE,
+};
+
+enum SoclibBlockDeviceOp {
+    BLOCK_DEVICE_NOOP,
+    BLOCK_DEVICE_READ,
+    BLOCK_DEVICE_WRITE,
+};
+
+enum SoclibBlockDeviceStatus {
+    BLOCK_DEVICE_IDLE,
+    BLOCK_DEVICE_BUSY,
+    BLOCK_DEVICE_READ_SUCCESS,
+    BLOCK_DEVICE_WRITE_SUCCESS,
+    BLOCK_DEVICE_READ_ERROR,
+    BLOCK_DEVICE_WRITE_ERROR,
+    BLOCK_DEVICE_ERROR,
+};
+
+#endif /* BLOCK_DEVICE_REGS_H */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/tsar_boot/include/defs.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/defs.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/defs.h	(revision 724)
@@ -0,0 +1,15 @@
+#include <defs_platform.h>
+
+#define RESET_VERSION       0x00010002
+
+#define BOOT_LOADER_LBA     2
+#define PHDR_ARRAY_SIZE     16
+
+#define BLOCK_SIZE          512
+
+#ifndef CLUSTER_IO
+#  define CLUSTER_IO        0
+#endif
+
+// vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
+
Index: /branches/fault_tolerance/softs/tsar_boot/include/elf-types.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/elf-types.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/elf-types.h	(revision 724)
@@ -0,0 +1,2645 @@
+/* This file defines standard ELF types, structures, and macros.
+   Copyright (C) 1995-2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _ELF_TYPES_H
+#define	_ELF_TYPES_H
+
+/* Type for a 16-bit quantity.  */
+typedef unsigned short Elf32_Half;
+typedef unsigned short Elf64_Half;
+
+/* Types for signed and unsigned 32-bit quantities.  */
+typedef unsigned int   Elf32_Word;
+typedef	int            Elf32_Sword;
+typedef unsigned int   Elf64_Word;
+typedef	int            Elf64_Sword;
+
+/* Types for signed and unsigned 64-bit quantities.  */
+typedef unsigned long  Elf32_Xword;
+typedef	long           Elf32_Sxword;
+typedef unsigned long  Elf64_Xword;
+typedef	long           Elf64_Sxword;
+
+/* Type of addresses.  */
+typedef unsigned int   Elf32_Addr;
+typedef unsigned long  Elf64_Addr;
+
+/* Type of file offsets.  */
+typedef unsigned int   Elf32_Off;
+typedef unsigned long  Elf64_Off;
+
+/* Type for section indices, which are 16-bit quantities.  */
+typedef unsigned short Elf32_Section;
+typedef unsigned short Elf64_Section;
+
+/* Type for version symbol information.  */
+typedef Elf32_Half Elf32_Versym;
+typedef Elf64_Half Elf64_Versym;
+
+
+/* The ELF file header.  This appears at the start of every ELF file.  */
+
+#define EI_NIDENT (16)
+
+typedef struct
+{
+  unsigned char	e_ident[EI_NIDENT];	/* Magic number and other info */
+  Elf32_Half	e_type;			/* Object file type */
+  Elf32_Half	e_machine;		/* Architecture */
+  Elf32_Word	e_version;		/* Object file version */
+  Elf32_Addr	e_entry;		/* Entry point virtual address */
+  Elf32_Off	e_phoff;		/* Program header table file offset */
+  Elf32_Off	e_shoff;		/* Section header table file offset */
+  Elf32_Word	e_flags;		/* Processor-specific flags */
+  Elf32_Half	e_ehsize;		/* ELF header size in bytes */
+  Elf32_Half	e_phentsize;		/* Program header table entry size */
+  Elf32_Half	e_phnum;		/* Program header table entry count */
+  Elf32_Half	e_shentsize;		/* Section header table entry size */
+  Elf32_Half	e_shnum;		/* Section header table entry count */
+  Elf32_Half	e_shstrndx;		/* Section header string table index */
+} Elf32_Ehdr;
+
+typedef struct
+{
+  unsigned char	e_ident[EI_NIDENT];	/* Magic number and other info */
+  Elf64_Half	e_type;			/* Object file type */
+  Elf64_Half	e_machine;		/* Architecture */
+  Elf64_Word	e_version;		/* Object file version */
+  Elf64_Addr	e_entry;		/* Entry point virtual address */
+  Elf64_Off	e_phoff;		/* Program header table file offset */
+  Elf64_Off	e_shoff;		/* Section header table file offset */
+  Elf64_Word	e_flags;		/* Processor-specific flags */
+  Elf64_Half	e_ehsize;		/* ELF header size in bytes */
+  Elf64_Half	e_phentsize;		/* Program header table entry size */
+  Elf64_Half	e_phnum;		/* Program header table entry count */
+  Elf64_Half	e_shentsize;		/* Section header table entry size */
+  Elf64_Half	e_shnum;		/* Section header table entry count */
+  Elf64_Half	e_shstrndx;		/* Section header string table index */
+} Elf64_Ehdr;
+
+/* Fields in the e_ident array.  The EI_* macros are indices into the
+   array.  The macros under each EI_* macro are the values the byte
+   may have.  */
+
+#define EI_MAG0		0		/* File identification byte 0 index */
+#define ELFMAG0		0x7f		/* Magic number byte 0 */
+
+#define EI_MAG1		1		/* File identification byte 1 index */
+#define ELFMAG1		'E'		/* Magic number byte 1 */
+
+#define EI_MAG2		2		/* File identification byte 2 index */
+#define ELFMAG2		'L'		/* Magic number byte 2 */
+
+#define EI_MAG3		3		/* File identification byte 3 index */
+#define ELFMAG3		'F'		/* Magic number byte 3 */
+
+/* Conglomeration of the identification bytes, for easy testing as a word.  */
+#define	ELFMAG		"\177ELF"
+#define	SELFMAG		4
+
+#define EI_CLASS	4		/* File class byte index */
+#define ELFCLASSNONE	0		/* Invalid class */
+#define ELFCLASS32	1		/* 32-bit objects */
+#define ELFCLASS64	2		/* 64-bit objects */
+#define ELFCLASSNUM	3
+
+#define EI_DATA		5		/* Data encoding byte index */
+#define ELFDATANONE	0		/* Invalid data encoding */
+#define ELFDATA2LSB	1		/* 2's complement, little endian */
+#define ELFDATA2MSB	2		/* 2's complement, big endian */
+#define ELFDATANUM	3
+
+#define EI_VERSION	6		/* File version byte index */
+					/* Value must be EV_CURRENT */
+
+#define EI_OSABI	7		/* OS ABI identification */
+#define ELFOSABI_NONE		0	/* UNIX System V ABI */
+#define ELFOSABI_SYSV		0	/* Alias.  */
+#define ELFOSABI_HPUX		1	/* HP-UX */
+#define ELFOSABI_NETBSD		2	/* NetBSD.  */
+#define ELFOSABI_LINUX		3	/* Linux.  */
+#define ELFOSABI_SOLARIS	6	/* Sun Solaris.  */
+#define ELFOSABI_AIX		7	/* IBM AIX.  */
+#define ELFOSABI_IRIX		8	/* SGI Irix.  */
+#define ELFOSABI_FREEBSD	9	/* FreeBSD.  */
+#define ELFOSABI_TRU64		10	/* Compaq TRU64 UNIX.  */
+#define ELFOSABI_MODESTO	11	/* Novell Modesto.  */
+#define ELFOSABI_OPENBSD	12	/* OpenBSD.  */
+#define ELFOSABI_ARM		97	/* ARM */
+#define ELFOSABI_STANDALONE	255	/* Standalone (embedded) application */
+
+#define EI_ABIVERSION	8		/* ABI version */
+
+#define EI_PAD		9		/* Byte index of padding bytes */
+
+/* Legal values for e_type (object file type).  */
+
+#define ET_NONE		0		/* No file type */
+#define ET_REL		1		/* Relocatable file */
+#define ET_EXEC		2		/* Executable file */
+#define ET_DYN		3		/* Shared object file */
+#define ET_CORE		4		/* Core file */
+#define	ET_NUM		5		/* Number of defined types */
+#define ET_LOOS		0xfe00		/* OS-specific range start */
+#define ET_HIOS		0xfeff		/* OS-specific range end */
+#define ET_LOPROC	0xff00		/* Processor-specific range start */
+#define ET_HIPROC	0xffff		/* Processor-specific range end */
+
+/* Legal values for e_machine (architecture).  */
+
+#define EM_NONE		 0		/* No machine */
+#define EM_M32		 1		/* AT&T WE 32100 */
+#define EM_SPARC	 2		/* SUN SPARC */
+#define EM_386		 3		/* Intel 80386 */
+#define EM_68K		 4		/* Motorola m68k family */
+#define EM_88K		 5		/* Motorola m88k family */
+#define EM_860		 7		/* Intel 80860 */
+#define EM_MIPS		 8		/* MIPS R3000 big-endian */
+#define EM_S370		 9		/* IBM System/370 */
+#define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */
+
+#define EM_PARISC	15		/* HPPA */
+#define EM_VPP500	17		/* Fujitsu VPP500 */
+#define EM_SPARC32PLUS	18		/* Sun's "v8plus" */
+#define EM_960		19		/* Intel 80960 */
+#define EM_PPC		20		/* PowerPC */
+#define EM_PPC64	21		/* PowerPC 64-bit */
+#define EM_S390		22		/* IBM S390 */
+
+#define EM_V800		36		/* NEC V800 series */
+#define EM_FR20		37		/* Fujitsu FR20 */
+#define EM_RH32		38		/* TRW RH-32 */
+#define EM_RCE		39		/* Motorola RCE */
+#define EM_ARM		40		/* ARM */
+#define EM_FAKE_ALPHA	41		/* Digital Alpha */
+#define EM_SH		42		/* Hitachi SH */
+#define EM_SPARCV9	43		/* SPARC v9 64-bit */
+#define EM_TRICORE	44		/* Siemens Tricore */
+#define EM_ARC		45		/* Argonaut RISC Core */
+#define EM_H8_300	46		/* Hitachi H8/300 */
+#define EM_H8_300H	47		/* Hitachi H8/300H */
+#define EM_H8S		48		/* Hitachi H8S */
+#define EM_H8_500	49		/* Hitachi H8/500 */
+#define EM_IA_64	50		/* Intel Merced */
+#define EM_MIPS_X	51		/* Stanford MIPS-X */
+#define EM_COLDFIRE	52		/* Motorola Coldfire */
+#define EM_68HC12	53		/* Motorola M68HC12 */
+#define EM_MMA		54		/* Fujitsu MMA Multimedia Accelerator*/
+#define EM_PCP		55		/* Siemens PCP */
+#define EM_NCPU		56		/* Sony nCPU embeeded RISC */
+#define EM_NDR1		57		/* Denso NDR1 microprocessor */
+#define EM_STARCORE	58		/* Motorola Start*Core processor */
+#define EM_ME16		59		/* Toyota ME16 processor */
+#define EM_ST100	60		/* STMicroelectronic ST100 processor */
+#define EM_TINYJ	61		/* Advanced Logic Corp. Tinyj emb.fam*/
+#define EM_X86_64	62		/* AMD x86-64 architecture */
+#define EM_PDSP		63		/* Sony DSP Processor */
+
+#define EM_FX66		66		/* Siemens FX66 microcontroller */
+#define EM_ST9PLUS	67		/* STMicroelectronics ST9+ 8/16 mc */
+#define EM_ST7		68		/* STmicroelectronics ST7 8 bit mc */
+#define EM_68HC16	69		/* Motorola MC68HC16 microcontroller */
+#define EM_68HC11	70		/* Motorola MC68HC11 microcontroller */
+#define EM_68HC08	71		/* Motorola MC68HC08 microcontroller */
+#define EM_68HC05	72		/* Motorola MC68HC05 microcontroller */
+#define EM_SVX		73		/* Silicon Graphics SVx */
+#define EM_ST19		74		/* STMicroelectronics ST19 8 bit mc */
+#define EM_VAX		75		/* Digital VAX */
+#define EM_CRIS		76		/* Axis Communications 32-bit embedded processor */
+#define EM_JAVELIN	77		/* Infineon Technologies 32-bit embedded processor */
+#define EM_FIREPATH	78		/* Element 14 64-bit DSP Processor */
+#define EM_ZSP		79		/* LSI Logic 16-bit DSP Processor */
+#define EM_MMIX		80		/* Donald Knuth's educational 64-bit processor */
+#define EM_HUANY	81		/* Harvard University machine-independent object files */
+#define EM_PRISM	82		/* SiTera Prism */
+#define EM_AVR		83		/* Atmel AVR 8-bit microcontroller */
+#define EM_FR30		84		/* Fujitsu FR30 */
+#define EM_D10V		85		/* Mitsubishi D10V */
+#define EM_D30V		86		/* Mitsubishi D30V */
+#define EM_V850		87		/* NEC v850 */
+#define EM_M32R		88		/* Mitsubishi M32R */
+#define EM_MN10300	89		/* Matsushita MN10300 */
+#define EM_MN10200	90		/* Matsushita MN10200 */
+#define EM_PJ		91		/* picoJava */
+#define EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */
+#define EM_ARC_A5	93		/* ARC Cores Tangent-A5 */
+#define EM_XTENSA	94		/* Tensilica Xtensa Architecture */
+#define EM_NUM		95
+
+/* If it is necessary to assign new unofficial EM_* values, please
+   pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
+   chances of collision with official or non-GNU unofficial values.  */
+
+#define EM_ALPHA	0x9026
+
+/* Legal values for e_version (version).  */
+
+#define EV_NONE		0		/* Invalid ELF version */
+#define EV_CURRENT	1		/* Current version */
+#define EV_NUM		2
+
+/* Section header.  */
+
+typedef struct
+{
+  Elf32_Word	sh_name;		/* Section name (string tbl index) */
+  Elf32_Word	sh_type;		/* Section type */
+  Elf32_Word	sh_flags;		/* Section flags */
+  Elf32_Addr	sh_addr;		/* Section virtual addr at execution */
+  Elf32_Off	sh_offset;		/* Section file offset */
+  Elf32_Word	sh_size;		/* Section size in bytes */
+  Elf32_Word	sh_link;		/* Link to another section */
+  Elf32_Word	sh_info;		/* Additional section information */
+  Elf32_Word	sh_addralign;		/* Section alignment */
+  Elf32_Word	sh_entsize;		/* Entry size if section holds table */
+} Elf32_Shdr;
+
+typedef struct
+{
+  Elf64_Word	sh_name;		/* Section name (string tbl index) */
+  Elf64_Word	sh_type;		/* Section type */
+  Elf64_Xword	sh_flags;		/* Section flags */
+  Elf64_Addr	sh_addr;		/* Section virtual addr at execution */
+  Elf64_Off	sh_offset;		/* Section file offset */
+  Elf64_Xword	sh_size;		/* Section size in bytes */
+  Elf64_Word	sh_link;		/* Link to another section */
+  Elf64_Word	sh_info;		/* Additional section information */
+  Elf64_Xword	sh_addralign;		/* Section alignment */
+  Elf64_Xword	sh_entsize;		/* Entry size if section holds table */
+} Elf64_Shdr;
+
+/* Special section indices.  */
+
+#define SHN_UNDEF	0		/* Undefined section */
+#define SHN_LORESERVE	0xff00		/* Start of reserved indices */
+#define SHN_LOPROC	0xff00		/* Start of processor-specific */
+#define SHN_BEFORE	0xff00		/* Order section before all others
+					   (Solaris).  */
+#define SHN_AFTER	0xff01		/* Order section after all others
+					   (Solaris).  */
+#define SHN_HIPROC	0xff1f		/* End of processor-specific */
+#define SHN_LOOS	0xff20		/* Start of OS-specific */
+#define SHN_HIOS	0xff3f		/* End of OS-specific */
+#define SHN_ABS		0xfff1		/* Associated symbol is absolute */
+#define SHN_COMMON	0xfff2		/* Associated symbol is common */
+#define SHN_XINDEX	0xffff		/* Index is in extra table.  */
+#define SHN_HIRESERVE	0xffff		/* End of reserved indices */
+
+/* Legal values for sh_type (section type).  */
+
+#define SHT_NULL	  0		/* Section header table entry unused */
+#define SHT_PROGBITS	  1		/* Program data */
+#define SHT_SYMTAB	  2		/* Symbol table */
+#define SHT_STRTAB	  3		/* String table */
+#define SHT_RELA	  4		/* Relocation entries with addends */
+#define SHT_HASH	  5		/* Symbol hash table */
+#define SHT_DYNAMIC	  6		/* Dynamic linking information */
+#define SHT_NOTE	  7		/* Notes */
+#define SHT_NOBITS	  8		/* Program space with no data (bss) */
+#define SHT_REL		  9		/* Relocation entries, no addends */
+#define SHT_SHLIB	  10		/* Reserved */
+#define SHT_DYNSYM	  11		/* Dynamic linker symbol table */
+#define SHT_INIT_ARRAY	  14		/* Array of constructors */
+#define SHT_FINI_ARRAY	  15		/* Array of destructors */
+#define SHT_PREINIT_ARRAY 16		/* Array of pre-constructors */
+#define SHT_GROUP	  17		/* Section group */
+#define SHT_SYMTAB_SHNDX  18		/* Extended section indeces */
+#define	SHT_NUM		  19		/* Number of defined types.  */
+#define SHT_LOOS	  0x60000000	/* Start OS-specific.  */
+#define SHT_GNU_HASH	  0x6ffffff6	/* GNU-style hash table.  */
+#define SHT_GNU_LIBLIST	  0x6ffffff7	/* Prelink library list */
+#define SHT_CHECKSUM	  0x6ffffff8	/* Checksum for DSO content.  */
+#define SHT_LOSUNW	  0x6ffffffa	/* Sun-specific low bound.  */
+#define SHT_SUNW_move	  0x6ffffffa
+#define SHT_SUNW_COMDAT   0x6ffffffb
+#define SHT_SUNW_syminfo  0x6ffffffc
+#define SHT_GNU_verdef	  0x6ffffffd	/* Version definition section.  */
+#define SHT_GNU_verneed	  0x6ffffffe	/* Version needs section.  */
+#define SHT_GNU_versym	  0x6fffffff	/* Version symbol table.  */
+#define SHT_HISUNW	  0x6fffffff	/* Sun-specific high bound.  */
+#define SHT_HIOS	  0x6fffffff	/* End OS-specific type */
+#define SHT_LOPROC	  0x70000000	/* Start of processor-specific */
+#define SHT_HIPROC	  0x7fffffff	/* End of processor-specific */
+#define SHT_LOUSER	  0x80000000	/* Start of application-specific */
+#define SHT_HIUSER	  0x8fffffff	/* End of application-specific */
+
+/* Legal values for sh_flags (section flags).  */
+
+#define SHF_WRITE	     (1 << 0)	/* Writable */
+#define SHF_ALLOC	     (1 << 1)	/* Occupies memory during execution */
+#define SHF_EXECINSTR	     (1 << 2)	/* Executable */
+#define SHF_MERGE	     (1 << 4)	/* Might be merged */
+#define SHF_STRINGS	     (1 << 5)	/* Contains nul-terminated strings */
+#define SHF_INFO_LINK	     (1 << 6)	/* `sh_info' contains SHT index */
+#define SHF_LINK_ORDER	     (1 << 7)	/* Preserve order after combining */
+#define SHF_OS_NONCONFORMING (1 << 8)	/* Non-standard OS specific handling
+					   required */
+#define SHF_GROUP	     (1 << 9)	/* Section is member of a group.  */
+#define SHF_TLS		     (1 << 10)	/* Section hold thread-local data.  */
+#define SHF_MASKOS	     0x0ff00000	/* OS-specific.  */
+#define SHF_MASKPROC	     0xf0000000	/* Processor-specific */
+#define SHF_ORDERED	     (1 << 30)	/* Special ordering requirement
+					   (Solaris).  */
+#define SHF_EXCLUDE	     (1 << 31)	/* Section is excluded unless
+					   referenced or allocated (Solaris).*/
+
+/* Section group handling.  */
+#define GRP_COMDAT	0x1		/* Mark group as COMDAT.  */
+
+/* Symbol table entry.  */
+
+typedef struct
+{
+  Elf32_Word	st_name;		/* Symbol name (string tbl index) */
+  Elf32_Addr	st_value;		/* Symbol value */
+  Elf32_Word	st_size;		/* Symbol size */
+  unsigned char	st_info;		/* Symbol type and binding */
+  unsigned char	st_other;		/* Symbol visibility */
+  Elf32_Section	st_shndx;		/* Section index */
+} Elf32_Sym;
+
+typedef struct
+{
+  Elf64_Word	st_name;		/* Symbol name (string tbl index) */
+  unsigned char	st_info;		/* Symbol type and binding */
+  unsigned char st_other;		/* Symbol visibility */
+  Elf64_Section	st_shndx;		/* Section index */
+  Elf64_Addr	st_value;		/* Symbol value */
+  Elf64_Xword	st_size;		/* Symbol size */
+} Elf64_Sym;
+
+/* The syminfo section if available contains additional information about
+   every dynamic symbol.  */
+
+typedef struct
+{
+  Elf32_Half si_boundto;		/* Direct bindings, symbol bound to */
+  Elf32_Half si_flags;			/* Per symbol flags */
+} Elf32_Syminfo;
+
+typedef struct
+{
+  Elf64_Half si_boundto;		/* Direct bindings, symbol bound to */
+  Elf64_Half si_flags;			/* Per symbol flags */
+} Elf64_Syminfo;
+
+/* Possible values for si_boundto.  */
+#define SYMINFO_BT_SELF		0xffff	/* Symbol bound to self */
+#define SYMINFO_BT_PARENT	0xfffe	/* Symbol bound to parent */
+#define SYMINFO_BT_LOWRESERVE	0xff00	/* Beginning of reserved entries */
+
+/* Possible bitmasks for si_flags.  */
+#define SYMINFO_FLG_DIRECT	0x0001	/* Direct bound symbol */
+#define SYMINFO_FLG_PASSTHRU	0x0002	/* Pass-thru symbol for translator */
+#define SYMINFO_FLG_COPY	0x0004	/* Symbol is a copy-reloc */
+#define SYMINFO_FLG_LAZYLOAD	0x0008	/* Symbol bound to object to be lazy
+					   loaded */
+/* Syminfo version values.  */
+#define SYMINFO_NONE		0
+#define SYMINFO_CURRENT		1
+#define SYMINFO_NUM		2
+
+
+/* How to extract and insert information held in the st_info field.  */
+
+#define ELF32_ST_BIND(val)		(((unsigned char) (val)) >> 4)
+#define ELF32_ST_TYPE(val)		((val) & 0xf)
+#define ELF32_ST_INFO(bind, type)	(((bind) << 4) + ((type) & 0xf))
+
+/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field.  */
+#define ELF64_ST_BIND(val)		ELF32_ST_BIND (val)
+#define ELF64_ST_TYPE(val)		ELF32_ST_TYPE (val)
+#define ELF64_ST_INFO(bind, type)	ELF32_ST_INFO ((bind), (type))
+
+/* Legal values for ST_BIND subfield of st_info (symbol binding).  */
+
+#define STB_LOCAL	0		/* Local symbol */
+#define STB_GLOBAL	1		/* Global symbol */
+#define STB_WEAK	2		/* Weak symbol */
+#define	STB_NUM		3		/* Number of defined types.  */
+#define STB_LOOS	10		/* Start of OS-specific */
+#define STB_HIOS	12		/* End of OS-specific */
+#define STB_LOPROC	13		/* Start of processor-specific */
+#define STB_HIPROC	15		/* End of processor-specific */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_NOTYPE	0		/* Symbol type is unspecified */
+#define STT_OBJECT	1		/* Symbol is a data object */
+#define STT_FUNC	2		/* Symbol is a code object */
+#define STT_SECTION	3		/* Symbol associated with a section */
+#define STT_FILE	4		/* Symbol's name is file name */
+#define STT_COMMON	5		/* Symbol is a common data object */
+#define STT_TLS		6		/* Symbol is thread-local data object*/
+#define	STT_NUM		7		/* Number of defined types.  */
+#define STT_LOOS	10		/* Start of OS-specific */
+#define STT_HIOS	12		/* End of OS-specific */
+#define STT_LOPROC	13		/* Start of processor-specific */
+#define STT_HIPROC	15		/* End of processor-specific */
+
+
+/* Symbol table indices are found in the hash buckets and chain table
+   of a symbol hash table section.  This special index value indicates
+   the end of a chain, meaning no further symbols are found in that bucket.  */
+
+#define STN_UNDEF	0		/* End of a chain.  */
+
+
+/* How to extract and insert information held in the st_other field.  */
+
+#define ELF32_ST_VISIBILITY(o)	((o) & 0x03)
+
+/* For ELF64 the definitions are the same.  */
+#define ELF64_ST_VISIBILITY(o)	ELF32_ST_VISIBILITY (o)
+
+/* Symbol visibility specification encoded in the st_other field.  */
+#define STV_DEFAULT	0		/* Default symbol visibility rules */
+#define STV_INTERNAL	1		/* Processor specific hidden class */
+#define STV_HIDDEN	2		/* Sym unavailable in other modules */
+#define STV_PROTECTED	3		/* Not preemptible, not exported */
+
+
+/* Relocation table entry without addend (in section of type SHT_REL).  */
+
+typedef struct
+{
+  Elf32_Addr	r_offset;		/* Address */
+  Elf32_Word	r_info;			/* Relocation type and symbol index */
+} Elf32_Rel;
+
+/* I have seen two different definitions of the Elf64_Rel and
+   Elf64_Rela structures, so we'll leave them out until Novell (or
+   whoever) gets their act together.  */
+/* The following, at least, is used on Sparc v9, MIPS, and Alpha.  */
+
+typedef struct
+{
+  Elf64_Addr	r_offset;		/* Address */
+  Elf64_Xword	r_info;			/* Relocation type and symbol index */
+} Elf64_Rel;
+
+/* Relocation table entry with addend (in section of type SHT_RELA).  */
+
+typedef struct
+{
+  Elf32_Addr	r_offset;		/* Address */
+  Elf32_Word	r_info;			/* Relocation type and symbol index */
+  Elf32_Sword	r_addend;		/* Addend */
+} Elf32_Rela;
+
+typedef struct
+{
+  Elf64_Addr	r_offset;		/* Address */
+  Elf64_Xword	r_info;			/* Relocation type and symbol index */
+  Elf64_Sxword	r_addend;		/* Addend */
+} Elf64_Rela;
+
+/* How to extract and insert information held in the r_info field.  */
+
+#define ELF32_R_SYM(val)		((val) >> 8)
+#define ELF32_R_TYPE(val)		((val) & 0xff)
+#define ELF32_R_INFO(sym, type)		(((sym) << 8) + ((type) & 0xff))
+
+#define ELF64_R_SYM(i)			((i) >> 32)
+#define ELF64_R_TYPE(i)			((i) & 0xffffffff)
+#define ELF64_R_INFO(sym,type)		((((Elf64_Xword) (sym)) << 32) + (type))
+
+/* Program segment header.  */
+
+typedef struct
+{
+  Elf32_Word	p_type;			/* Segment type */
+  Elf32_Off	p_offset;		/* Segment file offset */
+  Elf32_Addr	p_vaddr;		/* Segment virtual address */
+  Elf32_Addr	p_paddr;		/* Segment physical address */
+  Elf32_Word	p_filesz;		/* Segment size in file */
+  Elf32_Word	p_memsz;		/* Segment size in memory */
+  Elf32_Word	p_flags;		/* Segment flags */
+  Elf32_Word	p_align;		/* Segment alignment */
+} Elf32_Phdr;
+
+typedef struct
+{
+  Elf64_Word	p_type;			/* Segment type */
+  Elf64_Word	p_flags;		/* Segment flags */
+  Elf64_Off	p_offset;		/* Segment file offset */
+  Elf64_Addr	p_vaddr;		/* Segment virtual address */
+  Elf64_Addr	p_paddr;		/* Segment physical address */
+  Elf64_Xword	p_filesz;		/* Segment size in file */
+  Elf64_Xword	p_memsz;		/* Segment size in memory */
+  Elf64_Xword	p_align;		/* Segment alignment */
+} Elf64_Phdr;
+
+/* Legal values for p_type (segment type).  */
+
+#define	PT_NULL		0		/* Program header table entry unused */
+#define PT_LOAD		1		/* Loadable program segment */
+#define PT_DYNAMIC	2		/* Dynamic linking information */
+#define PT_INTERP	3		/* Program interpreter */
+#define PT_NOTE		4		/* Auxiliary information */
+#define PT_SHLIB	5		/* Reserved */
+#define PT_PHDR		6		/* Entry for header table itself */
+#define PT_TLS		7		/* Thread-local storage segment */
+#define	PT_NUM		8		/* Number of defined types */
+#define PT_LOOS		0x60000000	/* Start of OS-specific */
+#define PT_GNU_EH_FRAME	0x6474e550	/* GCC .eh_frame_hdr segment */
+#define PT_GNU_STACK	0x6474e551	/* Indicates stack executability */
+#define PT_GNU_RELRO	0x6474e552	/* Read-only after relocation */
+#define PT_LOSUNW	0x6ffffffa
+#define PT_SUNWBSS	0x6ffffffa	/* Sun Specific segment */
+#define PT_SUNWSTACK	0x6ffffffb	/* Stack segment */
+#define PT_HISUNW	0x6fffffff
+#define PT_HIOS		0x6fffffff	/* End of OS-specific */
+#define PT_LOPROC	0x70000000	/* Start of processor-specific */
+#define PT_HIPROC	0x7fffffff	/* End of processor-specific */
+
+/* Legal values for p_flags (segment flags).  */
+
+#define PF_X		(1 << 0)	/* Segment is executable */
+#define PF_W		(1 << 1)	/* Segment is writable */
+#define PF_R		(1 << 2)	/* Segment is readable */
+#define PF_MASKOS	0x0ff00000	/* OS-specific */
+#define PF_MASKPROC	0xf0000000	/* Processor-specific */
+
+/* Legal values for note segment descriptor types for core files. */
+
+#define NT_PRSTATUS	1		/* Contains copy of prstatus struct */
+#define NT_FPREGSET	2		/* Contains copy of fpregset struct */
+#define NT_PRPSINFO	3		/* Contains copy of prpsinfo struct */
+#define NT_PRXREG	4		/* Contains copy of prxregset struct */
+#define NT_TASKSTRUCT	4		/* Contains copy of task structure */
+#define NT_PLATFORM	5		/* String from sysinfo(SI_PLATFORM) */
+#define NT_AUXV		6		/* Contains copy of auxv array */
+#define NT_GWINDOWS	7		/* Contains copy of gwindows struct */
+#define NT_ASRS		8		/* Contains copy of asrset struct */
+#define NT_PSTATUS	10		/* Contains copy of pstatus struct */
+#define NT_PSINFO	13		/* Contains copy of psinfo struct */
+#define NT_PRCRED	14		/* Contains copy of prcred struct */
+#define NT_UTSNAME	15		/* Contains copy of utsname struct */
+#define NT_LWPSTATUS	16		/* Contains copy of lwpstatus struct */
+#define NT_LWPSINFO	17		/* Contains copy of lwpinfo struct */
+#define NT_PRFPXREG	20		/* Contains copy of fprxregset struct */
+#define NT_PRXFPREG	0x46e62b7f	/* Contains copy of user_fxsr_struct */
+
+/* Legal values for the note segment descriptor types for object files.  */
+
+#define NT_VERSION	1		/* Contains a version string.  */
+
+
+/* Dynamic section entry.  */
+
+typedef struct
+{
+  Elf32_Sword	d_tag;			/* Dynamic entry type */
+  union
+    {
+      Elf32_Word d_val;			/* Integer value */
+      Elf32_Addr d_ptr;			/* Address value */
+    } d_un;
+} Elf32_Dyn;
+
+typedef struct
+{
+  Elf64_Sxword	d_tag;			/* Dynamic entry type */
+  union
+    {
+      Elf64_Xword d_val;		/* Integer value */
+      Elf64_Addr d_ptr;			/* Address value */
+    } d_un;
+} Elf64_Dyn;
+
+/* Legal values for d_tag (dynamic entry type).  */
+
+#define DT_NULL		0		/* Marks end of dynamic section */
+#define DT_NEEDED	1		/* Name of needed library */
+#define DT_PLTRELSZ	2		/* Size in bytes of PLT relocs */
+#define DT_PLTGOT	3		/* Processor defined value */
+#define DT_HASH		4		/* Address of symbol hash table */
+#define DT_STRTAB	5		/* Address of string table */
+#define DT_SYMTAB	6		/* Address of symbol table */
+#define DT_RELA		7		/* Address of Rela relocs */
+#define DT_RELASZ	8		/* Total size of Rela relocs */
+#define DT_RELAENT	9		/* Size of one Rela reloc */
+#define DT_STRSZ	10		/* Size of string table */
+#define DT_SYMENT	11		/* Size of one symbol table entry */
+#define DT_INIT		12		/* Address of init function */
+#define DT_FINI		13		/* Address of termination function */
+#define DT_SONAME	14		/* Name of shared object */
+#define DT_RPATH	15		/* Library search path (deprecated) */
+#define DT_SYMBOLIC	16		/* Start symbol search here */
+#define DT_REL		17		/* Address of Rel relocs */
+#define DT_RELSZ	18		/* Total size of Rel relocs */
+#define DT_RELENT	19		/* Size of one Rel reloc */
+#define DT_PLTREL	20		/* Type of reloc in PLT */
+#define DT_DEBUG	21		/* For debugging; unspecified */
+#define DT_TEXTREL	22		/* Reloc might modify .text */
+#define DT_JMPREL	23		/* Address of PLT relocs */
+#define	DT_BIND_NOW	24		/* Process relocations of object */
+#define	DT_INIT_ARRAY	25		/* Array with addresses of init fct */
+#define	DT_FINI_ARRAY	26		/* Array with addresses of fini fct */
+#define	DT_INIT_ARRAYSZ	27		/* Size in bytes of DT_INIT_ARRAY */
+#define	DT_FINI_ARRAYSZ	28		/* Size in bytes of DT_FINI_ARRAY */
+#define DT_RUNPATH	29		/* Library search path */
+#define DT_FLAGS	30		/* Flags for the object being loaded */
+#define DT_ENCODING	32		/* Start of encoded range */
+#define DT_PREINIT_ARRAY 32		/* Array with addresses of preinit fct*/
+#define DT_PREINIT_ARRAYSZ 33		/* size in bytes of DT_PREINIT_ARRAY */
+#define	DT_NUM		34		/* Number used */
+#define DT_LOOS		0x6000000d	/* Start of OS-specific */
+#define DT_HIOS		0x6ffff000	/* End of OS-specific */
+#define DT_LOPROC	0x70000000	/* Start of processor-specific */
+#define DT_HIPROC	0x7fffffff	/* End of processor-specific */
+#define	DT_PROCNUM	DT_MIPS_NUM	/* Most used by any processor */
+
+/* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
+   Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's
+   approach.  */
+#define DT_VALRNGLO	0x6ffffd00
+#define DT_GNU_PRELINKED 0x6ffffdf5	/* Prelinking timestamp */
+#define DT_GNU_CONFLICTSZ 0x6ffffdf6	/* Size of conflict section */
+#define DT_GNU_LIBLISTSZ 0x6ffffdf7	/* Size of library list */
+#define DT_CHECKSUM	0x6ffffdf8
+#define DT_PLTPADSZ	0x6ffffdf9
+#define DT_MOVEENT	0x6ffffdfa
+#define DT_MOVESZ	0x6ffffdfb
+#define DT_FEATURE_1	0x6ffffdfc	/* Feature selection (DTF_*).  */
+#define DT_POSFLAG_1	0x6ffffdfd	/* Flags for DT_* entries, effecting
+					   the following DT_* entry.  */
+#define DT_SYMINSZ	0x6ffffdfe	/* Size of syminfo table (in bytes) */
+#define DT_SYMINENT	0x6ffffdff	/* Entry size of syminfo */
+#define DT_VALRNGHI	0x6ffffdff
+#define DT_VALTAGIDX(tag)	(DT_VALRNGHI - (tag))	/* Reverse order! */
+#define DT_VALNUM 12
+
+/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
+   Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
+
+   If any adjustment is made to the ELF object after it has been
+   built these entries will need to be adjusted.  */
+#define DT_ADDRRNGLO	0x6ffffe00
+#define DT_GNU_HASH	0x6ffffef5	/* GNU-style hash table.  */
+#define DT_TLSDESC_PLT	0x6ffffef6
+#define DT_TLSDESC_GOT	0x6ffffef7
+#define DT_GNU_CONFLICT	0x6ffffef8	/* Start of conflict section */
+#define DT_GNU_LIBLIST	0x6ffffef9	/* Library list */
+#define DT_CONFIG	0x6ffffefa	/* Configuration information.  */
+#define DT_DEPAUDIT	0x6ffffefb	/* Dependency auditing.  */
+#define DT_AUDIT	0x6ffffefc	/* Object auditing.  */
+#define	DT_PLTPAD	0x6ffffefd	/* PLT padding.  */
+#define	DT_MOVETAB	0x6ffffefe	/* Move table.  */
+#define DT_SYMINFO	0x6ffffeff	/* Syminfo table.  */
+#define DT_ADDRRNGHI	0x6ffffeff
+#define DT_ADDRTAGIDX(tag)	(DT_ADDRRNGHI - (tag))	/* Reverse order! */
+#define DT_ADDRNUM 11
+
+/* The versioning entry types.  The next are defined as part of the
+   GNU extension.  */
+#define DT_VERSYM	0x6ffffff0
+
+#define DT_RELACOUNT	0x6ffffff9
+#define DT_RELCOUNT	0x6ffffffa
+
+/* These were chosen by Sun.  */
+#define DT_FLAGS_1	0x6ffffffb	/* State flags, see DF_1_* below.  */
+#define	DT_VERDEF	0x6ffffffc	/* Address of version definition
+					   table */
+#define	DT_VERDEFNUM	0x6ffffffd	/* Number of version definitions */
+#define	DT_VERNEED	0x6ffffffe	/* Address of table with needed
+					   versions */
+#define	DT_VERNEEDNUM	0x6fffffff	/* Number of needed versions */
+#define DT_VERSIONTAGIDX(tag)	(DT_VERNEEDNUM - (tag))	/* Reverse order! */
+#define DT_VERSIONTAGNUM 16
+
+/* Sun added these machine-independent extensions in the "processor-specific"
+   range.  Be compatible.  */
+#define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */
+#define DT_FILTER       0x7fffffff      /* Shared object to get values from */
+#define DT_EXTRATAGIDX(tag)	((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
+#define DT_EXTRANUM	3
+
+/* Values of `d_un.d_val' in the DT_FLAGS entry.  */
+#define DF_ORIGIN	0x00000001	/* Object may use DF_ORIGIN */
+#define DF_SYMBOLIC	0x00000002	/* Symbol resolutions starts here */
+#define DF_TEXTREL	0x00000004	/* Object contains text relocations */
+#define DF_BIND_NOW	0x00000008	/* No lazy binding for this object */
+#define DF_STATIC_TLS	0x00000010	/* Module uses the static TLS model */
+
+/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
+   entry in the dynamic section.  */
+#define DF_1_NOW	0x00000001	/* Set RTLD_NOW for this object.  */
+#define DF_1_GLOBAL	0x00000002	/* Set RTLD_GLOBAL for this object.  */
+#define DF_1_GROUP	0x00000004	/* Set RTLD_GROUP for this object.  */
+#define DF_1_NODELETE	0x00000008	/* Set RTLD_NODELETE for this object.*/
+#define DF_1_LOADFLTR	0x00000010	/* Trigger filtee loading at runtime.*/
+#define DF_1_INITFIRST	0x00000020	/* Set RTLD_INITFIRST for this object*/
+#define DF_1_NOOPEN	0x00000040	/* Set RTLD_NOOPEN for this object.  */
+#define DF_1_ORIGIN	0x00000080	/* $ORIGIN must be handled.  */
+#define DF_1_DIRECT	0x00000100	/* Direct binding enabled.  */
+#define DF_1_TRANS	0x00000200
+#define DF_1_INTERPOSE	0x00000400	/* Object is used to interpose.  */
+#define DF_1_NODEFLIB	0x00000800	/* Ignore default lib search path.  */
+#define DF_1_NODUMP	0x00001000	/* Object can't be dldump'ed.  */
+#define DF_1_CONFALT	0x00002000	/* Configuration alternative created.*/
+#define DF_1_ENDFILTEE	0x00004000	/* Filtee terminates filters search. */
+#define	DF_1_DISPRELDNE	0x00008000	/* Disp reloc applied at build time. */
+#define	DF_1_DISPRELPND	0x00010000	/* Disp reloc applied at run-time.  */
+
+/* Flags for the feature selection in DT_FEATURE_1.  */
+#define DTF_1_PARINIT	0x00000001
+#define DTF_1_CONFEXP	0x00000002
+
+/* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry.  */
+#define DF_P1_LAZYLOAD	0x00000001	/* Lazyload following object.  */
+#define DF_P1_GROUPPERM	0x00000002	/* Symbols from next object are not
+					   generally available.  */
+
+/* Version definition sections.  */
+
+typedef struct
+{
+  Elf32_Half	vd_version;		/* Version revision */
+  Elf32_Half	vd_flags;		/* Version information */
+  Elf32_Half	vd_ndx;			/* Version Index */
+  Elf32_Half	vd_cnt;			/* Number of associated aux entries */
+  Elf32_Word	vd_hash;		/* Version name hash value */
+  Elf32_Word	vd_aux;			/* Offset in bytes to verdaux array */
+  Elf32_Word	vd_next;		/* Offset in bytes to next verdef
+					   entry */
+} Elf32_Verdef;
+
+typedef struct
+{
+  Elf64_Half	vd_version;		/* Version revision */
+  Elf64_Half	vd_flags;		/* Version information */
+  Elf64_Half	vd_ndx;			/* Version Index */
+  Elf64_Half	vd_cnt;			/* Number of associated aux entries */
+  Elf64_Word	vd_hash;		/* Version name hash value */
+  Elf64_Word	vd_aux;			/* Offset in bytes to verdaux array */
+  Elf64_Word	vd_next;		/* Offset in bytes to next verdef
+					   entry */
+} Elf64_Verdef;
+
+
+/* Legal values for vd_version (version revision).  */
+#define VER_DEF_NONE	0		/* No version */
+#define VER_DEF_CURRENT	1		/* Current version */
+#define VER_DEF_NUM	2		/* Given version number */
+
+/* Legal values for vd_flags (version information flags).  */
+#define VER_FLG_BASE	0x1		/* Version definition of file itself */
+#define VER_FLG_WEAK	0x2		/* Weak version identifier */
+
+/* Versym symbol index values.  */
+#define	VER_NDX_LOCAL		0	/* Symbol is local.  */
+#define	VER_NDX_GLOBAL		1	/* Symbol is global.  */
+#define	VER_NDX_LORESERVE	0xff00	/* Beginning of reserved entries.  */
+#define	VER_NDX_ELIMINATE	0xff01	/* Symbol is to be eliminated.  */
+
+/* Auxialiary version information.  */
+
+typedef struct
+{
+  Elf32_Word	vda_name;		/* Version or dependency names */
+  Elf32_Word	vda_next;		/* Offset in bytes to next verdaux
+					   entry */
+} Elf32_Verdaux;
+
+typedef struct
+{
+  Elf64_Word	vda_name;		/* Version or dependency names */
+  Elf64_Word	vda_next;		/* Offset in bytes to next verdaux
+					   entry */
+} Elf64_Verdaux;
+
+
+/* Version dependency section.  */
+
+typedef struct
+{
+  Elf32_Half	vn_version;		/* Version of structure */
+  Elf32_Half	vn_cnt;			/* Number of associated aux entries */
+  Elf32_Word	vn_file;		/* Offset of filename for this
+					   dependency */
+  Elf32_Word	vn_aux;			/* Offset in bytes to vernaux array */
+  Elf32_Word	vn_next;		/* Offset in bytes to next verneed
+					   entry */
+} Elf32_Verneed;
+
+typedef struct
+{
+  Elf64_Half	vn_version;		/* Version of structure */
+  Elf64_Half	vn_cnt;			/* Number of associated aux entries */
+  Elf64_Word	vn_file;		/* Offset of filename for this
+					   dependency */
+  Elf64_Word	vn_aux;			/* Offset in bytes to vernaux array */
+  Elf64_Word	vn_next;		/* Offset in bytes to next verneed
+					   entry */
+} Elf64_Verneed;
+
+
+/* Legal values for vn_version (version revision).  */
+#define VER_NEED_NONE	 0		/* No version */
+#define VER_NEED_CURRENT 1		/* Current version */
+#define VER_NEED_NUM	 2		/* Given version number */
+
+/* Auxiliary needed version information.  */
+
+typedef struct
+{
+  Elf32_Word	vna_hash;		/* Hash value of dependency name */
+  Elf32_Half	vna_flags;		/* Dependency specific information */
+  Elf32_Half	vna_other;		/* Unused */
+  Elf32_Word	vna_name;		/* Dependency name string offset */
+  Elf32_Word	vna_next;		/* Offset in bytes to next vernaux
+					   entry */
+} Elf32_Vernaux;
+
+typedef struct
+{
+  Elf64_Word	vna_hash;		/* Hash value of dependency name */
+  Elf64_Half	vna_flags;		/* Dependency specific information */
+  Elf64_Half	vna_other;		/* Unused */
+  Elf64_Word	vna_name;		/* Dependency name string offset */
+  Elf64_Word	vna_next;		/* Offset in bytes to next vernaux
+					   entry */
+} Elf64_Vernaux;
+
+
+/* Legal values for vna_flags.  */
+#define VER_FLG_WEAK	0x2		/* Weak version identifier */
+
+
+/* Auxiliary vector.  */
+
+/* This vector is normally only used by the program interpreter.  The
+   usual definition in an ABI supplement uses the name auxv_t.  The
+   vector is not usually defined in a standard <elf.h> file, but it
+   can't hurt.  We rename it to avoid conflicts.  The sizes of these
+   types are an arrangement between the exec server and the program
+   interpreter, so we don't fully specify them here.  */
+
+typedef struct
+{
+  unsigned int a_type;		/* Entry type */
+  union
+    {
+      unsigned int a_val;		/* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+	 though, since it does not work when using 32-bit definitions
+	 on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf32_auxv_t;
+
+typedef struct
+{
+  unsigned long a_type;		/* Entry type */
+  union
+    {
+      unsigned long a_val;		/* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+	 though, since it does not work when using 32-bit definitions
+	 on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf64_auxv_t;
+
+/* Legal values for a_type (entry type).  */
+
+#define AT_NULL		0		/* End of vector */
+#define AT_IGNORE	1		/* Entry should be ignored */
+#define AT_EXECFD	2		/* File descriptor of program */
+#define AT_PHDR		3		/* Program headers for program */
+#define AT_PHENT	4		/* Size of program header entry */
+#define AT_PHNUM	5		/* Number of program headers */
+#define AT_PAGESZ	6		/* System page size */
+#define AT_BASE		7		/* Base address of interpreter */
+#define AT_FLAGS	8		/* Flags */
+#define AT_ENTRY	9		/* Entry point of program */
+#define AT_NOTELF	10		/* Program is not ELF */
+#define AT_UID		11		/* Real uid */
+#define AT_EUID		12		/* Effective uid */
+#define AT_GID		13		/* Real gid */
+#define AT_EGID		14		/* Effective gid */
+#define AT_CLKTCK	17		/* Frequency of times() */
+
+/* Some more special a_type values describing the hardware.  */
+#define AT_PLATFORM	15		/* String identifying platform.  */
+#define AT_HWCAP	16		/* Machine dependent hints about
+					   processor capabilities.  */
+
+/* This entry gives some information about the FPU initialization
+   performed by the kernel.  */
+#define AT_FPUCW	18		/* Used FPU control word.  */
+
+/* Cache block sizes.  */
+#define AT_DCACHEBSIZE	19		/* Data cache block size.  */
+#define AT_ICACHEBSIZE	20		/* Instruction cache block size.  */
+#define AT_UCACHEBSIZE	21		/* Unified cache block size.  */
+
+/* A special ignored value for PPC, used by the kernel to control the
+   interpretation of the AUXV. Must be > 16.  */
+#define AT_IGNOREPPC	22		/* Entry should be ignored.  */
+
+#define	AT_SECURE	23		/* Boolean, was exec setuid-like?  */
+
+/* Pointer to the global system page used for system calls and other
+   nice things.  */
+#define AT_SYSINFO	32
+#define AT_SYSINFO_EHDR	33
+
+/* Shapes of the caches.  Bits 0-3 contains associativity; bits 4-7 contains
+   log2 of line size; mask those to get cache size.  */
+#define AT_L1I_CACHESHAPE	34
+#define AT_L1D_CACHESHAPE	35
+#define AT_L2_CACHESHAPE	36
+#define AT_L3_CACHESHAPE	37
+
+/* Note section contents.  Each entry in the note section begins with
+   a header of a fixed form.  */
+
+typedef struct
+{
+  Elf32_Word n_namesz;			/* Length of the note's name.  */
+  Elf32_Word n_descsz;			/* Length of the note's descriptor.  */
+  Elf32_Word n_type;			/* Type of the note.  */
+} Elf32_Nhdr;
+
+typedef struct
+{
+  Elf64_Word n_namesz;			/* Length of the note's name.  */
+  Elf64_Word n_descsz;			/* Length of the note's descriptor.  */
+  Elf64_Word n_type;			/* Type of the note.  */
+} Elf64_Nhdr;
+
+/* Known names of notes.  */
+
+/* Solaris entries in the note section have this name.  */
+#define ELF_NOTE_SOLARIS	"SUNW Solaris"
+
+/* Note entries for GNU systems have this name.  */
+#define ELF_NOTE_GNU		"GNU"
+
+
+/* Defined types of notes for Solaris.  */
+
+/* Value of descriptor (one word) is desired pagesize for the binary.  */
+#define ELF_NOTE_PAGESIZE_HINT	1
+
+
+/* Defined note types for GNU systems.  */
+
+/* ABI information.  The descriptor consists of words:
+   word 0: OS descriptor
+   word 1: major version of the ABI
+   word 2: minor version of the ABI
+   word 3: subminor version of the ABI
+*/
+#define NT_GNU_ABI_TAG	1
+#define ELF_NOTE_ABI	NT_GNU_ABI_TAG /* Old name.  */
+
+/* Known OSes.  These values can appear in word 0 of an
+   NT_GNU_ABI_TAG note section entry.  */
+#define ELF_NOTE_OS_LINUX	0
+#define ELF_NOTE_OS_GNU		1
+#define ELF_NOTE_OS_SOLARIS2	2
+#define ELF_NOTE_OS_FREEBSD	3
+
+/* Synthetic hwcap information.  The descriptor begins with two words:
+   word 0: number of entries
+   word 1: bitmask of enabled entries
+   Then follow variable-length entries, one byte followed by a
+   '\0'-terminated hwcap name string.  The byte gives the bit
+   number to test if enabled, (1U << bit) & bitmask.  */
+#define NT_GNU_HWCAP	2
+
+/* Build ID bits as generated by ld --build-id.
+   The descriptor consists of any nonzero number of bytes.  */
+#define NT_GNU_BUILD_ID	3
+
+
+/* Move records.  */
+typedef struct
+{
+  Elf32_Xword m_value;		/* Symbol value.  */
+  Elf32_Word m_info;		/* Size and index.  */
+  Elf32_Word m_poffset;		/* Symbol offset.  */
+  Elf32_Half m_repeat;		/* Repeat count.  */
+  Elf32_Half m_stride;		/* Stride info.  */
+} Elf32_Move;
+
+typedef struct
+{
+  Elf64_Xword m_value;		/* Symbol value.  */
+  Elf64_Xword m_info;		/* Size and index.  */
+  Elf64_Xword m_poffset;	/* Symbol offset.  */
+  Elf64_Half m_repeat;		/* Repeat count.  */
+  Elf64_Half m_stride;		/* Stride info.  */
+} Elf64_Move;
+
+/* Macro to construct move records.  */
+#define ELF32_M_SYM(info)	((info) >> 8)
+#define ELF32_M_SIZE(info)	((unsigned char) (info))
+#define ELF32_M_INFO(sym, size)	(((sym) << 8) + (unsigned char) (size))
+
+#define ELF64_M_SYM(info)	ELF32_M_SYM (info)
+#define ELF64_M_SIZE(info)	ELF32_M_SIZE (info)
+#define ELF64_M_INFO(sym, size)	ELF32_M_INFO (sym, size)
+
+
+/* Motorola 68k specific definitions.  */
+
+/* Values for Elf32_Ehdr.e_flags.  */
+#define EF_CPU32	0x00810000
+
+/* m68k relocs.  */
+
+#define R_68K_NONE	0		/* No reloc */
+#define R_68K_32	1		/* Direct 32 bit  */
+#define R_68K_16	2		/* Direct 16 bit  */
+#define R_68K_8		3		/* Direct 8 bit  */
+#define R_68K_PC32	4		/* PC relative 32 bit */
+#define R_68K_PC16	5		/* PC relative 16 bit */
+#define R_68K_PC8	6		/* PC relative 8 bit */
+#define R_68K_GOT32	7		/* 32 bit PC relative GOT entry */
+#define R_68K_GOT16	8		/* 16 bit PC relative GOT entry */
+#define R_68K_GOT8	9		/* 8 bit PC relative GOT entry */
+#define R_68K_GOT32O	10		/* 32 bit GOT offset */
+#define R_68K_GOT16O	11		/* 16 bit GOT offset */
+#define R_68K_GOT8O	12		/* 8 bit GOT offset */
+#define R_68K_PLT32	13		/* 32 bit PC relative PLT address */
+#define R_68K_PLT16	14		/* 16 bit PC relative PLT address */
+#define R_68K_PLT8	15		/* 8 bit PC relative PLT address */
+#define R_68K_PLT32O	16		/* 32 bit PLT offset */
+#define R_68K_PLT16O	17		/* 16 bit PLT offset */
+#define R_68K_PLT8O	18		/* 8 bit PLT offset */
+#define R_68K_COPY	19		/* Copy symbol at runtime */
+#define R_68K_GLOB_DAT	20		/* Create GOT entry */
+#define R_68K_JMP_SLOT	21		/* Create PLT entry */
+#define R_68K_RELATIVE	22		/* Adjust by program base */
+/* Keep this the last entry.  */
+#define R_68K_NUM	23
+
+/* Intel 80386 specific definitions.  */
+
+/* i386 relocs.  */
+
+#define R_386_NONE	   0		/* No reloc */
+#define R_386_32	   1		/* Direct 32 bit  */
+#define R_386_PC32	   2		/* PC relative 32 bit */
+#define R_386_GOT32	   3		/* 32 bit GOT entry */
+#define R_386_PLT32	   4		/* 32 bit PLT address */
+#define R_386_COPY	   5		/* Copy symbol at runtime */
+#define R_386_GLOB_DAT	   6		/* Create GOT entry */
+#define R_386_JMP_SLOT	   7		/* Create PLT entry */
+#define R_386_RELATIVE	   8		/* Adjust by program base */
+#define R_386_GOTOFF	   9		/* 32 bit offset to GOT */
+#define R_386_GOTPC	   10		/* 32 bit PC relative offset to GOT */
+#define R_386_32PLT	   11
+#define R_386_TLS_TPOFF	   14		/* Offset in static TLS block */
+#define R_386_TLS_IE	   15		/* Address of GOT entry for static TLS
+					   block offset */
+#define R_386_TLS_GOTIE	   16		/* GOT entry for static TLS block
+					   offset */
+#define R_386_TLS_LE	   17		/* Offset relative to static TLS
+					   block */
+#define R_386_TLS_GD	   18		/* Direct 32 bit for GNU version of
+					   general dynamic thread local data */
+#define R_386_TLS_LDM	   19		/* Direct 32 bit for GNU version of
+					   local dynamic thread local data
+					   in LE code */
+#define R_386_16	   20
+#define R_386_PC16	   21
+#define R_386_8		   22
+#define R_386_PC8	   23
+#define R_386_TLS_GD_32	   24		/* Direct 32 bit for general dynamic
+					   thread local data */
+#define R_386_TLS_GD_PUSH  25		/* Tag for pushl in GD TLS code */
+#define R_386_TLS_GD_CALL  26		/* Relocation for call to
+					   __tls_get_addr() */
+#define R_386_TLS_GD_POP   27		/* Tag for popl in GD TLS code */
+#define R_386_TLS_LDM_32   28		/* Direct 32 bit for local dynamic
+					   thread local data in LE code */
+#define R_386_TLS_LDM_PUSH 29		/* Tag for pushl in LDM TLS code */
+#define R_386_TLS_LDM_CALL 30		/* Relocation for call to
+					   __tls_get_addr() in LDM code */
+#define R_386_TLS_LDM_POP  31		/* Tag for popl in LDM TLS code */
+#define R_386_TLS_LDO_32   32		/* Offset relative to TLS block */
+#define R_386_TLS_IE_32	   33		/* GOT entry for negated static TLS
+					   block offset */
+#define R_386_TLS_LE_32	   34		/* Negated offset relative to static
+					   TLS block */
+#define R_386_TLS_DTPMOD32 35		/* ID of module containing symbol */
+#define R_386_TLS_DTPOFF32 36		/* Offset in TLS block */
+#define R_386_TLS_TPOFF32  37		/* Negated offset in static TLS block */
+/* Keep this the last entry.  */
+#define R_386_NUM	   38
+
+/* SUN SPARC specific definitions.  */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_SPARC_REGISTER	13	/* Global register reserved to app. */
+
+/* Values for Elf64_Ehdr.e_flags.  */
+
+#define EF_SPARCV9_MM		3
+#define EF_SPARCV9_TSO		0
+#define EF_SPARCV9_PSO		1
+#define EF_SPARCV9_RMO		2
+#define EF_SPARC_LEDATA		0x800000 /* little endian data */
+#define EF_SPARC_EXT_MASK	0xFFFF00
+#define EF_SPARC_32PLUS		0x000100 /* generic V8+ features */
+#define EF_SPARC_SUN_US1	0x000200 /* Sun UltraSPARC1 extensions */
+#define EF_SPARC_HAL_R1		0x000400 /* HAL R1 extensions */
+#define EF_SPARC_SUN_US3	0x000800 /* Sun UltraSPARCIII extensions */
+
+/* SPARC relocs.  */
+
+#define R_SPARC_NONE		0	/* No reloc */
+#define R_SPARC_8		1	/* Direct 8 bit */
+#define R_SPARC_16		2	/* Direct 16 bit */
+#define R_SPARC_32		3	/* Direct 32 bit */
+#define R_SPARC_DISP8		4	/* PC relative 8 bit */
+#define R_SPARC_DISP16		5	/* PC relative 16 bit */
+#define R_SPARC_DISP32		6	/* PC relative 32 bit */
+#define R_SPARC_WDISP30		7	/* PC relative 30 bit shifted */
+#define R_SPARC_WDISP22		8	/* PC relative 22 bit shifted */
+#define R_SPARC_HI22		9	/* High 22 bit */
+#define R_SPARC_22		10	/* Direct 22 bit */
+#define R_SPARC_13		11	/* Direct 13 bit */
+#define R_SPARC_LO10		12	/* Truncated 10 bit */
+#define R_SPARC_GOT10		13	/* Truncated 10 bit GOT entry */
+#define R_SPARC_GOT13		14	/* 13 bit GOT entry */
+#define R_SPARC_GOT22		15	/* 22 bit GOT entry shifted */
+#define R_SPARC_PC10		16	/* PC relative 10 bit truncated */
+#define R_SPARC_PC22		17	/* PC relative 22 bit shifted */
+#define R_SPARC_WPLT30		18	/* 30 bit PC relative PLT address */
+#define R_SPARC_COPY		19	/* Copy symbol at runtime */
+#define R_SPARC_GLOB_DAT	20	/* Create GOT entry */
+#define R_SPARC_JMP_SLOT	21	/* Create PLT entry */
+#define R_SPARC_RELATIVE	22	/* Adjust by program base */
+#define R_SPARC_UA32		23	/* Direct 32 bit unaligned */
+
+/* Additional Sparc64 relocs.  */
+
+#define R_SPARC_PLT32		24	/* Direct 32 bit ref to PLT entry */
+#define R_SPARC_HIPLT22		25	/* High 22 bit PLT entry */
+#define R_SPARC_LOPLT10		26	/* Truncated 10 bit PLT entry */
+#define R_SPARC_PCPLT32		27	/* PC rel 32 bit ref to PLT entry */
+#define R_SPARC_PCPLT22		28	/* PC rel high 22 bit PLT entry */
+#define R_SPARC_PCPLT10		29	/* PC rel trunc 10 bit PLT entry */
+#define R_SPARC_10		30	/* Direct 10 bit */
+#define R_SPARC_11		31	/* Direct 11 bit */
+#define R_SPARC_64		32	/* Direct 64 bit */
+#define R_SPARC_OLO10		33	/* 10bit with secondary 13bit addend */
+#define R_SPARC_HH22		34	/* Top 22 bits of direct 64 bit */
+#define R_SPARC_HM10		35	/* High middle 10 bits of ... */
+#define R_SPARC_LM22		36	/* Low middle 22 bits of ... */
+#define R_SPARC_PC_HH22		37	/* Top 22 bits of pc rel 64 bit */
+#define R_SPARC_PC_HM10		38	/* High middle 10 bit of ... */
+#define R_SPARC_PC_LM22		39	/* Low miggle 22 bits of ... */
+#define R_SPARC_WDISP16		40	/* PC relative 16 bit shifted */
+#define R_SPARC_WDISP19		41	/* PC relative 19 bit shifted */
+#define R_SPARC_7		43	/* Direct 7 bit */
+#define R_SPARC_5		44	/* Direct 5 bit */
+#define R_SPARC_6		45	/* Direct 6 bit */
+#define R_SPARC_DISP64		46	/* PC relative 64 bit */
+#define R_SPARC_PLT64		47	/* Direct 64 bit ref to PLT entry */
+#define R_SPARC_HIX22		48	/* High 22 bit complemented */
+#define R_SPARC_LOX10		49	/* Truncated 11 bit complemented */
+#define R_SPARC_H44		50	/* Direct high 12 of 44 bit */
+#define R_SPARC_M44		51	/* Direct mid 22 of 44 bit */
+#define R_SPARC_L44		52	/* Direct low 10 of 44 bit */
+#define R_SPARC_REGISTER	53	/* Global register usage */
+#define R_SPARC_UA64		54	/* Direct 64 bit unaligned */
+#define R_SPARC_UA16		55	/* Direct 16 bit unaligned */
+#define R_SPARC_TLS_GD_HI22	56
+#define R_SPARC_TLS_GD_LO10	57
+#define R_SPARC_TLS_GD_ADD	58
+#define R_SPARC_TLS_GD_CALL	59
+#define R_SPARC_TLS_LDM_HI22	60
+#define R_SPARC_TLS_LDM_LO10	61
+#define R_SPARC_TLS_LDM_ADD	62
+#define R_SPARC_TLS_LDM_CALL	63
+#define R_SPARC_TLS_LDO_HIX22	64
+#define R_SPARC_TLS_LDO_LOX10	65
+#define R_SPARC_TLS_LDO_ADD	66
+#define R_SPARC_TLS_IE_HI22	67
+#define R_SPARC_TLS_IE_LO10	68
+#define R_SPARC_TLS_IE_LD	69
+#define R_SPARC_TLS_IE_LDX	70
+#define R_SPARC_TLS_IE_ADD	71
+#define R_SPARC_TLS_LE_HIX22	72
+#define R_SPARC_TLS_LE_LOX10	73
+#define R_SPARC_TLS_DTPMOD32	74
+#define R_SPARC_TLS_DTPMOD64	75
+#define R_SPARC_TLS_DTPOFF32	76
+#define R_SPARC_TLS_DTPOFF64	77
+#define R_SPARC_TLS_TPOFF32	78
+#define R_SPARC_TLS_TPOFF64	79
+/* Keep this the last entry.  */
+#define R_SPARC_NUM		80
+
+/* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
+
+#define DT_SPARC_REGISTER 0x70000001
+#define DT_SPARC_NUM	2
+
+/* Bits present in AT_HWCAP on SPARC.  */
+
+#define HWCAP_SPARC_FLUSH	1	/* The CPU supports flush insn.  */
+#define HWCAP_SPARC_STBAR	2
+#define HWCAP_SPARC_SWAP	4
+#define HWCAP_SPARC_MULDIV	8
+#define HWCAP_SPARC_V9		16	/* The CPU is v9, so v8plus is ok.  */
+#define HWCAP_SPARC_ULTRA3	32
+#define HWCAP_SPARC_BLKINIT	64	/* Sun4v with block-init/load-twin.  */
+#define HWCAP_SPARC_N2		128
+
+/* MIPS R3000 specific definitions.  */
+
+/* Legal values for e_flags field of Elf32_Ehdr.  */
+
+#define EF_MIPS_NOREORDER   1		/* A .noreorder directive was used */
+#define EF_MIPS_PIC	    2		/* Contains PIC code */
+#define EF_MIPS_CPIC	    4		/* Uses PIC calling sequence */
+#define EF_MIPS_XGOT	    8
+#define EF_MIPS_64BIT_WHIRL 16
+#define EF_MIPS_ABI2	    32
+#define EF_MIPS_ABI_ON32    64
+#define EF_MIPS_ARCH	    0xf0000000	/* MIPS architecture level */
+
+/* Legal values for MIPS architecture level.  */
+
+#define EF_MIPS_ARCH_1	    0x00000000	/* -mips1 code.  */
+#define EF_MIPS_ARCH_2	    0x10000000	/* -mips2 code.  */
+#define EF_MIPS_ARCH_3	    0x20000000	/* -mips3 code.  */
+#define EF_MIPS_ARCH_4	    0x30000000	/* -mips4 code.  */
+#define EF_MIPS_ARCH_5	    0x40000000	/* -mips5 code.  */
+#define EF_MIPS_ARCH_32	    0x60000000	/* MIPS32 code.  */
+#define EF_MIPS_ARCH_64	    0x70000000	/* MIPS64 code.  */
+
+/* The following are non-official names and should not be used.  */
+
+#define E_MIPS_ARCH_1	  0x00000000	/* -mips1 code.  */
+#define E_MIPS_ARCH_2	  0x10000000	/* -mips2 code.  */
+#define E_MIPS_ARCH_3	  0x20000000	/* -mips3 code.  */
+#define E_MIPS_ARCH_4	  0x30000000	/* -mips4 code.  */
+#define E_MIPS_ARCH_5	  0x40000000	/* -mips5 code.  */
+#define E_MIPS_ARCH_32	  0x60000000	/* MIPS32 code.  */
+#define E_MIPS_ARCH_64	  0x70000000	/* MIPS64 code.  */
+
+/* Special section indices.  */
+
+#define SHN_MIPS_ACOMMON    0xff00	/* Allocated common symbols */
+#define SHN_MIPS_TEXT	    0xff01	/* Allocated test symbols.  */
+#define SHN_MIPS_DATA	    0xff02	/* Allocated data symbols.  */
+#define SHN_MIPS_SCOMMON    0xff03	/* Small common symbols */
+#define SHN_MIPS_SUNDEFINED 0xff04	/* Small undefined symbols */
+
+/* Legal values for sh_type field of Elf32_Shdr.  */
+
+#define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link */
+#define SHT_MIPS_MSYM	       0x70000001
+#define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols */
+#define SHT_MIPS_GPTAB	       0x70000003 /* Global data area sizes */
+#define SHT_MIPS_UCODE	       0x70000004 /* Reserved for SGI/MIPS compilers */
+#define SHT_MIPS_DEBUG	       0x70000005 /* MIPS ECOFF debugging information*/
+#define SHT_MIPS_REGINFO       0x70000006 /* Register usage information */
+#define SHT_MIPS_PACKAGE       0x70000007
+#define SHT_MIPS_PACKSYM       0x70000008
+#define SHT_MIPS_RELD	       0x70000009
+#define SHT_MIPS_IFACE         0x7000000b
+#define SHT_MIPS_CONTENT       0x7000000c
+#define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
+#define SHT_MIPS_SHDR	       0x70000010
+#define SHT_MIPS_FDESC	       0x70000011
+#define SHT_MIPS_EXTSYM	       0x70000012
+#define SHT_MIPS_DENSE	       0x70000013
+#define SHT_MIPS_PDESC	       0x70000014
+#define SHT_MIPS_LOCSYM	       0x70000015
+#define SHT_MIPS_AUXSYM	       0x70000016
+#define SHT_MIPS_OPTSYM	       0x70000017
+#define SHT_MIPS_LOCSTR	       0x70000018
+#define SHT_MIPS_LINE	       0x70000019
+#define SHT_MIPS_RFDESC	       0x7000001a
+#define SHT_MIPS_DELTASYM      0x7000001b
+#define SHT_MIPS_DELTAINST     0x7000001c
+#define SHT_MIPS_DELTACLASS    0x7000001d
+#define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
+#define SHT_MIPS_DELTADECL     0x7000001f
+#define SHT_MIPS_SYMBOL_LIB    0x70000020
+#define SHT_MIPS_EVENTS	       0x70000021 /* Event section.  */
+#define SHT_MIPS_TRANSLATE     0x70000022
+#define SHT_MIPS_PIXIE	       0x70000023
+#define SHT_MIPS_XLATE	       0x70000024
+#define SHT_MIPS_XLATE_DEBUG   0x70000025
+#define SHT_MIPS_WHIRL	       0x70000026
+#define SHT_MIPS_EH_REGION     0x70000027
+#define SHT_MIPS_XLATE_OLD     0x70000028
+#define SHT_MIPS_PDR_EXCEPTION 0x70000029
+
+/* Legal values for sh_flags field of Elf32_Shdr.  */
+
+#define SHF_MIPS_GPREL	 0x10000000	/* Must be part of global data area */
+#define SHF_MIPS_MERGE	 0x20000000
+#define SHF_MIPS_ADDR	 0x40000000
+#define SHF_MIPS_STRINGS 0x80000000
+#define SHF_MIPS_NOSTRIP 0x08000000
+#define SHF_MIPS_LOCAL	 0x04000000
+#define SHF_MIPS_NAMES	 0x02000000
+#define SHF_MIPS_NODUPE	 0x01000000
+
+
+/* Symbol tables.  */
+
+/* MIPS specific values for `st_other'.  */
+#define STO_MIPS_DEFAULT		0x0
+#define STO_MIPS_INTERNAL		0x1
+#define STO_MIPS_HIDDEN			0x2
+#define STO_MIPS_PROTECTED		0x3
+#define STO_MIPS_SC_ALIGN_UNUSED	0xff
+
+/* MIPS specific values for `st_info'.  */
+#define STB_MIPS_SPLIT_COMMON		13
+
+/* Entries found in sections of type SHT_MIPS_GPTAB.  */
+
+typedef union
+{
+  struct
+    {
+      Elf32_Word gt_current_g_value;	/* -G value used for compilation */
+      Elf32_Word gt_unused;		/* Not used */
+    } gt_header;			/* First entry in section */
+  struct
+    {
+      Elf32_Word gt_g_value;		/* If this value were used for -G */
+      Elf32_Word gt_bytes;		/* This many bytes would be used */
+    } gt_entry;				/* Subsequent entries in section */
+} Elf32_gptab;
+
+/* Entry found in sections of type SHT_MIPS_REGINFO.  */
+
+typedef struct
+{
+  Elf32_Word	ri_gprmask;		/* General registers used */
+  Elf32_Word	ri_cprmask[4];		/* Coprocessor registers used */
+  Elf32_Sword	ri_gp_value;		/* $gp register value */
+} Elf32_RegInfo;
+
+/* Entries found in sections of type SHT_MIPS_OPTIONS.  */
+
+typedef struct
+{
+  unsigned char kind;		/* Determines interpretation of the
+				   variable part of descriptor.  */
+  unsigned char size;		/* Size of descriptor, including header.  */
+  Elf32_Section section;	/* Section header index of section affected,
+				   0 for global options.  */
+  Elf32_Word info;		/* Kind-specific information.  */
+} Elf_Options;
+
+/* Values for `kind' field in Elf_Options.  */
+
+#define ODK_NULL	0	/* Undefined.  */
+#define ODK_REGINFO	1	/* Register usage information.  */
+#define ODK_EXCEPTIONS	2	/* Exception processing options.  */
+#define ODK_PAD		3	/* Section padding options.  */
+#define ODK_HWPATCH	4	/* Hardware workarounds performed */
+#define ODK_FILL	5	/* record the fill value used by the linker. */
+#define ODK_TAGS	6	/* reserve space for desktop tools to write. */
+#define ODK_HWAND	7	/* HW workarounds.  'AND' bits when merging. */
+#define ODK_HWOR	8	/* HW workarounds.  'OR' bits when merging.  */
+
+/* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries.  */
+
+#define OEX_FPU_MIN	0x1f	/* FPE's which MUST be enabled.  */
+#define OEX_FPU_MAX	0x1f00	/* FPE's which MAY be enabled.  */
+#define OEX_PAGE0	0x10000	/* page zero must be mapped.  */
+#define OEX_SMM		0x20000	/* Force sequential memory mode?  */
+#define OEX_FPDBUG	0x40000	/* Force floating point debug mode?  */
+#define OEX_PRECISEFP	OEX_FPDBUG
+#define OEX_DISMISS	0x80000	/* Dismiss invalid address faults?  */
+
+#define OEX_FPU_INVAL	0x10
+#define OEX_FPU_DIV0	0x08
+#define OEX_FPU_OFLO	0x04
+#define OEX_FPU_UFLO	0x02
+#define OEX_FPU_INEX	0x01
+
+/* Masks for `info' in Elf_Options for an ODK_HWPATCH entry.  */
+
+#define OHW_R4KEOP	0x1	/* R4000 end-of-page patch.  */
+#define OHW_R8KPFETCH	0x2	/* may need R8000 prefetch patch.  */
+#define OHW_R5KEOP	0x4	/* R5000 end-of-page patch.  */
+#define OHW_R5KCVTL	0x8	/* R5000 cvt.[ds].l bug.  clean=1.  */
+
+#define OPAD_PREFIX	0x1
+#define OPAD_POSTFIX	0x2
+#define OPAD_SYMBOL	0x4
+
+/* Entry found in `.options' section.  */
+
+typedef struct
+{
+  Elf32_Word hwp_flags1;	/* Extra flags.  */
+  Elf32_Word hwp_flags2;	/* Extra flags.  */
+} Elf_Options_Hw;
+
+/* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries.  */
+
+#define OHWA0_R4KEOP_CHECKED	0x00000001
+#define OHWA1_R4KEOP_CLEAN	0x00000002
+
+/* MIPS relocs.  */
+
+#define R_MIPS_NONE		0	/* No reloc */
+#define R_MIPS_16		1	/* Direct 16 bit */
+#define R_MIPS_32		2	/* Direct 32 bit */
+#define R_MIPS_REL32		3	/* PC relative 32 bit */
+#define R_MIPS_26		4	/* Direct 26 bit shifted */
+#define R_MIPS_HI16		5	/* High 16 bit */
+#define R_MIPS_LO16		6	/* Low 16 bit */
+#define R_MIPS_GPREL16		7	/* GP relative 16 bit */
+#define R_MIPS_LITERAL		8	/* 16 bit literal entry */
+#define R_MIPS_GOT16		9	/* 16 bit GOT entry */
+#define R_MIPS_PC16		10	/* PC relative 16 bit */
+#define R_MIPS_CALL16		11	/* 16 bit GOT entry for function */
+#define R_MIPS_GPREL32		12	/* GP relative 32 bit */
+
+#define R_MIPS_SHIFT5		16
+#define R_MIPS_SHIFT6		17
+#define R_MIPS_64		18
+#define R_MIPS_GOT_DISP		19
+#define R_MIPS_GOT_PAGE		20
+#define R_MIPS_GOT_OFST		21
+#define R_MIPS_GOT_HI16		22
+#define R_MIPS_GOT_LO16		23
+#define R_MIPS_SUB		24
+#define R_MIPS_INSERT_A		25
+#define R_MIPS_INSERT_B		26
+#define R_MIPS_DELETE		27
+#define R_MIPS_HIGHER		28
+#define R_MIPS_HIGHEST		29
+#define R_MIPS_CALL_HI16	30
+#define R_MIPS_CALL_LO16	31
+#define R_MIPS_SCN_DISP		32
+#define R_MIPS_REL16		33
+#define R_MIPS_ADD_IMMEDIATE	34
+#define R_MIPS_PJUMP		35
+#define R_MIPS_RELGOT		36
+#define R_MIPS_JALR		37
+#define R_MIPS_TLS_DTPMOD32	38	/* Module number 32 bit */
+#define R_MIPS_TLS_DTPREL32	39	/* Module-relative offset 32 bit */
+#define R_MIPS_TLS_DTPMOD64	40	/* Module number 64 bit */
+#define R_MIPS_TLS_DTPREL64	41	/* Module-relative offset 64 bit */
+#define R_MIPS_TLS_GD		42	/* 16 bit GOT offset for GD */
+#define R_MIPS_TLS_LDM		43	/* 16 bit GOT offset for LDM */
+#define R_MIPS_TLS_DTPREL_HI16	44	/* Module-relative offset, high 16 bits */
+#define R_MIPS_TLS_DTPREL_LO16	45	/* Module-relative offset, low 16 bits */
+#define R_MIPS_TLS_GOTTPREL	46	/* 16 bit GOT offset for IE */
+#define R_MIPS_TLS_TPREL32	47	/* TP-relative offset, 32 bit */
+#define R_MIPS_TLS_TPREL64	48	/* TP-relative offset, 64 bit */
+#define R_MIPS_TLS_TPREL_HI16	49	/* TP-relative offset, high 16 bits */
+#define R_MIPS_TLS_TPREL_LO16	50	/* TP-relative offset, low 16 bits */
+#define R_MIPS_GLOB_DAT		51
+/* Keep this the last entry.  */
+#define R_MIPS_NUM		52
+
+/* Legal values for p_type field of Elf32_Phdr.  */
+
+#define PT_MIPS_REGINFO	0x70000000	/* Register usage information */
+#define PT_MIPS_RTPROC  0x70000001	/* Runtime procedure table. */
+#define PT_MIPS_OPTIONS 0x70000002
+
+/* Special program header types.  */
+
+#define PF_MIPS_LOCAL	0x10000000
+
+/* Legal values for d_tag field of Elf32_Dyn.  */
+
+#define DT_MIPS_RLD_VERSION  0x70000001	/* Runtime linker interface version */
+#define DT_MIPS_TIME_STAMP   0x70000002	/* Timestamp */
+#define DT_MIPS_ICHECKSUM    0x70000003	/* Checksum */
+#define DT_MIPS_IVERSION     0x70000004	/* Version string (string tbl index) */
+#define DT_MIPS_FLAGS	     0x70000005	/* Flags */
+#define DT_MIPS_BASE_ADDRESS 0x70000006	/* Base address */
+#define DT_MIPS_MSYM	     0x70000007
+#define DT_MIPS_CONFLICT     0x70000008	/* Address of CONFLICT section */
+#define DT_MIPS_LIBLIST	     0x70000009	/* Address of LIBLIST section */
+#define DT_MIPS_LOCAL_GOTNO  0x7000000a	/* Number of local GOT entries */
+#define DT_MIPS_CONFLICTNO   0x7000000b	/* Number of CONFLICT entries */
+#define DT_MIPS_LIBLISTNO    0x70000010	/* Number of LIBLIST entries */
+#define DT_MIPS_SYMTABNO     0x70000011	/* Number of DYNSYM entries */
+#define DT_MIPS_UNREFEXTNO   0x70000012	/* First external DYNSYM */
+#define DT_MIPS_GOTSYM	     0x70000013	/* First GOT entry in DYNSYM */
+#define DT_MIPS_HIPAGENO     0x70000014	/* Number of GOT page table entries */
+#define DT_MIPS_RLD_MAP	     0x70000016	/* Address of run time loader map.  */
+#define DT_MIPS_DELTA_CLASS  0x70000017	/* Delta C++ class definition.  */
+#define DT_MIPS_DELTA_CLASS_NO    0x70000018 /* Number of entries in
+						DT_MIPS_DELTA_CLASS.  */
+#define DT_MIPS_DELTA_INSTANCE    0x70000019 /* Delta C++ class instances.  */
+#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
+						DT_MIPS_DELTA_INSTANCE.  */
+#define DT_MIPS_DELTA_RELOC  0x7000001b /* Delta relocations.  */
+#define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
+					     DT_MIPS_DELTA_RELOC.  */
+#define DT_MIPS_DELTA_SYM    0x7000001d /* Delta symbols that Delta
+					   relocations refer to.  */
+#define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
+					   DT_MIPS_DELTA_SYM.  */
+#define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
+					     class declaration.  */
+#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
+						DT_MIPS_DELTA_CLASSSYM.  */
+#define DT_MIPS_CXX_FLAGS    0x70000022 /* Flags indicating for C++ flavor.  */
+#define DT_MIPS_PIXIE_INIT   0x70000023
+#define DT_MIPS_SYMBOL_LIB   0x70000024
+#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
+#define DT_MIPS_LOCAL_GOTIDX 0x70000026
+#define DT_MIPS_HIDDEN_GOTIDX 0x70000027
+#define DT_MIPS_PROTECTED_GOTIDX 0x70000028
+#define DT_MIPS_OPTIONS	     0x70000029 /* Address of .options.  */
+#define DT_MIPS_INTERFACE    0x7000002a /* Address of .interface.  */
+#define DT_MIPS_DYNSTR_ALIGN 0x7000002b
+#define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
+#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
+						    function stored in GOT.  */
+#define DT_MIPS_PERF_SUFFIX  0x7000002e /* Default suffix of dso to be added
+					   by rld on dlopen() calls.  */
+#define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
+#define DT_MIPS_GP_VALUE     0x70000030 /* GP value for aux GOTs.  */
+#define DT_MIPS_AUX_DYNAMIC  0x70000031 /* Address of aux .dynamic.  */
+#define DT_MIPS_NUM	     0x32
+
+/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry.  */
+
+#define RHF_NONE		   0		/* No flags */
+#define RHF_QUICKSTART		   (1 << 0)	/* Use quickstart */
+#define RHF_NOTPOT		   (1 << 1)	/* Hash size not power of 2 */
+#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)	/* Ignore LD_LIBRARY_PATH */
+#define RHF_NO_MOVE		   (1 << 3)
+#define RHF_SGI_ONLY		   (1 << 4)
+#define RHF_GUARANTEE_INIT	   (1 << 5)
+#define RHF_DELTA_C_PLUS_PLUS	   (1 << 6)
+#define RHF_GUARANTEE_START_INIT   (1 << 7)
+#define RHF_PIXIE		   (1 << 8)
+#define RHF_DEFAULT_DELAY_LOAD	   (1 << 9)
+#define RHF_REQUICKSTART	   (1 << 10)
+#define RHF_REQUICKSTARTED	   (1 << 11)
+#define RHF_CORD		   (1 << 12)
+#define RHF_NO_UNRES_UNDEF	   (1 << 13)
+#define RHF_RLD_ORDER_SAFE	   (1 << 14)
+
+/* Entries found in sections of type SHT_MIPS_LIBLIST.  */
+
+typedef struct
+{
+  Elf32_Word l_name;		/* Name (string table index) */
+  Elf32_Word l_time_stamp;	/* Timestamp */
+  Elf32_Word l_checksum;	/* Checksum */
+  Elf32_Word l_version;		/* Interface version */
+  Elf32_Word l_flags;		/* Flags */
+} Elf32_Lib;
+
+typedef struct
+{
+  Elf64_Word l_name;		/* Name (string table index) */
+  Elf64_Word l_time_stamp;	/* Timestamp */
+  Elf64_Word l_checksum;	/* Checksum */
+  Elf64_Word l_version;		/* Interface version */
+  Elf64_Word l_flags;		/* Flags */
+} Elf64_Lib;
+
+
+/* Legal values for l_flags.  */
+
+#define LL_NONE		  0
+#define LL_EXACT_MATCH	  (1 << 0)	/* Require exact match */
+#define LL_IGNORE_INT_VER (1 << 1)	/* Ignore interface version */
+#define LL_REQUIRE_MINOR  (1 << 2)
+#define LL_EXPORTS	  (1 << 3)
+#define LL_DELAY_LOAD	  (1 << 4)
+#define LL_DELTA	  (1 << 5)
+
+/* Entries found in sections of type SHT_MIPS_CONFLICT.  */
+
+typedef Elf32_Addr Elf32_Conflict;
+
+
+/* HPPA specific definitions.  */
+
+/* Legal values for e_flags field of Elf32_Ehdr.  */
+
+#define EF_PARISC_TRAPNIL	0x00010000 /* Trap nil pointer dereference.  */
+#define EF_PARISC_EXT		0x00020000 /* Program uses arch. extensions. */
+#define EF_PARISC_LSB		0x00040000 /* Program expects little endian. */
+#define EF_PARISC_WIDE		0x00080000 /* Program expects wide mode.  */
+#define EF_PARISC_NO_KABP	0x00100000 /* No kernel assisted branch
+					      prediction.  */
+#define EF_PARISC_LAZYSWAP	0x00400000 /* Allow lazy swapping.  */
+#define EF_PARISC_ARCH		0x0000ffff /* Architecture version.  */
+
+/* Defined values for `e_flags & EF_PARISC_ARCH' are:  */
+
+#define EFA_PARISC_1_0		    0x020b /* PA-RISC 1.0 big-endian.  */
+#define EFA_PARISC_1_1		    0x0210 /* PA-RISC 1.1 big-endian.  */
+#define EFA_PARISC_2_0		    0x0214 /* PA-RISC 2.0 big-endian.  */
+
+/* Additional section indeces.  */
+
+#define SHN_PARISC_ANSI_COMMON	0xff00	   /* Section for tenatively declared
+					      symbols in ANSI C.  */
+#define SHN_PARISC_HUGE_COMMON	0xff01	   /* Common blocks in huge model.  */
+
+/* Legal values for sh_type field of Elf32_Shdr.  */
+
+#define SHT_PARISC_EXT		0x70000000 /* Contains product specific ext. */
+#define SHT_PARISC_UNWIND	0x70000001 /* Unwind information.  */
+#define SHT_PARISC_DOC		0x70000002 /* Debug info for optimized code. */
+
+/* Legal values for sh_flags field of Elf32_Shdr.  */
+
+#define SHF_PARISC_SHORT	0x20000000 /* Section with short addressing. */
+#define SHF_PARISC_HUGE		0x40000000 /* Section far from gp.  */
+#define SHF_PARISC_SBP		0x80000000 /* Static branch prediction code. */
+
+/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
+
+#define STT_PARISC_MILLICODE	13	/* Millicode function entry point.  */
+
+#define STT_HP_OPAQUE		(STT_LOOS + 0x1)
+#define STT_HP_STUB		(STT_LOOS + 0x2)
+
+/* HPPA relocs.  */
+
+#define R_PARISC_NONE		0	/* No reloc.  */
+#define R_PARISC_DIR32		1	/* Direct 32-bit reference.  */
+#define R_PARISC_DIR21L		2	/* Left 21 bits of eff. address.  */
+#define R_PARISC_DIR17R		3	/* Right 17 bits of eff. address.  */
+#define R_PARISC_DIR17F		4	/* 17 bits of eff. address.  */
+#define R_PARISC_DIR14R		6	/* Right 14 bits of eff. address.  */
+#define R_PARISC_PCREL32	9	/* 32-bit rel. address.  */
+#define R_PARISC_PCREL21L	10	/* Left 21 bits of rel. address.  */
+#define R_PARISC_PCREL17R	11	/* Right 17 bits of rel. address.  */
+#define R_PARISC_PCREL17F	12	/* 17 bits of rel. address.  */
+#define R_PARISC_PCREL14R	14	/* Right 14 bits of rel. address.  */
+#define R_PARISC_DPREL21L	18	/* Left 21 bits of rel. address.  */
+#define R_PARISC_DPREL14R	22	/* Right 14 bits of rel. address.  */
+#define R_PARISC_GPREL21L	26	/* GP-relative, left 21 bits.  */
+#define R_PARISC_GPREL14R	30	/* GP-relative, right 14 bits.  */
+#define R_PARISC_LTOFF21L	34	/* LT-relative, left 21 bits.  */
+#define R_PARISC_LTOFF14R	38	/* LT-relative, right 14 bits.  */
+#define R_PARISC_SECREL32	41	/* 32 bits section rel. address.  */
+#define R_PARISC_SEGBASE	48	/* No relocation, set segment base.  */
+#define R_PARISC_SEGREL32	49	/* 32 bits segment rel. address.  */
+#define R_PARISC_PLTOFF21L	50	/* PLT rel. address, left 21 bits.  */
+#define R_PARISC_PLTOFF14R	54	/* PLT rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF_FPTR32	57	/* 32 bits LT-rel. function pointer. */
+#define R_PARISC_LTOFF_FPTR21L	58	/* LT-rel. fct ptr, left 21 bits. */
+#define R_PARISC_LTOFF_FPTR14R	62	/* LT-rel. fct ptr, right 14 bits. */
+#define R_PARISC_FPTR64		64	/* 64 bits function address.  */
+#define R_PARISC_PLABEL32	65	/* 32 bits function address.  */
+#define R_PARISC_PLABEL21L	66	/* Left 21 bits of fdesc address.  */
+#define R_PARISC_PLABEL14R	70	/* Right 14 bits of fdesc address.  */
+#define R_PARISC_PCREL64	72	/* 64 bits PC-rel. address.  */
+#define R_PARISC_PCREL22F	74	/* 22 bits PC-rel. address.  */
+#define R_PARISC_PCREL14WR	75	/* PC-rel. address, right 14 bits.  */
+#define R_PARISC_PCREL14DR	76	/* PC rel. address, right 14 bits.  */
+#define R_PARISC_PCREL16F	77	/* 16 bits PC-rel. address.  */
+#define R_PARISC_PCREL16WF	78	/* 16 bits PC-rel. address.  */
+#define R_PARISC_PCREL16DF	79	/* 16 bits PC-rel. address.  */
+#define R_PARISC_DIR64		80	/* 64 bits of eff. address.  */
+#define R_PARISC_DIR14WR	83	/* 14 bits of eff. address.  */
+#define R_PARISC_DIR14DR	84	/* 14 bits of eff. address.  */
+#define R_PARISC_DIR16F		85	/* 16 bits of eff. address.  */
+#define R_PARISC_DIR16WF	86	/* 16 bits of eff. address.  */
+#define R_PARISC_DIR16DF	87	/* 16 bits of eff. address.  */
+#define R_PARISC_GPREL64	88	/* 64 bits of GP-rel. address.  */
+#define R_PARISC_GPREL14WR	91	/* GP-rel. address, right 14 bits.  */
+#define R_PARISC_GPREL14DR	92	/* GP-rel. address, right 14 bits.  */
+#define R_PARISC_GPREL16F	93	/* 16 bits GP-rel. address.  */
+#define R_PARISC_GPREL16WF	94	/* 16 bits GP-rel. address.  */
+#define R_PARISC_GPREL16DF	95	/* 16 bits GP-rel. address.  */
+#define R_PARISC_LTOFF64	96	/* 64 bits LT-rel. address.  */
+#define R_PARISC_LTOFF14WR	99	/* LT-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF14DR	100	/* LT-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF16F	101	/* 16 bits LT-rel. address.  */
+#define R_PARISC_LTOFF16WF	102	/* 16 bits LT-rel. address.  */
+#define R_PARISC_LTOFF16DF	103	/* 16 bits LT-rel. address.  */
+#define R_PARISC_SECREL64	104	/* 64 bits section rel. address.  */
+#define R_PARISC_SEGREL64	112	/* 64 bits segment rel. address.  */
+#define R_PARISC_PLTOFF14WR	115	/* PLT-rel. address, right 14 bits.  */
+#define R_PARISC_PLTOFF14DR	116	/* PLT-rel. address, right 14 bits.  */
+#define R_PARISC_PLTOFF16F	117	/* 16 bits LT-rel. address.  */
+#define R_PARISC_PLTOFF16WF	118	/* 16 bits PLT-rel. address.  */
+#define R_PARISC_PLTOFF16DF	119	/* 16 bits PLT-rel. address.  */
+#define R_PARISC_LTOFF_FPTR64	120	/* 64 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR14WR	123	/* LT-rel. fct. ptr., right 14 bits. */
+#define R_PARISC_LTOFF_FPTR14DR	124	/* LT-rel. fct. ptr., right 14 bits. */
+#define R_PARISC_LTOFF_FPTR16F	125	/* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR16WF	126	/* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LTOFF_FPTR16DF	127	/* 16 bits LT-rel. function ptr.  */
+#define R_PARISC_LORESERVE	128
+#define R_PARISC_COPY		128	/* Copy relocation.  */
+#define R_PARISC_IPLT		129	/* Dynamic reloc, imported PLT */
+#define R_PARISC_EPLT		130	/* Dynamic reloc, exported PLT */
+#define R_PARISC_TPREL32	153	/* 32 bits TP-rel. address.  */
+#define R_PARISC_TPREL21L	154	/* TP-rel. address, left 21 bits.  */
+#define R_PARISC_TPREL14R	158	/* TP-rel. address, right 14 bits.  */
+#define R_PARISC_LTOFF_TP21L	162	/* LT-TP-rel. address, left 21 bits. */
+#define R_PARISC_LTOFF_TP14R	166	/* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP14F	167	/* 14 bits LT-TP-rel. address.  */
+#define R_PARISC_TPREL64	216	/* 64 bits TP-rel. address.  */
+#define R_PARISC_TPREL14WR	219	/* TP-rel. address, right 14 bits.  */
+#define R_PARISC_TPREL14DR	220	/* TP-rel. address, right 14 bits.  */
+#define R_PARISC_TPREL16F	221	/* 16 bits TP-rel. address.  */
+#define R_PARISC_TPREL16WF	222	/* 16 bits TP-rel. address.  */
+#define R_PARISC_TPREL16DF	223	/* 16 bits TP-rel. address.  */
+#define R_PARISC_LTOFF_TP64	224	/* 64 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP14WR	227	/* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP14DR	228	/* LT-TP-rel. address, right 14 bits.*/
+#define R_PARISC_LTOFF_TP16F	229	/* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP16WF	230	/* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_LTOFF_TP16DF	231	/* 16 bits LT-TP-rel. address.  */
+#define R_PARISC_GNU_VTENTRY	232
+#define R_PARISC_GNU_VTINHERIT	233
+#define R_PARISC_TLS_GD21L	234	/* GD 21-bit left.  */
+#define R_PARISC_TLS_GD14R	235	/* GD 14-bit right.  */
+#define R_PARISC_TLS_GDCALL	236	/* GD call to __t_g_a.  */
+#define R_PARISC_TLS_LDM21L	237	/* LD module 21-bit left.  */
+#define R_PARISC_TLS_LDM14R	238	/* LD module 14-bit right.  */
+#define R_PARISC_TLS_LDMCALL	239	/* LD module call to __t_g_a.  */
+#define R_PARISC_TLS_LDO21L	240	/* LD offset 21-bit left.  */
+#define R_PARISC_TLS_LDO14R	241	/* LD offset 14-bit right.  */
+#define R_PARISC_TLS_DTPMOD32	242	/* DTP module 32-bit.  */
+#define R_PARISC_TLS_DTPMOD64	243	/* DTP module 64-bit.  */
+#define R_PARISC_TLS_DTPOFF32	244	/* DTP offset 32-bit.  */
+#define R_PARISC_TLS_DTPOFF64	245	/* DTP offset 32-bit.  */
+#define R_PARISC_TLS_LE21L	R_PARISC_TPREL21L
+#define R_PARISC_TLS_LE14R	R_PARISC_TPREL14R
+#define R_PARISC_TLS_IE21L	R_PARISC_LTOFF_TP21L
+#define R_PARISC_TLS_IE14R	R_PARISC_LTOFF_TP14R
+#define R_PARISC_TLS_TPREL32	R_PARISC_TPREL32
+#define R_PARISC_TLS_TPREL64	R_PARISC_TPREL64
+#define R_PARISC_HIRESERVE	255
+
+/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */
+
+#define PT_HP_TLS		(PT_LOOS + 0x0)
+#define PT_HP_CORE_NONE		(PT_LOOS + 0x1)
+#define PT_HP_CORE_VERSION	(PT_LOOS + 0x2)
+#define PT_HP_CORE_KERNEL	(PT_LOOS + 0x3)
+#define PT_HP_CORE_COMM		(PT_LOOS + 0x4)
+#define PT_HP_CORE_PROC		(PT_LOOS + 0x5)
+#define PT_HP_CORE_LOADABLE	(PT_LOOS + 0x6)
+#define PT_HP_CORE_STACK	(PT_LOOS + 0x7)
+#define PT_HP_CORE_SHM		(PT_LOOS + 0x8)
+#define PT_HP_CORE_MMF		(PT_LOOS + 0x9)
+#define PT_HP_PARALLEL		(PT_LOOS + 0x10)
+#define PT_HP_FASTBIND		(PT_LOOS + 0x11)
+#define PT_HP_OPT_ANNOT		(PT_LOOS + 0x12)
+#define PT_HP_HSL_ANNOT		(PT_LOOS + 0x13)
+#define PT_HP_STACK		(PT_LOOS + 0x14)
+
+#define PT_PARISC_ARCHEXT	0x70000000
+#define PT_PARISC_UNWIND	0x70000001
+
+/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr.  */
+
+#define PF_PARISC_SBP		0x08000000
+
+#define PF_HP_PAGE_SIZE		0x00100000
+#define PF_HP_FAR_SHARED	0x00200000
+#define PF_HP_NEAR_SHARED	0x00400000
+#define PF_HP_CODE		0x01000000
+#define PF_HP_MODIFY		0x02000000
+#define PF_HP_LAZYSWAP		0x04000000
+#define PF_HP_SBP		0x08000000
+
+
+/* Alpha specific definitions.  */
+
+/* Legal values for e_flags field of Elf64_Ehdr.  */
+
+#define EF_ALPHA_32BIT		1	/* All addresses must be < 2GB.  */
+#define EF_ALPHA_CANRELAX	2	/* Relocations for relaxing exist.  */
+
+/* Legal values for sh_type field of Elf64_Shdr.  */
+
+/* These two are primerily concerned with ECOFF debugging info.  */
+#define SHT_ALPHA_DEBUG		0x70000001
+#define SHT_ALPHA_REGINFO	0x70000002
+
+/* Legal values for sh_flags field of Elf64_Shdr.  */
+
+#define SHF_ALPHA_GPREL		0x10000000
+
+/* Legal values for st_other field of Elf64_Sym.  */
+#define STO_ALPHA_NOPV		0x80	/* No PV required.  */
+#define STO_ALPHA_STD_GPLOAD	0x88	/* PV only used for initial ldgp.  */
+
+/* Alpha relocs.  */
+
+#define R_ALPHA_NONE		0	/* No reloc */
+#define R_ALPHA_REFLONG		1	/* Direct 32 bit */
+#define R_ALPHA_REFQUAD		2	/* Direct 64 bit */
+#define R_ALPHA_GPREL32		3	/* GP relative 32 bit */
+#define R_ALPHA_LITERAL		4	/* GP relative 16 bit w/optimization */
+#define R_ALPHA_LITUSE		5	/* Optimization hint for LITERAL */
+#define R_ALPHA_GPDISP		6	/* Add displacement to GP */
+#define R_ALPHA_BRADDR		7	/* PC+4 relative 23 bit shifted */
+#define R_ALPHA_HINT		8	/* PC+4 relative 16 bit shifted */
+#define R_ALPHA_SREL16		9	/* PC relative 16 bit */
+#define R_ALPHA_SREL32		10	/* PC relative 32 bit */
+#define R_ALPHA_SREL64		11	/* PC relative 64 bit */
+#define R_ALPHA_GPRELHIGH	17	/* GP relative 32 bit, high 16 bits */
+#define R_ALPHA_GPRELLOW	18	/* GP relative 32 bit, low 16 bits */
+#define R_ALPHA_GPREL16		19	/* GP relative 16 bit */
+#define R_ALPHA_COPY		24	/* Copy symbol at runtime */
+#define R_ALPHA_GLOB_DAT	25	/* Create GOT entry */
+#define R_ALPHA_JMP_SLOT	26	/* Create PLT entry */
+#define R_ALPHA_RELATIVE	27	/* Adjust by program base */
+#define R_ALPHA_TLS_GD_HI	28
+#define R_ALPHA_TLSGD		29
+#define R_ALPHA_TLS_LDM		30
+#define R_ALPHA_DTPMOD64	31
+#define R_ALPHA_GOTDTPREL	32
+#define R_ALPHA_DTPREL64	33
+#define R_ALPHA_DTPRELHI	34
+#define R_ALPHA_DTPRELLO	35
+#define R_ALPHA_DTPREL16	36
+#define R_ALPHA_GOTTPREL	37
+#define R_ALPHA_TPREL64		38
+#define R_ALPHA_TPRELHI		39
+#define R_ALPHA_TPRELLO		40
+#define R_ALPHA_TPREL16		41
+/* Keep this the last entry.  */
+#define R_ALPHA_NUM		46
+
+/* Magic values of the LITUSE relocation addend.  */
+#define LITUSE_ALPHA_ADDR	0
+#define LITUSE_ALPHA_BASE	1
+#define LITUSE_ALPHA_BYTOFF	2
+#define LITUSE_ALPHA_JSR	3
+#define LITUSE_ALPHA_TLS_GD	4
+#define LITUSE_ALPHA_TLS_LDM	5
+
+/* Legal values for d_tag of Elf64_Dyn.  */
+#define DT_ALPHA_PLTRO		(DT_LOPROC + 0)
+#define DT_ALPHA_NUM		1
+
+/* PowerPC specific declarations */
+
+/* Values for Elf32/64_Ehdr.e_flags.  */
+#define EF_PPC_EMB		0x80000000	/* PowerPC embedded flag */
+
+/* Cygnus local bits below */
+#define EF_PPC_RELOCATABLE	0x00010000	/* PowerPC -mrelocatable flag*/
+#define EF_PPC_RELOCATABLE_LIB	0x00008000	/* PowerPC -mrelocatable-lib
+						   flag */
+
+/* PowerPC relocations defined by the ABIs */
+#define R_PPC_NONE		0
+#define R_PPC_ADDR32		1	/* 32bit absolute address */
+#define R_PPC_ADDR24		2	/* 26bit address, 2 bits ignored.  */
+#define R_PPC_ADDR16		3	/* 16bit absolute address */
+#define R_PPC_ADDR16_LO		4	/* lower 16bit of absolute address */
+#define R_PPC_ADDR16_HI		5	/* high 16bit of absolute address */
+#define R_PPC_ADDR16_HA		6	/* adjusted high 16bit */
+#define R_PPC_ADDR14		7	/* 16bit address, 2 bits ignored */
+#define R_PPC_ADDR14_BRTAKEN	8
+#define R_PPC_ADDR14_BRNTAKEN	9
+#define R_PPC_REL24		10	/* PC relative 26 bit */
+#define R_PPC_REL14		11	/* PC relative 16 bit */
+#define R_PPC_REL14_BRTAKEN	12
+#define R_PPC_REL14_BRNTAKEN	13
+#define R_PPC_GOT16		14
+#define R_PPC_GOT16_LO		15
+#define R_PPC_GOT16_HI		16
+#define R_PPC_GOT16_HA		17
+#define R_PPC_PLTREL24		18
+#define R_PPC_COPY		19
+#define R_PPC_GLOB_DAT		20
+#define R_PPC_JMP_SLOT		21
+#define R_PPC_RELATIVE		22
+#define R_PPC_LOCAL24PC		23
+#define R_PPC_UADDR32		24
+#define R_PPC_UADDR16		25
+#define R_PPC_REL32		26
+#define R_PPC_PLT32		27
+#define R_PPC_PLTREL32		28
+#define R_PPC_PLT16_LO		29
+#define R_PPC_PLT16_HI		30
+#define R_PPC_PLT16_HA		31
+#define R_PPC_SDAREL16		32
+#define R_PPC_SECTOFF		33
+#define R_PPC_SECTOFF_LO	34
+#define R_PPC_SECTOFF_HI	35
+#define R_PPC_SECTOFF_HA	36
+
+/* PowerPC relocations defined for the TLS access ABI.  */
+#define R_PPC_TLS		67 /* none	(sym+add)@tls */
+#define R_PPC_DTPMOD32		68 /* word32	(sym+add)@dtpmod */
+#define R_PPC_TPREL16		69 /* half16*	(sym+add)@tprel */
+#define R_PPC_TPREL16_LO	70 /* half16	(sym+add)@tprel@l */
+#define R_PPC_TPREL16_HI	71 /* half16	(sym+add)@tprel@h */
+#define R_PPC_TPREL16_HA	72 /* half16	(sym+add)@tprel@ha */
+#define R_PPC_TPREL32		73 /* word32	(sym+add)@tprel */
+#define R_PPC_DTPREL16		74 /* half16*	(sym+add)@dtprel */
+#define R_PPC_DTPREL16_LO	75 /* half16	(sym+add)@dtprel@l */
+#define R_PPC_DTPREL16_HI	76 /* half16	(sym+add)@dtprel@h */
+#define R_PPC_DTPREL16_HA	77 /* half16	(sym+add)@dtprel@ha */
+#define R_PPC_DTPREL32		78 /* word32	(sym+add)@dtprel */
+#define R_PPC_GOT_TLSGD16	79 /* half16*	(sym+add)@got@tlsgd */
+#define R_PPC_GOT_TLSGD16_LO	80 /* half16	(sym+add)@got@tlsgd@l */
+#define R_PPC_GOT_TLSGD16_HI	81 /* half16	(sym+add)@got@tlsgd@h */
+#define R_PPC_GOT_TLSGD16_HA	82 /* half16	(sym+add)@got@tlsgd@ha */
+#define R_PPC_GOT_TLSLD16	83 /* half16*	(sym+add)@got@tlsld */
+#define R_PPC_GOT_TLSLD16_LO	84 /* half16	(sym+add)@got@tlsld@l */
+#define R_PPC_GOT_TLSLD16_HI	85 /* half16	(sym+add)@got@tlsld@h */
+#define R_PPC_GOT_TLSLD16_HA	86 /* half16	(sym+add)@got@tlsld@ha */
+#define R_PPC_GOT_TPREL16	87 /* half16*	(sym+add)@got@tprel */
+#define R_PPC_GOT_TPREL16_LO	88 /* half16	(sym+add)@got@tprel@l */
+#define R_PPC_GOT_TPREL16_HI	89 /* half16	(sym+add)@got@tprel@h */
+#define R_PPC_GOT_TPREL16_HA	90 /* half16	(sym+add)@got@tprel@ha */
+#define R_PPC_GOT_DTPREL16	91 /* half16*	(sym+add)@got@dtprel */
+#define R_PPC_GOT_DTPREL16_LO	92 /* half16*	(sym+add)@got@dtprel@l */
+#define R_PPC_GOT_DTPREL16_HI	93 /* half16*	(sym+add)@got@dtprel@h */
+#define R_PPC_GOT_DTPREL16_HA	94 /* half16*	(sym+add)@got@dtprel@ha */
+
+/* Keep this the last entry.  */
+#define R_PPC_NUM		95
+
+/* The remaining relocs are from the Embedded ELF ABI, and are not
+   in the SVR4 ELF ABI.  */
+#define R_PPC_EMB_NADDR32	101
+#define R_PPC_EMB_NADDR16	102
+#define R_PPC_EMB_NADDR16_LO	103
+#define R_PPC_EMB_NADDR16_HI	104
+#define R_PPC_EMB_NADDR16_HA	105
+#define R_PPC_EMB_SDAI16	106
+#define R_PPC_EMB_SDA2I16	107
+#define R_PPC_EMB_SDA2REL	108
+#define R_PPC_EMB_SDA21		109	/* 16 bit offset in SDA */
+#define R_PPC_EMB_MRKREF	110
+#define R_PPC_EMB_RELSEC16	111
+#define R_PPC_EMB_RELST_LO	112
+#define R_PPC_EMB_RELST_HI	113
+#define R_PPC_EMB_RELST_HA	114
+#define R_PPC_EMB_BIT_FLD	115
+#define R_PPC_EMB_RELSDA	116	/* 16 bit relative offset in SDA */
+
+/* Diab tool relocations.  */
+#define R_PPC_DIAB_SDA21_LO	180	/* like EMB_SDA21, but lower 16 bit */
+#define R_PPC_DIAB_SDA21_HI	181	/* like EMB_SDA21, but high 16 bit */
+#define R_PPC_DIAB_SDA21_HA	182	/* like EMB_SDA21, adjusted high 16 */
+#define R_PPC_DIAB_RELSDA_LO	183	/* like EMB_RELSDA, but lower 16 bit */
+#define R_PPC_DIAB_RELSDA_HI	184	/* like EMB_RELSDA, but high 16 bit */
+#define R_PPC_DIAB_RELSDA_HA	185	/* like EMB_RELSDA, adjusted high 16 */
+
+/* GNU relocs used in PIC code sequences.  */
+#define R_PPC_REL16		249	/* word32   (sym-.) */
+#define R_PPC_REL16_LO		250	/* half16   (sym-.)@l */
+#define R_PPC_REL16_HI		251	/* half16   (sym-.)@h */
+#define R_PPC_REL16_HA		252	/* half16   (sym-.)@ha */
+
+/* This is a phony reloc to handle any old fashioned TOC16 references
+   that may still be in object files.  */
+#define R_PPC_TOC16		255
+
+/* PowerPC specific values for the Dyn d_tag field.  */
+#define DT_PPC_GOT		(DT_LOPROC + 0)
+#define DT_PPC_NUM		1
+
+/* PowerPC64 relocations defined by the ABIs */
+#define R_PPC64_NONE		R_PPC_NONE
+#define R_PPC64_ADDR32		R_PPC_ADDR32 /* 32bit absolute address */
+#define R_PPC64_ADDR24		R_PPC_ADDR24 /* 26bit address, word aligned */
+#define R_PPC64_ADDR16		R_PPC_ADDR16 /* 16bit absolute address */
+#define R_PPC64_ADDR16_LO	R_PPC_ADDR16_LO	/* lower 16bits of address */
+#define R_PPC64_ADDR16_HI	R_PPC_ADDR16_HI	/* high 16bits of address. */
+#define R_PPC64_ADDR16_HA	R_PPC_ADDR16_HA /* adjusted high 16bits.  */
+#define R_PPC64_ADDR14		R_PPC_ADDR14 /* 16bit address, word aligned */
+#define R_PPC64_ADDR14_BRTAKEN	R_PPC_ADDR14_BRTAKEN
+#define R_PPC64_ADDR14_BRNTAKEN	R_PPC_ADDR14_BRNTAKEN
+#define R_PPC64_REL24		R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
+#define R_PPC64_REL14		R_PPC_REL14 /* PC relative 16 bit */
+#define R_PPC64_REL14_BRTAKEN	R_PPC_REL14_BRTAKEN
+#define R_PPC64_REL14_BRNTAKEN	R_PPC_REL14_BRNTAKEN
+#define R_PPC64_GOT16		R_PPC_GOT16
+#define R_PPC64_GOT16_LO	R_PPC_GOT16_LO
+#define R_PPC64_GOT16_HI	R_PPC_GOT16_HI
+#define R_PPC64_GOT16_HA	R_PPC_GOT16_HA
+
+#define R_PPC64_COPY		R_PPC_COPY
+#define R_PPC64_GLOB_DAT	R_PPC_GLOB_DAT
+#define R_PPC64_JMP_SLOT	R_PPC_JMP_SLOT
+#define R_PPC64_RELATIVE	R_PPC_RELATIVE
+
+#define R_PPC64_UADDR32		R_PPC_UADDR32
+#define R_PPC64_UADDR16		R_PPC_UADDR16
+#define R_PPC64_REL32		R_PPC_REL32
+#define R_PPC64_PLT32		R_PPC_PLT32
+#define R_PPC64_PLTREL32	R_PPC_PLTREL32
+#define R_PPC64_PLT16_LO	R_PPC_PLT16_LO
+#define R_PPC64_PLT16_HI	R_PPC_PLT16_HI
+#define R_PPC64_PLT16_HA	R_PPC_PLT16_HA
+
+#define R_PPC64_SECTOFF		R_PPC_SECTOFF
+#define R_PPC64_SECTOFF_LO	R_PPC_SECTOFF_LO
+#define R_PPC64_SECTOFF_HI	R_PPC_SECTOFF_HI
+#define R_PPC64_SECTOFF_HA	R_PPC_SECTOFF_HA
+#define R_PPC64_ADDR30		37 /* word30 (S + A - P) >> 2 */
+#define R_PPC64_ADDR64		38 /* doubleword64 S + A */
+#define R_PPC64_ADDR16_HIGHER	39 /* half16 #higher(S + A) */
+#define R_PPC64_ADDR16_HIGHERA	40 /* half16 #highera(S + A) */
+#define R_PPC64_ADDR16_HIGHEST	41 /* half16 #highest(S + A) */
+#define R_PPC64_ADDR16_HIGHESTA	42 /* half16 #highesta(S + A) */
+#define R_PPC64_UADDR64		43 /* doubleword64 S + A */
+#define R_PPC64_REL64		44 /* doubleword64 S + A - P */
+#define R_PPC64_PLT64		45 /* doubleword64 L + A */
+#define R_PPC64_PLTREL64	46 /* doubleword64 L + A - P */
+#define R_PPC64_TOC16		47 /* half16* S + A - .TOC */
+#define R_PPC64_TOC16_LO	48 /* half16 #lo(S + A - .TOC.) */
+#define R_PPC64_TOC16_HI	49 /* half16 #hi(S + A - .TOC.) */
+#define R_PPC64_TOC16_HA	50 /* half16 #ha(S + A - .TOC.) */
+#define R_PPC64_TOC		51 /* doubleword64 .TOC */
+#define R_PPC64_PLTGOT16	52 /* half16* M + A */
+#define R_PPC64_PLTGOT16_LO	53 /* half16 #lo(M + A) */
+#define R_PPC64_PLTGOT16_HI	54 /* half16 #hi(M + A) */
+#define R_PPC64_PLTGOT16_HA	55 /* half16 #ha(M + A) */
+
+#define R_PPC64_ADDR16_DS	56 /* half16ds* (S + A) >> 2 */
+#define R_PPC64_ADDR16_LO_DS	57 /* half16ds  #lo(S + A) >> 2 */
+#define R_PPC64_GOT16_DS	58 /* half16ds* (G + A) >> 2 */
+#define R_PPC64_GOT16_LO_DS	59 /* half16ds  #lo(G + A) >> 2 */
+#define R_PPC64_PLT16_LO_DS	60 /* half16ds  #lo(L + A) >> 2 */
+#define R_PPC64_SECTOFF_DS	61 /* half16ds* (R + A) >> 2 */
+#define R_PPC64_SECTOFF_LO_DS	62 /* half16ds  #lo(R + A) >> 2 */
+#define R_PPC64_TOC16_DS	63 /* half16ds* (S + A - .TOC.) >> 2 */
+#define R_PPC64_TOC16_LO_DS	64 /* half16ds  #lo(S + A - .TOC.) >> 2 */
+#define R_PPC64_PLTGOT16_DS	65 /* half16ds* (M + A) >> 2 */
+#define R_PPC64_PLTGOT16_LO_DS	66 /* half16ds  #lo(M + A) >> 2 */
+
+/* PowerPC64 relocations defined for the TLS access ABI.  */
+#define R_PPC64_TLS		67 /* none	(sym+add)@tls */
+#define R_PPC64_DTPMOD64	68 /* doubleword64 (sym+add)@dtpmod */
+#define R_PPC64_TPREL16		69 /* half16*	(sym+add)@tprel */
+#define R_PPC64_TPREL16_LO	70 /* half16	(sym+add)@tprel@l */
+#define R_PPC64_TPREL16_HI	71 /* half16	(sym+add)@tprel@h */
+#define R_PPC64_TPREL16_HA	72 /* half16	(sym+add)@tprel@ha */
+#define R_PPC64_TPREL64		73 /* doubleword64 (sym+add)@tprel */
+#define R_PPC64_DTPREL16	74 /* half16*	(sym+add)@dtprel */
+#define R_PPC64_DTPREL16_LO	75 /* half16	(sym+add)@dtprel@l */
+#define R_PPC64_DTPREL16_HI	76 /* half16	(sym+add)@dtprel@h */
+#define R_PPC64_DTPREL16_HA	77 /* half16	(sym+add)@dtprel@ha */
+#define R_PPC64_DTPREL64	78 /* doubleword64 (sym+add)@dtprel */
+#define R_PPC64_GOT_TLSGD16	79 /* half16*	(sym+add)@got@tlsgd */
+#define R_PPC64_GOT_TLSGD16_LO	80 /* half16	(sym+add)@got@tlsgd@l */
+#define R_PPC64_GOT_TLSGD16_HI	81 /* half16	(sym+add)@got@tlsgd@h */
+#define R_PPC64_GOT_TLSGD16_HA	82 /* half16	(sym+add)@got@tlsgd@ha */
+#define R_PPC64_GOT_TLSLD16	83 /* half16*	(sym+add)@got@tlsld */
+#define R_PPC64_GOT_TLSLD16_LO	84 /* half16	(sym+add)@got@tlsld@l */
+#define R_PPC64_GOT_TLSLD16_HI	85 /* half16	(sym+add)@got@tlsld@h */
+#define R_PPC64_GOT_TLSLD16_HA	86 /* half16	(sym+add)@got@tlsld@ha */
+#define R_PPC64_GOT_TPREL16_DS	87 /* half16ds*	(sym+add)@got@tprel */
+#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
+#define R_PPC64_GOT_TPREL16_HI	89 /* half16	(sym+add)@got@tprel@h */
+#define R_PPC64_GOT_TPREL16_HA	90 /* half16	(sym+add)@got@tprel@ha */
+#define R_PPC64_GOT_DTPREL16_DS	91 /* half16ds*	(sym+add)@got@dtprel */
+#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
+#define R_PPC64_GOT_DTPREL16_HI	93 /* half16	(sym+add)@got@dtprel@h */
+#define R_PPC64_GOT_DTPREL16_HA	94 /* half16	(sym+add)@got@dtprel@ha */
+#define R_PPC64_TPREL16_DS	95 /* half16ds*	(sym+add)@tprel */
+#define R_PPC64_TPREL16_LO_DS	96 /* half16ds	(sym+add)@tprel@l */
+#define R_PPC64_TPREL16_HIGHER	97 /* half16	(sym+add)@tprel@higher */
+#define R_PPC64_TPREL16_HIGHERA	98 /* half16	(sym+add)@tprel@highera */
+#define R_PPC64_TPREL16_HIGHEST	99 /* half16	(sym+add)@tprel@highest */
+#define R_PPC64_TPREL16_HIGHESTA 100 /* half16	(sym+add)@tprel@highesta */
+#define R_PPC64_DTPREL16_DS	101 /* half16ds* (sym+add)@dtprel */
+#define R_PPC64_DTPREL16_LO_DS	102 /* half16ds	(sym+add)@dtprel@l */
+#define R_PPC64_DTPREL16_HIGHER	103 /* half16	(sym+add)@dtprel@higher */
+#define R_PPC64_DTPREL16_HIGHERA 104 /* half16	(sym+add)@dtprel@highera */
+#define R_PPC64_DTPREL16_HIGHEST 105 /* half16	(sym+add)@dtprel@highest */
+#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16	(sym+add)@dtprel@highesta */
+
+/* Keep this the last entry.  */
+#define R_PPC64_NUM		107
+
+/* PowerPC64 specific values for the Dyn d_tag field.  */
+#define DT_PPC64_GLINK  (DT_LOPROC + 0)
+#define DT_PPC64_OPD	(DT_LOPROC + 1)
+#define DT_PPC64_OPDSZ	(DT_LOPROC + 2)
+#define DT_PPC64_NUM    3
+
+
+/* ARM specific declarations */
+
+/* Processor specific flags for the ELF header e_flags field.  */
+#define EF_ARM_RELEXEC     0x01
+#define EF_ARM_HASENTRY    0x02
+#define EF_ARM_INTERWORK   0x04
+#define EF_ARM_APCS_26     0x08
+#define EF_ARM_APCS_FLOAT  0x10
+#define EF_ARM_PIC         0x20
+#define EF_ARM_ALIGN8      0x40		/* 8-bit structure alignment is in use */
+#define EF_ARM_NEW_ABI     0x80
+#define EF_ARM_OLD_ABI     0x100
+
+/* Other constants defined in the ARM ELF spec. version B-01.  */
+/* NB. These conflict with values defined above.  */
+#define EF_ARM_SYMSARESORTED	0x04
+#define EF_ARM_DYNSYMSUSESEGIDX 0x08
+#define EF_ARM_MAPSYMSFIRST	0x10
+#define EF_ARM_EABIMASK		0XFF000000
+
+#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
+#define EF_ARM_EABI_UNKNOWN  0x00000000
+#define EF_ARM_EABI_VER1     0x01000000
+#define EF_ARM_EABI_VER2     0x02000000
+
+/* Additional symbol types for Thumb */
+#define STT_ARM_TFUNC      0xd
+
+/* ARM-specific values for sh_flags */
+#define SHF_ARM_ENTRYSECT  0x10000000   /* Section contains an entry point */
+#define SHF_ARM_COMDEF     0x80000000   /* Section may be multiply defined
+					   in the input to a link step */
+
+/* ARM-specific program header flags */
+#define PF_ARM_SB          0x10000000   /* Segment contains the location
+					   addressed by the static base */
+
+/* Processor specific values for the Phdr p_type field.  */
+#define PT_ARM_EXIDX	0x70000001	/* .ARM.exidx segment */
+
+/* ARM relocs.  */
+
+#define R_ARM_NONE		0	/* No reloc */
+#define R_ARM_PC24		1	/* PC relative 26 bit branch */
+#define R_ARM_ABS32		2	/* Direct 32 bit  */
+#define R_ARM_REL32		3	/* PC relative 32 bit */
+#define R_ARM_PC13		4
+#define R_ARM_ABS16		5	/* Direct 16 bit */
+#define R_ARM_ABS12		6	/* Direct 12 bit */
+#define R_ARM_THM_ABS5		7
+#define R_ARM_ABS8		8	/* Direct 8 bit */
+#define R_ARM_SBREL32		9
+#define R_ARM_THM_PC22		10
+#define R_ARM_THM_PC8		11
+#define R_ARM_AMP_VCALL9	12
+#define R_ARM_SWI24		13
+#define R_ARM_THM_SWI8		14
+#define R_ARM_XPC25		15
+#define R_ARM_THM_XPC22		16
+#define R_ARM_TLS_DTPMOD32	17	/* ID of module containing symbol */
+#define R_ARM_TLS_DTPOFF32	18	/* Offset in TLS block */
+#define R_ARM_TLS_TPOFF32	19	/* Offset in static TLS block */
+#define R_ARM_COPY		20	/* Copy symbol at runtime */
+#define R_ARM_GLOB_DAT		21	/* Create GOT entry */
+#define R_ARM_JUMP_SLOT		22	/* Create PLT entry */
+#define R_ARM_RELATIVE		23	/* Adjust by program base */
+#define R_ARM_GOTOFF		24	/* 32 bit offset to GOT */
+#define R_ARM_GOTPC		25	/* 32 bit PC relative offset to GOT */
+#define R_ARM_GOT32		26	/* 32 bit GOT entry */
+#define R_ARM_PLT32		27	/* 32 bit PLT address */
+#define R_ARM_ALU_PCREL_7_0	32
+#define R_ARM_ALU_PCREL_15_8	33
+#define R_ARM_ALU_PCREL_23_15	34
+#define R_ARM_LDR_SBREL_11_0	35
+#define R_ARM_ALU_SBREL_19_12	36
+#define R_ARM_ALU_SBREL_27_20	37
+#define R_ARM_GNU_VTENTRY	100
+#define R_ARM_GNU_VTINHERIT	101
+#define R_ARM_THM_PC11		102	/* thumb unconditional branch */
+#define R_ARM_THM_PC9		103	/* thumb conditional branch */
+#define R_ARM_TLS_GD32		104	/* PC-rel 32 bit for global dynamic
+					   thread local data */
+#define R_ARM_TLS_LDM32		105	/* PC-rel 32 bit for local dynamic
+					   thread local data */
+#define R_ARM_TLS_LDO32		106	/* 32 bit offset relative to TLS
+					   block */
+#define R_ARM_TLS_IE32		107	/* PC-rel 32 bit for GOT entry of
+					   static TLS block offset */
+#define R_ARM_TLS_LE32		108	/* 32 bit offset relative to static
+					   TLS block */
+#define R_ARM_RXPC25		249
+#define R_ARM_RSBREL32		250
+#define R_ARM_THM_RPC22		251
+#define R_ARM_RREL32		252
+#define R_ARM_RABS22		253
+#define R_ARM_RPC24		254
+#define R_ARM_RBASE		255
+/* Keep this the last entry.  */
+#define R_ARM_NUM		256
+
+/* IA-64 specific declarations.  */
+
+/* Processor specific flags for the Ehdr e_flags field.  */
+#define EF_IA_64_MASKOS		0x0000000f	/* os-specific flags */
+#define EF_IA_64_ABI64		0x00000010	/* 64-bit ABI */
+#define EF_IA_64_ARCH		0xff000000	/* arch. version mask */
+
+/* Processor specific values for the Phdr p_type field.  */
+#define PT_IA_64_ARCHEXT	(PT_LOPROC + 0)	/* arch extension bits */
+#define PT_IA_64_UNWIND		(PT_LOPROC + 1)	/* ia64 unwind bits */
+#define PT_IA_64_HP_OPT_ANOT	(PT_LOOS + 0x12)
+#define PT_IA_64_HP_HSL_ANOT	(PT_LOOS + 0x13)
+#define PT_IA_64_HP_STACK	(PT_LOOS + 0x14)
+
+/* Processor specific flags for the Phdr p_flags field.  */
+#define PF_IA_64_NORECOV	0x80000000	/* spec insns w/o recovery */
+
+/* Processor specific values for the Shdr sh_type field.  */
+#define SHT_IA_64_EXT		(SHT_LOPROC + 0) /* extension bits */
+#define SHT_IA_64_UNWIND	(SHT_LOPROC + 1) /* unwind bits */
+
+/* Processor specific flags for the Shdr sh_flags field.  */
+#define SHF_IA_64_SHORT		0x10000000	/* section near gp */
+#define SHF_IA_64_NORECOV	0x20000000	/* spec insns w/o recovery */
+
+/* Processor specific values for the Dyn d_tag field.  */
+#define DT_IA_64_PLT_RESERVE	(DT_LOPROC + 0)
+#define DT_IA_64_NUM		1
+
+/* IA-64 relocations.  */
+#define R_IA64_NONE		0x00	/* none */
+#define R_IA64_IMM14		0x21	/* symbol + addend, add imm14 */
+#define R_IA64_IMM22		0x22	/* symbol + addend, add imm22 */
+#define R_IA64_IMM64		0x23	/* symbol + addend, mov imm64 */
+#define R_IA64_DIR32MSB		0x24	/* symbol + addend, data4 MSB */
+#define R_IA64_DIR32LSB		0x25	/* symbol + addend, data4 LSB */
+#define R_IA64_DIR64MSB		0x26	/* symbol + addend, data8 MSB */
+#define R_IA64_DIR64LSB		0x27	/* symbol + addend, data8 LSB */
+#define R_IA64_GPREL22		0x2a	/* @gprel(sym + add), add imm22 */
+#define R_IA64_GPREL64I		0x2b	/* @gprel(sym + add), mov imm64 */
+#define R_IA64_GPREL32MSB	0x2c	/* @gprel(sym + add), data4 MSB */
+#define R_IA64_GPREL32LSB	0x2d	/* @gprel(sym + add), data4 LSB */
+#define R_IA64_GPREL64MSB	0x2e	/* @gprel(sym + add), data8 MSB */
+#define R_IA64_GPREL64LSB	0x2f	/* @gprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF22		0x32	/* @ltoff(sym + add), add imm22 */
+#define R_IA64_LTOFF64I		0x33	/* @ltoff(sym + add), mov imm64 */
+#define R_IA64_PLTOFF22		0x3a	/* @pltoff(sym + add), add imm22 */
+#define R_IA64_PLTOFF64I	0x3b	/* @pltoff(sym + add), mov imm64 */
+#define R_IA64_PLTOFF64MSB	0x3e	/* @pltoff(sym + add), data8 MSB */
+#define R_IA64_PLTOFF64LSB	0x3f	/* @pltoff(sym + add), data8 LSB */
+#define R_IA64_FPTR64I		0x43	/* @fptr(sym + add), mov imm64 */
+#define R_IA64_FPTR32MSB	0x44	/* @fptr(sym + add), data4 MSB */
+#define R_IA64_FPTR32LSB	0x45	/* @fptr(sym + add), data4 LSB */
+#define R_IA64_FPTR64MSB	0x46	/* @fptr(sym + add), data8 MSB */
+#define R_IA64_FPTR64LSB	0x47	/* @fptr(sym + add), data8 LSB */
+#define R_IA64_PCREL60B		0x48	/* @pcrel(sym + add), brl */
+#define R_IA64_PCREL21B		0x49	/* @pcrel(sym + add), ptb, call */
+#define R_IA64_PCREL21M		0x4a	/* @pcrel(sym + add), chk.s */
+#define R_IA64_PCREL21F		0x4b	/* @pcrel(sym + add), fchkf */
+#define R_IA64_PCREL32MSB	0x4c	/* @pcrel(sym + add), data4 MSB */
+#define R_IA64_PCREL32LSB	0x4d	/* @pcrel(sym + add), data4 LSB */
+#define R_IA64_PCREL64MSB	0x4e	/* @pcrel(sym + add), data8 MSB */
+#define R_IA64_PCREL64LSB	0x4f	/* @pcrel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_FPTR22	0x52	/* @ltoff(@fptr(s+a)), imm22 */
+#define R_IA64_LTOFF_FPTR64I	0x53	/* @ltoff(@fptr(s+a)), imm64 */
+#define R_IA64_LTOFF_FPTR32MSB	0x54	/* @ltoff(@fptr(s+a)), data4 MSB */
+#define R_IA64_LTOFF_FPTR32LSB	0x55	/* @ltoff(@fptr(s+a)), data4 LSB */
+#define R_IA64_LTOFF_FPTR64MSB	0x56	/* @ltoff(@fptr(s+a)), data8 MSB */
+#define R_IA64_LTOFF_FPTR64LSB	0x57	/* @ltoff(@fptr(s+a)), data8 LSB */
+#define R_IA64_SEGREL32MSB	0x5c	/* @segrel(sym + add), data4 MSB */
+#define R_IA64_SEGREL32LSB	0x5d	/* @segrel(sym + add), data4 LSB */
+#define R_IA64_SEGREL64MSB	0x5e	/* @segrel(sym + add), data8 MSB */
+#define R_IA64_SEGREL64LSB	0x5f	/* @segrel(sym + add), data8 LSB */
+#define R_IA64_SECREL32MSB	0x64	/* @secrel(sym + add), data4 MSB */
+#define R_IA64_SECREL32LSB	0x65	/* @secrel(sym + add), data4 LSB */
+#define R_IA64_SECREL64MSB	0x66	/* @secrel(sym + add), data8 MSB */
+#define R_IA64_SECREL64LSB	0x67	/* @secrel(sym + add), data8 LSB */
+#define R_IA64_REL32MSB		0x6c	/* data 4 + REL */
+#define R_IA64_REL32LSB		0x6d	/* data 4 + REL */
+#define R_IA64_REL64MSB		0x6e	/* data 8 + REL */
+#define R_IA64_REL64LSB		0x6f	/* data 8 + REL */
+#define R_IA64_LTV32MSB		0x74	/* symbol + addend, data4 MSB */
+#define R_IA64_LTV32LSB		0x75	/* symbol + addend, data4 LSB */
+#define R_IA64_LTV64MSB		0x76	/* symbol + addend, data8 MSB */
+#define R_IA64_LTV64LSB		0x77	/* symbol + addend, data8 LSB */
+#define R_IA64_PCREL21BI	0x79	/* @pcrel(sym + add), 21bit inst */
+#define R_IA64_PCREL22		0x7a	/* @pcrel(sym + add), 22bit inst */
+#define R_IA64_PCREL64I		0x7b	/* @pcrel(sym + add), 64bit inst */
+#define R_IA64_IPLTMSB		0x80	/* dynamic reloc, imported PLT, MSB */
+#define R_IA64_IPLTLSB		0x81	/* dynamic reloc, imported PLT, LSB */
+#define R_IA64_COPY		0x84	/* copy relocation */
+#define R_IA64_SUB		0x85	/* Addend and symbol difference */
+#define R_IA64_LTOFF22X		0x86	/* LTOFF22, relaxable.  */
+#define R_IA64_LDXMOV		0x87	/* Use of LTOFF22X.  */
+#define R_IA64_TPREL14		0x91	/* @tprel(sym + add), imm14 */
+#define R_IA64_TPREL22		0x92	/* @tprel(sym + add), imm22 */
+#define R_IA64_TPREL64I		0x93	/* @tprel(sym + add), imm64 */
+#define R_IA64_TPREL64MSB	0x96	/* @tprel(sym + add), data8 MSB */
+#define R_IA64_TPREL64LSB	0x97	/* @tprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_TPREL22	0x9a	/* @ltoff(@tprel(s+a)), imm2 */
+#define R_IA64_DTPMOD64MSB	0xa6	/* @dtpmod(sym + add), data8 MSB */
+#define R_IA64_DTPMOD64LSB	0xa7	/* @dtpmod(sym + add), data8 LSB */
+#define R_IA64_LTOFF_DTPMOD22	0xaa	/* @ltoff(@dtpmod(sym + add)), imm22 */
+#define R_IA64_DTPREL14		0xb1	/* @dtprel(sym + add), imm14 */
+#define R_IA64_DTPREL22		0xb2	/* @dtprel(sym + add), imm22 */
+#define R_IA64_DTPREL64I	0xb3	/* @dtprel(sym + add), imm64 */
+#define R_IA64_DTPREL32MSB	0xb4	/* @dtprel(sym + add), data4 MSB */
+#define R_IA64_DTPREL32LSB	0xb5	/* @dtprel(sym + add), data4 LSB */
+#define R_IA64_DTPREL64MSB	0xb6	/* @dtprel(sym + add), data8 MSB */
+#define R_IA64_DTPREL64LSB	0xb7	/* @dtprel(sym + add), data8 LSB */
+#define R_IA64_LTOFF_DTPREL22	0xba	/* @ltoff(@dtprel(s+a)), imm22 */
+
+/* SH specific declarations */
+
+/* SH relocs.  */
+#define	R_SH_NONE		0
+#define	R_SH_DIR32		1
+#define	R_SH_REL32		2
+#define	R_SH_DIR8WPN		3
+#define	R_SH_IND12W		4
+#define	R_SH_DIR8WPL		5
+#define	R_SH_DIR8WPZ		6
+#define	R_SH_DIR8BP		7
+#define	R_SH_DIR8W		8
+#define	R_SH_DIR8L		9
+#define	R_SH_SWITCH16		25
+#define	R_SH_SWITCH32		26
+#define	R_SH_USES		27
+#define	R_SH_COUNT		28
+#define	R_SH_ALIGN		29
+#define	R_SH_CODE		30
+#define	R_SH_DATA		31
+#define	R_SH_LABEL		32
+#define	R_SH_SWITCH8		33
+#define	R_SH_GNU_VTINHERIT	34
+#define	R_SH_GNU_VTENTRY	35
+#define	R_SH_TLS_GD_32		144
+#define	R_SH_TLS_LD_32		145
+#define	R_SH_TLS_LDO_32		146
+#define	R_SH_TLS_IE_32		147
+#define	R_SH_TLS_LE_32		148
+#define	R_SH_TLS_DTPMOD32	149
+#define	R_SH_TLS_DTPOFF32	150
+#define	R_SH_TLS_TPOFF32	151
+#define	R_SH_GOT32		160
+#define	R_SH_PLT32		161
+#define	R_SH_COPY		162
+#define	R_SH_GLOB_DAT		163
+#define	R_SH_JMP_SLOT		164
+#define	R_SH_RELATIVE		165
+#define	R_SH_GOTOFF		166
+#define	R_SH_GOTPC		167
+/* Keep this the last entry.  */
+#define	R_SH_NUM		256
+
+/* Additional s390 relocs */
+
+#define R_390_NONE		0	/* No reloc.  */
+#define R_390_8			1	/* Direct 8 bit.  */
+#define R_390_12		2	/* Direct 12 bit.  */
+#define R_390_16		3	/* Direct 16 bit.  */
+#define R_390_32		4	/* Direct 32 bit.  */
+#define R_390_PC32		5	/* PC relative 32 bit.	*/
+#define R_390_GOT12		6	/* 12 bit GOT offset.  */
+#define R_390_GOT32		7	/* 32 bit GOT offset.  */
+#define R_390_PLT32		8	/* 32 bit PC relative PLT address.  */
+#define R_390_COPY		9	/* Copy symbol at runtime.  */
+#define R_390_GLOB_DAT		10	/* Create GOT entry.  */
+#define R_390_JMP_SLOT		11	/* Create PLT entry.  */
+#define R_390_RELATIVE		12	/* Adjust by program base.  */
+#define R_390_GOTOFF32		13	/* 32 bit offset to GOT.	 */
+#define R_390_GOTPC		14	/* 32 bit PC relative offset to GOT.  */
+#define R_390_GOT16		15	/* 16 bit GOT offset.  */
+#define R_390_PC16		16	/* PC relative 16 bit.	*/
+#define R_390_PC16DBL		17	/* PC relative 16 bit shifted by 1.  */
+#define R_390_PLT16DBL		18	/* 16 bit PC rel. PLT shifted by 1.  */
+#define R_390_PC32DBL		19	/* PC relative 32 bit shifted by 1.  */
+#define R_390_PLT32DBL		20	/* 32 bit PC rel. PLT shifted by 1.  */
+#define R_390_GOTPCDBL		21	/* 32 bit PC rel. GOT shifted by 1.  */
+#define R_390_64		22	/* Direct 64 bit.  */
+#define R_390_PC64		23	/* PC relative 64 bit.	*/
+#define R_390_GOT64		24	/* 64 bit GOT offset.  */
+#define R_390_PLT64		25	/* 64 bit PC relative PLT address.  */
+#define R_390_GOTENT		26	/* 32 bit PC rel. to GOT entry >> 1. */
+#define R_390_GOTOFF16		27	/* 16 bit offset to GOT. */
+#define R_390_GOTOFF64		28	/* 64 bit offset to GOT. */
+#define R_390_GOTPLT12		29	/* 12 bit offset to jump slot.	*/
+#define R_390_GOTPLT16		30	/* 16 bit offset to jump slot.	*/
+#define R_390_GOTPLT32		31	/* 32 bit offset to jump slot.	*/
+#define R_390_GOTPLT64		32	/* 64 bit offset to jump slot.	*/
+#define R_390_GOTPLTENT		33	/* 32 bit rel. offset to jump slot.  */
+#define R_390_PLTOFF16		34	/* 16 bit offset from GOT to PLT. */
+#define R_390_PLTOFF32		35	/* 32 bit offset from GOT to PLT. */
+#define R_390_PLTOFF64		36	/* 16 bit offset from GOT to PLT. */
+#define R_390_TLS_LOAD		37	/* Tag for load insn in TLS code.  */
+#define R_390_TLS_GDCALL	38	/* Tag for function call in general
+					   dynamic TLS code. */
+#define R_390_TLS_LDCALL	39	/* Tag for function call in local
+					   dynamic TLS code. */
+#define R_390_TLS_GD32		40	/* Direct 32 bit for general dynamic
+					   thread local data.  */
+#define R_390_TLS_GD64		41	/* Direct 64 bit for general dynamic
+					  thread local data.  */
+#define R_390_TLS_GOTIE12	42	/* 12 bit GOT offset for static TLS
+					   block offset.  */
+#define R_390_TLS_GOTIE32	43	/* 32 bit GOT offset for static TLS
+					   block offset.  */
+#define R_390_TLS_GOTIE64	44	/* 64 bit GOT offset for static TLS
+					   block offset. */
+#define R_390_TLS_LDM32		45	/* Direct 32 bit for local dynamic
+					   thread local data in LE code.  */
+#define R_390_TLS_LDM64		46	/* Direct 64 bit for local dynamic
+					   thread local data in LE code.  */
+#define R_390_TLS_IE32		47	/* 32 bit address of GOT entry for
+					   negated static TLS block offset.  */
+#define R_390_TLS_IE64		48	/* 64 bit address of GOT entry for
+					   negated static TLS block offset.  */
+#define R_390_TLS_IEENT		49	/* 32 bit rel. offset to GOT entry for
+					   negated static TLS block offset.  */
+#define R_390_TLS_LE32		50	/* 32 bit negated offset relative to
+					   static TLS block.  */
+#define R_390_TLS_LE64		51	/* 64 bit negated offset relative to
+					   static TLS block.  */
+#define R_390_TLS_LDO32		52	/* 32 bit offset relative to TLS
+					   block.  */
+#define R_390_TLS_LDO64		53	/* 64 bit offset relative to TLS
+					   block.  */
+#define R_390_TLS_DTPMOD	54	/* ID of module containing symbol.  */
+#define R_390_TLS_DTPOFF	55	/* Offset in TLS block.	 */
+#define R_390_TLS_TPOFF		56	/* Negated offset in static TLS
+					   block.  */
+#define R_390_20		57	/* Direct 20 bit.  */
+#define R_390_GOT20		58	/* 20 bit GOT offset.  */
+#define R_390_GOTPLT20		59	/* 20 bit offset to jump slot.  */
+#define R_390_TLS_GOTIE20	60	/* 20 bit GOT offset for static TLS
+					   block offset.  */
+/* Keep this the last entry.  */
+#define R_390_NUM		61
+
+
+/* CRIS relocations.  */
+#define R_CRIS_NONE		0
+#define R_CRIS_8		1
+#define R_CRIS_16		2
+#define R_CRIS_32		3
+#define R_CRIS_8_PCREL		4
+#define R_CRIS_16_PCREL		5
+#define R_CRIS_32_PCREL		6
+#define R_CRIS_GNU_VTINHERIT	7
+#define R_CRIS_GNU_VTENTRY	8
+#define R_CRIS_COPY		9
+#define R_CRIS_GLOB_DAT		10
+#define R_CRIS_JUMP_SLOT	11
+#define R_CRIS_RELATIVE		12
+#define R_CRIS_16_GOT		13
+#define R_CRIS_32_GOT		14
+#define R_CRIS_16_GOTPLT	15
+#define R_CRIS_32_GOTPLT	16
+#define R_CRIS_32_GOTREL	17
+#define R_CRIS_32_PLT_GOTREL	18
+#define R_CRIS_32_PLT_PCREL	19
+
+#define R_CRIS_NUM		20
+
+
+/* AMD x86-64 relocations.  */
+#define R_X86_64_NONE		0	/* No reloc */
+#define R_X86_64_64		1	/* Direct 64 bit  */
+#define R_X86_64_PC32		2	/* PC relative 32 bit signed */
+#define R_X86_64_GOT32		3	/* 32 bit GOT entry */
+#define R_X86_64_PLT32		4	/* 32 bit PLT address */
+#define R_X86_64_COPY		5	/* Copy symbol at runtime */
+#define R_X86_64_GLOB_DAT	6	/* Create GOT entry */
+#define R_X86_64_JUMP_SLOT	7	/* Create PLT entry */
+#define R_X86_64_RELATIVE	8	/* Adjust by program base */
+#define R_X86_64_GOTPCREL	9	/* 32 bit signed PC relative
+					   offset to GOT */
+#define R_X86_64_32		10	/* Direct 32 bit zero extended */
+#define R_X86_64_32S		11	/* Direct 32 bit sign extended */
+#define R_X86_64_16		12	/* Direct 16 bit zero extended */
+#define R_X86_64_PC16		13	/* 16 bit sign extended pc relative */
+#define R_X86_64_8		14	/* Direct 8 bit sign extended  */
+#define R_X86_64_PC8		15	/* 8 bit sign extended pc relative */
+#define R_X86_64_DTPMOD64	16	/* ID of module containing symbol */
+#define R_X86_64_DTPOFF64	17	/* Offset in module's TLS block */
+#define R_X86_64_TPOFF64	18	/* Offset in initial TLS block */
+#define R_X86_64_TLSGD		19	/* 32 bit signed PC relative offset
+					   to two GOT entries for GD symbol */
+#define R_X86_64_TLSLD		20	/* 32 bit signed PC relative offset
+					   to two GOT entries for LD symbol */
+#define R_X86_64_DTPOFF32	21	/* Offset in TLS block */
+#define R_X86_64_GOTTPOFF	22	/* 32 bit signed PC relative offset
+					   to GOT entry for IE symbol */
+#define R_X86_64_TPOFF32	23	/* Offset in initial TLS block */
+
+#define R_X86_64_NUM		24
+
+
+/* AM33 relocations.  */
+#define R_MN10300_NONE		0	/* No reloc.  */
+#define R_MN10300_32		1	/* Direct 32 bit.  */
+#define R_MN10300_16		2	/* Direct 16 bit.  */
+#define R_MN10300_8		3	/* Direct 8 bit.  */
+#define R_MN10300_PCREL32	4	/* PC-relative 32-bit.  */
+#define R_MN10300_PCREL16	5	/* PC-relative 16-bit signed.  */
+#define R_MN10300_PCREL8	6	/* PC-relative 8-bit signed.  */
+#define R_MN10300_GNU_VTINHERIT	7	/* Ancient C++ vtable garbage... */
+#define R_MN10300_GNU_VTENTRY	8	/* ... collection annotation.  */
+#define R_MN10300_24		9	/* Direct 24 bit.  */
+#define R_MN10300_GOTPC32	10	/* 32-bit PCrel offset to GOT.  */
+#define R_MN10300_GOTPC16	11	/* 16-bit PCrel offset to GOT.  */
+#define R_MN10300_GOTOFF32	12	/* 32-bit offset from GOT.  */
+#define R_MN10300_GOTOFF24	13	/* 24-bit offset from GOT.  */
+#define R_MN10300_GOTOFF16	14	/* 16-bit offset from GOT.  */
+#define R_MN10300_PLT32		15	/* 32-bit PCrel to PLT entry.  */
+#define R_MN10300_PLT16		16	/* 16-bit PCrel to PLT entry.  */
+#define R_MN10300_GOT32		17	/* 32-bit offset to GOT entry.  */
+#define R_MN10300_GOT24		18	/* 24-bit offset to GOT entry.  */
+#define R_MN10300_GOT16		19	/* 16-bit offset to GOT entry.  */
+#define R_MN10300_COPY		20	/* Copy symbol at runtime.  */
+#define R_MN10300_GLOB_DAT	21	/* Create GOT entry.  */
+#define R_MN10300_JMP_SLOT	22	/* Create PLT entry.  */
+#define R_MN10300_RELATIVE	23	/* Adjust by program base.  */
+
+#define R_MN10300_NUM		24
+
+
+/* M32R relocs.  */
+#define R_M32R_NONE		0	/* No reloc. */
+#define R_M32R_16		1	/* Direct 16 bit. */
+#define R_M32R_32		2	/* Direct 32 bit. */
+#define R_M32R_24		3	/* Direct 24 bit. */
+#define R_M32R_10_PCREL		4	/* PC relative 10 bit shifted. */
+#define R_M32R_18_PCREL		5	/* PC relative 18 bit shifted. */
+#define R_M32R_26_PCREL		6	/* PC relative 26 bit shifted. */
+#define R_M32R_HI16_ULO		7	/* High 16 bit with unsigned low. */
+#define R_M32R_HI16_SLO		8	/* High 16 bit with signed low. */
+#define R_M32R_LO16		9	/* Low 16 bit. */
+#define R_M32R_SDA16		10	/* 16 bit offset in SDA. */
+#define R_M32R_GNU_VTINHERIT	11
+#define R_M32R_GNU_VTENTRY	12
+/* M32R relocs use SHT_RELA.  */
+#define R_M32R_16_RELA		33	/* Direct 16 bit. */
+#define R_M32R_32_RELA		34	/* Direct 32 bit. */
+#define R_M32R_24_RELA		35	/* Direct 24 bit. */
+#define R_M32R_10_PCREL_RELA	36	/* PC relative 10 bit shifted. */
+#define R_M32R_18_PCREL_RELA	37	/* PC relative 18 bit shifted. */
+#define R_M32R_26_PCREL_RELA	38	/* PC relative 26 bit shifted. */
+#define R_M32R_HI16_ULO_RELA	39	/* High 16 bit with unsigned low */
+#define R_M32R_HI16_SLO_RELA	40	/* High 16 bit with signed low */
+#define R_M32R_LO16_RELA	41	/* Low 16 bit */
+#define R_M32R_SDA16_RELA	42	/* 16 bit offset in SDA */
+#define R_M32R_RELA_GNU_VTINHERIT	43
+#define R_M32R_RELA_GNU_VTENTRY	44
+#define R_M32R_REL32		45	/* PC relative 32 bit.  */
+
+#define R_M32R_GOT24		48	/* 24 bit GOT entry */
+#define R_M32R_26_PLTREL	49	/* 26 bit PC relative to PLT shifted */
+#define R_M32R_COPY		50	/* Copy symbol at runtime */
+#define R_M32R_GLOB_DAT		51	/* Create GOT entry */
+#define R_M32R_JMP_SLOT		52	/* Create PLT entry */
+#define R_M32R_RELATIVE		53	/* Adjust by program base */
+#define R_M32R_GOTOFF		54	/* 24 bit offset to GOT */
+#define R_M32R_GOTPC24		55	/* 24 bit PC relative offset to GOT */
+#define R_M32R_GOT16_HI_ULO	56	/* High 16 bit GOT entry with unsigned
+					   low */
+#define R_M32R_GOT16_HI_SLO	57	/* High 16 bit GOT entry with signed
+					   low */
+#define R_M32R_GOT16_LO		58	/* Low 16 bit GOT entry */
+#define R_M32R_GOTPC_HI_ULO	59	/* High 16 bit PC relative offset to
+					   GOT with unsigned low */
+#define R_M32R_GOTPC_HI_SLO	60	/* High 16 bit PC relative offset to
+					   GOT with signed low */
+#define R_M32R_GOTPC_LO		61	/* Low 16 bit PC relative offset to
+					   GOT */
+#define R_M32R_GOTOFF_HI_ULO	62	/* High 16 bit offset to GOT
+					   with unsigned low */
+#define R_M32R_GOTOFF_HI_SLO	63	/* High 16 bit offset to GOT
+					   with signed low */
+#define R_M32R_GOTOFF_LO	64	/* Low 16 bit offset to GOT */
+#define R_M32R_NUM		256	/* Keep this the last entry. */
+
+#endif	/* elf.h */
+
+// Local Variables:
+// tab-width: 4
+// c-basic-offset: 4
+// c-file-offsets:((innamespace . 0)(inline-open . 0))
+// indent-tabs-mode: nil
+// End:
+
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/tsar_boot/include/io.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/io.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/io.h	(revision 724)
@@ -0,0 +1,126 @@
+/**********************************************************************
+ * \file    io.h
+ * \date    5 September 2012
+ * \author  Cesar Fuguet / Alain Greiner
+ *
+ * Utility functions to write or read memory mapped hardware registers
+ *********************************************************************/
+
+#ifndef IO_H
+#define IO_H
+
+#include <defs.h>
+
+/**********************************************************************
+ * Read an 32 bits memory mapped hardware register
+ * with physical address extension to access cluster_io
+ *********************************************************************/
+static inline unsigned int ioread32(void * addr)
+{
+    unsigned int value;
+    unsigned int ext = CLUSTER_IO;
+
+    asm volatile(
+        "mtc2  %2,    $24            \n"  /* PADDR_EXT <= cluster_io */
+        "lw    %0,    0(%1)          \n"  /* value <= *(ext\addr)    */
+        "mtc2  $0,    $24            \n"  /* PADDR_EXT <= 0          */
+        : "=r" (value)
+        : "r" (addr), "r" (ext)
+        : "memory" );
+
+    return (volatile unsigned int)value;
+}
+
+/**********************************************************************
+ * Read an 16 bits memory mapped hardware register
+ *********************************************************************/
+static inline unsigned short ioread16(void * addr)
+{
+    unsigned short value;
+    unsigned int ext = CLUSTER_IO;
+
+    asm volatile(
+        "mtc2  %2,    $24            \n"  /* PADDR_EXT <= cluster_io */
+        "lhu   %0,    0(%1)          \n"  /* value <= *(ext\addr)    */
+        "mtc2  $0,    $24            \n"  /* PADDR_EXT <= 0          */
+        : "=r" (value)
+        : "r" (addr), "r" (ext)
+        : "memory" );
+
+    return (volatile unsigned short)value;
+}
+
+/**********************************************************************
+ * Read an 8 bits memory mapped hardware register
+ *********************************************************************/
+static inline unsigned char ioread8(void * addr)
+{
+    unsigned char value;
+    unsigned int ext = CLUSTER_IO;
+
+    asm volatile(
+        "mtc2  %2,    $24            \n"  /* PADDR_EXT <= cluster_io */
+        "lbu   %0,    0(%1)          \n"  /* value <= *(ext\addr)    */
+        "mtc2  $0,    $24            \n"  /* PADDR_EXT <= 0          */
+        : "=r" (value)
+        : "r" (addr), "r" (ext)
+        : "memory" );
+
+    return (volatile unsigned char)value;
+}
+
+/**********************************************************************
+ * Write an 32 bits memory mapped hardware register
+ * with physical address extension to access cluster_io
+ *********************************************************************/
+static inline void iowrite32(void * addr, unsigned int value)
+{
+    unsigned int ext = CLUSTER_IO;
+
+    asm volatile(
+        "mtc2  %2,    $24            \n"  /* PADDR_EXT <= cluster_io */
+        "sw    %0,    0(%1)          \n"  /* *(ext\addr) <= value    */
+        "mtc2  $0,    $24            \n"  /* PADDR_EXT <= 0          */
+        "sync                        \n"  /* sync barrier            */
+        :
+        : "r" (value), "r" (addr), "r" (ext)
+        : "memory" );
+}
+
+/**********************************************************************
+ * Write an 16 bits memory mapped hardware register
+ *********************************************************************/
+static inline void iowrite16(void * addr, unsigned short value)
+{
+    unsigned int ext = CLUSTER_IO;
+
+    asm volatile(
+        "mtc2  %2,    $24            \n"  /* PADDR_EXT <= cluster_io */
+        "sh    %0,    0(%1)          \n"  /* *(ext\addr) <= value    */
+        "mtc2  $0,    $24            \n"  /* PADDR_EXT <= 0          */
+        "sync                        \n"  /* sync barrier            */
+        :
+        : "r" (value), "r" (addr), "r" (ext)
+        : "memory" );
+}
+
+/**********************************************************************
+ * Write an 8 bits memory mapped hardware register
+ *********************************************************************/
+static inline void iowrite8(void * addr, unsigned char value)
+{
+    unsigned int ext = CLUSTER_IO;
+
+    asm volatile(
+        "mtc2  %2,    $24            \n"  /* PADDR_EXT <= cluster_io */
+        "sb    %0,    0(%1)          \n"  /* *(ext\addr) <= value    */
+        "mtc2  $0,    $24            \n"  /* PADDR_EXT <= 0          */
+        "sync                        \n"  /* sync barrier            */
+        :
+        : "r" (value), "r" (addr), "r" (ext)
+        : "memory" );
+}
+
+#endif
+
+// vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
Index: /branches/fault_tolerance/softs/tsar_boot/include/mcc.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/mcc.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/mcc.h	(revision 724)
@@ -0,0 +1,30 @@
+#ifndef MCC_H
+#define MCC_H
+
+enum MccRegisters
+{
+    MCC_LOCK      = 0,
+    MCC_ADDR_LO   = 1,
+    MCC_ADDR_HI   = 2,
+    MCC_LENGTH    = 3,
+    MCC_CMD       = 4
+};
+
+enum MccConfigCmd
+{
+    MCC_CMD_NOP   = 0,
+    MCC_CMD_INVAL = 1,
+    MCC_CMD_SYNC  = 2
+};
+
+#endif
+
+// Local Variables:
+// tab-width: 4;
+// c-basic-offset: 4;
+// c-file-offsets:((innamespace . 0)(inline-open . 0));
+// indent-tabs-mode: nil;
+// End:
+//
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/tsar_boot/include/mips32_registers.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/mips32_registers.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/mips32_registers.h	(revision 724)
@@ -0,0 +1,82 @@
+/********************************************************************************/
+/*	File        : mips32_registers.h											*/
+/*	Author      : Alain Greiner													*/
+/*	Date        : 26/03/2012													*/
+/*  Modified by : Cesar Fuguet 10/02/2013										*/
+/********************************************************************************/
+/* 	We define mnemonics for MIPS32 registers             	 					*/
+/********************************************************************************/
+
+#ifndef _MIPS32_REGISTERS_H
+#define _MIPS32_REGISTERS_H
+
+/* processor registers */
+
+#define zero            $0
+#define at              $at
+#define v0              $2
+#define v1              $3
+#define a0              $4
+#define a1              $5
+#define a2              $6
+#define a3              $7
+#define t0              $8
+#define t1              $9
+#define t2              $10
+#define t3              $11
+#define t4              $12
+#define t5              $13
+#define t6              $14
+#define t7              $15
+#define s0              $16
+#define s1              $17
+#define s2              $18
+#define s3              $19
+#define s4              $20
+#define s5              $21
+#define s6              $22
+#define s7              $23
+#define t8              $24
+#define t9              $25
+#define k0              $26
+#define k1              $27
+#define gp              $28
+#define sp              $29
+#define fp              $30
+#define ra              $31
+
+/* CP0 registers */
+
+#define CP0_COUNT       $9
+#define CP0_STATUS      $12,0
+#define CP0_CAUSE       $13,0
+#define CP0_EPC         $14,0
+#define CP0_EBASE       $15,1
+#define CP0_PROCID      $15,1
+
+/* CP2 registers */
+
+#define CP2_PTPR             $0 
+#define CP2_MODE             $1
+#define CP2_ICACHE_FLUSH     $2
+#define CP2_DCACHE_FLUSH     $3
+#define CP2_ITLB_INVAL       $4 
+#define CP2_DTLB_INVAL       $5 
+#define CP2_ICACHE_INVAL     $6 
+#define CP2_DCACHE_INVAL     $7
+#define CP2_ICACHE_PREFETCH  $8 
+#define CP2_DCACHE_PREFETCH  $9 
+#define CP2_SYNC             $10 
+#define CP2_IETR             $11 
+#define CP2_DETR             $12 
+#define CP2_IBVAR            $13
+#define CP2_DBVAR            $14
+#define CP2_PARAMS           $15 
+#define CP2_RELEASE          $16 
+#define CP2_DATA_LO          $17     
+#define CP2_DATA_HI          $18         
+#define CP2_ICACHE_INVAL_PA  $19         
+#define CP2_DCACHE_INVAL_PA  $20 
+#define CP2_PADDR_EXT        $24
+
+#endif
Index: /branches/fault_tolerance/softs/tsar_boot/include/reset_ioc.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/reset_ioc.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/reset_ioc.h	(revision 724)
@@ -0,0 +1,31 @@
+#ifndef RESET_IOC_H
+#define RESET_IOC_H
+
+#if USE_SPI
+#include <sdcard.h>
+#include <spi.h>
+#endif /* USE_SPI */
+
+#if USE_BDV
+#include <block_device.h>
+#include <mcc.h>
+#endif /* USE_BDV */
+
+#include <defs.h>
+#include <reset_tty.h>
+#include <io.h>
+#include <reset_utils.h>
+
+#if USE_SPI
+extern int reset_ioc_init();
+#endif /* USE_SPI */
+
+extern int reset_ioc_read( unsigned int lba, 
+                           void*        buffer, 
+                           unsigned int count );
+
+#endif /* RESET_IOC_H */
+
+/*
+ * vim: tabstop=4 : shiftwidth=4 : expandtab
+ */
Index: /branches/fault_tolerance/softs/tsar_boot/include/reset_tty.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/reset_tty.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/reset_tty.h	(revision 724)
@@ -0,0 +1,13 @@
+#ifndef RESET_TTY_H
+#define RESET_TTY_H
+
+# include <tty.h> 
+
+void reset_exit();
+int  reset_getc(char * c);
+void reset_putc(const char c);
+void reset_puts(const char *buffer);
+void reset_putx(unsigned int val);
+void reset_putd(unsigned int val);
+
+#endif
Index: /branches/fault_tolerance/softs/tsar_boot/include/reset_utils.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/reset_utils.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/reset_utils.h	(revision 724)
@@ -0,0 +1,59 @@
+/*
+ * \file    : reset_utils.h
+ * \date    : August 2012
+ * \author  : Cesar Fuguet
+ */
+
+#ifndef BOOT_UTILS_H
+#define BOOT_UTILS_H
+
+#include <elf-types.h>
+#include <reset_tty.h>
+#include <reset_ioc.h>
+#include <defs.h>
+#include <mcc.h>
+#include <io.h>
+
+/********************************************************************
+ * Integer types definition
+ ********************************************************************/
+typedef unsigned int size_t;
+typedef unsigned int addr_t;
+
+/********************************************************************
+ * Other types definition
+ ********************************************************************/
+
+/*
+ * cache line aligned disk block (sector) buffer 
+ */
+struct aligned_blk
+{
+    char b[BLOCK_SIZE];
+} __attribute__((aligned(CACHE_LINE_SIZE)));
+
+/********************************************************************
+ * Utility functions definition
+ ********************************************************************/
+
+extern unsigned int proctime();
+
+extern int pread(size_t file_offset, void *buf, size_t nbyte, size_t offset);
+
+extern void* memcpy(void *_dst, const void *_src, size_t n);
+extern void* memset(void *_dst, int c, size_t len);
+
+extern void check_elf_header(Elf32_Ehdr *ehdr);
+extern void reset_print_elf_phdr(Elf32_Phdr * elf_phdr_ptr);
+
+#if USE_IOB
+void reset_mcc_invalidate (const void * buf, size_t size);
+#endif /* USE_IOB */
+
+#if (CACHE_COHERENCE == 0) || USE_IOB
+void reset_buf_invalidate (const void * buf, size_t line_size, size_t size);
+#endif /* (CACHE_COHERENCE == 0) || USE_IOB */
+#endif /* BOOT_UTILS_H */
+
+// vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
+
Index: /branches/fault_tolerance/softs/tsar_boot/include/sdcard.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/sdcard.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/sdcard.h	(revision 724)
@@ -0,0 +1,172 @@
+/**
+ * \file sdcard.h
+ * \date 30 August 2012
+ * \author Cesar fuguet <cesar.fuguet-tortolero@lip6.fr>
+ *
+ * This file defines the driver of a SD Card device using an SPI controller
+ */
+
+#ifndef SDCARD_H
+#define SDCARD_H
+
+#include <spi.h>
+
+/**
+ * \brief SD Card type definition
+ */
+struct sdcard_dev
+{ 
+    /** 
+     * SPI controller pointer 
+     */
+    struct spi_dev * spi;
+
+    /**
+     * Block length of the SDCARD
+     */
+    unsigned int block_length;
+
+    /**
+     * Access pointer representing the offset in bytes used
+     * to read or write in the SDCARD.
+     *
+     * \note this driver is for cards SDSD, therefore this offset
+     *       must be multiple of the block length
+     */ 
+    unsigned int access_pointer;
+
+    /**
+     * Slave ID. This ID represents the number of the slave select signal
+     * used in the hardware platform
+     */
+    int    slave_id;
+
+    /* is the card high capacity ? */
+    int sdhc;
+};
+
+/**
+ * \param   sdcard  : uninitialized pointer. This parameter will contain
+ *                    a pointer to the initialized block device or NULL otherwise
+ * \param   spi     : initialized pointer to the spi controller
+ * \param   ss      : slave select signal number
+ *
+ * \return  0 when initialization succeeds or an error code value otherwise.
+ *          The error codes are defined in this header file.
+ *
+ * \brief   Initialize the block device
+ */
+int sdcard_dev_open(struct sdcard_dev * sdcard, struct spi_dev * spi, int ss);
+
+/**
+ * \param   sdcard  : Pointer to the initialized block device
+ * \param   buf     : Pointer to a memory segment wherein store
+ * \param   count   : number of bytes to read
+ *
+ * \return  0 when read succeeds or an error code value otherwise.
+ *          The error codes are defined in this header file.
+ *
+ * \brief   Read in the block device
+ *
+ * The read is made in the current block device access pointer.
+ * In the read succeeds, the block device access pointer is
+ * relocated to the next block.
+ */
+int sdcard_dev_read(struct sdcard_dev * sdcard, void * buf, unsigned int count);
+
+/**
+ * \param   sdcard  : Pointer to the initialized block device
+ * \param   buf     : Pointer to a memory segment wherein the
+ * \param   count   : number of blocks to write
+ *
+ * \return  0 when write succeeds or an error code value otherwise.
+ *          The error codes are defined in this header file.
+ *
+ * \brief   Write in the block device
+ *
+ * The write is made in the current block device access pointer.
+ * In the write succeeds, the block device access pointer is
+ * relocated to the next block.
+ */
+unsigned int sdcard_dev_write(struct sdcard_dev * sdcard, void * buf, unsigned int count);
+
+/**
+ * \param   sdcard  : Pointer to the initialized block device
+ * \param   pos     : Position where the block device access
+ *                    pointer must be move
+ *
+ * \return  void
+ *
+ * \brief   Change block device access pointer position
+ *  
+ * The block device access pointer is relocated in terms of blocks
+ */
+void sdcard_dev_lseek(struct sdcard_dev * sdcard, unsigned int pos);
+
+/**
+ * \param   sdcard  : Pointer to the initialized block device
+ * \param   len     : Block device length to set
+ *
+ * \return  0 when succeed or error code value otherwise
+ *
+ * \brief   Set the block length of the device
+ */
+int sdcard_dev_set_blocklen(struct sdcard_dev * sdcard, unsigned int len);
+
+/**
+ * SD Card constants
+ */
+
+/** Number of retries after an unacknowledge command */
+#define SDCARD_COMMAND_TIMEOUT      100
+
+/** This command is a simple SD commmand */
+#define SDCARD_CMD                  0
+
+/** This is an application specific command */
+#define SDCARD_ACMD                 1
+
+/** The transmition is done in the negative edge of the clock */
+#define SDCARD_TX_NEGEDGE           0
+
+/** The transmition is done in the positive edge of the clock */
+#define SDCARD_TX_POSEDGE           1
+
+/** The reception is done in the negative edge of the clock */
+#define SDCARD_RX_NEGEDGE           0
+
+/** The reception is done in the positive edge of the clock */
+#define SDCARD_RX_POSEDGE           1
+
+/**
+ * SD Card macros
+ */
+
+/** Check if the response is valid */
+#define SDCARD_CHECK_R1_VALID(x)    (~x & SDCARD_R1_RSP_VALID) ? 1 : 0
+
+/**
+ * Check if there is an error in the response
+ *
+ * \note this macro must be used after verify that the response is
+ *       valid
+ */
+#define SDCARD_CHECK_R1_ERROR(x)    ( x & 0x7E)                ? 1 : 0
+
+/**
+ * SD Card Response 1 (R1) format constants
+ */
+#define SDCARD_R1_IN_IDLE_STATE     ( 1 << 0 ) /**< \brief R1 bit 0 */
+#define SDCARD_R1_ERASE_RESET       ( 1 << 1 ) /**< \brief R1 bit 1 */
+#define SDCARD_R1_ILLEGAL_CMD       ( 1 << 2 ) /**< \brief R1 bit 2 */
+#define SDCARD_R1_COM_CRC_ERR       ( 1 << 3 ) /**< \brief R1 bit 3 */
+#define SDCARD_R1_ERASE_SEQ_ERR     ( 1 << 4 ) /**< \brief R1 bit 4 */
+#define SDCARD_R1_ADDRESS_ERR       ( 1 << 5 ) /**< \brief R1 bit 5 */
+#define SDCARD_R1_PARAMETER_ERR     ( 1 << 6 ) /**< \brief R1 bit 6 */
+#define SDCARD_R1_RSP_VALID         ( 1 << 7 ) /**< \brief R1 bit 7 */
+
+#endif
+
+/*
+ * vim: tabstop=4 : shiftwidth=4 : expandtab : softtabstop=4
+ */
Index: /branches/fault_tolerance/softs/tsar_boot/include/spi.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/spi.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/spi.h	(revision 724)
@@ -0,0 +1,154 @@
+/**
+ * \file  : spi.h
+ * \date  : 30 August 2012
+ * \author: Cesar Fuguet <cesar.fuguet-tortolero@lip6.fr>
+ *
+ * This file contains the definition of a driver for the SPI controller
+ */
+
+#ifndef SPI_H
+#define SPI_H
+
+#include <io.h>
+
+/**
+ * SPI type definition
+ */
+struct spi_dev
+{
+    /**
+     * RX/TX registers of the SPI controller 
+     */
+    unsigned int rx_tx[4];
+
+    /**
+     * Control register of the SPI controller
+     */
+    unsigned int ctrl;
+
+    /**
+     * Divider register for the SPI controller generated clock signal
+     */
+    unsigned int divider;
+
+    /**
+     * Slave select register of the SPI controller
+     */
+    unsigned int ss;
+    unsigned int dma_base;
+    unsigned int dma_baseh;
+    unsigned int dma_count;
+};
+
+/**
+ * \param   spi     : initialized pointer to a SPI controller.
+ * \param   byte    : Byte to send to the SPI controller
+ * \param   index   : index of the TX register in the SPI (TX[index])
+ *
+ * \return  void
+ *
+ * \brief   Send a byte to one of the tx buffer registers of the
+ *          SPI controller
+ */
+void spi_put_tx(struct spi_dev * spi, unsigned char byte, int index);
+
+/**
+ * \param   spi     : initialized pointer to a SPI controller.
+ * \param   index   : index of the RX register in the SPI (RX[index])
+ *
+ * \return  byte from the RX[index] register
+ *
+ * \brief   Get a byte from one of the rx buffer registers of the
+ *          SPI controller
+ */
+inline volatile unsigned char spi_get_rx(struct spi_dev * spi, int index);
+
+/**
+ * \param   spi     : initialized pointer to a SPI controller.
+ * \param   buf     : buffer to store data read
+ * \param   count   : byte count to read
+ *
+ * \return  void
+ *
+ * \brief   get a data block from the SPI controller using 128bits
+ *          reads if possible
+ */
+void spi_get_data(struct spi_dev * spi, void *buf, unsigned int count);
+
+/**
+ * \param   spi     : initialized pointer to a SPI controller.
+ * \param   index   : index of the slave select signal to assert
+ *
+ * \return  void
+ *
+ * \brief   Set the index selected slave select signal (ss[index] <= '0')
+ */
+inline void spi_ss_assert(struct spi_dev * spi, int index);
+
+/**
+ * \param   spi     : initialized pointer to a SPI controller.
+ * \param   index   : index of the slave select signal to deassert
+ *
+ * \return  void
+ *
+ * \brief   Unset the index selected slave select signal (ss[index] <= '0')
+ */
+inline void spi_ss_deassert(struct spi_dev * spi, int index);
+
+/**
+ * \param   spi         : initialized pointer to a SPI controller.
+ * \param   spi_freq    : SPI Master to Slave clock frequency (in Hz)
+ * \param   sys_freq    : System clock frequency (in Hz)
+ * \param   char_len    : number to bits to transmit in one transfer
+ * \param   tx_edge     : when 0, the Master Out Slave In signal is changed
+ *                        on the falling edge of the clock
+ * \param   rx_edge     : when 0, the Master In Slave Out signal is latched
+ *                        on the falling edge of the clock
+ *
+ * \return  void
+ *
+ * \brief   Configure the SPI controller
+ * \note    Any of the arguments can be less than 0 if you want to keep the old value
+ */
+void spi_dev_config (
+        struct spi_dev * spi,
+        int spi_freq        ,
+        int sys_freq        ,
+        int char_len        ,
+        int tx_edge         ,
+        int rx_edge         );
+
+/**
+ * SPI macros and constants
+ */
+#define SPI_TX_POSEDGE         1           /**< MOSI is changed on neg edge   */
+#define SPI_TX_NEGEDGE         0           /**< MOSI is changed on pos edge   */
+#define SPI_RX_POSEDGE         1           /**< MISO is latched on pos edge   */
+#define SPI_RX_NEGEDGE         0           /**< MISO is latched on neg edge   */
+
+#define SPI_CTRL_ASS_EN        ( 1 << 13 ) /**< Auto Slave Sel Assertion      */
+#define SPI_CTRL_IE_EN         ( 1 << 12 ) /**< Interrupt Enable              */
+#define SPI_CTRL_LSB_EN        ( 1 << 11 ) /**< LSB are sent first            */
+#define SPI_CTRL_TXN_EN        ( 1 << 10 ) /**< MOSI is changed on neg edge   */
+#define SPI_CTRL_RXN_EN        ( 1 << 9  ) /**< MISO is latched on neg edge   */
+#define SPI_CTRL_GO_BSY        ( 1 << 8  ) /**< Start the transfer            */
+#define SPI_CTRL_DMA_BSY        (1 << 16)  /***   DMA in progress             */
+#define SPI_CTRL_CHAR_LEN_MASK (  0xFF   ) /**< Bits transmited in 1 transfer */
+#define SPI_RXTX_MASK          (  0xFF   ) /**< Mask for the an RX/TX value   */
+
+#define SPI_DMA_COUNT_READ      (1 << 0) /* operation is a read (else write) */
+
+/** 
+ * \param  x : Initialized pointer to the SPI controller
+ *
+ * \return 1 if there is an unfinished transfer in the SPI controller
+ *
+ * \brief  Check the GO_BUSY bit of the SPI Controller
+ */
+#define SPI_IS_BUSY(x)         ((ioread32(&x->ctrl) & (SPI_CTRL_GO_BSY|SPI_CTRL_DMA_BSY)) != 0) ? 1 : 0
+
+#endif
+
+/*
+ * vim: tabstop=4 : shiftwidth=4 : expandtab : softtabstop=4
+ */
Index: /branches/fault_tolerance/softs/tsar_boot/include/tty.h
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/include/tty.h	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/include/tty.h	(revision 724)
@@ -0,0 +1,23 @@
+#ifndef TTY_REGS_H
+#define TTY_REGS_H
+
+enum SoclibTtyRegisters {
+    TTY_WRITE   = 0,
+    TTY_STATUS  = 1,
+    TTY_READ    = 2,
+    TTY_CONFIG  = 3,
+    /**/
+    TTY_SPAN    = 4,
+};
+
+#endif
+
+// Local Variables:
+// tab-width: 4;
+// c-basic-offset: 4;
+// c-file-offsets:((innamespace . 0)(inline-open . 0));
+// indent-tabs-mode: nil;
+// End:
+//
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
+
Index: /branches/fault_tolerance/softs/tsar_boot/src/reset.S
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/reset.S	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/reset.S	(revision 724)
@@ -0,0 +1,244 @@
+/*
+ * \file  : reset.S
+ * \date  : 01/12/2012
+ * \author: Cesar FUGUET & Manuel BOUYER & Alain Greiner
+ *
+ * This is a generic reset code for a generic multi-clusters / multi-processors
+ * TSAR architecture (up to 256 clusters / up to 4  processors per cluster).
+ *
+ * There is one XICU, one TTY, one DMA, and one memory bank per cluster.
+ *
+ * This preloader uses a stack segment allocated in cluster 0, defined
+ * by the seg_reset_stack_base parameters in ldscript, of size 0x10000 (64k)
+ * - Processor 0 uses a larger stack:         64 Kbytes.
+ * - Other processors use a smaller stack:    256 bytes.
+ *     => the seg_stack_size cannot be smaller than 0x50000 bytes (320 Kytes).
+ *         (64K + 1024 * 256 = 320 Kbytes)
+ * Those stacks can be used by both the preloader and the boot-loader code.
+ * 
+ * The replicated XICU is used to awake the sleeping processors:
+ *      xicu_paddr_base = ICU_PADDR_BASE + (cluster_xy << 32)
+ *
+ * It is intended to be used with various operating systems or nano kernels,
+ * including NetBSD, ALMOS, and GIET_VM.
+ *
+ * - Each processor initializes its Status Register (SR) to disable interrupts.
+ * - Each processor initializes its Count Register.
+ * - Each processor initialises its private XICU WTI mask register.
+ * - Each processor initializes its Stack Pointer.
+ * - Only processor 0 executes the reset_load_elf function to load into memory 
+ *   the system specific boot-loader stored on disk at BOOT_LOADER_LBA 
+ * - All other processors wait in a low power consumption mode that the
+ *   processor 0 wakes them using an IPI (Inter Processor Interruption)
+ */
+
+    #include <defs.h>
+    #include <mips32_registers.h>
+
+    /* These define should be consistent with values defined in map.xml file  */
+
+    .extern seg_reset_stack_base  
+
+    .section .reset,"ax",@progbits
+
+    .extern dtb_addr
+    .extern reset_putc
+    .extern reset_getc
+    .extern reset_ioc_read
+    .extern reset_elf_loader
+    .extern memcpy
+    .extern reset_puts
+    .extern reset_putx
+    .extern reset_putd
+    .extern reset_ioc_init
+    .extern versionstr
+
+    .globl  reset                    /* Makes reset an external symbol */
+    .ent    reset
+
+    .align  2
+    .set noreorder
+
+reset:
+    b       _reset                  /* 0xbfc0000 */
+    nop                             /* 0xbfc0004 */
+
+    /*  Addresses of the functions provided by this reset code */
+
+preloader_vector:
+    .word   RESET_VERSION           /* 0xbfc0008 */
+    .word   dtb_addr                /* 0xbfc000c */
+    .word   reset_putc              /* 0xbfc0010 */
+    .word   reset_getc              /* 0xbfc0014 */
+    .word   reset_ioc_read          /* 0xbfc0018 */
+    .word   reset_elf_loader        /* 0xbfc001C */
+    .word   memcpy                  /* 0xbfc0020 */
+    .word   reset_puts              /* 0xbfc0024 */
+    .word   reset_putx              /* 0xbfc0028 */
+    .word   reset_putd              /* 0xbfc002C */
+
+_reset:
+
+    /* All processors Disable interruptions, keep STATUSbev enabled */
+
+    li      k0,     (1 << 22)
+    mtc0    k0,     CP0_STATUS
+
+    /* All processors compute proc_id, lpid, cluster_xy */
+
+    mfc0    k0,     CP0_EBASE
+    andi    t0,     k0,     0x3FF   /* t0 <= proc_id (at most 1024 processors)    */
+
+    move    t3,     t0
+
+    la      k0,     NB_PROCS        /* k0 <= number of processors per cluster     */
+    divu    t3,     k0
+    mfhi    t1                      /* t1 <= lpid       = proc_id % NB_PROCS      */
+    mflo    t2                      /* t2 <= cluster_xy = proc_id / NB_PROCS      */
+
+    /* All processors initialise the count register in CP0 */
+
+    mtc0    zero,   CP0_COUNT
+
+    /*
+     * All processors enable the WTI for XICU 
+     * Each processor may have IRQ_PER_PROC irq outputs from the XICU
+     * In each cluster, the XICU base address depends on the cluster_xy 
+     */
+
+    la      t3,     ICU_PADDR_BASE  /* t3 <= ICU base address                     */
+    move    t4,     t1              /* t4 <= local_id                             */
+    li      t5,     IRQ_PER_PROC    /* t5 <= IRQ_PER_PROC                         */
+    multu   t4,     t5              
+    mflo    t6                      /* t6 <= IRQ_PER_PROC * local_id              */
+    sll     t4,     t6,     2       /* t4 <= OUT_INDEX = t6 * 4                   */
+
+    li      t5,     (0xC << 7)      /* t5 <= FUNC      = XICU_MSK_WTI             */
+    or      t4,     t4,     t5      /* t4 <= FUNC | INDEX | 00                    */
+    or      t5,     t3,     t4      /* t5 <= &XICU[MSK_WTI][OUT_INDEX]            */
+    
+    /* All processors set WTI mask using the physical address extension    */
+
+    li      t4,     1
+    sllv    t4,     t4,     t1      /* Set XICU[MSK_WTI][INDEX][local_id]         */
+
+    mtc2    t2,     CP2_PADDR_EXT   /* set PADDR extension                        */
+    sw      t4,     0(t5)           /* XICU[MSK_WTI][INDEX] <= t4                 */
+    mtc2    zero,   CP2_PADDR_EXT   /* reset PADDR extension                      */
+
+    /* All processors initializes stack pointer, depending on proc_id */
+
+   la      k0,      seg_reset_stack_base
+   li      k1,      0x10000         /* k1 <= P0 stack size == 64 Kbytes           */
+   addu    sp,      k0,     k1      /* P0 stack from base to (base + 64K)         */
+
+   li      k1,      0x200           /* k1 <= Pi stack size == 512 bytes           */
+   multu   k1,      t0              
+   mflo    k0                       /* k0 <= 256 * proc_id                        */
+   addu    sp,      sp,     k1
+   addu    sp,      sp,     k0      /* Pi stacks from base + 64K + proc_id*256    */
+
+    /*
+     * Only processor 0 in cluster 0 loads and executes the boot-loader 
+     * We have:
+     * t0: global proc_id
+     * t1: local proc_id
+     * t2: cluster_xy
+     * t3: xicu physical base address in cluster 0
+     */
+
+    bne     zero,   t0,     _reset_wait
+    nop
+
+    /* Processor 0 displays version for this reset code */
+
+    la      a0,     versionstr
+    la	    k0,     reset_puts
+    jalr    k0
+    nop
+
+
+#if USE_SPI
+
+    /* Processor 0 Initialize the SPI controller */
+
+    la      k0,     reset_ioc_init
+    jalr    k0
+    nop
+
+#endif
+
+    /*
+     * Processor 0 jumps to the reset_elf_loader routine 
+     * Passing as argument the block number in which is loaded the .elf file
+     */
+
+    la      k0,     reset_elf_loader
+    li      a0,     BOOT_LOADER_LBA
+    jalr    k0
+    nop
+
+    /* 
+     * Processor O jumps to the entry address defined in the .elf file,
+     * and returned by reset_elf_loader function.
+     * First argument is pointer to the preloader function vectors
+     * other function arguments are 0
+     */
+
+    la	    a0,     preloader_vector
+    move    a1,     zero
+    move    a2,     zero
+    move    a3,     zero
+    jr      v0
+    nop
+
+    /*
+     * All processor (but processor 0) wait in low power mode 
+     * until processor 0 wakes them using an IPI.
+     * We have:
+     * t0: global id
+     * t1: local id
+     * t2: cluster id
+     * t3: xicu physical base address in cluster 0
+     */
+
+_reset_wait:
+
+    sll     t4,     t1,     2       /* t4 <= local_id * 4                 */
+    addu    t5,     t4,     t3      /* t5 <= &XICU[WTI_REG][local_id]     */
+
+    wait
+
+    /* 
+     * All other processors, when exiting wait mode,
+     * read from XICU the address to jump.
+     * This address is the boot-loader entry address that has been
+     * written in the mailbox by the IPI sent by processor 0
+     */
+
+    mtc2    t2,     CP2_PADDR_EXT   /* set PADDR extension                */
+    lw      k0,     0(t5)           /* k0 <= XICU[WTI_REG][local_id]      */
+    mtc2    zero,   CP2_PADDR_EXT   /* reset PADDR extension              */
+
+    jr      k0
+    nop
+
+/* Exception entry point */
+
+.org 0x0380
+_excep:
+    mfc0    a0, CP0_STATUS          /* first arg is status                */
+    mfc0    a1, CP0_CAUSE           /* second arg is cause                */
+    mfc0    a2, CP0_EPC             /* third argc is epc                  */
+    mfc2    a3, CP2_DBVAR           /* fourth argc is dbvar               */
+    nop
+    j       handle_except
+    nop
+
+    .end reset
+
+    .set reorder
+
+/*
+ * vim: tabstop=4 : shiftwidth=4 : expandtab
+ */
Index: /branches/fault_tolerance/softs/tsar_boot/src/reset_elf_loader.c
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/reset_elf_loader.c	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/reset_elf_loader.c	(revision 724)
@@ -0,0 +1,100 @@
+/**
+ * \file    : reset_elf_loader.c
+ * \date    : August 2012
+ * \author  : Cesar Fuguet
+ *
+ * This file defines an elf file loader which reads an executable .elf file
+ * starting at a sector passed as argument on a disk and copy the different
+ * ELF program segments in the appropriate memory address using as information
+ * the virtual address read from the .elf file.
+ */
+
+#include <reset_ioc.h>
+#include <elf-types.h>
+#include <reset_tty.h>
+#include <reset_utils.h>
+#include <defs.h>
+
+///////////////////////////////////////////////////////////////////////////////
+void * reset_elf_loader(size_t lba)
+///////////////////////////////////////////////////////////////////////////////
+{
+    size_t file_offset = lba * BLOCK_SIZE;
+
+    reset_puts("\n[RESET] Start reset_elf_loader at cycle ");
+    reset_putd( proctime() );
+    reset_puts("\n");
+
+    /*
+     * Load ELF HEADER
+     */
+    Elf32_Ehdr elf_header;
+    if (pread(file_offset, (void*)&elf_header, sizeof(Elf32_Ehdr), 0) < 0) {
+        goto error;
+    }
+    check_elf_header(&elf_header);
+
+    /*
+     * Load ELF PROGRAM HEADER TABLE
+     */
+    Elf32_Phdr elf_pht[PHDR_ARRAY_SIZE];
+    size_t phdr_nbyte = sizeof(Elf32_Phdr) * elf_header.e_phnum;
+    size_t phdr_off = elf_header.e_phoff;
+    if (pread(file_offset, (void*)&elf_pht, phdr_nbyte, phdr_off) < 0) {
+        goto error;
+    }
+
+    /*
+     * Search for loadable segments in the ELF file
+     */
+    int pseg;
+    for (pseg = 0; pseg < elf_header.e_phnum; pseg++)
+    {
+        if(elf_pht[pseg].p_type != PT_LOAD) continue;
+
+#if (RESET_DEBUG == 1)
+        reset_puts("[RESET DEBUG] Loadable segment found:\n");
+        reset_print_elf_phdr(&elf_pht[pseg]);
+#endif
+
+        addr_t p_paddr = elf_pht[pseg].p_paddr;
+        size_t p_filesz = elf_pht[pseg].p_filesz;
+        size_t p_memsz = elf_pht[pseg].p_memsz;
+        size_t p_offset = elf_pht[pseg].p_offset;
+
+        /*
+         * Copy program segment from ELF executable into corresponding physical
+         * address
+         */
+        if (pread(file_offset, (void*)p_paddr, p_filesz, p_offset) < 0) {
+            goto error;
+        }
+
+        /*
+         * Fill remaining bytes with zero (filesz < memsz)
+         */
+        char* pseg_ptr = (char*)p_paddr;
+        memset((void*)&pseg_ptr[p_filesz], 0, (p_memsz - p_filesz));
+
+        reset_puts("\n[RESET] Segment loaded : address = ");
+        reset_putx(p_paddr);
+        reset_puts(" / size = ");
+        reset_putx(p_filesz);
+        reset_puts("\n");
+    }
+
+    reset_puts("\n[RESET] Complete reset_elf_loader at cycle ");
+    reset_putd( proctime() );
+    reset_puts(" / boot entry = ");
+    reset_putx( (addr_t)(elf_header.e_entry) );
+    reset_puts("\n");
+
+    return ((void *) elf_header.e_entry);
+
+error:
+    reset_puts("\n[RESET ERROR] Error while loading ELF file");
+    reset_exit();
+    return 0;
+}
+
+// vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
Index: /branches/fault_tolerance/softs/tsar_boot/src/reset_exception.c
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/reset_exception.c	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/reset_exception.c	(revision 724)
@@ -0,0 +1,25 @@
+/**
+ * \file    : exceptions.c
+ * \date    : December 2012
+ * \author  : Manuel Bouyer
+ *
+ * This file defines a simple exceptions handler
+ */
+
+#include <reset_tty.h>
+
+void handle_except(int status, int cause, int epc, int dbvar)
+{
+	reset_puts("\n[RESET] exception handler called: \r\n    status ");
+	reset_putx(status);
+	reset_puts("\r\n    cause  ");
+	reset_putx(cause);
+	reset_puts(" (exception ");
+	reset_putx((cause >> 2) & 0x1f);
+	reset_puts(")\r\n    epc    ");
+	reset_putx(epc);
+	reset_puts("\r\n    dbvar  ");
+	reset_putx(dbvar);
+	reset_puts("\r\n");
+	while (1);
+}
Index: /branches/fault_tolerance/softs/tsar_boot/src/reset_ioc.c
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/reset_ioc.c	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/reset_ioc.c	(revision 724)
@@ -0,0 +1,207 @@
+#include <reset_ioc.h>
+
+#if USE_SPI
+static struct sdcard_dev     _sdcard_device;
+static struct spi_dev *const _spi_device = (struct spi_dev*) IOC_PADDR_BASE;
+#endif
+
+#define SDCARD_RESET_ITER_MAX   4
+
+///////////////////////////////////
+inline void reset_sleep(int cycles)
+{
+    int i;
+    for (i = 0; i < cycles; i++);
+}
+
+#if USE_SPI
+///////////////////////////////////////////////////////////////////////////////
+//     reset_ioc_init
+// This function initializes the SDCARD / required for FPGA.
+///////////////////////////////////////////////////////////////////////////////
+int reset_ioc_init()
+{
+    unsigned char sdcard_rsp;
+
+    reset_puts("Initializing block device\n\r");
+
+    /**
+     * Initializing the SPI controller
+     */
+    spi_dev_config (
+      _spi_device   ,
+      200000        , /**< SPI_clk: 200 Khz */
+      SYSCLK_FREQ   , /**< Sys_clk          */
+      8             , /**< Charlen: 8       */
+      SPI_TX_NEGEDGE,
+      SPI_RX_POSEDGE
+    );
+
+    /**
+     * Initializing the SD Card
+     */
+    unsigned int iter = 0;
+    while(1)
+    {
+        reset_puts("Trying to initialize SD card... ");
+
+        sdcard_rsp = sdcard_dev_open(&_sdcard_device, _spi_device, 0);
+        if (sdcard_rsp == 0)
+        {
+            reset_puts("OK\n");
+            break;
+        }
+
+        reset_puts("KO\n");
+        reset_sleep(1000);
+        if (++iter >= SDCARD_RESET_ITER_MAX)
+        {
+            reset_puts("\nERROR: During SD card reset to IDLE state\n"
+                      "/ card response = ");
+            reset_putx(sdcard_rsp);
+            reset_puts("\n");
+            reset_exit();
+        }
+    }
+
+    /**
+     * Set the block length of the SD Card
+     */
+    sdcard_rsp = sdcard_dev_set_blocklen(&_sdcard_device, 512);
+    if (sdcard_rsp)
+    {
+        reset_puts("ERROR: During SD card blocklen initialization\n");
+        reset_exit();
+    }
+
+    /**
+     * Incrementing SDCARD clock frequency for normal function
+     */
+    spi_dev_config (
+        _spi_device ,
+        10000000    , /**< SPI_clk 10 Mhz */
+        SYSCLK_FREQ , /**< Sys_clk        */
+        -1          , /**< Charlen: 8     */
+        -1          ,
+        -1
+    );
+
+    reset_puts("Finish block device initialization\n\r");
+
+    return 0;
+} // end reset_ioc_init()
+#endif 
+
+//////////////////////////////////////////////////////////////////////////////
+// reset_bdv_read()
+/////////////////////////////////////////////////////////////////////////////
+#if USE_BDV
+int reset_bdv_read( unsigned int lba, 
+                    void*        buffer, 
+                    unsigned int count )
+{
+    unsigned int * ioc_address = (unsigned int*)IOC_PADDR_BASE;
+
+    // block_device configuration
+    iowrite32( &ioc_address[BLOCK_DEVICE_BUFFER], (unsigned int) buffer );
+    iowrite32( &ioc_address[BLOCK_DEVICE_COUNT], count );
+    iowrite32( &ioc_address[BLOCK_DEVICE_LBA], lba );
+    iowrite32( &ioc_address[BLOCK_DEVICE_IRQ_ENABLE], 0 );
+
+    // block_device trigger transfer
+    iowrite32( &ioc_address[BLOCK_DEVICE_OP], ( unsigned int )
+               BLOCK_DEVICE_READ );
+
+    unsigned int status = 0;
+    while ( 1 )
+    {
+        status = ioread32(&ioc_address[BLOCK_DEVICE_STATUS]);
+        if ( status == BLOCK_DEVICE_READ_SUCCESS )
+        {
+            break;
+        }
+        if ( status == BLOCK_DEVICE_READ_ERROR   ) {
+            reset_puts("ERROR during read on the BLK device\n");
+            return 1;
+        }
+    }
+#if (CACHE_COHERENCE == 0) || USE_IOB
+    reset_buf_invalidate(buffer, CACHE_LINE_SIZE, count * 512);
+#endif
+    return 0;
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+// reset_spi_read()
+/////////////////////////////////////////////////////////////////////////////
+#if USE_SPI
+static int reset_spi_read( unsigned int lba, 
+                           void*        buffer, 
+                           unsigned int count )
+{
+    unsigned int sdcard_rsp;
+    unsigned int i;
+
+    sdcard_dev_lseek(&_sdcard_device, lba);
+    for(i = 0; i < count; i++)
+    {
+        unsigned char* buf = (unsigned char *) buffer + (512 * i);
+        if (( sdcard_rsp = sdcard_dev_read ( &_sdcard_device, buf, 512 ) ))
+        {
+            reset_puts("ERROR during read on the SDCARD device. Code: ");
+            reset_putx(sdcard_rsp);
+            reset_puts("\n");
+            return 1;
+        }
+    }
+    return 0;
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+// reset_rdk_read()
+/////////////////////////////////////////////////////////////////////////////
+#if USE_RDK
+static int reset_rdk_read( unsigned int lba,
+                           void*        buffer,
+                           unsigned int count )
+{
+    unsigned int* rdk_address = (unsigned int*) RDK_PADDR_BASE;
+    char* src = (char*) rdk_address + (lba * 512);
+
+    memcpy(buffer, (void*) src, count * 512);
+    return 0;
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//      reset_ioc_read()
+// Transfer data from disk to a memory buffer
+// - param lba    : first block index on the disk
+// - param buffer : base address of the memory buffer
+// - param count  : number of blocks to be transfered
+// This is a blocking function. The function returns once the transfer is
+// completed.
+//
+// The USE_BDV, USE_SPI and USE_RDK variables signal if the disk is accessed
+// through a BLOCK DEVICE, SPI or RAMDISK respectively
+///////////////////////////////////////////////////////////////////////////////
+int reset_ioc_read( unsigned int lba, 
+                    void*        buffer, 
+                    unsigned int count )
+{
+#if USE_BDV
+    return reset_bdv_read(lba, buffer, count);
+#elif USE_SPI
+    return reset_spi_read(lba, buffer, count);
+#elif USE_RDK
+    return reset_rdk_read(lba, buffer, count);
+#else
+#   error "reset_ioc_read() : No supported disk controller chosen"
+#endif
+}
+
+/*
+ * vim: tabstop=4 : shiftwidth=4 : expandtab
+ */
Index: /branches/fault_tolerance/softs/tsar_boot/src/reset_tty.c
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/reset_tty.c	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/reset_tty.c	(revision 724)
@@ -0,0 +1,103 @@
+/********************************************************************
+ * \file    reset_tty.c
+ * \date    5 mars 2014
+ * \author  Cesar Fuguet 
+ *
+ * Minimal driver for TTY controler 
+ *******************************************************************/
+
+#include <reset_tty.h>
+#include <io.h>
+#include <defs.h>
+
+///////////////////////
+int reset_getc(char *c)
+{
+    unsigned int* tty_address = (unsigned int*) TTY_PADDR_BASE;
+
+    if (ioread32( &tty_address[TTY_STATUS] ) == 0) return 0;
+    *c = ioread32( &tty_address[TTY_READ] );
+    return 1;
+}
+
+/////////////////////////////
+void reset_putc(const char c)
+{
+    unsigned int* tty_address = (unsigned int*) TTY_PADDR_BASE;
+
+    iowrite32( &tty_address[TTY_WRITE], (unsigned int)c );
+    if (c == '\n') reset_putc( '\r' );
+}
+
+///////////////////////////////////
+void reset_puts(const char *buffer) 
+{
+    unsigned int n;
+
+    for ( n=0; n<100; n++)
+    {
+        if (buffer[n] == 0) break;
+        reset_putc(buffer[n]);
+    }
+} 
+
+/////////////////////////////////
+void reset_putx(unsigned int val)
+{
+    static const char HexaTab[] = "0123456789ABCDEF";
+    char              buf[11];
+    unsigned int      c;
+
+    buf[0]  = '0';
+    buf[1]  = 'x';
+    buf[10] = 0;
+
+    for ( c = 0 ; c < 8 ; c++ )
+    { 
+        buf[9-c] = HexaTab[val&0xF];
+        val = val >> 4;
+    }
+    reset_puts(buf);
+}
+
+/////////////////////////////////
+void reset_putd(unsigned int val)
+{
+    static const char DecTab[] = "0123456789";
+    char              buf[11];
+    unsigned int      i;
+    unsigned int      first = 0;
+
+    buf[10] = 0;
+
+    for ( i = 0 ; i < 10 ; i++ )
+    {
+        if ((val != 0) || (i == 0))
+        {
+            buf[9-i] = DecTab[val % 10];
+            first    = 9-i;
+        }
+        else
+        {
+            break;
+        }
+        val /= 10;
+    }
+    reset_puts( &buf[first] );
+}
+
+/////////////////
+void reset_exit()
+{
+    register int pid;
+    asm volatile( "mfc0 %0, $15, 1": "=r"(pid) );
+
+    reset_puts("\n!!! Exit Processor ");
+    reset_putx(pid);
+    reset_puts(" !!!\n");
+
+    while(1) asm volatile("nop");   // infinite loop...
+}
+
+
+
Index: /branches/fault_tolerance/softs/tsar_boot/src/reset_utils.c
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/reset_utils.c	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/reset_utils.c	(revision 724)
@@ -0,0 +1,300 @@
+/**
+ * \file    : reset_utils.c
+ * \date    : August 2012
+ * \author  : Cesar Fuguet
+ *
+ * Definition of utilities functions used by the TSAR pre-loader
+ */
+
+#include <reset_utils.h>
+
+/*
+ * pread(size_t file_offset, void* buf, size_t nbyte, size_t offset)
+ *
+ * read from disk into buffer "nbyte" bytes from (file_offset + offset)
+ *
+ * \param file_offset: Disk relative offset of file
+ * \param buf: Destination buffer
+ * \param nbyte: Number of bytes to read
+ * \param offset: File relative offset
+ *
+ * \note Absolute disk offset (in bytes) is (file_offset + offset)
+ */
+int pread(size_t file_offset, void *buf, size_t nbyte, size_t offset) {
+    if (nbyte == 0) return 0;
+
+    /*
+     * Cache block data buffer and cached block index
+     */
+    static struct aligned_blk blk_buf;
+    static int blk_buf_idx = -1;
+
+    char *dst;
+    int offset_blk;
+    int unaligned_nbyte;
+    int read_nbyte;
+
+    dst = (char*) buf;
+
+    /*
+     * Offset parameter is relative to file, therefore compute disk relative
+     * offset (in bytes)
+     */
+    offset += file_offset;
+
+    /*
+     * Read unaligned bytes at start of segment passing by block cache
+     */
+    offset_blk = (offset / BLOCK_SIZE);
+    offset = (offset % BLOCK_SIZE);
+    unaligned_nbyte = BLOCK_SIZE - offset;
+    read_nbyte = 0;
+    if (offset) {
+        /*
+         * Check cache block hit: if miss, read new block else, use cache block
+         * data
+         */
+        if (offset_blk != blk_buf_idx) {
+            if (reset_ioc_read(offset_blk, (void*)&blk_buf, 1)) {
+                return -1; 
+            }
+        }
+        blk_buf_idx = offset_blk;
+        read_nbyte = (nbyte > unaligned_nbyte) ? unaligned_nbyte : nbyte; 
+        memcpy((void*)dst, (void*)&blk_buf.b[offset], read_nbyte);
+        nbyte -= read_nbyte;
+        offset_blk += 1;
+    }
+
+    /*
+     * Read aligned bytes directly to buffer
+     */
+    size_t nblk = nbyte / BLOCK_SIZE; 
+    if (nblk) {
+        if (reset_ioc_read(offset_blk, (void*)&dst[read_nbyte], nblk)) {
+            return -1;
+        }
+        read_nbyte += (nblk * BLOCK_SIZE);
+        nbyte -= read_nbyte;
+        offset_blk += nblk;
+    }
+
+    /*
+     * Read unaligned bytes at the end of segment passing by block cache
+     */
+    if (nbyte) {
+        if (reset_ioc_read(offset_blk, (void*)&blk_buf, 1)) {
+            return -1;
+        }
+        blk_buf_idx = offset_blk;
+        memcpy((void*)&dst[read_nbyte], (void*)&blk_buf, nbyte);
+        read_nbyte += nbyte;
+    }
+    return read_nbyte; 
+}
+
+/********************************************************************
+ * proctime()
+ *
+ * Returns processor local time.
+ ********************************************************************/
+inline unsigned int proctime() 
+{
+    unsigned int ret;
+    asm volatile ("mfc0   %0,        $9":"=r" (ret));
+    return ret;
+}
+
+/********************************************************************
+ * memcpy( _dst, _src, size )
+ *
+ * Transfer data between two memory buffers.
+ *
+ * \param _dst   : Destination buffer base address 
+ * \param _src   : Source buffer base address
+ * \param size   : Number of bytes to transfer 
+ *
+ ********************************************************************/
+void* memcpy(void *_dst, const void *_src, size_t n)
+{
+    unsigned int *dst = _dst;
+    const unsigned int *src = _src;
+    if (!((unsigned int)dst & 3) && !((unsigned int)src & 3)) {
+        while (n > 3) {
+            *dst++ = *src++;
+            n -= 4;
+        }
+    }
+
+    unsigned char *cdst = (unsigned char*) dst;
+    unsigned char *csrc = (unsigned char*) src;
+    while (n--) {
+        *cdst++ = *csrc++;
+    }
+    return _dst;
+}
+
+/********************************************************************
+ * memset( _dst, value, size )
+ *
+ * Initialize memory buffers with predefined value.
+ *
+ * \param _dst   : Destination buffer base address 
+ * \param value  : Initialization value 
+ * \param size   : Number of bytes to initialize
+ *
+ ********************************************************************/
+void* memset(void *_dst, int c, size_t len)
+{
+    if (len == 0) return _dst;
+
+    unsigned char val = (unsigned char) c;
+
+    /*
+     * Set not word aligned bytes at start of destination buffer
+     */
+    unsigned char* cdst = (unsigned char*) _dst;
+    while (((addr_t)cdst & 3) && len--) {
+        *cdst++ = val;
+    }
+
+    /*
+     * Set 4 bytes words on destination buffer
+     */
+    unsigned int word = (val << 24) | (val << 16) | (val << 8 ) | val;
+    addr_t *wdst = (addr_t*)cdst;
+    while (len > 3) {
+        *wdst++ = word;
+        len -= 4;
+    }
+
+    /*
+     * Set not word aligned bytes at end of destination buffer
+     */
+    cdst = (unsigned char*) wdst;
+    while(len--) {
+        *cdst++ = val;
+    }
+    return _dst;
+}
+
+/********************************************************************
+ * check_elf_header(Elf32_Ehdr*)
+ *
+ * Verify that ELF file is valid and that the number of program
+ * headers does not exceed the defined maximum
+ *
+ * \param ehdr : ELF header pointer
+ *
+ ********************************************************************/
+void check_elf_header(Elf32_Ehdr *ehdr)
+{
+    /*
+     * Verification of ELF Magic Number
+     */
+    if ((ehdr->e_ident[EI_MAG0] != ELFMAG0) ||
+        (ehdr->e_ident[EI_MAG1] != ELFMAG1) ||
+        (ehdr->e_ident[EI_MAG2] != ELFMAG2) ||
+        (ehdr->e_ident[EI_MAG3] != ELFMAG3))
+    {
+        reset_puts("[RESET ERROR] Unrecognized file format (not an ELF format)\n");
+        reset_exit();
+    }
+
+    /*
+     * Verification of Program Headers table size. It must be
+     * smaller than the work size allocated for the
+     * elf_pht[PHDR_ARRAY_SIZE] array
+     */
+    if (ehdr->e_phnum > PHDR_ARRAY_SIZE)
+    {
+        reset_puts("[RESET ERROR] ELF PHDR table size too large\n");
+        reset_exit();
+    }
+}
+
+/********************************************************************
+ * reset_print_elf_phdr( elf_phdr_ptr )
+ *
+ * Print some fields of a ELF program header
+ *
+ * \param elf_phdr_ptr : Pointer to the ELF program header to print
+ *
+ ********************************************************************/
+void reset_print_elf_phdr(Elf32_Phdr * elf_phdr_ptr)
+{
+    reset_puts("- type   : ");
+    reset_putx(elf_phdr_ptr->p_type);
+    reset_puts("\n- offset : ");
+    reset_putx(elf_phdr_ptr->p_offset);
+    reset_puts("\n- vaddr  : ");
+    reset_putx(elf_phdr_ptr->p_vaddr);
+    reset_puts("\n- paddr  : ");
+    reset_putx(elf_phdr_ptr->p_paddr);
+    reset_puts("\n- filesz : ");
+    reset_putx(elf_phdr_ptr->p_filesz);
+    reset_puts("\n- memsz  : ");
+    reset_putx(elf_phdr_ptr->p_memsz);
+    reset_puts("\n- flags  : ");
+    reset_putx(elf_phdr_ptr->p_flags);
+    reset_puts("\n- align  : ");
+    reset_putx(elf_phdr_ptr->p_align);
+    reset_puts("\n");
+}
+
+
+/********************************************************************
+ * reset_mcc_inval()
+ *
+ * Invalidate all data cache lines corresponding to a memory buffer
+ * (identified by an address and a size) in L2 cache.
+ ********************************************************************/
+#if USE_IOB 
+void reset_mcc_invalidate (const void * buffer, size_t size)
+{
+    addr_t *mcc_address = (addr_t*)MCC_PADDR_BASE;
+
+    // get the hard lock assuring exclusive access to MEMC
+    while (ioread32(&mcc_address[MCC_LOCK]));
+
+    // write invalidate paremeters on the memory cache this preloader
+    // use only the cluster 0 and then the HI bits are not used
+    
+    iowrite32(&mcc_address[MCC_ADDR_LO], (unsigned int) buffer);
+    iowrite32(&mcc_address[MCC_ADDR_HI], (unsigned int) 0);
+    iowrite32(&mcc_address[MCC_LENGTH] , (unsigned int) size);
+    iowrite32(&mcc_address[MCC_CMD]    , (unsigned int) MCC_CMD_INVAL);
+
+    // release the lock protecting MEMC
+    iowrite32(&mcc_address[MCC_LOCK], (unsigned int) 0);
+}
+#endif
+
+/********************************************************************
+ * reset_dcache_buf_invalidate()
+ *
+ * Invalidate all data cache lines corresponding to a memory buffer
+ * (identified by an address and a size) in L1 cache and L2 cache.
+ ********************************************************************/
+#if (CACHE_COHERENCE == 0) || USE_IOB
+void reset_buf_invalidate (const void * buffer, size_t line_size, size_t size)
+{
+    unsigned int i;
+
+    // iterate on cache lines
+    for (i = 0; i <= size; i += line_size) 
+    {
+        asm volatile(
+            " cache %0, %1"
+            :// no outputs
+            :"i" (0x11), "R" (*((unsigned char *) buffer + i))
+            );
+    }
+
+#if USE_IOB
+    reset_mcc_invalidate(buffer, size);
+#endif
+}
+#endif
+
+// vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
Index: /branches/fault_tolerance/softs/tsar_boot/src/sdcard.c
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/sdcard.c	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/sdcard.c	(revision 724)
@@ -0,0 +1,366 @@
+/**
+ * \file    : sdcard.c
+ * \date    : 30 August 2012
+ * \author  : Cesar Fuguet
+ *
+ * This file defines the driver of a SD Card device using an SPI controller
+ */
+
+#include <sdcard.h>
+#include <reset_tty.h>
+
+/**
+ * \param   sdcard: Initialized pointer to the block device
+ *
+ * \return  void
+ *
+ * \brief   Enable SD Card select signal
+ */
+static void _sdcard_enable(struct sdcard_dev * sdcard)
+{
+    spi_ss_assert(sdcard->spi, sdcard->slave_id);
+}
+
+/**
+ * \param   sdcard: Initialized pointer to the block device
+ *
+ * \return  void
+ *
+ * \brief   Disable SD Card select signal
+ */
+static void _sdcard_disable(struct sdcard_dev * sdcard)
+{
+    spi_ss_deassert(sdcard->spi, sdcard->slave_id);
+}
+
+/**
+ * \param   tick_count: SD Card clock ticks number
+ *
+ * \return  void
+ *
+ * \brief   Enable SD Card clock
+ *          The tick count is byte measured (1 tick, 8 clock)
+ */
+static void _sdcard_gen_tick(struct sdcard_dev * sdcard, unsigned int tick_count)
+{
+    register int i = 0;
+    while(i++ < tick_count) spi_put_tx(sdcard->spi, 0xFF, 0);
+}
+
+/**
+ * \param   sdcard: Initialized pointer to the block device
+ *
+ * \return  char from the SD card
+ *
+ * \brief   Get a byte from the SD Card
+ */
+static unsigned char _sdcard_receive_char(struct sdcard_dev * sdcard)
+{
+    _sdcard_gen_tick(sdcard, 1);
+
+    return spi_get_rx(sdcard->spi, 0);
+}
+
+/**
+ * \param   sdcard: Initialized pointer to the block device
+ *
+ * \return  sdcard response
+ *
+ * \brief   Wait for a valid response after the send of a command
+ *          This function can return if one of the next two conditions are true:
+ *           1. Bit valid received
+ *           2. Timeout (not valid bit received after SDCARD_COMMAND_TIMEOUT
+ *              wait ticks)
+ */
+static unsigned char _sdcard_wait_response(struct sdcard_dev * sdcard)
+{
+    unsigned char sdcard_rsp;
+    register int  iter;
+
+    iter       = 0;
+    sdcard_rsp = _sdcard_receive_char(sdcard);
+    while (
+            (iter < SDCARD_COMMAND_TIMEOUT) &&
+            !SDCARD_CHECK_R1_VALID(sdcard_rsp)
+          )
+    {
+        sdcard_rsp = _sdcard_receive_char(sdcard);
+        iter++;
+    }
+
+    return sdcard_rsp;
+}
+
+/**
+ * \params  sdcard: Initialized pointer to the block device
+ *
+ * \return  void
+ *
+ * \brief   Wait data block start marker
+ */
+static void _sdcard_wait_data_block(struct sdcard_dev * sdcard)
+{
+	while (_sdcard_receive_char(sdcard) != 0xFE);
+}
+
+/**
+ * \param   sdcard  : Initialized pointer to block device
+ * \param   index   : SD card CMD index
+ * \param   app     : Type of command, 0 for normal command or 1 for application 
+ *                    specific
+ * \param   args    : SD card CMD arguments
+ *
+ * \return  response first byte
+ *
+ * \brief   Send command to the SD card
+ */
+static int _sdcard_send_command    (
+        struct sdcard_dev * sdcard ,
+        int                 index  ,
+        int                 app    ,
+        void *              args   ,
+        unsigned            crc7   )
+{
+    unsigned char sdcard_rsp;
+    unsigned char * _args;
+
+    _sdcard_gen_tick(sdcard, 5);  
+
+    if (app == SDCARD_ACMD)
+    {
+        spi_put_tx(sdcard->spi, 0x40 | 55         , 0 );/* CMD and START bit */
+        spi_put_tx(sdcard->spi, 0x00              , 0 );/* Argument[0]       */
+        spi_put_tx(sdcard->spi, 0x00              , 0 );/* Argument[1]       */
+        spi_put_tx(sdcard->spi, 0x00              , 0 );/* Argument[2]       */
+        spi_put_tx(sdcard->spi, 0x00              , 0 );/* Argument[3]       */
+        spi_put_tx(sdcard->spi, 0x01 | (crc7 << 1), 0 );/* END bit           */
+
+        sdcard_rsp = _sdcard_wait_response(sdcard);
+        if (SDCARD_CHECK_R1_ERROR(sdcard_rsp))
+        {
+            return sdcard_rsp;        
+        }
+    }
+
+    _args = (unsigned char *) args;
+
+    _sdcard_gen_tick(sdcard, 1);  
+
+    spi_put_tx(sdcard->spi, 0x40 | index      , 0 );
+    spi_put_tx(sdcard->spi, _args[0]          , 0 );
+    spi_put_tx(sdcard->spi, _args[1]          , 0 );
+    spi_put_tx(sdcard->spi, _args[2]          , 0 );
+    spi_put_tx(sdcard->spi, _args[3]          , 0 );
+    spi_put_tx(sdcard->spi, 0x01 | (crc7 << 1), 0 );
+
+    return _sdcard_wait_response(sdcard);
+}
+
+int sdcard_dev_open(struct sdcard_dev * sdcard, struct spi_dev * spi, int ss)
+{
+	unsigned char args[4];
+	unsigned char sdcard_rsp;
+	unsigned int  iter, ersp;
+
+	sdcard->spi      = spi;
+	sdcard->slave_id = ss;
+
+	/* 
+	* Supply SD card ramp up time (min 74 cycles)
+	*/
+	_sdcard_gen_tick(sdcard, 10);
+
+	/* 
+	* Assert slave select signal
+	* Send CMD0 (Reset Command)
+	* Deassert slave select signal
+	*/
+	_sdcard_enable(sdcard);
+
+	args[0] = 0;
+	args[1] = 0;
+	args[2] = 0;
+	args[3] = 0;
+	sdcard_rsp = _sdcard_send_command(sdcard, 0, SDCARD_CMD, args, 0x4A);
+	if ( sdcard_rsp != 0x01 )
+	{
+		reset_puts("card CMD0 failed ");
+		return sdcard_rsp;
+	}
+
+	_sdcard_disable(sdcard);
+	/*
+	 * send CMD8. If card is pre-v2, It will reply with illegal command.
+	 * Otherwise we announce sdhc support.
+	 */
+	_sdcard_enable(sdcard);
+	args[0] = 0;
+	args[1] = 0;
+	args[2] = 0x01;
+	args[3] = 0x01;
+	sdcard_rsp = _sdcard_send_command(sdcard, 8, SDCARD_CMD, args, 0x63);
+	if (!SDCARD_CHECK_R1_VALID(sdcard_rsp)) {
+		reset_puts("card CMD8 failed ");
+		return sdcard_rsp;
+	}
+	if (!SDCARD_CHECK_R1_ERROR(sdcard_rsp)) {
+		/* no error, command accepted. get whole reply */
+		ersp = _sdcard_receive_char(sdcard);
+		ersp = (ersp << 8) | _sdcard_receive_char(sdcard);
+		ersp = (ersp << 8) | _sdcard_receive_char(sdcard);
+		ersp = (ersp << 8) | _sdcard_receive_char(sdcard);
+		if ((ersp & 0xffff) != 0x0101) {
+			/* voltage mismatch */
+			reset_puts("card CMD8 mismatch: ");
+			reset_putx(ersp);
+			return sdcard_rsp;
+		}
+		reset_puts("v2 or later ");
+		sdcard->sdhc = 1;
+	} else if ((sdcard_rsp & SDCARD_R1_ILLEGAL_CMD) == 0) {
+		/* other error */
+		reset_puts("card CMD8 error ");
+		return sdcard_rsp;
+	} else {
+		sdcard->sdhc = 0;
+	}
+	_sdcard_disable(sdcard);
+	/* send CMD41, enabling the card */
+	_sdcard_enable(sdcard);
+	args[0] = sdcard->sdhc ? 0x40: 0;
+	args[1] = 0;
+	args[2] = 0;
+	args[3] = 0;
+
+	iter = 0;
+	while( iter++ < SDCARD_COMMAND_TIMEOUT )
+	{
+		sdcard_rsp = _sdcard_send_command(sdcard, 41, SDCARD_ACMD, args, 0x00);
+		if( sdcard_rsp == 0x01 )
+		{
+			continue;
+		}
+
+		break;
+	}
+
+	_sdcard_disable(sdcard);
+	if (sdcard_rsp) {
+		reset_puts("SD ACMD41 failed ");
+		return sdcard_rsp;
+	}
+	if (sdcard->sdhc != 0) {
+		/* get the card capacity to see if it's really HC */
+		_sdcard_enable(sdcard);
+		args[0] = sdcard->sdhc ? 0x40: 0;
+		args[1] = 0;
+		args[2] = 0;
+		args[3] = 0;
+		sdcard_rsp = _sdcard_send_command(sdcard, 58, SDCARD_CMD,
+		    args, 0x00);
+		if (sdcard_rsp) {
+			reset_puts("SD CMD58 failed ");
+			return sdcard_rsp;
+		}
+		ersp = _sdcard_receive_char(sdcard);
+		ersp = (ersp << 8) | _sdcard_receive_char(sdcard);
+		ersp = (ersp << 8) | _sdcard_receive_char(sdcard);
+		ersp = (ersp << 8) | _sdcard_receive_char(sdcard);
+		if (ersp & 0x40000000) {
+			reset_puts("SDHC ");
+		} else {
+			sdcard->sdhc = 0;
+		}
+		_sdcard_disable(sdcard);
+	}
+	reset_puts("card detected ");
+	return 0;
+}
+
+int sdcard_dev_read(struct sdcard_dev * sdcard, void * buf, unsigned int count)
+{
+    unsigned char args[4];
+    unsigned char sdcard_rsp;
+    register int  i;
+
+    for (i = 0; i < 4; i++)
+    {
+        args[i] = (sdcard->access_pointer >> (32 - (i+1)*8)) & 0xFF;
+    }
+
+    _sdcard_enable(sdcard);
+
+    sdcard_rsp = _sdcard_send_command(sdcard, 17, SDCARD_CMD, args, 0x00);
+    if ( SDCARD_CHECK_R1_ERROR(sdcard_rsp) )
+    {
+        _sdcard_disable(sdcard);
+        return sdcard_rsp;
+    }
+
+    _sdcard_wait_data_block(sdcard);
+
+    spi_get_data(sdcard->spi, buf, count);
+
+    /*
+     * Get the remainder of the block bytes and the CRC16 (comes
+     * at the end of the data block)
+     */
+    i = count;
+    while( i++ < (512 + 2) ) _sdcard_receive_char(sdcard);
+
+    _sdcard_disable(sdcard);
+
+    /*
+     * Move the access pointer to the next block
+     */
+    sdcard->access_pointer += sdcard->block_length;
+
+    return 0;
+}
+
+unsigned int sdcard_dev_write(struct sdcard_dev *sdcard, void * buf, unsigned int count)
+{
+	return 0;
+}
+
+void sdcard_dev_lseek(struct sdcard_dev * sdcard, unsigned int blk_pos)
+{
+    sdcard->access_pointer = sdcard->block_length * blk_pos;
+}
+
+int sdcard_dev_set_blocklen(struct sdcard_dev * sdcard, unsigned int len)
+{
+    unsigned char args[4];
+    unsigned char sdcard_rsp;
+    register int i;
+
+    if (len != 512)
+	return 1;
+
+    if (sdcard->sdhc) {
+	sdcard->block_length = 1;
+	return 0;
+    }
+
+    for (i = 0; i < 4; i++)
+        args[i] = (len >> (32 - (i+1)*8)) & 0xFF;
+
+    _sdcard_enable(sdcard);
+
+    sdcard_rsp = _sdcard_send_command(sdcard, 16, SDCARD_CMD, args, 0x00);
+    if ( SDCARD_CHECK_R1_ERROR(sdcard_rsp) )
+    {
+        _sdcard_disable(sdcard);
+        return sdcard_rsp;
+    }
+
+    _sdcard_disable(sdcard);
+
+    sdcard->block_length = len;
+
+	return 0;
+}
+
+/*
+ * vim: tabstop=4 : shiftwidth=4 : expandtab : softtabstop=4
+ */
Index: /branches/fault_tolerance/softs/tsar_boot/src/spi.c
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/src/spi.c	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/src/spi.c	(revision 724)
@@ -0,0 +1,192 @@
+/**
+ * \file    spi.c
+ * \date    31 August 2012
+ * \author  Cesar Fuguet <cesar.fuguet-tortolero@lip6.fr>
+ */
+#include <spi.h>
+#include <reset_ioc.h>
+#include <reset_utils.h>
+
+/**
+ * \param   x: input value
+ *
+ * \return  byte-swapped value
+ *
+ * \brief   byte-swap a 32bit word
+ */
+static unsigned int bswap32(unsigned int x)
+{
+  unsigned int y;
+  y =  (x & 0x000000ff) << 24;
+  y |= (x & 0x0000ff00) <<  8;
+  y |= (x & 0x00ff0000) >>  8;
+  y |= (x & 0xff000000) >> 24;
+  return y;
+}
+
+/**
+ * \param   spi :   Initialized pointer to the SPI controller
+ *
+ * \brief   Wait until the SPI controller has finished a transfer
+ *
+ * Wait until the GO_BUSY bit of the SPI controller be deasserted
+ */
+static void _spi_wait_if_busy(struct spi_dev * spi)
+{
+    register int delay;
+
+    while(SPI_IS_BUSY(spi))
+    {
+        for (delay = 0; delay < 100; delay++);
+    }
+}
+
+/**
+ * \param   spi : Initialized pointer to the SPI controller
+ *
+ * \return  void
+ *
+ * \brief   Init transfer of the tx registers to the selected slaves
+ */
+static void _spi_init_transfer(struct spi_dev * spi)
+{
+    unsigned int spi_ctrl = ioread32(&spi->ctrl);
+
+    iowrite32(&spi->ctrl, spi_ctrl | SPI_CTRL_GO_BSY);
+}
+
+/**
+ * \param   spi_freq    : Desired frequency for the generated clock from the SPI
+ *                        controller
+ * \param   sys_freq    : System clock frequency
+ *
+ * \brief   Calculated the value for the divider register in order to obtain the SPI
+ *          desired clock frequency 
+ */
+static unsigned int _spi_calc_divider_value  (
+    unsigned int spi_freq   ,
+    unsigned int sys_freq   )
+{
+    return ((sys_freq / (spi_freq * 2)) - 1);
+}
+
+void spi_put_tx(struct spi_dev * spi, unsigned char byte, int index)
+{
+    _spi_wait_if_busy(spi);
+    {
+        iowrite8(&spi->rx_tx[index % 4], byte);
+        _spi_init_transfer(spi);
+    }
+    _spi_wait_if_busy(spi);
+}
+
+volatile unsigned char spi_get_rx(struct spi_dev * spi, int index)
+{
+    return ioread8(&spi->rx_tx[index % 4]);
+}
+
+void spi_get_data(struct spi_dev * spi, void *buf, unsigned int count)
+{
+    unsigned int *data = buf;
+    unsigned char *data8;
+    unsigned int spi_ctrl0, spi_ctrl;
+    int i;
+
+    _spi_wait_if_busy(spi);
+
+    spi_ctrl0 = ioread32(&spi->ctrl);
+#ifdef IOC_USE_DMA
+    if (count == 512 && ((int)buf & 0x3f) == 0) {
+	/* use DMA */
+	spi->dma_base = (int)buf;
+	spi->dma_baseh = 0;
+	spi->dma_count = count | SPI_DMA_COUNT_READ;
+        _spi_wait_if_busy(spi);
+	i = count / 4;
+    } else
+#endif /* IOC_USE_DMA */
+    {
+        /* switch to 128 bits words */
+        spi_ctrl = (spi_ctrl0 & ~SPI_CTRL_CHAR_LEN_MASK) | 128;
+        iowrite32(&spi->ctrl, spi_ctrl);
+
+        /* read data */
+        for (i = 0; i + 3 < count / 4; i += 4) {
+            iowrite32(&spi->rx_tx[0], 0xffffffff);
+            iowrite32(&spi->rx_tx[1], 0xffffffff);
+            iowrite32(&spi->rx_tx[2], 0xffffffff);
+            iowrite32(&spi->rx_tx[3], 0xffffffff);
+            iowrite32(&spi->ctrl,  spi_ctrl | SPI_CTRL_GO_BSY);
+
+            _spi_wait_if_busy(spi);
+        
+            *data = bswap32(ioread32(&spi->rx_tx[3]));
+            data++;
+            *data = bswap32(ioread32(&spi->rx_tx[2]));
+            data++;
+            *data = bswap32(ioread32(&spi->rx_tx[1]));
+            data++;
+            *data = bswap32(ioread32(&spi->rx_tx[0]));
+            data++;
+        }
+    }
+
+    /* switch back to original word size */
+    iowrite32(&spi->ctrl, spi_ctrl0);
+
+    /* read missing bits */
+    data8 = (void *)data;
+    i = i * 4;
+    for (; i < count; i++)
+    {
+        iowrite32(&spi->rx_tx[0], 0xffffffff);
+        iowrite32(&spi->ctrl,  spi_ctrl0 | SPI_CTRL_GO_BSY);
+    
+        _spi_wait_if_busy(spi);
+    
+        *data8 = spi_get_rx(spi, 0);
+        data8++;
+    }
+    return;
+}
+
+void spi_ss_assert(struct spi_dev * spi, int index)
+{
+    unsigned int spi_ss = ioread32(&spi->ss);
+
+    iowrite32(&spi->ss, spi_ss | (1 << index));
+}
+
+void spi_ss_deassert(struct spi_dev * spi, int index)
+{
+    unsigned int spi_ss = ioread32(&spi->ss);
+
+    iowrite32(&spi->ss, spi_ss & ~(1 << index));
+}
+
+void spi_dev_config (
+    struct spi_dev * spi,
+    int spi_freq        ,
+    int sys_freq        ,
+    int char_len        ,
+    int tx_edge         ,
+    int rx_edge         )
+{
+    unsigned int spi_ctrl = ioread32(&spi->ctrl);
+
+    if      ( tx_edge == 0 ) spi_ctrl |=  SPI_CTRL_TXN_EN;
+    else if ( tx_edge == 1 ) spi_ctrl &= ~SPI_CTRL_TXN_EN;
+    if      ( rx_edge == 0 ) spi_ctrl |=  SPI_CTRL_RXN_EN;
+    else if ( rx_edge == 1 ) spi_ctrl &= ~SPI_CTRL_RXN_EN;
+    if      ( char_len > 0 ) spi_ctrl  = (spi_ctrl & ~SPI_CTRL_CHAR_LEN_MASK) |
+                                         (char_len &  SPI_CTRL_CHAR_LEN_MASK);
+
+    iowrite32(&spi->ctrl, spi_ctrl);
+
+    if (spi_freq > 0 && sys_freq > 0)
+        iowrite32(&spi->divider, _spi_calc_divider_value(spi_freq, sys_freq));
+}
+
+/*
+ * vim: tabstop=4 : shiftwidth=4 : expandtab : softtabstop=4
+ */
Index: /branches/fault_tolerance/softs/tsar_boot/version.sh
===================================================================
--- /branches/fault_tolerance/softs/tsar_boot/version.sh	(revision 724)
+++ /branches/fault_tolerance/softs/tsar_boot/version.sh	(revision 724)
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+n="tsarboot"
+v=$(cat VERSION)
+t=$(date)
+u=${USER-root}
+h=$(hostname)
+
+reporev=$(svn info 2>/dev/null)
+if [ $? -eq 0 ];
+then
+    repotype="svn"
+    reporev=$(echo "$reporev" | awk -F: '$1 == "Last Changed Rev" {print $2}')
+else
+    repotype="git"
+    reporev=$(git rev-parse HEAD)
+fi
+
+printf "%s" \
+   "const char versionstr[]=\"$n $v ($u@$h $t) ($repotype revision $reporev)\n\r\";"
