ࡱ> 02-./%` jbjbj"x"x 1@@aD|]|]|]8]@^8, jJ^^^^^!`.O`c` iiiiiii$Tlhnio`_"!`o`o`i^^ifffo`X^^ifo`iff:h,Ui^^ #M|]cH%i&ii0 jKi oeoUiomio`o`fo`o`o`o`o`iifo`o`o` jo`o`o`o`8,8,8,D1|]8,8,8,|]@  Lesson 12. Working with Two Dimesnional Arrays In the previous chapter single dimension arrays were covered in depth. In this chapter we extend those same concepts but apply them to a two dimensional array covered in an extended example. The example we use covers an application being developed by Mary which requires the analysis of heating degree day data supplied to Natural Gas Traders. Mary does not have the actual data so she develops a test data set before she begins her design. She checked the data set shown below with her client and the client agreed that the data is realistic. Further she was told that the data changed monthly so she decided to display the data in a listbox since the data will be used online. Oct Nov Dec Jan Feb Mar Apr NW 1250 1366 1498 1789 1698 1566 0875 NE 1135 1233 1566 1976 2043 1932 1010 SW 0567 0678 1101 1292 1366 1302 0773 SE 0433 0566 1002 1109 1229 1154 0677 The users need to see the raw data shown above but additional data is required as shown in the sample layout they provided.  Regional Natural Gas Consumption Previous Heating Season (bil Cu. Ft) Oct Nov Dec Jan Feb Mar Apr Total High Low Mean Median NW 1250 1366 1498 1789 1698 1566 0875 xxxx xxxx xxxx xxxx xxxx NE 1135 1233 1566 1976 2043 1932 1010 xxxx xxxx xxxx xxxx xxxx SW 0567 0678 1101 1292 1366 1302 0773 xxxx xxxx xxxx xxxx xxxx SE 0433 0566 1002 1109 1229 1154 0677 xxxx xxxx xxxx xxxx xxxx -------------------------------------------------------------------------------- Total xxxx xxxx xxxx xxxx xxxx xxxx xxxx G,GGGG High xxxx xxxx xxxx xxxx xxxx xxxx xxxx HHHH Low xxxx xxxx xxxx xxxx xxxx xxxx xxxx LLLL Mean xxxx xxxx xxxx xxxx xxxx xxxx xxxx MEAN Median xxxx xxxx xxxx xxxx xxxx xxxx xxxx MEDIAN Essentially the traders want to be able to click an icon and have the above table displayed on their screens. The row and columnar data in the body of the report is clear, but Mary was confused about the lower right corner of the report. The traders cleared up the confusion by defining the placeholders. G,GGG The total of the 28 Heating Degree Day(HDD)Values. HHHH The High of all Highs LLLL The Low of all Lows MEAN The mean of the 28 raw data values MEDIAN The median of the 28 raw data values Since this application seems somewhat more difficult than the application in the previous chapter, we suggest a divide and conquer approach. So listing tasks and any issues that arise seems to be a good first step. The following is a reasonable list. Task 1 Initialize variables. Task 2 Get the raw data from the file and validate the data by dropping it into a listbox. Task 3 Revise Task 2 by converting the text data into numeric format and display it in a listbox or send it to Debug.WriteLine. (This assures we get the variables of interest.) Task 4. Revise 3 so that we get the data into into a 2D array. Task 5. Compute the statistics. Task 6. Build and display the data in the listbox. Clearly this application has a number of distinct steps, so Mary immediately decides to build a small collection of methods that would be called from within the form load event. The application does seem quite clear so she decides to immediately write code instead of building PDL first. As far as application documentation, she will let the documentation be the code ! Task 2 Get the raw data from the file and validate the data by dropping it into a listbox. With nothing new, the code in Fig 1. below accomplishes this task. But the data is simply string data and certainly not in the desired array. After execution the list box does contain the data as shown in Figure 2. Imports System.IO Public Class frmMain Dim H1, H2, H3, H4 As String Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load GetHeatingDegreeDayData() End Sub Sub GetHeatingDegreeDayData() Dim sInputFilePath As String = "c:\HDD.txt" Dim fileIn As New StreamReader(sInputFilePath) Dim sRecIn As String ' Get the Heading line from the File sRecIn = fileIn.ReadLine() H4 = sRecIn ' Get the detail records from the file Do Until sRecIn Is Nothing ListBox.Items.Add(sRecIn) sRecIn = fileIn.ReadLine() Loop End Sub Figure 1. Task 1 code  Figure 2. The raw data in the original string format. Well, that certainly looks promising, but Mary needs to capture the 28 numeric values from the string data. Once she can grab each value, she needs to drop it into the array. First she needs to define the array thus giving it a size. Nine rows by 12 columns seems reasonable to hold the numeric data. This should make sense after you reexamine the report format shown above. Ater spending about a six hours Mary arrives at the following code segment that works as expected. Sub GetHeatingDegreeDayData() Dim sInputFilePath As String = "c:\HDD.txt" Dim fileIn As New StreamReader(sInputFilePath) Dim sRecIn As String Dim i, j As Byte ' array indexers Dim HDD(9, 12) As Single ' since we want 1 decimal position accuracy ' in the averages. ' Get the Heading line from the File sRecIn = fileIn.ReadLine() H4 = sRecIn sRecIn = fileIn.ReadLine() Dim sOut As String = Nothing ' use sOut to build a string to display For i = 0 To 3 because we have three lines of numeric data HDD(i, 0) = CSng(Mid$(sRecIn, 5, 4)) HDD(i, 1) = CSng(Mid$(sRecIn, 13, 4)) HDD(i, 2) = CSng(Mid$(sRecIn, 19, 4)) HDD(i, 3) = CSng(Mid$(sRecIn, 26, 4)) HDD(i, 4) = CSng(Mid$(sRecIn, 33, 4)) HDD(i, 5) = CSng(Mid$(sRecIn, 40, 4)) HDD(i, 6) = CSng(Mid$(sRecIn, 47, 4)) SetUp sOut so we can display it. For j = 0 To 6 : sOut += CStr(HDD(i, j)) + " " : Next Debug.WriteLine(sOut) sOut = Nothing ' Reset sOut sRecIn = fileIn.ReadLine() ' Get the next line of text Next i End Sub Her code is straightforward but a little bulky in that she doesnt use a loop to grab the 7 data values in each line. When the data are not equally spaced an inner loop will not work. The good news is that she has the data in the HDD array! As she reviews her code she realizes that the HDD array is defined within the GetHeatingDegreeDayData method. This appears problematic since HDD will also be used in the statistics method. So she decides to change it from being local to being Global. To do this she cuts these lines Dim HDD(9, 12) As Single ' since we want 1 decimal position accuracy ' in the averages. Dim i, j As Byte ' array indexers out of the GetHeatingDegreeDayData method and pastes them after the Dim H1, H2, H3, H4 As String statement thus making these variable global. Now the HDD array can be manipulated by any of the routines in the Class. This completes Task 4. Task 5 requires getting the statistics and placing them in the appropriate cells of the HDD array. The first thing Mary does is begins to plan how she will attack the statistics. The totals for the rows and columns seem to be straightforward and she thinks that as she makes those passes through the row and column data, she might as well find the row and column high and low values. Finally getting the averages shouldnt be that difficult. That should be enough to work on for now, so she postpones handling the summarial totals in the bottom right corner of the report as well as the medians. In fact, she decides to get the row statistics first. Below is her first pass at the output which she immediately checks with a calculator. 1250 1366 1498 1789 1698 1566 875 1135 1233 1566 1976 2043 1932 1010 567 678 1101 1292 1366 1302 773 433 566 1002 1109 1229 1154 677 1250 1366 1498 1789 1698 1566 875 1135 1233 1566 1976 2043 1932 1010 567 678 1101 1292 1366 1302 773 433 566 1002 1109 1229 1154 677 ============= Row Statistics Follow =========== Total High Low Mean 10042 1789 875 1434.571 10895 2043 1010 1556.429 7079 1366 567 1011.286 6170 1229 433 881.4286 The row statistics are correct and her code is shown on the next page. Imports System.IO Public Class frmMain Dim H1, H2, H3, H4 As String Dim HDD(9, 12) As Single ' since we want 1 decimal position accuracy ' in the averages. Dim i, j As Byte ' array indexers Dim sOut As String = Nothing ' use sOut to build a string to display data Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load GetHeatingDegreeDayData() GetTotalsAverageHighLow() End Sub Sub GetHeatingDegreeDayData() Dim sInputFilePath As String = "c:\HDD.txt" Dim fileIn As New StreamReader(sInputFilePath) Dim sRecIn As String sRecIn = fileIn.ReadLine() ' Get the Heading line from the File H4 = sRecIn sRecIn = fileIn.ReadLine() For i = 0 To 3 HDD(i, 0) = CSng(Mid$(sRecIn, 5, 4)) HDD(i, 1) = CSng(Mid$(sRecIn, 13, 4)) HDD(i, 2) = CSng(Mid$(sRecIn, 19, 4)) HDD(i, 3) = CSng(Mid$(sRecIn, 26, 4)) HDD(i, 4) = CSng(Mid$(sRecIn, 33, 4)) HDD(i, 5) = CSng(Mid$(sRecIn, 40, 4)) HDD(i, 6) = CSng(Mid$(sRecIn, 47, 4)) For j = 0 To 6 : sOut += CStr(HDD(i, j)) + " " : Next Debug.WriteLine(sOut) sOut = Nothing ' Reset sOut sRecIn = fileIn.ReadLine() ' Get the next line of text Next i End Sub Sub GetTotalsAverageHighLow() ' Iterate over columns to get the row statistics. Dim MONTHS = 7 For i = 0 To 3 HDD(i, 8) = Single.MinValue ' Initialize High HDD(i, 9) = Single.MaxValue ' Initialize Low For j = 0 To 6 HDD(i, 7) += HDD(i, j) ' Build the Total Column. If HDD(i, j) > HDD(i, 8) Then HDD(i, 8) = HDD(i, j) 'Get High If HDD(i, j) < HDD(i, 9) Then HDD(i, 9) = HDD(i, j) 'Get Low Next j HDD(i, 10) = HDD(i, 7) / MONTHS Next i ' Let's temporarily display the data Debug.WriteLine("============= Row Statistics Follow ===========") Debug.WriteLine(" Total High Low Mean ") For i = 0 To 3 sOut = CStr(HDD(i, 7)) + " " _ + CStr(HDD(i, 8)) + " " _ + CStr(HDD(i, 9)) + " " _ + CStr(HDD(i, 10)) Debug.WriteLine(sOut) Next i End Sub End Class Well, given she has all of the code for the row statistics, she copies and pastes this code below the row statistics code and revises it to handle the columnar totals. The new output is shown below. 1250 1366 1498 1789 1698 1566 875 1135 1233 1566 1976 2043 1932 1010 567 678 1101 1292 1366 1302 773 433 566 1002 1109 1229 1154 677 ============= Row Statistics Follow =========== Total High Low Mean 10042 1789 875 1434.571 10895 2043 1010 1556.429 7079 1366 567 1011.286 6170 1229 433 881.4286 ============= Column Statistics Follow =========== Rows below show Total,High,Low, Mean values 3385 3843 5167 6166 6336 5954 3335 1250 1366 1566 1976 2043 1932 1010 433 566 1002 1109 1229 1154 677 846.25 960.75 1291.75 1541.5 1584 1488.5 833.75 ===================================================== Again, Mary checks the data and it is correct. Below is the code block that she added after the row statistics code. '=================================================================== '=========================================== Get Columnar Statistics '=================================================================== Dim REGIONS As Byte = 4 sOut = Nothing For j = 0 To 6 HDD(5, j) = Single.MinValue ' Initialize High HDD(6, j) = Single.MaxValue ' Initialize Low For i = 0 To 3 HDD(4, j) += HDD(i, j) ' Build the Total Column. If HDD(i, j) > HDD(5, j) Then HDD(5, j) = HDD(i, j) 'Get High If HDD(i, j) < HDD(6, j) Then HDD(6, j) = HDD(i, j) 'Get Low Next i HDD(7, j) = HDD(4, j) / REGIONS Next j ' Let's temporarily display the data Debug.WriteLine("============= Column Statistics Follow ===========") Debug.WriteLine(" Rows below show Total,High,Low, Mean values") For i = 4 To 7 For j = 0 To 6 sOut += CStr(HDD(i, j)) + " " Next j Debug.WriteLine(sOut) sOut = Nothing Next i Debug.WriteLine("=====================================================") ' ============================================ End Columnar Statistics End Sub Next, she turns her attention to the statistics in the lower right corner of the report, namely the G,GGG HHHH, LLLL, MEAN, MEDIAN values. Each of these values fall within a cell of the HDD array. Rather than making the GetTotalsAverageHighLow() too large, she adds another method called GetOverAllStatistics() which will get the first four of the five values she needs for the lower right section of the report. She realizes that these statistics pertain to all 28 data points. Two ways of obtaining the statistics are possible. Obtain the Low of the already computed lows, then the Highs of the already computed Highs and the average of the averages ( which isnt quite correct and if you dont believe it try it!) Another method is to look at the 28 values and simply compute the High, Low, and Average using the raw data that is already in the array. This is the method she chooses. Before continuing, she decides to display all of the data in the array 9 rows by 12 columns just to be sure all is well. She saw what she expected and then computed the overall statistics. Using the code she has already written to high, low, mean value she now iterates over all 28 values in order to generate the summarial statistics. That code is shown below. Sub GetOverAllStatistics() Dim HDD_OBSERVATIONS As Byte = 28 HDD(5, 8) = Single.MinValue ' Initialize Highest Value HDD(6, 9) = Single.MaxValue ' Initialize Lowest Value For i = 0 To 3 For j = 0 To 6 HDD(4, 7) += HDD(i, j) If HDD(i, j) > HDD(5, 8) Then HDD(5, 8) = HDD(i, j) If HDD(i, j) < HDD(6, 9) Then HDD(6, 9) = HDD(i, j) Next j Next i HDD(7, 10) = HDD(4, 7) / HDD_OBSERVATIONS Get Overall Average Debug.WriteLine("------------------- Full Array Listing -------------") For i = 0 To 8 sOut = Nothing For j = 0 To 11 sOut += CStr(HDD(i, j)) + " " Next Debug.WriteLine(sOut) Next Debug.WriteLine("------------------------------------------------------") End Sub Task 5 is taking quite a while to complete, but finally she reaches the last step in this task Get the Medians ! To keep the code nicely organized she adds a GetMedians method. She know that to compute the grand median ( the value in the lower right corner of the report, she needs to get all 28 values into a single dimension array inorder to sort. Then once thay are sorted, she will take the average the center two values to obtain the grand median since we have an even number of values. Remember that the median is that value that has as many values on the left as it has on the right. Mary wrote the code below to compute the Grand Median. Frm_Load was revised as shown. Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load GetHeatingDegreeDayData() GetTotalsAverageHighLow() GetOverAllStatistics() GetTheMedians() End Sub And the first part GetTheMedians() code follows. Sub GetTheMedians() Dim Hold(28) As Single Dim n As Byte ' -------- Copy 28 values into Hold and find the Grand Median For i = 0 To 3 For j = 0 To 6 Hold(n) = HDD(i, j) n += 1 Next j Next i Array.Sort(Hold) HDD(8, 11) = (Hold(14) + Hold(15)) / 2 --------------------------- Now lets show the data Debug.WriteLine("------------------- Full Array Listing -------------") For i = 0 To 8 sOut = Nothing For j = 0 To 11 sOut += CStr(HDD(i, j)) + " " Next Debug.WriteLine(sOut) Next Debug.WriteLine("------------------------------------------------------") End Sub Next Mary needed to figure out how to get the medians for each of the data rows and columns and place the medians in row 8 ( ie the months) and column 11( ie the regions). The regions had seven data items per row and the months had four data items per column. Also, the client sent her another sample data set that they suggested she use. She decided to build another routine to handle the medians and call it from the frmMain_Load event. The code for the median routine follows. As usual we suggest that you copy the code line for line so that you see the meaning of each line. We find that simply reading the code isnt as effective as copying it with a pencil and paper. We also suggest that you reverse engineer the actual code back into PDL . Do this on another sheet of paper. Sub GetTheMedians() Dim Hold(28) As Single Dim n As Byte ' -------- Copy 28 values into Hold and find the Grand Median For i = 0 To 3 For j = 0 To 6 Hold(n) = HDD(i, j) n += 1 Next j Next i Array.Sort(Hold) HDD(8, 11) = (Hold(14) + Hold(15)) / 2 '---------------------------------------------------------------------- ' Get the Four Row Medians '---------------------------------------------------------------------- Dim Hold2(7) As Single For i = 0 To 3 For n = 0 To 6 : Hold2(n) = 0 : Next n ' Initialize Hold For j = 0 To 6 : Hold2(j) = HDD(i, j) : Next ' Fill Hold2 Array.Sort(Hold2) HDD(i, 11) = Hold2(4) Next i '---------------------------------------------------------------------- ' Get the Seven Column Medians '---------------------------------------------------------------------- Dim Hold3(4) As Single Debug.WriteLine("=================== In Medians ===============") For j = 0 To 6 For i = 0 To 3 : Hold3(i) = 0 : Next i ' Initialize Hold For i = 0 To 3 : Hold3(i) = HDD(i, j) : Next ' Fill Hold3 'Debug.WriteLine("===========================================") 'sOut = Nothing 'sOut = "===" + CStr(Hold3(0)) + " " + CStr(Hold3(1)) _ ' + " " + CStr(Hold3(2)) + " " + CStr(Hold3(3)) 'Debug.WriteLine(sOut) 'Array.Sort(Hold3) 'sOut = Nothing 'sOut = "===" + CStr(Hold3(0)) + " " + CStr(Hold3(1)) _ ' + " " + CStr(Hold3(2)) + " " + CStr(Hold3(3)) 'Debug.WriteLine(sOut) 'Debug.WriteLine("===========================================") HDD(8, j) = (Hold3(1) + Hold3(2)) / 2 Next j End Sub Mary tested the above code to be sure the medians were correct and after a few trial and error attempts the code was correct. Finally it was time for the last Task Display the report. This last task proved problematic. She was using VB.Net which did not have Report Writing features built in. But she thought she would give it a try and at least get all of the data on paper. Below is the code she wote to generate the report. Sub DisplayReport() Dim H1, H2, H3, H4 As String Dim RowTitle(9) As String RowTitle(0) = "NW " RowTitle(1) = "NE " RowTitle(2) = "SW " RowTitle(3) = "SE " RowTitle(4) = "Total " RowTitle(5) = "High " RowTitle(6) = "Low " RowTitle(7) = "Mean " RowTitle(8) = "Median " H1 = " Regional Natural Gas Consumption" H2 = " Previous Heating Season" H3 = " ( bil Cu. Ft. )" H4 = " Oct Nov Dec Jan Feb Mar Apr _ Total High Low Mean Median" Debug.WriteLine(H1) Debug.WriteLine(H2) Debug.WriteLine(H3) Debug.WriteLine(H4) For i = 0 To 3 sOut = RowTitle(i) For j = 0 To 11 ' sOut += CStr(HDD(i, j)) + " " sOut += FormatNumber(HDD(i, j), 0) + " | " Next Debug.WriteLine(sOut) Next Debug.WriteLine("------------------------------------------------------_ -----------------------------------------------") For i = 4 To 8 sOut = RowTitle(i) For j = 0 To 11 If HDD(i, j) = 0 Then sOut += " | " Else sOut += FormatNumber(HDD(i, j), 0) + " | " End If Next Debug.WriteLine(sOut) Next End Sub The output for the above method is shown below. The revised data set is shown above the actual report output.  She did a little research and found that GDI+ could be used to help build a more nicely formatted report, but it would be a time consuming process. Buying a more powerful version of VB.Net was suggested and rejected. She then remembered a concept covered in an early course she took. The idea was that you could generate data and send it to a text file and then import the text file into Excel and use the power of Excel to format the data. She also knew her clients were heavy Excel users. The code below was inserted. ================================ Send the output to the Immediate Window For i = 4 To 8 sOut = RowTitle(i) For j = 0 To 11 If HDD(i, j) = 0 Then sOut += " | " Else sOut += FormatNumber(HDD(i, j), 0) + " | " End If Next Debug.WriteLine(sOut) Next '=========================================================================== ' Send the data to a text file '=========================================================================== Dim sOutputFilePath As String = "c:\HDDReport1.txt" Dim fileOut As New StreamWriter(sOutputFilePath) Dim sRecOut As String = Nothing For i = 0 To 8 For j = 0 To 11 sRecOut += CStr(HDD(i, j)) + "," Next j fileOut.WriteLine(sRecOut) sRecOut = Nothing Next i fileOut.Close() End Sub The Excel Output is shown below.  Mary was surprised at the amount of work it took to generate such a report but considered the effort to be a meaningful learning experience. She learned how to break a multitask project into smaller tasks and then expanded those tasks into code. You might think that she should have started in Excel immediately, but the purpose of this exercise was of course to cover working with two dimensional arrays from within a programming language. As an extended exercise, we suggest that you copy Marys code character by character using a pencil and paper, key it yourself and run it. In addition Extracting the PDL from the code is another beneficial exercise. Remember that in the real world first the PDL would be developed and validated before any code was written. Depending on the needs of the client, sometimes the PDL step might be omitted.     IS 107 Introduction to Programming Page  PAGE \*ARABIC 1 7 s t u v  06uvyrYRIR@<2h>CJOJQJh>h>5CJ\h>5CJ\ h>5\1h>5B*CJOJQJ\^JaJnH phtH jh>CJUmHnHuh>B*^JaJnH phtH +h>B*CJOJQJ^JaJnH phtH 1h>5B*CJOJQJ\^JaJnH phtH (h>5CJOJQJ\^JaJnH tH h>B*phh>B*CJOJQJphh>5B*\phh>B*ph5 ] s t v  12;^ -^`-$^a$-^-^ *$7$8$H$^*$7$8$H$-$a$^ij')*9:=KPXZsx{},47?ABEknvxyϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺ2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH uh>CJOJQJh>5CJOJQJ\6,c<_X78VV $*$7$8$H$a$*$7$8$H$DFGLTVW_8;ѷѷѷѷѤѷѷѤtlhN2h>B*CJOJQJ^JaJmHnHphtH uh>jh>U!h>5B*CJOJQJ\ph h>5B*\mHnHphuh>B*mHnHphu%h>OJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B* CJOJQJ^JaJmHnHphtH u;^aqstz}!"(*V^#%&,/69ailsu$ ( V 2h>B* CJOJQJ^JaJmHnHphtH u2h>B* CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u=a > p 4!x!!!"""#"$"|$$%%(()E): "( Px 4 #\'*.25@97$8$H$*$7$8$H$V Z @!C!J!L!Y!]!k!p!s!x!!!!!!""""""""$"f#}#6$ѷѝѝьrZr/h>6CJOJQJ]^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u!h>OJPJQJ^JmHnHu2h>B* CJOJQJ^JaJmHnHphtH u2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u"6$$$$$$$$$$$$$%2%4%̷̷̷u]@8h>6B*CJOJQJ]^JaJmHnHphtH u/h>6CJOJQJ]^JaJmHnHtH uh>B*CJOJQJph2h>B*CJOJQJ^JaJmHnHphtH u2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH u4%_%((*A+B+I+T+Z+[+`+m+p++++++++++++̾ePePePePePePePePeP)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u)h>CJOJQJ^JaJmHnHtH u)h>CJOJQJ^JaJmHnHtH uh>B*CJOJQJph2h>B*CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH uE)t)))*5*f****A+T+i+++,+,{,, -,---9-[-----3.*$7$8$H$+++, , ,,,,,,+,/,2,8,:,;,A,D,K,N,{,,,,,,,,,,,,,,,,,1-4-5-9-=-@-c-f-v-x-y---------------ѷѷѷѷѷѷѷѷѷѷѷѷѷѷѷѷѷѷѷѷѷѝѷѷѷѷѷ2h>B* CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B* CJOJQJ^JaJmHnHphtH u>----.2.r.u.|.~.....././2/`/d/////////00000"0W0^0`0m000000000000(10131H1K1R1T1o1u111111ѷѷѝѷѷѷѷ2h>B* CJOJQJ^JaJmHnHphtH u2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u>3.G.j..../H/z///"0D0m00000(1?1@1W1111&2t222*$7$8$H$111111 2&26282O2S2j2t2222222223 33<3T33333333333444(4-4C4G4U4Z4p4t444444444ѷѷѷѷѷѷѷѷѝѝѷѷѷѝѷѝѷѝѷѷѷѷѷ2h>B* CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B* CJOJQJ^JaJmHnHphtH u7233<3333404]4444444455'6V6666667N7{7*$7$8$H$4588m999999999999::!:3:D:J:T:e:j:m:t:v:::::::ѼkVkVkVkVkVkVVkVVkVkVVkVk)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u8h>5B*CJOJQJ\^JaJmHnHphtH u2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u!{7778M88@99999:3:e:y:::=;I;n;u;;;!<0<B<i<s<<*$7$8$H$:::;;;;4;=;B;F;n;r;u;;;;;<!<$<+<-<3<6<=<?<Q<U<c<i<l<p<<<<<<5=8=9=>=!>:>ж궒z/h>5CJOJQJ\^JaJmHnHtH uh>CJOJQJ2h>B* CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH u2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u+<<<<5===>>@1B2BMBwBBBC,CSCCCCCODDDDD&E7E*$7$8$H$:>;>e>{>2B5BUBXBjBlBmBqBBBBBBBBBCC CCC C'C)CcCeC|CCCCCCCCCCpDDDDDDDDDDDDEϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺϺ2h>B* CJOJQJ^JaJmHnHphtH u2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH uh>CJOJQJh>5CJOJQJ\4EE!E&E2E7EaEfE~EEEEEEsHtHXIaIbIIIILLѷѷ敂jUGGh>B*CJOJQJph)h>CJOJQJ^JaJmHnHtH u.h>B*OJQJ^JaJmHnHphtH u%h>OJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH uh>B*ph2h>B* CJOJQJ^JaJmHnHphtH u)h>CJOJQJ^JaJmHnHtH u2h>B*CJOJQJ^JaJmHnHphtH u7EYEfEEEEEHsHtHHH!I@IXIYIbIIIIII#J:JUJyJJJ***$7$8$H$<*$7$8$H$JJJJJJ;KKKKK LLB*CJOJQJUph2h>B* CJOJQJ^JaJmHnHphtH u.h>B* OJQJ^JaJmHnHphtH u%h>OJQJ^JaJmHnHtH u)h>CJOJQJ^JaJmHnHtH u2h>B* CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH uh>B*CJOJQJphh>CJOJQJPPP"QrQQR0RGRRRRS"SrSS T(TsTTTUbU~UUV)VHV**$7$8$H$*$7$8$H$HVdVVVW[WWWWW(XoYYYYYZ6ZVZvZZZZZZ([y[[**$7$8$H$*$7$8$H$\S\o\\\\\\]F]]]]]]^t^^^^^^_Q_h_i_z__**$7$8$H$*$7$8$H$___8`9`EbFbbbbbc(c=c|cccccc"doddd1eYepee**$7$8$H$*$7$8$H$bcccefIfiflfmf.hiiiiiiiiiiiXjYjhjijҸҞҐi\TTTTJDJ h>0Jjh>0JUjh>Uh>5B*CJ(\ph0h>5B*CJ(\^JaJmHnHphtH uh>h>CJOJQJj_h>CJOJQJU2h>B*CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH u2h>B*CJOJQJ^JaJmHnHphtH u%h>OJQJ^JaJmHnHtH ueeeef$fjh>0JUh>0JmHnHujj-/1h;0/ =!"#$% 1DdN* Z  C 6AChap07_Image01bW0yzq30Dn+0yzqPNG  IHDRDsRGB/IDATx^ }类ZiY!zLӉI`AG> $ ߝ%6!g280†6$x$$$D7J]j6khRוLM ԡlbjK#Gg }j6 kLOc{j]1jFɱ0^5S EəsJP&wcO1rYKUg2},adFO)Ӫ?) CZ@&:"87:΍?:⭿^(לߌ2ei՗^U&^~ي$9ԡEY=T W׃$9>dMZc s7}4p4O6NarWIٺiنC ;?B%[QQ)2)j>MF`.\Ơ*%2:=?仟Pehk١R K~7$)X֞Hfh Q8w/2'(*e1I1nC3٬:oɭ ~j%y; f2jvt.ّRzVmDL<FKJu~$ؠO W`M *w.rǾ#/\;lܯ`y,7H.Ax¼ lz|UaΪZIJ ;_4^75W3iCpfL@^ 'Q8d ^~lneC϶Rg7܊JkO+vJ\L5j֯z^},WtI)m4덉Wb2CKM)>z墓  O7;o-l H2ryc9#|E;c癿5/΢œO!B7 )@O6\ hoR1ud:[aiaijE >̂<陴=83i&0j:ͪZm/ރLa~O{$lђꕎ9kU{_~ٙʥgW|lߟCȷQ|(dGyQDKZ(\Uٜ&a/_Syx{=_w꾭|ȃm5ڲJ'ՙ.~!3=|!=D>+ap@@`'P6n%4K;x]̧>QK7Ҳutr3X YK'/tԟĶ'7Ҋ֝_]rۿKo֏Fk; li7顧%g֝ǭf|=ݫc_UJʛE/Z[gO?:cOɫ&+ϧ95Rz32 1_vaߺssǣ먥L>eW'|Oe1|nӡ]?`RN/adm *ёm^6#@@ iҤAv#9sdKh-r*=VodU=^6^iGL[g&8YN;}MlFҖ/?UK+d UUƨ3JP#dG=,jVj**zeĠL[zn]ns -laiqi?027oЬzw߬^{gsZE;KsV|^xgSϧ9cyS[}+z3[0Yj|1ӝJ\YF!"W{,έw>Oo^Fy֬T}kx $@s+t,ͳ l 48;aV(ZFl|1gB>зLODa#eٍ*| cgZl}*d=_蠇I ڥ4?dшԃ9h=;nK5&&9#Ysy??_ z=JY<4,fjWׯW]0ū Ƒ}~漯: ~Ştʟ? /yLc^ɭWÂz@Oඪb w&.eȞ3[GA-V.`;YT- Ja@|~ ΄G&, CFYs[QskZ|Kg锷Ц"P{ٛjg1eOi먹wך=ݙro*O/<\`0MN}_{-qR nyy+O>s,o<7 ձKOx~K89wxrXnЄ'e97Xqee 17h -@xN&{'%e;zR W92R QUˎ$= Ʉuf#fjhI)~:deV] v ߒ$bʃafVkXF'*y;H;qVbcg'iGl^2;;7TL ԫu$$D37m7籢?{M^i'dn<P^0khVyjsW<]/#i'}1F}g;OIۄ3O'`^!l n^Y+U ^]0z4&YhI$;h-9jz&\ {t yMзL(zNʃn躶keҗp<+p֜wJyF"WF76JϼӔKv}(a TLa#)SL9wB>ګ6F!ƃ瓥GM.h ξ!q{Ôbc{r8̓D򝘋j&|˗޹}O,g O^=ceEzx>$y#_x',{>}#ﭿ~*<%m@u/H4v+ -xU!mEgK. YΕ }˦lL\Ȅ";3aO^c?sumYt|qcj=ܿ]k9$KǑa>=J1ڎc1ir]7|!Z*KEnyO^{R=ndhH`Nz^ܔ8N!z5cS\]_fv,mf9t0O <#/U}pkX7K̓GGϰ4[7 oZ>~OlءM/X;={X[:7$Goi߮]W"mtdH/}ÝSMh0AHcX*W\W˥^%YLx| NZC#Z6bMi˽O6]O]|倂2GVh*!ħd2ǩ}-6LKjVk{WN)ҳoO=B?ri}]oR+ܨsVyVg;ganٗ׏<6w _΍ÌE҅Vd78˵ƍ@ &IIn|F}qcM1Uݛ3o<,<{?uiM@ 6Ull0n㉡uϮTZiNjUQi*HUͫZѴ1ck`oL>g>kG=od1 >Ҹ1v`y+n5`t {F'Oc/mE;cjjTVuЖb* >-.+#d&eR3oT6\{%KK40n%kAw}j*Q'Uce$wϚ8p+׽k@ .YR?m@  @vcD#&(@@@}@@@ &%{  i @˼ihp@@A##@@@  ;ʨ#$dG"F@dAO   Q#j@@@d@L ;bb@@@ ;@@@b" ZR`IiLQ ڨ%hnT@@@# @@@  ;R̨$$dGZ6@*@vQIHu(ݎy{O\0gx &^Жq@@@`e-+5EJqi؜dU?e   0\uۣdGd,_4&0&c    ɎNbmd/$y;(QA@@[a| Ȏ0`'a]c0~k(ia[gnF+V  @&Ƃ G_PG.Sz-kIĖ")N>jT$;($Y.($[DH0ghdG JZ6 5!tt !B ΆZ{^8Mr&Y`cx4) A"'"_- cAۅ .B+2@vx-o?QF׉bЗZ7>6xq GE[hRGY m4߷mAmT1؄g8(:CۤZ4(Y]ő(ζ(@%0ׇLeEIn~8jm] [ɭ愌 ر IC"!#f@Fve{دvuQ6s^&EJwْRGřU-a9da3wmJV])Dp7l%9 aȎ0ȴu1 USqnʸ4];PFEƑWpq=.cUq4^lsE Ȏc @@ N^μ8m@Y !оNn/,AkFH90hduV&^GBHO[   eB`QiA@@K ]Jy=1X!"ܫ^DaV|y;U„U @vhW'Iž܉na|Nsf#} @ dqlVAյmp3m {,ά=6>1۲A&v'q%n B $\cMr7GM~>v6V[n"u@ =Ԣ&CP'uk7GȄ l͐5BrN^vX7wtkVℯW;.[e! (XbMXΐ@|Ft V)Iwkv=m|'B у^c*&JyMyMUDr#Lmz)0SNmVV^vUdd҉n6c$IDH)a ;̈́Ns}Ny"GRzwM ݞvs@|RvsU]u{o lNyB:(Y-bQi,]ئ>&9 KnqėoRyʗ.D> 5(^upN mQn䛒1ZijIB;}d%dk/\(YW4I B#mõKޭ9:XP5>xù5G'(҂$@eye:y0,uTQJlJ n@:a9lsm:e_Bh@i69.5T>>9;Bo|!cz^vF;DCۓ >1Ø$3Bv0Ph@@"i=]3D]>?yN4氄2oGs.rP^ܥ(r#!K#z9<5+pp`ÝU'D ==֦#}ԷODU}|{uNC4@@yǿ!4.OsX 9i\, Dī,脝!tO 0I9, )y`!|_$$1 Do}̞eB״W?LvNaTy SFEII3,vP^yOͰ R -@D);U1   4Ik  3PvܥtBB@@@ oG H   Ȏ((" d} 5zmWl*(iR`>pg@c MMr^!ɍK$eLwAߑ׏+rD- F@IJo5M0IJkOF?`ߎ0iA`fXvX[dGjnv |H Ȏ45*   &@   0 mJ!;fxSz   P5.1G1   إ4Z@r`%9mK@@@` @r@v$-` p]Jt7:  1 ]a`("It@vŀ@vD@K){|  ) @B.)hhT@@E,j  3dLn] @@E#Qc@@@`&ɭ@"4VHDsHȎ42   ّf   ihe@@A@b7dx  ̜ I@@@fe-*346G,; |XV^AA RP4jFd (n,2PYqv5D! Vjm=_tz0XQG ^fZLw{ ?XYzT';K$;)}cfdV}" 15Z#_`'`'Ư&/Trj*, `&K^ =42ΓNp1 ؁W01Q *hU2*b(IA@@@@@@ ; @@@:Dwt,p@$G(=)}JIENDB`ZYDd-GGh  C DA,Chap07NatGasImmediatebXڗ0)z\y[zXI1nrXڗ0)z\y[PNG  IHDR SDl`sRGBXIDATx^{mI]ڏskcfx 0 Xq$X'`JDyTX`ЊIJ -*TJJ%UyIEq@D 0328a޹wX+}~cs8ίoZw~f /C#P =B<u! @@@@b@@@r|ݵX7L5({H&c4D 0000`&̄rL|Re;0Y)KzO,?śrV;9ͅ9zqхww;M7?G^y骙#G''Lnh<͚`   X.Lqu.-Gw1z橓7G&QqH-&z]YhZO,Ќ*|^N 1:00000gBQhs%ثnDt(^W_eOƫ8BGWoGo99rUCkYkDk31t1ʊܽ4VrFuyO'r6w{1e9=94Gnz] hJuꎸGBQX@3!fBL6^TQ5sdޯz)[=WJnŷ-l,e9+,._}3+U|ӝ,7RQD?݄Dmu#  kL g<.򝌶ƞzGDŸڊ9oW/ܨz-ƬV?sä*QT䂲zzjU?or]_?-䯭Ԕ~u@a#`J csG-bVbV4. x6   "t?IjC_W)'ӿ4$X=*ʃ z$Z{~okl܈dH NT1U+1 j9֢_0yra   `%xhjvj\?obV $٫G\;zM(?Xt͋FTaz/_d)r(i!kjBF2 ghj9m/DdW?_hl/+RS~hICN/):BYfeqxd#|Ժʍ Q69\jWzg?vY\WݒzNS9jv~Z'UlP}ymIA@@&~&Gxhs(ۙd;oT?٣["axޗ7OݯJ4Z@sO4i#&7ꦏ~l%plLj>/^'J{@ZZV+L<ڶRBo(zp@@@E`4LhU|tDBkSN{S].ƿ{Ar2+W_}]h%O=rNvlwOO﹁9Y9YjUHwW?9_V{;n^e]㟩/Y/U ԃ"<8lVچ@@@,^%ve|ѱ㫧h.g{W~eU|Zg>!m!O?ɂq}QF'j>W}_-iիɖGeKeF_-}owK?hF*)fbNCg]IV=gӣGGGvU^ݥWY%@SzL[<-r#H'\    1j0U$̐DϾ&lW|xuIYHztۤD~}vuKʐK8'k9pѨʐH =LlDمx圾c2U}rzf0-٣o;](HK|<{[g#.jQqAw騠GG2/w_NŶZL\d17:R}>n3}^%P%=dn0قfwGꟴ)rCG'lgvlDkEe̯*Y)U /C(aZ=h4.R}HHi6%@`kO7)}1-}lB)o$`шW)`G5nztI/}S/yοn:=pz=f|\]暖{7   Ο{G%GxGV   #@?̗f'>}W>W3W~O>+n]|%iuAzTG0o\>9=}jzM7FS?T^WbZoJ U@l^/eE˲z-yveSDJVQ}mw{#jHUKqysYڭLIH$Έ=@O E Y/z_J®mʼnJwiJ6Y7pbUgg6@oF'@жڴbT-ٌ_wR%]o/oio 7%f #TcHzYw:G#~Xo9穸[u2*D1%Wde r az؃@<FrE{;!+|Yr+Gr1$# ڹ<BXQy>$o=$f ?3}4=}^򤋏52ktLG/~y~U'X'|Z )l@@@Gңrr; { FV t2=xh~A    Pz4VhthL|Lg"}7=J&T   XOܤ0~$%_w>V9:;$h[X}5#NO۵Զc  mX鑹 Mr:9Y[ ml/ɣ3&%WUjAV1$,AKͨ#PlVzd8N3]Kr1ݨUiQZV &@:#%H֯㬭(tFaz$q-6:*3wxD꯵uC=18FjqJ֣ڊZ#P@@Eyz:%$ k(0R^g2lߣHoHI( JazZ11uv;LI=ƍm]kuIƵhEp yYn80aOԋxuw^A@Lu]I| V1}Eg< X$%k,Y)tېdm*%Ev A@`ԧG:^ݳTwsER)I.JHrbw f$WQkeA@` ԧG[]fץGgmf@@@#   H    &˃Ϧl'\N   NH>Vc=HrFQPI &A|1<͉ħ\mH!  vXukA=[%ڀjqVtȼІL7ǫB  yG;YQ`!Bzй\ҾV[Y$$l)]Y)FjPeA@` $NBzUt_HvDE8ƏjSO²|I]RQ&%\j!JLr[ל9tXF`b,ovOP=Xz0V{Thu\l5*4L>WaKL]nYF "UkB&A#CȆd-n k;¡W[ @@$\.>hGM&ף^[yhH~vL+5Ʉ)-ژ@KG󙩲sFg 5DmSkР". mkFGmKrteCc  m#XMAyz7n$~Iug38j!\* IRyJי$~ s$Y[h@%  #y},^փqk"w#Պyգ $|ת\a^ oftZG)"PlG[nt@@@ңzF*H,@=G`   U(ϼ`UlYa8q?ѿ _x_~r쾿=g'f[Y{VvңΑAa@z4l@@u  ңa@@@:'sh@@@` ?P7ljh\ZP)>NI8k Q'/ lj٠N@zʲ^a/NKC;)7Ai!Fv=6 ;)A`{ =_Ey^ԊeOX1[9(U^[JSM<9gNy>+mNhSD7~th 6ң'z3ʄ<Ƀ∺I6 cmY̱8$E/W$Ӥʄ@orf͵7 GIԬ[s鈯@zXRvaCM 4i&7h$ujR)]da=UC6ȷq:k mgѯ u]D.zRWVS^[S T['SN㪳2U~\Bը:O%TeZV\.p֮z̮ie7n4 xtr:nWCkykFE7JV@zG$`7t:Ϻ@B@z0G5fDa0$o@ 8 =Bpu! @@@@b@@@z!@@@@GXɷNN^T2k[_hCY#kSh & ԝ'`$S{~[/vWZ@` AKZQ@ze`nsD"; #moNQgڅ4  =2XbDy3cPdH@"&j3Ðe#u뗙P],8 %f RV\=JUl<AQ&gno]B^dUҺ+3Nk[짶cf& Yk$%J@ 1zنy$#&>:յk=~[KW|@8"a #G=G `! [T 0h!"XGv ZjT{NuUF[%9 ƖlyM kT` <&9 Q'^@# &`9ej͕'LM+XlG[ft@@@O,A`3 Hejqus$d n$D% @zd4kL@FWrWlTZc G=G 0 "Mh|F~\/AYҾNU'ʢ@zl蔀\쑉%o;i\hҸN6H/4!\ajRu2k$5uQ@2HDE XnV(ʐp,*ʂV@zUFgA@'P`M@z4`@@Am ң;@@@ h@@@ 8hT+ˢlMlQ7'n~z$Kը Vj[B*C)b\ո.)/+Ln^; tmhs麌f:MwFHhwoVї*0YjavfCcՠ"71uA7Ufj=*ۖ!_qLgRoІG.(҂.ޯx4PYdԞz6+!,9<^2w]<>U}I$epJżQWTB]m0$ʬ68]m6I?dѩz!c׿鑺$H}]K2җz%:rF) _ڵ"g NBpB@JmI ZMDݯN<Ȅ~yʓ 'U1Xj]dS" ،T5lcz+6+uf1&:bXj29m"kųw]|9az9 @s|86LW5}`KI~ӯY۞Yt6Nիp86Iư-9s@fC[CHZ'lF޵֬K)HQzt>LK߭j$HPJ^jT NYf| 1vtN$ xSڜiY =L&+;V5.w8iO'> i#Ü~k}G-FG@R-zЀZգvăeQ0F[ =B`u! @@@@b@@@z!@@@@ꑶ#S/[1U 91r&uNƬ֯ c>:r`Nӂ T׬G.UN<$ϤG&N`WFrɄ Z' $0`'`GY3ǕVs|Y{KnPssM&K ty*dEM5hCXӓUhS.J9z&w7z)xY#02PEEdvFA?4? 3\W)f(Z3yĆ{8a&٣&}bJAmb0#"O)Ya7@_$9xIiۮw .&6lu׆uEm`G(/颟o+rIx_ȋQτ<Kf1N)r2$/JAM"fTE`ԃm5+Gg^H֙iV3< Ϊ=g6NB:eX`#V|75A'S`@ң$-XX3xorqժSYó`JrL_gmv32;oH&"*d~7bf|JEZ:_L-њ. zN/U=2B i~+O-%J(,*!Rx~~ ,~oPaKEk-F`\I`AҎTkIȖNRM^iSd. ϯSƽJ/>bTVI />'|Ib:eĚ 6O<1]ؼIIߠmu~Iߣ\/"`B5̪&IL"$K?Ȕd5 ) k>ZbD6iٻNkpR]c/)H.#f085 fT s-v wI l{g@.\دegZdC#,L d]x.$2RdqȆ"CgڱO~Cu6|im귅Oxj']0$փmhq_GeU`cVevYf1f2ЭI"_yVV,)EP\NO}XZĘHKF`KztѵSD˕.z3nij%qL=.3N$k6b?5Oy ?%i=KZ57@A|òz`;i4j2!T;ƴTV[3zei]$t2UfS/aMk<~:Ŝuz|Y= O2V6ZW? hCdjgh Plcw}<{WܙegZdC<#,gc| ELuiG1xegaYJM ~Ov]xE2_5T빓KV?ߎգ@@@@:   "=ZoB=@rH#E   MzA@@`GN\@O.S!gg-QeBfNYGV1k1JE$ıd|.1D3 rZ-x3S81O~CTMLA!;k=['FO3rgpuoSQ.OKqZ-eԿ_ͪH5"cDt%%)Ujc TH6cƄJ0+ӌCJU+A o/^oVahm||P {u 61*.x~Ck`qk4;M2Y5 `}zDPKg Et_GkJjh~{VmQ~{$ZUw̩#>jкw2$U?X2Y% 􈚑 k\dME#v$UJ#ن;o$@W8=Oո.nAC j٣ Ji]@VDm|t|6tF82pvFx2Y%l}z4"I5h=m'_~{.w (4:O_߲3I_ɿ3 8OdFXwC[WjgOzH&ҿ^MK;5a-Zu$^pW0RiiQc|A+yJꑵ仸 yuZ7&ŮqdMCg<= i-r$Ro&kxwLg IAncu֧G2N*/uFD\jnHN"RUK|XtY6w?L|7:Niqh|\f:Μ]=&hzpAN~.Oߔ ULl7.[5iO",gPdq4O|&1,WPdtZZЙvgZɸF(VE^%dlRd,XIyuvYi:# -N<FG C+   Mf&( l6G_@@@ l1A   `GnT1c7 ]z6:Ӕ uU|T!{ĉyZ:cZcə:$~߻\'9<9jfAmN‘?uN_ԧG$]lA|D9jAc~FZWI3uVZT4|-N>:eg<] 'S+y !I948uqۘci8e$'DaA;`ʍ\.NI*~xPɐV;TV셕"/tv 2ZC.5+'7x Ůjh'Oĺx`mC0p<.yԄl%rG=`m/Nꑧ'Ѕ xufT>@8.P '<|H$ř 6UZ+`Ϳz!:|փA56BlnhA)`Y4&G]n`i@ |Pd<$Fr9 #gfcw*.j 4KX/{/:]Kq9˧[d%ZQ;Xռ0`zF7$9x}z$'NjA͠5y΋vLBaɗԯN3.I8ո:kYAtfii~$(N% (CgpAA+E?䟹"uR>=z-պ-N0Ř*N![f|.D6"S YJ|ț7 t V[]|{cQ{)YPdq>Ȇ"Cy3t\dqȆ"wuYcI)8_ydCšsM'+B-7*=lxR+3@onA Z]ֶQQ@zE@@@`+TQeUe2=\WB^HBh@@@`  ='   !Ђ-&7/Gd@@@ !G a*M h>$$P_$%  ϗ_ t0>=`)\w ȭ Ö&"sӣ*>GtJQ =@@@SH:ō@@@O}   @z)n4   0|H#(ңNq1@z4|A!ȗeAI_N#JpV?<#_/==ʍ֯7Tqmkk<5h_#,rdd-l-T/Q򻩖gP(Z3 ?8=RO{s] PSFL *.}:UV_ѣ:$~VIliߒȰ i;Hߙu1J>=2/t ȓ_z7%uS6u-Om'aU9NS?Vn&ߡAhw LFle^yY-IM|: y==*k^{.du{Aj-:*["uZ.GvlAYHu68} 4'@BXɐvq&*WϾք~mT3ז/iJ4JM`S;GUVC<5#)\i&Hg2ַ+= 0 __1n?ĜR4ᗤ &uֶF0yZ\S;'Y G&SRdmx3R}ğA~(~Z/"xeٯ$\ɯYT4ߺjF*.65jG۫A|2#ACkTtrJ2W96굵6!?TIr.:sK5,#yuZ%|1:eȍu/`߭:zԐ& %Py%^.Mb/ΈZUqDYl]fԯNk<[imJ_J{x;O@O^ڗyͭ.2 sI'qrwqnx[y%kKR0),9G|hm@ ~I{*+T kҨP[=⬙slz' G"j:jE?؍HWW̍4xZ]&L\RB m梢,j~F􋾇%M_+,= y-mu]ߘ=:?~TڗE_\+Xu5Ǥ:pL=ÁɏmXh0ĂO$-Krm.P) =Y_'_R:&n:A#Ol#t4 7" ԧGrPm[AӶ.IbRO%ou D̠1i+7;Xj*NW=8ꅧ+]C홪q`P|6ԧGm^w El(8tj3-uWgg쬡~yF/.2]Ъ4+tԎ{-rXqldr/_u'AAkm3jOVm٪?ϫD1=MפGG(J ;yh\TTbt{L5̯eiENnZuM5Pin83yȰA5%OѻKvg8W2'iAȨ󦚭k48Ml\uZu&)cֻ]Wg3EZqmg>eG4X kJMVx_ \+!Iv0IŌFk,v*$+^'.:4ӕh% My2;$0t@v?;R3 P%| 6.b$s-R,ʀM <&:2CM߅`kRYiOS9އɓluGAdOڂ8@JE\WR@ggL:[Aif&ZVN:^K>^L$7QQVX-NlǛrM^ ׊BruIITGWkN[kꅸuKg ̙駤-I-zQ)S08%LVoz\ܗN+%N+.Ǒ #3D5%?;o?.+CzD{/NN[]rYZ$T(uj2 $IE|yo5.9dg8rghAu'.}9/|IKAKެSYYX>{į_˴cO_",·PdqgZ “?"-;8ny2g4Q2ʼ(('[f"dt~xhFGM{J+! 䙶רm]x_~w::w /\{+Wgo^Z%5evy#fa   ~|v]'%7?Ox_ud:?3}jz^~o_s/@Ο{_{l^=cd nԉ#)}z=ٕDz|]uJ4   GnThtјe_D{3=͵4B-   CƸHC~[Hm+ξ=H^b6\ݩRx2Er85ެUۍN+O//V~kXgm= k]lnx詟i EUG7RGI R'/٪ʡQ'iޞW8_o |XѴ &d=H3L8+h;ڹ2}ύnS90uŒcGgM~Ey3(~% [go6ORC&5WjeV{+A0MVm\'Ho Z2`1bTQ%X RcX;欸')_Xq`kqoj"FO{5/hTPJ.Mh,"Ai=Ț5񑵥b˔!H|h(2{iODĬf %w'>bGԞ5qMֵp ULm=qU+RI3Vޟk:ex$LviBnCgBR)u{ƑZ*>:@cYq3ñ'3ǎ>zԑ#'vvLv'y>?|ȬQBiӨgY2&L Pj knݬHoZ!3w~WpzJc理K!~ xfa~Ξ_~g4>}n#?{O__~^`#rRIG.)I[QV%jCnڄh.hɆ:en穓4ߴZ6VB:E 0_YFNH-l~ |[ \רVIm iNИ$ KYQ3߸9>:}rz靛NMo:yƓgNS'vo8תqQe<׷]5HR)5TKJZ)YVSą,zSR3i:nIKc|.Kxh,KbQSK|c|Ccc<=C SbD, @x}8U(fEV,2_γ"/\2[,im%΍ Esl(8tS Ie"G6Y3"-;{dq~_kh(fb/(+ZRe?Ϯ}ʐ l:KWLIiLPL3db'@`x""ʄʢʇ[7 ۹gң Tt@@@ ?"9}!(boT%FYw~ӏ5#=b 5z?w{rgZ,r#:"~eQ V   $P=lTo~VЯM7RHjnje{!܈~Sn($G<$z=DZ-o<ȐH~M<~ Y Dl/=TD\(Uzj ~SQu~(A (A@@E=~jU^7QJt!P}vPңaj@@@Ecv^흽 XTvCZ=]m{!=q i6+W})rFg|6Z'h13&1{Tӫ/|ɻn_s/@Ο{ώ^[9g_{ˏe_䙳Z_H8Ha   08ܹo\ػtpmN_0BҊM4ENF7ؽO%H^O`p$ @@@V$㟈]=Wx<7o=;@@@Ofٲ=ۻ<盖;pg,Nĉ3<gf%pMY$YvmOzg.^ʍ(+dUrիlm~/=?q&4N(7fzTuTH}o  @@@B P"af_߈kk#nZ::/}j$@,`   "вZxPb:Ne{k 5z܈^wq&^[=š `   Gв&6?)ܘ78Q {w,}} ;T(A@@@`g*=::J0|A~u'ӤG>Б#IXs-?&Szt}o{    `2مx IL"xӟJٿ=zh7oVw֪=MGn;Ba   ɮuLWs#5xoLjz`\fUm$?ۯG   ĒA!Vadng=ӖufG\HJ\;3 ;PhY̍g5fFT_ˢH:Q"[mF@?ϥk/z    J`4Y=uDȇykbxC*-C:ܩI|7@FY*8N3357N6{l~h#Oz4?y&jrgG'K '\{?'O󘮻x7x f    <YG|" k~˗/_U"c@}\QFcNyw]ziT= :Iºk}LJ4ZMN.NhAticjtPOMgxj*?W~kv]7GjkcܵkvLmtA7[Ϭ CW*#~S<v\udV}>_SmQ}j3'^=[_y߽JG^ب7ï9+ۏ z L08~^ P8[;IWg U7rīN6mN[z}|5SP\Xu]8RbScrک>M6mv5^mٵr_rˮQ*ב6!9H#n>~ѣG䇿UCuq҈tŖl3H$޻v_Z?pC]W9N rBWOQfW?n_͟O|[~cMR~6ѩ?-? 6oou}3i*^tmЈՂu5XM)?}ře"O&oکoVnw_RCj~)v@/(7/SeZStnϳz&9\p0pM{h1;:(  "P݅oIt)>W]ѵ$.H)x)J#H]j+JZglێ7ex?`KD<IZsb҈$iYJ/>dDu$v/_g'i5kN9R--~Ͻ_#ih+k7.@mR?@@` @Ze%V[EbR[. 1F}Շs?z+W+oy4Wg;^nC]mC oA?#,iyQ_f޺r:5#B3 ]:FN^?wvavҵ65~~~חMգ?u.Մ_> Wv"7,V5TE\j[ ;F3mirv2e4mԿJlDv.F6Rع;h P#7.o - '@6@q& u*tMȖ4 Y6l)K]Lg/K^iX$3зRhx^#g>1oޏmM_Vִm]׋Ј4X&_9ȗP3[kT~) _~sHr_4w-Ƶso^Y 5_>?i_~-aS,i}{1g10o.gt} rz+AYiBN>W_w*EArF @竛0y^Nzy[ѡb!UV0݌*wSL/F]ii4R-_a2WTW.Wήߖ/??Y rekݛi=Iw.]=L*ROY-.ۋdzK#VlY^7MP]򄝤6g;epev_[[](TNvٜxuSv/;a#tJ]˫4;XɭJϵ:7($uXjzFZ4c{%+_f>˰VUvTO~: @=HNWhݘZl8%aZh%f{6Qi<ƹm۷ѕG^@Y$}.ި9Hn|I_Ϯ_xW^_wWiޜzk\ۯqڥmn?xvQ.Io LW { +w3;i\nK AH)R+m6^ݔ˶qmQ;0>dBW+$">6iqvu[kQJ&^Z0Ri4BR0':cZ2|?[ͳޑF$AI~ h>ʹƵZzTGTD^.p&4м㺪څwgB۷v}Y"/Kx^Fs]ow]T+[w~E#vC:;ӿ6545ŮoOo]4tn[o_$[<*N6U疦: ^e;[Ƶe%7K(Z7ɾؾ?xM'?r':_I>KSp~U4G3ztjR$y%~ d7_}_luT#pk'~dr͵s;':VC|y ±s6^;7}Sս6_\_paOP mPb\Ijqؚ:@5qn}뤻6.N֫VF>7ݹ+E.-"'tƍ R+w6՛>TЌ]X^5ЛiU5fSiVW<4XAnR>ukpKSP;5Nynr>8݇   k>3gtns`Myd]ܶ6si5/۽쇾TF~鷫?t'~k&%~2:r5H:ֺ+Zs!7.nu͞wzY$yKϽEc]#Vv:E&*d҈mxM;&_7U֚%$ ^o3s6mS_}h3x/k3A['TgV;>pݯAh4ⅵVjfƪ5|"i?uߺ FueHC WXN C\}MWg4}~"$##}ƍ۵㫿 O.νuoqrdru}uMOujJ,m\/ѼH P*L?F]e]\<{0>퐄?Pj y/moL֗FWXl:7Q+@2jXEY~Z`UV~vդ~tm5'G    #fݓ+7503OgG+k+'_1آ`u ^    G`&nD   D7|C]0'>q{>@7MP     m__zɧȇ>B5Ļ]=xwK҈$k/Zz<ʚ.gQo*xuan=~KOWvus{Hv`.ѽb۽]GKYR! ǥ>籠  0ʡzaTAkDDuh )cJLfoz*A9HLsYQKBGߑɢ5Svp(/a tȣ|qGH|M՛nNj M~H0NN-uFID4럌13(Tply}hJ =oJ =>Iv+~q$EДBFa5sK$DBF*  0 I^ {';ujĎ܂Y x4buA@@@&r[>dmeS-G]CyvA@ ]wGBk<,6#5c\Yj@`t҈+g^p@!{NHl?mv@( Oݡd߲l[)FD׬NJ{  g 0Dʹf)&k;tM Y|]7}I~<.ut.TGf7FQ˂S#nk8r<=?,?%=dG$H[wq6H]?ug5XIzd܈K(ߚzIE|D;]UQjr.eHj<~+tW)wwZTYX7nm( ,cIܑ*C7Z_s]go9 %@R&/?Trwo}썴aa,DCꎸaSug$xl ?8z_ӗQ"muĕ+S%>& q@;8q!"UHn>WgOUG''m y43D9OV+$&UE|%h'nsjJ# Y?v,R ncֻ'LxFPoS  z'TѣGKK[;H҅O&G'#ߣK1*qawDgcЂ}Y 9lh߃?iY'[Hw;NP=Po{1lv9W$$1"L uI:5h%%5ycLJhvq bʹ\Zs!"?[ za+RP9v*kkӞ4|-ѡO<DES3W4>{x]*U@oҐ.(jS?Bb1& :fѻ5`ID82N%RG{'ڪQ3ޤR[AHg=w%G7ze$3 L)]Yb_CR.׋?=Oa+Khʡ1X󨿁v-Dv8I/ d"UKfu{LTꐯ37_jhsu[W݌IČSiDsMn*GV?6(k$ƕ^ݞ pz`ȑZޮ)h oYN%bDť/> @IiiۜI9Id!4O_:>k%BK92t5oW1R{Q[}Zwn HT&E/V ha:dA KKmWoyuY>"Ӽ^w5A-+˶YUQ s>I,eKSDDhxnJ_谥>Gƞ˚pmjN%<-:OVShĭD|q)O:Ou?#hHos*]wnG ٤dk>[2\JruEX=|vР"#j&R$3YW>=ZՊsn )oDPfI) Q8*^tP\zlJ>Q7(J8*D#V,^W~R~Q@| +6KJQ#7,o48L7[ZaP59'8+T@窱~q+8?[_kۥzo7!%ɨ-` ={-rĭfsy}xuJ]yN/Lq,(ˊdN5O_m:% 1C-(~SJ酈|7(SMU#JRgZ7%ZD Eh\3$tAi<"RbPUW.l;wјP+)QR2 cU[4BG6Hu@P6lUeO'M)qLbVuA{nHq7,23Bi0aA~b^X#WɈ}YWQ =HM~7ɦbd ܡ>dguc\oT@numa?9_|يg͚,Y$l5+MO x"hvuzW:V|L\]UO}F+>cI9)px[dkugkI= D Y9p\{3T{;BA0XyRґrVw%*Îu qx2m|Uް^O\I>PaSy k+'fЈ)nbwJ9WFHϼؚ~,Чs/_ʟo1WװF_Ftz&H~?1t.;ЈJi)ֈ`*~ba>Iy|>.h"3%=$Aę[tfaN?%L}g 7ҤnG|~odIA#|GJV(ٷ,!Bs,ЈAs(:2%|,z32Z5boPiJJ-K?`ɾej3(f噧OfP@!' c$ ҈t !|Mf5@.kVr5;  ),uA@5+o}vp "&y]'D'/s /9QUB'U1   ##G]}:l@@@@_kD~-!   0[J׈`8[hA@@@GԈe Dz+Q(@>EkD5_\n!^aޒ%X ;=y],7,@JsfiX@$\~"C@<YjDˣ8+qQt $A@@@ ՈMwѷyLB5E    0^ЈI}'[Aed C}`N'ץѴW?B}=r䣻ܶrЊ='{GzńOck+'[oшo}_"@hJ(^#>‹=&@@@@$˛I1r3G5n@vD@a1iGnB7XϠn UO80u(fYQ @@@@ 7!|$jPQ@@@@IV҈nyw)ȾN]]dwMd< ]'[ᱤ4.kٝ^fHȌsKJp&'G(N} ҈D#5wQ]7ĆgD,[)CZhBQ$jDʡlhVNwn.H#F4UCh\Gqy;Mis,FRON}@(Gnۏq5"L(44$=;$!@5 U>=rkn[9ZͱY&Q{5hGyLk}^e#|/84b.4v?5#0"(NіBEW*iMuͼ d!$Wk0EPfTT Xs!*|DoQMrv@%0L4k`nxĺ>U }&}D[#:C.,QLqHǂwDǛ*#:ՙe&(m:}PW}>F A@@@$DhD aEaL?aD|=9S$eQӇzDR.WZtDՌI;"uvBȘAB~uXz™L&xήQ#֚7KuA@@@`Z $ XD1{0    yĢdӈAgA΀hDD$ N.Q$VW3hD\#>\)&@~q3$"g;Z3z@@@@ @ա5!~>bLu5ЈЋ@@@Ȧqk   3E#Tw#X"L(    0 Fݓ̓>KOtȇ?=a4q@r՗ڒ{$A*stD{أamqq1(@\^^Nq;o[#>S)uyDERL(    0 F?4     ? q-V@    0HՈM" (.WE   3H U# 2    SOq#sG p@@@ #0m#*exy֚!{5A@@@<4"by @@@FF`G"6#KC    Pi;Q6. 8&a9MT(4b@@@f@i#NΟ0zwOvN6/x߽d}H" L ιwmKH[NM&k+'+4O>%iLR晧O~II YĎU@@@@ svQL49    P>F,? x   &Pbi#:#<@ [j    0ji΃_ZT,gQORtΊ*jyv,FpRZG]HՈ# neK.5^#o74:gyj."dT#Y!#y#W JChDuJ" 0S2ޢ3J:g%[he^ٴLKNm6M7EMq#Llꎙd %gpky4"Gl 0vccϐ-HK3یZ8w:AQ;%m6# %b38J@@8 kC5EQ_M &O砊cvE/ORHhs P@`@#B/#FFhj:0 }rKn*1ڜMiV]ؔ2 C(]Fn$ Ek=#ǹ7ъZUq v6"Ģ6[6b (mMՈt&~m\RN舀R-ZeYװ]MVex4tۮC:{vR?HYHՈ~EWAlͧfuXVfza]_yʰWMÆe+ÂސSvbNJvMen]uѨM:Rø;遒 SI FJ. @ 3CaU@@`8844L5;UH7mLu7&8;{=I'l_x{amqqj---EE(@sםsʙ$.=|RG+VVO?Wi'|JҘ3O8#FuzD]T d9gW_ΨEk$HsK   C(DF !P95"=#I0A@@@68A@@f@68;)@։թJUgO "=P@`|DDSƘ$ =#;'gO-Ačݹy2Oq} -uk=a׷MUZ<780Cڹ( G F$bz 6Ui6II[T- U{&JڂQ'ghBt7"A# 3K@35cN k2{i@gA3Cb47TA'q*KAjD %ę3tVi2u}NhARJhh 7P@L*İ~jDTE)\2lwu,hXbbC]HS)E  `HՈ`  eV(K-qRbjQN4)Çpȩ1$h"

