lucene-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mikemcc...@apache.org
Subject svn commit: r778490 [1/2] - in /lucene/java/trunk: ./ docs/ src/java/org/apache/lucene/index/ src/java/org/apache/lucene/store/ src/java/org/apache/lucene/util/ src/site/src/documentation/content/xdocs/ src/test/org/apache/lucene/index/
Date Mon, 25 May 2009 20:07:25 GMT
Author: mikemccand
Date: Mon May 25 20:07:24 2009
New Revision: 778490

URL: http://svn.apache.org/viewvc?rev=778490&view=rev
Log:
LUCENE-1654: IndexWriter now records basic diagnostics into each segment it writes; commit metadata upgraded from String to Map<String,String>

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/common-build.xml
    lucene/java/trunk/docs/fileformats.html
    lucene/java/trunk/docs/fileformats.pdf
    lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java
    lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java
    lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java
    lucene/java/trunk/src/java/org/apache/lucene/index/IndexCommit.java
    lucene/java/trunk/src/java/org/apache/lucene/index/IndexFileDeleter.java
    lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java
    lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/java/trunk/src/java/org/apache/lucene/index/MultiReader.java
    lucene/java/trunk/src/java/org/apache/lucene/index/ParallelReader.java
    lucene/java/trunk/src/java/org/apache/lucene/index/SegmentInfo.java
    lucene/java/trunk/src/java/org/apache/lucene/index/SegmentInfos.java
    lucene/java/trunk/src/java/org/apache/lucene/index/SnapshotDeletionPolicy.java
    lucene/java/trunk/src/java/org/apache/lucene/store/IndexInput.java
    lucene/java/trunk/src/java/org/apache/lucene/store/IndexOutput.java
    lucene/java/trunk/src/java/org/apache/lucene/util/Constants.java
    lucene/java/trunk/src/site/src/documentation/content/xdocs/fileformats.xml
    lucene/java/trunk/src/test/org/apache/lucene/index/TestCheckIndex.java
    lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReader.java
    lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
    lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java
    lucene/java/trunk/src/test/org/apache/lucene/index/TestTransactionRollback.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Mon May 25 20:07:24 2009
@@ -107,10 +107,10 @@
    that's visited.  All core collectors now use this API.  (Mark
    Miller, Mike McCandless)
 
-8. LUCENE-1546: Add IndexReader.flush(String commitUserData), allowing
-   you to record an opaque commitUserData into the commit written by
-   IndexReader.  This matches IndexWriter's commit methods.  (Jason
-   Rutherglen via Mike McCandless)
+8. LUCENE-1546: Add IndexReader.flush(Map commitUserData), allowing
+   you to record an opaque commitUserData (maps String -> String) into
+   the commit written by IndexReader.  This matches IndexWriter's
+   commit methods.  (Jason Rutherglen via Mike McCandless)
 
 9. LUCENE-652: Added org.apache.lucene.document.CompressionTools, to
    enable compressing & decompressing binary content, external to
@@ -192,10 +192,11 @@
     when building transactional support on top of Lucene.  (Mike
     McCandless)
 
- 2. LUCENE-1382: Add an optional arbitrary String "commitUserData" to
-    IndexWriter.commit(), which is stored in the segments file and is
-    then retrievable via IndexReader.getCommitUserData instance and
-    static methods.  (Shalin Shekhar Mangar via Mike McCandless)
+ 2. LUCENE-1382: Add an optional arbitrary Map (String -> String)
+    "commitUserData" to IndexWriter.commit(), which is stored in the
+    segments file and is then retrievable via
+    IndexReader.getCommitUserData instance and static methods.
+    (Shalin Shekhar Mangar via Mike McCandless)
 
  3. LUCENE-1406: Added Arabic analyzer.  (Robert Muir via Grant Ingersoll)
 

Modified: lucene/java/trunk/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/java/trunk/common-build.xml?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/common-build.xml (original)
+++ lucene/java/trunk/common-build.xml Mon May 25 20:07:24 2009
@@ -41,7 +41,7 @@
   <property name="name" value="${ant.project.name}"/>
   <property name="Name" value="Lucene"/>
   <property name="version" value="2.9-dev"/>
-  <property name="compatibility.tag" value="lucene_2_4_back_compat_tests_20090509"/>
+  <property name="compatibility.tag" value="lucene_2_4_back_compat_tests_20090525"/>
   <property name="spec.version" value="${version}"/>	
   <property name="year" value="2000-${current.year}"/>
   <property name="final.name" value="lucene-${name}-${version}"/>
@@ -395,6 +395,7 @@
 	      <sysproperty key="dataDir" file="@{dataDir}"/>
 	      <sysproperty key="tempDir" file="@{tempDir}"/>
 	      <sysproperty key="java.io.tmpdir" file="@{tempDir}"/>
+	      <sysproperty key="lucene.version" value="${version}"/>
 	
 		  <contrib-settings />
 	    	

Modified: lucene/java/trunk/docs/fileformats.html
URL: http://svn.apache.org/viewvc/lucene/java/trunk/docs/fileformats.html?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/docs/fileformats.html (original)
+++ lucene/java/trunk/docs/fileformats.html Mon May 25 20:07:24 2009
@@ -290,6 +290,14 @@
 </ul>
 </li>
 <li>
+<a href="#Compound Types">Compound Types</a>
+<ul class="minitoc">
+<li>
+<a href="#String">Map&lt;String,String&gt;</a>
+</li>
+</ul>
+</li>
+<li>
 <a href="#Per-Index Files">Per-Index Files</a>
 <ul class="minitoc">
 <li>
@@ -1263,13 +1271,29 @@
 </div>
 
         
-<a name="N1043C"></a><a name="Per-Index Files"></a>
+<a name="N1043C"></a><a name="Compound Types"></a>
+<h2 class="boxed">Compound Types</h2>
+<div class="section">
+<a name="N10441"></a><a name="String"></a>
+<h3 class="boxed">Map&lt;String,String&gt;</h3>
+<p>
+		    In a couple places Lucene stores a Map
+                    String-&gt;String.
+                </p>
+<p>
+  		    Map&lt;String,String&gt; --&gt; Count&lt;String,String&gt;<sup>Count</sup>
+                
+</p>
+</div>
+
+        
+<a name="N10451"></a><a name="Per-Index Files"></a>
 <h2 class="boxed">Per-Index Files</h2>
 <div class="section">
 <p>
                 The files in this section exist one-per-index.
             </p>
-<a name="N10444"></a><a name="Segments File"></a>
+<a name="N10459"></a><a name="Segments File"></a>
 <h3 class="boxed">Segments File</h3>
 <p>
                     The active segments in the index are stored in the
@@ -1343,7 +1367,7 @@
 <b>2.9 and above:</b>
                     Segments --&gt; Format, Version, NameCounter, SegCount, &lt;SegName, SegSize, DelGen, DocStoreOffset, [DocStoreSegment, DocStoreIsCompoundFile], HasSingleNormFile, NumField,
                     NormGen<sup>NumField</sup>,
-                    IsCompoundFile, DeletionCount, HasProx&gt;<sup>SegCount</sup>, HasUserData, CommitUserData?, Checksum
+                    IsCompoundFile, DeletionCount, HasProx, Diagnostics&gt;<sup>SegCount</sup>, CommitUserData, Checksum
                 </p>
 <p>
                     Format, NameCounter, SegCount, SegSize, NumField,
@@ -1353,14 +1377,20 @@
                     Version, DelGen, NormGen, Checksum --&gt; Int64
                 </p>
 <p>
-                    SegName, DocStoreSegment, CommitUserData --&gt; String
+                   SegName, DocStoreSegment --&gt; String
                 </p>
 <p>
+		   Diagnostics --&gt; Map&lt;String,String&gt;
+		</p>
+<p>
                     IsCompoundFile, HasSingleNormFile,
-                    DocStoreIsCompoundFile, HasProx, HasUserData --&gt; Int8
+                    DocStoreIsCompoundFile, HasProx --&gt; Int8
+                </p>
+<p>
+		    CommitUserData --&gt; Map&lt;String,String&gt;
                 </p>
 <p>
-                    Format is -1 as of Lucene 1.4, -3 (SegmentInfos.FORMAT_SINGLE_NORM_FILE) as of Lucene 2.1 and 2.2, -4 (SegmentInfos.FORMAT_SHARED_DOC_STORE) as of Lucene 2.3, -7 (SegmentInfos.FORMAT_HAS_PROX) as of Lucene 2.4, and -8 (SegmentInfos.FORMAT_USER_DATA) as of Lucene 2.9.
+                    Format is -1 as of Lucene 1.4, -3 (SegmentInfos.FORMAT_SINGLE_NORM_FILE) as of Lucene 2.1 and 2.2, -4 (SegmentInfos.FORMAT_SHARED_DOC_STORE) as of Lucene 2.3, -7 (SegmentInfos.FORMAT_HAS_PROX) as of Lucene 2.4, and -9 (SegmentInfos.FORMAT_DIAGNOSTICS) as of Lucene 2.9.
                 </p>
 <p>
                     Version counts how often the index has been
@@ -1448,12 +1478,19 @@
 		    omitTf set to false; else, it's 0.
 		</p>
 <p>
-		    If HasUserData is 1, then the string
-		    CommitUserData is non-null and is stored.  This is
-		    a string previously passed to IndexWriter's commit
-		    or prepareCommit method.
+		    CommitUserData stores an optional user-supplied
+		    opaque Map&lt;String,String&gt; that was passed to
+		    IndexWriter's commit or prepareCommit, or
+		    IndexReader's flush methods.
+                </p>
+<p>
+		    The Diagnostics Map is privately written by
+		    IndexWriter, as a debugging aid, for each segment
+		    it creates.  It includes metadata like the current
+		    Lucene version, OS, Java version, why the segment
+		    was created (merge, flush, addIndexes), etc.
                 </p>
-<a name="N104ED"></a><a name="Lock File"></a>
+<a name="N1050B"></a><a name="Lock File"></a>
 <h3 class="boxed">Lock File</h3>
 <p>
                     The write lock, which is stored in the index
@@ -1471,7 +1508,7 @@
                     Note that prior to version 2.1, Lucene also used a
                     commit lock. This was removed in 2.1.
                 </p>
-<a name="N104F9"></a><a name="Deletable File"></a>
+<a name="N10517"></a><a name="Deletable File"></a>
 <h3 class="boxed">Deletable File</h3>
 <p>
                     Prior to Lucene 2.1 there was a file "deletable"
@@ -1480,7 +1517,7 @@
                     the files that are deletable, instead, so no file
                     is written.
                 </p>
-<a name="N10502"></a><a name="Compound Files"></a>
+<a name="N10520"></a><a name="Compound Files"></a>
 <h3 class="boxed">Compound Files</h3>
 <p>Starting with Lucene 1.4 the compound file format became default. This
                     is simply a container for all files described in the next section
@@ -1507,14 +1544,14 @@
 </div>
 
         
-<a name="N1052A"></a><a name="Per-Segment Files"></a>
+<a name="N10548"></a><a name="Per-Segment Files"></a>
 <h2 class="boxed">Per-Segment Files</h2>
 <div class="section">
 <p>
                 The remaining files are all per-segment, and are
                 thus defined by suffix.
             </p>
-<a name="N10532"></a><a name="Fields"></a>
+<a name="N10550"></a><a name="Fields"></a>
 <h3 class="boxed">Fields</h3>
 <p>
                     
@@ -1736,7 +1773,7 @@
 </li>
                 
 </ol>
-<a name="N105F0"></a><a name="Term Dictionary"></a>
+<a name="N1060E"></a><a name="Term Dictionary"></a>
 <h3 class="boxed">Term Dictionary</h3>
 <p>
                     The term dictionary is represented as two files:
@@ -1926,7 +1963,7 @@
 </li>
                 
 </ol>
-<a name="N10670"></a><a name="Frequencies"></a>
+<a name="N1068E"></a><a name="Frequencies"></a>
 <h3 class="boxed">Frequencies</h3>
 <p>
                     The .frq file contains the lists of documents
@@ -2054,7 +2091,7 @@
                    entry in level-1. In the example has entry 15 on level 1 a pointer to entry 15 on level 0 and entry 31 on level 1 a pointer
                    to entry 31 on level 0.                   
                 </p>
-<a name="N106F8"></a><a name="Positions"></a>
+<a name="N10716"></a><a name="Positions"></a>
 <h3 class="boxed">Positions</h3>
 <p>
                     The .prx file contains the lists of positions that
@@ -2124,7 +2161,7 @@
                     Payload. If PayloadLength is not stored, then this Payload has the same
                     length as the Payload at the previous position.
                 </p>
-<a name="N10734"></a><a name="Normalization Factors"></a>
+<a name="N10752"></a><a name="Normalization Factors"></a>
 <h3 class="boxed">Normalization Factors</h3>
 <p>
                     
@@ -2228,7 +2265,7 @@
 <b>2.1 and above:</b>
                     Separate norm files are created (when adequate) for both compound and non compound segments.
                 </p>
-<a name="N1079D"></a><a name="Term Vectors"></a>
+<a name="N107BB"></a><a name="Term Vectors"></a>
 <h3 class="boxed">Term Vectors</h3>
 <p>
 		  Term Vector support is an optional on a field by
@@ -2361,7 +2398,7 @@
 </li>
                 
 </ol>
-<a name="N10833"></a><a name="Deleted Documents"></a>
+<a name="N10851"></a><a name="Deleted Documents"></a>
 <h3 class="boxed">Deleted Documents</h3>
 <p>The .del file is
                     optional, and only exists when a segment contains deletions.
@@ -2433,7 +2470,7 @@
 </div>
 
         
-<a name="N10876"></a><a name="Limitations"></a>
+<a name="N10894"></a><a name="Limitations"></a>
 <h2 class="boxed">Limitations</h2>
 <div class="section">
 <p>

Modified: lucene/java/trunk/docs/fileformats.pdf
URL: http://svn.apache.org/viewvc/lucene/java/trunk/docs/fileformats.pdf?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/docs/fileformats.pdf (original)
+++ lucene/java/trunk/docs/fileformats.pdf Mon May 25 20:07:24 2009
@@ -8,7 +8,7 @@
 << /Length 1117 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!$G9lo#B&;KZO$6@53W]k9ICdOP`P=a5[dnAEt!C8gORi4Z:^TSn%I4u(M/f6Qu5V)`b?+hcW?/#04U4=qR5W\?WoeGhWYioMGj;W_>r>%*jBf#hS$N07??;IG:iWe2$GTd%P5A[5AGK.,clStMnIs*foQHm-?;6D7rjp(_fkuW9P8UVE3V0PI;7%6iam]H;hfIlOSITofT^+bJa!4,V)0b+f8okNaP[D!`crot;@qgDZ/Q,oMcirC<R4cG2#OC1TsY8>.FFE03DgO%D/GNrrb][MfLhU*Qmad9XH*(>sh([0>P%hOHi!(FagE2O5c4Nk&\/+QG3O1@heA$Z`U8iek<0JVAPD"J$fgc$)54&K$fAj``m5pu3!*MF\&CN:;4(+,C4&R4h40sA])K64jDS(%7PP_nM'RnQXB(a.Jf#AaCNo`5O!^bp?PMcD>_SL2%%VC(D/5Z;4dMa/&4Fq'2FFK;?W]H=V`=&E;V$hEk.b<RR)-HV3QSIMp6pSNG(H[M0:pWg0@;bQq#W-OJn-Ice\ff3boDn9;t*[e!`7-t8OYQQk0*eiigDY8mBl.tT"A[[a:D<JF%;7qoOTJeeg$%F"&D0!d/.oa/M?1SKmp6E.>F?b:[F__"Q'.[+r79T3j?H.7ZaVCIAlmVZp\E0+m>O$/No*es2]Sb?a:h.oZ>h"X8me"G<LMN;jn7/Qb=Qe0Cq+'F=A/VW*#1'<=k4T5Oh^4\mf57bP0Xa)q3iWsLZ!E"FWpIBS)/OoaG2.t5aCD-qW3b"-hOFKib1dS*W?&uc9=cS5K5f?%q9s"We=r7S#54;L5GWKimg$Q13lY4'U));'1O(=FJ$&k-^b]6%'@=cJ8<;k`1q*&8Wob0-`DTZaH`0"BW17M_l+@J;4H=I**j0=N_0rRl(Ya>gq4?1Qh&P;RgklK_F/[Kh3%/q+F<u(SG4-FKVuqfp39!gLNG?EaABm!pYj6=gm3nL@rf[!SlCPA#iF4e
 lk()\%+\4R@"do%up[2!6RhuAR3$;s#gK$5p*$u7&Ehi7$OR)4\R4[8FgI_B534:&`:h3(qg\3o"K0L1Dl?uQV*H&EI-E=T_*OFkU%eR.fc<+mN\J$c4dJj;O1Tm&~>
+Gb!$G9lo#B&;KZO$6@53W]k9ICdOP`P=a5[dnAEt!C8gORi4Z:^TSn%I4u(M/f6Qu5V)`b?+hcW?/#04U4=qR5W\?WoeGhWYioMGj;W_>r>%*jBf#hS$N07??;IG:iWe2$GTd%P5A[5AGK.,clStMnIs*foQHm-?;6D7rjp(_fkuW9P8UVE3V0PI;7%6iam]H;hfIlOSITofT^+bJa!4,V)0b+f8okNaP[D!`crot;@qgDZ/Q,oMcirC<R4cG2#OC1TsY8>.FFE03DgO%D/GNrrb][MfLhU*Qmad9XH*(>sh([0>P%hOHi!(FagE2O5c4Nk&\/+QG3O1@heA$Z`U8iek<0JVAPD"J$fgc$)54&K$fAj``m5pu3!*MF\&CN:;4(+,C4&R4h40sA])K64jDS(%7PP_nM'RnQXB(a.Jf#AaCNo`5O!^bp?PMcD>_SL2%%VC(D/5Z;4dMa/&4Fq'2FFK;?W]H=V`=&E;V$hEk.b<RR)-HV3QSIMp6pSNG(H[M0:pWg0@;bQq#W-OJn-Ice\ff3boDn9;t*[e!`7-t8OYQQk0*eiigDY8mBl.tT"A[[a:D<JF%;7qoOTJeeg$%F"&D0!d/.oa/M?1SKmp6E.>F?b:[F__"Q'.[+r79T3j?H.7ZaVCIAlmVZp\E0+m>O$/No*es2]Sb?a:h.oZ>h"X8me"G<LMN;jn7/Qb=Qe0Cq+'F=A/VW*#1'<=k4T5Oh^4\mf57bP0Xa)q3iWsLZ!E"FWpIBS)/OoaG2.t5aCD-qW3b"-hOFKib1dS*W?&uc9=cS5K5f?%q9s"We=r7S#54;L5GWKimg$Q13lY4'U));'1O(=FJ$&k-^b]6%'@=cJ8<;k`1q*&8Wob0-`DTZaH`0"BW17M_l+@J;4H=I**j0=N_0rRl(Ya>gq4?1Qh&P<+%S@b-k>7pZEDYr5kt:60mG9ku;$S^=Xs5PVdAU+$6KUC_%_F@6fT*fdln<)AYO5!J(+tn
 /@Lecc&;#Rf;Lj&]Hga`&ZAEQ4Jchb@ZYa8`c=%?*+?)?B&%TF2QeCB#ZCU&`KO[(f#Xrp$\pa&-5591RYMLY'fAW%MBVLrbcnS`Wm6G$*j,CrHPWLUP(B$I&.^#-~>
 endstream
 endobj
 6 0 obj
@@ -267,10 +267,10 @@
 >>
 endobj
 52 0 obj
