PK **Aoa,mimetypeapplication/epub+zipPK**AiTunesMetadata.plistS artistName Oracle Corporation book-info cover-image-hash 344642263 cover-image-path OEBPS/dcommon/oracle-logo.jpg package-file-hash 318625465 publisher-unique-id E10811-01 unique-id 546230332 genre Oracle Documentation itemName Oracle® Database 2 Day + PHP Developer's Guide, 11g Release 2 (11.2) releaseDate 2009-08-03T06:35:19Z year 2009 PKXSPK**AMETA-INF/container.xml PKYuPK**AOEBPS/ch_six.htm3A̾ Executing Stored Procedures and Functions

6 Executing Stored Procedures and Functions

This chapter shows you how to run stored procedures and functions using PHP and Oracle Database. It has the following topics:

The Anyco application is extended with a PL/SQL function to calculate remuneration for each employee, and is further extended with a PL/SQL procedure to return a REF CURSOR of employee records.

Using PL/SQL to Capture Business Logic

Oracle PL/SQL procedures and functions enable you to store business logic in the database for any client program to use. They also reduce the amount of data that must be transferred between the database and PHP and can help improve performance.

In this section, you will create a PL/SQL stored function to calculate and display the total remuneration for each employee.

To display the total remuneration of each employee, perform the following steps:

The PHP application connects to the database as the HR user. You may need to unlock the HR account as a user with DBA privileges. To unlock the HR user:

  1. Open SQL Developer and open a connection to your Oracle database.

  2. Login to your Oracle database as system.

  3. Open SQL Worksheet or SQL*Plus and run the following grant statement to assign the create procedure privilege to the HR user:

    grant create procedure to hr;
    
    Description of chap6_hrgrantproc.gif follows
    Description of the illustration chap6_hrgrantproc.gif

  4. Login to your HR sample schema as hr.

  5. Open SQL Worksheet or SQL*Plus and enter the following text to create a calc_remuneration() function:

    create or replace function calc_remuneration(
      salary IN number, commission_pct IN number) return number is
    begin
      return ((salary*12) + (salary * 12 * nvl(commission_pct,0)));
    end;
    
    Description of chap6_hrcalcrem.gif follows
    Description of the illustration chap6_hrcalcrem.gif

  6. Create the chap6 directory, copy the application files from chap5, and change to the newly created directory:

    On Windows:

    mkdir c:\program files\Apache Group\Apache2\htdocs\chap6
    cd c:\program files\Apache Group\Apache2\htdocs\chap6
    copy ..\chap5\* .
    

    On Linux:

    mkdir $HOME/public_html/chap6
    cd $HOME/public_html/chap6
    cp ../chap5/* .
    
  7. Edit the anyco.php file. Modify the query in the construct_employees() function to call the PL/SQL function for each row returned:

    $query =
     "SELECT employee_id,
             substr(first_name,1,1) || '. '|| last_name as employee_name,
             hire_date,
             to_char(salary, '9999G999D99') as salary,
             nvl(commission_pct,0) as commission_pct,
             to_char(calc_remuneration(salary, commission_pct),'9999G999D99')
               as remuneration
      FROM employees
      WHERE department_id = :did
      ORDER BY employee_id ASC";
    
  8. Edit the anyco_ui.inc file. In the ui_print_employees() function, add a Remuneration column to the table, and modify the foreach loop to display the remuneration field for each employee:

    echo <<<END
       <form method="post" action="$posturl">
       <table>
       <tr>
         <th>&nbsp;</th>
         <th>Employee<br>ID</th>
         <th>Employee<br>Name</th>
         <th>Hiredate</th>
         <th>Salary</th>
         <th>Commission<br>(%)</th>
         <th>Remuneration</th>
       </tr>
    END;
    
        // Write one row per employee
        foreach ($employeerecords as $emp) {
          echo '<tr>';
          echo '<td><input type="radio" name="emprec"
                     value="'.htmlentities($emp['EMPLOYEE_ID']).'"></td>';
          echo '<td align="right">'.htmlentities($emp['EMPLOYEE_ID']).'</td>';
          echo '<td>'.htmlentities($emp['EMPLOYEE_NAME']).'</td>';
          echo '<td>'.htmlentities($emp['HIRE_DATE']).'</td>';
          echo '<td align="right">'.htmlentities($emp['SALARY']).'</td>';
          echo '<td align="right">'.htmlentities($emp['COMMISSION_PCT']).'</td>';
          echo '<td align="right">'.htmlentities($emp['REMUNERATION']).'</td>';
          echo '</tr>';
        }
    
  9. Save the changes to your application files. In a browser, enter the following URL to test the application:

    On Windows:

    http://localhost/chap6/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap6/anyco.php
    
  10. In the Departments page, click Show Employees.

    Description of chap6_stored_proc_test_001.gif follows
    Description of the illustration chap6_stored_proc_test_001.gif

    In the Employees page for the department, the employee remuneration is displayed in the last column:

    Description of chap6_stored_proc_test_002.gif follows
    Description of the illustration chap6_stored_proc_test_002.gif

Using PL/SQL Ref Cursors to Return Result Sets

Query data can be returned as REF CURSORS from PL/SQL blocks and displayed in PHP. This can be useful where the data set requires complex functionality or where you want multiple application programs to use the same query.

A REF CURSOR in PL/SQL is a type definition that is assigned to a cursor variable. It is common to declare a PL/SQL type inside a package specification for reuse in other PL/SQL constructs, such as a package body.

In this section, you will use a REF CURSOR to retrieve the employees for a specific department.

To create a PL/SQL package specification and body, with a REF CURSOR to retrieve employees for a specific department, perform the following steps:

  1. Open SQL Developer and login to your HR sample schema as hr.

  2. Open SQL Worksheet or SQL*Plus and enter the following text to create the cv_types PL/SQL package:

    CREATE OR REPLACE PACKAGE cv_types AS
      TYPE empinfotyp IS REF CURSOR;
      PROCEDURE get_employees(deptid in number,
                              employees in out empinfotyp);
    END cv_types;
    

    Click Run:

    Description of chap6_hrcreatepack.gif follows
    Description of the illustration chap6_hrcreatepack.gif

  3. In SQL Worksheet enter the following text to create the cv_types PL/SQL package body:

    CREATE OR REPLACE PACKAGE BODY cv_types AS
      PROCEDURE get_employees(deptid in number,
                              employees in out empinfotyp)
      IS
      BEGIN
        OPEN employees FOR
          SELECT employee_id,
            substr(first_name,1,1) || '. '|| last_name as employee_name,
            hire_date,
            to_char(salary, '999G999D99') as salary,
            NVL(commission_pct,0) as commission_pct,
            to_char(calc_remuneration(salary, commission_pct),
                    '9999G999D99') as remuneration
          FROM employees
          WHERE department_id = deptid
          ORDER BY employee_id ASC;
      END get_employees;
    END cv_types;
    

    Click Run:

    Description of chap6_hrcreatebody.gif follows
    Description of the illustration chap6_hrcreatebody.gif

  4. Edit the anyco_db.inc file. Create a new PHP function that calls the PL/SQL packaged procedure:

    // Use ref cursor to fetch employee records
    // All records are retrieved - there is no paging in this example 
    function db_get_employees_rc($conn, $deptid, &$e)
    {
      // Execute the call to the stored procedure
      $stmt = "BEGIN cv_types.get_employees($deptid, :rc); END;";
      $stid = @oci_parse($conn, $stmt);
      if (!$stid) {
        $e = db_error($conn, __FILE__, __LINE__);
        return false;
      }
      $refcur = oci_new_cursor($conn);
      if (!$stid) {
        $e = db_error($conn, __FILE__, __LINE__);
        return false;
      }
      $r = @oci_bind_by_name($stid, ':RC', $refcur, -1, OCI_B_CURSOR);
      if (!$r) {
        $e = db_error($stid, __FILE__, __LINE__);
        return false;
      }
      $r = @oci_execute($stid);
      if (!$r) {
        $e = db_error($stid, __FILE__, __LINE__);
        return false;
      }
      // Now treat the ref cursor as a statement resource
      $r = @oci_execute($refcur, OCI_DEFAULT);
      if (!$r) {
        $e = db_error($refcur, __FILE__, __LINE__);
        return false;
      }
      $r = @oci_fetch_all($refcur, $employeerecords, null, null,
                              OCI_FETCHSTATEMENT_BY_ROW);
      if (!$r) {
        $e = db_error($refcur, __FILE__, __LINE__);
        return false;
      }
      return ($employeerecords);
    }
    

    The db_get_employees_rc() function executes the following anonymous (unnamed) PL/SQL block:

    BEGIN cv_types.get_employees($deptid, :rc); END;
    

    The PL/SQL statement inside the BEGIN END block calls the stored PL/SQL package procedure cv_types.et_employees(). This returns an OCI_B_CURSOR REF CURSOR bind variable in the PHP variable $refcur.

    The $refcur variable is treated like a statement handle returned by oci_parse(). It is used for execute and fetch operations just as if the SQL query had been done in PHP.

  5. Edit the anyco.php file. In the construct_employees() function, remove the query text and the bind arguments. The function becomes:

    function construct_employees()
    {
      $deptid = $_SESSION['deptid'];
      $conn = db_connect($err);
      if (!$conn) {
        handle_error('Connection Error', $err);
      }
      else {
        $emp = db_get_employees_rc($conn, $deptid, $err);
    
        if (!$emp) {
          handle_error('Cannot fetch Employees', $err);
        }
        else {
          $deptname = get_dept_name($conn, $deptid);
    
          ui_print_header('Employees: '.$deptname);
          ui_print_employees($emp, $_SERVER['SCRIPT_NAME']);
          ui_print_footer(date('Y-m-d H:i:s'));
        }
      }
    }
    
  6. Save the changes to your application files. In a browser, enter the following URL to test the application:

    On Windows:

    http://localhost/chap6/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap6/anyco.php
    
  7. In the Departments page, click Next to navigate to the Marketing department page.

    Description of chap6_refcursor_005.gif follows
    Description of the illustration chap6_refcursor_005.gif

  8. In the Marketing department page, click Show Employees.

    Description of chap6_refcursor_006.gif follows
    Description of the illustration chap6_refcursor_006.gif

    In the Employees page for the Marketing department, the employee pages displays as previously:

    Description of chap6_refcursor_007.gif follows
    Description of the illustration chap6_refcursor_007.gif

PK8A3APK**AOEBPS/cover.htmO Cover

Oracle Corporation

PK[pTOPK**AOEBPS/ch_seven.htmZ Loading Images

7 Loading Images

This chapter shows you how to change the application to upload a JPEG image for new employee records and display it on the Employees page. It has the following topics:

Using BLOBs to Store and Load Employee Images

In this section, you will modify your application code to enable a photo to be stored in the record of an employee.

To enable images of employees to be stored in the employee records, perform the following tasks:

  1. Create the chap7 directory, copy the application files from chap6, and change to the newly created directory:

    On Windows:

    mkdir c:\program files\Apache Group\Apache2\htdocs\chap7
    cd c:\program files\Apache Group\Apache2\htdocs\chap7
    copy ..\chap6\* .
    

    On Linux:

    mkdir $HOME/public_html/chap7
    cd $HOME/public_html/chap7
    cp ../chap6/* .
    
  2. Open SQL Developer and open a connection to your HR sample schema.

  3. Login to your HR sample schema as hr.

  4. Open SQL Worksheet and enter the following CREATE TABLE statement to create a new table for storing employee images:

    CREATE TABLE employee_photos(
      employee_id        NUMBER,
      employee_thumbnail BLOB);
    
    Description of chap7_hrcreatetable.gif follows
    Description of the illustration chap7_hrcreatetable.gif

  5. The HR user must have the CREATE TABLE privilege to perform this command. If you get an "insufficient privileges" error message, then log out as the HR user, log in as system, and execute the following GRANT command:

    GRANT create table TO hr;
    

    Then log in as HR again to execute the CREATE TABLE statement.

  6. Edit the anyco_ui.inc file. Add a Photograph column to the EMPLOYEES table in the ui_print_employees() function:

    <th>Commission<br>(%)</th>
    <th>Remuneration</th>
    <th>Photograph</th>
    

    The data for the Photograph column is populated with an <img> tag whose src attribute is defined as a URL reference to a new anyco_im.php file, which will display the image for each employee record.

  7. Edit the anyco_ui.inc file. Add code in the ui_print_employees() function to generate an <img> tag referencing the anyco_im.php file with the employee identifier as a parameter:

    echo '<td align="right">'
         .htmlentities($emp['REMUNERATION']).'</td>';
    echo '<td><img src="anyco_im.php?showempphoto='.$emp['EMPLOYEE_ID']
         .'" alt="Employee photo"></td>';
    
  8. Edit the anyco_ui.inc file. To enable images to be uploaded when a new employee record is created, add an enctype attribute to the <form> tag in the ui_print_insert_employee() function:

    <form method="post" action="$posturl" enctype="multipart/form-data">
    

    At the bottom of the form add an upload field with an input type of file:

    <tr>
      <td>Commission (%)</td>
      <td><input type="text" name="commpct" value="0" size="20"></td>
    </tr>
    <tr>
      <td>Photo</td>
      <td><input type="file" name="empphoto"></td>
    </tr>
    
  9. Create the anyco_im.php file. This file accepts an employee identifier as a URL parameter, reads the image from the Photograph column for that employee record, and returns the thumbnail image to be displayed:

    <?php    // anyco_im.php
    
    require('anyco_cn.inc');
    require('anyco_db.inc');
    construct_image();
    
    function construct_image()
    {
      if (!isset($_GET['showempphoto'])) {
        return;
      }
    
      $empid = $_GET['showempphoto'];
    
      $conn = db_connect($err);
    
      if (!$conn) {
        return;
      }
    
      $query =
        'SELECT employee_thumbnail
         FROM   employee_photos
         WHERE  employee_id = :eid';
    
      $stid = oci_parse($conn, $query);
      $r = oci_bind_by_name($stid, ":eid", $empid, -1);
      if (!$r) {
        return;
      }
      $r = oci_execute($stid, OCI_DEFAULT);
      if (!$r) {
        return;
      }
    
      $arr = oci_fetch_row($stid);
      if (!$arr) {
        return;                     // photo not found
      }
    
      $result = $arr[0]->load();
    
      // If any text (or whitespace!) is printed before this header is sent,
      // the text is not displayed. The image also is not displayed properly.
      // Comment out the "header" line to see the text and debug.
      header("Content-type: image/JPEG");
      echo $result;
    }
    
    ?>
    

    The construct_image() function uses the OCI-Lob->load() function to retrieve the Oracle LOB data, which is the image data. The PHP header() function sets the MIME type in the HTTP response header to ensure the browser interprets the data as a JPEG image.

    If you want to display other image types, then the Content-type needs to be changed accordingly.

  10. Edit the anyco_db.inc file. Add a new function db_insert_thumbnail()to insert an image into the EMPLOYEE_PHOTOS table:

    function db_insert_thumbnail($conn, $empid, $imgfile, &$e)
    {
      $lob = oci_new_descriptor($conn, OCI_D_LOB);
      if (!$lob) {
        $e = db_error($conn, __FILE__, __LINE__);
        return false;
      }
    
      $insstmt =
        'INSERT INTO employee_photos (employee_id, employee_thumbnail)
         VALUES(:eid, empty_blob())
         RETURNING employee_thumbnail into :etn';
    
      $stmt = oci_parse($conn, $insstmt);
      $r = oci_bind_by_name($stmt, ':etn', $lob, -1, OCI_B_BLOB);
      if (!$r) {
        $e = db_error($stid, __FILE__, __LINE__);
        return false;
      }
      $r = oci_bind_by_name($stmt, ':eid', $empid, -1);
      if (!$r) {
        $e = db_error($stid, __FILE__, __LINE__);
        return false;
      }
      $r = oci_execute($stmt, OCI_DEFAULT);
      if (!$r) {
        $e = db_error($stid, __FILE__, __LINE__);
        return false;
      }
    
      if (!$lob->savefile($imgfile)) {
        $e = db_error($stid, __FILE__, __LINE__);
        return false;
      }
      $lob->free();
    
      return true;
    }
    

    To tie the new EMPLOYEE_PHOTOS and EMPLOYEES tables together, you must use the same employee id in both tables.

  11. Edit the anyco_db.inc file. Change the $bindvars parameter in the db_execute_statement() function to &$bindvars so that OUT bind variable values are returned from the database. At the bottom of the function, add a loop to set any return bind values:

    function db_execute_statement($conn, $statement, &$e, &$bindvars = array())
    {
      ...
      $r = @oci_execute($stid);
      if (!$r) {
        $e = db_error($stid, __FILE__, __LINE__);
        return false;
      }
      $outbinds = array();
      foreach ($bindvars as $b) {
        $outbinds[$b[0]] = $$b[0];
      }
       $bindvars = $outbinds;
       return true;
    }
    
  12. Edit the anyco.php file. Change the INSERT statement in the insert_new_emp() function so that it returns the new employee identifier in the bind variable :neweid. This value is inserted with the image into the new EMPLOYEE_PHOTOS table.

    $statement =
      'INSERT INTO employees
                   (employee_id, first_name, last_name, email, hire_date,
                   job_id, salary, commission_pct, department_id)
       VALUES (employees_seq.nextval, :fnm, :lnm, :eml, :hdt,
              :jid, :sal, :cpt, :did)
       RETURNING employee_id into :neweid';
    

    Also in the insert_new_emp() function, add a call to the array_push() function to set a new bind variable NEWEID at the end of the list of array_push() calls:

    array_push($bindargs, array('CPT', $newemp['commpct'], -1));
    array_push($bindargs, array('DID', $newemp['deptid'], -1));
    array_push($bindargs, array('NEWEID', null, 10));
    

    Because the value of NEWID is being retrieved with the RETURNING clause in the INSERT statement, its initial value is set to NULL. The length is set to 10 to allow enough digits in the return value.

  13. Edit the anyco.php file. In the insert_new_emp() function, add a call between the db_execute_statement() and construct_employees() calls to insert the thumbnail image:

    $r = db_execute_statement($conn, $statement, $err, $bindargs);
    if ($r) {
      $r = db_insert_thumbnail($conn, $bindargs['NEWEID'],
                               $_FILES['empphoto']['tmp_name'], $e);
      construct_employees();
    }
    
  14. In a browser, enter the following application URL:

    On Windows:

    http://localhost/chap7/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap7/anyco.php
    
  15. In the Departments page, click Show Employees to navigate to the Employees page:

    Description of chap7_loadimg_005.gif follows
    Description of the illustration chap7_loadimg_005.gif

  16. In the Employees page, to insert a new employee record click Insert new employee:

    Description of chap7_loadimg_006.gif follows
    Description of the illustration chap7_loadimg_006.gif

  17. The Insert New Employee form allows you to choose a thumbnail image on your system to be uploaded to the database. Enter your own values in the fields or use the values as shown. Click Browse:

    Description of chap7_loadimg_007.gif follows
    Description of the illustration chap7_loadimg_007.gif

  18. In the File Upload window, browse for and select a JPEG image file, and click Open:

    Description of chap7_loadimg_008.gif follows
    Description of the illustration chap7_loadimg_008.gif

  19. In the Insert New Employee page, click Save:

    Description of chap7_loadimg_022.gif follows
    Description of the illustration chap7_loadimg_022.gif

    The Employees page is displayed with the new employee record, including the image, which is displayed at its original size:

    Description of chap7_loadimg_009.gif follows
    Description of the illustration chap7_loadimg_009.gif

Resizing Images

In this section, you will further modify your application code to create a thumbnail image from a supplied image, and store the thumbnail image in the record of an employee.

You can use the PHP GD graphics extension to resize employee images.

  1. Restart Apache. You can either use the ApacheMonitor utility, or you can use Windows Services.

    To use the ApacheMonitor utility, navigate to the Apache bin directory and double click ApacheMonitor.exe. In a default installation, Apache bin is located at c:\Program Files\Apache Group\Apache2\bin.

    You can access Windows Services from the Windows Start menu at Start > Control Panel > Administrative Tools > Services. Select the Standard tab. Right click the Apache2 HTTP Server and then select Restart.

  2. Edit the anyco_db.inc file. To resize the image to create a thumbnail image, add the following code before the call to $lob->savefile($imgfile) in the db_insert_thumbnail() function:

    $r = oci_execute($stmt, OCI_DEFAULT);
    if (!$r) {
      $e = db_error($stid, __FILE__, __LINE__);
      return false;
    }
    
    // Resize the image to a thumbnail
    define('MAX_THUMBNAIL_DIMENSION', 100);
    $src_img = imagecreatefromjpeg($imgfile);
    list($w, $h) = getimagesize($imgfile);
    if ($w > MAX_THUMBNAIL_DIMENSION || $h > MAX_THUMBNAIL_DIMENSION)
    {
      $scale =  MAX_THUMBNAIL_DIMENSION / (($h > $w) ? $h : $w);
      $nw = $w * $scale;
      $nh = $h * $scale;
    
      $dest_img = imagecreatetruecolor($nw, $nh);
      imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $nw, $nh, $w, $h);
    
      imagejpeg($dest_img, $imgfile);  // overwrite file with new thumbnail
    
      imagedestroy($src_img);
      imagedestroy($dest_img);
    }
    
    if (!$lob->savefile($imgfile)) {
    ...
    

    The imagecreatefromjpeg() function reads the JPEG file and creates an internal representation used by subsequent GD functions. Next, new dimensions are calculated with the longest side no larger than 100 pixels. A template image with the new size is created using the imagecreatetruecolor() function. Data from the original image is sampled into it with the imagecopyresampled() function to create the thumbnail image. The thumbnail image is written back to the original file and the internal representations of the images are freed.

    The existing code in the db_insert_thumbnail() function uploads the image file to the database as it did in the previous implementation.

  3. Enter the following URL in your browser to test the changes in your application:

    On Windows:

    http://localhost/chap7/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap7/anyco.php
    
  4. In the Departments page, navigate to the Employees page by clicking Show Employees:

    Description of chap7_loadimg_018.gif follows
    Description of the illustration chap7_loadimg_018.gif

  5. In the Employees page, to insert a new employee record, click Insert new employee:

    Description of chap7_loadimg_019.gif follows
    Description of the illustration chap7_loadimg_019.gif

  6. Enter the new employee details or use the values shown. To browse for an employee image, click Browse:

    Description of chap7_loadimg_020.gif follows
    Description of the illustration chap7_loadimg_020.gif

  7. Locate and select a JPEG image with a size larger than 100 pixels, and click Open:

    Description of chap7_loadimg_021.gif follows
    Description of the illustration chap7_loadimg_021.gif

  8. In the Insert New Image page, click Save:

    Description of chap7_loadimg_022.gif follows
    Description of the illustration chap7_loadimg_022.gif

    The Employees page shows the new uploaded JPEG image with a reduced image size, compared to the image loaded before including the image resize code:

    Description of chap7_loadimg_023.gif follows
    Description of the illustration chap7_loadimg_023.gif

PK^VZZPK**AOEBPS/ch_eight.htmq Building Global Applications

8 Building Global Applications

This chapter discusses global application development in a PHP and Oracle Database environment. It addresses the basic tasks associated with developing and deploying global Internet applications, including developing locale awareness, constructing HTML content in the user-preferred language, and presenting data following the cultural conventions of the locale of the user.

Building a global Internet application that supports different locales requires good development practices. A locale refers to a national language and the region in which the language is spoken. The application itself must be aware of the locale preference of the user and be able to present content following the cultural conventions expected by the user. It is important to present data with appropriate locale characteristics, such as the correct date and number formats. Oracle Database is fully internationalized to provide a global platform for developing and deploying global applications.

This chapter has the following topics:

Establishing the Environment Between Oracle and PHP

Correctly setting up the connectivity between the PHP engine and the Oracle database is first step in building a global application, it guarantees data integrity across all tiers. Most internet based standards support Unicode as a character encoding, in this chapter we will focus on using Unicode as the character set for data exchange.

PHP uses the OCI8 extension, and rules that apply to OCI also apply to PHP. Oracle locale behavior (including the client character set used in OCI applications) is defined by the NLS_LANG environment variable. This environment variable has the form:

     <language>_<territory>.<character set>

For example, for a German user in Germany running an application in Unicode, NLS_LANG should be set to

GERMAN_GERMANY.AL32UTF8

The language and territory settings control Oracle behaviors such as the Oracle date format, error message language, and the rules used for sort order. The character set AL32UTF8 is the Oracle name for UTF-8.

For information on the NLS_LANG environment variable, see the Oracle Database installation guides.

When PHP is installed on Apache, you can set NLS_LANG in /etc/profile:

    export NLS_LANG GERMAN_GERMANY.AL32UTF8

If PHP is installed on Oracle HTTP Server, you must set NLS_LANG as an environment variable in $ORACLE_HOME/opmn/conf/opmn.xml:

   <ias-component id="HTTP_Server">
     <process-type id="HTTP_Server" module-id="OHS">
       <environment>
         <variable id="PERL5LIB"
          value="D:\oracle\1012J2EE\Apache\Apache\mod_perl\site\5.6.1\lib"/>
         <variable id="PHPRC" value="D:\oracle\1012J2EE\Apache\Apache\conf"/>
         <variable id="NLS_LANG" value="german_germany.al32utf8"/>
       </environment>
       <module-data>
         <category id="start-parameters">
           <data id="start-mode" value="ssl-disabled"/>
         </category>
       </module-data>
       <process-set id="HTTP_Server" numprocs="1"/>
     </process-type>
   </ias-component>

You must restart the Web listener to implement the change.

Manipulating Strings

PHP was designed to work with the ISO-8859-1 character set. To handle other character sets, specifically multibyte character sets, a set of "MultiByte String Functions" is available. To enable these functions, you must enable the mbstring extension.

Your application code should use functions such as mb_strlen() to calculate the number of characters in strings. This may return different values than strlen(), which returns the number of bytes in a string.

Once you have enabled the mbstring extension and restarted the Web server, several configuration options become available. You can change the behavior of the standard PHP string functions by setting mbstring.func_overload to one of the "Overload" settings.

For more information, see the PHP mbstring reference manual at

http://www.php.net/mbstring

Determining the Locale of the User

In a global environment, your application should accommodate users with different locale preferences. Once it has determined the preferred locale of the user, the application should construct HTML content in the language of the locale and follow the cultural conventions implied by the locale.

A common method to determine the locale of a user is from the default ISO locale setting of the browser. Usually a browser sends its locale preference setting to the HTTP server with the Accept Language HTTP header. If the Accept Language header is NULL, then there is no locale preference information available, and the application should fall back to a predefined default locale.

The following PHP code retrieves the ISO locale from the Accept-Language HTTP header through the $_SERVER Server variable.

$s = $_SERVER["HTTP_ACCEPT_LANGUAGE"]

Developing Locale Awareness

Once the locale preference of the user has been determined, the application can call locale-sensitive functions, such as date, time, and monetary formatting to format the HTML pages according to the cultural conventions of the locale.

When you write global applications implemented in different programming environments, you should enable the synchronization of user locale settings between the different environments. For example, PHP applications that call PL/SQL procedures should map the ISO locales to the corresponding NLS_LANGUAGE and NLS_TERRITORY values and change the parameter values to match the locale of the user before calling the PL/SQL procedures. The PL/SQL UTL_I18N package contains mapping functions that can map between ISO and Oracle locales.

Table 8-1 shows how some commonly used locales are defined in ISO and Oracle environments.

Table 8-1 Locale Representations in ISO, SQL, and PL/SQL Programming Environments

LocaleLocale IDNLS_LANGUAGENLS_TERRITORY

Chinese (P.R.C.)

zh-CN

SIMPLIFIED CHINESE

CHINA

Chinese (Taiwan)

zh-TW

TRADITIONAL CHINESE

TAIWAN

English (U.S.A)

en-US

AMERICAN

AMERICA

English (United Kingdom)

en-GB

ENGLISH

UNITED KINGDOM

French (Canada)

fr-CA

CANADIAN FRENCH

CANADA

French (France)

fr-FR

FRENCH

FRANCE

German

de

GERMAN

GERMANY

Italian

it

ITALIAN

ITALY

Japanese

ja

JAPANESE

JAPAN

Korean

ko

KOREAN

KOREA

Portuguese (Brazil)

pt-BR

BRAZILIAN PORTUGUESE

BRAZIL

Portuguese

pt

PORTUGUESE

PORTUGAL

Spanish

es

SPANISH

SPAIN


Encoding HTML Pages

The encoding of an HTML page is important information for a browser and an Internet application. You can think of the page encoding as the character set used for the locale that an Internet application is serving. The browser must know about the page encoding so that it can use the correct fonts and character set mapping tables to display the HTML pages. Internet applications must know about the HTML page encoding so they can process input data from an HTML form.

Instead of using different native encodings for the different locales, Oracle recommends that you use UTF-8 (Unicode encoding) for all page encodings. This encoding not only simplifies the coding for global applications, but it also enables multilingual content on a single page.

Specifying the Page Encoding for HTML Pages

You can specify the encoding of an HTML page either in the HTTP header, or in HTML page header.

Specifying the Encoding in the HTTP Header

To specify HTML page encoding in the HTTP header, include the Content-Type HTTP header in the HTTP specification. It specifies the content type and character set. The Content-Type HTTP header has the following form:

Content-Type: text/html; charset=utf-8

The charset parameter specifies the encoding for the HTML page. The possible values for the charset parameter are the IANA names for the character encodings that the browser supports.

Specifying the Encoding in the HTML Page Header

Use this method primarily for static HTML pages. To specify HTML page encoding in the HTML page header, specify the character encoding in the HTML header as follows:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

The charset parameter specifies the encoding for the HTML page. As with the Content-Type HTTP Header, the possible values for the charset parameter are the IANA names for the character encodings that the browser supports.

Specifying the Page Encoding in PHP

You can specify the encoding of an HTML page in the Content-Type HTTP header by setting the PHP configuration variable as follows:

default_charset = UTF-8

This setting does not imply any conversion of outgoing pages. Your application must ensure that the server-generated pages are encoded in UTF-8.

Organizing the Content of HTML Pages for Translation

Making the user interface available in the local language of the user is a fundamental task in globalizing an application. Translatable sources for the content of an HTML page belong to the following categories:

Strings in PHP

You should externalize translatable strings within your PHP application logic, so that the text is readily available for translation. These text messages can be stored in flat files or database tables depending on the type and the volume of the data being translated.

Static Files

Static files such as HTML and GIF files are readily translatable. When these files are translated, they should be translated into the corresponding language with UTF-8 as the file encoding. To differentiate the languages of the translated files, stage the static files of different languages in different directories or with different file names.

Data from the Database

Dynamic information such as product names and product descriptions is typically stored in the database. To differentiate various translations, the database schema holding this information should include a column to indicate the language. To select the desired language, you must include a WHERE clause in your query.

Presenting Data Using Conventions Expected by the User

Data in the application must be presented in a way that conforms to the expectation of the user. Otherwise, the meaning of the data can be misinterpreted. For example, the date '12/11/05' implies '11th December 2005' in the United States, whereas in the United Kingdom it means '12th November 2005'. Similar confusion exists for number and monetary formats of the users. For example, the symbol '.' is a decimal separator in the United States; in Germany this symbol is a thousand separator.

Different languages have their own sorting rules. Some languages are collated according to the letter sequence in the alphabet, some according to the number of stroke counts in the letter, and some languages are ordered by the pronunciation of the words. Presenting data not sorted in the linguistic sequence that your users are accustomed to can make searching for information difficult and time consuming.

Depending on the application logic and the volume of data retrieved from the database, it may be more appropriate to format the data at the database level rather than at the application level. Oracle Database offers many features that help to refine the presentation of data when the locale preference of the user is known. The following sections provide examples of locale-sensitive operations in SQL.

Oracle Date Formats

The three different date presentation formats in Oracle Database are standard, short, and long dates. The following examples illustrate the differences between the short date and long date formats for both the United States and Germany.

SQL> alter session set nls_territory=america nls_language=american;

Session altered.


SQL> select employee_id EmpID,
  2  substr(first_name,1,1)||'.'||last_name "EmpName",
  3  to_char(hire_date,'DS') "Hiredate",
  4  to_char(hire_date,'DL') "Long HireDate"
  5  from employees
  6* where employee_id <105;

     EMPID EmpName                     Hiredate   Long HireDate
---------- --------------------------- ---------- -----------------------------
       100 S.King                      06/17/1987 Wednesday, June 17, 1987
       101 N.Kochhar                   09/21/1989 Thursday, September 21, 1989
       102 L.De Haan                   01/13/1993 Wednesday, January 13, 1993
       103 A.Hunold                    01/03/1990 Wednesday, January 3, 1990
       104 B.Ernst                     05/21/1991 Tuesday, May 21, 1991
SQL> alter session set nls_territory=germany nls_language=german;

Session altered.

SQL> select employee_id EmpID,
  2  substr(first_name,1,1)||'.'||last_name "EmpName",
  3  to_char(hire_date,'DS') "Hiredate",
  4  to_char(hire_date,'DL') "Long HireDate"
  5  from employees
  6* where employee_id <105;

     EMPID EmpName                     Hiredate Long HireDate
---------- --------------------------- -------- ------------------------------
       100 S.King                      17.06.87 Mittwoch, 17. Juni 1987
       101 N.Kochhar                   21.09.89 Donnerstag, 21. September 1989
       102 L.De Haan                   13.01.93 Mittwoch, 13. Januar 1993
       103 A.Hunold                    03.01.90 Mittwoch, 3. Januar 1990
       104 B.Ernst                     21.05.91 Dienstag, 21. Mai 1991

Oracle Number Formats

The following examples illustrate the differences in the decimal character and group separator between the United States and Germany.

SQL> alter session set nls_territory=america;

Session altered.

SQL> select employee_id EmpID,
  2  substr(first_name,1,1)||'.'||last_name "EmpName",
  3  to_char(salary, '99G999D99') "Salary"
  4  from employees
  5* where employee_id <105

     EMPID EmpName                     Salary
---------- --------------------------- ----------
       100 S.King                       24,000.00
       101 N.Kochhar                    17,000.00
       102 L.De Haan                    17,000.00
       103 A.Hunold                      9,000.00
       104 B.Ernst                       6,000.00

SQL> alter session set nls_territory=germany;

Session altered.

SQL> select employee_id EmpID,
  2  substr(first_name,1,1)||'.'||last_name "EmpName",
  3  to_char(salary, '99G999D99') "Salary"
  4  from employees
  5* where employee_id <105

     EMPID EmpName                     Salary
---------- --------------------------- ----------
       100 S.King                       24.000,00
       101 N.Kochhar                    17.000,00
       102 L.De Haan                    17.000,00
       103 A.Hunold                      9.000,00
       104 B.Ernst                       6.000,00

Oracle Linguistic Sorts

Spain traditionally treats ch, ll as well as ñ as unique letters, ordered after c, l and n respectively. The following examples illustrate the effect of using a Spanish sort against the employee names Chen and Chung.

SQL> alter session set nls_sort=binary;

Session altered.

SQL> select employee_id EmpID,
  2         last_name "Last Name"
  3  from employees
  4  where last_name like 'C%'
  5* order by last_name

     EMPID Last Name
---------- -------------------------
       187 Cabrio
       148 Cambrault
       154 Cambrault
       110 Chen
       188 Chung
       119 Colmenares

6 rows selected.

SQL> alter session set nls_sort=spanish_m;

Session altered.

SQL> select employee_id EmpID,
  2         last_name "Last Name"
  3  from employees
  4  where last_name like 'C%'
  5* order by last_name

     EMPID Last Name
---------- -------------------------
       187 Cabrio
       148 Cambrault
       154 Cambrault
       119 Colmenares
       110 Chen
       188 Chung

6 rows selected.

Oracle Error Messages

The NLS_LANGUAGE parameter also controls the language of the database error messages being returned from the database. Setting this parameter prior to submitting your SQL statement ensures that the language-specific database error messages will be returned to the application.

Consider the following server message:

ORA-00942: table or view does not exist

When the NLS_LANGUAGE parameter is set to French, the server message appears as follows:

ORA-00942: table ou vue inexistante

For more discussion of globalization support features in Oracle Database, see "Working in a Global Environment" in Oracle Database 2 Day Developer's Guide.

PK!qqPK**AOEBPS/ch_four.htm Querying Data

4 Querying Data

In this chapter, you extend the Anyco HR application from Chapter 3 by adding information to the Departments page. You also implement the functionality to query, insert, update, and delete employee records in a specific department.

This chapter has the following topics:

Centralizing the Database Application Logic

In this section, you will modify your application code by moving the database access logic into separate files for inclusion in the PHP application.

  1. Copy the files that you completed in Chapter 3 to a new chap4 directory, and change to the newly created directory:

    On Windows:

    mkdir c:\program files\Apache Group\Apache2\htdocs\chap4
    cd c:\program files\Apache Group\Apache2\htdocs\chap4
    copy ..\chap3\* .
    

    On Linux:

    mkdir $HOME/public_html/chap4
    cd $HOME/public_html/chap4
    cp ../chap3/* .
    
  2. Using your preferred editor, create a file called anyco_cn.inc that defines named constants for the database connection information. This file enables you to change connection information in one place.

    <?php // File: anyco_cn.inc
    
    define('ORA_CON_UN', 'hr');             // User name
    define('ORA_CON_PW', 'hr');             // Password
    define('ORA_CON_DB', '//localhost/orcl'); // Connection identifier
    
    ?>
    

    For simplicity, the user name and password are written into this sample application code. For applications that will be deployed, coding the user name and password strings directly into your application source code is not recommended. Oracle recommends that you use a more secure technique, such as implementing a dialog that prompts the user for the user name and password.

    See Oracle Database Security Guide and the documentation for your development environment for details on security features and practices.

  3. Create a file called anyco_db.inc that declares functions for creating a database connection, executing a query, and disconnecting from the database. Use the following logic, which includes some error handling that is managed by calling an additional function called db_error ():

    <?php  // File: anyco_db.inc
    
    function db_connect()
    {
      // use constants defined in anyco_cn.inc
      $conn = oci_connect(ORA_CON_UN, ORA_CON_PW, ORA_CON_DB);
      if (!$conn) {
        db_error(null, __FILE__, __LINE__);
      }
      return($conn);
    }
    
    function db_do_query($conn, $statement)
    {
      $stid = oci_parse($conn, $statement);
      if (!$stid) {
        db_error($conn, __FILE__, __LINE__);
      }
    
      $r = oci_execute($stid, OCI_DEFAULT);
      if (!$r) {
        db_error($stid, __FILE__, __LINE__);
      }
     $r = oci_fetch_all($stid, $results, null, null,
                         OCI_FETCHSTATEMENT_BY_ROW);
      return($results);
    }
    
    // $r is the resource containing the error.
    // Pass no argument or false for connection errors
    
    function db_error($r = false, $file, $line)
    {
      $err =  $r ? oci_error($r) : oci_error();
    
      if (isset($err['message'])) {
        $m = htmlentities($err['message']);
      }
      else {  
        $m = 'Unknown DB error';
      }
    
      echo '<p><b>Error</b>: at line '.$line.' of '.$file.'</p>';
      echo '<pre>'.$m.'</pre>';
    
      exit;
    }
    
    ?>
    

    The db_do_query() function in this example uses the oci_fetch_all() OCI8 function. The oci_fetch_all() function accepts the following five parameters:

    • $stid, the statement identifier for the statement executed

    • $results, the output array variable containing the data returned for the query

    • The null in the third parameter for the number of initial rows to skip is ignored.

    • The null in the fourth parameter for the maximum number of rows to fetch is ignored. In this case, all the rows for the query are returned. For this example where the result set is not large, it is acceptable.

    • The last parameter flag OCI_FETCHSTATEMENT_BY_ROW indicates that the data in the $results array is organized by row, where each row contains an array of column values. A value of OCI_FETCHSTATEMENT_BY_COLUMN causes the results array to be organized by column, where each column entry contains an array of column values for each row. Your choice of value for this flag depends on how you intend to process the data in your logic.

    To examine the structure of the result array, use the PHP var_dump() function after the query has been executed. This is useful for debugging. For example:

    print '<pre>';
    var_dump($results);
    print '</pre>';
    

    The db_error() function accepts three arguments. The $r parameter can be false or null for obtaining connection errors, or a connection resource or statement resource to obtain an error for those contexts. The $file and $line values are populated by using __FILE__ and __LINE__, respectively, as the actual parameters to enable the error message to display the source file and line from which the database error is reported. This enables you to easily track the possible cause of errors.

    The db_ error() function calls the oci_error() function to obtain database error messages.

    The db_error() function calls the isset() function before printing the message. The isset() function checks if the message component of the database error structure is set, or if the error is unknown.

  4. Edit anyco_ui.inc. To format the results of a single row from the DEPARTMENTS table query in an HTML table format, insert the following function:

    function ui_print_department($dept)
    {
      if (!$dept) {
        echo '<p>No Department found</p>';
      }
      else {
        echo <<<END
      <table>
      <tr>
        <th>Department<br>ID</th>
        <th>Department<br>Name</th>
        <th>Manager<br>Id</th>
        <th>Location ID</th>
      </tr>
      <tr>
    END;
        echo '<td>'.htmlentities($dept['DEPARTMENT_ID']).'</td>';
        echo '<td>'.htmlentities($dept['DEPARTMENT_NAME']).'</td>';
        echo '<td>'.htmlentities($dept['MANAGER_ID']).'</td>';
        echo '<td>'.htmlentities($dept['LOCATION_ID']).'</td>';
        echo <<<END
      </tr>
      </table>
    END;
      }
    }
    

    As noted in Chapter 3, do not prefix END; lines with leading spaces. If you do, the rest of the document will be treated as part of the text to be printed.

  5. Edit the anyco.php file. Include the anyco_ui.inc and anyco_db.inc files, and call the database functions to query and display information for a department with a department_id of 80 by using the following code. The file becomes:

    <?php // File: anyco.php
    
    require('anyco_cn.inc');
    require('anyco_db.inc');
    require('anyco_ui.inc');
    
    $query =
      'SELECT   department_id, department_name, manager_id, location_id
       FROM     departments
       WHERE    department_id = 80';
    
    $conn = db_connect();
    
    $dept = db_do_query($conn, $query);
    ui_print_header('Departments');
    ui_print_department($dept[0]);
    ui_print_footer(date('Y-m-d H:i:s'));
    
    ?>
    
  6. To test the resulting changes to the application, enter the following URL in a browser window:

    On Windows:

    http://localhost/chap4/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap4/anyco.php
    

    The page returned in the browser window should resemble the following page:

    Description of chap4_db_connect_002.gif follows
    Description of the illustration chap4_db_connect_002.gif

Writing Queries with Bind Variables

Using queries with values included in the WHERE clause may be useful for some situations. However, if the conditional values in the query are likely to change it is not appropriate to encode a value into the query. Oracle recommends that you use bind variables.

A bind variable is a symbolic name preceded by a colon in the query that acts as a placeholder for literal values. For example, the query string created in the anyco.php file could be rewritten with the bind variable :did as follows:

$query =
  'SELECT   department_id, department_name, manager_id, location_id
   FROM     departments
   WHERE    department_id = :did'; 

By using bind variables to parameterize SQL statements:

When a query uses a bind variable, the PHP code must associate an actual value with each bind variable (placeholder) used in the query before it is executed. This process is known as run-time binding.

To enable your PHP application to use bind variables in the query, perform the following changes to your PHP application code:

  1. Edit the anyco.php file. Modify the query to use a bind variable, create an array to store the value to be associated with the bind variable, and pass the $bindargs array to the db_do_query() function:

    <?php // File: anyco.php
    ...
    
    $query =
    'SELECT   department_id, department_name, manager_id, location_id
     FROM     departments
     WHERE    department_id = :did';
    
    $bindargs = array();
    // In the $bindargs array add an array containing
    // the bind variable name used in the query, its value, a length
    array_push($bindargs, array('DID', 80, -1));
    
    $conn = db_connect();
    $dept = db_do_query($conn, $query, $bindargs);
    
    ...
    ?>
    

    In this example, the bind variable, called DID, is an input argument in the parameterized query, and it is associated with the value 80. Later, the value of the bind variable will be dynamically determined. In addition, the length component is passed as -1 so that the OCI8 layer can determine the length. If the bind variable was used to return output from the database an explicit size would be required.

  2. Edit the anyco_db.inc file. Modify the db_do_query() function to accept a $bindvars array variable as a third parameter. Call the oci_bind_by_name() OCI8 call to associate the PHP values supplied in $bindvars parameter with bind variables in the query. The function becomes:

    function db_do_query($conn, $statement, $bindvars = array())
    {
      $stid = oci_parse($conn, $statement);
      if (!$stid) {
        db_error($conn, __FILE__, __LINE__);
      }
    
      // Bind the PHP values to query bind parameters
      foreach ($bindvars as $b) {
        // create local variable with caller specified bind value
        $$b[0] = $b[1];  
        // oci_bind_by_name(resource, bv_name, php_variable, length)
        $r = oci_bind_by_name($stid, ":$b[0]", $$b[0], $b[2]); 
        if (!$r) {
          db_error($stid, __FILE__, __LINE__);
        }
      }
      $r = oci_execute($stid, OCI_DEFAULT);
      if (!$r) {
            db_error($stid, __FILE__, __LINE__);
      }
      $r = oci_fetch_all($stid, $results, null, null,
                             OCI_FETCHSTATEMENT_BY_ROW);
      return($results);
    }
    

    The binding is performed in the foreach loop before the oci_execute() is done.

    For each entry in $bindvars array, the first element contains the query bind variable name that is used to create a PHP variable of the same name; that is, $$b[0] takes the value DID in $b[0] and forms a PHP variable called $DID whose value is assigned from the second element in the entry.

    The oci_bind_by_name() function accepts four parameters: the $stid as the resource, a string representing the bind variable name in the query derived from the first element in the array entry, the PHP variable containing the value to be associated with the bind variable, and the length of the input value.

  3. To test the results of the preceding modifications, save the anyco.php and anyco_db.inc files and enter the following URL:

    On Windows:

    http://localhost/chap4/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap4/anyco.php
    

    The page returned in the browser window should resemble the following page:

    Description of chap4_db_connect_003.gif follows
    Description of the illustration chap4_db_connect_003.gif

Navigating Through Database Records

Adding navigation through the database records requires several important changes to the application logic. The modifications require the combination of:

To add navigation through database rows, perform the following steps:

  1. Edit the anyco_ui.inc file. Add Next and Previous navigation buttons to the Departments page. Change the ui_print_department() function to append a second parameter called $posturl that supplies the value for the form attribute action. After printing the </table> tag include HTML form tags for the Next and Previous buttons:

    <?php // File: anyco_ui.inc
    ...
    function ui_print_department($dept, $posturl)
    {
      ...
        echo <<<END
      </tr>
      </table>
      <form method="post" action="$posturl">
      <input type="submit" value="< Previous" name="prevdept">
      <input type="submit" value="Next >"     name="nextdept">
      </form>
    END;
      }
    }
    
    ?>
    
  2. Edit the anyco.php file. To detect if the Next or Previous button was used to invoke the page and track the session state, call the PHP function session_start(), and create a function named construct_departments():

    Move and modify the database access logic into a new construct_departments() function, which detects if navigation has been performed, manages the session state, defines a subquery for the database access layer to process, and connects and calls a function db_get_page_data(). The file becomes:

    <?php // File: anyco.php
    
    require('anyco_cn.inc');
    require('anyco_db.inc');
    require('anyco_ui.inc');
    
    session_start();
    construct_departments();
    
    function construct_departments()
    {
      if (isset($_SESSION['currentdept']) &&
          isset($_POST['prevdept']) && 
          $_SESSION['currentdept'] > 1) {
        $current = $_SESSION['currentdept'] - 1;
      }
      elseif (isset($_SESSION['currentdept']) && 
              isset($_POST['nextdept'])) {
        $current = $_SESSION['currentdept'] + 1;
      }
      elseif (isset($_POST['showdept']) && 
              isset($_SESSION['currentdept'])) {
        $current = $_SESSION['currentdept'];
      }
      else {
        $current = 1;
      }
    
      $query = 'SELECT department_id, department_name, 
                       manager_id, location_id
                FROM   departments
                ORDER BY department_id asc';
    
      $conn = db_connect();
    
      $dept = db_get_page_data($conn, $query, $current, 1);
      $deptid = $dept[0]['DEPARTMENT_ID'];
    
      $_SESSION['currentdept'] = $current;
    
      ui_print_header('Department');
      ui_print_department($dept[0], $_SERVER['SCRIPT_NAME']);
      ui_print_footer(date('Y-m-d H:i:s'));
    }
    
    ?>
    

    The if and elseif construct at the start of the construct_departments() function is used to detect if a navigation button was used with an HTTP post request to process the page, and tracks if the currentdept number is set in the session state. Depending on the circumstances, the variable $current is decremented by one when the previous button is clicked, $current is incremented by one when the Next button is clicked, otherwise $current is set to the current department, or initialized to one for the first time through.

    A query is formed to obtain all the department rows in ascending sequence of the department_id. The ORDER BY clause is an essential part of the navigation logic. The query is used as a subquery inside the db_get_page_data() function to obtain a page of a number of rows, where the number of rows per page is specified as the fourth argument to the db_get_page_data() function. After connecting to the database, db_get_page_data() is called to retrieve the set of rows obtained for the specified query. The db_get_page_data() function is provided with the connection resource, the query string, a value in $current specifying the first row in the next page of data rows required, and the number of rows per page (in this case one row per page).

    After db_get_page_data()has been called to obtain a page of rows, the value of $current is stored in the application session state.

    Between printing the page header and footer, the ui_print_department() function is called to display the recently fetched department row. The ui_print_department() function uses $_SERVER['SCRIPT_NAME'] to supply the current PHP script name for the $posturl parameter. This sets the action attribute in the HTML form, so that each Next or Previous button click calls the anyco.php file.

  3. Edit the anyco_db.inc file. Implement the db_get_page_data() function to query a subset of rows:

    // Return subset of records
    function db_get_page_data($conn, $q1, $current = 1,
                     $rowsperpage = 1, $bindvars = array())
    {
      // This query wraps the supplied query, and is used
      // to retrieve a subset of rows from $q1
      $query = 'SELECT *
                FROM (SELECT A.*, ROWNUM AS RNUM
                      FROM ('.$q1.') A
                      WHERE ROWNUM <= :LAST)
                WHERE :FIRST <= RNUM';
    
      // Set up bind variables.
      array_push($bindvars, array('FIRST', $current, -1));
      array_push($bindvars,
                 array('LAST', $current+$rowsperpage-1, -1));
    
      $r = db_do_query($conn, $query, $bindvars);
      return($r);
    }
    

    The structure of the query in the db_get_page_data() function enables navigation through a set (or page) of database rows.

    The query supplied in $q1 is nested as a subquery inside the following subquery:

    SELECT A.*, ROWNUM AS RNUM FROM $q1 WHERE ROWNUM <= :LAST
    

    Remember that the query supplied in $q1 retrieves an ordered set of rows, which is filtered by its enclosing query to return all the rows from the first row to the next page size ($rowsperpage) of rows. This is possible because the Oracle ROWNUM function (or pseudocolumn) returns an integer number starting at 1 for each row returned by the query in $q1.

    The set of rows, returned by the subquery enclosing query $q1, is filtered a second time by the condition in the following outermost query:

    WHERE :FIRST <= RNUM
    

    This condition ensures that rows prior to the value in :FIRST (the value in $current) are excluded from the final set of rows. The query enables navigation through a set rows where the first row is determined by the $current value and the page size is determined by the $rowsperpage value.

    The $current value is associated with the bind variable called :FIRST. The expression $current+$rowsperpage-1 sets the value associated with the :LAST bind variable.

  4. To test the changes made to your application, save the changed files, and enter the following URL in your Web browser:

    On Windows:

    http://localhost/chap4/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap4/anyco.php
    

    When you request the anyco.php page, the first DEPARTMENT table record, the Administration department, is displayed:

    Description of chap4_db_nagivation_001.gif follows
    Description of the illustration chap4_db_nagivation_001.gif

  5. To navigate to the next department record (Marketing), click Next:

    Description of chap4_db_nagivation_002.gif follows
    Description of the illustration chap4_db_nagivation_002.gif

  6. To navigate back to the first department record (Administration), click Previous:

    Description of chap4_db_nagivation_003.gif follows
    Description of the illustration chap4_db_nagivation_003.gif

You may continue to test and experiment with the application by clicking Next and Previous to navigate to other records in the DEPARTMENTS table, as desired.


Note:

If you navigate past the last record in the DEPARTMENTS table, an error will occur. Error handling is added in Adding Error Recovery in Chapter 5.

ROWNUM vs ROW_NUMBER()

If you were writing a PHP function with a hard coded query, the ROW_NUMBER() function may be a simpler alternative for limiting the number of rows returned. For example, a query that returns the last name of all employees:

SELECT last_name FROM employees ORDER BY last_name;

could be written to select rows 51 to 100 inclusive as:

SELECT last_name FROM
  SELECT last_name, ROW_NUMBER() OVER (ORDER BY last_name R FROM employees)
  where R BETWEEN 51 AND 100;

Extending the Basic Departments Page

The Departments page is extended to include the following additional information:

The additional information is obtained by modifying the query to perform a join operation between the DEPARTMENTS, EMPLOYEES, LOCATIONS, and COUNTRIES tables.

To extend the Departments page, perform the following tasks:

  1. Edit the anyco_ui.inc file. Modify the ui_print_department() function by replacing the Manager ID and Location ID references with the Manager Name and Location, respectively, and insert a Number of Employees field after Department Name. Make the necessary changes in the table header and data fields. The function becomes:

    function ui_print_department($dept, $posturl)
    {
      if (!$dept) {
        echo '<p>No Department found</p>';
      }
      else {
        echo <<<END
      <table>
      <tr>
        <th>Department<br>ID</th>
        <th>Department<br>Name</th>
        <th>Number of<br>Employees</th>
        <th>Manager<br>Name</th>
        <th>Location</th>
      </tr>
      <tr>
    END;
      echo '<td>'.htmlentities($dept['DEPARTMENT_ID']).'</td>';
      echo '<td>'.htmlentities($dept['DEPARTMENT_NAME']).'</td>';
      echo '<td>'.htmlentities($dept['NUMBER_OF_EMPLOYEES']).'</td>';
      echo '<td>'.htmlentities($dept['MANAGER_NAME']).'</td>';
      echo '<td>'.htmlentities($dept['COUNTRY_NAME']).'</td>';
      echo <<<END
      </tr>
      </table>
      <form method="post" action="$posturl">
      <input type="submit" value="< Previous" name="prevdept">
      <input type="submit" value="Next >"     name="nextdept">
      </form>
    END;
      }
    }
    
  2. Edit the anyco.php file. Replace the query string in construct_departments() with:

    $query = 
      "SELECT d.department_id, d.department_name, 
           substr(e.first_name,1,1)||'. '|| e.last_name as manager_name,
           c.country_name, count(e2.employee_id) as number_of_employees
       FROM  departments d, employees e, locations l, 
             countries c, employees e2
       WHERE d.manager_id = e.employee_id
       AND d.location_id = l.location_id
       AND d.department_id = e2.department_id
       AND l.country_id = c.country_id
       GROUP BY d.department_id, d.department_name, 
             substr(e.first_name,1,1)||'. '||e.last_name,  
             c.country_name
       ORDER BY d.department_id ASC";
    

    The query string is enclosed in double quotation marks to simplify writing this statement, which contains SQL literal strings in single quotation marks.

  3. Save the changes to your files, and test the changes by entering the following URL in a Web browser:

    On Windows:

    http://localhost/chap4/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap4/anyco.php
    

    The Web page result should resemble the following output:

    Description of chap4_enhance_dept_001.gif follows
    Description of the illustration chap4_enhance_dept_001.gif

PK%P PK**AOEBPS/title.htm3 Oracle Database 2 Day + PHP Developer's Guide, 11g Release 2 (11.2)

Oracle® Database

2 Day + PHP Developer's Guide

11g Release 2 (11.2)

E10811-01

July 2009


Oracle Database 2 Day + PHP Developer's Guide, 11g Release 2 (11.2)

E10811-01

Copyright © 2009, Oracle and/or its affiliates. All rights reserved.

Primary Author: Simon Watt

Contributors: Christopher Jones, Simon Law, Glenn Stokol

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this software or related documentation is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

This software is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications which may create a risk of personal injury. If you use this software in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of this software. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software in dangerous applications.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

This software and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

PK83PK**AOEBPS/ch_three.htmRH Getting Connected

3 Getting Connected

In this chapter, you create HR application files that implement PHP functions to connect and disconnect to the Oracle Database. You also develop a PHP function that enables you to execute a query to validate that a database connection has been successfully established.

This chapter also guides you through the creation and modification of PHP files that call a function to produce the header and footer for the Departments page, where the footer section of the page includes a date and time.

This chapter has the following topics:


Note:

For simplicity, the user name and password are written into this sample application code. For applications that will be deployed, coding the user name and password strings directly into your application source code is not recommended. Oracle recommends that you use a more secure technique, such as implementing a dialog that prompts the user for the user name and password.

See Oracle Database Security Guide and the documentation for your development environment for details on security features and practices.


Building the Departments Page

In this section, you will create the functions and styles for the first screen of your application.

Follow these steps to build the Departments page:

  1. To create a directory for your application files, and to change to the newly created directory, enter the following commands in a command window:

    On Windows:

    mkdir c:\program files\Apache Group\Apache2\htdocs\chap3
    cd c:\program files\Apache Group\Apache2\htdocs\chap3
    

    On Linux:

    mkdir $HOME/public_html/chap3
    cd $HOME/public_html/chap3
    

    If you create files in a different location, you must change the steps for file editing and execution to match your working directory name and URL.

  2. To start developing your application user interface, use your preferred text editor to create a file called anyco_ui.inc that contains the two functions ui_print_header() and ui_print_footer() with their parameters to enable your application Web pages to have consistent header and footer sections:

    <?php
    
    function ui_print_header($title)
    {
      $title = htmlentities($title);
      echo <<<END
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
      <html>
      <head>
        <meta http-equiv="Content-Type"
              content="text/html; charset=ISO-8859-1">
        <link rel="stylesheet" type="text/css" href="style.css">
        <title>Any Co.: $title</title>
      </head>
      <body>
      <h1>$title</h1>
    END;
    }
    
    function ui_print_footer($date)
    {
      $date = htmlentities($date);
      echo <<<END
      <div class="footer">
        <div class="date">$date</div>
        <div class="company">Any Co.</div>
      </div>
    END;
    }
    
    ?>
    
    • This application design uses PHP function definitions to enable modular reusable code.

    • The functions in anyco_ui.inc use a PHP language construct called a "here document." This enables you to place any amount of HTML formatted text between the following two lines:

      echo <<<END
      END;
      
    • Do not put leading spaces in the END; line. If you do, the rest of the document will be treated as part of the text to be printed.

    • Any PHP parameters appearing inside the body of a "here document" are replaced with their values, for example, the $title or $date parameters.

    • The PHP function htmlentities() is used to prevent user-supplied text from accidentally containing HTML markup and affecting the output formatting.

  3. The PHP file uses a Cascading Style Sheet (CSS) file called style.css to specify the presentation style in HTML in the browser.

    Create a style.css file in the chap3 directory with the following CSS text:

    body
    { background: #CCCCFF;
      color:      #000000;
      font-family: Arial, sans-serif; }
    
    h1
    { border-bottom: solid #334B66 4px;
      font-size: 160%; }
    
    table
    { padding: 5px; }
    
    td
    { border: solid #000000 1px;
      text-align: left;
      padding: 5px; }
    
    th
    { text-align: left;
      padding: 5px; }
    
    .footer
    { border-top: solid #334B66 4px;
      font-size: 90%; }
    
    .company
    { padding-top: 5px;
      float: right; }
    
    .date
    { padding-top: 5px;
      float: left; }
    
  4. To call the user interface functions, create the anyco.php file with the following text:

    <?php
    
    require('anyco_ui.inc');
    
    ui_print_header('Departments');
    ui_print_footer(date('Y-m-d H:i:s'));
    
    ?>
    

    The require() PHP command is used to include anyco_ui.inc. The new functions can be called to produce HTML output.

  5. To test the anyco.php file, enter the following URL in your browser:

    On Windows:

    http://localhost/chap3/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap3/anyco.php
    

    The resulting Web page is similar to the following:

    Description of chap3_test_install_005.gif follows
    Description of the illustration chap3_test_install_005.gif

    The date and time appear in the page footer section.

Connecting to the Database

In this section, you will add a database connection to your Departments screen so that you can display Department data.

Follow these steps to add a database connection to your application.

To form a database connection, you use the oci_connect() function with three string parameters:

$conn = oci_connect($username, $password, $db)

The first and second parameters are the database user name and password, respectively. The third parameter is the database connection identifier. The oci_connect() function returns a connection resource needed for other OCI8 calls; it returns FALSE if an error occurs. The connection identifier returned is stored in a variable called $conn.

  1. Edit the anyco.php file to add a database connection with the following parameter values:

    • Username is hr.

    • Password for this example is hr. Remember to use the actual password of your HR user.

    • Oracle connection identifier is //localhost/orcl.

  2. Edit the anyco.php file to validate that the oci_connect() call returns a usable database connection, write a do_query() function that accepts two parameters: the database connection identifier, obtained from the call to oci_connect(), and a query string to select all the rows from the DEPARTMENTS table.

  3. Edit the anyco.php file to prepare the query for execution, add an oci_parse() call. The oci_parse() function has two parameters, the connection identifier and the query string. It returns a statement identifier needed to execute the query and fetch the resulting data rows. It returns FALSE if an error occurs.

  4. Edit the anyco.php file to execute the query, add a call to the oci_execute() function. The oci_execute() function executes the statement associated with the statement identifier provided in its first parameter. The second parameter specifies the execution mode. OCI_DEFAULT is used to indicate that you do not want statements to be committed automatically. The default execution mode is OCI_COMMIT_ON_SUCCESS. The oci_execute() function returns TRUE on success; otherwise it returns FALSE.

  5. Edit the anyco.php file to fetch all the rows for the query executed, add a while loop and a call to the oci_fetch_array() function. The oci_fetch_array() function returns the next row from the result data; it returns FALSE if there are no more rows. The second parameter of the oci_fetch_array() function, OCI_RETURN_NULLS, indicates that NULL database fields will be returned as PHP NULL values.

    Each row of data is returned as a numeric array of column values. The code uses a PHP foreach construct to loop through the array and print each column value in an HTML table cell, inside a table row element. If the item value is NULL then a nonbreaking space is printed; otherwise the item value is printed.

    After the edits in Steps 1 to 5, the anyco.php file becomes:

    <?php // File: anyco.php
    
    require('anyco_ui.inc');
    
    // Create a database connection
    $conn = oci_connect('hr', 'hr', '//localhost/orcl');
    
    ui_print_header('Departments');
    do_query($conn, 'SELECT * FROM DEPARTMENTS');
    ui_print_footer(date('Y-m-d H:i:s'));
    
    // Execute query and display results 
    function do_query($conn, $query)
    {
      $stid = oci_parse($conn, $query);
      $r = oci_execute($stid, OCI_DEFAULT);
    
      print '<table border="1">';
      while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
        print '<tr>';
        foreach ($row as $item) {
          print '<td>'.
                ($item!== null ? htmlentities($item) : '&nbsp;').'</td>';
        }
        print '</tr>';
      }
      print '</table>';
    }
    
    ?>
    
  6. To test the changes made to anyco.php, save the modified anyco.php file. In a browser window, enter the following URL:

    On Windows:

    http://localhost/chap3/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap3/anyco.php
    

    The page returned in the browser window should resemble the following page:

    Description of chap3_db_connect_001.gif follows
    Description of the illustration chap3_db_connect_001.gif

    If you want to query the EMPLOYEES data, you can optionally change the query in the do_query() function call to:

    do_query($conn, 'SELECT * FROM EMPLOYEES');
    

If You Have Connection Problems

Check that the username, password and connection string are valid. The connect string '//localhost/orcl' uses the Oracle Easy Connect syntax. If you are using an Oracle Net tnsnames.ora file to specify the database you want to connect to, then use the network alias as the third parameter to the oci_connect() function.

If you are not seeing errors, set the PHP directive display_errors to ON, and the error_reporting directive to E_ALL|E_STRICT.

If you have a PHP code problem and are not using a debugger, you can examine variables using the PHP var_dump() function. For example:

print '<pre>';
var_dump($r);
print '</pre>';

Other Ways to Connect

In some applications, using a persistent connection improves performance by removing the need to reconnect each time the script is called. Depending on your Apache configuration, this may cause a number of database connections to remain open simultaneously. You must balance the connection performance benefits against the overhead on the database server.

Persistent connections are made with the OCI8 oci_pconnect() function. Several settings in the PHP initialization file enable you to control the lifetime of persistent connections. Some settings include:

oci8.max_persistent - This controls the number of persistent connections per process.

oci8.persistent_timeout - This specifies the time (in seconds) that a process maintains an idle persistent connection.

oci8.ping_interval - This specifies the time (in seconds) that must pass before a persistent connection is "pinged" to check its validity.

For more information, see the PHP reference manual at

http://www.php.net/manual/en/ref.oci8.php

For information about connection pooling, see Connection Pooling in OCI in the Oracle Call Interface Programmer's Guide and the Oracle Database Net Services Administrator's Guide.

Disconnecting from the Database

The PHP engine automatically closes the database connection at the end of the script unless a persistent connection was made. If you want to explicitly close a non-persistent database connection, you can call the oci_close() OCI function with the connection identifier returned by the oci_connect() call. For example:

<?php

$conn = oci_connect('hr', '<your_password>', '//localhost/orcl');
...
oci_close($conn);

...

?>

Because PHP uses a reference counting mechanism for tracking variables, the database connection may not actually be closed until all PHP variables referencing the connection are unset or go out of scope.

PK1H5RRPK**AOEBPS/preface.htmB Preface

Preface

Oracle Database 2 Day + PHP Developer's Guide introduces developers to the use of PHP to access Oracle Database.

This preface contains these topics:

Audience

Oracle Database 2 Day + PHP Developer's Guide is an introduction to application development using PHP and Oracle Database.

This document assumes that you have a cursory understanding of SQL, PL/SQL, and PHP.

Documentation Accessibility

Our goal is to make Oracle products, services, and supporting documentation accessible to all users, including users that are disabled. To that end, our documentation includes features that make information available to users of assistive technology. This documentation is available in HTML format, and contains markup to facilitate access by the disabled community. Accessibility standards will continue to evolve over time, and Oracle is actively engaged with other market-leading technology vendors to address technical obstacles so that our documentation can be accessible to all of our customers. For more information, visit the Oracle Accessibility Program Web site at http://www.oracle.com/accessibility/.

Accessibility of Code Examples in Documentation

Screen readers may not always correctly read the code examples in this document. The conventions for writing code require that closing braces should appear on an otherwise empty line; however, some screen readers may not always read a line of text that consists solely of a bracket or brace.

Accessibility of Links to External Web Sites in Documentation

This documentation may contain links to Web sites of other companies or organizations that Oracle does not own or control. Oracle neither evaluates nor makes any representations regarding the accessibility of these Web sites.

Deaf/Hard of Hearing Access to Oracle Support Services

To reach Oracle Support Services, use a telecommunications relay service (TRS) to call Oracle Support at 1.800.223.1711. An Oracle Support Services engineer will handle technical issues and provide customer support according to the Oracle service request process. Information about TRS is available at http://www.fcc.gov/cgb/consumerfacts/trs.html, and a list of phone numbers is available at http://www.fcc.gov/cgb/dro/trsphonebk.html.

Related Documents

For more information, see these Oracle resources:

Conventions

The following text conventions are used in this document:

ConventionMeaning
boldfaceBoldface type indicates graphical user interface elements associated with an action, or terms defined in text.
italicItalic type indicates book titles, emphasis, or placeholder variables for which you supply particular values.
monospaceMonospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter.

PKD-PK**AOEBPS/index.htm Index

Index

A  B  C  D  E  F  G  H  I  J  L  M  N  O  P  Q  R  S  T  U  V  W 

Symbols

$bindargs array, 4.2
$bindargs parameter, 5.1
$bindvars parameter, 4.2, 4.2, 7.1
$conn parameter, 3.2
$current variable, 4.3
$date parameter, 3.1
$DID variable, 4.2
$e parameter, 5.4, 5.4, 5.4
$emp variable, 5.3
$file parameter, 4.1
$line parameter, 4.1
$posturl parameter, 4.3, 4.3
$q1 parameter, 4.3
$query parameter, 5.2
$r parameter, 4.1
$refcur variable, 6.2
$results parameter, 4.1
$resulttype parameter, 5.2
$rowsperpage parameter, 4.3
$stid parameter, 4.1, 4.2
$title parameter, 3.1
@ preventing error display, 5.4
__FILE__ variable, 4.1, 5.4
__LINE__ variable, 4.1, 5.4

A

AL32UTF8 character set, 8.1
AnyCo Corp
tutorial application, 1.2
anyco_cn.inc
creating, 4.1
description, 1.2
anyco_db.inc
calling bind variable, 4.2
calling PL/SQL packaged procedure, 6.2
changing the bind variable, 7.1
choosing output type, 5.2, 5.2
creating, 4.1
creating a thumbnail image, 7.2
description, 1.2
executing data manipulation statements, 5.2
including in anyco.php, 4.1
inserting thumbnail image, 7.1
passing error parameter, 5.4
preventing error display, 5.4
return error variable, 5.4
returning errors, 5.4
returning errors from all functions, 5.4
subset query, 4.3
testing, 4.2
anyco_im.php
creating, 7.1
description, 1.2
employee image display, 7.1
anyco_ui.inc
add employee remuneration column, 6.1
adding an employee image column, 7.1
adding navigation, 4.3
creating, 3.1, 3.1
description, 1.2
employee data in HTML table, 5.1
error printing, 5.4
extending, 4.4
formatting results, 4.1
functions, 3.1
generating an employee img tag, 7.1
generating employee data HTML form, 5.2
HTML form for employee data, 5.2
including, 3.1
including in anyco.php, 4.1
testing changes, 5.1
updating an employee record, 5.2
uploading employee image, 7.1
anyco.php
adding db connection, 3.2
bind variables, 4.2
building employee records, 5.2
calling a PL/SQL function, 6.1
creating, 3.1
data manipulation logic, 5.2
deleting employee records, 5.2
departments instead of employees, 5.1
description, 1.2
employees and departments pages, 5.3
employees page, 5.1
error handling, 5.4, 5.5
executing the query, 3.2
fetching all rows, 3.2
include files, 4.1
inserting an image, 7.1
inserting employee records, 5.2
navigation, 4.3
obtaining the default department, 5.3
printing page titles, 5.3
query to execute, 3.2
replace query, 4.4
testing, 3.1, 3.2, 4.1, 4.2, 4.3, 4.4, 5.1, 5.2, 5.3, 5.4, 5.5, 6.1, 6.2, 7.1, 7.2
updating employee records, 5.2
usable database connection, 3.2
using a bind variable, 4.2
Apache
creating public_html, 2.3.6
httpd.conf configuration file, 2.3.6
public_html, 2.3.6
restarting, 2.3.6
testing installation on Linux, 2.3.6
testing installation on Windows, 2.3.3
application, 5.4
adding an employee image, 7.1
adding employee remuneration column, 6.1
building employee records, 5.2
calling departments instead of employees, 5.1
calling locale specific functions, 8.4
centralizing database logic, 4.1
choosing output type, 5.2, 5.2
combining departments and employees, 5.3
connection functions, 4.1
constants for database connection, 4.1
creating employees page, 5.1
deleting employee records, 5.2
employee image display, 7.1
employee images in BLOBs, 7.1
error recovery, 5.4
executing data manipulation statements, 5.2
executing the query, 3.2
extending departments page, 4.4
extending employees page, 5.2
externalizing translatable strings, 8.6.1
fetching all rows, 3.2
file naming convention, 1.2
files directory, 2.5, 3.1
generating an employee img tag, 7.1
globalizing, 8
implementing subset query, 4.3
inserting employee records, 5.2
inserting employee thumbnail, 7.1
Next and Previous buttons, 4.3
obtaining the default department, 5.3
Oracle errors, 5.5
PL/SQL procedures and functions, 6.1
printing errors, 5.4
printing page titles, 5.3
query to execute, 3.2
report page, 3
return error variable, 5.4
thumbnail images, 7.2
translating HTML and GIF, 8.6.2
translating the user interface, 8.6
updating employee records, 5.2
uploading employee image, 7.1
user interface, 3.1
UTF-8 page encoding, 8.5
array_push() function, 7.1

B

bind variables, 4.2, 4.2
anyco.php, 4.2
calling in anyco_db.inc, 4.2
DID, 4.2, 4.2, 5.3
FIRST, 4.3
LAST, 4.3
modify query, 4.2
NEWEID, 7.1
OUT, 7.1
returning from database, 7.1
BLOBs
storing employee images, 7.1

C

calc_remuneration() function, 6.1
character sets
AL32UTF8, 8.1
globalization settings, 8.2
UTF-8, 8.1
charset parameter, 8.5.1.1
configuring
Apache httpd.conf, 2.3.6
connections
disconnecting, 3.3
Easy Connect syntax, 3.2.1
HR user, 2.2.1, 6.1
Oracle Database, 3
persistent, 3.2.2
settings, 3.2.2
construct_departments() function, 4.3, 4.3, 4.3, 4.4, 5.1
construct_employees() function, 5.1, 5.1, 5.3, 6.1
construct_image() function, 7.1
construct_insert_emp() function, 5.2, 5.3
construct_modify_emp() function, 5.2
Content-type, 7.1
conventions
presenting data, 8.7
COUNTRIES table, 4.4
creating
anyco_ui.inc application user interface, 3.1
directory for application files, 2.5, 3.1
PHP files, 3
public_html, 2.3.6
cv_types.et_employees() procedure, 6.2

D

database
centralizing logic, 4.1
connection functions, 4.1
constants for connection, 4.1
disconnection, 3.3
dynamic information, 8.6.3
Easy Connect syntax, 3.2.1
executing the query, 3.2
fetching all rows, 3.2
navigating records, 4.3
storing employee images, 7.1
tnsnames.ora, 3.2.1
validating connection, 3.2
date formats in Oracle, 8.7.1
date() function, 5.2
db_do_query() function, 4.1, 4.2, 4.2, 5.1, 5.1, 5.2, 5.2, 5.2, 5.4
db_error () function, 4.1
db_error() function, 4.1, 5.4, 5.4
db_execute_statement() function, 5.2, 5.2, 7.1
db_get_employees_rc() function, 6.2
db_get_page_data() function, 4.3, 4.3, 4.3, 5.2, 5.4
db_insert_thumbnail() function, 7.1, 7.2, 7.2
debugging, 4.1
delete_emp() function, 5.2
department_id variable, 5.3
departments page
combining with employees, 5.3
extending, 4.4
DEPARTMENTS table, 1.2, 3.2, 4.3, 4.4
deptid parameter, 5.3
DID bind variable, 4.2, 4.2, 5.3
directives
display_errors, 3.2.1
error_reporting, 3.2.1
disconnection, 3.3
display_errors directive, 3.2.1
do_query() function, 3.2

E

Easy Connect syntax, 3.2.1
EMPLOYEE_PHOTOS table, 7.1, 7.1
employees page, 5.1
combining with departments, 5.3
creating, 5.1
extending, 5.2
EMPLOYEES table, 1.2, 3.2, 4.4, 5.2, 5.2, 5.2, 7.1
enctype attribute, 7.1
environment variables
NLS_LANG, 8.1
NLS_LANGUAGE, 8.4, 8.7.4
NLS_TERRITORY, 8.4
error_reporting directive, 3.2.1
errors
assigning to variable, 5.4
handling, 5.4
NLS_LANGUAGE, 8.7.4
Oracle, 5.5
passing parameter, 5.4
preventing display, 5.4
recovery, 5.4
returning, 5.4
returning from all functions, 5.4

F

files
adding data manipulation logic to anyco.php, 5.2
adding db connection to anyco.php, 3.2
adding navigation to anyco.php, 4.3
anyco_cn.inc description, 1.2
anyco_db.inc description, 1.2
anyco_im.php description, 1.2
anyco_ui.inc description, 1.2
anyco.php description, 1.2
application, 2.5, 3.1
application naming convention, 1.2
creating anyco_cn.inc, 4.1
creating anyco_db.inc, 4.1
creating anyco_im.php, 7.1
creating anyco_ui.inc, 3.1
creating anyco.php, 3.1
employees and departments pages, 5.3
employees page in anyco.php, 5.1
error handling in anyco.php, 5.4, 5.5
extending anyco_ui.inc, 4.4
include file in anyco_ui.inc, 3.1
include files in anyco.php, 4.1
JPEG, 7.2
style.css description, 1.2
testing anyco_ui.inc, 5.1
testing anyco.php, 3.1, 3.2, 4.1, 4.2, 4.3, 4.4, 5.1, 5.2, 5.3, 5.4, 5.5, 6.1, 6.2, 7.1, 7.2
translating HTML and GIF, 8.6.2
FIRST bind variable, 4.3
format
function in anyco_ui.inc, 4.1
functions
anyco_ui.inc, 3.1
array_push(), 7.1
calc_remuneration(), 6.1
construct_departments(), 4.3, 4.3, 4.3, 4.4, 5.1
construct_employees(), 5.1, 5.1, 5.3, 6.1
construct_image(, 7.1
construct_insert_emp(), 5.2, 5.3
construct_modify_emp(), 5.2
date(), 5.2
db_do_query(), 4.1, 4.2, 4.2, 5.1, 5.1, 5.2, 5.2, 5.2, 5.4
db_error (), 4.1
db_error(), 4.1, 5.4, 5.4
db_execute_statement(), 5.2, 5.2, 7.1
db_get_employees_rc(), 6.2
db_get_page_data(), 4.3, 4.3, 4.3, 5.2, 5.4
db_insert_thumbnail(), 7.1, 7.2, 7.2
delete_emp(), 5.2
do_query(), 3.2
get_dept_name(), 5.3
header(), 7.1
htmlentities(), 3.1
imagecopyresampled(), 7.2
imagecreatefromjpeg(), 7.2
imagecreatetruecolor(), 7.2
insert_new_emp(), 5.2, 5.5, 7.1
isset(), 4.1
modify_emp(), 5.2
oci_bind_by_name(), 4.2, 4.2
oci_close(), 3.3
oci_connect(), 3.2, 3.2.1, 3.3
oci_error(), 4.1
oci_execute(), 4.2
oci_fetch_all(), 4.1, 5.2
oci_fetch_array(), 3.2
oci_parse(), 3.2
OCI8 oci_pconnect(), 3.2.2
OCI8 oci_pconnect() function, 3.2.2
OCI-Lob->load(), 7.1
session_start(), 4.3
SYSDATE, 5.2
ui_print_department(), 4.3, 4.3, 4.4
ui_print_employees(), 5.1, 5.1, 5.2, 6.1, 7.1, 7.1
ui_print_error(), 5.4
ui_print_footer(), 3.1
ui_print_header(), 3.1
ui_print_insert_employee(), 5.2, 5.3, 7.1
ui_print_modify_employee(), 5.2
var_dump(), 3.2.1, 4.1

G

GD graphicsextension, 7.2
get_dept_name() function, 5.3
globalizing
applications, 8
calling locale specific functions, 8.4
character sets, 8.2
date formats, 8.7.1
determining user locale, 8.3
dynamic information, 8.6.3
HTML page encoding, 8.5
linguistic sorts, 8.7.3
NLS_LANGUAGE, 8.7.4
number formats, 8.7.2
PHP and Oracle environment, 8.1
presenting data, 8.7
sorting data, 8.7
translating the user interface, 8.6

H

header() function, 7.1
hello.php
testing PHP installation, 2.5
HTML
cascading style sheet, 3.1
employee data output, 5.1
form containing employee data, 5.2
generating employee data form, 5.2
page encoding, 8.5, 8.5.1.1, 8.5.1.2, 8.5.2
page header, 8.5.1.2
htmlentities() function, 3.1
HTTP header
page encoding, 8.5.1.1
httpd.conf Apache configuration file, 2.3.6
Human Resources (HR) application, 1.2

I

imagecopyresampled() function, 7.2
imagecreatefromjpeg() function, 7.2
imagecreatetruecolor() function, 7.2
images
creating a thumbnail, 7.2
creating thumbnails, 7.2
inserting employee thumbnail, 7.1
inserting in anyco.php, 7.1
storing in BLOBs, 7.1
include files
anyco_ui.inc, 3.1
anyco.php, 4.1
in anyco.php, 4.1, 4.1
insert_new_emp() function, 5.2, 5.5, 7.1
installation
Oracle Database, 2, 2.2
PHP on Linux, 2.4.2
PHP on Windows, 2.3.1, 2.3.4, 2.4.1
isset() function, 4.1

J

JOBS table, 5.2
JPEG file, 7.2

L

LAST bind variable, 4.3
linguistic sorts, 8.7.3
locale, 8.3
LOCATIONS table, 4.4

M

modify_emp() function, 5.2

N

navigating database records, 4.3, 4.3
NEWEID bind variable, 7.1
NLS_LANG environment variable, 8.1
NLS_LANGUAGE environment variable, 8.4, 8.7.4
NLS_TERRITORY environment variable, 8.4
NULL values, 3.2
number formats in Oracle, 8.7.2

O

obtaining
Oracle Database, 2.2
OCI_B_CURSOR ref cursor, 6.2
oci_bind_by_name() function, 4.2, 4.2
oci_close() function, 3.3
OCI_COMMIT_ON_SUCCESS parameter, 3.2
oci_connect() function, 3.2, 3.2.1, 3.3
OCI_DEFAULT parameter, 3.2
oci_error() function, 4.1
oci_execute() function, 4.2
oci_fetch_all() function, 4.1, 5.2
oci_fetch_array() function, 3.2
OCI_FETCHSTATEMENT_BY_COLUMN parameter, 5.2
OCI_FETCHSTATEMENT_BY_ROW parameter, 4.1, 5.2, 5.2
oci_parse() function, 3.2
OCI_RETURN_NULLS parameter, 3.2
OCI8 oci_pconnect(), 3.2.2
OCI8 oci_pconnect() function, 3.2.2
oci8.max_persistent setting, 3.2.2
oci8.persistent_timeout setting, 3.2.2
oci8.ping_interval setting, 3.2.2
OCI-Lob->load() function, 7.1
Oracle
date formats, 8.7.1
establishing environment, 8.1
number formats, 8.7.2
tnsnames.ora, 3.2.1
Oracle Database
connecting, 3
installing, 2
obtaining and installing, 2.2
prerequisites, 2.1
OUT bind variable, 7.1

P

parameters
$bindargs, 5.1
$bindvars, 4.2, 4.2, 7.1
$conn, 3.2
$date, 3.1
$e, 5.4, 5.4, 5.4
$file, 4.1
$line, 4.1
$posturl, 4.3, 4.3
$q1, 4.3
$query, 5.2
$r, 4.1
$results, 4.1
$resulttype, 5.2
$rowsperpage, 4.3
$stid, 4.1, 4.2
$title, 3.1
charset, 8.5.1.1
deptid, 5.3
OCI_COMMIT_ON_SUCCESS, 3.2
OCI_DEFAULT, 3.2
OCI_FETCHSTATEMENT_BY_COLUMN, 5.2
OCI_FETCHSTATEMENT_BY_ROW, 4.1, 5.2, 5.2
OCI_RETURN_NULLS, 3.2
PHP
application logic, 4.1
cascading style sheet, 3.1
character sets, 8.2
creating files, 3
determining user locale, 8.3
display_errors directive, 3.2.1
error_reporting directive, 3.2.1
establishing environment, 8.1
externalizing translatable strings, 8.6.1
GD graphicsextension, 7.2, 7.2
globalizing your application, 8
hello.php, 2.5
here document, 3.1
HTML page encoding, 8.5.2
installing on Linux, 2.4.2
installing on Windows, 2.3.1, 2.3.4, 2.4.1
NULL values, 3.2
oci8.max_persistent, 3.2.2
oci8.persistent_timeout, 3.2.2
oci8.ping_interval, 3.2.2
translating HTML and GIF files, 8.6.2
PHP - PHP Hypertext Preprocessor, 1
PHP functions
ui_print_footer(), 3.1
ui_print_header(), 3.1
PL/SQL
application procedures and functions, 6.1
calling function in anyco.php, 6.1
calling packaged procedure, 6.2
cv_types.et_employees() packaged procedure, 6.2
UTL_I18N package, 8.4
prerequisites for Oracle Database, 2.1
public virtual directory in Apache, 2.3.6
public_html
Apache, 2.3.6
creating, 2.3.6

Q

queries with bind variables, 4.2

R

ref cursors
OCI_B_CURSOR, 6.2
reporting in the application, 3
restarting Apache, 2.3.6
returning errors, 5.4
returning false statements, 5.4

S

session_start() function, 4.3
sorting, 8.7, 8.7.3
statements, returning false, 5.4
style.css
HTML presentation, 3.1
style.css description, 1.2
SYSDATE function, 5.2

T

tables
COUNTRIES, 4.4
DEPARTMENTS, 1.2, 3.2, 4.3, 4.4
EMPLOYEE_PHOTOS, 7.1, 7.1
EMPLOYEES, 1.2, 3.2, 4.4, 5.2, 5.2, 5.2, 7.1
JOBS, 5.2
LOCATIONS, 4.4
testing
anyco_db.inc, 4.2
anyco_ui.inc, 5.1
Apache installation on Linux, 2.3.6
Apache installation on Windows, 2.3.3
thumbnail images, 7.2
tnsnames.ora, 3.2.1
tutorial AnyCo Corp, 1.2

U

ui_print_department() function, 4.3, 4.3, 4.4
ui_print_employees() function, 5.1, 5.1, 5.2, 6.1, 7.1, 7.1
ui_print_error() function, 5.4
ui_print_footer() function, 3.1
ui_print_header() function, 3.1
ui_print_insert_employee() function, 5.2, 5.3, 7.1
ui_print_modify_employee() function, 5.2
unlocking HR account, 2.2.1, 6.1
user interface
externalizing translatable strings, 8.6.1
translating, 8.6
UTF-8
character set, 8.1
HTML page encoding, 8.5
UTL_I18N package, 8.4

V

var_dump() function, 3.2.1, 4.1
variables
$current, 4.3
$DID, 4.2
$emp, 5.3
$refcur, 6.2
__FILE__, 4.1, 5.4
__LINE__, 4.1, 5.4
department_id, 5.3

W

Web browser
testing Apache installation on Linux, 2.3.6
testing Apache installation on Windows, 2.3.3
PK% PK**A!OEBPS/img/chap5_basic_emp_001.gifL GIF87a,*4,.<$LJ\켾DBTdj|z䬲<>L\^t$&, ܼLN\db|46D􌎬\Zl$",42S(G1 `ď CEl G\2dɓR C Ȑ" )lF@ $!+LCg*6/U*g0cy9* F(*"<@p6l3Ƅ98 #)l+ < .e_Rk/05-NK') ?A(0f łX Ct@,2.*o(= ` )H,#9ʰ&0@,УMt(fTWke#-r]߁.*H?~٣\IGQq=wwK-T% QZmKuM"r:WHe T)ZJ-R3!1 !.i"8䏟, (0qH H 62l`97 Â0q(l/`) =h BtOHb8`@4FX0jH`&cNQҢ.XX̢.z` H2hL6pčx̣> F;L"F:L!JZ̤&7IN񓠼CIRcL*oUh%,gIK L,sKR/I$Ȍ1 .<3IMMج5{ml7IN3$9լl;IO̳=σ쳟?JPw MAPq,% #JQ<E3QL e,~F ORd 0A 2,GQRޔ=%YN[JHQ ~zztTSQFU PJT_%:PSdXU83d)0 ;Hlh:@Y* B~Q$OH.Q$vuE[y gu+F׽ԯl ;(&,j 2L+]`׼լ` ] qܼZp$;=Ez]AHe 1c 0 b# Bܪ̷C.^\E/j.^AW @|` ̲R Xy/ě>w߄Ć".LW,0)T $|0 t@Y"8@GC$ @Yr ${61xټE>rOae9g j4#y sLf0YcV1'<W?`t;θ@ DRALfuR&MGH LLւAo=\sy!5mdjQZ֔D1$Y>q 2qTh%E]nyR ĉܶ67JelsbqSVE988!NJj7wI$~ߣP(| ?3 :2+C/7Wj5}{垞7eeNtZ;F Znɢ5L!uZ8w;EQws}\yUM^U|3' e?Mb, AEPA ! U]&~Ȩx!tl>s?zFJ @++Ǟuw%^Ġn"7 }H&?xmcN i|e@)A+P./q,1`~~ cW #Iu^aGw|@A qhx}]~G~x%71x;p7e1`~4 @#e;HowY.n#@@6H >[=PUb&PH17s+Hl,ED>A#dh0\SW z wG tWG05u. / o,@3T~ ?(|W{p B\u aKh0& HVV E JGbLqx7 \ p]`($}s8pZZ0az& EGF@ɳZY 2 27xeeX'L(PP`x7DZ`V>! (!)a ^B b >"^{LTv'!/pW6gU!@ M~Uwv`"rAr'Ŕ0mdcI.Lg%s/8mI7o"3 *nr~ 5̇RȃQC ;&<9`~Z 9 A c壡[Cڡrh,MJv6ʠ8J@ p;bݑb+g22)h@#E@-@ x*@(O<ʇ_ r[]ꥫ̈ qQ$ d)@@BPcv[aXShɅ[q\ŧ%0p$xw w@Z*t{%a &96,Z >,BmW*7 2BI0h:@Z67(5g:@Y G+{.EVKh#lՖ&@)J@6rS0\nEAh XSɘw9r [@W ,:!0Y[P0; 0"1yB BFh Dg zs',`'Y @Z&- Ҏ,7 3ih^X j 8P'/-+`puTVS0ڢׅ6"Ez1sSpL,pA`qj:D1G PgkXmCkJsj@{գ '`+̻pX;Ceכ'ڛڽC0+{曾۾;@ŽzβЪ!O,*˲, NKzqA![Ll K'\!#S%,N+lQ1lP3-]/<*;,P5ܿ8eBCòtK`,$|)Y[],A)Ba !<čġ* ,"l.,Oj{}P%2L*aKzl8ǧQGK9=KA((Z QpB P<ȁ|˦>[P0ˍB$%< {10<M tʣ:KɊC>| 6H9Lм 1نAʣP˲L˶ˢη\ιmM $Np `Kh0}k" 2 M9<%(RRBУP;g, l-"[rpͦpV# "ML#C`]с,C * m NH - PYca]|$ yr@`0 &v]ը@%͠ +@/.֢p. mU] i`ae- c$ d]f] ڣ}"gl{8 ~Ϻ|0>7A91Ekrwפ` H҉" -M , 6A`4Jp]J cm ۼQ߾-d !Qӫ|Ǥ*fB=\!pOn!@.-fhb]M |ߵ4 )פ p5-] > ~ J>pLK#OM%P._^~ 0"@]A VrsIUB`^> E`4-l1 O}Nm 0pj<jX>N8YV > >G n  r]$&vqnm\筲M{. KЊR"> ޵HKp5ZQ=K N@C l+.N>n"纫 WJ`N HફCч= J>W8]m *PR,T^eCr ; @*0wč>@BYAC_FӧA,CAV'uY;p98=̤-씃! -p kI@&?P :s 3' 1xw8: 07M^ȽX}a`OLoZS\Á(8ו%4Csn_z}8&ǾS. #@"pNs0> "vŊ.K#$o2o,_@Pa`x`)9IY0!Hh):JZZa@:;zJ{j{++<\K ڈL,lyp|m<а͝N͓-լ[#ٙ1Ӿ[ܼ TE55Pbt~Zu*wuБ=YwOyˏ}k[w>_]aZ8}zWs {Fx҄ޅe_i v'R!]"C5WH#I+h G"I I=ByJ*eZ[vcyD"  1C-B ڗ RL8zԙ} [HIʖp4 ,H H J8Ј(%$z(' KJP# p nvlzrj.nRQN9 X:&&:BY"#0 !/>LJ@ǮC("TH`;'L"RF@4@ lO;b5Q;5EV^% = C/R b+@I| "PnhHL@?! ,k9$p@ڏ\D#l$-6pbl@;݈@!qC/HL!X"=\Qk72:+rop$p !X ̎`sE0 p &ÐIV 4'By2DF  *vP JAC3N X'$18`XE0 40b,$U&X̑2Jcm[5"9(`!xQ5.-::}TJaN9M`mLvpXkП!#H̴i[!֦8=,MXVYla0S"Q"JQ jH(SۧvjD0@ ֺˍk*%` bnty&8#<9C6h+^"/{KռW.t'Gh"%3_2 $TZujT) {ձxDq:9jW8,( N Āo(8 N 1Zx^) MFae'3Y]͖_uvÄ&f$!4~B gW;n|0:lALk1o1$@$4X9.A)8QlcZ pi4"L0š̃XVo"g>rd0kdOk L# #*Ř j7k3Ħ`gü8 |4<(z;o[CswBǸ~w z߾p \s|?Cmv=ᆏ4yp'7սWO|ƃ}=+;IN0z>w$_q#~-|c$.U hni3D He]wqU 5(`? B :%`-`b$v E?P-עNh_ 82 8.*b0e!|'Bc7bc1c2_g =& |A2#S-0T8<0 F/3<3QSx塃Dcb;4K/\s5[4ZÃLtxvQ6 ųlʘ ߳v/Q>DAB' ͅ^ =p v0 |`ӤF*JJ u2PTK5K&%Rl #--z1ABnyO6x=FKW ND0O])Dp1ܗ~mP6,PM~PrBQQ`EQ%Lov{{ 2Xe\U`>;I 5SM I xSUUWegiUN yBUXHo}}SSwW{eQh%XyYY5Y@q׈S0_\ )ÐU:Ax8cu$vPi3\ (m~#C:Z0]u]¢#Bf ^EW^L _ z_v@$6kH0F+W2P16PGՙa9auzas :5f>`t<I@&>Dp=S&q=cAf,j WpdIdTe\eUe(3x,WfFL5p}~u!g`?i&-$@h?㬃Vhy.G 9y#`J"GpW&Alfihz*j@kja{b}GV!}gWpöŗ}zy~ l W xyet!q|ͧm{7{1G% '[.z#+[tlkkT׷m|+ds?t;X+| {\W+zo{{$ t[ ;{K!U:k6{x{h+!}}噠)+SxbTs#N=@bliԚOXViMUQښ0ӒlC6M[m8=׽G>_ ̊gzHNHN} Ѡ}Vd؉/=7 WWР, xڌ*jР֨-;А_*J4o]5z7̺hGygp5܎բǽZ1~ΣY9ZУ1] NzKލĦaCY=[婇t)@fzmc`( ݋a<ʰȠȨ zv dB\6j 㜺ծʪO5df׬A~-Z ꭾD) :0$؋|gܚgUL83ZkFʭ*[Zz Юkiz~:kjfJN@۽హGy / blWǺNJ1++?-y T.즇 쁺n13BX "YA.Nn^nOw /b‘o!O#O'듞+ݻk 2_4<p^;?[[">E@_I Q!ξ6}*/ϻ[bWNSqh/y,_9ȫ7y/bv?r!RoE~&%}N*цGbC%nk},ĆA D;5~`P+ +cԃL]@E We.-1< _ʗ28孡ZoG,w6\k&g|Z J A)CEVJH$0'>A9:-CN VK:¼Ǯ̠++ /,F\d `C$ \ bqۈ(!~:0:vdb &\q,- Rd>} +4/TyRwHk^Kʱٳ]agn5~hJyCbZ@!RC ^|S80 H}d)Q`H p)1@ $>@Y3$0 삩( -7vzsכ.x{i={Gs(&w+F'K%>S RE*aVx_\S!2_ X`B|Ђ"p&`(% a8@B5{G6]!_L_PYR`e^vdaߕ[FC O~>Gs*@,п9yA1D!4GMן 1 !0duؠ1&.hXpH@'# 7>"U{@@,6`DC00H4"Dz]L|f+V^ #(&FY#22l4ȿ9-vl3Xnh<f~@JPM(<І:dD'JъRͨF7QZ -(CCJҒs&M)@Җԥ0mhDrJԦ'q:Kw2:9+Ֆ3"2Mѩ(}LSܼiP/)՝&5K*V TUvuqgWe֫՛L+"ŪWVt\W՘kͫZViUDl\KX6d_5YBRuTF+U>+fZ֍rrMSjxɑ&WE٪SUgi7kۋV-cki:߲3m4._Mt m <0 !2Ng#Vn՛*ՋLD @K'3n (D}fhF?m?b8^QbSrA+60)D*}=B̸C5c ҃`!wq IT".kń`&N;(j`C`Xƣ()Pn898 H1AC"&() W:0 !9$UYȄ&c`I"F[!8 RVJ[_/L̆ Pˉ=5'4J$Q;+jJ):FKzC,y)P~b7aIx4! &SРV[XMk^sc$5P.DrXP 3c9"( &K;'zC'L9 nb `BJ\1h ǡ}# @wf#;]%ye# HBһ@0(e)v'V>˻?yJn9oz;<* :- >!glԣf1|[©ǂ$`SY(C6;'`P_ z3M 7ɦ2W VAt-QMҵG5\W)VW ^ /×+ {X&<ӍbP0Q8#/2 r x2̧r%Q mVSsut3#8`} o 6d35ߗP#5jO:MXBhp,u!@yH@=>Ai666`@${P@4W%~838xC|NX?~q?X`G0uf3#`essK<(@V):B#;~f;(3n'lp(*KD`@>;`-B=c<m[c9P: ' >3:#?S8DehwEJT p&b<1]Ot*DBvVSjA!h-! h0s'7p pPE~x4dC!&qeuBT pp*SDEݘEJ(Q 9srwX\~e[i\(y\TZ5[G%Z[uUl.[=iUB9QDIY3IWT:iN|P0u=$D'iRjQlLsIGufI?U_6=}9g%+ymSY9 RyٙX9yQiRٚO!5Oy1yZIKXQ'igɘƜSśUyIÉ,iYcE)i9 噖ɕi޹9XY]!(9eɞejT9yYu9YJ *YڝZ9sٞ)L Y:N,0\3[&A.Yz6%@ڢ@S)Is & 2 2d&@14Z*#e( ?%c0vtx `v-O e$C rGw v\sPw|w1T/:s A,А Q/p)P. ۾"- ݳD/(˾K2|z!p*a'xyzz{BXu'|b|+L{h-(2b=دQ#"2L6|2 m 9\ðA@B6^?ib-(v !fth'_yLHlzceިhΒJp44aHm$5 `JP`Nc+LG;fngrKLYoچQ`f׊ ժf4\Se#peYgzh .h>Ԯ:| ]3*\(fx6}* 0 qp HP"a R>mk ֬<ɖJ`C0('"k#3/WNtV3DRP W`>TFƖ'pH{q޾y>r΅qPq@׭'pr&L =*vkЏR >QJu l" {-?Bh7g?g Vm2M#zχS0 |/Dq_7 }{@${'yzз}] (/[.\pFCҒ0<}&/JuJƆ@rP0Xl aA~0H 4pPx8HhH0 *:JZji*; X@`0r0 0@" 2-bͩ=pB[^˙;,z ڜ䙰48@CW0( Htbued&s$KܨQ,V|I,D -C؉# 7h OR } ;`p LӵA (an8PP„#lD ̚7s"S^KcӰ>)#qHG/E-D9h#sA4mٹN~.ٮȽp[}Ze+] *X$E푙pA^#DUzֱ{%Yx$ݼ}oZHp 8k`_' ǜAۅ^Mlv&ى*\,z%Il.ֈ#^0c/)dD@EgE6 P:yґT^Y ?ިeIVv䔵H m_h¥#rbBfUixIR|2gszSg;i2&'"4DI&f)0Q#zz* )8(Z+q֪c맫l+i*k쫳B`NKm^K"nmZʷKn型snlKoko˯R Lplp"p 7 +jyjl,ú1!K:%1Ÿ1 (/?[b0_+$߼,\>,sϽ&;t@r'XJ-Ҧ }4%(Tz4Le`kj5S&Íh1vv}wM7x7 &F>A3ޥ↶-"߆̛'Nyjsc\傆~Ζ\y PE&& 2 {詮zO8L HЅ[h@TS>J\ @A xj^ e "yc'O@@Bv `|"@-Al!=QfOsTnӒ0@9 At7?2 "' P -.T7!"j,MA"RL E"$y275,F&`+C0720H8G.d#yHFR^E8'=`+DTpt,¡Z0`+ AAXF" Hi".(HHYH$NPP >f iLM[ F,)A$5o"x -)"`u('P8e6W=Th&*:b4%6QҁzW @DL,A \0 QT0[~b00 @ u |08 9 .FE&z&(8mt4@ 3eeI)xJA4\aZi A@ (t+ bU2Vlkzt^ $>d VL[=@; P NK B Q-tkj F!S` xgk*t@XF+s|m !p X (w"DD@07h'6=^5?Z;~05,@u0YfO6yjD3dc tkÅp&8s;@/.ٕ+Za-Ex0cWr,]osFIJ$gKLRs+mTݾ9@'"W؈I$'rIq:͕'m})߼}x̧] KܞOQ30$!MhC(Enc ͠S;e[c="#MtȖ@E5!Tue5$` Ҡi"|ӟsid _c8)َ8r%ăxyLbdR -;w"XbtX[B+is8ChR[[*^ :L‡N,<:0W ;bJ-,zb= ǧ&KؒF_ |1m637asE9B`W9idnIs NҺ< A"Ѱ SbW犫[Ն)|gnM逺 @JЂ%g?І:D' ~ͨ4ю Hiґe+)JWRF0m^*Ӛ4Nw*@ՄOJԢbFMRԥ:T RXծ^ X4ֲugMZ ֶuoY*׺ꔮvkL׾~ lH+fM0*!+F,1Ξ -@+ҚMmP`+ކ|f JeO2 M-ukEndcrHmr{ѣ] `n>]Wm4@He""HdqM, _bR#,I hW*2^TGX]!0VDq`'|R0|4¯8T~J(-h$pqdlv"wݧ^KB"s>p '2Ԣ&!{Z)0rEd^x52<#f9]0څ,K͢ A.͗$} 0A3*&X#0`"gtLВ!- YҁEah "IhHCWyiEb#)iYW84`~e:h~Kآ+l&&P(Pbt֮ dwوiaiڈvկ4AP붼E"z_)81XF>Wƿ?v3F1Ց+y#Y"%GI I8S)UyޠwS2'xyGc 9l6]wgJmw{9h>wȕjF- w{0/g'eESs!]!D9@yEu4 {ǗÙ Gnjr; & W^mHݹr`~ق'P a]8`>} 3 8[ rMx!/K S8U'׃}op |spC OUjs^W nEp Q"I U+ g 's{X_`% ]R/Xg8m$x"hccW4fX="zqIeGE^` giVK5T@"jcŦZ#&99 X@@`<* *U %) 肋p7Xq; aUD vv)Yw `hp7^Ŧ-* ?G7#9/7YFT'UVD`f5{: pgA%'nZ\ zGu*a* TjGR ѪIA"ZVER?{Qb R$[$[({)r,H20;4{:KHmF@?DC[HI[GNMR;Ǹ cД5˵3.Upb Xi{k mKHg(XH2+"qw oy+T}/s۳fklqG2Pu S K۵Zdk 뷩K$k ; K [۸k[V+˹+Aދ,[+ S+ Uſ_kp58( L ۻ[lϫ\,KkpeP zN@s+b󲉜pVK+LMJ@cŠ.V+@\g5"6'ed+XA !ᠯCFt# dWSA}LH U̾wjlQǁ GpD%ɒ/$lĜ Ŏ㍠ pS aL{+zpNGiW[eZA @0bkc,̤LLj$칵<"a]xƜ%1|_JĜIG>D^N۹ױ^\Y,ٽ m'8ƍvݕ-nn52f@A@-_9B^pFcBۋ_ڍ^ُ+頭w˄}^ږ^ ~ ~X#lHpԽ"Q aiA]~7m~%m'voN;3.TGDALID7RV>to:ݳw DI;$O]$" (܍26C#.2]VͼdB 0Ş+^PJʾ a`&y~a8:o@F,B%96Q&1VodN۴,ۆ.~}Pz/Z#u n`CvnB&&pۯ!n~P8.Q Bվz,PJ~ >ɝ/XZ[F / KLIGlɫ?Ĺ߃z *O_  ,G ˺H/2?+O+ TOo X'+ۺI0]w+8/(D;"2,S :.A5j?7B9Fٳ5XFq=Lo ވ!!"cߛ`e^$&h(Q)j*k+k,m*l-nn/!01no1rrmN3t4uU6w7Xy9::0~.gKhx`{\x_ 8@4ZD#AN)D1cɎ'$NHNk91\f˜3%fSgJG- LD&ZSNUF,ʵH4n*&~-XRzm]Iy܈t% e5 7fXS]:6Y9]pY^~,6*;;%mTtpf̞czm=GpwCmǸ~U>w lݺ縟`:d.U@@pVσ'?2`~0`Yfoqg+F((•``!>F{(@B'"n) t" &^8Jt!4@eWvh Xre t`MKR P&e*b0( I'(\(@) Ÿ\H*hwWa~,0)ɱ*)4' k ܣ6d(~P7RPKmcxHe.Nc#"[Bo'de4H4 6'j٪7Z( _(c{$e,jq jp7a@s*&͵Gzg==^yJЫ:{}߳?.x^}*\P6-@)VޥwO@a;T56Ҙ"# ?fҏ TLM{$X } L9Pۋ|BOt!`~ FC@%&_6$ˀkM1 3ɠf$ M1sDԠ8GYp[@M23u51OcIHCikD?-, O:kWB@QZ6`YM*%lo&p'..O:T•Yix%4((dT* 介0U*:[7x1ӛ$V8GS裣_r 7j#CRDO^YGRQ%e FUWE!p' 'G@wTiK$]γdiHqZRTI)]xzB/,8]uRF: 3=cmZIZ%ʉURHSW OuU0-kRJeDCxG>NL,n1>L +O4+>c7 !FΈ%3ɉI,)S P2,Ww^2.f>3Ɍ5=V,9ct3l'$~3e@ЄE3юN -ISҒ3mlMiӖ^ <-QϠnASUԘN7A+|HՃtkL:5Up6;Խ~ug,[Ů6#}gY+-mH ٴ&vS3[wr[Pn;<¾O;\[GTP6b }o&b@X’P |z]HðqjOq*nc2Ʌb5#<5yOШ 8wAr/!!$ =yЅPl.p)bxPnKR"x GAO1.4=&VQLN[= dÔxS{lrˀpy= .qm (ӧ>G K:D۝FPM}cT>POP|#MQ4 ];b_? ~F?ځ̾RP p@g>m}1^ɀ@@_TA19 ,=Oޡ@0F ҇ H |]] ^@1͕)@=]` XҠ & y`Xp! z '4 e°^VJUT#VX`HQǥ AC@b%^ b(b"(" -"|]1~ Zԕ*(!-qbO /")'"@IbHbL%H J-!'a#ьc=+c&6^$%_?1֠xbH ̈٣Dڜ9!31D/R5] E@`5&b] Gmnڞ7^LFimaqTneO^'fa¦e6f\P^h#ÿ 6Uai& x%w JR%BZ g* CN_i Th6 Sj4zd}Tn ^1jM&4 {g*FN^*fjҞv~*j**:>*R*"*ڪ** ++&V.>5+N+V+fkؙv~+_++++6++O֫櫾N۾ܿ*R88>,FN,V^,fn,v~,ȆȎ,ɖɞ,ʦʮ,˶˾l,֬,,,l-&.-6>-N-V^-f-.*l~k؎ٶkٞڒkڮvk۾"lέݾZޭkjZf:^[.d QZՑՑ J[J@.n/e zNhnv ®>RI{D.. ΅(/0e` . Ba/9$1R 횭R-8X)J$҈t UH ou~o7 c%40p~@O,ǥ,RA&˩`6 J> @ TK+ T 񻠰 e*$9 4X|T~$:1Uc%'@3*^ޅ2H NpL.6I 5O1a/(8wqH>"12GZa.7(2.,TjK-SR Up d Ƙ "r,:rL 52&{炂KP6͋rw-rʤ!үp15%΀ ;K8#c[4‚/hHO-짟pz8썋>sɈh<@Q4אL +C 4JD3tMWq{D?۞ \(Gtt w"0A0Lǰ 4شLPLO.K#G ,Cg;'^QK4nSo5\0!r5XYeYx5[J[[ui\׵^^5__5`v+;PK((PK**A(OEBPS/img/chap6_stored_proc_test_002.gif!$GIF87au$&TLnT&lnTLJTln$&$JTڬ,u dihlp,tmx|p(Ȥrl:ШtJZجvzxL.Ezn|N~gzxE-o# ^ S #^Ui"W%RZRO_FPnL# ]NKVޤ"l&ҶYVSH" k&pKI60@V Ȩ@@\10rI#BuA hL2sDG eh4% 0LX"ɍ?.& Ɨ jT4Q Xf,FaIyMdT.+ ܸ^I>-Gas٭J,ǢfF4hΈ+j~"Z +,H_f^U Ko 3J\76-p"ks7rPj#{,jY` OVN˄ok]V?yƒP#`hZ27MLE,w谤-,1HQ/")3 th_T3U H.7GjrTzK5M sdkC N`6k+14bPA,|q0ǘ2鐠@jccdG)QTr8 *Wﳨ豭OF$2gb9Xi@t"Y)# y"ODO! f^8) R HQ-A ^r5Dt#gf恙f0aj-gZؼù M0q 8h\v/p@Dw4'䩅 h3Y hMMBQGЅ:CC#JъZ xpF7юz HGJҒ(MJWҖ0LgJӚ8ͩNi"@ PJԢHMRZԞPTJժZXjMծz` XJV:hMZo͵pP\JWNxk;׾ՙ|`ж-lbX7+ZV"f7k rgCKaMjɀպllgmsbc o[+▖M.gV΍.c+n_ҕ [+^M/Dѫ&=+o6 B++~(qp^Av@F*.Q. "`wX b=k{b&l8vq1m40l @ja1 G~k;]Cs+VoxD232 H^.2\'#RfPqVdr-Ky],Q~1迄;k@F(6Ѹ={bTUFùE47C1uJ R֛-z@`rh,b; `5/Y)HԵGD]'#C JB[S)͉k)plbxxoF uOOS7[)@(>9g%8 N`Q3d8ju\H"OCr>>lbr<\w3GMbs -Y f8fev;)_qvuf~wi5{ z l1}lN8b±ugla{8~ff&7ZQ,aVgqg08|&e+hesfGZb-h$'uRL&fSA{|(8F$E.gaajj_W,"i^p{}`Aw^1ІG{0T@yukćO(bhWЈq6@D;dHfrW&&x㉒h W0nh(|@8ag T dawTVjhheq&PhhxXsY;iQ e^H3!jV5rnAky.H@a&Y$j R8(&vb`W&p8&o}b)8nUGK/'{.w{qfzBiSp< C7qo1ٍ^~EBꕊA't7t i+sbJjZdY y #y] tPH o Y{[sd px?7Cnddxi{ɘy8w) P\Yb82I9bb7|Yni(hg=6ta9xA!КFuWMmIZh|V9ezyuwUy\b~!yTٔ |W}餎٩+6xa^Y~q?xgĜCɝ瞵Iw~(E!Gqȁar5Ĺ@_)+}F9@sh!Ȑi^*_TfX~C:!g8pV&.i  /HgCH* Ie8L<yË(`GgYa(\@vN2 |7 [j:6dB(b%(H0"vZ{jG}Ux(Hh23*]P(]8|z%y y;f&X0ՈZ-jGxFp>I\Z P0yѩūj竘e&Vg}Wh["rѐn,[ꨥJ! 0z;kԙiwJ0oFbq튫]]V'y]C#ymb1/zbjߪhX%ɭKǞɰ6"A0"Zm$q Ju5HfBw[-+ =4&*]WТq%V&@O UV ۵ s[˵d{QdaEk;{8t{"xc|ˡ;HX~{36<2[l,p ;k2b {˺yK'𺻫k+ &{ ۸^4Pw・[N[ ۼ ˱X[iB6֋ۻa{¿i;̾L+ /| 6,Z(ޛ #<[ <$l -<&a335д8tY1qb|L̼ $8(* ܼM- 9!*( 3a "-ϡLϤ,2͂R1FMܽ Ppv9’J Z)fԋPaǏ D1Օ։l1? בgv4VȲbkػTq[,P'+بV9, jL]Դ8" \&X]dv8φM@:9N3ج6"=bRgitĝB$_\ڬׅܽ45M " mÝr6ޭz-#G}ԣԥ s-%~W=EVѪ  0B*#ha} sbƝF0DlFvNP*,nq>3{㎽b Ze` K=~ G^Vn \&-WA{r 1*;Jt d&|)^5T^HF䠽»uД"Sm2U蓾zQ^gc߅,ޟ~b_mehGǢynJAR@]@,&fVcHWd]gP<8;4^^u= ̭pPaLll"ۿ.^+}M.ISԹfr-Ajlf⧙+ȳ.~2ۂF`@TVR.#'?>Ȥn@'Lz:_TmGP?GlMmlr \ho2bڊsS( &+O(GrKpFO]|GF;;g|ƟB| ^ILSOKM lwIO,Qo3/ ZO Y'+ۢ3]7 ;< 1d!g)uFxZ/ؤ͎cRo8}̪b;6˕:^u+@Y^\!"ᢍd$b`$%NfRf'(hg)jh#l+--.kn [.rso`Os5l*4m6vx% z:{:Y;|<}}}>>? , "\aAs&Rh"ƌԪi#Ȑ"qi$ʔ*\%̘2i&Μ0'А<-jH2mWͧRR*֬Z}+ذbǒ-kVjײ5[-ܸrҭݼz;vk~{E_43nX'SL62]0vB3%x3SC%:g԰G6Z2n>Yn1uq{̜α5%_tuןvStӕ4p=G{8 $ `mÀy)5 { ZǠ^HQ| 8H~# D)ڵ(ƍ?I\t(܎G+Ò I4Ô+ Q@% Pb`8L*IĘ^YTHyŕbLԉß/bhsXA_̘" (Id~ DƀeqI6P 8ᩩ:8)* y)礄"p /Jn꜈': P"&V%4챮{q"Iʊ,_qz~kIJw"k*^K+-*k/ƺk* k+ vP-& LUˉs2- zvU+pul#M6ey~3g oVNg #m)تqB)/<ƫs''>b՘;v񢟽:|N)wngWϻLxNw>F G.(L6nyk٨e:0P[`24EᵯfdѼ׀Fv P>h2P4SW:"0 )e( BM J?k;$\eq0|bAD~b` ʓ*l`|؜d6@qs7^Kd}8Fd@.uwlGt9Osac–04S!hB"LW(IT5ȟ'81 ajXc,c̸6Nąo71,!F>2%3N~2,)SV2-s^r@0f>3Ӭ5n~3,fǹv3=~`AІ>47ϙǎ~tr IƔ-MXӜ= QkXԤ>MU+Xլ~u] YWִ|m]U׼K. V0ZbBh;( j?;6 jC{>QpHI4[`(AwP |"x>#<·{{@k ȖB4 8m%wI@0K8 \}<IPt=dNm;h$7X]:O~bRN` hq<l$m&7O ur'< ?w8w"9u]}btyU[ey6w滛=7Gy%H H$!ƣ:r^AhںI1:Vpx6}͟ڬw{푣7R}>Mý^ҷ!6> o +/ztЦiь- ^H[:`F͝J:Q"=_ M;D_,@ d` @޲ξ5` XbL@SE [%[tS~așޞnajaI^`$ [%QȽ|\1J@ը$$6Y %!E"&*b:T]X!!X٩O6ՈH ۴[^.E.bOĞ"0Lф1.L\3FcO4VM@6f6n#7v7~#88#99C;PKJp`!!PK**AOEBPS/img/chap2_install_001.gifrUGIF87am$&LnTlnTڬLJT$&T&JTܒܶnT&&TnTڬ,m dihlp,tmx|pxȤrl:ШtJZجvzxL.yn|N4~\zbJaF`Z_^^YېnQFKȰ0 JHJĊ3NH/ EEd9%a#\)l&@.p3 Ϙ(HYkMN'D2in$XMт ~-%;{,CŖ Zk &\x2ㄬR|  kqDV(\ɔT c$;Qጢ |FSo}$XH4]zSiӪS Xl>_|9տ hËG: Hp$_:[Hw$@ $y蹶^6"Zp]FXRjSgTLw E`uH ']YeA⋌=pA1En$܈|!ZQDYU_b)ƤIwVQiSRqT@}$ldR LV@fgDn9`IZ>&1N۵`.tڙWvf&\)cwf؜YUc9bӧ&)H.wR^^>Dd"aF\%g=#k:+-Y.a U6pi_McܣnF݀2GޝXV;Zqؓ֬M+8fyR%L *%*I8ͩ'.װĖ0(ѹUtZvB =r:>Bu|#b/hA鰇<(/Js  P#c= Y|•gZF^%yc2j `rz\F)hKu71m| dsG9RӬ7CC6% %&ɃUM"M-~KhcD;Ӊ >i(&Mk*a3n$y@e4PS"0R4Pձ Dz( fن =XetYɣ2 ɤ5Ǔ )sJű/w34k1jsEtŚe<πMB;bІNE;rh4'M2HҘ4N{GPԞNC&VVհgMZָεw^MbNe;ЎMj[ζyMrNvMzη~NO;.[ϸ7wS GN|?WO9gN49w9ЇN:җ;JԧN?Z ZL:b $vGw8[Z?jroWy9&C*}WX ʠ*#y ڜv7郍j/ JZPy1J꩗JiZyJj֪J gkj5ʪ8(}*$קChgYG~z}*׃$Z˸Xwz 9%A?8>YY:~ 9K骄geȰ*A갲ɦ8* {[ǭZʕ嗃  esYؐ:열8[ y}@/dWPzص$AUGJY{:˳^k~Qer+h>;@˵kxXh:FK)p= uḸ|K`8 *?ط{ڃh0q2K Y~(I8y8« ט~@x[x[ϫ{̸߻kѽ?z뇚+kcI[Г+;Л @qqkqvl3wW3ٜ+v ,\~)|@Vv430ĹI"}~dl.}dk( r[۸]㺉?صn̕lSkUK{ HR}Y{׷@V,}ž[+D˹7n~zkNe+V ;koq::J N)<plm8[9컼 Nȫ=ċǾ OWMoh0 w+K!鸽[I˾/ wE_:Ibpt&ܚKeOn.t^6nOx{~Z_Ggżrsoq/z?n.&~6̜\Ǯ,n̔*Xn߅/X180x<xa/xmZ߆Z {/nWɻ 2NI“3E5fStk6nik- Ebc-n8U3{,2 ht-oV@6۹JwG HSu׌muS$5"Yu^zǝ V5 4 @"ZW4 Af¹|6F)4w#9]G^k/M\7k 0` JtuJb,$Av +`$fHBX$FBeJErSf%N ͑ow|C1!fA Jşa!S)iTE7J6tI f*tg3!Opiߘ%hƩ +M]Bk}+fFfY9) %ꍚ2(8V. 胠,›hLeM ൖ1i̒K:%xaZ+ PdA+A q5<)8#C/;%^ (!QA," qN|"(RVL-r1GY"(F|qf<#P4]\('qv=1z# 9? !E&0|$$HR؛%3ɲar: Q8,%*SIF)_)Y*%.WY\򲗪/I` $1Hd*d3GhJq5Flja7éEpQ$9өDtCd;Cxʳ5=B|bk!OG" #vZ`S84MN'(O8z#e$*Q++Z=x?C#V(MAjќ^Ť) Ԛ 8M(QQݡm [̰ 0ա #n t%*: =B2sVC'hU*SrGeSʫ&VbLpT-fb'XmȰe(kb0@'+[ɤՍ,Jũ.OP]CE/p+Z?%TV{!*(cJ ]5.fg;$ Ƴmr*Ʒk:/ ,Ӑ] 18@OO9 `S*;pC,Hg抠*K !ljAֺ;@c "\~3ӕфEqІaܭ`>F+V'%q,#kˌO.A~_rP.LJ2-C)OZlgmH{jtK6 +A5ڤx}/hJg_yy&@7BWΧq\WΪS!!N!I!^!X!nhaJEU,0ǁaIS.ZE]Q\Q^6ơUD,2ݡ+!" :^AAaiXUkZT}4@tR'鸅]V]%zV~kyBt *ld⢩!=āPX{-us'w2V#~@*FQ4F[ t p = c1 _U_|#(*\Ttَޡ5eV 9@غ=E d[1D?VBFY#=9a(C9d$%0Ab?MUFuI[UM8QڽEYn)㔍e!U,i1ԝS.C֤UJN` NZVbVެEG^`^uAgc 1'&v6fi-5٣wp>eb&0Z _T`GM֦ ΀A{:~VځIC j`X,|]E&& '+8%vFcꈉh6(pʋh5ɨ)U8)NSH)^)-X)n+h)~/))x)阦~)閾)^֩>)ʩB+* !Þh iEM5AE*PB\*L_*YtZjBȂB" xjD BBMFHG MV5jQMj$H%xgMAQA_JldG"k4BXHvk0B&k̈́C]Qf`Zn  ABȪȄ_Qflfþt'l+NC(3CHLD4DВR4 XK+OϪI4K\ςz mmEbBHpdj=z܍ ߬p(HoGC cF쉕,@,q; 04q -3\QƉLFXhXebz0~, jxOnFp ؍8 / O+Љ|KC2˔ϻG"7#oqwr-&KLWmt˝D'q0 /YF fHKsLfLiL ͔ܱ ̕$UY bMK`43̸ Đ6L08 Ԑ2c2i4X:0h1N 8bMͳʰ̵%v%Ls7{42J|s//jr,o"Y*FD=`N_X8,<ևflشijG2:gxM1xJ?F.KîbOF SFgJtUC[,W?L SQQYӞʏ @ u5h2ڐ] ]ۑ5``6as!bǬccEdzdgb/+6vMg gkQ5bev,\t++ȶrkn6_+T To; mTVXPZoj۱2nO4!>7O9E^u(l⹅dUԳq?jw8 t»k+ 4+b+te~g,g2 B,)X'~ll,wl4Z)|zwÇ]IEI@OGcǺ -7\DQ -\8\ g8DHϞmJ `xҁQOPGCn.gۃLyV;Q.y.P8 Z`CynmW.iІQ#.D:BΉ*:q}|.4:ݘ``+B[u#)Vo A:t52Z@XoɆ/9p"'z_n{MEO|I z0\ '/G;f߯v;.h\%p`HH ;dqWM7~xc=0S1@?<5dX|00k L׆ #? [7\pq0x{x{Hoc 87Ic0 ;GJ<<1YUZo (Wm·@+p|a 7}sϣՆV*Ir!kXص{C2SOMsl芪{Ig2S KPyD7VkP=u>~׻=۫}~?>B,?:o2l ?D'N,?31 6Bw JtswCI3K4FsA4s@@O 8DC B9h>@ l@r(lR@(C"fcڀ:@NȹT,U*``%EEEBи(TP4Gpu@rIP5ùu9YJЩ T8tUY JCP@:jbj;by(kKWdjd<;x# <6 >#HS$ _>>Đ@`:u#K$NLmr}Z*VT}Vm,ƍplqA<2ʕ,[Fi2Νo)2M]~=4Ҕ ɧjF&.uNǬ K3d˚=Q ڵlfꖥǸtڽ7^> 8-8Ō>8ɔ+[nXV֫NE'5U+ze켵۾K|q,$WN\:͟.9O]!շcs؏[)˽֬k~׾ӤϻN 8 C2n "RD.Ҡ/T<(@'qSaI$hVEd6Z4 HBJ` 0#-NǠ2BxB"G:Œ4颎H`1Ď `9 D]p@E,@%#੧1|:r.s@{ԹCa' KE;V\?F震# '"@a&>zCb!.ΙF^1p r##hyNũi(K'qQD X2FNqETʶ7 ܎h&uǪ:*z/=No4/ӀAc{wSvp;9t<,}3UD?d952#ǻoraKmA~>` h<4}D7,TavkkrpIa`*wuVO A`ز9+(EQ8Q3 A< 8NfC96ETQM` 5B!@A@0JQ iA!JL@8B"Dx20\D 4$U!7k$!{[A*IdTЀ+abdLIJI\Bc1@rz/DM?ɢOi4+K+d2l08 ~`(, ،!$geY45jA]"PaYUL3Z22ʃj%mKAC:,rxnt,miR:#t4M ӛtX0*Dmb#% &1 nP*Arzb!V,]R\FyN9.CE_U! >FhQuc&};җ @ZIPQN G^Jsni[A|VHmc}ZXhhe @֊4QūA8eD;#TjXw*v05Zvwvǚ536 ?#rz.@y9І@ˠ(hEXͰh9 lզƧ" / lp0L4,*bz[_=̠qqSƣZt]E #Z "\ c m Ґ8Je69J u TH|إnM)ٳpђbYIbl` 2GCfVO,ͼ%YAB:bLaLz 7 j`ƽeި/Ǫ;m3#w:mjp#0qG9}=;$Z/fZLl= ɫTЧK,8 #^J޳O F o-vM-QqX|yZG#Ht2P^=.vAIvPMgfCۯ#CWt2퇯 (GQ|F>d ,W7vl#ى4>q>V\'$L 䡪:^RHN;ꥎW{ ˑqmㄅm,&AVS׵Nj[l0hZMƮNՊH.m[mBl.W~\x [אx #.-d0>J;]%ǍT4~`"!_ဒ;-Z,a{)q[uY[ -56+y>dݘrct4kc2/;uF]%?(QfuNxfM&ԕgX6J}[j:5y)r\ kH5Pg06Bֆx m/.m;¾S7f-ʫ\lYRmS5w@kd=mt)gz_CGcZE:|+,L gh>=OmZwaίw5?BI߬5];Z-_FB]`Iwi 88XlH(2y#Yӵηh  å\@p +"1 OA\6j"`mQ5屡Yed)(8(55Z`) aD L! (ܾ*$2d)<&$6 Du=30+ $5 0;HS?1檌\go&!psgw#k!C Ȓ)@WPiAeR@t dʒ:$} y+}$QQ{L$AWc8+*eʖ'M)"N ]p 2 ͖wS1P@kφkC,9PK$bXa:ou|z/`z$!Gz-z4ҦO{1#v VX,#pnK nEn ܋`(;8A{/~<% Gp۶F^£OoXg ~G 9_lAXxRXF ش?"Us~-B.dYa!^)W-jPt5}c:3/F DahMBS1 DQ eHV[GQ(Y<&VYjO#o03BI􈆗ɟqC[ 0w?~(LT$biZcDE@F몷f)ګ-%ZXl:L:l7Rxن ߂{ bfxހ.ކ[N*"-R"xRYTJdFE 0!dNn"e9QAW> GY G\LK<7ͲhQ.1)l` k#Ճ4q@yoD^g @{R_*ac=ɗ(`Rl. +d!fBD< ;b Ld4./TxD:|P ( FI&T@$GD' WJ 6{f`Il|\ [hH bJ CwD+&d M`DY7.S4Rx,JrP|(n%0AxQBi%IO9I$t@Xڐxf74fdPm':"|>l&JB}Sá ̹hEHERXc4\|V# ]h,<jЋb  VA،i)I{ђZ(])KEpҖ42MKgjӛ_*)O{S J6)`ڬ **RoMw2-Q%k0і>CbWW(PuYQDDQ4dSm \} eQxn>ATT4qI:EH,i[eCΰ@l~$eL6XMQZ9( ?HV4)@ֲxvq# !2vcJ eElG1ZnbcB)&Drg>"ۙ`[]D&Td_=r"ŭyc&-/, rP.@9ds}=}cߺ7 }_kg2/ }AËvIBw^ r15/f:0nE##]Wr Y$(2Aろ\nѓܔbqGd!S\l40Sk"5\ -s[ =F0w7 ޸_ӄK!ŝpF6T6o؛<2ZMZGU@212q`ϰE-.kB?ྖ' Щ s<|*ҩGӓ'u r&![%׍vp%,Ȟ|iGQ<:\s WV—^ ӰK .`%IvBwG#sxQҖ aDRe:?WYbY]tgDgKgɧ!T &rƪ١wP L`^U P!hax!A\MI !6i<`UbH,""b"aC|#nPYY`b)fy֯h8PWD7tcMpvXEDT1Qk" El,P ΢ҢŮ-C,&F@&F-(ai-%t9aֻ.- L- Pٲ@'vڦBKĈ(-T ւ xz.)$JZA^"B "֭lD@2ZLd#pq,Pc@couL6#:Bd.d> u-jHcJ=4/B ^ >^GCg㒔YMVĤJ /͜ۑF/XPeonTd׀Io0dԒ%Pnۼ*SXsX Mo,ۜNj)^ Z-P,|Ui]]`l^HHh/ liO`pM >De6츰0qM0…FPz'2'g_wuqȐqs6U #Notṵ1bYbj "$u[[ 'w)#aצ'he,gL2K3I$˸ /Kei>^K(_Z]`UX3rjlj m)Q`)s\! j=s> djju-B~Nc~ Gj@W$^PA_j*p* :[iۅ`0U ],5n"wi@$?+T4 ;>~k<fB9rf+OSlJ.&EAT[}}\޹9QX5"K1f.C8 j,O4Xi\ D355`u`^vg a2cSFvec6^vfsvnvg6~6 @:(mi!ldOv L`Dnɱhphvmە wr+r3ws;sCwtKtSwu[ucwvkvsww{wwxxwyyw;PKwUrUPK**A'OEBPS/img/chap5_combine_deptemp_002.gifo.GIF87aL,.4\^tdf|TRd ,.<\ZlljTVl$",̴̤DFT LJ\LN\$ LRd$"$TVdDBT$&,lr46Ddbt|zdb|DBL윚伾䔖TZl|~Ԅ$42<<>Ltv<:D<:Ltr$&4,*44Jd|~|䴲tvt̼TRTdbdĔ<>H?֬:51{ @z?'i mVPsqĵ4(6 c<`;tqKA7\PI-IRo%`y%I7 BIP0`(b3D@ 4@I L 4͐"GR&`F8l >.AA~`GҎ=03 pcE1%)qDw $9g%q!"Xccyfv5`K&P QP_[#)pj$q-@@8䀏j+Ek Lpi  O ÉjXAzk9$ X;,CDoJ(@!J[SE7uՅCD<i"@%+"`R0@RM%}Nd `lK L ) Q‰z 2L/A@|AP 0Ҩ3Ut %0BP-u "P@B!R+ 4BI1 T@IA~@. $ 9-K* DaR}!8(Voh-k $M<+|7$}yKd h@i@1A|;‹m~g.dJA` A}I_@vyI& P ,  Ъ$OD$@$` A|sab;$Kӛ npy PB@^ ?P KY1)dC̋ S8$I@# [ $3 8z@d hpId$~#5i3rQre 9D*2} NrB O4V0o@+(bI'J|$-3$AzKN Y6mi@Mx6.&qy4I"0i^ӓ$M2jJN$@I~, 6'`BYa J02@V -lk4h4$HkIBrVoev[ lA,@%򔦦E 腉f&8Q B Q_T%@<D0`q#pT#!X"%H+9۽8YBmLyK1LM,!`ptdl_闿eiOKd!p rH_,]u6Ū32Iy-٫ρr B膧Ȑ&* 4WoH= [bbQAJj N3K0a  LKbb伺 ^L\]Ty[v4#nM:!F>+t %"4rIH+@ -|=`&0r jwUa`$hȴDM`ORl\ Mt'^P@C J~FV{jnHyPH,Џ"t<Iԭt4'@{R03hO{m>dˍS E2;R `t#v 'O[ϼ7{GOқOWֻOI`OϽwKO$qO[>{_v诔fp?XXx Ux x XwY"8AC&Hx*x).~-2x~186}5x:x9>(x=BvA8FuExJtINiMR^Q8VPUxZHu^tYb a8fvqS5jH1$2,0%tmqxEe˱Tphk4KEч\L@QcK@8q$;I@$]&>V#2`=.#O0/B=p݁#ɸAmCȋm($AoKΨ2ӌϘH+%/ T(($8H.vr hB"?hAnTv؈A1;sՐg2VpVKVɑIR!-vV '))u2Y1)/ 3F7%Y9JrI!g. "qWƓ# SI.:9vrF.@b1$-#p/cr$fLb65::)4vYtzɗ~)9yCy= ԉ' wyi0F4ePE∲" TinyJA><$*%EE"d1?\cA#)^q-> <I` 6hNqII.Yvryp` A3b=wY!(fi*?P*%qi1݁/D>$+ڢ/R0Fg&˹2!@p뻤kڢtSOfd{%h+3aQ1qHqBW(AtPRkҫxuAZ@5P^!7Q۽ k2`N$6p<QjȌAQRP/0 ,!\LJb1F$ScF럘CX:>a7c9ڐI9(9D,\.|`,+2T@}%\ܚ?9VCƄt< f̥ţJŘ{ٳXKD` 9&?FeUȍܢv*NXb*?>V$D!$f˰l1O(Hʁ%A$t"NAQ(l0 ||\Jzء* O$z?@pcp<9aШYugΦ.+&g7 ,2^tK A]s!͓$љu,fѣwk>2,pkK0I*:zB 1ϓ5?f> ,E71Rզ3ӹ+m(Wk-N}Z=xh%0Q3E.@ zÞPh.\.Fk,c^^~>~~)^N#?3~Q bqL0^P_w!O#O%/6q +{/a~73O<D4OBMQ1EvZ]H=ok&in_bdhs/jl??o>QG[5)Jiow?Ooُ_Oac?/odO?oo/!/^uXDoro_ً/(q78\SAA>#x:]f!XL̟OQA# @M$TC$XQ#&+ $]bR̕eiq=Szlƀ@ MHi'8'-wҢ͗H:}+O5ZD/ $.A\l zL$2 |"LD1!]+nb!&#F ʠ 0 @ŕ "Gp%% ʣh;B$52L\z@(=b1OT@]T CG<4E|R"L&.PC'& VHR]Wu^rH0P %8p"(+4jٕ 4xd0XC%x)( \#j 4݃@G:` ΄EST0O^ -UYMUXi 5c(nxVJ5ZuBN#LFqC P0⢘gY`n~@Q PVIhDZ|VXL!0rD0܄ya(`2>s)( ;tI!zlIX nUO(f./ q?*0Ҕ*) K <9A pG *3"h'0!  N&,xT x0!CHc4!xGGYJOp>[R L?"L0LcީC igf썌IYG;V"$zw Z9͉B2P;lOI @N<0xRp]"JM8 jx5eG 0T@ D)Zȍl)DyN4]=2Sv5e7CS^Qù&=M8N5[$‚@DS*K07 04! &@Qp"(lȓA0ņPI !@ȧ6UM{qBn"@AD9Z>и\ T*V!V^6!lP(p-FvG85rk[֨!Bji[[ȱYv qb\Mr!$$5u]ֲl]ے/ r׻nv^VM n[·-o__/vvmQ|`,QXdVE{ )b$ vpW&uc^'+}ob81.i F~1g2YH~j7e*OUre.W]sż/gFs^Ҽ4o\9wsKc=tgAЇF hF7я0!=iJWҭ5iNCzѝuEOԧFKjVe=kZ0uuk^zu=l\Fvlf͆v=mj{*՗v `k{=nr})wսnmڷ=ozw-t{xp[Gxp6x%>qWv7WL-\'Gyq\/yMSo\ opg;zWl8gm~t}LwesW]R խuc=K&aRuI>`7O@oЂ>+!'{}r4`!߂G;ܳ.wy tG9.yh> n7 ;noauߵ4 VXy[~ ~C{knSWG`/?!͟08Aї8{ p_z1o1ak{+S2|>?+8}<<+k?[@y#˻l @d@ 8 >303(9. < ByCݣ)%:3X<&tBד'l:S;|>80B750(+X&3+ 1\)<)X y[,,t{2@(37 ?мA =B6ķ,B%D*;70C2*)D;$,GI@@۫7YCLEl]̾:$CYA3DC574A0)4H1P/FT<=/0;7:/(7AA<}G<~jB/D?ȂA./H$웃:콇,-7,H85-`-[/Ȃ;pGr4GwGyITH17(BDJ HHprT;B|}DȂɞ܃nL>:pIHIIˁLH(Ȭl@HV4=<⣃%8 E[[@P /-xLMT ;胤L@{C,B\>4M% |>@Iz N>7F) MDŜʼtMS@(4MJlFdGL$LMCζC7D|N{{|Bǜ?ܿ?(@8Sy @nt yR=U MISe?eP/EURTUzc=䣷^eU@N*@TL%TO7cmUMԖ.iuS6X]UVŔSyjRf]G?EMd PjI[!t>PCr8c>k4~E9}Ks` F9 75aCaI\̄ ƾf8+ V }"aO;&f"b}(WWx,-./n1&2g34V5f6vc3F79:c-b`==;6?A&1BFDV06ZsGdZHJ⊵KMIONP&R5O6TVSUvW.4TYXnZ\V[^e_a6`&cF2dffevhfik/^mA+ (pq&r6sFtVufvvwxyz{|}~ngf&6FVfv臆hs芈芶莾艆&6F锆gvi旖n晶问miid6ja.V\NvjXn꧖TꩶjPKj˥`Xjȍ8']p 넠+@봮.kl{jfZil믖i `'hpȭKiSj )p`GvmG:hp ((nmnn(2%VHnPn۶^Ɍh¯H(Rxfo%8`% rYh o >o{QpO ~Pڱ_IP$i`@ "\2[8iq pN%&q($h+ߢzqr-w 0"#nVځ ^ p PW !ш0 xHEWHn#xNrp-tFh_r~(uS!I5fH^0pJz )KB0]9vgt#-vM߁kl׋m* Ya]1wt׎vWvYfj ؀XLj H1%'~ I\/!%xN׋oЈVY7wkkX*؁@iXpWx1€[H  -n?o\B &z8qw{!~o ܎0"!%8 ( |((@u̧rW-os2}'}f'}X`tA'HY x@^ `F//r~o -'o?  @C7 hp8t |Ƅ$А$ʔ*Wl%̘2gҬi&Μ:w'РB.`04ɣJ2m)ԨRRAGMZ+ذbǒ-{&5-ܸr+`\/}l0ĊO-1Ȓ'?vL2̚77n3ТGL4Ԫl5زgӮm6ܺw7‡/n8ʗ;PK̴rt.o.PK**A'OEBPS/img/chap5_combine_deptemp_001.gif.1GIF87aZ,.4\^tdf|TRd ,.<\ZlljTVl$",̴̤DFT LJ\LN\$ LRd$"$TVdDBT$&,lr46Ddbt|zdb|DBL윚伾䔖TZl|~Ԅ$42<<>Ltv<:D<:Ltr$&4,*44Jd|~|䌎Դtvt̼TRTdbd̔LJL  \^\<>XGY\fu6$}g:M_(w;iMd.{r 3 x\V^}70qrWYUha)0P&@LA ",A0M ;YGLC 4 HpxB)H(ꈔ/D8X YI AL 4$"@hddH*ɤPJI%!^)xF B'R $;޺;x.Pb >^ߵ@mN@0P"8#@v׻]Np T2 ` 8I@$&$JYMHEQr|`9HM2ATp !8IÂw%@$p t%A&1bdx@( x1CLE":0$Pq) D 3 (@΍P"H #(+0ђ9ȁ82m<$$GL"$&!7K=QrdbZ@%@ 9&y4$$@@);Z3)y< BR%<B$|A-Gv.Ǜ:!7ʚl͆&"g("zq^`3uFz#FzĜ,23Sd5L1j㐱$c3.gё&ut-mC_]L6Ww8F RC,k<@0j 9 3ɘG:%\yi@r9g"K jNYKϔ0a ( X-F95_jׅ -Ej@@KAJlK7 2!t*)"c"@,rk/QJ4)@Ofyݯz7_ p+@1(cz0^Kp7o| @PWz 7퓠 HO:?*+P:NKX:bu{H:Oݽb߉dNN;Nw˽x{OO;񐏼'O[ϼ7yO=CGOқOW&qgOϽiO׻3зOjϾ}{~>O1O]į+7x ,Q8'xgۧ 8'$xug(n,_08W'4xJg8ᦃJ0-#` b &@fJPc;13xs;<8l(X![Ȍ:Ѩ>0@鈍ȍH戎/ y&>>#ݸ9K# jh"Hk8$/7#%HxH(&2i13hyZ%H>a/葆S/a` &i2PLPI@Zɕꈔ_QBu&T;W Y)jbqih "P(?ɗ.ecwi(W/88p^ W)HYtiav9& :9?%q |:Eid 9?Ss,D>`&zb9^$@50/ 2G>iIa5 Ӊי݉;)䉆4B֩0#p9ɝY҉P-&*9@bRJ3.I1.`©ٛx8Z4 FQ+ ms30*$Q?ZIC8*tȈrU*F*HL0N0g"3LUcV:99"%i[:p0e W)q%KYmKv ʤ 3?`*bkFɈOd# 2[Bԉ:RD+b hLp&R$(JIAHD6Y]ZsxUۉW,Ӷٖdf Ɋ:v˵^J%Rr6 "' ǹTx%%I 3 DQ\շeXV{;FI-&@>uRcI K k.»=X떻/0˧a([⛧&%Q<ֲi[$yek{陵*?% ,$[`SS؋ڮ&, @l(! x,:\@2phHԩ͛uWAzЪ |lʛ5˦ !~ȉΝ[A<*-p;2=G͟i< ԵJwLs]-`)j|@,g.Bs|]vk02њ3w铭<~wy~ׂ݆-؉t{Qq85m'e񏱘-A̎^ِr4ɏ uA1x8s=̷7bI9Aiq-̷ȐMxiϽI ۉ}ͭ 6ٔI}=RyJ)^>G"/3ic,mͼH8mYpdG ڝs $: JC '4I7H)a!!J~_}h^J%go %F9U>g 8˫|C=TJ䖼\-Ѓk=[BAA5dY*'zz븱?2+,ʮnE:6$$ ^"%O+Le|0=Ȁ;$C̦sq1(ǽ09,k*p'! S&F,l&!%AlHm:,\ rb *eiqo|@5`s~kt_|ho~l?;J/D7?_Lr!_:W/}}ٿO7X}//~@?!OU2}mر/O?_@@ DPB >QD 0cE=>H%4RB+]VlRL5!y0McgPyRKqlRUi&Uv"֬Xz֩Y3ӶmܮOYҭ)o^{M˶l`Hj,,ob#jdɕl#W12Xj!5VӛkZ'5(h@EdG<C'!nl~:KDI',{wA h"2U" -` 43Oԃ*4M! 蠠<+p3Dj(DX5]zラ #ȄZDH 8NDtC2A d(nb dܰ8D$N尜2',h`%O+?H *8+=cvu)E \_GH;o rrɏ@Zk lf}p? [ b%d(Dz`E)DZ. p fDH7I+$#+d(HP+[H(#$@"B+W QP* #$ c(Xu"(HC(.DB2X$`A$ X0|@J2bu,nфM R$)TB H 5 2B]!ۤ ˆ J\u8!@#2a,PzTg2@+Z9'RIsִ/ NM.D5oH״d=A"|S9Qª">\K,4P͉ Y@7-v 5^ A c?ҚzdDRmpuԮ U\';-OhvP!4xRh- ;qv Ɛmc|(#]Q +ئM-R^׫A+ձ0Yj`}.'t+gsF/tU5ց7Ws\ v"QvG6;۹.w1to{a^ܶ~O ?ʻ0./|aCo};+y3 hГ򨗼T1,}u{?|ר|7'·~ىW~ywL~ ѿ~?_ŋ$4@Tdx )$44TdAAA !4#D$BdB@)()*+,-)X@.1$C/|A($4T5d6B3l8|0t:C-C;C*É>A$.B9AX BdD1ElD6CHKID TD4OGDP,CJ$TdDM DUEQ1dŇ@E-DYB9(]VWlC{Z)X,BE,ABhRņE*Ȃ@ؕ0:B>(8diF6/@4Ђ:5PC2FB\++Bh$C174DžE+49(/G*Fpdvlq(HCS<`|B7\G)D]{~\dhÆlÀT[;:DƉ(ȌčB?0*I*959X;A8)D:I*(39 \dɆt90LjD xnTIJ0*@= J).G.tɄE->K*=0 (ʮ;* (\-P/(8@:00؃n>CLDJn˨ڔJ*˲(ɞIW,@`? JDBЃ%IP5Ђ0*( (/(%dDwD7`ȚBG27LQ$6pLI* N=0GB23hO<,)}D@؂O-(.*`*hHΒdBp/e%-ȃ>I %O7\ƄU̅†W,@MU ?0(DڙۤB!-Y?2;QăiE00KOw̃ 4D,2peFԂ]Fe2x,( 8M*וB:X7@Z.8@2c 0bmNM[Q,bQʵ|HXԥϥХ[[?B*L5J0@'1uM43 No,6V+lS\)uK}hP,+IGWj]5ؕ9肙 Kn*X̒Ԩ^^XW (0pY/_}R#`1Hf'|_?>|+5P..C%(a*>A5)vcBL;$2F$U96^c8C9)+p1=cBVC@bAZIE2UG~D/PQ&R6SFTe TVvWd)YZeXYߔ3dS[`vb>4dVfee$RAeKh \fOl&;Nvp(0%4NgsfN^g_w;kgx{g|~Nxh6胞F}f~h6hg荮g&g鑎fXFVfv闆阖陦隶&6j8fv꧆ꨖꩦꪶv.&kj(Vfv뷆>kk|klD&DTFfl\Ɔ|Ȧl=lm&m(p`(؈P8'X`%m@cm(OA׎>ѲٮmV.5؀x"p/ p`o89 )h02G'(!poooNF%hx"&`1Ȉ8m{h#%(X;J&X@ !#_"$%?rqq?r͂r"')rGpz  0h30ꡁX*5$7(׀Br  PC t2tDtHtD2@%tNw,+P/Ogu2?GؚB o`Qw 8K?&؁Qhv6p#xpLψhvm/n![hyYit(8wXDx"1Y͢6V HV)v 5Vpx`xvGVw!x/g?7yxnykUv8pq?5Zy ("4D?#z Ё7Vz q+ψ8w(yD uyuqr3?ǀrs0?!oO|/Ht  Y}!}?_g P:`_4ɹIz ~, >5*(@}~v/7ϟHcy~//U'Gyc#|b!X F1 ,iB P0 < S&M$L0@Rڌ9ɡo l2ӜR ޺0jаbǒ-k,ڴjײm-ܸr%{   pA9t | BqA nQ֭l2̚7s3Т.`0$ӪWn5ز_#Huٺw7e 0pWʗ3o9x;:ڷsǓ/o~r׳o>8ӯon?* 8 x * : J8!Zx!j! ;PK<J..PK**AOEBPS/img/chap7_loadimg_023.gifUXGIF87a)lnTڬLJT&LnT$&$&TTڬTTTlTlTLllTlnT$JT,)@pH,Ȥrl:ШtJZجvzxL.czn|N~{BhMC{ vCxȣиiBsEuŹ~ur݂KhCƀq)\! H8qݣ,O<`#.dÓ(SZz(DѶ,کɳ'$\ƱA|8E($? 惲F @رlYV͂Я͈Nm3hҥMDuAuQ+-t{js) C05 䵓]yVɺ;Bk2ufFʯf=oEܷD0gN4_^5\Do~榆p?# ,*C<u"~nFFw4"E5WƉ6FO{  %:ѵ$!]=UmRwJL-qsGUdHtbIߏ@TRő8X AD4& Pcka@#f4!.'d6N$wTOzDx`NtfiFv vq‰NEb'S馥 DZ#z{ qωYީN.&u"[ 59y#"18,B@#5YFEx`!#gaq{[ںx=>}ڍbF6w5<­|ǯP1Zh5(j|{ؑ#9dl0UndIIs]4%*ɊXƜ&-fi4Mh2(eZ2%: L 1_ ڈCPEFg2smy h,,BЛr%u@ЊZyhA( H'ADD/HWҖC&h ^T88e; 6@ iIJԢuC=RTvMPTJժZXͪVծz` XJֲhMZֶp\Oxͫ^׾ `KؿڵMb:dZͬf7zImhGKڶMjIrպ -lgKۦʶOoVpŠqm΍tZ=.v]h /Z+=zkՄ{Kͯ~I/LNs;8P [͛ {%>-~ix5Ix=!E>Yd 2 (Z(۷/[7 OC/1e(oY@J1Y_vÛָ9܇6`9qs*s 2٩6(W {:jU+tN&JKD-Mkn4FDňˤ]G/ \)Q(3qi^3>Mgl4/W)'zE[Qe`=#5B7Ent[D J rV&;G>ʄn[aiZNmc﴿Yv F&, m78貑wwr%qȤK/FuqCQ減=!Zq')'WK˼::->kZnnm2vVt}i/(?$@;d7٭l`ebY*u7=cѮwY ev+ ݵ`9]9mS}Nyxb_%f*7ZΚ:;?ʇ~L}mTp|(oпo[?yg~Wyy+{}d>ȘzV=џcatܧ}}IQH'|3sVm{!,t/W'j DsrSntF9e)Wp q (& 86Zck&<}'iE05>Lece`ɇW fqKAsC}giY脰fqC,08eWpgU!P(gjlIRkhqḨjvRvFk~X;f|RXWX7[glb^ڧ|XIE0'(gLX fzwtPw@s`hHyZxPd8R /hZ"WX>kQHhOxhDf) ZUv)ȁhn8 z}ne! [ ,iX ,xu7p}xA(|z|l8 |g3vIyX,9vK8y#Ň=yju~ez!nF08PvAo1k WǖOhApG_naЕbd)vsXFsձo"S`#avYycn/gFq9Tm!7}AWr91#-PA&47&@כPtl4P 3WGxׂ=8߰`Yghp瑣I6g*7#P FevwsW/w#!BYkxW\v~G17Y WwmG :WʡFzy{_1&B '`C!uyL)Q&{/jw>v6$dxBvw餷XuX~\XwW~@Hx`*̖H*=or8DLJ @XǦ7 }"|_I|whr*|V:PJ Q"HNJ6Z%ȩzw_ת:r=ȨzN7zG)ɫ GԡnMX~vq8ʭ7 irأ#wתaŌ«WӪ Ǘ:ŬzxQi.r2yh8n:cV&ڬﱓDHS籿q [>ir䃷%LJ|*k A&[˺d'q>+ph*=Kf{/)$p%0a"sKH`fz(_Ky^x0?y^q>J#;f_ K{)v)P]y^ t PqRZ[0Y됬횊X ƎT)lFl{XU 2 +4 {+d7ujbKo^MAs~BqR+ ی9 8Q9t?6שE:#!ṽkZˌI8!}x q%eɪb4M[p:t !Hp:EE}&t+wK 84uz:\/T!HYqt-,f, ky@hbKH 5i'h %"wgv%j0j1b|4\N2è@?jl!^ajAI]6r "f@ / e f5x}Bƀ<Ȣ|`ȈѠȌȐ<Eɖ=|ɚ0xiluQt6fЎhڽܐm܂*m٤MG<@!),j[|^M!j1<ޜЍ}-Ν] ͬ D at+aO@ g$DmNnǽGp>'|۰**E^-"K=iMָ> ,'rO3  뱛 ӡ]1(M IxH~KE d-0:(QN]].Ubo)~R2vqQsTVoxAz_^6PV꬝,?\& m^r(@zhC4|xu @!A #`lOH`iSlɯvͯ3Ȕ /)Phh.͈Y zNO4N{[;XO@\P,/דlZݹ>_/ .aϬ"io߷(GyCC[QH!0ŀƒ͂#'sxC8q0,bI. 𐡕OG"O#S!v РG>|HO"AqJuko2Z/^`2P r[yգXxHF"Jϯ[GG!q*3NfZ*Vk%ѴS=Ӣr[ @Y, KdGMMC SK$*8.$%2$IH/E'L5Md%"W,Q dPW â.3LiJ6lD6ŰLV84"L`5 MCT1n) oʹW|]ձ7I\J3Ճ\ݲW]_7}[%Xt{Ƹ qNQFeupVW֖M"Rl`期T'(s׫ \[fbꔳ6bk #PgYm ;nDn+￷ \p{ {jm]!g|X!R|r7|J9Hr$4K<)hLAܼ0w}Xڟkv'f{w ܅|juWw>w_=|uࣰar걿>sy{9Oȵw]_W`[`LpBDQG?د}gmr[) ECHZR`72 Py¼@ad#ӧ &{6 RwB5![гJ@i GHB.썂cs=6~1[@぀dF35:;^)Erp7i0ڴDʉu* F<>(oۉҔuؔOT@l9 !Y0~SAJ5rrԒ0{ 3x88Nte4+A4f5im Wf*X43"prk)zq|:wO8` @HP;S#r̫Qj Cl`1XU` X>mld)[Yd5YRh+ZҞNjYZ׾kli[[S'iMZ2v a{;\츨-nr+6]ntov8n :^.QԘ4tw0ވV] UUQi^s>LORcM0sC[7ۺ^ Ͱ]/LR>%wwՊY4`0~[\hKb Ŷ+q~`c#j0d&`G6rRsWA0a;-AaOND叾(1:F`sad xB 8 spfZƪ%J{8)͢gI-jzL2K89~=e-LRCmjTب>V4;oem.͆du2zԾvOn l>[_liήk,g=W[ u{WqʱV7yMۺ%lyķn)2Sn"~Wy%7Ց>89^s!C 9={)VrE]p.6g-}s;D'zчrU9LxqGv`Ex~]c̣󝃙l/5 k}@sdk\yO}>y$Yf<{N@W_F}ҀσnjO?eǓ[iYuz;`uw>p^W;wpϳy;A/K ,]g#¬꜏ponftϯ/ mo/ll-I.KГoL6oۊ.tDL^snlӯٯVN(@ [0(- Tl/&nPNmp3 ΍P p , m UN b pܰ(7|- -Ho .P{P07`0Wl͑Psn\s ٌ )̠. Qdb sN-qd 9pLL1Q/] PjQưQdQ1 X Mo5"7R^͚o!/m"o 2 S ; ӎ,n1 ۾>[R &O!!V%&)WeY Qה -1fҝnr2$QMՐ"#0#qM.?&-R+R2&ǒ)a2wR=*0R3AS,.PP35 3(Q]<S!B*+"ݒ 5/eS/9sSl!p37 3 .j/rϺ3߰008c=+C6tS0R#>9s>sq>i=70ƌm0?3&:/@g<ϲ3\;[S>#3)AB),qp8-r53BSD:dz>-B74nN՘ <@F2>16w:|G(3F/sF}<s:a:<.J0Hi?1I D3D)yt6roMOqH{M-2N_ALPTO=OOKUHF .TGIMtEӰ RIsL=@mQJsQM.R-s5 U:4GUStt@PI0~U@EUOB7Ǝ@uOmOSF]:kZNtXlY5\%1uOu{sDR}R]OߵQ[E5TwoVHAUUQ5bjB8wmJ 6\m[%qaT'U%b_ŲbW`aS?MCa?_X1UXp`$c]VVoY=/lLB4Uוiw6{c c5>6^jHMf_gu TkUhcRi_Rm.3P̐`j C\K`Ol`^28VYP%@p{d4gonM0qX}j aVr.F p[5lC7j5lV\s kdWZUOvqQWfcVjyrTK]NUs35v5tZhOOyw\wys sb*x-veM{VTmWwWGYvUS|UyxM$y/ʘw_yy#t@wuV[L} r !1E[VI6z{lxV<f5q{RU7]g>Wx:PN2 {ax%Srr| 5sZ!yOxSq*ֈπ'|Xg8xkVɠO~ mtx 8ؘ8@Ôsym%xxHW"rxH،w8fqɮ7qS9`K؎A8i{s<182NYkRz:lC J*'pi͕5^)%=Y"YIk7wCט踔Bt-9_|.ۼ8X YMQ99yp̼' :-ىW|U9X]yΛ9^ /GqXu8Y(QQe!nF/ZڤGqjQp9%/ON'ՙ`x?ڞթwzSzZ: O:MZzsu-iQ,[aAC75[SpMm- {)ڳ[캧W-X9U{0;w2 ;:ڧ_жEͯy'ڷOΦ9纳ӄ1t2QJsWw#Xصm msnqͻ3KI/OڽX߹X[?yٺ Yyʏ۹<ٹ/!K-\.\$g+:xf$C"U=h&vK+XQ{XlQ\u\9r-Bk&˅: 8Ux`_qA"d "^ ּax(6k&T#'ș̵}ѻ\l|Ѧ@u.']"I}E]q RO[rB [;:"agvb:seYG90"Hͩ01hQvs[c:g0b̽m=]4\f4 #u]}=ՏFٜeݫiֱ|OR?CzY Ǖ,pJB$hH!ʀ<"\8e]d-T≠?%Ds~L^eQ#.b aOtQ(B臾8Msa=L 衏JphUȩhIN_~ͻ' aY^6D7D!`^s$*1w&~PHt(_%GA@\ktC##b,(CaݦEGM8T[_cglsws;Tc~ J-y<* v0ɘM>ӯZ u IZ1 yHɀ$K!R&@9 S͌@LGIsHУRz*ҥf.Cn༅K 8tnߖS=/QXp @(aB @xQ ?8𕳒o1&R3Q/Pt Z#nټ-2`-+<Γ.<aň~xqBsKSoɢ]m[W<].)ic @@o xLE&xCj(p @ PC!"֠h[ڃiw -JҐ0hM},@-Q$Q>iLecRjy^YZK1Zy4y%V6Y%S^9q9&QY58|sq[(3x@:VtJ Mh ?2HVXm+rѢxPh~1)ߩ# ZZѩ6; "A-tY0,F+@nnK*YCz[җh]΅n - |&7(.B0XCm᫯pp͙|W) Z2R1l0X}fq5*5~\5![ſ(sM;)Q'2ձ|VkpS<3m<~]0ϼ=vǝ5սM=oNjwiϗ|OwzK>yUGuߗs9 5~MيNz=ow찿G;Ā=8'~:˷}lCܺ|Χ޷Coy5s?0n+Oύ;X5X aūҋOr\?7z @x3giS`-`!d <0* G| 7 `tH;P)_ }=l@ /"|3+Ƚ"f IO BLZ$ IFqto` P_\3&QO<ꈻ8"pUTFCڱs X ٶE]DH P͑v,hfRd'GSR9!I5SNї&PI0.4hD[~R;$/{X+^3&0Gr\,?B*e6+Dnd<,LfèLrbÜ_ӼaB P{Q#&c DÉ> E;6uJTVL ߥϋb4%GEVP̭'XNSA*Pѣ"U3FiSu0+z>lP[< ?gTZ>5Q'WUfTVE5dRZS4B="]TחuHY94fF~q jS`F} X V lz>-m>+#Dk1Vśa>7oZDt+Vu jỤd_=iv7rnx+^:u[Vb7nf7SEkTմnpi߆&\Cw`]|ؚe~Ѐӎ{d`3b&q }0SJj76 ֽ>lYJ<Z1!JΰiL)똳i/׌ȫu `-Z^hWgNE\hyZo٢*Zι$IP@œ1˸[AC%un}HgtӳyUӀ^2|7jz198+Ugyt~3:?Zj'#whq#"X>d<ޞr-`풙ƶ=m { W9ځpӔγbj}mnj@{G/{Mk3Gܤ7Sӕƅqx9Dobg,7{6]ܡy9pwx*:VWpw+۹E{/ߣōZ²;~ѷ=p6x#,~=_M@͟Yp_E¹vX]A i1`b_A@RE_1 R ޣY _`] *B2Ѡ}u5=!S9@v]`]6 %]1 `5`!Ai!w-x !h5@UU yqa_29U m% aUY!}"! $Rb8KA&z#f`])ҡbE3% ݏSu" bb=#*r4Z0#]beb,#'f!lma4:.!) Z灠@96r =c٢3cá#*`c!z!^^"#@#=B(=68Ec`(n$4f/9*N(dH\7+aR>"JzPK@!HMN:d2EeIX%~a]Ť)"eڠ5MrS:%]@dLeTFxЍcaE"ޛu1YޤHZ[F*%dW.2&UcRBeYdf>%a&!fJEhږFJͤ*FH_f*dZQM e VeK]%e%CeEi~%XA&k&fglCFCn8} $i.Vo6"gpe:kHrfa>gb-JghPRY'fs%~*'?ycz*fuoJc6Ljv=@}~gfvNTtYOje{KFz[X'l҅Vhl88!96Ph!hR*̱(xOsct6tbnecŧg Ԑf$e"(z6z]ؔىS`)k~i)&.^bj' *C^8%4mbMnh>JFw"B[%#iƠcjj&r1''[V,ꦈ:^^o) Z::d"Q@*꣆cej A~d^'DsR(Y&j:Djh[6:G$CfE8Ap NJ+$ $*ս($*(]F(~%ri9,xnM,J?Bik,kƨjuA&&n.,̚,@zjłjf'о҃ȬMrӚ\BmϾ+ꥼ^z-^՝9 ҝ쮢Ϟ-|ʭl΢,reRF":ꭵ2.H9-Ti:A+"nFm\kƫbl(g[z..Zr.m)...A.r,RnE覮vL/())얮*/~M@Jo:o/Ap 0#&J30pCpKp[/k#zp < p Z0o ϯ pp0 qqӢ骬꒯bGzooUv/[1^!m.ޮ/qo(V/1qW!O rRDZ[h&;o^#r'%2!irl y23r# O..&&0&'ꡦ2qۭu1je2ـ,r!Љ)n$$/39lC1O$R-Sd$qr/m~p1w0O;X2r27s1/b2:s:t@/sBB33Co!C??@4&Ar/8.2Ɯ:t;J_cKCf=4P>׃H4NWt@w2mFF'/8s4C5=,5S taKϳtC3tj*[<2W+@ts*OG5Hn[wNuO5Y׮=W49tW;3AKB 5$oH2dw:Wd555f^u>{WOl08<]j(xܛk WJ G,7=p|ŶC C8$NGdRd6LmR@:V0E 21]ox*]~ O0v@0%4&Ħ#;<=#4=ʥ56$)T@1>56R$Zؤ\Y(:Q``&E[1]7c npprntlB$$,../$>ӃHX|`|HL҇ П%PIEUӑpJձ TH_$`P1+:.ψI1 Z9NXWn<*ҘJB"n8i;싼KٳGЇH"03Ǔ %V/VQLRN@ ,7@F@Qɩ/*6o ^\(n1@޿_#M1GNjnѱ췏⦝&8pcX"=}Rntn[JO,L}lz5B9 ~ 3$H Ӄ#?&SJJSF ѡ](mp@ .z,FlIɶz -y=F vlωND$ESRGC<>""O);zB1ҨA?91D[0NS($N0Zl4MO˔O7Kˋ>He:u5TFC%uQ,rKTQߡoL2ˤ.2Y%UX=5֪(@X4.Eee4; abPҴͣG @m i[CY7 ,d Oc5Txm_)_gKeRf`zfX_qxM 7L7)c[cr{3uȰ$-Wci\XhK6ƥ\^W^"Qd(X'Oz e`N鬚%l]Oc^9&;C0%LJ>gTy;iYN*ƘvTIfUjjr@ - Ǎ!-dQÑ@\Fr@9`+sn۽;p=E~+Ou <#|y>*[Հ_'(p)駒8GBٍ}" xg:8 hi !P%~Gшn> !g*<P $r%@@2:0#;\!exB цGT!' '{s7 fRN-nmaؘ {բ'K(@#(`+Op|̻Q !OCs\D_6Ú03{(5zdȍ 98N4ިHj\ɡ$9JΒ(E Jt]z8E*Bl).K_Cg0cb#q|X%~v`o~dMq:0g:9 DQZ&@`{4:ٲ3dM?L %Lyֳ-~ڨ Q )DZRm2C%:TTҢD>P 95pөJhԗ c2EuғnTzêgZd\sIu50Ӧ?UݙUp*&FkRTa*C3[,W{׭`{ XMoI ٢ FeҴHqgxe.J;U&0Fz@2񗋻M`{#7 jC@Rvaz&-㎆>.SL$ +@:@B{k[}DXd/7aFrvaPQ(k+7;62bc/ wl#L@% s ;osbt"P4CYʊ֯bz\:҄1S=>YĚ_%3i37Oh8oK[҆U6޸n0K l`ĞAmoiswk@.kkZV\S:󳍝n@ܣ-m)&e8^q>]] ÷-bZҲ/G-&x 4#09 &UcmtJu#w^;lw[LG&׻t;^/Il3$oJ_n?|b)sK=xo+ߏm=J7<I~;d'S2`GRκM+yL'Yxw S? ^l|*yۧQŏG/3G-mӗ1{F+{+oۿ4΋>`:s:s@ 2K=,wS?ϋ !+@Ժe: 3< ,@@ ܀ A$7;ASkA9{=|: þӾ ¿[@-̻ |%|• B[@4!탽#$H?=(0+Z+sܴ8@!<;4D;$B *&Aӱ:L<?Q0:DDx1 D5TENBOBPE?.,EB Xh`Š{CdFD$FC,TDG,(i;^AM=sF4_RGGF5q;rv$9DGy ;|<7DlE4~\z\mx}l\h,HT GU| F#LȲɮdeȁŏH/LǓLPʼntǀôtH40TƊǞExH0#RR(Xx7 $eU'T!ԽTT8ԇ0U>*e T%VU,5TBTA+*H(MXF(8TO*=%4(RfuV3VMBmM1ʘ3mV2;kMquNcUuR7oQ\^%V`xUWqmSQSVW0$:!r(UW}P H6z a%yWMXn=VYuIZTjUWc P3BV)`zedy|YYgE"V&zU@Z]-we ڪ )PZ5H88(ҙY*3]cuZ)UMڬZYZ ڮP[SܩeX\bYmGM>!V+-Nۑpڠĝ=SN]8k U$0jmݥ\=ީݽp!4 \7ҵUWuS|RVy[MzeQ0^Y =_ ^E%\- 8U*-UUMu-R$ҍBPӦ}QU>ЍڝFM֝Ma]}W.a}G`%h dN_|5ߑO a_af]…a!#`$aJЍ/X_-6'^_$ZaS5.Ủ^/>^%vQ3cMK98 +&Aa7Y@.\Vza$*=]>xGc[qOf~aDVa-XcEc R6c]CE*`p[3[m" 3}0}ui ^Uf%1V]je\YaY>j%#MaFw>\1j~>Zoc*0hTfu\UY^&13WsQ\=d(eδ"]:]] ݿ=PaMiu%jth*%^ iTJjzNMduΰH~hXڈ]fjޔhS^_iU6~ԓ.#CvWUŽ5kk8ekE lnF&P3n 1ie/TMlmήzFmPzmmmmݖ=nN>nNn^n&nnnnnmVn$nMoo>oN߾n-eo~>MovMo!o|Koopp/p?pOp_p ;PKUUPK**A OEBPS/img/chap5_test_emp_010.gif$GIF87aw$&TLnT&lnTLJTln$&$JTڬ,w#H*\ȰÇ#JHŋ3jȱǏ Iɓ(S\ɲ˗0cʜI͛8sɳϟ@(ѣH*]ʴӧPyU իXj:rׯ`Ê+ٳhӪ]kv۷pK.v[rjJ@㍪T`ˆQNt1㟎K>]% 1E?)ztVRY4̮s6햶oF`7s {NK"O~7U߫\.=x5'׎&e'׾޽ϣ}xӝ߼g^wI{] z6x݀'!l^ۃF蚇 ~se婸i3Ȣ5>#(e_vߑءIƩY$4c7g0I IJ,@U gWQ)H}TiW @&&fzdeM$v Tu$PURz|" }f:*l #qUzi$UE,Iӎhtn*,%Ymd誂9ʉꪫY4 + J@V({X+ŪiN/SE~+硄dehU^@+ƊqAR!ƖA D5P9ܨ5`Y ?P?[Xe%~BĜ2qP(@fE5zDXX HJpqᆭ ͌9 >є .C/i3\)[-IbP?<(KiÎ)sτV)e-Y^5JղʜfNvbRIJ91 71(?),]md80.k@;> uIѺGHMT@!`d8h@쳟($ Stk[KJ $d (-jJF[͍AYUhy>)Y͒SzRR^^Ǵ kJVvŕs'Kp\ :¶1̬K-R1Ş}XVV0N,I؆֔>1n}ջ'Y-0Pi@iu%"Rk fL.P|LoWh/I׺UtM5ϜNɻ\o>$V 4nF򆷋߅^ Lm/gѓvݯ|;yd_#5B5~h *Y +|3i%U7J#NL2c -TH3=B`7cߘ vqd5y2Wѓ%vq Lf1i13e6.CFL:?fvγπAЈRF;;~'MDҘδrM{Ӡ_JRԯ$ WUǤհgMZ*ԕwMjZ&]bض6k@$ͳaeJftG3_U^Imn[Mf̭ǘ%>}m̼ŝoz?+&taǻ&hɾUrp&( xej:$ubn*JדTɑbr\X÷j@(Yfr59bn0'&,+b9UűO=^L`]2L؟@`Y;;+EB_E}+77E))^96م.w?|weW~\i趇Qjm(,b%>Vv{ת/ޠNg.+OT )ݼ+Gs ^Z%Y[5?A~+~ˮ} D}>ni'@=+5}~wAܧ{s{ȧBRsR8@GCwR%{|1-k)%3$$>%==m;UgTV&HuxsV1,ԁs֗-(yBr,usRr<h !x`5A|RC,p|6yyF:zc(xH 3|t|gf8W|_.3e@dBr(#?"waȈ}yKgMXz3S}`GTr1Hj} ኧhё(9PёnHHB48.7p1H|R'UVwuwt;P}x~g-R;#эsxI(xwXsW|f+(J/T1Hssxv#wӈ/Ywrvr]sWn؎#((,M$$<n)i>zUkR))vքB()\!>yC“@֑DdPpTɔ?1@.&yHt&ZȕtO!SjElK kcrxz|ɗ֗p9yIknjY~Im99y ٚF9y0QiٛYȉǙٜɔԹYrynٝki~虞깞ٞ9Yyٟ:ZgMb ڠ:Z$aڡ "*:#z(*,ڢZ\92ZF6S:ڣ䆣>)Dm@ZHEGL$KڤP OTZSZX i<\v[ڥ`zSC8.(V*ŵ(k.˵(t-BmQ-8S3/eqCu7tazhr/W~0iZڸ,%57IN3"uFe.Ur~j{8z$8S2nWj⨬KgGz7O;DŦ~ )23۔D@v#3%ȲBw49s) )JQ24֫zLWL$2S4q((j9r6`7[yZ?4O|,1DHjE Ⴌ NyBUc43G=(XV'9).1;8r'kSUp}ò.2&k?:,t;gv6DCƪ@50ITL3 LcV1;Uyz.j(TCbK{D:EgBR 5w'î䪍Dr+jC WiC,V'rMEԲ|C>xնs9kx72NnR =aȆ MX?DR}(@K5 Ʋ+7Mk%(vB5y~d7$bT~p;0CO 5z(Q#{Co5*cT){C~L+g5RB'[Gd]XC#Rc,u,.W\G1Içr)A.H*9BQ:Egʦ*M0L$&,lrdbt|zdb|DBL촺伾伾TZl|~tv,*4<:Dtr  $ln$&4ln4Jd|~|ĔLJL\^\<>]pr| m5X߀ouI Tq;q-u[*]Ӂ._-o I%x/_kRPRBO.&:<̳eh A@бJ[`Hq@qXo{_} d>YQLЀ{W$Qg DBv P`^3 @JЂ}?uІ GDщZk(F7ѯh )n)Ғ*=JWꓔ0KcJӚ66ͩN_2ӝt=PEԡuE=R%ԥ:UM}TgթZՔUV3խz]XֱUe=ZֵUtm}\ӹUq^׽P}`6C=b:6}dWזL Pl0lfYrPTT(pe%` ,m+(yP[(kQ JIr"$4.&I[yF wUy{ ׼IPf,9P0STO.vyVZ80-UM r$X@n H$%`8KԂ@i8%YqZ<< Sp8၀X "&Qbf/kR@wg!h$aݱnL@ATS 0K /)$ |fYlV*xl <$#A*(&Q2يs400/;MժI,LhtwCm?RMP,W:ֿ][ $UB^h,}lךfs)j΅vG/b:@-TdKttTPv:bb E@&0.7 VLT\ '8Ԗ um#x;q|(y ^h-s]Ͻs*l\vSDѦdt?V< !!lgL@7 0țt I/Pg7]itK@{n dr`2\]cp=zT~Ð2z LpPz^g]/mO=1p "S:m.MbԀy/tY aG o}_(W'|TwP>r4$~i۲IwG3O^*ZR^^] )H!8FX1]ׁ8)8!e&,}"28~&;PH|'w^:C-m0|VX;q/k89swYƋ (?hrS^؋ZϵxinjNXhx%a:+ %tq(>踍_ Pwwzw:V\:㸎eX1RW?eя$y'oC*%\gR2ӕ4N0H#&\RY0ifP#q)'.I;97ɊX^g{Vj@Fg!X`l6veȇ.q'jɒHxҕOY\yB-< G͒[=V>GN0,e2D4eS9&|y4ai[G8] bיȘ99vB`c%&&@<~ %AnsHna9h)rE Y{Sԑso_7(PVpmʡZȵ腉NVsIb\UH5^BBE!W301Р%fpTgEd6eF|gPh3%`lş`nA3\o7&van(vmZ341`weZt%uQ7uUwunA3kv'vbS/pvvB1PP`ouxHgfT'kmy ]}O:*Gb~۫(U~ũ%1=0^Guy-ż}|옽y˸{ez#<vJY =Z4j0Lz%NҺ%!òH(OApLi"+X^v ɍ^Mv*.Vgp p%S]YƮ'$[UY-4^1@\Dm:*#&z6Iv6%m\Nk19&qŭy3llR|%y4I™[\31"Hj#>%®sAv*\`4p `/{շe;. >&a:p6 $ `0.$Gp9 |.i-D*4gAhWMEu4,Us( F %JD!'(, 80}"H76%/S*4F>`x>(7bs EI$*m 8M(VB V^Jdw"(^Vp!# Ƌfl&Bt3bv}li f rG6amU6# Xbg;7U&PyЕGEjRT6թOjTT%MժWjV*ժnի_RV5c5kZպVUj\:WPGk^W}l`;yElbJ.ֱldXVֲu,e1YvlhE;ډEmjiZնֵa0[ֶmnu[mp;ָǝeU\6wYsK\"׺׍rv׻ox;^׼Bu 2׽M/v;_ho~_Wz;vFp+`*/%|]?p|a x~m98M9С ;q-laO< Gb1"Yvde C6bP؂3^ca8'p+;!Ї,_][n w èŋ~Kr?su]@:ܥ4ʹrzMKe? +r']0 "_wx,⻻6Сׂe; P5k,n<(%p.ء pKzezwB>2W7v/@!+8-X=JK32C:ۂ4H<19?@69-px-cϪ4 |/k)ݣA+T ( "l/%("D'\A&,-./0243T*Tu-4t7/8C7\;=?DV@$@dBDD(EdFjĒlR-.b%$돷ZƇo{n}1es[kދƊh{ī%ͽ vZ/P%2Q.N<*;>RkpL(3%Z*s,!0 3uZP,JL&49L]Dn۫SpjQOmx>myDl8|䖪U{Me͜gFMH ۉ#v~~@pu6 {r @jOMІ:X`(D'Jъ^ȨF7юz HGJҒ(MJWҖ0LgJӚ8ͩJQ@ PJԢHMRo,PTJժZX]iSծz` X ԦZh=Dֶsn\ ׹8+^׍鵯 ,f*6=b[2Mc#Kaͬfze,hGK-M-q ֺ6 }lUvn56p7=r:7}tZwսvzwx7=zə}|sw~9Q3!peyRP *,YpD{O:;px'v‚L0x Ja^, ZPa 0E_8EbE^B LP&9O–d ##b} KHRqLO"ya\Bq@Vr5YFf~5 heRsf5 ZI5L-,u3h47ZkN'X"M1h0(^FY.%L9+?U'5XQ0z_;FtV$T}mj)2Xvjѿlx0a(N\Fxk%׬eBzG /0EuԒ GpR-rf/o:~3x4Nsx Gz >B<խ Z\]O;TWz}ߏ7s+y>wn{aoPds8K^BsJ ?q(P? }Z>]<~ۣSO}w7ye0 Sx'~)}G .~Ujl;|GeoWbgiG~IlذdXē X&h^dwBցt( <@?zZm2d;؃ ,uxЇRh|tPxE}xt̓>nVt D'eriWHrewhR@(l8nH{Eb'&n!DHggxj$ߣcg'h ryGeh00Q2~&G2W%'}h2]bkfVfWzF1|ZxĈHeU(fV&mmah78zsM|&gi=7jiy#n xhlAk]E A5 Tfa] Gy\qg.a1b (&5Uv`'Dّ`U]#1^n-$i&'ם?g92uD$Ft-EGr%7 a P*aQ{tǤWUzs!rEj Ǟ*Yxky{y"` 2xާDQq,}jeB%'Ge|zw$~X6"|eLJ3'9VYN|"i |6آzfJ*!G9 M;:ګn~*c**H):@ecܪf\: *sU Y7m(P86 檊G]򅞇؟j5H&'K; հ˱V DYfeAڶKgơ9g|1+by[z)F+O`LIhS[9V.T bkG;fbgl e۶peq;t{xZC= ;? {$k۸:&J*q?LV!f0!'\?,b1;{æpFlrƓ*빇`<%j|&謾* |Pك`!O ԄQ'QLf]M5]G#Hc  C-!"֖<<3 8]&Tb}*  K ό2'3 L -sĂ)3Wq03+YԭA1lb',|M`˛ tGF"&Es˙ Ӕ|4Mm-v,?*tau8~ΞoC춭ކC/wjN>(m!Jc B `[_` faW%PX'Oلo/RdD 1ǾA6? ^l=Qم-2xr! 1>?` a!"_"c#d"%f&g瘥g(ii*k+k,m_.oU0qC2s3t5v2v7xx1/8z43<}=s|y(~@2C=eBX"`!Y *L""FS CI8Af,i#"R!I23R`ː+15s&PI5`J'fnQ@8?TҠQI`KRG}4 % %jPDukER&p֎޲ ia=r``E$7a&v MԸ~^k0@UAnmLM@[ݼ! D0 j&!Pp=0v ) `6)tXfwI׀%$'AߩjUUyj%%4a F ؆U4[m]w\)^;X^2QS)HQ8UJAFpmW! }@#fa==aT s4auy4U]n%#;a%u__1Ok\1Wt6]RvA84NgCEztɉٞ][= [XB}Жy ))+o! k}hy3*=U]IRPk%`U;t,A!oN"hJj.OK3p]u Яn'a.2~>~D`DQUH 8fFEkK'}g@nGeբjaT}WvoQh +Fl^hQVΖ aO#}iQ$\Rx!3c`M|bTWYoge8GΘ}yRyDaeCp6l/j.=M'q]exdpP}(_-]9oJT\hp~Q*3u7%f_M9&ށ22!6N w"C(`i?)#],mo wDgF0C(&Tr]򲗾%0)a<&2e2|&4)iRּ&6L @&8)q<':өNlrs|'<)yҳ2ۉ}'@*or=,SЅ21 m(D#J E3*JjGC*I$IS*GadKcCʴMsx  0&"PP`$uH-DP3( NMj2 Sʹ :4pk!j|誟(:l_ 4ۥQmfIP,` +UU3U%LvJ5**em[3jyA*X45- Mup[=V%aJp[ Im *:,vj=BZhitQIw W']*6Imp[U1 .]v {W}Z@QjiQ!6;ވ+o:},o؂յՕR$`½bSv-0XqTկY' G5[6h>iW_]^ ['XU>e kf%3%ZD/ >[e6UpZ&ͯE#w/K?̋.iZ;3z Ff[OS繡Q`$+z9zΡ%,Ju7}G#GIvt$ڤBS7'zLИaϠj2@Slf{8b.= ~슭m,<5T΅6HW@- s?~TgVyS1 Xg9Q5mKpD۹z4|iU>,Pݱ4 :UѥJ4VGd_xuҮn;.ӽv;B;PKPK**A"OEBPS/img/chap4_db_connect_002.gifoGIF87a2,.4\^tdf|TRd ,.<\Zl<:Lln46DDBTljTVl$",̴̤DFT LJ\LN\$ LRd$"$<>L,*4tr42pCTV)| RS ?&zS~Adaʔ06H')dHC)& B\ B))36 J Ȳ()C lô>@0'f)!p): &B @{uR[ C薒!N@, *6 Cg`Q<0HKP!䶗J.0{<YH Y !-t"?<|j)DKJK ͊\ҥpL|0gw t+HtH<Ѩ"tF-6*sԦ,1Cׂt-K le0 _ Jwrъ x)C@’:1.CUa5 $pB)DxB)Dd`ۛ &t { B})ۤ,+"Mb!8/ȮGX$@ȇ).& mnXd?/os# :B0@)D6 cY0DHC4`M^@#Y{!; 7p]V $B*'D & X$/X@&J`8D'%[ϸ p7"*HB"!X l$'fDl#wqLzԅz@Or<*W T*@Z̥.w^ 0IbL2f:Ќ&3E2TH̦6nz 8IYL:v4K5Oz̧>r}+JL<j/8ԡ MB#/ A3 -FC $]DS>6)LmQt%2,LjS$>IOҠ~FmPԣX*SRU%ԭB-Wձ`.ժYRֱԢj]BU:r]ҷvV,lzד v=+ZSŲ5]Y~U/!^䲞 -=8+ҺMfUZhcK[m̶ms[g =8@2~ mp{ 6TX)P0v=!WUv]7){]˾6n3(BB`@}WA)ȈGv+' rv2G.fG; с!A3(,AX `!$n%`R朅͗ ' QbA8+v# ߏ1chH,WW4a$6&B5@1~$ >{d @q ĥ=+ϑCg  "E.4 M!ғqhl:|f 4# B]a:DQO:/% Э`c4AD'դZkȳ.llKX  6a-h{?P"~gX-r:=VN6uۣwo;X7] x#A-} w4p<>rKwqvݤ pi&w omcϜl>8]D*  hBOX;xG:_fz[F`V*|?ҷm3w4gw{^7耢B uǁ:@8=~'z%_U^. J< hw`-u|/B6{[wE_-x^C(F>8n:؀lOX5~>>`=ӧXqC0]8_`(8 e"1@ Gp232&_Ј'_|~Hx.~bHxwp*c1_g4&}8y]*X!8cf(%:{N0{H Hp19猐ш ӍC (dXטNV|(jk.xֈh N,H}Lj`{$!>AlAM} UI'y0k@wCxzƒeP~1y3yh>賓ד!_rt@ɄI/E@qZ7]FLy񇊱- R Efvc9_ WVcmth3=fCd3#w8%@ UȶhkFiE3'6k@jIHєW EEHr7党ɚ'Cr37pq}mBI / ARyyʙd3Qgx1vi }Gkǐɝ7 IusJ )!]ylJ9_ai MQ9Ixr֊ypgÂUIIީck#Ģr兙-p5"!69p 9Dj碋莞t@J֒Xfy[Ci]A/GVEZZХ+_G]~Xcrc*iFMɓrifNb*b,6e0V<)"ma*kJGrjvkնkNUB~⥩):/xsqr W';wz_g*ote y1'vygy"sǺ t |''הi|*RJFx |78Wuتz4ZMXԔ@XQDs:@ة%f!奊HDؠj]&8Lz"{^iH@!%*{2?fB>[uHZJմN+ZP5TYV{ZX\۵`W$ f sj if۶nHekfcHytZD+w[8{KKV}Hx7YsukK;+PU kT˸lu՗ze:Fʥ|+KkH;+ 뷲k˹[0빽KAK` >ѻӋ{2H:[0u,`{ E`1? R࿔/PXP8@#۽t %P(ֻ .La,;0 Vy-94%;nYB`+KB\ E@!L8NK30O Ť05|]L6oPΑQ6CrBc8К\`q~HxQg7'BNDG SRC"[IP <<"ƥʤ 9¨ $ Plcz[/$:*k4/D| + !;LGz lL PaT)m"˴leފ) )hQ!9ܽTO`@=?||# P%[A | r@P0 *B3=F4L0(!f5NaҤϷXC `+F0"},Zd {1&[`W-نbk 1C@~C )@d4! ynfإX]i-B ŋ-`3Pɧol-pζҎK]TְW ר5pis;$~m#1A č<!bD)1 e=q f&ܨ] -*ڧ֩+$ P4XaF0ˀA4/r uǶ7|Dc@V%ըBw@plɻŻ n ۢ]Ƣ]S0=۱ө5Um,[A0B(-N{pi⼻0I>K>,*+uNg q.}>hl{>obN{dN% KjENwNy.nN^&K%r!>)nV^~UPžT^AuȮSʾ3R$5Q~PNP>UKJOOO?_ /N o _4` "/I$_u*_H,0OD2?T6>8IL pX B,WOv^ 9:P)V4@  0?&J(OP1@ǧ%`@1 >J(J; TMN,,x-| N۷@R BrTNP4,0:2#kAؤO5?3o 3a?O|B N 00"3(Px8 *:JZjzJZ @#@ф daB ȹԁY@4x;9 yP^oS@Ll@B~흸E1ƍ;zJA-D`A  0P ;v qZ(0j0@  U*?QKӥMDA :%P"֨FR4PԪWkeݦ{ 8 b$@1h5(숰eB?!@HhLxwū)$qͺӂA{jLC(Z@΃z7WKgk8ܻ{4@",0H5&hW7gFciN)$H 7) BD8O&L@B4`Z$@E@ >XDMv j\sq`fDw2Hc6~BAmYz%Pg@~bB=X9H=@PeWz `@;/r6\b[q̉&&|jg7Jhŀ1Ac=R#@ U&Bxd qw LBH +jB |ʪ2D0'*X0 5|𪪽vRb=DǫԋfKnB&d(&cq : ; 644e=A3d™ P& G X0tD$q$\#E<1(g5|s5zl&%Ӯ$ƀL'd 5sZou׆-ҍ{Mvf'$c wr]h,ltw~{$߆x>x?vGNy_oyky袏7褟zZz뮿wN{톱n{ |.|N/z?GO}Oo}]p~O~柏~~Oߏ;PKtoPK**AOEBPS/img/chap7_loadimg_009.gifHJGIF87a$&TLnT&lnTLJTln$&$JTڬTڬTTlTlTlLTlTT,@pH,Ȥrl:ШtJZجvzxL.Wzn|N~xBnMC r v CͬɤڴLƑiEuϹ~uriKߐ Yp.!|PϺ"J(3f0# 1OI;"\s˗0B3G,VJ(~6\Z@ѧ Y'@ UhM3ZԦ Z6gx݄Jl)Uhb}u*5Ҭ@bh O `lCdwyrzрf vbƎʞ 6%BO`i"֘MijNjj=^g$Ι7WS(Up; mkҋNb# HՐ/bXFIq߉|IxfL  @Dz!!10̥HZ P݇wTh`deؑ(gDcsdqnJiЛ ;]f| f8)S-x Z P E*jGG.陪%g5c |`B5)_^cjΫ9\1Xk.* 䟖(sVJ*@ Чș;4?1,fx }S+y }3}ѡ4e&;h5RVb' r(9&$Dy4FajazԨ4BfO dO!W N+=I/ؗfKyLxnU -T>Mwn`+';=s^"u)*p!no{Rq(oíNe9xx^[rN$qFB J2 i2!I/$y at&?q,;g\%/9mK5Ȝ[9UX^-/su;U?gF 0(Ov.qO2Ag|ў=![t.]'b'QAv킞miyi]B|ߙ }37spoƺ?Qo.I,vۼ<zX1##JoeVH UJ-&;1?`G:ɦ{)_HK?{+ _C{tW|z,@;_}/|~lxIs'uR|pYT!MDm&wflQWIB8K!XmQ?vnAWG7$4hq wcyqxЇL 'oF$Kx:5yFoᑄd# ҄ Zm W}~DZqpIaV?`Bc8zv306Pjv~[ ˓ꊼW(WÔo#~8d@v>8H0% Srʒ J`څ %zB4p-+ ^Rb#Pk)qTb󩩗ganCtŐPpqV ) C ֹ~KKbM{]3 eѵA iz ~n2K@n^SnRAy`)` Ý٩,8f!)j1Jr&+١~| E Q%bI]-Թkڻ Tww^Wxֽx€jjqƨ>hzw`xhW2|*E O4L,[yMr5j@kԶ5 lKKS|'{06ěb_Ĩ@,Pb3i\$Y CBXh,rs`oǽȂdM<ȆL7a|ȊȎ,*Ȓ<<ɖ<|ɚ ɞ| j|ߊʪëʰIu˴\˰`4 )L$,(U̿̾ ͜/Aeo˖ ΕT<،|ܼ\޸c+LϠl̈́@l< \==^Тњ\,Jk 0 ҦҼ@Ma%2}: <=C E8-K }F-)VMY .]0 I-[}]-TMegӁ@-bhi cMyMoqrtMm {} =ׇmя틅 ERjpw_}ґmע=$KQ_֥=ӟ ]͡ѧzv|FܔPHma^|pԛ] M] ]՝֬ð%)1O8NS1Rߩ١Wm\ؽݎ }('9O҅:jpI"?G5F~.Q'. }}ykD:} $I(eA=i - NG.INf +x#"]ֽ=d^)bl@ov" $|UN]]$yg.UNك`._n-na4+6~@@+?qT{rBi%> +ס^kp'4+Tq @R _>q0@ǮN۩~^ܥ.k~7C y^̎7n^[}{`>X` ^~c4,VNeea(QtnOn>@U<@ Nm7qet| qv+]VB@GX; ڤ9Rp^^NqMomj ?-[TԻm%_]?PW}abz/n?9 󹠡>Se B4AޭUB=g)xc^AZ Yt qgRRyOgOI/=rl xo#f_w@kcm!+uo0~ ݡDK/4qz=}h3Zvr_oגxUs P@00, NU=!*땑vd1b@)JB5)&(XT p9My=tM!*:RTg80|ZA&/Le Ś,s涝!e'%OθR2ni[CST˨p'R_6Ƈ%+jNGjyr;C8ZND޼)iD@[()A`:@ɲ2,(71E7m*"(Cso X1X'{+ěD A!@\"E%,H+o&Q0Xd'`S/q+Jޤ"6o,>w2DGT1(PeBhӞ0NL5N=CQT=$TRusWD@WRUU.3 2I:%M_1iu -8ޒ"1#_ qCѬBVZ@z5\(@V5Lth%VZ[JakWiN >Z5Ur! 2]ߚ3ɸ5D^6^o31e#:wh.D9A !'b91<6r)(F1Ql[kV+%m} Q=8o$sl:ڡ%Jf:|\: něqn[l\>8sɧA*H?Y(gd uhqtz5w}wo7xޏUf$wxzz$L 2=*ؙ y/|ӳ_P#^Uɧ_wpX޻p?}+& ׬i!Y7%tp| A!"Ⱥ 3ŀ vf 47/+ *PXtb¥ eCRƨط6/gc HGPEHL5OH1|t"HJy$7DI)VNgS 7 GAj^rF 3]('Dřqc>iR2'g[fBU@FEL%~I7% j.q̥)`"K]#yM6ea9in|<9Dӗ!$0#ݤ<-OoԍB_~>Z(B7t$mb@/Mrh,SZГt0}H8Q;T/%eK#P^t>Ui;3:RLI3 eBe)&Ir*.ȭԩ**Q *RUP;mB:R5VVo. +Dټbﰘ btyWj]\f9Y~lhI[ZzvUjY־li{Z]mu21p[\㒢Ur\ro+vVnv;v/j;^6=/p[hS\໾44l}U擿5}F5ELY|0]' ㏽${:Y6p~3 _uoNJźDYQ|C lbs|߳dLF62 خ m 20d/i\f2C`_i޳nٯ)rpeؔAV'`f H~>s,,W5jπuK|2KӘF MhWrh(͌^tLK81 |ddyzdN3˴S'Zʪp},8Z±5A#\6A 4Ӛͅua-_gN7@mGڻ6=z{ߦt*n6o?^=rBm0C6ȵpwOAu>}_y5G2];:>U=Y%uH_ֱvrE!P SwcGuw2yGvRw 7tC*ݮ oH/JoXϿOۍo_߂(W8 h @UJpn\p}P /?orx|SЈP<,pY :D4̎n?Y =;3%DK>G.)JA g1Fotv4D/I1t# CD9퀴 N),.ucOKd3FO7hSd#@'db^YvXQWgV9k\j+bdgZWVjif+UsHP]Oev`Z/mtaif6gmnE0[vVsot\hR<,iV+0lS0Wf#muPW+gnQQQtÕtזaOWRW*pXqe ]v=qsrהrF`e@AyfUd7D7Wyh}V^!Vzox2{=WF7@yv|gzWr(C{w\wx|C؁]8VRoooWmdl.6-UvGN,yU{_SP˓z!Ӗx(Qxu"nPaL%Jw\kІۑg8O]̪x;cw߷ta xtg8Trm.O%-AUD]q+-3[m0"K31̈T'g-W9L1`G8(wm2X},wW×injbs8%zN\9ۄM y~!88M&"[YXo3x9؎!l̀tw5}92ٷkXwAYpElQ̖05[tQUQvz5 S8y(2 ykV1Zzx٣+Y!ڤSz_Px,^kIړyM{:bZڦ!98 QTߘږr5W:(6ZD:D)2 'O6k{yZz iI {ONGyeMoF{߮AWy:[0a ?u9OԲ2.ZEm%g9%Z7_ٝs:;s#{7ٺzCZ8g;K;Jco̻ +ۻV 9{q[i$rz|[ZU1}1(@:!:۩?|9ȖԳ/.{i[ `m۱mܻytXy\:+QLY(G&@ >{f F"̃&A!-M.b GS<˓W@ lq<^IFJE1 *= 4d 9ւ,ѧ`nov}h| z]njDr`x=؋i]{0ܰųni9'FHa\},ӏXGTz"8ӡUD!B fTMdTMaϽ[,dὡK=,~=)kݕi,0]?>E>aUU1< eMP`M (Gti΂֩ޡ "TN EZ&P>>eD`(%  HT4 VE)Tcy`^CNdZ _=r0a[{^[|܅^kQ-! ~lW@!aHEދm"^GnDA?#r?KC^A.;!,_Gtjzް&?%?#y1R C6|2ѿk"8"3\ɷQrh4G9`XY bsL,os|i=?CIT 1)16YMPHtz~JvJPe5(AJ|1_:?EU 5TQyUkQ#}y&s y5-/Phvd.RwܿADć.b8Q0sDG| RCӆS6O9s'Ohc.Xa{R˪%3tk'oL#5ҁkIe_)-5.E#O`'6ʖq]2%*+?F8э$|9if"2]mUUIsw_((pn *IaUY SoMvoI8z#{9'YkW_ `uK5 Yae0!$]}ILbRhbsϡq[mn@fyg܋F6pU@/`#@QvE S @u| yf 鎜wti_, 1o5hǟK6b *@x@u2dvj)2&)")S v؟0ifJ먛Z奵:j!n8V#+9"ʎ\ӖS TY^xP$i_P`-]{[y @ _ʎ~K\{RĈv R.{;Ng̭=\km٩2.s k4I5;'3(˲쏖E!I)2 ǀQSgFPWt[3Ilح¬ήt.u4vq<%+Lʆמvc\vg}ct7>>9ە[~UUK{ࢃb#w2 1qژ{rO=FO {0q7_ׅz};QKouEww ;.:ͣbcK oo{ϟuX;yH3#=}rG*k'A]c0͊Pul7@9ЂSg9^̟'<Pp D}Ds!X=z4 Dopġw(6 PH+a^GA *1na|!W'bkKYYH_(swF{|" .-0K/,#oGtOkzCf#D_o9}C]MgQJ( z\֞^`u\=@Z]`}a!4`)`b]KM@0^RATUčUUaY!_"2")vBV' 'Ύ0b  & "$b",Ǝ-r)b/U va*jb"->q#ybaZ.^J!]5Ҟ0Zba1z2#~cK:>_46^+,>  @az!5VAX&BD "CN$XdI:QTn`B6ƚH.CR&~8E`@fDiPLS%BNb=.Y2d۽! %:f@Q$RS8-ZT:=d-Hd\a@QbQb6 6%R0dAeeCT` ^[J %#%$PEfl%Q6^eNJ!D2[UZa?ZT%4fcf]|cndFf\<>f1vN &]9.i\vj&fa vfszQ %jfWjcgAnrz$[ޤm&y &IFyoatjgQfDdk*b+sF'Zzfo%{{|fg&e$x:e&I& o$r(9g|hWv'rJ#Bg6rfT^( h9Vng|Fhkhj@*khGVh>="c(eVjdҧ|ZiO.)tgẻEMN|'>A&G)mZ*Yi[*ޛqf)a)/IFR")B飤&P'w&Q)B6Nz(3"j4ꨞ__b&*iZRu> %]%QT~b(%(f Ʃwcee*m isrv.h>^i&6}+Zff`ꪹ$k *+piR"rLkM(knR>)a\hDf^ilhշ.+P8-yOjE %Ǻi|'VeJ]<,<#f %l(mӽg&-R쫅>Β^chV!li*F{i{})2%^l9Yȉmmm njƆ-Rĥ0]-䪭NnnͭmBiݚl.֚۶~-i>@2+Yl'.V..mĒ+-ׂb:/Ӓ]nR/bjq/mZZ:ʺnmb+2B' ά80`*0*-zᶬy/X& WNP p pp0p p#qS+q#1;qKC['qc[ [qquSqOqq S !#r"!+r#;# #C$Sr%%cr&k~zrS'%r)).*r+&C2"βEղ%.2Xr0 32,c,kBY2r23#K12fN5Tl3w| 502gs1sՔ3dz9CX'Cshs>L=/80@|ePtV|A@8$"DdRd6OhT:VWl &n@ CCi$~\7!@:2C3B.F&>)?GCMG3;REI9A"ɻD;ɣĵ6O0PB 5PDUtQFGH#/'RLk.SN;4M?uTRTTSTU[u5FV_ucV\'5W^{-pW_>`5EvYfSYh- f  Bmp &pp7y}t @Y@8(@ 4xXQ@P=&G!^["6Xdy@]b3Nfo䈅Y!V]Om:^WuW#O:F0>#k![l"Pm=:pd7F{dv6^GQ1Cܻ4ަ#jpWl&!*| Б(t=]X!Xh?Op39zc~]eQzyh~ ?] lF}=Z>v98 (w;j;Z s Ab~= LC.TgO܄v?jh8:5pj^ hn(DFЃ=/}bQ">5L a.@l"@3A/.x(>±1BTи;ұ;ܬGLrD"8%,ճ 5Bmk JZ]ad^SJp#$K-|̔ ?-bd-2.d(<ML~e"25‘k{$3IRRSM@/8[39.HEqaK[—ɷ S옦fhAk 5Gʠ c$,FhEmLfThG=Q"T#%iIMzRT+eiK]RT3iMmzӘ;PKAǺHHPK**A!OEBPS/img/chap7_hrcreatetable.gifGIF87a9%:H V)g亼tvr3fVWGGe88eƽݶf]jij5uff4)H{)**Uب3 -oj6zglz`zP.\kYejM ɹwi7T6iKY,' 8uۍhYHw[g̚c/ ^4nYfZzƘͧm˽Nj^Ɣ҉qXYdrmKl;4g[[XRK+444QrNlb3CXD=)Ցީ͸wuyyD8Ј`f.xyy7yFDWVwFЦo}TN V(u l̔ Xcf6W5|;w=uBtHTyXY,I(|̇NkXtdN4 g,&1"&v|uv,[*[@KC'iyDkK;131̷|pYqkWTTMGa6hCU6%tQnfRdmkh _gRvpLJO4 p|dUs4,ZNï`   َwwq9I * ӧ% DD/d4sXmf)[Ԏ-i3v4EԨڬvЄq\hX՜4%>4ԘXQT\;3$,9@H*<Ç#JHŋ3jȱǏ CIɓ(S\ɲ%K aI`@ P4h(CH*]ʴӧPJJեs^-3gs$’NO^ͺWc˞M[Nzp"$߿7"ȹ 4@ڪP&d8|0ˑC3P[ ;*~U /g 7(Hw=^MW.usL^+|өW7nL; @q >HyP<xaWՅfn:p%Y딥ΉfeZ $a+օ [#:(0 @cFEΒL6PF)TJBzTSn@\)OzYb&lp)tix|矀*'Ρ"SO"Ph1@t駛nCdP*무j뭸뮼+k&6ִؑʺ^@j@nmjk.Z٪.랛.K醛{+0Zۮ׋p2pfwKj l(,0,2l8<\#tmH'L7ӴΜjͭ~`t N u$0+ѪqL7(q ,(d|"̬T0 t>C|>ULAaTqEzjudj{!<OЫ7 42$@3 #=Nq㏯ q_2I݀j`T<R#Y&0 Ȁ7'* @ (U` ?@ NX@ \yX849m:5rM+j6ZኂwRhb0 X ILC V1 gL#2ax|X2 \ZH<:򑐌$'IJCa@"7C6 sE(F *WVrT&Y(2^AN 0IbL2Wҗ|*_IjZ̦6nz 8)Z9r@!4 &Vu8ZP iH ūU M50e} @Ti@ P5QY?Ѐ` Eql`tEMdFƦԨ$DqS@*p HA Vԥ6LMԪJ3f3Ӟ4C-j$Ѐ hMϚip\J׺ڕD9_WW&C*shT2H:V$Y0Oͬf7z -fAMugiWJ lgK3Wۤ pKb8ǩt])Lkjv[z Z32 md+*SP4$V. J Ts 4TxgJȅW*T\գ- G\q 67\@3 , ZM(vؐժ 81?sc9 -,0~;9XB @<  [ YLv2' edd'(Ё?Z/Y`nk:G ^ ؿX8yX50ak y+PVʮl HLbʲ QcWD6k`dxLuy^9 /e,0?_MFt@gW:׻NZQX}Y1?jY2j[ڥmpn{rڢsmHO[HwO$sNc*[ioh74m; #جfyRFϸ{ܸ*MF3W[l֩h` jr&pU77ʗ~4m߼LԧN[Xz!]OOo%rhaW`!xvPC$xw ~@dOx?|4|ϴwO:5tyoJs@"1nhm(ÂP43@>k@lzoz;4NXyDokՆnxiՀ 4JGvȆpc4H(xGb P~vvdb3<3A2Kw8X*8v%h{i?'4Wxbp pk`zhǁguʸHp8+h{pfzuCE3Iǘr8X4(+шN+i)hH4S7f pnd c0 fHWrhVw ِyN0WNM#JБ)?H~!Y&ylvM3Gf} DN//pszuȀWgt7#NPyu*h+ĈQY} )[`{%?MI4S PHpoig AU &Cb8io{8uLyb٘C"{gYi)sI~ Y+~$~r)~Y!(H{JPqDKvo'SaoztY YS9șYHUyYEaCuayWD*S* @uD gfqSq7g e|wQ eMbQRIYsCol8 cbJdeG /vb~d*RƇ7gEڦw)00`: , 'ou*hG3"Z_c44X<䘣ŠY^4#6pnGs甬VIc(Jgu 3ڒډܹ?0@8rٮ(VʖP.2fsPɮea_dff&+`pD_P8[|jy 'yHkۤ+"<ž醮Ye`gCh``okVzip*@%IʹLɩˏ J#?Vټڜ2 pelZ[7;p̐|MOCVI2|lM4e4@ 4;Jr]MŕȘ}"}MM4[&[|A4χ8\ #$\үtW@},ԮDV`DPR=T]V}XZ\^`b=d]f}hjSs*!"xeM"Jy={}wJsNOV؎C;.c]ٖ}ٜ٘ٚ|p-$xUڦm[ZZ-ڧۦ=!( +nA P2Y]}ȝʽHHMIgIh-}2,2ݿbhر"ł|l*/ZƂp}+Vz݋=ߡi)m">^~ ">$^&~(*,.02>4N $U"(<>@B>D^F~HJLN'A5 p$8As?T1!d!Lq 1 b.hP$>n \a1"d"(*Ls"7!#5PAB$EQ@GH0H&1r!P Ppp&fʁN&nɾͮaƎqQ1 h&~.!@./( 0"HS"$2r"p#p5@p#7Q8=29qCqLNPR?T_VXZ\^`b?d_fh/Cr;15pO$Ft_vRݰW0.M߼0fo&q=ho+j/+͇pGo\PoIz_*/P/ Q+Djp+G"` }+ ``*+?W@ @ @Ƣ/2wοˇ4K^CQ,z+1X|DpF 6`)VPÇ| *ȸJ(̀yV6 X K 0X%S,<&DŠJ͡&pDt=e40HH! G(BJۢT<42jɥKN$K1\`2#31d2ۄ3N 2xG-ROr2ۼ#$PCE?V#}*.2h`X/(lHȮ9T`, 0Ƞ j$oPxWcUar`&5\ ZI02~r#Zm[owp%7Z:H8lJ)MD祷^{1X ho_*LH$gI&4CK8m +)c7c?9dG&dO>TWfe_9fgnGMpG; NBBF&QvP"f:i 9rQ44BVj8> (rnͪ+(G?юT&iGucғԥ"JI)~LE$QSBQPJQt:hRT,gWzN3bҪ#:)2۸!kp6Ѐ 2H=Z:WծwkCVY Pq@0C, eynEJNS (IU7M\OThDIJl_˵4*K[ݖtlp;\v1}>'1D.q sJWnv]ոcfUIF]Ԥԫ =9]kPjZ].um#Za:K}20olŭnVRK"t/<ݶ" -w$3byR/q]3 cT[dTbJ{`3 W ÐҰ=|a1re؊Ὑ3u+Լf6U_!db2Ծ6U~&0Q A $ku_vnqUyލ=lV7 ]NԜVf>v7㗽 fπ)/, \n@:ڦD?x)ߵJG|x7|%?yW|5yw `gD|w'76,`O0:1߈2+{?|8qqsPƽ=/;@ YHBPi I;)@ldۓEot#"2ZKv zV~lqluZ?@\?@@a^ZY10X@W#$*jݐEA<:ua{%|MMHpȩ?i  ^ZŸ@Q8ZBՒC㹜25 !>4(%h;*"40B!ԥ@LiBJSЄR8X )8t2LĹEDD1/#:bs#*PpL!l-.#\];*E82 \ 1Q`+  ؊W^mFc/ST>MZs|C˂vLH E);-%(cD!!ڌR jd 0䐰ƈȉo FQ:b,ƶȏɐIH䃽;AKB855d-9:r$ )ȤTʥI'H;ؗ}Xܯ뒭L썝DE ʳʱt2[dʶ5KvKE {|əLNMlJ}T8TdLl^@3dLbtLǩ`#!;x!;: 5٤}Q r37x5`6+4@*,X+٬XM͂Sc8؂-'JDϷ4τLLEē8p7O7$x0JJ4Jpd̏ꔽ:B+7к4tPл ,p3/B{GDÞ<|D@C  R(QK=+: &uҦR(RPEBQ)hQ J{EӢz20D&}6uSxҔ ڳ=P 7?U8953 KCv/ݯ]Dt'6LԩlOT4Rܐ% UR3MUU &ABZsIq$ y N Ҟ5ڐEZ٦uڧڨکڛ ڵY۰];ڕP@۸[YMz1 ڽ۾ۿܨ=%5EUe}ܞZ\ܲ\xI[([,/[O ]B[э2ʒν%2 ݬڥ]p]E]. M@ uA\^ r8r0_r؀ `eu&6FVfv`M>_- 0 (ra6FVfv !&"s@+8FbXnb   +h001&263F4V5f6vrPxWXs8s <&uXu@lP9;=?d P _> KLdb+G6a= p70+>z>U(r@X[PteNf_Ze\63h``Px(jfl]_\~sFtVufv6a;cE?V{F&x8zguP{nGVdL܂NP6?րЊ@d`p.apnip`YƇfUljFaK0t铖r@eNf.p66Yn^6jfi_Nnj0jov6aVFiffgrhfjiwh>Nc?dBVczuhu A-LXhO~*᱂Z 2` >_NPma(>XaզHm&_.mVvnmfmm~>fvaזn@nvXmݦN>ovo'7GWgwpW?&` lupW9xhNf9GleӞ !'"7#G$Wr6@s&'r8'?Gqh./.0'2731] ΢]}مҐ])l9 7? 6>:oA47UsU? Mst;,M,*s bHwAtϰ^]PGuN$P?YDGs<;\I]^F[`a'vbGdWe7dgh/Pkkvp+(g(nȃ=HRϘf Filf|Fiw f fPY`&lb a)h!T I* j|՜H=ءpTQTBy1y)P P?^vm{_/3Ps.Ha 507RU%h ْh8xHp p[5pXHbao/x깂ؠ+Hhh lL0 8?U( 4lYU/ tϘ38 }0cܕh0ehLU7 gF x(\H: +Ȭi6O !h X@@ .`P!#b k6n@Đ"#z 2W jYFY$Jc+] zsf͠Bf؂J2m)ԨRRZʬY5DT*Ӣ!,ڴjײm-ڑ `!'LoAZI%ĊP F0[ 4*ٜ9?8## =K!2吇 9vS*aӆmQFo‰o9ҧSwNeW h).ÕK.^׳o=ӯo~T \4U]yw * : J(р5@ h!z!!8"%j)%bb-8(x#92`=#A 9$Ey$I*$M:$KUZIYp%d@9&bB@iV9PaV AV`>yVT|50! t@dp(Jf(cqx*Q& x':+:'֡Q:+z+& HFDeHNgBp ^"ubW A%%~&_Dn@{nt}B@uPPPhyfhV i02F6- t7\/j r)` *@ҋ,P'[r+,&l529#*ḵ jV0FO٫+QK=5U)b]eŮnj,xxe2$H+D]q_9F>ȊCKE{70#+2i@00# 34L7xOK!CB>@O<#/KA į7zN#j5?>A [J+ ]@T}'3KB4b C 2eb\mly{Fb29 r- pDlDӫ PI@ c(Ұ6!s8ez)a,X!F<"O0tD 3H-r^"E갌f<#Ө5n|#(9ұv#hͤnp'P[c @^7ga1 0$HR$&3y>2+n#'Q4<+h2AH&H5v+H5p05%/} LaN4,F1; T&L6I@h%:%tJމ#װR>CM4фC `7E  `uG@RcZrGD(!H9z6xU2W OEBOi&"ב\ЈXfBӐbQUO{T8:eLC*FDȦɆ&8aJpTU^dbh$V h@#Q),#!Fp`!$sTACn@` 0XVB|@#a+h [x]y[r[(Ё?p!^7VoޫZ 'ఆ]FjVvpmE`q5$^%.snHk\CI춷 M, <&S,]Z$"1Zhb]0 d  $IַCH-_BW1KOM4~WaG Fxlg<), z+[#8+=CMKǜ4C-XT(ugymԚ堏b-YӺֶ5s]׾u^jkN@e3 ]-iSRj+Ҵt@N::g{^08 ӢenKFt N.SocmGkpɀK򱯕C'G??Ѣy !0}Bޣ_x<ӕN!6d]Y_IZhVP@\Jh4K) :U!֡!^RaVl[}>a^AQLF;[ND!5HauNB`)r`)"+Z!щTaZ^"3! `$X͍% g,`R=d@hpR({Z(}RgodlƬ6 ʢ ¤L'x1& m)dB ,6mCz^%ݬRjb,.FN.V^.fv2I:Ūj[q*r&H,gս.ƮS`Dznņ^ގGv*xy…YaکnԶU.F/.&*d6**xP@\2,\V J/֯ˑDIʨPB-Ԃ1^޺hAdBVą/wKײ8@T%dBp 0)0*gi0lװ pSpGk )2iʤ PirܯHݡtZHHLTg[Ҏfo+0&1&B$__2lڦnd#ݧ=ˠ.E14չ] g"S^#2/09EYH0D-BVdA[%f1y$ֆB2 -%0'/q4Dm EA𥺪o-=)ۂGD HW6^1\"ż\@S=UR&D93R䠭֦@sVIL1 v zҴ)/ڠ0BѢ@ W/A f)J*3B[|LmOD1@16#*圗8\@{Ɨ:e^j*zw5|p./`={>pmY?t@[#E5WWgŤF,Pڤ[\[{u%}4Xio+?xģ"l'i(dO.1gQOUKK$LRFd0$Yh%ٝA/+=JVP#0B#,Bj6ܵsidYuY/r۩'BDT%%o2qw&HgZ4L@!tw{7YĤ+y;e3^ zlq_^|+|OPud;b?v d6h_oW!/87xsP!j9PpK(SD8;Kl[\dVdFF腇UYUeVA@pBPt8G77E.pNkldJ423ӗ}~-J`THLvԹktK99}P90_Kzot`A@35 vs8ZySC<|Ë= %InL;{s=s<у7e\*j4@(X PA&TaC 2h0 fԸcGA9dI'QTeK#1J8f͉ `AQ/&u(EOF:jUWffך8u ThF% yxmH;n]wmk`wYP +TƒGW`S29Q(w^񎗼+Л^Wu{_: ozKrw`6p/ v!a O1a oAb%6Qb-&cϘ5qc=qc!A&2|&YM* c'OU򕱜e"CY].\0Oyaq{,e](onlg676fh%CYpY]źϊs -g>ɑlgWИv45i>(sfQԓN4/+@eU3}jREsn3]׸륯fL vLDsQ+:~jUZ}1GmH{ۿv5 -nǎۮ>6j<5s-u6pfYMfx#9Gn @o@r%7Qr-wasϜ5qs=ρt 4~rpӡuOUձuo]ve7ўvmw/}pQ}Kx7x/w!yO1yoAO/~zӯ' 0 {ӏOq{|7|/w}Oշq@ 0`=џ~wϟ?q"XAPAJop Pno4pq` TtV,fb`0epimq0O|p!aIAJ}PE  ڡ i 1@亯Op,@J,@0paPH0 p !"PPT P@ pj CV`I( 8 t`Ѐ T| UʁrOWeqΠ AahqQO1q@P Po !2b 4˰4'ذ((> ro@!΀A\1 L"@Ёc1Ѡ qhQ$2"R`$ӁRˡ@&OoH2!8r(q-#q/!)RSr%MO##iqLq&7'G',2-`-pQ ˡ-RR`.n@!`0s t" KᏚ!P&7!$*S"U.13MJR%/332 QfRA5ہtt2N{MS7yhq8S39qNT'LX V3 ZR"64s7:r>>3R2.A?I@a/ٱ.q00 0CoA1aah=N*)448/;M` jrDq={`RE >2Goq3K2Ys6s`t3Ml)m4RBJ3EaR" @=IEuFJ>4Nr!PDNT `OT1oq0 @+E6aJ `lO; BVqKs ހ6 HM ڴZSN/7MrŒԁRT{bVk !GG VST5@VVIq"isT*UEVsNUR5pL4!YZkMu^^^5_u___6`v` `U N<@aAaB.4`1$Q76RȀS `u6euTUfmhFovgyg}g6hvh P.'S' 6ii6b-!0Q!r1CT6mSmmWmvnnnv`͡1oW䲡ao7qp W t r%7rsr-WTv1sA7tEwtItMtQW^UTSplA'bu?Nfvq7wuwwyw}w7xwxux7ywyyy序z&zz7{w{{]7|w|ɷ|||w}ٷ}}7~J}~~7j dئ*ބlX+km18MmMVMӐ-n-ؼ+ˍ"XMDXm̓K؁]غT85XwіGbz؉I8Xfl߮ضXˁ8ٸ,M>޸ێ-Vxބm\88 8Y:؎x988l8DYwxo X[uL̕q9-nt}9g~9Ř9y9y9Y~ɹ9yM{y99|; 2Ry.FIe @@dC.D. ("z(ڢ5mlP Pz`^a(`jXJy Z!@& (( b`phaaVZAk Ǧ!Tٟ5BY"\PI av tTGo@& 'B8.8 8` ;)`a4 afa f!!0ۥ4`XLRe :Oj ֠⧃z ḑavۿ(!N a4zƞ;[Ȧ@ à!ְ hDZB:zt|wfx(& ` j [("&oaoa! A]ꥇHdl ۿ(F`xZ|}נ[ږܿhBʱjlʫa \a˻|[ '!04@I1ܺ M@v v @1hxf|0]Aܥ#(G:Naę"!`l|Frܿ ]ȉ5: k +2aĻoU]fY\۷]ۙ@ؽA2zH !& 7\8Nxҁ X`ҭ*L})3"J=,!sp`"d<(P+ F` n5@ݷ1ځ*{ 2™Pa ۹]a>>{޻q! S2)Y&k^-F`['3>(!0B>@KR!?o @@@`r. >[밇R(A$al_,ލ~! 4C=$KDD(_m+ 8 8|8`‰+N|--6`PcǑɨge4'4p 81 `iZ|fT0_4ۼq5PqㆊQ34Zp`فn;ċ?>Bb2e;=sG<ܻ{>5kp }zۻ۱:dɔۿ?/ H t96v-`>aNؠ|@na~b"Hb&b*b.c2Hc6ވc:@BIdFdJ.dN> eRNIeV^eZne^~ fbI?N&d`ɦa}fa x9'j g~ hJhx.:Xe> iNڤdLYJ`ԀHcayCCXh5@EM! \lJ]f((x g&xrhnmrH&nn)*I;F<jYrrl*F;kW,y1Cމ2fh` ,fA+B((H }.2Ӽ2 tB ANttBI#=/ $E$p>DS|eP:4ve/]>̶L̞Lflq?1f7 )|2,Dpg?t{ګA&h)R $0kytn/蘏N祟8?8HN9$ #nصC Gq\6alKC,3-cD ,Y)S6iPw*^79L`.  !]p Y.o-! oC)!a(DHBBbw9\'6=r(m`H+EERTp^d)P@ñ$}mH*TK@w>o~zDŽ/8s0@&&*nH[ ,o .шb]%Np 2 4-[\0U*xʖRMlf$+hJSSKcf,>y87mаW:ld@E0A`@QG@çVv":ёd ,JBnt¸Yd>!S=ܠ H⇘peܐҘ.@iJmt9iMkS4D-jLRӘ!Ji8S pTyE2qBʔ7  HFE oȆ<Z :酠sd' 54Ā$C2` >@v e@X% HaiOԪv]k__XycPv~;0N* Uq [ >r#w j|}q;U-9.jzv}K(w G?QcS{Dw KX=*jx/? x$.G ,<42Xox갏 yD.$+yLn%0'4 j'2O8B42.NY-ό4?Q׌5Yq< @ :i=W7Sh.f r`ҔI P` rLoz &~D'` KxZTjW'4`yYv[f@<3'RomGL[{"`7 aL:o_ .7"x˻8Ǧ <%a4`Q#淿.OֈH!툿%u*"PYրb3E e<3)͢ZEYh@ps!6E&`t ]Lw:EHyW!Um4r{&8nVH!x;Zlwfh<  $PA`3aq8C@KrxF1mHq>"U|N[M^ʎn5d YC#3 Id=nl? 4$Znj5c)\4Q~%_󉌏' dտ~wVK :YO˟7N%4x\ۏhQxT?qsUg?kH Vr P UsGPo/zi"z;@TBĔ~# p <:{{F   Ka`IWu[uF1g˗r'Qv 0`|G@ ~Ѕ_c(mAku y緂Qw?O~>ԇ88Hqh iPXG'uoX>*J(ㇺꇗ꫿:*jxHc 0osGPsDcRP;ZRAҪຨ٫#p!wAn`"v8T Oa*RL:Qխ[j~4I몡9就O[[s^ʩUz!O#PXIAzDRɣ;$L1Ҫ ˳=ۡpZVÓG{0;K˴C SrH+ʥQjWY[˵]_ ARqmSjS Q*qkwy{'bgCr^{Ap |÷p;r2~[+rRe:t ETe+ +KṐ@KeR?ja@0PHD/{(wkk鋾쫾KK뛪+++ q!3t7;{ʼ >( |†Aƨ:1[\,UkƕlɂqOs^8ih{S*t/L8|…AǸL˴»,ܪĻj L ™,t<A) U,ʖ;MxΗ[_F|qanB<ИLR]|mjv@/ !-S{ZЮЏ={g1hHq ifї<=?%'ʧ;npLzqQS-jA]ο []&BMDF֬`ap 0j,hluY=+c{ǁdž ȿՏ`=b]4̉,I lf,/i յʮj~i\Y|˿ZÉݾؐ-G+AUeöo.gvMڢi )~Ӏ-!k̉䝳 Íؾ=ݹ -ϥ ј= TvavtAڨY$U,۲8Τ Nᆊ5,;<-lRqܳ:]#\2#N6RqlG0RC>R;9K~;N=NjϦ0J<<3\* >$enT+IƄaXER 2yHL\C cgNιi=^Лpr= c{Zs|̋<ɜ+k4Lk8,ņXlnԃ1h^ U.0.JF韮l%Pෛ,=걮~Pڗq {I-.7[4鞳޵ Qn˱|.vz+20_j.>}ɨnR 3=OüMŒD!O+M)Q= fs]IM-Q|c>Z\ S.b3]i{(k[o&POO=*z!|o~?A++Jϡ;J=wuoTp!0C`oJOlNo iֽ.ecpCc@@Zo շO/R#jMnjƞ;J )}` 8PA .d%J|`>>QF 6kD~pÓ D0•/+ΤY͚ dfBA%ZQI.eSQN-Yf}pSլ A$h!Պ8ظFMvę`_ uu&/fcȑ%2V9|lk9iy_AGAIw0f`>p7쨠vY|YY%EeW^9Ok'8P >^.; x@H1OLҺ!*ܒ-xu3A,`< r` ] ^XF7-fB|Ut/$b \ ':*Oj{(Ԋ\Ԣ8)Q)ĎxF4N&XYJf؀>yV5  (],b:_7%(Ґ<HHnG khCcUڨ~`Q\"8Qoc(+82Sָ7n{ #xQB> 0hAM G(VZH9&)JR3"g9i1)2*`''0P0²Sg?OT%hA zP&T ehCPbx9oTGX&D779LT#%iIMzRT+eiK]RԤ|D5T8% 9vǣZAB(S&UKejSTF4-jlˣzzB݊C`TUkek[VfURM&l< h +n@UelcXFX1ɍ]wչ*Ne@pxM(dOa;Vn@YV-nR[5K!cc`[LDMoZ*t+vPJrJ5VfƫZհ%m{^WػڰRh @&:Gk. 3oUCk/ X#{{bXż ]lL8P@< qpt0z#wM1RPedAS,g52r@`cdP.V8`(n60< YV~.C2i+sg@0. 8 Tt-}iLyVۀF8'DѲQTZիfu]jXZֳ^5wS 8Mz('hmsL'[&x)BQ{3"`{0MXP3O_V Bn4 7ln,eyn:M39i;<ۡЄ&TD!|r5\^1r̸᭐ o}q` K6d,9BP3Ѐ!x>O<֎{!7r:)xYRd oȆ5=qok>!P&aX=[3|:%N/Ĝ}'$v( Hا|so&/ 8,V@;X>@MzGƶ?o p<17X辈?pÛ##֪SWQHF031XK0B%ٰ;$PBh=~=f_;9؃i*?Đ4`>xL@LBz8݉+99FG؋ ྰ\ XciC `C8̊K93<"h DYD C=t@#0DJ+->Hs3lA OY4YG LG˝0b%C/S- &ʬ :Q…Qx(D\H8 \!E2^l. ZآSNJ8 7L47tyCÆHz;NCQFDaUI ~L C#/LA[8KC#4NDKhŔT1=3̯20Bp+>T%0 FcA,cFS(BHFk\H4I;ЄT IxGUAȁ">"(8 vTb.b/ %U0-5 Zb7~c chc5c<㓕p*Z+dC>dDNdE^dFndUc[6 6n:dO>HV v\] ;Ѝݽ:BLd[)_IF0ZQ*h ȀkL;FL\l d\fm6PVX``BS@NZfuTuˋb ;3u| ~F  m.he1ePӈ7`)E,0_GD$x+al?hl]Il\\iEHA9VhŘ9@vEiI o߉gwi]~>:j̖^jt\|KNkn߬8y*'c*ik-껦 dL,fnn+#9eUVeTnw~A,>N 2e>m"fRRb|B({~NݮjFm ^m6 RmueflL&>n6V֖=mhs~WLAnfڹ&wo9N{o{k_p &@opqp pdflOqd8l(؂-' j*Qc43NB嬍㶎-{6ڶf\fഄ*|0h#L8B$`ӫSN;B!{>*LǷϣO~=ܺarx ѣ3at@fDt]EW_u!`t4AhxJ 1@AǞ'Mu6_HaWA3CсPWI Ƞ%t nX>z!wXl+cJٌ֢-~Y$ 5xhDb *V S&J"BZa% $PDN8!2䥍ڪ/%o`i:p+y竰+f]*cV%DNR[-ejY7~>©:jk~i;GoE& M[nUH4ڧP; &Es1pj0pON7 Lh/#!Tw~|^M?tB%Jbt %U|3uv,[ Lf0nXʫPBQuRxd8;ase͵{SLFW).죵y[i.nS^9xU Κ;壓 9VJ@Ѻ뤡݃ jn :H~9 qϬ ] 5ev(n߃3[i$ZWaBiUA?U=~tڻEqvP}v!ln~>*3V: *Β3QKS%TR ˅1!?6Qp[Xي񑫁=\"I2 :l"x'>.WqQ2!$ Bbh32=Ph@B* m֗G?1FB,TH@F $S]K>0a;JOL GGR,}GR^ N|Z$&k9=MN5FGS:rW#a$ E5&Ef_-y;\jтn/kSOvҖ\a3Y9h*vt !98tr 9T1ZE0 1A= Ptu!iP2֔Q9wCe1}& ;82ri(Gkof#޷ &,x*QuC @>ѦRNu[> Bl`#DU1@H}RJ[h:շ> !B BBnK dyBe5+c;&We*A l@;8(϶Y) NӦ@+]@U6Yz6haWEbk\X =.sѓ6,E&V.w7/yk7]/mZD_#} oq80 C7 ^0C8n/'bw xȆ|8n|/l #@0/?L (<8:1{c . ^KlVCX_+Ŀsq@/?3l3Cf#I1 ;PC`*;Ų@9"2F,`lKc:Ӛ޴(> 73qgя/ r84y (ˎu=Js:658ﭛgC;Ҟlk6o٧p VuL,l dn4uhs7~Y7 n#< _8PpncrO!t6x/[E+<:y7玓#ыnO9ӛW[1 իnc=Z:׻=a}n=i:#+p;nwYL:>< o#>_<C>򑿔+oc><;σ>Koӣ>=zѿogx>=-oC~e |W5zC:ga aFaq b`6!#"ja%Zb"$U&a!⩡$(): B)2"*~Y&!"-! %c1c!c-# b%6߭\0&c5Z5^X4b#icu#)>~Q69c::N@<>c??d@ @dAA"dB*B2dC:CBdDJDRBFrdGzGdHHdIIdJJdKKdLLdMMdNNdON;PKSmvlPK**A$OEBPS/img/chap5_err_handling_003.gifI/GIF87a\,.4\^tdf|TRd ,.<\ZlLN\LJ\lj46DDBTtv<:LlnTVl$",̴̤DFT $ LRd$"$LNd<>LTVd42<,*4tr$&,lrdbt|zdb|DBL촺伾TZl|~ln<:D  $$&44Jd|~|䌎Դtvt̼TRTdbd̔LJL\^\<>YlȠC\PÐRw@瀂Fd^3M1SgXS7oE lasUns@%1&ׯRGä<@~ ^}L5D oo<CJA z}K> @H\ T!&J TIP 'MD*|< )b0B%M-PBF(lDJ!X9"@BiRhM@HّI.QNygnaW]IVP BS$z"c&H8 $e*3|@ "(p_e%Ն)0%9eAs J3 tl 6Ts ԂT+hIIbaF[Т 4K@:7A YAf kз4@ j-۰m!AkYኒ  M h-`-3T ,%<1%}L11I>DtI.ĴXA+0P*8@?#LДnի$,MQ|>-Tï黫 *1&U1Cl` `'(9+B j B>I38F :`p9Os5L tqpR=5Ls>0;λaN6@KRzNqN@05+v׻N1D4$H` B(6e1i `  <p4P 4I0$ hA$CNB$$ B$E4uClH@.`KAz rĒ@b:E%A0FAx@p6 z"t#FJ2W}d BHV: @a 0Lo <],FOl< H ؔ]ΉIFeI V-hjeK٨Y. <:/m"<]:o5M\ PW `gM@@Yq go봦F3#EI$9&@ح<<4!&#M%Y*ǩI)Eґ'R5d MfFY곗RPMT km:.y(xNj@D`4fPn>92ti+&"gwN"u=BtA8FtxJvENQMR@Q8V82UxZ /;0gF5C!d_9Kaa8@!0q%)c)g[8[g[uMBSWXHuHTsXub HIX9H@BQ,A?h ȊcW:8V)AV0GrRaS:8-+0&Pb&s@FJ:20#3t:sHpX%Cب(hȌXlYfҋXCJX:)170.rDfC"6#-HQטX< >Y)369'&؅yY%(HP:S/7Ӊp&k2PX\I'0f8&QW %p0]gpX:2uk|)[rIaP؈JƖ1I!Sz4pH8 & 9?$Adi'(2<:r %0Hdcn8-&T *o%1S ĝsy j F! J^Z s陟($ H"jJA'V X" 3r IiXtY 0E!*@ nc30(DSjV:OjT i\c&d*e:gZ9*-0ol: Drur{YZ0Z~uJ&&0[ڥljp^z8SJQɤo"DRA 4ʦ+E[79z>AHʬa^JJ} &xZ:5Ak59" J9ZBfSj+Ȝ)-։F5ٰ&B_T ڧKzHYpőwʱڦ!ˬ#;%;Sٮ<ẬHu7+<ةʳA 22iH%I 5;kR9xb !L "JQV)!H:C맅j˶n3Mhz2|001{@5mkJqSq6! *[isk$H1JAD]\% zaeQkm0&PZF/0:T 뼖kًjh(-"!˨qm:܋D*^Bj:Yi { ՙ-";E59$kp3Xaͫ#(1Cpp8-T)<*,,췦wY'0,4LDK<|?7,ĉj'H!uz_f+\"w3\kLp:7 j",MRK$@aMZnbyȢCbgIG!qx!w̳ak<7chKAߑW M ̈l. `H8P079z1Y@Y0pĘ}) ̚%aiY*9y|}\*ʢ.p,H$J9-zÞ= |ɥ̴N2hG=}!Ywrcݺ'O!MҁwU$.ݧ5#A-'HܺH%{ʺ{ D~Q+\h@[~]mo,@)xQ n"t/ZCֈ~^>ŸSǘ[m+A٠hڙnF 'MGRqhsX+ qEy x tq!(W,&/y͊c&$Ôx -"x;z{LjλY٘YxԉߞɛJ$_-!uJ~> 7".siv)Ö ^SXoI:-js*,!z U +zjCZvJ$*I"0S£lK%ػ)ڤCJgg v ^?k\#,50̲)T]'Q­qLoBšAbrJ8`L؁+^RhM??"+[hdڦsl0MemL nUU .-("/uVI|;VhDL~|N<:țB„-ts 0 @eDO=<:'pth8>/t}T\U1M Rq}mkrooq?sZey{/|0Dށi1_MA kt#>? !oqu$6BmHcȯ}O~ϏO2rݟӊO?O/Oo/_@@ DPB >Q"ATDqFbQH AD2I-'tSL-XSG;}SCc5TiRW.:iTDZsjV[~)Vaz5jڙhٚ\VܸR֥m^{n 0Jvɑ-Lʛ7v zhϥf>X`իyBveұmvM ax0CkLOHbDWw+ @2@!!?F T>fX߂k(*0( ,"A8!:T@@tm E< R*dž+GAsE!0B ]*#H'D1"A`B0="R'!כpǂ6 2"p2>xR,;/ SCPs!ѕ"Ɂt3,Ԭ*((n $hCMPHB&Fb QDf&  "@  &Ah[` eYz+Tc3!(v( A %L` ap-W*`Ϲx%qf1]mXbu^ dPAm&\IxZk bB @lqsZou8a=OoEt^IKPR5aKa6 z*R0p  p0Ax; Aq&`'Xdr `p  ;<3^)LEDP fsAJ p&&p%u >o _>>!~ QWk0H7o 2NsH@} fPF-5@L $ Y$/ eYd#Ha 'HUp:m^)UVQ94Cw*H E4VQ (1s\a ƒ ;.'q@.ahATbm%9GIӤpH** @<8^YJP 4@,<#laC4!Ʋa8M dW ٕv1$.0!a%"t*O۲-tf"wQ) ti[9#@Mp>ɡ 4yFV9b/8 m6ԤwgG36ݤEd|I=,g_OgFs @܀NvlN6-#&TuZC-|DH@DRN\jlj d/r=|4NDW+3fj:inb;Rժ@IPk&%X2գx@AzٲncH%8فR;JmLNU2 8kZrPOA~VEtm jN7}*ZMq+=@4FSП+,ެ*os(U-*6TSjڧbk7@lw&XAqUwF! r!m$U؈0}% P@.e@3q`v1p .ѺhUr/ u$}RP\ dk*P'g'$tTL&; ^NAԻaW>.rSO0 ֑`Lx^>҃mό'vTU\ Ģh}Q FNЪ%HAx PXZ.+@9;'&ڔb>hH&ݻC+g56Y`j=!dpu*oϼ-ph9m`&6rV9zǻ];$bػa KP,VznˬK]Wݙ`ұ^ln_' jt;!bvʐsnt]~'sbe;wSUڹNyc>k?LC3p7=8C5pGKF5/ CqC4@GH.7 H2tfP$3>XF:IRtI\2$4JDCƔ\ɖ|IW C:$FI3 2CI-BAȃ(-H6 CЃ܂5`EXơI:ȃTÆLï:xǠ,˳LK>0C7$C4 Ţld 4C6DCKB<=(J>@x; `;KԬK7X˶tD1dδK܂J I4ԃCB-pE(XJ8)-X X3ȃ1(@mtH:x EH5@Io:XL5pO-Fυl1TlKDƣ,C4C;H0/1 $149؂90I9X:1(1Q3?|Q\F/\}O+%q4P2|N2@4l?(wM30)<wD،Jm7Ol\u9?QS:ӸCP3=KR70>M_E<D-x::XV;%TC-CG ,S E x r5D)XTV{܂;}x҄DP)T-HJ\q5sChQKM5H#=TOuC5`S5x05;@HS M{G^1רX2-A7XsE-[W}CjV5\ABɐexD 24<1VUWT5@ׁ8G܂3q\ڦ>83@X3ڢ=ڭs4C>׉T?HmA}G -14ىZbm)(6ñQECڝ(|V>ё%O vu)KO ؜7T0XF@mXш 0q݂]T0X -%C=:hNEG2;p5J[= ݂Al$ ܭ4Ip^\kdRu]<%5]0-i}(\3|SL1,35݂4-ι46 XOx\9ٜD}C `::0-肥Ck-d\1j2hZtGe䂌mdʙb-Y(H $4ma V/.a98a]I,H` ZDtcDcoT72D4N5&6J@.CNaB eΜG>cdDNAdC]JC.5dR5d \`MCKFdLfD:F@VDRV[\]^_f]`&b6fV,8effvfe|NZ|kblf_npg8G-ej@DgC`iuV#ey@ugv}f@}gǀ^@&F0fv舖牶V>荖i &i&铞hFfhfh陆g.ܸ&6FVfv꧆ꨖꩦꪶ[&6FVfkh븖빦뺶~&~ĎVDvEȖV`ʶ̮fΖ@A@6ԎgfmֆCئm|a(+*(aH&`pnlA@oAnn\᾵ `$ Y"0@n,im|Vj)P@ 8  p` p Hg;ar# p p'h*-8 hp(h08*()#%T&88v{h!h2?0(Hso[ss1s0MB)0d:)t/v2Zr|.'xp̩AX!J-'8/ G'Z$: Ј\-'aw,[scdP'((#p87uYGaROJgO ؁#A98XWh (?xc0BgG+$bz&vHr`! $uBRf3rV 2-U(&:=%Xb/`hx@x׈`v B#&`zk;yt2&' K mq{Ё)z{cS "U|;?aO%̯ |w,G{x!0x4UYz}qxȿ @򐻧(K}@ +HK_|`X~ а$o7x7s8|TJ1w}t!2A$@P@(p`@ aRd", @0̚LpQ &-͡"QޔTicp C h\a@ "*Z8arkʕ-Sqc9ҭk.޼z/.l0bYXܰ" +^u;xTB+|Xa6 lu Dٵo a JMpe筜ij_ @ &Dp"&p ;v>H=ӯo~c-PdL7T& (Q\P jw!j!z!!*&")"-b$x#Z9#=W|؉>y$I*d `]LJ9%UZyEb%]ze9&ey&i&m&q9'uy'y'} g@;PKpN/I/PK**AOEBPS/img/chap7_loadimg_018.gif;GIF87ae$&TLnT&lnTLJTln$&$JTڬ,e dihlp,tmx|p(Ȥrl:ШtJZجvzxL.OEzn|N~gG) b # S #^VrxE,Z%O[S`"`-Ƶ\# R˔UPӲFL"zT&Q]R] ,q:;21 <` G"pL@DJ,;ȳ Q`Ag N6C2yF T f"r9$ r|S'O>kͻdT(@4ҵ6T%n:6ѮY"mh,S@PdUM@Rd#pڴ'ȯl³^͎ϝᯛ8V, S]YgzC(@&q e7_q4H u9)N޳  P:p!8N9 T~լJon1scۏt߂Ko%Э2V"&n֫p W,JЂ~CEt}<`pO1(ֿoI_~gA('rwyGdf$nvVz\ 2W%he,(\&dD 0 )$Dk/gx|4h w|ddWD s>Ȁ@pBH|et ӡyM8 Ft='ylfQuWo؃?@@7hg]]rHc JcRkV&qE%|HmXgPef"aPZh$k!sl8q(>H~Շ'gkֆO1gҋwxċshn{6u'xa"epghAgKjb z ¨wZ!kȇ xe/x]IEVvb@ayPvbbHV "D܈<`ՏU<%ȉ8#O ~2hOeuD„lܖ{oW()r5Mg >1T їwV)'@R W#*D@*'1FzgIP#zVFiB~Ǘdw PiɖkymFriV$ ay`sp97d1 hf^ !I]'6$'$x?ָ?M 'aR"F`Sn0I|ybÉ{7(0%yeXi2eD 8i P3e)P&~iݩghY8I|nil5hz<h,aeyip&bY|ybnan4Hh z4:`zJm'~bȞFpv`p +# q?UrA'wt8 t=B"0t*' )8`Kr@68xMУ=&A{C:57o^_9zI$8yeyy}@`ylr9ro B2hvuo $R&yxjߵ A}Ǚwmƈ}a!Vƃ|c_&a7w&q?[$٨Ђ@̧sx4VZ%G◫ &JvŨdD!&& iCP"j #@!p9g\$ʫn'8&8:M&`$GxKaeX ک~ذkW3jjˎZfjr4+զci EbG @p$дŒU -m!\ۑ;ڵ`a;If;gl۩m@p;ܩCp;ox@|x 뷂[{H  #ZĸE$r¹u@K`;rZvۑ$պ{4 KYg k{5Vw{+i<꽎 ˽˼z%@DjL+ྼ񫿍˿e[?{8\X|S+'\WG`Db9)̦OOI"C ptUqX<bK~B4QlGlpǎ.lBtil! Lj!_3C(Sc CbOye7Vʰ Ps3=:KY0 i2ŠZyyJ٥45-U=S=L\ 7Z+mB*Rz=:d-ЉFɌ$aH נIoKFmm|0yT { *r(1uJƠ*EBb(!lж D \L `tg<%8ˉ 7틾%pڣ-弍)qLtۡ}GM̒bp]J_,sٻm)6 9M=1#ot1ӴӼ ,٬ۨ(-GØ-˿K4dj (Kכ]+\nvGjbJW#?v>-߬@N-+*_̎-ҙ[r1!O%u!~,.LGK)mFe#p 'CxYNi> jGI@nXCѧ] sXGMl لlь(Wa7CGoPsq{ `k˽V y܏y'=Lb͊ꨞ^*`蛓)P> 9c [*mrݡ.L۞$EdBwŽgGow$ۢI15\ ^FK@^>7.= "EAżx%/n%䗌y9M(6NL. Nvp mԋG*3JK - "ǴJAtajoG o sTL}]JVH!GVu n4MY\ܨOMSXxbN;ooĿXP< ?Z?YOƝokݟ^꯻_?Q #Yh(ۺ/3]x;z'c"2:*'4jTQQ+6r/8,3:^7<.;>?``!b"c $e%fYf'h')j*+i+l,mk-n./m/p0qUJ1r2+3t4u5v6uvw8y6:3;67<=X}v Aq^I!,8"I`qS5&FWv Ij‹%NK.GD8dLO iN0.ؚX(81NQ-5K4(UW7-hӣj%$`bͺzع^ޖɚe{ k2g]XP[/O$d + o;|z@?n+h BJ h 1b6˥ L}w@@@Z Ou+^VGb3 aׁ#8W]CkEW7Vmo=5#4b LYq58ObsΥ@U`|[gBlP@A0@"AUmG"T9@ara@K2%@i8YdBᔺڝ9[7sS!s ܆*HP T5v9ڐh^XW#}*xri' .e\|r6[p9hѩ&q@xq6%Tᨀpuv$4(F`Aa";Wy:|/3XN*Vr'Vm{!:U.v g&l./ P"x*CfU#dX  k鮡|E^#~U,骟IL^ѱy-4Y:GaUWĀ !z 3 r Cy&<{P! c(CVZp sCrc>8~CB}'@iπ=(BЅv|(De щRh%-эRh= ґQ$=Mҕ6Q,}i] әO4)lӝJ<)*!3 `S0q@I SԨ:Ud-> ZUWp*TՒcbM]+Pa9}a(@Ӑ&-,'`"U Ye#`_ 0ԾK,dIhUV:K (@WPgI@uEZUWT@\N,͍lz'dELmTUQ)ȮT"? pٵ`C)+)5}=:sօ*]^*knn4%_Z}E + f S׶VKY)1ĬX@Y*/[ ദ6v*SQs+tp'{Z:u-B"Jzj[l61eDe8ÕT1îIJb$Wr; r7^p ._$u u赒ZhWkk 0<ΨT S1uzQu `=W@?򪚵"6-&+c NU+ZG赠MJw99 }/!X)Ӟ8MwM l,K܊X|o`ũ,JےۡuQGHVz*SB..xK*7Un}]\,8-xhKT(h-x&&[ΕEQ8?:0$9^"鬐SS]ԡ^K:?2c/;Q!n;.ӽv;o;PKqPK**AOEBPS/img/chap7_loadimg_005.gifJGIF87aa$&TLnT&lnTLJTln$&$JTڬ,a dihlp,tmx|(Ȥrl:ШtJZجvzxL.?Ezn|Nw~gbxE) P # S #^VH,Z%OZSP`Gȉ-"V# RԟϡڿF|"y$Q]RT!gyĉ`dѼ ~L9O 0I P$\D4`[ `CĶ`f+<ø%Gb$,Rk8'԰CRD"U?QRVM%P\+N[m>̩V^h_\CJ9X45 HܑwDSI@&gK6\Y}DӀI~4ٯG[bd0<1" ]=)'<*+ZO/DM=IƥMwБTJ) :W~*|%$B`@!XEX8! _g"95lv;/ nFfG"5 0lAIB"", VC. CBtdE喑p㎓@ }" VfY5ҕf edyȤnI25CHR@v.&H&T 5fT{cA*aOGv&Q혒/QF٨ƙ̚"n.uGjJW6,(*!m"Q^ae*Wk(DR .1Y" cּIn6+q#Ɇ'Xn (x&|;nBl,h<Q.M\23Ӝ,)_P̋J! (t,i8<҇Tsϕ#?h'@g{tl 0k:}}7 dz}QPq&?&'~7yh]dBv  $Bg hsW7A3(@68c?Xw<9! ȃ'4AȀPDz=xs7TaH'@wY#f^|(oScY\bq2|WQiRH+ p#~b$f8~(n)thfL8g~#x80Hzg&H!x5W\{bkf3uQgy?{xh(gGgtl¨-hi3d?A xmhM&jn"{p֠%BȎ&fiHxW rٕd 1dxƏ⅏۰|1vv 3ZPƧ]9Q ]AEfLFd Q%<cU&ԢCjw{0)xOeqq$ ؆w?o:ytW0N{mɊ0 r{XWMK3"BXi~3BzIXl-ɒ0țD$GIYI&d!B~ X U#c ڹeh(Z&$&x i ghx *J8`2iRVhVv16m 4'enǟ99v(qRmin+m(zp.;BV9|s"qqКi$@ &'Yr@tLpI4DѦsa2@x'kyxz׉JZgzi qo 2Ӵwp*$kcggx]hz,ɡRVojПt |.wr1WJ9rg?*5ge%f1C:hy,(xv"١ef4VZZh~w':xzdJ鴅tB˚fwh4#Jʄ*3ap7vjR&j=ڝ|c8tzS'Ɨz󁢰a~mnٯ _: eψz )nj61/뎦J+K_ ɞ(ȳIh@˭V$#<"$I`cw,㺴 j?t(ֺ2R f ƭcg\ _qcp OźVdzʻ pyb(|욉f*l }6}e[MəS).|lx6,pe=̇΁ %"$Lff뼠 3ˆ2l[1 lȺdlkNP<,DY$'̫P$:67H LJ ,Mdөҳ\[;r?SyD٥8Ȭ8B9,VC1RV<)ZԮ2e <*4>s5%(c*j dA]dqlN,&H!M.r(rVƑp*N5m}JɊʫ`  X9\&=ʐR  7Pۛ Jfɮe-۪]ٗs2}٭d,ڻ] ao#j@=\m)tb]R=˼hޠDFpZ=WQ߰G]|Y]m ~;.noT#)E!)dFn;^ *X]>'iW7v2Q&0Û Ϟ9]=~ [okM.5ˌVx% x?9m1<^L~jN> ɹV ">| 1cG~( u(Xf0:q$q=Ⳏ~8>.ݩ A ` $9 @pn=NdC׉XC a!b! #d d%ffgf"a *k+(Bl@.O/0ힰȮWrrqN34uͱ^3v 8/rVx:yK;|u^6zʻZ>zٓ1 \/O$S0E? ,PC`P @ eTt._3]qET5 8L"!$ʨ{XP:ª)0 )bg 2ԄXk=m5 :RΡzX! 0x 8j&HC֞Њՙ B$ %e RUZy;İ`af%2]ݛ{.z`C⢦k=]u+|_2,z@#I PnBl 4d Hpu%N&x@pE|뵗y^CWQvUb2x5xTy ]7#yWW/y&؇/WI I7R(XF? EqPyMYYm* L'6G=US&SgZ(Rޙ[OQDiN܏V g|!d!|I#_HZBI%&H&y6¥JmOy y=qS#|U_uyV ^E?A+'hFgDn]t=phja㍷u?Ď@Kh'&ϭ$ĚUġ@W* Jimu꯲YdHR^ºJF;zpnyAUB_W)Ld Sya.蛂}mL\(StNPXI^"#"1[pk;WQ`},>|?q|guj=l>-.>髿>)???럿t|@쯀#@Qb| qALG4F.B wp`` Sh Ђ8_ c] C8ns4f7)N8sۥ7.z5uJ x^8{v\dYdSgG٢ 0@ >ەY,oR; )3ۓ2/\GK PSL"xTͦխIeYJXM> ȞJ:/(*mB@ bdּnɕf}Nұ0}璟{@:H)*,1U"h+$,(6 D5u40ƔɲͰ]?"ЀEo״ g| '8*QKaK1-% @^}P)F r-Q՘1tP!TEP scôϔ/L2'MGa)"Z2ؒOѢT.2섧&87yRC4 G΄Y+@V^dO״r,p/<'4!2:9O<΢#!#2v)jvXV8vn]Sj*8[},IYxrןyZ[JwJ[]Djiմ|{uiW'Y)ss9-|/C6/ԝuhYv`Nxvv筓N9&PѓK-{4_:3RlCy_#8&R:0$ Gk]πQDYpC%ix:%0Z0xިX57V\qcɸ4z#"#OKY*O&1+πfNQMBv;3ѐʣ#ISZ-g2`qzseDy.}C)O2 wBMNp\O 47?^VdiO8d`;ujWIv{`K'~h^>:HJu}(rFٕ3W{s$N)%YO:;(s,1GG;';;7%h*S>G%wvwCyq?3k-;2wbC@@SZ'P `1GwA#,>xvg~*Asn0>@L@@R@NNgY:m#yc*}8dcrh~y8iEEHqx,a%H$HشFJlbv"F@sI6WH|GR4GG TVvE$xuH>:^-"9P8.CxJKYUSxT]caNL,ȓ@Hw$t~NQ8݄~RB4ҤA=N4KNgOXtXZ=R-UHXUQLJgSC~c3紇Q;6)E_Z#1D)gM2BXuw yS=A5+Ik)a$9JEWLLrX%WX+T{+ p<=#Zh{Ywx(+!l'B璅, 0EYiU^XhٖSkl}hXxHE˅v0\Iv]w~傍y\+sKHs{ȘEo~-ц i/iߕ](陌Siq29rYukovOp[07q_Qtsv)9FtwM'Iٜcǜ霆`w%ܩ`} 764yqcm9pyprƞFf( myh&4 ơ) i_!f$Zv(*XѢ.jg&v4Z6jjv:>Q$^] ,dx[7oն㶫c7'",]*k[kt;_P? DRoz( $ y@ -Ksj7x'ǔB;F8 BĺSHr94Q͓B=lwF3k3d3V}ʸ%BRq8+CôxRl[rU<,3)kBɴ=M1`TdxK+U46B9 lB{-ӻ(wr,)Od;ڿeN˹MÃ+-r)9 39M9˰KYle<=l.#G̳3>@KܺZMLhH; :LW 6!h_ {\KYJR JÔ)\TvC|g7O:8QZ̮R2dp7)TȒ ig¡3O%5su 7꾟[M“0(L[Ȋ >^~ " >^~ ">$^(Nڝ,Ϊ0^/43^87<+@޸;DC^HGL^?P~OT^S^48:{j(!ϵ(Z9a@.2'e>yXhbē7%RHɒR;xSRt>HUR7&v#h芮k3[v}8"J|(3&VI>7̇믎{'E>7jIs3b{#S'}'wX)@~RWiK$$M,!4|3ߎ:T&xȄ?1 ̛9!0rC'5Y@sN6%/"DDhYxLxAh:0F4o.7GK*L|:,ȋ)-K8++eOc/P.|=/`nC2~V`lNDD-HѬdZ#Gns1b/vFq[ODlT^A蓺$.1uHO@+'@y4,yb̀Oh'BYG{6+L5= @;.xRy齟6-8C ȯ;?Dx^R+S4{G-[H' |5,P.0P(8 ˆ! Dp#E$YI)UdK1eΤY@ DBl@ 2B IrE ($4@ n:aUYnWaŎ=)YUѮe[qUYݑj_k8ȴ^/fUW\e̙5ogE&]iԩUfkر?;PK= PK**AOEBPS/img/chap7_loadimg_020.gif^'GIF87af$&TLnT&lnTLJTln$&$JTڬ,f dihlp,tmx|(Ȥrl:ШtJZجvzxL.SEzn|N~gixaE# $Iq-o# SO$"p"×~$HnϿՆƺN%Fm#G{M& v 삍_#(K#0Q"'x!-eűCMd^hT @.Td>uHd`@>xDUjʧ.#](Fq6x:%^҄O! a@]ޞ52ƾF0LջF"P//ʹsWKⰈZuFBos.Vj~7dW3w.uE(PM`,[jĞkW:@zk4/>$^BMe,zO^d|뱧\7E 6xF8((s]"zۅ("U[ {tz NW6kFAxDl)hbi%dOZUf])(=8,.VdiENH' xd , Kn2 (pIgeC_j&d\<a.a&n*f*I|PUBwB y'7)ʫ'cYJf7*Jl X˺:Kz%8궢ʱ ]%$ ܎6M/!a ;l=3! w[~_*@Ic{? {[66GxOoT񨩓IFf]!+s IBL"F:򑐌$'IJTF&7Nz (GIR,)WV򕰌,gI?2̥.w^-Hb L2}e:B&4ÍH&nz8p9v<y> ~dX'@JaUB\4 (D'JNRݴ(F7JMr(HGJLl4)JWE"0~bJӚ6eqxSjcx: LG5h3zt!* (.e*,jUfMjPթUR=jYFUī?Zxͫ^׾ `KءC#]:d'i]Y늀x hGKҚMjWZ^q*ІͭnQڤ*gnKUkluЍt\U P`-pWv =wMzyF̾5}!)CNF"d#^|1_, @@ZhNp o@G @{V<8 ֩]4Il"DJH6ctűJWgGdPhSCb)0| *P !Yr7fvՆ= ;2k g=(BG+<t,f Rb(R4!KT DKx>r3v>7ٳkl j#>4"M~K$uvQҔ) ~?P.Qq}xp={{ ȩ^fVZ5{웳, H! x4U u<_?bU~_cߌ$I<3^?¢e;4{*8![T46NܷRسWƅ:H{O|qQ[Q'owV vy.)2g;Oz]'YpKzZ޽5[S_̫ٳ"5}{۾a%>:3}O`Ͼ U71/9R{}}>}1zwQ7WVHQ-V8Q *G| QC (VP8D}GY yv"*hYg]&(z48Z$1H3XqRlxpokn@kX_}Hdx/Ǝ %p?W4R0&(n֏_n8Zd)mjȐwrw_`f's?dv"Vp?2>xI`oa 撉du| @Qhv3Ws֑;\fldda lqfYoL9]PfZvQ9ubBRtܱyj(ny6UdIwyP9"Mՙ")rIP"yњ9m PWNwts\|~~އOI{{Gv ~距8ܧٜ:yy)SI})ǙW) zٟ ֩}Ɂʜwi^ՠhlՁ,ء|Mġ z(.z{j^N kJ9'xt8,w<ʟH`o?j:pgY@`opGj"OŤuPqX%v(ӈ^Cb edOf3(b4y@"@X!H`oڐIu'QfyfFfgޡ 7gq5bhYP3w`!q4Ԙ7ỳphq٦6n8fU%DƏC%hx6(=sv5H [tk! pu )3"FA/Ap:n> ƚ%9<hz emF_㪍B9 lFhh{ZjOY&`]eSYW Y[6'vassPY 27[Z9;OYj^uFusZ>ʘL& *8b]x5Z^_+O$+~{7:裐[+{镸񴸜AKrAz̨YnWz0Ié˱H'ڢwiڞɝwʻ?I;`[~{ڻ2Gd))=:K } [˹+}$Vd X+˺EdC ]Nք x0 4FQS8'\) + _"L`׀x&`~j"f~aq$ "NX'3xq_lk!Y|(hk Zaab& F@7|9m@vcqcAfgJm|bġndꚙU|Nh:uh֩,G5s`zvZz0zY Lb2Y's u5_6ʂ m8n`̏>8b e Yt ,q>'-{ʇ|̆vF ˞r ,xiN/H*<7\Ʊe>};(@Lj"Z Z h5p7.%Wgfk@*ldFdm[ , 3öqT]ӡ!x10À!ĸ>q̪fEiY1Ǭiw>u+nL6& LyPR&^@9(Xp[KH@#Ks(9Ҷ" hj.hmoN|d?FΆlz`ޮbnnj|sw䔌^>e_`$YRj x΃VA`Ζ쁶`Lv+i^r#@{?pïr )ht.|9>&O951f]ߪj#ΖnXn# ,h2Mj?bhr_ tYG sxrYwW}F-%К%YKsږmpO`21b_*)O`?1No^O^a6[mϵ7~\Nm* 5HE*>vK(Xگ/oϏߒ)Jz )I%X #Y'+۲3]7;ߟ/(F;2=)R5rMIU2,3:^;.;>Ww a!b #d$eST&ggg(ie# ԫlM&dn_,/-𰡮&q/013r5v"u6v7Rx9`y:7zе{|} {}/6 *TAx&Rh"ƌ7r#Ȑ" ذÓ-$l%̘2->(Raʛ`'РB-j(ҤJ2mԦN9b)֬Zr*USNy+ڴjjKط"`k.^n庋+bA$  x!!ݼ3^o: @`%3 @@iSnǐQ2zD6A DP GaS.{v7K(@@` /x| h1@,~}p_kad@%\y߂4u ]\n= !D#2 8`5~}I9m0`C" 5O1dU"8$R8 (9&|;Yo 5OF9rR6}e@ow ya*Z١qۘր($rz"'](1~1P iw9B_b@%} [*Y*0~Jhj *)X zij+(Pt-לt鶛,5lv`mpI Us&nqpk9/I-K/.[Ja둽Vq^c|Y |#Xrp g|W" 'Uf`3E+hoF;IN=}SHKjo5J`#CM_͆gCBJfۿ}q+mw]U7ީM2>x~8+8䑣[NCkN{9_ތa=* %~E84;]:U.;ӷ Ԟ/_GL_v3>,]3>uL/U??2դu]PXoW;`P(@d6D wlm)%8AL4PA4X00Z Ԍa 6h 3 zFh<쁘 ԊoR"4{4(C$tFG< 3 `8CK%]bѤ8uc8OC!"9@h|5;ᑣ. rI8Tbgj\BzF+kB< 0B< )%B5@\\yNNGe tq49.!i!&cǮ5-(D=iBz&$0=$zP3u K&sn 0V?P!A~zk:!sB0e%vҩ&" vh c'fُa6?2S-1[wHloIެ˝Fs Hq2^F5\0 Н/[˻yK}XU|ݚ]u/40#8 yT0dg'lx&;  s;:q 1a,co6]3x>ol/BWBdM8t k C9Uǒ +[R˖򠲘of,wwa^ᜏ,rnsԯ~Ff8/4=?(Z w.4g_ޮb"^3#CN^t MgnӗtlLԦ//fL k 0ܖ%ӯ&էSm+Z784σJ׿S#lBr.vO2Nֲ{DT[3Rm 2k- 8- -l2nB +ZVw\mo?[:1@)R 13oAZ l7X^8qkI5 2Yj&DNǍ[>vwUbSG̘a^%0d? v͜ LN)*qL}|D#*T&e:ʚ-uh\R`4{hJ *8I 2u-~ ºօdVA6'mS~ue |TXBkm-E&HH$9I&ՈgOn`7S zQ}B3 |~[Gi$;o:lr>``? u@Y`\P(%QnA`u(ZE_q̄1Yh up`sDzq| Ar Z U!u5`v`=5fmam~P Yx}ЇBFE@P Pڃa a-С B z`!!!&"/2"+,"$#NbQY"&f"'$v"( TW(b#J̴b!b fAU!+(̢.-bb""0֡0v1&1c&#,# 43!4 5 4H7@(_+^fXUHH|PFֵ8@9V9c-=2?5#c/@r(@qGh4u#@@KDv݆E!#wL׉Hc).$Kɸ $PA@?@%ȹ]d d F2%S 3  xQމ!\FJh@c0f1>&t&J"u2u^ewxVxy" bLP|^D)gHg}(%l&(|6( F21VoY(&f(B(~hm(FF≦((h"¨8(樎(())&.)6>)FN)V(n)v~))ifi))Ʃ))橞))J(f_"ע*j6*>*vN*WJJ(fn**~ (;9@N=Ӿ*وw g٪*50$ ˬ jJAU@ G|$PGamd RRᑶ[j k@xPǪvTJ|_g&jhJX=U$4q*:9âw@*ŪSj^a0SǢT.|0ľJ&=,XG`Q0Yl +ԤfϾGj}TWgJTUeH:q_M߮ӎFѾGKҲ:f,8]T)mqEiHd j $ իIeF-t @xr9PÁzh 6U,ckI1̍-mQ$Avn6eኬQݾmz>+&HI\{,*H@bJ6-ݭݑl( -5 oFTo+Aw.3jeN, .{i ۙ^FF2/ #fHii:k]A8قQ/iQN@ghv&UpO%Z Ӷpd.Cë/h^J mp8da$@HV,H+. o)A@+ o#Hkj.4aW#YIߢ )j! bI&"/ 2#7#?;PK&2c'^'PK**AOEBPS/img/chap7_loadimg_008.gife@GIF87azLJTLnTڬlnTTnTlJTl&L&L&T&$&$&TܶܶTܒTT&&l&T&T&JTJTl&TTڬJTJTnTnT&T$J$JT$nTlTJJLnlLJln$JlnTlTTnnܶlJnLTnnڬܒLJlJ$$nL$nJnTl,z*2*ͫ**/5۠:@mU*\Еf@ x.ZBcF;8Ɉ_HDrJ)_nKM7圉N< J&PCݩE OJիXju[WG K6Xemz̷1Tˑ~+oH6"dH8!+&cɥ}1\'{9ڶѪVPcKU۸s 6X߽kFMmA^>r)7Wt+x̽qdTn0` ŧL|)Ub(Vrkp F(*hma8z8`~X},7@'cz2 x^z{*B@ h%t!: R`)d~Ubyej TFt&i'w'oأcd8"'<ʊ62u>$vipfgFԩK Z cc`z*Ҩr鮠j&)9鱑R*K~WCy& w ش*ԧ"kl.隿뺼Z뻷*oUc(VV>ؾIk6:׷KflD͚Mh*4ƭhl/\,2p ϶tW1HoY 9M4 5 ;l31]]Ђ#6]c%sfvdW8nx7AsDS5 j1JGO@5~SpmzJ28F;&M{^7s\p|)I^~S>WN/5 KNeQ3f PyjPXA/(cH`j$>Y| _8L-/{ ӼpQFCXՠt&#V 1 `5mTVEwjѡD?}(P" hВf4SO0IWuSVIԮJ@k*ֲ%71tXݶj@0@9X_}=@>"a=Nb!jV⧩PudIVg`PFĨY"bUX.kc;֜RŒS6pkesT*4lW V]l+FMKQO]64Qg7x60Oa s"x _//~pM^x; 7F0L [X^p%vX~AG\`{(>Ab01{X-M|c9q3a _D0\&+ޯ*OYR}!+X]/CΓ95p\6Ϗov3<_:yq3'PN2, zLJF;Z'u]hD[ȗ7-NӟưLj=w>UT`>,k@yҸεw^MlaϤNf;ٱ5!iζn{Gqk_ZNvMzη~NO'N[x!{ GN{s(OW򖻜'gN 9w?9ЇN:җ;V:ԧN[Rַw<^N~]hOp>xϻ{yO/}va:񐏼'O[|;x{FOқOW֓>}yϽyS((]OOfjH{;O>xE{W>OO?woY//Ͽ_{O/}7zġPs` @ W|X؁Wxǀ @#`` `Rt0'#gP7'pȁ!Xv#8##@NHn0P2Zy^ ` 0PSB؆GE8v#L`0`7X8]h z OhpplX0nzXzpae؄x8exJGV2XpJvAf=n}Qxz'`|}ȉF|vP#H# 0Kܸ-@0p#h؎78uhz( ֋ȗI|Iz Ah((k(Jh  qny 'T=BPXzhhhox|9z;Y|=ٓW[Hfpx#3W?7Vy#8먒\y4wIhX6@Y֤Rȓ xi )ȔUp zDٌ pTٔoՔXXc!)Vؕ{_Y `2Y jYP@ )Ѐհ:Xiv {ٗ9ixiQXQX~X^g2y*-`())Ri\5ؙـ@}i x j UXȜi|ɓJ)Uz +BuF S` Ѝɑ؟V)0X L j^dYiJU5񀩹g0jӉ, #'* 3*v h S&0-@xjR#L)M`-ș_x6y#9(XYf*g*hjj**tiCyS r%.i  K7 ʑ"|ȡGz@(VʢU( y#l* i]ݡ#*}ĚK Й[ P(L|zYZzpqZ9*1JڐgƎڲׯZ~Zk MWxMg.{JM`S-:˳糗*D{*kf,b˯JɃ5u `R >8ZC۵Hgc۷rKXr;zz{u|뷐y (p9x˵[_[^aykqnKt;;y[qB txKqKB˹{tvG ~ط;EWPx؛{۽ޫt${Zȏ۾NǷ!l†HЇNmY+V#8MMFiNN  &y 9S\ Cڑ [T\W>W~7xY A^Uh@Pɩ Y\Z Ρ} _#hڀͩP`Z|Vܳӗ?~A 9G.Cg)>="TNmNm-7#]ؔ\wy5U㢪ЭptP.!N 6 ޫ#_.aR{A-߀jx QәNsޒ =|ľχ77ϙ(~ؚGո{~>{H.ElHN% INlY9ȳl\'ƌ1XP ē"Iv o  ?mN({Uȑ էAb+|-q`^BpJ xݎ[?Fz)M/# HI.ı|#q@J_L^`7@;/}( kΈO˛BXϮ|s/#FK:ϨYSQS**=/HK_?$7>^@ޮ}]@ 8HXhxHp0IYipIy *:JZj *iy +;K[k{yz ,<y+8p 1I=y@1b`b!PnO| n:0` &PxHـE&;zhL$XUX^ S`tB`„ Q<*b=*Ӫ BJyk^"m&9V Auֵl P{l-v+6oTD%0FjTqd @#轌9 AM0$Dc 4Mv{͌VB& 2 t(E @ׯo美ЀPFltrWH<ȄKg{ A4f)^ p_""R&Mx5\79%BI%Kӝ 17QP yFT?6cJ.S NrX 9 |ȉU B "s2@#2Jȗ~#,u`dEp!㛆bcJLY2pu4nZb"||0!enIy(.qڸCw2q/h`4F d ,V\WXQ@hbBHqeb%\Uxm> Fd @!)l@ b8kAKt (kȉdI*NLPDiE`nD#$R7~ɭL9*\w]t1瞔1?yq|[c$DZ*ROpjy przb=F %d>*hvNz(*PNh &7̴T,&Ume˗59sF8kW~+W!ҤEQJM>|i֪&Lm m[m>ZFi|,p'ߡ|wҺt` ^D{czg|7+0VE-2kq#APLa8*Ȁ2/Ip!n%N(XՁp$gaL~+a1P6C!&!C3l\{ bLg$ETG(Z/,Pi~QQSaGwChwG`cdY*$d!6D~ ~ P&L" U$=X@+< Aaˑ%&A2B89q+:XBKT"WyĢ7# !0e&59ֹNԁ2~(@̢0H]pרQa|CL,pĀAqF3TS~) pZE]m>>Ѵ?ASgsi'^ZP10rR*EJHi&*bv2FƒĒ̚N9FCT9 QHG7)TJ9%"5G``H%XtBʚ, -$!`v1b4B&6M\0#o4+:FsӝP(eB[UFիJm-}J@E5vxjGq%[a^ SU= t P;j`j:@B"`HUް@=Gβ:& g 4Wˁ^FkڤǮ6JfѢΓk&꼞͉k_VJ,#04ք0}GOK:` l<椴Ы9#MYK׬n"f6D%pM{&MT[Oi2KSӔgGZlp0wl*\+qeBj/R8!1Cm%¹bk9*m/;A%MhRγ279t=^,YKɧKNqM/^U4'ښ`S 4Cz Yg"Az `m |v],C)%<McW"kZk3r~ːP+10F G= ؤlo{mq-~B/0-O ox)KqÔ,ho#"/y81>N(^3qm䃕"(uGmrs8)ɇQj)z r4p,>=N*\>;ܽcpS e)!`"t`bvDf2Nq&iϑ[_+{sFdHUg9u_ G-H`͸qqvH!"Oi(Qf, "sW8O1 HR&Iʤ fɟ "IGyZ:ř62iGk^!HsJu:swȧ}iEz GqmQg- @Dq sisl$*Djqpt !K+Z|BOQ*Wjy;v P+ @SHi:ڔ#JJGpFiΪϺeJb>LQ){ш{o L"_vCh ѯіap)r.tIPNNÑ}XA4!Dz&䊯pŶc! *cl}8dDڥYQK6R$H/!K ~If/&eU 6{Jhe!xIX,bD{ n 1iU)G*RH'B'Dȳ")I !&~bk DhU.?)&ҷ0Jr1\-N=rK Vm;>f]%-A `(`s0V $@%1;Kgro&"%;;&H;za"0%cU7ٰP`:‹NZ3kX+d BiI{ R7⛿K4ث [athF7&g:쐧\E^ԭ! :t{sksnp;h{GZ 17lTDGÃ*ePRH\ō Vy4yTyp\|e'R)@L _\IpL&ǐ,Po _0gNGANaP&={\=䲙| Hu [N: j"Jȅe+ŽÑNYs7Zk$n9ɟ T]1nKܙkw\ POIq'+I\Y.*[C :b.32ա  uAvѿ672@D-}G,z%UUwwVM-ٽ=]5} 7`=]4Zdրчz .Bzz66$xzz*6 60Z e_P"{x|,@)< !X.NGc}RHAv#|'Rֽք@߃1d&@%3:  1!Gs}~ɱ:nQ/nM؀<&j~#"޴f J P%4[k6֜.SxR _bR~ x  ؀M ԓ[s-T>v[N!N{\R]k%K;8;11V(|F 4i >`}Gv1[|cbH踖\ȅǤW\?[](eҝ-`̢0,uF-l(C~ ]-Zbleaee6xI [Y &[\]4 FCgj[1pH KBf, cbjGG+Č 쿏߿֐W_9y͋M'X01ֻ3j8 b%Y( 8`@yx֠dVС-AtIY#  ǣH*]JB X" ꬬNI ء+JӷpVJ4-ȧ@1h^X7r#KLT"  S}3.dn5$絵4qʸs˥$/˳fJ~K~9C>)bǪukԅԠ1jC7aK%jRoZ o\V_$/Hrvgݣh82 h7.CpC (&T!:CbBX8'f /PE0 Ld8EfGdX2#+2'sZ1BfNs(ʬfPpf3%9yV\=Yv~ 9 z[.thC登#hEДnՌL'yi j3z>.OjZ̬n_MhF:я&/c}Ӛ˼uk {չ}l&n67j[ζn{Mrs;jNvMz;ʷ~NO;|r'N[ϸ7qC GN(O40gN8Ϲw7ЇNI;PԧN?VϺַ#`/yNoI.z=p;F2)Av]|g>}gў 8{|*{>ߓ9Ղ;>Wz̟\V.Ͻ+z>߲+O~{? C|+gȝ_Sl~g?&m3xUu3Ͽϵ"o75p'zz+P% Q8"!_s*"oXz h'  N1˰!%~p Ox +~|wwA1.X+6X] 9 [h# ; Q@(rr P ,zoܧ Q 7{jiob2a ex 0%U @'m ,1.h],@mrsb~p(kr}ht! P0*H,(ܨ h 8-y4 # X X"#X'(&Xh (}xib, ^78 Ўxh4h&% '  Hqڷp3r%P `.Бa琉iX`(6)R%)f2p0@tpy fƒ>h Aib [(W GIqڷ RO4pP Ig7~H@჉xI- @r]8 bk蓤H8p0Y } H0ә( |(|xe ha x D~o< x pYi p uH$Y )^9`.()A r h97p<8 ڠD:pɝ{X ˰|/Thq!WE鋾{`}Y%6HpJC*toqZ!#-nzgZjd|fUH~.s:w:s{},-x+'~穛Z"Z97Qrڒ*s iګ:ڒzȚJΊyҺͪtewؚ&uڭޚujv'蚮ꊨڮZA:azگ{;{W t ۰<[ s{$ q$[ 7&*+p(. 2;ֲ4{3k8+<$@;+D{kH LP;*T˱嚵 $ص^`b;d{V{˪Tx,f{h˳Js׶b18;ʶz|K~۪T;1W+ sk//7 m\x{rk a++p;W-%w#лK ;+H˷0%P ]Yۻ @۽У{K|&p$&P QI7i#" 4z PG7K%@ оP 1 p˽P&lk!, +FH1;pL K kFܻ0(mq1,; P: Ę "Q" Ѐģ%| tL )"Rj$ِ RLz[$\QQ ,/q"AhBq\tܿܿmK'A;&Æ|{!Ō|Y. Vizo ),Ҡ`̄QL˕;XPpaQB M sn, p yl!*+!) l `,錇 <L 9č( bЦ00R ;͏][ $X X=M $] N!`Ғ3+ F8`݌[:( Ξ3,m\zNK׽ * ;|L 0m[M+>#ww Pٖ}ٖ)03['١pj ڳ bm= ]sеշ]r^!;)WJ̍rΝ$H=4tko!vk&Ӛ=~M ]]Z{\e=ٰ]]0w *GG2r?"^:G&3*..'2^"G67>~tp?>D=NHsNNsppO^''^#Z\^`b>d^f~hj ln޵;PK^?j@e@PK**AOEBPS/img/chap7_loadimg_007.gif&EGIF87aV$&TLnT&lnTLJTln$&$JTڬ,V dihlp,tmx|(Ȥrl:ШtJZجvzxL.Dzn|NK~gWxF# G$Iq-o# fEO$"p"L~$H+nüЍ}M%"̶|ֽ% udE #(K#0Q" sx -`ػEEASHT @8ӣ<>mZ9!D$JUX`nP@ ^OIAH:W&ÈNtĚ(ZP#u`"$@2hL6pH:x̣> G/L"F:򑐌$'I<2̤&7Nz (xQL*WVZRa,Y򖡫%.wv )bst<2]2 3Ijb̦6mz8yd9vj<3z3 >ə}ӛ@Ё=BЅ: }DgщZT뼨Fi!x50HGJҒhэRTYR/t2 Mkʅ3)OߙuZB*jO/JSA5/-5Vz .UгhMZֶp\3hLuUUT׾ ,Z`WD:d'KZlf ;ѼnЬhGKҚD=ˮ(lgKҪ]hkuhUMUrwW]lKZ7O4Z| ^6򵌀û_k%PK6 n /m~ +]{$ؾePI X;'p$$x@PaD+V o:Nau0cuH@~,ja<@6l]^!J~՟Jf), ;2t+',XLg ٠EIxe1 GXtA#%^Q ede3ƄOealiyyVN<$.Yz =S$D&5K_=hH˸_jihםu?-P;NB0gvuY-m9J^{4sќ>S͖vbY-il2{AhSvL!Mк܊Jv15*w56aYR5 ,6 X|ڮÜ"t76bs7Ϲi!S#x,|m%7@>o ?Ӧ.`x;>jkX &YHYQ:UzRQHhyI4 nIHeTUHa5|7 UhfYdX:i XJ3|B4%cx8b~esZ{x*5|*YhJPfTƉJ1Xee`rYڗ,zXaCXaH&sz YJMj:i"h-ً(mLehmǸ edu9`CXFX櫿XMúhDw'o(e= _hn kX@ZuД Ӑ$ԦWRh4h?(g Y L>uakw)b’foM2IJV-:v`冰*Bv@&0vI!+"!Pf;{v'rzGpXl;K˴!=7'P*bIv*bJ#-Fyb9֢E zoz؝ l(!Nj]; s #ᒆ c4BJxL.-O7t3\`>iYx]3NAnPQeƐqԂy)P&~D 9FtJ&=/`؊i^f\>́Goz4wU`1`qZG+ ` B  P9&Q9c+rp.{dH^ohQnCJ+ndڌ l"x_"YNaڌڬ`Nby#k)nB>c Т~ȼi|N\y>g<Î[ťxJͥ>Ƭ.q^gؾi熅hP޷sB'!,UaOnj>(9?҄InCm>Z?Nnoᘾs gjOgl_mePAVd?;WD_>|ߏ_dy_?YX% .Kխ'ݴӽOb0?R?oæUFo˯TE=ӡ „*-\8Pp9.`,މ Ю "=@^t s ΜH8'72T*A 4%qRNy> !Yhg3q&G$X 9~1{f2 I Q,o~9ZGۘŀ XSt_|Wrv@A 0S׹8q⟗/"=9J٩xB 1vVc4toE({eở9~<ѩhc)0Pu# v _fBpZzm5͔L"p췕%vv&W~1уhhM>OIj&:+hRƈRێYHQȟ)M@` .H(hh6!RcX&:B'}jz*+z ^*rp*iHk6Z+X+|Z짱",몳=)-7Zbƴz+ڷjsג묹26ډd{///0|0 +0 +oB<1?)k1P:1!;%|2)\/lj;qW-#̥ q5Jΰn=ʳЖ|nE{JғMnM?ʴԅ<nUϫ5IW5NR^{ 6٦]ۦq=7u}7y7}=ش~~8+;7˫hS8 ^-{晷9~э-Gk:ꞇκt; P- @ 8>.P=ݾW w :h L ~C*$ӊ~v3=%h0[FЄpQ DT.׉ts/L P@sc:$ -5A4$0wĔOCDPmhxyH7~zLZ*껙V\dB7rQȑ͈GI#b18AqFL(X@ s mT.b42J8Hf"!΁I:$rɏ;G9!hВdmT>6LG_qJ4sN~0@_JJ i+KYA[  :җ/s)RvDe.䄺a#'Qᇲ .rͣ8D9D\4-s0T*du>hA# W?O,l7:h`9'S4R/̈O=TFM SeTR9bptDb=-?! jYQುUfc=QY Tk Vqh0+UטrbCܺH5b6;0`Yhli@K¬[ iW6u-cKbgmjF-ʂ+\d=.r1}.)VR U.vOFr=nuۯ6e3{wAgRk'%~ _8 0 ]wfNp ,rƅkAq0C8='2:,!6:Ocbcxr„x`5Wz88no!t.;f},VLQycmH2B=* *_N6fesDO#O쨓XU'<'x˒%;q$gp :Qƫ%yX5GfX'7@%a9w9n{8UC$HQ8cF moY=í&t%;Pv FKD:Z0QNWzԭFFWB艻 ݙ{C9_g%PqtָNuN6:TuִI\NL]pK/= +׬I7^_io/︔5[ ͧE(Cn0qu$?}hr>ߴ!sG1_Zg `Vǵ@}Mwe`lv~`L L  f J  r :V!!*ZU>5!sY^aq5a$DZ´aBҟ%|!>!6a"n!!%aޱ!! Da !vYH b"8pS"J .,\\<" F$ %(A&.()(&a)= C\a[--1<#c8[ݹ@ b "D` w+b `)2U]ndiC3:c Bc HU; Ypb4@:9#=^S*:.QL8=a #"BDC<ƣ7Db/$)d =b?RO>J'&A ?zGHNH"F]@@Uރ#TMja7OeY^y)CeMM$R@Q,^(RAjGI2mUCVj%7DC:% c,_N_NJ@f $f%&cΞ/ߠezdҠfPg2fh&ijkf&m*l&nk&oWo&pg'qg"rr6h9'tVtN'\Qu*q^o҂tw~'xx'yy'zz'{{'|Ƨ|'}֧}'~~'@((&.(6|FN(V^(f'n~((h|v(ܦZ't(Bhs֨*'q(vffin)֦.i C 4ݗMqYIJ` W])}iRhH@i);hi:Kc8R H|S9?AVIHtT"jR`$^) )Ej1)pDZk c>MR*m %U 7*&(ꁸjD*]GpYQŖjXHLH#L6H#IC'4xjJcR֢x1aYDzH]-+/hCYқEVGBֱڍ$Dk%+Ʈk;VBH+|eGcj$YPh4l<,l#Fl6xŲ-m+ʁ0U\#CѨϱSޅ ϗ9k=IT,6-к-x)vNʛALJVJ-yB?ڪ&DA|f.BڮwJ&0RW`깺ށTxX-8 AӶ9CYd.2jk΢1@֮ʁlY(# "o1-܂Bv1e(.Cn/҆֋l(A./^P&8+!Ni^kq-5VgQs%0Ac~:UM0!n0w0W;PK | &&PK**AOEBPS/img/chap6_hrcalcrem.gifGIF87a8:H V)g亼tvr5u,[3fVWGGe88eƽݶf]jijff4)H{)**Uب3 -oj6zglz`zP.\kYejM ɹwi7T6iKY,' 8uۍhYHw[g̚c/ ^4nYfZzƘͧm˽Nj^Ɣ҉qXYdrmKl;4g[[XRK+444QrNlb3CXD=)Ցީ͸wuyyD8Ј`f.xyy7yFDWVwFЦo}TN V(u l̔ Xcf6W5|;w=uBtHTyXY,I(|̇NkXtdN4y,&1"&v|uv*f[@KC'iDkK;131̷|pYqkWTTMGa6hCU6%tQnfRdmkh _gRvpLJO4 p|dUs4,ZNï`   َwwq9I * ӧ% DD/d4s%Wmf)[Ԏ-i3v4EԨڬvЄq\hX՜4%>4ԘXQT\;3$,8@ q6([ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲK@r4`‚ zIѣH*]ʴӧPJJիXjʵׯ`ÊKVh3wpCPfѶR-r-'vl c6"Aę@9 XPZmX|ǝIL;lz<9Q0k|ssޝFe.]b'>q?]g_n7&p@-(?5t>[v]{̑v (bV_qΊ+b]wS# "+(X`c֣DjAeeMAPF)ANViXf\vZdi&btlp)tix9 u͟ze,`j|袃PJ8`饖9raȴd`ꩨꪬ*무j뭸뮼+k& lZ DV{괳Jnk-rKvKn~Z^ k˭힋.[/K0 ޫWlg\1j ,$l(lr@0,4lwB@-Dt,wD8:&;=}E X:ol_LPA٫NFhpPAr= ebx-Tm , S0wNRЀ(`E"LFǮ;!Lfj2 (ΔrC(b +;ox\N8|mIJ0 0s{:cF CU(Q0j5Pj {>h!J#2lUhЀmHT=d[(D[D O 'r4v$ywwh哠@Rғd"CSd$ @"D`>NX 0Ib@+VECe(IjZ̦6nz 8BX1b@z5`4O8D@h85laCտ$J0@@Q8d'yM+`ӣTeh2⤿J}ReH@ MLc*SԦJ$8Q P\0Ǡd( dRrH]S*ըBu\N{ӠZdMNJh_'ֶp\x*L]MT-(=iF<(-bpdB '"FZͬf7zֲE hGKҚMiUֺlgKͭnw[ pKMr@# Tp2`J ZE),}z@NX }LjԶ /Pp+  5|^vyYDU]WQ8|шQ~TH )|V(pFRP@5-:W"8.b#6P?t¸2"g8QR dEH\6SngZ1PT1o*(Oi\ L#V,$:@ ІFtL- :Pde ^hU}l E-RîU]t蕪CW`pd/ 9U%9*P8Mj[ڽZYkZؐD!4Mrg:5vYD0KC0!.PFCsSiWonWQ1pG>"8v?4f~\*^}G zׇ2)m pm05薄>؁GhHhI؊*`hjfĈehGB3I_\5 <$nj88RqDFӋ>#]fkcgUwv(#{M(L4Ȋ?yWV 7'4 $ Cp`WwdU5uDqgh hwr'>wXɐYCiCkW}݈sjX= >铒8I}6CJL)4*(*8Isu?#^3;@:Ha@ PxXHUXKٔvyxO*QSqc8l3~552yiGnҗ*UI#v7Z,q0|uA1qg)w,~)YyH494*I0}w|xٜI~*yW1ǍVIG5`p 0 c@VȚ#X{Yyyyi{:r"9* ¢b9+W a봡  0`*X>'q)qq7Sɖ7ڤ z8N٤n]X 0>!90|9|*k*TZV2p@2]Nj5 0 p "ق(* ǢH)~ItI@3B էB;J*` ~|J_N a(a |z3~.*yڤRwZc@TC`%Vꉡh-x*@p @ `QD'j 0ՇPzP:}o?!iS#( e0hɭ x( QTIPEh#ښg鞰)*$ b Pరod0pۢ+i;ّj3:擪sq5;pD*354[6[YҚ{;ˌ=4ɳ;F`m"wG0i+ +m7VFX^^W` baz=([)6)r(zxBiii|*Po3 _QFT;R0arc&lgks(8@z53@8P\sTH{췤ȋA8O_9ۻɺ?3ZIjg|Ȏ8qڭ ǀ.(*I$ y-(ujvȂ 4+x2(+qKs;*x 图/x3{亻 5+%W4#[|@sq:iygU|8@gɻ6F|NM>Lcez6np09@ I1̢)LôWH\fܤJu7'ęٻd|t\Ǚ`ם_8%Z [j"3 +z(v\ɖ\xz<Ie``p:cpe0.+[1Α<|ϰ7TxY9`iK\m~<\,}3n2%6ݓoӽ~XMnMLn&}(p{.ڙ< \5mW06+-KwcL0}H M!M#]n)4t؜-V]n0KMMM437ԘsN3|jz(y[}M]=4_3 Pzs S+l})wWk}&ɽ׸\ӓ?)lԈٚ]2M B<6>a7Bi0̮+*xg؛]L۶ŌԤtU}ȝʽj4*?ݛ@j}ݕQvIq*PFk&V]`٤ݽu [5ޫ@@YDO;$^&n"N01F;0k'~Ų>"&ͺdrbh sjBV#GV>jW r"&-l)f^m2i^1mHo>,,CQf2"xz|~>O~(@KR9>>S?G$gVAQP'ۑbQ ā>ꥮN^~ȞG!7""!#B#@`7Zp7@$MltnG @%W b. n0a&  P%wPKMO>*Nba/&/X&P0̮ !3!> ,_#'PR?T_VX?!3,B%[_4dnLat@D"8!*7O?_(?_Js 1*.F.c+ݶV+j/UbC~߾YGՏcά>+/\?__T!  00 "CS^T#ƍ10~4,@  /$,]D\UjU@R4@7>lh@Ä7(9BPt)3YJ5mU&FJծm6ܺw~k FXbƍ 8 (QR6 YfΝ=@^ mT8SƎOzƍɊ 'TaX `&< xo*]RlGP R J 3EƍGcpN@% PC X m&BH%,LVL3"&D3Pc!!VD,FdG2H! XjB2J)# :hH-K/3L1$L3 \J7߄B42;3O=O?4PA%PCE4QEeQG4RI'RK/΃PR!:@Q⨲D TS0V[lb@[o'4@@XN!dЀ_b |5UɪW4[-P0ydmMtEWvMz\ym^{ VEoo wG:653S8bKQ+NHT.޸d2 XZJ@2FI8U>Dd Df  2Ƞ v?|ֲ@eN@ ĖW" G(fm߆;nlHD]Na 'p5տgأrc+kjbyfQ@b˙P@g__Jpavo=wwW:}i[ 4`?@!:)xpB BxeoOM"ů*ik 58Q"1z=*HqR`A DV"P fp`G#@̀$(!1AA|7!SC@w~ f\@3aGH*FRR)HC"F"q rA(I&@q Mlhшv, $"Dg<(BYC!!@AV9% dz|dB P %@3A?pb#$!Or4 8~4)$6)0嚀y_LH1)L ΄&3g.S8t2 Mks7iMd@D]i65/1atg<9OzӞ[<]:(.fRTChBPɐoDoMp%ܔhE{vԣ)NB]PT<8@H[ؤUYĪԦ=ehPАըGEjR1e\ԢD8\!@`LA_+H5gEkZպVխo<撙,`dLͧSQϞ+~ І60D00 LMqӄ5c $ l!-gZz!mgKZϘ!-k_؂6Xf\{[zַjO+n&l8]OlzM_ӿc@=ne*YZֻߕwyh2/ԔMPv ` kC: eo<`>k~j2ׇ4n<5`P,4`EToD!ljNAg`)M׺ڥlL?]ɸֶ-g{+d"l %UN9.w+\%V3m"{;̙ٷgˌ%6u5W:+ *ὮӬBG6x mt%=iJWR0Stj* φ<`K4¶lLwZ(W7~ȣ2ͨshq=lbL\7U,Ulj˘Xlmnw^0Hxcvox{av{ݦ!+tc:ʴsLl]sqVhضܙ3 9C"/34 7.C͙S}mwfWl!湅OCS֐ 5>kϩsJl9V/D'\s8!NNGQpf!~wa:dn0}Jn9 Ft7tŽa3k]@,@a KeO|e?K#N/71C Uq p4nK~kUr+|X|WqY/\u.b;#=WMu}k1HLMa6Gb0 $4DC"K6 Ԍ$x;SKT z&gRS"4#D*3&ee>ts S8 88:7X.2'YCCƻ,bi6t7$b p1O([(J B,D7$Kc'$HD?CQR:% &Q#)4 81D25/IoY)S29ɕS.W8'Sk镇`]Q #8YFhFxhTijTl48mI鲵X3,d ^ĊVQ8EPXWxOF㱁KȅcjIf{JH8k1*#t,Ȅ69 2 e*JV*w<{d}lSNUQI2IA2 (a,WlJ8O&¸ʓ\Ba"4MHϛBx {2Vc[DI˿t.!:J4Ec4l6ˋh!`7 /` 7P9 T<LDΫMp+/1Lŀk.[#Ƴ˄%Z%\%H 4h)tN$4O!qM:tjϢJOaOuwk 2,ʗ $0|1DN4L,8Kz ÉKзҵRE2d=TDEtPb,G]4P麲+kV,]Hl̲,#΁ˤRLAH<5D,φ;2LP{Ѝ[嚲44Qц| 0S(P9s1u7}25"<S9r\nkS85CP9-:Ec47 (+pQc?PDNPE%FAA:':;TY2ŸzB\UU"=S +p5X6@#9Y+\iVUA)BɠĂ#@ :*p 8j@iuem@V)VB,(<ϻC Yө=;.X%XRve؆>_° B4LDlÅu؏Y{W@(!Uɀ7{m.U)P.3њ5F,%M ١%ZJ?)YShآک] sR ES<.eмxJ Kh;Y &6FV>M`jaFaa !&" 4 BqK ̡kr1f-./0&263F4V5fcE8ƒc:;<6*=7:`'++@FdfE!>&C>ʳ'jz6@?=d >Q&dLF1\1dM G%>eOb8]^_`a&b6cFdVeffvghijklmn @(r(s>qPufvvwxyz{|}~&6FVfFs.rht6父h hs~.&6FVfv闆阖陦隶韶ss8uPuPVtP8rj6j^jvjj @$ ЂT`kr hh x&.sH.Njnjt(gVlsȞl]F؂-T@F, qgx^ nP:) @y rmy3z@~(_pxhFT@r0TrAwF}t>r.Fnn{.g>Vnh3h(g>Fxnhndhw o'77qX`qjɮgq~qFFξk -r!`mph؎H)xmg@po8g? LJPn|n>0' .3H-//6:G|P5os3x|?/ 43o7?oe5/os7tJ/Jm}Gs1s8n;'oG'oDt@WhYZuuVq8?luu^wjvЂkpr9.rv2Pyr7suFu@vw~yy9|}~'7uvjVꦦh@sVxoxb/V!r9lmv^r3GyoifpVF&7G9 ΒwLzVz(UfREzz둱6@{Wc7*X;佯{ؼYnK.le({ZF{{LҽGd|(('Œ|/L7L X9}} i}ۏO?0'2QGWgwW8hSzF& "f@@'5m46 ;8T8` „ ;ꄆ2bׯkԠ!"G*x*ZaAظ5jp"Ӏ ST*F(RB\tI9+uF1c2R:;S*֮`:pqL.޼z/,,n1Ȓ'SQ@,ȣ㛎?"LKm[Fӄy᷇\9͛5 .0WaB=QƛZA@" HQ`᠐R֯o/ |8u|DuT6<I*e>2!6!N1 >(a ]}I)'8#5x##BAMux0EeEy$-fyi X`Aԩ$Nem% yQNL`XYx;!P>Yx^#UI $ {MH} M h0hM6,)i̹^ 0r-3 I$痫J LPĔx,:,7=Y`l3@;.deYg .F[i`uh`LFS/%ow _0.ʨ0;1[|P6z1*1|2)2-2%25?N3=3A =4E}4I+4M;4QK=5U[}5Yk5VY <6=-`efhm6nvjy7}7?vq+8;8K>9[~9q_ ֵu-H) i_@Z4c!00y8-0Ej,0V4?? ў@6{ hЀҝ.urҁ v0dY` `&v;SpP%?1/yas^O*2#b *1_#0(QK\bfH((.q Sx$D -`bL@H4eT#(ʥnT"E/>""!'&'"E2|$2 2JZSX`Zd8C-@uTPAB!! OB\.+FeR.ԧ*CD>yVx3Va,B'"8@A6qf䔡,^CI@y&'|ֳ= Ps=0+/Jg68g:WOp0DyS[MV]!"Ol,0G@X T"/)D SHs^D #;M]IG!SNdHg^NThid$º R`CA9F]΂ P 0ӨA<cP ub\^բn5O;7!.$KCA hD[TyDHR$F^ϑ9= Q̔kdP#Q!&[}>9gܲBe )c v=x2 YJ) 5Aݗ\}~ׂĩBcK?@ì 0:/PAox+2Z^ss>e>֬tteՃ=c/{ =m\\4>[ׂ/ n?>3>/Sֿ>|, ~p$N+2j~~??{=&/fc[ w@E ` eH.-Zث-]=0u~ Пc_}E^O4aP8,T U  "( /eP.њ a/aS V<$^ԡd4!^!a_$T$I}a@JV! da"!!""&b$dN"DtNa@b&BFd\@4DAF*ad+"-֢-". #6] i<>J &$B&ƙx" FU +bb |7"889#9:cc:c8:8#<֣;79#d<#AcAd>:9C> SS]P9 RG~d!RDfFf6"B$ct! G$N aK+6KỌ8>>6=6eRң?Nd %TʣA#R#V2VFUfR9*eT^%UBE`5`d ac[2\B[ F %`.#ect1d@ L%7d`ff.:WPjg~f40*a -fdD&o @"U&J^c"h&oo hEia B%j s"@svNƄfhi/a ee,MgV%XoyS%zʧ̀ {}sq_&Wkht K$O]we0Ej#nإ8_֠d@cW@Xe~N %]e^B$\(%*RccXay%.$*Je|(Vr%T%})'X OdX_Vxo'6Pgf~~f~rirL)rO  ꠾@ @z̆M6>*Μ:Er_HI$$c f5kx܁GҡTPR bHiΙvc& F*檮䤮D"&)zLQ A]@dc*Eƨ©+.QeVޣz"+aįvxf$uk"yҪV櫾++G%UNp Nv>,F,B,/+B)tM8@[h6,J,ƬŒޅjk>Ʊ:V5m+fI=>i.8DDnanp,inM$o,qp/cl2ijc)z,3B24Bjr.%¯?"A(nM᯸1,\P(@2B,(^Ѷꫢ.F#WcDB0fozN ȀAD 0l.&2%Cng"O{nqܰ1bÚb`c$ԱGA =, roqw'bphs6rs6@ A b-Fr_ 2*2pJ0 qqcl%ǀWd/ d]e0dF12/-+"3s4W5J*K#r^b*R53;g.3#,g1*\A'(B."FH`E!B:DO4 6f==/rc+F0Ȃ,hB 0ʆ-ג21J-F4E4Ms#bVN4B3Q~E6S7!QQӈE],%NFD:!P+D<@QwWuVRg4G`ǾƺGL LI)עU;__P5P>3&1SGh\@dPh@H+0h$Cm]]aīj_K_kja20',(ZC<dUꮺ/a¶tO7us1@8+'\Q GqooU7{{7|Ƿ|7}׷]wS7;cO8*&*\A"e*`vL E 䢅?8koZnYjCFd7cDr, `c$.\*R zzOXvͣNXVO$y,5y  D.fyaD.B-x7e-znx*/Ё%qS5k&ّaۨCjCyB"@B#wι6.2:NpQ6VFl!=Zzh Ko1WOhG-2E0y,RDĂ4(|%8݊2򖓇$8Lng"wMӯiAT;{Bg(H|y$-9`NE 6|/PzaLP͡\pCS+y*ǁ]Oh|h{cF4ͺO؛[|fο<3yOB%+)(},XT\2ˏrл4{8nybZ' k>F"D/l3U#ٌǽnI|c2L݈"0"X y J}ck48 |sa疜/;#;2$8π{zf$~R>Ǿ>׾ |;6rc$Dn^?4_u/?7?~3r{$*WXXAlv0oGP?w`Y?/99#*JPi^Fo @p0aB&Th@p 񀁂1fԸcGA9dI'QTeK/5"Pܼ`P`@O&UiI8m WRp PiNrUYhϺev٩w+ gйG=t80#5TఴLѼs AS9tiӧQVu|kPF}t7SVyI*<ڴm6u湱go:WIxѧ'W~}׿?5l7uI~ j8J2@,@@ t 1PCA QI,ĕmCP KBdpqql R!,#LR%l'R)+R-1ŏ@4ޖ*8H6`3:Ф .sO;4-CMTEmG!tf ż- ͔߮#  8:`κ{k:Yo=cuV,;uPb%MؽY|*ikőRB @M_ls'@] @P?_ֲ^js5^qm^uޥ@&ZgO^}H:ç~zg'|‹oA(nVC;㙏_˖ T7 op+ou /^1A J~ԷfO%4 ]Sv@5 R=mQa @Np;HE. S.C1.TBOz:RRFI^d#E)GDW!HhUb,BF,/ !-gJal*1)mQ RHЖW_5YorbFILqSt'(1 pt ,a8əO}ϜcC梢 4 e>Pst\R0@ u7/0B^7 ٝC*-eC{O){m ( "B9-.j`QsGIo3"tPN]) IE@8LMhB ҉AVmUB:*UV5[pݤ\ӪEFUJ "+_!YGY lvm1j Rp&T61.Nzda[@Q6TZ +HY@laHZ.Fe*[6 mᎻ2 R!Ӻ5o23Zg VΗV8R`FMf.v:46TAU@J #d6y|L  Ԕ$n"v1PJIR|rӄ-~v_fpA,vhLx!֚1MlVgSpui4N+$u,٨S`CqM:σh99әij UׁT-z.eE cȃ41xRPZ^XOO٠!EJȹIMwۃ!E(B Qov"tRF ժ6vY(z53A lp :h}lm0]nS67\A|̤<y;G!lp7p/ w!qx)B-q"/rkvHrq4LSL@4 Is=ρtk(G0>򠋼MbrfYoL&yO,p P6INCmww}}x#`׻#x wޥ?}v_PU.#7Qz=z za{Ϟq{Y|_|/ǔ݉}Oշ_vVo7)CbS!bMDm̑=htE `ISʡj]١F:ۡAԁ wi9?7tHͱl`Eivq3Ϡvo7weVjuJWyJvɑtIG| G?wwAwluUWwZvV7PVvwz 8x AL)Q8s@Up! vq{S0T r1)-da @qP6SEцqцZ(y񈁸8(Ʊ8}X``8|QQ 8@y(7x89y @wՒ&8ՁWY `Oç=qIO'CQg8UyY]O (iAlyyyqY{ y yyA!U ~@љəVM(y鹞9!; Ʊ㟗''!+ҡ%z)-1:5z9=A:EzIMQ:UzY]aڥ}'b!qqzK@}::5~B(yz:zE:z祐ڪz:%( I0 ;˺#0YSBu%:5pM­="E"@ K0@0 p 0 $ #}Yг5@': pZ [SG qзi[ 'ɚ_[!; 5_)py;: m;Pc Cb{@0۲C׻ι?]p?{G;Wp <[Żѐ#}1|9=CE|IY"Mj$$&` AnnCo#R /.c$a ~aA 1BC\ Ԝ $Z%3 DC#^|1B H Ƚ@1NNaB!MNa}}4. . ,\O*})#0u4}bۑ8t1Bt+z #& 6O".` n B=ʠ4 |\ 4b } DŽǤ@ EB@ (1 ].)0~d!@ έ$ABsK 4!r%]4~`*S!4`9~u.bA|@j䵁 <#+J K@R 4b d_"\wx>!V{B + Ҟ#|j+! `BP`& Ӣ@ګ$ `>8 `,2b@ ؟~$6!!A"♳3 "`(5:l bć+Vb! F E'<2ʕ,[| 3̙4a Μ8E.ЦM8<4ҥL:}(0"xBG0 Pĕl۶q`*oVP!\oza„ "uyŵj]` Mڠ<@^*x "a t (~D!Bٲy@&xڷWn 嬔A 1Y+0A<s$kJ))mۈ^3ۻR 9X2-(H2@`>%UVaEQk]GA^fP[  YDUNwIW]G(B$Q p>LAAF~@$I|lF M&c +9%&<29&!mƗx塇g~ h>RM)E1 i.eTU]CO2Hd9! )V!"QLJp4. d,e&{7ф{j 5ljAR9e010J&&&HҀ3.[}B LpRt-HNL1ijm1<2#q (pK HarM#>l>PC<$xy1n3M"`c"(@A-5VcbMvfdTTY d(PqrXwzw~ i?^Ds.Hi?yONy2O|[z袏Nz馟wz뮿{^ݎ{{|O||/|?}OO}_}׎{f~O~柏>^>O׏+pӯ p,`zƀ*p @C,28@. ^0. -n+!zDœe _()Oz3|R  d<`2hL^gD,$*q@+RDЀT={$,anXt%Y[S4&,',K߸7j"5)2 g@yd/ XB 0JB`j5:g+#qv%LG'[*OҞskD:ϻ XJVg9K^uD "ϔ(e1U1 ,҆dȈ}K$ҁfQlRN!B'.|xpųPIgB YojR/s2 n #EZǐ x,}鋻W" |[_y}Ez+YkNr]%d/ 0eKY,hm> $44ZVqQ.1`Ջo YD{;JiJxn2wH&Z1H aqBx}W"س73ͯ׾\g, Gml͛D+.e+E[?+/d"Nu*^,3Τ+ :$[TuҬN"dx3]e08Pؼ(v$.1d n hK{ ]=#^ņ7Y/zgUs.]Tv3(6che@@%D5B(+|D2Ӛ1XHܽS/nZY' hkH 'u"CgGFn_sk>Pˍx2,Jle^2|LozӧERyIyckOz- @kr He,p}tԭ}| ~/+>c@t(r>Ћ>ݛOԷ]Tr>Uj~?[r|Hr}oK9!,l UɗI!II @(+5@`0IS%T$#3/ Kzp~+a3p}bSG/Y'|Է2874'Q#sR" } I  %=X~82-)C 2AC1E8O~>030u``#[؅_G~X@Pw#Hj1~(g"PG2T 2 PpXK022%G7 aX&<؃a_"mp((F"xS>V "L؋2z w 6s8S[1U՘S{X(H9(02EyE؇fZY h 3T AA'%xV8W `e .p@N~?d?FmkP#XSWgȅ >9@MmAcŵݡZ9de\؍Sט7[܈[dXi3AhX\k){wY  Y#+#S0fgRT @ p.1e $ XSEP8P6p7P6PxQ#T0XNJ*j0 @ I։ɔ,tpZ SYrr_98RfSYdxI\559ȖF5dtٖaX)'L8( 9Pq-((1| ^ ƙ, e 0 0qAp( Yi@E@P> rp2IG+8)(:IJ0_څI(1 0 0a1qDUɕ{z^[ J@v:jgei0Ƞ7}}p ?"1S'yx*m- ʖjm`+""1  (qZ^20iu"; iu0)@ Pךۚ5PwZux3Łʗ(A * LiA0+=Zj|#0q)M7]qaX+azZq1 }8jdJzc- 1+#|zHw3k6/A+C7ڳDk0I5zMO Q+SKUkWY;>8{+u^aK1IeJkgFK^+&sKKAiy.AslEnE[V;wȍ` 0Q{{9B'K1 nUn٧j h ꖻk+˵m҇(#sdÖUfXe8d8UKfܻ[1 J[o#1S9˻KՕkƛțk [`Pac%ah Uh̽kBۧK|E֨ ꋿ%l+R;cG@aj5L7,3,7k? ĺ,lCM"ĜM<7>Q,ű3AnY,P<]Ť33KIQOA)p`ZMAe_sLulwǒKIv3HHjkulL!ǏLɕlɗ''1#dU+Ap%b}.sAʱ,˳L˵LƱJ N񹩄9Q4@r A`XlnÌ<٬ar֬,1 %1,!`  "EPGaPGv9 lLЛsa;t, %8K<5 k @h,\Ͱ ]@535? -Hq6m=9;L=I JDVS[-R,]^.mh㻽aMí h<`mbҬ͹џlF:1%}c+k=)U]]=;F]}=ՓԕE^ Ք٘٣MN \frPϳ`}h=hs}u-b׊Suuu KMC}0iCd6~|A.C.,n/W)0{-O+̼Jg1D]ll)k׷50kw3Y2}ac|MA.iL"0HZdeyq97!=)&u+MbS1~r)~EÌ+aT@V Ssݍ= o],nٍٛެ. - vӽNnի.>!ONM޿ RL~G>[нJ!e#@.W5[D]?.aպ1.;l.Lߗ PޜmVR;OT]<PUM <|KɝۇmJK\4/Bִp-]9>Q-]բա>_} #|=Z.꧞nu n?) QQ$aD {I; Nl.o/i= }   X`' `! NXE5nQ ĨI)UdK1eΤYM900O=.i P=4R(NL4mVY--6ۓCD;*\y_LnŏE #]ӨSEe5g,cC5m$NY!Åj:Pdڬb-x\$/ޕ o'^8J‹nLQ@?**ڜ+zv'M0\h!]^vE"{? O> 4@)9 8|z~Ω$%:"z 015 =L6ڻ,>J*-@ PH4H$̋Ac ȮI,`&K ¤K%i­>,Ϳp5ts2N8 8m6ۚ2Vu$f6N{qropk!G@ƿYQo}q-no{=- ַqrRlmJi4  xʃ+#΃ HmҎX=o.ʎ8n;$ WC,p#8D`KwPasOhh?=QF_XqmvRL! kdc eU%<"D0٣?vQr #`蠣2I`f)8vd%-y / c)2:Q2dK^KΒY SJX L J2PES3 XN g4+eLh#+Y%;;Czf e@0X) t&NxZr#Wt>I\ff4ЬN@`,C Ŕ8&AK@xfTDڥj 1[|\`!1<ɣiD2gra } '!a,%jQ4|V^R$D! x@%6$i̊mvէA4j[݊*b*4hiK{R d<<66{e}kc+g!8憕zd,f=YD1  H*#*UN‚Vuh!4Y@4 )b+zfli{\ɶORj&qOwCP8 s JЮ32nr{"-ws>zW隔cn!> CBtbM_ʋ^'8]'i)^# ˇ8 AMh :|M} /XX+fq:J EN^`x|¢Ts |dv-*nq<[f/ "+G Bx Bcd4JQW6R$Zj@"%Gsg9_Tqtш3Zы@  1 ]c DeFhP3I)y`PAVC611yuGmk^ܠB7%&7ƒU6&>ANuk>5-l䜸nε [\ð-!64 kD&q{ʄ>9lH,F&6 Llb厈"Ԁ# ~' _]-5|0U%pb8K-/D]Q.`D׽F=Ay~v]kg{v]s{~w]{_;$@eDeꃧ{nDzT>$xG^|-yg^|=?y VN>T╃0l|m{^}}~_?ve>LKX5k9}g_~/; t/R´ͯ^wjo{_[ 'ګ,Q:4 x@ p!k"qS[ 4AH?GFGuGG Cv$H1/WC(S=SAHHHHHȋ H ItLa/ˈW{ˍHɛDI JHJQc?c@dAcܫ%NMECޒDP﵈M06ޒ$ӵQ]U[mf U^UƟ՞'?lun@C@( X#8)$΀hi.L{~^nB0B嘀5qKZ=q4ij@cNM#NH9R!xA@^6x5t bN t@2]^k~SYQ_jII`ńP ?. 7x/,6Znk˾w&9kF<&,(*@hЂ>l&9$ȉXn )l>cZզd0R$4Q, \tݗ%}6 >V * ^ m( m>`t)œ)U/vVF?J;ׯh c,*ˉV]&WS7vsg:d7V_ +e灯(5I{@%owAU:w?tJdQL w 9{B$CX?ՙ_%w48 9t6"`?xhIxsY Ȁ!S Bj- )BY(6*m!wu/z#0sRfWqyǺfх"^s沟"`grLzXIxcwRr-.;&2v >|mߛ '+Ʊv˧ ]o7r|@g"X{=)2$Bgc;yGӷ}XJ_uZu\uo5_~Sޗe탁viWz_ZDZ+HTb&%/Cf^mʀ;*yOQHI׺X7]Ex'aHU8]K]su*NSw|JkA,!2BaJUJHNk-9*2(`@jyDA3V;^g!bs|;E5)&/>5-A 8)9 /7򡶼י^%)8e V嚑}Q*۬G(4./X~ :|UҕiH;>|D˩,AZ>U`_suڒrAl v% y A n_r @ p@ ֭_B O f_  `` La a"a*2a:BaJRaZ֟T`)-^yaaaaaaa2U`>@ b!!"b"*"2b#: Rj$Rb%Z%bb&Nrb'z'b((b))b** P*!b, +-ē,+,6$ʢc1c"#22c3@b4J4Rc5Z5bc6^b3Ң6A@9f.:c76c0.¢ O= 033B6d@ @dAA+",7dDE.EZ$6c;.$,6$/#A# dJd>cK?"LdMMdArcG~ jfd^tRguZur#>Ghfwzikx~gyvgn.#BpP{'T|>:SFu~g$7:@ h B"h*2h:BhJR.!bcrhBh⮐艢h芲6hhhh¨xi"i*2i:BiJRiZNbriz闂iKi6#%i6iFi*))irh2 "j*Jiz)F:*/Ri_Kn¤.#Vꨒj2*cb~򣬖:):&2#>f.&j+*ejX"X.kc~s6&X:kJ+t2sjj6jsW*k2ki6e*j^J⫹+zь+?Okb+B**flnkjvkzl3jjzl>,*&kl+ʮBl&k3vN+,Bl쾪+tnBl\-%/6"bl,f~홮)s*.淶*v-6n&l_6lYmn )B-€mBnJ.L2*nVnnY>nnکvn뺮@nnno o"o*2o:BoJR/L`ojrozooooooo;PKo*PK**A$OEBPS/img/chap3_test_install_005.gifOGIF87a-v$&TLnT&lnTLJTln$&$JT,-vI8ͻ`(dihl뾰tmx|pH,Ȥrl:(S"Zجvz*.znk|N<~{DlCiKs^ӱJ qn?q&((aྃ8 aCHAY)dpc Vd8 LP7c "0-!t5|p G  C(H˘3N @%ttgԜd\ ̀{aϱ YA Vz`'_ 8-Фk1 87Y1b w1 HOBa?Z"V=:@kc5)4 ֕%HLNA 4G'1iP1v '%3_ rQgQ6gc׏l_o>5X}WTP^&߇rj) Th T4& 5UPm#%Ju:ہ"hjH# EQ8%$m饎PV r)Iոh4aFd f"R& 7%q޷D4U`4c: wNTI`|bG8Bà[*E_8H]C)砹*CR C@N4|-7az6F6ZZF;% *xTV(dM;VAPyǻt-[V:9nЎo'<~?/OoA_=2o}0/.o~B՟~3)//o?߯?K 0'tK:x'H Zd\yz a6(L GB$| '010> bj(">FLb&N՘(*6V\Gb`icPHlFgTIc9Fy ҍpx ǏpT)E@* 4 `@# 4a0j4$RC`]ȬDBdNr/& BJB&(]b> @ot#*. pfeĀ(J\@ٮeҀ#:o.3) Kv,؄&8Ip%zhM5kr gC* >!@`ـa 9+#!pB9ʕDT\'qB@t'$ L;.E`~81eT= VQ:gg6F]aJǏO Xe2 2 LLG<&*tVBGU%5(7ETib lLT1JVu40'OhsDm%-m%Y;vRS顭@[k:⺖C)o1ҰH+@7zt(NEB$YY4:qj2iRym~Хn"Ў? R׌P@te 6Eԟ25i$K$v\E0JPS=Az DĴo"2Y|ڨP#?7j&NF.Zs $F ܠ䱬4d,+^N f-W~1o _]Wd.{4|=w ( {Im+ .CE3~t#-&RI4MӞ!CQچ> Sj|5(Yֶsm]Z~b@bNf;Ю@;PKDƵPK**A OEBPS/img/chap5_test_emp_005.gifGIF87a$&TLnT&lnTLJTln$&$JTڬ,#H*\ȰÇ#JHŋ3jȱǏ @ɓ(S\ɲ˗0cʜI͛8sɳϟ@ m)pJH*]ʴRNJJUPjʵ׬^Ê,ٳhH˶ؕEYitл1;T/߿2,xvO=aKvyʖ}b*O޹sҦ%N t5뙮_CP"ґQɞaZJn{6riɢ8%&5%Kc>@fo:4 4 ŀ}B(K 4jَIBŀPMj^f=x6H eI U&z@N)|4@ :Yep+I2hfJmšJ*-IZnkRjJJjo! cJQjp*@J'&EnZ+iy+*Ḵ,+@ruZҸ)1{J{}ZkR 2I)0ÀIM?]ot(ə1*}nI{r\)I {6F2|}) qI< t 5z6Jo-Řˍ|*w\&GڸF7~zkvMz-,#qN(WާKnۣ @}$I L̕_Or)MvL. 0@}w-lW6)`]ؒNߍyT50+iIJT GMR@ZUlfv m>ʙfPұp0]3PV/5EЃ9 MLSE*F^ܟ67/\ڨ5@YYb?ݰ}pm-vl1D5J"dbۼ4$@bQ20kL;ߑ~$% QMeD$ 1\0;-?>yoWN% p$U ΦDLKBS۱G+eBjRVqp-ZgZV\oԳI(l$>0X P MĤ7[[ p+LU*ZU1&ͩNVy UGλIqTڥ>:&Cs h4*-Teh5k.HnIq;g-yI״nKUNvFՐ#2M7m Ƚ:n̻,7HX{;~(Ho_F/vlOʿ%p]T~ae?5~+;xZR &щT4G/r1\c1?&фa$wA2kg3ZeL&O|e,An9bLh635b!x3v>π ?14}hE3q4'IS҉RMoZIG=PԢtUݵNԯ4; ϬlZCs4l;Ͽ@Xl@϶sOk[Wׄfv k ōls(O nk:Hp;R;'{Fw}@@Nfs& we=E8CT.e{3ro9>䒃寁sD9Ynrwִ_r'T>:Ws$]B94s7}>Ogu_]Q+Xt> R/ 7:%ei{Rd2g. p˫"+"F` IHݻmwɎ( h@8>$wTV0,Ɂ>m_@A,o ۺ}zZ%y}.% : πw.ƀshyo载2y;௝E`joS hgY[hg}0HH20C5~V4 ~(0v}!xv}cOՇrogL:+.+ւLb~޷x4x+#v~9}~#2KA~>6SMVW `C1Yͤn"8aM(;(}R .|1,=B?ckp7{M?Wu(SsVm')4Â7c'{uzKu.X@X>d47agbB*+P0#'yhRehchBVmC." P.AjvHW2ōs渍Иx(nXH}b3qFgIȈ.xi'.g(g7Qkx}'qx-i5oow︌X)'! jGABxJ)vj]yxH瓒6%QrhKדMژGx.w.ڈMQ+ L,6giaX`n聲xxo0O'U)U@!sqrH7C B8у0HPsRЗ}Ƅ9,9WSc(y<8%:4x5YvyѐqT](},5!W"E2GHLEPB,ŨF5hr>X 黿$Lk& pBRVC]@<2`3kG{'3N&>ȦK=[)P}'ɐ\w$y\ie(Eilp|,(t쓩ɔ,su'3ǍiLC<+{:|B90<{Ь5LFڤ]vMǟVCQ˅7ٯQ j˫5ӱrx-L؇-m}Ž6A?Wv "'ݓQ VT%X]]v1k'ݳN>{ :~4~ $^j(⎦,N 0/43^8~7<;@?DC^HGLKP.OTXZ\^`b>d^f~hjlnpr>t^a~sWnz|~>^bf芾~~阞难U:^&;⦞J긆^w]ᶞэX-ζ^̞^8|4xrH1 (.lg,yk)wV!MȠОgLDXCс W0 J)̛j,$,k"Wdv9>d/8OhN 폗 {03R(P%Z0-Br(o?i90cmi)ςx{>È)inW3LoW?Vd?B?yɒl61JSx,XwI(RogxU?WHhMJ4i*6 jYy 0rkޟ[lђ.kvv"ߙC2y{z?}3$̔/{)ӽ3bӺ![iR? =Y>??5o_{ߛ_7 d}y¨2ZHx{mO( A .dC%NXE5ncDlp0B "a@ _D@ $Ȅ ,reZXP "L:UaՕl]p2BPwFP+WHcZݹAQ[]y+"E 0L5*娋 yP3g/o ,51HK+N Z!קmZ.%V?Ԗ1%^qɑ,6჆=G-3]\ZM 9`u@/Rzܯgȶzvv 0+/)tA#iסOT-4hװGV9y*p߷row-zسkzOMon}j;)#wyQqg[~5g߁PGfh!5[9Zg]%&!]uYbj("_7!]fmX~' s77'AY(g#bg5"LzcEHcA5ju n`)d9 fl6u tix:%g`&矀&EAfI衈&\裐F*0J饘f)n駠j_9`8SDT=DO%+M k(vtIŠRqZw@~~IUprV(W - "K~;, D@YI0oE ;k0|0Lhpnf jIg+^x/-ulAKSr3 8T=@,D0*|F'LsPGRWmՉvdYq$ۂauȠ^=Y6s}+!ms]ҥXqCطy vpfSHZvxdGwF7x~%NXmW!騧ަT5?-T+E{T.f紻R||7:M-M"I!GfD]>SuTkŷy-t Ht/`fgU|͏, t2c"O}[rm>`V0uӠǹ5j[ gHCi9&LYV"(lC!%l"ܑP<,"KA q#H-(\PC"v1)$#F.F9lΝbU-t5t $U(BlC"ȣ5% xd &ɯU $!3N*k (/QY^8)zh͐7kr9ZҒl18: 0bO2K+p|f p]DPJnzN8YV&C>])H3Kp7&yzZNBIssaӠ+&APhNn]\(HAlpՌ4yMg:Z*!蟂prΤ03238iBv թPJ$HMꙔԦNT+թZEEjR``X&(AZ @ (@A $ (V,_5%1 ஍+A(%%P+ZMPVUBTԂ5 0f[z㚨G'JC bƌqȱ 5PvpE1^eF"f3ҭjvxfgR3<׆5nVKeBTa\IPpcy<ҨLsLGz>t"AzE'3tlaLHꊂZ 0sM[rL]i85SCƴ9e;[~i[[NZ ?2 -rN-v6A hv~Ƃ| eM+K 'heTb d@'ί}۶Oh|fra\áu{\'Ah 0=!j6tJY^|M@NF$|BfkoD<~s;=E3d ]z~_N%|`:NL1OYx~%;_M7,+'S|G ;^%>s :$xSlbKV> z@>v $O dw>ESUIc<EMM8D9qdQOR􄊄P&ELTnȄ$N? x1KG{f|igd0D5ro#i@4q׳-/i6؃(+ 6Yc {y<5X0T+1J6 ҉ȌTԌ(XI刟곏y0 sy)8I*ӈx%y)AIqBBNTٝ&J?a#VjChRjPdUDi7 + Q汱4gAFgz6Qg4gz1۳Xhh%g):)69$EOHyy(Ml*V IqƄ(&S Hᲁ FtضQ› *2C|+e]ۍ+7JCo%9ʹRnk/G(QPgR+%ȒE1 D[k;RȴR>*L+';Aۄ )Y55K5Wk;2Z؛&˝['8'׊K);[{ۿ<־{|t9|F,BvDv"' )</@xI/-H4L4 |$.A<;%;NC>I\YJM4Q,j*'/u'&"P3Wu2R-ۦ1'2N< }\$e,#kaղsvH.sG>Y{}z,' yp1VR-KhtCx1lyVz_lu(#07أbʈ%Yv3\ ,z|1ƑLGи+/,-|YS4{L ˧-u'q|0xǜ1Ί92͈,\{kˊ%<>E wC\ Ϯ4"tŧ, J~3< =W&~i{Lbˣ6ϋf#O+ka֟<s3+Cwf"[K:(IJԺ|u)B"}KEl[Xm͆)xjȞ(j;s}u ʍdT/-SKQ 87"kF$g@?kjĻ#k #شk]? Tڢ >y O4-߄)}~۱«ۺ5B!u8ύMM&=O,}RzC\r޵," r3*s<m޺߁q'Br#mN-  Z!r"3Xi"~ !3b*-N.we+錎%*R|q*ܢ--'!C|[ԯ4@h"@ptXmΉrt3v1/, cyi,`~x4p/[?~еcu.oqtᤎqsa]!*(1-jxޒ.}X"b@ nAQ؊85 :c3(E$ߴ59i7 h!YfH.>(nyzR~6M&uS{m*6R'U+%ӎdٚoev;Y H{N44&`QPDIԫ-ʤaW/gER.g]$؄5Œ;2JiR*ڷwYaĉ*TY҅52eu弳SN? zџE~L2ɮ\vk4k&6pfv_ e/?~bѥOyصowŏ'_bcկg{哼>}0zp@ 4@DpAtAS0B +B 0C;CЬ+1{/lEj1D.n-ڒ#RVj.#ͥL#s8ުH,%2,˪R5|sLRN,DJRs 9m4HwD$& AC/2( @"7!0yPҜV! ܨP *pt8#<4xH!1H|壀 XNL2IPVTIyJTde+JWR,myK jK`>f1bSN2LhRQѤf5qfMlff7yoS8 MgSˬԱʉ"='#9 ?a3:eφ4..1<TC"=TMB1t1CjсjǠVTeR-VL0qKwe+ L%E*T`ӧZ+iC0 4e'GT25RyQh3\U].h15BKJ"̊XBU\@6҇ PdAR+y鞒`&)HUlׄ2Jz_XP+4Q?ր]Ty՞(Q-gU)vO=%ZOVhT"*So޳>Ws+n^]WBVa|Ξ65/Gͦ׼ T +mdS)ڮl/ΡףRŪeI֧ztQub"WOtZi5` ŤR` 6(< kW[b6yTcT6o`\L>\LafE~T뙳w'4: ZY˽l.Y̭ sz{(VSZeStyar&Ou3Q 1Ǟ3dZ,)nAYwו4(-eM%o>wd녓 Y;eֻA̧V/ҸK]TkaQJYǏHm1js⵱^ύpk:ڷu./Lmw&(gJwj7\:*7e]l)%p~`L7\?ih/*߽prލ]Y[[]o_%#<`&5Ç/9D>f99vsA'zdž^t[IgÖtQk^u<[Թupycϖ~v=\ Hv]q^w]yw]' _x^{%~u| q|.O>忕yͻ:|MOҟ^^}z~\}y^ʴ}3{~e|_ g -(}ib_ _$ .@_|17Ӏ^wmL `?Ѐ ?˕?ꀿ \0@P(P#cAp61+8AblDXXH*8 $ B#4A@(@, 0BGY <)@ ˜Ѐp`8,‚XQs#A0CC?˜ADC@A)lAsYQD.HCЀ=@|DB/T#d€ hB0D -EZ|80TII0hŦ` ]TưhFEŖB#]pDCCTTTA@FiLkEHE`dPA[]BDFv\0QGŃEEqF0GvG+ȺFo Fƀ`FÔHǙU Am<+pwneEjlȜ(р`O@hʸsl,TL8| J)'W+ʱD_,zKʪl_JLT,ƉK˩G̏4sżKEUɛɃXŸtt,`îؚ|J,MtL͈EdOl\Ml bAlĿq$G͈Lea͘γ|CtJ)AdEPEdἊaF M,TMxϺd @N&: NKHvLdONN.͵OO򄈋HTNJ _Dž,.GJtʺ|/<P 9@dl  E8$DpNA4R'6 D4RC- M9/` 1(HLP\Ip<d%RR.҂hӋHO&mR8 8u0SEA5Ci>Eݚ$Hd'BO-FLL-VU;=mҒԏœ M䔹]0E_ >̥_Vi~VlmjViVn]gVlVq>r-W;Wt>u]WkWwm>x䫔)!dZ˃Wgv"yV W~3x9y(*ʓ+.}X@XI"ˈ5F5X5Ji j.ҴMA*bN3Y&YaSs-Ys7ZUD˸S b,( cpJ,h6 L);bL.t˯Z527ZqZ^Yz,`RjXD+*mKc6[2*ݸ΍ 8y[ q7٭Eݨ\{K7ہs[ U]&0U]GЅkeoU.c9Ez^WE^^vEV JU _4Ď-Ux__-%X]<5@b@%Y`_̆4¯DAtC`I 3a!ɬ8,a\K=u`hEDP6@6I~EFaz\#v+ D aFa*fa"`/aXJDV$tn8V( +NDz<:ՓHQiAaOiEua #cL#&c4%^Əi7Jj@B]-TN.2Pf`29e`ɚ5ސleYNeXVVveU~e {PΊQeb6aed#ep[pd De`fbfp.['2ߌ2\}+ffUf'~ceRR>go5VˀgIrFhzfe~z膎m@&+fgۚłƶ Jk_h|ۊ-vt.b$9V k)~n H곪F 1pk`lFlHLMjxLj!R'pNl=^롖 Ǿ@yQ̗%^m=mSҘM3rZ)SW nd~T^5X@cXUVX\sX=4;73,-F٪޴Y-[5ָ*odS[()o5!2-ZJڨpxIc*<,Zmص54~>`> ݓ7Hos[t6}}6]Yo6/Vܽm/5ӭ}4`7~NM TېEq]g~ed7]q7ߍ^_Yr2Ur8󸕷7޾EoŒ͸XmƲH+qK9NunQWC+vXVǷ733mʲz 3[>Vum>{uUؐC` éq~AIkG^v'[)K ہpZX[k_*[y[뙳ZcegSI„ JmE'zg2\s _vidhݯqMs)%YeׅsRToIomd;7ޝ=69-6S6m/j9t(yq?[=rt'[xxjyygyCVnbӿB_~,X k sNW–Tu{_P!{oi{32q'xYBr${g9w|{\[tXv/#u=/;}?;_k}:؏}:ۿ}}݇:}}G:~+~:xKP~C i~~~/?O_oO12,h „ 2l!Ĉ'Rh"ƌ7r#E@,i$ʔ*Wl%̘Eʬi&Μ:w%͟B-j(Ҥ7*m)ԨRdJ*֬Zrj+ذbǒ-ٴjײm۸rҭ+ݼz%/K0ĊM^1 Xw76V g5m]EZr]U7I{토kF*$n9dɃ/n3칲 |՗C}wջ?_<ޠ?7<{˯^[?lthmew Z  jb 9H `M5]"U]gzwo}7cAwA1&r!%Έd2JdGfؤvY 9Re=)"$zc{8g {{c&b:!oF(舍YR~GIjhV&eBIωz*DG:+z++,+ ӯ{,@,:;ӲJ;-E[-2[z+ߊ;d{..ڵʫ{/W/dioG%ud/pZ05UL(P-mʜSwؚA4VQY$2ꢁjIw_;v首| f>`ӃQa8E8t%az#Va'z! ^3.|V?HҋI@(<)S~g4*!KM>$y!f( @@, 0 i+5`gTF9&j{ @2a SJ;> 餓* t@$ Px)nءgr" h:b)tAWjI駻f,*%lЦ㲈v>})H黖 j )I Hز)IiÔ\oV v,`Ȯ1d TZH/i|sI5sUW~RW:;dleUMM~2ְwmk*cӞ5D` c?_ezz+IԄ*`曊 1%'pNq0w (1 ;;,t?.eiB74b>({ 6܉g[w(-4$]]\ ,NvraT,% x,22R+e娈{ {g3!iiHq2I , OWcda5nreT &5nk$8Ʊt_+_e*s\#L~0\A 7p"LU3Y+ /^͕X S#7˙3D7ϑ̍ K(A}θ3Z+71{ɞ%E4LԚI" M:gƕSYB5KdǾ(4͒U/4 S *'VjCCEXz,zpP pպ:-ZխHݣW!)Yz&ajNJV8& V"SAT"j4Cbg e̵$-"X]\]-[ھpJ=ZǷn:ʳ(j8+O H ]$W@.j[!"׻nwNSE%Qz{@q^¨W/^ J3=~4*ۍ/`8q Vos")xK&n հȫ\ ^PaX֭bxC7Չ;},h L d929%;ٿL XβL+s`#2Z&36n'8x>C3Mh?ЈN:H:ѐJ"J[17N{[R?S6߅jհ5[-6Zq]DR[OשWlb#k6w=_φݘg7VɷnmNldSfwQm0% (I^ yxldp \HB>}0 =@:E+ 8Q~(w((x%n Bp/j$Z8Kvqk1!:\Nҹ22͙kSJ|>~D5^`}^Rv5ݫGl?fV_x;[ w5aScwѸ@IUZŶh;p^/X wp|þ}F{^?@|-T x)(k]BWyL2|+xP#xwPsgG?gr;Tx* ǁrLVTԇ1p'tWAg$<'lgooaw{}F^M{SuH:H}@B8xNKBvN8C 7RJ9ׄÀoGaHp :##T VJEHpwX0iOw疃YxqrypCPBsHG-l7_Wl+GrH-tAWdvPPgԂ@6$(F=v~(8t{#Py(TWzD9=Tx3=xFJ􌆂(t*+({w/8}’o;tcgčH&h#ǃ|kY%z).QvjG5Bj#jҐc^(@B:8*JHJLڤN9jR:9VfzZlY^h]b ha:fgezj*ginfmr*fq:veuzzJey~Z`}Zp@6)yu쉨Z Y//s:P+BRzBj'Z,_bfY 6dE+ʨw^Oqt/ Ԅ),3t:+*-Ω:J66g:+AܪYJP_X*ejy݄Fp:q*,:ãq2#ѯ1͓η ©ZjZ7Z5zZvSMѲgԪFqp&p|[07kzRFc:[:J3zB2s/m5/PĈӴG"e7IUS k' =9AAZ;&K= 0KKeK|"?zASJTu&ju; $İ~{B{kK #qKbddr[ۺ!8W7 }+A'-G"Key[Gf;Jqİ[gE'aw{qԛf2ιlo{Lzһ ;JeKqPf۷8-U3BXKK+>P'z{3-9vfpPEB)kP(7J:8qÛRD@9Òsi<Ɨ{9ZAmUc&:r/UăKU6lE)0ʹ,:2q@Ω& Ɠ[(t|ŵ'x Cj&z&ǢX,e%g;pF;t$ ʐ; ;PK)SNPK**A OEBPS/img/chap5_test_emp_008.gif`GIF87az$&TLnT&lnTLJTln$&$JTڬ,z#H*\ȰÇ#JHŋ3jȱǏ Iɓ(S\ɲ˗0cʜI͛8sɳϟ@(ѣH*]ʴӧP{U իXj:rׯ`Ê+ٳhӪ]kv۷pK.vkrjJ@㍪T`ˆQNt1㟎K><ү]% 1E?)ztVRY4̮s6햶oF`7s {NK"O~7U߫\.=x5'׎j'׾޽ϣ}xӝ߼g^wI{] z6Hހ'!l^ۃF蚇 ~se婸i3Ȣ5>#(e_vߑءIƩY$4c7m,V&U 0P P  @$U%Ȧp:tꩧ$U I9xI*hTP*P+0 ZŽԀZk&*I `%k VؚDk-'n >Vd'E龡v tZP.}À:lӮ%@p(A[.h  1 >@' gqS௶'anƫ^,ƌ']Y[kov';{?I@ٸ`x Kw8nS?]9Zm2%`6Ujs_R&+mo(=zR6s=aT|Yb y"- OAஃ@ɤqB;H`(ũ~:ӀPY]QU7a [GE|Hk&H*WWU` @o'i&.,HwE)ը, Faڍr:JT~+\g UKr5&UO^'A&\x8UpoɸGFNPDI6X/CediKβuc ˈPS8v`ah2J2vaE'+R&D!jm,EjVQXU͕w VYB4Hz-IdGnPth,[Cobmѥ΀H)-FYo8EPh4[|4-kogwhk&vL^q.7H]sIκ6=nvܤt6u*m7MƍwT]C-/m[\JgjozG]N };sZƾ V#׿ތik`ex F28/1]K8~LBs:1L"YFN|4$3Pry,*[ʠ2.'E^l0hN36Y>ŒLgx3c>πA'eЈFFCm.q'MACI>0G4ɧ1jL+YӦ)B7UdԅvjNC֒Jpf]ǵY_m6yV'WʼnOlG;(^j:̸UW{. 0Gl{%nmD6@*17+-`(7JK p޻ķrxg5I[9vڻݨf*!o8㤜6ƇLuz2P\UE3 '=4OnͦI)I"5e*,h UQWf ^DS$cW o{QV\N]XẂ$ô<`0@JJ52ֵiGftbpJOD/z>Y_u䮸6_td)6o;ަgzG_{;|.)orC8vΛ=P6`ƵL9I.˽i9S>ޔ/c}J'V,ws#}wx}9Vs'z7GI2=e'3WUpG~J36.JWF+x.W-+pgx'y-o3>rǃ, `2s.JH)&F~с&",X},Ӏ} }mEIG>!%XV.5X~7.SFFA;DqMxU!sdׅ5'%8~-!(3Д/憉HW9#\px2Hz~xy%8xyʹxxf*h%h6NbsU79%&#GV$|5o(<-(T6>}FMxeǏ&nw(Vg8W~H&}N!~Yg†zrB2A D_XZG`!ّ@<.f4qp,y!. 2Yl:;7&HJLٔMnNR9KrTyXZ\IEyוbw6fvjlٖ+afp9trYx?qzٗ~Y|9+yix阐9_)yiЧ晠9&ylfd]暰9Vpٛ9Yyșʹٜ9 A$ՙٝ9)I噞깞ٞy#!yIqi]U ښ ڠZZjhjdڡ $#Z(Z',:+ڢ::*`8_v/h,VIW3壵T #JR-3- p`rB!(݁ GnT@ɧ},֧Kތ뵷,6cz`3X(8EdL@Y1P9!~(kdX`)d\fIXEOƉ~sIw2rVcd9&#8(+giHeUhn)L j橼R cc`Z&*,+]SbjiF'(L1j A4ZТgQMT.{Ȏf+ri+Kj摒cHVV>ؿ~I [k+RL,f\;Q~8.2 yKo,sZɦ8G:> U#6[pVsc4W=[ Ew`,vYCԧq:Guf7BP [Ȩ}'a̠"^#c:?8g, :X-ł f Dq{%`yNӶhFi-6:IL?@M̑iE,ZzWʔfM.]($@7xMJV"FPYڳUkeۤ* 6[4mbo9\nS6 \Ơe-mJ׺.rޒZV6ah9YS|Vla/" xo _//~Mވx; 7F0L [X^p%lw_g0{ FULb0}6qqc.23a _D0\&+o LeS| =e/z[XH\5m9vs,e&?Gr ІNu,F;ѐJ!MiG+Ǘ2Yȏ7yo| zA|C9(_G،p(Б?8:8S3Ñ8 09xRy< 渉ذ8h[(ˈ (zʨR酏)hh9JɇgkTP8U1a#Ñ!)HyW| ( @pi5 y [hh <@ќ)y 1G 8RɍЈi9k8 @00,yٕYZyfN)o #A ^8#!){颁9^`ǔ80(P/ 1"ɕYiHXT  fnHhxsXZgq^ءuǗ58 5(*{qJ)zVGK00/p]WؗzOZ8UJfi(bi zWj:驧8R 0{yI WG tE0ɍ췠("`QM#ړpYz"`$*~7|.몫ᩅp:*} QGAì}ΊX0ɰ;)A@٦% grJ"˫#z:|u{8  kp'(/ `p&5t7R}:+MS/pE{8O uQ;j}WCH6\  F ɴd;N{Ik[gK`zKZ^h{m[fp?9kty|Kdq w(t{k1?sk~#X˼{+x;wz{Kth* |8{MAD8AɩyH,u7˦PRPH:5 kylS܁ t: QO`F<y\~62+I'IX3{5|^LsMMFNT \ ,y :Z8J:-;[{]ŀr#M iĩ3_)<.I.p:~<#wɠʢ<ʤ\ʦ|ʨʪl鶂 pXK`=ƍq*iⱅ]HZqU̹`<\|͉ЙÉ7h.J=r'C fGdKyMԧ"7B]}[]]Ղ !'gͬ j lcqsu-w}AUY{}=f w趁עu}ֶׇM=‰َz6E%k #=kx}m =X'$ ՙNœ=fMmɽ#=um^]} Y ]j*g-3%{]Ͳseܴk;^hAth'J /'ܒj嚜}*:؛H6ōd ` sm=^GݙhZ1@$JdmR* 3s (ݢz- `1溝nYy:^ڥjxa?g!.6(yjxz>]^m{$^y҅*4LB^wT㺱H8Jފ##-Nz+ⲽKW!VɕWN%AΦ ڞߍ13-tY=Tα ܾ#hУ({ZӍ)6h\zOShﺛhAxY,r5L-IHXna"Oݑ()aɛէb٤a-,ZM_W˗  Z:m-SS3j_Lo|˰IŮДzg~x@J׏3Ō I6 =z/[ӛJϾ|Dz Ax-,:@\h-4͘y??_9L~ WԄMx q>o 8HXPX`)9I9X jz +;;h{hk[:kZK \l|\)K \m},H .N=-===YN|)01!Ƞ0خ^.J`A1Us DWpd %P"e ,0o@&2A @@<{  5A|:=VQ,_ZBfO˚U z:+B* ZbZv ŕ$^uDtfG@P zAs6l|0`@!l2^NHp6m dڀ& 5Ro[7WyE~4A;Fwv y ) 5}^r4zߥ]4 4'wQv`НY>_1 p*!h:Hd4hjTZI"P'=&K ȍ+zbvnhYR!Y# P0{5rO9ir5{D~g pդPAlx9'R"ʠ@+ZɰB/#;|="ljqw# !D(=I|}F zQJTR+(P+3HZCTiK0B4ɽ(@z&, L _&%)vEK%eRNJDpG- k\ /L&"XbS4BQÈ 6Ӷ`>.Ɛ{ԲsS|M0[IoS~bҨ (8Z0Alqx,NB{71L0>,Kjw=%Ep7riلfȰκ3Pe۬FȌx-o욘>.W܋RX$$W~݌1S9Gܸ[r<8;.)"gMWAJ)񿮥k&un|lwR͝`QN1wdPFQϳ0<s{ϔR+iW,f`o԰ܼa>q=@$[J1b3~iӓHlxYb|S,Q SIL΄ʱNأۆ=ލת{B&{/m8F nC\ǂ99Jn\52ij\or萐BL"Dsl$KY_k&JR}Ws,d{wY駳-AmI=E 4ژ 9fHQ}e|!B5\5)27 #~8?s")B4H\r{MQV%%YU%8Y_&%j|53S07(}'"){WjgU(+ h^Lf8=x$Ez5qRXp80*^|ZU'wCuU,̕@~ҥ^"* ~WzEy|aAW8#ka-94U~ab3 3M0b!SAix, d%v@Rm0g$S$ngAb7JwHXlJraS[2zi H iusw^SCbu&r8wqxjǍGlȌHx&!g7aH帎؎ `FېFȘdk8uGWGJGc; utHdu0N % 'E4@MWwwfn #(pcoQpDgK}yK%KYw0 5}0q_ W-wM^F \bR8A=8 M'fN)NJ9 ttUOcOP34PE 3á1ԓ8ey˜!$OYQS#N9cP r!!9`ȗy R*8bHtv[9_UvisXE%/q]1nfmƂYKX;C"-B(i$&#xLsr'K(M)giZZȩ!2iE ^b6]ZCr r̤\Ƃ,#]B]u]LX2]a`a]23`.2țǟPW1Kp1P Xi^A/頲Pf8 0g牌Y: b\"ɝWO66YȏKzQ|IXP\",UڝrhpdtǦo:HqtsJ|d2yE{ڦxk*קjEt]&wD <>G:B 0MJGIwGLǩU' > THu- uB)iOɟ>Saw=J7J 5\}8JKjɪq]YJ1ÏRI1K5|G`&P cw Q' V犍@yiO{A~b~N TX15k7$dFȩ5%%ʪQUy4 X" 5)B-9fc MqWRZo5:N"D Ҝoi9;bkb`TTq`Ġ(iN؞-($r7bBX"iVq*)Zijk(oLm"rx;1?EhL᦮s&;nY..R?ی p) @Xa!Rsb BCQ:*H0G1#6WEd ъ0HJz@֭|!oav&Wg{6 07P7 [-%qbrG 0{`jt0-1 љrQt|7 ֠؄==@x .P^TiM340d2 Os~41Nd6XH]zFF J $miלVh,Z"!`NhڈJ-$bmgʬ L*B?=e^5jY5:&Y%.&>H3$#?0{0[kͤx 4>PWt+3A=<|c.}ĺHєag){|.~N>=A.¶@-0ߦ0".Xp#&fMxH.]35 2$ 倆ӛ0#37+ 13d%mP Hq(1Nj]ګ8Ep}EB!2Xg} :˨~8ӑiJS]P_9eO>eg ߆*]>ӁbO&Z_afmo?Zq/>AfU;wM1\t vی wzs:t#Ћ ,Gt\b.87L"#KPJJTը8;TA3pT7_g?Y ^{h쒐[f&=!ŵ_ UHY. 6308maQ:t13!    GG-  Γ ʸɛɅ@ΐ `%e8:5GSIUA4i@#;fLT9' O_2I@ag;IիXm1hhZş<; *࠶]Bc*_JT$}S6 j"p6֑ō*/qϠCV/:%NB6YG 0 < >xaꬷӝ zl !`3g7 ;  8,.,+oy9?.8K@sᇽ|?/3@07lg&3b> ^"Xw܄G׾1A#y5H -~EF%=PPl 3]n 1(A%R0K` AAn EHDІ(L#T VgjT,PMatx-Iz" Nv"i@@LbX)`@GK"oDW9Ҕv(Ř)X@ YI©Лe*cgN!.eeX P.`<"$d"'n6!h9LJ%+QIGo" 57o\ c)$ (e2F^#iPE4`*3T17aZJP7Ih26<)N0KLPAi3"աxȦթD i0Ba7OqH/mpRg)˙ne [Rz>S3b:ͲL ںn,cOZre ;J~Զ頦U]vSMt{.uY_ͮoKn o4"s/+X:/+ 30zG sq, pq(90h8,{ {41rOvqVH,[Uh#X,"3r.&NL@1-;2ǜe/_̸3לf3K/眏+YjQy,hVz&4EYю#MNyʑ>t LczӋ5 j0:ԟ./=JZX>5_ k*˺дoVϼv=`?zfds.ueyֱlxnd|NvMz{^η~NK;'N[ϸ7s|GN(OWr0gN8Ϲt@ЇHOҗ3NԧN[}/ַ{`NvhO׮5gNwN(>0G9ߕw] w->|8Cy{m^)%g|:_/Ӌis@l~_?{?=͋pWL@'_3Ŭ 2o5sGz\Ag#{%A VDZ} xw :  !;7  B#x Xfb&2؀0tP~,baxG Ё6PqBXh&1XAԀ-Ń c( @-.A8- n#> Ⴊgt  69h8 7 e`.hN .J$BD`'0@VЇ.Cf" ʡ.hu TXxs(9b҅- a"(p,za. o„0  P|(>0 ،)s':!xqa8 'l!p&􀏭 Ї+7r"Bg + (+g PC*ab 0C(-t r`8zY=~0 !oRƂ C 'Y|Z&͐(VC\8@  Ghwis ™|$gLH) iє Y07|Ap Y}|8t +񉩁Pلi M2|~I! % q7Å9 y -HuᖘW@hh4xRI h00wy jOH  zLZq ȅR BxM"-u!BxvZhJvl , A˒맦ڨ'+Gmɨ⧎s*JgʂآzWy:4x 0j,z-: @0ZzȚʺڬ::ZϺ*ڭJ:GwZgw꺮hpjZzׇʪP[Y9 װ;+y[Vw۱t";>${(;s&,۲'.2q0;6{W8<{y=@{q:DC[H{GLK۴P{OTS[X[W\[۵`[_(+f[w8*jl۶npoKd#)ʂc[#Bzz+A~Kt|Zzy˸?:ڸs۹;> nf볤Ks  y 'q--5W͢%k@ X E'PpP &ǥᨹ˼"`껾PgZ+k )`*Y!i iMQqZ 3 +$@< 9TѻU p&ұ kH`[01mV|z2+ W-I;ˋ `@1L"p a+ ,+ T"~ܑ I:0א Udzuѷ`p;/O1 !*&LLx ~ 켌)q92qGő\#!Ɨ a~و\Z qzʭ04\p e˿;@̗!0 &ܚ}S"jͬ̾ |*ˣ' LAśSƐ^Y_*ЫPŁ&.ÜȶgH \Y &QY҃20[ oQ !*< " q)e(ڀ ϩc[Bͅے[ňq } #i+ Sr,| ]ڦ]🫠*֚ݱkxm+r NGg > so BѰ{69衶ĝt}kڽ.K8 =}s}mK){'ߚݬ=܆m}vi+ .Ѯmp^K OLg}^0' #&A!>q$4r!75&+@΀:D^,^HNuCLNsKPrQ^U"mZNu[M`^D  @-f7r>t^v~xz|~>^;PK4@@PK**A OEBPS/img/chap5_test_emp_007.gif)GIF87a~$&TLnT&lnTLJTln$&$JTڬ,~ dihlp,tmx|@U`H,Ȥrl:ШtJZجvz0R$.zn.9N~NtK%G% \ #E# EX-mL&F CC%Y"%E [" ,l$ E#DIq׸ǰyrIE-,tȱy $ C4HMجZ tX`EJT"-TpZˊb*jdJ|, JnfLZ>S5dzhA(@KQP%2@' l51M"~}uɽ{?cHx U=17[ŵ Q ĿPE B2..1` `6I!?CЇ$vڢ t<2kIۺ[͡DW p{` ܓ="(ya&B:j6`tR^鈔|֍}E(„$oŎ 3Rx{9s,@C؍P8c@N Ul8B1%]pE|59(^\ZH0 ̒DXYNaO&Z(ig(  B_;=B Fš$ӠAhTlЄW3 JDOZz% )>W1?u:Lf k.C:3G|@*h VPOkKGϳK ([rP/TU4{dzOnV@zT7Uj_1+oT`Jlp*Y'45gOM`-sX26hP 4R\_yAZ#%G(Ԏ ϧOW%!vw7E&xNplmn"{%mF PfZ–6]̀Bt׹ V{13W:6'|lWaW0w1{Bfz 0xִ"h.f28P XلQܞʱրlA&Ts0&\,a'u`W7;r&H ܖShZ3F\9*V4~fV& B16zB@ITZFei)t#ہlƛ|-YUu9"2tבq5>sj`֧dtTkhv4n{ЮI] U}Y~G$Us޷6nzwN[گpG2nЈ#śq# GN(OW|ߵIڗ8Ϲw>Te츏HOҗ;Pԧ>3\ǩ{`ӭn'\D˞9uxw;܍  z|ZR{x;C ӗė;yлa>Ԫd*Љb"K8ǘzjj5oЇk=RI$ֈ442òhUqgE +g' 8@|^VEoxe'm#'fy@Qg v×#5\:c˧pu~  oq ~sTt .XuwF8#@ffֱf&tf}N^ozׁF PtQ?6V@/XR7}FzVAA'P .}7b~ׁ -ML &!- yHhtXhdZX i! ^ x/LSjXNcp`yTt!xtet_z4 @ ƅ=ч"x憭 JT؋s_ Hpx[Neg7!Cd%A^_x@1ggz7 p:w(vXt1R،%wѡz"z|gvq7 﨏t&t:zِǏmY]'TEaّT:AwY0xqsAa9Vq.0N2pɒvcoBy6Fi3nJ)?1NtRE9VmI p]Ԕ$ao]yv:ُW'jI&hY}9I;f9tF&YO~Ug_=9YuWy"yz+u'E`zym1Q z)RyV{*{{]YUsVkՆu7Oy[}e~ݘTf~~`Yq` "v7 p%韉U] #Y3$fdvt!Zt`sA th (vd| PzB]DXک_hLHz)؟JzINZ`t`xT8qaܸV<ف(yĘkxLfoj` 4eAǡM62vjt" djwרvS3c-vAƊ 0:-1!dDCځ )8 %mǪv6c7E_Ҩe8׸Q׊`(~&< bʡ嘪mjo )64WJzJٯ1ˌ:wUhA[ ;>Ylw y*9z9{|p&(ky+WY^m64OٳC>t:[UYH<۲, 86'u){+KNoPK o] 5 RKTcےaKr;%綟dqxt|;ٱ v;[wna| :VXwSz_а;f+/ȹT}wC@_{æxY{[惘 ~>fHԁ48 RIZQb`LEƊgܚ@3]|Lf(ާvJǢCLC[<,6z55'|t}:ĵ[sQOK320Y4MG8<|G՛Ñ\dʥWr^\a $lYU EsʄӬd[,Q;rު\7/ y< hM7ݿl \MiCw_\ҌZЌy ӯJ6}')ݓ _pmӑi [S"k2k 5{lD)B;{`nt}`np=n~ ZM`K0egiU؇ ԉ}ԑғVܓ]mB}ԡ}[ڦ]MHOp{ڮ*Wˁ-dRz^==J}۫ӹۊ۾C]Mmv9qV '1-moq87Sݠz8ۄUEݝy*m‚ F 0Н<,z۩}ˮ\l`5 ŵ̆Xh9oQ # b}`Ynh\nnRQH̅G\(~ GXtI}iap јk^B~7tNPR^Ht“gȧ,pNSJI|> x-\р 6C,6ʹA*ہ7O0J\JdVfHmj ᠣ&s.}M֎&ھN$Xk2䎼.)Ys.vHh+Nm؃օ/ ٍ\MضG)xPFDf"_v.`-NZ -M -/; /O9oL'N_-﵂=yWhM ;^/.6^ *Kl}4Pj JPNP lxg_x9Gf ot2 8OA=O9xaҲ_ր^ˣ^AL3諊[AvMgzFQ ɢky]KG|tOlxLY|~5Oc 3,ZFYX _3q (3f3ޛXơu"rV_ 0B R,B b0#" #R+6r/8%*3:^7<.?v !Q IMR@B#dbbeM%dAeNӔ+l,mYn.o/) fa3%ςit1_r34NPswKRCm<=/~>oڰEnEʜ)kᄀQFBI(AWq䎘@0ް&x̸r^.޼zD<`bf:c xcpx6=ge &ӕMֲW˴5ڑE5G'A7zm/n_v}#/jSkaӆ= $ =ik=|~ݕG 7jV=W1߀v:^ J8EH^ ]! "NiX"=#k'3X݈;XAcBԣ-&^Dɤ.HBISZ?h%]z%a9&e g&m&h^9NUy'y {')(g*(&(JjܣZz)6U)z:Ǧ:*6Y*vz(majJWz+:f,*,mMv;þ& QD+Zj-mjG6 ^䚛k(:2.@/#ЦрD<1  Ϧ1@Q5~M8)md P8e#NjZf/n>4^zĩ+t+'b"7=m##rJ{=3/>Gt0C< 'H<spB'h98 $W>1G\*њ 42׻@J25 Dgu+DxѰi |A8}>=(BЅ2}(?R(F3эrt%BGC*ґ&=)G?͕R,})\ ә:6R7oSt>őL*TuFQ*`S:JOUWԡ2R 𠅁k &fp,Ȗd@/z`{Cw@؁|($9Uo(@=Caprű%|2 uzEB ;vVVZ"-lA)"'ڀ*RC0@1\SAs#<$$7U xз< x.]⩷P"W+[6Z@2O__ h+jrhehAds W~;0yd#vƽ) dp08Jߪ(-.1z3 WYG23$ W06 ]! SmAi[{y?A͓d  r`EYJB@']{ɖQLk& w(ܜ8Zǥ41-"p/6ql{UKc_Qonmښ1`Niyǘa$׀=y.ylfC8-9jI%Ʈ2uc~Rl*b[V%hP?MChJ;ogk֬SMC6FvFmz{xE11LNl֥$-9֚^ 4&@z9sTA]kng q嗸މK}jիRGZ'/]:ٵմylϰ.۸=q;~;/;PKǚPK**AOEBPS/img/chap7_loadimg_006.gif'*GIF87a $&TLnT&lnTLJTln$&$JTڬ,  dihlp,tmx|pH,Ȥrl:ШtJZجvzxL.z}|N~ϯm_M-r# R V #aX"K%U]URbIv,qֺ# DZ`QNY"o& Kƅ_V%6,_y#J\d> =3IHDn.F  PpX\*dq 3ɀZ3]2@1MPXI`\-m~DRg̙5_>Sk:j4]EXPLEq`gu{9 %mv4I"*Gtj\MX3&$uQvS62Mh[u բ}:@o5` h&8Ë7>ch5-z#{Q>beEj<{%$ Z"ׂ̲S5w_#$, ;6I"Dyi EYY$irLh?N⠄¡" ,8Ywk^(BL]L7L^%!$tħ0]U_0%"h-6t*\ @*p*Zb*dzB*!땳j*D^*.Z;MfJ&Ҹ|*mC=y257nv:fq; Q6p#;2$p|. gb tm*[<+pG\) {Q&-;r\=o,R`F%)!;:i u-*ļ•?yTNLPgu-iA#!+U뎰^7S7dHSVPT7s8D.yi C+q= #yv*:yz~#p{}cLԖwyCn)"52ǐE~(E?!A6-6sNVЪ!K2 &V8 Fc->/qᠬ&/r+M- d)-0FwX,hyht$;LOU+h1cmE |Ⱥ.ɂR%-Ꭲ"[ H5}H@Lb(QeuӢ ۈBAs>-/l(HJA+n0OyL&4Dڣ-2O)yB&(Ed F7[sXЛ9E&h+8IB5 8vj8'zC:w< O0UͪVծz` XJֲWYֶp\J׺4H^׾ `{W=J:Od';&Z],f7|j m)?+Қq=jW;<Ҳ kcKBdͭnw-pK\^M%:W}tkR݆u! x!:W=z׻/|\ȵ/~[/Z50Y3u0'X Sˆ07R s%0GQ 51WYBka KQDF*B?..o$rZ yF3 (' @a3 V iέjE[ 2R=&GVtG5iP<݇j 6/AR9XOrS`#U6}lQ~F>J{ m)D|6sqrẅ́Fzojm9@k 2><@6b S쭖 ߰J7.ټpy w0lRoݻ$?4lP|w+FNR7fzg>~ѷ7BU [.inKN@GRѫt30I_ם|ؼsy^c=OPcDom"ǹS~wi#H^&4ۻv8|މnx~O>OgXI9Q޽ۣ|6^w#e{琟=l*H {0|÷^wkvOJrW*J8 B&??}2"\#H%7k,5=uQ~ys7"s~=z~?Wunā%PMrႼuJ* ,0 ;xiWi+((xGkw$8Y$4GsfzBiIsDThxh#ROER(EGjwwWHZwG^vGN V-F9Pw/. ؗgEvur se7v]XYUT`w@S`Q b l{x0SfM`ȊQfZx^pVAdhOv&x񈴠F&MbZЎCHvhi {gi؅mQ# j4}HgGFƄtfl8gVjd(kq%f6qvv&Tz`o"jv-Ihݕnal60_gSl HkS qpCpFl&Fz7DVHPyVFh*9_njJKmi1&CYnCy'm3 .A.}b{їBEuƌ73mBĘ!fV IyG͙rdtzwcJwo4ćwעJw9/Ơ|1Hng֨BE+GjFzp|ٙ 2ڞJw<\v颋GJ\ _J{h Zgy6Wci/I'ZX6Ip0%JAz蛼yx}k({2f&b%f] qq9R#(cX)K: H 1Y y #JG{eq[Ps )P @{Q—+@mNY\5frm+O67'p 9Ú'&9\ 0Wi4KtxDz9vE Z#L2~̐;dBŻvW\9!HQ+\֫/1踓&~j^@`ۻۨy3EJvS[ĠN$%F2*E뿥 Y ˭+dɐgTFԋKTQ6.M;`?†@ +pBIL(`V 'B xH,'&SOAb| a>,L 沐-M;俭J^h~8#(G<>*c`Q=㷍/72ؑxYdcy}rN= n^5Q"nT|l\^=gqWRʞӵcp[߀P2]퐍,?cGq8K΋T͎qbZ N=0Oֿ_gMJ]1hT y/e= F?ѐtVK鴥8h֥Tdzd15/ҩu%1jEn3/A:~^RcꙔ<;(Lc\P#Z8!W 2Eߋ0NEp lm No[\[|_/ ,]pw_.J@}HMR_Cm7ڞ#r%BN:^D!%6.K4K8P"Q).6E PM_"u = EoM__ YO) * Gp%Fb+D. \@0 0@AШ)El*.Bf 7VX4O``ΓʀO]KҊK%JЦϊ'hPJ)k+ b׌jO苰plr3d lu*@ w8tQQpyK˶Ybpxr! b#d[ I.$rN`I *ѬJΌ\Q>*mԣ"T+C4fL=ZDb]0M!`|YnP Tf7~aYl "Gu"vKٸr}@`Ò~6vȡ]/2`|h͢;-MMΤe5r*8Ə1t:޺mA o/񪨴b(x5L=8)P]Lum$G~XߥxGG''B H4Xhۂ zNTUMF#WXT_X߇6GC7DPQI W8C%mM9 bc3EE_FQnSWBaH&>R2uqQa}us@d`@,{$%I Pt""ؗ/TxrI82N-IOvUeb]1|$ Aez%('MST3_YF'Su٤!_3w6u49I`HȕLCAXcG5G#9lscPl],Pݷooug8 [!X}lGA}Py*QzTȱ_%uxh%(ۖ`xO!N3 v WP@`;y%ч9a7&bg}WAkκ%[`I{xCeׂ @fhyM( u}5S lnxg`{ o<+=t xG̎:F_n Y@$? b~4t; !}C;E0Nu5=xz ?w 66gHm͌ݟMȱ!_ aI V퉜- LA͚/ HAñ` :ԝO {A^! `Q^ 5Ѡ ݚ1pC bh ڞ  F ̐ia^ "(bjج$j"\(ǥa#" :0"&ha"JEd噁;"6#am ܵ0X8 `Lb J̚d<PJ߀0cZP!UN6eC6bT? HTr1bI@u$n$5h \e b;\\12]+(e߭$K 7RQ$>G%,&NI`63"HV晅ef8cFf2]E>BQjhnf𡇌A]]Qi+&M&Ŧlr&iQ*X~Xq&qbVvfvn'wvwng}x'yr'w'zzVoz'|& '}֧}'~jguVyVNv&6(~6>wꖄ>ffޕuhXlA(m(*ŀ@(▋֨9W(֍(MȨ)b֏)4l.)h)>)ޖF)VijMfnn~cu))'))񜩚ieѩީ/%))**&.*6>*FN*V^*fn*vN****nj@֪*檮***++&.*>+iN+:QV+fkgi+v+\+")kfkΫFkޫii;(2d@,d 80M<$@l|EL^L ɆEͼ $ɺ#ɜA"ɼJ AcPBL!,JN@GҞ,v37[@ $&@m܀H,B\P_LdDܺ(ۦJܭ*l[lՇyJxI6GODEdؒN-L!>FL+( ! @n"8($# # Bp"nw,@ @,"йbR!$DÞNO,^P\#D.9BCN/玮Ŀ]cobR9HVVEږ +Hê$tn_HjZRp\p#(TxN8OX,/ ~@->!c4uʝ֡s$cHX/oyH[o ^ a!d"`_toҤ48*1`,11~pR°E"q pŢٛߍBK$Q PD$ʜ#)#O2W19pbX7/Cqpm-()(Ҍrtp)ϲQ/-rbO .20V0Kr030"33^=34G4O35W5_36g6o37w7WU;PK⍀;''PK**A%OEBPS/img/chap4_db_nagivation_001.gifoGIF87a$&TLnT&lnTLJTln$&$JTڬ, dihlp,tmx|W`H,Ȥrl:ШtJZجvzpS$.znp19N~/SyP) ~J,€Ƽ˧-# "؝" $ G #G# P@##เF,pVOD1.pAF%H ‹#NA2|O;`'aMLl& khh"QIG,5hjhӶ zd@9#8aL+X"cKau 258^S˸_I" m@8!}ZBA!gI0;֮XQrCرZ;xt5VQVHjaʎv䆱Z:/BL5UFZ|mH'@9o@gI HDL E%8 ha& 0¸_!8UWbyJ(⍣٢y16ی0`=Gp(BJ2xOdr7JɤleN SkU &@gx]s~c'j.h7C\ dUuOqne4~8feA1\⒊2j> g\fD($|D&@q&N(TD*a}WXAB ޣ0KB-TUQačRa[_Р^ o'W:lA0 1 UBf0$a =8*\!ZHXC_/(%8?P%AVb L=_$-nd#F-ċAAv<r(dFP@"¤[ATN`74IaX H`&-{$$exDո'JPF9D< 0eB7FMA# QA>@@F(MjPڞɐ䐳Ḧv)YQl8s*G3;q`3DgM#!h=YS4iπ% T:i3Rh7REdFUbIͩIbǔjnY!]HN9F*9r;I8ϸ́'")ҠpB/LV lzu٩XE~Ygq|v_)!0'xU0p-p׸u[q,ZbVCڑG"PD+f7qfoS.ڱ-TZ$D|a ya @.FqZT;Jq=U)7ask\G5mrF"ݭ.:Kܼq`g`qܥ9Jn4RE~wmM|ۑ2Q!‚3`/rLp^":8C^4ܹ)7.C;$vs1(42bA[*d qƴiZŅӯJ10sBaqN D3LWYέ3pd w5^3J4Mv uE4$Zo6J$j'6Qx,,5ҟ ,3XtV$0XJ\nr] fL^֖R2(%M@J Uvٞ?>g>4 6<2jL1nX{n So\bomQctЍݪu b2wBd,A0ȷ_!?o)-\=? hk)w0n7U0 M\jAR$8'#"4q[}!zSQygCz/7 ؃lG.͋W]T&Eh I珼YD]G^kनFr3Yz:N/Ddz *5ܧ;}yx5nQh݅t(DvMu=m@8wZ=<"sjZ./J{4>OY+ _ל_[|L''(yO:|}/BwY18'~5a _b7v٧ueu/d2t5~ feVD| ׁ5{ 8E&}' ,88-#2c38Xs8(=:Ӄ><5DVHGFXvL0:'ۃc߃@3NW8 ɦy&d,ik8=fXJh(҆@}c\ `rx5z{}wjgpLjx3sh|(@ףl\'BjP腋`hwpX h?88<øXvn hk8 挿B˘ uDtHGgQu/ۘZzr!28DvXnh1kQ1{'641kz 4D'@ْ|8x!'Rt(Hi!`" @KXtT40V2%XDq%RAnl8q#Q2D\)F`2y C 5n`08zR1`{)`)H pYɑG) [9@uX 0GiXm:SZdCAԘvSG$ASx%|ٛҙXg Se$(xi+%R/EYF*MI-ii$ACim vWnAj>) 2 T@  )rGD y)4db5z19:!/Uk(=ڜ*P%:џIRJ.:$Eb$9b:'cqg:X@j=-.*Qn!PT A@9d.Ԙ(n ٘J$CY )sKW‘SU t (鈉 Ƶ? ZU /MɛɑژT)FsYxJ:G !or' ۪ ҉߸J}`hHAڭZwZJnz_8xf˭j K v䊈 {[1{ۋ+S@uȮ讥tp0:P2,502;,A(v@ų<<>B;D[sH;JӴN:P3 pXZ\۵^`\[b[f{YKh۶n_t۶ry3W  { }~[{hlD}ˇkd|@˸G ۹׸W@qukwzv  B6PHP<~jxCPk?049zCyW 97rSWRW4`Zk5zE@Nٻ=ۛ0!Y{ TRuкpp%u:|KF猵Em{;P0N^ ]1NjM o|s->S[sx=1z ~=:l8]؆}؈}F؎ْؐ=DE@ٜ٘ٚ6Mڢ=ڤ]Bف`څج=.۲ t]3C۸}p.۾$ KI}2Ý܍@{i/'F=H*ETrdjbj Dmt}vH8qR z)R  ߏը==) nCY}{`z jH@YZ QK)i!!,NL:!@&.BWTj/^h {>m⤬qZ&Q`4i'f{kL'/ѻbޠF ,h~:';o'|rƻOZKH)TTNK0@,i$:0 * nO  E tI V:PC@&i1) .n1N# ◮SŞY q\#ΛCnC)!ٺ<ʣ=0:+8p?e>У. >.CB1磻뗁<,Ām|eULYUlE)xB./FXLMe.WB"ۺG@"E% A= 0N,EH? )^"BOְ]畾.}J.Ȇ.6 E:ՠ#BJ@t!roC yEd-pޡv-2 ?Ƚ*'{2E3_ܰ<:_?qc:-D[ L]F/P/JH_f]vbosnS~9Z}M}5N@'d`n3`=ZM}o?k(}j<BGѡxْv ٹTkҎƻK?L>!Nx]@u 8Cֲsk5pͶeƎP@lblkpz_a!JP@6 W4E5 JT a=Ɏ{ʭh6DnHsϣPĕ)q'nxiK%-mMre:1j ,+Z.2X*dNxԗ$=sՀX'B)F$),jeZCx(/d)M73 ؊%6#k gq. IЁ#h̴]d;24dPBJ5d@!vph5G;(5%J lqd" LP00>Es.5YMwi+4Me*}*p RVG;p\4D&:)5ԡd ֟jFaix ׼篆$LڋЀSFiN5ta+[Pi~+hG׵ժ9j $jеwm2)@[ MJY@m)znGQR65hK{\v;Y ,Rݍ$a*ӭ 6ar׹UJJx 9_mo[-_ڶJ6ElAj,@ `&pa[q= ,FqU<x/n1g,c˴7i#8LdHN d#G,e'[XcewY,Lo0=5Gqb`hϸ3lAUQs17ZˆsF3цt =f.˗_LNGO^GMRZɠrLeMczӯg-3Ozђk^҅>sb~>Of;ЎMj[ζn{J&Mشژ@vMuNv~NO'N[ϸ5{ GN򒛜?W0y$8Ϲw.@ЇNtrHOҗPԧNu?؎zȳsk`7aÄ g7դ}`{lЀ طݥw6!Y=O˦dW $xvO^oP~~/=ֻ~܌Go^󧗒o4 }o{OygO{~v snmdԷg+ R[4Z͎}8}'yPwLJ~w~ ̷{zgǀ}V7'x}F2Wxs l'|zW2~}~ @5 y(XJ؃( Ghte׀9W ؅ZJ{zǀZx}$%s d3(gW(h}W~J8F_vxgi!tldžX~$/x[O腚8ugchOW{wmƆ゠(8h}q (7,XyG/Xr}Kt6vǃHvrxQ׉XnLj'u{2hx츋׋CXy{ 7!LhȊ'㇍t8(7熍l؄gG~~hHQX ׇɒ.ȒN(yǑZ~ AiAWlMyP/_vGѸ@َQw8Y(ǎ99`cI}} ~Z)VؑgY)zs~9xOpiNps鍋Iq)Ir}9Y#WٙǙ9Y&%|$cyٛ9Yyșʹٜ9in97gڹٝ9Yy虞깞ٞy0Yi ٟ:Zڞxy:Z *%-x ":$Zg dנّ&ڝi4Z6z8(J *ʠ"5Ym)Q1~[DI:Ӈ1 9ڥ^`z;zѣ3gTٹ݉ PA3тEU IQzO!w a:ZZc}"i㩧g  OY}Nszz;۷ z (۷WT Ж ;"n}z: ī}S}z?:ڙ᧼*کJ?J}*}jZH3ʩ`}z\Z Z2}j;;X2{dJl7؉ P N!+*, Ǩ,ZTJ[![Y'[? k> >PN6;ѳP4;7p*?Kge 4zV9 (A-[f{9!hOWTJGKP멿ʰ*w85w|JJ۷5+۵P{ Quc۴ZJQ;HVs˩g7A+>:7Fu K˺X{Q?AhJP3Z~J[˹e3;OE n*>˱𴜑߻k>j˺ܹ\ OQVL*;z.Y;ȥ姭CʴLH/J>\[ABlo)B<]j@\ۼg+N+kvIx+ Ú;]# `Ʃ*ŽImk#5,lnd̛fo\v|^ǻ9D~ǀ z||Ȉ:ȹY@Ȑɒ\ȃm kLS:ɞȸixʪ |lʫ\˶l}ƥC}07¼j ݊P ('ȫ;7aCJXA 93ĆZHwܷϓ~Q =$(J{>%:=' яaJzJ*˱5;R=mZL7]'*'Sn-Lt]!Z>Jv|=x }ׂ=؋Vׄ؊ؐ=]ٖ}Ɨٜ}ɤZ̭Oy_C뺞Hꮝٟ֛ Wε=1Eιʃ57jD˻`m?J+iv>TkM+ _LoXʱˡlN l~,N rny+v~ ]y ˾;Qo)ZȻ;Ɏ}JJ <]aH|޲,Et{C+̾ɝުs^ҿ>{鯮7jl=Z^(l.Lϰ,oM5MH[Tჾ >M Kču'NmB-sSNwV8K.=_P|񹽴$\'| K}=/٬۲=?y񉜎rHoNwulߩo? 힤*٩Q!M@ٳ_A ŭ[ןݗ<*p=rM @B!aҠھ $$c0(ͦ8H&z5F#dlR(ɠ1l )3:^7<.;>. ?߂V!BׁeA QV M$&fBTCd+ؘo/p0qK_r`abaR甀B( jk57w {IAU<Ц.,h B5ɖjF"B62QX΀]Hb;DFQ `& J'РB]ЏCC"J8i\I[N Tɋ7{I-ܸr5z4)hR_ hY$p׊}c]qcMm=i-̚7s .CKNEg%JE"/ m0: R'$SN?zkZ3=3osDC[T}kc;ҕQg:vx64/=ġe&{T'yƜ]ֹf{ :(SIC*h:_ha>z)J)j.zgJ㜜v fgz>:+C`zZik|jl{,m:,,6W*͢*-jƊኋ (㪻1ž;o/z,>Yl >髿>#ω???7?v; 2t^ 0 nk 3 r C(&!(!F<"%2N|"()R? ;PKb ,upPK**A$OEBPS/img/chap5_err_handling_004.gif//GIF87a\,.4\^tdf|TRd ,.<\ZlLN\LJ\lj46DDBTtvTVl$",̴̤DFT $ LRd$"$LNd<>LTVd<:L42<$&,lrdbt|zdb|DBL촺伾伾TZl|~ln$,*4<:Dtr  $&4ln4Jd|~|䴲tvt̼TRTdbdĔ<>sϠs.fة yyhk3>9;-G/,ݴ7f3ۤt؁ w2wCmqzas=yǗt~},c CĄ\&}"KB@t$lI.P1l`)x{&!I@ IPpx )xc;TD 4I 49BL4A D0"@'@t"nol@%yhy P I?@=$;''8 d"gwߐ@7;@C+@z%6XBT $bA +{GMM+ ]Fb )=D$- l L 5'M8%4l^'2*=4iArzGZ jIP*HHs P:%ș#1Ē1OI$ @ nɒ -iB4@+$ aJFUE h?#XV-eZ:}+JAG Y D&9Z @R9rsmOb ̐8NbpMR& a-!V(#@~5?Jn^@,EKM0Jvo|0u 0Z "8AqF$)v;j&'Oұr{GOқOWֻgOϽw{%OO;O[ϾGO~_/>(xX x18 X%؁"8Ɓ$x(h ),&؂0!4H3X87e(w~8l4x806/a>T"hXCpU DTM3 &E@W'20>%/'K0 /Rr>5؍1PDOx(XG3,bBXCHƈ討D~rP pbyCb3vX2<~9~U;,&N@W$KP> 2Ԓ23.~R8):v=!Dy?)AY3G@ 7D.R=$#w#jz3Q9:29*78jD#`c1(.'p/&c0$+DgTB7Ac;B)1.Yɘ9IDI>Y( *yiʙ=G<S0H‡& n~F?Ia+%F"$2[]3B')YQMdCYY T XOq .'#zC;2G+-)РM4>Sd?ȇ#*q@`+&)2p_8Lˣp#(',#T"a0A@( :Y'!NpHt;"2Cɕ6H!j:= #M ]˴.P;'!)ƦDKkuh6I.R2-42e!A vܛ@:k{ǓNȀܦ!JdzɄFiڶ*6« j 4`l%l ˥ m;VE|IMǁ(EP} K)Fad%qv) >ԥ˼۰*),2"0|CQ,3\Hiͼɝ[1_T:@AdBNҲ;l83[1k"9FʁF+62 4J`A n$+۲ {{E25pl SP01+Q;CQ 1ܓ[}vZl={|xtBaRxqƑҷ9=&8Մ'u[s!IK<)`th:`;j%cjq >Q3*#6F0z@҆( ' Ɏ—˄#DD@ m-8Ž#Ԯ!ʖVbd.gZPx!TI;p S#Ъ8hެc@aˉ(00ISv(`` $ܒױ{޷S+L,(ZlPH}  ~2#:*"}=[C2e̹=MW(kz>?Q%t*yVb THc>az"]mC 5W!]\`>xeF|@#%Lph7A sXT:4[QGU\m#tzm޽s ϠB-;&#O@D@A6xbzٷ^Q"Fng%-j<@ "h ! N6ӏ HC : P4H3ѻْSF\QCwM'+h;n%x(( (h /$&j 2`L .0&&0>xlI>r`\6v\0A,02DՑ˂C"ЮJ)[,]SD2WXuK]G##nHW`0! j``j֮Sz&@  d/z! n0x+AGqTP/ n!; ILF`  Tx8ل60ԃX(4j[miff枽]6hk6T We}2ָF " Z-mP!ʈ) 'Pl 2b߸rk]"%nSa ().u# X /L2A CiQs@ =f.kڠճԏ0j_ohwמ6Yw7  ػjUH l":GJ`.A3zOFH *(  0\/agHz a2S@J&Ov[phۑu£nF BQИ@&ekm V%z  ;@D x!@WQ!檏ĨO &,$QX'w=j&7i( sX(p9"}ȠpPT/cAө,s$)wD"( 1}) ˡyvKmUp:O6ҧY OiZcUSDskX9T  &PS!XFClr iSx=hBЇ>thFe%=iJWZ5iNw1E=jRѡ6uUjV/9ҭue=kַuuݕW׿vmlbؕlf7͆v-Ovmns2w}mFwսmw=ooO{+$w[N>pg()xpP0qWx5yE~q< #GyUr<%G]>s787׹nsDCGzҕKzԥNr=ʃ󬋼z>v$O'{>r?a_;?=!h{ޥnw]O;ߥ[sjW_?{տuWgB1A[rw"~4nzg.tcݸH"^׺wNx׳|p7L ^^~  puB'Gq;l3?>?<>9ý>HS>8=8/Dȸ8S?S9D>TSAd 8t9=99 ,;7k?B[68C46` <C)=3 ؃EPc ĸk?8D>h(p[6t< 8tÍA>7H X6)5d<\A-h@/?@DE-C9<8(C[A;``70)p>?({(B/EKdĺ#¾4.HC^H\ LFlA@ĊC;܂ZB?344FWEY܂C8>GDjSDEUdn\AJiB3h? F܂=3;EE=H\<$ɏ {ŃA?dCE2؂3H4>8!I I2-203ʓE9[A(00AH4HHȨʉkIǻA3X3) Ŵt@ɠə E,ȃFɎTɓJL=xJʻʪʬL̒\ɡeIɊd@ ,8?A3(p Fk꓃>D=-0 .HB<\FDN? C\7;ɉNSFNN44D,BHʊ;:G8-`pʼnLLBތTKR$NNTF|P 4t:8\7O-3T<20=E0X p128A?B@@ړ*e*O_\зO#@.؂.RP 5R5R04hB7X88e Tщ1݂ Q -@R%M)R>=ЊH-C\>H=e5=Q mStS3 PE>Ce>E( TtԻQe|3ESAl;= H7-(, 4)8Keҗ8:8Vm%R֗kߴNAԉ;nV7=Q4u8؋@5P@oS.`4|h|Wo8,@P59܂2҂ Ww]90N15-փeW%mX]} T[t-F0U}5D K20H?4H3f%-X)mC>0 4˨݂݂hEZ4՘sX[QXZuA }ZA X=s[ jY0Y5ZۻU˵r8) EU-=‹5s8ܝldZ@pZeZ[4[09=5AOŵլmű=V&e@-A3OZBPc)h7 88l&A@웸9e+==^H^H?d[4`]5_uSsO/]N\ߓ[\A(MFT,h\'<Ѓ ` I_Zd8-8\1eE _;UQߕ1 !tKK:!8#n9qe?&bIbf#bο`\%bs(2^3=|T.^:.M$&W#c79/Wcbłcc>cc#CvA&dK>^}NOPQ~#SFTewSVvWXPJVY\]RY|``.bFdVfOe[ehUeMZ6kfHfb6q1rV6 H5u5v.o.dw9g`gp{ggSgfg&hUgq>n6hvhmn舦~菮&i굒FƴVvi闖陞r+&6FVfv꧆ꨖꩦꪶꞶ&6FVfVv븖빦뺶k&~Vl vĎǖ윎ɶll6m.Vm~NvnזunٶmMmJ`j P`*rn! (-zn6@.+`  X-k9!불*V0X j`Ð%bpx%&$ppp?pH`*8 (X Hp 7$l(h#x*)* Px'H-6(-.ϐ3O6s8W0`@)!~@ >s2W8"m#  8 0ԩX h B*WؗuXru%`{)'&h*+/&0!Z\/hcwV홡p ؀l*"":80 ׺ ˆwq"m]o/"vwr XjGpp@7xsolx%,(07\R(]0 +'z?2APox`q)oGoc PJ w%Gy) y(MG@R  ٔ7͂0  /p#uȧ|1|a|ȧ ߕ-h7 Gh_lx(tXtH|+"ȁ`y)P~߁|H0a~oo r0A 1&F X' #$(hG p1h&D 'P8AH&H ,Ҝh1eɓ4 4s= 8(x"3<0&S.aʬ1(ذbǒ-k,ڴjײm-ܸrҭ ' Q04I@ nPp 8N\ ů 0rn <(Z4$L0@4ءCTڱ@`A1|͠aB  2@j֮mK]:ڷs;xZ7 V(P9< 8 x * `тJ8!Zx!@ <ү]% 1E?)ztVRY4̮s6햶oF`7s {NK"O~7U߫\.=x5'׎j'׾޽ϣ}xӝ߼g^wI{] z6Hހ'!l^ۃF蚇 ~se婸i3Ȣ5>#(e_vߑءIƩY$4c7m,V&U 0P P  @$U%Ȧp:tꩧ$U I9xI*hTP*P+0 ZŽԀZk&*I `%k VؚDk-'n >Vd'EiU>jg @ ,j0,bڷA (6*[ -GZpQl1 0I ` $p#IB\4^t$QH^&*IȒ@=,HSr{̪4'IYu=#u;]R\htT}\!*5I6=w݃[qMkj3Y]0 03)xWZ@$ڎ{y-=}6.,;^Ò|޵>׏}WVL M}ߗ>tL#Jޯ6(h7UabVN7/H[-^Lx`0eBXAm\_LW0/4I c_Oi@n O| >05L +* H4azUC݇;j\EQwl#G8F=$C*!O.kʉ%Z **j/~҇AK.L27ڍd\Kc(OxN${0~4 'q ;҆jt)S| а4Ci=qL&HeQbsùTєB&$dY0[bKY}˜'-H7A?2.>c0,H5$EI2CuMlz?,>=Zt&\*]iǹARnWB׶VIm;]Jrܰ׸Mr3]TH`"xZ^Ux?>BMzO]]ګZ`վ뵐}$إ/t\_G=DuK3)9~K/}\ w&ši.S|11Wn gbۘ. wGš>LHN|%;PRL*[Y:Sd`1hI6yn었xγ I>1MBР3FT#qiLҘ4+h'34P* 2RԨ>Sj,uY?ӣu%*][skZ-̫ l9 {E.vg<{%V-dik}IWٳld[ʶco$33.T  5x(9`I;vrh8QQUJM:57J n$7q3F 9pkr 5QW4; tՓ<`u5oN=Fʣݤ`S w窂@G|joLY~*xΎOJih(б&c‚:YU|;m+wiO?MwU ` wħvh$Y| }:nyWI fVٕ+vr֋{1699`{,Jf @>U?z&,@Q zTz&|I `ogqGcRy6w:$IwqMh{0{Fkps6;N L xwRDKGoe1rPrFUw1#A&gSPIb=G3wUG{f|co2KjR*7j3z\HuׄN'W~7z`(0DUXW\F>x?X/xR-ax8c:H)R0.'7V1,!vaJ;Fu5M!|LYQX4LXs8sf<]?H +(GW082/x!Hk77Rb~'2wXiNWtHΧ*iRC's8 9#cx@#vwp*؅G~zf*XHtwG)wSvTh+b2LsHY~"惉B'ŷ%G)XMtBgxJ+x((-Y%a&rXs LdXTx"A ٓe? /ut':qHJ Q)-AbrfTF[ ] ajrjt98tæm6&9YisWs–9Yy }ɕM):?gA*隴iCc?Jr=&QWț)!9dbÙQƉ9$yIܹٝٗ䩏Y z癞mٞifcUyf~:Zz ڠ:Zzڡ ":$Z&z(*,ڢ M2:4Z6z8:9;@B:DZ& JڤvNƤRZLgX:gT\]g`: dzfhH&lp:Xtz48wrVIo5A++ESKb1$)բ89ޢKZJ-V̲Q0Aq42)ժsQJz:W(A*p+,a3-7%2rDzx˄- ~aE?% E۪*3 7*Q(%f7ܪ3%H$zzt1RA*x:d ~i#)mW7E8F2T~A(#}?5o (eQ;K2 (ѣH[̙ӝL_ҌzӫBbu׮`}j K+ղh{F=شe;+ݻR*wߓE뺵/…"6w1RŎr䠖/ͬ(2?f\miKCz됭_ˆ{ڶsW < ȓ+_I/uK9:֭q;y*yy7y>xƯYܼPSj{f``H OW!f7{-\螈Ǚx,M`cJ*Vcb2Ψ҇5uc?&$hCUd,"IA 8.Ǥe#ȥ]9%9f^^G%ZoZXjhd-9㝽]!J䜌ti瞓 xZ'v $*JXz*po DILSlhxFJ@nجR;hdvۭ @DJEW 4iTM*!PKko$p*:\$n.=%g= a WڢՀAltbtk `^"y_I^Iඕ4az! .*) PB0l xWJPAD8 h$$K @@L1(2Ͷ`ϚZT8?~sBu ^bbm X ,á fi1I6,Wn[H#KeˉHM`;%ɛQ_[_"ӀQ͓\,4{9Bvipb X/ȂȔT%eeo at[&I0ASy8qEZp2|e:׹Mr*%p3qXU7bM4'2imC{Gduߐ<@260ixGIQі섧&J~w}) &T0UpO,v9EB/0E,`B> oNU4< 44[6򊊸WNěAl3 E/# ^Wmw5'S7WO1\ aP"mLѦzP9hyj ς֊f+D[˯&6g@k Z,~&fFvu:е옰+]s&c eKUҗF vD+7.m e޼ZHQqiA\+ `5 F{xޘUekׄO` gk9F'nRGE39+gk2U>$X~U|±u WXLf>UOK+ aʲ#1JfҬb6K9FnL!29T|g=iO2|&h@geц27U$ZOq! K[K>t%mV)l3݋:%S9ݖ7͡r|]WK25k{S p O5y.x񸔼'?Uʿ\o|+vPù4bks#ż!dy*G:{nn[鈾xNX~-ǻꝆ{os[^ͧJ }U6VMmÝf e])MT/ F0Wާ6lblx$dr4sEP.7[hy̼߱|~aS{!οJ{RͅY[I=$9_T2.^U0^ܶi0asWMuޚ5nq%cJ|Xe9G>]!Q}zG;VM76mTSz 6I>)A.CewF|>˔pC242bW Hx.FI#_TJDtGJ]xHy^|^U'Ct4WK7@CY, PMxN:zMzx<؍荭򊰨Xd0<4xoqfH P9!dsV5RxTQ Z_(U5ؐ6U78#8OXEHEeW\PzDŽGTVI}[i3\msD]C%W1ƥV VSVIRōE Wc!C蘎tX_]B% )XfFDT~$zBb~,!Wjy1'4Tg0f)i%5d|֕=EG]XU]OX~_$_]D(ׄe|J3 u7󲉉V82aa)b? I=2vWX瓎Hi)by6y9ts1)q'cQҜljvSwp;qWqL| vpA$ymtDvYɞn)n9Y lGrf7wyv afv IuJ60W١i#h u&mj,2J4Z⹣<ڣ>B:"+H7 Ѥ5 Nvs*%r@:Y $z_ZpdfǦ\Z^ɡkh*r*n:zYtx`ʧv9֧{zy&qtJ?*^]F" juftjJqJgJvkjڨ JE5wvf*sɊ*zwښc:;:eğ;9 H݉QHT P1R% :-Ǻy2|ڵ4 E7bNBD(rTa37$>3v՝1w״&A|y3㙑ڪ'/W>rZ!T5'U87~4/.xWD2v4AV0x1Yۭ~rٛ+˵4H>)ɒbNQG7&>CB;ʬ@*(EA-5;L9D}`.2x%E3ȃG97؃`b;I;FHWoHDT$YI@(!lj1Zd4'5e&aX]Gd~T;;r_D2vH;%??x ~`S;0̃FO1}}vCmk44Iz$6ʋ$H@ |d%\'ݸB䄹,:41WZL¤}رgBpD<؄;4v(.I ܌#\BAȲs.; l@L =xl4.#pHʼnӏ뚙IRY8C4U29EuH* #WH)(T5RVD?lypLєZȥٵY-]luʜe175IܯT=k^F-N4&3>a$M aH9[ _ |;='<[JfS:H Lj,ڍ̆ga 4RC 31v%| ++L;S-MN.b~"{%&.;}ZLkQh;=,d#~" >nӴ7Us>#̝RZON K-Aү,ut}{^`/k371H ˷=#ӮЧ@i1Ys7;bꡋX:$E/!4#MB 10ACsṫG뻂l@+_N qĪ$PldzFMrlSLaNNL5 NTdd;,Kl|-l> .+&,6Srxå}7YDN̠c˷\㵞VU%= U ?4[ ˨ɓo˱׺< ́E6hLLsPYM][s}WԛTzLjf,8gAKB}]  @A 0 B N@D5nG!'&\p`ƋSz\!/YtL 1gƣ5yN gPXoneYTO(UURk:9Vթ`зDФքb,XgX +>+_%O&XJ9s׽E̙iҦ)D=YukرiBFyulܠi]koos Ǖ#_9弓GtPB 5*IQFӬQH}4RJŜRL/tSG/TBAIQ7,S{,4PLU$|Yi\PX.W[{ V 5C`MPble5Dg6mHw}AEUSVWUt]EuZvzӽ~[md5`[sx@)x݄-~W;n7܌ݘ_ܑI.\*&]N`9b=B`r A Z%S#sgUYHMyʢ=*Ab}Zc(0>J Js,7b0. :&kjFYox5a%ۣ *cKxzIXnlުs\;0{.HOk(9RhxW\|7l};yp Wrb@(?}FX#9R] >!~}H7g$!c$!hE!F=${S`3r>X/ Ei%pcL򦞸hErpqD`+ J X!E~iKBB;+SU'< N%a_WinSP# _B8Έ) XBQf$71/7xF8E"k)Ȗ$9YYeol$2Ȓ.q]D$FmY$AQn$ _ 2> dw3N܎ɔbJh_,]PypBJU,aYm Z%ff͊ ԠT6ӎמOhH`^rH)9yM WnQ*n:yEYR)NK(- [@yˌdԩ JgՄb)tG1&]X"*BpTդKiR5+\&IZPliνk${KǪtF`m$DLBB ueEkv%I; }%y &$"}T`p$+pӴr%B[6'1Kl 3xP@DL=cXè-9F\#W:$Ha%-e[k^-yZ\  Ћ,=ANZ3YNyMM4%a(&jPG舞MoL~QSsTujg 815phw)Z=@[f_gZӝSk1j$džu=kjqmnKۯ7=RgVء W}w^s;tƗq;3cmpm6©[b8-g'@8)Ns(Q8U)\^J7r 1F~o\;}s]i,)9jN}IW<PWڽs(:oky]:>>g֭v 8dףFw].5"{: O|ƿTʈ)>:"ʞ\)b'$ثJ*0;+ 2.lD$2|'jΊ+,AL")PP#cZTBE!D2BCҪe*88,&钢8PÜxZAY%SB4 0,l?*-̏HP5dLoD&{,>G@| +a?( '(!ȜX2"818D -1'(Ŵ1.t²)'10"*0#)Yf,\?RI* Z>)TxX)+ b*' ډKAx "2R*ʔI5@ɒ"ǣI >(c@C,Hcɚ"E}čj=a-x!Z,"G J ¥gD$&, a+ςJ-}! Ɲ4-z. |ՙ $BHq `rEs..<19. /"Fjŀد/E߄BC)_(&#0$1 p3) ۋI,o#S%pJ1:138!崏8Llϓ`2"!CQ䈼?2T:q L*%̲x,@P9#+M8RA;9, %e3*A3BRFM@9:ǼC+K6C@7StS:Y>;+>ShAa>M@ >E]My+kHVjek,Vm<:p Wqͷq-Ws=~CWu]Wv]v}WxWgWzW{{W}WWW]ՀX5d-XMXSXmؠ;XX‰XFXa YXY=YMY=ً7XY٘YYY]Ymق=ڏ= ؤZEڙ]Z-٨צuڠZڜ}[-%[ڮu ׷=[r5Z`۸Ѽ%E[H[`[ hڲ%t%ȟE8B2܎`܍\W}O@ݚ]]Ҩ\5;ՕBҍx\ :uڵ\]pzɨ)ݓЮ|@]]]Ю( E*]Q0ތ H-_œ` T*$=aR>Uޛ h]m WKݯ\0r]\Щ&a[$!b)*]P=΂h̵U.UUEE.])'6a#6a$4~صȼ 刷/q%yDdb_*a:5 fJbCncWzOF +vĊ=@.bx^9VIV\8aeD_HQր & *Qn㠀Zd`@㌺Ef*:НfmAhajf  `ef\ fr8eqƜhVD [fx 2fkFb";Ҳp&]OFCd&]ȓ!)3琠h~7dF^aLfaf>fN-52.fyjfhx唞#p&[pFj]=鑆g54z [4겎ꤎ~:F(^'i4Y0N#5Š鿆d\M췮ieeSF`lwFe ^`A˶lViUjF ֙m^8g#(l%F>mF;F&Zm"+nC킅i?nnof.o> @ono~oonZZVZo&p?EpGp]pGp p  p w ppqoY/q__q=qqqXq/q~qqr!r"/r#?r$Or%_r&or'r(r)r*r+r,r-r.r/W/s2/s3?s4Os5_s6os7_07s:s;szY'΢\OQʹy0(2z/.3wm_zCiHW$Z_zƷ1p|xH^uϋy,o׈nݪ~?vPZ-'>ѝx}6ԧ{w.o/wJ~O~\Wez}w"o/^}B1y5 Ȝ-o)ﹴ@~/xx BA2t@x #8@hRC5f&Μ:w'РB-j(ҤJT@3c *l͘7( !Av͎XWJ-qA,slk5ڏ]ͺFm~onXxo߿d'Sl2̚7<`ͩJŘSh] fo찫:-gN Z~^Mu)x\A9/o<-^4g`߸W6Nxg-1^;[lsް14:|8*ʅCdD(nyMvc73.mep:U#OCr-2̵2H|3+>z4S$Qq\Rad|` sЯыCS\_׾ҁX(oyӐ$$C>x !eI1Wm.+ܠHp"mһLJ&,Ƭ H牵L09P xΎ2QL$j%UQOA=v(c|oyCHJ'V&Lp30H@F(?Ɉ(P!E2*ʎdB K|Y&%1SU,4 4DS 4nnffV#GoT8 .܏錧<ϹN2 <1s ܂ςtNEЃ:I(D'Jъrc}ͨF7ꏋ8 HGJҒ(MJWҖ0LgJӚ8ͩNwӞ(GJԢHMRԦ:PPժZXͪVծz5S WJֲhMZwVpe\JWJxk7׾|`-aVcd/Z,f7Ya !4+ҚV =jWϲ%CjcK.aͭmq޾ i+vMe6΍.a+.] E+>Mo?ѫƓ7+Jͯ Ž p,#ԵN< G@әl(9A+YV;$ BfG&#֟7PIڊ)ld擷UKmI[vt%QNem?T%56B=eI<0E6L 6$7|r xbq8#QsxjaB@n UĄ4pEdVeW1åx.:z#ܺcuv@6Xۄa;ҹs=@`cS}┽ z㪎y<?K Զ"h /-jNeWz3;r3~eB.1a>{u PIp-$}yFp׈7nr~N(ʁ|\~4 ` ?o͆L3{kFJ1n$ &W|qրbk~GGgl7lVkx[fq}L)uFfс ({X&e/Wb;fGz69Dy0(l:x4gCW [?W _ xcRdcH-gapuBlq8{r ,7}(E6hxX`r{P$TQח\QdzӈDluedWpd@"@jzjqBb(PN;{!['׋ ٫X;`«N;\hм˾t;K%e Y,4 ˽ۿ\K`p۩l ܂@ $|+ ,-LD<,OF,N <}=\ pÒqa L_ 9kuKb+؋Ǩ@'vA{ kȞ`ɏɏɇ,V Tm<Ğ쥜ǧQLl \ǫ Ð|Iõ\b| l˳B\;H\q̨̪͍,D͝˨|̈˸,\!j\ʤܼĀ4ӼKϙlf ֜˳<͕ϋ LLв j }l! k' mj KXl{D$V9T,в3<Jѱ+F0$kq!=fr-Vr^--\2-) ^ nu=M^ `E}m˜Ԯ 1(I649ҝM܃$'/& PGp"3s>#LN].LZAo@t>rNH-)<^Xn#Bnzx>v~yD܍9uT-x&J `<mRDBW1{fzdix;v4ark]먽*}cʎ^>ܭӐ۾j>Sr-_q< lr7)9ժX&Vo@,icN^~D *Da$t=^ _5nގpɀߢk e3"f=<Fb+r 9ILN~P'R 031(3U^2)_?]4Lp*unS}ɋ2ޖS.}4Eo҉8bMM\ #|g2ޫް~TN~sLPۛ"G!'' !d/-=Bo%D%C%.CH5wDe#$1Ƶ?( 4A`$ۖg7;z,  瓴PpL(h Z؋{/=_P,@ `!"KC`# QA ^Qɣ" j &O܁Be@g_d(l+*j!2a߲2i Nr5b gmqըs4Iu33!{66=|>}?@zx xm"*ax1hqƋe1ӾW > I6DQby*G潛8)Fύ@C&D)]S|MN՝F5&֯O;ײΪUm#{]i߄oA8`+.ɸmzKB&҃FFYr皡+KL]?5d|e^lw n *_M񵺹Z~LzR_kxr<'v^ٺVţ|#?O*z= tV'uefq_7ׄ_a~C%ہ-偨Pz"]&8ތ8[9ƨ؅?"f/H4$|JBhz9)!J.eԗ,nBnIv0TAtdg',49ɡ6M3j}tU~IK5G V=WMoa'̳ec|t)wx -pw/s$-nԆF>f{yvWl2W>7~k.ZGFyx T:8^l3k[>5Oq>ŷ <#衟|i.[ wo_IQ0o~?: ^fālc_&G΀^d<F|^ϒO)52 BQvExS\ CBx XV'FQ#F~ }GO &56,!(p(ԢCqUԨ 2Ѕ&|cbit[kTEAN/A>gbl De|A/欏52Lqp%L+%SnEl&KOQv,hBaHsfQrW|<&Rhҕd1c9k:l&' 2dq^RLd:Yd,; xB}?YPFSXP?'uڳ e>Q%4CiƳ&3JO_S ?u ҌbS L%Z4+ISVHvuhσrL%8Pg*)z_IUT&X(lZUYTTUEZLkvE*WCΕxX}UV |-,@JޭdW5U5=KZrv%,f=^-qգfcꪵ} eں6W,nruki-OЪ%9={6oQv,k)]1k9]"杭w*^(׶c]n7w+ZJJuu㚕ϫV0 `2El ֘nx# Xw=kSYÑ+L>i70G] X$Vӵ 5xr,RU1ӌޮyg1 EfLX%Our 9U^q1әz^M dFѹI,hӕK"f2kXYDbZm-A&򛟼i>^nIkNG[4Ye#v]]g7 (Zpm&t pD @ ,(GB&w>̍n,`ݢ@XnG>5-l;0(ls8$1G {`e``@)r9PaOH-qr'| `Zg20:4LFHե PӛS]3@`/|$` ;$&wеhB8߿z]7 ΍ 8Խ BRK^t7yգ~Oh=} D_& _e_{j˵IPߝ -ᑅ_)p)<υn0#mC~ sϛ8$A[= _N1$`8B*P \_=EV.n B!@ Ђy` 0!B\ʉ (yABBiZ&\=A_Ưf!n!UuaI 8݀a ] \H! !?(" !-(+U&vA'&a=$6\. 4b]%tab .$D0bWHȢ#3#/1_ 4+ $K4B*J T:npaaIacɛ*#640_b4A#7"B^A>u71!/&4B#D2$G*- b#/* FfR=;,\L6!6rCOOVAOJ!aG:$b!% ҠRBTJ%6%VFpF^Ac&UYZXReYYR݀H^¼A`<̞, @71 b+Ȥ&0ɣc@ANZ^$+`%n'b&)f%& hic% ad&fm`fm 1AۭAf^7p] "&H^vn).8S~5aQ%ў`T' ~Z"  pg%x'݀g {v V(H' }-Cu!@8,x^_(NΥNu] $M]']VZ&iѡ_8&,lizP&kJƊ징*Rjr+êo}k쑮lk*i,ٹjԆ"*mn,KEF+ЖkrӞެ-Z-kʬlז":~lr-Nƴ^+6nRNW6ꀭ*nVZ2mڮ2㢬-N^줮.®dnm*6/2B.m-jr,Z"/nb/J:΢_/-F2///o36>מm~uooOY0FpooBoJ0{//pў/F/ 0 S f/ưoWc0S1zpri0/ l /p;lp/"q޸//ZB1ro0N0N r /'C#Gr| '21#/XȆ)Cm%/+뱹N %ϲc'oq)]*-r/Wkvrp2//&o2'cq߲*2J[s2Ȫqr? s;37o73615q s;ױG+3wk1D>2=:7;j<˱@9@8CB?kCBs;3D 3^Gǭ6cH34A3HWpCOErD4?!/O-Lt4GsQrB#rJpKInF uROt?nSU/JNEg}KsTl=tUqZW>rl˴d ^NJ^_'K`6avV-6c7cGDE?dO6eDdW6fgffwgb]6h6iëh6jCjk kl϶6m6nm6ot!p7q] 7r'7rr7s?7tGtLu_7vgu6vđwkwxx7zpw{7| {s"xU,q߁S78\jwu7o8}g}GRx{ xi38(xnCxE;xPP\hsxx8mo[oxy8Nxp8h lxn}[ʎDw|W84!ʱAk0@<9> y&?{y@gM_ymplxw v”^0`9wx=KyBkBGyz@:9z>@z lyL@0 5y&9e›"ycNz@(a6ONzLzDȵz'9kg hM6<9!7Ⱥ@h!hy B%D3aRN){{5ܽ&_Qĕû뀭[:4 @}{|CJN) |:BÁţ#3 '%̗z6ǀ0@|x#;:dce 9yƇL|~{ kNj} *=KP=Ac'@J>B+w9<=c;á `=s٧+B>яU=IGyOڛŸ8gw7\?99% P}~|C<ۡ \{'>{=6T|9Byk?7¿@=<3?۟L2q*2# .1ߌsZsm->Mtlt@tJ? uHGM53Wu,Ouײubkfvڙvn 7BMwv xwhw3xx?NސONy{2nyo.|z袏Nz馟zꪯz뮿{N{ߎ{{:'O||/|?}‹}_}o}ާ>}ߏO~柏~>?Ocn#pT j lJp1 /Y0`60r#, 't {!0p9!$haza@!oIL@@?BEp+➬(4 8Aù #Dǐ#",q [Kp#D@Qok$Xt0tcC@Ĺa /y&<Ԁ P%T,vHb92\.1L(E@1-}aaS slhG߈J(4;2B @%, @ FtQx qN`*6IN 0I4Ku "y(̈́bB^/B"1+ pe'1e!T )R]|43LDT"3z۰|Y-dV6P0*XUQsj!'P^ > qR d•F~oL$KG6&j\ 0"yd.ό4yln 8yt\;PKn4i4PK**AOEBPS/img/chap7_loadimg_022.gif)iGIF87ad$&TLnT&lnTLJTln$&$JTڬ,d dihlp,tmx|P(Ȥrl:ШtJZجvzxL.KEzn|N~gex_# $Iq-o# GO$"p"–~$HnξԃŹN%Fm#M& u\WD Rp F@аÈ(1!q $.XDfsi,p`7#-c46$yO]6:(y)3VQԀXqY0  *Q $a27CdH8wΙsش^#60,պFʦ;"N/+ʹ3PaO9>gsmBm|V\SdВ"ĕ3X:&COMX4[7Ꭓk7Y}%מso.@g~ rQ{/ "10eō@4d J~ziȡn'M<69Vmހ1Q*lIZr[\H GDmN)xA]9eFMM'B)(?8,1R8&hYEwPi H) Թ@ A"d ygB L!\iqi\]Fܥ Miꩀݣonhw(yᢺ )'؃dYHU!:>꣭"kDJE0+cEEKKZ%귦GUܒ@Uٍ ʂL-!p" ıiӍE9ۮZv_԰ނ+⚘,讵z0FM Qj3&YC'A\F\+@Z1 NP!w, !k'H:D]lg:ڲŃA%͒NT_[u㐙m-vC-u. IfyuiEm߶BR7pSڝ,a Θσ,o`֡fp#Z՝Fc\ F*IbS Ŭ2ƿMi;ֹ<>|cŮh>í}“5z *C[Q?c=<C3R®oes LTtÁPp24`(ni%*T(B( 82pX+!T(4p pgh_|Hа`4=$:G|"PXLa؈;\ *(2d<XC<8pH:x̣> IBL"F:xO IJZ̤&7Nz4$RL*WV2|,gIZ"G^Ri0`܎1fVoΌ4iZ󚩨&6Fh g )r<:׹t|GaL`%*'󑴵n+/_GڢX;fØEr{B&sv:-q!LTLB/V/68m$8 4$Y~UBcT^}t eJ>n:!l]'A:g*)u{Y)]&9ilڤ~=4c1?2wo=^_8% ?d<{6 U7韛[$MU=1H =n߇. t j'5Gp@G˝R`@ED1׻Ve q҇[s(ƬWR`\9$(<|as¬ a3Xo5\#H-ȳ*r책}.8-&zq+}7;O;КcaoW yK>Cߪ}FwiK;%0>CR"B)sc~q}KT>Q MӧC*ַz{PV7 ~ZXXxyz l Yg`(A^ujx,8.z')l3Ȃ5~7x9;؃yڲ `1' BHzDF^@ +A*- vsaGY6X Ygso0Q ueYf kvf0#MuGcwL7qRtSGw2-;`(se Y)ȥPf8)& Z N=jpur[ TujDRU "۴n+m(w(ȶw y zyQK~"*hx&8W[ہ)Xy 昹(+/HkǺi9{ ٝۻEg{; kϛ [w{; ߛkѻ[ڡ${Wj˱k{˼o{*%D) lwmQNdLx<EזU o55m[z a&:IF) u.\0 vaG7aƕuZt`E>uZYTWdX\br5) PKf|˞[je ɗYnpJav`(2zm%w w|[l5vj Hqd:<ɍ󼍎ǡ^ 鑦lJϥ^o6;9*8\ 0kVжARt6b.*LV%5leɞo,`M]aa%;ϴM;L_֭?h uq]t-W-([ҟޛ$j).X<I*ONVٰ} #Y'+ۺ/3 @;?0(#2\ޖ'4*R+6jn/8,3:.7<.;Zn_V`ߡI"dd%抣I&d(i) ijg l+m+-.Ql/%o01pqo2s r3s̲u6Uvͱ4a89Sy8z|<}=~>?[رSW`$2l!ĈDh1{#Ȑ"G,i$ʔ*WdYQ#]c%Μ:w%Mj(ҤJy zqA Gt\j*֥MjbA  "ѬjײM+:  @`fѺ 1 |D‡{4-'-' Uw7 $Vq4x ֯Ul6EZD+&e{x"o# 0"|.eǃj?0uܽ.ϖ2o3(A Y L_lk (Q2Ȁyf^z&s @t WKgo#0`+rqvG|t="alH  Ubg%s#f#b7F9Ț5#=$4*dԝ5Ydqfq*F5'`BȀNğ @gfu^'$XsjqgxG2K=JΆ)qr ک7Xye77[m,mzdΪ^ , xiU=Yuz'jlc)Xb/In̐Ipb0 HgKT ԵKph~;1Likq4 Av\U-T1ɲը.۬1q3#Qa39"INt8JCmIA==XszWk] s͛aCj6mцq=7u ںI7} ߁ >j}8lԒ8;ڄR5MeKP[0cW9]z E:#":\c;ͳ.oů|?DK?=̼[dS{D;AhP@q~W?vB/NOK?0r iP`z x3@^ uEP Nȃ$)0P`a[@M V @A OKZ!vCf`! "a9Epщ8ѢRFq7H")hn2@1|c)\)`Xp\$b%ꬩ,`sIb0%&K`Bň FيdIA}9HS-Bū]Aͱ.E" S8<a \11]+ &EYcJY2b1:$y̰3l'9r>pc#a2d&̦Ķk`ԈjNsNI eJt%BQ}9H x$ʕn?$A`ʂLz25 }9\oj.eOtjHGJD#I%P~I84=W. !kL9UO~pt:Qk#kM.H WH,:75,X!uQĂ@< {kJ @j:1a7.^q2'0>ō_@c8qM E{F#wjKrזNBzl-[d2fj\9yӬf|hpc19{䩘Ǽ8/.eq Є>E':ps5?Lx4\foҰ& i.K4C3w80#(>g@6 %n 7F"#b%ܸyfH$\tHf#u$a cU\!d!Q]#jXx qGf$IT$ƴK:TZ 96c"Q"ˮ$Rb 9QR>%9 ڦXQȅ`NVh%-N\ÙZ7ZPGkxU6N񁣕eZfMş\mEȐU^fC5&=cF&ea[UX_*&UY^ff gvTBhNYt%dkWÑ&fjk6 fZڦaqA'r&' n6tsF'@tVPuf`vvg~w'x'by'z'0p{g]ʧxrA0Ĕ%~f~[Auh"t*(0 <(:N^(gBNA¡z(kf ( ]ahgT g P@ho@@~’@J%~i   L) iPff)Un XJ{0? _i $0^Qɠ~V)MG i/.ȡXb|*Mj6.i(š`4* Ǭ","A5a%g S hxbvK]!Q$ *%\i"/N | 6,Rf tGh> J,Ź읟v>[@J+s.mb@,vC}F KQaqƢv)ayBP٫@ jXHb˶썽ĊFV,,z.hlCĖ&@(:8ރ}JRmN׎mg؊-٦mUھ-z,#΢mK-ߦ-|@[6 ԏ,ʀB.{FVn^nl~n.↮n.Xn7.֮...//&./6>/FN/NP/fn/v~//*///o֯//:.X0٢.&.7p>0OpJ-gpn0o7p#@xߓbч =$u p&0p q 4  qMpP,iT!Re0V1)_VQql1% sqDø IʱT1)dIRրH qR)$@ pE!#AW (2$@4-֮YԒR&c%#[# ӱFq:GXh*ƻ{`\mDT2u,%!T ӼBHͲ4SY 1c1F/c&^qDWT 0b4H`M r9$73i&<敀qbw-"5[5G#3rʰH:Uq"DtE;WIJ QBy4@Ks@=X+)<Kr1e3S/rY /QsmQiNI-uQ2AҞt3hKs=XJ(t'rXDuBCu0)$[̠КUCc &\*(8Eɮ4 : @2 F?*Rcc[3G1Gq\3:8YfוIu7f+"8 9ECaY$:p#$tg@q r{Q/oA'_ OTw4wrCDk)%Q6h10,đw{R!4wY2yP|i.~Cr88A;PK֔ϛ))PK**A OEBPS/img/chap5_test_emp_004.gif$GIF87a$&TLnT&lnTLJTln$&$JTڬ, dihlp,tmx|W`H,Ȥrl:ШtJZجvzpS$.znp19N~/SyPt# #Go-m# rI}c#"n"Xր#F+lO|K%C"xO=%&,❇ 3c8D XS@ !(9dJz+x$sh$?b(YT2sق 8y`˦ hЈ \5gP,[ V84ř[ڴ9$"E4itzM KUJIӦ^B&2ׄtۈK$; 뷰Q$4ۚnM4!{*!mv?98X[1W*VM4@͝JO{߮r_GhVED딪P #ё'~+>Ѽ$1Y2Qd#B*7-ce;MKZ1NqF"a9t M. *Ma',K@TǂX0DL"dD. CY+*m](Y׬Eu OBE*2p2p=(:p> IBL"F:򑐌$'IJZ򒒔0Nz (GIRԤPV򕰌,gII̥.w^򗴼IL8L&f:S |4;jZUĦ6EnzӚ8q<:u|<yo>ӕ}N@cЁ4#=BЅ:4 D'QͨF7tGz':aI`1T+J9SJ1iK 5aD{ԟF *RS.s Sš(Vծz` XJֲh-'J>ԦAJ\J׺\}'؊; q}`KMb:^  ͬf7zR-ϚMmgCkEQ¬jgKڪftdp÷l:ױk%ج jK݀X 4!s^FE 3^VەwsTߓ*y[@n*qP$( JAB ]2lPX0`<8αaD{1I1S!(9 avR+CIGLd JN~ 'A/'ק`Pp1_$]Ҙᑙ|薠-;KƂx0X s\#w)cR3N 9 p MH?@Җ^31kjݭP0Qէ~vkZCWS.&\Hm~{MZoQd=1vvm=9RcM"l_o#C9$w.iGj\{8m&nXoN0gZSoG=[ K!>oㅞ m ۸ۀQepW4z;pM IExB/>pwE,n=~=y߻3A;֪,'x|0*8.ҫVv!u/ȼ闈{>_oԢϽw=ECOH(;K{3 o]NS~e~yL/g/^?]cx8(WGOW#nW ؀Wzx5z xwum4xhyo}Łg(x*p 8.RrK0\va}{/8y1u3r BqRY2 v >(p?wAOC_@tKh M(sOhvQ4f ?Sb#)&VaYzׅ7!fe?' fa IdN6$Vf!Z&\VdƔxsi?7d"m;Xy&Hg'5Br  6(VlDoGv.7^ nf35oQyp Pٙ 1vuفP7WHtLśɃ7 }雛v|ל0|9'yPع6œ9'I)ɕقY ) iT~ z* 晠xנz:V xƉ 8giס0*zi,JP.P.2J𵠩y8 g3J HkU ޓ 0r6qMI9w 2YȤ YЊVrLxY[ʥ奢 ǶjHUhxÁbֆ%"p f:cY Ykʦ =eeO~9Kh䅈Uve҈BeQy'i1`q`F'X))ᘆXn*芪'Jeho"z^raplzP+٪]IDZܨ:"FLl'j1if)Q:iflmڦԺ֪1?h< :'kɯ"yj`5)i6nZڌ~d1&n'! oQEﱰv PJ5}"A>y@3q^H)qpr !岇a4[X6TCDM6apDl oyk$w4v9YKX[{5>̵ڷ߰kn l)ykn g׸^ ٹ %Jʡ< Z~ۢ ~K{KJ [ɝ[ ^yG[+ټ_ڻ} k⻹ŷ7۾~kć\_": Z eEJJٶ\\ | [i,w[8ˆ[OJ._6F "[WHf1uS0ЖxWGXlvXHk2L|`&พxF}yە=B D,ysXi6h*iG1 z5db|^JW~Fo$0tyau%}L*X7[Ƃ5/w&oXqip`X,x(!Io|"d&cq%̩0,n I6˔̗ R Qh $a3@g9iho9l \X0;kLi Hxh$WLGkf[,|XlQV,.ô2rn%fllmnnn6ͣQwYͪX'ʄU0,&KfV(ۃ [pخɷfӃѢҷ#QqtaHqRLk2ȓui<`wa !s*m&yݸ~tj |Sa ,TV"?mdžw8|d+v5)¢{ÎMx\Zy+ Lٜm\8ڨԶ}<{ڰ}ۧ;A]|[ȝ%@sRʍ|]mk׺  ܭ-'YLgޚbշd m'߫!ʿMʘ|;|U >iܛ?e(̹m!#NM@v&n‹⍽O%>' ѩdM?hw0;U'ך"2P.N-|jgP\PNhZwC]~;dJ& r[(}؉6$ȉk>m/1~& )Jm墊Ȫ^+I"0F ~kSFN `. hicBJcMi+ 鸎X#qfI!Du1 hnUnf XovP즽8=pn{b楀|z-zf 9jox~[A+PzH=<`2; W[N"P9MNZr(s=Egޠqkunx G. Y-Z6f`h.ڋ 3{gV^䄿ok+Ow᭭Jby߮M 'm]{=O-ݺT)Q/ߣz/MϿѯM՟ ]ߦA/{{$g>bNEo^"gwo #Y'k /3]ۭ7*!#2\2'4*RU 6j/EsMX*Z7<.-;> \!" ߢcP#$d%a&g'%%B€)$&-T/l@і15v5u78TOyOp IlPyD>B(࿀1lލr'Hw\ۂDx\ҞŖ00{kj ܉~9CѤ{ P`A. h@ȩUc {#n>`p2 jדҊyVdz"%1Z.%^"c|1D#۬y Ρ4ԓa B8i?{ٹ:Dމ8֐8懏*(m;9?Nz8P>VA pڀ'z欷()i;u.;/zb4@!v?;F~_h⋔)+6*!8mh@ P<5HA۴zD G,%9w#D(GLy#UtLP=fXkPaGUj> 6@6*Ed&L|(g53IŢ#yKptq7SLw#@ЗSԠtVT"߯\BHuY*Բ +{2UBu\*hw#+YҳjS0@X܊ORssN&T8Bؾgl=äW&9omd'+Wk"o`Ӭa9Y}~5h#[Z:+lc0wɶ-n Zi춷Se+ᢌ=nĂ2m.t?Rxu+\i]w+^⍷N~HBm9E@x\_췿d/5?l1,=,Xs–eka_Dx~!`>1B= GÕJ LG*X``o0Ft Ę4>2l,-Uf͓@d^ցOeD q܅1_~3yK@DWH`7P6!exAkx43}# 7ùOsO˜_8:Är#:-3``<ΰyЖ5`1=?8ROȸBT.Qn- =B6C]I׷V1 $NNs3k(p6{\NJ[^qe"# U/5gn2B]LwP; Iw@ *e&wlD*}h`qLc:^kS;tzA I]ՠM0Q>GtȮ\⛃y-v$C f?|d0} q>ne>hx\ŷMpF/$yđ<f&C,잠S?JXcþ &= `ݛ=_|E?~|'E/}Y~O\s>U%pӯ?/ӿ??  . 6> FN V"Yn v~ $ `b` 2 }` f^aܠ*_&.!֠> FV! @O2CԔPϔPO ! HRAIT|Ĕ Ua#ŋaaRqPl<:$O6AScXTH H@#VQ#Jb9G(b'!.k$O!&wCFlb)]Tca;##_2@HEuFђ][ az$cME8iG#fi]e4&f p"mYWRZBbŸltVB(nmurwv$,bG4Wx A%trD\'DCؖ1ZrXΟ$usfBBa2&`$*Q 2* 0(;DhKJhe#i 1K<}8RT%2Y e hݐot" j^h&喓>)FN)VL;PKoS $$PK**A$OEBPS/img/chap5_err_handling_001.gif//GIF87a\,.4\^tdf|TRd ,.<\ZlLN\LJ\lj46DDBTTVl$",̴̤DFT $ LRd$"$LNd<>LTVd<:L42<$&,lrdbt|zdb|DBL촺伾伾TZl|~tv,*4<:Dtr  $ln$&4ln4Jd|~|䌎Դtvt̼TRTdbd̔LJL\^\<>rYlȠC\PRA瀂?d^3M1SgXS7oE lasUns@"1&ׯRGä,@~@ u^}L5D|ooDtI.ĴTA&0P%8@?#LДnի$,MQ|>-ïk %0&Q1Dl``'(9&P j dBI38FC3`p9Os5L t!qR-q1Ls>0;λaN6@KRzNqN@յ01&v׻N1: L$H` ;(6e1i `  <p4P 4I0$ h1$<NB$ B$E4uClH@.z`KAzrĒ@b:E%A0F:x@p6 l"t#FJ2W}d BHV: 0a 0Lo <],FOl5  @ؔ]ΉIFeI V-hjeK٨Y. <:/m"<]:o5M\_ P‚W `gS@@Yq go봦F3#EI$H9&@ح$<<4!&#M%Y*$ ǩI)Eґ'R5 MfFY곗RPMT km:.y(xNj@:`4fPn>920ti&&"gwN"u=BtA8FtxJvENQMR@Q8V82UxZ /40gFH5C!d_9Kaa8@!0q%)c$g[8[g[uMBSWXHuHTsXb HIXO BBQ,A?h ȊcW:8V)AU0GrRaS:M-&0!b&#@FJ:-03t:#BX%Cبp(hȌXlYfҋChXCJdX:)I0.rDfC"6#(HQטX< >Y$329"&؅yY%#HP:Q/7Ӊ &k2PX\I"f8&QW %p0]gpX:uk|)[rIa5P؈JƖ1I!z/pH8 & 9?$Adi'(2S<:r 0HdcHn8-&uT %o%1S ĝ#y j F! J^Zc s陟($ B"jJ:'V X" 3r IiXtYd 0E!* nc30(DSjV:OjT i\c&d*e:gZ9%(0ol: Drur{YZ0Z~uJ&!0[ڥljp^z8SJQɤo"DRA 4ʦ+E[79z>AHʬa^JJ} &xZ:5:k19" J9Z;fSj+Ȝ)-։F5ٰ!B_T ڧKzHYpőwʱڦ!ˬ#;%;Sٮ<ẬHu7+<ةʳ: 22iH%I 5;kR9xb !GJQV)!H:C맅j˶n3Mhz2|0+1{@5mkJqSq6 %[isk$H1J:D]\% zaeQkm0&0PZ?/0:T 뼖kًjh(-"!˨qm:܋D*^Bj:Yi { ՙ-";E59$kp3Xaͫ#(1CŸSǘ[m+A٠hڙnF 'MGRqhsX+ qEy x tq!(W,&/y͊#&$Ôx -"x;z{LjλY٘YxԉߞɛJ$_-!uJ~> 7".siv)Ö ^SXoI:-js*'!z U +zjCZvJ$*I"Q£lK%ػ)ڤCJgg v ^?k\,10̲)T]'Q­qLoBšAbrJM`L؁+^RhM??"+[hdڦsl0MemL nUU .-(9/uVI|;VhDL~|N<:țB„-ts 0 @eDO=<31"pth8>/t}T\U1M Rq}mkrooq?sZey{/|=ށi1_MA kt#>? !oqu$6BmHcȯ}O~ϏO2rݟӊO?O/Oo/_@@ DPB >Q"ATDqFbQH AD2I-'tSL-XSG;}SCc5TiRW.:iTDZsjV[~)Vaz5jڙhٚ\VܸR֥m^{n 0Jvɑ-Lʛ7v zhϥf>X`իyBveұmvM Wx0CkLODWw+' {2@Bi!?!?H$ R>\0߂k(*0&( ,"A8!:T@@tmE< R*dž+zGAs0B ]*#H%D1"a880"R'!כpǂ6 "p2xR,;/ SCFs !ѕ"Ɂt3,Ԭ*H'n !CM(HB& <`b QD\)  "&  &耈h[` eYz+Tc3!&h A %` bp-W*VϹx%qf1]mXbu^Z(Am&\IxZk b lsZou8a=OoEtBTIKPR5a#6@l*Hp  *Ax; v@#r'0&K"dr " ;<3^)LEc:P `fsAJ p)&p%u >o _>>!~ QWkr0H7o 2Ns>@|} fP@£F-5ځ@B $ Y$/ e1d #@a "HUp:m^)UVQ@94Cw%H E4VQ (1s\a ƒ 4@.'q@.ahATbm%9GIӤH** @<8^Y@4@,<#l aLƲa8M dW ٕv1$.0!a%"t*O۲-tf"wQ) ti[94Mp>ɡ 4yFV9b/8 m6ԤwgG36ݤEd|I=,g_OgFs @"$Nh`lN6-#&TuZC-|DH @:RN\jljd/r=+|4NDW+.fj:inb;Rժ@IPk&%X2գx@AzٲncH%$8R;JmLNU2 8kZrPOA~VE- tm jN7}*ZMq+=@4FSП+d,ެ*os(U-*6TSjڧbk7h@dw¦TAqUwF! !m$U؈0H}"L.eҹ@3q`vp Q .ѺhUr/ u$}  H\ dc@*P'g'tT&; ^&AԻaW>.rSO0 ֑`Lx^>҃@mό'vTU\ Ģ@-QPFNЪ%HAxLPXZ.&@9$'&ڔb>hH&ݻC+g6Y j-dpu*oϼph9mp`&6rV9zǻ]4$bػa KP,VznˬK]Wݙ`ұ^ln_' jt;!bvʐsnt]~'sbe;wSUڹNyc>k?LC3p7=8C5pGKF5/ CqC46ĂHHćH.7G2tfP$3>XF:I6ĂlC5$4ID|CƔ\IW C:$FI3 2CI-BA'-H6 Ѓ܂5`EXƟI:ȃTÄLí:xǞ ˱,K>0CX7$C4 $à,C|Dd 4C6DCKB<=C'J>@x; `;`KԌK78˴t$1dβK DJlI4ԃCB-pE'HJ8(-X X3ȃ1'@mtH\:xEpH5Bo:8L5POt-Fσ\1TlʴLLL,J5D9-\C0O2-@-NE2I'01AxJO:e?XmE`RG]EN2@4l?(wM30'<wD|Jm7OlU9?QdS7ӶCO3=K;HL.]sl@N\O\KS"ODx:|(I2P-z1|SSU-@/؂D}?dS?Խ./PD8;8p:?W? 1@<5c- wG= M8Istȣqp1<4\D 1̊C<N%C5`|WR5um05;@HQ x\1lקX2l-A`4pEWZzECV V2\ApBɐUxD 24<1S}WT5@WF3qLڥ>83X3 ڡ- UX-%C>p׉R?HmAmH-14ى`M((6ð-C=Cڝ֞-5>ё tu(K ،7S0XF= {p0q݂-T0X -%C=p:(Zt[AEC0 =7XAxTՃl0x-FBϽJ֑\\U5$e]ׅӍ ^]5܅V̝Ʃ4ͣ28( -HX|Kh۝5QIUJ@ ` W(/݂.H3Ă]5\8< KwDM^F.|M)Ąߒ qcp1L((Z`2%c &a&JNO8a 8v m1 9c7n@Ccc BC>^ΜM^ dA^@Bfd?}.vF膮v舖hP艶 i&^BF>if@i阦鈞逾ix΍+&6FVfv꧆ꨖꩦꪶ렾%6FVfv뷆~j&6FVlvǖl̍ɶ쨬VM 6A.Vmv lזmٶm|a(Ј`**0aH&nlA@oAnn\侵 `$ p5o`pnVj(H 8 p` p` g;9r#p pG`*$qr p pv( r2Sne h@jx0s2'PxoqK 36479#:,;'$!Б;(HSBA.0j|.'p̩A$XCL€"./Xg.@Y uǒuZu"X `2r7(&pikPVWvdt|V  P8 k30x )ȐBѡxG#$x b׈G+bO"bR H;,-qg8)g(xHo*XLx3#"(0l6gz7?w- 9]2zwyk' KmIx/)t{c+ jTlu?aLy |.R%ǯ{|ɟx؁GLQEtQ08?(|_@ +I|Yu`Xr~~аſo7w~z H!6|Xoo-? }+,8  ~,AHpX"' @0ȒBHQ@Ŋ gJəkRgYpТ ^4c@ >:5;z)'аbǒ-k,ڴjײm-ܸrҭkwቊL /`s5*7nA\0"@x@0H`BA&lԶe & bAÄ<|9q=֭.ڷs;9\-o0 l#0P0 -Ax 8 x * \ 0E J8!Zx!jX (ao8"%x"aa18#5H@ =#A ) Cy$I* $uM:$QJ9%UZy%Yj%]z%a9&ey&in;PK'9.Z4///PK**A OEBPS/img/chap6_hrcreatebody.gifGIF87a9%:H V)g庼tvr5u,[4fVWGGd78eƽݶf]jijff4)H{)**Uب3 -oj6zglz`zP.\kYejM ɹwi7T6iKY,' 8uۍhYHw[g̚c/ ^4nYfZzƘͧm˽Nj^Ɣ҉qXYdrmKl;4g[[XRK+444QrNlb3CYD=)Ցީ͸wuyyD8Ј`f.xyy7yFDWVwFЦo}TN V(u l̔ Xcf6W5|;w=tBtHTyXY,I(|̇NkXtdN4g,&2"&v|uv*[@KC'iyDkK;131̷|pYqkWTTMGa6hCU6%tQnfRdmkh _gRvpLJO4 p|dUs4,ZNï`   َwwq9I * ӧ% DD/d4sXmf)[Ԏ-i3v4EԨڬvЄq\hX՜4%>4ԘXQT\;3$,9@H*<Ç#JHŋ3jȱǏ CIɓ(S\ɲ%K aI`@ PdȀ(CH*]ʴӧPJJեs^-3gs%–N: ^ͺWc˞M[NAzt2D߿82ȹ 4PڪP*p8|0ˑK3P[ C*~U@ /g ;(Hw=^.MW.usL^+|өW7nM; @q >IyP<xaWՅfn:p5Y딥ΉfeZ $a+֕_\c;(0 @cFEΒL6PF)TJBzTSv@\)OzYb&lp)tix|矀*'Ρ"SO"PhAAt駛nCdP*무j뭸뮼+k&6ִؑʺ^@j@nmjk.Z٪.랛.K醛{+0Zۮ׋p2pfwKj l(,0,2l8<\2$|mH'L7ӴΜjͭ` <"Q.@d`?BVF4Ѐtk\hF-TP޼p- 0M6d#0V@D09D:TXvD@@laMՑюW ;Lpc ^Aތ"J4МFDo 'lC !ϻ7KO(>~$wAlT?ԯZUenYA1XW Z _`$ , ]@.$t’@T@ sA>aot!7(2P! `ǁ'aA,0fFi{! 2 @4 !#"ȥJT$'IJZ$ )74\d4Wo"Y򕰌,_JWzh2"p(D XbL2f:x-IMr̦6nz 8IrsuI+$z@ةNq hD( x@@ {;XZ0}$_S(/niJ\SXfH;IKDg8C0QD`-ͦ7lӣ(NqPd"@.42r[+*TuWUլn54JT"ULpS;[sxͫ^׾ƒX*P(Sy XJʢXkɀy hGKҚ,)4e0=:ͭnwl4MrrX 8΂ˈ<9iM q) {V,g_!@ $*%#b1l\(Vl_5U䢬GM*.p ъ#Ȇ Nm̍ͨ$hUo`C8ZY@(|,؅ 67Y LjPp"b'GyUr,A`d>Yb(G}b쳗#/_D.&<9aðW!ֽkh|]UVD$(eYM_%79µLtU{'l~nyu #^_;YUpQb gg=vwd$qnVOff +^f?O&q(~^or8}wJĕ&x+ ԦZ>4F6zG+hf7]l0̏q8٢ ,75 fm Oګ[h:ͯ{`DJ 4ߊ6خ*x18@ ŖW;<#+o2_ys|Ȁ>G}S?yo=~`4i§n{'GO|P=Vj i.vS:/ݗ 6p0>/W/ p?HFngnK}7oѷJbj~xE,+4vxxzǁHy4pt+o{*8u.o3؂0(5psu9U7{Az$8BxWOWg vU0p'?b(IQphH6=p6>2WtXvxx8xRShn*]]HcICk o}otm @o;S:p{wruy8pȃ5tp6J{L&O؂oxZkNX dm-'wb=4PA3Fxkt+v7Xh?ӷk6 lS0h܈u#8㘐 *QhiIX4=@PА4Y"9$YhR.׎s>|h6l07 oe d@ m.Xu?{FyKH&R9]WPȌ`4Sb)S@hjlVY+XiΈ5H~0EЗO00 tpH9^H"xPY{Wp u,{w?8ExؖyMȕ^HMȈ㘲Yy^w|Xvh4TAt5y6? TŰa@>uB)WՉ֩Ȃ]GVID8{MIy!X`焸⨛ƛ;[sixH(9➳npB0|KrX w`B9ppėu)Z Z)(*O Z%j`[YsLڴN(q;숑HHchxjȆn8+fffmFjRWqpJc8^+u<D]cP|n8FZ{45E3_PZPx|njTp;vL*ɦUl}[IRKBk :MjHA+bkKax[|2 h6rTJrYکQ׏ٽE48(18ݛ䫃خIMIۊ4;(4K6kظԻ[m;NH2)}J[ov ̝ɳ\&|‘a9Kp(\6l*N,? k6 r0\@R`J|ȘG7^؍OM\E%E`}MJd8V tsK+Z+u.02>4\8:t6R0@n-F,{g1;J,燤M~B峒/X.qqȢN^+__6P~nIgq2s1u~Iw*"~>^~舞芾>^~阞难 $U"(ꪾ>^~N'A5 p$k&? APQn h@ 좑N!#^#B(""j1]4' P ;b6$DR$:$HdH&1r!P `Pp&gpʁ#&B3_7Oap`0/!Q i@O"&_!a(/E!X@RP?_/( 0"HS"$2r# #5Ap#8a9=B:0qC!!?_ȟʿC;5QO$"仪%/V:q?qRbQfDEhg@@UT:yZV =gݿu+5"HxäȊ@ B& >Ϥ Xc. 4BC`EELQ9% gdRdoy4 F3m4cNR5+'0͹*Y%I* 83D3M*"㲄3N9N;ij"؂kI54Pچ۩8C4QEeQG4RI'RK/4SM7SO?5TQG%TSOE5UUEmӸ Y?P["W H`6O?ͭ*`MEbIWEVYI3$T `"x$aXWvv9 4Q\d^4yK`>89x%[zwOzk]wK5hWc?R* [M>.ny%kKI <=26[*65`Y57GQZYLьv'DH ߆;n离;om%b&Gx')icH&O LP7_Պ z4'g A~^gz]EM$vIgK@*8h`o _h `!uR_A >Ԡwxl;`A (;'D jE(t':CH:չA&1 &F#ЀF$w,"<: 9T !|GI"i$&FlfDE*Rp=%䐁^hbh@Qk #zhNNP@򵮊_[PR~hEQt(#`J&50bcR2" s" Ɉ1L0s!tFI"S C8BhĘ+!̂ؤ!F*Yy)c:9Ozx@9 )@"juXEhBv. K +f@Tl= šMSqZ6>qs[\º.0fd$ԢJ.t_)y]Uh eN,rŜ]w7].mζ3sq`D59 xn<ZK)Tg9g-4\hF7я+\<КE/1iaA jeQDP[>oP `hhTXթv!i٘v uصFӱPI/&b🢽lZ7vՊ3-Y!wZ-[MI곽`%b8`,[j`h,:Z%5x5q%tS}an;6UXCU^qX ]>slI@Etoߧ>v o)Ces>KWzֵ\y=hdVgw" eKT5tw5&87=N =úYz)`pBvwus]a6`K +XA?@pqG{vVy_8No+[6eu+?ǾoFc/~~Gw28~dc>祝}ݐ@D " :@ SV\xL(Ab l'C2\@+0 A⛾1ӵs8 ͣ.]Av|[B |:*پb&tBjB$$ҹc N?ˍ35P{X7Y(ʵ6tC d*:;<=>?@A$B4CDDTEdD;B xMЄ{1M`Sē(A>;TTU'tW'i 6£_p_(-P%+XA38ܲkre i߰o4<k  p!lAPGvrGG@  b+} a^ZY20XH 9ƟE# lN$hEI,ES쵾1#4 IJt/ƙM0#NIxZ;"$*"r\)"%R;8%xP)@e?QVzXJʥlJZ[C(ɯz$#H05P!`˶<,*[&+{ɻK<0M(-@ ,LŌ<+䍡#X\&ؔM5MeuP䫓H[T,96P6Y O0k&;eT .=KMPP Rۨ?3r{QO벮MNzW;OL B!\"|[׃EXW=W MSӂ^Y<.XLùR.Ҩ4OqTƎmׄEٔMkU1 Q$E%p\ǝ¥YYW+$15% QtMst-ϯ|ZUPhؕ]O\_\>ɝݝ]Z#4 ⭂Y׸R#)K]޵^G=作[!%ߴ^GS[<; Z'p<(rD_=FI_2[ix[`_F `}`{EA:f[0`k'S`X B*V@ n!n"&.8aV()bOorM./0a263F4V5f6y8,cc{cRg&zA.9V9@$I/?;&jbi(c3G.Йdozdj㦋F~dNdS(W&@INU?^\]$ r8r fr`dVeffvghijklmnopq&r6sFtVufgi>w.fb.p0 (rh&6FVfv臆舖艦芶~sد863I^i3){{FШ &6FVfrPxWXs8s(.uXu@lP~~ꨞj P!_Ɓi.&h x7/Fz`臊FU(rH[Ptl>mΎɦl&j4hg`Px(٦mێn6FV&hjVnuP^Vkd傽6s~T?Bog~mV'fP|l|V{٘mN&py(4@^rmҖpl7lp٘ʆg.q7hn`qp?_m&>/f g)*+nj.kun/_V0kkf 붞igi۠20bhC'g8xl>H?COltatJ?pU`N7MDgL?O?hVt$NgYEuZWgWRouvElNHubelmnopq'r7sGtWugvwwv(FzjryVwzw/W|?}xW\JV:`k<7&hm'tx'7gs80Vy3a|/sXshkߧ^'\'z+zk0 S~Npd IdL( J?/ţ'dJzO UVzM;&ߦXHWXn{YzAVȨ@w k{'7*#OMˇ!χ|'e7Wź>8zl?0#x#=0 P e M aON8~`r` s12Ȇ. N2Q*ЙLh&0Œn`b gHJP"h@LT (h „$*2 $"ƌ@ Ùwd'kr $\g@sO-nˡtdU4OC%P 5FFHDBv&8 hr`x"%iI2P&G@.kO[@𑦔$a/A+ [0rݣNbFO]S~ ߬g5^|l x>Bog=+q4@Qz}zB `1gok? ' I^ P(m&D _mET (y=@:@XK^= 2S1͓ }f\ B ʠ. "D TF FR ^!~RLPQRp<aN !ơ!֡ޡɴaQPgQT<oV#FJ#N"%V%^"&^\ !ޖ ^Ɉ**@*d Փ1`&nN$Q0 #10cNc2"82 1>#4NcPL1Zc3:53.c3R2E6#6:166V#7nc;j 679"?>&" Y}bPU(FNN b"l$"P=!.Hb=:9j#:#cNc&dFdNPХ; H]YuWbCPb"@ԢNl֙`h2Yd$2$8vooO'qN"\Bޣ$sH%eVgYffFvn&Qu&Z⅍&C'3 "tOTϜ\|n\f\A&ӌ$0Rp$=>To. /5G: e 1)B%n;SJI"(7d;gIZ' vbf*gn^bZ]IX(,c(sENȒjS>uvg^tDH4)Pev'`聑&X!&-$.*6ꚺvxg&xeRA@YXp(8R:Z&*P䨣傖1q$FhJ5cPd:%r$j* je'h@RQ*z]*w^+˽w.ĶBZeBbZ(ޣ$hpcndɴ+P둪 "aBXkҩN JLgN[d0,$fr,ȆN8,B@,Fd떂aP|)Y$@LY@@L | TF)e]-JaɢʪBV,jPpY<p@| `ASkʓ^"zfdѦڮ-yA$m 6Ҧ+t @ n@*ntmȖ-Z-K(&2ўnm..zlR.fn6F<.FC)P,A.EYTQ 垩. -ffIn *n*>@t@(04x-`S.l&.j$Jc..FxnM,_fQsa@AD%RJ/.k/Hb;~/R&G^DJAĔ _0Sf+B0xZQ g ZnÝPY@$tĀ*whmئa 'qkeLr0ס , K^h~0ŪQP /*\@6kS k>kN1k>fcfR*kch%GmG Nn+ %[ʂ0i2+.cbD'j%',wr6(Y@+C*l3&X#KL*!.26gs\+Ts1Y1lB'J'$H~䪖F5CTL>#+:62A* /r.jBe/TAhM8Qxk|18FotYjDlD4II4JJ4KK4LǴL4MtLJX3Efl-tF4@>fR/5S1B&Di nͮHl-gR8Z!HGgrSZ!7Ju0'Tuv*T pmϳÔ,V(q`5VS*pU.ոs᲍˖o_}c@;$ؒCǏXRLU0g|YdA=tiӧQ8FhRN6 7W8гG=zeO V>>zV{w?<-i']i|}󝲄>)׿ P ,LPl!P ) 1P 9Cc)=mۊ%bQ$KG+:?H%l'R)+dZ[ipsO?R2"76xވS+O<rϺ@y t;,!TI)K1-B(nkO7-V8@7'SYj4I͵]kQO~qGbQd%NciVi6JNTPM$[>k5<ukQtZwPw Cw_—Cv`%N8ZNk?%1QLbbEeFܐI.QNJ!naPKEfnF5|+MH=D>-!:YEϑU꫱Κd]vO2UU7`UɠݥN@ yu XW}O\ /IkQƾ1\kwxn|\"]PG4a]/s>Yld]+> (x;rCcs`[тg}^1]qwܪGu74C9#l!=꽗uZZ_)V$ѱ$ @.pp=H"=x9*MAP|ꝋ|exdzvd,~%C qCRJ#D @  fyш5Mk[Ԡe Jn]îPNpx@xX@p2,fQ!G=F^pg\8H=edUVԢ8 B$ƟKT)QCF~Lbآ3-X@ H(NX,K_[dT.\Y¾m+5!#$ OAf{;i.St;-wΗ3b(FJȀ`d UX`;PbM'8z݌: ȀX d(C 'N~8JM]JDPtk:[ H{3_P .%<}R^I}S[4=on;)`Ҕ]EXC#SuZYѪ0F\g_̕>+yӴXZk4C&YE,Xmа 0NVzWnI}[#rB-+Him +*QKkUz?r]MoжB=[Hp \v05qzktRGZuȵuܲ[c`C!Bg Jj eŠ]VukvM4)AW_(/Pl- Y [+ɬ|!aisܗ /Y^0*P!ō;a4`-b$BPz]=sWE/5v%a3r^bFѵn*V:3tNo̗(r|1Ωm:۸ЖGmۚKnq6ѝnuvoyϛnn!8p7oy) w!qO<8۵1qoAr%7D@'i ȼ4ol++y1jD0Pψ68wӡuOUCr)!,Q" ]e';uoO yv@!1c X`21lbw7x/~(Vy/@`0yo7Ő󤟀QzկO;J /yWoL+4}6&ia7w}շo l~7ѯsqcַQ^KC0p 0p>< 0%p)4r#P1&20$0 4GutGyG}G4?!A5:9AB)H/TBQpD@@TES lZE!6ȱ._>A 8` 80A a2@1!  tNS@ܡ4r0N2tOk  R5OѡO4P2'5HQ5UUuUYUFAsC9;B_ACNT$b~U8J "t#B贄!"o `@S\n(VrpߕNWV(W a!ـ`]9%05[RxcCَG X8؅ax*8ْ1y}9y9yyY89Ѹ@RՁ-g Jy'ԋ2)o蘟/ :z6sg9;2)"zw69y =2$^}u}y I$!@F$f \`\4 C$ڛ5]ibR }`^%,#ܝ&DB; @*%*$  @X&FVa6&>'s >o# sHbة Ɓx@LtP(P N (H@$* >~% T $@#,.,i ,%,܈!^٠B d͐BC 8tHP Ҫ ک4!3 KV!BӸ 9Ҥ̙!N 8\@3СD=4ҥL"H0 dP 5r

#b+V' d!=-CMEmG!T,ԨT}QƷR-"wm@PH]'`^Memgb!6 P-FllCVzh@}؋؍؏m$9m}> J5a\dUP0kENޒ-mDގ6`QMOb߂lFޱ N0N6]}f.^#Mx^kNlz[dՌ5[wL ~`.bQO\ߙDSo! bBbd>b!nh/N3~u5.N^h^[,@ua檎JnJΜ~X$dcǶ^@@n 1+ !u#C  0E@yoCϵB6ow:b+-?ݺgog8Q1}.OEo# PN1@uiTSokV\aE(_G`Gkp/БOy.Dkp`᜵۬dgj!y~~n綒nMxmoIpP_u3t rߛjj _춿ۜ\z!뺾^Ğ܈nd^Ю,ּֿ_d^_ܘOgn^ ?e^|U8 X bqBb*@Ŋ1ZF!/rQG'dK1'2hP^29? ѠF"J)PJ\0*WV nZX/ɎElXiѾmITSxӨޤ=&\aĉnjf h@a1i:sJj 䩸 ;qg C;7oпU.&M[߻}zҧQOҪnzGY+y~o%tsnP@+nAtAj˔۩v+7 4Tc —SqE{Cŕc-`P̱'Sor4H$ , eP,OKmb 0"I2Q&]bL6tM8sN6tB 1 Ҵ4K#PD{Fat3qRL3tSN;T%IԌO*Ms@Kr4Hց E4 bU$/J\XfuYhQĐVJ0-OTLU`|9`C9ލ/rf5W X8Sb䷽ kxB(O$UdA.Y[!]}c78 W.W tBKմy{+@_:N_kϽ›j6/h_vBʮ5v y`0),Ҽo⼭ċJ7t%Hۍ:۴r8`n&{txqWsBk*|<ËesqMD]=I\wW~_aHc|CH1*\pl5P`c P3Ζ@P `/(da ]`7 2;119a[( aB|`x:5QSb"E8\`2 ] H*T " >@x*QxGP2l ǷaXҢL c Q$K>z$atdp]N5zdK'NKX)yL;R8l]AH&Y~5a mhKX+'dg;+O)yf 4]lXC` !asw&T٢3 MAFQfT C2^З´1ӢhK]DУe NH4#*QjT %ʕC%*bfJxD΀2`G jQ3I)Dzq$ծ~0DXR]NxڜlG*LzXĮ͏ciFUje "׀ ` J`21 fԮWBʁ/mmXuEK}aVMua2X0KX$m=^VNm^2Hεmw+6DgAIHȀ3(C]- "EQnkH^D*Pā5$XXx`#W3MM a4$Vج卦 5p]LX84y 8 S8 \( _|d$$ +ITRv%c Є.`sB*hO&}|$/bDK *R΅|"]9ԡ~hA@̘[9DőuK=@k4-=5Äu3?&{ސ5X m.eNM-Z1 Ҙ=\XZ94JߗvvNVbH: 0P u)7pLuyK:l#"zT苜g{[-I TiL7B5QE-jSbV0ڂL's]EE7 dGYTdA>ыQ b`Ě01;,t4?ݡkLx3=cվ&_3DCPC{?wj^}|f 0Gϝ7zlyHMj>}gft';0f,  A Rq#4罍=6뢷,஘$1{ʼn3#?H,@|2{y8NȄ b(R;T29AAAAAA B!B",B#DND*H4-4{)9ӱ(0"[*D+T;EaFb,Fc' (3R ȸp?`  x@\>|7q=|lIJxԉdJD% MxP@Ih-Z,kH;7ws9Ù K8JЄSȅ~I7ʬ L ް! MM,2 Н 8̸<˕ÙϬLMMޤJT쌕l؜D!91i'QBlN|NNNNL; |S)#2sG)|MlO zE3N#*NVȂEп7z H#)Ћ0Pgi*`}f U uЎO@tLWPɵb`/ourIHt]LTЄHh]o+-ԒYЋFGxTx צmXSx,u! =\TXLS-&oݾvSoۉp\M\Mٮ-ҼQEV*ȧTTٶ]95Y Y4YG MHAMPxdڎXfm6L:Q0[E\P[I @K>ݘΠ;L[9 H z _fV5` j|و=?H\UJP`NVHX]h8!X#]v U#4q ޅ233Z;Dۿ >^4ݴzX# [SMH8_$MbMRWz\ܚM \j:&ՀP&h>x)ʵp뼻D fMhWR@BbDs.c-=PVaLf.W䪙QxKYYHYZ 4_JeV[]b-ͦ#YPE^Im.0ƈMN(P P7"Úq<& `&>=YEZXTOJIhw^WnصQ^!8JmY HPЄ / %Nzzb sE; m")-vjc ~ivx<6O HEmG`TijveP#x 0I͔vGe6g #8eFw.kG99It|kkkk.Gvnkdjbũ3:ȱ>-7sllllξkml>mNm^mnm~m؎mٞmڮm۾m4=iC.06+2#|nnƭMs6)q>u>oNoFCFl2jl[ J`7o\ '>pOPD2VNE8DP h+ 5VF?qO5dv(B)4o0 7B(@ p8J8  qy fr(=,fSDϞ:ΰq8&(@* 8Xsp>r`[ pr)s=Wqwbr܋։O,XƏ/;8.8sWi8ߍOOksR/uoovqgmid t!Qim0T]N]%FG.JtFM_4vkA 5vSvoOOfuh()Ȃp[wa]9 v@00doT{vRn 5HPOxOOvxlostL.&uwW?bf|*FjT2#iyJ_,!Z0>Ё0/PcIzp15T&N Ez?A Xو'+F8aqfe'oFkܑfbUU[5Tyb=){&XWb_|2wx =xXUde7UI!uwZiwJu"H"ץYaeYFRkp8 'j#Y:Fɓ*u^ʨ⚫E9hMx֥*@TYjFuw2jf'Dڭ߂{e GߌbFaUl^q[on ,koQƧ/0C>I-R‚rfb>t\OH;%xI!X`Ev04R:\Wt憹0Y9& @A`COԤ;!g=zTcݷ5BSJfQghr԰PmݘEWz=1 %גf 8oAI8Ι ߣ_|ե'|z|X@PZIU#oK< ~Zݛ/!^6?诟F?h`@`3!N8E= !x`Z(י'm&{bQ!H FyHҚ6rrvS|-ȑJ93iQJm4l2MuZHs.촣JIWUh*j*5d5g.$re/!CZ>Z|+aXȏ~K4SZF @2б,%ǗLr @P"H$V$)mQr$be2t==ӈä.wOon;j3s㵲4(7?LO֒_\ DZ5Ǐ /ّ2Ul$VA][1ӂUe%UYr` ݁vH < @ @}\wI` -U @C|@A etYAF !ݟ9T A~Ʌa \sGTӫi^J"a1Z  & N`Y @ \z)"h\1-v[*O/b0[11"c)H3c%.5J`6j6rc7z7c88c99c:c:Z*@TM4<ң#Ho>c?o: @dAA"dB*Bc;*?#C6E҄ENdEjDʣ??"#]V T@Jc@JKdLLdMdRM<$]\DKbdPndFdGGEOH>EID\`J$,Kb%pVreWzWeX5\Y$F*P^P%C%?"e\SքST>\L%eTU΅HąFXeVօX2fc:cBfd%ΥU\Dfd\ceZ&b^҄^"I%Md&\afl&Kdfnn::$]f\#gqq"gr*q*q6'<Dt.guZughh\TjBkp fa&lJfog||g;__gh 'N*(:BhjR*@~Z_&oE`fy'gUd{{g芲MڧghN]%di"i )*m"i*@*MՓBiJRiZbijr)G=i阒).院i)NZӚi~iij j"j*2jVKBjJRjZbjjr*>jjꨒjVT^rF*ꝺj~j&jjcꬆog$f:?"JR+\fem^fav\Dk>k귂$jb+?^%m6>ze2l㵶z+l"&f"涶+a*h&agVkJ^+Zb++r¶+nlƫb«Ȇ&"¾,:V,Bl~, lϮ&lm+{n,+zB6m-Nlj-lӖl>-zmk?ϾՊ-zӞ*,J-z,ֲަkߊl-R.nmj."B.n,-++nRmɞlmƮm-vb%n2kbN*Vީ*roz/HbF2**)ooʯIoopp p#p+3p;CpKSp[cpkG^@p p p p p ppq q1@@;PKݷPK**AOEBPS/img/chap1_phpapp_001.gifJGIF89a^JJJkkk{{{,^@H*\ȰÇ#JHŋ3jȱǏ Cɓ(S\ɲ˗0cʜI͛3Giϟ@ JhɋGy*]ʴiŒ D괪ΤVj:ԯr8@G8 س;m\xs Lq.eOM]h4^; pXɚC˹3Ѩ NͺuҞ!vMv_moPM~qG=η8絓w ]@ ,Л@pHwx`XhP4sW|F}EkZdA'TfTVUm^_~QSUX_C`]Ȑ1.a!u#HڇxU@ tavI I$XI5`R vY\G5PeI5ʕݒGI& %X 4&]:f\ZPnc 1iP&agWzaYI&@ߚ%cԥp &QY\>iz=hI ^'Gf(G榆eㆮ"$bk.p2nԴH*u~ؔAry (Q|2gI]jRcvi}cџ*4PvU O ^x{{,cE{p5g9^LqkWzOB6g`JQ֡K"ƥ{h\Vf7׆,VQҖ紾-$O"Ln W{S 9`|`trv*T{YXXԡZdNY#$Nm@7"D$ۉAc.70B:jbrtIN TTetش)pWJcH9#J"kSx^YI O{lF vep搄DKŜ2JSҖ47MGGrӚ5GiOkԖglVմeMkAKԸFuM-jܨD6boFkf߹CeH j&g}bۣ%ŽN׽#l8*WXKҒE~#\ 8|[}6hϨ/4fpO_1[m1 q|ʩ;Zm5vc IsK?YuyyrlY.%/Hmh u]gv{w뙇 hu>XrSQqwznr{c7n*Bc[clE pf]gA)gǗIc|988!{O|Kswi\Ftg&xEwUoS*鲃gsqQ/CI.'T1i%X&>yx6ya$`Ov|jq8 Dt7|XaTUQ1v/(Mݑɷ_քl{w[ąWMF]Zhin8KxxMщ8Xx8Z8DG"cih]ȈgyCbBW@o7MuPpi5Xbp׆2N(ƈ vWrCTAZ8$6pHТt8؋$[Vwt"XF.3 ؏萡 D6$%_C2vQCEgateqW_,c*|!E1:7S Ih20m|s@/?}Xg1|2 wW d<yrv(5i57քO%cw#z13\#`yi~xaHS8F! ˜jhfɋiq"31usv5"I:(k)\/3GK2:F_L'$9ZRr peyoR^J(j&(xS~s5yQYoa57Wzy>Y;S;|w$xV:y\MEk8aG|2E2>b@p$4;C22N kh 8ۤsZBJ'dD +u֛6ZhKʄhIJSk$׳R*A;z*3>q%ju:OqQcS{)2uLV|(xKa9tw}Z8Z!v bsIטwx\dBSdr '~Q+YXqA+q+u|GkbW+2 K FD0Odی[nt$w1'wKBiy" Iqu~2*C(9 .Ţ)T*J jw˚*k58;|`ZʋFs H>r8b觞TT\٩ɺ`B)Ģfj*vyX#\lA,p!wQ({u`xQr;< ilBքfzZ1IӶojO8acsYb3^wI(2 T߮QrDM6^mXJϼr]M=\aͬnYNiqm~b>; lwj2io f t=.{>Z~<"Ay'n,gq龬v+ XޙҰ.شX~U%e0H0W{{Q'KBRX 횸(cX¹+M湌>GnRۻr^=tD~R~etyRd|.eڴІ q*^UV9'U*+ٮAâ%hlڤgv*>שJ6nܸ[ n؊dX8 {hS=@ABIkmbÇǥвgBw<en㖌*ݺGq d0rlj'UwMK6h^v\k]Y:Tn@ T˦ TP,AK0#2pC;CCqDK4DKVtFjŽshFo1Gw(rȅz4q#ԑH(tr'.8* VKD3h>TnK3\Kܴ {ε*t-A+0$5*; N;o$+L=;SX4{Ƴϕd [ۆ-AcUBNXg-6ڋZb [VJMq\r5\toeå֡(뵉J|7_{1_G)kV^vag 'b{7ccCP+&d98=fe-]9]fygH]zhf9&9i]z[F&iwv.id?˦X! (m#f[G;^z/s[ڼﻁ /?R5@Ss/H"ڻ{mrG\k1mŇ5m[/zk<8L D7O2@_=_]w"7}o ?C_ ëU] 3H+QE"xY .yE#[Z6%=hRU˂$3 rt6(B !DŘ̃,TBa! u&@`!VP[_v SC֬X5!df VфN [wDu~/UKYB\'.lD5>ԕzo/\5DQn6bb΄4 wk>aec!7Tgr#_)Wũ|\Br rqWD=1 xBf6bԲ 4+i=HM,ԭ" 9<@q~Vd,yDZG~6 IC3LS $E\ru܄լiтU 5 ū|7 c%x4 H"iwzH2yte-גGIIDh?D5-ZiGه,,ݤ WJ)HM?ݔMiΚK׀ T\͚u{i`D*EM,K˫ &dGٵau&eZ刕T~S4dyV8m_@<Τl2oYzty[zLC(eƈ{Egsd?*O-5_U݁xTʨ{@Jy T{բJ<"{2'/AJ+4.H/>ԑo!B_UQXqϩhv[9iT@g B̳|d0@Å Zb*/bdB<$2 (-zi̞3lA:g<8b҆}.#C)5Cْbqwa4Rxa;#BC]ICC^4PU\2G#!]*tEfgGm'!AdҹN5&CT́{4׭9at"`flmRkDQζ~U3Wӯjxi8i@Q"oS4 k}I[@Yt"ptQQv{dz-~ƅsԲucE ҝ K"- d h'dS )f@+ dN(l\mp|?cj-bEȬlr}-gs闳AdZJ:]ٺHnZ D^Pa9Q BhS}H*hOR}KmI+{WnSB~.u/ v3Mԣ!EL kN=[qg_vz"An<5enlRK؜40=݂$\@Λ?Q)lA|AAA{@ ©AAA BR z3$\B`B'|B$B)6aB,B.*B1d^,LûAC56Z?9,= 5:C==,> Đ@AJBD BELDsDa5CH| JK&Q[JĒFq B X / ̸E9 XȐX!8h()QOc|0)Ը4OɜA߰p mL ӠcDdķq F, 3/sǼ&>| GcGp>`@x\}CWRYHBrG}@u :ڥ<)HhL'GOȔvDzTɭFAɟpd]@~+.86Dtl#Ix4j( FS3Ԏpdh k7s; Hd;;zY+#zdF)kj 1I,oJQ"8&pzLUp$&@9=2,0˱)> {DM ȁX!E pZ!a $5F1Y $R0ˏ$ @N:S;9X8E7\M |(xM4+*8p6kƲO!mý3ODOPA [Dʜ\4A -ԼI}M;E'J$LǠ2P;;KӤ6kρ|=T%>R R$$SDjKodPwia.+p+TqN2OE5# 3ɔ| ,<+-@V,P%8[3 318Ե`Fce@b@8ݳ .{&cN3PPs+ , ,H ?3Ғj q\USKZVԎA פ ͥJq>P@jl)amq-4RX`bè2 }NSl>Nb6JjMU`FVD`N`^`n`n` ` .` ` ?D.5`AO$2`v\6aqqafJVEa$aKDXĎVJEozY`%`ҀdBpbb$i$e&F;.>i]b,KYڰLu5]c<>akH=>e ٭][z\,¨F^8f%&VDbcNcA'dIV6JdBbtjZ]0-(1^OqJ%]/fJy`.&D8A%n"&ͽd5dn)en\:`/7 .`M^p݄uKLeh)Uh#6Cq~N~hwhs.d`g܌h\N܎&^TN嗶eV`h]֭hx6D޽>s&d0Zp%Ђdp>eNijE}LE3z'.[ݬmi)<xE\Eʤ /E$S1Ё Vv,rfb6j#HI j^6|Iv`Ԯii m!CI#Xڦi@9`mdckvmH>jmnKF^ikJbU\X@c41RːK7)&DK (E*EcHl|s@wA.jwCՁ6?J(p /7.%viS%ڴ5<P^Z~ Վ(ۼpn鵖Y&h^m7L6咎| /nkO΂+[Yݯ--jOnnM9fSwU8op;5:ˮ$ozZ >܍泥h5 ,,^%L% J ۨ̅u/+/rx`XR.1RRlm >&Q1tao }n/w=jo#t5 `#0wq#Zk|bۧP]yӯ{{uqN~}fP5ԖRL54{Q2$S,urEP!5a~wg^ٷ"-_^8#x#9^ dA 9$n&F$$M6iH?$U}%u%.8_5P@,0@=@kUd@ @ )SY-)~E:4]$U  Ai^"5:K+My#(i__T^[ *gjU_n.k݁ f٪}8R-$ XfF6@N"X6RkWƚ[F!_mut*Bxo[5!]ϩWR^u\Op{tSB5UXgk[ R :MUBUq9kzawclډXB"{Zыyivf?CTueC_zRۭ;>??o?-b[x(@q<*'  : 3h* r}Ze+Ky$IH3TF"q wh6!sC谇>!!0ۚ 'A$OrZHk=m 4"R*5bS0N*RUvUN XLN? ŊLF7Mm(x dvE"D$$rMT8$zWC:Հbɭy(MK0L|YT.}nֶ=̺d2frdPRZZN5 Xۜub,/WIa8I/Ʒ!%1 e0"`6?x*5ּc2|6MDBt/s /Zi%Ryt:KҊr\+ KM*b4 M)J̜*E)O/Z\ELw2N}*TTU;*||?Fґj$úH>f=#+\*׹ҵ7l[=WiUs+`Ϛe aKԽꕱDrkxbjR/2ɲgC+ZX]u2iSZi|m-lc;5vmhQ[̖vͩn qIk2mF3 ԍt!w#w˪-/z ^WkR}/|+>5]/Rr_g//Oy0I* մ^I!-f/𜏾0CfXÐ0L\`X!-Z]]˘(NakKk:y錀sVb$Fr WN8\&9D51i^L 2c17饦}Y+Q=q9XjS^ s8hVo N9kb^);K_VNŤB;?1Y՘ ɢV+7~ ʑھ-3@h0InqΞpdw|.4NV(+N4{b@f͔x#Rh٭8/ +BB>Rd d8x;J% bo3llQƮ.Ju@m|Lh2j*D+B) +vOHԳ:4('tK&IuJA'En쏯DWsꢾLp7]L:eU3+CiNKT t<{U._ _"tm'ש~"1^B/g_:꥾vF.|ǃxɧ8lY睪 iq{_TǙTZ0ԧhxSeoauhbk\ILρ51&FT$d–;-p䡽6/40]=A`2ęM sp2_ aT%͖a Cq܈No|T0E  S ĄL_&IG@ R` 6Ʌ iqd=Em RIUɦY]S.CPIĉeUi9_P :^C?@GE˼ L!qM A#[#GiNPUa (*ɶa"x\™EGْMEEJ/MB"i9aQU4^RP`/\B0~q0^38\<(ܚ4`L EDL4\LtDO rUXhC̅ ?Zs=jO$]>^ aأ)+žap-dbhǛ`=_$9rKRM>A]w<`RNT%H,:DZe> ^n p$܌EvH\2_9QoaE&_Y^]_+Bܙ&2bZHcFP[y(&J!OEfLF`* dM!`e$k (i fMNJN,)eVB`~0TOa Vj%^_gdSi5n[GrZhU6eb&jfga(zL%f%% :|daZDigȊRB~%c&3hYn8X.aah:fi"+sv_lgIᬄ:FkPW^6. (,ƶE$ *bEuN@i.FQJARkĦ+֝'ZD)0ť)ZFN#QvE\mbnӣBeTMF\e7)TC\dn++rhG^zIBD A*[JH`jTd4]`z0@R>&EjH2f/-wf*mbλQuf<{FX~Wf+F™DGN\ aD&֑'0,vB') dS4L0щF6qkYl*nh,k^l[ Jl1E5mzS-D٩aiMh,+Np.^ѣI<(X-§3=37л$ERDֲ-kPo^̎>^P1`xzVLEF"(CNر1&FQquVΩ֌fDMBJ-0 JX\d5r.dV>2L36suMJ;kpnjM13eH/i@LA Sq*cl'm.sdWtȀAӕm:T,orlU,R84y*d̓5>˖½Bǁ0:SJ'#vmS~SNm4S?5TGLqDT8y./S!4ԱqhY+VbZUZUZAhF,<TJ"p󍆎1@ j1iaaaP.ecb!]5eu[Wa5_+ vIkX'}u6IcviK5kkϗHΪq!mIm4v~4mF6[Ov b7f7Z-dTpOVu+w&F]7wP-@ǀMvzMyo% z4{i3D7OwI7z$87+K|ˀW~t?8Ϗ}-x2?T_^W͇XWnt%8O4mLY׈k|lvCxkGתrO-Y}>DIZE;؆?o(DLG/YK `' D_l+t^g=58LJ1tq9N"ydro11NY] Scj/16cܩ.:1v'V4wgO4msz@[C]^Stcp )TV-@璛R;:=zB0 wqhX9LD1FD I;{Һ$@F{09EFNF`@ܟg:K4Wc MeB W.Yr@5z0ts~{uqOzS#aJn'{g;iǺ&2+U5 1{7SO[FODŨP/k_Da'v{+L_ hb>\Lx%tDW4Yg Mr^;PLgs/Sm/*Z%Rs|&F?}Ƨ[F,=8}xn5#0z1F ,!Fl" 2&$鐠'K hF;y @щba6lFrIn^7bDPk`e 6.]z;!7u(Ӿ]9wth>1g}~נO(kw \u%λ2G !ѻ~^0r KoO|x]/c50<FYp{3N?=Q"iJ[ /6B+N@K $K<4,eQ4~ <u yr0%1 !F[($Q(r:,3[jE.\$30\Ml6(/sF5_JOjtS$tD|*E1T=JQpEKTJ;AM/LJ085UL}j^5։ 2Rm$1/T Bյ[kjMR@eU22XUHGw7$70EJbhw+ ẅ́yU8[1^Lw4Sdw' Z@3k@$[)05=wRI s3Q;t+U'$[ I_]@PI%v q%{[睖aq'4mhZ5Z@#X"a5 /fb.`.-b;/ [5n)Qetʍ ײ d*xM:Kk9[dO}_=(x4u2,&$`P%2mlr%f jh_}BNXA#/4T9\dC-(30?G 悈F^f& *2,JITW93aRe5@F' mk% 2LdvLn+H S?IĈR k,@0pZZ$XDaլJؤ`XaGv  0V"Q"`0P#b¼Z&$8j" IAA<-i^s?־ysAЉ^tIWҙ;PK'JJPK**A OEBPS/img/chap5_test_emp_001.gif8tGIF87alnLJTLnT$&$&TlnT&$JT,I8ͻ`(dihl'tmx|pH,Ȥrl:hO"Zجvz`)5L.zͮ|N~}yCi@d ]w;\Q  ?<   4T753ᣡ@;,H gBp3jף_ ,7a( g&}jjSIeΞ1MV`.<) ^ S)X@jϯ`dˀ` fMK `O2v%Ґ+!nS[6 r񀰐#CaX tvfX h0/{fyX y3XK p'0O8#8h v1jyߔs%gi8prKUǁvGwނqĞS(֜hzfVbst h;pj҅s6(s286yZ(֨ްPR?~m0fVbNL=ZMi1M ,@&~LIOA%{/Wm@f(VA"ՐUI@Juţ[sVZg+eRQAjS(h0i0UJʤX$YhJjxw RlN+ tO>䀚6LP:Oy>DƖI*Zh<Й.fnIŋżO(̛WĨ pOl+W wIL4 aq$l&,0,4l8<@-Dm>LL7PG-TWm4'\w`-dϬ5elRmt7qx]|=~݂1'.07.G*W&g/w^,枇袗馧 ꪷN ~,^ . '7GWgOwއ/ O /B``XaZ:@-v9~A_&F-,@Pc1 B ߎV&yE9SjGAzBBTE!$?>ҙˋ\:J? *>Z-\Z5!^*QN&@:/$BFU4U߀U*hW[-^< 2R +X' gE%TMfSR92]5U+JE eN4a-`+TJ} [DmUcsjDU+)bHIi#WB3+]q|l\€QN-Mg21x(# M&qu_$ uZ<׼Q sixxoe麔]VQQE?b05, Jl&p+ "ZIe;TrojFpݘE1"A'B^i AgzhXG 9N2h ÃOmW lt•0ٻfvro8]}e \4mE#/Wa8fl'sG(8C\_`3"YS}U. td\d.ɼ.+8iVhc$s]!څHI0%1\V n~<])$]sK*0#Ad@tiVQ#P3nwCB;wx "izS46GoZ#yKɁ8jY1]gjJYǠv73XP"]G\#Xr$NoܱBY ?t:v1i9]]BCzOpYƎ$I:VU"wd>&II{(|w?KRD1/^u̼BVKs&xϝ(4ϖ^jP[LI" gpU TS*Tb}F݅$@3sc~z '[AKxZ>)hX=W|%]' ,hzPJtJwH ^AZ4|Ò~# QonO& oY* p~灁z+@p4YwsRp{2 q1m~9H%B3BsDTzh%ahn<~DMFZ2utDCnT^}d(28A'hzpWtgut(fMLjږ 'rф5z |qD”cs6 E 8(z21zP_vdqa+Gh7{ y.!c(VzWȘ9 >h>Xs=긎ӎh=01`%1!؏/Y9{ 4d"H02ؐ9Y!y Y@XfWѧ+YSp"i"F @`&H㔟 ;9I@Aɕ-g)Ȗ `㖗si;HuI!/= _)qv YcIӘ I yL) i>&i"Yh==Y<@ɘ | E=@PeUo䒃xh48>Q6`.:&PiǹJ@5AR@@H)j*% ) יѲF.\KiwT_@YJiJ;@YR3qU|MiIi90a AOPT#090G0JAѣ'j3U(c@@. /:Xj0-YʡyU I%z}9XS (1Ms*2!h Tx?qbDEhA* U %h7J#br!qBQztʩ٢*l 󛇰j9i&ڠ@,aP!L jr 3QSC&$ %p%o7PgڟpBY- {rzvpg#ʦ "ѯ4 8%e!MSd~8` +0a-/xrBj# %jmpb$zMZh*Kb;i^Y k2ŅM2ִ7\qd(K0.i2zpز xۮպ&5 AZ}j 4I{@)BBH+E%G:Jh { y*:{۳`1IjmeTC (U5U{rvS%!PUG:0"$YЖ- j%́ a{K ૾ǹr +*^ eh|;Sj#Z ;Gjf E+T=bn7fa$e% c*G͐˵W:Ң*|0-+=Y$լHc0IG#49}+[ ,y@|t&D|Q_0<zJc :Ś jܠۦmIeذ@Zq k9IMa,`0T`yǃiɥɅ)Y{l>? g|>ʨȜ ɴ|ܺ)7i˵< iä,˾̭̅4˷|,elŬs<°ͬ,΂Jy,ͥL<,5_.p = mm]f?%) Ǽ+13-X#=?-ݡ\'7}?-A/=MIm5MKMWm\3{:N >>9˳of QaZ2m1^GdSt|fdbU"vKdֲA@+ff[Юڶ >ɞު6eѮ"U[MM ;q܀ aBjA \;^ɴ~$f5 ]LEZe*4 .qaëjR ֹDK1Ğ˲ $d꡸Cr.oEO.j Og+!Hov+ ;1S,Y*Iٻ:л/f'7x4 :o}~ o{}s%ܫ/ 0 ֧W ]\ p A!^/.&,/&/f8lf~b0 'P&#͒JC[)[-0 @LZ[lP 2MƝTOVX: UZGBIPXXacCcbeKfh`gmlnNnp^_S(sHqEuvBxRoDK6< 09+bEd1ZHƍ9f~nt c@֧ ι{[-;繼ȋ Ek(H C = / {C<:(ĥJlQ] Xf2?MFeX|1Hz"e# W԰6,,I횔nC H'h(358 В9ի3B",!`3^ ruj]c5-0 ftmx:5 Bf v>y3DJf 9`Q@"۠4U~) 3עMniX+@Yk{s]*cA뽐[ *XΖi(]ۋݚG 쭚ƙ Ws&UnܩmRIO2`cӿ u]~= Lxa֓.@K)pKoWM v2_ @ߦ鸐EQ`KHA\$Ċ%2gP/@ Fɓl#=z})Ѐi0#Wz0NBX( `fm2W R N( !Cs 8AZNDHQ osI7/3.q9(_f7@L &0%f 'Bv[b1Aw4a;ɼΓ CJ E$8y B鲀`[3ˬ;ne"q'#^+D/tK(ߍ\f5KmT7Ip/nKg*<d0Z :'Pui` 8rׂI5T7v}d`h`S) }PV.wQ}iXh{Nb1d s6g`b@x@+6$R%XPpj !Ǫ!DJLlb XTV8BXՊZ̀D*4S]$?*˓aXqyG$Y4TuEMJs'[ֲ*KPv?idz-=V;i=n v;KRWY% -.d KՊuizX :i"*.p[B6Eѵ.w2f;Y*?Z/sۋ\׶/qW!Ov`FpB`S f˂`Wpq_ gXa`!pI`)V1K/cؘB-oqLVƓ-,O_n7q+!ψI+d(EMZ.픝[_j02a)\lg\يiVrk#6wwwƳa^+ /پrMGYyĘ+]c{0Ye;3w<:tAcmPJ9jX7ҲhubgV)5sQo~Tkbz:le+y OYG!9،59d FZdp*߭ (:#۔E}+s?+ZpUOpt7k^6{ cԗGYOwi)1k_$7u6W0}<=&nP#b"?˗nJM2A_h$67 g5J [y]idw# 4ฃS&nk,. Rwwlh+xwR[4\s8&^\I{R!E_d2*yy ]Mu90{op|Sx^/VIݮ|Wz('ͩ/7pAyv 1!t}}?+_w_ @죷Y+꫐뫤&jd )?;Cȟm ! !*Xq0@ LӢ*, c%y?X< Jҿ[>A@b6TZB`z8[P*@h 8G$T'>$%PBNZC8LB9,& :8b)܆1+A&Z$QA!?/?{`'BADS&SCDk8'B$ERL V4@E>>;@4)Rz끻l=ʷ(!Gl=9Ot=p9^'_(ӚMh*gQ={)6p4)FbǀʩvGEpǩ;prNDS +u񨴚/)h+<Ⱦ쫋ܫ2X,8E Eõ]5Z,L687p̺NI"c(cfS|JܲDT@Ji#c4$JEJqJ?-4Ե.K+KtI$Ĥ˼̱$<̣|̤ʵlL2L͂ˌ;LM4 ,M8M00|M$>MڬM,, \d1DM έMD L.tLzη,L^R0!DJNe{4LT,lKl,O3tOZP$Q-QakeQP#m*7*j˃9 {[l 9P. R\kp7bʺ24ł'/dRA#SRAA8ˡlK8L#x(`ġ88[9\ *##a: :8hFpSDU)S="\E9E=3b*`:Cդs0mɿhV'UREReغA,RqVzP!?*ڂg9&UAI)n[(Ax1+ z-Ն9;MW|sb8ŋK@|$«Xӿ2)d# @Y\Q٬Y{={S%d͢'J[&4V APVl\XM pZFSej#ɵK(hIY&p |܁ĝźИ7U"[\ UQ>Q]k +@qݚ™#tbD5*$,.:KyBc̀4#8D=C]ڻHܵk] VtR!P^B,aZY@9%)NdTkHYV\EBLXXq Z܈7e_ĭ!GiՎ+F QG_m>%,Q\jaڵsĹ_J10tG)Ǜ%*G&n {}H%HB0] ^[YIj ~` Ȕ$IZɻRB~I $፻ m` 8QuLQP -5[%5["U4 NNR d MϮ5^'խWf Pn=ѪHefHeC#c&TMZVf]d\eښad]kfުe eU>;γ0Nu vngNyfMɼM|g}nlgtfgxg &Fͅ>hEfghQ^n%452c*g,vΑeLSKhpff`d& aW^iH.曖V^5SfꌎJ.eifjfh.j>NTLꐞ.j~Ұfϳ>^djMiqnkVk6 #kinҘ`)kFw ;6FR:fLB$ 6g.8%K`Ԉ=ETr3e+A3 1[9!P`0װTM5I:L=n.O}.\kYUӬ%vQU^UZm/(Թ Vg-Z,XՉJbqLlh]slVG~ocm0nًs; *< :XETW3(9xWqU[rkq~'mA^6m;[^g Gm[9!Z{1ģM;SxȤ;Z4;Ksfqq})6`蟿!''5> s9uAo[Blr(k[7]8O7u}SWe$ZSʵ\^Oա@X""ҟ#B]% _S/e!$]_¿tm<夲W8oMವ%6\%/tqG_|qwEJ79&aB߿n_8Da7x!O7N˅qW·HҀO\+?F`Av+c6FUiTkYrfj6GJ=Klzޟf/܏1ݏj' mF~.knf>j:l\~ni}sei}~6{N&kBi/z?V0~%+N-3]ǯ;=0(tQ#\2}R(*R+6r/8,E3:^7<.oCE=?T~_`!!"FIWd%e&g#Ig'\i$*++b$GVU.oo/ppӭF21U)E445#mTnt59u3)8r<.}==:~?~q "< M v"^+[DN$9b8 CD9e:&>$SO=Oܗө1M-}BHQjYִdˑ)n=-j ] .,A t<@b bxEU ]MnjԪUچ la :gXE9`<X ӛ]{fڼ1?nqwˁ{O-m53_o{v{C`oA^' ,0G`0@mU_]Xfę ߆gsDKB m`#:36`dr @n 9aHHdO8؋SJXydX&DV$ k~[]h7qYFd(rЙ|'N@gn-G9grȠ۵9(7&vÁ':C9#:\l &$ =:"s:ᘛK9Գ):y!! Lq_,%s"   r0x/Yaa $H8$(C1u)60X@PXʃڎW[aVH3Xp&+R  !Pf3^ʋ|7R f\ &CDRylMfVeqBDkX 99Lc&R!ȴ1D0e,HKHZiufd-?׺@W3\0 5_HMmt׹VIɜL}#Jn=`'(j|F¦{އ8 ~ @FICm9/{ FY-"4#h] Lʢ"hUjKMЎt,#KObIR0tB O1zԧ,5*>Q-ŔMSAհ9MPJխʢf0kYoЯU^A+ZrEyR5*Xי}_ջ ^؛6H;#+ ,f3R,hC+zv=hKծV}-l9VҶmT򶷾Be[vlq&wlsJ-6Vn-KcE]>4m\S􆕽2mJ+-}aW+V vZ2,`d&̓_Ulؾְ]r޶Fn]VÄ- 45k{a8=N⨊x)X y6U[ayY]d)[Ʃ<3oiQ3*yf83x#󓽑`%GN]Նxa1}~0hHB@ϳl0@ U ahR"udm\W+iL`K=Nh816E}le Bb6XXt%;vJyofmL~sUy#J[ 506.R iOo~CY&A\Nݩr˳> $q 8N`ak5[{93G1bVuo UWE[Ic@Wjc20euMIMBZr fFω7oƣ~hr)kp籑,Y, J*xu:jՉqOn*922dsyDW7Z;&{\OzE6q\GW t j EYT!R铑'%N-ցmM+-{8/阝y9P8eN͇y\@,z|,F;zPՇ2B|XӃlë/6NlmMm>7S*A)~X#c0QBJYaY\Ł#!>YRA-!=$|1ԣAdZx D@*F:)Eo9$Hz=f$!VBKPiZ$#`"OO$PP%QQ%R&R.%S6S>%TFTN%UV%TZVfVn%WvW~%XXNV;PK@gI88PK**A!OEBPS/img/chap6_refcursor_006.gif"GIF87aC$&TLnT&lnTLJTln$&$JTڬ,C dihlp,tmx|,@,Ȥrl:ШtJZجvzx,zn|4~yvS) N%H% \ #d# r,U&G ZG`ı%F [WDѿuF#" "$E"ͷYް})3-ǰ/}!!P@HI;]-Q`Ań >6pz1h} ` X eE"L2A~55"r[I" QJJh1#932IdEt4I̛Dʝ;bʢ8 Gڑu-~(NpJ# k2 G V ¥ SL-&*j&6k~0A\V{_4K4?Kq1){rVteE󜣓r5W-p>@WtO';ǝuh&*T|#  8 0lhae ȒwBTDǔ;kʽXExN@:މX~&7BLb"#:r<` ܋%u _4P啩&Q A1Ո<qQ%^) fPi mG8`_g dqnIe#\y9nޣ޹@((*$*vdꦬcL]ӣ6;פG() @ >SOʕz%T + |!&iۚ6#겂L-UxmiQӺ -fć 4, h䫍k,51#l8*B|Olhނ3S!G#흥 n\jgKղ]< 38v#$CY[2Iۡ\qk/M1͋8s#&ҳM/9)pMUשEF\OS 0ٗ= bmIg4ͮ51;_~w悜衒g-!Q֑ดEI؟E|لTecWEUp sIߡ$Ȝ@{ >Sr/&\ )X`?N@ߕLTQ GŜNqsvÏİD3Z^e(c=b e-3c¡3/Xp#:v|dRP&<t-H(Ll$Hp¡%05T2 \UQ;%'@˩_$,gIZbÖ̥.WD 0IbL2f:Ќ4IjZ̦6n68IrL:v ;Iz̧>x @JЂTܥB KY2C#JъlͨFэz (HGJ҇(MiNҖt"}LgH8CLsӞҦ> PԡV)RT(5PZQJU*XUՔn`WJ֌hY]p[JWUεx]WD_Ka؀-c#KLe3YlTCKZg}C/S%2d*g_xmXٺHQmZ E jZ9NI[`VaXL!r 3 -sK4h.Qp]+BC^W Bhҁ$J" Rm6^<o2 bH+J v»*Sh*$yw% q 6n_]>HuOɀ޽~3 _雺w2Sbt7(_ i?hp} _?y藵7m?gaGow 'ƑIn#oW"g 8f+(;7}Lee3iV' 4zq`'9Gdl>!EႱ9 ~u97q-H&/1Xz_yX17_#tFs vMw@kC$yX$dB`<>.]\3HfbQa0W\ֈ&V%g:$ l& eQ5V6f`%vZQ|f|(Ls y5_P7\u|!iz5(ѐzw~$yS x"5 oU1VXhi;'8 *~09ZÅq)8F71Pm`p,5 x (t' U{zp&{tldY"^Ayy 3n9Pf@cgehc-}acuaAvwܘh7d$b6&&\ur,cXYvy_hP^@(kRlFlNFhE(֛+fc6i'nҏkvi%g%PInyn6qi n!rmGhmʆxn|!'C=חUHHrX.ia..w#ȑpn F)rVf*uw]'_v.sņI~vCtEwH8e{YX3j:ХP{9}:rWyw!@gCDХڲc^Wj1+ɓG *`3~Z;,י?*G6?ǁvz{ʂ%BF &( J'PV#a{X`Ą i9gx ?*!Ep8H,ȪwJveY1=Ɔ-4<ڇ텫AS|-F-з;6:|hʺU]'N^C$ s[-L/-ֺPN,H DZ"% @h @8ͭl]v nQ̋g 5Y쒈h) i"`&ǘn{Ꮜݩ1sݝ"&[&}˩TUݽ9n5!~LG[u~ 0̻wᐽ pDj޻u^h޴̝ɓ [XNm}Xi:傋VmK^ɛf[晾莮Sw>nn>N^_+)['~~CО^^~jھ>a)~>^FpV?n o R_׀ s$$_ &O +?-/G/}0Q8^<>C@E@7G? ӭIK_Q B S/UQtd!ad~>~T[0ioa(_!JP"\`MbH hx^- u _h`#VJp^nMq  [a 0_;"o^guDS = YCԐEڟ 3q`/͗[8@ G4 @ M97s:c!M&H#!>!ݖ܀(h r0&,Ѣ@T HIRc@P֗%f&g'h(XV^ݜ$@"BQ BWNXó_JS 1'򗀂TQIʭwkxJy,noS3>m0H@V"e „ 2l/X͡+' 8A.Lh2cMS_pqcS3ْ3${0 97Iki БQ+^䮓j5زggB͊P flb+bZ#.l2jV&יh0Me1 EI>] eXBMIDf]1m 8 ٦.!Ebdfd8~y#8;8K>S~9k9{.vT>:Q~: :绺>.~{;n;?+<;3p8`jB!&|+PB頇%CHOB\"S "Z\@F G' c :X@rƠ$@pf(:@.bMA0 yH QV{r(*7Hg`(I!$1!)' ) I`r. |"hG2S@F} +|[<"PCd&`?\ĉtL=f 'Ox) ? \%j|eʈS:H0ో=-Ib\+= 8l7b/ h9et(JA}IdE-OI[m-cR20DO3 M21Aqj7U:DU=ѝT-SR3"Ө1XjVN1vz EJ%Y > d0ԴlT+}{ "3aarxBF5,8Fp)ggƖfĵ?a셁|QdQ[iGx\BQ|+xךq7AyK^}t %/5gwVPd/L|o pY=;B ̜-0)aeCl2D">qL.~1c,Ӹ61s>1,!F>2\;PK\'"PK**A$OEBPS/img/chap5_err_handling_005.gify4GIF87a^,.4\^tdf|TRd ,.<\ZlLN\LJ\lj46DDBT<:D TVl$",̤DFT$ LRd$"$LNd<>LTVd<:L42<464DFD\Z\܄lnldfddj|ztrttv\bttvt\Zt,*,ljl,.,,^H*\ȰÇ#JHŋ3jȱǏ Cdɓ(S\ɲ˗0cʜI͛8sɳϟ@ J(KF*]ʴӧPJJNVjʵׯ`Ê= `ٳhӪ]˶OnʝKݻ9؂.)Fm@x+^Xޒf<%AJذ@čCq^[&%ja&M_sU`ך t2q<}EsʻA#'u3>:Ӕ`3h ")P^J'Pb„;gyH%/@40u^ӕ_hEp{`R]AVy/X! $ Ib :dJ"p*:$IA I'U!ueweb*6bEIHD/`s a@9P1P$AЄ,a牛E(%! A`pPR!:宼.Ey Q` ݀@0"'Ua-;@B+M…AO@`B'90$<ʇB?5E@<@9!= B6<j ՜W  @(h %iQJrOMѐM#|IID QӋ4GM9ԨNuVհgMZָεw^MbNfzg'qMj[ζn{6ɷMrNW$펷MzU~[ ^*8(x,[17ns ׊CN(O9n(<)#g8Pwؼ@GσNtHѓt/P?xGBWčVϺַuGoXS;d.=;ۃr[}|Iݡ~w=fGέ(>/T O({GOқOW-`G[O}Ȼ@O;Џ3I1?{_+^>vϿP'!Ra#Dq)B!5'gX|؇t'R3E@pdmC? &"H>%qbc@|3X7x<؃ᗁEׁEE(x&x "FܷtuGV>؅^|@BHtDiS50d)"V^P20k"p #@OiĔ?004B0kń*8Zghy0y[0 Yȉ_Xh|axcte%`\0T0nF"O)W30`(UE`K"pA&p#hE#ȘA&фO&@|nȎ_v@׊B% 2&>6W(SB2_&я'Kw\\ $i=Hua=%a9ر_)@~h/@ (& CYQ"P6Y[ (Yh)×wiZɕ^ɒdY.x(1p_pir7 d, Pr{ᗐLYriIF)N8ZSsilIYg90s2)QIJ; ,[[ Ki !=KiI9ɖX6~wgٙ~)sD3P0&P#2Q2fFH#3k'j*7ySs3|b"a`|JLNr2)W{?Sycepkriۛy({i88xAL!_` Fjw;y{{[rPKN Ɨ@=0D`(Ԩ.Xn6r; 'g`YРyp[q3BIKKgH? _Ai Y de!%A˵Y[ #i`_90YR1 1EW<{%>A)yR}a-v8rOa@X ^cq$׷$pL@Y3i.y{ٗ) >[v{iruu%OP hD܅F,HrJ<ŵ9?`$ ! B y"L&›,ܔZ<Ph8:ܿn`#k`!~YŹN R\!|Wz麴yY;NiFJ|imܿl@@|G@+Þ|Yn[.u݋ (ȂܓnK θWUq 3 b詞0Q)KX+Ȋ >Ƨ>l L  Q$:,+E\QDXF=fH%MDrH-]"Ș5mN=}FSPg* ZTĜK>1iTUaM8jզ|VXe͞EVZmnZQk\u nѮX`c셨b+*n̳Y,_ƜYfΝ=ZhҢ4jX-^:9@ҵmƝ[wӰB\‡ʦ[rk62tqR|sݽ78v/ zE'T̀wڿǟtxG<[O2ώH`2- 26C"#C PÎ8.BH2 Hf5Q R >/ :2A 訤:&pò4-$G15['ac 7i3/G;ڱ 1@`ha $(B#`@/ PD>ːLڰ̏:0E0[GBTTPF.6WX$H]D" Fb R!Fh$Zl U:5,, 3;9<[،_?a46Hr/$j`8`Z(+%4+dR7#56x2>d YXx,аJ*v8l8hρ9$$2cF`4*@`gw3.B3\52> KVN}[l#;B[oV_=Rh fDQ3 `<6|c/;ψڲ#xc,2?ߨG?O ؁[^B ~O!g|/Ua3`T)!z,  /)pFM9GZa(#0eEqXf&HX YB `8Tbt`"qMp` `A{ SHF0.#< 8@#p! %;>_"0Yh3P$/ BCC7-B"A49j4ƌgK)WbL,qy'[ Se2GcGtDLj{f6r6f8pә4gCsvӝg<9OzӞg>tT-OԠEhBO -@!:QRsQm ]FetzHyRnvIEGsҔq[NuSԧ?jP}ըGEjRT6թ6-:UV1RjVUө_kXJTլgEkZՊ"N'i[;*T+k-5{%&`3׉U<, Q&<.uMZؿFC_".gak0lY˥tuigZ4 W-ofM2ƌEi%4Q־vrMeb*ٌXQ̽(wo4CP%EEqi oρ؃րb' |elOԤ@"uUR%em~3{ #taqyM*;@ `|9~tBl5 _!7b!` YP?Y2;"@ hHPю.f|NNp@b& 4Yw~\U4BL`|4<B԰gaW=5un?ىnIY~~;/sq? ?/ -X ;@H@?@d ?"uR$4D@꿖Z-b4&Ah" *#!)Chc*'*T A&B0'0)243DCZ6tC(|8Ñ4C";=C1C? Bē()4ē& D"EdDIDTADPaRMDPLNHŎhD$|%LEPl \EO4S܈WX,]Eb(ZR%b4 Fc %reKjF"j zlmDn̊f0ld"ǫ2GSI uܰdDwĉIP'xA|+ltSzJHGGYȀDDp |(2!J'\ԍv [A(ЙIKY IK8`lRGʵSI:ЕJ^ DL ȁ(r1tQ9 գ_a%֠Sd-)dUf='*hjb=F]uVOUoUf@p-InVr=@s quUu?v=xCz}=yn-U[VBWg׸׆ 7,XXcd؆UN}DŽ5bt؊XXsbDƍ ,:S}Mp,Y8HXemYxY0"ً5Zp̆(?ُ `)X(S8ڎX {D0PqҧY,'UE@{' 0%(dtIHUa<$#1h'@w\] 83 Fju\F1? 0*8;Ѹ +`[ݍZ2/S;px 8 -ߴ! PuiuE"5  4 OLFXٳ O kF@`h8z$8N  GJ5[,0e{IMe|(## 7dRɉ9׉#4.ހ/!Nޢ ` Xr1+ -xN)b`n} 0s8*+IyLE#`J䴉EbIL`8DxĞ>?.@Y`a*`n8;)uc;Pf,.#1!L"N<%- X#Fp(ߤ#ftd-gɀ_{;F.H` R H0\qn75XFgZL)!C٠]bNi}flQ @oi1F#b.Z(qPc&06ҎSYvGZ9xQX[BT Um%TuZϨW!pPۦjNE~͑}kVJs]MUΧ>E*LeɦlxrlQqTmVմF,VV2~KDm+k`2tm}mª6n:)VnZv-nnDlzov񆋁(yZX~oo6{X?'ptW6ppoWnp@ p ?1 7gq]M W?`Gg6q2ppxp.p7!#q'ڶ9;?<q.`qpZA8?@:(rr)w??0r);W7ǿ8qڶ8:">9>0j"?2'0BOkG?/=>8/Dx=8Kt:@A*O02p=8@/7.<'1B6XȂNG2 vb7v*k4;'9.hg `[W0\U7@'G? ~(r?c6A7jv21 smh27uG/<8@=`v.2>6/=Ww@5yaxF;谕oyovyy2yy ^0?+ mK)=8/ /33R': zj#zk0p8H25)i89u)58Pw #;6Pڷs~Xѥ/oj}#o=ӯom?~ 8  * 2 z砄Zxqa!F!8b_ x")-"18#5x#9#=#A 9$Ey$I*$M8NJ9%UZy%Yj%]z#~9&ey&i&/Qq9'uy'A"}y :(z((>JZzi|b)j)jj*+5:(t 0DBV D@+-Q '!FN[mI߆& L$ `@Bl - $nnL@BM'0: ~ 3 8,2up -PI#LR3cTs#! 0@U0 D3H<Eu`O4p5P0 P@Et`<wwD!1Q Da P RTkx0 8T~y\>V$-A@AAF>:AK^@@I5ACmջ}6JB'U0ןm}IF81A@ P@ G X'?u|倅LX0$%@t4SA `  fXIԮ}ѡ q#0/0"At V L0IJ$RF0 l@ؠm "7 |$F8B | PH20=$LDq"CJJĒ#R0"I@(8p%$e|f󭱗:1H@"ڮ!x p`!1m3H^s H` u6^3B&u!8Gv(Ѓ&Q 2r#9϶П|M%.yAo$(A lb4FJIR$  &cҗ. :uHILt.NlTF ڒ ѭgXQ  1 . hTC"@N @׿*XAXgsw4WB.@^0(f@Pϱ l.r/1[ 0ڍ @kG@N$ =^iW/v{B (H4P ؏(VdogHہћ%@ <0b ɋ4\}B@n"?} :b۸ǯbL( }.%3N~2,)SV2-s^2,1s9 ;PK~4y4PK**A"OEBPS/img/chap3_db_connect_001.gifm1GIF87a8<>L \^t$&,42<TVllj,*4DBT\Zl$", ,.<tv̌|~$"$<:D|zdf|dbttrDF\db|LJ\<:L46D$|zTRdDBLLRdLN\  lnln$܄􄂤\btDFT lr,.4LNd$&4TVd\Zt伾TZldjtv4Jd,8ç Hܿ*\#J ŋ3jgqǏ C(ɓ(=Lɲː$_ʜI`̚8sLwsϟ@ J`C*]VҦP6}*՟Tj2+ׯ`a K,KfӪEv۷Kםܺx{H'X -ĩXE1c>WЃ.G,oMd@ŷAP q2ԭs{*Ǡf\:L=pHDLX9T- #:*h<719@Px^)\EDBrU od0 0 `!p G) r∂P zH_)b)4vac!1!?Z$3b Ò( H#"L!|(H02I\9\If ROJLXf) Pan`:0T1tT0 &0"#*!*k4hY $JʰЅ h` F )B ")7L0 ,Qm BA)7 `Vs ٖ-2)zR) 2/)\pF˴(* r  @c0j~ @ <ȎF@jܱ ,Hp@?@LO,+J@">l)K 7ܥ0! ~ @JЂMBІ:D'JъZRюz HGJҒ(-FaҖ0LgJӚtNwӞ@)NIԢԳHQTxnPSJU|NXRU\`ujXǚ0+Zʑ^J׺xͫ^׾ `KM_Jաac!Fuuderg׊YiӊZW`FlgKR~ŭm Qֶ⵼KJ, WU-i9c7/u.r/ܳX^{Bzmu żnaKw$ z_(wnyÿoY\kAp/, xourC o~;l]8 !pi77Wur;0t !`gd3y@vyZ(?9˦(cS!ĢͪZsd)a*NSשO@03,`)V0:z4)}` n@r R5)R-Uϧ8R c> 2 SG:ǞN @skRL[M'kZB #w'w]8wl{('kk  pB|'lAB.l@CxL$ j da#@pPPI8%Z@\s3Jۻ7@}o;6O!7ԋnBiw JR 6N U U`h€ ΪA:΃42x P@}ď/qR"kw:XA`]ORPz*P]xx(}?iq%+x~8H >ff Gq<DžTJh SDXƈtnd@o4uD Px C}4,2\qi2W 1G4x'h&l׀^8.xЃX ȌHH^|H 0}]eGtTA@ i1 hp,2t& '(x0KDoy'84hB^&nxؑ؈Yw >p)2#V X{Kw "aePn$` /'691H hk"@ׁ11/R/w7KOc907s:{thiyhYu\[^bt_Wf U`yUXd(Ie}xd|ݵnqI\5uaegHj!]U_y闩YUe9ye i ś雷f)yg9{9(9jU[ٝ0[^ZwŞf6iY9uG;#FFɠ֜e!hbjce:z:^+ =Z ɘ=f^0^1!e%Ja9*;ʗ?*= J]f`\E GK5,ڢV4vyY E IӨehjUj/(f*5ڧM]SJwJy{n 3 sd8ZljJ^{Z Uəu ZaJY ťI j`hugyڨpiסivF+0jŲDij:h&aS cIlm҆kئm*A@%^lfmno,9) hmkhs0='tDtJX'g(r$Wy=@Pr1T5G0GH楰CZ$IR}!'BOX|;nIK :#DGg8Y2BH-:T pY,2H/;Oucg&8q=qcW8_A8PһJC@@E` Hۭk4X*''Y[;p7-8@ N<ň}P8]^,<f=Ȱ—?I ((T⋊"xG#<@Hkx C"l94Y cF970\؍6xyb^Ԓ+ WȢ˗I )G ` 6,'sf!N p"ى`L @ kY,/ۉd;6Ik٠wpVi ~4#dsJ}-kLۮ^\ <4򛢿@PB"f0z'ɴ*͡JI; ;p-в˗a,IJ)Lϼ@#Nd M (j Ѯ< T ҖH7# 1jPAҾ86B$eiNԖYӵ Y @LM[R d]eII ]ԬL"x!umwMG | Ғ2=_=z|BF/ LJl؎C Φ ]jxMז=5ىmʨ٧Ф-ئDӚMJٺ]ڳvܽ<܃ԉ<ܠ] ]A=ض nmQQ̒&Vm I F='7l{ޫpd`j ^  `ҪEjʬ[O0&#-4;;M&0_Zڻ% -mpLnVn8n =ݣÉP#f @ r˱%j , p)#㻲H^>tg~ K`ltEusNu|ݤ#=Ǹ{G1 sO~Ls0R{'wx\wwy7u{\iIn9&sj^{O{k AB{ҥ@ރN#G c)AWW 㗆~ `ͦ.Nkп:}u^D` `{X,3X-k\1>܎>@$_L L஻SxDʼn3@1lwf|*p(|!\桎ɳ.ʝ(9CҤ1Pkzg:ގq,w=:b!so2jGsP"&p x[>k.e /v R#+Py y(>ȍ<ʶ6͍|+,ƋsDu)HT/% `h_10,KTX}PKY;p0@pi o=|r}3ޚ|l> ME]/ XӀ 0hx)9IYiyP( JZjz(*8 K[k{ ى( +N^:{]]n~n/@\+n…57蟩 + ;zDWJ<2ʒ$W| 3̙4kڼ%N:w1PP!4VK:(QѧTj5뽢Iرd˚Eɴj_ !D^DÀk]|Wk]uh02Ŏ"Hy2ʜA[. 24}e5<ԧ>+;7Hכ5c6جp?>7c¶#n :*ΫWlHIƝ^%a=us5x/._P l |WwT%mU`g |fWM8bu)'12孈bF .IOLAc wa5 b  PH㏦HAPFԂWTyeHPA=fD9VbqdLd@ DH11D B"Tzij&)ɂ:+j:5O"Kl`ð@(`&$vJH'x "HyPx AF$" 200@ AX0nD X"0 (1 c{p[`r)2L[m0okЂ̬AQ"im $1 pzb'{1#tC0B.P 㺲C 0P"lp"+PM  B Nm'xޘ  BHM V.w!.H $2!%}(E┩*[J 4HBdEFN0@8<ܢ"Oejt$$C)+4 $EoP vɈ`,R,о|.q@&>f r$B%z޳P0-[ L9h!ڙ3StD:;wF1Xi!ũrcR[9yFAx Ӓ p(p@~ $ТbATd.rp*TJQAuYӺ֛p+b`DQʹ`/<i eA-d NG4BUŤ0(`0H)y"+I| Vz}& `l!Ac?#1ӹ nK]CK`{%ٮ&8_^l㵱{+f)πX"hFRNj `&B0` [HUp, HRIX+"nъE:ag,pi1~fDcc(VmY16q(v\*6ВDdx;J~2#Oˈ2S*s9/Xrm,N#" R񘑂ȶWt–,?͂G meB#!e( HKώs4=N[d}jPritMF:nfU\i[ZʨumRػ lMDfU';ˆ0#{ڣvLP&{V@v7ys;/.e*Px:/̗jeW:-u<;Mwoݷ`L3H9&vP7vQe{V3SsUǷTPcZPx{Qg#_Y 2%x)(H$GWA$y 1ZCq4 ] O_uWE@pIl8n'Y3>PKzL+(S^og=Mԁ& : uHEyɥZr?dL$PHRH'r6 ;#N=O%`QFH%HYPt8uCe24xS*S2yh"0>EZwH@%Z{ @yC( /RYe(uxYPw(1E 0_  0 ײ{;d,9)ŊV9-02^) vfHpp(@E.8s6'v iyzI ;p-VsV|yYK6pPVq@06KPVdtٙqÆp&p߰q9ropleٚ9)2q 3PYi0"YywfiFgYQf)s)*RI gi1ctƞ) 霾隧ٝiّڜ)%v*n #*e0$9Т̖8Yrʹ2**ZD֡BNPi6?`lj1 YJ=ZLjoX$0*j_pdjfjmh*sʧ\IRwo*9X\@%`W)" &bRF*"[g(2'ur'!UZ7RҪꎍʣQ}PExbd{xP,pG++#w ,Rb:f`^RE45ic|fR5s3)\t4֒3Zv*H^Cw~: c(ہs;r EB(+"wQHh%M;)5uN7)Rp{X9eD&* C{Ov`EYY+5Z'a鸲nO1%յ+ֹ_*@_ c___`7k [~mY:ӛmiٛk Ai㛣]*盷黼 +wkEk*˾ٿȼիq&01i{h!,yq,ڣ/h n™`ۘ;{pk {>$ܙ6k8|BIW˜4,[| ۽KMR< |b X\!*fwl ƍAPD Geg|ll[Ǎu ɩJ|W "|}V&Q.HARCrƀ 36o<;a?p5v;Jb22htDaB&ڧ ̣&jBu~"vjxSWu'[3?N`^`ښ?@Ks>7V#EB>ZA?N8%z|Nh-cHWȪZ}z#&&ЋRm{eDPdF%P@DFE] u%htEY$ԊQ;-ȃP4HͨqpSp^m rKޢb5٦޽TVII-[DKޕPJ܈@MXϴx5ig m޶lU- .RA!_\`PQ,O7Ì=@ȕ> (_ս#UR'Ŏ+eN PVb>k`WQEpw~9HPdh%j%^tU$U[U>{9l%tq~Y{ZgDzXT臐^np`۵[dm삔+ʅ ە\N^'SO6%N~\l^(U]4 @}v쭨~Ď>џ^zsȎY ~ƝLLO|#oN])lԛ^ ?ǂ /9ܼcLWL'Ov0 &ǂ'<HouA/zVVLl\oN-l1Ʉŋade[qi4;4J*p6%o`S?*/ɚ\a_];? \l?J.?Ƃtr)r |p˕|c,7BDgt*%*sl|ӟͮJ;}9) B@X w;w`wF&z:XŌWЂXmϻ S12$ NS :0 % ճ(CCK6݆94<؉3J0酬YH HTN0PI)$1,VE#$P!0bnDa ˆ(P^" rDb+b'<,ZH V$`ST9z̸Pǩh]˶mOlSHZCuT @8H@WHT0ÐnC#\g4 K"mQ L<4AЋX-;^kHܴ+_`mFr1j17`]42`H@#$<~`,(0ሉ9~x4$X[}8$#pCgb%HP HgxT~0B": B(A&{࣏.HDH"S|mX D2'1t"r&ihRa!hHb0HPG5RB P^|EF~yA"`+0!Lҁ &B1I@%#8 b"zsbgqJjmXB> H %(P @ dL@"D@ m* RzȂЂ  IK 0¿KBf,({pd.$mPr @8,@\r4qs ﻖNP/J_O.ҁHC!1"\k?w4GRِMBQpG6$cvh}kqA φͷZ~xׂ;Rwۋ?y%.1w~kL^8枳~+x鬛 :t'tzIήN誧λ+nh|r/nZg8ϏFksoA_5P HDX2س ZPydz GH(L W;PKrrr1m1PK**A%OEBPS/img/chap4_db_nagivation_003.gif.GIF87a$&TLnT&lnTLJTln$&$JTڬ, dihlp,tmx|W`H,Ȥrl:ШtJZجvzpS$.znp19N~/SyP) ~J,€Ƽ˧-# "؝" $ G #G# P@##เF,pVOD1.pAF%H ‹#NA2|O;`'aMLl& khh"QIG,5hjhӶ zd@9#8aL+X"cKau 258^S˸_I" m@8!}ZBA!gI0;֮XQrCرZ;xt5VQVHjaʎv䆱Z:/BL5UFZ|mH'@9o@gI HDL E%8 ha& 0¸_!8UWbyJ(⍣٢y16ی0`=Gp(BJ2xOdr7JɤleN SkU &@gx]s~c'j.h7C\ dUuOqne4~8feA1\⒊2j> g\fD($|D&@q&N(TD*a}WXAB ޣ0KB-TUQačRa[_Р^ o'W:lA0 1 UBf0$a =8*\!ZHXC_/(%8?P%AVb L=_$-nd#F-ċAAv<r(dFP@"¤[ATN`74IaX H`&-{$$exDո'JPF9D< 0eB7FMA# QA>@@F(MjPڞɐ䐳Ḧv)YQl8s*G3;q`3DgM#!h=YS4iπ% T:i3Rh7REdFUbIͩIbǔjnY!]HN9F*9r;I8ϸ́'")ҠpB/LV lzu٩XE~Ygq|v_)!0'xU0p-p׸u[q,ZbVCڑG"PD+f7qfoS.ڱ-TZ$D|a ya @.FqZT;Jq=U)7ask\G5mrF"ݭ.:Kܼq`g`qܥ9Jn4RE~wmM|ۑ2Q!‚3`/rLp^":8C^4ܹ)7.C;$vs1(42bA[*d qƴiZŅӯJ10sBaqN D3LWYέ3pd w5^3J4Mv uE4$Zo6J$j'6Qx,,5ҟ ,3XtV$0XJ\nr] fL^֖R2(%M@J Uvٞ?>g>4 6<2jL1nX{n So\bomQctЍݪu b2wBd,A0ȷ_!?o)-\=? hk)w0n7U0 M\jAR$8'#"4q[}!zSQygCz/7 ؃lG.͋W]T&Eh I珼YD]G^kनFr3Yz:N/Ddz *5ܧ;}yx5nQh݅t(DvMu=m@8wZ=<"sjZ./J{4>OY+ _ל_[|L''(yO:|}/BwY18'~5a _b7v٧ueu/d2t5~ feVD| ׁ5{ 8E&}' ,88-#2c38Xs8(=:Ӄ><5DVHGFXvL0:'ۃc߃@3NW8 ɦy&d,ik8=fXJh(҆@}c\ `rx5z{}wjgpLjx3sh|(@ףl\'BjP腋`hwpX h?88<øXvn hk8 挿B˘ uDtHGgQu/ۘZzr!28DvXnh1kQ1{'641kz 4D'@ْ|8x!'Rt(Hi!`" @KXtT40V2%XDq%RAnl8q#Q2D\)F`2y C 5n`08zR1`{)`)H pYɑG) [9@uX 0GiXm:SZdCAԘvSG$ASx%|ٛҙXg Se$(xi+%R/EYF*MI-ii$ACim vWnAj>) 2 T@  )rGD y)4db5z19:!/Uk(=ڜ*P%:џIRJ.:$Eb$9b:'cqg:X@j=-.*Qn!PT A@9d.Ԙ(n ٘J$CY )sKW‘SU t (鈉 Ƶ? ZU /MɛɑژT)FsYxJ:G !or' ۪ ҉߸J}`hHAڭZwZJnz_8xf˭j K v䊈 {[1{ۋ+S@uȮ讥tp0:P2,502;,A(v@ų<<>B;D[sH;JӴN:P3 pXZ\۵^`\[b[f{YKh۶n_t۶ry3W  { }~[{hlD}ˇkd|@˸G ۹׸W@qukwzv  B6PHP<~jxCPk?049zCyW 97rSWRW4`Zk5zE@Nٻ=ۛ0!Y{ TRuкpp%u:|K%Nom Y5XMO=6ˣ<ڣ+A C#Q,^MaN =,€#N2*^JQ .m|eU⌥YH IP>.IbTu%X{!B; |)Z,i( PAnJ@?9I _'D~|0.}z/!XnQl i\#D_ :2/qFr R :Da`JHXD0.&Q|R q=ۡv-2׭?*'{t2E3sl`~?]hL_0ˢՑoғo:_l9آ?mJ]ت_ٰMA=gg?_Ə!;PK,t3.PK**A"OEBPS/img/chap4_db_connect_003.gifVGIF87a2,.4\^tdf|TRd ,.<\Zl<:Lln46DDBTljTVl$",̴̤DFT LJ\LN\$ LRd$"$<>L,*4tr421 *(ҥXl )* 8:@Ań x0aP8D# &L[KL0">j; 0D"kڿh " B HCI`۸qzJƠ .A )8D 7RLG pR /!%T/tCs˟mw&`X^Lv,P0  Y$ ؠ"!3MA*0Hѧ؇ d@ õAB(Q0!CU7 ;XBQʌ5ޘ0 iJQ)E&\h 2E )@ v Nb<7 L~F9! 0HkxZL ZJ: |P0@ 蹎S(H   8ȓf : 5b'|;ap&,ht)9( .]" 0KHڄ %-v9.Bl1ů[3Ck,* .KJ N>.)0+"AK\eC(G%-*A{X,4W![du*H %Ш41Ղ %޻R] ςL 2ۋ@phvsv.HIjD JtvrœO(@\D #*ҟc] & r{|), (ȕ"Lb!8.WH$@ȂɃ^JÂH$k0>/nHw:B0@ @GAܜ)06 bY0HC4`:\"ai4J p\w H $B*' "&ni` 4PeR!l*~x$:[wf*xHGl$*؎;#| @򐈜aD:X/ JZzKz$(GI쫔Le6 BV򕰌,gIZ̥.w^ 0IbL2 V.Ќ4IjZ̦6Sb 8Irf(t*vSiQ>VF< J2 ;!4'H v@/8AgFZns@A$(& {7']ZFمw; B5/Ћ_wy|o;6. 5^7p|Ia'(P P:ܭqi{BVO xKp--@ BSwh$ P0-H A/O.َ{cBJfr}o\_8i0xPe'( |f+cbyL`H1> ̌f1Yȃ.2)$bt>fIr0ONt{#М@*!e pӂSЃeEJ,5}$t:ֵ F].]Y[ַFvq^ض"@|~vW^٨I  +Ҽ0)`+)ȕ r@O!X}nF8e+Y0O8NnFI?|/ $Q5 yCuBݷ,f3wo@v_8?;]qBo(P :-Muy^X*W@ O6׳M؞[w{=3{׷Oކ_|+skmW~`j)rɶ,|FÝO4Xe~8cx5|g~y5{>H>Ѐx Ő$3 ~[1Q 1G% 31% 7$'GA'!^:ȃA8z7xq&L脼y`7@\E9BHP4%UXZ@E XuVO0wIH H02#vyHh5aňx`^XpbhyȉLJyX*3W26成(OH ?`DR ؉* 0ј!~݄iXh 6W{Jt|'qlFD:B[([J*Hxz=e028U~E3 =A',rXY`Yih98^6R DPb%_[ Б5#b'a{r_ Pt!P&P8%UFdgvgKd2=P'd\c7D`W E$@ E`Hn&{ŕ^ Pmk1ՐX'}/0Aвt17{|~)`sJᨕyh'#y'yy0rw wvwY9r8iwD)l 2Ś4b}uzI[Za&0Q9`vsA)*39 J4Hē`q-`Y铸xW靣g s69p1xi[s9O݉)p&Q)ᛏYsoPAy J~Տ'&D3i_ǏzAEg v`u^`/֡z#"c:~9Z!G@#{EIhPdphtCXP*~8J@l7R)6)Hku*flj{ao7 (z%jJ4f CXaut %9u*'NOJްuuU{i2t4ٙgx(טک:%{`66xgys೩ Pt84йՂ(`Dpo:ܰTئZaxWاCCڠNF7ʊZ[X z);X[e a gհKV`5U{XKU۱PI007${`(;*.$&j3@1$Me=7ó(2EI˴ M JF;@Pk VkNk[5GKQKs5][hoۦjgl[iOke۶ҀU:ǷZrb˵ˏP;q[++5Y Z'1`"JPVP f=y!{T{BA0UI f{ Lr% .\[{`*`N(PNB+_[C f${2}D'P((Lp9:,L {&#(ȉ`gR+<`I*o@CA>F$ث 0KA[riXA0\ 2eL gK @0%@6V${S5|BiF!pB߱sY0: !`ZsHq뜧aɤpzѫ V pb 0i/-w 0\Z{m'Cm(&ǿh4q&>!v7)B$Iwu ) E\;2 c<ľ\0?2 bTԥXJM BpT-`3ŧ@2SQ,3=Js 5A*01p5}J/P08u$ #A-"A B^%i $(V]hءm] o=)n ltk Z4P\F0ȎKq4/Pn4Z5qĤi"DP5<#, ;P<[/+Z* Mݪ-*IS0qBϩ5@U'yA,Aц:${(Ԁ#PF,˴X +- ^֠=;K܁KKߤ⚫-lk{ K㖛e<:~2^A>^䐋䘫zCNLSQ/͹U]W^6+|<,ݷKYNPr -;v.rPznG怮V;HUNT@S8NS^0uR(NR 5Q~NQP> U~PPTO>^~P ~؞ھMn >p~Qn>^._~$p F b 8br@Bs!¬"2 HeV^%1 xP,u`TD@ U"RC@(b% LBy&G +gB m 2D0C0*X0 5|0 R[Tw'- (AjhފkC6K!<f! :!C!6lӆ,Di˭lJ0f V\0h0AI9Y `{.!k? 11(q@_ (&&p{šR-r.di-6ߌs:@ ZBMtBWhXmtN?  *GuZo5\ vbCfvڞvn w2lMwv=zwy x'xON93Wypx砏NޢzjzsntߎͶ{{[ /Z/|?}OO}_}o}~O>;PK)[VPK**A$OEBPS/img/chap5_err_handling_006.gif."GIF87a`,.4\^tdf|TRd ,.<\ZlLN\LJ\lj46DDBT<:LlnTVl$",̴̤DFT $ LRd$"$LNd<>LTVd42<,*4tr$&,lrdbt|ztvdb|DBL촺伾TZl|~Ԭ<:D  $ln$&44Jd|~|䌎Ԭ<:<$&$LJLtvt|z|<>@z3=B2y~`k">h}Kм_{ BJ@ Āx4@P2 JHo'm U`0!I-Cg ONl11P@51@I)Bg2 pvL4ڈ$RhPPIN* 0&!p@`@x'.='&*9!xu+E A>| D'!/AG'z$35(҈$bEoQ%6NiUAT 'xUS6dj<5OMyZ iG)z $M RMF%jIբWTkI~"@nclA+; di'. D]=\؀ Ccٺ5/*0w r]jKn[ 2{(irZsiIn୵-Ds!OX- \_=Pz7%qB{X%Ď" 4T/ % }Q7!b 6¯I{$B="$ A\ Ӏ R"w"LXTqJTPgݬ-@֒(IVVdT(dI` O2CK <3y@ej-@:$d"J$$yBIe0#ĴQnIw 'I ;i08zah(c.`RO7JmS,y@:M0f6 N"j Ѐuz KVmzkQz^ɓ&jӉ^t}^:Fkdݼ5.vm@3wPpkvShBI 7|$)+㱥gb:wix@ RDq J XVG8b }ȨU 8sJ,nYYD9]uo,ngm) )$&MFWe T\9.<{A!p;wd5 m 'y\ ,tn5U +̫;S} zIiԓ7IYC X$+G8ycddǖҁݖ] r sI4x}%{+HL1   ,h?4ex'g)1d~&U3~W~T-x[V||1&A(0pB49X:O`l],# 0#3%(3 $@Igi$hjN69 pN1A @6E`)2 $'y#XC2)Ik2*Zlr`(By=$yfAx((z)'H4'@%!iϡl8$o(cGȃȁoCP1`xnqB؊E!7i8DYDFJmĔNP Q9TYHYXxZٕ^y\b9dyhYvؘlٖparYvtyz]|~Y2ј9HyYiٙiY閧yٚ镯YaxF1Ƴ$w[1\K0t*I'yy"DŽ4OX6k)i۹ɜ_y@虞h HWp% 3AiA``! ֹɝyL:YY/Ѡ& Z4A8bṠ, oɌyL;*AG'+,X4Gj94?ңщ; jD*=A(0(*MIkbQ_Bi4b '!6p)]wb'J `$>/baPukAHybk(1>J$zi"$'#1NP| 0v k7 GʨJ27R+@ajfP1JdD;BJ $:C5yj វꩠN#*9$j4}:Z7Fen qyJI `>%q8z9ī,` %繬Ox 6j晞ioh(70v#mb40&%*4?7P"/0T0& pAi7p%P`'Cu!4'@dQ;4 P] ^G> B[%*=1T,#3+Q&akҷTn[l+ `NvaO 6[0#LŠ[[]+)Q(Glr[YH˹ 61 ˸*-k^:Kd`(F@+k`4*;GkDiD`ZW]#&pT{u aү)( +@&=+- k \_<(PlA9Bi>db**]ѧΏѰfy2jAgMmc(6pT_} ,>K -(iͱ=9he=Ί-Ț#w>lyINz& |T n rx|Ñ ٮM,=a&GkMx2AVܴ́oAĝ\-Lv25`mNne ]mMӰ>\% 2`mوMj-``V3zk=[߻CرKZG*[m'J#PJ@@B2Tp$5@  P1 е }8 a(~z%Ay>^%PpOT} o-ճ{҉OC;+9qn7_")u0H'9bG =rr#5o(PXY[U_v2qZ\pYirq?vuzy~}?//Ov?V5_Axsl_gAO__Z_o:0#:X/`oh2՛9a9/AT.(Q%*aP@ (XpB >t0a'+JLX 11 `C%(QLЬ)Cv`PE!,iҢH! ` SAk }DGH Gei`"2qP`@̐ˠx suB|c ?R-XcȕgR&*y'fBfcDfϦtH ٲ(lL(Su5& Fi`f4<|pAQ8^UrN), ʤ`A" (W'L;! AL!&1h6'ʝt}5YB&8` 0PVq[VSQmURoAR =EhKfnYZjլ (kjNva._^ ə@O`@ G|'9PaluSR@b0T!lu2 [E ?0.`d#I G "v=l& /fyh1t!BJ3 {λaF?D(ϔz !=1ބǫD{HӍ u "[E)ЈK-8G;NucF# b_ O݁w\tAn|~*n{)CЅm6r >3I`AhP@?j2VA@)RlX*vk^4I)Ms0(wZ@i4:ld^; Fws"^zwHW2\+H%dJ}ct׾u2H&WАլIann/fkmklœRy)T9F_SW53$!qx,a(/ +do5Qe ~pn|E(POM筎T 4z@ /GP|6:,?[@Ѕ&P>Mz/Y^Ɲ$(İ 80VA˶/D ge}}9L2`̓pw'S!LaS% _&ϯ 7r{ c4$20`bW:9´b;=dխij` IB+%s=H b4'RY0Yd,[bfs̩+%e(IL} IFX 7(\ITVHumN5L`ȕ,J@pmyהIx.]<|~s0b@~h%  a&@GOz4 d9fniþƲLdR*K9%bXk xE3%#(p{J@`'Y<얅Pnd=n i@{ ~[7Ss &8|7x!O0@g8bf{݅w>Nv4+\R]@ 5Dg{NDX ),-Л}/}bpc@ {eL-]|@ xzP;X6* ĭZ1`8[+3Lzp{lCyH 6M; @1 p k'pj=| (r P[f&p s˦y)I= :Q͡A< !$BA)Ѐ# q08";A$#0WADpkCRA#KP$$hC>6ATTŒ x$Iҡ@XZ,@@[]Œ^\ESbEAeF!# (`b=mFF6!pj$3QsT` šZG69z, ~G]ǀ$x} 1,ztHy(`Xȏl#x$IȒ,tDɕdɖtɗɘIɚɛɜɛɝɟʠʡ$ʣDʤTʥlIdʧʨʩLEʫʬJʭʯ˰ɮ˲4˳Dk$˴d˶t˷˹˺dK˼˽J˿I4,IDdFtȔDEȤ݂5`DpR$9:S<3 HE؂ExH T9=S8R50)Ѓ;EUCET758T5_@hT(Ђ< m_-8_Y/Ԟł< 1]2x5V4oVGhI҄pW1`a[(0 x:Y`n-5:- V$ aVL]uc}c&P.(RBcX F&AFHP=RaG]4NNOPQ&R6SFTJ&Q3LeUMUZ[\JXddhb daFL,xUh^4V.fid,logq6 sV,uvglwƌyg{L}h6h VL+p臆舖艦芶&6FVfv釦x陦隶v&6FVfꦆhꩦꪶi^fhʄ6fJV>JvJIV[Ifc&FlN첒F8 010'x{cmp ϮՆ.mޱab M (rPmΈf<@H=H8Ȓx( -Zoz z & o?aoxo^^Bx*8 ( NNM(h 0*xt3t$lx`?(ݾ(? #{[qqHq0TB74*9qwqpt9h PB  P˰&&pshѺ6G"sJ;ϻ}ĊQ'' h ;/'>_!#HAO=rT&y~@Ȁ (1qT%O\äPإE&УtW@D2uetЕY _@ PNbcPM D0^ɣ|"CNl#3Q0vН%HV#wgv/vi{@/ # B*䱷d&RwtO f"Wi>w( {3.I RVz$Iz53y@Uə??t>NJ E*!I" @:@ /Fov8Q$!&\eBxį3+zwW|Ƨ rǿH' 4_(0@xN%δnx?tP"Ё ) gs : P(0g~ hpyo~Y}^|рpRutNJ~,h „ 2l!D A@#0sбPѣ g8 #7wBt&@aE }z0*AUJ B bAÄa:P)S/.l0A((Bc:|<a '0P@ A-|fWŪWn5زgӮmo7‡/^ASo9ҧSXyW;70`r׳o}wӯo>~? x : J8!Zx!j!z!!8"%x";PK\m..PK**AOEBPS/img/chap2_hello_001.gifGIF87af\tvt$"$$&$<:lpB LttJ/]oN uNMuV_]nZu~ vb]mf;vȮͶnfrHwލxz[~xg NT.S⊓x =G bg!D.褗nC~ꬷnn;PKeN>PK**AOEBPS/img/chap6_hrgrantproc.gifGIF87a9%:H V)g庼tvr3hVWGGf88fƽݷf]jii5uff4&H{)**Uщxy͝Ӆz٦3 -oj6zgjzezP.\kYejM ɺwh6T6iKY,' 8uۍhYHw[d̚b/ ^4nYfZyƘͧm˽Nj^mƔqXYcrKl;4g[[XRK+555QrNlb3CXD=)޸yyD8f.y7N V(uwF ~W읉l̔ XFDWVЦoЈ`6W6uBtHUzZY.I,NkXtdN4g+&1"&w ,[*[@DykK;131(jΖWTT|MIaT6%tQ7hCnfRdmkuvp;w=cfiJCRvqYh _ pLJO/\rj|dUs4,ZNï`  َ|ʌ ww|9I * ϙ ӧ% DD.d4sXmf)[Ԏ-iz3v4EԨܬj\sYQX׬4%>4T\;3",9@H*<Ç#JHŋ3jȱǏ CIɓ(S\ɲ%K aI`@ P4h(CH*]ʴӧPJJեtH-C.t$’񎝺^ͺWc˞M{NA?xE·?A0rlx.ӣ * `sܬ#OA?m s{׺_QBBA;Is =bu͟sw;a'@۹3S9 P[ G x ]U& 6G X"NYdh6 %aX Ph!na]?_)0xD `aQ@@)DiEpH6餑FTRəp P\`)dihlp)tiS:|gO=S@幧~Ӡ zDu!餔B )4 Z9p@*ꨤjꩨꪬ*무j뭸뮼+ZSb:~z2,A mNZ:݂˭bmzkӲ/^;ƫ;jmnҶG,K|lVw ,$ɂj,0,JЁ<@-C*L(Ӆ#CdM[u %:AsX0hc T`=L0۱+K.6jI/@J0 J(A[pJ@aҏbuO`zRx|`=J4|/ &bkCM `(@3/\w %_4Gg,C5vh?ߨn L >SY&RQ`KZT T Hn @ ptDpB 4)(_G@t4,`&MDq LC|Ȣ' VSȇ-v076Xc `C# >@3UBL"\ r( $'8Ng$6A?" (GIQ2P L" E()OT%^ 0IL_j,2f:Ќ4IjZ,%Um|䙩ors(lDՁg b a@!@e.Q]7q~eT>32@x2B3% P4xx  ̤7ALҠh'>JTp%\'])Pw&DHU)PQz>~21iMoӝDաt[WzcB4hMZֶC1'I*ʮu}@׀ HY "BmCFI`sB$FZͬf7z̥ϞVT%jW OJ൰lgK-2 p \HQqex ꒖ͮv[Pf\**6 U'WK(0DN C9T-Ux\-W2- WHզ8u+T`DMpabKf) h D& b*TŅX61` {\~QUH{p`|$/xrƓJ7Ba˟rO U늳0{K|zef4V)՗^ū?ʼe,H@T}%r\c*CF̫+Au-*Tdf7H@00A*WZ־*Aˬ^*2t9L޹Fc$kfSҴMj khv!lewWPVpV5C@ D?ˆ&&x(*(?*mlTW 8] r3:EgWs*GTɧn6Tf$u+PR-*/xZ7gt-R'4EdHS8IM3\npUr4/B{ ؆ }x{:D`V GKnTI5׷E'؉'_bn&pv^~|64W"CV~'xtx*.sWZh{_H4*Rs[C@K9~%P|JTXhF|3|H}8N&w&qC~Z(Z0&JC؏LWҋ>zH{I5^ `\p|XzvH׍t$Y& u(*u' H"q1Y6yz{u>wR[X~RGFه8 P*&PRJe|`aƓ+9{X]Ȃb>r*t})IrtYvIq邮rԒ(Ę'\3 p  wK(Tw |dYٙ{; ) T(𣊫cV0pnٛI1?^ |0P@َ84Ÿ> X3JvعgmߘtZIIE}%՞y+2c$08hD 4ƝQ-`9U6anHY^2 @ %PPCDgf/fgit Udbd%TJŞZ?_V^%\c`U`de:a5VE8맲ח~O +˵zK|[MC248QP镝^KM+E+H )'@bPRzV{ۼ ~oϛ;M;IG9Iyi^\j3`Tj[ki{+Mߋ۹ 7T~(3Q lmnoZ{TW汓]+ɻ¯N4\lG`bc lD\@ϤK>SWDJ:pǿp*Cl\P<)3j@ t3'^nLIHLJ< Z5D0_`Z9 jXtl(qLs\@s&4gȷxlJȁ+g`a`$B઺ʬ̖gb\ 4L~>k ˑ{}~|,lsWɭ̉K3:cX臆̼ʜ쀯ñ [^c|? Jе/lTkqȼl̬L3Is@c\JC+7>`64gssȕ9|" MJ=*ݼ%=J'Ŧd2=4]6}8:<>@B=D]F}HJLNm}ˎ2!@*w$C `CsI`Q4ȱppm6b^dz|~׀VWtwu؈}[Z-؉=ٔmxL֥7*)E]ڦ}ڨڪaq+ڰ۲Hvi6+1دb|۶- h+=ܱrܰ"zf+ GܫݷmݯR۴ܾu)Ccފݝp1=]}>^~ =$w ">$^&~(i4Q:R q> :>q% 0 !P"q: => ?!QA\^` \aQ!d!dA!l>I"?"?<@#7#:A@1GutGyGap p)!  @飠a%mȱ%.~~aNAq Pa!&#Վ@)=*>^~3>)(.c# `~" p)zv#ut^);a#- "?$_&(*,.02?4_o#_87lB?D?,]'HgfMbv/gJ/r.*xfo%0hڍ'f Zr]G?vxuY66PC(*o;"J)* _s`vz*}o+ İ +,[y!=#D4"uġ3 V*;x-S<:@jA=A=*Ϯ#A*~ )Cd 9MY+ c3 Р Q@uƍ F`T>A@>|Ӭ}MЄ UBЅ/|۠$|U9x !u Pb8D\,yIj0$L Hȕ)ЊWbIRDLG: Җڤ!6Cm#юl$bhD-яd (/F%#[$ b 2lA5G<`n &E9JRҔDe*UJVH2Q4B5$J>]%u'PHxγ%0̄&DZJ#,@Mmn379NrE6sD|g7Mrs;yOz3ܧ9P yǍ24P6I,gIHZ0kE Q)HPNp eIURԥ/)T"FIR]N@")R@,3DG-'*Uvի_f:^Nٖ¥au)VAUծwk^U9V̬b1iQ*୼eXVDe#t` jXCLrmxWzEmjUZւ@9n*ՆLl[tnp$msZQ*0]-A Ȧ&Y8&@Znzջ^29_m9؝3}P2i;`ؿI|ke ~a4X a SX¥Jl`ŨE0`<3c}ѹ\`:DÂibOrac(XGr5ct p}U@ xL5":H@T8AO}x ^Jۻ/mn+26EgC>:r\݃΂)U^ o~wRAΘ*Z. ! S` /T OXhHU:&tt9W n'GyUr/ye>s7yus@e KDH8cD .!b|<ᷴuO+1XUŎPn_W:-Vq@( GFl6ֱ M=J"~TwLWՔ d@!P,@4FQU7o=Yz_Izܻ=m?|G~{Ɨ=K3P" Ѕ*f Txzi|4Q;YuNQXug={m6{óLxFh5a  %%ȞpȐ9" KPP#/sA<T!;8c;Zsh8"("Ђ/3/h; ِ{j;$-.7!%_{?6B P.` hȈI/@D.CX aFlbh hf;8;;z8 R e@tHa~w`u^aaa V @?1HA$,S `pb]5V(n Q8sp7]VPuc=d>9c;.a@V D^IVJVxp8\Pz8Kd&R6SFTVUNbavZf!veZfe&vb+bXX 1`./`! ^I`hP` A]_cz(pMs*fP}}sc}dB^pg=>7e]dtcBg8cydPgw(C6h6s߁.߁cq~gdgUVfv_`a$Z. bvie~`f-@ff>gvb _nUX6`=]k_u7_Vj&]-vuxߺkkkk-߷>& hŞkuߺlR`xNlfv׆ؖ٦ڶnVeFn6^>ivXhnV:.bf: h616_fvoF@tfsHN'6w̕ ph&ʠC $R[_񿀢wGq' ʅ[H\ e0$ ²q! %j &Z\'-'!Gۑr3[q$6Z7G8F5:;s/<>?=A'B׊ &) `g`o0QQ.@:#s94;E`s` RhTQmfhyA؂P./8(,~yXՑ؈g=xŪpPVP ukvvoO-P Pu'87Aw5 WY/p@#!2H|.jo(0.XS 9Ce xx6VPI@m(0 +yi 8ȟ([/;8 &9 A 0( *PC gvܛ+1~;jٔN;d{ }*_W&D hC*j}=@(`>髿>/9??9&T$0A$@ֹN2| ׾ R 3 r C(&.(sFla e xɰ|Iꖰ<ZED;&2@Td(8N@ و3Ii&!`Aq&)t' `A)G*75"Oz'8"ɧ(`  Ё&QЖ!leR.ꘚu1}hD Z3.foDC-h jT6EDjNrd'<$t>DK/TXe{BZUX,$19|g ETD3 h@3Ӭ5D u @=Yy=2-AR T-Wd(?xҏ 9mغM+ϵ}h274F+UN -Y2 ݬf~BYжƶmU6ܖ]΋\~ޞtm۶35ӭn${-FRI #w}')7.eТlEݴN4nz_8C.򑓼24j9qd@"RJƔvσ.F?z҄1C4TiճNhh:€ jBl[9^8D@tݹwx~;t !饚D4Q7aN ;󀯗Fk *WKS_wԯ^ p}^=W{>i{{߽{i/>335Is)GZKh{x?c c\iW)_/WK( @ da]N V:_EG=5E| \ | ȍ؊U= ]Ĉ^ e`Hl`Zt`,qe]_\  <4W ͠P[01Z!gF aٟA *g[ag!F"!"Fa^Z X! &%n"'vb"bD(#:֔A;@@(A6 fby/"0("(4=! ޅ U@  Ŵ͍֬לb8#9 1D1v"(A^2z `7c9? A#ۑT*jA4dCj@r L^EE^$F9A@d"E`+A8C),C)x#!?f$ME At䮙"BNMN! Xx@,0C/lcͳMJͤM^%V#N}$2Bbg a<(CSUf%]֥!n%GvCX߼9BڥM`&bR ^NޖAeB>TejA dAA TZ0eb&ib>^ޕAO*cal6#@"Ё",A"LA"A" b6܄!hr.'&4m_J;d2  (f|@ TL'ۤgq7\r2'|'9NtdHfi|}=tXd$  #N_!k. + ~A-Ђ.,絰g6rz{&QY^0^t~2Zf1*`1.'M)gTF)E(n)*F2d;`dhEv))E}.aik^HbZP%F)#))-] 2;EZy~F{Vޟfr^Q)ގ>huօlxr^#@uı$a+V^+fn+v~++.#Y":|^0CFDZdA^N~kXcT1jO"+I0`.“UޫFP JsȎ,ǺGlB]b%v`L@xz#`cEh,qlD({l.-\^:`n '*|쳺]܁ZrAE7ZFeh-d0T}aXB |-盒fRes9FFVD@: $u.h֫ώcs a_nM֮G*Q򫏎*lf^q~bi 1H^?fh.oNxIGz/^GB)B'x$HQv[uJ^fh$ 'UƨGD /K0!KMgdcEё!,@dNďHWJZF5Cu/]h ?ᓉTN/o'  1Oqg1g1G1A,L*+x%@.1m)0pTn)fp0<@fN0AP؀|1iIWmհ dh].,Z%\'*xhҠҪGcg$"2 rZY/A@B$S_(ӅLXE2=3uԯh$L Pm-[)6s>3 {(IN!|tBW)" fzBI|H>JW`K[ 2Ak}oB-qZiNhADˀX4L-UZi0?fDfS?5TKApM#ifmVeS$QRHp(Ll(QT5]oTM_X `%kX@A!B1 ȁh(@56t]o6gwLu*6 # h@pgl# $VjVk6uP]V!@ug7sg"&0*څlVtX\:%R)#mjqm!s+1ALXFD|;s7FttNv^085wG]*u /&$5@J~888"+*0]0*jvk32cl+5Cik7b9銇 v(Ev?SŜsyj4Rw>NiD%(o9t%hgxǂC\ۘ`~0_)sS0"ӱ*"':9[w yyTV6G Ʋ'wt/g`K:ƶc#:`\{8NdRfe.@TCE'z:{ȺHZz> 0U`Q :Fo9SK{'|0.fg0@ ȁ@F7FBz|=߅<p4AAdA狿9@(8P,Pha… "\(ĆbE l'QTeK/aƔ9fM7qԹgO?$HG& I`@(J4̡FgBH$A*9UVQ%ƕ;n]wջhQ2u U*U5+|!t;nd˗1gּs~n iԩ#,5( !bE۶u8|y2Ļ>xq2AKDcdu_OqD1@y DvܡJ{Z$N{(0A @T@o쇦Ðl/STmxYi]uG 3S.}PߘJթWIT_z*鏃3[΃.` QB΀)SJNB/,FC/=D!E4D%.MtE)Nb F]F1e4ј.Fq2rG9ΑtG=}HA4!E td##D"dH.ـLnrʉJ,R|@Ct`p+` L -qN/LaxL)9GF Hh:$'q9:R{{^}+"wuk]n%pynU W}^'n\%6K` }áq `81,O[׽mqcQ*Eo#U]ڗFndQe-o$r~b3h,p8ug=}hAЅ6hE/эv!iIOҕl,09f Qԥ6QjUխvakYϚֵqk]׽laŞ` 8iiOնmmonq6ѝnuvoyϛϑs~ w!qO1qoAr%7Qrrv ``s=ρtE7ёtX .wL:;#KoӣN_=[($.#`$,w$7x/7A /MOIyc] 7%O [=O {Ͼ?8B@}Ji 87|/ :(_OTnV{0oW@6^ӥq ({i'p:.F$`ހA`ׁ/oP|@` n /0`vx>n,  A0 `XGP $>M )Gp#m aװIϡ M [  ԰&PIa1eqO!pqz<lONx~`NB o )z/D >BvNA qP b0pA Q `A F%)`+Q!p2! "ߌ\#W0 n$_]%a2&SEwP|j}| ~ntOqJ  JՐpߠm"1AR"+-r--Qr2QP0 -O,u.2&P~"222A34Ee4M4ߡ&S @'U5MON`S6@ @,/0؀>MXa 23*P0* `%#@ QV-S3 a='3<"=Ӳ<=+2-/ ;SaBr4=CA4DEtDIDMDQ4EUtEYE]Ea4 V5n:afj%-G{Q| !8͒r=m SbD>C7;44 4L4MtMٴMM4NIT vGǮߘbGNtTGyxގ)Š@@88e. 2MN1D 1زA35TEuTITMT3U]ULMUYUq5VgVG:'5XX`NR/* UY5ZuZZZC0])&Θ\ulN\\5]u]ٵ]]5^u^^5_u___,` `6ava6a!6b%vb)b-6ab5vc9c=cA֖26dIdMdQ6eqkdoƼe fl .y `@5 .~@%~/qJBم)MRY`ɕDAl b@i`T uEo9ԉ+`ګ^ XaY!R@z Ci` ` dxhyTA8A Za9'k  a{.::!>z~7%%rDq AA$e6Zo6t@iyuxڧکG۞:aA ʚ3[@ )@;8x)Ac),! |›wKi%{Cث`0 \paa ο`B!aܞ{ Aݢ۬94E}WqWD"3ru b` ܑ(|m{|B+ *,<Ki~~|[|i^*tY.BAA !Ȼ]`UÅz;dK%N*R+!JN1`q ꥌIQdj:X䑯$# 9&aif&grIg{Gzc  \ `e5@ L2X0%u&@A ,4@i:z^4 8Gs`@m'ڕ"G$ (0I.  (JaV I,[*YI%+'<> /J -3L %IkFXb7Y{mjmmWW7vҽ (h p?ưĖ_y ]qB z%1#6o2H g!i *}4'M`s|@TCDe"!AS"q& n}VB#v4eNj/&+1p \1  .r?9-OqHwӕ@$P<6 {Y΃Q +<Lc `2 z : E$@< 5x&LP\%p^#总q'ltNX(76?R+,!9D*rAI\@ $$'<`&CuhCNjD#-ҦXr-o)(ZĒ^|h 4%՚c*SH 03 hr.5(/8Ч Q=Fptsfb; xs=Is? Ѐ Ԟ,A ȁ*t mC шJtNoވYY9_vt$-IO"t,mK_ Әt4MoӜt;9L4^h8#ȟVf:S ըJU,Uլju\W ְuN>Tua*[ ׸ut]IOu|_ߙx ^R3u[Zr`OTp P(Sfvl;{Z 7PDֺpPv5t]HK(ՇKLN2ߍKN2L.6-X++F:-)MbRrl߭,p <yьN7 b 5@@4Hl%qi,LŐOs{ܸV2$}Mݜ<:^y PJ@j$k`;@L3W^\B:E/a2-nqܻE\)H -GSUpo omU7ba7Hx !1Hb+@Ԩ$ڝ2Ϙ BP1~ꬺ\g"- dϖ4R KV4ሢ/ΘM:Є2f>3kUKֱ۠T>  gv瞪m8wo-UА|SKap3w&xѷGL7 ЕtjDs\H[nAƥU]m8uh uԆU,m1|_S#8;n`ր ! p p 0XafUzL`x~pGX+ȉxq2ȁ#<-*4Uzgeqi}Q0FCH÷jHmJTՄ| YYeWD0a\5c%\qt!`ϨEz xXLX5xǨ61zpp2X\%T<.B3䱐8UCIiՏXpiii #I%iQW+ɒ%X!fz'"I79\1YBQA)C9ђGIKɔMO Q)SIUiWY Г% La)c!,;ikU,ѕ!  fdyal q%1'CA)ї(≞p.XD))4I&a0镩R#)s pP5l7RG)Qpry3q鏙xs*xyzɜIK|p!$3Y%=?7k>77CyᛯhY$W韬V%qz.zIx[PO7#Ilc 쩗ʹx?)<׉S8:qp%E*`xUɤ *J)Q '*q#$A&j+pMf.HYz֪ʭdyS+ѫ1p)h@0ay"YpjF#^+˨!@-:%q"& `h\z Ai* ˰  )1<< H;I%aBP۴KI۳WR۰&Z۵?%Yga: 0#[򊲡hy{Pk#A[(ѴaaG{$QQ۸`K{⹞k+:m'b`i5p{۷4&Qk۳'1볞ۼ^ ˸+{z-˺髾%ʫJ{)t:ZENk;[fk |-鶄5,C Z;`0+*)隗Q0CV^Q$1,3l=#|uQpCLC`DDrD-LBQ,S6\8\Þ#G|&dܧl$NPLq,sVLXõũ%C%fh  ?J/m tɛ^ao9^'QH<^Qt 8˭n̗ɽ˿ɖ0IŦ@l\䥅(*4F?̕,q̌1!qwlFxbI<ЫϾ\n֗lsMٕ}u-5 }̭}S b7YA͒– ۱w7{M9*}S0T ײɭL٦8!%8M(Ow {݄{Mm#(޹Md*rޱ[ ѧ%!D<$M+$k3- }&]EPP % >+z Е6ߔڣ4Ȃ,L`Pi &%??],⺉w[]mM4a`L盺iOmSު,\ʭ[$pPi0 ɄI0nR/8bYI`43衞pn0~ l.꫞Ϥnrޯt>{)ɪήαn1~z9$m(+Ҍ˼.,Z;uh{NN'¹oOw>ǀ |QרGľ p b?oPR_|ïB .P.|֋]II:4|8O n  m8Lן/}E8ĩR1> ,TB LHņ#RpbČ $YI 4`ـ(YM9uOA%ZQ88@S1id S, @XLZhkmq\Td_&aĉa֤z1 vvla̙{^͡E&]1[`^ >yWb]ŷo-lsɕ/g_WY[p lVmsmyw( RD7bdyq#A_}D^c ҊtOhP"/bpv(޻K&K4DS)5",~ X"3C h$:裐'1BMJZPE.KXjFSzP0 ` „S&#+30uQH)2cL1kt9}}~?i1L%*V! |2[l:\q+|! P0VZi(om-a+.ٙ6yP&T eh9)MsʌO+{SB : =M)}P(mhK]Rƴ8@$/Q.sE&=w5a$DK% RZ rNTRBF6`k*γ4bZJVor8iJ" &@">ǩiS" \Vg'!HhFDKe% K"3LpZԢ sTHa  4`PBJmRu np[~YEqےWt[V7̥sU%/r ]z]"ao)JhBlD1eX)9NI!L$բfEqv!]+, H$ 6mZk7&L H^:3تdPx !PG W.#JF[\!? 2\,!'SF/րW.B6PC)LI0IA)TD$]a 2I (KGJ ,ITpEL*S [܂C#6ЀVlbJ)5]jY)/ |-[ڞ\( cUnr:;o}fm:9ζ,1khҌ 0BD#˪OV*.ߔoCvm#LQ/D+ ] I~pC> ri?]OT"D? $@Lk-wR>Y|`( d5KgzB] 5 z@6dwKoN+4 /'툊[\!nB;mE(D |)W5 NZZy*_ ':wn0)La)8Ћ '}*fRLͧQa8wQnNJ}&x#Bej N8ZTOX0bJ5L!`p@bJDoz_4MX&# QQ3Tb9c%* ![4p>Ȼ@9LC(FelGw|GxT5 iC=2C&0CC028(Lv,=I:H_<ȌGH,18 |Fz:>HXHB(Aj #숪+IɳV((4nth@@ȃǘ8$"`4SCJLK$y9GhHP;|T(?@,ǘ.0:t #S 8˵L˼̉#J,I')-ЂH$|pEa!-:k+D?P$AL4\Lh-8NDL|NfAL",#808>|(4:=A䰏"sM3u;18:؃ߤU Ns /(]P>(/8PP IϩiH HK#O2.SѢzM8Y!ǜK= &LA В-|=LN#= ]R&Ƕd9A'Nd" - 0Q˽/%?Է`4O~{K(c2>c7~HnZ>omc8c>Ia5E@y 11:煏>dJcsぅ_;`ҕ͟^J^eV?.@v="3_XM;٫ʼnmџPVnJcn䇐` J9_Yc~Ѱ#+,vfuvfh&i.A&*;a9H9+ÝQAOM\.:GۃOȭ^g^vw6=r8]^hbfiN U蔞-^ieeP^`^ijci铸'耇4\j^.6  a6h4X7x3E(" ĶMG:V6jܰnfsg$48"ù>%gzEwlޑ,h!2H][>?4=l $>ᆀ`*ȁ~m.0 >nnV8= ;.<noo-o!\nQMk (M& x{]vo7IvCX#.pp:j(`{ m){|Y6X뉓3H5-.X5Xk?,Uf`X`Cpq^LP >d* R֤ؼ4f#SS`~q Fr|V&:{n}k15S Jlcc)4-r</XD&  (33⣺hP p,X„L(Ç/b̨Q#0x`#ɒ&OLr%˖._Œ)s&͚6o̩Ȏ  8P## |B JHA V$(Éd ]-ي;Kd*-ݺvͫw/߾~*8(QH2uQFT&5cصfF|-g* r.ҦONz5QC=ѤKAuk6ݺv):$Ə#O|9sŢe}vӾZ:Ȯ᤹/~<6C\6bߧ^>>}töCC`E~tw 2ؠOMK"aaFQ\ѡC䀅7XB ^=R)آ/"^ufFQ 1? TPA 18`g`Yx+SRI3R{8H_*>YD-ܐf PN\<㟿s./G`M%}B0 +h b0 ;@!We: Rt02! kCx0:!{1Bd `Cp =<1Cl@ 8#,H L X q831j\#F/$F`)JщLh+2OZ.bą2Bf|#%+iKb2m," CI;>y"I!t'CCB~Đ/DdHPX\HGFRg$1ic"3Ch樳򌣜&SIU>/GdB8s0gҗDg0w3'9]p'?4T> ZNf (C}Zst$>EN$g93 2/Iϓ4*])Lq4jjӛ4:)OsAPӣ"56  ӧZ &` pG Ɋѝ,+Yj4P`СRַ5re+CRUg+_`FRg,a k $ X,cB6,e+kb6,PPς6aKkӢ6rK-k[6P`kk6-o{7.qk"7UnB7ҝ.ukb7ڽns7-{nUyo^v/}7~/EKZCӗD:EE8p VP0#ݲG1$|!.xfIRHƗ/)Zܱ5S8Jic|j8*!! E >yŸ5qC:ٹc 2o#%p6+9΁t6/9ъn{X^7mvٻ'\o7{t__8C[xnyyr ~7rYgz]&V˘֞)s1Y%8N= _I (}@EXJ8 XPzf@,fDj)ah (pԇ]H,`[72\t"E%CIBE"`MF6Xm%֙=c"^90`RNN$2(&[V(+Eg (Mt T m5Gz`=u\j$"9f `x kꔣEWæhX^b.uGjJW銕lF(M֊Hnbfa*WkBn_RrѮS.Y"K6mͻ*Ö7ѷXpK"!*YG~(@nmRE8n0ʢ$`|$C:MWvsؓ-R3zVPg1L(y? (_mf3Bn;ב:,rNZ6(RRZO%094!Z[G0-Ny[ +u@W0 !`+ҫH B! ۖ+ ! \rX/ J.__Hpɍ/dTĖ(Sk Ȇ`.AXC+ɦ`Y;veqm<@C)aM45)+x UslwL䳠MBpЅ:@ъZͨF7юz HGJҒ(MJWҖ0LgJӌ5ͩNwӞ@ PJԢ0RԦ:PTQRXͪVծzHXJ&4hM@Ϫֶ՝l}\͸xe]׾2k~ `? (brl$KjDͬfρz,hGKZMmֺ6lqֵn+p =r:}tZսvzx񚷝=zə}|w~OsVl :\,x .C1me){3w µjԀa1ج' i7'#yp@X@UQ  c{@4MK l$kW0e}6{`+eT`zr1wRWI[XV2#CIƼLHƂҲ,gйc$Ö6~t ysl3&m䊜 Ce 3y$jNDUK!4_&N4CV.ԉL%qX`+~-4/؄!8`;[pP6J`@3hW#ke{;NwyO-f &Nkdx{*~B%WTqCS K/ZJER<j兣x'&![#Fָq?<+Nhf,:g>otGԑvoSz=œ*P_yq^`lnR+^~;K O/0G~d-w3ԉnqw9F<|<(Po/~؛ొ#OT˿-%_dz9y6xb{`n ,3kB|7?'@JzW6vd! X}h+8\ C{ $F uw 9@ J]Hh<ȋǕ^;7]BpEg $]cxy]ag'0&6+֐I`]AG9x Vy1-)_*D-2֎Ҁc6 kisX#*赒[VScj~mm)WDYjuEІNw JWg}|r@NFd0؂nzI5hYVV}'w<7@|tMgyRy`ryH"ˇyRIdpBy cbHW(0Cn7if6xh 艎gBfV}?Y g8gfhh9^ 7eg!C׶9w 3+]CrrwhmæD 5G&աp s2_zCt,!IE8Grt^bor:vsw]Zs^ڤ~9yG2epɈAxOt@ҖxoR2xzjx!M3su妊R e A}י}瀂"aiUh1'J=bאӗvjw^gy"Z֕Șx2IyAE:1ƦLp ȩ?:d `)LB iv}TrF䪆 p8z&Jz_@9JL/j.Nq:|JZiʍ( ˧Q*#1/P`a㈏|3ɑ0?v)`݊K:5GV`-y݉ZKE^;Rb];fa{j k۶Znkr[C;Pz۷?~+ {:vI0:wI["YNpKFK`K`/Թiɀu[˹+뭳[۸Ru 庤7K1Xīռ)@+ ;X+( k (XK+뛺NK[zu|%˿E`!Û滿ݫ| Y @XeiS« kB1R T71ƹ0 Hg.GFE'lb=Jmplˀ -xK ƂE@ơX4gCgƽ0BFO!G1=U$*(@s LsK_x Y5 S  cv5w|3+<Pxj17 Ҹ ʻ pwla#¦lfVFfkƺEj'").sK7<2/\6,5Ltc>@RlLi&RIXυpjǶiYMju SqɁnYc]r ]crB6 ͫ0 zJ p3Ӏ1WIL̢#Õהa BM@A+FCmd zB)EмV zdm֬;-Fn5A* /2-rM4Ap]]]x P<2&:7's(1uV1Ǒ`* 9ִ(mMJJm`K 9˫p  7B0Kp1D_-8 ΎƤĹ}ۛ( ƥW\9pmMʄL:$΍ڼL!\:wO7<}m}]e<ۍK<ʫ`p?=r]o߽lϬ .F0ߙ,J7=>x?-jM* } <|] }]ҏD+owCm~ߦ ";=}F7.{={: A?E1ZL&ބQ3d>n.0"rç{x]߷F(X~ XÌ ӔMߪ' cA6 .=m~ OZ: ;朽)t~jp,*XZH2ܢ^",I znc~jxa˾诛d$<֡ޥ-ӎ阾Lq zLr3CQؑ i怺gFGQ~9ƪV4*hUŒ)뢴ԟf*0JF@fnUۯbW3ɎN>|[F0^Jfda5[1)4,.ʀu`, .Kb(][ֶK iطѦ0+H>.1 L,sAS[#ew>e0R}2YǞ |9StT йqtL#"l"io9L)3ݤBq,a(&mw2Jy&u]0&M=ߚPE^s[ZJx8H-E8n#NBߪ{Yj^7l;f!1ኂw<{@3cAp3<.@WPԌa.w~JWs:3.?K[??(( @-| !Rூ 3@WhC(H^S=@ Uر0&, c E'׷ n*&$"ĠpbKlXD'J11Q"+j^(1!d<#`4\X(Gpv=Q'u# = 9E2|$$#)IR$&3Mr$(C)Q<%*SG!|%,c)YҲ%.s]r"%0)a<&2 I_@|&4)iRd!Mm)NCrdc9ϩ1sb;)'sa=Oģ?< 2#A 0EPD`Qdtߊ/ E JJGSjRt!©>z1 &a `Sp S `aX%AT{dMժ U)w:V+EN(@@镼G|u( hlW9@MKč`J Ƕ #J*jt,DdMYೆEl p#|&.$XF\r `#( c@b)&8f֧s;V2mdqQʙ6K^g6{lsr.t YQYnV&!UՑieps `LJO50I)5 S+x,B1Hz1O`a'D-|a<+qdKpm5+X#(p\5_Ԃ_Mm4/eU._z Y7Uk%\; ȗeEčr: Vw@(H;,=sZ]Ҹ/x[kÊ8c(rU.^SILlF5Yk`+7ևuUl([ٝ j"KdM #Ү1(tGIL-Z;6 ֭>:PxҲ[QLyt{YT's,M7,%S=\+7X@>C~|x9 k<.,Fb.Ӽ69s>9Ѓ.F?:ғ3!;PKԀPK**A%OEBPS/img/chap4_db_nagivation_002.gifGIF87a$&TLnT&lnTLJTln$&$JTڬ, dihlp,tmx|W`H,Ȥrl:ШtJZجvzpS$.znp19N~/SyP) ~J,€Ƽ˧-# "؝" $ G #G# P@##เF,pVOD1.pAF%H ‹#NA2|O;`'aMLl& khh"QIG,5hjhӶ zd@9#8aL+X"cKau 258^S˸_I" m@8!}ZBA!gI0;֮XQrCرZ;xt5VQVHjaʎv䆱Z:/BL5UFZ|mH'@9o@gI HDL E%8 ha& 0¸_!8UWbyJ(⍣٢y16ی0`=Gp(BJ2xOdr7JɤleN SkU &@gx]s~c'j.h7C\ dUuOqne4~8feA1\⒊2j> g\fD($|D&@q&N(TD*a}WXAB ޣ0KB-TUQa [_Р^ o'W:FϗAf X @ !F khcAYTB V?C(5>@RQ(Ybdme!63F"(F,9?Ihl1PJhA$ s*+7)H6y"gwLRt)Hs*93B\u҅Ch*JJJ48J2*mW,SuL}8s 7bT(UZV 3\8ת^ә2ƣj$S(B. @aRvBZA0!툤tl4Rլ"Z2 ʡvXԩַqlWFV2T1Kyk!Zu(Tڃ"7as]N+g+vM\p^kiIk eP$)yaФM)5X"{vMےRU&XTw3.Q@X 7w@Ad;SmlXYc6G #[Oм94(|qzX gh9 iШ.p㕵_3Ȱ_1i$ۓ^F|Z[}s$?.1jAw3xG!Nz4dw0/BysC4t\k~;%Zqă&+x:=ٓ'mcGcuLqsr+cNƱÑM Ck qhD1f~uaPw}\ui H4fOXBgF Ʊ~>"8S&>(ݳ,=.2=4Xs8<:Ӄ><@S3ApAlH7LRcNW}o^ \ c8 efUY8 k]цt=p nV gwhd~Ȇvijȇh irCuX(80XcpЇC ӈ花Ccg[qȋ̀xv hd؇CgSЌ q!2HЇ2n֨ kfBEpJ8EHXsqoG'`9|x z"@TX){ )ɀ9!R ) 'j^7 RAi4O(F5ɒ. n0䑆(@TFO fDm$o/9`@H`CAH袓Ai `DXKu1 e\A۸@DB`8ii`yJ0g$7+ɔoIjOF}9 L)YX&OI9'ss{| AFC) ҈K oi18cyH Ys#3Ɖ呛17\aPI+Y2r|9ky PӐr1`^ɓʓC#žp2!Aٟ5W?i ,x`oRsUe7je2yY Bsg7d@ʢ\ &ڙXjZ!P#C|Zr(O"ޠ湉W )23ڡgm4ٕ[)ĥIo%sqHEmLC]Hhb渨xz*L hѩ@ ўڊ'kܸͺ= YX:i ʨZڭ]۪ꭚ Jz᪟: j<Шʌ骖JaSB ۰JǰNDxsCx+;۱ :";S&+:(,9.3 P6{8:<۳>:[@;D[7+W3FL۴=[RPx 5[kdZ˵Y _ ](pCеf[huHගQ[}`q+G@`~zu7x{jqN@`;pj0ۊj{DAOZ jJ;v;ILA;Id ༄rWR^lǑq%+^ȓU8{c X kQ.||<*lʑ`? RL̵j@yBbܶ$̆@x`lD}͍wy\<\|,sK BXz"1NM92 Y I D#d L_OR|r懌۩.y/md.n1a.>ͼ YơYyjޒ@K|i$zxS'ܕ~Xpκ[޳#Pɐ[>Џ1K>I昦. >C"NC!F%JvfAS幕Io~_NJvr%F@"{ 3qb^)8GvAϕ NZ>=//H )^ar" XѧR.CL=XQ\`D;a$:_ @?Cdy\1Bh,G/md,'>ۨ2ܭ?]=*С{j1qo1wsizl| ڂn_5w, 00lb/՟_9xG3Ϸ?ؙo;_K;PK_"PK**AOEBPS/img/chap2_install_003.gifaGIF87a]$JTLnLJTLnTڬ$&$&TlnT&llnLJl$J,] dihlp,tmx|p(Ȥrl:ШtJZجvzxL.Z-2 |N~xkm kk mr ukj kjkj/ "\8@("JHŋ!ѨcA&ɐǐ|ҝ'f9r8",Ogv~ *4ڜc pӧP26sܚM٬'vK(G-ڷ 57.ݻݛߺ -aώ]lc~+eq,y.T ;sZ9 װc֠O}5aU8qō!#/\q&۝سkߎQzu^NqW~pf жu1s(G @SΦkn^U{fhlky&w,bv(Yz坨<$)dH }H5߃&UZ FPRؑd^Xff^c@6ύt('|ZFSe}5{ƃgs9pؚni) )O9kjYn٥&aZki9h ;h2FD1pQ\=P^NY .Jl:x oN$ziOU(k 0{X6L֛kb:0i`A`:|(q.s?ۦD;1Ŀ^so~Kk@oP ,T 5WρۘHѿbJmvڠl!ݱs3,CϡNE`S,mjT+>7%@,@yݷS*^9#u1ʝzܬڡشm;ZKִ Q̥U`.d-jv뫻v}2g男~'6>~@5վT`@~[. ~ {Ӟz^-Ik^&婊jQS &%xGv8iz7΂K§ZS*0 ʓk6!,[BY1cGCg-Z.8mk$$.;+ U'H!v(m" KȲ PῚ©*aa$.OWjGLYX*}JeJ(P# FB|4[T/h><yKf0٨L]̍k @ߋ%+ VXg#eK9J{A2;U$=œƛՀvǙ,)i=S;Qp ),nZ$hʰГa yMT5sDZG@X3{8gʮ3$$R=FOzP?I+ B&x?ixw*`gP>a H5tD7 d_ַZeVѹFrY/n;\jbSZ;Un hj2{5S2 h?n;8;"ֆDX涴n3n|; WI %^Y^s%sq8`twMom۩G݀k $N;db@pRzõl-+. CƣW<<sx4KC݈x'qI<^'$*l d)-MnГ1 +%_-f2syh.s-W2,:os@0DZFzJLڤNPR:TZS+%%a^`b:dZf*X*%}\ gpr:tZv*i k Iꤍy/\AMڢZ yJ {?/aڣȢ :* P/4NDn(I*::Z<ڨ:)x}:*. PAxU0j3Qq~OaFx w+J- *282ꭢŭ,ꭅx :ꢦ:u~@v+*zKZ2ګ EP F B: 2XP u۱ d &ժ7*JA{2HMHM 7:aX2( y)*|?\Joj0J۶\ u{)_ ;g\k H˵]@˷  T붾ˬ *Z+5Y+ZKph|ӽ;֋; /:(n[lX ԫڸ*P,%Z + ,\ <2͠@ELԪ{ nT]V=PRW^o 5 5= l:-J 쥘x4 *qVzz=؄|~ w E{D%{\6 :+p\ؠڶzėؿΰPKtھ@|hȻq-ڼۀJڑy,ȻܛkXU؝a ȯx¸+RO0Lq =qiL<Q-=ՎjIۑߒLP~Χ1 (2ϤKOlV{͗,4^: 6䵊DJ~FSP7fR~X>^MUKz2,ZJe-9x죯ڳk]2|l΢w^jҫ)Z0}6HȦh) ޜ.s \=ʵJ -k3[+֛N>,93(ۉ1, P|Yzݪ:ھ㓹3jX  ţê̞^MqLۛ5Q˱Sc +@.KR4{ Ip1*-щ: ʌH0>2طHPz^B ~2 4 IK,ꜷ߱X Fbz ="#̭ξ'Y~K쫏ߡekҝo(k\['+1ϵ끋}ܯ [욕ۮ#S J-|Kj,̾pa?k`` @aC AŒSgCCӘUL^Ao'fW&oA.kqsCKڔW JW6T\ח/X_;||}A@a|( m) NJ@A %sCAvg0tbZ6&6ֵL`+ I*7T`l2C-O r1@aݒ'fA+e@%Ɋ_x+k,ڴjiủ?EAA@^ d0d72!-${2`O4G 0LqqTj0Ql$Oh‡L =Of9Ց +s&ʐz*&@wmY&(݉kL;ӯ^[Bsˋ(d7`;(x u? S^JZx!_>3W#BexbF"P18# n[AZA i!8$I*mKJ9%UZy%{4ϓ%a9&e[m&q ]Z $'bI v"deag&{mƨHZE{:<귏lŇ b4Sg*$4a K #*{lbh q4 48yʇ-r<";.q*!wD @ ɠ1(i;pE 》 inxCgȝZ:l  # |o%~Y u9<'7[B\PGNcGc[$U[Mej1S_I`Av1e\Й-FXH o1Z9eJW>#+Ncn J {_ʂ :oU3YjnwN x l؋" Õ>@6T1\!L(ya *O0(3|.<1c~^*>k ,+Dj~BE?M}QFJǔM&+P 3+j3XjxH/JO`@!ay3p1 o ۔&Jkp`9*=PN|9.?b\-rF3A4dbZӨF}xp9ұ,;~4K?Ax E2-RT)I{$&3 EK~I8IP'%LU |%,cK߀Yv%4a"t-eNIĜ1y9JfRAr3yL*&Ӛ慰h"<':#gL'9Q{.T)J$h)}iHYzԍ0):%*Ӗv8)05Sӣ@=j-E*SNJ9ZT>DNk*Hr:VձfR k7ɪVE*%ZHz[+^IWhUy*URݢ`J2vS_ɶh'e3 <%lg#Y͒6q<-,Z.fQY+qY-n[9Գ6-WmUU0q!+\27PltkR׹2nr/r7Ll_iɕ.\ɫ^]/|ܞƷVT_)qkF>D e~0#, S03 s0C,&1`.~1c,Ӹ61s<u,!F>2d%?u,)SV2 ~2%$1f>3Ӭ5n~3,9ӹvA3=~s,DІ>4E3ю~4#-ISҖ43MsӞ4C-Q7:;PK#_PK**AOEBPS/img/chap2_unlock.gifg5GIF87a-%7G[;(jUJ䅃лv_N kfe5::g0.Wef|a0IDFGbZOOyyihZ[exF~`yXlĢT➚Ȼ׸ X7Z3|9xw̚dOX'hy 6v4jD;2tR8>h z|a\qvYTOfJBc7iDP^R\q3CUloqt5_sutux2YZbcIzDʸ d4 4434h`w̨ ^dz`oT-"idwwX0Y_/]GjKOY 8H+WYxLg[´4 zyfoZ݋5 |DDzw^\ّ!dש)J<옜*4ȴtPd[gsmfȱ) Ԏ'\<9 -i3vK44EԨ٬v\H{Vݛ-g4$>4TXPT\>3"q\6x2,-@H T[ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗)&$03(00P h*te*]ʴӧPJJիXjʵׯ`ÊKٳhӪ];HlaÖn6{x[ •Kn^|NЀ?.!ErWY}`@;4! z@!VINd^z^SMd;P@ U;q|˵ۭom 5fO_MQg{أOO?o ӂ F(VhZ s^%_ @_4x5 607%+Ԉ+8<~A @5$5L6PF)TV9e`\R ot)diU*lp)tix|矀*蠄.Mx4ZB6Pb"(BzӤ,7| ꨤc*8`N @$j뭸뮼+k&6F+Vk*Sƚ +층+nK.+K.kۯ l[F ʛ0j$l(ʳnۭ,,4l8rb.x@އ, wwW+ @ l`Tw̺$з 3ruaPs7Tz/EpLdPTd]=R`*d| ǨU 5=X@j ȟHG0#> h퐈L"F:򑐌!p$NN10(GIRr%փHb Q-"у:~r.ҝ 0IbL2f:Ќ4įj8D*5BH<':щdP( =O|'OSMBJ\6k_m Ą05ZHTD 9 !$! @$bH#! :'/hLR~І6 TpP$a#u^PTJժZXjUI+lʫW#p5gj [T")#A@`4 `KMbJRkSˬf7z -g}ҚMjWV!,jQ :bp™׽Dd%#VPr5a-~kN[i\@z %'<ѝқO=ײK5pF\?ޱfO|]VWyk۾ŏv5KϾ:*_Iwכ_|85+7˧M(}W5Xxw|ηk|t#x(*t+e kϷWg:<؃v~LEfրey}L؄N8-MBh1]UFXO(uJY؅^A5 o3X{"~էnp{bX+/2v4qwl{ze%Qu({ wz(Ȉ8GHj8|yx{K{+ +sqX2r@+x؉5؋GSHQj0 耲艨t+2Eؘx>r6]U`9QxѨK6OSII|NKyçǏS+0Ff鈅XG8u_>TBunFrv35"sp Q5@Q&1Lf1.T2tAVc@d[R6n@mmF\4 p9;c=m)BIAiCK(&5 b);3SSCiSyS(z0{@y"VGm즖$TqyZhT挊 ? Yz(ZYWMn^R3usY5AP|959 db/xuɘ2og9GYy49kswqdJ9Mdv+$did i_:?4bx虞r+)Y?y+vBq)ׇ ڠ G)v򩠍זn5J~4nJ x,~! l# r-tA5:~/k1L巣 hBZF |=k?LAZ*zPUX72O*\ڥFGԤB^zhk`jYbjLdfr:sզZJtڧ~?vXxJLzq4T5z:}ʨg@:iJjK*Lڢ*}ʤڜpʧ:it4T,zګ9jتcYjz*G LZ:ZzؚںڊGj2 1!#f0/SoYvzKS+efcV+`S{ ۰;[{۱ ";$[&{(*˱0$ P$VB(4[6{8:<۳>@B;D[y"P* W1CA? a]1p! ANY\{!l۶npr;t[a0u #&yKY{ A :##q1F2IFjFnGm` ` $Ր `  P א&A`[&̫˺qQ ߑa ѻًk껾۾k P!U3 "@IRx۷{ѿ0#8"7# *AaO$\&|(*, 02<4\6|8:<> $AB|A*AGNPl-@+L,z+ʭF}HJLNԦugT-m9" )Y\Ǚ)֢Pf8@g?5LLq=\k`R@ $E`ڡJ]|Jٌ$S$ْHN՚ٜW\U\cuHVX0O_5۴]ۊeq@'I@Yp@m]?oQQ`@Rc?-\9+J@D-=l+m޽bހ3J魟R{a@R&E=>^~ >?\WM`YvB6Tc6$`θ^ ]ݸhc;\V+U0 VB6:!`kc0@;+'$CN".%Vbѿ:BԔLYi<@ϺbX\ӂd:8 2l2&NGj] z.  H`493b+=~xpVp$zW=C ڍMVnS~2?+̧/?r! LPK5xFE*,u6_A:r7|(v۴M"w?'yc?y>UCxBzuxrsG5ewfo5pZQD-^ĘQF=~RH%MD 1„-]tip,atps@0A SE$M F4TTU^ŚUVSW+S"M`gСEkiѧśW^}j- ;!X5͚EP_:)w1Zhҥ7DZuݱM]T2ʞMΨ`-<ōG\r͝?]tխ_Ǟ]v䂁~ɻ;E#2n]^_|ǟ_~0@$@D0Ad>@jX*x#*Z`֢̭FH7WdE_1FgEo1GwGRKj#1֚"(*0d+Bx쁃t)1(28.D4Ts,N8 VB@ dOO@%з4`OE؂(lJA>ÑA*yD ouHpjI|'hQIc21*%Ƞ*Hbr j8 l2 [oH} f"2xȢ'49`7;M(Dx  l6\naoJ: 4H# 50L.ammIaT4 f"`XL9gYe Z5ذBZJ-چe[uZ[qG]:Hb;6m]<1l߆;n离nO~ӟh@:Pm?4'P6ԡhD0E3zQuEUK%G%Rԥ/ir@Qԧ?jP:ԹTG9ak4*T1UVժWjVUvի_kX:VլgEkZպVխok\:WծwEkTUկQujSa ` @P 2ld;YVֲlf5YvֳmhE;ZҖִEmjUZֵֶmle;[ڎ6 H6&{*V= k0@b[@,έo;]V׺nv]v׻ox;^׼Eozջ^׽o|;_6w-lÿhG!pxC P}_&4. @ 1+X 48@*Rjf9£9r@k(bljEn$TN!_s@W][rFwսnv=xwXyр|8r背`6XH^jd x@`D x,YP ؒ< &@!{sF9s DʇsȪLFͭAtp8ΙD_{>vgG{վvo{>ww{nxok$` xlx?5pCė<pH\7rɆ}{G}Uzַ}e?{;6.lDVcgBT7χ~6,_~S6iJӚ92uLz4:;~zG7_Ss)K@󃉒R+)Kۿҩڨ@B@ ^@A\ ADA \4B\c)> $"4#D$d&t'%)* ")/aiNfhP?PٜQiiYIHI8aHp.9,By xG\&82P7h8H䉎? A,AhhhZ|^D/ȣz.-BOhPf0d0304tkF`F`PeeDAD8(ȑN!aLdF,! 4W|zEdrl,xEr$G޹͡79 ~dJa,0QxEHEؒȄKX ?y\HGE47dgxxIhX"@Ŝ/1c\ɩh=4]`_ʬ]耑t ~ērtH y UT˚G, Dh ˸|DqT$KLdH H|HH7tL+h_;85P$hlyTMLXN^הt|̴MO1Ƅz }NNKȀOpH\Ƿ||@JPIK$N0N (8O䐀CpXO h؉, Dυ븏$MTe@ M?*P&2%UUуRX`!G"-RLxA$MRFh*mX (H'B8$шDY$'G,HBP`B F`[X'DA'* EDUEeFuGH} IJ@ؕxQ́ h@U+mBH@ R}ØUXU0QYUZUY`VRR0ӥL34#H`#h}S&A5X;%I0H5pWIqiV-%P7x6hf7xD85{W|W9W49TI؁%؂5؃EXHTKՉ49'XZ=0h  YGH@}u hM@uٙYYْٛٚٝڡ%ڢbM UsJfgV@٪} i8=HFVInZ1(q* Qwmy9LA D)؄۾ۿUTJ …0KOZ=گ @SZ٢\%5 ]E$|ڍZ6Bݪui}"YHY"@?Re,eu^a[M 0o^Mne0EUeuM_x&6F.x"1@pZXM բPЍ ?2E/>aQ!q,|~ S2m ȁB6 bCYN89Ǡb+ a(l[  aqP7Cd0\ D8̑#v)v*XWvuW2LD@/iE΀Fvxcs ,A9,Ȝ8IK@)e&͎;il, - Q~W*Ziāe8@8z)qcfcOcv4~ TH%@!xΉ,=~P>x$3hW*?, N,XDCWP $dxh  8 x Ԑ㧱WԜDH|te ?x 8因:+Hii.xbb#e?ͨgdfA|A fgNAT8(cm0t]%֜'x@yylj|^$[\+@$@',T%† QmP@C̙4Ȃ N얰!?Fm\m c*cfѤn n[dncpfv~;^N+FZWpi(5S3 >i1Ui0p9 )@ ) \>AL')?q $q'lxpK@BpYMZ ZARJo@E*)*on0gwo4pЄ/`s%8yA=urȂP&KˇB7CGDWtEǟ[*PwH >gJG͈Qm &p `L"؄SGTWUguUǁFW'YCǐp0a7boȀ,M`,Ē/dS߄Puk?ul?jOTvTqv(r8XhZw/ Q]ߞ<_s hv"TfMlvovTSwms_nxPxJr5vWyrvywψ[TY:7ywX7Euhugg";O!| Fs<?bwk:s4tG{ 37o!I73^k6'=OouƧ{ ?zzZ|nrz7 Uo&w|'Z{,|wG/ӿ sj}g|}IH}+oWm f}}_揉wΰ&쇚7~Gw%ko~dq%}Z@ @ 2l!Ĉ'Rh"ƌ1>@An,i$ʔ*Wl%̘2gҬi鳧Ȋwt`O*0 8R:c#r+ذbǒ- VgҴA)MAҥ>-x0ټzvr-D{.l0ĊQuĶE})@RsȝG.m4ԍQۣ}^v9*Ժ7~꺡‡/nxլ@4Ѵx[s;3wuZ:{ӯo>3<~zPi * V9  ^`bn!!8LRWVeXy(Z5x#5PhP9$E ɔmn#YNFJ9%UZy%Yj%]z%a9&ey&if+6@u։2)[$5^z(*(:(J:)Zz)gOj-:{էcB7s*:+z+XR:g`VvIh:,J;-.XYhHB ?@L=HRWjb[(l//[daC TFD Ε[Uvk/{1!<2ɔ)2 -G<sO|393=lsO3I+OK;4775U[=Ykt!譡0 -M VEB>879y7}DP7! | ~x16CLp5L@ t69`P" zQQ@mw׭[b U3LHx %QCD:7OJXGmQtso>p˖~o}Sސ8l4EX9~3\'1y`WB YPjй` XЁT @L! А({pD Q)` `wB:$`D7vf6F |h@7 HH‘R($D,cH>\1nPdAx ep;=NWp?#Og!/xA$pH4@#psGFrdFq" &;T0 A@]h$ 7 Xf|e+Y8Kb p a[(c(Ef2a.rb+SB0E=QP2,e)"! N hA"FZ'a@ AP:d~ @TY : PLjE)9BAѝT^fiF=*Rԥ&h K;L8˩v@fyOcB3f=+Z("Jj)ƩsР')BH J Ǡ8,bQ2},O؊!H8kZ캔@0.pǴ`%j9NRu+ۂB-nym5=ekYU#  e Z`! ^ʶHn+WSZ[{\ '0*\$w >0r^CsbjzJS$B8/1B,&>1S.~1cQq8ft ND"*+&BOk %_$f11i˫i*2^|e4nVPm`M3bnn_2g4|Bt nЪDt!hGsMQ.ɞOU4595sM Wֱ*z>6wx]N6ShSڧQvL|l<N-`&vinpK_rmwf%nv|iI[_|ʹ#.q$% u sJ.Nꌋ{?9A&8c.<%,ϖ˭m|5g `{;9\DW{&i.Ü^Wz.tC]:ګ=fK|.wj[$XnlϽyFN'~?c;#䵏}yw8!/GXaZk$k}.cO_Rָe{>'Gw}ElO?>ŐOÇ>)P~}W~~1b:?/ӿʿ| ?^X  j  `[a :Q^ fD!8`!q!dRtQN n ֠ t  kD!!& p*!FNmafn!v~!!!!!ơ!֡!!!05\5"9,"#6#>"$F$N"%V%^"&f&n"'v'~"(("))"**"++",V"" @C@$5./"00#11#2&2.#363>#4F4N#5V5^#6f6n#7v7~#8#8.V9VC99&:&@ ";#9#9>#??#@@$AA$B&B.$C6C>$DFDN$EVE^$FfFn$D#="HdHI #.9#@z$LƤL$M֤M$NN$OO$PP%QQ%R&R.%S6S>%Td66d=V8l8WCdC.NeU^eVreW~eXeYzB)]+%^8|+h=`!4.,@?F%dFdN&eVe^&fffn&gvfT6@6DB$܁-`CUfjڃjbe8x,4@.hifjf;kc? .qg]`@<@ fa9.&>z&vfvn'wvw~'xxd؃-mZzkfybEk*4+'LC%]e]&r6s< HdFe?Ca*>9h>5(:"!CP"@C|h7 Lfrx֨(樎(x6@;ئjz~n|}gqC%+08 r֢Bd5_@ CX#74@<@.i<(9C:4@C=ix7$v.zd=)&h$"ti&@:i.B).F",=`VCvC54j#VCCv6+:l5+6jl~++G~,ȆȎ,ɖɞ,ʦ,j;%l9ZCn'+B)-] esIJ6(C*."ZCbk5ChC=(ަ-b&mvmFN.V^.fnݪ,v~.膮>dx8,DV,lԬ.,ڥ+8lC $+:,@@.Lm!Abߦh(5k|#//oҭoٲݖ/CB/;ob6?0GO0W_0go0w0knB"5XC.p8D n54_,%@.;j-<1*rCO1W_1go1wfXW058qLi^%.8njS2z1!c"/2#7#?2$G$W.6@@&g&,6b%_&or''5`66,62-oYj-h9N20031132'sc;Mr.4H^36g6o37w73883993::3;;3<dz<3=׳=3>3@@w s 4B'B/?34DGDO8AS4FgFkESRa 6HC H>I`׭J' LFtvtZ T! QQ u ItP7!RtVu JwuS{5zlVT4ZN4 ItʴM+u[ W Uo\4Qu_]uQ/Ja6\4Lt[?[d'Z'6_cuV Rb5fc{vY6Sf5 nudK ގQX6mki6nöTTUdU䶢5KoL`ӴroO sGt#JHscJ`v76qw7x7y7yyz7ZY47|Ƿ|7}׷}7~7{'088'8r?x^&ln8FC8g8QPܰrFXRX2[ɖD@^UHH` L V < xRMw=-AOdHԸ[lA9 PE'yB2! CX<b Msk@D$0GZxC(`@4H'H1C182434z/xwzˬ'x%ʏ aa cS:S/ʛRS PyO y@@4B("/X+_9U@C,4;O&DuGOȍ(DàC|;O,7/ /0󄱳 @ UjB]W#ʩ L-E@ Eф<ԏ{Wl팰 #;2+O{& 4ʚLgJs24OK T5F(3 MC1C24B(z0B߼Xc{iVjVk-v%/CTA0Jqix)Fj@d[B%=AۺɖKODW ?adW|HVAY 9?l_X9@P5 Pp6ٔ7:b1k$Q)!pԤJ5JH*<›8Yzth&ѧW}{SPADK%JFp Phʫ" { z@ 1d 4C 4(8@K 6o* r`rip뎇ɲE$19 Rr9p09!c?PC%5@b&-*.N3TϠ*R1,3\jȥB"P9d@K03#4Oѳ)CCE!Ǥ$4&v JK@I-SQM=޺:aNSAUqU]y_ >rXceMVYb5=VikeY.GUf3oUK[kVa΁̜I?ї㡺v`Vz>Ro({'9Rf$Q ]@ u_@z; J@R909Aᏼg@[A}xhr#.d>D@"*`^``P!0=nn@d`j/)%NNRI p |2/"d! OB$ɮ)J'&sRB \$ (@#'P  Eo'B<bl26bD@ "&*2+>="kJK=QqJ !¤ 11.|!N|2`RA pjb"$dtBٰ"~`bhπ laB \ccb O`\!D!+z  w"&ά:d<@E#8h0I>%k"AN+` @DeT@D,@o1=5kK" ѯ q#52'"QU>#<$^h/zTq? Kӱ "H "'b"|0‐`' A RaЯ>1XO3#3"5r(0 @V! Z Ҡ/203*<@F`>V@!rL2#CQ3C%9$S"5rHS$315;s5-ONPzop@ |SDɤrE~"z)"Ck(2 ʀ# & c 8!@H@B,IN+#3Ol(E^`V@ a t@O *0`!KV2$346ES?rC_7tD+1C)$A5[4c$CT5%Bqn B,BD""L6?);N D ! ,R Bd1"N))Vo>a  "L`L,BTEt\S%=*dTCQ0&b2*(RjHQQ/.OͤO1rn3 U5S9S=u\4DuT=.t/P/>M6uU]Ua5USfp5WjHW}W5XuXXX5YuYYY5ZY`V'UѴu[+HRc5\u\-jBp'+t5^V\^ZG-\yF]iHDG 5a-U6Y'0"aB"#1b5c5]5-T5]UM+hL ]+%6faQr'#RAQ%S#+5A#1vchcck3.`{'3m eŋ++kk*eevh5Q5'#bovgI#V4i6oEiςiNd +`TXj+qŶk,؊܊q#wrkhv62m6g#EG"53t7"ARoUwuwE[A]_- +iklkVl{7rI*ku7y!5vi݂ЊwzxzidfzxuZw|ɷ||7}w}ٷ}u{I{$5ޘ ,p`8xry5"[!8%xXa"BBWNH j$r y N`7 ,؋7y.hx-xٸ‡G 7i_m lŽ" y4E TX9Y8!y-+;V6.גMQ9Yx "i-pSNx" B8D#9Kx'QjF9K;9yׂkyG99Y+6wSy鹞x~8%j؏3Ǘ#@&@͙ٜǸ-8+Y۹-3z3l)7-UzY:?59ŹI9u:zY/TnN y אO@:_8z鹢/Y[]:⥱YaYZڥzךm:vzqQyc> e2:+xZ+Ҙ-;5r}5A3k%xgQ;U{mϳ66 ״q;u{µ{)[]&QnylmZ{ڷCV~{^;{oQe;׻ag6vAUиm;{wzż <ĿY-2\X--1<@ u\⋼Wo|)=~1^~5;Q>C~ 䙝߹=eW>'O{ykBq9^o^=5;^Ei}ȣ~ |U7O޹~F^~˾6=a^|>U[û^퓞ke1s}=-W{==5ۯ} _~Q3[i)}_} X8}e{_?-s?o~^ߔ_?ǿݿ{7" <0… :|pĉ+Fh1ƌ x2H0A6| 3̙4kڼ3Η?>X1hDDP4ҥL:} 5ԩTZ5֭\z Ŧ^qڵlۮH$J,wڽ7޽6{th/A=8Ō;~ 9dc).lfZр %vak۾;ݼ{g [6ŲN3N =A$f>.{ؙܩrsE?~/mCn'` .`]T`FREj\I&Y}uGb&6_kE5 R`2Hc6ZȢ Uԅ0m6 ?xLI=4 ڈ'NIej)XQ?le]xcbIf]e[bYٜ}UJ^h.h> i(YԹ@mD'8'i%GwA kYؐ)&\A*sڱޱl> mW>E *%Jw%DKn枋nn oKo [mA Q mVZfo ,Dp#8)mm_W X\h o1M>H1Uz<ɑ,! r2pcsF.3Lenj)9 gI/`CC-5Ւ tF $h@DA\F"aj]&^.=~SUрUxA gLN9KSyoyD`FZ,I]jSLN54Cjf!m oS'hαsd[€AA'q" B5|% OO#c(bqEa"9]v"Yg{ p{.}t{ x{|{ <ޘmoͭ8}iL?.k{cUh  s` AS |)HkmaW u`)'A ](n \!71Vt|7P ` $3(AԇG؀UOnO/"rj;N /%P-džS=O|@O8/)/*pAi \^)$h `l Vj.+\3D'R F0`=0d8F:=@o~R?AK"`4/A6&H xAEv%k-`(~Ȁ%hcm}zg'1(aJ--/8;ȃWIq8H,:؃EhEBh*r/OQ(SHUhWY m DŽr%aHehg1v҇S2o(sHujH)цv(q臁(qxHz|Lx"xDp(T*DȈxaӁ8xB0PF?T`8N$F5NNĊhP֊MXwU(ȇhvHNVVL(G$U M5PwP(VA4a(81X80)ՈWXȊb5?4!Ѩ5]ReHvhС:(t)  .RvH3 !#A )+/$y&y * 9ɓ=I2i4Y}蓅ӒEIi@YB97 J)GG)Ui#Ɣ|5 nXya)2{'ٕc`m閒Rzqoɖoy(qsuwI$—x m)阏y# w!vAQi3љ;-bcI A'WɛI9a!њbi86^yщy9T) iII5 V Iy4ة)9ٜxٞ .2=91Q m2ٟv)"i/,(;'!# ١( /9*35ʑi:*ɣ8Y :K:EGILJ ʓJZ]ʄW^JVaʡcZkڤgzZjlj_ꦫɞSz {`pZ\ GʧR*Ǩ*t:yj频ʩ*JJ,zrʪJQjJ(Jʫúzz~J )zʬ JJZ( ʭ(ZJ:(ʕڧʮj" J:%Jʯ{K  ˰[J[ʱ#۰ ;Q$˲6a-Kv񲬉_)5˳y8 !=KyIK˴MO Q+SKUkWY[˵]_9pcKekgik˶mo q+sKGy{w˷ k ᷂Bq +4ҸK!\>c7v%>7+2X#Wl T7Sz+⹭+v;Xu\˥xƥ;T5r<溟 CE\KՋz+̫\Ûлs{+{mkԼk \&۾㛽ƛSapu؛+ +aa  WqqP`` !,#L%l')+-/ 1,3L5l79;=? A,<`IKMO Q,SLUlWY[]_ a,cLelgikm|;PKoҁggPK**A OEBPS/img/chap6_hrcreatepack.gifGIF87a9%:H V)g亼tvr5u,[3fVWGGe88eƽݶf]jijff4)H{)**Uب3 -oj6zglz`zP.\kYejM ɹwi7T6iKY,' 8uۍhYHw[g̚c/ ^4nYfZzƘͧm˽Nj^Ɣ҉qXYdrmKl;4g[[XRK+444QrNlb3CXD=)Ցީ͸wuyyD8Ј`f.xyy7yFDWVwFЦo}TN V(u l̔ Xcf6W5|;w=uBtHTyXY,I(|̇NkXtdN4 g,&1"&v|uv*[@KC'iyDkK;131̷|pYqkWTTMGa6hCU6%tQnfRdmkh _gRvpLJO4 p|dUs4,ZNï`   َwwq9I * ӧ% DD/d4sXmf)[Ԏ-i3v4EԨڬvЄq\hX՜4%>4ԘXQT\;3$,9@H*<Ç#JHŋ3jȱǏ CIɓ(S\ɲ%K aI`@ P4h(CH*]ʴӧPJJեs^-3gs%–N: ^ͺWc˞M[NAzt2D߿82ȹ 4PڪP*l8|0ˑK3P[ C*~U@ /g ;(Hw=^.MW.usL^+|өW7nM; @q >IyP<xaWՅfn:p5Y딥ΉfeZ $a+֕_\c;(0 @cFEΒL6PF)TJBzTSv@\)OzYb&lp)tix|矀*'Ρ"SO"PhAAt駛nCdP*무j뭸뮼+k&6ִؑʺ^@j@nmjk.Z٪.랛.K醛{+0Zۮ׋p2pfwKj l(,0,2l8<\2$|mH'L7ӴΜjͭ` <".@d`?BVF $0*q!T7)q  ,)d H ̬U0 tND|NV+PabXzjudj+! WЫ7 42$@C #=R㏯ q_2IrU<R#Y*0 M؀7+( + @ ,]` ? NX 0\yX98::5tU+6\ኂwRl0 XIPC V1gL#4ax|%X2"\ZH<:򑐌$'IJCa@"7C6 sE(F *WVrT&Y(#2^AN 0IbL2Wҗ|*_IjZ̦6nz 8)Z9r@!4 &V}@ZX jHĠūU M50e} @Ti@ X5QY?`@Eql`tEMdFƦ$DqS"@*pHa Vԥ6LMԪJ3f3Ӟ4C-$Ѐ hMϚip\J׺ڕD9_WW&C*shU2H:V%Y0Oͬf7z -fAMugiW lgK3Wۤ pKb8ǩt]F)Lkjv[z Z32 md+*SP4&V. J Xs 8UxgjȅW*T\"գ-!G\ \ٶ7d@3 < ZU(~ڰ 81?sc9 -,0~;9` P<@[ YLv2+ ed d',@ZP]1xa,`zd`v1wbj-,XB[*E$"A)j2DqqB\ UE`"ԧ敥{',n|5  #^U[:YUh!CMbg~ghZwddoMj.n7izM3i'?ρb?8@:oֻioz8Ӱ7kvX]h6#a[Rpj܎jNhǸWro-: xCY a [p>ҏm3}PԧN[S/D0I@mi# J;kп`M_D@ x'ߓ6Gk/y#ocGOz'Mfm ۦv 2c>3]ntG^+lH*27 yn;1U{]i{OJG|r\&/i@ WN9k~'K~ ~NxwJtFsiutHszXvX4 7z ؀Lxy y؂+(4X~b!vmW]gH8D4KHdg+6HrvQXVxX'n*d?DxICL o|osm nFtXooES4e4 h0((h*(hwxtƁȁ4񶉎8tF314.XyZ؊Dž~cb=4A3OGȘʸV"bg}>l!gvvf'ovhxƈr؎N3SFX鸇HȂ#ȊXL4{ȉtht㌲f2@E4ymTzF&y(IN/N+y43SȄ> pne d@ fVF ELxz8Hzؐ)ٕ^ٕ+ +YN+1)r3iM3KЖm9_HLqYvy2Rpbhhxf~0EO00`szHtfׇ7_ٙz*||8|i?iuZ{~I ԛ Лx6? T`a@(S 9fVǚؙ'Xy M+مr+مrxH58)JDprpJIz9z8&~MW+ Y YYHUZ-*c(3GsEIes6O<*_fEffiRWq0JS8[+erPحۭ˹Hy IcITYūĕӫDۺ{K $K6 ˆȲQ[ ZsrovG9;X,+MI^Ȗn۽T5i6 qr0\@R:X٬ < "M$ ==\F?MAN?(`p90\ :Kt8қHD|j`9#LnGl\v̌I\pkFfph Sipako_<ƿDwɚyL{<H[\]ɪڴL:̄V $F3 4UhHKȜ̵%4}DG:`qy ǔMΌƧ4bQpY6L+J~|4L4u6YIͨ|mrlMLr~۴Yݙ s̢J3?W'(}҂ 7 {[p:74+OCV/ZF-9N ]M 44@FZ}zHƚʬ|rMfQMMSML#6}t] FLQjF|!;PK-+z,%WvȜ֯ ْٚLٮd`ڢ=ڤ]ڦ}ڨڪڬڮڰ۲=۴]۶}۸ۺۼ}]4""* UM#J=JО"@Zd5=>6zXtܹum[ZZ==]9 +nA\~~\ ">C}}+a$")+vf1,wg,ƢrlA*>]g|PL@l.^)2n/"2Qf~hjlnpr>t^v~xz|~>^~臾JR%>^~阞难t4QG !?t;S APQn qh@ P뢑N!>^~#^#B(""j]4'2 P ;b6$DR$:}G l2pAp*POp` 0 jr 0Qj) p0OO ok0*Q"oQO0Ejln#4%K*) t?1 @z_# 7v#t^*;1$?_?_?$_?DmV~ȟ,&kfphp~F4xK~p؟0w䅖0"/b}qFzկp@ Q7*\x5!V̨G'DHq %6 @f .m6L!. <CX N:MLB:UkC* ~sXe͞EVZ"(W.RśW^}+ 8P"Æ6Ђ1HD={`b+q^pAq\xDHS֭l-\ 3ZI@E9e jbȐL2mlܻOf'QN/wРR?\$!r?H JMƘd+C 7Cڋ UB cE_+ ;,o1GwG2H!- F%dr.3 J+2K-K/3L1$L3D3M5dM7߄3N97g2 ??PAP H@ke43.rȱ XĂPRfY&3ΐ TP!`G H=WM%a;^=vd0ٯ6ZiZk9S vI>K[W&=3]ue/hPy I{xr.j767B DE*HA d< Bӈ'NB!@rXCM0!5 Aol{co-6„"1~ѫ$R O E)Q?^DiA9?! !'C PҔe*U"A^qe+s86ve,]yWrP* "):8Kfnjlf49MjVӚi @"EljDg:g6`H']U²=!"Oh@Z@cټÏsPI8/QUF5Z[m]gHN6Ԥ'EiJUzvSy[(|l rH:Tuz)QT6թOjT:Uk"QP(42Quջ4QmCZŀA=PяˮTQ P.} ` X 8` vc ;X8d/YŲla!k*/t\͕GAʵ M-^>KYֶ U%UȐ.է>=ŷzyek#9.I{Iju]v׻:jⅫpKg楼 61lu7Q.aXB _Ti-,h p%iQE ,#T %edAKaRسլxNpu㾌% W+:~2sdWOr<$I L I*Ĭ1c>X.;lel\AZ әw2"Ҫ*f1mJZ:=D/Q-rS;KeJ$K.Sto8YԊ*HO-xYY-kZWUsnsi#s.zpf1 b0ʠ*5r_kWiAuNzjF[+n[/G2-HnQ0oz;Q>bj|{IVsUq5Qi}3^\/"VE>; XJXmR=6GrԷV7eyc=g10(;` P2j;3Vl/Ӧܱf- VDzֵc/\}gke_3V@>!NbpE5u-WD }>w_f@`I00l p}EGd]'eBe dp0 9zM~]"@"cz+Bݬwbϴ"8b&1l!11l~տFo)ȎsPe iW{~@3H?*'k[Td@ "줒2*[=s/032{X78 ;#RA32 !$"4#D$TBd8 Ma1Mh`+ H(` +9b3D4d6tÉ=B%8( _p_(-P%+88j:S+mQ)p*O@7S9hETs4sDy )Y*K4TUlEےŸNܱ] a^ZY20XH1K8%Rj:,;.)Xo1$Cy! r8ڰXKDƆNGy.0ņ"=#F@N!13"FQ0$DR$THw6:l/Z1T#{iGꉆBKS؄Rp>h EII:ӕy k|"H;OvK=-tO>=S3S1ASA؋=.'OJ 0-`7Q}8,H5ɮ䶻c3I=1K]LMϾۿcIQ^efu9_`M8'ŋ Ԃ{.P;|hPФ ͂*P[ >uvu(V/V VC1tKv}}WK3Q&VCN4'nNҬЇeu,W*У\E$M}׎Xۊ.m/CCV5SV\ҏuٗu咑m}( ьLU<%͈4̰dVe^cvghijklmnopq&r6sFtVufvvgm>bsxxnzvf{f( fFvfHxVfv臆舖艦芶rPxWXs8s(. uXu@lPc.Ni P!_肔Ɓ~f x7.iFzFpFUk(rHf[PPt0hkjvh4h8f`Px(k.s갾džȖɦ~fiVf&muPϮViF傢>6d"hd怆@ "de>fvfNnx`ƇlUKptP疇rH.v6v6c8oopnmpv~fVnFl@ron_m6iPiVhNuXmu`h.ꠎ mimd^fZ(3`^eVrPf@ eF)Nf)r*/oe./2sVvH3Gs0s4ds)We4O0?>Fse2rfVf@gD=+sss11BtNtE'R7SGTWUgVwWXYZ[\uUW&deH^`Oqu(vgW:mjF:rXg.'q'r7sGtWugvwwxd6AsXzg{'r8{?vnB7Ggw/b80O9G]y'1x y cwޔ=W(V̩`czc)b^r?|z%g_bcT'@~c26y/zb0_7˘gx(M_)7Wg@⽉L?0#x#= /{E KP>KM˼K`r` Y2Ȇ:ʝ @Q*H_Ɛ&0~nMB gHJP@!h@LP" G~G~4 g@ؽB} {#;j /8=?K,X•8 hC XM d )V,Y2pV^ZlT0h`AT` *BXrAX>XEH=( BV` "n"5iUSijl ln.hU ^~EJ S`Xգ73ТG.m4$0`mݚuUoެ㡊ܺw7K XDC lƏ?sN^\@ o";!z  &$}%9$5P }8!8 5@FT\iP]6%!Zgihl 2ȸ^RJ$G0ƈa6cjiM7pV$M:$QJIl]*HN 2%aIrU!ޔU7Fƛy"iH5@ tA( {0XDl&rfnX060,ZzjN9+z+p\a@Kf00& \!s:,J;-Z{-~ױz Qf.f{.骻..hYFx///[k׻pN ;pC<1ׄ?0{1!<2%|2)2'71 sO/|s <3=LQ7 =F2kok( AkQ{భ]k"3ȨpXippl/R@A(&m7ޟ=k\|8+8;^E̒āF %}X, -i_1/zTvuVmZkXdm3*D0,dduߗ\s$i)I&hI/swo@l[_ 5wAY0B(&d&Lr b xnG2&a%AB7:z *!h 2;)֎b1wd]xcB652y9qV^cGp{ (&4N}_$@ 0l s#7HJd%-iIj)P*ԡF=*RkZ4 @ q `A+X4hn{j ֱf=+ZTm+A"W<׎.Vj țiTP% po`ec!+ D'&1PEz洩]mQD(b5۵k븈ՂiX D$LU[9 %T'eo M}tz(E]SȪd rӖ}oD)|>MgTX_emE2ת!~`0d*(D b+ܕvLL:VJ-6knhHģygv9ٸ & n R9⯚4&dGIs $n]톆' RާE-ؗNr`B_BD3&hDB&o0Ѐ#AGArp"峞$,@"h 1`XO%a+h [xԢfM!\,@DQ"X;v2y\UDV 6cdѦl+$: h $&r<7)4MeD"(h6N(r868$` %4Ə0av`i( <k`$"#Xr˜iA v`^3Fִgc|;6ȏ=ܣsyT:ֳuL]}nݶӮn;.ӽs߱gֲ)`i@Pbbgˮ3R`r] N'3,U)VC|%n6alnvX;=i Q1z>|,(PZD3 r|%S}cï6졭;v-cR  62^p,U npl~EJ~" `፠o o ҴLoT ] o`.!6>!FdM E`_"~dN`o+}I Q`Eaak  "! &"6n4" B!""$!!:b!$#$r")b v"%^&"(!,ƢP!fdH_m bEp<2* š,~&&'""%($Z+j#c)b f%87*b6&&c%c**’Q#>b;c5A-nsbnߊIcn0AVdk\co(Endjr$HC= E^d/V[qn$VXdVp@(\~ aXAb P%QHdg8A$KYNF2$Z TC~eoݞO!6Ih@@L P'aE+&(^ޱ0FRX0dTh?^k蓂$N^$nҡ~G&\N>[cqҦ*+vz>RjgJZ`| @ @j@jj@k.mzmr4f٦ j:~)7(j)?*m.imazhDˮ$if~gڶ۾p|mAj)˺d wDBhL3AϚmQv-6뫂h2ƫ(V@(C3A?rN)"m&p#kgxk0Ҙ,k-Bba@AD%r4:lj-v(7)o -6.mF >.2kfoFNBoj5[[Z9(hB BduKfp1_-[avI8YJD50:n+ٝD($x6gLEƔijjR"tنjrn)(l.C*dB*H~,rNci-&4 r No3Kah ^B7vjiwrwkXb5cEgŢx,Ђ)@%LzOv<n /4/dgA ,q0xW$TPZ4NO7L-TV T.Lҟө \wnOPAXEwk8?w>z*ٗ{E~eB-9N/P,-a9t* HGU[zиkxڎ[yu:*ڧa:HC9~'z'm/4rDCLAXAzr>h8ɞA? x?1H@ѣG=^PaC<8bE1bdc9dI'QTeK/aƔ9fM7qԹgO?C* `d%WNkW_nAYgѦUm[oƕ;n]wջo_<D]mT)SP2p% zʔ)3֒$AÈ%5k]Gt٢X*ֽwo߿>xqǑ:ѤK> iC7l^ݧ_^j寇>6pKLPl\{1:f! 4 ̃PŊo!VcFsDM~ @~L%qR)JBZR1NCj ,Ӱ d[7I&‘Tܴ~ 8cl&ھd0aL31AVی8 n$ӍěA qX<J(&6-X@ H(!Wt[@,0 e CZ&oYn5 .6LrI=+TC-&39A2ĪjҊLeZ&}r$@ Әtg 'L1Q @+Po`#կP+mG'W$8j\hx^3pb AF AJG(_)5ROPʠRe1I ,2#u[tg9ϙug=}hAЅ4S9:Gэv!iIOҕ1Fz@UAjQkQjUխvakYϚֵoh$ uKБ`sd (` %Ti:](_[>Ĺ_냟Ͼ~%Q>}.g?oOr/ OOOU&BP7po//q0wj2PO/ wPp&c0  ' P$@PP Eup'/{U$Q'΅ 1qq!1%q)-115q9=A1EqIMQ1UqY]a1+=ȁx}1q1q1q1q1cʡ 1ٱ1q1q2 r 2!r!!1a"A"ձ")2#b  #)2"Er$/2#M$Q2%Ur%Y%]%a2&er&i&m&q2'ur'y'}'2(r((2 ` B$K(*2+r+++2,Œ(ρJ`r֡-ARA&,2--2..Rp0q 31s T36CR6Ʋ3=3A34Es4I4M(^a5`dS-2`"Ss5_5_36gsj6 @ڡ `ɘ0s v@q)'238$8N;;3o[[R>s9  ^SMQ)s">,NRBMCu4!O{UU`QG " @R/` vOӡFQT_*TTbTe;tbO6e dEab6A3bSHnG!2'2cSv!E @SfEE#fQ6f[6lvl_]G[/>UζS/r5K5p9ݵ!3^*34T!a @$65Pw4)GO+Rg`2IS@T!G)FSr9h ЀQVDVb 6u4caCdsvr$yutuwtOq{f-SgyF7d;uw{ɶ{{]l%-" mŗ|-RW}0Lt@^)Sp37 N3̀r$v!tCt B\wRQ| jA{Qc "MvR1YwMY)@X LwSW<8j>!B8IGU$ut3xH؄ˁӡtwzsxX8xɸ8xٸ8`.Ƿ|ra X" rU1q 0L!7Ax۱ 瘍A7;?yE2EQ9UyY]a9R `."m[.us@oB@MqQٌ h9yɹ=aٹ!1չyUat`Yzw@k՜!:%z)#eb)£7CMQ:UzY]a:7Zimq:uzy-q))z:WO:z_:zZ:zɺo⫣0 ]BŐ%TP'غ%OP yco&:ZU\  p%0  [0в_)K%/%[ ;e[{{G?=apeb+SpQy_0&fm0C{{N⭫p &z[7P۱uۺǐ зQћp ջ<û; kP <% wbsBo+}zMqQ|Y]Ue|iƱdL/u|y}ǁ<ȅ|ȉ,bƑ<ɕ`ɡ<ʥ|ʩ)$|ɵ|˹<?@ lP"˻wpNB!j Rbd f&< @$L#@,U<$} &! g.T  4O&> @B$U8 =%  @X'FVa6:]&r}{׃}w VW&31@31`D˽{$L}!`ax%XfC %* 9bz2<@P <}-^"Da!8 af f!!$8 ,"`e B> H Mb؀ !P]O d~ aahr!Ҁ8alagBy! Na @O\ &;@$L=$Ay@ p>$XƮXLC @N $9#/% ( T $@8$0v+a >I_ Q>e `^>g~S!~> 荡K&|AA@22@ӃMp9A!TBq$x`x x  `]; j6 " :լ[H`@(бC_)V|#O=ND mE&\aAt3M4 Knj6[myeEbI.UTiGlLo dXtJJ6*0c 0`E× A @@2lLTo :|M@-&PZV9" G/tNGqBH)f0PnZ{nrнb_]6feTUtq6we8Pwx/8CV[ONk.庍oyz袏WS_{N{u^o{O|oh?}OO}_}o}~O~柏~~Fߏ p,*p lJpW`wA0#CH2.,l _p4<TBޕЂ<DaK,Qt$( c| ~j?"$)\J@ŭ(",ql<7se, P&LA Ϣ M|,!iW0cHJrdK0G841P"g  d>PGatSn2FI\)P8p(P8,(Y!P*DI|xPZyl~BUe%ωtsdGx("JMb+bP>JWb^3VNf[b9Le\1&2@,Ak1ja)Jh" )NRD1zӟBeQ{ԤULm*H:iRRT3Ū ְteY*Op[WO4%H%"W ֐a1,Di Q_䂀2뱍le'K$%CRrQ0r  Tp `PAښVXժv8U⦡D&P \" nVչԍ t݊b TԸUn$v6EWuѱw>]N|nW"s\j98NkːbAy`XZ#ݰe;X3C,Wt LR|QVjQXRΖ̠m߫^nx QWAڍt~+0rq3Id2-z4٢f}5t '/Uaq}DB ` iX+-M#b!@B6qe)JSv$ 2Th^`1 it#8m $@e Ri_Vrd/@X6g/{vmml;;vb7cNM*pn+珤u*L`t@6@diA :sfcD!x٧ RB}`U(W2$)vB%ߺ@$"Q<|B/z}s1\ 33_ݬ J}/ -pYD#U1SMѩtom9aMs+~o}xYꔯIaֲŵC78Oԧ~&~o~W(7sޤE6(:xoGߍk/F(l` ²!G'pQ/GJpF Ȁua(HH-![Drg X; $FaI rP/X Jb,m9OLP<@4P __ց !FQ3b3BCIÔ, $UGdt0llwb  o0u( !a, 7QE5op.x<X1,Fp xK(;MNONQXzQW(5Q/V@/518U@bCT6 (ԤPS R7l VG"@]qXXV@$hEb`hP ;ov bH  `IH3XȀ UE^:ӌGa [!DkUP8LA&0 GQ<铀Ga2A1Aȑ85ظ'B-ٙk,Ҡ")=qզ-گ}}{-}|mܿyַ߫c>,f6d$M}=!иo"ཡKQC-jM.O-(.ME}A~D۸mۨ]~ %Y>I&s9N(Ї_ ;L.ٲg32^\\yn%}NΕjsr18xd[8>='=+.n>%ohjarp8~.wbESmRUL~xN!P_JOWN<<- m3N 0 T n#u[fӭ-ңI.H[/=]cO.'N-C]Omkb@BU2Ennmv I=VOc.oM5f)Rq?w6^O{/7M.M֘ᾟ:[bO-l=p^טU?oA o%Y9d?AMgد BS_S0u X` .dAxA `4$YIK` 0cM9u! $<9QI.eSQNZ՛n%HÈz1ƎCeꕡ[*YbPeʔZjIX%4pΟ"4zcȑ%O\eZkXd+4G".,%=|!'9rpdk/\|,㘟&(O ѣ+.}auյo:u+?1p敢O>{wϧ__f8?S\Rck)Z{MdA74xc ސP+0c9T13n:ESt1W| ːCӰCGD8#GQ8$T*.ECQFC@D F+4P[D^;0Xc tA cI%.1{9zQ]|FIe<;mBH[Cu)71ОpPQSuU_E+g2"MW`wL4RsM4T{lf6Р &4ENh/[2qkV[mU0V+RIX^Yܷ_rRZU̵EIa`ů7'c邸2o)OJ{jYޓ 2f-x3؏5-ҘYyJ~Rivz蛹yg2(F6lVbvsYUj(6i(" (Z|Xowq#mLzk=06>  H"%Ur.Ihkv{ܠ;\Mx\3!>(2>`XW{%Zsi.Xˇwv&gxMZ^Okh5FPbϏ -.D&cLE/Tfv :XeBzL=o,WTdnY7O?ް6 C ̌D(1 | V@ IV& \[)^4u=ADZ&Vp@mذݰ2jvTƩ#u*H&%(]" *I<6Hkcϴe~5#!DvI##GˤAifc){F@pcNALhFS%*&e\[IK^hdt6Mt2Մ0Ơm{|gb#\ڑsD: zЩ+pa0ݨxvnTS])@ :# 5i<'3+gKH+)B]R(1ɹO Z2+(,Ǐ&PLqLAW0Rz"(TcuLN3txu*ɝĆJ,a΋!} 寑1Z.IӂrHSPFV 1+ [(lr $$ d! i :ڢWS|U8Y$ZVZfk _Z`(`ms1glDkOiiu{P2QƬ{)kaChv^-io!So{[0Zw@6. f0k^ x]Q Dٽ.(B`̡ M(Aν fqסfsj!sP" ~o/~bǘXSygT8B:!3L J](SYs~ uh-Bv:30;\@) # f -}9~pp2G:&R< l-igLZ3;=zPU})`3F0Tf51e62b7طtukxIj)jF D TuNYpE-rqS _]6u'&Blys;rVtYD/F1]$k0Uδr93 LqyN˳|,!`5Ԕ;q9̝bn3o[SP0 ZЂ 1H:VɅX4so 2-N{;+|hdD&bC0WkG^|-yg^|=yЇ^'}Md|g}͛le ƜSi^}}{_'~|'vZ{GGG_o&n}_'G}ns[%+i[G @@?h˽z5/{17^=H@@ A, Q@{kA*`d+,0.≥{ 6"䀇+B\B&lB'|B(T#$<"|*A0c(iб[6P"x*5` &-'랥b h=S( DADB,DC?+L_r @R7cX04٩` x @b8T3s3;L7= Z@4D\E]E(LZE5r Ȁ @PJ PKl5O9p,@bCcr*# `;Gt cDM8\BL;M P ǜ80^LH\Hl kwAGhL@4ȂtHI,I^Hs gChk;=IIIII ʜ> P6G7(7& JJ޻3D/T`' aQh,XCʝEA  KX,|%T˵L(J|I Ӹ8P؄M(THI&&CI+@KȐKT8 hGƘ`&J| \h9 h͒@W P WhƘ(DL DK:_%PRRY1$ۊEi MPOЄOP$M"OAnYd"6 M,èOP5PUP 6x +D1 N$ 1Y8QXP ؀ä6D&0' ͂$pGs;'_iυxO˅\I̛pOgO R.)R-Tbthd*i.5m79=0%@ fD>aS{q;eWQHF83(*2XK!!J+U'T[_<9 -+ ӳaR4˄L@M*EUǂCѥVeMFGȍ X6id6!sŬO:-E"}K3kMSW{eTauE9l LUa9 ݓ*(}lTi"E)WDR-U 8Y4(YG MH]9"":zpU'ոHZ <(cUIemVTgƚ}lSȄNK8  s(tI[Nwm[׆ |;W-\Qۻ[b3ĵYLKU D#=! Jk3 Y 283]3ַC1juMYSfuHpڧM/-MfMR [ We׭ɸ^eèP&h>xެ|F͜ZH{eMhWR8]rQ) 8=YUE :R<}KUYH -U5%^q !ZYٟMEEzZƘLhZ:"H^N2`y CC_`WE5XYJOJ ){=˨X @`#O(U MycB-&YQŌ4EIbU >M IdJd(d8= H@lG`dOeˈc#WGH@<H>ޏ:ι$nbc>Y'ZM$|fhfifjfk&BLYEmf]nf>fB?NW12Lf(2A{g|g}g~kgh~~.h>hNh^hnh~hhhhA%&ҹhC.0e"<,SJ|ii@e/Dg)xg*SjIui>jNj+g=gRiATz}G5H%k&k>kNٞƏNE8D h+0l Ŝ>lNlckvj;L뭸j06B(@ p86c4F8 ݐpg~m؎mYQufZ妖hJpzsʮ5&(@*، 8X k oZ זmfm:˂ m F.PQNl6N0.o*A.pGk?fsLd 0O );@: 6T, ,0*B8?pqdnZa0,չry>q&A#PdC3/ Pp5@s s8I>ۍ~lˆXk(`,`?r)^iFXhoh@sݫtIwѹtLOsN],熺>[#>#Ё)HEt[uOYf9co!jC2R}m`#Ey-^sxw:{dzsgvvؼJ|J+1lRL*i|rŚY 3(ѝ@oJ|``Rj*u*ժVbͪu+׮^ +v,ٲfϢ kq)Ӷnu E h=c:NZ4E"-mi?-z4ҦONڷEaSF opCiŽw':ģ>'g93禞WcϮ};޿5vx *t\OՍYr٥_Nb i Fj@KX`EvI'R'mibbz鄑Ij2^>SRQi9ܙst\攜r1uZEYdr԰xjrivR2l^!)FFdfd[冧o(|X@ОHSaU+ 3 0w K\0y6<c\'k@m@2ǰ 񒌲;,٢mrDqC؁tL\CAs[so+QkvpB1gJ=M0 tXpmMbiݵ35ry/kiZvoFrE 'eTDۖ}d /+8\A~{o䪫@ƽ!wp)'qCWaNi* 4Լ lWFVV}Vȓ_ I!о o󋈾@aӏU߿I}kDdD# \wTZY%`` 0*+ ! Q@Mp:b{fiTiLX77*I%"WsB6ɢ0 X`@2 8sV΁qxs1j @V!ZeB b'M7!* 9@5"2V9HRZcr.qSIcrE1#R\eDI&_Hjɀ#xA_CJV3,*cq#@U̘ȜHe=̠g31D"D8Fs @P"Hs" ?{FE Kte3 ,| i8CR*9Dd;va-'M9R43ᔸB22,Ve&BzAJ*:M"$|=)ICQ1BǓa0:Ԍ? S:Dy ]!#$ OAKWTvgpKs ,c74\_kي=4lS~J:!Y6 'miK^62҄RQf[[ۮÊ&ZBkce\A+."ͪ6=tW *[?}ť<4/@I֮7k/VXK6asB;ztopsS^cKF\Wa֔a0y*iO{?30*Y'> Ĥ!+Xno#jTY]TZdHՖOɑ?)F2!܅00H `3Td@Orͨ`B.?_{%PJ]5NAsK$+Y>'v^n88\z1Tj<ծ"={Bsbqn˵pqt<,vgӻf:1,@̣vD+ Ț&[,̺͛axo6?` PTLF)#sRxX7oZ>c$T@AxlpF>8zMbD^dS:SBeT%Z0N@VjVreWzWeW*VeVYZe[j%MUFNd} %7ʢQ"SJ`fa&$ Vec:cBfdJ&\B\]V!ifr_, ahfi! 5-jfkkfllfmmf[0nfooi pgq#Ugr*r2gs:g5gJtRguZubgvjvrgwzwgxxgyyzg{{g||g}}ҧz~gZg(} (~h{Rg~*BhJ({2脚g'^(AZ!jhw:(?fCNhZ!vhN!Qf**.d6$^iR*ꩉƪ*#fF:Cjb***^aڪf*kpiB^j*kfh)v⫸BkrkVgJ+v*,J*)i>l*PkȊl~Ȓcɾ'ʊʲ)Ng 6l^~wެw* mgB@:BmJRmZmbmjrmzׂm؊ؒmٚ٢mڪڲmۺ­mmn n"n*2n:BnJRnZbnj;PK7)SPK**A$OEBPS/img/chap5_err_handling_002.gif.GIF87a\,.4\^tdf|TRd ,.<\ZlLN\LJ\lj46DDBTtvTVl$",̴̤DFT $ LRd$"$LNd<>LTVd<:L42<$&,lrdbt|zdb|DBL촺伾伾TZl|~$ln,*4<:Dtr  $&4ln4Jd|~|䌎Դtvt̼TRTdbd̔LJL\^\<>;t=}W7\59EH@k88_/ TIPpx '5A 8M.48PH01 ' ; Pe၄/0  R&H9A@AA}%8*#d@1Pt) P󑠁 Yn*}ߊEi'H^u, $F"y7H@~fyCIYP ) yi0AıȢ@)8ĥ:TAĢ$%/` LpbJC,q͖@ Mqb ׭ikADy`m@/h@50z&q@P @ dP%!q/{B+A @ 1SdI'<%jA6&q'o\su0$, &0P&Q1P,P`П, %0 -7&=uS T5  l v@$6/f6c.  P@'R>p 9^Rj9k4Ļ4Yx0@J@I* CIl3Ԁ/:e* &i>1-ae:ʒ c-?.<7OQq& @*LE8 CBM-s JnƩ(J)NQʄiuFA#EcM 3$ }_-XGPHgy@k'yILFzHJbV{ &: D&aSOŤgBIH9)4`[ $H0*L`)000^b_ Z%iA }%OA02u6o&'2<2%Jrd,Al )IZd &!aM+ #JЂ$H4 $D)H*Mt. NY/di5HTx*@<`HBD"<_{*) 2/K[ x75@F@EYTPBnYwNv<X }bg3Z*V;\0> `$7N (h(Q;@>Vw~@)V@HOҗ;PԧN[XϺַ{`N $eOpNOotO;x'OSǏ3sf ћv)=Wz}1#.۾+wOO|O~ǕΏ>/ߞ>/_O?ѯ/;ϿXG ؀ÀXAQzpV3f&!84)KQ (R%;WJADbi1A/&QKN34AG8E`#:DUKP0!&=能C0 02M(TDqbHfgix&R8okhcW<Ӆ^n'0Ep,9r2(?0`H"80@cEr.`Ȉl3Ch%a_8fc‘8E8'Ƃ%1(M3<`EvDF')K0@a&Ė#)8H/Hr((%/3`h+6@(P$%.$D .3*f#F,S0B%31,)I# x y#(Y; q,2-@$i4)i*ɒW,X;Ո"bCY;u-'i¡,Q#vo ;kqQ)$a#㱕p= {"9FJVs*bR'Ti6hGpU s&8'QȘb5$q[)17y =QyֈɛY;' c iy60\H15E;6DA)!B,jVY;کh y ps-^& X0)cX R3qJ8O Z ZIY; 3:С+(y؜4*5Р7ʡ&m\9χ]S"Q٢Z;`ʥ7bM'չ>׳a 'MryWt1j!JR(\SaG}DDS٣X8S2w ZJz/xЭ * ZJzGߪN8zJz**z8ge6{1\X/1z{HaUmX43T)4tw" "%{E:8x2;5[;,*в=K&H*ք%r`_ $۴s6r"⩰8?)V1E{F{i[e? D  JƢwDK8PDv}Kq ɹR̉&DX8!殦[8zLV)!{S/D+{eQMi+|K%52x%%Q9XK{ {ث*;}6R7F/ġK}ЛmTM2'wĂAőG Jenwx'鸎'TjXG8Ȍc%yܻdA`~ *c7swƎ|a\)C`#E )ȧX0;/;6@^zeTڋ}C 3*2k_^; V-!,+asʎ$o*~n4:1ٛdXlkXmNt+2=ƒ2?+4A#l*^~(+*֓h=:n,Qu_]l|>p./}:o9>_BA?FOG(Lo(٠ff 0bŌƋVpx h6v/s5dBM 5Alhm"`ैQ3l' LP]|I73|wd?ه*>rcH z0 jA+H0H" V(hV,`^%"7.p,h &HJШ2(<Ҧ \0nLr&,I',@}4 " ,$zI̍Hr`4& @ %&"RPB E49Nd,ơ45K<Ѧ@X'>Cm +{rQE+4MR7g'owH :bhs3m]0 j DHby/2+_įR0_w֥.#x9 ."Qh$ѭb Ȅ=lҸH#A,CA Ahvצz[Q7 x 3 0Q͔,O"t/"J4 XaxA}l#[c ▆xG\v# 8:!%pH$*dpↅxbH&DJkbIQGLȈ(Ӊ,hn!@ -DKsB5JS 9̫d0\ d a<`A n䛰C@ NЀ'Ȍ@'@ NxS4&ӰSj%"ʶ4HBVZ/Ae` ЦL@Td 2u Z ̂g&]&Sa'3p V 4&[,D}V YYƒi^3"Y `A( V) F@ O%+ٶ9@gcbԂ5Q #҅ /u5J[Kma V/J kZWuJ31xE":MD$lH,F,lE|G?tF$F2CG-BA(-H6AЃ܂5`EĆG:ȃBHZ4 a\Ȗ|ɘ)-0p@ D2 GĂK4Dž0A@` HI>(- 1pK;`=0)aAF˞t`J̌-J4J<ˎA=89 G7X@80;؂EE0@)24 /:FDˍlŶ|J0P6X5]E<  8?A;؃O DC$A<1 ՌG܌Ǜ#D7;tK@xQ=5>8770"DM D-R:]&=JBӬA5@Q{Eb VD)Xd܂;Fbԃx΂F[HAUuWC.5H 23L]A5`85\05;@H8EtK_MFCUՍ-ANUVWEm@VaAmU\ABHwHbD T4<dT:URQa}ҤDž<ŋXC8h؄$K<D] WS46NpTAAz /`uTB`tYZ$Y']X l\1Ib$N? 0U7d2?)x1J%OdtHdE=,LMNf@ƿQ&eI^RFe-K1LWXVdPEV]v>[\2a&> \&e>_~?]kei=gv?,8Υmnꩶ>飆.h[6>kV붆Dv~k뺮^@l&l:Fl'>fƆlPl`*x_! 0H! حK^N씺{b 1 aR.m8R f*H `%x|.  Hp` >V .kCQ`oVF2oP`*8%so>*"-g(h#* x0'Hh (hr]tqr o H!P&  r$71?pqv*$ʮ5:  ` 8ଂu x '6,&)AWqui2C  D/tuYHw tCWK/)'&0`/8`.hNtM%tVq!ꎈ Ȗj @K.8Sypphwq$0t5ppqWw^%uH i6wu0wlO)ZfpD!0()$1N5' #pw hܸ2u lyystNt p$P{/P q0!o p (  `j#;0  C^H{NW{rg{G $q6~8'zqnmWp@B,w*fx6)}߁ 1n!o?OW' A&8C}r^Jw|PGo /0@8HoI(`oxG7,H-N8pA01@  ,( ( ,haƔ*Wl%̘2gҬi&Μ:w'Pp C$$xĔ4 ԰Q G0дٴ>!۾Kp (]ٱ ]}UVߦXx{A M3haÁ%;G.m4ԪW.AI+E  \xkA8m en9ҧSn F;Ǔ/Aܙo=.@f?~'' * 6J8!.j!z!!8"%x")"-"18#5;PKW ..PK**AOEBPS/ch_one.htm_ Introducing PHP with Oracle Database

1 Introducing PHP with Oracle Database

PHP is a popular scripting language that can be embedded in HTML, which makes it particularly useful for Web development.

This chapter has the following topics:

Purpose

This document is a tutorial that shows you how to use PHP to connect to Oracle Database, and demonstrates how to use PHP to access and modify data.

Overview of the Sample Application

This document guides you through the development of a sample Human Resources (HR) application for a fictitious company called AnyCo Corp. For this introduction to the PHP language no framework or abstraction layer is used. However, PHP frameworks are becoming popular and they should be evaluated when building any large application.

The application manages departmental and employee data stored in the DEPARTMENTS and EMPLOYEES tables in the HR schema provided with Oracle Database. See Oracle Database Sample Schemas for information about this schema.

The complete sample application:

  • Establishes a connection to the database using the PHP OCI8 extension

  • Queries the database for departmental and employee data

  • Displays and navigates through the data

  • Shows how to insert, update, and delete employee records

  • Handles data exceptions

  • Uploads and displays employee photographs

Figure 1-1 shows the relationship among the files developed for this application.

Figure 1-1 Components of the Sample HR Application

Description of Figure 1-1 follows
Description of "Figure 1-1 Components of the Sample HR Application"

The sample application files are:

anyco.php This file contains the main logic for the AnyCo application. It contains control logic that determines which page is displayed. It manages session data for navigation. It calls functions in the include files anyco_cn.inc, anyco_db.inc, and anyco_ui.inc.
anyco_ui.inc This file contains the functions used to present data and forms in an HTML page.
anyco_cn.inc This file contains definitions for database connection information, the database user name, password, and database connection identifier.
anyco_db.inc This file contains the database logic to create database connections, execute queries, and execute data manipulation statements.
anyco_im.php This file contains logic to retrieve an image from a database column and send it to a Web browser for display as a JPEG image.
style.css This file contains Cascading Style Sheet (CSS) definitions for various HTML tags generated by the application. It manages the look and feel of the application.

Files with the suffix .inc are PHP code files included in other PHP files.

Files with the suffix .php can be loaded in a Web browser.

You can create and edit the PHP application source files in a text editor or any tool that supports PHP development.

The code for each chapter builds on the files completed in the previous chapter.

Resources

The following Oracle Technology Network Web sites provide additional information you may find useful.

PKNPK**AOEBPS/ch_two.htm]C Getting Started

2 Getting Started

This chapter explains how to install and test Oracle Database and PHP environment. It has the following topics:

What You Need

To install your Oracle Database and PHP environment, you need:

  • Oracle Database Server which includes the sample data for this tutorial

  • Oracle Database Client libraries are included with the Oracle Database software or can be installed using Oracle Instant Client

  • Apache HTTP Server which is typically already installed on Linux computers

  • PHP - PHP Hypertext Preprocessor

  • A text editor for editing PHP code. A code editor such as Oracle JDeveloper with the optional PHP Extension can also be used.

Installing Oracle Database

You should install Oracle Database Server on your computer. The sample data used in this tutorial is installed by default. It is the HR component of the Sample Schemas.

Throughout this tutorial Oracle SQL Developer is the graphical user interface used to perform Database tasks. Oracle SQL Developer is a free graphical tool for database development.


See Also:


Unlocking the HR User

The PHP application connects to the database as the HR user. You may need to unlock the HR account as a user with DBA privileges. To unlock the HR user:

  1. Open SQL Developer and open a connection to your Oracle database.

  2. Login to your Oracle database as system.

  3. Open SQL Worksheet or SQL*Plus and run the following SQL statement:

    alter user hr account unlock;
    
    Description of chap2_unlock.gif follows
    Description of the illustration chap2_unlock.gif

For further information about unlocking an Oracle Database account, see Chapter 6, "Managing Users and Security," in the Oracle Database 2 Day DBA guide.


See Also:


Installing Apache HTTP Server

You should install Apache before you install PHP. Apache is typically installed by default on Linux computers. See Testing the Apache Installation on Linux before downloading the Apache software.

Perform the following steps to obtain Apache HTTP Server for Windows or Linux:

  1. Enter the following URL in your Web browser:

    http://httpd.apache.org/download.cgi
    
  2. For Windows, click the apache_2.2.12-win32-x86-no_ssl.msi. For Linux, click httpd-2.2.12.tar.bz2.

  3. Save the downloaded file in a temporary directory, such as c:\tmp on Windows or \tmp on Linux.

Installing Apache on Windows

This section describes how to install Apache HTTP Server on Windows.

The file name and extraction directory are based on the current version. Throughout this procedure, ensure you use the directory name for the version you are installing.

You must be the administrator user to install Apache.

To install Apache, double-click the file and follow the wizards.

The default installation directory is likely to be C:\Program Files\Apache Group. This is the directory that is assumed for the tutorial exercises. If you install to a different directory, you need to note the directory so you can change the path used in the tutorials.

Starting and Stopping Apache on Windows

You can use the Start menu option to start Apache. This opens a console window showing any error messages. Error messages may also be written to C:\Program Files\Apache Group\Apache2\logs\error.log.

You can also use the ApacheMonitor utility to start Apache. It will appear as an icon in your System Tray, or navigate to the Apache bin directory and double click ApacheMonitor.exe. In a default installation, Apache bin is located at c:\Program Files\Apache Group\Apache2\bin.

You can also use the Windows Services to start Apache. You access Windows Services from the Windows Start menu at Start > Control Panel > Administrative Tools > Services. Select the Standard tab. Right click the Apache2 HTTP Server and then select Restart

If you have errors, double check your httpd.conf and php.ini files.

Testing the Apache Installation on Windows

To test the Apache HTTP Server installation:

  1. Start your Web browser on the computer on which you installed Apache.

  2. Enter the following URL:

    http://localhost/
    

    Your Web browser will display a page similar to the following:

    Description of chap2_test_install_013.gif follows
    Description of the illustration chap2_test_install_013.gif

    If this page does not appear check your Apache configuration. Common problems are that Apache is not running, or that it is listening on a non-default port.

Installing Apache on Linux

This section describes how to install Apache HTTP Server on Linux.

The file name and extraction directory are based on the current version. Throughout this procedure, ensure you use the directory name for the version you are installing.

Apache is typically already installed on Linux. If you find it is not installed after Testing the Apache Installation on Linux, perform the following steps to install the Apache HTTP Server:

  1. Go to the directory where you downloaded the httpd-2.2.12.tar.bz2 file.

  2. Log in as the root user and execute these commands:

    # tar -jxvf httpd-2.2.12.tar.bz2
    # cd httpd-2.2.12
    # export ORACLE_HOME=/usr/lib/oracle/app/oracle/product/10.2.0/server
    # ./configure \
            --prefix=/usr/local/apache \
            --enable-module=so  \
    # make
    # make install
    

    The option --enable-module=so allows PHP to be compiled as a Dynamic Shared Object (DSO). The --prefix= option sets the Apache installation directory used by the command make install

Starting and Stopping Apache on Linux

You use the apachectl script to start and stop Apache.

Start Apache with the apachectl script:

# /usr/local/apache/bin/apachectl start

Stop Apache with the apachectl script:

# /usr/local/apache/bin/apachectl stop

When you start Apache, you must have ORACLE_HOME defined. Any other required Oracle environment variables must be set before Apache starts too. These are the same variables set by the $ORACLE_HOME/bin/oracle_env.sh or the /usr/local/bin/oraenv scripts.

For convenience, you could create a script to start Apache as follows:

#!/bin/sh
ORACLE_HOME=/usr/lib/oracle/app/oracle/product/10.2.0/server
export ORACLE_HOME
echo "Oracle Home: $ORACLE_HOME"
echo Starting Apache
/usr/local/apache/bin/apachectl start

Testing the Apache Installation on Linux

To test the Apache HTTP Server installation:

  1. Start your Web browser on the host on which you installed Apache, and enter the following URL:

    http://localhost/
    

    Your Web browser will display a page similar to the following:

    Description of chap2_install_001.gif follows
    Description of the illustration chap2_install_001.gif

    If this page does not appear, check your Apache configuration. Common problems are that Apache is not running, or that it is listening on a non default port.

  2. In the default Apache HTTP Server configuration file, set up a public virtual directory as public_html for accessing your PHP files. Use your preferred editor to open the Apache configuration file /etc/httpd/conf/httpd.conf (the directory may be different in your installation of Linux), and remove the pound sign (#) at the start of the following line:

        UserDir public_html
    

    In this example, your Apache httpd.conf file contains the following lines:

    <IfModule mod_userdir.c>
        #
        # UserDir is disabled by default since it can confirm the presence
        # of a username on the system (depending on home directory
        # permissions).
        #
        #UserDir disable
    
        #
        # To enable requests to /~user/ to serve the user's public_html
        # directory, remove the "UserDir disable" line above, and uncomment
        # the following line instead:
        #
        UserDir public_html
    </IfModule>
    

    This enables the Web browser to make an HTTP request using a registered user on the system and to serve files from the $HOME/public_html directory of the user. For example:

    http://localhost/~user/
    
  3. To use the new Apache configuration file, in a command window, restart Apache by entering the following commands:

    su -
    Password: <enter your su (root) password>
    apachectl restart
    
    Description of chap2_install_002.gif follows
    Description of the illustration chap2_install_002.gif

    If the Apache HTTP Server does not start, check the error log files to determine the cause. It may be a configuration error.

  4. In the command window, log in (not root) and create a public_html subdirectory in the $HOME directory with the following command:

    mkdir $HOME/public_html
    
    Description of chap2_install_003.gif follows
    Description of the illustration chap2_install_003.gif

Installing PHP

Perform the following steps to obtain PHP for Windows or Linux:

  1. Enter the following URL in your Web browser:

    http://www.php.net/downloads.php
    
  2. For Windows, click the 5.2.10 zip package under Windows Binaries. For Linux, click php-5.2.10.tar.bz2 under Complete Source Code.

  3. Save the downloaded file in a temporary directory, such as c:\tmp on Windows or \tmp on Linux.

Installing PHP on Windows

This section describes how to install PHP on Windows.

The file name and extraction directory are based on the current version. Throughout this procedure, ensure you use the directory name for the version you are installing.

You must be the administrator user to install PHP. To install PHP, perform the following steps:

  1. In Windows Explorer, go to the directory where you downloaded the PHP 5.2.10 zip file.

  2. Unzip the PHP package to a directory called C:\php-5.2.10

  3. Copy php.ini-recommended to C:\Program Files\Apache Group\Apache2\conf\php.ini

  4. Edit php.ini to make the following changes:

    • Change extension_dir to C:\php-5.2.10\ext, which is the directory containing php_oci8.dll and the other PHP extensions.

    • Remove the semicolon from the beginning of the line

      extension=php oci8.dll

    • Set the PHP directive, display_errors, to On. For testing it is helpful to see any problems in your code.

  5. Edit the file httpd.conf and add the following lines. Make sure you use forward slashes '/' and not back slashes '\':

            #
            # This will load the PHP module into Apache
            #
            LoadModule php5_module c:/php-5.2.10/php5apache2.dll
     
            #
            # This next section will call PHP for .php, .phtml, and .phps files
            #
            AddType application/x-httpd-php .php
            AddType application/x-httpd-php .phtml
            AddType application/x-httpd-php-source .phps
     
            #
            # This is the directory containing php.ini
            #
            PHPIniDir "C:/Program Files/Apache Group/Apache2/conf"
    
  6. Restart the Apache Server so that you can test your PHP installation.

    You can use the Start menu option to start Apache. This opens a console window showing any error messages. Error messages may also be written to C:\Program Files\Apache Group\Apache2\logs\error.log.

    You can also use the ApacheMonitor utility to start Apache. It will appear as an icon in your System Tray, or navigate to the Apache bin directory and double click ApacheMonitor.exe. In a default installation, Apache bin is located at c:\Program Files\Apache Group\Apache2\bin.

    You can also use the Windows Services to start Apache. You access Windows Services from the Windows Start menu at Start > Control Panel > Administrative Tools > Services. Select the Standard tab. Right click the Apache2 HTTP Server and then select Restart

    If you have errors, double check your httpd.conf and php.ini files.

Installing PHP on Linux

This section describes how to install PHP on Linux.

The file name and extraction directory are based on the current version. Throughout this procedure, ensure you use the directory name for the version you are installing.

Perform the following steps to install PHP:

  1. Go to the directory where you downloaded the php-5.2.10.tar.bz2 file.

  2. Log in as the root user and execute these commands:

    # tar -jxvf php-5.2.10.tar.bz2
    # cd php-5.2.10
    # export ORACLE_HOME=/usr/lib/oracle/app/oracle/product/10.2.0/server
    # ./configure \
            --with-oci8=$ORACLE_HOME \
            --with-apxs2=/usr/local/apache/bin/apxs \
            --with-config-file-path=/usr/local/apache/conf \
            --enable-sigchild
    # make
    # make install
    

    Check the value for ORACLE_HOME to ensure it reflects your Oracle version and installation.

    If you are behind a firewall, you may need to set the environment variable http_proxy to your proxy server before running make install. This enables PHP's PEAR components to be installed.

  3. Copy PHP's supplied initialization file:

    # cp php.ini-recommended /usr/local/apache/conf/php.ini
    

    For testing it is helpful to edit php.ini and set the PHP directive, display_errors, to On so you can see any problems in your code.

  4. Edit Apache's configuration file /usr/local/apache/conf/httpd.conf and add the following lines:

    #
    # This next section will call PHP for .php, .phtml, and .phps files
    #
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .phtml
    AddType application/x-httpd-php-source .phps
    
    #
    # This is the directory containing php.ini
    #
    PHPIniDir "/usr/local/apache/conf"
    

    If a LoadModule line was not inserted by the PHP install, add it with:

    LoadModule php5_module modules/libphp5.so
    
  5. Restart the Apache Server to test your PHP installation with the following:

    # /usr/local/apache/bin/apachectl start
    

    If there are errors, they will display on your screen. They may also be written to /usr/local/apache/logs/error_log. If you have problems, double check your httpd.conf and php.ini files.

Testing the PHP Installation

To test the PHP installation:

  1. Create a subdirectory called chap2. To create a directory for your application files, and to change to the newly created directory, enter the following commands in a command window:

    On Windows:

    mkdir "c:\program files\Apache Group\Apache2\htdocs\chap2"
    cd c:\program files\Apache Group\Apache2\htdocs\chap2
    

    On Linux:

    mkdir $HOME/public_html/chap2
    cd $HOME/public_html/chap2
    

    If you create files in a different location, you must change the steps for file editing and execution to match your working directory name and URL.

  2. Create a file called hello.php that contains the following HTML text:

    <?php
      echo "Hello, world!";
    ?>
    
  3. Open a Web browser and enter the following URL in your browser:

    On Windows:

    http://localhost/chap2/hello.php
    

    On Linux:

    http://localhost/~<username>/chap2/hello.php
    

    The line "Hello, world!" appears in the browser.

    Description of chap2_hello_001.gif follows
    Description of the illustration chap2_hello_001.gif

PK ]]PK**A$OEBPS/img_text/chap6_hrgrantproc.htmT Description of the illustration chap6_hrgrantproc.gif

chap6_hrgrantproc.gif shows the SQL Worksheet in SQL Developer. The Enter SQL Statement pane contains the statement:

grant create procedure to hr;

The Results pane contains the message:

grant create succeeded.
PKPK**A)OEBPS/img_text/chap4_enhance_dept_001.htmz Description of the illustration chap4_enhance_dept_001.gif

chap4_enhance_dept_001.gif shows a Web page with the title, Department. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of 2 rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 4, J. Whalen, United States of America.

Under the data, there are two buttons labelled, < Previous and Next>.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-03, and the time, 10:56:55 on the left side, and Any Co. on the right side.

PKgPK**A$OEBPS/img_text/chap7_loadimg_020.htm@ Description of the illustration chap7_loadimg_020.gif

chap7_loadimg_020.gif shows a Web form with the title, Insert New Employee. Immediately underneath is a horizontal line to separate the header from the body of the form. Then there is a table of eight rows of two columns comprising the form labels and entry fields. The field labels in the left column are:

Department ID, First Name, Last Name, Hiredate, Job, Salary, Commission (%), Photo.

The entry fields in the second column contain the values:

10, Chris, Jones, 11-OCT-05, Marketing Manager, 9000, 0, null

There is a Browse button on the right side of the Photo entry field. The mouse cursor is pointing at the Browse button.

Under the fields, there are two buttons labelled, Save and Cancel.

Immediately underneath is a horizontal line to separate the body of the form and the footer. The footer shows the date, 2005-10-11, and the time, 12:32:04 on the left side, and Any Co. on the right side.

PKڻE@PK**A-OEBPS/img_text/chap6_stored_proc_test_002.htm! Description of the illustration chap6_stored_proc_test_002.gif

chap6_stored_proc_test_002.gif shows a Web page with the title, Employees: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of seven columns. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%), Remuneration.

The data row contains the following data:

unchecked radio button, 200, J. Whalen, 17-Sep-87, 4,400.00, 0, 52,800.00.

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 22:14:31 on the left side, and Any Co. on the right side.

PKA#$PK**A$OEBPS/img_text/chap7_loadimg_007.htm: Description of the illustration chap7_loadimg_007.gif

chap7_loadimg_007.gif shows a Web form with the title, Insert New Employee. Immediately underneath is a horizontal line to separate the header from the body of the form. Then there is a table of eight rows of two columns comprising the form labels and entry fields. The field labels in the left column are:

Department ID, First Name, Last Name, Hiredate, Job, Salary, Commission (%), Photo.

The entry fields in the second column contain the values:

10, Glenn, Stokol, 11-OCT-05, Programmer, 8000, 0, null

There is a Browse button on the right side of the Photo entry field. The mouse cursor is pointing at the Browse button.

Under the fields, there are two buttons labelled, Save and Cancel.

Immediately underneath is a horizontal line to separate the body of the form and the footer. The footer shows the date, 2005-10-11, and the time, 11:21:05 on the left side, and Any Co. on the right side.

PK;?:PK**A&OEBPS/img_text/chap6_refcursor_005.htmd Description of the illustration chap6_refcursor_005.gif

chap6_refcursor_005.gif shows a Web page with the title, Department: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 1, J. Whalen, United States of America.

Under the data, there are three buttons labelled, Previous, Next, and Show Employees.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 23:27:47 on the left side, and Any Co. on the right side.

PKV8"PK**A%OEBPS/img_text/chap6_hrcreatebody.htm Description of the illustration chap6_hrcreatebody.gif

cchap6_hrreatebody.gif shows the SQL Worksheet in SQL Developer.

The Enter SQL Statement pane contains the statements

CREATE OR REPLACE PACKAGE BODY cv_types AS
  PROCEDURE get_employees(deptid in number,
                          employees in out empinfotyp)
  IS
  BEGIN
    OPEN employees FOR
      SELECT employee_id,
        substr(first_name,1,1) || '. '|| last_name as employee_name,
        hire_date,
        to_char(salary, '999G999D99') as salary,

The Results pane contains the message

Package Body Compiled.
PK"PK**A$OEBPS/img_text/chap2_install_003.htm Description of the illustration chap2_install_003.gif

chap2_install_003.gif shows a terminal window. It shows the command described in Step 4 entered in the terminal.

PKTlPK**A%OEBPS/img_text/chap5_test_emp_009.htm0 Description of the illustration chap5_test_emp_009.gif

chap5_test_emp_009.gif shows the bottom of a Web page. There is a table of one row of six columns.

The data row contains the following data:

checked radio button, 248, J. Bond, 04-OCT-05, 7,000.00, 0

Under the data, there are three buttons labelled, Modify, Delete, and Insert new employee. The mouse cursor is pointing at the Delete button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-04, and the time, 13:47:38 on the left side, and Any Co. on the right side.

PK?2PK**A%OEBPS/img_text/chap5_test_emp_010.htm` Description of the illustration chap5_test_emp_010.gif

chap5_test_emp_010.gif shows the bottom of a Web page. There is a table of one row of six columns.

The data row contains the following data:

unchecked radio button, 206, W. Gietz, 07-JUN-94, 8,300.00, 0

Under the data, there are three buttons labelled, Modify, Delete, and Insert new employee.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-04, and the time, 13:52:19 on the left side, and Any Co. on the right side.

PK2PK**A%OEBPS/img_text/chap5_test_emp_004.htm# Description of the illustration chap5_test_emp_004.gif

chap5_test_emp_004.gif shows a Web form with the title, Insert New Employee. Immediately underneath is a horizontal line to separate the header from the body of the form. Then there is a table of 7 rows of two columns comprising the form labels and entry fields. The field labels in the left column are:

Department ID, First Name, Last Name, Hiredate, Job, Salary, Commission (%).

The entry fields in the second column contain the values:

10, James, Bond, 04-OCT-05, Programmer, 7000, 0

Under the fields, there are two buttons labelled, Save, and Cancel. The mouse cursor is pointing at the Save button.

Immediately underneath is a horizontal line to separate the body of the form and the footer. The footer shows the date, 2005-10-04, and the time, 13:31:27 on the left side, and Any Co. on the right side.

PK>KPK**A&OEBPS/img_text/chap5_basic_emp_001.htmc Description of the illustration chap5_basic_emp_001.gif

chap4_basic_emp_001.gif shows a Web page with the title, Employees. Immediately underneath is a horizontal line to separate the header from the body of the page. Then there is a table of 9 rows of five columns. The column headings are:

Employee ID, Employee Name, Hiredate, Salary, Commission (%).

The data rows contain the following data:

100, S. King, 17-JUN-87, 24,000.00, 0

101, N. Kochhar, 21-SEP-89, 17,000.00, 0

102, L. De Haan, 13-JAN-93, 17,000.00, 0

103, A. Hunold, 03-JAN-90, 9,000.00, 0

104, B. Ernst, 21-MAY-91, 6,000.00, 0

105, D. Austin, 25-JUN-97, 4,800.00, 0

106, V. Pataballa, 05-FEB-98, 4,800.00, 0

107, D. Lorentz, 07-FEB-99, 4,200.00, 0

108, N. Greenberg, 17-AUG-94, 12,000.00, 0

PKQK#PK**A,OEBPS/img_text/chap5_combine_deptemp_001.htmO Description of the illustration chap5_combine_deptemp_001.gif

chap5_combine_deptemp_001.gif shows a Web page with the title, Department: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 1, J. Whalen, United States of America.

Under the data, there are three buttons labelled, < Previous, Next>, and Show Employees.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 14:20:14 on the left side, and Any Co. on the right side.

PKToӵPK**A)OEBPS/img_text/chap5_err_handling_005.htm Description of the illustration chap5_err_handling_005.gif

chap5_err_handling_005.gif shows a Web form with the title, Insert New Employee. Immediately underneath is a horizontal line to separate the header from the body of the form. Then there is a table of 7 rows of two columns comprising the form labels and entry fields. The field labels in the left column are:

Department ID, First Name, Last Name, Hiredate, Job, Salary, Commission (%).

The entry fields in the second column contain the values:

99, New, Person, 10-OCT-05, Accountant, 1000, 0

Under the fields, there are two buttons labelled, Save, and Cancel. The mouse cursor is pointing at the Save button.

Immediately underneath is a horizontal line to separate the body of the form and the footer. The footer shows the date, 2005-10-10, and the time, 16:38:06 on the left side, and Any Co. on the right side.

PKBPK**A$OEBPS/img_text/chap7_loadimg_009.htm[ Description of the illustration chap7_loadimg_009.gif

chap7_loadimg_009.gif shows a Web page with the title, Employees: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of three rows of eight columns. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%), Remuneration, Photograph.

The data rows contain the following data:

unchecked radio button, 200, J. Whalen, 17-Sep-87, 4,400.00, 0, 52,800.00, Employee photo (text).

unchecked radio button, 209, G. Stokol, 11-Sep-05, 8,000.00, 0, 96,000.00, Employee photo (image).

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-11, and the time, 12:27:16 on the left side, and Any Co. on the right side.

PK`[PK**A,OEBPS/img_text/chap5_combine_deptemp_002.htm> Description of the illustration chap5_combine_deptemp_002.gif

chap5_combine_deptemp_002.gif shows a Web page with the title, Employees: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of six columns. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%).

The data row contains the following data:

unchecked radio button, 200, J. Whalen, 17-Sep-87, 4,400.00, 0.

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 14:24:45 on the left side, and Any Co. on the right side.

PKѴoPK**A%OEBPS/img_text/chap5_test_emp_001.htm3 Description of the illustration chap5_test_emp_001.gif

chap5_test_emp_001.gif shows a Web page with the title, Employees. Immediately underneath is a horizontal line to separate the header from the body of the page. Then there is a table of 9 rows of six columns. The column headings are:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%).

The data rows contain the following data:

unchecked radio button, 100, S. King, 17-JUN-87, 24,000.00, 0

unchecked radio button, 101, N. Kochhar, 21-SEP-89, 17,000.00, 0

unchecked radio button, 102, L. De Haan, 13-JAN-93, 17,000.00, 0

unchecked radio button, 103, A. Hunold, 03-JAN-90, 9,000.00, 0

unchecked radio button, 104, B. Ernst, 21-MAY-91, 6,000.00, 0

unchecked radio button, 105, D. Austin, 25-JUN-97, 4,800.00, 0

unchecked radio button, 106, V. Pataballa, 05-FEB-98, 4,800.00, 0

unchecked radio button, 107, D. Lorentz, 07-FEB-99, 4,200.00, 0

PK83PK**A*OEBPS/img_text/chap4_db_nagivation_003.htmV Description of the illustration chap4_db_nagivation_003.gif

chap4_db_nagivation_003.gif shows a Web page with the title, Department. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of 2 rows of four columns. The first row contains the column headings:

Department ID, Department Name, Manager ID, Location ID.

The data row contains the following data:

10, Administration, 200, 1700.

Under the data, there are two buttons labelled, < Previous and Next>.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-02, and the time, 22:59:29 on the left side, and Any Co. on the right side.

PKox[VPK**A$OEBPS/img_text/chap7_loadimg_008.htmi Description of the illustration chap7_loadimg_008.gif

chap7_loadimg_008.gif shows a file upload dialog. The right side shows that you are viewing the contents of the public_html directory. The file newemp.jpg is selected. The mouse cursor is pointing at the Open button.

PKtؔ2niPK**A%OEBPS/img_text/chap5_test_emp_007.htmF Description of the illustration chap5_test_emp_007.gif

chap5_test_emp_007.gif shows a Web form with the title, Modify Employee. Immediately underneath is a horizontal line to separate the header from the body of the form. Then there is a table of 6 rows of two columns comprising the form labels and entry fields. The field labels in the left column are:

Employee ID, First Name, Last Name, Email Address, Salary, Commission (%).

The first entry field in the second column, the value for Employee ID, is not editable and had the value 248.

The remaining five entry fields in the second column contain the values:

James, Bond, JBOND, 7100, 0

Under the fields, there are two buttons labelled, Save, and Cancel. The mouse cursor is pointing at the Save button.

Immediately underneath is a horizontal line to separate the body of the form and the footer. The footer shows the date, 2005-10-04, and the time, 13:45:04 on the left side, and Any Co. on the right side.

PK[AKFPK**A$OEBPS/img_text/chap7_loadimg_005.htmh Description of the illustration chap7_loadimg_005.gif

chap7_loadimg_005.gif shows a Web page with the title, Department: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 1, J. Whalen, United States of America.

Under the data, there are three buttons labelled, Previous, Next, and Show Employees.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-11, and the time, 11:18:29 on the left side, and Any Co. on the right side.

PKE}YPK**A)OEBPS/img_text/chap5_err_handling_006.htm{ Description of the illustration chap5_err_handling_006.gif

chap5_err_handling_006.gif shows a Web page with the title, Department 99 does not yet exist. Immediately underneath is a horizontal line to separate the header from the body of the page. Then there is the following error message:

Error at line 86 of /home/gstokol/public_html/chap5/anyco_db.inc

ORA-02291: Integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found

Under the error message, there is a button labelled, Return to Departments. The mouse cursor is pointing at the Return to Departments button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 16:39:15 on the left side, and Any Co. on the right side.

PK}ܹPK**A#OEBPS/img_text/chap1_phpapp_001.htm Description of the illustration chap1_phpapp_001.gif

chap1_phpapp_001.gif shows six text boxes in two columns of three. The boxes represent the files in the tutorial application. They contain a description of the file they represent. Arrow-headed lines connect the boxes.

From the top, the boxes in the left column are:

anyco.php

A starter page that provides a form handler (controller) to manage page requests.

anyco_ui.inc

The user interface logic: an include file that contains the PHP code to display HTML forms and database data in HTML tables. A line points to anyco.php. Another line points to style.css. A third broken line points to anyco_im.php.

style.css

A Cascading Style Sheet (CSS) file to manage HTML display.

From the top, the boxes in the right column are:

anyco_cn.inc

An include file that defines default database connection information. This includes the user name, password and database connection identifier. A line points to anyco.php.

anyco_db.inc

The model logic: an include file that contains the database logic to create database connections, and to execute queries and data manipulation statements. A line points to anyco.php.

anyco_im.php

A PHP script referenced in an <img> tag to get an image from a database column for a specified employee and send it to the browser for display.

PKE]PK**AOEBPS/img_text/chap2_unlock.htm Description of the illustration chap2_unlock.gif

chap2_unlock.gif shows SQL Worksheet in SQL Developer.

The Enter SQL Statement pane contains the text:

alter user hr account unlock;

PK3#PK**A)OEBPS/img_text/chap5_err_handling_002.htm& Description of the illustration chap5_err_handling_002.gif

chap5_err_handling_002.gif shows a Web page with the title, Department: Accounting. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

110, Accounting, 2, S. Higgins, United States of America.

Under the data, there are three buttons labelled, < Previous, Next>, and Show Employees. The mouse cursor is pointing at the Next> button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 16:34:07 on the left side, and Any Co. on the right side.

PK,]PK**A"OEBPS/img_text/chap6_hrcalcrem.htmY Description of the illustration chap6_hrcalcrem.gif

chap6_hrcalcrem.gif shows the SQL Worksheet in SQL Developer.

The Enter SQL Statement pane contains the statements

create or replace function calc_remuneration(
  salary IN number, commission_pct IN number) return number is
begin
  return ((salary * 12) + (salary * 12 * nvl(commission_pct,0)));
end;

The Results pane contains the message:

function calc_remuneration(  Compiled.
PK^YPK**A)OEBPS/img_text/chap5_err_handling_004.htm Description of the illustration chap5_err_handling_004.gif

chap5_err_handling_004.gif shows a Web page with the title, Employees: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of six columns. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%).

The data row contains the following data:

unchecked radio button, 200, J. Whalen, 17-Sep-87, 4,400.00, 0.

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments. The mouse cursor is pointing at the Insert new employee button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 16:37:54 on the left side, and Any Co. on the right side.

PKDPK**A%OEBPS/img_text/chap5_test_emp_003.htm Description of the illustration chap5_test_emp_003.gif

chap5_test_emp_003.gif shows the bottom of a Web page. There is a table of one row of six columns.

The data row contains the following data:

unchecked radio button, 206, W. Gietz, 07-JUN-94, 8,300.00, 0

Under the data, there are three buttons labelled, Modify, Delete, and Insert new employee. The mouse cursor is pointing at the Insert new employee button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-04, and the time, 13:28:34 on the left side, and Any Co. on the right side.

PK? ,PK**A*OEBPS/img_text/chap4_db_nagivation_002.htmu Description of the illustration chap4_db_nagivation_002.gif

chap4_db_nagivation_002.gif shows a Web page with the title, Department. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of 2 rows of four columns. The first row contains the column headings:

Department ID, Department Name, Manager ID, Location ID.

The data row contains the following data:

20, Marketing, 201, 1800.

Under the data, there are two buttons labelled, < Previous and Next>. The mouse cursor is pointing to the <Previous button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-02, and the time, 22:59:10 on the left side, and Any Co. on the right side.

PK4PK**A)OEBPS/img_text/chap5_err_handling_001.htm Description of the illustration chap5_err_handling_001.gif

chap5_err_handling_001.gif shows a Web page with the title, Department: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 1, J. Whalen, United States of America.

Under the data, there are three buttons labelled, < Previous, Next>, and Show Employees. The mouse cursor is pointing at the Next> button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 16:33:20 on the left side, and Any Co. on the right side.

PKPK**A&OEBPS/img_text/chap6_refcursor_007.htm" Description of the illustration chap6_refcursor_007.gif

chap6_refcursor_007.gif shows a Web page with the title, Employees: Marketing. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of three rows of seven columns. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%), Remuneration.

The data rows contains the following data:

unchecked radio button, 201, M. Hartstein, 17-Feb-96, 13,000.00, 0, 156,000.00.

unchecked radio button, 202, P. Fay, 17-Aug-97, 6,000.00, 0, 72,000.00.

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 23:30:32 on the left side, and Any Co. on the right side.

PK'"PK**A%OEBPS/img_text/chap6_hrcreatepack.htmM Description of the illustration chap6_hrcreatepack.gif

chap6_hrcreatepack.gif shows SQL Worksheet in SQL Developer.

The Enter SQL Statement pane contains the statements

CREATE OR REPLACE PACKAGE cv_types AS
  TYPE empinfotyp IS REF CURSOR;
  PROCEDURE get_employees(deptid in number,
                          employees in out empinfotyp);
END cv_types;

The Results pane contains the message

Package cv_types Compiled.
PK-C%RMPK**A$OEBPS/img_text/chap7_loadimg_018.htm- Description of the illustration chap7_loadimg_018.gif

chap7_loadimg_018.gif shows a Web page with the title, Department: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 2, J. Whalen, United States of America.

Under the data, there are three buttons labelled, Previous, Next, and Show Employees. The mouse cursor is pointing at the Show Employees button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-11, and the time, 12:29:43 on the left side, and Any Co. on the right side.

PKVd'PK**A$OEBPS/img_text/chap7_loadimg_022.htm> Description of the illustration chap7_loadimg_022.gif

chap7_loadimg_022.gif shows a Web form with the title, Insert New Employee. Immediately underneath is a horizontal line to separate the header from the body of the form. Then there is a table of eight rows of two columns comprising the form labels and entry fields. The field labels in the left column are:

Department ID, First Name, Last Name, Hiredate, Job, Salary, Commission (%), Photo.

The entry fields in the second column contain the values:

10, Chris, Jones, 11-OCT-05, Marketing Manager, 9000, 0, null

There is a Browse button on the right side of the Photo entry field.

Under the fields, there are two buttons labelled, Save and Cancel. The mouse cursor is pointing at the Save button.

Immediately underneath is a horizontal line to separate the body of the form and the footer. The footer shows the date, 2005-10-11, and the time, 12:32:04 on the left side, and Any Co. on the right side.

PKJC>PK**A'OEBPS/img_text/chap4_db_connect_002.htm Description of the illustration chap4_db_connect_002.gif

chap4_db_connect_002.gif shows a Web page with the title, Departments. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of 2 rows of four columns. The first row contains the column headings:

Department ID, Department Name, Manager ID, Location ID.

The data row contains the following data:

80, Sales, 145, 2500.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-09-30, and the time, 11:50:00 on the left side, and Any Co. on the right side.

PKrqPK**A$OEBPS/img_text/chap2_install_002.htm Description of the illustration chap2_install_002.gif

chap2_install_002.gif shows a terminal window. It shows the commands described in Step 3 entered in the terminal. The cursor is on a new line.

PKN$PK**A%OEBPS/img_text/chap5_test_emp_006.htm Description of the illustration chap5_test_emp_006.gif

chap5_test_emp_006.gif shows the bottom of a Web page. There is a table of 2 rows of six columns.

The data rows contain the following data:

unchecked radio button, 206, W. Gietz, 07-JUN-94, 8,300.00, 0

checked radio button, 248, J. Bond, 04-OCT-05, 7,000.00, 0

Under the data, there are three buttons labelled, Modify, Delete, and Insert new employee. The mouse cursor is pointing at the Modify button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-04, and the time, 13:40:42 on the left side, and Any Co. on the right side.

PKW]PK**A&OEBPS/img_text/chap6_refcursor_006.htm} Description of the illustration chap6_refcursor_006.gif

chap6_refcursor_006.gif shows a Web page with the title, Department: Marketing. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

20, Marketing, 2, M. Hartstein, Canada.

Under the data, there are three buttons labelled, Previous, Next, and Show Employees.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 23:28:36 on the left side, and Any Co. on the right side.

PK PK**A"OEBPS/img_text/chap2_hello_001.htm) Description of the illustration chap2_hello_001.gif

chap2_hello_001.gif shows a browser screen with the text, Hello, world!

PK)PK**A'OEBPS/img_text/chap3_db_connect_001.htmy Description of the illustration chap3_db_connect_001.gif

chap3_db_connect_001.gif shows a Web page with the title, Departments. Immediately underneath is a horizontal line. Then there is a table of 8 rows of four columns. The columns have no headings. They contain the following data:

10, Administration, 200, 1700.

20, Marketing, 201, 1800.

30, Purchasing, 114, 1700.

40, Human Resources, 203, 2400.

50, Shipping, 121, 1500.

60, IT, 103, 1400.

70, Public Relations, 204, 2700.

80, Sales, 145, 2500.

PK7PK**A)OEBPS/img_text/chap3_test_install_005.htm Description of the illustration chap3_test_install_005.gif

chap3_test_install_005.gif shows a Web page with the title, Departments. Immediately underneath are two horizontal lines to separate the body of the page from the header and the footer. The body has no content.

The footer of the page shows the date, 2005-09-27, and the time, 12:55:02 on the left side, and Any Co. on the right side.

PK+ʵPK**A%OEBPS/img_text/chap5_test_emp_005.htm Description of the illustration chap5_test_emp_005.gif

chap5_test_emp_005.gif shows the bottom of a Web page. There is a table of two rows of six columns.

The data rows contain the following data:

unchecked radio button, 206, W. Gietz, 07-JUN-94, 8,300.00, 0

unchecked radio button, 248, J. Bond, 04-OCT-05, 7,000.00, 0

Under the data, there are three buttons labelled, Modify, Delete, and Insert new employee.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-04, and the time, 13:40:42 on the left side, and Any Co. on the right side.

PKx#PK**A$OEBPS/img_text/chap7_loadimg_021.htmi Description of the illustration chap7_loadimg_021.gif

chap7_loadimg_021.gif shows a file upload dialog. The right side shows that you are viewing the contents of the public_html directory. The file newemp.jpg is selected. The mouse cursor is pointing at the Open button.

PK Description of the illustration chap4_db_nagivation_001.gif

chap4_db_nagivation_001.gif shows a Web page with the title, Department. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of 2 rows of four columns. The first row contains the column headings:

Department ID, Department Name, Manager ID, Location ID.

The data row contains the following data:

10, Administration, 200, 1700.

Under the data, there are two buttons labelled, < Previous and Next>. The mouse cursor is pointing to the Next> button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-02, and the time, 22:58:19 on the left side, and Any Co. on the right side.

PKpPK**A$OEBPS/img_text/chap7_loadimg_023.htm Description of the illustration chap7_loadimg_023.gif

chap7_loadimg_023.gif shows a Web page with the title, Employees: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of four rows of eight columns. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%), Remuneration, Photograph.

The data rows contain the following data:

unchecked radio button, 200, J. Whalen, 17-Sep-87, 4,400.00, 0, 52,800.00, Employee photo (text).

unchecked radio button, 209, G. Stokol, 11-Sep-05, 8,000.00, 0, 96,000.00, Employee photo (image).

unchecked radio button, 210, C. Jones, 11-Oct-05, 9,000.00, 0, 108,000.00, Employee photo (thumbnail image).

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments.

PKePK**A)OEBPS/img_text/chap2_test_install_013.htm} Description of the illustration chap2_test_install_013.gif

chap2_install_013.gif shows the Apache Test Page in a browser. A paragraph at the top of the page contains the text:

If you can see this, it means that the installation of the Apache HTTP Server software on this system was successful. You may now add content to this directory and replace this page.

Immediately under this paragraph, separated by a horizontal line is the heading, "Seeing this instead of the website you expected?" Then there is the following paragraph:

This page is here because the site administrator has changed the configuration of this web server. Please contact the person responsible for maintaining this server with questions. The Apache Software Foundation, which wrote the web server software this site administrator is using, has nothing to do with maintaining this site and cannot help resolve configuration issues.

Immediately under this paragraph, separated by another horizontal line are the following paragraphs:

The Apache documentation has been included with this distrubution. (documentation is a hyperlink)

You are free to use the image below on an Apache-powered web server. Thanks for using Apache!

Then follows a logo image containing the words:

Powered by Apache.

PKԥPK**A&OEBPS/img_text/chap7_hrcreatetable.htm Description of the illustration chap7_hrcreatetable.gif

chap7_createtable.gif shows SQL Worksheet in SQL Developer.

The Enter SQL Statement pane contains the statement

CREATE TABLE employee_photos(
  employee_id        NUMBER,
  employee_thumbnail BLOB);

The Results pane contains the message

CREATE TABLE Succeeded.
PKSiPK**A-OEBPS/img_text/chap6_stored_proc_test_001.htmV Description of the illustration chap6_stored_proc_test_001.gif

chap6_stored_proc_test_001.gif shows a Web page with the title, Department: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 1, J. Whalen, United States of America.

Under the data, there are three buttons labelled, Previous, Next, and Show Employees.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 22:12:54 on the left side, and Any Co. on the right side.

PKPK**A)OEBPS/img_text/chap5_err_handling_003.htm Description of the illustration chap5_err_handling_003.gif

chap5_err_handling_003.gif shows a Web page with the title, Department: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of five columns. The first row contains the column headings:

Department ID, Department Name, Number of Employees, Manager Name, Location.

The data row contains the following data:

10, Administration, 1, J. Whalen, United States of America.

Under the data, there are three buttons labelled, < Previous, Next>, and Show Employees. The mouse cursor is pointing at the Show Employees button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-10, and the time, 16:37:29 on the left side, and Any Co. on the right side.

PK,cPK**A$OEBPS/img_text/chap7_loadimg_019.htmo Description of the illustration chap7_loadimg_019.gif

chap7_loadimg_019.gif shows a Web page with the title, Employees: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of three rows of seven. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%), Remuneration.

The data row contains the following data:

unchecked radio button, 200, J. Whalen, 17-Sep-87, 4,400.00, 0, 52,800.00, Employee photo (text).

unchecked radio button, 209, G. Stokol, 11-Sep-05, 8,000.00, 0, 96,000.00.

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments. The mouse cursor is pointing at the Insert new employee button.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-11, and the time, 12:30:46 on the left side, and Any Co. on the right side.

PK: toPK**A'OEBPS/img_text/chap4_db_connect_003.htm Description of the illustration chap4_db_connect_003.gif

chap4_db_connect_003.gif shows a Web page with the title, Departments. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of 2 rows of four columns. The first row contains the column headings:

Department ID, Department Name, Manager ID, Location ID.

The data row contains the following data:

80, Sales, 145, 2500.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-09-30, and the time, 14:42:50 on the left side, and Any Co. on the right side.

PKl,PK**A%OEBPS/img_text/chap5_test_emp_002.htm Description of the illustration chap5_test_emp_002.gif

chap5_test_emp_002.gif shows the bottom of a Web page. There is a table of 6 rows of six columns.

The data rows contain the following data:

unchecked radio button, 201, M. Hartstein, 17-FEB-96, 13,000.00, 0

unchecked radio button, 202, P. Fay, 17-Aug-97, 8,000.00, 0

unchecked radio button, 203, S. Mavris, 07-JUN-94, 6,500.00, 0

unchecked radio button, 204, H. Baer, 07-JUN-94, 10,000.00, 0

unchecked radio button, 205, S. Higgins, 07-JUN-94, 12,000.00, 0

unchecked radio button, 206, W. Gietz, 07-JUN-94, 8,300.00, 0

Under the data, there are three buttons labelled, Modify, Delete, and Insert new employee.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-04, and the time, 13:28:34 on the left side, and Any Co. on the right side.

PK]PK**A%OEBPS/img_text/chap5_test_emp_008.htma Description of the illustration chap5_test_emp_008.gif

chap5_test_emp_008.gif shows the bottom of a Web page. There is a table of one row of six columns.

The data row contains the following data:

unchecked radio button, 248, J. Bond, 04-OCT-05, 7,000.00, 0

Under the data, there are three buttons labelled, Modify, Delete, and Insert new employee.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-04, and the time, 13:47:38 on the left side, and Any Co. on the right side.

PKPK**A$OEBPS/img_text/chap7_loadimg_006.htm Description of the illustration chap7_loadimg_006.gif

chap7_loadimg_006.gif shows a Web page with the title, Employees: Administration. Immediately underneath is a horizontal line to separate the header and the body of the page. Then there is a table of two rows of eight columns. The first row contains the column headings:

no heading, Employee ID, Employee Name, Hiredate, Salary, Commission (%), Remuneration, Photograph.

The data row contains the following data:

unchecked radio button, 200, J. Whalen, 17-Sep-87, 4,400.00, 0, 52,800.00, Employee photo (text).

Under the data, there are four buttons labelled, Modify, Delete, Insert new employee, and Return to Departments.

Immediately underneath is a horizontal line to separate the body of the page and the footer. The footer shows the date, 2005-10-11, and the time, 11:19:31 on the left side, and Any Co. on the right side.

PK i%PK**A$OEBPS/img_text/chap2_install_001.htm Description of the illustration chap2_install_001.gif

chap2_install_001.gif shows the Red Hat Enterprise Linux Test Page in a browser. The page is titled, Red Hat Enterprise Linux Test Page. Immediately underneath the title is the paragraph:

This page is used to test the proper operation of the Apache HTTP server after it has been installed. If you can read this page, it means that the Apache HTTP server installed at this site is working properly.

There are general comments about what you can do next under the headings:

  • If you are a member of the general public

  • If you are the website administrator

PK?LPK**A OEBPS/toc.ncx t Oracle® Database 2 Day + PHP Developer's Guide, 11g Release 2 (11.2) Cover Table of Contents Oracle Database 2 Day + PHP Developer's Guide, 11g Release 2 (11.2) Preface Introducing PHP with Oracle Database Getting Started Getting Connected Querying Data Updating Data Executing Stored Procedures and Functions Loading Images Building Global Applications Index Copyright PKR PK**AOEBPS/content.opf^[ Oracle® Database 2 Day + PHP Developer's Guide, 11g Release 2 (11.2) en-US E10811-01 Oracle Corporation Oracle Corporation Oracle® Database 2 Day + PHP Developer's Guide, 11g Release 2 (11.2) 2009-08-03T06:35:19Z Provides a tutorial on how to develop PHP scripts that use the database languages SQL and PL/SQL to access and manipulate Oracle data. PK! c[^[PK**AOEBPS/dcommon/prodbig.gif GIF87a!!!)))111BBBZZZsss{{ZRRcZZ!!1!91)JB9B9)kkcJJB991ssc絽Zcc!!{祽BZc!9B!c{!)c{9{Z{{cZB1)sJk{{Z{kBsZJ91)Z{!{BcsRsBc{9ZZk甽kBkR!BZ9c)JJc{!))BZks{BcR{JsBk9k)Zck!!BZ1k!ZcRBZcZJkBk1Z9c!R!c9kZRZRBZ9{99!R1{99R{1!1)c1J)1B!BJRkk{ƽ絵ތkk絵RRs{{{{JJsssBBkkk!!9ss{{ZZssccJJZZRRccRRZZ))cBBJJ99JJ!!c11991199Z11!c!!))Z!!!1BRck{)!cJBkZRZ,HP)XRÇEZ֬4jJ0 @ "8pYҴESY3CƊ@*U:lY0_0#  5tX1E: C_xޘeKTV%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?l:ϊw "{{-3j3%{sj~2= 7 ~MڅKrHb|P3 r=Ҁ +Ş/$iu7=q2dԂxn⸷9$l]H #WI񯄴;\[ݚD8C3p&0U9^AnK vI+!I8>5(zqj03Y.X ,@85ߛ8>pq8=} \xmm常8` $Q@$v7zwp]ɝA GX;y_]覮O&4 SPtY.X),@84U=7Vuv K4,$g{@<+uqtiGw3; I@ORմn5MBp%8'ƫ%u6uBJrHRN2@ϸ J(9i[[m͹۞v8ހ=e>#P3qky6yFH@ᯀ^|+jCq"4AC: f2qh( |vk~-bүCK=[  FUs׮xW6+𾝮ZS$n2@ 3qlQYWcag]E7dt&iͻ\iz KYU pJ3=\jnqko{Z[Ov-eF9`0=G\yi}ŭim=춎if@NXr ( +'u/x:]ދ{f3W/ F:y@WmCۿG@Ex_xWY𮑪\j{e ċ O uWkLrT| 8_ْHQ^?: *O꽂 +C'C?IQG<+=f o1PI"uV@Hl\otF E݌ BdTN `(((((((((((PTz k㯆 jlI#TQ-$sONC^8 5w(x&eyȹ_Cdv$w Yͨ#,䳞B(cY8 :~.jo|rYp&oD,"p,bCTsĸ&~ jzR"[YGl Q98n@;ĺ:]9ƽhOxgXHuVn7cxub;Qa9*?i>姙?ɜs|?~z, hɅaC12c;3g? h|Jdg5@C5|F_$|<7¾d]Iɔ$0GUp&];_u"iZ{27v:+4:[zޛ}:v%`$)' gPYsZyn#i1A@R,ɍ)ey>y⻿zMZN HR8XN 2 O\H9&|^E4(E(F@Pi~sQ`~xq zƧyצ-Q\|yBI=_] z[ln[np38%MBTxl,"#n$%n$o_*q$~xoULInTty d1 i0Fy OŞ5ƺ-k)-U,7y/|CO -I1$r@eTfo <!~$kz\w,qq| Ff8#$2ǃ`ğR"6+(YFv4Ԏ0'{Xi wB,b>#xmGKtQn,o\2[aP<@$/EXQ1h_mዘ!VWc|9,F {Q|o{oiKx NB 0AӠ MK[^$y?g1w7|o? 7QiyepȖe"7JKݎv`6cn.>'m]f/_[A('8l+.8An _KUQ}Q(ɐXob_ 8Ғ7и#y=zPkRM'ž$EZr2D[>cGVٺ`Ix;ʥ؆wrk(K6[ª;$H~-<SYH/Ʊ]k0A!O$ExƁ{|G*k[9]3A0RA@@.@HWI5K[=klv#*3[jg'+/M.5ӪhnV 2Bq}jPmCۿG]?xkV)k$](_<+k_[xFxd9/VF( 1@Cuo-QRHPF AbqyVOIuZMK^O dH}v݆8]gk-6U}/M9|*d@<=F.w}jMCV.V晍r&r4j7B 5{46'[e_ig q6^U8U`\OSx"ZǃM)wjPo_=/Fyb)_hUP  990*uZA_[bFNBs.`XcM< eJۯF@2t|5v|gĒ}[k/g[ׁ0G z\xn[4$ +é $19"^_ >ӭ9ؑK RNҪ;}k z_j #Aeo%ċ dQ^W ;^E|O:URR j\[,1d].8t'Sƿ vCap pI*?x+ۉРO<5`_PJm>?xz YA{~|%=GO¶?!Bf('u^@>iw+<3/4M?PRqZe1ywc~w{=z?;IaXTxN AyV?-G?5oYrF,ΪF{dgVïk%|m#\Ԑ(6 W*H''rYPEPEPEPEPEPEPEPEPEPEPEP?w?e]O羅nn3ҹR_?^ۏ9^ESt7Fk}/OGk ĥHPpϰQ@>\K;v09v̊ 9UQnE [ͶM @Z4y F'&G=? (?YaA{j;&L$OUl#<ÿ GQCҾu$FK&PHñT~UQ@߉|Aq1OA#I Fsu5Ngm4{. V r):aEgbi`}%dٷvw}3?q7z=>d@| 3o+-+9 ^Ai$ 6ZI8r[o#8jjUiw6w X8 AW(t"gydAS׸Z4 h_~E֩/xkc1 rkbxSirh"c=>7>G+|bgk#n巸9 I]H#W?7<]w3"NxUp{]OMtݭ>r+!@>®QEc75?(SxPя\)//@9 ;u/=+RDagDe ;G]EP~i#ukXϷ̋{&r\)//@0xsȫVRۈi.8z ܢFڞ= Ff"tݱ'd@*7YFlVQ1TEwq)io|  mAuK2Ⱥ%v_,s$]clQEwyZ3"ɻkrօ^Lӭ,mbHaME(֬QEcx[FEg߫Daq`FvGlQEcx[FEg߫Daq`FvG$:; rv&T^<8 cQEQEQEQEQEQEQEQEQEQEQEQEnH|:w%L BݍhA+:7???6޽<^^64!u)Lpj4i'@K ەO$B}㭍Ji%MF2,dv-|P9RKG̎ŧP ;iEx^WonȪ};>rN[[ݍ`#sW`ʀ,)8 Ey 14O5^'`v Dg>a}oryQ$о7#T2@(j&xy#OvӴP c32g~W> MWZ07q<Ler!nvĜhOSmIxC]mtwəZ$ qųxvz˨DoxR2SL(oct$P** IaY?TUO[־(|M<%z9-S3Uvrř6*Dllb==WxCK< 0kV/bڈ TaH`G9g4R贫k10*v;PQ_8|5gYÐ]6UH .Hry ;o4FUUyrbw\d &Ƞ2 {P ?C9|A K~N~FAd1, W'g>YU5yvPt21PQ^7k${kj|KqK2Ī0Tmc݂1g?9egq,B*Y To%/8l3bM\~ Vݵ/R')S,M()V#G(Y}qx7\˺&6*px8 u+iO 4ieؿs˹$ ۗ8'Ce+k2NFb@|zcoiMIw,Nwč#4J|ՕdT+1V h+V{ui|eU|( u=kr Mw˸<5{><L:*Wpz5E|2wKQ}gSO[,KvF63x( *m{q:c}Ey2BH`7d{7Ɲs-j -3zT!׶W{Nş A`;m㗋5MFUU pet\T+$>ΤpJ{įz!s/596ԬnS@ r <RAEPEPEPEPEPEPEPEPEPEP_§FװW㯇?k\C3#~rLw???j3+Z-ܰfHk(,!ِ"R+&q$ke @yrcrH[?#HI2lqߔFq( ~C-sU]Yb\BeC&<9߇z ;i=^˼qPx7xBLp~]32"@$Xg8QEzGFK绚 n՘1U\ A֏Þ3)8MO 8X+H4c(w#$"NIpp2Oו>ѯ4r'i{y C@배AVSkѾ+HRUԶ`7ҫFA*c ]g ᧈm"R8P!`>xOS|4dyY'?}|IY-cFHpK g? -o_8=ݜEY0 9Fp1^M۬ n wy wXBngz79$X]ZFfH).F72sUoC%Vհ7s Hk+*#*pFy ռG4I#C+ qWwO mA”L8.䞾P?> skRLl三!P0WdUC'C?IWq?V4k.H)n@=B $V};v5 soj"As7B:(aG/޴tB-%%)I(p@ "?:*Ʊ>*Igf @ l#Lo¿ x[FH PRL)#c,ZFaZ0 TUl<5MWH.50Bt @'>_zuͅ~eO ɸzU(xuZmۭ8s0 T՜P@++_9;rΝ$ÎHr\3%WJ Y44 -#-_TiJG82&}p9Pt/ Y]L6/& #scqIp8,^]9lO7` ?$ @Z8 p $D߂ :e=ܓWhYJnvaA2'<xN[=j&F)$,I PK6[ª;$HIaY?TU|V}lXoV0 Uwt*A9x+M6w455ӫ0bUF0|࿇~5? xU|CiwDʑCrh_,Ȅry}?L\m-c4\Xǁ@kßx{i$p8a׆'5鿳,n[jP*-Pu'<z'-{3󭦟HL+SMմfݮ4Br%*8%I⣿2wGk{uۿb8 \ \x_լ7Oo}y+A63l*" tE ×zku{8:@oJ o^^? k5]'h>f4Jikv[)el9Aր;Q6xƏ7߷9ܭq`!}oy"2K؃1xM܁`#8Ox+M6w455ӫ0bUF0q~9>xwyBarP$H‚@߉?>}ڞ`NJJ]!1ǁ?xkV)k<9~gA:,wip7ھX]m fдOiO}+o7n.d82hB((((((((((򿋾%FOKƧĖBDNb.z7;?I;'dyf|yzh(ᯏuw*ykpH`6A$O5PEPEy^jS~Ѿ'.OLGѦc6~U3~fֽR ( ( ( co6Q<3&7#dr2 V( DӼ96gw}'O&( (+TuOifnx9ݼ;0 JppW s]ҵ"< $~P.Fs@p2I+4=f:`nYS$ꭂ@`r@Q\kJ&}/5|3@GԴ?XZ7ww%+,@K0Œ/pvMs~)OVEK}J}|;3}@=")|]rwQ q0:(NM߉4doeG+ɹCW<'}q7C̺5,p8$ ( +㯈Kw~H+y+l c~:񷀼Q 曩JcTM 8jXnܪy$V~^Oe42Gu <\__k^ѵ$m{B6wG!X'dO@EPEPEPEPEPEP\~xGWX uw ݜvuP/^H =&vy]8#g$Cv=]EPEPEPEPEPEPEPEPEPEPEPn\;*T. \>o[\֗VF=Y,>VRQK? "]Ywu6-NMx$ATT?8㞃ᇋOQ\08A+:7O|5~5o[&Md"'B.f21#%FGce{Nş AW>կ}?ixz¿}u E#4r8z ]SY|zǻR1}x{c9>s9/k?=OƑB]2Aۛ9`(g'dQWW?O5 `?$](<R?InQtyZ襠(_xzm"|D/"!/ƀ0g{g3| ݿ廻!_,XI'P@?JwWݟ}n}~' پO(~lls)d((((((((((((((((((a_JC[Gwim^3ڻ (?P/Zn6y>1VS|x_9^6NUGCنOAp״6?ĽfOGc+', dfxKW7wZ[$#88,rO(?N/>(j4?-~F<Uhx_9^6NUGCنOAp״6?ĽfOGc+', dfxKW7wZ[$#88,rO(/g}o =[ún3k>cԣX6͜9-suK [jàY`!rX'nFk(n_X|>\Z%6,bc 'r# SXF>#nm2$Euឋ yuNT!arzd S}/Z͵Fҗ;Ur e)d@½INѬl.伞8;eP rHSשP|&g%VLoxd3 оxDtdX}dƄ~qHq1ڽbmL|!}}jyvȯr3޴4-3fya۷~ 83ТSO[!\ *_t  Exr%*_}!#U #4 & ֩3|b]L ]t b+Da&R_2lEٱZ`aC)/яmvUkS r(-iPE Vv_{z GLt\2s!F A#葡JY r|AA,hB}q|B`du }00(䡆<pb,G+oB C0p/x$…– ]7 @2HFc ) @AD \0 LHG',(A` `@SC)_" PH`}Y+_|1.K8pAKMA @?3҄$[JPA)+NH I ,@8G0/@R T,`pF8Ѓ)$^$ DDTDlA@ s;PKPK**AOEBPS/dcommon/darbbook.cssPKPK**A!OEBPS/dcommon/O_signature_clr.JPG"(JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?O '~MQ$Vz;OlJi8L%\]UFjޙ%ԯS;rA]5ފ<׈]j7Ouyq$z'TQuw7Ŀ KX߁M2=S'TQt?.5w'97;~pq=" ~k?`'9q6 E|yayM^Om'fkC&<5x' ?A?Zx'jß={=SßM gVC.5+Hd֪xc^)Җufz{Cީ|D Vkznq|+Xa+{50rx{|OG.OϞ~f/ xxX[2H )c+#jpUOZYX\=SG ߨC|K@;_߆'e?LT?]:?>w ڔ`D^So~xo[Ӡ3i7B:Q8 Vc-ďoi:FM292~y_*_闱YN\Fr=xZ3鳎OwW_QEzW~c]REeaSM}}Hӏ4&.E]u=gMѠ+mF`rNn$w9gMa꺢nTuhf2Xv>އ a(Û6߭?<=>z'TQuw7Ŀ KX߁M2=S'TQt?.5Kko\.8S$TOX߀Gw?Zx汴X)C7~.i6(Щ=+4{mGӭ¸-]&'t_kV*I<1)4thtIsqpQJ+> \m^[aJ5)ny:4o&QEnyAEPEEss 72,PDۢ׃K W{Wjr+wگ iM/;pd?~&?@;7E4gv8 $l'z'TQuw7Ŀ Gֱ=ɿ&G?. iR(5W*$|?w᫼gkmIbHe/_t>tg%y.l}N5[]+Mk0ĠeHdPrsst'UiC,y8`V%9ZIia|ܪvi מYG,o}+kk{YbyIeb*sAtի82zWoEK5z*o-eo;n(P u-I)4Š(HQEQEQEQEhz(X/Đ?}Bk˩ ݏrk0]4>8XzV? }6$}d^F>nU K ?Bտk_9׾x~w'ߞ  uDŽtL ؈5c-E/"|_Oo.IH쐍=i*Iw5(ںw?t5s.)+tQ2dUt5Vĺ.jZ"@IRrZƅY4ߡ_;}ų(KyQf1Aǵt?sZg+?F5_oQR&Dg߿]6FuRD u>ڿxl7?IT8'shj^=.=J1rj1Wl$얲cPx;E,p$֟ˏkw qg"45(ǛkV/=+ũ)bYl~K#˝J_כ5&\F'I#8/|wʾ_Xj Q:os^T1.M_|TO.;?_  jF?g N 8nA2F%i =qW,G=5OU u8]Rq?wr'˻S+۾.ܼ 87Q^elo/T*?L|ۚ<%<,/v_OKs B5f/29n0=zqQq(ª=VX@*J(э(f5qJN_EVǞQEOuoѕOuoa5}gO?:߂8Wא|cڽ~]N&O( (<]>͠@VQ=^~U ̴m&\խ5i:}|}r~9՝f}_>'vVֲ$~^f30^in{\_.O F8to}?${φ|#x^#^n~w=~k~?'KRtO.㌡h![3Zu*ٷճ(ԟ]z_/W1(ԟ]v~g|Yq<ז0 ; b8֮s,w9\?uEyStKaª@\,)) (!EPEPEPEPEPzѧts{v>C/"N6`d*J2gGӧWqBq_1ZuΓ\X]r?=Ey88Mp&pKtO-"wR2 K^-Z< \c>V0^@O7x2WFjs<׻kZ(<Т(OFw/6$1[:ޯԯ#q~4|,LVPem=@=YLUxӃV}AUbcUB.Ds5*kٸAeG>PJxt͝ b88?*$~@ׯD VkraiJs}Q.20x&mXξ,Z]“A-J#`+-E/"<]\a'tZGy.(|lދ~gMK OZdxDŽU9T6ϯ^<Ϡt5CZ]].t۫S=s`ڳ%8iVK:nqe+#<.T6U>zWoy3^I {F?J~=G}k)K$$;$de8*G Uӟ4Ocºw}|]4=ݣ\x$ʠms?q^ipw\"ȿPs^Z Q_0GڼU.t}ROM[G#]8wٞ ӫ87}Cgw vHȩBM55vof =A_٭`Ygx[6 P,5}>蚊(0(+?>+?> k|TuXq6_ +szk :u_ Z߶Ak_U}Jc2u/1[_»ݸG41-bሬ۴}}Eȹפ_c?5gi @cL\L<68hF_Ih>X4K7UТ sMj =J7CKo>Օ5s:߀t ~ηaٿ?|gdL8+gG%o?x`دOqȱwc¨&TW_V_aI=dpG!wu۞սZ1yL50$(l3(:~'ַo A}a3N*[0ǭ HKQV}G@֜$ 9of$ArNqUOgË05#m?D)^_h//5_/<?4}Jį+GkpG4"$ r| >S4Ђ"S 1%R:ȝ 8;PKPz PK**AOEBPS/dcommon/feedback.gif7GIF89a'%(hp|fdx?AN5:dfeDGHɾTdQc`g*6DC\?ؘ||{;=E6JUՄfeA= >@,4`H.|`a (Q 9:&[|ځ,4p Y&BDb,!2@, $wPA'ܠǃ@CO~/d.`I @8ArHx9H75j L 3B/` P#qD*s 3A:3,H70P,R@ p!(F oԥ D;"0 ,6QBRɄHhI@@VDLCk8@NBBL2&pClA?DAk%$`I2 #Q+l7 "=&dL&PRSLIP)PɼirqМ'N8[_}w;PK-PK**AOEBPS/dcommon/booklist.gifGIF89a1޵֥΄kZ{Jk1Rs!BZ)B),@I9Z͓Ca % Dz8Ȁ0FZЌ0P !x8!eL8aWȠFD(~@p+rMS|ӛR$ v "Z:]ZJJEc{*=AP  BiA ']j4$*   & 9q sMiO?jQ = , YFg4.778c&$c%9;PKː5PK**AOEBPS/dcommon/cpyr.htm1 Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2012, Oracle and/or its affiliates. All rights reserved.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Alpha and Beta Draft Documentation Notice

If this document is in prerelease status:

This documentation is in prerelease status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Oracle Logo

PKN61PK**AOEBPS/dcommon/masterix.gif.GIF89a1ޜΌscJk1Rs!Bc1J),@IS@0"1 Ѿb$b08PbL,acr B@(fDn Jx11+\%1 p { display: none; } /* Class Selectors */ .ProductTitle { font-family: sans-serif; } .BookTitle { font-family: sans-serif; } .VersionNumber { font-family: sans-serif; } .PrintDate { font-family: sans-serif; font-size: small; } .PartNumber { font-family: sans-serif; font-size: small; } PKeӺ1,PK**AOEBPS/dcommon/larrow.gif#GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШtpHc`  өb[.64ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPK**AOEBPS/dcommon/index.gifGIF89a1޵ΥΥ{sc{BZs,@IM" AD B0 3.R~[D"0, ]ШpRNC  /& H&[%7TM/`vS+-+ q D go@" 4o'Uxcxcc&k/ qp zUm(UHDDJBGMԃ;PK(PK**AOEBPS/dcommon/bookbig.gif +GIF89a$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9B!& Imported from GIF image: bookbig.gif,$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9BH`\Ȑ:pظа"A6DBH,V@Dڹ'G"v Æ ܥ;n;!;>xAܽ[G.\rQC wr}BŊQ A9ᾑ#5Y0VȒj0l-GqF>ZpM rb ;=.ސW-WѻWo ha!}~ْ ; t 53 :\ 4PcD,0 4*_l0K3-`l.j!c Aa|2L4/1C`@@md;(H*80L0L(h*҇҆o#N84pC (xO@ A)J6rVlF r  fry†$r_pl5xhA+@A=F rGU a 1х4s&H Bdzt x#H%Rr (Ѐ7P`#Rщ'x" #0`@~i `HA'Tk?3!$`-A@1l"P LhʖRG&8A`0DcBH sq@AXB4@&yQhPAppxCQ(rBW00@DP1E?@lP1%T` 0 WB~nQ@;PKGC PK**AOEBPS/dcommon/rarrow.gif/GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШLlԸ NCqWEd)#34vwwpN|0yhX!'+-[F 'n5 H $/14w3% C .90" qF 7&E "D mnB|,c96) I @0BW{ᢦdN p!5"D`0 T 0-]ʜ$;PKJV^PK**AOEBPS/dcommon/mix.gifkGIF89aZZZBBBJJJkkk999sss!!!111cccֽ{{{RRR)))猌ƭ{s{sks!,@@pH,B$ 8 t:<8 *'ntPP DQ@rIBJLNPTVEMOQUWfj^!  hhG H  kCúk_a Ǥ^ h`B BeH mm  #F` I lpǎ,p B J\Y!T\(dǏ!Gdˆ R53ټ R;iʲ)G=@-xn.4Y BuU(*BL0PX v`[D! | >!/;xP` (Jj"M6 ;PK枰pkPK**AOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PK**AOEBPS/dcommon/toc.gifGIF89a1ΥΥ{c{Z{JkJk1Rk,@IK% 0| eJB,K-1i']Bt9dz0&pZ1o'q(؟dQ=3S SZC8db f&3v2@VPsuk2Gsiw`"IzE%< C !.hC IQ 3o?39T ҍ;PKv I PK**AOEBPS/dcommon/topnav.gifGIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)-'KR$&84 SI) XF P8te NRtHPp;Q%Q@'#rR4P fSQ o0MX[) v + `i9gda/&L9i*1$#"%+ ( E' n7Ȇ(,҅(L@(Q$\x 8=6 'נ9tJ&"[Epljt p#ѣHb :f F`A =l|;&9lDP2ncH R `qtp!dȐYH›+?$4mBA9 i@@ ]@ꃤFxAD*^Ŵ#,(ε  $H}F.xf,BD Z;PK1FAPK**AOEBPS/dcommon/bp_layout.css# @charset "utf-8"; /* bp_layout.css Copyright 2007, Oracle and/or its affiliates. All rights reserved. */ body { margin: 0ex; padding: 0ex; } h1 { display: none; } #FOOTER { border-top: #0d4988 solid 10px; background-color: inherit; color: #e4edf3; clear: both; } #FOOTER p { font-size: 80%; margin-top: 0em; margin-left: 1em; } #FOOTER a { background-color: inherit; color: gray; } #LEFTCOLUMN { float: left; width: 50%; } #RIGHTCOLUMN { float: right; width: 50%; clear: right; /* IE hack */ } #LEFTCOLUMN div.portlet { margin-left: 2ex; margin-right: 1ex; } #RIGHTCOLUMN div.portlet { margin-left: 1ex; margin-right: 2ex; } div.portlet { margin: 2ex 1ex; padding-left: 0.5em; padding-right: 0.5em; border: 1px #bcc solid; background-color: #f6f6ff; color: black; } div.portlet h2 { margin-top: 0.5ex; margin-bottom: 0ex; font-size: 110%; } div.portlet p { margin-top: 0ex; } div.portlet ul { list-style-type: none; padding-left: 0em; margin-left: 0em; /* IE Hack */ } div.portlet li { text-align: right; } div.portlet li cite { font-style: normal; float: left; } div.portlet li a { margin: 0px 0.2ex; padding: 0px 0.2ex; font-size: 95%; } #NAME { margin: 0em; padding: 0em; position: relative; top: 0.6ex; left: 10px; width: 80%; } #PRODUCT { font-size: 180%; } #LIBRARY { color: #0b3d73; background: inherit; font-size: 180%; font-family: serif; } #RELEASE { position: absolute; top: 28px; font-size: 80%; font-weight: bold; } #TOOLS { list-style-type: none; position: absolute; top: 1ex; right: 2em; margin: 0em; padding: 0em; background: inherit; color: black; } #TOOLS a { background: inherit; color: black; } #NAV { float: left; width: 96%; margin: 3ex 0em 0ex 0em; padding: 2ex 0em 0ex 4%; /* Avoiding horizontal scroll bars. */ list-style-type: none; background: transparent url(../gifs/nav_bg.gif) repeat-x bottom; } #NAV li { float: left; margin: 0ex 0.1em 0ex 0em; padding: 0ex 0em 0ex 0em; } #NAV li a { display: block; margin: 0em; padding: 3px 0.7em; border-top: 1px solid gray; border-right: 1px solid gray; border-bottom: none; border-left: 1px solid gray; background-color: #a6b3c8; color: #333; } #SUBNAV { float: right; width: 96%; margin: 0ex 0em 0ex 0em; padding: 0.1ex 4% 0.2ex 0em; /* Avoiding horizontal scroll bars. */ list-style-type: none; background-color: #0d4988; color: #e4edf3; } #SUBNAV li { float: right; } #SUBNAV li a { display: block; margin: 0em; padding: 0ex 0.5em; background-color: inherit; color: #e4edf3; } #SIMPLESEARCH { position: absolute; top: 5ex; right: 1em; } #CONTENT { clear: both; } #NAV a:hover, #PORTAL_1 #OVERVIEW a, #PORTAL_2 #OVERVIEW a, #PORTAL_3 #OVERVIEW a, #PORTAL_4 #ADMINISTRATION a, #PORTAL_5 #DEVELOPMENT a, #PORTAL_6 #DEVELOPMENT a, #PORTAL_7 #DEVELOPMENT a, #PORTAL_11 #INSTALLATION a, #PORTAL_15 #ADMINISTRATION a, #PORTAL_16 #ADMINISTRATION a { background-color: #0d4988; color: #e4edf3; padding-bottom: 4px; border-color: gray; } #SUBNAV a:hover, #PORTAL_2 #SEARCH a, #PORTAL_3 #BOOKS a, #PORTAL_6 #WAREHOUSING a, #PORTAL_7 #UNSTRUCTURED a, #PORTAL_15 #INTEGRATION a, #PORTAL_16 #GRID a { position: relative; top: 2px; background-color: white; color: #0a4e89; } PK3( # PK**AOEBPS/dcommon/bookicon.gif:GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ޭ{{ZRRcZZRJJJBB)!!skRB9{sν{skskcZRJ1)!֭ƽ{ZZRccZJJBBB999111)JJ9BB1ZZB!!ﭵBJJ9BB!!))Jk{)1!)BRZJ{BsR!RRJsJ!J{s!JsBkks{RsB{J{c1RBs1ZB{9BJ9JZ!1BJRRs!9R!!9Z9!1)J19JJRk19R1Z)!1B9R1RB!)J!J1R)J119!9J91!9BkksBBJ119BBR!))9!!!JB1JJ!)19BJRZckތ1)1J9B,H*\hp >"p`ƒFF "a"E|ժOC&xCRz OBtX>XE*O>tdqAJ +,WxP!CYpQ HQzDHP)T njJM2ꔀJ2T0d#+I:<жk 'ꤱF AB @@nh Wz' H|-7f\A#yNR5 /PM09u UjćT|q~Yq@&0YZAPa`EzI /$AD Al!AAal 2H@$ PVAB&c*ؠ p @% p-`@b`uBa l&`3Ap8槖X~ vX$Eh`.JhAepA\"Bl, :Hk;PKx[?:PK**AOEBPS/dcommon/conticon.gif^GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ZRR޽{{ssskkkcccZ991ccRZZBBJJZck)19ZcsBJZ19J!k{k)Z1RZs1!B)!J91{k{)J!B!B911)k{cs!1s!9)s!9!B!k)k1c!)Z!R{9BJcckZZcBBJ99B119{{!!)BBRBBZ!))999R99Z!!999c1!9!)19B1)!B9R,  oua\h2SYPa aowwxYi 9SwyyxxyYSd $'^qYȵYvh ч,/?g{н.J5fe{ڶyY#%/}‚e,Z|pAܠ `KYx,ĉ&@iX9|`p ]lR1khٜ'E 6ÅB0J;t X b RP(*MÄ!2cLhPC <0Ⴁ  $4!B 6lHC%<1e H 4p" L`P!/,m*1F`#D0D^!AO@..(``_؅QWK>_*OY0J@pw'tVh;PKp*c^PK**AOEBPS/dcommon/blafdoc.cssL@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.10.7 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; } h2 { font-size: 152%; font-weight: bold; } h3 { font-size: 139%; font-weight: bold; } h4 { font-size: 126%; font-weight: bold; } h5 { font-size: 113%; font-weight: bold; display: inline; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #e00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #e00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKʍPK**AOEBPS/dcommon/rightnav.gif&GIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)- $CҠҀ ! D1 #:aS( c4B0 AC8 ְ9!%MLj Z * ctypJBa H t>#Sb(clhUԂ̗4DztSԙ9ZQҀEPEPEPEPEPEPEPM=iԍP Gii c*yF 1׆@\&o!QY00_rlgV;)DGhCq7~..p&1c:u֫{fI>fJL$}BBP?JRWc<^j+χ5b[hֿ- 5_j?POkeQ^hֿ1L^ H ?Qi?z?+_xɔŪ\썽O]χ>)xxV/s)e6MI7*ߊޛv֗2J,;~E4yi3[nI`Ѱe9@zXF*W +]7QJ$$=&`a۾?]N T䏟'X)Ɣkf:j |>NBWzYx0t!* _KkoTZ?K Gc+UyڹgNuh^iSo5{\ܹ3Yos}.>if FqR5\/TӮ#]HS0DKu{($"2xִ{SBJ8=}Y=.|Tsц2UЫ%.InaegKo z ݎ3ֹxxwM&2S%';+I',kW&-"_¿_ Vq^ܫ6pfT2RV A^6RKetto^[{w\jPZ@ޢN4/XN#\42j\(z'j =~-I#:q[Eh|X:sp* bifp$TspZ-}NM*B-bb&*xUr#*$M|QWY ~p~- fTED6O.#$m+t$˙H"Gk=t9r娮Y? CzE[/*-{c*[w~o_?%ƔxZ:/5𨴟q}/]22p qD\H"K]ZMKR&\C3zĽ[PJm]AS)Ia^km M@dК)fT[ijW*hnu Ͳiw/bkExG£@f?Zu.s0(<`0ֹoxOaDx\zT-^ѧʧ_1+CP/p[w 9~U^[U<[tĽwPv[yzD1W='u$Oeak[^ |Gk2xv#2?¹TkSݕ| rݞ[Vi _Kz*{\c(Ck_܏|?u jVڔ6f t?3nmZ6f%QAjJf9Rq _j7Z-y.pG$Xb]0')[_k;$̭?&"0FOew7 z-cIX岛;$u=\an$ zmrILu uٞ% _1xcUW%dtÀx885Y^gn;}ӭ)場QEQ@Q@Q@Q@Q@Q@!4xPm3w*]b`F_931˜[ן+(> E ly;<;MF-qst+}DH @YKlLmؤciN<|]IU)Lw(8t9FS(=>og<\Z~u_+X1ylsj'eՃ*U3`C!N9Q_WܱhKc93^ua>H ƕGk=8~e#_?{ǀe-[2ٔ7;=&K挑5zsLdx(e8#{1wS+ΝVkXq9>&yஏh$zq^0~/j@:/«Vnce$$uoPp}MC{$-akH@ɫ1O !8R9s5ԦYmϧ'OUṡ5T,!Ԛ+s#1Veo=[)g>#< s)ƽُA^䠮ωFUj(ǩ|N3Jڷ睁ϱuږZYGOTsI<&drav?A^_f׻B$,O__ԿC`it{6>G׈C~&$y؎v1q9Sc1fH[ѽ>,gG'0'@Vw,BO [#>ﱺg5ΒFVD%Yr:O5 Tu+O멃]ی38Ze}R&ѝ_xzc1DXgس;<,_,{ƽY'AS#oF.M#~cBuEx7G+Y)(5q+GCV;qF+CLQ)qEC&6z𿊘z}?&w=+)??&\g{;V??׻xGœdٿ׼-Nc')3K]N)iLTӿCdb7Q^a N sd>Fz[0S^s'Zi 77D}kWus ab~~H(>.fif9,~|Jk;YN3H8Y(t6Q݉k͇_÷Z+2߄&[ +Tr^藺97~c܎=[f1RrBǓ^kEMhxYVm<[џ6| kqbѱ| YA{G8p?\UM7Z66 g1U1igU69 u5Pƪ:VVZC=[@ҹ¨$kSmɳО\vFz~i3^a Osŧυ9Q}_3 όO{/wgoet39 vO2ea;Ύ7$U#?k+Ek&dpzbӱ+TaB0gN{[N7Gי}U7&@?>Fz~E!a@s ?'67XxO*!?qi]֏TQN@tI+\^s8l0)2k!!iW8F$(yOּT.k,/#1:}8uT˾+5=O/`IW G֯b.-<= HOm;~so~hW5+kS8s.zwE| ?4ӿw/K N 9?j(#0UT` Wzw}:_*9m>󑓀F?ELzv=8q:=WgJ`nDr Zе<ֹ](Q@Q@Q@Q@Q@Q@Q@Q@ 'IdC0EYJVcMty_~u+Sw-aO n<[YJgL#6i g5ЖDZ14cʝ!!\/M}/_AYR__>oC? _?7_G#RERW쏞KB}JxGSkǕA pƱơP m]hwB7U$Zq M95"3q1ioATߚ{g.t uu2k=;h#YB= fgS :TdLԃ!44mFK{Hrd^7oz|BVr<{)6AXգV»|>*/hS܏z͆OM=Εq (s|s׊LKQI :9NJ)P+!ʣoAF>+=@I}"x/}۠1aנc¹4emC:>p_xWKX` >R3_S½èųp3޺u3N e یbmͺ<_ mnݮ1Op?Gm)Qb%N585'%Ahs\6yw!"&Ɨ._wk)}GP;Z!#\"< *oƾ\)}N>"լ/~]Lg}pBG X?<zZ#x69S=6) jzx=y9O&>+e!!? ?s~k5Gʏ)?*ce7Ox~k5􇔾Q/e7/Ԑ#3OgNC0] ;_FiRl>Q.g>!%k#ú:Kn'&}?U@\pџPtp)v<{_i}Oվֲ3XIYIx~b<D?(=_JXH=bbi=Oh?_ C_O)}oW쏜? %Ƶ;-RYFi`wۭ{ϖZMtQ$"c_+ԃx1*0b;ԕ݋ESQEQEQEQEQEQEQEQEQEQZ(1F)h1K@XLRE&9P (bf{RӨ&)PEPEPbԴPGKZ(iإbn(:A%S0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKje88PK**AOEBPS/dcommon/help.gif!GIF89a1εֵ֜֜{kZsBc{,@ )sƠTQ$8(4ʔ%ŌCK$A HP`$h8ŒSd+ɡ\ H@%' 6M HO3SJM /:Zi[7 \( R9r ERI%  N=aq   qƦs *q-n/Sqj D XZ;PKއ{&!PK**A OEBPS/toc.htm  Table of Contents

Contents

Title and Copyright Information

Preface

1 Introducing PHP with Oracle Database

2 Getting Started

3 Getting Connected

4 Querying Data

5 Updating Data

6 Executing Stored Procedures and Functions

7 Loading Images

8 Building Global Applications

Index

PKGd#o% PK**AOEBPS/ch_five.htm Updating Data

5 Updating Data

In this chapter, you extend the Anyco HR application with forms that enable you to insert, update, and delete an employee record.

Building the Basic Employees page

In this section, you will extend your application to include a basic employees page.

To display employee records, perform the following tasks:

  1. Create the chap5 directory, copy the application files from chap4, and change to the newly created directory:

    On Windows:

    mkdir c:\program files\Apache Group\Apache2\htdocs\chap5
    cd c:\program files\Apache Group\Apache2\htdocs\chap5
    copy ..\chap4\* .
    

    On Linux:

    mkdir $HOME/public_html/chap5
    cd $HOME/public_html/chap5
    cp ../chap4/* .
    
  2. Edit the anyco.php file. Add a construct_employees() function. This function constructs the employee query, calls the db_do_query() function to execute the query, and prints the results using the ui_print_employees() function:

    function construct_employees()
    {
      $query =
      "SELECT employee_id,
        substr(first_name,1,1) || '.  '|| last_name as employee_name,
        hire_date,
        to_char(salary, '9999G999D99') as salary,
        nvl(commission_pct,0) as commission_pct
       FROM   employees
       ORDER BY employee_id asc";
    
      $conn = db_connect();
      $emp = db_do_query($conn, $query);
    
      ui_print_header('Employees');
      ui_print_employees($emp);
      ui_print_footer(date('Y-m-d H:i:s'));
    }
    

    There is no need to pass a $bindargs parameter to the db_do_query() call because this query does not use bind variables. The db_do_query() declaration will provide a default value of an empty array automatically. PHP allows functions to have variable numbers of parameters.

  3. Edit the anyco.php file. Replace the call to construct_departments() with a call to construct_employees():

    <?php // File: anyco.php
    
    require('anyco_cn.inc');
    require('anyco_db.inc');
    require('anyco_ui.inc');
    
    session_start();
    construct_employees();
    ...
    ?>
    
  4. Edit the anyco_ui.inc file. Implement the presentation of employee data in an HTML table by adding a ui_print_employees() function:

    function ui_print_employees($employeerecords)
    {
      if (!$employeerecords) {
        echo '<p>No Employee found</p>';
      }
      else {
        echo <<<END
      <table>
      <tr>
        <th>Employee<br>ID</th>
        <th>Employee<br>Name</th>
        <th>Hiredate</th>
        <th>Salary</th>
        <th>Commission<br>(%)</th>
      </tr>
    END;
        // Write one row per employee
        foreach ($employeerecords as $emp) {
          echo '<tr>';
          echo '<td align="right">'.
                htmlentities($emp['EMPLOYEE_ID']).'</td>';
          echo '<td>'.htmlentities($emp['EMPLOYEE_NAME']).'</td>';
          echo '<td>'.htmlentities($emp['HIRE_DATE']).'</td>';
          echo '<td align="right">'.
                htmlentities($emp['SALARY']).'</td>';
          echo '<td align="right">'.
                htmlentities($emp['COMMISSION_PCT']).'</td>';
          echo '</tr>';
        }
        echo <<<END
      </table>
    END;
      }
    }
    
  5. Save the changes to the anyco.php and anyco_ui.inc files. Test the result of these changes by entering the following URL in your Web browser:

    On Windows:

    http://localhost/chap5/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap5/anyco.php
    

    Examine the result page, and scroll down to view all the employee records displayed in the page:

    Description of chap5_basic_emp_001.gif follows
    Description of the illustration chap5_basic_emp_001.gif

Extending the Basic Employees Page

In this section, you will extend the basic employees page to include the ability to manipulate employee records.

To enable employee records to be manipulated, perform the following tasks:

  1. Edit the anyco.php file. Replace the construct_employees() call with the form handler control logic to manage the requests for showing, inserting, updating, and deleting employee records:

    <?php // File: anyco.php
    
    require('anyco_cn.inc');
    require('anyco_db.inc');
    require('anyco_ui.inc');
    
    session_start();
    // Start form handler code
    if (isset($_POST['insertemp'])) {
      construct_insert_emp();
    }
    elseif (isset($_POST['saveinsertemp'])) {
      insert_new_emp();
    }
    elseif (isset($_POST['modifyemp'])) {
      construct_modify_emp();
    }
    elseif (isset($_POST['savemodifiedemp'])) {
      modify_emp();
    }
    elseif (isset($_POST['deleteemp'])) {
      delete_emp();
    }
    else {
      construct_employees();
    }
    
    ...
    
  2. Edit the anyco.php file. Add the construct_insert_emp() function:

    function construct_insert_emp()
    {
      $conn = db_connect();
    
      $query = "SELECT job_id, job_title
                FROM jobs
                ORDER BY job_title ASC";
      $jobs = db_do_query($conn, $query,
                          OCI_FETCHSTATEMENT_BY_COLUMN);
    
      $query = "SELECT sysdate FROM dual";
      $date = db_do_query($conn, $query,
                          OCI_FETCHSTATEMENT_BY_COLUMN);
      $emp = array(
        'DEPARTMENT_ID' => 10,      // Default to department 10
        'HIRE_DATE' => $date['SYSDATE'][0],
        'ALLJOBIDS' => $jobs['JOB_ID'],
        'ALLJOBTITLES' => $jobs['JOB_TITLE']
        );
    
      ui_print_header('Insert New Employee');
      ui_print_insert_employee($emp, $_SERVER['SCRIPT_NAME']);
      // Note: The two kinds of date used:
      // 1) SYSDATE for current date of the database system, and
      // 2) The PHP date for display in the footer of each page
      ui_print_footer(date('Y-m-d H:i:s'));
    }
    

    The construct_insert_emp() function executes two queries to obtain default data to be used to populate the Insert New Employee form, which is displayed by the ui_print_insert_employee() function.

    The $query of the JOBS table obtains a list of all the existing job IDs and their descriptions in order to build a list for selecting a job type in the HTML form generated by the ui_print_insert_employee() function.

    The $query using SYSDATE obtains the current database date and time for setting the default hire date of the new employee.

    There are two kinds of date used in the application code, the PHP date() function for printing the date and time in the page footer, and the Oracle SYSDATE function to obtain the default date and time for displaying in the hire date field of the Employees page and to ensure that text is entered in the correct database format.

    The two db_do_query() function calls provide an additional parameter value OCI_FETCHSTATEMENT_BY_COLUMN to specify that the return type for the query is an array of column values.

  3. Edit the anyco.php file. Add the insert_new_emp() function to insert an employee record into the EMPLOYEES table:

    function insert_new_emp()
    {
      $newemp = $_POST;
      $statement =
        "INSERT INTO employees
            (employee_id, first_name, last_name, email, hire_date,
             job_id, salary, commission_pct, department_id)
         VALUES (employees_seq.nextval, :fnm, :lnm, :eml, :hdt, :jid,
                 :sal, :cpt, :did)";
    
      $conn = db_connect();
      $emailid = $newemp['firstname'].$newemp['lastname'];
    
      $bindargs = array();
      array_push($bindargs, array('FNM', $newemp['firstname'], -1));
      array_push($bindargs, array('LNM', $newemp['lastname'], -1));
      array_push($bindargs, array('EML', $emailid, -1));
      array_push($bindargs, array('HDT', $newemp['hiredate'], -1));
      array_push($bindargs, array('JID', $newemp['jobid'], -1));
      array_push($bindargs, array('SAL', $newemp['salary'], -1));
      array_push($bindargs, array('CPT', $newemp['commpct'], -1));
      array_push($bindargs, array('DID', $newemp['deptid'], -1));
    
      $r = db_execute_statement($conn, $statement, $bindargs);
      construct_employees();
    }
    

    The return value from the db_execute_statement() function is ignored and not even assigned to a variable, because no action is performed on its result.

  4. Edit the anyco.php file. Add the construct_modify_emp() function to build the HTML form for updating an employee record.

    function construct_modify_emp()
    {
      $empid = $_POST['emprec'];
      $query =
        "SELECT employee_id, first_name, last_name, email, hire_date,
                salary, nvl(commission_pct,0) as commission_pct
         FROM   employees
         WHERE  employee_id = :empid";
    
      $conn = db_connect();
      $bindargs = array();
      array_push($bindargs, array('EMPID', $empid, -1));
    
      $emp = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_ROW, 
                                          $bindargs);
    
      ui_print_header('Modify Employee ');
      ui_print_modify_employee($emp[0], $_SERVER['SCRIPT_NAME']);
      ui_print_footer(date('Y-m-d H:i:s'));
    }
    
  5. Edit the anyco.php file. Add the modify_emp() function to update the employee record in the EMPLOYEES table, using the update form field values:

    function modify_emp()
    {
      $newemp = $_POST;
      $statement =
        "UPDATE employees
         SET   first_name = :fnm, last_name = :lnm, email = :eml,
               salary = :sal, commission_pct = :cpt
         WHERE employee_id = :eid";
    
      $conn = db_connect();
      $bindargs = array();
      array_push($bindargs, array('EID', $newemp['empid'], -1));
      array_push($bindargs, array('FNM', $newemp['firstname'], -1));
      array_push($bindargs, array('LNM', $newemp['lastname'], -1));  
      array_push($bindargs, array('EML', $newemp['email'], -1));
      array_push($bindargs, array('SAL', $newemp['salary'], -1));
      array_push($bindargs, array('CPT', $newemp['commpct'], -1));
    
      $r = db_execute_statement($conn, $statement, $bindargs);
      construct_employees();
    }
    
  6. Edit the anyco.php file. Add the delete_emp() function to delete an employee record from the EMPLOYEES table:

    function delete_emp()
    {
      $empid = $_POST['emprec'];
      $statement = "DELETE FROM employees
                    WHERE employee_id = :empid";
        $conn = db_connect();
      $bindargs = array();
      array_push($bindargs, array('EMPID', $empid, 10));
      $r = db_execute_statement($conn, $statement, $bindargs);
    
      construct_employees();
    }
    
  7. Edit the anyco.php file. In the construct_employees() function, modify the db_do_query() call to supply OCI_FETCHSTATEMENT_BY_ROW as the last parameter, and provide $_SERVER['SCRIPT_NAME'] as second parameter in the ui_print_employees() call. The function becomes:

    function construct_employees()
    {
      $query =
      "SELECT employee_id,
        substr(first_name,1,1) || '.  '|| last_name as employee_name,
        hire_date,
        to_char(salary, '9999G999D99') as salary,
        nvl(commission_pct,0) as commission_pct
       FROM   employees
       ORDER BY employee_id asc";
    
      $conn = db_connect();
      $emp = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_ROW);
    
      ui_print_header('Employees');
      ui_print_employees($emp, $_SERVER['SCRIPT_NAME']);
      ui_print_footer(date('Y-m-d H:i:s'));
    }
    
  8. Edit the anyco_db.inc file. Add $resulttype as a third parameter to the db_do_query() function. Replace the last parameter value, OCI_FETCHSTATEMENT_BY_ROW, in the oci_fetch_all() call with a variable, so that callers can choose the output type.

    function db_do_query($conn, $statement, $resulttype,
                         $bindvars = array())
    {
      $stid = oci_parse($conn, $statement);
    
      ...
    
      $r = oci_fetch_all($stid, $results, null, null, $resulttype);
      return($results);
    }
    
  9. Edit the anyco_db.inc file. Inside the db_get_page_data() function, insert OCI_FETCHSTATEMENT_BY_ROW as the third parameter value in the db_do_query() call:

    function db_get_page_data($conn, $q1, $current = 1,
                              $rowsperpage = 1, $bindvars = array())
    {
     
      ...
    
      $r = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_ROW, $bindvars);
      return($r);
    }
    
  10. Edit the anyco_db.inc file. Add a db_execute_statement() function to execute data manipulation statements such as INSERT statements:

    function db_execute_statement($conn, $statement, $bindvars = array())
    {
      $stid = oci_parse($conn, $statement);
      if (!$stid) {
        db_error($conn, __FILE__, __LINE__);
      }
        // Bind parameters
      foreach ($bindvars as $b) {
        // create local variable with caller specified bind value 
        $$b[0] = $b[1];
        $r = oci_bind_by_name($stid, ":$b[0]", $$b[0], $b[2]);
        if (!$r) {
          db_error($stid, __FILE__, __LINE__);
        }
      }
    
      $r = oci_execute($stid);
      if (!$r) {
        db_error($stid, __FILE__, __LINE__);
      }
      return($r);
    }
    
  11. Edit the anyco_ui.inc file. Change the ui_print_employees() function to produce an HTML form containing the employee rows. The function becomes:

    function ui_print_employees($employeerecords, $posturl)
    {
      if (!$employeerecords) {
        echo '<p>No Employee found</p>';
      }
      else {
        echo <<<END
      <form method="post" action="$posturl">
      <table>
      <tr>
        <th>&nbsp;</th>
        <th>Employee<br>ID</th>
        <th>Employee<br>Name</th>
        <th>Hiredate</th>
        <th>Salary</th>
        <th>Commission<br>(%)</th>
      </tr>
    END;
        // Write one row per employee
        foreach ($employeerecords as $emp) {
          echo '<tr>';
          echo '<td><input type="radio" name="emprec" value="'.
                 htmlentities($emp['EMPLOYEE_ID']).'"></td>';
          echo '<td align="right">'.
                    htmlentities($emp['EMPLOYEE_ID']).'</td>';
          echo '<td>'.htmlentities($emp['EMPLOYEE_NAME']).'</td>';
          echo '<td>'.htmlentities($emp['HIRE_DATE']).'</td>';
          echo '<td align="right">'.
                    htmlentities($emp['SALARY']).'</td>';
          echo '<td align="right">'.
                    htmlentities($emp['COMMISSION_PCT']).'</td>';
          echo '</tr>';
        }
        echo <<<END
      </table>
      <input type="submit" value="Modify" name="modifyemp">
      <input type="submit" value="Delete" name="deleteemp">
      &nbsp;&nbsp;
      <input type="submit" value="Insert new employee"
             name="insertemp">
      </form>
    END;
      }
    }
    

    A radio button is displayed in the first column of each row to enable you to select the record to be modified or deleted.

  12. Edit the anyco_ui.inc file. Add the ui_print_insert_employee() function to generate the form to input new employee data:

    function ui_print_insert_employee($emp, $posturl)
    {
      if (!$emp) {
        echo "<p>No employee details found</p>";
      }
      else {
        $deptid = htmlentities($emp['DEPARTMENT_ID']);
        $hiredate = htmlentities($emp['HIRE_DATE']);
    
        echo <<<END
      <form method="post" action="$posturl">
      <table>
        <tr>
          <td>Department ID</td>
          <td><input type="text" name="deptid" value="$deptid" 
                     size="20"></td>
        </tr>
        <tr>
          <td>First Name</td>
          <td><input type="text" name="firstname" size="20"></td>
        </tr>
        <tr>
          <td>Last Name</td>
          <td><input type="text" name="lastname" size="20"></td>
        </tr>
        <tr>
          <td>Hiredate</td>
          <td><input type="text" name="hiredate" value="$hiredate" 
                     size="20"></td>
        </tr>
        <tr>
          <td>Job</td>
           <td><select name="jobid">
    END;
        // Write the list of jobs
        for ($i = 0; $i < count($emp['ALLJOBIDS']); $i++)
        {
          echo '<option
                 label="'.htmlentities($emp['ALLJOBTITLES'][$i]).'"'.
               ' value="'.htmlentities($emp['ALLJOBIDS'][$i]).'">'.
               htmlentities($emp['ALLJOBTITLES'][$i]).'</option>';
        }
        echo <<<END
          </select>
          </td>
        </tr>
        <tr>
          <td>Salary</td>
          <td><input type="text" name="salary" value="1" 
                     size="20"></td>
        </tr>
        <tr>
          <td>Commission (%)</td>
          <td><input type="text" name="commpct" value="0" 
                     size="20"></td>
        </tr>
      </table>
        <input type="submit" value="Save" name="saveinsertemp">
        <input type="submit" value="Cancel" name="cancel">
      </form>
    END;
      }
    }
    
  13. Edit the anyco_ui.inc file. Add the ui_print_modify_employee() function to generate the form to update an employee record:

    function ui_print_modify_employee($empdetails, $posturl)
    {
      if (!$empdetails) {
        echo '<p>No Employee record selected</p>';
      }
      else {
        $fnm = htmlentities($empdetails['FIRST_NAME']);
        $lnm = htmlentities($empdetails['LAST_NAME']);
        $eml = htmlentities($empdetails['EMAIL']);
        $sal = htmlentities($empdetails['SALARY']);
        $cpt = htmlentities($empdetails['COMMISSION_PCT']);
        $eid = htmlentities($empdetails['EMPLOYEE_ID']);
    
        echo <<<END
      <form method="post" action="$posturl">
      <table>
        <tr>
          <td>Employee ID</td>
          <td>$eid</td></tr>
        <tr>
          <td>First Name</td>
          <td><input type="text" name="firstname" value="$fnm"></td>
        </tr>
        <tr>
          <td>Last Name</td>
          <td><input type="text" name="lastname" value="$lnm"></td>
        </tr>
        <tr>
          <td>Email Address</td>
          <td><input type="text" name="email" value="$eml"></td>
        </tr>
        <tr>
          <td>Salary</td>
          <td><input type="text" name="salary" value="$sal"></td>
        </tr>
        <tr>
          <td>Commission (%)</td>
          <td><input type="text" name="commpct" value="$cpt"></td>
        </tr>
      </table>
      <input type="hidden" value="{$empdetails['EMPLOYEE_ID']}" 
             name="empid">
      <input type="submit" value="Save" name="savemodifiedemp">
      <input type="submit" value="Cancel" name="cancel">
      </form>
    END;
      }
    }
    
  14. Save the changes to your Anyco application files, and test the changes by entering the following URL in your Web browser:

    On Windows:

    http://localhost/chap5/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap5/anyco.php
    

    The list of all employees is displayed with a radio button in each row.

    Description of chap5_test_emp_001.gif follows
    Description of the illustration chap5_test_emp_001.gif

    Scroll to the bottom of the Employees page to view the Modify, Delete, and Insert new employee buttons:

    Description of chap5_test_emp_002.gif follows
    Description of the illustration chap5_test_emp_002.gif

  15. To insert a new employee record, click Insert new employee:

    Description of chap5_test_emp_003.gif follows
    Description of the illustration chap5_test_emp_003.gif

    When you create or modify employee records, you will see that the database definitions require the salary to be greater than zero, and the commission to be less than 1. The commission will be rounded to two decimal places. In the Insert New Employee page, the Department ID field contains 10 (the default), Hiredate contains the current date (in default database date format), Salary contains 1, and Commission (%) contains 0. Enter the following field values:

    First Name: James

    Last Name: Bond

    Job: Select Programmer from the list.

    Salary: replace the 1 with 7000

    Click Save.

    Description of chap5_test_emp_004.gif follows
    Description of the illustration chap5_test_emp_004.gif

  16. When the new employee record is successfully inserted, the Web page is refreshed with the form listing all employees. Scroll the Web page to the last record and check that the new employee record is present. The employee ID assigned to the new record on your system may be different than the one shown in the following example:

    Description of chap5_test_emp_005.gif follows
    Description of the illustration chap5_test_emp_005.gif

  17. To modify the new employee record, select the radio button next to the new employee record, and click Modify:

    Description of chap5_test_emp_006.gif follows
    Description of the illustration chap5_test_emp_006.gif

  18. In the Modify Employee page, modify the Email Address field to JBOND, increase the Salary to 7100, and click Save:

    Description of chap5_test_emp_007.gif follows
    Description of the illustration chap5_test_emp_007.gif

  19. Successfully updating the employee record causes the Employees page to be redisplayed. Scroll to the last employee record and confirm that the salary for James Bond is now 7,100:

    Description of chap5_test_emp_008.gif follows
    Description of the illustration chap5_test_emp_008.gif

  20. To remove the new employee record, select the radio button for the new employee record, and click Delete:

    Description of chap5_test_emp_009.gif follows
    Description of the illustration chap5_test_emp_009.gif

    On successful deletion, the deleted row does not appear in the list of employee records redisplayed in the Employees page:

    Description of chap5_test_emp_010.gif follows
    Description of the illustration chap5_test_emp_010.gif

Combining Departments and Employees

In this section, you will modify your application to enable access to both Employees and Departments pages.

To combine the Departments and Employees pages, perform the following tasks:

  1. Edit the anyco.php file. Modify the query in the construct_employees() function to include a WHERE clause to compare the department_id with a value in a bind variable called :did. This makes the page display employees in one department at a time. Get the deptid session parameter value to populate the bind variable:

    $query =
     "SELECT employee_id, 
             substr(first_name,1,1) || '.  '|| last_name as employee_name,
             hire_date,
             to_char(salary, '9999G999D99') as salary, 
             nvl(commission_pct,0) as commission_pct
      FROM   employees
      WHERE  department_id = :did
      ORDER BY employee_id asc";
    
    $deptid = $_SESSION['deptid'];
    
  2. Edit the anyco.php file. In the construct_employees() function, update the call to the db_do_query() function to pass the bind information:

    $conn = db_connect();
    
    $bindargs = array();
    array_push($bindargs, array('DID', $deptid, -1));
    
    $emp = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_ROW, $bindargs);
    
  3. Edit the anyco.php file. In the construct_departments() function, save the department identifier in a session parameter:

    $_SESSION['currentdept'] = $current;
    $_SESSION['deptid'] = $deptid;
    

    This saves the current department identifier from the Departments page as a session parameter, which is used in the Employees page.

  4. Edit the anyco.php file. Create a function get_dept_name() to query the department name for printing in the Departments and Employees page titles:

    function get_dept_name($conn, $deptid)
    {
      $query =
        'SELECT department_name
         FROM   departments
         WHERE  department_id = :did';
    
      $conn = db_connect();
      $bindargs = array();
      array_push($bindargs, array('DID', $deptid, -1));
      $dn = db_do_query($conn, $query,OCI_FETCHSTATEMENT_BY_COLUMN, $bindargs);
    
      return($dn['DEPARTMENT_NAME'][0]);
    }
    
  5. Edit the anyco.php file. Modify the construct_employees() function to print the department name in the Employees page heading:

    $deptname = get_dept_name($conn, $deptid);
    ui_print_header('Employees: '.$deptname);
    
  6. Edit the anyco.php file. Modify the construct_departments() function to print the department name in the Departments page heading:

    $deptname = get_dept_name($conn, $deptid);
    ui_print_header('Department: '.$deptname);
    
  7. Edit the anyco.php file. Modify the construct_insert_emp() function so that the default department is obtained from the session parameter passed in the $emp array to the ui_print_insert_employee() function. The function becomes:

    function construct_insert_emp()
    {
      $deptid = $_SESSION['deptid'];
    
      $conn = db_connect();
      $query = "SELECT job_id, job_title FROM jobs ORDER BY job_title ASC";
      $jobs = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_COLUMN);
      $query = "SELECT sysdate FROM dual";
      $date = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_COLUMN);
      $emp = array(
        'DEPARTMENT_ID' => $deptid,
        'HIRE_DATE' => $date['SYSDATE'][0],
        'ALLJOBIDS' => $jobs['JOB_ID'],
        'ALLJOBTITLES' => $jobs['JOB_TITLE']
        );
      ui_print_header('Insert New Employee');
      ui_print_insert_employee($emp, $_SERVER['SCRIPT_NAME']);
      ui_print_footer(date('Y-m-d H:i:s'));
    }
    
  8. Edit the anyco.php file. Modify the final else statement in the HTML form handler. The handler becomes:

    // Start form handler code
    if (isset($_POST['insertemp'])) {
      construct_insert_emp();
    }
    elseif (isset($_POST['saveinsertemp'])) {
      insert_new_emp();
    }
    elseif (isset($_POST['modifyemp'])) {
      construct_modify_emp();
    }
    elseif (isset($_POST['savemodifiedemp'])) {
      modify_emp();
    }
    elseif (isset($_POST['deleteemp'])) {
      delete_emp();
    }
    elseif (   isset($_POST['showemp'])) {
      construct_employees();
    }
    elseif (   isset($_POST['nextdept'])
            || isset($_POST['prevdept'])
            || isset($_POST['firstdept'])
            || isset($_POST['showdept'])) {
      construct_departments();
    }
    else {
      construct_departments();
    }
    
  9. Edit the anyco_ui.inc file. In the ui_print_department() function, change the HTML form to enable it to call the Employees page:

    ...
    <form method="post" action="$posturl">
    <input type="submit" value="First" name="firstdept">
    <input type="submit" value="< Previous" name="prevdept">
    <input type="submit" value="Next >" name="nextdept">
    &nbsp;&nbsp;&nbsp;
    <input type="submit" value="Show Employees" name="showemp">
    </form>
    ...
    
  10. Edit the anyco_ui.inc file. In the ui_print_employees() function, change the HTML form to enable it to call the Departments page:

    ...
    </table>
    <input type="submit" value="Modify" name="modifyemp">
    <input type="submit" value="Delete" name="deleteemp">
    &nbsp;&nbsp;
    <input type="submit" value="Insert new employee" name="insertemp">
    &nbsp;&nbsp;
    <input type="submit" value="Return to Departments" name="showdept">
    </form>
    ...
    
  11. Save the changes to your PHP files. In your browser, test the changes by entering the following URL:

    On Windows:

    http://localhost/chap5/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap5/anyco.php
    

    The Departments page is displayed.

    Description of chap5_combine_deptemp_001.gif follows
    Description of the illustration chap5_combine_deptemp_001.gif

    To display a list of employees in the department, click the Show Employees button.

    Description of chap5_combine_deptemp_002.gif follows
    Description of the illustration chap5_combine_deptemp_002.gif

    You can return to the Departments page by clicking the Return to Departments button. Experiment by navigating to another department and listing its employees to show the process of switching between the Departments and Employees pages.

Adding Error Recovery

Error management is always a significant design decision. In production systems, you might want to classify errors and handle them in different ways. Fatal errors could be redirected to a standard "site not available" page or home page. Data errors for new record creation might return to the appropriate form with invalid fields highlighted.

In most production systems, you would set the display_errors configuration option in the php.ini file to off, and the log_errors configuration option to on.

You can use the PHP output buffering functionality to trap error text when a function is executing. Using ob_start() prevents text from displaying on the screen. If an error occurs, the ob_get_contents() function allows the previously generated error messages to be stored in a string for later display or analysis.

Now you change the application to display error messages and database errors on a new page using a custom error handling function. Errors are now returned from the db* functions keeping them silent.

  1. Edit the anyco_db.inc file. Change the db_error() function to return the error information in an array structure, instead of printing and quitting. The function becomes:

    function db_error($r = false, $file, $line)
    {
      $err =  $r ? oci_error($r) : oci_error();
    
      if (isset($err['message'])) {
        $m = htmlentities($err['message']);
        $c = $err['code'];
      }
      else {
        $m = 'Unknown DB error';
        $c = null;
      }
    
      $rc = array(
        'MESSAGE' => $m,
        'CODE'    => $c,
        'FILE'    => $file,
        'LINE'    => $line
        );
      return $rc;
    }
    
  2. Edit the anyco_db.inc file. For every call to the db_error() function, assign the return value to a variable called $e and add a return false; statement after each call:

    if (<error test>)
    {
      $e = db_error(<handle>, __FILE__, __LINE__);
      return false;
    }
    

    Make sure to keep the <error test> and <handle> parameters the same as they are currently specified for each call. Remember that the __FILE__ and __LINE__ constants help to pinpoint the location of the failure during development. This is useful information to log for fatal errors in a production deployment of an application.

  3. Edit the anyco_db.inc file. Add a $e parameter to every function to enable the return of error information. Use the & reference prefix to ensure that results are returned to the calling function. Each function declaration becomes:

    function db_connect(&$e) {...}
    
    function db_get_page_data($conn, $q1, $currrownum = 1, $rowsperpage = 1,
                              &$e, $bindvars = array()) {...}
    
    function db_do_query($conn, $statement, $resulttype, &$e,
                         $bindvars = array()) {...}
    
    function db_execute_statement($conn, $statement, &$e,
                                  $bindvars = array()) {...}
    
  4. Edit the anyco_db.inc file. In the db_get_page_data() function, change the call to the db_do_query() function to pass down the error parameter $e:

    $r = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_ROW, $e, $bindvars);
    
  5. Edit the anyco_db.inc file. Add an @ prefix to all oci_* function calls. For example:

    @ $r = @oci_execute($stid);
    

    The @ prefix prevents errors from displaying because each return result is tested. Preventing errors from displaying can hide incorrect parameter usage, which may hinder testing the changes in this section. You do not need to add @ prefixes, but it can effect future results when errors are displayed.

  6. Edit the anyco.php file. Create a function to handle the error information:

    function handle_error($message, $err)
    {
      ui_print_header($message);
      ui_print_error($err, $_SERVER['SCRIPT_NAME']);
      ui_print_footer(date('Y-m-d H:i:s'));
    }
    
  7. Edit the anyco.php file. Modify all calls to db_* functions to include the additional error parameter:

    Steps 8 to 15 show the complete new functions, so the code changes in this step can be skipped.

    • Change all db_connect() calls to db_connect($err).

    • Change all db_do_query() calls and insert a $err parameter as the fourth parameter. For example, the call in construct_employees() becomes:

      $emp = db_do_query($conn, $query, 
                         OCI_FETCHSTATEMENT_BY_ROW, $err, $bindargs);
      

      Change the other four db_do_query() calls in anyco.php remembering to keep the existing parameter values of each specific call.

    • Change the db_get_page_data() call and insert a $err parameter as the fifth parameter:

      $dept = db_get_page_data($conn, $query, $current, 1, $err);
      
    • Change the db_execute_statement() calls and insert a $err parameter as the third parameter, for example:

      $r = db_execute_statement($conn, $statement, $err, $bindargs);
      
  8. Edit the anyco.php file. Modify the construct_departments() function to handle errors returned. The function becomes:

    function construct_departments()
    {
      if (isset($_SESSION['currentdept']) && isset($_POST['prevdept']) && 
                $_SESSION['currentdept'] > 1)
         $current = $_SESSION['currentdept'] - 1;
      elseif (isset($_SESSION['currentdept']) && isset($_POST['nextdept']))
         $current = $_SESSION['currentdept'] + 1;
      elseif (isset($_POST['showdept']) && isset($_SESSION['currentdept']))
         $current = $_SESSION['currentdept'];
      else
         $current = 1;
    
      $query =
        "SELECT d.department_id, d.department_name,
                substr(e.first_name,1,1)||'. '|| e.last_name as manager_name,
                c.country_name, count(e2.employee_id) as number_of_employees
         FROM   departments d, employees e, locations l, 
                countries c, employees e2
         WHERE  d.manager_id    = e.employee_id
         AND    d.location_id   = l.location_id
         AND    d.department_id = e2.department_id
         AND    l.country_id    = c.country_id
         GROUP BY d.department_id, d.department_name,
                  substr(e.first_name,1,1)||'. '||e.last_name, c.country_name
         ORDER BY d.department_id ASC";
    
      $conn = db_connect($err);
    
      if (!$conn) {
        handle_error('Connection Error', $err);
      }
      else {
        $dept = db_get_page_data($conn, $query, $current, 1, $err);
        if ($dept === false) {  
          // Use === so empty array at end of fetch is not matched
          handle_error('Cannot fetch Departments', $err);
        } else {
    
          if (!isset($dept[0]['DEPARTMENT_ID']) && $current > 1) {  
            // no more records so go back one
    
            $current--;
            $dept = db_get_page_data($conn, $query, $current, 1, $err);
          }
    
          $deptid = $dept[0]['DEPARTMENT_ID'];
    
          $_SESSION['deptid'] = $deptid;
          $_SESSION['currentdept'] = $current;
    
          $deptname = get_dept_name($conn, $deptid);
          ui_print_header('Department: '.$deptname);
          ui_print_department($dept[0], $_SERVER['SCRIPT_NAME']);
          ui_print_footer(date('Y-m-d H:i:s'));
        }
      }
    }
    
  9. Edit the anyco.php file. Modify the construct_employees() function to handle errors. The function becomes:

    function construct_employees()
    {
      $query =
        "SELECT employee_id,
                substr(first_name,1,1) || '.  '|| last_name as employee_name,
                hire_date,
                to_char(salary, '9999G999D99') as salary,
                nvl(commission_pct,0) as commission_pct
         FROM   employees
         WHERE  department_id = :did
         ORDER BY employee_id asc";
    
      $deptid = $_SESSION['deptid'];
    
      $conn = db_connect($err);
    
      if (!$conn) {
        handle_error('Connection Error', $err);
      }
      else {
        $bindargs = array();
        array_push($bindargs, array('DID', $deptid, -1));
        $emp = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_ROW, $err,
        $bindargs);
    
        if (!$emp) {
          handle_error('Cannot fetch Employees', $err);
        }
        else {
          $deptname = get_dept_name($conn, $deptid);
          ui_print_header('Employees: '.$deptname);
          ui_print_employees($emp, $_SERVER['SCRIPT_NAME']);
          ui_print_footer(date('Y-m-d H:i:s'));
        }
      }
    }
    
  10. Edit the anyco.php file. Modify the construct_insert_emp() function to handle errors. The function becomes:

    function construct_insert_emp()
    {
      $deptid = $_SESSION['deptid'];
      $conn = db_connect($err);
      if (!$conn) {
        handle_error('Connection Error', $err);
      }
      else {
        $query = "SELECT job_id, job_title FROM jobs ORDER BY job_title ASC";
        $jobs = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_COLUMN, $err);
        $query = "SELECT sysdate FROM dual";
        $date = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_COLUMN, $err);
    
        $emp = array(
          'DEPARTMENT_ID' => $deptid,
          'HIRE_DATE' => $date['SYSDATE'][0],
          'ALLJOBIDS' => $jobs['JOB_ID'],
          'ALLJOBTITLES' => $jobs['JOB_TITLE']
          );
    
        ui_print_header('Insert New Employee');
        ui_print_insert_employee($emp, $_SERVER['SCRIPT_NAME']);
        ui_print_footer(date('Y-m-d H:i:s'));
      }
    }
    
  11. Edit the anyco.php file. Modify the insert_new_emp() function to handle errors. The function becomes:

    function insert_new_emp()
    {
      $statement =
        'INSERT INTO employees
                     (employee_id, first_name, last_name, email, hire_date,
                     job_id, salary, commission_pct, department_id)
         VALUES (employees_seq.nextval, :fnm, :lnm, :eml, :hdt,
                :jid, :sal, :cpt, :did)';
    
      $newemp = $_POST;
    
      $conn = db_connect($err);
      if (!$conn) {
        handle_error('Connect Error', $err);
      }
      else {
        $emailid = $newemp['firstname'].$newemp['lastname'];
    
        $bindargs = array();
        array_push($bindargs, array('FNM', $newemp['firstname'], -1));
        array_push($bindargs, array('LNM', $newemp['lastname'], -1));
        array_push($bindargs, array('EML', $emailid, -1));
        array_push($bindargs, array('HDT', $newemp['hiredate'], -1));
        array_push($bindargs, array('JID', $newemp['jobid'], -1));
        array_push($bindargs, array('SAL', $newemp['salary'], -1));
        array_push($bindargs, array('CPT', $newemp['commpct'], -1));
        array_push($bindargs, array('DID', $newemp['deptid'], -1));
    
        $r = db_execute_statement($conn, $statement, $err, $bindargs);
        if ($r) {
          construct_employees();
        }
        else {
          handle_error('Cannot insert employee', $err);
        }
      }
    }
    
  12. Edit the anyco.php function. Modify the construct_modify_emp() function to handle errors. The function becomes:

    function construct_modify_emp()
    {
      if (!isset($_POST['emprec'])) { // User did not select a record
        construct_employees();
      }
      else {
        $empid = $_POST['emprec'];
    
        $query =
          "SELECT employee_id, first_name, last_name, email, hire_date,
                  salary, nvl(commission_pct,0) as commission_pct
           FROM   employees
           WHERE  employee_id = :empid";
    
        $conn = db_connect($err);
        if (!$conn) {
          handle_error('Connect Error', $err);
        }
        else {
          $bindargs = array();
          array_push($bindargs, array('EMPID', $empid, -1));
    
          $emp = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_ROW, $err,
                 $bindargs);
    
          if (!$emp) {
            handle_error('Cannot find details for employee '.$empid, $err);
          }
          else {
            ui_print_header('Modify Employee ');
            ui_print_modify_employee($emp[0], $_SERVER['SCRIPT_NAME']);
            ui_print_footer(date('Y-m-d H:i:s'));
          }
        }
      }
    }
    
  13. Edit the anyco.php file. Change the modify_emp() function to handle errors. The function becomes:

    function modify_emp()
    {
      $newemp = $_POST;
    
      $statement =
        "UPDATE employees
         SET    first_name = :fnm, last_name = :lnm, email = :eml,
                salary = :sal, commission_pct = :cpt
         WHERE  employee_id = :eid";
    
      $conn = db_connect($err);
      if (!$conn) {
        handle_error('Connect Error', $err);
      }
      else {
        $bindargs = array();
        array_push($bindargs, array('EID', $newemp['empid'], -1));
        array_push($bindargs, array('FNM', $newemp['firstname'], -1));
        array_push($bindargs, array('LNM', $newemp['lastname'], -1));
        array_push($bindargs, array('EML', $newemp['email'], -1));
        array_push($bindargs, array('SAL', $newemp['salary'], -1));
        array_push($bindargs, array('CPT', $newemp['commpct'], -1));
    
        $r = db_execute_statement($conn, $statement, $err, $bindargs);
    
        if (!$r) {
          handle_error('Cannot update employee '.$newemp['empid'], $err);
        }
        else {
          construct_employees();
        }
      }
    }
    
  14. Edit the anyco.php file. Modify the delete_emp() function to handle errors. The function becomes:

    function delete_emp()
    {
      if (!isset($_POST['emprec'])) { // User did not select a record
        construct_employees();
      }
      else {
        $empid = $_POST['emprec'];
    
        $conn = db_connect($err);
        if (!$conn) {
          handle_error('Connection Error', $err);
        }
        else {
          $statement = "DELETE FROM employees WHERE employee_id = :empid";
          $bindargs = array();
          array_push($bindargs, array('EMPID', $empid, -1));
          $r = db_execute_statement($conn, $statement, $err, $bindargs);
    
          if (!$r) {
            handle_error("Error deleting employee $empid", $err);
          }
          else {
            construct_employees();
          }
        }
      }
    }
    
  15. Edit the anyco.php file. Modify the get_dept_name() function to handle errors. The function becomes:

    function get_dept_name($conn, $deptid)
    {
      $query =
        'SELECT department_name
         FROM   departments
         WHERE  department_id = :did';
    
      $conn = db_connect($err);
      if (!$conn) {
        return ('Unknown');
      }
      else {
        $bindargs = array();
        array_push($bindargs, array('DID', $deptid, -1));
        $dn = db_do_query($conn, $query, OCI_FETCHSTATEMENT_BY_COLUMN,
                          $err, $bindargs);
        if ($dn == false)
          return ('Unknown');
        else
          return($dn['DEPARTMENT_NAME'][0]);
      }
    }
    
  16. Edit the anyco_ui.inc file. Add a new function ui_print_error():

    function ui_print_erroZr($message, $posturl)
    {
      if (!$message) {
        echo '<p>Unknown error</p>';
      }
      else {
        echo "<p>Error at line {$message['LINE']} of "
             ."{$message['FILE']}</p>";  // Uncomment for debugging
        echo "<p>{$message['MESSAGE']}</p>";
      }
      echo <<<END
      <form method="post" action="$posturl">
      <input type="submit" value="Return to Departments" name="showdept">
    END;
    }
    

    Remember not to put leading spaces in the END; line. Leading spaces in the END;line cause the rest of the document to be treated as part of the text to be printed.

  17. Save the changes to your application files. Test the changes by entering the following URL in your browser:

    On Windows:

    http://localhost/chap5/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap5/anyco.php
    

    The Departments page is displayed:

    Description of chap5_err_handling_001.gif follows
    Description of the illustration chap5_err_handling_001.gif

  18. Click Next to navigate to the last department record, the Accounting department with ID 110. Try to navigate past the last department record by clicking Next.

    Description of chap5_err_handling_002.gif follows
    Description of the illustration chap5_err_handling_002.gif

    The error handling prevents navigation past the last department record.

  19. If a new employee is inserted with a salary of 0, or the department ID is changed to one that does not exist, the new error page is shown with the heading "Cannot insert employee".

Further Error Handling

Specific Oracle errors can be handled individually. For example, if a new employee record is created by clicking the Insert new employee button on the Employees page, and the Department ID is changed to a department that does not exist, you can trap this error and display a more meaningful message:

  1. Edit the anyco.php file. Change the error handling in the insert_new_emp() function:

        $r = db_execute_statement($conn, $statement, $err, $bindargs);
        if ($r) {
          construct_employees();
        }
        else {
          if ($err['CODE'] == 2291) {  // Foreign key violated
            handle_error("Department {$newemp['deptid']} does not yet exist",
            $err);
          } 
          else {
            handle_error('Cannot insert employee', $err);
          }
        }
    
  2. Save the changes to your application files. Test the changes by entering the following URL:

    On Windows:

    http://localhost/chap5/anyco.php
    

    On Linux:

    http://localhost/~<username>/chap5/anyco.php
    
  3. In the Departments page, click Show Employees.

    Description of chap5_err_handling_003.gif follows
    Description of the illustration chap5_err_handling_003.gif

  4. In the Employees page, click Insert new employee.

    Description of chap5_err_handling_004.gif follows
    Description of the illustration chap5_err_handling_004.gif

  5. In the Insert New Employee page, enter employee details as shown, setting the Department ID to 99, and click Save.

    Description of chap5_err_handling_005.gif follows
    Description of the illustration chap5_err_handling_005.gif

    The following error page is displayed:

    Description of chap5_err_handling_006.gif follows
    Description of the illustration chap5_err_handling_006.gif

    You can click Return to Departments to return to the Departments page and then click Show Employees to verify that the new employee record has not been added to the Administration department.

PKQYPK **Aoa,mimetypePK**AXS:iTunesMetadata.plistPK**AYuMETA-INF/container.xmlPK**A8A3AOEBPS/ch_six.htmPK**A[pTOuGOEBPS/cover.htmPK**A^VZZJOEBPS/ch_seven.htmPK**A!qq?OEBPS/ch_eight.htmPK**A%P OEBPS/ch_four.htmPK**A83OEBPS/title.htmPK**A1H5RR_OEBPS/ch_three.htmPK**AD-[OEBPS/preface.htmPK**A% \0OEBPS/index.htmPK**A=LL!:OEBPS/img/chap5_basic_emp_001.gifPK**A((!SOEBPS/img/chap6_refcursor_007.gifPK**AJp`!!(|OEBPS/img/chap6_stored_proc_test_002.gifPK**AwUrUԞOEBPS/img/chap2_install_001.gifPK**A̴rt.o.'OEBPS/img/chap5_combine_deptemp_002.gifPK**A<J..'a#OEBPS/img/chap5_combine_deptemp_001.gifPK**AUUROEBPS/img/chap7_loadimg_023.gifPK**A6 OEBPS/img/chap5_test_emp_010.gifPK**A$LCw(r($OEBPS/img/chap4_enhance_dept_001.gifPK**A!yOEBPS/img/chap6_refcursor_005.gifPK**Ato"OEBPS/img/chap4_db_connect_002.gifPK**AAǺHHT OEBPS/img/chap7_loadimg_009.gifPK**ASmvl![iOEBPS/img/chap7_hrcreatetable.gifPK**ApN/I/$ OEBPS/img/chap5_err_handling_003.gifPK**Aq&OEBPS/img/chap7_loadimg_018.gifPK**A/@OJFOEBPS/img/chap7_loadimg_005.gifPK**A=  rfOEBPS/img/chap5_test_emp_006.gifPK**A&2c'^'OEBPS/img/chap7_loadimg_020.gifPK**A^?j@e@OEBPS/img/chap7_loadimg_008.gifPK**A | &&GOEBPS/img/chap7_loadimg_007.gifPK**Ao*SOEBPS/img/chap6_hrcalcrem.gifPK**ADƵ$/OEBPS/img/chap3_test_install_005.gifPK**ADS 6OEBPS/img/chap5_test_emp_005.gifPK**AG,/l5g5$zOEBPS/img/chap2_test_install_013.gifPK**A)SN 8OEBPS/img/chap5_test_emp_003.gifPK**A64 OEBPS/img/chap5_test_emp_008.gifPK**A4@@ OEBPS/img/chap7_loadimg_021.gifPK**Aǚ aOEBPS/img/chap5_test_emp_007.gifPK**A⍀;''ρOEBPS/img/chap7_loadimg_006.gifPK**AyG̨to%OEBPS/img/chap4_db_nagivation_001.gifPK**Ab ,upOEBPS/img/chap2_install_002.gifPK**Al"4///$OEBPS/img/chap5_err_handling_004.gifPK**ALH  OEBPS/img/chap5_test_emp_009.gifPK**AֺfA/X OEBPS/img/chap2_hello_001.gifPK**Aᢿ OEBPS/img/chap6_hrgrantproc.gifPK**AԀ( OEBPS/img/chap6_stored_proc_test_001.gifPK**A_"%} OEBPS/img/chap4_db_nagivation_002.gifPK**A#_ OEBPS/img/chap2_install_003.gifPK**Aoҁgg OEBPS/img/chap2_unlock.gifPK**A7)S K OEBPS/img/chap6_hrcreatepack.gifPK**AW ..$K OEBPS/img/chap5_err_handling_002.gifPK**AN OEBPS/ch_one.htmPK**A ]]r'OEBPS/ch_two.htmPK**A$qOEBPS/img_text/chap6_hrgrantproc.htmPK**Ag)sOEBPS/img_text/chap4_enhance_dept_001.htmPK**AڻE@$TOEBPS/img_text/chap7_loadimg_020.htmPK**AA#$-OEBPS/img_text/chap6_stored_proc_test_002.htmPK**A;?:$)OEBPS/img_text/chap7_loadimg_007.htmPK**AV8"&OEBPS/img_text/chap6_refcursor_005.htmPK**A"%OEBPS/img_text/chap6_hrcreatebody.htmPK**ATl$OEBPS/img_text/chap2_install_003.htmPK**A?2%GOEBPS/img_text/chap5_test_emp_009.htmPK**A2%nOEBPS/img_text/chap5_test_emp_010.htmPK**A>K%eOEBPS/img_text/chap5_test_emp_004.htmPK**AQK#&OEBPS/img_text/chap5_basic_emp_001.htmPK**AToӵ,OEBPS/img_text/chap5_combine_deptemp_001.htmPK**AB)OEBPS/img_text/chap5_err_handling_005.htmPK**A`[$OEBPS/img_text/chap7_loadimg_009.htmPK**AѴo,OEBPS/img_text/chap5_combine_deptemp_002.htmPK**A83%OEBPS/img_text/chap5_test_emp_001.htmPK**Aox[V*:OEBPS/img_text/chap4_db_nagivation_003.htmPK**Atؔ2ni$OEBPS/img_text/chap7_loadimg_008.htmPK**A[AKF%OEBPS/img_text/chap5_test_emp_007.htmPK**AE}Y$KOEBPS/img_text/chap7_loadimg_005.htmPK**A}ܹ)9OEBPS/img_text/chap5_err_handling_006.htmPK**AE]#OEBPS/img_text/chap1_phpapp_001.htmPK**A3#QOEBPS/img_text/chap2_unlock.htmPK**A,])OEBPS/img_text/chap5_err_handling_002.htmPK**A^Y"OEBPS/img_text/chap6_hrcalcrem.htmPK**AD)OEBPS/img_text/chap5_err_handling_004.htmPK**A? ,%OEBPS/img_text/chap5_test_emp_003.htmPK**A4*2 OEBPS/img_text/chap4_db_nagivation_002.htmPK**A)OEBPS/img_text/chap5_err_handling_001.htmPK**A'"&TOEBPS/img_text/chap6_refcursor_007.htmPK**A-C%RM%OEBPS/img_text/chap6_hrcreatepack.htmPK**AVd'$tOEBPS/img_text/chap7_loadimg_018.htmPK**AJC>$!OEBPS/img_text/chap7_loadimg_022.htmPK**Arq'2'OEBPS/img_text/chap4_db_connect_002.htmPK**AN$$+OEBPS/img_text/chap2_install_002.htmPK**AW]%-OEBPS/img_text/chap5_test_emp_006.htmPK**A &b2OEBPS/img_text/chap6_refcursor_006.htmPK**A)"=7OEBPS/img_text/chap2_hello_001.htmPK**A7'h9OEBPS/img_text/chap3_db_connect_001.htmPK**A+ʵ)H=OEBPS/img_text/chap3_test_install_005.htmPK**Ax#%@OEBPS/img_text/chap5_test_emp_005.htmPK**A