(@<?dEGQ" dЈ"#S    P..ȣ @Fizm8 6A{~oEOcI  F1-̕tF%f<^%;8 xk}RKFN7x#CdbފA-fS L U#;8 A #[7ᙢ3i9U]mW3|c姻d|nôL̘i0 !A#'#^2  J@'{Ƅg ~"ss|Ll=U(d١OS5"-3E pɓp53uvG}9ʙ_  `T؏h@ G jD,.=?K Oje*>[ӉN*HՈ֬_) P EXU̸DSFRM%7z\SH J;$U# @;{ &}N]Mbus ^?:Ag8K:3fNb[A 0J[dȠc@ ׂKp; c M e(m:`RB/5'=|';&o}^{2rٷkTkii)nwU+@@@@ \^^N1rםsʙ$F[N#VVO?Wi'|JҘ3O8#F~nl(B<\͈}D0)qy&1{L< VaPm '9rF(Zk&A-iH#@"LҮNKՈ$#+S@@@S~Dxx>uw c,Og`Tӑ!F 79S2ԋhsk/"Ϩ:,*< wOϥ K+-;%Wіی"ǕE!~ꌤGNI,*MG D~$POrjp(0\eoUH0KPr:VL&zn>LrcܰB \#*0M ;h&=3hDDKjP3a7ec]-y?A1}Sczش{p πVnؤNY]N{W쌪]~Wˆ3{g_ΠqbXQ(i:8wb4D-dt Ca% /w=;l;"-..RU!Js`a@@@#Yt]w޾km+g^8*g]wdtw^x,)i_Fr0!CeAN@PnS'3J3z'dTh=0PnjV{}ͦTw&ywasA#tg)'ƒQkoS[$0|D9J*# {a ST2U@4\㱽1O+e P!ad[CumS/v* L.㤰6hw@B)&O#n!.4!487<L\CGSJdXɘ zUphqU2s5 {0· ء#Q=F,7qtW:@1jMVV[n)ӱ2]rل:jLn{q굂gk!5"=rCڨg'LH+5P2JC?%:bPˏq AEΠ#ZE@?"5 yg@h?uGeҿX܆]Xzb'~Zw14U%KK,˧Z$A~ȸ;A4 ?=B_i#NΟ0zwOveo}^{2;wDX[\\ZKKKuB^Rw2@G蜻}מVμ$qrx?z4׿z)H#>S$ey4ʰ.H "hDWY^^^XXgE`RM!c yԭcNsvQL4[(   3E0FB    ?G̠9+?P    @F730    3Tسqٷ';MKݍ @@@K#wNQ755yLr`#\ ,jCEg\BbrSvI f=%% *]/r>VI oY3@ O9awqeۦ1(g6G>Ӕq'F:H>`!腿[%a΍]<'),)t<1ٹ }ڌ#l|Gwb!4eM {M$'G1.9Lz %Kn$Rw9J)O/a~2JK5I" 8JL72VIՈ]ڔ=~M.s2Y_ :zCgiSo{hG08) ՐoQ 5+,.8쒒^8Tjg4F.z_³Ÿ!WoX%v:H]߻^ |cWδ]˽u:t#!&Mmovht2!%9%g8~KJ:bDpӸP,!),1A)҈Ja g RM\Kp5#< a$ĆqS]ߊBiG+'iq3H%쒒8?v2:$1jı\X裼- F+}QF}C({tU0;զd3]k#=ANoz5hNM9bw@y{CaWQPw$rB?%iۀ 8L>>'vxP9t䅓ye8?կX}@oW%]:K:'fSjãH]]5vYE{v x:w3Ӂ‹{O&#"ZZZ]4 A@@:"Euܶr%K-TcֵՓOE'4&)'?􈤤Qy.TUȫqX^^^XX #kp5#孳B 253[B),5hiQ @@@fGF    0JyDdf%8     p%THP?"A@@@B vCF ..v*@" J!S*!"}sG_SIiKU`AR@nYҳQҺfy;]ulyyze`JMÂ|O0OI'G!@#3ږ{;dDprJK;/^=F,b>L{7,NKu%K]u D4wn?@;K6U 55[} x`d] -%y/DWI ZwA)c{(O ه0 ǝCFMJbM!ՎBFtBF+9gYL"2f'шSG=ՅZX,OEվd=PJ:{ksoY1g\`dFr*iEo_i;iF$pꚕ\iE6oY@~~ ^MÐrU"4"/RtuCv ik/wќUE;&%w䘽]l:P z7MRLq$h2zҝS =C|+MdЈ%wFJ)f9)jPT&)٪##GnyAiTt Eu}nCrLlFƍP;rhv{.S~g5xHQ8OMOTy73HęG1]36 %I'NWXqLR题'F_y^nM^q9JhzoGr>":D?GaNyKJ:0|3B9]`cT%^y—3=T[n:ø,rw]c@CPdY"1D;sz^{`ԏ*.}cޡ5jX-Onpb JՈdn# td3CQU vUغ ]m*i{TRQ,C'˽r]]pg<9:I ɓ}KaFxGVoR~gLEydЈyYkE^w$jF#8Ը7Gy yEΌ')!g#2䃫D0!3{q匊t,nϔl;6C}`NZޢ;l#ia\tnl5Z ?ݜ) rwU!&2G"Lgg9ciVI*|udGsITJHBGUDx42ԚF9UOyJ:&//_ojD$U#BPЃ~_-J[zSMrZKܘVjWúԺ=oz4ңybڙ{,uE{o*)O,m#<r wAmrGW yНq4psa9bގ0̦j~Vr =!S3rԸ;4 ?B˳ 2ۄF,FՌ3"=ԸrFE:gJr6 bi&{O\=|';is>‹{OƼٷkTkii)nwU+@@@@ @ιwmKO[Nәk+'+4O>%iLR晧O~IIL 2V!JS薗2\vD0)qy&1{L< VaPm '9rF(Zk&A-iH#Y PdF!8 A@@@ T1. P @@@ '?H~sc<4rZ/M-8x|^!S7y7^NgKdRr՜uzґ II'Ʒ c\&Țurg%H JM =e v* 3RSy: 0jv>:CwxRp+Xiod?*ȬJ]ħ }t-*y 9ci v,Z.ۦ%=.ytA(LcE@p/L@izaZÏGl5]THJF, 12pz/8{$oP֜ջK$ec={^ 'ӧWζSNRPm F1!Yш4T6(^CXY;r,NM~6͈d<ܶ&'LwydvzmSHү2w ( zGcE@ԩ .2զ01gZR`\6G(`)4=ځ[%c%΍$M. P R\e;C؎쭓O;[Ch2u8QzdlP !n>5u}rn#4 imɤ*껄0ZCwvY{2 Wv 0Cܚ :+ZG)\]"$Pn38@ E?ΊF7~)qƝvTP?پ3t'=f Wm5Wg\U`vAiޔfzZyDu<%;"`¾*4zi4kB=t6AB j0ebbў`WjU?w4c4kIFgh\pfMfm~]#g;K7t0Ow p^edj\Ǿ?z_4&PXD:(p5cƌ&b~O15Q픞B] ,*'ݓt[},}H"vW*ͥed9wy=yIs? i bmeSzEF|ɧ$I<=")ii: .T*#vgjyyyaa;-لIQ!d Sc!?UXx,TɢsήQ#֚Iz {@@@@`vVH#T!X@i#j}[HTEetRh(yRJ҈@%m+(    Mȑѥ򷿡xHи~q&VbBfqKMA@@FG |=toW(E(̃t†<$)a5QrM%qADo66%˭%u{Qq ~͹Iz%ogM@vGZR]r Pa4?,peD PNz45 87;:Nw}*tY,8Mǒ7B 7{% #3B@>h@وG.A {uI^1eᛚ-*mFtn\3~٘+7$:Q| %:;SљYz?ڈxޗ+}nnk?57PK]%'ɸqᅳZk5b!Q%6{^qz%(lSL2suW8a+A_<[ (FD,rBKv ӏv}\R)Cv<%$Uqy / 2kq V:AIӷ2+Nh_GXD '6Pձ$iEGݴ "e$A@DK@@N@>( rjD!bVkKO{ryOv#"ZZZ]4 A@@:"E,,,7^==z4]'z)=:Fg"'?H5PvV-&Z[^^J4Ou`RM!c yԭcNE$i(Zk^9RQ @@@f@ 4p>b+"#:$G{"W7G|A   AyD[ H4A    C R {l7Wcu@@@@ @z)eESjm8[o ^4\2m Ͷ"RB!Ƚ)LTHܜ%%Mĕ M }s)Vhn+BCCy9J$RGSKs 'IvZBWuQJ1 dܖ Iչ1[rnΒ3jaM\[Ch;ϝ Ki0,ѵ$[QXw8.:s\vݹ؃cN~ 4rvuS#hD;`GM_j #EV\c6TX盔Cpb ts$4$"B?H#Z1:. ;CJE3#"X/I;\gӹ(1lYp|~IAF @+΍roOh\7,H/ zׄ3%)j pZ?oc(hLbCr5ܚ`QV,[ZB/TGhM?*ɉܖ]F׸ݶ":HhFDi0Jw5H sjD:Q׬R׀>a,grWP^NW;_ܫ=tTlԵ/. y^}cSYva? -;2ۑ6jq~Ё4[lt}? (R5!{hI`R}r4x grӂ]v;rVtrW2tq~= J]gyafxv]{n{i:}{meSz"ēOx}z$š}.TU$SM1Hɷbp5#孳B 253[B)\:G.ޣEk+g^4'-4b(     ?ίknoGEPZ'ZY4[(   {FJG$8Tl[@@@@`p#6 . RJ=.r$5hxЫBo0 Ͷ:/ʭ$,t'%ZE0{#$rF'L=):G#=zdAw 6^{zጞ ]m'm=A-7T P⛪+0(2@3d!_ ə,#c' Lڒa UfyID>b^aF`H$OsZ-^'<&VB Esz>?XDŽ]cVŦL%mJK@lm.F,9/YCȯb6]e@<;0;a:",eL1Wδtr1O,NTF MTJ87gbR~/(º]c4&oIk;?wd|3Uӽj}REs6G/52uzųqW:& & y;-5ak7doTwM!;b_~/rĊzci;ܺߕ0CG+s#U,MxճtH0~ ;4Dm9>z*[?C6֠;I۸K '±֮Ylϱ!0CGG=%ܗ[[r؟FY}wC5]RC35GtzՑܺz?t{JC#K,FYʳ oCP!SήɈ0=Lw`yDI[18mznrU>%!#6M5󃚄S^H`u$x'ދdH^6`1Ay &>Sʽm>uF3~2O7Ch*9x/$!ꎑd'~n_x{GZr;ZiRDW]    ,:gaa!H&wcTՓOщ4O>3O8#3"d=lw)2\MB 253[B),:'H 9G#YY9RQ @@@@ G …    0+~(yD ~zCV{A@@@7,lyDC VZAt#@FD[wKxo|HrXV#q@ըB@T[;VBt WVtuÈV]x%,kXzN3yP^V!H 6Z@dkW/-б[@@AC* (!;}@|QѰyBNOivH**/fz|RiHV:7vA>ѦA8Zބ:SZ>A K՚1ՐC3;R28рGâHj.SX2Ki7KBra,LON:;ZܨF1 =Hۄ5RNfc!О U,X>Ȥ |Dǘse;*I$;*3"8 Mo\;mp^}c ݊hjDl ̈~:/@ <#pʎ>T rjDZk֯Y|Y_mcbҚgODg7>&\j/8"KqL/HtNub5Լ󈓽'&=|';is>‹%,֋hU@@@@7zˡsۣNYk+'BzI4}ڤwDX[\\*    0KKK)uy<x)a{ȡyDD t3yD0Cb\э4 ?C)IP]IyIbvQt>"5-qe@@@@`vZH#Z'!^qx~'A@@@`4-{hhv <A5g'I7ÂA@]Y|FSFI虀-Ղ[Fl3B ́,Ea@$85"/@#B!F,::a@̯#<ȂF@@@@`hɳ8        &AT︉Mt G& !C;'TY#|g>ܲ݊wwQwؿ{s27ygP?HeU! ,wA7N+?oؑ# 0#hxɧHь`߈#~c+_Ӧ}yמ=vzn2Y[Y=y^W)`y{$54Y]g?%)qn@?  Nƛ`hKtzEUh‏+*(3B=qj]}Ygqs=:h>u4ʙ}Lӛ*wЈPQxZiDMUFVnxHG$&ܳ9ֈQ#8!^YGlP@@lKjޱ4a~tJT$%et^Qw RmKUGo 5m '\dVF4:>]5eRv)SbեU\b@ 0Fc @yxti#)َ+!{VҞTUzy]Pڈ0Q@BGlPz Z&81t-OJ̅!R ThK#t!&s,4{)v,11z -KYڔэD(VP@GQ#~LߌшAUSuFu=SPԣQF~`&; 0RHÄ h*?7c4b ,VhCm:I1:)3@G앑CX>DuM_eBwL"} )ک0c$7MD%94}9 (  08N av4uIyIkC2?}Q(^iٹhm:VQ%2MmafA@f@C! ӈCyvA@@@| yw>d'o]Loz wԎ.F8  !ܲ7^/ˉAȑUGI5;~Gij/YG>t]{n{i:GmmeS:vx<@F{L+y>>D;b֚1g><}ta@FIoӷ\F7ΙrqkQ\7\3H?SS1#O!Nf[h@r*HP2k7;rY%[cQe2~s 4hx;9Sd+g+7}zאݛնɄtQdq #={\KdjqqR7 "NF/Qr08uGfyE`W b'0ILvP|o{>дr*o?3ߔ G[o8sQpl }G4F&C\Qv&)\o\Sof1Ϗ oN`)e/}E‘z8?`e.D3t]3wFR=wX1&fRSu:eq)0Y|'C5o©&dTRf^jB1I9;h׵F#젣8 V9yvIfO"r[i#|{26!G"[@25 ]a3N&*H3ܨ@_%.=.n 9]K9\?-EE"E.M+Z ܼ,:v,? ]ү:@-MjPQR'GˁH*؅t/z:DޏZ3 F3 E FԭǭN1Beb@cZq&8"/w ^wD-_8kd^D#^A4)Jy|#-ugKU.dZ=LBI/}Y2 &\spZDHMjʇ#Gh='3d$G#*QSK1P&]ȧ!ғRxxg8:+cs걵V\vznbCUW-q1hYq8BeZ\H=L%YCY|[Wc\Em9rtH&$vXdё4>_YХT8 L G5eR}|׋݄/} D^Ig좊>g=[Q|)I_%+RXWN"jYX(hƽ_|.mVģZ}cIDiZ[(3%ڊ1g|}@| Ž( U@(5bQðU="~#VB1궈xQ! ]y8Gt PLozJZխZf<:1Ru;4,ntOAZq|]l"C@N]tVuUf"j@#,dkFnKr(벼?[wVנ[N FT$ 5) 1!oQ*O@]/L#gENFe e") ])JftTe{azr76 e/Wɨ=76fd3Aeu|5)ZcWdl8N(yEy&,@?Dt%.$ӯ9-% eftXYU῞ř|䠴Y9лJzQTFJ|S{TI"GZsV2& LM= >@DL%*iwVo?7hgƆ(#lIt B>N6=9@AxwAiMU֓̕/7)ֲMGis={XM&zxLP`ARs7%b@j7PfT5E\kv":)TmDUld[ѿ~"9֚vM7fh<#G]^vЈP.H:xL7t`"XH@wqvQ&0@ZG*2O"A2 tiny1CJOJQJaJ4O"Q4 small1CJOJQJaJFV@"aF FollowedHyperlink B* ph>*.)@"q. Page Number\B@\ Body Text`]`^`B*phOJQJCJ(/@( List^JJOJ Caption1 xx $6CJ]^JaJ.O. Index $^JNON Heading x$CJOJPJQJ^JaJNON WW-Caption xx $6CJ]^JaJ4O4 WW-Index $^JTOT WW-Heading x$CJOJPJQJ^JaJPOP WW-Caption1 xx $6CJ]^JaJ6O6 WW-Index1! $^JVOV WW-Heading1 "x$CJOJPJQJ^JaJRO2R WW-Caption11 #xx $6CJ]^JaJ8OB8 WW-Index11$ $^JXOX WW-Heading11 %x$CJOJPJQJ^JaJfC@bf Body Text Indent&]^`B*phOJQJBOrB WW-Normal (Web) 'fOf WW-Body Text Indent 2(]^`OJQJrOr WW-Body Text 2 )$]^`a$B*phOJQJCJ5\NON WW-Body Text 3*B*phOJQJCJ4@4 Header + !4 @4 Footer , !rOr WW-Body Text Indent 3-]^`CJOJQJ^JaJ`O` WW-Block Text.`]`^`B*phOJQJ<O< Table Contents/ $BOB WW-Table Contents0 $DOD WW-Table Contents11 $FO"F WW-Table Contents112 $LO2L Table Heading 3$ $a$ 65]\ROBR WW-Table Heading 4$ $a$ 65]\TORT WW-Table Heading1 5$ $a$ 65]\VO!bV WW-Table Heading11 6$ $a$ 65]\T^@rT Normal (Web)7dd*$[$\$ B* phtH .X@. Emphasis6]NP@N Body Text 29*$7$8$H$CJOJQJ^Je@ HTML Preformatted:: 2( Px 4 #\'*.25@9*$CJOJPJQJ^JaJtH ~R@~ Body Text Indent 2;*$7$8$H$^`!B*CJOJQJ^JaJphtH ^Q@^ Body Text 3<,B*CJOJQJ^JaJmHnHphtH ub  z z z z z z z z z z z z z! B#,>5@G)PW[/`bWF s   5]stv12,c<_X78VVa >p4x#$| !E!t!!!"5"f""""T#i###$+${$$ %,%-%9%[%%%%%3&G&j&&&&'H'z'''"(D(m(((((()?)@)W))))&*t***++<++++,0,],,,,,,,--'.V....../N/{///0M00@11111232e2y222=3I3n3u333!404B4i4s44444556681:2:M:w:::;,;S;;;;;O<<<<<&=7=Y=f=====s@t@@@!A@AXAYAbAAAAAA#B:BUByBBBBBBBB;CCCCC DDp4x#$| !E!t!!!"5"f""""A#T#i###$+${$$ %,%-%9%[%%%%%3&G&j&&&&'H'z'''"(D(m(((((()?)@)W))))&*t***++<++++,0,],,,,,,,,--'.V....../N/{///0M00@11111232e2y222=3I3n3u333!404B4i4s4444455=56681:2:M:w:::;,;S;;;;;O<<<<<&=7=Y=f=====@s@t@@@!A@AXAYAbAAAAAA#B:BUByBBBBBBBB;CCCCC DDELbijj69;<>?@BCEGIKLOTVE)3.2{7<7EJPHV[_ejj7:=ADFHJMNPQRSUWj8!8@n(  6    B S  ?tbb%f t OLE_LINK1 OLE_LINK2e6b{6b"-9=?CDHIMOS  !$(+/?CGKMQTX[_bfim&*.248;?BFIMPT K R a p 2 9  e6y6: :#E%EBEDELFXFab*2]e {   FR45:!*,W]b56e6z677!E%EGGFZIZ``Ma^aab::::::::::::::::::::::::::FZZZZ[[[[[[[["\"\B\N\O\O\o\o\Y]Y]<^<^G^k^l^m^p^aaaaaaaaaaaaaaaaaaa"b%b3b4b8b;bUbVbXbkbbbbbb^`.^`^`^`^`^`^`^`^`^`WW8Num1Outline @ @>@@@b@@Unknown Gz Times New Roman5Symbol3& z ArialK,Bookman Old Style?5 z Courier New7&  Verdana5& zaTahomaO& k9?Lucida Sans UnicodeI& ??Arial Unicode MSBA hZF1S 11S 1!24daa3QHX ?>2?Ask anyone in the software business and you ll soon learn that Bob Palank Bob Palank  Oh+'0 4 HT t   @Ask anyone in the software business and youll soon learn that  Bob Palank Normal.dot Bob Palank2Microsoft Office Word@Ik@@M@M 1S՜.+,0( hp|  RRL1a' @Ask anyone in the software business and youll soon learn that Title  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$&'()*+,1Root Entry F M3Data Y?1TableoWordDocument1SummaryInformation(DocumentSummaryInformation8%CompObjq  FMicrosoft Office Word Document MSWordDocWord.Document.89q