-<< /Length 626 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 627 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gaua<9i'Ou&;KZL'm%S?E,EX&3L2uW.TB8&i^,Xn=mltP+-=aUV8'aLZc"ajj;+97N:P]oN5ma;H1WQG5VU':mii2;L]AJ\1A]Ma'V$:s)<;7^`=gQ-gdD'`'%'9-$YY-:.*-PgCuC7mZ[[@"Psa*07K:"$lThL&'*M'-@MZm-^qd---LN-Fb],#RgqFosp!ZdIAYfp<UO'uocbt4!QuGG60j?!u"ZP8217.lX]I.<[0FQ,pBX%if;i.`2k)7T;i*4el7:#jD%(WG1X=/k,?S)rO_*jF]VWBS?<(K#_Ymg"-_DcnD=(V?&S;N_>/X$S/G;Hd'mL(XhXTuQ4)Hp2`)r2")inGB<0@1EJ$Z2OrUTQDPpQ2L@q#.d=WhK4_LMa4un2I9p.)^K?2F:?]6';?_RSFip+,f\US((#d;CO$4f>gduU$F86Y1g#W'6pg_%L&87!9X,p0UI(WA4L<J1.C\7?lYOc'oXPr?GeDl*hAdg94!Cua)D]W5g#1OVl4NkI<Zh+YihF6'U=XSPFHWX$4_rQ#p@\t?b4;@^=kd[G!GR6ih)GKB2OVAZgq&#XPkJOg-<1)n@RmI:Y$Q@XXt4Iam.Rtp?[EEl\"VTkq-qdqZhD"^iK~>
+Gaua<9lJN8&;KZL'g?4?*W0d;81BZd'e1Ee!Z[r9G8htQD)Mcd?Vg#>Z!F0fQ9(o]jgF7hO(YVRj@q6<_15C&82*(O"QASiP>=tL.0rJg;:2+VW<0Xu5>^li(=?9l#Ufce$OS\s4*3oFh*8TPX0M*)Ed6:]kCCgC%0C1Xlp<.0+U3CM0lo,TgiKfEmSJuUk4*9!W]$d";$1?_(LjXE9E\0fbh%\=_-MPjmH)&'mtI/bm\'@Y/Q\W7V>tsVYmMKX54q9I2YE]jP5@;dbA-C!bq_!o9Jfmi>-1.B%GF1mFm)X5^Zhq6;qCujWEdO;3k<1;2cK&'U#<pIAi0CXU%QsH2;Pbk^8l8H&";JoTe2Mee9<8<'!ftV^YdUZ4dN;OYh`;PYu$VfK-CaeUu2nCeH.2:JC&,pGl(<<pVs(*.EIaL.(qcFVMe_]OnGF&S)9>UYFAXUgBM&hhZ`Vc806Rmc"s6_SdJ.6mRdWb'kf;bOF0g+mE?m&_\Q1\9J_oQd-;8:?$VCTUB1'DZU%O/76%i3J4p<Gq31k7DtU8_GT,l-rTNs]D^#'S"n<AI=F.$X,g.&knsoZT5E*A"+n4Rk\_F_OJO%dChJd,"!o'6hnC-a?kO(!TmD*i~>
 endstream
 endobj
 53 0 obj
@@ -454,10 +454,10 @@
 >>
 endobj
 81 0 obj
-<< /Length 1848 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1905 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gat=->ArL\'Ro4H7.W19<'3anKkR;c0r;7Y]!P\/eO[jjRG^>R+mI!T./ii)h!d&'+]MIBfWfk=o:9[PDj/c.V"J*<d$F%m^?+TMf,Vh>Ik<a/DVM%D9J%FA]_+e\gVq@N$uF0BfpbR[ddpa*q_>HeVemVJ\$X7Hqs3MJdr?3Vf45RCRmFP22qM6fbYPnjD:o>#0AmOKF\a4'Rj#J)2m;a0=ra*]-Ynm"EHKC\V/6-LD=ZEnTT4dY!9cG"hnG,mZJ&0H`*Rki,jF>'K39OE';j<<?f@Ihnc,H?NDue&7:mie^pLsTdKjb^/tF7q<W\+PNPkKHV"J5ISAkk\$3Egt'fCBMh>SmXXP6:L+:k6SA'.j*h%&^NX8X@NA`nsqRJlCdQ-puZ3Z'nM*D7m8!Ii"Da[hZ#^trm`5b_pXL"LC60L(iF[1)Ie8iJlokS:I'Rkpt,qr1brfd?2G7UK6.89_Ue$]!dJLD1"KpbN-GEPS1g[m#WS+#AKKp3)3U:TmB;%&4rBB^kZbHZ(YY%nHATGI%l#bm))+]BQ_,AmH.p""ng,`C(8e["*'g#gtaAntGeuf:V`.DJ/"Oe&t=Ea2CM6GBN>e-L*iEmPu[+^%(Ibjlsf3&@gH@2?G+?WM`jYbPb_,kPP&BA_-<EH637M+fS_iiGMn4(;@u<EYsnBMK_m%9#0/&"iQ,BK"QY_&E]LuD>jl49*4mVmt#Y?7@kS2+qssgaR^s1]86E&`Yt+XC4]+eC4SJi[hN:DA,a,O]I#TAb!t_OYVgqZ,6A^WKiPreQB;kpFV&G%hN]<#G`RMhcln'R[$Iiu(KD-"<J!#$<%qVl&qk01K(+*B!,t\tN2M[@,!9/Ir9@p/T9@Y;Hj0r>:+N_A`rXFYfcDuT`ca.n%L1HF3%G+OV)XDVhk;O8C9DX[]EKcbd4-ug?FkDF*Ahf?="K(s*iq\i0S:RrIgAP1:h#^&&L8\g!eu=UQ@Y/pdfDJ&`2Gp9.Oqo
 Vdf_\p-Wi44KmHlXV%AR^Gfp>]/VO\+olN\YZDT,P9qDo2JrRiUaHf<p;7_j.A/[QDc$gd)';29?m?uNZ$fcO1'--jD&n$Y-_%CNr_ZijmAU%g^%+4]NmeSuc%TO2"_"jr@hb$,R8V6[DZKj)%Hjfhb0PEo]FR&F=J=gGemR#'Jl%88%mc5<#ilB1#Ou.,Dgdb&l;:MWJm'M$j$@N3a%VTo-"aPt2ACC/Y@7'M$P^Qo<\qW5tV=Va`9%cO&Rg$#0QJu0_VF!(^82:f-ljh?eJta@9#.jANFf7nSBP\hT$I(o'>Cc`IcFI[>!*[q,(C<5FO/G&hoJ'M>&lTf1DK/WXVZg0k@PWoq:JBaalA<SmoOb8`\0X,r+]r'Ar"=k/9L<Y:Vi=?ZKEBul=m7oY)f!>'>bK&iQ2P3S/jXKdL@+6)%\ldkiL)g'm8fpq;HDHk&CR4a8;614!X,=(7_fObN4b^CJ'&V2!NrrJ)7A4g7WqTSQp<2D8!QS8gJ*<Ok32U8T31I*`R'uYmD<rkA\`J7:*FOL[.p&KU1?'nr^G,>dOeG"&.Et1Vr]^O7SKoo_AZQ-mO/pO9Db)Ie#Qn[4RmjB%$0$!qbboc@%RInT4#K<_lJPX]EhnP:$[H#I2SDU(KoEC\KKQ_3lj"g6?;O[Od)p+]#\q5'Af)rVV8n#=P[[2Ah'G7'DWAMQ1"5?rTpDqcs1dWCR:Cb3\p*hC-SZ"p'iH_cU(pHK`$dqU+d*+Ch0TQrsPL&kup"?msnj$aE)1"CGG49ii(W,Fe=?1<UO"-2g8TW2YbACFbc%#.U*;]F8:&##O/C5U1._rjh0BC#])#;MdhdkVI3(G8Ug6uPnEaTB[[K<~>
+Gat=-D/\\t'`QC]M!gVa8gQD&Gp1nkM$p.kl_&%GeWn.-9Q2*n,[DBBV8%K)$hu]dBrEM]fWfjroCt>d-cstSlYbGQYGEa"qR^[VR]7gFD:AN^Q!LjNdniab_9/MF8*fK[_nQU375sG$C!b<!=W77fQ"$V%W4$:fe#i2meH7"%(p,]@*%0KL\A:,U9&%Eg]c-?Q&)JjG(EIXZ,Jfo_l,VPFGS_q^WsnJ%VdUS<l+N>Ts/etEXT7XrWX/Yg-1U<'LKDM6a-Gkj57('h-q0eqRb`__n]!6/Eeman9[_98eYR_,pO:!b0e1(AN?]o2r#=AVn83=4rYk\6P200KOCkKGEM4O%&4%RO[)MhR3!$\omqJ+)^:gj;K@oqH35Le$+?7&J(G&Wh]6/T2s4B[*p+=qh..%kg`>jkOll/\*29hni.]VeADX3-VR:Y+e=uLr!-taF4!eTX,/`uiiFX32K+dIA'XpGD2026,-$'?-3-890/S.!]=1Zp)t_'G&7$=Em"*=.uEhA$JTh%#WCTl.;X8:V;C>pI]<#OM;,kMlh%WN.A]hX7W6fi>S8UF:qT3h/>4hODg(dJ3_2DEar"q/GtN2nPC1'Y)QpU9-a:</<bB_E.r)BtauGU%`pnQk(PB\Mp'AT*8@D7KD.cR,/:["/.^C6$_[>o;CcnpIcV_\)H1_N3lk6;TiTs(ZQBlHM?HV2]_S)O$RedU#f%)$+\8LCmL\>3+-/8n"I9+K<aYZQj]Z8IKf<cbQWaMr&'@4(bi<V!:Q5s4@>W4-L?&HVep[&)>h%)2^7rp#>#mT/`MlI&Vqlqg%C6nR\1?S)puX?e,Z5%0OThRq[/)+S0USYEC%C*\QXrVj#uCV5s]J-81hf%,*`gmA;2m9A2%=&*/(L.K$\,Y!,t\tO=(:OGe/VIf$=sn_<39B$lmDY/)C^C'Kfs7d:>1ZgBA9.FRLJU#WPFR(dYl'=b,%uF9[*tS5i"'d/\MBo6NH2,d/$
 &LI`Jf>`d;A<C+mH/HnH1kN!(b0``%$CdbN6N.;fKjFe/@"B?j1]="+Ta?`6\US5r'R'j'W@dt#u=C\rf:uGIs=G`.B8MMV%\PV>[#eu+9B]N7CKn(DMb;.KC]1Qc='_S1&obqFN["s3^7Gi%c2IhYB7%3LO!tid+T(t?51qOMqhro[YE-s!G+F_2H[oDN=8^KaiG.h^IG@AH,#0dF)U+TLPpdnNR0#]Bo+FBA0fu+$jEO*5&%9sJ=&[bYrH<Gchhk#`m?U0/Gb+)!hSg4B:[=cC7GBb8tT?1VD_ZJ'1f]@Q6/YRj:!gj:TidDH:>VUCo1'/pd0$AO1UEB(39)3mZLs-sNfj&jaMM3Uj!<#UKPA85@>1^n5!Bl1^dN.<3Qn3OQW=CJgX;n=J!j!q-Bbj?8r%mW+aJAH?dViA'S5T\+T2'il7(,fpD&]C4O7516\neOO<"8;N?;UhAG]D]ar\6s1TX`alo(61@+e[/$=[q/L6[p[NAbWu2K:3tFMC/Z@O@BTY56*V4E^K[PUK\4$30<phqjU(P+A4BhIs=pf*\M:g%0hujA*nbT^,kFE@s56je$Y8<dptHB^J`PYA%!:%gY)6q@]$!-OKjBLe3ZpRB@;a+g,TGbaP,UU#%RJVmU9OMeN5fbI%R^(8"9"MP-p(dVa/<NGi3DrX+u4T&O;tW2CIm?)&c+K27*&SS7P4ZW4Lq'Q?t9LUtc^]r9-2M!T097]%UD)FF:!+l8`UFFlY4ONp/1r16Hup-p6*$eZm9C&t3Q;fggnWpea?o@WkJRl]dL'd#'dE!f-GbFS8-jm2D"!JaXMgAZ;hL.:&-`Y89k)j-N+GY1C.hS8Krc_pV]2cnq6"b#>`^!9Wj\(C03='N*76b]7%(UFMX3e.tIt[nT+,':eu.eLMs6IfZiGI/~>
 endstream
 endobj
 82 0 obj
@@ -469,10 +469,10 @@
 >>
 endobj
 83 0 obj
-<< /Length 2288 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2322 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm=D3(/U&H7-n!o94"<Ukh*`B[X-8hRgLW[LG[Y#;7%.L_6K$>(;\m.8!\!liIB?(Y=I;.:=0bKMcg]WGPeY'udEID)B+;Z1rh("pO6VUMO@ht*?#M=3nZn0=uEf&GuhX4PZME849<%+AS?q\F>(X''UW\#X?<QWi3;h]YqQZY""=YF@HpH'G%6+0qtWo#7`bX53@A`?STi=eY`TTt1p'NMqd-T',Hq@DYBT3k=!pGgEGLGs]@8En,R1[l+&",dkM-l_UaFTnZRJ)!o9h(l2HP$rW2rK;t&L(s]`0l0p%[/5O)_gGlAS(rlfI/6TLf;d#hQX6-m1\,9dA7SRMfS?[&Ta6KC_p%ABLTpCCo,6UmG/6@c>d>sI#Jm7BJ;6`fZ>/dF5m%aN$8=P1%hgA5*e>.Tch%N3QH+W":jYhGd\!,RrGa.!XUNRV$Z!_'XF\):)7)C"%*LA8ijp.1Sqg=JU<pk4Ob`8]I0sqL1+C9\_a:-NmS4p(pPKU?A26)D[+k0Jl(`E:B1U`hMnT'XW>q(#hRA<&E%KSeg-O4OO*7!09)n87ob)h.r/(X4fq$i!1*Zdn94^f>m[f?]9kFW-bfVC8T,qkS*#k\IZ_R*EX57IlsH\c&jZNBSmChE/n%K!o@:5&kT(2V*NM^-kGSh\Y:'i<9+W&`!Y)Ap+pLj'X_Tb0PJ)B#E8/5A\>dBfcL7a@,LK8i>A?_&n_MGBn&4su^t7'"&^%mfW$`KDlS%H;=N$5k@J$rjk9FQY\mp;qWZ!_Pq?]n?`[aa=[!TD)I`@8q0\F!5fmg.A%q"bfr01Z7C(;%>eA'm(uU@)=C=[YG2][OeuE)pN*F7fXsUL(u*FTQRn<fot!e?:9PKpP.d'E`(VkE!Y)rZ:'qV1&'2`"XFZo5&E1t7@:?pF/+3qfhs&=!+OB[EV6RN:O5YNP"/dD+g/=-Hr_S]1q1gWCG'6;S1aIcaPsjA+:GCn`A3IJUofEfMhZHZ.s(s
 8*u-<``%j59JtaSJHB]rmV,X0ilCHhD&B1HDU&UkbG++UJntoNi^C(+k=Op3g[Tq<^%]m="/#-001`l3j\KNIHnk#l;Y]#AYfVib;2k%$aE[B/j@VqTIP;!>\f4mK48t/W6N^Co=Q^7Hj:N*A<1%Zl-%&la5haO)E?o=3odhuVBCnF,Fl0qP5#XJ6W8A5M-Y4*@J79ul3"XNYjj7.:`4@<J5:3T'dpce(?T0ZZJ)O-"cY%.Q\goYh,3_,PF;F)8i5g\J$gEZbK/AQ>LZFJ1g5E#lM8o&D.FXoUhKYE10auEk&da\dTEI0rkA,qU>:kY'GR4>7FeB(=frnkkjEI!O\@-q?:N=I(FPkII2H_mqG<.?4p5\P:>2`;>/O^L`=r+c`W.=]Q$e6F<R/a>pPTOfN^D.;#3M=X8R[.ZTpoi`FH!9j!!A-&W;Ao**aJec#0M+<j^oa?tpD!1t2iE@X1m@U?pL7r@"dM0sWh[-eF,se_[ajsq%m7jVVXYK6Rc=&P3;:VU1`\!i3TSfH\'AEN5J&DD[W(fr<%>W:Xq3l$H\"a#j0cmtDd-\&<S!([r1TD`O%a.+m^tepl:)F+"eJqsO/l;Y7`_!A=Ls]Hhf_)Zg2hbokgUGCa:(RsY,c6LkU,*77k=9r,FFe1D!?<a8jj#2Ca,c#mH+aWd6(D8E)]_^#FJVY]_+1hWa7`F;,)X7!\MN#)?jF8<HO[/QF?;="W+oC,GRjIT#h[1XH;(tY_8\@!`YVmXZ$-EY9Itr'!gr0d]Eujp2O=TeFK_tb:K3Cc8!Mo\P*pWdZO3G]fH\,7SES[Sn>=X/5U/&O;(.+>L<07VEfq0pd][>*R5o6_Eke>WEsk%rrQ543]/s?(6+<kQIRQUr6B<1;4n12s.lp\LWTSI<4J(>eiOb/UF/_@U@/].SqXZXs$^RI_fL(48;5[@_o`c$BL#pT7[>C5"N1=5I$jMr;2u>&)P*.IN.]NmMKPk!-M)*ETL-6
 i!,7uJ]XbcN\/5oa`BXDdpqg,A>8MkAR<ma\uPKD.<A*m8#n@YB^f(J+%Z"E-FAM`0%iRMTBDM#_&<f`UANn(L/J>8_'&1@+P5e.DJ%LM@L-;HU<<'H4lW<8Q6Ho43bLV=lk^?P+3LDMNiObYeY)g816JL](Xc=I[0DgX)$I>a-)p/T;67(+;#KY]t>O7<jT7r=nX[6*PN_8Q_Fq1bLl)k'5phbq]BF_G^Fc+`8^<Jtr1[YApP3fG'5SdqM_0A-d7HL:K)A9)l"aPE?_L,*bd<<AJ/51'hnZR[_1<HboaY_E)nN2%Rr~>
+Gatm=D/\/e&H88.+lphpTj]6MY8]0g9p[J$d<:M)%TnI:Q7/5Y/@m$:a8>P),g/5HUuMo"d70p"o'UekNL)TqMkB/Kh_%$(.K@)n86t:;;&%.PK<Td<%fH[0DWK<c=^:lNn`JL.I[Zo4I/`ChF?EpER26ZW\&stc4f;X)qC$@dB>/Qg\9c?(HbjIfW@0_<042f6\h/srm`BKD.askKI`'_Uel;Gs/]eO`#C"/Zj*q#JT(;FIg&nsF<Vu&WBDu5$HBt:5OIGo1NN6(slph3rY['*rEgD[ehT@\c+8UhAS1,j8F0O11QONt*>_.q>WRp',P0(uD_[EtY3E^/p;c<)MjP9(d.OU_]!$=Q[.jd(UEWhc1F<ZH:L,n%p/?OdEX>VQjc&d;5c\/YGk_H5-;3BW*Dr3]DUn?g=h-+WQQZ,$kc)jKmX`DpO66m=7a4>o3R&28LOP!F8Z=/3dEkp!KYp/k$Eaj5lZ\uqJ^]s9HN*'NaCuSu7Kl&Ho/MsDp6t<1S/$+h]ar*:1qXJqPLUqe>]!+aj;,.-u1J\A5,!2<5<&^D.0re%QP[:VLk<E3;q!e'7ZJnHpiSaq?_W^fnJu_MC^pTic;B_a]J>d:B:&GkoLtj_:R:lc\,H[BLdgXh-*M3ZHVA<]6X0X&',gTT;+_OWuC"1Y<N<+bV*ol)08Orqsd3uqP6#`t=@^[I58M1`b"rh7tcVG+J6mpPTT*]*L):eK!1!&1P8G:+D&;N&B#qQgsR+ffOS!af$Sud\s.*6/-(Jk.E0cu)Kl_CKX3,1A0\Iu:!Fu&:JJ\l/`);+(V0ff$aE9LDU_1Yh;@Lj1dA6Dj9\'f!>LB/gUL/^b^:tF#D-Vm34K@ChBgfmYh6!8=T_]c7eRUiMFXgt?40;&nCiU_4[/]-`N:9FLYAkRd30o/E9@/d]K:M(q)aTGUkLoX\q4t@:?RTi>)RYl@k58Ro^-ud97a9&/:@Mr1?Uhb]-8B5rX.s)*<Dk,<
 qZ+q,GPc.0T*[PR?Uh$3clCHeC@b#VO5lXjTgGC:Mj\=C+rsT#U?.M_E[ZiY^">"IF[sI.AlQKW3)j2*`T62UcIV\&$N==Dtg*^Y[<\-0cjoo6S;=7Bt0.Y$Gc+)n_3jsO%R[mgs(*odto3R(8qBu0PLT<qNJ(7Qg5YJb(X(I!E/dNm$W7RFqE7<=EoIib)QI(S;.Q=(r9t+49\Aq?".j.fL]odXA/Ul"EAk=b4TU[R%j\io(di<1*5gpl9"'KkP\Us"G-;kWi$R2F!aN>hW8o0e[J8n.&Q%BDQZ6&=Oi^8ol$@Esp'pn1CV,@+L*2CiXH_BVM]Z$a2Na/[Z(4detllZTt'#8u=Up&<A(cI;Xi@DuXSp06.H#Er:6tCq"G&8'4-#)AaSG$URH0rr)9bYRHQ]D%+QZl3^\=&$onqY5EFE'70.@ls\BlD.2k=.lo#a+<G4b=::!Q?-_p,J*/MpWrUdP[K<@cR^_nTZuYJYd:\T'jp$*.%SJF3$]6.puIO=VUQX[,#dV=jqBoH?@tKidk5tpWQ3[RhGFqPb9G.^>R5Y:3tCsI0k<kYG_j6mC=Vb!%AWa$j&a-E`s/Foq\<oli4'aM3Mi7#/%=O/e0!uQ1iZDbm(!tJ!YYf!J$8Sj^-PfB[,&E@oLcnN=qOK6)!GH&Dem",<KRm;Gq>8dUHX_OZ$mD"NVOh4q[k>jf?B$e?H0c.AVQ#D6.3+\_=\MRjPg+P?,)@VP8j>:kh$mCNIhIQXt5!BO6l[gDYDD10e#K1=bMd1e>TT>0TO@,%23cO]Au$>N#=D=MPT0M;&R$1%Yd`-H9N>T1*6PprETCBdLq3R+o$\?CUl4#p7";>L0eL:&l'1=%H^kH;WBO@\l^hTcN1%&1qJj5I7*Q748@sl0Q(H]+Kq;FNB@rTNZP*`=$@"-^1<l-7DK=6&$LOd5ebb94UAUb&e8D[aV;K-P9<O'Sai&V)tV:ct,CSG\JtC6_d)\<Qc\qK_m
 D>ln`?=+RPU_oK1IM(VEke1]RRjbMe$`.!c>P;c>*sS/3%6^!'M6_^16VD3)+;WY5"PQ`?^!2`Te)bDEqB#A1I`KeR5C^.4l+2@^JjlgGjH?bO&DS[L]a"rFd5nrqFWV([)m_<PBGj9;7316,3M7m=;fj4(Il\f7C%EFrm_NtYgBRO_,ch5+2uD1gia;dAC=XeQS_UNjB&Tr^&HaA*YH,X+ct))'P34;[5K\\4o_8E%TT#_%Qnane#W6Dr)NrZU4VYg'nZb>lSmS9-d:&%uuD]5BHc%L$Z5!9eRcHWGsY_$^%,gU?"#gK#*lbPDjH+*;.:0UA]OhNAjHaF=3E[l"$~>
 endstream
 endobj
 84 0 obj
@@ -484,10 +484,10 @@
 >>
 endobj
 85 0 obj
-<< /Length 1538 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1575 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm<gMZ%0&:O:Sk]%EC\KZ0i<"o]sgNo!V9t.O8IH^BU[O>@Y9VrFC-iNm>[r<aZBi>^3iXA6ckAk1sa>_kmGMC*/$QL/Yn&Ij<U+f-e<<%rAmf+$Q65DC?fI_PYgq7t1]6+`oU7Z8F7G+4>oa_OeP6jNh(^JeonCsFT<V$al/C`E^7=&N`<ibsapjCgZqE<J[5>r2''Mh?8AW$FcQ7_iFq*Bmj;[X'IJYq5-'DL_CW2=TN8[9=i:ePG^7n^`P7O[q9,8L/+L\d70Cf8#2nlI6/UoH<PX.slCfuT@i@jR#tTdn?h[Vl;+KoTGI7(/9i*'#$s;ZhQ0@ZBXT3utt5l3L:3hK&]++XgLqqrQZ?Xca.fReLB<?GI#_#3#`ccgUoJi1]->#gEJ/CL-=o[q9@#KFrCCN:t?h>9.^>,(nh]*![p,F_G/h/W@m$lYS'i,FkjFW$=-!$;:9T`.^Nijjt^^S+lJqYD]fmYBAla$b!*]Z%NqbQ9,175T*>eni1fllIm7l<YY%.-'\=/+oNdd1iTP!TL4'8+:ATeV?8u7`U9h#m1@s!I5ulk;U\A8UZ/#M,fg#?Q]G'Jokc]W=e:=Ed!`nNGFqHoB0jla!rp/F4pFA!O#)[7F!FHlNaf&Qdf@EU-b%<YBo8W5*R(;Z0qW]sg'fqrMsDOC`b9.R`+atC1nBTPC/L?dSp=dLOi/ZEY1CZiX:eQ@R/r/\RU?\+pY(8)&cd6[G/3Hr3Wm&!0.R'S\9e;04-sOOs/%H,;.a:hj_>PlS\W;]3YEZ0ZRLGB_//AUpd2QrT(Y.4Xs@0:*WGblU$d,l:34iu^:0i$Y%ibJJr&S`2fO-NSbIH_?EM%%)Zj#X#DC=L=2.*T6"-)=jICEkMG\'_d!9DdVX?!O)]!'ghu3><2dI5%%[lPf'<pfgI_"Jkb?5Hr.b28*-[+QT%R[!r-[%8ph!.c+.`)t[%&Hu9rY*m-3LsTWF4$cFk".R;/CFEN>l+g
 @E]$N5"3FuOi65^(Kfq_;L_C=FVDCL4?nBU$*H->]6j't$@pV%sDg[Y%Ap1B_jhA/!f;p+oif/%A4"I)'<F-t)<1d/uj"X'B1f\ikVF=W=F[FDI?d!><)c?\1n"d8B&QDV/ImCRrpLeiW%1-dQI@+m@[Adk:3aC73kdb(>?8GT,pb^9;;\PX'j0O'BI>ib-Qldhc6=n(')boFIncJD<CSL2tUBU,;fKC3n)PSK!Xhj4Hqt2MV@FjlP9m->B7kaW^a:BQ9W%9!,6g"Ik08#7(CXpj>$Dj/FK`H?$BD^^HJ07A`nW93H_@hS3enT7^+1p,aW7#u(W,$YZnL$VWiiDQIbn2YO#7nS[f1,KHV%i#J-1EeYH"gh][p>B'Q1`4mbsG3r/RHhQ3A@79ZX0)ZPX<+o,TWR,-UNBT2WpNQd*^oMlsO1T1%6$8",&LZ+uE'12\J)A:nB"bjtN1\6.Z?es3t#'@pe@TlN[J_Y`VHnVFDK?2[COJ]tBK(\r=TaXK9$X%:.1f%iUK<r,WGG]3?ED>&,1(!GLNNj?4X>~>
+Gatm<gMZ%0&:O:SkV3)NY"2DKTNIl?2N&:(m'\XW%o"-ZM6_j#i_jkNrVD\?D%:,4agOX"fL(e=\X]'Jb11P&j)X\A!XEN6qf.aR-k)7a;1E;]^L*.k+<!b$i5'0ubMm8d+@KA(Ki+L-.E;3?%eD4W`&dBPr:OR(^ETQ;$EUsG2nZat"!":1bA%WLQA+T/#LcNgTcB8(f`o3`-&A::D5;W$p7ZE6rN7Zqb&uP0iB6l[=T7B%1l>.*e"`s3\S@NE#FJ1sfI!PVEJu7YmN`IOmagOKa'*A>oP%CrNZ/i\C';'J:PohW.qLo+HI4K^j:s=M$_E]t@_5*]J1NYP?mPMqW7u1\Ch*apkTm2j0(s:k>n:uj*F)YM!=_b5)a6O1L-jB?%U?%r:D>kh"FM26+mU39]g(OQ"lDp&/07fij>3:nc]QDO36MjsG]en<q_M2N_u7,K\\*<.KC"4O+YV'nG<[e'5$-:MiMta[X)d>`CmJZ<ZmOsbLEEO:o7J+pc'I$iD`gX*N7*=kj+^(IVd;aJTnQ<A,6ttH3prfB4^,_D_!NrqQ57:XI?d`kVbYdkN0q72+`q$jjshhgI.k!@oW;b9h3IY#?1+)pIQA3*J4I'5+1N!*1^OTk^9oa/'ERE_I0%Jep4@Y9]:Y[!NJf_\Hsk2/*al4`,SqR[&$"Q7@23"_5lIm:)8h2g[lWM6;hJN2C-YAq'cNH@$fcZsp"&CeXVDY_JYr.3V1%1j%Q<M-2B6O^Xnb>SnW'^i?=(F*q7rPPLd2h!ioP1HZ%ahM#+CgRh7I7uVNAOSPQHlq($60i6-O#h6WgF5'&!hX4k>rE(^-=GU;dW1#&CZG0)pSI>PO71LP?YbL0rjUiJ>d)%Wr>A8Gu8gBJMCJR/+V<jkYTc\!!7Pof.gR_rkJsAo,XXF.spM+\l>!Ogg2k=KQ.h,mMQ0U'=i`_S-ieJ?=jIm$cX29VPG7"RKCp&i8mSWr??](ss<8'>,-LWZA]
 "8!q5M$t9@gV0_/0q2-lCaY@(p`lD;HKiQ/dk[@@mmJ!KYH<37k4@-78N#k!nI*T@;QcmXn5X!g%&Tcp3i$jqa1omd%:-=]Z.'e6IhHIfgTCnDWgRl6$U&2XEPaE+22_Jn>E\Ybr<@s"#o=TC[),[S"ph6V:eYD&l-l\!Kb,lfa/%.l#Smb1%kYZEo/=fKNX*t_Sq?[gU1/8qsa^M4-e76`JH\U)_-QmA[B7TKf\D+DA/pto3!P&De^)&(350-)I26<o]YatI6.YtjMkhXP0b")rhX5o!"ZO1MubRlRu).ZpHjlFD)f<GS=7c+7@DgQ3i,H.?9s+H'906[%sRh@QJqCp[^CK$!Sl#9eQU1;"FhCr(O7fDbD"<!p]/N-V"*g:t4o_k'j;fpG%j_7%(T0=l5>1-,HngA57H;B=?_T78/l(J%Y1)V*I;S/P0Tpjte/l[V:J=SU]'P6Ocj=b=d?\U<)(l-R>;+$G@1^<u'_2:#/8K;9@JW\tco(H59lckg!1`PbL`7RU+$kjlQfu#(cd#IU%?cg?:k,+DZ9cBFKnOMNi`$-O:]R'XaikOK(QXKUg"3/&cSc~>
 endstream
 endobj
 86 0 obj
@@ -499,10 +499,10 @@
 >>
 endobj
 87 0 obj
-<< /Length 1455 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1386 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm;>Ar7S'Roe[i7jcq<^]R0A`s3>c!4d-[VkX3Y[mnRM7/,[U.`mT;XDGbOsT]rVNM?*MT.]i*.Ih2Q1O+uqrQo1"J`C(s*g.-Sr]TodXOX<I*ZIk4[K5r3P(j\4IJFG+\Y6$A!UIS.)J@_/QWV#h<!sP(h#XC[Sl*RIYa:oo_W`-n1qbXErL$/Au&Ec]pj>Kr8I(\N6Gm87X3\Uq8CE=Y<RoU:kbj`oIXG-(16h?q?&=!(`j]*0=6bJeVp$nCJh&ZFDJh/7s^0<9i7Bcn9\O6gdk&)mo<6$R12)A.5GM13YZ=-<$TRfc$bP<1WA9_$'pJ!;`\[f6D/29UaiZuaeY+7R`:rVPELi?^ZCaObk='CQt?ItV9F-1.`I:FL7fT44tCod<ZCpbDr<L1HL/4Ip1T,+0YpmtP[I7l.MpiO`-&++n<3cO/B`:?N='R2KLG7R4:5!>F(.VS_QW5@g([lGZ=<:+-d0>Y^.s35l6ueJNeY^\5)"&R8Xfj]:'*E>(a3KO4^6btW7ONd=J#4l?s=f![n[CT%<HJh856&;JU-Zl(43G%&k;1c0u7#$3B&I=c60$Z/B+=^`f6=<-BY[7l.Rn9RhXCt;S3duC"Ea!+nYpNVJuRV)=@>`Z*u?1bf2m8[pX#YW#CJ/NcjW,_?prmiXDu4K)0RFVC(j=AO_=McUrf=GgV:p`[fsqDne0e\urR1)WJ]f[39,b_Yd9AXVAQ]g/9r*iE"'p>.\pqe56!?"]O9NiZ)PsjrD=o4j;0tp$K@"M]Kls2p/g-5V?+l`g-=W=5%H9Je/,%/=U"V'E_Vn(*_+M<2,h@T&WQp6&<RPiQ?1qeEmYFnR(Gf,Ya7Sg^umG*fNn7K.1lsMQ\jg)d!/(C]LR!3ofA+!]/':>mbNKh5IHC"J1#mQ7f6nn:LaB>m9?i$ao6P+RnbnlH[4`%<coq^ajS86K7I2`Te<]&6u^Ec1(G&l.H@H.F!a!<j%/+BL.rkqc7s
 ]D]`lZ9f6t])\D&k0?I>0r"%"(NA1[-n"r,&nLD"+5n]WJ)?Y\uM&`F:]-9(Q:$%&)XpN:P5>P5'F)[;25QFHLX#o\^bP./VnH7;=L);kae5$a2j;O"Rrph*N+([ELrcX>XXP[R>,OTRa,9/\s3357e`T.:bp'C#!\HLc.?"Aqi[S^X%>OOmPFn,q#*X';#)0m(Q&;%iq'K\?CAKf+q!gct\hF**9_4]Q"*_[TU[o^[ImF^NPTYq3][*[EbS59o8g+Z*Zke>g9T!&;7a'KZS"G'`q)OagWl%+1"=`b/g1EbbEWS6nI:$du_5PAR?EN1MpD(&]_Pi<j&WZ=r(7VV'4EJOB8>MJ=L!q)'HUJ8*gOZ90+a\Jh%7MP)'4slhKhML'`/Cp:K29&3,R=o#o&`8Y.e=#nV!;9Ul<ijf%8MIHsc!K8@HTeU8/</#J>m"56>lNRQ*'JTI!lk$*QN~>
+Gatm;>Ar7S'Roe[d+a_WAjfhPA`sKFm6"o-ee[uUY[n?P7,,Rhd?EcT.JDdld?8aQ:iV@$JHHsNkJD:(IcQp#-9n[\s%KZ+<PMlfM3!$;$q'\PTZq^R8VdGOinf"PBeo_NjYmS4@A:K;2A9G5q<AK;B2(upkQfsZn,7O>PbR0j[5TDcda]Q)793cBIsJ)%#AQ&RJhaZ-X4GCoi^TmAU#Ip_-.H$]R'Aa[BWC"`%rDG.$f#[=NX!g+'XuIte1[_\Q=E/1lN9PdkZ9i0#i1;^RIU/U7M_7,UJ5oM#Dr_R3]j+Y%/InG%MFt_;R3s:JVO\V_-+?*;C9iP?6p)_AnH9!\]Q?tQ6;0tX@N#P1!-([\5F#p3;*(hlmoq$me3K>Enb-JB]&%gh-HM<l1BrI?>H+XX>oeIUSr7%M\:DDo'J44b2'5NP0e5dRi1bk]?3qe\1Nl^i7T^q*$8sP>%n#FKO5k!$B[)*W`(NoGr`1c;'$Zg!03PHCt.m,&2UDNH$V#Dj\?-mbq\J0LQ))"VbCY)_X'"c@8Q\\RhiZlb2"KDUm6:R]6a`q@LYM?<p'Y]<j=Cnqe!jU.j(9OQDV;q70U</pu(WI;)"8@:<X,KptaChc4)J.MB-%#b!APTa,m0i8g(]5T0Z/uXJ8R3R6I,5nT3o8:tl"t8p?X)?X[?&\skiQZ<(DCQ!bag'CBjD0aMBG82N3;Z\kkV;3$k"4-B5?cXaqD&9CO=reM*`rN/%_)a(IsDoY#.S#^<,LmhhEG2-O%fUOb-ef!!#gCZ6J-lH8G.`cNd6=YYBpW&Mb!%>%#1h63YES#=kMbIF>epV:e0Ro2P.a9*(l;WdG=NW*H[n[kfTdHTX8k=5[)s9$m<<ce4CWOa3qY"6MQQ>#'>NoH@?nSSEM\L[4;PEg3+bU(.?CP;I,mLe_=bso3UD2g3e;p(s8Ec+eiJe"q`!lo+93qf,Jn"n;4$omo_72->Us/?Y^9@n2^jL[:6!uQ
 ON17L/Qlu^D'X$tDba,=3a?EssN`^9&E%m)Jh1F2W)f"tVK7WK\2Q!pT"pb%)^e;*g@,gXXo$%=W0Xt0`eSt8YC%cKK.*XgOXOrD&7135GI^_WcJ%WOe2n+o"^D-<bcXEnMrYMk5;p9g`h,VH*]Z_oQR"XTmog.CbL_m+H(-Fqc?eor]ochr\@?R-*r99k,EU>'0:_JK#",FL\RT`VHZ1Ki1p;L_m7($[54"\&:DOP8;E5I'W,22bH4sIAu\i3pHNJCq@Pu\X*QNS^sg8I6AXmHW4Y]&m#hd8R)8JG"J]OOQ2&lL@m<!MjFem!-=W:K=N@m,]lWX6X6,/,-;WI;=J"ctl!0?$DPg;a(RZV\,TVAgBUe;D*Kg34!:e`U"@oHhp3mluu;p=]~>
 endstream
 endobj
 88 0 obj
@@ -514,10 +514,10 @@
 >>
 endobj
 89 0 obj
-<< /Length 1481 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1492 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!k4gMYb(o\EjtjCJWoX!2ZkL&c!N%j'.B6eoE"H]TPr-74W\7:3@(+!jSBTgP\P([P]eD"o"?goo^mg$%VPk])9GV>U<J8j1dIU*u2>6.l/YLH';fLD+;TqL/"pe]6QCOFscb1+Pk$8*.i'EfQAmjJ!o=Ao$RjCZO>3IlaoC,tW>*)3,ppl-Dk+It"gM2pN7a@]osoCB`+sABd1>1Cd1.7KFg;a<:1MPTRKQ8X/:"PrpGb\0@MO]9:kFAj!e-aP$29i=0?U&DrY#AD:8fgpA]T@9Q=;G?G+=%tDt95asUJfYrJTT<gmXECY2JC<f5U)E27D*cerXEJ)8g>-mFN<6*$K5%0tm$$9'XjU6I1^s"0"<*V<,I"tIGX9&X?q&QP5AF]<XGm.mf>csf2jR_DNi7<uXB(iL58"ui/M*&eD:Fr,Wnd$p$pk_ro"1W^'%d1@Q+W^"%XAk!A\S;kZ.s0*/8Ip$@?A]J.^F^`Ml:"9Er3fm8`;'[,^8&(AHk;h!9/@7BWL-o^H38p?Ac$2CE^Wk$ldQPk57U!7=6I7+ZpaDZ@9em\_2B[(c!27lPSj]W)(u8NHqMO#;#M+hd$u\5[TV!?X"#6'Y0$SsS"Ri=?3E#3?Y)@CAMG^XS/#R`A%"dqc\ET!kK$=p@%FD+#ZFcVB6u+/["`t72`<E^<SkHdOb+R+H+Nf2;-@cR!3JI(Mj3&n@9-Q,QAi#@YOmJ@>h.U?O,Ylan`p/12CC@i+T$].DD0SQYjO%GD7[k;[a]5+PXki@"PO=>L=m-_:%`\CJFSA3U,<Z"cE:)p5jr^$2O]P&0GQF4d_6`5gI=s[ORt;tJaVhU/F8)9BY5L/A:osM0R5F#H8]Cf)Fh+"/S:#[<dg_C9WgoKeOfVS:r1o'h20kVg$H*;M??Vt^n[q6X3$VQae)^E:)h=8l0=gn9[>b`$R2emC"^"/Qg")n?;Ru+.s&\g!:3P"r79<0+K`Je[Pf+8mfm+NY?1n
 M8bOd[g_3AN=*dpQ6uH-5.*qUMJ2(0kqQ8\-K$X*A):j/No'MmqU4MH@V3nSmA6-soEI=6toft/im45@G_hL%S(YK`lIA&:I<nkcMAj%*6=oe?XZN(ElZo/hY;Gc>AN!l(mX,Os5()I+OTOfS(RQ:\`"VH)JCs)_r`tTDMJUPdf@6f"IR/@PKErVGcYNg/>dW=gKqJX4gE-\FrH>C]T^+>kj^g!cf\I4f]*/+u0h>?U:5KrWoT)R_#hsc89g'(V#po<HR0=1TT"?VGZ^tYRN1+>],Mf="7bYO]Z5ADjP+H7TSQc'PPX?k[]K8(93HPE4/BSR%l]*`=,[6"+SmZqkFhh0%;aKW>]/(H5=8`qpLPIO]i5$R<hO:Nm3mIBl[btW-sK]"0dKqXu*Tp#W-I!"HBO_p[L?*66G`^s7/3(++jSeiiShd2?DE*W]5YYsibmIuF)aS@,L.[.[PA6#IV:3H_IdLa.Y2WhhsrrAMDjlQ~>
+Gatm<?Z4[W&:aGP&G!+0L`'&&-$^m?/BqFqaG.'Aqm($g,#L6Q=`c)RZ1mKQac^pKaL2A+^l`p%rVt[ol)VeapVl4J"FEf7q(S64aS4[R<rXDmI\2cO5S4;c6+t=\VodI");>$spViYI3)D7Dji$VTI.`7Xm&)E_#uKtYhI>mNFaD$l9^KN+eWuePe"@@u3h9UB7JH5ArC>0kmG6<!d`[-#YKjeq]uA$sSe.Z1ci^`1[G99;QdY]pUNDguU";IQN8#`MB;t'NV<<='q1I9h#@eGYdD6FcNG)YB'+]kRp^B&&fR/V`%Lsg5-pZM%"Vkgd\n8K`]F>l<g.2dCKnr.=0h"\2Yij*3JYYKH"<VG^X?aRs@6sug(hg"uhZ_gAg<a$O65)/Z5sBA'-s9!.?[HE<k1F*H*$>mf[UF:5rmI&6"PWg\TC@Qb-#Wdt\,\Ua;luJ/MDc)UPT3[Pkr25s>]&*:&#Vr)HT3g3\%)6+7ABp0DW^dYhprFeDX)iA'M,3JasoZks-IR&fk+BK+u39o8%*1nDWqh:RZYbDil3Uf:Jc:XDQqbj8mdfC@:5?6V(od:i8o1D`0">#*9k*SOa2XT;5b-5U\P6o6/[Rk.qGV[&<?;AP4NSDE+o?8<IAIZH-cFPkl<6c4J*#X%8bd?26CBnBQo's`j@WH*UV9m'M1U$)AR!*F=1bDG.4hbaqYW*/JT/W`Fr9L\Qq;HKaGhJa6QQH0*SDCFs/ir3Hs-K"p)'rp-XfOf/PQhJi&#6IGETDXh<W0ki.YM'5"!o"ZS:=6ul.$!TfP>1na[q\mma-MJTV.Gudp1bCcM[b@6KA]6c7t:qk(?QE+KGS2i7d_jT<o3M$br(r9'?d`X[U_t-E"K6PX8Y#l.pAoI#]+W@h.l(k+:BqK9/(ho4=#!a,g`hDL.]U>+HSL#(f(b9[&)llI'iO3G#B>"4m]?P%!"K6sI_f$N`?.]RO?>[9rV_70l.SI.!FTVMrD8Yd
 t&Z0ldIY@NO@:D*X%*l"#5%+!c?eaE0_,N+1.fZ(Wh_lg+!9b/dJaMbT/F5l*cu_Y*a9F)W@.IiGGW)<4%5Z`2(;%L#<Bhl39.7#*WZ4)l?PkhL>Bk=#/j.m@2Qf"N7!LgXH/phGEIdt@(O"FZ)>fV=#FgQ2>6kj\11IDM]A'J)q1=q":[AgO#rk9]o@neB6!K+Im;+c5h@64K]]'AO-e5gKF&-gd?C>(>0VPe6:nR':J4":SlV@[K;=M,A8r!"Fn9hiKQ`LD&B9ZlNCRI17Q\Y+ehkL6+<>YK$XXd7C&-oOoe\>t,r#d+Rcn("UfM.F&WNk_`kQYV.(hl=gqA\H%Y&:S:IdFQ,[/M98UO]`'fQ+LA@]Rb[#c1+2nm/[\Q/N:!N8*ae%i$K%P)-oG/(C)[`PbCojaNi/pO':`Cq8iZOeggc%LCW9eO!cZlJ)5F!CGD?ms-@Sq_<)`bZ1BqXM%XZ^fFH]dHPPa>$\DP;`@m7aScVaW]?C~>
 endstream
 endobj
 90 0 obj
@@ -529,10 +529,10 @@
 >>
 endobj
 91 0 obj
-<< /Length 1756 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1687 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GauHL>Ar7S'Roe[&Gi[885tGsc+m/KQ[-Z6!?:=sA_mM@;%><PF@\GfqWgYoQ?amBNk5cgO[>;OF8>U%O,*Y;R/F=Y4AOmDXo<d@bb?cuZ7JrS-`MR/9rE8m!`"?tjS-cOf0;d)p%d?f)T52FZD]-J5:]Y3iZO6g4Z,Z:(+$ek%K=#o0L7!rh0![pH=L$X2UCrFR)+N@-d&k!r(MA4!uP*A@P_1o0lBHf$"l2/=Ms#I2`9\`g-3`:G2?@2$-dE!c.A1:'aSkNjhl61=0VI2N6HAZ-3H$)V/cUAi*14(]i3*be!SMi";[Cq6+bR^P<Hh-'I59=f)iPI(dLM\`^poVZ\XMN%9\)XRr1EP#-LTf1o@W)_RImqE.X[T5k!$nJO\D+CgkR1]o.-e\ata-0KSb@F%OPlK/m$Q.btY>Y.JP_,2AaLl:"$]E%U%8$^L=RP=NeOQ6&8gL^9u3(8F9Y@Aq<'R<L]M_d^]6a*8oE2<BR7CJFb/97=n.0(!VBPYE[lQ$(?pR&o4=i:[g7D+>t<G9N(b7_qKNRtb$[Jic'B]2#Kc'5iPNGrq(JqD_UF<Ai$qE)mqe,P-2,o(aGj/2i*bJ-_0HX(H<MO_:nA:ocoSkt+1N+@m\Tj9r"69@c[.47Ite&cMjrVYgsl5hs/6:;Rl+B<?q=.UZZi$o5^0ldfS)23\7X)ci!,Dlag/'Mr\Ci/NWTNE8eiN8SbG"C655TFrdke8e<'ARRteJOHCVSCs'k5nJ#@-?"UaU"U9RBEc)LM&LhErpeK/!\R+iK\NH5A8\%[k*$\H'J+P<[2YEPbJ>_/*haUaTso:rBM4VP?]`*,db-1Xk2E=$Za6nHL+*G%r5PMR8Idcc:.hA*2]gk)eb,Bq!BUJ>[MId_,oZ_-fMZF3=C0nA^&uTnqa.eh=l#%,Bd4_Q[Zf_nL=un$ThO=Qj%I1rq^[-H1[^O61iODfa'I(jDkAX,#S?\H\=%7]p4iugMVNA!^e?i
 C1WH`=Bl$rQ(&*OEV1D@IaDS`+_j'FU,F]5L@%EU4*&o`\m@JCfI,&\QNcVO#`e_\,Qht+N*Hod\)_KP=fo$>j>hY+-Ls#%s-n;*K3rco1X_:uR:9<KlMT?e]^0n\\QdOr5!s8@%>I^g6bI8^k*:Wtm4^@\X];6/eTMjQ6kCpY4\Fdh?.AU-H0_qN4"Z(jQ%G]lA6``3'6NqrmTXT$ngLBCJH^Y!n4bOa=-l-Wu]9224E.<rE)YV8[T.R-+:;jT'T$52KG2L1M./dr3*EgFYA+93C[+`)K#9b5S2;,N6XWS]Y/?Ahp%i/GH6N39u=*2,>T5J03=tj$%FqJC%QBj1pLRW^:Pg(Tm5[ntkYkI5@[ASOTDb;V_fNiK:!LabHi<:OZib(O"F6@MSTUM!qE@G'>&7!()n?Q8oZe#fXh+6V"/S`q`]1..Y$$R)tqAPXDlf<\R0CZZUoIgZUU$Dr3b&J`"JLcS^POg5nPm_ic5]!%$E.`aI3F+]W1Ml28n(mJjGuQ7gi73I4T'"H$"\"fo3s4<GU*:%eF_Zi^CiAA47M3%h-dT\5SfoE0gQH[PX'9@]4;AjnbR`s,(O]1K'AhUgl^Qi3Q6VF\0M`4Ga(i4]p!n%F>TLlFYZ$gs$9=J"@?DY+rXH&JIrPP\NjW;DpDaqs:JuE>SYk?s97nEc#fM'o+5,e1.us;gRVS"gQ7.a;#XqU&7Yc'KIK7a\a.HKdGF4"AF4K>PL/`qBHS+%aHJ\d_M,;HL\Qr4nr<(.F]S6~>
+Gb"/(>Ar7S'Roe[&Gi[8LfoScc+m.`D<E'0#%X[aQ['+K6oi1rd35JKl)u0T>NVVQ3R6=^fJ!F76qZXbO5Ds.hTn\Vc:@W(^g$'\T12a$q-G&]qJR3.cf8]%U<jS'>E4.Q]moS8DeG1K@/X\DN;Q`!f0=g&ph:rk@2/U42d^pH?d&Yds%#dO0"iuW[9_im;6a^JQ"EeI;)?jDaV<d#RGe>IPX.U;l8p\klZ$DJ9Pp15W<R146JS&-_+KU/n6/K`iQZl?#<8-GYR>D;KOS(i&ohIcR0(]%@HOX>W1[,pk*At`.33I&CD)gE\-@+?LpBre7\n1R^:<`b@tYBgGfE5jNh?oAf4R1Y\DY5_^/2X3ap\!i1/fkMQ#1"Z&_,+DiY&d(p*8XB!T+7`pt?"gh92FMnr7mA.E\E"JC=HpDXrpcL=Z>s-jNS961kDVA_oeA4#:keplM\IR_rBdRU-FThj0NRKS=^Fc(eebGW'l__8p^jf#1l&BVOK/.oL@QF8)Pl_U,O>Va&ks2)fYnc[rtlY?K=!0VnC9pN'?<QW1J)>WsU(*E"<\V5#m%S'nT`S.Va-e$9eR_$qtIgi3RUiNXsN\U8,4-*:2WoUjt)?%hq&7_PI2=@'"#.\HQF"^_>;+*hH;3eG!p'7OU39Wgri;N"7?AUA`/l1KBGA[c%'c@SF<f4f,l`A!;!1u0\%k4@g#o:7+7RM`o/_[Q6QX5Ir]dmpWcOK4IPltAaG;@pj@<LI&q1?4WD%$jlh5fFCiS$q59"Qg.a<!l53K!,EPU)fQ._]U^4nnQ]&?3==Q=RrQ>I=9C[AKdKZ.X7^OGr%u<G)kL%:*j+E&>0@](?BL%8T*XG#mu7/.O_j)CCZPA($Aa1):W6VJ`Y7Y(2VFfMI/=3#>-+A7\t2W[?f%-.$sc1F:&erV65Q@WWeb.Xq>i<!oMY?P\eT$Oe36%8^Q-=ZfFZKT;ZS=Jo3%F+MSfPjNn,PK:nWEjf8F:mB14
 be",hs$HdNZ^t5#3=s;Nr2>j\g*08tXA7'h`6L(MPHH$jL+*_(jrek[_K6^"O=)S$N:j.=3O,_);AsO'qTq1($bF8"d;A'&H*ZR-0<a`[VLF1ZU#6SMj_4FI=LMgZe@.=8<4P)<X`cgtH'rk_^33s7`eF\0ERJps1R!UcF%CbS@@[>+a)6j&7VIb%>*fPHho\'PoCTI#tmR<1-jnW3squ=MPP[8A0VME?&qG1CjZsLAD1J#;VEGrG)e/*^I_`fsidOcp[5&+\\Usu8m)6tfme`IB-@CR+e9"OG-M&Jp.$uRsa=&J"sS1g=KUqQNePhcnUJpjrM:C[&hTX$3#5\0g?]Bs#UV#HYINiZa=_0NXL/Sd<."<jH1Jo4koQ4T)pOd6+(3t&2]0#&[g-!RKHLKdrq(6$cah#oPA$d2QaLDtZ;(JQOu!+L2+Y\NdhEaT"8hNXUq?ulUj??:B%c9S(a&PaQ(#pq(9dp6cSCe2"h?V,jH8W5OrlASd;eCYZ[\t$[^Cql3HU:hQ2RYpg-^U^Re:MkZchat2ij7a.GRN)7#]AX:sDF]"=[*.;_6trt$qNe4!HU.qs%N<=2^BdYnP;%Ug.#9'(N?_6nD?15j\j#W.P@1H'(0X;`p2)brbR")pCe"<9H8biWCWE&lTsd@>R@,\]H&FH]`-0ec%9hL!N2b<;BPr`Mo)8\&:Es$~>
 endstream
 endobj
 92 0 obj
@@ -544,10 +544,10 @@
 >>
 endobj
 93 0 obj
-<< /Length 1742 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1758 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau`TgMZ%0&:O:SkcG>0/#)H8"<2HHAs#MYUg9aD=Dn4CU26R0kYP0Io]o.BQ8t0X451.#+LXh'1NS:`0'7r.jN#7#BnD:$s8P'8/CQA%hrgW7-_BLmK1t0D%#0bljQFX?_Zn9mUX4#ina.MG^-*tR%>1dBnX%"<1_(ut=/nO`=j_26(Dt6PY85g0C+Q^d+#;QPY%'rB2ATNWb;:mno>6mLNM,MV_bW-B&q\:7j/]H[U]]e)B&j.dGSZ(4W:gX1\#NH9[V^=3C=Opp=DB]Lp*<-GahbTB(0+%c;U/6\CJN"Z]VCmB:2*UEE<0G82^I&bABP9!_q,W8gR0&$3A&fI(9'2TUDeoeR'"GO3m?9n\Z^=+'jO)7*'kOE9jA,nb*h@U!24L-WWa4Qi/K;59>%nkFbY6OBVNdk_2:>9<0kds/MH2/I/[F^Xqof?Z)\$,qtp]Ph8WG'eqmrsZkhe>9]/2N*Vn+i4Jre8h9n^8BP"fI)>%L$Lur/aEF-Uk!#Dj;qQ!Z&m7N[gON3<o&docM1X7(]Z*#uJD`)IKqOd'?EOq[81TR\hg?\-QXeD%*WHm8`AgrtpoC(eHfm[:Ic9B;En&oE@deE;E/M@6@L=Wl./bsQh2LZiZam:a2c"W]V^:TsCA(l2t?^_5iEO-g6g0!u<M6QMRX5CB3ft%i8,gNdNL<;u%rUjLCDV'^j"1<<4$%-F7O@CE$6%0io9?]X$;jLmI;`V)a=\2=ObEJ>#-m78M:(gG*?=o.J`JPYA;K<@F0-dI;M#p8u@BB%\a-q&Am5R\"0H?D^VY+@a/aD^11VILR03R&7jrI:f/X^hf*<k>t=SSC#&EJ]YWm<[.^dCOOZM.Iq5Yl?+BVG=3%%(>E.[&;,bQ*IE+.'DWZt_G>14E%g!p3Ong1+BH]&b$lgbJ_#BO,A8\KEZR.p6nQajH`J;:ofGRm61qN3Mk`KnnIa-nWK$DrR^brCo#?3tj2`a-ZT(>"@%`G)e5
 %>dV:b0L`I7kJ?.r.chf_N]i,bU#8cMcV>`uaRi0l(E4(2;c-f))Jf-Jk$E3OK-IUkEb"3M>NZa[l#ePBfru83"O7jBp&%=G9PR0*(%h,A'H(K:\0A<,4/f5/cc+U3C@coGQqm'W7,aK"f+gD;##1f7i-+%-[;tqh$d^/uR6k2HMTAA%Q@c66Bnp,!4inIT]l"(J,<`.=kIp(UIu<kIg+P(*>3Cu9Gf6p+c#^HtMIY>23NTDLObfn*SJI_#RUY=Y@m]\OBX^#FqX.//dliG.?c4-J^?U^I't0\=$OK^34R_L],LG0L1KV$i7;Dk%G*EC_]TF)6SS)`f$M0Vb4#h^,#[H#r6QL(s6H9qmL,KA?a_Z3R]=+CSCY_ld`iC(+4=.3::$Hjo4,NQ8d8EV5hnQfI.+Pq]ZgEUH\(-$'!V9mSdI#p'Y=I$"U;,_tY?8KcPIUC+*@X$3%<N-&aSiS1Hpmm^]2F:5#tO:CJ8ZgI.q#mXPOhaJKt('En/;_a[X)H7'/k.?Q,g*<4o"+=r:8,k6IQt1nHHugOWChnpgFsdX[&HYU;46tksM$"6CjPqU\c7S0?Qt4nK]KN-:>>9'N^gl)-A*7*3LV?e+U`!ACb$[,-B+PCPK[AjMuMI.RP7BN5TaVUM>O,i-O<f'mZAgq4820*<(Kj2g"f:aEl;p0aNIHQaV\1aL3X,NXe"Bm/XZ!)1SMd[6G5-S[kM<OZ'n=$+As+*&P6"0]qoGSn7r@4nfbh#)k)~>
+GatU4gMZ%0&:O:Skg;\57\m1n"<6\Socch.UlEbcXLE^2;`7KE9QZ,TIXOf015@VrB=A/0L_Mjjk!#QdMp]k/dIRWJ)tEf:1p`<]q7\N]\t4;@HGi=Vk?%nq<hnPBT?gj5D%qTNQZLKi7(cVI,J1KsM]ZbD4-VZeJpc=\(7Fi<r+ks$p^___V_9kY0<?U:#`]dIY-q:]ZKN%&<F0;g>,X;Se8m([W`@b_:fb6%CUHns+@DoK$i&0p"3C$6A1/mu!Bl`H!;+`op!$\<das..6Z/fYPjd,tQRJs:m=LXH>*W\6AJV*ke,mhFoTb$WX1EnO.)Dr4NiBN.<K-)SYRSlJ`<K6?/nc]gCst>LnA<;g622LbdirT8)HH8dPQGOsO]'H@=]Cf;jk+_YSrj>_JLF`sJh+XBiY&:`@dG5LPM"rfBRd.@2A&incupu9ho/^spZu$r=iJB!Ieh##X,Tnnjri*k-[(WS`Ui1RYTt,)TcM5J>3I)f8W,;g%aa@NT[,L?@j^T;E,&Ol$Ts*uT]>?!*qBOKK?i&g..D3!G&]REe10U+'sW-7=/;pNNX60/k&Hs>*5:9H)3"DTm8HRW`_4JG%A:\?D%Dln&$=&nLqHLFA?XcI1L<eY;[EbVGUK<@=cO@Batm'M^`"QU,YC_@]KesE6o[X@>^F@oZc]SYg%%Js9W&u_ibBXpb?H:>T<&(&;&+Y'o%4DTo6r6u&8WHIK>2L2cZ')7[lfs<-JEA$U04,^!,4a]QDR[S(!%S[?[jk0p)W8VS]F0kY7>^FT&uMWgXB3p#+Y^qc;YsXi\RL9p>#!#UCjFtP\V?.%j?Y6HMY<[2V7D<iNo7tr4O*E./fq_na]"-N<'L)b23]QL+OU19HKq;PXk%?GLmK7VVNnMdrA(BT:7E*f+"GZc6UDF,CeHKcIQ.2Tf=cI4(^C$p!5_+G<8*h4OAn*Lu<]FL("d0!9DblG_og2j2II%c-Zl/,sD&T:M(s+'kC)
 hMcg5]1+>1BXS5VXQA\.W)+[2Vj"!V_N`D5>$:]M9:6rqpb:"6%lc0=>D*Z@mYc#.Bo9p2?_=qL"#uhUd];AKh/D#1oIT1a@8H:T3Y6XJ:8egIqmW,)d2GjMH'GV@@CXM)A+Zb$V'!oqGBU0p\:jEKC<j^RXRLcF[J&qFbckj^fdNf\:6"HR"Z5gdEnR#I=fP_29+&k\GMXk;3LYVqY/VfF+ii(W197tUE`$i+YlON^mU>tS4jIEuPjl/:K#8GW]OU(J"A1BnaQp$%h+W!uXD'tN'o^p)#(EX@6;c-d72)Y1/]6i4*"H(9@/AS8s-3c.Ndd'^Z,HqtG$Ci7m2Z(6N;b9[kTq%`5Jn\1n7g$:VP7eM.F>DGPp")aa'ftCaL-he4F$T\Mjm((l4HA_oF59rf!`(8OPhnHgFp^4&<\1"XX^f_?Sn:LA??GD+8Dcl5`F[*U'RC?3ctpSJPjc!==LL,CobB0Dd8YQK$&</d.E3D/'7sl;GVoKKGB]dQmO5161)>H:Wcs?(H0]`aTnASpa?+"u4j_pf'6ergE_`\I\OU^]+GP&5B'o+a:LYSd+9V_6"[932pN9/NI;>jbmc9-<D5S?0e4(+Mg5I[LijE`BfgkJNHQ*Pm%eiORgg_SkR>\pi&,@C&kfg79,f]Dbr+:aO'"B"\Ep.d^k'NC2bqRgdl\7X;'l:3nlkb=L@O*!q.q78I>4''SZjWP<B)Tf7C:A*kgRYkl4kJtOdf*F=W^Xh;"D_1u+\1WJTt11'K<-f\~>
 endstream
 endobj
 94 0 obj
@@ -559,10 +559,10 @@
 >>
 endobj
 95 0 obj
-<< /Length 1915 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2076 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!#]>Ar7S'Roe[csqqZN(Af:$qlL9M2N'^OfcW0jpb^7g(l#nY!hIDmmg!9GUQL6g'g=\Zk4VTSF`:5:Ynl:f9=V6&b_OUhhP(o,N"ER8GsW.rHq(+N!Km*P'cquha['q*XI.P#hXSiVB.)Lb@E?ulVkOo_-V2G&et/82d(KWT%rpk./=hNN7=(ej9dHPr0(u8$H^HrQHPP=58UZnRMXDbaU7W%iT9o2<11ru;'GO[>k5(eU3XY6\QR^QilV1)nsLoh4k]i*-6ISZJeWnjT$<;#3@,I'R6U33fo6NJ!=&r<%mZL#c8a#C!BBrI.E#/%pe5914F`*3Z&#ae.OS1.+jr\gcu(/URALC#L]OPWP*OIt+)O&uWu;&i$?u=J5+@^"A7AcrqS$EZ]67t3aM'W!ILEaH?am\8ETGhF;iHl_k?*taN_aK)Z&FeGfN2OZ;-sHJ!&o"a$QP^@1><)-;(N*s8$SruAp[_$[:1/dil"7O9GEY$791rEoStBu0RtReclimQG-P?1o<ND+XE,6:cP%_N+tFi4r>\Y<26W&:!0*q6nO=_3#N%a=8<,8IghH$;ShIFef&MlpO=MZ5PTIB#mVqt_ra5k3L)Em>9%q2dJT?AA);AKTV]?`5+P;2EG4Ro'(V7J4^42h,W-%M.^TMNgEq5:L$A=j!pVXUp6[h6Vg$ElDiru*R]GtN%=c0cDdJ&NYUDU0,Q/u5\.fDALc"f3>[Sbt6=_8)h>VT>\f@sPB)d'>*n<peG(ogKa,rE%GgL?g$]?#VlJjk\/iQ8llceGjN`7l?,$hO-B/#F\dfTY"N/4uTc8mOnij?f*[P?]Z:D)FJ[(U.pTh_[Pb$0%&Y%Mm:K\o;?0<fI3N.Q:XnC%9h`rgo_:g8'0!.6tcR@K!/%!]K,Y\Tm0h1EI:@IBEa`n=<Dl;U>eW2snr;mZ,<O"X+H7EX(]E!d=&)jkLYKg\A_q;>W$gJI%)GH2uZq6_.6on&JV3TU^Z
 %Z!;hp`qGSLbLB].RhDttof=pR?fo-sp6qapB\0s<dQ8Ms40d,H>/=BX#PI"?NBp),MRIZ"Efbk_A(&+'+3?jR*3gK^EkC#?jOVZ<Dk51f;k,YIBjiVq=['%LnkN_L<PhDC:e@RPm47"D2utUb\od8-WbO&cUMfE#QfB"?)$Xu%e%b*h<1;T!i+P7pn89KIr1%X4jPBH.Up$p2A].t?npUFe"YF*L;1k4>rs$a6(j2+>*]NmC8J=>Xo^<?$rL<Xtid'Y6)ufX0#Ho"A"mX*jZi_ct,2X;PSW@8Vhs9rgb1;#4:lIu@r>:7(L$j8^Oo:tU&;2GAj,RoTB4UG8R*Ck''N".PGdJol5`9'1C3IER=OsfN_Si[/[QAN'i!6hl0q3#g@Y<hb1V&*Wf]GVin37<F:',lrE2s+GS41HhH"F;_!j+7=!U+()j\Q)APQblEUc!F.`NtjNA/s^genbZ$4pu_EAjmRWm8tgI%qBPQA3S65P=nCk%8kjEaM&N3f#$:6k[cC?QpLO"p$jEk?dAL:iW-s"OR4%9*1YS"Vf0eKZSPF+I^/%Ei.HK.fj%Jr4B8c;/qP4"+Z:qg?0g]^&:b=?1%?cc96PX%So_a1n%arL2V9rSYWFebV"oD]Mks[lCUrXIq:7tQ-].@69>CQ4J)%PVNM@?C(CK]7KYkeI%>[567ZRt(ltW!PA)\d_KNU2)<HFI&031(SPI0<<lUGHng(E?^V/\mcE;f63SQW"_-5+.aesXbj;6H=oMLths7t]1?WnPu**tbNR_4n%9\1]a?.8YlfW@1R%[+3@Jk,7B(*H(4&j[@W`&r.2!XT_X\dYN3@W&1a-nYOl#Qe?CZLU"ETlY%OXRhbJlaK0QMW*',fea"kt+WknAk2soj"m;CiY<q/LP<bR*c+=$m?E"kdT7a`T00i0>TE~>
+Gb!#]gN)%,&:N/3n?)E6VFg:6WKV$Kb,"'.e4+@V3s1D6KIKJH,im/+(Ec.d5m!4?Ui",8=J,pNcGAr%`VS,*p3&In4EIWaq"JZl34<=N@4;-L"8VaJ5`$KcSlHHiG4s\We]A,((tf2-IPhWe(Q!'rg!"/C3TA)e\sWT)6cZ[%L%WL>)n,b<2m(B-9@PS:<g,DAdq3j?[q$>OCqV>iabM8*Y.,eN0YShNX2,3b8*\-'.#knn3N;Id%W*1A6-J6YP17I`-D)7Sh"oK'r]5Yn-+;\uH_1br.f>Yi$t3SSacn^Y2CIbY7"?sf+SK.>!#E^*ajUXZA[#MN^K!uHJ^6kAbq`1\EXeUO2(M/"CVZ^l7Ql!)jGpMd0Hpe[&O!+NrJ#^V8aH*>kS['Wo%tba$>H3GT'c0s^D4Wk`;_c];nPDZfPurgQg'/MYW8pM9?mAe]$9#lEW`'K:2dXulkJGSko+VHD@H=3d:+X_]ndUkiC+,:%L;A>99$5&'Un4,bCVU9;cYg7fVIT,]IL!9CA+<ad??:(7,B%ge_[O%Y\+?C!!t#<QkI]7k2Zdfq=Op0do9l&koIkf+YUt^4b-!0209%J;B3@s3L2/t(sE[k*7nHAcQP*35kUVYG_2K#bY,\-@(n/`N1/&DNs9"oEhI[k"[bi,TkKSo>ZAjS:]O]&]L728"U<c/;6Ja%-id]Z%n/K%Ia9?7@+E^SOi2!R\Y.YYZ]\g%RME^Li"lScSdQRuFE,amNsq<eLM(Q^)6Mlg;[k-p6,lK.b(-+7U1@L]5nC\XjD[,LEFR(][q%j!Q,aQC^pf]#8.YBhCL"T558Z]/_3bLa6"/1I@@YP=cg/d,;;iD/H3fm2a2jk9$<+WfU+8X):AJg5@52HdpYZAZ-sXK5=4$<kM[),Ofr[gPejD>tO:"]mWHc<[KpKrQlPmgPEfp3>kaHG[)OuegUPI58K/L+TB%:@WF'?D5IDX:XE/5]<*<ZffCf_NQZ>Oq
 !;_Z=%'-:8+IbY[d&T:,H>n8#AcuO:&!C%!rBp4]5P0uXYZCJ1GFdBAYWm@PDm/UbDeTpn!&r:&cC.t"m\^3%/;DZ;SM0.d.l[=[]"nU@2lpb:G7j%gF-4&pa=VkJ0([(.V5\3'giVmo1JSRapAR5d[Tsn>'o96n_d<^?S[]_ZCp2'rhhXdRlcO87?0;"'SJaj#S&8Rt0TNjNYBcZ43<(Z3%nBr-C/Ju%$3XjMHU(!0q&lP&7<G;6?9S59k'M$Itf0158h)4\^eG3HGY[m,L%iWq]W//0^Ct5WRJI5mI^(?o5+de:/%]J/_'bn-^P/#@)qjodLY0"r$hU4N'j)VtLWMK$PF:FZfko.Jm-n3*2>M`=J=eSO>@lIYQ>BH2aCtb6p4Su1I_9k_1i8'-Im:kAlm'dm3,d4?h1*"X_q(hj*";P8bXTgFehZh?W)*2;k[T2bJE=t@)-%Gfp.t7e!&mJDMZ-6SSrm'etlU]f5ikDtkqR3.Uj0.U-,o_lM]<8B!U<np*e?L+K5&d47W&6>IkbBi?,<n4kooSP[>5G8H+L&PpeO7&UeIS=k:g,aRi&%<Rg;*D2XCeJ2(CG2Y3b@XM%LO/FG>J#M`aQ'/;"-\)Xq^uu,MVTW:q+o^PoJ6^fMFm0'"0*%f\&uM>Dd_I,^cb:*c_!(pC7m-pp\[UJu)8?[apZkK<6._K#]R(9kRY,j?^s$MX@5&8A,l\B4949HCBcJ;n.=254Tio9:N\X'A66tahA9G9O+t@=6IJbb=dqFITH<Si!]AYFa$]Ng2ocj#DWS:/""QE9H6YpNI_Xok`Zg46ZS2?p3lb'i!lG!h]IGXd5TG^7UWk.AT($"a;=`MYNEo`K`hFinJuUdM?>@AlK=n;1\=<dik7LL.'f$b6l*9L+!+];U\C=?Jg^LO%hDcJ@'7SIr(CW,ZuqPF;E?]CUeYO8::fJ&#EDV]f<Z+INh`DJB;=1ESW<kjfBIrhA-NbD!Vd&&/(?
 H`""P-dUHR/2=nPnGc*hca-uStt"n"'2NY;nt]gd2J^g9,%`%leVn%Em?k/(t6/02S3e%3ok#-I7sN(G8^7O/-TnK5<Q=OI~>
 endstream
 endobj
 96 0 obj
@@ -574,10 +574,10 @@
 >>
 endobj
 97 0 obj
-<< /Length 1851 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1686 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm<gMYb*&:O:SkUjonAotd%`<)NGgs)Qtlo%?-U$`"7;)SGXF=AZJY?snfbb7`lC9Ru,R$:.e*1f/Hj."$KFtreIENHSCrA[AbA6WIZMSFVeI\$_WNT.a[33cMJIjR+X/oZFG\`!/HH!iY8Gd>C<G.5U05E<-Y)7V*%I;?*q^0N>shu:kM>#SI&=7&cM/!lV:3FFroS7HYLodi>Z@KSVo?Ig')H:YjQFLs&:9'`IHauKPW/,PtXY0CZHQ<3:mqJIna4S$a<O?`N;nV`VhVrUR4dPBne=0u5U\W!B0<pV8Jb%A70g^)!e$X-%XIQ9-'#JUK0`^,s_+/>J:OpKa]d![$*NM1@M^1],`n*kD7E+T/0UD7)M&D<RnK>B-P/sP*;75d$9SC'G8=&u2+DFNh\6HZ&<)M_f5`Il(?hI/[(gi-lZE3<Fh9D;B3#^Um4R/shA%.EUDH(_7<c6'I,KNPr"cAjMKj*G6/$)fdT?rdJAEltGTEZ4@&Ghm@XR(OA6+B&32r$f%@"OX2jFSrms8&-pPM+/Qb$kW]X^'^dX;;[^DEZSf2,,6Ib;Il[r+-u@iqF&JK^!SL:C*r!XZFA%kMJGY%'juooh3af%+tM</mc4Kui,LpR[aa(:mR)'0SOfTF6fsOZ/B"'GjNWdW(%Pju8WOgZ6>5)'L%/^_FOkDektr(K&m8t&D5ot=:I6Ki$EMB_cl?5_/1P?oc9_M+eZ:7kUJ^FjfR,rD2$L&]L_6JX@#kXNpY/%9d*pAYM<CNg?gl,U5d8`diK-3h=7<NNKs$AI+1Mr6cb=S!&)s=EcO\YBgfm\:9R2MrMPV$=:bj)kE\hVA+e>Egednm\DBpHGI#JR_)+=uM@D,bT';9PPV9bI@X)A6;A@30Va-TYJ,.=La>)VI[`Yc0"hO\`@\Er8Zj"6frL7Qe![j5.U,dok:rU2gCqd8Q+Cfu.&R3-nRB^P[I0C_n%oN))Q>Ns22kE4kNW,&UOLqVG
 2OlPjQN_f`Dn2'*/>gO:gesUTLMOUQ;kt7`673RQd8@EgS$4X,/C.[V406$dGk%*Tuk8d)F)c<`Q3XJ1M^pn3-#".f%(hOTs!9?^#db<-m,Rr\EeT3nAKL)f(ieNQZSp9N/hP:"<4\NNh@e(sZAW:C1S!t!Z9LnkUD]k$.EaTd4A,_":`jej-iMNQQBE04&+rrEj$=8OO!<k>Q;oVP!D^`h#X>F)1?*?.4GtrmaiS9an8qn:f@sKA5B<tt,i;JW8&WH2#qOYE7n(AFa)@Ru"L)UI(]ODC^,l?=3+0l!6k%NtHUQbeh.+D(nZl$=cLsOt9iY3_ZXq@Drm6:m%#bSj"#4Q'-S[WfAr@9(phcF;Qi5uTk3rR=TiRsB5^dc5e(S<@X(LP,L?Ph1pKNF]uC3C?bo79YlpU!$=FQ%GTKbMLi-X+EPN97/A%@*X&8fJ0Oo23>@m\JT*!;:Xsp?8Hc4oXjW(t2P;"o+[(k%K)Q-]B>,DA>H9-0q'ljW[-oh:R`b=>4kI#1WH<OV3!F3pAhM$lF8r's+OG\?'CE@Ap^j^/rH;hCR5E&GVFXkDp/'j2obFoK$:7d;8-ZP4M"B.^4u^?Ag&I<@cU?/)/Jq;"*5shO51Y]*;d1^e1NWFt!Xs\t6N7N;SlC+VM2Aj!MGTm0#M^rLsQD;<V2MT:2"/lI8KFh6j4hR@3e1.471-.s4VaeasnL3t_SNQT-mDK=8S;LB>NDg>(7l;)7brC\9A/!ZjGs^-!#sSf@J+pcdI>!gJ@h-&OV$m;MK<[X7.Y^$,NWi_GD#d3V;cD23/=kb78G!4m&qcgpq;kJ2OYcC-N+LGl&;[a,ff6$IJU`e%%bJRkF`r=9Wpde!~>
+Gatm<?#SIU'Rf_Zcs)[LAjh'J-jD6ggnj4lXYIDB\du/9f`Yh?TqnL+Y93FK?.rh`"@J9hUr:H'cTV#-dT<L&+04)N$sQs3qf*D+aL6[COFKF.q7Q3f&-]d`$#4<hs3.WP>i7XQMSSPE9AdUHI'Un,G.Yn_5M57%q@3jKcW]_<n)o2lP#[GW+)"uC$Z"_.#1"*D?cU!ll_:tpITWXH7tt9-]RqBuQueF>VT$!t^"*b'O`P's"#9YYH*$5WG,I7s-q<o<F%+&sLpS-2&OFG<(F^(UL"hQY.qrB2Xj=$g2*GJX"1Gth=i.3730ad[?<6Ec$EhWU:=g:Q)d<lJkW"3&.4m$ckaMWb73X-/=g9"1;P)Bbg8&VR.I-kd$6pZH05(F;`8u=j1C*9D6'mG?C!aCCi2iOJX9A?.g%bBO,Fo.nPa,dC6Y%u*$k>4d3E*4Xo5nkp3Fu>?;cY/ODF:H08rKGZRXcDT>IT$rJ..iSc_M=C8Kgm@.HgmrhVZNW;P]%kD[!ge]Ioi6C4-SsI%l37,tSc]*KCb/m?GI=%F/KXPckE4=rO,Q\Mm2g:F?]*r_NM-3_[3=4dD%ns-M"6Gc!:EaJ7>u@GpI0E,#H6lqpEI7p5B'W!Rtgkpb&9jn^k@Q^8GRndF,TUb![SU:CUbq2mP;V7S+eJiD,KT&9_qY,5f(m;3sfRf0p-<15+D0)\A;QrB3])7m.@IU[?^@E/ud9iJ:#^5RckCB6.QC>r&6$]VC8[0Xk9EY'4E<G"0l#/*hK's*eb+TSFA2^Q/<PoKjt&#f"ZLF3(:6n-IXK>PjX4;7bt*H=1k9lok-&?I`]3-<L>`B0VN2ibn(p-:#iq!;]rL>g6/<BXX)lJ0jGUrlV6Q98TOJs,Z>Pg$eBKQNA8=[09U#2WI5dqa>MaXCon&CuaS2%a#i<VgUdL\c0:$Eh':\3:t7n3h*CaL!"J'0B^[Q=U"hd)KWE3uG<rCbom[DXW6:MW2^#XldB
 REV&(sj2eOEehTJfqU+SGOfl@63Q!E]HcT6*SX7OH_G\gNCSV<BK+Z*u#B>QIOM`_Vlq,KoLjI?OP!ioVKWZiW=]b$D^$srPkSZ%\MC2.=UX7&0E=9?s&:Ojfb>+X0i&QWZqS9[YmL4j,6OE*5Z2j)ajcJ%5]hHiSp1ph5PBIf8)C][iW:!%SnqZF+p>'&n5CP?+PjkCkXFQY,#u8\l`)>tFNFd1h.FhpW:\*5L:m']tYF)s&6D.mOjB<6a(V'VTC6^,NQn[DPfTCDenu>Ef[O!rJ,hoPA_gA5t%I$u%N3g[Y)"4XRLgYTt[l<YFT4cbFnZ\54e8Se<)h(R1ZG3s06[#->>R`i;P[a^8F1%6)4[q?.cen<k'ILAo&Yf!d5:K1'R(mPEn6s";2Rt::Pnhp*4`p`pd9%S_]>$3D=Ium*`Fe;._=H9GZh`9Uq>8dsr#6A^.uYCIo)*m.e)<Hl`N-HF=qd5qa,5t&,)fqTW(u+MIk,<H9rL/^`F7\,kF_'n(@'C9)-o0^Vp$]=;N)9KelRa-2r?N:dE'LTkkBC@,KF`P4<)ciCOM5>k_J\I:tr">i=JD9mB.8HNol"d&&.&A^5q9h[j"V&hh1_d^O6f4]5+H.N*>4$4s!4SD$T*7eO.js!-IW'L1f%(J"Q(>QFnhJE]DP@bI[9.#4:7n(t4Y*H^]O]rZ@j@:CR~>
 endstream
 endobj
 98 0 obj
@@ -589,10 +589,10 @@
 >>
 endobj
 99 0 obj
-<< /Length 1746 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1923 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!#\CN%rc'`IH,Tl4^sQk_&JO0ohO/p3:b9<uLZ#0auX7$K:=(0se_A&!JW/=Mp2QtXAE$q6U]i[)p]O2FV=S52>n-XS4Q>H4=APJfu*(P\X[T<dVJ.3g"1/FY.Wh+`?iI!jHE`sEqtqV)n]0MucNq8@3RI.\"sHV5+u*)gdinU>t?d>@UQ2uc13Y_.e(Nr?JW+8XgkoDHOrP'5G9ono6Th/a#pKf";Z`@GqCL-#_(V=l`%b1@i>%5rTeD,2I6;51%O&QF>b;,-.MiNF:1aT4BCCBm(,/5*de!:tle-S5Yo:=sC?]h4>n'PVm0#^V.HU?SLWB""K)0FS=AJ(fdCQN2#/Ara[W.i@8F^>si`jRF:pF8%+mRQDP+h.Og\gc+KK!GI[_FWk<W_B#[d\XJC*j-=m*==GB5joG%(7e!SDk*Oo?iWo_A*UIom2"P5E%X1sW`FGMa_>bNGGOB5N2TZLYbm.@9gU'SH^6GAGJGkD66[S5OY3\Cd5H]7q?t$87OKNf_5s>HFn>AV(7Ce(bQQ*Po.[Y`1/+S:)_[^(*dAL>'W6/^hZ6VOB4&s")`*VH_V*&1K1'h_!kW=b<aCG'BA)`.\@"sj$k"*4>2[Cf="6.>T`VO[9kr*6Qf';F*"[<gR@(<.RoX8'lX`)*7*+PKUTt79!PT]n+0t\C_=6[f.UMLb.qROZ+0NW)!@L)S>b?Hu_RO19q'Oo*#Oktp"rjCB0HI\Ksr6%i0=e%H2hMHRO&n;;q.EXs90f>El]$oA&bsuadqgmAsVAM8,R@hEh="QT0bNmL2^9s^Z7Id(ZUWBoJ_7-bl_nj,#5oE*'-@;Pg[ZNj9kKrJ&r4Wr3KSZb]Ot%o;BVZ4CIai-cO,J't(Bc-oGRn1q9Am87Ft5%=031"4@P"s1+j+m9F*^ZD3dijPW;BRE$ON>E?Gda3eP"Mf(\A@7ec(d_Q&>]+]%*Z[[H7])6@Cm.pH/7O3A32f"E4G2UAEijL>&i
 qrH:In;51Oh_%h3@%k8sm2M]^qom]jCQb.Q/OloaIU3,&<Eb.`lZa9p&?8U.e=RT8spB!KcRl@cCSqpCEXZ^+3[Pol3&_$>n9R;h72gU&uVpk*"/`-JMb:BQtqRp4n9$!_uo@$i05`^H?`GVI5b$dj+:1L<lYde3;F6MB_bihK"ZCNmYF![t(RU'8"oO7a^mAK9>o?.O$'\XXQpUgWK,`'#ONFS12IJs`#^F7GPKh.8'b)oLp]%E;+^dXCtPQD92<rnRJ5WP*_6n6>_8OhKWS,(H&-0[ukcXF_F5Zhh0@;^pQda4l=P,F=N)5/Xd?eB5`i:TK?Y#B>'_u8h'anW**I<B7j!;D*I[L@;*L^hb0bS8l#mr0f"*!feFU"!3LHa6M)[mFdUYFr\B'XT6=%?tUkg3Ge90c,j+I)m</0id%1O0l:2SOV6jATsZ4a*QX,dPEJO8g.jGChOoh(IuenC!2VOgO*<``H9c)Ik%]_"JpD5MZ`<_MfrbK)OV!uGg`k>HTg>HYNs^3WntH'/E4X)6G9*W5pU&KUmbI\P4%nU<?fhrN?XTT+b:+_4ITHK__HO`1@)X^Qj7I_=IjC%H*gRRXP2HcF\T'Nf<M47c-?"4*c.^dU`b#aKo2W8oi8T1pVS`DNW$OeX+m67P_%/dQo14=k,GBc-Cr>p(Ye,Q=K^@_MW-OB#fC7BHp9H_:?)!Mi4X;],P(]9]3FZpbaMa0.glWMXk.13mOc8B93scKmhX&kIfl8+;c!~>
+Gau0DgMZ%0&:O:SkcGdHAjfPHA[a(ll,HpDD3?5`>+dJTfqrQdZKN%b>l+,iAB>h6U?r,q#a1Q30/I6QcHPd(1:W_\^'q6P<55%1Oc*JbpO2_dA(B`cUCm&7FUIQ\#/:VM:Mq<J5VKkj0aA@L2+\!i]usD?f\,Y&"So4`9\.KrmqtS!Q9Xna_2A\D:4:p0<@mgYdiW4@-'ssESAhe`,E_390<93/d_cch=0B%S,jP4CSFOf2R>Td%!4TgtOu22aR/+0=G[>!#H>88`L%Dc0q7-S-`Q2fq\;?oPQ%jV'o=7tBE+KGqcU;$8q,5OT7%-JCibZf#*abfk36<0R+M,Y;36a#ldGZV[kH<jX9Vm]!l>aN<.N%p,@Ftqg%M<Cu3.="HYNN).OXlrKO_%C?h"KCBMG%n`>]<&?Aa5E\\Our<d\"Q=2`H%.($$8$R%XUC3![$Qa>390h`#R_NUT,"9HA]jdBM#,mm&S$g?$rrS+U3jo/O"JBK?oNj*u=tJ1\57B'-CZg?>=^5!c\YKq+io&")<Na^;]V'#p="V+!V:/p"o8qg$!dIa`Je!@hqNS5di+:t2L8cVVqt3pu#3n3&Gk(W-fnomBEf)29r8.^mc4Ktqp'n;bu/P5kcgmbShm'+j[!G[h>a-'pFG=Ja3k:_ZCYTJd]LmK4#O<e:i&QqtMK?,To+fGSX9XGP*feVZ&l.MD[Zl"Khi??Z!.^bd-A<,U\>LA[48Zt^r1IdWU?4>ob*A]8M3^c\qM>)Vs5^%lFnbqpmFEc"8X9FP^A8<]8kq>gkLbtig+U8gAEp(IDPm%2qRLj?r+0gB)tg>JG>+Ejl_0FrZ89s!>PbYZg"*6D^];X,Et'"bf9XY9RBDQO7r,=TCfj4?_'O1BY<q6jNoY-6+#De"iAU:N#Q:o1DjHK4$'\4VZt*I,3;@C9d5RWGajLb7]^`c#G'e-,8tP1YpBigG&Rhb'AP-[Jces(/6s9J7qXc:#3(VQh:
 j?<-)MMS"H%Usl!eI>j*$.!2FerV&"Kr\HJ?*N*"#p+ILO41idnL)#>"SIbFUCNN0MUVO^Q-UlB)5S5>)8QBSZdX8nTkYHS4MF'XdNR!IY&W45/hg9V_q3Km\'S-"81#*J`4]_^;[[W7)5eIra"L,/`PcA#H1[*<$I+7Y\/k>;9`A3\YS8ej`,Ze@,Orj!Mm`G<idL\h]T3Z21eJH[tJrlTgM>>`H.cYom?\+^I>uX#&R\Ft8]"(Qn8[uHO"AdrFe$s'DLX^(gIo7/NgM0!9,Xqg/Gh?&;/Io-m`$I,.Zr1`Aj4t""NhLgn-Ips:,[=>`[n%@E2:mtPU7bfDg8&58qP%%>jDakrLrH8VT6?7qhmWjG$^k%5IQ=DBBLcIVm<5V_b'oIP:SX\&J%4V60a)\-4aL:eCr6\mon*Phh*(]4EUqH)c,8T:mZpt3p6Y0:kJ3)\Go!'0LUDn]os`$?]+WilTVR>qAT=Zk?-GjDa[KGG$IB4=7&\$JPa+grX/t)3aVgXe[6?X88NPAK!N\KsE/8WZ9FN[i?<c>L>4Rs6!pbR-H3W+;@6gaW,l?oV/@@XsRB9,1"R$@o=>H+`''iKR%s?5^GEQ1!-cT)G!N=.PYU2G)iqhVn(Q`$A%,.Dj8sJTAddZ9Q*HPu;iI,Z!VPC__*bfSIh2PB2O1TLQN:/i-qPg;h`K6jt2q/N+MhAPu[&'$sY=?G:OU'ph;\;Gbjoh^Z_B`lbe;\M2)SrHK$@DocE'H3:7f.;4T,BNbX.H8LAlNHo.sK5@=;@V4CPjna&QY0/8R%YBY1QG,X@.4U%u!:oomOJ0n&$<q)nS0u;2$G*49f-D.l0[ZF$aFpdMV@AZ$@kJjf5am&Csl,%-nLF?!iX2.bY=3HM.&1,iq\J"70Vh<OH,E0*9n69FpF#,oC^FMeCjQ/+EN?V0p"Y~>
 endstream
 endobj
 100 0 obj
@@ -604,10 +604,10 @@
 >>
 endobj
 101 0 obj
-<< /Length 1528 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1395 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0D95iiK&AJ$C#eB:+L_Z%u(Q0h&mCL@_:!uH!V'uc)U20k9kS5C*rqE612MVq0-ANetCe,"J^3L67)bn%:PFiM!XSBQf-_Y*TL?Ej[\)TAr:L+4ss%6`O-@\d.5>6MhEt-W87Hqa*:KdT#)9</RUFnGfb;#`Nn^lr,7e5W6hY]k6._[a:\E3L23kZ,`q-?j')Li^RO!,kiR?#5MM6a5*BYcO,^.;5*;"0b1BYUl&;ThFnM3[YW_S<"f9$,Bg6IS!dMq1:d0rnS(<b[kPD])BSAd$I\<;aFd[phYh$;a#SBr`ob(^&3/]E>MU.5t_D,Kkt1i$dVYLaFai@_X69).69D`-9JaBTX&Ld(;h_\VV8HX,W5V)C;pO;q[UO0E$3O:6Bijd`/c^"ss\'+LWD:8)ugP:@BW;3KpkDja1qUR+o?2o4SSUQ:#.RM^m!ZFp//E5S>a%"5iEM&#@/,K4#Mu=3?_P`W1LWC7Nf[J-te,=fF:eG!nBg-2C]-@[RfTKco;A[nZ5-H%#a_gHL6IED+cF5hI1b286A4OjaEi^U>25^!maRBKhoLP&]&[GU84OFuYeVlc1hnU]OmAar+9QWCiQkU_=l5AjWR'='L--%Q7QKZKGL>GU@Ds8os_$r5Z;1TDA6EQb19C%(2@0n\/=m!r*e*:.)'KlWGF@NgBKSYAii)jNt].)IBn.8mS85'SsOd=^Td$)M3dXWB@%s0Dc)74*^+mm+>Wo"Y`%15ssnul>SnO,gG368[5;H5it_1o'IARIor<$q2]j>FrfPi:83K^93#Smp1`8>.#Yc15E(9IF$,BhXY1VO2aWa\*tFEP61;R0gob1Hs2!IuL&E*,7G'8.3]LT^@dJ+Y#V#(q&AMnr?)lrc3H*ig&qg+aUcrn7/P+,s>]Co9*MAS,^8rf%7SjNb\naOq_MgK8f%;72crX,nCtgY1\dFs<fK/FgSoPc.1Ne^KL4ePU]ibog(siiLC2j`P4dR-
 A\`$&dTJHuXN@6CC7O+,_\'&Hep#UXn_4b:9_fiPO),7T989>O0@#4R\8&mn!aJ@`bUp'q@S&eFkN^AgTUZpbOPC5#CYD,2!dg[a@UCA(C,JjSn=O;Y)BEjJ/>'8J:*f#ZS_(h3$!`)dIG=:J_^'E92?P(oL6CiYJ#N],fPdFRO]NYBQ7)"$<)3@HFfT]A_q&%!)O;LUG"/3*C%g*(UHR'IN'2'r\irfnJ)mt=eZ7\-F=F!Aink9tb0iK,n3Pkeq_S?bYNqGWJ6+Vf:&H5oQ3ORt3<H20$`aP9gn2jLAp'Ml`:.7K"K,:miK"(nl,;>\9NR?q^(?)K-pMJ)l=tLQJ2acK?E8E`p9r6A\0:d%0cE+e9M2eqY*p\7O.au&6[.9@@S%dWAamaOrRg5ARp`P3RQp\n&r#YE-]TRuB&87"@o&_sQ%']31n575Kc-UNk^u=RRNn:IVHRQ5N\ojb)`#Ogo(Prm8/5NAD;!8\1FRApYVU`DA_JX!UlQS>q_+r&A>V'(3%'0a[j\AJRgiEDr\'p97~>
+Gb!#[h,!&j&:a.U&b30.6pp=Zq,jb$/[sIJ-Or+lqJr*$C$RU<g:3V3"oeC?^?T]QZeMr&!\quFju;2XlZht`T)=ruCFt!bT1"_,=MF6^^E.+gT+]b`IB00p@e/.3qIK<C)6j_g?fH1e['q%FK.Q):buK@4hsmdmC]/Z&cbI_==lla[BMEIsmX.(/P/L)2-1QBN66`;gG#"BoQ.7*R<j]5HpQ'fQNW5Q!Isei<^VeA>-%!d,8_hli>#7e#gM;'6Z/S!fBO,.q"5:A543Ql#<>iTt>I6F?aKb7XV%k.ARA>3O(r"B,:V[4.?DE.+OmS*MZm&769DlR8'hJq;b..f+qiD%8,OR#/lgoLl&]^&.n8DI7f#ts!`[oD#S8GuIJX"57i*-\MX"+PP30XA\PFWt$%?coB7Hl3pGa8?\/D1,30%*j"q_"T(5p]'X-7JrbP0oGQ0^(VCb41RC/N.!\+\H76E2<c41\/CjV!qurHIM;i?d@#l!t7`S^>VMP9u7s-/(r#VHO&>aLeMP0PV^hs=P[Ro,N42(o/t<kc"^uE=i$<7W%JMGKI4lY'ROobJX5Bq,T,^[L%aXUYCM"d)M6KfJ-LgjH)Z"Gn&TNC9DYE\`A4?VP(Gq3gGQO*Cc64iE7\0q+`CMP;@"3eTcmHS,\q]?qr]lsYh:Od,+d-W)=q!QU3PaSU"*E)VeJR[psO-,K_a.O[pT`#ZHT,us643<UHmD]i0dMVKc:S+6R,qVA6lriI@"u2#<%4NqkfM)0Z<T`(GSX/X"WD8K3*Iu"5DS6"""d'%g$P=RW(ES1sKBGBsHe<d.pY=iqQ,!+1>g,s3t`?#g&0O)@[m^GaTMj-h\e3(42C>N5Q*8/:Y5p1h*V`.\/[Aa:S"6HV`@LMX`(2*FJ[CNcA6NddeQk@Qe3pKG&sFI71)B[-=`8Ee%C'E7'M.rGlHZ]g!9s@<1.C+Y+M*;Pq0C.W/:6"REW<5PiBYI'CnWHkIsn\Pb8
 r2U.Md!]QMs90/>ng4mL=?R(Hg+F?t((K>AYFG0-eZ2qjLBMOl1nOL9cF,U>.;-L9-6)Ur*T<m5gbEjc89>e2mj)C\!RdOjo12Wh^-/o#3*Ch+m=-@'iU`GQLA;8ra(Y$RSG4D8(A$#m;L,1bI/Lc"DN<KD3_?)]$Y_&Ga(60WHqQphihTd`CfD6L&>G:F)D6s=aD1n\0-XV(,'5SBeJK4nXL@b1Z1f^In&_^=JAC`E+nt7Sb+WoIjGk8(Uockig"4BEQ`@I-/&+OadLa+K`Z%Rlu&,@AOX3+6A/4L(qo8L.G*-_TMjpA:;T3.d7bX\5*hq7A!bh#u:Tce/Q),--fYiGMAl:\]5JEpD8M5C-HD[G7AN7Gm^=:l(q2B,5p\gp%pMO&VB\V0/F".6h68H~>
 endstream
 endobj
 102 0 obj
@@ -619,10 +619,10 @@
 >>
 endobj
 103 0 obj
-<< /Length 1832 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1786 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GatU4>Ar7S'Roe[d+]2WAk;2n$j5X0$!J$I[s6Xpdg*miD/PO#lJaeBIf)`.2@jBAb7GA)79Vh:I-5n?6Hp=1T,*VD'B3lYhn)I;&b_qI;Z?rpI\$]T5uHim-2/H.^J<qi!K<0u_7liI%g^S_LH&!jYM=B_5Q5ihod[hoW$(BYdVs7HHc/uM/_1Tj>)(QLicR`n+/OX:Mqn2O'r)UOHSa@_])%P%]]L`K+dYpKMn6Ln5'r4^0!'MXdNC`IobCZRP0bG\Zc';(;A=k]ZXU3$7OMC0bcKA>"2B]84Nh"^AAPRNfjY,h>o),"=n.-CC2j#`b6r:94B?j)&Y"cV/8?L=E-A)6Ui]\:GDhFh'BC6trK,Q6fke+Zn;`jA?3d^IhEko9TQ=\$[KZqm+)5*h=TW:MR\0%Z"!)H;:oeYI#nr9=&^/4XcR9uU#(4gY0O#')r#W#cc><3f=j3LRr`5Fc:ZnH94]G24@=lq&DP_P&bj83pq5\?.F=YP)eXr`Lj+-4mdcV^Fn;cleALkLT`C^g`-`S:WnI_#h'^Ue*7QM%,^a)SI@Vb>DprZC@NhH8T&]U_DWRs-t[Gb7$^=0)e0m!^2&o&7>E/cGLs#Bs[(12>9#9(Bq26JCFL*'UOLn[,jNL]`A'+(?%!csoA82?-`4*?&;lP6A-1I,]K.'mFkn:4Z_Em(QB)chk[Y]A'qL0p1?@lm^;lRfKqA\S=&%LmFQ@@8u'^2hd857%`;!,jJ,>JjcD2#/@$Kh\_poAd0":)#Toi4!nT&ZMCH8p^cs`5C+ghrqGY8KP%L-#QNk28hT&^/naKZI"U@.tNdn;jOG<6dmPl?hB'T83fiQfEL3Gl,eN]G(TDg>7Y@>d-Og3r*Xf*+'Q)mGQ+s1Z/mH.bu-%4eP>h7e^`uQ9="^Z"XuMA#:,+Gl#\Hr%VSn80)pYhRLR:Bb6;sC;jJrac65Sk1alpQ<Z,OMmIit$.lV\SP.)'n6ECo-M].thfJ]s
 ?LpbL(9.['7J-g(I!^ZU3nOONq5>fVSO;$f[:1*F3LBfMH;'m.C0@FCX@=YA@mh?_QdJ-+r*@iY0^9]t0f!9re8smYHXh6:kRB25<s,1%*<^88g.Kdled,DbY`MODm8Qr[D'j[kfE?QCl4T+;-e]W6WZTYKCT"_G1StnGeLL@Lc%j\ARS;eq9]S(8R,R@MK\1gB1+&$1R<_5HYI$aAcN)ZC"KX/0WJmlOLc/lfJaaTB1.A9['6998A20-L?-eW#qbp,4"<.+AYkm.@=o:[2^TPqZf1kbtXZ%MLB4S%K.TKi#(Hm"Nd47Fc(mj+aN2n*C!P)17h0C\gm5J/n<KV0IX46Ik3(I!X[e?$F[N82rTlm#,MF'!kE<Lndl8k@b%[(CJ&f=WY)qm!`!JnEPE.'*XqRO'W^2mB'!Et+eRVS4\^/N/MNONckW4km=""#m^R)586G&<<_!8t>#HQP4rr7FCT15k22rHKI5#1'o-=*=q5$'k8Isc42%:c<TH`AkaG_^k#iSH),,Y!mZQN9UU<+i!5XiS+1KQ:.Z!m(%J.uO>tE";<9;f@U3)C1TZ_.0=So>kdF)/#\A2=[+c7[%gR(?:FPPsc>5E<C>dkMKjN\JcOf@f.'NuO"q$fP?;,`7B\It3fr7QQ2'IuW)FsEJg=huuX*7&BVk)Q`L=p7&=?3P!n9$J$\qg%EN=cVBG-?t[9nm883'k\t0+C_jpJucS)dApeUF4h"GF>-3)NB@\Hs%_'Lsd^DoR2eo[JR)]4dTWaD&jWED,mDU0e8-$A6++;mhW]cmJ:.ll_hJcF??u.UK1"t"HI&]=gYajYZC@!\MrnW3U^>>+XWH~>
+GauHL>Ar7S'Roe[&GhW!2FHc4@Ml>VF-*(tZc1Z?l96USAIF\i9c(i&p>\[.@\'8jDMATf&DO#%F8aBY\#\0mX4a+$B'eUYh(54P)QrDK:YSa](QN&=f<L9d)c*f4B=D6]i0j.W3.8,T%&UI6d>TuMW;L.G:Yg"2QakO'<iPWRlCm-5I/Ldd?+%F*(1or&.P?M6e[$).@C?>8p3]u,FX.:X8\@'s+kO_HA+ek)$MBZ4[RKOhPdP3dnd]0sV$Bl;<@fmj-S-CX8e`79'7tj@SlF[QjOm"=iS!,VZ`5:gHF8OfVEBN:T)hlQ-)Zk2'DC(u;8`jaR?'4DSR><(p6pnQK#jfA,`-9ga?-.*4&I0LM;(U(C9QnB_)t%3*:Yb@8m_H\D?,?b\:ES>ZP*=-0W`-cC*fHI*T7s2@'&r,[><_0@?LlA[Om7Ue4k$_iWhZT%/"HnVS4&hpkDZ4N9Q,4g_jrk42*_n1U@BVnUIn;$tcmZh2C&po,%e$fh1TC%p8Ed:O!&frEa=*<5PVf@\]aY\/#BeY8>*b(i^qo$C4#MG9#1+J\4N!#,"a*Y'6V]'fNr43"=sf*-hAuQOo;*HO`@dKYH<>."J,ZX"_gQ89pD3`[Rq<bRB<XC\E0Sm7"\jM)+85U>pg_#$%-n3gGjVBqU[bZ/S2'$:%<Nn^CamcnI+0<9trROeL'H?"Dr%R"W-ni<:UaFlU70ortc)HoETo:DJ@,`Mr"/EHV7Xl?M't97ibEj?)>_n4=Vp^QRj1;A<hII@b5-"-U\95(<TfG@?N!D0[bo4jJ4SXZVMd]iHg;[mDJd24#;(#aY0l,OAq<KqDqId-asA(sCE,Q*GW>.TR'Wpf=ZJq+s_Kd/bsHdpT3@iVY'cIGoksE<*W4,U^e0#CIq/'9(X#TXjN;K-pZ>$cpk]Z/)['oV)/eb?#hD/c_h[$(4L9'cnNV+L<US^'h":!2M`18^/p:;8/UDP1:VrX-6ncZ>;GF^u<=
 .;Tfu\bo`7qrF[qegftC+e]k0jT/]AXYjH]sTmLd6'aAinT5"I'\`B?t19nQ>j?")W2u`[M)l?WXPb.u4S,ZA6'SY0uW/'Zl4OdR*lCp-mMR^J6!B:+m/:&N#85;uF@-QY/"r+[df0:DDn7.*:IckoSM34bKRuNLZQau<XX01$-3mJYW*>#MdG<g\;>=.N`NG>Ce(Oo]REE/>oOGA@[MlePn:drkPT]SDrW*tIi84BLZh?Lf#`k*d^,[@Y_2:XS.(NG,5F9s7,oP5Wb&>DZe-dn*(AE*#=]4C3boiB[H^]GfsE/*Kt*E<rlWo1EUA(qooiKAsbM;c'+n;SE3TT!OajDkC[`1okh5l9`d/.K(-l3'9i8cE1jCNO-=1ZX-G84u+VX=]^@:;kVHLVKFZ4Ih^"3Uk/Lmo!=P;qL7#K@]<<R_U]KU.'Y#-1jhWJA^*g<spqKJo5C];X,u1o7Tn-UpLO5'WMd0K`QsebCs(*+(TK=bdhI3[6/Dg*+A5;e-TOS"RaedhnIVZ_?Su0DV@$_>L5.MTgP(5i&Qur*#oX!-I1G-#dR4XS#'io`.er-9hf*nNoA*2S!cQ$qW5!s2@=dP#s?frY!1>ST&HdT>2?6p6T`J/'HB$"((C`6l@iMZ3iZB;DAK.gFOVQWooh?SMlij<.C'Q<`:l<l+2T&\VsJZZRjl5>'d<*AcZ\6)6H:7#lPR>f/^QNHS]FSq]\>@Gi;&@89ns0.P>ZU,FlD+.JG#B(UPPr5%X@Bd;GFQmlDY*"Q6aABiE_&C9\@<mLd,Ud^B*m/'0-~>
 endstream
 endobj
 104 0 obj
@@ -634,10 +634,10 @@
 >>
 endobj
 105 0 obj
-<< /Length 751 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1018 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gat%!_2b!=&A@ZM5%^XNf64BLA%1/k=nU-Vfj<AR*&,4/_5W!%oCmA5`$S()<`+t9R.6YkSf&Tui$f+a"rM1Cs$MkjL]Cr/5!sWuc_K,VN<&;&F7>P$%nd6`Z)4l6;"')(%tgW%AWWSsU_WYcPLW]j9%5G2V68btp^Ya8ZhG7ML?&.aZBC(a[D0HYF4-8u5'E?mKu71@)Mbh,54]d:(`o!b.Dh4,=J>tVVhD?n:G2:fKdJK6GA4I[1nkQ$6%:E:=a.sB=mE.n$e'@"nN-E79.rk>kMhh\KiHo@ThWM\X'u\CaVa60;"Y970Ss2#OK&8[DAVAg3nTb>Kp/\&\SQ_"f;*,g&cWscFI':u?4ui*bq!!V`tEGO?+BQ2\)mVqI778&5W%U_lMpTobW95\$!oI,\FHr4`f;RWT,cC+LGbprPfL-HIN`SDc\/e)-N0Hg7>FM6@g2L-dY,J^bjs<@57;Dcs+3Nlp"=?8$,=?bn`+Ij^K^E+]t`7(%)u^8-2=dWh68Gbm+gb@Pc%2(1JaI&mlVb/I9'D<6q9KN_[F^5]RZ@p8#gc;SfR8aZ4.O'ifC:,Bg+h`Yl[^ejj<D?ckfqC7+)V3_qaYT0oB@,LImIJTnbp>N.W$UNB%;R*"='@igVA7_-Y+u%:^I!,RUM0lnP=j@2-YR9ckJ'HEXf),<'1@nGPjep5Mo8&4)+4PR^Ua^ltqA0=kiS\FD+Ch:9(%S&%fJ#C>gX_mY'=:?9bNpD]O6Sne~>
+GatU2968Q9&AJ$CkXIXtW0T!XnrY\%V]?74!uuiDOsmTOQ;^"Go'_\_M-$sO;OG\Hg9l**qsCl`?I,13\b#$p=G4Qa;#OpXe5+s2"[`"h4ob*%/TO/o]86@.r%l)o:Pk-ha&&qc_YND#c^h+>J4R@^^33bgEJt.o,H*J2T%VE:4@S-["MR9&g:4\<+/a*-b;dti-2N2Tp[(ODj5@A(lS0qM5=VLQF"=JU#]0[u6-Vk7Zn]<b9(u2([8qPolV4Q41U'o*g.T"L(Fh'bi6^"PC%\@e29RJqPqIDPS8K"*)HDu*YHJ9:b[eK$QTNkDE&A".#r+':)c/&_\.7.o$mB"&`;IOTjR<l&bG[5+;0)o<h>UAF%?=X^WY\S/4&2gW:;*1"6/"AKXH\\uE#\t5Uu(i4@;;#T\8e?oK@ak%g9:[WF@'(`@D\LQ<`<n'WZV'Ae2Gj&"E!,/<6IhQ9:7'`?off.bEs:F4:[#JiCPrn(oFminl1pJ@R$of*-Z^`O!@4(K#N:,(/)\&ii\tP]D]PkQcM;B%sm47#u3W*H`jU4SL6Di6QD\"^b0MnI([9sfs7o?1Mh*2=8uU8;']:`Cr@!OoGM$B%<*.^bPY,%*^'T7iI#$sl00ZMIZ4G-PZb0g!ZuB&5Mn/uBST#W7^#+'"BG&53*]MilsDC($hlMLo4DX"Q/2AX<<8U);-"tcdR$54DA0Q[i9aGO;cZAf=o)t1gEb#aI^l=?S)SL4Y4s'Ye2#_!Uf*</=Un53QEX0YWkNT#oI7h41!BT`]CV"s^0UZTUcm/aF*%s<\H<u>m"A72(l]_jf`84+QuRb5D5apJ\SQ%'QqduJKpU@f2796l"8RtG=kDcKU*6!`[FA\^';)c8%fC3PEA@.PEFjP8=30Tn6Smd+h2sqCN?*rjO>1ae.16M%0H\MB`:n8mI3b1OT<u>hA_VVSDk`!QJZ(=$:4:P`e9-$ibr_jB!C58X&)"OAOu^n5Z:_=sT'=I
 ^U_fKP"cuIIj?'cd4`Z#Pr"4A/~>
 endstream
 endobj
 106 0 obj
@@ -1053,73 +1053,73 @@
 43 0 obj
 <<
 /S /GoTo
-/D [84 0 R /XYZ 85.0 421.0 null]
+/D [84 0 R /XYZ 85.0 360.2 null]
 >>
 endobj
 45 0 obj
 <<
 /S /GoTo
-/D [84 0 R /XYZ 85.0 282.547 null]
+/D [84 0 R /XYZ 85.0 221.747 null]
 >>
 endobj
 47 0 obj
 <<
 /S /GoTo
-/D [84 0 R /XYZ 85.0 204.894 null]
+/D [86 0 R /XYZ 85.0 659.0 null]
 >>
 endobj
 49 0 obj
 <<
 /S /GoTo
-/D [86 0 R /XYZ 85.0 492.2 null]
+/D [86 0 R /XYZ 85.0 406.547 null]
 >>
 endobj
 51 0 obj
 <<
 /S /GoTo
-/D [86 0 R /XYZ 85.0 439.866 null]
+/D [86 0 R /XYZ 85.0 354.213 null]
 >>
 endobj
 56 0 obj
 <<
 /S /GoTo
-/D [88 0 R /XYZ 85.0 175.0 null]
+/D [90 0 R /XYZ 85.0 616.6 null]
 >>
 endobj
 58 0 obj
 <<
 /S /GoTo
-/D [94 0 R /XYZ 85.0 659.0 null]
+/D [94 0 R /XYZ 85.0 598.2 null]
 >>
 endobj
 60 0 obj
 <<
 /S /GoTo
-/D [96 0 R /XYZ 85.0 357.8 null]
+/D [96 0 R /XYZ 85.0 291.8 null]
 >>
 endobj
 62 0 obj
 <<
 /S /GoTo
-/D [98 0 R /XYZ 85.0 399.8 null]
+/D [98 0 R /XYZ 85.0 336.2 null]
 >>
 endobj
 64 0 obj
 <<
 /S /GoTo
-/D [100 0 R /XYZ 85.0 469.8 null]
+/D [100 0 R /XYZ 85.0 393.0 null]
 >>
 endobj
 66 0 obj
 <<
 /S /GoTo
-/D [104 0 R /XYZ 85.0 659.0 null]
+/D [104 0 R /XYZ 85.0 587.0 null]
 >>
 endobj
 68 0 obj
 <<
 /S /GoTo
-/D [104 0 R /XYZ 85.0 197.347 null]
+/D [106 0 R /XYZ 85.0 659.0 null]
 >>
 endobj
 107 0 obj
@@ -1130,149 +1130,149 @@
 xref
 0 144
 0000000000 65535 f 
-0000050670 00000 n 
-0000050873 00000 n 
-0000050966 00000 n 
+0000050950 00000 n 
+0000051153 00000 n 
+0000051246 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
 0000001280 00000 n 
 0000001400 00000 n 
 0000001572 00000 n 
-0000051118 00000 n 
+0000051398 00000 n 
 0000001707 00000 n 
-0000051181 00000 n 
+0000051461 00000 n 
 0000001842 00000 n 
-0000051247 00000 n 
+0000051527 00000 n 
 0000001979 00000 n 
-0000051311 00000 n 
+0000051591 00000 n 
 0000002116 00000 n 
-0000051377 00000 n 
+0000051657 00000 n 
 0000002253 00000 n 
-0000051443 00000 n 
+0000051723 00000 n 
 0000002390 00000 n 
-0000051509 00000 n 
+0000051789 00000 n 
 0000002527 00000 n 
-0000051573 00000 n 
+0000051853 00000 n 
 0000002664 00000 n 
-0000051637 00000 n 
+0000051917 00000 n 
 0000002801 00000 n 
-0000051703 00000 n 
+0000051983 00000 n 
 0000002938 00000 n 
-0000051769 00000 n 
+0000052049 00000 n 
 0000003075 00000 n 
-0000051835 00000 n 
+0000052115 00000 n 
 0000003212 00000 n 
-0000051901 00000 n 
+0000052181 00000 n 
 0000003349 00000 n 
-0000051967 00000 n 
+0000052247 00000 n 
 0000003486 00000 n 
-0000052031 00000 n 
+0000052311 00000 n 
 0000003622 00000 n 
-0000052097 00000 n 
+0000052377 00000 n 
 0000003759 00000 n 
-0000052161 00000 n 
+0000052441 00000 n 
 0000003895 00000 n 
-0000052227 00000 n 
+0000052507 00000 n 
 0000004032 00000 n 
-0000052291 00000 n 
+0000052571 00000 n 
 0000004169 00000 n 
-0000052357 00000 n 
+0000052637 00000 n 
 0000004305 00000 n 
-0000052423 00000 n 
+0000052701 00000 n 
 0000004442 00000 n 
-0000052487 00000 n 
+0000052767 00000 n 
 0000004578 00000 n 
-0000005296 00000 n 
-0000005419 00000 n 
-0000005488 00000 n 
-0000052553 00000 n 
-0000005621 00000 n 
-0000052617 00000 n 
-0000005754 00000 n 
-0000052681 00000 n 
-0000005887 00000 n 
-0000052745 00000 n 
-0000006020 00000 n 
-0000052809 00000 n 
-0000006153 00000 n 
-0000052874 00000 n 
-0000006285 00000 n 
-0000052939 00000 n 
-0000006418 00000 n 
-0000008566 00000 n 
-0000008674 00000 n 
-0000010825 00000 n 
-0000010933 00000 n 
-0000013256 00000 n 
-0000013364 00000 n 
-0000015437 00000 n 
-0000015545 00000 n 
-0000017944 00000 n 
-0000018052 00000 n 
-0000020032 00000 n 
-0000020140 00000 n 
-0000022081 00000 n 
-0000022189 00000 n 
-0000024570 00000 n 
-0000024678 00000 n 
-0000026309 00000 n 
-0000026417 00000 n 
-0000027965 00000 n 
-0000028073 00000 n 
-0000029647 00000 n 
-0000029755 00000 n 
-0000031604 00000 n 
-0000031712 00000 n 
-0000033547 00000 n 
-0000033655 00000 n 
-0000035663 00000 n 
-0000035771 00000 n 
-0000037715 00000 n 
-0000037823 00000 n 
-0000039662 00000 n 
-0000039771 00000 n 
-0000041393 00000 n 
-0000041503 00000 n 
-0000043429 00000 n 
-0000043539 00000 n 
-0000044383 00000 n 
-0000053006 00000 n 
-0000044493 00000 n 
-0000044693 00000 n 
-0000044911 00000 n 
-0000045117 00000 n 
-0000045325 00000 n 
-0000045493 00000 n 
-0000045693 00000 n 
-0000045851 00000 n 
-0000046026 00000 n 
-0000046267 00000 n 
-0000046396 00000 n 
-0000046550 00000 n 
-0000046704 00000 n 
-0000046848 00000 n 
-0000046998 00000 n 
-0000047139 00000 n 
-0000047379 00000 n 
-0000047561 00000 n 
-0000047734 00000 n 
-0000047937 00000 n 
-0000048125 00000 n 
-0000048377 00000 n 
-0000048518 00000 n 
-0000048727 00000 n 
-0000048913 00000 n 
-0000049087 00000 n 
-0000049332 00000 n 
-0000049523 00000 n 
-0000049729 00000 n 
-0000049890 00000 n 
-0000050004 00000 n 
-0000050115 00000 n 
-0000050227 00000 n 
-0000050336 00000 n 
-0000050443 00000 n 
-0000050560 00000 n 
+0000005297 00000 n 
+0000005420 00000 n 
+0000005489 00000 n 
+0000052833 00000 n 
+0000005622 00000 n 
+0000052897 00000 n 
+0000005755 00000 n 
+0000052961 00000 n 
+0000005888 00000 n 
+0000053025 00000 n 
+0000006021 00000 n 
+0000053089 00000 n 
+0000006154 00000 n 
+0000053154 00000 n 
+0000006286 00000 n 
+0000053219 00000 n 
+0000006419 00000 n 
+0000008567 00000 n 
+0000008675 00000 n 
+0000010826 00000 n 
+0000010934 00000 n 
+0000013257 00000 n 
+0000013365 00000 n 
+0000015438 00000 n 
+0000015546 00000 n 
+0000017945 00000 n 
+0000018053 00000 n 
+0000020033 00000 n 
+0000020141 00000 n 
+0000022139 00000 n 
+0000022247 00000 n 
+0000024662 00000 n 
+0000024770 00000 n 
+0000026438 00000 n 
+0000026546 00000 n 
+0000028025 00000 n 
+0000028133 00000 n 
+0000029718 00000 n 
+0000029826 00000 n 
+0000031606 00000 n 
+0000031714 00000 n 
+0000033565 00000 n 
+0000033673 00000 n 
+0000035842 00000 n 
+0000035950 00000 n 
+0000037729 00000 n 
+0000037837 00000 n 
+0000039853 00000 n 
+0000039962 00000 n 
+0000041451 00000 n 
+0000041561 00000 n 
+0000043441 00000 n 
+0000043551 00000 n 
+0000044663 00000 n 
+0000053284 00000 n 
+0000044773 00000 n 
+0000044973 00000 n 
+0000045191 00000 n 
+0000045397 00000 n 
+0000045605 00000 n 
+0000045773 00000 n 
+0000045973 00000 n 
+0000046131 00000 n 
+0000046306 00000 n 
+0000046547 00000 n 
+0000046676 00000 n 
+0000046830 00000 n 
+0000046984 00000 n 
+0000047128 00000 n 
+0000047278 00000 n 
+0000047419 00000 n 
+0000047659 00000 n 
+0000047841 00000 n 
+0000048014 00000 n 
+0000048217 00000 n 
+0000048405 00000 n 
+0000048657 00000 n 
+0000048798 00000 n 
+0000049007 00000 n 
+0000049193 00000 n 
+0000049367 00000 n 
+0000049612 00000 n 
+0000049803 00000 n 
+0000050009 00000 n 
+0000050170 00000 n 
+0000050284 00000 n 
+0000050395 00000 n 
+0000050507 00000 n 
+0000050616 00000 n 
+0000050723 00000 n 
+0000050840 00000 n 
 trailer
 <<
 /Size 144
@@ -1280,5 +1280,5 @@
 /Info 4 0 R
 >>
 startxref
-53060
+53338
 %%EOF

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java Mon May 25 20:07:24 2009
@@ -30,6 +30,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.ArrayList;
+import java.util.Map;
 
 /**
  * Basic tool and API to check the health of an index and
@@ -113,6 +114,9 @@
      * argument). */
     public boolean partial;
 
+    /** Holds the userData of the last commit in the index */
+    public Map userData;
+
     /** Holds the status of each segment in the index.
      *  See {@link #segmentInfos}.
      *
@@ -169,6 +173,11 @@
        *  does not omitTermFreqAndPositions.
        *  @see AbstractField#setOmitTermFreqAndPositions */
       public boolean hasProx;
+
+      /** Map<String, String> that includes certain
+       *  debugging details that IndexWriter records into
+       *  each segment it creates */
+      public Map diagnostics;
     }
   }
 
@@ -310,6 +319,8 @@
         sFormat = "FORMAT_HAS_PROX [Lucene 2.4]";
       else if (format == SegmentInfos.FORMAT_USER_DATA)
         sFormat = "FORMAT_USER_DATA [Lucene 2.9]";
+      else if (format == SegmentInfos.FORMAT_DIAGNOSTICS)
+        sFormat = "FORMAT_DIAGNOSTICS [Lucene 2.9]";
       else if (format < SegmentInfos.CURRENT_FORMAT) {
         sFormat = "int=" + format + " [newer version of Lucene than this tool]";
         skip = true;
@@ -318,10 +329,18 @@
       }
     }
 
-    msg("Segments file=" + segmentsFileName + " numSegments=" + numSegments + " version=" + sFormat);
     result.segmentsFileName = segmentsFileName;
     result.numSegments = numSegments;
     result.segmentFormat = sFormat;
+    result.userData = sis.getUserData();
+    String userDataString;
+    if (sis.getUserData().size() > 0) {
+      userDataString = " userData=" + sis.getUserData();
+    } else {
+      userDataString = "";
+    }
+
+    msg("Segments file=" + segmentsFileName + " numSegments=" + numSegments + " version=" + sFormat + userDataString);
 
     if (onlySegments != null) {
       result.partial = true;
@@ -369,7 +388,11 @@
         segInfoStat.numFiles = info.files().size();
         msg("    size (MB)=" + nf.format(info.sizeInBytes()/(1024.*1024.)));
         segInfoStat.sizeMB = info.sizeInBytes()/(1024.*1024.);
-
+        Map diagnostics = info.getDiagnostics();
+        segInfoStat.diagnostics = diagnostics;
+        if (diagnostics.size() > 0) {
+          msg("    diagnostics = " + diagnostics);
+        }
 
         final int docStoreOffset = info.getDocStoreOffset();
         if (docStoreOffset != -1) {

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/DirectoryIndexReader.java Mon May 25 20:07:24 2009
@@ -25,6 +25,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Collections;
+import java.util.Map;
 
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.Lock;
@@ -344,7 +345,7 @@
     return segmentInfos.getVersion();
   }
 
-  public String getCommitUserData() {
+  public Map getCommitUserData() {
     ensureOpen();
     return segmentInfos.getUserData();
   }
@@ -396,7 +397,7 @@
    * (transactional semantics).
    * @throws IOException if there is a low-level IO error
    */
-  protected void doCommit(String commitUserData) throws IOException {
+  protected void doCommit(Map commitUserData) throws IOException {
     if (hasChanges) {
       if (segmentInfos != null) {
         segmentInfos.setUserData(commitUserData);
@@ -557,7 +558,7 @@
     long generation;
     long version;
     final boolean isOptimized;
-    final String userData;
+    final Map userData;
 
     ReaderCommit(SegmentInfos infos, Directory dir) throws IOException {
       segmentsFileName = infos.getCurrentSegmentFileName();
@@ -590,7 +591,7 @@
     public boolean isDeleted() {
       return false;
     }
-    public String getUserData() {
+    public Map getUserData() {
       return userData;
     }
   }

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/FilterIndexReader.java Mon May 25 20:07:24 2009
@@ -23,6 +23,7 @@
 
 import java.io.IOException;
 import java.util.Collection;
+import java.util.Map;
 
 /**  A <code>FilterIndexReader</code> contains another IndexReader, which it
  * uses as its basic source of data, possibly transforming the data along the
@@ -213,7 +214,7 @@
   /** @deprecated */
   protected void doCommit() throws IOException { doCommit(null); }
   
-  protected void doCommit(String commitUserData) throws IOException { in.commit(commitUserData); }
+  protected void doCommit(Map commitUserData) throws IOException { in.commit(commitUserData); }
   
   protected void doClose() throws IOException { in.close(); }
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/IndexCommit.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/IndexCommit.java?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/IndexCommit.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/IndexCommit.java Mon May 25 20:07:24 2009
@@ -18,6 +18,7 @@
 */
 
 import java.util.Collection;
+import java.util.Map;
 import java.io.IOException;
 import org.apache.lucene.store.Directory;
 
@@ -122,8 +123,9 @@
   }
 
   /** Returns userData, previously passed to {@link
-   *  IndexWriter#commit(String)} for this commit.  */
-  public String getUserData() throws IOException {
+   *  IndexWriter#commit(Map)} for this commit.  Map is
+   *  String -> String. */
+  public Map getUserData() throws IOException {
     throw new UnsupportedOperationException("This IndexCommit does not support this method.");
   }
 }

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/IndexFileDeleter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/IndexFileDeleter.java?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/IndexFileDeleter.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/IndexFileDeleter.java Mon May 25 20:07:24 2009
@@ -585,7 +585,7 @@
     long version;
     long generation;
     final boolean isOptimized;
-    final String userData;
+    final Map userData;
 
     public CommitPoint(Collection commitsToDelete, Directory directory, SegmentInfos segmentInfos) throws IOException {
       this.directory = directory;
@@ -625,7 +625,7 @@
       return generation;
     }
 
-    public String getUserData() {
+    public Map getUserData() {
       return userData;
     }
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/IndexReader.java Mon May 25 20:07:24 2009
@@ -27,6 +27,7 @@
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Map;
 
 /** IndexReader is an abstract class, providing an interface for accessing an
  index.  Search of an index is done entirely through this abstract interface,
@@ -525,9 +526,9 @@
 
   /**
    * Reads commitUserData, previously passed to {@link
-   * IndexWriter#commit(String)}, from current index
+   * IndexWriter#commit(Map)}, from current index
    * segments file.  This will return null if {@link
-   * IndexWriter#commit(String)} has never been called for
+   * IndexWriter#commit(Map)} has never been called for
    * this index.
    * 
    * @param directory where the index resides.
@@ -537,7 +538,7 @@
    *
    * @see #getCommitUserData()
    */
-  public static String getCommitUserData(Directory directory) throws CorruptIndexException, IOException {
+  public static Map getCommitUserData(Directory directory) throws CorruptIndexException, IOException {
     return SegmentInfos.readCurrentUserData(directory);
   }
 
@@ -552,12 +553,12 @@
   /**
    * Retrieve the String userData optionally passed to
    * IndexWriter#commit.  This will return null if {@link
-   * IndexWriter#commit(String)} has never been called for
+   * IndexWriter#commit(Map)} has never been called for
    * this index.
    *
    * @see #getCommitUserData(Directory)
    */
-  public String getCommitUserData() {
+  public Map getCommitUserData() {
     throw new UnsupportedOperationException("This reader does not support this method.");
   }
 
@@ -1017,12 +1018,13 @@
   }
 
   /**
-   * @param commitUserData Opaque String that's recorded
-   *  into the segments file in the index, and retrievable
-   *  by {@link IndexReader#getCommitUserData}.
+   * @param commitUserData Opaque Map (String -> String)
+   *  that's recorded into the segments file in the index,
+   *  and retrievable by {@link
+   *  IndexReader#getCommitUserData}.
    * @throws IOException
    */
-  public final synchronized void flush(String commitUserData) throws IOException {
+  public final synchronized void flush(Map commitUserData) throws IOException {
     ensureOpen();
     commit(commitUserData);
   }
@@ -1049,7 +1051,7 @@
    * (transactional semantics).
    * @throws IOException if there is a low-level IO error
    */
-  protected final synchronized void commit(String commitUserData) throws IOException {
+  protected final synchronized void commit(Map commitUserData) throws IOException {
     if (hasChanges) {
       doCommit(commitUserData);
     }
@@ -1057,13 +1059,13 @@
   }
 
   /** Implements commit.
-   *  @deprecated Please implement {@link #doCommit(String)
+   *  @deprecated Please implement {@link #doCommit(Map)
    *  instead}. */
   protected abstract void doCommit() throws IOException;
 
   /** Implements commit.  NOTE: subclasses should override
    *  this.  In 3.0 this will become an abstract method. */
-  void doCommit(String commitUserData) throws IOException {
+  void doCommit(Map commitUserData) throws IOException {
     // Default impl discards commitUserData; all Lucene
     // subclasses override this (do not discard it).
     doCommit();

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java?rev=778490&r1=778489&r2=778490&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java Mon May 25 20:07:24 2009
@@ -3718,6 +3718,7 @@
             segmentInfos.clear();                      // pop old infos & add new
             info = new SegmentInfo(mergedName, docCount, directory, false, true,
                                    -1, null, false, merger.hasProx());
+            setDiagnostics(info, "addIndexes(IndexReader[])");
             segmentInfos.add(info);
           }
 
@@ -3831,16 +3832,16 @@
    * you should immediately close the writer.  See <a
    * href="#OOME">above</a> for details.</p>
    *
-   * @see #prepareCommit(String) */
+   * @see #prepareCommit(Map) */
   public final void prepareCommit() throws CorruptIndexException, IOException {
     ensureOpen();
     prepareCommit(null);
   }
 
   /** <p>Expert: prepare for commit, specifying
-   *  commitUserData String.  This does the first phase of
-   *  2-phase commit.  You can only call this when
-   *  autoCommit is false.  This method does all steps
+   *  commitUserData Map (String -> String).  This does the
+   *  first phase of 2-phase commit.  You can only call this
+   *  when autoCommit is false.  This method does all steps
    *  necessary to commit changes since this writer was
    *  opened: flushes pending added and deleted docs, syncs
    *  the index files, writes most of next segments_N file.
@@ -3849,7 +3850,7 @@
    *  #rollback()} to revert the commit and undo all changes
    *  done since the writer was opened.</p>
    * 
-   *  You can also just call {@link #commit(String)} directly
+   *  You can also just call {@link #commit(Map)} directly
    *  without prepareCommit first in which case that method
    *  will internally call prepareCommit.
    *
@@ -3857,11 +3858,12 @@
    *  you should immediately close the writer.  See <a
    *  href="#OOME">above</a> for details.</p>
    *
-   *  @param commitUserData Opaque String that's recorded
-   *  into the segments file in the index, and retrievable
-   *  by {@link IndexReader#getCommitUserData}.  Note that
-   *  when IndexWriter commits itself, for example if open
-   *  with autoCommit=true, or, during {@link #close}, the
+   *  @param commitUserData Opaque Map (String->String)
+   *  that's recorded into the segments file in the index,
+   *  and retrievable by {@link
+   *  IndexReader#getCommitUserData}.  Note that when
+   *  IndexWriter commits itself, for example if open with
+   *  autoCommit=true, or, during {@link #close}, the
    *  commitUserData is unchanged (just carried over from
    *  the prior commit).  If this is null then the previous
    *  commitUserData is kept.  Also, the commitUserData will
@@ -3869,11 +3871,11 @@
    *  index to commit.  Therefore it's best to use this
    *  feature only when autoCommit is false.
    */
-  public final void prepareCommit(String commitUserData) throws CorruptIndexException, IOException {
+  public final void prepareCommit(Map commitUserData) throws CorruptIndexException, IOException {
     prepareCommit(commitUserData, false);
   }
 
-  private final void prepareCommit(String commitUserData, boolean internal) throws CorruptIndexException, IOException {
+  private final void prepareCommit(Map commitUserData, boolean internal) throws CorruptIndexException, IOException {
 
     if (hitOOM) {
       throw new IllegalStateException("this writer hit an OutOfMemoryError; cannot commit");
@@ -3926,22 +3928,22 @@
    * href="#OOME">above</a> for details.</p>
    *
    * @see #prepareCommit
-   * @see #commit(String)
+   * @see #commit(Map)
    */
   public final void commit() throws CorruptIndexException, IOException {
     commit(null);
   }
 
   /** Commits all changes to the index, specifying a
-   *  commitUserData String.  This just calls {@link
-   *  #prepareCommit(String)} (if you didn't already call
-   *  it) and then {@link #finishCommit}.
+   *  commitUserData Map (String -> String).  This just
+   *  calls {@link #prepareCommit(Map)} (if you didn't
+   *  already call it) and then {@link #finishCommit}.
    *
    * <p><b>NOTE</b>: if this method hits an OutOfMemoryError
    * you should immediately close the writer.  See <a
    * href="#OOME">above</a> for details.</p>
    */
-  public final void commit(String commitUserData) throws CorruptIndexException, IOException {
+  public final void commit(Map commitUserData) throws CorruptIndexException, IOException {
 
     ensureOpen();
 
@@ -4136,6 +4138,7 @@
                                      docStoreOffset, docStoreSegment,
                                      docStoreIsCompoundFile,    
                                      docWriter.hasProx());
+        setDiagnostics(newSegment, "flush");
       }
 
       docWriter.pushDeletes();
@@ -4646,6 +4649,13 @@
                                  docStoreIsCompoundFile,
                                  false);
 
+
+    Map details = new HashMap();
+    details.put("optimize", merge.optimize+"");
+    details.put("mergeFactor", end+"");
+    details.put("mergeDocStores", mergeDocStores+"");
+    setDiagnostics(merge.info, "merge", details);
+
     // Also enroll the merged segment into mergingSegments;
     // this prevents it from getting selected for a merge
     // after our merge is done but while we are building the
@@ -4653,6 +4663,25 @@
     mergingSegments.add(merge.info);
   }
 
+  private void setDiagnostics(SegmentInfo info, String source) {
+    setDiagnostics(info, source, null);
+  }
+
+  private void setDiagnostics(SegmentInfo info, String source, Map details) {
+    Map diagnostics = new HashMap();
+    diagnostics.put("source", source);
+    diagnostics.put("lucene.version", Constants.LUCENE_VERSION);
+    diagnostics.put("os", Constants.OS_NAME+"");
+    diagnostics.put("os.arch", Constants.OS_ARCH+"");
+    diagnostics.put("os.version", Constants.OS_VERSION+"");
+    diagnostics.put("java.version", Constants.JAVA_VERSION+"");
+    diagnostics.put("java.vendor", Constants.JAVA_VENDOR+"");
+    if (details != null) {
+      diagnostics.putAll(details);
+    }
+    info.setDiagnostics(diagnostics);
+  }
+
   /** This is called after merging a segment and before
    *  building its CFS.  Return true if the files should be
    *  sync'd.  If you return false, then the source segment
@@ -5142,7 +5171,7 @@
    *  if it wasn't already.  If that succeeds, then we
    *  prepare a new segments_N file but do not fully commit
    *  it. */
-  private void startCommit(long sizeInBytes, String commitUserData) throws IOException {
+  private void startCommit(long sizeInBytes, Map commitUserData) throws IOException {
 
     assert testPoint("startStartCommit");
 



Mime
View raw message